{
  "version": 3,
  "sources": ["../../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js", "../../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/common.js", "../../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/browser.js", "../../../node_modules/.pnpm/has-flag@4.0.0/node_modules/has-flag/index.js", "../../../node_modules/.pnpm/supports-color@7.2.0/node_modules/supports-color/index.js", "../../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/node.js", "../../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/index.js", "../../../node_modules/.pnpm/depd@2.0.0/node_modules/depd/index.js", "../../../node_modules/.pnpm/setprototypeof@1.2.0/node_modules/setprototypeof/index.js", "../../../node_modules/.pnpm/statuses@2.0.2/node_modules/statuses/codes.json", "../../../node_modules/.pnpm/statuses@2.0.2/node_modules/statuses/index.js", "../../../node_modules/.pnpm/inherits@2.0.4/node_modules/inherits/inherits_browser.js", "../../../node_modules/.pnpm/inherits@2.0.4/node_modules/inherits/inherits.js", "../../../node_modules/.pnpm/toidentifier@1.0.1/node_modules/toidentifier/index.js", "../../../node_modules/.pnpm/http-errors@2.0.1/node_modules/http-errors/index.js", "../../../node_modules/.pnpm/bytes@3.1.2/node_modules/bytes/index.js", "../../../node_modules/.pnpm/safer-buffer@2.1.2/node_modules/safer-buffer/safer.js", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/lib/bom-handling.js", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/lib/helpers/merge-exports.js", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/internal.js", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/utf32.js", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/utf16.js", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/utf7.js", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/sbcs-codec.js", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/sbcs-data.js", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/sbcs-data-generated.js", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/dbcs-codec.js", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/tables/shiftjis.json", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/tables/eucjp.json", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/tables/cp936.json", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/tables/gbk-added.json", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/tables/cp949.json", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/tables/cp950.json", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/tables/big5-added.json", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/dbcs-data.js", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/encodings/index.js", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/lib/streams.js", "../../../node_modules/.pnpm/iconv-lite@0.7.2/node_modules/iconv-lite/lib/index.js", "../../../node_modules/.pnpm/unpipe@1.0.0/node_modules/unpipe/index.js", "../../../node_modules/.pnpm/raw-body@3.0.2/node_modules/raw-body/index.js", "../../../node_modules/.pnpm/ee-first@1.1.1/node_modules/ee-first/index.js", "../../../node_modules/.pnpm/on-finished@2.4.1/node_modules/on-finished/index.js", "../../../node_modules/.pnpm/content-type@1.0.5/node_modules/content-type/index.js", "../../../node_modules/.pnpm/mime-db@1.54.0/node_modules/mime-db/db.json", "../../../node_modules/.pnpm/mime-db@1.54.0/node_modules/mime-db/index.js", "../../../node_modules/.pnpm/mime-types@3.0.2/node_modules/mime-types/mimeScore.js", "../../../node_modules/.pnpm/mime-types@3.0.2/node_modules/mime-types/index.js", "../../../node_modules/.pnpm/media-typer@1.1.0/node_modules/media-typer/index.js", "../../../node_modules/.pnpm/type-is@2.0.1/node_modules/type-is/index.js", "../../../node_modules/.pnpm/body-parser@2.2.2/node_modules/body-parser/lib/utils.js", "../../../node_modules/.pnpm/body-parser@2.2.2/node_modules/body-parser/lib/read.js", "../../../node_modules/.pnpm/body-parser@2.2.2/node_modules/body-parser/lib/types/json.js", "../../../node_modules/.pnpm/body-parser@2.2.2/node_modules/body-parser/lib/types/raw.js", "../../../node_modules/.pnpm/body-parser@2.2.2/node_modules/body-parser/lib/types/text.js", "../../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/type.js", "../../../node_modules/.pnpm/object-inspect@1.13.4/node_modules/object-inspect/util.inspect.js", "../../../node_modules/.pnpm/object-inspect@1.13.4/node_modules/object-inspect/index.js", "../../../node_modules/.pnpm/side-channel-list@1.0.0/node_modules/side-channel-list/index.js", "../../../node_modules/.pnpm/es-object-atoms@1.1.1/node_modules/es-object-atoms/index.js", "../../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/index.js", "../../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/eval.js", "../../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/range.js", "../../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/ref.js", "../../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/syntax.js", "../../../node_modules/.pnpm/es-errors@1.3.0/node_modules/es-errors/uri.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/abs.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/floor.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/max.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/min.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/pow.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/round.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/isNaN.js", "../../../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/sign.js", "../../../node_modules/.pnpm/gopd@1.2.0/node_modules/gopd/gOPD.js", "../../../node_modules/.pnpm/gopd@1.2.0/node_modules/gopd/index.js", "../../../node_modules/.pnpm/es-define-property@1.0.1/node_modules/es-define-property/index.js", "../../../node_modules/.pnpm/has-symbols@1.1.0/node_modules/has-symbols/shams.js", "../../../node_modules/.pnpm/has-symbols@1.1.0/node_modules/has-symbols/index.js", "../../../node_modules/.pnpm/get-proto@1.0.1/node_modules/get-proto/Reflect.getPrototypeOf.js", "../../../node_modules/.pnpm/get-proto@1.0.1/node_modules/get-proto/Object.getPrototypeOf.js", "../../../node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/implementation.js", "../../../node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/index.js", "../../../node_modules/.pnpm/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/functionCall.js", "../../../node_modules/.pnpm/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/functionApply.js", "../../../node_modules/.pnpm/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/reflectApply.js", "../../../node_modules/.pnpm/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/actualApply.js", "../../../node_modules/.pnpm/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/index.js", "../../../node_modules/.pnpm/dunder-proto@1.0.1/node_modules/dunder-proto/get.js", "../../../node_modules/.pnpm/get-proto@1.0.1/node_modules/get-proto/index.js", "../../../node_modules/.pnpm/hasown@2.0.2/node_modules/hasown/index.js", "../../../node_modules/.pnpm/get-intrinsic@1.3.0/node_modules/get-intrinsic/index.js", "../../../node_modules/.pnpm/call-bound@1.0.4/node_modules/call-bound/index.js", "../../../node_modules/.pnpm/side-channel-map@1.0.1/node_modules/side-channel-map/index.js", "../../../node_modules/.pnpm/side-channel-weakmap@1.0.2/node_modules/side-channel-weakmap/index.js", "../../../node_modules/.pnpm/side-channel@1.1.0/node_modules/side-channel/index.js", "../../../node_modules/.pnpm/qs@6.15.0/node_modules/qs/lib/formats.js", "../../../node_modules/.pnpm/qs@6.15.0/node_modules/qs/lib/utils.js", "../../../node_modules/.pnpm/qs@6.15.0/node_modules/qs/lib/stringify.js", "../../../node_modules/.pnpm/qs@6.15.0/node_modules/qs/lib/parse.js", "../../../node_modules/.pnpm/qs@6.15.0/node_modules/qs/lib/index.js", "../../../node_modules/.pnpm/body-parser@2.2.2/node_modules/body-parser/lib/types/urlencoded.js", "../../../node_modules/.pnpm/body-parser@2.2.2/node_modules/body-parser/index.js", "../../../node_modules/.pnpm/merge-descriptors@2.0.0/node_modules/merge-descriptors/index.js", "../../../node_modules/.pnpm/encodeurl@2.0.0/node_modules/encodeurl/index.js", "../../../node_modules/.pnpm/escape-html@1.0.3/node_modules/escape-html/index.js", "../../../node_modules/.pnpm/parseurl@1.3.3/node_modules/parseurl/index.js", "../../../node_modules/.pnpm/finalhandler@2.1.1/node_modules/finalhandler/index.js", "../../../node_modules/.pnpm/express@5.2.1/node_modules/express/lib/view.js", "../../../node_modules/.pnpm/etag@1.8.1/node_modules/etag/index.js", "../../../node_modules/.pnpm/forwarded@0.2.0/node_modules/forwarded/index.js", "../../../node_modules/.pnpm/ipaddr.js@1.9.1/node_modules/ipaddr.js/lib/ipaddr.js", "../../../node_modules/.pnpm/proxy-addr@2.0.7/node_modules/proxy-addr/index.js", "../../../node_modules/.pnpm/express@5.2.1/node_modules/express/lib/utils.js", "../../../node_modules/.pnpm/wrappy@1.0.2/node_modules/wrappy/wrappy.js", "../../../node_modules/.pnpm/once@1.4.0/node_modules/once/once.js", "../../../node_modules/.pnpm/is-promise@4.0.0/node_modules/is-promise/index.js", "../../../node_modules/.pnpm/path-to-regexp@8.4.2/node_modules/path-to-regexp/src/index.ts", "../../../node_modules/.pnpm/router@2.2.0/node_modules/router/lib/layer.js", "../../../node_modules/.pnpm/router@2.2.0/node_modules/router/lib/route.js", "../../../node_modules/.pnpm/router@2.2.0/node_modules/router/index.js", "../../../node_modules/.pnpm/express@5.2.1/node_modules/express/lib/application.js", "../../../node_modules/.pnpm/negotiator@1.0.0/node_modules/negotiator/lib/charset.js", "../../../node_modules/.pnpm/negotiator@1.0.0/node_modules/negotiator/lib/encoding.js", "../../../node_modules/.pnpm/negotiator@1.0.0/node_modules/negotiator/lib/language.js", "../../../node_modules/.pnpm/negotiator@1.0.0/node_modules/negotiator/lib/mediaType.js", "../../../node_modules/.pnpm/negotiator@1.0.0/node_modules/negotiator/index.js", "../../../node_modules/.pnpm/accepts@2.0.0/node_modules/accepts/index.js", "../../../node_modules/.pnpm/fresh@2.0.0/node_modules/fresh/index.js", "../../../node_modules/.pnpm/range-parser@1.2.1/node_modules/range-parser/index.js", "../../../node_modules/.pnpm/express@5.2.1/node_modules/express/lib/request.js", "../../../node_modules/.pnpm/content-disposition@1.0.1/node_modules/content-disposition/index.js", "../../../node_modules/.pnpm/cookie-signature@1.2.2/node_modules/cookie-signature/index.js", "../../../node_modules/.pnpm/cookie@0.7.2/node_modules/cookie/index.js", "../../../node_modules/.pnpm/send@1.2.1/node_modules/send/index.js", "../../../node_modules/.pnpm/vary@1.1.2/node_modules/vary/index.js", "../../../node_modules/.pnpm/express@5.2.1/node_modules/express/lib/response.js", "../../../node_modules/.pnpm/serve-static@2.2.1/node_modules/serve-static/index.js", "../../../node_modules/.pnpm/express@5.2.1/node_modules/express/lib/express.js", "../../../node_modules/.pnpm/express@5.2.1/node_modules/express/index.js", "../../../node_modules/.pnpm/object-assign@4.1.1/node_modules/object-assign/index.js", "../../../node_modules/.pnpm/cors@2.8.6/node_modules/cors/lib/index.js", "../../../node_modules/.pnpm/cookie-signature@1.0.6/node_modules/cookie-signature/index.js", "../../../node_modules/.pnpm/cookie-parser@1.4.7/node_modules/cookie-parser/index.js", "../../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/lib/err-helpers.js", "../../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/lib/err-proto.js", "../../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/lib/err.js", "../../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/lib/err-with-cause.js", "../../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/lib/req.js", "../../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/lib/res.js", "../../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/index.js", "../../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/caller.js", "../../../node_modules/.pnpm/@pinojs+redact@0.4.0/node_modules/@pinojs/redact/index.js", "../../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/symbols.js", "../../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/redaction.js", "../../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/time.js", "../../../node_modules/.pnpm/quick-format-unescaped@4.0.4/node_modules/quick-format-unescaped/index.js", "../../../node_modules/.pnpm/atomic-sleep@1.0.0/node_modules/atomic-sleep/index.js", "../../../node_modules/.pnpm/sonic-boom@4.2.1/node_modules/sonic-boom/index.js", "../../../node_modules/.pnpm/on-exit-leak-free@2.1.2/node_modules/on-exit-leak-free/index.js", "../../../node_modules/.pnpm/thread-stream@3.1.0/node_modules/thread-stream/package.json", "../../../node_modules/.pnpm/thread-stream@3.1.0/node_modules/thread-stream/lib/wait.js", "../../../node_modules/.pnpm/thread-stream@3.1.0/node_modules/thread-stream/lib/indexes.js", "../../../node_modules/.pnpm/thread-stream@3.1.0/node_modules/thread-stream/index.js", "../../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/transport.js", "../../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/tools.js", "../../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/constants.js", "../../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/levels.js", "../../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/meta.js", "../../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/proto.js", "../../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/index.js", "../../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/multistream.js", "../../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/pino.js", "../../../node_modules/.pnpm/get-caller-file@2.0.5/node_modules/get-caller-file/index.ts", "../../../node_modules/.pnpm/pino-http@10.5.0/node_modules/pino-http/logger.js", "../../../node_modules/.pnpm/ip-address@10.2.0/node_modules/ip-address/src/address-error.ts", "../../../node_modules/.pnpm/ip-address@10.2.0/node_modules/ip-address/src/common.ts", "../../../node_modules/.pnpm/ip-address@10.2.0/node_modules/ip-address/src/v4/constants.ts", "../../../node_modules/.pnpm/ip-address@10.2.0/node_modules/ip-address/src/ipv4.ts", "../../../node_modules/.pnpm/ip-address@10.2.0/node_modules/ip-address/src/v6/constants.ts", "../../../node_modules/.pnpm/ip-address@10.2.0/node_modules/ip-address/src/v6/helpers.ts", "../../../node_modules/.pnpm/ip-address@10.2.0/node_modules/ip-address/src/v6/regular-expressions.ts", "../../../node_modules/.pnpm/ip-address@10.2.0/node_modules/ip-address/src/ipv6.ts", "../../../node_modules/.pnpm/ip-address@10.2.0/node_modules/ip-address/src/ip-address.ts", "../../../node_modules/.pnpm/postgres-array@2.0.0/node_modules/postgres-array/index.js", "../../../node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/arrayParser.js", "../../../node_modules/.pnpm/postgres-date@1.0.7/node_modules/postgres-date/index.js", "../../../node_modules/.pnpm/xtend@4.0.2/node_modules/xtend/mutable.js", "../../../node_modules/.pnpm/postgres-interval@1.2.0/node_modules/postgres-interval/index.js", "../../../node_modules/.pnpm/postgres-bytea@1.0.1/node_modules/postgres-bytea/index.js", "../../../node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/textParsers.js", "../../../node_modules/.pnpm/pg-int8@1.0.1/node_modules/pg-int8/index.js", "../../../node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/binaryParsers.js", "../../../node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/builtins.js", "../../../node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/index.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/defaults.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/utils.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/utils-legacy.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/utils-webcrypto.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/utils.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/cert-signatures.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/sasl.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/type-overrides.js", "../../../node_modules/.pnpm/pg-connection-string@2.12.0/node_modules/pg-connection-string/index.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/connection-parameters.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/result.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/query.js", "../../../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/src/messages.ts", "../../../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/src/buffer-writer.ts", "../../../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/src/serializer.ts", "../../../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/src/buffer-reader.ts", "../../../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/src/parser.ts", "../../../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/src/index.ts", "../../../node_modules/.pnpm/pg-cloudflare@1.3.0/node_modules/pg-cloudflare/src/empty.ts", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/stream.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/connection.js", "../../../node_modules/.pnpm/split2@4.2.0/node_modules/split2/index.js", "../../../node_modules/.pnpm/pgpass@1.0.5/node_modules/pgpass/lib/helper.js", "../../../node_modules/.pnpm/pgpass@1.0.5/node_modules/pgpass/lib/index.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/client.js", "../../../node_modules/.pnpm/pg-pool@3.13.0_pg@8.20.0/node_modules/pg-pool/index.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/native/query.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/native/client.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/native/index.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/index.js", "../../../node_modules/.pnpm/pg@8.20.0/node_modules/pg/esm/index.mjs", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/entity.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/logger.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/query-promise.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/column.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/column-builder.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/table.utils.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/foreign-keys.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/tracing-utils.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/unique-constraint.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/utils/array.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/common.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/enum.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/subquery.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/drizzle-orm/version.js", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/tracing.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/view-common.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/table.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/sql/sql.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/alias.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/selection-proxy.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/utils.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/int.common.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/bigint.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/bigserial.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/boolean.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/char.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/cidr.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/custom.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/date.common.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/date.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/double-precision.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/inet.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/integer.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/interval.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/json.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/jsonb.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/line.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/macaddr.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/macaddr8.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/numeric.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/point.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/postgis_extension/utils.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/postgis_extension/geometry.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/real.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/serial.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/smallint.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/smallserial.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/text.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/time.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/timestamp.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/uuid.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/varchar.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/vector_extension/bit.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/vector_extension/halfvec.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/vector_extension/sparsevec.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/vector_extension/vector.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/all.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/table.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/checks.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/columns/index.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/indexes.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/policies.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/primary-keys.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/view-common.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/casing.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/errors.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/sql/expressions/conditions.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/sql/expressions/select.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/sql/expressions/index.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/relations.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/sql/functions/aggregate.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/sql/functions/vector.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/sql/functions/index.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/sql/index.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/view-base.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/dialect.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/query-builders/query-builder.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/query-builders/select.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/query-builders/query-builder.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/view.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/utils.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/query-builders/delete.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/query-builders/insert.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/query-builders/refresh-materialized-view.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/drizzle-orm/pg-core/query-builders/select.types.js", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/query-builders/update.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/query-builders/index.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/query-builders/count.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/query-builders/query.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/query-builders/raw.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/db.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/cache/core/cache.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/cache/core/index.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/alias.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/roles.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/sequence.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/schema.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/session.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/drizzle-orm/pg-core/subquery.js", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/utils/index.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/pg-core/index.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/node-postgres/session.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/node-postgres/driver.ts", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/node-postgres/index.ts", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/core.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/util.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/errors.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/parse.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/regexes.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/checks.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/doc.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/versions.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/schemas.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ar.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/az.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/be.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ca.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/cs.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/de.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/en.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/eo.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/es.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/fa.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/fi.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/fr.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/fr-CA.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/he.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/hu.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/id.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/it.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ja.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/kh.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ko.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/mk.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ms.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/nl.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/no.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ota.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ps.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/pl.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/pt.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ru.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/sl.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/sv.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ta.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/th.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/tr.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ua.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/ur.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/vi.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/zh-CN.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/zh-TW.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/locales/index.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/registries.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/api.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/function.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/to-json-schema.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/json-schema.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/index.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/checks.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/iso.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/errors.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/parse.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/schemas.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/compat.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/coerce.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/external.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/index.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/index.js", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/drizzle-orm/operations.js", "../../../node_modules/.pnpm/drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0/node_modules/src/index.ts", "../../../node_modules/.pnpm/drizzle-zod@0.8.3_drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0__zod@3.25.76/node_modules/src/constants.ts", "../../../node_modules/.pnpm/drizzle-zod@0.8.3_drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0__zod@3.25.76/node_modules/src/utils.ts", "../../../node_modules/.pnpm/drizzle-zod@0.8.3_drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0__zod@3.25.76/node_modules/src/column.ts", "../../../node_modules/.pnpm/drizzle-zod@0.8.3_drizzle-orm@0.45.2_@opentelemetry+api@1.9.1_@types+pg@8.18.0_pg@8.20.0__zod@3.25.76/node_modules/src/schema.ts", "../../../lib/db/src/schema/adminContent.ts", "../../../lib/db/src/schema/userExports.ts", "../../../lib/db/src/schema/legal.ts", "../../../lib/db/src/schema/socialConnections.ts", "../../../lib/db/src/schema/videoContentFlags.ts", "../../../lib/db/src/schema/adminStores.ts", "../../../lib/db/src/schema/reports.ts", "../../../lib/db/src/schema/feedCache.ts", "../../../lib/db/src/schema/youtubeImports.ts", "../../../lib/db/src/schema/userVideos.ts", "../../../lib/db/src/schema/feedEngagement.ts", "../../../lib/db/src/schema/seedResetLog.ts", "../../../lib/db/src/schema/waitlistEmails.ts", "../../../lib/db/src/schema/speciesSightingsCache.ts", "../../../lib/db/src/schema/quotaCounters.ts", "../../../lib/db/src/schema/quotaDailyLog.ts", "../../../lib/db/src/schema/regulationCache.ts", "../../../lib/db/src/schema/userFavoriteJurisdictions.ts", "../../../lib/db/src/schema/gearPriceCache.ts", "../../../lib/db/src/schema/officialGear.ts", "../../../lib/db/src/schema/gscCache.ts", "../../../lib/db/src/schema/youtubeSearchCache.ts", "../../../lib/db/src/schema/musicSearchCache.ts", "../../../lib/db/src/schema/adminCache.ts", "../../../lib/db/src/schema/auth.ts", "../../../lib/db/src/schema/messaging.ts", "../../../lib/db/src/schema/campfireChat.ts", "../../../lib/db/src/schema/videoGearLinks.ts", "../../../lib/db/src/schema/contentScraper.ts", "../../../lib/db/src/schema/wardenDesk.ts", "../../../lib/db/src/schema/analyticsEngine.ts", "../../../lib/db/src/schema/betaFeedback.ts", "../../../lib/db/src/schema/videoIngestion.ts", "../../../lib/db/src/schema/discoveredContent.ts", "../../../lib/db/src/schema/videoPostProcess.ts", "../../../lib/db/src/schema/index.ts", "../../../lib/db/src/index.ts", "../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs", "../../../node_modules/.pnpm/@supabase+functions-js@2.106.1/node_modules/@supabase/functions-js/src/helper.ts", "../../../node_modules/.pnpm/@supabase+functions-js@2.106.1/node_modules/@supabase/functions-js/src/types.ts", "../../../node_modules/.pnpm/@supabase+functions-js@2.106.1/node_modules/@supabase/functions-js/src/FunctionsClient.ts", "../../../node_modules/.pnpm/@supabase+functions-js@2.106.1/node_modules/@supabase/functions-js/src/index.ts", "../../../node_modules/.pnpm/@supabase+postgrest-js@2.106.1/node_modules/@supabase/postgrest-js/src/types/common/common.ts", "../../../node_modules/.pnpm/@supabase+postgrest-js@2.106.1/node_modules/@supabase/postgrest-js/src/PostgrestError.ts", "../../../node_modules/.pnpm/@supabase+postgrest-js@2.106.1/node_modules/@supabase/postgrest-js/src/PostgrestBuilder.ts", "../../../node_modules/.pnpm/@supabase+postgrest-js@2.106.1/node_modules/@supabase/postgrest-js/src/PostgrestTransformBuilder.ts", "../../../node_modules/.pnpm/@supabase+postgrest-js@2.106.1/node_modules/@supabase/postgrest-js/src/PostgrestFilterBuilder.ts", "../../../node_modules/.pnpm/@supabase+postgrest-js@2.106.1/node_modules/@supabase/postgrest-js/src/PostgrestQueryBuilder.ts", "../../../node_modules/.pnpm/@supabase+postgrest-js@2.106.1/node_modules/@supabase/postgrest-js/src/PostgrestClient.ts", "../../../node_modules/.pnpm/@supabase+postgrest-js@2.106.1/node_modules/@supabase/postgrest-js/src/index.ts", "../../../node_modules/.pnpm/@supabase+realtime-js@2.106.1/node_modules/@supabase/realtime-js/src/lib/websocket-factory.ts", "../../../node_modules/.pnpm/@supabase+realtime-js@2.106.1/node_modules/@supabase/realtime-js/src/lib/version.ts", "../../../node_modules/.pnpm/@supabase+realtime-js@2.106.1/node_modules/@supabase/realtime-js/src/lib/constants.ts", "../../../node_modules/.pnpm/@supabase+realtime-js@2.106.1/node_modules/@supabase/realtime-js/src/lib/serializer.ts", "../../../node_modules/.pnpm/@supabase+realtime-js@2.106.1/node_modules/@supabase/realtime-js/src/lib/transformers.ts", "../../../node_modules/.pnpm/@supabase+phoenix@0.4.2/node_modules/@supabase/phoenix/assets/js/phoenix/index.js", "../../../node_modules/.pnpm/@supabase+phoenix@0.4.2/node_modules/@supabase/phoenix/assets/js/phoenix/utils.js", "../../../node_modules/.pnpm/@supabase+phoenix@0.4.2/node_modules/@supabase/phoenix/assets/js/phoenix/constants.js", "../../../node_modules/.pnpm/@supabase+phoenix@0.4.2/node_modules/@supabase/phoenix/assets/js/phoenix/push.js", "../../../node_modules/.pnpm/@supabase+phoenix@0.4.2/node_modules/@supabase/phoenix/assets/js/phoenix/timer.js", "../../../node_modules/.pnpm/@supabase+phoenix@0.4.2/node_modules/@supabase/phoenix/assets/js/phoenix/channel.js", "../../../node_modules/.pnpm/@supabase+phoenix@0.4.2/node_modules/@supabase/phoenix/assets/js/phoenix/ajax.js", "../../../node_modules/.pnpm/@supabase+phoenix@0.4.2/node_modules/@supabase/phoenix/assets/js/phoenix/longpoll.js", "../../../node_modules/.pnpm/@supabase+phoenix@0.4.2/node_modules/@supabase/phoenix/assets/js/phoenix/presence.js", "../../../node_modules/.pnpm/@supabase+phoenix@0.4.2/node_modules/@supabase/phoenix/assets/js/phoenix/serializer.js", "../../../node_modules/.pnpm/@supabase+phoenix@0.4.2/node_modules/@supabase/phoenix/assets/js/phoenix/socket.js", "../../../node_modules/.pnpm/@supabase+realtime-js@2.106.1/node_modules/@supabase/realtime-js/src/phoenix/presenceAdapter.ts", "../../../node_modules/.pnpm/@supabase+realtime-js@2.106.1/node_modules/@supabase/realtime-js/src/RealtimePresence.ts", "../../../node_modules/.pnpm/@supabase+realtime-js@2.106.1/node_modules/@supabase/realtime-js/src/lib/normalizeChannelError.ts", "../../../node_modules/.pnpm/@supabase+realtime-js@2.106.1/node_modules/@supabase/realtime-js/src/phoenix/channelAdapter.ts", "../../../node_modules/.pnpm/@supabase+realtime-js@2.106.1/node_modules/@supabase/realtime-js/src/RealtimeChannel.ts", "../../../node_modules/.pnpm/@supabase+realtime-js@2.106.1/node_modules/@supabase/realtime-js/src/phoenix/socketAdapter.ts", "../../../node_modules/.pnpm/@supabase+realtime-js@2.106.1/node_modules/@supabase/realtime-js/src/RealtimeClient.ts", "../../../node_modules/.pnpm/@supabase+realtime-js@2.106.1/node_modules/@supabase/realtime-js/src/index.ts", "../../../node_modules/.pnpm/iceberg-js@0.8.1/node_modules/iceberg-js/src/errors/IcebergError.ts", "../../../node_modules/.pnpm/iceberg-js@0.8.1/node_modules/iceberg-js/src/utils/url.ts", "../../../node_modules/.pnpm/iceberg-js@0.8.1/node_modules/iceberg-js/src/http/createFetchClient.ts", "../../../node_modules/.pnpm/iceberg-js@0.8.1/node_modules/iceberg-js/src/catalog/namespaces.ts", "../../../node_modules/.pnpm/iceberg-js@0.8.1/node_modules/iceberg-js/src/catalog/tables.ts", "../../../node_modules/.pnpm/iceberg-js@0.8.1/node_modules/iceberg-js/src/catalog/IcebergRestCatalog.ts", "../../../node_modules/.pnpm/iceberg-js@0.8.1/node_modules/iceberg-js/src/catalog/types.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/lib/common/errors.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/lib/common/headers.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/lib/common/helpers.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/lib/common/fetch.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/lib/common/BaseApiClient.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/packages/StreamDownloadBuilder.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/packages/BlobDownloadBuilder.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/packages/StorageFileApi.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/lib/version.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/lib/constants.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/packages/StorageBucketApi.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/packages/StorageAnalyticsClient.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/packages/VectorIndexApi.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/packages/VectorDataApi.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/packages/VectorBucketApi.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/packages/StorageVectorsClient.ts", "../../../node_modules/.pnpm/@supabase+storage-js@2.106.1/node_modules/@supabase/storage-js/src/StorageClient.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/lib/version.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/lib/constants.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/lib/errors.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/lib/base64url.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/lib/helpers.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/lib/fetch.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/lib/types.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/GoTrueAdminApi.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/lib/local-storage.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/lib/locks.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/lib/polyfills.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/lib/web3/ethereum.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/lib/webauthn.errors.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/lib/webauthn.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/GoTrueClient.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/AuthAdminApi.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/AuthClient.ts", "../../../node_modules/.pnpm/@supabase+auth-js@2.106.1/node_modules/@supabase/auth-js/src/index.ts", "../../../node_modules/.pnpm/@supabase+supabase-js@2.106.1/node_modules/@supabase/supabase-js/src/lib/version.ts", "../../../node_modules/.pnpm/@supabase+supabase-js@2.106.1/node_modules/@supabase/supabase-js/src/lib/constants.ts", "../../../node_modules/.pnpm/@supabase+supabase-js@2.106.1/node_modules/tslib/tslib.es6.mjs", "../../../node_modules/.pnpm/@supabase+supabase-js@2.106.1/node_modules/shared/tracing/dist/module/extract.js", "../../../node_modules/.pnpm/@supabase+supabase-js@2.106.1/node_modules/shared/tracing/dist/module/parse.js", "../../../node_modules/.pnpm/@supabase+supabase-js@2.106.1/node_modules/shared/tracing/dist/module/validate.js", "../../../node_modules/.pnpm/@supabase+supabase-js@2.106.1/node_modules/shared/tracing/dist/module/defaults.js", "../../../node_modules/.pnpm/@supabase+supabase-js@2.106.1/node_modules/@supabase/supabase-js/src/lib/fetch.ts", "../../../node_modules/.pnpm/@supabase+supabase-js@2.106.1/node_modules/@supabase/supabase-js/src/lib/helpers.ts", "../../../node_modules/.pnpm/@supabase+supabase-js@2.106.1/node_modules/@supabase/supabase-js/src/lib/SupabaseAuthClient.ts", "../../../node_modules/.pnpm/@supabase+supabase-js@2.106.1/node_modules/@supabase/supabase-js/src/SupabaseClient.ts", "../../../node_modules/.pnpm/@supabase+supabase-js@2.106.1/node_modules/@supabase/supabase-js/src/index.ts", "../src/lib/supabase.ts", "../src/lib/auth.ts", "../src/lib/authMiddleware.ts", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js", "../../../node_modules/.pnpm/@google+generative-ai@0.24.1/node_modules/@google/generative-ai/dist/index.mjs", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/internal/tslib.mjs", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/utils/uuid.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/errors.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/core/error.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/utils/values.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/utils/sleep.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/version.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/detect-platform.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/shims.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/request-options.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/utils/query.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/uploads.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/to-file.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/resources/shared.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/core/resource.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/headers.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/resources/audio/speech.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/resources/audio/transcriptions.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/resources/audio/translations.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/resources/audio/audio.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/utils/path.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/resources/batches.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/resources/chat/completions.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/resources/chat/chat.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/resources/completions.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/resources/embeddings.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/resources/files.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/resources/models.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/resources/index.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/utils/bytes.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/decoders/line.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/utils/log.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/core/streaming.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/parse.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/core/api-promise.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/internal/utils/env.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/client.ts", "../../../node_modules/.pnpm/groq-sdk@1.2.0/node_modules/groq-sdk/src/index.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/internal/tslib.mjs", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/utils/uuid.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/errors.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/core/error.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/utils/values.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/utils/sleep.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/version.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/detect-platform.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/shims.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/request-options.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/qs/formats.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/qs/utils.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/qs/stringify.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/utils/query.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/utils/bytes.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/decoders/line.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/utils/log.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/core/streaming.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/parse.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/core/api-promise.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/core/pagination.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/auth/workload-identity-auth.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/uploads.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/to-file.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/core/uploads.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/core/resource.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/utils/path.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/chat/completions/messages.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/error.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/lib/parser.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/lib/chatCompletionUtils.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/lib/EventStream.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/lib/RunnableFunction.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/lib/AbstractChatCompletionRunner.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/lib/ChatCompletionRunner.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/_vendor/partial-json-parser/parser.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/streaming.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/lib/ChatCompletionStream.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/lib/ChatCompletionStreamingRunner.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/chat/completions/completions.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/chat/chat.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/chat/completions/index.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/chat/index.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/shared.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/admin-api-keys.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/audit-logs.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/certificates.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/data-retention.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/invites.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/roles.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/spend-alerts.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/usage.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/groups/roles.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/groups/users.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/groups/groups.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/projects/api-keys.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/projects/certificates.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/projects/data-retention.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/projects/hosted-tool-permissions.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/projects/model-permissions.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/projects/rate-limits.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/projects/roles.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/projects/service-accounts.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/projects/spend-alerts.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/projects/groups/roles.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/projects/groups/groups.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/projects/users/roles.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/projects/users/users.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/projects/projects.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/users/roles.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/users/users.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/organization/organization.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/admin/admin.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/headers.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/audio/speech.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/audio/transcriptions.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/audio/translations.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/audio/audio.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/batches.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/beta/assistants.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/beta/realtime/sessions.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/beta/realtime/transcription-sessions.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/beta/realtime/realtime.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/beta/chatkit/sessions.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/beta/chatkit/threads.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/beta/chatkit/chatkit.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/beta/threads/messages.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/beta/threads/runs/steps.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/utils/base64.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/utils/env.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/internal/utils.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/lib/AssistantStream.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/beta/threads/runs/runs.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/beta/threads/threads.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/beta/beta.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/completions.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/containers/files/content.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/containers/files/files.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/containers/containers.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/conversations/items.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/conversations/conversations.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/embeddings.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/evals/runs/output-items.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/evals/runs/runs.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/evals/evals.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/files.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/fine-tuning/methods.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/fine-tuning/alpha/graders.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/fine-tuning/alpha/alpha.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/fine-tuning/checkpoints/permissions.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/fine-tuning/checkpoints/checkpoints.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/fine-tuning/jobs/checkpoints.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/fine-tuning/jobs/jobs.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/fine-tuning/fine-tuning.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/graders/grader-models.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/graders/graders.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/images.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/models.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/moderations.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/realtime/calls.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/realtime/client-secrets.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/realtime/realtime.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/lib/ResponsesParser.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/lib/responses/ResponseStream.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/responses/input-items.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/responses/input-tokens.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/responses/responses.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/skills/content.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/skills/versions/content.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/skills/versions/versions.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/skills/skills.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/uploads/parts.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/uploads/uploads.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/lib/Util.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/vector-stores/file-batches.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/vector-stores/files.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/vector-stores/vector-stores.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/videos.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/webhooks/webhooks.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/webhooks/index.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/webhooks.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/resources/index.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/client.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/azure.ts", "../../../node_modules/.pnpm/openai@6.39.0_ws@8.20.0_zod@4.3.6/node_modules/openai/src/index.ts", "../src/lib/openRouterRouting.ts", "../src/lib/aiGateway.ts", "../src/lib/analyticsUsageLogger.ts", "../src/lib/ai.ts", "../src/lib/postProcess/attribution.ts", "../src/lib/postProcess/contentAnalysis.ts", "../src/lib/postProcess/gearVision.ts", "../src/lib/postProcess/productMatching.ts", "../src/lib/postProcess/types.ts", "../src/lib/ingestion/instagramPlayback.ts", "../../../node_modules/.pnpm/dargs@7.0.0/node_modules/dargs/index.js", "../../../node_modules/.pnpm/tinyspawn@1.5.7/node_modules/tinyspawn/src/index.js", "../../../node_modules/.pnpm/is-unix@2.0.14/node_modules/is-unix/index.js", "../../../node_modules/.pnpm/youtube-dl-exec@3.1.7/node_modules/youtube-dl-exec/src/constants.js", "../../../node_modules/.pnpm/youtube-dl-exec@3.1.7/node_modules/youtube-dl-exec/src/index.js", "../src/lib/videoIngest.ts", "../src/lib/rapidapi/client.ts", "../src/lib/playback/tiktokPlayback.ts", "../src/lib/playback/videoMediaValidation.ts", "../src/lib/postProcess/validateVideoRecord.ts", "../src/lib/postProcess/enrichVideo.ts", "../src/lib/postProcess/worker.ts", "../src/data/species-extra.ts", "../src/data/species.ts", "../src/lib/speciesHeuristics.ts", "../src/lib/ingestion/contentGatekeeper.ts", "../src/lib/playback/feedPlayback.ts", "../src/lib/ingestion/deerContentPriority.ts", "../src/lib/ingestion/relevanceScorer.ts", "../src/lib/ingestion/instagramProvider.ts", "../src/lib/playback/instagramMediaPayload.ts", "../src/lib/playback/refreshInstagramCdn.ts", "../src/lib/ingestion/tiktokUrls.ts", "../src/lib/r2.ts", "../src/lib/playback/validateVideoUrl.ts", "../src/lib/playback/mirrorCatalogVideo.ts", "../src/lib/playback/refreshTikTokCdn.ts", "../src/lib/objectAcl.ts", "../src/lib/objectStorage.ts", "../src/lib/streamObjectEntity.ts", "../src/lib/playback/feedPlaybackStream.ts", "../src/lib/videoDuplicateGuard.ts", "../src/lib/feedPlatformSettings.ts", "../../../lib/video-layout/src/index.ts", "../../../lib/feed-search/src/index.ts", "../src/lib/feedRecommendations.ts", "../src/lib/clipThumbnails.ts", "../src/routes/feed.ts", "../../../node_modules/.pnpm/css-what@6.2.2/node_modules/css-what/lib/commonjs/types.js", "../../../node_modules/.pnpm/css-what@6.2.2/node_modules/css-what/lib/commonjs/parse.js", "../../../node_modules/.pnpm/css-what@6.2.2/node_modules/css-what/lib/commonjs/stringify.js", "../../../node_modules/.pnpm/css-what@6.2.2/node_modules/css-what/lib/commonjs/index.js", "../../../node_modules/.pnpm/boolbase@1.0.0/node_modules/boolbase/index.js", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/lib/bom-handling.js", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/internal.js", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/utf32.js", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/utf16.js", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/utf7.js", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/sbcs-codec.js", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/sbcs-data.js", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/sbcs-data-generated.js", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/dbcs-codec.js", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/tables/shiftjis.json", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/tables/eucjp.json", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/tables/cp936.json", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/tables/gbk-added.json", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/tables/cp949.json", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/tables/cp950.json", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/tables/big5-added.json", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/dbcs-data.js", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/index.js", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/lib/streams.js", "../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/lib/index.js", "../../../node_modules/.pnpm/whatwg-encoding@3.1.1/node_modules/whatwg-encoding/lib/supported-names.json", "../../../node_modules/.pnpm/whatwg-encoding@3.1.1/node_modules/whatwg-encoding/lib/labels-to-names.json", "../../../node_modules/.pnpm/whatwg-encoding@3.1.1/node_modules/whatwg-encoding/lib/whatwg-encoding.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/core/symbols.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/util/timers.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/core/errors.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/core/constants.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/core/tree.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/core/util.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/util/stats.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/core/diagnostics.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/core/request.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/handler/wrap-handler.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/dispatcher.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/handler/unwrap-handler.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/dispatcher-base.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/core/connect.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/llhttp/utils.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/llhttp/constants.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/llhttp/llhttp-wasm.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/fetch/constants.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/fetch/global.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/encoding/index.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/infra/index.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/fetch/data-url.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/util/runtime-features.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/webidl/index.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/fetch/util.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/fetch/formdata.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/fetch/formdata-parser.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/util/promise.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/fetch/body.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/client-h1.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/client-h2.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/client.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/fixed-queue.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/pool-base.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/pool.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/balanced-pool.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/round-robin-pool.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/agent.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/core/socks5-utils.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/core/socks5-client.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/proxy-agent.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/handler/retry-handler.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/retry-agent.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/dispatcher/h2c-client.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/api/readable.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/api/api-request.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/api/abort-signal.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/api/api-stream.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/api/api-pipeline.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/api/api-upgrade.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/api/api-connect.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/api/index.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/mock/mock-errors.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/mock/mock-symbols.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/mock/mock-utils.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/mock/mock-interceptor.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/mock/mock-client.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/mock/mock-call-history.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/mock/mock-pool.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/mock/pending-interceptors-formatter.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/mock/mock-agent.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/mock/snapshot-utils.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/mock/snapshot-recorder.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/mock/snapshot-agent.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/global.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/handler/decorator-handler.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/handler/redirect-handler.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/interceptor/redirect.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/interceptor/response-error.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/interceptor/retry.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/interceptor/dump.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/interceptor/dns.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/util/cache.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/util/date.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/handler/cache-handler.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/cache/memory-cache-store.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/handler/cache-revalidation-handler.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/interceptor/cache.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/interceptor/decompress.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/handler/deduplication-handler.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/interceptor/deduplicate.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/cache/sqlite-cache-store.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/fetch/headers.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/fetch/response.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/fetch/request.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/fetch/index.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/cache/util.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/cache/cache.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/cache/cachestorage.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/cookies/constants.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/cookies/util.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/cookies/parse.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/cookies/index.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/websocket/events.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/websocket/constants.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/websocket/util.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/websocket/frame.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/websocket/connection.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/websocket/permessage-deflate.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/websocket/receiver.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/websocket/sender.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/websocket/websocket.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/websocket/stream/websocketerror.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/websocket/stream/websocketstream.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/eventsource/util.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/eventsource/eventsource-stream.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/lib/web/eventsource/eventsource.js", "../../../node_modules/.pnpm/undici@7.25.0/node_modules/undici/index.js", "../../../node_modules/.pnpm/whatwg-mimetype@4.0.0/node_modules/whatwg-mimetype/lib/utils.js", "../../../node_modules/.pnpm/whatwg-mimetype@4.0.0/node_modules/whatwg-mimetype/lib/mime-type-parameters.js", "../../../node_modules/.pnpm/whatwg-mimetype@4.0.0/node_modules/whatwg-mimetype/lib/parser.js", "../../../node_modules/.pnpm/whatwg-mimetype@4.0.0/node_modules/whatwg-mimetype/lib/serializer.js", "../../../node_modules/.pnpm/whatwg-mimetype@4.0.0/node_modules/whatwg-mimetype/lib/mime-type.js", "../../../node_modules/.pnpm/media-typer@0.3.0/node_modules/media-typer/index.js", "../../../node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/db.json", "../../../node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/index.js", "../../../node_modules/.pnpm/mime-types@2.1.35/node_modules/mime-types/index.js", "../../../node_modules/.pnpm/type-is@1.6.18/node_modules/type-is/index.js", "../../../node_modules/.pnpm/busboy@1.6.0/node_modules/busboy/lib/utils.js", "../../../node_modules/.pnpm/streamsearch@1.1.0/node_modules/streamsearch/lib/sbmh.js", "../../../node_modules/.pnpm/busboy@1.6.0/node_modules/busboy/lib/types/multipart.js", "../../../node_modules/.pnpm/busboy@1.6.0/node_modules/busboy/lib/types/urlencoded.js", "../../../node_modules/.pnpm/busboy@1.6.0/node_modules/busboy/lib/index.js", "../../../node_modules/.pnpm/append-field@1.0.0/node_modules/append-field/lib/parse-path.js", "../../../node_modules/.pnpm/append-field@1.0.0/node_modules/append-field/lib/set-value.js", "../../../node_modules/.pnpm/append-field@1.0.0/node_modules/append-field/index.js", "../../../node_modules/.pnpm/multer@2.1.1/node_modules/multer/lib/counter.js", "../../../node_modules/.pnpm/multer@2.1.1/node_modules/multer/lib/multer-error.js", "../../../node_modules/.pnpm/multer@2.1.1/node_modules/multer/lib/file-appender.js", "../../../node_modules/.pnpm/multer@2.1.1/node_modules/multer/lib/remove-uploaded-files.js", "../../../node_modules/.pnpm/multer@2.1.1/node_modules/multer/lib/make-middleware.js", "../../../node_modules/.pnpm/multer@2.1.1/node_modules/multer/storage/disk.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/stream.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/errors.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/state.js", "../../../node_modules/.pnpm/util-deprecate@1.0.2/node_modules/util-deprecate/node.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_writable.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_duplex.js", "../../../node_modules/.pnpm/safe-buffer@5.2.1/node_modules/safe-buffer/index.js", "../../../node_modules/.pnpm/string_decoder@1.3.0/node_modules/string_decoder/lib/string_decoder.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/async_iterator.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/from.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_readable.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_transform.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_passthrough.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/readable.js", "../../../node_modules/.pnpm/buffer-from@1.1.2/node_modules/buffer-from/index.js", "../../../node_modules/.pnpm/typedarray@0.0.6/node_modules/typedarray/index.js", "../../../node_modules/.pnpm/concat-stream@2.0.0/node_modules/concat-stream/index.js", "../../../node_modules/.pnpm/multer@2.1.1/node_modules/multer/storage/memory.js", "../../../node_modules/.pnpm/multer@2.1.1/node_modules/multer/index.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/core/symbols.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/util/timers.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/core/errors.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/core/constants.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/core/tree.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/core/util.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/util/stats.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/core/diagnostics.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/core/request.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/dispatcher.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/dispatcher-base.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/core/connect.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/llhttp/utils.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/llhttp/constants.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/llhttp/llhttp-wasm.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/fetch/constants.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/fetch/global.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/encoding/index.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/infra/index.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/fetch/data-url.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/webidl/index.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/fetch/util.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/fetch/formdata.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/fetch/formdata-parser.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/util/runtime-features.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/fetch/body.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/client-h1.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/client-h2.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/client.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/fixed-queue.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/pool-base.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/pool.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/balanced-pool.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/round-robin-pool.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/agent.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/core/socks5-utils.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/core/socks5-client.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/proxy-agent.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/handler/retry-handler.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/retry-agent.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/dispatcher/h2c-client.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/api/readable.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/api/api-request.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/api/abort-signal.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/api/api-stream.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/api/api-pipeline.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/api/api-upgrade.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/api/api-connect.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/api/index.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/mock/mock-errors.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/mock/mock-symbols.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/mock/mock-utils.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/mock/mock-interceptor.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/mock/mock-client.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/mock/mock-call-history.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/mock/mock-pool.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/mock/pending-interceptors-formatter.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/mock/mock-agent.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/mock/snapshot-utils.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/mock/snapshot-recorder.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/mock/snapshot-agent.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/global.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/handler/decorator-handler.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/handler/redirect-handler.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/interceptor/redirect.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/interceptor/response-error.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/interceptor/retry.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/interceptor/dump.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/interceptor/dns.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/util/cache.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/util/date.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/handler/cache-handler.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/cache/memory-cache-store.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/handler/cache-revalidation-handler.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/interceptor/cache.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/interceptor/decompress.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/handler/deduplication-handler.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/interceptor/deduplicate.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/cache/sqlite-cache-store.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/fetch/headers.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/fetch/response.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/fetch/request.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/fetch/index.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/cache/util.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/cache/cache.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/cache/cachestorage.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/cookies/constants.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/cookies/util.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/cookies/parse.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/cookies/index.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/websocket/events.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/websocket/constants.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/websocket/util.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/websocket/frame.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/websocket/connection.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/websocket/permessage-deflate.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/websocket/receiver.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/websocket/sender.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/websocket/websocket.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/websocket/stream/websocketerror.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/websocket/stream/websocketstream.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/eventsource/util.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/eventsource/eventsource-stream.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/lib/web/eventsource/eventsource.js", "../../../node_modules/.pnpm/undici@8.2.0/node_modules/undici/index.js", "../../../node_modules/.pnpm/suncalc@1.9.0/node_modules/suncalc/suncalc.js", "../src/lib/ingestion/sustainableIngestion.ts", "../src/lib/ingestion/quotaBudget.ts", "../src/lib/ingestion/types.ts", "../src/lib/ingestion/discoveryQuery.ts", "../src/lib/ingestion/youtubeProvider.ts", "../src/lib/ingestion/persistCatalogVideo.ts", "../../../lib/video-discovery-agent/src/config.ts", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/hooks/registration.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/hooks/hooks.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/parse.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/regexes.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/doc.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ar.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/az.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/be.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/bg.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ca.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/cs.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/da.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/de.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/en.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/eo.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/es.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fa.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fi.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr-CA.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/he.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hu.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hy.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/id.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/is.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/it.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ja.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ka.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/km.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/kh.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ko.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/lt.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/mk.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ms.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/nl.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/no.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ota.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ps.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pl.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pt.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ru.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sl.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sv.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ta.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/th.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/tr.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uk.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ua.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ur.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uz.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/vi.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-CN.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-TW.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/yo.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/index.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/api.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-generator.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/index.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/checks.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/iso.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/errors.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/parse.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/compat.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/from-json-schema.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/coerce.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/external.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/index.js", "../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/index.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/lib/base64.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/lib/is-plain-object.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/lib/encodings.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/lib/http.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/openroutererror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/openrouterdefaulterror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/sdkvalidationerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/responsevalidationerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/types/fp.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/lib/matchers.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/lib/primitives.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/lib/schemas.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/lib/dlv.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/lib/env.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/lib/security.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/lib/url.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/aabenchmarkentry.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/activityitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/activityresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/advisornestedtool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/types/unrecognized.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/types/enums.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/advisorreasoning.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/advisorservertoolconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/advisorservertoolopenrouter.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/types/discriminatedUnion.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/filecitation.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/filepath.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/urlcitation.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/openairesponsesannotation.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/annotationaddedevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicallowedcallers.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicimagemimetype.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicbase64imagesource.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicbase64pdfsource.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropiccachecontrolttl.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropiccachecontroldirective.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropiccitationcharlocationparam.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropiccitationcontentblocklocationparam.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropiccitationpagelocationparam.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropiccitationsearchresultlocation.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropiccitationwebsearchresultlocation.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicurlimagesource.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicimageblockparam.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicplaintextsource.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropictextblockparam.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicurlpdfsource.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicdocumentblockparam.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicinputtokensclearatleast.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicinputtokenstrigger.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicsearchresultblockparam.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicthinkingdisplay.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicthinkingturns.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropictooluseskeep.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropictoolusestrigger.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicwebsearchresultblockparam.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/anthropicwebsearchtooluserlocation.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/applypatchcreatefileoperation.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/applypatchdeletefileoperation.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/applypatchupdatefileoperation.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/applypatchcalloperation.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/applypatchcallstatus.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/applypatchcallitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/applypatchcalloperationdiffdeltaevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/applypatchcalloperationdiffdoneevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/applypatchcalloutputitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/applypatchengineenum.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/applypatchservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/applypatchservertoolconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/applypatchservertoolopenrouter.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/apprankingsitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/rankingsdailymeta.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/apprankingsresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/autorouterplugin.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/badgatewayresponseerrordata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/badrequestresponseerrordata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/inputaudio.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/inputfile.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/inputimage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/inputtext.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/openairesponsecustomtoolcall.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/openairesponsecustomtoolcalloutput.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/toolcallstatus.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/openairesponsefunctiontoolcall.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/openairesponsefunctiontoolcalloutput.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/openairesponseinputmessageitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/imagegenerationstatus.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputitemimagegenerationcall.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/openairesponsesrefusalcontent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/responseoutputtext.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputmessage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/baseinputsunion.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningeffort.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningsummaryverbosity.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/basereasoningconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bashservertoolengine.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/containerautoenvironment.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/containerreferenceenvironment.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bashservertoolenvironment.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bashservertoolconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bashservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/benchmarkpricing.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/benchmarksaaitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/benchmarksaameta.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/benchmarksaaresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/benchmarksdaitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/benchmarksdameta.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/benchmarksdaresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bulkaddworkspacemembersrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/workspacemember.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bulkaddworkspacemembersresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bulkassignkeysrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bulkassignkeysresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bulkassignmembersrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bulkassignmembersresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bulkremoveworkspacemembersrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bulkremoveworkspacemembersresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bulkunassignkeysrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bulkunassignkeysresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bulkunassignmembersrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/bulkunassignmembersresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/byokproviderslug.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/byokkey.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatassistantimages.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chataudiooutput.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatcontentaudio.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatcontentfile.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatcontentimage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatcontentcachecontrol.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatcontenttext.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatcontentvideoinput.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatcontentvideo.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/legacychatcontentvideo.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatcontentitems.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chattoolcall.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningformat.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningdetailencrypted.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningdetailsummary.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningdetailtext.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningdetailunion.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatassistantmessage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatfinishreasonenum.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chattokenlogprob.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chattokenlogprobs.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatchoice.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatdebugoptions.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatdevelopermessage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatformatgrammarconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatjsonschemaconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatformatjsonschemaconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatformatpythonconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatformattextconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/searchmodelsservertoolconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatsearchmodelsservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/searchqualitylevel.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/websearchengineenum.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/websearchuserlocationservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/websearchconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatwebsearchshorthand.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/datetimeservertoolconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/datetimeservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/imagegenerationservertoolconfigunion.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/imagegenerationservertoolconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/imagegenerationservertoolopenrouter.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/openrouterwebsearchservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/subagentnestedtool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/subagentreasoning.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/subagentservertoolconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/subagentservertoolopenrouter.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/webfetchengineenum.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/webfetchservertoolconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/webfetchservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatfunctiontool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatsystemmessage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chattoolmessage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatusermessage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatmessages.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatnamedtoolchoice.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatreasoningsummaryverbosityenum.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatstreamoptions.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatservertoolchoice.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chattoolchoice.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contextcompressionengine.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contextcompressionplugin.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/pdfparserengine.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/pdfparseroptions.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/fileparserplugin.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/formatjsonobjectconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/fusionplugin.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/imageconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/moderationplugin.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/paretorouterplugin.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/percentilelatencycutoffs.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/preferredmaxlatency.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/percentilethroughputcutoffs.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/preferredminthroughput.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/providername.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/providersort.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/providersortconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/quantization.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/providerpreferences.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/responsehealingplugin.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/stopservertoolswhenfinishreasonis.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/stopservertoolswhenhastoolcall.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/stopservertoolswhenmaxcost.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/stopservertoolswhenmaxtokensused.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/stopservertoolswhenstepcountis.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/stopservertoolswhencondition.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/traceconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/webfetchplugin.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/websearchengine.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/websearchplugin.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/costdetails.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatusage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/endpointinfo.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/endpointsmetadata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/pipelinestagetype.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/pipelinestage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/routerattempt.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/routerparams.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/routingstrategy.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/openroutermetadata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatresult.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatstreamtoolcall.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatstreamdelta.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatstreamchoice.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatstreamchunk.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/chatstreamingresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/codeinterpreterservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/codexlocalshelltool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/compactionitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/compoundfilter.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/computeruseservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/conflictresponseerrordata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contentfilteraction.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contentfilterbuiltinaction.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contentfilterbuiltinslug.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/promptinjectionscanscope.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contentfilterbuiltinentry.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contentfilterbuiltinentryinput.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contentfilterentry.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningtextcontent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contentpartaddedevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contentpartaudio.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contentpartdoneevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contentpartimage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/multimodalmedia.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contentpartinputaudio.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contentpartinputfile.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contentpartinputvideo.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/contentpartvideo.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/createbyokkeyrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/createbyokkeyresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/guardrailinterval.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/createguardrailrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/guardrail.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/createguardrailresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilityfilterrulesconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/createobservabilitydestinationrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilityarizedestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilitybraintrustdestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilityclickhousedestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilitydatadogdestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilitygrafanadestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilitylangfusedestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilitylangsmithdestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilitynewrelicdestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilityopikdestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilityotelcollectordestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilityposthogdestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilityrampdestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilitys3destination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilitysentrydestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilitysnowflakedestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilityweavedestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilitywebhookdestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/observabilitydestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/createobservabilitydestinationresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/presetdesignatedversion.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/presetstatus.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/presetwithdesignatedversion.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/createpresetfrominferenceresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/createworkspacerequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/workspace.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/createworkspaceresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/customtool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/customtoolcallinputdeltaevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/customtoolcallinputdoneevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/customtoolcallitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/customtoolcalloutputitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/dabenchmarkentry.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/defaultparameters.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/deletebyokkeyresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/deleteguardrailresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/deleteobservabilitydestinationresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/deleteworkspaceresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/inputvideo.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/easyinputmessage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/edgenetworktimeoutresponseerrordata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/endpointstatus.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errorevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/filedeleteresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/filemetadata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/filelistresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/filesearchservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/forbiddenresponseerrordata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/formatjsonschemaconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/formattextconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/formats.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/frameimage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/functioncallargsdeltaevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/functioncallargsdoneevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/functioncallitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/functioncalloutputitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/fusionanalysisresult.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/fusioncallanalysiscompletedevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/fusioncallanalysisinprogressevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/fusioncallcompletedevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/fusioncallinprogressevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/fusioncallpaneladdedevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/fusioncallpanelcompletedevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/fusioncallpaneldeltaevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/fusioncallpanelfailedevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/fusioncallpanelreasoningdeltaevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/fusionservertoolconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/fusionservertoolopenrouter.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/generationcontentdata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/generationcontentresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/providerresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/generationresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/getbyokkeyresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/getguardrailresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/getobservabilitydestinationresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/getpresetresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/getpresetversionresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/getworkspaceresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/imagegencallcompletedevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/imagegencallgeneratingevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/imagegencallinprogressevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/imagegencallpartialimageevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/imagegenerationservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/incompletedetails.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/inputmessageitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/inputmodality.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/inputreference.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/itemreferenceitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/localshellcallitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/localshellcalloutputitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/mcpapprovalrequestitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/mcpapprovalresponseitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/mcpcallitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/mcplisttoolsitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputadvisorservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputapplypatchservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputbashservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputbrowseruseservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputcodeinterpretercallitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputcodeinterpreterservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputcomputercallitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputcustomtoolcallitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputdatetimeitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/websearchstatus.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputfilesearchcallitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputfilesearchservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputfunctioncallitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputfusionservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputimagegenerationcallitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputimagegenerationservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputmcpservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputmemoryservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputsearchmodelsservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputsubagentservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputtexteditorservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputtoolsearchservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputwebfetchservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/websearchsource.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputwebsearchcallitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputwebsearchservertoolitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningsummarytext.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/shellcallitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/shellcalloutputitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/inputsunion.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/instructtype.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/internalserverresponseerrordata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/keyassignment.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/searchcontextsizeenum.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/websearchdomainfilter.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/websearchuserlocation.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/legacywebsearchservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/listbyokkeysresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputmodality.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/parameter.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/percentilestats.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/publicendpoint.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/listendpointsresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/listguardrailsresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/listkeyassignmentsresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/memberassignment.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/listmemberassignmentsresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/listobservabilitydestinationsresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/preset.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/listpresetsresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/listpresetversionsresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/listworkspacesresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/mcpservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/messagesadvisortoolresultblock.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/messagesfallbackparam.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/messagesmessageparam.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/messagesoutputconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/messagesrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/metadatalevel.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/modelgroup.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/modelarchitecture.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/modelbenchmarks.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/modellinks.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/perrequestlimits.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/publicpricing.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/topproviderinfo.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/model.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/modelresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/modelscountresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/modelslistresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/notfoundresponseerrordata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/openairesponsesresponsestatus.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/toolchoiceallowed.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/openairesponsestoolchoiceunion.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/openairesponsestruncation.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputapplypatchcallitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputmessageitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputreasoningitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/shellcallstatus.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputshellcallitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputshellcalloutputitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputitems.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/previewwebsearchuserlocation.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/preview20250311websearchservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/previewwebsearchservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/responseserrorfield.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/shellservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/storedprompttemplate.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/textextendedconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/truncation.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/usage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/websearchservertool.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/openresponsesresult.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/openresponsescreatedevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/openresponsesinprogressevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/outputmodalityenum.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/payloadtoolargeresponseerrordata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/paymentrequiredresponseerrordata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/provideroptions.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/provideroverloadedresponseerrordata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/rankingsdailyitem.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/rankingsdailyresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningdeltaevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningdoneevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningsummarypartaddedevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningsummarypartdoneevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningsummarytextdeltaevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/reasoningsummarytextdoneevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/refusaldeltaevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/refusaldoneevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/requesttimeoutresponseerrordata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/responseincludesenum.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/shellservertoolengine.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/shellservertoolenvironment.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/shellservertoolconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/shellservertoolopenrouter.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/websearchservertoolconfig.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/websearchservertoolopenrouter.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/responsesrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/streameventsresponsecompleted.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/streameventsresponsefailed.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/streameventsresponseincomplete.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/streameventsresponseoutputitemadded.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/streameventsresponseoutputitemdone.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/streamlogprobtoplogprob.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/streamlogprob.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/textdeltaevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/textdoneevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/websearchcallcompletedevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/websearchcallinprogressevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/websearchcallsearchingevent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/streamevents.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/responsesstreamingresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/security.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/serviceunavailableresponseerrordata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/speechrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/sttinputaudio.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/sttrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/sttusage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/sttresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/toomanyrequestsresponseerrordata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/unauthorizedresponseerrordata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/unprocessableentityresponseerrordata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/updatebyokkeyrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/updatebyokkeyresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/updateguardrailrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/updateguardrailresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/updateobservabilitydestinationrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/updateobservabilitydestinationresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/updateworkspacerequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/updateworkspaceresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/videogenerationrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/videogenerationusage.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/videogenerationresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/videomodel.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/videomodelslistresponse.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/index.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/badgatewayresponseerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/badrequestresponseerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/conflictresponseerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/edgenetworktimeoutresponseerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/forbiddenresponseerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/httpclienterrors.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/internalserverresponseerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/notfoundresponseerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/payloadtoolargeresponseerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/paymentrequiredresponseerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/provideroverloadedresponseerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/requesttimeoutresponseerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/serviceunavailableresponseerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/toomanyrequestsresponseerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/unauthorizedresponseerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/unprocessableentityresponseerror.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/errors/index.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/bulkaddworkspacemembers.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/bulkassignkeystoguardrail.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/bulkassignmemberstoguardrail.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/bulkremoveworkspacemembers.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/bulkunassignkeysfromguardrail.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/bulkunassignmembersfromguardrail.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/createaudiospeech.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/createaudiotranscriptions.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/createauthkeyscode.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/createbyokkey.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/createembeddings.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/createguardrail.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/createkeys.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/createobservabilitydestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/createpresetschatcompletions.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/createpresetsmessages.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/createpresetsresponses.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/creatererank.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/lib/event-streams.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/createresponses.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/createvideos.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/createworkspace.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/deletebyokkey.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/deletefile.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/deleteguardrail.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/deletekeys.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/deleteobservabilitydestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/deleteworkspace.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/downloadfilecontent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/exchangeauthcodeforapikey.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getanalyticsmeta.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getapprankings.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getbenchmarksartificialanalysis.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getbenchmarksdesignarena.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getbyokkey.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getcredits.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getcurrentkey.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getfilemetadata.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getgeneration.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getguardrail.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getkey.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getmodel.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getmodels.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getobservabilitydestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getpreset.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getpresetversion.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getrankingsdaily.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getuseractivity.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getvideos.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/getworkspace.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/list.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listbyokkeys.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listembeddingsmodels.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listendpoints.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listendpointszdr.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listfiles.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listgenerationcontent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listguardrailkeyassignments.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listguardrailmemberassignments.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listguardrails.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listkeyassignments.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listmemberassignments.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listmodelscount.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listmodelsuser.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listobservabilitydestinations.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listorganizationmembers.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listpresets.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listpresetversions.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listproviders.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listvideoscontent.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listvideosmodels.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/listworkspaces.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/queryanalytics.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/sendchatcompletionrequest.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/updatebyokkey.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/updateguardrail.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/updatekeys.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/updateobservabilitydestination.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/updateworkspace.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/types/blobs.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/uploadfile.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/models/operations/index.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/types/async.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/funcs/betaResponsesSend.js", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/lib/async-params.ts", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/lib/tool-types.ts", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/lib/turn-context.ts", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/lib/conversation-state.ts", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/lib/next-turn-params.ts", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/lib/reusable-stream.ts", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/lib/stop-conditions.ts", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/lib/stream-type-guards.ts", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/lib/stream-transformers.ts", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/lib/tool-context.ts", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/lib/tool-event-broadcaster.ts", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/lib/tool-executor.ts", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/lib/model-result.ts", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/inner-loop/call-model.ts", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/lib/tool.ts", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/lib/config.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/lib/retries.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/lib/sdks.js", "../../../node_modules/.pnpm/@openrouter+sdk@0.13.7/node_modules/@openrouter/sdk/esm/core.js", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/openrouter.ts", "../../../node_modules/.pnpm/@openrouter+agent@0.7.2/node_modules/@openrouter/agent/src/index.ts", "../../../lib/video-discovery-agent/src/client.ts", "../../../lib/video-discovery-agent/src/modelRouter.ts", "../../../lib/video-discovery-agent/src/tasks/ingestion.ts", "../../../lib/video-discovery-agent/src/dedup.ts", "../../../lib/video-discovery-agent/src/validationCache.ts", "../../../lib/video-discovery-agent/src/tasks/secondaryPostProcess.ts", "../../../lib/video-discovery-agent/src/index.ts", "../src/app.ts", "../../../node_modules/.pnpm/express-rate-limit@8.4.1_express@5.2.1/node_modules/express-rate-limit/dist/index.mjs", "../src/routes/index.ts", "../src/routes/health.ts", "../../../lib/api-zod/src/generated/api.ts", "../src/routes/auth.ts", "../src/routes/openai.ts", "../src/routes/admin.ts", "../src/data/seed.ts", "../src/lib/logger.ts", "../src/jobs/feedRefreshJob.ts", "../src/lib/email.ts", "../src/lib/syncAuthUsers.ts", "../src/routes/gearAdmin.ts", "../../../lib/gear-taxonomy/src/index.ts", "../src/lib/gearAffiliate.ts", "../src/lib/gearImageScraper.ts", "../../../node_modules/.pnpm/cheerio@1.2.0/node_modules/cheerio/src/options.ts", "../../../node_modules/.pnpm/cheerio@1.2.0/node_modules/cheerio/src/static.ts", "https://raw.githubusercontent.com/fb55/domutils/0ab8bcf1ecfc70dfc93291a4cb2496578ac25e9c/src/index.ts", "../../../node_modules/.pnpm/domelementtype@2.3.0/node_modules/domelementtype/lib/esm/index.js", "../../../node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/node.js", "../../../node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/index.js", "https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-html.ts", "https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-xml.ts", "https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/decode_codepoint.ts", "https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/decode.ts", "https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/encode-html.ts", "https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/escape.ts", "https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/index.ts", "../../../node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/esm/foreignNames.js", "../../../node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/esm/index.js", "https://raw.githubusercontent.com/fb55/domutils/0ab8bcf1ecfc70dfc93291a4cb2496578ac25e9c/src/stringify.ts", "https://raw.githubusercontent.com/fb55/domutils/0ab8bcf1ecfc70dfc93291a4cb2496578ac25e9c/src/traversal.ts", "https://raw.githubusercontent.com/fb55/domutils/0ab8bcf1ecfc70dfc93291a4cb2496578ac25e9c/src/manipulation.ts", "https://raw.githubusercontent.com/fb55/domutils/0ab8bcf1ecfc70dfc93291a4cb2496578ac25e9c/src/querying.ts", "https://raw.githubusercontent.com/fb55/domutils/0ab8bcf1ecfc70dfc93291a4cb2496578ac25e9c/src/legacy.ts", "https://raw.githubusercontent.com/fb55/domutils/0ab8bcf1ecfc70dfc93291a4cb2496578ac25e9c/src/helpers.ts", "https://raw.githubusercontent.com/fb55/domutils/0ab8bcf1ecfc70dfc93291a4cb2496578ac25e9c/src/feeds.ts", "../../../node_modules/.pnpm/cheerio@1.2.0/node_modules/cheerio/src/api/attributes.ts", "../../../node_modules/.pnpm/cheerio@1.2.0/node_modules/cheerio/src/utils.ts", "../../../node_modules/.pnpm/entities@7.0.1/node_modules/entities/src/decode-codepoint.ts", "../../../node_modules/.pnpm/entities@7.0.1/node_modules/entities/src/internal/decode-shared.ts", "../../../node_modules/.pnpm/entities@7.0.1/node_modules/entities/src/generated/decode-data-html.ts", "../../../node_modules/.pnpm/entities@7.0.1/node_modules/entities/src/generated/decode-data-xml.ts", "../../../node_modules/.pnpm/entities@7.0.1/node_modules/entities/src/internal/bin-trie-flags.ts", "../../../node_modules/.pnpm/entities@7.0.1/node_modules/entities/src/decode.ts", "../../../node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/src/Tokenizer.ts", "../../../node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/src/Parser.ts", "../../../node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/src/index.ts", "../../../node_modules/.pnpm/cheerio@1.2.0/node_modules/cheerio/src/api/traversing.ts", "https://raw.githubusercontent.com/cheeriojs/cheerio-select/ef063a6ca4c3f0d02d2fc3505e750b6fb81c448d/src/index.ts", "https://raw.githubusercontent.com/fb55/css-select/93caad96c807da1d48f08166ef14cf26916b9364/src/index.ts", "https://raw.githubusercontent.com/fb55/css-select/93caad96c807da1d48f08166ef14cf26916b9364/src/compile.ts", "https://raw.githubusercontent.com/fb55/css-select/93caad96c807da1d48f08166ef14cf26916b9364/src/sort.ts", "https://raw.githubusercontent.com/fb55/css-select/93caad96c807da1d48f08166ef14cf26916b9364/src/attributes.ts", "https://raw.githubusercontent.com/fb55/css-select/93caad96c807da1d48f08166ef14cf26916b9364/src/pseudo-selectors/index.ts", "https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/parse.ts", "https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/compile.ts", "https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/index.ts", "https://raw.githubusercontent.com/fb55/css-select/93caad96c807da1d48f08166ef14cf26916b9364/src/pseudo-selectors/filters.ts", "https://raw.githubusercontent.com/fb55/css-select/93caad96c807da1d48f08166ef14cf26916b9364/src/pseudo-selectors/pseudos.ts", "https://raw.githubusercontent.com/fb55/css-select/93caad96c807da1d48f08166ef14cf26916b9364/src/pseudo-selectors/aliases.ts", "https://raw.githubusercontent.com/fb55/css-select/93caad96c807da1d48f08166ef14cf26916b9364/src/pseudo-selectors/subselects.ts", "https://raw.githubusercontent.com/fb55/css-select/93caad96c807da1d48f08166ef14cf26916b9364/src/general.ts", "https://raw.githubusercontent.com/cheeriojs/cheerio-select/ef063a6ca4c3f0d02d2fc3505e750b6fb81c448d/src/positionals.ts", "https://raw.githubusercontent.com/cheeriojs/cheerio-select/ef063a6ca4c3f0d02d2fc3505e750b6fb81c448d/src/helpers.ts", "../../../node_modules/.pnpm/cheerio@1.2.0/node_modules/cheerio/src/api/manipulation.ts", "../../../node_modules/.pnpm/cheerio@1.2.0/node_modules/cheerio/src/parse.ts", "../../../node_modules/.pnpm/cheerio@1.2.0/node_modules/cheerio/src/api/css.ts", "../../../node_modules/.pnpm/cheerio@1.2.0/node_modules/cheerio/src/api/forms.ts", "../../../node_modules/.pnpm/cheerio@1.2.0/node_modules/cheerio/src/api/extract.ts", "../../../node_modules/.pnpm/cheerio@1.2.0/node_modules/cheerio/src/cheerio.ts", "../../../node_modules/.pnpm/cheerio@1.2.0/node_modules/cheerio/src/load.ts", "../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js", "../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js", "../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/preprocessor.js", "../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js", "../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/src/generated/decode-data-html.ts", "../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/src/decode-codepoint.ts", "../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/src/decode.ts", "../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js", "../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js", "../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js", "../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js", "../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tree-adapters/default.js", "../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/doctype.js", "../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js", "../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js", "../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/src/escape.ts", "../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js", "../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/index.js", "../../../node_modules/.pnpm/parse5-htmlparser2-tree-adapter@7.1.0/node_modules/parse5-htmlparser2-tree-adapter/dist/index.js", "../../../node_modules/.pnpm/cheerio@1.2.0/node_modules/cheerio/src/parsers/parse5-adapter.ts", "../../../node_modules/.pnpm/cheerio@1.2.0/node_modules/cheerio/src/load-parse.ts", "../../../node_modules/.pnpm/encoding-sniffer@0.2.1/node_modules/encoding-sniffer/src/index.ts", "../../../node_modules/.pnpm/encoding-sniffer@0.2.1/node_modules/encoding-sniffer/src/sniffer.ts", "../../../node_modules/.pnpm/cheerio@1.2.0/node_modules/cheerio/src/index.ts", "../src/lib/gearSeeder.ts", "../src/routes/analyticsAdmin.ts", "../src/lib/analyticsInsights.ts", "../src/lib/seoAuditor.ts", "../src/lib/sitemapBuilder.ts", "../src/routes/seoPublic.ts", "../src/routes/legal.ts", "../src/routes/reports.ts", "../src/routes/videoMetadata.ts", "../src/routes/videoRender.ts", "../src/lib/exportStorage.ts", "../src/routes/species.ts", "../src/routes/gearDetect.ts", "../src/routes/gear.ts", "../src/routes/gearPrice.ts", "../src/routes/regulations.ts", "../src/data/regulations.ts", "../src/routes/solunar.ts", "../src/routes/geocode.ts", "../src/routes/youtube.ts", "../src/routes/music.ts", "../src/routes/exports.ts", "../src/routes/social.ts", "../src/lib/tokenEncryption.ts", "../src/routes/upload.ts", "../src/lib/frameExtract.ts", "../src/routes/outfitters.ts", "../src/routes/listings.ts", "../src/routes/waitlist.ts", "../src/routes/gsc.ts", "../src/routes/warden.ts", "../src/routes/conversations.ts", "../src/routes/friends.ts", "../src/routes/contentScraper.ts", "../src/lib/instagramScraper.ts", "../src/lib/instagramScraperIngest.ts", "../src/jobs/instagramScraperJob.ts", "../src/lib/scraperDefaults.ts", "../src/routes/youtubeSeeder.ts", "../src/lib/youtubeSeederFetch.ts", "../src/routes/googleSerp.ts", "../src/routes/scuttlebutt.ts", "../src/routes/campfireChat.ts", "../src/routes/radarConditions.ts", "../src/routes/radarAdvisor.ts", "../src/routes/analyticsIngest.ts", "../src/lib/analyticsBotFilter.ts", "../src/routes/betaFeedback.ts", "../src/lib/betaFeedbackTriage.ts", "../src/routes/videoIngestion.ts", "../src/lib/ingestion/pipeline.ts", "../src/lib/ingestion/instagramCatalogIngest.ts", "../src/lib/rapidapi/instagramFastApi.ts", "../src/lib/contentDiscovery/normalize.ts", "../src/lib/ingestion/creatorValidation.ts", "../src/lib/ingestion/nimbleVideoDiscovery.ts", "../src/lib/scraping/nimbleClient.ts", "../src/lib/scraping/scraperApiClient.ts", "../src/lib/scraping/router.ts", "../src/lib/ingestion/videoPlaybackValidator.ts", "../src/lib/ingestion/tiktokVideoDiscovery.ts", "../src/lib/ingestion/tiktokProvider.ts", "../src/lib/ingestion/tiktokScraper.ts", "../src/lib/ingestion/openRouterLayer.ts", "../src/lib/ingestion/applySecondaryRankings.ts", "../src/lib/ingestion/speciesDiscoveryQueries.ts", "../src/lib/ingestion/cycleCollector.ts", "../src/lib/ingestion/secondaryPostProcessLayer.ts", "../src/lib/postProcess/promoteDetectedGear.ts", "../src/lib/ingestion/ingestionHealth.ts", "../src/lib/contentDiscovery/pipeline.ts", "../src/lib/rapidapi/tiktokFastApi.ts", "../src/lib/rapidapi/tiktokApi23.ts", "../src/lib/contentDiscovery/scoring.ts", "../src/lib/contentDiscovery/store.ts", "../src/lib/ingestion/promoteDiscoveredContent.ts", "../src/lib/contentDiscovery/targets.ts", "../src/routes/contentDiscovery.ts", "../src/routes/tiktokCollection.ts", "../src/lib/ingestion/tiktokApi23Scraper.ts", "../src/lib/ingestion/huntingFishingTikTokCollector.ts", "../src/routes/postProcess.ts", "../src/lib/postProcess/index.ts", "../src/routes/objects.ts", "../src/jobs/regulationRefreshJob.ts", "../src/jobs/videoIngestionJob.ts", "../src/index.ts"],
  "sourcesContent": ["/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n", "/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n", "'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n", "'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n", "/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = `  ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n", "/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n", "/*!\n * depd\n * Copyright(c) 2014-2018 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\n\nvar relative = require('path').relative\n\n/**\n * Module exports.\n */\n\nmodule.exports = depd\n\n/**\n * Get the path to base files on.\n */\n\nvar basePath = process.cwd()\n\n/**\n * Determine if namespace is contained in the string.\n */\n\nfunction containsNamespace (str, namespace) {\n  var vals = str.split(/[ ,]+/)\n  var ns = String(namespace).toLowerCase()\n\n  for (var i = 0; i < vals.length; i++) {\n    var val = vals[i]\n\n    // namespace contained\n    if (val && (val === '*' || val.toLowerCase() === ns)) {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Convert a data descriptor to accessor descriptor.\n */\n\nfunction convertDataDescriptorToAccessor (obj, prop, message) {\n  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n  var value = descriptor.value\n\n  descriptor.get = function getter () { return value }\n\n  if (descriptor.writable) {\n    descriptor.set = function setter (val) { return (value = val) }\n  }\n\n  delete descriptor.value\n  delete descriptor.writable\n\n  Object.defineProperty(obj, prop, descriptor)\n\n  return descriptor\n}\n\n/**\n * Create arguments string to keep arity.\n */\n\nfunction createArgumentsString (arity) {\n  var str = ''\n\n  for (var i = 0; i < arity; i++) {\n    str += ', arg' + i\n  }\n\n  return str.substr(2)\n}\n\n/**\n * Create stack string from stack.\n */\n\nfunction createStackString (stack) {\n  var str = this.name + ': ' + this.namespace\n\n  if (this.message) {\n    str += ' deprecated ' + this.message\n  }\n\n  for (var i = 0; i < stack.length; i++) {\n    str += '\\n    at ' + stack[i].toString()\n  }\n\n  return str\n}\n\n/**\n * Create deprecate for namespace in caller.\n */\n\nfunction depd (namespace) {\n  if (!namespace) {\n    throw new TypeError('argument namespace is required')\n  }\n\n  var stack = getStack()\n  var site = callSiteLocation(stack[1])\n  var file = site[0]\n\n  function deprecate (message) {\n    // call to self as log\n    log.call(deprecate, message)\n  }\n\n  deprecate._file = file\n  deprecate._ignored = isignored(namespace)\n  deprecate._namespace = namespace\n  deprecate._traced = istraced(namespace)\n  deprecate._warned = Object.create(null)\n\n  deprecate.function = wrapfunction\n  deprecate.property = wrapproperty\n\n  return deprecate\n}\n\n/**\n * Determine if event emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction eehaslisteners (emitter, type) {\n  var count = typeof emitter.listenerCount !== 'function'\n    ? emitter.listeners(type).length\n    : emitter.listenerCount(type)\n\n  return count > 0\n}\n\n/**\n * Determine if namespace is ignored.\n */\n\nfunction isignored (namespace) {\n  if (process.noDeprecation) {\n    // --no-deprecation support\n    return true\n  }\n\n  var str = process.env.NO_DEPRECATION || ''\n\n  // namespace ignored\n  return containsNamespace(str, namespace)\n}\n\n/**\n * Determine if namespace is traced.\n */\n\nfunction istraced (namespace) {\n  if (process.traceDeprecation) {\n    // --trace-deprecation support\n    return true\n  }\n\n  var str = process.env.TRACE_DEPRECATION || ''\n\n  // namespace traced\n  return containsNamespace(str, namespace)\n}\n\n/**\n * Display deprecation message.\n */\n\nfunction log (message, site) {\n  var haslisteners = eehaslisteners(process, 'deprecation')\n\n  // abort early if no destination\n  if (!haslisteners && this._ignored) {\n    return\n  }\n\n  var caller\n  var callFile\n  var callSite\n  var depSite\n  var i = 0\n  var seen = false\n  var stack = getStack()\n  var file = this._file\n\n  if (site) {\n    // provided site\n    depSite = site\n    callSite = callSiteLocation(stack[1])\n    callSite.name = depSite.name\n    file = callSite[0]\n  } else {\n    // get call site\n    i = 2\n    depSite = callSiteLocation(stack[i])\n    callSite = depSite\n  }\n\n  // get caller of deprecated thing in relation to file\n  for (; i < stack.length; i++) {\n    caller = callSiteLocation(stack[i])\n    callFile = caller[0]\n\n    if (callFile === file) {\n      seen = true\n    } else if (callFile === this._file) {\n      file = this._file\n    } else if (seen) {\n      break\n    }\n  }\n\n  var key = caller\n    ? depSite.join(':') + '__' + caller.join(':')\n    : undefined\n\n  if (key !== undefined && key in this._warned) {\n    // already warned\n    return\n  }\n\n  this._warned[key] = true\n\n  // generate automatic message from call site\n  var msg = message\n  if (!msg) {\n    msg = callSite === depSite || !callSite.name\n      ? defaultMessage(depSite)\n      : defaultMessage(callSite)\n  }\n\n  // emit deprecation if listeners exist\n  if (haslisteners) {\n    var err = DeprecationError(this._namespace, msg, stack.slice(i))\n    process.emit('deprecation', err)\n    return\n  }\n\n  // format and write message\n  var format = process.stderr.isTTY\n    ? formatColor\n    : formatPlain\n  var output = format.call(this, msg, caller, stack.slice(i))\n  process.stderr.write(output + '\\n', 'utf8')\n}\n\n/**\n * Get call site location as array.\n */\n\nfunction callSiteLocation (callSite) {\n  var file = callSite.getFileName() || '<anonymous>'\n  var line = callSite.getLineNumber()\n  var colm = callSite.getColumnNumber()\n\n  if (callSite.isEval()) {\n    file = callSite.getEvalOrigin() + ', ' + file\n  }\n\n  var site = [file, line, colm]\n\n  site.callSite = callSite\n  site.name = callSite.getFunctionName()\n\n  return site\n}\n\n/**\n * Generate a default message from the site.\n */\n\nfunction defaultMessage (site) {\n  var callSite = site.callSite\n  var funcName = site.name\n\n  // make useful anonymous name\n  if (!funcName) {\n    funcName = '<anonymous@' + formatLocation(site) + '>'\n  }\n\n  var context = callSite.getThis()\n  var typeName = context && callSite.getTypeName()\n\n  // ignore useless type name\n  if (typeName === 'Object') {\n    typeName = undefined\n  }\n\n  // make useful type name\n  if (typeName === 'Function') {\n    typeName = context.name || typeName\n  }\n\n  return typeName && callSite.getMethodName()\n    ? typeName + '.' + funcName\n    : funcName\n}\n\n/**\n * Format deprecation message without color.\n */\n\nfunction formatPlain (msg, caller, stack) {\n  var timestamp = new Date().toUTCString()\n\n  var formatted = timestamp +\n    ' ' + this._namespace +\n    ' deprecated ' + msg\n\n  // add stack trace\n  if (this._traced) {\n    for (var i = 0; i < stack.length; i++) {\n      formatted += '\\n    at ' + stack[i].toString()\n    }\n\n    return formatted\n  }\n\n  if (caller) {\n    formatted += ' at ' + formatLocation(caller)\n  }\n\n  return formatted\n}\n\n/**\n * Format deprecation message with color.\n */\n\nfunction formatColor (msg, caller, stack) {\n  var formatted = '\\x1b[36;1m' + this._namespace + '\\x1b[22;39m' + // bold cyan\n    ' \\x1b[33;1mdeprecated\\x1b[22;39m' + // bold yellow\n    ' \\x1b[0m' + msg + '\\x1b[39m' // reset\n\n  // add stack trace\n  if (this._traced) {\n    for (var i = 0; i < stack.length; i++) {\n      formatted += '\\n    \\x1b[36mat ' + stack[i].toString() + '\\x1b[39m' // cyan\n    }\n\n    return formatted\n  }\n\n  if (caller) {\n    formatted += ' \\x1b[36m' + formatLocation(caller) + '\\x1b[39m' // cyan\n  }\n\n  return formatted\n}\n\n/**\n * Format call site location.\n */\n\nfunction formatLocation (callSite) {\n  return relative(basePath, callSite[0]) +\n    ':' + callSite[1] +\n    ':' + callSite[2]\n}\n\n/**\n * Get the stack as array of call sites.\n */\n\nfunction getStack () {\n  var limit = Error.stackTraceLimit\n  var obj = {}\n  var prep = Error.prepareStackTrace\n\n  Error.prepareStackTrace = prepareObjectStackTrace\n  Error.stackTraceLimit = Math.max(10, limit)\n\n  // capture the stack\n  Error.captureStackTrace(obj)\n\n  // slice this function off the top\n  var stack = obj.stack.slice(1)\n\n  Error.prepareStackTrace = prep\n  Error.stackTraceLimit = limit\n\n  return stack\n}\n\n/**\n * Capture call site stack from v8.\n */\n\nfunction prepareObjectStackTrace (obj, stack) {\n  return stack\n}\n\n/**\n * Return a wrapped function in a deprecation message.\n */\n\nfunction wrapfunction (fn, message) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('argument fn must be a function')\n  }\n\n  var args = createArgumentsString(fn.length)\n  var stack = getStack()\n  var site = callSiteLocation(stack[1])\n\n  site.name = fn.name\n\n  // eslint-disable-next-line no-new-func\n  var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site',\n    '\"use strict\"\\n' +\n    'return function (' + args + ') {' +\n    'log.call(deprecate, message, site)\\n' +\n    'return fn.apply(this, arguments)\\n' +\n    '}')(fn, log, this, message, site)\n\n  return deprecatedfn\n}\n\n/**\n * Wrap property in a deprecation message.\n */\n\nfunction wrapproperty (obj, prop, message) {\n  if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n    throw new TypeError('argument obj must be object')\n  }\n\n  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n\n  if (!descriptor) {\n    throw new TypeError('must call property on owner object')\n  }\n\n  if (!descriptor.configurable) {\n    throw new TypeError('property must be configurable')\n  }\n\n  var deprecate = this\n  var stack = getStack()\n  var site = callSiteLocation(stack[1])\n\n  // set site name\n  site.name = prop\n\n  // convert data descriptor\n  if ('value' in descriptor) {\n    descriptor = convertDataDescriptorToAccessor(obj, prop, message)\n  }\n\n  var get = descriptor.get\n  var set = descriptor.set\n\n  // wrap getter\n  if (typeof get === 'function') {\n    descriptor.get = function getter () {\n      log.call(deprecate, message, site)\n      return get.apply(this, arguments)\n    }\n  }\n\n  // wrap setter\n  if (typeof set === 'function') {\n    descriptor.set = function setter () {\n      log.call(deprecate, message, site)\n      return set.apply(this, arguments)\n    }\n  }\n\n  Object.defineProperty(obj, prop, descriptor)\n}\n\n/**\n * Create DeprecationError for deprecation\n */\n\nfunction DeprecationError (namespace, message, stack) {\n  var error = new Error()\n  var stackString\n\n  Object.defineProperty(error, 'constructor', {\n    value: DeprecationError\n  })\n\n  Object.defineProperty(error, 'message', {\n    configurable: true,\n    enumerable: false,\n    value: message,\n    writable: true\n  })\n\n  Object.defineProperty(error, 'name', {\n    enumerable: false,\n    configurable: true,\n    value: 'DeprecationError',\n    writable: true\n  })\n\n  Object.defineProperty(error, 'namespace', {\n    configurable: true,\n    enumerable: false,\n    value: namespace,\n    writable: true\n  })\n\n  Object.defineProperty(error, 'stack', {\n    configurable: true,\n    enumerable: false,\n    get: function () {\n      if (stackString !== undefined) {\n        return stackString\n      }\n\n      // prepare stack trace\n      return (stackString = createStackString.call(this, stack))\n    },\n    set: function setter (val) {\n      stackString = val\n    }\n  })\n\n  return error\n}\n", "'use strict'\n/* eslint no-proto: 0 */\nmodule.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties)\n\nfunction setProtoOf (obj, proto) {\n  obj.__proto__ = proto\n  return obj\n}\n\nfunction mixinProperties (obj, proto) {\n  for (var prop in proto) {\n    if (!Object.prototype.hasOwnProperty.call(obj, prop)) {\n      obj[prop] = proto[prop]\n    }\n  }\n  return obj\n}\n", "{\n  \"100\": \"Continue\",\n  \"101\": \"Switching Protocols\",\n  \"102\": \"Processing\",\n  \"103\": \"Early Hints\",\n  \"200\": \"OK\",\n  \"201\": \"Created\",\n  \"202\": \"Accepted\",\n  \"203\": \"Non-Authoritative Information\",\n  \"204\": \"No Content\",\n  \"205\": \"Reset Content\",\n  \"206\": \"Partial Content\",\n  \"207\": \"Multi-Status\",\n  \"208\": \"Already Reported\",\n  \"226\": \"IM Used\",\n  \"300\": \"Multiple Choices\",\n  \"301\": \"Moved Permanently\",\n  \"302\": \"Found\",\n  \"303\": \"See Other\",\n  \"304\": \"Not Modified\",\n  \"305\": \"Use Proxy\",\n  \"307\": \"Temporary Redirect\",\n  \"308\": \"Permanent Redirect\",\n  \"400\": \"Bad Request\",\n  \"401\": \"Unauthorized\",\n  \"402\": \"Payment Required\",\n  \"403\": \"Forbidden\",\n  \"404\": \"Not Found\",\n  \"405\": \"Method Not Allowed\",\n  \"406\": \"Not Acceptable\",\n  \"407\": \"Proxy Authentication Required\",\n  \"408\": \"Request Timeout\",\n  \"409\": \"Conflict\",\n  \"410\": \"Gone\",\n  \"411\": \"Length Required\",\n  \"412\": \"Precondition Failed\",\n  \"413\": \"Payload Too Large\",\n  \"414\": \"URI Too Long\",\n  \"415\": \"Unsupported Media Type\",\n  \"416\": \"Range Not Satisfiable\",\n  \"417\": \"Expectation Failed\",\n  \"418\": \"I'm a Teapot\",\n  \"421\": \"Misdirected Request\",\n  \"422\": \"Unprocessable Entity\",\n  \"423\": \"Locked\",\n  \"424\": \"Failed Dependency\",\n  \"425\": \"Too Early\",\n  \"426\": \"Upgrade Required\",\n  \"428\": \"Precondition Required\",\n  \"429\": \"Too Many Requests\",\n  \"431\": \"Request Header Fields Too Large\",\n  \"451\": \"Unavailable For Legal Reasons\",\n  \"500\": \"Internal Server Error\",\n  \"501\": \"Not Implemented\",\n  \"502\": \"Bad Gateway\",\n  \"503\": \"Service Unavailable\",\n  \"504\": \"Gateway Timeout\",\n  \"505\": \"HTTP Version Not Supported\",\n  \"506\": \"Variant Also Negotiates\",\n  \"507\": \"Insufficient Storage\",\n  \"508\": \"Loop Detected\",\n  \"509\": \"Bandwidth Limit Exceeded\",\n  \"510\": \"Not Extended\",\n  \"511\": \"Network Authentication Required\"\n}\n", "/*!\n * statuses\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar codes = require('./codes.json')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = status\n\n// status code to message map\nstatus.message = codes\n\n// status message (lower-case) to code map\nstatus.code = createMessageToStatusCodeMap(codes)\n\n// array of status codes\nstatus.codes = createStatusCodeList(codes)\n\n// status codes for redirects\nstatus.redirect = {\n  300: true,\n  301: true,\n  302: true,\n  303: true,\n  305: true,\n  307: true,\n  308: true\n}\n\n// status codes for empty bodies\nstatus.empty = {\n  204: true,\n  205: true,\n  304: true\n}\n\n// status codes for when you should retry the request\nstatus.retry = {\n  502: true,\n  503: true,\n  504: true\n}\n\n/**\n * Create a map of message to status code.\n * @private\n */\n\nfunction createMessageToStatusCodeMap (codes) {\n  var map = {}\n\n  Object.keys(codes).forEach(function forEachCode (code) {\n    var message = codes[code]\n    var status = Number(code)\n\n    // populate map\n    map[message.toLowerCase()] = status\n  })\n\n  return map\n}\n\n/**\n * Create a list of all status codes.\n * @private\n */\n\nfunction createStatusCodeList (codes) {\n  return Object.keys(codes).map(function mapCode (code) {\n    return Number(code)\n  })\n}\n\n/**\n * Get the status code for given message.\n * @private\n */\n\nfunction getStatusCode (message) {\n  var msg = message.toLowerCase()\n\n  if (!Object.prototype.hasOwnProperty.call(status.code, msg)) {\n    throw new Error('invalid status message: \"' + message + '\"')\n  }\n\n  return status.code[msg]\n}\n\n/**\n * Get the status message for given code.\n * @private\n */\n\nfunction getStatusMessage (code) {\n  if (!Object.prototype.hasOwnProperty.call(status.message, code)) {\n    throw new Error('invalid status code: ' + code)\n  }\n\n  return status.message[code]\n}\n\n/**\n * Get the status code.\n *\n * Given a number, this will throw if it is not a known status\n * code, otherwise the code will be returned. Given a string,\n * the string will be parsed for a number and return the code\n * if valid, otherwise will lookup the code assuming this is\n * the status message.\n *\n * @param {string|number} code\n * @returns {number}\n * @public\n */\n\nfunction status (code) {\n  if (typeof code === 'number') {\n    return getStatusMessage(code)\n  }\n\n  if (typeof code !== 'string') {\n    throw new TypeError('code must be a number or string')\n  }\n\n  // '403'\n  var n = parseInt(code, 10)\n  if (!isNaN(n)) {\n    return getStatusMessage(n)\n  }\n\n  return getStatusCode(code)\n}\n", "if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n", "try {\n  var util = require('util');\n  /* istanbul ignore next */\n  if (typeof util.inherits !== 'function') throw '';\n  module.exports = util.inherits;\n} catch (e) {\n  /* istanbul ignore next */\n  module.exports = require('./inherits_browser.js');\n}\n", "/*!\n * toidentifier\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = toIdentifier\n\n/**\n * Trasform the given string into a JavaScript identifier\n *\n * @param {string} str\n * @returns {string}\n * @public\n */\n\nfunction toIdentifier (str) {\n  return str\n    .split(' ')\n    .map(function (token) {\n      return token.slice(0, 1).toUpperCase() + token.slice(1)\n    })\n    .join('')\n    .replace(/[^ _0-9a-z]/gi, '')\n}\n", "/*!\n * http-errors\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar deprecate = require('depd')('http-errors')\nvar setPrototypeOf = require('setprototypeof')\nvar statuses = require('statuses')\nvar inherits = require('inherits')\nvar toIdentifier = require('toidentifier')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = createError\nmodule.exports.HttpError = createHttpErrorConstructor()\nmodule.exports.isHttpError = createIsHttpErrorFunction(module.exports.HttpError)\n\n// Populate exports for all constructors\npopulateConstructorExports(module.exports, statuses.codes, module.exports.HttpError)\n\n/**\n * Get the code class of a status code.\n * @private\n */\n\nfunction codeClass (status) {\n  return Number(String(status).charAt(0) + '00')\n}\n\n/**\n * Create a new HTTP Error.\n *\n * @returns {Error}\n * @public\n */\n\nfunction createError () {\n  // so much arity going on ~_~\n  var err\n  var msg\n  var status = 500\n  var props = {}\n  for (var i = 0; i < arguments.length; i++) {\n    var arg = arguments[i]\n    var type = typeof arg\n    if (type === 'object' && arg instanceof Error) {\n      err = arg\n      status = err.status || err.statusCode || status\n    } else if (type === 'number' && i === 0) {\n      status = arg\n    } else if (type === 'string') {\n      msg = arg\n    } else if (type === 'object') {\n      props = arg\n    } else {\n      throw new TypeError('argument #' + (i + 1) + ' unsupported type ' + type)\n    }\n  }\n\n  if (typeof status === 'number' && (status < 400 || status >= 600)) {\n    deprecate('non-error status code; use only 4xx or 5xx status codes')\n  }\n\n  if (typeof status !== 'number' ||\n    (!statuses.message[status] && (status < 400 || status >= 600))) {\n    status = 500\n  }\n\n  // constructor\n  var HttpError = createError[status] || createError[codeClass(status)]\n\n  if (!err) {\n    // create error\n    err = HttpError\n      ? new HttpError(msg)\n      : new Error(msg || statuses.message[status])\n    Error.captureStackTrace(err, createError)\n  }\n\n  if (!HttpError || !(err instanceof HttpError) || err.status !== status) {\n    // add properties to generic error\n    err.expose = status < 500\n    err.status = err.statusCode = status\n  }\n\n  for (var key in props) {\n    if (key !== 'status' && key !== 'statusCode') {\n      err[key] = props[key]\n    }\n  }\n\n  return err\n}\n\n/**\n * Create HTTP error abstract base class.\n * @private\n */\n\nfunction createHttpErrorConstructor () {\n  function HttpError () {\n    throw new TypeError('cannot construct abstract class')\n  }\n\n  inherits(HttpError, Error)\n\n  return HttpError\n}\n\n/**\n * Create a constructor for a client error.\n * @private\n */\n\nfunction createClientErrorConstructor (HttpError, name, code) {\n  var className = toClassName(name)\n\n  function ClientError (message) {\n    // create the error object\n    var msg = message != null ? message : statuses.message[code]\n    var err = new Error(msg)\n\n    // capture a stack trace to the construction point\n    Error.captureStackTrace(err, ClientError)\n\n    // adjust the [[Prototype]]\n    setPrototypeOf(err, ClientError.prototype)\n\n    // redefine the error message\n    Object.defineProperty(err, 'message', {\n      enumerable: true,\n      configurable: true,\n      value: msg,\n      writable: true\n    })\n\n    // redefine the error name\n    Object.defineProperty(err, 'name', {\n      enumerable: false,\n      configurable: true,\n      value: className,\n      writable: true\n    })\n\n    return err\n  }\n\n  inherits(ClientError, HttpError)\n  nameFunc(ClientError, className)\n\n  ClientError.prototype.status = code\n  ClientError.prototype.statusCode = code\n  ClientError.prototype.expose = true\n\n  return ClientError\n}\n\n/**\n * Create function to test is a value is a HttpError.\n * @private\n */\n\nfunction createIsHttpErrorFunction (HttpError) {\n  return function isHttpError (val) {\n    if (!val || typeof val !== 'object') {\n      return false\n    }\n\n    if (val instanceof HttpError) {\n      return true\n    }\n\n    return val instanceof Error &&\n      typeof val.expose === 'boolean' &&\n      typeof val.statusCode === 'number' && val.status === val.statusCode\n  }\n}\n\n/**\n * Create a constructor for a server error.\n * @private\n */\n\nfunction createServerErrorConstructor (HttpError, name, code) {\n  var className = toClassName(name)\n\n  function ServerError (message) {\n    // create the error object\n    var msg = message != null ? message : statuses.message[code]\n    var err = new Error(msg)\n\n    // capture a stack trace to the construction point\n    Error.captureStackTrace(err, ServerError)\n\n    // adjust the [[Prototype]]\n    setPrototypeOf(err, ServerError.prototype)\n\n    // redefine the error message\n    Object.defineProperty(err, 'message', {\n      enumerable: true,\n      configurable: true,\n      value: msg,\n      writable: true\n    })\n\n    // redefine the error name\n    Object.defineProperty(err, 'name', {\n      enumerable: false,\n      configurable: true,\n      value: className,\n      writable: true\n    })\n\n    return err\n  }\n\n  inherits(ServerError, HttpError)\n  nameFunc(ServerError, className)\n\n  ServerError.prototype.status = code\n  ServerError.prototype.statusCode = code\n  ServerError.prototype.expose = false\n\n  return ServerError\n}\n\n/**\n * Set the name of a function, if possible.\n * @private\n */\n\nfunction nameFunc (func, name) {\n  var desc = Object.getOwnPropertyDescriptor(func, 'name')\n\n  if (desc && desc.configurable) {\n    desc.value = name\n    Object.defineProperty(func, 'name', desc)\n  }\n}\n\n/**\n * Populate the exports object with constructors for every error class.\n * @private\n */\n\nfunction populateConstructorExports (exports, codes, HttpError) {\n  codes.forEach(function forEachCode (code) {\n    var CodeError\n    var name = toIdentifier(statuses.message[code])\n\n    switch (codeClass(code)) {\n      case 400:\n        CodeError = createClientErrorConstructor(HttpError, name, code)\n        break\n      case 500:\n        CodeError = createServerErrorConstructor(HttpError, name, code)\n        break\n    }\n\n    if (CodeError) {\n      // export the constructor\n      exports[code] = CodeError\n      exports[name] = CodeError\n    }\n  })\n}\n\n/**\n * Get a class name from a name identifier.\n *\n * @param {string} name\n * @returns {string}\n * @private\n */\n\nfunction toClassName (name) {\n  return name.slice(-5) === 'Error' ? name : name + 'Error'\n}\n", "/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\n\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\n\nvar map = {\n  b:  1,\n  kb: 1 << 10,\n  mb: 1 << 20,\n  gb: 1 << 30,\n  tb: Math.pow(1024, 4),\n  pb: Math.pow(1024, 5),\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb|pb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n *  case: [string],\n *  decimalPlaces: [number]\n *  fixedDecimals: [boolean]\n *  thousandsSeparator: [string]\n *  unitSeparator: [string]\n *  }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n  if (typeof value === 'string') {\n    return parse(value);\n  }\n\n  if (typeof value === 'number') {\n    return format(value, options);\n  }\n\n  return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n  if (!Number.isFinite(value)) {\n    return null;\n  }\n\n  var mag = Math.abs(value);\n  var thousandsSeparator = (options && options.thousandsSeparator) || '';\n  var unitSeparator = (options && options.unitSeparator) || '';\n  var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;\n  var fixedDecimals = Boolean(options && options.fixedDecimals);\n  var unit = (options && options.unit) || '';\n\n  if (!unit || !map[unit.toLowerCase()]) {\n    if (mag >= map.pb) {\n      unit = 'PB';\n    } else if (mag >= map.tb) {\n      unit = 'TB';\n    } else if (mag >= map.gb) {\n      unit = 'GB';\n    } else if (mag >= map.mb) {\n      unit = 'MB';\n    } else if (mag >= map.kb) {\n      unit = 'KB';\n    } else {\n      unit = 'B';\n    }\n  }\n\n  var val = value / map[unit.toLowerCase()];\n  var str = val.toFixed(decimalPlaces);\n\n  if (!fixedDecimals) {\n    str = str.replace(formatDecimalsRegExp, '$1');\n  }\n\n  if (thousandsSeparator) {\n    str = str.split('.').map(function (s, i) {\n      return i === 0\n        ? s.replace(formatThousandsRegExp, thousandsSeparator)\n        : s\n    }).join('.');\n  }\n\n  return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n  if (typeof val === 'number' && !isNaN(val)) {\n    return val;\n  }\n\n  if (typeof val !== 'string') {\n    return null;\n  }\n\n  // Test if the string passed is valid\n  var results = parseRegExp.exec(val);\n  var floatValue;\n  var unit = 'b';\n\n  if (!results) {\n    // Nothing could be extracted from the given string\n    floatValue = parseInt(val, 10);\n    unit = 'b'\n  } else {\n    // Retrieve the value and the unit\n    floatValue = parseFloat(results[1]);\n    unit = results[4].toLowerCase();\n  }\n\n  if (isNaN(floatValue)) {\n    return null;\n  }\n\n  return Math.floor(map[unit] * floatValue);\n}\n", "/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n  if (!buffer.hasOwnProperty(key)) continue\n  if (key === 'SlowBuffer' || key === 'Buffer') continue\n  safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n  if (!Buffer.hasOwnProperty(key)) continue\n  if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n  Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n  Safer.from = function (value, encodingOrOffset, length) {\n    if (typeof value === 'number') {\n      throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n    }\n    if (value && typeof value.length === 'undefined') {\n      throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n    }\n    return Buffer(value, encodingOrOffset, length)\n  }\n}\n\nif (!Safer.alloc) {\n  Safer.alloc = function (size, fill, encoding) {\n    if (typeof size !== 'number') {\n      throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n    }\n    if (size < 0 || size >= 2 * (1 << 30)) {\n      throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n    }\n    var buf = Buffer(size)\n    if (!fill || fill.length === 0) {\n      buf.fill(0)\n    } else if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n    return buf\n  }\n}\n\nif (!safer.kStringMaxLength) {\n  try {\n    safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n  } catch (e) {\n    // we can't determine kStringMaxLength in environments where process.binding\n    // is unsupported, so let's not set it\n  }\n}\n\nif (!safer.constants) {\n  safer.constants = {\n    MAX_LENGTH: safer.kMaxLength\n  }\n  if (safer.kStringMaxLength) {\n    safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n  }\n}\n\nmodule.exports = safer\n", "\"use strict\"\n\nvar BOMChar = \"\\uFEFF\"\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper (encoder, options) {\n  this.encoder = encoder\n  this.addBOM = true\n}\n\nPrependBOMWrapper.prototype.write = function (str) {\n  if (this.addBOM) {\n    str = BOMChar + str\n    this.addBOM = false\n  }\n\n  return this.encoder.write(str)\n}\n\nPrependBOMWrapper.prototype.end = function () {\n  return this.encoder.end()\n}\n\n// ------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper\nfunction StripBOMWrapper (decoder, options) {\n  this.decoder = decoder\n  this.pass = false\n  this.options = options || {}\n}\n\nStripBOMWrapper.prototype.write = function (buf) {\n  var res = this.decoder.write(buf)\n  if (this.pass || !res) { return res }\n\n  if (res[0] === BOMChar) {\n    res = res.slice(1)\n    if (typeof this.options.stripBOM === \"function\") { this.options.stripBOM() }\n  }\n\n  this.pass = true\n  return res\n}\n\nStripBOMWrapper.prototype.end = function () {\n  return this.decoder.end()\n}\n", "\"use strict\"\n\nvar hasOwn = typeof Object.hasOwn === \"undefined\" ? Function.call.bind(Object.prototype.hasOwnProperty) : Object.hasOwn\n\nfunction mergeModules (target, module) {\n  for (var key in module) {\n    if (hasOwn(module, key)) {\n      target[key] = module[key]\n    }\n  }\n}\n\nmodule.exports = mergeModules\n", "\"use strict\"\nvar Buffer = require(\"safer-buffer\").Buffer\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n  // Encodings\n  utf8: { type: \"_internal\", bomAware: true },\n  cesu8: { type: \"_internal\", bomAware: true },\n  unicode11utf8: \"utf8\",\n\n  ucs2: { type: \"_internal\", bomAware: true },\n  utf16le: \"ucs2\",\n\n  binary: { type: \"_internal\" },\n  base64: { type: \"_internal\" },\n  hex: { type: \"_internal\" },\n\n  // Codec.\n  _internal: InternalCodec\n}\n\n// ------------------------------------------------------------------------------\n\nfunction InternalCodec (codecOptions, iconv) {\n  this.enc = codecOptions.encodingName\n  this.bomAware = codecOptions.bomAware\n\n  if (this.enc === \"base64\") { this.encoder = InternalEncoderBase64 } else if (this.enc === \"utf8\") { this.encoder = InternalEncoderUtf8 } else if (this.enc === \"cesu8\") {\n    this.enc = \"utf8\" // Use utf8 for decoding.\n    this.encoder = InternalEncoderCesu8\n\n    // Add decoder for versions of Node not supporting CESU-8\n    if (Buffer.from(\"eda0bdedb2a9\", \"hex\").toString() !== \"\uD83D\uDCA9\") {\n      this.decoder = InternalDecoderCesu8\n      this.defaultCharUnicode = iconv.defaultCharUnicode\n    }\n  }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder\nInternalCodec.prototype.decoder = InternalDecoder\n\n// ------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require(\"string_decoder\").StringDecoder\n\nfunction InternalDecoder (options, codec) {\n  this.decoder = new StringDecoder(codec.enc)\n}\n\nInternalDecoder.prototype.write = function (buf) {\n  if (!Buffer.isBuffer(buf)) {\n    buf = Buffer.from(buf)\n  }\n\n  return this.decoder.write(buf)\n}\n\nInternalDecoder.prototype.end = function () {\n  return this.decoder.end()\n}\n\n// ------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder (options, codec) {\n  this.enc = codec.enc\n}\n\nInternalEncoder.prototype.write = function (str) {\n  return Buffer.from(str, this.enc)\n}\n\nInternalEncoder.prototype.end = function () {\n}\n\n// ------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64 (options, codec) {\n  this.prevStr = \"\"\n}\n\nInternalEncoderBase64.prototype.write = function (str) {\n  str = this.prevStr + str\n  var completeQuads = str.length - (str.length % 4)\n  this.prevStr = str.slice(completeQuads)\n  str = str.slice(0, completeQuads)\n\n  return Buffer.from(str, \"base64\")\n}\n\nInternalEncoderBase64.prototype.end = function () {\n  return Buffer.from(this.prevStr, \"base64\")\n}\n\n// ------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8 (options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function (str) {\n  var buf = Buffer.alloc(str.length * 3); var bufIdx = 0\n  for (var i = 0; i < str.length; i++) {\n    var charCode = str.charCodeAt(i)\n    // Naive implementation, but it works because CESU-8 is especially easy\n    // to convert from UTF-16 (which all JS strings are encoded in).\n    if (charCode < 0x80) { buf[bufIdx++] = charCode } else if (charCode < 0x800) {\n      buf[bufIdx++] = 0xC0 + (charCode >>> 6)\n      buf[bufIdx++] = 0x80 + (charCode & 0x3f)\n    } else { // charCode will always be < 0x10000 in javascript.\n      buf[bufIdx++] = 0xE0 + (charCode >>> 12)\n      buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f)\n      buf[bufIdx++] = 0x80 + (charCode & 0x3f)\n    }\n  }\n  return buf.slice(0, bufIdx)\n}\n\nInternalEncoderCesu8.prototype.end = function () {\n}\n\n// ------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8 (options, codec) {\n  this.acc = 0\n  this.contBytes = 0\n  this.accBytes = 0\n  this.defaultCharUnicode = codec.defaultCharUnicode\n}\n\nInternalDecoderCesu8.prototype.write = function (buf) {\n  var acc = this.acc; var contBytes = this.contBytes; var accBytes = this.accBytes\n  var res = \"\"\n  for (var i = 0; i < buf.length; i++) {\n    var curByte = buf[i]\n    if ((curByte & 0xC0) !== 0x80) { // Leading byte\n      if (contBytes > 0) { // Previous code is invalid\n        res += this.defaultCharUnicode\n        contBytes = 0\n      }\n\n      if (curByte < 0x80) { // Single-byte code\n        res += String.fromCharCode(curByte)\n      } else if (curByte < 0xE0) { // Two-byte code\n        acc = curByte & 0x1F\n        contBytes = 1; accBytes = 1\n      } else if (curByte < 0xF0) { // Three-byte code\n        acc = curByte & 0x0F\n        contBytes = 2; accBytes = 1\n      } else { // Four or more are not supported for CESU-8.\n        res += this.defaultCharUnicode\n      }\n    } else { // Continuation byte\n      if (contBytes > 0) { // We're waiting for it.\n        acc = (acc << 6) | (curByte & 0x3f)\n        contBytes--; accBytes++\n        if (contBytes === 0) {\n          // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n          if (accBytes === 2 && acc < 0x80 && acc > 0) {\n            res += this.defaultCharUnicode\n          } else if (accBytes === 3 && acc < 0x800) {\n            res += this.defaultCharUnicode\n          } else {\n            // Actually add character.\n            res += String.fromCharCode(acc)\n          }\n        }\n      } else { // Unexpected continuation byte\n        res += this.defaultCharUnicode\n      }\n    }\n  }\n  this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes\n  return res\n}\n\nInternalDecoderCesu8.prototype.end = function () {\n  var res = 0\n  if (this.contBytes > 0) { res += this.defaultCharUnicode }\n  return res\n}\n\n// ------------------------------------------------------------------------------\n// check the chunk boundaries for surrogate pair\n\nfunction InternalEncoderUtf8 (options, codec) {\n  this.highSurrogate = \"\"\n}\n\nInternalEncoderUtf8.prototype.write = function (str) {\n  if (this.highSurrogate) {\n    str = this.highSurrogate + str\n    this.highSurrogate = \"\"\n  }\n\n  if (str.length > 0) {\n    var charCode = str.charCodeAt(str.length - 1)\n    if (charCode >= 0xd800 && charCode < 0xdc00) {\n      this.highSurrogate = str[str.length - 1]\n      str = str.slice(0, str.length - 1)\n    }\n  }\n\n  return Buffer.from(str, this.enc)\n}\n\nInternalEncoderUtf8.prototype.end = function () {\n  if (this.highSurrogate) {\n    var str = this.highSurrogate\n    this.highSurrogate = \"\"\n    return Buffer.from(str, this.enc)\n  }\n}\n", "\"use strict\"\n\nvar Buffer = require(\"safer-buffer\").Buffer\n\n// == UTF32-LE/BE codec. ==========================================================\n\nexports._utf32 = Utf32Codec\n\nfunction Utf32Codec (codecOptions, iconv) {\n  this.iconv = iconv\n  this.bomAware = true\n  this.isLE = codecOptions.isLE\n}\n\nexports.utf32le = { type: \"_utf32\", isLE: true }\nexports.utf32be = { type: \"_utf32\", isLE: false }\n\n// Aliases\nexports.ucs4le = \"utf32le\"\nexports.ucs4be = \"utf32be\"\n\nUtf32Codec.prototype.encoder = Utf32Encoder\nUtf32Codec.prototype.decoder = Utf32Decoder\n\n// -- Encoding\n\nfunction Utf32Encoder (options, codec) {\n  this.isLE = codec.isLE\n  this.highSurrogate = 0\n}\n\nUtf32Encoder.prototype.write = function (str) {\n  var src = Buffer.from(str, \"ucs2\")\n  var dst = Buffer.alloc(src.length * 2)\n  var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE\n  var offset = 0\n\n  for (var i = 0; i < src.length; i += 2) {\n    var code = src.readUInt16LE(i)\n    var isHighSurrogate = (code >= 0xD800 && code < 0xDC00)\n    var isLowSurrogate = (code >= 0xDC00 && code < 0xE000)\n\n    if (this.highSurrogate) {\n      if (isHighSurrogate || !isLowSurrogate) {\n        // There shouldn't be two high surrogates in a row, nor a high surrogate which isn't followed by a low\n        // surrogate. If this happens, keep the pending high surrogate as a stand-alone semi-invalid character\n        // (technically wrong, but expected by some applications, like Windows file names).\n        write32.call(dst, this.highSurrogate, offset)\n        offset += 4\n      } else {\n        // Create 32-bit value from high and low surrogates;\n        var codepoint = (((this.highSurrogate - 0xD800) << 10) | (code - 0xDC00)) + 0x10000\n\n        write32.call(dst, codepoint, offset)\n        offset += 4\n        this.highSurrogate = 0\n\n        continue\n      }\n    }\n\n    if (isHighSurrogate) { this.highSurrogate = code } else {\n      // Even if the current character is a low surrogate, with no previous high surrogate, we'll\n      // encode it as a semi-invalid stand-alone character for the same reasons expressed above for\n      // unpaired high surrogates.\n      write32.call(dst, code, offset)\n      offset += 4\n      this.highSurrogate = 0\n    }\n  }\n\n  if (offset < dst.length) { dst = dst.slice(0, offset) }\n\n  return dst\n}\n\nUtf32Encoder.prototype.end = function () {\n  // Treat any leftover high surrogate as a semi-valid independent character.\n  if (!this.highSurrogate) { return }\n\n  var buf = Buffer.alloc(4)\n\n  if (this.isLE) { buf.writeUInt32LE(this.highSurrogate, 0) } else { buf.writeUInt32BE(this.highSurrogate, 0) }\n\n  this.highSurrogate = 0\n\n  return buf\n}\n\n// -- Decoding\n\nfunction Utf32Decoder (options, codec) {\n  this.isLE = codec.isLE\n  this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0)\n  this.overflow = []\n}\n\nUtf32Decoder.prototype.write = function (src) {\n  if (src.length === 0) { return \"\" }\n\n  var i = 0\n  var codepoint = 0\n  var dst = Buffer.alloc(src.length + 4)\n  var offset = 0\n  var isLE = this.isLE\n  var overflow = this.overflow\n  var badChar = this.badChar\n\n  if (overflow.length > 0) {\n    for (; i < src.length && overflow.length < 4; i++) { overflow.push(src[i]) }\n\n    if (overflow.length === 4) {\n      // NOTE: codepoint is a signed int32 and can be negative.\n      // NOTE: We copied this block from below to help V8 optimize it (it works with array, not buffer).\n      if (isLE) {\n        codepoint = overflow[i] | (overflow[i + 1] << 8) | (overflow[i + 2] << 16) | (overflow[i + 3] << 24)\n      } else {\n        codepoint = overflow[i + 3] | (overflow[i + 2] << 8) | (overflow[i + 1] << 16) | (overflow[i] << 24)\n      }\n      overflow.length = 0\n\n      offset = _writeCodepoint(dst, offset, codepoint, badChar)\n    }\n  }\n\n  // Main loop. Should be as optimized as possible.\n  for (; i < src.length - 3; i += 4) {\n    // NOTE: codepoint is a signed int32 and can be negative.\n    if (isLE) {\n      codepoint = src[i] | (src[i + 1] << 8) | (src[i + 2] << 16) | (src[i + 3] << 24)\n    } else {\n      codepoint = src[i + 3] | (src[i + 2] << 8) | (src[i + 1] << 16) | (src[i] << 24)\n    }\n    offset = _writeCodepoint(dst, offset, codepoint, badChar)\n  }\n\n  // Keep overflowing bytes.\n  for (; i < src.length; i++) {\n    overflow.push(src[i])\n  }\n\n  return dst.slice(0, offset).toString(\"ucs2\")\n}\n\nfunction _writeCodepoint (dst, offset, codepoint, badChar) {\n  // NOTE: codepoint is signed int32 and can be negative. We keep it that way to help V8 with optimizations.\n  if (codepoint < 0 || codepoint > 0x10FFFF) {\n    // Not a valid Unicode codepoint\n    codepoint = badChar\n  }\n\n  // Ephemeral Planes: Write high surrogate.\n  if (codepoint >= 0x10000) {\n    codepoint -= 0x10000\n\n    var high = 0xD800 | (codepoint >> 10)\n    dst[offset++] = high & 0xff\n    dst[offset++] = high >> 8\n\n    // Low surrogate is written below.\n    var codepoint = 0xDC00 | (codepoint & 0x3FF)\n  }\n\n  // Write BMP char or low surrogate.\n  dst[offset++] = codepoint & 0xff\n  dst[offset++] = codepoint >> 8\n\n  return offset\n};\n\nUtf32Decoder.prototype.end = function () {\n  this.overflow.length = 0\n}\n\n// == UTF-32 Auto codec =============================================================\n// Decoder chooses automatically from UTF-32LE and UTF-32BE using BOM and space-based heuristic.\n// Defaults to UTF-32LE. http://en.wikipedia.org/wiki/UTF-32\n// Encoder/decoder default can be changed: iconv.decode(buf, 'utf32', {defaultEncoding: 'utf-32be'});\n\n// Encoder prepends BOM (which can be overridden with (addBOM: false}).\n\nexports.utf32 = Utf32AutoCodec\nexports.ucs4 = \"utf32\"\n\nfunction Utf32AutoCodec (options, iconv) {\n  this.iconv = iconv\n}\n\nUtf32AutoCodec.prototype.encoder = Utf32AutoEncoder\nUtf32AutoCodec.prototype.decoder = Utf32AutoDecoder\n\n// -- Encoding\n\nfunction Utf32AutoEncoder (options, codec) {\n  options = options || {}\n\n  if (options.addBOM === undefined) {\n    options.addBOM = true\n  }\n\n  this.encoder = codec.iconv.getEncoder(options.defaultEncoding || \"utf-32le\", options)\n}\n\nUtf32AutoEncoder.prototype.write = function (str) {\n  return this.encoder.write(str)\n}\n\nUtf32AutoEncoder.prototype.end = function () {\n  return this.encoder.end()\n}\n\n// -- Decoding\n\nfunction Utf32AutoDecoder (options, codec) {\n  this.decoder = null\n  this.initialBufs = []\n  this.initialBufsLen = 0\n  this.options = options || {}\n  this.iconv = codec.iconv\n}\n\nUtf32AutoDecoder.prototype.write = function (buf) {\n  if (!this.decoder) {\n    // Codec is not chosen yet. Accumulate initial bytes.\n    this.initialBufs.push(buf)\n    this.initialBufsLen += buf.length\n\n    if (this.initialBufsLen < 32) // We need more bytes to use space heuristic (see below)\n    { return \"\" }\n\n    // We have enough bytes -> detect endianness.\n    var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding)\n    this.decoder = this.iconv.getDecoder(encoding, this.options)\n\n    var resStr = \"\"\n    for (var i = 0; i < this.initialBufs.length; i++) { resStr += this.decoder.write(this.initialBufs[i]) }\n\n    this.initialBufs.length = this.initialBufsLen = 0\n    return resStr\n  }\n\n  return this.decoder.write(buf)\n}\n\nUtf32AutoDecoder.prototype.end = function () {\n  if (!this.decoder) {\n    var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding)\n    this.decoder = this.iconv.getDecoder(encoding, this.options)\n\n    var resStr = \"\"\n    for (var i = 0; i < this.initialBufs.length; i++) { resStr += this.decoder.write(this.initialBufs[i]) }\n\n    var trail = this.decoder.end()\n    if (trail) { resStr += trail }\n\n    this.initialBufs.length = this.initialBufsLen = 0\n    return resStr\n  }\n\n  return this.decoder.end()\n}\n\nfunction detectEncoding (bufs, defaultEncoding) {\n  var b = []\n  var charsProcessed = 0\n  var invalidLE = 0; var invalidBE = 0   // Number of invalid chars when decoded as LE or BE.\n  var bmpCharsLE = 0; var bmpCharsBE = 0 // Number of BMP chars when decoded as LE or BE.\n\n  outerLoop:\n  for (var i = 0; i < bufs.length; i++) {\n    var buf = bufs[i]\n    for (var j = 0; j < buf.length; j++) {\n      b.push(buf[j])\n      if (b.length === 4) {\n        if (charsProcessed === 0) {\n          // Check BOM first.\n          if (b[0] === 0xFF && b[1] === 0xFE && b[2] === 0 && b[3] === 0) {\n            return \"utf-32le\"\n          }\n          if (b[0] === 0 && b[1] === 0 && b[2] === 0xFE && b[3] === 0xFF) {\n            return \"utf-32be\"\n          }\n        }\n\n        if (b[0] !== 0 || b[1] > 0x10) invalidBE++\n        if (b[3] !== 0 || b[2] > 0x10) invalidLE++\n\n        if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++\n        if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++\n\n        b.length = 0\n        charsProcessed++\n\n        if (charsProcessed >= 100) {\n          break outerLoop\n        }\n      }\n    }\n  }\n\n  // Make decisions.\n  if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE) return \"utf-32be\"\n  if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE) return \"utf-32le\"\n\n  // Couldn't decide (likely all zeros or not enough data).\n  return defaultEncoding || \"utf-32le\"\n}\n", "\"use strict\"\nvar Buffer = require(\"safer-buffer\").Buffer\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec\nfunction Utf16BECodec () {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder\nUtf16BECodec.prototype.decoder = Utf16BEDecoder\nUtf16BECodec.prototype.bomAware = true\n\n// -- Encoding\n\nfunction Utf16BEEncoder () {\n}\n\nUtf16BEEncoder.prototype.write = function (str) {\n  var buf = Buffer.from(str, \"ucs2\")\n  for (var i = 0; i < buf.length; i += 2) {\n    var tmp = buf[i]; buf[i] = buf[i + 1]; buf[i + 1] = tmp\n  }\n  return buf\n}\n\nUtf16BEEncoder.prototype.end = function () {\n}\n\n// -- Decoding\n\nfunction Utf16BEDecoder () {\n  this.overflowByte = -1\n}\n\nUtf16BEDecoder.prototype.write = function (buf) {\n  if (buf.length == 0) { return \"\" }\n\n  var buf2 = Buffer.alloc(buf.length + 1)\n  var i = 0; var j = 0\n\n  if (this.overflowByte !== -1) {\n    buf2[0] = buf[0]\n    buf2[1] = this.overflowByte\n    i = 1; j = 2\n  }\n\n  for (; i < buf.length - 1; i += 2, j += 2) {\n    buf2[j] = buf[i + 1]\n    buf2[j + 1] = buf[i]\n  }\n\n  this.overflowByte = (i == buf.length - 1) ? buf[buf.length - 1] : -1\n\n  return buf2.slice(0, j).toString(\"ucs2\")\n}\n\nUtf16BEDecoder.prototype.end = function () {\n  this.overflowByte = -1\n}\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec\nfunction Utf16Codec (codecOptions, iconv) {\n  this.iconv = iconv\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder\nUtf16Codec.prototype.decoder = Utf16Decoder\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder (options, codec) {\n  options = options || {}\n  if (options.addBOM === undefined) { options.addBOM = true }\n  this.encoder = codec.iconv.getEncoder(\"utf-16le\", options)\n}\n\nUtf16Encoder.prototype.write = function (str) {\n  return this.encoder.write(str)\n}\n\nUtf16Encoder.prototype.end = function () {\n  return this.encoder.end()\n}\n\n// -- Decoding\n\nfunction Utf16Decoder (options, codec) {\n  this.decoder = null\n  this.initialBufs = []\n  this.initialBufsLen = 0\n\n  this.options = options || {}\n  this.iconv = codec.iconv\n}\n\nUtf16Decoder.prototype.write = function (buf) {\n  if (!this.decoder) {\n    // Codec is not chosen yet. Accumulate initial bytes.\n    this.initialBufs.push(buf)\n    this.initialBufsLen += buf.length\n\n    if (this.initialBufsLen < 16) // We need more bytes to use space heuristic (see below)\n    { return \"\" }\n\n    // We have enough bytes -> detect endianness.\n    var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding)\n    this.decoder = this.iconv.getDecoder(encoding, this.options)\n\n    var resStr = \"\"\n    for (var i = 0; i < this.initialBufs.length; i++) { resStr += this.decoder.write(this.initialBufs[i]) }\n\n    this.initialBufs.length = this.initialBufsLen = 0\n    return resStr\n  }\n\n  return this.decoder.write(buf)\n}\n\nUtf16Decoder.prototype.end = function () {\n  if (!this.decoder) {\n    var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding)\n    this.decoder = this.iconv.getDecoder(encoding, this.options)\n\n    var resStr = \"\"\n    for (var i = 0; i < this.initialBufs.length; i++) { resStr += this.decoder.write(this.initialBufs[i]) }\n\n    var trail = this.decoder.end()\n    if (trail) { resStr += trail }\n\n    this.initialBufs.length = this.initialBufsLen = 0\n    return resStr\n  }\n  return this.decoder.end()\n}\n\nfunction detectEncoding (bufs, defaultEncoding) {\n  var b = []\n  var charsProcessed = 0\n  // Number of ASCII chars when decoded as LE or BE.\n  var asciiCharsLE = 0\n  var asciiCharsBE = 0\n\n  outerLoop:\n  for (var i = 0; i < bufs.length; i++) {\n    var buf = bufs[i]\n    for (var j = 0; j < buf.length; j++) {\n      b.push(buf[j])\n      if (b.length === 2) {\n        if (charsProcessed === 0) {\n          // Check BOM first.\n          if (b[0] === 0xFF && b[1] === 0xFE) return \"utf-16le\"\n          if (b[0] === 0xFE && b[1] === 0xFF) return \"utf-16be\"\n        }\n\n        if (b[0] === 0 && b[1] !== 0) asciiCharsBE++\n        if (b[0] !== 0 && b[1] === 0) asciiCharsLE++\n\n        b.length = 0\n        charsProcessed++\n\n        if (charsProcessed >= 100) {\n          break outerLoop\n        }\n      }\n    }\n  }\n\n  // Make decisions.\n  // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n  // So, we count ASCII as if it was LE or BE, and decide from that.\n  if (asciiCharsBE > asciiCharsLE) return \"utf-16be\"\n  if (asciiCharsBE < asciiCharsLE) return \"utf-16le\"\n\n  // Couldn't decide (likely all zeros or not enough data).\n  return defaultEncoding || \"utf-16le\"\n}\n", "\"use strict\"\nvar Buffer = require(\"safer-buffer\").Buffer\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec\nexports.unicode11utf7 = \"utf7\" // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec (codecOptions, iconv) {\n  this.iconv = iconv\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder\nUtf7Codec.prototype.decoder = Utf7Decoder\nUtf7Codec.prototype.bomAware = true\n\n// -- Encoding\n\n// Why scape ()?./?\n// eslint-disable-next-line no-useless-escape\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g\n\nfunction Utf7Encoder (options, codec) {\n  this.iconv = codec.iconv\n}\n\nUtf7Encoder.prototype.write = function (str) {\n  // Naive implementation.\n  // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n  return Buffer.from(str.replace(nonDirectChars, function (chunk) {\n    return \"+\" + (chunk === \"+\"\n      ? \"\"\n      : this.iconv.encode(chunk, \"utf16-be\").toString(\"base64\").replace(/=+$/, \"\")) +\n            \"-\"\n  }.bind(this)))\n}\n\nUtf7Encoder.prototype.end = function () {\n}\n\n// -- Decoding\n\nfunction Utf7Decoder (options, codec) {\n  this.iconv = codec.iconv\n  this.inBase64 = false\n  this.base64Accum = \"\"\n}\n\n// Why scape /?\n// eslint-disable-next-line no-useless-escape\nvar base64Regex = /[A-Za-z0-9\\/+]/\nvar base64Chars = []\nfor (var i = 0; i < 256; i++) { base64Chars[i] = base64Regex.test(String.fromCharCode(i)) }\n\nvar plusChar = \"+\".charCodeAt(0)\nvar minusChar = \"-\".charCodeAt(0)\nvar andChar = \"&\".charCodeAt(0)\n\nUtf7Decoder.prototype.write = function (buf) {\n  var res = \"\"; var lastI = 0\n  var inBase64 = this.inBase64\n  var base64Accum = this.base64Accum\n\n  // The decoder is more involved as we must handle chunks in stream.\n\n  for (var i = 0; i < buf.length; i++) {\n    if (!inBase64) { // We're in direct mode.\n      // Write direct chars until '+'\n      if (buf[i] == plusChar) {\n        res += this.iconv.decode(buf.slice(lastI, i), \"ascii\") // Write direct chars.\n        lastI = i + 1\n        inBase64 = true\n      }\n    } else { // We decode base64.\n      if (!base64Chars[buf[i]]) { // Base64 ended.\n        if (i == lastI && buf[i] == minusChar) { // \"+-\" -> \"+\"\n          res += \"+\"\n        } else {\n          var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\")\n          res += this.iconv.decode(Buffer.from(b64str, \"base64\"), \"utf16-be\")\n        }\n\n        if (buf[i] != minusChar) // Minus is absorbed after base64.\n        { i-- }\n\n        lastI = i + 1\n        inBase64 = false\n        base64Accum = \"\"\n      }\n    }\n  }\n\n  if (!inBase64) {\n    res += this.iconv.decode(buf.slice(lastI), \"ascii\") // Write direct chars.\n  } else {\n    var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\")\n\n    var canBeDecoded = b64str.length - (b64str.length % 8) // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n    base64Accum = b64str.slice(canBeDecoded) // The rest will be decoded in future.\n    b64str = b64str.slice(0, canBeDecoded)\n\n    res += this.iconv.decode(Buffer.from(b64str, \"base64\"), \"utf16-be\")\n  }\n\n  this.inBase64 = inBase64\n  this.base64Accum = base64Accum\n\n  return res\n}\n\nUtf7Decoder.prototype.end = function () {\n  var res = \"\"\n  if (this.inBase64 && this.base64Accum.length > 0) { res = this.iconv.decode(Buffer.from(this.base64Accum, \"base64\"), \"utf16-be\") }\n\n  this.inBase64 = false\n  this.base64Accum = \"\"\n  return res\n}\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n//  * Base64 part is started by \"&\" instead of \"+\"\n//  * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n//  * In Base64, \",\" is used instead of \"/\"\n//  * Base64 must not be used to represent direct characters.\n//  * No implicit shift back from Base64 (should always end with '-')\n//  * String must end in non-shifted position.\n//  * \"-&\" while in base64 is not allowed.\n\nexports.utf7imap = Utf7IMAPCodec\nfunction Utf7IMAPCodec (codecOptions, iconv) {\n  this.iconv = iconv\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder\nUtf7IMAPCodec.prototype.bomAware = true\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder (options, codec) {\n  this.iconv = codec.iconv\n  this.inBase64 = false\n  this.base64Accum = Buffer.alloc(6)\n  this.base64AccumIdx = 0\n}\n\nUtf7IMAPEncoder.prototype.write = function (str) {\n  var inBase64 = this.inBase64\n  var base64Accum = this.base64Accum\n  var base64AccumIdx = this.base64AccumIdx\n  var buf = Buffer.alloc(str.length * 5 + 10); var bufIdx = 0\n\n  for (var i = 0; i < str.length; i++) {\n    var uChar = str.charCodeAt(i)\n    if (uChar >= 0x20 && uChar <= 0x7E) { // Direct character or '&'.\n      if (inBase64) {\n        if (base64AccumIdx > 0) {\n          bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString(\"base64\").replace(/\\//g, \",\").replace(/=+$/, \"\"), bufIdx)\n          base64AccumIdx = 0\n        }\n\n        buf[bufIdx++] = minusChar // Write '-', then go to direct mode.\n        inBase64 = false\n      }\n\n      if (!inBase64) {\n        buf[bufIdx++] = uChar // Write direct character\n\n        if (uChar === andChar)  // Ampersand -> '&-'\n        { buf[bufIdx++] = minusChar }\n      }\n    } else { // Non-direct character\n      if (!inBase64) {\n        buf[bufIdx++] = andChar // Write '&', then go to base64 mode.\n        inBase64 = true\n      }\n      if (inBase64) {\n        base64Accum[base64AccumIdx++] = uChar >> 8\n        base64Accum[base64AccumIdx++] = uChar & 0xFF\n\n        if (base64AccumIdx == base64Accum.length) {\n          bufIdx += buf.write(base64Accum.toString(\"base64\").replace(/\\//g, \",\"), bufIdx)\n          base64AccumIdx = 0\n        }\n      }\n    }\n  }\n\n  this.inBase64 = inBase64\n  this.base64AccumIdx = base64AccumIdx\n\n  return buf.slice(0, bufIdx)\n}\n\nUtf7IMAPEncoder.prototype.end = function () {\n  var buf = Buffer.alloc(10); var bufIdx = 0\n  if (this.inBase64) {\n    if (this.base64AccumIdx > 0) {\n      bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString(\"base64\").replace(/\\//g, \",\").replace(/=+$/, \"\"), bufIdx)\n      this.base64AccumIdx = 0\n    }\n\n    buf[bufIdx++] = minusChar // Write '-', then go to direct mode.\n    this.inBase64 = false\n  }\n\n  return buf.slice(0, bufIdx)\n}\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder (options, codec) {\n  this.iconv = codec.iconv\n  this.inBase64 = false\n  this.base64Accum = \"\"\n}\n\nvar base64IMAPChars = base64Chars.slice()\nbase64IMAPChars[\",\".charCodeAt(0)] = true\n\nUtf7IMAPDecoder.prototype.write = function (buf) {\n  var res = \"\"; var lastI = 0\n  var inBase64 = this.inBase64\n  var base64Accum = this.base64Accum\n\n  // The decoder is more involved as we must handle chunks in stream.\n  // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n  for (var i = 0; i < buf.length; i++) {\n    if (!inBase64) { // We're in direct mode.\n      // Write direct chars until '&'\n      if (buf[i] == andChar) {\n        res += this.iconv.decode(buf.slice(lastI, i), \"ascii\") // Write direct chars.\n        lastI = i + 1\n        inBase64 = true\n      }\n    } else { // We decode base64.\n      if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n        if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n          res += \"&\"\n        } else {\n          var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\").replace(/,/g, \"/\")\n          res += this.iconv.decode(Buffer.from(b64str, \"base64\"), \"utf16-be\")\n        }\n\n        if (buf[i] != minusChar) // Minus may be absorbed after base64.\n        { i-- }\n\n        lastI = i + 1\n        inBase64 = false\n        base64Accum = \"\"\n      }\n    }\n  }\n\n  if (!inBase64) {\n    res += this.iconv.decode(buf.slice(lastI), \"ascii\") // Write direct chars.\n  } else {\n    var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\").replace(/,/g, \"/\")\n\n    var canBeDecoded = b64str.length - (b64str.length % 8) // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n    base64Accum = b64str.slice(canBeDecoded) // The rest will be decoded in future.\n    b64str = b64str.slice(0, canBeDecoded)\n\n    res += this.iconv.decode(Buffer.from(b64str, \"base64\"), \"utf16-be\")\n  }\n\n  this.inBase64 = inBase64\n  this.base64Accum = base64Accum\n\n  return res\n}\n\nUtf7IMAPDecoder.prototype.end = function () {\n  var res = \"\"\n  if (this.inBase64 && this.base64Accum.length > 0) { res = this.iconv.decode(Buffer.from(this.base64Accum, \"base64\"), \"utf16-be\") }\n\n  this.inBase64 = false\n  this.base64Accum = \"\"\n  return res\n}\n", "\"use strict\"\nvar Buffer = require(\"safer-buffer\").Buffer\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII).\n\nexports._sbcs = SBCSCodec\nfunction SBCSCodec (codecOptions, iconv) {\n  if (!codecOptions) {\n    throw new Error(\"SBCS codec is called without the data.\")\n  }\n\n  // Prepare char buffer for decoding.\n  if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256)) {\n    throw new Error(\"Encoding '\" + codecOptions.type + \"' has incorrect 'chars' (must be of len 128 or 256)\")\n  }\n\n  if (codecOptions.chars.length === 128) {\n    var asciiString = \"\"\n    for (var i = 0; i < 128; i++) {\n      asciiString += String.fromCharCode(i)\n    }\n    codecOptions.chars = asciiString + codecOptions.chars\n  }\n\n  this.decodeBuf = Buffer.from(codecOptions.chars, \"ucs2\")\n\n  // Encoding buffer.\n  var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0))\n\n  for (var i = 0; i < codecOptions.chars.length; i++) {\n    encodeBuf[codecOptions.chars.charCodeAt(i)] = i\n  }\n\n  this.encodeBuf = encodeBuf\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder\nSBCSCodec.prototype.decoder = SBCSDecoder\n\nfunction SBCSEncoder (options, codec) {\n  this.encodeBuf = codec.encodeBuf\n}\n\nSBCSEncoder.prototype.write = function (str) {\n  var buf = Buffer.alloc(str.length)\n  for (var i = 0; i < str.length; i++) {\n    buf[i] = this.encodeBuf[str.charCodeAt(i)]\n  }\n\n  return buf\n}\n\nSBCSEncoder.prototype.end = function () {\n}\n\nfunction SBCSDecoder (options, codec) {\n  this.decodeBuf = codec.decodeBuf\n}\n\nSBCSDecoder.prototype.write = function (buf) {\n  // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n  var decodeBuf = this.decodeBuf\n  var newBuf = Buffer.alloc(buf.length * 2)\n  var idx1 = 0; var idx2 = 0\n  for (var i = 0; i < buf.length; i++) {\n    idx1 = buf[i] * 2; idx2 = i * 2\n    newBuf[idx2] = decodeBuf[idx1]\n    newBuf[idx2 + 1] = decodeBuf[idx1 + 1]\n  }\n  return newBuf.toString(\"ucs2\")\n}\n\nSBCSDecoder.prototype.end = function () {\n}\n", "\"use strict\"\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n  // Not supported by iconv, not sure why.\n  10029: \"maccenteuro\",\n  maccenteuro: {\n    type: \"_sbcs\",\n    chars: \"\u00C4\u0100\u0101\u00C9\u0104\u00D6\u00DC\u00E1\u0105\u010C\u00E4\u010D\u0106\u0107\u00E9\u0179\u017A\u010E\u00ED\u010F\u0112\u0113\u0116\u00F3\u0117\u00F4\u00F6\u00F5\u00FA\u011A\u011B\u00FC\u2020\u00B0\u0118\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u0119\u00A8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\u00AC\u221A\u0144\u0147\u2206\u00AB\u00BB\u2026\u00A0\u0148\u0150\u00D5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\u00C1\u0164\u0165\u00CD\u017D\u017E\u016A\u00D3\u00D4\u016B\u016E\u00DA\u016F\u0170\u0171\u0172\u0173\u00DD\u00FD\u0137\u017B\u0141\u017C\u0122\u02C7\"\n  },\n\n  808: \"cp808\",\n  ibm808: \"cp808\",\n  cp808: {\n    type: \"_sbcs\",\n    chars: \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u20AC\u25A0\u00A0\"\n  },\n\n  mik: {\n    type: \"_sbcs\",\n    chars: \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2514\u2534\u252C\u251C\u2500\u253C\u2563\u2551\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2510\u2591\u2592\u2593\u2502\u2524\u2116\u00A7\u2557\u255D\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n\n  cp720: {\n    type: \"_sbcs\",\n    chars: \"\\x80\\x81\u00E9\u00E2\\x84\u00E0\\x86\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\\x8d\\x8e\\x8f\\x90\\u0651\\u0652\u00F4\u00A4\u0640\u00FB\u00F9\u0621\u0622\u0623\u0624\u00A3\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0636\u0637\u0638\u0639\u063A\u0641\u00B5\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u2261\\u064b\\u064c\\u064d\\u064e\\u064f\\u0650\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\\u00a0\"\n  },\n\n  // Aliases of generated encodings.\n  ascii8bit: \"ascii\",\n  usascii: \"ascii\",\n  ansix34: \"ascii\",\n  ansix341968: \"ascii\",\n  ansix341986: \"ascii\",\n  csascii: \"ascii\",\n  cp367: \"ascii\",\n  ibm367: \"ascii\",\n  isoir6: \"ascii\",\n  iso646us: \"ascii\",\n  iso646irv: \"ascii\",\n  us: \"ascii\",\n\n  latin1: \"iso88591\",\n  latin2: \"iso88592\",\n  latin3: \"iso88593\",\n  latin4: \"iso88594\",\n  latin5: \"iso88599\",\n  latin6: \"iso885910\",\n  latin7: \"iso885913\",\n  latin8: \"iso885914\",\n  latin9: \"iso885915\",\n  latin10: \"iso885916\",\n\n  csisolatin1: \"iso88591\",\n  csisolatin2: \"iso88592\",\n  csisolatin3: \"iso88593\",\n  csisolatin4: \"iso88594\",\n  csisolatincyrillic: \"iso88595\",\n  csisolatinarabic: \"iso88596\",\n  csisolatingreek: \"iso88597\",\n  csisolatinhebrew: \"iso88598\",\n  csisolatin5: \"iso88599\",\n  csisolatin6: \"iso885910\",\n\n  l1: \"iso88591\",\n  l2: \"iso88592\",\n  l3: \"iso88593\",\n  l4: \"iso88594\",\n  l5: \"iso88599\",\n  l6: \"iso885910\",\n  l7: \"iso885913\",\n  l8: \"iso885914\",\n  l9: \"iso885915\",\n  l10: \"iso885916\",\n\n  isoir14: \"iso646jp\",\n  isoir57: \"iso646cn\",\n  isoir100: \"iso88591\",\n  isoir101: \"iso88592\",\n  isoir109: \"iso88593\",\n  isoir110: \"iso88594\",\n  isoir144: \"iso88595\",\n  isoir127: \"iso88596\",\n  isoir126: \"iso88597\",\n  isoir138: \"iso88598\",\n  isoir148: \"iso88599\",\n  isoir157: \"iso885910\",\n  isoir166: \"tis620\",\n  isoir179: \"iso885913\",\n  isoir199: \"iso885914\",\n  isoir203: \"iso885915\",\n  isoir226: \"iso885916\",\n\n  cp819: \"iso88591\",\n  ibm819: \"iso88591\",\n\n  cyrillic: \"iso88595\",\n\n  arabic: \"iso88596\",\n  arabic8: \"iso88596\",\n  ecma114: \"iso88596\",\n  asmo708: \"iso88596\",\n\n  greek: \"iso88597\",\n  greek8: \"iso88597\",\n  ecma118: \"iso88597\",\n  elot928: \"iso88597\",\n\n  hebrew: \"iso88598\",\n  hebrew8: \"iso88598\",\n\n  turkish: \"iso88599\",\n  turkish8: \"iso88599\",\n\n  thai: \"iso885911\",\n  thai8: \"iso885911\",\n\n  celtic: \"iso885914\",\n  celtic8: \"iso885914\",\n  isoceltic: \"iso885914\",\n\n  tis6200: \"tis620\",\n  tis62025291: \"tis620\",\n  tis62025330: \"tis620\",\n\n  10000: \"macroman\",\n  10006: \"macgreek\",\n  10007: \"maccyrillic\",\n  10079: \"maciceland\",\n  10081: \"macturkish\",\n\n  cspc8codepage437: \"cp437\",\n  cspc775baltic: \"cp775\",\n  cspc850multilingual: \"cp850\",\n  cspcp852: \"cp852\",\n  cspc862latinhebrew: \"cp862\",\n  cpgr: \"cp869\",\n\n  msee: \"cp1250\",\n  mscyrl: \"cp1251\",\n  msansi: \"cp1252\",\n  msgreek: \"cp1253\",\n  msturk: \"cp1254\",\n  mshebr: \"cp1255\",\n  msarab: \"cp1256\",\n  winbaltrim: \"cp1257\",\n\n  cp20866: \"koi8r\",\n  20866: \"koi8r\",\n  ibm878: \"koi8r\",\n  cskoi8r: \"koi8r\",\n\n  cp21866: \"koi8u\",\n  21866: \"koi8u\",\n  ibm1168: \"koi8u\",\n\n  strk10482002: \"rk1048\",\n\n  tcvn5712: \"tcvn\",\n  tcvn57121: \"tcvn\",\n\n  gb198880: \"iso646cn\",\n  cn: \"iso646cn\",\n\n  csiso14jisc6220ro: \"iso646jp\",\n  jisc62201969ro: \"iso646jp\",\n  jp: \"iso646jp\",\n\n  cshproman8: \"hproman8\",\n  r8: \"hproman8\",\n  roman8: \"hproman8\",\n  xroman8: \"hproman8\",\n  ibm1051: \"hproman8\",\n\n  mac: \"macintosh\",\n  csmacintosh: \"macintosh\"\n}\n", "\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n  \"437\": \"cp437\",\n  \"737\": \"cp737\",\n  \"775\": \"cp775\",\n  \"850\": \"cp850\",\n  \"852\": \"cp852\",\n  \"855\": \"cp855\",\n  \"856\": \"cp856\",\n  \"857\": \"cp857\",\n  \"858\": \"cp858\",\n  \"860\": \"cp860\",\n  \"861\": \"cp861\",\n  \"862\": \"cp862\",\n  \"863\": \"cp863\",\n  \"864\": \"cp864\",\n  \"865\": \"cp865\",\n  \"866\": \"cp866\",\n  \"869\": \"cp869\",\n  \"874\": \"windows874\",\n  \"922\": \"cp922\",\n  \"1046\": \"cp1046\",\n  \"1124\": \"cp1124\",\n  \"1125\": \"cp1125\",\n  \"1129\": \"cp1129\",\n  \"1133\": \"cp1133\",\n  \"1161\": \"cp1161\",\n  \"1162\": \"cp1162\",\n  \"1163\": \"cp1163\",\n  \"1250\": \"windows1250\",\n  \"1251\": \"windows1251\",\n  \"1252\": \"windows1252\",\n  \"1253\": \"windows1253\",\n  \"1254\": \"windows1254\",\n  \"1255\": \"windows1255\",\n  \"1256\": \"windows1256\",\n  \"1257\": \"windows1257\",\n  \"1258\": \"windows1258\",\n  \"28591\": \"iso88591\",\n  \"28592\": \"iso88592\",\n  \"28593\": \"iso88593\",\n  \"28594\": \"iso88594\",\n  \"28595\": \"iso88595\",\n  \"28596\": \"iso88596\",\n  \"28597\": \"iso88597\",\n  \"28598\": \"iso88598\",\n  \"28599\": \"iso88599\",\n  \"28600\": \"iso885910\",\n  \"28601\": \"iso885911\",\n  \"28603\": \"iso885913\",\n  \"28604\": \"iso885914\",\n  \"28605\": \"iso885915\",\n  \"28606\": \"iso885916\",\n  \"windows874\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"win874\": \"windows874\",\n  \"cp874\": \"windows874\",\n  \"windows1250\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\u00A0\u02C7\u02D8\u0141\u00A4\u0104\u00A6\u00A7\u00A8\u00A9\u015E\u00AB\u00AC\u00AD\u00AE\u017B\u00B0\u00B1\u02DB\u0142\u00B4\u00B5\u00B6\u00B7\u00B8\u0105\u015F\u00BB\u013D\u02DD\u013E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n  },\n  \"win1250\": \"windows1250\",\n  \"cp1250\": \"windows1250\",\n  \"windows1251\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\u00A0\u040E\u045E\u0408\u00A4\u0490\u00A6\u00A7\u0401\u00A9\u0404\u00AB\u00AC\u00AD\u00AE\u0407\u00B0\u00B1\u0406\u0456\u0491\u00B5\u00B6\u00B7\u0451\u2116\u0454\u00BB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n  },\n  \"win1251\": \"windows1251\",\n  \"cp1251\": \"windows1251\",\n  \"windows1252\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"win1252\": \"windows1252\",\n  \"cp1252\": \"windows1252\",\n  \"windows1253\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0385\u0386\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\uFFFD\u00AB\u00AC\u00AD\u00AE\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u00B5\u00B6\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n  },\n  \"win1253\": \"windows1253\",\n  \"cp1253\": \"windows1253\",\n  \"windows1254\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n  },\n  \"win1254\": \"windows1254\",\n  \"cp1254\": \"windows1254\",\n  \"windows1255\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u00A1\u00A2\u00A3\u20AA\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\u00BF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n  },\n  \"win1255\": \"windows1255\",\n  \"cp1255\": \"windows1255\",\n  \"windows1256\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\u00A0\u060C\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u06BE\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u061B\u00BB\u00BC\u00BD\u00BE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u00D7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\u00E0\u0644\u00E2\u0645\u0646\u0647\u0648\u00E7\u00E8\u00E9\u00EA\u00EB\u0649\u064A\u00EE\u00EF\u064B\u064C\u064D\u064E\u00F4\u064F\u0650\u00F7\u0651\u00F9\u0652\u00FB\u00FC\u200E\u200F\u06D2\"\n  },\n  \"win1256\": \"windows1256\",\n  \"cp1256\": \"windows1256\",\n  \"windows1257\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\u00A8\u02C7\u00B8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\u00AF\u02DB\uFFFD\u00A0\uFFFD\u00A2\u00A3\u00A4\uFFFD\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u02D9\"\n  },\n  \"win1257\": \"windows1257\",\n  \"cp1257\": \"windows1257\",\n  \"windows1258\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n  },\n  \"win1258\": \"windows1258\",\n  \"cp1258\": \"windows1258\",\n  \"iso88591\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"cp28591\": \"iso88591\",\n  \"iso88592\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u02D8\u0141\u00A4\u013D\u015A\u00A7\u00A8\u0160\u015E\u0164\u0179\u00AD\u017D\u017B\u00B0\u0105\u02DB\u0142\u00B4\u013E\u015B\u02C7\u00B8\u0161\u015F\u0165\u017A\u02DD\u017E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n  },\n  \"cp28592\": \"iso88592\",\n  \"iso88593\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0126\u02D8\u00A3\u00A4\uFFFD\u0124\u00A7\u00A8\u0130\u015E\u011E\u0134\u00AD\uFFFD\u017B\u00B0\u0127\u00B2\u00B3\u00B4\u00B5\u0125\u00B7\u00B8\u0131\u015F\u011F\u0135\u00BD\uFFFD\u017C\u00C0\u00C1\u00C2\uFFFD\u00C4\u010A\u0108\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\uFFFD\u00D1\u00D2\u00D3\u00D4\u0120\u00D6\u00D7\u011C\u00D9\u00DA\u00DB\u00DC\u016C\u015C\u00DF\u00E0\u00E1\u00E2\uFFFD\u00E4\u010B\u0109\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\uFFFD\u00F1\u00F2\u00F3\u00F4\u0121\u00F6\u00F7\u011D\u00F9\u00FA\u00FB\u00FC\u016D\u015D\u02D9\"\n  },\n  \"cp28593\": \"iso88593\",\n  \"iso88594\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0138\u0156\u00A4\u0128\u013B\u00A7\u00A8\u0160\u0112\u0122\u0166\u00AD\u017D\u00AF\u00B0\u0105\u02DB\u0157\u00B4\u0129\u013C\u02C7\u00B8\u0161\u0113\u0123\u0167\u014A\u017E\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u012A\u0110\u0145\u014C\u0136\u00D4\u00D5\u00D6\u00D7\u00D8\u0172\u00DA\u00DB\u00DC\u0168\u016A\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u012B\u0111\u0146\u014D\u0137\u00F4\u00F5\u00F6\u00F7\u00F8\u0173\u00FA\u00FB\u00FC\u0169\u016B\u02D9\"\n  },\n  \"cp28594\": \"iso88594\",\n  \"iso88595\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n  },\n  \"cp28595\": \"iso88595\",\n  \"iso88596\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\uFFFD\uFFFD\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u060C\u00AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u061B\uFFFD\uFFFD\uFFFD\u061F\uFFFD\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"cp28596\": \"iso88596\",\n  \"iso88597\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u2018\u2019\u00A3\u20AC\u20AF\u00A6\u00A7\u00A8\u00A9\u037A\u00AB\u00AC\u00AD\uFFFD\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u0385\u0386\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n  },\n  \"cp28597\": \"iso88597\",\n  \"iso88598\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2017\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n  },\n  \"cp28598\": \"iso88598\",\n  \"iso88599\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n  },\n  \"cp28599\": \"iso88599\",\n  \"iso885910\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0112\u0122\u012A\u0128\u0136\u00A7\u013B\u0110\u0160\u0166\u017D\u00AD\u016A\u014A\u00B0\u0105\u0113\u0123\u012B\u0129\u0137\u00B7\u013C\u0111\u0161\u0167\u017E\u2015\u016B\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u00CF\u00D0\u0145\u014C\u00D3\u00D4\u00D5\u00D6\u0168\u00D8\u0172\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u00EF\u00F0\u0146\u014D\u00F3\u00F4\u00F5\u00F6\u0169\u00F8\u0173\u00FA\u00FB\u00FC\u00FD\u00FE\u0138\"\n  },\n  \"cp28600\": \"iso885910\",\n  \"iso885911\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"cp28601\": \"iso885911\",\n  \"iso885913\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u201D\u00A2\u00A3\u00A4\u201E\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u201C\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u2019\"\n  },\n  \"cp28603\": \"iso885913\",\n  \"iso885914\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u1E02\u1E03\u00A3\u010A\u010B\u1E0A\u00A7\u1E80\u00A9\u1E82\u1E0B\u1EF2\u00AD\u00AE\u0178\u1E1E\u1E1F\u0120\u0121\u1E40\u1E41\u00B6\u1E56\u1E81\u1E57\u1E83\u1E60\u1EF3\u1E84\u1E85\u1E61\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0174\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u1E6A\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u0176\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0175\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u1E6B\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u0177\u00FF\"\n  },\n  \"cp28604\": \"iso885914\",\n  \"iso885915\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u0160\u00A7\u0161\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u017D\u00B5\u00B6\u00B7\u017E\u00B9\u00BA\u00BB\u0152\u0153\u0178\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"cp28605\": \"iso885915\",\n  \"iso885916\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0105\u0141\u20AC\u201E\u0160\u00A7\u0161\u00A9\u0218\u00AB\u0179\u00AD\u017A\u017B\u00B0\u00B1\u010C\u0142\u017D\u201D\u00B6\u00B7\u017E\u010D\u0219\u00BB\u0152\u0153\u0178\u017C\u00C0\u00C1\u00C2\u0102\u00C4\u0106\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0110\u0143\u00D2\u00D3\u00D4\u0150\u00D6\u015A\u0170\u00D9\u00DA\u00DB\u00DC\u0118\u021A\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u0107\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0111\u0144\u00F2\u00F3\u00F4\u0151\u00F6\u015B\u0171\u00F9\u00FA\u00FB\u00FC\u0119\u021B\u00FF\"\n  },\n  \"cp28606\": \"iso885916\",\n  \"cp437\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm437\": \"cp437\",\n  \"csibm437\": \"cp437\",\n  \"cp737\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\u00B1\u2265\u2264\u03AA\u03AB\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm737\": \"cp737\",\n  \"csibm737\": \"cp737\",\n  \"cp775\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0106\u00FC\u00E9\u0101\u00E4\u0123\u00E5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\u00C4\u00C5\u00C9\u00E6\u00C6\u014D\u00F6\u0122\u00A2\u015A\u015B\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u00A4\u0100\u012A\u00F3\u017B\u017C\u017A\u201D\u00A6\u00A9\u00AE\u00AC\u00BD\u00BC\u0141\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u00D3\u00DF\u014C\u0143\u00F5\u00D5\u00B5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\u00AD\u00B1\u201C\u00BE\u00B6\u00A7\u00F7\u201E\u00B0\u2219\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm775\": \"cp775\",\n  \"csibm775\": \"cp775\",\n  \"cp850\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u0131\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm850\": \"cp850\",\n  \"csibm850\": \"cp850\",\n  \"cp852\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u016F\u0107\u00E7\u0142\u00EB\u0150\u0151\u00EE\u0179\u00C4\u0106\u00C9\u0139\u013A\u00F4\u00F6\u013D\u013E\u015A\u015B\u00D6\u00DC\u0164\u0165\u0141\u00D7\u010D\u00E1\u00ED\u00F3\u00FA\u0104\u0105\u017D\u017E\u0118\u0119\u00AC\u017A\u010C\u015F\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u0111\u0110\u010E\u00CB\u010F\u0147\u00CD\u00CE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\u00D3\u00DF\u00D4\u0143\u0144\u0148\u0160\u0161\u0154\u00DA\u0155\u0170\u00FD\u00DD\u0163\u00B4\u00AD\u02DD\u02DB\u02C7\u02D8\u00A7\u00F7\u00B8\u00B0\u00A8\u02D9\u0171\u0158\u0159\u25A0\u00A0\"\n  },\n  \"ibm852\": \"cp852\",\n  \"csibm852\": \"cp852\",\n  \"cp855\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\u00AD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\u00A7\u25A0\u00A0\"\n  },\n  \"ibm855\": \"cp855\",\n  \"csibm855\": \"cp855\",\n  \"cp856\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\u00A3\uFFFD\u00D7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AE\u00AC\u00BD\u00BC\uFFFD\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\uFFFD\uFFFD\uFFFD\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\uFFFD\uFFFD\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2518\u250C\u2588\u2584\u00A6\uFFFD\u2580\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00B5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm856\": \"cp856\",\n  \"csibm856\": \"cp856\",\n  \"cp857\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u0131\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u0130\u00D6\u00DC\u00F8\u00A3\u00D8\u015E\u015F\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u011E\u011F\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00BA\u00AA\u00CA\u00CB\u00C8\uFFFD\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\uFFFD\u00D7\u00DA\u00DB\u00D9\u00EC\u00FF\u00AF\u00B4\u00AD\u00B1\uFFFD\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm857\": \"cp857\",\n  \"csibm857\": \"cp857\",\n  \"cp858\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u20AC\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm858\": \"cp858\",\n  \"csibm858\": \"cp858\",\n  \"cp860\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E3\u00E0\u00C1\u00E7\u00EA\u00CA\u00E8\u00CD\u00D4\u00EC\u00C3\u00C2\u00C9\u00C0\u00C8\u00F4\u00F5\u00F2\u00DA\u00F9\u00CC\u00D5\u00DC\u00A2\u00A3\u00D9\u20A7\u00D3\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00D2\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm860\": \"cp860\",\n  \"csibm860\": \"cp860\",\n  \"cp861\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00D0\u00F0\u00DE\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00FE\u00FB\u00DD\u00FD\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00C1\u00CD\u00D3\u00DA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm861\": \"cp861\",\n  \"csibm861\": \"cp861\",\n  \"cp862\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm862\": \"cp862\",\n  \"csibm862\": \"cp862\",\n  \"cp863\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00C2\u00E0\u00B6\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u2017\u00C0\u00A7\u00C9\u00C8\u00CA\u00F4\u00CB\u00CF\u00FB\u00F9\u00A4\u00D4\u00DC\u00A2\u00A3\u00D9\u00DB\u0192\u00A6\u00B4\u00F3\u00FA\u00A8\u00B8\u00B3\u00AF\u00CE\u2310\u00AC\u00BD\u00BC\u00BE\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm863\": \"cp863\",\n  \"csibm863\": \"cp863\",\n  \"cp864\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$\u066A&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00B0\u00B7\u2219\u221A\u2592\u2500\u2502\u253C\u2524\u252C\u251C\u2534\u2510\u250C\u2514\u2518\u03B2\u221E\u03C6\u00B1\u00BD\u00BC\u2248\u00AB\u00BB\uFEF7\uFEF8\uFFFD\uFFFD\uFEFB\uFEFC\uFFFD\u00A0\u00AD\uFE82\u00A3\u00A4\uFE84\uFFFD\uFFFD\uFE8E\uFE8F\uFE95\uFE99\u060C\uFE9D\uFEA1\uFEA5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFED1\u061B\uFEB1\uFEB5\uFEB9\u061F\u00A2\uFE80\uFE81\uFE83\uFE85\uFECA\uFE8B\uFE8D\uFE91\uFE93\uFE97\uFE9B\uFE9F\uFEA3\uFEA7\uFEA9\uFEAB\uFEAD\uFEAF\uFEB3\uFEB7\uFEBB\uFEBF\uFEC1\uFEC5\uFECB\uFECF\u00A6\u00AC\u00F7\u00D7\uFEC9\u0640\uFED3\uFED7\uFEDB\uFEDF\uFEE3\uFEE7\uFEEB\uFEED\uFEEF\uFEF3\uFEBD\uFECC\uFECE\uFECD\uFEE1\uFE7D\u0651\uFEE5\uFEE9\uFEEC\uFEF0\uFEF2\uFED0\uFED5\uFEF5\uFEF6\uFEDD\uFED9\uFEF1\u25A0\uFFFD\"\n  },\n  \"ibm864\": \"cp864\",\n  \"csibm864\": \"cp864\",\n  \"cp865\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00A4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm865\": \"cp865\",\n  \"csibm865\": \"cp865\",\n  \"cp866\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n  },\n  \"ibm866\": \"cp866\",\n  \"csibm866\": \"cp866\",\n  \"cp869\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0386\uFFFD\u00B7\u00AC\u00A6\u2018\u2019\u0388\u2015\u0389\u038A\u03AA\u038C\uFFFD\uFFFD\u038E\u03AB\u00A9\u038F\u00B2\u00B3\u03AC\u00A3\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03CD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u00BD\u0398\u0399\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u039A\u039B\u039C\u039D\u2563\u2551\u2557\u255D\u039E\u039F\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u03A0\u03A1\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u2518\u250C\u2588\u2584\u03B4\u03B5\u2580\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u0384\u00AD\u00B1\u03C5\u03C6\u03C7\u00A7\u03C8\u0385\u00B0\u00A8\u03C9\u03CB\u03B0\u03CE\u25A0\u00A0\"\n  },\n  \"ibm869\": \"cp869\",\n  \"csibm869\": \"cp869\",\n  \"cp922\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u203E\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0160\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u017D\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0161\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u017E\u00FF\"\n  },\n  \"ibm922\": \"cp922\",\n  \"csibm922\": \"cp922\",\n  \"cp1046\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFE88\u00D7\u00F7\uF8F6\uF8F5\uF8F4\uF8F7\uFE71\u0088\u25A0\u2502\u2500\u2510\u250C\u2514\u2518\uFE79\uFE7B\uFE7D\uFE7F\uFE77\uFE8A\uFEF0\uFEF3\uFEF2\uFECE\uFECF\uFED0\uFEF6\uFEF8\uFEFA\uFEFC\u00A0\uF8FA\uF8F9\uF8F8\u00A4\uF8FB\uFE8B\uFE91\uFE97\uFE9B\uFE9F\uFEA3\u060C\u00AD\uFEA7\uFEB3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFEB7\u061B\uFEBB\uFEBF\uFECA\u061F\uFECB\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\uFEC7\u0639\u063A\uFECC\uFE82\uFE84\uFE8E\uFED3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFED7\uFEDB\uFEDF\uF8FC\uFEF5\uFEF7\uFEF9\uFEFB\uFEE3\uFEE7\uFEEC\uFEE9\uFFFD\"\n  },\n  \"ibm1046\": \"cp1046\",\n  \"csibm1046\": \"cp1046\",\n  \"cp1124\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n  },\n  \"ibm1124\": \"cp1124\",\n  \"csibm1124\": \"cp1124\",\n  \"cp1125\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n  },\n  \"ibm1125\": \"cp1125\",\n  \"csibm1125\": \"cp1125\",\n  \"cp1129\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n  },\n  \"ibm1129\": \"cp1129\",\n  \"csibm1129\": \"cp1129\",\n  \"cp1133\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E81\u0E82\u0E84\u0E87\u0E88\u0EAA\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAB\u0EAD\u0EAE\uFFFD\uFFFD\uFFFD\u0EAF\u0EB0\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBC\u0EB1\u0EBB\u0EBD\uFFFD\uFFFD\uFFFD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0EC6\uFFFD\u0EDC\u0EDD\u20AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\uFFFD\uFFFD\u00A2\u00AC\u00A6\uFFFD\"\n  },\n  \"ibm1133\": \"cp1133\",\n  \"csibm1133\": \"cp1133\",\n  \"cp1161\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E48\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E49\u0E4A\u0E4B\u20AC\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\u00A2\u00AC\u00A6\u00A0\"\n  },\n  \"ibm1161\": \"cp1161\",\n  \"csibm1161\": \"cp1161\",\n  \"cp1162\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\u0081\u0082\u0083\u0084\u2026\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"ibm1162\": \"cp1162\",\n  \"csibm1162\": \"cp1162\",\n  \"cp1163\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n  },\n  \"ibm1163\": \"cp1163\",\n  \"csibm1163\": \"cp1163\",\n  \"maccroatian\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u0160\u2122\u00B4\u00A8\u2260\u017D\u00D8\u221E\u00B1\u2264\u2265\u2206\u00B5\u2202\u2211\u220F\u0161\u222B\u00AA\u00BA\u2126\u017E\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u0106\u00AB\u010C\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\uFFFD\u00A9\u2044\u00A4\u2039\u203A\u00C6\u00BB\u2013\u00B7\u201A\u201E\u2030\u00C2\u0107\u00C1\u010D\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\u0111\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u03C0\u00CB\u02DA\u00B8\u00CA\u00E6\u02C7\"\n  },\n  \"maccyrillic\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n  },\n  \"macgreek\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00B9\u00B2\u00C9\u00B3\u00D6\u00DC\u0385\u00E0\u00E2\u00E4\u0384\u00A8\u00E7\u00E9\u00E8\u00EA\u00EB\u00A3\u2122\u00EE\u00EF\u2022\u00BD\u2030\u00F4\u00F6\u00A6\u00AD\u00F9\u00FB\u00FC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\u00DF\u00AE\u00A9\u03A3\u03AA\u00A7\u2260\u00B0\u0387\u0391\u00B1\u2264\u2265\u00A5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\u00AC\u039F\u03A1\u2248\u03A4\u00AB\u00BB\u2026\u00A0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\u00F7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD\"\n  },\n  \"maciceland\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u00DD\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u00D0\u00F0\u00DE\u00FE\u00FD\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macroman\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macromania\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u0102\u015E\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u0103\u015F\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\u0162\u0163\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macthai\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00AB\u00BB\u2026\uF88C\uF88F\uF892\uF895\uF898\uF88B\uF88E\uF891\uF894\uF897\u201C\u201D\uF899\uFFFD\u2022\uF884\uF889\uF885\uF886\uF887\uF888\uF88A\uF88D\uF890\uF893\uF896\u2018\u2019\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFEFF\u200B\u2013\u2014\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u2122\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u00AE\u00A9\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"macturkish\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\uFFFD\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macukraine\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u0490\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n  },\n  \"koi8r\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"koi8u\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u255D\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"koi8ru\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u045E\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u040E\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"koi8t\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u049B\u0493\u201A\u0492\u201E\u2026\u2020\u2021\uFFFD\u2030\u04B3\u2039\u04B2\u04B7\u04B6\uFFFD\u049A\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04EF\u04EE\u0451\u00A4\u04E3\u00A6\u00A7\uFFFD\uFFFD\uFFFD\u00AB\u00AC\u00AD\u00AE\uFFFD\u00B0\u00B1\u00B2\u0401\uFFFD\u04E2\u00B6\u00B7\uFFFD\u2116\uFFFD\u00BB\uFFFD\uFFFD\uFFFD\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"armscii8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u0587\u0589)(\u00BB\u00AB\u2014.\u055D,-\u058A\u2026\u055C\u055B\u055E\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053A\u056A\u053B\u056B\u053C\u056C\u053D\u056D\u053E\u056E\u053F\u056F\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054A\u057A\u054B\u057B\u054C\u057C\u054D\u057D\u054E\u057E\u054F\u057F\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055A\uFFFD\"\n  },\n  \"rk1048\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u049A\u04BA\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u049B\u04BB\u045F\u00A0\u04B0\u04B1\u04D8\u00A4\u04E8\u00A6\u00A7\u0401\u00A9\u0492\u00AB\u00AC\u00AD\u00AE\u04AE\u00B0\u00B1\u0406\u0456\u04E9\u00B5\u00B6\u00B7\u0451\u2116\u0493\u00BB\u04D9\u04A2\u04A3\u04AF\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n  },\n  \"tcvn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\u00DA\u1EE4\\u0003\u1EEA\u1EEC\u1EEE\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\u1EE8\u1EF0\u1EF2\u1EF6\u1EF8\u00DD\u1EF4\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00C0\u1EA2\u00C3\u00C1\u1EA0\u1EB6\u1EAC\u00C8\u1EBA\u1EBC\u00C9\u1EB8\u1EC6\u00CC\u1EC8\u0128\u00CD\u1ECA\u00D2\u1ECE\u00D5\u00D3\u1ECC\u1ED8\u1EDC\u1EDE\u1EE0\u1EDA\u1EE2\u00D9\u1EE6\u0168\u00A0\u0102\u00C2\u00CA\u00D4\u01A0\u01AF\u0110\u0103\u00E2\u00EA\u00F4\u01A1\u01B0\u0111\u1EB0\u0300\u0309\u0303\u0301\u0323\u00E0\u1EA3\u00E3\u00E1\u1EA1\u1EB2\u1EB1\u1EB3\u1EB5\u1EAF\u1EB4\u1EAE\u1EA6\u1EA8\u1EAA\u1EA4\u1EC0\u1EB7\u1EA7\u1EA9\u1EAB\u1EA5\u1EAD\u00E8\u1EC2\u1EBB\u1EBD\u00E9\u1EB9\u1EC1\u1EC3\u1EC5\u1EBF\u1EC7\u00EC\u1EC9\u1EC4\u1EBE\u1ED2\u0129\u00ED\u1ECB\u00F2\u1ED4\u1ECF\u00F5\u00F3\u1ECD\u1ED3\u1ED5\u1ED7\u1ED1\u1ED9\u1EDD\u1EDF\u1EE1\u1EDB\u1EE3\u00F9\u1ED6\u1EE7\u0169\u00FA\u1EE5\u1EEB\u1EED\u1EEF\u1EE9\u1EF1\u1EF3\u1EF7\u1EF9\u00FD\u1EF5\u1ED0\"\n  },\n  \"georgianacademy\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"georgianps\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10F1\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10F2\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10F3\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10F4\u10EF\u10F0\u10F5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"pt154\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0496\u0492\u04EE\u0493\u201E\u2026\u04B6\u04AE\u04B2\u04AF\u04A0\u04E2\u04A2\u049A\u04BA\u04B8\u0497\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u04B3\u04B7\u04A1\u04E3\u04A3\u049B\u04BB\u04B9\u00A0\u040E\u045E\u0408\u04E8\u0498\u04B0\u00A7\u0401\u00A9\u04D8\u00AB\u00AC\u04EF\u00AE\u049C\u00B0\u04B1\u0406\u0456\u0499\u04E9\u00B6\u00B7\u0451\u2116\u04D9\u00BB\u0458\u04AA\u04AB\u049D\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n  },\n  \"viscii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\u1EB2\\u0003\\u0004\u1EB4\u1EAA\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\u1EF6\\u0015\\u0016\\u0017\\u0018\u1EF8\\u001a\\u001b\\u001c\\u001d\u1EF4\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\u00D5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\u00C0\u00C1\u00C2\u00C3\u1EA2\u0102\u1EB3\u1EB5\u00C8\u00C9\u00CA\u1EBA\u00CC\u00CD\u0128\u1EF3\u0110\u1EE9\u00D2\u00D3\u00D4\u1EA1\u1EF7\u1EEB\u1EED\u00D9\u00DA\u1EF9\u1EF5\u00DD\u1EE1\u01B0\u00E0\u00E1\u00E2\u00E3\u1EA3\u0103\u1EEF\u1EAB\u00E8\u00E9\u00EA\u1EBB\u00EC\u00ED\u0129\u1EC9\u0111\u1EF1\u00F2\u00F3\u00F4\u00F5\u1ECF\u1ECD\u1EE5\u00F9\u00FA\u0169\u1EE7\u00FD\u1EE3\u1EEE\"\n  },\n  \"iso646cn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#\u00A5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"iso646jp\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\u00A5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"hproman8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00C0\u00C2\u00C8\u00CA\u00CB\u00CE\u00CF\u00B4\u02CB\u02C6\u00A8\u02DC\u00D9\u00DB\u20A4\u00AF\u00DD\u00FD\u00B0\u00C7\u00E7\u00D1\u00F1\u00A1\u00BF\u00A4\u00A3\u00A5\u00A7\u0192\u00A2\u00E2\u00EA\u00F4\u00FB\u00E1\u00E9\u00F3\u00FA\u00E0\u00E8\u00F2\u00F9\u00E4\u00EB\u00F6\u00FC\u00C5\u00EE\u00D8\u00C6\u00E5\u00ED\u00F8\u00E6\u00C4\u00EC\u00D6\u00DC\u00C9\u00EF\u00DF\u00D4\u00C1\u00C3\u00E3\u00D0\u00F0\u00CD\u00CC\u00D3\u00D2\u00D5\u00F5\u0160\u0161\u00DA\u0178\u00FF\u00DE\u00FE\u00B7\u00B5\u00B6\u00BE\u2014\u00BC\u00BD\u00AA\u00BA\u00AB\u25A0\u00BB\u00B1\uFFFD\"\n  },\n  \"macintosh\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"ascii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"tis620\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  }\n}", "\"use strict\"\nvar Buffer = require(\"safer-buffer\").Buffer\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec\n\nvar UNASSIGNED = -1\nvar GB18030_CODE = -2\nvar SEQ_START = -10\nvar NODE_START = -1000\nvar UNASSIGNED_NODE = new Array(0x100)\nvar DEF_CHAR = -1\n\nfor (var i = 0; i < 0x100; i++) { UNASSIGNED_NODE[i] = UNASSIGNED }\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec (codecOptions, iconv) {\n  this.encodingName = codecOptions.encodingName\n  if (!codecOptions) { throw new Error(\"DBCS codec is called without the data.\") }\n  if (!codecOptions.table) { throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\") }\n\n  // Load tables.\n  var mappingTable = codecOptions.table()\n\n  // Decode tables: MBCS -> Unicode.\n\n  // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n  // Trie root is decodeTables[0].\n  // Values: >=  0 -> unicode character code. can be > 0xFFFF\n  //         == UNASSIGNED -> unknown/unassigned sequence.\n  //         == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n  //         <= NODE_START -> index of the next node in our trie to process next byte.\n  //         <= SEQ_START  -> index of the start of a character code sequence, in decodeTableSeq.\n  this.decodeTables = []\n  this.decodeTables[0] = UNASSIGNED_NODE.slice(0) // Create root node.\n\n  // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here.\n  this.decodeTableSeq = []\n\n  // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n  for (var i = 0; i < mappingTable.length; i++) { this._addDecodeChunk(mappingTable[i]) }\n\n  // Load & create GB18030 tables when needed.\n  if (typeof codecOptions.gb18030 === \"function\") {\n    this.gb18030 = codecOptions.gb18030() // Load GB18030 ranges.\n\n    // Add GB18030 common decode nodes.\n    var commonThirdByteNodeIdx = this.decodeTables.length\n    this.decodeTables.push(UNASSIGNED_NODE.slice(0))\n\n    var commonFourthByteNodeIdx = this.decodeTables.length\n    this.decodeTables.push(UNASSIGNED_NODE.slice(0))\n\n    // Fill out the tree\n    var firstByteNode = this.decodeTables[0]\n    for (var i = 0x81; i <= 0xFE; i++) {\n      var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i]]\n      for (var j = 0x30; j <= 0x39; j++) {\n        if (secondByteNode[j] === UNASSIGNED) {\n          secondByteNode[j] = NODE_START - commonThirdByteNodeIdx\n        } else if (secondByteNode[j] > NODE_START) {\n          throw new Error(\"gb18030 decode tables conflict at byte 2\")\n        }\n\n        var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]]\n        for (var k = 0x81; k <= 0xFE; k++) {\n          if (thirdByteNode[k] === UNASSIGNED) {\n            thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx\n          } else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) {\n            continue\n          } else if (thirdByteNode[k] > NODE_START) {\n            throw new Error(\"gb18030 decode tables conflict at byte 3\")\n          }\n\n          var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]]\n          for (var l = 0x30; l <= 0x39; l++) {\n            if (fourthByteNode[l] === UNASSIGNED) { fourthByteNode[l] = GB18030_CODE }\n          }\n        }\n      }\n    }\n  }\n\n  this.defaultCharUnicode = iconv.defaultCharUnicode\n\n  // Encode tables: Unicode -> DBCS.\n\n  // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n  // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n  // Values: >=  0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n  //         == UNASSIGNED -> no conversion found. Output a default char.\n  //         <= SEQ_START  -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n  this.encodeTable = []\n\n  // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n  // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n  // means end of sequence (needed when one sequence is a strict subsequence of another).\n  // Objects are kept separately from encodeTable to increase performance.\n  this.encodeTableSeq = []\n\n  // Some chars can be decoded, but need not be encoded.\n  var skipEncodeChars = {}\n  if (codecOptions.encodeSkipVals) {\n    for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n      var val = codecOptions.encodeSkipVals[i]\n      if (typeof val === \"number\") { skipEncodeChars[val] = true } else {\n        for (var j = val.from; j <= val.to; j++) { skipEncodeChars[j] = true }\n      }\n    }\n  }\n\n  // Use decode trie to recursively fill out encode tables.\n  this._fillEncodeTable(0, 0, skipEncodeChars)\n\n  // Add more encoding pairs when needed.\n  if (codecOptions.encodeAdd) {\n    for (var uChar in codecOptions.encodeAdd) {\n      if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar)) { this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]) }\n    }\n  }\n\n  this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)]\n  if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0][\"?\"]\n  if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0)\n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder\nDBCSCodec.prototype.decoder = DBCSDecoder\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function (addr) {\n  var bytes = []\n  for (; addr > 0; addr >>>= 8) { bytes.push(addr & 0xFF) }\n  if (bytes.length == 0) { bytes.push(0) }\n\n  var node = this.decodeTables[0]\n  for (var i = bytes.length - 1; i > 0; i--) { // Traverse nodes deeper into the trie.\n    var val = node[bytes[i]]\n\n    if (val == UNASSIGNED) { // Create new node.\n      node[bytes[i]] = NODE_START - this.decodeTables.length\n      this.decodeTables.push(node = UNASSIGNED_NODE.slice(0))\n    } else if (val <= NODE_START) { // Existing node.\n      node = this.decodeTables[NODE_START - val]\n    } else { throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16)) }\n  }\n  return node\n}\n\nDBCSCodec.prototype._addDecodeChunk = function (chunk) {\n  // First element of chunk is the hex mbcs code where we start.\n  var curAddr = parseInt(chunk[0], 16)\n\n  // Choose the decoding node where we'll write our chars.\n  var writeTable = this._getDecodeTrieNode(curAddr)\n  curAddr = curAddr & 0xFF\n\n  // Write all other elements of the chunk to the table.\n  for (var k = 1; k < chunk.length; k++) {\n    var part = chunk[k]\n    if (typeof part === \"string\") { // String, write as-is.\n      for (var l = 0; l < part.length;) {\n        var code = part.charCodeAt(l++)\n        if (code >= 0xD800 && code < 0xDC00) { // Decode surrogate\n          var codeTrail = part.charCodeAt(l++)\n          if (codeTrail >= 0xDC00 && codeTrail < 0xE000) { writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00) } else { throw new Error(\"Incorrect surrogate pair in \" + this.encodingName + \" at chunk \" + chunk[0]) }\n        } else if (code > 0x0FF0 && code <= 0x0FFF) { // Character sequence (our own encoding used)\n          var len = 0xFFF - code + 2\n          var seq = []\n          for (var m = 0; m < len; m++) { seq.push(part.charCodeAt(l++)) } // Simple variation: don't support surrogates or subsequences in seq.\n\n          writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length\n          this.decodeTableSeq.push(seq)\n        } else { writeTable[curAddr++] = code } // Basic char\n      }\n    } else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n      var charCode = writeTable[curAddr - 1] + 1\n      for (var l = 0; l < part; l++) { writeTable[curAddr++] = charCode++ }\n    } else { throw new Error(\"Incorrect type '\" + typeof part + \"' given in \" + this.encodingName + \" at chunk \" + chunk[0]) }\n  }\n  if (curAddr > 0xFF) { throw new Error(\"Incorrect chunk in \" + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr) }\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function (uCode) {\n  var high = uCode >> 8 // This could be > 0xFF because of astral characters.\n  if (this.encodeTable[high] === undefined) {\n    this.encodeTable[high] = UNASSIGNED_NODE.slice(0)\n  } // Create bucket on demand.\n  return this.encodeTable[high]\n}\n\nDBCSCodec.prototype._setEncodeChar = function (uCode, dbcsCode) {\n  var bucket = this._getEncodeBucket(uCode)\n  var low = uCode & 0xFF\n  if (bucket[low] <= SEQ_START) { this.encodeTableSeq[SEQ_START - bucket[low]][DEF_CHAR] = dbcsCode } // There's already a sequence, set a single-char subsequence of it.\n  else if (bucket[low] == UNASSIGNED) { bucket[low] = dbcsCode }\n}\n\nDBCSCodec.prototype._setEncodeSequence = function (seq, dbcsCode) {\n  // Get the root of character tree according to first character of the sequence.\n  var uCode = seq[0]\n  var bucket = this._getEncodeBucket(uCode)\n  var low = uCode & 0xFF\n\n  var node\n  if (bucket[low] <= SEQ_START) {\n    // There's already a sequence with  - use it.\n    node = this.encodeTableSeq[SEQ_START - bucket[low]]\n  } else {\n    // There was no sequence object - allocate a new one.\n    node = {}\n    if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low] // If a char was set before - make it a single-char subsequence.\n    bucket[low] = SEQ_START - this.encodeTableSeq.length\n    this.encodeTableSeq.push(node)\n  }\n\n  // Traverse the character tree, allocating new nodes as needed.\n  for (var j = 1; j < seq.length - 1; j++) {\n    var oldVal = node[uCode]\n    if (typeof oldVal === \"object\") { node = oldVal } else {\n      node = node[uCode] = {}\n      if (oldVal !== undefined) { node[DEF_CHAR] = oldVal }\n    }\n  }\n\n  // Set the leaf to given dbcsCode.\n  uCode = seq[seq.length - 1]\n  node[uCode] = dbcsCode\n}\n\nDBCSCodec.prototype._fillEncodeTable = function (nodeIdx, prefix, skipEncodeChars) {\n  var node = this.decodeTables[nodeIdx]\n  var hasValues = false\n  var subNodeEmpty = {}\n  for (var i = 0; i < 0x100; i++) {\n    var uCode = node[i]\n    var mbCode = prefix + i\n    if (skipEncodeChars[mbCode]) { continue }\n\n    if (uCode >= 0) {\n      this._setEncodeChar(uCode, mbCode)\n      hasValues = true\n    } else if (uCode <= NODE_START) {\n      var subNodeIdx = NODE_START - uCode\n      if (!subNodeEmpty[subNodeIdx]) {  // Skip empty subtrees (they are too large in gb18030).\n        var newPrefix = (mbCode << 8) >>> 0  // NOTE: '>>> 0' keeps 32-bit num positive.\n        if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars)) { hasValues = true } else { subNodeEmpty[subNodeIdx] = true }\n      }\n    } else if (uCode <= SEQ_START) {\n      this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode)\n      hasValues = true\n    }\n  }\n  return hasValues\n}\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder (options, codec) {\n  // Encoder state\n  this.leadSurrogate = -1\n  this.seqObj = undefined\n\n  // Static data\n  this.encodeTable = codec.encodeTable\n  this.encodeTableSeq = codec.encodeTableSeq\n  this.defaultCharSingleByte = codec.defCharSB\n  this.gb18030 = codec.gb18030\n}\n\nDBCSEncoder.prototype.write = function (str) {\n  var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3))\n  var leadSurrogate = this.leadSurrogate\n  var seqObj = this.seqObj\n  var nextChar = -1\n  var i = 0; var j = 0\n\n  while (true) {\n    // 0. Get next character.\n    if (nextChar === -1) {\n      if (i == str.length) break\n      var uCode = str.charCodeAt(i++)\n    } else {\n      var uCode = nextChar\n      nextChar = -1\n    }\n\n    // 1. Handle surrogates.\n    if (uCode >= 0xD800 && uCode < 0xE000) { // Char is one of surrogates.\n      if (uCode < 0xDC00) { // We've got lead surrogate.\n        if (leadSurrogate === -1) {\n          leadSurrogate = uCode\n          continue\n        } else {\n          leadSurrogate = uCode\n          // Double lead surrogate found.\n          uCode = UNASSIGNED\n        }\n      } else { // We've got trail surrogate.\n        if (leadSurrogate !== -1) {\n          uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00)\n          leadSurrogate = -1\n        } else {\n          // Incomplete surrogate pair - only trail surrogate found.\n          uCode = UNASSIGNED\n        }\n      }\n    } else if (leadSurrogate !== -1) {\n      // Incomplete surrogate pair - only lead surrogate found.\n      nextChar = uCode; uCode = UNASSIGNED // Write an error, then current char.\n      leadSurrogate = -1\n    }\n\n    // 2. Convert uCode character.\n    var dbcsCode = UNASSIGNED\n    if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n      var resCode = seqObj[uCode]\n      if (typeof resCode === \"object\") { // Sequence continues.\n        seqObj = resCode\n        continue\n      } else if (typeof resCode === \"number\") { // Sequence finished. Write it.\n        dbcsCode = resCode\n      } else if (resCode == undefined) { // Current character is not part of the sequence.\n        // Try default character for this sequence\n        resCode = seqObj[DEF_CHAR]\n        if (resCode !== undefined) {\n          dbcsCode = resCode // Found. Write it.\n          nextChar = uCode // Current character will be written too in the next iteration.\n        } else {\n          // TODO: What if we have no default? (resCode == undefined)\n          // Then, we should write first char of the sequence as-is and try the rest recursively.\n          // Didn't do it for now because no encoding has this situation yet.\n          // Currently, just skip the sequence and write current char.\n        }\n      }\n      seqObj = undefined\n    } else if (uCode >= 0) {  // Regular character\n      var subtable = this.encodeTable[uCode >> 8]\n      if (subtable !== undefined) { dbcsCode = subtable[uCode & 0xFF] }\n\n      if (dbcsCode <= SEQ_START) { // Sequence start\n        seqObj = this.encodeTableSeq[SEQ_START - dbcsCode]\n        continue\n      }\n\n      if (dbcsCode == UNASSIGNED && this.gb18030) {\n        // Use GB18030 algorithm to find character(s) to write.\n        var idx = findIdx(this.gb18030.uChars, uCode)\n        if (idx != -1) {\n          var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx])\n          newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600\n          newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260\n          newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10\n          newBuf[j++] = 0x30 + dbcsCode\n          continue\n        }\n      }\n    }\n\n    // 3. Write dbcsCode character.\n    if (dbcsCode === UNASSIGNED) { dbcsCode = this.defaultCharSingleByte }\n\n    if (dbcsCode < 0x100) {\n      newBuf[j++] = dbcsCode\n    } else if (dbcsCode < 0x10000) {\n      newBuf[j++] = dbcsCode >> 8   // high byte\n      newBuf[j++] = dbcsCode & 0xFF // low byte\n    } else if (dbcsCode < 0x1000000) {\n      newBuf[j++] = dbcsCode >> 16\n      newBuf[j++] = (dbcsCode >> 8) & 0xFF\n      newBuf[j++] = dbcsCode & 0xFF\n    } else {\n      newBuf[j++] = dbcsCode >>> 24\n      newBuf[j++] = (dbcsCode >>> 16) & 0xFF\n      newBuf[j++] = (dbcsCode >>> 8) & 0xFF\n      newBuf[j++] = dbcsCode & 0xFF\n    }\n  }\n\n  this.seqObj = seqObj\n  this.leadSurrogate = leadSurrogate\n  return newBuf.slice(0, j)\n}\n\nDBCSEncoder.prototype.end = function () {\n  if (this.leadSurrogate === -1 && this.seqObj === undefined) { return } // All clean. Most often case.\n\n  var newBuf = Buffer.alloc(10); var j = 0\n\n  if (this.seqObj) { // We're in the sequence.\n    var dbcsCode = this.seqObj[DEF_CHAR]\n    if (dbcsCode !== undefined) { // Write beginning of the sequence.\n      if (dbcsCode < 0x100) {\n        newBuf[j++] = dbcsCode\n      } else {\n        newBuf[j++] = dbcsCode >> 8   // high byte\n        newBuf[j++] = dbcsCode & 0xFF // low byte\n      }\n    } else {\n      // See todo above.\n    }\n    this.seqObj = undefined\n  }\n\n  if (this.leadSurrogate !== -1) {\n    // Incomplete surrogate pair - only lead surrogate found.\n    newBuf[j++] = this.defaultCharSingleByte\n    this.leadSurrogate = -1\n  }\n\n  return newBuf.slice(0, j)\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder (options, codec) {\n  // Decoder state\n  this.nodeIdx = 0\n  this.prevBytes = []\n\n  // Static data\n  this.decodeTables = codec.decodeTables\n  this.decodeTableSeq = codec.decodeTableSeq\n  this.defaultCharUnicode = codec.defaultCharUnicode\n  this.gb18030 = codec.gb18030\n}\n\nDBCSDecoder.prototype.write = function (buf) {\n  var newBuf = Buffer.alloc(buf.length * 2)\n  var nodeIdx = this.nodeIdx\n  var prevBytes = this.prevBytes; var prevOffset = this.prevBytes.length\n  var seqStart = -this.prevBytes.length // idx of the start of current parsed sequence.\n  var uCode\n\n  for (var i = 0, j = 0; i < buf.length; i++) {\n    var curByte = (i >= 0) ? buf[i] : prevBytes[i + prevOffset]\n\n    // Lookup in current trie node.\n    var uCode = this.decodeTables[nodeIdx][curByte]\n\n    if (uCode >= 0) {\n      // Normal character, just use it.\n    } else if (uCode === UNASSIGNED) { // Unknown char.\n      // TODO: Callback with seq.\n      uCode = this.defaultCharUnicode.charCodeAt(0)\n      i = seqStart // Skip one byte ('i' will be incremented by the for loop) and try to parse again.\n    } else if (uCode === GB18030_CODE) {\n      if (i >= 3) {\n        var ptr = (buf[i - 3] - 0x81) * 12600 + (buf[i - 2] - 0x30) * 1260 + (buf[i - 1] - 0x81) * 10 + (curByte - 0x30)\n      } else {\n        var ptr = (prevBytes[i - 3 + prevOffset] - 0x81) * 12600 +\n                          (((i - 2 >= 0) ? buf[i - 2] : prevBytes[i - 2 + prevOffset]) - 0x30) * 1260 +\n                          (((i - 1 >= 0) ? buf[i - 1] : prevBytes[i - 1 + prevOffset]) - 0x81) * 10 +\n                          (curByte - 0x30)\n      }\n      var idx = findIdx(this.gb18030.gbChars, ptr)\n      uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx]\n    } else if (uCode <= NODE_START) { // Go to next trie node.\n      nodeIdx = NODE_START - uCode\n      continue\n    } else if (uCode <= SEQ_START) { // Output a sequence of chars.\n      var seq = this.decodeTableSeq[SEQ_START - uCode]\n      for (var k = 0; k < seq.length - 1; k++) {\n        uCode = seq[k]\n        newBuf[j++] = uCode & 0xFF\n        newBuf[j++] = uCode >> 8\n      }\n      uCode = seq[seq.length - 1]\n    } else { throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte) }\n\n    // Write the character to buffer, handling higher planes using surrogate pair.\n    if (uCode >= 0x10000) {\n      uCode -= 0x10000\n      var uCodeLead = 0xD800 | (uCode >> 10)\n      newBuf[j++] = uCodeLead & 0xFF\n      newBuf[j++] = uCodeLead >> 8\n\n      uCode = 0xDC00 | (uCode & 0x3FF)\n    }\n    newBuf[j++] = uCode & 0xFF\n    newBuf[j++] = uCode >> 8\n\n    // Reset trie node.\n    nodeIdx = 0; seqStart = i + 1\n  }\n\n  this.nodeIdx = nodeIdx\n  this.prevBytes = (seqStart >= 0)\n    ? Array.prototype.slice.call(buf, seqStart)\n    : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf))\n\n  return newBuf.slice(0, j).toString(\"ucs2\")\n}\n\nDBCSDecoder.prototype.end = function () {\n  var ret = \"\"\n\n  // Try to parse all remaining chars.\n  while (this.prevBytes.length > 0) {\n    // Skip 1 character in the buffer.\n    ret += this.defaultCharUnicode\n    var bytesArr = this.prevBytes.slice(1)\n\n    // Parse remaining as usual.\n    this.prevBytes = []\n    this.nodeIdx = 0\n    if (bytesArr.length > 0) { ret += this.write(bytesArr) }\n  }\n\n  this.prevBytes = []\n  this.nodeIdx = 0\n  return ret\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx (table, val) {\n  if (table[0] > val) { return -1 }\n\n  var l = 0; var r = table.length\n  while (l < r - 1) { // always table[l] <= val < table[r]\n    var mid = l + ((r - l + 1) >> 1)\n    if (table[mid] <= val) { l = mid } else { r = mid }\n  }\n  return l\n}\n", "[\n[\"0\",\"\\u0000\",128],\n[\"a1\",\"\uFF61\",62],\n[\"8140\",\"\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008\",9,\"\uFF0B\uFF0D\u00B1\u00D7\"],\n[\"8180\",\"\u00F7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013\"],\n[\"81b8\",\"\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\"],\n[\"81c8\",\"\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203\"],\n[\"81da\",\"\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\"],\n[\"81f0\",\"\u212B\u2030\u266F\u266D\u266A\u2020\u2021\u00B6\"],\n[\"81fc\",\"\u25EF\"],\n[\"824f\",\"\uFF10\",9],\n[\"8260\",\"\uFF21\",25],\n[\"8281\",\"\uFF41\",25],\n[\"829f\",\"\u3041\",82],\n[\"8340\",\"\u30A1\",62],\n[\"8380\",\"\u30E0\",22],\n[\"839f\",\"\u0391\",16,\"\u03A3\",6],\n[\"83bf\",\"\u03B1\",16,\"\u03C3\",6],\n[\"8440\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"8470\",\"\u0430\",5,\"\u0451\u0436\",7],\n[\"8480\",\"\u043E\",17],\n[\"849f\",\"\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\"],\n[\"8740\",\"\u2460\",19,\"\u2160\",9],\n[\"875f\",\"\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1\"],\n[\"877e\",\"\u337B\"],\n[\"8780\",\"\u301D\u301F\u2116\u33CD\u2121\u32A4\",4,\"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A\"],\n[\"889f\",\"\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D\"],\n[\"8940\",\"\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\"],\n[\"8980\",\"\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539\"],\n[\"8a40\",\"\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\"],\n[\"8a80\",\"\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4\"],\n[\"8b40\",\"\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\"],\n[\"8b80\",\"\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\"],\n[\"8c40\",\"\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\"],\n[\"8c80\",\"\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411\"],\n[\"8d40\",\"\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\"],\n[\"8d80\",\"\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237\"],\n[\"8e40\",\"\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\"],\n[\"8e80\",\"\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468\"],\n[\"8f40\",\"\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\"],\n[\"8f80\",\"\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE\"],\n[\"9040\",\"\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\"],\n[\"9080\",\"\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA\"],\n[\"9140\",\"\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\"],\n[\"9180\",\"\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\"],\n[\"9240\",\"\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\"],\n[\"9280\",\"\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013\"],\n[\"9340\",\"\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\"],\n[\"9380\",\"\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165\"],\n[\"9440\",\"\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\"],\n[\"9480\",\"\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E\"],\n[\"9540\",\"\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\"],\n[\"9580\",\"\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B\"],\n[\"9640\",\"\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\"],\n[\"9680\",\"\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652\"],\n[\"9740\",\"\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\"],\n[\"9780\",\"\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\"],\n[\"9840\",\"\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155\"],\n[\"989f\",\"\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2\"],\n[\"9940\",\"\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\"],\n[\"9980\",\"\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\"],\n[\"9a40\",\"\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\"],\n[\"9a80\",\"\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969\"],\n[\"9b40\",\"\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\"],\n[\"9b80\",\"\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\"],\n[\"9c40\",\"\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\"],\n[\"9c80\",\"\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B\"],\n[\"9d40\",\"\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\"],\n[\"9d80\",\"\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\"],\n[\"9e40\",\"\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\"],\n[\"9e80\",\"\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3\"],\n[\"9f40\",\"\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\"],\n[\"9f80\",\"\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\"],\n[\"e040\",\"\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\"],\n[\"e080\",\"\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1\"],\n[\"e140\",\"\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\"],\n[\"e180\",\"\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\"],\n[\"e240\",\"\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\"],\n[\"e280\",\"\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06\"],\n[\"e340\",\"\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\"],\n[\"e380\",\"\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B\"],\n[\"e440\",\"\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\"],\n[\"e480\",\"\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548\"],\n[\"e540\",\"\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\"],\n[\"e580\",\"\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E\"],\n[\"e640\",\"\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\"],\n[\"e680\",\"\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A\"],\n[\"e740\",\"\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\"],\n[\"e780\",\"\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E\"],\n[\"e840\",\"\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\"],\n[\"e880\",\"\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870\"],\n[\"e940\",\"\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\"],\n[\"e980\",\"\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\"],\n[\"ea40\",\"\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\"],\n[\"ea80\",\"\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464\u51DC\u7199\"],\n[\"ed40\",\"\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\"],\n[\"ed80\",\"\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\"],\n[\"ee40\",\"\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\"],\n[\"ee80\",\"\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"],\n[\"eeef\",\"\u2170\",9,\"\uFFE2\uFFE4\uFF07\uFF02\"],\n[\"f040\",\"\uE000\",62],\n[\"f080\",\"\uE03F\",124],\n[\"f140\",\"\uE0BC\",62],\n[\"f180\",\"\uE0FB\",124],\n[\"f240\",\"\uE178\",62],\n[\"f280\",\"\uE1B7\",124],\n[\"f340\",\"\uE234\",62],\n[\"f380\",\"\uE273\",124],\n[\"f440\",\"\uE2F0\",62],\n[\"f480\",\"\uE32F\",124],\n[\"f540\",\"\uE3AC\",62],\n[\"f580\",\"\uE3EB\",124],\n[\"f640\",\"\uE468\",62],\n[\"f680\",\"\uE4A7\",124],\n[\"f740\",\"\uE524\",62],\n[\"f780\",\"\uE563\",124],\n[\"f840\",\"\uE5E0\",62],\n[\"f880\",\"\uE61F\",124],\n[\"f940\",\"\uE69C\"],\n[\"fa40\",\"\u2170\",9,\"\u2160\",9,\"\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u2235\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\"],\n[\"fa80\",\"\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\"],\n[\"fb40\",\"\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\"],\n[\"fb80\",\"\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\"],\n[\"fc40\",\"\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"]\n]\n", "[\n[\"0\",\"\\u0000\",127],\n[\"8ea1\",\"\uFF61\",62],\n[\"a1a1\",\"\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008\",9,\"\uFF0B\uFF0D\u00B1\u00D7\u00F7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\"],\n[\"a2a1\",\"\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013\"],\n[\"a2ba\",\"\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\"],\n[\"a2ca\",\"\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203\"],\n[\"a2dc\",\"\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\"],\n[\"a2f2\",\"\u212B\u2030\u266F\u266D\u266A\u2020\u2021\u00B6\"],\n[\"a2fe\",\"\u25EF\"],\n[\"a3b0\",\"\uFF10\",9],\n[\"a3c1\",\"\uFF21\",25],\n[\"a3e1\",\"\uFF41\",25],\n[\"a4a1\",\"\u3041\",82],\n[\"a5a1\",\"\u30A1\",85],\n[\"a6a1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a6c1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a7a1\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"a7d1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"a8a1\",\"\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\"],\n[\"ada1\",\"\u2460\",19,\"\u2160\",9],\n[\"adc0\",\"\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1\"],\n[\"addf\",\"\u337B\u301D\u301F\u2116\u33CD\u2121\u32A4\",4,\"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A\"],\n[\"b0a1\",\"\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D\"],\n[\"b1a1\",\"\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\"],\n[\"b2a1\",\"\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539\"],\n[\"b3a1\",\"\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\"],\n[\"b4a1\",\"\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4\"],\n[\"b5a1\",\"\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\"],\n[\"b6a1\",\"\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\"],\n[\"b7a1\",\"\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\"],\n[\"b8a1\",\"\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411\"],\n[\"b9a1\",\"\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\"],\n[\"baa1\",\"\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237\"],\n[\"bba1\",\"\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\"],\n[\"bca1\",\"\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468\"],\n[\"bda1\",\"\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\"],\n[\"bea1\",\"\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE\"],\n[\"bfa1\",\"\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\"],\n[\"c0a1\",\"\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA\"],\n[\"c1a1\",\"\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\"],\n[\"c2a1\",\"\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\"],\n[\"c3a1\",\"\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\"],\n[\"c4a1\",\"\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013\"],\n[\"c5a1\",\"\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\"],\n[\"c6a1\",\"\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165\"],\n[\"c7a1\",\"\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\"],\n[\"c8a1\",\"\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E\"],\n[\"c9a1\",\"\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\"],\n[\"caa1\",\"\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B\"],\n[\"cba1\",\"\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\"],\n[\"cca1\",\"\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652\"],\n[\"cda1\",\"\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\"],\n[\"cea1\",\"\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\"],\n[\"cfa1\",\"\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155\"],\n[\"d0a1\",\"\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2\"],\n[\"d1a1\",\"\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\"],\n[\"d2a1\",\"\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\"],\n[\"d3a1\",\"\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\"],\n[\"d4a1\",\"\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969\"],\n[\"d5a1\",\"\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\"],\n[\"d6a1\",\"\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\"],\n[\"d7a1\",\"\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\"],\n[\"d8a1\",\"\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B\"],\n[\"d9a1\",\"\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\"],\n[\"daa1\",\"\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\"],\n[\"dba1\",\"\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\"],\n[\"dca1\",\"\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3\"],\n[\"dda1\",\"\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\"],\n[\"dea1\",\"\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\"],\n[\"dfa1\",\"\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\"],\n[\"e0a1\",\"\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1\"],\n[\"e1a1\",\"\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\"],\n[\"e2a1\",\"\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\"],\n[\"e3a1\",\"\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\"],\n[\"e4a1\",\"\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06\"],\n[\"e5a1\",\"\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\"],\n[\"e6a1\",\"\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B\"],\n[\"e7a1\",\"\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\"],\n[\"e8a1\",\"\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548\"],\n[\"e9a1\",\"\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\"],\n[\"eaa1\",\"\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E\"],\n[\"eba1\",\"\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\"],\n[\"eca1\",\"\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A\"],\n[\"eda1\",\"\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\"],\n[\"eea1\",\"\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E\"],\n[\"efa1\",\"\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\"],\n[\"f0a1\",\"\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870\"],\n[\"f1a1\",\"\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\"],\n[\"f2a1\",\"\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\"],\n[\"f3a1\",\"\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\"],\n[\"f4a1\",\"\u582F\u69C7\u9059\u7464\u51DC\u7199\"],\n[\"f9a1\",\"\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\"],\n[\"faa1\",\"\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\"],\n[\"fba1\",\"\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\"],\n[\"fca1\",\"\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"],\n[\"fcf1\",\"\u2170\",9,\"\uFFE2\uFFE4\uFF07\uFF02\"],\n[\"8fa2af\",\"\u02D8\u02C7\u00B8\u02D9\u02DD\u00AF\u02DB\u02DA\uFF5E\u0384\u0385\"],\n[\"8fa2c2\",\"\u00A1\u00A6\u00BF\"],\n[\"8fa2eb\",\"\u00BA\u00AA\u00A9\u00AE\u2122\u00A4\u2116\"],\n[\"8fa6e1\",\"\u0386\u0388\u0389\u038A\u03AA\"],\n[\"8fa6e7\",\"\u038C\"],\n[\"8fa6e9\",\"\u038E\u03AB\"],\n[\"8fa6ec\",\"\u038F\"],\n[\"8fa6f1\",\"\u03AC\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE\"],\n[\"8fa7c2\",\"\u0402\",10,\"\u040E\u040F\"],\n[\"8fa7f2\",\"\u0452\",10,\"\u045E\u045F\"],\n[\"8fa9a1\",\"\u00C6\u0110\"],\n[\"8fa9a4\",\"\u0126\"],\n[\"8fa9a6\",\"\u0132\"],\n[\"8fa9a8\",\"\u0141\u013F\"],\n[\"8fa9ab\",\"\u014A\u00D8\u0152\"],\n[\"8fa9af\",\"\u0166\u00DE\"],\n[\"8fa9c1\",\"\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0142\u0140\u0149\u014B\u00F8\u0153\u00DF\u0167\u00FE\"],\n[\"8faaa1\",\"\u00C1\u00C0\u00C4\u00C2\u0102\u01CD\u0100\u0104\u00C5\u00C3\u0106\u0108\u010C\u00C7\u010A\u010E\u00C9\u00C8\u00CB\u00CA\u011A\u0116\u0112\u0118\"],\n[\"8faaba\",\"\u011C\u011E\u0122\u0120\u0124\u00CD\u00CC\u00CF\u00CE\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139\u013D\u013B\u0143\u0147\u0145\u00D1\u00D3\u00D2\u00D6\u00D4\u01D1\u0150\u014C\u00D5\u0154\u0158\u0156\u015A\u015C\u0160\u015E\u0164\u0162\u00DA\u00D9\u00DC\u00DB\u016C\u01D3\u0170\u016A\u0172\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\u00DD\u0178\u0176\u0179\u017D\u017B\"],\n[\"8faba1\",\"\u00E1\u00E0\u00E4\u00E2\u0103\u01CE\u0101\u0105\u00E5\u00E3\u0107\u0109\u010D\u00E7\u010B\u010F\u00E9\u00E8\u00EB\u00EA\u011B\u0117\u0113\u0119\u01F5\u011D\u011F\"],\n[\"8fabbd\",\"\u0121\u0125\u00ED\u00EC\u00EF\u00EE\u01D0\"],\n[\"8fabc5\",\"\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C\u0144\u0148\u0146\u00F1\u00F3\u00F2\u00F6\u00F4\u01D2\u0151\u014D\u00F5\u0155\u0159\u0157\u015B\u015D\u0161\u015F\u0165\u0163\u00FA\u00F9\u00FC\u00FB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169\u01D8\u01DC\u01DA\u01D6\u0175\u00FD\u00FF\u0177\u017A\u017E\u017C\"],\n[\"8fb0a1\",\"\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84\"],\n[\"8fb1a1\",\"\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083\u5084\u5086\u508A\u508E\u508F\u5090\"],\n[\"8fb2a1\",\"\u5092\u5093\u5094\u5096\u509B\u509C\u509E\",4,\"\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA\u51BC\u51BE\u51BF\u51C2\"],\n[\"8fb3a1\",\"\u51C8\u51CF\u51D1\u51D2\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303\u530A\u530B\"],\n[\"8fb4a1\",\"\u530C\u5311\u5313\u5318\u531B\u531C\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F\"],\n[\"8fb5a1\",\"\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2\"],\n[\"8fb6a1\",\"\u55D3\u55D7\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605\u5608\u560A\u560D\",5,\"\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9\u56DC\u56DD\u56DF\u56E1\u56E4\",4,\"\u56F1\u56EB\u56ED\"],\n[\"8fb7a1\",\"\u56F6\u56F7\u5701\u5702\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768\u576B\u576D\",4,\"\u5773\u5774\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808\u5809\u57E1\"],\n[\"8fb8a1\",\"\u580C\u580D\u581B\u581E\u581F\u5820\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D\"],\n[\"8fb9a1\",\"\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF\"],\n[\"8fbaa1\",\"\u5AC4\u5AC6\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6\",4,\"\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62\u5C63\u5C67\u5C68\u5C69\"],\n[\"8fbba1\",\"\u5C6D\u5C70\u5C74\u5C75\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9\u5DE0\u5DE4\"],\n[\"8fbca1\",\"\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A\",4,\"\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67\"],\n[\"8fbda1\",\"\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0\",4,\"\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7\"],\n[\"8fbea1\",\"\u60BB\u60BE\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A\u610C\u6110\",4,\"\u6116\u6117\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1\u61E2\u61E7\u61E9\u61E5\"],\n[\"8fbfa1\",\"\u61EC\u61ED\u61EF\u6201\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371\u6374\u6375\"],\n[\"8fc0a1\",\"\u6378\u637C\u637D\u637F\u6382\u6384\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF\"],\n[\"8fc1a1\",\"\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609\u660D\u6611\u6612\u6615\u6616\u661D\"],\n[\"8fc2a1\",\"\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748\u674C\u6754\u6755\u675D\"],\n[\"8fc3a1\",\"\u6766\u676C\u676E\u6774\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855\u6857\u6858\u685B\u686B\u686E\",4,\"\u6875\u6879\u687A\u687B\u687C\u6882\u6884\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8\u68CC\u68CF\"],\n[\"8fc4a1\",\"\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32\"],\n[\"8fc5a1\",\"\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D\"],\n[\"8fc6a1\",\"\u6B7E\u6B82\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0\u6CD1\u6CD2\u6CD4\u6CD6\"],\n[\"8fc7a1\",\"\u6CDA\u6CDC\u6CE0\u6CE7\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C\u6E5D\u6E5E\"],\n[\"8fc8a1\",\"\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA\"],\n[\"8fc9a1\",\"\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E\u7081\u7085\u7086\u7094\",4,\"\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4\u70FA\u7103\",4,\"\u710B\u710C\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150\u7152\u7157\u715A\u715C\u715E\u7160\"],\n[\"8fcaa1\",\"\u7168\u7179\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5\u72F3\u72F4\u72FA\u72FB\"],\n[\"8fcba1\",\"\u72FE\u7302\u7304\u7305\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA\u73FB\u73FD\"],\n[\"8fcca1\",\"\u73FF\u7400\u7401\u7404\u7407\u740A\u7411\u741A\u741B\u7424\u7426\u7428\",9,\"\u7439\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506\"],\n[\"8fcda1\",\"\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E\u755F\u7561\u756F\u7571\u7579\",5,\"\u7581\u7585\u7590\u7592\u7593\u7595\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629\u762D\u7632\u7633\u7635\u7638\u7639\"],\n[\"8fcea1\",\"\u763A\u763C\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B\u769C\u769D\u769F\u76A0\u76A2\",6,\"\u76AA\u76AD\u76BD\u76C1\u76C5\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C\u775E\u775F\u7760\u7762\"],\n[\"8fcfa1\",\"\u7764\u7767\u776A\u776C\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1\u78B2\u78B3\"],\n[\"8fd0a1\",\"\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE\"],\n[\"8fd1a1\",\"\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30\"],\n[\"8fd2a1\",\"\u7B31\u7B34\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59\",5],\n[\"8fd3a1\",\"\u7C61\u7C63\u7C67\u7C69\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96\u7D97\u7D9D\"],\n[\"8fd4a1\",\"\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6\u7DB7\u7DB9\u7DC2\",4,\"\u7DCC\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D\"],\n[\"8fd5a1\",\"\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE\"],\n[\"8fd6a1\",\"\u80F0\u80F2\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A\u8243\u8244\u8245\u8246\"],\n[\"8fd7a1\",\"\u824B\u824E\u824F\u8251\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357\u8370\u8378\"],\n[\"8fd8a1\",\"\u837D\u837F\u8380\u8382\u8384\u8386\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3\"],\n[\"8fd9a1\",\"\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F\u8546\u854F\",4,\"\u8556\u8559\u855C\",6,\"\u8564\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC\"],\n[\"8fdaa1\",\"\u85FF\u8600\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653\u8656\u8657\u8658\u8659\u865D\u8660\",4,\"\u8669\u866C\u866F\u8675\u8676\u8677\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719\u871E\u871F\u8721\u8723\"],\n[\"8fdba1\",\"\u8728\u872E\u872F\u8731\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F\u8771\u8772\u877B\u8783\",6,\"\u878B\u878C\u8790\u8793\u8795\u8797\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830\u8832\u8835\"],\n[\"8fdca1\",\"\u883A\u883C\u8841\u8843\u8845\u8848\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA\",4,\"\u88D1\u88D2\u88D3\u88DB\u88DE\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A\"],\n[\"8fdda1\",\"\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5\u89B6\u89B7\u89BC\u89D4\",4,\"\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3\"],\n[\"8fdea1\",\"\u8AB6\u8AB7\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37\u8B3C\u8B42\",4,\"\u8B48\u8B52\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75\u8C76\u8C7B\u8C7E\u8C86\"],\n[\"8fdfa1\",\"\u8C87\u8C8B\u8C90\u8C92\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20\u8E21\u8E22\"],\n[\"8fe0a1\",\"\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41\"],\n[\"8fe1a1\",\"\u8F43\u8F47\u8F4F\u8F51\",4,\"\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3\"],\n[\"8fe2a1\",\"\u90C4\u90C5\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6\u91BB\u91BC\u91BD\u91BF\"],\n[\"8fe3a1\",\"\u91C2\u91C3\u91C5\u91D3\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9\u91EA\u91EC\",5,\"\u91F7\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E\u926F\u9270\u9275\",4,\"\u927B\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E\u9292\u9297\"],\n[\"8fe4a1\",\"\u9299\u929F\u92A0\u92A4\u92A5\u92A7\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB\u92BC\u92BD\u92BF\",4,\"\u92C5\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376\"],\n[\"8fe5a1\",\"\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7\u93C9\",4,\"\u93D3\u93D9\u93DC\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F\u9471\u9472\u9484\u9483\u9578\u9579\"],\n[\"8fe6a1\",\"\u957E\u9584\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9\u96EF\u96F1\u96FA\u9702\"],\n[\"8fe7a1\",\"\u9703\u9705\u9709\u971A\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820\u9823\u9826\"],\n[\"8fe8a1\",\"\u982B\u982E\u982F\u9830\u9832\u9833\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B\u9931\",4,\"\u9939\u993A\u993B\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5\"],\n[\"8fe9a1\",\"\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA\u9AFD\u9AFF\",4],\n[\"8feaa1\",\"\u9B04\u9B05\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61\u9B63\u9B65\u9B66\u9B68\u9B6A\",4,\"\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB\u9BEF\u9BF3\u9BF7\u9BF8\"],\n[\"8feba1\",\"\u9BF9\u9BFA\u9BFD\u9BFF\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26\",4,\"\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76\u9D77\u9D7B\"],\n[\"8feca1\",\"\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5\"],\n[\"8feda1\",\"\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43\",4,\"\u9F53\u9F55\u9F56\u9F57\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D\",4,\"\u9F73\u9F75\u9F7A\u9F7D\u9F8F\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1\u9FA2\u9FA3\u9FA5\"]\n]\n", "[\n[\"0\",\"\\u0000\",127,\"\u20AC\"],\n[\"8140\",\"\u4E02\u4E04\u4E05\u4E06\u4E0F\u4E12\u4E17\u4E1F\u4E20\u4E21\u4E23\u4E26\u4E29\u4E2E\u4E2F\u4E31\u4E33\u4E35\u4E37\u4E3C\u4E40\u4E41\u4E42\u4E44\u4E46\u4E4A\u4E51\u4E55\u4E57\u4E5A\u4E5B\u4E62\u4E63\u4E64\u4E65\u4E67\u4E68\u4E6A\",5,\"\u4E72\u4E74\",9,\"\u4E7F\",6,\"\u4E87\u4E8A\"],\n[\"8180\",\"\u4E90\u4E96\u4E97\u4E99\u4E9C\u4E9D\u4E9E\u4EA3\u4EAA\u4EAF\u4EB0\u4EB1\u4EB4\u4EB6\u4EB7\u4EB8\u4EB9\u4EBC\u4EBD\u4EBE\u4EC8\u4ECC\u4ECF\u4ED0\u4ED2\u4EDA\u4EDB\u4EDC\u4EE0\u4EE2\u4EE6\u4EE7\u4EE9\u4EED\u4EEE\u4EEF\u4EF1\u4EF4\u4EF8\u4EF9\u4EFA\u4EFC\u4EFE\u4F00\u4F02\",6,\"\u4F0B\u4F0C\u4F12\",4,\"\u4F1C\u4F1D\u4F21\u4F23\u4F28\u4F29\u4F2C\u4F2D\u4F2E\u4F31\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\",4,\"\u4F44\u4F45\u4F47\",5,\"\u4F52\u4F54\u4F56\u4F61\u4F62\u4F66\u4F68\u4F6A\u4F6B\u4F6D\u4F6E\u4F71\u4F72\u4F75\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F80\u4F81\u4F82\u4F85\u4F86\u4F87\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F95\u4F96\u4F98\u4F99\u4F9A\u4F9C\u4F9E\u4F9F\u4FA1\u4FA2\"],\n[\"8240\",\"\u4FA4\u4FAB\u4FAD\u4FB0\",4,\"\u4FB6\",8,\"\u4FC0\u4FC1\u4FC2\u4FC6\u4FC7\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FD2\",4,\"\u4FD9\u4FDB\u4FE0\u4FE2\u4FE4\u4FE5\u4FE7\u4FEB\u4FEC\u4FF0\u4FF2\u4FF4\u4FF5\u4FF6\u4FF7\u4FF9\u4FFB\u4FFC\u4FFD\u4FFF\",11],\n[\"8280\",\"\u500B\u500E\u5010\u5011\u5013\u5015\u5016\u5017\u501B\u501D\u501E\u5020\u5022\u5023\u5024\u5027\u502B\u502F\",10,\"\u503B\u503D\u503F\u5040\u5041\u5042\u5044\u5045\u5046\u5049\u504A\u504B\u504D\u5050\",4,\"\u5056\u5057\u5058\u5059\u505B\u505D\",7,\"\u5066\",5,\"\u506D\",8,\"\u5078\u5079\u507A\u507C\u507D\u5081\u5082\u5083\u5084\u5086\u5087\u5089\u508A\u508B\u508C\u508E\",20,\"\u50A4\u50A6\u50AA\u50AB\u50AD\",4,\"\u50B3\",6,\"\u50BC\"],\n[\"8340\",\"\u50BD\",17,\"\u50D0\",5,\"\u50D7\u50D8\u50D9\u50DB\",10,\"\u50E8\u50E9\u50EA\u50EB\u50EF\u50F0\u50F1\u50F2\u50F4\u50F6\",4,\"\u50FC\",9,\"\u5108\"],\n[\"8380\",\"\u5109\u510A\u510C\",5,\"\u5113\",13,\"\u5122\",28,\"\u5142\u5147\u514A\u514C\u514E\u514F\u5150\u5152\u5153\u5157\u5158\u5159\u515B\u515D\",4,\"\u5163\u5164\u5166\u5167\u5169\u516A\u516F\u5172\u517A\u517E\u517F\u5183\u5184\u5186\u5187\u518A\u518B\u518E\u518F\u5190\u5191\u5193\u5194\u5198\u519A\u519D\u519E\u519F\u51A1\u51A3\u51A6\",4,\"\u51AD\u51AE\u51B4\u51B8\u51B9\u51BA\u51BE\u51BF\u51C1\u51C2\u51C3\u51C5\u51C8\u51CA\u51CD\u51CE\u51D0\u51D2\",5],\n[\"8440\",\"\u51D8\u51D9\u51DA\u51DC\u51DE\u51DF\u51E2\u51E3\u51E5\",5,\"\u51EC\u51EE\u51F1\u51F2\u51F4\u51F7\u51FE\u5204\u5205\u5209\u520B\u520C\u520F\u5210\u5213\u5214\u5215\u521C\u521E\u521F\u5221\u5222\u5223\u5225\u5226\u5227\u522A\u522C\u522F\u5231\u5232\u5234\u5235\u523C\u523E\u5244\",5,\"\u524B\u524E\u524F\u5252\u5253\u5255\u5257\u5258\"],\n[\"8480\",\"\u5259\u525A\u525B\u525D\u525F\u5260\u5262\u5263\u5264\u5266\u5268\u526B\u526C\u526D\u526E\u5270\u5271\u5273\",9,\"\u527E\u5280\u5283\",4,\"\u5289\",6,\"\u5291\u5292\u5294\",6,\"\u529C\u52A4\u52A5\u52A6\u52A7\u52AE\u52AF\u52B0\u52B4\",9,\"\u52C0\u52C1\u52C2\u52C4\u52C5\u52C6\u52C8\u52CA\u52CC\u52CD\u52CE\u52CF\u52D1\u52D3\u52D4\u52D5\u52D7\u52D9\",5,\"\u52E0\u52E1\u52E2\u52E3\u52E5\",10,\"\u52F1\",7,\"\u52FB\u52FC\u52FD\u5301\u5302\u5303\u5304\u5307\u5309\u530A\u530B\u530C\u530E\"],\n[\"8540\",\"\u5311\u5312\u5313\u5314\u5318\u531B\u531C\u531E\u531F\u5322\u5324\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u532F\",9,\"\u533C\u533D\u5340\u5342\u5344\u5346\u534B\u534C\u534D\u5350\u5354\u5358\u5359\u535B\u535D\u5365\u5368\u536A\u536C\u536D\u5372\u5376\u5379\u537B\u537C\u537D\u537E\u5380\u5381\u5383\u5387\u5388\u538A\u538E\u538F\"],\n[\"8580\",\"\u5390\",4,\"\u5396\u5397\u5399\u539B\u539C\u539E\u53A0\u53A1\u53A4\u53A7\u53AA\u53AB\u53AC\u53AD\u53AF\",6,\"\u53B7\u53B8\u53B9\u53BA\u53BC\u53BD\u53BE\u53C0\u53C3\",4,\"\u53CE\u53CF\u53D0\u53D2\u53D3\u53D5\u53DA\u53DC\u53DD\u53DE\u53E1\u53E2\u53E7\u53F4\u53FA\u53FE\u53FF\u5400\u5402\u5405\u5407\u540B\u5414\u5418\u5419\u541A\u541C\u5422\u5424\u5425\u542A\u5430\u5433\u5436\u5437\u543A\u543D\u543F\u5441\u5442\u5444\u5445\u5447\u5449\u544C\u544D\u544E\u544F\u5451\u545A\u545D\",4,\"\u5463\u5465\u5467\u5469\",7,\"\u5474\u5479\u547A\u547E\u547F\u5481\u5483\u5485\u5487\u5488\u5489\u548A\u548D\u5491\u5493\u5497\u5498\u549C\u549E\u549F\u54A0\u54A1\"],\n[\"8640\",\"\u54A2\u54A5\u54AE\u54B0\u54B2\u54B5\u54B6\u54B7\u54B9\u54BA\u54BC\u54BE\u54C3\u54C5\u54CA\u54CB\u54D6\u54D8\u54DB\u54E0\",4,\"\u54EB\u54EC\u54EF\u54F0\u54F1\u54F4\",5,\"\u54FB\u54FE\u5500\u5502\u5503\u5504\u5505\u5508\u550A\",4,\"\u5512\u5513\u5515\",5,\"\u551C\u551D\u551E\u551F\u5521\u5525\u5526\"],\n[\"8680\",\"\u5528\u5529\u552B\u552D\u5532\u5534\u5535\u5536\u5538\u5539\u553A\u553B\u553D\u5540\u5542\u5545\u5547\u5548\u554B\",4,\"\u5551\u5552\u5553\u5554\u5557\",4,\"\u555D\u555E\u555F\u5560\u5562\u5563\u5568\u5569\u556B\u556F\",5,\"\u5579\u557A\u557D\u557F\u5585\u5586\u558C\u558D\u558E\u5590\u5592\u5593\u5595\u5596\u5597\u559A\u559B\u559E\u55A0\",6,\"\u55A8\",8,\"\u55B2\u55B4\u55B6\u55B8\u55BA\u55BC\u55BF\",4,\"\u55C6\u55C7\u55C8\u55CA\u55CB\u55CE\u55CF\u55D0\u55D5\u55D7\",4,\"\u55DE\u55E0\u55E2\u55E7\u55E9\u55ED\u55EE\u55F0\u55F1\u55F4\u55F6\u55F8\",4,\"\u55FF\u5602\u5603\u5604\u5605\"],\n[\"8740\",\"\u5606\u5607\u560A\u560B\u560D\u5610\",7,\"\u5619\u561A\u561C\u561D\u5620\u5621\u5622\u5625\u5626\u5628\u5629\u562A\u562B\u562E\u562F\u5630\u5633\u5635\u5637\u5638\u563A\u563C\u563D\u563E\u5640\",11,\"\u564F\",4,\"\u5655\u5656\u565A\u565B\u565D\",4],\n[\"8780\",\"\u5663\u5665\u5666\u5667\u566D\u566E\u566F\u5670\u5672\u5673\u5674\u5675\u5677\u5678\u5679\u567A\u567D\",7,\"\u5687\",6,\"\u5690\u5691\u5692\u5694\",14,\"\u56A4\",10,\"\u56B0\",6,\"\u56B8\u56B9\u56BA\u56BB\u56BD\",12,\"\u56CB\",8,\"\u56D5\u56D6\u56D8\u56D9\u56DC\u56E3\u56E5\",5,\"\u56EC\u56EE\u56EF\u56F2\u56F3\u56F6\u56F7\u56F8\u56FB\u56FC\u5700\u5701\u5702\u5705\u5707\u570B\",6],\n[\"8840\",\"\u5712\",9,\"\u571D\u571E\u5720\u5721\u5722\u5724\u5725\u5726\u5727\u572B\u5731\u5732\u5734\",4,\"\u573C\u573D\u573F\u5741\u5743\u5744\u5745\u5746\u5748\u5749\u574B\u5752\",4,\"\u5758\u5759\u5762\u5763\u5765\u5767\u576C\u576E\u5770\u5771\u5772\u5774\u5775\u5778\u5779\u577A\u577D\u577E\u577F\u5780\"],\n[\"8880\",\"\u5781\u5787\u5788\u5789\u578A\u578D\",4,\"\u5794\",6,\"\u579C\u579D\u579E\u579F\u57A5\u57A8\u57AA\u57AC\u57AF\u57B0\u57B1\u57B3\u57B5\u57B6\u57B7\u57B9\",8,\"\u57C4\",6,\"\u57CC\u57CD\u57D0\u57D1\u57D3\u57D6\u57D7\u57DB\u57DC\u57DE\u57E1\u57E2\u57E3\u57E5\",7,\"\u57EE\u57F0\u57F1\u57F2\u57F3\u57F5\u57F6\u57F7\u57FB\u57FC\u57FE\u57FF\u5801\u5803\u5804\u5805\u5808\u5809\u580A\u580C\u580E\u580F\u5810\u5812\u5813\u5814\u5816\u5817\u5818\u581A\u581B\u581C\u581D\u581F\u5822\u5823\u5825\",4,\"\u582B\",4,\"\u5831\u5832\u5833\u5834\u5836\",7],\n[\"8940\",\"\u583E\",5,\"\u5845\",6,\"\u584E\u584F\u5850\u5852\u5853\u5855\u5856\u5857\u5859\",4,\"\u585F\",5,\"\u5866\",4,\"\u586D\",16,\"\u587F\u5882\u5884\u5886\u5887\u5888\u588A\u588B\u588C\"],\n[\"8980\",\"\u588D\",4,\"\u5894\",4,\"\u589B\u589C\u589D\u58A0\",7,\"\u58AA\",17,\"\u58BD\u58BE\u58BF\u58C0\u58C2\u58C3\u58C4\u58C6\",10,\"\u58D2\u58D3\u58D4\u58D6\",13,\"\u58E5\",5,\"\u58ED\u58EF\u58F1\u58F2\u58F4\u58F5\u58F7\u58F8\u58FA\",7,\"\u5903\u5905\u5906\u5908\",4,\"\u590E\u5910\u5911\u5912\u5913\u5917\u5918\u591B\u591D\u591E\u5920\u5921\u5922\u5923\u5926\u5928\u592C\u5930\u5932\u5933\u5935\u5936\u593B\"],\n[\"8a40\",\"\u593D\u593E\u593F\u5940\u5943\u5945\u5946\u594A\u594C\u594D\u5950\u5952\u5953\u5959\u595B\",4,\"\u5961\u5963\u5964\u5966\",12,\"\u5975\u5977\u597A\u597B\u597C\u597E\u597F\u5980\u5985\u5989\u598B\u598C\u598E\u598F\u5990\u5991\u5994\u5995\u5998\u599A\u599B\u599C\u599D\u599F\u59A0\u59A1\u59A2\u59A6\"],\n[\"8a80\",\"\u59A7\u59AC\u59AD\u59B0\u59B1\u59B3\",5,\"\u59BA\u59BC\u59BD\u59BF\",6,\"\u59C7\u59C8\u59C9\u59CC\u59CD\u59CE\u59CF\u59D5\u59D6\u59D9\u59DB\u59DE\",4,\"\u59E4\u59E6\u59E7\u59E9\u59EA\u59EB\u59ED\",11,\"\u59FA\u59FC\u59FD\u59FE\u5A00\u5A02\u5A0A\u5A0B\u5A0D\u5A0E\u5A0F\u5A10\u5A12\u5A14\u5A15\u5A16\u5A17\u5A19\u5A1A\u5A1B\u5A1D\u5A1E\u5A21\u5A22\u5A24\u5A26\u5A27\u5A28\u5A2A\",6,\"\u5A33\u5A35\u5A37\",4,\"\u5A3D\u5A3E\u5A3F\u5A41\",4,\"\u5A47\u5A48\u5A4B\",9,\"\u5A56\u5A57\u5A58\u5A59\u5A5B\",5],\n[\"8b40\",\"\u5A61\u5A63\u5A64\u5A65\u5A66\u5A68\u5A69\u5A6B\",8,\"\u5A78\u5A79\u5A7B\u5A7C\u5A7D\u5A7E\u5A80\",17,\"\u5A93\",6,\"\u5A9C\",13,\"\u5AAB\u5AAC\"],\n[\"8b80\",\"\u5AAD\",4,\"\u5AB4\u5AB6\u5AB7\u5AB9\",4,\"\u5ABF\u5AC0\u5AC3\",5,\"\u5ACA\u5ACB\u5ACD\",4,\"\u5AD3\u5AD5\u5AD7\u5AD9\u5ADA\u5ADB\u5ADD\u5ADE\u5ADF\u5AE2\u5AE4\u5AE5\u5AE7\u5AE8\u5AEA\u5AEC\",4,\"\u5AF2\",22,\"\u5B0A\",11,\"\u5B18\",25,\"\u5B33\u5B35\u5B36\u5B38\",7,\"\u5B41\",6],\n[\"8c40\",\"\u5B48\",7,\"\u5B52\u5B56\u5B5E\u5B60\u5B61\u5B67\u5B68\u5B6B\u5B6D\u5B6E\u5B6F\u5B72\u5B74\u5B76\u5B77\u5B78\u5B79\u5B7B\u5B7C\u5B7E\u5B7F\u5B82\u5B86\u5B8A\u5B8D\u5B8E\u5B90\u5B91\u5B92\u5B94\u5B96\u5B9F\u5BA7\u5BA8\u5BA9\u5BAC\u5BAD\u5BAE\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBB\u5BBC\u5BC0\u5BC1\u5BC3\u5BC8\u5BC9\u5BCA\u5BCB\u5BCD\u5BCE\u5BCF\"],\n[\"8c80\",\"\u5BD1\u5BD4\",8,\"\u5BE0\u5BE2\u5BE3\u5BE6\u5BE7\u5BE9\",4,\"\u5BEF\u5BF1\",6,\"\u5BFD\u5BFE\u5C00\u5C02\u5C03\u5C05\u5C07\u5C08\u5C0B\u5C0C\u5C0D\u5C0E\u5C10\u5C12\u5C13\u5C17\u5C19\u5C1B\u5C1E\u5C1F\u5C20\u5C21\u5C23\u5C26\u5C28\u5C29\u5C2A\u5C2B\u5C2D\u5C2E\u5C2F\u5C30\u5C32\u5C33\u5C35\u5C36\u5C37\u5C43\u5C44\u5C46\u5C47\u5C4C\u5C4D\u5C52\u5C53\u5C54\u5C56\u5C57\u5C58\u5C5A\u5C5B\u5C5C\u5C5D\u5C5F\u5C62\u5C64\u5C67\",6,\"\u5C70\u5C72\",6,\"\u5C7B\u5C7C\u5C7D\u5C7E\u5C80\u5C83\",4,\"\u5C89\u5C8A\u5C8B\u5C8E\u5C8F\u5C92\u5C93\u5C95\u5C9D\",4,\"\u5CA4\",4],\n[\"8d40\",\"\u5CAA\u5CAE\u5CAF\u5CB0\u5CB2\u5CB4\u5CB6\u5CB9\u5CBA\u5CBB\u5CBC\u5CBE\u5CC0\u5CC2\u5CC3\u5CC5\",5,\"\u5CCC\",5,\"\u5CD3\",5,\"\u5CDA\",6,\"\u5CE2\u5CE3\u5CE7\u5CE9\u5CEB\u5CEC\u5CEE\u5CEF\u5CF1\",9,\"\u5CFC\",4],\n[\"8d80\",\"\u5D01\u5D04\u5D05\u5D08\",5,\"\u5D0F\",4,\"\u5D15\u5D17\u5D18\u5D19\u5D1A\u5D1C\u5D1D\u5D1F\",4,\"\u5D25\u5D28\u5D2A\u5D2B\u5D2C\u5D2F\",4,\"\u5D35\",7,\"\u5D3F\",7,\"\u5D48\u5D49\u5D4D\",10,\"\u5D59\u5D5A\u5D5C\u5D5E\",10,\"\u5D6A\u5D6D\u5D6E\u5D70\u5D71\u5D72\u5D73\u5D75\",12,\"\u5D83\",21,\"\u5D9A\u5D9B\u5D9C\u5D9E\u5D9F\u5DA0\"],\n[\"8e40\",\"\u5DA1\",21,\"\u5DB8\",12,\"\u5DC6\",6,\"\u5DCE\",12,\"\u5DDC\u5DDF\u5DE0\u5DE3\u5DE4\u5DEA\u5DEC\u5DED\"],\n[\"8e80\",\"\u5DF0\u5DF5\u5DF6\u5DF8\",4,\"\u5DFF\u5E00\u5E04\u5E07\u5E09\u5E0A\u5E0B\u5E0D\u5E0E\u5E12\u5E13\u5E17\u5E1E\",7,\"\u5E28\",4,\"\u5E2F\u5E30\u5E32\",4,\"\u5E39\u5E3A\u5E3E\u5E3F\u5E40\u5E41\u5E43\u5E46\",5,\"\u5E4D\",6,\"\u5E56\",4,\"\u5E5C\u5E5D\u5E5F\u5E60\u5E63\",14,\"\u5E75\u5E77\u5E79\u5E7E\u5E81\u5E82\u5E83\u5E85\u5E88\u5E89\u5E8C\u5E8D\u5E8E\u5E92\u5E98\u5E9B\u5E9D\u5EA1\u5EA2\u5EA3\u5EA4\u5EA8\",4,\"\u5EAE\",4,\"\u5EB4\u5EBA\u5EBB\u5EBC\u5EBD\u5EBF\",6],\n[\"8f40\",\"\u5EC6\u5EC7\u5EC8\u5ECB\",5,\"\u5ED4\u5ED5\u5ED7\u5ED8\u5ED9\u5EDA\u5EDC\",11,\"\u5EE9\u5EEB\",8,\"\u5EF5\u5EF8\u5EF9\u5EFB\u5EFC\u5EFD\u5F05\u5F06\u5F07\u5F09\u5F0C\u5F0D\u5F0E\u5F10\u5F12\u5F14\u5F16\u5F19\u5F1A\u5F1C\u5F1D\u5F1E\u5F21\u5F22\u5F23\u5F24\"],\n[\"8f80\",\"\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F32\",6,\"\u5F3B\u5F3D\u5F3E\u5F3F\u5F41\",14,\"\u5F51\u5F54\u5F59\u5F5A\u5F5B\u5F5C\u5F5E\u5F5F\u5F60\u5F63\u5F65\u5F67\u5F68\u5F6B\u5F6E\u5F6F\u5F72\u5F74\u5F75\u5F76\u5F78\u5F7A\u5F7D\u5F7E\u5F7F\u5F83\u5F86\u5F8D\u5F8E\u5F8F\u5F91\u5F93\u5F94\u5F96\u5F9A\u5F9B\u5F9D\u5F9E\u5F9F\u5FA0\u5FA2\",5,\"\u5FA9\u5FAB\u5FAC\u5FAF\",5,\"\u5FB6\u5FB8\u5FB9\u5FBA\u5FBB\u5FBE\",4,\"\u5FC7\u5FC8\u5FCA\u5FCB\u5FCE\u5FD3\u5FD4\u5FD5\u5FDA\u5FDB\u5FDC\u5FDE\u5FDF\u5FE2\u5FE3\u5FE5\u5FE6\u5FE8\u5FE9\u5FEC\u5FEF\u5FF0\u5FF2\u5FF3\u5FF4\u5FF6\u5FF7\u5FF9\u5FFA\u5FFC\u6007\"],\n[\"9040\",\"\u6008\u6009\u600B\u600C\u6010\u6011\u6013\u6017\u6018\u601A\u601E\u601F\u6022\u6023\u6024\u602C\u602D\u602E\u6030\",4,\"\u6036\",4,\"\u603D\u603E\u6040\u6044\",6,\"\u604C\u604E\u604F\u6051\u6053\u6054\u6056\u6057\u6058\u605B\u605C\u605E\u605F\u6060\u6061\u6065\u6066\u606E\u6071\u6072\u6074\u6075\u6077\u607E\u6080\"],\n[\"9080\",\"\u6081\u6082\u6085\u6086\u6087\u6088\u608A\u608B\u608E\u608F\u6090\u6091\u6093\u6095\u6097\u6098\u6099\u609C\u609E\u60A1\u60A2\u60A4\u60A5\u60A7\u60A9\u60AA\u60AE\u60B0\u60B3\u60B5\u60B6\u60B7\u60B9\u60BA\u60BD\",7,\"\u60C7\u60C8\u60C9\u60CC\",4,\"\u60D2\u60D3\u60D4\u60D6\u60D7\u60D9\u60DB\u60DE\u60E1\",4,\"\u60EA\u60F1\u60F2\u60F5\u60F7\u60F8\u60FB\",4,\"\u6102\u6103\u6104\u6105\u6107\u610A\u610B\u610C\u6110\",4,\"\u6116\u6117\u6118\u6119\u611B\u611C\u611D\u611E\u6121\u6122\u6125\u6128\u6129\u612A\u612C\",18,\"\u6140\",6],\n[\"9140\",\"\u6147\u6149\u614B\u614D\u614F\u6150\u6152\u6153\u6154\u6156\",6,\"\u615E\u615F\u6160\u6161\u6163\u6164\u6165\u6166\u6169\",6,\"\u6171\u6172\u6173\u6174\u6176\u6178\",18,\"\u618C\u618D\u618F\",4,\"\u6195\"],\n[\"9180\",\"\u6196\",6,\"\u619E\",8,\"\u61AA\u61AB\u61AD\",9,\"\u61B8\",5,\"\u61BF\u61C0\u61C1\u61C3\",4,\"\u61C9\u61CC\",4,\"\u61D3\u61D5\",16,\"\u61E7\",13,\"\u61F6\",8,\"\u6200\",5,\"\u6207\u6209\u6213\u6214\u6219\u621C\u621D\u621E\u6220\u6223\u6226\u6227\u6228\u6229\u622B\u622D\u622F\u6230\u6231\u6232\u6235\u6236\u6238\",4,\"\u6242\u6244\u6245\u6246\u624A\"],\n[\"9240\",\"\u624F\u6250\u6255\u6256\u6257\u6259\u625A\u625C\",6,\"\u6264\u6265\u6268\u6271\u6272\u6274\u6275\u6277\u6278\u627A\u627B\u627D\u6281\u6282\u6283\u6285\u6286\u6287\u6288\u628B\",5,\"\u6294\u6299\u629C\u629D\u629E\u62A3\u62A6\u62A7\u62A9\u62AA\u62AD\u62AE\u62AF\u62B0\u62B2\u62B3\u62B4\u62B6\u62B7\u62B8\u62BA\u62BE\u62C0\u62C1\"],\n[\"9280\",\"\u62C3\u62CB\u62CF\u62D1\u62D5\u62DD\u62DE\u62E0\u62E1\u62E4\u62EA\u62EB\u62F0\u62F2\u62F5\u62F8\u62F9\u62FA\u62FB\u6300\u6303\u6304\u6305\u6306\u630A\u630B\u630C\u630D\u630F\u6310\u6312\u6313\u6314\u6315\u6317\u6318\u6319\u631C\u6326\u6327\u6329\u632C\u632D\u632E\u6330\u6331\u6333\",5,\"\u633B\u633C\u633E\u633F\u6340\u6341\u6344\u6347\u6348\u634A\u6351\u6352\u6353\u6354\u6356\",7,\"\u6360\u6364\u6365\u6366\u6368\u636A\u636B\u636C\u636F\u6370\u6372\u6373\u6374\u6375\u6378\u6379\u637C\u637D\u637E\u637F\u6381\u6383\u6384\u6385\u6386\u638B\u638D\u6391\u6393\u6394\u6395\u6397\u6399\",6,\"\u63A1\u63A4\u63A6\u63AB\u63AF\u63B1\u63B2\u63B5\u63B6\u63B9\u63BB\u63BD\u63BF\u63C0\"],\n[\"9340\",\"\u63C1\u63C2\u63C3\u63C5\u63C7\u63C8\u63CA\u63CB\u63CC\u63D1\u63D3\u63D4\u63D5\u63D7\",6,\"\u63DF\u63E2\u63E4\",4,\"\u63EB\u63EC\u63EE\u63EF\u63F0\u63F1\u63F3\u63F5\u63F7\u63F9\u63FA\u63FB\u63FC\u63FE\u6403\u6404\u6406\",4,\"\u640D\u640E\u6411\u6412\u6415\",5,\"\u641D\u641F\u6422\u6423\u6424\"],\n[\"9380\",\"\u6425\u6427\u6428\u6429\u642B\u642E\",5,\"\u6435\",4,\"\u643B\u643C\u643E\u6440\u6442\u6443\u6449\u644B\",6,\"\u6453\u6455\u6456\u6457\u6459\",4,\"\u645F\",7,\"\u6468\u646A\u646B\u646C\u646E\",9,\"\u647B\",6,\"\u6483\u6486\u6488\",8,\"\u6493\u6494\u6497\u6498\u649A\u649B\u649C\u649D\u649F\",4,\"\u64A5\u64A6\u64A7\u64A8\u64AA\u64AB\u64AF\u64B1\u64B2\u64B3\u64B4\u64B6\u64B9\u64BB\u64BD\u64BE\u64BF\u64C1\u64C3\u64C4\u64C6\",6,\"\u64CF\u64D1\u64D3\u64D4\u64D5\u64D6\u64D9\u64DA\"],\n[\"9440\",\"\u64DB\u64DC\u64DD\u64DF\u64E0\u64E1\u64E3\u64E5\u64E7\",24,\"\u6501\",7,\"\u650A\",7,\"\u6513\",4,\"\u6519\",8],\n[\"9480\",\"\u6522\u6523\u6524\u6526\",4,\"\u652C\u652D\u6530\u6531\u6532\u6533\u6537\u653A\u653C\u653D\u6540\",4,\"\u6546\u6547\u654A\u654B\u654D\u654E\u6550\u6552\u6553\u6554\u6557\u6558\u655A\u655C\u655F\u6560\u6561\u6564\u6565\u6567\u6568\u6569\u656A\u656D\u656E\u656F\u6571\u6573\u6575\u6576\u6578\",14,\"\u6588\u6589\u658A\u658D\u658E\u658F\u6592\u6594\u6595\u6596\u6598\u659A\u659D\u659E\u65A0\u65A2\u65A3\u65A6\u65A8\u65AA\u65AC\u65AE\u65B1\",7,\"\u65BA\u65BB\u65BE\u65BF\u65C0\u65C2\u65C7\u65C8\u65C9\u65CA\u65CD\u65D0\u65D1\u65D3\u65D4\u65D5\u65D8\",7,\"\u65E1\u65E3\u65E4\u65EA\u65EB\"],\n[\"9540\",\"\u65F2\u65F3\u65F4\u65F5\u65F8\u65F9\u65FB\",4,\"\u6601\u6604\u6605\u6607\u6608\u6609\u660B\u660D\u6610\u6611\u6612\u6616\u6617\u6618\u661A\u661B\u661C\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6632\u6633\u6637\",4,\"\u663D\u663F\u6640\u6642\u6644\",6,\"\u664D\u664E\u6650\u6651\u6658\"],\n[\"9580\",\"\u6659\u665B\u665C\u665D\u665E\u6660\u6662\u6663\u6665\u6667\u6669\",4,\"\u6671\u6672\u6673\u6675\u6678\u6679\u667B\u667C\u667D\u667F\u6680\u6681\u6683\u6685\u6686\u6688\u6689\u668A\u668B\u668D\u668E\u668F\u6690\u6692\u6693\u6694\u6695\u6698\",4,\"\u669E\",8,\"\u66A9\",4,\"\u66AF\",4,\"\u66B5\u66B6\u66B7\u66B8\u66BA\u66BB\u66BC\u66BD\u66BF\",25,\"\u66DA\u66DE\",7,\"\u66E7\u66E8\u66EA\",5,\"\u66F1\u66F5\u66F6\u66F8\u66FA\u66FB\u66FD\u6701\u6702\u6703\"],\n[\"9640\",\"\u6704\u6705\u6706\u6707\u670C\u670E\u670F\u6711\u6712\u6713\u6716\u6718\u6719\u671A\u671C\u671E\u6720\",5,\"\u6727\u6729\u672E\u6730\u6732\u6733\u6736\u6737\u6738\u6739\u673B\u673C\u673E\u673F\u6741\u6744\u6745\u6747\u674A\u674B\u674D\u6752\u6754\u6755\u6757\",4,\"\u675D\u6762\u6763\u6764\u6766\u6767\u676B\u676C\u676E\u6771\u6774\u6776\"],\n[\"9680\",\"\u6778\u6779\u677A\u677B\u677D\u6780\u6782\u6783\u6785\u6786\u6788\u678A\u678C\u678D\u678E\u678F\u6791\u6792\u6793\u6794\u6796\u6799\u679B\u679F\u67A0\u67A1\u67A4\u67A6\u67A9\u67AC\u67AE\u67B1\u67B2\u67B4\u67B9\",7,\"\u67C2\u67C5\",9,\"\u67D5\u67D6\u67D7\u67DB\u67DF\u67E1\u67E3\u67E4\u67E6\u67E7\u67E8\u67EA\u67EB\u67ED\u67EE\u67F2\u67F5\",7,\"\u67FE\u6801\u6802\u6803\u6804\u6806\u680D\u6810\u6812\u6814\u6815\u6818\",4,\"\u681E\u681F\u6820\u6822\",6,\"\u682B\",6,\"\u6834\u6835\u6836\u683A\u683B\u683F\u6847\u684B\u684D\u684F\u6852\u6856\",5],\n[\"9740\",\"\u685C\u685D\u685E\u685F\u686A\u686C\",7,\"\u6875\u6878\",8,\"\u6882\u6884\u6887\",7,\"\u6890\u6891\u6892\u6894\u6895\u6896\u6898\",9,\"\u68A3\u68A4\u68A5\u68A9\u68AA\u68AB\u68AC\u68AE\u68B1\u68B2\u68B4\u68B6\u68B7\u68B8\"],\n[\"9780\",\"\u68B9\",6,\"\u68C1\u68C3\",5,\"\u68CA\u68CC\u68CE\u68CF\u68D0\u68D1\u68D3\u68D4\u68D6\u68D7\u68D9\u68DB\",4,\"\u68E1\u68E2\u68E4\",9,\"\u68EF\u68F2\u68F3\u68F4\u68F6\u68F7\u68F8\u68FB\u68FD\u68FE\u68FF\u6900\u6902\u6903\u6904\u6906\",4,\"\u690C\u690F\u6911\u6913\",11,\"\u6921\u6922\u6923\u6925\",7,\"\u692E\u692F\u6931\u6932\u6933\u6935\u6936\u6937\u6938\u693A\u693B\u693C\u693E\u6940\u6941\u6943\",16,\"\u6955\u6956\u6958\u6959\u695B\u695C\u695F\"],\n[\"9840\",\"\u6961\u6962\u6964\u6965\u6967\u6968\u6969\u696A\u696C\u696D\u696F\u6970\u6972\",4,\"\u697A\u697B\u697D\u697E\u697F\u6981\u6983\u6985\u698A\u698B\u698C\u698E\",5,\"\u6996\u6997\u6999\u699A\u699D\",9,\"\u69A9\u69AA\u69AC\u69AE\u69AF\u69B0\u69B2\u69B3\u69B5\u69B6\u69B8\u69B9\u69BA\u69BC\u69BD\"],\n[\"9880\",\"\u69BE\u69BF\u69C0\u69C2\",7,\"\u69CB\u69CD\u69CF\u69D1\u69D2\u69D3\u69D5\",5,\"\u69DC\u69DD\u69DE\u69E1\",11,\"\u69EE\u69EF\u69F0\u69F1\u69F3\",9,\"\u69FE\u6A00\",9,\"\u6A0B\",11,\"\u6A19\",5,\"\u6A20\u6A22\",5,\"\u6A29\u6A2B\u6A2C\u6A2D\u6A2E\u6A30\u6A32\u6A33\u6A34\u6A36\",6,\"\u6A3F\",4,\"\u6A45\u6A46\u6A48\",7,\"\u6A51\",6,\"\u6A5A\"],\n[\"9940\",\"\u6A5C\",4,\"\u6A62\u6A63\u6A64\u6A66\",10,\"\u6A72\",6,\"\u6A7A\u6A7B\u6A7D\u6A7E\u6A7F\u6A81\u6A82\u6A83\u6A85\",8,\"\u6A8F\u6A92\",4,\"\u6A98\",7,\"\u6AA1\",5],\n[\"9980\",\"\u6AA7\u6AA8\u6AAA\u6AAD\",114,\"\u6B25\u6B26\u6B28\",6],\n[\"9a40\",\"\u6B2F\u6B30\u6B31\u6B33\u6B34\u6B35\u6B36\u6B38\u6B3B\u6B3C\u6B3D\u6B3F\u6B40\u6B41\u6B42\u6B44\u6B45\u6B48\u6B4A\u6B4B\u6B4D\",11,\"\u6B5A\",7,\"\u6B68\u6B69\u6B6B\",13,\"\u6B7A\u6B7D\u6B7E\u6B7F\u6B80\u6B85\u6B88\"],\n[\"9a80\",\"\u6B8C\u6B8E\u6B8F\u6B90\u6B91\u6B94\u6B95\u6B97\u6B98\u6B99\u6B9C\",4,\"\u6BA2\",7,\"\u6BAB\",7,\"\u6BB6\u6BB8\",6,\"\u6BC0\u6BC3\u6BC4\u6BC6\",4,\"\u6BCC\u6BCE\u6BD0\u6BD1\u6BD8\u6BDA\u6BDC\",4,\"\u6BE2\",7,\"\u6BEC\u6BED\u6BEE\u6BF0\u6BF1\u6BF2\u6BF4\u6BF6\u6BF7\u6BF8\u6BFA\u6BFB\u6BFC\u6BFE\",6,\"\u6C08\",4,\"\u6C0E\u6C12\u6C17\u6C1C\u6C1D\u6C1E\u6C20\u6C23\u6C25\u6C2B\u6C2C\u6C2D\u6C31\u6C33\u6C36\u6C37\u6C39\u6C3A\u6C3B\u6C3C\u6C3E\u6C3F\u6C43\u6C44\u6C45\u6C48\u6C4B\",4,\"\u6C51\u6C52\u6C53\u6C56\u6C58\"],\n[\"9b40\",\"\u6C59\u6C5A\u6C62\u6C63\u6C65\u6C66\u6C67\u6C6B\",4,\"\u6C71\u6C73\u6C75\u6C77\u6C78\u6C7A\u6C7B\u6C7C\u6C7F\u6C80\u6C84\u6C87\u6C8A\u6C8B\u6C8D\u6C8E\u6C91\u6C92\u6C95\u6C96\u6C97\u6C98\u6C9A\u6C9C\u6C9D\u6C9E\u6CA0\u6CA2\u6CA8\u6CAC\u6CAF\u6CB0\u6CB4\u6CB5\u6CB6\u6CB7\u6CBA\u6CC0\u6CC1\u6CC2\u6CC3\u6CC6\u6CC7\u6CC8\u6CCB\u6CCD\u6CCE\u6CCF\u6CD1\u6CD2\u6CD8\"],\n[\"9b80\",\"\u6CD9\u6CDA\u6CDC\u6CDD\u6CDF\u6CE4\u6CE6\u6CE7\u6CE9\u6CEC\u6CED\u6CF2\u6CF4\u6CF9\u6CFF\u6D00\u6D02\u6D03\u6D05\u6D06\u6D08\u6D09\u6D0A\u6D0D\u6D0F\u6D10\u6D11\u6D13\u6D14\u6D15\u6D16\u6D18\u6D1C\u6D1D\u6D1F\",5,\"\u6D26\u6D28\u6D29\u6D2C\u6D2D\u6D2F\u6D30\u6D34\u6D36\u6D37\u6D38\u6D3A\u6D3F\u6D40\u6D42\u6D44\u6D49\u6D4C\u6D50\u6D55\u6D56\u6D57\u6D58\u6D5B\u6D5D\u6D5F\u6D61\u6D62\u6D64\u6D65\u6D67\u6D68\u6D6B\u6D6C\u6D6D\u6D70\u6D71\u6D72\u6D73\u6D75\u6D76\u6D79\u6D7A\u6D7B\u6D7D\",4,\"\u6D83\u6D84\u6D86\u6D87\u6D8A\u6D8B\u6D8D\u6D8F\u6D90\u6D92\u6D96\",4,\"\u6D9C\u6DA2\u6DA5\u6DAC\u6DAD\u6DB0\u6DB1\u6DB3\u6DB4\u6DB6\u6DB7\u6DB9\",5,\"\u6DC1\u6DC2\u6DC3\u6DC8\u6DC9\u6DCA\"],\n[\"9c40\",\"\u6DCD\u6DCE\u6DCF\u6DD0\u6DD2\u6DD3\u6DD4\u6DD5\u6DD7\u6DDA\u6DDB\u6DDC\u6DDF\u6DE2\u6DE3\u6DE5\u6DE7\u6DE8\u6DE9\u6DEA\u6DED\u6DEF\u6DF0\u6DF2\u6DF4\u6DF5\u6DF6\u6DF8\u6DFA\u6DFD\",7,\"\u6E06\u6E07\u6E08\u6E09\u6E0B\u6E0F\u6E12\u6E13\u6E15\u6E18\u6E19\u6E1B\u6E1C\u6E1E\u6E1F\u6E22\u6E26\u6E27\u6E28\u6E2A\u6E2C\u6E2E\u6E30\u6E31\u6E33\u6E35\"],\n[\"9c80\",\"\u6E36\u6E37\u6E39\u6E3B\",7,\"\u6E45\",7,\"\u6E4F\u6E50\u6E51\u6E52\u6E55\u6E57\u6E59\u6E5A\u6E5C\u6E5D\u6E5E\u6E60\",10,\"\u6E6C\u6E6D\u6E6F\",14,\"\u6E80\u6E81\u6E82\u6E84\u6E87\u6E88\u6E8A\",4,\"\u6E91\",6,\"\u6E99\u6E9A\u6E9B\u6E9D\u6E9E\u6EA0\u6EA1\u6EA3\u6EA4\u6EA6\u6EA8\u6EA9\u6EAB\u6EAC\u6EAD\u6EAE\u6EB0\u6EB3\u6EB5\u6EB8\u6EB9\u6EBC\u6EBE\u6EBF\u6EC0\u6EC3\u6EC4\u6EC5\u6EC6\u6EC8\u6EC9\u6ECA\u6ECC\u6ECD\u6ECE\u6ED0\u6ED2\u6ED6\u6ED8\u6ED9\u6EDB\u6EDC\u6EDD\u6EE3\u6EE7\u6EEA\",5],\n[\"9d40\",\"\u6EF0\u6EF1\u6EF2\u6EF3\u6EF5\u6EF6\u6EF7\u6EF8\u6EFA\",7,\"\u6F03\u6F04\u6F05\u6F07\u6F08\u6F0A\",4,\"\u6F10\u6F11\u6F12\u6F16\",9,\"\u6F21\u6F22\u6F23\u6F25\u6F26\u6F27\u6F28\u6F2C\u6F2E\u6F30\u6F32\u6F34\u6F35\u6F37\",6,\"\u6F3F\u6F40\u6F41\u6F42\"],\n[\"9d80\",\"\u6F43\u6F44\u6F45\u6F48\u6F49\u6F4A\u6F4C\u6F4E\",9,\"\u6F59\u6F5A\u6F5B\u6F5D\u6F5F\u6F60\u6F61\u6F63\u6F64\u6F65\u6F67\",5,\"\u6F6F\u6F70\u6F71\u6F73\u6F75\u6F76\u6F77\u6F79\u6F7B\u6F7D\",6,\"\u6F85\u6F86\u6F87\u6F8A\u6F8B\u6F8F\",12,\"\u6F9D\u6F9E\u6F9F\u6FA0\u6FA2\",4,\"\u6FA8\",10,\"\u6FB4\u6FB5\u6FB7\u6FB8\u6FBA\",5,\"\u6FC1\u6FC3\",5,\"\u6FCA\",6,\"\u6FD3\",10,\"\u6FDF\u6FE2\u6FE3\u6FE4\u6FE5\"],\n[\"9e40\",\"\u6FE6\",7,\"\u6FF0\",32,\"\u7012\",7,\"\u701C\",6,\"\u7024\",6],\n[\"9e80\",\"\u702B\",9,\"\u7036\u7037\u7038\u703A\",17,\"\u704D\u704E\u7050\",13,\"\u705F\",11,\"\u706E\u7071\u7072\u7073\u7074\u7077\u7079\u707A\u707B\u707D\u7081\u7082\u7083\u7084\u7086\u7087\u7088\u708B\u708C\u708D\u708F\u7090\u7091\u7093\u7097\u7098\u709A\u709B\u709E\",12,\"\u70B0\u70B2\u70B4\u70B5\u70B6\u70BA\u70BE\u70BF\u70C4\u70C5\u70C6\u70C7\u70C9\u70CB\",12,\"\u70DA\"],\n[\"9f40\",\"\u70DC\u70DD\u70DE\u70E0\u70E1\u70E2\u70E3\u70E5\u70EA\u70EE\u70F0\",6,\"\u70F8\u70FA\u70FB\u70FC\u70FE\",10,\"\u710B\",4,\"\u7111\u7112\u7114\u7117\u711B\",10,\"\u7127\",7,\"\u7132\u7133\u7134\"],\n[\"9f80\",\"\u7135\u7137\",13,\"\u7146\u7147\u7148\u7149\u714B\u714D\u714F\",12,\"\u715D\u715F\",4,\"\u7165\u7169\",4,\"\u716F\u7170\u7171\u7174\u7175\u7176\u7177\u7179\u717B\u717C\u717E\",5,\"\u7185\",4,\"\u718B\u718C\u718D\u718E\u7190\u7191\u7192\u7193\u7195\u7196\u7197\u719A\",4,\"\u71A1\",6,\"\u71A9\u71AA\u71AB\u71AD\",5,\"\u71B4\u71B6\u71B7\u71B8\u71BA\",8,\"\u71C4\",9,\"\u71CF\",4],\n[\"a040\",\"\u71D6\",9,\"\u71E1\u71E2\u71E3\u71E4\u71E6\u71E8\",5,\"\u71EF\",9,\"\u71FA\",11,\"\u7207\",19],\n[\"a080\",\"\u721B\u721C\u721E\",9,\"\u7229\u722B\u722D\u722E\u722F\u7232\u7233\u7234\u723A\u723C\u723E\u7240\",6,\"\u7249\u724A\u724B\u724E\u724F\u7250\u7251\u7253\u7254\u7255\u7257\u7258\u725A\u725C\u725E\u7260\u7263\u7264\u7265\u7268\u726A\u726B\u726C\u726D\u7270\u7271\u7273\u7274\u7276\u7277\u7278\u727B\u727C\u727D\u7282\u7283\u7285\",4,\"\u728C\u728E\u7290\u7291\u7293\",11,\"\u72A0\",11,\"\u72AE\u72B1\u72B2\u72B3\u72B5\u72BA\",6,\"\u72C5\u72C6\u72C7\u72C9\u72CA\u72CB\u72CC\u72CF\u72D1\u72D3\u72D4\u72D5\u72D6\u72D8\u72DA\u72DB\"],\n[\"a1a1\",\"\u3000\u3001\u3002\u00B7\u02C9\u02C7\u00A8\u3003\u3005\u2014\uFF5E\u2016\u2026\u2018\u2019\u201C\u201D\u3014\u3015\u3008\",7,\"\u3016\u3017\u3010\u3011\u00B1\u00D7\u00F7\u2236\u2227\u2228\u2211\u220F\u222A\u2229\u2208\u2237\u221A\u22A5\u2225\u2220\u2312\u2299\u222B\u222E\u2261\u224C\u2248\u223D\u221D\u2260\u226E\u226F\u2264\u2265\u221E\u2235\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFF04\u00A4\uFFE0\uFFE1\u2030\u00A7\u2116\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u203B\u2192\u2190\u2191\u2193\u3013\"],\n[\"a2a1\",\"\u2170\",9],\n[\"a2b1\",\"\u2488\",19,\"\u2474\",19,\"\u2460\",9],\n[\"a2e5\",\"\u3220\",9],\n[\"a2f1\",\"\u2160\",11],\n[\"a3a1\",\"\uFF01\uFF02\uFF03\uFFE5\uFF05\",88,\"\uFFE3\"],\n[\"a4a1\",\"\u3041\",82],\n[\"a5a1\",\"\u30A1\",85],\n[\"a6a1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a6c1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a6e0\",\"\uFE35\uFE36\uFE39\uFE3A\uFE3F\uFE40\uFE3D\uFE3E\uFE41\uFE42\uFE43\uFE44\"],\n[\"a6ee\",\"\uFE3B\uFE3C\uFE37\uFE38\uFE31\"],\n[\"a6f4\",\"\uFE33\uFE34\"],\n[\"a7a1\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"a7d1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"a840\",\"\u02CA\u02CB\u02D9\u2013\u2015\u2025\u2035\u2105\u2109\u2196\u2197\u2198\u2199\u2215\u221F\u2223\u2252\u2266\u2267\u22BF\u2550\",35,\"\u2581\",6],\n[\"a880\",\"\u2588\",7,\"\u2593\u2594\u2595\u25BC\u25BD\u25E2\u25E3\u25E4\u25E5\u2609\u2295\u3012\u301D\u301E\"],\n[\"a8a1\",\"\u0101\u00E1\u01CE\u00E0\u0113\u00E9\u011B\u00E8\u012B\u00ED\u01D0\u00EC\u014D\u00F3\u01D2\u00F2\u016B\u00FA\u01D4\u00F9\u01D6\u01D8\u01DA\u01DC\u00FC\u00EA\u0251\"],\n[\"a8bd\",\"\u0144\u0148\"],\n[\"a8c0\",\"\u0261\"],\n[\"a8c5\",\"\u3105\",36],\n[\"a940\",\"\u3021\",8,\"\u32A3\u338E\u338F\u339C\u339D\u339E\u33A1\u33C4\u33CE\u33D1\u33D2\u33D5\uFE30\uFFE2\uFFE4\"],\n[\"a959\",\"\u2121\u3231\"],\n[\"a95c\",\"\u2010\"],\n[\"a960\",\"\u30FC\u309B\u309C\u30FD\u30FE\u3006\u309D\u309E\uFE49\",9,\"\uFE54\uFE55\uFE56\uFE57\uFE59\",8],\n[\"a980\",\"\uFE62\",4,\"\uFE68\uFE69\uFE6A\uFE6B\"],\n[\"a996\",\"\u3007\"],\n[\"a9a4\",\"\u2500\",75],\n[\"aa40\",\"\u72DC\u72DD\u72DF\u72E2\",5,\"\u72EA\u72EB\u72F5\u72F6\u72F9\u72FD\u72FE\u72FF\u7300\u7302\u7304\",5,\"\u730B\u730C\u730D\u730F\u7310\u7311\u7312\u7314\u7318\u7319\u731A\u731F\u7320\u7323\u7324\u7326\u7327\u7328\u732D\u732F\u7330\u7332\u7333\u7335\u7336\u733A\u733B\u733C\u733D\u7340\",8],\n[\"aa80\",\"\u7349\u734A\u734B\u734C\u734E\u734F\u7351\u7353\u7354\u7355\u7356\u7358\",7,\"\u7361\",10,\"\u736E\u7370\u7371\"],\n[\"ab40\",\"\u7372\",11,\"\u737F\",4,\"\u7385\u7386\u7388\u738A\u738C\u738D\u738F\u7390\u7392\u7393\u7394\u7395\u7397\u7398\u7399\u739A\u739C\u739D\u739E\u73A0\u73A1\u73A3\",5,\"\u73AA\u73AC\u73AD\u73B1\u73B4\u73B5\u73B6\u73B8\u73B9\u73BC\u73BD\u73BE\u73BF\u73C1\u73C3\",4],\n[\"ab80\",\"\u73CB\u73CC\u73CE\u73D2\",6,\"\u73DA\u73DB\u73DC\u73DD\u73DF\u73E1\u73E2\u73E3\u73E4\u73E6\u73E8\u73EA\u73EB\u73EC\u73EE\u73EF\u73F0\u73F1\u73F3\",4],\n[\"ac40\",\"\u73F8\",10,\"\u7404\u7407\u7408\u740B\u740C\u740D\u740E\u7411\",8,\"\u741C\",5,\"\u7423\u7424\u7427\u7429\u742B\u742D\u742F\u7431\u7432\u7437\",4,\"\u743D\u743E\u743F\u7440\u7442\",11],\n[\"ac80\",\"\u744E\",6,\"\u7456\u7458\u745D\u7460\",12,\"\u746E\u746F\u7471\",4,\"\u7478\u7479\u747A\"],\n[\"ad40\",\"\u747B\u747C\u747D\u747F\u7482\u7484\u7485\u7486\u7488\u7489\u748A\u748C\u748D\u748F\u7491\",10,\"\u749D\u749F\",7,\"\u74AA\",15,\"\u74BB\",12],\n[\"ad80\",\"\u74C8\",9,\"\u74D3\",8,\"\u74DD\u74DF\u74E1\u74E5\u74E7\",6,\"\u74F0\u74F1\u74F2\"],\n[\"ae40\",\"\u74F3\u74F5\u74F8\",6,\"\u7500\u7501\u7502\u7503\u7505\",7,\"\u750E\u7510\u7512\u7514\u7515\u7516\u7517\u751B\u751D\u751E\u7520\",4,\"\u7526\u7527\u752A\u752E\u7534\u7536\u7539\u753C\u753D\u753F\u7541\u7542\u7543\u7544\u7546\u7547\u7549\u754A\u754D\u7550\u7551\u7552\u7553\u7555\u7556\u7557\u7558\"],\n[\"ae80\",\"\u755D\",7,\"\u7567\u7568\u7569\u756B\",6,\"\u7573\u7575\u7576\u7577\u757A\",4,\"\u7580\u7581\u7582\u7584\u7585\u7587\"],\n[\"af40\",\"\u7588\u7589\u758A\u758C\u758D\u758E\u7590\u7593\u7595\u7598\u759B\u759C\u759E\u75A2\u75A6\",4,\"\u75AD\u75B6\u75B7\u75BA\u75BB\u75BF\u75C0\u75C1\u75C6\u75CB\u75CC\u75CE\u75CF\u75D0\u75D1\u75D3\u75D7\u75D9\u75DA\u75DC\u75DD\u75DF\u75E0\u75E1\u75E5\u75E9\u75EC\u75ED\u75EE\u75EF\u75F2\u75F3\u75F5\u75F6\u75F7\u75F8\u75FA\u75FB\u75FD\u75FE\u7602\u7604\u7606\u7607\"],\n[\"af80\",\"\u7608\u7609\u760B\u760D\u760E\u760F\u7611\u7612\u7613\u7614\u7616\u761A\u761C\u761D\u761E\u7621\u7623\u7627\u7628\u762C\u762E\u762F\u7631\u7632\u7636\u7637\u7639\u763A\u763B\u763D\u7641\u7642\u7644\"],\n[\"b040\",\"\u7645\",6,\"\u764E\",5,\"\u7655\u7657\",4,\"\u765D\u765F\u7660\u7661\u7662\u7664\",6,\"\u766C\u766D\u766E\u7670\",7,\"\u7679\u767A\u767C\u767F\u7680\u7681\u7683\u7685\u7689\u768A\u768C\u768D\u768F\u7690\u7692\u7694\u7695\u7697\u7698\u769A\u769B\"],\n[\"b080\",\"\u769C\",7,\"\u76A5\",8,\"\u76AF\u76B0\u76B3\u76B5\",9,\"\u76C0\u76C1\u76C3\u554A\u963F\u57C3\u6328\u54CE\u5509\u54C0\u7691\u764C\u853C\u77EE\u827E\u788D\u7231\u9698\u978D\u6C28\u5B89\u4FFA\u6309\u6697\u5CB8\u80FA\u6848\u80AE\u6602\u76CE\u51F9\u6556\u71AC\u7FF1\u8884\u50B2\u5965\u61CA\u6FB3\u82AD\u634C\u6252\u53ED\u5427\u7B06\u516B\u75A4\u5DF4\u62D4\u8DCB\u9776\u628A\u8019\u575D\u9738\u7F62\u7238\u767D\u67CF\u767E\u6446\u4F70\u8D25\u62DC\u7A17\u6591\u73ED\u642C\u6273\u822C\u9881\u677F\u7248\u626E\u62CC\u4F34\u74E3\u534A\u529E\u7ECA\u90A6\u5E2E\u6886\u699C\u8180\u7ED1\u68D2\u78C5\u868C\u9551\u508D\u8C24\u82DE\u80DE\u5305\u8912\u5265\"],\n[\"b140\",\"\u76C4\u76C7\u76C9\u76CB\u76CC\u76D3\u76D5\u76D9\u76DA\u76DC\u76DD\u76DE\u76E0\",4,\"\u76E6\",7,\"\u76F0\u76F3\u76F5\u76F6\u76F7\u76FA\u76FB\u76FD\u76FF\u7700\u7702\u7703\u7705\u7706\u770A\u770C\u770E\",10,\"\u771B\u771C\u771D\u771E\u7721\u7723\u7724\u7725\u7727\u772A\u772B\"],\n[\"b180\",\"\u772C\u772E\u7730\",4,\"\u7739\u773B\u773D\u773E\u773F\u7742\u7744\u7745\u7746\u7748\",7,\"\u7752\",7,\"\u775C\u8584\u96F9\u4FDD\u5821\u9971\u5B9D\u62B1\u62A5\u66B4\u8C79\u9C8D\u7206\u676F\u7891\u60B2\u5351\u5317\u8F88\u80CC\u8D1D\u94A1\u500D\u72C8\u5907\u60EB\u7119\u88AB\u5954\u82EF\u672C\u7B28\u5D29\u7EF7\u752D\u6CF5\u8E66\u8FF8\u903C\u9F3B\u6BD4\u9119\u7B14\u5F7C\u78A7\u84D6\u853D\u6BD5\u6BD9\u6BD6\u5E01\u5E87\u75F9\u95ED\u655D\u5F0A\u5FC5\u8F9F\u58C1\u81C2\u907F\u965B\u97AD\u8FB9\u7F16\u8D2C\u6241\u4FBF\u53D8\u535E\u8FA8\u8FA9\u8FAB\u904D\u6807\u5F6A\u8198\u8868\u9CD6\u618B\u522B\u762A\u5F6C\u658C\u6FD2\u6EE8\u5BBE\u6448\u5175\u51B0\u67C4\u4E19\u79C9\u997C\u70B3\"],\n[\"b240\",\"\u775D\u775E\u775F\u7760\u7764\u7767\u7769\u776A\u776D\",11,\"\u777A\u777B\u777C\u7781\u7782\u7783\u7786\",5,\"\u778F\u7790\u7793\",11,\"\u77A1\u77A3\u77A4\u77A6\u77A8\u77AB\u77AD\u77AE\u77AF\u77B1\u77B2\u77B4\u77B6\",4],\n[\"b280\",\"\u77BC\u77BE\u77C0\",12,\"\u77CE\",8,\"\u77D8\u77D9\u77DA\u77DD\",4,\"\u77E4\u75C5\u5E76\u73BB\u83E0\u64AD\u62E8\u94B5\u6CE2\u535A\u52C3\u640F\u94C2\u7B94\u4F2F\u5E1B\u8236\u8116\u818A\u6E24\u6CCA\u9A73\u6355\u535C\u54FA\u8865\u57E0\u4E0D\u5E03\u6B65\u7C3F\u90E8\u6016\u64E6\u731C\u88C1\u6750\u624D\u8D22\u776C\u8E29\u91C7\u5F69\u83DC\u8521\u9910\u53C2\u8695\u6B8B\u60ED\u60E8\u707F\u82CD\u8231\u4ED3\u6CA7\u85CF\u64CD\u7CD9\u69FD\u66F9\u8349\u5395\u7B56\u4FA7\u518C\u6D4B\u5C42\u8E6D\u63D2\u53C9\u832C\u8336\u67E5\u78B4\u643D\u5BDF\u5C94\u5DEE\u8BE7\u62C6\u67F4\u8C7A\u6400\u63BA\u8749\u998B\u8C17\u7F20\u94F2\u4EA7\u9610\u98A4\u660C\u7316\"],\n[\"b340\",\"\u77E6\u77E8\u77EA\u77EF\u77F0\u77F1\u77F2\u77F4\u77F5\u77F7\u77F9\u77FA\u77FB\u77FC\u7803\",5,\"\u780A\u780B\u780E\u780F\u7810\u7813\u7815\u7819\u781B\u781E\u7820\u7821\u7822\u7824\u7828\u782A\u782B\u782E\u782F\u7831\u7832\u7833\u7835\u7836\u783D\u783F\u7841\u7842\u7843\u7844\u7846\u7848\u7849\u784A\u784B\u784D\u784F\u7851\u7853\u7854\u7858\u7859\u785A\"],\n[\"b380\",\"\u785B\u785C\u785E\",11,\"\u786F\",7,\"\u7878\u7879\u787A\u787B\u787D\",6,\"\u573A\u5C1D\u5E38\u957F\u507F\u80A0\u5382\u655E\u7545\u5531\u5021\u8D85\u6284\u949E\u671D\u5632\u6F6E\u5DE2\u5435\u7092\u8F66\u626F\u64A4\u63A3\u5F7B\u6F88\u90F4\u81E3\u8FB0\u5C18\u6668\u5FF1\u6C89\u9648\u8D81\u886C\u6491\u79F0\u57CE\u6A59\u6210\u5448\u4E58\u7A0B\u60E9\u6F84\u8BDA\u627F\u901E\u9A8B\u79E4\u5403\u75F4\u6301\u5319\u6C60\u8FDF\u5F1B\u9A70\u803B\u9F7F\u4F88\u5C3A\u8D64\u7FC5\u65A5\u70BD\u5145\u51B2\u866B\u5D07\u5BA0\u62BD\u916C\u7574\u8E0C\u7A20\u6101\u7B79\u4EC7\u7EF8\u7785\u4E11\u81ED\u521D\u51FA\u6A71\u53A8\u8E87\u9504\u96CF\u6EC1\u9664\u695A\"],\n[\"b440\",\"\u7884\u7885\u7886\u7888\u788A\u788B\u788F\u7890\u7892\u7894\u7895\u7896\u7899\u789D\u789E\u78A0\u78A2\u78A4\u78A6\u78A8\",7,\"\u78B5\u78B6\u78B7\u78B8\u78BA\u78BB\u78BC\u78BD\u78BF\u78C0\u78C2\u78C3\u78C4\u78C6\u78C7\u78C8\u78CC\u78CD\u78CE\u78CF\u78D1\u78D2\u78D3\u78D6\u78D7\u78D8\u78DA\",9],\n[\"b480\",\"\u78E4\u78E5\u78E6\u78E7\u78E9\u78EA\u78EB\u78ED\",4,\"\u78F3\u78F5\u78F6\u78F8\u78F9\u78FB\",5,\"\u7902\u7903\u7904\u7906\",6,\"\u7840\u50A8\u77D7\u6410\u89E6\u5904\u63E3\u5DDD\u7A7F\u693D\u4F20\u8239\u5598\u4E32\u75AE\u7A97\u5E62\u5E8A\u95EF\u521B\u5439\u708A\u6376\u9524\u5782\u6625\u693F\u9187\u5507\u6DF3\u7EAF\u8822\u6233\u7EF0\u75B5\u8328\u78C1\u96CC\u8F9E\u6148\u74F7\u8BCD\u6B64\u523A\u8D50\u6B21\u806A\u8471\u56F1\u5306\u4ECE\u4E1B\u51D1\u7C97\u918B\u7C07\u4FC3\u8E7F\u7BE1\u7A9C\u6467\u5D14\u50AC\u8106\u7601\u7CB9\u6DEC\u7FE0\u6751\u5B58\u5BF8\u78CB\u64AE\u6413\u63AA\u632B\u9519\u642D\u8FBE\u7B54\u7629\u6253\u5927\u5446\u6B79\u50A3\u6234\u5E26\u6B86\u4EE3\u8D37\u888B\u5F85\u902E\"],\n[\"b540\",\"\u790D\",5,\"\u7914\",9,\"\u791F\",4,\"\u7925\",14,\"\u7935\",4,\"\u793D\u793F\u7942\u7943\u7944\u7945\u7947\u794A\",8,\"\u7954\u7955\u7958\u7959\u7961\u7963\"],\n[\"b580\",\"\u7964\u7966\u7969\u796A\u796B\u796C\u796E\u7970\",6,\"\u7979\u797B\",4,\"\u7982\u7983\u7986\u7987\u7988\u7989\u798B\u798C\u798D\u798E\u7990\u7991\u7992\u6020\u803D\u62C5\u4E39\u5355\u90F8\u63B8\u80C6\u65E6\u6C2E\u4F46\u60EE\u6DE1\u8BDE\u5F39\u86CB\u5F53\u6321\u515A\u8361\u6863\u5200\u6363\u8E48\u5012\u5C9B\u7977\u5BFC\u5230\u7A3B\u60BC\u9053\u76D7\u5FB7\u5F97\u7684\u8E6C\u706F\u767B\u7B49\u77AA\u51F3\u9093\u5824\u4F4E\u6EF4\u8FEA\u654C\u7B1B\u72C4\u6DA4\u7FDF\u5AE1\u62B5\u5E95\u5730\u8482\u7B2C\u5E1D\u5F1F\u9012\u7F14\u98A0\u6382\u6EC7\u7898\u70B9\u5178\u975B\u57AB\u7535\u4F43\u7538\u5E97\u60E6\u5960\u6DC0\u6BBF\u7889\u53FC\u96D5\u51CB\u5201\u6389\u540A\u9493\u8C03\u8DCC\u7239\u789F\u8776\u8FED\u8C0D\u53E0\"],\n[\"b640\",\"\u7993\",6,\"\u799B\",11,\"\u79A8\",10,\"\u79B4\",4,\"\u79BC\u79BF\u79C2\u79C4\u79C5\u79C7\u79C8\u79CA\u79CC\u79CE\u79CF\u79D0\u79D3\u79D4\u79D6\u79D7\u79D9\",5,\"\u79E0\u79E1\u79E2\u79E5\u79E8\u79EA\"],\n[\"b680\",\"\u79EC\u79EE\u79F1\",6,\"\u79F9\u79FA\u79FC\u79FE\u79FF\u7A01\u7A04\u7A05\u7A07\u7A08\u7A09\u7A0A\u7A0C\u7A0F\",4,\"\u7A15\u7A16\u7A18\u7A19\u7A1B\u7A1C\u4E01\u76EF\u53EE\u9489\u9876\u9F0E\u952D\u5B9A\u8BA2\u4E22\u4E1C\u51AC\u8463\u61C2\u52A8\u680B\u4F97\u606B\u51BB\u6D1E\u515C\u6296\u6597\u9661\u8C46\u9017\u75D8\u90FD\u7763\u6BD2\u728A\u72EC\u8BFB\u5835\u7779\u8D4C\u675C\u9540\u809A\u5EA6\u6E21\u5992\u7AEF\u77ED\u953B\u6BB5\u65AD\u7F0E\u5806\u5151\u961F\u5BF9\u58A9\u5428\u8E72\u6566\u987F\u56E4\u949D\u76FE\u9041\u6387\u54C6\u591A\u593A\u579B\u8EB2\u6735\u8DFA\u8235\u5241\u60F0\u5815\u86FE\u5CE8\u9E45\u4FC4\u989D\u8BB9\u5A25\u6076\u5384\u627C\u904F\u9102\u997F\u6069\u800C\u513F\u8033\u5C14\u9975\u6D31\u4E8C\"],\n[\"b740\",\"\u7A1D\u7A1F\u7A21\u7A22\u7A24\",14,\"\u7A34\u7A35\u7A36\u7A38\u7A3A\u7A3E\u7A40\",5,\"\u7A47\",9,\"\u7A52\",4,\"\u7A58\",16],\n[\"b780\",\"\u7A69\",6,\"\u7A71\u7A72\u7A73\u7A75\u7A7B\u7A7C\u7A7D\u7A7E\u7A82\u7A85\u7A87\u7A89\u7A8A\u7A8B\u7A8C\u7A8E\u7A8F\u7A90\u7A93\u7A94\u7A99\u7A9A\u7A9B\u7A9E\u7AA1\u7AA2\u8D30\u53D1\u7F5A\u7B4F\u4F10\u4E4F\u9600\u6CD5\u73D0\u85E9\u5E06\u756A\u7FFB\u6A0A\u77FE\u9492\u7E41\u51E1\u70E6\u53CD\u8FD4\u8303\u8D29\u72AF\u996D\u6CDB\u574A\u82B3\u65B9\u80AA\u623F\u9632\u59A8\u4EFF\u8BBF\u7EBA\u653E\u83F2\u975E\u5561\u98DE\u80A5\u532A\u8BFD\u5420\u80BA\u5E9F\u6CB8\u8D39\u82AC\u915A\u5429\u6C1B\u5206\u7EB7\u575F\u711A\u6C7E\u7C89\u594B\u4EFD\u5FFF\u6124\u7CAA\u4E30\u5C01\u67AB\u8702\u5CF0\u950B\u98CE\u75AF\u70FD\u9022\u51AF\u7F1D\u8BBD\u5949\u51E4\u4F5B\u5426\u592B\u6577\u80A4\u5B75\u6276\u62C2\u8F90\u5E45\u6C1F\u7B26\u4F0F\u4FD8\u670D\"],\n[\"b840\",\"\u7AA3\u7AA4\u7AA7\u7AA9\u7AAA\u7AAB\u7AAE\",4,\"\u7AB4\",10,\"\u7AC0\",10,\"\u7ACC\",9,\"\u7AD7\u7AD8\u7ADA\u7ADB\u7ADC\u7ADD\u7AE1\u7AE2\u7AE4\u7AE7\",5,\"\u7AEE\u7AF0\u7AF1\u7AF2\u7AF3\"],\n[\"b880\",\"\u7AF4\",4,\"\u7AFB\u7AFC\u7AFE\u7B00\u7B01\u7B02\u7B05\u7B07\u7B09\u7B0C\u7B0D\u7B0E\u7B10\u7B12\u7B13\u7B16\u7B17\u7B18\u7B1A\u7B1C\u7B1D\u7B1F\u7B21\u7B22\u7B23\u7B27\u7B29\u7B2D\u6D6E\u6DAA\u798F\u88B1\u5F17\u752B\u629A\u8F85\u4FEF\u91DC\u65A7\u812F\u8151\u5E9C\u8150\u8D74\u526F\u8986\u8D4B\u590D\u5085\u4ED8\u961C\u7236\u8179\u8D1F\u5BCC\u8BA3\u9644\u5987\u7F1A\u5490\u5676\u560E\u8BE5\u6539\u6982\u9499\u76D6\u6E89\u5E72\u7518\u6746\u67D1\u7AFF\u809D\u8D76\u611F\u79C6\u6562\u8D63\u5188\u521A\u94A2\u7F38\u809B\u7EB2\u5C97\u6E2F\u6760\u7BD9\u768B\u9AD8\u818F\u7F94\u7CD5\u641E\u9550\u7A3F\u544A\u54E5\u6B4C\u6401\u6208\u9E3D\u80F3\u7599\u5272\u9769\u845B\u683C\u86E4\u9601\u9694\u94EC\u4E2A\u5404\u7ED9\u6839\u8DDF\u8015\u66F4\u5E9A\u7FB9\"],\n[\"b940\",\"\u7B2F\u7B30\u7B32\u7B34\u7B35\u7B36\u7B37\u7B39\u7B3B\u7B3D\u7B3F\",5,\"\u7B46\u7B48\u7B4A\u7B4D\u7B4E\u7B53\u7B55\u7B57\u7B59\u7B5C\u7B5E\u7B5F\u7B61\u7B63\",10,\"\u7B6F\u7B70\u7B73\u7B74\u7B76\u7B78\u7B7A\u7B7C\u7B7D\u7B7F\u7B81\u7B82\u7B83\u7B84\u7B86\",6,\"\u7B8E\u7B8F\"],\n[\"b980\",\"\u7B91\u7B92\u7B93\u7B96\u7B98\u7B99\u7B9A\u7B9B\u7B9E\u7B9F\u7BA0\u7BA3\u7BA4\u7BA5\u7BAE\u7BAF\u7BB0\u7BB2\u7BB3\u7BB5\u7BB6\u7BB7\u7BB9\",7,\"\u7BC2\u7BC3\u7BC4\u57C2\u803F\u6897\u5DE5\u653B\u529F\u606D\u9F9A\u4F9B\u8EAC\u516C\u5BAB\u5F13\u5DE9\u6C5E\u62F1\u8D21\u5171\u94A9\u52FE\u6C9F\u82DF\u72D7\u57A2\u6784\u8D2D\u591F\u8F9C\u83C7\u5495\u7B8D\u4F30\u6CBD\u5B64\u59D1\u9F13\u53E4\u86CA\u9AA8\u8C37\u80A1\u6545\u987E\u56FA\u96C7\u522E\u74DC\u5250\u5BE1\u6302\u8902\u4E56\u62D0\u602A\u68FA\u5173\u5B98\u51A0\u89C2\u7BA1\u9986\u7F50\u60EF\u704C\u8D2F\u5149\u5E7F\u901B\u7470\u89C4\u572D\u7845\u5F52\u9F9F\u95FA\u8F68\u9B3C\u8BE1\u7678\u6842\u67DC\u8DEA\u8D35\u523D\u8F8A\u6EDA\u68CD\u9505\u90ED\u56FD\u679C\u88F9\u8FC7\u54C8\"],\n[\"ba40\",\"\u7BC5\u7BC8\u7BC9\u7BCA\u7BCB\u7BCD\u7BCE\u7BCF\u7BD0\u7BD2\u7BD4\",4,\"\u7BDB\u7BDC\u7BDE\u7BDF\u7BE0\u7BE2\u7BE3\u7BE4\u7BE7\u7BE8\u7BE9\u7BEB\u7BEC\u7BED\u7BEF\u7BF0\u7BF2\",4,\"\u7BF8\u7BF9\u7BFA\u7BFB\u7BFD\u7BFF\",7,\"\u7C08\u7C09\u7C0A\u7C0D\u7C0E\u7C10\",5,\"\u7C17\u7C18\u7C19\"],\n[\"ba80\",\"\u7C1A\",4,\"\u7C20\",5,\"\u7C28\u7C29\u7C2B\",12,\"\u7C39\",5,\"\u7C42\u9AB8\u5B69\u6D77\u6C26\u4EA5\u5BB3\u9A87\u9163\u61A8\u90AF\u97E9\u542B\u6DB5\u5BD2\u51FD\u558A\u7F55\u7FF0\u64BC\u634D\u65F1\u61BE\u608D\u710A\u6C57\u6C49\u592F\u676D\u822A\u58D5\u568E\u8C6A\u6BEB\u90DD\u597D\u8017\u53F7\u6D69\u5475\u559D\u8377\u83CF\u6838\u79BE\u548C\u4F55\u5408\u76D2\u8C89\u9602\u6CB3\u6DB8\u8D6B\u8910\u9E64\u8D3A\u563F\u9ED1\u75D5\u5F88\u72E0\u6068\u54FC\u4EA8\u6A2A\u8861\u6052\u8F70\u54C4\u70D8\u8679\u9E3F\u6D2A\u5B8F\u5F18\u7EA2\u5589\u4FAF\u7334\u543C\u539A\u5019\u540E\u547C\u4E4E\u5FFD\u745A\u58F6\u846B\u80E1\u8774\u72D0\u7CCA\u6E56\"],\n[\"bb40\",\"\u7C43\",9,\"\u7C4E\",36,\"\u7C75\",5,\"\u7C7E\",9],\n[\"bb80\",\"\u7C88\u7C8A\",6,\"\u7C93\u7C94\u7C96\u7C99\u7C9A\u7C9B\u7CA0\u7CA1\u7CA3\u7CA6\u7CA7\u7CA8\u7CA9\u7CAB\u7CAC\u7CAD\u7CAF\u7CB0\u7CB4\",4,\"\u7CBA\u7CBB\u5F27\u864E\u552C\u62A4\u4E92\u6CAA\u6237\u82B1\u54D7\u534E\u733E\u6ED1\u753B\u5212\u5316\u8BDD\u69D0\u5F8A\u6000\u6DEE\u574F\u6B22\u73AF\u6853\u8FD8\u7F13\u6362\u60A3\u5524\u75EA\u8C62\u7115\u6DA3\u5BA6\u5E7B\u8352\u614C\u9EC4\u78FA\u8757\u7C27\u7687\u51F0\u60F6\u714C\u6643\u5E4C\u604D\u8C0E\u7070\u6325\u8F89\u5FBD\u6062\u86D4\u56DE\u6BC1\u6094\u6167\u5349\u60E0\u6666\u8D3F\u79FD\u4F1A\u70E9\u6C47\u8BB3\u8BF2\u7ED8\u8364\u660F\u5A5A\u9B42\u6D51\u6DF7\u8C41\u6D3B\u4F19\u706B\u83B7\u6216\u60D1\u970D\u8D27\u7978\u51FB\u573E\u57FA\u673A\u7578\u7A3D\u79EF\u7B95\"],\n[\"bc40\",\"\u7CBF\u7CC0\u7CC2\u7CC3\u7CC4\u7CC6\u7CC9\u7CCB\u7CCE\",6,\"\u7CD8\u7CDA\u7CDB\u7CDD\u7CDE\u7CE1\",6,\"\u7CE9\",5,\"\u7CF0\",7,\"\u7CF9\u7CFA\u7CFC\",13,\"\u7D0B\",5],\n[\"bc80\",\"\u7D11\",14,\"\u7D21\u7D23\u7D24\u7D25\u7D26\u7D28\u7D29\u7D2A\u7D2C\u7D2D\u7D2E\u7D30\",6,\"\u808C\u9965\u8FF9\u6FC0\u8BA5\u9E21\u59EC\u7EE9\u7F09\u5409\u6781\u68D8\u8F91\u7C4D\u96C6\u53CA\u6025\u75BE\u6C72\u5373\u5AC9\u7EA7\u6324\u51E0\u810A\u5DF1\u84DF\u6280\u5180\u5B63\u4F0E\u796D\u5242\u60B8\u6D4E\u5BC4\u5BC2\u8BA1\u8BB0\u65E2\u5FCC\u9645\u5993\u7EE7\u7EAA\u5609\u67B7\u5939\u4F73\u5BB6\u52A0\u835A\u988A\u8D3E\u7532\u94BE\u5047\u7A3C\u4EF7\u67B6\u9A7E\u5AC1\u6B7C\u76D1\u575A\u5C16\u7B3A\u95F4\u714E\u517C\u80A9\u8270\u5978\u7F04\u8327\u68C0\u67EC\u78B1\u7877\u62E3\u6361\u7B80\u4FED\u526A\u51CF\u8350\u69DB\u9274\u8DF5\u8D31\u89C1\u952E\u7BAD\u4EF6\"],\n[\"bd40\",\"\u7D37\",54,\"\u7D6F\",7],\n[\"bd80\",\"\u7D78\",32,\"\u5065\u8230\u5251\u996F\u6E10\u6E85\u6DA7\u5EFA\u50F5\u59DC\u5C06\u6D46\u6C5F\u7586\u848B\u6868\u5956\u8BB2\u5320\u9171\u964D\u8549\u6912\u7901\u7126\u80F6\u4EA4\u90CA\u6D47\u9A84\u5A07\u56BC\u6405\u94F0\u77EB\u4FA5\u811A\u72E1\u89D2\u997A\u7F34\u7EDE\u527F\u6559\u9175\u8F7F\u8F83\u53EB\u7A96\u63ED\u63A5\u7686\u79F8\u8857\u9636\u622A\u52AB\u8282\u6854\u6770\u6377\u776B\u7AED\u6D01\u7ED3\u89E3\u59D0\u6212\u85C9\u82A5\u754C\u501F\u4ECB\u75A5\u8BEB\u5C4A\u5DFE\u7B4B\u65A4\u91D1\u4ECA\u6D25\u895F\u7D27\u9526\u4EC5\u8C28\u8FDB\u9773\u664B\u7981\u8FD1\u70EC\u6D78\"],\n[\"be40\",\"\u7D99\",12,\"\u7DA7\",6,\"\u7DAF\",42],\n[\"be80\",\"\u7DDA\",32,\"\u5C3D\u52B2\u8346\u5162\u830E\u775B\u6676\u9CB8\u4EAC\u60CA\u7CBE\u7CB3\u7ECF\u4E95\u8B66\u666F\u9888\u9759\u5883\u656C\u955C\u5F84\u75C9\u9756\u7ADF\u7ADE\u51C0\u70AF\u7A98\u63EA\u7A76\u7EA0\u7396\u97ED\u4E45\u7078\u4E5D\u9152\u53A9\u6551\u65E7\u81FC\u8205\u548E\u5C31\u759A\u97A0\u62D8\u72D9\u75BD\u5C45\u9A79\u83CA\u5C40\u5480\u77E9\u4E3E\u6CAE\u805A\u62D2\u636E\u5DE8\u5177\u8DDD\u8E1E\u952F\u4FF1\u53E5\u60E7\u70AC\u5267\u6350\u9E43\u5A1F\u5026\u7737\u5377\u7EE2\u6485\u652B\u6289\u6398\u5014\u7235\u89C9\u51B3\u8BC0\u7EDD\u5747\u83CC\u94A7\u519B\u541B\u5CFB\"],\n[\"bf40\",\"\u7DFB\",62],\n[\"bf80\",\"\u7E3A\u7E3C\",4,\"\u7E42\",4,\"\u7E48\",21,\"\u4FCA\u7AE3\u6D5A\u90E1\u9A8F\u5580\u5496\u5361\u54AF\u5F00\u63E9\u6977\u51EF\u6168\u520A\u582A\u52D8\u574E\u780D\u770B\u5EB7\u6177\u7CE0\u625B\u6297\u4EA2\u7095\u8003\u62F7\u70E4\u9760\u5777\u82DB\u67EF\u68F5\u78D5\u9897\u79D1\u58F3\u54B3\u53EF\u6E34\u514B\u523B\u5BA2\u8BFE\u80AF\u5543\u57A6\u6073\u5751\u542D\u7A7A\u6050\u5B54\u63A7\u62A0\u53E3\u6263\u5BC7\u67AF\u54ED\u7A9F\u82E6\u9177\u5E93\u88E4\u5938\u57AE\u630E\u8DE8\u80EF\u5757\u7B77\u4FA9\u5FEB\u5BBD\u6B3E\u5321\u7B50\u72C2\u6846\u77FF\u7736\u65F7\u51B5\u4E8F\u76D4\u5CBF\u7AA5\u8475\u594E\u9B41\u5080\"],\n[\"c040\",\"\u7E5E\",35,\"\u7E83\",23,\"\u7E9C\u7E9D\u7E9E\"],\n[\"c080\",\"\u7EAE\u7EB4\u7EBB\u7EBC\u7ED6\u7EE4\u7EEC\u7EF9\u7F0A\u7F10\u7F1E\u7F37\u7F39\u7F3B\",6,\"\u7F43\u7F46\",9,\"\u7F52\u7F53\u9988\u6127\u6E83\u5764\u6606\u6346\u56F0\u62EC\u6269\u5ED3\u9614\u5783\u62C9\u5587\u8721\u814A\u8FA3\u5566\u83B1\u6765\u8D56\u84DD\u5A6A\u680F\u62E6\u7BEE\u9611\u5170\u6F9C\u8C30\u63FD\u89C8\u61D2\u7F06\u70C2\u6EE5\u7405\u6994\u72FC\u5ECA\u90CE\u6717\u6D6A\u635E\u52B3\u7262\u8001\u4F6C\u59E5\u916A\u70D9\u6D9D\u52D2\u4E50\u96F7\u956D\u857E\u78CA\u7D2F\u5121\u5792\u64C2\u808B\u7C7B\u6CEA\u68F1\u695E\u51B7\u5398\u68A8\u7281\u9ECE\u7BF1\u72F8\u79BB\u6F13\u7406\u674E\u91CC\u9CA4\u793C\u8389\u8354\u540F\u6817\u4E3D\u5389\u52B1\u783E\u5386\u5229\u5088\u4F8B\u4FD0\"],\n[\"c140\",\"\u7F56\u7F59\u7F5B\u7F5C\u7F5D\u7F5E\u7F60\u7F63\",4,\"\u7F6B\u7F6C\u7F6D\u7F6F\u7F70\u7F73\u7F75\u7F76\u7F77\u7F78\u7F7A\u7F7B\u7F7C\u7F7D\u7F7F\u7F80\u7F82\",7,\"\u7F8B\u7F8D\u7F8F\",4,\"\u7F95\",4,\"\u7F9B\u7F9C\u7FA0\u7FA2\u7FA3\u7FA5\u7FA6\u7FA8\",6,\"\u7FB1\"],\n[\"c180\",\"\u7FB3\",4,\"\u7FBA\u7FBB\u7FBE\u7FC0\u7FC2\u7FC3\u7FC4\u7FC6\u7FC7\u7FC8\u7FC9\u7FCB\u7FCD\u7FCF\",4,\"\u7FD6\u7FD7\u7FD9\",5,\"\u7FE2\u7FE3\u75E2\u7ACB\u7C92\u6CA5\u96B6\u529B\u7483\u54E9\u4FE9\u8054\u83B2\u8FDE\u9570\u5EC9\u601C\u6D9F\u5E18\u655B\u8138\u94FE\u604B\u70BC\u7EC3\u7CAE\u51C9\u6881\u7CB1\u826F\u4E24\u8F86\u91CF\u667E\u4EAE\u8C05\u64A9\u804A\u50DA\u7597\u71CE\u5BE5\u8FBD\u6F66\u4E86\u6482\u9563\u5ED6\u6599\u5217\u88C2\u70C8\u52A3\u730E\u7433\u6797\u78F7\u9716\u4E34\u90BB\u9CDE\u6DCB\u51DB\u8D41\u541D\u62CE\u73B2\u83F1\u96F6\u9F84\u94C3\u4F36\u7F9A\u51CC\u7075\u9675\u5CAD\u9886\u53E6\u4EE4\u6E9C\u7409\u69B4\u786B\u998F\u7559\u5218\u7624\u6D41\u67F3\u516D\u9F99\u804B\u5499\u7B3C\u7ABF\"],\n[\"c240\",\"\u7FE4\u7FE7\u7FE8\u7FEA\u7FEB\u7FEC\u7FED\u7FEF\u7FF2\u7FF4\",6,\"\u7FFD\u7FFE\u7FFF\u8002\u8007\u8008\u8009\u800A\u800E\u800F\u8011\u8013\u801A\u801B\u801D\u801E\u801F\u8021\u8023\u8024\u802B\",5,\"\u8032\u8034\u8039\u803A\u803C\u803E\u8040\u8041\u8044\u8045\u8047\u8048\u8049\u804E\u804F\u8050\u8051\u8053\u8055\u8056\u8057\"],\n[\"c280\",\"\u8059\u805B\",13,\"\u806B\",5,\"\u8072\",11,\"\u9686\u5784\u62E2\u9647\u697C\u5A04\u6402\u7BD3\u6F0F\u964B\u82A6\u5362\u9885\u5E90\u7089\u63B3\u5364\u864F\u9C81\u9E93\u788C\u9732\u8DEF\u8D42\u9E7F\u6F5E\u7984\u5F55\u9646\u622E\u9A74\u5415\u94DD\u4FA3\u65C5\u5C65\u5C61\u7F15\u8651\u6C2F\u5F8B\u7387\u6EE4\u7EFF\u5CE6\u631B\u5B6A\u6EE6\u5375\u4E71\u63A0\u7565\u62A1\u8F6E\u4F26\u4ED1\u6CA6\u7EB6\u8BBA\u841D\u87BA\u7F57\u903B\u9523\u7BA9\u9AA1\u88F8\u843D\u6D1B\u9A86\u7EDC\u5988\u9EBB\u739B\u7801\u8682\u9A6C\u9A82\u561B\u5417\u57CB\u4E70\u9EA6\u5356\u8FC8\u8109\u7792\u9992\u86EE\u6EE1\u8513\u66FC\u6162\u6F2B\"],\n[\"c340\",\"\u807E\u8081\u8082\u8085\u8088\u808A\u808D\",5,\"\u8094\u8095\u8097\u8099\u809E\u80A3\u80A6\u80A7\u80A8\u80AC\u80B0\u80B3\u80B5\u80B6\u80B8\u80B9\u80BB\u80C5\u80C7\",4,\"\u80CF\",6,\"\u80D8\u80DF\u80E0\u80E2\u80E3\u80E6\u80EE\u80F5\u80F7\u80F9\u80FB\u80FE\u80FF\u8100\u8101\u8103\u8104\u8105\u8107\u8108\u810B\"],\n[\"c380\",\"\u810C\u8115\u8117\u8119\u811B\u811C\u811D\u811F\",12,\"\u812D\u812E\u8130\u8133\u8134\u8135\u8137\u8139\",4,\"\u813F\u8C29\u8292\u832B\u76F2\u6C13\u5FD9\u83BD\u732B\u8305\u951A\u6BDB\u77DB\u94C6\u536F\u8302\u5192\u5E3D\u8C8C\u8D38\u4E48\u73AB\u679A\u6885\u9176\u9709\u7164\u6CA1\u7709\u5A92\u9541\u6BCF\u7F8E\u6627\u5BD0\u59B9\u5A9A\u95E8\u95F7\u4EEC\u840C\u8499\u6AAC\u76DF\u9530\u731B\u68A6\u5B5F\u772F\u919A\u9761\u7CDC\u8FF7\u8C1C\u5F25\u7C73\u79D8\u89C5\u6CCC\u871C\u5BC6\u5E42\u68C9\u7720\u7EF5\u5195\u514D\u52C9\u5A29\u7F05\u9762\u82D7\u63CF\u7784\u85D0\u79D2\u6E3A\u5E99\u5999\u8511\u706D\u6C11\u62BF\u76BF\u654F\u60AF\u95FD\u660E\u879F\u9E23\u94ED\u540D\u547D\u8C2C\u6478\"],\n[\"c440\",\"\u8140\",5,\"\u8147\u8149\u814D\u814E\u814F\u8152\u8156\u8157\u8158\u815B\",4,\"\u8161\u8162\u8163\u8164\u8166\u8168\u816A\u816B\u816C\u816F\u8172\u8173\u8175\u8176\u8177\u8178\u8181\u8183\",4,\"\u8189\u818B\u818C\u818D\u818E\u8190\u8192\",5,\"\u8199\u819A\u819E\",4,\"\u81A4\u81A5\"],\n[\"c480\",\"\u81A7\u81A9\u81AB\",7,\"\u81B4\",5,\"\u81BC\u81BD\u81BE\u81BF\u81C4\u81C5\u81C7\u81C8\u81C9\u81CB\u81CD\",6,\"\u6479\u8611\u6A21\u819C\u78E8\u6469\u9B54\u62B9\u672B\u83AB\u58A8\u9ED8\u6CAB\u6F20\u5BDE\u964C\u8C0B\u725F\u67D0\u62C7\u7261\u4EA9\u59C6\u6BCD\u5893\u66AE\u5E55\u52DF\u6155\u6728\u76EE\u7766\u7267\u7A46\u62FF\u54EA\u5450\u94A0\u90A3\u5A1C\u7EB3\u6C16\u4E43\u5976\u8010\u5948\u5357\u7537\u96BE\u56CA\u6320\u8111\u607C\u95F9\u6DD6\u5462\u9981\u5185\u5AE9\u80FD\u59AE\u9713\u502A\u6CE5\u5C3C\u62DF\u4F60\u533F\u817B\u9006\u6EBA\u852B\u62C8\u5E74\u78BE\u64B5\u637B\u5FF5\u5A18\u917F\u9E1F\u5C3F\u634F\u8042\u5B7D\u556E\u954A\u954D\u6D85\u60A8\u67E0\u72DE\u51DD\u5B81\"],\n[\"c540\",\"\u81D4\",14,\"\u81E4\u81E5\u81E6\u81E8\u81E9\u81EB\u81EE\",4,\"\u81F5\",5,\"\u81FD\u81FF\u8203\u8207\",4,\"\u820E\u820F\u8211\u8213\u8215\",5,\"\u821D\u8220\u8224\u8225\u8226\u8227\u8229\u822E\u8232\u823A\u823C\u823D\u823F\"],\n[\"c580\",\"\u8240\u8241\u8242\u8243\u8245\u8246\u8248\u824A\u824C\u824D\u824E\u8250\",7,\"\u8259\u825B\u825C\u825D\u825E\u8260\",7,\"\u8269\u62E7\u6CDE\u725B\u626D\u94AE\u7EBD\u8113\u6D53\u519C\u5F04\u5974\u52AA\u6012\u5973\u6696\u8650\u759F\u632A\u61E6\u7CEF\u8BFA\u54E6\u6B27\u9E25\u6BB4\u85D5\u5455\u5076\u6CA4\u556A\u8DB4\u722C\u5E15\u6015\u7436\u62CD\u6392\u724C\u5F98\u6E43\u6D3E\u6500\u6F58\u76D8\u78D0\u76FC\u7554\u5224\u53DB\u4E53\u5E9E\u65C1\u802A\u80D6\u629B\u5486\u5228\u70AE\u888D\u8DD1\u6CE1\u5478\u80DA\u57F9\u88F4\u8D54\u966A\u914D\u4F69\u6C9B\u55B7\u76C6\u7830\u62A8\u70F9\u6F8E\u5F6D\u84EC\u68DA\u787C\u7BF7\u81A8\u670B\u9E4F\u6367\u78B0\u576F\u7812\u9739\u6279\u62AB\u5288\u7435\u6BD7\"],\n[\"c640\",\"\u826A\u826B\u826C\u826D\u8271\u8275\u8276\u8277\u8278\u827B\u827C\u8280\u8281\u8283\u8285\u8286\u8287\u8289\u828C\u8290\u8293\u8294\u8295\u8296\u829A\u829B\u829E\u82A0\u82A2\u82A3\u82A7\u82B2\u82B5\u82B6\u82BA\u82BB\u82BC\u82BF\u82C0\u82C2\u82C3\u82C5\u82C6\u82C9\u82D0\u82D6\u82D9\u82DA\u82DD\u82E2\u82E7\u82E8\u82E9\u82EA\u82EC\u82ED\u82EE\u82F0\u82F2\u82F3\u82F5\u82F6\u82F8\"],\n[\"c680\",\"\u82FA\u82FC\",4,\"\u830A\u830B\u830D\u8310\u8312\u8313\u8316\u8318\u8319\u831D\",9,\"\u8329\u832A\u832E\u8330\u8332\u8337\u833B\u833D\u5564\u813E\u75B2\u76AE\u5339\u75DE\u50FB\u5C41\u8B6C\u7BC7\u504F\u7247\u9A97\u98D8\u6F02\u74E2\u7968\u6487\u77A5\u62FC\u9891\u8D2B\u54C1\u8058\u4E52\u576A\u82F9\u840D\u5E73\u51ED\u74F6\u8BC4\u5C4F\u5761\u6CFC\u9887\u5A46\u7834\u9B44\u8FEB\u7C95\u5256\u6251\u94FA\u4EC6\u8386\u8461\u83E9\u84B2\u57D4\u6734\u5703\u666E\u6D66\u8C31\u66DD\u7011\u671F\u6B3A\u6816\u621A\u59BB\u4E03\u51C4\u6F06\u67D2\u6C8F\u5176\u68CB\u5947\u6B67\u7566\u5D0E\u8110\u9F50\u65D7\u7948\u7941\u9A91\u8D77\u5C82\u4E5E\u4F01\u542F\u5951\u780C\u5668\u6C14\u8FC4\u5F03\u6C7D\u6CE3\u8BAB\u6390\"],\n[\"c740\",\"\u833E\u833F\u8341\u8342\u8344\u8345\u8348\u834A\",4,\"\u8353\u8355\",4,\"\u835D\u8362\u8370\",6,\"\u8379\u837A\u837E\",6,\"\u8387\u8388\u838A\u838B\u838C\u838D\u838F\u8390\u8391\u8394\u8395\u8396\u8397\u8399\u839A\u839D\u839F\u83A1\",6,\"\u83AC\u83AD\u83AE\"],\n[\"c780\",\"\u83AF\u83B5\u83BB\u83BE\u83BF\u83C2\u83C3\u83C4\u83C6\u83C8\u83C9\u83CB\u83CD\u83CE\u83D0\u83D1\u83D2\u83D3\u83D5\u83D7\u83D9\u83DA\u83DB\u83DE\u83E2\u83E3\u83E4\u83E6\u83E7\u83E8\u83EB\u83EC\u83ED\u6070\u6D3D\u7275\u6266\u948E\u94C5\u5343\u8FC1\u7B7E\u4EDF\u8C26\u4E7E\u9ED4\u94B1\u94B3\u524D\u6F5C\u9063\u6D45\u8C34\u5811\u5D4C\u6B20\u6B49\u67AA\u545B\u8154\u7F8C\u5899\u8537\u5F3A\u62A2\u6A47\u9539\u6572\u6084\u6865\u77A7\u4E54\u4FA8\u5DE7\u9798\u64AC\u7FD8\u5CED\u4FCF\u7A8D\u5207\u8304\u4E14\u602F\u7A83\u94A6\u4FB5\u4EB2\u79E6\u7434\u52E4\u82B9\u64D2\u79BD\u5BDD\u6C81\u9752\u8F7B\u6C22\u503E\u537F\u6E05\u64CE\u6674\u6C30\u60C5\u9877\u8BF7\u5E86\u743C\u7A77\u79CB\u4E18\u90B1\u7403\u6C42\u56DA\u914B\u6CC5\u8D8B\u533A\u86C6\u66F2\u8EAF\u5C48\u9A71\u6E20\"],\n[\"c840\",\"\u83EE\u83EF\u83F3\",4,\"\u83FA\u83FB\u83FC\u83FE\u83FF\u8400\u8402\u8405\u8407\u8408\u8409\u840A\u8410\u8412\",5,\"\u8419\u841A\u841B\u841E\",5,\"\u8429\",7,\"\u8432\",5,\"\u8439\u843A\u843B\u843E\",7,\"\u8447\u8448\u8449\"],\n[\"c880\",\"\u844A\",6,\"\u8452\",4,\"\u8458\u845D\u845E\u845F\u8460\u8462\u8464\",4,\"\u846A\u846E\u846F\u8470\u8472\u8474\u8477\u8479\u847B\u847C\u53D6\u5A36\u9F8B\u8DA3\u53BB\u5708\u98A7\u6743\u919B\u6CC9\u5168\u75CA\u62F3\u72AC\u5238\u529D\u7F3A\u7094\u7638\u5374\u9E4A\u69B7\u786E\u96C0\u88D9\u7FA4\u7136\u71C3\u5189\u67D3\u74E4\u58E4\u6518\u56B7\u8BA9\u9976\u6270\u7ED5\u60F9\u70ED\u58EC\u4EC1\u4EBA\u5FCD\u97E7\u4EFB\u8BA4\u5203\u598A\u7EAB\u6254\u4ECD\u65E5\u620E\u8338\u84C9\u8363\u878D\u7194\u6EB6\u5BB9\u7ED2\u5197\u63C9\u67D4\u8089\u8339\u8815\u5112\u5B7A\u5982\u8FB1\u4E73\u6C5D\u5165\u8925\u8F6F\u962E\u854A\u745E\u9510\u95F0\u6DA6\u82E5\u5F31\u6492\u6D12\u8428\u816E\u9CC3\u585E\u8D5B\u4E09\u53C1\"],\n[\"c940\",\"\u847D\",4,\"\u8483\u8484\u8485\u8486\u848A\u848D\u848F\",7,\"\u8498\u849A\u849B\u849D\u849E\u849F\u84A0\u84A2\",12,\"\u84B0\u84B1\u84B3\u84B5\u84B6\u84B7\u84BB\u84BC\u84BE\u84C0\u84C2\u84C3\u84C5\u84C6\u84C7\u84C8\u84CB\u84CC\u84CE\u84CF\u84D2\u84D4\u84D5\u84D7\"],\n[\"c980\",\"\u84D8\",4,\"\u84DE\u84E1\u84E2\u84E4\u84E7\",4,\"\u84ED\u84EE\u84EF\u84F1\",10,\"\u84FD\u84FE\u8500\u8501\u8502\u4F1E\u6563\u6851\u55D3\u4E27\u6414\u9A9A\u626B\u5AC2\u745F\u8272\u6DA9\u68EE\u50E7\u838E\u7802\u6740\u5239\u6C99\u7EB1\u50BB\u5565\u715E\u7B5B\u6652\u73CA\u82EB\u6749\u5C71\u5220\u717D\u886B\u95EA\u9655\u64C5\u8D61\u81B3\u5584\u6C55\u6247\u7F2E\u5892\u4F24\u5546\u8D4F\u664C\u4E0A\u5C1A\u88F3\u68A2\u634E\u7A0D\u70E7\u828D\u52FA\u97F6\u5C11\u54E8\u90B5\u7ECD\u5962\u8D4A\u86C7\u820C\u820D\u8D66\u6444\u5C04\u6151\u6D89\u793E\u8BBE\u7837\u7533\u547B\u4F38\u8EAB\u6DF1\u5A20\u7EC5\u795E\u6C88\u5BA1\u5A76\u751A\u80BE\u614E\u6E17\u58F0\u751F\u7525\u7272\u5347\u7EF3\"],\n[\"ca40\",\"\u8503\",8,\"\u850D\u850E\u850F\u8510\u8512\u8514\u8515\u8516\u8518\u8519\u851B\u851C\u851D\u851E\u8520\u8522\",8,\"\u852D\",9,\"\u853E\",4,\"\u8544\u8545\u8546\u8547\u854B\",10],\n[\"ca80\",\"\u8557\u8558\u855A\u855B\u855C\u855D\u855F\",4,\"\u8565\u8566\u8567\u8569\",8,\"\u8573\u8575\u8576\u8577\u8578\u857C\u857D\u857F\u8580\u8581\u7701\u76DB\u5269\u80DC\u5723\u5E08\u5931\u72EE\u65BD\u6E7F\u8BD7\u5C38\u8671\u5341\u77F3\u62FE\u65F6\u4EC0\u98DF\u8680\u5B9E\u8BC6\u53F2\u77E2\u4F7F\u5C4E\u9A76\u59CB\u5F0F\u793A\u58EB\u4E16\u67FF\u4E8B\u62ED\u8A93\u901D\u52BF\u662F\u55DC\u566C\u9002\u4ED5\u4F8D\u91CA\u9970\u6C0F\u5E02\u6043\u5BA4\u89C6\u8BD5\u6536\u624B\u9996\u5B88\u5BFF\u6388\u552E\u53D7\u7626\u517D\u852C\u67A2\u68B3\u6B8A\u6292\u8F93\u53D4\u8212\u6DD1\u758F\u4E66\u8D4E\u5B70\u719F\u85AF\u6691\u66D9\u7F72\u8700\u9ECD\u9F20\u5C5E\u672F\u8FF0\u6811\u675F\u620D\u7AD6\u5885\u5EB6\u6570\u6F31\"],\n[\"cb40\",\"\u8582\u8583\u8586\u8588\",6,\"\u8590\",10,\"\u859D\",6,\"\u85A5\u85A6\u85A7\u85A9\u85AB\u85AC\u85AD\u85B1\",5,\"\u85B8\u85BA\",6,\"\u85C2\",6,\"\u85CA\",4,\"\u85D1\u85D2\"],\n[\"cb80\",\"\u85D4\u85D6\",5,\"\u85DD\",6,\"\u85E5\u85E6\u85E7\u85E8\u85EA\",14,\"\u6055\u5237\u800D\u6454\u8870\u7529\u5E05\u6813\u62F4\u971C\u53CC\u723D\u8C01\u6C34\u7761\u7A0E\u542E\u77AC\u987A\u821C\u8BF4\u7855\u6714\u70C1\u65AF\u6495\u5636\u601D\u79C1\u53F8\u4E1D\u6B7B\u8086\u5BFA\u55E3\u56DB\u4F3A\u4F3C\u9972\u5DF3\u677E\u8038\u6002\u9882\u9001\u5B8B\u8BBC\u8BF5\u641C\u8258\u64DE\u55FD\u82CF\u9165\u4FD7\u7D20\u901F\u7C9F\u50F3\u5851\u6EAF\u5BBF\u8BC9\u8083\u9178\u849C\u7B97\u867D\u968B\u968F\u7EE5\u9AD3\u788E\u5C81\u7A57\u9042\u96A7\u795F\u5B59\u635F\u7B0B\u84D1\u68AD\u5506\u7F29\u7410\u7D22\u9501\u6240\u584C\u4ED6\u5B83\u5979\u5854\"],\n[\"cc40\",\"\u85F9\u85FA\u85FC\u85FD\u85FE\u8600\",4,\"\u8606\",10,\"\u8612\u8613\u8614\u8615\u8617\",15,\"\u8628\u862A\",13,\"\u8639\u863A\u863B\u863D\u863E\u863F\u8640\"],\n[\"cc80\",\"\u8641\",11,\"\u8652\u8653\u8655\",4,\"\u865B\u865C\u865D\u865F\u8660\u8661\u8663\",7,\"\u736D\u631E\u8E4B\u8E0F\u80CE\u82D4\u62AC\u53F0\u6CF0\u915E\u592A\u6001\u6C70\u574D\u644A\u8D2A\u762B\u6EE9\u575B\u6A80\u75F0\u6F6D\u8C2D\u8C08\u5766\u6BEF\u8892\u78B3\u63A2\u53F9\u70AD\u6C64\u5858\u642A\u5802\u68E0\u819B\u5510\u7CD6\u5018\u8EBA\u6DCC\u8D9F\u70EB\u638F\u6D9B\u6ED4\u7EE6\u8404\u6843\u9003\u6DD8\u9676\u8BA8\u5957\u7279\u85E4\u817E\u75BC\u8A8A\u68AF\u5254\u8E22\u9511\u63D0\u9898\u8E44\u557C\u4F53\u66FF\u568F\u60D5\u6D95\u5243\u5C49\u5929\u6DFB\u586B\u7530\u751C\u606C\u8214\u8146\u6311\u6761\u8FE2\u773A\u8DF3\u8D34\u94C1\u5E16\u5385\u542C\u70C3\"],\n[\"cd40\",\"\u866D\u866F\u8670\u8672\",6,\"\u8683\",6,\"\u868E\",4,\"\u8694\u8696\",5,\"\u869E\",4,\"\u86A5\u86A6\u86AB\u86AD\u86AE\u86B2\u86B3\u86B7\u86B8\u86B9\u86BB\",4,\"\u86C1\u86C2\u86C3\u86C5\u86C8\u86CC\u86CD\u86D2\u86D3\u86D5\u86D6\u86D7\u86DA\u86DC\"],\n[\"cd80\",\"\u86DD\u86E0\u86E1\u86E2\u86E3\u86E5\u86E6\u86E7\u86E8\u86EA\u86EB\u86EC\u86EF\u86F5\u86F6\u86F7\u86FA\u86FB\u86FC\u86FD\u86FF\u8701\u8704\u8705\u8706\u870B\u870C\u870E\u870F\u8710\u8711\u8714\u8716\u6C40\u5EF7\u505C\u4EAD\u5EAD\u633A\u8247\u901A\u6850\u916E\u77B3\u540C\u94DC\u5F64\u7AE5\u6876\u6345\u7B52\u7EDF\u75DB\u5077\u6295\u5934\u900F\u51F8\u79C3\u7A81\u56FE\u5F92\u9014\u6D82\u5C60\u571F\u5410\u5154\u6E4D\u56E2\u63A8\u9893\u817F\u8715\u892A\u9000\u541E\u5C6F\u81C0\u62D6\u6258\u8131\u9E35\u9640\u9A6E\u9A7C\u692D\u59A5\u62D3\u553E\u6316\u54C7\u86D9\u6D3C\u5A03\u74E6\u889C\u6B6A\u5916\u8C4C\u5F2F\u6E7E\u73A9\u987D\u4E38\u70F7\u5B8C\u7897\u633D\u665A\u7696\u60CB\u5B9B\u5A49\u4E07\u8155\u6C6A\u738B\u4EA1\u6789\u7F51\u5F80\u65FA\u671B\u5FD8\u5984\u5A01\"],\n[\"ce40\",\"\u8719\u871B\u871D\u871F\u8720\u8724\u8726\u8727\u8728\u872A\u872B\u872C\u872D\u872F\u8730\u8732\u8733\u8735\u8736\u8738\u8739\u873A\u873C\u873D\u8740\",6,\"\u874A\u874B\u874D\u874F\u8750\u8751\u8752\u8754\u8755\u8756\u8758\u875A\",5,\"\u8761\u8762\u8766\",7,\"\u876F\u8771\u8772\u8773\u8775\"],\n[\"ce80\",\"\u8777\u8778\u8779\u877A\u877F\u8780\u8781\u8784\u8786\u8787\u8789\u878A\u878C\u878E\",4,\"\u8794\u8795\u8796\u8798\",6,\"\u87A0\",4,\"\u5DCD\u5FAE\u5371\u97E6\u8FDD\u6845\u56F4\u552F\u60DF\u4E3A\u6F4D\u7EF4\u82C7\u840E\u59D4\u4F1F\u4F2A\u5C3E\u7EAC\u672A\u851A\u5473\u754F\u80C3\u5582\u9B4F\u4F4D\u6E2D\u8C13\u5C09\u6170\u536B\u761F\u6E29\u868A\u6587\u95FB\u7EB9\u543B\u7A33\u7D0A\u95EE\u55E1\u7FC1\u74EE\u631D\u8717\u6DA1\u7A9D\u6211\u65A1\u5367\u63E1\u6C83\u5DEB\u545C\u94A8\u4E4C\u6C61\u8BEC\u5C4B\u65E0\u829C\u68A7\u543E\u5434\u6BCB\u6B66\u4E94\u6342\u5348\u821E\u4F0D\u4FAE\u575E\u620A\u96FE\u6664\u7269\u52FF\u52A1\u609F\u8BEF\u6614\u7199\u6790\u897F\u7852\u77FD\u6670\u563B\u5438\u9521\u727A\"],\n[\"cf40\",\"\u87A5\u87A6\u87A7\u87A9\u87AA\u87AE\u87B0\u87B1\u87B2\u87B4\u87B6\u87B7\u87B8\u87B9\u87BB\u87BC\u87BE\u87BF\u87C1\",4,\"\u87C7\u87C8\u87C9\u87CC\",4,\"\u87D4\",6,\"\u87DC\u87DD\u87DE\u87DF\u87E1\u87E2\u87E3\u87E4\u87E6\u87E7\u87E8\u87E9\u87EB\u87EC\u87ED\u87EF\",9],\n[\"cf80\",\"\u87FA\u87FB\u87FC\u87FD\u87FF\u8800\u8801\u8802\u8804\",5,\"\u880B\",7,\"\u8814\u8817\u8818\u8819\u881A\u881C\",4,\"\u8823\u7A00\u606F\u5E0C\u6089\u819D\u5915\u60DC\u7184\u70EF\u6EAA\u6C50\u7280\u6A84\u88AD\u5E2D\u4E60\u5AB3\u559C\u94E3\u6D17\u7CFB\u9699\u620F\u7EC6\u778E\u867E\u5323\u971E\u8F96\u6687\u5CE1\u4FA0\u72ED\u4E0B\u53A6\u590F\u5413\u6380\u9528\u5148\u4ED9\u9C9C\u7EA4\u54B8\u8D24\u8854\u8237\u95F2\u6D8E\u5F26\u5ACC\u663E\u9669\u73B0\u732E\u53BF\u817A\u9985\u7FA1\u5BAA\u9677\u9650\u7EBF\u76F8\u53A2\u9576\u9999\u7BB1\u8944\u6E58\u4E61\u7FD4\u7965\u8BE6\u60F3\u54CD\u4EAB\u9879\u5DF7\u6A61\u50CF\u5411\u8C61\u8427\u785D\u9704\u524A\u54EE\u56A3\u9500\u6D88\u5BB5\u6DC6\u6653\"],\n[\"d040\",\"\u8824\",13,\"\u8833\",5,\"\u883A\u883B\u883D\u883E\u883F\u8841\u8842\u8843\u8846\",5,\"\u884E\",5,\"\u8855\u8856\u8858\u885A\",6,\"\u8866\u8867\u886A\u886D\u886F\u8871\u8873\u8874\u8875\u8876\u8878\u8879\u887A\"],\n[\"d080\",\"\u887B\u887C\u8880\u8883\u8886\u8887\u8889\u888A\u888C\u888E\u888F\u8890\u8891\u8893\u8894\u8895\u8897\",4,\"\u889D\",4,\"\u88A3\u88A5\",5,\"\u5C0F\u5B5D\u6821\u8096\u5578\u7B11\u6548\u6954\u4E9B\u6B47\u874E\u978B\u534F\u631F\u643A\u90AA\u659C\u80C1\u8C10\u5199\u68B0\u5378\u87F9\u61C8\u6CC4\u6CFB\u8C22\u5C51\u85AA\u82AF\u950C\u6B23\u8F9B\u65B0\u5FFB\u5FC3\u4FE1\u8845\u661F\u8165\u7329\u60FA\u5174\u5211\u578B\u5F62\u90A2\u884C\u9192\u5E78\u674F\u6027\u59D3\u5144\u51F6\u80F8\u5308\u6C79\u96C4\u718A\u4F11\u4FEE\u7F9E\u673D\u55C5\u9508\u79C0\u8896\u7EE3\u589F\u620C\u9700\u865A\u5618\u987B\u5F90\u8BB8\u84C4\u9157\u53D9\u65ED\u5E8F\u755C\u6064\u7D6E\u5A7F\u7EEA\u7EED\u8F69\u55A7\u5BA3\u60AC\u65CB\u7384\"],\n[\"d140\",\"\u88AC\u88AE\u88AF\u88B0\u88B2\",4,\"\u88B8\u88B9\u88BA\u88BB\u88BD\u88BE\u88BF\u88C0\u88C3\u88C4\u88C7\u88C8\u88CA\u88CB\u88CC\u88CD\u88CF\u88D0\u88D1\u88D3\u88D6\u88D7\u88DA\",4,\"\u88E0\u88E1\u88E6\u88E7\u88E9\",6,\"\u88F2\u88F5\u88F6\u88F7\u88FA\u88FB\u88FD\u88FF\u8900\u8901\u8903\",5],\n[\"d180\",\"\u8909\u890B\",4,\"\u8911\u8914\",4,\"\u891C\",4,\"\u8922\u8923\u8924\u8926\u8927\u8928\u8929\u892C\u892D\u892E\u892F\u8931\u8932\u8933\u8935\u8937\u9009\u7663\u7729\u7EDA\u9774\u859B\u5B66\u7A74\u96EA\u8840\u52CB\u718F\u5FAA\u65EC\u8BE2\u5BFB\u9A6F\u5DE1\u6B89\u6C5B\u8BAD\u8BAF\u900A\u8FC5\u538B\u62BC\u9E26\u9E2D\u5440\u4E2B\u82BD\u7259\u869C\u5D16\u8859\u6DAF\u96C5\u54D1\u4E9A\u8BB6\u7109\u54BD\u9609\u70DF\u6DF9\u76D0\u4E25\u7814\u8712\u5CA9\u5EF6\u8A00\u989C\u960E\u708E\u6CBF\u5944\u63A9\u773C\u884D\u6F14\u8273\u5830\u71D5\u538C\u781A\u96C1\u5501\u5F66\u7130\u5BB4\u8C1A\u9A8C\u6B83\u592E\u9E2F\u79E7\u6768\u626C\u4F6F\u75A1\u7F8A\u6D0B\u9633\u6C27\u4EF0\u75D2\u517B\u6837\u6F3E\u9080\u8170\u5996\u7476\"],\n[\"d240\",\"\u8938\",8,\"\u8942\u8943\u8945\",24,\"\u8960\",5,\"\u8967\",19,\"\u897C\"],\n[\"d280\",\"\u897D\u897E\u8980\u8982\u8984\u8985\u8987\",26,\"\u6447\u5C27\u9065\u7A91\u8C23\u59DA\u54AC\u8200\u836F\u8981\u8000\u6930\u564E\u8036\u7237\u91CE\u51B6\u4E5F\u9875\u6396\u4E1A\u53F6\u66F3\u814B\u591C\u6DB2\u4E00\u58F9\u533B\u63D6\u94F1\u4F9D\u4F0A\u8863\u9890\u5937\u9057\u79FB\u4EEA\u80F0\u7591\u6C82\u5B9C\u59E8\u5F5D\u6905\u8681\u501A\u5DF2\u4E59\u77E3\u4EE5\u827A\u6291\u6613\u9091\u5C79\u4EBF\u5F79\u81C6\u9038\u8084\u75AB\u4EA6\u88D4\u610F\u6BC5\u5FC6\u4E49\u76CA\u6EA2\u8BE3\u8BAE\u8C0A\u8BD1\u5F02\u7FFC\u7FCC\u7ECE\u8335\u836B\u56E0\u6BB7\u97F3\u9634\u59FB\u541F\u94F6\u6DEB\u5BC5\u996E\u5C39\u5F15\u9690\"],\n[\"d340\",\"\u89A2\",30,\"\u89C3\u89CD\u89D3\u89D4\u89D5\u89D7\u89D8\u89D9\u89DB\u89DD\u89DF\u89E0\u89E1\u89E2\u89E4\u89E7\u89E8\u89E9\u89EA\u89EC\u89ED\u89EE\u89F0\u89F1\u89F2\u89F4\",6],\n[\"d380\",\"\u89FB\",4,\"\u8A01\",5,\"\u8A08\",21,\"\u5370\u82F1\u6A31\u5A74\u9E70\u5E94\u7F28\u83B9\u8424\u8425\u8367\u8747\u8FCE\u8D62\u76C8\u5F71\u9896\u786C\u6620\u54DF\u62E5\u4F63\u81C3\u75C8\u5EB8\u96CD\u8E0A\u86F9\u548F\u6CF3\u6D8C\u6C38\u607F\u52C7\u7528\u5E7D\u4F18\u60A0\u5FE7\u5C24\u7531\u90AE\u94C0\u72B9\u6CB9\u6E38\u9149\u6709\u53CB\u53F3\u4F51\u91C9\u8BF1\u53C8\u5E7C\u8FC2\u6DE4\u4E8E\u76C2\u6986\u865E\u611A\u8206\u4F59\u4FDE\u903E\u9C7C\u6109\u6E1D\u6E14\u9685\u4E88\u5A31\u96E8\u4E0E\u5C7F\u79B9\u5B87\u8BED\u7FBD\u7389\u57DF\u828B\u90C1\u5401\u9047\u55BB\u5CEA\u5FA1\u6108\u6B32\u72F1\u80B2\u8A89\"],\n[\"d440\",\"\u8A1E\",31,\"\u8A3F\",8,\"\u8A49\",21],\n[\"d480\",\"\u8A5F\",25,\"\u8A7A\",6,\"\u6D74\u5BD3\u88D5\u9884\u8C6B\u9A6D\u9E33\u6E0A\u51A4\u5143\u57A3\u8881\u539F\u63F4\u8F95\u56ED\u5458\u5706\u733F\u6E90\u7F18\u8FDC\u82D1\u613F\u6028\u9662\u66F0\u7EA6\u8D8A\u8DC3\u94A5\u5CB3\u7CA4\u6708\u60A6\u9605\u8018\u4E91\u90E7\u5300\u9668\u5141\u8FD0\u8574\u915D\u6655\u97F5\u5B55\u531D\u7838\u6742\u683D\u54C9\u707E\u5BB0\u8F7D\u518D\u5728\u54B1\u6512\u6682\u8D5E\u8D43\u810F\u846C\u906D\u7CDF\u51FF\u85FB\u67A3\u65E9\u6FA1\u86A4\u8E81\u566A\u9020\u7682\u7076\u71E5\u8D23\u62E9\u5219\u6CFD\u8D3C\u600E\u589E\u618E\u66FE\u8D60\u624E\u55B3\u6E23\u672D\u8F67\"],\n[\"d540\",\"\u8A81\",7,\"\u8A8B\",7,\"\u8A94\",46],\n[\"d580\",\"\u8AC3\",32,\"\u94E1\u95F8\u7728\u6805\u69A8\u548B\u4E4D\u70B8\u8BC8\u6458\u658B\u5B85\u7A84\u503A\u5BE8\u77BB\u6BE1\u8A79\u7C98\u6CBE\u76CF\u65A9\u8F97\u5D2D\u5C55\u8638\u6808\u5360\u6218\u7AD9\u6E5B\u7EFD\u6A1F\u7AE0\u5F70\u6F33\u5F20\u638C\u6DA8\u6756\u4E08\u5E10\u8D26\u4ED7\u80C0\u7634\u969C\u62DB\u662D\u627E\u6CBC\u8D75\u7167\u7F69\u5146\u8087\u53EC\u906E\u6298\u54F2\u86F0\u8F99\u8005\u9517\u8517\u8FD9\u6D59\u73CD\u659F\u771F\u7504\u7827\u81FB\u8D1E\u9488\u4FA6\u6795\u75B9\u8BCA\u9707\u632F\u9547\u9635\u84B8\u6323\u7741\u5F81\u72F0\u4E89\u6014\u6574\u62EF\u6B63\u653F\"],\n[\"d640\",\"\u8AE4\",34,\"\u8B08\",27],\n[\"d680\",\"\u8B24\u8B25\u8B27\",30,\"\u5E27\u75C7\u90D1\u8BC1\u829D\u679D\u652F\u5431\u8718\u77E5\u80A2\u8102\u6C41\u4E4B\u7EC7\u804C\u76F4\u690D\u6B96\u6267\u503C\u4F84\u5740\u6307\u6B62\u8DBE\u53EA\u65E8\u7EB8\u5FD7\u631A\u63B7\u81F3\u81F4\u7F6E\u5E1C\u5CD9\u5236\u667A\u79E9\u7A1A\u8D28\u7099\u75D4\u6EDE\u6CBB\u7A92\u4E2D\u76C5\u5FE0\u949F\u8877\u7EC8\u79CD\u80BF\u91CD\u4EF2\u4F17\u821F\u5468\u5DDE\u6D32\u8BCC\u7CA5\u8F74\u8098\u5E1A\u5492\u76B1\u5B99\u663C\u9AA4\u73E0\u682A\u86DB\u6731\u732A\u8BF8\u8BDB\u9010\u7AF9\u70DB\u716E\u62C4\u77A9\u5631\u4E3B\u8457\u67F1\u52A9\u86C0\u8D2E\u94F8\u7B51\"],\n[\"d740\",\"\u8B46\",31,\"\u8B67\",4,\"\u8B6D\",25],\n[\"d780\",\"\u8B87\",24,\"\u8BAC\u8BB1\u8BBB\u8BC7\u8BD0\u8BEA\u8C09\u8C1E\u4F4F\u6CE8\u795D\u9A7B\u6293\u722A\u62FD\u4E13\u7816\u8F6C\u64B0\u8D5A\u7BC6\u6869\u5E84\u88C5\u5986\u649E\u58EE\u72B6\u690E\u9525\u8FFD\u8D58\u5760\u7F00\u8C06\u51C6\u6349\u62D9\u5353\u684C\u7422\u8301\u914C\u5544\u7740\u707C\u6D4A\u5179\u54A8\u8D44\u59FF\u6ECB\u6DC4\u5B5C\u7D2B\u4ED4\u7C7D\u6ED3\u5B50\u81EA\u6E0D\u5B57\u9B03\u68D5\u8E2A\u5B97\u7EFC\u603B\u7EB5\u90B9\u8D70\u594F\u63CD\u79DF\u8DB3\u5352\u65CF\u7956\u8BC5\u963B\u7EC4\u94BB\u7E82\u5634\u9189\u6700\u7F6A\u5C0A\u9075\u6628\u5DE6\u4F50\u67DE\u505A\u4F5C\u5750\u5EA7\"],\n[\"d840\",\"\u8C38\",8,\"\u8C42\u8C43\u8C44\u8C45\u8C48\u8C4A\u8C4B\u8C4D\",7,\"\u8C56\u8C57\u8C58\u8C59\u8C5B\",5,\"\u8C63\",6,\"\u8C6C\",6,\"\u8C74\u8C75\u8C76\u8C77\u8C7B\",6,\"\u8C83\u8C84\u8C86\u8C87\"],\n[\"d880\",\"\u8C88\u8C8B\u8C8D\",6,\"\u8C95\u8C96\u8C97\u8C99\",20,\"\u4E8D\u4E0C\u5140\u4E10\u5EFF\u5345\u4E15\u4E98\u4E1E\u9B32\u5B6C\u5669\u4E28\u79BA\u4E3F\u5315\u4E47\u592D\u723B\u536E\u6C10\u56DF\u80E4\u9997\u6BD3\u777E\u9F17\u4E36\u4E9F\u9F10\u4E5C\u4E69\u4E93\u8288\u5B5B\u556C\u560F\u4EC4\u538D\u539D\u53A3\u53A5\u53AE\u9765\u8D5D\u531A\u53F5\u5326\u532E\u533E\u8D5C\u5366\u5363\u5202\u5208\u520E\u522D\u5233\u523F\u5240\u524C\u525E\u5261\u525C\u84AF\u527D\u5282\u5281\u5290\u5293\u5182\u7F54\u4EBB\u4EC3\u4EC9\u4EC2\u4EE8\u4EE1\u4EEB\u4EDE\u4F1B\u4EF3\u4F22\u4F64\u4EF5\u4F25\u4F27\u4F09\u4F2B\u4F5E\u4F67\u6538\u4F5A\u4F5D\"],\n[\"d940\",\"\u8CAE\",62],\n[\"d980\",\"\u8CED\",32,\"\u4F5F\u4F57\u4F32\u4F3D\u4F76\u4F74\u4F91\u4F89\u4F83\u4F8F\u4F7E\u4F7B\u4FAA\u4F7C\u4FAC\u4F94\u4FE6\u4FE8\u4FEA\u4FC5\u4FDA\u4FE3\u4FDC\u4FD1\u4FDF\u4FF8\u5029\u504C\u4FF3\u502C\u500F\u502E\u502D\u4FFE\u501C\u500C\u5025\u5028\u507E\u5043\u5055\u5048\u504E\u506C\u507B\u50A5\u50A7\u50A9\u50BA\u50D6\u5106\u50ED\u50EC\u50E6\u50EE\u5107\u510B\u4EDD\u6C3D\u4F58\u4F65\u4FCE\u9FA0\u6C46\u7C74\u516E\u5DFD\u9EC9\u9998\u5181\u5914\u52F9\u530D\u8A07\u5310\u51EB\u5919\u5155\u4EA0\u5156\u4EB3\u886E\u88A4\u4EB5\u8114\u88D2\u7980\u5B34\u8803\u7FB8\u51AB\u51B1\u51BD\u51BC\"],\n[\"da40\",\"\u8D0E\",14,\"\u8D20\u8D51\u8D52\u8D57\u8D5F\u8D65\u8D68\u8D69\u8D6A\u8D6C\u8D6E\u8D6F\u8D71\u8D72\u8D78\",8,\"\u8D82\u8D83\u8D86\u8D87\u8D88\u8D89\u8D8C\",4,\"\u8D92\u8D93\u8D95\",9,\"\u8DA0\u8DA1\"],\n[\"da80\",\"\u8DA2\u8DA4\",12,\"\u8DB2\u8DB6\u8DB7\u8DB9\u8DBB\u8DBD\u8DC0\u8DC1\u8DC2\u8DC5\u8DC7\u8DC8\u8DC9\u8DCA\u8DCD\u8DD0\u8DD2\u8DD3\u8DD4\u51C7\u5196\u51A2\u51A5\u8BA0\u8BA6\u8BA7\u8BAA\u8BB4\u8BB5\u8BB7\u8BC2\u8BC3\u8BCB\u8BCF\u8BCE\u8BD2\u8BD3\u8BD4\u8BD6\u8BD8\u8BD9\u8BDC\u8BDF\u8BE0\u8BE4\u8BE8\u8BE9\u8BEE\u8BF0\u8BF3\u8BF6\u8BF9\u8BFC\u8BFF\u8C00\u8C02\u8C04\u8C07\u8C0C\u8C0F\u8C11\u8C12\u8C14\u8C15\u8C16\u8C19\u8C1B\u8C18\u8C1D\u8C1F\u8C20\u8C21\u8C25\u8C27\u8C2A\u8C2B\u8C2E\u8C2F\u8C32\u8C33\u8C35\u8C36\u5369\u537A\u961D\u9622\u9621\u9631\u962A\u963D\u963C\u9642\u9649\u9654\u965F\u9667\u966C\u9672\u9674\u9688\u968D\u9697\u96B0\u9097\u909B\u909D\u9099\u90AC\u90A1\u90B4\u90B3\u90B6\u90BA\"],\n[\"db40\",\"\u8DD5\u8DD8\u8DD9\u8DDC\u8DE0\u8DE1\u8DE2\u8DE5\u8DE6\u8DE7\u8DE9\u8DED\u8DEE\u8DF0\u8DF1\u8DF2\u8DF4\u8DF6\u8DFC\u8DFE\",6,\"\u8E06\u8E07\u8E08\u8E0B\u8E0D\u8E0E\u8E10\u8E11\u8E12\u8E13\u8E15\",7,\"\u8E20\u8E21\u8E24\",4,\"\u8E2B\u8E2D\u8E30\u8E32\u8E33\u8E34\u8E36\u8E37\u8E38\u8E3B\u8E3C\u8E3E\"],\n[\"db80\",\"\u8E3F\u8E43\u8E45\u8E46\u8E4C\",4,\"\u8E53\",5,\"\u8E5A\",11,\"\u8E67\u8E68\u8E6A\u8E6B\u8E6E\u8E71\u90B8\u90B0\u90CF\u90C5\u90BE\u90D0\u90C4\u90C7\u90D3\u90E6\u90E2\u90DC\u90D7\u90DB\u90EB\u90EF\u90FE\u9104\u9122\u911E\u9123\u9131\u912F\u9139\u9143\u9146\u520D\u5942\u52A2\u52AC\u52AD\u52BE\u54FF\u52D0\u52D6\u52F0\u53DF\u71EE\u77CD\u5EF4\u51F5\u51FC\u9B2F\u53B6\u5F01\u755A\u5DEF\u574C\u57A9\u57A1\u587E\u58BC\u58C5\u58D1\u5729\u572C\u572A\u5733\u5739\u572E\u572F\u575C\u573B\u5742\u5769\u5785\u576B\u5786\u577C\u577B\u5768\u576D\u5776\u5773\u57AD\u57A4\u578C\u57B2\u57CF\u57A7\u57B4\u5793\u57A0\u57D5\u57D8\u57DA\u57D9\u57D2\u57B8\u57F4\u57EF\u57F8\u57E4\u57DD\"],\n[\"dc40\",\"\u8E73\u8E75\u8E77\",4,\"\u8E7D\u8E7E\u8E80\u8E82\u8E83\u8E84\u8E86\u8E88\",6,\"\u8E91\u8E92\u8E93\u8E95\",6,\"\u8E9D\u8E9F\",11,\"\u8EAD\u8EAE\u8EB0\u8EB1\u8EB3\",6,\"\u8EBB\",7],\n[\"dc80\",\"\u8EC3\",10,\"\u8ECF\",21,\"\u580B\u580D\u57FD\u57ED\u5800\u581E\u5819\u5844\u5820\u5865\u586C\u5881\u5889\u589A\u5880\u99A8\u9F19\u61FF\u8279\u827D\u827F\u828F\u828A\u82A8\u8284\u828E\u8291\u8297\u8299\u82AB\u82B8\u82BE\u82B0\u82C8\u82CA\u82E3\u8298\u82B7\u82AE\u82CB\u82CC\u82C1\u82A9\u82B4\u82A1\u82AA\u829F\u82C4\u82CE\u82A4\u82E1\u8309\u82F7\u82E4\u830F\u8307\u82DC\u82F4\u82D2\u82D8\u830C\u82FB\u82D3\u8311\u831A\u8306\u8314\u8315\u82E0\u82D5\u831C\u8351\u835B\u835C\u8308\u8392\u833C\u8334\u8331\u839B\u835E\u832F\u834F\u8347\u8343\u835F\u8340\u8317\u8360\u832D\u833A\u8333\u8366\u8365\"],\n[\"dd40\",\"\u8EE5\",62],\n[\"dd80\",\"\u8F24\",32,\"\u8368\u831B\u8369\u836C\u836A\u836D\u836E\u83B0\u8378\u83B3\u83B4\u83A0\u83AA\u8393\u839C\u8385\u837C\u83B6\u83A9\u837D\u83B8\u837B\u8398\u839E\u83A8\u83BA\u83BC\u83C1\u8401\u83E5\u83D8\u5807\u8418\u840B\u83DD\u83FD\u83D6\u841C\u8438\u8411\u8406\u83D4\u83DF\u840F\u8403\u83F8\u83F9\u83EA\u83C5\u83C0\u8426\u83F0\u83E1\u845C\u8451\u845A\u8459\u8473\u8487\u8488\u847A\u8489\u8478\u843C\u8446\u8469\u8476\u848C\u848E\u8431\u846D\u84C1\u84CD\u84D0\u84E6\u84BD\u84D3\u84CA\u84BF\u84BA\u84E0\u84A1\u84B9\u84B4\u8497\u84E5\u84E3\u850C\u750D\u8538\u84F0\u8539\u851F\u853A\"],\n[\"de40\",\"\u8F45\",32,\"\u8F6A\u8F80\u8F8C\u8F92\u8F9D\u8FA0\u8FA1\u8FA2\u8FA4\u8FA5\u8FA6\u8FA7\u8FAA\u8FAC\u8FAD\u8FAE\u8FAF\u8FB2\u8FB3\u8FB4\u8FB5\u8FB7\u8FB8\u8FBA\u8FBB\u8FBC\u8FBF\u8FC0\u8FC3\u8FC6\"],\n[\"de80\",\"\u8FC9\",4,\"\u8FCF\u8FD2\u8FD6\u8FD7\u8FDA\u8FE0\u8FE1\u8FE3\u8FE7\u8FEC\u8FEF\u8FF1\u8FF2\u8FF4\u8FF5\u8FF6\u8FFA\u8FFB\u8FFC\u8FFE\u8FFF\u9007\u9008\u900C\u900E\u9013\u9015\u9018\u8556\u853B\u84FF\u84FC\u8559\u8548\u8568\u8564\u855E\u857A\u77A2\u8543\u8572\u857B\u85A4\u85A8\u8587\u858F\u8579\u85AE\u859C\u8585\u85B9\u85B7\u85B0\u85D3\u85C1\u85DC\u85FF\u8627\u8605\u8629\u8616\u863C\u5EFE\u5F08\u593C\u5941\u8037\u5955\u595A\u5958\u530F\u5C22\u5C25\u5C2C\u5C34\u624C\u626A\u629F\u62BB\u62CA\u62DA\u62D7\u62EE\u6322\u62F6\u6339\u634B\u6343\u63AD\u63F6\u6371\u637A\u638E\u63B4\u636D\u63AC\u638A\u6369\u63AE\u63BC\u63F2\u63F8\u63E0\u63FF\u63C4\u63DE\u63CE\u6452\u63C6\u63BE\u6445\u6441\u640B\u641B\u6420\u640C\u6426\u6421\u645E\u6484\u646D\u6496\"],\n[\"df40\",\"\u9019\u901C\u9023\u9024\u9025\u9027\",5,\"\u9030\",4,\"\u9037\u9039\u903A\u903D\u903F\u9040\u9043\u9045\u9046\u9048\",4,\"\u904E\u9054\u9055\u9056\u9059\u905A\u905C\",5,\"\u9064\u9066\u9067\u9069\u906A\u906B\u906C\u906F\",4,\"\u9076\",6,\"\u907E\u9081\"],\n[\"df80\",\"\u9084\u9085\u9086\u9087\u9089\u908A\u908C\",4,\"\u9092\u9094\u9096\u9098\u909A\u909C\u909E\u909F\u90A0\u90A4\u90A5\u90A7\u90A8\u90A9\u90AB\u90AD\u90B2\u90B7\u90BC\u90BD\u90BF\u90C0\u647A\u64B7\u64B8\u6499\u64BA\u64C0\u64D0\u64D7\u64E4\u64E2\u6509\u6525\u652E\u5F0B\u5FD2\u7519\u5F11\u535F\u53F1\u53FD\u53E9\u53E8\u53FB\u5412\u5416\u5406\u544B\u5452\u5453\u5454\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482\u5494\u5477\u5471\u5464\u549A\u549B\u5484\u5476\u5466\u549D\u54D0\u54AD\u54C2\u54B4\u54D2\u54A7\u54A6\u54D3\u54D4\u5472\u54A3\u54D5\u54BB\u54BF\u54CC\u54D9\u54DA\u54DC\u54A9\u54AA\u54A4\u54DD\u54CF\u54DE\u551B\u54E7\u5520\u54FD\u5514\u54F3\u5522\u5523\u550F\u5511\u5527\u552A\u5567\u558F\u55B5\u5549\u556D\u5541\u5555\u553F\u5550\u553C\"],\n[\"e040\",\"\u90C2\u90C3\u90C6\u90C8\u90C9\u90CB\u90CC\u90CD\u90D2\u90D4\u90D5\u90D6\u90D8\u90D9\u90DA\u90DE\u90DF\u90E0\u90E3\u90E4\u90E5\u90E9\u90EA\u90EC\u90EE\u90F0\u90F1\u90F2\u90F3\u90F5\u90F6\u90F7\u90F9\u90FA\u90FB\u90FC\u90FF\u9100\u9101\u9103\u9105\",19,\"\u911A\u911B\u911C\"],\n[\"e080\",\"\u911D\u911F\u9120\u9121\u9124\",10,\"\u9130\u9132\",6,\"\u913A\",8,\"\u9144\u5537\u5556\u5575\u5576\u5577\u5533\u5530\u555C\u558B\u55D2\u5583\u55B1\u55B9\u5588\u5581\u559F\u557E\u55D6\u5591\u557B\u55DF\u55BD\u55BE\u5594\u5599\u55EA\u55F7\u55C9\u561F\u55D1\u55EB\u55EC\u55D4\u55E6\u55DD\u55C4\u55EF\u55E5\u55F2\u55F3\u55CC\u55CD\u55E8\u55F5\u55E4\u8F94\u561E\u5608\u560C\u5601\u5624\u5623\u55FE\u5600\u5627\u562D\u5658\u5639\u5657\u562C\u564D\u5662\u5659\u565C\u564C\u5654\u5686\u5664\u5671\u566B\u567B\u567C\u5685\u5693\u56AF\u56D4\u56D7\u56DD\u56E1\u56F5\u56EB\u56F9\u56FF\u5704\u570A\u5709\u571C\u5E0F\u5E19\u5E14\u5E11\u5E31\u5E3B\u5E3C\"],\n[\"e140\",\"\u9145\u9147\u9148\u9151\u9153\u9154\u9155\u9156\u9158\u9159\u915B\u915C\u915F\u9160\u9166\u9167\u9168\u916B\u916D\u9173\u917A\u917B\u917C\u9180\",4,\"\u9186\u9188\u918A\u918E\u918F\u9193\",6,\"\u919C\",5,\"\u91A4\",5,\"\u91AB\u91AC\u91B0\u91B1\u91B2\u91B3\u91B6\u91B7\u91B8\u91B9\u91BB\"],\n[\"e180\",\"\u91BC\",10,\"\u91C8\u91CB\u91D0\u91D2\",9,\"\u91DD\",8,\"\u5E37\u5E44\u5E54\u5E5B\u5E5E\u5E61\u5C8C\u5C7A\u5C8D\u5C90\u5C96\u5C88\u5C98\u5C99\u5C91\u5C9A\u5C9C\u5CB5\u5CA2\u5CBD\u5CAC\u5CAB\u5CB1\u5CA3\u5CC1\u5CB7\u5CC4\u5CD2\u5CE4\u5CCB\u5CE5\u5D02\u5D03\u5D27\u5D26\u5D2E\u5D24\u5D1E\u5D06\u5D1B\u5D58\u5D3E\u5D34\u5D3D\u5D6C\u5D5B\u5D6F\u5D5D\u5D6B\u5D4B\u5D4A\u5D69\u5D74\u5D82\u5D99\u5D9D\u8C73\u5DB7\u5DC5\u5F73\u5F77\u5F82\u5F87\u5F89\u5F8C\u5F95\u5F99\u5F9C\u5FA8\u5FAD\u5FB5\u5FBC\u8862\u5F61\u72AD\u72B0\u72B4\u72B7\u72B8\u72C3\u72C1\u72CE\u72CD\u72D2\u72E8\u72EF\u72E9\u72F2\u72F4\u72F7\u7301\u72F3\u7303\u72FA\"],\n[\"e240\",\"\u91E6\",62],\n[\"e280\",\"\u9225\",32,\"\u72FB\u7317\u7313\u7321\u730A\u731E\u731D\u7315\u7322\u7339\u7325\u732C\u7338\u7331\u7350\u734D\u7357\u7360\u736C\u736F\u737E\u821B\u5925\u98E7\u5924\u5902\u9963\u9967\",5,\"\u9974\u9977\u997D\u9980\u9984\u9987\u998A\u998D\u9990\u9991\u9993\u9994\u9995\u5E80\u5E91\u5E8B\u5E96\u5EA5\u5EA0\u5EB9\u5EB5\u5EBE\u5EB3\u8D53\u5ED2\u5ED1\u5EDB\u5EE8\u5EEA\u81BA\u5FC4\u5FC9\u5FD6\u5FCF\u6003\u5FEE\u6004\u5FE1\u5FE4\u5FFE\u6005\u6006\u5FEA\u5FED\u5FF8\u6019\u6035\u6026\u601B\u600F\u600D\u6029\u602B\u600A\u603F\u6021\u6078\u6079\u607B\u607A\u6042\"],\n[\"e340\",\"\u9246\",45,\"\u9275\",16],\n[\"e380\",\"\u9286\",7,\"\u928F\",24,\"\u606A\u607D\u6096\u609A\u60AD\u609D\u6083\u6092\u608C\u609B\u60EC\u60BB\u60B1\u60DD\u60D8\u60C6\u60DA\u60B4\u6120\u6126\u6115\u6123\u60F4\u6100\u610E\u612B\u614A\u6175\u61AC\u6194\u61A7\u61B7\u61D4\u61F5\u5FDD\u96B3\u95E9\u95EB\u95F1\u95F3\u95F5\u95F6\u95FC\u95FE\u9603\u9604\u9606\u9608\u960A\u960B\u960C\u960D\u960F\u9612\u9615\u9616\u9617\u9619\u961A\u4E2C\u723F\u6215\u6C35\u6C54\u6C5C\u6C4A\u6CA3\u6C85\u6C90\u6C94\u6C8C\u6C68\u6C69\u6C74\u6C76\u6C86\u6CA9\u6CD0\u6CD4\u6CAD\u6CF7\u6CF8\u6CF1\u6CD7\u6CB2\u6CE0\u6CD6\u6CFA\u6CEB\u6CEE\u6CB1\u6CD3\u6CEF\u6CFE\"],\n[\"e440\",\"\u92A8\",5,\"\u92AF\",24,\"\u92C9\",31],\n[\"e480\",\"\u92E9\",32,\"\u6D39\u6D27\u6D0C\u6D43\u6D48\u6D07\u6D04\u6D19\u6D0E\u6D2B\u6D4D\u6D2E\u6D35\u6D1A\u6D4F\u6D52\u6D54\u6D33\u6D91\u6D6F\u6D9E\u6DA0\u6D5E\u6D93\u6D94\u6D5C\u6D60\u6D7C\u6D63\u6E1A\u6DC7\u6DC5\u6DDE\u6E0E\u6DBF\u6DE0\u6E11\u6DE6\u6DDD\u6DD9\u6E16\u6DAB\u6E0C\u6DAE\u6E2B\u6E6E\u6E4E\u6E6B\u6EB2\u6E5F\u6E86\u6E53\u6E54\u6E32\u6E25\u6E44\u6EDF\u6EB1\u6E98\u6EE0\u6F2D\u6EE2\u6EA5\u6EA7\u6EBD\u6EBB\u6EB7\u6ED7\u6EB4\u6ECF\u6E8F\u6EC2\u6E9F\u6F62\u6F46\u6F47\u6F24\u6F15\u6EF9\u6F2F\u6F36\u6F4B\u6F74\u6F2A\u6F09\u6F29\u6F89\u6F8D\u6F8C\u6F78\u6F72\u6F7C\u6F7A\u6FD1\"],\n[\"e540\",\"\u930A\",51,\"\u933F\",10],\n[\"e580\",\"\u934A\",31,\"\u936B\u6FC9\u6FA7\u6FB9\u6FB6\u6FC2\u6FE1\u6FEE\u6FDE\u6FE0\u6FEF\u701A\u7023\u701B\u7039\u7035\u704F\u705E\u5B80\u5B84\u5B95\u5B93\u5BA5\u5BB8\u752F\u9A9E\u6434\u5BE4\u5BEE\u8930\u5BF0\u8E47\u8B07\u8FB6\u8FD3\u8FD5\u8FE5\u8FEE\u8FE4\u8FE9\u8FE6\u8FF3\u8FE8\u9005\u9004\u900B\u9026\u9011\u900D\u9016\u9021\u9035\u9036\u902D\u902F\u9044\u9051\u9052\u9050\u9068\u9058\u9062\u905B\u66B9\u9074\u907D\u9082\u9088\u9083\u908B\u5F50\u5F57\u5F56\u5F58\u5C3B\u54AB\u5C50\u5C59\u5B71\u5C63\u5C66\u7FBC\u5F2A\u5F29\u5F2D\u8274\u5F3C\u9B3B\u5C6E\u5981\u5983\u598D\u59A9\u59AA\u59A3\"],\n[\"e640\",\"\u936C\",34,\"\u9390\",27],\n[\"e680\",\"\u93AC\",29,\"\u93CB\u93CC\u93CD\u5997\u59CA\u59AB\u599E\u59A4\u59D2\u59B2\u59AF\u59D7\u59BE\u5A05\u5A06\u59DD\u5A08\u59E3\u59D8\u59F9\u5A0C\u5A09\u5A32\u5A34\u5A11\u5A23\u5A13\u5A40\u5A67\u5A4A\u5A55\u5A3C\u5A62\u5A75\u80EC\u5AAA\u5A9B\u5A77\u5A7A\u5ABE\u5AEB\u5AB2\u5AD2\u5AD4\u5AB8\u5AE0\u5AE3\u5AF1\u5AD6\u5AE6\u5AD8\u5ADC\u5B09\u5B17\u5B16\u5B32\u5B37\u5B40\u5C15\u5C1C\u5B5A\u5B65\u5B73\u5B51\u5B53\u5B62\u9A75\u9A77\u9A78\u9A7A\u9A7F\u9A7D\u9A80\u9A81\u9A85\u9A88\u9A8A\u9A90\u9A92\u9A93\u9A96\u9A98\u9A9B\u9A9C\u9A9D\u9A9F\u9AA0\u9AA2\u9AA3\u9AA5\u9AA7\u7E9F\u7EA1\u7EA3\u7EA5\u7EA8\u7EA9\"],\n[\"e740\",\"\u93CE\",7,\"\u93D7\",54],\n[\"e780\",\"\u940E\",32,\"\u7EAD\u7EB0\u7EBE\u7EC0\u7EC1\u7EC2\u7EC9\u7ECB\u7ECC\u7ED0\u7ED4\u7ED7\u7EDB\u7EE0\u7EE1\u7EE8\u7EEB\u7EEE\u7EEF\u7EF1\u7EF2\u7F0D\u7EF6\u7EFA\u7EFB\u7EFE\u7F01\u7F02\u7F03\u7F07\u7F08\u7F0B\u7F0C\u7F0F\u7F11\u7F12\u7F17\u7F19\u7F1C\u7F1B\u7F1F\u7F21\",6,\"\u7F2A\u7F2B\u7F2C\u7F2D\u7F2F\",4,\"\u7F35\u5E7A\u757F\u5DDB\u753E\u9095\u738E\u7391\u73AE\u73A2\u739F\u73CF\u73C2\u73D1\u73B7\u73B3\u73C0\u73C9\u73C8\u73E5\u73D9\u987C\u740A\u73E9\u73E7\u73DE\u73BA\u73F2\u740F\u742A\u745B\u7426\u7425\u7428\u7430\u742E\u742C\"],\n[\"e840\",\"\u942F\",14,\"\u943F\",43,\"\u946C\u946D\u946E\u946F\"],\n[\"e880\",\"\u9470\",20,\"\u9491\u9496\u9498\u94C7\u94CF\u94D3\u94D4\u94DA\u94E6\u94FB\u951C\u9520\u741B\u741A\u7441\u745C\u7457\u7455\u7459\u7477\u746D\u747E\u749C\u748E\u7480\u7481\u7487\u748B\u749E\u74A8\u74A9\u7490\u74A7\u74D2\u74BA\u97EA\u97EB\u97EC\u674C\u6753\u675E\u6748\u6769\u67A5\u6787\u676A\u6773\u6798\u67A7\u6775\u67A8\u679E\u67AD\u678B\u6777\u677C\u67F0\u6809\u67D8\u680A\u67E9\u67B0\u680C\u67D9\u67B5\u67DA\u67B3\u67DD\u6800\u67C3\u67B8\u67E2\u680E\u67C1\u67FD\u6832\u6833\u6860\u6861\u684E\u6862\u6844\u6864\u6883\u681D\u6855\u6866\u6841\u6867\u6840\u683E\u684A\u6849\u6829\u68B5\u688F\u6874\u6877\u6893\u686B\u68C2\u696E\u68FC\u691F\u6920\u68F9\"],\n[\"e940\",\"\u9527\u9533\u953D\u9543\u9548\u954B\u9555\u955A\u9560\u956E\u9574\u9575\u9577\",7,\"\u9580\",42],\n[\"e980\",\"\u95AB\",32,\"\u6924\u68F0\u690B\u6901\u6957\u68E3\u6910\u6971\u6939\u6960\u6942\u695D\u6984\u696B\u6980\u6998\u6978\u6934\u69CC\u6987\u6988\u69CE\u6989\u6966\u6963\u6979\u699B\u69A7\u69BB\u69AB\u69AD\u69D4\u69B1\u69C1\u69CA\u69DF\u6995\u69E0\u698D\u69FF\u6A2F\u69ED\u6A17\u6A18\u6A65\u69F2\u6A44\u6A3E\u6AA0\u6A50\u6A5B\u6A35\u6A8E\u6A79\u6A3D\u6A28\u6A58\u6A7C\u6A91\u6A90\u6AA9\u6A97\u6AAB\u7337\u7352\u6B81\u6B82\u6B87\u6B84\u6B92\u6B93\u6B8D\u6B9A\u6B9B\u6BA1\u6BAA\u8F6B\u8F6D\u8F71\u8F72\u8F73\u8F75\u8F76\u8F78\u8F77\u8F79\u8F7A\u8F7C\u8F7E\u8F81\u8F82\u8F84\u8F87\u8F8B\"],\n[\"ea40\",\"\u95CC\",27,\"\u95EC\u95FF\u9607\u9613\u9618\u961B\u961E\u9620\u9623\",6,\"\u962B\u962C\u962D\u962F\u9630\u9637\u9638\u9639\u963A\u963E\u9641\u9643\u964A\u964E\u964F\u9651\u9652\u9653\u9656\u9657\"],\n[\"ea80\",\"\u9658\u9659\u965A\u965C\u965D\u965E\u9660\u9663\u9665\u9666\u966B\u966D\",4,\"\u9673\u9678\",12,\"\u9687\u9689\u968A\u8F8D\u8F8E\u8F8F\u8F98\u8F9A\u8ECE\u620B\u6217\u621B\u621F\u6222\u6221\u6225\u6224\u622C\u81E7\u74EF\u74F4\u74FF\u750F\u7511\u7513\u6534\u65EE\u65EF\u65F0\u660A\u6619\u6772\u6603\u6615\u6600\u7085\u66F7\u661D\u6634\u6631\u6636\u6635\u8006\u665F\u6654\u6641\u664F\u6656\u6661\u6657\u6677\u6684\u668C\u66A7\u669D\u66BE\u66DB\u66DC\u66E6\u66E9\u8D32\u8D33\u8D36\u8D3B\u8D3D\u8D40\u8D45\u8D46\u8D48\u8D49\u8D47\u8D4D\u8D55\u8D59\u89C7\u89CA\u89CB\u89CC\u89CE\u89CF\u89D0\u89D1\u726E\u729F\u725D\u7266\u726F\u727E\u727F\u7284\u728B\u728D\u728F\u7292\u6308\u6332\u63B0\"],\n[\"eb40\",\"\u968C\u968E\u9691\u9692\u9693\u9695\u9696\u969A\u969B\u969D\",9,\"\u96A8\",7,\"\u96B1\u96B2\u96B4\u96B5\u96B7\u96B8\u96BA\u96BB\u96BF\u96C2\u96C3\u96C8\u96CA\u96CB\u96D0\u96D1\u96D3\u96D4\u96D6\",9,\"\u96E1\",6,\"\u96EB\"],\n[\"eb80\",\"\u96EC\u96ED\u96EE\u96F0\u96F1\u96F2\u96F4\u96F5\u96F8\u96FA\u96FB\u96FC\u96FD\u96FF\u9702\u9703\u9705\u970A\u970B\u970C\u9710\u9711\u9712\u9714\u9715\u9717\",4,\"\u971D\u971F\u9720\u643F\u64D8\u8004\u6BEA\u6BF3\u6BFD\u6BF5\u6BF9\u6C05\u6C07\u6C06\u6C0D\u6C15\u6C18\u6C19\u6C1A\u6C21\u6C29\u6C24\u6C2A\u6C32\u6535\u6555\u656B\u724D\u7252\u7256\u7230\u8662\u5216\u809F\u809C\u8093\u80BC\u670A\u80BD\u80B1\u80AB\u80AD\u80B4\u80B7\u80E7\u80E8\u80E9\u80EA\u80DB\u80C2\u80C4\u80D9\u80CD\u80D7\u6710\u80DD\u80EB\u80F1\u80F4\u80ED\u810D\u810E\u80F2\u80FC\u6715\u8112\u8C5A\u8136\u811E\u812C\u8118\u8132\u8148\u814C\u8153\u8174\u8159\u815A\u8171\u8160\u8169\u817C\u817D\u816D\u8167\u584D\u5AB5\u8188\u8182\u8191\u6ED5\u81A3\u81AA\u81CC\u6726\u81CA\u81BB\"],\n[\"ec40\",\"\u9721\",8,\"\u972B\u972C\u972E\u972F\u9731\u9733\",4,\"\u973A\u973B\u973C\u973D\u973F\",18,\"\u9754\u9755\u9757\u9758\u975A\u975C\u975D\u975F\u9763\u9764\u9766\u9767\u9768\u976A\",7],\n[\"ec80\",\"\u9772\u9775\u9777\",4,\"\u977D\",7,\"\u9786\",4,\"\u978C\u978E\u978F\u9790\u9793\u9795\u9796\u9797\u9799\",4,\"\u81C1\u81A6\u6B24\u6B37\u6B39\u6B43\u6B46\u6B59\u98D1\u98D2\u98D3\u98D5\u98D9\u98DA\u6BB3\u5F40\u6BC2\u89F3\u6590\u9F51\u6593\u65BC\u65C6\u65C4\u65C3\u65CC\u65CE\u65D2\u65D6\u7080\u709C\u7096\u709D\u70BB\u70C0\u70B7\u70AB\u70B1\u70E8\u70CA\u7110\u7113\u7116\u712F\u7131\u7173\u715C\u7168\u7145\u7172\u714A\u7178\u717A\u7198\u71B3\u71B5\u71A8\u71A0\u71E0\u71D4\u71E7\u71F9\u721D\u7228\u706C\u7118\u7166\u71B9\u623E\u623D\u6243\u6248\u6249\u793B\u7940\u7946\u7949\u795B\u795C\u7953\u795A\u7962\u7957\u7960\u796F\u7967\u797A\u7985\u798A\u799A\u79A7\u79B3\u5FD1\u5FD0\"],\n[\"ed40\",\"\u979E\u979F\u97A1\u97A2\u97A4\",6,\"\u97AC\u97AE\u97B0\u97B1\u97B3\u97B5\",46],\n[\"ed80\",\"\u97E4\u97E5\u97E8\u97EE\",4,\"\u97F4\u97F7\",23,\"\u603C\u605D\u605A\u6067\u6041\u6059\u6063\u60AB\u6106\u610D\u615D\u61A9\u619D\u61CB\u61D1\u6206\u8080\u807F\u6C93\u6CF6\u6DFC\u77F6\u77F8\u7800\u7809\u7817\u7818\u7811\u65AB\u782D\u781C\u781D\u7839\u783A\u783B\u781F\u783C\u7825\u782C\u7823\u7829\u784E\u786D\u7856\u7857\u7826\u7850\u7847\u784C\u786A\u789B\u7893\u789A\u7887\u789C\u78A1\u78A3\u78B2\u78B9\u78A5\u78D4\u78D9\u78C9\u78EC\u78F2\u7905\u78F4\u7913\u7924\u791E\u7934\u9F9B\u9EF9\u9EFB\u9EFC\u76F1\u7704\u770D\u76F9\u7707\u7708\u771A\u7722\u7719\u772D\u7726\u7735\u7738\u7750\u7751\u7747\u7743\u775A\u7768\"],\n[\"ee40\",\"\u980F\",62],\n[\"ee80\",\"\u984E\",32,\"\u7762\u7765\u777F\u778D\u777D\u7780\u778C\u7791\u779F\u77A0\u77B0\u77B5\u77BD\u753A\u7540\u754E\u754B\u7548\u755B\u7572\u7579\u7583\u7F58\u7F61\u7F5F\u8A48\u7F68\u7F74\u7F71\u7F79\u7F81\u7F7E\u76CD\u76E5\u8832\u9485\u9486\u9487\u948B\u948A\u948C\u948D\u948F\u9490\u9494\u9497\u9495\u949A\u949B\u949C\u94A3\u94A4\u94AB\u94AA\u94AD\u94AC\u94AF\u94B0\u94B2\u94B4\u94B6\",4,\"\u94BC\u94BD\u94BF\u94C4\u94C8\",6,\"\u94D0\u94D1\u94D2\u94D5\u94D6\u94D7\u94D9\u94D8\u94DB\u94DE\u94DF\u94E0\u94E2\u94E4\u94E5\u94E7\u94E8\u94EA\"],\n[\"ef40\",\"\u986F\",5,\"\u988B\u988E\u9892\u9895\u9899\u98A3\u98A8\",37,\"\u98CF\u98D0\u98D4\u98D6\u98D7\u98DB\u98DC\u98DD\u98E0\",4],\n[\"ef80\",\"\u98E5\u98E6\u98E9\",30,\"\u94E9\u94EB\u94EE\u94EF\u94F3\u94F4\u94F5\u94F7\u94F9\u94FC\u94FD\u94FF\u9503\u9502\u9506\u9507\u9509\u950A\u950D\u950E\u950F\u9512\",4,\"\u9518\u951B\u951D\u951E\u951F\u9522\u952A\u952B\u9529\u952C\u9531\u9532\u9534\u9536\u9537\u9538\u953C\u953E\u953F\u9542\u9535\u9544\u9545\u9546\u9549\u954C\u954E\u954F\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955B\u955E\u955F\u955D\u9561\u9562\u9564\",8,\"\u956F\u9571\u9572\u9573\u953A\u77E7\u77EC\u96C9\u79D5\u79ED\u79E3\u79EB\u7A06\u5D47\u7A03\u7A02\u7A1E\u7A14\"],\n[\"f040\",\"\u9908\",4,\"\u990E\u990F\u9911\",28,\"\u992F\",26],\n[\"f080\",\"\u994A\",9,\"\u9956\",12,\"\u9964\u9966\u9973\u9978\u9979\u997B\u997E\u9982\u9983\u9989\u7A39\u7A37\u7A51\u9ECF\u99A5\u7A70\u7688\u768E\u7693\u7699\u76A4\u74DE\u74E0\u752C\u9E20\u9E22\u9E28\",4,\"\u9E32\u9E31\u9E36\u9E38\u9E37\u9E39\u9E3A\u9E3E\u9E41\u9E42\u9E44\u9E46\u9E47\u9E48\u9E49\u9E4B\u9E4C\u9E4E\u9E51\u9E55\u9E57\u9E5A\u9E5B\u9E5C\u9E5E\u9E63\u9E66\",6,\"\u9E71\u9E6D\u9E73\u7592\u7594\u7596\u75A0\u759D\u75AC\u75A3\u75B3\u75B4\u75B8\u75C4\u75B1\u75B0\u75C3\u75C2\u75D6\u75CD\u75E3\u75E8\u75E6\u75E4\u75EB\u75E7\u7603\u75F1\u75FC\u75FF\u7610\u7600\u7605\u760C\u7617\u760A\u7625\u7618\u7615\u7619\"],\n[\"f140\",\"\u998C\u998E\u999A\",10,\"\u99A6\u99A7\u99A9\",47],\n[\"f180\",\"\u99D9\",32,\"\u761B\u763C\u7622\u7620\u7640\u762D\u7630\u763F\u7635\u7643\u763E\u7633\u764D\u765E\u7654\u765C\u7656\u766B\u766F\u7FCA\u7AE6\u7A78\u7A79\u7A80\u7A86\u7A88\u7A95\u7AA6\u7AA0\u7AAC\u7AA8\u7AAD\u7AB3\u8864\u8869\u8872\u887D\u887F\u8882\u88A2\u88C6\u88B7\u88BC\u88C9\u88E2\u88CE\u88E3\u88E5\u88F1\u891A\u88FC\u88E8\u88FE\u88F0\u8921\u8919\u8913\u891B\u890A\u8934\u892B\u8936\u8941\u8966\u897B\u758B\u80E5\u76B2\u76B4\u77DC\u8012\u8014\u8016\u801C\u8020\u8022\u8025\u8026\u8027\u8029\u8028\u8031\u800B\u8035\u8043\u8046\u804D\u8052\u8069\u8071\u8983\u9878\u9880\u9883\"],\n[\"f240\",\"\u99FA\",62],\n[\"f280\",\"\u9A39\",32,\"\u9889\u988C\u988D\u988F\u9894\u989A\u989B\u989E\u989F\u98A1\u98A2\u98A5\u98A6\u864D\u8654\u866C\u866E\u867F\u867A\u867C\u867B\u86A8\u868D\u868B\u86AC\u869D\u86A7\u86A3\u86AA\u8693\u86A9\u86B6\u86C4\u86B5\u86CE\u86B0\u86BA\u86B1\u86AF\u86C9\u86CF\u86B4\u86E9\u86F1\u86F2\u86ED\u86F3\u86D0\u8713\u86DE\u86F4\u86DF\u86D8\u86D1\u8703\u8707\u86F8\u8708\u870A\u870D\u8709\u8723\u873B\u871E\u8725\u872E\u871A\u873E\u8748\u8734\u8731\u8729\u8737\u873F\u8782\u8722\u877D\u877E\u877B\u8760\u8770\u874C\u876E\u878B\u8753\u8763\u877C\u8764\u8759\u8765\u8793\u87AF\u87A8\u87D2\"],\n[\"f340\",\"\u9A5A\",17,\"\u9A72\u9A83\u9A89\u9A8D\u9A8E\u9A94\u9A95\u9A99\u9AA6\u9AA9\",6,\"\u9AB2\u9AB3\u9AB4\u9AB5\u9AB9\u9ABB\u9ABD\u9ABE\u9ABF\u9AC3\u9AC4\u9AC6\",4,\"\u9ACD\u9ACE\u9ACF\u9AD0\u9AD2\u9AD4\u9AD5\u9AD6\u9AD7\u9AD9\u9ADA\u9ADB\u9ADC\"],\n[\"f380\",\"\u9ADD\u9ADE\u9AE0\u9AE2\u9AE3\u9AE4\u9AE5\u9AE7\u9AE8\u9AE9\u9AEA\u9AEC\u9AEE\u9AF0\",8,\"\u9AFA\u9AFC\",6,\"\u9B04\u9B05\u9B06\u87C6\u8788\u8785\u87AD\u8797\u8783\u87AB\u87E5\u87AC\u87B5\u87B3\u87CB\u87D3\u87BD\u87D1\u87C0\u87CA\u87DB\u87EA\u87E0\u87EE\u8816\u8813\u87FE\u880A\u881B\u8821\u8839\u883C\u7F36\u7F42\u7F44\u7F45\u8210\u7AFA\u7AFD\u7B08\u7B03\u7B04\u7B15\u7B0A\u7B2B\u7B0F\u7B47\u7B38\u7B2A\u7B19\u7B2E\u7B31\u7B20\u7B25\u7B24\u7B33\u7B3E\u7B1E\u7B58\u7B5A\u7B45\u7B75\u7B4C\u7B5D\u7B60\u7B6E\u7B7B\u7B62\u7B72\u7B71\u7B90\u7BA6\u7BA7\u7BB8\u7BAC\u7B9D\u7BA8\u7B85\u7BAA\u7B9C\u7BA2\u7BAB\u7BB4\u7BD1\u7BC1\u7BCC\u7BDD\u7BDA\u7BE5\u7BE6\u7BEA\u7C0C\u7BFE\u7BFC\u7C0F\u7C16\u7C0B\"],\n[\"f440\",\"\u9B07\u9B09\",5,\"\u9B10\u9B11\u9B12\u9B14\",10,\"\u9B20\u9B21\u9B22\u9B24\",10,\"\u9B30\u9B31\u9B33\",7,\"\u9B3D\u9B3E\u9B3F\u9B40\u9B46\u9B4A\u9B4B\u9B4C\u9B4E\u9B50\u9B52\u9B53\u9B55\",5],\n[\"f480\",\"\u9B5B\",32,\"\u7C1F\u7C2A\u7C26\u7C38\u7C41\u7C40\u81FE\u8201\u8202\u8204\u81EC\u8844\u8221\u8222\u8223\u822D\u822F\u8228\u822B\u8238\u823B\u8233\u8234\u823E\u8244\u8249\u824B\u824F\u825A\u825F\u8268\u887E\u8885\u8888\u88D8\u88DF\u895E\u7F9D\u7F9F\u7FA7\u7FAF\u7FB0\u7FB2\u7C7C\u6549\u7C91\u7C9D\u7C9C\u7C9E\u7CA2\u7CB2\u7CBC\u7CBD\u7CC1\u7CC7\u7CCC\u7CCD\u7CC8\u7CC5\u7CD7\u7CE8\u826E\u66A8\u7FBF\u7FCE\u7FD5\u7FE5\u7FE1\u7FE6\u7FE9\u7FEE\u7FF3\u7CF8\u7D77\u7DA6\u7DAE\u7E47\u7E9B\u9EB8\u9EB4\u8D73\u8D84\u8D94\u8D91\u8DB1\u8D67\u8D6D\u8C47\u8C49\u914A\u9150\u914E\u914F\u9164\"],\n[\"f540\",\"\u9B7C\",62],\n[\"f580\",\"\u9BBB\",32,\"\u9162\u9161\u9170\u9169\u916F\u917D\u917E\u9172\u9174\u9179\u918C\u9185\u9190\u918D\u9191\u91A2\u91A3\u91AA\u91AD\u91AE\u91AF\u91B5\u91B4\u91BA\u8C55\u9E7E\u8DB8\u8DEB\u8E05\u8E59\u8E69\u8DB5\u8DBF\u8DBC\u8DBA\u8DC4\u8DD6\u8DD7\u8DDA\u8DDE\u8DCE\u8DCF\u8DDB\u8DC6\u8DEC\u8DF7\u8DF8\u8DE3\u8DF9\u8DFB\u8DE4\u8E09\u8DFD\u8E14\u8E1D\u8E1F\u8E2C\u8E2E\u8E23\u8E2F\u8E3A\u8E40\u8E39\u8E35\u8E3D\u8E31\u8E49\u8E41\u8E42\u8E51\u8E52\u8E4A\u8E70\u8E76\u8E7C\u8E6F\u8E74\u8E85\u8E8F\u8E94\u8E90\u8E9C\u8E9E\u8C78\u8C82\u8C8A\u8C85\u8C98\u8C94\u659B\u89D6\u89DE\u89DA\u89DC\"],\n[\"f640\",\"\u9BDC\",62],\n[\"f680\",\"\u9C1B\",32,\"\u89E5\u89EB\u89EF\u8A3E\u8B26\u9753\u96E9\u96F3\u96EF\u9706\u9701\u9708\u970F\u970E\u972A\u972D\u9730\u973E\u9F80\u9F83\u9F85\",5,\"\u9F8C\u9EFE\u9F0B\u9F0D\u96B9\u96BC\u96BD\u96CE\u96D2\u77BF\u96E0\u928E\u92AE\u92C8\u933E\u936A\u93CA\u938F\u943E\u946B\u9C7F\u9C82\u9C85\u9C86\u9C87\u9C88\u7A23\u9C8B\u9C8E\u9C90\u9C91\u9C92\u9C94\u9C95\u9C9A\u9C9B\u9C9E\",5,\"\u9CA5\",4,\"\u9CAB\u9CAD\u9CAE\u9CB0\",7,\"\u9CBA\u9CBB\u9CBC\u9CBD\u9CC4\u9CC5\u9CC6\u9CC7\u9CCA\u9CCB\"],\n[\"f740\",\"\u9C3C\",62],\n[\"f780\",\"\u9C7B\u9C7D\u9C7E\u9C80\u9C83\u9C84\u9C89\u9C8A\u9C8C\u9C8F\u9C93\u9C96\u9C97\u9C98\u9C99\u9C9D\u9CAA\u9CAC\u9CAF\u9CB9\u9CBE\",4,\"\u9CC8\u9CC9\u9CD1\u9CD2\u9CDA\u9CDB\u9CE0\u9CE1\u9CCC\",4,\"\u9CD3\u9CD4\u9CD5\u9CD7\u9CD8\u9CD9\u9CDC\u9CDD\u9CDF\u9CE2\u977C\u9785\u9791\u9792\u9794\u97AF\u97AB\u97A3\u97B2\u97B4\u9AB1\u9AB0\u9AB7\u9E58\u9AB6\u9ABA\u9ABC\u9AC1\u9AC0\u9AC5\u9AC2\u9ACB\u9ACC\u9AD1\u9B45\u9B43\u9B47\u9B49\u9B48\u9B4D\u9B51\u98E8\u990D\u992E\u9955\u9954\u9ADF\u9AE1\u9AE6\u9AEF\u9AEB\u9AFB\u9AED\u9AF9\u9B08\u9B0F\u9B13\u9B1F\u9B23\u9EBD\u9EBE\u7E3B\u9E82\u9E87\u9E88\u9E8B\u9E92\u93D6\u9E9D\u9E9F\u9EDB\u9EDC\u9EDD\u9EE0\u9EDF\u9EE2\u9EE9\u9EE7\u9EE5\u9EEA\u9EEF\u9F22\u9F2C\u9F2F\u9F39\u9F37\u9F3D\u9F3E\u9F44\"],\n[\"f840\",\"\u9CE3\",62],\n[\"f880\",\"\u9D22\",32],\n[\"f940\",\"\u9D43\",62],\n[\"f980\",\"\u9D82\",32],\n[\"fa40\",\"\u9DA3\",62],\n[\"fa80\",\"\u9DE2\",32],\n[\"fb40\",\"\u9E03\",27,\"\u9E24\u9E27\u9E2E\u9E30\u9E34\u9E3B\u9E3C\u9E40\u9E4D\u9E50\u9E52\u9E53\u9E54\u9E56\u9E59\u9E5D\u9E5F\u9E60\u9E61\u9E62\u9E65\u9E6E\u9E6F\u9E72\u9E74\",9,\"\u9E80\"],\n[\"fb80\",\"\u9E81\u9E83\u9E84\u9E85\u9E86\u9E89\u9E8A\u9E8C\",5,\"\u9E94\",8,\"\u9E9E\u9EA0\",5,\"\u9EA7\u9EA8\u9EA9\u9EAA\"],\n[\"fc40\",\"\u9EAB\",8,\"\u9EB5\u9EB6\u9EB7\u9EB9\u9EBA\u9EBC\u9EBF\",4,\"\u9EC5\u9EC6\u9EC7\u9EC8\u9ECA\u9ECB\u9ECC\u9ED0\u9ED2\u9ED3\u9ED5\u9ED6\u9ED7\u9ED9\u9EDA\u9EDE\u9EE1\u9EE3\u9EE4\u9EE6\u9EE8\u9EEB\u9EEC\u9EED\u9EEE\u9EF0\",8,\"\u9EFA\u9EFD\u9EFF\",6],\n[\"fc80\",\"\u9F06\",4,\"\u9F0C\u9F0F\u9F11\u9F12\u9F14\u9F15\u9F16\u9F18\u9F1A\",5,\"\u9F21\u9F23\",8,\"\u9F2D\u9F2E\u9F30\u9F31\"],\n[\"fd40\",\"\u9F32\",4,\"\u9F38\u9F3A\u9F3C\u9F3F\",4,\"\u9F45\",10,\"\u9F52\",38],\n[\"fd80\",\"\u9F79\",5,\"\u9F81\u9F82\u9F8D\",11,\"\u9F9C\u9F9D\u9F9E\u9FA1\",4,\"\uF92C\uF979\uF995\uF9E7\uF9F1\"],\n[\"fe40\",\"\uFA0C\uFA0D\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA18\uFA1F\uFA20\uFA21\uFA23\uFA24\uFA27\uFA28\uFA29\"]\n]\n", "[\n[\"a140\",\"\uE4C6\",62],\n[\"a180\",\"\uE505\",32],\n[\"a240\",\"\uE526\",62],\n[\"a280\",\"\uE565\",32],\n[\"a2ab\",\"\uE766\",5],\n[\"a2e3\",\"\u20AC\uE76D\"],\n[\"a2ef\",\"\uE76E\uE76F\"],\n[\"a2fd\",\"\uE770\uE771\"],\n[\"a340\",\"\uE586\",62],\n[\"a380\",\"\uE5C5\",31,\"\u3000\"],\n[\"a440\",\"\uE5E6\",62],\n[\"a480\",\"\uE625\",32],\n[\"a4f4\",\"\uE772\",10],\n[\"a540\",\"\uE646\",62],\n[\"a580\",\"\uE685\",32],\n[\"a5f7\",\"\uE77D\",7],\n[\"a640\",\"\uE6A6\",62],\n[\"a680\",\"\uE6E5\",32],\n[\"a6b9\",\"\uE785\",7],\n[\"a6d9\",\"\uE78D\",6],\n[\"a6ec\",\"\uE794\uE795\"],\n[\"a6f3\",\"\uE796\"],\n[\"a6f6\",\"\uE797\",8],\n[\"a740\",\"\uE706\",62],\n[\"a780\",\"\uE745\",32],\n[\"a7c2\",\"\uE7A0\",14],\n[\"a7f2\",\"\uE7AF\",12],\n[\"a896\",\"\uE7BC\",10],\n[\"a8bc\",\"\u1E3F\"],\n[\"a8bf\",\"\u01F9\"],\n[\"a8c1\",\"\uE7C9\uE7CA\uE7CB\uE7CC\"],\n[\"a8ea\",\"\uE7CD\",20],\n[\"a958\",\"\uE7E2\"],\n[\"a95b\",\"\uE7E3\"],\n[\"a95d\",\"\uE7E4\uE7E5\uE7E6\"],\n[\"a989\",\"\u303E\u2FF0\",11],\n[\"a997\",\"\uE7F4\",12],\n[\"a9f0\",\"\uE801\",14],\n[\"aaa1\",\"\uE000\",93],\n[\"aba1\",\"\uE05E\",93],\n[\"aca1\",\"\uE0BC\",93],\n[\"ada1\",\"\uE11A\",93],\n[\"aea1\",\"\uE178\",93],\n[\"afa1\",\"\uE1D6\",93],\n[\"d7fa\",\"\uE810\",4],\n[\"f8a1\",\"\uE234\",93],\n[\"f9a1\",\"\uE292\",93],\n[\"faa1\",\"\uE2F0\",93],\n[\"fba1\",\"\uE34E\",93],\n[\"fca1\",\"\uE3AC\",93],\n[\"fda1\",\"\uE40A\",93],\n[\"fe50\",\"\u2E81\uE816\uE817\uE818\u2E84\u3473\u3447\u2E88\u2E8B\uE81E\u359E\u361A\u360E\u2E8C\u2E97\u396E\u3918\uE826\u39CF\u39DF\u3A73\u39D0\uE82B\uE82C\u3B4E\u3C6E\u3CE0\u2EA7\uE831\uE832\u2EAA\u4056\u415F\u2EAE\u4337\u2EB3\u2EB6\u2EB7\uE83B\u43B1\u43AC\u2EBB\u43DD\u44D6\u4661\u464C\uE843\"],\n[\"fe80\",\"\u4723\u4729\u477C\u478D\u2ECA\u4947\u497A\u497D\u4982\u4983\u4985\u4986\u499F\u499B\u49B7\u49B6\uE854\uE855\u4CA3\u4C9F\u4CA0\u4CA1\u4C77\u4CA2\u4D13\",6,\"\u4DAE\uE864\uE468\",93],\n[\"8135f437\",\"\uE7C7\"]\n]\n", "{\"uChars\":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],\"gbChars\":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}", "[\n[\"0\",\"\\u0000\",127],\n[\"8141\",\"\uAC02\uAC03\uAC05\uAC06\uAC0B\",4,\"\uAC18\uAC1E\uAC1F\uAC21\uAC22\uAC23\uAC25\",6,\"\uAC2E\uAC32\uAC33\uAC34\"],\n[\"8161\",\"\uAC35\uAC36\uAC37\uAC3A\uAC3B\uAC3D\uAC3E\uAC3F\uAC41\",9,\"\uAC4C\uAC4E\",5,\"\uAC55\"],\n[\"8181\",\"\uAC56\uAC57\uAC59\uAC5A\uAC5B\uAC5D\",18,\"\uAC72\uAC73\uAC75\uAC76\uAC79\uAC7B\",4,\"\uAC82\uAC87\uAC88\uAC8D\uAC8E\uAC8F\uAC91\uAC92\uAC93\uAC95\",6,\"\uAC9E\uACA2\",5,\"\uACAB\uACAD\uACAE\uACB1\",6,\"\uACBA\uACBE\uACBF\uACC0\uACC2\uACC3\uACC5\uACC6\uACC7\uACC9\uACCA\uACCB\uACCD\",7,\"\uACD6\uACD8\",7,\"\uACE2\uACE3\uACE5\uACE6\uACE9\uACEB\uACED\uACEE\uACF2\uACF4\uACF7\",4,\"\uACFE\uACFF\uAD01\uAD02\uAD03\uAD05\uAD07\",4,\"\uAD0E\uAD10\uAD12\uAD13\"],\n[\"8241\",\"\uAD14\uAD15\uAD16\uAD17\uAD19\uAD1A\uAD1B\uAD1D\uAD1E\uAD1F\uAD21\",7,\"\uAD2A\uAD2B\uAD2E\",5],\n[\"8261\",\"\uAD36\uAD37\uAD39\uAD3A\uAD3B\uAD3D\",6,\"\uAD46\uAD48\uAD4A\",5,\"\uAD51\uAD52\uAD53\uAD55\uAD56\uAD57\"],\n[\"8281\",\"\uAD59\",7,\"\uAD62\uAD64\",7,\"\uAD6E\uAD6F\uAD71\uAD72\uAD77\uAD78\uAD79\uAD7A\uAD7E\uAD80\uAD83\",4,\"\uAD8A\uAD8B\uAD8D\uAD8E\uAD8F\uAD91\",10,\"\uAD9E\",5,\"\uADA5\",17,\"\uADB8\",7,\"\uADC2\uADC3\uADC5\uADC6\uADC7\uADC9\",6,\"\uADD2\uADD4\",7,\"\uADDD\uADDE\uADDF\uADE1\uADE2\uADE3\uADE5\",18],\n[\"8341\",\"\uADFA\uADFB\uADFD\uADFE\uAE02\",5,\"\uAE0A\uAE0C\uAE0E\",5,\"\uAE15\",7],\n[\"8361\",\"\uAE1D\",18,\"\uAE32\uAE33\uAE35\uAE36\uAE39\uAE3B\uAE3C\"],\n[\"8381\",\"\uAE3D\uAE3E\uAE3F\uAE42\uAE44\uAE47\uAE48\uAE49\uAE4B\uAE4F\uAE51\uAE52\uAE53\uAE55\uAE57\",4,\"\uAE5E\uAE62\uAE63\uAE64\uAE66\uAE67\uAE6A\uAE6B\uAE6D\uAE6E\uAE6F\uAE71\",6,\"\uAE7A\uAE7E\",5,\"\uAE86\",5,\"\uAE8D\",46,\"\uAEBF\uAEC1\uAEC2\uAEC3\uAEC5\",6,\"\uAECE\uAED2\",5,\"\uAEDA\uAEDB\uAEDD\",8],\n[\"8441\",\"\uAEE6\uAEE7\uAEE9\uAEEA\uAEEC\uAEEE\",5,\"\uAEF5\uAEF6\uAEF7\uAEF9\uAEFA\uAEFB\uAEFD\",8],\n[\"8461\",\"\uAF06\uAF09\uAF0A\uAF0B\uAF0C\uAF0E\uAF0F\uAF11\",18],\n[\"8481\",\"\uAF24\",7,\"\uAF2E\uAF2F\uAF31\uAF33\uAF35\",6,\"\uAF3E\uAF40\uAF44\uAF45\uAF46\uAF47\uAF4A\",5,\"\uAF51\",10,\"\uAF5E\",5,\"\uAF66\",18,\"\uAF7A\",5,\"\uAF81\uAF82\uAF83\uAF85\uAF86\uAF87\uAF89\",6,\"\uAF92\uAF93\uAF94\uAF96\",5,\"\uAF9D\",26,\"\uAFBA\uAFBB\uAFBD\uAFBE\"],\n[\"8541\",\"\uAFBF\uAFC1\",5,\"\uAFCA\uAFCC\uAFCF\",4,\"\uAFD5\",6,\"\uAFDD\",4],\n[\"8561\",\"\uAFE2\",5,\"\uAFEA\",5,\"\uAFF2\uAFF3\uAFF5\uAFF6\uAFF7\uAFF9\",6,\"\uB002\uB003\"],\n[\"8581\",\"\uB005\",6,\"\uB00D\uB00E\uB00F\uB011\uB012\uB013\uB015\",6,\"\uB01E\",9,\"\uB029\",26,\"\uB046\uB047\uB049\uB04B\uB04D\uB04F\uB050\uB051\uB052\uB056\uB058\uB05A\uB05B\uB05C\uB05E\",29,\"\uB07E\uB07F\uB081\uB082\uB083\uB085\",6,\"\uB08E\uB090\uB092\",5,\"\uB09B\uB09D\uB09E\uB0A3\uB0A4\"],\n[\"8641\",\"\uB0A5\uB0A6\uB0A7\uB0AA\uB0B0\uB0B2\uB0B6\uB0B7\uB0B9\uB0BA\uB0BB\uB0BD\",6,\"\uB0C6\uB0CA\",5,\"\uB0D2\"],\n[\"8661\",\"\uB0D3\uB0D5\uB0D6\uB0D7\uB0D9\",6,\"\uB0E1\uB0E2\uB0E3\uB0E4\uB0E6\",10],\n[\"8681\",\"\uB0F1\",22,\"\uB10A\uB10D\uB10E\uB10F\uB111\uB114\uB115\uB116\uB117\uB11A\uB11E\",4,\"\uB126\uB127\uB129\uB12A\uB12B\uB12D\",6,\"\uB136\uB13A\",5,\"\uB142\uB143\uB145\uB146\uB147\uB149\",6,\"\uB152\uB153\uB156\uB157\uB159\uB15A\uB15B\uB15D\uB15E\uB15F\uB161\",22,\"\uB17A\uB17B\uB17D\uB17E\uB17F\uB181\uB183\",4,\"\uB18A\uB18C\uB18E\uB18F\uB190\uB191\uB195\uB196\uB197\uB199\uB19A\uB19B\uB19D\"],\n[\"8741\",\"\uB19E\",9,\"\uB1A9\",15],\n[\"8761\",\"\uB1B9\",18,\"\uB1CD\uB1CE\uB1CF\uB1D1\uB1D2\uB1D3\uB1D5\"],\n[\"8781\",\"\uB1D6\",5,\"\uB1DE\uB1E0\",7,\"\uB1EA\uB1EB\uB1ED\uB1EE\uB1EF\uB1F1\",7,\"\uB1FA\uB1FC\uB1FE\",5,\"\uB206\uB207\uB209\uB20A\uB20D\",6,\"\uB216\uB218\uB21A\",5,\"\uB221\",18,\"\uB235\",6,\"\uB23D\",26,\"\uB259\uB25A\uB25B\uB25D\uB25E\uB25F\uB261\",6,\"\uB26A\",4],\n[\"8841\",\"\uB26F\",4,\"\uB276\",5,\"\uB27D\",6,\"\uB286\uB287\uB288\uB28A\",4],\n[\"8861\",\"\uB28F\uB292\uB293\uB295\uB296\uB297\uB29B\",4,\"\uB2A2\uB2A4\uB2A7\uB2A8\uB2A9\uB2AB\uB2AD\uB2AE\uB2AF\uB2B1\uB2B2\uB2B3\uB2B5\uB2B6\uB2B7\"],\n[\"8881\",\"\uB2B8\",15,\"\uB2CA\uB2CB\uB2CD\uB2CE\uB2CF\uB2D1\uB2D3\",4,\"\uB2DA\uB2DC\uB2DE\uB2DF\uB2E0\uB2E1\uB2E3\uB2E7\uB2E9\uB2EA\uB2F0\uB2F1\uB2F2\uB2F6\uB2FC\uB2FD\uB2FE\uB302\uB303\uB305\uB306\uB307\uB309\",6,\"\uB312\uB316\",5,\"\uB31D\",54,\"\uB357\uB359\uB35A\uB35D\uB360\uB361\uB362\uB363\"],\n[\"8941\",\"\uB366\uB368\uB36A\uB36C\uB36D\uB36F\uB372\uB373\uB375\uB376\uB377\uB379\",6,\"\uB382\uB386\",5,\"\uB38D\"],\n[\"8961\",\"\uB38E\uB38F\uB391\uB392\uB393\uB395\",10,\"\uB3A2\",5,\"\uB3A9\uB3AA\uB3AB\uB3AD\"],\n[\"8981\",\"\uB3AE\",21,\"\uB3C6\uB3C7\uB3C9\uB3CA\uB3CD\uB3CF\uB3D1\uB3D2\uB3D3\uB3D6\uB3D8\uB3DA\uB3DC\uB3DE\uB3DF\uB3E1\uB3E2\uB3E3\uB3E5\uB3E6\uB3E7\uB3E9\",18,\"\uB3FD\",18,\"\uB411\",6,\"\uB419\uB41A\uB41B\uB41D\uB41E\uB41F\uB421\",6,\"\uB42A\uB42C\",7,\"\uB435\",15],\n[\"8a41\",\"\uB445\",10,\"\uB452\uB453\uB455\uB456\uB457\uB459\",6,\"\uB462\uB464\uB466\"],\n[\"8a61\",\"\uB467\",4,\"\uB46D\",18,\"\uB481\uB482\"],\n[\"8a81\",\"\uB483\",4,\"\uB489\",19,\"\uB49E\",5,\"\uB4A5\uB4A6\uB4A7\uB4A9\uB4AA\uB4AB\uB4AD\",7,\"\uB4B6\uB4B8\uB4BA\",5,\"\uB4C1\uB4C2\uB4C3\uB4C5\uB4C6\uB4C7\uB4C9\",6,\"\uB4D1\uB4D2\uB4D3\uB4D4\uB4D6\",5,\"\uB4DE\uB4DF\uB4E1\uB4E2\uB4E5\uB4E7\",4,\"\uB4EE\uB4F0\uB4F2\",5,\"\uB4F9\",26,\"\uB516\uB517\uB519\uB51A\uB51D\"],\n[\"8b41\",\"\uB51E\",5,\"\uB526\uB52B\",4,\"\uB532\uB533\uB535\uB536\uB537\uB539\",6,\"\uB542\uB546\"],\n[\"8b61\",\"\uB547\uB548\uB549\uB54A\uB54E\uB54F\uB551\uB552\uB553\uB555\",6,\"\uB55E\uB562\",8],\n[\"8b81\",\"\uB56B\",52,\"\uB5A2\uB5A3\uB5A5\uB5A6\uB5A7\uB5A9\uB5AC\uB5AD\uB5AE\uB5AF\uB5B2\uB5B6\",4,\"\uB5BE\uB5BF\uB5C1\uB5C2\uB5C3\uB5C5\",6,\"\uB5CE\uB5D2\",5,\"\uB5D9\",18,\"\uB5ED\",18],\n[\"8c41\",\"\uB600\",15,\"\uB612\uB613\uB615\uB616\uB617\uB619\",4],\n[\"8c61\",\"\uB61E\",6,\"\uB626\",5,\"\uB62D\",6,\"\uB635\",5],\n[\"8c81\",\"\uB63B\",12,\"\uB649\",26,\"\uB665\uB666\uB667\uB669\",50,\"\uB69E\uB69F\uB6A1\uB6A2\uB6A3\uB6A5\",5,\"\uB6AD\uB6AE\uB6AF\uB6B0\uB6B2\",16],\n[\"8d41\",\"\uB6C3\",16,\"\uB6D5\",8],\n[\"8d61\",\"\uB6DE\",17,\"\uB6F1\uB6F2\uB6F3\uB6F5\uB6F6\uB6F7\uB6F9\uB6FA\"],\n[\"8d81\",\"\uB6FB\",4,\"\uB702\uB703\uB704\uB706\",33,\"\uB72A\uB72B\uB72D\uB72E\uB731\",6,\"\uB73A\uB73C\",7,\"\uB745\uB746\uB747\uB749\uB74A\uB74B\uB74D\",6,\"\uB756\",9,\"\uB761\uB762\uB763\uB765\uB766\uB767\uB769\",6,\"\uB772\uB774\uB776\",5,\"\uB77E\uB77F\uB781\uB782\uB783\uB785\",6,\"\uB78E\uB793\uB794\uB795\uB79A\uB79B\uB79D\uB79E\"],\n[\"8e41\",\"\uB79F\uB7A1\",6,\"\uB7AA\uB7AE\",5,\"\uB7B6\uB7B7\uB7B9\",8],\n[\"8e61\",\"\uB7C2\",4,\"\uB7C8\uB7CA\",19],\n[\"8e81\",\"\uB7DE\",13,\"\uB7EE\uB7EF\uB7F1\uB7F2\uB7F3\uB7F5\",6,\"\uB7FE\uB802\",4,\"\uB80A\uB80B\uB80D\uB80E\uB80F\uB811\",6,\"\uB81A\uB81C\uB81E\",5,\"\uB826\uB827\uB829\uB82A\uB82B\uB82D\",6,\"\uB836\uB83A\",5,\"\uB841\uB842\uB843\uB845\",11,\"\uB852\uB854\",7,\"\uB85E\uB85F\uB861\uB862\uB863\uB865\",6,\"\uB86E\uB870\uB872\",5,\"\uB879\uB87A\uB87B\uB87D\",7],\n[\"8f41\",\"\uB885\",7,\"\uB88E\",17],\n[\"8f61\",\"\uB8A0\",7,\"\uB8A9\",6,\"\uB8B1\uB8B2\uB8B3\uB8B5\uB8B6\uB8B7\uB8B9\",4],\n[\"8f81\",\"\uB8BE\uB8BF\uB8C2\uB8C4\uB8C6\",5,\"\uB8CD\uB8CE\uB8CF\uB8D1\uB8D2\uB8D3\uB8D5\",7,\"\uB8DE\uB8E0\uB8E2\",5,\"\uB8EA\uB8EB\uB8ED\uB8EE\uB8EF\uB8F1\",6,\"\uB8FA\uB8FC\uB8FE\",5,\"\uB905\",18,\"\uB919\",6,\"\uB921\",26,\"\uB93E\uB93F\uB941\uB942\uB943\uB945\",6,\"\uB94D\uB94E\uB950\uB952\",5],\n[\"9041\",\"\uB95A\uB95B\uB95D\uB95E\uB95F\uB961\",6,\"\uB96A\uB96C\uB96E\",5,\"\uB976\uB977\uB979\uB97A\uB97B\uB97D\"],\n[\"9061\",\"\uB97E\",5,\"\uB986\uB988\uB98B\uB98C\uB98F\",15],\n[\"9081\",\"\uB99F\",12,\"\uB9AE\uB9AF\uB9B1\uB9B2\uB9B3\uB9B5\",6,\"\uB9BE\uB9C0\uB9C2\",5,\"\uB9CA\uB9CB\uB9CD\uB9D3\",4,\"\uB9DA\uB9DC\uB9DF\uB9E0\uB9E2\uB9E6\uB9E7\uB9E9\uB9EA\uB9EB\uB9ED\",6,\"\uB9F6\uB9FB\",4,\"\uBA02\",5,\"\uBA09\",11,\"\uBA16\",33,\"\uBA3A\uBA3B\uBA3D\uBA3E\uBA3F\uBA41\uBA43\uBA44\uBA45\uBA46\"],\n[\"9141\",\"\uBA47\uBA4A\uBA4C\uBA4F\uBA50\uBA51\uBA52\uBA56\uBA57\uBA59\uBA5A\uBA5B\uBA5D\",6,\"\uBA66\uBA6A\",5],\n[\"9161\",\"\uBA72\uBA73\uBA75\uBA76\uBA77\uBA79\",9,\"\uBA86\uBA88\uBA89\uBA8A\uBA8B\uBA8D\",5],\n[\"9181\",\"\uBA93\",20,\"\uBAAA\uBAAD\uBAAE\uBAAF\uBAB1\uBAB3\",4,\"\uBABA\uBABC\uBABE\",5,\"\uBAC5\uBAC6\uBAC7\uBAC9\",14,\"\uBADA\",33,\"\uBAFD\uBAFE\uBAFF\uBB01\uBB02\uBB03\uBB05\",7,\"\uBB0E\uBB10\uBB12\",5,\"\uBB19\uBB1A\uBB1B\uBB1D\uBB1E\uBB1F\uBB21\",6],\n[\"9241\",\"\uBB28\uBB2A\uBB2C\",7,\"\uBB37\uBB39\uBB3A\uBB3F\",4,\"\uBB46\uBB48\uBB4A\uBB4B\uBB4C\uBB4E\uBB51\uBB52\"],\n[\"9261\",\"\uBB53\uBB55\uBB56\uBB57\uBB59\",7,\"\uBB62\uBB64\",7,\"\uBB6D\",4],\n[\"9281\",\"\uBB72\",21,\"\uBB89\uBB8A\uBB8B\uBB8D\uBB8E\uBB8F\uBB91\",18,\"\uBBA5\uBBA6\uBBA7\uBBA9\uBBAA\uBBAB\uBBAD\",6,\"\uBBB5\uBBB6\uBBB8\",7,\"\uBBC1\uBBC2\uBBC3\uBBC5\uBBC6\uBBC7\uBBC9\",6,\"\uBBD1\uBBD2\uBBD4\",35,\"\uBBFA\uBBFB\uBBFD\uBBFE\uBC01\"],\n[\"9341\",\"\uBC03\",4,\"\uBC0A\uBC0E\uBC10\uBC12\uBC13\uBC19\uBC1A\uBC20\uBC21\uBC22\uBC23\uBC26\uBC28\uBC2A\uBC2B\uBC2C\uBC2E\uBC2F\uBC32\uBC33\uBC35\"],\n[\"9361\",\"\uBC36\uBC37\uBC39\",6,\"\uBC42\uBC46\uBC47\uBC48\uBC4A\uBC4B\uBC4E\uBC4F\uBC51\",8],\n[\"9381\",\"\uBC5A\uBC5B\uBC5C\uBC5E\",37,\"\uBC86\uBC87\uBC89\uBC8A\uBC8D\uBC8F\",4,\"\uBC96\uBC98\uBC9B\",4,\"\uBCA2\uBCA3\uBCA5\uBCA6\uBCA9\",6,\"\uBCB2\uBCB6\",5,\"\uBCBE\uBCBF\uBCC1\uBCC2\uBCC3\uBCC5\",7,\"\uBCCE\uBCD2\uBCD3\uBCD4\uBCD6\uBCD7\uBCD9\uBCDA\uBCDB\uBCDD\",22,\"\uBCF7\uBCF9\uBCFA\uBCFB\uBCFD\"],\n[\"9441\",\"\uBCFE\",5,\"\uBD06\uBD08\uBD0A\",5,\"\uBD11\uBD12\uBD13\uBD15\",8],\n[\"9461\",\"\uBD1E\",5,\"\uBD25\",6,\"\uBD2D\",12],\n[\"9481\",\"\uBD3A\",5,\"\uBD41\",6,\"\uBD4A\uBD4B\uBD4D\uBD4E\uBD4F\uBD51\",6,\"\uBD5A\",9,\"\uBD65\uBD66\uBD67\uBD69\",22,\"\uBD82\uBD83\uBD85\uBD86\uBD8B\",4,\"\uBD92\uBD94\uBD96\uBD97\uBD98\uBD9B\uBD9D\",6,\"\uBDA5\",10,\"\uBDB1\",6,\"\uBDB9\",24],\n[\"9541\",\"\uBDD2\uBDD3\uBDD6\uBDD7\uBDD9\uBDDA\uBDDB\uBDDD\",11,\"\uBDEA\",5,\"\uBDF1\"],\n[\"9561\",\"\uBDF2\uBDF3\uBDF5\uBDF6\uBDF7\uBDF9\",6,\"\uBE01\uBE02\uBE04\uBE06\",5,\"\uBE0E\uBE0F\uBE11\uBE12\uBE13\"],\n[\"9581\",\"\uBE15\",6,\"\uBE1E\uBE20\",35,\"\uBE46\uBE47\uBE49\uBE4A\uBE4B\uBE4D\uBE4F\",4,\"\uBE56\uBE58\uBE5C\uBE5D\uBE5E\uBE5F\uBE62\uBE63\uBE65\uBE66\uBE67\uBE69\uBE6B\",4,\"\uBE72\uBE76\",4,\"\uBE7E\uBE7F\uBE81\uBE82\uBE83\uBE85\",6,\"\uBE8E\uBE92\",5,\"\uBE9A\",13,\"\uBEA9\",14],\n[\"9641\",\"\uBEB8\",23,\"\uBED2\uBED3\"],\n[\"9661\",\"\uBED5\uBED6\uBED9\",6,\"\uBEE1\uBEE2\uBEE6\",5,\"\uBEED\",8],\n[\"9681\",\"\uBEF6\",10,\"\uBF02\",5,\"\uBF0A\",13,\"\uBF1A\uBF1E\",33,\"\uBF42\uBF43\uBF45\uBF46\uBF47\uBF49\",6,\"\uBF52\uBF53\uBF54\uBF56\",44],\n[\"9741\",\"\uBF83\",16,\"\uBF95\",8],\n[\"9761\",\"\uBF9E\",17,\"\uBFB1\",7],\n[\"9781\",\"\uBFB9\",11,\"\uBFC6\",5,\"\uBFCE\uBFCF\uBFD1\uBFD2\uBFD3\uBFD5\",6,\"\uBFDD\uBFDE\uBFE0\uBFE2\",89,\"\uC03D\uC03E\uC03F\"],\n[\"9841\",\"\uC040\",16,\"\uC052\",5,\"\uC059\uC05A\uC05B\"],\n[\"9861\",\"\uC05D\uC05E\uC05F\uC061\",6,\"\uC06A\",15],\n[\"9881\",\"\uC07A\",21,\"\uC092\uC093\uC095\uC096\uC097\uC099\",6,\"\uC0A2\uC0A4\uC0A6\",5,\"\uC0AE\uC0B1\uC0B2\uC0B7\",4,\"\uC0BE\uC0C2\uC0C3\uC0C4\uC0C6\uC0C7\uC0CA\uC0CB\uC0CD\uC0CE\uC0CF\uC0D1\",6,\"\uC0DA\uC0DE\",5,\"\uC0E6\uC0E7\uC0E9\uC0EA\uC0EB\uC0ED\",6,\"\uC0F6\uC0F8\uC0FA\",5,\"\uC101\uC102\uC103\uC105\uC106\uC107\uC109\",6,\"\uC111\uC112\uC113\uC114\uC116\",5,\"\uC121\uC122\uC125\uC128\uC129\uC12A\uC12B\uC12E\"],\n[\"9941\",\"\uC132\uC133\uC134\uC135\uC137\uC13A\uC13B\uC13D\uC13E\uC13F\uC141\",6,\"\uC14A\uC14E\",5,\"\uC156\uC157\"],\n[\"9961\",\"\uC159\uC15A\uC15B\uC15D\",6,\"\uC166\uC16A\",5,\"\uC171\uC172\uC173\uC175\uC176\uC177\uC179\uC17A\uC17B\"],\n[\"9981\",\"\uC17C\",8,\"\uC186\",5,\"\uC18F\uC191\uC192\uC193\uC195\uC197\",4,\"\uC19E\uC1A0\uC1A2\uC1A3\uC1A4\uC1A6\uC1A7\uC1AA\uC1AB\uC1AD\uC1AE\uC1AF\uC1B1\",11,\"\uC1BE\",5,\"\uC1C5\uC1C6\uC1C7\uC1C9\uC1CA\uC1CB\uC1CD\",6,\"\uC1D5\uC1D6\uC1D9\",6,\"\uC1E1\uC1E2\uC1E3\uC1E5\uC1E6\uC1E7\uC1E9\",6,\"\uC1F2\uC1F4\",7,\"\uC1FE\uC1FF\uC201\uC202\uC203\uC205\",6,\"\uC20E\uC210\uC212\",5,\"\uC21A\uC21B\uC21D\uC21E\uC221\uC222\uC223\"],\n[\"9a41\",\"\uC224\uC225\uC226\uC227\uC22A\uC22C\uC22E\uC230\uC233\uC235\",16],\n[\"9a61\",\"\uC246\uC247\uC249\",6,\"\uC252\uC253\uC255\uC256\uC257\uC259\",6,\"\uC261\uC262\uC263\uC264\uC266\"],\n[\"9a81\",\"\uC267\",4,\"\uC26E\uC26F\uC271\uC272\uC273\uC275\",6,\"\uC27E\uC280\uC282\",5,\"\uC28A\",5,\"\uC291\",6,\"\uC299\uC29A\uC29C\uC29E\",5,\"\uC2A6\uC2A7\uC2A9\uC2AA\uC2AB\uC2AE\",5,\"\uC2B6\uC2B8\uC2BA\",33,\"\uC2DE\uC2DF\uC2E1\uC2E2\uC2E5\",5,\"\uC2EE\uC2F0\uC2F2\uC2F3\uC2F4\uC2F5\uC2F7\uC2FA\uC2FD\uC2FE\uC2FF\uC301\",6,\"\uC30A\uC30B\uC30E\uC30F\"],\n[\"9b41\",\"\uC310\uC311\uC312\uC316\uC317\uC319\uC31A\uC31B\uC31D\",6,\"\uC326\uC327\uC32A\",8],\n[\"9b61\",\"\uC333\",17,\"\uC346\",7],\n[\"9b81\",\"\uC34E\",25,\"\uC36A\uC36B\uC36D\uC36E\uC36F\uC371\uC373\",4,\"\uC37A\uC37B\uC37E\",5,\"\uC385\uC386\uC387\uC389\uC38A\uC38B\uC38D\",50,\"\uC3C1\",22,\"\uC3DA\"],\n[\"9c41\",\"\uC3DB\uC3DD\uC3DE\uC3E1\uC3E3\",4,\"\uC3EA\uC3EB\uC3EC\uC3EE\",5,\"\uC3F6\uC3F7\uC3F9\",5],\n[\"9c61\",\"\uC3FF\",8,\"\uC409\",6,\"\uC411\",9],\n[\"9c81\",\"\uC41B\",8,\"\uC425\",6,\"\uC42D\uC42E\uC42F\uC431\uC432\uC433\uC435\",6,\"\uC43E\",9,\"\uC449\",26,\"\uC466\uC467\uC469\uC46A\uC46B\uC46D\",6,\"\uC476\uC477\uC478\uC47A\",5,\"\uC481\",18,\"\uC495\",6,\"\uC49D\",12],\n[\"9d41\",\"\uC4AA\",13,\"\uC4B9\uC4BA\uC4BB\uC4BD\",8],\n[\"9d61\",\"\uC4C6\",25],\n[\"9d81\",\"\uC4E0\",8,\"\uC4EA\",5,\"\uC4F2\uC4F3\uC4F5\uC4F6\uC4F7\uC4F9\uC4FB\uC4FC\uC4FD\uC4FE\uC502\",9,\"\uC50D\uC50E\uC50F\uC511\uC512\uC513\uC515\",6,\"\uC51D\",10,\"\uC52A\uC52B\uC52D\uC52E\uC52F\uC531\",6,\"\uC53A\uC53C\uC53E\",5,\"\uC546\uC547\uC54B\uC54F\uC550\uC551\uC552\uC556\uC55A\uC55B\uC55C\uC55F\uC562\uC563\uC565\uC566\uC567\uC569\",6,\"\uC572\uC576\",5,\"\uC57E\uC57F\uC581\uC582\uC583\uC585\uC586\uC588\uC589\uC58A\uC58B\uC58E\uC590\uC592\uC593\uC594\"],\n[\"9e41\",\"\uC596\uC599\uC59A\uC59B\uC59D\uC59E\uC59F\uC5A1\",7,\"\uC5AA\",9,\"\uC5B6\"],\n[\"9e61\",\"\uC5B7\uC5BA\uC5BF\",4,\"\uC5CB\uC5CD\uC5CF\uC5D2\uC5D3\uC5D5\uC5D6\uC5D7\uC5D9\",6,\"\uC5E2\uC5E4\uC5E6\uC5E7\"],\n[\"9e81\",\"\uC5E8\uC5E9\uC5EA\uC5EB\uC5EF\uC5F1\uC5F2\uC5F3\uC5F5\uC5F8\uC5F9\uC5FA\uC5FB\uC602\uC603\uC604\uC609\uC60A\uC60B\uC60D\uC60E\uC60F\uC611\",6,\"\uC61A\uC61D\",6,\"\uC626\uC627\uC629\uC62A\uC62B\uC62F\uC631\uC632\uC636\uC638\uC63A\uC63C\uC63D\uC63E\uC63F\uC642\uC643\uC645\uC646\uC647\uC649\",6,\"\uC652\uC656\",5,\"\uC65E\uC65F\uC661\",10,\"\uC66D\uC66E\uC670\uC672\",5,\"\uC67A\uC67B\uC67D\uC67E\uC67F\uC681\",6,\"\uC68A\uC68C\uC68E\",5,\"\uC696\uC697\uC699\uC69A\uC69B\uC69D\",6,\"\uC6A6\"],\n[\"9f41\",\"\uC6A8\uC6AA\",5,\"\uC6B2\uC6B3\uC6B5\uC6B6\uC6B7\uC6BB\",4,\"\uC6C2\uC6C4\uC6C6\",5,\"\uC6CE\"],\n[\"9f61\",\"\uC6CF\uC6D1\uC6D2\uC6D3\uC6D5\",6,\"\uC6DE\uC6DF\uC6E2\",5,\"\uC6EA\uC6EB\uC6ED\uC6EE\uC6EF\uC6F1\uC6F2\"],\n[\"9f81\",\"\uC6F3\",4,\"\uC6FA\uC6FB\uC6FC\uC6FE\",5,\"\uC706\uC707\uC709\uC70A\uC70B\uC70D\",6,\"\uC716\uC718\uC71A\",5,\"\uC722\uC723\uC725\uC726\uC727\uC729\",6,\"\uC732\uC734\uC736\uC738\uC739\uC73A\uC73B\uC73E\uC73F\uC741\uC742\uC743\uC745\",4,\"\uC74B\uC74E\uC750\uC759\uC75A\uC75B\uC75D\uC75E\uC75F\uC761\",6,\"\uC769\uC76A\uC76C\",7,\"\uC776\uC777\uC779\uC77A\uC77B\uC77F\uC780\uC781\uC782\uC786\uC78B\uC78C\uC78D\uC78F\uC792\uC793\uC795\uC799\uC79B\",4,\"\uC7A2\uC7A7\",4,\"\uC7AE\uC7AF\uC7B1\uC7B2\uC7B3\uC7B5\uC7B6\uC7B7\"],\n[\"a041\",\"\uC7B8\uC7B9\uC7BA\uC7BB\uC7BE\uC7C2\",5,\"\uC7CA\uC7CB\uC7CD\uC7CF\uC7D1\",6,\"\uC7D9\uC7DA\uC7DB\uC7DC\"],\n[\"a061\",\"\uC7DE\",5,\"\uC7E5\uC7E6\uC7E7\uC7E9\uC7EA\uC7EB\uC7ED\",13],\n[\"a081\",\"\uC7FB\",4,\"\uC802\uC803\uC805\uC806\uC807\uC809\uC80B\",4,\"\uC812\uC814\uC817\",4,\"\uC81E\uC81F\uC821\uC822\uC823\uC825\",6,\"\uC82E\uC830\uC832\",5,\"\uC839\uC83A\uC83B\uC83D\uC83E\uC83F\uC841\",6,\"\uC84A\uC84B\uC84E\",5,\"\uC855\",26,\"\uC872\uC873\uC875\uC876\uC877\uC879\uC87B\",4,\"\uC882\uC884\uC888\uC889\uC88A\uC88E\",5,\"\uC895\",7,\"\uC89E\uC8A0\uC8A2\uC8A3\uC8A4\"],\n[\"a141\",\"\uC8A5\uC8A6\uC8A7\uC8A9\",18,\"\uC8BE\uC8BF\uC8C0\uC8C1\"],\n[\"a161\",\"\uC8C2\uC8C3\uC8C5\uC8C6\uC8C7\uC8C9\uC8CA\uC8CB\uC8CD\",6,\"\uC8D6\uC8D8\uC8DA\",5,\"\uC8E2\uC8E3\uC8E5\"],\n[\"a181\",\"\uC8E6\",14,\"\uC8F6\",5,\"\uC8FE\uC8FF\uC901\uC902\uC903\uC907\",4,\"\uC90E\u3000\u3001\u3002\u00B7\u2025\u2026\u00A8\u3003\u00AD\u2015\u2225\uFF3C\u223C\u2018\u2019\u201C\u201D\u3014\u3015\u3008\",9,\"\u00B1\u00D7\u00F7\u2260\u2264\u2265\u221E\u2234\u00B0\u2032\u2033\u2103\u212B\uFFE0\uFFE1\uFFE5\u2642\u2640\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u00A7\u203B\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u2192\u2190\u2191\u2193\u2194\u3013\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\u2227\u2228\uFFE2\"],\n[\"a241\",\"\uC910\uC912\",5,\"\uC919\",18],\n[\"a261\",\"\uC92D\",6,\"\uC935\",18],\n[\"a281\",\"\uC948\",7,\"\uC952\uC953\uC955\uC956\uC957\uC959\",6,\"\uC962\uC964\",7,\"\uC96D\uC96E\uC96F\u21D2\u21D4\u2200\u2203\u00B4\uFF5E\u02C7\u02D8\u02DD\u02DA\u02D9\u00B8\u02DB\u00A1\u00BF\u02D0\u222E\u2211\u220F\u00A4\u2109\u2030\u25C1\u25C0\u25B7\u25B6\u2664\u2660\u2661\u2665\u2667\u2663\u2299\u25C8\u25A3\u25D0\u25D1\u2592\u25A4\u25A5\u25A8\u25A7\u25A6\u25A9\u2668\u260F\u260E\u261C\u261E\u00B6\u2020\u2021\u2195\u2197\u2199\u2196\u2198\u266D\u2669\u266A\u266C\u327F\u321C\u2116\u33C7\u2122\u33C2\u33D8\u2121\u20AC\u00AE\"],\n[\"a341\",\"\uC971\uC972\uC973\uC975\",6,\"\uC97D\",10,\"\uC98A\uC98B\uC98D\uC98E\uC98F\"],\n[\"a361\",\"\uC991\",6,\"\uC99A\uC99C\uC99E\",16],\n[\"a381\",\"\uC9AF\",16,\"\uC9C2\uC9C3\uC9C5\uC9C6\uC9C9\uC9CB\",4,\"\uC9D2\uC9D4\uC9D7\uC9D8\uC9DB\uFF01\",58,\"\uFFE6\uFF3D\",32,\"\uFFE3\"],\n[\"a441\",\"\uC9DE\uC9DF\uC9E1\uC9E3\uC9E5\uC9E6\uC9E8\uC9E9\uC9EA\uC9EB\uC9EE\uC9F2\",5,\"\uC9FA\uC9FB\uC9FD\uC9FE\uC9FF\uCA01\uCA02\uCA03\uCA04\"],\n[\"a461\",\"\uCA05\uCA06\uCA07\uCA0A\uCA0E\",5,\"\uCA15\uCA16\uCA17\uCA19\",12],\n[\"a481\",\"\uCA26\uCA27\uCA28\uCA2A\",28,\"\u3131\",93],\n[\"a541\",\"\uCA47\",4,\"\uCA4E\uCA4F\uCA51\uCA52\uCA53\uCA55\",6,\"\uCA5E\uCA62\",5,\"\uCA69\uCA6A\"],\n[\"a561\",\"\uCA6B\",17,\"\uCA7E\",5,\"\uCA85\uCA86\"],\n[\"a581\",\"\uCA87\",16,\"\uCA99\",14,\"\u2170\",9],\n[\"a5b0\",\"\u2160\",9],\n[\"a5c1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a5e1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a641\",\"\uCAA8\",19,\"\uCABE\uCABF\uCAC1\uCAC2\uCAC3\uCAC5\"],\n[\"a661\",\"\uCAC6\",5,\"\uCACE\uCAD0\uCAD2\uCAD4\uCAD5\uCAD6\uCAD7\uCADA\",5,\"\uCAE1\",6],\n[\"a681\",\"\uCAE8\uCAE9\uCAEA\uCAEB\uCAED\",6,\"\uCAF5\",18,\"\uCB09\uCB0A\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\u2512\u2511\u251A\u2519\u2516\u2515\u250E\u250D\u251E\u251F\u2521\u2522\u2526\u2527\u2529\u252A\u252D\u252E\u2531\u2532\u2535\u2536\u2539\u253A\u253D\u253E\u2540\u2541\u2543\",7],\n[\"a741\",\"\uCB0B\",4,\"\uCB11\uCB12\uCB13\uCB15\uCB16\uCB17\uCB19\",6,\"\uCB22\",7],\n[\"a761\",\"\uCB2A\",22,\"\uCB42\uCB43\uCB44\"],\n[\"a781\",\"\uCB45\uCB46\uCB47\uCB4A\uCB4B\uCB4D\uCB4E\uCB4F\uCB51\",6,\"\uCB5A\uCB5B\uCB5C\uCB5E\",5,\"\uCB65\",7,\"\u3395\u3396\u3397\u2113\u3398\u33C4\u33A3\u33A4\u33A5\u33A6\u3399\",9,\"\u33CA\u338D\u338E\u338F\u33CF\u3388\u3389\u33C8\u33A7\u33A8\u33B0\",9,\"\u3380\",4,\"\u33BA\",5,\"\u3390\",4,\"\u2126\u33C0\u33C1\u338A\u338B\u338C\u33D6\u33C5\u33AD\u33AE\u33AF\u33DB\u33A9\u33AA\u33AB\u33AC\u33DD\u33D0\u33D3\u33C3\u33C9\u33DC\u33C6\"],\n[\"a841\",\"\uCB6D\",10,\"\uCB7A\",14],\n[\"a861\",\"\uCB89\",18,\"\uCB9D\",6],\n[\"a881\",\"\uCBA4\",19,\"\uCBB9\",11,\"\u00C6\u00D0\u00AA\u0126\"],\n[\"a8a6\",\"\u0132\"],\n[\"a8a8\",\"\u013F\u0141\u00D8\u0152\u00BA\u00DE\u0166\u014A\"],\n[\"a8b1\",\"\u3260\",27,\"\u24D0\",25,\"\u2460\",14,\"\u00BD\u2153\u2154\u00BC\u00BE\u215B\u215C\u215D\u215E\"],\n[\"a941\",\"\uCBC5\",14,\"\uCBD5\",10],\n[\"a961\",\"\uCBE0\uCBE1\uCBE2\uCBE3\uCBE5\uCBE6\uCBE8\uCBEA\",18],\n[\"a981\",\"\uCBFD\",14,\"\uCC0E\uCC0F\uCC11\uCC12\uCC13\uCC15\",6,\"\uCC1E\uCC1F\uCC20\uCC23\uCC24\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0140\u0142\u00F8\u0153\u00DF\u00FE\u0167\u014B\u0149\u3200\",27,\"\u249C\",25,\"\u2474\",14,\"\u00B9\u00B2\u00B3\u2074\u207F\u2081\u2082\u2083\u2084\"],\n[\"aa41\",\"\uCC25\uCC26\uCC2A\uCC2B\uCC2D\uCC2F\uCC31\",6,\"\uCC3A\uCC3F\",4,\"\uCC46\uCC47\uCC49\uCC4A\uCC4B\uCC4D\uCC4E\"],\n[\"aa61\",\"\uCC4F\",4,\"\uCC56\uCC5A\",5,\"\uCC61\uCC62\uCC63\uCC65\uCC67\uCC69\",6,\"\uCC71\uCC72\"],\n[\"aa81\",\"\uCC73\uCC74\uCC76\",29,\"\u3041\",82],\n[\"ab41\",\"\uCC94\uCC95\uCC96\uCC97\uCC9A\uCC9B\uCC9D\uCC9E\uCC9F\uCCA1\",6,\"\uCCAA\uCCAE\",5,\"\uCCB6\uCCB7\uCCB9\"],\n[\"ab61\",\"\uCCBA\uCCBB\uCCBD\",6,\"\uCCC6\uCCC8\uCCCA\",5,\"\uCCD1\uCCD2\uCCD3\uCCD5\",5],\n[\"ab81\",\"\uCCDB\",8,\"\uCCE5\",6,\"\uCCED\uCCEE\uCCEF\uCCF1\",12,\"\u30A1\",85],\n[\"ac41\",\"\uCCFE\uCCFF\uCD00\uCD02\",5,\"\uCD0A\uCD0B\uCD0D\uCD0E\uCD0F\uCD11\",6,\"\uCD1A\uCD1C\uCD1E\uCD1F\uCD20\"],\n[\"ac61\",\"\uCD21\uCD22\uCD23\uCD25\uCD26\uCD27\uCD29\uCD2A\uCD2B\uCD2D\",11,\"\uCD3A\",4],\n[\"ac81\",\"\uCD3F\",28,\"\uCD5D\uCD5E\uCD5F\u0410\",5,\"\u0401\u0416\",25],\n[\"acd1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"ad41\",\"\uCD61\uCD62\uCD63\uCD65\",6,\"\uCD6E\uCD70\uCD72\",5,\"\uCD79\",7],\n[\"ad61\",\"\uCD81\",6,\"\uCD89\",10,\"\uCD96\uCD97\uCD99\uCD9A\uCD9B\uCD9D\uCD9E\uCD9F\"],\n[\"ad81\",\"\uCDA0\uCDA1\uCDA2\uCDA3\uCDA6\uCDA8\uCDAA\",5,\"\uCDB1\",18,\"\uCDC5\"],\n[\"ae41\",\"\uCDC6\",5,\"\uCDCD\uCDCE\uCDCF\uCDD1\",16],\n[\"ae61\",\"\uCDE2\",5,\"\uCDE9\uCDEA\uCDEB\uCDED\uCDEE\uCDEF\uCDF1\",6,\"\uCDFA\uCDFC\uCDFE\",4],\n[\"ae81\",\"\uCE03\uCE05\uCE06\uCE07\uCE09\uCE0A\uCE0B\uCE0D\",6,\"\uCE15\uCE16\uCE17\uCE18\uCE1A\",5,\"\uCE22\uCE23\uCE25\uCE26\uCE27\uCE29\uCE2A\uCE2B\"],\n[\"af41\",\"\uCE2C\uCE2D\uCE2E\uCE2F\uCE32\uCE34\uCE36\",19],\n[\"af61\",\"\uCE4A\",13,\"\uCE5A\uCE5B\uCE5D\uCE5E\uCE62\",5,\"\uCE6A\uCE6C\"],\n[\"af81\",\"\uCE6E\",5,\"\uCE76\uCE77\uCE79\uCE7A\uCE7B\uCE7D\",6,\"\uCE86\uCE88\uCE8A\",5,\"\uCE92\uCE93\uCE95\uCE96\uCE97\uCE99\"],\n[\"b041\",\"\uCE9A\",5,\"\uCEA2\uCEA6\",5,\"\uCEAE\",12],\n[\"b061\",\"\uCEBB\",5,\"\uCEC2\",19],\n[\"b081\",\"\uCED6\",13,\"\uCEE6\uCEE7\uCEE9\uCEEA\uCEED\",6,\"\uCEF6\uCEFA\",5,\"\uAC00\uAC01\uAC04\uAC07\uAC08\uAC09\uAC0A\uAC10\",7,\"\uAC19\",4,\"\uAC20\uAC24\uAC2C\uAC2D\uAC2F\uAC30\uAC31\uAC38\uAC39\uAC3C\uAC40\uAC4B\uAC4D\uAC54\uAC58\uAC5C\uAC70\uAC71\uAC74\uAC77\uAC78\uAC7A\uAC80\uAC81\uAC83\uAC84\uAC85\uAC86\uAC89\uAC8A\uAC8B\uAC8C\uAC90\uAC94\uAC9C\uAC9D\uAC9F\uACA0\uACA1\uACA8\uACA9\uACAA\uACAC\uACAF\uACB0\uACB8\uACB9\uACBB\uACBC\uACBD\uACC1\uACC4\uACC8\uACCC\uACD5\uACD7\uACE0\uACE1\uACE4\uACE7\uACE8\uACEA\uACEC\uACEF\uACF0\uACF1\uACF3\uACF5\uACF6\uACFC\uACFD\uAD00\uAD04\uAD06\"],\n[\"b141\",\"\uCF02\uCF03\uCF05\uCF06\uCF07\uCF09\",6,\"\uCF12\uCF14\uCF16\",5,\"\uCF1D\uCF1E\uCF1F\uCF21\uCF22\uCF23\"],\n[\"b161\",\"\uCF25\",6,\"\uCF2E\uCF32\",5,\"\uCF39\",11],\n[\"b181\",\"\uCF45\",14,\"\uCF56\uCF57\uCF59\uCF5A\uCF5B\uCF5D\",6,\"\uCF66\uCF68\uCF6A\uCF6B\uCF6C\uAD0C\uAD0D\uAD0F\uAD11\uAD18\uAD1C\uAD20\uAD29\uAD2C\uAD2D\uAD34\uAD35\uAD38\uAD3C\uAD44\uAD45\uAD47\uAD49\uAD50\uAD54\uAD58\uAD61\uAD63\uAD6C\uAD6D\uAD70\uAD73\uAD74\uAD75\uAD76\uAD7B\uAD7C\uAD7D\uAD7F\uAD81\uAD82\uAD88\uAD89\uAD8C\uAD90\uAD9C\uAD9D\uADA4\uADB7\uADC0\uADC1\uADC4\uADC8\uADD0\uADD1\uADD3\uADDC\uADE0\uADE4\uADF8\uADF9\uADFC\uADFF\uAE00\uAE01\uAE08\uAE09\uAE0B\uAE0D\uAE14\uAE30\uAE31\uAE34\uAE37\uAE38\uAE3A\uAE40\uAE41\uAE43\uAE45\uAE46\uAE4A\uAE4C\uAE4D\uAE4E\uAE50\uAE54\uAE56\uAE5C\uAE5D\uAE5F\uAE60\uAE61\uAE65\uAE68\uAE69\uAE6C\uAE70\uAE78\"],\n[\"b241\",\"\uCF6D\uCF6E\uCF6F\uCF72\uCF73\uCF75\uCF76\uCF77\uCF79\",6,\"\uCF81\uCF82\uCF83\uCF84\uCF86\",5,\"\uCF8D\"],\n[\"b261\",\"\uCF8E\",18,\"\uCFA2\",5,\"\uCFA9\"],\n[\"b281\",\"\uCFAA\",5,\"\uCFB1\",18,\"\uCFC5\",6,\"\uAE79\uAE7B\uAE7C\uAE7D\uAE84\uAE85\uAE8C\uAEBC\uAEBD\uAEBE\uAEC0\uAEC4\uAECC\uAECD\uAECF\uAED0\uAED1\uAED8\uAED9\uAEDC\uAEE8\uAEEB\uAEED\uAEF4\uAEF8\uAEFC\uAF07\uAF08\uAF0D\uAF10\uAF2C\uAF2D\uAF30\uAF32\uAF34\uAF3C\uAF3D\uAF3F\uAF41\uAF42\uAF43\uAF48\uAF49\uAF50\uAF5C\uAF5D\uAF64\uAF65\uAF79\uAF80\uAF84\uAF88\uAF90\uAF91\uAF95\uAF9C\uAFB8\uAFB9\uAFBC\uAFC0\uAFC7\uAFC8\uAFC9\uAFCB\uAFCD\uAFCE\uAFD4\uAFDC\uAFE8\uAFE9\uAFF0\uAFF1\uAFF4\uAFF8\uB000\uB001\uB004\uB00C\uB010\uB014\uB01C\uB01D\uB028\uB044\uB045\uB048\uB04A\uB04C\uB04E\uB053\uB054\uB055\uB057\uB059\"],\n[\"b341\",\"\uCFCC\",19,\"\uCFE2\uCFE3\uCFE5\uCFE6\uCFE7\uCFE9\"],\n[\"b361\",\"\uCFEA\",5,\"\uCFF2\uCFF4\uCFF6\",5,\"\uCFFD\uCFFE\uCFFF\uD001\uD002\uD003\uD005\",5],\n[\"b381\",\"\uD00B\",5,\"\uD012\",5,\"\uD019\",19,\"\uB05D\uB07C\uB07D\uB080\uB084\uB08C\uB08D\uB08F\uB091\uB098\uB099\uB09A\uB09C\uB09F\uB0A0\uB0A1\uB0A2\uB0A8\uB0A9\uB0AB\",4,\"\uB0B1\uB0B3\uB0B4\uB0B5\uB0B8\uB0BC\uB0C4\uB0C5\uB0C7\uB0C8\uB0C9\uB0D0\uB0D1\uB0D4\uB0D8\uB0E0\uB0E5\uB108\uB109\uB10B\uB10C\uB110\uB112\uB113\uB118\uB119\uB11B\uB11C\uB11D\uB123\uB124\uB125\uB128\uB12C\uB134\uB135\uB137\uB138\uB139\uB140\uB141\uB144\uB148\uB150\uB151\uB154\uB155\uB158\uB15C\uB160\uB178\uB179\uB17C\uB180\uB182\uB188\uB189\uB18B\uB18D\uB192\uB193\uB194\uB198\uB19C\uB1A8\uB1CC\uB1D0\uB1D4\uB1DC\uB1DD\"],\n[\"b441\",\"\uD02E\",5,\"\uD036\uD037\uD039\uD03A\uD03B\uD03D\",6,\"\uD046\uD048\uD04A\",5],\n[\"b461\",\"\uD051\uD052\uD053\uD055\uD056\uD057\uD059\",6,\"\uD061\",10,\"\uD06E\uD06F\"],\n[\"b481\",\"\uD071\uD072\uD073\uD075\",6,\"\uD07E\uD07F\uD080\uD082\",18,\"\uB1DF\uB1E8\uB1E9\uB1EC\uB1F0\uB1F9\uB1FB\uB1FD\uB204\uB205\uB208\uB20B\uB20C\uB214\uB215\uB217\uB219\uB220\uB234\uB23C\uB258\uB25C\uB260\uB268\uB269\uB274\uB275\uB27C\uB284\uB285\uB289\uB290\uB291\uB294\uB298\uB299\uB29A\uB2A0\uB2A1\uB2A3\uB2A5\uB2A6\uB2AA\uB2AC\uB2B0\uB2B4\uB2C8\uB2C9\uB2CC\uB2D0\uB2D2\uB2D8\uB2D9\uB2DB\uB2DD\uB2E2\uB2E4\uB2E5\uB2E6\uB2E8\uB2EB\",4,\"\uB2F3\uB2F4\uB2F5\uB2F7\",4,\"\uB2FF\uB300\uB301\uB304\uB308\uB310\uB311\uB313\uB314\uB315\uB31C\uB354\uB355\uB356\uB358\uB35B\uB35C\uB35E\uB35F\uB364\uB365\"],\n[\"b541\",\"\uD095\",14,\"\uD0A6\uD0A7\uD0A9\uD0AA\uD0AB\uD0AD\",5],\n[\"b561\",\"\uD0B3\uD0B6\uD0B8\uD0BA\",5,\"\uD0C2\uD0C3\uD0C5\uD0C6\uD0C7\uD0CA\",5,\"\uD0D2\uD0D6\",4],\n[\"b581\",\"\uD0DB\uD0DE\uD0DF\uD0E1\uD0E2\uD0E3\uD0E5\",6,\"\uD0EE\uD0F2\",5,\"\uD0F9\",11,\"\uB367\uB369\uB36B\uB36E\uB370\uB371\uB374\uB378\uB380\uB381\uB383\uB384\uB385\uB38C\uB390\uB394\uB3A0\uB3A1\uB3A8\uB3AC\uB3C4\uB3C5\uB3C8\uB3CB\uB3CC\uB3CE\uB3D0\uB3D4\uB3D5\uB3D7\uB3D9\uB3DB\uB3DD\uB3E0\uB3E4\uB3E8\uB3FC\uB410\uB418\uB41C\uB420\uB428\uB429\uB42B\uB434\uB450\uB451\uB454\uB458\uB460\uB461\uB463\uB465\uB46C\uB480\uB488\uB49D\uB4A4\uB4A8\uB4AC\uB4B5\uB4B7\uB4B9\uB4C0\uB4C4\uB4C8\uB4D0\uB4D5\uB4DC\uB4DD\uB4E0\uB4E3\uB4E4\uB4E6\uB4EC\uB4ED\uB4EF\uB4F1\uB4F8\uB514\uB515\uB518\uB51B\uB51C\uB524\uB525\uB527\uB528\uB529\uB52A\uB530\uB531\uB534\uB538\"],\n[\"b641\",\"\uD105\",7,\"\uD10E\",17],\n[\"b661\",\"\uD120\",15,\"\uD132\uD133\uD135\uD136\uD137\uD139\uD13B\uD13C\uD13D\uD13E\"],\n[\"b681\",\"\uD13F\uD142\uD146\",5,\"\uD14E\uD14F\uD151\uD152\uD153\uD155\",6,\"\uD15E\uD160\uD162\",5,\"\uD169\uD16A\uD16B\uD16D\uB540\uB541\uB543\uB544\uB545\uB54B\uB54C\uB54D\uB550\uB554\uB55C\uB55D\uB55F\uB560\uB561\uB5A0\uB5A1\uB5A4\uB5A8\uB5AA\uB5AB\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5\uB5BB\uB5BC\uB5BD\uB5C0\uB5C4\uB5CC\uB5CD\uB5CF\uB5D0\uB5D1\uB5D8\uB5EC\uB610\uB611\uB614\uB618\uB625\uB62C\uB634\uB648\uB664\uB668\uB69C\uB69D\uB6A0\uB6A4\uB6AB\uB6AC\uB6B1\uB6D4\uB6F0\uB6F4\uB6F8\uB700\uB701\uB705\uB728\uB729\uB72C\uB72F\uB730\uB738\uB739\uB73B\uB744\uB748\uB74C\uB754\uB755\uB760\uB764\uB768\uB770\uB771\uB773\uB775\uB77C\uB77D\uB780\uB784\uB78C\uB78D\uB78F\uB790\uB791\uB792\uB796\uB797\"],\n[\"b741\",\"\uD16E\",13,\"\uD17D\",6,\"\uD185\uD186\uD187\uD189\uD18A\"],\n[\"b761\",\"\uD18B\",20,\"\uD1A2\uD1A3\uD1A5\uD1A6\uD1A7\"],\n[\"b781\",\"\uD1A9\",6,\"\uD1B2\uD1B4\uD1B6\uD1B7\uD1B8\uD1B9\uD1BB\uD1BD\uD1BE\uD1BF\uD1C1\",14,\"\uB798\uB799\uB79C\uB7A0\uB7A8\uB7A9\uB7AB\uB7AC\uB7AD\uB7B4\uB7B5\uB7B8\uB7C7\uB7C9\uB7EC\uB7ED\uB7F0\uB7F4\uB7FC\uB7FD\uB7FF\uB800\uB801\uB807\uB808\uB809\uB80C\uB810\uB818\uB819\uB81B\uB81D\uB824\uB825\uB828\uB82C\uB834\uB835\uB837\uB838\uB839\uB840\uB844\uB851\uB853\uB85C\uB85D\uB860\uB864\uB86C\uB86D\uB86F\uB871\uB878\uB87C\uB88D\uB8A8\uB8B0\uB8B4\uB8B8\uB8C0\uB8C1\uB8C3\uB8C5\uB8CC\uB8D0\uB8D4\uB8DD\uB8DF\uB8E1\uB8E8\uB8E9\uB8EC\uB8F0\uB8F8\uB8F9\uB8FB\uB8FD\uB904\uB918\uB920\uB93C\uB93D\uB940\uB944\uB94C\uB94F\uB951\uB958\uB959\uB95C\uB960\uB968\uB969\"],\n[\"b841\",\"\uD1D0\",7,\"\uD1D9\",17],\n[\"b861\",\"\uD1EB\",8,\"\uD1F5\uD1F6\uD1F7\uD1F9\",13],\n[\"b881\",\"\uD208\uD20A\",5,\"\uD211\",24,\"\uB96B\uB96D\uB974\uB975\uB978\uB97C\uB984\uB985\uB987\uB989\uB98A\uB98D\uB98E\uB9AC\uB9AD\uB9B0\uB9B4\uB9BC\uB9BD\uB9BF\uB9C1\uB9C8\uB9C9\uB9CC\uB9CE\",4,\"\uB9D8\uB9D9\uB9DB\uB9DD\uB9DE\uB9E1\uB9E3\uB9E4\uB9E5\uB9E8\uB9EC\uB9F4\uB9F5\uB9F7\uB9F8\uB9F9\uB9FA\uBA00\uBA01\uBA08\uBA15\uBA38\uBA39\uBA3C\uBA40\uBA42\uBA48\uBA49\uBA4B\uBA4D\uBA4E\uBA53\uBA54\uBA55\uBA58\uBA5C\uBA64\uBA65\uBA67\uBA68\uBA69\uBA70\uBA71\uBA74\uBA78\uBA83\uBA84\uBA85\uBA87\uBA8C\uBAA8\uBAA9\uBAAB\uBAAC\uBAB0\uBAB2\uBAB8\uBAB9\uBABB\uBABD\uBAC4\uBAC8\uBAD8\uBAD9\uBAFC\"],\n[\"b941\",\"\uD22A\uD22B\uD22E\uD22F\uD231\uD232\uD233\uD235\",6,\"\uD23E\uD240\uD242\",5,\"\uD249\uD24A\uD24B\uD24C\"],\n[\"b961\",\"\uD24D\",14,\"\uD25D\",6,\"\uD265\uD266\uD267\uD268\"],\n[\"b981\",\"\uD269\",22,\"\uD282\uD283\uD285\uD286\uD287\uD289\uD28A\uD28B\uD28C\uBB00\uBB04\uBB0D\uBB0F\uBB11\uBB18\uBB1C\uBB20\uBB29\uBB2B\uBB34\uBB35\uBB36\uBB38\uBB3B\uBB3C\uBB3D\uBB3E\uBB44\uBB45\uBB47\uBB49\uBB4D\uBB4F\uBB50\uBB54\uBB58\uBB61\uBB63\uBB6C\uBB88\uBB8C\uBB90\uBBA4\uBBA8\uBBAC\uBBB4\uBBB7\uBBC0\uBBC4\uBBC8\uBBD0\uBBD3\uBBF8\uBBF9\uBBFC\uBBFF\uBC00\uBC02\uBC08\uBC09\uBC0B\uBC0C\uBC0D\uBC0F\uBC11\uBC14\",4,\"\uBC1B\",4,\"\uBC24\uBC25\uBC27\uBC29\uBC2D\uBC30\uBC31\uBC34\uBC38\uBC40\uBC41\uBC43\uBC44\uBC45\uBC49\uBC4C\uBC4D\uBC50\uBC5D\uBC84\uBC85\uBC88\uBC8B\uBC8C\uBC8E\uBC94\uBC95\uBC97\"],\n[\"ba41\",\"\uD28D\uD28E\uD28F\uD292\uD293\uD294\uD296\",5,\"\uD29D\uD29E\uD29F\uD2A1\uD2A2\uD2A3\uD2A5\",6,\"\uD2AD\"],\n[\"ba61\",\"\uD2AE\uD2AF\uD2B0\uD2B2\",5,\"\uD2BA\uD2BB\uD2BD\uD2BE\uD2C1\uD2C3\",4,\"\uD2CA\uD2CC\",5],\n[\"ba81\",\"\uD2D2\uD2D3\uD2D5\uD2D6\uD2D7\uD2D9\uD2DA\uD2DB\uD2DD\",6,\"\uD2E6\",9,\"\uD2F2\uD2F3\uD2F5\uD2F6\uD2F7\uD2F9\uD2FA\uBC99\uBC9A\uBCA0\uBCA1\uBCA4\uBCA7\uBCA8\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5\uBCBC\uBCBD\uBCC0\uBCC4\uBCCD\uBCCF\uBCD0\uBCD1\uBCD5\uBCD8\uBCDC\uBCF4\uBCF5\uBCF6\uBCF8\uBCFC\uBD04\uBD05\uBD07\uBD09\uBD10\uBD14\uBD24\uBD2C\uBD40\uBD48\uBD49\uBD4C\uBD50\uBD58\uBD59\uBD64\uBD68\uBD80\uBD81\uBD84\uBD87\uBD88\uBD89\uBD8A\uBD90\uBD91\uBD93\uBD95\uBD99\uBD9A\uBD9C\uBDA4\uBDB0\uBDB8\uBDD4\uBDD5\uBDD8\uBDDC\uBDE9\uBDF0\uBDF4\uBDF8\uBE00\uBE03\uBE05\uBE0C\uBE0D\uBE10\uBE14\uBE1C\uBE1D\uBE1F\uBE44\uBE45\uBE48\uBE4C\uBE4E\uBE54\uBE55\uBE57\uBE59\uBE5A\uBE5B\uBE60\uBE61\uBE64\"],\n[\"bb41\",\"\uD2FB\",4,\"\uD302\uD304\uD306\",5,\"\uD30F\uD311\uD312\uD313\uD315\uD317\",4,\"\uD31E\uD322\uD323\"],\n[\"bb61\",\"\uD324\uD326\uD327\uD32A\uD32B\uD32D\uD32E\uD32F\uD331\",6,\"\uD33A\uD33E\",5,\"\uD346\uD347\uD348\uD349\"],\n[\"bb81\",\"\uD34A\",31,\"\uBE68\uBE6A\uBE70\uBE71\uBE73\uBE74\uBE75\uBE7B\uBE7C\uBE7D\uBE80\uBE84\uBE8C\uBE8D\uBE8F\uBE90\uBE91\uBE98\uBE99\uBEA8\uBED0\uBED1\uBED4\uBED7\uBED8\uBEE0\uBEE3\uBEE4\uBEE5\uBEEC\uBF01\uBF08\uBF09\uBF18\uBF19\uBF1B\uBF1C\uBF1D\uBF40\uBF41\uBF44\uBF48\uBF50\uBF51\uBF55\uBF94\uBFB0\uBFC5\uBFCC\uBFCD\uBFD0\uBFD4\uBFDC\uBFDF\uBFE1\uC03C\uC051\uC058\uC05C\uC060\uC068\uC069\uC090\uC091\uC094\uC098\uC0A0\uC0A1\uC0A3\uC0A5\uC0AC\uC0AD\uC0AF\uC0B0\uC0B3\uC0B4\uC0B5\uC0B6\uC0BC\uC0BD\uC0BF\uC0C0\uC0C1\uC0C5\uC0C8\uC0C9\uC0CC\uC0D0\uC0D8\uC0D9\uC0DB\uC0DC\uC0DD\uC0E4\"],\n[\"bc41\",\"\uD36A\",17,\"\uD37E\uD37F\uD381\uD382\uD383\uD385\uD386\uD387\"],\n[\"bc61\",\"\uD388\uD389\uD38A\uD38B\uD38E\uD392\",5,\"\uD39A\uD39B\uD39D\uD39E\uD39F\uD3A1\",6,\"\uD3AA\uD3AC\uD3AE\"],\n[\"bc81\",\"\uD3AF\",4,\"\uD3B5\uD3B6\uD3B7\uD3B9\uD3BA\uD3BB\uD3BD\",6,\"\uD3C6\uD3C7\uD3CA\",5,\"\uD3D1\",5,\"\uC0E5\uC0E8\uC0EC\uC0F4\uC0F5\uC0F7\uC0F9\uC100\uC104\uC108\uC110\uC115\uC11C\",4,\"\uC123\uC124\uC126\uC127\uC12C\uC12D\uC12F\uC130\uC131\uC136\uC138\uC139\uC13C\uC140\uC148\uC149\uC14B\uC14C\uC14D\uC154\uC155\uC158\uC15C\uC164\uC165\uC167\uC168\uC169\uC170\uC174\uC178\uC185\uC18C\uC18D\uC18E\uC190\uC194\uC196\uC19C\uC19D\uC19F\uC1A1\uC1A5\uC1A8\uC1A9\uC1AC\uC1B0\uC1BD\uC1C4\uC1C8\uC1CC\uC1D4\uC1D7\uC1D8\uC1E0\uC1E4\uC1E8\uC1F0\uC1F1\uC1F3\uC1FC\uC1FD\uC200\uC204\uC20C\uC20D\uC20F\uC211\uC218\uC219\uC21C\uC21F\uC220\uC228\uC229\uC22B\uC22D\"],\n[\"bd41\",\"\uD3D7\uD3D9\",7,\"\uD3E2\uD3E4\",7,\"\uD3EE\uD3EF\uD3F1\uD3F2\uD3F3\uD3F5\uD3F6\uD3F7\"],\n[\"bd61\",\"\uD3F8\uD3F9\uD3FA\uD3FB\uD3FE\uD400\uD402\",5,\"\uD409\",13],\n[\"bd81\",\"\uD417\",5,\"\uD41E\",25,\"\uC22F\uC231\uC232\uC234\uC248\uC250\uC251\uC254\uC258\uC260\uC265\uC26C\uC26D\uC270\uC274\uC27C\uC27D\uC27F\uC281\uC288\uC289\uC290\uC298\uC29B\uC29D\uC2A4\uC2A5\uC2A8\uC2AC\uC2AD\uC2B4\uC2B5\uC2B7\uC2B9\uC2DC\uC2DD\uC2E0\uC2E3\uC2E4\uC2EB\uC2EC\uC2ED\uC2EF\uC2F1\uC2F6\uC2F8\uC2F9\uC2FB\uC2FC\uC300\uC308\uC309\uC30C\uC30D\uC313\uC314\uC315\uC318\uC31C\uC324\uC325\uC328\uC329\uC345\uC368\uC369\uC36C\uC370\uC372\uC378\uC379\uC37C\uC37D\uC384\uC388\uC38C\uC3C0\uC3D8\uC3D9\uC3DC\uC3DF\uC3E0\uC3E2\uC3E8\uC3E9\uC3ED\uC3F4\uC3F5\uC3F8\uC408\uC410\uC424\uC42C\uC430\"],\n[\"be41\",\"\uD438\",7,\"\uD441\uD442\uD443\uD445\",14],\n[\"be61\",\"\uD454\",7,\"\uD45D\uD45E\uD45F\uD461\uD462\uD463\uD465\",7,\"\uD46E\uD470\uD471\uD472\"],\n[\"be81\",\"\uD473\",4,\"\uD47A\uD47B\uD47D\uD47E\uD481\uD483\",4,\"\uD48A\uD48C\uD48E\",5,\"\uD495\",8,\"\uC434\uC43C\uC43D\uC448\uC464\uC465\uC468\uC46C\uC474\uC475\uC479\uC480\uC494\uC49C\uC4B8\uC4BC\uC4E9\uC4F0\uC4F1\uC4F4\uC4F8\uC4FA\uC4FF\uC500\uC501\uC50C\uC510\uC514\uC51C\uC528\uC529\uC52C\uC530\uC538\uC539\uC53B\uC53D\uC544\uC545\uC548\uC549\uC54A\uC54C\uC54D\uC54E\uC553\uC554\uC555\uC557\uC558\uC559\uC55D\uC55E\uC560\uC561\uC564\uC568\uC570\uC571\uC573\uC574\uC575\uC57C\uC57D\uC580\uC584\uC587\uC58C\uC58D\uC58F\uC591\uC595\uC597\uC598\uC59C\uC5A0\uC5A9\uC5B4\uC5B5\uC5B8\uC5B9\uC5BB\uC5BC\uC5BD\uC5BE\uC5C4\",6,\"\uC5CC\uC5CE\"],\n[\"bf41\",\"\uD49E\",10,\"\uD4AA\",14],\n[\"bf61\",\"\uD4B9\",18,\"\uD4CD\uD4CE\uD4CF\uD4D1\uD4D2\uD4D3\uD4D5\"],\n[\"bf81\",\"\uD4D6\",5,\"\uD4DD\uD4DE\uD4E0\",7,\"\uD4E9\uD4EA\uD4EB\uD4ED\uD4EE\uD4EF\uD4F1\",6,\"\uD4F9\uD4FA\uD4FC\uC5D0\uC5D1\uC5D4\uC5D8\uC5E0\uC5E1\uC5E3\uC5E5\uC5EC\uC5ED\uC5EE\uC5F0\uC5F4\uC5F6\uC5F7\uC5FC\",5,\"\uC605\uC606\uC607\uC608\uC60C\uC610\uC618\uC619\uC61B\uC61C\uC624\uC625\uC628\uC62C\uC62D\uC62E\uC630\uC633\uC634\uC635\uC637\uC639\uC63B\uC640\uC641\uC644\uC648\uC650\uC651\uC653\uC654\uC655\uC65C\uC65D\uC660\uC66C\uC66F\uC671\uC678\uC679\uC67C\uC680\uC688\uC689\uC68B\uC68D\uC694\uC695\uC698\uC69C\uC6A4\uC6A5\uC6A7\uC6A9\uC6B0\uC6B1\uC6B4\uC6B8\uC6B9\uC6BA\uC6C0\uC6C1\uC6C3\uC6C5\uC6CC\uC6CD\uC6D0\uC6D4\uC6DC\uC6DD\uC6E0\uC6E1\uC6E8\"],\n[\"c041\",\"\uD4FE\",5,\"\uD505\uD506\uD507\uD509\uD50A\uD50B\uD50D\",6,\"\uD516\uD518\",5],\n[\"c061\",\"\uD51E\",25],\n[\"c081\",\"\uD538\uD539\uD53A\uD53B\uD53E\uD53F\uD541\uD542\uD543\uD545\",6,\"\uD54E\uD550\uD552\",5,\"\uD55A\uD55B\uD55D\uD55E\uD55F\uD561\uD562\uD563\uC6E9\uC6EC\uC6F0\uC6F8\uC6F9\uC6FD\uC704\uC705\uC708\uC70C\uC714\uC715\uC717\uC719\uC720\uC721\uC724\uC728\uC730\uC731\uC733\uC735\uC737\uC73C\uC73D\uC740\uC744\uC74A\uC74C\uC74D\uC74F\uC751\",7,\"\uC75C\uC760\uC768\uC76B\uC774\uC775\uC778\uC77C\uC77D\uC77E\uC783\uC784\uC785\uC787\uC788\uC789\uC78A\uC78E\uC790\uC791\uC794\uC796\uC797\uC798\uC79A\uC7A0\uC7A1\uC7A3\uC7A4\uC7A5\uC7A6\uC7AC\uC7AD\uC7B0\uC7B4\uC7BC\uC7BD\uC7BF\uC7C0\uC7C1\uC7C8\uC7C9\uC7CC\uC7CE\uC7D0\uC7D8\uC7DD\uC7E4\uC7E8\uC7EC\uC800\uC801\uC804\uC808\uC80A\"],\n[\"c141\",\"\uD564\uD566\uD567\uD56A\uD56C\uD56E\",5,\"\uD576\uD577\uD579\uD57A\uD57B\uD57D\",6,\"\uD586\uD58A\uD58B\"],\n[\"c161\",\"\uD58C\uD58D\uD58E\uD58F\uD591\",19,\"\uD5A6\uD5A7\"],\n[\"c181\",\"\uD5A8\",31,\"\uC810\uC811\uC813\uC815\uC816\uC81C\uC81D\uC820\uC824\uC82C\uC82D\uC82F\uC831\uC838\uC83C\uC840\uC848\uC849\uC84C\uC84D\uC854\uC870\uC871\uC874\uC878\uC87A\uC880\uC881\uC883\uC885\uC886\uC887\uC88B\uC88C\uC88D\uC894\uC89D\uC89F\uC8A1\uC8A8\uC8BC\uC8BD\uC8C4\uC8C8\uC8CC\uC8D4\uC8D5\uC8D7\uC8D9\uC8E0\uC8E1\uC8E4\uC8F5\uC8FC\uC8FD\uC900\uC904\uC905\uC906\uC90C\uC90D\uC90F\uC911\uC918\uC92C\uC934\uC950\uC951\uC954\uC958\uC960\uC961\uC963\uC96C\uC970\uC974\uC97C\uC988\uC989\uC98C\uC990\uC998\uC999\uC99B\uC99D\uC9C0\uC9C1\uC9C4\uC9C7\uC9C8\uC9CA\uC9D0\uC9D1\uC9D3\"],\n[\"c241\",\"\uD5CA\uD5CB\uD5CD\uD5CE\uD5CF\uD5D1\uD5D3\",4,\"\uD5DA\uD5DC\uD5DE\",5,\"\uD5E6\uD5E7\uD5E9\uD5EA\uD5EB\uD5ED\uD5EE\"],\n[\"c261\",\"\uD5EF\",4,\"\uD5F6\uD5F8\uD5FA\",5,\"\uD602\uD603\uD605\uD606\uD607\uD609\",6,\"\uD612\"],\n[\"c281\",\"\uD616\",5,\"\uD61D\uD61E\uD61F\uD621\uD622\uD623\uD625\",7,\"\uD62E\",9,\"\uD63A\uD63B\uC9D5\uC9D6\uC9D9\uC9DA\uC9DC\uC9DD\uC9E0\uC9E2\uC9E4\uC9E7\uC9EC\uC9ED\uC9EF\uC9F0\uC9F1\uC9F8\uC9F9\uC9FC\uCA00\uCA08\uCA09\uCA0B\uCA0C\uCA0D\uCA14\uCA18\uCA29\uCA4C\uCA4D\uCA50\uCA54\uCA5C\uCA5D\uCA5F\uCA60\uCA61\uCA68\uCA7D\uCA84\uCA98\uCABC\uCABD\uCAC0\uCAC4\uCACC\uCACD\uCACF\uCAD1\uCAD3\uCAD8\uCAD9\uCAE0\uCAEC\uCAF4\uCB08\uCB10\uCB14\uCB18\uCB20\uCB21\uCB41\uCB48\uCB49\uCB4C\uCB50\uCB58\uCB59\uCB5D\uCB64\uCB78\uCB79\uCB9C\uCBB8\uCBD4\uCBE4\uCBE7\uCBE9\uCC0C\uCC0D\uCC10\uCC14\uCC1C\uCC1D\uCC21\uCC22\uCC27\uCC28\uCC29\uCC2C\uCC2E\uCC30\uCC38\uCC39\uCC3B\"],\n[\"c341\",\"\uD63D\uD63E\uD63F\uD641\uD642\uD643\uD644\uD646\uD647\uD64A\uD64C\uD64E\uD64F\uD650\uD652\uD653\uD656\uD657\uD659\uD65A\uD65B\uD65D\",4],\n[\"c361\",\"\uD662\",4,\"\uD668\uD66A\",5,\"\uD672\uD673\uD675\",11],\n[\"c381\",\"\uD681\uD682\uD684\uD686\",5,\"\uD68E\uD68F\uD691\uD692\uD693\uD695\",7,\"\uD69E\uD6A0\uD6A2\",5,\"\uD6A9\uD6AA\uCC3C\uCC3D\uCC3E\uCC44\uCC45\uCC48\uCC4C\uCC54\uCC55\uCC57\uCC58\uCC59\uCC60\uCC64\uCC66\uCC68\uCC70\uCC75\uCC98\uCC99\uCC9C\uCCA0\uCCA8\uCCA9\uCCAB\uCCAC\uCCAD\uCCB4\uCCB5\uCCB8\uCCBC\uCCC4\uCCC5\uCCC7\uCCC9\uCCD0\uCCD4\uCCE4\uCCEC\uCCF0\uCD01\uCD08\uCD09\uCD0C\uCD10\uCD18\uCD19\uCD1B\uCD1D\uCD24\uCD28\uCD2C\uCD39\uCD5C\uCD60\uCD64\uCD6C\uCD6D\uCD6F\uCD71\uCD78\uCD88\uCD94\uCD95\uCD98\uCD9C\uCDA4\uCDA5\uCDA7\uCDA9\uCDB0\uCDC4\uCDCC\uCDD0\uCDE8\uCDEC\uCDF0\uCDF8\uCDF9\uCDFB\uCDFD\uCE04\uCE08\uCE0C\uCE14\uCE19\uCE20\uCE21\uCE24\uCE28\uCE30\uCE31\uCE33\uCE35\"],\n[\"c441\",\"\uD6AB\uD6AD\uD6AE\uD6AF\uD6B1\",7,\"\uD6BA\uD6BC\",7,\"\uD6C6\uD6C7\uD6C9\uD6CA\uD6CB\"],\n[\"c461\",\"\uD6CD\uD6CE\uD6CF\uD6D0\uD6D2\uD6D3\uD6D5\uD6D6\uD6D8\uD6DA\",5,\"\uD6E1\uD6E2\uD6E3\uD6E5\uD6E6\uD6E7\uD6E9\",4],\n[\"c481\",\"\uD6EE\uD6EF\uD6F1\uD6F2\uD6F3\uD6F4\uD6F6\",5,\"\uD6FE\uD6FF\uD701\uD702\uD703\uD705\",11,\"\uD712\uD713\uD714\uCE58\uCE59\uCE5C\uCE5F\uCE60\uCE61\uCE68\uCE69\uCE6B\uCE6D\uCE74\uCE75\uCE78\uCE7C\uCE84\uCE85\uCE87\uCE89\uCE90\uCE91\uCE94\uCE98\uCEA0\uCEA1\uCEA3\uCEA4\uCEA5\uCEAC\uCEAD\uCEC1\uCEE4\uCEE5\uCEE8\uCEEB\uCEEC\uCEF4\uCEF5\uCEF7\uCEF8\uCEF9\uCF00\uCF01\uCF04\uCF08\uCF10\uCF11\uCF13\uCF15\uCF1C\uCF20\uCF24\uCF2C\uCF2D\uCF2F\uCF30\uCF31\uCF38\uCF54\uCF55\uCF58\uCF5C\uCF64\uCF65\uCF67\uCF69\uCF70\uCF71\uCF74\uCF78\uCF80\uCF85\uCF8C\uCFA1\uCFA8\uCFB0\uCFC4\uCFE0\uCFE1\uCFE4\uCFE8\uCFF0\uCFF1\uCFF3\uCFF5\uCFFC\uD000\uD004\uD011\uD018\uD02D\uD034\uD035\uD038\uD03C\"],\n[\"c541\",\"\uD715\uD716\uD717\uD71A\uD71B\uD71D\uD71E\uD71F\uD721\",6,\"\uD72A\uD72C\uD72E\",5,\"\uD736\uD737\uD739\"],\n[\"c561\",\"\uD73A\uD73B\uD73D\",6,\"\uD745\uD746\uD748\uD74A\",5,\"\uD752\uD753\uD755\uD75A\",4],\n[\"c581\",\"\uD75F\uD762\uD764\uD766\uD767\uD768\uD76A\uD76B\uD76D\uD76E\uD76F\uD771\uD772\uD773\uD775\",6,\"\uD77E\uD77F\uD780\uD782\",5,\"\uD78A\uD78B\uD044\uD045\uD047\uD049\uD050\uD054\uD058\uD060\uD06C\uD06D\uD070\uD074\uD07C\uD07D\uD081\uD0A4\uD0A5\uD0A8\uD0AC\uD0B4\uD0B5\uD0B7\uD0B9\uD0C0\uD0C1\uD0C4\uD0C8\uD0C9\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5\uD0DC\uD0DD\uD0E0\uD0E4\uD0EC\uD0ED\uD0EF\uD0F0\uD0F1\uD0F8\uD10D\uD130\uD131\uD134\uD138\uD13A\uD140\uD141\uD143\uD144\uD145\uD14C\uD14D\uD150\uD154\uD15C\uD15D\uD15F\uD161\uD168\uD16C\uD17C\uD184\uD188\uD1A0\uD1A1\uD1A4\uD1A8\uD1B0\uD1B1\uD1B3\uD1B5\uD1BA\uD1BC\uD1C0\uD1D8\uD1F4\uD1F8\uD207\uD209\uD210\uD22C\uD22D\uD230\uD234\uD23C\uD23D\uD23F\uD241\uD248\uD25C\"],\n[\"c641\",\"\uD78D\uD78E\uD78F\uD791\",6,\"\uD79A\uD79C\uD79E\",5],\n[\"c6a1\",\"\uD264\uD280\uD281\uD284\uD288\uD290\uD291\uD295\uD29C\uD2A0\uD2A4\uD2AC\uD2B1\uD2B8\uD2B9\uD2BC\uD2BF\uD2C0\uD2C2\uD2C8\uD2C9\uD2CB\uD2D4\uD2D8\uD2DC\uD2E4\uD2E5\uD2F0\uD2F1\uD2F4\uD2F8\uD300\uD301\uD303\uD305\uD30C\uD30D\uD30E\uD310\uD314\uD316\uD31C\uD31D\uD31F\uD320\uD321\uD325\uD328\uD329\uD32C\uD330\uD338\uD339\uD33B\uD33C\uD33D\uD344\uD345\uD37C\uD37D\uD380\uD384\uD38C\uD38D\uD38F\uD390\uD391\uD398\uD399\uD39C\uD3A0\uD3A8\uD3A9\uD3AB\uD3AD\uD3B4\uD3B8\uD3BC\uD3C4\uD3C5\uD3C8\uD3C9\uD3D0\uD3D8\uD3E1\uD3E3\uD3EC\uD3ED\uD3F0\uD3F4\uD3FC\uD3FD\uD3FF\uD401\"],\n[\"c7a1\",\"\uD408\uD41D\uD440\uD444\uD45C\uD460\uD464\uD46D\uD46F\uD478\uD479\uD47C\uD47F\uD480\uD482\uD488\uD489\uD48B\uD48D\uD494\uD4A9\uD4CC\uD4D0\uD4D4\uD4DC\uD4DF\uD4E8\uD4EC\uD4F0\uD4F8\uD4FB\uD4FD\uD504\uD508\uD50C\uD514\uD515\uD517\uD53C\uD53D\uD540\uD544\uD54C\uD54D\uD54F\uD551\uD558\uD559\uD55C\uD560\uD565\uD568\uD569\uD56B\uD56D\uD574\uD575\uD578\uD57C\uD584\uD585\uD587\uD588\uD589\uD590\uD5A5\uD5C8\uD5C9\uD5CC\uD5D0\uD5D2\uD5D8\uD5D9\uD5DB\uD5DD\uD5E4\uD5E5\uD5E8\uD5EC\uD5F4\uD5F5\uD5F7\uD5F9\uD600\uD601\uD604\uD608\uD610\uD611\uD613\uD614\uD615\uD61C\uD620\"],\n[\"c8a1\",\"\uD624\uD62D\uD638\uD639\uD63C\uD640\uD645\uD648\uD649\uD64B\uD64D\uD651\uD654\uD655\uD658\uD65C\uD667\uD669\uD670\uD671\uD674\uD683\uD685\uD68C\uD68D\uD690\uD694\uD69D\uD69F\uD6A1\uD6A8\uD6AC\uD6B0\uD6B9\uD6BB\uD6C4\uD6C5\uD6C8\uD6CC\uD6D1\uD6D4\uD6D7\uD6D9\uD6E0\uD6E4\uD6E8\uD6F0\uD6F5\uD6FC\uD6FD\uD700\uD704\uD711\uD718\uD719\uD71C\uD720\uD728\uD729\uD72B\uD72D\uD734\uD735\uD738\uD73C\uD744\uD747\uD749\uD750\uD751\uD754\uD756\uD757\uD758\uD759\uD760\uD761\uD763\uD765\uD769\uD76C\uD770\uD774\uD77C\uD77D\uD781\uD788\uD789\uD78C\uD790\uD798\uD799\uD79B\uD79D\"],\n[\"caa1\",\"\u4F3D\u4F73\u5047\u50F9\u52A0\u53EF\u5475\u54E5\u5609\u5AC1\u5BB6\u6687\u67B6\u67B7\u67EF\u6B4C\u73C2\u75C2\u7A3C\u82DB\u8304\u8857\u8888\u8A36\u8CC8\u8DCF\u8EFB\u8FE6\u99D5\u523B\u5374\u5404\u606A\u6164\u6BBC\u73CF\u811A\u89BA\u89D2\u95A3\u4F83\u520A\u58BE\u5978\u59E6\u5E72\u5E79\u61C7\u63C0\u6746\u67EC\u687F\u6F97\u764E\u770B\u78F5\u7A08\u7AFF\u7C21\u809D\u826E\u8271\u8AEB\u9593\u4E6B\u559D\u66F7\u6E34\u78A3\u7AED\u845B\u8910\u874E\u97A8\u52D8\u574E\u582A\u5D4C\u611F\u61BE\u6221\u6562\u67D1\u6A44\u6E1B\u7518\u75B3\u76E3\u77B0\u7D3A\u90AF\u9451\u9452\u9F95\"],\n[\"cba1\",\"\u5323\u5CAC\u7532\u80DB\u9240\u9598\u525B\u5808\u59DC\u5CA1\u5D17\u5EB7\u5F3A\u5F4A\u6177\u6C5F\u757A\u7586\u7CE0\u7D73\u7DB1\u7F8C\u8154\u8221\u8591\u8941\u8B1B\u92FC\u964D\u9C47\u4ECB\u4EF7\u500B\u51F1\u584F\u6137\u613E\u6168\u6539\u69EA\u6F11\u75A5\u7686\u76D6\u7B87\u82A5\u84CB\uF900\u93A7\u958B\u5580\u5BA2\u5751\uF901\u7CB3\u7FB9\u91B5\u5028\u53BB\u5C45\u5DE8\u62D2\u636E\u64DA\u64E7\u6E20\u70AC\u795B\u8DDD\u8E1E\uF902\u907D\u9245\u92F8\u4E7E\u4EF6\u5065\u5DFE\u5EFA\u6106\u6957\u8171\u8654\u8E47\u9375\u9A2B\u4E5E\u5091\u6770\u6840\u5109\u528D\u5292\u6AA2\"],\n[\"cca1\",\"\u77BC\u9210\u9ED4\u52AB\u602F\u8FF2\u5048\u61A9\u63ED\u64CA\u683C\u6A84\u6FC0\u8188\u89A1\u9694\u5805\u727D\u72AC\u7504\u7D79\u7E6D\u80A9\u898B\u8B74\u9063\u9D51\u6289\u6C7A\u6F54\u7D50\u7F3A\u8A23\u517C\u614A\u7B9D\u8B19\u9257\u938C\u4EAC\u4FD3\u501E\u50BE\u5106\u52C1\u52CD\u537F\u5770\u5883\u5E9A\u5F91\u6176\u61AC\u64CE\u656C\u666F\u66BB\u66F4\u6897\u6D87\u7085\u70F1\u749F\u74A5\u74CA\u75D9\u786C\u78EC\u7ADF\u7AF6\u7D45\u7D93\u8015\u803F\u811B\u8396\u8B66\u8F15\u9015\u93E1\u9803\u9838\u9A5A\u9BE8\u4FC2\u5553\u583A\u5951\u5B63\u5C46\u60B8\u6212\u6842\u68B0\"],\n[\"cda1\",\"\u68E8\u6EAA\u754C\u7678\u78CE\u7A3D\u7CFB\u7E6B\u7E7C\u8A08\u8AA1\u8C3F\u968E\u9DC4\u53E4\u53E9\u544A\u5471\u56FA\u59D1\u5B64\u5C3B\u5EAB\u62F7\u6537\u6545\u6572\u66A0\u67AF\u69C1\u6CBD\u75FC\u7690\u777E\u7A3F\u7F94\u8003\u80A1\u818F\u82E6\u82FD\u83F0\u85C1\u8831\u88B4\u8AA5\uF903\u8F9C\u932E\u96C7\u9867\u9AD8\u9F13\u54ED\u659B\u66F2\u688F\u7A40\u8C37\u9D60\u56F0\u5764\u5D11\u6606\u68B1\u68CD\u6EFE\u7428\u889E\u9BE4\u6C68\uF904\u9AA8\u4F9B\u516C\u5171\u529F\u5B54\u5DE5\u6050\u606D\u62F1\u63A7\u653B\u73D9\u7A7A\u86A3\u8CA2\u978F\u4E32\u5BE1\u6208\u679C\u74DC\"],\n[\"cea1\",\"\u79D1\u83D3\u8A87\u8AB2\u8DE8\u904E\u934B\u9846\u5ED3\u69E8\u85FF\u90ED\uF905\u51A0\u5B98\u5BEC\u6163\u68FA\u6B3E\u704C\u742F\u74D8\u7BA1\u7F50\u83C5\u89C0\u8CAB\u95DC\u9928\u522E\u605D\u62EC\u9002\u4F8A\u5149\u5321\u58D9\u5EE3\u66E0\u6D38\u709A\u72C2\u73D6\u7B50\u80F1\u945B\u5366\u639B\u7F6B\u4E56\u5080\u584A\u58DE\u602A\u6127\u62D0\u69D0\u9B41\u5B8F\u7D18\u80B1\u8F5F\u4EA4\u50D1\u54AC\u55AC\u5B0C\u5DA0\u5DE7\u652A\u654E\u6821\u6A4B\u72E1\u768E\u77EF\u7D5E\u7FF9\u81A0\u854E\u86DF\u8F03\u8F4E\u90CA\u9903\u9A55\u9BAB\u4E18\u4E45\u4E5D\u4EC7\u4FF1\u5177\u52FE\"],\n[\"cfa1\",\"\u5340\u53E3\u53E5\u548E\u5614\u5775\u57A2\u5BC7\u5D87\u5ED0\u61FC\u62D8\u6551\u67B8\u67E9\u69CB\u6B50\u6BC6\u6BEC\u6C42\u6E9D\u7078\u72D7\u7396\u7403\u77BF\u77E9\u7A76\u7D7F\u8009\u81FC\u8205\u820A\u82DF\u8862\u8B33\u8CFC\u8EC0\u9011\u90B1\u9264\u92B6\u99D2\u9A45\u9CE9\u9DD7\u9F9C\u570B\u5C40\u83CA\u97A0\u97AB\u9EB4\u541B\u7A98\u7FA4\u88D9\u8ECD\u90E1\u5800\u5C48\u6398\u7A9F\u5BAE\u5F13\u7A79\u7AAE\u828E\u8EAC\u5026\u5238\u52F8\u5377\u5708\u62F3\u6372\u6B0A\u6DC3\u7737\u53A5\u7357\u8568\u8E76\u95D5\u673A\u6AC3\u6F70\u8A6D\u8ECC\u994B\uF906\u6677\u6B78\u8CB4\"],\n[\"d0a1\",\"\u9B3C\uF907\u53EB\u572D\u594E\u63C6\u69FB\u73EA\u7845\u7ABA\u7AC5\u7CFE\u8475\u898F\u8D73\u9035\u95A8\u52FB\u5747\u7547\u7B60\u83CC\u921E\uF908\u6A58\u514B\u524B\u5287\u621F\u68D8\u6975\u9699\u50C5\u52A4\u52E4\u61C3\u65A4\u6839\u69FF\u747E\u7B4B\u82B9\u83EB\u89B2\u8B39\u8FD1\u9949\uF909\u4ECA\u5997\u64D2\u6611\u6A8E\u7434\u7981\u79BD\u82A9\u887E\u887F\u895F\uF90A\u9326\u4F0B\u53CA\u6025\u6271\u6C72\u7D1A\u7D66\u4E98\u5162\u77DC\u80AF\u4F01\u4F0E\u5176\u5180\u55DC\u5668\u573B\u57FA\u57FC\u5914\u5947\u5993\u5BC4\u5C90\u5D0E\u5DF1\u5E7E\u5FCC\u6280\u65D7\u65E3\"],\n[\"d1a1\",\"\u671E\u671F\u675E\u68CB\u68C4\u6A5F\u6B3A\u6C23\u6C7D\u6C82\u6DC7\u7398\u7426\u742A\u7482\u74A3\u7578\u757F\u7881\u78EF\u7941\u7947\u7948\u797A\u7B95\u7D00\u7DBA\u7F88\u8006\u802D\u808C\u8A18\u8B4F\u8C48\u8D77\u9321\u9324\u98E2\u9951\u9A0E\u9A0F\u9A65\u9E92\u7DCA\u4F76\u5409\u62EE\u6854\u91D1\u55AB\u513A\uF90B\uF90C\u5A1C\u61E6\uF90D\u62CF\u62FF\uF90E\",5,\"\u90A3\uF914\",4,\"\u8AFE\uF919\uF91A\uF91B\uF91C\u6696\uF91D\u7156\uF91E\uF91F\u96E3\uF920\u634F\u637A\u5357\uF921\u678F\u6960\u6E73\uF922\u7537\uF923\uF924\uF925\"],\n[\"d2a1\",\"\u7D0D\uF926\uF927\u8872\u56CA\u5A18\uF928\",4,\"\u4E43\uF92D\u5167\u5948\u67F0\u8010\uF92E\u5973\u5E74\u649A\u79CA\u5FF5\u606C\u62C8\u637B\u5BE7\u5BD7\u52AA\uF92F\u5974\u5F29\u6012\uF930\uF931\uF932\u7459\uF933\",5,\"\u99D1\uF939\",10,\"\u6FC3\uF944\uF945\u81BF\u8FB2\u60F1\uF946\uF947\u8166\uF948\uF949\u5C3F\uF94A\",7,\"\u5AE9\u8A25\u677B\u7D10\uF952\",5,\"\u80FD\uF958\uF959\u5C3C\u6CE5\u533F\u6EBA\u591A\u8336\"],\n[\"d3a1\",\"\u4E39\u4EB6\u4F46\u55AE\u5718\u58C7\u5F56\u65B7\u65E6\u6A80\u6BB5\u6E4D\u77ED\u7AEF\u7C1E\u7DDE\u86CB\u8892\u9132\u935B\u64BB\u6FBE\u737A\u75B8\u9054\u5556\u574D\u61BA\u64D4\u66C7\u6DE1\u6E5B\u6F6D\u6FB9\u75F0\u8043\u81BD\u8541\u8983\u8AC7\u8B5A\u931F\u6C93\u7553\u7B54\u8E0F\u905D\u5510\u5802\u5858\u5E62\u6207\u649E\u68E0\u7576\u7CD6\u87B3\u9EE8\u4EE3\u5788\u576E\u5927\u5C0D\u5CB1\u5E36\u5F85\u6234\u64E1\u73B3\u81FA\u888B\u8CB8\u968A\u9EDB\u5B85\u5FB7\u60B3\u5012\u5200\u5230\u5716\u5835\u5857\u5C0E\u5C60\u5CF6\u5D8B\u5EA6\u5F92\u60BC\u6311\u6389\u6417\u6843\"],\n[\"d4a1\",\"\u68F9\u6AC2\u6DD8\u6E21\u6ED4\u6FE4\u71FE\u76DC\u7779\u79B1\u7A3B\u8404\u89A9\u8CED\u8DF3\u8E48\u9003\u9014\u9053\u90FD\u934D\u9676\u97DC\u6BD2\u7006\u7258\u72A2\u7368\u7763\u79BF\u7BE4\u7E9B\u8B80\u58A9\u60C7\u6566\u65FD\u66BE\u6C8C\u711E\u71C9\u8C5A\u9813\u4E6D\u7A81\u4EDD\u51AC\u51CD\u52D5\u540C\u61A7\u6771\u6850\u68DF\u6D1E\u6F7C\u75BC\u77B3\u7AE5\u80F4\u8463\u9285\u515C\u6597\u675C\u6793\u75D8\u7AC7\u8373\uF95A\u8C46\u9017\u982D\u5C6F\u81C0\u829A\u9041\u906F\u920D\u5F97\u5D9D\u6A59\u71C8\u767B\u7B49\u85E4\u8B04\u9127\u9A30\u5587\u61F6\uF95B\u7669\u7F85\"],\n[\"d5a1\",\"\u863F\u87BA\u88F8\u908F\uF95C\u6D1B\u70D9\u73DE\u7D61\u843D\uF95D\u916A\u99F1\uF95E\u4E82\u5375\u6B04\u6B12\u703E\u721B\u862D\u9E1E\u524C\u8FA3\u5D50\u64E5\u652C\u6B16\u6FEB\u7C43\u7E9C\u85CD\u8964\u89BD\u62C9\u81D8\u881F\u5ECA\u6717\u6D6A\u72FC\u7405\u746F\u8782\u90DE\u4F86\u5D0D\u5FA0\u840A\u51B7\u63A0\u7565\u4EAE\u5006\u5169\u51C9\u6881\u6A11\u7CAE\u7CB1\u7CE7\u826F\u8AD2\u8F1B\u91CF\u4FB6\u5137\u52F5\u5442\u5EEC\u616E\u623E\u65C5\u6ADA\u6FFE\u792A\u85DC\u8823\u95AD\u9A62\u9A6A\u9E97\u9ECE\u529B\u66C6\u6B77\u701D\u792B\u8F62\u9742\u6190\u6200\u6523\u6F23\"],\n[\"d6a1\",\"\u7149\u7489\u7DF4\u806F\u84EE\u8F26\u9023\u934A\u51BD\u5217\u52A3\u6D0C\u70C8\u88C2\u5EC9\u6582\u6BAE\u6FC2\u7C3E\u7375\u4EE4\u4F36\u56F9\uF95F\u5CBA\u5DBA\u601C\u73B2\u7B2D\u7F9A\u7FCE\u8046\u901E\u9234\u96F6\u9748\u9818\u9F61\u4F8B\u6FA7\u79AE\u91B4\u96B7\u52DE\uF960\u6488\u64C4\u6AD3\u6F5E\u7018\u7210\u76E7\u8001\u8606\u865C\u8DEF\u8F05\u9732\u9B6F\u9DFA\u9E75\u788C\u797F\u7DA0\u83C9\u9304\u9E7F\u9E93\u8AD6\u58DF\u5F04\u6727\u7027\u74CF\u7C60\u807E\u5121\u7028\u7262\u78CA\u8CC2\u8CDA\u8CF4\u96F7\u4E86\u50DA\u5BEE\u5ED6\u6599\u71CE\u7642\u77AD\u804A\u84FC\"],\n[\"d7a1\",\"\u907C\u9B27\u9F8D\u58D8\u5A41\u5C62\u6A13\u6DDA\u6F0F\u763B\u7D2F\u7E37\u851E\u8938\u93E4\u964B\u5289\u65D2\u67F3\u69B4\u6D41\u6E9C\u700F\u7409\u7460\u7559\u7624\u786B\u8B2C\u985E\u516D\u622E\u9678\u4F96\u502B\u5D19\u6DEA\u7DB8\u8F2A\u5F8B\u6144\u6817\uF961\u9686\u52D2\u808B\u51DC\u51CC\u695E\u7A1C\u7DBE\u83F1\u9675\u4FDA\u5229\u5398\u540F\u550E\u5C65\u60A7\u674E\u68A8\u6D6C\u7281\u72F8\u7406\u7483\uF962\u75E2\u7C6C\u7F79\u7FB8\u8389\u88CF\u88E1\u91CC\u91D0\u96E2\u9BC9\u541D\u6F7E\u71D0\u7498\u85FA\u8EAA\u96A3\u9C57\u9E9F\u6797\u6DCB\u7433\u81E8\u9716\u782C\"],\n[\"d8a1\",\"\u7ACB\u7B20\u7C92\u6469\u746A\u75F2\u78BC\u78E8\u99AC\u9B54\u9EBB\u5BDE\u5E55\u6F20\u819C\u83AB\u9088\u4E07\u534D\u5A29\u5DD2\u5F4E\u6162\u633D\u6669\u66FC\u6EFF\u6F2B\u7063\u779E\u842C\u8513\u883B\u8F13\u9945\u9C3B\u551C\u62B9\u672B\u6CAB\u8309\u896A\u977A\u4EA1\u5984\u5FD8\u5FD9\u671B\u7DB2\u7F54\u8292\u832B\u83BD\u8F1E\u9099\u57CB\u59B9\u5A92\u5BD0\u6627\u679A\u6885\u6BCF\u7164\u7F75\u8CB7\u8CE3\u9081\u9B45\u8108\u8C8A\u964C\u9A40\u9EA5\u5B5F\u6C13\u731B\u76F2\u76DF\u840C\u51AA\u8993\u514D\u5195\u52C9\u68C9\u6C94\u7704\u7720\u7DBF\u7DEC\u9762\u9EB5\u6EC5\"],\n[\"d9a1\",\"\u8511\u51A5\u540D\u547D\u660E\u669D\u6927\u6E9F\u76BF\u7791\u8317\u84C2\u879F\u9169\u9298\u9CF4\u8882\u4FAE\u5192\u52DF\u59C6\u5E3D\u6155\u6478\u6479\u66AE\u67D0\u6A21\u6BCD\u6BDB\u725F\u7261\u7441\u7738\u77DB\u8017\u82BC\u8305\u8B00\u8B28\u8C8C\u6728\u6C90\u7267\u76EE\u7766\u7A46\u9DA9\u6B7F\u6C92\u5922\u6726\u8499\u536F\u5893\u5999\u5EDF\u63CF\u6634\u6773\u6E3A\u732B\u7AD7\u82D7\u9328\u52D9\u5DEB\u61AE\u61CB\u620A\u62C7\u64AB\u65E0\u6959\u6B66\u6BCB\u7121\u73F7\u755D\u7E46\u821E\u8302\u856A\u8AA3\u8CBF\u9727\u9D61\u58A8\u9ED8\u5011\u520E\u543B\u554F\u6587\"],\n[\"daa1\",\"\u6C76\u7D0A\u7D0B\u805E\u868A\u9580\u96EF\u52FF\u6C95\u7269\u5473\u5A9A\u5C3E\u5D4B\u5F4C\u5FAE\u672A\u68B6\u6963\u6E3C\u6E44\u7709\u7C73\u7F8E\u8587\u8B0E\u8FF7\u9761\u9EF4\u5CB7\u60B6\u610D\u61AB\u654F\u65FB\u65FC\u6C11\u6CEF\u739F\u73C9\u7DE1\u9594\u5BC6\u871C\u8B10\u525D\u535A\u62CD\u640F\u64B2\u6734\u6A38\u6CCA\u73C0\u749E\u7B94\u7C95\u7E1B\u818A\u8236\u8584\u8FEB\u96F9\u99C1\u4F34\u534A\u53CD\u53DB\u62CC\u642C\u6500\u6591\u69C3\u6CEE\u6F58\u73ED\u7554\u7622\u76E4\u76FC\u78D0\u78FB\u792C\u7D46\u822C\u87E0\u8FD4\u9812\u98EF\u52C3\u62D4\u64A5\u6E24\u6F51\"],\n[\"dba1\",\"\u767C\u8DCB\u91B1\u9262\u9AEE\u9B43\u5023\u508D\u574A\u59A8\u5C28\u5E47\u5F77\u623F\u653E\u65B9\u65C1\u6609\u678B\u699C\u6EC2\u78C5\u7D21\u80AA\u8180\u822B\u82B3\u84A1\u868C\u8A2A\u8B17\u90A6\u9632\u9F90\u500D\u4FF3\uF963\u57F9\u5F98\u62DC\u6392\u676F\u6E43\u7119\u76C3\u80CC\u80DA\u88F4\u88F5\u8919\u8CE0\u8F29\u914D\u966A\u4F2F\u4F70\u5E1B\u67CF\u6822\u767D\u767E\u9B44\u5E61\u6A0A\u7169\u71D4\u756A\uF964\u7E41\u8543\u85E9\u98DC\u4F10\u7B4F\u7F70\u95A5\u51E1\u5E06\u68B5\u6C3E\u6C4E\u6CDB\u72AF\u7BC4\u8303\u6CD5\u743A\u50FB\u5288\u58C1\u64D8\u6A97\u74A7\u7656\"],\n[\"dca1\",\"\u78A7\u8617\u95E2\u9739\uF965\u535E\u5F01\u8B8A\u8FA8\u8FAF\u908A\u5225\u77A5\u9C49\u9F08\u4E19\u5002\u5175\u5C5B\u5E77\u661E\u663A\u67C4\u68C5\u70B3\u7501\u75C5\u79C9\u7ADD\u8F27\u9920\u9A08\u4FDD\u5821\u5831\u5BF6\u666E\u6B65\u6D11\u6E7A\u6F7D\u73E4\u752B\u83E9\u88DC\u8913\u8B5C\u8F14\u4F0F\u50D5\u5310\u535C\u5B93\u5FA9\u670D\u798F\u8179\u832F\u8514\u8907\u8986\u8F39\u8F3B\u99A5\u9C12\u672C\u4E76\u4FF8\u5949\u5C01\u5CEF\u5CF0\u6367\u68D2\u70FD\u71A2\u742B\u7E2B\u84EC\u8702\u9022\u92D2\u9CF3\u4E0D\u4ED8\u4FEF\u5085\u5256\u526F\u5426\u5490\u57E0\u592B\u5A66\"],\n[\"dda1\",\"\u5B5A\u5B75\u5BCC\u5E9C\uF966\u6276\u6577\u65A7\u6D6E\u6EA5\u7236\u7B26\u7C3F\u7F36\u8150\u8151\u819A\u8240\u8299\u83A9\u8A03\u8CA0\u8CE6\u8CFB\u8D74\u8DBA\u90E8\u91DC\u961C\u9644\u99D9\u9CE7\u5317\u5206\u5429\u5674\u58B3\u5954\u596E\u5FFF\u61A4\u626E\u6610\u6C7E\u711A\u76C6\u7C89\u7CDE\u7D1B\u82AC\u8CC1\u96F0\uF967\u4F5B\u5F17\u5F7F\u62C2\u5D29\u670B\u68DA\u787C\u7E43\u9D6C\u4E15\u5099\u5315\u532A\u5351\u5983\u5A62\u5E87\u60B2\u618A\u6249\u6279\u6590\u6787\u69A7\u6BD4\u6BD6\u6BD7\u6BD8\u6CB8\uF968\u7435\u75FA\u7812\u7891\u79D5\u79D8\u7C83\u7DCB\u7FE1\u80A5\"],\n[\"dea1\",\"\u813E\u81C2\u83F2\u871A\u88E8\u8AB9\u8B6C\u8CBB\u9119\u975E\u98DB\u9F3B\u56AC\u5B2A\u5F6C\u658C\u6AB3\u6BAF\u6D5C\u6FF1\u7015\u725D\u73AD\u8CA7\u8CD3\u983B\u6191\u6C37\u8058\u9A01\u4E4D\u4E8B\u4E9B\u4ED5\u4F3A\u4F3C\u4F7F\u4FDF\u50FF\u53F2\u53F8\u5506\u55E3\u56DB\u58EB\u5962\u5A11\u5BEB\u5BFA\u5C04\u5DF3\u5E2B\u5F99\u601D\u6368\u659C\u65AF\u67F6\u67FB\u68AD\u6B7B\u6C99\u6CD7\u6E23\u7009\u7345\u7802\u793E\u7940\u7960\u79C1\u7BE9\u7D17\u7D72\u8086\u820D\u838E\u84D1\u86C7\u88DF\u8A50\u8A5E\u8B1D\u8CDC\u8D66\u8FAD\u90AA\u98FC\u99DF\u9E9D\u524A\uF969\u6714\uF96A\"],\n[\"dfa1\",\"\u5098\u522A\u5C71\u6563\u6C55\u73CA\u7523\u759D\u7B97\u849C\u9178\u9730\u4E77\u6492\u6BBA\u715E\u85A9\u4E09\uF96B\u6749\u68EE\u6E17\u829F\u8518\u886B\u63F7\u6F81\u9212\u98AF\u4E0A\u50B7\u50CF\u511F\u5546\u55AA\u5617\u5B40\u5C19\u5CE0\u5E38\u5E8A\u5EA0\u5EC2\u60F3\u6851\u6A61\u6E58\u723D\u7240\u72C0\u76F8\u7965\u7BB1\u7FD4\u88F3\u89F4\u8A73\u8C61\u8CDE\u971C\u585E\u74BD\u8CFD\u55C7\uF96C\u7A61\u7D22\u8272\u7272\u751F\u7525\uF96D\u7B19\u5885\u58FB\u5DBC\u5E8F\u5EB6\u5F90\u6055\u6292\u637F\u654D\u6691\u66D9\u66F8\u6816\u68F2\u7280\u745E\u7B6E\u7D6E\u7DD6\u7F72\"],\n[\"e0a1\",\"\u80E5\u8212\u85AF\u897F\u8A93\u901D\u92E4\u9ECD\u9F20\u5915\u596D\u5E2D\u60DC\u6614\u6673\u6790\u6C50\u6DC5\u6F5F\u77F3\u78A9\u84C6\u91CB\u932B\u4ED9\u50CA\u5148\u5584\u5B0B\u5BA3\u6247\u657E\u65CB\u6E32\u717D\u7401\u7444\u7487\u74BF\u766C\u79AA\u7DDA\u7E55\u7FA8\u817A\u81B3\u8239\u861A\u87EC\u8A75\u8DE3\u9078\u9291\u9425\u994D\u9BAE\u5368\u5C51\u6954\u6CC4\u6D29\u6E2B\u820C\u859B\u893B\u8A2D\u8AAA\u96EA\u9F67\u5261\u66B9\u6BB2\u7E96\u87FE\u8D0D\u9583\u965D\u651D\u6D89\u71EE\uF96E\u57CE\u59D3\u5BAC\u6027\u60FA\u6210\u661F\u665F\u7329\u73F9\u76DB\u7701\u7B6C\"],\n[\"e1a1\",\"\u8056\u8072\u8165\u8AA0\u9192\u4E16\u52E2\u6B72\u6D17\u7A05\u7B39\u7D30\uF96F\u8CB0\u53EC\u562F\u5851\u5BB5\u5C0F\u5C11\u5DE2\u6240\u6383\u6414\u662D\u68B3\u6CBC\u6D88\u6EAF\u701F\u70A4\u71D2\u7526\u758F\u758E\u7619\u7B11\u7BE0\u7C2B\u7D20\u7D39\u852C\u856D\u8607\u8A34\u900D\u9061\u90B5\u92B7\u97F6\u9A37\u4FD7\u5C6C\u675F\u6D91\u7C9F\u7E8C\u8B16\u8D16\u901F\u5B6B\u5DFD\u640D\u84C0\u905C\u98E1\u7387\u5B8B\u609A\u677E\u6DDE\u8A1F\u8AA6\u9001\u980C\u5237\uF970\u7051\u788E\u9396\u8870\u91D7\u4FEE\u53D7\u55FD\u56DA\u5782\u58FD\u5AC2\u5B88\u5CAB\u5CC0\u5E25\u6101\"],\n[\"e2a1\",\"\u620D\u624B\u6388\u641C\u6536\u6578\u6A39\u6B8A\u6C34\u6D19\u6F31\u71E7\u72E9\u7378\u7407\u74B2\u7626\u7761\u79C0\u7A57\u7AEA\u7CB9\u7D8F\u7DAC\u7E61\u7F9E\u8129\u8331\u8490\u84DA\u85EA\u8896\u8AB0\u8B90\u8F38\u9042\u9083\u916C\u9296\u92B9\u968B\u96A7\u96A8\u96D6\u9700\u9808\u9996\u9AD3\u9B1A\u53D4\u587E\u5919\u5B70\u5BBF\u6DD1\u6F5A\u719F\u7421\u74B9\u8085\u83FD\u5DE1\u5F87\u5FAA\u6042\u65EC\u6812\u696F\u6A53\u6B89\u6D35\u6DF3\u73E3\u76FE\u77AC\u7B4D\u7D14\u8123\u821C\u8340\u84F4\u8563\u8A62\u8AC4\u9187\u931E\u9806\u99B4\u620C\u8853\u8FF0\u9265\u5D07\u5D27\"],\n[\"e3a1\",\"\u5D69\u745F\u819D\u8768\u6FD5\u62FE\u7FD2\u8936\u8972\u4E1E\u4E58\u50E7\u52DD\u5347\u627F\u6607\u7E69\u8805\u965E\u4F8D\u5319\u5636\u59CB\u5AA4\u5C38\u5C4E\u5C4D\u5E02\u5F11\u6043\u65BD\u662F\u6642\u67BE\u67F4\u731C\u77E2\u793A\u7FC5\u8494\u84CD\u8996\u8A66\u8A69\u8AE1\u8C55\u8C7A\u57F4\u5BD4\u5F0F\u606F\u62ED\u690D\u6B96\u6E5C\u7184\u7BD2\u8755\u8B58\u8EFE\u98DF\u98FE\u4F38\u4F81\u4FE1\u547B\u5A20\u5BB8\u613C\u65B0\u6668\u71FC\u7533\u795E\u7D33\u814E\u81E3\u8398\u85AA\u85CE\u8703\u8A0A\u8EAB\u8F9B\uF971\u8FC5\u5931\u5BA4\u5BE6\u6089\u5BE9\u5C0B\u5FC3\u6C81\"],\n[\"e4a1\",\"\uF972\u6DF1\u700B\u751A\u82AF\u8AF6\u4EC0\u5341\uF973\u96D9\u6C0F\u4E9E\u4FC4\u5152\u555E\u5A25\u5CE8\u6211\u7259\u82BD\u83AA\u86FE\u8859\u8A1D\u963F\u96C5\u9913\u9D09\u9D5D\u580A\u5CB3\u5DBD\u5E44\u60E1\u6115\u63E1\u6A02\u6E25\u9102\u9354\u984E\u9C10\u9F77\u5B89\u5CB8\u6309\u664F\u6848\u773C\u96C1\u978D\u9854\u9B9F\u65A1\u8B01\u8ECB\u95BC\u5535\u5CA9\u5DD6\u5EB5\u6697\u764C\u83F4\u95C7\u58D3\u62BC\u72CE\u9D28\u4EF0\u592E\u600F\u663B\u6B83\u79E7\u9D26\u5393\u54C0\u57C3\u5D16\u611B\u66D6\u6DAF\u788D\u827E\u9698\u9744\u5384\u627C\u6396\u6DB2\u7E0A\u814B\u984D\"],\n[\"e5a1\",\"\u6AFB\u7F4C\u9DAF\u9E1A\u4E5F\u503B\u51B6\u591C\u60F9\u63F6\u6930\u723A\u8036\uF974\u91CE\u5F31\uF975\uF976\u7D04\u82E5\u846F\u84BB\u85E5\u8E8D\uF977\u4F6F\uF978\uF979\u58E4\u5B43\u6059\u63DA\u6518\u656D\u6698\uF97A\u694A\u6A23\u6D0B\u7001\u716C\u75D2\u760D\u79B3\u7A70\uF97B\u7F8A\uF97C\u8944\uF97D\u8B93\u91C0\u967D\uF97E\u990A\u5704\u5FA1\u65BC\u6F01\u7600\u79A6\u8A9E\u99AD\u9B5A\u9F6C\u5104\u61B6\u6291\u6A8D\u81C6\u5043\u5830\u5F66\u7109\u8A00\u8AFA\u5B7C\u8616\u4FFA\u513C\u56B4\u5944\u63A9\u6DF9\u5DAA\u696D\u5186\u4E88\u4F59\uF97F\uF980\uF981\u5982\uF982\"],\n[\"e6a1\",\"\uF983\u6B5F\u6C5D\uF984\u74B5\u7916\uF985\u8207\u8245\u8339\u8F3F\u8F5D\uF986\u9918\uF987\uF988\uF989\u4EA6\uF98A\u57DF\u5F79\u6613\uF98B\uF98C\u75AB\u7E79\u8B6F\uF98D\u9006\u9A5B\u56A5\u5827\u59F8\u5A1F\u5BB4\uF98E\u5EF6\uF98F\uF990\u6350\u633B\uF991\u693D\u6C87\u6CBF\u6D8E\u6D93\u6DF5\u6F14\uF992\u70DF\u7136\u7159\uF993\u71C3\u71D5\uF994\u784F\u786F\uF995\u7B75\u7DE3\uF996\u7E2F\uF997\u884D\u8EDF\uF998\uF999\uF99A\u925B\uF99B\u9CF6\uF99C\uF99D\uF99E\u6085\u6D85\uF99F\u71B1\uF9A0\uF9A1\u95B1\u53AD\uF9A2\uF9A3\uF9A4\u67D3\uF9A5\u708E\u7130\u7430\u8276\u82D2\"],\n[\"e7a1\",\"\uF9A6\u95BB\u9AE5\u9E7D\u66C4\uF9A7\u71C1\u8449\uF9A8\uF9A9\u584B\uF9AA\uF9AB\u5DB8\u5F71\uF9AC\u6620\u668E\u6979\u69AE\u6C38\u6CF3\u6E36\u6F41\u6FDA\u701B\u702F\u7150\u71DF\u7370\uF9AD\u745B\uF9AE\u74D4\u76C8\u7A4E\u7E93\uF9AF\uF9B0\u82F1\u8A60\u8FCE\uF9B1\u9348\uF9B2\u9719\uF9B3\uF9B4\u4E42\u502A\uF9B5\u5208\u53E1\u66F3\u6C6D\u6FCA\u730A\u777F\u7A62\u82AE\u85DD\u8602\uF9B6\u88D4\u8A63\u8B7D\u8C6B\uF9B7\u92B3\uF9B8\u9713\u9810\u4E94\u4F0D\u4FC9\u50B2\u5348\u543E\u5433\u55DA\u5862\u58BA\u5967\u5A1B\u5BE4\u609F\uF9B9\u61CA\u6556\u65FF\u6664\u68A7\u6C5A\u6FB3\"],\n[\"e8a1\",\"\u70CF\u71AC\u7352\u7B7D\u8708\u8AA4\u9C32\u9F07\u5C4B\u6C83\u7344\u7389\u923A\u6EAB\u7465\u761F\u7A69\u7E15\u860A\u5140\u58C5\u64C1\u74EE\u7515\u7670\u7FC1\u9095\u96CD\u9954\u6E26\u74E6\u7AA9\u7AAA\u81E5\u86D9\u8778\u8A1B\u5A49\u5B8C\u5B9B\u68A1\u6900\u6D63\u73A9\u7413\u742C\u7897\u7DE9\u7FEB\u8118\u8155\u839E\u8C4C\u962E\u9811\u66F0\u5F80\u65FA\u6789\u6C6A\u738B\u502D\u5A03\u6B6A\u77EE\u5916\u5D6C\u5DCD\u7325\u754F\uF9BA\uF9BB\u50E5\u51F9\u582F\u592D\u5996\u59DA\u5BE5\uF9BC\uF9BD\u5DA2\u62D7\u6416\u6493\u64FE\uF9BE\u66DC\uF9BF\u6A48\uF9C0\u71FF\u7464\uF9C1\"],\n[\"e9a1\",\"\u7A88\u7AAF\u7E47\u7E5E\u8000\u8170\uF9C2\u87EF\u8981\u8B20\u9059\uF9C3\u9080\u9952\u617E\u6B32\u6D74\u7E1F\u8925\u8FB1\u4FD1\u50AD\u5197\u52C7\u57C7\u5889\u5BB9\u5EB8\u6142\u6995\u6D8C\u6E67\u6EB6\u7194\u7462\u7528\u752C\u8073\u8338\u84C9\u8E0A\u9394\u93DE\uF9C4\u4E8E\u4F51\u5076\u512A\u53C8\u53CB\u53F3\u5B87\u5BD3\u5C24\u611A\u6182\u65F4\u725B\u7397\u7440\u76C2\u7950\u7991\u79B9\u7D06\u7FBD\u828B\u85D5\u865E\u8FC2\u9047\u90F5\u91EA\u9685\u96E8\u96E9\u52D6\u5F67\u65ED\u6631\u682F\u715C\u7A36\u90C1\u980A\u4E91\uF9C5\u6A52\u6B9E\u6F90\u7189\u8018\u82B8\u8553\"],\n[\"eaa1\",\"\u904B\u9695\u96F2\u97FB\u851A\u9B31\u4E90\u718A\u96C4\u5143\u539F\u54E1\u5713\u5712\u57A3\u5A9B\u5AC4\u5BC3\u6028\u613F\u63F4\u6C85\u6D39\u6E72\u6E90\u7230\u733F\u7457\u82D1\u8881\u8F45\u9060\uF9C6\u9662\u9858\u9D1B\u6708\u8D8A\u925E\u4F4D\u5049\u50DE\u5371\u570D\u59D4\u5A01\u5C09\u6170\u6690\u6E2D\u7232\u744B\u7DEF\u80C3\u840E\u8466\u853F\u875F\u885B\u8918\u8B02\u9055\u97CB\u9B4F\u4E73\u4F91\u5112\u516A\uF9C7\u552F\u55A9\u5B7A\u5BA5\u5E7C\u5E7D\u5EBE\u60A0\u60DF\u6108\u6109\u63C4\u6538\u6709\uF9C8\u67D4\u67DA\uF9C9\u6961\u6962\u6CB9\u6D27\uF9CA\u6E38\uF9CB\"],\n[\"eba1\",\"\u6FE1\u7336\u7337\uF9CC\u745C\u7531\uF9CD\u7652\uF9CE\uF9CF\u7DAD\u81FE\u8438\u88D5\u8A98\u8ADB\u8AED\u8E30\u8E42\u904A\u903E\u907A\u9149\u91C9\u936E\uF9D0\uF9D1\u5809\uF9D2\u6BD3\u8089\u80B2\uF9D3\uF9D4\u5141\u596B\u5C39\uF9D5\uF9D6\u6F64\u73A7\u80E4\u8D07\uF9D7\u9217\u958F\uF9D8\uF9D9\uF9DA\uF9DB\u807F\u620E\u701C\u7D68\u878D\uF9DC\u57A0\u6069\u6147\u6BB7\u8ABE\u9280\u96B1\u4E59\u541F\u6DEB\u852D\u9670\u97F3\u98EE\u63D6\u6CE3\u9091\u51DD\u61C9\u81BA\u9DF9\u4F9D\u501A\u5100\u5B9C\u610F\u61FF\u64EC\u6905\u6BC5\u7591\u77E3\u7FA9\u8264\u858F\u87FB\u8863\u8ABC\"],\n[\"eca1\",\"\u8B70\u91AB\u4E8C\u4EE5\u4F0A\uF9DD\uF9DE\u5937\u59E8\uF9DF\u5DF2\u5F1B\u5F5B\u6021\uF9E0\uF9E1\uF9E2\uF9E3\u723E\u73E5\uF9E4\u7570\u75CD\uF9E5\u79FB\uF9E6\u800C\u8033\u8084\u82E1\u8351\uF9E7\uF9E8\u8CBD\u8CB3\u9087\uF9E9\uF9EA\u98F4\u990C\uF9EB\uF9EC\u7037\u76CA\u7FCA\u7FCC\u7FFC\u8B1A\u4EBA\u4EC1\u5203\u5370\uF9ED\u54BD\u56E0\u59FB\u5BC5\u5F15\u5FCD\u6E6E\uF9EE\uF9EF\u7D6A\u8335\uF9F0\u8693\u8A8D\uF9F1\u976D\u9777\uF9F2\uF9F3\u4E00\u4F5A\u4F7E\u58F9\u65E5\u6EA2\u9038\u93B0\u99B9\u4EFB\u58EC\u598A\u59D9\u6041\uF9F4\uF9F5\u7A14\uF9F6\u834F\u8CC3\u5165\u5344\"],\n[\"eda1\",\"\uF9F7\uF9F8\uF9F9\u4ECD\u5269\u5B55\u82BF\u4ED4\u523A\u54A8\u59C9\u59FF\u5B50\u5B57\u5B5C\u6063\u6148\u6ECB\u7099\u716E\u7386\u74F7\u75B5\u78C1\u7D2B\u8005\u81EA\u8328\u8517\u85C9\u8AEE\u8CC7\u96CC\u4F5C\u52FA\u56BC\u65AB\u6628\u707C\u70B8\u7235\u7DBD\u828D\u914C\u96C0\u9D72\u5B71\u68E7\u6B98\u6F7A\u76DE\u5C91\u66AB\u6F5B\u7BB4\u7C2A\u8836\u96DC\u4E08\u4ED7\u5320\u5834\u58BB\u58EF\u596C\u5C07\u5E33\u5E84\u5F35\u638C\u66B2\u6756\u6A1F\u6AA3\u6B0C\u6F3F\u7246\uF9FA\u7350\u748B\u7AE0\u7CA7\u8178\u81DF\u81E7\u838A\u846C\u8523\u8594\u85CF\u88DD\u8D13\u91AC\u9577\"],\n[\"eea1\",\"\u969C\u518D\u54C9\u5728\u5BB0\u624D\u6750\u683D\u6893\u6E3D\u6ED3\u707D\u7E21\u88C1\u8CA1\u8F09\u9F4B\u9F4E\u722D\u7B8F\u8ACD\u931A\u4F47\u4F4E\u5132\u5480\u59D0\u5E95\u62B5\u6775\u696E\u6A17\u6CAE\u6E1A\u72D9\u732A\u75BD\u7BB8\u7D35\u82E7\u83F9\u8457\u85F7\u8A5B\u8CAF\u8E87\u9019\u90B8\u96CE\u9F5F\u52E3\u540A\u5AE1\u5BC2\u6458\u6575\u6EF4\u72C4\uF9FB\u7684\u7A4D\u7B1B\u7C4D\u7E3E\u7FDF\u837B\u8B2B\u8CCA\u8D64\u8DE1\u8E5F\u8FEA\u8FF9\u9069\u93D1\u4F43\u4F7A\u50B3\u5168\u5178\u524D\u526A\u5861\u587C\u5960\u5C08\u5C55\u5EDB\u609B\u6230\u6813\u6BBF\u6C08\u6FB1\"],\n[\"efa1\",\"\u714E\u7420\u7530\u7538\u7551\u7672\u7B4C\u7B8B\u7BAD\u7BC6\u7E8F\u8A6E\u8F3E\u8F49\u923F\u9293\u9322\u942B\u96FB\u985A\u986B\u991E\u5207\u622A\u6298\u6D59\u7664\u7ACA\u7BC0\u7D76\u5360\u5CBE\u5E97\u6F38\u70B9\u7C98\u9711\u9B8E\u9EDE\u63A5\u647A\u8776\u4E01\u4E95\u4EAD\u505C\u5075\u5448\u59C3\u5B9A\u5E40\u5EAD\u5EF7\u5F81\u60C5\u633A\u653F\u6574\u65CC\u6676\u6678\u67FE\u6968\u6A89\u6B63\u6C40\u6DC0\u6DE8\u6E1F\u6E5E\u701E\u70A1\u738E\u73FD\u753A\u775B\u7887\u798E\u7A0B\u7A7D\u7CBE\u7D8E\u8247\u8A02\u8AEA\u8C9E\u912D\u914A\u91D8\u9266\u92CC\u9320\u9706\u9756\"],\n[\"f0a1\",\"\u975C\u9802\u9F0E\u5236\u5291\u557C\u5824\u5E1D\u5F1F\u608C\u63D0\u68AF\u6FDF\u796D\u7B2C\u81CD\u85BA\u88FD\u8AF8\u8E44\u918D\u9664\u969B\u973D\u984C\u9F4A\u4FCE\u5146\u51CB\u52A9\u5632\u5F14\u5F6B\u63AA\u64CD\u65E9\u6641\u66FA\u66F9\u671D\u689D\u68D7\u69FD\u6F15\u6F6E\u7167\u71E5\u722A\u74AA\u773A\u7956\u795A\u79DF\u7A20\u7A95\u7C97\u7CDF\u7D44\u7E70\u8087\u85FB\u86A4\u8A54\u8ABF\u8D99\u8E81\u9020\u906D\u91E3\u963B\u96D5\u9CE5\u65CF\u7C07\u8DB3\u93C3\u5B58\u5C0A\u5352\u62D9\u731D\u5027\u5B97\u5F9E\u60B0\u616B\u68D5\u6DD9\u742E\u7A2E\u7D42\u7D9C\u7E31\u816B\"],\n[\"f1a1\",\"\u8E2A\u8E35\u937E\u9418\u4F50\u5750\u5DE6\u5EA7\u632B\u7F6A\u4E3B\u4F4F\u4F8F\u505A\u59DD\u80C4\u546A\u5468\u55FE\u594F\u5B99\u5DDE\u5EDA\u665D\u6731\u67F1\u682A\u6CE8\u6D32\u6E4A\u6F8D\u70B7\u73E0\u7587\u7C4C\u7D02\u7D2C\u7DA2\u821F\u86DB\u8A3B\u8A85\u8D70\u8E8A\u8F33\u9031\u914E\u9152\u9444\u99D0\u7AF9\u7CA5\u4FCA\u5101\u51C6\u57C8\u5BEF\u5CFB\u6659\u6A3D\u6D5A\u6E96\u6FEC\u710C\u756F\u7AE3\u8822\u9021\u9075\u96CB\u99FF\u8301\u4E2D\u4EF2\u8846\u91CD\u537D\u6ADB\u696B\u6C41\u847A\u589E\u618E\u66FE\u62EF\u70DD\u7511\u75C7\u7E52\u84B8\u8B49\u8D08\u4E4B\u53EA\"],\n[\"f2a1\",\"\u54AB\u5730\u5740\u5FD7\u6301\u6307\u646F\u652F\u65E8\u667A\u679D\u67B3\u6B62\u6C60\u6C9A\u6F2C\u77E5\u7825\u7949\u7957\u7D19\u80A2\u8102\u81F3\u829D\u82B7\u8718\u8A8C\uF9FC\u8D04\u8DBE\u9072\u76F4\u7A19\u7A37\u7E54\u8077\u5507\u55D4\u5875\u632F\u6422\u6649\u664B\u686D\u699B\u6B84\u6D25\u6EB1\u73CD\u7468\u74A1\u755B\u75B9\u76E1\u771E\u778B\u79E6\u7E09\u7E1D\u81FB\u852F\u8897\u8A3A\u8CD1\u8EEB\u8FB0\u9032\u93AD\u9663\u9673\u9707\u4F84\u53F1\u59EA\u5AC9\u5E19\u684E\u74C6\u75BE\u79E9\u7A92\u81A3\u86ED\u8CEA\u8DCC\u8FED\u659F\u6715\uF9FD\u57F7\u6F57\u7DDD\u8F2F\"],\n[\"f3a1\",\"\u93F6\u96C6\u5FB5\u61F2\u6F84\u4E14\u4F98\u501F\u53C9\u55DF\u5D6F\u5DEE\u6B21\u6B64\u78CB\u7B9A\uF9FE\u8E49\u8ECA\u906E\u6349\u643E\u7740\u7A84\u932F\u947F\u9F6A\u64B0\u6FAF\u71E6\u74A8\u74DA\u7AC4\u7C12\u7E82\u7CB2\u7E98\u8B9A\u8D0A\u947D\u9910\u994C\u5239\u5BDF\u64E6\u672D\u7D2E\u50ED\u53C3\u5879\u6158\u6159\u61FA\u65AC\u7AD9\u8B92\u8B96\u5009\u5021\u5275\u5531\u5A3C\u5EE0\u5F70\u6134\u655E\u660C\u6636\u66A2\u69CD\u6EC4\u6F32\u7316\u7621\u7A93\u8139\u8259\u83D6\u84BC\u50B5\u57F0\u5BC0\u5BE8\u5F69\u63A1\u7826\u7DB5\u83DC\u8521\u91C7\u91F5\u518A\u67F5\u7B56\"],\n[\"f4a1\",\"\u8CAC\u51C4\u59BB\u60BD\u8655\u501C\uF9FF\u5254\u5C3A\u617D\u621A\u62D3\u64F2\u65A5\u6ECC\u7620\u810A\u8E60\u965F\u96BB\u4EDF\u5343\u5598\u5929\u5DDD\u64C5\u6CC9\u6DFA\u7394\u7A7F\u821B\u85A6\u8CE4\u8E10\u9077\u91E7\u95E1\u9621\u97C6\u51F8\u54F2\u5586\u5FB9\u64A4\u6F88\u7DB4\u8F1F\u8F4D\u9435\u50C9\u5C16\u6CBE\u6DFB\u751B\u77BB\u7C3D\u7C64\u8A79\u8AC2\u581E\u59BE\u5E16\u6377\u7252\u758A\u776B\u8ADC\u8CBC\u8F12\u5EF3\u6674\u6DF8\u807D\u83C1\u8ACB\u9751\u9BD6\uFA00\u5243\u66FF\u6D95\u6EEF\u7DE0\u8AE6\u902E\u905E\u9AD4\u521D\u527F\u54E8\u6194\u6284\u62DB\u68A2\"],\n[\"f5a1\",\"\u6912\u695A\u6A35\u7092\u7126\u785D\u7901\u790E\u79D2\u7A0D\u8096\u8278\u82D5\u8349\u8549\u8C82\u8D85\u9162\u918B\u91AE\u4FC3\u56D1\u71ED\u77D7\u8700\u89F8\u5BF8\u5FD6\u6751\u90A8\u53E2\u585A\u5BF5\u60A4\u6181\u6460\u7E3D\u8070\u8525\u9283\u64AE\u50AC\u5D14\u6700\u589C\u62BD\u63A8\u690E\u6978\u6A1E\u6E6B\u76BA\u79CB\u82BB\u8429\u8ACF\u8DA8\u8FFD\u9112\u914B\u919C\u9310\u9318\u939A\u96DB\u9A36\u9C0D\u4E11\u755C\u795D\u7AFA\u7B51\u7BC9\u7E2E\u84C4\u8E59\u8E74\u8EF8\u9010\u6625\u693F\u7443\u51FA\u672E\u9EDC\u5145\u5FE0\u6C96\u87F2\u885D\u8877\u60B4\u81B5\u8403\"],\n[\"f6a1\",\"\u8D05\u53D6\u5439\u5634\u5A36\u5C31\u708A\u7FE0\u805A\u8106\u81ED\u8DA3\u9189\u9A5F\u9DF2\u5074\u4EC4\u53A0\u60FB\u6E2C\u5C64\u4F88\u5024\u55E4\u5CD9\u5E5F\u6065\u6894\u6CBB\u6DC4\u71BE\u75D4\u75F4\u7661\u7A1A\u7A49\u7DC7\u7DFB\u7F6E\u81F4\u86A9\u8F1C\u96C9\u99B3\u9F52\u5247\u52C5\u98ED\u89AA\u4E03\u67D2\u6F06\u4FB5\u5BE2\u6795\u6C88\u6D78\u741B\u7827\u91DD\u937C\u87C4\u79E4\u7A31\u5FEB\u4ED6\u54A4\u553E\u58AE\u59A5\u60F0\u6253\u62D6\u6736\u6955\u8235\u9640\u99B1\u99DD\u502C\u5353\u5544\u577C\uFA01\u6258\uFA02\u64E2\u666B\u67DD\u6FC1\u6FEF\u7422\u7438\u8A17\"],\n[\"f7a1\",\"\u9438\u5451\u5606\u5766\u5F48\u619A\u6B4E\u7058\u70AD\u7DBB\u8A95\u596A\u812B\u63A2\u7708\u803D\u8CAA\u5854\u642D\u69BB\u5B95\u5E11\u6E6F\uFA03\u8569\u514C\u53F0\u592A\u6020\u614B\u6B86\u6C70\u6CF0\u7B1E\u80CE\u82D4\u8DC6\u90B0\u98B1\uFA04\u64C7\u6FA4\u6491\u6504\u514E\u5410\u571F\u8A0E\u615F\u6876\uFA05\u75DB\u7B52\u7D71\u901A\u5806\u69CC\u817F\u892A\u9000\u9839\u5078\u5957\u59AC\u6295\u900F\u9B2A\u615D\u7279\u95D6\u5761\u5A46\u5DF4\u628A\u64AD\u64FA\u6777\u6CE2\u6D3E\u722C\u7436\u7834\u7F77\u82AD\u8DDB\u9817\u5224\u5742\u677F\u7248\u74E3\u8CA9\u8FA6\u9211\"],\n[\"f8a1\",\"\u962A\u516B\u53ED\u634C\u4F69\u5504\u6096\u6557\u6C9B\u6D7F\u724C\u72FD\u7A17\u8987\u8C9D\u5F6D\u6F8E\u70F9\u81A8\u610E\u4FBF\u504F\u6241\u7247\u7BC7\u7DE8\u7FE9\u904D\u97AD\u9A19\u8CB6\u576A\u5E73\u67B0\u840D\u8A55\u5420\u5B16\u5E63\u5EE2\u5F0A\u6583\u80BA\u853D\u9589\u965B\u4F48\u5305\u530D\u530F\u5486\u54FA\u5703\u5E03\u6016\u629B\u62B1\u6355\uFA06\u6CE1\u6D66\u75B1\u7832\u80DE\u812F\u82DE\u8461\u84B2\u888D\u8912\u900B\u92EA\u98FD\u9B91\u5E45\u66B4\u66DD\u7011\u7206\uFA07\u4FF5\u527D\u5F6A\u6153\u6753\u6A19\u6F02\u74E2\u7968\u8868\u8C79\u98C7\u98C4\u9A43\"],\n[\"f9a1\",\"\u54C1\u7A1F\u6953\u8AF7\u8C4A\u98A8\u99AE\u5F7C\u62AB\u75B2\u76AE\u88AB\u907F\u9642\u5339\u5F3C\u5FC5\u6CCC\u73CC\u7562\u758B\u7B46\u82FE\u999D\u4E4F\u903C\u4E0B\u4F55\u53A6\u590F\u5EC8\u6630\u6CB3\u7455\u8377\u8766\u8CC0\u9050\u971E\u9C15\u58D1\u5B78\u8650\u8B14\u9DB4\u5BD2\u6068\u608D\u65F1\u6C57\u6F22\u6FA3\u701A\u7F55\u7FF0\u9591\u9592\u9650\u97D3\u5272\u8F44\u51FD\u542B\u54B8\u5563\u558A\u6ABB\u6DB5\u7DD8\u8266\u929C\u9677\u9E79\u5408\u54C8\u76D2\u86E4\u95A4\u95D4\u965C\u4EA2\u4F09\u59EE\u5AE6\u5DF7\u6052\u6297\u676D\u6841\u6C86\u6E2F\u7F38\u809B\u822A\"],\n[\"faa1\",\"\uFA08\uFA09\u9805\u4EA5\u5055\u54B3\u5793\u595A\u5B69\u5BB3\u61C8\u6977\u6D77\u7023\u87F9\u89E3\u8A72\u8AE7\u9082\u99ED\u9AB8\u52BE\u6838\u5016\u5E78\u674F\u8347\u884C\u4EAB\u5411\u56AE\u73E6\u9115\u97FF\u9909\u9957\u9999\u5653\u589F\u865B\u8A31\u61B2\u6AF6\u737B\u8ED2\u6B47\u96AA\u9A57\u5955\u7200\u8D6B\u9769\u4FD4\u5CF4\u5F26\u61F8\u665B\u6CEB\u70AB\u7384\u73B9\u73FE\u7729\u774D\u7D43\u7D62\u7E23\u8237\u8852\uFA0A\u8CE2\u9249\u986F\u5B51\u7A74\u8840\u9801\u5ACC\u4FE0\u5354\u593E\u5CFD\u633E\u6D79\u72F9\u8105\u8107\u83A2\u92CF\u9830\u4EA8\u5144\u5211\u578B\"],\n[\"fba1\",\"\u5F62\u6CC2\u6ECE\u7005\u7050\u70AF\u7192\u73E9\u7469\u834A\u87A2\u8861\u9008\u90A2\u93A3\u99A8\u516E\u5F57\u60E0\u6167\u66B3\u8559\u8E4A\u91AF\u978B\u4E4E\u4E92\u547C\u58D5\u58FA\u597D\u5CB5\u5F27\u6236\u6248\u660A\u6667\u6BEB\u6D69\u6DCF\u6E56\u6EF8\u6F94\u6FE0\u6FE9\u705D\u72D0\u7425\u745A\u74E0\u7693\u795C\u7CCA\u7E1E\u80E1\u82A6\u846B\u84BF\u864E\u865F\u8774\u8B77\u8C6A\u93AC\u9800\u9865\u60D1\u6216\u9177\u5A5A\u660F\u6DF7\u6E3E\u743F\u9B42\u5FFD\u60DA\u7B0F\u54C4\u5F18\u6C5E\u6CD3\u6D2A\u70D8\u7D05\u8679\u8A0C\u9D3B\u5316\u548C\u5B05\u6A3A\u706B\u7575\"],\n[\"fca1\",\"\u798D\u79BE\u82B1\u83EF\u8A71\u8B41\u8CA8\u9774\uFA0B\u64F4\u652B\u78BA\u78BB\u7A6B\u4E38\u559A\u5950\u5BA6\u5E7B\u60A3\u63DB\u6B61\u6665\u6853\u6E19\u7165\u74B0\u7D08\u9084\u9A69\u9C25\u6D3B\u6ED1\u733E\u8C41\u95CA\u51F0\u5E4C\u5FA8\u604D\u60F6\u6130\u614C\u6643\u6644\u69A5\u6CC1\u6E5F\u6EC9\u6F62\u714C\u749C\u7687\u7BC1\u7C27\u8352\u8757\u9051\u968D\u9EC3\u532F\u56DE\u5EFB\u5F8A\u6062\u6094\u61F7\u6666\u6703\u6A9C\u6DEE\u6FAE\u7070\u736A\u7E6A\u81BE\u8334\u86D4\u8AA8\u8CC4\u5283\u7372\u5B96\u6A6B\u9404\u54EE\u5686\u5B5D\u6548\u6585\u66C9\u689F\u6D8D\u6DC6\"],\n[\"fda1\",\"\u723B\u80B4\u9175\u9A4D\u4FAF\u5019\u539A\u540E\u543C\u5589\u55C5\u5E3F\u5F8C\u673D\u7166\u73DD\u9005\u52DB\u52F3\u5864\u58CE\u7104\u718F\u71FB\u85B0\u8A13\u6688\u85A8\u55A7\u6684\u714A\u8431\u5349\u5599\u6BC1\u5F59\u5FBD\u63EE\u6689\u7147\u8AF1\u8F1D\u9EBE\u4F11\u643A\u70CB\u7566\u8667\u6064\u8B4E\u9DF8\u5147\u51F6\u5308\u6D36\u80F8\u9ED1\u6615\u6B23\u7098\u75D5\u5403\u5C79\u7D07\u8A16\u6B20\u6B3D\u6B46\u5438\u6070\u6D3D\u7FD5\u8208\u50D6\u51DE\u559C\u566B\u56CD\u59EC\u5B09\u5E0C\u6199\u6198\u6231\u665E\u66E6\u7199\u71B9\u71BA\u72A7\u79A7\u7A00\u7FB2\u8A70\"]\n]\n", "[\n[\"0\",\"\\u0000\",127],\n[\"a140\",\"\u3000\uFF0C\u3001\u3002\uFF0E\u2027\uFF1B\uFF1A\uFF1F\uFF01\uFE30\u2026\u2025\uFE50\uFE51\uFE52\u00B7\uFE54\uFE55\uFE56\uFE57\uFF5C\u2013\uFE31\u2014\uFE33\u2574\uFE34\uFE4F\uFF08\uFF09\uFE35\uFE36\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39\uFE3A\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D\uFE3E\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41\uFE42\u300E\u300F\uFE43\uFE44\uFE59\uFE5A\"],\n[\"a1a1\",\"\uFE5B\uFE5C\uFE5D\uFE5E\u2018\u2019\u201C\u201D\u301D\u301E\u2035\u2032\uFF03\uFF06\uFF0A\u203B\u00A7\u3003\u25CB\u25CF\u25B3\u25B2\u25CE\u2606\u2605\u25C7\u25C6\u25A1\u25A0\u25BD\u25BC\u32A3\u2105\u00AF\uFFE3\uFF3F\u02CD\uFE49\uFE4A\uFE4D\uFE4E\uFE4B\uFE4C\uFE5F\uFE60\uFE61\uFF0B\uFF0D\u00D7\u00F7\u00B1\u221A\uFF1C\uFF1E\uFF1D\u2266\u2267\u2260\u221E\u2252\u2261\uFE62\",4,\"\uFF5E\u2229\u222A\u22A5\u2220\u221F\u22BF\u33D2\u33D1\u222B\u222E\u2235\u2234\u2640\u2642\u2295\u2299\u2191\u2193\u2190\u2192\u2196\u2197\u2199\u2198\u2225\u2223\uFF0F\"],\n[\"a240\",\"\uFF3C\u2215\uFE68\uFF04\uFFE5\u3012\uFFE0\uFFE1\uFF05\uFF20\u2103\u2109\uFE69\uFE6A\uFE6B\u33D5\u339C\u339D\u339E\u33CE\u33A1\u338E\u338F\u33C4\u00B0\u5159\u515B\u515E\u515D\u5161\u5163\u55E7\u74E9\u7CCE\u2581\",7,\"\u258F\u258E\u258D\u258C\u258B\u258A\u2589\u253C\u2534\u252C\u2524\u251C\u2594\u2500\u2502\u2595\u250C\u2510\u2514\u2518\u256D\"],\n[\"a2a1\",\"\u256E\u2570\u256F\u2550\u255E\u256A\u2561\u25E2\u25E3\u25E5\u25E4\u2571\u2572\u2573\uFF10\",9,\"\u2160\",9,\"\u3021\",8,\"\u5341\u5344\u5345\uFF21\",25,\"\uFF41\",21],\n[\"a340\",\"\uFF57\uFF58\uFF59\uFF5A\u0391\",16,\"\u03A3\",6,\"\u03B1\",16,\"\u03C3\",6,\"\u3105\",10],\n[\"a3a1\",\"\u3110\",25,\"\u02D9\u02C9\u02CA\u02C7\u02CB\"],\n[\"a3e1\",\"\u20AC\"],\n[\"a440\",\"\u4E00\u4E59\u4E01\u4E03\u4E43\u4E5D\u4E86\u4E8C\u4EBA\u513F\u5165\u516B\u51E0\u5200\u5201\u529B\u5315\u5341\u535C\u53C8\u4E09\u4E0B\u4E08\u4E0A\u4E2B\u4E38\u51E1\u4E45\u4E48\u4E5F\u4E5E\u4E8E\u4EA1\u5140\u5203\u52FA\u5343\u53C9\u53E3\u571F\u58EB\u5915\u5927\u5973\u5B50\u5B51\u5B53\u5BF8\u5C0F\u5C22\u5C38\u5C71\u5DDD\u5DE5\u5DF1\u5DF2\u5DF3\u5DFE\u5E72\u5EFE\u5F0B\u5F13\u624D\"],\n[\"a4a1\",\"\u4E11\u4E10\u4E0D\u4E2D\u4E30\u4E39\u4E4B\u5C39\u4E88\u4E91\u4E95\u4E92\u4E94\u4EA2\u4EC1\u4EC0\u4EC3\u4EC6\u4EC7\u4ECD\u4ECA\u4ECB\u4EC4\u5143\u5141\u5167\u516D\u516E\u516C\u5197\u51F6\u5206\u5207\u5208\u52FB\u52FE\u52FF\u5316\u5339\u5348\u5347\u5345\u535E\u5384\u53CB\u53CA\u53CD\u58EC\u5929\u592B\u592A\u592D\u5B54\u5C11\u5C24\u5C3A\u5C6F\u5DF4\u5E7B\u5EFF\u5F14\u5F15\u5FC3\u6208\u6236\u624B\u624E\u652F\u6587\u6597\u65A4\u65B9\u65E5\u66F0\u6708\u6728\u6B20\u6B62\u6B79\u6BCB\u6BD4\u6BDB\u6C0F\u6C34\u706B\u722A\u7236\u723B\u7247\u7259\u725B\u72AC\u738B\u4E19\"],\n[\"a540\",\"\u4E16\u4E15\u4E14\u4E18\u4E3B\u4E4D\u4E4F\u4E4E\u4EE5\u4ED8\u4ED4\u4ED5\u4ED6\u4ED7\u4EE3\u4EE4\u4ED9\u4EDE\u5145\u5144\u5189\u518A\u51AC\u51F9\u51FA\u51F8\u520A\u52A0\u529F\u5305\u5306\u5317\u531D\u4EDF\u534A\u5349\u5361\u5360\u536F\u536E\u53BB\u53EF\u53E4\u53F3\u53EC\u53EE\u53E9\u53E8\u53FC\u53F8\u53F5\u53EB\u53E6\u53EA\u53F2\u53F1\u53F0\u53E5\u53ED\u53FB\u56DB\u56DA\u5916\"],\n[\"a5a1\",\"\u592E\u5931\u5974\u5976\u5B55\u5B83\u5C3C\u5DE8\u5DE7\u5DE6\u5E02\u5E03\u5E73\u5E7C\u5F01\u5F18\u5F17\u5FC5\u620A\u6253\u6254\u6252\u6251\u65A5\u65E6\u672E\u672C\u672A\u672B\u672D\u6B63\u6BCD\u6C11\u6C10\u6C38\u6C41\u6C40\u6C3E\u72AF\u7384\u7389\u74DC\u74E6\u7518\u751F\u7528\u7529\u7530\u7531\u7532\u7533\u758B\u767D\u76AE\u76BF\u76EE\u77DB\u77E2\u77F3\u793A\u79BE\u7A74\u7ACB\u4E1E\u4E1F\u4E52\u4E53\u4E69\u4E99\u4EA4\u4EA6\u4EA5\u4EFF\u4F09\u4F19\u4F0A\u4F15\u4F0D\u4F10\u4F11\u4F0F\u4EF2\u4EF6\u4EFB\u4EF0\u4EF3\u4EFD\u4F01\u4F0B\u5149\u5147\u5146\u5148\u5168\"],\n[\"a640\",\"\u5171\u518D\u51B0\u5217\u5211\u5212\u520E\u5216\u52A3\u5308\u5321\u5320\u5370\u5371\u5409\u540F\u540C\u540A\u5410\u5401\u540B\u5404\u5411\u540D\u5408\u5403\u540E\u5406\u5412\u56E0\u56DE\u56DD\u5733\u5730\u5728\u572D\u572C\u572F\u5729\u5919\u591A\u5937\u5938\u5984\u5978\u5983\u597D\u5979\u5982\u5981\u5B57\u5B58\u5B87\u5B88\u5B85\u5B89\u5BFA\u5C16\u5C79\u5DDE\u5E06\u5E76\u5E74\"],\n[\"a6a1\",\"\u5F0F\u5F1B\u5FD9\u5FD6\u620E\u620C\u620D\u6210\u6263\u625B\u6258\u6536\u65E9\u65E8\u65EC\u65ED\u66F2\u66F3\u6709\u673D\u6734\u6731\u6735\u6B21\u6B64\u6B7B\u6C16\u6C5D\u6C57\u6C59\u6C5F\u6C60\u6C50\u6C55\u6C61\u6C5B\u6C4D\u6C4E\u7070\u725F\u725D\u767E\u7AF9\u7C73\u7CF8\u7F36\u7F8A\u7FBD\u8001\u8003\u800C\u8012\u8033\u807F\u8089\u808B\u808C\u81E3\u81EA\u81F3\u81FC\u820C\u821B\u821F\u826E\u8272\u827E\u866B\u8840\u884C\u8863\u897F\u9621\u4E32\u4EA8\u4F4D\u4F4F\u4F47\u4F57\u4F5E\u4F34\u4F5B\u4F55\u4F30\u4F50\u4F51\u4F3D\u4F3A\u4F38\u4F43\u4F54\u4F3C\u4F46\u4F63\"],\n[\"a740\",\"\u4F5C\u4F60\u4F2F\u4F4E\u4F36\u4F59\u4F5D\u4F48\u4F5A\u514C\u514B\u514D\u5175\u51B6\u51B7\u5225\u5224\u5229\u522A\u5228\u52AB\u52A9\u52AA\u52AC\u5323\u5373\u5375\u541D\u542D\u541E\u543E\u5426\u544E\u5427\u5446\u5443\u5433\u5448\u5442\u541B\u5429\u544A\u5439\u543B\u5438\u542E\u5435\u5436\u5420\u543C\u5440\u5431\u542B\u541F\u542C\u56EA\u56F0\u56E4\u56EB\u574A\u5751\u5740\u574D\"],\n[\"a7a1\",\"\u5747\u574E\u573E\u5750\u574F\u573B\u58EF\u593E\u599D\u5992\u59A8\u599E\u59A3\u5999\u5996\u598D\u59A4\u5993\u598A\u59A5\u5B5D\u5B5C\u5B5A\u5B5B\u5B8C\u5B8B\u5B8F\u5C2C\u5C40\u5C41\u5C3F\u5C3E\u5C90\u5C91\u5C94\u5C8C\u5DEB\u5E0C\u5E8F\u5E87\u5E8A\u5EF7\u5F04\u5F1F\u5F64\u5F62\u5F77\u5F79\u5FD8\u5FCC\u5FD7\u5FCD\u5FF1\u5FEB\u5FF8\u5FEA\u6212\u6211\u6284\u6297\u6296\u6280\u6276\u6289\u626D\u628A\u627C\u627E\u6279\u6273\u6292\u626F\u6298\u626E\u6295\u6293\u6291\u6286\u6539\u653B\u6538\u65F1\u66F4\u675F\u674E\u674F\u6750\u6751\u675C\u6756\u675E\u6749\u6746\u6760\"],\n[\"a840\",\"\u6753\u6757\u6B65\u6BCF\u6C42\u6C5E\u6C99\u6C81\u6C88\u6C89\u6C85\u6C9B\u6C6A\u6C7A\u6C90\u6C70\u6C8C\u6C68\u6C96\u6C92\u6C7D\u6C83\u6C72\u6C7E\u6C74\u6C86\u6C76\u6C8D\u6C94\u6C98\u6C82\u7076\u707C\u707D\u7078\u7262\u7261\u7260\u72C4\u72C2\u7396\u752C\u752B\u7537\u7538\u7682\u76EF\u77E3\u79C1\u79C0\u79BF\u7A76\u7CFB\u7F55\u8096\u8093\u809D\u8098\u809B\u809A\u80B2\u826F\u8292\"],\n[\"a8a1\",\"\u828B\u828D\u898B\u89D2\u8A00\u8C37\u8C46\u8C55\u8C9D\u8D64\u8D70\u8DB3\u8EAB\u8ECA\u8F9B\u8FB0\u8FC2\u8FC6\u8FC5\u8FC4\u5DE1\u9091\u90A2\u90AA\u90A6\u90A3\u9149\u91C6\u91CC\u9632\u962E\u9631\u962A\u962C\u4E26\u4E56\u4E73\u4E8B\u4E9B\u4E9E\u4EAB\u4EAC\u4F6F\u4F9D\u4F8D\u4F73\u4F7F\u4F6C\u4F9B\u4F8B\u4F86\u4F83\u4F70\u4F75\u4F88\u4F69\u4F7B\u4F96\u4F7E\u4F8F\u4F91\u4F7A\u5154\u5152\u5155\u5169\u5177\u5176\u5178\u51BD\u51FD\u523B\u5238\u5237\u523A\u5230\u522E\u5236\u5241\u52BE\u52BB\u5352\u5354\u5353\u5351\u5366\u5377\u5378\u5379\u53D6\u53D4\u53D7\u5473\u5475\"],\n[\"a940\",\"\u5496\u5478\u5495\u5480\u547B\u5477\u5484\u5492\u5486\u547C\u5490\u5471\u5476\u548C\u549A\u5462\u5468\u548B\u547D\u548E\u56FA\u5783\u5777\u576A\u5769\u5761\u5766\u5764\u577C\u591C\u5949\u5947\u5948\u5944\u5954\u59BE\u59BB\u59D4\u59B9\u59AE\u59D1\u59C6\u59D0\u59CD\u59CB\u59D3\u59CA\u59AF\u59B3\u59D2\u59C5\u5B5F\u5B64\u5B63\u5B97\u5B9A\u5B98\u5B9C\u5B99\u5B9B\u5C1A\u5C48\u5C45\"],\n[\"a9a1\",\"\u5C46\u5CB7\u5CA1\u5CB8\u5CA9\u5CAB\u5CB1\u5CB3\u5E18\u5E1A\u5E16\u5E15\u5E1B\u5E11\u5E78\u5E9A\u5E97\u5E9C\u5E95\u5E96\u5EF6\u5F26\u5F27\u5F29\u5F80\u5F81\u5F7F\u5F7C\u5FDD\u5FE0\u5FFD\u5FF5\u5FFF\u600F\u6014\u602F\u6035\u6016\u602A\u6015\u6021\u6027\u6029\u602B\u601B\u6216\u6215\u623F\u623E\u6240\u627F\u62C9\u62CC\u62C4\u62BF\u62C2\u62B9\u62D2\u62DB\u62AB\u62D3\u62D4\u62CB\u62C8\u62A8\u62BD\u62BC\u62D0\u62D9\u62C7\u62CD\u62B5\u62DA\u62B1\u62D8\u62D6\u62D7\u62C6\u62AC\u62CE\u653E\u65A7\u65BC\u65FA\u6614\u6613\u660C\u6606\u6602\u660E\u6600\u660F\u6615\u660A\"],\n[\"aa40\",\"\u6607\u670D\u670B\u676D\u678B\u6795\u6771\u679C\u6773\u6777\u6787\u679D\u6797\u676F\u6770\u677F\u6789\u677E\u6790\u6775\u679A\u6793\u677C\u676A\u6772\u6B23\u6B66\u6B67\u6B7F\u6C13\u6C1B\u6CE3\u6CE8\u6CF3\u6CB1\u6CCC\u6CE5\u6CB3\u6CBD\u6CBE\u6CBC\u6CE2\u6CAB\u6CD5\u6CD3\u6CB8\u6CC4\u6CB9\u6CC1\u6CAE\u6CD7\u6CC5\u6CF1\u6CBF\u6CBB\u6CE1\u6CDB\u6CCA\u6CAC\u6CEF\u6CDC\u6CD6\u6CE0\"],\n[\"aaa1\",\"\u7095\u708E\u7092\u708A\u7099\u722C\u722D\u7238\u7248\u7267\u7269\u72C0\u72CE\u72D9\u72D7\u72D0\u73A9\u73A8\u739F\u73AB\u73A5\u753D\u759D\u7599\u759A\u7684\u76C2\u76F2\u76F4\u77E5\u77FD\u793E\u7940\u7941\u79C9\u79C8\u7A7A\u7A79\u7AFA\u7CFE\u7F54\u7F8C\u7F8B\u8005\u80BA\u80A5\u80A2\u80B1\u80A1\u80AB\u80A9\u80B4\u80AA\u80AF\u81E5\u81FE\u820D\u82B3\u829D\u8299\u82AD\u82BD\u829F\u82B9\u82B1\u82AC\u82A5\u82AF\u82B8\u82A3\u82B0\u82BE\u82B7\u864E\u8671\u521D\u8868\u8ECB\u8FCE\u8FD4\u8FD1\u90B5\u90B8\u90B1\u90B6\u91C7\u91D1\u9577\u9580\u961C\u9640\u963F\u963B\u9644\"],\n[\"ab40\",\"\u9642\u96B9\u96E8\u9752\u975E\u4E9F\u4EAD\u4EAE\u4FE1\u4FB5\u4FAF\u4FBF\u4FE0\u4FD1\u4FCF\u4FDD\u4FC3\u4FB6\u4FD8\u4FDF\u4FCA\u4FD7\u4FAE\u4FD0\u4FC4\u4FC2\u4FDA\u4FCE\u4FDE\u4FB7\u5157\u5192\u5191\u51A0\u524E\u5243\u524A\u524D\u524C\u524B\u5247\u52C7\u52C9\u52C3\u52C1\u530D\u5357\u537B\u539A\u53DB\u54AC\u54C0\u54A8\u54CE\u54C9\u54B8\u54A6\u54B3\u54C7\u54C2\u54BD\u54AA\u54C1\"],\n[\"aba1\",\"\u54C4\u54C8\u54AF\u54AB\u54B1\u54BB\u54A9\u54A7\u54BF\u56FF\u5782\u578B\u57A0\u57A3\u57A2\u57CE\u57AE\u5793\u5955\u5951\u594F\u594E\u5950\u59DC\u59D8\u59FF\u59E3\u59E8\u5A03\u59E5\u59EA\u59DA\u59E6\u5A01\u59FB\u5B69\u5BA3\u5BA6\u5BA4\u5BA2\u5BA5\u5C01\u5C4E\u5C4F\u5C4D\u5C4B\u5CD9\u5CD2\u5DF7\u5E1D\u5E25\u5E1F\u5E7D\u5EA0\u5EA6\u5EFA\u5F08\u5F2D\u5F65\u5F88\u5F85\u5F8A\u5F8B\u5F87\u5F8C\u5F89\u6012\u601D\u6020\u6025\u600E\u6028\u604D\u6070\u6068\u6062\u6046\u6043\u606C\u606B\u606A\u6064\u6241\u62DC\u6316\u6309\u62FC\u62ED\u6301\u62EE\u62FD\u6307\u62F1\u62F7\"],\n[\"ac40\",\"\u62EF\u62EC\u62FE\u62F4\u6311\u6302\u653F\u6545\u65AB\u65BD\u65E2\u6625\u662D\u6620\u6627\u662F\u661F\u6628\u6631\u6624\u66F7\u67FF\u67D3\u67F1\u67D4\u67D0\u67EC\u67B6\u67AF\u67F5\u67E9\u67EF\u67C4\u67D1\u67B4\u67DA\u67E5\u67B8\u67CF\u67DE\u67F3\u67B0\u67D9\u67E2\u67DD\u67D2\u6B6A\u6B83\u6B86\u6BB5\u6BD2\u6BD7\u6C1F\u6CC9\u6D0B\u6D32\u6D2A\u6D41\u6D25\u6D0C\u6D31\u6D1E\u6D17\"],\n[\"aca1\",\"\u6D3B\u6D3D\u6D3E\u6D36\u6D1B\u6CF5\u6D39\u6D27\u6D38\u6D29\u6D2E\u6D35\u6D0E\u6D2B\u70AB\u70BA\u70B3\u70AC\u70AF\u70AD\u70B8\u70AE\u70A4\u7230\u7272\u726F\u7274\u72E9\u72E0\u72E1\u73B7\u73CA\u73BB\u73B2\u73CD\u73C0\u73B3\u751A\u752D\u754F\u754C\u754E\u754B\u75AB\u75A4\u75A5\u75A2\u75A3\u7678\u7686\u7687\u7688\u76C8\u76C6\u76C3\u76C5\u7701\u76F9\u76F8\u7709\u770B\u76FE\u76FC\u7707\u77DC\u7802\u7814\u780C\u780D\u7946\u7949\u7948\u7947\u79B9\u79BA\u79D1\u79D2\u79CB\u7A7F\u7A81\u7AFF\u7AFD\u7C7D\u7D02\u7D05\u7D00\u7D09\u7D07\u7D04\u7D06\u7F38\u7F8E\u7FBF\u8004\"],\n[\"ad40\",\"\u8010\u800D\u8011\u8036\u80D6\u80E5\u80DA\u80C3\u80C4\u80CC\u80E1\u80DB\u80CE\u80DE\u80E4\u80DD\u81F4\u8222\u82E7\u8303\u8305\u82E3\u82DB\u82E6\u8304\u82E5\u8302\u8309\u82D2\u82D7\u82F1\u8301\u82DC\u82D4\u82D1\u82DE\u82D3\u82DF\u82EF\u8306\u8650\u8679\u867B\u867A\u884D\u886B\u8981\u89D4\u8A08\u8A02\u8A03\u8C9E\u8CA0\u8D74\u8D73\u8DB4\u8ECD\u8ECC\u8FF0\u8FE6\u8FE2\u8FEA\u8FE5\"],\n[\"ada1\",\"\u8FED\u8FEB\u8FE4\u8FE8\u90CA\u90CE\u90C1\u90C3\u914B\u914A\u91CD\u9582\u9650\u964B\u964C\u964D\u9762\u9769\u97CB\u97ED\u97F3\u9801\u98A8\u98DB\u98DF\u9996\u9999\u4E58\u4EB3\u500C\u500D\u5023\u4FEF\u5026\u5025\u4FF8\u5029\u5016\u5006\u503C\u501F\u501A\u5012\u5011\u4FFA\u5000\u5014\u5028\u4FF1\u5021\u500B\u5019\u5018\u4FF3\u4FEE\u502D\u502A\u4FFE\u502B\u5009\u517C\u51A4\u51A5\u51A2\u51CD\u51CC\u51C6\u51CB\u5256\u525C\u5254\u525B\u525D\u532A\u537F\u539F\u539D\u53DF\u54E8\u5510\u5501\u5537\u54FC\u54E5\u54F2\u5506\u54FA\u5514\u54E9\u54ED\u54E1\u5509\u54EE\u54EA\"],\n[\"ae40\",\"\u54E6\u5527\u5507\u54FD\u550F\u5703\u5704\u57C2\u57D4\u57CB\u57C3\u5809\u590F\u5957\u5958\u595A\u5A11\u5A18\u5A1C\u5A1F\u5A1B\u5A13\u59EC\u5A20\u5A23\u5A29\u5A25\u5A0C\u5A09\u5B6B\u5C58\u5BB0\u5BB3\u5BB6\u5BB4\u5BAE\u5BB5\u5BB9\u5BB8\u5C04\u5C51\u5C55\u5C50\u5CED\u5CFD\u5CFB\u5CEA\u5CE8\u5CF0\u5CF6\u5D01\u5CF4\u5DEE\u5E2D\u5E2B\u5EAB\u5EAD\u5EA7\u5F31\u5F92\u5F91\u5F90\u6059\"],\n[\"aea1\",\"\u6063\u6065\u6050\u6055\u606D\u6069\u606F\u6084\u609F\u609A\u608D\u6094\u608C\u6085\u6096\u6247\u62F3\u6308\u62FF\u634E\u633E\u632F\u6355\u6342\u6346\u634F\u6349\u633A\u6350\u633D\u632A\u632B\u6328\u634D\u634C\u6548\u6549\u6599\u65C1\u65C5\u6642\u6649\u664F\u6643\u6652\u664C\u6645\u6641\u66F8\u6714\u6715\u6717\u6821\u6838\u6848\u6846\u6853\u6839\u6842\u6854\u6829\u68B3\u6817\u684C\u6851\u683D\u67F4\u6850\u6840\u683C\u6843\u682A\u6845\u6813\u6818\u6841\u6B8A\u6B89\u6BB7\u6C23\u6C27\u6C28\u6C26\u6C24\u6CF0\u6D6A\u6D95\u6D88\u6D87\u6D66\u6D78\u6D77\u6D59\u6D93\"],\n[\"af40\",\"\u6D6C\u6D89\u6D6E\u6D5A\u6D74\u6D69\u6D8C\u6D8A\u6D79\u6D85\u6D65\u6D94\u70CA\u70D8\u70E4\u70D9\u70C8\u70CF\u7239\u7279\u72FC\u72F9\u72FD\u72F8\u72F7\u7386\u73ED\u7409\u73EE\u73E0\u73EA\u73DE\u7554\u755D\u755C\u755A\u7559\u75BE\u75C5\u75C7\u75B2\u75B3\u75BD\u75BC\u75B9\u75C2\u75B8\u768B\u76B0\u76CA\u76CD\u76CE\u7729\u771F\u7720\u7728\u77E9\u7830\u7827\u7838\u781D\u7834\u7837\"],\n[\"afa1\",\"\u7825\u782D\u7820\u781F\u7832\u7955\u7950\u7960\u795F\u7956\u795E\u795D\u7957\u795A\u79E4\u79E3\u79E7\u79DF\u79E6\u79E9\u79D8\u7A84\u7A88\u7AD9\u7B06\u7B11\u7C89\u7D21\u7D17\u7D0B\u7D0A\u7D20\u7D22\u7D14\u7D10\u7D15\u7D1A\u7D1C\u7D0D\u7D19\u7D1B\u7F3A\u7F5F\u7F94\u7FC5\u7FC1\u8006\u8018\u8015\u8019\u8017\u803D\u803F\u80F1\u8102\u80F0\u8105\u80ED\u80F4\u8106\u80F8\u80F3\u8108\u80FD\u810A\u80FC\u80EF\u81ED\u81EC\u8200\u8210\u822A\u822B\u8228\u822C\u82BB\u832B\u8352\u8354\u834A\u8338\u8350\u8349\u8335\u8334\u834F\u8332\u8339\u8336\u8317\u8340\u8331\u8328\u8343\"],\n[\"b040\",\"\u8654\u868A\u86AA\u8693\u86A4\u86A9\u868C\u86A3\u869C\u8870\u8877\u8881\u8882\u887D\u8879\u8A18\u8A10\u8A0E\u8A0C\u8A15\u8A0A\u8A17\u8A13\u8A16\u8A0F\u8A11\u8C48\u8C7A\u8C79\u8CA1\u8CA2\u8D77\u8EAC\u8ED2\u8ED4\u8ECF\u8FB1\u9001\u9006\u8FF7\u9000\u8FFA\u8FF4\u9003\u8FFD\u9005\u8FF8\u9095\u90E1\u90DD\u90E2\u9152\u914D\u914C\u91D8\u91DD\u91D7\u91DC\u91D9\u9583\u9662\u9663\u9661\"],\n[\"b0a1\",\"\u965B\u965D\u9664\u9658\u965E\u96BB\u98E2\u99AC\u9AA8\u9AD8\u9B25\u9B32\u9B3C\u4E7E\u507A\u507D\u505C\u5047\u5043\u504C\u505A\u5049\u5065\u5076\u504E\u5055\u5075\u5074\u5077\u504F\u500F\u506F\u506D\u515C\u5195\u51F0\u526A\u526F\u52D2\u52D9\u52D8\u52D5\u5310\u530F\u5319\u533F\u5340\u533E\u53C3\u66FC\u5546\u556A\u5566\u5544\u555E\u5561\u5543\u554A\u5531\u5556\u554F\u5555\u552F\u5564\u5538\u552E\u555C\u552C\u5563\u5533\u5541\u5557\u5708\u570B\u5709\u57DF\u5805\u580A\u5806\u57E0\u57E4\u57FA\u5802\u5835\u57F7\u57F9\u5920\u5962\u5A36\u5A41\u5A49\u5A66\u5A6A\u5A40\"],\n[\"b140\",\"\u5A3C\u5A62\u5A5A\u5A46\u5A4A\u5B70\u5BC7\u5BC5\u5BC4\u5BC2\u5BBF\u5BC6\u5C09\u5C08\u5C07\u5C60\u5C5C\u5C5D\u5D07\u5D06\u5D0E\u5D1B\u5D16\u5D22\u5D11\u5D29\u5D14\u5D19\u5D24\u5D27\u5D17\u5DE2\u5E38\u5E36\u5E33\u5E37\u5EB7\u5EB8\u5EB6\u5EB5\u5EBE\u5F35\u5F37\u5F57\u5F6C\u5F69\u5F6B\u5F97\u5F99\u5F9E\u5F98\u5FA1\u5FA0\u5F9C\u607F\u60A3\u6089\u60A0\u60A8\u60CB\u60B4\u60E6\u60BD\"],\n[\"b1a1\",\"\u60C5\u60BB\u60B5\u60DC\u60BC\u60D8\u60D5\u60C6\u60DF\u60B8\u60DA\u60C7\u621A\u621B\u6248\u63A0\u63A7\u6372\u6396\u63A2\u63A5\u6377\u6367\u6398\u63AA\u6371\u63A9\u6389\u6383\u639B\u636B\u63A8\u6384\u6388\u6399\u63A1\u63AC\u6392\u638F\u6380\u637B\u6369\u6368\u637A\u655D\u6556\u6551\u6559\u6557\u555F\u654F\u6558\u6555\u6554\u659C\u659B\u65AC\u65CF\u65CB\u65CC\u65CE\u665D\u665A\u6664\u6668\u6666\u665E\u66F9\u52D7\u671B\u6881\u68AF\u68A2\u6893\u68B5\u687F\u6876\u68B1\u68A7\u6897\u68B0\u6883\u68C4\u68AD\u6886\u6885\u6894\u689D\u68A8\u689F\u68A1\u6882\u6B32\u6BBA\"],\n[\"b240\",\"\u6BEB\u6BEC\u6C2B\u6D8E\u6DBC\u6DF3\u6DD9\u6DB2\u6DE1\u6DCC\u6DE4\u6DFB\u6DFA\u6E05\u6DC7\u6DCB\u6DAF\u6DD1\u6DAE\u6DDE\u6DF9\u6DB8\u6DF7\u6DF5\u6DC5\u6DD2\u6E1A\u6DB5\u6DDA\u6DEB\u6DD8\u6DEA\u6DF1\u6DEE\u6DE8\u6DC6\u6DC4\u6DAA\u6DEC\u6DBF\u6DE6\u70F9\u7109\u710A\u70FD\u70EF\u723D\u727D\u7281\u731C\u731B\u7316\u7313\u7319\u7387\u7405\u740A\u7403\u7406\u73FE\u740D\u74E0\u74F6\"],\n[\"b2a1\",\"\u74F7\u751C\u7522\u7565\u7566\u7562\u7570\u758F\u75D4\u75D5\u75B5\u75CA\u75CD\u768E\u76D4\u76D2\u76DB\u7737\u773E\u773C\u7736\u7738\u773A\u786B\u7843\u784E\u7965\u7968\u796D\u79FB\u7A92\u7A95\u7B20\u7B28\u7B1B\u7B2C\u7B26\u7B19\u7B1E\u7B2E\u7C92\u7C97\u7C95\u7D46\u7D43\u7D71\u7D2E\u7D39\u7D3C\u7D40\u7D30\u7D33\u7D44\u7D2F\u7D42\u7D32\u7D31\u7F3D\u7F9E\u7F9A\u7FCC\u7FCE\u7FD2\u801C\u804A\u8046\u812F\u8116\u8123\u812B\u8129\u8130\u8124\u8202\u8235\u8237\u8236\u8239\u838E\u839E\u8398\u8378\u83A2\u8396\u83BD\u83AB\u8392\u838A\u8393\u8389\u83A0\u8377\u837B\u837C\"],\n[\"b340\",\"\u8386\u83A7\u8655\u5F6A\u86C7\u86C0\u86B6\u86C4\u86B5\u86C6\u86CB\u86B1\u86AF\u86C9\u8853\u889E\u8888\u88AB\u8892\u8896\u888D\u888B\u8993\u898F\u8A2A\u8A1D\u8A23\u8A25\u8A31\u8A2D\u8A1F\u8A1B\u8A22\u8C49\u8C5A\u8CA9\u8CAC\u8CAB\u8CA8\u8CAA\u8CA7\u8D67\u8D66\u8DBE\u8DBA\u8EDB\u8EDF\u9019\u900D\u901A\u9017\u9023\u901F\u901D\u9010\u9015\u901E\u9020\u900F\u9022\u9016\u901B\u9014\"],\n[\"b3a1\",\"\u90E8\u90ED\u90FD\u9157\u91CE\u91F5\u91E6\u91E3\u91E7\u91ED\u91E9\u9589\u966A\u9675\u9673\u9678\u9670\u9674\u9676\u9677\u966C\u96C0\u96EA\u96E9\u7AE0\u7ADF\u9802\u9803\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB\u50A2\u508D\u5085\u5099\u5091\u5080\u5096\u5098\u509A\u6700\u51F1\u5272\u5274\u5275\u5269\u52DE\u52DD\u52DB\u535A\u53A5\u557B\u5580\u55A7\u557C\u558A\u559D\u5598\u5582\u559C\u55AA\u5594\u5587\u558B\u5583\u55B3\u55AE\u559F\u553E\u55B2\u559A\u55BB\u55AC\u55B1\u557E\u5589\u55AB\u5599\u570D\u582F\u582A\u5834\u5824\u5830\u5831\u5821\u581D\u5820\u58F9\u58FA\u5960\"],\n[\"b440\",\"\u5A77\u5A9A\u5A7F\u5A92\u5A9B\u5AA7\u5B73\u5B71\u5BD2\u5BCC\u5BD3\u5BD0\u5C0A\u5C0B\u5C31\u5D4C\u5D50\u5D34\u5D47\u5DFD\u5E45\u5E3D\u5E40\u5E43\u5E7E\u5ECA\u5EC1\u5EC2\u5EC4\u5F3C\u5F6D\u5FA9\u5FAA\u5FA8\u60D1\u60E1\u60B2\u60B6\u60E0\u611C\u6123\u60FA\u6115\u60F0\u60FB\u60F4\u6168\u60F1\u610E\u60F6\u6109\u6100\u6112\u621F\u6249\u63A3\u638C\u63CF\u63C0\u63E9\u63C9\u63C6\u63CD\"],\n[\"b4a1\",\"\u63D2\u63E3\u63D0\u63E1\u63D6\u63ED\u63EE\u6376\u63F4\u63EA\u63DB\u6452\u63DA\u63F9\u655E\u6566\u6562\u6563\u6591\u6590\u65AF\u666E\u6670\u6674\u6676\u666F\u6691\u667A\u667E\u6677\u66FE\u66FF\u671F\u671D\u68FA\u68D5\u68E0\u68D8\u68D7\u6905\u68DF\u68F5\u68EE\u68E7\u68F9\u68D2\u68F2\u68E3\u68CB\u68CD\u690D\u6912\u690E\u68C9\u68DA\u696E\u68FB\u6B3E\u6B3A\u6B3D\u6B98\u6B96\u6BBC\u6BEF\u6C2E\u6C2F\u6C2C\u6E2F\u6E38\u6E54\u6E21\u6E32\u6E67\u6E4A\u6E20\u6E25\u6E23\u6E1B\u6E5B\u6E58\u6E24\u6E56\u6E6E\u6E2D\u6E26\u6E6F\u6E34\u6E4D\u6E3A\u6E2C\u6E43\u6E1D\u6E3E\u6ECB\"],\n[\"b540\",\"\u6E89\u6E19\u6E4E\u6E63\u6E44\u6E72\u6E69\u6E5F\u7119\u711A\u7126\u7130\u7121\u7136\u716E\u711C\u724C\u7284\u7280\u7336\u7325\u7334\u7329\u743A\u742A\u7433\u7422\u7425\u7435\u7436\u7434\u742F\u741B\u7426\u7428\u7525\u7526\u756B\u756A\u75E2\u75DB\u75E3\u75D9\u75D8\u75DE\u75E0\u767B\u767C\u7696\u7693\u76B4\u76DC\u774F\u77ED\u785D\u786C\u786F\u7A0D\u7A08\u7A0B\u7A05\u7A00\u7A98\"],\n[\"b5a1\",\"\u7A97\u7A96\u7AE5\u7AE3\u7B49\u7B56\u7B46\u7B50\u7B52\u7B54\u7B4D\u7B4B\u7B4F\u7B51\u7C9F\u7CA5\u7D5E\u7D50\u7D68\u7D55\u7D2B\u7D6E\u7D72\u7D61\u7D66\u7D62\u7D70\u7D73\u5584\u7FD4\u7FD5\u800B\u8052\u8085\u8155\u8154\u814B\u8151\u814E\u8139\u8146\u813E\u814C\u8153\u8174\u8212\u821C\u83E9\u8403\u83F8\u840D\u83E0\u83C5\u840B\u83C1\u83EF\u83F1\u83F4\u8457\u840A\u83F0\u840C\u83CC\u83FD\u83F2\u83CA\u8438\u840E\u8404\u83DC\u8407\u83D4\u83DF\u865B\u86DF\u86D9\u86ED\u86D4\u86DB\u86E4\u86D0\u86DE\u8857\u88C1\u88C2\u88B1\u8983\u8996\u8A3B\u8A60\u8A55\u8A5E\u8A3C\u8A41\"],\n[\"b640\",\"\u8A54\u8A5B\u8A50\u8A46\u8A34\u8A3A\u8A36\u8A56\u8C61\u8C82\u8CAF\u8CBC\u8CB3\u8CBD\u8CC1\u8CBB\u8CC0\u8CB4\u8CB7\u8CB6\u8CBF\u8CB8\u8D8A\u8D85\u8D81\u8DCE\u8DDD\u8DCB\u8DDA\u8DD1\u8DCC\u8DDB\u8DC6\u8EFB\u8EF8\u8EFC\u8F9C\u902E\u9035\u9031\u9038\u9032\u9036\u9102\u90F5\u9109\u90FE\u9163\u9165\u91CF\u9214\u9215\u9223\u9209\u921E\u920D\u9210\u9207\u9211\u9594\u958F\u958B\u9591\"],\n[\"b6a1\",\"\u9593\u9592\u958E\u968A\u968E\u968B\u967D\u9685\u9686\u968D\u9672\u9684\u96C1\u96C5\u96C4\u96C6\u96C7\u96EF\u96F2\u97CC\u9805\u9806\u9808\u98E7\u98EA\u98EF\u98E9\u98F2\u98ED\u99AE\u99AD\u9EC3\u9ECD\u9ED1\u4E82\u50AD\u50B5\u50B2\u50B3\u50C5\u50BE\u50AC\u50B7\u50BB\u50AF\u50C7\u527F\u5277\u527D\u52DF\u52E6\u52E4\u52E2\u52E3\u532F\u55DF\u55E8\u55D3\u55E6\u55CE\u55DC\u55C7\u55D1\u55E3\u55E4\u55EF\u55DA\u55E1\u55C5\u55C6\u55E5\u55C9\u5712\u5713\u585E\u5851\u5858\u5857\u585A\u5854\u586B\u584C\u586D\u584A\u5862\u5852\u584B\u5967\u5AC1\u5AC9\u5ACC\u5ABE\u5ABD\u5ABC\"],\n[\"b740\",\"\u5AB3\u5AC2\u5AB2\u5D69\u5D6F\u5E4C\u5E79\u5EC9\u5EC8\u5F12\u5F59\u5FAC\u5FAE\u611A\u610F\u6148\u611F\u60F3\u611B\u60F9\u6101\u6108\u614E\u614C\u6144\u614D\u613E\u6134\u6127\u610D\u6106\u6137\u6221\u6222\u6413\u643E\u641E\u642A\u642D\u643D\u642C\u640F\u641C\u6414\u640D\u6436\u6416\u6417\u6406\u656C\u659F\u65B0\u6697\u6689\u6687\u6688\u6696\u6684\u6698\u668D\u6703\u6994\u696D\"],\n[\"b7a1\",\"\u695A\u6977\u6960\u6954\u6975\u6930\u6982\u694A\u6968\u696B\u695E\u6953\u6979\u6986\u695D\u6963\u695B\u6B47\u6B72\u6BC0\u6BBF\u6BD3\u6BFD\u6EA2\u6EAF\u6ED3\u6EB6\u6EC2\u6E90\u6E9D\u6EC7\u6EC5\u6EA5\u6E98\u6EBC\u6EBA\u6EAB\u6ED1\u6E96\u6E9C\u6EC4\u6ED4\u6EAA\u6EA7\u6EB4\u714E\u7159\u7169\u7164\u7149\u7167\u715C\u716C\u7166\u714C\u7165\u715E\u7146\u7168\u7156\u723A\u7252\u7337\u7345\u733F\u733E\u746F\u745A\u7455\u745F\u745E\u7441\u743F\u7459\u745B\u745C\u7576\u7578\u7600\u75F0\u7601\u75F2\u75F1\u75FA\u75FF\u75F4\u75F3\u76DE\u76DF\u775B\u776B\u7766\u775E\u7763\"],\n[\"b840\",\"\u7779\u776A\u776C\u775C\u7765\u7768\u7762\u77EE\u788E\u78B0\u7897\u7898\u788C\u7889\u787C\u7891\u7893\u787F\u797A\u797F\u7981\u842C\u79BD\u7A1C\u7A1A\u7A20\u7A14\u7A1F\u7A1E\u7A9F\u7AA0\u7B77\u7BC0\u7B60\u7B6E\u7B67\u7CB1\u7CB3\u7CB5\u7D93\u7D79\u7D91\u7D81\u7D8F\u7D5B\u7F6E\u7F69\u7F6A\u7F72\u7FA9\u7FA8\u7FA4\u8056\u8058\u8086\u8084\u8171\u8170\u8178\u8165\u816E\u8173\u816B\"],\n[\"b8a1\",\"\u8179\u817A\u8166\u8205\u8247\u8482\u8477\u843D\u8431\u8475\u8466\u846B\u8449\u846C\u845B\u843C\u8435\u8461\u8463\u8469\u846D\u8446\u865E\u865C\u865F\u86F9\u8713\u8708\u8707\u8700\u86FE\u86FB\u8702\u8703\u8706\u870A\u8859\u88DF\u88D4\u88D9\u88DC\u88D8\u88DD\u88E1\u88CA\u88D5\u88D2\u899C\u89E3\u8A6B\u8A72\u8A73\u8A66\u8A69\u8A70\u8A87\u8A7C\u8A63\u8AA0\u8A71\u8A85\u8A6D\u8A62\u8A6E\u8A6C\u8A79\u8A7B\u8A3E\u8A68\u8C62\u8C8A\u8C89\u8CCA\u8CC7\u8CC8\u8CC4\u8CB2\u8CC3\u8CC2\u8CC5\u8DE1\u8DDF\u8DE8\u8DEF\u8DF3\u8DFA\u8DEA\u8DE4\u8DE6\u8EB2\u8F03\u8F09\u8EFE\u8F0A\"],\n[\"b940\",\"\u8F9F\u8FB2\u904B\u904A\u9053\u9042\u9054\u903C\u9055\u9050\u9047\u904F\u904E\u904D\u9051\u903E\u9041\u9112\u9117\u916C\u916A\u9169\u91C9\u9237\u9257\u9238\u923D\u9240\u923E\u925B\u924B\u9264\u9251\u9234\u9249\u924D\u9245\u9239\u923F\u925A\u9598\u9698\u9694\u9695\u96CD\u96CB\u96C9\u96CA\u96F7\u96FB\u96F9\u96F6\u9756\u9774\u9776\u9810\u9811\u9813\u980A\u9812\u980C\u98FC\u98F4\"],\n[\"b9a1\",\"\u98FD\u98FE\u99B3\u99B1\u99B4\u9AE1\u9CE9\u9E82\u9F0E\u9F13\u9F20\u50E7\u50EE\u50E5\u50D6\u50ED\u50DA\u50D5\u50CF\u50D1\u50F1\u50CE\u50E9\u5162\u51F3\u5283\u5282\u5331\u53AD\u55FE\u5600\u561B\u5617\u55FD\u5614\u5606\u5609\u560D\u560E\u55F7\u5616\u561F\u5608\u5610\u55F6\u5718\u5716\u5875\u587E\u5883\u5893\u588A\u5879\u5885\u587D\u58FD\u5925\u5922\u5924\u596A\u5969\u5AE1\u5AE6\u5AE9\u5AD7\u5AD6\u5AD8\u5AE3\u5B75\u5BDE\u5BE7\u5BE1\u5BE5\u5BE6\u5BE8\u5BE2\u5BE4\u5BDF\u5C0D\u5C62\u5D84\u5D87\u5E5B\u5E63\u5E55\u5E57\u5E54\u5ED3\u5ED6\u5F0A\u5F46\u5F70\u5FB9\u6147\"],\n[\"ba40\",\"\u613F\u614B\u6177\u6162\u6163\u615F\u615A\u6158\u6175\u622A\u6487\u6458\u6454\u64A4\u6478\u645F\u647A\u6451\u6467\u6434\u646D\u647B\u6572\u65A1\u65D7\u65D6\u66A2\u66A8\u669D\u699C\u69A8\u6995\u69C1\u69AE\u69D3\u69CB\u699B\u69B7\u69BB\u69AB\u69B4\u69D0\u69CD\u69AD\u69CC\u69A6\u69C3\u69A3\u6B49\u6B4C\u6C33\u6F33\u6F14\u6EFE\u6F13\u6EF4\u6F29\u6F3E\u6F20\u6F2C\u6F0F\u6F02\u6F22\"],\n[\"baa1\",\"\u6EFF\u6EEF\u6F06\u6F31\u6F38\u6F32\u6F23\u6F15\u6F2B\u6F2F\u6F88\u6F2A\u6EEC\u6F01\u6EF2\u6ECC\u6EF7\u7194\u7199\u717D\u718A\u7184\u7192\u723E\u7292\u7296\u7344\u7350\u7464\u7463\u746A\u7470\u746D\u7504\u7591\u7627\u760D\u760B\u7609\u7613\u76E1\u76E3\u7784\u777D\u777F\u7761\u78C1\u789F\u78A7\u78B3\u78A9\u78A3\u798E\u798F\u798D\u7A2E\u7A31\u7AAA\u7AA9\u7AED\u7AEF\u7BA1\u7B95\u7B8B\u7B75\u7B97\u7B9D\u7B94\u7B8F\u7BB8\u7B87\u7B84\u7CB9\u7CBD\u7CBE\u7DBB\u7DB0\u7D9C\u7DBD\u7DBE\u7DA0\u7DCA\u7DB4\u7DB2\u7DB1\u7DBA\u7DA2\u7DBF\u7DB5\u7DB8\u7DAD\u7DD2\u7DC7\u7DAC\"],\n[\"bb40\",\"\u7F70\u7FE0\u7FE1\u7FDF\u805E\u805A\u8087\u8150\u8180\u818F\u8188\u818A\u817F\u8182\u81E7\u81FA\u8207\u8214\u821E\u824B\u84C9\u84BF\u84C6\u84C4\u8499\u849E\u84B2\u849C\u84CB\u84B8\u84C0\u84D3\u8490\u84BC\u84D1\u84CA\u873F\u871C\u873B\u8722\u8725\u8734\u8718\u8755\u8737\u8729\u88F3\u8902\u88F4\u88F9\u88F8\u88FD\u88E8\u891A\u88EF\u8AA6\u8A8C\u8A9E\u8AA3\u8A8D\u8AA1\u8A93\u8AA4\"],\n[\"bba1\",\"\u8AAA\u8AA5\u8AA8\u8A98\u8A91\u8A9A\u8AA7\u8C6A\u8C8D\u8C8C\u8CD3\u8CD1\u8CD2\u8D6B\u8D99\u8D95\u8DFC\u8F14\u8F12\u8F15\u8F13\u8FA3\u9060\u9058\u905C\u9063\u9059\u905E\u9062\u905D\u905B\u9119\u9118\u911E\u9175\u9178\u9177\u9174\u9278\u9280\u9285\u9298\u9296\u927B\u9293\u929C\u92A8\u927C\u9291\u95A1\u95A8\u95A9\u95A3\u95A5\u95A4\u9699\u969C\u969B\u96CC\u96D2\u9700\u977C\u9785\u97F6\u9817\u9818\u98AF\u98B1\u9903\u9905\u990C\u9909\u99C1\u9AAF\u9AB0\u9AE6\u9B41\u9B42\u9CF4\u9CF6\u9CF3\u9EBC\u9F3B\u9F4A\u5104\u5100\u50FB\u50F5\u50F9\u5102\u5108\u5109\u5105\u51DC\"],\n[\"bc40\",\"\u5287\u5288\u5289\u528D\u528A\u52F0\u53B2\u562E\u563B\u5639\u5632\u563F\u5634\u5629\u5653\u564E\u5657\u5674\u5636\u562F\u5630\u5880\u589F\u589E\u58B3\u589C\u58AE\u58A9\u58A6\u596D\u5B09\u5AFB\u5B0B\u5AF5\u5B0C\u5B08\u5BEE\u5BEC\u5BE9\u5BEB\u5C64\u5C65\u5D9D\u5D94\u5E62\u5E5F\u5E61\u5EE2\u5EDA\u5EDF\u5EDD\u5EE3\u5EE0\u5F48\u5F71\u5FB7\u5FB5\u6176\u6167\u616E\u615D\u6155\u6182\"],\n[\"bca1\",\"\u617C\u6170\u616B\u617E\u61A7\u6190\u61AB\u618E\u61AC\u619A\u61A4\u6194\u61AE\u622E\u6469\u646F\u6479\u649E\u64B2\u6488\u6490\u64B0\u64A5\u6493\u6495\u64A9\u6492\u64AE\u64AD\u64AB\u649A\u64AC\u6499\u64A2\u64B3\u6575\u6577\u6578\u66AE\u66AB\u66B4\u66B1\u6A23\u6A1F\u69E8\u6A01\u6A1E\u6A19\u69FD\u6A21\u6A13\u6A0A\u69F3\u6A02\u6A05\u69ED\u6A11\u6B50\u6B4E\u6BA4\u6BC5\u6BC6\u6F3F\u6F7C\u6F84\u6F51\u6F66\u6F54\u6F86\u6F6D\u6F5B\u6F78\u6F6E\u6F8E\u6F7A\u6F70\u6F64\u6F97\u6F58\u6ED5\u6F6F\u6F60\u6F5F\u719F\u71AC\u71B1\u71A8\u7256\u729B\u734E\u7357\u7469\u748B\u7483\"],\n[\"bd40\",\"\u747E\u7480\u757F\u7620\u7629\u761F\u7624\u7626\u7621\u7622\u769A\u76BA\u76E4\u778E\u7787\u778C\u7791\u778B\u78CB\u78C5\u78BA\u78CA\u78BE\u78D5\u78BC\u78D0\u7A3F\u7A3C\u7A40\u7A3D\u7A37\u7A3B\u7AAF\u7AAE\u7BAD\u7BB1\u7BC4\u7BB4\u7BC6\u7BC7\u7BC1\u7BA0\u7BCC\u7CCA\u7DE0\u7DF4\u7DEF\u7DFB\u7DD8\u7DEC\u7DDD\u7DE8\u7DE3\u7DDA\u7DDE\u7DE9\u7D9E\u7DD9\u7DF2\u7DF9\u7F75\u7F77\u7FAF\"],\n[\"bda1\",\"\u7FE9\u8026\u819B\u819C\u819D\u81A0\u819A\u8198\u8517\u853D\u851A\u84EE\u852C\u852D\u8513\u8511\u8523\u8521\u8514\u84EC\u8525\u84FF\u8506\u8782\u8774\u8776\u8760\u8766\u8778\u8768\u8759\u8757\u874C\u8753\u885B\u885D\u8910\u8907\u8912\u8913\u8915\u890A\u8ABC\u8AD2\u8AC7\u8AC4\u8A95\u8ACB\u8AF8\u8AB2\u8AC9\u8AC2\u8ABF\u8AB0\u8AD6\u8ACD\u8AB6\u8AB9\u8ADB\u8C4C\u8C4E\u8C6C\u8CE0\u8CDE\u8CE6\u8CE4\u8CEC\u8CED\u8CE2\u8CE3\u8CDC\u8CEA\u8CE1\u8D6D\u8D9F\u8DA3\u8E2B\u8E10\u8E1D\u8E22\u8E0F\u8E29\u8E1F\u8E21\u8E1E\u8EBA\u8F1D\u8F1B\u8F1F\u8F29\u8F26\u8F2A\u8F1C\u8F1E\"],\n[\"be40\",\"\u8F25\u9069\u906E\u9068\u906D\u9077\u9130\u912D\u9127\u9131\u9187\u9189\u918B\u9183\u92C5\u92BB\u92B7\u92EA\u92AC\u92E4\u92C1\u92B3\u92BC\u92D2\u92C7\u92F0\u92B2\u95AD\u95B1\u9704\u9706\u9707\u9709\u9760\u978D\u978B\u978F\u9821\u982B\u981C\u98B3\u990A\u9913\u9912\u9918\u99DD\u99D0\u99DF\u99DB\u99D1\u99D5\u99D2\u99D9\u9AB7\u9AEE\u9AEF\u9B27\u9B45\u9B44\u9B77\u9B6F\u9D06\u9D09\"],\n[\"bea1\",\"\u9D03\u9EA9\u9EBE\u9ECE\u58A8\u9F52\u5112\u5118\u5114\u5110\u5115\u5180\u51AA\u51DD\u5291\u5293\u52F3\u5659\u566B\u5679\u5669\u5664\u5678\u566A\u5668\u5665\u5671\u566F\u566C\u5662\u5676\u58C1\u58BE\u58C7\u58C5\u596E\u5B1D\u5B34\u5B78\u5BF0\u5C0E\u5F4A\u61B2\u6191\u61A9\u618A\u61CD\u61B6\u61BE\u61CA\u61C8\u6230\u64C5\u64C1\u64CB\u64BB\u64BC\u64DA\u64C4\u64C7\u64C2\u64CD\u64BF\u64D2\u64D4\u64BE\u6574\u66C6\u66C9\u66B9\u66C4\u66C7\u66B8\u6A3D\u6A38\u6A3A\u6A59\u6A6B\u6A58\u6A39\u6A44\u6A62\u6A61\u6A4B\u6A47\u6A35\u6A5F\u6A48\u6B59\u6B77\u6C05\u6FC2\u6FB1\u6FA1\"],\n[\"bf40\",\"\u6FC3\u6FA4\u6FC1\u6FA7\u6FB3\u6FC0\u6FB9\u6FB6\u6FA6\u6FA0\u6FB4\u71BE\u71C9\u71D0\u71D2\u71C8\u71D5\u71B9\u71CE\u71D9\u71DC\u71C3\u71C4\u7368\u749C\u74A3\u7498\u749F\u749E\u74E2\u750C\u750D\u7634\u7638\u763A\u76E7\u76E5\u77A0\u779E\u779F\u77A5\u78E8\u78DA\u78EC\u78E7\u79A6\u7A4D\u7A4E\u7A46\u7A4C\u7A4B\u7ABA\u7BD9\u7C11\u7BC9\u7BE4\u7BDB\u7BE1\u7BE9\u7BE6\u7CD5\u7CD6\u7E0A\"],\n[\"bfa1\",\"\u7E11\u7E08\u7E1B\u7E23\u7E1E\u7E1D\u7E09\u7E10\u7F79\u7FB2\u7FF0\u7FF1\u7FEE\u8028\u81B3\u81A9\u81A8\u81FB\u8208\u8258\u8259\u854A\u8559\u8548\u8568\u8569\u8543\u8549\u856D\u856A\u855E\u8783\u879F\u879E\u87A2\u878D\u8861\u892A\u8932\u8925\u892B\u8921\u89AA\u89A6\u8AE6\u8AFA\u8AEB\u8AF1\u8B00\u8ADC\u8AE7\u8AEE\u8AFE\u8B01\u8B02\u8AF7\u8AED\u8AF3\u8AF6\u8AFC\u8C6B\u8C6D\u8C93\u8CF4\u8E44\u8E31\u8E34\u8E42\u8E39\u8E35\u8F3B\u8F2F\u8F38\u8F33\u8FA8\u8FA6\u9075\u9074\u9078\u9072\u907C\u907A\u9134\u9192\u9320\u9336\u92F8\u9333\u932F\u9322\u92FC\u932B\u9304\u931A\"],\n[\"c040\",\"\u9310\u9326\u9321\u9315\u932E\u9319\u95BB\u96A7\u96A8\u96AA\u96D5\u970E\u9711\u9716\u970D\u9713\u970F\u975B\u975C\u9766\u9798\u9830\u9838\u983B\u9837\u982D\u9839\u9824\u9910\u9928\u991E\u991B\u9921\u991A\u99ED\u99E2\u99F1\u9AB8\u9ABC\u9AFB\u9AED\u9B28\u9B91\u9D15\u9D23\u9D26\u9D28\u9D12\u9D1B\u9ED8\u9ED4\u9F8D\u9F9C\u512A\u511F\u5121\u5132\u52F5\u568E\u5680\u5690\u5685\u5687\"],\n[\"c0a1\",\"\u568F\u58D5\u58D3\u58D1\u58CE\u5B30\u5B2A\u5B24\u5B7A\u5C37\u5C68\u5DBC\u5DBA\u5DBD\u5DB8\u5E6B\u5F4C\u5FBD\u61C9\u61C2\u61C7\u61E6\u61CB\u6232\u6234\u64CE\u64CA\u64D8\u64E0\u64F0\u64E6\u64EC\u64F1\u64E2\u64ED\u6582\u6583\u66D9\u66D6\u6A80\u6A94\u6A84\u6AA2\u6A9C\u6ADB\u6AA3\u6A7E\u6A97\u6A90\u6AA0\u6B5C\u6BAE\u6BDA\u6C08\u6FD8\u6FF1\u6FDF\u6FE0\u6FDB\u6FE4\u6FEB\u6FEF\u6F80\u6FEC\u6FE1\u6FE9\u6FD5\u6FEE\u6FF0\u71E7\u71DF\u71EE\u71E6\u71E5\u71ED\u71EC\u71F4\u71E0\u7235\u7246\u7370\u7372\u74A9\u74B0\u74A6\u74A8\u7646\u7642\u764C\u76EA\u77B3\u77AA\u77B0\u77AC\"],\n[\"c140\",\"\u77A7\u77AD\u77EF\u78F7\u78FA\u78F4\u78EF\u7901\u79A7\u79AA\u7A57\u7ABF\u7C07\u7C0D\u7BFE\u7BF7\u7C0C\u7BE0\u7CE0\u7CDC\u7CDE\u7CE2\u7CDF\u7CD9\u7CDD\u7E2E\u7E3E\u7E46\u7E37\u7E32\u7E43\u7E2B\u7E3D\u7E31\u7E45\u7E41\u7E34\u7E39\u7E48\u7E35\u7E3F\u7E2F\u7F44\u7FF3\u7FFC\u8071\u8072\u8070\u806F\u8073\u81C6\u81C3\u81BA\u81C2\u81C0\u81BF\u81BD\u81C9\u81BE\u81E8\u8209\u8271\u85AA\"],\n[\"c1a1\",\"\u8584\u857E\u859C\u8591\u8594\u85AF\u859B\u8587\u85A8\u858A\u8667\u87C0\u87D1\u87B3\u87D2\u87C6\u87AB\u87BB\u87BA\u87C8\u87CB\u893B\u8936\u8944\u8938\u893D\u89AC\u8B0E\u8B17\u8B19\u8B1B\u8B0A\u8B20\u8B1D\u8B04\u8B10\u8C41\u8C3F\u8C73\u8CFA\u8CFD\u8CFC\u8CF8\u8CFB\u8DA8\u8E49\u8E4B\u8E48\u8E4A\u8F44\u8F3E\u8F42\u8F45\u8F3F\u907F\u907D\u9084\u9081\u9082\u9080\u9139\u91A3\u919E\u919C\u934D\u9382\u9328\u9375\u934A\u9365\u934B\u9318\u937E\u936C\u935B\u9370\u935A\u9354\u95CA\u95CB\u95CC\u95C8\u95C6\u96B1\u96B8\u96D6\u971C\u971E\u97A0\u97D3\u9846\u98B6\u9935\u9A01\"],\n[\"c240\",\"\u99FF\u9BAE\u9BAB\u9BAA\u9BAD\u9D3B\u9D3F\u9E8B\u9ECF\u9EDE\u9EDC\u9EDD\u9EDB\u9F3E\u9F4B\u53E2\u5695\u56AE\u58D9\u58D8\u5B38\u5F5D\u61E3\u6233\u64F4\u64F2\u64FE\u6506\u64FA\u64FB\u64F7\u65B7\u66DC\u6726\u6AB3\u6AAC\u6AC3\u6ABB\u6AB8\u6AC2\u6AAE\u6AAF\u6B5F\u6B78\u6BAF\u7009\u700B\u6FFE\u7006\u6FFA\u7011\u700F\u71FB\u71FC\u71FE\u71F8\u7377\u7375\u74A7\u74BF\u7515\u7656\u7658\"],\n[\"c2a1\",\"\u7652\u77BD\u77BF\u77BB\u77BC\u790E\u79AE\u7A61\u7A62\u7A60\u7AC4\u7AC5\u7C2B\u7C27\u7C2A\u7C1E\u7C23\u7C21\u7CE7\u7E54\u7E55\u7E5E\u7E5A\u7E61\u7E52\u7E59\u7F48\u7FF9\u7FFB\u8077\u8076\u81CD\u81CF\u820A\u85CF\u85A9\u85CD\u85D0\u85C9\u85B0\u85BA\u85B9\u85A6\u87EF\u87EC\u87F2\u87E0\u8986\u89B2\u89F4\u8B28\u8B39\u8B2C\u8B2B\u8C50\u8D05\u8E59\u8E63\u8E66\u8E64\u8E5F\u8E55\u8EC0\u8F49\u8F4D\u9087\u9083\u9088\u91AB\u91AC\u91D0\u9394\u938A\u9396\u93A2\u93B3\u93AE\u93AC\u93B0\u9398\u939A\u9397\u95D4\u95D6\u95D0\u95D5\u96E2\u96DC\u96D9\u96DB\u96DE\u9724\u97A3\u97A6\"],\n[\"c340\",\"\u97AD\u97F9\u984D\u984F\u984C\u984E\u9853\u98BA\u993E\u993F\u993D\u992E\u99A5\u9A0E\u9AC1\u9B03\u9B06\u9B4F\u9B4E\u9B4D\u9BCA\u9BC9\u9BFD\u9BC8\u9BC0\u9D51\u9D5D\u9D60\u9EE0\u9F15\u9F2C\u5133\u56A5\u58DE\u58DF\u58E2\u5BF5\u9F90\u5EEC\u61F2\u61F7\u61F6\u61F5\u6500\u650F\u66E0\u66DD\u6AE5\u6ADD\u6ADA\u6AD3\u701B\u701F\u7028\u701A\u701D\u7015\u7018\u7206\u720D\u7258\u72A2\u7378\"],\n[\"c3a1\",\"\u737A\u74BD\u74CA\u74E3\u7587\u7586\u765F\u7661\u77C7\u7919\u79B1\u7A6B\u7A69\u7C3E\u7C3F\u7C38\u7C3D\u7C37\u7C40\u7E6B\u7E6D\u7E79\u7E69\u7E6A\u7F85\u7E73\u7FB6\u7FB9\u7FB8\u81D8\u85E9\u85DD\u85EA\u85D5\u85E4\u85E5\u85F7\u87FB\u8805\u880D\u87F9\u87FE\u8960\u895F\u8956\u895E\u8B41\u8B5C\u8B58\u8B49\u8B5A\u8B4E\u8B4F\u8B46\u8B59\u8D08\u8D0A\u8E7C\u8E72\u8E87\u8E76\u8E6C\u8E7A\u8E74\u8F54\u8F4E\u8FAD\u908A\u908B\u91B1\u91AE\u93E1\u93D1\u93DF\u93C3\u93C8\u93DC\u93DD\u93D6\u93E2\u93CD\u93D8\u93E4\u93D7\u93E8\u95DC\u96B4\u96E3\u972A\u9727\u9761\u97DC\u97FB\u985E\"],\n[\"c440\",\"\u9858\u985B\u98BC\u9945\u9949\u9A16\u9A19\u9B0D\u9BE8\u9BE7\u9BD6\u9BDB\u9D89\u9D61\u9D72\u9D6A\u9D6C\u9E92\u9E97\u9E93\u9EB4\u52F8\u56A8\u56B7\u56B6\u56B4\u56BC\u58E4\u5B40\u5B43\u5B7D\u5BF6\u5DC9\u61F8\u61FA\u6518\u6514\u6519\u66E6\u6727\u6AEC\u703E\u7030\u7032\u7210\u737B\u74CF\u7662\u7665\u7926\u792A\u792C\u792B\u7AC7\u7AF6\u7C4C\u7C43\u7C4D\u7CEF\u7CF0\u8FAE\u7E7D\u7E7C\"],\n[\"c4a1\",\"\u7E82\u7F4C\u8000\u81DA\u8266\u85FB\u85F9\u8611\u85FA\u8606\u860B\u8607\u860A\u8814\u8815\u8964\u89BA\u89F8\u8B70\u8B6C\u8B66\u8B6F\u8B5F\u8B6B\u8D0F\u8D0D\u8E89\u8E81\u8E85\u8E82\u91B4\u91CB\u9418\u9403\u93FD\u95E1\u9730\u98C4\u9952\u9951\u99A8\u9A2B\u9A30\u9A37\u9A35\u9C13\u9C0D\u9E79\u9EB5\u9EE8\u9F2F\u9F5F\u9F63\u9F61\u5137\u5138\u56C1\u56C0\u56C2\u5914\u5C6C\u5DCD\u61FC\u61FE\u651D\u651C\u6595\u66E9\u6AFB\u6B04\u6AFA\u6BB2\u704C\u721B\u72A7\u74D6\u74D4\u7669\u77D3\u7C50\u7E8F\u7E8C\u7FBC\u8617\u862D\u861A\u8823\u8822\u8821\u881F\u896A\u896C\u89BD\u8B74\"],\n[\"c540\",\"\u8B77\u8B7D\u8D13\u8E8A\u8E8D\u8E8B\u8F5F\u8FAF\u91BA\u942E\u9433\u9435\u943A\u9438\u9432\u942B\u95E2\u9738\u9739\u9732\u97FF\u9867\u9865\u9957\u9A45\u9A43\u9A40\u9A3E\u9ACF\u9B54\u9B51\u9C2D\u9C25\u9DAF\u9DB4\u9DC2\u9DB8\u9E9D\u9EEF\u9F19\u9F5C\u9F66\u9F67\u513C\u513B\u56C8\u56CA\u56C9\u5B7F\u5DD4\u5DD2\u5F4E\u61FF\u6524\u6B0A\u6B61\u7051\u7058\u7380\u74E4\u758A\u766E\u766C\"],\n[\"c5a1\",\"\u79B3\u7C60\u7C5F\u807E\u807D\u81DF\u8972\u896F\u89FC\u8B80\u8D16\u8D17\u8E91\u8E93\u8F61\u9148\u9444\u9451\u9452\u973D\u973E\u97C3\u97C1\u986B\u9955\u9A55\u9A4D\u9AD2\u9B1A\u9C49\u9C31\u9C3E\u9C3B\u9DD3\u9DD7\u9F34\u9F6C\u9F6A\u9F94\u56CC\u5DD6\u6200\u6523\u652B\u652A\u66EC\u6B10\u74DA\u7ACA\u7C64\u7C63\u7C65\u7E93\u7E96\u7E94\u81E2\u8638\u863F\u8831\u8B8A\u9090\u908F\u9463\u9460\u9464\u9768\u986F\u995C\u9A5A\u9A5B\u9A57\u9AD3\u9AD4\u9AD1\u9C54\u9C57\u9C56\u9DE5\u9E9F\u9EF4\u56D1\u58E9\u652C\u705E\u7671\u7672\u77D7\u7F50\u7F88\u8836\u8839\u8862\u8B93\u8B92\"],\n[\"c640\",\"\u8B96\u8277\u8D1B\u91C0\u946A\u9742\u9748\u9744\u97C6\u9870\u9A5F\u9B22\u9B58\u9C5F\u9DF9\u9DFA\u9E7C\u9E7D\u9F07\u9F77\u9F72\u5EF3\u6B16\u7063\u7C6C\u7C6E\u883B\u89C0\u8EA1\u91C1\u9472\u9470\u9871\u995E\u9AD6\u9B23\u9ECC\u7064\u77DA\u8B9A\u9477\u97C9\u9A62\u9A65\u7E9C\u8B9C\u8EAA\u91C5\u947D\u947E\u947C\u9C77\u9C78\u9EF7\u8C54\u947F\u9E1A\u7228\u9A6A\u9B31\u9E1B\u9E1E\u7C72\"],\n[\"c940\",\"\u4E42\u4E5C\u51F5\u531A\u5382\u4E07\u4E0C\u4E47\u4E8D\u56D7\uFA0C\u5C6E\u5F73\u4E0F\u5187\u4E0E\u4E2E\u4E93\u4EC2\u4EC9\u4EC8\u5198\u52FC\u536C\u53B9\u5720\u5903\u592C\u5C10\u5DFF\u65E1\u6BB3\u6BCC\u6C14\u723F\u4E31\u4E3C\u4EE8\u4EDC\u4EE9\u4EE1\u4EDD\u4EDA\u520C\u531C\u534C\u5722\u5723\u5917\u592F\u5B81\u5B84\u5C12\u5C3B\u5C74\u5C73\u5E04\u5E80\u5E82\u5FC9\u6209\u6250\u6C15\"],\n[\"c9a1\",\"\u6C36\u6C43\u6C3F\u6C3B\u72AE\u72B0\u738A\u79B8\u808A\u961E\u4F0E\u4F18\u4F2C\u4EF5\u4F14\u4EF1\u4F00\u4EF7\u4F08\u4F1D\u4F02\u4F05\u4F22\u4F13\u4F04\u4EF4\u4F12\u51B1\u5213\u5209\u5210\u52A6\u5322\u531F\u534D\u538A\u5407\u56E1\u56DF\u572E\u572A\u5734\u593C\u5980\u597C\u5985\u597B\u597E\u5977\u597F\u5B56\u5C15\u5C25\u5C7C\u5C7A\u5C7B\u5C7E\u5DDF\u5E75\u5E84\u5F02\u5F1A\u5F74\u5FD5\u5FD4\u5FCF\u625C\u625E\u6264\u6261\u6266\u6262\u6259\u6260\u625A\u6265\u65EF\u65EE\u673E\u6739\u6738\u673B\u673A\u673F\u673C\u6733\u6C18\u6C46\u6C52\u6C5C\u6C4F\u6C4A\u6C54\u6C4B\"],\n[\"ca40\",\"\u6C4C\u7071\u725E\u72B4\u72B5\u738E\u752A\u767F\u7A75\u7F51\u8278\u827C\u8280\u827D\u827F\u864D\u897E\u9099\u9097\u9098\u909B\u9094\u9622\u9624\u9620\u9623\u4F56\u4F3B\u4F62\u4F49\u4F53\u4F64\u4F3E\u4F67\u4F52\u4F5F\u4F41\u4F58\u4F2D\u4F33\u4F3F\u4F61\u518F\u51B9\u521C\u521E\u5221\u52AD\u52AE\u5309\u5363\u5372\u538E\u538F\u5430\u5437\u542A\u5454\u5445\u5419\u541C\u5425\u5418\"],\n[\"caa1\",\"\u543D\u544F\u5441\u5428\u5424\u5447\u56EE\u56E7\u56E5\u5741\u5745\u574C\u5749\u574B\u5752\u5906\u5940\u59A6\u5998\u59A0\u5997\u598E\u59A2\u5990\u598F\u59A7\u59A1\u5B8E\u5B92\u5C28\u5C2A\u5C8D\u5C8F\u5C88\u5C8B\u5C89\u5C92\u5C8A\u5C86\u5C93\u5C95\u5DE0\u5E0A\u5E0E\u5E8B\u5E89\u5E8C\u5E88\u5E8D\u5F05\u5F1D\u5F78\u5F76\u5FD2\u5FD1\u5FD0\u5FED\u5FE8\u5FEE\u5FF3\u5FE1\u5FE4\u5FE3\u5FFA\u5FEF\u5FF7\u5FFB\u6000\u5FF4\u623A\u6283\u628C\u628E\u628F\u6294\u6287\u6271\u627B\u627A\u6270\u6281\u6288\u6277\u627D\u6272\u6274\u6537\u65F0\u65F4\u65F3\u65F2\u65F5\u6745\u6747\"],\n[\"cb40\",\"\u6759\u6755\u674C\u6748\u675D\u674D\u675A\u674B\u6BD0\u6C19\u6C1A\u6C78\u6C67\u6C6B\u6C84\u6C8B\u6C8F\u6C71\u6C6F\u6C69\u6C9A\u6C6D\u6C87\u6C95\u6C9C\u6C66\u6C73\u6C65\u6C7B\u6C8E\u7074\u707A\u7263\u72BF\u72BD\u72C3\u72C6\u72C1\u72BA\u72C5\u7395\u7397\u7393\u7394\u7392\u753A\u7539\u7594\u7595\u7681\u793D\u8034\u8095\u8099\u8090\u8092\u809C\u8290\u828F\u8285\u828E\u8291\u8293\"],\n[\"cba1\",\"\u828A\u8283\u8284\u8C78\u8FC9\u8FBF\u909F\u90A1\u90A5\u909E\u90A7\u90A0\u9630\u9628\u962F\u962D\u4E33\u4F98\u4F7C\u4F85\u4F7D\u4F80\u4F87\u4F76\u4F74\u4F89\u4F84\u4F77\u4F4C\u4F97\u4F6A\u4F9A\u4F79\u4F81\u4F78\u4F90\u4F9C\u4F94\u4F9E\u4F92\u4F82\u4F95\u4F6B\u4F6E\u519E\u51BC\u51BE\u5235\u5232\u5233\u5246\u5231\u52BC\u530A\u530B\u533C\u5392\u5394\u5487\u547F\u5481\u5491\u5482\u5488\u546B\u547A\u547E\u5465\u546C\u5474\u5466\u548D\u546F\u5461\u5460\u5498\u5463\u5467\u5464\u56F7\u56F9\u576F\u5772\u576D\u576B\u5771\u5770\u5776\u5780\u5775\u577B\u5773\u5774\u5762\"],\n[\"cc40\",\"\u5768\u577D\u590C\u5945\u59B5\u59BA\u59CF\u59CE\u59B2\u59CC\u59C1\u59B6\u59BC\u59C3\u59D6\u59B1\u59BD\u59C0\u59C8\u59B4\u59C7\u5B62\u5B65\u5B93\u5B95\u5C44\u5C47\u5CAE\u5CA4\u5CA0\u5CB5\u5CAF\u5CA8\u5CAC\u5C9F\u5CA3\u5CAD\u5CA2\u5CAA\u5CA7\u5C9D\u5CA5\u5CB6\u5CB0\u5CA6\u5E17\u5E14\u5E19\u5F28\u5F22\u5F23\u5F24\u5F54\u5F82\u5F7E\u5F7D\u5FDE\u5FE5\u602D\u6026\u6019\u6032\u600B\"],\n[\"cca1\",\"\u6034\u600A\u6017\u6033\u601A\u601E\u602C\u6022\u600D\u6010\u602E\u6013\u6011\u600C\u6009\u601C\u6214\u623D\u62AD\u62B4\u62D1\u62BE\u62AA\u62B6\u62CA\u62AE\u62B3\u62AF\u62BB\u62A9\u62B0\u62B8\u653D\u65A8\u65BB\u6609\u65FC\u6604\u6612\u6608\u65FB\u6603\u660B\u660D\u6605\u65FD\u6611\u6610\u66F6\u670A\u6785\u676C\u678E\u6792\u6776\u677B\u6798\u6786\u6784\u6774\u678D\u678C\u677A\u679F\u6791\u6799\u6783\u677D\u6781\u6778\u6779\u6794\u6B25\u6B80\u6B7E\u6BDE\u6C1D\u6C93\u6CEC\u6CEB\u6CEE\u6CD9\u6CB6\u6CD4\u6CAD\u6CE7\u6CB7\u6CD0\u6CC2\u6CBA\u6CC3\u6CC6\u6CED\u6CF2\"],\n[\"cd40\",\"\u6CD2\u6CDD\u6CB4\u6C8A\u6C9D\u6C80\u6CDE\u6CC0\u6D30\u6CCD\u6CC7\u6CB0\u6CF9\u6CCF\u6CE9\u6CD1\u7094\u7098\u7085\u7093\u7086\u7084\u7091\u7096\u7082\u709A\u7083\u726A\u72D6\u72CB\u72D8\u72C9\u72DC\u72D2\u72D4\u72DA\u72CC\u72D1\u73A4\u73A1\u73AD\u73A6\u73A2\u73A0\u73AC\u739D\u74DD\u74E8\u753F\u7540\u753E\u758C\u7598\u76AF\u76F3\u76F1\u76F0\u76F5\u77F8\u77FC\u77F9\u77FB\u77FA\"],\n[\"cda1\",\"\u77F7\u7942\u793F\u79C5\u7A78\u7A7B\u7AFB\u7C75\u7CFD\u8035\u808F\u80AE\u80A3\u80B8\u80B5\u80AD\u8220\u82A0\u82C0\u82AB\u829A\u8298\u829B\u82B5\u82A7\u82AE\u82BC\u829E\u82BA\u82B4\u82A8\u82A1\u82A9\u82C2\u82A4\u82C3\u82B6\u82A2\u8670\u866F\u866D\u866E\u8C56\u8FD2\u8FCB\u8FD3\u8FCD\u8FD6\u8FD5\u8FD7\u90B2\u90B4\u90AF\u90B3\u90B0\u9639\u963D\u963C\u963A\u9643\u4FCD\u4FC5\u4FD3\u4FB2\u4FC9\u4FCB\u4FC1\u4FD4\u4FDC\u4FD9\u4FBB\u4FB3\u4FDB\u4FC7\u4FD6\u4FBA\u4FC0\u4FB9\u4FEC\u5244\u5249\u52C0\u52C2\u533D\u537C\u5397\u5396\u5399\u5398\u54BA\u54A1\u54AD\u54A5\u54CF\"],\n[\"ce40\",\"\u54C3\u830D\u54B7\u54AE\u54D6\u54B6\u54C5\u54C6\u54A0\u5470\u54BC\u54A2\u54BE\u5472\u54DE\u54B0\u57B5\u579E\u579F\u57A4\u578C\u5797\u579D\u579B\u5794\u5798\u578F\u5799\u57A5\u579A\u5795\u58F4\u590D\u5953\u59E1\u59DE\u59EE\u5A00\u59F1\u59DD\u59FA\u59FD\u59FC\u59F6\u59E4\u59F2\u59F7\u59DB\u59E9\u59F3\u59F5\u59E0\u59FE\u59F4\u59ED\u5BA8\u5C4C\u5CD0\u5CD8\u5CCC\u5CD7\u5CCB\u5CDB\"],\n[\"cea1\",\"\u5CDE\u5CDA\u5CC9\u5CC7\u5CCA\u5CD6\u5CD3\u5CD4\u5CCF\u5CC8\u5CC6\u5CCE\u5CDF\u5CF8\u5DF9\u5E21\u5E22\u5E23\u5E20\u5E24\u5EB0\u5EA4\u5EA2\u5E9B\u5EA3\u5EA5\u5F07\u5F2E\u5F56\u5F86\u6037\u6039\u6054\u6072\u605E\u6045\u6053\u6047\u6049\u605B\u604C\u6040\u6042\u605F\u6024\u6044\u6058\u6066\u606E\u6242\u6243\u62CF\u630D\u630B\u62F5\u630E\u6303\u62EB\u62F9\u630F\u630C\u62F8\u62F6\u6300\u6313\u6314\u62FA\u6315\u62FB\u62F0\u6541\u6543\u65AA\u65BF\u6636\u6621\u6632\u6635\u661C\u6626\u6622\u6633\u662B\u663A\u661D\u6634\u6639\u662E\u670F\u6710\u67C1\u67F2\u67C8\u67BA\"],\n[\"cf40\",\"\u67DC\u67BB\u67F8\u67D8\u67C0\u67B7\u67C5\u67EB\u67E4\u67DF\u67B5\u67CD\u67B3\u67F7\u67F6\u67EE\u67E3\u67C2\u67B9\u67CE\u67E7\u67F0\u67B2\u67FC\u67C6\u67ED\u67CC\u67AE\u67E6\u67DB\u67FA\u67C9\u67CA\u67C3\u67EA\u67CB\u6B28\u6B82\u6B84\u6BB6\u6BD6\u6BD8\u6BE0\u6C20\u6C21\u6D28\u6D34\u6D2D\u6D1F\u6D3C\u6D3F\u6D12\u6D0A\u6CDA\u6D33\u6D04\u6D19\u6D3A\u6D1A\u6D11\u6D00\u6D1D\u6D42\"],\n[\"cfa1\",\"\u6D01\u6D18\u6D37\u6D03\u6D0F\u6D40\u6D07\u6D20\u6D2C\u6D08\u6D22\u6D09\u6D10\u70B7\u709F\u70BE\u70B1\u70B0\u70A1\u70B4\u70B5\u70A9\u7241\u7249\u724A\u726C\u7270\u7273\u726E\u72CA\u72E4\u72E8\u72EB\u72DF\u72EA\u72E6\u72E3\u7385\u73CC\u73C2\u73C8\u73C5\u73B9\u73B6\u73B5\u73B4\u73EB\u73BF\u73C7\u73BE\u73C3\u73C6\u73B8\u73CB\u74EC\u74EE\u752E\u7547\u7548\u75A7\u75AA\u7679\u76C4\u7708\u7703\u7704\u7705\u770A\u76F7\u76FB\u76FA\u77E7\u77E8\u7806\u7811\u7812\u7805\u7810\u780F\u780E\u7809\u7803\u7813\u794A\u794C\u794B\u7945\u7944\u79D5\u79CD\u79CF\u79D6\u79CE\u7A80\"],\n[\"d040\",\"\u7A7E\u7AD1\u7B00\u7B01\u7C7A\u7C78\u7C79\u7C7F\u7C80\u7C81\u7D03\u7D08\u7D01\u7F58\u7F91\u7F8D\u7FBE\u8007\u800E\u800F\u8014\u8037\u80D8\u80C7\u80E0\u80D1\u80C8\u80C2\u80D0\u80C5\u80E3\u80D9\u80DC\u80CA\u80D5\u80C9\u80CF\u80D7\u80E6\u80CD\u81FF\u8221\u8294\u82D9\u82FE\u82F9\u8307\u82E8\u8300\u82D5\u833A\u82EB\u82D6\u82F4\u82EC\u82E1\u82F2\u82F5\u830C\u82FB\u82F6\u82F0\u82EA\"],\n[\"d0a1\",\"\u82E4\u82E0\u82FA\u82F3\u82ED\u8677\u8674\u867C\u8673\u8841\u884E\u8867\u886A\u8869\u89D3\u8A04\u8A07\u8D72\u8FE3\u8FE1\u8FEE\u8FE0\u90F1\u90BD\u90BF\u90D5\u90C5\u90BE\u90C7\u90CB\u90C8\u91D4\u91D3\u9654\u964F\u9651\u9653\u964A\u964E\u501E\u5005\u5007\u5013\u5022\u5030\u501B\u4FF5\u4FF4\u5033\u5037\u502C\u4FF6\u4FF7\u5017\u501C\u5020\u5027\u5035\u502F\u5031\u500E\u515A\u5194\u5193\u51CA\u51C4\u51C5\u51C8\u51CE\u5261\u525A\u5252\u525E\u525F\u5255\u5262\u52CD\u530E\u539E\u5526\u54E2\u5517\u5512\u54E7\u54F3\u54E4\u551A\u54FF\u5504\u5508\u54EB\u5511\u5505\u54F1\"],\n[\"d140\",\"\u550A\u54FB\u54F7\u54F8\u54E0\u550E\u5503\u550B\u5701\u5702\u57CC\u5832\u57D5\u57D2\u57BA\u57C6\u57BD\u57BC\u57B8\u57B6\u57BF\u57C7\u57D0\u57B9\u57C1\u590E\u594A\u5A19\u5A16\u5A2D\u5A2E\u5A15\u5A0F\u5A17\u5A0A\u5A1E\u5A33\u5B6C\u5BA7\u5BAD\u5BAC\u5C03\u5C56\u5C54\u5CEC\u5CFF\u5CEE\u5CF1\u5CF7\u5D00\u5CF9\u5E29\u5E28\u5EA8\u5EAE\u5EAA\u5EAC\u5F33\u5F30\u5F67\u605D\u605A\u6067\"],\n[\"d1a1\",\"\u6041\u60A2\u6088\u6080\u6092\u6081\u609D\u6083\u6095\u609B\u6097\u6087\u609C\u608E\u6219\u6246\u62F2\u6310\u6356\u632C\u6344\u6345\u6336\u6343\u63E4\u6339\u634B\u634A\u633C\u6329\u6341\u6334\u6358\u6354\u6359\u632D\u6347\u6333\u635A\u6351\u6338\u6357\u6340\u6348\u654A\u6546\u65C6\u65C3\u65C4\u65C2\u664A\u665F\u6647\u6651\u6712\u6713\u681F\u681A\u6849\u6832\u6833\u683B\u684B\u684F\u6816\u6831\u681C\u6835\u682B\u682D\u682F\u684E\u6844\u6834\u681D\u6812\u6814\u6826\u6828\u682E\u684D\u683A\u6825\u6820\u6B2C\u6B2F\u6B2D\u6B31\u6B34\u6B6D\u8082\u6B88\u6BE6\u6BE4\"],\n[\"d240\",\"\u6BE8\u6BE3\u6BE2\u6BE7\u6C25\u6D7A\u6D63\u6D64\u6D76\u6D0D\u6D61\u6D92\u6D58\u6D62\u6D6D\u6D6F\u6D91\u6D8D\u6DEF\u6D7F\u6D86\u6D5E\u6D67\u6D60\u6D97\u6D70\u6D7C\u6D5F\u6D82\u6D98\u6D2F\u6D68\u6D8B\u6D7E\u6D80\u6D84\u6D16\u6D83\u6D7B\u6D7D\u6D75\u6D90\u70DC\u70D3\u70D1\u70DD\u70CB\u7F39\u70E2\u70D7\u70D2\u70DE\u70E0\u70D4\u70CD\u70C5\u70C6\u70C7\u70DA\u70CE\u70E1\u7242\u7278\"],\n[\"d2a1\",\"\u7277\u7276\u7300\u72FA\u72F4\u72FE\u72F6\u72F3\u72FB\u7301\u73D3\u73D9\u73E5\u73D6\u73BC\u73E7\u73E3\u73E9\u73DC\u73D2\u73DB\u73D4\u73DD\u73DA\u73D7\u73D8\u73E8\u74DE\u74DF\u74F4\u74F5\u7521\u755B\u755F\u75B0\u75C1\u75BB\u75C4\u75C0\u75BF\u75B6\u75BA\u768A\u76C9\u771D\u771B\u7710\u7713\u7712\u7723\u7711\u7715\u7719\u771A\u7722\u7727\u7823\u782C\u7822\u7835\u782F\u7828\u782E\u782B\u7821\u7829\u7833\u782A\u7831\u7954\u795B\u794F\u795C\u7953\u7952\u7951\u79EB\u79EC\u79E0\u79EE\u79ED\u79EA\u79DC\u79DE\u79DD\u7A86\u7A89\u7A85\u7A8B\u7A8C\u7A8A\u7A87\u7AD8\u7B10\"],\n[\"d340\",\"\u7B04\u7B13\u7B05\u7B0F\u7B08\u7B0A\u7B0E\u7B09\u7B12\u7C84\u7C91\u7C8A\u7C8C\u7C88\u7C8D\u7C85\u7D1E\u7D1D\u7D11\u7D0E\u7D18\u7D16\u7D13\u7D1F\u7D12\u7D0F\u7D0C\u7F5C\u7F61\u7F5E\u7F60\u7F5D\u7F5B\u7F96\u7F92\u7FC3\u7FC2\u7FC0\u8016\u803E\u8039\u80FA\u80F2\u80F9\u80F5\u8101\u80FB\u8100\u8201\u822F\u8225\u8333\u832D\u8344\u8319\u8351\u8325\u8356\u833F\u8341\u8326\u831C\u8322\"],\n[\"d3a1\",\"\u8342\u834E\u831B\u832A\u8308\u833C\u834D\u8316\u8324\u8320\u8337\u832F\u8329\u8347\u8345\u834C\u8353\u831E\u832C\u834B\u8327\u8348\u8653\u8652\u86A2\u86A8\u8696\u868D\u8691\u869E\u8687\u8697\u8686\u868B\u869A\u8685\u86A5\u8699\u86A1\u86A7\u8695\u8698\u868E\u869D\u8690\u8694\u8843\u8844\u886D\u8875\u8876\u8872\u8880\u8871\u887F\u886F\u8883\u887E\u8874\u887C\u8A12\u8C47\u8C57\u8C7B\u8CA4\u8CA3\u8D76\u8D78\u8DB5\u8DB7\u8DB6\u8ED1\u8ED3\u8FFE\u8FF5\u9002\u8FFF\u8FFB\u9004\u8FFC\u8FF6\u90D6\u90E0\u90D9\u90DA\u90E3\u90DF\u90E5\u90D8\u90DB\u90D7\u90DC\u90E4\u9150\"],\n[\"d440\",\"\u914E\u914F\u91D5\u91E2\u91DA\u965C\u965F\u96BC\u98E3\u9ADF\u9B2F\u4E7F\u5070\u506A\u5061\u505E\u5060\u5053\u504B\u505D\u5072\u5048\u504D\u5041\u505B\u504A\u5062\u5015\u5045\u505F\u5069\u506B\u5063\u5064\u5046\u5040\u506E\u5073\u5057\u5051\u51D0\u526B\u526D\u526C\u526E\u52D6\u52D3\u532D\u539C\u5575\u5576\u553C\u554D\u5550\u5534\u552A\u5551\u5562\u5536\u5535\u5530\u5552\u5545\"],\n[\"d4a1\",\"\u550C\u5532\u5565\u554E\u5539\u5548\u552D\u553B\u5540\u554B\u570A\u5707\u57FB\u5814\u57E2\u57F6\u57DC\u57F4\u5800\u57ED\u57FD\u5808\u57F8\u580B\u57F3\u57CF\u5807\u57EE\u57E3\u57F2\u57E5\u57EC\u57E1\u580E\u57FC\u5810\u57E7\u5801\u580C\u57F1\u57E9\u57F0\u580D\u5804\u595C\u5A60\u5A58\u5A55\u5A67\u5A5E\u5A38\u5A35\u5A6D\u5A50\u5A5F\u5A65\u5A6C\u5A53\u5A64\u5A57\u5A43\u5A5D\u5A52\u5A44\u5A5B\u5A48\u5A8E\u5A3E\u5A4D\u5A39\u5A4C\u5A70\u5A69\u5A47\u5A51\u5A56\u5A42\u5A5C\u5B72\u5B6E\u5BC1\u5BC0\u5C59\u5D1E\u5D0B\u5D1D\u5D1A\u5D20\u5D0C\u5D28\u5D0D\u5D26\u5D25\u5D0F\"],\n[\"d540\",\"\u5D30\u5D12\u5D23\u5D1F\u5D2E\u5E3E\u5E34\u5EB1\u5EB4\u5EB9\u5EB2\u5EB3\u5F36\u5F38\u5F9B\u5F96\u5F9F\u608A\u6090\u6086\u60BE\u60B0\u60BA\u60D3\u60D4\u60CF\u60E4\u60D9\u60DD\u60C8\u60B1\u60DB\u60B7\u60CA\u60BF\u60C3\u60CD\u60C0\u6332\u6365\u638A\u6382\u637D\u63BD\u639E\u63AD\u639D\u6397\u63AB\u638E\u636F\u6387\u6390\u636E\u63AF\u6375\u639C\u636D\u63AE\u637C\u63A4\u633B\u639F\"],\n[\"d5a1\",\"\u6378\u6385\u6381\u6391\u638D\u6370\u6553\u65CD\u6665\u6661\u665B\u6659\u665C\u6662\u6718\u6879\u6887\u6890\u689C\u686D\u686E\u68AE\u68AB\u6956\u686F\u68A3\u68AC\u68A9\u6875\u6874\u68B2\u688F\u6877\u6892\u687C\u686B\u6872\u68AA\u6880\u6871\u687E\u689B\u6896\u688B\u68A0\u6889\u68A4\u6878\u687B\u6891\u688C\u688A\u687D\u6B36\u6B33\u6B37\u6B38\u6B91\u6B8F\u6B8D\u6B8E\u6B8C\u6C2A\u6DC0\u6DAB\u6DB4\u6DB3\u6E74\u6DAC\u6DE9\u6DE2\u6DB7\u6DF6\u6DD4\u6E00\u6DC8\u6DE0\u6DDF\u6DD6\u6DBE\u6DE5\u6DDC\u6DDD\u6DDB\u6DF4\u6DCA\u6DBD\u6DED\u6DF0\u6DBA\u6DD5\u6DC2\u6DCF\u6DC9\"],\n[\"d640\",\"\u6DD0\u6DF2\u6DD3\u6DFD\u6DD7\u6DCD\u6DE3\u6DBB\u70FA\u710D\u70F7\u7117\u70F4\u710C\u70F0\u7104\u70F3\u7110\u70FC\u70FF\u7106\u7113\u7100\u70F8\u70F6\u710B\u7102\u710E\u727E\u727B\u727C\u727F\u731D\u7317\u7307\u7311\u7318\u730A\u7308\u72FF\u730F\u731E\u7388\u73F6\u73F8\u73F5\u7404\u7401\u73FD\u7407\u7400\u73FA\u73FC\u73FF\u740C\u740B\u73F4\u7408\u7564\u7563\u75CE\u75D2\u75CF\"],\n[\"d6a1\",\"\u75CB\u75CC\u75D1\u75D0\u768F\u7689\u76D3\u7739\u772F\u772D\u7731\u7732\u7734\u7733\u773D\u7725\u773B\u7735\u7848\u7852\u7849\u784D\u784A\u784C\u7826\u7845\u7850\u7964\u7967\u7969\u796A\u7963\u796B\u7961\u79BB\u79FA\u79F8\u79F6\u79F7\u7A8F\u7A94\u7A90\u7B35\u7B47\u7B34\u7B25\u7B30\u7B22\u7B24\u7B33\u7B18\u7B2A\u7B1D\u7B31\u7B2B\u7B2D\u7B2F\u7B32\u7B38\u7B1A\u7B23\u7C94\u7C98\u7C96\u7CA3\u7D35\u7D3D\u7D38\u7D36\u7D3A\u7D45\u7D2C\u7D29\u7D41\u7D47\u7D3E\u7D3F\u7D4A\u7D3B\u7D28\u7F63\u7F95\u7F9C\u7F9D\u7F9B\u7FCA\u7FCB\u7FCD\u7FD0\u7FD1\u7FC7\u7FCF\u7FC9\u801F\"],\n[\"d740\",\"\u801E\u801B\u8047\u8043\u8048\u8118\u8125\u8119\u811B\u812D\u811F\u812C\u811E\u8121\u8115\u8127\u811D\u8122\u8211\u8238\u8233\u823A\u8234\u8232\u8274\u8390\u83A3\u83A8\u838D\u837A\u8373\u83A4\u8374\u838F\u8381\u8395\u8399\u8375\u8394\u83A9\u837D\u8383\u838C\u839D\u839B\u83AA\u838B\u837E\u83A5\u83AF\u8388\u8397\u83B0\u837F\u83A6\u8387\u83AE\u8376\u839A\u8659\u8656\u86BF\u86B7\"],\n[\"d7a1\",\"\u86C2\u86C1\u86C5\u86BA\u86B0\u86C8\u86B9\u86B3\u86B8\u86CC\u86B4\u86BB\u86BC\u86C3\u86BD\u86BE\u8852\u8889\u8895\u88A8\u88A2\u88AA\u889A\u8891\u88A1\u889F\u8898\u88A7\u8899\u889B\u8897\u88A4\u88AC\u888C\u8893\u888E\u8982\u89D6\u89D9\u89D5\u8A30\u8A27\u8A2C\u8A1E\u8C39\u8C3B\u8C5C\u8C5D\u8C7D\u8CA5\u8D7D\u8D7B\u8D79\u8DBC\u8DC2\u8DB9\u8DBF\u8DC1\u8ED8\u8EDE\u8EDD\u8EDC\u8ED7\u8EE0\u8EE1\u9024\u900B\u9011\u901C\u900C\u9021\u90EF\u90EA\u90F0\u90F4\u90F2\u90F3\u90D4\u90EB\u90EC\u90E9\u9156\u9158\u915A\u9153\u9155\u91EC\u91F4\u91F1\u91F3\u91F8\u91E4\u91F9\u91EA\"],\n[\"d840\",\"\u91EB\u91F7\u91E8\u91EE\u957A\u9586\u9588\u967C\u966D\u966B\u9671\u966F\u96BF\u976A\u9804\u98E5\u9997\u509B\u5095\u5094\u509E\u508B\u50A3\u5083\u508C\u508E\u509D\u5068\u509C\u5092\u5082\u5087\u515F\u51D4\u5312\u5311\u53A4\u53A7\u5591\u55A8\u55A5\u55AD\u5577\u5645\u55A2\u5593\u5588\u558F\u55B5\u5581\u55A3\u5592\u55A4\u557D\u558C\u55A6\u557F\u5595\u55A1\u558E\u570C\u5829\u5837\"],\n[\"d8a1\",\"\u5819\u581E\u5827\u5823\u5828\u57F5\u5848\u5825\u581C\u581B\u5833\u583F\u5836\u582E\u5839\u5838\u582D\u582C\u583B\u5961\u5AAF\u5A94\u5A9F\u5A7A\u5AA2\u5A9E\u5A78\u5AA6\u5A7C\u5AA5\u5AAC\u5A95\u5AAE\u5A37\u5A84\u5A8A\u5A97\u5A83\u5A8B\u5AA9\u5A7B\u5A7D\u5A8C\u5A9C\u5A8F\u5A93\u5A9D\u5BEA\u5BCD\u5BCB\u5BD4\u5BD1\u5BCA\u5BCE\u5C0C\u5C30\u5D37\u5D43\u5D6B\u5D41\u5D4B\u5D3F\u5D35\u5D51\u5D4E\u5D55\u5D33\u5D3A\u5D52\u5D3D\u5D31\u5D59\u5D42\u5D39\u5D49\u5D38\u5D3C\u5D32\u5D36\u5D40\u5D45\u5E44\u5E41\u5F58\u5FA6\u5FA5\u5FAB\u60C9\u60B9\u60CC\u60E2\u60CE\u60C4\u6114\"],\n[\"d940\",\"\u60F2\u610A\u6116\u6105\u60F5\u6113\u60F8\u60FC\u60FE\u60C1\u6103\u6118\u611D\u6110\u60FF\u6104\u610B\u624A\u6394\u63B1\u63B0\u63CE\u63E5\u63E8\u63EF\u63C3\u649D\u63F3\u63CA\u63E0\u63F6\u63D5\u63F2\u63F5\u6461\u63DF\u63BE\u63DD\u63DC\u63C4\u63D8\u63D3\u63C2\u63C7\u63CC\u63CB\u63C8\u63F0\u63D7\u63D9\u6532\u6567\u656A\u6564\u655C\u6568\u6565\u658C\u659D\u659E\u65AE\u65D0\u65D2\"],\n[\"d9a1\",\"\u667C\u666C\u667B\u6680\u6671\u6679\u666A\u6672\u6701\u690C\u68D3\u6904\u68DC\u692A\u68EC\u68EA\u68F1\u690F\u68D6\u68F7\u68EB\u68E4\u68F6\u6913\u6910\u68F3\u68E1\u6907\u68CC\u6908\u6970\u68B4\u6911\u68EF\u68C6\u6914\u68F8\u68D0\u68FD\u68FC\u68E8\u690B\u690A\u6917\u68CE\u68C8\u68DD\u68DE\u68E6\u68F4\u68D1\u6906\u68D4\u68E9\u6915\u6925\u68C7\u6B39\u6B3B\u6B3F\u6B3C\u6B94\u6B97\u6B99\u6B95\u6BBD\u6BF0\u6BF2\u6BF3\u6C30\u6DFC\u6E46\u6E47\u6E1F\u6E49\u6E88\u6E3C\u6E3D\u6E45\u6E62\u6E2B\u6E3F\u6E41\u6E5D\u6E73\u6E1C\u6E33\u6E4B\u6E40\u6E51\u6E3B\u6E03\u6E2E\u6E5E\"],\n[\"da40\",\"\u6E68\u6E5C\u6E61\u6E31\u6E28\u6E60\u6E71\u6E6B\u6E39\u6E22\u6E30\u6E53\u6E65\u6E27\u6E78\u6E64\u6E77\u6E55\u6E79\u6E52\u6E66\u6E35\u6E36\u6E5A\u7120\u711E\u712F\u70FB\u712E\u7131\u7123\u7125\u7122\u7132\u711F\u7128\u713A\u711B\u724B\u725A\u7288\u7289\u7286\u7285\u728B\u7312\u730B\u7330\u7322\u7331\u7333\u7327\u7332\u732D\u7326\u7323\u7335\u730C\u742E\u742C\u7430\u742B\u7416\"],\n[\"daa1\",\"\u741A\u7421\u742D\u7431\u7424\u7423\u741D\u7429\u7420\u7432\u74FB\u752F\u756F\u756C\u75E7\u75DA\u75E1\u75E6\u75DD\u75DF\u75E4\u75D7\u7695\u7692\u76DA\u7746\u7747\u7744\u774D\u7745\u774A\u774E\u774B\u774C\u77DE\u77EC\u7860\u7864\u7865\u785C\u786D\u7871\u786A\u786E\u7870\u7869\u7868\u785E\u7862\u7974\u7973\u7972\u7970\u7A02\u7A0A\u7A03\u7A0C\u7A04\u7A99\u7AE6\u7AE4\u7B4A\u7B3B\u7B44\u7B48\u7B4C\u7B4E\u7B40\u7B58\u7B45\u7CA2\u7C9E\u7CA8\u7CA1\u7D58\u7D6F\u7D63\u7D53\u7D56\u7D67\u7D6A\u7D4F\u7D6D\u7D5C\u7D6B\u7D52\u7D54\u7D69\u7D51\u7D5F\u7D4E\u7F3E\u7F3F\u7F65\"],\n[\"db40\",\"\u7F66\u7FA2\u7FA0\u7FA1\u7FD7\u8051\u804F\u8050\u80FE\u80D4\u8143\u814A\u8152\u814F\u8147\u813D\u814D\u813A\u81E6\u81EE\u81F7\u81F8\u81F9\u8204\u823C\u823D\u823F\u8275\u833B\u83CF\u83F9\u8423\u83C0\u83E8\u8412\u83E7\u83E4\u83FC\u83F6\u8410\u83C6\u83C8\u83EB\u83E3\u83BF\u8401\u83DD\u83E5\u83D8\u83FF\u83E1\u83CB\u83CE\u83D6\u83F5\u83C9\u8409\u840F\u83DE\u8411\u8406\u83C2\u83F3\"],\n[\"dba1\",\"\u83D5\u83FA\u83C7\u83D1\u83EA\u8413\u83C3\u83EC\u83EE\u83C4\u83FB\u83D7\u83E2\u841B\u83DB\u83FE\u86D8\u86E2\u86E6\u86D3\u86E3\u86DA\u86EA\u86DD\u86EB\u86DC\u86EC\u86E9\u86D7\u86E8\u86D1\u8848\u8856\u8855\u88BA\u88D7\u88B9\u88B8\u88C0\u88BE\u88B6\u88BC\u88B7\u88BD\u88B2\u8901\u88C9\u8995\u8998\u8997\u89DD\u89DA\u89DB\u8A4E\u8A4D\u8A39\u8A59\u8A40\u8A57\u8A58\u8A44\u8A45\u8A52\u8A48\u8A51\u8A4A\u8A4C\u8A4F\u8C5F\u8C81\u8C80\u8CBA\u8CBE\u8CB0\u8CB9\u8CB5\u8D84\u8D80\u8D89\u8DD8\u8DD3\u8DCD\u8DC7\u8DD6\u8DDC\u8DCF\u8DD5\u8DD9\u8DC8\u8DD7\u8DC5\u8EEF\u8EF7\u8EFA\"],\n[\"dc40\",\"\u8EF9\u8EE6\u8EEE\u8EE5\u8EF5\u8EE7\u8EE8\u8EF6\u8EEB\u8EF1\u8EEC\u8EF4\u8EE9\u902D\u9034\u902F\u9106\u912C\u9104\u90FF\u90FC\u9108\u90F9\u90FB\u9101\u9100\u9107\u9105\u9103\u9161\u9164\u915F\u9162\u9160\u9201\u920A\u9225\u9203\u921A\u9226\u920F\u920C\u9200\u9212\u91FF\u91FD\u9206\u9204\u9227\u9202\u921C\u9224\u9219\u9217\u9205\u9216\u957B\u958D\u958C\u9590\u9687\u967E\u9688\"],\n[\"dca1\",\"\u9689\u9683\u9680\u96C2\u96C8\u96C3\u96F1\u96F0\u976C\u9770\u976E\u9807\u98A9\u98EB\u9CE6\u9EF9\u4E83\u4E84\u4EB6\u50BD\u50BF\u50C6\u50AE\u50C4\u50CA\u50B4\u50C8\u50C2\u50B0\u50C1\u50BA\u50B1\u50CB\u50C9\u50B6\u50B8\u51D7\u527A\u5278\u527B\u527C\u55C3\u55DB\u55CC\u55D0\u55CB\u55CA\u55DD\u55C0\u55D4\u55C4\u55E9\u55BF\u55D2\u558D\u55CF\u55D5\u55E2\u55D6\u55C8\u55F2\u55CD\u55D9\u55C2\u5714\u5853\u5868\u5864\u584F\u584D\u5849\u586F\u5855\u584E\u585D\u5859\u5865\u585B\u583D\u5863\u5871\u58FC\u5AC7\u5AC4\u5ACB\u5ABA\u5AB8\u5AB1\u5AB5\u5AB0\u5ABF\u5AC8\u5ABB\u5AC6\"],\n[\"dd40\",\"\u5AB7\u5AC0\u5ACA\u5AB4\u5AB6\u5ACD\u5AB9\u5A90\u5BD6\u5BD8\u5BD9\u5C1F\u5C33\u5D71\u5D63\u5D4A\u5D65\u5D72\u5D6C\u5D5E\u5D68\u5D67\u5D62\u5DF0\u5E4F\u5E4E\u5E4A\u5E4D\u5E4B\u5EC5\u5ECC\u5EC6\u5ECB\u5EC7\u5F40\u5FAF\u5FAD\u60F7\u6149\u614A\u612B\u6145\u6136\u6132\u612E\u6146\u612F\u614F\u6129\u6140\u6220\u9168\u6223\u6225\u6224\u63C5\u63F1\u63EB\u6410\u6412\u6409\u6420\u6424\"],\n[\"dda1\",\"\u6433\u6443\u641F\u6415\u6418\u6439\u6437\u6422\u6423\u640C\u6426\u6430\u6428\u6441\u6435\u642F\u640A\u641A\u6440\u6425\u6427\u640B\u63E7\u641B\u642E\u6421\u640E\u656F\u6592\u65D3\u6686\u668C\u6695\u6690\u668B\u668A\u6699\u6694\u6678\u6720\u6966\u695F\u6938\u694E\u6962\u6971\u693F\u6945\u696A\u6939\u6942\u6957\u6959\u697A\u6948\u6949\u6935\u696C\u6933\u693D\u6965\u68F0\u6978\u6934\u6969\u6940\u696F\u6944\u6976\u6958\u6941\u6974\u694C\u693B\u694B\u6937\u695C\u694F\u6951\u6932\u6952\u692F\u697B\u693C\u6B46\u6B45\u6B43\u6B42\u6B48\u6B41\u6B9B\uFA0D\u6BFB\u6BFC\"],\n[\"de40\",\"\u6BF9\u6BF7\u6BF8\u6E9B\u6ED6\u6EC8\u6E8F\u6EC0\u6E9F\u6E93\u6E94\u6EA0\u6EB1\u6EB9\u6EC6\u6ED2\u6EBD\u6EC1\u6E9E\u6EC9\u6EB7\u6EB0\u6ECD\u6EA6\u6ECF\u6EB2\u6EBE\u6EC3\u6EDC\u6ED8\u6E99\u6E92\u6E8E\u6E8D\u6EA4\u6EA1\u6EBF\u6EB3\u6ED0\u6ECA\u6E97\u6EAE\u6EA3\u7147\u7154\u7152\u7163\u7160\u7141\u715D\u7162\u7172\u7178\u716A\u7161\u7142\u7158\u7143\u714B\u7170\u715F\u7150\u7153\"],\n[\"dea1\",\"\u7144\u714D\u715A\u724F\u728D\u728C\u7291\u7290\u728E\u733C\u7342\u733B\u733A\u7340\u734A\u7349\u7444\u744A\u744B\u7452\u7451\u7457\u7440\u744F\u7450\u744E\u7442\u7446\u744D\u7454\u74E1\u74FF\u74FE\u74FD\u751D\u7579\u7577\u6983\u75EF\u760F\u7603\u75F7\u75FE\u75FC\u75F9\u75F8\u7610\u75FB\u75F6\u75ED\u75F5\u75FD\u7699\u76B5\u76DD\u7755\u775F\u7760\u7752\u7756\u775A\u7769\u7767\u7754\u7759\u776D\u77E0\u7887\u789A\u7894\u788F\u7884\u7895\u7885\u7886\u78A1\u7883\u7879\u7899\u7880\u7896\u787B\u797C\u7982\u797D\u7979\u7A11\u7A18\u7A19\u7A12\u7A17\u7A15\u7A22\u7A13\"],\n[\"df40\",\"\u7A1B\u7A10\u7AA3\u7AA2\u7A9E\u7AEB\u7B66\u7B64\u7B6D\u7B74\u7B69\u7B72\u7B65\u7B73\u7B71\u7B70\u7B61\u7B78\u7B76\u7B63\u7CB2\u7CB4\u7CAF\u7D88\u7D86\u7D80\u7D8D\u7D7F\u7D85\u7D7A\u7D8E\u7D7B\u7D83\u7D7C\u7D8C\u7D94\u7D84\u7D7D\u7D92\u7F6D\u7F6B\u7F67\u7F68\u7F6C\u7FA6\u7FA5\u7FA7\u7FDB\u7FDC\u8021\u8164\u8160\u8177\u815C\u8169\u815B\u8162\u8172\u6721\u815E\u8176\u8167\u816F\"],\n[\"dfa1\",\"\u8144\u8161\u821D\u8249\u8244\u8240\u8242\u8245\u84F1\u843F\u8456\u8476\u8479\u848F\u848D\u8465\u8451\u8440\u8486\u8467\u8430\u844D\u847D\u845A\u8459\u8474\u8473\u845D\u8507\u845E\u8437\u843A\u8434\u847A\u8443\u8478\u8432\u8445\u8429\u83D9\u844B\u842F\u8442\u842D\u845F\u8470\u8439\u844E\u844C\u8452\u846F\u84C5\u848E\u843B\u8447\u8436\u8433\u8468\u847E\u8444\u842B\u8460\u8454\u846E\u8450\u870B\u8704\u86F7\u870C\u86FA\u86D6\u86F5\u874D\u86F8\u870E\u8709\u8701\u86F6\u870D\u8705\u88D6\u88CB\u88CD\u88CE\u88DE\u88DB\u88DA\u88CC\u88D0\u8985\u899B\u89DF\u89E5\u89E4\"],\n[\"e040\",\"\u89E1\u89E0\u89E2\u89DC\u89E6\u8A76\u8A86\u8A7F\u8A61\u8A3F\u8A77\u8A82\u8A84\u8A75\u8A83\u8A81\u8A74\u8A7A\u8C3C\u8C4B\u8C4A\u8C65\u8C64\u8C66\u8C86\u8C84\u8C85\u8CCC\u8D68\u8D69\u8D91\u8D8C\u8D8E\u8D8F\u8D8D\u8D93\u8D94\u8D90\u8D92\u8DF0\u8DE0\u8DEC\u8DF1\u8DEE\u8DD0\u8DE9\u8DE3\u8DE2\u8DE7\u8DF2\u8DEB\u8DF4\u8F06\u8EFF\u8F01\u8F00\u8F05\u8F07\u8F08\u8F02\u8F0B\u9052\u903F\"],\n[\"e0a1\",\"\u9044\u9049\u903D\u9110\u910D\u910F\u9111\u9116\u9114\u910B\u910E\u916E\u916F\u9248\u9252\u9230\u923A\u9266\u9233\u9265\u925E\u9283\u922E\u924A\u9246\u926D\u926C\u924F\u9260\u9267\u926F\u9236\u9261\u9270\u9231\u9254\u9263\u9250\u9272\u924E\u9253\u924C\u9256\u9232\u959F\u959C\u959E\u959B\u9692\u9693\u9691\u9697\u96CE\u96FA\u96FD\u96F8\u96F5\u9773\u9777\u9778\u9772\u980F\u980D\u980E\u98AC\u98F6\u98F9\u99AF\u99B2\u99B0\u99B5\u9AAD\u9AAB\u9B5B\u9CEA\u9CED\u9CE7\u9E80\u9EFD\u50E6\u50D4\u50D7\u50E8\u50F3\u50DB\u50EA\u50DD\u50E4\u50D3\u50EC\u50F0\u50EF\u50E3\u50E0\"],\n[\"e140\",\"\u51D8\u5280\u5281\u52E9\u52EB\u5330\u53AC\u5627\u5615\u560C\u5612\u55FC\u560F\u561C\u5601\u5613\u5602\u55FA\u561D\u5604\u55FF\u55F9\u5889\u587C\u5890\u5898\u5886\u5881\u587F\u5874\u588B\u587A\u5887\u5891\u588E\u5876\u5882\u5888\u587B\u5894\u588F\u58FE\u596B\u5ADC\u5AEE\u5AE5\u5AD5\u5AEA\u5ADA\u5AED\u5AEB\u5AF3\u5AE2\u5AE0\u5ADB\u5AEC\u5ADE\u5ADD\u5AD9\u5AE8\u5ADF\u5B77\u5BE0\"],\n[\"e1a1\",\"\u5BE3\u5C63\u5D82\u5D80\u5D7D\u5D86\u5D7A\u5D81\u5D77\u5D8A\u5D89\u5D88\u5D7E\u5D7C\u5D8D\u5D79\u5D7F\u5E58\u5E59\u5E53\u5ED8\u5ED1\u5ED7\u5ECE\u5EDC\u5ED5\u5ED9\u5ED2\u5ED4\u5F44\u5F43\u5F6F\u5FB6\u612C\u6128\u6141\u615E\u6171\u6173\u6152\u6153\u6172\u616C\u6180\u6174\u6154\u617A\u615B\u6165\u613B\u616A\u6161\u6156\u6229\u6227\u622B\u642B\u644D\u645B\u645D\u6474\u6476\u6472\u6473\u647D\u6475\u6466\u64A6\u644E\u6482\u645E\u645C\u644B\u6453\u6460\u6450\u647F\u643F\u646C\u646B\u6459\u6465\u6477\u6573\u65A0\u66A1\u66A0\u669F\u6705\u6704\u6722\u69B1\u69B6\u69C9\"],\n[\"e240\",\"\u69A0\u69CE\u6996\u69B0\u69AC\u69BC\u6991\u6999\u698E\u69A7\u698D\u69A9\u69BE\u69AF\u69BF\u69C4\u69BD\u69A4\u69D4\u69B9\u69CA\u699A\u69CF\u69B3\u6993\u69AA\u69A1\u699E\u69D9\u6997\u6990\u69C2\u69B5\u69A5\u69C6\u6B4A\u6B4D\u6B4B\u6B9E\u6B9F\u6BA0\u6BC3\u6BC4\u6BFE\u6ECE\u6EF5\u6EF1\u6F03\u6F25\u6EF8\u6F37\u6EFB\u6F2E\u6F09\u6F4E\u6F19\u6F1A\u6F27\u6F18\u6F3B\u6F12\u6EED\u6F0A\"],\n[\"e2a1\",\"\u6F36\u6F73\u6EF9\u6EEE\u6F2D\u6F40\u6F30\u6F3C\u6F35\u6EEB\u6F07\u6F0E\u6F43\u6F05\u6EFD\u6EF6\u6F39\u6F1C\u6EFC\u6F3A\u6F1F\u6F0D\u6F1E\u6F08\u6F21\u7187\u7190\u7189\u7180\u7185\u7182\u718F\u717B\u7186\u7181\u7197\u7244\u7253\u7297\u7295\u7293\u7343\u734D\u7351\u734C\u7462\u7473\u7471\u7475\u7472\u7467\u746E\u7500\u7502\u7503\u757D\u7590\u7616\u7608\u760C\u7615\u7611\u760A\u7614\u76B8\u7781\u777C\u7785\u7782\u776E\u7780\u776F\u777E\u7783\u78B2\u78AA\u78B4\u78AD\u78A8\u787E\u78AB\u789E\u78A5\u78A0\u78AC\u78A2\u78A4\u7998\u798A\u798B\u7996\u7995\u7994\u7993\"],\n[\"e340\",\"\u7997\u7988\u7992\u7990\u7A2B\u7A4A\u7A30\u7A2F\u7A28\u7A26\u7AA8\u7AAB\u7AAC\u7AEE\u7B88\u7B9C\u7B8A\u7B91\u7B90\u7B96\u7B8D\u7B8C\u7B9B\u7B8E\u7B85\u7B98\u5284\u7B99\u7BA4\u7B82\u7CBB\u7CBF\u7CBC\u7CBA\u7DA7\u7DB7\u7DC2\u7DA3\u7DAA\u7DC1\u7DC0\u7DC5\u7D9D\u7DCE\u7DC4\u7DC6\u7DCB\u7DCC\u7DAF\u7DB9\u7D96\u7DBC\u7D9F\u7DA6\u7DAE\u7DA9\u7DA1\u7DC9\u7F73\u7FE2\u7FE3\u7FE5\u7FDE\"],\n[\"e3a1\",\"\u8024\u805D\u805C\u8189\u8186\u8183\u8187\u818D\u818C\u818B\u8215\u8497\u84A4\u84A1\u849F\u84BA\u84CE\u84C2\u84AC\u84AE\u84AB\u84B9\u84B4\u84C1\u84CD\u84AA\u849A\u84B1\u84D0\u849D\u84A7\u84BB\u84A2\u8494\u84C7\u84CC\u849B\u84A9\u84AF\u84A8\u84D6\u8498\u84B6\u84CF\u84A0\u84D7\u84D4\u84D2\u84DB\u84B0\u8491\u8661\u8733\u8723\u8728\u876B\u8740\u872E\u871E\u8721\u8719\u871B\u8743\u872C\u8741\u873E\u8746\u8720\u8732\u872A\u872D\u873C\u8712\u873A\u8731\u8735\u8742\u8726\u8727\u8738\u8724\u871A\u8730\u8711\u88F7\u88E7\u88F1\u88F2\u88FA\u88FE\u88EE\u88FC\u88F6\u88FB\"],\n[\"e440\",\"\u88F0\u88EC\u88EB\u899D\u89A1\u899F\u899E\u89E9\u89EB\u89E8\u8AAB\u8A99\u8A8B\u8A92\u8A8F\u8A96\u8C3D\u8C68\u8C69\u8CD5\u8CCF\u8CD7\u8D96\u8E09\u8E02\u8DFF\u8E0D\u8DFD\u8E0A\u8E03\u8E07\u8E06\u8E05\u8DFE\u8E00\u8E04\u8F10\u8F11\u8F0E\u8F0D\u9123\u911C\u9120\u9122\u911F\u911D\u911A\u9124\u9121\u911B\u917A\u9172\u9179\u9173\u92A5\u92A4\u9276\u929B\u927A\u92A0\u9294\u92AA\u928D\"],\n[\"e4a1\",\"\u92A6\u929A\u92AB\u9279\u9297\u927F\u92A3\u92EE\u928E\u9282\u9295\u92A2\u927D\u9288\u92A1\u928A\u9286\u928C\u9299\u92A7\u927E\u9287\u92A9\u929D\u928B\u922D\u969E\u96A1\u96FF\u9758\u977D\u977A\u977E\u9783\u9780\u9782\u977B\u9784\u9781\u977F\u97CE\u97CD\u9816\u98AD\u98AE\u9902\u9900\u9907\u999D\u999C\u99C3\u99B9\u99BB\u99BA\u99C2\u99BD\u99C7\u9AB1\u9AE3\u9AE7\u9B3E\u9B3F\u9B60\u9B61\u9B5F\u9CF1\u9CF2\u9CF5\u9EA7\u50FF\u5103\u5130\u50F8\u5106\u5107\u50F6\u50FE\u510B\u510C\u50FD\u510A\u528B\u528C\u52F1\u52EF\u5648\u5642\u564C\u5635\u5641\u564A\u5649\u5646\u5658\"],\n[\"e540\",\"\u565A\u5640\u5633\u563D\u562C\u563E\u5638\u562A\u563A\u571A\u58AB\u589D\u58B1\u58A0\u58A3\u58AF\u58AC\u58A5\u58A1\u58FF\u5AFF\u5AF4\u5AFD\u5AF7\u5AF6\u5B03\u5AF8\u5B02\u5AF9\u5B01\u5B07\u5B05\u5B0F\u5C67\u5D99\u5D97\u5D9F\u5D92\u5DA2\u5D93\u5D95\u5DA0\u5D9C\u5DA1\u5D9A\u5D9E\u5E69\u5E5D\u5E60\u5E5C\u7DF3\u5EDB\u5EDE\u5EE1\u5F49\u5FB2\u618B\u6183\u6179\u61B1\u61B0\u61A2\u6189\"],\n[\"e5a1\",\"\u619B\u6193\u61AF\u61AD\u619F\u6192\u61AA\u61A1\u618D\u6166\u61B3\u622D\u646E\u6470\u6496\u64A0\u6485\u6497\u649C\u648F\u648B\u648A\u648C\u64A3\u649F\u6468\u64B1\u6498\u6576\u657A\u6579\u657B\u65B2\u65B3\u66B5\u66B0\u66A9\u66B2\u66B7\u66AA\u66AF\u6A00\u6A06\u6A17\u69E5\u69F8\u6A15\u69F1\u69E4\u6A20\u69FF\u69EC\u69E2\u6A1B\u6A1D\u69FE\u6A27\u69F2\u69EE\u6A14\u69F7\u69E7\u6A40\u6A08\u69E6\u69FB\u6A0D\u69FC\u69EB\u6A09\u6A04\u6A18\u6A25\u6A0F\u69F6\u6A26\u6A07\u69F4\u6A16\u6B51\u6BA5\u6BA3\u6BA2\u6BA6\u6C01\u6C00\u6BFF\u6C02\u6F41\u6F26\u6F7E\u6F87\u6FC6\u6F92\"],\n[\"e640\",\"\u6F8D\u6F89\u6F8C\u6F62\u6F4F\u6F85\u6F5A\u6F96\u6F76\u6F6C\u6F82\u6F55\u6F72\u6F52\u6F50\u6F57\u6F94\u6F93\u6F5D\u6F00\u6F61\u6F6B\u6F7D\u6F67\u6F90\u6F53\u6F8B\u6F69\u6F7F\u6F95\u6F63\u6F77\u6F6A\u6F7B\u71B2\u71AF\u719B\u71B0\u71A0\u719A\u71A9\u71B5\u719D\u71A5\u719E\u71A4\u71A1\u71AA\u719C\u71A7\u71B3\u7298\u729A\u7358\u7352\u735E\u735F\u7360\u735D\u735B\u7361\u735A\u7359\"],\n[\"e6a1\",\"\u7362\u7487\u7489\u748A\u7486\u7481\u747D\u7485\u7488\u747C\u7479\u7508\u7507\u757E\u7625\u761E\u7619\u761D\u761C\u7623\u761A\u7628\u761B\u769C\u769D\u769E\u769B\u778D\u778F\u7789\u7788\u78CD\u78BB\u78CF\u78CC\u78D1\u78CE\u78D4\u78C8\u78C3\u78C4\u78C9\u799A\u79A1\u79A0\u799C\u79A2\u799B\u6B76\u7A39\u7AB2\u7AB4\u7AB3\u7BB7\u7BCB\u7BBE\u7BAC\u7BCE\u7BAF\u7BB9\u7BCA\u7BB5\u7CC5\u7CC8\u7CCC\u7CCB\u7DF7\u7DDB\u7DEA\u7DE7\u7DD7\u7DE1\u7E03\u7DFA\u7DE6\u7DF6\u7DF1\u7DF0\u7DEE\u7DDF\u7F76\u7FAC\u7FB0\u7FAD\u7FED\u7FEB\u7FEA\u7FEC\u7FE6\u7FE8\u8064\u8067\u81A3\u819F\"],\n[\"e740\",\"\u819E\u8195\u81A2\u8199\u8197\u8216\u824F\u8253\u8252\u8250\u824E\u8251\u8524\u853B\u850F\u8500\u8529\u850E\u8509\u850D\u851F\u850A\u8527\u851C\u84FB\u852B\u84FA\u8508\u850C\u84F4\u852A\u84F2\u8515\u84F7\u84EB\u84F3\u84FC\u8512\u84EA\u84E9\u8516\u84FE\u8528\u851D\u852E\u8502\u84FD\u851E\u84F6\u8531\u8526\u84E7\u84E8\u84F0\u84EF\u84F9\u8518\u8520\u8530\u850B\u8519\u852F\u8662\"],\n[\"e7a1\",\"\u8756\u8763\u8764\u8777\u87E1\u8773\u8758\u8754\u875B\u8752\u8761\u875A\u8751\u875E\u876D\u876A\u8750\u874E\u875F\u875D\u876F\u876C\u877A\u876E\u875C\u8765\u874F\u877B\u8775\u8762\u8767\u8769\u885A\u8905\u890C\u8914\u890B\u8917\u8918\u8919\u8906\u8916\u8911\u890E\u8909\u89A2\u89A4\u89A3\u89ED\u89F0\u89EC\u8ACF\u8AC6\u8AB8\u8AD3\u8AD1\u8AD4\u8AD5\u8ABB\u8AD7\u8ABE\u8AC0\u8AC5\u8AD8\u8AC3\u8ABA\u8ABD\u8AD9\u8C3E\u8C4D\u8C8F\u8CE5\u8CDF\u8CD9\u8CE8\u8CDA\u8CDD\u8CE7\u8DA0\u8D9C\u8DA1\u8D9B\u8E20\u8E23\u8E25\u8E24\u8E2E\u8E15\u8E1B\u8E16\u8E11\u8E19\u8E26\u8E27\"],\n[\"e840\",\"\u8E14\u8E12\u8E18\u8E13\u8E1C\u8E17\u8E1A\u8F2C\u8F24\u8F18\u8F1A\u8F20\u8F23\u8F16\u8F17\u9073\u9070\u906F\u9067\u906B\u912F\u912B\u9129\u912A\u9132\u9126\u912E\u9185\u9186\u918A\u9181\u9182\u9184\u9180\u92D0\u92C3\u92C4\u92C0\u92D9\u92B6\u92CF\u92F1\u92DF\u92D8\u92E9\u92D7\u92DD\u92CC\u92EF\u92C2\u92E8\u92CA\u92C8\u92CE\u92E6\u92CD\u92D5\u92C9\u92E0\u92DE\u92E7\u92D1\u92D3\"],\n[\"e8a1\",\"\u92B5\u92E1\u92C6\u92B4\u957C\u95AC\u95AB\u95AE\u95B0\u96A4\u96A2\u96D3\u9705\u9708\u9702\u975A\u978A\u978E\u9788\u97D0\u97CF\u981E\u981D\u9826\u9829\u9828\u9820\u981B\u9827\u98B2\u9908\u98FA\u9911\u9914\u9916\u9917\u9915\u99DC\u99CD\u99CF\u99D3\u99D4\u99CE\u99C9\u99D6\u99D8\u99CB\u99D7\u99CC\u9AB3\u9AEC\u9AEB\u9AF3\u9AF2\u9AF1\u9B46\u9B43\u9B67\u9B74\u9B71\u9B66\u9B76\u9B75\u9B70\u9B68\u9B64\u9B6C\u9CFC\u9CFA\u9CFD\u9CFF\u9CF7\u9D07\u9D00\u9CF9\u9CFB\u9D08\u9D05\u9D04\u9E83\u9ED3\u9F0F\u9F10\u511C\u5113\u5117\u511A\u5111\u51DE\u5334\u53E1\u5670\u5660\u566E\"],\n[\"e940\",\"\u5673\u5666\u5663\u566D\u5672\u565E\u5677\u571C\u571B\u58C8\u58BD\u58C9\u58BF\u58BA\u58C2\u58BC\u58C6\u5B17\u5B19\u5B1B\u5B21\u5B14\u5B13\u5B10\u5B16\u5B28\u5B1A\u5B20\u5B1E\u5BEF\u5DAC\u5DB1\u5DA9\u5DA7\u5DB5\u5DB0\u5DAE\u5DAA\u5DA8\u5DB2\u5DAD\u5DAF\u5DB4\u5E67\u5E68\u5E66\u5E6F\u5EE9\u5EE7\u5EE6\u5EE8\u5EE5\u5F4B\u5FBC\u619D\u61A8\u6196\u61C5\u61B4\u61C6\u61C1\u61CC\u61BA\"],\n[\"e9a1\",\"\u61BF\u61B8\u618C\u64D7\u64D6\u64D0\u64CF\u64C9\u64BD\u6489\u64C3\u64DB\u64F3\u64D9\u6533\u657F\u657C\u65A2\u66C8\u66BE\u66C0\u66CA\u66CB\u66CF\u66BD\u66BB\u66BA\u66CC\u6723\u6A34\u6A66\u6A49\u6A67\u6A32\u6A68\u6A3E\u6A5D\u6A6D\u6A76\u6A5B\u6A51\u6A28\u6A5A\u6A3B\u6A3F\u6A41\u6A6A\u6A64\u6A50\u6A4F\u6A54\u6A6F\u6A69\u6A60\u6A3C\u6A5E\u6A56\u6A55\u6A4D\u6A4E\u6A46\u6B55\u6B54\u6B56\u6BA7\u6BAA\u6BAB\u6BC8\u6BC7\u6C04\u6C03\u6C06\u6FAD\u6FCB\u6FA3\u6FC7\u6FBC\u6FCE\u6FC8\u6F5E\u6FC4\u6FBD\u6F9E\u6FCA\u6FA8\u7004\u6FA5\u6FAE\u6FBA\u6FAC\u6FAA\u6FCF\u6FBF\u6FB8\"],\n[\"ea40\",\"\u6FA2\u6FC9\u6FAB\u6FCD\u6FAF\u6FB2\u6FB0\u71C5\u71C2\u71BF\u71B8\u71D6\u71C0\u71C1\u71CB\u71D4\u71CA\u71C7\u71CF\u71BD\u71D8\u71BC\u71C6\u71DA\u71DB\u729D\u729E\u7369\u7366\u7367\u736C\u7365\u736B\u736A\u747F\u749A\u74A0\u7494\u7492\u7495\u74A1\u750B\u7580\u762F\u762D\u7631\u763D\u7633\u763C\u7635\u7632\u7630\u76BB\u76E6\u779A\u779D\u77A1\u779C\u779B\u77A2\u77A3\u7795\u7799\"],\n[\"eaa1\",\"\u7797\u78DD\u78E9\u78E5\u78EA\u78DE\u78E3\u78DB\u78E1\u78E2\u78ED\u78DF\u78E0\u79A4\u7A44\u7A48\u7A47\u7AB6\u7AB8\u7AB5\u7AB1\u7AB7\u7BDE\u7BE3\u7BE7\u7BDD\u7BD5\u7BE5\u7BDA\u7BE8\u7BF9\u7BD4\u7BEA\u7BE2\u7BDC\u7BEB\u7BD8\u7BDF\u7CD2\u7CD4\u7CD7\u7CD0\u7CD1\u7E12\u7E21\u7E17\u7E0C\u7E1F\u7E20\u7E13\u7E0E\u7E1C\u7E15\u7E1A\u7E22\u7E0B\u7E0F\u7E16\u7E0D\u7E14\u7E25\u7E24\u7F43\u7F7B\u7F7C\u7F7A\u7FB1\u7FEF\u802A\u8029\u806C\u81B1\u81A6\u81AE\u81B9\u81B5\u81AB\u81B0\u81AC\u81B4\u81B2\u81B7\u81A7\u81F2\u8255\u8256\u8257\u8556\u8545\u856B\u854D\u8553\u8561\u8558\"],\n[\"eb40\",\"\u8540\u8546\u8564\u8541\u8562\u8544\u8551\u8547\u8563\u853E\u855B\u8571\u854E\u856E\u8575\u8555\u8567\u8560\u858C\u8566\u855D\u8554\u8565\u856C\u8663\u8665\u8664\u879B\u878F\u8797\u8793\u8792\u8788\u8781\u8796\u8798\u8779\u8787\u87A3\u8785\u8790\u8791\u879D\u8784\u8794\u879C\u879A\u8789\u891E\u8926\u8930\u892D\u892E\u8927\u8931\u8922\u8929\u8923\u892F\u892C\u891F\u89F1\u8AE0\"],\n[\"eba1\",\"\u8AE2\u8AF2\u8AF4\u8AF5\u8ADD\u8B14\u8AE4\u8ADF\u8AF0\u8AC8\u8ADE\u8AE1\u8AE8\u8AFF\u8AEF\u8AFB\u8C91\u8C92\u8C90\u8CF5\u8CEE\u8CF1\u8CF0\u8CF3\u8D6C\u8D6E\u8DA5\u8DA7\u8E33\u8E3E\u8E38\u8E40\u8E45\u8E36\u8E3C\u8E3D\u8E41\u8E30\u8E3F\u8EBD\u8F36\u8F2E\u8F35\u8F32\u8F39\u8F37\u8F34\u9076\u9079\u907B\u9086\u90FA\u9133\u9135\u9136\u9193\u9190\u9191\u918D\u918F\u9327\u931E\u9308\u931F\u9306\u930F\u937A\u9338\u933C\u931B\u9323\u9312\u9301\u9346\u932D\u930E\u930D\u92CB\u931D\u92FA\u9325\u9313\u92F9\u92F7\u9334\u9302\u9324\u92FF\u9329\u9339\u9335\u932A\u9314\u930C\"],\n[\"ec40\",\"\u930B\u92FE\u9309\u9300\u92FB\u9316\u95BC\u95CD\u95BE\u95B9\u95BA\u95B6\u95BF\u95B5\u95BD\u96A9\u96D4\u970B\u9712\u9710\u9799\u9797\u9794\u97F0\u97F8\u9835\u982F\u9832\u9924\u991F\u9927\u9929\u999E\u99EE\u99EC\u99E5\u99E4\u99F0\u99E3\u99EA\u99E9\u99E7\u9AB9\u9ABF\u9AB4\u9ABB\u9AF6\u9AFA\u9AF9\u9AF7\u9B33\u9B80\u9B85\u9B87\u9B7C\u9B7E\u9B7B\u9B82\u9B93\u9B92\u9B90\u9B7A\u9B95\"],\n[\"eca1\",\"\u9B7D\u9B88\u9D25\u9D17\u9D20\u9D1E\u9D14\u9D29\u9D1D\u9D18\u9D22\u9D10\u9D19\u9D1F\u9E88\u9E86\u9E87\u9EAE\u9EAD\u9ED5\u9ED6\u9EFA\u9F12\u9F3D\u5126\u5125\u5122\u5124\u5120\u5129\u52F4\u5693\u568C\u568D\u5686\u5684\u5683\u567E\u5682\u567F\u5681\u58D6\u58D4\u58CF\u58D2\u5B2D\u5B25\u5B32\u5B23\u5B2C\u5B27\u5B26\u5B2F\u5B2E\u5B7B\u5BF1\u5BF2\u5DB7\u5E6C\u5E6A\u5FBE\u5FBB\u61C3\u61B5\u61BC\u61E7\u61E0\u61E5\u61E4\u61E8\u61DE\u64EF\u64E9\u64E3\u64EB\u64E4\u64E8\u6581\u6580\u65B6\u65DA\u66D2\u6A8D\u6A96\u6A81\u6AA5\u6A89\u6A9F\u6A9B\u6AA1\u6A9E\u6A87\u6A93\u6A8E\"],\n[\"ed40\",\"\u6A95\u6A83\u6AA8\u6AA4\u6A91\u6A7F\u6AA6\u6A9A\u6A85\u6A8C\u6A92\u6B5B\u6BAD\u6C09\u6FCC\u6FA9\u6FF4\u6FD4\u6FE3\u6FDC\u6FED\u6FE7\u6FE6\u6FDE\u6FF2\u6FDD\u6FE2\u6FE8\u71E1\u71F1\u71E8\u71F2\u71E4\u71F0\u71E2\u7373\u736E\u736F\u7497\u74B2\u74AB\u7490\u74AA\u74AD\u74B1\u74A5\u74AF\u7510\u7511\u7512\u750F\u7584\u7643\u7648\u7649\u7647\u76A4\u76E9\u77B5\u77AB\u77B2\u77B7\u77B6\"],\n[\"eda1\",\"\u77B4\u77B1\u77A8\u77F0\u78F3\u78FD\u7902\u78FB\u78FC\u78F2\u7905\u78F9\u78FE\u7904\u79AB\u79A8\u7A5C\u7A5B\u7A56\u7A58\u7A54\u7A5A\u7ABE\u7AC0\u7AC1\u7C05\u7C0F\u7BF2\u7C00\u7BFF\u7BFB\u7C0E\u7BF4\u7C0B\u7BF3\u7C02\u7C09\u7C03\u7C01\u7BF8\u7BFD\u7C06\u7BF0\u7BF1\u7C10\u7C0A\u7CE8\u7E2D\u7E3C\u7E42\u7E33\u9848\u7E38\u7E2A\u7E49\u7E40\u7E47\u7E29\u7E4C\u7E30\u7E3B\u7E36\u7E44\u7E3A\u7F45\u7F7F\u7F7E\u7F7D\u7FF4\u7FF2\u802C\u81BB\u81C4\u81CC\u81CA\u81C5\u81C7\u81BC\u81E9\u825B\u825A\u825C\u8583\u8580\u858F\u85A7\u8595\u85A0\u858B\u85A3\u857B\u85A4\u859A\u859E\"],\n[\"ee40\",\"\u8577\u857C\u8589\u85A1\u857A\u8578\u8557\u858E\u8596\u8586\u858D\u8599\u859D\u8581\u85A2\u8582\u8588\u8585\u8579\u8576\u8598\u8590\u859F\u8668\u87BE\u87AA\u87AD\u87C5\u87B0\u87AC\u87B9\u87B5\u87BC\u87AE\u87C9\u87C3\u87C2\u87CC\u87B7\u87AF\u87C4\u87CA\u87B4\u87B6\u87BF\u87B8\u87BD\u87DE\u87B2\u8935\u8933\u893C\u893E\u8941\u8952\u8937\u8942\u89AD\u89AF\u89AE\u89F2\u89F3\u8B1E\"],\n[\"eea1\",\"\u8B18\u8B16\u8B11\u8B05\u8B0B\u8B22\u8B0F\u8B12\u8B15\u8B07\u8B0D\u8B08\u8B06\u8B1C\u8B13\u8B1A\u8C4F\u8C70\u8C72\u8C71\u8C6F\u8C95\u8C94\u8CF9\u8D6F\u8E4E\u8E4D\u8E53\u8E50\u8E4C\u8E47\u8F43\u8F40\u9085\u907E\u9138\u919A\u91A2\u919B\u9199\u919F\u91A1\u919D\u91A0\u93A1\u9383\u93AF\u9364\u9356\u9347\u937C\u9358\u935C\u9376\u9349\u9350\u9351\u9360\u936D\u938F\u934C\u936A\u9379\u9357\u9355\u9352\u934F\u9371\u9377\u937B\u9361\u935E\u9363\u9367\u9380\u934E\u9359\u95C7\u95C0\u95C9\u95C3\u95C5\u95B7\u96AE\u96B0\u96AC\u9720\u971F\u9718\u971D\u9719\u979A\u97A1\u979C\"],\n[\"ef40\",\"\u979E\u979D\u97D5\u97D4\u97F1\u9841\u9844\u984A\u9849\u9845\u9843\u9925\u992B\u992C\u992A\u9933\u9932\u992F\u992D\u9931\u9930\u9998\u99A3\u99A1\u9A02\u99FA\u99F4\u99F7\u99F9\u99F8\u99F6\u99FB\u99FD\u99FE\u99FC\u9A03\u9ABE\u9AFE\u9AFD\u9B01\u9AFC\u9B48\u9B9A\u9BA8\u9B9E\u9B9B\u9BA6\u9BA1\u9BA5\u9BA4\u9B86\u9BA2\u9BA0\u9BAF\u9D33\u9D41\u9D67\u9D36\u9D2E\u9D2F\u9D31\u9D38\u9D30\"],\n[\"efa1\",\"\u9D45\u9D42\u9D43\u9D3E\u9D37\u9D40\u9D3D\u7FF5\u9D2D\u9E8A\u9E89\u9E8D\u9EB0\u9EC8\u9EDA\u9EFB\u9EFF\u9F24\u9F23\u9F22\u9F54\u9FA0\u5131\u512D\u512E\u5698\u569C\u5697\u569A\u569D\u5699\u5970\u5B3C\u5C69\u5C6A\u5DC0\u5E6D\u5E6E\u61D8\u61DF\u61ED\u61EE\u61F1\u61EA\u61F0\u61EB\u61D6\u61E9\u64FF\u6504\u64FD\u64F8\u6501\u6503\u64FC\u6594\u65DB\u66DA\u66DB\u66D8\u6AC5\u6AB9\u6ABD\u6AE1\u6AC6\u6ABA\u6AB6\u6AB7\u6AC7\u6AB4\u6AAD\u6B5E\u6BC9\u6C0B\u7007\u700C\u700D\u7001\u7005\u7014\u700E\u6FFF\u7000\u6FFB\u7026\u6FFC\u6FF7\u700A\u7201\u71FF\u71F9\u7203\u71FD\u7376\"],\n[\"f040\",\"\u74B8\u74C0\u74B5\u74C1\u74BE\u74B6\u74BB\u74C2\u7514\u7513\u765C\u7664\u7659\u7650\u7653\u7657\u765A\u76A6\u76BD\u76EC\u77C2\u77BA\u78FF\u790C\u7913\u7914\u7909\u7910\u7912\u7911\u79AD\u79AC\u7A5F\u7C1C\u7C29\u7C19\u7C20\u7C1F\u7C2D\u7C1D\u7C26\u7C28\u7C22\u7C25\u7C30\u7E5C\u7E50\u7E56\u7E63\u7E58\u7E62\u7E5F\u7E51\u7E60\u7E57\u7E53\u7FB5\u7FB3\u7FF7\u7FF8\u8075\u81D1\u81D2\"],\n[\"f0a1\",\"\u81D0\u825F\u825E\u85B4\u85C6\u85C0\u85C3\u85C2\u85B3\u85B5\u85BD\u85C7\u85C4\u85BF\u85CB\u85CE\u85C8\u85C5\u85B1\u85B6\u85D2\u8624\u85B8\u85B7\u85BE\u8669\u87E7\u87E6\u87E2\u87DB\u87EB\u87EA\u87E5\u87DF\u87F3\u87E4\u87D4\u87DC\u87D3\u87ED\u87D8\u87E3\u87A4\u87D7\u87D9\u8801\u87F4\u87E8\u87DD\u8953\u894B\u894F\u894C\u8946\u8950\u8951\u8949\u8B2A\u8B27\u8B23\u8B33\u8B30\u8B35\u8B47\u8B2F\u8B3C\u8B3E\u8B31\u8B25\u8B37\u8B26\u8B36\u8B2E\u8B24\u8B3B\u8B3D\u8B3A\u8C42\u8C75\u8C99\u8C98\u8C97\u8CFE\u8D04\u8D02\u8D00\u8E5C\u8E62\u8E60\u8E57\u8E56\u8E5E\u8E65\u8E67\"],\n[\"f140\",\"\u8E5B\u8E5A\u8E61\u8E5D\u8E69\u8E54\u8F46\u8F47\u8F48\u8F4B\u9128\u913A\u913B\u913E\u91A8\u91A5\u91A7\u91AF\u91AA\u93B5\u938C\u9392\u93B7\u939B\u939D\u9389\u93A7\u938E\u93AA\u939E\u93A6\u9395\u9388\u9399\u939F\u938D\u93B1\u9391\u93B2\u93A4\u93A8\u93B4\u93A3\u93A5\u95D2\u95D3\u95D1\u96B3\u96D7\u96DA\u5DC2\u96DF\u96D8\u96DD\u9723\u9722\u9725\u97AC\u97AE\u97A8\u97AB\u97A4\u97AA\"],\n[\"f1a1\",\"\u97A2\u97A5\u97D7\u97D9\u97D6\u97D8\u97FA\u9850\u9851\u9852\u98B8\u9941\u993C\u993A\u9A0F\u9A0B\u9A09\u9A0D\u9A04\u9A11\u9A0A\u9A05\u9A07\u9A06\u9AC0\u9ADC\u9B08\u9B04\u9B05\u9B29\u9B35\u9B4A\u9B4C\u9B4B\u9BC7\u9BC6\u9BC3\u9BBF\u9BC1\u9BB5\u9BB8\u9BD3\u9BB6\u9BC4\u9BB9\u9BBD\u9D5C\u9D53\u9D4F\u9D4A\u9D5B\u9D4B\u9D59\u9D56\u9D4C\u9D57\u9D52\u9D54\u9D5F\u9D58\u9D5A\u9E8E\u9E8C\u9EDF\u9F01\u9F00\u9F16\u9F25\u9F2B\u9F2A\u9F29\u9F28\u9F4C\u9F55\u5134\u5135\u5296\u52F7\u53B4\u56AB\u56AD\u56A6\u56A7\u56AA\u56AC\u58DA\u58DD\u58DB\u5912\u5B3D\u5B3E\u5B3F\u5DC3\u5E70\"],\n[\"f240\",\"\u5FBF\u61FB\u6507\u6510\u650D\u6509\u650C\u650E\u6584\u65DE\u65DD\u66DE\u6AE7\u6AE0\u6ACC\u6AD1\u6AD9\u6ACB\u6ADF\u6ADC\u6AD0\u6AEB\u6ACF\u6ACD\u6ADE\u6B60\u6BB0\u6C0C\u7019\u7027\u7020\u7016\u702B\u7021\u7022\u7023\u7029\u7017\u7024\u701C\u702A\u720C\u720A\u7207\u7202\u7205\u72A5\u72A6\u72A4\u72A3\u72A1\u74CB\u74C5\u74B7\u74C3\u7516\u7660\u77C9\u77CA\u77C4\u77F1\u791D\u791B\"],\n[\"f2a1\",\"\u7921\u791C\u7917\u791E\u79B0\u7A67\u7A68\u7C33\u7C3C\u7C39\u7C2C\u7C3B\u7CEC\u7CEA\u7E76\u7E75\u7E78\u7E70\u7E77\u7E6F\u7E7A\u7E72\u7E74\u7E68\u7F4B\u7F4A\u7F83\u7F86\u7FB7\u7FFD\u7FFE\u8078\u81D7\u81D5\u8264\u8261\u8263\u85EB\u85F1\u85ED\u85D9\u85E1\u85E8\u85DA\u85D7\u85EC\u85F2\u85F8\u85D8\u85DF\u85E3\u85DC\u85D1\u85F0\u85E6\u85EF\u85DE\u85E2\u8800\u87FA\u8803\u87F6\u87F7\u8809\u880C\u880B\u8806\u87FC\u8808\u87FF\u880A\u8802\u8962\u895A\u895B\u8957\u8961\u895C\u8958\u895D\u8959\u8988\u89B7\u89B6\u89F6\u8B50\u8B48\u8B4A\u8B40\u8B53\u8B56\u8B54\u8B4B\u8B55\"],\n[\"f340\",\"\u8B51\u8B42\u8B52\u8B57\u8C43\u8C77\u8C76\u8C9A\u8D06\u8D07\u8D09\u8DAC\u8DAA\u8DAD\u8DAB\u8E6D\u8E78\u8E73\u8E6A\u8E6F\u8E7B\u8EC2\u8F52\u8F51\u8F4F\u8F50\u8F53\u8FB4\u9140\u913F\u91B0\u91AD\u93DE\u93C7\u93CF\u93C2\u93DA\u93D0\u93F9\u93EC\u93CC\u93D9\u93A9\u93E6\u93CA\u93D4\u93EE\u93E3\u93D5\u93C4\u93CE\u93C0\u93D2\u93E7\u957D\u95DA\u95DB\u96E1\u9729\u972B\u972C\u9728\u9726\"],\n[\"f3a1\",\"\u97B3\u97B7\u97B6\u97DD\u97DE\u97DF\u985C\u9859\u985D\u9857\u98BF\u98BD\u98BB\u98BE\u9948\u9947\u9943\u99A6\u99A7\u9A1A\u9A15\u9A25\u9A1D\u9A24\u9A1B\u9A22\u9A20\u9A27\u9A23\u9A1E\u9A1C\u9A14\u9AC2\u9B0B\u9B0A\u9B0E\u9B0C\u9B37\u9BEA\u9BEB\u9BE0\u9BDE\u9BE4\u9BE6\u9BE2\u9BF0\u9BD4\u9BD7\u9BEC\u9BDC\u9BD9\u9BE5\u9BD5\u9BE1\u9BDA\u9D77\u9D81\u9D8A\u9D84\u9D88\u9D71\u9D80\u9D78\u9D86\u9D8B\u9D8C\u9D7D\u9D6B\u9D74\u9D75\u9D70\u9D69\u9D85\u9D73\u9D7B\u9D82\u9D6F\u9D79\u9D7F\u9D87\u9D68\u9E94\u9E91\u9EC0\u9EFC\u9F2D\u9F40\u9F41\u9F4D\u9F56\u9F57\u9F58\u5337\u56B2\"],\n[\"f440\",\"\u56B5\u56B3\u58E3\u5B45\u5DC6\u5DC7\u5EEE\u5EEF\u5FC0\u5FC1\u61F9\u6517\u6516\u6515\u6513\u65DF\u66E8\u66E3\u66E4\u6AF3\u6AF0\u6AEA\u6AE8\u6AF9\u6AF1\u6AEE\u6AEF\u703C\u7035\u702F\u7037\u7034\u7031\u7042\u7038\u703F\u703A\u7039\u7040\u703B\u7033\u7041\u7213\u7214\u72A8\u737D\u737C\u74BA\u76AB\u76AA\u76BE\u76ED\u77CC\u77CE\u77CF\u77CD\u77F2\u7925\u7923\u7927\u7928\u7924\u7929\"],\n[\"f4a1\",\"\u79B2\u7A6E\u7A6C\u7A6D\u7AF7\u7C49\u7C48\u7C4A\u7C47\u7C45\u7CEE\u7E7B\u7E7E\u7E81\u7E80\u7FBA\u7FFF\u8079\u81DB\u81D9\u820B\u8268\u8269\u8622\u85FF\u8601\u85FE\u861B\u8600\u85F6\u8604\u8609\u8605\u860C\u85FD\u8819\u8810\u8811\u8817\u8813\u8816\u8963\u8966\u89B9\u89F7\u8B60\u8B6A\u8B5D\u8B68\u8B63\u8B65\u8B67\u8B6D\u8DAE\u8E86\u8E88\u8E84\u8F59\u8F56\u8F57\u8F55\u8F58\u8F5A\u908D\u9143\u9141\u91B7\u91B5\u91B2\u91B3\u940B\u9413\u93FB\u9420\u940F\u9414\u93FE\u9415\u9410\u9428\u9419\u940D\u93F5\u9400\u93F7\u9407\u940E\u9416\u9412\u93FA\u9409\u93F8\u940A\u93FF\"],\n[\"f540\",\"\u93FC\u940C\u93F6\u9411\u9406\u95DE\u95E0\u95DF\u972E\u972F\u97B9\u97BB\u97FD\u97FE\u9860\u9862\u9863\u985F\u98C1\u98C2\u9950\u994E\u9959\u994C\u994B\u9953\u9A32\u9A34\u9A31\u9A2C\u9A2A\u9A36\u9A29\u9A2E\u9A38\u9A2D\u9AC7\u9ACA\u9AC6\u9B10\u9B12\u9B11\u9C0B\u9C08\u9BF7\u9C05\u9C12\u9BF8\u9C40\u9C07\u9C0E\u9C06\u9C17\u9C14\u9C09\u9D9F\u9D99\u9DA4\u9D9D\u9D92\u9D98\u9D90\u9D9B\"],\n[\"f5a1\",\"\u9DA0\u9D94\u9D9C\u9DAA\u9D97\u9DA1\u9D9A\u9DA2\u9DA8\u9D9E\u9DA3\u9DBF\u9DA9\u9D96\u9DA6\u9DA7\u9E99\u9E9B\u9E9A\u9EE5\u9EE4\u9EE7\u9EE6\u9F30\u9F2E\u9F5B\u9F60\u9F5E\u9F5D\u9F59\u9F91\u513A\u5139\u5298\u5297\u56C3\u56BD\u56BE\u5B48\u5B47\u5DCB\u5DCF\u5EF1\u61FD\u651B\u6B02\u6AFC\u6B03\u6AF8\u6B00\u7043\u7044\u704A\u7048\u7049\u7045\u7046\u721D\u721A\u7219\u737E\u7517\u766A\u77D0\u792D\u7931\u792F\u7C54\u7C53\u7CF2\u7E8A\u7E87\u7E88\u7E8B\u7E86\u7E8D\u7F4D\u7FBB\u8030\u81DD\u8618\u862A\u8626\u861F\u8623\u861C\u8619\u8627\u862E\u8621\u8620\u8629\u861E\u8625\"],\n[\"f640\",\"\u8829\u881D\u881B\u8820\u8824\u881C\u882B\u884A\u896D\u8969\u896E\u896B\u89FA\u8B79\u8B78\u8B45\u8B7A\u8B7B\u8D10\u8D14\u8DAF\u8E8E\u8E8C\u8F5E\u8F5B\u8F5D\u9146\u9144\u9145\u91B9\u943F\u943B\u9436\u9429\u943D\u943C\u9430\u9439\u942A\u9437\u942C\u9440\u9431\u95E5\u95E4\u95E3\u9735\u973A\u97BF\u97E1\u9864\u98C9\u98C6\u98C0\u9958\u9956\u9A39\u9A3D\u9A46\u9A44\u9A42\u9A41\u9A3A\"],\n[\"f6a1\",\"\u9A3F\u9ACD\u9B15\u9B17\u9B18\u9B16\u9B3A\u9B52\u9C2B\u9C1D\u9C1C\u9C2C\u9C23\u9C28\u9C29\u9C24\u9C21\u9DB7\u9DB6\u9DBC\u9DC1\u9DC7\u9DCA\u9DCF\u9DBE\u9DC5\u9DC3\u9DBB\u9DB5\u9DCE\u9DB9\u9DBA\u9DAC\u9DC8\u9DB1\u9DAD\u9DCC\u9DB3\u9DCD\u9DB2\u9E7A\u9E9C\u9EEB\u9EEE\u9EED\u9F1B\u9F18\u9F1A\u9F31\u9F4E\u9F65\u9F64\u9F92\u4EB9\u56C6\u56C5\u56CB\u5971\u5B4B\u5B4C\u5DD5\u5DD1\u5EF2\u6521\u6520\u6526\u6522\u6B0B\u6B08\u6B09\u6C0D\u7055\u7056\u7057\u7052\u721E\u721F\u72A9\u737F\u74D8\u74D5\u74D9\u74D7\u766D\u76AD\u7935\u79B4\u7A70\u7A71\u7C57\u7C5C\u7C59\u7C5B\u7C5A\"],\n[\"f740\",\"\u7CF4\u7CF1\u7E91\u7F4F\u7F87\u81DE\u826B\u8634\u8635\u8633\u862C\u8632\u8636\u882C\u8828\u8826\u882A\u8825\u8971\u89BF\u89BE\u89FB\u8B7E\u8B84\u8B82\u8B86\u8B85\u8B7F\u8D15\u8E95\u8E94\u8E9A\u8E92\u8E90\u8E96\u8E97\u8F60\u8F62\u9147\u944C\u9450\u944A\u944B\u944F\u9447\u9445\u9448\u9449\u9446\u973F\u97E3\u986A\u9869\u98CB\u9954\u995B\u9A4E\u9A53\u9A54\u9A4C\u9A4F\u9A48\u9A4A\"],\n[\"f7a1\",\"\u9A49\u9A52\u9A50\u9AD0\u9B19\u9B2B\u9B3B\u9B56\u9B55\u9C46\u9C48\u9C3F\u9C44\u9C39\u9C33\u9C41\u9C3C\u9C37\u9C34\u9C32\u9C3D\u9C36\u9DDB\u9DD2\u9DDE\u9DDA\u9DCB\u9DD0\u9DDC\u9DD1\u9DDF\u9DE9\u9DD9\u9DD8\u9DD6\u9DF5\u9DD5\u9DDD\u9EB6\u9EF0\u9F35\u9F33\u9F32\u9F42\u9F6B\u9F95\u9FA2\u513D\u5299\u58E8\u58E7\u5972\u5B4D\u5DD8\u882F\u5F4F\u6201\u6203\u6204\u6529\u6525\u6596\u66EB\u6B11\u6B12\u6B0F\u6BCA\u705B\u705A\u7222\u7382\u7381\u7383\u7670\u77D4\u7C67\u7C66\u7E95\u826C\u863A\u8640\u8639\u863C\u8631\u863B\u863E\u8830\u8832\u882E\u8833\u8976\u8974\u8973\u89FE\"],\n[\"f840\",\"\u8B8C\u8B8E\u8B8B\u8B88\u8C45\u8D19\u8E98\u8F64\u8F63\u91BC\u9462\u9455\u945D\u9457\u945E\u97C4\u97C5\u9800\u9A56\u9A59\u9B1E\u9B1F\u9B20\u9C52\u9C58\u9C50\u9C4A\u9C4D\u9C4B\u9C55\u9C59\u9C4C\u9C4E\u9DFB\u9DF7\u9DEF\u9DE3\u9DEB\u9DF8\u9DE4\u9DF6\u9DE1\u9DEE\u9DE6\u9DF2\u9DF0\u9DE2\u9DEC\u9DF4\u9DF3\u9DE8\u9DED\u9EC2\u9ED0\u9EF2\u9EF3\u9F06\u9F1C\u9F38\u9F37\u9F36\u9F43\u9F4F\"],\n[\"f8a1\",\"\u9F71\u9F70\u9F6E\u9F6F\u56D3\u56CD\u5B4E\u5C6D\u652D\u66ED\u66EE\u6B13\u705F\u7061\u705D\u7060\u7223\u74DB\u74E5\u77D5\u7938\u79B7\u79B6\u7C6A\u7E97\u7F89\u826D\u8643\u8838\u8837\u8835\u884B\u8B94\u8B95\u8E9E\u8E9F\u8EA0\u8E9D\u91BE\u91BD\u91C2\u946B\u9468\u9469\u96E5\u9746\u9743\u9747\u97C7\u97E5\u9A5E\u9AD5\u9B59\u9C63\u9C67\u9C66\u9C62\u9C5E\u9C60\u9E02\u9DFE\u9E07\u9E03\u9E06\u9E05\u9E00\u9E01\u9E09\u9DFF\u9DFD\u9E04\u9EA0\u9F1E\u9F46\u9F74\u9F75\u9F76\u56D4\u652E\u65B8\u6B18\u6B19\u6B17\u6B1A\u7062\u7226\u72AA\u77D8\u77D9\u7939\u7C69\u7C6B\u7CF6\u7E9A\"],\n[\"f940\",\"\u7E98\u7E9B\u7E99\u81E0\u81E1\u8646\u8647\u8648\u8979\u897A\u897C\u897B\u89FF\u8B98\u8B99\u8EA5\u8EA4\u8EA3\u946E\u946D\u946F\u9471\u9473\u9749\u9872\u995F\u9C68\u9C6E\u9C6D\u9E0B\u9E0D\u9E10\u9E0F\u9E12\u9E11\u9EA1\u9EF5\u9F09\u9F47\u9F78\u9F7B\u9F7A\u9F79\u571E\u7066\u7C6F\u883C\u8DB2\u8EA6\u91C3\u9474\u9478\u9476\u9475\u9A60\u9C74\u9C73\u9C71\u9C75\u9E14\u9E13\u9EF6\u9F0A\"],\n[\"f9a1\",\"\u9FA4\u7068\u7065\u7CF7\u866A\u883E\u883D\u883F\u8B9E\u8C9C\u8EA9\u8EC9\u974B\u9873\u9874\u98CC\u9961\u99AB\u9A64\u9A66\u9A67\u9B24\u9E15\u9E17\u9F48\u6207\u6B1E\u7227\u864C\u8EA8\u9482\u9480\u9481\u9A69\u9A68\u9B2E\u9E19\u7229\u864B\u8B9F\u9483\u9C79\u9EB7\u7675\u9A6B\u9C7A\u9E1D\u7069\u706A\u9EA4\u9F7E\u9F49\u9F98\u7881\u92B9\u88CF\u58BB\u6052\u7CA7\u5AFA\u2554\u2566\u2557\u2560\u256C\u2563\u255A\u2569\u255D\u2552\u2564\u2555\u255E\u256A\u2561\u2558\u2567\u255B\u2553\u2565\u2556\u255F\u256B\u2562\u2559\u2568\u255C\u2551\u2550\u256D\u256E\u2570\u256F\u2593\"]\n]\n", "[\n[\"8740\",\"\u43F0\u4C32\u4603\u45A6\u4578\uD85C\uDE67\u4D77\u45B3\uD85F\uDCB1\u4CE2\uD85F\uDCC5\u3B95\u4736\u4744\u4C47\u4C40\uD850\uDEBF\uD84D\uDE17\uD85C\uDF52\uD85B\uDE8B\uD85C\uDCD2\u4C57\uD868\uDF51\u474F\u45DA\u4C85\uD85F\uDC6C\u4D07\u4AA4\u46A1\uD85A\uDF23\u7225\uD856\uDE54\uD846\uDE63\uD84F\uDE06\uD84F\uDF61\u664D\u56FB\"],\n[\"8767\",\"\u7D95\u591D\uD862\uDFB9\u3DF4\u9734\uD85E\uDFEF\u5BDB\uD847\uDD5E\u5AA4\u3625\uD867\uDEB0\u5AD1\u5BB7\u5CFC\u676E\u8593\uD866\uDD45\u7461\u749D\u3875\uD847\uDD53\uD84D\uDE9E\uD858\uDC21\u3EEC\"],\n[\"87a1\",\"\uD856\uDCDE\u3AF5\u7AFC\u9F97\uD850\uDD61\uD862\uDD0D\uD84C\uDDEA\uD842\uDE8A\uD84C\uDE5E\u430A\u8484\u9F96\u942F\u4930\u8613\u5896\u974A\u9218\u79D0\u7A32\u6660\u6A29\u889D\u744C\u7BC5\u6782\u7A2C\u524F\u9046\u34E6\u73C4\uD857\uDDB9\u74C6\u9FC7\u57B3\u492F\u544C\u4131\uD84D\uDE8E\u5818\u7A72\uD85E\uDF65\u8B8F\u46AE\uD85B\uDE88\u4181\uD857\uDD99\u7BAE\uD849\uDCBC\u9FC8\uD849\uDCC1\uD849\uDCC9\uD849\uDCCC\u9FC9\u8504\uD84D\uDDBB\u40B4\u9FCA\u44E1\uD86B\uDDFF\u62C1\u706E\u9FCB\"],\n[\"8840\",\"\u31C0\",4,\"\uD840\uDD0C\u31C5\uD840\uDCD1\uD840\uDCCD\u31C6\u31C7\uD840\uDCCB\uD847\uDFE8\u31C8\uD840\uDCCA\u31C9\u31CA\u31CB\u31CC\uD840\uDD0E\u31CD\u31CE\u0100\u00C1\u01CD\u00C0\u0112\u00C9\u011A\u00C8\u014C\u00D3\u01D1\u00D2\u0FFF\u00CA\u0304\u1EBE\u0FFF\u00CA\u030C\u1EC0\u00CA\u0101\u00E1\u01CE\u00E0\u0251\u0113\u00E9\u011B\u00E8\u012B\u00ED\u01D0\u00EC\u014D\u00F3\u01D2\u00F2\u016B\u00FA\u01D4\u00F9\u01D6\u01D8\u01DA\"],\n[\"88a1\",\"\u01DC\u00FC\u0FFF\u00EA\u0304\u1EBF\u0FFF\u00EA\u030C\u1EC1\u00EA\u0261\u23DA\u23DB\"],\n[\"8940\",\"\uD868\uDFA9\uD844\uDD45\"],\n[\"8943\",\"\u650A\"],\n[\"8946\",\"\u4E3D\u6EDD\u9D4E\u91DF\"],\n[\"894c\",\"\uD85D\uDF35\u6491\u4F1A\u4F28\u4FA8\u5156\u5174\u519C\u51E4\u52A1\u52A8\u533B\u534E\u53D1\u53D8\u56E2\u58F0\u5904\u5907\u5932\u5934\u5B66\u5B9E\u5B9F\u5C9A\u5E86\u603B\u6589\u67FE\u6804\u6865\u6D4E\u70BC\u7535\u7EA4\u7EAC\u7EBA\u7EC7\u7ECF\u7EDF\u7F06\u7F37\u827A\u82CF\u836F\u89C6\u8BBE\u8BE2\u8F66\u8F67\u8F6E\"],\n[\"89a1\",\"\u7411\u7CFC\u7DCD\u6946\u7AC9\u5227\"],\n[\"89ab\",\"\u918C\u78B8\u915E\u80BC\"],\n[\"89b0\",\"\u8D0B\u80F6\uD842\uDDE7\"],\n[\"89b5\",\"\u809F\u9EC7\u4CCD\u9DC9\u9E0C\u4C3E\uD867\uDDF6\uD85C\uDC0E\u9E0A\uD868\uDD33\u35C1\"],\n[\"89c1\",\"\u6E9A\u823E\u7519\"],\n[\"89c5\",\"\u4911\u9A6C\u9A8F\u9F99\u7987\uD861\uDC6C\uD847\uDDCA\uD841\uDDD0\uD84A\uDEE6\u4E24\u4E81\u4E80\u4E87\u4EBF\u4EEB\u4F37\u344C\u4FBD\u3E48\u5003\u5088\u347D\u3493\u34A5\u5186\u5905\u51DB\u51FC\u5205\u4E89\u5279\u5290\u5327\u35C7\u53A9\u3551\u53B0\u3553\u53C2\u5423\u356D\u3572\u3681\u5493\u54A3\u54B4\u54B9\u54D0\u54EF\u5518\u5523\u5528\u3598\u553F\u35A5\u35BF\u55D7\u35C5\"],\n[\"8a40\",\"\uD85F\uDD84\u5525\"],\n[\"8a43\",\"\uD843\uDC42\uD843\uDD15\uD854\uDD2B\u5590\uD84B\uDCC6\u39EC\uD840\uDF41\u8E46\uD853\uDDB8\uD865\uDCE5\u4053\uD860\uDCBE\u777A\uD84B\uDC38\u3A34\u47D5\uD860\uDD5D\uD85A\uDDF2\uD853\uDDEA\u64DD\uD843\uDD7C\uD843\uDFB4\uD843\uDCD5\uD844\uDCF4\u648D\u8E7E\uD843\uDE96\uD843\uDC0B\uD843\uDF64\uD84B\uDCA9\uD860\uDE56\uD851\uDCD3\"],\n[\"8a64\",\"\uD843\uDD46\uD866\uDE4D\uD860\uDCE9\u47F4\uD853\uDEA7\uD84B\uDCC2\u9AB2\u3A67\uD865\uDDF4\u3FED\u3506\uD854\uDEC7\uD865\uDFD4\uD85E\uDCC8\uD84B\uDD44\u9D6E\u9815\"],\n[\"8a76\",\"\u43D9\uD858\uDCA5\u64B4\u54E3\uD84B\uDD4C\uD84A\uDFCA\uD844\uDC77\u39FB\uD844\uDC6F\"],\n[\"8aa1\",\"\uD859\uDEDA\uD859\uDF16\uD85E\uDDA0\u64EA\uD854\uDC52\uD843\uDC43\u8E68\uD848\uDDA1\uD862\uDF4C\uD841\uDF31\"],\n[\"8aac\",\"\u480B\uD840\uDDA9\u3FFA\u5873\uD84B\uDD8D\"],\n[\"8ab2\",\"\uD851\uDDC8\uD841\uDCFC\uD858\uDC97\uD843\uDF4C\uD843\uDD96\u5579\u40BB\u43BA\"],\n[\"8abb\",\"\u4AB4\uD84A\uDE66\uD844\uDC9D\u81AA\u98F5\uD843\uDD9C\u6379\u39FE\uD849\uDF75\u8DC0\u56A1\u647C\u3E43\"],\n[\"8ac9\",\"\uD869\uDE01\uD843\uDE09\uD84A\uDECF\uD84B\uDCC9\"],\n[\"8ace\",\"\uD844\uDCC8\uD84E\uDDC2\u3992\u3A06\uD860\uDE9B\u3578\uD857\uDE49\uD848\uDCC7\u5652\uD843\uDF31\uD84B\uDCB2\uD865\uDF20\u34BC\u6C3D\uD853\uDE3B\"],\n[\"8adf\",\"\uD85D\uDD74\uD84B\uDE8B\uD848\uDE08\uD869\uDE5B\uD863\uDCCD\uD843\uDE7A\uD843\uDC34\uD85A\uDC1C\u7F93\uD844\uDCCF\uD84A\uDC03\uD84A\uDD39\u35FB\uD854\uDDE3\uD843\uDE8C\uD843\uDF8D\uD843\uDEAA\u3F93\uD843\uDF30\uD843\uDD47\uD844\uDD4F\uD843\uDE4C\"],\n[\"8af6\",\"\uD843\uDEAB\uD842\uDFA9\uD843\uDD48\uD844\uDCC0\uD844\uDD3D\u3FF9\uD849\uDE96\u6432\uD843\uDFAD\"],\n[\"8b40\",\"\uD84C\uDFF4\uD85D\uDE39\uD84A\uDFCE\uD843\uDD7E\uD843\uDD7F\uD84B\uDC51\uD84B\uDC55\u3A18\uD843\uDE98\uD844\uDCC7\uD843\uDF2E\uD869\uDE32\uD85A\uDF50\uD863\uDCD2\uD863\uDD99\uD863\uDCCA\u95AA\u54CC\u82C4\u55B9\"],\n[\"8b55\",\"\uD867\uDEC3\u9C26\u9AB6\uD85D\uDF5E\uD84B\uDDEE\u7140\u816D\u80EC\u5C1C\uD859\uDD72\u8134\u3797\u535F\uD860\uDCBD\u91B6\uD843\uDEFA\uD843\uDE0F\uD843\uDE77\uD843\uDEFB\u35DD\uD853\uDDEB\u3609\uD843\uDCD6\u56AF\uD849\uDFB5\uD844\uDCC9\uD843\uDE10\uD843\uDE78\uD844\uDC78\uD844\uDD48\uD860\uDE07\uD845\uDC55\uD843\uDE79\uD853\uDE50\uD84B\uDDA4\u5A54\uD844\uDC1D\uD844\uDC1E\uD844\uDCF5\uD844\uDCF6\u579C\uD843\uDE11\"],\n[\"8ba1\",\"\uD85D\uDE94\uD860\uDECD\uD843\uDFB5\uD843\uDE7B\uD854\uDD7E\u3703\uD843\uDFB6\uD844\uDD80\uD854\uDED8\uD868\uDEBD\uD852\uDDDA\uD846\uDC3A\uD850\uDD77\uD860\uDE7C\u5899\u5268\u361A\uD855\uDF3D\u7BB2\u5B68\u4800\u4B2C\u9F27\u49E7\u9C1F\u9B8D\uD856\uDF74\uD84C\uDD3D\u55FB\u35F2\u5689\u4E28\u5902\uD846\uDFC1\uD87E\uDC78\u9751\uD840\uDC86\u4E5B\u4EBB\u353E\u5C23\u5F51\u5FC4\u38FA\u624C\u6535\u6B7A\u6C35\u6C3A\u706C\u722B\u4E2C\u72AD\uD852\uDCE9\u7F52\u793B\u7CF9\u7F53\uD858\uDE6A\u34C1\"],\n[\"8bde\",\"\uD858\uDF4B\u8002\u8080\uD859\uDE12\uD85A\uDD51\u535D\u8864\u89C1\uD85E\uDCB2\u8BA0\u8D1D\u9485\u9578\u957F\u95E8\uD863\uDE0F\u97E6\u9875\u98CE\u98DE\u9963\uD866\uDC10\u9C7C\u9E1F\u9EC4\u6B6F\uF907\u4E37\uD840\uDC87\u961D\u6237\u94A2\"],\n[\"8c40\",\"\u503B\u6DFE\uD867\uDC73\u9FA6\u3DC9\u888F\uD850\uDD4E\u7077\u5CF5\u4B20\uD854\uDDCD\u3559\uD857\uDD30\u6122\uD862\uDE32\u8FA7\u91F6\u7191\u6719\u73BA\uD84C\uDE81\uD868\uDD07\u3C8B\uD846\uDD80\u4B10\u78E4\u7402\u51AE\uD861\uDF0F\u4009\u6A63\uD868\uDEBA\u4223\u860F\uD842\uDE6F\u7A2A\uD866\uDD47\uD862\uDEEA\u9755\u704D\u5324\uD848\uDC7E\u93F4\u76D9\uD862\uDDE3\u9FA7\u77DD\u4EA3\u4FF0\u50BC\u4E2F\u4F17\u9FA8\u5434\u7D8B\u5892\u58D0\uD847\uDDB6\u5E92\u5E99\u5FC2\uD849\uDF12\u658B\"],\n[\"8ca1\",\"\uD84C\uDFF9\u6919\u6A43\uD84F\uDC63\u6CFF\"],\n[\"8ca7\",\"\u7200\uD851\uDD05\u738C\u3EDB\uD852\uDE13\u5B15\u74B9\u8B83\uD857\uDCA4\uD855\uDE95\u7A93\u7BEC\u7CC3\u7E6C\u82F8\u8597\u9FA9\u8890\u9FAA\u8EB9\u9FAB\u8FCF\u855F\u99E0\u9221\u9FAC\uD863\uDDB9\uD845\uDC3F\u4071\u42A2\u5A1A\"],\n[\"8cc9\",\"\u9868\u676B\u4276\u573D\"],\n[\"8cce\",\"\u85D6\uD852\uDD7B\u82BF\uD85C\uDD0D\u4C81\uD85B\uDD74\u5D7B\uD85A\uDF15\uD85B\uDFBE\u9FAD\u9FAE\u5B96\u9FAF\u66E7\u7E5B\u6E57\u79CA\u3D88\u44C3\uD84C\uDE56\uD849\uDF96\u439A\u4536\"],\n[\"8ce6\",\"\u5CD5\uD84E\uDF1A\u8AF9\u5C78\u3D12\uD84D\uDD51\u5D78\u9FB2\u7157\u4558\uD850\uDCEC\uD847\uDE23\u4C77\u3978\u344A\uD840\uDDA4\uD85B\uDC41\u8ACC\u4FB4\uD840\uDE39\u59BF\u816C\u9856\uD866\uDCFA\u5F3B\"],\n[\"8d40\",\"\uD842\uDF9F\"],\n[\"8d42\",\"\uD848\uDDC1\uD862\uDD6D\u4102\u46BB\uD864\uDC79\u3F07\u9FB3\uD868\uDDB5\u40F8\u37D6\u46F7\uD85B\uDC46\u417C\uD861\uDEB2\uD85C\uDFFF\u456D\u38D4\uD855\uDC9A\u4561\u451B\u4D89\u4C7B\u4D76\u45EA\u3FC8\uD852\uDF0F\u3661\u44DE\u44BD\u41ED\u5D3E\u5D48\u5D56\u3DFC\u380F\u5DA4\u5DB9\u3820\u3838\u5E42\u5EBD\u5F25\u5F83\u3908\u3914\u393F\u394D\u60D7\u613D\u5CE5\u3989\u61B7\u61B9\u61CF\u39B8\u622C\u6290\u62E5\u6318\u39F8\u56B1\"],\n[\"8da1\",\"\u3A03\u63E2\u63FB\u6407\u645A\u3A4B\u64C0\u5D15\u5621\u9F9F\u3A97\u6586\u3ABD\u65FF\u6653\u3AF2\u6692\u3B22\u6716\u3B42\u67A4\u6800\u3B58\u684A\u6884\u3B72\u3B71\u3B7B\u6909\u6943\u725C\u6964\u699F\u6985\u3BBC\u69D6\u3BDD\u6A65\u6A74\u6A71\u6A82\u3BEC\u6A99\u3BF2\u6AAB\u6AB5\u6AD4\u6AF6\u6B81\u6BC1\u6BEA\u6C75\u6CAA\u3CCB\u6D02\u6D06\u6D26\u6D81\u3CEF\u6DA4\u6DB1\u6E15\u6E18\u6E29\u6E86\uD862\uDDC0\u6EBB\u6EE2\u6EDA\u9F7F\u6EE8\u6EE9\u6F24\u6F34\u3D46\uD84F\uDF41\u6F81\u6FBE\u3D6A\u3D75\u71B7\u5C99\u3D8A\u702C\u3D91\u7050\u7054\u706F\u707F\u7089\uD840\uDF25\u43C1\u35F1\uD843\uDED8\"],\n[\"8e40\",\"\uD84F\uDED7\u57BE\uD85B\uDED3\u713E\uD855\uDFE0\u364E\u69A2\uD862\uDFE9\u5B74\u7A49\uD856\uDCE1\uD865\uDCD9\u7A65\u7A7D\uD856\uDDAC\u7ABB\u7AB0\u7AC2\u7AC3\u71D1\uD859\uDC8D\u41CA\u7ADA\u7ADD\u7AEA\u41EF\u54B2\uD857\uDC01\u7B0B\u7B55\u7B29\uD854\uDF0E\uD857\uDCFE\u7BA2\u7B6F\u839C\uD856\uDFB4\uD85B\uDC7F\u7BD0\u8421\u7B92\u7BB8\uD857\uDD20\u3DAD\uD857\uDC65\u8492\u7BFA\u7C06\u7C35\uD857\uDCC1\u7C44\u7C83\uD852\uDC82\u7CA6\u667D\uD851\uDD78\u7CC9\u7CC7\u7CE6\u7C74\u7CF3\u7CF5\u7CCE\"],\n[\"8ea1\",\"\u7E67\u451D\uD85B\uDE44\u7D5D\uD85B\uDED6\u748D\u7D89\u7DAB\u7135\u7DB3\u7DD2\uD850\uDC57\uD858\uDC29\u7DE4\u3D13\u7DF5\uD845\uDFF9\u7DE5\uD860\uDF6D\u7E1D\uD858\uDD21\uD858\uDD5A\u7E6E\u7E92\u432B\u946C\u7E27\u7F40\u7F41\u7F47\u7936\uD858\uDED0\u99E1\u7F97\uD858\uDF51\u7FA3\uD845\uDE61\uD840\uDC68\u455C\uD84D\uDF66\u4503\uD860\uDF3A\u7FFA\uD859\uDC89\u8005\u8008\u801D\u8028\u802F\uD868\uDC87\uD85B\uDCC3\u803B\u803C\u8061\uD849\uDF14\u4989\uD859\uDE26\uD84F\uDDE3\uD859\uDEE8\u6725\u80A7\uD862\uDE48\u8107\u811A\u58B0\uD849\uDEF6\u6C7F\uD859\uDC98\uD853\uDFB8\u64E7\uD845\uDC8A\u8218\uD846\uDC5E\u6A53\uD852\uDE65\uD852\uDE95\u447A\u8229\uD842\uDF0D\uD85A\uDE52\uD84F\uDD7E\u4FF9\uD845\uDCFD\u84E2\u8362\uD85A\uDF0A\uD852\uDDA7\uD84D\uDD30\uD845\uDF73\uD84F\uDDF8\u82AA\u691B\uD87E\uDD94\u41DB\"],\n[\"8f40\",\"\u854B\u82D0\u831A\uD843\uDE16\uD845\uDFB4\u36C1\uD84C\uDD7D\uD84D\uDD5A\u827B\u82E2\u8318\uD84F\uDE8B\uD85B\uDDA3\uD85A\uDF05\uD85A\uDF97\uD84D\uDDCE\u3DBF\u831D\u55EC\u8385\u450B\uD85B\uDDA5\u83AC\u83C1\u83D3\u347E\uD85B\uDED4\u6A57\u855A\u3496\uD85B\uDE42\uD84B\uDEEF\u8458\uD856\uDFE4\u8471\u3DD3\u44E4\u6AA7\u844A\uD84F\uDCB5\u7958\u84A8\uD85A\uDF96\uD85B\uDE77\uD85B\uDE43\u84DE\u840F\u8391\u44A0\u8493\u84E4\uD857\uDC91\u4240\uD857\uDCC0\u4543\u8534\u5AF2\uD85B\uDE99\u4527\u8573\u4516\u67BF\u8616\"],\n[\"8fa1\",\"\uD861\uDE25\uD861\uDE3B\u85C1\uD85C\uDC88\u8602\uD845\uDD82\uD85C\uDCCD\uD87E\uDDB2\u456A\u8628\u3648\uD846\uDCA2\u53F7\uD85C\uDF9A\u867E\u8771\uD868\uDCF8\u87EE\uD84B\uDC27\u87B1\u87DA\u880F\u5661\u866C\u6856\u460F\u8845\u8846\uD85D\uDDE0\uD84F\uDDB9\uD85D\uDDE4\u885E\u889C\u465B\u88B4\u88B5\u63C1\u88C5\u7777\uD85D\uDF0F\u8987\u898A\u89A6\u89A9\u89A7\u89BC\uD862\uDE25\u89E7\uD85E\uDD24\uD85E\uDEBD\u8A9C\u7793\u91FE\u8A90\uD85E\uDE59\u7AE9\uD85E\uDF3A\uD84F\uDF8F\u4713\uD85E\uDF38\u717C\u8B0C\u8B1F\uD855\uDC30\uD855\uDD65\u8B3F\u8B4C\u8B4D\u8AA9\uD852\uDE7A\u8B90\u8B9B\u8AAF\uD845\uDEDF\u4615\u884F\u8C9B\uD85F\uDD54\uD85F\uDD8F\uD87E\uDDD4\u3725\uD85F\uDD53\u8CD6\uD85F\uDD98\uD85F\uDDBD\u8D12\u8D03\uD846\uDD10\u8CDB\u705C\u8D11\uD853\uDCC9\u3ED0\u8D77\"],\n[\"9040\",\"\u8DA9\uD860\uDC02\uD844\uDC14\uD852\uDD8A\u3B7C\uD860\uDDBC\uD85C\uDD0C\u7AE7\u8EAD\u8EB6\u8EC3\u92D4\u8F19\u8F2D\uD860\uDF65\uD861\uDC12\u8FA5\u9303\uD868\uDE9F\uD842\uDE50\u8FB3\u492A\uD862\uDDDE\uD861\uDD3D\uD84F\uDDBB\u5EF8\uD84C\uDE62\u8FF9\uD868\uDC14\uD861\uDEBC\uD861\uDD01\uD848\uDF25\u3980\uD85B\uDED7\u9037\uD861\uDD3C\uD85E\uDEBE\u9061\uD861\uDD6C\uD861\uDE0B\u90A8\uD861\uDF13\u90C4\uD861\uDEE6\u90AE\u90FD\u9167\u3AF0\u91A9\u91C4\u7CAC\uD862\uDD33\uD847\uDE89\u920E\u6C9F\u9241\u9262\uD855\uDDB9\u92B9\uD862\uDEC6\uD84F\uDC9B\uD862\uDF0C\uD855\uDDDB\"],\n[\"90a1\",\"\uD843\uDD31\u932C\u936B\uD862\uDEE1\uD862\uDFEB\u708F\u5AC3\uD862\uDEE2\uD862\uDEE5\u4965\u9244\uD862\uDFEC\uD863\uDC39\uD862\uDFFF\u9373\u945B\u8EBC\u9585\u95A6\u9426\u95A0\u6FF6\u42B9\uD849\uDE7A\uD861\uDED8\uD844\uDE7C\uD84F\uDE2E\u49DF\u6C1C\u967B\u9696\u416C\u96A3\uD85B\uDED5\u61DA\u96B6\u78F5\uD862\uDEE0\u96BD\u53CC\u49A1\uD85B\uDCB8\uD840\uDE74\uD859\uDC10\uD864\uDCAF\uD864\uDCE5\uD852\uDED1\uD846\uDD15\uD84C\uDF0A\u9731\u8642\u9736\u4A0F\u453D\u4585\uD852\uDEE9\u7075\u5B41\u971B\u975C\uD864\uDDD5\u9757\u5B4A\uD864\uDDEB\u975F\u9425\u50D0\uD84C\uDCB7\uD84C\uDCBC\u9789\u979F\u97B1\u97BE\u97C0\u97D2\u97E0\uD855\uDC6C\u97EE\u741C\uD865\uDC33\u97FF\u97F5\uD865\uDC1D\uD85E\uDD7A\u4AD1\u9834\u9833\u984B\u9866\u3B0E\uD85C\uDD75\u3D51\uD841\uDE30\uD850\uDD5C\"],\n[\"9140\",\"\uD855\uDF06\u98CA\u98B7\u98C8\u98C7\u4AFF\uD85B\uDD27\uD845\uDED3\u55B0\u98E1\u98E6\u98EC\u9378\u9939\uD852\uDE29\u4B72\uD866\uDC57\uD866\uDD05\u99F5\u9A0C\u9A3B\u9A10\u9A58\uD855\uDF25\u36C4\uD864\uDCB1\uD866\uDFD5\u9AE0\u9AE2\uD866\uDF05\u9AF4\u4C0E\u9B14\u9B2D\uD861\uDE00\u5034\u9B34\uD85A\uDDA8\u38C3\uD84C\uDC7D\u9B50\u9B40\uD867\uDD3E\u5A45\uD846\uDC63\u9B8E\uD850\uDE4B\u9C02\u9BFF\u9C0C\uD867\uDE68\u9DD4\uD867\uDFB7\uD868\uDD92\uD868\uDDAB\uD868\uDCE1\uD868\uDD23\uD868\uDDDF\u9D7E\u9D83\uD868\uDD34\u9E0E\u6888\"],\n[\"91a1\",\"\u9DC4\uD848\uDD5B\uD868\uDD93\uD868\uDE20\uD846\uDD3B\uD868\uDE33\u9D39\uD868\uDCB9\uD868\uDEB4\u9E90\u9E95\u9E9E\u9EA2\u4D34\u9EAA\u9EAF\uD850\uDF64\u9EC1\u3B60\u39E5\u3D1D\u4F32\u37BE\uD863\uDC2B\u9F02\u9F08\u4B96\u9424\uD85B\uDDA2\u9F17\u9F16\u9F39\u569F\u568A\u9F45\u99B8\uD864\uDC8B\u97F2\u847F\u9F62\u9F69\u7ADC\u9F8E\u7216\u4BBE\uD852\uDD75\uD852\uDDBB\u7177\uD852\uDDF8\uD850\uDF48\uD852\uDE51\u739E\uD862\uDFDA\uD846\uDCFA\u799F\uD862\uDD7E\uD863\uDE36\u9369\u93F3\uD862\uDE44\u92EC\u9381\u93CB\uD862\uDD6C\uD851\uDCB9\u7217\u3EEB\u7772\u7A43\u70D0\uD851\uDC73\uD850\uDFF8\u717E\uD845\uDFEF\u70A3\uD846\uDCBE\uD84D\uDD99\u3EC7\uD846\uDC85\uD855\uDC2F\uD845\uDFF8\u3722\uD845\uDEFB\uD846\uDC39\u36E1\uD845\uDF74\uD846\uDCD1\uD857\uDF4B\u3723\uD845\uDEC0\u575B\uD852\uDE25\uD844\uDFFE\uD844\uDEA8\"],\n[\"9240\",\"\uD844\uDFC6\uD845\uDCB6\u8503\uD84D\uDEA6\u8503\u8455\uD852\uDD94\uD85C\uDD65\uD84F\uDE31\uD855\uDD5C\uD84F\uDEFB\uD85C\uDC52\u44F4\uD84D\uDEEE\uD866\uDD9D\uD85B\uDF26\u67F9\u3733\u3C15\u3DE7\u586C\uD846\uDD22\u6810\u4057\uD84D\uDF3F\uD850\uDCE1\uD850\uDC8B\uD850\uDD0F\uD85B\uDC21\u54CB\u569E\uD859\uDEB1\u5692\uD843\uDFDF\uD842\uDFA8\uD843\uDE0D\u93C6\uD862\uDF13\u939C\u4EF8\u512B\u3819\uD851\uDC36\u4EBC\uD841\uDC65\uD840\uDF7F\u4F4B\u4F8A\uD855\uDE51\u5A68\uD840\uDDAB\uD840\uDFCB\u3999\uD840\uDF0A\uD841\uDC14\u3435\u4F29\uD840\uDEC0\uD863\uDEB3\uD840\uDE75\u8ADA\uD840\uDE0C\u4E98\"],\n[\"92a1\",\"\u50CD\u510D\u4FA2\u4F03\uD852\uDE0E\uD84F\uDE8A\u4F42\u502E\u506C\u5081\u4FCC\u4FE5\u5058\u50FC\u5159\u515B\u515D\u515E\u6E76\uD84D\uDD95\uD84F\uDE39\uD84F\uDEBF\u6D72\uD846\uDC84\uD84F\uDE89\u51A8\u51C3\uD841\uDDE0\u44DD\uD841\uDCA3\uD841\uDC92\uD841\uDC91\u8D7A\uD862\uDE9C\uD841\uDF0E\u5259\u52A4\uD842\uDC73\u52E1\u936E\u467A\u718C\uD850\uDF8C\uD843\uDC20\uD852\uDDAC\uD844\uDCE4\u69D1\uD843\uDE1D\u7479\u3EDE\u7499\u7414\u7456\u7398\u4B8E\uD852\uDEBC\uD850\uDC8D\u53D0\u3584\u720F\uD850\uDCC9\u55B4\uD840\uDF45\u54CD\uD842\uDFC6\u571D\u925D\u96F4\u9366\u57DD\u578D\u577F\u363E\u58CB\u5A99\uD862\uDE46\uD845\uDEFA\uD845\uDF6F\uD845\uDF10\u5A2C\u59B8\u928F\u5A7E\u5ACF\u5A12\uD856\uDD46\uD846\uDDF3\uD846\uDC61\uD850\uDE95\u36F5\u6D05\u7443\u5A21\uD857\uDE83\"],\n[\"9340\",\"\u5A81\uD862\uDFD7\uD841\uDC13\u93E0\u748C\uD844\uDF03\u7105\u4972\u9408\uD862\uDDFB\u93BD\u37A0\u5C1E\u5C9E\u5E5E\u5E48\uD846\uDD96\uD846\uDD7C\uD84E\uDEEE\u5ECD\u5B4F\uD846\uDD03\uD846\uDD04\u3701\uD846\uDCA0\u36DD\uD845\uDEFE\u36D3\u812A\uD862\uDE47\uD847\uDDBA\uD84D\uDC72\uD862\uDDA8\u5F0C\u5F0E\uD846\uDD27\uD845\uDFAB\u5A6B\uD845\uDF3B\u5B44\u8614\uD85D\uDDFD\u8860\u607E\uD84A\uDC60\uD849\uDE2B\u5FDB\u3EB8\uD849\uDDAF\uD849\uDDBE\uD864\uDC88\uD85B\uDF73\u61C0\uD840\uDC3E\uD840\uDC46\uD849\uDE1B\u6199\u6198\u6075\uD84B\uDC9B\uD84B\uDD07\uD851\uDED4\uD864\uDD4D\"],\n[\"93a1\",\"\u6471\uD851\uDE65\uD84A\uDF6A\u3A29\uD84A\uDF22\uD84D\uDC50\uD866\uDCEA\uD84B\uDE78\u6337\uD869\uDC5B\u64B6\u6331\u63D1\uD852\uDDE3\uD84B\uDD67\u62A4\uD84B\uDCA1\u643B\u656B\u6972\u3BF4\uD84C\uDC8E\uD84C\uDEAD\uD852\uDD89\uD84C\uDEAB\u550D\uD84C\uDEE0\uD846\uDCD9\uD865\uDC3F\u66CE\uD84C\uDE89\uD84C\uDDB3\u3AE0\u4190\uD855\uDD84\uD862\uDF22\uD855\uDD8F\uD845\uDEFC\uD855\uDD5B\uD855\uDC25\u78EE\uD84C\uDD03\uD846\uDC2A\uD84C\uDE34\u3464\uD84C\uDE0F\uD84C\uDD82\uD850\uDEC9\u668E\uD85B\uDD24\u666B\u4B93\u6630\uD85E\uDC70\uD847\uDDEB\u6663\uD84C\uDED2\uD84C\uDEE1\u661E\uD856\uDC72\u38D1\uD84E\uDC3A\uD84D\uDFBC\u3B99\uD84D\uDFA2\uD84C\uDFFE\u74D0\u3B96\u678F\uD851\uDE2A\u68B6\u681E\u3BC4\u6ABE\u3863\uD84D\uDFD5\uD851\uDC87\u6A33\u6A52\u6AC9\u6B05\uD846\uDD12\u6511\u6898\u6A4C\u3BD7\u6A7A\u6B57\uD84F\uDFC0\uD84F\uDC9A\u93A0\u92F2\uD862\uDFEA\uD862\uDECB\"],\n[\"9440\",\"\u9289\uD860\uDC1E\uD862\uDDDC\u9467\u6DA5\u6F0B\uD852\uDDEC\u6D67\uD84F\uDF7F\u3D8F\u6E04\uD850\uDC3C\u5A3D\u6E0A\u5847\u6D24\u7842\u713B\uD850\uDF1A\uD850\uDE76\u70F1\u7250\u7287\u7294\uD851\uDF8F\uD851\uDF25\u5179\uD852\uDEA4\uD841\uDDEB\u747A\uD84F\uDEF8\uD84D\uDE5F\uD852\uDE4A\uD852\uDD17\uD857\uDFE1\u3F06\u3EB1\uD852\uDEDF\uD863\uDC23\uD84F\uDF35\u60A7\u3EF3\u74CC\u743C\u9387\u7437\u449F\uD85B\uDDEA\u4551\u7583\u3F63\uD853\uDCD9\uD853\uDD06\u3F58\u7555\u7673\uD869\uDDC6\u3B19\u7468\uD862\uDECC\uD852\uDDAB\uD852\uDD8E\u3AFB\"],\n[\"94a1\",\"\u3DCD\uD852\uDE4E\u3EFF\uD852\uDDC5\uD852\uDCF3\u91FA\u5732\u9342\uD862\uDEE3\uD846\uDC64\u50DF\uD854\uDE21\uD854\uDDE7\u7778\uD84C\uDE32\u770E\u770F\u777B\uD851\uDE97\uD84D\uDF81\u3A5E\uD852\uDCF0\u7438\u749B\u3EBF\uD852\uDEBA\uD852\uDEC7\u40C8\uD852\uDE96\uD858\uDDAE\u9307\uD855\uDD81\u781E\u788D\u7888\u78D2\u73D0\u7959\uD85D\uDF41\uD855\uDEE3\u410E\u799B\u8496\u79A5\u6A2D\uD84F\uDEFA\u7A3A\u79F4\u416E\uD845\uDEE6\u4132\u9235\u79F1\uD843\uDD4C\uD852\uDD8C\uD840\uDE99\uD84F\uDDBA\uD845\uDF6E\u3597\u556B\u3570\u36AA\uD840\uDDD4\uD843\uDC0D\u7AE2\u5A59\uD849\uDEF5\uD856\uDEAF\uD856\uDE9C\u5A0D\uD840\uDE5B\u78F0\u5A2A\uD856\uDFC6\u7AFE\u41F9\u7C5D\u7C6D\u4211\uD856\uDFB3\uD857\uDEBC\uD857\uDEA6\u7CCD\uD852\uDDF9\uD845\uDFB0\u7C8E\u7C7C\u7CAE\u6AB2\u7DDC\u7E07\u7DD3\u7F4E\uD858\uDE61\"],\n[\"9540\",\"\uD858\uDD5C\uD85E\uDF48\u7D97\uD857\uDE82\u426A\uD85A\uDF75\uD842\uDD16\u67D6\uD840\uDC4E\uD84D\uDDCF\u57C4\uD859\uDC12\uD858\uDFF8\uD852\uDD62\u7FDD\u7B27\uD842\uDC2C\uD856\uDEE9\uD857\uDD43\u7B0C\uD857\uDE0E\u99E6\u8645\u9A63\u6A1C\uD84D\uDC3F\u39E2\uD852\uDDF7\uD859\uDDAD\u9A1F\uD859\uDDA0\u8480\uD85C\uDD27\uD85B\uDCD1\u44EA\u8137\u4402\u80C6\u8109\u8142\uD859\uDFB4\u98C3\uD85A\uDE42\u8262\u8265\uD85A\uDE51\u8453\uD85B\uDDA7\u8610\uD85C\uDE1B\u5A86\u417F\uD846\uDC40\u5B2B\uD846\uDCA1\u5AE4\uD846\uDCD8\u86A0\uD87E\uDDBC\uD84F\uDD8F\u882D\uD85D\uDC22\u5A02\"],\n[\"95a1\",\"\u886E\u4F45\u8887\u88BF\u88E6\u8965\u894D\uD855\uDE83\u8954\uD85D\uDF85\uD85D\uDF84\uD862\uDFF5\uD862\uDFD9\uD862\uDF9C\uD862\uDDF9\u3EAD\u84A3\u46F5\u46CF\u37F2\u8A3D\u8A1C\uD865\uDC48\u5F4D\u922B\uD850\uDE84\u65D4\u7129\u70C4\uD846\uDC45\u9D6D\u8C9F\u8CE9\uD85F\uDDDC\u599A\u77C3\u59F0\u436E\u36D4\u8E2A\u8EA7\uD853\uDC09\u8F30\u8F4A\u42F4\u6C58\u6FBB\uD848\uDF21\u489B\u6F79\u6E8B\uD845\uDFDA\u9BE9\u36B5\uD852\uDD2F\u90BB\u9097\u5571\u4906\u91BB\u9404\uD862\uDE4B\u4062\uD862\uDEFC\u9427\uD863\uDC1D\uD863\uDC3B\u84E5\u8A2B\u9599\u95A7\u9597\u9596\uD863\uDD34\u7445\u3EC2\uD852\uDCFF\uD852\uDE42\uD850\uDFEA\u3EE7\uD84C\uDE25\u968F\uD863\uDEE7\uD863\uDE66\uD863\uDE65\u3ECC\uD852\uDDED\uD852\uDE78\uD84F\uDFEE\u7412\u746B\u3EFC\u9741\uD864\uDCB0\"],\n[\"9640\",\"\u6847\u4A1D\uD864\uDC93\uD855\uDFDF\u975D\u9368\uD862\uDD89\uD863\uDC26\uD862\uDF2F\uD858\uDFBE\u92BA\u5B11\u8B69\u493C\u73F9\uD850\uDE1B\u979B\u9771\u9938\uD843\uDF26\u5DC1\uD862\uDFC5\uD852\uDEB2\u981F\uD865\uDCDA\u92F6\uD865\uDDD7\u91E5\u44C0\uD862\uDF50\uD852\uDE67\uD862\uDF64\u98DC\uD862\uDE45\u3F00\u922A\u4925\u8414\u993B\u994D\uD85E\uDF06\u3DFD\u999B\u4B6F\u99AA\u9A5C\uD862\uDF65\uD856\uDCC8\u6A8F\u9A21\u5AFE\u9A2F\uD866\uDCF1\u4B90\uD866\uDD48\u99BC\u4BBD\u4B97\u937D\u5872\uD844\uDF02\u5822\uD852\uDDB8\"],\n[\"96a1\",\"\uD845\uDCE8\u7844\uD849\uDF1F\uD84F\uDDB8\u68C5\u3D7D\u9458\u3927\u6150\uD849\uDF81\uD84A\uDD6B\u6107\u9C4F\u9C53\u9C7B\u9C35\u9C10\u9B7F\u9BCF\uD867\uDE2D\u9B9F\uD868\uDDF5\uD868\uDCFE\u9D21\u4CAE\uD850\uDD04\u9E18\u4CB0\u9D0C\uD868\uDDB4\uD868\uDCED\uD868\uDCF3\uD866\uDD2F\u9DA5\u84BD\uD85B\uDE12\uD85B\uDFDF\uD85A\uDF82\u85FC\u4533\uD85B\uDDA4\uD85B\uDE84\uD85B\uDDF0\u8420\u85EE\uD85B\uDE00\uD84D\uDFD7\uD858\uDC64\u79E2\uD84D\uDD9C\uD84D\uDE40\u492D\uD852\uDDDE\u3D62\u93DB\u92BE\u9348\uD840\uDEBF\u78B9\u9277\u944D\u4FE4\u3440\u9064\uD855\uDD5D\u783D\u7854\u78B6\u784B\uD845\uDF57\uD84C\uDDC9\uD852\uDD41\u369A\u4F72\u6FDA\u6FD9\u701E\u701E\u5414\uD850\uDDB5\u57BB\u58F3\u578A\u9D16\u57D7\u7134\u34AF\uD850\uDDAC\u71EB\uD85B\uDC40\uD853\uDF97\u5B28\uD845\uDFB5\uD862\uDE49\"],\n[\"9740\",\"\u610C\u5ACE\u5A0B\u42BC\uD851\uDC88\u372C\u4B7B\uD862\uDDFC\u93BB\u93B8\uD846\uDCD6\uD843\uDF1D\u8472\uD85B\uDCC0\uD845\uDC13\uD850\uDEFA\uD84B\uDC26\uD850\uDFC1\u5994\uD84F\uDDB7\uD859\uDF41\u7DA8\uD858\uDD5B\uD858\uDCA4\uD852\uDDB9\uD852\uDD8B\uD862\uDDFA\u92E5\u73E2\u3EE9\u74B4\uD862\uDF63\uD846\uDC9F\u3EE1\uD852\uDEB3\u6AD8\u73F3\u73FB\u3ED6\uD852\uDE3E\uD852\uDE94\uD845\uDFD9\uD852\uDE66\uD840\uDFA7\uD845\uDC24\uD852\uDDE5\u7448\uD852\uDD16\u70A5\uD852\uDD76\u9284\u73E6\u935F\uD841\uDCFE\u9331\uD862\uDECE\uD862\uDE16\u9386\uD862\uDFE7\uD855\uDDD5\u4935\uD862\uDE82\u716B\"],\n[\"97a1\",\"\uD852\uDD43\uD843\uDCFF\u56A4\uD841\uDE1A\uD842\uDFEB\uD843\uDCB8\u5502\u79C4\uD845\uDFFA\u7DFE\uD845\uDEC2\uD852\uDE50\uD846\uDC52\u452E\u9401\u370A\uD862\uDEC0\uD852\uDDAD\u59B0\uD846\uDCBF\uD846\uDC83\uD85D\uDC84\u5AA1\u36E2\uD84F\uDD5B\u36B0\u925F\u5A79\uD862\uDE81\uD846\uDC62\u9374\u3CCD\uD842\uDEB4\u4A96\u398A\u50F4\u3D69\u3D4C\uD844\uDF9C\u7175\u42FB\uD860\uDE18\u6E0F\uD864\uDCE4\u44EB\u6D57\uD85F\uDE4F\u7067\u6CAF\u3CD6\uD84F\uDFED\uD84F\uDE2D\u6E02\u6F0C\u3D6F\uD840\uDFF5\u7551\u36BC\u34C8\u4680\u3EDA\u4871\u59C4\u926E\u493E\u8F41\uD863\uDC1C\uD85A\uDFC0\u5812\u57C8\u36D6\uD845\uDC52\u70FE\uD850\uDF62\uD852\uDE71\uD84B\uDFE3\uD844\uDEB0\uD848\uDFBD\u68B9\u6967\uD844\uDF98\uD84D\uDCE5\uD85E\uDFF4\uD84D\uDEDF\uD862\uDE83\uD84D\uDFD6\uD84C\uDFFA\uD853\uDC9F\u6A1A\uD84D\uDEAD\uD85B\uDCB7\u843E\u44DF\u44CE\"],\n[\"9840\",\"\uD85B\uDD26\uD85B\uDD51\uD85B\uDC82\uD85B\uDFDE\u6F17\uD85C\uDD09\u833D\uD845\uDF3A\u83ED\uD85B\uDC80\uD85C\uDC53\uD845\uDFDB\u5989\u5A82\uD845\uDFB3\u5A61\u5A71\uD846\uDD05\uD850\uDDFC\u372D\u59EF\uD845\uDF3C\u36C7\u718E\u9390\u669A\uD850\uDEA5\u5A6E\u5A2B\uD850\uDE93\u6A2B\uD84F\uDEF9\uD85D\uDF36\uD851\uDC5B\uD850\uDECA\u711D\uD850\uDE59\uD862\uDDE1\u4FB0\uD85B\uDD28\u5CC2\uD851\uDCCE\uD85F\uDE4D\uD850\uDFBD\u6A0C\uD850\uDE56\uD844\uDF04\u70A6\u7133\uD850\uDFE9\u3DA5\u6CDF\uD87E\uDC25\uD852\uDE4F\u7E65\u59EB\u5D2F\u3DF3\u5F5C\uD852\uDE5D\uD845\uDFDF\u7DA4\u8426\"],\n[\"98a1\",\"\u5485\uD84E\uDEFA\uD84C\uDF00\uD840\uDE14\u577E\uD842\uDCD5\uD841\uDE19\u3FE5\uD847\uDF9E\uD868\uDEB6\u7003\uD864\uDD5B\u5D70\u738F\u7CD3\uD862\uDE59\uD865\uDC20\u4FC8\u7FE7\u72CD\u7310\uD85E\uDEF4\u7338\u7339\uD855\uDEF6\u7341\u7348\u3EA9\uD85E\uDF18\u906C\u71F5\uD852\uDCF2\u73E1\u81F6\u3ECA\u770C\u3ED1\u6CA2\u56FD\u7419\u741E\u741F\u3EE2\u3EF0\u3EF4\u3EFA\u74D3\u3F0E\u3F53\u7542\u756D\u7572\u758D\u3F7C\u75C8\u75DC\u3FC0\u764D\u3FD7\u7674\u3FDC\u767A\uD853\uDF5C\u7188\u5623\u8980\u5869\u401D\u7743\u4039\u6761\u4045\u35DB\u7798\u406A\u406F\u5C5E\u77BE\u77CB\u58F2\u7818\u70B9\u781C\u40A8\u7839\u7847\u7851\u7866\u8448\uD855\uDD35\u7933\u6803\u7932\u4103\"],\n[\"9940\",\"\u4109\u7991\u7999\u8FBB\u7A06\u8FBC\u4167\u7A91\u41B2\u7ABC\u8279\u41C4\u7ACF\u7ADB\u41CF\u4E21\u7B62\u7B6C\u7B7B\u7C12\u7C1B\u4260\u427A\u7C7B\u7C9C\u428C\u7CB8\u4294\u7CED\u8F93\u70C0\uD843\uDCCF\u7DCF\u7DD4\u7DD0\u7DFD\u7FAE\u7FB4\u729F\u4397\u8020\u8025\u7B39\u802E\u8031\u8054\u3DCC\u57B4\u70A0\u80B7\u80E9\u43ED\u810C\u732A\u810E\u8112\u7560\u8114\u4401\u3B39\u8156\u8159\u815A\"],\n[\"99a1\",\"\u4413\u583A\u817C\u8184\u4425\u8193\u442D\u81A5\u57EF\u81C1\u81E4\u8254\u448F\u82A6\u8276\u82CA\u82D8\u82FF\u44B0\u8357\u9669\u698A\u8405\u70F5\u8464\u60E3\u8488\u4504\u84BE\u84E1\u84F8\u8510\u8538\u8552\u453B\u856F\u8570\u85E0\u4577\u8672\u8692\u86B2\u86EF\u9645\u878B\u4606\u4617\u88AE\u88FF\u8924\u8947\u8991\uD85E\uDD67\u8A29\u8A38\u8A94\u8AB4\u8C51\u8CD4\u8CF2\u8D1C\u4798\u585F\u8DC3\u47ED\u4EEE\u8E3A\u55D8\u5754\u8E71\u55F5\u8EB0\u4837\u8ECE\u8EE2\u8EE4\u8EED\u8EF2\u8FB7\u8FC1\u8FCA\u8FCC\u9033\u99C4\u48AD\u98E0\u9213\u491E\u9228\u9258\u926B\u92B1\u92AE\u92BF\"],\n[\"9a40\",\"\u92E3\u92EB\u92F3\u92F4\u92FD\u9343\u9384\u93AD\u4945\u4951\u9EBF\u9417\u5301\u941D\u942D\u943E\u496A\u9454\u9479\u952D\u95A2\u49A7\u95F4\u9633\u49E5\u67A0\u4A24\u9740\u4A35\u97B2\u97C2\u5654\u4AE4\u60E8\u98B9\u4B19\u98F1\u5844\u990E\u9919\u51B4\u991C\u9937\u9942\u995D\u9962\u4B70\u99C5\u4B9D\u9A3C\u9B0F\u7A83\u9B69\u9B81\u9BDD\u9BF1\u9BF4\u4C6D\u9C20\u376F\uD846\uDFC2\u9D49\u9C3A\"],\n[\"9aa1\",\"\u9EFE\u5650\u9D93\u9DBD\u9DC0\u9DFC\u94F6\u8FB6\u9E7B\u9EAC\u9EB1\u9EBD\u9EC6\u94DC\u9EE2\u9EF1\u9EF8\u7AC8\u9F44\uD840\uDC94\uD840\uDEB7\uD840\uDFA0\u691A\u94C3\u59AC\uD841\uDCD7\u5840\u94C1\u37B9\uD841\uDDD5\uD841\uDE15\uD841\uDE76\uD845\uDEBA\u5757\u7173\uD842\uDEC2\uD842\uDECD\uD842\uDFBF\u546A\uD87E\uDC3B\uD842\uDFCB\u549E\uD842\uDFFB\uD843\uDC3B\uD843\uDC53\uD843\uDC65\uD843\uDC7C\u60E7\uD843\uDC8D\u567A\uD843\uDCB5\uD843\uDCDD\uD843\uDCED\uD843\uDD6F\uD843\uDDB2\uD843\uDDC8\u6955\u9C2F\u87A5\uD843\uDE04\uD843\uDE0E\uD843\uDED7\uD843\uDF90\uD843\uDF2D\uD843\uDE73\u5C20\uD843\uDFBC\u5E0B\uD844\uDC5C\uD844\uDC4F\uD844\uDC76\u671E\uD844\uDC7B\uD844\uDC88\uD844\uDC96\u3647\uD844\uDCBF\uD844\uDCD3\uD844\uDD2F\uD844\uDD3B\u5364\u84AD\uD844\uDEE3\uD844\uDF75\uD844\uDF36\u8B81\uD845\uDD77\uD845\uDE19\uD845\uDFC3\uD845\uDFC7\u4E78\u70BB\uD846\uDC2D\uD846\uDD6A\"],\n[\"9b40\",\"\uD846\uDE2D\uD846\uDE45\uD847\uDC2A\uD847\uDC70\uD847\uDCAC\uD847\uDEC8\u62C3\uD847\uDED5\uD847\uDF15\u7198\u6855\uD848\uDC45\u69E9\u36C8\uD848\uDE7C\uD848\uDFD7\uD848\uDFFA\uD849\uDF2A\uD84A\uDC71\uD84A\uDD4F\u82FD\uD84A\uDD67\uD84A\uDD93\uD84A\uDED5\u89A5\uD84A\uDEE8\u8FA0\uD84A\uDF0E\u97B8\uD84A\uDF3F\u9847\u9ABD\uD84B\uDC4C\"],\n[\"9b62\",\"\uD84B\uDC88\uD84B\uDCB7\uD856\uDFE8\uD84B\uDD08\uD84B\uDD12\uD84B\uDDB7\uD84B\uDD95\uD84B\uDE42\uD84B\uDF74\uD84B\uDFCC\uD84C\uDC33\uD84C\uDC66\uD84C\uDF1F\uD84C\uDFDE\u5FB1\u6648\u66BF\uD85E\uDE79\uD84D\uDD67\uD84D\uDDF3\u7201\uD852\uDDBA\u77D7\uD84D\uDE1A\uD84D\uDF16\u7E87\uD840\uDF46\u58B5\u670E\"],\n[\"9ba1\",\"\u6918\uD84E\uDEA7\uD85D\uDE57\uD857\uDFE2\uD84F\uDE11\uD84F\uDEB9\uD85D\uDDFE\uD848\uDC9A\u48D0\u4AB8\uD850\uDD19\uD862\uDE9A\uD850\uDEEE\uD850\uDF0D\uD850\uDC3B\uD850\uDF34\uD850\uDF96\uD852\uDE45\uD841\uDDCA\u51D2\uD841\uDE11\u599F\uD847\uDEA8\u3BBE\uD84F\uDCFF\uD851\uDC04\uD851\uDCD6\u5788\uD851\uDE74\u399B\uD851\uDF2F\uD861\uDDE8\uD866\uDDC9\u3762\uD848\uDDC3\u8B5E\uD862\uDF4E\u99D6\uD852\uDC12\uD852\uDCFB\uD852\uDE15\u7209\uD852\uDEC0\uD843\uDC78\u5965\uD853\uDEA5\uD853\uDF86\uD841\uDF79\u8EDA\uD854\uDC2C\u528F\u573F\u7171\uD854\uDE99\uD855\uDC19\uD84F\uDF4A\uD852\uDEA7\u55BC\uD855\uDC46\uD855\uDC6E\uD85A\uDF52\u91D4\u3473\uD855\uDD3F\uD85D\uDE32\uD855\uDD5E\u4718\uD855\uDD62\uD855\uDD66\uD855\uDFC7\uD852\uDD3F\uD856\uDC5D\u5066\u34FB\uD84C\uDFCC\u60DE\uD856\uDD03\u477C\uD862\uDD48\uD856\uDEAE\uD856\uDF89\uD857\uDC06\uD847\uDD90\u57A1\u7151\u6FB6\uD858\uDD02\uD85F\uDC12\u9056\uD858\uDDB2\uD853\uDF9A\u8B62\uD859\uDC02\uD859\uDC4A\"],\n[\"9c40\",\"\u5D5B\uD85A\uDFF7\u8F36\uD859\uDC84\uD846\uDD1C\u8AEA\uD852\uDDF6\uD859\uDC88\uD84F\uDFEF\uD859\uDD12\u4BC0\uD859\uDDBF\uD859\uDEB5\uD849\uDF1B\u9465\uD855\uDFE1\u6195\u5A27\uD87E\uDCCD\u4FBB\u56B9\uD851\uDD21\uD859\uDEFC\u4E6A\uD852\uDD34\u9656\u6D8F\uD85B\uDCBD\u3618\u8977\uD859\uDF99\uD85A\uDC6E\uD859\uDC11\uD85A\uDC5E\u71DF\uD85A\uDCC7\u7B42\uD864\uDCC0\uD842\uDE11\uD85A\uDD26\u9104\uD85A\uDD39\u7A45\u9DF0\uD85A\uDDFA\u9A26\uD85A\uDE2D\u365F\uD859\uDC69\uD840\uDC21\u7983\uD85A\uDE34\uD85A\uDF5B\u5D2C\uD84D\uDD19\u83CF\uD85A\uDF9D\u46D0\uD85B\uDCA4\u753B\u8865\uD85B\uDDAE\u58B6\"],\n[\"9ca1\",\"\u371C\uD849\uDD8D\uD85C\uDC4B\uD85C\uDDCD\u3C54\uD85C\uDE80\uD85C\uDE85\u9281\uD848\uDD7A\uD85C\uDE8B\u9330\uD85C\uDEE6\uD852\uDDD0\u6C39\u949F\uD85D\uDC50\uD843\uDEF8\u8827\u88F5\uD84A\uDD26\uD861\uDC73\uD845\uDFB1\u6EB8\uD852\uDE2A\uD846\uDC20\u39A4\u36B9\u5C10\u79E3\u453F\u66B6\uD867\uDCAD\uD866\uDCA4\u8943\uD85D\uDFCC\uD85E\uDC58\u56D6\u40DF\uD845\uDE0A\u39A1\uD84D\uDF2F\uD860\uDCE8\uD844\uDFC5\u71AD\u8366\uD85E\uDDDD\uD864\uDDA8\u5A67\u4CB7\uD85C\uDCAF\uD862\uDDAB\uD85E\uDDFD\uD85E\uDE0A\uD85E\uDF0B\uD85F\uDD66\uD850\uDD7A\u7B43\u797E\uD860\uDC09\u6FB5\uD868\uDEDF\u6A03\uD860\uDF18\u53A2\uD85B\uDE07\u93BF\u6836\u975D\uD860\uDD6F\uD860\uDC23\uD85A\uDDB5\uD844\uDFED\uD84C\uDE2F\uD860\uDC48\u5D85\uD863\uDC30\uD860\uDC83\u5715\u9823\uD862\uDD49\u5DAB\uD852\uDD88\u65BE\u69D5\u53D2\uD852\uDEA5\uD84F\uDF81\u3C11\u6736\uD860\uDC90\uD860\uDCF4\uD860\uDD2E\uD847\uDFA1\uD860\uDD4F\"],\n[\"9d40\",\"\uD860\uDD89\uD860\uDDAF\uD860\uDE1A\uD860\uDF06\uD860\uDF2F\uD860\uDF8A\u35CA\uD861\uDC68\uD861\uDEAA\u48FA\u63E6\uD862\uDD56\u7808\u9255\uD862\uDDB8\u43F2\uD862\uDDE7\u43DF\uD862\uDDE8\uD862\uDF46\uD862\uDFD4\u59F8\uD863\uDC09\u8F0B\uD863\uDFC5\uD864\uDCEC\u7B51\uD864\uDD10\uD864\uDD3C\u3DF7\uD864\uDD5E\uD852\uDECA\u8FD0\u728F\u568B\uD865\uDCE7\uD865\uDDE9\uD865\uDDB0\uD865\uDDB8\uD865\uDF32\uD866\uDCD1\uD866\uDD49\uD866\uDD6A\uD866\uDDC3\uD866\uDE28\uD866\uDF0E\uD867\uDD5A\uD867\uDD9B\u7E9F\uD867\uDEF8\uD867\uDF23\u4CA4\u9547\uD868\uDE93\u71A2\uD868\uDEFF\u4D91\u9012\uD869\uDDCB\u4D9C\uD843\uDC9C\u8FBE\u55C1\"],\n[\"9da1\",\"\u8FBA\uD849\uDCB0\u8FB9\uD852\uDE93\u4509\u7E7F\u6F56\u6AB1\u4EEA\u34E4\uD862\uDF2C\uD85E\uDC9D\u373A\u8E80\uD845\uDFF5\uD860\uDC24\uD862\uDF6C\uD862\uDF99\uD85E\uDE3E\uD859\uDEAF\u3DEB\uD85D\uDE55\uD84F\uDCB7\uD855\uDE35\uD856\uDD56\u4E9A\uD857\uDE81\uD858\uDE58\u56BF\uD843\uDE6D\u8E0E\u5B6D\uD84F\uDE88\uD853\uDC9E\u63DE\u62D0\uD845\uDFF6\uD846\uDC7B\u6530\u562D\uD857\uDC4A\u541A\uD854\uDF11\u3DC6\uD867\uDD98\u4C7D\u5622\u561E\u7F49\uD857\uDED8\u5975\uD84F\uDD40\u8770\u4E1C\uD843\uDFEA\uD843\uDD49\uD84D\uDEBA\u8117\u9D5E\u8D18\u763B\u9C45\u764E\u77B9\u9345\u5432\u8148\u82F7\u5625\u8132\u8418\u80BD\u55EA\u7962\u5643\u5416\uD843\uDE9D\u35CE\u5605\u55F1\u66F1\uD860\uDEE2\u362D\u7534\u55F0\u55BA\u5497\u5572\uD843\uDC41\uD843\uDC96\u5ED0\uD854\uDD48\uD843\uDE76\uD84B\uDC62\"],\n[\"9e40\",\"\uD843\uDEA2\u9EAB\u7D5A\u55DE\uD844\uDC75\u629D\u976D\u5494\u8CCD\u71F6\u9176\u63FC\u63B9\u63FE\u5569\uD84A\uDF43\u9C72\uD84B\uDEB3\u519A\u34DF\uD843\uDDA7\u51A7\u544D\u551E\u5513\u7666\u8E2D\uD85A\uDC8A\u75B1\u80B6\u8804\u8786\u88C7\u81B6\u841C\uD844\uDCC1\u44EC\u7304\uD851\uDF06\u5B90\u830B\uD85A\uDC93\u567B\uD849\uDEF4\uD85F\uDD2F\uD850\uDDA3\uD85F\uDD73\uD85B\uDED0\uD85C\uDEB6\u9170\uD844\uDDD9\u9208\uD84F\uDCFC\uD869\uDEA9\uD843\uDEAC\uD843\uDEF9\u7266\uD847\uDCA2\u474E\uD853\uDFC2\uD85F\uDFF9\uD843\uDFEB\u40FA\"],\n[\"9ea1\",\"\u9C5D\u651F\uD84B\uDDA0\u48F3\uD851\uDFE0\uD867\uDD7C\uD843\uDFEC\uD843\uDE0A\u6062\uD85D\uDDA3\uD843\uDFED\"],\n[\"9ead\",\"\uD858\uDC48\uD844\uDD87\u71A3\u7E8E\u9D50\u4E1A\u4E04\u3577\u5B0D\u6CB2\u5367\u36AC\u39DC\u537D\u36A5\uD851\uDE18\u589A\uD852\uDF6E\u822D\u544B\u57AA\uD856\uDE95\uD842\uDD79\"],\n[\"9ec5\",\"\u3A52\uD849\uDC65\u7374\uD867\uDEAC\u4D09\u9BED\uD84F\uDCFE\uD867\uDF30\u4C5B\uD853\uDFA9\uD865\uDD9E\uD867\uDFDE\u845C\uD84F\uDDB6\uD85C\uDEB2\uD859\uDFB3\uD84D\uDF20\u632E\u7D25\uD84F\uDEF7\uD84F\uDE2C\u3A2A\u9008\u52CC\u3E74\u367A\u45E9\uD841\uDC8E\u7640\u5AF0\uD843\uDEB6\u787A\uD85F\uDF2E\u58A7\u40BF\u567C\u9B8B\u5D74\u7654\uD869\uDC34\u9E85\u4CE1\u75F9\u37FB\u6119\uD84C\uDCDA\uD850\uDFF2\"],\n[\"9ef5\",\"\u565D\uD844\uDEA9\u57A7\uD852\uDD63\uD867\uDE06\u5234\uD85C\uDCAE\u35AD\u6C4A\u9D7C\"],\n[\"9f40\",\"\u7C56\u9B39\u57DE\uD845\uDF6C\u5C53\u64D3\uD865\uDCD0\uD858\uDF35\uD85C\uDD64\u86AD\uD843\uDD28\uD85B\uDD22\uD852\uDEE2\uD843\uDD71\"],\n[\"9f4f\",\"\u51FE\uD847\uDF0F\u5D8E\u9703\uD847\uDDD1\u9E81\u904C\u7B1F\u9B02\u5CD1\u7BA3\u6268\u6335\u9AFF\u7BCF\u9B2A\u7C7E\u9B2E\u7C42\u7C86\u9C15\u7BFC\u9B09\u9F17\u9C1B\uD852\uDD3E\u9F5A\u5573\u5BC3\u4FFD\u9E98\u4FF2\u5260\u3E06\u52D1\u5767\u5056\u59B7\u5E12\u97C8\u9DAB\u8F5C\u5469\u97B4\u9940\u97BA\u532C\u6130\"],\n[\"9fa1\",\"\u692C\u53DA\u9C0A\u9D02\u4C3B\u9641\u6980\u50A6\u7546\uD845\uDF6D\u99DA\u5273\"],\n[\"9fae\",\"\u9159\u9681\u915C\"],\n[\"9fb2\",\"\u9151\uD863\uDE97\u637F\uD85B\uDD23\u6ACA\u5611\u918E\u757A\u6285\uD840\uDFFC\u734F\u7C70\uD857\uDC21\uD84F\uDCFD\"],\n[\"9fc1\",\"\uD852\uDD19\u76D6\u9B9D\u4E2A\uD843\uDCD4\u83BE\u8842\"],\n[\"9fc9\",\"\u5C4A\u69C0\u50ED\u577A\u521F\u5DF5\u4ECE\u6C31\uD840\uDDF2\u4F39\u549C\u54DA\u529A\u8D82\u35FE\u5F0C\u35F3\"],\n[\"9fdb\",\"\u6B52\u917C\u9FA5\u9B97\u982E\u98B4\u9ABA\u9EA8\u9E84\u717A\u7B14\"],\n[\"9fe7\",\"\u6BFA\u8818\u7F78\"],\n[\"9feb\",\"\u5620\uD869\uDE4A\u8E77\u9F53\"],\n[\"9ff0\",\"\u8DD4\u8E4F\u9E1C\u8E01\u6282\uD860\uDF7D\u8E28\u8E75\u7AD3\uD852\uDE77\u7A3E\u78D8\u6CEA\u8A67\u7607\"],\n[\"a040\",\"\uD862\uDE5A\u9F26\u6CCE\u87D6\u75C3\uD868\uDEB2\u7853\uD87E\uDC40\u8D0C\u72E2\u7371\u8B2D\u7302\u74F1\u8CEB\uD852\uDEBB\u862F\u5FBA\u88A0\u44B7\"],\n[\"a055\",\"\uD846\uDC3B\uD85B\uDE05\"],\n[\"a058\",\"\u8A7E\uD849\uDD1B\"],\n[\"a05b\",\"\u60FD\u7667\u9AD7\u9D44\u936E\u9B8F\u87F5\"],\n[\"a063\",\"\u880F\u8CF7\u732C\u9721\u9BB0\u35D6\u72B2\u4C07\u7C51\u994A\uD858\uDD59\u6159\u4C04\u9E96\u617D\"],\n[\"a073\",\"\u575F\u616F\u62A6\u6239\u62CE\u3A5C\u61E2\u53AA\uD84C\uDFF5\u6364\u6802\u35D2\"],\n[\"a0a1\",\"\u5D57\uD862\uDFC2\u8FDA\uD863\uDE39\"],\n[\"a0a6\",\"\u50D9\uD847\uDD46\u7906\u5332\u9638\uD843\uDF3B\u4065\"],\n[\"a0ae\",\"\u77FE\"],\n[\"a0b0\",\"\u7CC2\uD857\uDF1A\u7CDA\u7A2D\u8066\u8063\u7D4D\u7505\u74F2\u8994\u821A\u670C\u8062\uD85D\uDC86\u805B\u74F0\u8103\u7724\u8989\uD859\uDFCC\u7553\uD85B\uDED1\u87A9\u87CE\u81C8\u878C\u8A49\u8CAD\u8B43\u772B\u74F8\u84DA\u3635\u69B2\u8DA6\"],\n[\"a0d4\",\"\u89A9\u7468\u6DB9\u87C1\uD850\uDC11\u74E7\u3DDB\u7176\u60A4\u619C\u3CD1\u7162\u6077\"],\n[\"a0e2\",\"\u7F71\uD862\uDF2D\u7250\u60E9\u4B7E\u5220\u3C18\uD84F\uDCC7\uD857\uDED7\uD85D\uDE56\uD855\uDD31\uD846\uDD44\uD844\uDEFE\uD866\uDD03\uD85B\uDDDC\uD85C\uDCAD\u5CC1\uD858\uDDAD\uD862\uDE0F\uD84D\uDE77\uD840\uDCEE\uD85A\uDC46\uD853\uDF0E\u4562\u5B1F\uD858\uDF4C\u9F50\u9EA6\uD858\uDE6B\"],\n[\"a3c0\",\"\u2400\",31,\"\u2421\"],\n[\"c6a1\",\"\u2460\",9,\"\u2474\",9,\"\u2170\",9,\"\u4E36\u4E3F\u4E85\u4EA0\u5182\u5196\u51AB\u52F9\u5338\u5369\u53B6\u590A\u5B80\u5DDB\u2F33\u5E7F\u5EF4\u5F50\u5F61\u6534\u65E0\u7592\u7676\u8FB5\u96B6\u00A8\u02C6\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\uFF3B\uFF3D\u273D\u3041\",23],\n[\"c740\",\"\u3059\",58,\"\u30A1\u30A2\u30A3\u30A4\"],\n[\"c7a1\",\"\u30A5\",81,\"\u0410\",5,\"\u0401\u0416\",4],\n[\"c840\",\"\u041B\",26,\"\u0451\u0436\",25,\"\u21E7\u21B8\u21B9\u31CF\uD840\uDCCC\u4E5A\uD840\uDC8A\u5202\u4491\"],\n[\"c8a1\",\"\u9FB0\u5188\u9FB1\uD85D\uDE07\"],\n[\"c8cd\",\"\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u309B\u309C\u2E80\u2E84\u2E86\u2E87\u2E88\u2E8A\u2E8C\u2E8D\u2E95\u2E9C\u2E9D\u2EA5\u2EA7\u2EAA\u2EAC\u2EAE\u2EB6\u2EBC\u2EBE\u2EC6\u2ECA\u2ECC\u2ECD\u2ECF\u2ED6\u2ED7\u2EDE\u2EE3\"],\n[\"c8f5\",\"\u0283\u0250\u025B\u0254\u0275\u0153\u00F8\u014B\u028A\u026A\"],\n[\"f9fe\",\"\uFFED\"],\n[\"fa40\",\"\uD841\uDD47\u92DB\uD841\uDDDF\uD84F\uDFC5\u854C\u42B5\u73EF\u51B5\u3649\uD852\uDD42\uD862\uDDE4\u9344\uD846\uDDDB\u82EE\uD84F\uDCC8\u783C\u6744\u62DF\uD852\uDD33\uD862\uDDAA\uD840\uDEA0\uD85A\uDFB3\uD844\uDF05\u4FAB\uD849\uDCED\u5008\uD85B\uDD29\uD85E\uDE84\uD84D\uDE00\uD852\uDEB1\uD849\uDD13\u5029\uD840\uDF7E\u5FA4\uD840\uDF80\uD840\uDF47\u6EDB\uD841\uDC1F\u507D\u5101\u347A\u510E\u986C\u3743\u8416\uD852\uDDA4\uD841\uDC87\u5160\uD84C\uDFB4\u516A\uD842\uDFFF\uD848\uDCFC\uD840\uDEE5\uD849\uDD30\uD841\uDD8E\uD84C\uDE33\uD846\uDD83\u5B82\u877D\uD841\uDDB3\uD84F\uDC99\u51B2\u51B8\"],\n[\"faa1\",\"\u9D34\u51C9\u51CF\u51D1\u3CDC\u51D3\uD852\uDEA6\u51B3\u51E2\u5342\u51ED\u83CD\u693E\uD84D\uDF2D\u5F7B\u520B\u5226\u523C\u52B5\u5257\u5294\u52B9\u52C5\u7C15\u8542\u52E0\u860D\uD85A\uDF13\u5305\uD862\uDEDE\u5549\u6ED9\uD84F\uDF80\uD842\uDD54\uD84F\uDFEC\u5333\u5344\uD842\uDFE2\u6CCB\uD845\uDF26\u681B\u73D5\u604A\u3EAA\u38CC\uD845\uDEE8\u71DD\u44A2\u536D\u5374\uD861\uDEAB\u537E\u537F\uD845\uDD96\uD845\uDE13\u77E6\u5393\uD862\uDE9B\u53A0\u53AB\u53AE\u73A7\uD855\uDF72\u3F59\u739C\u53C1\u53C5\u6C49\u4E49\u57FE\u53D9\u3AAB\uD842\uDF8F\u53E0\uD84F\uDFEB\uD84B\uDDA3\u53F6\uD843\uDC77\u5413\u7079\u552B\u6657\u6D5B\u546D\uD85A\uDF53\uD843\uDD74\u555D\u548F\u54A4\u47A6\uD845\uDF0D\uD843\uDEDD\u3DB4\uD843\uDD4D\"],\n[\"fb40\",\"\uD862\uDDBC\uD849\uDE98\u5547\u4CED\u542F\u7417\u5586\u55A9\u5605\uD846\uDCD7\uD850\uDC3A\u4552\uD851\uDC35\u66B3\uD844\uDCB4\u5637\u66CD\uD84C\uDE8A\u66A4\u66AD\u564D\u564F\u78F1\u56F1\u9787\u53FE\u5700\u56EF\u56ED\uD862\uDF66\u3623\uD844\uDE4F\u5746\uD850\uDDA5\u6C6E\u708B\u5742\u36B1\uD85B\uDC7E\u57E6\uD845\uDC16\u5803\uD845\uDC54\uD850\uDF63\u5826\uD852\uDFF5\u585C\u58AA\u3561\u58E0\u58DC\uD844\uDE3C\u58FB\u5BFF\u5743\uD868\uDD50\uD850\uDE78\u93D3\u35A1\u591F\u68A6\u36C3\u6E59\"],\n[\"fba1\",\"\uD845\uDE3E\u5A24\u5553\uD845\uDE92\u8505\u59C9\uD843\uDD4E\uD85B\uDC81\uD85B\uDD2A\uD845\uDFDC\u59D9\uD845\uDFFB\uD845\uDFB2\uD85B\uDDA6\u6D71\uD846\uDC28\uD845\uDED5\u59F9\uD85B\uDE45\u5AAB\u5A63\u36E6\uD852\uDDA9\u5A77\u3708\u5A96\u7465\u5AD3\uD85B\uDFA1\uD849\uDD54\u3D85\uD846\uDD11\u3732\uD845\uDEB8\u5E83\u52D0\u5B76\u6588\u5B7C\uD85E\uDE0E\u4004\u485D\uD840\uDE04\u5BD5\u6160\uD846\uDE34\uD856\uDDCC\uD841\uDDA5\u5BF3\u5B9D\u4D10\u5C05\uD846\uDF44\u5C13\u73CE\u5C14\uD847\uDCA5\uD85A\uDF28\u5C49\u48DD\u5C85\u5CE9\u5CEF\u5D8B\uD847\uDDF9\uD847\uDE37\u5D10\u5D18\u5D46\uD847\uDEA4\u5CBA\u5DD7\u82FC\u382D\uD852\uDD01\uD848\uDC49\uD848\uDD73\u8287\u3836\u3BC2\u5E2E\u6A8A\u5E75\u5E7A\uD851\uDCBC\uD843\uDCD3\u53A6\u4EB7\u5ED0\u53A8\uD845\uDF71\u5E09\u5EF4\uD861\uDC82\"],\n[\"fc40\",\"\u5EF9\u5EFB\u38A0\u5EFC\u683E\u941B\u5F0D\uD840\uDDC1\uD87E\uDC94\u3ADE\u48AE\uD844\uDF3A\u5F3A\uD85A\uDC88\uD848\uDFD0\u5F58\uD849\uDC71\u5F63\u97BD\uD85B\uDE6E\u5F72\u9340\uD862\uDE36\u5FA7\u5DB6\u3D5F\uD854\uDE50\uD847\uDF6A\uD85C\uDCF8\uD849\uDE68\u91D6\uD840\uDE9E\uD862\uDE29\u6031\u6685\uD846\uDC77\u3963\u3DC7\u3639\u5790\uD849\uDFB4\u7971\u3E40\u609E\u60A4\u60B3\uD852\uDD82\uD852\uDD8F\uD85E\uDE53\u74A4\u50E1\u5AA0\u6164\u8424\u6142\uD87E\uDCA6\uD85B\uDED2\u6181\u51F4\uD841\uDE56\u6187\u5BAA\uD84F\uDFB7\"],\n[\"fca1\",\"\uD84A\uDC5F\u61D3\uD862\uDF9D\uD866\uDD5D\u61D0\u3932\uD84A\uDD80\uD84A\uDCC1\u6023\u615C\u651E\u638B\uD840\uDD18\u62C5\uD845\uDF70\u62D5\uD84B\uDE0D\u636C\uD852\uDDDF\u3A17\u6438\u63F8\uD844\uDF8E\uD845\uDFFC\u6490\u6F8A\uD84B\uDE36\u9814\uD850\uDC8C\uD855\uDF1D\u64E1\u64E5\u947B\u3A66\u643A\u3A57\u654D\u6F16\uD852\uDE28\uD852\uDE23\u6585\u656D\u655F\uD84C\uDC7E\u65B5\uD852\uDD40\u4B37\u65D1\u40D8\uD846\uDC29\u65E0\u65E3\u5FDF\uD84D\uDC00\u6618\uD84C\uDDF7\uD84C\uDDF8\u6644\uD84C\uDDA4\uD84C\uDDA5\u664B\uD843\uDE75\u6667\uD854\uDDE6\u6673\u6674\uD847\uDE3D\uD84C\uDE31\uD861\uDDF4\uD84C\uDDC8\uD854\uDF13\u77C5\uD84A\uDCF7\u99A4\u6702\uD850\uDF9C\uD852\uDE21\u3B2B\u69FA\uD84D\uDFC2\u675E\u6767\u6762\uD850\uDDCD\uD864\uDCED\u67D7\u44E9\u6822\u6E50\u923C\u6801\uD84C\uDFE6\uD85B\uDDA0\u685D\"],\n[\"fd40\",\"\uD84D\uDC6F\u69E1\u6A0B\uD862\uDEDF\u6973\u68C3\uD84D\uDDCD\u6901\u6900\u3D32\u3A01\uD84D\uDE3C\u3B80\u67AC\u6961\uD862\uDE4A\u42FC\u6936\u6998\u3BA1\uD840\uDFC9\u8363\u5090\u69F9\uD84D\uDE59\uD848\uDD2A\u6A45\uD84D\uDF03\u6A9D\u3BF3\u67B1\u6AC8\uD864\uDD9C\u3C0D\u6B1D\uD842\uDD23\u60DE\u6B35\u6B74\uD849\uDFCD\u6EB5\uD84E\uDEDB\uD840\uDFB5\uD846\uDD58\u3740\u5421\uD84E\uDF5A\u6BE1\uD84F\uDEFC\u6BDC\u6C37\uD849\uDC8B\uD852\uDCF1\uD85A\uDF51\u6C5A\u8226\u6C79\uD84F\uDDBC\u44C5\uD84F\uDDBD\uD850\uDDA4\uD852\uDD0C\uD852\uDD00\"],\n[\"fda1\",\"\uD84F\uDCC9\u36E5\u3CEB\uD843\uDD32\u9B83\uD84C\uDDF9\uD849\uDC91\u7F8F\u6837\uD85B\uDD25\uD85B\uDDA1\uD85B\uDDEB\u6D96\u6D5C\u6E7C\u6F04\uD852\uDD7F\uD850\uDC85\uD85B\uDE72\u8533\uD85B\uDF74\u51C7\u6C9C\u6E1D\u842E\uD862\uDF21\u6E2F\uD84F\uDE2F\u7453\uD84F\uDF82\u79CC\u6E4F\u5A91\uD84C\uDC4B\u6FF8\u370D\u6F9D\uD84F\uDE30\u6EFA\uD845\uDC97\uD850\uDC3D\u4555\u93F0\u6F44\u6F5C\u3D4E\u6F74\uD864\uDD70\u3D3B\u6F9F\uD850\uDD44\u6FD3\uD850\uDC91\uD850\uDD55\uD850\uDC39\uD84F\uDFF0\uD84F\uDFB4\uD850\uDD3F\u51DF\uD850\uDD56\uD850\uDD57\uD850\uDD40\uD858\uDDDD\u704B\u707E\u70A7\u7081\u70CC\u70D5\u70D6\u70DF\u4104\u3DE8\u71B4\u7196\uD850\uDE77\u712B\u7145\u5A88\u714A\u716E\u5C9C\uD850\uDF65\u714F\u9362\uD850\uDEC1\u712C\uD851\uDC5A\uD852\uDE27\uD852\uDE22\u71BA\uD862\uDFE8\u70BD\u720E\"],\n[\"fe40\",\"\u9442\u7215\u5911\u9443\u7224\u9341\uD855\uDE05\u722E\u7240\uD852\uDD74\u68BD\u7255\u7257\u3E55\uD84C\uDC44\u680D\u6F3D\u7282\u732A\u732B\uD852\uDC23\uD862\uDC2B\u48ED\uD862\uDC04\u7328\u732E\u73CF\u73AA\uD843\uDC3A\uD85A\uDE2E\u73C9\u7449\uD850\uDDE2\uD845\uDEE7\uD852\uDE24\u6623\u36C5\uD852\uDDB7\uD852\uDD8D\uD852\uDDFB\u73F7\u7415\u6903\uD852\uDE26\u7439\uD841\uDDC3\u3ED7\u745C\uD84A\uDCAD\u7460\uD863\uDEB2\u7447\u73E4\u7476\u83B9\u746C\u3730\u7474\u93F1\u6A2C\u7482\u4953\uD852\uDE8C\"],\n[\"fea1\",\"\uD850\uDD5F\uD852\uDE79\uD862\uDF8F\u5B46\uD863\uDC03\uD846\uDC9E\u74C8\uD846\uDD88\u750E\u74E9\u751E\uD863\uDED9\uD846\uDE4B\u5BD7\uD863\uDEAC\u9385\u754D\u754A\u7567\u756E\uD853\uDF82\u3F04\uD853\uDD13\u758E\u745D\u759E\u75B4\u7602\u762C\u7651\u764F\u766F\u7676\uD858\uDFF5\u7690\u81EF\u37F8\uD85A\uDD11\uD85A\uDD0E\u76A1\u76A5\u76B7\u76CC\uD85B\uDF9F\u8462\uD854\uDC9D\uD854\uDD7D\uD847\uDE1C\u771E\u7726\u7740\u64AF\uD854\uDE20\u7758\uD84C\uDEAC\u77AF\uD862\uDD64\uD862\uDD68\uD845\uDEC1\u77F4\u7809\uD844\uDF76\uD852\uDE12\u68CA\u78AF\u78C7\u78D3\u96A5\u792E\uD855\uDDE0\u78D7\u7934\u78B1\uD85D\uDE0C\u8FB8\u8884\uD862\uDF2B\uD858\uDC83\uD849\uDE1C\u7986\u8900\u6902\u7980\uD856\uDC57\u799D\uD85E\uDF39\u793C\u79A9\u6E2A\uD85C\uDD26\u3EA8\u79C6\uD864\uDD0D\u79D4\"]\n]\n", "\"use strict\"\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n\n  // == Japanese/ShiftJIS ====================================================\n  // All japanese encodings are based on JIS X set of standards:\n  // JIS X 0201 - Single-byte encoding of ASCII + \u00A5 + Kana chars at 0xA1-0xDF.\n  // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes.\n  //              Has several variations in 1978, 1983, 1990 and 1997.\n  // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n  // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n  //              2 planes, first is superset of 0208, second - revised 0212.\n  //              Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n  // Byte encodings are:\n  //  * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n  //               encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n  //               Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n  //  * EUC-JP:    Up to 3 bytes per character. Used mostly on *nixes.\n  //               0x00-0x7F       - lower part of 0201\n  //               0x8E, 0xA1-0xDF - upper part of 0201\n  //               (0xA1-0xFE)x2   - 0208 plane (94x94).\n  //               0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n  //  * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n  //               Used as-is in ISO2022 family.\n  //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII,\n  //                0201-1976 Roman, 0208-1978, 0208-1983.\n  //  * ISO2022-JP-1: Adds esc seq for 0212-1990.\n  //  * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n  //  * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n  //  * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n  //\n  // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n  //\n  // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n  shiftjis: {\n    type: \"_dbcs\",\n    table: function () { return require(\"./tables/shiftjis.json\") },\n    encodeAdd: { \"\\u00a5\": 0x5C, \"\\u203E\": 0x7E },\n    encodeSkipVals: [{ from: 0xED40, to: 0xF940 }]\n  },\n  csshiftjis: \"shiftjis\",\n  mskanji: \"shiftjis\",\n  sjis: \"shiftjis\",\n  windows31j: \"shiftjis\",\n  ms31j: \"shiftjis\",\n  xsjis: \"shiftjis\",\n  windows932: \"shiftjis\",\n  ms932: \"shiftjis\",\n  932: \"shiftjis\",\n  cp932: \"shiftjis\",\n\n  eucjp: {\n    type: \"_dbcs\",\n    table: function () { return require(\"./tables/eucjp.json\") },\n    encodeAdd: { \"\\u00a5\": 0x5C, \"\\u203E\": 0x7E }\n  },\n\n  // TODO: KDDI extension to Shift_JIS\n  // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n  // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n  // == Chinese/GBK ==========================================================\n  // http://en.wikipedia.org/wiki/GBK\n  // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n  // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n  gb2312: \"cp936\",\n  gb231280: \"cp936\",\n  gb23121980: \"cp936\",\n  csgb2312: \"cp936\",\n  csiso58gb231280: \"cp936\",\n  euccn: \"cp936\",\n\n  // Microsoft's CP936 is a subset and approximation of GBK.\n  windows936: \"cp936\",\n  ms936: \"cp936\",\n  936: \"cp936\",\n  cp936: {\n    type: \"_dbcs\",\n    table: function () { return require(\"./tables/cp936.json\") }\n  },\n\n  // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n  gbk: {\n    type: \"_dbcs\",\n    table: function () { return require(\"./tables/cp936.json\").concat(require(\"./tables/gbk-added.json\")) }\n  },\n  xgbk: \"gbk\",\n  isoir58: \"gbk\",\n\n  // GB18030 is an algorithmic extension of GBK.\n  // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n  // http://icu-project.org/docs/papers/gb18030.html\n  // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n  // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n  gb18030: {\n    type: \"_dbcs\",\n    table: function () { return require(\"./tables/cp936.json\").concat(require(\"./tables/gbk-added.json\")) },\n    gb18030: function () { return require(\"./tables/gb18030-ranges.json\") },\n    encodeSkipVals: [0x80],\n    encodeAdd: { \"\u20AC\": 0xA2E3 }\n  },\n\n  chinese: \"gb18030\",\n\n  // == Korean ===============================================================\n  // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n  windows949: \"cp949\",\n  ms949: \"cp949\",\n  949: \"cp949\",\n  cp949: {\n    type: \"_dbcs\",\n    table: function () { return require(\"./tables/cp949.json\") }\n  },\n\n  cseuckr: \"cp949\",\n  csksc56011987: \"cp949\",\n  euckr: \"cp949\",\n  isoir149: \"cp949\",\n  korean: \"cp949\",\n  ksc56011987: \"cp949\",\n  ksc56011989: \"cp949\",\n  ksc5601: \"cp949\",\n\n  // == Big5/Taiwan/Hong Kong ================================================\n  // There are lots of tables for Big5 and cp950. Please see the following links for history:\n  // http://moztw.org/docs/big5/  http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n  // Variations, in roughly number of defined chars:\n  //  * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n  //  * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n  //  * Big5-2003 (Taiwan standard) almost superset of cp950.\n  //  * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n  //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard.\n  //    many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n  //    Plus, it has 4 combining sequences.\n  //    Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n  //    because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n  //    Implementations are not consistent within browsers; sometimes labeled as just big5.\n  //    MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n  //    Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n  //    In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n  //    Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n  //                   http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n  //\n  // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n  // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n  windows950: \"cp950\",\n  ms950: \"cp950\",\n  950: \"cp950\",\n  cp950: {\n    type: \"_dbcs\",\n    table: function () { return require(\"./tables/cp950.json\") }\n  },\n\n  // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n  big5: \"big5hkscs\",\n  big5hkscs: {\n    type: \"_dbcs\",\n    table: function () { return require(\"./tables/cp950.json\").concat(require(\"./tables/big5-added.json\")) },\n    encodeSkipVals: [\n      // Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of\n      // https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU.\n      // But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter.\n      0x8e69, 0x8e6f, 0x8e7e, 0x8eab, 0x8eb4, 0x8ecd, 0x8ed0, 0x8f57, 0x8f69, 0x8f6e, 0x8fcb, 0x8ffe,\n      0x906d, 0x907a, 0x90c4, 0x90dc, 0x90f1, 0x91bf, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92d1, 0x9447, 0x94ca,\n      0x95d9, 0x96fc, 0x9975, 0x9b76, 0x9b78, 0x9b7b, 0x9bc6, 0x9bde, 0x9bec, 0x9bf6, 0x9c42, 0x9c53, 0x9c62,\n      0x9c68, 0x9c6b, 0x9c77, 0x9cbc, 0x9cbd, 0x9cd0, 0x9d57, 0x9d5a, 0x9dc4, 0x9def, 0x9dfb, 0x9ea9, 0x9eef,\n      0x9efd, 0x9f60, 0x9fcb, 0xa077, 0xa0dc, 0xa0df, 0x8fcc, 0x92c8, 0x9644, 0x96ed,\n\n      // Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345\n      0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa2cc, 0xa2ce\n    ]\n  },\n\n  cnbig5: \"big5hkscs\",\n  csbig5: \"big5hkscs\",\n  xxbig5: \"big5hkscs\"\n}\n", "\"use strict\"\n\nvar mergeModules = require(\"../lib/helpers/merge-exports\")\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n  require(\"./internal\"),\n  require(\"./utf32\"),\n  require(\"./utf16\"),\n  require(\"./utf7\"),\n  require(\"./sbcs-codec\"),\n  require(\"./sbcs-data\"),\n  require(\"./sbcs-data-generated\"),\n  require(\"./dbcs-codec\"),\n  require(\"./dbcs-data\")\n]\n\n// Put all encoding/alias/codec definitions to single object and export it.\nfor (var i = 0; i < modules.length; i++) {\n  var module = modules[i]\n  mergeModules(exports, module)\n}\n", "\"use strict\"\n\nvar Buffer = require(\"safer-buffer\").Buffer\n\n// NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments),\n// we opt to dependency-inject it instead of creating a hard dependency.\nmodule.exports = function (streamModule) {\n  var Transform = streamModule.Transform\n\n  // == Encoder stream =======================================================\n\n  function IconvLiteEncoderStream (conv, options) {\n    this.conv = conv\n    options = options || {}\n    options.decodeStrings = false // We accept only strings, so we don't need to decode them.\n    Transform.call(this, options)\n  }\n\n  IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n    constructor: { value: IconvLiteEncoderStream }\n  })\n\n  IconvLiteEncoderStream.prototype._transform = function (chunk, encoding, done) {\n    if (typeof chunk !== \"string\") {\n      return done(new Error(\"Iconv encoding stream needs strings as its input.\"))\n    }\n\n    try {\n      var res = this.conv.write(chunk)\n      if (res && res.length) this.push(res)\n      done()\n    } catch (e) {\n      done(e)\n    }\n  }\n\n  IconvLiteEncoderStream.prototype._flush = function (done) {\n    try {\n      var res = this.conv.end()\n      if (res && res.length) this.push(res)\n      done()\n    } catch (e) {\n      done(e)\n    }\n  }\n\n  IconvLiteEncoderStream.prototype.collect = function (cb) {\n    var chunks = []\n    this.on(\"error\", cb)\n    this.on(\"data\", function (chunk) { chunks.push(chunk) })\n    this.on(\"end\", function () {\n      cb(null, Buffer.concat(chunks))\n    })\n    return this\n  }\n\n  // == Decoder stream =======================================================\n\n  function IconvLiteDecoderStream (conv, options) {\n    this.conv = conv\n    options = options || {}\n    options.encoding = this.encoding = \"utf8\" // We output strings.\n    Transform.call(this, options)\n  }\n\n  IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n    constructor: { value: IconvLiteDecoderStream }\n  })\n\n  IconvLiteDecoderStream.prototype._transform = function (chunk, encoding, done) {\n    if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array)) { return done(new Error(\"Iconv decoding stream needs buffers as its input.\")) }\n    try {\n      var res = this.conv.write(chunk)\n      if (res && res.length) this.push(res, this.encoding)\n      done()\n    } catch (e) {\n      done(e)\n    }\n  }\n\n  IconvLiteDecoderStream.prototype._flush = function (done) {\n    try {\n      var res = this.conv.end()\n      if (res && res.length) this.push(res, this.encoding)\n      done()\n    } catch (e) {\n      done(e)\n    }\n  }\n\n  IconvLiteDecoderStream.prototype.collect = function (cb) {\n    var res = \"\"\n    this.on(\"error\", cb)\n    this.on(\"data\", function (chunk) { res += chunk })\n    this.on(\"end\", function () {\n      cb(null, res)\n    })\n    return this\n  }\n\n  return {\n    IconvLiteEncoderStream: IconvLiteEncoderStream,\n    IconvLiteDecoderStream: IconvLiteDecoderStream\n  }\n}\n", "\"use strict\"\n\nvar Buffer = require(\"safer-buffer\").Buffer\n\nvar bomHandling = require(\"./bom-handling\")\nvar mergeModules = require(\"./helpers/merge-exports\")\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\n// Cannot initialize with { __proto__: null } because Boolean({ __proto__: null }) === true\nmodule.exports.encodings = null\n\n// Characters emitted in case of error.\nmodule.exports.defaultCharUnicode = \"\uFFFD\"\nmodule.exports.defaultCharSingleByte = \"?\"\n\n// Public API.\nmodule.exports.encode = function encode (str, encoding, options) {\n  str = \"\" + (str || \"\") // Ensure string.\n\n  var encoder = module.exports.getEncoder(encoding, options)\n\n  var res = encoder.write(str)\n  var trail = encoder.end()\n\n  return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res\n}\n\nmodule.exports.decode = function decode (buf, encoding, options) {\n  if (typeof buf === \"string\") {\n    if (!module.exports.skipDecodeWarning) {\n      console.error(\"Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding\")\n      module.exports.skipDecodeWarning = true\n    }\n\n    buf = Buffer.from(\"\" + (buf || \"\"), \"binary\") // Ensure buffer.\n  }\n\n  var decoder = module.exports.getDecoder(encoding, options)\n\n  var res = decoder.write(buf)\n  var trail = decoder.end()\n\n  return trail ? (res + trail) : res\n}\n\nmodule.exports.encodingExists = function encodingExists (enc) {\n  try {\n    module.exports.getCodec(enc)\n    return true\n  } catch (e) {\n    return false\n  }\n}\n\n// Legacy aliases to convert functions\nmodule.exports.toEncoding = module.exports.encode\nmodule.exports.fromEncoding = module.exports.decode\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\nmodule.exports._codecDataCache = { __proto__: null }\n\nmodule.exports.getCodec = function getCodec (encoding) {\n  if (!module.exports.encodings) {\n    var raw = require(\"../encodings\")\n    // TODO: In future versions when old nodejs support is removed can use object.assign\n    module.exports.encodings = { __proto__: null } // Initialize as empty object.\n    mergeModules(module.exports.encodings, raw)\n  }\n\n  // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n  var enc = module.exports._canonicalizeEncoding(encoding)\n\n  // Traverse iconv.encodings to find actual codec.\n  var codecOptions = {}\n  while (true) {\n    var codec = module.exports._codecDataCache[enc]\n\n    if (codec) { return codec }\n\n    var codecDef = module.exports.encodings[enc]\n\n    switch (typeof codecDef) {\n      case \"string\": // Direct alias to other encoding.\n        enc = codecDef\n        break\n\n      case \"object\": // Alias with options. Can be layered.\n        for (var key in codecDef) { codecOptions[key] = codecDef[key] }\n\n        if (!codecOptions.encodingName) { codecOptions.encodingName = enc }\n\n        enc = codecDef.type\n        break\n\n      case \"function\": // Codec itself.\n        if (!codecOptions.encodingName) { codecOptions.encodingName = enc }\n\n        // The codec function must load all tables and return object with .encoder and .decoder methods.\n        // It'll be called only once (for each different options object).\n        //\n        codec = new codecDef(codecOptions, module.exports)\n\n        module.exports._codecDataCache[codecOptions.encodingName] = codec // Save it to be reused later.\n        return codec\n\n      default:\n        throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\" + enc + \"')\")\n    }\n  }\n}\n\nmodule.exports._canonicalizeEncoding = function (encoding) {\n  // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n  return (\"\" + encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\")\n}\n\nmodule.exports.getEncoder = function getEncoder (encoding, options) {\n  var codec = module.exports.getCodec(encoding)\n  var encoder = new codec.encoder(options, codec)\n\n  if (codec.bomAware && options && options.addBOM) { encoder = new bomHandling.PrependBOM(encoder, options) }\n\n  return encoder\n}\n\nmodule.exports.getDecoder = function getDecoder (encoding, options) {\n  var codec = module.exports.getCodec(encoding)\n  var decoder = new codec.decoder(options, codec)\n\n  if (codec.bomAware && !(options && options.stripBOM === false)) { decoder = new bomHandling.StripBOM(decoder, options) }\n\n  return decoder\n}\n\n// Streaming API\n// NOTE: Streaming API naturally depends on 'stream' module from Node.js. Unfortunately in browser environments this module can add\n// up to 100Kb to the output bundle. To avoid unnecessary code bloat, we don't enable Streaming API in browser by default.\n// If you would like to enable it explicitly, please add the following code to your app:\n// > iconv.enableStreamingAPI(require('stream'));\nmodule.exports.enableStreamingAPI = function enableStreamingAPI (streamModule) {\n  if (module.exports.supportsStreams) { return }\n\n  // Dependency-inject stream module to create IconvLite stream classes.\n  var streams = require(\"./streams\")(streamModule)\n\n  // Not public API yet, but expose the stream classes.\n  module.exports.IconvLiteEncoderStream = streams.IconvLiteEncoderStream\n  module.exports.IconvLiteDecoderStream = streams.IconvLiteDecoderStream\n\n  // Streaming API.\n  module.exports.encodeStream = function encodeStream (encoding, options) {\n    return new module.exports.IconvLiteEncoderStream(module.exports.getEncoder(encoding, options), options)\n  }\n\n  module.exports.decodeStream = function decodeStream (encoding, options) {\n    return new module.exports.IconvLiteDecoderStream(module.exports.getDecoder(encoding, options), options)\n  }\n\n  module.exports.supportsStreams = true\n}\n\n// Enable Streaming API automatically if 'stream' module is available and non-empty (the majority of environments).\nvar streamModule\ntry {\n  streamModule = require(\"stream\")\n} catch (e) {}\n\nif (streamModule && streamModule.Transform) {\n  module.exports.enableStreamingAPI(streamModule)\n} else {\n  // In rare cases where 'stream' module is not available by default, throw a helpful exception.\n  module.exports.encodeStream = module.exports.decodeStream = function () {\n    throw new Error(\"iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.\")\n  }\n}\n\n// Some environments, such as browsers, may not load JavaScript files as UTF-8\n// eslint-disable-next-line no-constant-condition\nif (\"\u0100\" !== \"\\u0100\") {\n  console.error(\"iconv-lite warning: js files use non-utf8 encoding. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\")\n}\n", "/*!\n * unpipe\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = unpipe\n\n/**\n * Determine if there are Node.js pipe-like data listeners.\n * @private\n */\n\nfunction hasPipeDataListeners(stream) {\n  var listeners = stream.listeners('data')\n\n  for (var i = 0; i < listeners.length; i++) {\n    if (listeners[i].name === 'ondata') {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Unpipe a stream from all destinations.\n *\n * @param {object} stream\n * @public\n */\n\nfunction unpipe(stream) {\n  if (!stream) {\n    throw new TypeError('argument stream is required')\n  }\n\n  if (typeof stream.unpipe === 'function') {\n    // new-style\n    stream.unpipe()\n    return\n  }\n\n  // Node.js 0.8 hack\n  if (!hasPipeDataListeners(stream)) {\n    return\n  }\n\n  var listener\n  var listeners = stream.listeners('close')\n\n  for (var i = 0; i < listeners.length; i++) {\n    listener = listeners[i]\n\n    if (listener.name !== 'cleanup' && listener.name !== 'onclose') {\n      continue\n    }\n\n    // invoke the listener\n    listener.call(stream)\n  }\n}\n", "/*!\n * raw-body\n * Copyright(c) 2013-2014 Jonathan Ong\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar bytes = require('bytes')\nvar createError = require('http-errors')\nvar iconv = require('iconv-lite')\nvar unpipe = require('unpipe')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getRawBody\n\n/**\n * Module variables.\n * @private\n */\n\nvar ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /\n\n/**\n * Get the decoder for a given encoding.\n *\n * @param {string} encoding\n * @private\n */\n\nfunction getDecoder (encoding) {\n  if (!encoding) return null\n\n  try {\n    return iconv.getDecoder(encoding)\n  } catch (e) {\n    // error getting decoder\n    if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e\n\n    // the encoding was not found\n    throw createError(415, 'specified encoding unsupported', {\n      encoding: encoding,\n      type: 'encoding.unsupported'\n    })\n  }\n}\n\n/**\n * Get the raw body of a stream (typically HTTP).\n *\n * @param {object} stream\n * @param {object|string|function} [options]\n * @param {function} [callback]\n * @public\n */\n\nfunction getRawBody (stream, options, callback) {\n  var done = callback\n  var opts = options || {}\n\n  // light validation\n  if (stream === undefined) {\n    throw new TypeError('argument stream is required')\n  } else if (typeof stream !== 'object' || stream === null || typeof stream.on !== 'function') {\n    throw new TypeError('argument stream must be a stream')\n  }\n\n  if (options === true || typeof options === 'string') {\n    // short cut for encoding\n    opts = {\n      encoding: options\n    }\n  }\n\n  if (typeof options === 'function') {\n    done = options\n    opts = {}\n  }\n\n  // validate callback is a function, if provided\n  if (done !== undefined && typeof done !== 'function') {\n    throw new TypeError('argument callback must be a function')\n  }\n\n  // require the callback without promises\n  if (!done && !global.Promise) {\n    throw new TypeError('argument callback is required')\n  }\n\n  // get encoding\n  var encoding = opts.encoding !== true\n    ? opts.encoding\n    : 'utf-8'\n\n  // convert the limit to an integer\n  var limit = bytes.parse(opts.limit)\n\n  // convert the expected length to an integer\n  var length = opts.length != null && !isNaN(opts.length)\n    ? parseInt(opts.length, 10)\n    : null\n\n  if (done) {\n    // classic callback style\n    return readStream(stream, encoding, length, limit, wrap(done))\n  }\n\n  return new Promise(function executor (resolve, reject) {\n    readStream(stream, encoding, length, limit, function onRead (err, buf) {\n      if (err) return reject(err)\n      resolve(buf)\n    })\n  })\n}\n\n/**\n * Halt a stream.\n *\n * @param {Object} stream\n * @private\n */\n\nfunction halt (stream) {\n  // unpipe everything from the stream\n  unpipe(stream)\n\n  // pause stream\n  if (typeof stream.pause === 'function') {\n    stream.pause()\n  }\n}\n\n/**\n * Read the data from the stream.\n *\n * @param {object} stream\n * @param {string} encoding\n * @param {number} length\n * @param {number} limit\n * @param {function} callback\n * @public\n */\n\nfunction readStream (stream, encoding, length, limit, callback) {\n  var complete = false\n  var sync = true\n\n  // check the length and limit options.\n  // note: we intentionally leave the stream paused,\n  // so users should handle the stream themselves.\n  if (limit !== null && length !== null && length > limit) {\n    return done(createError(413, 'request entity too large', {\n      expected: length,\n      length: length,\n      limit: limit,\n      type: 'entity.too.large'\n    }))\n  }\n\n  // streams1: assert request encoding is buffer.\n  // streams2+: assert the stream encoding is buffer.\n  //   stream._decoder: streams1\n  //   state.encoding: streams2\n  //   state.decoder: streams2, specifically < 0.10.6\n  var state = stream._readableState\n  if (stream._decoder || (state && (state.encoding || state.decoder))) {\n    // developer error\n    return done(createError(500, 'stream encoding should not be set', {\n      type: 'stream.encoding.set'\n    }))\n  }\n\n  if (typeof stream.readable !== 'undefined' && !stream.readable) {\n    return done(createError(500, 'stream is not readable', {\n      type: 'stream.not.readable'\n    }))\n  }\n\n  var received = 0\n  var decoder\n\n  try {\n    decoder = getDecoder(encoding)\n  } catch (err) {\n    return done(err)\n  }\n\n  var buffer = decoder\n    ? ''\n    : []\n\n  // attach listeners\n  stream.on('aborted', onAborted)\n  stream.on('close', cleanup)\n  stream.on('data', onData)\n  stream.on('end', onEnd)\n  stream.on('error', onEnd)\n\n  // mark sync section complete\n  sync = false\n\n  function done () {\n    var args = new Array(arguments.length)\n\n    // copy arguments\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i]\n    }\n\n    // mark complete\n    complete = true\n\n    if (sync) {\n      process.nextTick(invokeCallback)\n    } else {\n      invokeCallback()\n    }\n\n    function invokeCallback () {\n      cleanup()\n\n      if (args[0]) {\n        // halt the stream on error\n        halt(stream)\n      }\n\n      callback.apply(null, args)\n    }\n  }\n\n  function onAborted () {\n    if (complete) return\n\n    done(createError(400, 'request aborted', {\n      code: 'ECONNABORTED',\n      expected: length,\n      length: length,\n      received: received,\n      type: 'request.aborted'\n    }))\n  }\n\n  function onData (chunk) {\n    if (complete) return\n\n    received += chunk.length\n\n    if (limit !== null && received > limit) {\n      done(createError(413, 'request entity too large', {\n        limit: limit,\n        received: received,\n        type: 'entity.too.large'\n      }))\n    } else if (decoder) {\n      buffer += decoder.write(chunk)\n    } else {\n      buffer.push(chunk)\n    }\n  }\n\n  function onEnd (err) {\n    if (complete) return\n    if (err) return done(err)\n\n    if (length !== null && received !== length) {\n      done(createError(400, 'request size did not match content length', {\n        expected: length,\n        length: length,\n        received: received,\n        type: 'request.size.invalid'\n      }))\n    } else {\n      var string = decoder\n        ? buffer + (decoder.end() || '')\n        : Buffer.concat(buffer)\n      done(null, string)\n    }\n  }\n\n  function cleanup () {\n    buffer = null\n\n    stream.removeListener('aborted', onAborted)\n    stream.removeListener('data', onData)\n    stream.removeListener('end', onEnd)\n    stream.removeListener('error', onEnd)\n    stream.removeListener('close', cleanup)\n  }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n  try {\n    return require('async_hooks')\n  } catch (e) {\n    return {}\n  }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n  var res\n\n  // create anonymous resource\n  if (asyncHooks.AsyncResource) {\n    res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n  }\n\n  // incompatible node.js\n  if (!res || !res.runInAsyncScope) {\n    return fn\n  }\n\n  // return bound function\n  return res.runInAsyncScope.bind(res, fn, null)\n}\n", "/*!\n * ee-first\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = first\n\n/**\n * Get the first event in a set of event emitters and event pairs.\n *\n * @param {array} stuff\n * @param {function} done\n * @public\n */\n\nfunction first(stuff, done) {\n  if (!Array.isArray(stuff))\n    throw new TypeError('arg must be an array of [ee, events...] arrays')\n\n  var cleanups = []\n\n  for (var i = 0; i < stuff.length; i++) {\n    var arr = stuff[i]\n\n    if (!Array.isArray(arr) || arr.length < 2)\n      throw new TypeError('each array member must be [ee, events...]')\n\n    var ee = arr[0]\n\n    for (var j = 1; j < arr.length; j++) {\n      var event = arr[j]\n      var fn = listener(event, callback)\n\n      // listen to the event\n      ee.on(event, fn)\n      // push this listener to the list of cleanups\n      cleanups.push({\n        ee: ee,\n        event: event,\n        fn: fn,\n      })\n    }\n  }\n\n  function callback() {\n    cleanup()\n    done.apply(null, arguments)\n  }\n\n  function cleanup() {\n    var x\n    for (var i = 0; i < cleanups.length; i++) {\n      x = cleanups[i]\n      x.ee.removeListener(x.event, x.fn)\n    }\n  }\n\n  function thunk(fn) {\n    done = fn\n  }\n\n  thunk.cancel = cleanup\n\n  return thunk\n}\n\n/**\n * Create the event listener.\n * @private\n */\n\nfunction listener(event, done) {\n  return function onevent(arg1) {\n    var args = new Array(arguments.length)\n    var ee = this\n    var err = event === 'error'\n      ? arg1\n      : null\n\n    // copy args to prevent arguments escaping scope\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i]\n    }\n\n    done(err, ee, event, args)\n  }\n}\n", "/*!\n * on-finished\n * Copyright(c) 2013 Jonathan Ong\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = onFinished\nmodule.exports.isFinished = isFinished\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar first = require('ee-first')\n\n/**\n * Variables.\n * @private\n */\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n  ? setImmediate\n  : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }\n\n/**\n * Invoke callback when the response has finished, useful for\n * cleaning up resources afterwards.\n *\n * @param {object} msg\n * @param {function} listener\n * @return {object}\n * @public\n */\n\nfunction onFinished (msg, listener) {\n  if (isFinished(msg) !== false) {\n    defer(listener, null, msg)\n    return msg\n  }\n\n  // attach the listener to the message\n  attachListener(msg, wrap(listener))\n\n  return msg\n}\n\n/**\n * Determine if message is already finished.\n *\n * @param {object} msg\n * @return {boolean}\n * @public\n */\n\nfunction isFinished (msg) {\n  var socket = msg.socket\n\n  if (typeof msg.finished === 'boolean') {\n    // OutgoingMessage\n    return Boolean(msg.finished || (socket && !socket.writable))\n  }\n\n  if (typeof msg.complete === 'boolean') {\n    // IncomingMessage\n    return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable))\n  }\n\n  // don't know\n  return undefined\n}\n\n/**\n * Attach a finished listener to the message.\n *\n * @param {object} msg\n * @param {function} callback\n * @private\n */\n\nfunction attachFinishedListener (msg, callback) {\n  var eeMsg\n  var eeSocket\n  var finished = false\n\n  function onFinish (error) {\n    eeMsg.cancel()\n    eeSocket.cancel()\n\n    finished = true\n    callback(error)\n  }\n\n  // finished on first message event\n  eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish)\n\n  function onSocket (socket) {\n    // remove listener\n    msg.removeListener('socket', onSocket)\n\n    if (finished) return\n    if (eeMsg !== eeSocket) return\n\n    // finished on first socket event\n    eeSocket = first([[socket, 'error', 'close']], onFinish)\n  }\n\n  if (msg.socket) {\n    // socket already assigned\n    onSocket(msg.socket)\n    return\n  }\n\n  // wait for socket to be assigned\n  msg.on('socket', onSocket)\n\n  if (msg.socket === undefined) {\n    // istanbul ignore next: node.js 0.8 patch\n    patchAssignSocket(msg, onSocket)\n  }\n}\n\n/**\n * Attach the listener to the message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction attachListener (msg, listener) {\n  var attached = msg.__onFinished\n\n  // create a private single listener with queue\n  if (!attached || !attached.queue) {\n    attached = msg.__onFinished = createListener(msg)\n    attachFinishedListener(msg, attached)\n  }\n\n  attached.queue.push(listener)\n}\n\n/**\n * Create listener on message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction createListener (msg) {\n  function listener (err) {\n    if (msg.__onFinished === listener) msg.__onFinished = null\n    if (!listener.queue) return\n\n    var queue = listener.queue\n    listener.queue = null\n\n    for (var i = 0; i < queue.length; i++) {\n      queue[i](err, msg)\n    }\n  }\n\n  listener.queue = []\n\n  return listener\n}\n\n/**\n * Patch ServerResponse.prototype.assignSocket for node.js 0.8.\n *\n * @param {ServerResponse} res\n * @param {function} callback\n * @private\n */\n\n// istanbul ignore next: node.js 0.8 patch\nfunction patchAssignSocket (res, callback) {\n  var assignSocket = res.assignSocket\n\n  if (typeof assignSocket !== 'function') return\n\n  // res.on('socket', callback) is broken in 0.8\n  res.assignSocket = function _assignSocket (socket) {\n    assignSocket.call(this, socket)\n    callback(socket)\n  }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n  try {\n    return require('async_hooks')\n  } catch (e) {\n    return {}\n  }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n  var res\n\n  // create anonymous resource\n  if (asyncHooks.AsyncResource) {\n    res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n  }\n\n  // incompatible node.js\n  if (!res || !res.runInAsyncScope) {\n    return fn\n  }\n\n  // return bound function\n  return res.runInAsyncScope.bind(res, fn, null)\n}\n", "/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter     = token \"=\" ( token / quoted-string )\n * token         = 1*tchar\n * tchar         = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n *               / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n *               / DIGIT / ALPHA\n *               ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext        = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text      = %x80-FF\n * quoted-pair   = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nvar PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *(\"(?:[\\u000b\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u000b\\u0020-\\u00ff])*\"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\u000b\\u0020-\\u007e\\u0080-\\u00ff]+$/ // eslint-disable-line no-control-regex\nvar TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text    = %x80-FF\n */\nvar QESC_REGEXP = /\\\\([\\u000b\\u0020-\\u00ff])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6\n */\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type       = token\n * subtype    = token\n */\nvar TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * Module exports.\n * @public\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required')\n  }\n\n  var parameters = obj.parameters\n  var type = obj.type\n\n  if (!type || !TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  var string = type\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      if (!TOKEN_REGEXP.test(param)) {\n        throw new TypeError('invalid parameter name')\n      }\n\n      string += '; ' + param + '=' + qstring(parameters[param])\n    }\n  }\n\n  return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @public\n */\n\nfunction parse (string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  // support req/res-like objects as argument\n  var header = typeof string === 'object'\n    ? getcontenttype(string)\n    : string\n\n  if (typeof header !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  var index = header.indexOf(';')\n  var type = index !== -1\n    ? header.slice(0, index).trim()\n    : header.trim()\n\n  if (!TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid media type')\n  }\n\n  var obj = new ContentType(type.toLowerCase())\n\n  // parse parameters\n  if (index !== -1) {\n    var key\n    var match\n    var value\n\n    PARAM_REGEXP.lastIndex = index\n\n    while ((match = PARAM_REGEXP.exec(header))) {\n      if (match.index !== index) {\n        throw new TypeError('invalid parameter format')\n      }\n\n      index += match[0].length\n      key = match[1].toLowerCase()\n      value = match[2]\n\n      if (value.charCodeAt(0) === 0x22 /* \" */) {\n        // remove quotes\n        value = value.slice(1, -1)\n\n        // remove escapes\n        if (value.indexOf('\\\\') !== -1) {\n          value = value.replace(QESC_REGEXP, '$1')\n        }\n      }\n\n      obj.parameters[key] = value\n    }\n\n    if (index !== header.length) {\n      throw new TypeError('invalid parameter format')\n    }\n  }\n\n  return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @private\n */\n\nfunction getcontenttype (obj) {\n  var header\n\n  if (typeof obj.getHeader === 'function') {\n    // res-like\n    header = obj.getHeader('content-type')\n  } else if (typeof obj.headers === 'object') {\n    // req-like\n    header = obj.headers && obj.headers['content-type']\n  }\n\n  if (typeof header !== 'string') {\n    throw new TypeError('content-type header is missing from object')\n  }\n\n  return header\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n  var str = String(val)\n\n  // no need to quote tokens\n  if (TOKEN_REGEXP.test(str)) {\n    return str\n  }\n\n  if (str.length > 0 && !TEXT_REGEXP.test(str)) {\n    throw new TypeError('invalid parameter value')\n  }\n\n  return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Class to represent a content type.\n * @private\n */\nfunction ContentType (type) {\n  this.parameters = Object.create(null)\n  this.type = type\n}\n", "{\n  \"application/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/3gpdash-qoe-report+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/3gpp-ims+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/3gpphal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/3gpphalforms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/a2l\": {\n    \"source\": \"iana\"\n  },\n  \"application/ace+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/ace+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ace-groupcomm+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/ace-trl+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/activemessage\": {\n    \"source\": \"iana\"\n  },\n  \"application/activity+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/aif+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/aif+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-cdni+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-cdnifilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-directory+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcost+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcostparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointprop+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointpropparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-error+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-propmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-propmapparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-tips+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-tipsparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-updatestreamcontrol+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-updatestreamparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/aml\": {\n    \"source\": \"iana\"\n  },\n  \"application/andrew-inset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez\"]\n  },\n  \"application/appinstaller\": {\n    \"compressible\": false,\n    \"extensions\": [\"appinstaller\"]\n  },\n  \"application/applefile\": {\n    \"source\": \"iana\"\n  },\n  \"application/applixware\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aw\"]\n  },\n  \"application/appx\": {\n    \"compressible\": false,\n    \"extensions\": [\"appx\"]\n  },\n  \"application/appxbundle\": {\n    \"compressible\": false,\n    \"extensions\": [\"appxbundle\"]\n  },\n  \"application/at+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/atf\": {\n    \"source\": \"iana\"\n  },\n  \"application/atfx\": {\n    \"source\": \"iana\"\n  },\n  \"application/atom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atom\"]\n  },\n  \"application/atomcat+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomcat\"]\n  },\n  \"application/atomdeleted+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomdeleted\"]\n  },\n  \"application/atomicmail\": {\n    \"source\": \"iana\"\n  },\n  \"application/atomsvc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomsvc\"]\n  },\n  \"application/atsc-dwd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dwd\"]\n  },\n  \"application/atsc-dynamic-event-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/atsc-held+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"held\"]\n  },\n  \"application/atsc-rdt+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/atsc-rsat+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rsat\"]\n  },\n  \"application/atxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/auth-policy+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/automationml-aml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"aml\"]\n  },\n  \"application/automationml-amlx+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"amlx\"]\n  },\n  \"application/bacnet-xdd+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/batch-smtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/beep+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/bufr\": {\n    \"source\": \"iana\"\n  },\n  \"application/c2pa\": {\n    \"source\": \"iana\"\n  },\n  \"application/calendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/calendar+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xcs\"]\n  },\n  \"application/call-completion\": {\n    \"source\": \"iana\"\n  },\n  \"application/cals-1840\": {\n    \"source\": \"iana\"\n  },\n  \"application/captive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/cccex\": {\n    \"source\": \"iana\"\n  },\n  \"application/ccmp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ccxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ccxml\"]\n  },\n  \"application/cda+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/cdfx+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cdfx\"]\n  },\n  \"application/cdmi-capability\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmia\"]\n  },\n  \"application/cdmi-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmic\"]\n  },\n  \"application/cdmi-domain\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmid\"]\n  },\n  \"application/cdmi-object\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmio\"]\n  },\n  \"application/cdmi-queue\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmiq\"]\n  },\n  \"application/cdni\": {\n    \"source\": \"iana\"\n  },\n  \"application/ce+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea-2018+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cellml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cfw\": {\n    \"source\": \"iana\"\n  },\n  \"application/cid-edhoc+cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/city+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/city+json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/clr\": {\n    \"source\": \"iana\"\n  },\n  \"application/clue+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/clue_info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cms\": {\n    \"source\": \"iana\"\n  },\n  \"application/cnrp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-eap\": {\n    \"source\": \"iana\"\n  },\n  \"application/coap-group+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/commonground\": {\n    \"source\": \"iana\"\n  },\n  \"application/concise-problem-details+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/conference-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cose\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key-set\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-x509\": {\n    \"source\": \"iana\"\n  },\n  \"application/cpl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cpl\"]\n  },\n  \"application/csrattrs\": {\n    \"source\": \"iana\"\n  },\n  \"application/csta+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cstadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/csvm+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cu-seeme\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cu\"]\n  },\n  \"application/cwl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cwl\"]\n  },\n  \"application/cwl+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cwl+yaml\": {\n    \"source\": \"iana\"\n  },\n  \"application/cwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/cybercash\": {\n    \"source\": \"iana\"\n  },\n  \"application/dart\": {\n    \"compressible\": true\n  },\n  \"application/dash+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpd\"]\n  },\n  \"application/dash-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpp\"]\n  },\n  \"application/dashdelta\": {\n    \"source\": \"iana\"\n  },\n  \"application/davmount+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"davmount\"]\n  },\n  \"application/dca-rft\": {\n    \"source\": \"iana\"\n  },\n  \"application/dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/dec-dx\": {\n    \"source\": \"iana\"\n  },\n  \"application/dialog-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dcm\"]\n  },\n  \"application/dicom+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dii\": {\n    \"source\": \"iana\"\n  },\n  \"application/dit\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dns-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/docbook+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"dbk\"]\n  },\n  \"application/dots+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/dpop+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/dskpp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dssc+der\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dssc\"]\n  },\n  \"application/dssc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdssc\"]\n  },\n  \"application/dvcs\": {\n    \"source\": \"iana\"\n  },\n  \"application/eat+cwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/eat+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/eat-bun+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/eat-bun+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/eat-ucs+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/eat-ucs+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ecmascript\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ecma\"]\n  },\n  \"application/edhoc+cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/edi-consent\": {\n    \"source\": \"iana\"\n  },\n  \"application/edi-x12\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/edifact\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/efi\": {\n    \"source\": \"iana\"\n  },\n  \"application/elm+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/elm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.cap+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.comment+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.deviceinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.ecall.msd\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.legacyesn+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.providerinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.serviceinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.subscriberinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.veds+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emma+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"emma\"]\n  },\n  \"application/emotionml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"emotionml\"]\n  },\n  \"application/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/entity-statement+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/epp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/epub+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"epub\"]\n  },\n  \"application/eshop\": {\n    \"source\": \"iana\"\n  },\n  \"application/exi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exi\"]\n  },\n  \"application/expect-ct-report+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/express\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exp\"]\n  },\n  \"application/fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/fastsoap\": {\n    \"source\": \"iana\"\n  },\n  \"application/fdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fdf\"]\n  },\n  \"application/fdt+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"fdt\"]\n  },\n  \"application/fhir+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/fhir+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/fido.trusted-apps+json\": {\n    \"compressible\": true\n  },\n  \"application/fits\": {\n    \"source\": \"iana\"\n  },\n  \"application/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-tdpfr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pfr\"]\n  },\n  \"application/font-woff\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/framework-attributes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"geojson\"]\n  },\n  \"application/geo+json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/geopackage+sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/geopose+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/geoxacml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/geoxacml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/gltf-buffer\": {\n    \"source\": \"iana\"\n  },\n  \"application/gml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gml\"]\n  },\n  \"application/gnap-binding-jws\": {\n    \"source\": \"iana\"\n  },\n  \"application/gnap-binding-jwsd\": {\n    \"source\": \"iana\"\n  },\n  \"application/gnap-binding-rotation-jws\": {\n    \"source\": \"iana\"\n  },\n  \"application/gnap-binding-rotation-jwsd\": {\n    \"source\": \"iana\"\n  },\n  \"application/gpx+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"gpx\"]\n  },\n  \"application/grib\": {\n    \"source\": \"iana\"\n  },\n  \"application/gxf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gxf\"]\n  },\n  \"application/gzip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gz\"]\n  },\n  \"application/h224\": {\n    \"source\": \"iana\"\n  },\n  \"application/held+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/hjson\": {\n    \"extensions\": [\"hjson\"]\n  },\n  \"application/hl7v2+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/http\": {\n    \"source\": \"iana\"\n  },\n  \"application/hyperstudio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stk\"]\n  },\n  \"application/ibe-key-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ibe-pkg-reply+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ibe-pp-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/iges\": {\n    \"source\": \"iana\"\n  },\n  \"application/im-iscomposing+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/index\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.cmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.obj\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.response\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.vnd\": {\n    \"source\": \"iana\"\n  },\n  \"application/inkml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ink\",\"inkml\"]\n  },\n  \"application/iotp\": {\n    \"source\": \"iana\"\n  },\n  \"application/ipfix\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipfix\"]\n  },\n  \"application/ipp\": {\n    \"source\": \"iana\"\n  },\n  \"application/isup\": {\n    \"source\": \"iana\"\n  },\n  \"application/its+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"its\"]\n  },\n  \"application/java-archive\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jar\",\"war\",\"ear\"]\n  },\n  \"application/java-serialized-object\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"ser\"]\n  },\n  \"application/java-vm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"class\"]\n  },\n  \"application/javascript\": {\n    \"source\": \"apache\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"js\"]\n  },\n  \"application/jf2feed+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jose\": {\n    \"source\": \"iana\"\n  },\n  \"application/jose+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jrd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jscalendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jscontact+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"json\",\"map\"]\n  },\n  \"application/json-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/json5\": {\n    \"extensions\": [\"json5\"]\n  },\n  \"application/jsonml+json\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonml\"]\n  },\n  \"application/jsonpath\": {\n    \"source\": \"iana\"\n  },\n  \"application/jwk+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwk-set+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwk-set+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/kpml-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/kpml-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ld+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonld\"]\n  },\n  \"application/lgr+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lgr\"]\n  },\n  \"application/link-format\": {\n    \"source\": \"iana\"\n  },\n  \"application/linkset\": {\n    \"source\": \"iana\"\n  },\n  \"application/linkset+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/load-control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/logout+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/lost+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lostxml\"]\n  },\n  \"application/lostsync+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/lpf+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/lxf\": {\n    \"source\": \"iana\"\n  },\n  \"application/mac-binhex40\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hqx\"]\n  },\n  \"application/mac-compactpro\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpt\"]\n  },\n  \"application/macwriteii\": {\n    \"source\": \"iana\"\n  },\n  \"application/mads+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mads\"]\n  },\n  \"application/manifest+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"webmanifest\"]\n  },\n  \"application/marc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mrc\"]\n  },\n  \"application/marcxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mrcx\"]\n  },\n  \"application/mathematica\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ma\",\"nb\",\"mb\"]\n  },\n  \"application/mathml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mathml\"]\n  },\n  \"application/mathml-content+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mathml-presentation+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-associated-procedure-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-deregister+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-envelope+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-msk+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-msk-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-protection-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-reception-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-register+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-register-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-schedule+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-user-service-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbox\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbox\"]\n  },\n  \"application/media-policy-dataset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpf\"]\n  },\n  \"application/media_control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mediaservercontrol+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mscml\"]\n  },\n  \"application/merge-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/metalink+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"metalink\"]\n  },\n  \"application/metalink4+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"meta4\"]\n  },\n  \"application/mets+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mets\"]\n  },\n  \"application/mf4\": {\n    \"source\": \"iana\"\n  },\n  \"application/mikey\": {\n    \"source\": \"iana\"\n  },\n  \"application/mipc\": {\n    \"source\": \"iana\"\n  },\n  \"application/missing-blocks+cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/mmt-aei+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"maei\"]\n  },\n  \"application/mmt-usd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"musd\"]\n  },\n  \"application/mods+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mods\"]\n  },\n  \"application/moss-keys\": {\n    \"source\": \"iana\"\n  },\n  \"application/moss-signature\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/mp21\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m21\",\"mp21\"]\n  },\n  \"application/mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mp4\",\"mpg4\",\"mp4s\",\"m4p\"]\n  },\n  \"application/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod-xmt\": {\n    \"source\": \"iana\"\n  },\n  \"application/mrb-consumer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mrb-publish+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/msc-ivr+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/msc-mixer+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/msix\": {\n    \"compressible\": false,\n    \"extensions\": [\"msix\"]\n  },\n  \"application/msixbundle\": {\n    \"compressible\": false,\n    \"extensions\": [\"msixbundle\"]\n  },\n  \"application/msword\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"doc\",\"dot\"]\n  },\n  \"application/mud+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/multipart-core\": {\n    \"source\": \"iana\"\n  },\n  \"application/mxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxf\"]\n  },\n  \"application/n-quads\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nq\"]\n  },\n  \"application/n-triples\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nt\"]\n  },\n  \"application/nasdata\": {\n    \"source\": \"iana\"\n  },\n  \"application/news-checkgroups\": {\n    \"source\": \"iana\",\n    \"charset\": \"US-ASCII\"\n  },\n  \"application/news-groupinfo\": {\n    \"source\": \"iana\",\n    \"charset\": \"US-ASCII\"\n  },\n  \"application/news-transmission\": {\n    \"source\": \"iana\"\n  },\n  \"application/nlsml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/node\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cjs\"]\n  },\n  \"application/nss\": {\n    \"source\": \"iana\"\n  },\n  \"application/oauth-authz-req+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/oblivious-dns-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/octet-stream\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n  },\n  \"application/oda\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oda\"]\n  },\n  \"application/odm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/odx\": {\n    \"source\": \"iana\"\n  },\n  \"application/oebps-package+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"opf\"]\n  },\n  \"application/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogx\"]\n  },\n  \"application/ohttp-keys\": {\n    \"source\": \"iana\"\n  },\n  \"application/omdoc+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"omdoc\"]\n  },\n  \"application/onenote\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\",\"one\",\"onea\"]\n  },\n  \"application/opc-nodeset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/oscore\": {\n    \"source\": \"iana\"\n  },\n  \"application/oxps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oxps\"]\n  },\n  \"application/p21\": {\n    \"source\": \"iana\"\n  },\n  \"application/p21+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/p2p-overlay+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"relo\"]\n  },\n  \"application/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/passport\": {\n    \"source\": \"iana\"\n  },\n  \"application/patch-ops-error+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xer\"]\n  },\n  \"application/pdf\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pdf\"]\n  },\n  \"application/pdx\": {\n    \"source\": \"iana\"\n  },\n  \"application/pem-certificate-chain\": {\n    \"source\": \"iana\"\n  },\n  \"application/pgp-encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pgp\"]\n  },\n  \"application/pgp-keys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"asc\"]\n  },\n  \"application/pgp-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sig\",\"asc\"]\n  },\n  \"application/pics-rules\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prf\"]\n  },\n  \"application/pidf+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/pidf-diff+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/pkcs10\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p10\"]\n  },\n  \"application/pkcs12\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkcs7-mime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7m\",\"p7c\"]\n  },\n  \"application/pkcs7-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7s\"]\n  },\n  \"application/pkcs8\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p8\"]\n  },\n  \"application/pkcs8-encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkix-attr-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ac\"]\n  },\n  \"application/pkix-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cer\"]\n  },\n  \"application/pkix-crl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"crl\"]\n  },\n  \"application/pkix-pkipath\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pkipath\"]\n  },\n  \"application/pkixcmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pki\"]\n  },\n  \"application/pls+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"pls\"]\n  },\n  \"application/poc-settings+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/postscript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ai\",\"eps\",\"ps\"]\n  },\n  \"application/ppsp-tracker+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/private-token-issuer-directory\": {\n    \"source\": \"iana\"\n  },\n  \"application/private-token-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/private-token-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/problem+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/provenance+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"provx\"]\n  },\n  \"application/provided-claims+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.alvestrand.titrax-sheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.cww\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cww\"]\n  },\n  \"application/prs.cyn\": {\n    \"source\": \"iana\",\n    \"charset\": \"7-BIT\"\n  },\n  \"application/prs.hpub+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/prs.implied-document+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/prs.implied-executable\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.implied-object+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/prs.implied-object+json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.implied-object+yaml\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.implied-structure\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.mayfile\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.nprend\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.plucker\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.rdf-xml-crypt\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.vcfbzip2\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.xsf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xsf\"]\n  },\n  \"application/pskc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"pskcxml\"]\n  },\n  \"application/pvd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/qsig\": {\n    \"source\": \"iana\"\n  },\n  \"application/raml+yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"raml\"]\n  },\n  \"application/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/rdap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rdf\",\"owl\"]\n  },\n  \"application/reginfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rif\"]\n  },\n  \"application/relax-ng-compact-syntax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rnc\"]\n  },\n  \"application/remote-printing\": {\n    \"source\": \"apache\"\n  },\n  \"application/reputon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/resolve-response+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/resource-lists+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rl\"]\n  },\n  \"application/resource-lists-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rld\"]\n  },\n  \"application/rfc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/riscos\": {\n    \"source\": \"iana\"\n  },\n  \"application/rlmi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rls-services+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rs\"]\n  },\n  \"application/route-apd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rapd\"]\n  },\n  \"application/route-s-tsid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sls\"]\n  },\n  \"application/route-usd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rusd\"]\n  },\n  \"application/rpki-checklist\": {\n    \"source\": \"iana\"\n  },\n  \"application/rpki-ghostbusters\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gbr\"]\n  },\n  \"application/rpki-manifest\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mft\"]\n  },\n  \"application/rpki-publication\": {\n    \"source\": \"iana\"\n  },\n  \"application/rpki-roa\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"roa\"]\n  },\n  \"application/rpki-signed-tal\": {\n    \"source\": \"iana\"\n  },\n  \"application/rpki-updown\": {\n    \"source\": \"iana\"\n  },\n  \"application/rsd+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rsd\"]\n  },\n  \"application/rss+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rss\"]\n  },\n  \"application/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"application/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"application/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"application/samlassertion+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/samlmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sarif+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sarif-external-properties+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sbe\": {\n    \"source\": \"iana\"\n  },\n  \"application/sbml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sbml\"]\n  },\n  \"application/scaip+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scim+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scvp-cv-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scq\"]\n  },\n  \"application/scvp-cv-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scs\"]\n  },\n  \"application/scvp-vp-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spq\"]\n  },\n  \"application/scvp-vp-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spp\"]\n  },\n  \"application/sdp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sdp\"]\n  },\n  \"application/secevent+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/senml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"senmlx\"]\n  },\n  \"application/senml-etch+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml-etch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/senml-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/sensml+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/sensml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sensml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sensmlx\"]\n  },\n  \"application/sensml-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/sep+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sep-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/session-info\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setpay\"]\n  },\n  \"application/set-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-registration-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setreg\"]\n  },\n  \"application/sgml\": {\n    \"source\": \"iana\"\n  },\n  \"application/sgml-open-catalog\": {\n    \"source\": \"iana\"\n  },\n  \"application/shf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"shf\"]\n  },\n  \"application/sieve\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"siv\",\"sieve\"]\n  },\n  \"application/simple-filter+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/simple-message-summary\": {\n    \"source\": \"iana\"\n  },\n  \"application/simplesymbolcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/sipc\": {\n    \"source\": \"iana\"\n  },\n  \"application/slate\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil\": {\n    \"source\": \"apache\"\n  },\n  \"application/smil+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"smi\",\"smil\"]\n  },\n  \"application/smpte336m\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sparql-query\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rq\"]\n  },\n  \"application/sparql-results+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"srx\"]\n  },\n  \"application/spdx+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/spirits-event+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sql\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sql\"]\n  },\n  \"application/srgs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gram\"]\n  },\n  \"application/srgs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"grxml\"]\n  },\n  \"application/sru+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sru\"]\n  },\n  \"application/ssdl+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ssdl\"]\n  },\n  \"application/sslkeylogfile\": {\n    \"source\": \"iana\"\n  },\n  \"application/ssml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ssml\"]\n  },\n  \"application/st2110-41\": {\n    \"source\": \"iana\"\n  },\n  \"application/stix+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/stratum\": {\n    \"source\": \"iana\"\n  },\n  \"application/swid+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/swid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"swidtag\"]\n  },\n  \"application/tamp-apex-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-apex-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-error\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tar\": {\n    \"compressible\": true\n  },\n  \"application/taxii+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/td+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/tei+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tei\",\"teicorpus\"]\n  },\n  \"application/tetra_isi\": {\n    \"source\": \"iana\"\n  },\n  \"application/thraud+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tfi\"]\n  },\n  \"application/timestamp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamp-reply\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamped-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tsd\"]\n  },\n  \"application/tlsrpt+gzip\": {\n    \"source\": \"iana\"\n  },\n  \"application/tlsrpt+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/tm+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/tnauthlist\": {\n    \"source\": \"iana\"\n  },\n  \"application/toc+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/token-introspection+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/toml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"toml\"]\n  },\n  \"application/trickle-ice-sdpfrag\": {\n    \"source\": \"iana\"\n  },\n  \"application/trig\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"trig\"]\n  },\n  \"application/trust-chain+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/trust-mark+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/trust-mark-delegation+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/ttml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ttml\"]\n  },\n  \"application/tve-trigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/tzif\": {\n    \"source\": \"iana\"\n  },\n  \"application/tzif-leap\": {\n    \"source\": \"iana\"\n  },\n  \"application/ubjson\": {\n    \"compressible\": false,\n    \"extensions\": [\"ubj\"]\n  },\n  \"application/uccs+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/ujcs+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/urc-grpsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/urc-ressheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rsheet\"]\n  },\n  \"application/urc-targetdesc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"td\"]\n  },\n  \"application/urc-uisocketdesc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vc+cose\": {\n    \"source\": \"iana\"\n  },\n  \"application/vc+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vcard+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vcard+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vemmi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vividence.scriptfile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.1000minds.decision-model+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"1km\"]\n  },\n  \"application/vnd.1ob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp-prose+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-prose-pc3a+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-prose-pc3ach+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-prose-pc3ch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-prose-pc8+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-v2x-local-service-information\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.5gnas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.5gsa2x\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.5gsa2x-local-service-information\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.5gsv2x\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.5gsv2x-local-service-information\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.access-transfer-events+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.bsf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.crs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.current-location-discovery+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.gmop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.gtpc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.interworking-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.lpp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mc-signalling-ear\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-regroup+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-signalling\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-location-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-regroup+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-signed+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-regroup+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mid-call+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.ngap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pfcp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pic-bw-large\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-small\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"psb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-var\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pvb\"]\n  },\n  \"application/vnd.3gpp.pinapp-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.s1ap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.seal-group-doc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.seal-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.seal-location-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.seal-mbms-usage-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.seal-network-qos-management-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.seal-ue-config-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.seal-unicast-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.seal-user-profile-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.sms+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.srvcc-ext+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.srvcc-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.state-and-event-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.ussd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.v2x\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.vae-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp2.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp2.tcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tcap\"]\n  },\n  \"application/vnd.3lightssoftware.imagescal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3m.post-it-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pwn\"]\n  },\n  \"application/vnd.accpac.simply.aso\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aso\"]\n  },\n  \"application/vnd.accpac.simply.imp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"imp\"]\n  },\n  \"application/vnd.acm.addressxfer+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.acm.chatbot+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.acucobol\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acu\"]\n  },\n  \"application/vnd.acucorp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atc\",\"acutc\"]\n  },\n  \"application/vnd.adobe.air-application-installer-package+zip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"air\"]\n  },\n  \"application/vnd.adobe.flash.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.formscentral.fcdt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcdt\"]\n  },\n  \"application/vnd.adobe.fxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fxp\",\"fxpl\"]\n  },\n  \"application/vnd.adobe.partial-upload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.xdp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdp\"]\n  },\n  \"application/vnd.adobe.xfdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xfdf\"]\n  },\n  \"application/vnd.aether.imp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.afplinedata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.afplinedata-pagedef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.cmoca-cmresource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-charset\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-codedfont\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-codepage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-cmtable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-formdef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-mediummap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-objectcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-overlay\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-pagesegment\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.age\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"age\"]\n  },\n  \"application/vnd.ah-barcode\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ahead.space\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ahead\"]\n  },\n  \"application/vnd.airzip.filesecure.azf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azf\"]\n  },\n  \"application/vnd.airzip.filesecure.azs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azs\"]\n  },\n  \"application/vnd.amadeus+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.amazon.ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"azw\"]\n  },\n  \"application/vnd.amazon.mobi8-ebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.americandynamics.acc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acc\"]\n  },\n  \"application/vnd.amiga.ami\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ami\"]\n  },\n  \"application/vnd.amundsen.maze+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.android.ota\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.android.package-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"apk\"]\n  },\n  \"application/vnd.anki\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.anser-web-certificate-issue-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cii\"]\n  },\n  \"application/vnd.anser-web-funds-transfer-initiation\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fti\"]\n  },\n  \"application/vnd.antix.game-component\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atx\"]\n  },\n  \"application/vnd.apache.arrow.file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.arrow.stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.parquet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.compact\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.json\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apexlang\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.api+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.aplextor.warrp+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apothekende.reservation+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apple.installer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpkg\"]\n  },\n  \"application/vnd.apple.keynote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"key\"]\n  },\n  \"application/vnd.apple.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m3u8\"]\n  },\n  \"application/vnd.apple.numbers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"numbers\"]\n  },\n  \"application/vnd.apple.pages\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pages\"]\n  },\n  \"application/vnd.apple.pkpass\": {\n    \"compressible\": false,\n    \"extensions\": [\"pkpass\"]\n  },\n  \"application/vnd.arastra.swi\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.aristanetworks.swi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"swi\"]\n  },\n  \"application/vnd.artisan+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.artsquare\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.astraea-software.iota\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iota\"]\n  },\n  \"application/vnd.audiograph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aep\"]\n  },\n  \"application/vnd.autodesk.fbx\": {\n    \"extensions\": [\"fbx\"]\n  },\n  \"application/vnd.autopackage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.avalon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.avistar+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.balsamiq.bmml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmml\"]\n  },\n  \"application/vnd.balsamiq.bmpr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.banana-accounting\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.error\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bekitzur-stech+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.belightsoft.lhzd+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.belightsoft.lhzl+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.bint.med-content\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.biopax.rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.blink-idb-value-wrapper\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.blueice.multipass\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpm\"]\n  },\n  \"application/vnd.bluetooth.ep.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bluetooth.le.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bmi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bmi\"]\n  },\n  \"application/vnd.bpf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bpf3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.businessobjects\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rep\"]\n  },\n  \"application/vnd.byu.uapi+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bzip3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.c3voc.schedule+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cab-jscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-cpdl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-lips\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.capasystems-pg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cendio.thinlinc.clientconf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.century-systems.tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chemdraw+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cdxml\"]\n  },\n  \"application/vnd.chess-pgn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chipnuts.karaoke-mmd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmd\"]\n  },\n  \"application/vnd.ciedi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cinderella\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdy\"]\n  },\n  \"application/vnd.cirpack.isdn-ext\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.citationstyles.style+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csl\"]\n  },\n  \"application/vnd.claymore\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cla\"]\n  },\n  \"application/vnd.cloanto.rp9\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rp9\"]\n  },\n  \"application/vnd.clonk.c4group\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amc\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amz\"]\n  },\n  \"application/vnd.cncf.helm.chart.content.v1.tar+gzip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cncf.helm.chart.provenance.v1.prov\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cncf.helm.config.v1+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.coffeescript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collection+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.doc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.next+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.comicbook+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.comicbook-rar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commerce-battelle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commonspace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"csp\"]\n  },\n  \"application/vnd.contact.cmsg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdbcmsg\"]\n  },\n  \"application/vnd.coreos.ignition+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cosmocaller\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmc\"]\n  },\n  \"application/vnd.crick.clicker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkx\"]\n  },\n  \"application/vnd.crick.clicker.keyboard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkk\"]\n  },\n  \"application/vnd.crick.clicker.palette\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkp\"]\n  },\n  \"application/vnd.crick.clicker.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkt\"]\n  },\n  \"application/vnd.crick.clicker.wordbank\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkw\"]\n  },\n  \"application/vnd.criticaltools.wbs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wbs\"]\n  },\n  \"application/vnd.cryptii.pipe+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.crypto-shade-file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cryptomator.encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cryptomator.vault\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ctc-posml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pml\"]\n  },\n  \"application/vnd.ctct.ws+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cups-pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-postscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-ppd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppd\"]\n  },\n  \"application/vnd.cups-raster\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-raw\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl.car\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"car\"]\n  },\n  \"application/vnd.curl.pcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcurl\"]\n  },\n  \"application/vnd.cyan.dean.root+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cybank\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cyclonedx+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cyclonedx+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.d2l.coursepackage1p0+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.d3m-dataset\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.d3m-problem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dart\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dart\"]\n  },\n  \"application/vnd.data-vision.rdz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rdz\"]\n  },\n  \"application/vnd.datalog\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.datapackage+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dataresource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dbf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dbf\"]\n  },\n  \"application/vnd.dcmp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dcmp\"]\n  },\n  \"application/vnd.debian.binary-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dece.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n  },\n  \"application/vnd.dece.ttml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uvt\",\"uvvt\"]\n  },\n  \"application/vnd.dece.unspecified\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvx\",\"uvvx\"]\n  },\n  \"application/vnd.dece.zip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvz\",\"uvvz\"]\n  },\n  \"application/vnd.denovo.fcselayout-link\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fe_launch\"]\n  },\n  \"application/vnd.desmume.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dm.delegation+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dna\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dna\"]\n  },\n  \"application/vnd.document+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dolby.mlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mlp\"]\n  },\n  \"application/vnd.dolby.mobile.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dolby.mobile.2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.doremir.scorecloud-binary-document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dpgraph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dpg\"]\n  },\n  \"application/vnd.dreamfactory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dfac\"]\n  },\n  \"application/vnd.drive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ds-keypoint\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"kpxx\"]\n  },\n  \"application/vnd.dtg.local\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.flash\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ait\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ait\"]\n  },\n  \"application/vnd.dvb.dvbisl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.dvbj\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.esgcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcdftnotifaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgpdd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcroaming\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-base\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-enhancement\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-aggregate-root+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-container+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-generic+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-msglist+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-init+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.pfr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.service\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svc\"]\n  },\n  \"application/vnd.dxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dynageo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"geo\"]\n  },\n  \"application/vnd.dzr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.easykaraoke.cdgdownload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecdis-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecip.rlp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eclipse.ditto+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ecowin.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mag\"]\n  },\n  \"application/vnd.ecowin.filerequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.fileupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.series\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesrequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.img\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.iso\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eln+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.emclient.accessrequest+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.enliven\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nml\"]\n  },\n  \"application/vnd.enphase.envoy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eprints.data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.epson.esf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esf\"]\n  },\n  \"application/vnd.epson.msf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msf\"]\n  },\n  \"application/vnd.epson.quickanime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qam\"]\n  },\n  \"application/vnd.epson.salt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"slt\"]\n  },\n  \"application/vnd.epson.ssf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ssf\"]\n  },\n  \"application/vnd.ericsson.quickcall\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.erofs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.espass-espass+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.eszigno3+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"es3\",\"et3\"]\n  },\n  \"application/vnd.etsi.aoc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.asic-e+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.etsi.asic-s+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.etsi.cug+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvcommand+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvdiscovery+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-bc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-cod+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-npvr+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvservice+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsync+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvueprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.mcid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.mheg5\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.pstn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.sci+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.simservs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.timestamp-token\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.tsl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.tsl.der\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eu.kasparian.car+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.eudora.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.profile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.settings\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.theme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.exstream-empower+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.exstream-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ezpix-album\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez2\"]\n  },\n  \"application/vnd.ezpix-package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez3\"]\n  },\n  \"application/vnd.f-secure.mobile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.familysearch.gedcom+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.fastcopy-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fdf\"]\n  },\n  \"application/vnd.fdsn.mseed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseed\"]\n  },\n  \"application/vnd.fdsn.seed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"seed\",\"dataless\"]\n  },\n  \"application/vnd.fdsn.stationxml+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"XML-BASED\",\n    \"compressible\": true\n  },\n  \"application/vnd.ffsns\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ficlab.flb+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.filmit.zfc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fints\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.firemonkeys.cloudcell\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.flographit\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gph\"]\n  },\n  \"application/vnd.fluxtime.clip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ftc\"]\n  },\n  \"application/vnd.font-fontforge-sfd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.framemaker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n  },\n  \"application/vnd.freelog.comic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.frogans.fnc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fnc\"]\n  },\n  \"application/vnd.frogans.ltf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ltf\"]\n  },\n  \"application/vnd.fsc.weblaunch\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fsc\"]\n  },\n  \"application/vnd.fujifilm.fb.docuworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.docuworks.binder\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.jfi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.fujitsu.oasys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oas\"]\n  },\n  \"application/vnd.fujitsu.oasys2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa2\"]\n  },\n  \"application/vnd.fujitsu.oasys3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa3\"]\n  },\n  \"application/vnd.fujitsu.oasysgp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fg5\"]\n  },\n  \"application/vnd.fujitsu.oasysprs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bh2\"]\n  },\n  \"application/vnd.fujixerox.art-ex\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.art4\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.ddd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ddd\"]\n  },\n  \"application/vnd.fujixerox.docuworks\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdw\"]\n  },\n  \"application/vnd.fujixerox.docuworks.binder\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xbd\"]\n  },\n  \"application/vnd.fujixerox.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.hbpl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fut-misnet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.futoin+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.futoin+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.fuzzysheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fzs\"]\n  },\n  \"application/vnd.ga4gh.passport+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.genomatix.tuxedo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txd\"]\n  },\n  \"application/vnd.genozip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gentics.grd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.gentoo.catmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.gentoo.ebuild\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gentoo.eclass\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gentoo.gpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gentoo.manifest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gentoo.pkgmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.gentoo.xpak\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.geo+json\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.geocube+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.geogebra.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggb\"]\n  },\n  \"application/vnd.geogebra.pinboard\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.geogebra.slides\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggs\"]\n  },\n  \"application/vnd.geogebra.tool\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggt\"]\n  },\n  \"application/vnd.geometry-explorer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gex\",\"gre\"]\n  },\n  \"application/vnd.geonext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gxt\"]\n  },\n  \"application/vnd.geoplan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g2w\"]\n  },\n  \"application/vnd.geospace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3w\"]\n  },\n  \"application/vnd.gerber\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gmx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gmx\"]\n  },\n  \"application/vnd.gnu.taler.exchange+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.gnu.taler.merchant+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.google-apps.audio\": {},\n  \"application/vnd.google-apps.document\": {\n    \"compressible\": false,\n    \"extensions\": [\"gdoc\"]\n  },\n  \"application/vnd.google-apps.drawing\": {\n    \"compressible\": false,\n    \"extensions\": [\"gdraw\"]\n  },\n  \"application/vnd.google-apps.drive-sdk\": {\n    \"compressible\": false\n  },\n  \"application/vnd.google-apps.file\": {},\n  \"application/vnd.google-apps.folder\": {\n    \"compressible\": false\n  },\n  \"application/vnd.google-apps.form\": {\n    \"compressible\": false,\n    \"extensions\": [\"gform\"]\n  },\n  \"application/vnd.google-apps.fusiontable\": {},\n  \"application/vnd.google-apps.jam\": {\n    \"compressible\": false,\n    \"extensions\": [\"gjam\"]\n  },\n  \"application/vnd.google-apps.mail-layout\": {},\n  \"application/vnd.google-apps.map\": {\n    \"compressible\": false,\n    \"extensions\": [\"gmap\"]\n  },\n  \"application/vnd.google-apps.photo\": {},\n  \"application/vnd.google-apps.presentation\": {\n    \"compressible\": false,\n    \"extensions\": [\"gslides\"]\n  },\n  \"application/vnd.google-apps.script\": {\n    \"compressible\": false,\n    \"extensions\": [\"gscript\"]\n  },\n  \"application/vnd.google-apps.shortcut\": {},\n  \"application/vnd.google-apps.site\": {\n    \"compressible\": false,\n    \"extensions\": [\"gsite\"]\n  },\n  \"application/vnd.google-apps.spreadsheet\": {\n    \"compressible\": false,\n    \"extensions\": [\"gsheet\"]\n  },\n  \"application/vnd.google-apps.unknown\": {},\n  \"application/vnd.google-apps.video\": {},\n  \"application/vnd.google-earth.kml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"kml\"]\n  },\n  \"application/vnd.google-earth.kmz\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"kmz\"]\n  },\n  \"application/vnd.gov.sk.e-form+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.gov.sk.e-form+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdcf\"]\n  },\n  \"application/vnd.gpxsee.map+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.grafeq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gqf\",\"gqs\"]\n  },\n  \"application/vnd.gridmp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.groove-account\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gac\"]\n  },\n  \"application/vnd.groove-help\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ghf\"]\n  },\n  \"application/vnd.groove-identity-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gim\"]\n  },\n  \"application/vnd.groove-injector\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"grv\"]\n  },\n  \"application/vnd.groove-tool-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtm\"]\n  },\n  \"application/vnd.groove-tool-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpl\"]\n  },\n  \"application/vnd.groove-vcard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcg\"]\n  },\n  \"application/vnd.hal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hal+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"hal\"]\n  },\n  \"application/vnd.handheld-entertainment+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"zmm\"]\n  },\n  \"application/vnd.hbci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hbci\"]\n  },\n  \"application/vnd.hc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hcl-bireports\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hdt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.heroku+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hhe.lesson-player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"les\"]\n  },\n  \"application/vnd.hp-hpgl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpgl\"]\n  },\n  \"application/vnd.hp-hpid\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpid\"]\n  },\n  \"application/vnd.hp-hps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hps\"]\n  },\n  \"application/vnd.hp-jlyt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jlt\"]\n  },\n  \"application/vnd.hp-pcl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcl\"]\n  },\n  \"application/vnd.hp-pclxl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pclxl\"]\n  },\n  \"application/vnd.hsl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.httphone\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hydrostatix.sof-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfd-hdstx\"]\n  },\n  \"application/vnd.hyper+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyper-item+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyperdrive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hzn-3d-crossword\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.afplinedata\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ibm.electronic-media\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.minipay\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpy\"]\n  },\n  \"application/vnd.ibm.modcap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n  },\n  \"application/vnd.ibm.rights-management\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"irm\"]\n  },\n  \"application/vnd.ibm.secure-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sc\"]\n  },\n  \"application/vnd.iccprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"icc\",\"icm\"]\n  },\n  \"application/vnd.ieee.1905\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.igloader\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igl\"]\n  },\n  \"application/vnd.imagemeter.folder+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.imagemeter.image+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.immervision-ivp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivp\"]\n  },\n  \"application/vnd.immervision-ivu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivu\"]\n  },\n  \"application/vnd.ims.imsccv1p1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.lis.v2.result+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informedcontrol.rms+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informix-visionary\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.infotech.project\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.innopath.wamp.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.insors.igm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igm\"]\n  },\n  \"application/vnd.intercon.formnet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpw\",\"xpx\"]\n  },\n  \"application/vnd.intergeo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"i2g\"]\n  },\n  \"application/vnd.intertrust.digibox\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intertrust.nncp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intu.qbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qbo\"]\n  },\n  \"application/vnd.intu.qfx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qfx\"]\n  },\n  \"application/vnd.ipfs.ipns-record\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ipld.car\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ipld.dag-cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ipld.dag-json\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ipld.raw\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.iptc.g2.catalogitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.conceptitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.newsitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.newsmessage+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.packageitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.planningitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ipunplugged.rcprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rcprofile\"]\n  },\n  \"application/vnd.irepository.package+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"irp\"]\n  },\n  \"application/vnd.is-xpr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpr\"]\n  },\n  \"application/vnd.isac.fcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcs\"]\n  },\n  \"application/vnd.iso11783-10+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.jam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jam\"]\n  },\n  \"application/vnd.japannet-directory-service\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-jpnstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-payment-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-setstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.jcp.javame.midlet-rms\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rms\"]\n  },\n  \"application/vnd.jisp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jisp\"]\n  },\n  \"application/vnd.joost.joda-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"joda\"]\n  },\n  \"application/vnd.jsk.isdn-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.kahootz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktz\",\"ktr\"]\n  },\n  \"application/vnd.kde.karbon\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"karbon\"]\n  },\n  \"application/vnd.kde.kchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chrt\"]\n  },\n  \"application/vnd.kde.kformula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kfo\"]\n  },\n  \"application/vnd.kde.kivio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flw\"]\n  },\n  \"application/vnd.kde.kontour\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kon\"]\n  },\n  \"application/vnd.kde.kpresenter\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kpr\",\"kpt\"]\n  },\n  \"application/vnd.kde.kspread\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ksp\"]\n  },\n  \"application/vnd.kde.kword\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kwd\",\"kwt\"]\n  },\n  \"application/vnd.kdl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.kenameaapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"htke\"]\n  },\n  \"application/vnd.keyman.kmp+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.keyman.kmx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.kidspiration\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kia\"]\n  },\n  \"application/vnd.kinar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kne\",\"knp\"]\n  },\n  \"application/vnd.koan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n  },\n  \"application/vnd.kodak-descriptor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sse\"]\n  },\n  \"application/vnd.las\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.las.las+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.las.las+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lasxml\"]\n  },\n  \"application/vnd.laszip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ldev.productlicensing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.leap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.liberty-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.llamagraphics.life-balance.desktop\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lbd\"]\n  },\n  \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lbe\"]\n  },\n  \"application/vnd.logipipe.circuit+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.loom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.lotus-1-2-3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"123\"]\n  },\n  \"application/vnd.lotus-approach\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"apr\"]\n  },\n  \"application/vnd.lotus-freelance\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pre\"]\n  },\n  \"application/vnd.lotus-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nsf\"]\n  },\n  \"application/vnd.lotus-organizer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"org\"]\n  },\n  \"application/vnd.lotus-screencam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scm\"]\n  },\n  \"application/vnd.lotus-wordpro\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lwp\"]\n  },\n  \"application/vnd.macports.portpkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"portpkg\"]\n  },\n  \"application/vnd.mapbox-vector-tile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mvt\"]\n  },\n  \"application/vnd.marlin.drm.actiontoken+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.conftoken+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.license+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.mdcf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mason+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.maxar.archive.3tz+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.maxmind.maxmind-db\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mcd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mcd\"]\n  },\n  \"application/vnd.mdl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mdl-mbsdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.medcalcdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mc1\"]\n  },\n  \"application/vnd.mediastation.cdkey\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdkey\"]\n  },\n  \"application/vnd.medicalholodeck.recordxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.meridian-slingshot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mermaid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mfer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mwf\"]\n  },\n  \"application/vnd.mfmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mfm\"]\n  },\n  \"application/vnd.micro+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.micrografx.flo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flo\"]\n  },\n  \"application/vnd.micrografx.igx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igx\"]\n  },\n  \"application/vnd.microsoft.portable-executable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.microsoft.windows.thumbnail-cache\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.miele+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.mif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mif\"]\n  },\n  \"application/vnd.minisoft-hp3000-save\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mobius.daf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"daf\"]\n  },\n  \"application/vnd.mobius.dis\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dis\"]\n  },\n  \"application/vnd.mobius.mbk\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbk\"]\n  },\n  \"application/vnd.mobius.mqy\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mqy\"]\n  },\n  \"application/vnd.mobius.msl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msl\"]\n  },\n  \"application/vnd.mobius.plc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plc\"]\n  },\n  \"application/vnd.mobius.txf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txf\"]\n  },\n  \"application/vnd.modl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mophun.application\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpn\"]\n  },\n  \"application/vnd.mophun.certificate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpc\"]\n  },\n  \"application/vnd.motorola.flexsuite\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.adsi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.fis\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.gotap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.kmr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.ttc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.wem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.iprm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mozilla.xul+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xul\"]\n  },\n  \"application/vnd.ms-3mfdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-artgalry\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cil\"]\n  },\n  \"application/vnd.ms-asf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-cab-compressed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cab\"]\n  },\n  \"application/vnd.ms-color.iccprofile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-excel\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n  },\n  \"application/vnd.ms-excel.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlam\"]\n  },\n  \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsb\"]\n  },\n  \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsm\"]\n  },\n  \"application/vnd.ms-excel.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltm\"]\n  },\n  \"application/vnd.ms-fontobject\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eot\"]\n  },\n  \"application/vnd.ms-htmlhelp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chm\"]\n  },\n  \"application/vnd.ms-ims\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ims\"]\n  },\n  \"application/vnd.ms-lrm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lrm\"]\n  },\n  \"application/vnd.ms-office.activex+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-officetheme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"thmx\"]\n  },\n  \"application/vnd.ms-opentype\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-outlook\": {\n    \"compressible\": false,\n    \"extensions\": [\"msg\"]\n  },\n  \"application/vnd.ms-package.obfuscated-opentype\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-pki.seccat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cat\"]\n  },\n  \"application/vnd.ms-pki.stl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stl\"]\n  },\n  \"application/vnd.ms-playready.initiator+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-powerpoint\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n  },\n  \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppam\"]\n  },\n  \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pptm\"]\n  },\n  \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldm\"]\n  },\n  \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsm\"]\n  },\n  \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potm\"]\n  },\n  \"application/vnd.ms-printdevicecapabilities+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-printing.printticket+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-printschematicket+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-project\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpp\",\"mpt\"]\n  },\n  \"application/vnd.ms-tnef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-visio.viewer\": {\n    \"extensions\": [\"vdx\"]\n  },\n  \"application/vnd.ms-windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.nwprinting.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.printerpairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.wsd.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-word.document.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"docm\"]\n  },\n  \"application/vnd.ms-word.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotm\"]\n  },\n  \"application/vnd.ms-works\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n  },\n  \"application/vnd.ms-wpl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpl\"]\n  },\n  \"application/vnd.ms-xpsdocument\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xps\"]\n  },\n  \"application/vnd.msa-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mseq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseq\"]\n  },\n  \"application/vnd.msgpack\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.msign\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator.cif\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.music-niff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.musician\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mus\"]\n  },\n  \"application/vnd.muvee.style\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msty\"]\n  },\n  \"application/vnd.mynfc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"taglet\"]\n  },\n  \"application/vnd.nacamar.ybrid+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nato.bindingdataobject+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nato.bindingdataobject+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nato.bindingdataobject+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bdo\"]\n  },\n  \"application/vnd.nato.openxmlformats-package.iepd+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.ncd.control\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ncd.reference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nearst.inv+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nebumind.line\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nervana\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.netfpx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.neurolanguage.nlu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nlu\"]\n  },\n  \"application/vnd.nimn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.nitro.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.snes.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nitf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ntf\",\"nitf\"]\n  },\n  \"application/vnd.noblenet-directory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnd\"]\n  },\n  \"application/vnd.noblenet-sealer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nns\"]\n  },\n  \"application/vnd.noblenet-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnw\"]\n  },\n  \"application/vnd.nokia.catalogs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.iptv.config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.isds-radio-presets\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.landmarkcollection+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.n-gage.ac+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ac\"]\n  },\n  \"application/vnd.nokia.n-gage.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ngdat\"]\n  },\n  \"application/vnd.nokia.n-gage.symbian.install\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"n-gage\"]\n  },\n  \"application/vnd.nokia.ncd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.radio-preset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpst\"]\n  },\n  \"application/vnd.nokia.radio-presets\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpss\"]\n  },\n  \"application/vnd.novadigm.edm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edm\"]\n  },\n  \"application/vnd.novadigm.edx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edx\"]\n  },\n  \"application/vnd.novadigm.ext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ext\"]\n  },\n  \"application/vnd.ntt-local.content-share\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.file-transfer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.ogw_remote-access\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_remote\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oai.workflows\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oai.workflows+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oai.workflows+yaml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oasis.opendocument.base\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oasis.opendocument.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odc\"]\n  },\n  \"application/vnd.oasis.opendocument.chart-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otc\"]\n  },\n  \"application/vnd.oasis.opendocument.database\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"odb\"]\n  },\n  \"application/vnd.oasis.opendocument.formula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odf\"]\n  },\n  \"application/vnd.oasis.opendocument.formula-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odft\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odg\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otg\"]\n  },\n  \"application/vnd.oasis.opendocument.image\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odi\"]\n  },\n  \"application/vnd.oasis.opendocument.image-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oti\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odp\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otp\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ods\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ots\"]\n  },\n  \"application/vnd.oasis.opendocument.text\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odt\"]\n  },\n  \"application/vnd.oasis.opendocument.text-master\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odm\"]\n  },\n  \"application/vnd.oasis.opendocument.text-master-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oasis.opendocument.text-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ott\"]\n  },\n  \"application/vnd.oasis.opendocument.text-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oth\"]\n  },\n  \"application/vnd.obn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ocf+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oci.image.manifest.v1+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oftn.l10n+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessdownload+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessstreaming+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.cspg-hexbinary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.dae.svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.dae.xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.pae.gem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.spdiscovery+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.spdlist+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.ueprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.userprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.olpc-sugar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xo\"]\n  },\n  \"application/vnd.oma-scws-config\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.drm-trigger+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.imd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.ltkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.notification+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.provisioningtrigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgboot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgdd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.sgdu\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.simple-symbol-container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.sprov+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.stkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-address-book+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-feature-handler+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-pcc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-subs-invite+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-user-prefs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dcdc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dd2+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dd2\"]\n  },\n  \"application/vnd.oma.drm.risd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.group-usage-list+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.lwm2m+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+tlv\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.pal+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.final-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.groups+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.push\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.scidm.messages+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.xcap-directory+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-email+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-file+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-folder+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omaloc-supl-init\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepager\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertat\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onvif.metadata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openblox.game+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"obgx\"]\n  },\n  \"application/vnd.openblox.game-binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openeye.oeb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openofficeorg.extension\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"oxt\"]\n  },\n  \"application/vnd.openstreetmap.data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"osm\"]\n  },\n  \"application/vnd.opentimestamps.ots\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openvpi.dspx+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pptx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xlsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"docx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.core-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.relationships+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oracle.resource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.orange.indata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osa.netdeploy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgeo.mapguide.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgp\"]\n  },\n  \"application/vnd.osgi.bundle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgi.dp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dp\"]\n  },\n  \"application/vnd.osgi.subsystem\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esa\"]\n  },\n  \"application/vnd.otps.ct-kip+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oxli.countgraph\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pagerduty+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.palm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n  },\n  \"application/vnd.panoply\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.paos.xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.patentdive\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.patientecommsdoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pawaafile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"paw\"]\n  },\n  \"application/vnd.pcos\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pg.format\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"str\"]\n  },\n  \"application/vnd.pg.osasli\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ei6\"]\n  },\n  \"application/vnd.piaccess.application-licence\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.picsel\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"efif\"]\n  },\n  \"application/vnd.pmi.widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wg\"]\n  },\n  \"application/vnd.poc.group-advertisement+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.pocketlearn\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plf\"]\n  },\n  \"application/vnd.powerbuilder6\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pbd\"]\n  },\n  \"application/vnd.powerbuilder6-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.preminet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.previewsystems.box\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"box\"]\n  },\n  \"application/vnd.procrate.brushset\": {\n    \"extensions\": [\"brushset\"]\n  },\n  \"application/vnd.procreate.brush\": {\n    \"extensions\": [\"brush\"]\n  },\n  \"application/vnd.procreate.dream\": {\n    \"extensions\": [\"drm\"]\n  },\n  \"application/vnd.proteus.magazine\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgz\"]\n  },\n  \"application/vnd.psfs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pt.mundusmundi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.publishare-delta-tree\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qps\"]\n  },\n  \"application/vnd.pvi.ptid1\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ptid\"]\n  },\n  \"application/vnd.pwg-multiplexed\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pwg-xhtml-print+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xhtm\"]\n  },\n  \"application/vnd.qualcomm.brew-app-res\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quarantainenet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quark.quarkxpress\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n  },\n  \"application/vnd.quobject-quoxdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.moml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-conf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-conn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-dialog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-stream+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-conf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-base+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-group+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-speech+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-transform+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rainstor.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rapid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rar\"]\n  },\n  \"application/vnd.realvnc.bed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bed\"]\n  },\n  \"application/vnd.recordare.musicxml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxl\"]\n  },\n  \"application/vnd.recordare.musicxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"musicxml\"]\n  },\n  \"application/vnd.relpipe\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.renlearn.rlprint\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.resilient.logic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.restful+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rig.cryptonote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cryptonote\"]\n  },\n  \"application/vnd.rim.cod\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cod\"]\n  },\n  \"application/vnd.rn-realmedia\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rm\"]\n  },\n  \"application/vnd.rn-realmedia-vbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmvb\"]\n  },\n  \"application/vnd.route66.link66+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"link66\"]\n  },\n  \"application/vnd.rs-274x\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ruckus.download\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.s3sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sailingtracker.track\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"st\"]\n  },\n  \"application/vnd.sar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.cid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.mid2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.scribus\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.3df\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.csf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.doc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.eml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.mht\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.net\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.ppt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.tiff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.xls\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.seemail\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"see\"]\n  },\n  \"application/vnd.seis+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.sema\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sema\"]\n  },\n  \"application/vnd.semd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semd\"]\n  },\n  \"application/vnd.semf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semf\"]\n  },\n  \"application/vnd.shade-save-file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.shana.informed.formdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ifm\"]\n  },\n  \"application/vnd.shana.informed.formtemplate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"itp\"]\n  },\n  \"application/vnd.shana.informed.interchange\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iif\"]\n  },\n  \"application/vnd.shana.informed.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipk\"]\n  },\n  \"application/vnd.shootproof+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.shopkick+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.shp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.shx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sigrok.session\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.simtech-mindmapper\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"twd\",\"twds\"]\n  },\n  \"application/vnd.siren+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.sketchometry\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.smaf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmf\"]\n  },\n  \"application/vnd.smart.notebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.smart.teacher\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"teacher\"]\n  },\n  \"application/vnd.smintio.portals.archive\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.snesdev-page-table\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.software602.filler.form+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"fo\"]\n  },\n  \"application/vnd.software602.filler.form-xml-zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.solent.sdkm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sdkm\",\"sdkd\"]\n  },\n  \"application/vnd.spotfire.dxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxp\"]\n  },\n  \"application/vnd.spotfire.sfs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfs\"]\n  },\n  \"application/vnd.sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-cod\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-dtf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-ntf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.stardivision.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdc\"]\n  },\n  \"application/vnd.stardivision.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sda\"]\n  },\n  \"application/vnd.stardivision.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdd\"]\n  },\n  \"application/vnd.stardivision.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smf\"]\n  },\n  \"application/vnd.stardivision.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdw\",\"vor\"]\n  },\n  \"application/vnd.stardivision.writer-global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgl\"]\n  },\n  \"application/vnd.stepmania.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"smzip\"]\n  },\n  \"application/vnd.stepmania.stepchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sm\"]\n  },\n  \"application/vnd.street-stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sun.wadl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wadl\"]\n  },\n  \"application/vnd.sun.xml.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxc\"]\n  },\n  \"application/vnd.sun.xml.calc.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stc\"]\n  },\n  \"application/vnd.sun.xml.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxd\"]\n  },\n  \"application/vnd.sun.xml.draw.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"std\"]\n  },\n  \"application/vnd.sun.xml.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxi\"]\n  },\n  \"application/vnd.sun.xml.impress.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sti\"]\n  },\n  \"application/vnd.sun.xml.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxm\"]\n  },\n  \"application/vnd.sun.xml.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxw\"]\n  },\n  \"application/vnd.sun.xml.writer.global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxg\"]\n  },\n  \"application/vnd.sun.xml.writer.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stw\"]\n  },\n  \"application/vnd.sus-calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sus\",\"susp\"]\n  },\n  \"application/vnd.svd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svd\"]\n  },\n  \"application/vnd.swiftview-ics\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sybyl.mol2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sycle+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.syft+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.symbian.install\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sis\",\"sisx\"]\n  },\n  \"application/vnd.syncml+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"xsm\"]\n  },\n  \"application/vnd.syncml.dm+wbxml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"bdm\"]\n  },\n  \"application/vnd.syncml.dm+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"xdm\"]\n  },\n  \"application/vnd.syncml.dm.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"ddf\"]\n  },\n  \"application/vnd.syncml.dmtnds+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmtnds+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.syncml.ds.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tableschema+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tao.intent-module-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tao\"]\n  },\n  \"application/vnd.tcpdump.pcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n  },\n  \"application/vnd.think-cell.ppttc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tmd.mediaflex.api+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tmobile-livetv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tmo\"]\n  },\n  \"application/vnd.tri.onesource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.trid.tpt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpt\"]\n  },\n  \"application/vnd.triscape.mxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxs\"]\n  },\n  \"application/vnd.trueapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tra\"]\n  },\n  \"application/vnd.truedoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ubisoft.webplayer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ufdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ufd\",\"ufdl\"]\n  },\n  \"application/vnd.uic.osdm+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.uiq.theme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"utz\"]\n  },\n  \"application/vnd.umajin\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"umj\"]\n  },\n  \"application/vnd.unity\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"unityweb\"]\n  },\n  \"application/vnd.uoml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uoml\",\"uo\"]\n  },\n  \"application/vnd.uplanet.alert\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.alert-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.signal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uri-map\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.valve.source.material\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcx\"]\n  },\n  \"application/vnd.vd-study\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vectorworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vel+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.veraison.tsm-report+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.veraison.tsm-report+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.verimatrix.vcas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.veritone.aion+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.veryant.thin\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ves.encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vidsoft.vidconference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.visio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\",\"vsdx\",\"vtx\"]\n  },\n  \"application/vnd.visionary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vis\"]\n  },\n  \"application/vnd.vividence.scriptfile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vocalshaper.vsp4\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vsf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsf\"]\n  },\n  \"application/vnd.wap.sic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.slc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.wbxml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"wbxml\"]\n  },\n  \"application/vnd.wap.wmlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlc\"]\n  },\n  \"application/vnd.wap.wmlscriptc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlsc\"]\n  },\n  \"application/vnd.wasmflow.wafl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.webturbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wtb\"]\n  },\n  \"application/vnd.wfa.dpp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.p2p\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.wsc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmf.bootstrap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica.package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nbp\"]\n  },\n  \"application/vnd.wordlift\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wordperfect\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpd\"]\n  },\n  \"application/vnd.wqd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wqd\"]\n  },\n  \"application/vnd.wrq-hp3000-labelled\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wt.stf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stf\"]\n  },\n  \"application/vnd.wv.csp+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wv.csp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.wv.ssp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xacml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xara\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xar\"]\n  },\n  \"application/vnd.xarin.cpj\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xecrets-encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xfdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdl\"]\n  },\n  \"application/vnd.xfdl.webform\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xmpie.cpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.dpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.plan\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.ppkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.xlim\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.hv-dic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvd\"]\n  },\n  \"application/vnd.yamaha.hv-script\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvs\"]\n  },\n  \"application/vnd.yamaha.hv-voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvp\"]\n  },\n  \"application/vnd.yamaha.openscoreformat\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"osf\"]\n  },\n  \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"osfpvg\"]\n  },\n  \"application/vnd.yamaha.remote-setup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.smaf-audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"saf\"]\n  },\n  \"application/vnd.yamaha.smaf-phrase\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spf\"]\n  },\n  \"application/vnd.yamaha.through-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.tunnel-udpencap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yaoweme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yellowriver-custom-menu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmp\"]\n  },\n  \"application/vnd.zul\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"zir\",\"zirz\"]\n  },\n  \"application/vnd.zzazz.deck+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"zaz\"]\n  },\n  \"application/voicexml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vxml\"]\n  },\n  \"application/voucher-cms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/voucher-jws+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vp+cose\": {\n    \"source\": \"iana\"\n  },\n  \"application/vp+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vq-rtcpxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/wasm\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wasm\"]\n  },\n  \"application/watcherinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wif\"]\n  },\n  \"application/webpush-options+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/whoispp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/whoispp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wgt\"]\n  },\n  \"application/winhlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hlp\"]\n  },\n  \"application/wita\": {\n    \"source\": \"iana\"\n  },\n  \"application/wordperfect5.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/wsdl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wsdl\"]\n  },\n  \"application/wspolicy+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wspolicy\"]\n  },\n  \"application/x-7z-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"7z\"]\n  },\n  \"application/x-abiword\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"abw\"]\n  },\n  \"application/x-ace-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ace\"]\n  },\n  \"application/x-amf\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-apple-diskimage\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dmg\"]\n  },\n  \"application/x-arj\": {\n    \"compressible\": false,\n    \"extensions\": [\"arj\"]\n  },\n  \"application/x-authorware-bin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n  },\n  \"application/x-authorware-map\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aam\"]\n  },\n  \"application/x-authorware-seg\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aas\"]\n  },\n  \"application/x-bcpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bcpio\"]\n  },\n  \"application/x-bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/x-bittorrent\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"torrent\"]\n  },\n  \"application/x-blender\": {\n    \"extensions\": [\"blend\"]\n  },\n  \"application/x-blorb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"blb\",\"blorb\"]\n  },\n  \"application/x-bzip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz\"]\n  },\n  \"application/x-bzip2\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz2\",\"boz\"]\n  },\n  \"application/x-cbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n  },\n  \"application/x-cdlink\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcd\"]\n  },\n  \"application/x-cfs-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cfs\"]\n  },\n  \"application/x-chat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"chat\"]\n  },\n  \"application/x-chess-pgn\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgn\"]\n  },\n  \"application/x-chrome-extension\": {\n    \"extensions\": [\"crx\"]\n  },\n  \"application/x-cocoa\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"cco\"]\n  },\n  \"application/x-compress\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-compressed\": {\n    \"extensions\": [\"rar\"]\n  },\n  \"application/x-conference\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nsc\"]\n  },\n  \"application/x-cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpio\"]\n  },\n  \"application/x-csh\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csh\"]\n  },\n  \"application/x-deb\": {\n    \"compressible\": false\n  },\n  \"application/x-debian-package\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"deb\",\"udeb\"]\n  },\n  \"application/x-dgc-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dgc\"]\n  },\n  \"application/x-director\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n  },\n  \"application/x-doom\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wad\"]\n  },\n  \"application/x-dtbncx+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ncx\"]\n  },\n  \"application/x-dtbook+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"dtb\"]\n  },\n  \"application/x-dtbresource+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"res\"]\n  },\n  \"application/x-dvi\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"dvi\"]\n  },\n  \"application/x-envoy\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"evy\"]\n  },\n  \"application/x-eva\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"eva\"]\n  },\n  \"application/x-font-bdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bdf\"]\n  },\n  \"application/x-font-dos\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-framemaker\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-ghostscript\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gsf\"]\n  },\n  \"application/x-font-libgrx\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-linux-psf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"psf\"]\n  },\n  \"application/x-font-pcf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcf\"]\n  },\n  \"application/x-font-snf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"snf\"]\n  },\n  \"application/x-font-speedo\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-sunos-news\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-type1\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n  },\n  \"application/x-font-vfont\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-freearc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"arc\"]\n  },\n  \"application/x-futuresplash\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"spl\"]\n  },\n  \"application/x-gca-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gca\"]\n  },\n  \"application/x-glulx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ulx\"]\n  },\n  \"application/x-gnumeric\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gnumeric\"]\n  },\n  \"application/x-gramps-xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gramps\"]\n  },\n  \"application/x-gtar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gtar\"]\n  },\n  \"application/x-gzip\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-hdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hdf\"]\n  },\n  \"application/x-httpd-php\": {\n    \"compressible\": true,\n    \"extensions\": [\"php\"]\n  },\n  \"application/x-install-instructions\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"install\"]\n  },\n  \"application/x-ipynb+json\": {\n    \"compressible\": true,\n    \"extensions\": [\"ipynb\"]\n  },\n  \"application/x-iso9660-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"iso\"]\n  },\n  \"application/x-iwork-keynote-sffkey\": {\n    \"extensions\": [\"key\"]\n  },\n  \"application/x-iwork-numbers-sffnumbers\": {\n    \"extensions\": [\"numbers\"]\n  },\n  \"application/x-iwork-pages-sffpages\": {\n    \"extensions\": [\"pages\"]\n  },\n  \"application/x-java-archive-diff\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jardiff\"]\n  },\n  \"application/x-java-jnlp-file\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jnlp\"]\n  },\n  \"application/x-javascript\": {\n    \"compressible\": true\n  },\n  \"application/x-keepass2\": {\n    \"extensions\": [\"kdbx\"]\n  },\n  \"application/x-latex\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"latex\"]\n  },\n  \"application/x-lua-bytecode\": {\n    \"extensions\": [\"luac\"]\n  },\n  \"application/x-lzh-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lzh\",\"lha\"]\n  },\n  \"application/x-makeself\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"run\"]\n  },\n  \"application/x-mie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mie\"]\n  },\n  \"application/x-mobipocket-ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prc\",\"mobi\"]\n  },\n  \"application/x-mpegurl\": {\n    \"compressible\": false\n  },\n  \"application/x-ms-application\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"application\"]\n  },\n  \"application/x-ms-shortcut\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lnk\"]\n  },\n  \"application/x-ms-wmd\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmd\"]\n  },\n  \"application/x-ms-wmz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmz\"]\n  },\n  \"application/x-ms-xbap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbap\"]\n  },\n  \"application/x-msaccess\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mdb\"]\n  },\n  \"application/x-msbinder\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obd\"]\n  },\n  \"application/x-mscardfile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"crd\"]\n  },\n  \"application/x-msclip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"clp\"]\n  },\n  \"application/x-msdos-program\": {\n    \"extensions\": [\"exe\"]\n  },\n  \"application/x-msdownload\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n  },\n  \"application/x-msmediaview\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n  },\n  \"application/x-msmetafile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n  },\n  \"application/x-msmoney\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mny\"]\n  },\n  \"application/x-mspublisher\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pub\"]\n  },\n  \"application/x-msschedule\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scd\"]\n  },\n  \"application/x-msterminal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"trm\"]\n  },\n  \"application/x-mswrite\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wri\"]\n  },\n  \"application/x-netcdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nc\",\"cdf\"]\n  },\n  \"application/x-ns-proxy-autoconfig\": {\n    \"compressible\": true,\n    \"extensions\": [\"pac\"]\n  },\n  \"application/x-nzb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nzb\"]\n  },\n  \"application/x-perl\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"pl\",\"pm\"]\n  },\n  \"application/x-pilot\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"prc\",\"pdb\"]\n  },\n  \"application/x-pkcs12\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"p12\",\"pfx\"]\n  },\n  \"application/x-pkcs7-certificates\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7b\",\"spc\"]\n  },\n  \"application/x-pkcs7-certreqresp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7r\"]\n  },\n  \"application/x-pki-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-rar-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"rar\"]\n  },\n  \"application/x-redhat-package-manager\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"rpm\"]\n  },\n  \"application/x-research-info-systems\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ris\"]\n  },\n  \"application/x-sea\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"sea\"]\n  },\n  \"application/x-sh\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"sh\"]\n  },\n  \"application/x-shar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"shar\"]\n  },\n  \"application/x-shockwave-flash\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"swf\"]\n  },\n  \"application/x-silverlight-app\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xap\"]\n  },\n  \"application/x-sql\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sql\"]\n  },\n  \"application/x-stuffit\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"sit\"]\n  },\n  \"application/x-stuffitx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sitx\"]\n  },\n  \"application/x-subrip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"srt\"]\n  },\n  \"application/x-sv4cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4cpio\"]\n  },\n  \"application/x-sv4crc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4crc\"]\n  },\n  \"application/x-t3vm-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"t3\"]\n  },\n  \"application/x-tads\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gam\"]\n  },\n  \"application/x-tar\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"tar\"]\n  },\n  \"application/x-tcl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tcl\",\"tk\"]\n  },\n  \"application/x-tex\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tex\"]\n  },\n  \"application/x-tex-tfm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tfm\"]\n  },\n  \"application/x-texinfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"texinfo\",\"texi\"]\n  },\n  \"application/x-tgif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obj\"]\n  },\n  \"application/x-ustar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ustar\"]\n  },\n  \"application/x-virtualbox-hdd\": {\n    \"compressible\": true,\n    \"extensions\": [\"hdd\"]\n  },\n  \"application/x-virtualbox-ova\": {\n    \"compressible\": true,\n    \"extensions\": [\"ova\"]\n  },\n  \"application/x-virtualbox-ovf\": {\n    \"compressible\": true,\n    \"extensions\": [\"ovf\"]\n  },\n  \"application/x-virtualbox-vbox\": {\n    \"compressible\": true,\n    \"extensions\": [\"vbox\"]\n  },\n  \"application/x-virtualbox-vbox-extpack\": {\n    \"compressible\": false,\n    \"extensions\": [\"vbox-extpack\"]\n  },\n  \"application/x-virtualbox-vdi\": {\n    \"compressible\": true,\n    \"extensions\": [\"vdi\"]\n  },\n  \"application/x-virtualbox-vhd\": {\n    \"compressible\": true,\n    \"extensions\": [\"vhd\"]\n  },\n  \"application/x-virtualbox-vmdk\": {\n    \"compressible\": true,\n    \"extensions\": [\"vmdk\"]\n  },\n  \"application/x-wais-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"src\"]\n  },\n  \"application/x-web-app-manifest+json\": {\n    \"compressible\": true,\n    \"extensions\": [\"webapp\"]\n  },\n  \"application/x-www-form-urlencoded\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/x-x509-ca-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"der\",\"crt\",\"pem\"]\n  },\n  \"application/x-x509-ca-ra-cert\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-x509-next-ca-cert\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-xfig\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fig\"]\n  },\n  \"application/x-xliff+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/x-xpinstall\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"xpi\"]\n  },\n  \"application/x-xz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xz\"]\n  },\n  \"application/x-zip-compressed\": {\n    \"extensions\": [\"zip\"]\n  },\n  \"application/x-zmachine\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n  },\n  \"application/x400-bp\": {\n    \"source\": \"iana\"\n  },\n  \"application/xacml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xaml+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xaml\"]\n  },\n  \"application/xcap-att+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xav\"]\n  },\n  \"application/xcap-caps+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xca\"]\n  },\n  \"application/xcap-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdf\"]\n  },\n  \"application/xcap-el+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xel\"]\n  },\n  \"application/xcap-error+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xcap-ns+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xns\"]\n  },\n  \"application/xcon-conference-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xcon-conference-info-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xenc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xenc\"]\n  },\n  \"application/xfdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdf\"]\n  },\n  \"application/xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xhtml\",\"xht\"]\n  },\n  \"application/xhtml-voice+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/xliff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n  },\n  \"application/xml-dtd\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dtd\"]\n  },\n  \"application/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"application/xml-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xmpp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xop\"]\n  },\n  \"application/xproc+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xpl\"]\n  },\n  \"application/xslt+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xsl\",\"xslt\"]\n  },\n  \"application/xspf+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xspf\"]\n  },\n  \"application/xv+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n  },\n  \"application/yaml\": {\n    \"source\": \"iana\"\n  },\n  \"application/yang\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"yang\"]\n  },\n  \"application/yang-data+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/yang-data+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-sid+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yin+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"yin\"]\n  },\n  \"application/zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"zip\"]\n  },\n  \"application/zip+dotlottie\": {\n    \"extensions\": [\"lottie\"]\n  },\n  \"application/zlib\": {\n    \"source\": \"iana\"\n  },\n  \"application/zstd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/3gpp\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"3gpp\"]\n  },\n  \"audio/3gpp2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aac\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"adts\",\"aac\"]\n  },\n  \"audio/ac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/adpcm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"adp\"]\n  },\n  \"audio/amr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"amr\"]\n  },\n  \"audio/amr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/amr-wb+\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aptx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/asc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-advanced-lossless\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/basic\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"au\",\"snd\"]\n  },\n  \"audio/bv16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/bv32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/clearmode\": {\n    \"source\": \"iana\"\n  },\n  \"audio/cn\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dat12\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dls\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es201108\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202050\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202211\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202212\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dvi4\": {\n    \"source\": \"iana\"\n  },\n  \"audio/eac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evs\": {\n    \"source\": \"iana\"\n  },\n  \"audio/flac\": {\n    \"source\": \"iana\"\n  },\n  \"audio/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g711-0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g719\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g722\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7221\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g723\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-24\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-40\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g728\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7291\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729d\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729e\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-efr\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-hr-08\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ilbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ip-mr_v2.5\": {\n    \"source\": \"iana\"\n  },\n  \"audio/isac\": {\n    \"source\": \"apache\"\n  },\n  \"audio/l16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l20\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l24\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/l8\": {\n    \"source\": \"iana\"\n  },\n  \"audio/lpc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/matroska\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp1200\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp2400\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp600\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mhas\": {\n    \"source\": \"iana\"\n  },\n  \"audio/midi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n  },\n  \"audio/midi-clip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mobile-xmf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxmf\"]\n  },\n  \"audio/mp3\": {\n    \"compressible\": false,\n    \"extensions\": [\"mp3\"]\n  },\n  \"audio/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"m4a\",\"mp4a\",\"m4b\"]\n  },\n  \"audio/mp4a-latm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa-robust\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n  },\n  \"audio/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"audio/musepack\": {\n    \"source\": \"apache\"\n  },\n  \"audio/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"oga\",\"ogg\",\"spx\",\"opus\"]\n  },\n  \"audio/opus\": {\n    \"source\": \"iana\"\n  },\n  \"audio/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/prs.sid\": {\n    \"source\": \"iana\"\n  },\n  \"audio/qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/red\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/s3m\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s3m\"]\n  },\n  \"audio/scip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/silk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sil\"]\n  },\n  \"audio/smv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sofa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/speex\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t140c\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t38\": {\n    \"source\": \"iana\"\n  },\n  \"audio/telephone-event\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tetra_acelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tetra_acelp_bb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tone\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tsvcis\": {\n    \"source\": \"iana\"\n  },\n  \"audio/uemclip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/usac\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vdvi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vmr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.3gpp.iufp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.4sb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.audiokoz\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.celp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cisco.nse\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cmles.radio-events\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.anp1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.inf1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dece.audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uva\",\"uvva\"]\n  },\n  \"audio/vnd.digital-winds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"eol\"]\n  },\n  \"audio/vnd.dlna.adts\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mlp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mps\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2z\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pulse.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dra\"]\n  },\n  \"audio/vnd.dts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dts\"]\n  },\n  \"audio/vnd.dts.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dtshd\"]\n  },\n  \"audio/vnd.dts.uhd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dvb.file\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.everad.plj\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.hns.audio\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.lucent.voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lvp\"]\n  },\n  \"audio/vnd.ms-playready.media.pya\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pya\"]\n  },\n  \"audio/vnd.nokia.mobile-xmf\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nortel.vbk\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nuera.ecelp4800\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp4800\"]\n  },\n  \"audio/vnd.nuera.ecelp7470\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp7470\"]\n  },\n  \"audio/vnd.nuera.ecelp9600\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp9600\"]\n  },\n  \"audio/vnd.octel.sbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.presonus.multitrack\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.qcelp\": {\n    \"source\": \"apache\"\n  },\n  \"audio/vnd.rhetorex.32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rip\"]\n  },\n  \"audio/vnd.rn-realaudio\": {\n    \"compressible\": false\n  },\n  \"audio/vnd.sealedmedia.softseal.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.vmx.cvsd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.wave\": {\n    \"compressible\": false\n  },\n  \"audio/vorbis\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/vorbis-config\": {\n    \"source\": \"iana\"\n  },\n  \"audio/wav\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/wave\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"weba\"]\n  },\n  \"audio/x-aac\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"aac\"]\n  },\n  \"audio/x-aiff\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n  },\n  \"audio/x-caf\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"caf\"]\n  },\n  \"audio/x-flac\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"flac\"]\n  },\n  \"audio/x-m4a\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"m4a\"]\n  },\n  \"audio/x-matroska\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mka\"]\n  },\n  \"audio/x-mpegurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m3u\"]\n  },\n  \"audio/x-ms-wax\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wax\"]\n  },\n  \"audio/x-ms-wma\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wma\"]\n  },\n  \"audio/x-pn-realaudio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ram\",\"ra\"]\n  },\n  \"audio/x-pn-realaudio-plugin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmp\"]\n  },\n  \"audio/x-realaudio\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"ra\"]\n  },\n  \"audio/x-tta\": {\n    \"source\": \"apache\"\n  },\n  \"audio/x-wav\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/xm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xm\"]\n  },\n  \"chemical/x-cdx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cdx\"]\n  },\n  \"chemical/x-cif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cif\"]\n  },\n  \"chemical/x-cmdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmdf\"]\n  },\n  \"chemical/x-cml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cml\"]\n  },\n  \"chemical/x-csml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csml\"]\n  },\n  \"chemical/x-pdb\": {\n    \"source\": \"apache\"\n  },\n  \"chemical/x-xyz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xyz\"]\n  },\n  \"font/collection\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ttc\"]\n  },\n  \"font/otf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"otf\"]\n  },\n  \"font/sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"font/ttf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ttf\"]\n  },\n  \"font/woff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff\"]\n  },\n  \"font/woff2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff2\"]\n  },\n  \"image/aces\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exr\"]\n  },\n  \"image/apng\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"apng\"]\n  },\n  \"image/avci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"avci\"]\n  },\n  \"image/avcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"avcs\"]\n  },\n  \"image/avif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"avif\"]\n  },\n  \"image/bmp\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\",\"dib\"]\n  },\n  \"image/cgm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cgm\"]\n  },\n  \"image/dicom-rle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"drle\"]\n  },\n  \"image/dpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dpx\"]\n  },\n  \"image/emf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"emf\"]\n  },\n  \"image/fits\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fits\"]\n  },\n  \"image/g3fax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3\"]\n  },\n  \"image/gif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gif\"]\n  },\n  \"image/heic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heic\"]\n  },\n  \"image/heic-sequence\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heics\"]\n  },\n  \"image/heif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heif\"]\n  },\n  \"image/heif-sequence\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heifs\"]\n  },\n  \"image/hej2k\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hej2\"]\n  },\n  \"image/ief\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ief\"]\n  },\n  \"image/j2c\": {\n    \"source\": \"iana\"\n  },\n  \"image/jaii\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jaii\"]\n  },\n  \"image/jais\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jais\"]\n  },\n  \"image/jls\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jls\"]\n  },\n  \"image/jp2\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jp2\",\"jpg2\"]\n  },\n  \"image/jpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpg\",\"jpeg\",\"jpe\"]\n  },\n  \"image/jph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jph\"]\n  },\n  \"image/jphc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jhc\"]\n  },\n  \"image/jpm\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpm\",\"jpgm\"]\n  },\n  \"image/jpx\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpx\",\"jpf\"]\n  },\n  \"image/jxl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxl\"]\n  },\n  \"image/jxr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxr\"]\n  },\n  \"image/jxra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxra\"]\n  },\n  \"image/jxrs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxrs\"]\n  },\n  \"image/jxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxs\"]\n  },\n  \"image/jxsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxsc\"]\n  },\n  \"image/jxsi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxsi\"]\n  },\n  \"image/jxss\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxss\"]\n  },\n  \"image/ktx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx\"]\n  },\n  \"image/ktx2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx2\"]\n  },\n  \"image/naplps\": {\n    \"source\": \"iana\"\n  },\n  \"image/pjpeg\": {\n    \"compressible\": false,\n    \"extensions\": [\"jfif\"]\n  },\n  \"image/png\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"png\"]\n  },\n  \"image/prs.btif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"btif\",\"btf\"]\n  },\n  \"image/prs.pti\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pti\"]\n  },\n  \"image/pwg-raster\": {\n    \"source\": \"iana\"\n  },\n  \"image/sgi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgi\"]\n  },\n  \"image/svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"svg\",\"svgz\"]\n  },\n  \"image/t38\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t38\"]\n  },\n  \"image/tiff\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"tif\",\"tiff\"]\n  },\n  \"image/tiff-fx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tfx\"]\n  },\n  \"image/vnd.adobe.photoshop\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"psd\"]\n  },\n  \"image/vnd.airzip.accelerator.azv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azv\"]\n  },\n  \"image/vnd.clip\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.cns.inf2\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.dece.graphic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n  },\n  \"image/vnd.djvu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"djvu\",\"djv\"]\n  },\n  \"image/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"image/vnd.dwg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwg\"]\n  },\n  \"image/vnd.dxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxf\"]\n  },\n  \"image/vnd.fastbidsheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fbs\"]\n  },\n  \"image/vnd.fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fpx\"]\n  },\n  \"image/vnd.fst\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fst\"]\n  },\n  \"image/vnd.fujixerox.edmics-mmr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmr\"]\n  },\n  \"image/vnd.fujixerox.edmics-rlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rlc\"]\n  },\n  \"image/vnd.globalgraphics.pgb\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.microsoft.icon\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/vnd.mix\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.mozilla.apng\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.ms-dds\": {\n    \"compressible\": true,\n    \"extensions\": [\"dds\"]\n  },\n  \"image/vnd.ms-modi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mdi\"]\n  },\n  \"image/vnd.ms-photo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wdp\"]\n  },\n  \"image/vnd.net-fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"npx\"]\n  },\n  \"image/vnd.pco.b16\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"b16\"]\n  },\n  \"image/vnd.radiance\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealed.png\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.gif\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.jpg\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.svf\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.tencent.tap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tap\"]\n  },\n  \"image/vnd.valve.source.texture\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtf\"]\n  },\n  \"image/vnd.wap.wbmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wbmp\"]\n  },\n  \"image/vnd.xiff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xif\"]\n  },\n  \"image/vnd.zbrush.pcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/webp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"webp\"]\n  },\n  \"image/wmf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmf\"]\n  },\n  \"image/x-3ds\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"3ds\"]\n  },\n  \"image/x-adobe-dng\": {\n    \"extensions\": [\"dng\"]\n  },\n  \"image/x-cmu-raster\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ras\"]\n  },\n  \"image/x-cmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmx\"]\n  },\n  \"image/x-emf\": {\n    \"source\": \"iana\"\n  },\n  \"image/x-freehand\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n  },\n  \"image/x-icon\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/x-jng\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jng\"]\n  },\n  \"image/x-mrsid-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sid\"]\n  },\n  \"image/x-ms-bmp\": {\n    \"source\": \"nginx\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/x-pcx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/x-pict\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pic\",\"pct\"]\n  },\n  \"image/x-portable-anymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pnm\"]\n  },\n  \"image/x-portable-bitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pbm\"]\n  },\n  \"image/x-portable-graymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgm\"]\n  },\n  \"image/x-portable-pixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ppm\"]\n  },\n  \"image/x-rgb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rgb\"]\n  },\n  \"image/x-tga\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tga\"]\n  },\n  \"image/x-wmf\": {\n    \"source\": \"iana\"\n  },\n  \"image/x-xbitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbm\"]\n  },\n  \"image/x-xcf\": {\n    \"compressible\": false\n  },\n  \"image/x-xpixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xpm\"]\n  },\n  \"image/x-xwindowdump\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xwd\"]\n  },\n  \"message/bhttp\": {\n    \"source\": \"iana\"\n  },\n  \"message/cpim\": {\n    \"source\": \"iana\"\n  },\n  \"message/delivery-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\n      \"disposition-notification\"\n    ]\n  },\n  \"message/external-body\": {\n    \"source\": \"iana\"\n  },\n  \"message/feedback-report\": {\n    \"source\": \"iana\"\n  },\n  \"message/global\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8msg\"]\n  },\n  \"message/global-delivery-status\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8dsn\"]\n  },\n  \"message/global-disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8mdn\"]\n  },\n  \"message/global-headers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8hdr\"]\n  },\n  \"message/http\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/imdn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"message/mls\": {\n    \"source\": \"iana\"\n  },\n  \"message/news\": {\n    \"source\": \"apache\"\n  },\n  \"message/ohttp-req\": {\n    \"source\": \"iana\"\n  },\n  \"message/ohttp-res\": {\n    \"source\": \"iana\"\n  },\n  \"message/partial\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/rfc822\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eml\",\"mime\",\"mht\",\"mhtml\"]\n  },\n  \"message/s-http\": {\n    \"source\": \"apache\"\n  },\n  \"message/sip\": {\n    \"source\": \"iana\"\n  },\n  \"message/sipfrag\": {\n    \"source\": \"iana\"\n  },\n  \"message/tracking-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.si.simp\": {\n    \"source\": \"apache\"\n  },\n  \"message/vnd.wfa.wsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wsc\"]\n  },\n  \"model/3mf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3mf\"]\n  },\n  \"model/e57\": {\n    \"source\": \"iana\"\n  },\n  \"model/gltf+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gltf\"]\n  },\n  \"model/gltf-binary\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"glb\"]\n  },\n  \"model/iges\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"igs\",\"iges\"]\n  },\n  \"model/jt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jt\"]\n  },\n  \"model/mesh\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n  },\n  \"model/mtl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mtl\"]\n  },\n  \"model/obj\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"obj\"]\n  },\n  \"model/prc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"prc\"]\n  },\n  \"model/step\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"step\",\"stp\",\"stpnc\",\"p21\",\"210\"]\n  },\n  \"model/step+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"stpx\"]\n  },\n  \"model/step+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"stpz\"]\n  },\n  \"model/step-xml+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"stpxz\"]\n  },\n  \"model/stl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stl\"]\n  },\n  \"model/u3d\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u3d\"]\n  },\n  \"model/vnd.bary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bary\"]\n  },\n  \"model/vnd.cld\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cld\"]\n  },\n  \"model/vnd.collada+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dae\"]\n  },\n  \"model/vnd.dwf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwf\"]\n  },\n  \"model/vnd.flatland.3dml\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gdl\"]\n  },\n  \"model/vnd.gs-gdl\": {\n    \"source\": \"apache\"\n  },\n  \"model/vnd.gs.gdl\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gtw\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtw\"]\n  },\n  \"model/vnd.moml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"model/vnd.mts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mts\"]\n  },\n  \"model/vnd.opengex\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ogex\"]\n  },\n  \"model/vnd.parasolid.transmit.binary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x_b\"]\n  },\n  \"model/vnd.parasolid.transmit.text\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x_t\"]\n  },\n  \"model/vnd.pytha.pyox\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pyo\",\"pyox\"]\n  },\n  \"model/vnd.rosette.annotated-data-model\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.sap.vds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vds\"]\n  },\n  \"model/vnd.usda\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"usda\"]\n  },\n  \"model/vnd.usdz+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"usdz\"]\n  },\n  \"model/vnd.valve.source.compiled-map\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bsp\"]\n  },\n  \"model/vnd.vtu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtu\"]\n  },\n  \"model/vrml\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"wrl\",\"vrml\"]\n  },\n  \"model/x3d+binary\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3db\",\"x3dbz\"]\n  },\n  \"model/x3d+fastinfoset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x3db\"]\n  },\n  \"model/x3d+vrml\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3dv\",\"x3dvz\"]\n  },\n  \"model/x3d+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"x3d\",\"x3dz\"]\n  },\n  \"model/x3d-vrml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x3dv\"]\n  },\n  \"multipart/alternative\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/appledouble\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/byteranges\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/digest\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/form-data\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/header-set\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/mixed\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/multilingual\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/parallel\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/related\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/report\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/signed\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/vnd.bint.med-plus\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/voice-message\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/x-mixed-replace\": {\n    \"source\": \"iana\"\n  },\n  \"text/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/cache-manifest\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"appcache\",\"manifest\"]\n  },\n  \"text/calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ics\",\"ifb\"]\n  },\n  \"text/calender\": {\n    \"compressible\": true\n  },\n  \"text/cmd\": {\n    \"compressible\": true\n  },\n  \"text/coffeescript\": {\n    \"extensions\": [\"coffee\",\"litcoffee\"]\n  },\n  \"text/cql\": {\n    \"source\": \"iana\"\n  },\n  \"text/cql-expression\": {\n    \"source\": \"iana\"\n  },\n  \"text/cql-identifier\": {\n    \"source\": \"iana\"\n  },\n  \"text/css\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"css\"]\n  },\n  \"text/csv\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csv\"]\n  },\n  \"text/csv-schema\": {\n    \"source\": \"iana\"\n  },\n  \"text/directory\": {\n    \"source\": \"iana\"\n  },\n  \"text/dns\": {\n    \"source\": \"iana\"\n  },\n  \"text/ecmascript\": {\n    \"source\": \"apache\"\n  },\n  \"text/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"text/enriched\": {\n    \"source\": \"iana\"\n  },\n  \"text/fhirpath\": {\n    \"source\": \"iana\"\n  },\n  \"text/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"text/gff3\": {\n    \"source\": \"iana\"\n  },\n  \"text/grammar-ref-list\": {\n    \"source\": \"iana\"\n  },\n  \"text/hl7v2\": {\n    \"source\": \"iana\"\n  },\n  \"text/html\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"html\",\"htm\",\"shtml\"]\n  },\n  \"text/jade\": {\n    \"extensions\": [\"jade\"]\n  },\n  \"text/javascript\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"js\",\"mjs\"]\n  },\n  \"text/jcr-cnd\": {\n    \"source\": \"iana\"\n  },\n  \"text/jsx\": {\n    \"compressible\": true,\n    \"extensions\": [\"jsx\"]\n  },\n  \"text/less\": {\n    \"compressible\": true,\n    \"extensions\": [\"less\"]\n  },\n  \"text/markdown\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"md\",\"markdown\"]\n  },\n  \"text/mathml\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"mml\"]\n  },\n  \"text/mdx\": {\n    \"compressible\": true,\n    \"extensions\": [\"mdx\"]\n  },\n  \"text/mizar\": {\n    \"source\": \"iana\"\n  },\n  \"text/n3\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"n3\"]\n  },\n  \"text/parameters\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/plain\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n  },\n  \"text/provenance-notation\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/prs.fallenstein.rst\": {\n    \"source\": \"iana\"\n  },\n  \"text/prs.lines.tag\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dsc\"]\n  },\n  \"text/prs.prop.logic\": {\n    \"source\": \"iana\"\n  },\n  \"text/prs.texi\": {\n    \"source\": \"iana\"\n  },\n  \"text/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/red\": {\n    \"source\": \"iana\"\n  },\n  \"text/rfc822-headers\": {\n    \"source\": \"iana\"\n  },\n  \"text/richtext\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtx\"]\n  },\n  \"text/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"text/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"text/sgml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sgml\",\"sgm\"]\n  },\n  \"text/shaclc\": {\n    \"source\": \"iana\"\n  },\n  \"text/shex\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"shex\"]\n  },\n  \"text/slim\": {\n    \"extensions\": [\"slim\",\"slm\"]\n  },\n  \"text/spdx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spdx\"]\n  },\n  \"text/strings\": {\n    \"source\": \"iana\"\n  },\n  \"text/stylus\": {\n    \"extensions\": [\"stylus\",\"styl\"]\n  },\n  \"text/t140\": {\n    \"source\": \"iana\"\n  },\n  \"text/tab-separated-values\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tsv\"]\n  },\n  \"text/troff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n  },\n  \"text/turtle\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"ttl\"]\n  },\n  \"text/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/uri-list\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uri\",\"uris\",\"urls\"]\n  },\n  \"text/vcard\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vcard\"]\n  },\n  \"text/vnd.a\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.abc\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ascii-art\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.curl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"curl\"]\n  },\n  \"text/vnd.curl.dcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dcurl\"]\n  },\n  \"text/vnd.curl.mcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mcurl\"]\n  },\n  \"text/vnd.curl.scurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scurl\"]\n  },\n  \"text/vnd.debian.copyright\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.dmclientscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"text/vnd.esmertec.theme-descriptor\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.exchangeable\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.familysearch.gedcom\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ged\"]\n  },\n  \"text/vnd.ficlab.flt\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.fly\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fly\"]\n  },\n  \"text/vnd.fmi.flexstor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flx\"]\n  },\n  \"text/vnd.gml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.graphviz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gv\"]\n  },\n  \"text/vnd.hans\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.hgl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.in3d.3dml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3dml\"]\n  },\n  \"text/vnd.in3d.spot\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spot\"]\n  },\n  \"text/vnd.iptc.newsml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.iptc.nitf\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.latex-z\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.motorola.reflex\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ms-mediapackage\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.net2phone.commcenter.command\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.radisys.msml-basic-layout\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.senx.warpscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.si.uricatalogue\": {\n    \"source\": \"apache\"\n  },\n  \"text/vnd.sosi\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.sun.j2me.app-descriptor\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"jad\"]\n  },\n  \"text/vnd.trolltech.linguist\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.vcf\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.si\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.sl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.wml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wml\"]\n  },\n  \"text/vnd.wap.wmlscript\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmls\"]\n  },\n  \"text/vnd.zoo.kcl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vtt\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"vtt\"]\n  },\n  \"text/wgsl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wgsl\"]\n  },\n  \"text/x-asm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s\",\"asm\"]\n  },\n  \"text/x-c\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n  },\n  \"text/x-component\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"htc\"]\n  },\n  \"text/x-fortran\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n  },\n  \"text/x-gwt-rpc\": {\n    \"compressible\": true\n  },\n  \"text/x-handlebars-template\": {\n    \"extensions\": [\"hbs\"]\n  },\n  \"text/x-java-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"java\"]\n  },\n  \"text/x-jquery-tmpl\": {\n    \"compressible\": true\n  },\n  \"text/x-lua\": {\n    \"extensions\": [\"lua\"]\n  },\n  \"text/x-markdown\": {\n    \"compressible\": true,\n    \"extensions\": [\"mkd\"]\n  },\n  \"text/x-nfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nfo\"]\n  },\n  \"text/x-opml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"opml\"]\n  },\n  \"text/x-org\": {\n    \"compressible\": true,\n    \"extensions\": [\"org\"]\n  },\n  \"text/x-pascal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p\",\"pas\"]\n  },\n  \"text/x-processing\": {\n    \"compressible\": true,\n    \"extensions\": [\"pde\"]\n  },\n  \"text/x-sass\": {\n    \"extensions\": [\"sass\"]\n  },\n  \"text/x-scss\": {\n    \"extensions\": [\"scss\"]\n  },\n  \"text/x-setext\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"etx\"]\n  },\n  \"text/x-sfv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sfv\"]\n  },\n  \"text/x-suse-ymp\": {\n    \"compressible\": true,\n    \"extensions\": [\"ymp\"]\n  },\n  \"text/x-uuencode\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"uu\"]\n  },\n  \"text/x-vcalendar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcs\"]\n  },\n  \"text/x-vcard\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcf\"]\n  },\n  \"text/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\"]\n  },\n  \"text/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"text/yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"yaml\",\"yml\"]\n  },\n  \"video/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3gp\",\"3gpp\"]\n  },\n  \"video/3gpp-tt\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3g2\"]\n  },\n  \"video/av1\": {\n    \"source\": \"iana\"\n  },\n  \"video/bmpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/bt656\": {\n    \"source\": \"iana\"\n  },\n  \"video/celb\": {\n    \"source\": \"iana\"\n  },\n  \"video/dv\": {\n    \"source\": \"iana\"\n  },\n  \"video/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"video/evc\": {\n    \"source\": \"iana\"\n  },\n  \"video/ffv1\": {\n    \"source\": \"iana\"\n  },\n  \"video/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/h261\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h261\"]\n  },\n  \"video/h263\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h263\"]\n  },\n  \"video/h263-1998\": {\n    \"source\": \"iana\"\n  },\n  \"video/h263-2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h264\"]\n  },\n  \"video/h264-rcdo\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264-svc\": {\n    \"source\": \"iana\"\n  },\n  \"video/h265\": {\n    \"source\": \"iana\"\n  },\n  \"video/h266\": {\n    \"source\": \"iana\"\n  },\n  \"video/iso.segment\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m4s\"]\n  },\n  \"video/jpeg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jpgv\"]\n  },\n  \"video/jpeg2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/jpm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"jpm\",\"jpgm\"]\n  },\n  \"video/jxsv\": {\n    \"source\": \"iana\"\n  },\n  \"video/lottie+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"video/matroska\": {\n    \"source\": \"iana\"\n  },\n  \"video/matroska-3d\": {\n    \"source\": \"iana\"\n  },\n  \"video/mj2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mj2\",\"mjp2\"]\n  },\n  \"video/mp1s\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2p\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2t\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ts\",\"m2t\",\"m2ts\",\"mts\"]\n  },\n  \"video/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n  },\n  \"video/mp4v-es\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n  },\n  \"video/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpv\": {\n    \"source\": \"iana\"\n  },\n  \"video/nv\": {\n    \"source\": \"iana\"\n  },\n  \"video/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogv\"]\n  },\n  \"video/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/pointer\": {\n    \"source\": \"iana\"\n  },\n  \"video/quicktime\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"qt\",\"mov\"]\n  },\n  \"video/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/raw\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"video/scip\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte291\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte292m\": {\n    \"source\": \"iana\"\n  },\n  \"video/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.cctv\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvh\",\"uvvh\"]\n  },\n  \"video/vnd.dece.mobile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvm\",\"uvvm\"]\n  },\n  \"video/vnd.dece.mp4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.pd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvp\",\"uvvp\"]\n  },\n  \"video/vnd.dece.sd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvs\",\"uvvs\"]\n  },\n  \"video/vnd.dece.video\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvv\",\"uvvv\"]\n  },\n  \"video/vnd.directv.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.directv.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dlna.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dvb.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dvb\"]\n  },\n  \"video/vnd.fvt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fvt\"]\n  },\n  \"video/vnd.hns.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsavc\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsmpeg2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.videop\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxu\",\"m4u\"]\n  },\n  \"video/vnd.ms-playready.media.pyv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pyv\"]\n  },\n  \"video/vnd.nokia.interleaved-multimedia\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.mp4vr\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.videovoip\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.objectvideo\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.planar\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.bink\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.smacker\": {\n    \"source\": \"apache\"\n  },\n  \"video/vnd.sealed.mpeg1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.swf\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealedmedia.softseal.mov\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.uvvu.mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvu\",\"uvvu\"]\n  },\n  \"video/vnd.vivo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"viv\"]\n  },\n  \"video/vnd.youtube.yt\": {\n    \"source\": \"iana\"\n  },\n  \"video/vp8\": {\n    \"source\": \"iana\"\n  },\n  \"video/vp9\": {\n    \"source\": \"iana\"\n  },\n  \"video/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"webm\"]\n  },\n  \"video/x-f4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f4v\"]\n  },\n  \"video/x-fli\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fli\"]\n  },\n  \"video/x-flv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"flv\"]\n  },\n  \"video/x-m4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m4v\"]\n  },\n  \"video/x-matroska\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n  },\n  \"video/x-mng\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mng\"]\n  },\n  \"video/x-ms-asf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"asf\",\"asx\"]\n  },\n  \"video/x-ms-vob\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vob\"]\n  },\n  \"video/x-ms-wm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wm\"]\n  },\n  \"video/x-ms-wmv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"wmv\"]\n  },\n  \"video/x-ms-wmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmx\"]\n  },\n  \"video/x-ms-wvx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wvx\"]\n  },\n  \"video/x-msvideo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"avi\"]\n  },\n  \"video/x-sgi-movie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"movie\"]\n  },\n  \"video/x-smv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smv\"]\n  },\n  \"x-conference/x-cooltalk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ice\"]\n  },\n  \"x-shader/x-fragment\": {\n    \"compressible\": true\n  },\n  \"x-shader/x-vertex\": {\n    \"compressible\": true\n  }\n}\n", "/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n", "// 'mime-score' back-ported to CommonJS\n\n// Score RFC facets (see https://tools.ietf.org/html/rfc6838#section-3)\nvar FACET_SCORES = {\n  'prs.': 100,\n  'x-': 200,\n  'x.': 300,\n  'vnd.': 400,\n  default: 900\n}\n\n// Score mime source (Logic originally from `jshttp/mime-types` module)\nvar SOURCE_SCORES = {\n  nginx: 10,\n  apache: 20,\n  iana: 40,\n  default: 30 // definitions added by `jshttp/mime-db` project?\n}\n\nvar TYPE_SCORES = {\n  // prefer application/xml over text/xml\n  // prefer application/rtf over text/rtf\n  application: 1,\n\n  // prefer font/woff over application/font-woff\n  font: 2,\n\n  // prefer video/mp4 over audio/mp4 over application/mp4\n  // See https://www.rfc-editor.org/rfc/rfc4337.html#section-2\n  audio: 2,\n  video: 3,\n\n  default: 0\n}\n\n/**\n * Get each component of the score for a mime type.  The sum of these is the\n * total score.  The higher the score, the more \"official\" the type.\n */\nmodule.exports = function mimeScore (mimeType, source = 'default') {\n  if (mimeType === 'application/octet-stream') {\n    return 0\n  }\n\n  const [type, subtype] = mimeType.split('/')\n\n  const facet = subtype.replace(/(\\.|x-).*/, '$1')\n\n  const facetScore = FACET_SCORES[facet] || FACET_SCORES.default\n  const sourceScore = SOURCE_SCORES[source] || SOURCE_SCORES.default\n  const typeScore = TYPE_SCORES[type] || TYPE_SCORES.default\n\n  // All else being equal prefer shorter types\n  const lengthScore = 1 - mimeType.length / 100\n\n  return facetScore + sourceScore + typeScore + lengthScore\n}\n", "/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\nvar mimeScore = require('./mimeScore')\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\nexports._extensionConflicts = []\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {false|string}\n */\n\nfunction charset (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n  var mime = match && db[match[1].toLowerCase()]\n\n  if (mime && mime.charset) {\n    return mime.charset\n  }\n\n  // default text/* to utf-8\n  if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n    return 'UTF-8'\n  }\n\n  return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {false|string}\n */\n\nfunction contentType (str) {\n  // TODO: should this even be in this module?\n  if (!str || typeof str !== 'string') {\n    return false\n  }\n\n  var mime = str.indexOf('/') === -1 ? exports.lookup(str) : str\n\n  if (!mime) {\n    return false\n  }\n\n  // TODO: use content-type or other module\n  if (mime.indexOf('charset') === -1) {\n    var charset = exports.charset(mime)\n    if (charset) mime += '; charset=' + charset.toLowerCase()\n  }\n\n  return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {false|string}\n */\n\nfunction extension (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n  // get extensions\n  var exts = match && exports.extensions[match[1].toLowerCase()]\n\n  if (!exts || !exts.length) {\n    return false\n  }\n\n  return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {false|string}\n */\n\nfunction lookup (path) {\n  if (!path || typeof path !== 'string') {\n    return false\n  }\n\n  // get the extension (\"ext\" or \".ext\" or full path)\n  var extension = extname('x.' + path)\n    .toLowerCase()\n    .slice(1)\n\n  if (!extension) {\n    return false\n  }\n\n  return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n  Object.keys(db).forEach(function forEachMimeType (type) {\n    var mime = db[type]\n    var exts = mime.extensions\n\n    if (!exts || !exts.length) {\n      return\n    }\n\n    // mime -> extensions\n    extensions[type] = exts\n\n    // extension -> mime\n    for (var i = 0; i < exts.length; i++) {\n      var extension = exts[i]\n      types[extension] = _preferredType(extension, types[extension], type)\n\n      // DELETE (eventually): Capture extension->type maps that change as a\n      // result of switching to mime-score.  This is just to help make reviewing\n      // PR #119 easier, and can be removed once that PR is approved.\n      const legacyType = _preferredTypeLegacy(\n        extension,\n        types[extension],\n        type\n      )\n      if (legacyType !== types[extension]) {\n        exports._extensionConflicts.push([extension, legacyType, types[extension]])\n      }\n    }\n  })\n}\n\n// Resolve type conflict using mime-score\nfunction _preferredType (ext, type0, type1) {\n  var score0 = type0 ? mimeScore(type0, db[type0].source) : 0\n  var score1 = type1 ? mimeScore(type1, db[type1].source) : 0\n\n  return score0 > score1 ? type0 : type1\n}\n\n// Resolve type conflict using pre-mime-score logic\nfunction _preferredTypeLegacy (ext, type0, type1) {\n  var SOURCE_RANK = ['nginx', 'apache', undefined, 'iana']\n\n  var score0 = type0 ? SOURCE_RANK.indexOf(db[type0].source) : 0\n  var score1 = type1 ? SOURCE_RANK.indexOf(db[type1].source) : 0\n\n  if (\n    exports.types[extension] !== 'application/octet-stream' &&\n    (score0 > score1 ||\n      (score0 === score1 &&\n        exports.types[extension]?.slice(0, 12) === 'application/'))\n  ) {\n    return type0\n  }\n\n  return score0 > score1 ? type0 : type1\n}\n", "/*!\n * media-typer\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match type in RFC 6838\n *\n * type-name = restricted-name\n * subtype-name = restricted-name\n * restricted-name = restricted-name-first *126restricted-name-chars\n * restricted-name-first  = ALPHA / DIGIT\n * restricted-name-chars  = ALPHA / DIGIT / \"!\" / \"#\" /\n *                          \"$\" / \"&\" / \"-\" / \"^\" / \"_\"\n * restricted-name-chars =/ \".\" ; Characters before first dot always\n *                              ; specify a facet name\n * restricted-name-chars =/ \"+\" ; Characters after last plus always\n *                              ; specify a structured syntax suffix\n * ALPHA =  %x41-5A / %x61-7A   ; A-Z / a-z\n * DIGIT =  %x30-39             ; 0-9\n */\nvar SUBTYPE_NAME_REGEXP = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/\nvar TYPE_NAME_REGEXP = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/\nvar TYPE_REGEXP = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/\n\n/**\n * Module exports.\n */\n\nexports.format = format\nexports.parse = parse\nexports.test = test\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required')\n  }\n\n  var subtype = obj.subtype\n  var suffix = obj.suffix\n  var type = obj.type\n\n  if (!type || !TYPE_NAME_REGEXP.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  if (!subtype || !SUBTYPE_NAME_REGEXP.test(subtype)) {\n    throw new TypeError('invalid subtype')\n  }\n\n  // format as type/subtype\n  var string = type + '/' + subtype\n\n  // append +suffix\n  if (suffix) {\n    if (!TYPE_NAME_REGEXP.test(suffix)) {\n      throw new TypeError('invalid suffix')\n    }\n\n    string += '+' + suffix\n  }\n\n  return string\n}\n\n/**\n * Test media type.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction test (string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  if (typeof string !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  return TYPE_REGEXP.test(string.toLowerCase())\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction parse (string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  if (typeof string !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  var match = TYPE_REGEXP.exec(string.toLowerCase())\n\n  if (!match) {\n    throw new TypeError('invalid media type')\n  }\n\n  var type = match[1]\n  var subtype = match[2]\n  var suffix\n\n  // suffix after last +\n  var index = subtype.lastIndexOf('+')\n  if (index !== -1) {\n    suffix = subtype.substr(index + 1)\n    subtype = subtype.substr(0, index)\n  }\n\n  return new MediaType(type, subtype, suffix)\n}\n\n/**\n * Class for MediaType object.\n * @public\n */\n\nfunction MediaType (type, subtype, suffix) {\n  this.type = type\n  this.subtype = subtype\n  this.suffix = suffix\n}\n", "/*!\n * type-is\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar contentType = require('content-type')\nvar mime = require('mime-types')\nvar typer = require('media-typer')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = typeofrequest\nmodule.exports.is = typeis\nmodule.exports.hasBody = hasbody\nmodule.exports.normalize = normalize\nmodule.exports.match = mimeMatch\n\n/**\n * Compare a `value` content-type with `types`.\n * Each `type` can be an extension like `html`,\n * a special shortcut like `multipart` or `urlencoded`,\n * or a mime type.\n *\n * If no types match, `false` is returned.\n * Otherwise, the first `type` that matches is returned.\n *\n * @param {String} value\n * @param {Array} types\n * @public\n */\n\nfunction typeis (value, types_) {\n  var i\n  var types = types_\n\n  // remove parameters and normalize\n  var val = tryNormalizeType(value)\n\n  // no type or invalid\n  if (!val) {\n    return false\n  }\n\n  // support flattened arguments\n  if (types && !Array.isArray(types)) {\n    types = new Array(arguments.length - 1)\n    for (i = 0; i < types.length; i++) {\n      types[i] = arguments[i + 1]\n    }\n  }\n\n  // no types, return the content type\n  if (!types || !types.length) {\n    return val\n  }\n\n  var type\n  for (i = 0; i < types.length; i++) {\n    if (mimeMatch(normalize(type = types[i]), val)) {\n      return type[0] === '+' || type.indexOf('*') !== -1\n        ? val\n        : type\n    }\n  }\n\n  // no matches\n  return false\n}\n\n/**\n * Check if a request has a request body.\n * A request with a body __must__ either have `transfer-encoding`\n * or `content-length` headers set.\n * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3\n *\n * @param {Object} request\n * @return {Boolean}\n * @public\n */\n\nfunction hasbody (req) {\n  return req.headers['transfer-encoding'] !== undefined ||\n    !isNaN(req.headers['content-length'])\n}\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains any of the give mime `type`s.\n * If there is no request body, `null` is returned.\n * If there is no content type, `false` is returned.\n * Otherwise, it returns the first `type` that matches.\n *\n * Examples:\n *\n *     // With Content-Type: text/html; charset=utf-8\n *     this.is('html'); // => 'html'\n *     this.is('text/html'); // => 'text/html'\n *     this.is('text/*', 'application/json'); // => 'text/html'\n *\n *     // When Content-Type is application/json\n *     this.is('json', 'urlencoded'); // => 'json'\n *     this.is('application/json'); // => 'application/json'\n *     this.is('html', 'application/*'); // => 'application/json'\n *\n *     this.is('html'); // => false\n *\n * @param {Object} req\n * @param {(String|Array)} types...\n * @return {(String|false|null)}\n * @public\n */\n\nfunction typeofrequest (req, types_) {\n  // no body\n  if (!hasbody(req)) return null\n  // support flattened arguments\n  var types = arguments.length > 2\n    ? Array.prototype.slice.call(arguments, 1)\n    : types_\n  // request content type\n  var value = req.headers['content-type']\n\n  return typeis(value, types)\n}\n\n/**\n * Normalize a mime type.\n * If it's a shorthand, expand it to a valid mime type.\n *\n * In general, you probably want:\n *\n *   var type = is(req, ['urlencoded', 'json', 'multipart']);\n *\n * Then use the appropriate body parsers.\n * These three are the most common request body types\n * and are thus ensured to work.\n *\n * @param {String} type\n * @return {String|false|null}\n * @public\n */\n\nfunction normalize (type) {\n  if (typeof type !== 'string') {\n    // invalid type\n    return false\n  }\n\n  switch (type) {\n    case 'urlencoded':\n      return 'application/x-www-form-urlencoded'\n    case 'multipart':\n      return 'multipart/*'\n  }\n\n  if (type[0] === '+') {\n    // \"+json\" -> \"*/*+json\" expando\n    return '*/*' + type\n  }\n\n  return type.indexOf('/') === -1\n    ? mime.lookup(type)\n    : type\n}\n\n/**\n * Check if `expected` mime type\n * matches `actual` mime type with\n * wildcard and +suffix support.\n *\n * @param {String} expected\n * @param {String} actual\n * @return {Boolean}\n * @public\n */\n\nfunction mimeMatch (expected, actual) {\n  // invalid type\n  if (expected === false) {\n    return false\n  }\n\n  // split types\n  var actualParts = actual.split('/')\n  var expectedParts = expected.split('/')\n\n  // invalid format\n  if (actualParts.length !== 2 || expectedParts.length !== 2) {\n    return false\n  }\n\n  // validate type\n  if (expectedParts[0] !== '*' && expectedParts[0] !== actualParts[0]) {\n    return false\n  }\n\n  // validate suffix wildcard\n  if (expectedParts[1].slice(0, 2) === '*+') {\n    return expectedParts[1].length <= actualParts[1].length + 1 &&\n      expectedParts[1].slice(1) === actualParts[1].slice(1 - expectedParts[1].length)\n  }\n\n  // validate subtype\n  if (expectedParts[1] !== '*' && expectedParts[1] !== actualParts[1]) {\n    return false\n  }\n\n  return true\n}\n\n/**\n * Normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {(string|null)}\n * @private\n */\nfunction normalizeType (value) {\n  // Parse the type\n  var type = contentType.parse(value).type\n\n  return typer.test(type) ? type : null\n}\n\n/**\n * Try to normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {(string|null)}\n * @private\n */\nfunction tryNormalizeType (value) {\n  try {\n    return value ? normalizeType(value) : null\n  } catch (err) {\n    return null\n  }\n}\n", "'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\nmodule.exports = {\n  getCharset,\n  normalizeOptions,\n  passthrough\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {Object} req\n * @returns {string | undefined}\n * @private\n */\nfunction getCharset (req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase()\n  } catch {\n    return undefined\n  }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string | string[]} type\n * @returns {Function}\n * @private\n */\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n\n/**\n * Normalizes the common options for all parsers.\n *\n * @param {Object} options options to normalize\n * @param {string | string[] | Function} defaultType default content type(s) or a function to determine it\n * @returns {Object}\n * @private\n */\nfunction normalizeOptions (options, defaultType) {\n  if (!defaultType) {\n    // Parsers must define a default content type\n    throw new TypeError('defaultType must be provided')\n  }\n\n  var inflate = options?.inflate !== false\n  var limit = typeof options?.limit !== 'number'\n    ? bytes.parse(options?.limit || '100kb')\n    : options?.limit\n  var type = options?.type || defaultType\n  var verify = options?.verify || false\n  var defaultCharset = options?.defaultCharset || 'utf-8'\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  return {\n    inflate,\n    limit,\n    verify,\n    defaultCharset,\n    shouldParse\n  }\n}\n\n/**\n * Passthrough function that returns input unchanged.\n * Used by parsers that don't need to transform the data.\n *\n * @param {*} value\n * @returns {*}\n * @private\n */\nfunction passthrough (value) {\n  return value\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar getBody = require('raw-body')\nvar iconv = require('iconv-lite')\nvar onFinished = require('on-finished')\nvar zlib = require('node:zlib')\nvar hasBody = require('type-is').hasBody\nvar { getCharset } = require('./utils')\n\n/**\n * Module exports.\n */\n\nmodule.exports = read\n\n/**\n * Read a request into a buffer and parse.\n *\n * @param {Object} req\n * @param {Object} res\n * @param {Function} next\n * @param {Function} parse\n * @param {Function} debug\n * @param {Object} options\n * @private\n */\nfunction read (req, res, next, parse, debug, options) {\n  if (onFinished.isFinished(req)) {\n    debug('body already parsed')\n    next()\n    return\n  }\n\n  if (!('body' in req)) {\n    req.body = undefined\n  }\n\n  // skip requests without bodies\n  if (!hasBody(req)) {\n    debug('skip empty body')\n    next()\n    return\n  }\n\n  debug('content-type %j', req.headers['content-type'])\n\n  // determine if request should be parsed\n  if (!options.shouldParse(req)) {\n    debug('skip parsing')\n    next()\n    return\n  }\n\n  var encoding = null\n  if (options?.skipCharset !== true) {\n    encoding = getCharset(req) || options.defaultCharset\n\n    // validate charset\n    if (!!options?.isValidCharset && !options.isValidCharset(encoding)) {\n      debug('invalid charset')\n      next(createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n        charset: encoding,\n        type: 'charset.unsupported'\n      }))\n      return\n    }\n  }\n\n  var length\n  var opts = options\n  var stream\n\n  // read options\n  var verify = opts.verify\n\n  try {\n    // get the content stream\n    stream = contentstream(req, debug, opts.inflate)\n    length = stream.length\n    stream.length = undefined\n  } catch (err) {\n    return next(err)\n  }\n\n  // set raw-body options\n  opts.length = length\n  opts.encoding = verify\n    ? null\n    : encoding\n\n  // assert charset is supported\n  if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {\n    return next(createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n      charset: encoding.toLowerCase(),\n      type: 'charset.unsupported'\n    }))\n  }\n\n  // read body\n  debug('read body')\n  getBody(stream, opts, function (error, body) {\n    if (error) {\n      var _error\n\n      if (error.type === 'encoding.unsupported') {\n        // echo back charset\n        _error = createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n          charset: encoding.toLowerCase(),\n          type: 'charset.unsupported'\n        })\n      } else {\n        // set status code on error\n        _error = createError(400, error)\n      }\n\n      // unpipe from stream and destroy\n      if (stream !== req) {\n        req.unpipe()\n        stream.destroy()\n      }\n\n      // read off entire request\n      dump(req, function onfinished () {\n        next(createError(400, _error))\n      })\n      return\n    }\n\n    // verify\n    if (verify) {\n      try {\n        debug('verify body')\n        verify(req, res, body, encoding)\n      } catch (err) {\n        next(createError(403, err, {\n          body: body,\n          type: err.type || 'entity.verify.failed'\n        }))\n        return\n      }\n    }\n\n    // parse\n    var str = body\n    try {\n      debug('parse body')\n      str = typeof body !== 'string' && encoding !== null\n        ? iconv.decode(body, encoding)\n        : body\n      req.body = parse(str, encoding)\n    } catch (err) {\n      next(createError(400, err, {\n        body: str,\n        type: err.type || 'entity.parse.failed'\n      }))\n      return\n    }\n\n    next()\n  })\n}\n\n/**\n * Get the content stream of the request.\n *\n * @param {Object} req\n * @param {Function} debug\n * @param {boolean} inflate\n * @returns {Object}\n * @private\n */\nfunction contentstream (req, debug, inflate) {\n  var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()\n  var length = req.headers['content-length']\n\n  debug('content-encoding \"%s\"', encoding)\n\n  if (inflate === false && encoding !== 'identity') {\n    throw createError(415, 'content encoding unsupported', {\n      encoding: encoding,\n      type: 'encoding.unsupported'\n    })\n  }\n\n  if (encoding === 'identity') {\n    req.length = length\n    return req\n  }\n\n  var stream = createDecompressionStream(encoding, debug)\n  req.pipe(stream)\n  return stream\n}\n\n/**\n * Create a decompression stream for the given encoding.\n * @param {string} encoding\n * @param {Function} debug\n * @returns {Object}\n * @private\n */\nfunction createDecompressionStream (encoding, debug) {\n  switch (encoding) {\n    case 'deflate':\n      debug('inflate body')\n      return zlib.createInflate()\n    case 'gzip':\n      debug('gunzip body')\n      return zlib.createGunzip()\n    case 'br':\n      debug('brotli decompress body')\n      return zlib.createBrotliDecompress()\n    default:\n      throw createError(415, 'unsupported content encoding \"' + encoding + '\"', {\n        encoding: encoding,\n        type: 'encoding.unsupported'\n      })\n  }\n}\n\n/**\n * Dump the contents of a request.\n *\n * @param {Object} req\n * @param {Function} callback\n * @private\n */\nfunction dump (req, callback) {\n  if (onFinished.isFinished(req)) {\n    callback(null)\n  } else {\n    onFinished(req, callback)\n    req.resume()\n  }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('body-parser:json')\nvar read = require('../read')\nvar { normalizeOptions } = require('../utils')\n\n/**\n * Module exports.\n */\n\nmodule.exports = json\n\n/**\n * RegExp to match the first non-space in a string.\n *\n * Allowed whitespace is defined in RFC 7159:\n *\n *    ws = *(\n *            %x20 /              ; Space\n *            %x09 /              ; Horizontal tab\n *            %x0A /              ; Line feed or New line\n *            %x0D )              ; Carriage return\n */\nvar FIRST_CHAR_REGEXP = /^[\\x20\\x09\\x0a\\x0d]*([^\\x20\\x09\\x0a\\x0d])/ // eslint-disable-line no-control-regex\n\nvar JSON_SYNTAX_CHAR = '#'\nvar JSON_SYNTAX_REGEXP = /#+/g\n\n/**\n * Create a middleware to parse JSON bodies.\n *\n * @param {Object} [options]\n * @returns {Function}\n * @public\n */\nfunction json (options) {\n  const normalizedOptions = normalizeOptions(options, 'application/json')\n\n  var reviver = options?.reviver\n  var strict = options?.strict !== false\n\n  function parse (body) {\n    if (body.length === 0) {\n      // special-case empty json body, as it's a common client-side mistake\n      // TODO: maybe make this configurable or part of \"strict\" option\n      return {}\n    }\n\n    if (strict) {\n      var first = firstchar(body)\n\n      if (first !== '{' && first !== '[') {\n        debug('strict violation')\n        throw createStrictSyntaxError(body, first)\n      }\n    }\n\n    try {\n      debug('parse json')\n      return JSON.parse(body, reviver)\n    } catch (e) {\n      throw normalizeJsonSyntaxError(e, {\n        message: e.message,\n        stack: e.stack\n      })\n    }\n  }\n\n  const readOptions = {\n    ...normalizedOptions,\n    // assert charset per RFC 7159 sec 8.1\n    isValidCharset: (charset) => charset.slice(0, 4) === 'utf-'\n  }\n\n  return function jsonParser (req, res, next) {\n    read(req, res, next, parse, debug, readOptions)\n  }\n}\n\n/**\n * Create strict violation syntax error matching native error.\n *\n * @param {string} str\n * @param {string} char\n * @returns {Error}\n * @private\n */\nfunction createStrictSyntaxError (str, char) {\n  var index = str.indexOf(char)\n  var partial = ''\n\n  if (index !== -1) {\n    partial = str.substring(0, index) + JSON_SYNTAX_CHAR.repeat(str.length - index)\n  }\n\n  try {\n    JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation')\n  } catch (e) {\n    return normalizeJsonSyntaxError(e, {\n      message: e.message.replace(JSON_SYNTAX_REGEXP, function (placeholder) {\n        return str.substring(index, index + placeholder.length)\n      }),\n      stack: e.stack\n    })\n  }\n}\n\n/**\n * Get the first non-whitespace character in a string.\n *\n * @param {string} str\n * @returns {string|undefined}\n * @private\n */\nfunction firstchar (str) {\n  var match = FIRST_CHAR_REGEXP.exec(str)\n\n  return match\n    ? match[1]\n    : undefined\n}\n\n/**\n * Normalize a SyntaxError for JSON.parse.\n *\n * @param {SyntaxError} error\n * @param {Object} obj\n * @returns {SyntaxError}\n * @private\n */\nfunction normalizeJsonSyntaxError (error, obj) {\n  var keys = Object.getOwnPropertyNames(error)\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i]\n    if (key !== 'stack' && key !== 'message') {\n      delete error[key]\n    }\n  }\n\n  // replace stack before message for Node.js 0.10 and below\n  error.stack = obj.stack.replace(error.message, obj.message)\n  error.message = obj.message\n\n  return error\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('body-parser:raw')\nvar read = require('../read')\nvar { normalizeOptions, passthrough } = require('../utils')\n\n/**\n * Module exports.\n */\n\nmodule.exports = raw\n\n/**\n * Create a middleware to parse raw bodies.\n *\n * @param {Object} [options]\n * @returns {Function}\n * @public\n */\nfunction raw (options) {\n  const normalizedOptions = normalizeOptions(options, 'application/octet-stream')\n\n  const readOptions = {\n    ...normalizedOptions,\n    // Skip charset validation and parse the body as is\n    skipCharset: true\n  }\n\n  return function rawParser (req, res, next) {\n    read(req, res, next, passthrough, debug, readOptions)\n  }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('body-parser:text')\nvar read = require('../read')\nvar { normalizeOptions, passthrough } = require('../utils')\n\n/**\n * Module exports.\n */\n\nmodule.exports = text\n\n/**\n * Create a middleware to parse text bodies.\n *\n * @param {Object} [options]\n * @returns {Function}\n * @public\n */\nfunction text (options) {\n  const normalizedOptions = normalizeOptions(options, 'text/plain')\n\n  return function textParser (req, res, next) {\n    read(req, res, next, passthrough, debug, normalizedOptions)\n  }\n}\n", "'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n", "module.exports = require('util').inspect;\n", "var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n    ? Symbol.toStringTag\n    : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n    [].__proto__ === Array.prototype // eslint-disable-line no-proto\n        ? function (O) {\n            return O.__proto__; // eslint-disable-line no-proto\n        }\n        : null\n);\n\nfunction addNumericSeparator(num, str) {\n    if (\n        num === Infinity\n        || num === -Infinity\n        || num !== num\n        || (num && num > -1000 && num < 1000)\n        || $test.call(/e/, str)\n    ) {\n        return str;\n    }\n    var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n    if (typeof num === 'number') {\n        var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n        if (int !== num) {\n            var intStr = String(int);\n            var dec = $slice.call(str, intStr.length + 1);\n            return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n        }\n    }\n    return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nvar quotes = {\n    __proto__: null,\n    'double': '\"',\n    single: \"'\"\n};\nvar quoteREs = {\n    __proto__: null,\n    'double': /([\"\\\\])/g,\n    single: /(['\\\\])/g\n};\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n    var opts = options || {};\n\n    if (has(opts, 'quoteStyle') && !has(quotes, opts.quoteStyle)) {\n        throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n    }\n    if (\n        has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n            ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n            : opts.maxStringLength !== null\n        )\n    ) {\n        throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n    }\n    var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n    if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n        throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n    }\n\n    if (\n        has(opts, 'indent')\n        && opts.indent !== null\n        && opts.indent !== '\\t'\n        && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n    ) {\n        throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n    }\n    if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n        throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n    }\n    var numericSeparator = opts.numericSeparator;\n\n    if (typeof obj === 'undefined') {\n        return 'undefined';\n    }\n    if (obj === null) {\n        return 'null';\n    }\n    if (typeof obj === 'boolean') {\n        return obj ? 'true' : 'false';\n    }\n\n    if (typeof obj === 'string') {\n        return inspectString(obj, opts);\n    }\n    if (typeof obj === 'number') {\n        if (obj === 0) {\n            return Infinity / obj > 0 ? '0' : '-0';\n        }\n        var str = String(obj);\n        return numericSeparator ? addNumericSeparator(obj, str) : str;\n    }\n    if (typeof obj === 'bigint') {\n        var bigIntStr = String(obj) + 'n';\n        return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n    }\n\n    var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n    if (typeof depth === 'undefined') { depth = 0; }\n    if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n        return isArray(obj) ? '[Array]' : '[Object]';\n    }\n\n    var indent = getIndent(opts, depth);\n\n    if (typeof seen === 'undefined') {\n        seen = [];\n    } else if (indexOf(seen, obj) >= 0) {\n        return '[Circular]';\n    }\n\n    function inspect(value, from, noIndent) {\n        if (from) {\n            seen = $arrSlice.call(seen);\n            seen.push(from);\n        }\n        if (noIndent) {\n            var newOpts = {\n                depth: opts.depth\n            };\n            if (has(opts, 'quoteStyle')) {\n                newOpts.quoteStyle = opts.quoteStyle;\n            }\n            return inspect_(value, newOpts, depth + 1, seen);\n        }\n        return inspect_(value, opts, depth + 1, seen);\n    }\n\n    if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n        var name = nameOf(obj);\n        var keys = arrObjKeys(obj, inspect);\n        return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n    }\n    if (isSymbol(obj)) {\n        var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n        return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n    }\n    if (isElement(obj)) {\n        var s = '<' + $toLowerCase.call(String(obj.nodeName));\n        var attrs = obj.attributes || [];\n        for (var i = 0; i < attrs.length; i++) {\n            s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n        }\n        s += '>';\n        if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n        s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';\n        return s;\n    }\n    if (isArray(obj)) {\n        if (obj.length === 0) { return '[]'; }\n        var xs = arrObjKeys(obj, inspect);\n        if (indent && !singleLineValues(xs)) {\n            return '[' + indentedJoin(xs, indent) + ']';\n        }\n        return '[ ' + $join.call(xs, ', ') + ' ]';\n    }\n    if (isError(obj)) {\n        var parts = arrObjKeys(obj, inspect);\n        if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n            return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n        }\n        if (parts.length === 0) { return '[' + String(obj) + ']'; }\n        return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n    }\n    if (typeof obj === 'object' && customInspect) {\n        if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n            return utilInspect(obj, { depth: maxDepth - depth });\n        } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n            return obj.inspect();\n        }\n    }\n    if (isMap(obj)) {\n        var mapParts = [];\n        if (mapForEach) {\n            mapForEach.call(obj, function (value, key) {\n                mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n            });\n        }\n        return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n    }\n    if (isSet(obj)) {\n        var setParts = [];\n        if (setForEach) {\n            setForEach.call(obj, function (value) {\n                setParts.push(inspect(value, obj));\n            });\n        }\n        return collectionOf('Set', setSize.call(obj), setParts, indent);\n    }\n    if (isWeakMap(obj)) {\n        return weakCollectionOf('WeakMap');\n    }\n    if (isWeakSet(obj)) {\n        return weakCollectionOf('WeakSet');\n    }\n    if (isWeakRef(obj)) {\n        return weakCollectionOf('WeakRef');\n    }\n    if (isNumber(obj)) {\n        return markBoxed(inspect(Number(obj)));\n    }\n    if (isBigInt(obj)) {\n        return markBoxed(inspect(bigIntValueOf.call(obj)));\n    }\n    if (isBoolean(obj)) {\n        return markBoxed(booleanValueOf.call(obj));\n    }\n    if (isString(obj)) {\n        return markBoxed(inspect(String(obj)));\n    }\n    // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other\n    /* eslint-env browser */\n    if (typeof window !== 'undefined' && obj === window) {\n        return '{ [object Window] }';\n    }\n    if (\n        (typeof globalThis !== 'undefined' && obj === globalThis)\n        || (typeof global !== 'undefined' && obj === global)\n    ) {\n        return '{ [object globalThis] }';\n    }\n    if (!isDate(obj) && !isRegExp(obj)) {\n        var ys = arrObjKeys(obj, inspect);\n        var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n        var protoTag = obj instanceof Object ? '' : 'null prototype';\n        var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n        var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n        var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n        if (ys.length === 0) { return tag + '{}'; }\n        if (indent) {\n            return tag + '{' + indentedJoin(ys, indent) + '}';\n        }\n        return tag + '{ ' + $join.call(ys, ', ') + ' }';\n    }\n    return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n    var style = opts.quoteStyle || defaultStyle;\n    var quoteChar = quotes[style];\n    return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n    return $replace.call(String(s), /\"/g, '&quot;');\n}\n\nfunction canTrustToString(obj) {\n    return !toStringTag || !(typeof obj === 'object' && (toStringTag in obj || typeof obj[toStringTag] !== 'undefined'));\n}\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && canTrustToString(obj); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && canTrustToString(obj); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && canTrustToString(obj); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && canTrustToString(obj); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && canTrustToString(obj); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && canTrustToString(obj); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && canTrustToString(obj); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n    if (hasShammedSymbols) {\n        return obj && typeof obj === 'object' && obj instanceof Symbol;\n    }\n    if (typeof obj === 'symbol') {\n        return true;\n    }\n    if (!obj || typeof obj !== 'object' || !symToString) {\n        return false;\n    }\n    try {\n        symToString.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isBigInt(obj) {\n    if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n        return false;\n    }\n    try {\n        bigIntValueOf.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n    return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n    return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n    if (f.name) { return f.name; }\n    var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n    if (m) { return m[1]; }\n    return null;\n}\n\nfunction indexOf(xs, x) {\n    if (xs.indexOf) { return xs.indexOf(x); }\n    for (var i = 0, l = xs.length; i < l; i++) {\n        if (xs[i] === x) { return i; }\n    }\n    return -1;\n}\n\nfunction isMap(x) {\n    if (!mapSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        mapSize.call(x);\n        try {\n            setSize.call(x);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof Map; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakMap(x) {\n    if (!weakMapHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakMapHas.call(x, weakMapHas);\n        try {\n            weakSetHas.call(x, weakSetHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakRef(x) {\n    if (!weakRefDeref || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakRefDeref.call(x);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isSet(x) {\n    if (!setSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        setSize.call(x);\n        try {\n            mapSize.call(x);\n        } catch (m) {\n            return true;\n        }\n        return x instanceof Set; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakSet(x) {\n    if (!weakSetHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakSetHas.call(x, weakSetHas);\n        try {\n            weakMapHas.call(x, weakMapHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isElement(x) {\n    if (!x || typeof x !== 'object') { return false; }\n    if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n        return true;\n    }\n    return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n    if (str.length > opts.maxStringLength) {\n        var remaining = str.length - opts.maxStringLength;\n        var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n        return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n    }\n    var quoteRE = quoteREs[opts.quoteStyle || 'single'];\n    quoteRE.lastIndex = 0;\n    // eslint-disable-next-line no-control-regex\n    var s = $replace.call($replace.call(str, quoteRE, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n    return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n    var n = c.charCodeAt(0);\n    var x = {\n        8: 'b',\n        9: 't',\n        10: 'n',\n        12: 'f',\n        13: 'r'\n    }[n];\n    if (x) { return '\\\\' + x; }\n    return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n    return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n    return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n    var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n    return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n    for (var i = 0; i < xs.length; i++) {\n        if (indexOf(xs[i], '\\n') >= 0) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction getIndent(opts, depth) {\n    var baseIndent;\n    if (opts.indent === '\\t') {\n        baseIndent = '\\t';\n    } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n        baseIndent = $join.call(Array(opts.indent + 1), ' ');\n    } else {\n        return null;\n    }\n    return {\n        base: baseIndent,\n        prev: $join.call(Array(depth + 1), baseIndent)\n    };\n}\n\nfunction indentedJoin(xs, indent) {\n    if (xs.length === 0) { return ''; }\n    var lineJoiner = '\\n' + indent.prev + indent.base;\n    return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n    var isArr = isArray(obj);\n    var xs = [];\n    if (isArr) {\n        xs.length = obj.length;\n        for (var i = 0; i < obj.length; i++) {\n            xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n        }\n    }\n    var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n    var symMap;\n    if (hasShammedSymbols) {\n        symMap = {};\n        for (var k = 0; k < syms.length; k++) {\n            symMap['$' + syms[k]] = syms[k];\n        }\n    }\n\n    for (var key in obj) { // eslint-disable-line no-restricted-syntax\n        if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n            // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n            continue; // eslint-disable-line no-restricted-syntax, no-continue\n        } else if ($test.call(/[^\\w$]/, key)) {\n            xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n        } else {\n            xs.push(key + ': ' + inspect(obj[key], obj));\n        }\n    }\n    if (typeof gOPS === 'function') {\n        for (var j = 0; j < syms.length; j++) {\n            if (isEnumerable.call(obj, syms[j])) {\n                xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n            }\n        }\n    }\n    return xs;\n}\n", "'use strict';\n\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\n\n/*\n* This function traverses the list returning the node corresponding to the given key.\n*\n* That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list.\n* By doing so, all the recently used nodes can be accessed relatively quickly.\n*/\n/** @type {import('./list.d.ts').listGetNode} */\n// eslint-disable-next-line consistent-return\nvar listGetNode = function (list, key, isDelete) {\n\t/** @type {typeof list | NonNullable<(typeof list)['next']>} */\n\tvar prev = list;\n\t/** @type {(typeof list)['next']} */\n\tvar curr;\n\t// eslint-disable-next-line eqeqeq\n\tfor (; (curr = prev.next) != null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tif (!isDelete) {\n\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\tcurr.next = /** @type {NonNullable<typeof list.next>} */ (list.next);\n\t\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\t}\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\n/** @type {import('./list.d.ts').listGet} */\nvar listGet = function (objects, key) {\n\tif (!objects) {\n\t\treturn void undefined;\n\t}\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\n/** @type {import('./list.d.ts').listSet} */\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = /** @type {import('./list.d.ts').ListNode<typeof value, typeof key>} */ ({ // eslint-disable-line no-param-reassign, no-extra-parens\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t});\n\t}\n};\n/** @type {import('./list.d.ts').listHas} */\nvar listHas = function (objects, key) {\n\tif (!objects) {\n\t\treturn false;\n\t}\n\treturn !!listGetNode(objects, key);\n};\n/** @type {import('./list.d.ts').listDelete} */\n// eslint-disable-next-line consistent-return\nvar listDelete = function (objects, key) {\n\tif (objects) {\n\t\treturn listGetNode(objects, key, true);\n\t}\n};\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannelList() {\n\t/** @typedef {ReturnType<typeof getSideChannelList>} Channel */\n\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t/** @type {import('./list.d.ts').RootNode<V, K> | undefined} */ var $o;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tvar root = $o && $o.next;\n\t\t\tvar deletedNode = listDelete($o, key);\n\t\t\tif (deletedNode && root && root === deletedNode) {\n\t\t\t\t$o = void undefined;\n\t\t\t}\n\t\t\treturn !!deletedNode;\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn listGet($o, key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn listHas($o, key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$o) {\n\t\t\t\t// Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head\n\t\t\t\t$o = {\n\t\t\t\t\tnext: void undefined\n\t\t\t\t};\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\tlistSet(/** @type {NonNullable<typeof $o>} */ ($o), key, value);\n\t\t}\n\t};\n\t// @ts-expect-error TODO: figure out why this is erroring\n\treturn channel;\n};\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n", "'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n", "'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n", "'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n", "'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n", "'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n", "'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n", "'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n", "'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n", "'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n", "'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n", "'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n", "'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n", "'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n", "'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n", "'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n", "'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n", "'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n", "'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n", "'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n    var arr = [];\n\n    for (var i = 0; i < a.length; i += 1) {\n        arr[i] = a[i];\n    }\n    for (var j = 0; j < b.length; j += 1) {\n        arr[j + a.length] = b[j];\n    }\n\n    return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n    var arr = [];\n    for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n        arr[j] = arrLike[i];\n    }\n    return arr;\n};\n\nvar joiny = function (arr, joiner) {\n    var str = '';\n    for (var i = 0; i < arr.length; i += 1) {\n        str += arr[i];\n        if (i + 1 < arr.length) {\n            str += joiner;\n        }\n    }\n    return str;\n};\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slicy(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                concatty(args, arguments)\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        }\n        return target.apply(\n            that,\n            concatty(args, arguments)\n        );\n\n    };\n\n    var boundLength = max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs[i] = '$' + i;\n    }\n\n    bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n", "'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n", "'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n", "'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n", "'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n", "'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n", "'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n", "'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n", "'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n", "'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n", "'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t/* eslint no-extra-parens: 0 */\n\n\tvar intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic(/** @type {const} */ ([intrinsic]));\n\t}\n\treturn intrinsic;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\nvar $Map = GetIntrinsic('%Map%', true);\n\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => V} */\nvar $mapGet = callBound('Map.prototype.get', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K, value: V) => void} */\nvar $mapSet = callBound('Map.prototype.set', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapHas = callBound('Map.prototype.has', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapDelete = callBound('Map.prototype.delete', true);\n/** @type {<K, V>(thisArg: Map<K, V>) => number} */\nvar $mapSize = callBound('Map.prototype.size', true);\n\n/** @type {import('.')} */\nmodule.exports = !!$Map && /** @type {Exclude<import('.'), false>} */ function getSideChannelMap() {\n\t/** @typedef {ReturnType<typeof getSideChannelMap>} Channel */\n\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t/** @type {Map<K, V> | undefined} */ var $m;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tif ($m) {\n\t\t\t\tvar result = $mapDelete($m, key);\n\t\t\t\tif ($mapSize($m) === 0) {\n\t\t\t\t\t$m = void undefined;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($m) {\n\t\t\t\treturn $mapGet($m, key);\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($m) {\n\t\t\t\treturn $mapHas($m, key);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$m) {\n\t\t\t\t// @ts-expect-error TS can't handle narrowing a variable inside a closure\n\t\t\t\t$m = new $Map();\n\t\t\t}\n\t\t\t$mapSet($m, key, value);\n\t\t}\n\t};\n\n\t// @ts-expect-error TODO: figure out why TS is erroring here\n\treturn channel;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\nvar getSideChannelMap = require('side-channel-map');\n\nvar $TypeError = require('es-errors/type');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\n\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => V} */\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K, value: V) => void} */\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapDelete = callBound('WeakMap.prototype.delete', true);\n\n/** @type {import('.')} */\nmodule.exports = $WeakMap\n\t? /** @type {Exclude<import('.'), false>} */ function getSideChannelWeakMap() {\n\t\t/** @typedef {ReturnType<typeof getSideChannelWeakMap>} Channel */\n\t\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t\t/** @type {WeakMap<K & object, V> | undefined} */ var $wm;\n\t\t/** @type {Channel | undefined} */ var $m;\n\n\t\t/** @type {Channel} */\n\t\tvar channel = {\n\t\t\tassert: function (key) {\n\t\t\t\tif (!channel.has(key)) {\n\t\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t\t}\n\t\t\t},\n\t\t\t'delete': function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapDelete($wm, key);\n\t\t\t\t\t}\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif ($m) {\n\t\t\t\t\t\treturn $m['delete'](key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tget: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn $m && $m.get(key);\n\t\t\t},\n\t\t\thas: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn !!$m && $m.has(key);\n\t\t\t},\n\t\t\tset: function (key, value) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif (!$wm) {\n\t\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t\t}\n\t\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif (!$m) {\n\t\t\t\t\t\t$m = getSideChannelMap();\n\t\t\t\t\t}\n\t\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\t\t/** @type {NonNullable<typeof $m>} */ ($m).set(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// @ts-expect-error TODO: figure out why this is erroring\n\t\treturn channel;\n\t}\n\t: getSideChannelMap;\n", "'use strict';\n\nvar $TypeError = require('es-errors/type');\nvar inspect = require('object-inspect');\nvar getSideChannelList = require('side-channel-list');\nvar getSideChannelMap = require('side-channel-map');\nvar getSideChannelWeakMap = require('side-channel-weakmap');\n\nvar makeChannel = getSideChannelWeakMap || getSideChannelMap || getSideChannelList;\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannel() {\n\t/** @typedef {ReturnType<typeof getSideChannel>} Channel */\n\n\t/** @type {Channel | undefined} */ var $channelData;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\treturn !!$channelData && $channelData['delete'](key);\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn $channelData && $channelData.get(key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn !!$channelData && $channelData.has(key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$channelData) {\n\t\t\t\t$channelData = makeChannel();\n\t\t\t}\n\n\t\t\t$channelData.set(key, value);\n\t\t}\n\t};\n\t// @ts-expect-error TODO: figure out why this is erroring\n\treturn channel;\n};\n", "'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n    RFC1738: 'RFC1738',\n    RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n    'default': Format.RFC3986,\n    formatters: {\n        RFC1738: function (value) {\n            return replace.call(value, percentTwenties, '+');\n        },\n        RFC3986: function (value) {\n            return String(value);\n        }\n    },\n    RFC1738: Format.RFC1738,\n    RFC3986: Format.RFC3986\n};\n", "'use strict';\n\nvar formats = require('./formats');\nvar getSideChannel = require('side-channel');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\n// Track objects created from arrayLimit overflow using side-channel\n// Stores the current max numeric index for O(1) lookup\nvar overflowChannel = getSideChannel();\n\nvar markOverflow = function markOverflow(obj, maxIndex) {\n    overflowChannel.set(obj, maxIndex);\n    return obj;\n};\n\nvar isOverflow = function isOverflow(obj) {\n    return overflowChannel.has(obj);\n};\n\nvar getMaxIndex = function getMaxIndex(obj) {\n    return overflowChannel.get(obj);\n};\n\nvar setMaxIndex = function setMaxIndex(obj, maxIndex) {\n    overflowChannel.set(obj, maxIndex);\n};\n\nvar hexTable = (function () {\n    var array = [];\n    for (var i = 0; i < 256; ++i) {\n        array[array.length] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase();\n    }\n\n    return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n    while (queue.length > 1) {\n        var item = queue.pop();\n        var obj = item.obj[item.prop];\n\n        if (isArray(obj)) {\n            var compacted = [];\n\n            for (var j = 0; j < obj.length; ++j) {\n                if (typeof obj[j] !== 'undefined') {\n                    compacted[compacted.length] = obj[j];\n                }\n            }\n\n            item.obj[item.prop] = compacted;\n        }\n    }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n    var obj = options && options.plainObjects ? { __proto__: null } : {};\n    for (var i = 0; i < source.length; ++i) {\n        if (typeof source[i] !== 'undefined') {\n            obj[i] = source[i];\n        }\n    }\n\n    return obj;\n};\n\nvar merge = function merge(target, source, options) {\n    /* eslint no-param-reassign: 0 */\n    if (!source) {\n        return target;\n    }\n\n    if (typeof source !== 'object' && typeof source !== 'function') {\n        if (isArray(target)) {\n            var nextIndex = target.length;\n            if (options && typeof options.arrayLimit === 'number' && nextIndex > options.arrayLimit) {\n                return markOverflow(arrayToObject(target.concat(source), options), nextIndex);\n            }\n            target[nextIndex] = source;\n        } else if (target && typeof target === 'object') {\n            if (isOverflow(target)) {\n                // Add at next numeric index for overflow objects\n                var newIndex = getMaxIndex(target) + 1;\n                target[newIndex] = source;\n                setMaxIndex(target, newIndex);\n            } else if (options && options.strictMerge) {\n                return [target, source];\n            } else if (\n                (options && (options.plainObjects || options.allowPrototypes))\n                || !has.call(Object.prototype, source)\n            ) {\n                target[source] = true;\n            }\n        } else {\n            return [target, source];\n        }\n\n        return target;\n    }\n\n    if (!target || typeof target !== 'object') {\n        if (isOverflow(source)) {\n            // Create new object with target at 0, source values shifted by 1\n            var sourceKeys = Object.keys(source);\n            var result = options && options.plainObjects\n                ? { __proto__: null, 0: target }\n                : { 0: target };\n            for (var m = 0; m < sourceKeys.length; m++) {\n                var oldKey = parseInt(sourceKeys[m], 10);\n                result[oldKey + 1] = source[sourceKeys[m]];\n            }\n            return markOverflow(result, getMaxIndex(source) + 1);\n        }\n        var combined = [target].concat(source);\n        if (options && typeof options.arrayLimit === 'number' && combined.length > options.arrayLimit) {\n            return markOverflow(arrayToObject(combined, options), combined.length - 1);\n        }\n        return combined;\n    }\n\n    var mergeTarget = target;\n    if (isArray(target) && !isArray(source)) {\n        mergeTarget = arrayToObject(target, options);\n    }\n\n    if (isArray(target) && isArray(source)) {\n        source.forEach(function (item, i) {\n            if (has.call(target, i)) {\n                var targetItem = target[i];\n                if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n                    target[i] = merge(targetItem, item, options);\n                } else {\n                    target[target.length] = item;\n                }\n            } else {\n                target[i] = item;\n            }\n        });\n        return target;\n    }\n\n    return Object.keys(source).reduce(function (acc, key) {\n        var value = source[key];\n\n        if (has.call(acc, key)) {\n            acc[key] = merge(acc[key], value, options);\n        } else {\n            acc[key] = value;\n        }\n\n        if (isOverflow(source) && !isOverflow(acc)) {\n            markOverflow(acc, getMaxIndex(source));\n        }\n        if (isOverflow(acc)) {\n            var keyNum = parseInt(key, 10);\n            if (String(keyNum) === key && keyNum >= 0 && keyNum > getMaxIndex(acc)) {\n                setMaxIndex(acc, keyNum);\n            }\n        }\n\n        return acc;\n    }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n    return Object.keys(source).reduce(function (acc, key) {\n        acc[key] = source[key];\n        return acc;\n    }, target);\n};\n\nvar decode = function (str, defaultDecoder, charset) {\n    var strWithoutPlus = str.replace(/\\+/g, ' ');\n    if (charset === 'iso-8859-1') {\n        // unescape never throws, no try...catch needed:\n        return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n    }\n    // utf-8\n    try {\n        return decodeURIComponent(strWithoutPlus);\n    } catch (e) {\n        return strWithoutPlus;\n    }\n};\n\nvar limit = 1024;\n\n/* eslint operator-linebreak: [2, \"before\"] */\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n    // It has been adapted here for stricter adherence to RFC 3986\n    if (str.length === 0) {\n        return str;\n    }\n\n    var string = str;\n    if (typeof str === 'symbol') {\n        string = Symbol.prototype.toString.call(str);\n    } else if (typeof str !== 'string') {\n        string = String(str);\n    }\n\n    if (charset === 'iso-8859-1') {\n        return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n            return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n        });\n    }\n\n    var out = '';\n    for (var j = 0; j < string.length; j += limit) {\n        var segment = string.length >= limit ? string.slice(j, j + limit) : string;\n        var arr = [];\n\n        for (var i = 0; i < segment.length; ++i) {\n            var c = segment.charCodeAt(i);\n            if (\n                c === 0x2D // -\n                || c === 0x2E // .\n                || c === 0x5F // _\n                || c === 0x7E // ~\n                || (c >= 0x30 && c <= 0x39) // 0-9\n                || (c >= 0x41 && c <= 0x5A) // a-z\n                || (c >= 0x61 && c <= 0x7A) // A-Z\n                || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n            ) {\n                arr[arr.length] = segment.charAt(i);\n                continue;\n            }\n\n            if (c < 0x80) {\n                arr[arr.length] = hexTable[c];\n                continue;\n            }\n\n            if (c < 0x800) {\n                arr[arr.length] = hexTable[0xC0 | (c >> 6)]\n                    + hexTable[0x80 | (c & 0x3F)];\n                continue;\n            }\n\n            if (c < 0xD800 || c >= 0xE000) {\n                arr[arr.length] = hexTable[0xE0 | (c >> 12)]\n                    + hexTable[0x80 | ((c >> 6) & 0x3F)]\n                    + hexTable[0x80 | (c & 0x3F)];\n                continue;\n            }\n\n            i += 1;\n            c = 0x10000 + (((c & 0x3FF) << 10) | (segment.charCodeAt(i) & 0x3FF));\n\n            arr[arr.length] = hexTable[0xF0 | (c >> 18)]\n                + hexTable[0x80 | ((c >> 12) & 0x3F)]\n                + hexTable[0x80 | ((c >> 6) & 0x3F)]\n                + hexTable[0x80 | (c & 0x3F)];\n        }\n\n        out += arr.join('');\n    }\n\n    return out;\n};\n\nvar compact = function compact(value) {\n    var queue = [{ obj: { o: value }, prop: 'o' }];\n    var refs = [];\n\n    for (var i = 0; i < queue.length; ++i) {\n        var item = queue[i];\n        var obj = item.obj[item.prop];\n\n        var keys = Object.keys(obj);\n        for (var j = 0; j < keys.length; ++j) {\n            var key = keys[j];\n            var val = obj[key];\n            if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n                queue[queue.length] = { obj: obj, prop: key };\n                refs[refs.length] = val;\n            }\n        }\n    }\n\n    compactQueue(queue);\n\n    return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n    if (!obj || typeof obj !== 'object') {\n        return false;\n    }\n\n    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b, arrayLimit, plainObjects) {\n    // If 'a' is already an overflow object, add to it\n    if (isOverflow(a)) {\n        var newIndex = getMaxIndex(a) + 1;\n        a[newIndex] = b;\n        setMaxIndex(a, newIndex);\n        return a;\n    }\n\n    var result = [].concat(a, b);\n    if (result.length > arrayLimit) {\n        return markOverflow(arrayToObject(result, { plainObjects: plainObjects }), result.length - 1);\n    }\n    return result;\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n    if (isArray(val)) {\n        var mapped = [];\n        for (var i = 0; i < val.length; i += 1) {\n            mapped[mapped.length] = fn(val[i]);\n        }\n        return mapped;\n    }\n    return fn(val);\n};\n\nmodule.exports = {\n    arrayToObject: arrayToObject,\n    assign: assign,\n    combine: combine,\n    compact: compact,\n    decode: decode,\n    encode: encode,\n    isBuffer: isBuffer,\n    isOverflow: isOverflow,\n    isRegExp: isRegExp,\n    markOverflow: markOverflow,\n    maybeMap: maybeMap,\n    merge: merge\n};\n", "'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n    brackets: function brackets(prefix) {\n        return prefix + '[]';\n    },\n    comma: 'comma',\n    indices: function indices(prefix, key) {\n        return prefix + '[' + key + ']';\n    },\n    repeat: function repeat(prefix) {\n        return prefix;\n    }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n    push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n    addQueryPrefix: false,\n    allowDots: false,\n    allowEmptyArrays: false,\n    arrayFormat: 'indices',\n    charset: 'utf-8',\n    charsetSentinel: false,\n    commaRoundTrip: false,\n    delimiter: '&',\n    encode: true,\n    encodeDotInKeys: false,\n    encoder: utils.encode,\n    encodeValuesOnly: false,\n    filter: void undefined,\n    format: defaultFormat,\n    formatter: formats.formatters[defaultFormat],\n    // deprecated\n    indices: false,\n    serializeDate: function serializeDate(date) {\n        return toISO.call(date);\n    },\n    skipNulls: false,\n    strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n    return typeof v === 'string'\n        || typeof v === 'number'\n        || typeof v === 'boolean'\n        || typeof v === 'symbol'\n        || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n    object,\n    prefix,\n    generateArrayPrefix,\n    commaRoundTrip,\n    allowEmptyArrays,\n    strictNullHandling,\n    skipNulls,\n    encodeDotInKeys,\n    encoder,\n    filter,\n    sort,\n    allowDots,\n    serializeDate,\n    format,\n    formatter,\n    encodeValuesOnly,\n    charset,\n    sideChannel\n) {\n    var obj = object;\n\n    var tmpSc = sideChannel;\n    var step = 0;\n    var findFlag = false;\n    while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n        // Where object last appeared in the ref tree\n        var pos = tmpSc.get(object);\n        step += 1;\n        if (typeof pos !== 'undefined') {\n            if (pos === step) {\n                throw new RangeError('Cyclic object value');\n            } else {\n                findFlag = true; // Break while\n            }\n        }\n        if (typeof tmpSc.get(sentinel) === 'undefined') {\n            step = 0;\n        }\n    }\n\n    if (typeof filter === 'function') {\n        obj = filter(prefix, obj);\n    } else if (obj instanceof Date) {\n        obj = serializeDate(obj);\n    } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        obj = utils.maybeMap(obj, function (value) {\n            if (value instanceof Date) {\n                return serializeDate(value);\n            }\n            return value;\n        });\n    }\n\n    if (obj === null) {\n        if (strictNullHandling) {\n            return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n        }\n\n        obj = '';\n    }\n\n    if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n        if (encoder) {\n            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n        }\n        return [formatter(prefix) + '=' + formatter(String(obj))];\n    }\n\n    var values = [];\n\n    if (typeof obj === 'undefined') {\n        return values;\n    }\n\n    var objKeys;\n    if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        // we need to join elements in\n        if (encodeValuesOnly && encoder) {\n            obj = utils.maybeMap(obj, encoder);\n        }\n        objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n    } else if (isArray(filter)) {\n        objKeys = filter;\n    } else {\n        var keys = Object.keys(obj);\n        objKeys = sort ? keys.sort(sort) : keys;\n    }\n\n    var encodedPrefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n\n    var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + '[]' : encodedPrefix;\n\n    if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n        return adjustedPrefix + '[]';\n    }\n\n    for (var j = 0; j < objKeys.length; ++j) {\n        var key = objKeys[j];\n        var value = typeof key === 'object' && key && typeof key.value !== 'undefined'\n            ? key.value\n            : obj[key];\n\n        if (skipNulls && value === null) {\n            continue;\n        }\n\n        var encodedKey = allowDots && encodeDotInKeys ? String(key).replace(/\\./g, '%2E') : String(key);\n        var keyPrefix = isArray(obj)\n            ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix\n            : adjustedPrefix + (allowDots ? '.' + encodedKey : '[' + encodedKey + ']');\n\n        sideChannel.set(object, step);\n        var valueSideChannel = getSideChannel();\n        valueSideChannel.set(sentinel, sideChannel);\n        pushToArray(values, stringify(\n            value,\n            keyPrefix,\n            generateArrayPrefix,\n            commaRoundTrip,\n            allowEmptyArrays,\n            strictNullHandling,\n            skipNulls,\n            encodeDotInKeys,\n            generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n            filter,\n            sort,\n            allowDots,\n            serializeDate,\n            format,\n            formatter,\n            encodeValuesOnly,\n            charset,\n            valueSideChannel\n        ));\n    }\n\n    return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n        throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n    }\n\n    if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n        throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n    }\n\n    if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n        throw new TypeError('Encoder has to be a function.');\n    }\n\n    var charset = opts.charset || defaults.charset;\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n\n    var format = formats['default'];\n    if (typeof opts.format !== 'undefined') {\n        if (!has.call(formats.formatters, opts.format)) {\n            throw new TypeError('Unknown format option provided.');\n        }\n        format = opts.format;\n    }\n    var formatter = formats.formatters[format];\n\n    var filter = defaults.filter;\n    if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n        filter = opts.filter;\n    }\n\n    var arrayFormat;\n    if (opts.arrayFormat in arrayPrefixGenerators) {\n        arrayFormat = opts.arrayFormat;\n    } else if ('indices' in opts) {\n        arrayFormat = opts.indices ? 'indices' : 'repeat';\n    } else {\n        arrayFormat = defaults.arrayFormat;\n    }\n\n    if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n        throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n    }\n\n    var allowDots = typeof opts.allowDots === 'undefined' ? opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n    return {\n        addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n        allowDots: allowDots,\n        allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n        arrayFormat: arrayFormat,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        commaRoundTrip: !!opts.commaRoundTrip,\n        delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n        encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n        encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n        encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n        encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n        filter: filter,\n        format: format,\n        formatter: formatter,\n        serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n        skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n        sort: typeof opts.sort === 'function' ? opts.sort : null,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (object, opts) {\n    var obj = object;\n    var options = normalizeStringifyOptions(opts);\n\n    var objKeys;\n    var filter;\n\n    if (typeof options.filter === 'function') {\n        filter = options.filter;\n        obj = filter('', obj);\n    } else if (isArray(options.filter)) {\n        filter = options.filter;\n        objKeys = filter;\n    }\n\n    var keys = [];\n\n    if (typeof obj !== 'object' || obj === null) {\n        return '';\n    }\n\n    var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat];\n    var commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n\n    if (!objKeys) {\n        objKeys = Object.keys(obj);\n    }\n\n    if (options.sort) {\n        objKeys.sort(options.sort);\n    }\n\n    var sideChannel = getSideChannel();\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n        var value = obj[key];\n\n        if (options.skipNulls && value === null) {\n            continue;\n        }\n        pushToArray(keys, stringify(\n            value,\n            key,\n            generateArrayPrefix,\n            commaRoundTrip,\n            options.allowEmptyArrays,\n            options.strictNullHandling,\n            options.skipNulls,\n            options.encodeDotInKeys,\n            options.encode ? options.encoder : null,\n            options.filter,\n            options.sort,\n            options.allowDots,\n            options.serializeDate,\n            options.format,\n            options.formatter,\n            options.encodeValuesOnly,\n            options.charset,\n            sideChannel\n        ));\n    }\n\n    var joined = keys.join(options.delimiter);\n    var prefix = options.addQueryPrefix === true ? '?' : '';\n\n    if (options.charsetSentinel) {\n        if (options.charset === 'iso-8859-1') {\n            // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n            prefix += 'utf8=%26%2310003%3B&';\n        } else {\n            // encodeURIComponent('\u2713')\n            prefix += 'utf8=%E2%9C%93&';\n        }\n    }\n\n    return joined.length > 0 ? prefix + joined : '';\n};\n", "'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n    allowDots: false,\n    allowEmptyArrays: false,\n    allowPrototypes: false,\n    allowSparse: false,\n    arrayLimit: 20,\n    charset: 'utf-8',\n    charsetSentinel: false,\n    comma: false,\n    decodeDotInKeys: false,\n    decoder: utils.decode,\n    delimiter: '&',\n    depth: 5,\n    duplicates: 'combine',\n    ignoreQueryPrefix: false,\n    interpretNumericEntities: false,\n    parameterLimit: 1000,\n    parseArrays: true,\n    plainObjects: false,\n    strictDepth: false,\n    strictMerge: true,\n    strictNullHandling: false,\n    throwOnLimitExceeded: false\n};\n\nvar interpretNumericEntities = function (str) {\n    return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n        return String.fromCharCode(parseInt(numberStr, 10));\n    });\n};\n\nvar parseArrayValue = function (val, options, currentArrayLength) {\n    if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n        return val.split(',');\n    }\n\n    if (options.throwOnLimitExceeded && currentArrayLength >= options.arrayLimit) {\n        throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n    }\n\n    return val;\n};\n\n// This is what browsers will submit when the \u2713 character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the \u2713 character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('\u2713')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n    var obj = { __proto__: null };\n\n    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n    cleanStr = cleanStr.replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n\n    var limit = options.parameterLimit === Infinity ? void undefined : options.parameterLimit;\n    var parts = cleanStr.split(\n        options.delimiter,\n        options.throwOnLimitExceeded ? limit + 1 : limit\n    );\n\n    if (options.throwOnLimitExceeded && parts.length > limit) {\n        throw new RangeError('Parameter limit exceeded. Only ' + limit + ' parameter' + (limit === 1 ? '' : 's') + ' allowed.');\n    }\n\n    var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n    var i;\n\n    var charset = options.charset;\n    if (options.charsetSentinel) {\n        for (i = 0; i < parts.length; ++i) {\n            if (parts[i].indexOf('utf8=') === 0) {\n                if (parts[i] === charsetSentinel) {\n                    charset = 'utf-8';\n                } else if (parts[i] === isoSentinel) {\n                    charset = 'iso-8859-1';\n                }\n                skipIndex = i;\n                i = parts.length; // The eslint settings do not allow break;\n            }\n        }\n    }\n\n    for (i = 0; i < parts.length; ++i) {\n        if (i === skipIndex) {\n            continue;\n        }\n        var part = parts[i];\n\n        var bracketEqualsPos = part.indexOf(']=');\n        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n        var key;\n        var val;\n        if (pos === -1) {\n            key = options.decoder(part, defaults.decoder, charset, 'key');\n            val = options.strictNullHandling ? null : '';\n        } else {\n            key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n\n            if (key !== null) {\n                val = utils.maybeMap(\n                    parseArrayValue(\n                        part.slice(pos + 1),\n                        options,\n                        isArray(obj[key]) ? obj[key].length : 0\n                    ),\n                    function (encodedVal) {\n                        return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n                    }\n                );\n            }\n        }\n\n        if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n            val = interpretNumericEntities(String(val));\n        }\n\n        if (part.indexOf('[]=') > -1) {\n            val = isArray(val) ? [val] : val;\n        }\n\n        if (options.comma && isArray(val) && val.length > options.arrayLimit) {\n            if (options.throwOnLimitExceeded) {\n                throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n            }\n            val = utils.combine([], val, options.arrayLimit, options.plainObjects);\n        }\n\n        if (key !== null) {\n            var existing = has.call(obj, key);\n            if (existing && (options.duplicates === 'combine' || part.indexOf('[]=') > -1)) {\n                obj[key] = utils.combine(\n                    obj[key],\n                    val,\n                    options.arrayLimit,\n                    options.plainObjects\n                );\n            } else if (!existing || options.duplicates === 'last') {\n                obj[key] = val;\n            }\n        }\n    }\n\n    return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n    var currentArrayLength = 0;\n    if (chain.length > 0 && chain[chain.length - 1] === '[]') {\n        var parentKey = chain.slice(0, -1).join('');\n        currentArrayLength = Array.isArray(val) && val[parentKey] ? val[parentKey].length : 0;\n    }\n\n    var leaf = valuesParsed ? val : parseArrayValue(val, options, currentArrayLength);\n\n    for (var i = chain.length - 1; i >= 0; --i) {\n        var obj;\n        var root = chain[i];\n\n        if (root === '[]' && options.parseArrays) {\n            if (utils.isOverflow(leaf)) {\n                // leaf is already an overflow object, preserve it\n                obj = leaf;\n            } else {\n                obj = options.allowEmptyArrays && (leaf === '' || (options.strictNullHandling && leaf === null))\n                    ? []\n                    : utils.combine(\n                        [],\n                        leaf,\n                        options.arrayLimit,\n                        options.plainObjects\n                    );\n            }\n        } else {\n            obj = options.plainObjects ? { __proto__: null } : {};\n            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n            var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, '.') : cleanRoot;\n            var index = parseInt(decodedRoot, 10);\n            var isValidArrayIndex = !isNaN(index)\n                && root !== decodedRoot\n                && String(index) === decodedRoot\n                && index >= 0\n                && options.parseArrays;\n            if (!options.parseArrays && decodedRoot === '') {\n                obj = { 0: leaf };\n            } else if (isValidArrayIndex && index < options.arrayLimit) {\n                obj = [];\n                obj[index] = leaf;\n            } else if (isValidArrayIndex && options.throwOnLimitExceeded) {\n                throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n            } else if (isValidArrayIndex) {\n                obj[index] = leaf;\n                utils.markOverflow(obj, index);\n            } else if (decodedRoot !== '__proto__') {\n                obj[decodedRoot] = leaf;\n            }\n        }\n\n        leaf = obj;\n    }\n\n    return leaf;\n};\n\nvar splitKeyIntoSegments = function splitKeyIntoSegments(givenKey, options) {\n    var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n    if (options.depth <= 0) {\n        if (!options.plainObjects && has.call(Object.prototype, key)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        return [key];\n    }\n\n    var brackets = /(\\[[^[\\]]*])/;\n    var child = /(\\[[^[\\]]*])/g;\n\n    var segment = brackets.exec(key);\n    var parent = segment ? key.slice(0, segment.index) : key;\n\n    var keys = [];\n\n    if (parent) {\n        if (!options.plainObjects && has.call(Object.prototype, parent)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        keys[keys.length] = parent;\n    }\n\n    var i = 0;\n    while ((segment = child.exec(key)) !== null && i < options.depth) {\n        i += 1;\n\n        var segmentContent = segment[1].slice(1, -1);\n        if (!options.plainObjects && has.call(Object.prototype, segmentContent)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        keys[keys.length] = segment[1];\n    }\n\n    if (segment) {\n        if (options.strictDepth === true) {\n            throw new RangeError('Input depth exceeded depth option of ' + options.depth + ' and strictDepth is true');\n        }\n\n        keys[keys.length] = '[' + key.slice(segment.index) + ']';\n    }\n\n    return keys;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n    if (!givenKey) {\n        return;\n    }\n\n    var keys = splitKeyIntoSegments(givenKey, options);\n\n    if (!keys) {\n        return;\n    }\n\n    return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n        throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n    }\n\n    if (typeof opts.decodeDotInKeys !== 'undefined' && typeof opts.decodeDotInKeys !== 'boolean') {\n        throw new TypeError('`decodeDotInKeys` option can only be `true` or `false`, when provided');\n    }\n\n    if (opts.decoder !== null && typeof opts.decoder !== 'undefined' && typeof opts.decoder !== 'function') {\n        throw new TypeError('Decoder has to be a function.');\n    }\n\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n\n    if (typeof opts.throwOnLimitExceeded !== 'undefined' && typeof opts.throwOnLimitExceeded !== 'boolean') {\n        throw new TypeError('`throwOnLimitExceeded` option must be a boolean');\n    }\n\n    var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n    var duplicates = typeof opts.duplicates === 'undefined' ? defaults.duplicates : opts.duplicates;\n\n    if (duplicates !== 'combine' && duplicates !== 'first' && duplicates !== 'last') {\n        throw new TypeError('The duplicates option must be either combine, first, or last');\n    }\n\n    var allowDots = typeof opts.allowDots === 'undefined' ? opts.decodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n    return {\n        allowDots: allowDots,\n        allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n        allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n        allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n        arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n        decodeDotInKeys: typeof opts.decodeDotInKeys === 'boolean' ? opts.decodeDotInKeys : defaults.decodeDotInKeys,\n        decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n        delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n        // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n        depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n        duplicates: duplicates,\n        ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n        interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n        parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n        parseArrays: opts.parseArrays !== false,\n        plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n        strictDepth: typeof opts.strictDepth === 'boolean' ? !!opts.strictDepth : defaults.strictDepth,\n        strictMerge: typeof opts.strictMerge === 'boolean' ? !!opts.strictMerge : defaults.strictMerge,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n        throwOnLimitExceeded: typeof opts.throwOnLimitExceeded === 'boolean' ? opts.throwOnLimitExceeded : false\n    };\n};\n\nmodule.exports = function (str, opts) {\n    var options = normalizeParseOptions(opts);\n\n    if (str === '' || str === null || typeof str === 'undefined') {\n        return options.plainObjects ? { __proto__: null } : {};\n    }\n\n    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n    var obj = options.plainObjects ? { __proto__: null } : {};\n\n    // Iterate over the keys and setup the new object\n\n    var keys = Object.keys(tempObj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n        obj = utils.merge(obj, newObj, options);\n    }\n\n    if (options.allowSparse === true) {\n        return obj;\n    }\n\n    return utils.compact(obj);\n};\n", "'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n    formats: formats,\n    parse: parse,\n    stringify: stringify\n};\n", "/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar debug = require('debug')('body-parser:urlencoded')\nvar read = require('../read')\nvar qs = require('qs')\nvar { normalizeOptions } = require('../utils')\n\n/**\n * Module exports.\n */\n\nmodule.exports = urlencoded\n\n/**\n * Create a middleware to parse urlencoded bodies.\n *\n * @param {Object} [options]\n * @returns {Function}\n * @public\n */\nfunction urlencoded (options) {\n  const normalizedOptions = normalizeOptions(options, 'application/x-www-form-urlencoded')\n\n  if (normalizedOptions.defaultCharset !== 'utf-8' && normalizedOptions.defaultCharset !== 'iso-8859-1') {\n    throw new TypeError('option defaultCharset must be either utf-8 or iso-8859-1')\n  }\n\n  // create the appropriate query parser\n  var queryparse = createQueryParser(options)\n\n  function parse (body, encoding) {\n    return body.length\n      ? queryparse(body, encoding)\n      : {}\n  }\n\n  const readOptions = {\n    ...normalizedOptions,\n    // assert charset\n    isValidCharset: (charset) => charset === 'utf-8' || charset === 'iso-8859-1'\n  }\n\n  return function urlencodedParser (req, res, next) {\n    read(req, res, next, parse, debug, readOptions)\n  }\n}\n\n/**\n * Get the extended query parser.\n *\n * @param {Object} options\n * @returns {Function}\n * @private\n */\nfunction createQueryParser (options) {\n  var extended = Boolean(options?.extended)\n  var parameterLimit = options?.parameterLimit !== undefined\n    ? options?.parameterLimit\n    : 1000\n  var charsetSentinel = options?.charsetSentinel\n  var interpretNumericEntities = options?.interpretNumericEntities\n  var depth = extended ? (options?.depth !== undefined ? options?.depth : 32) : 0\n\n  if (isNaN(parameterLimit) || parameterLimit < 1) {\n    throw new TypeError('option parameterLimit must be a positive number')\n  }\n\n  if (isNaN(depth) || depth < 0) {\n    throw new TypeError('option depth must be a zero or a positive number')\n  }\n\n  if (isFinite(parameterLimit)) {\n    parameterLimit = parameterLimit | 0\n  }\n\n  return function queryparse (body, encoding) {\n    var paramCount = parameterCount(body, parameterLimit)\n\n    if (paramCount === undefined) {\n      debug('too many parameters')\n      throw createError(413, 'too many parameters', {\n        type: 'parameters.too.many'\n      })\n    }\n\n    var arrayLimit = extended ? Math.max(100, paramCount) : paramCount\n\n    debug('parse ' + (extended ? 'extended ' : '') + 'urlencoding')\n    try {\n      return qs.parse(body, {\n        allowPrototypes: true,\n        arrayLimit: arrayLimit,\n        depth: depth,\n        charsetSentinel: charsetSentinel,\n        interpretNumericEntities: interpretNumericEntities,\n        charset: encoding,\n        parameterLimit: parameterLimit,\n        strictDepth: true\n      })\n    } catch (err) {\n      if (err instanceof RangeError) {\n        throw createError(400, 'The input exceeded the depth', {\n          type: 'querystring.parse.rangeError'\n        })\n      } else {\n        throw err\n      }\n    }\n  }\n}\n\n/**\n * Count the number of parameters, stopping once limit reached\n *\n * @param {string} body\n * @param {number} limit\n * @returns {number|undefined} Returns undefined if limit exceeded\n * @private\n */\nfunction parameterCount (body, limit) {\n  let count = 0\n  let index = -1\n  do {\n    count++\n    if (count > limit) return undefined // Early exit if limit exceeded\n    index = body.indexOf('&', index + 1)\n  } while (index !== -1)\n  return count\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * @typedef {Object} Parsers\n * @property {Function} json JSON parser\n * @property {Function} raw Raw parser\n * @property {Function} text Text parser\n * @property {Function} urlencoded URL-encoded parser\n */\n\n/**\n * Module exports.\n * @type {Function & Parsers}\n */\nexports = module.exports = bodyParser\n\n/**\n * JSON parser.\n * @public\n */\nObject.defineProperty(exports, 'json', {\n  configurable: true,\n  enumerable: true,\n  get: () => require('./lib/types/json')\n})\n\n/**\n * Raw parser.\n * @public\n */\nObject.defineProperty(exports, 'raw', {\n  configurable: true,\n  enumerable: true,\n  get: () => require('./lib/types/raw')\n})\n\n/**\n * Text parser.\n * @public\n */\nObject.defineProperty(exports, 'text', {\n  configurable: true,\n  enumerable: true,\n  get: () => require('./lib/types/text')\n})\n\n/**\n * URL-encoded parser.\n * @public\n */\nObject.defineProperty(exports, 'urlencoded', {\n  configurable: true,\n  enumerable: true,\n  get: () => require('./lib/types/urlencoded')\n})\n\n/**\n * Create a middleware to parse json and urlencoded bodies.\n *\n * @deprecated\n * @public\n */\nfunction bodyParser () {\n  throw new Error('The bodyParser() generic has been split into individual middleware to use instead.')\n}\n", "'use strict';\n\nfunction mergeDescriptors(destination, source, overwrite = true) {\n\tif (!destination) {\n\t\tthrow new TypeError('The `destination` argument is required.');\n\t}\n\n\tif (!source) {\n\t\tthrow new TypeError('The `source` argument is required.');\n\t}\n\n\tfor (const name of Object.getOwnPropertyNames(source)) {\n\t\tif (!overwrite && Object.hasOwn(destination, name)) {\n\t\t\t// Skip descriptor\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Copy descriptor\n\t\tconst descriptor = Object.getOwnPropertyDescriptor(source, name);\n\t\tObject.defineProperty(destination, name, descriptor);\n\t}\n\n\treturn destination;\n}\n\nmodule.exports = mergeDescriptors;\n", "/*!\n * encodeurl\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = encodeUrl\n\n/**\n * RegExp to match non-URL code points, *after* encoding (i.e. not including \"%\")\n * and including invalid escape sequences.\n * @private\n */\n\nvar ENCODE_CHARS_REGEXP = /(?:[^\\x21\\x23-\\x3B\\x3D\\x3F-\\x5F\\x61-\\x7A\\x7C\\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g\n\n/**\n * RegExp to match unmatched surrogate pair.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF]([^\\uDC00-\\uDFFF]|$)/g\n\n/**\n * String to replace unmatched surrogate pair with.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\\uFFFD$2'\n\n/**\n * Encode a URL to a percent-encoded form, excluding already-encoded sequences.\n *\n * This function will take an already-encoded URL and encode all the non-URL\n * code points. This function will not encode the \"%\" character unless it is\n * not part of a valid sequence (`%20` will be left as-is, but `%foo` will\n * be encoded as `%25foo`).\n *\n * This encode is meant to be \"safe\" and does not throw errors. It will try as\n * hard as it can to properly encode the given URL, including replacing any raw,\n * unpaired surrogate pairs with the Unicode replacement character prior to\n * encoding.\n *\n * @param {string} url\n * @return {string}\n * @public\n */\n\nfunction encodeUrl (url) {\n  return String(url)\n    .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)\n    .replace(ENCODE_CHARS_REGEXP, encodeURI)\n}\n", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param  {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n  var str = '' + string;\n  var match = matchHtmlRegExp.exec(str);\n\n  if (!match) {\n    return str;\n  }\n\n  var escape;\n  var html = '';\n  var index = 0;\n  var lastIndex = 0;\n\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34: // \"\n        escape = '&quot;';\n        break;\n      case 38: // &\n        escape = '&amp;';\n        break;\n      case 39: // '\n        escape = '&#39;';\n        break;\n      case 60: // <\n        escape = '&lt;';\n        break;\n      case 62: // >\n        escape = '&gt;';\n        break;\n      default:\n        continue;\n    }\n\n    if (lastIndex !== index) {\n      html += str.substring(lastIndex, index);\n    }\n\n    lastIndex = index + 1;\n    html += escape;\n  }\n\n  return lastIndex !== index\n    ? html + str.substring(lastIndex, index)\n    : html;\n}\n", "/*!\n * parseurl\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar url = require('url')\nvar parse = url.parse\nvar Url = url.Url\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = parseurl\nmodule.exports.original = originalurl\n\n/**\n * Parse the `req` url with memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction parseurl (req) {\n  var url = req.url\n\n  if (url === undefined) {\n    // URL is undefined\n    return undefined\n  }\n\n  var parsed = req._parsedUrl\n\n  if (fresh(url, parsed)) {\n    // Return cached URL parse\n    return parsed\n  }\n\n  // Parse the URL\n  parsed = fastparse(url)\n  parsed._raw = url\n\n  return (req._parsedUrl = parsed)\n};\n\n/**\n * Parse the `req` original url with fallback and memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction originalurl (req) {\n  var url = req.originalUrl\n\n  if (typeof url !== 'string') {\n    // Fallback\n    return parseurl(req)\n  }\n\n  var parsed = req._parsedOriginalUrl\n\n  if (fresh(url, parsed)) {\n    // Return cached URL parse\n    return parsed\n  }\n\n  // Parse the URL\n  parsed = fastparse(url)\n  parsed._raw = url\n\n  return (req._parsedOriginalUrl = parsed)\n};\n\n/**\n * Parse the `str` url with fast-path short-cut.\n *\n * @param {string} str\n * @return {Object}\n * @private\n */\n\nfunction fastparse (str) {\n  if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) {\n    return parse(str)\n  }\n\n  var pathname = str\n  var query = null\n  var search = null\n\n  // This takes the regexp from https://github.com/joyent/node/pull/7878\n  // Which is /^(\\/[^?#\\s]*)(\\?[^#\\s]*)?$/\n  // And unrolls it into a for loop\n  for (var i = 1; i < str.length; i++) {\n    switch (str.charCodeAt(i)) {\n      case 0x3f: /* ?  */\n        if (search === null) {\n          pathname = str.substring(0, i)\n          query = str.substring(i + 1)\n          search = str.substring(i)\n        }\n        break\n      case 0x09: /* \\t */\n      case 0x0a: /* \\n */\n      case 0x0c: /* \\f */\n      case 0x0d: /* \\r */\n      case 0x20: /*    */\n      case 0x23: /* #  */\n      case 0xa0:\n      case 0xfeff:\n        return parse(str)\n    }\n  }\n\n  var url = Url !== undefined\n    ? new Url()\n    : {}\n\n  url.path = str\n  url.href = str\n  url.pathname = pathname\n\n  if (search !== null) {\n    url.query = query\n    url.search = search\n  }\n\n  return url\n}\n\n/**\n * Determine if parsed is still fresh for url.\n *\n * @param {string} url\n * @param {object} parsedUrl\n * @return {boolean}\n * @private\n */\n\nfunction fresh (url, parsedUrl) {\n  return typeof parsedUrl === 'object' &&\n    parsedUrl !== null &&\n    (Url === undefined || parsedUrl instanceof Url) &&\n    parsedUrl._raw === url\n}\n", "/*!\n * finalhandler\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('finalhandler')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar onFinished = require('on-finished')\nvar parseUrl = require('parseurl')\nvar statuses = require('statuses')\n\n/**\n * Module variables.\n * @private\n */\n\nvar isFinished = onFinished.isFinished\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} message\n * @private\n */\n\nfunction createHtmlDocument (message) {\n  var body = escapeHtml(message)\n    .replaceAll('\\n', '<br>')\n    .replaceAll('  ', ' &nbsp;')\n\n  return '<!DOCTYPE html>\\n' +\n    '<html lang=\"en\">\\n' +\n    '<head>\\n' +\n    '<meta charset=\"utf-8\">\\n' +\n    '<title>Error</title>\\n' +\n    '</head>\\n' +\n    '<body>\\n' +\n    '<pre>' + body + '</pre>\\n' +\n    '</body>\\n' +\n    '</html>\\n'\n}\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = finalhandler\n\n/**\n * Create a function to handle the final response.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Object} [options]\n * @return {Function}\n * @public\n */\n\nfunction finalhandler (req, res, options) {\n  var opts = options || {}\n\n  // get environment\n  var env = opts.env || process.env.NODE_ENV || 'development'\n\n  // get error callback\n  var onerror = opts.onerror\n\n  return function (err) {\n    var headers\n    var msg\n    var status\n\n    // ignore 404 on in-flight response\n    if (!err && res.headersSent) {\n      debug('cannot 404 after headers sent')\n      return\n    }\n\n    // unhandled error\n    if (err) {\n      // respect status code from error\n      status = getErrorStatusCode(err)\n\n      if (status === undefined) {\n        // fallback to status code on response\n        status = getResponseStatusCode(res)\n      } else {\n        // respect headers from error\n        headers = getErrorHeaders(err)\n      }\n\n      // get error message\n      msg = getErrorMessage(err, status, env)\n    } else {\n      // not found\n      status = 404\n      msg = 'Cannot ' + req.method + ' ' + encodeUrl(getResourceName(req))\n    }\n\n    debug('default %s', status)\n\n    // schedule onerror callback\n    if (err && onerror) {\n      setImmediate(onerror, err, req, res)\n    }\n\n    // cannot actually respond\n    if (res.headersSent) {\n      debug('cannot %d after headers sent', status)\n      if (req.socket) {\n        req.socket.destroy()\n      }\n      return\n    }\n\n    // send response\n    send(req, res, status, headers, msg)\n  }\n}\n\n/**\n * Get headers from Error object.\n *\n * @param {Error} err\n * @return {object}\n * @private\n */\n\nfunction getErrorHeaders (err) {\n  if (!err.headers || typeof err.headers !== 'object') {\n    return undefined\n  }\n\n  return { ...err.headers }\n}\n\n/**\n * Get message from Error object, fallback to status message.\n *\n * @param {Error} err\n * @param {number} status\n * @param {string} env\n * @return {string}\n * @private\n */\n\nfunction getErrorMessage (err, status, env) {\n  var msg\n\n  if (env !== 'production') {\n    // use err.stack, which typically includes err.message\n    msg = err.stack\n\n    // fallback to err.toString() when possible\n    if (!msg && typeof err.toString === 'function') {\n      msg = err.toString()\n    }\n  }\n\n  return msg || statuses.message[status]\n}\n\n/**\n * Get status code from Error object.\n *\n * @param {Error} err\n * @return {number}\n * @private\n */\n\nfunction getErrorStatusCode (err) {\n  // check err.status\n  if (typeof err.status === 'number' && err.status >= 400 && err.status < 600) {\n    return err.status\n  }\n\n  // check err.statusCode\n  if (typeof err.statusCode === 'number' && err.statusCode >= 400 && err.statusCode < 600) {\n    return err.statusCode\n  }\n\n  return undefined\n}\n\n/**\n * Get resource name for the request.\n *\n * This is typically just the original pathname of the request\n * but will fallback to \"resource\" is that cannot be determined.\n *\n * @param {IncomingMessage} req\n * @return {string}\n * @private\n */\n\nfunction getResourceName (req) {\n  try {\n    return parseUrl.original(req).pathname\n  } catch (e) {\n    return 'resource'\n  }\n}\n\n/**\n * Get status code from response.\n *\n * @param {OutgoingMessage} res\n * @return {number}\n * @private\n */\n\nfunction getResponseStatusCode (res) {\n  var status = res.statusCode\n\n  // default status code to 500 if outside valid range\n  if (typeof status !== 'number' || status < 400 || status > 599) {\n    status = 500\n  }\n\n  return status\n}\n\n/**\n * Send response.\n *\n * @param {IncomingMessage} req\n * @param {OutgoingMessage} res\n * @param {number} status\n * @param {object} headers\n * @param {string} message\n * @private\n */\n\nfunction send (req, res, status, headers, message) {\n  function write () {\n    // response body\n    var body = createHtmlDocument(message)\n\n    // response status\n    res.statusCode = status\n\n    if (req.httpVersionMajor < 2) {\n      res.statusMessage = statuses.message[status]\n    }\n\n    // remove any content headers\n    res.removeHeader('Content-Encoding')\n    res.removeHeader('Content-Language')\n    res.removeHeader('Content-Range')\n\n    // response headers\n    for (const [key, value] of Object.entries(headers ?? {})) {\n      res.setHeader(key, value)\n    }\n\n    // security headers\n    res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n    res.setHeader('X-Content-Type-Options', 'nosniff')\n\n    // standard headers\n    res.setHeader('Content-Type', 'text/html; charset=utf-8')\n    res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'))\n\n    if (req.method === 'HEAD') {\n      res.end()\n      return\n    }\n\n    res.end(body, 'utf8')\n  }\n\n  if (isFinished(req)) {\n    write()\n    return\n  }\n\n  // unpipe everything from the request\n  req.unpipe()\n\n  // flush the request\n  onFinished(req, write)\n  req.resume()\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('express:view');\nvar path = require('node:path');\nvar fs = require('node:fs');\n\n/**\n * Module variables.\n * @private\n */\n\nvar dirname = path.dirname;\nvar basename = path.basename;\nvar extname = path.extname;\nvar join = path.join;\nvar resolve = path.resolve;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = View;\n\n/**\n * Initialize a new `View` with the given `name`.\n *\n * Options:\n *\n *   - `defaultEngine` the default template engine name\n *   - `engines` template engine require() cache\n *   - `root` root path for view lookup\n *\n * @param {string} name\n * @param {object} options\n * @public\n */\n\nfunction View(name, options) {\n  var opts = options || {};\n\n  this.defaultEngine = opts.defaultEngine;\n  this.ext = extname(name);\n  this.name = name;\n  this.root = opts.root;\n\n  if (!this.ext && !this.defaultEngine) {\n    throw new Error('No default engine was specified and no extension was provided.');\n  }\n\n  var fileName = name;\n\n  if (!this.ext) {\n    // get extension from default engine name\n    this.ext = this.defaultEngine[0] !== '.'\n      ? '.' + this.defaultEngine\n      : this.defaultEngine;\n\n    fileName += this.ext;\n  }\n\n  if (!opts.engines[this.ext]) {\n    // load engine\n    var mod = this.ext.slice(1)\n    debug('require \"%s\"', mod)\n\n    // default engine export\n    var fn = require(mod).__express\n\n    if (typeof fn !== 'function') {\n      throw new Error('Module \"' + mod + '\" does not provide a view engine.')\n    }\n\n    opts.engines[this.ext] = fn\n  }\n\n  // store loaded engine\n  this.engine = opts.engines[this.ext];\n\n  // lookup path\n  this.path = this.lookup(fileName);\n}\n\n/**\n * Lookup view by the given `name`\n *\n * @param {string} name\n * @private\n */\n\nView.prototype.lookup = function lookup(name) {\n  var path;\n  var roots = [].concat(this.root);\n\n  debug('lookup \"%s\"', name);\n\n  for (var i = 0; i < roots.length && !path; i++) {\n    var root = roots[i];\n\n    // resolve the path\n    var loc = resolve(root, name);\n    var dir = dirname(loc);\n    var file = basename(loc);\n\n    // resolve the file\n    path = this.resolve(dir, file);\n  }\n\n  return path;\n};\n\n/**\n * Render with the given options.\n *\n * @param {object} options\n * @param {function} callback\n * @private\n */\n\nView.prototype.render = function render(options, callback) {\n  var sync = true;\n\n  debug('render \"%s\"', this.path);\n\n  // render, normalizing sync callbacks\n  this.engine(this.path, options, function onRender() {\n    if (!sync) {\n      return callback.apply(this, arguments);\n    }\n\n    // copy arguments\n    var args = new Array(arguments.length);\n    var cntx = this;\n\n    for (var i = 0; i < arguments.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    // force callback to be async\n    return process.nextTick(function renderTick() {\n      return callback.apply(cntx, args);\n    });\n  });\n\n  sync = false;\n};\n\n/**\n * Resolve the file within the given directory.\n *\n * @param {string} dir\n * @param {string} file\n * @private\n */\n\nView.prototype.resolve = function resolve(dir, file) {\n  var ext = this.ext;\n\n  // <path>.<ext>\n  var path = join(dir, file);\n  var stat = tryStat(path);\n\n  if (stat && stat.isFile()) {\n    return path;\n  }\n\n  // <path>/index.<ext>\n  path = join(dir, basename(file, ext), 'index' + ext);\n  stat = tryStat(path);\n\n  if (stat && stat.isFile()) {\n    return path;\n  }\n};\n\n/**\n * Return a stat, maybe.\n *\n * @param {string} path\n * @return {fs.Stats}\n * @private\n */\n\nfunction tryStat(path) {\n  debug('stat \"%s\"', path);\n\n  try {\n    return fs.statSync(path);\n  } catch (e) {\n    return undefined;\n  }\n}\n", "/*!\n * etag\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = etag\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar crypto = require('crypto')\nvar Stats = require('fs').Stats\n\n/**\n * Module variables.\n * @private\n */\n\nvar toString = Object.prototype.toString\n\n/**\n * Generate an entity tag.\n *\n * @param {Buffer|string} entity\n * @return {string}\n * @private\n */\n\nfunction entitytag (entity) {\n  if (entity.length === 0) {\n    // fast-path empty\n    return '\"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk\"'\n  }\n\n  // compute hash of entity\n  var hash = crypto\n    .createHash('sha1')\n    .update(entity, 'utf8')\n    .digest('base64')\n    .substring(0, 27)\n\n  // compute length of entity\n  var len = typeof entity === 'string'\n    ? Buffer.byteLength(entity, 'utf8')\n    : entity.length\n\n  return '\"' + len.toString(16) + '-' + hash + '\"'\n}\n\n/**\n * Create a simple ETag.\n *\n * @param {string|Buffer|Stats} entity\n * @param {object} [options]\n * @param {boolean} [options.weak]\n * @return {String}\n * @public\n */\n\nfunction etag (entity, options) {\n  if (entity == null) {\n    throw new TypeError('argument entity is required')\n  }\n\n  // support fs.Stats object\n  var isStats = isstats(entity)\n  var weak = options && typeof options.weak === 'boolean'\n    ? options.weak\n    : isStats\n\n  // validate argument\n  if (!isStats && typeof entity !== 'string' && !Buffer.isBuffer(entity)) {\n    throw new TypeError('argument entity must be string, Buffer, or fs.Stats')\n  }\n\n  // generate entity tag\n  var tag = isStats\n    ? stattag(entity)\n    : entitytag(entity)\n\n  return weak\n    ? 'W/' + tag\n    : tag\n}\n\n/**\n * Determine if object is a Stats object.\n *\n * @param {object} obj\n * @return {boolean}\n * @api private\n */\n\nfunction isstats (obj) {\n  // genuine fs.Stats\n  if (typeof Stats === 'function' && obj instanceof Stats) {\n    return true\n  }\n\n  // quack quack\n  return obj && typeof obj === 'object' &&\n    'ctime' in obj && toString.call(obj.ctime) === '[object Date]' &&\n    'mtime' in obj && toString.call(obj.mtime) === '[object Date]' &&\n    'ino' in obj && typeof obj.ino === 'number' &&\n    'size' in obj && typeof obj.size === 'number'\n}\n\n/**\n * Generate a tag for a stat.\n *\n * @param {object} stat\n * @return {string}\n * @private\n */\n\nfunction stattag (stat) {\n  var mtime = stat.mtime.getTime().toString(16)\n  var size = stat.size.toString(16)\n\n  return '\"' + size + '-' + mtime + '\"'\n}\n", "/*!\n * forwarded\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = forwarded\n\n/**\n * Get all addresses in the request, using the `X-Forwarded-For` header.\n *\n * @param {object} req\n * @return {array}\n * @public\n */\n\nfunction forwarded (req) {\n  if (!req) {\n    throw new TypeError('argument req is required')\n  }\n\n  // simple header parsing\n  var proxyAddrs = parse(req.headers['x-forwarded-for'] || '')\n  var socketAddr = getSocketAddr(req)\n  var addrs = [socketAddr].concat(proxyAddrs)\n\n  // return all addresses\n  return addrs\n}\n\n/**\n * Get the socket address for a request.\n *\n * @param {object} req\n * @return {string}\n * @private\n */\n\nfunction getSocketAddr (req) {\n  return req.socket\n    ? req.socket.remoteAddress\n    : req.connection.remoteAddress\n}\n\n/**\n * Parse the X-Forwarded-For header.\n *\n * @param {string} header\n * @private\n */\n\nfunction parse (header) {\n  var end = header.length\n  var list = []\n  var start = header.length\n\n  // gather addresses, backwards\n  for (var i = header.length - 1; i >= 0; i--) {\n    switch (header.charCodeAt(i)) {\n      case 0x20: /*   */\n        if (start === end) {\n          start = end = i\n        }\n        break\n      case 0x2c: /* , */\n        if (start !== end) {\n          list.push(header.substring(start, end))\n        }\n        start = end = i\n        break\n      default:\n        start = i\n        break\n    }\n  }\n\n  // final address\n  if (start !== end) {\n    list.push(header.substring(start, end))\n  }\n\n  return list\n}\n", "(function() {\n  var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex;\n\n  ipaddr = {};\n\n  root = this;\n\n  if ((typeof module !== \"undefined\" && module !== null) && module.exports) {\n    module.exports = ipaddr;\n  } else {\n    root['ipaddr'] = ipaddr;\n  }\n\n  matchCIDR = function(first, second, partSize, cidrBits) {\n    var part, shift;\n    if (first.length !== second.length) {\n      throw new Error(\"ipaddr: cannot match CIDR for objects with different lengths\");\n    }\n    part = 0;\n    while (cidrBits > 0) {\n      shift = partSize - cidrBits;\n      if (shift < 0) {\n        shift = 0;\n      }\n      if (first[part] >> shift !== second[part] >> shift) {\n        return false;\n      }\n      cidrBits -= partSize;\n      part += 1;\n    }\n    return true;\n  };\n\n  ipaddr.subnetMatch = function(address, rangeList, defaultName) {\n    var k, len, rangeName, rangeSubnets, subnet;\n    if (defaultName == null) {\n      defaultName = 'unicast';\n    }\n    for (rangeName in rangeList) {\n      rangeSubnets = rangeList[rangeName];\n      if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) {\n        rangeSubnets = [rangeSubnets];\n      }\n      for (k = 0, len = rangeSubnets.length; k < len; k++) {\n        subnet = rangeSubnets[k];\n        if (address.kind() === subnet[0].kind()) {\n          if (address.match.apply(address, subnet)) {\n            return rangeName;\n          }\n        }\n      }\n    }\n    return defaultName;\n  };\n\n  ipaddr.IPv4 = (function() {\n    function IPv4(octets) {\n      var k, len, octet;\n      if (octets.length !== 4) {\n        throw new Error(\"ipaddr: ipv4 octet count should be 4\");\n      }\n      for (k = 0, len = octets.length; k < len; k++) {\n        octet = octets[k];\n        if (!((0 <= octet && octet <= 255))) {\n          throw new Error(\"ipaddr: ipv4 octet should fit in 8 bits\");\n        }\n      }\n      this.octets = octets;\n    }\n\n    IPv4.prototype.kind = function() {\n      return 'ipv4';\n    };\n\n    IPv4.prototype.toString = function() {\n      return this.octets.join(\".\");\n    };\n\n    IPv4.prototype.toNormalizedString = function() {\n      return this.toString();\n    };\n\n    IPv4.prototype.toByteArray = function() {\n      return this.octets.slice(0);\n    };\n\n    IPv4.prototype.match = function(other, cidrRange) {\n      var ref;\n      if (cidrRange === void 0) {\n        ref = other, other = ref[0], cidrRange = ref[1];\n      }\n      if (other.kind() !== 'ipv4') {\n        throw new Error(\"ipaddr: cannot match ipv4 address with non-ipv4 one\");\n      }\n      return matchCIDR(this.octets, other.octets, 8, cidrRange);\n    };\n\n    IPv4.prototype.SpecialRanges = {\n      unspecified: [[new IPv4([0, 0, 0, 0]), 8]],\n      broadcast: [[new IPv4([255, 255, 255, 255]), 32]],\n      multicast: [[new IPv4([224, 0, 0, 0]), 4]],\n      linkLocal: [[new IPv4([169, 254, 0, 0]), 16]],\n      loopback: [[new IPv4([127, 0, 0, 0]), 8]],\n      carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]],\n      \"private\": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]],\n      reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]]\n    };\n\n    IPv4.prototype.range = function() {\n      return ipaddr.subnetMatch(this, this.SpecialRanges);\n    };\n\n    IPv4.prototype.toIPv4MappedAddress = function() {\n      return ipaddr.IPv6.parse(\"::ffff:\" + (this.toString()));\n    };\n\n    IPv4.prototype.prefixLengthFromSubnetMask = function() {\n      var cidr, i, k, octet, stop, zeros, zerotable;\n      zerotable = {\n        0: 8,\n        128: 7,\n        192: 6,\n        224: 5,\n        240: 4,\n        248: 3,\n        252: 2,\n        254: 1,\n        255: 0\n      };\n      cidr = 0;\n      stop = false;\n      for (i = k = 3; k >= 0; i = k += -1) {\n        octet = this.octets[i];\n        if (octet in zerotable) {\n          zeros = zerotable[octet];\n          if (stop && zeros !== 0) {\n            return null;\n          }\n          if (zeros !== 8) {\n            stop = true;\n          }\n          cidr += zeros;\n        } else {\n          return null;\n        }\n      }\n      return 32 - cidr;\n    };\n\n    return IPv4;\n\n  })();\n\n  ipv4Part = \"(0?\\\\d+|0x[a-f0-9]+)\";\n\n  ipv4Regexes = {\n    fourOctet: new RegExp(\"^\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"$\", 'i'),\n    longValue: new RegExp(\"^\" + ipv4Part + \"$\", 'i')\n  };\n\n  ipaddr.IPv4.parser = function(string) {\n    var match, parseIntAuto, part, shift, value;\n    parseIntAuto = function(string) {\n      if (string[0] === \"0\" && string[1] !== \"x\") {\n        return parseInt(string, 8);\n      } else {\n        return parseInt(string);\n      }\n    };\n    if (match = string.match(ipv4Regexes.fourOctet)) {\n      return (function() {\n        var k, len, ref, results;\n        ref = match.slice(1, 6);\n        results = [];\n        for (k = 0, len = ref.length; k < len; k++) {\n          part = ref[k];\n          results.push(parseIntAuto(part));\n        }\n        return results;\n      })();\n    } else if (match = string.match(ipv4Regexes.longValue)) {\n      value = parseIntAuto(match[1]);\n      if (value > 0xffffffff || value < 0) {\n        throw new Error(\"ipaddr: address outside defined range\");\n      }\n      return ((function() {\n        var k, results;\n        results = [];\n        for (shift = k = 0; k <= 24; shift = k += 8) {\n          results.push((value >> shift) & 0xff);\n        }\n        return results;\n      })()).reverse();\n    } else {\n      return null;\n    }\n  };\n\n  ipaddr.IPv6 = (function() {\n    function IPv6(parts, zoneId) {\n      var i, k, l, len, part, ref;\n      if (parts.length === 16) {\n        this.parts = [];\n        for (i = k = 0; k <= 14; i = k += 2) {\n          this.parts.push((parts[i] << 8) | parts[i + 1]);\n        }\n      } else if (parts.length === 8) {\n        this.parts = parts;\n      } else {\n        throw new Error(\"ipaddr: ipv6 part count should be 8 or 16\");\n      }\n      ref = this.parts;\n      for (l = 0, len = ref.length; l < len; l++) {\n        part = ref[l];\n        if (!((0 <= part && part <= 0xffff))) {\n          throw new Error(\"ipaddr: ipv6 part should fit in 16 bits\");\n        }\n      }\n      if (zoneId) {\n        this.zoneId = zoneId;\n      }\n    }\n\n    IPv6.prototype.kind = function() {\n      return 'ipv6';\n    };\n\n    IPv6.prototype.toString = function() {\n      return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, '::');\n    };\n\n    IPv6.prototype.toRFC5952String = function() {\n      var bestMatchIndex, bestMatchLength, match, regex, string;\n      regex = /((^|:)(0(:|$)){2,})/g;\n      string = this.toNormalizedString();\n      bestMatchIndex = 0;\n      bestMatchLength = -1;\n      while ((match = regex.exec(string))) {\n        if (match[0].length > bestMatchLength) {\n          bestMatchIndex = match.index;\n          bestMatchLength = match[0].length;\n        }\n      }\n      if (bestMatchLength < 0) {\n        return string;\n      }\n      return string.substring(0, bestMatchIndex) + '::' + string.substring(bestMatchIndex + bestMatchLength);\n    };\n\n    IPv6.prototype.toByteArray = function() {\n      var bytes, k, len, part, ref;\n      bytes = [];\n      ref = this.parts;\n      for (k = 0, len = ref.length; k < len; k++) {\n        part = ref[k];\n        bytes.push(part >> 8);\n        bytes.push(part & 0xff);\n      }\n      return bytes;\n    };\n\n    IPv6.prototype.toNormalizedString = function() {\n      var addr, part, suffix;\n      addr = ((function() {\n        var k, len, ref, results;\n        ref = this.parts;\n        results = [];\n        for (k = 0, len = ref.length; k < len; k++) {\n          part = ref[k];\n          results.push(part.toString(16));\n        }\n        return results;\n      }).call(this)).join(\":\");\n      suffix = '';\n      if (this.zoneId) {\n        suffix = '%' + this.zoneId;\n      }\n      return addr + suffix;\n    };\n\n    IPv6.prototype.toFixedLengthString = function() {\n      var addr, part, suffix;\n      addr = ((function() {\n        var k, len, ref, results;\n        ref = this.parts;\n        results = [];\n        for (k = 0, len = ref.length; k < len; k++) {\n          part = ref[k];\n          results.push(part.toString(16).padStart(4, '0'));\n        }\n        return results;\n      }).call(this)).join(\":\");\n      suffix = '';\n      if (this.zoneId) {\n        suffix = '%' + this.zoneId;\n      }\n      return addr + suffix;\n    };\n\n    IPv6.prototype.match = function(other, cidrRange) {\n      var ref;\n      if (cidrRange === void 0) {\n        ref = other, other = ref[0], cidrRange = ref[1];\n      }\n      if (other.kind() !== 'ipv6') {\n        throw new Error(\"ipaddr: cannot match ipv6 address with non-ipv6 one\");\n      }\n      return matchCIDR(this.parts, other.parts, 16, cidrRange);\n    };\n\n    IPv6.prototype.SpecialRanges = {\n      unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128],\n      linkLocal: [new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10],\n      multicast: [new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8],\n      loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128],\n      uniqueLocal: [new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7],\n      ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96],\n      rfc6145: [new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96],\n      rfc6052: [new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96],\n      '6to4': [new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16],\n      teredo: [new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32],\n      reserved: [[new IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32]]\n    };\n\n    IPv6.prototype.range = function() {\n      return ipaddr.subnetMatch(this, this.SpecialRanges);\n    };\n\n    IPv6.prototype.isIPv4MappedAddress = function() {\n      return this.range() === 'ipv4Mapped';\n    };\n\n    IPv6.prototype.toIPv4Address = function() {\n      var high, low, ref;\n      if (!this.isIPv4MappedAddress()) {\n        throw new Error(\"ipaddr: trying to convert a generic ipv6 address to ipv4\");\n      }\n      ref = this.parts.slice(-2), high = ref[0], low = ref[1];\n      return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]);\n    };\n\n    IPv6.prototype.prefixLengthFromSubnetMask = function() {\n      var cidr, i, k, part, stop, zeros, zerotable;\n      zerotable = {\n        0: 16,\n        32768: 15,\n        49152: 14,\n        57344: 13,\n        61440: 12,\n        63488: 11,\n        64512: 10,\n        65024: 9,\n        65280: 8,\n        65408: 7,\n        65472: 6,\n        65504: 5,\n        65520: 4,\n        65528: 3,\n        65532: 2,\n        65534: 1,\n        65535: 0\n      };\n      cidr = 0;\n      stop = false;\n      for (i = k = 7; k >= 0; i = k += -1) {\n        part = this.parts[i];\n        if (part in zerotable) {\n          zeros = zerotable[part];\n          if (stop && zeros !== 0) {\n            return null;\n          }\n          if (zeros !== 16) {\n            stop = true;\n          }\n          cidr += zeros;\n        } else {\n          return null;\n        }\n      }\n      return 128 - cidr;\n    };\n\n    return IPv6;\n\n  })();\n\n  ipv6Part = \"(?:[0-9a-f]+::?)+\";\n\n  zoneIndex = \"%[0-9a-z]{1,}\";\n\n  ipv6Regexes = {\n    zoneIndex: new RegExp(zoneIndex, 'i'),\n    \"native\": new RegExp(\"^(::)?(\" + ipv6Part + \")?([0-9a-f]+)?(::)?(\" + zoneIndex + \")?$\", 'i'),\n    transitional: new RegExp((\"^((?:\" + ipv6Part + \")|(?:::)(?:\" + ipv6Part + \")?)\") + (ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part) + (\"(\" + zoneIndex + \")?$\"), 'i')\n  };\n\n  expandIPv6 = function(string, parts) {\n    var colonCount, lastColon, part, replacement, replacementCount, zoneId;\n    if (string.indexOf('::') !== string.lastIndexOf('::')) {\n      return null;\n    }\n    zoneId = (string.match(ipv6Regexes['zoneIndex']) || [])[0];\n    if (zoneId) {\n      zoneId = zoneId.substring(1);\n      string = string.replace(/%.+$/, '');\n    }\n    colonCount = 0;\n    lastColon = -1;\n    while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) {\n      colonCount++;\n    }\n    if (string.substr(0, 2) === '::') {\n      colonCount--;\n    }\n    if (string.substr(-2, 2) === '::') {\n      colonCount--;\n    }\n    if (colonCount > parts) {\n      return null;\n    }\n    replacementCount = parts - colonCount;\n    replacement = ':';\n    while (replacementCount--) {\n      replacement += '0:';\n    }\n    string = string.replace('::', replacement);\n    if (string[0] === ':') {\n      string = string.slice(1);\n    }\n    if (string[string.length - 1] === ':') {\n      string = string.slice(0, -1);\n    }\n    parts = (function() {\n      var k, len, ref, results;\n      ref = string.split(\":\");\n      results = [];\n      for (k = 0, len = ref.length; k < len; k++) {\n        part = ref[k];\n        results.push(parseInt(part, 16));\n      }\n      return results;\n    })();\n    return {\n      parts: parts,\n      zoneId: zoneId\n    };\n  };\n\n  ipaddr.IPv6.parser = function(string) {\n    var addr, k, len, match, octet, octets, zoneId;\n    if (ipv6Regexes['native'].test(string)) {\n      return expandIPv6(string, 8);\n    } else if (match = string.match(ipv6Regexes['transitional'])) {\n      zoneId = match[6] || '';\n      addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6);\n      if (addr.parts) {\n        octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])];\n        for (k = 0, len = octets.length; k < len; k++) {\n          octet = octets[k];\n          if (!((0 <= octet && octet <= 255))) {\n            return null;\n          }\n        }\n        addr.parts.push(octets[0] << 8 | octets[1]);\n        addr.parts.push(octets[2] << 8 | octets[3]);\n        return {\n          parts: addr.parts,\n          zoneId: addr.zoneId\n        };\n      }\n    }\n    return null;\n  };\n\n  ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) {\n    return this.parser(string) !== null;\n  };\n\n  ipaddr.IPv4.isValid = function(string) {\n    var e;\n    try {\n      new this(this.parser(string));\n      return true;\n    } catch (error1) {\n      e = error1;\n      return false;\n    }\n  };\n\n  ipaddr.IPv4.isValidFourPartDecimal = function(string) {\n    if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){3}$/)) {\n      return true;\n    } else {\n      return false;\n    }\n  };\n\n  ipaddr.IPv6.isValid = function(string) {\n    var addr, e;\n    if (typeof string === \"string\" && string.indexOf(\":\") === -1) {\n      return false;\n    }\n    try {\n      addr = this.parser(string);\n      new this(addr.parts, addr.zoneId);\n      return true;\n    } catch (error1) {\n      e = error1;\n      return false;\n    }\n  };\n\n  ipaddr.IPv4.parse = function(string) {\n    var parts;\n    parts = this.parser(string);\n    if (parts === null) {\n      throw new Error(\"ipaddr: string is not formatted like ip address\");\n    }\n    return new this(parts);\n  };\n\n  ipaddr.IPv6.parse = function(string) {\n    var addr;\n    addr = this.parser(string);\n    if (addr.parts === null) {\n      throw new Error(\"ipaddr: string is not formatted like ip address\");\n    }\n    return new this(addr.parts, addr.zoneId);\n  };\n\n  ipaddr.IPv4.parseCIDR = function(string) {\n    var maskLength, match, parsed;\n    if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n      maskLength = parseInt(match[2]);\n      if (maskLength >= 0 && maskLength <= 32) {\n        parsed = [this.parse(match[1]), maskLength];\n        Object.defineProperty(parsed, 'toString', {\n          value: function() {\n            return this.join('/');\n          }\n        });\n        return parsed;\n      }\n    }\n    throw new Error(\"ipaddr: string is not formatted like an IPv4 CIDR range\");\n  };\n\n  ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) {\n    var filledOctetCount, j, octets;\n    prefix = parseInt(prefix);\n    if (prefix < 0 || prefix > 32) {\n      throw new Error('ipaddr: invalid IPv4 prefix length');\n    }\n    octets = [0, 0, 0, 0];\n    j = 0;\n    filledOctetCount = Math.floor(prefix / 8);\n    while (j < filledOctetCount) {\n      octets[j] = 255;\n      j++;\n    }\n    if (filledOctetCount < 4) {\n      octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - (prefix % 8);\n    }\n    return new this(octets);\n  };\n\n  ipaddr.IPv4.broadcastAddressFromCIDR = function(string) {\n    var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n    try {\n      cidr = this.parseCIDR(string);\n      ipInterfaceOctets = cidr[0].toByteArray();\n      subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n      octets = [];\n      i = 0;\n      while (i < 4) {\n        octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255);\n        i++;\n      }\n      return new this(octets);\n    } catch (error1) {\n      error = error1;\n      throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n    }\n  };\n\n  ipaddr.IPv4.networkAddressFromCIDR = function(string) {\n    var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n    try {\n      cidr = this.parseCIDR(string);\n      ipInterfaceOctets = cidr[0].toByteArray();\n      subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n      octets = [];\n      i = 0;\n      while (i < 4) {\n        octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10));\n        i++;\n      }\n      return new this(octets);\n    } catch (error1) {\n      error = error1;\n      throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n    }\n  };\n\n  ipaddr.IPv6.parseCIDR = function(string) {\n    var maskLength, match, parsed;\n    if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n      maskLength = parseInt(match[2]);\n      if (maskLength >= 0 && maskLength <= 128) {\n        parsed = [this.parse(match[1]), maskLength];\n        Object.defineProperty(parsed, 'toString', {\n          value: function() {\n            return this.join('/');\n          }\n        });\n        return parsed;\n      }\n    }\n    throw new Error(\"ipaddr: string is not formatted like an IPv6 CIDR range\");\n  };\n\n  ipaddr.isValid = function(string) {\n    return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string);\n  };\n\n  ipaddr.parse = function(string) {\n    if (ipaddr.IPv6.isValid(string)) {\n      return ipaddr.IPv6.parse(string);\n    } else if (ipaddr.IPv4.isValid(string)) {\n      return ipaddr.IPv4.parse(string);\n    } else {\n      throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 format\");\n    }\n  };\n\n  ipaddr.parseCIDR = function(string) {\n    var e;\n    try {\n      return ipaddr.IPv6.parseCIDR(string);\n    } catch (error1) {\n      e = error1;\n      try {\n        return ipaddr.IPv4.parseCIDR(string);\n      } catch (error1) {\n        e = error1;\n        throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 CIDR format\");\n      }\n    }\n  };\n\n  ipaddr.fromByteArray = function(bytes) {\n    var length;\n    length = bytes.length;\n    if (length === 4) {\n      return new ipaddr.IPv4(bytes);\n    } else if (length === 16) {\n      return new ipaddr.IPv6(bytes);\n    } else {\n      throw new Error(\"ipaddr: the binary input is neither an IPv6 nor IPv4 address\");\n    }\n  };\n\n  ipaddr.process = function(string) {\n    var addr;\n    addr = this.parse(string);\n    if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) {\n      return addr.toIPv4Address();\n    } else {\n      return addr;\n    }\n  };\n\n}).call(this);\n", "/*!\n * proxy-addr\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = proxyaddr\nmodule.exports.all = alladdrs\nmodule.exports.compile = compile\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar forwarded = require('forwarded')\nvar ipaddr = require('ipaddr.js')\n\n/**\n * Variables.\n * @private\n */\n\nvar DIGIT_REGEXP = /^[0-9]+$/\nvar isip = ipaddr.isValid\nvar parseip = ipaddr.parse\n\n/**\n * Pre-defined IP ranges.\n * @private\n */\n\nvar IP_RANGES = {\n  linklocal: ['169.254.0.0/16', 'fe80::/10'],\n  loopback: ['127.0.0.1/8', '::1/128'],\n  uniquelocal: ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', 'fc00::/7']\n}\n\n/**\n * Get all addresses in the request, optionally stopping\n * at the first untrusted.\n *\n * @param {Object} request\n * @param {Function|Array|String} [trust]\n * @public\n */\n\nfunction alladdrs (req, trust) {\n  // get addresses\n  var addrs = forwarded(req)\n\n  if (!trust) {\n    // Return all addresses\n    return addrs\n  }\n\n  if (typeof trust !== 'function') {\n    trust = compile(trust)\n  }\n\n  for (var i = 0; i < addrs.length - 1; i++) {\n    if (trust(addrs[i], i)) continue\n\n    addrs.length = i + 1\n  }\n\n  return addrs\n}\n\n/**\n * Compile argument into trust function.\n *\n * @param {Array|String} val\n * @private\n */\n\nfunction compile (val) {\n  if (!val) {\n    throw new TypeError('argument is required')\n  }\n\n  var trust\n\n  if (typeof val === 'string') {\n    trust = [val]\n  } else if (Array.isArray(val)) {\n    trust = val.slice()\n  } else {\n    throw new TypeError('unsupported trust argument')\n  }\n\n  for (var i = 0; i < trust.length; i++) {\n    val = trust[i]\n\n    if (!Object.prototype.hasOwnProperty.call(IP_RANGES, val)) {\n      continue\n    }\n\n    // Splice in pre-defined range\n    val = IP_RANGES[val]\n    trust.splice.apply(trust, [i, 1].concat(val))\n    i += val.length - 1\n  }\n\n  return compileTrust(compileRangeSubnets(trust))\n}\n\n/**\n * Compile `arr` elements into range subnets.\n *\n * @param {Array} arr\n * @private\n */\n\nfunction compileRangeSubnets (arr) {\n  var rangeSubnets = new Array(arr.length)\n\n  for (var i = 0; i < arr.length; i++) {\n    rangeSubnets[i] = parseipNotation(arr[i])\n  }\n\n  return rangeSubnets\n}\n\n/**\n * Compile range subnet array into trust function.\n *\n * @param {Array} rangeSubnets\n * @private\n */\n\nfunction compileTrust (rangeSubnets) {\n  // Return optimized function based on length\n  var len = rangeSubnets.length\n  return len === 0\n    ? trustNone\n    : len === 1\n      ? trustSingle(rangeSubnets[0])\n      : trustMulti(rangeSubnets)\n}\n\n/**\n * Parse IP notation string into range subnet.\n *\n * @param {String} note\n * @private\n */\n\nfunction parseipNotation (note) {\n  var pos = note.lastIndexOf('/')\n  var str = pos !== -1\n    ? note.substring(0, pos)\n    : note\n\n  if (!isip(str)) {\n    throw new TypeError('invalid IP address: ' + str)\n  }\n\n  var ip = parseip(str)\n\n  if (pos === -1 && ip.kind() === 'ipv6' && ip.isIPv4MappedAddress()) {\n    // Store as IPv4\n    ip = ip.toIPv4Address()\n  }\n\n  var max = ip.kind() === 'ipv6'\n    ? 128\n    : 32\n\n  var range = pos !== -1\n    ? note.substring(pos + 1, note.length)\n    : null\n\n  if (range === null) {\n    range = max\n  } else if (DIGIT_REGEXP.test(range)) {\n    range = parseInt(range, 10)\n  } else if (ip.kind() === 'ipv4' && isip(range)) {\n    range = parseNetmask(range)\n  } else {\n    range = null\n  }\n\n  if (range <= 0 || range > max) {\n    throw new TypeError('invalid range on address: ' + note)\n  }\n\n  return [ip, range]\n}\n\n/**\n * Parse netmask string into CIDR range.\n *\n * @param {String} netmask\n * @private\n */\n\nfunction parseNetmask (netmask) {\n  var ip = parseip(netmask)\n  var kind = ip.kind()\n\n  return kind === 'ipv4'\n    ? ip.prefixLengthFromSubnetMask()\n    : null\n}\n\n/**\n * Determine address of proxied request.\n *\n * @param {Object} request\n * @param {Function|Array|String} trust\n * @public\n */\n\nfunction proxyaddr (req, trust) {\n  if (!req) {\n    throw new TypeError('req argument is required')\n  }\n\n  if (!trust) {\n    throw new TypeError('trust argument is required')\n  }\n\n  var addrs = alladdrs(req, trust)\n  var addr = addrs[addrs.length - 1]\n\n  return addr\n}\n\n/**\n * Static trust function to trust nothing.\n *\n * @private\n */\n\nfunction trustNone () {\n  return false\n}\n\n/**\n * Compile trust function for multiple subnets.\n *\n * @param {Array} subnets\n * @private\n */\n\nfunction trustMulti (subnets) {\n  return function trust (addr) {\n    if (!isip(addr)) return false\n\n    var ip = parseip(addr)\n    var ipconv\n    var kind = ip.kind()\n\n    for (var i = 0; i < subnets.length; i++) {\n      var subnet = subnets[i]\n      var subnetip = subnet[0]\n      var subnetkind = subnetip.kind()\n      var subnetrange = subnet[1]\n      var trusted = ip\n\n      if (kind !== subnetkind) {\n        if (subnetkind === 'ipv4' && !ip.isIPv4MappedAddress()) {\n          // Incompatible IP addresses\n          continue\n        }\n\n        if (!ipconv) {\n          // Convert IP to match subnet IP kind\n          ipconv = subnetkind === 'ipv4'\n            ? ip.toIPv4Address()\n            : ip.toIPv4MappedAddress()\n        }\n\n        trusted = ipconv\n      }\n\n      if (trusted.match(subnetip, subnetrange)) {\n        return true\n      }\n    }\n\n    return false\n  }\n}\n\n/**\n * Compile trust function for single subnet.\n *\n * @param {Object} subnet\n * @private\n */\n\nfunction trustSingle (subnet) {\n  var subnetip = subnet[0]\n  var subnetkind = subnetip.kind()\n  var subnetisipv4 = subnetkind === 'ipv4'\n  var subnetrange = subnet[1]\n\n  return function trust (addr) {\n    if (!isip(addr)) return false\n\n    var ip = parseip(addr)\n    var kind = ip.kind()\n\n    if (kind !== subnetkind) {\n      if (subnetisipv4 && !ip.isIPv4MappedAddress()) {\n        // Incompatible IP addresses\n        return false\n      }\n\n      // Convert IP to match subnet IP kind\n      ip = subnetisipv4\n        ? ip.toIPv4Address()\n        : ip.toIPv4MappedAddress()\n    }\n\n    return ip.match(subnetip, subnetrange)\n  }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @api private\n */\n\nvar { METHODS } = require('node:http');\nvar contentType = require('content-type');\nvar etag = require('etag');\nvar mime = require('mime-types')\nvar proxyaddr = require('proxy-addr');\nvar qs = require('qs');\nvar querystring = require('node:querystring');\nconst { Buffer } = require('node:buffer');\n\n\n/**\n * A list of lowercased HTTP methods that are supported by Node.js.\n * @api private\n */\nexports.methods = METHODS.map((method) => method.toLowerCase());\n\n/**\n * Return strong ETag for `body`.\n *\n * @param {String|Buffer} body\n * @param {String} [encoding]\n * @return {String}\n * @api private\n */\n\nexports.etag = createETagGenerator({ weak: false })\n\n/**\n * Return weak ETag for `body`.\n *\n * @param {String|Buffer} body\n * @param {String} [encoding]\n * @return {String}\n * @api private\n */\n\nexports.wetag = createETagGenerator({ weak: true })\n\n/**\n * Normalize the given `type`, for example \"html\" becomes \"text/html\".\n *\n * @param {String} type\n * @return {Object}\n * @api private\n */\n\nexports.normalizeType = function(type){\n  return ~type.indexOf('/')\n    ? acceptParams(type)\n    : { value: (mime.lookup(type) || 'application/octet-stream'), params: {} }\n};\n\n/**\n * Normalize `types`, for example \"html\" becomes \"text/html\".\n *\n * @param {Array} types\n * @return {Array}\n * @api private\n */\n\nexports.normalizeTypes = function(types) {\n  return types.map(exports.normalizeType);\n};\n\n\n/**\n * Parse accept params `str` returning an\n * object with `.value`, `.quality` and `.params`.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction acceptParams (str) {\n  var length = str.length;\n  var colonIndex = str.indexOf(';');\n  var index = colonIndex === -1 ? length : colonIndex;\n  var ret = { value: str.slice(0, index).trim(), quality: 1, params: {} };\n\n  while (index < length) {\n    var splitIndex = str.indexOf('=', index);\n    if (splitIndex === -1) break;\n\n    var colonIndex = str.indexOf(';', index);\n    var endIndex = colonIndex === -1 ? length : colonIndex;\n\n    if (splitIndex > endIndex) {\n      index = str.lastIndexOf(';', splitIndex - 1) + 1;\n      continue;\n    }\n\n    var key = str.slice(index, splitIndex).trim();\n    var value = str.slice(splitIndex + 1, endIndex).trim();\n\n    if (key === 'q') {\n      ret.quality = parseFloat(value);\n    } else {\n      ret.params[key] = value;\n    }\n\n    index = endIndex + 1;\n  }\n\n  return ret;\n}\n\n/**\n * Compile \"etag\" value to function.\n *\n * @param  {Boolean|String|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileETag = function(val) {\n  var fn;\n\n  if (typeof val === 'function') {\n    return val;\n  }\n\n  switch (val) {\n    case true:\n    case 'weak':\n      fn = exports.wetag;\n      break;\n    case false:\n      break;\n    case 'strong':\n      fn = exports.etag;\n      break;\n    default:\n      throw new TypeError('unknown value for etag function: ' + val);\n  }\n\n  return fn;\n}\n\n/**\n * Compile \"query parser\" value to function.\n *\n * @param  {String|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileQueryParser = function compileQueryParser(val) {\n  var fn;\n\n  if (typeof val === 'function') {\n    return val;\n  }\n\n  switch (val) {\n    case true:\n    case 'simple':\n      fn = querystring.parse;\n      break;\n    case false:\n      break;\n    case 'extended':\n      fn = parseExtendedQueryString;\n      break;\n    default:\n      throw new TypeError('unknown value for query parser function: ' + val);\n  }\n\n  return fn;\n}\n\n/**\n * Compile \"proxy trust\" value to function.\n *\n * @param  {Boolean|String|Number|Array|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileTrust = function(val) {\n  if (typeof val === 'function') return val;\n\n  if (val === true) {\n    // Support plain true/false\n    return function(){ return true };\n  }\n\n  if (typeof val === 'number') {\n    // Support trusting hop count\n    return function(a, i){ return i < val };\n  }\n\n  if (typeof val === 'string') {\n    // Support comma-separated values\n    val = val.split(',')\n      .map(function (v) { return v.trim() })\n  }\n\n  return proxyaddr.compile(val || []);\n}\n\n/**\n * Set the charset in a given Content-Type string.\n *\n * @param {String} type\n * @param {String} charset\n * @return {String}\n * @api private\n */\n\nexports.setCharset = function setCharset(type, charset) {\n  if (!type || !charset) {\n    return type;\n  }\n\n  // parse type\n  var parsed = contentType.parse(type);\n\n  // set charset\n  parsed.parameters.charset = charset;\n\n  // format type\n  return contentType.format(parsed);\n};\n\n/**\n * Create an ETag generator function, generating ETags with\n * the given options.\n *\n * @param {object} options\n * @return {function}\n * @private\n */\n\nfunction createETagGenerator (options) {\n  return function generateETag (body, encoding) {\n    var buf = !Buffer.isBuffer(body)\n      ? Buffer.from(body, encoding)\n      : body\n\n    return etag(buf, options)\n  }\n}\n\n/**\n * Parse an extended query string with qs.\n *\n * @param {String} str\n * @return {Object}\n * @private\n */\n\nfunction parseExtendedQueryString(str) {\n  return qs.parse(str, {\n    allowPrototypes: true\n  });\n}\n", "// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n  if (fn && cb) return wrappy(fn)(cb)\n\n  if (typeof fn !== 'function')\n    throw new TypeError('need wrapper function')\n\n  Object.keys(fn).forEach(function (k) {\n    wrapper[k] = fn[k]\n  })\n\n  return wrapper\n\n  function wrapper() {\n    var args = new Array(arguments.length)\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i]\n    }\n    var ret = fn.apply(this, args)\n    var cb = args[args.length-1]\n    if (typeof ret === 'function' && ret !== cb) {\n      Object.keys(cb).forEach(function (k) {\n        ret[k] = cb[k]\n      })\n    }\n    return ret\n  }\n}\n", "var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n  Object.defineProperty(Function.prototype, 'once', {\n    value: function () {\n      return once(this)\n    },\n    configurable: true\n  })\n\n  Object.defineProperty(Function.prototype, 'onceStrict', {\n    value: function () {\n      return onceStrict(this)\n    },\n    configurable: true\n  })\n})\n\nfunction once (fn) {\n  var f = function () {\n    if (f.called) return f.value\n    f.called = true\n    return f.value = fn.apply(this, arguments)\n  }\n  f.called = false\n  return f\n}\n\nfunction onceStrict (fn) {\n  var f = function () {\n    if (f.called)\n      throw new Error(f.onceError)\n    f.called = true\n    return f.value = fn.apply(this, arguments)\n  }\n  var name = fn.name || 'Function wrapped with `once`'\n  f.onceError = name + \" shouldn't be called more than once\"\n  f.called = false\n  return f\n}\n", "module.exports = isPromise;\nmodule.exports.default = isPromise;\n\nfunction isPromise(obj) {\n  return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n}\n", "const DEFAULT_DELIMITER = \"/\";\nconst NOOP_VALUE = (value: string) => value;\nconst ID_START = /^[$_\\p{ID_Start}]$/u;\nconst ID_CONTINUE = /^[$\\u200c\\u200d\\p{ID_Continue}]$/u;\nconst ID = /^[$_\\p{ID_Start}][$\\u200c\\u200d\\p{ID_Continue}]*$/u;\n\n/**\n * Encode a string into another string.\n */\nexport type Encode = (value: string) => string;\n\n/**\n * Decode a string into another string.\n */\nexport type Decode = (value: string) => string;\n\nexport interface ParseOptions {\n  /**\n   * A function for encoding input strings.\n   */\n  encodePath?: Encode;\n}\n\nexport interface PathToRegexpOptions {\n  /**\n   * Matches the path completely without trailing characters. (default: `true`)\n   */\n  end?: boolean;\n  /**\n   * Allows optional trailing delimiter to match. (default: `true`)\n   */\n  trailing?: boolean;\n  /**\n   * Match will be case sensitive. (default: `false`)\n   */\n  sensitive?: boolean;\n  /**\n   * The default delimiter for segments. (default: `'/'`)\n   */\n  delimiter?: string;\n}\n\nexport interface MatchOptions extends PathToRegexpOptions {\n  /**\n   * Function for decoding strings for params, or `false` to disable entirely. (default: `decodeURIComponent`)\n   */\n  decode?: Decode | false;\n}\n\nexport interface CompileOptions {\n  /**\n   * Function for encoding input strings for output into the path, or `false` to disable entirely. (default: `encodeURIComponent`)\n   */\n  encode?: Encode | false;\n  /**\n   * The default delimiter for segments. (default: `'/'`)\n   */\n  delimiter?: string;\n}\n\n/**\n * Escape text for stringify to path.\n */\nfunction escapeText(str: string) {\n  return str.replace(/[{}()\\[\\]+?!:*\\\\]/g, \"\\\\$&\");\n}\n\n/**\n * Escape a regular expression string.\n */\nfunction escape(str: string) {\n  return str.replace(/[.+*?^${}()[\\]|/\\\\]/g, \"\\\\$&\");\n}\n\n/**\n * Plain text.\n */\nexport interface Text {\n  type: \"text\";\n  value: string;\n}\n\n/**\n * A parameter designed to match arbitrary text within a segment.\n */\nexport interface Parameter {\n  type: \"param\";\n  name: string;\n}\n\n/**\n * A wildcard parameter designed to match multiple segments.\n */\nexport interface Wildcard {\n  type: \"wildcard\";\n  name: string;\n}\n\n/**\n * A set of possible tokens to expand when matching.\n */\nexport interface Group {\n  type: \"group\";\n  tokens: Token[];\n}\n\n/**\n * A token that corresponds with a regexp capture.\n */\nexport type Key = Parameter | Wildcard;\n\n/**\n * A sequence of `path-to-regexp` keys that match capturing groups.\n */\nexport type Keys = Array<Key>;\n\n/**\n * A sequence of path match characters.\n */\nexport type Token = Text | Parameter | Wildcard | Group;\n\n/**\n * Tokenized path instance.\n */\nexport class TokenData {\n  constructor(\n    public readonly tokens: Token[],\n    public readonly originalPath?: string,\n  ) {}\n}\n\n/**\n * ParseError is thrown when there is an error processing the path.\n */\nexport class PathError extends TypeError {\n  constructor(\n    message: string,\n    public readonly originalPath: string | undefined,\n  ) {\n    let text = message;\n    if (originalPath) text += `: ${originalPath}`;\n    text += `; visit https://git.new/pathToRegexpError for info`;\n    super(text);\n  }\n}\n\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str: string, options: ParseOptions = {}): TokenData {\n  const { encodePath = NOOP_VALUE } = options;\n  const chars = [...str];\n  let index = 0;\n\n  function consumeUntil(end: string): Token[] {\n    const output: Token[] = [];\n    let path = \"\";\n\n    function writePath() {\n      if (!path) return;\n      output.push({\n        type: \"text\",\n        value: encodePath(path),\n      });\n      path = \"\";\n    }\n\n    while (index < chars.length) {\n      const value = chars[index++];\n\n      if (value === end) {\n        writePath();\n        return output;\n      }\n\n      if (value === \"\\\\\") {\n        if (index === chars.length) {\n          throw new PathError(`Unexpected end after \\\\ at index ${index}`, str);\n        }\n\n        path += chars[index++];\n        continue;\n      }\n\n      if (value === \":\" || value === \"*\") {\n        const type = value === \":\" ? \"param\" : \"wildcard\";\n        let name = \"\";\n\n        if (ID_START.test(chars[index])) {\n          do {\n            name += chars[index++];\n          } while (ID_CONTINUE.test(chars[index]));\n        } else if (chars[index] === '\"') {\n          let quoteStart = index;\n\n          while (index < chars.length) {\n            if (chars[++index] === '\"') {\n              index++;\n              quoteStart = 0;\n              break;\n            }\n\n            // Increment over escape characters.\n            if (chars[index] === \"\\\\\") index++;\n\n            name += chars[index];\n          }\n\n          if (quoteStart) {\n            throw new PathError(\n              `Unterminated quote at index ${quoteStart}`,\n              str,\n            );\n          }\n        }\n\n        if (!name) {\n          throw new PathError(`Missing parameter name at index ${index}`, str);\n        }\n\n        writePath();\n        output.push({ type, name });\n        continue;\n      }\n\n      if (value === \"{\") {\n        writePath();\n        output.push({\n          type: \"group\",\n          tokens: consumeUntil(\"}\"),\n        });\n        continue;\n      }\n\n      if (\n        value === \"}\" ||\n        value === \"(\" ||\n        value === \")\" ||\n        value === \"[\" ||\n        value === \"]\" ||\n        value === \"+\" ||\n        value === \"?\" ||\n        value === \"!\"\n      ) {\n        throw new PathError(`Unexpected ${value} at index ${index - 1}`, str);\n      }\n\n      path += value;\n    }\n\n    if (end) {\n      throw new PathError(\n        `Unexpected end at index ${index}, expected ${end}`,\n        str,\n      );\n    }\n\n    writePath();\n    return output;\n  }\n\n  return new TokenData(consumeUntil(\"\"), str);\n}\n\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile<P extends ParamData = ParamData>(\n  path: Path,\n  options: CompileOptions & ParseOptions = {},\n) {\n  const { encode = encodeURIComponent, delimiter = DEFAULT_DELIMITER } =\n    options;\n  const data = typeof path === \"object\" ? path : parse(path, options);\n  const fn = tokensToFunction(data.tokens, delimiter, encode);\n\n  return function path(params: P = {} as P) {\n    const missing: string[] = [];\n    const path = fn(params, missing);\n\n    if (missing.length) {\n      throw new TypeError(`Missing parameters: ${missing.join(\", \")}`);\n    }\n\n    return path;\n  };\n}\n\nexport type ParamData = Partial<Record<string, string | string[]>>;\nexport type PathFunction<P extends ParamData> = (data?: P) => string;\n\n/**\n * Internal path builder function.\n */\ntype TokenEncoder = (data: ParamData, missing: string[]) => string;\n\nfunction tokensToFunction(\n  tokens: Token[],\n  delimiter: string,\n  encode: Encode | false,\n): TokenEncoder {\n  const encoders = tokens.map((token) =>\n    tokenToFunction(token, delimiter, encode),\n  );\n\n  return (data: ParamData, missing: string[]) => {\n    let result = \"\";\n\n    for (const encoder of encoders) {\n      result += encoder(data, missing);\n    }\n\n    return result;\n  };\n}\n\n/**\n * Convert a single token into a path building function.\n */\nfunction tokenToFunction(\n  token: Token,\n  delimiter: string,\n  encode: Encode | false,\n): TokenEncoder {\n  if (token.type === \"text\") return () => token.value;\n\n  if (token.type === \"group\") {\n    const fn = tokensToFunction(token.tokens, delimiter, encode);\n\n    return (data, missing) => {\n      const len = missing.length;\n      const value = fn(data, missing);\n      if (missing.length === len) return value;\n\n      missing.length = len; // Reset optional group.\n      return \"\";\n    };\n  }\n\n  const encodeValue = encode || NOOP_VALUE;\n\n  if (token.type === \"wildcard\" && encode !== false) {\n    return (data, missing) => {\n      const value = data[token.name];\n      if (value == null) {\n        missing.push(token.name);\n        return \"\";\n      }\n\n      if (!Array.isArray(value) || value.length === 0) {\n        throw new TypeError(`Expected \"${token.name}\" to be a non-empty array`);\n      }\n\n      let result = \"\";\n\n      for (let i = 0; i < value.length; i++) {\n        if (typeof value[i] !== \"string\") {\n          throw new TypeError(`Expected \"${token.name}/${i}\" to be a string`);\n        }\n\n        if (i > 0) result += delimiter;\n        result += encodeValue(value[i]);\n      }\n\n      return result;\n    };\n  }\n\n  return (data, missing) => {\n    const value = data[token.name];\n    if (value == null) {\n      missing.push(token.name);\n      return \"\";\n    }\n\n    if (typeof value !== \"string\") {\n      throw new TypeError(`Expected \"${token.name}\" to be a string`);\n    }\n\n    return encodeValue(value);\n  };\n}\n\n/**\n * A match result contains data about the path match.\n */\nexport interface MatchResult<P extends ParamData> {\n  path: string;\n  params: P;\n}\n\n/**\n * A match is either `false` (no match) or a match result.\n */\nexport type Match<P extends ParamData> = false | MatchResult<P>;\n\n/**\n * The match function takes a string and returns whether it matched the path.\n */\nexport type MatchFunction<P extends ParamData> = (path: string) => Match<P>;\n\n/**\n * Supported path types.\n */\nexport type Path = string | TokenData;\n\n/**\n * Transform a path into a match function.\n */\nexport function match<P extends ParamData>(\n  path: Path | Path[],\n  options: MatchOptions & ParseOptions = {},\n): MatchFunction<P> {\n  const { decode = decodeURIComponent, delimiter = DEFAULT_DELIMITER } =\n    options;\n  const { regexp, keys } = pathToRegexp(path, options);\n\n  const decoders = keys.map((key) => {\n    if (decode === false) return NOOP_VALUE;\n    if (key.type === \"param\") return decode;\n    return (value: string) => value.split(delimiter).map(decode);\n  });\n\n  return function match(input: string) {\n    const m = regexp.exec(input);\n    if (!m) return false;\n\n    const path = m[0];\n    const params = Object.create(null);\n\n    for (let i = 1; i < m.length; i++) {\n      if (m[i] === undefined) continue;\n\n      const key = keys[i - 1];\n      const decoder = decoders[i - 1];\n      params[key.name] = decoder(m[i]);\n    }\n\n    return { path, params };\n  };\n}\n\n/**\n * Transform a path into a regular expression and capture keys.\n */\nexport function pathToRegexp(\n  path: Path | Path[],\n  options: PathToRegexpOptions & ParseOptions = {},\n) {\n  const {\n    delimiter = DEFAULT_DELIMITER,\n    end = true,\n    sensitive = false,\n    trailing = true,\n  } = options;\n  const keys: Keys = [];\n  let source = \"\";\n  let combinations = 0;\n\n  function process(path: Path | Path[]) {\n    if (Array.isArray(path)) {\n      for (const p of path) process(p);\n      return;\n    }\n\n    const data = typeof path === \"object\" ? path : parse(path, options);\n    flatten(data.tokens, 0, [], (tokens) => {\n      if (combinations >= 256) {\n        throw new PathError(\"Too many path combinations\", data.originalPath);\n      }\n\n      if (combinations > 0) source += \"|\";\n      source += toRegExpSource(tokens, delimiter, keys, data.originalPath);\n      combinations++;\n    });\n  }\n\n  process(path);\n\n  let pattern = `^(?:${source})`;\n  if (trailing) pattern += \"(?:\" + escape(delimiter) + \"$)?\";\n  pattern += end ? \"$\" : \"(?=\" + escape(delimiter) + \"|$)\";\n\n  return { regexp: new RegExp(pattern, sensitive ? \"\" : \"i\"), keys };\n}\n\n/**\n * Generate a flat list of sequence tokens from the given tokens.\n */\nfunction flatten(\n  tokens: Token[],\n  index: number,\n  result: Exclude<Token, Group>[],\n  callback: (result: Exclude<Token, Group>[]) => void,\n): void {\n  while (index < tokens.length) {\n    const token = tokens[index++];\n\n    if (token.type === \"group\") {\n      const len = result.length;\n      flatten(token.tokens, 0, result, (seq) =>\n        flatten(tokens, index, seq, callback),\n      );\n      result.length = len;\n      continue;\n    }\n\n    result.push(token);\n  }\n\n  callback(result);\n}\n\n/**\n * Transform a flat sequence of tokens into a regular expression.\n */\nfunction toRegExpSource(\n  tokens: Exclude<Token, Group>[],\n  delimiter: string,\n  keys: Keys,\n  originalPath: string | undefined,\n): string {\n  let result = \"\";\n  let backtrack = \"\";\n  let wildcardBacktrack = \"\";\n  let prevCaptureType: 0 | 1 | 2 = 0;\n  let hasSegmentCapture = 0;\n  let index = 0;\n\n  function hasInSegment(index: number, type: Token[\"type\"]) {\n    while (index < tokens.length) {\n      const token = tokens[index++];\n      if (token.type === type) return true;\n      if (token.type === \"text\") {\n        if (token.value.includes(delimiter)) break;\n      }\n    }\n    return false;\n  }\n\n  function peekText(index: number) {\n    let result = \"\";\n    while (index < tokens.length) {\n      const token = tokens[index++];\n      if (token.type !== \"text\") break;\n      result += token.value;\n    }\n    return result;\n  }\n\n  while (index < tokens.length) {\n    const token = tokens[index++];\n\n    if (token.type === \"text\") {\n      result += escape(token.value);\n      backtrack += token.value;\n      if (prevCaptureType === 2) wildcardBacktrack += token.value;\n      if (token.value.includes(delimiter)) hasSegmentCapture = 0;\n      continue;\n    }\n\n    if (token.type === \"param\" || token.type === \"wildcard\") {\n      if (prevCaptureType && !backtrack) {\n        throw new PathError(\n          `Missing text before \"${token.name}\" ${token.type}`,\n          originalPath,\n        );\n      }\n\n      if (token.type === \"param\") {\n        result +=\n          hasSegmentCapture & 2 // Seen wildcard in segment.\n            ? `(${negate(delimiter, backtrack)}+)`\n            : hasInSegment(index, \"wildcard\") // See wildcard later in segment.\n              ? `(${negate(delimiter, peekText(index))}+)`\n              : hasSegmentCapture & 1 // Seen parameter in segment.\n                ? `(${negate(delimiter, backtrack)}+|${escape(backtrack)})`\n                : `(${negate(delimiter, \"\")}+)`;\n\n        hasSegmentCapture |= prevCaptureType = 1;\n      } else {\n        result +=\n          hasSegmentCapture & 2 // Seen wildcard in segment.\n            ? `(${negate(backtrack, \"\")}+)`\n            : wildcardBacktrack // No capture in segment, seen wildcard in path.\n              ? `(${negate(wildcardBacktrack, \"\")}+|${negate(delimiter, \"\")}+)`\n              : `([^]+)`;\n\n        wildcardBacktrack = \"\";\n        hasSegmentCapture |= prevCaptureType = 2;\n      }\n\n      keys.push(token);\n      backtrack = \"\";\n      continue;\n    }\n\n    throw new TypeError(`Unknown token type: ${(token as any).type}`);\n  }\n\n  return result;\n}\n\n/**\n * Block backtracking on previous text/delimiter.\n */\nfunction negate(a: string, b: string): string {\n  if (b.length > a.length) return negate(b, a); // Longest string first.\n\n  if (a === b) b = \"\"; // Cleaner regex strings, no duplication.\n  if (b.length > 1) return `(?:(?!${escape(a)}|${escape(b)})[^])`;\n  if (a.length > 1) return `(?:(?!${escape(a)})[^${escape(b)}])`;\n  return `[^${escape(a + b)}]`;\n}\n\n/**\n * Stringify an array of tokens into a path string.\n */\nfunction stringifyTokens(tokens: Token[], index: number): string {\n  let value = \"\";\n\n  while (index < tokens.length) {\n    const token = tokens[index++];\n\n    if (token.type === \"text\") {\n      value += escapeText(token.value);\n      continue;\n    }\n\n    if (token.type === \"group\") {\n      value += \"{\" + stringifyTokens(token.tokens, 0) + \"}\";\n      continue;\n    }\n\n    if (token.type === \"param\") {\n      value += \":\" + stringifyName(token.name, tokens[index]);\n      continue;\n    }\n\n    if (token.type === \"wildcard\") {\n      value += \"*\" + stringifyName(token.name, tokens[index]);\n      continue;\n    }\n\n    throw new TypeError(`Unknown token type: ${(token as any).type}`);\n  }\n\n  return value;\n}\n\n/**\n * Stringify token data into a path string.\n */\nexport function stringify(data: TokenData): string {\n  return stringifyTokens(data.tokens, 0);\n}\n\n/**\n * Stringify a parameter name, escaping when it cannot be emitted directly.\n */\nfunction stringifyName(name: string, next: Token | undefined): string {\n  if (!ID.test(name)) return JSON.stringify(name);\n\n  if (next?.type === \"text\" && ID_CONTINUE.test(next.value[0])) {\n    return JSON.stringify(name);\n  }\n\n  return name;\n}\n", "/*!\n * router\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nconst isPromise = require('is-promise')\nconst pathRegexp = require('path-to-regexp')\nconst debug = require('debug')('router:layer')\nconst deprecate = require('depd')('router')\n\n/**\n * Module variables.\n * @private\n */\n\nconst TRAILING_SLASH_REGEXP = /\\/+$/\nconst MATCHING_GROUP_REGEXP = /\\((?:\\?<(.*?)>)?(?!\\?)/g\n\n/**\n * Expose `Layer`.\n */\n\nmodule.exports = Layer\n\nfunction Layer (path, options, fn) {\n  if (!(this instanceof Layer)) {\n    return new Layer(path, options, fn)\n  }\n\n  debug('new %o', path)\n  const opts = options || {}\n\n  this.handle = fn\n  this.keys = []\n  this.name = fn.name || '<anonymous>'\n  this.params = undefined\n  this.path = undefined\n  this.slash = path === '/' && opts.end === false\n\n  function matcher (_path) {\n    if (_path instanceof RegExp) {\n      const keys = []\n      let name = 0\n      let m\n      // eslint-disable-next-line no-cond-assign\n      while (m = MATCHING_GROUP_REGEXP.exec(_path.source)) {\n        keys.push({\n          name: m[1] || name++,\n          offset: m.index\n        })\n      }\n\n      return function regexpMatcher (p) {\n        const match = _path.exec(p)\n        if (!match) {\n          return false\n        }\n\n        const params = {}\n        for (let i = 1; i < match.length; i++) {\n          const key = keys[i - 1]\n          const prop = key.name\n          const val = decodeParam(match[i])\n\n          if (val !== undefined) {\n            params[prop] = val\n          }\n        }\n\n        return {\n          params,\n          path: match[0]\n        }\n      }\n    }\n\n    return pathRegexp.match((opts.strict ? _path : loosen(_path)), {\n      sensitive: opts.sensitive,\n      end: opts.end,\n      trailing: !opts.strict,\n      decode: decodeParam\n    })\n  }\n  this.matchers = Array.isArray(path) ? path.map(matcher) : [matcher(path)]\n}\n\n/**\n * Handle the error for the layer.\n *\n * @param {Error} error\n * @param {Request} req\n * @param {Response} res\n * @param {function} next\n * @api private\n */\n\nLayer.prototype.handleError = function handleError (error, req, res, next) {\n  const fn = this.handle\n\n  if (fn.length !== 4) {\n    // not a standard error handler\n    return next(error)\n  }\n\n  try {\n    // invoke function\n    const ret = fn(error, req, res, next)\n\n    // wait for returned promise\n    if (isPromise(ret)) {\n      if (!(ret instanceof Promise)) {\n        deprecate('handlers that are Promise-like are deprecated, use a native Promise instead')\n      }\n\n      ret.then(null, function (error) {\n        next(error || new Error('Rejected promise'))\n      })\n    }\n  } catch (err) {\n    next(err)\n  }\n}\n\n/**\n * Handle the request for the layer.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {function} next\n * @api private\n */\n\nLayer.prototype.handleRequest = function handleRequest (req, res, next) {\n  const fn = this.handle\n\n  if (fn.length > 3) {\n    // not a standard request handler\n    return next()\n  }\n\n  try {\n    // invoke function\n    const ret = fn(req, res, next)\n\n    // wait for returned promise\n    if (isPromise(ret)) {\n      if (!(ret instanceof Promise)) {\n        deprecate('handlers that are Promise-like are deprecated, use a native Promise instead')\n      }\n\n      ret.then(null, function (error) {\n        next(error || new Error('Rejected promise'))\n      })\n    }\n  } catch (err) {\n    next(err)\n  }\n}\n\n/**\n * Check if this route matches `path`, if so\n * populate `.params`.\n *\n * @param {String} path\n * @return {Boolean}\n * @api private\n */\n\nLayer.prototype.match = function match (path) {\n  let match\n\n  if (path != null) {\n    // fast path non-ending match for / (any path matches)\n    if (this.slash) {\n      this.params = {}\n      this.path = ''\n      return true\n    }\n\n    let i = 0\n    while (!match && i < this.matchers.length) {\n      // match the path\n      match = this.matchers[i](path)\n      i++\n    }\n  }\n\n  if (!match) {\n    this.params = undefined\n    this.path = undefined\n    return false\n  }\n\n  // store values\n  this.params = match.params\n  this.path = match.path\n  this.keys = Object.keys(match.params)\n\n  return true\n}\n\n/**\n * Decode param value.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction decodeParam (val) {\n  if (typeof val !== 'string' || val.length === 0) {\n    return val\n  }\n\n  try {\n    return decodeURIComponent(val)\n  } catch (err) {\n    if (err instanceof URIError) {\n      err.message = 'Failed to decode param \\'' + val + '\\''\n      err.status = 400\n    }\n\n    throw err\n  }\n}\n\n/**\n * Loosens the given path for path-to-regexp matching.\n */\nfunction loosen (path) {\n  if (path instanceof RegExp || path === '/') {\n    return path\n  }\n\n  return Array.isArray(path)\n    ? path.map(function (p) { return loosen(p) })\n    : String(path).replace(TRAILING_SLASH_REGEXP, '')\n}\n", "/*!\n * router\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nconst debug = require('debug')('router:route')\nconst Layer = require('./layer')\nconst { METHODS } = require('node:http')\n\n/**\n * Module variables.\n * @private\n */\n\nconst slice = Array.prototype.slice\nconst flatten = Array.prototype.flat\nconst methods = METHODS.map((method) => method.toLowerCase())\n\n/**\n * Expose `Route`.\n */\n\nmodule.exports = Route\n\n/**\n * Initialize `Route` with the given `path`,\n *\n * @param {String} path\n * @api private\n */\n\nfunction Route (path) {\n  debug('new %o', path)\n  this.path = path\n  this.stack = []\n\n  // route handlers for various http methods\n  this.methods = Object.create(null)\n}\n\n/**\n * @private\n */\n\nRoute.prototype._handlesMethod = function _handlesMethod (method) {\n  if (this.methods._all) {\n    return true\n  }\n\n  // normalize name\n  let name = typeof method === 'string'\n    ? method.toLowerCase()\n    : method\n\n  if (name === 'head' && !this.methods.head) {\n    name = 'get'\n  }\n\n  return Boolean(this.methods[name])\n}\n\n/**\n * @return {array} supported HTTP methods\n * @private\n */\n\nRoute.prototype._methods = function _methods () {\n  const methods = Object.keys(this.methods)\n\n  // append automatic head\n  if (this.methods.get && !this.methods.head) {\n    methods.push('head')\n  }\n\n  for (let i = 0; i < methods.length; i++) {\n    // make upper case\n    methods[i] = methods[i].toUpperCase()\n  }\n\n  return methods\n}\n\n/**\n * dispatch req, res into this route\n *\n * @private\n */\n\nRoute.prototype.dispatch = function dispatch (req, res, done) {\n  let idx = 0\n  const stack = this.stack\n  let sync = 0\n\n  if (stack.length === 0) {\n    return done()\n  }\n\n  let method = typeof req.method === 'string'\n    ? req.method.toLowerCase()\n    : req.method\n\n  if (method === 'head' && !this.methods.head) {\n    method = 'get'\n  }\n\n  req.route = this\n\n  next()\n\n  function next (err) {\n    // signal to exit route\n    if (err && err === 'route') {\n      return done()\n    }\n\n    // signal to exit router\n    if (err && err === 'router') {\n      return done(err)\n    }\n\n    // no more matching layers\n    if (idx >= stack.length) {\n      return done(err)\n    }\n\n    // max sync stack\n    if (++sync > 100) {\n      return setImmediate(next, err)\n    }\n\n    let layer\n    let match\n\n    // find next matching layer\n    while (match !== true && idx < stack.length) {\n      layer = stack[idx++]\n      match = !layer.method || layer.method === method\n    }\n\n    // no match\n    if (match !== true) {\n      return done(err)\n    }\n\n    if (err) {\n      layer.handleError(err, req, res, next)\n    } else {\n      layer.handleRequest(req, res, next)\n    }\n\n    sync = 0\n  }\n}\n\n/**\n * Add a handler for all HTTP verbs to this route.\n *\n * Behaves just like middleware and can respond or call `next`\n * to continue processing.\n *\n * You can use multiple `.all` call to add multiple handlers.\n *\n *   function check_something(req, res, next){\n *     next()\n *   }\n *\n *   function validate_user(req, res, next){\n *     next()\n *   }\n *\n *   route\n *   .all(validate_user)\n *   .all(check_something)\n *   .get(function(req, res, next){\n *     res.send('hello world')\n *   })\n *\n * @param {array|function} handler\n * @return {Route} for chaining\n * @api public\n */\n\nRoute.prototype.all = function all (handler) {\n  const callbacks = flatten.call(slice.call(arguments), Infinity)\n\n  if (callbacks.length === 0) {\n    throw new TypeError('argument handler is required')\n  }\n\n  for (let i = 0; i < callbacks.length; i++) {\n    const fn = callbacks[i]\n\n    if (typeof fn !== 'function') {\n      throw new TypeError('argument handler must be a function')\n    }\n\n    const layer = Layer('/', {}, fn)\n    layer.method = undefined\n\n    this.methods._all = true\n    this.stack.push(layer)\n  }\n\n  return this\n}\n\nmethods.forEach(function (method) {\n  Route.prototype[method] = function (handler) {\n    const callbacks = flatten.call(slice.call(arguments), Infinity)\n\n    if (callbacks.length === 0) {\n      throw new TypeError('argument handler is required')\n    }\n\n    for (let i = 0; i < callbacks.length; i++) {\n      const fn = callbacks[i]\n\n      if (typeof fn !== 'function') {\n        throw new TypeError('argument handler must be a function')\n      }\n\n      debug('%s %s', method, this.path)\n\n      const layer = Layer('/', {}, fn)\n      layer.method = method\n\n      this.methods[method] = true\n      this.stack.push(layer)\n    }\n\n    return this\n  }\n})\n", "/*!\n * router\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nconst isPromise = require('is-promise')\nconst Layer = require('./lib/layer')\nconst { METHODS } = require('node:http')\nconst parseUrl = require('parseurl')\nconst Route = require('./lib/route')\nconst debug = require('debug')('router')\nconst deprecate = require('depd')('router')\n\n/**\n * Module variables.\n * @private\n */\n\nconst slice = Array.prototype.slice\nconst flatten = Array.prototype.flat\nconst methods = METHODS.map((method) => method.toLowerCase())\n\n/**\n * Expose `Router`.\n */\n\nmodule.exports = Router\n\n/**\n * Expose `Route`.\n */\n\nmodule.exports.Route = Route\n\n/**\n * Initialize a new `Router` with the given `options`.\n *\n * @param {object} [options]\n * @return {Router} which is a callable function\n * @public\n */\n\nfunction Router (options) {\n  if (!(this instanceof Router)) {\n    return new Router(options)\n  }\n\n  const opts = options || {}\n\n  function router (req, res, next) {\n    router.handle(req, res, next)\n  }\n\n  // inherit from the correct prototype\n  Object.setPrototypeOf(router, this)\n\n  router.caseSensitive = opts.caseSensitive\n  router.mergeParams = opts.mergeParams\n  router.params = {}\n  router.strict = opts.strict\n  router.stack = []\n\n  return router\n}\n\n/**\n * Router prototype inherits from a Function.\n */\n\n/* istanbul ignore next */\nRouter.prototype = function () {}\n\n/**\n * Map the given param placeholder `name`(s) to the given callback.\n *\n * Parameter mapping is used to provide pre-conditions to routes\n * which use normalized placeholders. For example a _:user_id_ parameter\n * could automatically load a user's information from the database without\n * any additional code.\n *\n * The callback uses the same signature as middleware, the only difference\n * being that the value of the placeholder is passed, in this case the _id_\n * of the user. Once the `next()` function is invoked, just like middleware\n * it will continue on to execute the route, or subsequent parameter functions.\n *\n * Just like in middleware, you must either respond to the request or call next\n * to avoid stalling the request.\n *\n *  router.param('user_id', function(req, res, next, id){\n *    User.find(id, function(err, user){\n *      if (err) {\n *        return next(err)\n *      } else if (!user) {\n *        return next(new Error('failed to load user'))\n *      }\n *      req.user = user\n *      next()\n *    })\n *  })\n *\n * @param {string} name\n * @param {function} fn\n * @public\n */\n\nRouter.prototype.param = function param (name, fn) {\n  if (!name) {\n    throw new TypeError('argument name is required')\n  }\n\n  if (typeof name !== 'string') {\n    throw new TypeError('argument name must be a string')\n  }\n\n  if (!fn) {\n    throw new TypeError('argument fn is required')\n  }\n\n  if (typeof fn !== 'function') {\n    throw new TypeError('argument fn must be a function')\n  }\n\n  let params = this.params[name]\n\n  if (!params) {\n    params = this.params[name] = []\n  }\n\n  params.push(fn)\n\n  return this\n}\n\n/**\n * Dispatch a req, res into the router.\n *\n * @private\n */\n\nRouter.prototype.handle = function handle (req, res, callback) {\n  if (!callback) {\n    throw new TypeError('argument callback is required')\n  }\n\n  debug('dispatching %s %s', req.method, req.url)\n\n  let idx = 0\n  let methods\n  const protohost = getProtohost(req.url) || ''\n  let removed = ''\n  const self = this\n  let slashAdded = false\n  let sync = 0\n  const paramcalled = {}\n\n  // middleware and routes\n  const stack = this.stack\n\n  // manage inter-router variables\n  const parentParams = req.params\n  const parentUrl = req.baseUrl || ''\n  let done = restore(callback, req, 'baseUrl', 'next', 'params')\n\n  // setup next layer\n  req.next = next\n\n  // for options requests, respond with a default if nothing else responds\n  if (req.method === 'OPTIONS') {\n    methods = []\n    done = wrap(done, generateOptionsResponder(res, methods))\n  }\n\n  // setup basic req values\n  req.baseUrl = parentUrl\n  req.originalUrl = req.originalUrl || req.url\n\n  next()\n\n  function next (err) {\n    let layerError = err === 'route'\n      ? null\n      : err\n\n    // remove added slash\n    if (slashAdded) {\n      req.url = req.url.slice(1)\n      slashAdded = false\n    }\n\n    // restore altered req.url\n    if (removed.length !== 0) {\n      req.baseUrl = parentUrl\n      req.url = protohost + removed + req.url.slice(protohost.length)\n      removed = ''\n    }\n\n    // signal to exit router\n    if (layerError === 'router') {\n      setImmediate(done, null)\n      return\n    }\n\n    // no more matching layers\n    if (idx >= stack.length) {\n      setImmediate(done, layerError)\n      return\n    }\n\n    // max sync stack\n    if (++sync > 100) {\n      return setImmediate(next, err)\n    }\n\n    // get pathname of request\n    const path = getPathname(req)\n\n    if (path == null) {\n      return done(layerError)\n    }\n\n    // find next matching layer\n    let layer\n    let match\n    let route\n\n    while (match !== true && idx < stack.length) {\n      layer = stack[idx++]\n      match = matchLayer(layer, path)\n      route = layer.route\n\n      if (typeof match !== 'boolean') {\n        // hold on to layerError\n        layerError = layerError || match\n      }\n\n      if (match !== true) {\n        continue\n      }\n\n      if (!route) {\n        // process non-route handlers normally\n        continue\n      }\n\n      if (layerError) {\n        // routes do not match with a pending error\n        match = false\n        continue\n      }\n\n      const method = req.method\n      const hasMethod = route._handlesMethod(method)\n\n      // build up automatic options response\n      if (!hasMethod && method === 'OPTIONS' && methods) {\n        methods.push.apply(methods, route._methods())\n      }\n\n      // don't even bother matching route\n      if (!hasMethod && method !== 'HEAD') {\n        match = false\n      }\n    }\n\n    // no match\n    if (match !== true) {\n      return done(layerError)\n    }\n\n    // store route for dispatch on change\n    if (route) {\n      req.route = route\n    }\n\n    // Capture one-time layer values\n    req.params = self.mergeParams\n      ? mergeParams(layer.params, parentParams)\n      : layer.params\n    const layerPath = layer.path\n\n    // this should be done for the layer\n    processParams(self.params, layer, paramcalled, req, res, function (err) {\n      if (err) {\n        next(layerError || err)\n      } else if (route) {\n        layer.handleRequest(req, res, next)\n      } else {\n        trimPrefix(layer, layerError, layerPath, path)\n      }\n\n      sync = 0\n    })\n  }\n\n  function trimPrefix (layer, layerError, layerPath, path) {\n    if (layerPath.length !== 0) {\n      // Validate path is a prefix match\n      if (layerPath !== path.substring(0, layerPath.length)) {\n        next(layerError)\n        return\n      }\n\n      // Validate path breaks on a path separator\n      const c = path[layerPath.length]\n      if (c && c !== '/') {\n        next(layerError)\n        return\n      }\n\n      // Trim off the part of the url that matches the route\n      // middleware (.use stuff) needs to have the path stripped\n      debug('trim prefix (%s) from url %s', layerPath, req.url)\n      removed = layerPath\n      req.url = protohost + req.url.slice(protohost.length + removed.length)\n\n      // Ensure leading slash\n      if (!protohost && req.url[0] !== '/') {\n        req.url = '/' + req.url\n        slashAdded = true\n      }\n\n      // Setup base URL (no trailing slash)\n      req.baseUrl = parentUrl + (removed[removed.length - 1] === '/'\n        ? removed.substring(0, removed.length - 1)\n        : removed)\n    }\n\n    debug('%s %s : %s', layer.name, layerPath, req.originalUrl)\n\n    if (layerError) {\n      layer.handleError(layerError, req, res, next)\n    } else {\n      layer.handleRequest(req, res, next)\n    }\n  }\n}\n\n/**\n * Use the given middleware function, with optional path, defaulting to \"/\".\n *\n * Use (like `.all`) will run for any http METHOD, but it will not add\n * handlers for those methods so OPTIONS requests will not consider `.use`\n * functions even if they could respond.\n *\n * The other difference is that _route_ path is stripped and not visible\n * to the handler function. The main effect of this feature is that mounted\n * handlers can operate without any code changes regardless of the \"prefix\"\n * pathname.\n *\n * @public\n */\n\nRouter.prototype.use = function use (handler) {\n  let offset = 0\n  let path = '/'\n\n  // default path to '/'\n  // disambiguate router.use([handler])\n  if (typeof handler !== 'function') {\n    let arg = handler\n\n    while (Array.isArray(arg) && arg.length !== 0) {\n      arg = arg[0]\n    }\n\n    // first arg is the path\n    if (typeof arg !== 'function') {\n      offset = 1\n      path = handler\n    }\n  }\n\n  const callbacks = flatten.call(slice.call(arguments, offset), Infinity)\n\n  if (callbacks.length === 0) {\n    throw new TypeError('argument handler is required')\n  }\n\n  for (let i = 0; i < callbacks.length; i++) {\n    const fn = callbacks[i]\n\n    if (typeof fn !== 'function') {\n      throw new TypeError('argument handler must be a function')\n    }\n\n    // add the middleware\n    debug('use %o %s', path, fn.name || '<anonymous>')\n\n    const layer = new Layer(path, {\n      sensitive: this.caseSensitive,\n      strict: false,\n      end: false\n    }, fn)\n\n    layer.route = undefined\n\n    this.stack.push(layer)\n  }\n\n  return this\n}\n\n/**\n * Create a new Route for the given path.\n *\n * Each route contains a separate middleware stack and VERB handlers.\n *\n * See the Route api documentation for details on adding handlers\n * and middleware to routes.\n *\n * @param {string} path\n * @return {Route}\n * @public\n */\n\nRouter.prototype.route = function route (path) {\n  const route = new Route(path)\n\n  const layer = new Layer(path, {\n    sensitive: this.caseSensitive,\n    strict: this.strict,\n    end: true\n  }, handle)\n\n  function handle (req, res, next) {\n    route.dispatch(req, res, next)\n  }\n\n  layer.route = route\n\n  this.stack.push(layer)\n  return route\n}\n\n// create Router#VERB functions\nmethods.concat('all').forEach(function (method) {\n  Router.prototype[method] = function (path) {\n    const route = this.route(path)\n    route[method].apply(route, slice.call(arguments, 1))\n    return this\n  }\n})\n\n/**\n * Generate a callback that will make an OPTIONS response.\n *\n * @param {OutgoingMessage} res\n * @param {array} methods\n * @private\n */\n\nfunction generateOptionsResponder (res, methods) {\n  return function onDone (fn, err) {\n    if (err || methods.length === 0) {\n      return fn(err)\n    }\n\n    trySendOptionsResponse(res, methods, fn)\n  }\n}\n\n/**\n * Get pathname of request.\n *\n * @param {IncomingMessage} req\n * @private\n */\n\nfunction getPathname (req) {\n  try {\n    return parseUrl(req).pathname\n  } catch (err) {\n    return undefined\n  }\n}\n\n/**\n * Get get protocol + host for a URL.\n *\n * @param {string} url\n * @private\n */\n\nfunction getProtohost (url) {\n  if (typeof url !== 'string' || url.length === 0 || url[0] === '/') {\n    return undefined\n  }\n\n  const searchIndex = url.indexOf('?')\n  const pathLength = searchIndex !== -1\n    ? searchIndex\n    : url.length\n  const fqdnIndex = url.substring(0, pathLength).indexOf('://')\n\n  return fqdnIndex !== -1\n    ? url.substring(0, url.indexOf('/', 3 + fqdnIndex))\n    : undefined\n}\n\n/**\n * Match path to a layer.\n *\n * @param {Layer} layer\n * @param {string} path\n * @private\n */\n\nfunction matchLayer (layer, path) {\n  try {\n    return layer.match(path)\n  } catch (err) {\n    return err\n  }\n}\n\n/**\n * Merge params with parent params\n *\n * @private\n */\n\nfunction mergeParams (params, parent) {\n  if (typeof parent !== 'object' || !parent) {\n    return params\n  }\n\n  // make copy of parent for base\n  const obj = Object.assign({}, parent)\n\n  // simple non-numeric merging\n  if (!(0 in params) || !(0 in parent)) {\n    return Object.assign(obj, params)\n  }\n\n  let i = 0\n  let o = 0\n\n  // determine numeric gap in params\n  while (i in params) {\n    i++\n  }\n\n  // determine numeric gap in parent\n  while (o in parent) {\n    o++\n  }\n\n  // offset numeric indices in params before merge\n  for (i--; i >= 0; i--) {\n    params[i + o] = params[i]\n\n    // create holes for the merge when necessary\n    if (i < o) {\n      delete params[i]\n    }\n  }\n\n  return Object.assign(obj, params)\n}\n\n/**\n * Process any parameters for the layer.\n *\n * @private\n */\n\nfunction processParams (params, layer, called, req, res, done) {\n  // captured parameters from the layer, keys and values\n  const keys = layer.keys\n\n  // fast track\n  if (!keys || keys.length === 0) {\n    return done()\n  }\n\n  let i = 0\n  let paramIndex = 0\n  let key\n  let paramVal\n  let paramCallbacks\n  let paramCalled\n\n  // process params in order\n  // param callbacks can be async\n  function param (err) {\n    if (err) {\n      return done(err)\n    }\n\n    if (i >= keys.length) {\n      return done()\n    }\n\n    paramIndex = 0\n    key = keys[i++]\n    paramVal = req.params[key]\n    paramCallbacks = params[key]\n    paramCalled = called[key]\n\n    if (paramVal === undefined || !paramCallbacks) {\n      return param()\n    }\n\n    // param previously called with same value or error occurred\n    if (paramCalled && (paramCalled.match === paramVal ||\n      (paramCalled.error && paramCalled.error !== 'route'))) {\n      // restore value\n      req.params[key] = paramCalled.value\n\n      // next param\n      return param(paramCalled.error)\n    }\n\n    called[key] = paramCalled = {\n      error: null,\n      match: paramVal,\n      value: paramVal\n    }\n\n    paramCallback()\n  }\n\n  // single param callbacks\n  function paramCallback (err) {\n    const fn = paramCallbacks[paramIndex++]\n\n    // store updated value\n    paramCalled.value = req.params[key]\n\n    if (err) {\n      // store error\n      paramCalled.error = err\n      param(err)\n      return\n    }\n\n    if (!fn) return param()\n\n    try {\n      const ret = fn(req, res, paramCallback, paramVal, key)\n      if (isPromise(ret)) {\n        if (!(ret instanceof Promise)) {\n          deprecate('parameters that are Promise-like are deprecated, use a native Promise instead')\n        }\n\n        ret.then(null, function (error) {\n          paramCallback(error || new Error('Rejected promise'))\n        })\n      }\n    } catch (e) {\n      paramCallback(e)\n    }\n  }\n\n  param()\n}\n\n/**\n * Restore obj props after function\n *\n * @private\n */\n\nfunction restore (fn, obj) {\n  const props = new Array(arguments.length - 2)\n  const vals = new Array(arguments.length - 2)\n\n  for (let i = 0; i < props.length; i++) {\n    props[i] = arguments[i + 2]\n    vals[i] = obj[props[i]]\n  }\n\n  return function () {\n    // restore vals\n    for (let i = 0; i < props.length; i++) {\n      obj[props[i]] = vals[i]\n    }\n\n    return fn.apply(this, arguments)\n  }\n}\n\n/**\n * Send an OPTIONS response.\n *\n * @private\n */\n\nfunction sendOptionsResponse (res, methods) {\n  const options = Object.create(null)\n\n  // build unique method map\n  for (let i = 0; i < methods.length; i++) {\n    options[methods[i]] = true\n  }\n\n  // construct the allow list\n  const allow = Object.keys(options).sort().join(', ')\n\n  // send response\n  res.setHeader('Allow', allow)\n  res.setHeader('Content-Length', Buffer.byteLength(allow))\n  res.setHeader('Content-Type', 'text/plain')\n  res.setHeader('X-Content-Type-Options', 'nosniff')\n  res.end(allow)\n}\n\n/**\n * Try to send an OPTIONS response.\n *\n * @private\n */\n\nfunction trySendOptionsResponse (res, methods, next) {\n  try {\n    sendOptionsResponse(res, methods)\n  } catch (err) {\n    next(err)\n  }\n}\n\n/**\n * Wrap a function\n *\n * @private\n */\n\nfunction wrap (old, fn) {\n  return function proxy () {\n    const args = new Array(arguments.length + 1)\n\n    args[0] = old\n    for (let i = 0, len = arguments.length; i < len; i++) {\n      args[i + 1] = arguments[i]\n    }\n\n    fn.apply(this, args)\n  }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar finalhandler = require('finalhandler');\nvar debug = require('debug')('express:application');\nvar View = require('./view');\nvar http = require('node:http');\nvar methods = require('./utils').methods;\nvar compileETag = require('./utils').compileETag;\nvar compileQueryParser = require('./utils').compileQueryParser;\nvar compileTrust = require('./utils').compileTrust;\nvar resolve = require('node:path').resolve;\nvar once = require('once')\nvar Router = require('router');\n\n/**\n * Module variables.\n * @private\n */\n\nvar slice = Array.prototype.slice;\nvar flatten = Array.prototype.flat;\n\n/**\n * Application prototype.\n */\n\nvar app = exports = module.exports = {};\n\n/**\n * Variable for trust proxy inheritance back-compat\n * @private\n */\n\nvar trustProxyDefaultSymbol = '@@symbol:trust_proxy_default';\n\n/**\n * Initialize the server.\n *\n *   - setup default configuration\n *   - setup default middleware\n *   - setup route reflection methods\n *\n * @private\n */\n\napp.init = function init() {\n  var router = null;\n\n  this.cache = Object.create(null);\n  this.engines = Object.create(null);\n  this.settings = Object.create(null);\n\n  this.defaultConfiguration();\n\n  // Setup getting to lazily add base router\n  Object.defineProperty(this, 'router', {\n    configurable: true,\n    enumerable: true,\n    get: function getrouter() {\n      if (router === null) {\n        router = new Router({\n          caseSensitive: this.enabled('case sensitive routing'),\n          strict: this.enabled('strict routing')\n        });\n      }\n\n      return router;\n    }\n  });\n};\n\n/**\n * Initialize application configuration.\n * @private\n */\n\napp.defaultConfiguration = function defaultConfiguration() {\n  var env = process.env.NODE_ENV || 'development';\n\n  // default settings\n  this.enable('x-powered-by');\n  this.set('etag', 'weak');\n  this.set('env', env);\n  this.set('query parser', 'simple')\n  this.set('subdomain offset', 2);\n  this.set('trust proxy', false);\n\n  // trust proxy inherit back-compat\n  Object.defineProperty(this.settings, trustProxyDefaultSymbol, {\n    configurable: true,\n    value: true\n  });\n\n  debug('booting in %s mode', env);\n\n  this.on('mount', function onmount(parent) {\n    // inherit trust proxy\n    if (this.settings[trustProxyDefaultSymbol] === true\n      && typeof parent.settings['trust proxy fn'] === 'function') {\n      delete this.settings['trust proxy'];\n      delete this.settings['trust proxy fn'];\n    }\n\n    // inherit protos\n    Object.setPrototypeOf(this.request, parent.request)\n    Object.setPrototypeOf(this.response, parent.response)\n    Object.setPrototypeOf(this.engines, parent.engines)\n    Object.setPrototypeOf(this.settings, parent.settings)\n  });\n\n  // setup locals\n  this.locals = Object.create(null);\n\n  // top-most app is mounted at /\n  this.mountpath = '/';\n\n  // default locals\n  this.locals.settings = this.settings;\n\n  // default configuration\n  this.set('view', View);\n  this.set('views', resolve('views'));\n  this.set('jsonp callback name', 'callback');\n\n  if (env === 'production') {\n    this.enable('view cache');\n  }\n};\n\n/**\n * Dispatch a req, res pair into the application. Starts pipeline processing.\n *\n * If no callback is provided, then default error handlers will respond\n * in the event of an error bubbling through the stack.\n *\n * @private\n */\n\napp.handle = function handle(req, res, callback) {\n  // final handler\n  var done = callback || finalhandler(req, res, {\n    env: this.get('env'),\n    onerror: logerror.bind(this)\n  });\n\n  // set powered by header\n  if (this.enabled('x-powered-by')) {\n    res.setHeader('X-Powered-By', 'Express');\n  }\n\n  // set circular references\n  req.res = res;\n  res.req = req;\n\n  // alter the prototypes\n  Object.setPrototypeOf(req, this.request)\n  Object.setPrototypeOf(res, this.response)\n\n  // setup locals\n  if (!res.locals) {\n    res.locals = Object.create(null);\n  }\n\n  this.router.handle(req, res, done);\n};\n\n/**\n * Proxy `Router#use()` to add middleware to the app router.\n * See Router#use() documentation for details.\n *\n * If the _fn_ parameter is an express app, then it will be\n * mounted at the _route_ specified.\n *\n * @public\n */\n\napp.use = function use(fn) {\n  var offset = 0;\n  var path = '/';\n\n  // default path to '/'\n  // disambiguate app.use([fn])\n  if (typeof fn !== 'function') {\n    var arg = fn;\n\n    while (Array.isArray(arg) && arg.length !== 0) {\n      arg = arg[0];\n    }\n\n    // first arg is the path\n    if (typeof arg !== 'function') {\n      offset = 1;\n      path = fn;\n    }\n  }\n\n  var fns = flatten.call(slice.call(arguments, offset), Infinity);\n\n  if (fns.length === 0) {\n    throw new TypeError('app.use() requires a middleware function')\n  }\n\n  // get router\n  var router = this.router;\n\n  fns.forEach(function (fn) {\n    // non-express app\n    if (!fn || !fn.handle || !fn.set) {\n      return router.use(path, fn);\n    }\n\n    debug('.use app under %s', path);\n    fn.mountpath = path;\n    fn.parent = this;\n\n    // restore .app property on req and res\n    router.use(path, function mounted_app(req, res, next) {\n      var orig = req.app;\n      fn.handle(req, res, function (err) {\n        Object.setPrototypeOf(req, orig.request)\n        Object.setPrototypeOf(res, orig.response)\n        next(err);\n      });\n    });\n\n    // mounted an app\n    fn.emit('mount', this);\n  }, this);\n\n  return this;\n};\n\n/**\n * Proxy to the app `Router#route()`\n * Returns a new `Route` instance for the _path_.\n *\n * Routes are isolated middleware stacks for specific paths.\n * See the Route api docs for details.\n *\n * @public\n */\n\napp.route = function route(path) {\n  return this.router.route(path);\n};\n\n/**\n * Register the given template engine callback `fn`\n * as `ext`.\n *\n * By default will `require()` the engine based on the\n * file extension. For example if you try to render\n * a \"foo.ejs\" file Express will invoke the following internally:\n *\n *     app.engine('ejs', require('ejs').__express);\n *\n * For engines that do not provide `.__express` out of the box,\n * or if you wish to \"map\" a different extension to the template engine\n * you may use this method. For example mapping the EJS template engine to\n * \".html\" files:\n *\n *     app.engine('html', require('ejs').renderFile);\n *\n * In this case EJS provides a `.renderFile()` method with\n * the same signature that Express expects: `(path, options, callback)`,\n * though note that it aliases this method as `ejs.__express` internally\n * so if you're using \".ejs\" extensions you don't need to do anything.\n *\n * Some template engines do not follow this convention, the\n * [Consolidate.js](https://github.com/tj/consolidate.js)\n * library was created to map all of node's popular template\n * engines to follow this convention, thus allowing them to\n * work seamlessly within Express.\n *\n * @param {String} ext\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\napp.engine = function engine(ext, fn) {\n  if (typeof fn !== 'function') {\n    throw new Error('callback function required');\n  }\n\n  // get file extension\n  var extension = ext[0] !== '.'\n    ? '.' + ext\n    : ext;\n\n  // store engine\n  this.engines[extension] = fn;\n\n  return this;\n};\n\n/**\n * Proxy to `Router#param()` with one added api feature. The _name_ parameter\n * can be an array of names.\n *\n * See the Router#param() docs for more details.\n *\n * @param {String|Array} name\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\napp.param = function param(name, fn) {\n  if (Array.isArray(name)) {\n    for (var i = 0; i < name.length; i++) {\n      this.param(name[i], fn);\n    }\n\n    return this;\n  }\n\n  this.router.param(name, fn);\n\n  return this;\n};\n\n/**\n * Assign `setting` to `val`, or return `setting`'s value.\n *\n *    app.set('foo', 'bar');\n *    app.set('foo');\n *    // => \"bar\"\n *\n * Mounted servers inherit their parent server's settings.\n *\n * @param {String} setting\n * @param {*} [val]\n * @return {Server} for chaining\n * @public\n */\n\napp.set = function set(setting, val) {\n  if (arguments.length === 1) {\n    // app.get(setting)\n    return this.settings[setting];\n  }\n\n  debug('set \"%s\" to %o', setting, val);\n\n  // set value\n  this.settings[setting] = val;\n\n  // trigger matched settings\n  switch (setting) {\n    case 'etag':\n      this.set('etag fn', compileETag(val));\n      break;\n    case 'query parser':\n      this.set('query parser fn', compileQueryParser(val));\n      break;\n    case 'trust proxy':\n      this.set('trust proxy fn', compileTrust(val));\n\n      // trust proxy inherit back-compat\n      Object.defineProperty(this.settings, trustProxyDefaultSymbol, {\n        configurable: true,\n        value: false\n      });\n\n      break;\n  }\n\n  return this;\n};\n\n/**\n * Return the app's absolute pathname\n * based on the parent(s) that have\n * mounted it.\n *\n * For example if the application was\n * mounted as \"/admin\", which itself\n * was mounted as \"/blog\" then the\n * return value would be \"/blog/admin\".\n *\n * @return {String}\n * @private\n */\n\napp.path = function path() {\n  return this.parent\n    ? this.parent.path() + this.mountpath\n    : '';\n};\n\n/**\n * Check if `setting` is enabled (truthy).\n *\n *    app.enabled('foo')\n *    // => false\n *\n *    app.enable('foo')\n *    app.enabled('foo')\n *    // => true\n *\n * @param {String} setting\n * @return {Boolean}\n * @public\n */\n\napp.enabled = function enabled(setting) {\n  return Boolean(this.set(setting));\n};\n\n/**\n * Check if `setting` is disabled.\n *\n *    app.disabled('foo')\n *    // => true\n *\n *    app.enable('foo')\n *    app.disabled('foo')\n *    // => false\n *\n * @param {String} setting\n * @return {Boolean}\n * @public\n */\n\napp.disabled = function disabled(setting) {\n  return !this.set(setting);\n};\n\n/**\n * Enable `setting`.\n *\n * @param {String} setting\n * @return {app} for chaining\n * @public\n */\n\napp.enable = function enable(setting) {\n  return this.set(setting, true);\n};\n\n/**\n * Disable `setting`.\n *\n * @param {String} setting\n * @return {app} for chaining\n * @public\n */\n\napp.disable = function disable(setting) {\n  return this.set(setting, false);\n};\n\n/**\n * Delegate `.VERB(...)` calls to `router.VERB(...)`.\n */\n\nmethods.forEach(function (method) {\n  app[method] = function (path) {\n    if (method === 'get' && arguments.length === 1) {\n      // app.get(setting)\n      return this.set(path);\n    }\n\n    var route = this.route(path);\n    route[method].apply(route, slice.call(arguments, 1));\n    return this;\n  };\n});\n\n/**\n * Special-cased \"all\" method, applying the given route `path`,\n * middleware, and callback to _every_ HTTP method.\n *\n * @param {String} path\n * @param {Function} ...\n * @return {app} for chaining\n * @public\n */\n\napp.all = function all(path) {\n  var route = this.route(path);\n  var args = slice.call(arguments, 1);\n\n  for (var i = 0; i < methods.length; i++) {\n    route[methods[i]].apply(route, args);\n  }\n\n  return this;\n};\n\n/**\n * Render the given view `name` name with `options`\n * and a callback accepting an error and the\n * rendered template string.\n *\n * Example:\n *\n *    app.render('email', { name: 'Tobi' }, function(err, html){\n *      // ...\n *    })\n *\n * @param {String} name\n * @param {Object|Function} options or fn\n * @param {Function} callback\n * @public\n */\n\napp.render = function render(name, options, callback) {\n  var cache = this.cache;\n  var done = callback;\n  var engines = this.engines;\n  var opts = options;\n  var view;\n\n  // support callback function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  // merge options\n  var renderOptions = { ...this.locals, ...opts._locals, ...opts };\n\n  // set .cache unless explicitly provided\n  if (renderOptions.cache == null) {\n    renderOptions.cache = this.enabled('view cache');\n  }\n\n  // primed cache\n  if (renderOptions.cache) {\n    view = cache[name];\n  }\n\n  // view\n  if (!view) {\n    var View = this.get('view');\n\n    view = new View(name, {\n      defaultEngine: this.get('view engine'),\n      root: this.get('views'),\n      engines: engines\n    });\n\n    if (!view.path) {\n      var dirs = Array.isArray(view.root) && view.root.length > 1\n        ? 'directories \"' + view.root.slice(0, -1).join('\", \"') + '\" or \"' + view.root[view.root.length - 1] + '\"'\n        : 'directory \"' + view.root + '\"'\n      var err = new Error('Failed to lookup view \"' + name + '\" in views ' + dirs);\n      err.view = view;\n      return done(err);\n    }\n\n    // prime the cache\n    if (renderOptions.cache) {\n      cache[name] = view;\n    }\n  }\n\n  // render\n  tryRender(view, renderOptions, done);\n};\n\n/**\n * Listen for connections.\n *\n * A node `http.Server` is returned, with this\n * application (which is a `Function`) as its\n * callback. If you wish to create both an HTTP\n * and HTTPS server you may do so with the \"http\"\n * and \"https\" modules as shown here:\n *\n *    var http = require('node:http')\n *      , https = require('node:https')\n *      , express = require('express')\n *      , app = express();\n *\n *    http.createServer(app).listen(80);\n *    https.createServer({ ... }, app).listen(443);\n *\n * @return {http.Server}\n * @public\n */\n\napp.listen = function listen() {\n  var server = http.createServer(this)\n  var args = slice.call(arguments)\n  if (typeof args[args.length - 1] === 'function') {\n    var done = args[args.length - 1] = once(args[args.length - 1])\n    server.once('error', done)\n  }\n  return server.listen.apply(server, args)\n}\n\n/**\n * Log error using console.error.\n *\n * @param {Error} err\n * @private\n */\n\nfunction logerror(err) {\n  /* istanbul ignore next */\n  if (this.get('env') !== 'test') console.error(err.stack || err.toString());\n}\n\n/**\n * Try rendering a view.\n * @private\n */\n\nfunction tryRender(view, options, callback) {\n  try {\n    view.render(options, callback);\n  } catch (err) {\n    callback(err);\n  }\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredCharsets;\nmodule.exports.preferredCharsets = preferredCharsets;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleCharsetRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Charset header.\n * @private\n */\n\nfunction parseAcceptCharset(accept) {\n  var accepts = accept.split(',');\n\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var charset = parseCharset(accepts[i].trim(), i);\n\n    if (charset) {\n      accepts[j++] = charset;\n    }\n  }\n\n  // trim accepts\n  accepts.length = j;\n\n  return accepts;\n}\n\n/**\n * Parse a charset from the Accept-Charset header.\n * @private\n */\n\nfunction parseCharset(str, i) {\n  var match = simpleCharsetRegExp.exec(str);\n  if (!match) return null;\n\n  var charset = match[1];\n  var q = 1;\n  if (match[2]) {\n    var params = match[2].split(';')\n    for (var j = 0; j < params.length; j++) {\n      var p = params[j].trim().split('=');\n      if (p[0] === 'q') {\n        q = parseFloat(p[1]);\n        break;\n      }\n    }\n  }\n\n  return {\n    charset: charset,\n    q: q,\n    i: i\n  };\n}\n\n/**\n * Get the priority of a charset.\n * @private\n */\n\nfunction getCharsetPriority(charset, accepted, index) {\n  var priority = {o: -1, q: 0, s: 0};\n\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(charset, accepted[i], index);\n\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n\n  return priority;\n}\n\n/**\n * Get the specificity of the charset.\n * @private\n */\n\nfunction specify(charset, spec, index) {\n  var s = 0;\n  if(spec.charset.toLowerCase() === charset.toLowerCase()){\n    s |= 1;\n  } else if (spec.charset !== '*' ) {\n    return null\n  }\n\n  return {\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s\n  }\n}\n\n/**\n * Get the preferred charsets from an Accept-Charset header.\n * @public\n */\n\nfunction preferredCharsets(accept, provided) {\n  // RFC 2616 sec 14.2: no header = *\n  var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || '');\n\n  if (!provided) {\n    // sorted list of all charsets\n    return accepts\n      .filter(isQuality)\n      .sort(compareSpecs)\n      .map(getFullCharset);\n  }\n\n  var priorities = provided.map(function getPriority(type, index) {\n    return getCharsetPriority(type, accepts, index);\n  });\n\n  // sorted list of accepted charsets\n  return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full charset string.\n * @private\n */\n\nfunction getFullCharset(spec) {\n  return spec.charset;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredEncodings;\nmodule.exports.preferredEncodings = preferredEncodings;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleEncodingRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Encoding header.\n * @private\n */\n\nfunction parseAcceptEncoding(accept) {\n  var accepts = accept.split(',');\n  var hasIdentity = false;\n  var minQuality = 1;\n\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var encoding = parseEncoding(accepts[i].trim(), i);\n\n    if (encoding) {\n      accepts[j++] = encoding;\n      hasIdentity = hasIdentity || specify('identity', encoding);\n      minQuality = Math.min(minQuality, encoding.q || 1);\n    }\n  }\n\n  if (!hasIdentity) {\n    /*\n     * If identity doesn't explicitly appear in the accept-encoding header,\n     * it's added to the list of acceptable encoding with the lowest q\n     */\n    accepts[j++] = {\n      encoding: 'identity',\n      q: minQuality,\n      i: i\n    };\n  }\n\n  // trim accepts\n  accepts.length = j;\n\n  return accepts;\n}\n\n/**\n * Parse an encoding from the Accept-Encoding header.\n * @private\n */\n\nfunction parseEncoding(str, i) {\n  var match = simpleEncodingRegExp.exec(str);\n  if (!match) return null;\n\n  var encoding = match[1];\n  var q = 1;\n  if (match[2]) {\n    var params = match[2].split(';');\n    for (var j = 0; j < params.length; j++) {\n      var p = params[j].trim().split('=');\n      if (p[0] === 'q') {\n        q = parseFloat(p[1]);\n        break;\n      }\n    }\n  }\n\n  return {\n    encoding: encoding,\n    q: q,\n    i: i\n  };\n}\n\n/**\n * Get the priority of an encoding.\n * @private\n */\n\nfunction getEncodingPriority(encoding, accepted, index) {\n  var priority = {encoding: encoding, o: -1, q: 0, s: 0};\n\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(encoding, accepted[i], index);\n\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n\n  return priority;\n}\n\n/**\n * Get the specificity of the encoding.\n * @private\n */\n\nfunction specify(encoding, spec, index) {\n  var s = 0;\n  if(spec.encoding.toLowerCase() === encoding.toLowerCase()){\n    s |= 1;\n  } else if (spec.encoding !== '*' ) {\n    return null\n  }\n\n  return {\n    encoding: encoding,\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s\n  }\n};\n\n/**\n * Get the preferred encodings from an Accept-Encoding header.\n * @public\n */\n\nfunction preferredEncodings(accept, provided, preferred) {\n  var accepts = parseAcceptEncoding(accept || '');\n\n  var comparator = preferred ? function comparator (a, b) {\n    if (a.q !== b.q) {\n      return b.q - a.q // higher quality first\n    }\n\n    var aPreferred = preferred.indexOf(a.encoding)\n    var bPreferred = preferred.indexOf(b.encoding)\n\n    if (aPreferred === -1 && bPreferred === -1) {\n      // consider the original specifity/order\n      return (b.s - a.s) || (a.o - b.o) || (a.i - b.i)\n    }\n\n    if (aPreferred !== -1 && bPreferred !== -1) {\n      return aPreferred - bPreferred // consider the preferred order\n    }\n\n    return aPreferred === -1 ? 1 : -1 // preferred first\n  } : compareSpecs;\n\n  if (!provided) {\n    // sorted list of all encodings\n    return accepts\n      .filter(isQuality)\n      .sort(comparator)\n      .map(getFullEncoding);\n  }\n\n  var priorities = provided.map(function getPriority(type, index) {\n    return getEncodingPriority(type, accepts, index);\n  });\n\n  // sorted list of accepted encodings\n  return priorities.filter(isQuality).sort(comparator).map(function getEncoding(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i);\n}\n\n/**\n * Get full encoding string.\n * @private\n */\n\nfunction getFullEncoding(spec) {\n  return spec.encoding;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredLanguages;\nmodule.exports.preferredLanguages = preferredLanguages;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleLanguageRegExp = /^\\s*([^\\s\\-;]+)(?:-([^\\s;]+))?\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Language header.\n * @private\n */\n\nfunction parseAcceptLanguage(accept) {\n  var accepts = accept.split(',');\n\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var language = parseLanguage(accepts[i].trim(), i);\n\n    if (language) {\n      accepts[j++] = language;\n    }\n  }\n\n  // trim accepts\n  accepts.length = j;\n\n  return accepts;\n}\n\n/**\n * Parse a language from the Accept-Language header.\n * @private\n */\n\nfunction parseLanguage(str, i) {\n  var match = simpleLanguageRegExp.exec(str);\n  if (!match) return null;\n\n  var prefix = match[1]\n  var suffix = match[2]\n  var full = prefix\n\n  if (suffix) full += \"-\" + suffix;\n\n  var q = 1;\n  if (match[3]) {\n    var params = match[3].split(';')\n    for (var j = 0; j < params.length; j++) {\n      var p = params[j].split('=');\n      if (p[0] === 'q') q = parseFloat(p[1]);\n    }\n  }\n\n  return {\n    prefix: prefix,\n    suffix: suffix,\n    q: q,\n    i: i,\n    full: full\n  };\n}\n\n/**\n * Get the priority of a language.\n * @private\n */\n\nfunction getLanguagePriority(language, accepted, index) {\n  var priority = {o: -1, q: 0, s: 0};\n\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(language, accepted[i], index);\n\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n\n  return priority;\n}\n\n/**\n * Get the specificity of the language.\n * @private\n */\n\nfunction specify(language, spec, index) {\n  var p = parseLanguage(language)\n  if (!p) return null;\n  var s = 0;\n  if(spec.full.toLowerCase() === p.full.toLowerCase()){\n    s |= 4;\n  } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) {\n    s |= 2;\n  } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) {\n    s |= 1;\n  } else if (spec.full !== '*' ) {\n    return null\n  }\n\n  return {\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s\n  }\n};\n\n/**\n * Get the preferred languages from an Accept-Language header.\n * @public\n */\n\nfunction preferredLanguages(accept, provided) {\n  // RFC 2616 sec 14.4: no header = *\n  var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || '');\n\n  if (!provided) {\n    // sorted list of all languages\n    return accepts\n      .filter(isQuality)\n      .sort(compareSpecs)\n      .map(getFullLanguage);\n  }\n\n  var priorities = provided.map(function getPriority(type, index) {\n    return getLanguagePriority(type, accepts, index);\n  });\n\n  // sorted list of accepted languages\n  return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full language string.\n * @private\n */\n\nfunction getFullLanguage(spec) {\n  return spec.full;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredMediaTypes;\nmodule.exports.preferredMediaTypes = preferredMediaTypes;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleMediaTypeRegExp = /^\\s*([^\\s\\/;]+)\\/([^;\\s]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept header.\n * @private\n */\n\nfunction parseAccept(accept) {\n  var accepts = splitMediaTypes(accept);\n\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var mediaType = parseMediaType(accepts[i].trim(), i);\n\n    if (mediaType) {\n      accepts[j++] = mediaType;\n    }\n  }\n\n  // trim accepts\n  accepts.length = j;\n\n  return accepts;\n}\n\n/**\n * Parse a media type from the Accept header.\n * @private\n */\n\nfunction parseMediaType(str, i) {\n  var match = simpleMediaTypeRegExp.exec(str);\n  if (!match) return null;\n\n  var params = Object.create(null);\n  var q = 1;\n  var subtype = match[2];\n  var type = match[1];\n\n  if (match[3]) {\n    var kvps = splitParameters(match[3]).map(splitKeyValuePair);\n\n    for (var j = 0; j < kvps.length; j++) {\n      var pair = kvps[j];\n      var key = pair[0].toLowerCase();\n      var val = pair[1];\n\n      // get the value, unwrapping quotes\n      var value = val && val[0] === '\"' && val[val.length - 1] === '\"'\n        ? val.slice(1, -1)\n        : val;\n\n      if (key === 'q') {\n        q = parseFloat(value);\n        break;\n      }\n\n      // store parameter\n      params[key] = value;\n    }\n  }\n\n  return {\n    type: type,\n    subtype: subtype,\n    params: params,\n    q: q,\n    i: i\n  };\n}\n\n/**\n * Get the priority of a media type.\n * @private\n */\n\nfunction getMediaTypePriority(type, accepted, index) {\n  var priority = {o: -1, q: 0, s: 0};\n\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(type, accepted[i], index);\n\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n\n  return priority;\n}\n\n/**\n * Get the specificity of the media type.\n * @private\n */\n\nfunction specify(type, spec, index) {\n  var p = parseMediaType(type);\n  var s = 0;\n\n  if (!p) {\n    return null;\n  }\n\n  if(spec.type.toLowerCase() == p.type.toLowerCase()) {\n    s |= 4\n  } else if(spec.type != '*') {\n    return null;\n  }\n\n  if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {\n    s |= 2\n  } else if(spec.subtype != '*') {\n    return null;\n  }\n\n  var keys = Object.keys(spec.params);\n  if (keys.length > 0) {\n    if (keys.every(function (k) {\n      return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase();\n    })) {\n      s |= 1\n    } else {\n      return null\n    }\n  }\n\n  return {\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s,\n  }\n}\n\n/**\n * Get the preferred media types from an Accept header.\n * @public\n */\n\nfunction preferredMediaTypes(accept, provided) {\n  // RFC 2616 sec 14.2: no header = */*\n  var accepts = parseAccept(accept === undefined ? '*/*' : accept || '');\n\n  if (!provided) {\n    // sorted list of all types\n    return accepts\n      .filter(isQuality)\n      .sort(compareSpecs)\n      .map(getFullType);\n  }\n\n  var priorities = provided.map(function getPriority(type, index) {\n    return getMediaTypePriority(type, accepts, index);\n  });\n\n  // sorted list of accepted types\n  return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full type string.\n * @private\n */\n\nfunction getFullType(spec) {\n  return spec.type + '/' + spec.subtype;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}\n\n/**\n * Count the number of quotes in a string.\n * @private\n */\n\nfunction quoteCount(string) {\n  var count = 0;\n  var index = 0;\n\n  while ((index = string.indexOf('\"', index)) !== -1) {\n    count++;\n    index++;\n  }\n\n  return count;\n}\n\n/**\n * Split a key value pair.\n * @private\n */\n\nfunction splitKeyValuePair(str) {\n  var index = str.indexOf('=');\n  var key;\n  var val;\n\n  if (index === -1) {\n    key = str;\n  } else {\n    key = str.slice(0, index);\n    val = str.slice(index + 1);\n  }\n\n  return [key, val];\n}\n\n/**\n * Split an Accept header into media types.\n * @private\n */\n\nfunction splitMediaTypes(accept) {\n  var accepts = accept.split(',');\n\n  for (var i = 1, j = 0; i < accepts.length; i++) {\n    if (quoteCount(accepts[j]) % 2 == 0) {\n      accepts[++j] = accepts[i];\n    } else {\n      accepts[j] += ',' + accepts[i];\n    }\n  }\n\n  // trim accepts\n  accepts.length = j + 1;\n\n  return accepts;\n}\n\n/**\n * Split a string of parameters.\n * @private\n */\n\nfunction splitParameters(str) {\n  var parameters = str.split(';');\n\n  for (var i = 1, j = 0; i < parameters.length; i++) {\n    if (quoteCount(parameters[j]) % 2 == 0) {\n      parameters[++j] = parameters[i];\n    } else {\n      parameters[j] += ';' + parameters[i];\n    }\n  }\n\n  // trim parameters\n  parameters.length = j + 1;\n\n  for (var i = 0; i < parameters.length; i++) {\n    parameters[i] = parameters[i].trim();\n  }\n\n  return parameters;\n}\n", "/*!\n * negotiator\n * Copyright(c) 2012 Federico Romero\n * Copyright(c) 2012-2014 Isaac Z. Schlueter\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\nvar preferredCharsets = require('./lib/charset')\nvar preferredEncodings = require('./lib/encoding')\nvar preferredLanguages = require('./lib/language')\nvar preferredMediaTypes = require('./lib/mediaType')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Negotiator;\nmodule.exports.Negotiator = Negotiator;\n\n/**\n * Create a Negotiator instance from a request.\n * @param {object} request\n * @public\n */\n\nfunction Negotiator(request) {\n  if (!(this instanceof Negotiator)) {\n    return new Negotiator(request);\n  }\n\n  this.request = request;\n}\n\nNegotiator.prototype.charset = function charset(available) {\n  var set = this.charsets(available);\n  return set && set[0];\n};\n\nNegotiator.prototype.charsets = function charsets(available) {\n  return preferredCharsets(this.request.headers['accept-charset'], available);\n};\n\nNegotiator.prototype.encoding = function encoding(available, opts) {\n  var set = this.encodings(available, opts);\n  return set && set[0];\n};\n\nNegotiator.prototype.encodings = function encodings(available, options) {\n  var opts = options || {};\n  return preferredEncodings(this.request.headers['accept-encoding'], available, opts.preferred);\n};\n\nNegotiator.prototype.language = function language(available) {\n  var set = this.languages(available);\n  return set && set[0];\n};\n\nNegotiator.prototype.languages = function languages(available) {\n  return preferredLanguages(this.request.headers['accept-language'], available);\n};\n\nNegotiator.prototype.mediaType = function mediaType(available) {\n  var set = this.mediaTypes(available);\n  return set && set[0];\n};\n\nNegotiator.prototype.mediaTypes = function mediaTypes(available) {\n  return preferredMediaTypes(this.request.headers.accept, available);\n};\n\n// Backwards compatibility\nNegotiator.prototype.preferredCharset = Negotiator.prototype.charset;\nNegotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;\nNegotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;\nNegotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;\nNegotiator.prototype.preferredLanguage = Negotiator.prototype.language;\nNegotiator.prototype.preferredLanguages = Negotiator.prototype.languages;\nNegotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;\nNegotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;\n", "/*!\n * accepts\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar Negotiator = require('negotiator')\nvar mime = require('mime-types')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Accepts\n\n/**\n * Create a new Accepts object for the given req.\n *\n * @param {object} req\n * @public\n */\n\nfunction Accepts (req) {\n  if (!(this instanceof Accepts)) {\n    return new Accepts(req)\n  }\n\n  this.headers = req.headers\n  this.negotiator = new Negotiator(req)\n}\n\n/**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\" or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n *     // Accept: text/html\n *     this.types('html');\n *     // => \"html\"\n *\n *     // Accept: text/*, application/json\n *     this.types('html');\n *     // => \"html\"\n *     this.types('text/html');\n *     // => \"text/html\"\n *     this.types('json', 'text');\n *     // => \"json\"\n *     this.types('application/json');\n *     // => \"application/json\"\n *\n *     // Accept: text/*, application/json\n *     this.types('image/png');\n *     this.types('png');\n *     // => undefined\n *\n *     // Accept: text/*;q=.5, application/json\n *     this.types(['html', 'json']);\n *     this.types('html', 'json');\n *     // => \"json\"\n *\n * @param {String|Array} types...\n * @return {String|Array|Boolean}\n * @public\n */\n\nAccepts.prototype.type =\nAccepts.prototype.types = function (types_) {\n  var types = types_\n\n  // support flattened arguments\n  if (types && !Array.isArray(types)) {\n    types = new Array(arguments.length)\n    for (var i = 0; i < types.length; i++) {\n      types[i] = arguments[i]\n    }\n  }\n\n  // no types, return all requested types\n  if (!types || types.length === 0) {\n    return this.negotiator.mediaTypes()\n  }\n\n  // no accept header, return first given type\n  if (!this.headers.accept) {\n    return types[0]\n  }\n\n  var mimes = types.map(extToMime)\n  var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))\n  var first = accepts[0]\n\n  return first\n    ? types[mimes.indexOf(first)]\n    : false\n}\n\n/**\n * Return accepted encodings or best fit based on `encodings`.\n *\n * Given `Accept-Encoding: gzip, deflate`\n * an array sorted by quality is returned:\n *\n *     ['gzip', 'deflate']\n *\n * @param {String|Array} encodings...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.encoding =\nAccepts.prototype.encodings = function (encodings_) {\n  var encodings = encodings_\n\n  // support flattened arguments\n  if (encodings && !Array.isArray(encodings)) {\n    encodings = new Array(arguments.length)\n    for (var i = 0; i < encodings.length; i++) {\n      encodings[i] = arguments[i]\n    }\n  }\n\n  // no encodings, return all requested encodings\n  if (!encodings || encodings.length === 0) {\n    return this.negotiator.encodings()\n  }\n\n  return this.negotiator.encodings(encodings)[0] || false\n}\n\n/**\n * Return accepted charsets or best fit based on `charsets`.\n *\n * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`\n * an array sorted by quality is returned:\n *\n *     ['utf-8', 'utf-7', 'iso-8859-1']\n *\n * @param {String|Array} charsets...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.charset =\nAccepts.prototype.charsets = function (charsets_) {\n  var charsets = charsets_\n\n  // support flattened arguments\n  if (charsets && !Array.isArray(charsets)) {\n    charsets = new Array(arguments.length)\n    for (var i = 0; i < charsets.length; i++) {\n      charsets[i] = arguments[i]\n    }\n  }\n\n  // no charsets, return all requested charsets\n  if (!charsets || charsets.length === 0) {\n    return this.negotiator.charsets()\n  }\n\n  return this.negotiator.charsets(charsets)[0] || false\n}\n\n/**\n * Return accepted languages or best fit based on `langs`.\n *\n * Given `Accept-Language: en;q=0.8, es, pt`\n * an array sorted by quality is returned:\n *\n *     ['es', 'pt', 'en']\n *\n * @param {String|Array} langs...\n * @return {Array|String}\n * @public\n */\n\nAccepts.prototype.lang =\nAccepts.prototype.langs =\nAccepts.prototype.language =\nAccepts.prototype.languages = function (languages_) {\n  var languages = languages_\n\n  // support flattened arguments\n  if (languages && !Array.isArray(languages)) {\n    languages = new Array(arguments.length)\n    for (var i = 0; i < languages.length; i++) {\n      languages[i] = arguments[i]\n    }\n  }\n\n  // no languages, return all requested languages\n  if (!languages || languages.length === 0) {\n    return this.negotiator.languages()\n  }\n\n  return this.negotiator.languages(languages)[0] || false\n}\n\n/**\n * Convert extnames to mime.\n *\n * @param {String} type\n * @return {String}\n * @private\n */\n\nfunction extToMime (type) {\n  return type.indexOf('/') === -1\n    ? mime.lookup(type)\n    : type\n}\n\n/**\n * Check if mime is valid.\n *\n * @param {String} type\n * @return {Boolean}\n * @private\n */\n\nfunction validMime (type) {\n  return typeof type === 'string'\n}\n", "/*!\n * fresh\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2016-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to check for no-cache token in Cache-Control.\n * @private\n */\n\nvar CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\\s*?no-cache\\s*?(?:,|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = fresh\n\n/**\n * Check freshness of the response using request and response headers.\n *\n * @param {Object} reqHeaders\n * @param {Object} resHeaders\n * @return {Boolean}\n * @public\n */\n\nfunction fresh (reqHeaders, resHeaders) {\n  // fields\n  var modifiedSince = reqHeaders['if-modified-since']\n  var noneMatch = reqHeaders['if-none-match']\n\n  // unconditional request\n  if (!modifiedSince && !noneMatch) {\n    return false\n  }\n\n  // Always return stale when Cache-Control: no-cache\n  // to support end-to-end reload requests\n  // https://tools.ietf.org/html/rfc2616#section-14.9.4\n  var cacheControl = reqHeaders['cache-control']\n  if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {\n    return false\n  }\n\n  // if-none-match takes precedent over if-modified-since\n  if (noneMatch) {\n    if (noneMatch === '*') {\n      return true\n    }\n    var etag = resHeaders.etag\n\n    if (!etag) {\n      return false\n    }\n\n    var matches = parseTokenList(noneMatch)\n    for (var i = 0; i < matches.length; i++) {\n      var match = matches[i]\n      if (match === etag || match === 'W/' + etag || 'W/' + match === etag) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  // if-modified-since\n  if (modifiedSince) {\n    var lastModified = resHeaders['last-modified']\n    var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince))\n\n    if (modifiedStale) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n  var timestamp = date && Date.parse(date)\n\n  // istanbul ignore next: guard against date.js Date.parse patching\n  return typeof timestamp === 'number'\n    ? timestamp\n    : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n  var end = 0\n  var list = []\n  var start = 0\n\n  // gather tokens\n  for (var i = 0, len = str.length; i < len; i++) {\n    switch (str.charCodeAt(i)) {\n      case 0x20: /*   */\n        if (start === end) {\n          start = end = i + 1\n        }\n        break\n      case 0x2c: /* , */\n        list.push(str.substring(start, end))\n        start = end = i + 1\n        break\n      default:\n        end = i + 1\n        break\n    }\n  }\n\n  // final token\n  list.push(str.substring(start, end))\n\n  return list\n}\n", "/*!\n * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = rangeParser\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser (size, str, options) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string')\n  }\n\n  var index = str.indexOf('=')\n\n  if (index === -1) {\n    return -2\n  }\n\n  // split the range string\n  var arr = str.slice(index + 1).split(',')\n  var ranges = []\n\n  // add ranges type\n  ranges.type = str.slice(0, index)\n\n  // parse all ranges\n  for (var i = 0; i < arr.length; i++) {\n    var range = arr[i].split('-')\n    var start = parseInt(range[0], 10)\n    var end = parseInt(range[1], 10)\n\n    // -nnn\n    if (isNaN(start)) {\n      start = size - end\n      end = size - 1\n    // nnn-\n    } else if (isNaN(end)) {\n      end = size - 1\n    }\n\n    // limit last-byte-pos to current length\n    if (end > size - 1) {\n      end = size - 1\n    }\n\n    // invalid or unsatisifiable\n    if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n      continue\n    }\n\n    // add range\n    ranges.push({\n      start: start,\n      end: end\n    })\n  }\n\n  if (ranges.length < 1) {\n    // unsatisifiable\n    return -1\n  }\n\n  return options && options.combine\n    ? combineRanges(ranges)\n    : ranges\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges (ranges) {\n  var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)\n\n  for (var j = 0, i = 1; i < ordered.length; i++) {\n    var range = ordered[i]\n    var current = ordered[j]\n\n    if (range.start > current.end + 1) {\n      // next range\n      ordered[++j] = range\n    } else if (range.end > current.end) {\n      // extend range\n      current.end = range.end\n      current.index = Math.min(current.index, range.index)\n    }\n  }\n\n  // trim ordered array\n  ordered.length = j + 1\n\n  // generate combined range\n  var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)\n\n  // copy ranges type\n  combined.type = ranges.type\n\n  return combined\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex (range, index) {\n  return {\n    start: range.start,\n    end: range.end,\n    index: index\n  }\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex (range) {\n  return {\n    start: range.start,\n    end: range.end\n  }\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex (a, b) {\n  return a.index - b.index\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart (a, b) {\n  return a.start - b.start\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar accepts = require('accepts');\nvar isIP = require('node:net').isIP;\nvar typeis = require('type-is');\nvar http = require('node:http');\nvar fresh = require('fresh');\nvar parseRange = require('range-parser');\nvar parse = require('parseurl');\nvar proxyaddr = require('proxy-addr');\n\n/**\n * Request prototype.\n * @public\n */\n\nvar req = Object.create(http.IncomingMessage.prototype)\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = req\n\n/**\n * Return request header.\n *\n * The `Referrer` header field is special-cased,\n * both `Referrer` and `Referer` are interchangeable.\n *\n * Examples:\n *\n *     req.get('Content-Type');\n *     // => \"text/plain\"\n *\n *     req.get('content-type');\n *     // => \"text/plain\"\n *\n *     req.get('Something');\n *     // => undefined\n *\n * Aliased as `req.header()`.\n *\n * @param {String} name\n * @return {String}\n * @public\n */\n\nreq.get =\nreq.header = function header(name) {\n  if (!name) {\n    throw new TypeError('name argument is required to req.get');\n  }\n\n  if (typeof name !== 'string') {\n    throw new TypeError('name must be a string to req.get');\n  }\n\n  var lc = name.toLowerCase();\n\n  switch (lc) {\n    case 'referer':\n    case 'referrer':\n      return this.headers.referrer\n        || this.headers.referer;\n    default:\n      return this.headers[lc];\n  }\n};\n\n/**\n * To do: update docs.\n *\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single MIME type string\n * such as \"application/json\", an extension name\n * such as \"json\", a comma-delimited list such as \"json, html, text/plain\",\n * an argument list such as `\"json\", \"html\", \"text/plain\"`,\n * or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given, the _best_ match, if any is returned.\n *\n * Examples:\n *\n *     // Accept: text/html\n *     req.accepts('html');\n *     // => \"html\"\n *\n *     // Accept: text/*, application/json\n *     req.accepts('html');\n *     // => \"html\"\n *     req.accepts('text/html');\n *     // => \"text/html\"\n *     req.accepts('json, text');\n *     // => \"json\"\n *     req.accepts('application/json');\n *     // => \"application/json\"\n *\n *     // Accept: text/*, application/json\n *     req.accepts('image/png');\n *     req.accepts('png');\n *     // => undefined\n *\n *     // Accept: text/*;q=.5, application/json\n *     req.accepts(['html', 'json']);\n *     req.accepts('html', 'json');\n *     req.accepts('html, json');\n *     // => \"json\"\n *\n * @param {String|Array} type(s)\n * @return {String|Array|Boolean}\n * @public\n */\n\nreq.accepts = function(){\n  var accept = accepts(this);\n  return accept.types.apply(accept, arguments);\n};\n\n/**\n * Check if the given `encoding`s are accepted.\n *\n * @param {String} ...encoding\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsEncodings = function(){\n  var accept = accepts(this);\n  return accept.encodings.apply(accept, arguments);\n};\n\n/**\n * Check if the given `charset`s are acceptable,\n * otherwise you should respond with 406 \"Not Acceptable\".\n *\n * @param {String} ...charset\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsCharsets = function(){\n  var accept = accepts(this);\n  return accept.charsets.apply(accept, arguments);\n};\n\n/**\n * Check if the given `lang`s are acceptable,\n * otherwise you should respond with 406 \"Not Acceptable\".\n *\n * @param {String} ...lang\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsLanguages = function(...languages) {\n  return accepts(this).languages(...languages);\n};\n\n/**\n * Parse Range header field, capping to the given `size`.\n *\n * Unspecified ranges such as \"0-\" require knowledge of your resource length. In\n * the case of a byte range this is of course the total number of bytes. If the\n * Range header field is not given `undefined` is returned, `-1` when unsatisfiable,\n * and `-2` when syntactically invalid.\n *\n * When ranges are returned, the array has a \"type\" property which is the type of\n * range that is required (most commonly, \"bytes\"). Each array element is an object\n * with a \"start\" and \"end\" property for the portion of the range.\n *\n * The \"combine\" option can be set to `true` and overlapping & adjacent ranges\n * will be combined into a single range.\n *\n * NOTE: remember that ranges are inclusive, so for example \"Range: users=0-3\"\n * should respond with 4 users when available, not 3.\n *\n * @param {number} size\n * @param {object} [options]\n * @param {boolean} [options.combine=false]\n * @return {number|array}\n * @public\n */\n\nreq.range = function range(size, options) {\n  var range = this.get('Range');\n  if (!range) return;\n  return parseRange(size, range, options);\n};\n\n/**\n * Parse the query string of `req.url`.\n *\n * This uses the \"query parser\" setting to parse the raw\n * string into an object.\n *\n * @return {String}\n * @api public\n */\n\ndefineGetter(req, 'query', function query(){\n  var queryparse = this.app.get('query parser fn');\n\n  if (!queryparse) {\n    // parsing is disabled\n    return Object.create(null);\n  }\n\n  var querystring = parse(this).query;\n\n  return queryparse(querystring);\n});\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains the given mime `type`.\n *\n * Examples:\n *\n *      // With Content-Type: text/html; charset=utf-8\n *      req.is('html');\n *      req.is('text/html');\n *      req.is('text/*');\n *      // => true\n *\n *      // When Content-Type is application/json\n *      req.is('json');\n *      req.is('application/json');\n *      req.is('application/*');\n *      // => true\n *\n *      req.is('html');\n *      // => false\n *\n * @param {String|Array} types...\n * @return {String|false|null}\n * @public\n */\n\nreq.is = function is(types) {\n  var arr = types;\n\n  // support flattened arguments\n  if (!Array.isArray(types)) {\n    arr = new Array(arguments.length);\n    for (var i = 0; i < arr.length; i++) {\n      arr[i] = arguments[i];\n    }\n  }\n\n  return typeis(this, arr);\n};\n\n/**\n * Return the protocol string \"http\" or \"https\"\n * when requested with TLS. When the \"trust proxy\"\n * setting trusts the socket address, the\n * \"X-Forwarded-Proto\" header field will be trusted\n * and used if present.\n *\n * If you're running behind a reverse proxy that\n * supplies https for you this may be enabled.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'protocol', function protocol(){\n  var proto = this.socket.encrypted\n    ? 'https'\n    : 'http';\n  var trust = this.app.get('trust proxy fn');\n\n  if (!trust(this.socket.remoteAddress, 0)) {\n    return proto;\n  }\n\n  // Note: X-Forwarded-Proto is normally only ever a\n  //       single value, but this is to be safe.\n  var header = this.get('X-Forwarded-Proto') || proto\n  var index = header.indexOf(',')\n\n  return index !== -1\n    ? header.substring(0, index).trim()\n    : header.trim()\n});\n\n/**\n * Short-hand for:\n *\n *    req.protocol === 'https'\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'secure', function secure(){\n  return this.protocol === 'https';\n});\n\n/**\n * Return the remote address from the trusted proxy.\n *\n * The is the remote address on the socket unless\n * \"trust proxy\" is set.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'ip', function ip(){\n  var trust = this.app.get('trust proxy fn');\n  return proxyaddr(this, trust);\n});\n\n/**\n * When \"trust proxy\" is set, trusted proxy addresses + client.\n *\n * For example if the value were \"client, proxy1, proxy2\"\n * you would receive the array `[\"client\", \"proxy1\", \"proxy2\"]`\n * where \"proxy2\" is the furthest down-stream and \"proxy1\" and\n * \"proxy2\" were trusted.\n *\n * @return {Array}\n * @public\n */\n\ndefineGetter(req, 'ips', function ips() {\n  var trust = this.app.get('trust proxy fn');\n  var addrs = proxyaddr.all(this, trust);\n\n  // reverse the order (to farthest -> closest)\n  // and remove socket address\n  addrs.reverse().pop()\n\n  return addrs\n});\n\n/**\n * Return subdomains as an array.\n *\n * Subdomains are the dot-separated parts of the host before the main domain of\n * the app. By default, the domain of the app is assumed to be the last two\n * parts of the host. This can be changed by setting \"subdomain offset\".\n *\n * For example, if the domain is \"tobi.ferrets.example.com\":\n * If \"subdomain offset\" is not set, req.subdomains is `[\"ferrets\", \"tobi\"]`.\n * If \"subdomain offset\" is 3, req.subdomains is `[\"tobi\"]`.\n *\n * @return {Array}\n * @public\n */\n\ndefineGetter(req, 'subdomains', function subdomains() {\n  var hostname = this.hostname;\n\n  if (!hostname) return [];\n\n  var offset = this.app.get('subdomain offset');\n  var subdomains = !isIP(hostname)\n    ? hostname.split('.').reverse()\n    : [hostname];\n\n  return subdomains.slice(offset);\n});\n\n/**\n * Short-hand for `url.parse(req.url).pathname`.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'path', function path() {\n  return parse(this).pathname;\n});\n\n/**\n * Parse the \"Host\" header field to a host.\n *\n * When the \"trust proxy\" setting trusts the socket\n * address, the \"X-Forwarded-Host\" header field will\n * be trusted.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'host', function host(){\n  var trust = this.app.get('trust proxy fn');\n  var val = this.get('X-Forwarded-Host');\n\n  if (!val || !trust(this.socket.remoteAddress, 0)) {\n    val = this.get('Host');\n  } else if (val.indexOf(',') !== -1) {\n    // Note: X-Forwarded-Host is normally only ever a\n    //       single value, but this is to be safe.\n    val = val.substring(0, val.indexOf(',')).trimRight()\n  }\n\n  return val || undefined;\n});\n\n/**\n * Parse the \"Host\" header field to a hostname.\n *\n * When the \"trust proxy\" setting trusts the socket\n * address, the \"X-Forwarded-Host\" header field will\n * be trusted.\n *\n * @return {String}\n * @api public\n */\n\ndefineGetter(req, 'hostname', function hostname(){\n  var host = this.host;\n\n  if (!host) return;\n\n  // IPv6 literal support\n  var offset = host[0] === '['\n    ? host.indexOf(']') + 1\n    : 0;\n  var index = host.indexOf(':', offset);\n\n  return index !== -1\n    ? host.substring(0, index)\n    : host;\n});\n\n/**\n * Check if the request is fresh, aka\n * Last-Modified or the ETag\n * still match.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'fresh', function(){\n  var method = this.method;\n  var res = this.res\n  var status = res.statusCode\n\n  // GET or HEAD for weak freshness validation only\n  if ('GET' !== method && 'HEAD' !== method) return false;\n\n  // 2xx or 304 as per rfc2616 14.26\n  if ((status >= 200 && status < 300) || 304 === status) {\n    return fresh(this.headers, {\n      'etag': res.get('ETag'),\n      'last-modified': res.get('Last-Modified')\n    })\n  }\n\n  return false;\n});\n\n/**\n * Check if the request is stale, aka\n * \"Last-Modified\" and / or the \"ETag\" for the\n * resource has changed.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'stale', function stale(){\n  return !this.fresh;\n});\n\n/**\n * Check if the request was an _XMLHttpRequest_.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'xhr', function xhr(){\n  var val = this.get('X-Requested-With') || '';\n  return val.toLowerCase() === 'xmlhttprequest';\n});\n\n/**\n * Helper function for creating a getter on an object.\n *\n * @param {Object} obj\n * @param {String} name\n * @param {Function} getter\n * @private\n */\nfunction defineGetter(obj, name, getter) {\n  Object.defineProperty(obj, name, {\n    configurable: true,\n    enumerable: true,\n    get: getter\n  });\n}\n", "/*!\n * content-disposition\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = contentDisposition\nmodule.exports.parse = parse\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar basename = require('path').basename\n\n/**\n * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including \"%\")\n * @private\n */\n\nvar ENCODE_URL_ATTR_CHAR_REGEXP = /[\\x00-\\x20\"'()*,/:;<=>?@[\\\\\\]{}\\x7f]/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match percent encoding escape.\n * @private\n */\n\nvar HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/\nvar HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g\n\n/**\n * RegExp to match non-latin1 characters.\n * @private\n */\n\nvar NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR        = <any US-ASCII character (octets 0 - 127)>\n * @private\n */\n\nvar QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n * @private\n */\n\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter     = token \"=\" ( token | quoted-string )\n * token         = 1*<any CHAR except CTLs or separators>\n * separators    = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *               | \",\" | \";\" | \":\" | \"\\\" | <\">\n *               | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *               | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext        = <any TEXT except <\">>\n * quoted-pair   = \"\\\" CHAR\n * CHAR          = <any US-ASCII character (octets 0 - 127)>\n * TEXT          = <any OCTET except CTLs, but including LWS>\n * LWS           = [CRLF] 1*( SP | HT )\n * CRLF          = CR LF\n * CR            = <US-ASCII CR, carriage return (13)>\n * LF            = <US-ASCII LF, linefeed (10)>\n * SP            = <US-ASCII SP, space (32)>\n * HT            = <US-ASCII HT, horizontal-tab (9)>\n * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET         = <any 8-bit sequence of data>\n * @private\n */\n\nvar PARAM_REGEXP = /;[\\x09\\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*=[\\x09\\x20]*(\"(?:[\\x20!\\x23-\\x5b\\x5d-\\x7e\\x80-\\xff]|\\\\[\\x20-\\x7e])*\"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*/g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\x20-\\x7e\\x80-\\xff]+$/\nvar TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value     = charset  \"'\" [ language ] \"'\" value-chars\n * charset       = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset  = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n *               / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n *               / \"{\" / \"}\" / \"~\"\n * language      = ( 2*3ALPHA [ extlang ] )\n *               / 4ALPHA\n *               / 5*8ALPHA\n * extlang       = *3( \"-\" 3ALPHA )\n * value-chars   = *( pct-encoded / attr-char )\n * pct-encoded   = \"%\" HEXDIG HEXDIG\n * attr-char     = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n *               / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * @private\n */\n\nvar EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type    = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm    = \"filename\" \"=\" value\n *                  | \"filename*\" \"=\" ext-value\n * disp-ext-parm    = token \"=\" value\n *                  | ext-token \"=\" ext-value\n * ext-token        = <the characters in token, followed by \"*\">\n * @private\n */\n\nvar DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/ // eslint-disable-line no-control-regex\n\n/**\n * Create an attachment Content-Disposition header.\n *\n * @param {string} [filename]\n * @param {object} [options]\n * @param {string} [options.type=attachment]\n * @param {string|boolean} [options.fallback=true]\n * @return {string}\n * @public\n */\n\nfunction contentDisposition (filename, options) {\n  var opts = options || {}\n\n  // get type\n  var type = opts.type || 'attachment'\n\n  // get parameters\n  var params = createparams(filename, opts.fallback)\n\n  // format into string\n  return format(new ContentDisposition(type, params))\n}\n\n/**\n * Create parameters object from filename and fallback.\n *\n * @param {string} [filename]\n * @param {string|boolean} [fallback=true]\n * @return {object}\n * @private\n */\n\nfunction createparams (filename, fallback) {\n  if (filename === undefined) {\n    return\n  }\n\n  var params = {}\n\n  if (typeof filename !== 'string') {\n    throw new TypeError('filename must be a string')\n  }\n\n  // fallback defaults to true\n  if (fallback === undefined) {\n    fallback = true\n  }\n\n  if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {\n    throw new TypeError('fallback must be a string or boolean')\n  }\n\n  if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {\n    throw new TypeError('fallback must be ISO-8859-1 string')\n  }\n\n  // restrict to file base name\n  var name = basename(filename)\n\n  // determine if name is suitable for quoted string\n  var isQuotedString = TEXT_REGEXP.test(name)\n\n  // generate fallback name\n  var fallbackName = typeof fallback !== 'string'\n    ? fallback && getlatin1(name)\n    : basename(fallback)\n  var hasFallback = typeof fallbackName === 'string' && fallbackName !== name\n\n  // set extended filename parameter\n  if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {\n    params['filename*'] = name\n  }\n\n  // set filename parameter\n  if (isQuotedString || hasFallback) {\n    params.filename = hasFallback\n      ? fallbackName\n      : name\n  }\n\n  return params\n}\n\n/**\n * Format object to Content-Disposition header.\n *\n * @param {object} obj\n * @param {string} obj.type\n * @param {object} [obj.parameters]\n * @return {string}\n * @private\n */\n\nfunction format (obj) {\n  var parameters = obj.parameters\n  var type = obj.type\n\n  if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  // start with normalized type\n  var string = String(type).toLowerCase()\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      var val = param.slice(-1) === '*'\n        ? ustring(parameters[param])\n        : qstring(parameters[param])\n\n      string += '; ' + param + '=' + val\n    }\n  }\n\n  return string\n}\n\n/**\n * Decode a RFC 5987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction decodefield (str) {\n  var match = EXT_VALUE_REGEXP.exec(str)\n\n  if (!match) {\n    throw new TypeError('invalid extended field value')\n  }\n\n  var charset = match[1].toLowerCase()\n  var encoded = match[2]\n  var value\n\n  // to binary string\n  var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)\n\n  switch (charset) {\n    case 'iso-8859-1':\n      value = getlatin1(binary)\n      break\n    case 'utf-8':\n    case 'utf8':\n      value = Buffer.from(binary, 'binary').toString('utf8')\n      break\n    default:\n      throw new TypeError('unsupported charset in extended field')\n  }\n\n  return value\n}\n\n/**\n * Get ISO-8859-1 version of string.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction getlatin1 (val) {\n  // simple Unicode -> ISO-8859-1 transformation\n  return String(val).replace(NON_LATIN1_REGEXP, '?')\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction parse (string) {\n  if (!string || typeof string !== 'string') {\n    throw new TypeError('argument string is required')\n  }\n\n  var match = DISPOSITION_TYPE_REGEXP.exec(string)\n\n  if (!match) {\n    throw new TypeError('invalid type format')\n  }\n\n  // normalize type\n  var index = match[0].length\n  var type = match[1].toLowerCase()\n\n  var key\n  var names = []\n  var params = {}\n  var value\n\n  // calculate index to start at\n  index = PARAM_REGEXP.lastIndex = match[0].slice(-1) === ';'\n    ? index - 1\n    : index\n\n  // match parameters\n  while ((match = PARAM_REGEXP.exec(string))) {\n    if (match.index !== index) {\n      throw new TypeError('invalid parameter format')\n    }\n\n    index += match[0].length\n    key = match[1].toLowerCase()\n    value = match[2]\n\n    if (names.indexOf(key) !== -1) {\n      throw new TypeError('invalid duplicate parameter')\n    }\n\n    names.push(key)\n\n    if (key.indexOf('*') + 1 === key.length) {\n      // decode extended value\n      key = key.slice(0, -1)\n      value = decodefield(value)\n\n      // overwrite existing value\n      params[key] = value\n      continue\n    }\n\n    if (typeof params[key] === 'string') {\n      continue\n    }\n\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value\n        .slice(1, -1)\n        .replace(QESC_REGEXP, '$1')\n    }\n\n    params[key] = value\n  }\n\n  if (index !== -1 && index !== string.length) {\n    throw new TypeError('invalid parameter format')\n  }\n\n  return new ContentDisposition(type, params)\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @private\n */\n\nfunction pdecode (str, hex) {\n  return String.fromCharCode(parseInt(hex, 16))\n}\n\n/**\n * Percent encode a single character.\n *\n * @param {string} char\n * @return {string}\n * @private\n */\n\nfunction pencode (char) {\n  return '%' + String(char)\n    .charCodeAt(0)\n    .toString(16)\n    .toUpperCase()\n}\n\n/**\n * Quote a string for HTTP.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n  var str = String(val)\n\n  return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Encode a Unicode string for HTTP (RFC 5987).\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction ustring (val) {\n  var str = String(val)\n\n  // percent encode as UTF-8\n  var encoded = encodeURIComponent(str)\n    .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)\n\n  return 'UTF-8\\'\\'' + encoded\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n *\n * @public\n * @param {string} type\n * @param {object} parameters\n * @constructor\n */\n\nfunction ContentDisposition (type, parameters) {\n  this.type = type\n  this.parameters = parameters\n}\n", "/**\n * Module dependencies.\n */\n\nvar crypto = require('crypto');\n\n/**\n * Sign the given `val` with `secret`.\n *\n * @param {String} val\n * @param {String|NodeJS.ArrayBufferView|crypto.KeyObject} secret\n * @return {String}\n * @api private\n */\n\nexports.sign = function(val, secret){\n  if ('string' != typeof val) throw new TypeError(\"Cookie value must be provided as a string.\");\n  if (null == secret) throw new TypeError(\"Secret key must be provided.\");\n  return val + '.' + crypto\n    .createHmac('sha256', secret)\n    .update(val)\n    .digest('base64')\n    .replace(/\\=+$/, '');\n};\n\n/**\n * Unsign and decode the given `input` with `secret`,\n * returning `false` if the signature is invalid.\n *\n * @param {String} input\n * @param {String|NodeJS.ArrayBufferView|crypto.KeyObject} secret\n * @return {String|Boolean}\n * @api private\n */\n\nexports.unsign = function(input, secret){\n  if ('string' != typeof input) throw new TypeError(\"Signed cookie string must be provided.\");\n  if (null == secret) throw new TypeError(\"Secret key must be provided.\");\n  var tentativeValue = input.slice(0, input.lastIndexOf('.')),\n      expectedInput = exports.sign(tentativeValue, secret),\n      expectedBuffer = Buffer.from(expectedInput),\n      inputBuffer = Buffer.from(input);\n  return (\n    expectedBuffer.length === inputBuffer.length &&\n    crypto.timingSafeEqual(expectedBuffer, inputBuffer)\n   ) ? tentativeValue : false;\n};\n", "/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\nvar __hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * RegExp to match cookie-name in RFC 6265 sec 4.1.1\n * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2\n * which has been replaced by the token definition in RFC 7230 appendix B.\n *\n * cookie-name       = token\n * token             = 1*tchar\n * tchar             = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" /\n *                     \"*\" / \"+\" / \"-\" / \".\" / \"^\" / \"_\" /\n *                     \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\n */\n\nvar cookieNameRegExp = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\n/**\n * RegExp to match cookie-value in RFC 6265 sec 4.1.1\n *\n * cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n * cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n *                     ; US-ASCII characters excluding CTLs,\n *                     ; whitespace DQUOTE, comma, semicolon,\n *                     ; and backslash\n */\n\nvar cookieValueRegExp = /^(\"?)[\\u0021\\u0023-\\u002B\\u002D-\\u003A\\u003C-\\u005B\\u005D-\\u007E]*\\1$/;\n\n/**\n * RegExp to match domain-value in RFC 6265 sec 4.1.1\n *\n * domain-value      = <subdomain>\n *                     ; defined in [RFC1034], Section 3.5, as\n *                     ; enhanced by [RFC1123], Section 2.1\n * <subdomain>       = <label> | <subdomain> \".\" <label>\n * <label>           = <let-dig> [ [ <ldh-str> ] <let-dig> ]\n *                     Labels must be 63 characters or less.\n *                     'let-dig' not 'letter' in the first char, per RFC1123\n * <ldh-str>         = <let-dig-hyp> | <let-dig-hyp> <ldh-str>\n * <let-dig-hyp>     = <let-dig> | \"-\"\n * <let-dig>         = <letter> | <digit>\n * <letter>          = any one of the 52 alphabetic characters A through Z in\n *                     upper case and a through z in lower case\n * <digit>           = any one of the ten digits 0 through 9\n *\n * Keep support for leading dot: https://github.com/jshttp/cookie/issues/173\n *\n * > (Note that a leading %x2E (\".\"), if present, is ignored even though that\n * character is not permitted, but a trailing %x2E (\".\"), if present, will\n * cause the user agent to ignore the attribute.)\n */\n\nvar domainValueRegExp = /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;\n\n/**\n * RegExp to match path-value in RFC 6265 sec 4.1.1\n *\n * path-value        = <any CHAR except CTLs or \";\">\n * CHAR              = %x01-7F\n *                     ; defined in RFC 5234 appendix B.1\n */\n\nvar pathValueRegExp = /^[\\u0020-\\u003A\\u003D-\\u007E]*$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [opt]\n * @return {object}\n * @public\n */\n\nfunction parse(str, opt) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string');\n  }\n\n  var obj = {};\n  var len = str.length;\n  // RFC 6265 sec 4.1.1, RFC 2616 2.2 defines a cookie name consists of one char minimum, plus '='.\n  if (len < 2) return obj;\n\n  var dec = (opt && opt.decode) || decode;\n  var index = 0;\n  var eqIdx = 0;\n  var endIdx = 0;\n\n  do {\n    eqIdx = str.indexOf('=', index);\n    if (eqIdx === -1) break; // No more cookie pairs.\n\n    endIdx = str.indexOf(';', index);\n\n    if (endIdx === -1) {\n      endIdx = len;\n    } else if (eqIdx > endIdx) {\n      // backtrack on prior semicolon\n      index = str.lastIndexOf(';', eqIdx - 1) + 1;\n      continue;\n    }\n\n    var keyStartIdx = startIndex(str, index, eqIdx);\n    var keyEndIdx = endIndex(str, eqIdx, keyStartIdx);\n    var key = str.slice(keyStartIdx, keyEndIdx);\n\n    // only assign once\n    if (!__hasOwnProperty.call(obj, key)) {\n      var valStartIdx = startIndex(str, eqIdx + 1, endIdx);\n      var valEndIdx = endIndex(str, endIdx, valStartIdx);\n\n      if (str.charCodeAt(valStartIdx) === 0x22 /* \" */ && str.charCodeAt(valEndIdx - 1) === 0x22 /* \" */) {\n        valStartIdx++;\n        valEndIdx--;\n      }\n\n      var val = str.slice(valStartIdx, valEndIdx);\n      obj[key] = tryDecode(val, dec);\n    }\n\n    index = endIdx + 1\n  } while (index < len);\n\n  return obj;\n}\n\nfunction startIndex(str, index, max) {\n  do {\n    var code = str.charCodeAt(index);\n    if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */) return index;\n  } while (++index < max);\n  return max;\n}\n\nfunction endIndex(str, index, min) {\n  while (index > min) {\n    var code = str.charCodeAt(--index);\n    if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */) return index + 1;\n  }\n  return min;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize a name value pair into a cookie string suitable for\n * http headers. An optional options object specifies cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n *   => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [opt]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, opt) {\n  var enc = (opt && opt.encode) || encodeURIComponent;\n\n  if (typeof enc !== 'function') {\n    throw new TypeError('option encode is invalid');\n  }\n\n  if (!cookieNameRegExp.test(name)) {\n    throw new TypeError('argument name is invalid');\n  }\n\n  var value = enc(val);\n\n  if (!cookieValueRegExp.test(value)) {\n    throw new TypeError('argument val is invalid');\n  }\n\n  var str = name + '=' + value;\n  if (!opt) return str;\n\n  if (null != opt.maxAge) {\n    var maxAge = Math.floor(opt.maxAge);\n\n    if (!isFinite(maxAge)) {\n      throw new TypeError('option maxAge is invalid')\n    }\n\n    str += '; Max-Age=' + maxAge;\n  }\n\n  if (opt.domain) {\n    if (!domainValueRegExp.test(opt.domain)) {\n      throw new TypeError('option domain is invalid');\n    }\n\n    str += '; Domain=' + opt.domain;\n  }\n\n  if (opt.path) {\n    if (!pathValueRegExp.test(opt.path)) {\n      throw new TypeError('option path is invalid');\n    }\n\n    str += '; Path=' + opt.path;\n  }\n\n  if (opt.expires) {\n    var expires = opt.expires\n\n    if (!isDate(expires) || isNaN(expires.valueOf())) {\n      throw new TypeError('option expires is invalid');\n    }\n\n    str += '; Expires=' + expires.toUTCString()\n  }\n\n  if (opt.httpOnly) {\n    str += '; HttpOnly';\n  }\n\n  if (opt.secure) {\n    str += '; Secure';\n  }\n\n  if (opt.partitioned) {\n    str += '; Partitioned'\n  }\n\n  if (opt.priority) {\n    var priority = typeof opt.priority === 'string'\n      ? opt.priority.toLowerCase() : opt.priority;\n\n    switch (priority) {\n      case 'low':\n        str += '; Priority=Low'\n        break\n      case 'medium':\n        str += '; Priority=Medium'\n        break\n      case 'high':\n        str += '; Priority=High'\n        break\n      default:\n        throw new TypeError('option priority is invalid')\n    }\n  }\n\n  if (opt.sameSite) {\n    var sameSite = typeof opt.sameSite === 'string'\n      ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n    switch (sameSite) {\n      case true:\n        str += '; SameSite=Strict';\n        break;\n      case 'lax':\n        str += '; SameSite=Lax';\n        break;\n      case 'strict':\n        str += '; SameSite=Strict';\n        break;\n      case 'none':\n        str += '; SameSite=None';\n        break;\n      default:\n        throw new TypeError('option sameSite is invalid');\n    }\n  }\n\n  return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n  return str.indexOf('%') !== -1\n    ? decodeURIComponent(str)\n    : str\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n  return __toString.call(val) === '[object Date]';\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n  try {\n    return decode(str);\n  } catch (e) {\n    return str;\n  }\n}\n", "/*!\n * send\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar debug = require('debug')('send')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar etag = require('etag')\nvar fresh = require('fresh')\nvar fs = require('fs')\nvar mime = require('mime-types')\nvar ms = require('ms')\nvar onFinished = require('on-finished')\nvar parseRange = require('range-parser')\nvar path = require('path')\nvar statuses = require('statuses')\nvar Stream = require('stream')\nvar util = require('util')\n\n/**\n * Path function references.\n * @private\n */\n\nvar extname = path.extname\nvar join = path.join\nvar normalize = path.normalize\nvar resolve = path.resolve\nvar sep = path.sep\n\n/**\n * Regular expression for identifying a bytes Range header.\n * @private\n */\n\nvar BYTES_RANGE_REGEXP = /^ *bytes=/\n\n/**\n * Maximum value allowed for the max age.\n * @private\n */\n\nvar MAX_MAXAGE = 60 * 60 * 24 * 365 * 1000 // 1 year\n\n/**\n * Regular expression to match a path with a directory up component.\n * @private\n */\n\nvar UP_PATH_REGEXP = /(?:^|[\\\\/])\\.\\.(?:[\\\\/]|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = send\n\n/**\n * Return a `SendStream` for `req` and `path`.\n *\n * @param {object} req\n * @param {string} path\n * @param {object} [options]\n * @return {SendStream}\n * @public\n */\n\nfunction send (req, path, options) {\n  return new SendStream(req, path, options)\n}\n\n/**\n * Initialize a `SendStream` with the given `path`.\n *\n * @param {Request} req\n * @param {String} path\n * @param {object} [options]\n * @private\n */\n\nfunction SendStream (req, path, options) {\n  Stream.call(this)\n\n  var opts = options || {}\n\n  this.options = opts\n  this.path = path\n  this.req = req\n\n  this._acceptRanges = opts.acceptRanges !== undefined\n    ? Boolean(opts.acceptRanges)\n    : true\n\n  this._cacheControl = opts.cacheControl !== undefined\n    ? Boolean(opts.cacheControl)\n    : true\n\n  this._etag = opts.etag !== undefined\n    ? Boolean(opts.etag)\n    : true\n\n  this._dotfiles = opts.dotfiles !== undefined\n    ? opts.dotfiles\n    : 'ignore'\n\n  if (this._dotfiles !== 'ignore' && this._dotfiles !== 'allow' && this._dotfiles !== 'deny') {\n    throw new TypeError('dotfiles option must be \"allow\", \"deny\", or \"ignore\"')\n  }\n\n  this._extensions = opts.extensions !== undefined\n    ? normalizeList(opts.extensions, 'extensions option')\n    : []\n\n  this._immutable = opts.immutable !== undefined\n    ? Boolean(opts.immutable)\n    : false\n\n  this._index = opts.index !== undefined\n    ? normalizeList(opts.index, 'index option')\n    : ['index.html']\n\n  this._lastModified = opts.lastModified !== undefined\n    ? Boolean(opts.lastModified)\n    : true\n\n  this._maxage = opts.maxAge || opts.maxage\n  this._maxage = typeof this._maxage === 'string'\n    ? ms(this._maxage)\n    : Number(this._maxage)\n  this._maxage = !isNaN(this._maxage)\n    ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)\n    : 0\n\n  this._root = opts.root\n    ? resolve(opts.root)\n    : null\n}\n\n/**\n * Inherits from `Stream`.\n */\n\nutil.inherits(SendStream, Stream)\n\n/**\n * Emit error with `status`.\n *\n * @param {number} status\n * @param {Error} [err]\n * @private\n */\n\nSendStream.prototype.error = function error (status, err) {\n  // emit if listeners instead of responding\n  if (hasListeners(this, 'error')) {\n    return this.emit('error', createHttpError(status, err))\n  }\n\n  var res = this.res\n  var msg = statuses.message[status] || String(status)\n  var doc = createHtmlDocument('Error', escapeHtml(msg))\n\n  // clear existing headers\n  clearHeaders(res)\n\n  // add error headers\n  if (err && err.headers) {\n    setHeaders(res, err.headers)\n  }\n\n  // send basic response\n  res.statusCode = status\n  res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n  res.setHeader('Content-Length', Buffer.byteLength(doc))\n  res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n  res.setHeader('X-Content-Type-Options', 'nosniff')\n  res.end(doc)\n}\n\n/**\n * Check if the pathname ends with \"/\".\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.hasTrailingSlash = function hasTrailingSlash () {\n  return this.path[this.path.length - 1] === '/'\n}\n\n/**\n * Check if this is a conditional GET request.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isConditionalGET = function isConditionalGET () {\n  return this.req.headers['if-match'] ||\n    this.req.headers['if-unmodified-since'] ||\n    this.req.headers['if-none-match'] ||\n    this.req.headers['if-modified-since']\n}\n\n/**\n * Check if the request preconditions failed.\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.isPreconditionFailure = function isPreconditionFailure () {\n  var req = this.req\n  var res = this.res\n\n  // if-match\n  var match = req.headers['if-match']\n  if (match) {\n    var etag = res.getHeader('ETag')\n    return !etag || (match !== '*' && parseTokenList(match).every(function (match) {\n      return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag\n    }))\n  }\n\n  // if-unmodified-since\n  var unmodifiedSince = parseHttpDate(req.headers['if-unmodified-since'])\n  if (!isNaN(unmodifiedSince)) {\n    var lastModified = parseHttpDate(res.getHeader('Last-Modified'))\n    return isNaN(lastModified) || lastModified > unmodifiedSince\n  }\n\n  return false\n}\n\n/**\n * Strip various content header fields for a change in entity.\n *\n * @private\n */\n\nSendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields () {\n  var res = this.res\n\n  res.removeHeader('Content-Encoding')\n  res.removeHeader('Content-Language')\n  res.removeHeader('Content-Length')\n  res.removeHeader('Content-Range')\n  res.removeHeader('Content-Type')\n}\n\n/**\n * Respond with 304 not modified.\n *\n * @api private\n */\n\nSendStream.prototype.notModified = function notModified () {\n  var res = this.res\n  debug('not modified')\n  this.removeContentHeaderFields()\n  res.statusCode = 304\n  res.end()\n}\n\n/**\n * Raise error that headers already sent.\n *\n * @api private\n */\n\nSendStream.prototype.headersAlreadySent = function headersAlreadySent () {\n  var err = new Error('Can\\'t set headers after they are sent.')\n  debug('headers already sent')\n  this.error(500, err)\n}\n\n/**\n * Check if the request is cacheable, aka\n * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}).\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isCachable = function isCachable () {\n  var statusCode = this.res.statusCode\n  return (statusCode >= 200 && statusCode < 300) ||\n    statusCode === 304\n}\n\n/**\n * Handle stat() error.\n *\n * @param {Error} error\n * @private\n */\n\nSendStream.prototype.onStatError = function onStatError (error) {\n  switch (error.code) {\n    case 'ENAMETOOLONG':\n    case 'ENOENT':\n    case 'ENOTDIR':\n      this.error(404, error)\n      break\n    default:\n      this.error(500, error)\n      break\n  }\n}\n\n/**\n * Check if the cache is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isFresh = function isFresh () {\n  return fresh(this.req.headers, {\n    etag: this.res.getHeader('ETag'),\n    'last-modified': this.res.getHeader('Last-Modified')\n  })\n}\n\n/**\n * Check if the range is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isRangeFresh = function isRangeFresh () {\n  var ifRange = this.req.headers['if-range']\n\n  if (!ifRange) {\n    return true\n  }\n\n  // if-range as etag\n  if (ifRange.indexOf('\"') !== -1) {\n    var etag = this.res.getHeader('ETag')\n    return Boolean(etag && ifRange.indexOf(etag) !== -1)\n  }\n\n  // if-range as modified date\n  var lastModified = this.res.getHeader('Last-Modified')\n  return parseHttpDate(lastModified) <= parseHttpDate(ifRange)\n}\n\n/**\n * Redirect to path.\n *\n * @param {string} path\n * @private\n */\n\nSendStream.prototype.redirect = function redirect (path) {\n  var res = this.res\n\n  if (hasListeners(this, 'directory')) {\n    this.emit('directory', res, path)\n    return\n  }\n\n  if (this.hasTrailingSlash()) {\n    this.error(403)\n    return\n  }\n\n  var loc = encodeUrl(collapseLeadingSlashes(this.path + '/'))\n  var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + escapeHtml(loc))\n\n  // redirect\n  res.statusCode = 301\n  res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n  res.setHeader('Content-Length', Buffer.byteLength(doc))\n  res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n  res.setHeader('X-Content-Type-Options', 'nosniff')\n  res.setHeader('Location', loc)\n  res.end(doc)\n}\n\n/**\n * Pipe to `res.\n *\n * @param {Stream} res\n * @return {Stream} res\n * @api public\n */\n\nSendStream.prototype.pipe = function pipe (res) {\n  // root path\n  var root = this._root\n\n  // references\n  this.res = res\n\n  // decode the path\n  var path = decode(this.path)\n  if (path === -1) {\n    this.error(400)\n    return res\n  }\n\n  // null byte(s)\n  if (~path.indexOf('\\0')) {\n    this.error(400)\n    return res\n  }\n\n  var parts\n  if (root !== null) {\n    // normalize\n    if (path) {\n      path = normalize('.' + sep + path)\n    }\n\n    // malicious path\n    if (UP_PATH_REGEXP.test(path)) {\n      debug('malicious path \"%s\"', path)\n      this.error(403)\n      return res\n    }\n\n    // explode path parts\n    parts = path.split(sep)\n\n    // join / normalize from optional root dir\n    path = normalize(join(root, path))\n  } else {\n    // \"..\" is malicious without \"root\"\n    if (UP_PATH_REGEXP.test(path)) {\n      debug('malicious path \"%s\"', path)\n      this.error(403)\n      return res\n    }\n\n    // explode path parts\n    parts = normalize(path).split(sep)\n\n    // resolve the path\n    path = resolve(path)\n  }\n\n  // dotfile handling\n  if (containsDotFile(parts)) {\n    debug('%s dotfile \"%s\"', this._dotfiles, path)\n    switch (this._dotfiles) {\n      case 'allow':\n        break\n      case 'deny':\n        this.error(403)\n        return res\n      case 'ignore':\n      default:\n        this.error(404)\n        return res\n    }\n  }\n\n  // index file support\n  if (this._index.length && this.hasTrailingSlash()) {\n    this.sendIndex(path)\n    return res\n  }\n\n  this.sendFile(path)\n  return res\n}\n\n/**\n * Transfer `path`.\n *\n * @param {String} path\n * @api public\n */\n\nSendStream.prototype.send = function send (path, stat) {\n  var len = stat.size\n  var options = this.options\n  var opts = {}\n  var res = this.res\n  var req = this.req\n  var ranges = req.headers.range\n  var offset = options.start || 0\n\n  if (res.headersSent) {\n    // impossible to send now\n    this.headersAlreadySent()\n    return\n  }\n\n  debug('pipe \"%s\"', path)\n\n  // set header fields\n  this.setHeader(path, stat)\n\n  // set content-type\n  this.type(path)\n\n  // conditional GET support\n  if (this.isConditionalGET()) {\n    if (this.isPreconditionFailure()) {\n      this.error(412)\n      return\n    }\n\n    if (this.isCachable() && this.isFresh()) {\n      this.notModified()\n      return\n    }\n  }\n\n  // adjust len to start/end options\n  len = Math.max(0, len - offset)\n  if (options.end !== undefined) {\n    var bytes = options.end - offset + 1\n    if (len > bytes) len = bytes\n  }\n\n  // Range support\n  if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) {\n    // parse\n    ranges = parseRange(len, ranges, {\n      combine: true\n    })\n\n    // If-Range support\n    if (!this.isRangeFresh()) {\n      debug('range stale')\n      ranges = -2\n    }\n\n    // unsatisfiable\n    if (ranges === -1) {\n      debug('range unsatisfiable')\n\n      // Content-Range\n      res.setHeader('Content-Range', contentRange('bytes', len))\n\n      // 416 Requested Range Not Satisfiable\n      return this.error(416, {\n        headers: { 'Content-Range': res.getHeader('Content-Range') }\n      })\n    }\n\n    // valid (syntactically invalid/multiple ranges are treated as a regular response)\n    if (ranges !== -2 && ranges.length === 1) {\n      debug('range %j', ranges)\n\n      // Content-Range\n      res.statusCode = 206\n      res.setHeader('Content-Range', contentRange('bytes', len, ranges[0]))\n\n      // adjust for requested range\n      offset += ranges[0].start\n      len = ranges[0].end - ranges[0].start + 1\n    }\n  }\n\n  // clone options\n  for (var prop in options) {\n    opts[prop] = options[prop]\n  }\n\n  // set read options\n  opts.start = offset\n  opts.end = Math.max(offset, offset + len - 1)\n\n  // content-length\n  res.setHeader('Content-Length', len)\n\n  // HEAD support\n  if (req.method === 'HEAD') {\n    res.end()\n    return\n  }\n\n  this.stream(path, opts)\n}\n\n/**\n * Transfer file for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendFile = function sendFile (path) {\n  var i = 0\n  var self = this\n\n  debug('stat \"%s\"', path)\n  fs.stat(path, function onstat (err, stat) {\n    var pathEndsWithSep = path[path.length - 1] === sep\n    if (err && err.code === 'ENOENT' && !extname(path) && !pathEndsWithSep) {\n      // not found, check extensions\n      return next(err)\n    }\n    if (err) return self.onStatError(err)\n    if (stat.isDirectory()) return self.redirect(path)\n    if (pathEndsWithSep) return self.error(404)\n    self.emit('file', path, stat)\n    self.send(path, stat)\n  })\n\n  function next (err) {\n    if (self._extensions.length <= i) {\n      return err\n        ? self.onStatError(err)\n        : self.error(404)\n    }\n\n    var p = path + '.' + self._extensions[i++]\n\n    debug('stat \"%s\"', p)\n    fs.stat(p, function (err, stat) {\n      if (err) return next(err)\n      if (stat.isDirectory()) return next()\n      self.emit('file', p, stat)\n      self.send(p, stat)\n    })\n  }\n}\n\n/**\n * Transfer index for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendIndex = function sendIndex (path) {\n  var i = -1\n  var self = this\n\n  function next (err) {\n    if (++i >= self._index.length) {\n      if (err) return self.onStatError(err)\n      return self.error(404)\n    }\n\n    var p = join(path, self._index[i])\n\n    debug('stat \"%s\"', p)\n    fs.stat(p, function (err, stat) {\n      if (err) return next(err)\n      if (stat.isDirectory()) return next()\n      self.emit('file', p, stat)\n      self.send(p, stat)\n    })\n  }\n\n  next()\n}\n\n/**\n * Stream `path` to the response.\n *\n * @param {String} path\n * @param {Object} options\n * @api private\n */\n\nSendStream.prototype.stream = function stream (path, options) {\n  var self = this\n  var res = this.res\n\n  // pipe\n  var stream = fs.createReadStream(path, options)\n  this.emit('stream', stream)\n  stream.pipe(res)\n\n  // cleanup\n  function cleanup () {\n    stream.destroy()\n  }\n\n  // response finished, cleanup\n  onFinished(res, cleanup)\n\n  // error handling\n  stream.on('error', function onerror (err) {\n    // clean up stream early\n    cleanup()\n\n    // error\n    self.onStatError(err)\n  })\n\n  // end\n  stream.on('end', function onend () {\n    self.emit('end')\n  })\n}\n\n/**\n * Set content-type based on `path`\n * if it hasn't been explicitly set.\n *\n * @param {String} path\n * @api private\n */\n\nSendStream.prototype.type = function type (path) {\n  var res = this.res\n\n  if (res.getHeader('Content-Type')) return\n\n  var ext = extname(path)\n  var type = mime.contentType(ext) || 'application/octet-stream'\n\n  debug('content-type %s', type)\n  res.setHeader('Content-Type', type)\n}\n\n/**\n * Set response header fields, most\n * fields may be pre-defined.\n *\n * @param {String} path\n * @param {Object} stat\n * @api private\n */\n\nSendStream.prototype.setHeader = function setHeader (path, stat) {\n  var res = this.res\n\n  this.emit('headers', res, path, stat)\n\n  if (this._acceptRanges && !res.getHeader('Accept-Ranges')) {\n    debug('accept ranges')\n    res.setHeader('Accept-Ranges', 'bytes')\n  }\n\n  if (this._cacheControl && !res.getHeader('Cache-Control')) {\n    var cacheControl = 'public, max-age=' + Math.floor(this._maxage / 1000)\n\n    if (this._immutable) {\n      cacheControl += ', immutable'\n    }\n\n    debug('cache-control %s', cacheControl)\n    res.setHeader('Cache-Control', cacheControl)\n  }\n\n  if (this._lastModified && !res.getHeader('Last-Modified')) {\n    var modified = stat.mtime.toUTCString()\n    debug('modified %s', modified)\n    res.setHeader('Last-Modified', modified)\n  }\n\n  if (this._etag && !res.getHeader('ETag')) {\n    var val = etag(stat)\n    debug('etag %s', val)\n    res.setHeader('ETag', val)\n  }\n}\n\n/**\n * Clear all headers from a response.\n *\n * @param {object} res\n * @private\n */\n\nfunction clearHeaders (res) {\n  for (const header of res.getHeaderNames()) {\n    res.removeHeader(header)\n  }\n}\n\n/**\n * Collapse all leading slashes into a single slash\n *\n * @param {string} str\n * @private\n */\nfunction collapseLeadingSlashes (str) {\n  for (var i = 0; i < str.length; i++) {\n    if (str[i] !== '/') {\n      break\n    }\n  }\n\n  return i > 1\n    ? '/' + str.substr(i)\n    : str\n}\n\n/**\n * Determine if path parts contain a dotfile.\n *\n * @api private\n */\n\nfunction containsDotFile (parts) {\n  for (var i = 0; i < parts.length; i++) {\n    var part = parts[i]\n    if (part.length > 1 && part[0] === '.') {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Create a Content-Range header.\n *\n * @param {string} type\n * @param {number} size\n * @param {array} [range]\n */\n\nfunction contentRange (type, size, range) {\n  return type + ' ' + (range ? range.start + '-' + range.end : '*') + '/' + size\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument (title, body) {\n  return '<!DOCTYPE html>\\n' +\n    '<html lang=\"en\">\\n' +\n    '<head>\\n' +\n    '<meta charset=\"utf-8\">\\n' +\n    '<title>' + title + '</title>\\n' +\n    '</head>\\n' +\n    '<body>\\n' +\n    '<pre>' + body + '</pre>\\n' +\n    '</body>\\n' +\n    '</html>\\n'\n}\n\n/**\n * Create a HttpError object from simple arguments.\n *\n * @param {number} status\n * @param {Error|object} err\n * @private\n */\n\nfunction createHttpError (status, err) {\n  if (!err) {\n    return createError(status)\n  }\n\n  return err instanceof Error\n    ? createError(status, err, { expose: false })\n    : createError(status, err)\n}\n\n/**\n * decodeURIComponent.\n *\n * Allows V8 to only deoptimize this fn instead of all\n * of send().\n *\n * @param {String} path\n * @api private\n */\n\nfunction decode (path) {\n  try {\n    return decodeURIComponent(path)\n  } catch (err) {\n    return -1\n  }\n}\n\n/**\n * Determine if emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.10\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction hasListeners (emitter, type) {\n  var count = typeof emitter.listenerCount !== 'function'\n    ? emitter.listeners(type).length\n    : emitter.listenerCount(type)\n\n  return count > 0\n}\n\n/**\n * Normalize the index option into an array.\n *\n * @param {boolean|string|array} val\n * @param {string} name\n * @private\n */\n\nfunction normalizeList (val, name) {\n  var list = [].concat(val || [])\n\n  for (var i = 0; i < list.length; i++) {\n    if (typeof list[i] !== 'string') {\n      throw new TypeError(name + ' must be array of strings or false')\n    }\n  }\n\n  return list\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n  var timestamp = date && Date.parse(date)\n\n  return typeof timestamp === 'number'\n    ? timestamp\n    : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n  var end = 0\n  var list = []\n  var start = 0\n\n  // gather tokens\n  for (var i = 0, len = str.length; i < len; i++) {\n    switch (str.charCodeAt(i)) {\n      case 0x20: /*   */\n        if (start === end) {\n          start = end = i + 1\n        }\n        break\n      case 0x2c: /* , */\n        if (start !== end) {\n          list.push(str.substring(start, end))\n        }\n        start = end = i + 1\n        break\n      default:\n        end = i + 1\n        break\n    }\n  }\n\n  // final token\n  if (start !== end) {\n    list.push(str.substring(start, end))\n  }\n\n  return list\n}\n\n/**\n * Set an object of headers on a response.\n *\n * @param {object} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n  var keys = Object.keys(headers)\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i]\n    res.setHeader(key, headers[key])\n  }\n}\n", "/*!\n * vary\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n */\n\nmodule.exports = vary\nmodule.exports.append = append\n\n/**\n * RegExp to match field-name in RFC 7230 sec 3.2\n *\n * field-name    = token\n * token         = 1*tchar\n * tchar         = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n *               / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n *               / DIGIT / ALPHA\n *               ; any VCHAR, except delimiters\n */\n\nvar FIELD_NAME_REGEXP = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/\n\n/**\n * Append a field to a vary header.\n *\n * @param {String} header\n * @param {String|Array} field\n * @return {String}\n * @public\n */\n\nfunction append (header, field) {\n  if (typeof header !== 'string') {\n    throw new TypeError('header argument is required')\n  }\n\n  if (!field) {\n    throw new TypeError('field argument is required')\n  }\n\n  // get fields array\n  var fields = !Array.isArray(field)\n    ? parse(String(field))\n    : field\n\n  // assert on invalid field names\n  for (var j = 0; j < fields.length; j++) {\n    if (!FIELD_NAME_REGEXP.test(fields[j])) {\n      throw new TypeError('field argument contains an invalid header name')\n    }\n  }\n\n  // existing, unspecified vary\n  if (header === '*') {\n    return header\n  }\n\n  // enumerate current values\n  var val = header\n  var vals = parse(header.toLowerCase())\n\n  // unspecified vary\n  if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) {\n    return '*'\n  }\n\n  for (var i = 0; i < fields.length; i++) {\n    var fld = fields[i].toLowerCase()\n\n    // append value (case-preserving)\n    if (vals.indexOf(fld) === -1) {\n      vals.push(fld)\n      val = val\n        ? val + ', ' + fields[i]\n        : fields[i]\n    }\n  }\n\n  return val\n}\n\n/**\n * Parse a vary header into an array.\n *\n * @param {String} header\n * @return {Array}\n * @private\n */\n\nfunction parse (header) {\n  var end = 0\n  var list = []\n  var start = 0\n\n  // gather tokens\n  for (var i = 0, len = header.length; i < len; i++) {\n    switch (header.charCodeAt(i)) {\n      case 0x20: /*   */\n        if (start === end) {\n          start = end = i + 1\n        }\n        break\n      case 0x2c: /* , */\n        list.push(header.substring(start, end))\n        start = end = i + 1\n        break\n      default:\n        end = i + 1\n        break\n    }\n  }\n\n  // final token\n  list.push(header.substring(start, end))\n\n  return list\n}\n\n/**\n * Mark that a request is varied on a header field.\n *\n * @param {Object} res\n * @param {String|Array} field\n * @public\n */\n\nfunction vary (res, field) {\n  if (!res || !res.getHeader || !res.setHeader) {\n    // quack quack\n    throw new TypeError('res argument is required')\n  }\n\n  // get existing header\n  var val = res.getHeader('Vary') || ''\n  var header = Array.isArray(val)\n    ? val.join(', ')\n    : String(val)\n\n  // set new header\n  if ((val = append(header, field))) {\n    res.setHeader('Vary', val)\n  }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar contentDisposition = require('content-disposition');\nvar createError = require('http-errors')\nvar deprecate = require('depd')('express');\nvar encodeUrl = require('encodeurl');\nvar escapeHtml = require('escape-html');\nvar http = require('node:http');\nvar onFinished = require('on-finished');\nvar mime = require('mime-types')\nvar path = require('node:path');\nvar pathIsAbsolute = require('node:path').isAbsolute;\nvar statuses = require('statuses')\nvar sign = require('cookie-signature').sign;\nvar normalizeType = require('./utils').normalizeType;\nvar normalizeTypes = require('./utils').normalizeTypes;\nvar setCharset = require('./utils').setCharset;\nvar cookie = require('cookie');\nvar send = require('send');\nvar extname = path.extname;\nvar resolve = path.resolve;\nvar vary = require('vary');\nconst { Buffer } = require('node:buffer');\n\n/**\n * Response prototype.\n * @public\n */\n\nvar res = Object.create(http.ServerResponse.prototype)\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = res\n\n/**\n * Set the HTTP status code for the response.\n *\n * Expects an integer value between 100 and 999 inclusive.\n * Throws an error if the provided status code is not an integer or if it's outside the allowable range.\n *\n * @param {number} code - The HTTP status code to set.\n * @return {ServerResponse} - Returns itself for chaining methods.\n * @throws {TypeError} If `code` is not an integer.\n * @throws {RangeError} If `code` is outside the range 100 to 999.\n * @public\n */\n\nres.status = function status(code) {\n  // Check if the status code is not an integer\n  if (!Number.isInteger(code)) {\n    throw new TypeError(`Invalid status code: ${JSON.stringify(code)}. Status code must be an integer.`);\n  }\n  // Check if the status code is outside of Node's valid range\n  if (code < 100 || code > 999) {\n    throw new RangeError(`Invalid status code: ${JSON.stringify(code)}. Status code must be greater than 99 and less than 1000.`);\n  }\n\n  this.statusCode = code;\n  return this;\n};\n\n/**\n * Set Link header field with the given `links`.\n *\n * Examples:\n *\n *    res.links({\n *      next: 'http://api.example.com/users?page=2',\n *      last: 'http://api.example.com/users?page=5',\n *      pages: [\n *        'http://api.example.com/users?page=1',\n *        'http://api.example.com/users?page=2'\n *      ]\n *    });\n *\n * @param {Object} links\n * @return {ServerResponse}\n * @public\n */\n\nres.links = function(links) {\n  var link = this.get('Link') || '';\n  if (link) link += ', ';\n  return this.set('Link', link + Object.keys(links).map(function(rel) {\n    // Allow multiple links if links[rel] is an array\n    if (Array.isArray(links[rel])) {\n      return links[rel].map(function (singleLink) {\n        return `<${singleLink}>; rel=\"${rel}\"`;\n      }).join(', ');\n    } else {\n      return `<${links[rel]}>; rel=\"${rel}\"`;\n    }\n  }).join(', '));\n};\n\n/**\n * Send a response.\n *\n * Examples:\n *\n *     res.send(Buffer.from('wahoo'));\n *     res.send({ some: 'json' });\n *     res.send('<p>some html</p>');\n *\n * @param {string|number|boolean|object|Buffer} body\n * @public\n */\n\nres.send = function send(body) {\n  var chunk = body;\n  var encoding;\n  var req = this.req;\n  var type;\n\n  // settings\n  var app = this.app;\n\n  switch (typeof chunk) {\n    // string defaulting to html\n    case 'string':\n      if (!this.get('Content-Type')) {\n        this.type('html');\n      }\n      break;\n    case 'boolean':\n    case 'number':\n    case 'object':\n      if (chunk === null) {\n        chunk = '';\n      } else if (ArrayBuffer.isView(chunk)) {\n        if (!this.get('Content-Type')) {\n          this.type('bin');\n        }\n      } else {\n        return this.json(chunk);\n      }\n      break;\n  }\n\n  // write strings in utf-8\n  if (typeof chunk === 'string') {\n    encoding = 'utf8';\n    type = this.get('Content-Type');\n\n    // reflect this in content-type\n    if (typeof type === 'string') {\n      this.set('Content-Type', setCharset(type, 'utf-8'));\n    }\n  }\n\n  // determine if ETag should be generated\n  var etagFn = app.get('etag fn')\n  var generateETag = !this.get('ETag') && typeof etagFn === 'function'\n\n  // populate Content-Length\n  var len\n  if (chunk !== undefined) {\n    if (Buffer.isBuffer(chunk)) {\n      // get length of Buffer\n      len = chunk.length\n    } else if (!generateETag && chunk.length < 1000) {\n      // just calculate length when no ETag + small chunk\n      len = Buffer.byteLength(chunk, encoding)\n    } else {\n      // convert chunk to Buffer and calculate\n      chunk = Buffer.from(chunk, encoding)\n      encoding = undefined;\n      len = chunk.length\n    }\n\n    this.set('Content-Length', len);\n  }\n\n  // populate ETag\n  var etag;\n  if (generateETag && len !== undefined) {\n    if ((etag = etagFn(chunk, encoding))) {\n      this.set('ETag', etag);\n    }\n  }\n\n  // freshness\n  if (req.fresh) this.status(304);\n\n  // strip irrelevant headers\n  if (204 === this.statusCode || 304 === this.statusCode) {\n    this.removeHeader('Content-Type');\n    this.removeHeader('Content-Length');\n    this.removeHeader('Transfer-Encoding');\n    chunk = '';\n  }\n\n  // alter headers for 205\n  if (this.statusCode === 205) {\n    this.set('Content-Length', '0')\n    this.removeHeader('Transfer-Encoding')\n    chunk = ''\n  }\n\n  if (req.method === 'HEAD') {\n    // skip body for HEAD\n    this.end();\n  } else {\n    // respond\n    this.end(chunk, encoding);\n  }\n\n  return this;\n};\n\n/**\n * Send JSON response.\n *\n * Examples:\n *\n *     res.json(null);\n *     res.json({ user: 'tj' });\n *\n * @param {string|number|boolean|object} obj\n * @public\n */\n\nres.json = function json(obj) {\n  // settings\n  var app = this.app;\n  var escape = app.get('json escape')\n  var replacer = app.get('json replacer');\n  var spaces = app.get('json spaces');\n  var body = stringify(obj, replacer, spaces, escape)\n\n  // content-type\n  if (!this.get('Content-Type')) {\n    this.set('Content-Type', 'application/json');\n  }\n\n  return this.send(body);\n};\n\n/**\n * Send JSON response with JSONP callback support.\n *\n * Examples:\n *\n *     res.jsonp(null);\n *     res.jsonp({ user: 'tj' });\n *\n * @param {string|number|boolean|object} obj\n * @public\n */\n\nres.jsonp = function jsonp(obj) {\n  // settings\n  var app = this.app;\n  var escape = app.get('json escape')\n  var replacer = app.get('json replacer');\n  var spaces = app.get('json spaces');\n  var body = stringify(obj, replacer, spaces, escape)\n  var callback = this.req.query[app.get('jsonp callback name')];\n\n  // content-type\n  if (!this.get('Content-Type')) {\n    this.set('X-Content-Type-Options', 'nosniff');\n    this.set('Content-Type', 'application/json');\n  }\n\n  // fixup callback\n  if (Array.isArray(callback)) {\n    callback = callback[0];\n  }\n\n  // jsonp\n  if (typeof callback === 'string' && callback.length !== 0) {\n    this.set('X-Content-Type-Options', 'nosniff');\n    this.set('Content-Type', 'text/javascript');\n\n    // restrict callback charset\n    callback = callback.replace(/[^\\[\\]\\w$.]/g, '');\n\n    if (body === undefined) {\n      // empty argument\n      body = ''\n    } else if (typeof body === 'string') {\n      // replace chars not allowed in JavaScript that are in JSON\n      body = body\n        .replace(/\\u2028/g, '\\\\u2028')\n        .replace(/\\u2029/g, '\\\\u2029')\n    }\n\n    // the /**/ is a specific security mitigation for \"Rosetta Flash JSONP abuse\"\n    // the typeof check is just to reduce client error noise\n    body = '/**/ typeof ' + callback + ' === \\'function\\' && ' + callback + '(' + body + ');';\n  }\n\n  return this.send(body);\n};\n\n/**\n * Send given HTTP status code.\n *\n * Sets the response status to `statusCode` and the body of the\n * response to the standard description from node's http.STATUS_CODES\n * or the statusCode number if no description.\n *\n * Examples:\n *\n *     res.sendStatus(200);\n *\n * @param {number} statusCode\n * @public\n */\n\nres.sendStatus = function sendStatus(statusCode) {\n  var body = statuses.message[statusCode] || String(statusCode)\n\n  this.status(statusCode);\n  this.type('txt');\n\n  return this.send(body);\n};\n\n/**\n * Transfer the file at the given `path`.\n *\n * Automatically sets the _Content-Type_ response header field.\n * The callback `callback(err)` is invoked when the transfer is complete\n * or when an error occurs. Be sure to check `res.headersSent`\n * if you wish to attempt responding, as the header and some data\n * may have already been transferred.\n *\n * Options:\n *\n *   - `maxAge`   defaulting to 0 (can be string converted by `ms`)\n *   - `root`     root directory for relative filenames\n *   - `headers`  object of headers to serve with file\n *   - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n *\n * Other options are passed along to `send`.\n *\n * Examples:\n *\n *  The following example illustrates how `res.sendFile()` may\n *  be used as an alternative for the `static()` middleware for\n *  dynamic situations. The code backing `res.sendFile()` is actually\n *  the same code, so HTTP cache support etc is identical.\n *\n *     app.get('/user/:uid/photos/:file', function(req, res){\n *       var uid = req.params.uid\n *         , file = req.params.file;\n *\n *       req.user.mayViewFilesFrom(uid, function(yes){\n *         if (yes) {\n *           res.sendFile('/uploads/' + uid + '/' + file);\n *         } else {\n *           res.send(403, 'Sorry! you cant see that.');\n *         }\n *       });\n *     });\n *\n * @public\n */\n\nres.sendFile = function sendFile(path, options, callback) {\n  var done = callback;\n  var req = this.req;\n  var res = this;\n  var next = req.next;\n  var opts = options || {};\n\n  if (!path) {\n    throw new TypeError('path argument is required to res.sendFile');\n  }\n\n  if (typeof path !== 'string') {\n    throw new TypeError('path must be a string to res.sendFile')\n  }\n\n  // support function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  if (!opts.root && !pathIsAbsolute(path)) {\n    throw new TypeError('path must be absolute or specify root to res.sendFile');\n  }\n\n  // create file stream\n  var pathname = encodeURI(path);\n\n  // wire application etag option to send\n  opts.etag = this.app.enabled('etag');\n  var file = send(req, pathname, opts);\n\n  // transfer\n  sendfile(res, file, opts, function (err) {\n    if (done) return done(err);\n    if (err && err.code === 'EISDIR') return next();\n\n    // next() all but write errors\n    if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') {\n      next(err);\n    }\n  });\n};\n\n/**\n * Transfer the file at the given `path` as an attachment.\n *\n * Optionally providing an alternate attachment `filename`,\n * and optional callback `callback(err)`. The callback is invoked\n * when the data transfer is complete, or when an error has\n * occurred. Be sure to check `res.headersSent` if you plan to respond.\n *\n * Optionally providing an `options` object to use with `res.sendFile()`.\n * This function will set the `Content-Disposition` header, overriding\n * any `Content-Disposition` header passed as header options in order\n * to set the attachment and filename.\n *\n * This method uses `res.sendFile()`.\n *\n * @public\n */\n\nres.download = function download (path, filename, options, callback) {\n  var done = callback;\n  var name = filename;\n  var opts = options || null\n\n  // support function as second or third arg\n  if (typeof filename === 'function') {\n    done = filename;\n    name = null;\n    opts = null\n  } else if (typeof options === 'function') {\n    done = options\n    opts = null\n  }\n\n  // support optional filename, where options may be in it's place\n  if (typeof filename === 'object' &&\n    (typeof options === 'function' || options === undefined)) {\n    name = null\n    opts = filename\n  }\n\n  // set Content-Disposition when file is sent\n  var headers = {\n    'Content-Disposition': contentDisposition(name || path)\n  };\n\n  // merge user-provided headers\n  if (opts && opts.headers) {\n    var keys = Object.keys(opts.headers)\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i]\n      if (key.toLowerCase() !== 'content-disposition') {\n        headers[key] = opts.headers[key]\n      }\n    }\n  }\n\n  // merge user-provided options\n  opts = Object.create(opts)\n  opts.headers = headers\n\n  // Resolve the full path for sendFile\n  var fullPath = !opts.root\n    ? resolve(path)\n    : path\n\n  // send file\n  return this.sendFile(fullPath, opts, done)\n};\n\n/**\n * Set _Content-Type_ response header with `type` through `mime.contentType()`\n * when it does not contain \"/\", or set the Content-Type to `type` otherwise.\n * When no mapping is found though `mime.contentType()`, the type is set to\n * \"application/octet-stream\".\n *\n * Examples:\n *\n *     res.type('.html');\n *     res.type('html');\n *     res.type('json');\n *     res.type('application/json');\n *     res.type('png');\n *\n * @param {String} type\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.contentType =\nres.type = function contentType(type) {\n  var ct = type.indexOf('/') === -1\n    ? (mime.contentType(type) || 'application/octet-stream')\n    : type;\n\n  return this.set('Content-Type', ct);\n};\n\n/**\n * Respond to the Acceptable formats using an `obj`\n * of mime-type callbacks.\n *\n * This method uses `req.accepted`, an array of\n * acceptable types ordered by their quality values.\n * When \"Accept\" is not present the _first_ callback\n * is invoked, otherwise the first match is used. When\n * no match is performed the server responds with\n * 406 \"Not Acceptable\".\n *\n * Content-Type is set for you, however if you choose\n * you may alter this within the callback using `res.type()`\n * or `res.set('Content-Type', ...)`.\n *\n *    res.format({\n *      'text/plain': function(){\n *        res.send('hey');\n *      },\n *\n *      'text/html': function(){\n *        res.send('<p>hey</p>');\n *      },\n *\n *      'application/json': function () {\n *        res.send({ message: 'hey' });\n *      }\n *    });\n *\n * In addition to canonicalized MIME types you may\n * also use extnames mapped to these types:\n *\n *    res.format({\n *      text: function(){\n *        res.send('hey');\n *      },\n *\n *      html: function(){\n *        res.send('<p>hey</p>');\n *      },\n *\n *      json: function(){\n *        res.send({ message: 'hey' });\n *      }\n *    });\n *\n * By default Express passes an `Error`\n * with a `.status` of 406 to `next(err)`\n * if a match is not made. If you provide\n * a `.default` callback it will be invoked\n * instead.\n *\n * @param {Object} obj\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.format = function(obj){\n  var req = this.req;\n  var next = req.next;\n\n  var keys = Object.keys(obj)\n    .filter(function (v) { return v !== 'default' })\n\n  var key = keys.length > 0\n    ? req.accepts(keys)\n    : false;\n\n  this.vary(\"Accept\");\n\n  if (key) {\n    this.set('Content-Type', normalizeType(key).value);\n    obj[key](req, this, next);\n  } else if (obj.default) {\n    obj.default(req, this, next)\n  } else {\n    next(createError(406, {\n      types: normalizeTypes(keys).map(function (o) { return o.value })\n    }))\n  }\n\n  return this;\n};\n\n/**\n * Set _Content-Disposition_ header to _attachment_ with optional `filename`.\n *\n * @param {String} filename\n * @return {ServerResponse}\n * @public\n */\n\nres.attachment = function attachment(filename) {\n  if (filename) {\n    this.type(extname(filename));\n  }\n\n  this.set('Content-Disposition', contentDisposition(filename));\n\n  return this;\n};\n\n/**\n * Append additional header `field` with value `val`.\n *\n * Example:\n *\n *    res.append('Link', ['<http://localhost/>', '<http://localhost:3000/>']);\n *    res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly');\n *    res.append('Warning', '199 Miscellaneous warning');\n *\n * @param {String} field\n * @param {String|Array} val\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.append = function append(field, val) {\n  var prev = this.get(field);\n  var value = val;\n\n  if (prev) {\n    // concat the new and prev vals\n    value = Array.isArray(prev) ? prev.concat(val)\n      : Array.isArray(val) ? [prev].concat(val)\n        : [prev, val]\n  }\n\n  return this.set(field, value);\n};\n\n/**\n * Set header `field` to `val`, or pass\n * an object of header fields.\n *\n * Examples:\n *\n *    res.set('Foo', ['bar', 'baz']);\n *    res.set('Accept', 'application/json');\n *    res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' });\n *\n * Aliased as `res.header()`.\n *\n * When the set header is \"Content-Type\", the type is expanded to include\n * the charset if not present using `mime.contentType()`.\n *\n * @param {String|Object} field\n * @param {String|Array} val\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.set =\nres.header = function header(field, val) {\n  if (arguments.length === 2) {\n    var value = Array.isArray(val)\n      ? val.map(String)\n      : String(val);\n\n    // add charset to content-type\n    if (field.toLowerCase() === 'content-type') {\n      if (Array.isArray(value)) {\n        throw new TypeError('Content-Type cannot be set to an Array');\n      }\n      value = mime.contentType(value)\n    }\n\n    this.setHeader(field, value);\n  } else {\n    for (var key in field) {\n      this.set(key, field[key]);\n    }\n  }\n  return this;\n};\n\n/**\n * Get value for header `field`.\n *\n * @param {String} field\n * @return {String}\n * @public\n */\n\nres.get = function(field){\n  return this.getHeader(field);\n};\n\n/**\n * Clear cookie `name`.\n *\n * @param {String} name\n * @param {Object} [options]\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.clearCookie = function clearCookie(name, options) {\n  // Force cookie expiration by setting expires to the past\n  const opts = { path: '/', ...options, expires: new Date(1)};\n  // ensure maxAge is not passed\n  delete opts.maxAge\n\n  return this.cookie(name, '', opts);\n};\n\n/**\n * Set cookie `name` to `value`, with the given `options`.\n *\n * Options:\n *\n *    - `maxAge`   max-age in milliseconds, converted to `expires`\n *    - `signed`   sign the cookie\n *    - `path`     defaults to \"/\"\n *\n * Examples:\n *\n *    // \"Remember Me\" for 15 minutes\n *    res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });\n *\n *    // same as above\n *    res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true })\n *\n * @param {String} name\n * @param {String|Object} value\n * @param {Object} [options]\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.cookie = function (name, value, options) {\n  var opts = { ...options };\n  var secret = this.req.secret;\n  var signed = opts.signed;\n\n  if (signed && !secret) {\n    throw new Error('cookieParser(\"secret\") required for signed cookies');\n  }\n\n  var val = typeof value === 'object'\n    ? 'j:' + JSON.stringify(value)\n    : String(value);\n\n  if (signed) {\n    val = 's:' + sign(val, secret);\n  }\n\n  if (opts.maxAge != null) {\n    var maxAge = opts.maxAge - 0\n\n    if (!isNaN(maxAge)) {\n      opts.expires = new Date(Date.now() + maxAge)\n      opts.maxAge = Math.floor(maxAge / 1000)\n    }\n  }\n\n  if (opts.path == null) {\n    opts.path = '/';\n  }\n\n  this.append('Set-Cookie', cookie.serialize(name, String(val), opts));\n\n  return this;\n};\n\n/**\n * Set the location header to `url`.\n *\n * The given `url` can also be \"back\", which redirects\n * to the _Referrer_ or _Referer_ headers or \"/\".\n *\n * Examples:\n *\n *    res.location('/foo/bar').;\n *    res.location('http://example.com');\n *    res.location('../login');\n *\n * @param {String} url\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.location = function location(url) {\n  return this.set('Location', encodeUrl(url));\n};\n\n/**\n * Redirect to the given `url` with optional response `status`\n * defaulting to 302.\n *\n * Examples:\n *\n *    res.redirect('/foo/bar');\n *    res.redirect('http://example.com');\n *    res.redirect(301, 'http://example.com');\n *    res.redirect('../login'); // /blog/post/1 -> /blog/login\n *\n * @public\n */\n\nres.redirect = function redirect(url) {\n  var address = url;\n  var body;\n  var status = 302;\n\n  // allow status / url\n  if (arguments.length === 2) {\n    status = arguments[0]\n    address = arguments[1]\n  }\n\n  if (!address) {\n    deprecate('Provide a url argument');\n  }\n\n  if (typeof address !== 'string') {\n    deprecate('Url must be a string');\n  }\n\n  if (typeof status !== 'number') {\n    deprecate('Status must be a number');\n  }\n\n  // Set location header\n  address = this.location(address).get('Location');\n\n  // Support text/{plain,html} by default\n  this.format({\n    text: function(){\n      body = statuses.message[status] + '. Redirecting to ' + address\n    },\n\n    html: function(){\n      var u = escapeHtml(address);\n      body = '<p>' + statuses.message[status] + '. Redirecting to ' + u + '</p>'\n    },\n\n    default: function(){\n      body = '';\n    }\n  });\n\n  // Respond\n  this.status(status);\n  this.set('Content-Length', Buffer.byteLength(body));\n\n  if (this.req.method === 'HEAD') {\n    this.end();\n  } else {\n    this.end(body);\n  }\n};\n\n/**\n * Add `field` to Vary. If already present in the Vary set, then\n * this call is simply ignored.\n *\n * @param {Array|String} field\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.vary = function(field){\n  vary(this, field);\n\n  return this;\n};\n\n/**\n * Render `view` with the given `options` and optional callback `fn`.\n * When a callback function is given a response will _not_ be made\n * automatically, otherwise a response of _200_ and _text/html_ is given.\n *\n * Options:\n *\n *  - `cache`     boolean hinting to the engine it should cache\n *  - `filename`  filename of the view being rendered\n *\n * @public\n */\n\nres.render = function render(view, options, callback) {\n  var app = this.req.app;\n  var done = callback;\n  var opts = options || {};\n  var req = this.req;\n  var self = this;\n\n  // support callback function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  // merge res.locals\n  opts._locals = self.locals;\n\n  // default callback to respond\n  done = done || function (err, str) {\n    if (err) return req.next(err);\n    self.send(str);\n  };\n\n  // render\n  app.render(view, opts, done);\n};\n\n// pipe the send file stream\nfunction sendfile(res, file, options, callback) {\n  var done = false;\n  var streaming;\n\n  // request aborted\n  function onaborted() {\n    if (done) return;\n    done = true;\n\n    var err = new Error('Request aborted');\n    err.code = 'ECONNABORTED';\n    callback(err);\n  }\n\n  // directory\n  function ondirectory() {\n    if (done) return;\n    done = true;\n\n    var err = new Error('EISDIR, read');\n    err.code = 'EISDIR';\n    callback(err);\n  }\n\n  // errors\n  function onerror(err) {\n    if (done) return;\n    done = true;\n    callback(err);\n  }\n\n  // ended\n  function onend() {\n    if (done) return;\n    done = true;\n    callback();\n  }\n\n  // file\n  function onfile() {\n    streaming = false;\n  }\n\n  // finished\n  function onfinish(err) {\n    if (err && err.code === 'ECONNRESET') return onaborted();\n    if (err) return onerror(err);\n    if (done) return;\n\n    setImmediate(function () {\n      if (streaming !== false && !done) {\n        onaborted();\n        return;\n      }\n\n      if (done) return;\n      done = true;\n      callback();\n    });\n  }\n\n  // streaming\n  function onstream() {\n    streaming = true;\n  }\n\n  file.on('directory', ondirectory);\n  file.on('end', onend);\n  file.on('error', onerror);\n  file.on('file', onfile);\n  file.on('stream', onstream);\n  onFinished(res, onfinish);\n\n  if (options.headers) {\n    // set headers on successful transfer\n    file.on('headers', function headers(res) {\n      var obj = options.headers;\n      var keys = Object.keys(obj);\n\n      for (var i = 0; i < keys.length; i++) {\n        var k = keys[i];\n        res.setHeader(k, obj[k]);\n      }\n    });\n  }\n\n  // pipe\n  file.pipe(res);\n}\n\n/**\n * Stringify JSON, like JSON.stringify, but v8 optimized, with the\n * ability to escape characters that can trigger HTML sniffing.\n *\n * @param {*} value\n * @param {function} replacer\n * @param {number} spaces\n * @param {boolean} escape\n * @returns {string}\n * @private\n */\n\nfunction stringify (value, replacer, spaces, escape) {\n  // v8 checks arguments.length for optimizing simple call\n  // https://bugs.chromium.org/p/v8/issues/detail?id=4730\n  var json = replacer || spaces\n    ? JSON.stringify(value, replacer, spaces)\n    : JSON.stringify(value);\n\n  if (escape && typeof json === 'string') {\n    json = json.replace(/[<>&]/g, function (c) {\n      switch (c.charCodeAt(0)) {\n        case 0x3c:\n          return '\\\\u003c'\n        case 0x3e:\n          return '\\\\u003e'\n        case 0x26:\n          return '\\\\u0026'\n        /* istanbul ignore next: unreachable default */\n        default:\n          return c\n      }\n    })\n  }\n\n  return json\n}\n", "/*!\n * serve-static\n * Copyright(c) 2010 Sencha Inc.\n * Copyright(c) 2011 TJ Holowaychuk\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar parseUrl = require('parseurl')\nvar resolve = require('path').resolve\nvar send = require('send')\nvar url = require('url')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = serveStatic\n\n/**\n * @param {string} root\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction serveStatic (root, options) {\n  if (!root) {\n    throw new TypeError('root path required')\n  }\n\n  if (typeof root !== 'string') {\n    throw new TypeError('root path must be a string')\n  }\n\n  // copy options object\n  var opts = Object.create(options || null)\n\n  // fall-though\n  var fallthrough = opts.fallthrough !== false\n\n  // default redirect\n  var redirect = opts.redirect !== false\n\n  // headers listener\n  var setHeaders = opts.setHeaders\n\n  if (setHeaders && typeof setHeaders !== 'function') {\n    throw new TypeError('option setHeaders must be function')\n  }\n\n  // setup options for send\n  opts.maxage = opts.maxage || opts.maxAge || 0\n  opts.root = resolve(root)\n\n  // construct directory listener\n  var onDirectory = redirect\n    ? createRedirectDirectoryListener()\n    : createNotFoundDirectoryListener()\n\n  return function serveStatic (req, res, next) {\n    if (req.method !== 'GET' && req.method !== 'HEAD') {\n      if (fallthrough) {\n        return next()\n      }\n\n      // method not allowed\n      res.statusCode = 405\n      res.setHeader('Allow', 'GET, HEAD')\n      res.setHeader('Content-Length', '0')\n      res.end()\n      return\n    }\n\n    var forwardError = !fallthrough\n    var originalUrl = parseUrl.original(req)\n    var path = parseUrl(req).pathname\n\n    // make sure redirect occurs at mount\n    if (path === '/' && originalUrl.pathname.substr(-1) !== '/') {\n      path = ''\n    }\n\n    // create send stream\n    var stream = send(req, path, opts)\n\n    // add directory handler\n    stream.on('directory', onDirectory)\n\n    // add headers listener\n    if (setHeaders) {\n      stream.on('headers', setHeaders)\n    }\n\n    // add file listener for fallthrough\n    if (fallthrough) {\n      stream.on('file', function onFile () {\n        // once file is determined, always forward error\n        forwardError = true\n      })\n    }\n\n    // forward errors\n    stream.on('error', function error (err) {\n      if (forwardError || !(err.statusCode < 500)) {\n        next(err)\n        return\n      }\n\n      next()\n    })\n\n    // pipe\n    stream.pipe(res)\n  }\n}\n\n/**\n * Collapse all leading slashes into a single slash\n * @private\n */\nfunction collapseLeadingSlashes (str) {\n  for (var i = 0; i < str.length; i++) {\n    if (str.charCodeAt(i) !== 0x2f /* / */) {\n      break\n    }\n  }\n\n  return i > 1\n    ? '/' + str.substr(i)\n    : str\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument (title, body) {\n  return '<!DOCTYPE html>\\n' +\n    '<html lang=\"en\">\\n' +\n    '<head>\\n' +\n    '<meta charset=\"utf-8\">\\n' +\n    '<title>' + title + '</title>\\n' +\n    '</head>\\n' +\n    '<body>\\n' +\n    '<pre>' + body + '</pre>\\n' +\n    '</body>\\n' +\n    '</html>\\n'\n}\n\n/**\n * Create a directory listener that just 404s.\n * @private\n */\n\nfunction createNotFoundDirectoryListener () {\n  return function notFound () {\n    this.error(404)\n  }\n}\n\n/**\n * Create a directory listener that performs a redirect.\n * @private\n */\n\nfunction createRedirectDirectoryListener () {\n  return function redirect (res) {\n    if (this.hasTrailingSlash()) {\n      this.error(404)\n      return\n    }\n\n    // get original URL\n    var originalUrl = parseUrl.original(this.req)\n\n    // append trailing slash\n    originalUrl.path = null\n    originalUrl.pathname = collapseLeadingSlashes(originalUrl.pathname + '/')\n\n    // reformat the URL\n    var loc = encodeUrl(url.format(originalUrl))\n    var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + escapeHtml(loc))\n\n    // send redirect response\n    res.statusCode = 301\n    res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n    res.setHeader('Content-Length', Buffer.byteLength(doc))\n    res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n    res.setHeader('X-Content-Type-Options', 'nosniff')\n    res.setHeader('Location', loc)\n    res.end(doc)\n  }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n */\n\nvar bodyParser = require('body-parser')\nvar EventEmitter = require('node:events').EventEmitter;\nvar mixin = require('merge-descriptors');\nvar proto = require('./application');\nvar Router = require('router');\nvar req = require('./request');\nvar res = require('./response');\n\n/**\n * Expose `createApplication()`.\n */\n\nexports = module.exports = createApplication;\n\n/**\n * Create an express application.\n *\n * @return {Function}\n * @api public\n */\n\nfunction createApplication() {\n  var app = function(req, res, next) {\n    app.handle(req, res, next);\n  };\n\n  mixin(app, EventEmitter.prototype, false);\n  mixin(app, proto, false);\n\n  // expose the prototype that will get set on requests\n  app.request = Object.create(req, {\n    app: { configurable: true, enumerable: true, writable: true, value: app }\n  })\n\n  // expose the prototype that will get set on responses\n  app.response = Object.create(res, {\n    app: { configurable: true, enumerable: true, writable: true, value: app }\n  })\n\n  app.init();\n  return app;\n}\n\n/**\n * Expose the prototypes.\n */\n\nexports.application = proto;\nexports.request = req;\nexports.response = res;\n\n/**\n * Expose constructors.\n */\n\nexports.Route = Router.Route;\nexports.Router = Router;\n\n/**\n * Expose middleware\n */\n\nexports.json = bodyParser.json\nexports.raw = bodyParser.raw\nexports.static = require('serve-static');\nexports.text = bodyParser.text\nexports.urlencoded = bodyParser.urlencoded\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\nmodule.exports = require('./lib/express');\n", "/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n", "(function () {\n\n  'use strict';\n\n  var assign = require('object-assign');\n  var vary = require('vary');\n\n  var defaults = {\n    origin: '*',\n    methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',\n    preflightContinue: false,\n    optionsSuccessStatus: 204\n  };\n\n  function isString(s) {\n    return typeof s === 'string' || s instanceof String;\n  }\n\n  function isOriginAllowed(origin, allowedOrigin) {\n    if (Array.isArray(allowedOrigin)) {\n      for (var i = 0; i < allowedOrigin.length; ++i) {\n        if (isOriginAllowed(origin, allowedOrigin[i])) {\n          return true;\n        }\n      }\n      return false;\n    } else if (isString(allowedOrigin)) {\n      return origin === allowedOrigin;\n    } else if (allowedOrigin instanceof RegExp) {\n      return allowedOrigin.test(origin);\n    } else {\n      return !!allowedOrigin;\n    }\n  }\n\n  function configureOrigin(options, req) {\n    var requestOrigin = req.headers.origin,\n      headers = [],\n      isAllowed;\n\n    if (!options.origin || options.origin === '*') {\n      // allow any origin\n      headers.push([{\n        key: 'Access-Control-Allow-Origin',\n        value: '*'\n      }]);\n    } else if (isString(options.origin)) {\n      // fixed origin\n      headers.push([{\n        key: 'Access-Control-Allow-Origin',\n        value: options.origin\n      }]);\n      headers.push([{\n        key: 'Vary',\n        value: 'Origin'\n      }]);\n    } else {\n      isAllowed = isOriginAllowed(requestOrigin, options.origin);\n      // reflect origin\n      headers.push([{\n        key: 'Access-Control-Allow-Origin',\n        value: isAllowed ? requestOrigin : false\n      }]);\n      headers.push([{\n        key: 'Vary',\n        value: 'Origin'\n      }]);\n    }\n\n    return headers;\n  }\n\n  function configureMethods(options) {\n    var methods = options.methods;\n    if (methods.join) {\n      methods = options.methods.join(','); // .methods is an array, so turn it into a string\n    }\n    return {\n      key: 'Access-Control-Allow-Methods',\n      value: methods\n    };\n  }\n\n  function configureCredentials(options) {\n    if (options.credentials === true) {\n      return {\n        key: 'Access-Control-Allow-Credentials',\n        value: 'true'\n      };\n    }\n    return null;\n  }\n\n  function configureAllowedHeaders(options, req) {\n    var allowedHeaders = options.allowedHeaders || options.headers;\n    var headers = [];\n\n    if (!allowedHeaders) {\n      allowedHeaders = req.headers['access-control-request-headers']; // .headers wasn't specified, so reflect the request headers\n      headers.push([{\n        key: 'Vary',\n        value: 'Access-Control-Request-Headers'\n      }]);\n    } else if (allowedHeaders.join) {\n      allowedHeaders = allowedHeaders.join(','); // .headers is an array, so turn it into a string\n    }\n    if (allowedHeaders && allowedHeaders.length) {\n      headers.push([{\n        key: 'Access-Control-Allow-Headers',\n        value: allowedHeaders\n      }]);\n    }\n\n    return headers;\n  }\n\n  function configureExposedHeaders(options) {\n    var headers = options.exposedHeaders;\n    if (!headers) {\n      return null;\n    } else if (headers.join) {\n      headers = headers.join(','); // .headers is an array, so turn it into a string\n    }\n    if (headers && headers.length) {\n      return {\n        key: 'Access-Control-Expose-Headers',\n        value: headers\n      };\n    }\n    return null;\n  }\n\n  function configureMaxAge(options) {\n    var maxAge = (typeof options.maxAge === 'number' || options.maxAge) && options.maxAge.toString()\n    if (maxAge && maxAge.length) {\n      return {\n        key: 'Access-Control-Max-Age',\n        value: maxAge\n      };\n    }\n    return null;\n  }\n\n  function applyHeaders(headers, res) {\n    for (var i = 0, n = headers.length; i < n; i++) {\n      var header = headers[i];\n      if (header) {\n        if (Array.isArray(header)) {\n          applyHeaders(header, res);\n        } else if (header.key === 'Vary' && header.value) {\n          vary(res, header.value);\n        } else if (header.value) {\n          res.setHeader(header.key, header.value);\n        }\n      }\n    }\n  }\n\n  function cors(options, req, res, next) {\n    var headers = [],\n      method = req.method && req.method.toUpperCase && req.method.toUpperCase();\n\n    if (method === 'OPTIONS') {\n      // preflight\n      headers.push(configureOrigin(options, req));\n      headers.push(configureCredentials(options))\n      headers.push(configureMethods(options))\n      headers.push(configureAllowedHeaders(options, req));\n      headers.push(configureMaxAge(options))\n      headers.push(configureExposedHeaders(options))\n      applyHeaders(headers, res);\n\n      if (options.preflightContinue) {\n        next();\n      } else {\n        // Safari (and potentially other browsers) need content-length 0,\n        //   for 204 or they just hang waiting for a body\n        res.statusCode = options.optionsSuccessStatus;\n        res.setHeader('Content-Length', '0');\n        res.end();\n      }\n    } else {\n      // actual response\n      headers.push(configureOrigin(options, req));\n      headers.push(configureCredentials(options))\n      headers.push(configureExposedHeaders(options))\n      applyHeaders(headers, res);\n      next();\n    }\n  }\n\n  function middlewareWrapper(o) {\n    // if options are static (either via defaults or custom options passed in), wrap in a function\n    var optionsCallback = null;\n    if (typeof o === 'function') {\n      optionsCallback = o;\n    } else {\n      optionsCallback = function (req, cb) {\n        cb(null, o);\n      };\n    }\n\n    return function corsMiddleware(req, res, next) {\n      optionsCallback(req, function (err, options) {\n        if (err) {\n          next(err);\n        } else {\n          var corsOptions = assign({}, defaults, options);\n          var originCallback = null;\n          if (corsOptions.origin && typeof corsOptions.origin === 'function') {\n            originCallback = corsOptions.origin;\n          } else if (corsOptions.origin) {\n            originCallback = function (origin, cb) {\n              cb(null, corsOptions.origin);\n            };\n          }\n\n          if (originCallback) {\n            originCallback(req.headers.origin, function (err2, origin) {\n              if (err2 || !origin) {\n                next(err2);\n              } else {\n                corsOptions.origin = origin;\n                cors(corsOptions, req, res, next);\n              }\n            });\n          } else {\n            next();\n          }\n        }\n      });\n    };\n  }\n\n  // can pass either an options hash, an options delegate, or nothing\n  module.exports = middlewareWrapper;\n\n}());\n", "/**\n * Module dependencies.\n */\n\nvar crypto = require('crypto');\n\n/**\n * Sign the given `val` with `secret`.\n *\n * @param {String} val\n * @param {String} secret\n * @return {String}\n * @api private\n */\n\nexports.sign = function(val, secret){\n  if ('string' != typeof val) throw new TypeError(\"Cookie value must be provided as a string.\");\n  if ('string' != typeof secret) throw new TypeError(\"Secret string must be provided.\");\n  return val + '.' + crypto\n    .createHmac('sha256', secret)\n    .update(val)\n    .digest('base64')\n    .replace(/\\=+$/, '');\n};\n\n/**\n * Unsign and decode the given `val` with `secret`,\n * returning `false` if the signature is invalid.\n *\n * @param {String} val\n * @param {String} secret\n * @return {String|Boolean}\n * @api private\n */\n\nexports.unsign = function(val, secret){\n  if ('string' != typeof val) throw new TypeError(\"Signed cookie string must be provided.\");\n  if ('string' != typeof secret) throw new TypeError(\"Secret string must be provided.\");\n  var str = val.slice(0, val.lastIndexOf('.'))\n    , mac = exports.sign(str, secret);\n  \n  return sha1(mac) == sha1(val) ? str : false;\n};\n\n/**\n * Private\n */\n\nfunction sha1(str){\n  return crypto.createHash('sha1').update(str).digest('hex');\n}\n", "/*!\n * cookie-parser\n * Copyright(c) 2014 TJ Holowaychuk\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar cookie = require('cookie')\nvar signature = require('cookie-signature')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = cookieParser\nmodule.exports.JSONCookie = JSONCookie\nmodule.exports.JSONCookies = JSONCookies\nmodule.exports.signedCookie = signedCookie\nmodule.exports.signedCookies = signedCookies\n\n/**\n * Parse Cookie header and populate `req.cookies`\n * with an object keyed by the cookie names.\n *\n * @param {string|array} [secret] A string (or array of strings) representing cookie signing secret(s).\n * @param {Object} [options]\n * @return {Function}\n * @public\n */\n\nfunction cookieParser (secret, options) {\n  var secrets = !secret || Array.isArray(secret)\n    ? (secret || [])\n    : [secret]\n\n  return function cookieParser (req, res, next) {\n    if (req.cookies) {\n      return next()\n    }\n\n    var cookies = req.headers.cookie\n\n    req.secret = secrets[0]\n    req.cookies = Object.create(null)\n    req.signedCookies = Object.create(null)\n\n    // no cookies\n    if (!cookies) {\n      return next()\n    }\n\n    req.cookies = cookie.parse(cookies, options)\n\n    // parse signed cookies\n    if (secrets.length !== 0) {\n      req.signedCookies = signedCookies(req.cookies, secrets)\n      req.signedCookies = JSONCookies(req.signedCookies)\n    }\n\n    // parse JSON cookies\n    req.cookies = JSONCookies(req.cookies)\n\n    next()\n  }\n}\n\n/**\n * Parse JSON cookie string.\n *\n * @param {String} str\n * @return {Object} Parsed object or undefined if not json cookie\n * @public\n */\n\nfunction JSONCookie (str) {\n  if (typeof str !== 'string' || str.substr(0, 2) !== 'j:') {\n    return undefined\n  }\n\n  try {\n    return JSON.parse(str.slice(2))\n  } catch (err) {\n    return undefined\n  }\n}\n\n/**\n * Parse JSON cookies.\n *\n * @param {Object} obj\n * @return {Object}\n * @public\n */\n\nfunction JSONCookies (obj) {\n  var cookies = Object.keys(obj)\n  var key\n  var val\n\n  for (var i = 0; i < cookies.length; i++) {\n    key = cookies[i]\n    val = JSONCookie(obj[key])\n\n    if (val) {\n      obj[key] = val\n    }\n  }\n\n  return obj\n}\n\n/**\n * Parse a signed cookie string, return the decoded value.\n *\n * @param {String} str signed cookie string\n * @param {string|array} secret\n * @return {String} decoded value\n * @public\n */\n\nfunction signedCookie (str, secret) {\n  if (typeof str !== 'string') {\n    return undefined\n  }\n\n  if (str.substr(0, 2) !== 's:') {\n    return str\n  }\n\n  var secrets = !secret || Array.isArray(secret)\n    ? (secret || [])\n    : [secret]\n\n  for (var i = 0; i < secrets.length; i++) {\n    var val = signature.unsign(str.slice(2), secrets[i])\n\n    if (val !== false) {\n      return val\n    }\n  }\n\n  return false\n}\n\n/**\n * Parse signed cookies, returning an object containing the decoded key/value\n * pairs, while removing the signed key from obj.\n *\n * @param {Object} obj\n * @param {string|array} secret\n * @return {Object}\n * @public\n */\n\nfunction signedCookies (obj, secret) {\n  var cookies = Object.keys(obj)\n  var dec\n  var key\n  var ret = Object.create(null)\n  var val\n\n  for (var i = 0; i < cookies.length; i++) {\n    key = cookies[i]\n    val = obj[key]\n    dec = signedCookie(val, secret)\n\n    if (val !== dec) {\n      ret[key] = dec\n      delete obj[key]\n    }\n  }\n\n  return ret\n}\n", "'use strict'\n\n// **************************************************************\n// * Code initially copied/adapted from \"pony-cause\" npm module *\n// * Please upstream improvements there                         *\n// **************************************************************\n\nconst isErrorLike = (err) => {\n  return err && typeof err.message === 'string'\n}\n\n/**\n * @param {Error|{ cause?: unknown|(()=>err)}} err\n * @returns {Error|Object|undefined}\n */\nconst getErrorCause = (err) => {\n  if (!err) return\n\n  /** @type {unknown} */\n  // @ts-ignore\n  const cause = err.cause\n\n  // VError / NError style causes\n  if (typeof cause === 'function') {\n    // @ts-ignore\n    const causeResult = err.cause()\n\n    return isErrorLike(causeResult)\n      ? causeResult\n      : undefined\n  } else {\n    return isErrorLike(cause)\n      ? cause\n      : undefined\n  }\n}\n\n/**\n * Internal method that keeps a track of which error we have already added, to avoid circular recursion\n *\n * @private\n * @param {Error} err\n * @param {Set<Error>} seen\n * @returns {string}\n */\nconst _stackWithCauses = (err, seen) => {\n  if (!isErrorLike(err)) return ''\n\n  const stack = err.stack || ''\n\n  // Ensure we don't go circular or crazily deep\n  if (seen.has(err)) {\n    return stack + '\\ncauses have become circular...'\n  }\n\n  const cause = getErrorCause(err)\n\n  if (cause) {\n    seen.add(err)\n    return (stack + '\\ncaused by: ' + _stackWithCauses(cause, seen))\n  } else {\n    return stack\n  }\n}\n\n/**\n * @param {Error} err\n * @returns {string}\n */\nconst stackWithCauses = (err) => _stackWithCauses(err, new Set())\n\n/**\n * Internal method that keeps a track of which error we have already added, to avoid circular recursion\n *\n * @private\n * @param {Error} err\n * @param {Set<Error>} seen\n * @param {boolean} [skip]\n * @returns {string}\n */\nconst _messageWithCauses = (err, seen, skip) => {\n  if (!isErrorLike(err)) return ''\n\n  const message = skip ? '' : (err.message || '')\n\n  // Ensure we don't go circular or crazily deep\n  if (seen.has(err)) {\n    return message + ': ...'\n  }\n\n  const cause = getErrorCause(err)\n\n  if (cause) {\n    seen.add(err)\n\n    // @ts-ignore\n    const skipIfVErrorStyleCause = typeof err.cause === 'function'\n\n    return (message +\n      (skipIfVErrorStyleCause ? '' : ': ') +\n      _messageWithCauses(cause, seen, skipIfVErrorStyleCause))\n  } else {\n    return message\n  }\n}\n\n/**\n * @param {Error} err\n * @returns {string}\n */\nconst messageWithCauses = (err) => _messageWithCauses(err, new Set())\n\nmodule.exports = {\n  isErrorLike,\n  getErrorCause,\n  stackWithCauses,\n  messageWithCauses\n}\n", "'use strict'\n\nconst seen = Symbol('circular-ref-tag')\nconst rawSymbol = Symbol('pino-raw-err-ref')\n\nconst pinoErrProto = Object.create({}, {\n  type: {\n    enumerable: true,\n    writable: true,\n    value: undefined\n  },\n  message: {\n    enumerable: true,\n    writable: true,\n    value: undefined\n  },\n  stack: {\n    enumerable: true,\n    writable: true,\n    value: undefined\n  },\n  aggregateErrors: {\n    enumerable: true,\n    writable: true,\n    value: undefined\n  },\n  raw: {\n    enumerable: false,\n    get: function () {\n      return this[rawSymbol]\n    },\n    set: function (val) {\n      this[rawSymbol] = val\n    }\n  }\n})\nObject.defineProperty(pinoErrProto, rawSymbol, {\n  writable: true,\n  value: {}\n})\n\nmodule.exports = {\n  pinoErrProto,\n  pinoErrorSymbols: {\n    seen,\n    rawSymbol\n  }\n}\n", "'use strict'\n\nmodule.exports = errSerializer\n\nconst { messageWithCauses, stackWithCauses, isErrorLike } = require('./err-helpers')\nconst { pinoErrProto, pinoErrorSymbols } = require('./err-proto')\nconst { seen } = pinoErrorSymbols\n\nconst { toString } = Object.prototype\n\nfunction errSerializer (err) {\n  if (!isErrorLike(err)) {\n    return err\n  }\n\n  err[seen] = undefined // tag to prevent re-looking at this\n  const _err = Object.create(pinoErrProto)\n  _err.type = toString.call(err.constructor) === '[object Function]'\n    ? err.constructor.name\n    : err.name\n  _err.message = messageWithCauses(err)\n  _err.stack = stackWithCauses(err)\n\n  if (Array.isArray(err.errors)) {\n    _err.aggregateErrors = err.errors.map(err => errSerializer(err))\n  }\n\n  for (const key in err) {\n    if (_err[key] === undefined) {\n      const val = err[key]\n      if (isErrorLike(val)) {\n        // We append cause messages and stacks to _err, therefore skipping causes here\n        if (key !== 'cause' && !Object.prototype.hasOwnProperty.call(val, seen)) {\n          _err[key] = errSerializer(val)\n        }\n      } else {\n        _err[key] = val\n      }\n    }\n  }\n\n  delete err[seen] // clean up tag in case err is serialized again later\n  _err.raw = err\n  return _err\n}\n", "'use strict'\n\nmodule.exports = errWithCauseSerializer\n\nconst { isErrorLike } = require('./err-helpers')\nconst { pinoErrProto, pinoErrorSymbols } = require('./err-proto')\nconst { seen } = pinoErrorSymbols\n\nconst { toString } = Object.prototype\n\nfunction errWithCauseSerializer (err) {\n  if (!isErrorLike(err)) {\n    return err\n  }\n\n  err[seen] = undefined // tag to prevent re-looking at this\n  const _err = Object.create(pinoErrProto)\n  _err.type = toString.call(err.constructor) === '[object Function]'\n    ? err.constructor.name\n    : err.name\n  _err.message = err.message\n  _err.stack = err.stack\n\n  if (Array.isArray(err.errors)) {\n    _err.aggregateErrors = err.errors.map(err => errWithCauseSerializer(err))\n  }\n\n  if (isErrorLike(err.cause) && !Object.prototype.hasOwnProperty.call(err.cause, seen)) {\n    _err.cause = errWithCauseSerializer(err.cause)\n  }\n\n  for (const key in err) {\n    if (_err[key] === undefined) {\n      const val = err[key]\n      if (isErrorLike(val)) {\n        if (!Object.prototype.hasOwnProperty.call(val, seen)) {\n          _err[key] = errWithCauseSerializer(val)\n        }\n      } else {\n        _err[key] = val\n      }\n    }\n  }\n\n  delete err[seen] // clean up tag in case err is serialized again later\n  _err.raw = err\n  return _err\n}\n", "'use strict'\n\nmodule.exports = {\n  mapHttpRequest,\n  reqSerializer\n}\n\nconst rawSymbol = Symbol('pino-raw-req-ref')\nconst pinoReqProto = Object.create({}, {\n  id: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  method: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  url: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  query: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  params: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  headers: {\n    enumerable: true,\n    writable: true,\n    value: {}\n  },\n  remoteAddress: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  remotePort: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  raw: {\n    enumerable: false,\n    get: function () {\n      return this[rawSymbol]\n    },\n    set: function (val) {\n      this[rawSymbol] = val\n    }\n  }\n})\nObject.defineProperty(pinoReqProto, rawSymbol, {\n  writable: true,\n  value: {}\n})\n\nfunction reqSerializer (req) {\n  // req.info is for hapi compat.\n  const connection = req.info || req.socket\n  const _req = Object.create(pinoReqProto)\n  _req.id = (typeof req.id === 'function' ? req.id() : (req.id || (req.info ? req.info.id : undefined)))\n  _req.method = req.method\n  // req.originalUrl is for expressjs compat.\n  if (req.originalUrl) {\n    _req.url = req.originalUrl\n  } else {\n    const path = req.path\n    // path for safe hapi compat.\n    _req.url = typeof path === 'string' ? path : (req.url ? req.url.path || req.url : undefined)\n  }\n\n  if (req.query) {\n    _req.query = req.query\n  }\n\n  if (req.params) {\n    _req.params = req.params\n  }\n\n  _req.headers = req.headers\n  _req.remoteAddress = connection && connection.remoteAddress\n  _req.remotePort = connection && connection.remotePort\n  // req.raw is  for hapi compat/equivalence\n  _req.raw = req.raw || req\n  return _req\n}\n\nfunction mapHttpRequest (req) {\n  return {\n    req: reqSerializer(req)\n  }\n}\n", "'use strict'\n\nmodule.exports = {\n  mapHttpResponse,\n  resSerializer\n}\n\nconst rawSymbol = Symbol('pino-raw-res-ref')\nconst pinoResProto = Object.create({}, {\n  statusCode: {\n    enumerable: true,\n    writable: true,\n    value: 0\n  },\n  headers: {\n    enumerable: true,\n    writable: true,\n    value: ''\n  },\n  raw: {\n    enumerable: false,\n    get: function () {\n      return this[rawSymbol]\n    },\n    set: function (val) {\n      this[rawSymbol] = val\n    }\n  }\n})\nObject.defineProperty(pinoResProto, rawSymbol, {\n  writable: true,\n  value: {}\n})\n\nfunction resSerializer (res) {\n  const _res = Object.create(pinoResProto)\n  _res.statusCode = res.headersSent ? res.statusCode : null\n  _res.headers = res.getHeaders ? res.getHeaders() : res._headers\n  _res.raw = res\n  return _res\n}\n\nfunction mapHttpResponse (res) {\n  return {\n    res: resSerializer(res)\n  }\n}\n", "'use strict'\n\nconst errSerializer = require('./lib/err')\nconst errWithCauseSerializer = require('./lib/err-with-cause')\nconst reqSerializers = require('./lib/req')\nconst resSerializers = require('./lib/res')\n\nmodule.exports = {\n  err: errSerializer,\n  errWithCause: errWithCauseSerializer,\n  mapHttpRequest: reqSerializers.mapHttpRequest,\n  mapHttpResponse: resSerializers.mapHttpResponse,\n  req: reqSerializers.reqSerializer,\n  res: resSerializers.resSerializer,\n\n  wrapErrorSerializer: function wrapErrorSerializer (customSerializer) {\n    if (customSerializer === errSerializer) return customSerializer\n    return function wrapErrSerializer (err) {\n      return customSerializer(errSerializer(err))\n    }\n  },\n\n  wrapRequestSerializer: function wrapRequestSerializer (customSerializer) {\n    if (customSerializer === reqSerializers.reqSerializer) return customSerializer\n    return function wrappedReqSerializer (req) {\n      return customSerializer(reqSerializers.reqSerializer(req))\n    }\n  },\n\n  wrapResponseSerializer: function wrapResponseSerializer (customSerializer) {\n    if (customSerializer === resSerializers.resSerializer) return customSerializer\n    return function wrappedResSerializer (res) {\n      return customSerializer(resSerializers.resSerializer(res))\n    }\n  }\n}\n", "'use strict'\n\nfunction noOpPrepareStackTrace (_, stack) {\n  return stack\n}\n\nmodule.exports = function getCallers () {\n  const originalPrepare = Error.prepareStackTrace\n  Error.prepareStackTrace = noOpPrepareStackTrace\n  const stack = new Error().stack\n  Error.prepareStackTrace = originalPrepare\n\n  if (!Array.isArray(stack)) {\n    return undefined\n  }\n\n  const entries = stack.slice(2)\n\n  const fileNames = []\n\n  for (const entry of entries) {\n    if (!entry) {\n      continue\n    }\n\n    fileNames.push(entry.getFileName())\n  }\n\n  return fileNames\n}\n", "'use strict'\n\nfunction deepClone (obj) {\n  if (obj === null || typeof obj !== 'object') {\n    return obj\n  }\n\n  if (obj instanceof Date) {\n    return new Date(obj.getTime())\n  }\n\n  if (obj instanceof Array) {\n    const cloned = []\n    for (let i = 0; i < obj.length; i++) {\n      cloned[i] = deepClone(obj[i])\n    }\n    return cloned\n  }\n\n  if (typeof obj === 'object') {\n    const cloned = Object.create(Object.getPrototypeOf(obj))\n    for (const key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        cloned[key] = deepClone(obj[key])\n      }\n    }\n    return cloned\n  }\n\n  return obj\n}\n\nfunction parsePath (path) {\n  const parts = []\n  let current = ''\n  let inBrackets = false\n  let inQuotes = false\n  let quoteChar = ''\n\n  for (let i = 0; i < path.length; i++) {\n    const char = path[i]\n\n    if (!inBrackets && char === '.') {\n      if (current) {\n        parts.push(current)\n        current = ''\n      }\n    } else if (char === '[') {\n      if (current) {\n        parts.push(current)\n        current = ''\n      }\n      inBrackets = true\n    } else if (char === ']' && inBrackets) {\n      // Always push the current value when closing brackets, even if it's an empty string\n      parts.push(current)\n      current = ''\n      inBrackets = false\n      inQuotes = false\n    } else if ((char === '\"' || char === \"'\") && inBrackets) {\n      if (!inQuotes) {\n        inQuotes = true\n        quoteChar = char\n      } else if (char === quoteChar) {\n        inQuotes = false\n        quoteChar = ''\n      } else {\n        current += char\n      }\n    } else {\n      current += char\n    }\n  }\n\n  if (current) {\n    parts.push(current)\n  }\n\n  return parts\n}\n\nfunction setValue (obj, parts, value) {\n  let current = obj\n\n  for (let i = 0; i < parts.length - 1; i++) {\n    const key = parts[i]\n    // Type safety: Check if current is an object before using 'in' operator\n    if (typeof current !== 'object' || current === null || !(key in current)) {\n      return false // Path doesn't exist, don't create it\n    }\n    if (typeof current[key] !== 'object' || current[key] === null) {\n      return false // Path doesn't exist properly\n    }\n    current = current[key]\n  }\n\n  const lastKey = parts[parts.length - 1]\n  if (lastKey === '*') {\n    if (Array.isArray(current)) {\n      for (let i = 0; i < current.length; i++) {\n        current[i] = value\n      }\n    } else if (typeof current === 'object' && current !== null) {\n      for (const key in current) {\n        if (Object.prototype.hasOwnProperty.call(current, key)) {\n          current[key] = value\n        }\n      }\n    }\n  } else {\n    // Type safety: Check if current is an object before using 'in' operator\n    if (typeof current === 'object' && current !== null && lastKey in current && Object.prototype.hasOwnProperty.call(current, lastKey)) {\n      current[lastKey] = value\n    }\n  }\n  return true\n}\n\nfunction removeKey (obj, parts) {\n  let current = obj\n\n  for (let i = 0; i < parts.length - 1; i++) {\n    const key = parts[i]\n    // Type safety: Check if current is an object before using 'in' operator\n    if (typeof current !== 'object' || current === null || !(key in current)) {\n      return false // Path doesn't exist, don't create it\n    }\n    if (typeof current[key] !== 'object' || current[key] === null) {\n      return false // Path doesn't exist properly\n    }\n    current = current[key]\n  }\n\n  const lastKey = parts[parts.length - 1]\n  if (lastKey === '*') {\n    if (Array.isArray(current)) {\n      // For arrays, we can't really \"remove\" all items as that would change indices\n      // Instead, we set them to undefined which will be omitted by JSON.stringify\n      for (let i = 0; i < current.length; i++) {\n        current[i] = undefined\n      }\n    } else if (typeof current === 'object' && current !== null) {\n      for (const key in current) {\n        if (Object.prototype.hasOwnProperty.call(current, key)) {\n          delete current[key]\n        }\n      }\n    }\n  } else {\n    // Type safety: Check if current is an object before using 'in' operator\n    if (typeof current === 'object' && current !== null && lastKey in current && Object.prototype.hasOwnProperty.call(current, lastKey)) {\n      delete current[lastKey]\n    }\n  }\n  return true\n}\n\n// Sentinel object to distinguish between undefined value and non-existent path\nconst PATH_NOT_FOUND = Symbol('PATH_NOT_FOUND')\n\nfunction getValueIfExists (obj, parts) {\n  let current = obj\n\n  for (const part of parts) {\n    if (current === null || current === undefined) {\n      return PATH_NOT_FOUND\n    }\n    // Type safety: Check if current is an object before property access\n    if (typeof current !== 'object' || current === null) {\n      return PATH_NOT_FOUND\n    }\n    // Check if the property exists before accessing it\n    if (!(part in current)) {\n      return PATH_NOT_FOUND\n    }\n    current = current[part]\n  }\n\n  return current\n}\n\nfunction getValue (obj, parts) {\n  let current = obj\n\n  for (const part of parts) {\n    if (current === null || current === undefined) {\n      return undefined\n    }\n    // Type safety: Check if current is an object before property access\n    if (typeof current !== 'object' || current === null) {\n      return undefined\n    }\n    current = current[part]\n  }\n\n  return current\n}\n\nfunction redactPaths (obj, paths, censor, remove = false) {\n  for (const path of paths) {\n    const parts = parsePath(path)\n\n    if (parts.includes('*')) {\n      redactWildcardPath(obj, parts, censor, path, remove)\n    } else {\n      if (remove) {\n        removeKey(obj, parts)\n      } else {\n        // Get value only if path exists - single traversal\n        const value = getValueIfExists(obj, parts)\n        if (value === PATH_NOT_FOUND) {\n          continue\n        }\n\n        const actualCensor = typeof censor === 'function'\n          ? censor(value, parts)\n          : censor\n        setValue(obj, parts, actualCensor)\n      }\n    }\n  }\n}\n\nfunction redactWildcardPath (obj, parts, censor, originalPath, remove = false) {\n  const wildcardIndex = parts.indexOf('*')\n\n  if (wildcardIndex === parts.length - 1) {\n    const parentParts = parts.slice(0, -1)\n    let current = obj\n\n    for (const part of parentParts) {\n      if (current === null || current === undefined) return\n      // Type safety: Check if current is an object before property access\n      if (typeof current !== 'object' || current === null) return\n      current = current[part]\n    }\n\n    if (Array.isArray(current)) {\n      if (remove) {\n        // For arrays, set all items to undefined which will be omitted by JSON.stringify\n        for (let i = 0; i < current.length; i++) {\n          current[i] = undefined\n        }\n      } else {\n        for (let i = 0; i < current.length; i++) {\n          const indexPath = [...parentParts, i.toString()]\n          const actualCensor = typeof censor === 'function'\n            ? censor(current[i], indexPath)\n            : censor\n          current[i] = actualCensor\n        }\n      }\n    } else if (typeof current === 'object' && current !== null) {\n      if (remove) {\n        // Collect keys to delete to avoid issues with deleting during iteration\n        const keysToDelete = []\n        for (const key in current) {\n          if (Object.prototype.hasOwnProperty.call(current, key)) {\n            keysToDelete.push(key)\n          }\n        }\n        for (const key of keysToDelete) {\n          delete current[key]\n        }\n      } else {\n        for (const key in current) {\n          const keyPath = [...parentParts, key]\n          const actualCensor = typeof censor === 'function'\n            ? censor(current[key], keyPath)\n            : censor\n          current[key] = actualCensor\n        }\n      }\n    }\n  } else {\n    redactIntermediateWildcard(obj, parts, censor, wildcardIndex, originalPath, remove)\n  }\n}\n\nfunction redactIntermediateWildcard (obj, parts, censor, wildcardIndex, originalPath, remove = false) {\n  const beforeWildcard = parts.slice(0, wildcardIndex)\n  const afterWildcard = parts.slice(wildcardIndex + 1)\n  const pathArray = [] // Cached array to avoid allocations\n\n  function traverse (current, pathLength) {\n    if (pathLength === beforeWildcard.length) {\n      if (Array.isArray(current)) {\n        for (let i = 0; i < current.length; i++) {\n          pathArray[pathLength] = i.toString()\n          traverse(current[i], pathLength + 1)\n        }\n      } else if (typeof current === 'object' && current !== null) {\n        for (const key in current) {\n          pathArray[pathLength] = key\n          traverse(current[key], pathLength + 1)\n        }\n      }\n    } else if (pathLength < beforeWildcard.length) {\n      const nextKey = beforeWildcard[pathLength]\n      // Type safety: Check if current is an object before using 'in' operator\n      if (current && typeof current === 'object' && current !== null && nextKey in current) {\n        pathArray[pathLength] = nextKey\n        traverse(current[nextKey], pathLength + 1)\n      }\n    } else {\n      // Check if afterWildcard contains more wildcards\n      if (afterWildcard.includes('*')) {\n        // Recursively handle remaining wildcards\n        // Wrap censor to prepend current path context\n        const wrappedCensor = typeof censor === 'function'\n          ? (value, path) => {\n              const fullPath = [...pathArray.slice(0, pathLength), ...path]\n              return censor(value, fullPath)\n            }\n          : censor\n        redactWildcardPath(current, afterWildcard, wrappedCensor, originalPath, remove)\n      } else {\n        // No more wildcards, apply the redaction directly\n        if (remove) {\n          removeKey(current, afterWildcard)\n        } else {\n          const actualCensor = typeof censor === 'function'\n            ? censor(getValue(current, afterWildcard), [...pathArray.slice(0, pathLength), ...afterWildcard])\n            : censor\n          setValue(current, afterWildcard, actualCensor)\n        }\n      }\n    }\n  }\n\n  if (beforeWildcard.length === 0) {\n    traverse(obj, 0)\n  } else {\n    let current = obj\n    for (let i = 0; i < beforeWildcard.length; i++) {\n      const part = beforeWildcard[i]\n      if (current === null || current === undefined) return\n      // Type safety: Check if current is an object before property access\n      if (typeof current !== 'object' || current === null) return\n      current = current[part]\n      pathArray[i] = part\n    }\n    if (current !== null && current !== undefined) {\n      traverse(current, beforeWildcard.length)\n    }\n  }\n}\n\nfunction buildPathStructure (pathsToClone) {\n  if (pathsToClone.length === 0) {\n    return null // No paths to redact\n  }\n\n  // Parse all paths and organize by depth\n  const pathStructure = new Map()\n  for (const path of pathsToClone) {\n    const parts = parsePath(path)\n    let current = pathStructure\n    for (let i = 0; i < parts.length; i++) {\n      const part = parts[i]\n      if (!current.has(part)) {\n        current.set(part, new Map())\n      }\n      current = current.get(part)\n    }\n  }\n  return pathStructure\n}\n\nfunction selectiveClone (obj, pathStructure) {\n  if (!pathStructure) {\n    return obj // No paths to redact, return original\n  }\n\n  function cloneSelectively (source, pathMap, depth = 0) {\n    if (!pathMap || pathMap.size === 0) {\n      return source // No more paths to clone, return reference\n    }\n\n    if (source === null || typeof source !== 'object') {\n      return source\n    }\n\n    if (source instanceof Date) {\n      return new Date(source.getTime())\n    }\n\n    if (Array.isArray(source)) {\n      const cloned = []\n      for (let i = 0; i < source.length; i++) {\n        const indexStr = i.toString()\n        if (pathMap.has(indexStr) || pathMap.has('*')) {\n          cloned[i] = cloneSelectively(source[i], pathMap.get(indexStr) || pathMap.get('*'))\n        } else {\n          cloned[i] = source[i] // Share reference for non-redacted items\n        }\n      }\n      return cloned\n    }\n\n    // Handle objects\n    const cloned = Object.create(Object.getPrototypeOf(source))\n    for (const key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        if (pathMap.has(key) || pathMap.has('*')) {\n          cloned[key] = cloneSelectively(source[key], pathMap.get(key) || pathMap.get('*'))\n        } else {\n          cloned[key] = source[key] // Share reference for non-redacted properties\n        }\n      }\n    }\n    return cloned\n  }\n\n  return cloneSelectively(obj, pathStructure)\n}\n\nfunction validatePath (path) {\n  if (typeof path !== 'string') {\n    throw new Error('Paths must be (non-empty) strings')\n  }\n\n  if (path === '') {\n    throw new Error('Invalid redaction path ()')\n  }\n\n  // Check for double dots\n  if (path.includes('..')) {\n    throw new Error(`Invalid redaction path (${path})`)\n  }\n\n  // Check for comma-separated paths (invalid syntax)\n  if (path.includes(',')) {\n    throw new Error(`Invalid redaction path (${path})`)\n  }\n\n  // Check for unmatched brackets\n  let bracketCount = 0\n  let inQuotes = false\n  let quoteChar = ''\n\n  for (let i = 0; i < path.length; i++) {\n    const char = path[i]\n\n    if ((char === '\"' || char === \"'\") && bracketCount > 0) {\n      if (!inQuotes) {\n        inQuotes = true\n        quoteChar = char\n      } else if (char === quoteChar) {\n        inQuotes = false\n        quoteChar = ''\n      }\n    } else if (char === '[' && !inQuotes) {\n      bracketCount++\n    } else if (char === ']' && !inQuotes) {\n      bracketCount--\n      if (bracketCount < 0) {\n        throw new Error(`Invalid redaction path (${path})`)\n      }\n    }\n  }\n\n  if (bracketCount !== 0) {\n    throw new Error(`Invalid redaction path (${path})`)\n  }\n}\n\nfunction validatePaths (paths) {\n  if (!Array.isArray(paths)) {\n    throw new TypeError('paths must be an array')\n  }\n\n  for (const path of paths) {\n    validatePath(path)\n  }\n}\n\nfunction slowRedact (options = {}) {\n  const {\n    paths = [],\n    censor = '[REDACTED]',\n    serialize = JSON.stringify,\n    strict = true,\n    remove = false\n  } = options\n\n  // Validate paths upfront to match fast-redact behavior\n  validatePaths(paths)\n\n  // Build path structure once during setup, not on every call\n  const pathStructure = buildPathStructure(paths)\n\n  return function redact (obj) {\n    if (strict && (obj === null || typeof obj !== 'object')) {\n      if (obj === null || obj === undefined) {\n        return serialize ? serialize(obj) : obj\n      }\n      if (typeof obj !== 'object') {\n        return serialize ? serialize(obj) : obj\n      }\n    }\n\n    // Only clone paths that need redaction\n    const cloned = selectiveClone(obj, pathStructure)\n    const original = obj // Keep reference to original for restore\n\n    let actualCensor = censor\n    if (typeof censor === 'function') {\n      actualCensor = censor\n    }\n\n    redactPaths(cloned, paths, actualCensor, remove)\n\n    if (serialize === false) {\n      cloned.restore = function () {\n        return deepClone(original) // Full clone only when restore is called\n      }\n      return cloned\n    }\n\n    if (typeof serialize === 'function') {\n      return serialize(cloned)\n    }\n\n    return JSON.stringify(cloned)\n  }\n}\n\nmodule.exports = slowRedact\n", "'use strict'\n\nconst setLevelSym = Symbol('pino.setLevel')\nconst getLevelSym = Symbol('pino.getLevel')\nconst levelValSym = Symbol('pino.levelVal')\nconst levelCompSym = Symbol('pino.levelComp')\nconst useLevelLabelsSym = Symbol('pino.useLevelLabels')\nconst useOnlyCustomLevelsSym = Symbol('pino.useOnlyCustomLevels')\nconst mixinSym = Symbol('pino.mixin')\n\nconst lsCacheSym = Symbol('pino.lsCache')\nconst chindingsSym = Symbol('pino.chindings')\n\nconst asJsonSym = Symbol('pino.asJson')\nconst writeSym = Symbol('pino.write')\nconst redactFmtSym = Symbol('pino.redactFmt')\n\nconst timeSym = Symbol('pino.time')\nconst timeSliceIndexSym = Symbol('pino.timeSliceIndex')\nconst streamSym = Symbol('pino.stream')\nconst stringifySym = Symbol('pino.stringify')\nconst stringifySafeSym = Symbol('pino.stringifySafe')\nconst stringifiersSym = Symbol('pino.stringifiers')\nconst endSym = Symbol('pino.end')\nconst formatOptsSym = Symbol('pino.formatOpts')\nconst messageKeySym = Symbol('pino.messageKey')\nconst errorKeySym = Symbol('pino.errorKey')\nconst nestedKeySym = Symbol('pino.nestedKey')\nconst nestedKeyStrSym = Symbol('pino.nestedKeyStr')\nconst mixinMergeStrategySym = Symbol('pino.mixinMergeStrategy')\nconst msgPrefixSym = Symbol('pino.msgPrefix')\n\nconst wildcardFirstSym = Symbol('pino.wildcardFirst')\n\n// public symbols, no need to use the same pino\n// version for these\nconst serializersSym = Symbol.for('pino.serializers')\nconst formattersSym = Symbol.for('pino.formatters')\nconst hooksSym = Symbol.for('pino.hooks')\nconst needsMetadataGsym = Symbol.for('pino.metadata')\n\nmodule.exports = {\n  setLevelSym,\n  getLevelSym,\n  levelValSym,\n  levelCompSym,\n  useLevelLabelsSym,\n  mixinSym,\n  lsCacheSym,\n  chindingsSym,\n  asJsonSym,\n  writeSym,\n  serializersSym,\n  redactFmtSym,\n  timeSym,\n  timeSliceIndexSym,\n  streamSym,\n  stringifySym,\n  stringifySafeSym,\n  stringifiersSym,\n  endSym,\n  formatOptsSym,\n  messageKeySym,\n  errorKeySym,\n  nestedKeySym,\n  wildcardFirstSym,\n  needsMetadataGsym,\n  useOnlyCustomLevelsSym,\n  formattersSym,\n  hooksSym,\n  nestedKeyStrSym,\n  mixinMergeStrategySym,\n  msgPrefixSym\n}\n", "'use strict'\n\nconst Redact = require('@pinojs/redact')\nconst { redactFmtSym, wildcardFirstSym } = require('./symbols')\n\n// Custom rx regex equivalent to fast-redact's rx\nconst rx = /[^.[\\]]+|\\[([^[\\]]*?)\\]/g\n\nconst CENSOR = '[Redacted]'\nconst strict = false // TODO should this be configurable?\n\nfunction redaction (opts, serialize) {\n  const { paths, censor, remove } = handle(opts)\n\n  const shape = paths.reduce((o, str) => {\n    rx.lastIndex = 0\n    const first = rx.exec(str)\n    const next = rx.exec(str)\n\n    // ns is the top-level path segment, brackets + quoting removed.\n    let ns = first[1] !== undefined\n      ? first[1].replace(/^(?:\"|'|`)(.*)(?:\"|'|`)$/, '$1')\n      : first[0]\n\n    if (ns === '*') {\n      ns = wildcardFirstSym\n    }\n\n    // top level key:\n    if (next === null) {\n      o[ns] = null\n      return o\n    }\n\n    // path with at least two segments:\n    // if ns is already redacted at the top level, ignore lower level redactions\n    if (o[ns] === null) {\n      return o\n    }\n\n    const { index } = next\n    const nextPath = `${str.substr(index, str.length - 1)}`\n\n    o[ns] = o[ns] || []\n\n    // shape is a mix of paths beginning with literal values and wildcard\n    // paths [ \"a.b.c\", \"*.b.z\" ] should reduce to a shape of\n    // { \"a\": [ \"b.c\", \"b.z\" ], *: [ \"b.z\" ] }\n    // note: \"b.z\" is in both \"a\" and * arrays because \"a\" matches the wildcard.\n    // (* entry has wildcardFirstSym as key)\n    if (ns !== wildcardFirstSym && o[ns].length === 0) {\n      // first time ns's get all '*' redactions so far\n      o[ns].push(...(o[wildcardFirstSym] || []))\n    }\n\n    if (ns === wildcardFirstSym) {\n      // new * path gets added to all previously registered literal ns's.\n      Object.keys(o).forEach(function (k) {\n        if (o[k]) {\n          o[k].push(nextPath)\n        }\n      })\n    }\n\n    o[ns].push(nextPath)\n    return o\n  }, {})\n\n  // the redactor assigned to the format symbol key\n  // provides top level redaction for instances where\n  // an object is interpolated into the msg string\n  const result = {\n    [redactFmtSym]: Redact({ paths, censor, serialize, strict, remove })\n  }\n\n  const topCensor = (...args) => {\n    return typeof censor === 'function' ? serialize(censor(...args)) : serialize(censor)\n  }\n\n  return [...Object.keys(shape), ...Object.getOwnPropertySymbols(shape)].reduce((o, k) => {\n    // top level key:\n    if (shape[k] === null) {\n      o[k] = (value) => topCensor(value, [k])\n    } else {\n      const wrappedCensor = typeof censor === 'function'\n        ? (value, path) => {\n            return censor(value, [k, ...path])\n          }\n        : censor\n      o[k] = Redact({\n        paths: shape[k],\n        censor: wrappedCensor,\n        serialize,\n        strict,\n        remove\n      })\n    }\n    return o\n  }, result)\n}\n\nfunction handle (opts) {\n  if (Array.isArray(opts)) {\n    opts = { paths: opts, censor: CENSOR }\n    return opts\n  }\n  let { paths, censor = CENSOR, remove } = opts\n  if (Array.isArray(paths) === false) { throw Error('pino \u2013 redact must contain an array of strings') }\n  if (remove === true) censor = undefined\n\n  return { paths, censor, remove }\n}\n\nmodule.exports = redaction\n", "'use strict'\n\nconst nullTime = () => ''\n\nconst epochTime = () => `,\"time\":${Date.now()}`\n\nconst unixTime = () => `,\"time\":${Math.round(Date.now() / 1000.0)}`\n\nconst isoTime = () => `,\"time\":\"${new Date(Date.now()).toISOString()}\"` // using Date.now() for testability\n\nconst NS_PER_MS = 1_000_000n\nconst NS_PER_SEC = 1_000_000_000n\n\nconst startWallTimeNs = BigInt(Date.now()) * NS_PER_MS\nconst startHrTime = process.hrtime.bigint()\n\nconst isoTimeNano = () => {\n  const elapsedNs = process.hrtime.bigint() - startHrTime\n  const currentTimeNs = startWallTimeNs + elapsedNs\n\n  const secondsSinceEpoch = currentTimeNs / NS_PER_SEC\n  const nanosWithinSecond = currentTimeNs % NS_PER_SEC\n\n  const msSinceEpoch = Number(secondsSinceEpoch * 1000n + nanosWithinSecond / 1_000_000n)\n  const date = new Date(msSinceEpoch)\n\n  const year = date.getUTCFullYear()\n  const month = (date.getUTCMonth() + 1).toString().padStart(2, '0')\n  const day = date.getUTCDate().toString().padStart(2, '0')\n  const hours = date.getUTCHours().toString().padStart(2, '0')\n  const minutes = date.getUTCMinutes().toString().padStart(2, '0')\n  const seconds = date.getUTCSeconds().toString().padStart(2, '0')\n\n  return `,\"time\":\"${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${nanosWithinSecond\n    .toString()\n    .padStart(9, '0')}Z\"`\n}\n\nmodule.exports = { nullTime, epochTime, unixTime, isoTime, isoTimeNano }\n", "'use strict'\nfunction tryStringify (o) {\n  try { return JSON.stringify(o) } catch(e) { return '\"[Circular]\"' }\n}\n\nmodule.exports = format\n\nfunction format(f, args, opts) {\n  var ss = (opts && opts.stringify) || tryStringify\n  var offset = 1\n  if (typeof f === 'object' && f !== null) {\n    var len = args.length + offset\n    if (len === 1) return f\n    var objects = new Array(len)\n    objects[0] = ss(f)\n    for (var index = 1; index < len; index++) {\n      objects[index] = ss(args[index])\n    }\n    return objects.join(' ')\n  }\n  if (typeof f !== 'string') {\n    return f\n  }\n  var argLen = args.length\n  if (argLen === 0) return f\n  var str = ''\n  var a = 1 - offset\n  var lastPos = -1\n  var flen = (f && f.length) || 0\n  for (var i = 0; i < flen;) {\n    if (f.charCodeAt(i) === 37 && i + 1 < flen) {\n      lastPos = lastPos > -1 ? lastPos : 0\n      switch (f.charCodeAt(i + 1)) {\n        case 100: // 'd'\n        case 102: // 'f'\n          if (a >= argLen)\n            break\n          if (args[a] == null)  break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += Number(args[a])\n          lastPos = i + 2\n          i++\n          break\n        case 105: // 'i'\n          if (a >= argLen)\n            break\n          if (args[a] == null)  break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += Math.floor(Number(args[a]))\n          lastPos = i + 2\n          i++\n          break\n        case 79: // 'O'\n        case 111: // 'o'\n        case 106: // 'j'\n          if (a >= argLen)\n            break\n          if (args[a] === undefined) break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          var type = typeof args[a]\n          if (type === 'string') {\n            str += '\\'' + args[a] + '\\''\n            lastPos = i + 2\n            i++\n            break\n          }\n          if (type === 'function') {\n            str += args[a].name || '<anonymous>'\n            lastPos = i + 2\n            i++\n            break\n          }\n          str += ss(args[a])\n          lastPos = i + 2\n          i++\n          break\n        case 115: // 's'\n          if (a >= argLen)\n            break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += String(args[a])\n          lastPos = i + 2\n          i++\n          break\n        case 37: // '%'\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += '%'\n          lastPos = i + 2\n          i++\n          a--\n          break\n      }\n      ++a\n    }\n    ++i\n  }\n  if (lastPos === -1)\n    return f\n  else if (lastPos < flen) {\n    str += f.slice(lastPos)\n  }\n\n  return str\n}\n", "'use strict'\n\n/* global SharedArrayBuffer, Atomics */\n\nif (typeof SharedArrayBuffer !== 'undefined' && typeof Atomics !== 'undefined') {\n  const nil = new Int32Array(new SharedArrayBuffer(4))\n\n  function sleep (ms) {\n    // also filters out NaN, non-number types, including empty strings, but allows bigints\n    const valid = ms > 0 && ms < Infinity \n    if (valid === false) {\n      if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n        throw TypeError('sleep: ms must be a number')\n      }\n      throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n    }\n\n    Atomics.wait(nil, 0, 0, Number(ms))\n  }\n  module.exports = sleep\n} else {\n\n  function sleep (ms) {\n    // also filters out NaN, non-number types, including empty strings, but allows bigints\n    const valid = ms > 0 && ms < Infinity \n    if (valid === false) {\n      if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n        throw TypeError('sleep: ms must be a number')\n      }\n      throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n    }\n    const target = Date.now() + Number(ms)\n    while (target > Date.now()){}\n  }\n\n  module.exports = sleep\n\n}\n", "'use strict'\n\nconst fs = require('fs')\nconst EventEmitter = require('events')\nconst inherits = require('util').inherits\nconst path = require('path')\nconst sleep = require('atomic-sleep')\nconst assert = require('assert')\n\nconst BUSY_WRITE_TIMEOUT = 100\nconst kEmptyBuffer = Buffer.allocUnsafe(0)\n\n// 16 KB. Don't write more than docker buffer size.\n// https://github.com/moby/moby/blob/513ec73831269947d38a644c278ce3cac36783b2/daemon/logger/copier.go#L13\nconst MAX_WRITE = 16 * 1024\n\nconst kContentModeBuffer = 'buffer'\nconst kContentModeUtf8 = 'utf8'\n\nconst [major, minor] = (process.versions.node || '0.0').split('.').map(Number)\nconst kCopyBuffer = major >= 22 && minor >= 7\n\nfunction openFile (file, sonic) {\n  sonic._opening = true\n  sonic._writing = true\n  sonic._asyncDrainScheduled = false\n\n  // NOTE: 'error' and 'ready' events emitted below only relevant when sonic.sync===false\n  // for sync mode, there is no way to add a listener that will receive these\n\n  function fileOpened (err, fd) {\n    if (err) {\n      sonic._reopening = false\n      sonic._writing = false\n      sonic._opening = false\n\n      if (sonic.sync) {\n        process.nextTick(() => {\n          if (sonic.listenerCount('error') > 0) {\n            sonic.emit('error', err)\n          }\n        })\n      } else {\n        sonic.emit('error', err)\n      }\n      return\n    }\n\n    const reopening = sonic._reopening\n\n    sonic.fd = fd\n    sonic.file = file\n    sonic._reopening = false\n    sonic._opening = false\n    sonic._writing = false\n\n    if (sonic.sync) {\n      process.nextTick(() => sonic.emit('ready'))\n    } else {\n      sonic.emit('ready')\n    }\n\n    if (sonic.destroyed) {\n      return\n    }\n\n    // start\n    if ((!sonic._writing && sonic._len > sonic.minLength) || sonic._flushPending) {\n      sonic._actualWrite()\n    } else if (reopening) {\n      process.nextTick(() => sonic.emit('drain'))\n    }\n  }\n\n  const flags = sonic.append ? 'a' : 'w'\n  const mode = sonic.mode\n\n  if (sonic.sync) {\n    try {\n      if (sonic.mkdir) fs.mkdirSync(path.dirname(file), { recursive: true })\n      const fd = fs.openSync(file, flags, mode)\n      fileOpened(null, fd)\n    } catch (err) {\n      fileOpened(err)\n      throw err\n    }\n  } else if (sonic.mkdir) {\n    fs.mkdir(path.dirname(file), { recursive: true }, (err) => {\n      if (err) return fileOpened(err)\n      fs.open(file, flags, mode, fileOpened)\n    })\n  } else {\n    fs.open(file, flags, mode, fileOpened)\n  }\n}\n\nfunction SonicBoom (opts) {\n  if (!(this instanceof SonicBoom)) {\n    return new SonicBoom(opts)\n  }\n\n  let { fd, dest, minLength, maxLength, maxWrite, periodicFlush, sync, append = true, mkdir, retryEAGAIN, fsync, contentMode, mode } = opts || {}\n\n  fd = fd || dest\n\n  this._len = 0\n  this.fd = -1\n  this._bufs = []\n  this._lens = []\n  this._writing = false\n  this._ending = false\n  this._reopening = false\n  this._asyncDrainScheduled = false\n  this._flushPending = false\n  this._hwm = Math.max(minLength || 0, 16387)\n  this.file = null\n  this.destroyed = false\n  this.minLength = minLength || 0\n  this.maxLength = maxLength || 0\n  this.maxWrite = maxWrite || MAX_WRITE\n  this._periodicFlush = periodicFlush || 0\n  this._periodicFlushTimer = undefined\n  this.sync = sync || false\n  this.writable = true\n  this._fsync = fsync || false\n  this.append = append || false\n  this.mode = mode\n  this.retryEAGAIN = retryEAGAIN || (() => true)\n  this.mkdir = mkdir || false\n\n  let fsWriteSync\n  let fsWrite\n  if (contentMode === kContentModeBuffer) {\n    this._writingBuf = kEmptyBuffer\n    this.write = writeBuffer\n    this.flush = flushBuffer\n    this.flushSync = flushBufferSync\n    this._actualWrite = actualWriteBuffer\n    fsWriteSync = () => fs.writeSync(this.fd, this._writingBuf)\n    fsWrite = () => fs.write(this.fd, this._writingBuf, this.release)\n  } else if (contentMode === undefined || contentMode === kContentModeUtf8) {\n    this._writingBuf = ''\n    this.write = write\n    this.flush = flush\n    this.flushSync = flushSync\n    this._actualWrite = actualWrite\n    fsWriteSync = () => {\n      if (Buffer.isBuffer(this._writingBuf)) {\n        return fs.writeSync(this.fd, this._writingBuf)\n      }\n      return fs.writeSync(this.fd, this._writingBuf, 'utf8')\n    }\n    fsWrite = () => {\n      if (Buffer.isBuffer(this._writingBuf)) {\n        return fs.write(this.fd, this._writingBuf, this.release)\n      }\n      return fs.write(this.fd, this._writingBuf, 'utf8', this.release)\n    }\n  } else {\n    throw new Error(`SonicBoom supports \"${kContentModeUtf8}\" and \"${kContentModeBuffer}\", but passed ${contentMode}`)\n  }\n\n  if (typeof fd === 'number') {\n    this.fd = fd\n    process.nextTick(() => this.emit('ready'))\n  } else if (typeof fd === 'string') {\n    openFile(fd, this)\n  } else {\n    throw new Error('SonicBoom supports only file descriptors and files')\n  }\n  if (this.minLength >= this.maxWrite) {\n    throw new Error(`minLength should be smaller than maxWrite (${this.maxWrite})`)\n  }\n\n  this.release = (err, n) => {\n    if (err) {\n      if ((err.code === 'EAGAIN' || err.code === 'EBUSY') && this.retryEAGAIN(err, this._writingBuf.length, this._len - this._writingBuf.length)) {\n        if (this.sync) {\n          // This error code should not happen in sync mode, because it is\n          // not using the underlining operating system asynchronous functions.\n          // However it happens, and so we handle it.\n          // Ref: https://github.com/pinojs/pino/issues/783\n          try {\n            sleep(BUSY_WRITE_TIMEOUT)\n            this.release(undefined, 0)\n          } catch (err) {\n            this.release(err)\n          }\n        } else {\n          // Let's give the destination some time to process the chunk.\n          setTimeout(fsWrite, BUSY_WRITE_TIMEOUT)\n        }\n      } else {\n        this._writing = false\n\n        this.emit('error', err)\n      }\n      return\n    }\n\n    this.emit('write', n)\n    const releasedBufObj = releaseWritingBuf(this._writingBuf, this._len, n)\n    this._len = releasedBufObj.len\n    this._writingBuf = releasedBufObj.writingBuf\n\n    if (this._writingBuf.length) {\n      if (!this.sync) {\n        fsWrite()\n        return\n      }\n\n      try {\n        do {\n          const n = fsWriteSync()\n          const releasedBufObj = releaseWritingBuf(this._writingBuf, this._len, n)\n          this._len = releasedBufObj.len\n          this._writingBuf = releasedBufObj.writingBuf\n        } while (this._writingBuf.length)\n      } catch (err) {\n        this.release(err)\n        return\n      }\n    }\n\n    if (this._fsync) {\n      fs.fsyncSync(this.fd)\n    }\n\n    const len = this._len\n    if (this._reopening) {\n      this._writing = false\n      this._reopening = false\n      this.reopen()\n    } else if (len > this.minLength) {\n      this._actualWrite()\n    } else if (this._ending) {\n      if (len > 0) {\n        this._actualWrite()\n      } else {\n        this._writing = false\n        actualClose(this)\n      }\n    } else {\n      this._writing = false\n      if (this.sync) {\n        if (!this._asyncDrainScheduled) {\n          this._asyncDrainScheduled = true\n          process.nextTick(emitDrain, this)\n        }\n      } else {\n        this.emit('drain')\n      }\n    }\n  }\n\n  this.on('newListener', function (name) {\n    if (name === 'drain') {\n      this._asyncDrainScheduled = false\n    }\n  })\n\n  if (this._periodicFlush !== 0) {\n    this._periodicFlushTimer = setInterval(() => this.flush(null), this._periodicFlush)\n    this._periodicFlushTimer.unref()\n  }\n}\n\n/**\n * Release the writingBuf after fs.write n bytes data\n * @param {string | Buffer} writingBuf - currently writing buffer, usually be instance._writingBuf.\n * @param {number} len - currently buffer length, usually be instance._len.\n * @param {number} n - number of bytes fs already written\n * @returns {{writingBuf: string | Buffer, len: number}} released writingBuf and length\n */\nfunction releaseWritingBuf (writingBuf, len, n) {\n  if (typeof writingBuf === 'string') {\n    writingBuf = Buffer.from(writingBuf)\n  }\n\n  len = Math.max(len - n, 0)\n  writingBuf = writingBuf.subarray(n)\n  return { writingBuf, len }\n}\n\nfunction emitDrain (sonic) {\n  const hasListeners = sonic.listenerCount('drain') > 0\n  if (!hasListeners) return\n  sonic._asyncDrainScheduled = false\n  sonic.emit('drain')\n}\n\ninherits(SonicBoom, EventEmitter)\n\nfunction mergeBuf (bufs, len) {\n  if (bufs.length === 0) {\n    return kEmptyBuffer\n  }\n\n  if (bufs.length === 1) {\n    return bufs[0]\n  }\n\n  return Buffer.concat(bufs, len)\n}\n\nfunction write (data) {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  data = '' + data\n  const dataLen = Buffer.byteLength(data)\n  const len = this._len + dataLen\n  const bufs = this._bufs\n\n  if (this.maxLength && len > this.maxLength) {\n    this.emit('drop', data)\n    return this._len < this._hwm\n  }\n\n  if (\n    bufs.length === 0 ||\n    Buffer.byteLength(bufs[bufs.length - 1]) + dataLen > this.maxWrite\n  ) {\n    bufs.push(data)\n  } else {\n    bufs[bufs.length - 1] += data\n  }\n\n  this._len = len\n\n  if (!this._writing && this._len >= this.minLength) {\n    this._actualWrite()\n  }\n\n  return this._len < this._hwm\n}\n\nfunction writeBuffer (data) {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  const len = this._len + data.length\n  const bufs = this._bufs\n  const lens = this._lens\n\n  if (this.maxLength && len > this.maxLength) {\n    this.emit('drop', data)\n    return this._len < this._hwm\n  }\n\n  if (\n    bufs.length === 0 ||\n    lens[lens.length - 1] + data.length > this.maxWrite\n  ) {\n    bufs.push([data])\n    lens.push(data.length)\n  } else {\n    bufs[bufs.length - 1].push(data)\n    lens[lens.length - 1] += data.length\n  }\n\n  this._len = len\n\n  if (!this._writing && this._len >= this.minLength) {\n    this._actualWrite()\n  }\n\n  return this._len < this._hwm\n}\n\nfunction callFlushCallbackOnDrain (cb) {\n  this._flushPending = true\n  const onDrain = () => {\n    // only if _fsync is false to avoid double fsync\n    if (!this._fsync) {\n      try {\n        fs.fsync(this.fd, (err) => {\n          this._flushPending = false\n          cb(err)\n        })\n      } catch (err) {\n        cb(err)\n      }\n    } else {\n      this._flushPending = false\n      cb()\n    }\n    this.off('error', onError)\n  }\n  const onError = (err) => {\n    this._flushPending = false\n    cb(err)\n    this.off('drain', onDrain)\n  }\n\n  this.once('drain', onDrain)\n  this.once('error', onError)\n}\n\nfunction flush (cb) {\n  if (cb != null && typeof cb !== 'function') {\n    throw new Error('flush cb must be a function')\n  }\n\n  if (this.destroyed) {\n    const error = new Error('SonicBoom destroyed')\n    if (cb) {\n      cb(error)\n      return\n    }\n\n    throw error\n  }\n\n  if (this.minLength <= 0) {\n    cb?.()\n    return\n  }\n\n  if (cb) {\n    callFlushCallbackOnDrain.call(this, cb)\n  }\n\n  if (this._writing) {\n    return\n  }\n\n  if (this._bufs.length === 0) {\n    this._bufs.push('')\n  }\n\n  this._actualWrite()\n}\n\nfunction flushBuffer (cb) {\n  if (cb != null && typeof cb !== 'function') {\n    throw new Error('flush cb must be a function')\n  }\n\n  if (this.destroyed) {\n    const error = new Error('SonicBoom destroyed')\n    if (cb) {\n      cb(error)\n      return\n    }\n\n    throw error\n  }\n\n  if (this.minLength <= 0) {\n    cb?.()\n    return\n  }\n\n  if (cb) {\n    callFlushCallbackOnDrain.call(this, cb)\n  }\n\n  if (this._writing) {\n    return\n  }\n\n  if (this._bufs.length === 0) {\n    this._bufs.push([])\n    this._lens.push(0)\n  }\n\n  this._actualWrite()\n}\n\nSonicBoom.prototype.reopen = function (file) {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this._opening) {\n    this.once('ready', () => {\n      this.reopen(file)\n    })\n    return\n  }\n\n  if (this._ending) {\n    return\n  }\n\n  if (!this.file) {\n    throw new Error('Unable to reopen a file descriptor, you must pass a file to SonicBoom')\n  }\n\n  if (file) {\n    this.file = file\n  }\n  this._reopening = true\n\n  if (this._writing) {\n    return\n  }\n\n  const fd = this.fd\n  this.once('ready', () => {\n    if (fd !== this.fd) {\n      fs.close(fd, (err) => {\n        if (err) {\n          return this.emit('error', err)\n        }\n      })\n    }\n  })\n\n  openFile(this.file, this)\n}\n\nSonicBoom.prototype.end = function () {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this._opening) {\n    this.once('ready', () => {\n      this.end()\n    })\n    return\n  }\n\n  if (this._ending) {\n    return\n  }\n\n  this._ending = true\n\n  if (this._writing) {\n    return\n  }\n\n  if (this._len > 0 && this.fd >= 0) {\n    this._actualWrite()\n  } else {\n    actualClose(this)\n  }\n}\n\nfunction flushSync () {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this.fd < 0) {\n    throw new Error('sonic boom is not ready yet')\n  }\n\n  if (!this._writing && this._writingBuf.length > 0) {\n    this._bufs.unshift(this._writingBuf)\n    this._writingBuf = ''\n  }\n\n  let buf = ''\n  while (this._bufs.length || buf.length) {\n    if (buf.length <= 0) {\n      buf = this._bufs[0]\n    }\n    try {\n      const n = Buffer.isBuffer(buf)\n        ? fs.writeSync(this.fd, buf)\n        : fs.writeSync(this.fd, buf, 'utf8')\n      const releasedBufObj = releaseWritingBuf(buf, this._len, n)\n      buf = releasedBufObj.writingBuf\n      this._len = releasedBufObj.len\n      if (buf.length <= 0) {\n        this._bufs.shift()\n      }\n    } catch (err) {\n      const shouldRetry = err.code === 'EAGAIN' || err.code === 'EBUSY'\n      if (shouldRetry && !this.retryEAGAIN(err, buf.length, this._len - buf.length)) {\n        throw err\n      }\n\n      sleep(BUSY_WRITE_TIMEOUT)\n    }\n  }\n\n  try {\n    fs.fsyncSync(this.fd)\n  } catch {\n    // Skip the error. The fd might not support fsync.\n  }\n}\n\nfunction flushBufferSync () {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this.fd < 0) {\n    throw new Error('sonic boom is not ready yet')\n  }\n\n  if (!this._writing && this._writingBuf.length > 0) {\n    this._bufs.unshift([this._writingBuf])\n    this._writingBuf = kEmptyBuffer\n  }\n\n  let buf = kEmptyBuffer\n  while (this._bufs.length || buf.length) {\n    if (buf.length <= 0) {\n      buf = mergeBuf(this._bufs[0], this._lens[0])\n    }\n    try {\n      const n = fs.writeSync(this.fd, buf)\n      buf = buf.subarray(n)\n      this._len = Math.max(this._len - n, 0)\n      if (buf.length <= 0) {\n        this._bufs.shift()\n        this._lens.shift()\n      }\n    } catch (err) {\n      const shouldRetry = err.code === 'EAGAIN' || err.code === 'EBUSY'\n      if (shouldRetry && !this.retryEAGAIN(err, buf.length, this._len - buf.length)) {\n        throw err\n      }\n\n      sleep(BUSY_WRITE_TIMEOUT)\n    }\n  }\n}\n\nSonicBoom.prototype.destroy = function () {\n  if (this.destroyed) {\n    return\n  }\n  actualClose(this)\n}\n\nfunction actualWrite () {\n  const release = this.release\n  this._writing = true\n  this._writingBuf = this._writingBuf.length ? this._writingBuf : this._bufs.shift() || ''\n\n  if (this.sync) {\n    try {\n      const written = Buffer.isBuffer(this._writingBuf)\n        ? fs.writeSync(this.fd, this._writingBuf)\n        : fs.writeSync(this.fd, this._writingBuf, 'utf8')\n      release(null, written)\n    } catch (err) {\n      release(err)\n    }\n  } else {\n    fs.write(this.fd, this._writingBuf, release)\n  }\n}\n\nfunction actualWriteBuffer () {\n  const release = this.release\n  this._writing = true\n  this._writingBuf = this._writingBuf.length ? this._writingBuf : mergeBuf(this._bufs.shift(), this._lens.shift())\n\n  if (this.sync) {\n    try {\n      const written = fs.writeSync(this.fd, this._writingBuf)\n      release(null, written)\n    } catch (err) {\n      release(err)\n    }\n  } else {\n    // fs.write will need to copy string to buffer anyway so\n    // we do it here to avoid the overhead of calculating the buffer size\n    // in releaseWritingBuf.\n    if (kCopyBuffer) {\n      this._writingBuf = Buffer.from(this._writingBuf)\n    }\n    fs.write(this.fd, this._writingBuf, release)\n  }\n}\n\nfunction actualClose (sonic) {\n  if (sonic.fd === -1) {\n    sonic.once('ready', actualClose.bind(null, sonic))\n    return\n  }\n\n  if (sonic._periodicFlushTimer !== undefined) {\n    clearInterval(sonic._periodicFlushTimer)\n  }\n\n  sonic.destroyed = true\n  sonic._bufs = []\n  sonic._lens = []\n\n  assert(typeof sonic.fd === 'number', `sonic.fd must be a number, got ${typeof sonic.fd}`)\n  try {\n    fs.fsync(sonic.fd, closeWrapped)\n  } catch {\n  }\n\n  function closeWrapped () {\n    // We skip errors in fsync\n\n    if (sonic.fd !== 1 && sonic.fd !== 2) {\n      fs.close(sonic.fd, done)\n    } else {\n      done()\n    }\n  }\n\n  function done (err) {\n    if (err) {\n      sonic.emit('error', err)\n      return\n    }\n\n    if (sonic._ending && !sonic._writing) {\n      sonic.emit('finish')\n    }\n    sonic.emit('close')\n  }\n}\n\n/**\n * These export configurations enable JS and TS developers\n * to consumer SonicBoom in whatever way best suits their needs.\n * Some examples of supported import syntax includes:\n * - `const SonicBoom = require('SonicBoom')`\n * - `const { SonicBoom } = require('SonicBoom')`\n * - `import * as SonicBoom from 'SonicBoom'`\n * - `import { SonicBoom } from 'SonicBoom'`\n * - `import SonicBoom from 'SonicBoom'`\n */\nSonicBoom.SonicBoom = SonicBoom\nSonicBoom.default = SonicBoom\nmodule.exports = SonicBoom\n", "'use strict'\n\nconst refs = {\n  exit: [],\n  beforeExit: []\n}\nconst functions = {\n  exit: onExit,\n  beforeExit: onBeforeExit\n}\n\nlet registry\n\nfunction ensureRegistry () {\n  if (registry === undefined) {\n    registry = new FinalizationRegistry(clear)\n  }\n}\n\nfunction install (event) {\n  if (refs[event].length > 0) {\n    return\n  }\n\n  process.on(event, functions[event])\n}\n\nfunction uninstall (event) {\n  if (refs[event].length > 0) {\n    return\n  }\n  process.removeListener(event, functions[event])\n  if (refs.exit.length === 0 && refs.beforeExit.length === 0) {\n    registry = undefined\n  }\n}\n\nfunction onExit () {\n  callRefs('exit')\n}\n\nfunction onBeforeExit () {\n  callRefs('beforeExit')\n}\n\nfunction callRefs (event) {\n  for (const ref of refs[event]) {\n    const obj = ref.deref()\n    const fn = ref.fn\n\n    // This should always happen, however GC is\n    // undeterministic so it might not happen.\n    /* istanbul ignore else */\n    if (obj !== undefined) {\n      fn(obj, event)\n    }\n  }\n  refs[event] = []\n}\n\nfunction clear (ref) {\n  for (const event of ['exit', 'beforeExit']) {\n    const index = refs[event].indexOf(ref)\n    refs[event].splice(index, index + 1)\n    uninstall(event)\n  }\n}\n\nfunction _register (event, obj, fn) {\n  if (obj === undefined) {\n    throw new Error('the object can\\'t be undefined')\n  }\n  install(event)\n  const ref = new WeakRef(obj)\n  ref.fn = fn\n\n  ensureRegistry()\n  registry.register(obj, ref)\n  refs[event].push(ref)\n}\n\nfunction register (obj, fn) {\n  _register('exit', obj, fn)\n}\n\nfunction registerBeforeExit (obj, fn) {\n  _register('beforeExit', obj, fn)\n}\n\nfunction unregister (obj) {\n  if (registry === undefined) {\n    return\n  }\n  registry.unregister(obj)\n  for (const event of ['exit', 'beforeExit']) {\n    refs[event] = refs[event].filter((ref) => {\n      const _obj = ref.deref()\n      return _obj && _obj !== obj\n    })\n    uninstall(event)\n  }\n}\n\nmodule.exports = {\n  register,\n  registerBeforeExit,\n  unregister\n}\n", "{\n  \"name\": \"thread-stream\",\n  \"version\": \"3.1.0\",\n  \"description\": \"A streaming way to send data to a Node.js Worker Thread\",\n  \"main\": \"index.js\",\n  \"types\": \"index.d.ts\",\n  \"dependencies\": {\n    \"real-require\": \"^0.2.0\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^20.1.0\",\n    \"@types/tap\": \"^15.0.0\",\n    \"@yao-pkg/pkg\": \"^5.11.5\",\n    \"desm\": \"^1.3.0\",\n    \"fastbench\": \"^1.0.1\",\n    \"husky\": \"^9.0.6\",\n    \"pino-elasticsearch\": \"^8.0.0\",\n    \"sonic-boom\": \"^4.0.1\",\n    \"standard\": \"^17.0.0\",\n    \"tap\": \"^16.2.0\",\n    \"ts-node\": \"^10.8.0\",\n    \"typescript\": \"^5.3.2\",\n    \"why-is-node-running\": \"^2.2.2\"\n  },\n  \"scripts\": {\n    \"build\": \"tsc --noEmit\",\n    \"test\": \"standard && npm run build && npm run transpile && tap \\\"test/**/*.test.*js\\\" && tap --ts test/*.test.*ts\",\n    \"test:ci\": \"standard && npm run transpile && npm run test:ci:js && npm run test:ci:ts\",\n    \"test:ci:js\": \"tap --no-check-coverage --timeout=120 --coverage-report=lcovonly \\\"test/**/*.test.*js\\\"\",\n    \"test:ci:ts\": \"tap --ts --no-check-coverage --coverage-report=lcovonly \\\"test/**/*.test.*ts\\\"\",\n    \"test:yarn\": \"npm run transpile && tap \\\"test/**/*.test.js\\\" --no-check-coverage\",\n    \"transpile\": \"sh ./test/ts/transpile.sh\",\n    \"prepare\": \"husky install\"\n  },\n  \"standard\": {\n    \"ignore\": [\n      \"test/ts/**/*\",\n      \"test/syntax-error.mjs\"\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mcollina/thread-stream.git\"\n  },\n  \"keywords\": [\n    \"worker\",\n    \"thread\",\n    \"threads\",\n    \"stream\"\n  ],\n  \"author\": \"Matteo Collina <hello@matteocollina.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mcollina/thread-stream/issues\"\n  },\n  \"homepage\": \"https://github.com/mcollina/thread-stream#readme\"\n}\n", "'use strict'\n\nconst MAX_TIMEOUT = 1000\n\nfunction wait (state, index, expected, timeout, done) {\n  const max = Date.now() + timeout\n  let current = Atomics.load(state, index)\n  if (current === expected) {\n    done(null, 'ok')\n    return\n  }\n  let prior = current\n  const check = (backoff) => {\n    if (Date.now() > max) {\n      done(null, 'timed-out')\n    } else {\n      setTimeout(() => {\n        prior = current\n        current = Atomics.load(state, index)\n        if (current === prior) {\n          check(backoff >= MAX_TIMEOUT ? MAX_TIMEOUT : backoff * 2)\n        } else {\n          if (current === expected) done(null, 'ok')\n          else done(null, 'not-equal')\n        }\n      }, backoff)\n    }\n  }\n  check(1)\n}\n\n// let waitDiffCount = 0\nfunction waitDiff (state, index, expected, timeout, done) {\n  // const id = waitDiffCount++\n  // process._rawDebug(`>>> waitDiff ${id}`)\n  const max = Date.now() + timeout\n  let current = Atomics.load(state, index)\n  if (current !== expected) {\n    done(null, 'ok')\n    return\n  }\n  const check = (backoff) => {\n    // process._rawDebug(`${id} ${index} current ${current} expected ${expected}`)\n    // process._rawDebug('' + backoff)\n    if (Date.now() > max) {\n      done(null, 'timed-out')\n    } else {\n      setTimeout(() => {\n        current = Atomics.load(state, index)\n        if (current !== expected) {\n          done(null, 'ok')\n        } else {\n          check(backoff >= MAX_TIMEOUT ? MAX_TIMEOUT : backoff * 2)\n        }\n      }, backoff)\n    }\n  }\n  check(1)\n}\n\nmodule.exports = { wait, waitDiff }\n", "'use strict'\n\nconst WRITE_INDEX = 4\nconst READ_INDEX = 8\n\nmodule.exports = {\n  WRITE_INDEX,\n  READ_INDEX\n}\n", "'use strict'\n\nconst { version } = require('./package.json')\nconst { EventEmitter } = require('events')\nconst { Worker } = require('worker_threads')\nconst { join } = require('path')\nconst { pathToFileURL } = require('url')\nconst { wait } = require('./lib/wait')\nconst {\n  WRITE_INDEX,\n  READ_INDEX\n} = require('./lib/indexes')\nconst buffer = require('buffer')\nconst assert = require('assert')\n\nconst kImpl = Symbol('kImpl')\n\n// V8 limit for string size\nconst MAX_STRING = buffer.constants.MAX_STRING_LENGTH\n\nclass FakeWeakRef {\n  constructor (value) {\n    this._value = value\n  }\n\n  deref () {\n    return this._value\n  }\n}\n\nclass FakeFinalizationRegistry {\n  register () {}\n\n  unregister () {}\n}\n\n// Currently using FinalizationRegistry with code coverage breaks the world\n// Ref: https://github.com/nodejs/node/issues/49344\nconst FinalizationRegistry = process.env.NODE_V8_COVERAGE ? FakeFinalizationRegistry : global.FinalizationRegistry || FakeFinalizationRegistry\nconst WeakRef = process.env.NODE_V8_COVERAGE ? FakeWeakRef : global.WeakRef || FakeWeakRef\n\nconst registry = new FinalizationRegistry((worker) => {\n  if (worker.exited) {\n    return\n  }\n  worker.terminate()\n})\n\nfunction createWorker (stream, opts) {\n  const { filename, workerData } = opts\n\n  const bundlerOverrides = '__bundlerPathsOverrides' in globalThis ? globalThis.__bundlerPathsOverrides : {}\n  const toExecute = bundlerOverrides['thread-stream-worker'] || join(__dirname, 'lib', 'worker.js')\n\n  const worker = new Worker(toExecute, {\n    ...opts.workerOpts,\n    trackUnmanagedFds: false,\n    workerData: {\n      filename: filename.indexOf('file://') === 0\n        ? filename\n        : pathToFileURL(filename).href,\n      dataBuf: stream[kImpl].dataBuf,\n      stateBuf: stream[kImpl].stateBuf,\n      workerData: {\n        $context: {\n          threadStreamVersion: version\n        },\n        ...workerData\n      }\n    }\n  })\n\n  // We keep a strong reference for now,\n  // we need to start writing first\n  worker.stream = new FakeWeakRef(stream)\n\n  worker.on('message', onWorkerMessage)\n  worker.on('exit', onWorkerExit)\n  registry.register(stream, worker)\n\n  return worker\n}\n\nfunction drain (stream) {\n  assert(!stream[kImpl].sync)\n  if (stream[kImpl].needDrain) {\n    stream[kImpl].needDrain = false\n    stream.emit('drain')\n  }\n}\n\nfunction nextFlush (stream) {\n  const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n  let leftover = stream[kImpl].data.length - writeIndex\n\n  if (leftover > 0) {\n    if (stream[kImpl].buf.length === 0) {\n      stream[kImpl].flushing = false\n\n      if (stream[kImpl].ending) {\n        end(stream)\n      } else if (stream[kImpl].needDrain) {\n        process.nextTick(drain, stream)\n      }\n\n      return\n    }\n\n    let toWrite = stream[kImpl].buf.slice(0, leftover)\n    let toWriteBytes = Buffer.byteLength(toWrite)\n    if (toWriteBytes <= leftover) {\n      stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n      // process._rawDebug('writing ' + toWrite.length)\n      write(stream, toWrite, nextFlush.bind(null, stream))\n    } else {\n      // multi-byte utf-8\n      stream.flush(() => {\n        // err is already handled in flush()\n        if (stream.destroyed) {\n          return\n        }\n\n        Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n        Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n\n        // Find a toWrite length that fits the buffer\n        // it must exists as the buffer is at least 4 bytes length\n        // and the max utf-8 length for a char is 4 bytes.\n        while (toWriteBytes > stream[kImpl].data.length) {\n          leftover = leftover / 2\n          toWrite = stream[kImpl].buf.slice(0, leftover)\n          toWriteBytes = Buffer.byteLength(toWrite)\n        }\n        stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n        write(stream, toWrite, nextFlush.bind(null, stream))\n      })\n    }\n  } else if (leftover === 0) {\n    if (writeIndex === 0 && stream[kImpl].buf.length === 0) {\n      // we had a flushSync in the meanwhile\n      return\n    }\n    stream.flush(() => {\n      Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n      Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n      nextFlush(stream)\n    })\n  } else {\n    // This should never happen\n    destroy(stream, new Error('overwritten'))\n  }\n}\n\nfunction onWorkerMessage (msg) {\n  const stream = this.stream.deref()\n  if (stream === undefined) {\n    this.exited = true\n    // Terminate the worker.\n    this.terminate()\n    return\n  }\n\n  switch (msg.code) {\n    case 'READY':\n      // Replace the FakeWeakRef with a\n      // proper one.\n      this.stream = new WeakRef(stream)\n\n      stream.flush(() => {\n        stream[kImpl].ready = true\n        stream.emit('ready')\n      })\n      break\n    case 'ERROR':\n      destroy(stream, msg.err)\n      break\n    case 'EVENT':\n      if (Array.isArray(msg.args)) {\n        stream.emit(msg.name, ...msg.args)\n      } else {\n        stream.emit(msg.name, msg.args)\n      }\n      break\n    case 'WARNING':\n      process.emitWarning(msg.err)\n      break\n    default:\n      destroy(stream, new Error('this should not happen: ' + msg.code))\n  }\n}\n\nfunction onWorkerExit (code) {\n  const stream = this.stream.deref()\n  if (stream === undefined) {\n    // Nothing to do, the worker already exit\n    return\n  }\n  registry.unregister(stream)\n  stream.worker.exited = true\n  stream.worker.off('exit', onWorkerExit)\n  destroy(stream, code !== 0 ? new Error('the worker thread exited') : null)\n}\n\nclass ThreadStream extends EventEmitter {\n  constructor (opts = {}) {\n    super()\n\n    if (opts.bufferSize < 4) {\n      throw new Error('bufferSize must at least fit a 4-byte utf-8 char')\n    }\n\n    this[kImpl] = {}\n    this[kImpl].stateBuf = new SharedArrayBuffer(128)\n    this[kImpl].state = new Int32Array(this[kImpl].stateBuf)\n    this[kImpl].dataBuf = new SharedArrayBuffer(opts.bufferSize || 4 * 1024 * 1024)\n    this[kImpl].data = Buffer.from(this[kImpl].dataBuf)\n    this[kImpl].sync = opts.sync || false\n    this[kImpl].ending = false\n    this[kImpl].ended = false\n    this[kImpl].needDrain = false\n    this[kImpl].destroyed = false\n    this[kImpl].flushing = false\n    this[kImpl].ready = false\n    this[kImpl].finished = false\n    this[kImpl].errored = null\n    this[kImpl].closed = false\n    this[kImpl].buf = ''\n\n    // TODO (fix): Make private?\n    this.worker = createWorker(this, opts) // TODO (fix): make private\n    this.on('message', (message, transferList) => {\n      this.worker.postMessage(message, transferList)\n    })\n  }\n\n  write (data) {\n    if (this[kImpl].destroyed) {\n      error(this, new Error('the worker has exited'))\n      return false\n    }\n\n    if (this[kImpl].ending) {\n      error(this, new Error('the worker is ending'))\n      return false\n    }\n\n    if (this[kImpl].flushing && this[kImpl].buf.length + data.length >= MAX_STRING) {\n      try {\n        writeSync(this)\n        this[kImpl].flushing = true\n      } catch (err) {\n        destroy(this, err)\n        return false\n      }\n    }\n\n    this[kImpl].buf += data\n\n    if (this[kImpl].sync) {\n      try {\n        writeSync(this)\n        return true\n      } catch (err) {\n        destroy(this, err)\n        return false\n      }\n    }\n\n    if (!this[kImpl].flushing) {\n      this[kImpl].flushing = true\n      setImmediate(nextFlush, this)\n    }\n\n    this[kImpl].needDrain = this[kImpl].data.length - this[kImpl].buf.length - Atomics.load(this[kImpl].state, WRITE_INDEX) <= 0\n    return !this[kImpl].needDrain\n  }\n\n  end () {\n    if (this[kImpl].destroyed) {\n      return\n    }\n\n    this[kImpl].ending = true\n    end(this)\n  }\n\n  flush (cb) {\n    if (this[kImpl].destroyed) {\n      if (typeof cb === 'function') {\n        process.nextTick(cb, new Error('the worker has exited'))\n      }\n      return\n    }\n\n    // TODO write all .buf\n    const writeIndex = Atomics.load(this[kImpl].state, WRITE_INDEX)\n    // process._rawDebug(`(flush) readIndex (${Atomics.load(this.state, READ_INDEX)}) writeIndex (${Atomics.load(this.state, WRITE_INDEX)})`)\n    wait(this[kImpl].state, READ_INDEX, writeIndex, Infinity, (err, res) => {\n      if (err) {\n        destroy(this, err)\n        process.nextTick(cb, err)\n        return\n      }\n      if (res === 'not-equal') {\n        // TODO handle deadlock\n        this.flush(cb)\n        return\n      }\n      process.nextTick(cb)\n    })\n  }\n\n  flushSync () {\n    if (this[kImpl].destroyed) {\n      return\n    }\n\n    writeSync(this)\n    flushSync(this)\n  }\n\n  unref () {\n    this.worker.unref()\n  }\n\n  ref () {\n    this.worker.ref()\n  }\n\n  get ready () {\n    return this[kImpl].ready\n  }\n\n  get destroyed () {\n    return this[kImpl].destroyed\n  }\n\n  get closed () {\n    return this[kImpl].closed\n  }\n\n  get writable () {\n    return !this[kImpl].destroyed && !this[kImpl].ending\n  }\n\n  get writableEnded () {\n    return this[kImpl].ending\n  }\n\n  get writableFinished () {\n    return this[kImpl].finished\n  }\n\n  get writableNeedDrain () {\n    return this[kImpl].needDrain\n  }\n\n  get writableObjectMode () {\n    return false\n  }\n\n  get writableErrored () {\n    return this[kImpl].errored\n  }\n}\n\nfunction error (stream, err) {\n  setImmediate(() => {\n    stream.emit('error', err)\n  })\n}\n\nfunction destroy (stream, err) {\n  if (stream[kImpl].destroyed) {\n    return\n  }\n  stream[kImpl].destroyed = true\n\n  if (err) {\n    stream[kImpl].errored = err\n    error(stream, err)\n  }\n\n  if (!stream.worker.exited) {\n    stream.worker.terminate()\n      .catch(() => {})\n      .then(() => {\n        stream[kImpl].closed = true\n        stream.emit('close')\n      })\n  } else {\n    setImmediate(() => {\n      stream[kImpl].closed = true\n      stream.emit('close')\n    })\n  }\n}\n\nfunction write (stream, data, cb) {\n  // data is smaller than the shared buffer length\n  const current = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n  const length = Buffer.byteLength(data)\n  stream[kImpl].data.write(data, current)\n  Atomics.store(stream[kImpl].state, WRITE_INDEX, current + length)\n  Atomics.notify(stream[kImpl].state, WRITE_INDEX)\n  cb()\n  return true\n}\n\nfunction end (stream) {\n  if (stream[kImpl].ended || !stream[kImpl].ending || stream[kImpl].flushing) {\n    return\n  }\n  stream[kImpl].ended = true\n\n  try {\n    stream.flushSync()\n\n    let readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n    // process._rawDebug('writing index')\n    Atomics.store(stream[kImpl].state, WRITE_INDEX, -1)\n    // process._rawDebug(`(end) readIndex (${Atomics.load(stream.state, READ_INDEX)}) writeIndex (${Atomics.load(stream.state, WRITE_INDEX)})`)\n    Atomics.notify(stream[kImpl].state, WRITE_INDEX)\n\n    // Wait for the process to complete\n    let spins = 0\n    while (readIndex !== -1) {\n      // process._rawDebug(`read = ${read}`)\n      Atomics.wait(stream[kImpl].state, READ_INDEX, readIndex, 1000)\n      readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n      if (readIndex === -2) {\n        destroy(stream, new Error('end() failed'))\n        return\n      }\n\n      if (++spins === 10) {\n        destroy(stream, new Error('end() took too long (10s)'))\n        return\n      }\n    }\n\n    process.nextTick(() => {\n      stream[kImpl].finished = true\n      stream.emit('finish')\n    })\n  } catch (err) {\n    destroy(stream, err)\n  }\n  // process._rawDebug('end finished...')\n}\n\nfunction writeSync (stream) {\n  const cb = () => {\n    if (stream[kImpl].ending) {\n      end(stream)\n    } else if (stream[kImpl].needDrain) {\n      process.nextTick(drain, stream)\n    }\n  }\n  stream[kImpl].flushing = false\n\n  while (stream[kImpl].buf.length !== 0) {\n    const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n    let leftover = stream[kImpl].data.length - writeIndex\n    if (leftover === 0) {\n      flushSync(stream)\n      Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n      Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n      continue\n    } else if (leftover < 0) {\n      // stream should never happen\n      throw new Error('overwritten')\n    }\n\n    let toWrite = stream[kImpl].buf.slice(0, leftover)\n    let toWriteBytes = Buffer.byteLength(toWrite)\n    if (toWriteBytes <= leftover) {\n      stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n      // process._rawDebug('writing ' + toWrite.length)\n      write(stream, toWrite, cb)\n    } else {\n      // multi-byte utf-8\n      flushSync(stream)\n      Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n      Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n\n      // Find a toWrite length that fits the buffer\n      // it must exists as the buffer is at least 4 bytes length\n      // and the max utf-8 length for a char is 4 bytes.\n      while (toWriteBytes > stream[kImpl].buf.length) {\n        leftover = leftover / 2\n        toWrite = stream[kImpl].buf.slice(0, leftover)\n        toWriteBytes = Buffer.byteLength(toWrite)\n      }\n      stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n      write(stream, toWrite, cb)\n    }\n  }\n}\n\nfunction flushSync (stream) {\n  if (stream[kImpl].flushing) {\n    throw new Error('unable to flush while flushing')\n  }\n\n  // process._rawDebug('flushSync started')\n\n  const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n\n  let spins = 0\n\n  // TODO handle deadlock\n  while (true) {\n    const readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n    if (readIndex === -2) {\n      throw Error('_flushSync failed')\n    }\n\n    // process._rawDebug(`(flushSync) readIndex (${readIndex}) writeIndex (${writeIndex})`)\n    if (readIndex !== writeIndex) {\n      // TODO stream timeouts for some reason.\n      Atomics.wait(stream[kImpl].state, READ_INDEX, readIndex, 1000)\n    } else {\n      break\n    }\n\n    if (++spins === 10) {\n      throw new Error('_flushSync took too long (10s)')\n    }\n  }\n  // process._rawDebug('flushSync finished')\n}\n\nmodule.exports = ThreadStream\n", "'use strict'\n\nconst { createRequire } = require('module')\nconst getCallers = require('./caller')\nconst { join, isAbsolute, sep } = require('node:path')\nconst sleep = require('atomic-sleep')\nconst onExit = require('on-exit-leak-free')\nconst ThreadStream = require('thread-stream')\n\nfunction setupOnExit (stream) {\n  // This is leak free, it does not leave event handlers\n  onExit.register(stream, autoEnd)\n  onExit.registerBeforeExit(stream, flush)\n\n  stream.on('close', function () {\n    onExit.unregister(stream)\n  })\n}\n\nfunction buildStream (filename, workerData, workerOpts, sync) {\n  const stream = new ThreadStream({\n    filename,\n    workerData,\n    workerOpts,\n    sync\n  })\n\n  stream.on('ready', onReady)\n  stream.on('close', function () {\n    process.removeListener('exit', onExit)\n  })\n\n  process.on('exit', onExit)\n\n  function onReady () {\n    process.removeListener('exit', onExit)\n    stream.unref()\n\n    if (workerOpts.autoEnd !== false) {\n      setupOnExit(stream)\n    }\n  }\n\n  function onExit () {\n    /* istanbul ignore next */\n    if (stream.closed) {\n      return\n    }\n    stream.flushSync()\n    // Apparently there is a very sporadic race condition\n    // that in certain OS would prevent the messages to be flushed\n    // because the thread might not have been created still.\n    // Unfortunately we need to sleep(100) in this case.\n    sleep(100)\n    stream.end()\n  }\n\n  return stream\n}\n\nfunction autoEnd (stream) {\n  stream.ref()\n  stream.flushSync()\n  stream.end()\n  stream.once('close', function () {\n    stream.unref()\n  })\n}\n\nfunction flush (stream) {\n  stream.flushSync()\n}\n\nfunction transport (fullOptions) {\n  const { pipeline, targets, levels, dedupe, worker = {}, caller = getCallers(), sync = false } = fullOptions\n\n  const options = {\n    ...fullOptions.options\n  }\n\n  // Backwards compatibility\n  const callers = typeof caller === 'string' ? [caller] : caller\n\n  // This will be eventually modified by bundlers\n  const bundlerOverrides = '__bundlerPathsOverrides' in globalThis ? globalThis.__bundlerPathsOverrides : {}\n\n  let target = fullOptions.target\n\n  if (target && targets) {\n    throw new Error('only one of target or targets can be specified')\n  }\n\n  if (targets) {\n    target = bundlerOverrides['pino-worker'] || join(__dirname, 'worker.js')\n    options.targets = targets.filter(dest => dest.target).map((dest) => {\n      return {\n        ...dest,\n        target: fixTarget(dest.target)\n      }\n    })\n    options.pipelines = targets.filter(dest => dest.pipeline).map((dest) => {\n      return dest.pipeline.map((t) => {\n        return {\n          ...t,\n          level: dest.level, // duplicate the pipeline `level` property defined in the upper level\n          target: fixTarget(t.target)\n        }\n      })\n    })\n  } else if (pipeline) {\n    target = bundlerOverrides['pino-worker'] || join(__dirname, 'worker.js')\n    options.pipelines = [pipeline.map((dest) => {\n      return {\n        ...dest,\n        target: fixTarget(dest.target)\n      }\n    })]\n  }\n\n  if (levels) {\n    options.levels = levels\n  }\n\n  if (dedupe) {\n    options.dedupe = dedupe\n  }\n\n  options.pinoWillSendConfig = true\n\n  return buildStream(fixTarget(target), options, worker, sync)\n\n  function fixTarget (origin) {\n    origin = bundlerOverrides[origin] || origin\n\n    if (isAbsolute(origin) || origin.indexOf('file://') === 0) {\n      return origin\n    }\n\n    if (origin === 'pino/file') {\n      return join(__dirname, '..', 'file.js')\n    }\n\n    let fixTarget\n\n    for (const filePath of callers) {\n      try {\n        const context = filePath === 'node:repl'\n          ? process.cwd() + sep\n          : filePath\n\n        fixTarget = createRequire(context).resolve(origin)\n        break\n      } catch (err) {\n        // Silent catch\n        continue\n      }\n    }\n\n    if (!fixTarget) {\n      throw new Error(`unable to determine transport target for \"${origin}\"`)\n    }\n\n    return fixTarget\n  }\n}\n\nmodule.exports = transport\n", "'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst diagChan = require('node:diagnostics_channel')\nconst format = require('quick-format-unescaped')\nconst { mapHttpRequest, mapHttpResponse } = require('pino-std-serializers')\nconst SonicBoom = require('sonic-boom')\nconst onExit = require('on-exit-leak-free')\nconst {\n  lsCacheSym,\n  chindingsSym,\n  writeSym,\n  serializersSym,\n  formatOptsSym,\n  endSym,\n  stringifiersSym,\n  stringifySym,\n  stringifySafeSym,\n  wildcardFirstSym,\n  nestedKeySym,\n  formattersSym,\n  messageKeySym,\n  errorKeySym,\n  nestedKeyStrSym,\n  msgPrefixSym\n} = require('./symbols')\nconst { isMainThread } = require('worker_threads')\nconst transport = require('./transport')\n\nlet asJsonChan\n// Node >= 18.19 supports diagnostics_channel.tracingChannel\nif (typeof diagChan.tracingChannel === 'function') {\n  asJsonChan = diagChan.tracingChannel('pino_asJson')\n} else {\n  // Older Node 18.x (e.g. 18.18), provided a no-op fallback\n  asJsonChan = {\n    hasSubscribers: false,\n    traceSync (fn, store, thisArg, ...args) {\n      return fn.call(thisArg, ...args)\n    }\n  }\n}\n\nfunction noop () {\n}\n\nfunction genLog (level, hook) {\n  if (!hook) return LOG\n\n  return function hookWrappedLog (...args) {\n    hook.call(this, args, LOG, level)\n  }\n\n  function LOG (o, ...n) {\n    if (typeof o === 'object') {\n      let msg = o\n      if (o !== null) {\n        if (o.method && o.headers && o.socket) {\n          o = mapHttpRequest(o)\n        } else if (typeof o.setHeader === 'function') {\n          o = mapHttpResponse(o)\n        }\n      }\n      let formatParams\n      if (msg === null && n.length === 0) {\n        formatParams = [null]\n      } else {\n        msg = n.shift()\n        formatParams = n\n      }\n      // We do not use a coercive check for `msg` as it is\n      // measurably slower than the explicit checks.\n      if (typeof this[msgPrefixSym] === 'string' && msg !== undefined && msg !== null) {\n        msg = this[msgPrefixSym] + msg\n      }\n      this[writeSym](o, format(msg, formatParams, this[formatOptsSym]), level)\n    } else {\n      let msg = o === undefined ? n.shift() : o\n\n      // We do not use a coercive check for `msg` as it is\n      // measurably slower than the explicit checks.\n      if (typeof this[msgPrefixSym] === 'string' && msg !== undefined && msg !== null) {\n        msg = this[msgPrefixSym] + msg\n      }\n      this[writeSym](null, format(msg, n, this[formatOptsSym]), level)\n    }\n  }\n}\n\n// magically escape strings for json\n// relying on their charCodeAt\n// everything below 32 needs JSON.stringify()\n// 34 and 92 happens all the time, so we\n// have a fast case for them\nfunction asString (str) {\n  let result = ''\n  let last = 0\n  let found = false\n  let point = 255\n  const l = str.length\n  if (l > 100) {\n    return JSON.stringify(str)\n  }\n  for (var i = 0; i < l && point >= 32; i++) {\n    point = str.charCodeAt(i)\n    if (point === 34 || point === 92) {\n      result += str.slice(last, i) + '\\\\'\n      last = i\n      found = true\n    }\n  }\n  if (!found) {\n    result = str\n  } else {\n    result += str.slice(last)\n  }\n  return point < 32 ? JSON.stringify(str) : '\"' + result + '\"'\n}\n\n/**\n * `asJson` wraps `_asJson` in order to facilitate generating diagnostics.\n *\n * @param {object} obj The merging object passed to the log method.\n * @param {string} msg The log message passed to the log method.\n * @param {number} num The log level number.\n * @param {number} time The log time in milliseconds.\n *\n * @returns {string}\n */\nfunction asJson (obj, msg, num, time) {\n  if (asJsonChan.hasSubscribers === false) {\n    return _asJson.call(this, obj, msg, num, time)\n  }\n\n  const store = { instance: this, arguments }\n  return asJsonChan.traceSync(_asJson, store, this, obj, msg, num, time)\n}\n\n/**\n * `_asJson` parses all collected data and generates the finalized newline\n * delimited JSON string.\n *\n * @param {object} obj The merging object passed to the log method.\n * @param {string} msg The log message passed to the log method.\n * @param {number} num The log level number.\n * @param {number} time The log time in milliseconds.\n *\n * @returns {string} The finalized log string terminated with a newline.\n * @private\n */\nfunction _asJson (obj, msg, num, time) {\n  const stringify = this[stringifySym]\n  const stringifySafe = this[stringifySafeSym]\n  const stringifiers = this[stringifiersSym]\n  const end = this[endSym]\n  const chindings = this[chindingsSym]\n  const serializers = this[serializersSym]\n  const formatters = this[formattersSym]\n  const messageKey = this[messageKeySym]\n  const errorKey = this[errorKeySym]\n  let data = this[lsCacheSym][num] + time\n\n  // we need the child bindings added to the output first so instance logged\n  // objects can take precedence when JSON.parse-ing the resulting log line\n  data = data + chindings\n\n  let value\n  if (formatters.log) {\n    obj = formatters.log(obj)\n  }\n  const wildcardStringifier = stringifiers[wildcardFirstSym]\n  let propStr = ''\n  for (const key in obj) {\n    value = obj[key]\n    if (Object.prototype.hasOwnProperty.call(obj, key) && value !== undefined) {\n      if (serializers[key]) {\n        value = serializers[key](value)\n      } else if (key === errorKey && serializers.err) {\n        value = serializers.err(value)\n      }\n\n      const stringifier = stringifiers[key] || wildcardStringifier\n\n      switch (typeof value) {\n        case 'undefined':\n        case 'function':\n          continue\n        case 'number':\n          /* eslint no-fallthrough: \"off\" */\n          if (Number.isFinite(value) === false) {\n            value = null\n          }\n        // this case explicitly falls through to the next one\n        case 'boolean':\n          if (stringifier) value = stringifier(value)\n          break\n        case 'string':\n          value = (stringifier || asString)(value)\n          break\n        default:\n          value = (stringifier || stringify)(value, stringifySafe)\n      }\n      if (value === undefined) continue\n      const strKey = asString(key)\n      propStr += ',' + strKey + ':' + value\n    }\n  }\n\n  let msgStr = ''\n  if (msg !== undefined) {\n    value = serializers[messageKey] ? serializers[messageKey](msg) : msg\n    const stringifier = stringifiers[messageKey] || wildcardStringifier\n\n    switch (typeof value) {\n      case 'function':\n        break\n      case 'number':\n        /* eslint no-fallthrough: \"off\" */\n        if (Number.isFinite(value) === false) {\n          value = null\n        }\n      // this case explicitly falls through to the next one\n      case 'boolean':\n        if (stringifier) value = stringifier(value)\n        msgStr = ',\"' + messageKey + '\":' + value\n        break\n      case 'string':\n        value = (stringifier || asString)(value)\n        msgStr = ',\"' + messageKey + '\":' + value\n        break\n      default:\n        value = (stringifier || stringify)(value, stringifySafe)\n        msgStr = ',\"' + messageKey + '\":' + value\n    }\n  }\n\n  if (this[nestedKeySym] && propStr) {\n    // place all the obj properties under the specified key\n    // the nested key is already formatted from the constructor\n    return data + this[nestedKeyStrSym] + propStr.slice(1) + '}' + msgStr + end\n  } else {\n    return data + propStr + msgStr + end\n  }\n}\n\nfunction asChindings (instance, bindings) {\n  let value\n  let data = instance[chindingsSym]\n  const stringify = instance[stringifySym]\n  const stringifySafe = instance[stringifySafeSym]\n  const stringifiers = instance[stringifiersSym]\n  const wildcardStringifier = stringifiers[wildcardFirstSym]\n  const serializers = instance[serializersSym]\n  const formatter = instance[formattersSym].bindings\n  bindings = formatter(bindings)\n\n  for (const key in bindings) {\n    value = bindings[key]\n    const valid = (key.length < 5 || (key !== 'level' &&\n      key !== 'serializers' &&\n      key !== 'formatters' &&\n      key !== 'customLevels')) &&\n      bindings.hasOwnProperty(key) &&\n      value !== undefined\n    if (valid === true) {\n      value = serializers[key] ? serializers[key](value) : value\n      value = (stringifiers[key] || wildcardStringifier || stringify)(value, stringifySafe)\n      if (value === undefined) continue\n      data += ',\"' + key + '\":' + value\n    }\n  }\n  return data\n}\n\nfunction hasBeenTampered (stream) {\n  return stream.write !== stream.constructor.prototype.write\n}\n\nfunction buildSafeSonicBoom (opts) {\n  const stream = new SonicBoom(opts)\n  stream.on('error', filterBrokenPipe)\n  // If we are sync: false, we must flush on exit\n  if (!opts.sync && isMainThread) {\n    onExit.register(stream, autoEnd)\n\n    stream.on('close', function () {\n      onExit.unregister(stream)\n    })\n  }\n  return stream\n\n  function filterBrokenPipe (err) {\n    // Impossible to replicate across all operating systems\n    /* istanbul ignore next */\n    if (err.code === 'EPIPE') {\n      // If we get EPIPE, we should stop logging here\n      // however we have no control to the consumer of\n      // SonicBoom, so we just overwrite the write method\n      stream.write = noop\n      stream.end = noop\n      stream.flushSync = noop\n      stream.destroy = noop\n      return\n    }\n    stream.removeListener('error', filterBrokenPipe)\n    stream.emit('error', err)\n  }\n}\n\nfunction autoEnd (stream, eventName) {\n  // This check is needed only on some platforms\n  /* istanbul ignore next */\n  if (stream.destroyed) {\n    return\n  }\n\n  if (eventName === 'beforeExit') {\n    // We still have an event loop, let's use it\n    stream.flush()\n    stream.on('drain', function () {\n      stream.end()\n    })\n  } else {\n    // For some reason istanbul is not detecting this, but it's there\n    /* istanbul ignore next */\n    // We do not have an event loop, so flush synchronously\n    stream.flushSync()\n  }\n}\n\nfunction createArgsNormalizer (defaultOptions) {\n  return function normalizeArgs (instance, caller, opts = {}, stream) {\n    // support stream as a string\n    if (typeof opts === 'string') {\n      stream = buildSafeSonicBoom({ dest: opts })\n      opts = {}\n    } else if (typeof stream === 'string') {\n      if (opts && opts.transport) {\n        throw Error('only one of option.transport or stream can be specified')\n      }\n      stream = buildSafeSonicBoom({ dest: stream })\n    } else if (opts instanceof SonicBoom || opts.writable || opts._writableState) {\n      stream = opts\n      opts = {}\n    } else if (opts.transport) {\n      if (opts.transport instanceof SonicBoom || opts.transport.writable || opts.transport._writableState) {\n        throw Error('option.transport do not allow stream, please pass to option directly. e.g. pino(transport)')\n      }\n      if (opts.transport.targets && opts.transport.targets.length && opts.formatters && typeof opts.formatters.level === 'function') {\n        throw Error('option.transport.targets do not allow custom level formatters')\n      }\n\n      let customLevels\n      if (opts.customLevels) {\n        customLevels = opts.useOnlyCustomLevels ? opts.customLevels : Object.assign({}, opts.levels, opts.customLevels)\n      }\n      stream = transport({ caller, ...opts.transport, levels: customLevels })\n    }\n    opts = Object.assign({}, defaultOptions, opts)\n    opts.serializers = Object.assign({}, defaultOptions.serializers, opts.serializers)\n    opts.formatters = Object.assign({}, defaultOptions.formatters, opts.formatters)\n\n    if (opts.prettyPrint) {\n      throw new Error('prettyPrint option is no longer supported, see the pino-pretty package (https://github.com/pinojs/pino-pretty)')\n    }\n\n    const { enabled, onChild } = opts\n    if (enabled === false) opts.level = 'silent'\n    if (!onChild) opts.onChild = noop\n    if (!stream) {\n      if (!hasBeenTampered(process.stdout)) {\n        // If process.stdout.fd is undefined, it means that we are running\n        // in a worker thread. Let's assume we are logging to file descriptor 1.\n        stream = buildSafeSonicBoom({ fd: process.stdout.fd || 1 })\n      } else {\n        stream = process.stdout\n      }\n    }\n    return { opts, stream }\n  }\n}\n\nfunction stringify (obj, stringifySafeFn) {\n  try {\n    return JSON.stringify(obj)\n  } catch (_) {\n    try {\n      const stringify = stringifySafeFn || this[stringifySafeSym]\n      return stringify(obj)\n    } catch (_) {\n      return '\"[unable to serialize, circular reference is too complex to analyze]\"'\n    }\n  }\n}\n\nfunction buildFormatters (level, bindings, log) {\n  return {\n    level,\n    bindings,\n    log\n  }\n}\n\n/**\n * Convert a string integer file descriptor to a proper native integer\n * file descriptor.\n *\n * @param {string} destination The file descriptor string to attempt to convert.\n *\n * @returns {Number}\n */\nfunction normalizeDestFileDescriptor (destination) {\n  const fd = Number(destination)\n  if (typeof destination === 'string' && Number.isFinite(fd)) {\n    return fd\n  }\n  // destination could be undefined if we are in a worker\n  if (destination === undefined) {\n    // This is stdout in UNIX systems\n    return 1\n  }\n  return destination\n}\n\nmodule.exports = {\n  noop,\n  buildSafeSonicBoom,\n  asChindings,\n  asJson,\n  genLog,\n  createArgsNormalizer,\n  stringify,\n  buildFormatters,\n  normalizeDestFileDescriptor\n}\n", "/**\n * Represents default log level values\n *\n * @enum {number}\n */\nconst DEFAULT_LEVELS = {\n  trace: 10,\n  debug: 20,\n  info: 30,\n  warn: 40,\n  error: 50,\n  fatal: 60\n}\n\n/**\n * Represents sort order direction: `ascending` or `descending`\n *\n * @enum {string}\n */\nconst SORTING_ORDER = {\n  ASC: 'ASC',\n  DESC: 'DESC'\n}\n\nmodule.exports = {\n  DEFAULT_LEVELS,\n  SORTING_ORDER\n}\n", "'use strict'\n/* eslint no-prototype-builtins: 0 */\nconst {\n  lsCacheSym,\n  levelValSym,\n  useOnlyCustomLevelsSym,\n  streamSym,\n  formattersSym,\n  hooksSym,\n  levelCompSym\n} = require('./symbols')\nconst { noop, genLog } = require('./tools')\nconst { DEFAULT_LEVELS, SORTING_ORDER } = require('./constants')\n\nconst levelMethods = {\n  fatal: (hook) => {\n    const logFatal = genLog(DEFAULT_LEVELS.fatal, hook)\n    return function (...args) {\n      const stream = this[streamSym]\n      logFatal.call(this, ...args)\n      if (typeof stream.flushSync === 'function') {\n        try {\n          stream.flushSync()\n        } catch (e) {\n          // https://github.com/pinojs/pino/pull/740#discussion_r346788313\n        }\n      }\n    }\n  },\n  error: (hook) => genLog(DEFAULT_LEVELS.error, hook),\n  warn: (hook) => genLog(DEFAULT_LEVELS.warn, hook),\n  info: (hook) => genLog(DEFAULT_LEVELS.info, hook),\n  debug: (hook) => genLog(DEFAULT_LEVELS.debug, hook),\n  trace: (hook) => genLog(DEFAULT_LEVELS.trace, hook)\n}\n\nconst nums = Object.keys(DEFAULT_LEVELS).reduce((o, k) => {\n  o[DEFAULT_LEVELS[k]] = k\n  return o\n}, {})\n\nconst initialLsCache = Object.keys(nums).reduce((o, k) => {\n  o[k] = '{\"level\":' + Number(k)\n  return o\n}, {})\n\nfunction genLsCache (instance) {\n  const formatter = instance[formattersSym].level\n  const { labels } = instance.levels\n  const cache = {}\n  for (const label in labels) {\n    const level = formatter(labels[label], Number(label))\n    cache[label] = JSON.stringify(level).slice(0, -1)\n  }\n  instance[lsCacheSym] = cache\n  return instance\n}\n\nfunction isStandardLevel (level, useOnlyCustomLevels) {\n  if (useOnlyCustomLevels) {\n    return false\n  }\n\n  switch (level) {\n    case 'fatal':\n    case 'error':\n    case 'warn':\n    case 'info':\n    case 'debug':\n    case 'trace':\n      return true\n    default:\n      return false\n  }\n}\n\nfunction setLevel (level) {\n  const { labels, values } = this.levels\n  if (typeof level === 'number') {\n    if (labels[level] === undefined) throw Error('unknown level value' + level)\n    level = labels[level]\n  }\n  if (values[level] === undefined) throw Error('unknown level ' + level)\n  const preLevelVal = this[levelValSym]\n  const levelVal = this[levelValSym] = values[level]\n  const useOnlyCustomLevelsVal = this[useOnlyCustomLevelsSym]\n  const levelComparison = this[levelCompSym]\n  const hook = this[hooksSym].logMethod\n\n  for (const key in values) {\n    if (levelComparison(values[key], levelVal) === false) {\n      this[key] = noop\n      continue\n    }\n    this[key] = isStandardLevel(key, useOnlyCustomLevelsVal) ? levelMethods[key](hook) : genLog(values[key], hook)\n  }\n\n  this.emit(\n    'level-change',\n    level,\n    levelVal,\n    labels[preLevelVal],\n    preLevelVal,\n    this\n  )\n}\n\nfunction getLevel (level) {\n  const { levels, levelVal } = this\n  // protection against potential loss of Pino scope from serializers (edge case with circular refs - https://github.com/pinojs/pino/issues/833)\n  return (levels && levels.labels) ? levels.labels[levelVal] : ''\n}\n\nfunction isLevelEnabled (logLevel) {\n  const { values } = this.levels\n  const logLevelVal = values[logLevel]\n  return logLevelVal !== undefined && this[levelCompSym](logLevelVal, this[levelValSym])\n}\n\n/**\n * Determine if the given `current` level is enabled by comparing it\n * against the current threshold (`expected`).\n *\n * @param {SORTING_ORDER} direction comparison direction \"ASC\" or \"DESC\"\n * @param {number} current current log level number representation\n * @param {number} expected threshold value to compare with\n * @returns {boolean}\n */\nfunction compareLevel (direction, current, expected) {\n  if (direction === SORTING_ORDER.DESC) {\n    return current <= expected\n  }\n\n  return current >= expected\n}\n\n/**\n * Create a level comparison function based on `levelComparison`\n * it could a default function which compares levels either in \"ascending\" or \"descending\" order or custom comparison function\n *\n * @param {SORTING_ORDER | Function} levelComparison sort levels order direction or custom comparison function\n * @returns Function\n */\nfunction genLevelComparison (levelComparison) {\n  if (typeof levelComparison === 'string') {\n    return compareLevel.bind(null, levelComparison)\n  }\n\n  return levelComparison\n}\n\nfunction mappings (customLevels = null, useOnlyCustomLevels = false) {\n  const customNums = customLevels\n    /* eslint-disable */\n    ? Object.keys(customLevels).reduce((o, k) => {\n        o[customLevels[k]] = k\n        return o\n      }, {})\n    : null\n    /* eslint-enable */\n\n  const labels = Object.assign(\n    Object.create(Object.prototype, { Infinity: { value: 'silent' } }),\n    useOnlyCustomLevels ? null : nums,\n    customNums\n  )\n  const values = Object.assign(\n    Object.create(Object.prototype, { silent: { value: Infinity } }),\n    useOnlyCustomLevels ? null : DEFAULT_LEVELS,\n    customLevels\n  )\n  return { labels, values }\n}\n\nfunction assertDefaultLevelFound (defaultLevel, customLevels, useOnlyCustomLevels) {\n  if (typeof defaultLevel === 'number') {\n    const values = [].concat(\n      Object.keys(customLevels || {}).map(key => customLevels[key]),\n      useOnlyCustomLevels ? [] : Object.keys(nums).map(level => +level),\n      Infinity\n    )\n    if (!values.includes(defaultLevel)) {\n      throw Error(`default level:${defaultLevel} must be included in custom levels`)\n    }\n    return\n  }\n\n  const labels = Object.assign(\n    Object.create(Object.prototype, { silent: { value: Infinity } }),\n    useOnlyCustomLevels ? null : DEFAULT_LEVELS,\n    customLevels\n  )\n  if (!(defaultLevel in labels)) {\n    throw Error(`default level:${defaultLevel} must be included in custom levels`)\n  }\n}\n\nfunction assertNoLevelCollisions (levels, customLevels) {\n  const { labels, values } = levels\n  for (const k in customLevels) {\n    if (k in values) {\n      throw Error('levels cannot be overridden')\n    }\n    if (customLevels[k] in labels) {\n      throw Error('pre-existing level values cannot be used for new levels')\n    }\n  }\n}\n\n/**\n * Validates whether `levelComparison` is correct\n *\n * @throws Error\n * @param {SORTING_ORDER | Function} levelComparison - value to validate\n * @returns\n */\nfunction assertLevelComparison (levelComparison) {\n  if (typeof levelComparison === 'function') {\n    return\n  }\n\n  if (typeof levelComparison === 'string' && Object.values(SORTING_ORDER).includes(levelComparison)) {\n    return\n  }\n\n  throw new Error('Levels comparison should be one of \"ASC\", \"DESC\" or \"function\" type')\n}\n\nmodule.exports = {\n  initialLsCache,\n  genLsCache,\n  levelMethods,\n  getLevel,\n  setLevel,\n  isLevelEnabled,\n  mappings,\n  assertNoLevelCollisions,\n  assertDefaultLevelFound,\n  genLevelComparison,\n  assertLevelComparison\n}\n", "'use strict'\n\nmodule.exports = { version: '9.14.0' }\n", "'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst { EventEmitter } = require('node:events')\nconst {\n  lsCacheSym,\n  levelValSym,\n  setLevelSym,\n  getLevelSym,\n  chindingsSym,\n  parsedChindingsSym,\n  mixinSym,\n  asJsonSym,\n  writeSym,\n  mixinMergeStrategySym,\n  timeSym,\n  timeSliceIndexSym,\n  streamSym,\n  serializersSym,\n  formattersSym,\n  errorKeySym,\n  messageKeySym,\n  useOnlyCustomLevelsSym,\n  needsMetadataGsym,\n  redactFmtSym,\n  stringifySym,\n  formatOptsSym,\n  stringifiersSym,\n  msgPrefixSym,\n  hooksSym\n} = require('./symbols')\nconst {\n  getLevel,\n  setLevel,\n  isLevelEnabled,\n  mappings,\n  initialLsCache,\n  genLsCache,\n  assertNoLevelCollisions\n} = require('./levels')\nconst {\n  asChindings,\n  asJson,\n  buildFormatters,\n  stringify,\n  noop\n} = require('./tools')\nconst {\n  version\n} = require('./meta')\nconst redaction = require('./redaction')\n\n// note: use of class is satirical\n// https://github.com/pinojs/pino/pull/433#pullrequestreview-127703127\nconst constructor = class Pino {}\nconst prototype = {\n  constructor,\n  child,\n  bindings,\n  setBindings,\n  flush,\n  isLevelEnabled,\n  version,\n  get level () { return this[getLevelSym]() },\n  set level (lvl) { this[setLevelSym](lvl) },\n  get levelVal () { return this[levelValSym] },\n  set levelVal (n) { throw Error('levelVal is read-only') },\n  get msgPrefix () { return this[msgPrefixSym] },\n  get [Symbol.toStringTag] () { return 'Pino' },\n  [lsCacheSym]: initialLsCache,\n  [writeSym]: write,\n  [asJsonSym]: asJson,\n  [getLevelSym]: getLevel,\n  [setLevelSym]: setLevel\n}\n\nObject.setPrototypeOf(prototype, EventEmitter.prototype)\n\n// exporting and consuming the prototype object using factory pattern fixes scoping issues with getters when serializing\nmodule.exports = function () {\n  return Object.create(prototype)\n}\n\nconst resetChildingsFormatter = bindings => bindings\nfunction child (bindings, options) {\n  if (!bindings) {\n    throw Error('missing bindings for child Pino')\n  }\n  const serializers = this[serializersSym]\n  const formatters = this[formattersSym]\n  const instance = Object.create(this)\n\n  // If an `options` object was not supplied, we can improve\n  // the performance of child creation by skipping\n  // the checks for set options and simply return\n  // a baseline instance.\n  if (options == null) {\n    if (instance[formattersSym].bindings !== resetChildingsFormatter) {\n      instance[formattersSym] = buildFormatters(\n        formatters.level,\n        resetChildingsFormatter,\n        formatters.log\n      )\n    }\n\n    instance[chindingsSym] = asChindings(instance, bindings)\n\n    // Always call setLevel to ensure child gets own method references\n    // This prevents issues when parent methods are wrapped (e.g., by Sinon)\n    instance[setLevelSym](this.level)\n\n    if (this.onChild !== noop) {\n      this.onChild(instance)\n    }\n\n    return instance\n  }\n\n  if (options.hasOwnProperty('serializers') === true) {\n    instance[serializersSym] = Object.create(null)\n\n    for (const k in serializers) {\n      instance[serializersSym][k] = serializers[k]\n    }\n    const parentSymbols = Object.getOwnPropertySymbols(serializers)\n    /* eslint no-var: off */\n    for (var i = 0; i < parentSymbols.length; i++) {\n      const ks = parentSymbols[i]\n      instance[serializersSym][ks] = serializers[ks]\n    }\n\n    for (const bk in options.serializers) {\n      instance[serializersSym][bk] = options.serializers[bk]\n    }\n    const bindingsSymbols = Object.getOwnPropertySymbols(options.serializers)\n    for (var bi = 0; bi < bindingsSymbols.length; bi++) {\n      const bks = bindingsSymbols[bi]\n      instance[serializersSym][bks] = options.serializers[bks]\n    }\n  } else instance[serializersSym] = serializers\n  if (options.hasOwnProperty('formatters')) {\n    const { level, bindings: chindings, log } = options.formatters\n    instance[formattersSym] = buildFormatters(\n      level || formatters.level,\n      chindings || resetChildingsFormatter,\n      log || formatters.log\n    )\n  } else {\n    instance[formattersSym] = buildFormatters(\n      formatters.level,\n      resetChildingsFormatter,\n      formatters.log\n    )\n  }\n  if (options.hasOwnProperty('customLevels') === true) {\n    assertNoLevelCollisions(this.levels, options.customLevels)\n    instance.levels = mappings(options.customLevels, instance[useOnlyCustomLevelsSym])\n    genLsCache(instance)\n  }\n\n  // redact must place before asChindings and only replace if exist\n  if ((typeof options.redact === 'object' && options.redact !== null) || Array.isArray(options.redact)) {\n    instance.redact = options.redact // replace redact directly\n    const stringifiers = redaction(instance.redact, stringify)\n    const formatOpts = { stringify: stringifiers[redactFmtSym] }\n    instance[stringifySym] = stringify\n    instance[stringifiersSym] = stringifiers\n    instance[formatOptsSym] = formatOpts\n  }\n\n  if (typeof options.msgPrefix === 'string') {\n    instance[msgPrefixSym] = (this[msgPrefixSym] || '') + options.msgPrefix\n  }\n\n  instance[chindingsSym] = asChindings(instance, bindings)\n  const childLevel = options.level || this.level\n  instance[setLevelSym](childLevel)\n  this.onChild(instance)\n  return instance\n}\n\nfunction bindings () {\n  const chindings = this[chindingsSym]\n  const chindingsJson = `{${chindings.substr(1)}}` // at least contains ,\"pid\":7068,\"hostname\":\"myMac\"\n  const bindingsFromJson = JSON.parse(chindingsJson)\n  delete bindingsFromJson.pid\n  delete bindingsFromJson.hostname\n  return bindingsFromJson\n}\n\nfunction setBindings (newBindings) {\n  const chindings = asChindings(this, newBindings)\n  this[chindingsSym] = chindings\n  delete this[parsedChindingsSym]\n}\n\n/**\n * Default strategy for creating `mergeObject` from arguments and the result from `mixin()`.\n * Fields from `mergeObject` have higher priority in this strategy.\n *\n * @param {Object} mergeObject The object a user has supplied to the logging function.\n * @param {Object} mixinObject The result of the `mixin` method.\n * @return {Object}\n */\nfunction defaultMixinMergeStrategy (mergeObject, mixinObject) {\n  return Object.assign(mixinObject, mergeObject)\n}\n\nfunction write (_obj, msg, num) {\n  const t = this[timeSym]()\n  const mixin = this[mixinSym]\n  const errorKey = this[errorKeySym]\n  const messageKey = this[messageKeySym]\n  const mixinMergeStrategy = this[mixinMergeStrategySym] || defaultMixinMergeStrategy\n  let obj\n  const streamWriteHook = this[hooksSym].streamWrite\n\n  if (_obj === undefined || _obj === null) {\n    obj = {}\n  } else if (_obj instanceof Error) {\n    obj = { [errorKey]: _obj }\n    if (msg === undefined) {\n      msg = _obj.message\n    }\n  } else {\n    obj = _obj\n    if (msg === undefined && _obj[messageKey] === undefined && _obj[errorKey]) {\n      msg = _obj[errorKey].message\n    }\n  }\n\n  if (mixin) {\n    obj = mixinMergeStrategy(obj, mixin(obj, num, this))\n  }\n\n  const s = this[asJsonSym](obj, msg, num, t)\n\n  const stream = this[streamSym]\n  if (stream[needsMetadataGsym] === true) {\n    stream.lastLevel = num\n    stream.lastObj = obj\n    stream.lastMsg = msg\n    stream.lastTime = t.slice(this[timeSliceIndexSym])\n    stream.lastLogger = this // for child loggers\n  }\n  stream.write(streamWriteHook ? streamWriteHook(s) : s)\n}\n\nfunction flush (cb) {\n  if (cb != null && typeof cb !== 'function') {\n    throw Error('callback must be a function')\n  }\n\n  const stream = this[streamSym]\n\n  if (typeof stream.flush === 'function') {\n    stream.flush(cb || noop)\n  } else if (cb) cb()\n}\n", "'use strict'\n\nconst { hasOwnProperty } = Object.prototype\n\nconst stringify = configure()\n\n// @ts-expect-error\nstringify.configure = configure\n// @ts-expect-error\nstringify.stringify = stringify\n\n// @ts-expect-error\nstringify.default = stringify\n\n// @ts-expect-error used for named export\nexports.stringify = stringify\n// @ts-expect-error used for named export\nexports.configure = configure\n\nmodule.exports = stringify\n\n// eslint-disable-next-line no-control-regex\nconst strEscapeSequencesRegExp = /[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]/\n\n// Escape C0 control characters, double quotes, the backslash and every code\n// unit with a numeric value in the inclusive range 0xD800 to 0xDFFF.\nfunction strEscape (str) {\n  // Some magic numbers that worked out fine while benchmarking with v8 8.0\n  if (str.length < 5000 && !strEscapeSequencesRegExp.test(str)) {\n    return `\"${str}\"`\n  }\n  return JSON.stringify(str)\n}\n\nfunction sort (array, comparator) {\n  // Insertion sort is very efficient for small input sizes, but it has a bad\n  // worst case complexity. Thus, use native array sort for bigger values.\n  if (array.length > 2e2 || comparator) {\n    return array.sort(comparator)\n  }\n  for (let i = 1; i < array.length; i++) {\n    const currentValue = array[i]\n    let position = i\n    while (position !== 0 && array[position - 1] > currentValue) {\n      array[position] = array[position - 1]\n      position--\n    }\n    array[position] = currentValue\n  }\n  return array\n}\n\nconst typedArrayPrototypeGetSymbolToStringTag =\n  Object.getOwnPropertyDescriptor(\n    Object.getPrototypeOf(\n      Object.getPrototypeOf(\n        new Int8Array()\n      )\n    ),\n    Symbol.toStringTag\n  ).get\n\nfunction isTypedArrayWithEntries (value) {\n  return typedArrayPrototypeGetSymbolToStringTag.call(value) !== undefined && value.length !== 0\n}\n\nfunction stringifyTypedArray (array, separator, maximumBreadth) {\n  if (array.length < maximumBreadth) {\n    maximumBreadth = array.length\n  }\n  const whitespace = separator === ',' ? '' : ' '\n  let res = `\"0\":${whitespace}${array[0]}`\n  for (let i = 1; i < maximumBreadth; i++) {\n    res += `${separator}\"${i}\":${whitespace}${array[i]}`\n  }\n  return res\n}\n\nfunction getCircularValueOption (options) {\n  if (hasOwnProperty.call(options, 'circularValue')) {\n    const circularValue = options.circularValue\n    if (typeof circularValue === 'string') {\n      return `\"${circularValue}\"`\n    }\n    if (circularValue == null) {\n      return circularValue\n    }\n    if (circularValue === Error || circularValue === TypeError) {\n      return {\n        toString () {\n          throw new TypeError('Converting circular structure to JSON')\n        }\n      }\n    }\n    throw new TypeError('The \"circularValue\" argument must be of type string or the value null or undefined')\n  }\n  return '\"[Circular]\"'\n}\n\nfunction getDeterministicOption (options) {\n  let value\n  if (hasOwnProperty.call(options, 'deterministic')) {\n    value = options.deterministic\n    if (typeof value !== 'boolean' && typeof value !== 'function') {\n      throw new TypeError('The \"deterministic\" argument must be of type boolean or comparator function')\n    }\n  }\n  return value === undefined ? true : value\n}\n\nfunction getBooleanOption (options, key) {\n  let value\n  if (hasOwnProperty.call(options, key)) {\n    value = options[key]\n    if (typeof value !== 'boolean') {\n      throw new TypeError(`The \"${key}\" argument must be of type boolean`)\n    }\n  }\n  return value === undefined ? true : value\n}\n\nfunction getPositiveIntegerOption (options, key) {\n  let value\n  if (hasOwnProperty.call(options, key)) {\n    value = options[key]\n    if (typeof value !== 'number') {\n      throw new TypeError(`The \"${key}\" argument must be of type number`)\n    }\n    if (!Number.isInteger(value)) {\n      throw new TypeError(`The \"${key}\" argument must be an integer`)\n    }\n    if (value < 1) {\n      throw new RangeError(`The \"${key}\" argument must be >= 1`)\n    }\n  }\n  return value === undefined ? Infinity : value\n}\n\nfunction getItemCount (number) {\n  if (number === 1) {\n    return '1 item'\n  }\n  return `${number} items`\n}\n\nfunction getUniqueReplacerSet (replacerArray) {\n  const replacerSet = new Set()\n  for (const value of replacerArray) {\n    if (typeof value === 'string' || typeof value === 'number') {\n      replacerSet.add(String(value))\n    }\n  }\n  return replacerSet\n}\n\nfunction getStrictOption (options) {\n  if (hasOwnProperty.call(options, 'strict')) {\n    const value = options.strict\n    if (typeof value !== 'boolean') {\n      throw new TypeError('The \"strict\" argument must be of type boolean')\n    }\n    if (value) {\n      return (value) => {\n        let message = `Object can not safely be stringified. Received type ${typeof value}`\n        if (typeof value !== 'function') message += ` (${value.toString()})`\n        throw new Error(message)\n      }\n    }\n  }\n}\n\nfunction configure (options) {\n  options = { ...options }\n  const fail = getStrictOption(options)\n  if (fail) {\n    if (options.bigint === undefined) {\n      options.bigint = false\n    }\n    if (!('circularValue' in options)) {\n      options.circularValue = Error\n    }\n  }\n  const circularValue = getCircularValueOption(options)\n  const bigint = getBooleanOption(options, 'bigint')\n  const deterministic = getDeterministicOption(options)\n  const comparator = typeof deterministic === 'function' ? deterministic : undefined\n  const maximumDepth = getPositiveIntegerOption(options, 'maximumDepth')\n  const maximumBreadth = getPositiveIntegerOption(options, 'maximumBreadth')\n\n  function stringifyFnReplacer (key, parent, stack, replacer, spacer, indentation) {\n    let value = parent[key]\n\n    if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n      value = value.toJSON(key)\n    }\n    value = replacer.call(parent, key, value)\n\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n\n        let res = ''\n        let join = ','\n        const originalIndentation = indentation\n\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          if (spacer !== '') {\n            indentation += spacer\n            res += `\\n${indentation}`\n            join = `,\\n${indentation}`\n          }\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n            res += tmp !== undefined ? tmp : 'null'\n            res += join\n          }\n          const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          if (spacer !== '') {\n            res += `\\n${originalIndentation}`\n          }\n          stack.pop()\n          return `[${res}]`\n        }\n\n        let keys = Object.keys(value)\n        const keyLength = keys.length\n        if (keyLength === 0) {\n          return '{}'\n        }\n        if (maximumDepth < stack.length + 1) {\n          return '\"[Object]\"'\n        }\n        let whitespace = ''\n        let separator = ''\n        if (spacer !== '') {\n          indentation += spacer\n          join = `,\\n${indentation}`\n          whitespace = ' '\n        }\n        const maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n        if (deterministic && !isTypedArrayWithEntries(value)) {\n          keys = sort(keys, comparator)\n        }\n        stack.push(value)\n        for (let i = 0; i < maximumPropertiesToStringify; i++) {\n          const key = keys[i]\n          const tmp = stringifyFnReplacer(key, value, stack, replacer, spacer, indentation)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n            separator = join\n          }\n        }\n        if (keyLength > maximumBreadth) {\n          const removedKeys = keyLength - maximumBreadth\n          res += `${separator}\"...\":${whitespace}\"${getItemCount(removedKeys)} not stringified\"`\n          separator = join\n        }\n        if (spacer !== '' && separator.length > 1) {\n          res = `\\n${indentation}${res}\\n${originalIndentation}`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringifyArrayReplacer (key, value, stack, replacer, spacer, indentation) {\n    if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n      value = value.toJSON(key)\n    }\n\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n\n        const originalIndentation = indentation\n        let res = ''\n        let join = ','\n\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          if (spacer !== '') {\n            indentation += spacer\n            res += `\\n${indentation}`\n            join = `,\\n${indentation}`\n          }\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n            res += tmp !== undefined ? tmp : 'null'\n            res += join\n          }\n          const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          if (spacer !== '') {\n            res += `\\n${originalIndentation}`\n          }\n          stack.pop()\n          return `[${res}]`\n        }\n        stack.push(value)\n        let whitespace = ''\n        if (spacer !== '') {\n          indentation += spacer\n          join = `,\\n${indentation}`\n          whitespace = ' '\n        }\n        let separator = ''\n        for (const key of replacer) {\n          const tmp = stringifyArrayReplacer(key, value[key], stack, replacer, spacer, indentation)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n            separator = join\n          }\n        }\n        if (spacer !== '' && separator.length > 1) {\n          res = `\\n${indentation}${res}\\n${originalIndentation}`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringifyIndent (key, value, stack, spacer, indentation) {\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (typeof value.toJSON === 'function') {\n          value = value.toJSON(key)\n          // Prevent calling `toJSON` again.\n          if (typeof value !== 'object') {\n            return stringifyIndent(key, value, stack, spacer, indentation)\n          }\n          if (value === null) {\n            return 'null'\n          }\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n        const originalIndentation = indentation\n\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          indentation += spacer\n          let res = `\\n${indentation}`\n          const join = `,\\n${indentation}`\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n            res += tmp !== undefined ? tmp : 'null'\n            res += join\n          }\n          const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          res += `\\n${originalIndentation}`\n          stack.pop()\n          return `[${res}]`\n        }\n\n        let keys = Object.keys(value)\n        const keyLength = keys.length\n        if (keyLength === 0) {\n          return '{}'\n        }\n        if (maximumDepth < stack.length + 1) {\n          return '\"[Object]\"'\n        }\n        indentation += spacer\n        const join = `,\\n${indentation}`\n        let res = ''\n        let separator = ''\n        let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n        if (isTypedArrayWithEntries(value)) {\n          res += stringifyTypedArray(value, join, maximumBreadth)\n          keys = keys.slice(value.length)\n          maximumPropertiesToStringify -= value.length\n          separator = join\n        }\n        if (deterministic) {\n          keys = sort(keys, comparator)\n        }\n        stack.push(value)\n        for (let i = 0; i < maximumPropertiesToStringify; i++) {\n          const key = keys[i]\n          const tmp = stringifyIndent(key, value[key], stack, spacer, indentation)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}: ${tmp}`\n            separator = join\n          }\n        }\n        if (keyLength > maximumBreadth) {\n          const removedKeys = keyLength - maximumBreadth\n          res += `${separator}\"...\": \"${getItemCount(removedKeys)} not stringified\"`\n          separator = join\n        }\n        if (separator !== '') {\n          res = `\\n${indentation}${res}\\n${originalIndentation}`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringifySimple (key, value, stack) {\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (typeof value.toJSON === 'function') {\n          value = value.toJSON(key)\n          // Prevent calling `toJSON` again\n          if (typeof value !== 'object') {\n            return stringifySimple(key, value, stack)\n          }\n          if (value === null) {\n            return 'null'\n          }\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n\n        let res = ''\n\n        const hasLength = value.length !== undefined\n        if (hasLength && Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifySimple(String(i), value[i], stack)\n            res += tmp !== undefined ? tmp : 'null'\n            res += ','\n          }\n          const tmp = stringifySimple(String(i), value[i], stack)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `,\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          stack.pop()\n          return `[${res}]`\n        }\n\n        let keys = Object.keys(value)\n        const keyLength = keys.length\n        if (keyLength === 0) {\n          return '{}'\n        }\n        if (maximumDepth < stack.length + 1) {\n          return '\"[Object]\"'\n        }\n        let separator = ''\n        let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n        if (hasLength && isTypedArrayWithEntries(value)) {\n          res += stringifyTypedArray(value, ',', maximumBreadth)\n          keys = keys.slice(value.length)\n          maximumPropertiesToStringify -= value.length\n          separator = ','\n        }\n        if (deterministic) {\n          keys = sort(keys, comparator)\n        }\n        stack.push(value)\n        for (let i = 0; i < maximumPropertiesToStringify; i++) {\n          const key = keys[i]\n          const tmp = stringifySimple(key, value[key], stack)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}:${tmp}`\n            separator = ','\n          }\n        }\n        if (keyLength > maximumBreadth) {\n          const removedKeys = keyLength - maximumBreadth\n          res += `${separator}\"...\":\"${getItemCount(removedKeys)} not stringified\"`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringify (value, replacer, space) {\n    if (arguments.length > 1) {\n      let spacer = ''\n      if (typeof space === 'number') {\n        spacer = ' '.repeat(Math.min(space, 10))\n      } else if (typeof space === 'string') {\n        spacer = space.slice(0, 10)\n      }\n      if (replacer != null) {\n        if (typeof replacer === 'function') {\n          return stringifyFnReplacer('', { '': value }, [], replacer, spacer, '')\n        }\n        if (Array.isArray(replacer)) {\n          return stringifyArrayReplacer('', value, [], getUniqueReplacerSet(replacer), spacer, '')\n        }\n      }\n      if (spacer.length !== 0) {\n        return stringifyIndent('', value, [], spacer, '')\n      }\n    }\n    return stringifySimple('', value, [])\n  }\n\n  return stringify\n}\n", "'use strict'\n\nconst metadata = Symbol.for('pino.metadata')\nconst { DEFAULT_LEVELS } = require('./constants')\n\nconst DEFAULT_INFO_LEVEL = DEFAULT_LEVELS.info\n\nfunction multistream (streamsArray, opts) {\n  streamsArray = streamsArray || []\n  opts = opts || { dedupe: false }\n\n  const streamLevels = Object.create(DEFAULT_LEVELS)\n  streamLevels.silent = Infinity\n  if (opts.levels && typeof opts.levels === 'object') {\n    Object.keys(opts.levels).forEach(i => {\n      streamLevels[i] = opts.levels[i]\n    })\n  }\n\n  const res = {\n    write,\n    add,\n    remove,\n    emit,\n    flushSync,\n    end,\n    minLevel: 0,\n    lastId: 0,\n    streams: [],\n    clone,\n    [metadata]: true,\n    streamLevels\n  }\n\n  if (Array.isArray(streamsArray)) {\n    streamsArray.forEach(add, res)\n  } else {\n    add.call(res, streamsArray)\n  }\n\n  // clean this object up\n  // or it will stay allocated forever\n  // as it is closed on the following closures\n  streamsArray = null\n\n  return res\n\n  // we can exit early because the streams are ordered by level\n  function write (data) {\n    let dest\n    const level = this.lastLevel\n    const { streams } = this\n    // for handling situation when several streams has the same level\n    let recordedLevel = 0\n    let stream\n\n    // if dedupe set to true we send logs to the stream with the highest level\n    // therefore, we have to change sorting order\n    for (let i = initLoopVar(streams.length, opts.dedupe); checkLoopVar(i, streams.length, opts.dedupe); i = adjustLoopVar(i, opts.dedupe)) {\n      dest = streams[i]\n      if (dest.level <= level) {\n        if (recordedLevel !== 0 && recordedLevel !== dest.level) {\n          break\n        }\n        stream = dest.stream\n        if (stream[metadata]) {\n          const { lastTime, lastMsg, lastObj, lastLogger } = this\n          stream.lastLevel = level\n          stream.lastTime = lastTime\n          stream.lastMsg = lastMsg\n          stream.lastObj = lastObj\n          stream.lastLogger = lastLogger\n        }\n        stream.write(data)\n        if (opts.dedupe) {\n          recordedLevel = dest.level\n        }\n      } else if (!opts.dedupe) {\n        break\n      }\n    }\n  }\n\n  function emit (...args) {\n    for (const { stream } of this.streams) {\n      if (typeof stream.emit === 'function') {\n        stream.emit(...args)\n      }\n    }\n  }\n\n  function flushSync () {\n    for (const { stream } of this.streams) {\n      if (typeof stream.flushSync === 'function') {\n        stream.flushSync()\n      }\n    }\n  }\n\n  function add (dest) {\n    if (!dest) {\n      return res\n    }\n\n    // Check that dest implements either StreamEntry or DestinationStream\n    const isStream = typeof dest.write === 'function' || dest.stream\n    const stream_ = dest.write ? dest : dest.stream\n    // This is necessary to provide a meaningful error message, otherwise it throws somewhere inside write()\n    if (!isStream) {\n      throw Error('stream object needs to implement either StreamEntry or DestinationStream interface')\n    }\n\n    const { streams, streamLevels } = this\n\n    let level\n    if (typeof dest.levelVal === 'number') {\n      level = dest.levelVal\n    } else if (typeof dest.level === 'string') {\n      level = streamLevels[dest.level]\n    } else if (typeof dest.level === 'number') {\n      level = dest.level\n    } else {\n      level = DEFAULT_INFO_LEVEL\n    }\n\n    const dest_ = {\n      stream: stream_,\n      level,\n      levelVal: undefined,\n      id: ++res.lastId\n    }\n\n    streams.unshift(dest_)\n    streams.sort(compareByLevel)\n\n    this.minLevel = streams[0].level\n\n    return res\n  }\n\n  function remove (id) {\n    const { streams } = this\n    const index = streams.findIndex(s => s.id === id)\n\n    if (index >= 0) {\n      streams.splice(index, 1)\n      streams.sort(compareByLevel)\n      this.minLevel = streams.length > 0 ? streams[0].level : -1\n    }\n\n    return res\n  }\n\n  function end () {\n    for (const { stream } of this.streams) {\n      if (typeof stream.flushSync === 'function') {\n        stream.flushSync()\n      }\n      stream.end()\n    }\n  }\n\n  function clone (level) {\n    const streams = new Array(this.streams.length)\n\n    for (let i = 0; i < streams.length; i++) {\n      streams[i] = {\n        level,\n        stream: this.streams[i].stream\n      }\n    }\n\n    return {\n      write,\n      add,\n      remove,\n      minLevel: level,\n      streams,\n      clone,\n      emit,\n      flushSync,\n      [metadata]: true\n    }\n  }\n}\n\nfunction compareByLevel (a, b) {\n  return a.level - b.level\n}\n\nfunction initLoopVar (length, dedupe) {\n  return dedupe ? length - 1 : 0\n}\n\nfunction adjustLoopVar (i, dedupe) {\n  return dedupe ? i - 1 : i + 1\n}\n\nfunction checkLoopVar (i, length, dedupe) {\n  return dedupe ? i >= 0 : i < length\n}\n\nmodule.exports = multistream\n", "\n          function pinoBundlerAbsolutePath(p) {\n            try {\n              const path = require('path');\n              // Always resolve to the absolute output directory where worker files are located\n              const outputDir = \"/vercel/path0/artifacts/api-server/dist\";\n              return path.resolve(outputDir, p.replace(/^\\.\\//, ''));\n            } catch(e) {\n              // ESM fallback: resolve relative to this bundle's location  \n              const f = new Function('p', 'return new URL(p, import.meta.url).pathname');\n              return f(p);\n            }\n          }\n        \n          globalThis.__bundlerPathsOverrides = { ...(globalThis.__bundlerPathsOverrides || {}), 'thread-stream-worker': pinoBundlerAbsolutePath('./thread-stream-worker.mjs'),'pino-worker': pinoBundlerAbsolutePath('./pino-worker.mjs'),'pino/file': pinoBundlerAbsolutePath('./pino-file.mjs'),'pino-pretty': pinoBundlerAbsolutePath('./pino-pretty.mjs')}\n        'use strict'\n\nconst os = require('node:os')\nconst stdSerializers = require('pino-std-serializers')\nconst caller = require('./lib/caller')\nconst redaction = require('./lib/redaction')\nconst time = require('./lib/time')\nconst proto = require('./lib/proto')\nconst symbols = require('./lib/symbols')\nconst { configure } = require('safe-stable-stringify')\nconst { assertDefaultLevelFound, mappings, genLsCache, genLevelComparison, assertLevelComparison } = require('./lib/levels')\nconst { DEFAULT_LEVELS, SORTING_ORDER } = require('./lib/constants')\nconst {\n  createArgsNormalizer,\n  asChindings,\n  buildSafeSonicBoom,\n  buildFormatters,\n  stringify,\n  normalizeDestFileDescriptor,\n  noop\n} = require('./lib/tools')\nconst { version } = require('./lib/meta')\nconst {\n  chindingsSym,\n  redactFmtSym,\n  serializersSym,\n  timeSym,\n  timeSliceIndexSym,\n  streamSym,\n  stringifySym,\n  stringifySafeSym,\n  stringifiersSym,\n  setLevelSym,\n  endSym,\n  formatOptsSym,\n  messageKeySym,\n  errorKeySym,\n  nestedKeySym,\n  mixinSym,\n  levelCompSym,\n  useOnlyCustomLevelsSym,\n  formattersSym,\n  hooksSym,\n  nestedKeyStrSym,\n  mixinMergeStrategySym,\n  msgPrefixSym\n} = symbols\nconst { epochTime, nullTime } = time\nconst { pid } = process\nconst hostname = os.hostname()\nconst defaultErrorSerializer = stdSerializers.err\nconst defaultOptions = {\n  level: 'info',\n  levelComparison: SORTING_ORDER.ASC,\n  levels: DEFAULT_LEVELS,\n  messageKey: 'msg',\n  errorKey: 'err',\n  nestedKey: null,\n  enabled: true,\n  base: { pid, hostname },\n  serializers: Object.assign(Object.create(null), {\n    err: defaultErrorSerializer\n  }),\n  formatters: Object.assign(Object.create(null), {\n    bindings (bindings) {\n      return bindings\n    },\n    level (label, number) {\n      return { level: number }\n    }\n  }),\n  hooks: {\n    logMethod: undefined,\n    streamWrite: undefined\n  },\n  timestamp: epochTime,\n  name: undefined,\n  redact: null,\n  customLevels: null,\n  useOnlyCustomLevels: false,\n  depthLimit: 5,\n  edgeLimit: 100\n}\n\nconst normalize = createArgsNormalizer(defaultOptions)\n\nconst serializers = Object.assign(Object.create(null), stdSerializers)\n\nfunction pino (...args) {\n  const instance = {}\n  const { opts, stream } = normalize(instance, caller(), ...args)\n\n  if (opts.level && typeof opts.level === 'string' && DEFAULT_LEVELS[opts.level.toLowerCase()] !== undefined) opts.level = opts.level.toLowerCase()\n\n  const {\n    redact,\n    crlf,\n    serializers,\n    timestamp,\n    messageKey,\n    errorKey,\n    nestedKey,\n    base,\n    name,\n    level,\n    customLevels,\n    levelComparison,\n    mixin,\n    mixinMergeStrategy,\n    useOnlyCustomLevels,\n    formatters,\n    hooks,\n    depthLimit,\n    edgeLimit,\n    onChild,\n    msgPrefix\n  } = opts\n\n  const stringifySafe = configure({\n    maximumDepth: depthLimit,\n    maximumBreadth: edgeLimit\n  })\n\n  const allFormatters = buildFormatters(\n    formatters.level,\n    formatters.bindings,\n    formatters.log\n  )\n\n  const stringifyFn = stringify.bind({\n    [stringifySafeSym]: stringifySafe\n  })\n  const stringifiers = redact ? redaction(redact, stringifyFn) : {}\n  const formatOpts = redact\n    ? { stringify: stringifiers[redactFmtSym] }\n    : { stringify: stringifyFn }\n  const end = '}' + (crlf ? '\\r\\n' : '\\n')\n  const coreChindings = asChindings.bind(null, {\n    [chindingsSym]: '',\n    [serializersSym]: serializers,\n    [stringifiersSym]: stringifiers,\n    [stringifySym]: stringify,\n    [stringifySafeSym]: stringifySafe,\n    [formattersSym]: allFormatters\n  })\n\n  let chindings = ''\n  if (base !== null) {\n    if (name === undefined) {\n      chindings = coreChindings(base)\n    } else {\n      chindings = coreChindings(Object.assign({}, base, { name }))\n    }\n  }\n\n  const time = (timestamp instanceof Function)\n    ? timestamp\n    : (timestamp ? epochTime : nullTime)\n  const timeSliceIndex = time().indexOf(':') + 1\n\n  if (useOnlyCustomLevels && !customLevels) throw Error('customLevels is required if useOnlyCustomLevels is set true')\n  if (mixin && typeof mixin !== 'function') throw Error(`Unknown mixin type \"${typeof mixin}\" - expected \"function\"`)\n  if (msgPrefix && typeof msgPrefix !== 'string') throw Error(`Unknown msgPrefix type \"${typeof msgPrefix}\" - expected \"string\"`)\n\n  assertDefaultLevelFound(level, customLevels, useOnlyCustomLevels)\n  const levels = mappings(customLevels, useOnlyCustomLevels)\n\n  if (typeof stream.emit === 'function') {\n    stream.emit('message', { code: 'PINO_CONFIG', config: { levels, messageKey, errorKey } })\n  }\n\n  assertLevelComparison(levelComparison)\n  const levelCompFunc = genLevelComparison(levelComparison)\n\n  Object.assign(instance, {\n    levels,\n    [levelCompSym]: levelCompFunc,\n    [useOnlyCustomLevelsSym]: useOnlyCustomLevels,\n    [streamSym]: stream,\n    [timeSym]: time,\n    [timeSliceIndexSym]: timeSliceIndex,\n    [stringifySym]: stringify,\n    [stringifySafeSym]: stringifySafe,\n    [stringifiersSym]: stringifiers,\n    [endSym]: end,\n    [formatOptsSym]: formatOpts,\n    [messageKeySym]: messageKey,\n    [errorKeySym]: errorKey,\n    [nestedKeySym]: nestedKey,\n    // protect against injection\n    [nestedKeyStrSym]: nestedKey ? `,${JSON.stringify(nestedKey)}:{` : '',\n    [serializersSym]: serializers,\n    [mixinSym]: mixin,\n    [mixinMergeStrategySym]: mixinMergeStrategy,\n    [chindingsSym]: chindings,\n    [formattersSym]: allFormatters,\n    [hooksSym]: hooks,\n    silent: noop,\n    onChild,\n    [msgPrefixSym]: msgPrefix\n  })\n\n  Object.setPrototypeOf(instance, proto())\n\n  genLsCache(instance)\n\n  instance[setLevelSym](level)\n\n  return instance\n}\n\nmodule.exports = pino\n\nmodule.exports.destination = (dest = process.stdout.fd) => {\n  if (typeof dest === 'object') {\n    dest.dest = normalizeDestFileDescriptor(dest.dest || process.stdout.fd)\n    return buildSafeSonicBoom(dest)\n  } else {\n    return buildSafeSonicBoom({ dest: normalizeDestFileDescriptor(dest), minLength: 0 })\n  }\n}\n\nmodule.exports.transport = require('./lib/transport')\nmodule.exports.multistream = require('./lib/multistream')\n\nmodule.exports.levels = mappings()\nmodule.exports.stdSerializers = serializers\nmodule.exports.stdTimeFunctions = Object.assign({}, time)\nmodule.exports.symbols = symbols\nmodule.exports.version = version\n\n// Enables default and name export with TypeScript and Babel\nmodule.exports.default = pino\nmodule.exports.pino = pino\n", null, "'use strict'\n\nconst { pino, symbols: { stringifySym, chindingsSym } } = require('pino')\nconst serializers = require('pino-std-serializers')\nconst getCallerFile = require('get-caller-file')\nconst startTime = Symbol('startTime')\nconst reqObject = Symbol('reqObject')\n\nfunction pinoLogger (opts, stream) {\n  if (opts && opts._writableState) {\n    stream = opts\n    opts = null\n  }\n\n  opts = Object.assign({}, opts)\n\n  opts.customAttributeKeys = opts.customAttributeKeys || {}\n  const reqKey = opts.customAttributeKeys.req || 'req'\n  const resKey = opts.customAttributeKeys.res || 'res'\n  const errKey = opts.customAttributeKeys.err || 'err'\n  const requestIdKey = opts.customAttributeKeys.reqId || 'reqId'\n  const responseTimeKey = opts.customAttributeKeys.responseTime || 'responseTime'\n  delete opts.customAttributeKeys\n\n  const customProps = opts.customProps || undefined\n\n  opts.wrapSerializers = 'wrapSerializers' in opts ? opts.wrapSerializers : true\n  if (opts.wrapSerializers) {\n    opts.serializers = Object.assign({}, opts.serializers)\n    const requestSerializer = opts.serializers[reqKey] || opts.serializers.req || serializers.req\n    const responseSerializer = opts.serializers[resKey] || opts.serializers.res || serializers.res\n    const errorSerializer = opts.serializers[errKey] || opts.serializers.err || serializers.err\n    opts.serializers[reqKey] = serializers.wrapRequestSerializer(requestSerializer)\n    opts.serializers[resKey] = serializers.wrapResponseSerializer(responseSerializer)\n    opts.serializers[errKey] = serializers.wrapErrorSerializer(errorSerializer)\n  }\n  delete opts.wrapSerializers\n\n  if (opts.useLevel && opts.customLogLevel) {\n    throw new Error('You can\\'t pass \\'useLevel\\' and \\'customLogLevel\\' together')\n  }\n\n  function getValidLogLevel (level, defaultValue = 'info') {\n    if (level && typeof level === 'string') {\n      const logLevel = level.trim()\n      if (validLogLevels.includes(logLevel) === true) {\n        return logLevel\n      }\n    }\n    return defaultValue\n  }\n\n  function getLogLevelFromCustomLogLevel (customLogLevel, useLevel, res, err, req) {\n    return customLogLevel ? getValidLogLevel(customLogLevel(req, res, err), useLevel) : useLevel\n  }\n\n  const customLogLevel = opts.customLogLevel\n  delete opts.customLogLevel\n\n  const theStream = opts.stream || stream\n  delete opts.stream\n\n  const autoLogging = (opts.autoLogging !== false)\n  const autoLoggingIgnore = opts.autoLogging && opts.autoLogging.ignore ? opts.autoLogging.ignore : null\n  delete opts.autoLogging\n\n  const onRequestReceivedObject = getFunctionOrDefault(opts.customReceivedObject, undefined)\n  const receivedMessage = getFunctionOrDefault(opts.customReceivedMessage, undefined)\n\n  const onRequestSuccessObject = getFunctionOrDefault(opts.customSuccessObject, defaultSuccessfulRequestObjectProvider)\n  const successMessage = getFunctionOrDefault(opts.customSuccessMessage, defaultSuccessfulRequestMessageProvider)\n\n  const onRequestErrorObject = getFunctionOrDefault(opts.customErrorObject, defaultFailedRequestObjectProvider)\n  const errorMessage = getFunctionOrDefault(opts.customErrorMessage, defaultFailedRequestMessageProvider)\n\n  delete opts.customSuccessfulMessage\n  delete opts.customErroredMessage\n\n  const quietReqLogger = !!opts.quietReqLogger\n  const quietResLogger = !!opts.quietResLogger\n\n  const logger = wrapChild(opts, theStream)\n\n  const validLogLevels = Object.keys(logger.levels.values).concat('silent')\n  const useLevel = getValidLogLevel(opts.useLevel)\n  delete opts.useLevel\n\n  const genReqId = reqIdGenFactory(opts.genReqId)\n  const result = (req, res, next) => {\n    return loggingMiddleware(logger, req, res, next)\n  }\n  result.logger = logger\n  return result\n\n  function onResFinished (res, logger, err) {\n    let log = logger\n    const responseTime = Date.now() - res[startTime]\n    const req = res[reqObject]\n    const level = getLogLevelFromCustomLogLevel(customLogLevel, useLevel, res, err, req)\n\n    if (level === 'silent') {\n      return\n    }\n\n    const customPropBindings = (typeof customProps === 'function') ? customProps(req, res) : customProps\n    if (customPropBindings) {\n      const customPropBindingStr = logger[stringifySym](customPropBindings).replace(/[{}]/g, '')\n      const customPropBindingsStr = logger[chindingsSym]\n      if (!customPropBindingsStr.includes(customPropBindingStr)) {\n        log = logger.child(customPropBindings)\n      }\n    }\n\n    if (err || res.err || res.statusCode >= 500) {\n      const error = err || res.err || new Error('failed with status code ' + res.statusCode)\n\n      log[level](\n        onRequestErrorObject(req, res, error, {\n          [resKey]: res,\n          [errKey]: error,\n          [responseTimeKey]: responseTime\n        }),\n        errorMessage(req, res, error, responseTime)\n      )\n\n      return\n    }\n\n    log[level](\n      onRequestSuccessObject(req, res, {\n        [resKey]: res,\n        [responseTimeKey]: responseTime\n      }),\n      successMessage(req, res, responseTime)\n    )\n  }\n\n  function loggingMiddleware (logger, req, res, next) {\n    let shouldLogSuccess = true\n\n    req.id = req.id || genReqId(req, res)\n\n    const log = quietReqLogger ? logger.child({ [requestIdKey]: req.id }) : logger\n\n    let fullReqLogger = log.child({ [reqKey]: req })\n    const customPropBindings = (typeof customProps === 'function') ? customProps(req, res) : customProps\n    if (customPropBindings) {\n      fullReqLogger = fullReqLogger.child(customPropBindings)\n    }\n\n    const responseLogger = quietResLogger ? log : fullReqLogger\n    const requestLogger = quietReqLogger ? log : fullReqLogger\n\n    if (!res.log) {\n      res.log = responseLogger\n    }\n    if (Array.isArray(res.allLogs) === false) {\n      res.allLogs = []\n    }\n    res.allLogs.push(responseLogger)\n\n    if (!req.log) {\n      req.log = requestLogger\n    }\n    if (!req.allLogs) {\n      req.allLogs = []\n    }\n    req.allLogs.push(requestLogger)\n\n    res[startTime] = res[startTime] || Date.now()\n    // carry request to be executed when response is finished\n    res[reqObject] = req\n\n    const onResponseComplete = (err) => {\n      res.removeListener('close', onResponseComplete)\n      res.removeListener('finish', onResponseComplete)\n      res.removeListener('error', onResponseComplete)\n      return onResFinished(res, responseLogger, err)\n    }\n\n    if (autoLogging) {\n      if (autoLoggingIgnore !== null && shouldLogSuccess === true) {\n        const isIgnored = autoLoggingIgnore(req)\n        shouldLogSuccess = !isIgnored\n      }\n\n      if (shouldLogSuccess) {\n        const shouldLogReceived = receivedMessage !== undefined || onRequestReceivedObject !== undefined\n\n        if (shouldLogReceived) {\n          const level = getLogLevelFromCustomLogLevel(customLogLevel, useLevel, res, undefined, req)\n          const receivedObjectResult = onRequestReceivedObject !== undefined ? onRequestReceivedObject(req, res, undefined) : {}\n          const receivedStringResult = receivedMessage !== undefined ? receivedMessage(req, res) : undefined\n\n          requestLogger[level](receivedObjectResult, receivedStringResult)\n        }\n\n        res.on('close', onResponseComplete)\n        res.on('finish', onResponseComplete)\n      }\n\n      res.on('error', onResponseComplete)\n    }\n\n    if (next) {\n      next()\n    }\n  }\n}\n\nfunction wrapChild (opts, stream) {\n  const prevLogger = opts.logger\n  const prevGenReqId = opts.genReqId\n  let logger = null\n\n  if (prevLogger) {\n    opts.logger = undefined\n    opts.genReqId = undefined\n    logger = prevLogger.child({}, opts)\n    opts.logger = prevLogger\n    opts.genReqId = prevGenReqId\n  } else {\n    if (opts.transport && !opts.transport.caller) {\n      opts.transport.caller = getCallerFile()\n    }\n\n    logger = pino(opts, stream)\n  }\n\n  return logger\n}\n\nfunction reqIdGenFactory (func) {\n  if (typeof func === 'function') return func\n  const maxInt = 2147483647\n  let nextReqId = 0\n  return function genReqId (req, res) {\n    return req.id || (nextReqId = (nextReqId + 1) & maxInt)\n  }\n}\n\nfunction getFunctionOrDefault (value, defaultValue) {\n  if (value && typeof value === 'function') {\n    return value\n  }\n\n  return defaultValue\n}\n\nfunction defaultSuccessfulRequestObjectProvider (req, res, successObject) {\n  return successObject\n}\n\nfunction defaultFailedRequestObjectProvider (req, res, error, errorObject) {\n  return errorObject\n}\n\nfunction defaultFailedRequestMessageProvider () {\n  return 'request errored'\n}\n\nfunction defaultSuccessfulRequestMessageProvider (req, res) {\n  /* istanbul ignore next */\n  return !req.readableAborted && res.writableEnded ? 'request completed' : 'request aborted'\n}\n\nmodule.exports = pinoLogger\nmodule.exports.stdSerializers = {\n  err: serializers.err,\n  req: serializers.req,\n  res: serializers.res\n}\nmodule.exports.startTime = startTime\nmodule.exports.default = pinoLogger\nmodule.exports.pinoHttp = pinoLogger\n", "export class AddressError extends Error {\n  parseMessage?: string;\n\n  constructor(message: string, parseMessage?: string) {\n    super(message);\n\n    this.name = 'AddressError';\n\n    this.parseMessage = parseMessage;\n  }\n}\n", "import { Address4 } from './ipv4';\nimport { Address6 } from './ipv6';\nimport { AddressError } from './address-error';\n\nexport interface ReverseFormOptions {\n  omitSuffix?: boolean;\n}\n\nexport function isInSubnet(this: Address4 | Address6, address: Address4 | Address6) {\n  if (this.subnetMask < address.subnetMask) {\n    return false;\n  }\n\n  if (this.mask(address.subnetMask) === address.mask()) {\n    return true;\n  }\n\n  return false;\n}\n\nexport function isCorrect(defaultBits: number) {\n  return function (this: Address4 | Address6) {\n    if (this.addressMinusSuffix !== this.correctForm()) {\n      return false;\n    }\n\n    if (this.subnetMask === defaultBits && !this.parsedSubnet) {\n      return true;\n    }\n\n    return this.parsedSubnet === String(this.subnetMask);\n  };\n}\n\n/**\n * Returns the prefix length (number of leading 1 bits) of a contiguous\n * subnet mask. Throws `AddressError` if the mask is non-contiguous (e.g.\n * `255.0.255.0`).\n */\nexport function prefixLengthFromMask(value: bigint, totalBits: number): number {\n  const binary = value.toString(2).padStart(totalBits, '0');\n\n  if (binary.length > totalBits) {\n    throw new AddressError('Invalid subnet mask.');\n  }\n\n  const firstZero = binary.indexOf('0');\n\n  if (firstZero === -1) {\n    return totalBits;\n  }\n\n  if (binary.slice(firstZero).includes('1')) {\n    throw new AddressError('Invalid subnet mask.');\n  }\n\n  return firstZero;\n}\n\nexport function numberToPaddedHex(number: number) {\n  return number.toString(16).padStart(2, '0');\n}\n\nexport function stringToPaddedHex(numberString: string) {\n  return numberToPaddedHex(parseInt(numberString, 10));\n}\n\n/**\n * @param binaryValue Binary representation of a value (e.g. `10`)\n * @param position Byte position, where 0 is the least significant bit\n */\nexport function testBit(binaryValue: string, position: number): boolean {\n  const { length } = binaryValue;\n\n  if (position > length) {\n    return false;\n  }\n\n  const positionInString = length - position;\n  return binaryValue.substring(positionInString, positionInString + 1) === '1';\n}\n", "export const BITS = 32;\nexport const GROUPS = 4;\n\nexport const RE_ADDRESS =\n  /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/g;\n\nexport const RE_SUBNET_STRING = /\\/\\d{1,2}$/;\n", "/* eslint-disable no-param-reassign */\n\nimport * as common from './common';\nimport * as constants from './v4/constants';\nimport { AddressError } from './address-error';\n\nconst isCorrect4 = common.isCorrect(constants.BITS);\n\n/**\n * Represents an IPv4 address\n * @param {string} address - An IPv4 address string\n */\nexport class Address4 {\n  address: string;\n  addressMinusSuffix?: string;\n  groups: number = constants.GROUPS;\n  parsedAddress: string[] = [];\n  parsedSubnet: string = '';\n  subnet: string = '/32';\n  subnetMask: number = 32;\n  v4: boolean = true;\n  private _binaryZeroPad?: string;\n\n  constructor(address: string) {\n    this.address = address;\n\n    const subnet = constants.RE_SUBNET_STRING.exec(address);\n\n    if (subnet) {\n      this.parsedSubnet = subnet[0].replace('/', '');\n      this.subnetMask = parseInt(this.parsedSubnet, 10);\n      this.subnet = `/${this.subnetMask}`;\n\n      if (this.subnetMask < 0 || this.subnetMask > constants.BITS) {\n        throw new AddressError('Invalid subnet mask.');\n      }\n\n      address = address.replace(constants.RE_SUBNET_STRING, '');\n    }\n\n    this.addressMinusSuffix = address;\n\n    this.parsedAddress = this.parse(address);\n  }\n\n  /**\n   * Returns true if the given string is a valid IPv4 address (with optional\n   * CIDR subnet), false otherwise. Host bits in the subnet portion are\n   * allowed (e.g. `192.168.1.5/24` is valid); for strict network-address\n   * validation compare `correctForm()` to `startAddress().correctForm()`,\n   * or use `networkForm()`.\n   */\n  static isValid(address: string): boolean {\n    try {\n      // eslint-disable-next-line no-new\n      new Address4(address);\n\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  /**\n   * Parses an IPv4 address string into its four octet groups and stores the\n   * result on `this.parsedAddress`. Called automatically by the constructor;\n   * you typically don't need to call it directly. Throws `AddressError` if\n   * the input is not a valid IPv4 address.\n   */\n  parse(address: string) {\n    const groups = address.split('.');\n\n    if (!address.match(constants.RE_ADDRESS)) {\n      throw new AddressError('Invalid IPv4 address.');\n    }\n\n    return groups;\n  }\n\n  /**\n   * Returns the address in correct form: octets joined with `.` and any\n   * leading zeros stripped (e.g. `192.168.1.1`). For IPv4 this matches the\n   * canonical dotted-decimal representation.\n   */\n  correctForm(): string {\n    return this.parsedAddress.map((part) => parseInt(part, 10)).join('.');\n  }\n\n  /**\n   * Returns true if the address is correct, false otherwise\n   * @returns {Boolean}\n   */\n  isCorrect = isCorrect4;\n\n  /**\n   * Construct an `Address4` from an address and a dotted-decimal subnet\n   * mask given as separate strings (e.g. as returned by Node's\n   * `os.networkInterfaces()`). Throws `AddressError` if the mask is\n   * non-contiguous (e.g. `255.0.255.0`).\n   * @example\n   * var address = Address4.fromAddressAndMask('192.168.1.1', '255.255.255.0');\n   * address.subnetMask; // 24\n   */\n  static fromAddressAndMask(address: string, mask: string): Address4 {\n    const bits = common.prefixLengthFromMask(new Address4(mask).bigInt(), constants.BITS);\n    return new Address4(`${address}/${bits}`);\n  }\n\n  /**\n   * Construct an `Address4` from an address and a Cisco-style wildcard mask\n   * given as separate strings (e.g. `0.0.0.255` for a `/24`). The wildcard\n   * mask is the bitwise inverse of the subnet mask. Throws `AddressError`\n   * if the mask is non-contiguous (e.g. `0.255.0.255`).\n   * @example\n   * var address = Address4.fromAddressAndWildcardMask('10.0.0.1', '0.0.0.255');\n   * address.subnetMask; // 24\n   */\n  static fromAddressAndWildcardMask(address: string, wildcardMask: string): Address4 {\n    const wildcard = new Address4(wildcardMask).bigInt();\n    const allOnes = (BigInt(1) << BigInt(constants.BITS)) - BigInt(1);\n    // eslint-disable-next-line no-bitwise\n    const mask = wildcard ^ allOnes;\n    const bits = common.prefixLengthFromMask(mask, constants.BITS);\n    return new Address4(`${address}/${bits}`);\n  }\n\n  /**\n   * Construct an `Address4` from a wildcard pattern with trailing `*`\n   * octets. The number of trailing wildcards determines the prefix\n   * length: each `*` represents 8 bits.\n   *\n   * Only trailing whole-octet wildcards are supported. Partial-octet\n   * wildcards (e.g. `192.168.0.1*`) and interior wildcards (e.g.\n   * `192.*.0.1`) throw `AddressError`.\n   * @example\n   * Address4.fromWildcard('192.168.0.*').subnet;   // '/24'\n   * Address4.fromWildcard('192.168.*.*').subnet;   // '/16'\n   * Address4.fromWildcard('*.*.*.*').subnet;       // '/0'\n   */\n  static fromWildcard(input: string): Address4 {\n    const groups = input.split('.');\n\n    if (groups.length !== constants.GROUPS) {\n      throw new AddressError('Wildcard pattern must have 4 octets');\n    }\n\n    let firstWildcard = -1;\n\n    for (let i = 0; i < groups.length; i++) {\n      if (groups[i] === '*') {\n        if (firstWildcard === -1) {\n          firstWildcard = i;\n        }\n      } else if (firstWildcard !== -1) {\n        throw new AddressError(\n          'Wildcard `*` must only appear in trailing octets (e.g. `192.168.0.*`)',\n        );\n      }\n    }\n\n    const trailing = firstWildcard === -1 ? 0 : groups.length - firstWildcard;\n    const replaced = groups.map((g) => (g === '*' ? '0' : g));\n    const subnetBits = constants.BITS - trailing * 8;\n\n    return new Address4(`${replaced.join('.')}/${subnetBits}`);\n  }\n\n  /**\n   * Converts a hex string to an IPv4 address object. Accepts 8 hex digits\n   * with optional `:` separators (e.g. `'7f000001'` or `'7f:00:00:01'`).\n   * Throws `AddressError` for any other length or for non-hex characters.\n   * @param {string} hex - a hex string to convert\n   * @returns {Address4}\n   */\n  static fromHex(hex: string): Address4 {\n    const stripped = hex.replace(/:/g, '');\n\n    if (!/^[0-9a-fA-F]{8}$/.test(stripped)) {\n      throw new AddressError('IPv4 hex must be exactly 8 hex digits');\n    }\n\n    const groups = [];\n\n    for (let i = 0; i < 8; i += 2) {\n      groups.push(parseInt(stripped.slice(i, i + 2), 16));\n    }\n\n    return new Address4(groups.join('.'));\n  }\n\n  /**\n   * Converts an integer into a IPv4 address object. The integer must be a\n   * non-negative safe integer in the range `[0, 2**32 - 1]`; otherwise\n   * `AddressError` is thrown.\n   * @param {integer} integer - a number to convert\n   * @returns {Address4}\n   */\n  static fromInteger(integer: number): Address4 {\n    if (!Number.isInteger(integer) || integer < 0 || integer > 0xffffffff) {\n      throw new AddressError('IPv4 integer must be in the range 0 to 2**32 - 1');\n    }\n\n    return Address4.fromHex(integer.toString(16).padStart(8, '0'));\n  }\n\n  /**\n   * Return an address from in-addr.arpa form\n   * @param {string} arpaFormAddress - an 'in-addr.arpa' form ipv4 address\n   * @returns {Adress4}\n   * @example\n   * var address = Address4.fromArpa(42.2.0.192.in-addr.arpa.)\n   * address.correctForm(); // '192.0.2.42'\n   */\n  static fromArpa(arpaFormAddress: string): Address4 {\n    // remove ending \".in-addr.arpa.\" or just \".\"\n    const leader = arpaFormAddress.replace(/(\\.in-addr\\.arpa)?\\.$/, '');\n\n    const address = leader.split('.').reverse().join('.');\n\n    return new Address4(address);\n  }\n\n  /**\n   * Converts an IPv4 address object to a hex string\n   * @returns {String}\n   */\n  toHex(): string {\n    return this.parsedAddress.map((part) => common.stringToPaddedHex(part)).join(':');\n  }\n\n  /**\n   * Converts an IPv4 address object to an array of bytes.\n   *\n   * To get a Node.js `Buffer`, wrap the result: `Buffer.from(address.toArray())`.\n   * @returns {Array}\n   */\n  toArray(): number[] {\n    return this.parsedAddress.map((part) => parseInt(part, 10));\n  }\n\n  /**\n   * Converts an IPv4 address object to an IPv6 address group\n   * @returns {String}\n   */\n  toGroup6(): string {\n    const output = [];\n    let i;\n\n    for (i = 0; i < constants.GROUPS; i += 2) {\n      output.push(\n        `${common.stringToPaddedHex(this.parsedAddress[i])}${common.stringToPaddedHex(\n          this.parsedAddress[i + 1],\n        )}`,\n      );\n    }\n\n    return output.join(':');\n  }\n\n  /**\n   * Returns the address as a `bigint`\n   * @returns {bigint}\n   */\n  bigInt(): bigint {\n    return BigInt(`0x${this.parsedAddress.map((n) => common.stringToPaddedHex(n)).join('')}`);\n  }\n\n  /**\n   * Helper function getting start address.\n   * @returns {bigint}\n   */\n  _startAddress(): bigint {\n    return BigInt(`0b${this.mask() + '0'.repeat(constants.BITS - this.subnetMask)}`);\n  }\n\n  /**\n   * The first address in the range given by this address' subnet.\n   * Often referred to as the Network Address.\n   * @returns {Address4}\n   */\n  startAddress(): Address4 {\n    return Address4.fromBigInt(this._startAddress());\n  }\n\n  /**\n   * The first host address in the range given by this address's subnet ie\n   * the first address after the Network Address\n   * @returns {Address4}\n   */\n  startAddressExclusive(): Address4 {\n    const adjust = BigInt('1');\n    return Address4.fromBigInt(this._startAddress() + adjust);\n  }\n\n  /**\n   * Helper function getting end address.\n   * @returns {bigint}\n   */\n  _endAddress(): bigint {\n    return BigInt(`0b${this.mask() + '1'.repeat(constants.BITS - this.subnetMask)}`);\n  }\n\n  /**\n   * The last address in the range given by this address' subnet\n   * Often referred to as the Broadcast\n   * @returns {Address4}\n   */\n  endAddress(): Address4 {\n    return Address4.fromBigInt(this._endAddress());\n  }\n\n  /**\n   * The last host address in the range given by this address's subnet ie\n   * the last address prior to the Broadcast Address\n   * @returns {Address4}\n   */\n  endAddressExclusive(): Address4 {\n    const adjust = BigInt('1');\n    return Address4.fromBigInt(this._endAddress() - adjust);\n  }\n\n  /**\n   * The dotted-decimal form of the subnet mask, e.g. `255.255.240.0` for\n   * a `/20`. Returns an `Address4`; call `.correctForm()` for the string.\n   * @returns {Address4}\n   */\n  subnetMaskAddress(): Address4 {\n    return Address4.fromBigInt(\n      BigInt(`0b${'1'.repeat(this.subnetMask)}${'0'.repeat(constants.BITS - this.subnetMask)}`),\n    );\n  }\n\n  /**\n   * The Cisco-style wildcard mask, e.g. `0.0.0.255` for a `/24`. This is\n   * the bitwise inverse of `subnetMaskAddress()`. Returns an `Address4`;\n   * call `.correctForm()` for the string.\n   * @returns {Address4}\n   */\n  wildcardMask(): Address4 {\n    return Address4.fromBigInt(\n      BigInt(`0b${'0'.repeat(this.subnetMask)}${'1'.repeat(constants.BITS - this.subnetMask)}`),\n    );\n  }\n\n  /**\n   * The network address in CIDR string form, e.g. `192.168.1.0/24` for\n   * `192.168.1.5/24`. For an address with no explicit subnet the prefix is\n   * `/32`, e.g. `networkForm()` on `192.168.1.5` returns `192.168.1.5/32`.\n   * @returns {string}\n   */\n  networkForm(): string {\n    return `${this.startAddress().correctForm()}/${this.subnetMask}`;\n  }\n\n  /**\n   * Converts a BigInt to a v4 address object. The value must be in the\n   * range `[0, 2**32 - 1]`; otherwise `AddressError` is thrown.\n   * @param {bigint} bigInt - a BigInt to convert\n   * @returns {Address4}\n   */\n  static fromBigInt(bigInt: bigint): Address4 {\n    if (bigInt < 0n || bigInt > 0xffffffffn) {\n      throw new AddressError('IPv4 BigInt must be in the range 0 to 2**32 - 1');\n    }\n\n    return Address4.fromHex(bigInt.toString(16).padStart(8, '0'));\n  }\n\n  /**\n   * Convert a byte array to an Address4 object.\n   *\n   * To convert from a Node.js `Buffer`, spread it: `Address4.fromByteArray([...buf])`.\n   * @param {Array<number>} bytes - an array of 4 bytes (0-255)\n   * @returns {Address4}\n   */\n  static fromByteArray(bytes: Array<number>): Address4 {\n    if (bytes.length !== 4) {\n      throw new AddressError('IPv4 addresses require exactly 4 bytes');\n    }\n\n    // Validate that all bytes are within valid range (0-255)\n    for (let i = 0; i < bytes.length; i++) {\n      if (!Number.isInteger(bytes[i]) || bytes[i] < 0 || bytes[i] > 255) {\n        throw new AddressError('All bytes must be integers between 0 and 255');\n      }\n    }\n\n    return this.fromUnsignedByteArray(bytes);\n  }\n\n  /**\n   * Convert an unsigned byte array to an Address4 object\n   * @param {Array<number>} bytes - an array of 4 unsigned bytes (0-255)\n   * @returns {Address4}\n   */\n  static fromUnsignedByteArray(bytes: Array<number>): Address4 {\n    if (bytes.length !== 4) {\n      throw new AddressError('IPv4 addresses require exactly 4 bytes');\n    }\n\n    const address = bytes.join('.');\n    return new Address4(address);\n  }\n\n  /**\n   * Returns the first n bits of the address, defaulting to the\n   * subnet mask\n   * @returns {String}\n   */\n  mask(mask?: number): string {\n    if (mask === undefined) {\n      mask = this.subnetMask;\n    }\n\n    return this.getBitsBase2(0, mask);\n  }\n\n  /**\n   * Returns the bits in the given range as a base-2 string\n   * @returns {string}\n   */\n  getBitsBase2(start: number, end: number): string {\n    return this.binaryZeroPad().slice(start, end);\n  }\n\n  /**\n   * Return the reversed ip6.arpa form of the address\n   * @param {Object} options\n   * @param {boolean} options.omitSuffix - omit the \"in-addr.arpa\" suffix\n   * @returns {String}\n   */\n  reverseForm(options?: common.ReverseFormOptions): string {\n    if (!options) {\n      options = {};\n    }\n\n    const reversed = this.correctForm().split('.').reverse().join('.');\n\n    if (options.omitSuffix) {\n      return reversed;\n    }\n\n    return `${reversed}.in-addr.arpa.`;\n  }\n\n  /**\n   * Returns true if the given address is in the subnet of the current address\n   * @returns {boolean}\n   */\n  isInSubnet = common.isInSubnet;\n\n  /**\n   * Returns true if the given address is a multicast address\n   * @returns {boolean}\n   */\n  isMulticast(): boolean {\n    return this.isInSubnet(MULTICAST_V4);\n  }\n\n  /**\n   * Returns true if the address is in one of the [RFC 1918](https://datatracker.ietf.org/doc/html/rfc1918) private address ranges (`10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`).\n   * @returns {boolean}\n   */\n  isPrivate(): boolean {\n    return PRIVATE_V4.some((subnet) => this.isInSubnet(subnet));\n  }\n\n  /**\n   * Returns true if the address is in the loopback range `127.0.0.0/8` ([RFC 1122](https://datatracker.ietf.org/doc/html/rfc1122)).\n   * @returns {boolean}\n   */\n  isLoopback(): boolean {\n    return this.isInSubnet(LOOPBACK_V4);\n  }\n\n  /**\n   * Returns true if the address is in the link-local range `169.254.0.0/16` ([RFC 3927](https://datatracker.ietf.org/doc/html/rfc3927)).\n   * @returns {boolean}\n   */\n  isLinkLocal(): boolean {\n    return this.isInSubnet(LINK_LOCAL_V4);\n  }\n\n  /**\n   * Returns true if the address is the unspecified address `0.0.0.0`.\n   * @returns {boolean}\n   */\n  isUnspecified(): boolean {\n    return this.isInSubnet(UNSPECIFIED_V4);\n  }\n\n  /**\n   * Returns true if the address is the limited broadcast address `255.255.255.255` ([RFC 919](https://datatracker.ietf.org/doc/html/rfc919)).\n   * @returns {boolean}\n   */\n  isBroadcast(): boolean {\n    return this.isInSubnet(BROADCAST_V4);\n  }\n\n  /**\n   * Returns true if the address is in the carrier-grade NAT range `100.64.0.0/10` ([RFC 6598](https://datatracker.ietf.org/doc/html/rfc6598)).\n   * @returns {boolean}\n   */\n  isCGNAT(): boolean {\n    return this.isInSubnet(CGNAT_V4);\n  }\n\n  /**\n   * Returns a zero-padded base-2 string representation of the address\n   * @returns {string}\n   */\n  binaryZeroPad(): string {\n    if (this._binaryZeroPad === undefined) {\n      this._binaryZeroPad = this.bigInt().toString(2).padStart(constants.BITS, '0');\n    }\n    return this._binaryZeroPad;\n  }\n\n  /**\n   * Groups an IPv4 address for inclusion at the end of an IPv6 address\n   * @returns {String}\n   */\n  groupForV6(): string {\n    const segments = this.parsedAddress;\n\n    return this.address.replace(\n      constants.RE_ADDRESS,\n      `<span class=\"hover-group group-v4 group-6\">${segments\n        .slice(0, 2)\n        .join('.')}</span>.<span class=\"hover-group group-v4 group-7\">${segments\n        .slice(2, 4)\n        .join('.')}</span>`,\n    );\n  }\n}\n\nconst MULTICAST_V4 = new Address4('224.0.0.0/4');\nconst PRIVATE_V4 = [\n  new Address4('10.0.0.0/8'),\n  new Address4('172.16.0.0/12'),\n  new Address4('192.168.0.0/16'),\n];\nconst LOOPBACK_V4 = new Address4('127.0.0.0/8');\nconst LINK_LOCAL_V4 = new Address4('169.254.0.0/16');\nconst UNSPECIFIED_V4 = new Address4('0.0.0.0/32');\nconst BROADCAST_V4 = new Address4('255.255.255.255/32');\nconst CGNAT_V4 = new Address4('100.64.0.0/10');\n", "export const BITS = 128;\nexport const GROUPS = 8;\n\n/**\n * Represents IPv6 address scopes\n * @memberof Address6\n * @static\n */\nexport const SCOPES: { [key: number]: string | undefined } = {\n  0: 'Reserved',\n  1: 'Interface local',\n  2: 'Link local',\n  4: 'Admin local',\n  5: 'Site local',\n  8: 'Organization local',\n  14: 'Global',\n  15: 'Reserved',\n} as const;\n\n/**\n * Represents IPv6 address types\n * @memberof Address6\n * @static\n */\nexport const TYPES: { [key: string]: string | undefined } = {\n  'ff01::1/128': 'Multicast (All nodes on this interface)',\n  'ff01::2/128': 'Multicast (All routers on this interface)',\n  'ff02::1/128': 'Multicast (All nodes on this link)',\n  'ff02::2/128': 'Multicast (All routers on this link)',\n  'ff05::2/128': 'Multicast (All routers in this site)',\n  'ff02::5/128': 'Multicast (OSPFv3 AllSPF routers)',\n  'ff02::6/128': 'Multicast (OSPFv3 AllDR routers)',\n  'ff02::9/128': 'Multicast (RIP routers)',\n  'ff02::a/128': 'Multicast (EIGRP routers)',\n  'ff02::d/128': 'Multicast (PIM routers)',\n  'ff02::16/128': 'Multicast (MLDv2 reports)',\n  'ff01::fb/128': 'Multicast (mDNSv6)',\n  'ff02::fb/128': 'Multicast (mDNSv6)',\n  'ff05::fb/128': 'Multicast (mDNSv6)',\n  'ff02::1:2/128': 'Multicast (All DHCP servers and relay agents on this link)',\n  'ff05::1:2/128': 'Multicast (All DHCP servers and relay agents in this site)',\n  'ff02::1:3/128': 'Multicast (All DHCP servers on this link)',\n  'ff05::1:3/128': 'Multicast (All DHCP servers in this site)',\n  '::/128': 'Unspecified',\n  '::1/128': 'Loopback',\n  'ff00::/8': 'Multicast',\n  'fe80::/10': 'Link-local unicast',\n  'fc00::/7': 'Unique local',\n  '2002::/16': '6to4',\n  '2001:db8::/32': 'Documentation',\n  '64:ff9b::/96': 'NAT64 (well-known)',\n  '64:ff9b:1::/48': 'NAT64 (local-use)',\n} as const;\n\n/**\n * A regular expression that matches bad characters in an IPv6 address\n * @memberof Address6\n * @static\n */\nexport const RE_BAD_CHARACTERS = /([^0-9a-f:/%])/gi;\n\n/**\n * A regular expression that matches an incorrect IPv6 address\n * @memberof Address6\n * @static\n */\nexport const RE_BAD_ADDRESS = /([0-9a-f]{5,}|:{3,}|[^:]:$|^:[^:]|\\/$)/gi;\n\n/**\n * A regular expression that matches an IPv6 subnet\n * @memberof Address6\n * @static\n */\nexport const RE_SUBNET_STRING = /\\/\\d{1,3}(?=%|$)/;\n\n/**\n * A regular expression that matches an IPv6 zone\n * @memberof Address6\n * @static\n */\nexport const RE_ZONE_STRING = /%.*$/;\n\nexport const RE_URL = /^\\[{0,1}([0-9a-f:]+)\\]{0,1}/;\nexport const RE_URL_WITH_PORT = /\\[([0-9a-f:]+)\\]:([0-9]{1,5})/;\n", "export function escapeHtml(s: string): string {\n  return s\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#39;');\n}\n\n/**\n * @returns {String} the string with all zeroes contained in a <span>\n */\nexport function spanAllZeroes(s: string): string {\n  return escapeHtml(s).replace(/(0+)/g, '<span class=\"zero\">$1</span>');\n}\n\n/**\n * @returns {String} the string with each character contained in a <span>\n */\nexport function spanAll(s: string, offset: number = 0): string {\n  const letters = s.split('');\n\n  return letters\n    .map(\n      (n, i) =>\n        `<span class=\"digit value-${escapeHtml(n)} position-${i + offset}\">${spanAllZeroes(n)}</span>`,\n    )\n    .join('');\n}\n\nfunction spanLeadingZeroesSimple(group: string): string {\n  return escapeHtml(group).replace(/^(0+)/, '<span class=\"zero\">$1</span>');\n}\n\n/**\n * @returns {String} the string with leading zeroes contained in a <span>\n */\nexport function spanLeadingZeroes(address: string): string {\n  const groups = address.split(':');\n\n  return groups.map((g) => spanLeadingZeroesSimple(g)).join(':');\n}\n\n/**\n * Groups an address\n * @returns {String} a grouped address\n */\nexport function simpleGroup(addressString: string, offset: number = 0): string[] {\n  const groups = addressString.split(':');\n\n  return groups.map((g, i) => {\n    if (/group-v4/.test(g)) {\n      return g;\n    }\n\n    return `<span class=\"hover-group group-${i + offset}\">${spanLeadingZeroesSimple(g)}</span>`;\n  });\n}\n", "import * as v6 from './constants';\n\nexport function groupPossibilities(possibilities: string[]): string {\n  return `(${possibilities.join('|')})`;\n}\n\nexport function padGroup(group: string): string {\n  if (group.length < 4) {\n    return `0{0,${4 - group.length}}${group}`;\n  }\n\n  return group;\n}\n\nexport const ADDRESS_BOUNDARY = '[^A-Fa-f0-9:]';\n\nexport function simpleRegularExpression(groups: string[]) {\n  const zeroIndexes: number[] = [];\n\n  groups.forEach((group, i) => {\n    const groupInteger = parseInt(group, 16);\n\n    if (groupInteger === 0) {\n      zeroIndexes.push(i);\n    }\n  });\n\n  // You can technically elide a single 0, this creates the regular expressions\n  // to match that eventuality\n  const possibilities = zeroIndexes.map((zeroIndex) =>\n    groups\n      .map((group, i) => {\n        if (i === zeroIndex) {\n          const elision = i === 0 || i === v6.GROUPS - 1 ? ':' : '';\n\n          return groupPossibilities([padGroup(group), elision]);\n        }\n\n        return padGroup(group);\n      })\n      .join(':'),\n  );\n\n  // The simplest case\n  possibilities.push(groups.map(padGroup).join(':'));\n\n  return groupPossibilities(possibilities);\n}\n\nexport function possibleElisions(\n  elidedGroups: number,\n  moreLeft?: boolean,\n  moreRight?: boolean,\n): string {\n  const left = moreLeft ? '' : ':';\n  const right = moreRight ? '' : ':';\n\n  const possibilities = [];\n\n  // 1. elision of everything (::)\n  if (!moreLeft && !moreRight) {\n    possibilities.push('::');\n  }\n\n  // 2. complete elision of the middle\n  if (moreLeft && moreRight) {\n    possibilities.push('');\n  }\n\n  if ((moreRight && !moreLeft) || (!moreRight && moreLeft)) {\n    // 3. complete elision of one side\n    possibilities.push(':');\n  }\n\n  // 4. elision from the left side\n  possibilities.push(`${left}(:0{1,4}){1,${elidedGroups - 1}}`);\n\n  // 5. elision from the right side\n  possibilities.push(`(0{1,4}:){1,${elidedGroups - 1}}${right}`);\n\n  // 6. no elision\n  possibilities.push(`(0{1,4}:){${elidedGroups - 1}}0{1,4}`);\n\n  // 7. elision (including sloppy elision) from the middle\n  for (let groups = 1; groups < elidedGroups - 1; groups++) {\n    for (let position = 1; position < elidedGroups - groups; position++) {\n      possibilities.push(\n        `(0{1,4}:){${position}}:(0{1,4}:){${elidedGroups - position - groups - 1}}0{1,4}`,\n      );\n    }\n  }\n\n  return groupPossibilities(possibilities);\n}\n", "/* eslint-disable prefer-destructuring */\n/* eslint-disable no-param-reassign */\n\nimport * as common from './common';\nimport * as constants4 from './v4/constants';\nimport * as constants6 from './v6/constants';\nimport * as helpers from './v6/helpers';\nimport { Address4 } from './ipv4';\nimport {\n  ADDRESS_BOUNDARY,\n  possibleElisions,\n  simpleRegularExpression,\n} from './v6/regular-expressions';\nimport { AddressError } from './address-error';\nimport { testBit } from './common';\n\nconst isCorrect6 = common.isCorrect(constants6.BITS);\n\nfunction assert(condition: any): asserts condition {\n  if (!condition) {\n    throw new Error('Assertion failed.');\n  }\n}\n\nfunction addCommas(number: string): string {\n  const r = /(\\d+)(\\d{3})/;\n\n  while (r.test(number)) {\n    number = number.replace(r, '$1,$2');\n  }\n\n  return number;\n}\n\nfunction spanLeadingZeroes4(n: string): string {\n  n = n.replace(/^(0{1,})([1-9]+)$/, '<span class=\"parse-error\">$1</span>$2');\n  n = n.replace(/^(0{1,})(0)$/, '<span class=\"parse-error\">$1</span>$2');\n\n  return n;\n}\n\n/*\n * A helper function to compact an array\n */\nfunction compact(address: string[], slice: number[]) {\n  const s1 = [];\n  const s2 = [];\n  let i;\n\n  for (i = 0; i < address.length; i++) {\n    if (i < slice[0]) {\n      s1.push(address[i]);\n    } else if (i > slice[1]) {\n      s2.push(address[i]);\n    }\n  }\n\n  return s1.concat(['compact']).concat(s2);\n}\n\nfunction paddedHex(octet: string): string {\n  return parseInt(octet, 16).toString(16).padStart(4, '0');\n}\n\nfunction unsignByte(b: number) {\n  // eslint-disable-next-line no-bitwise\n  return b & 0xff;\n}\n\ninterface SixToFourProperties {\n  prefix: string;\n  gateway: string;\n}\n\ninterface TeredoProperties {\n  prefix: string;\n  server4: string;\n  client4: string;\n  flags: string;\n  coneNat: boolean;\n  microsoft: {\n    reserved: boolean;\n    universalLocal: boolean;\n    groupIndividual: boolean;\n    nonce: string;\n  };\n  udpPort: string;\n}\n\n/**\n * Represents an IPv6 address\n * @param {string} address - An IPv6 address string\n * @param {number} [groups=8] - How many octets to parse\n * @example\n * var address = new Address6('2001::/32');\n */\nexport class Address6 {\n  address4?: Address4;\n  address: string;\n  addressMinusSuffix: string = '';\n  elidedGroups?: number;\n  elisionBegin?: number;\n  elisionEnd?: number;\n  groups: number;\n  parsedAddress4?: string;\n  parsedAddress: string[];\n  parsedSubnet: string = '';\n  subnet: string = '/128';\n  subnetMask: number = 128;\n  v4: boolean = false;\n  zone: string = '';\n  private _binaryZeroPad?: string;\n\n  constructor(address: string, optionalGroups?: number) {\n    if (optionalGroups === undefined) {\n      this.groups = constants6.GROUPS;\n    } else {\n      this.groups = optionalGroups;\n    }\n\n    this.address = address;\n\n    const subnet = constants6.RE_SUBNET_STRING.exec(address);\n\n    if (subnet) {\n      this.parsedSubnet = subnet[0].replace('/', '');\n      this.subnetMask = parseInt(this.parsedSubnet, 10);\n      this.subnet = `/${this.subnetMask}`;\n\n      if (\n        Number.isNaN(this.subnetMask) ||\n        this.subnetMask < 0 ||\n        this.subnetMask > constants6.BITS\n      ) {\n        throw new AddressError('Invalid subnet mask.');\n      }\n\n      address = address.replace(constants6.RE_SUBNET_STRING, '');\n    } else if (/\\//.test(address)) {\n      throw new AddressError('Invalid subnet mask.');\n    }\n\n    const zone = constants6.RE_ZONE_STRING.exec(address);\n\n    if (zone) {\n      this.zone = zone[0];\n\n      address = address.replace(constants6.RE_ZONE_STRING, '');\n    }\n\n    this.addressMinusSuffix = address;\n\n    this.parsedAddress = this.parse(this.addressMinusSuffix);\n  }\n\n  /**\n   * Returns true if the given string is a valid IPv6 address (with optional\n   * CIDR subnet and zone identifier), false otherwise. Host bits in the\n   * subnet portion are allowed (e.g. `2001:db8::1/32` is valid); for strict\n   * network-address validation compare `correctForm()` to\n   * `startAddress().correctForm()`, or use `networkForm()`.\n   */\n  static isValid(address: string): boolean {\n    try {\n      // eslint-disable-next-line no-new\n      new Address6(address);\n\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  /**\n   * Convert a BigInt to a v6 address object. The value must be in the\n   * range `[0, 2**128 - 1]`; otherwise `AddressError` is thrown.\n   * @param {bigint} bigInt - a BigInt to convert\n   * @returns {Address6}\n   * @example\n   * var bigInt = BigInt('1000000000000');\n   * var address = Address6.fromBigInt(bigInt);\n   * address.correctForm(); // '::e8:d4a5:1000'\n   */\n  static fromBigInt(bigInt: bigint): Address6 {\n    if (bigInt < 0n || bigInt > (1n << BigInt(constants6.BITS)) - 1n) {\n      throw new AddressError('IPv6 BigInt must be in the range 0 to 2**128 - 1');\n    }\n\n    const hex = bigInt.toString(16).padStart(32, '0');\n    const groups = [];\n\n    for (let i = 0; i < constants6.GROUPS; i++) {\n      groups.push(hex.slice(i * 4, (i + 1) * 4));\n    }\n\n    return new Address6(groups.join(':'));\n  }\n\n  /**\n   * Parse a URL (with optional bracketed host and port) into an address and\n   * port. Returns either `{ address, port }` on success or\n   * `{ error, address: null, port: null }` if the URL could not be parsed.\n   * Ports are returned as numbers (or `null` if absent or out of range).\n   * @example\n   * var addressAndPort = Address6.fromURL('http://[ffff::]:8080/foo/');\n   * addressAndPort.address.correctForm(); // 'ffff::'\n   * addressAndPort.port; // 8080\n   */\n  static fromURL(url: string) {\n    let host: string;\n    let port: string | number | null = null;\n    let result: string[] | null;\n\n    // If we have brackets parse them and find a port\n    if (url.indexOf('[') !== -1 && url.indexOf(']:') !== -1) {\n      result = constants6.RE_URL_WITH_PORT.exec(url);\n\n      if (result === null) {\n        return {\n          error: 'failed to parse address with port',\n          address: null,\n          port: null,\n        };\n      }\n\n      host = result[1];\n      port = result[2];\n      // If there's a URL extract the address\n    } else if (url.indexOf('/') !== -1) {\n      // Remove the protocol prefix\n      url = url.replace(/^[a-z0-9]+:\\/\\//, '');\n\n      // Parse the address\n      result = constants6.RE_URL.exec(url);\n\n      if (result === null) {\n        return {\n          error: 'failed to parse address from URL',\n          address: null,\n          port: null,\n        };\n      }\n\n      host = result[1];\n      // Otherwise just assign the URL to the host and let the library parse it\n    } else {\n      host = url;\n    }\n\n    // If there's a port convert it to an integer\n    if (port) {\n      port = parseInt(port, 10);\n\n      // squelch out of range ports\n      if (port < 0 || port > 65536) {\n        port = null;\n      }\n    } else {\n      // Standardize `undefined` to `null`\n      port = null;\n    }\n\n    return {\n      address: new Address6(host),\n      port,\n    };\n  }\n\n  /**\n   * Construct an `Address6` from an address and a hex subnet mask given as\n   * separate strings (e.g. as returned by Node's `os.networkInterfaces()`).\n   * Throws `AddressError` if the mask is non-contiguous (e.g.\n   * `ffff::ffff`).\n   * @example\n   * var address = Address6.fromAddressAndMask('fe80::1', 'ffff:ffff:ffff:ffff::');\n   * address.subnetMask; // 64\n   */\n  static fromAddressAndMask(address: string, mask: string): Address6 {\n    const bits = common.prefixLengthFromMask(new Address6(mask).bigInt(), constants6.BITS);\n    return new Address6(`${address}/${bits}`);\n  }\n\n  /**\n   * Construct an `Address6` from an address and a Cisco-style wildcard mask\n   * given as separate strings (e.g. `::ffff:ffff:ffff:ffff` for a `/64`).\n   * The wildcard mask is the bitwise inverse of the subnet mask. Throws\n   * `AddressError` if the mask is non-contiguous.\n   * @example\n   * var address = Address6.fromAddressAndWildcardMask('fe80::1', '::ffff:ffff:ffff:ffff');\n   * address.subnetMask; // 64\n   */\n  static fromAddressAndWildcardMask(address: string, wildcardMask: string): Address6 {\n    const wildcard = new Address6(wildcardMask).bigInt();\n    const allOnes = (BigInt(1) << BigInt(constants6.BITS)) - BigInt(1);\n    // eslint-disable-next-line no-bitwise\n    const mask = wildcard ^ allOnes;\n    const bits = common.prefixLengthFromMask(mask, constants6.BITS);\n    return new Address6(`${address}/${bits}`);\n  }\n\n  /**\n   * Construct an `Address6` from a wildcard pattern with trailing `*`\n   * groups. The number of trailing wildcards determines the prefix\n   * length: each `*` represents 16 bits. `::` is expanded to zero groups\n   * (not wildcards) before evaluating trailing wildcards.\n   *\n   * Only trailing whole-group wildcards are supported. Partial-group\n   * wildcards (e.g. `2001:db8::0*`) and interior wildcards (e.g.\n   * `*::1`) throw `AddressError`.\n   * @example\n   * Address6.fromWildcard('2001:db8:*:*:*:*:*:*').subnet;  // '/32'\n   * Address6.fromWildcard('2001:db8::*').subnet;           // '/112'\n   * Address6.fromWildcard('*:*:*:*:*:*:*:*').subnet;       // '/0'\n   */\n  static fromWildcard(input: string): Address6 {\n    if (input.includes('%') || input.includes('/')) {\n      throw new AddressError('Wildcard pattern must not include a zone or CIDR suffix');\n    }\n\n    const halves = input.split('::');\n\n    if (halves.length > 2) {\n      throw new AddressError(\"Wildcard pattern cannot contain more than one '::'\");\n    }\n\n    let groups: string[];\n\n    if (halves.length === 2) {\n      const left = halves[0] === '' ? [] : halves[0].split(':');\n      const right = halves[1] === '' ? [] : halves[1].split(':');\n      const remaining = constants6.GROUPS - left.length - right.length;\n\n      if (remaining < 1) {\n        throw new AddressError(\"Wildcard pattern with '::' has too many groups\");\n      }\n\n      groups = [...left, ...new Array(remaining).fill('0'), ...right];\n    } else {\n      groups = input.split(':');\n    }\n\n    if (groups.length !== constants6.GROUPS) {\n      throw new AddressError('Wildcard pattern must have 8 groups');\n    }\n\n    let firstWildcard = -1;\n\n    for (let i = 0; i < groups.length; i++) {\n      if (groups[i] === '*') {\n        if (firstWildcard === -1) {\n          firstWildcard = i;\n        }\n      } else if (firstWildcard !== -1) {\n        throw new AddressError(\n          'Wildcard `*` must only appear in trailing groups (e.g. `2001:db8:*:*:*:*:*:*`)',\n        );\n      }\n    }\n\n    const trailing = firstWildcard === -1 ? 0 : groups.length - firstWildcard;\n    const replaced = groups.map((g) => (g === '*' ? '0' : g));\n    const subnetBits = constants6.BITS - trailing * 16;\n\n    return new Address6(`${replaced.join(':')}/${subnetBits}`);\n  }\n\n  /**\n   * Create an IPv6-mapped address given an IPv4 address\n   * @param {string} address - An IPv4 address string\n   * @returns {Address6}\n   * @example\n   * var address = Address6.fromAddress4('192.168.0.1');\n   * address.correctForm(); // '::ffff:c0a8:1'\n   * address.to4in6(); // '::ffff:192.168.0.1'\n   */\n  static fromAddress4(address: string): Address6 {\n    const address4 = new Address4(address);\n\n    const mask6 = constants6.BITS - (constants4.BITS - address4.subnetMask);\n\n    return new Address6(`::ffff:${address4.correctForm()}/${mask6}`);\n  }\n\n  /**\n   * Return an address from ip6.arpa form\n   * @param {string} arpaFormAddress - an 'ip6.arpa' form address\n   * @returns {Adress6}\n   * @example\n   * var address = Address6.fromArpa(e.f.f.f.3.c.2.6.f.f.f.e.6.6.8.e.1.0.6.7.9.4.e.c.0.0.0.0.1.0.0.2.ip6.arpa.)\n   * address.correctForm(); // '2001:0:ce49:7601:e866:efff:62c3:fffe'\n   */\n  static fromArpa(arpaFormAddress: string): Address6 {\n    // remove ending \".ip6.arpa.\" or just \".\"\n    let address = arpaFormAddress.replace(/(\\.ip6\\.arpa)?\\.$/, '');\n    const semicolonAmount = 7;\n\n    // correct ip6.arpa form with ending removed will be 63 characters\n    if (address.length !== 63) {\n      throw new AddressError(\"Invalid 'ip6.arpa' form.\");\n    }\n\n    const parts = address.split('.').reverse();\n\n    for (let i = semicolonAmount; i > 0; i--) {\n      const insertIndex = i * 4;\n      parts.splice(insertIndex, 0, ':');\n    }\n\n    address = parts.join('');\n\n    return new Address6(address);\n  }\n\n  /**\n   * Return the Microsoft UNC transcription of the address\n   * @returns {String} the Microsoft UNC transcription of the address\n   */\n  microsoftTranscription(): string {\n    return `${this.correctForm().replace(/:/g, '-')}.ipv6-literal.net`;\n  }\n\n  /**\n   * Return the first n bits of the address, defaulting to the subnet mask\n   * @param {number} [mask=subnet] - the number of bits to mask\n   * @returns {String} the first n bits of the address as a string\n   */\n  mask(mask: number = this.subnetMask): string {\n    return this.getBitsBase2(0, mask);\n  }\n\n  /**\n   * Return the number of possible subnets of a given size in the address\n   * @param {number} [subnetSize=128] - the subnet size\n   * @returns {String}\n   */\n  // TODO: probably useful to have a numeric version of this too\n  possibleSubnets(subnetSize: number = 128): string {\n    const availableBits = constants6.BITS - this.subnetMask;\n    const subnetBits = Math.abs(subnetSize - constants6.BITS);\n    const subnetPowers = availableBits - subnetBits;\n\n    if (subnetPowers < 0) {\n      return '0';\n    }\n\n    return addCommas((BigInt('2') ** BigInt(subnetPowers)).toString(10));\n  }\n\n  /**\n   * Helper function getting start address.\n   * @returns {bigint}\n   */\n  _startAddress(): bigint {\n    return BigInt(`0b${this.mask() + '0'.repeat(constants6.BITS - this.subnetMask)}`);\n  }\n\n  /**\n   * The first address in the range given by this address' subnet\n   * Often referred to as the Network Address.\n   * @returns {Address6}\n   */\n  startAddress(): Address6 {\n    return Address6.fromBigInt(this._startAddress());\n  }\n\n  /**\n   * The first host address in the range given by this address's subnet ie\n   * the first address after the Network Address\n   * @returns {Address6}\n   */\n  startAddressExclusive(): Address6 {\n    const adjust = BigInt('1');\n    return Address6.fromBigInt(this._startAddress() + adjust);\n  }\n\n  /**\n   * Helper function getting end address.\n   * @returns {bigint}\n   */\n  _endAddress(): bigint {\n    return BigInt(`0b${this.mask() + '1'.repeat(constants6.BITS - this.subnetMask)}`);\n  }\n\n  /**\n   * The last address in the range given by this address' subnet\n   * Often referred to as the Broadcast\n   * @returns {Address6}\n   */\n  endAddress(): Address6 {\n    return Address6.fromBigInt(this._endAddress());\n  }\n\n  /**\n   * The last host address in the range given by this address's subnet ie\n   * the last address prior to the Broadcast Address\n   * @returns {Address6}\n   */\n  endAddressExclusive(): Address6 {\n    const adjust = BigInt('1');\n    return Address6.fromBigInt(this._endAddress() - adjust);\n  }\n\n  /**\n   * The hex form of the subnet mask, e.g. `ffff:ffff:ffff:ffff::` for a\n   * `/64`. Returns an `Address6`; call `.correctForm()` for the string.\n   * @returns {Address6}\n   */\n  subnetMaskAddress(): Address6 {\n    return Address6.fromBigInt(\n      BigInt(`0b${'1'.repeat(this.subnetMask)}${'0'.repeat(constants6.BITS - this.subnetMask)}`),\n    );\n  }\n\n  /**\n   * The Cisco-style wildcard mask, e.g. `::ffff:ffff:ffff:ffff` for a\n   * `/64`. This is the bitwise inverse of `subnetMaskAddress()`. Returns\n   * an `Address6`; call `.correctForm()` for the string.\n   * @returns {Address6}\n   */\n  wildcardMask(): Address6 {\n    return Address6.fromBigInt(\n      BigInt(`0b${'0'.repeat(this.subnetMask)}${'1'.repeat(constants6.BITS - this.subnetMask)}`),\n    );\n  }\n\n  /**\n   * The network address in CIDR string form, e.g. `2001:db8::/32` for\n   * `2001:db8::1/32`. For an address with no explicit subnet the prefix\n   * is `/128`, e.g. `networkForm()` on `2001:db8::1` returns\n   * `2001:db8::1/128`.\n   * @returns {string}\n   */\n  networkForm(): string {\n    return `${this.startAddress().correctForm()}/${this.subnetMask}`;\n  }\n\n  /**\n   * Return the scope of the address. The 4-bit scope field\n   * ([RFC 4291 §2.7](https://datatracker.ietf.org/doc/html/rfc4291#section-2.7))\n   * is only defined for multicast addresses; for unicast addresses the scope\n   * is derived from the address type per\n   * [RFC 4007 §6](https://datatracker.ietf.org/doc/html/rfc4007#section-6).\n   * @returns {String}\n   */\n  getScope(): string {\n    const type = this.getType();\n\n    if (type === 'Multicast' || type.startsWith('Multicast ')) {\n      const scope = constants6.SCOPES[parseInt(this.getBits(12, 16).toString(10), 10)];\n      return scope || 'Unknown';\n    }\n\n    // RFC 4291 §2.5.3: the loopback address is treated as having Link-Local\n    // scope. (Multicast scope 1, \"Interface-Local\", is a different concept\n    // used only for loopback transmission of multicast.)\n    if (type === 'Link-local unicast' || type === 'Loopback') {\n      return 'Link local';\n    }\n\n    // RFC 4007 §6: the unspecified address has no scope.\n    if (type === 'Unspecified') {\n      return 'Unknown';\n    }\n\n    return 'Global';\n  }\n\n  /**\n   * Return the type of the address\n   * @returns {String}\n   */\n  getType(): string {\n    for (let i = 0; i < TYPE_SUBNETS.length; i++) {\n      const entry = TYPE_SUBNETS[i];\n      if (this.isInSubnet(entry[0])) {\n        return entry[1];\n      }\n    }\n\n    return 'Global unicast';\n  }\n\n  /**\n   * Return the bits in the given range as a BigInt\n   * @returns {bigint}\n   */\n  getBits(start: number, end: number): bigint {\n    return BigInt(`0b${this.getBitsBase2(start, end)}`);\n  }\n\n  /**\n   * Return the bits in the given range as a base-2 string\n   * @returns {String}\n   */\n  getBitsBase2(start: number, end: number): string {\n    return this.binaryZeroPad().slice(start, end);\n  }\n\n  /**\n   * Return the bits in the given range as a base-16 string\n   * @returns {String}\n   */\n  getBitsBase16(start: number, end: number): string {\n    const length = end - start;\n\n    if (length % 4 !== 0) {\n      throw new Error('Length of bits to retrieve must be divisible by four');\n    }\n\n    return this.getBits(start, end)\n      .toString(16)\n      .padStart(length / 4, '0');\n  }\n\n  /**\n   * Return the bits that are set past the subnet mask length\n   * @returns {String}\n   */\n  getBitsPastSubnet(): string {\n    return this.getBitsBase2(this.subnetMask, constants6.BITS);\n  }\n\n  /**\n   * Return the reversed ip6.arpa form of the address\n   * @param {Object} options\n   * @param {boolean} options.omitSuffix - omit the \"ip6.arpa\" suffix\n   * @returns {String}\n   */\n  reverseForm(options?: common.ReverseFormOptions): string {\n    if (!options) {\n      options = {};\n    }\n\n    const characters = Math.floor(this.subnetMask / 4);\n\n    const reversed = this.canonicalForm()\n      .replace(/:/g, '')\n      .split('')\n      .slice(0, characters)\n      .reverse()\n      .join('.');\n\n    if (characters > 0) {\n      if (options.omitSuffix) {\n        return reversed;\n      }\n\n      return `${reversed}.ip6.arpa.`;\n    }\n\n    if (options.omitSuffix) {\n      return '';\n    }\n\n    return 'ip6.arpa.';\n  }\n\n  /**\n   * Returns the address in correct form, per\n   * [RFC 5952](https://datatracker.ietf.org/doc/html/rfc5952): leading zeros\n   * stripped, the longest run of zero groups collapsed to `::`, and hex digits\n   * lowercased (e.g. `2001:db8::1`). This is the recommended form for display.\n   */\n  correctForm(): string {\n    let i;\n    let groups = [];\n\n    let zeroCounter = 0;\n    const zeroes = [];\n\n    for (i = 0; i < this.parsedAddress.length; i++) {\n      const value = parseInt(this.parsedAddress[i], 16);\n\n      if (value === 0) {\n        zeroCounter++;\n      }\n\n      if (value !== 0 && zeroCounter > 0) {\n        if (zeroCounter > 1) {\n          zeroes.push([i - zeroCounter, i - 1]);\n        }\n\n        zeroCounter = 0;\n      }\n    }\n\n    // Do we end with a string of zeroes?\n    if (zeroCounter > 1) {\n      zeroes.push([this.parsedAddress.length - zeroCounter, this.parsedAddress.length - 1]);\n    }\n\n    const zeroLengths = zeroes.map((n) => n[1] - n[0] + 1);\n\n    if (zeroes.length > 0) {\n      const index = zeroLengths.indexOf(Math.max(...zeroLengths) as number);\n\n      groups = compact(this.parsedAddress, zeroes[index]);\n    } else {\n      groups = this.parsedAddress;\n    }\n\n    for (i = 0; i < groups.length; i++) {\n      if (groups[i] !== 'compact') {\n        groups[i] = parseInt(groups[i], 16).toString(16);\n      }\n    }\n\n    let correct = groups.join(':');\n\n    correct = correct.replace(/^compact$/, '::');\n    correct = correct.replace(/(^compact)|(compact$)/, ':');\n    correct = correct.replace(/compact/, '');\n\n    return correct;\n  }\n\n  /**\n   * Return a zero-padded base-2 string representation of the address\n   * @returns {String}\n   * @example\n   * var address = new Address6('2001:4860:4001:803::1011');\n   * address.binaryZeroPad();\n   * // '0010000000000001010010000110000001000000000000010000100000000011\n   * //  0000000000000000000000000000000000000000000000000001000000010001'\n   */\n  binaryZeroPad(): string {\n    if (this._binaryZeroPad === undefined) {\n      this._binaryZeroPad = this.bigInt().toString(2).padStart(constants6.BITS, '0');\n    }\n    return this._binaryZeroPad;\n  }\n\n  /**\n   * Parses a v4-in-v6 string (e.g. `::ffff:192.168.0.1`) by extracting the\n   * trailing IPv4 address into `this.address4` / `this.parsedAddress4` and\n   * returning the address with the v4 portion converted to two v6 groups.\n   * Used internally by `parse()`.\n   */\n  // TODO: Improve the semantics of this helper function\n  parse4in6(address: string): string {\n    if (address.indexOf('.') === -1) {\n      return address;\n    }\n\n    const groups = address.split(':');\n    const lastGroup = groups.slice(-1)[0];\n\n    const address4 = lastGroup.match(constants4.RE_ADDRESS);\n\n    if (address4) {\n      this.parsedAddress4 = address4[0];\n      this.address4 = new Address4(this.parsedAddress4);\n\n      for (let i = 0; i < this.address4.groups; i++) {\n        if (/^0[0-9]+/.test(this.address4.parsedAddress[i])) {\n          // The prefix groups haven't been through the bad-character check\n          // yet, so escape them before including in the error HTML.\n          const highlighted = this.address4.parsedAddress.map(spanLeadingZeroes4).join('.');\n          const prefix = groups.slice(0, -1).map(helpers.escapeHtml).join(':');\n          const separator = groups.length > 1 ? ':' : '';\n\n          throw new AddressError(\n            \"IPv4 addresses can't have leading zeroes.\",\n            `${prefix}${separator}${highlighted}`,\n          );\n        }\n      }\n\n      this.v4 = true;\n\n      groups[groups.length - 1] = this.address4.toGroup6();\n\n      address = groups.join(':');\n    }\n\n    return address;\n  }\n\n  /**\n   * Parses an IPv6 address string into its 8 hexadecimal groups (expanding\n   * any `::` elision and any trailing v4-in-v6 portion) and stores the result\n   * on `this.parsedAddress`. Called automatically by the constructor; you\n   * typically don't need to call it directly. Throws `AddressError` if the\n   * input is malformed.\n   */\n  // TODO: Make private?\n  parse(address: string): string[] {\n    address = this.parse4in6(address);\n\n    const badCharacters = address.match(constants6.RE_BAD_CHARACTERS);\n\n    if (badCharacters) {\n      throw new AddressError(\n        `Bad character${\n          badCharacters.length > 1 ? 's' : ''\n        } detected in address: ${badCharacters.join('')}`,\n        address.replace(constants6.RE_BAD_CHARACTERS, '<span class=\"parse-error\">$1</span>'),\n      );\n    }\n\n    const badAddress = address.match(constants6.RE_BAD_ADDRESS);\n\n    if (badAddress) {\n      throw new AddressError(\n        `Address failed regex: ${badAddress.join('')}`,\n        address.replace(constants6.RE_BAD_ADDRESS, '<span class=\"parse-error\">$1</span>'),\n      );\n    }\n\n    let groups: string[] = [];\n\n    const halves = address.split('::');\n\n    if (halves.length === 2) {\n      let first = halves[0].split(':');\n      let last = halves[1].split(':');\n\n      if (first.length === 1 && first[0] === '') {\n        first = [];\n      }\n\n      if (last.length === 1 && last[0] === '') {\n        last = [];\n      }\n\n      const remaining = this.groups - (first.length + last.length);\n\n      if (!remaining) {\n        throw new AddressError('Error parsing groups');\n      }\n\n      this.elidedGroups = remaining;\n\n      this.elisionBegin = first.length;\n      this.elisionEnd = first.length + this.elidedGroups;\n\n      groups = groups.concat(first);\n\n      for (let i = 0; i < remaining; i++) {\n        groups.push('0');\n      }\n\n      groups = groups.concat(last);\n    } else if (halves.length === 1) {\n      groups = address.split(':');\n\n      this.elidedGroups = 0;\n    } else {\n      throw new AddressError('Too many :: groups found');\n    }\n\n    groups = groups.map((group: string) => parseInt(group, 16).toString(16));\n\n    if (groups.length !== this.groups) {\n      throw new AddressError('Incorrect number of groups found');\n    }\n\n    return groups;\n  }\n\n  /**\n   * Returns the canonical (fully expanded) form of the address: all 8 groups,\n   * each padded to 4 hex digits, with no `::` collapsing\n   * (e.g. `2001:0db8:0000:0000:0000:0000:0000:0001`). Useful for sorting and\n   * byte-exact comparison.\n   */\n  canonicalForm(): string {\n    return this.parsedAddress.map(paddedHex).join(':');\n  }\n\n  /**\n   * Return the decimal form of the address\n   * @returns {String}\n   */\n  decimal(): string {\n    return this.parsedAddress.map((n) => parseInt(n, 16).toString(10).padStart(5, '0')).join(':');\n  }\n\n  /**\n   * Return the address as a BigInt\n   * @returns {bigint}\n   */\n  bigInt(): bigint {\n    return BigInt(`0x${this.parsedAddress.map(paddedHex).join('')}`);\n  }\n\n  /**\n   * Return the last two groups of this address as an IPv4 address string\n   * @returns {Address4}\n   * @example\n   * var address = new Address6('2001:4860:4001::1825:bf11');\n   * address.to4().correctForm(); // '24.37.191.17'\n   */\n  to4(): Address4 {\n    const binary = this.binaryZeroPad().split('');\n\n    return Address4.fromHex(\n      BigInt(`0b${binary.slice(96, 128).join('')}`).toString(16).padStart(8, '0'),\n    );\n  }\n\n  /**\n   * Return the v4-in-v6 form of the address\n   * @returns {String}\n   */\n  to4in6(): string {\n    const address4 = this.to4();\n    const address6 = new Address6(this.parsedAddress.slice(0, 6).join(':'), 6);\n\n    const correct = address6.correctForm();\n\n    let infix = '';\n\n    if (!/:$/.test(correct)) {\n      infix = ':';\n    }\n\n    return correct + infix + address4.address;\n  }\n\n  /**\n   * Decodes the Teredo tunneling fields embedded in this address. Returns the\n   * Teredo prefix, server IPv4, client IPv4, raw flag bits, cone-NAT flag,\n   * UDP port, and Microsoft-format flag breakdown (reserved, universal/local,\n   * group/individual, nonce). Only meaningful for addresses in `2001::/32`.\n   */\n  inspectTeredo(): TeredoProperties {\n    /*\n    - Bits 0 to 31 are set to the Teredo prefix (normally 2001:0000::/32).\n    - Bits 32 to 63 embed the primary IPv4 address of the Teredo server that\n      is used.\n    - Bits 64 to 79 can be used to define some flags. Currently only the\n      higher order bit is used; it is set to 1 if the Teredo client is\n      located behind a cone NAT, 0 otherwise. For Microsoft's Windows Vista\n      and Windows Server 2008 implementations, more bits are used. In those\n      implementations, the format for these 16 bits is \"CRAAAAUG AAAAAAAA\",\n      where \"C\" remains the \"Cone\" flag. The \"R\" bit is reserved for future\n      use. The \"U\" bit is for the Universal/Local flag (set to 0). The \"G\" bit\n      is Individual/Group flag (set to 0). The A bits are set to a 12-bit\n      randomly generated number chosen by the Teredo client to introduce\n      additional protection for the Teredo node against IPv6-based scanning\n      attacks.\n    - Bits 80 to 95 contains the obfuscated UDP port number. This is the\n      port number that is mapped by the NAT to the Teredo client with all\n      bits inverted.\n    - Bits 96 to 127 contains the obfuscated IPv4 address. This is the\n      public IPv4 address of the NAT with all bits inverted.\n    */\n    const prefix = this.getBitsBase16(0, 32);\n\n    const bitsForUdpPort: bigint = this.getBits(80, 96);\n    // eslint-disable-next-line no-bitwise\n    const udpPort = (bitsForUdpPort ^ BigInt('0xffff')).toString();\n\n    const server4 = Address4.fromHex(this.getBitsBase16(32, 64));\n\n    const bitsForClient4 = this.getBits(96, 128);\n    // eslint-disable-next-line no-bitwise\n    const client4 = Address4.fromHex(\n      (bitsForClient4 ^ BigInt('0xffffffff')).toString(16).padStart(8, '0'),\n    );\n\n    const flagsBase2 = this.getBitsBase2(64, 80);\n\n    const coneNat = testBit(flagsBase2, 15);\n    const reserved = testBit(flagsBase2, 14);\n    const groupIndividual = testBit(flagsBase2, 8);\n    const universalLocal = testBit(flagsBase2, 9);\n    const nonce = BigInt(`0b${flagsBase2.slice(2, 6) + flagsBase2.slice(8, 16)}`).toString(10);\n\n    return {\n      prefix: `${prefix.slice(0, 4)}:${prefix.slice(4, 8)}`,\n      server4: server4.address,\n      client4: client4.address,\n      flags: flagsBase2,\n      coneNat,\n      microsoft: {\n        reserved,\n        universalLocal,\n        groupIndividual,\n        nonce,\n      },\n      udpPort,\n    };\n  }\n\n  /**\n   * Decodes the 6to4 tunneling fields embedded in this address. Returns the\n   * 6to4 prefix and the embedded IPv4 gateway address. Only meaningful for\n   * addresses in `2002::/16`.\n   */\n  inspect6to4(): SixToFourProperties {\n    /*\n    - Bits 0 to 15 are set to the 6to4 prefix (2002::/16).\n    - Bits 16 to 48 embed the IPv4 address of the 6to4 gateway that is used.\n    */\n\n    const prefix = this.getBitsBase16(0, 16);\n\n    const gateway = Address4.fromHex(this.getBitsBase16(16, 48));\n\n    return {\n      prefix: prefix.slice(0, 4),\n      gateway: gateway.address,\n    };\n  }\n\n  /**\n   * Return a v6 6to4 address from a v6 v4inv6 address\n   * @returns {Address6}\n   */\n  to6to4(): Address6 | null {\n    if (!this.is4()) {\n      return null;\n    }\n\n    const addr6to4 = [\n      '2002',\n      this.getBitsBase16(96, 112),\n      this.getBitsBase16(112, 128),\n      '',\n      '/16',\n    ].join(':');\n\n    return new Address6(addr6to4);\n  }\n\n  /**\n   * Embed an IPv4 address into a NAT64 IPv6 address using the encoding\n   * defined by [RFC 6052](https://datatracker.ietf.org/doc/html/rfc6052).\n   * The default prefix is the well-known prefix `64:ff9b::/96`. The prefix\n   * length must be one of 32, 40, 48, 56, 64, or 96; for prefixes shorter\n   * than /64 the IPv4 octets are split around the reserved bits 64–71.\n   * @example\n   * Address6.fromAddress4Nat64('192.0.2.33').correctForm(); // '64:ff9b::c000:221'\n   * Address6.fromAddress4Nat64('192.0.2.33', '2001:db8::/32').correctForm(); // '2001:db8:c000:221::'\n   */\n  static fromAddress4Nat64(address: string, prefix: string = '64:ff9b::/96'): Address6 {\n    const v4 = new Address4(address);\n    const prefix6 = new Address6(prefix);\n    const pl = prefix6.subnetMask;\n\n    if (pl !== 32 && pl !== 40 && pl !== 48 && pl !== 56 && pl !== 64 && pl !== 96) {\n      throw new AddressError('NAT64 prefix length must be 32, 40, 48, 56, 64, or 96');\n    }\n\n    const prefixBits = prefix6.binaryZeroPad();\n    const v4Bits = v4.binaryZeroPad();\n\n    let bits: string;\n    if (pl === 96) {\n      bits = prefixBits.slice(0, 96) + v4Bits;\n    } else {\n      const beforeU = 64 - pl;\n      bits =\n        prefixBits.slice(0, pl) +\n        v4Bits.slice(0, beforeU) +\n        '00000000' +\n        v4Bits.slice(beforeU) +\n        '0'.repeat(128 - 72 - (32 - beforeU));\n    }\n\n    const hex = BigInt(`0b${bits}`).toString(16).padStart(32, '0');\n    const groups: string[] = [];\n    for (let i = 0; i < 8; i++) {\n      groups.push(hex.slice(i * 4, (i + 1) * 4));\n    }\n    return new Address6(groups.join(':'));\n  }\n\n  /**\n   * Extract the embedded IPv4 address from a NAT64 IPv6 address using the\n   * encoding defined by [RFC 6052](https://datatracker.ietf.org/doc/html/rfc6052).\n   * The default prefix is the well-known prefix `64:ff9b::/96`. Returns\n   * `null` if this address is not contained within the given prefix.\n   * @example\n   * new Address6('64:ff9b::c000:221').toAddress4Nat64()!.correctForm(); // '192.0.2.33'\n   */\n  toAddress4Nat64(prefix: string = '64:ff9b::/96'): Address4 | null {\n    const prefix6 = new Address6(prefix);\n    const pl = prefix6.subnetMask;\n\n    if (pl !== 32 && pl !== 40 && pl !== 48 && pl !== 56 && pl !== 64 && pl !== 96) {\n      throw new AddressError('NAT64 prefix length must be 32, 40, 48, 56, 64, or 96');\n    }\n\n    if (!this.isInSubnet(prefix6)) {\n      return null;\n    }\n\n    const bits = this.binaryZeroPad();\n    let v4Bits: string;\n\n    if (pl === 96) {\n      v4Bits = bits.slice(96, 128);\n    } else {\n      const beforeU = 64 - pl;\n      v4Bits = bits.slice(pl, pl + beforeU) + bits.slice(72, 72 + (32 - beforeU));\n    }\n\n    const octets: string[] = [];\n    for (let i = 0; i < 4; i++) {\n      octets.push(parseInt(v4Bits.slice(i * 8, (i + 1) * 8), 2).toString());\n    }\n    return new Address4(octets.join('.'));\n  }\n\n  /**\n   * Return a byte array.\n   *\n   * To get a Node.js `Buffer`, wrap the result: `Buffer.from(address.toByteArray())`.\n   * @returns {Array}\n   */\n  toByteArray(): number[] {\n    const valueWithoutPadding = this.bigInt().toString(16);\n    const leadingPad = '0'.repeat(valueWithoutPadding.length % 2);\n\n    const value = `${leadingPad}${valueWithoutPadding}`;\n\n    const bytes = [];\n    for (let i = 0, length = value.length; i < length; i += 2) {\n      bytes.push(parseInt(value.substring(i, i + 2), 16));\n    }\n\n    return bytes;\n  }\n\n  /**\n   * Return an unsigned byte array.\n   *\n   * To get a Node.js `Buffer`, wrap the result: `Buffer.from(address.toUnsignedByteArray())`.\n   * @returns {Array}\n   */\n  toUnsignedByteArray(): number[] {\n    return this.toByteArray().map(unsignByte);\n  }\n\n  /**\n   * Convert a byte array to an Address6 object.\n   *\n   * To convert from a Node.js `Buffer`, spread it: `Address6.fromByteArray([...buf])`.\n   * @returns {Address6}\n   */\n  static fromByteArray(bytes: Array<any>): Address6 {\n    return this.fromUnsignedByteArray(bytes.map(unsignByte));\n  }\n\n  /**\n   * Convert an unsigned byte array to an Address6 object.\n   *\n   * To convert from a Node.js `Buffer`, spread it: `Address6.fromUnsignedByteArray([...buf])`.\n   * @returns {Address6}\n   */\n  static fromUnsignedByteArray(bytes: Array<any>): Address6 {\n    const BYTE_MAX = BigInt('256');\n    let result = BigInt('0');\n    let multiplier = BigInt('1');\n\n    for (let i = bytes.length - 1; i >= 0; i--) {\n      result += multiplier * BigInt(bytes[i].toString(10));\n\n      multiplier *= BYTE_MAX;\n    }\n\n    return Address6.fromBigInt(result);\n  }\n\n  // #region Attributes\n  /**\n   * Returns true if the given address is in the subnet of the current address\n   * @returns {boolean}\n   */\n  isInSubnet = common.isInSubnet;\n\n  /**\n   * Returns true if the address is correct, false otherwise\n   * @returns {boolean}\n   */\n  isCorrect = isCorrect6;\n\n  /**\n   * Returns true if the address is in the canonical form, false otherwise\n   * @returns {boolean}\n   */\n  isCanonical(): boolean {\n    return this.addressMinusSuffix === this.canonicalForm();\n  }\n\n  /**\n   * Returns true if the address is a link local address, false otherwise\n   * @returns {boolean}\n   */\n  isLinkLocal(): boolean {\n    // Zeroes are required, i.e. we can't check isInSubnet with 'fe80::/10'\n    if (\n      this.getBitsBase2(0, 64) ===\n      '1111111010000000000000000000000000000000000000000000000000000000'\n    ) {\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Returns true if the address is a multicast address, false otherwise\n   * @returns {boolean}\n   */\n  isMulticast(): boolean {\n    const type = this.getType();\n    return type === 'Multicast' || type.startsWith('Multicast ');\n  }\n\n  /**\n   * Returns true if the address was written in v4-in-v6 dotted-quad notation\n   * (e.g. `::ffff:127.0.0.1`), false otherwise. This is a notation-level flag\n   * and does not reflect whether the address bits lie in the IPv4-mapped\n   * (`::ffff:0:0/96`) subnet — for that, see {@link isMapped4}.\n   * @returns {boolean}\n   */\n  is4(): boolean {\n    return this.v4;\n  }\n\n  /**\n   * Returns true if the address is an IPv4-mapped IPv6 address in\n   * `::ffff:0:0/96` ([RFC 4291 §2.5.5.2](https://datatracker.ietf.org/doc/html/rfc4291#section-2.5.5.2)),\n   * false otherwise. Unlike {@link is4}, this checks the underlying address\n   * bits rather than the textual notation, so `::ffff:127.0.0.1` and\n   * `::ffff:7f00:1` both return true.\n   * @returns {boolean}\n   */\n  isMapped4(): boolean {\n    return this.isInSubnet(IPV4_MAPPED_SUBNET);\n  }\n\n  /**\n   * Returns true if the address is a Teredo address, false otherwise\n   * @returns {boolean}\n   */\n  isTeredo(): boolean {\n    return this.isInSubnet(TEREDO_SUBNET);\n  }\n\n  /**\n   * Returns true if the address is a 6to4 address, false otherwise\n   * @returns {boolean}\n   */\n  is6to4(): boolean {\n    return this.isInSubnet(SIX_TO_FOUR_SUBNET);\n  }\n\n  /**\n   * Returns true if the address is a loopback address, false otherwise\n   * @returns {boolean}\n   */\n  isLoopback(): boolean {\n    return this.getType() === 'Loopback';\n  }\n\n  /**\n   * Returns true if the address is a Unique Local Address in `fc00::/7` ([RFC 4193](https://datatracker.ietf.org/doc/html/rfc4193)). ULAs are the IPv6 equivalent of IPv4 [RFC 1918](https://datatracker.ietf.org/doc/html/rfc1918) private addresses.\n   * @returns {boolean}\n   */\n  isULA(): boolean {\n    return this.isInSubnet(ULA_SUBNET);\n  }\n\n  /**\n   * Returns true if the address is the unspecified address `::`.\n   * @returns {boolean}\n   */\n  isUnspecified(): boolean {\n    return this.getType() === 'Unspecified';\n  }\n\n  /**\n   * Returns true if the address is in the documentation prefix `2001:db8::/32` ([RFC 3849](https://datatracker.ietf.org/doc/html/rfc3849)).\n   * @returns {boolean}\n   */\n  isDocumentation(): boolean {\n    return this.isInSubnet(DOCUMENTATION_SUBNET);\n  }\n  // #endregion\n\n  // #region HTML\n  /**\n   * Returns the address as an HTTP URL with the host bracketed, e.g.\n   * `http://[2001:db8::1]/`. If `optionalPort` is provided it is appended,\n   * e.g. `http://[2001:db8::1]:8080/`.\n   */\n  href(optionalPort?: number | string): string {\n    if (optionalPort === undefined) {\n      optionalPort = '';\n    } else {\n      optionalPort = `:${optionalPort}`;\n    }\n\n    return `http://[${this.correctForm()}]${optionalPort}/`;\n  }\n\n  /**\n   * Returns an HTML `<a>` element whose `href` encodes the address in a URL\n   * hash fragment (default prefix `/#address=`). Useful for linking between\n   * pages of an address-inspector UI.\n   * @param options.className - CSS class for the rendered `<a>` element\n   * @param options.prefix - hash prefix prepended to the address (default `/#address=`)\n   * @param options.v4 - when true, render the address in v4-in-v6 form\n   */\n  link(options?: { className?: string; prefix?: string; v4?: boolean }): string {\n    if (!options) {\n      options = {};\n    }\n\n    if (options.className === undefined) {\n      options.className = '';\n    }\n\n    if (options.prefix === undefined) {\n      options.prefix = '/#address=';\n    }\n\n    if (options.v4 === undefined) {\n      options.v4 = false;\n    }\n\n    let formFunction = this.correctForm;\n\n    if (options.v4) {\n      formFunction = this.to4in6;\n    }\n\n    const form = formFunction.call(this);\n    const safeHref = helpers.escapeHtml(`${options.prefix}${form}`);\n    const safeForm = helpers.escapeHtml(form);\n\n    if (options.className) {\n      const safeClass = helpers.escapeHtml(options.className);\n\n      return `<a href=\"${safeHref}\" class=\"${safeClass}\">${safeForm}</a>`;\n    }\n\n    return `<a href=\"${safeHref}\">${safeForm}</a>`;\n  }\n\n  /**\n   * Groups an address\n   * @returns {String}\n   */\n  group(): string {\n    if (this.elidedGroups === 0) {\n      // The simple case\n      return helpers.simpleGroup(this.addressMinusSuffix).join(':');\n    }\n\n    assert(typeof this.elidedGroups === 'number');\n    assert(typeof this.elisionBegin === 'number');\n\n    // The elided case\n    const output = [];\n\n    const [left, right] = this.addressMinusSuffix.split('::');\n\n    if (left.length) {\n      output.push(...helpers.simpleGroup(left));\n    } else {\n      output.push('');\n    }\n\n    const classes = ['hover-group'];\n\n    for (let i = this.elisionBegin; i < this.elisionBegin + this.elidedGroups; i++) {\n      classes.push(`group-${i}`);\n    }\n\n    output.push(`<span class=\"${classes.join(' ')}\"></span>`);\n\n    if (right.length) {\n      output.push(...helpers.simpleGroup(right, this.elisionEnd));\n    } else {\n      output.push('');\n    }\n\n    if (this.is4()) {\n      assert(this.address4 instanceof Address4);\n\n      output.pop();\n      output.push(this.address4.groupForV6());\n    }\n\n    return output.join(':');\n  }\n  // #endregion\n\n  // #region Regular expressions\n  /**\n   * Generate a regular expression string that can be used to find or validate\n   * all variations of this address\n   * @param {boolean} substringSearch\n   * @returns {string}\n   */\n  regularExpressionString(this: Address6, substringSearch: boolean = false): string {\n    let output: string[] = [];\n\n    // TODO: revisit why this is necessary\n    const address6 = new Address6(this.correctForm());\n\n    if (address6.elidedGroups === 0) {\n      // The simple case\n      output.push(simpleRegularExpression(address6.parsedAddress));\n    } else if (address6.elidedGroups === constants6.GROUPS) {\n      // A completely elided address\n      output.push(possibleElisions(constants6.GROUPS));\n    } else {\n      // A partially elided address\n      const halves = address6.address.split('::');\n\n      if (halves[0].length) {\n        output.push(simpleRegularExpression(halves[0].split(':')));\n      }\n\n      assert(typeof address6.elidedGroups === 'number');\n\n      output.push(\n        possibleElisions(address6.elidedGroups, halves[0].length !== 0, halves[1].length !== 0),\n      );\n\n      if (halves[1].length) {\n        output.push(simpleRegularExpression(halves[1].split(':')));\n      }\n\n      output = [output.join(':')];\n    }\n\n    if (!substringSearch) {\n      output = [\n        '(?=^|',\n        ADDRESS_BOUNDARY,\n        '|[^\\\\w\\\\:])(',\n        ...output,\n        ')(?=[^\\\\w\\\\:]|',\n        ADDRESS_BOUNDARY,\n        '|$)',\n      ];\n    }\n\n    return output.join('');\n  }\n\n  /**\n   * Generate a regular expression that can be used to find or validate all\n   * variations of this address.\n   * @param {boolean} substringSearch\n   * @returns {RegExp}\n   */\n  regularExpression(this: Address6, substringSearch: boolean = false): RegExp {\n    return new RegExp(this.regularExpressionString(substringSearch), 'i');\n  }\n  // #endregion\n}\n\nconst TYPE_SUBNETS: Array<[Address6, string]> = Object.keys(constants6.TYPES).map((subnet) => [\n  new Address6(subnet),\n  constants6.TYPES[subnet] as string,\n]);\nconst TEREDO_SUBNET = new Address6('2001::/32');\nconst SIX_TO_FOUR_SUBNET = new Address6('2002::/16');\nconst ULA_SUBNET = new Address6('fc00::/7');\nconst DOCUMENTATION_SUBNET = new Address6('2001:db8::/32');\nconst IPV4_MAPPED_SUBNET = new Address6('::ffff:0:0/96');\n", "export { Address4 } from './ipv4';\nexport { Address6 } from './ipv6';\nexport { AddressError } from './address-error';\n\nimport * as helpers from './v6/helpers';\n\nexport const v6 = { helpers };\n", "'use strict'\n\nexports.parse = function (source, transform) {\n  return new ArrayParser(source, transform).parse()\n}\n\nclass ArrayParser {\n  constructor (source, transform) {\n    this.source = source\n    this.transform = transform || identity\n    this.position = 0\n    this.entries = []\n    this.recorded = []\n    this.dimension = 0\n  }\n\n  isEof () {\n    return this.position >= this.source.length\n  }\n\n  nextCharacter () {\n    var character = this.source[this.position++]\n    if (character === '\\\\') {\n      return {\n        value: this.source[this.position++],\n        escaped: true\n      }\n    }\n    return {\n      value: character,\n      escaped: false\n    }\n  }\n\n  record (character) {\n    this.recorded.push(character)\n  }\n\n  newEntry (includeEmpty) {\n    var entry\n    if (this.recorded.length > 0 || includeEmpty) {\n      entry = this.recorded.join('')\n      if (entry === 'NULL' && !includeEmpty) {\n        entry = null\n      }\n      if (entry !== null) entry = this.transform(entry)\n      this.entries.push(entry)\n      this.recorded = []\n    }\n  }\n\n  consumeDimensions () {\n    if (this.source[0] === '[') {\n      while (!this.isEof()) {\n        var char = this.nextCharacter()\n        if (char.value === '=') break\n      }\n    }\n  }\n\n  parse (nested) {\n    var character, parser, quote\n    this.consumeDimensions()\n    while (!this.isEof()) {\n      character = this.nextCharacter()\n      if (character.value === '{' && !quote) {\n        this.dimension++\n        if (this.dimension > 1) {\n          parser = new ArrayParser(this.source.substr(this.position - 1), this.transform)\n          this.entries.push(parser.parse(true))\n          this.position += parser.position - 2\n        }\n      } else if (character.value === '}' && !quote) {\n        this.dimension--\n        if (!this.dimension) {\n          this.newEntry()\n          if (nested) return this.entries\n        }\n      } else if (character.value === '\"' && !character.escaped) {\n        if (quote) this.newEntry(true)\n        quote = !quote\n      } else if (character.value === ',' && !quote) {\n        this.newEntry()\n      } else {\n        this.record(character.value)\n      }\n    }\n    if (this.dimension !== 0) {\n      throw new Error('array dimension not balanced')\n    }\n    return this.entries\n  }\n}\n\nfunction identity (value) {\n  return value\n}\n", "var array = require('postgres-array');\n\nmodule.exports = {\n  create: function (source, transform) {\n    return {\n      parse: function() {\n        return array.parse(source, transform);\n      }\n    };\n  }\n};\n", "'use strict'\n\nvar DATE_TIME = /(\\d{1,})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})(\\.\\d{1,})?.*?( BC)?$/\nvar DATE = /^(\\d{1,})-(\\d{2})-(\\d{2})( BC)?$/\nvar TIME_ZONE = /([Z+-])(\\d{2})?:?(\\d{2})?:?(\\d{2})?/\nvar INFINITY = /^-?infinity$/\n\nmodule.exports = function parseDate (isoDate) {\n  if (INFINITY.test(isoDate)) {\n    // Capitalize to Infinity before passing to Number\n    return Number(isoDate.replace('i', 'I'))\n  }\n  var matches = DATE_TIME.exec(isoDate)\n\n  if (!matches) {\n    // Force YYYY-MM-DD dates to be parsed as local time\n    return getDate(isoDate) || null\n  }\n\n  var isBC = !!matches[8]\n  var year = parseInt(matches[1], 10)\n  if (isBC) {\n    year = bcYearToNegativeYear(year)\n  }\n\n  var month = parseInt(matches[2], 10) - 1\n  var day = matches[3]\n  var hour = parseInt(matches[4], 10)\n  var minute = parseInt(matches[5], 10)\n  var second = parseInt(matches[6], 10)\n\n  var ms = matches[7]\n  ms = ms ? 1000 * parseFloat(ms) : 0\n\n  var date\n  var offset = timeZoneOffset(isoDate)\n  if (offset != null) {\n    date = new Date(Date.UTC(year, month, day, hour, minute, second, ms))\n\n    // Account for years from 0 to 99 being interpreted as 1900-1999\n    // by Date.UTC / the multi-argument form of the Date constructor\n    if (is0To99(year)) {\n      date.setUTCFullYear(year)\n    }\n\n    if (offset !== 0) {\n      date.setTime(date.getTime() - offset)\n    }\n  } else {\n    date = new Date(year, month, day, hour, minute, second, ms)\n\n    if (is0To99(year)) {\n      date.setFullYear(year)\n    }\n  }\n\n  return date\n}\n\nfunction getDate (isoDate) {\n  var matches = DATE.exec(isoDate)\n  if (!matches) {\n    return\n  }\n\n  var year = parseInt(matches[1], 10)\n  var isBC = !!matches[4]\n  if (isBC) {\n    year = bcYearToNegativeYear(year)\n  }\n\n  var month = parseInt(matches[2], 10) - 1\n  var day = matches[3]\n  // YYYY-MM-DD will be parsed as local time\n  var date = new Date(year, month, day)\n\n  if (is0To99(year)) {\n    date.setFullYear(year)\n  }\n\n  return date\n}\n\n// match timezones:\n// Z (UTC)\n// -05\n// +06:30\nfunction timeZoneOffset (isoDate) {\n  if (isoDate.endsWith('+00')) {\n    return 0\n  }\n\n  var zone = TIME_ZONE.exec(isoDate.split(' ')[1])\n  if (!zone) return\n  var type = zone[1]\n\n  if (type === 'Z') {\n    return 0\n  }\n  var sign = type === '-' ? -1 : 1\n  var offset = parseInt(zone[2], 10) * 3600 +\n    parseInt(zone[3] || 0, 10) * 60 +\n    parseInt(zone[4] || 0, 10)\n\n  return offset * sign * 1000\n}\n\nfunction bcYearToNegativeYear (year) {\n  // Account for numerical difference between representations of BC years\n  // See: https://github.com/bendrucker/postgres-date/issues/5\n  return -(year - 1)\n}\n\nfunction is0To99 (num) {\n  return num >= 0 && num < 100\n}\n", "module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend(target) {\n    for (var i = 1; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n", "'use strict'\n\nvar extend = require('xtend/mutable')\n\nmodule.exports = PostgresInterval\n\nfunction PostgresInterval (raw) {\n  if (!(this instanceof PostgresInterval)) {\n    return new PostgresInterval(raw)\n  }\n  extend(this, parse(raw))\n}\nvar properties = ['seconds', 'minutes', 'hours', 'days', 'months', 'years']\nPostgresInterval.prototype.toPostgres = function () {\n  var filtered = properties.filter(this.hasOwnProperty, this)\n\n  // In addition to `properties`, we need to account for fractions of seconds.\n  if (this.milliseconds && filtered.indexOf('seconds') < 0) {\n    filtered.push('seconds')\n  }\n\n  if (filtered.length === 0) return '0'\n  return filtered\n    .map(function (property) {\n      var value = this[property] || 0\n\n      // Account for fractional part of seconds,\n      // remove trailing zeroes.\n      if (property === 'seconds' && this.milliseconds) {\n        value = (value + this.milliseconds / 1000).toFixed(6).replace(/\\.?0+$/, '')\n      }\n\n      return value + ' ' + property\n    }, this)\n    .join(' ')\n}\n\nvar propertiesISOEquivalent = {\n  years: 'Y',\n  months: 'M',\n  days: 'D',\n  hours: 'H',\n  minutes: 'M',\n  seconds: 'S'\n}\nvar dateProperties = ['years', 'months', 'days']\nvar timeProperties = ['hours', 'minutes', 'seconds']\n// according to ISO 8601\nPostgresInterval.prototype.toISOString = PostgresInterval.prototype.toISO = function () {\n  var datePart = dateProperties\n    .map(buildProperty, this)\n    .join('')\n\n  var timePart = timeProperties\n    .map(buildProperty, this)\n    .join('')\n\n  return 'P' + datePart + 'T' + timePart\n\n  function buildProperty (property) {\n    var value = this[property] || 0\n\n    // Account for fractional part of seconds,\n    // remove trailing zeroes.\n    if (property === 'seconds' && this.milliseconds) {\n      value = (value + this.milliseconds / 1000).toFixed(6).replace(/0+$/, '')\n    }\n\n    return value + propertiesISOEquivalent[property]\n  }\n}\n\nvar NUMBER = '([+-]?\\\\d+)'\nvar YEAR = NUMBER + '\\\\s+years?'\nvar MONTH = NUMBER + '\\\\s+mons?'\nvar DAY = NUMBER + '\\\\s+days?'\nvar TIME = '([+-])?([\\\\d]*):(\\\\d\\\\d):(\\\\d\\\\d)\\\\.?(\\\\d{1,6})?'\nvar INTERVAL = new RegExp([YEAR, MONTH, DAY, TIME].map(function (regexString) {\n  return '(' + regexString + ')?'\n})\n  .join('\\\\s*'))\n\n// Positions of values in regex match\nvar positions = {\n  years: 2,\n  months: 4,\n  days: 6,\n  hours: 9,\n  minutes: 10,\n  seconds: 11,\n  milliseconds: 12\n}\n// We can use negative time\nvar negatives = ['hours', 'minutes', 'seconds', 'milliseconds']\n\nfunction parseMilliseconds (fraction) {\n  // add omitted zeroes\n  var microseconds = fraction + '000000'.slice(fraction.length)\n  return parseInt(microseconds, 10) / 1000\n}\n\nfunction parse (interval) {\n  if (!interval) return {}\n  var matches = INTERVAL.exec(interval)\n  var isNegative = matches[8] === '-'\n  return Object.keys(positions)\n    .reduce(function (parsed, property) {\n      var position = positions[property]\n      var value = matches[position]\n      // no empty string\n      if (!value) return parsed\n      // milliseconds are actually microseconds (up to 6 digits)\n      // with omitted trailing zeroes.\n      value = property === 'milliseconds'\n        ? parseMilliseconds(value)\n        : parseInt(value, 10)\n      // no zeros\n      if (!value) return parsed\n      if (isNegative && ~negatives.indexOf(property)) {\n        value *= -1\n      }\n      parsed[property] = value\n      return parsed\n    }, {})\n}\n", "'use strict'\n\nvar bufferFrom = Buffer.from || Buffer\n\nmodule.exports = function parseBytea (input) {\n  if (/^\\\\x/.test(input)) {\n    // new 'hex' style response (pg >9.0)\n    return bufferFrom(input.substr(2), 'hex')\n  }\n  var output = ''\n  var i = 0\n  while (i < input.length) {\n    if (input[i] !== '\\\\') {\n      output += input[i]\n      ++i\n    } else {\n      if (/[0-7]{3}/.test(input.substr(i + 1, 3))) {\n        output += String.fromCharCode(parseInt(input.substr(i + 1, 3), 8))\n        i += 4\n      } else {\n        var backslashes = 1\n        while (i + backslashes < input.length && input[i + backslashes] === '\\\\') {\n          backslashes++\n        }\n        for (var k = 0; k < Math.floor(backslashes / 2); ++k) {\n          output += '\\\\'\n        }\n        i += Math.floor(backslashes / 2) * 2\n      }\n    }\n  }\n  return bufferFrom(output, 'binary')\n}\n", "var array = require('postgres-array')\nvar arrayParser = require('./arrayParser');\nvar parseDate = require('postgres-date');\nvar parseInterval = require('postgres-interval');\nvar parseByteA = require('postgres-bytea');\n\nfunction allowNull (fn) {\n  return function nullAllowed (value) {\n    if (value === null) return value\n    return fn(value)\n  }\n}\n\nfunction parseBool (value) {\n  if (value === null) return value\n  return value === 'TRUE' ||\n    value === 't' ||\n    value === 'true' ||\n    value === 'y' ||\n    value === 'yes' ||\n    value === 'on' ||\n    value === '1';\n}\n\nfunction parseBoolArray (value) {\n  if (!value) return null\n  return array.parse(value, parseBool)\n}\n\nfunction parseBaseTenInt (string) {\n  return parseInt(string, 10)\n}\n\nfunction parseIntegerArray (value) {\n  if (!value) return null\n  return array.parse(value, allowNull(parseBaseTenInt))\n}\n\nfunction parseBigIntegerArray (value) {\n  if (!value) return null\n  return array.parse(value, allowNull(function (entry) {\n    return parseBigInteger(entry).trim()\n  }))\n}\n\nvar parsePointArray = function(value) {\n  if(!value) { return null; }\n  var p = arrayParser.create(value, function(entry) {\n    if(entry !== null) {\n      entry = parsePoint(entry);\n    }\n    return entry;\n  });\n\n  return p.parse();\n};\n\nvar parseFloatArray = function(value) {\n  if(!value) { return null; }\n  var p = arrayParser.create(value, function(entry) {\n    if(entry !== null) {\n      entry = parseFloat(entry);\n    }\n    return entry;\n  });\n\n  return p.parse();\n};\n\nvar parseStringArray = function(value) {\n  if(!value) { return null; }\n\n  var p = arrayParser.create(value);\n  return p.parse();\n};\n\nvar parseDateArray = function(value) {\n  if (!value) { return null; }\n\n  var p = arrayParser.create(value, function(entry) {\n    if (entry !== null) {\n      entry = parseDate(entry);\n    }\n    return entry;\n  });\n\n  return p.parse();\n};\n\nvar parseIntervalArray = function(value) {\n  if (!value) { return null; }\n\n  var p = arrayParser.create(value, function(entry) {\n    if (entry !== null) {\n      entry = parseInterval(entry);\n    }\n    return entry;\n  });\n\n  return p.parse();\n};\n\nvar parseByteAArray = function(value) {\n  if (!value) { return null; }\n\n  return array.parse(value, allowNull(parseByteA));\n};\n\nvar parseInteger = function(value) {\n  return parseInt(value, 10);\n};\n\nvar parseBigInteger = function(value) {\n  var valStr = String(value);\n  if (/^\\d+$/.test(valStr)) { return valStr; }\n  return value;\n};\n\nvar parseJsonArray = function(value) {\n  if (!value) { return null; }\n\n  return array.parse(value, allowNull(JSON.parse));\n};\n\nvar parsePoint = function(value) {\n  if (value[0] !== '(') { return null; }\n\n  value = value.substring( 1, value.length - 1 ).split(',');\n\n  return {\n    x: parseFloat(value[0])\n  , y: parseFloat(value[1])\n  };\n};\n\nvar parseCircle = function(value) {\n  if (value[0] !== '<' && value[1] !== '(') { return null; }\n\n  var point = '(';\n  var radius = '';\n  var pointParsed = false;\n  for (var i = 2; i < value.length - 1; i++){\n    if (!pointParsed) {\n      point += value[i];\n    }\n\n    if (value[i] === ')') {\n      pointParsed = true;\n      continue;\n    } else if (!pointParsed) {\n      continue;\n    }\n\n    if (value[i] === ','){\n      continue;\n    }\n\n    radius += value[i];\n  }\n  var result = parsePoint(point);\n  result.radius = parseFloat(radius);\n\n  return result;\n};\n\nvar init = function(register) {\n  register(20, parseBigInteger); // int8\n  register(21, parseInteger); // int2\n  register(23, parseInteger); // int4\n  register(26, parseInteger); // oid\n  register(700, parseFloat); // float4/real\n  register(701, parseFloat); // float8/double\n  register(16, parseBool);\n  register(1082, parseDate); // date\n  register(1114, parseDate); // timestamp without timezone\n  register(1184, parseDate); // timestamp\n  register(600, parsePoint); // point\n  register(651, parseStringArray); // cidr[]\n  register(718, parseCircle); // circle\n  register(1000, parseBoolArray);\n  register(1001, parseByteAArray);\n  register(1005, parseIntegerArray); // _int2\n  register(1007, parseIntegerArray); // _int4\n  register(1028, parseIntegerArray); // oid[]\n  register(1016, parseBigIntegerArray); // _int8\n  register(1017, parsePointArray); // point[]\n  register(1021, parseFloatArray); // _float4\n  register(1022, parseFloatArray); // _float8\n  register(1231, parseFloatArray); // _numeric\n  register(1014, parseStringArray); //char\n  register(1015, parseStringArray); //varchar\n  register(1008, parseStringArray);\n  register(1009, parseStringArray);\n  register(1040, parseStringArray); // macaddr[]\n  register(1041, parseStringArray); // inet[]\n  register(1115, parseDateArray); // timestamp without time zone[]\n  register(1182, parseDateArray); // _date\n  register(1185, parseDateArray); // timestamp with time zone[]\n  register(1186, parseInterval);\n  register(1187, parseIntervalArray);\n  register(17, parseByteA);\n  register(114, JSON.parse.bind(JSON)); // json\n  register(3802, JSON.parse.bind(JSON)); // jsonb\n  register(199, parseJsonArray); // json[]\n  register(3807, parseJsonArray); // jsonb[]\n  register(3907, parseStringArray); // numrange[]\n  register(2951, parseStringArray); // uuid[]\n  register(791, parseStringArray); // money[]\n  register(1183, parseStringArray); // time[]\n  register(1270, parseStringArray); // timetz[]\n};\n\nmodule.exports = {\n  init: init\n};\n", "'use strict';\n\n// selected so (BASE - 1) * 0x100000000 + 0xffffffff is a safe integer\nvar BASE = 1000000;\n\nfunction readInt8(buffer) {\n\tvar high = buffer.readInt32BE(0);\n\tvar low = buffer.readUInt32BE(4);\n\tvar sign = '';\n\n\tif (high < 0) {\n\t\thigh = ~high + (low === 0);\n\t\tlow = (~low + 1) >>> 0;\n\t\tsign = '-';\n\t}\n\n\tvar result = '';\n\tvar carry;\n\tvar t;\n\tvar digits;\n\tvar pad;\n\tvar l;\n\tvar i;\n\n\t{\n\t\tcarry = high % BASE;\n\t\thigh = high / BASE >>> 0;\n\n\t\tt = 0x100000000 * carry + low;\n\t\tlow = t / BASE >>> 0;\n\t\tdigits = '' + (t - BASE * low);\n\n\t\tif (low === 0 && high === 0) {\n\t\t\treturn sign + digits + result;\n\t\t}\n\n\t\tpad = '';\n\t\tl = 6 - digits.length;\n\n\t\tfor (i = 0; i < l; i++) {\n\t\t\tpad += '0';\n\t\t}\n\n\t\tresult = pad + digits + result;\n\t}\n\n\t{\n\t\tcarry = high % BASE;\n\t\thigh = high / BASE >>> 0;\n\n\t\tt = 0x100000000 * carry + low;\n\t\tlow = t / BASE >>> 0;\n\t\tdigits = '' + (t - BASE * low);\n\n\t\tif (low === 0 && high === 0) {\n\t\t\treturn sign + digits + result;\n\t\t}\n\n\t\tpad = '';\n\t\tl = 6 - digits.length;\n\n\t\tfor (i = 0; i < l; i++) {\n\t\t\tpad += '0';\n\t\t}\n\n\t\tresult = pad + digits + result;\n\t}\n\n\t{\n\t\tcarry = high % BASE;\n\t\thigh = high / BASE >>> 0;\n\n\t\tt = 0x100000000 * carry + low;\n\t\tlow = t / BASE >>> 0;\n\t\tdigits = '' + (t - BASE * low);\n\n\t\tif (low === 0 && high === 0) {\n\t\t\treturn sign + digits + result;\n\t\t}\n\n\t\tpad = '';\n\t\tl = 6 - digits.length;\n\n\t\tfor (i = 0; i < l; i++) {\n\t\t\tpad += '0';\n\t\t}\n\n\t\tresult = pad + digits + result;\n\t}\n\n\t{\n\t\tcarry = high % BASE;\n\t\tt = 0x100000000 * carry + low;\n\t\tdigits = '' + t % BASE;\n\n\t\treturn sign + digits + result;\n\t}\n}\n\nmodule.exports = readInt8;\n", "var parseInt64 = require('pg-int8');\n\nvar parseBits = function(data, bits, offset, invert, callback) {\n  offset = offset || 0;\n  invert = invert || false;\n  callback = callback || function(lastValue, newValue, bits) { return (lastValue * Math.pow(2, bits)) + newValue; };\n  var offsetBytes = offset >> 3;\n\n  var inv = function(value) {\n    if (invert) {\n      return ~value & 0xff;\n    }\n\n    return value;\n  };\n\n  // read first (maybe partial) byte\n  var mask = 0xff;\n  var firstBits = 8 - (offset % 8);\n  if (bits < firstBits) {\n    mask = (0xff << (8 - bits)) & 0xff;\n    firstBits = bits;\n  }\n\n  if (offset) {\n    mask = mask >> (offset % 8);\n  }\n\n  var result = 0;\n  if ((offset % 8) + bits >= 8) {\n    result = callback(0, inv(data[offsetBytes]) & mask, firstBits);\n  }\n\n  // read bytes\n  var bytes = (bits + offset) >> 3;\n  for (var i = offsetBytes + 1; i < bytes; i++) {\n    result = callback(result, inv(data[i]), 8);\n  }\n\n  // bits to read, that are not a complete byte\n  var lastBits = (bits + offset) % 8;\n  if (lastBits > 0) {\n    result = callback(result, inv(data[bytes]) >> (8 - lastBits), lastBits);\n  }\n\n  return result;\n};\n\nvar parseFloatFromBits = function(data, precisionBits, exponentBits) {\n  var bias = Math.pow(2, exponentBits - 1) - 1;\n  var sign = parseBits(data, 1);\n  var exponent = parseBits(data, exponentBits, 1);\n\n  if (exponent === 0) {\n    return 0;\n  }\n\n  // parse mantissa\n  var precisionBitsCounter = 1;\n  var parsePrecisionBits = function(lastValue, newValue, bits) {\n    if (lastValue === 0) {\n      lastValue = 1;\n    }\n\n    for (var i = 1; i <= bits; i++) {\n      precisionBitsCounter /= 2;\n      if ((newValue & (0x1 << (bits - i))) > 0) {\n        lastValue += precisionBitsCounter;\n      }\n    }\n\n    return lastValue;\n  };\n\n  var mantissa = parseBits(data, precisionBits, exponentBits + 1, false, parsePrecisionBits);\n\n  // special cases\n  if (exponent == (Math.pow(2, exponentBits + 1) - 1)) {\n    if (mantissa === 0) {\n      return (sign === 0) ? Infinity : -Infinity;\n    }\n\n    return NaN;\n  }\n\n  // normale number\n  return ((sign === 0) ? 1 : -1) * Math.pow(2, exponent - bias) * mantissa;\n};\n\nvar parseInt16 = function(value) {\n  if (parseBits(value, 1) == 1) {\n    return -1 * (parseBits(value, 15, 1, true) + 1);\n  }\n\n  return parseBits(value, 15, 1);\n};\n\nvar parseInt32 = function(value) {\n  if (parseBits(value, 1) == 1) {\n    return -1 * (parseBits(value, 31, 1, true) + 1);\n  }\n\n  return parseBits(value, 31, 1);\n};\n\nvar parseFloat32 = function(value) {\n  return parseFloatFromBits(value, 23, 8);\n};\n\nvar parseFloat64 = function(value) {\n  return parseFloatFromBits(value, 52, 11);\n};\n\nvar parseNumeric = function(value) {\n  var sign = parseBits(value, 16, 32);\n  if (sign == 0xc000) {\n    return NaN;\n  }\n\n  var weight = Math.pow(10000, parseBits(value, 16, 16));\n  var result = 0;\n\n  var digits = [];\n  var ndigits = parseBits(value, 16);\n  for (var i = 0; i < ndigits; i++) {\n    result += parseBits(value, 16, 64 + (16 * i)) * weight;\n    weight /= 10000;\n  }\n\n  var scale = Math.pow(10, parseBits(value, 16, 48));\n  return ((sign === 0) ? 1 : -1) * Math.round(result * scale) / scale;\n};\n\nvar parseDate = function(isUTC, value) {\n  var sign = parseBits(value, 1);\n  var rawValue = parseBits(value, 63, 1);\n\n  // discard usecs and shift from 2000 to 1970\n  var result = new Date((((sign === 0) ? 1 : -1) * rawValue / 1000) + 946684800000);\n\n  if (!isUTC) {\n    result.setTime(result.getTime() + result.getTimezoneOffset() * 60000);\n  }\n\n  // add microseconds to the date\n  result.usec = rawValue % 1000;\n  result.getMicroSeconds = function() {\n    return this.usec;\n  };\n  result.setMicroSeconds = function(value) {\n    this.usec = value;\n  };\n  result.getUTCMicroSeconds = function() {\n    return this.usec;\n  };\n\n  return result;\n};\n\nvar parseArray = function(value) {\n  var dim = parseBits(value, 32);\n\n  var flags = parseBits(value, 32, 32);\n  var elementType = parseBits(value, 32, 64);\n\n  var offset = 96;\n  var dims = [];\n  for (var i = 0; i < dim; i++) {\n    // parse dimension\n    dims[i] = parseBits(value, 32, offset);\n    offset += 32;\n\n    // ignore lower bounds\n    offset += 32;\n  }\n\n  var parseElement = function(elementType) {\n    // parse content length\n    var length = parseBits(value, 32, offset);\n    offset += 32;\n\n    // parse null values\n    if (length == 0xffffffff) {\n      return null;\n    }\n\n    var result;\n    if ((elementType == 0x17) || (elementType == 0x14)) {\n      // int/bigint\n      result = parseBits(value, length * 8, offset);\n      offset += length * 8;\n      return result;\n    }\n    else if (elementType == 0x19) {\n      // string\n      result = value.toString(this.encoding, offset >> 3, (offset += (length << 3)) >> 3);\n      return result;\n    }\n    else {\n      console.log(\"ERROR: ElementType not implemented: \" + elementType);\n    }\n  };\n\n  var parse = function(dimension, elementType) {\n    var array = [];\n    var i;\n\n    if (dimension.length > 1) {\n      var count = dimension.shift();\n      for (i = 0; i < count; i++) {\n        array[i] = parse(dimension, elementType);\n      }\n      dimension.unshift(count);\n    }\n    else {\n      for (i = 0; i < dimension[0]; i++) {\n        array[i] = parseElement(elementType);\n      }\n    }\n\n    return array;\n  };\n\n  return parse(dims, elementType);\n};\n\nvar parseText = function(value) {\n  return value.toString('utf8');\n};\n\nvar parseBool = function(value) {\n  if(value === null) return null;\n  return (parseBits(value, 8) > 0);\n};\n\nvar init = function(register) {\n  register(20, parseInt64);\n  register(21, parseInt16);\n  register(23, parseInt32);\n  register(26, parseInt32);\n  register(1700, parseNumeric);\n  register(700, parseFloat32);\n  register(701, parseFloat64);\n  register(16, parseBool);\n  register(1114, parseDate.bind(null, false));\n  register(1184, parseDate.bind(null, true));\n  register(1000, parseArray);\n  register(1007, parseArray);\n  register(1016, parseArray);\n  register(1008, parseArray);\n  register(1009, parseArray);\n  register(25, parseText);\n};\n\nmodule.exports = {\n  init: init\n};\n", "/**\n * Following query was used to generate this file:\n\n SELECT json_object_agg(UPPER(PT.typname), PT.oid::int4 ORDER BY pt.oid)\n FROM pg_type PT\n WHERE typnamespace = (SELECT pgn.oid FROM pg_namespace pgn WHERE nspname = 'pg_catalog') -- Take only builting Postgres types with stable OID (extension types are not guaranted to be stable)\n AND typtype = 'b' -- Only basic types\n AND typelem = 0 -- Ignore aliases\n AND typisdefined -- Ignore undefined types\n */\n\nmodule.exports = {\n    BOOL: 16,\n    BYTEA: 17,\n    CHAR: 18,\n    INT8: 20,\n    INT2: 21,\n    INT4: 23,\n    REGPROC: 24,\n    TEXT: 25,\n    OID: 26,\n    TID: 27,\n    XID: 28,\n    CID: 29,\n    JSON: 114,\n    XML: 142,\n    PG_NODE_TREE: 194,\n    SMGR: 210,\n    PATH: 602,\n    POLYGON: 604,\n    CIDR: 650,\n    FLOAT4: 700,\n    FLOAT8: 701,\n    ABSTIME: 702,\n    RELTIME: 703,\n    TINTERVAL: 704,\n    CIRCLE: 718,\n    MACADDR8: 774,\n    MONEY: 790,\n    MACADDR: 829,\n    INET: 869,\n    ACLITEM: 1033,\n    BPCHAR: 1042,\n    VARCHAR: 1043,\n    DATE: 1082,\n    TIME: 1083,\n    TIMESTAMP: 1114,\n    TIMESTAMPTZ: 1184,\n    INTERVAL: 1186,\n    TIMETZ: 1266,\n    BIT: 1560,\n    VARBIT: 1562,\n    NUMERIC: 1700,\n    REFCURSOR: 1790,\n    REGPROCEDURE: 2202,\n    REGOPER: 2203,\n    REGOPERATOR: 2204,\n    REGCLASS: 2205,\n    REGTYPE: 2206,\n    UUID: 2950,\n    TXID_SNAPSHOT: 2970,\n    PG_LSN: 3220,\n    PG_NDISTINCT: 3361,\n    PG_DEPENDENCIES: 3402,\n    TSVECTOR: 3614,\n    TSQUERY: 3615,\n    GTSVECTOR: 3642,\n    REGCONFIG: 3734,\n    REGDICTIONARY: 3769,\n    JSONB: 3802,\n    REGNAMESPACE: 4089,\n    REGROLE: 4096\n};\n", "var textParsers = require('./lib/textParsers');\nvar binaryParsers = require('./lib/binaryParsers');\nvar arrayParser = require('./lib/arrayParser');\nvar builtinTypes = require('./lib/builtins');\n\nexports.getTypeParser = getTypeParser;\nexports.setTypeParser = setTypeParser;\nexports.arrayParser = arrayParser;\nexports.builtins = builtinTypes;\n\nvar typeParsers = {\n  text: {},\n  binary: {}\n};\n\n//the empty parse function\nfunction noParse (val) {\n  return String(val);\n};\n\n//returns a function used to convert a specific type (specified by\n//oid) into a result javascript type\n//note: the oid can be obtained via the following sql query:\n//SELECT oid FROM pg_type WHERE typname = 'TYPE_NAME_HERE';\nfunction getTypeParser (oid, format) {\n  format = format || 'text';\n  if (!typeParsers[format]) {\n    return noParse;\n  }\n  return typeParsers[format][oid] || noParse;\n};\n\nfunction setTypeParser (oid, format, parseFn) {\n  if(typeof format == 'function') {\n    parseFn = format;\n    format = 'text';\n  }\n  typeParsers[format][oid] = parseFn;\n};\n\ntextParsers.init(function(oid, converter) {\n  typeParsers.text[oid] = converter;\n});\n\nbinaryParsers.init(function(oid, converter) {\n  typeParsers.binary[oid] = converter;\n});\n", "'use strict'\n\nlet user\ntry {\n  user = process.platform === 'win32' ? process.env.USERNAME : process.env.USER\n} catch {\n  // ignore, e.g., Deno without --allow-env\n}\n\nmodule.exports = {\n  // database host. defaults to localhost\n  host: 'localhost',\n\n  // database user's name\n  user,\n\n  // name of database to connect\n  database: undefined,\n\n  // database user's password\n  password: null,\n\n  // a Postgres connection string to be used instead of setting individual connection items\n  // NOTE:  Setting this value will cause it to override any other value (such as database or user) defined\n  // in the defaults object.\n  connectionString: undefined,\n\n  // database port\n  port: 5432,\n\n  // number of rows to return at a time from a prepared statement's\n  // portal. 0 will return all rows at once\n  rows: 0,\n\n  // binary result mode\n  binary: false,\n\n  // Connection pool options - see https://github.com/brianc/node-pg-pool\n\n  // number of connections to use in connection pool\n  // 0 will disable connection pooling\n  max: 10,\n\n  // max milliseconds a client can go unused before it is removed\n  // from the pool and destroyed\n  idleTimeoutMillis: 30000,\n\n  client_encoding: '',\n\n  ssl: false,\n\n  application_name: undefined,\n\n  fallback_application_name: undefined,\n\n  options: undefined,\n\n  parseInputDatesAsUTC: false,\n\n  // max milliseconds any query using this connection will execute for before timing out in error.\n  // false=unlimited\n  statement_timeout: false,\n\n  // Abort any statement that waits longer than the specified duration in milliseconds while attempting to acquire a lock.\n  // false=unlimited\n  lock_timeout: false,\n\n  // Terminate any session with an open transaction that has been idle for longer than the specified duration in milliseconds\n  // false=unlimited\n  idle_in_transaction_session_timeout: false,\n\n  // max milliseconds to wait for query to complete (client side)\n  query_timeout: false,\n\n  connect_timeout: 0,\n\n  keepalives: 1,\n\n  keepalives_idle: 0,\n}\n\nconst pgTypes = require('pg-types')\n// save default parsers\nconst parseBigInteger = pgTypes.getTypeParser(20, 'text')\nconst parseBigIntegerArray = pgTypes.getTypeParser(1016, 'text')\n\n// parse int8 so you can get your count values as actual numbers\nmodule.exports.__defineSetter__('parseInt8', function (val) {\n  pgTypes.setTypeParser(20, 'text', val ? pgTypes.getTypeParser(23, 'text') : parseBigInteger)\n  pgTypes.setTypeParser(1016, 'text', val ? pgTypes.getTypeParser(1007, 'text') : parseBigIntegerArray)\n})\n", "'use strict'\n\nconst defaults = require('./defaults')\n\nconst util = require('util')\nconst { isDate } = util.types || util // Node 8 doesn't have `util.types`\n\nfunction escapeElement(elementRepresentation) {\n  const escaped = elementRepresentation.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')\n\n  return '\"' + escaped + '\"'\n}\n\n// convert a JS array to a postgres array literal\n// uses comma separator so won't work for types like box that use\n// a different array separator.\nfunction arrayString(val) {\n  let result = '{'\n  for (let i = 0; i < val.length; i++) {\n    if (i > 0) {\n      result = result + ','\n    }\n    if (val[i] === null || typeof val[i] === 'undefined') {\n      result = result + 'NULL'\n    } else if (Array.isArray(val[i])) {\n      result = result + arrayString(val[i])\n    } else if (ArrayBuffer.isView(val[i])) {\n      let item = val[i]\n      if (!(item instanceof Buffer)) {\n        const buf = Buffer.from(item.buffer, item.byteOffset, item.byteLength)\n        if (buf.length === item.byteLength) {\n          item = buf\n        } else {\n          item = buf.slice(item.byteOffset, item.byteOffset + item.byteLength)\n        }\n      }\n      result += '\\\\\\\\x' + item.toString('hex')\n    } else {\n      result += escapeElement(prepareValue(val[i]))\n    }\n  }\n  result = result + '}'\n  return result\n}\n\n// converts values from javascript types\n// to their 'raw' counterparts for use as a postgres parameter\n// note: you can override this function to provide your own conversion mechanism\n// for complex types, etc...\nconst prepareValue = function (val, seen) {\n  // null and undefined are both null for postgres\n  if (val == null) {\n    return null\n  }\n  if (typeof val === 'object') {\n    if (val instanceof Buffer) {\n      return val\n    }\n    if (ArrayBuffer.isView(val)) {\n      const buf = Buffer.from(val.buffer, val.byteOffset, val.byteLength)\n      if (buf.length === val.byteLength) {\n        return buf\n      }\n      return buf.slice(val.byteOffset, val.byteOffset + val.byteLength) // Node.js v4 does not support those Buffer.from params\n    }\n    if (isDate(val)) {\n      if (defaults.parseInputDatesAsUTC) {\n        return dateToStringUTC(val)\n      } else {\n        return dateToString(val)\n      }\n    }\n    if (Array.isArray(val)) {\n      return arrayString(val)\n    }\n\n    return prepareObject(val, seen)\n  }\n  return val.toString()\n}\n\nfunction prepareObject(val, seen) {\n  if (val && typeof val.toPostgres === 'function') {\n    seen = seen || []\n    if (seen.indexOf(val) !== -1) {\n      throw new Error('circular reference detected while preparing \"' + val + '\" for query')\n    }\n    seen.push(val)\n\n    return prepareValue(val.toPostgres(prepareValue), seen)\n  }\n  return JSON.stringify(val)\n}\n\nfunction dateToString(date) {\n  let offset = -date.getTimezoneOffset()\n\n  let year = date.getFullYear()\n  const isBCYear = year < 1\n  if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation\n\n  let ret =\n    String(year).padStart(4, '0') +\n    '-' +\n    String(date.getMonth() + 1).padStart(2, '0') +\n    '-' +\n    String(date.getDate()).padStart(2, '0') +\n    'T' +\n    String(date.getHours()).padStart(2, '0') +\n    ':' +\n    String(date.getMinutes()).padStart(2, '0') +\n    ':' +\n    String(date.getSeconds()).padStart(2, '0') +\n    '.' +\n    String(date.getMilliseconds()).padStart(3, '0')\n\n  if (offset < 0) {\n    ret += '-'\n    offset *= -1\n  } else {\n    ret += '+'\n  }\n\n  ret += String(Math.floor(offset / 60)).padStart(2, '0') + ':' + String(offset % 60).padStart(2, '0')\n  if (isBCYear) ret += ' BC'\n  return ret\n}\n\nfunction dateToStringUTC(date) {\n  let year = date.getUTCFullYear()\n  const isBCYear = year < 1\n  if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation\n\n  let ret =\n    String(year).padStart(4, '0') +\n    '-' +\n    String(date.getUTCMonth() + 1).padStart(2, '0') +\n    '-' +\n    String(date.getUTCDate()).padStart(2, '0') +\n    'T' +\n    String(date.getUTCHours()).padStart(2, '0') +\n    ':' +\n    String(date.getUTCMinutes()).padStart(2, '0') +\n    ':' +\n    String(date.getUTCSeconds()).padStart(2, '0') +\n    '.' +\n    String(date.getUTCMilliseconds()).padStart(3, '0')\n\n  ret += '+00:00'\n  if (isBCYear) ret += ' BC'\n  return ret\n}\n\nfunction normalizeQueryConfig(config, values, callback) {\n  // can take in strings or config objects\n  config = typeof config === 'string' ? { text: config } : config\n  if (values) {\n    if (typeof values === 'function') {\n      config.callback = values\n    } else {\n      config.values = values\n    }\n  }\n  if (callback) {\n    config.callback = callback\n  }\n  return config\n}\n\n// Ported from PostgreSQL 9.2.4 source code in src/interfaces/libpq/fe-exec.c\nconst escapeIdentifier = function (str) {\n  return '\"' + str.replace(/\"/g, '\"\"') + '\"'\n}\n\nconst escapeLiteral = function (str) {\n  let hasBackslash = false\n  let escaped = \"'\"\n\n  if (str == null) {\n    return \"''\"\n  }\n\n  if (typeof str !== 'string') {\n    return \"''\"\n  }\n\n  for (let i = 0; i < str.length; i++) {\n    const c = str[i]\n    if (c === \"'\") {\n      escaped += c + c\n    } else if (c === '\\\\') {\n      escaped += c + c\n      hasBackslash = true\n    } else {\n      escaped += c\n    }\n  }\n\n  escaped += \"'\"\n\n  if (hasBackslash === true) {\n    escaped = ' E' + escaped\n  }\n\n  return escaped\n}\n\nmodule.exports = {\n  prepareValue: function prepareValueWrapper(value) {\n    // this ensures that extra arguments do not get passed into prepareValue\n    // by accident, eg: from calling values.map(utils.prepareValue)\n    return prepareValue(value)\n  },\n  normalizeQueryConfig,\n  escapeIdentifier,\n  escapeLiteral,\n}\n", "'use strict'\n// This file contains crypto utility functions for versions of Node.js < 15.0.0,\n// which does not support the WebCrypto.subtle API.\n\nconst nodeCrypto = require('crypto')\n\nfunction md5(string) {\n  return nodeCrypto.createHash('md5').update(string, 'utf-8').digest('hex')\n}\n\n// See AuthenticationMD5Password at https://www.postgresql.org/docs/current/static/protocol-flow.html\nfunction postgresMd5PasswordHash(user, password, salt) {\n  const inner = md5(password + user)\n  const outer = md5(Buffer.concat([Buffer.from(inner), salt]))\n  return 'md5' + outer\n}\n\nfunction sha256(text) {\n  return nodeCrypto.createHash('sha256').update(text).digest()\n}\n\nfunction hashByName(hashName, text) {\n  hashName = hashName.replace(/(\\D)-/, '$1') // e.g. SHA-256 -> SHA256\n  return nodeCrypto.createHash(hashName).update(text).digest()\n}\n\nfunction hmacSha256(key, msg) {\n  return nodeCrypto.createHmac('sha256', key).update(msg).digest()\n}\n\nasync function deriveKey(password, salt, iterations) {\n  return nodeCrypto.pbkdf2Sync(password, salt, iterations, 32, 'sha256')\n}\n\nmodule.exports = {\n  postgresMd5PasswordHash,\n  randomBytes: nodeCrypto.randomBytes,\n  deriveKey,\n  sha256,\n  hashByName,\n  hmacSha256,\n  md5,\n}\n", "const nodeCrypto = require('crypto')\n\nmodule.exports = {\n  postgresMd5PasswordHash,\n  randomBytes,\n  deriveKey,\n  sha256,\n  hashByName,\n  hmacSha256,\n  md5,\n}\n\n/**\n * The Web Crypto API - grabbed from the Node.js library or the global\n * @type Crypto\n */\n// eslint-disable-next-line no-undef\nconst webCrypto = nodeCrypto.webcrypto || globalThis.crypto\n/**\n * The SubtleCrypto API for low level crypto operations.\n * @type SubtleCrypto\n */\nconst subtleCrypto = webCrypto.subtle\nconst textEncoder = new TextEncoder()\n\n/**\n *\n * @param {*} length\n * @returns\n */\nfunction randomBytes(length) {\n  return webCrypto.getRandomValues(Buffer.alloc(length))\n}\n\nasync function md5(string) {\n  try {\n    return nodeCrypto.createHash('md5').update(string, 'utf-8').digest('hex')\n  } catch (e) {\n    // `createHash()` failed so we are probably not in Node.js, use the WebCrypto API instead.\n    // Note that the MD5 algorithm on WebCrypto is not available in Node.js.\n    // This is why we cannot just use WebCrypto in all environments.\n    const data = typeof string === 'string' ? textEncoder.encode(string) : string\n    const hash = await subtleCrypto.digest('MD5', data)\n    return Array.from(new Uint8Array(hash))\n      .map((b) => b.toString(16).padStart(2, '0'))\n      .join('')\n  }\n}\n\n// See AuthenticationMD5Password at https://www.postgresql.org/docs/current/static/protocol-flow.html\nasync function postgresMd5PasswordHash(user, password, salt) {\n  const inner = await md5(password + user)\n  const outer = await md5(Buffer.concat([Buffer.from(inner), salt]))\n  return 'md5' + outer\n}\n\n/**\n * Create a SHA-256 digest of the given data\n * @param {Buffer} data\n */\nasync function sha256(text) {\n  return await subtleCrypto.digest('SHA-256', text)\n}\n\nasync function hashByName(hashName, text) {\n  return await subtleCrypto.digest(hashName, text)\n}\n\n/**\n * Sign the message with the given key\n * @param {ArrayBuffer} keyBuffer\n * @param {string} msg\n */\nasync function hmacSha256(keyBuffer, msg) {\n  const key = await subtleCrypto.importKey('raw', keyBuffer, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign'])\n  return await subtleCrypto.sign('HMAC', key, textEncoder.encode(msg))\n}\n\n/**\n * Derive a key from the password and salt\n * @param {string} password\n * @param {Uint8Array} salt\n * @param {number} iterations\n */\nasync function deriveKey(password, salt, iterations) {\n  const key = await subtleCrypto.importKey('raw', textEncoder.encode(password), 'PBKDF2', false, ['deriveBits'])\n  const params = { name: 'PBKDF2', hash: 'SHA-256', salt: salt, iterations: iterations }\n  return await subtleCrypto.deriveBits(params, key, 32 * 8, ['deriveBits'])\n}\n", "'use strict'\n\nconst useLegacyCrypto = parseInt(process.versions && process.versions.node && process.versions.node.split('.')[0]) < 15\nif (useLegacyCrypto) {\n  // We are on an old version of Node.js that requires legacy crypto utilities.\n  module.exports = require('./utils-legacy')\n} else {\n  module.exports = require('./utils-webcrypto')\n}\n", "function x509Error(msg, cert) {\n  return new Error('SASL channel binding: ' + msg + ' when parsing public certificate ' + cert.toString('base64'))\n}\n\nfunction readASN1Length(data, index) {\n  let length = data[index++]\n  if (length < 0x80) return { length, index }\n\n  const lengthBytes = length & 0x7f\n  if (lengthBytes > 4) throw x509Error('bad length', data)\n\n  length = 0\n  for (let i = 0; i < lengthBytes; i++) {\n    length = (length << 8) | data[index++]\n  }\n\n  return { length, index }\n}\n\nfunction readASN1OID(data, index) {\n  if (data[index++] !== 0x6) throw x509Error('non-OID data', data) // 6 = OID\n\n  const { length: OIDLength, index: indexAfterOIDLength } = readASN1Length(data, index)\n  index = indexAfterOIDLength\n  const lastIndex = index + OIDLength\n\n  const byte1 = data[index++]\n  let oid = ((byte1 / 40) >> 0) + '.' + (byte1 % 40)\n\n  while (index < lastIndex) {\n    // loop over numbers in OID\n    let value = 0\n    while (index < lastIndex) {\n      // loop over bytes in number\n      const nextByte = data[index++]\n      value = (value << 7) | (nextByte & 0x7f)\n      if (nextByte < 0x80) break\n    }\n    oid += '.' + value\n  }\n\n  return { oid, index }\n}\n\nfunction expectASN1Seq(data, index) {\n  if (data[index++] !== 0x30) throw x509Error('non-sequence data', data) // 30 = Sequence\n  return readASN1Length(data, index)\n}\n\nfunction signatureAlgorithmHashFromCertificate(data, index) {\n  // read this thread: https://www.postgresql.org/message-id/17760-b6c61e752ec07060%40postgresql.org\n  if (index === undefined) index = 0\n  index = expectASN1Seq(data, index).index\n  const { length: certInfoLength, index: indexAfterCertInfoLength } = expectASN1Seq(data, index)\n  index = indexAfterCertInfoLength + certInfoLength // skip over certificate info\n  index = expectASN1Seq(data, index).index // skip over signature length field\n  const { oid, index: indexAfterOID } = readASN1OID(data, index)\n  switch (oid) {\n    // RSA\n    case '1.2.840.113549.1.1.4':\n      return 'MD5'\n    case '1.2.840.113549.1.1.5':\n      return 'SHA-1'\n    case '1.2.840.113549.1.1.11':\n      return 'SHA-256'\n    case '1.2.840.113549.1.1.12':\n      return 'SHA-384'\n    case '1.2.840.113549.1.1.13':\n      return 'SHA-512'\n    case '1.2.840.113549.1.1.14':\n      return 'SHA-224'\n    case '1.2.840.113549.1.1.15':\n      return 'SHA512-224'\n    case '1.2.840.113549.1.1.16':\n      return 'SHA512-256'\n    // ECDSA\n    case '1.2.840.10045.4.1':\n      return 'SHA-1'\n    case '1.2.840.10045.4.3.1':\n      return 'SHA-224'\n    case '1.2.840.10045.4.3.2':\n      return 'SHA-256'\n    case '1.2.840.10045.4.3.3':\n      return 'SHA-384'\n    case '1.2.840.10045.4.3.4':\n      return 'SHA-512'\n    // RSASSA-PSS: hash is indicated separately\n    case '1.2.840.113549.1.1.10': {\n      index = indexAfterOID\n      index = expectASN1Seq(data, index).index\n      if (data[index++] !== 0xa0) throw x509Error('non-tag data', data) // a0 = constructed tag 0\n      index = readASN1Length(data, index).index // skip over tag length field\n      index = expectASN1Seq(data, index).index // skip over sequence length field\n      const { oid: hashOID } = readASN1OID(data, index)\n      switch (hashOID) {\n        // standalone hash OIDs\n        case '1.2.840.113549.2.5':\n          return 'MD5'\n        case '1.3.14.3.2.26':\n          return 'SHA-1'\n        case '2.16.840.1.101.3.4.2.1':\n          return 'SHA-256'\n        case '2.16.840.1.101.3.4.2.2':\n          return 'SHA-384'\n        case '2.16.840.1.101.3.4.2.3':\n          return 'SHA-512'\n      }\n      throw x509Error('unknown hash OID ' + hashOID, data)\n    }\n    // Ed25519 -- see https: return//github.com/openssl/openssl/issues/15477\n    case '1.3.101.110':\n    case '1.3.101.112': // ph\n      return 'SHA-512'\n    // Ed448 -- still not in pg 17.2 (if supported, digest would be SHAKE256 x 64 bytes)\n    case '1.3.101.111':\n    case '1.3.101.113': // ph\n      throw x509Error('Ed448 certificate channel binding is not currently supported by Postgres')\n  }\n  throw x509Error('unknown OID ' + oid, data)\n}\n\nmodule.exports = { signatureAlgorithmHashFromCertificate }\n", "'use strict'\nconst crypto = require('./utils')\nconst { signatureAlgorithmHashFromCertificate } = require('./cert-signatures')\n\nfunction startSession(mechanisms, stream) {\n  const candidates = ['SCRAM-SHA-256']\n  if (stream) candidates.unshift('SCRAM-SHA-256-PLUS') // higher-priority, so placed first\n\n  const mechanism = candidates.find((candidate) => mechanisms.includes(candidate))\n\n  if (!mechanism) {\n    throw new Error('SASL: Only mechanism(s) ' + candidates.join(' and ') + ' are supported')\n  }\n\n  if (mechanism === 'SCRAM-SHA-256-PLUS' && typeof stream.getPeerCertificate !== 'function') {\n    // this should never happen if we are really talking to a Postgres server\n    throw new Error('SASL: Mechanism SCRAM-SHA-256-PLUS requires a certificate')\n  }\n\n  const clientNonce = crypto.randomBytes(18).toString('base64')\n  const gs2Header = mechanism === 'SCRAM-SHA-256-PLUS' ? 'p=tls-server-end-point' : stream ? 'y' : 'n'\n\n  return {\n    mechanism,\n    clientNonce,\n    response: gs2Header + ',,n=*,r=' + clientNonce,\n    message: 'SASLInitialResponse',\n  }\n}\n\nasync function continueSession(session, password, serverData, stream) {\n  if (session.message !== 'SASLInitialResponse') {\n    throw new Error('SASL: Last message was not SASLInitialResponse')\n  }\n  if (typeof password !== 'string') {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string')\n  }\n  if (password === '') {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a non-empty string')\n  }\n  if (typeof serverData !== 'string') {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: serverData must be a string')\n  }\n\n  const sv = parseServerFirstMessage(serverData)\n\n  if (!sv.nonce.startsWith(session.clientNonce)) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce does not start with client nonce')\n  } else if (sv.nonce.length === session.clientNonce.length) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce is too short')\n  }\n\n  const clientFirstMessageBare = 'n=*,r=' + session.clientNonce\n  const serverFirstMessage = 'r=' + sv.nonce + ',s=' + sv.salt + ',i=' + sv.iteration\n\n  // without channel binding:\n  let channelBinding = stream ? 'eSws' : 'biws' // 'y,,' or 'n,,', base64-encoded\n\n  // override if channel binding is in use:\n  if (session.mechanism === 'SCRAM-SHA-256-PLUS') {\n    const peerCert = stream.getPeerCertificate().raw\n    let hashName = signatureAlgorithmHashFromCertificate(peerCert)\n    if (hashName === 'MD5' || hashName === 'SHA-1') hashName = 'SHA-256'\n    const certHash = await crypto.hashByName(hashName, peerCert)\n    const bindingData = Buffer.concat([Buffer.from('p=tls-server-end-point,,'), Buffer.from(certHash)])\n    channelBinding = bindingData.toString('base64')\n  }\n\n  const clientFinalMessageWithoutProof = 'c=' + channelBinding + ',r=' + sv.nonce\n  const authMessage = clientFirstMessageBare + ',' + serverFirstMessage + ',' + clientFinalMessageWithoutProof\n\n  const saltBytes = Buffer.from(sv.salt, 'base64')\n  const saltedPassword = await crypto.deriveKey(password, saltBytes, sv.iteration)\n  const clientKey = await crypto.hmacSha256(saltedPassword, 'Client Key')\n  const storedKey = await crypto.sha256(clientKey)\n  const clientSignature = await crypto.hmacSha256(storedKey, authMessage)\n  const clientProof = xorBuffers(Buffer.from(clientKey), Buffer.from(clientSignature)).toString('base64')\n  const serverKey = await crypto.hmacSha256(saltedPassword, 'Server Key')\n  const serverSignatureBytes = await crypto.hmacSha256(serverKey, authMessage)\n\n  session.message = 'SASLResponse'\n  session.serverSignature = Buffer.from(serverSignatureBytes).toString('base64')\n  session.response = clientFinalMessageWithoutProof + ',p=' + clientProof\n}\n\nfunction finalizeSession(session, serverData) {\n  if (session.message !== 'SASLResponse') {\n    throw new Error('SASL: Last message was not SASLResponse')\n  }\n  if (typeof serverData !== 'string') {\n    throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: serverData must be a string')\n  }\n\n  const { serverSignature } = parseServerFinalMessage(serverData)\n\n  if (serverSignature !== session.serverSignature) {\n    throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature does not match')\n  }\n}\n\n/**\n * printable       = %x21-2B / %x2D-7E\n *                   ;; Printable ASCII except \",\".\n *                   ;; Note that any \"printable\" is also\n *                   ;; a valid \"value\".\n */\nfunction isPrintableChars(text) {\n  if (typeof text !== 'string') {\n    throw new TypeError('SASL: text must be a string')\n  }\n  return text\n    .split('')\n    .map((_, i) => text.charCodeAt(i))\n    .every((c) => (c >= 0x21 && c <= 0x2b) || (c >= 0x2d && c <= 0x7e))\n}\n\n/**\n * base64-char     = ALPHA / DIGIT / \"/\" / \"+\"\n *\n * base64-4        = 4base64-char\n *\n * base64-3        = 3base64-char \"=\"\n *\n * base64-2        = 2base64-char \"==\"\n *\n * base64          = *base64-4 [base64-3 / base64-2]\n */\nfunction isBase64(text) {\n  return /^(?:[a-zA-Z0-9+/]{4})*(?:[a-zA-Z0-9+/]{2}==|[a-zA-Z0-9+/]{3}=)?$/.test(text)\n}\n\nfunction parseAttributePairs(text) {\n  if (typeof text !== 'string') {\n    throw new TypeError('SASL: attribute pairs text must be a string')\n  }\n\n  return new Map(\n    text.split(',').map((attrValue) => {\n      if (!/^.=/.test(attrValue)) {\n        throw new Error('SASL: Invalid attribute pair entry')\n      }\n      const name = attrValue[0]\n      const value = attrValue.substring(2)\n      return [name, value]\n    })\n  )\n}\n\nfunction parseServerFirstMessage(data) {\n  const attrPairs = parseAttributePairs(data)\n\n  const nonce = attrPairs.get('r')\n  if (!nonce) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce missing')\n  } else if (!isPrintableChars(nonce)) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce must only contain printable characters')\n  }\n  const salt = attrPairs.get('s')\n  if (!salt) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: salt missing')\n  } else if (!isBase64(salt)) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: salt must be base64')\n  }\n  const iterationText = attrPairs.get('i')\n  if (!iterationText) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration missing')\n  } else if (!/^[1-9][0-9]*$/.test(iterationText)) {\n    throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: invalid iteration count')\n  }\n  const iteration = parseInt(iterationText, 10)\n\n  return {\n    nonce,\n    salt,\n    iteration,\n  }\n}\n\nfunction parseServerFinalMessage(serverData) {\n  const attrPairs = parseAttributePairs(serverData)\n  const serverSignature = attrPairs.get('v')\n  if (!serverSignature) {\n    throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature is missing')\n  } else if (!isBase64(serverSignature)) {\n    throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature must be base64')\n  }\n  return {\n    serverSignature,\n  }\n}\n\nfunction xorBuffers(a, b) {\n  if (!Buffer.isBuffer(a)) {\n    throw new TypeError('first argument must be a Buffer')\n  }\n  if (!Buffer.isBuffer(b)) {\n    throw new TypeError('second argument must be a Buffer')\n  }\n  if (a.length !== b.length) {\n    throw new Error('Buffer lengths must match')\n  }\n  if (a.length === 0) {\n    throw new Error('Buffers cannot be empty')\n  }\n  return Buffer.from(a.map((_, i) => a[i] ^ b[i]))\n}\n\nmodule.exports = {\n  startSession,\n  continueSession,\n  finalizeSession,\n}\n", "'use strict'\n\nconst types = require('pg-types')\n\nfunction TypeOverrides(userTypes) {\n  this._types = userTypes || types\n  this.text = {}\n  this.binary = {}\n}\n\nTypeOverrides.prototype.getOverrides = function (format) {\n  switch (format) {\n    case 'text':\n      return this.text\n    case 'binary':\n      return this.binary\n    default:\n      return {}\n  }\n}\n\nTypeOverrides.prototype.setTypeParser = function (oid, format, parseFn) {\n  if (typeof format === 'function') {\n    parseFn = format\n    format = 'text'\n  }\n  this.getOverrides(format)[oid] = parseFn\n}\n\nTypeOverrides.prototype.getTypeParser = function (oid, format) {\n  format = format || 'text'\n  return this.getOverrides(format)[oid] || this._types.getTypeParser(oid, format)\n}\n\nmodule.exports = TypeOverrides\n", "'use strict'\n\n//Parse method copied from https://github.com/brianc/node-postgres\n//Copyright (c) 2010-2014 Brian Carlson (brian.m.carlson@gmail.com)\n//MIT License\n\n//parses a connection string\nfunction parse(str, options = {}) {\n  //unix socket\n  if (str.charAt(0) === '/') {\n    const config = str.split(' ')\n    return { host: config[0], database: config[1] }\n  }\n\n  // Check for empty host in URL\n\n  const config = {}\n  let result\n  let dummyHost = false\n  if (/ |%[^a-f0-9]|%[a-f0-9][^a-f0-9]/i.test(str)) {\n    // Ensure spaces are encoded as %20\n    str = encodeURI(str).replace(/%25(\\d\\d)/g, '%$1')\n  }\n\n  try {\n    try {\n      result = new URL(str, 'postgres://base')\n    } catch (e) {\n      // The URL is invalid so try again with a dummy host\n      result = new URL(str.replace('@/', '@___DUMMY___/'), 'postgres://base')\n      dummyHost = true\n    }\n  } catch (err) {\n    // Remove the input from the error message to avoid leaking sensitive information\n    err.input && (err.input = '*****REDACTED*****')\n    throw err\n  }\n\n  // We'd like to use Object.fromEntries() here but Node.js 10 does not support it\n  for (const entry of result.searchParams.entries()) {\n    config[entry[0]] = entry[1]\n  }\n\n  config.user = config.user || decodeURIComponent(result.username)\n  config.password = config.password || decodeURIComponent(result.password)\n\n  if (result.protocol == 'socket:') {\n    config.host = decodeURI(result.pathname)\n    config.database = result.searchParams.get('db')\n    config.client_encoding = result.searchParams.get('encoding')\n    return config\n  }\n  const hostname = dummyHost ? '' : result.hostname\n  if (!config.host) {\n    // Only set the host if there is no equivalent query param.\n    config.host = decodeURIComponent(hostname)\n  } else if (hostname && /^%2f/i.test(hostname)) {\n    // Only prepend the hostname to the pathname if it is not a URL encoded Unix socket host.\n    result.pathname = hostname + result.pathname\n  }\n  if (!config.port) {\n    // Only set the port if there is no equivalent query param.\n    config.port = result.port\n  }\n\n  const pathname = result.pathname.slice(1) || null\n  config.database = pathname ? decodeURI(pathname) : null\n\n  if (config.ssl === 'true' || config.ssl === '1') {\n    config.ssl = true\n  }\n\n  if (config.ssl === '0') {\n    config.ssl = false\n  }\n\n  if (config.sslcert || config.sslkey || config.sslrootcert || config.sslmode) {\n    config.ssl = {}\n  }\n\n  // Only try to load fs if we expect to read from the disk\n  const fs = config.sslcert || config.sslkey || config.sslrootcert ? require('fs') : null\n\n  if (config.sslcert) {\n    config.ssl.cert = fs.readFileSync(config.sslcert).toString()\n  }\n\n  if (config.sslkey) {\n    config.ssl.key = fs.readFileSync(config.sslkey).toString()\n  }\n\n  if (config.sslrootcert) {\n    config.ssl.ca = fs.readFileSync(config.sslrootcert).toString()\n  }\n\n  if (options.useLibpqCompat && config.uselibpqcompat) {\n    throw new Error('Both useLibpqCompat and uselibpqcompat are set. Please use only one of them.')\n  }\n\n  if (config.uselibpqcompat === 'true' || options.useLibpqCompat) {\n    switch (config.sslmode) {\n      case 'disable': {\n        config.ssl = false\n        break\n      }\n      case 'prefer': {\n        config.ssl.rejectUnauthorized = false\n        break\n      }\n      case 'require': {\n        if (config.sslrootcert) {\n          // If a root CA is specified, behavior of `sslmode=require` will be the same as that of `verify-ca`\n          config.ssl.checkServerIdentity = function () {}\n        } else {\n          config.ssl.rejectUnauthorized = false\n        }\n        break\n      }\n      case 'verify-ca': {\n        if (!config.ssl.ca) {\n          throw new Error(\n            'SECURITY WARNING: Using sslmode=verify-ca requires specifying a CA with sslrootcert. If a public CA is used, verify-ca allows connections to a server that somebody else may have registered with the CA, making you vulnerable to Man-in-the-Middle attacks. Either specify a custom CA certificate with sslrootcert parameter or use sslmode=verify-full for proper security.'\n          )\n        }\n        config.ssl.checkServerIdentity = function () {}\n        break\n      }\n      case 'verify-full': {\n        break\n      }\n    }\n  } else {\n    switch (config.sslmode) {\n      case 'disable': {\n        config.ssl = false\n        break\n      }\n      case 'prefer':\n      case 'require':\n      case 'verify-ca':\n      case 'verify-full': {\n        if (config.sslmode !== 'verify-full') {\n          deprecatedSslModeWarning(config.sslmode)\n        }\n        break\n      }\n      case 'no-verify': {\n        config.ssl.rejectUnauthorized = false\n        break\n      }\n    }\n  }\n\n  return config\n}\n\n// convert pg-connection-string ssl config to a ClientConfig.ConnectionOptions\nfunction toConnectionOptions(sslConfig) {\n  const connectionOptions = Object.entries(sslConfig).reduce((c, [key, value]) => {\n    // we explicitly check for undefined and null instead of `if (value)` because some\n    // options accept falsy values. Example: `ssl.rejectUnauthorized = false`\n    if (value !== undefined && value !== null) {\n      c[key] = value\n    }\n\n    return c\n  }, {})\n\n  return connectionOptions\n}\n\n// convert pg-connection-string config to a ClientConfig\nfunction toClientConfig(config) {\n  const poolConfig = Object.entries(config).reduce((c, [key, value]) => {\n    if (key === 'ssl') {\n      const sslConfig = value\n\n      if (typeof sslConfig === 'boolean') {\n        c[key] = sslConfig\n      }\n\n      if (typeof sslConfig === 'object') {\n        c[key] = toConnectionOptions(sslConfig)\n      }\n    } else if (value !== undefined && value !== null) {\n      if (key === 'port') {\n        // when port is not specified, it is converted into an empty string\n        // we want to avoid NaN or empty string as a values in ClientConfig\n        if (value !== '') {\n          const v = parseInt(value, 10)\n          if (isNaN(v)) {\n            throw new Error(`Invalid ${key}: ${value}`)\n          }\n\n          c[key] = v\n        }\n      } else {\n        c[key] = value\n      }\n    }\n\n    return c\n  }, {})\n\n  return poolConfig\n}\n\n// parses a connection string into ClientConfig\nfunction parseIntoClientConfig(str) {\n  return toClientConfig(parse(str))\n}\n\nfunction deprecatedSslModeWarning(sslmode) {\n  if (!deprecatedSslModeWarning.warned && typeof process !== 'undefined' && process.emitWarning) {\n    deprecatedSslModeWarning.warned = true\n    process.emitWarning(`SECURITY WARNING: The SSL modes 'prefer', 'require', and 'verify-ca' are treated as aliases for 'verify-full'.\nIn the next major version (pg-connection-string v3.0.0 and pg v9.0.0), these modes will adopt standard libpq semantics, which have weaker security guarantees.\n\nTo prepare for this change:\n- If you want the current behavior, explicitly use 'sslmode=verify-full'\n- If you want libpq compatibility now, use 'uselibpqcompat=true&sslmode=${sslmode}'\n\nSee https://www.postgresql.org/docs/current/libpq-ssl.html for libpq SSL mode definitions.`)\n  }\n}\n\nmodule.exports = parse\n\nparse.parse = parse\nparse.toClientConfig = toClientConfig\nparse.parseIntoClientConfig = parseIntoClientConfig\n", "'use strict'\n\nconst dns = require('dns')\n\nconst defaults = require('./defaults')\n\nconst parse = require('pg-connection-string').parse // parses a connection string\n\nconst val = function (key, config, envVar) {\n  if (config[key]) {\n    return config[key]\n  }\n\n  if (envVar === undefined) {\n    envVar = process.env['PG' + key.toUpperCase()]\n  } else if (envVar === false) {\n    // do nothing ... use false\n  } else {\n    envVar = process.env[envVar]\n  }\n\n  return envVar || defaults[key]\n}\n\nconst readSSLConfigFromEnvironment = function () {\n  switch (process.env.PGSSLMODE) {\n    case 'disable':\n      return false\n    case 'prefer':\n    case 'require':\n    case 'verify-ca':\n    case 'verify-full':\n      return true\n    case 'no-verify':\n      return { rejectUnauthorized: false }\n  }\n  return defaults.ssl\n}\n\n// Convert arg to a string, surround in single quotes, and escape single quotes and backslashes\nconst quoteParamValue = function (value) {\n  return \"'\" + ('' + value).replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\") + \"'\"\n}\n\nconst add = function (params, config, paramName) {\n  const value = config[paramName]\n  if (value !== undefined && value !== null) {\n    params.push(paramName + '=' + quoteParamValue(value))\n  }\n}\n\nclass ConnectionParameters {\n  constructor(config) {\n    // if a string is passed, it is a raw connection string so we parse it into a config\n    config = typeof config === 'string' ? parse(config) : config || {}\n\n    // if the config has a connectionString defined, parse IT into the config we use\n    // this will override other default values with what is stored in connectionString\n    if (config.connectionString) {\n      config = Object.assign({}, config, parse(config.connectionString))\n    }\n\n    this.user = val('user', config)\n    this.database = val('database', config)\n\n    if (this.database === undefined) {\n      this.database = this.user\n    }\n\n    this.port = parseInt(val('port', config), 10)\n    this.host = val('host', config)\n\n    // \"hiding\" the password so it doesn't show up in stack traces\n    // or if the client is console.logged\n    Object.defineProperty(this, 'password', {\n      configurable: true,\n      enumerable: false,\n      writable: true,\n      value: val('password', config),\n    })\n\n    this.binary = val('binary', config)\n    this.options = val('options', config)\n\n    this.ssl = typeof config.ssl === 'undefined' ? readSSLConfigFromEnvironment() : config.ssl\n\n    if (typeof this.ssl === 'string') {\n      if (this.ssl === 'true') {\n        this.ssl = true\n      }\n    }\n    // support passing in ssl=no-verify via connection string\n    if (this.ssl === 'no-verify') {\n      this.ssl = { rejectUnauthorized: false }\n    }\n    if (this.ssl && this.ssl.key) {\n      Object.defineProperty(this.ssl, 'key', {\n        enumerable: false,\n      })\n    }\n\n    this.client_encoding = val('client_encoding', config)\n    this.replication = val('replication', config)\n    // a domain socket begins with '/'\n    this.isDomainSocket = !(this.host || '').indexOf('/')\n\n    this.application_name = val('application_name', config, 'PGAPPNAME')\n    this.fallback_application_name = val('fallback_application_name', config, false)\n    this.statement_timeout = val('statement_timeout', config, false)\n    this.lock_timeout = val('lock_timeout', config, false)\n    this.idle_in_transaction_session_timeout = val('idle_in_transaction_session_timeout', config, false)\n    this.query_timeout = val('query_timeout', config, false)\n\n    if (config.connectionTimeoutMillis === undefined) {\n      this.connect_timeout = process.env.PGCONNECT_TIMEOUT || 0\n    } else {\n      this.connect_timeout = Math.floor(config.connectionTimeoutMillis / 1000)\n    }\n\n    if (config.keepAlive === false) {\n      this.keepalives = 0\n    } else if (config.keepAlive === true) {\n      this.keepalives = 1\n    }\n\n    if (typeof config.keepAliveInitialDelayMillis === 'number') {\n      this.keepalives_idle = Math.floor(config.keepAliveInitialDelayMillis / 1000)\n    }\n  }\n\n  getLibpqConnectionString(cb) {\n    const params = []\n    add(params, this, 'user')\n    add(params, this, 'password')\n    add(params, this, 'port')\n    add(params, this, 'application_name')\n    add(params, this, 'fallback_application_name')\n    add(params, this, 'connect_timeout')\n    add(params, this, 'options')\n\n    const ssl = typeof this.ssl === 'object' ? this.ssl : this.ssl ? { sslmode: this.ssl } : {}\n    add(params, ssl, 'sslmode')\n    add(params, ssl, 'sslca')\n    add(params, ssl, 'sslkey')\n    add(params, ssl, 'sslcert')\n    add(params, ssl, 'sslrootcert')\n\n    if (this.database) {\n      params.push('dbname=' + quoteParamValue(this.database))\n    }\n    if (this.replication) {\n      params.push('replication=' + quoteParamValue(this.replication))\n    }\n    if (this.host) {\n      params.push('host=' + quoteParamValue(this.host))\n    }\n    if (this.isDomainSocket) {\n      return cb(null, params.join(' '))\n    }\n    if (this.client_encoding) {\n      params.push('client_encoding=' + quoteParamValue(this.client_encoding))\n    }\n    dns.lookup(this.host, function (err, address) {\n      if (err) return cb(err, null)\n      params.push('hostaddr=' + quoteParamValue(address))\n      return cb(null, params.join(' '))\n    })\n  }\n}\n\nmodule.exports = ConnectionParameters\n", "'use strict'\n\nconst types = require('pg-types')\n\nconst matchRegexp = /^([A-Za-z]+)(?: (\\d+))?(?: (\\d+))?/\n\n// result object returned from query\n// in the 'end' event and also\n// passed as second argument to provided callback\nclass Result {\n  constructor(rowMode, types) {\n    this.command = null\n    this.rowCount = null\n    this.oid = null\n    this.rows = []\n    this.fields = []\n    this._parsers = undefined\n    this._types = types\n    this.RowCtor = null\n    this.rowAsArray = rowMode === 'array'\n    if (this.rowAsArray) {\n      this.parseRow = this._parseRowAsArray\n    }\n    this._prebuiltEmptyResultObject = null\n  }\n\n  // adds a command complete message\n  addCommandComplete(msg) {\n    let match\n    if (msg.text) {\n      // pure javascript\n      match = matchRegexp.exec(msg.text)\n    } else {\n      // native bindings\n      match = matchRegexp.exec(msg.command)\n    }\n    if (match) {\n      this.command = match[1]\n      if (match[3]) {\n        // COMMAND OID ROWS\n        this.oid = parseInt(match[2], 10)\n        this.rowCount = parseInt(match[3], 10)\n      } else if (match[2]) {\n        // COMMAND ROWS\n        this.rowCount = parseInt(match[2], 10)\n      }\n    }\n  }\n\n  _parseRowAsArray(rowData) {\n    const row = new Array(rowData.length)\n    for (let i = 0, len = rowData.length; i < len; i++) {\n      const rawValue = rowData[i]\n      if (rawValue !== null) {\n        row[i] = this._parsers[i](rawValue)\n      } else {\n        row[i] = null\n      }\n    }\n    return row\n  }\n\n  parseRow(rowData) {\n    const row = { ...this._prebuiltEmptyResultObject }\n    for (let i = 0, len = rowData.length; i < len; i++) {\n      const rawValue = rowData[i]\n      const field = this.fields[i].name\n      if (rawValue !== null) {\n        const v = this.fields[i].format === 'binary' ? Buffer.from(rawValue) : rawValue\n        row[field] = this._parsers[i](v)\n      } else {\n        row[field] = null\n      }\n    }\n    return row\n  }\n\n  addRow(row) {\n    this.rows.push(row)\n  }\n\n  addFields(fieldDescriptions) {\n    // clears field definitions\n    // multiple query statements in 1 action can result in multiple sets\n    // of rowDescriptions...eg: 'select NOW(); select 1::int;'\n    // you need to reset the fields\n    this.fields = fieldDescriptions\n    if (this.fields.length) {\n      this._parsers = new Array(fieldDescriptions.length)\n    }\n\n    const row = {}\n\n    for (let i = 0; i < fieldDescriptions.length; i++) {\n      const desc = fieldDescriptions[i]\n      row[desc.name] = null\n\n      if (this._types) {\n        this._parsers[i] = this._types.getTypeParser(desc.dataTypeID, desc.format || 'text')\n      } else {\n        this._parsers[i] = types.getTypeParser(desc.dataTypeID, desc.format || 'text')\n      }\n    }\n\n    this._prebuiltEmptyResultObject = { ...row }\n  }\n}\n\nmodule.exports = Result\n", "'use strict'\n\nconst { EventEmitter } = require('events')\n\nconst Result = require('./result')\nconst utils = require('./utils')\n\nclass Query extends EventEmitter {\n  constructor(config, values, callback) {\n    super()\n\n    config = utils.normalizeQueryConfig(config, values, callback)\n\n    this.text = config.text\n    this.values = config.values\n    this.rows = config.rows\n    this.types = config.types\n    this.name = config.name\n    this.queryMode = config.queryMode\n    this.binary = config.binary\n    // use unique portal name each time\n    this.portal = config.portal || ''\n    this.callback = config.callback\n    this._rowMode = config.rowMode\n    if (process.domain && config.callback) {\n      this.callback = process.domain.bind(config.callback)\n    }\n    this._result = new Result(this._rowMode, this.types)\n\n    // potential for multiple results\n    this._results = this._result\n    this._canceledDueToError = false\n  }\n\n  requiresPreparation() {\n    if (this.queryMode === 'extended') {\n      return true\n    }\n\n    // named queries must always be prepared\n    if (this.name) {\n      return true\n    }\n    // always prepare if there are max number of rows expected per\n    // portal execution\n    if (this.rows) {\n      return true\n    }\n    // don't prepare empty text queries\n    if (!this.text) {\n      return false\n    }\n    // prepare if there are values\n    if (!this.values) {\n      return false\n    }\n    return this.values.length > 0\n  }\n\n  _checkForMultirow() {\n    // if we already have a result with a command property\n    // then we've already executed one query in a multi-statement simple query\n    // turn our results into an array of results\n    if (this._result.command) {\n      if (!Array.isArray(this._results)) {\n        this._results = [this._result]\n      }\n      this._result = new Result(this._rowMode, this._result._types)\n      this._results.push(this._result)\n    }\n  }\n\n  // associates row metadata from the supplied\n  // message with this query object\n  // metadata used when parsing row results\n  handleRowDescription(msg) {\n    this._checkForMultirow()\n    this._result.addFields(msg.fields)\n    this._accumulateRows = this.callback || !this.listeners('row').length\n  }\n\n  handleDataRow(msg) {\n    let row\n\n    if (this._canceledDueToError) {\n      return\n    }\n\n    try {\n      row = this._result.parseRow(msg.fields)\n    } catch (err) {\n      this._canceledDueToError = err\n      return\n    }\n\n    this.emit('row', row, this._result)\n    if (this._accumulateRows) {\n      this._result.addRow(row)\n    }\n  }\n\n  handleCommandComplete(msg, connection) {\n    this._checkForMultirow()\n    this._result.addCommandComplete(msg)\n    // need to sync after each command complete of a prepared statement\n    // if we were using a row count which results in multiple calls to _getRows\n    if (this.rows) {\n      connection.sync()\n    }\n  }\n\n  // if a named prepared statement is created with empty query text\n  // the backend will send an emptyQuery message but *not* a command complete message\n  // since we pipeline sync immediately after execute we don't need to do anything here\n  // unless we have rows specified, in which case we did not pipeline the initial sync call\n  handleEmptyQuery(connection) {\n    if (this.rows) {\n      connection.sync()\n    }\n  }\n\n  handleError(err, connection) {\n    // need to sync after error during a prepared statement\n    if (this._canceledDueToError) {\n      err = this._canceledDueToError\n      this._canceledDueToError = false\n    }\n    // if callback supplied do not emit error event as uncaught error\n    // events will bubble up to node process\n    if (this.callback) {\n      return this.callback(err)\n    }\n    this.emit('error', err)\n  }\n\n  handleReadyForQuery(con) {\n    if (this._canceledDueToError) {\n      return this.handleError(this._canceledDueToError, con)\n    }\n    if (this.callback) {\n      try {\n        this.callback(null, this._results)\n      } catch (err) {\n        process.nextTick(() => {\n          throw err\n        })\n      }\n    }\n    this.emit('end', this._results)\n  }\n\n  submit(connection) {\n    if (typeof this.text !== 'string' && typeof this.name !== 'string') {\n      return new Error('A query must have either text or a name. Supplying neither is unsupported.')\n    }\n    const previous = connection.parsedStatements[this.name]\n    if (this.text && previous && this.text !== previous) {\n      return new Error(`Prepared statements must be unique - '${this.name}' was used for a different statement`)\n    }\n    if (this.values && !Array.isArray(this.values)) {\n      return new Error('Query values must be an array')\n    }\n    if (this.requiresPreparation()) {\n      // If we're using the extended query protocol we fire off several separate commands\n      // to the backend. On some versions of node & some operating system versions\n      // the network stack writes each message separately instead of buffering them together\n      // causing the client & network to send more slowly. Corking & uncorking the stream\n      // allows node to buffer up the messages internally before sending them all off at once.\n      // note: we're checking for existence of cork/uncork because some versions of streams\n      // might not have this (cloudflare?)\n      connection.stream.cork && connection.stream.cork()\n      try {\n        this.prepare(connection)\n      } finally {\n        // while unlikely for this.prepare to throw, if it does & we don't uncork this stream\n        // this client becomes unresponsive, so put in finally block \"just in case\"\n        connection.stream.uncork && connection.stream.uncork()\n      }\n    } else {\n      connection.query(this.text)\n    }\n    return null\n  }\n\n  hasBeenParsed(connection) {\n    return this.name && connection.parsedStatements[this.name]\n  }\n\n  handlePortalSuspended(connection) {\n    this._getRows(connection, this.rows)\n  }\n\n  _getRows(connection, rows) {\n    connection.execute({\n      portal: this.portal,\n      rows: rows,\n    })\n    // if we're not reading pages of rows send the sync command\n    // to indicate the pipeline is finished\n    if (!rows) {\n      connection.sync()\n    } else {\n      // otherwise flush the call out to read more rows\n      connection.flush()\n    }\n  }\n\n  // http://developer.postgresql.org/pgdocs/postgres/protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY\n  prepare(connection) {\n    // TODO refactor this poor encapsulation\n    if (!this.hasBeenParsed(connection)) {\n      connection.parse({\n        text: this.text,\n        name: this.name,\n        types: this.types,\n      })\n    }\n\n    // because we're mapping user supplied values to\n    // postgres wire protocol compatible values it could\n    // throw an exception, so try/catch this section\n    try {\n      connection.bind({\n        portal: this.portal,\n        statement: this.name,\n        values: this.values,\n        binary: this.binary,\n        valueMapper: utils.prepareValue,\n      })\n    } catch (err) {\n      this.handleError(err, connection)\n      return\n    }\n\n    connection.describe({\n      type: 'P',\n      name: this.portal || '',\n    })\n\n    this._getRows(connection, this.rows)\n  }\n\n  handleCopyInResponse(connection) {\n    connection.sendCopyFail('No source stream defined')\n  }\n\n  handleCopyData(msg, connection) {\n    // noop\n  }\n}\n\nmodule.exports = Query\n", "export type Mode = 'text' | 'binary'\n\nexport type MessageName =\n  | 'parseComplete'\n  | 'bindComplete'\n  | 'closeComplete'\n  | 'noData'\n  | 'portalSuspended'\n  | 'replicationStart'\n  | 'emptyQuery'\n  | 'copyDone'\n  | 'copyData'\n  | 'rowDescription'\n  | 'parameterDescription'\n  | 'parameterStatus'\n  | 'backendKeyData'\n  | 'notification'\n  | 'readyForQuery'\n  | 'commandComplete'\n  | 'dataRow'\n  | 'copyInResponse'\n  | 'copyOutResponse'\n  | 'authenticationOk'\n  | 'authenticationMD5Password'\n  | 'authenticationCleartextPassword'\n  | 'authenticationSASL'\n  | 'authenticationSASLContinue'\n  | 'authenticationSASLFinal'\n  | 'error'\n  | 'notice'\n\nexport interface BackendMessage {\n  name: MessageName\n  length: number\n}\n\nexport const parseComplete: BackendMessage = {\n  name: 'parseComplete',\n  length: 5,\n}\n\nexport const bindComplete: BackendMessage = {\n  name: 'bindComplete',\n  length: 5,\n}\n\nexport const closeComplete: BackendMessage = {\n  name: 'closeComplete',\n  length: 5,\n}\n\nexport const noData: BackendMessage = {\n  name: 'noData',\n  length: 5,\n}\n\nexport const portalSuspended: BackendMessage = {\n  name: 'portalSuspended',\n  length: 5,\n}\n\nexport const replicationStart: BackendMessage = {\n  name: 'replicationStart',\n  length: 4,\n}\n\nexport const emptyQuery: BackendMessage = {\n  name: 'emptyQuery',\n  length: 4,\n}\n\nexport const copyDone: BackendMessage = {\n  name: 'copyDone',\n  length: 4,\n}\n\ninterface NoticeOrError {\n  message: string | undefined\n  severity: string | undefined\n  code: string | undefined\n  detail: string | undefined\n  hint: string | undefined\n  position: string | undefined\n  internalPosition: string | undefined\n  internalQuery: string | undefined\n  where: string | undefined\n  schema: string | undefined\n  table: string | undefined\n  column: string | undefined\n  dataType: string | undefined\n  constraint: string | undefined\n  file: string | undefined\n  line: string | undefined\n  routine: string | undefined\n}\n\nexport class DatabaseError extends Error implements NoticeOrError {\n  public severity: string | undefined\n  public code: string | undefined\n  public detail: string | undefined\n  public hint: string | undefined\n  public position: string | undefined\n  public internalPosition: string | undefined\n  public internalQuery: string | undefined\n  public where: string | undefined\n  public schema: string | undefined\n  public table: string | undefined\n  public column: string | undefined\n  public dataType: string | undefined\n  public constraint: string | undefined\n  public file: string | undefined\n  public line: string | undefined\n  public routine: string | undefined\n  constructor(\n    message: string,\n    public readonly length: number,\n    public readonly name: MessageName\n  ) {\n    super(message)\n  }\n}\n\nexport class CopyDataMessage {\n  public readonly name = 'copyData'\n  constructor(\n    public readonly length: number,\n    public readonly chunk: Buffer\n  ) {}\n}\n\nexport class CopyResponse {\n  public readonly columnTypes: number[]\n  constructor(\n    public readonly length: number,\n    public readonly name: MessageName,\n    public readonly binary: boolean,\n    columnCount: number\n  ) {\n    this.columnTypes = new Array(columnCount)\n  }\n}\n\nexport class Field {\n  constructor(\n    public readonly name: string,\n    public readonly tableID: number,\n    public readonly columnID: number,\n    public readonly dataTypeID: number,\n    public readonly dataTypeSize: number,\n    public readonly dataTypeModifier: number,\n    public readonly format: Mode\n  ) {}\n}\n\nexport class RowDescriptionMessage {\n  public readonly name: MessageName = 'rowDescription'\n  public readonly fields: Field[]\n  constructor(\n    public readonly length: number,\n    public readonly fieldCount: number\n  ) {\n    this.fields = new Array(this.fieldCount)\n  }\n}\n\nexport class ParameterDescriptionMessage {\n  public readonly name: MessageName = 'parameterDescription'\n  public readonly dataTypeIDs: number[]\n  constructor(\n    public readonly length: number,\n    public readonly parameterCount: number\n  ) {\n    this.dataTypeIDs = new Array(this.parameterCount)\n  }\n}\n\nexport class ParameterStatusMessage {\n  public readonly name: MessageName = 'parameterStatus'\n  constructor(\n    public readonly length: number,\n    public readonly parameterName: string,\n    public readonly parameterValue: string\n  ) {}\n}\n\nexport class AuthenticationMD5Password implements BackendMessage {\n  public readonly name: MessageName = 'authenticationMD5Password'\n  constructor(\n    public readonly length: number,\n    public readonly salt: Buffer\n  ) {}\n}\n\nexport class BackendKeyDataMessage {\n  public readonly name: MessageName = 'backendKeyData'\n  constructor(\n    public readonly length: number,\n    public readonly processID: number,\n    public readonly secretKey: number\n  ) {}\n}\n\nexport class NotificationResponseMessage {\n  public readonly name: MessageName = 'notification'\n  constructor(\n    public readonly length: number,\n    public readonly processId: number,\n    public readonly channel: string,\n    public readonly payload: string\n  ) {}\n}\n\nexport class ReadyForQueryMessage {\n  public readonly name: MessageName = 'readyForQuery'\n  constructor(\n    public readonly length: number,\n    public readonly status: string\n  ) {}\n}\n\nexport class CommandCompleteMessage {\n  public readonly name: MessageName = 'commandComplete'\n  constructor(\n    public readonly length: number,\n    public readonly text: string\n  ) {}\n}\n\nexport class DataRowMessage {\n  public readonly fieldCount: number\n  public readonly name: MessageName = 'dataRow'\n  constructor(\n    public length: number,\n    public fields: any[]\n  ) {\n    this.fieldCount = fields.length\n  }\n}\n\nexport class NoticeMessage implements BackendMessage, NoticeOrError {\n  constructor(\n    public readonly length: number,\n    public readonly message: string | undefined\n  ) {}\n  public readonly name = 'notice'\n  public severity: string | undefined\n  public code: string | undefined\n  public detail: string | undefined\n  public hint: string | undefined\n  public position: string | undefined\n  public internalPosition: string | undefined\n  public internalQuery: string | undefined\n  public where: string | undefined\n  public schema: string | undefined\n  public table: string | undefined\n  public column: string | undefined\n  public dataType: string | undefined\n  public constraint: string | undefined\n  public file: string | undefined\n  public line: string | undefined\n  public routine: string | undefined\n}\n", "//binary data writer tuned for encoding binary specific to the postgres binary protocol\n\nexport class Writer {\n  private buffer: Buffer\n  private offset: number = 5\n  private headerPosition: number = 0\n  constructor(private size = 256) {\n    this.buffer = Buffer.allocUnsafe(size)\n  }\n\n  private ensure(size: number): void {\n    const remaining = this.buffer.length - this.offset\n    if (remaining < size) {\n      const oldBuffer = this.buffer\n      // exponential growth factor of around ~ 1.5\n      // https://stackoverflow.com/questions/2269063/buffer-growth-strategy\n      const newSize = oldBuffer.length + (oldBuffer.length >> 1) + size\n      this.buffer = Buffer.allocUnsafe(newSize)\n      oldBuffer.copy(this.buffer)\n    }\n  }\n\n  public addInt32(num: number): Writer {\n    this.ensure(4)\n    this.buffer[this.offset++] = (num >>> 24) & 0xff\n    this.buffer[this.offset++] = (num >>> 16) & 0xff\n    this.buffer[this.offset++] = (num >>> 8) & 0xff\n    this.buffer[this.offset++] = (num >>> 0) & 0xff\n    return this\n  }\n\n  public addInt16(num: number): Writer {\n    this.ensure(2)\n    this.buffer[this.offset++] = (num >>> 8) & 0xff\n    this.buffer[this.offset++] = (num >>> 0) & 0xff\n    return this\n  }\n\n  public addCString(string: string): Writer {\n    if (!string) {\n      this.ensure(1)\n    } else {\n      const len = Buffer.byteLength(string)\n      this.ensure(len + 1) // +1 for null terminator\n      this.buffer.write(string, this.offset, 'utf-8')\n      this.offset += len\n    }\n\n    this.buffer[this.offset++] = 0 // null terminator\n    return this\n  }\n\n  public addString(string: string = ''): Writer {\n    const len = Buffer.byteLength(string)\n    this.ensure(len)\n    this.buffer.write(string, this.offset)\n    this.offset += len\n    return this\n  }\n\n  public add(otherBuffer: Buffer): Writer {\n    this.ensure(otherBuffer.length)\n    otherBuffer.copy(this.buffer, this.offset)\n    this.offset += otherBuffer.length\n    return this\n  }\n\n  private join(code?: number): Buffer {\n    if (code) {\n      this.buffer[this.headerPosition] = code\n      //length is everything in this packet minus the code\n      const length = this.offset - (this.headerPosition + 1)\n      this.buffer.writeInt32BE(length, this.headerPosition + 1)\n    }\n    return this.buffer.slice(code ? 0 : 5, this.offset)\n  }\n\n  public flush(code?: number): Buffer {\n    const result = this.join(code)\n    this.offset = 5\n    this.headerPosition = 0\n    this.buffer = Buffer.allocUnsafe(this.size)\n    return result\n  }\n}\n", "import { Writer } from './buffer-writer'\n\nconst enum code {\n  startup = 0x70,\n  query = 0x51,\n  parse = 0x50,\n  bind = 0x42,\n  execute = 0x45,\n  flush = 0x48,\n  sync = 0x53,\n  end = 0x58,\n  close = 0x43,\n  describe = 0x44,\n  copyFromChunk = 0x64,\n  copyDone = 0x63,\n  copyFail = 0x66,\n}\n\nconst writer = new Writer()\n\nconst startup = (opts: Record<string, string>): Buffer => {\n  // protocol version\n  writer.addInt16(3).addInt16(0)\n  for (const key of Object.keys(opts)) {\n    writer.addCString(key).addCString(opts[key])\n  }\n\n  writer.addCString('client_encoding').addCString('UTF8')\n\n  const bodyBuffer = writer.addCString('').flush()\n  // this message is sent without a code\n\n  const length = bodyBuffer.length + 4\n\n  return new Writer().addInt32(length).add(bodyBuffer).flush()\n}\n\nconst requestSsl = (): Buffer => {\n  const response = Buffer.allocUnsafe(8)\n  response.writeInt32BE(8, 0)\n  response.writeInt32BE(80877103, 4)\n  return response\n}\n\nconst password = (password: string): Buffer => {\n  return writer.addCString(password).flush(code.startup)\n}\n\nconst sendSASLInitialResponseMessage = function (mechanism: string, initialResponse: string): Buffer {\n  // 0x70 = 'p'\n  writer.addCString(mechanism).addInt32(Buffer.byteLength(initialResponse)).addString(initialResponse)\n\n  return writer.flush(code.startup)\n}\n\nconst sendSCRAMClientFinalMessage = function (additionalData: string): Buffer {\n  return writer.addString(additionalData).flush(code.startup)\n}\n\nconst query = (text: string): Buffer => {\n  return writer.addCString(text).flush(code.query)\n}\n\ntype ParseOpts = {\n  name?: string\n  types?: number[]\n  text: string\n}\n\nconst emptyArray: any[] = []\n\nconst parse = (query: ParseOpts): Buffer => {\n  // expect something like this:\n  // { name: 'queryName',\n  //   text: 'select * from blah',\n  //   types: ['int8', 'bool'] }\n\n  // normalize missing query names to allow for null\n  const name = query.name || ''\n  if (name.length > 63) {\n    console.error('Warning! Postgres only supports 63 characters for query names.')\n    console.error('You supplied %s (%s)', name, name.length)\n    console.error('This can cause conflicts and silent errors executing queries')\n  }\n\n  const types = query.types || emptyArray\n\n  const len = types.length\n\n  const buffer = writer\n    .addCString(name) // name of query\n    .addCString(query.text) // actual query text\n    .addInt16(len)\n\n  for (let i = 0; i < len; i++) {\n    buffer.addInt32(types[i])\n  }\n\n  return writer.flush(code.parse)\n}\n\ntype ValueMapper = (param: any, index: number) => any\n\ntype BindOpts = {\n  portal?: string\n  binary?: boolean\n  statement?: string\n  values?: any[]\n  // optional map from JS value to postgres value per parameter\n  valueMapper?: ValueMapper\n}\n\nconst paramWriter = new Writer()\n\n// make this a const enum so typescript will inline the value\nconst enum ParamType {\n  STRING = 0,\n  BINARY = 1,\n}\n\nconst writeValues = function (values: any[], valueMapper?: ValueMapper): void {\n  for (let i = 0; i < values.length; i++) {\n    const mappedVal = valueMapper ? valueMapper(values[i], i) : values[i]\n    if (mappedVal == null) {\n      // add the param type (string) to the writer\n      writer.addInt16(ParamType.STRING)\n      // write -1 to the param writer to indicate null\n      paramWriter.addInt32(-1)\n    } else if (mappedVal instanceof Buffer) {\n      // add the param type (binary) to the writer\n      writer.addInt16(ParamType.BINARY)\n      // add the buffer to the param writer\n      paramWriter.addInt32(mappedVal.length)\n      paramWriter.add(mappedVal)\n    } else {\n      // add the param type (string) to the writer\n      writer.addInt16(ParamType.STRING)\n      paramWriter.addInt32(Buffer.byteLength(mappedVal))\n      paramWriter.addString(mappedVal)\n    }\n  }\n}\n\nconst bind = (config: BindOpts = {}): Buffer => {\n  // normalize config\n  const portal = config.portal || ''\n  const statement = config.statement || ''\n  const binary = config.binary || false\n  const values = config.values || emptyArray\n  const len = values.length\n\n  writer.addCString(portal).addCString(statement)\n  writer.addInt16(len)\n\n  writeValues(values, config.valueMapper)\n\n  writer.addInt16(len)\n  writer.add(paramWriter.flush())\n\n  // all results use the same format code\n  writer.addInt16(1)\n  // format code\n  writer.addInt16(binary ? ParamType.BINARY : ParamType.STRING)\n  return writer.flush(code.bind)\n}\n\ntype ExecOpts = {\n  portal?: string\n  rows?: number\n}\n\nconst emptyExecute = Buffer.from([code.execute, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00])\n\nconst execute = (config?: ExecOpts): Buffer => {\n  // this is the happy path for most queries\n  if (!config || (!config.portal && !config.rows)) {\n    return emptyExecute\n  }\n\n  const portal = config.portal || ''\n  const rows = config.rows || 0\n\n  const portalLength = Buffer.byteLength(portal)\n  const len = 4 + portalLength + 1 + 4\n  // one extra bit for code\n  const buff = Buffer.allocUnsafe(1 + len)\n  buff[0] = code.execute\n  buff.writeInt32BE(len, 1)\n  buff.write(portal, 5, 'utf-8')\n  buff[portalLength + 5] = 0 // null terminate portal cString\n  buff.writeUInt32BE(rows, buff.length - 4)\n  return buff\n}\n\nconst cancel = (processID: number, secretKey: number): Buffer => {\n  const buffer = Buffer.allocUnsafe(16)\n  buffer.writeInt32BE(16, 0)\n  buffer.writeInt16BE(1234, 4)\n  buffer.writeInt16BE(5678, 6)\n  buffer.writeInt32BE(processID, 8)\n  buffer.writeInt32BE(secretKey, 12)\n  return buffer\n}\n\ntype PortalOpts = {\n  type: 'S' | 'P'\n  name?: string\n}\n\nconst cstringMessage = (code: code, string: string): Buffer => {\n  const stringLen = Buffer.byteLength(string)\n  const len = 4 + stringLen + 1\n  // one extra bit for code\n  const buffer = Buffer.allocUnsafe(1 + len)\n  buffer[0] = code\n  buffer.writeInt32BE(len, 1)\n  buffer.write(string, 5, 'utf-8')\n  buffer[len] = 0 // null terminate cString\n  return buffer\n}\n\nconst emptyDescribePortal = writer.addCString('P').flush(code.describe)\nconst emptyDescribeStatement = writer.addCString('S').flush(code.describe)\n\nconst describe = (msg: PortalOpts): Buffer => {\n  return msg.name\n    ? cstringMessage(code.describe, `${msg.type}${msg.name || ''}`)\n    : msg.type === 'P'\n    ? emptyDescribePortal\n    : emptyDescribeStatement\n}\n\nconst close = (msg: PortalOpts): Buffer => {\n  const text = `${msg.type}${msg.name || ''}`\n  return cstringMessage(code.close, text)\n}\n\nconst copyData = (chunk: Buffer): Buffer => {\n  return writer.add(chunk).flush(code.copyFromChunk)\n}\n\nconst copyFail = (message: string): Buffer => {\n  return cstringMessage(code.copyFail, message)\n}\n\nconst codeOnlyBuffer = (code: code): Buffer => Buffer.from([code, 0x00, 0x00, 0x00, 0x04])\n\nconst flushBuffer = codeOnlyBuffer(code.flush)\nconst syncBuffer = codeOnlyBuffer(code.sync)\nconst endBuffer = codeOnlyBuffer(code.end)\nconst copyDoneBuffer = codeOnlyBuffer(code.copyDone)\n\nconst serialize = {\n  startup,\n  password,\n  requestSsl,\n  sendSASLInitialResponseMessage,\n  sendSCRAMClientFinalMessage,\n  query,\n  parse,\n  bind,\n  execute,\n  describe,\n  close,\n  flush: () => flushBuffer,\n  sync: () => syncBuffer,\n  end: () => endBuffer,\n  copyData,\n  copyDone: () => copyDoneBuffer,\n  copyFail,\n  cancel,\n}\n\nexport { serialize }\n", "export class BufferReader {\n  private buffer: Buffer = Buffer.allocUnsafe(0)\n\n  // TODO(bmc): support non-utf8 encoding?\n  private encoding: string = 'utf-8'\n\n  constructor(private offset: number = 0) {}\n\n  public setBuffer(offset: number, buffer: Buffer): void {\n    this.offset = offset\n    this.buffer = buffer\n  }\n\n  public int16(): number {\n    const result = this.buffer.readInt16BE(this.offset)\n    this.offset += 2\n    return result\n  }\n\n  public byte(): number {\n    const result = this.buffer[this.offset]\n    this.offset++\n    return result\n  }\n\n  public int32(): number {\n    const result = this.buffer.readInt32BE(this.offset)\n    this.offset += 4\n    return result\n  }\n\n  public uint32(): number {\n    const result = this.buffer.readUInt32BE(this.offset)\n    this.offset += 4\n    return result\n  }\n\n  public string(length: number): string {\n    const result = this.buffer.toString(this.encoding, this.offset, this.offset + length)\n    this.offset += length\n    return result\n  }\n\n  public cstring(): string {\n    const start = this.offset\n    let end = start\n    // eslint-disable-next-line no-empty\n    while (this.buffer[end++] !== 0) {}\n    this.offset = end\n    return this.buffer.toString(this.encoding, start, end - 1)\n  }\n\n  public bytes(length: number): Buffer {\n    const result = this.buffer.slice(this.offset, this.offset + length)\n    this.offset += length\n    return result\n  }\n}\n", "import { TransformOptions } from 'stream'\nimport {\n  Mode,\n  bindComplete,\n  parseComplete,\n  closeComplete,\n  noData,\n  portalSuspended,\n  copyDone,\n  replicationStart,\n  emptyQuery,\n  ReadyForQueryMessage,\n  CommandCompleteMessage,\n  CopyDataMessage,\n  CopyResponse,\n  NotificationResponseMessage,\n  RowDescriptionMessage,\n  ParameterDescriptionMessage,\n  Field,\n  DataRowMessage,\n  ParameterStatusMessage,\n  BackendKeyDataMessage,\n  DatabaseError,\n  BackendMessage,\n  MessageName,\n  AuthenticationMD5Password,\n  NoticeMessage,\n} from './messages'\nimport { BufferReader } from './buffer-reader'\n\n// every message is prefixed with a single bye\nconst CODE_LENGTH = 1\n// every message has an int32 length which includes itself but does\n// NOT include the code in the length\nconst LEN_LENGTH = 4\n\nconst HEADER_LENGTH = CODE_LENGTH + LEN_LENGTH\n\n// A placeholder for a `BackendMessage`\u2019s length value that will be set after construction.\nconst LATEINIT_LENGTH = -1\n\nexport type Packet = {\n  code: number\n  packet: Buffer\n}\n\nconst emptyBuffer = Buffer.allocUnsafe(0)\n\ntype StreamOptions = TransformOptions & {\n  mode: Mode\n}\n\nconst enum MessageCodes {\n  DataRow = 0x44, // D\n  ParseComplete = 0x31, // 1\n  BindComplete = 0x32, // 2\n  CloseComplete = 0x33, // 3\n  CommandComplete = 0x43, // C\n  ReadyForQuery = 0x5a, // Z\n  NoData = 0x6e, // n\n  NotificationResponse = 0x41, // A\n  AuthenticationResponse = 0x52, // R\n  ParameterStatus = 0x53, // S\n  BackendKeyData = 0x4b, // K\n  ErrorMessage = 0x45, // E\n  NoticeMessage = 0x4e, // N\n  RowDescriptionMessage = 0x54, // T\n  ParameterDescriptionMessage = 0x74, // t\n  PortalSuspended = 0x73, // s\n  ReplicationStart = 0x57, // W\n  EmptyQuery = 0x49, // I\n  CopyIn = 0x47, // G\n  CopyOut = 0x48, // H\n  CopyDone = 0x63, // c\n  CopyData = 0x64, // d\n}\n\nexport type MessageCallback = (msg: BackendMessage) => void\n\nexport class Parser {\n  private buffer: Buffer = emptyBuffer\n  private bufferLength: number = 0\n  private bufferOffset: number = 0\n  private reader = new BufferReader()\n  private mode: Mode\n\n  constructor(opts?: StreamOptions) {\n    if (opts?.mode === 'binary') {\n      throw new Error('Binary mode not supported yet')\n    }\n    this.mode = opts?.mode || 'text'\n  }\n\n  public parse(buffer: Buffer, callback: MessageCallback) {\n    this.mergeBuffer(buffer)\n    const bufferFullLength = this.bufferOffset + this.bufferLength\n    let offset = this.bufferOffset\n    while (offset + HEADER_LENGTH <= bufferFullLength) {\n      // code is 1 byte long - it identifies the message type\n      const code = this.buffer[offset]\n      // length is 1 Uint32BE - it is the length of the message EXCLUDING the code\n      const length = this.buffer.readUInt32BE(offset + CODE_LENGTH)\n      const fullMessageLength = CODE_LENGTH + length\n      if (fullMessageLength + offset <= bufferFullLength) {\n        const message = this.handlePacket(offset + HEADER_LENGTH, code, length, this.buffer)\n        callback(message)\n        offset += fullMessageLength\n      } else {\n        break\n      }\n    }\n    if (offset === bufferFullLength) {\n      // No more use for the buffer\n      this.buffer = emptyBuffer\n      this.bufferLength = 0\n      this.bufferOffset = 0\n    } else {\n      // Adjust the cursors of remainingBuffer\n      this.bufferLength = bufferFullLength - offset\n      this.bufferOffset = offset\n    }\n  }\n\n  private mergeBuffer(buffer: Buffer): void {\n    if (this.bufferLength > 0) {\n      const newLength = this.bufferLength + buffer.byteLength\n      const newFullLength = newLength + this.bufferOffset\n      if (newFullLength > this.buffer.byteLength) {\n        // We can't concat the new buffer with the remaining one\n        let newBuffer: Buffer\n        if (newLength <= this.buffer.byteLength && this.bufferOffset >= this.bufferLength) {\n          // We can move the relevant part to the beginning of the buffer instead of allocating a new buffer\n          newBuffer = this.buffer\n        } else {\n          // Allocate a new larger buffer\n          let newBufferLength = this.buffer.byteLength * 2\n          while (newLength >= newBufferLength) {\n            newBufferLength *= 2\n          }\n          newBuffer = Buffer.allocUnsafe(newBufferLength)\n        }\n        // Move the remaining buffer to the new one\n        this.buffer.copy(newBuffer, 0, this.bufferOffset, this.bufferOffset + this.bufferLength)\n        this.buffer = newBuffer\n        this.bufferOffset = 0\n      }\n      // Concat the new buffer with the remaining one\n      buffer.copy(this.buffer, this.bufferOffset + this.bufferLength)\n      this.bufferLength = newLength\n    } else {\n      this.buffer = buffer\n      this.bufferOffset = 0\n      this.bufferLength = buffer.byteLength\n    }\n  }\n\n  private handlePacket(offset: number, code: number, length: number, bytes: Buffer): BackendMessage {\n    const { reader } = this\n\n    // NOTE: This undesirably retains the buffer in `this.reader` if the `parse*Message` calls below throw. However, those should only throw in the case of a protocol error, which normally results in the reader being discarded.\n    reader.setBuffer(offset, bytes)\n\n    let message: BackendMessage\n\n    switch (code) {\n      case MessageCodes.BindComplete:\n        message = bindComplete\n        break\n      case MessageCodes.ParseComplete:\n        message = parseComplete\n        break\n      case MessageCodes.CloseComplete:\n        message = closeComplete\n        break\n      case MessageCodes.NoData:\n        message = noData\n        break\n      case MessageCodes.PortalSuspended:\n        message = portalSuspended\n        break\n      case MessageCodes.CopyDone:\n        message = copyDone\n        break\n      case MessageCodes.ReplicationStart:\n        message = replicationStart\n        break\n      case MessageCodes.EmptyQuery:\n        message = emptyQuery\n        break\n      case MessageCodes.DataRow:\n        message = parseDataRowMessage(reader)\n        break\n      case MessageCodes.CommandComplete:\n        message = parseCommandCompleteMessage(reader)\n        break\n      case MessageCodes.ReadyForQuery:\n        message = parseReadyForQueryMessage(reader)\n        break\n      case MessageCodes.NotificationResponse:\n        message = parseNotificationMessage(reader)\n        break\n      case MessageCodes.AuthenticationResponse:\n        message = parseAuthenticationResponse(reader, length)\n        break\n      case MessageCodes.ParameterStatus:\n        message = parseParameterStatusMessage(reader)\n        break\n      case MessageCodes.BackendKeyData:\n        message = parseBackendKeyData(reader)\n        break\n      case MessageCodes.ErrorMessage:\n        message = parseErrorMessage(reader, 'error')\n        break\n      case MessageCodes.NoticeMessage:\n        message = parseErrorMessage(reader, 'notice')\n        break\n      case MessageCodes.RowDescriptionMessage:\n        message = parseRowDescriptionMessage(reader)\n        break\n      case MessageCodes.ParameterDescriptionMessage:\n        message = parseParameterDescriptionMessage(reader)\n        break\n      case MessageCodes.CopyIn:\n        message = parseCopyInMessage(reader)\n        break\n      case MessageCodes.CopyOut:\n        message = parseCopyOutMessage(reader)\n        break\n      case MessageCodes.CopyData:\n        message = parseCopyData(reader, length)\n        break\n      default:\n        return new DatabaseError('received invalid response: ' + code.toString(16), length, 'error')\n    }\n\n    reader.setBuffer(0, emptyBuffer)\n\n    message.length = length\n    return message\n  }\n}\n\nconst parseReadyForQueryMessage = (reader: BufferReader) => {\n  const status = reader.string(1)\n  return new ReadyForQueryMessage(LATEINIT_LENGTH, status)\n}\n\nconst parseCommandCompleteMessage = (reader: BufferReader) => {\n  const text = reader.cstring()\n  return new CommandCompleteMessage(LATEINIT_LENGTH, text)\n}\n\nconst parseCopyData = (reader: BufferReader, length: number) => {\n  const chunk = reader.bytes(length - 4)\n  return new CopyDataMessage(LATEINIT_LENGTH, chunk)\n}\n\nconst parseCopyInMessage = (reader: BufferReader) => parseCopyMessage(reader, 'copyInResponse')\n\nconst parseCopyOutMessage = (reader: BufferReader) => parseCopyMessage(reader, 'copyOutResponse')\n\nconst parseCopyMessage = (reader: BufferReader, messageName: MessageName) => {\n  const isBinary = reader.byte() !== 0\n  const columnCount = reader.int16()\n  const message = new CopyResponse(LATEINIT_LENGTH, messageName, isBinary, columnCount)\n  for (let i = 0; i < columnCount; i++) {\n    message.columnTypes[i] = reader.int16()\n  }\n  return message\n}\n\nconst parseNotificationMessage = (reader: BufferReader) => {\n  const processId = reader.int32()\n  const channel = reader.cstring()\n  const payload = reader.cstring()\n  return new NotificationResponseMessage(LATEINIT_LENGTH, processId, channel, payload)\n}\n\nconst parseRowDescriptionMessage = (reader: BufferReader) => {\n  const fieldCount = reader.int16()\n  const message = new RowDescriptionMessage(LATEINIT_LENGTH, fieldCount)\n  for (let i = 0; i < fieldCount; i++) {\n    message.fields[i] = parseField(reader)\n  }\n  return message\n}\n\nconst parseField = (reader: BufferReader) => {\n  const name = reader.cstring()\n  const tableID = reader.uint32()\n  const columnID = reader.int16()\n  const dataTypeID = reader.uint32()\n  const dataTypeSize = reader.int16()\n  const dataTypeModifier = reader.int32()\n  const mode = reader.int16() === 0 ? 'text' : 'binary'\n  return new Field(name, tableID, columnID, dataTypeID, dataTypeSize, dataTypeModifier, mode)\n}\n\nconst parseParameterDescriptionMessage = (reader: BufferReader) => {\n  const parameterCount = reader.int16()\n  const message = new ParameterDescriptionMessage(LATEINIT_LENGTH, parameterCount)\n  for (let i = 0; i < parameterCount; i++) {\n    message.dataTypeIDs[i] = reader.int32()\n  }\n  return message\n}\n\nconst parseDataRowMessage = (reader: BufferReader) => {\n  const fieldCount = reader.int16()\n  const fields: any[] = new Array(fieldCount)\n  for (let i = 0; i < fieldCount; i++) {\n    const len = reader.int32()\n    // a -1 for length means the value of the field is null\n    fields[i] = len === -1 ? null : reader.string(len)\n  }\n  return new DataRowMessage(LATEINIT_LENGTH, fields)\n}\n\nconst parseParameterStatusMessage = (reader: BufferReader) => {\n  const name = reader.cstring()\n  const value = reader.cstring()\n  return new ParameterStatusMessage(LATEINIT_LENGTH, name, value)\n}\n\nconst parseBackendKeyData = (reader: BufferReader) => {\n  const processID = reader.int32()\n  const secretKey = reader.int32()\n  return new BackendKeyDataMessage(LATEINIT_LENGTH, processID, secretKey)\n}\n\nconst parseAuthenticationResponse = (reader: BufferReader, length: number) => {\n  const code = reader.int32()\n  // TODO(bmc): maybe better types here\n  const message: BackendMessage & any = {\n    name: 'authenticationOk',\n    length,\n  }\n\n  switch (code) {\n    case 0: // AuthenticationOk\n      break\n    case 3: // AuthenticationCleartextPassword\n      if (message.length === 8) {\n        message.name = 'authenticationCleartextPassword'\n      }\n      break\n    case 5: // AuthenticationMD5Password\n      if (message.length === 12) {\n        message.name = 'authenticationMD5Password'\n        const salt = reader.bytes(4)\n        return new AuthenticationMD5Password(LATEINIT_LENGTH, salt)\n      }\n      break\n    case 10: // AuthenticationSASL\n      {\n        message.name = 'authenticationSASL'\n        message.mechanisms = []\n        let mechanism: string\n        do {\n          mechanism = reader.cstring()\n          if (mechanism) {\n            message.mechanisms.push(mechanism)\n          }\n        } while (mechanism)\n      }\n      break\n    case 11: // AuthenticationSASLContinue\n      message.name = 'authenticationSASLContinue'\n      message.data = reader.string(length - 8)\n      break\n    case 12: // AuthenticationSASLFinal\n      message.name = 'authenticationSASLFinal'\n      message.data = reader.string(length - 8)\n      break\n    default:\n      throw new Error('Unknown authenticationOk message type ' + code)\n  }\n  return message\n}\n\nconst parseErrorMessage = (reader: BufferReader, name: MessageName) => {\n  const fields: Record<string, string> = {}\n  let fieldType = reader.string(1)\n  while (fieldType !== '\\0') {\n    fields[fieldType] = reader.cstring()\n    fieldType = reader.string(1)\n  }\n\n  const messageValue = fields.M\n\n  const message =\n    name === 'notice'\n      ? new NoticeMessage(LATEINIT_LENGTH, messageValue)\n      : new DatabaseError(messageValue, LATEINIT_LENGTH, name)\n\n  message.severity = fields.S\n  message.code = fields.C\n  message.detail = fields.D\n  message.hint = fields.H\n  message.position = fields.P\n  message.internalPosition = fields.p\n  message.internalQuery = fields.q\n  message.where = fields.W\n  message.schema = fields.s\n  message.table = fields.t\n  message.column = fields.c\n  message.dataType = fields.d\n  message.constraint = fields.n\n  message.file = fields.F\n  message.line = fields.L\n  message.routine = fields.R\n  return message\n}\n", "import { DatabaseError } from './messages'\nimport { serialize } from './serializer'\nimport { Parser, MessageCallback } from './parser'\n\nexport function parse(stream: NodeJS.ReadableStream, callback: MessageCallback): Promise<void> {\n  const parser = new Parser()\n  stream.on('data', (buffer: Buffer) => parser.parse(buffer, callback))\n  return new Promise((resolve) => stream.on('end', () => resolve()))\n}\n\nexport { serialize, DatabaseError }\n", "// This is an empty module that is served up when outside of a workerd environment\n// See the `exports` field in package.json\nexport default {}\n", "const { getStream, getSecureStream } = getStreamFuncs()\n\nmodule.exports = {\n  /**\n   * Get a socket stream compatible with the current runtime environment.\n   * @returns {Duplex}\n   */\n  getStream,\n  /**\n   * Get a TLS secured socket, compatible with the current environment,\n   * using the socket and other settings given in `options`.\n   * @returns {Duplex}\n   */\n  getSecureStream,\n}\n\n/**\n * The stream functions that work in Node.js\n */\nfunction getNodejsStreamFuncs() {\n  function getStream(ssl) {\n    const net = require('net')\n    return new net.Socket()\n  }\n\n  function getSecureStream(options) {\n    const tls = require('tls')\n    return tls.connect(options)\n  }\n  return {\n    getStream,\n    getSecureStream,\n  }\n}\n\n/**\n * The stream functions that work in Cloudflare Workers\n */\nfunction getCloudflareStreamFuncs() {\n  function getStream(ssl) {\n    const { CloudflareSocket } = require('pg-cloudflare')\n    return new CloudflareSocket(ssl)\n  }\n\n  function getSecureStream(options) {\n    options.socket.startTls(options)\n    return options.socket\n  }\n  return {\n    getStream,\n    getSecureStream,\n  }\n}\n\n/**\n * Are we running in a Cloudflare Worker?\n *\n * @returns true if the code is currently running inside a Cloudflare Worker.\n */\nfunction isCloudflareRuntime() {\n  // Since 2022-03-21 the `global_navigator` compatibility flag is on for Cloudflare Workers\n  // which means that `navigator.userAgent` will be defined.\n  // eslint-disable-next-line no-undef\n  if (typeof navigator === 'object' && navigator !== null && typeof navigator.userAgent === 'string') {\n    // eslint-disable-next-line no-undef\n    return navigator.userAgent === 'Cloudflare-Workers'\n  }\n  // In case `navigator` or `navigator.userAgent` is not defined then try a more sneaky approach\n  if (typeof Response === 'function') {\n    const resp = new Response(null, { cf: { thing: true } })\n    if (typeof resp.cf === 'object' && resp.cf !== null && resp.cf.thing) {\n      return true\n    }\n  }\n  return false\n}\n\nfunction getStreamFuncs() {\n  if (isCloudflareRuntime()) {\n    return getCloudflareStreamFuncs()\n  }\n  return getNodejsStreamFuncs()\n}\n", "'use strict'\n\nconst EventEmitter = require('events').EventEmitter\n\nconst { parse, serialize } = require('pg-protocol')\nconst { getStream, getSecureStream } = require('./stream')\n\nconst flushBuffer = serialize.flush()\nconst syncBuffer = serialize.sync()\nconst endBuffer = serialize.end()\n\n// TODO(bmc) support binary mode at some point\nclass Connection extends EventEmitter {\n  constructor(config) {\n    super()\n    config = config || {}\n\n    this.stream = config.stream || getStream(config.ssl)\n    if (typeof this.stream === 'function') {\n      this.stream = this.stream(config)\n    }\n\n    this._keepAlive = config.keepAlive\n    this._keepAliveInitialDelayMillis = config.keepAliveInitialDelayMillis\n    this.parsedStatements = {}\n    this.ssl = config.ssl || false\n    this._ending = false\n    this._emitMessage = false\n    const self = this\n    this.on('newListener', function (eventName) {\n      if (eventName === 'message') {\n        self._emitMessage = true\n      }\n    })\n  }\n\n  connect(port, host) {\n    const self = this\n\n    this._connecting = true\n    this.stream.setNoDelay(true)\n    this.stream.connect(port, host)\n\n    this.stream.once('connect', function () {\n      if (self._keepAlive) {\n        self.stream.setKeepAlive(true, self._keepAliveInitialDelayMillis)\n      }\n      self.emit('connect')\n    })\n\n    const reportStreamError = function (error) {\n      // errors about disconnections should be ignored during disconnect\n      if (self._ending && (error.code === 'ECONNRESET' || error.code === 'EPIPE')) {\n        return\n      }\n      self.emit('error', error)\n    }\n    this.stream.on('error', reportStreamError)\n\n    this.stream.on('close', function () {\n      self.emit('end')\n    })\n\n    if (!this.ssl) {\n      return this.attachListeners(this.stream)\n    }\n\n    this.stream.once('data', function (buffer) {\n      const responseCode = buffer.toString('utf8')\n      switch (responseCode) {\n        case 'S': // Server supports SSL connections, continue with a secure connection\n          break\n        case 'N': // Server does not support SSL connections\n          self.stream.end()\n          return self.emit('error', new Error('The server does not support SSL connections'))\n        default:\n          // Any other response byte, including 'E' (ErrorResponse) indicating a server error\n          self.stream.end()\n          return self.emit('error', new Error('There was an error establishing an SSL connection'))\n      }\n      const options = {\n        socket: self.stream,\n      }\n\n      if (self.ssl !== true) {\n        Object.assign(options, self.ssl)\n\n        if ('key' in self.ssl) {\n          options.key = self.ssl.key\n        }\n      }\n\n      const net = require('net')\n      if (net.isIP && net.isIP(host) === 0) {\n        options.servername = host\n      }\n      try {\n        self.stream = getSecureStream(options)\n      } catch (err) {\n        return self.emit('error', err)\n      }\n      self.attachListeners(self.stream)\n      self.stream.on('error', reportStreamError)\n\n      self.emit('sslconnect')\n    })\n  }\n\n  attachListeners(stream) {\n    parse(stream, (msg) => {\n      const eventName = msg.name === 'error' ? 'errorMessage' : msg.name\n      if (this._emitMessage) {\n        this.emit('message', msg)\n      }\n      this.emit(eventName, msg)\n    })\n  }\n\n  requestSsl() {\n    this.stream.write(serialize.requestSsl())\n  }\n\n  startup(config) {\n    this.stream.write(serialize.startup(config))\n  }\n\n  cancel(processID, secretKey) {\n    this._send(serialize.cancel(processID, secretKey))\n  }\n\n  password(password) {\n    this._send(serialize.password(password))\n  }\n\n  sendSASLInitialResponseMessage(mechanism, initialResponse) {\n    this._send(serialize.sendSASLInitialResponseMessage(mechanism, initialResponse))\n  }\n\n  sendSCRAMClientFinalMessage(additionalData) {\n    this._send(serialize.sendSCRAMClientFinalMessage(additionalData))\n  }\n\n  _send(buffer) {\n    if (!this.stream.writable) {\n      return false\n    }\n    return this.stream.write(buffer)\n  }\n\n  query(text) {\n    this._send(serialize.query(text))\n  }\n\n  // send parse message\n  parse(query) {\n    this._send(serialize.parse(query))\n  }\n\n  // send bind message\n  bind(config) {\n    this._send(serialize.bind(config))\n  }\n\n  // send execute message\n  execute(config) {\n    this._send(serialize.execute(config))\n  }\n\n  flush() {\n    if (this.stream.writable) {\n      this.stream.write(flushBuffer)\n    }\n  }\n\n  sync() {\n    this._ending = true\n    this._send(syncBuffer)\n  }\n\n  ref() {\n    this.stream.ref()\n  }\n\n  unref() {\n    this.stream.unref()\n  }\n\n  end() {\n    // 0x58 = 'X'\n    this._ending = true\n    if (!this._connecting || !this.stream.writable) {\n      this.stream.end()\n      return\n    }\n    return this.stream.write(endBuffer, () => {\n      this.stream.end()\n    })\n  }\n\n  close(msg) {\n    this._send(serialize.close(msg))\n  }\n\n  describe(msg) {\n    this._send(serialize.describe(msg))\n  }\n\n  sendCopyFromChunk(chunk) {\n    this._send(serialize.copyData(chunk))\n  }\n\n  endCopyFrom() {\n    this._send(serialize.copyDone())\n  }\n\n  sendCopyFail(msg) {\n    this._send(serialize.copyFail(msg))\n  }\n}\n\nmodule.exports = Connection\n", "/*\nCopyright (c) 2014-2021, Matteo Collina <hello@matteocollina.com>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n*/\n\n'use strict'\n\nconst { Transform } = require('stream')\nconst { StringDecoder } = require('string_decoder')\nconst kLast = Symbol('last')\nconst kDecoder = Symbol('decoder')\n\nfunction transform (chunk, enc, cb) {\n  let list\n  if (this.overflow) { // Line buffer is full. Skip to start of next line.\n    const buf = this[kDecoder].write(chunk)\n    list = buf.split(this.matcher)\n\n    if (list.length === 1) return cb() // Line ending not found. Discard entire chunk.\n\n    // Line ending found. Discard trailing fragment of previous line and reset overflow state.\n    list.shift()\n    this.overflow = false\n  } else {\n    this[kLast] += this[kDecoder].write(chunk)\n    list = this[kLast].split(this.matcher)\n  }\n\n  this[kLast] = list.pop()\n\n  for (let i = 0; i < list.length; i++) {\n    try {\n      push(this, this.mapper(list[i]))\n    } catch (error) {\n      return cb(error)\n    }\n  }\n\n  this.overflow = this[kLast].length > this.maxLength\n  if (this.overflow && !this.skipOverflow) {\n    cb(new Error('maximum buffer reached'))\n    return\n  }\n\n  cb()\n}\n\nfunction flush (cb) {\n  // forward any gibberish left in there\n  this[kLast] += this[kDecoder].end()\n\n  if (this[kLast]) {\n    try {\n      push(this, this.mapper(this[kLast]))\n    } catch (error) {\n      return cb(error)\n    }\n  }\n\n  cb()\n}\n\nfunction push (self, val) {\n  if (val !== undefined) {\n    self.push(val)\n  }\n}\n\nfunction noop (incoming) {\n  return incoming\n}\n\nfunction split (matcher, mapper, options) {\n  // Set defaults for any arguments not supplied.\n  matcher = matcher || /\\r?\\n/\n  mapper = mapper || noop\n  options = options || {}\n\n  // Test arguments explicitly.\n  switch (arguments.length) {\n    case 1:\n      // If mapper is only argument.\n      if (typeof matcher === 'function') {\n        mapper = matcher\n        matcher = /\\r?\\n/\n      // If options is only argument.\n      } else if (typeof matcher === 'object' && !(matcher instanceof RegExp) && !matcher[Symbol.split]) {\n        options = matcher\n        matcher = /\\r?\\n/\n      }\n      break\n\n    case 2:\n      // If mapper and options are arguments.\n      if (typeof matcher === 'function') {\n        options = mapper\n        mapper = matcher\n        matcher = /\\r?\\n/\n      // If matcher and options are arguments.\n      } else if (typeof mapper === 'object') {\n        options = mapper\n        mapper = noop\n      }\n  }\n\n  options = Object.assign({}, options)\n  options.autoDestroy = true\n  options.transform = transform\n  options.flush = flush\n  options.readableObjectMode = true\n\n  const stream = new Transform(options)\n\n  stream[kLast] = ''\n  stream[kDecoder] = new StringDecoder('utf8')\n  stream.matcher = matcher\n  stream.mapper = mapper\n  stream.maxLength = options.maxLength\n  stream.skipOverflow = options.skipOverflow || false\n  stream.overflow = false\n  stream._destroy = function (err, cb) {\n    // Weird Node v12 bug that we need to work around\n    this._writableState.errorEmitted = false\n    cb(err)\n  }\n\n  return stream\n}\n\nmodule.exports = split\n", "'use strict';\n\nvar path = require('path')\n  , Stream = require('stream').Stream\n  , split = require('split2')\n  , util = require('util')\n  , defaultPort = 5432\n  , isWin = (process.platform === 'win32')\n  , warnStream = process.stderr\n;\n\n\nvar S_IRWXG = 56     //    00070(8)\n  , S_IRWXO = 7      //    00007(8)\n  , S_IFMT  = 61440  // 00170000(8)\n  , S_IFREG = 32768  //  0100000(8)\n;\nfunction isRegFile(mode) {\n    return ((mode & S_IFMT) == S_IFREG);\n}\n\nvar fieldNames = [ 'host', 'port', 'database', 'user', 'password' ];\nvar nrOfFields = fieldNames.length;\nvar passKey = fieldNames[ nrOfFields -1 ];\n\n\nfunction warn() {\n    var isWritable = (\n        warnStream instanceof Stream &&\n          true === warnStream.writable\n    );\n\n    if (isWritable) {\n        var args = Array.prototype.slice.call(arguments).concat(\"\\n\");\n        warnStream.write( util.format.apply(util, args) );\n    }\n}\n\n\nObject.defineProperty(module.exports, 'isWin', {\n    get : function() {\n        return isWin;\n    } ,\n    set : function(val) {\n        isWin = val;\n    }\n});\n\n\nmodule.exports.warnTo = function(stream) {\n    var old = warnStream;\n    warnStream = stream;\n    return old;\n};\n\nmodule.exports.getFileName = function(rawEnv){\n    var env = rawEnv || process.env;\n    var file = env.PGPASSFILE || (\n        isWin ?\n          path.join( env.APPDATA || './' , 'postgresql', 'pgpass.conf' ) :\n          path.join( env.HOME || './', '.pgpass' )\n    );\n    return file;\n};\n\nmodule.exports.usePgPass = function(stats, fname) {\n    if (Object.prototype.hasOwnProperty.call(process.env, 'PGPASSWORD')) {\n        return false;\n    }\n\n    if (isWin) {\n        return true;\n    }\n\n    fname = fname || '<unkn>';\n\n    if (! isRegFile(stats.mode)) {\n        warn('WARNING: password file \"%s\" is not a plain file', fname);\n        return false;\n    }\n\n    if (stats.mode & (S_IRWXG | S_IRWXO)) {\n        /* If password file is insecure, alert the user and ignore it. */\n        warn('WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less', fname);\n        return false;\n    }\n\n    return true;\n};\n\n\nvar matcher = module.exports.match = function(connInfo, entry) {\n    return fieldNames.slice(0, -1).reduce(function(prev, field, idx){\n        if (idx == 1) {\n            // the port\n            if ( Number( connInfo[field] || defaultPort ) === Number( entry[field] ) ) {\n                return prev && true;\n            }\n        }\n        return prev && (\n            entry[field] === '*' ||\n              entry[field] === connInfo[field]\n        );\n    }, true);\n};\n\n\nmodule.exports.getPassword = function(connInfo, stream, cb) {\n    var pass;\n    var lineStream = stream.pipe(split());\n\n    function onLine(line) {\n        var entry = parseLine(line);\n        if (entry && isValidEntry(entry) && matcher(connInfo, entry)) {\n            pass = entry[passKey];\n            lineStream.end(); // -> calls onEnd(), but pass is set now\n        }\n    }\n\n    var onEnd = function() {\n        stream.destroy();\n        cb(pass);\n    };\n\n    var onErr = function(err) {\n        stream.destroy();\n        warn('WARNING: error on reading file: %s', err);\n        cb(undefined);\n    };\n\n    stream.on('error', onErr);\n    lineStream\n        .on('data', onLine)\n        .on('end', onEnd)\n        .on('error', onErr)\n    ;\n\n};\n\n\nvar parseLine = module.exports.parseLine = function(line) {\n    if (line.length < 11 || line.match(/^\\s+#/)) {\n        return null;\n    }\n\n    var curChar = '';\n    var prevChar = '';\n    var fieldIdx = 0;\n    var startIdx = 0;\n    var endIdx = 0;\n    var obj = {};\n    var isLastField = false;\n    var addToObj = function(idx, i0, i1) {\n        var field = line.substring(i0, i1);\n\n        if (! Object.hasOwnProperty.call(process.env, 'PGPASS_NO_DEESCAPE')) {\n            field = field.replace(/\\\\([:\\\\])/g, '$1');\n        }\n\n        obj[ fieldNames[idx] ] = field;\n    };\n\n    for (var i = 0 ; i < line.length-1 ; i += 1) {\n        curChar = line.charAt(i+1);\n        prevChar = line.charAt(i);\n\n        isLastField = (fieldIdx == nrOfFields-1);\n\n        if (isLastField) {\n            addToObj(fieldIdx, startIdx);\n            break;\n        }\n\n        if (i >= 0 && curChar == ':' && prevChar !== '\\\\') {\n            addToObj(fieldIdx, startIdx, i+1);\n\n            startIdx = i+2;\n            fieldIdx += 1;\n        }\n    }\n\n    obj = ( Object.keys(obj).length === nrOfFields ) ? obj : null;\n\n    return obj;\n};\n\n\nvar isValidEntry = module.exports.isValidEntry = function(entry){\n    var rules = {\n        // host\n        0 : function(x){\n            return x.length > 0;\n        } ,\n        // port\n        1 : function(x){\n            if (x === '*') {\n                return true;\n            }\n            x = Number(x);\n            return (\n                isFinite(x) &&\n                  x > 0 &&\n                  x < 9007199254740992 &&\n                  Math.floor(x) === x\n            );\n        } ,\n        // database\n        2 : function(x){\n            return x.length > 0;\n        } ,\n        // username\n        3 : function(x){\n            return x.length > 0;\n        } ,\n        // password\n        4 : function(x){\n            return x.length > 0;\n        }\n    };\n\n    for (var idx = 0 ; idx < fieldNames.length ; idx += 1) {\n        var rule = rules[idx];\n        var value = entry[ fieldNames[idx] ] || '';\n\n        var res = rule(value);\n        if (!res) {\n            return false;\n        }\n    }\n\n    return true;\n};\n\n", "'use strict';\n\nvar path = require('path')\n  , fs = require('fs')\n  , helper = require('./helper.js')\n;\n\n\nmodule.exports = function(connInfo, cb) {\n    var file = helper.getFileName();\n    \n    fs.stat(file, function(err, stat){\n        if (err || !helper.usePgPass(stat, file)) {\n            return cb(undefined);\n        }\n\n        var st = fs.createReadStream(file);\n\n        helper.getPassword(connInfo, st, cb);\n    });\n};\n\nmodule.exports.warnTo = helper.warnTo;\n", "const EventEmitter = require('events').EventEmitter\nconst utils = require('./utils')\nconst nodeUtils = require('util')\nconst sasl = require('./crypto/sasl')\nconst TypeOverrides = require('./type-overrides')\n\nconst ConnectionParameters = require('./connection-parameters')\nconst Query = require('./query')\nconst defaults = require('./defaults')\nconst Connection = require('./connection')\nconst crypto = require('./crypto/utils')\n\nconst activeQueryDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'Client.activeQuery is deprecated and will be removed in pg@9.0'\n)\n\nconst queryQueueDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'Client.queryQueue is deprecated and will be removed in pg@9.0.'\n)\n\nconst pgPassDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'pgpass support is deprecated and will be removed in pg@9.0. ' +\n    'You can provide an async function as the password property to the Client/Pool constructor that returns a password instead. Within this function you can call the pgpass module in your own code.'\n)\n\nconst byoPromiseDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'Passing a custom Promise implementation to the Client/Pool constructor is deprecated and will be removed in pg@9.0.'\n)\n\nconst queryQueueLengthDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'Calling client.query() when the client is already executing a query is deprecated and will be removed in pg@9.0. Use async/await or an external async flow control mechanism instead.'\n)\n\nclass Client extends EventEmitter {\n  constructor(config) {\n    super()\n\n    this.connectionParameters = new ConnectionParameters(config)\n    this.user = this.connectionParameters.user\n    this.database = this.connectionParameters.database\n    this.port = this.connectionParameters.port\n    this.host = this.connectionParameters.host\n\n    // \"hiding\" the password so it doesn't show up in stack traces\n    // or if the client is console.logged\n    Object.defineProperty(this, 'password', {\n      configurable: true,\n      enumerable: false,\n      writable: true,\n      value: this.connectionParameters.password,\n    })\n\n    this.replication = this.connectionParameters.replication\n\n    const c = config || {}\n\n    if (c.Promise) {\n      byoPromiseDeprecationNotice()\n    }\n    this._Promise = c.Promise || global.Promise\n    this._types = new TypeOverrides(c.types)\n    this._ending = false\n    this._ended = false\n    this._connecting = false\n    this._connected = false\n    this._connectionError = false\n    this._queryable = true\n    this._activeQuery = null\n\n    this.enableChannelBinding = Boolean(c.enableChannelBinding) // set true to use SCRAM-SHA-256-PLUS when offered\n    this.connection =\n      c.connection ||\n      new Connection({\n        stream: c.stream,\n        ssl: this.connectionParameters.ssl,\n        keepAlive: c.keepAlive || false,\n        keepAliveInitialDelayMillis: c.keepAliveInitialDelayMillis || 0,\n        encoding: this.connectionParameters.client_encoding || 'utf8',\n      })\n    this._queryQueue = []\n    this.binary = c.binary || defaults.binary\n    this.processID = null\n    this.secretKey = null\n    this.ssl = this.connectionParameters.ssl || false\n    // As with Password, make SSL->Key (the private key) non-enumerable.\n    // It won't show up in stack traces\n    // or if the client is console.logged\n    if (this.ssl && this.ssl.key) {\n      Object.defineProperty(this.ssl, 'key', {\n        enumerable: false,\n      })\n    }\n\n    this._connectionTimeoutMillis = c.connectionTimeoutMillis || 0\n  }\n\n  get activeQuery() {\n    activeQueryDeprecationNotice()\n    return this._activeQuery\n  }\n\n  set activeQuery(val) {\n    activeQueryDeprecationNotice()\n    this._activeQuery = val\n  }\n\n  _getActiveQuery() {\n    return this._activeQuery\n  }\n\n  _errorAllQueries(err) {\n    const enqueueError = (query) => {\n      process.nextTick(() => {\n        query.handleError(err, this.connection)\n      })\n    }\n\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery) {\n      enqueueError(activeQuery)\n      this._activeQuery = null\n    }\n\n    this._queryQueue.forEach(enqueueError)\n    this._queryQueue.length = 0\n  }\n\n  _connect(callback) {\n    const self = this\n    const con = this.connection\n    this._connectionCallback = callback\n\n    if (this._connecting || this._connected) {\n      const err = new Error('Client has already been connected. You cannot reuse a client.')\n      process.nextTick(() => {\n        callback(err)\n      })\n      return\n    }\n    this._connecting = true\n\n    if (this._connectionTimeoutMillis > 0) {\n      this.connectionTimeoutHandle = setTimeout(() => {\n        con._ending = true\n        con.stream.destroy(new Error('timeout expired'))\n      }, this._connectionTimeoutMillis)\n\n      if (this.connectionTimeoutHandle.unref) {\n        this.connectionTimeoutHandle.unref()\n      }\n    }\n\n    if (this.host && this.host.indexOf('/') === 0) {\n      con.connect(this.host + '/.s.PGSQL.' + this.port)\n    } else {\n      con.connect(this.port, this.host)\n    }\n\n    // once connection is established send startup message\n    con.on('connect', function () {\n      if (self.ssl) {\n        con.requestSsl()\n      } else {\n        con.startup(self.getStartupConf())\n      }\n    })\n\n    con.on('sslconnect', function () {\n      con.startup(self.getStartupConf())\n    })\n\n    this._attachListeners(con)\n\n    con.once('end', () => {\n      const error = this._ending ? new Error('Connection terminated') : new Error('Connection terminated unexpectedly')\n\n      clearTimeout(this.connectionTimeoutHandle)\n      this._errorAllQueries(error)\n      this._ended = true\n\n      if (!this._ending) {\n        // if the connection is ended without us calling .end()\n        // on this client then we have an unexpected disconnection\n        // treat this as an error unless we've already emitted an error\n        // during connection.\n        if (this._connecting && !this._connectionError) {\n          if (this._connectionCallback) {\n            this._connectionCallback(error)\n          } else {\n            this._handleErrorEvent(error)\n          }\n        } else if (!this._connectionError) {\n          this._handleErrorEvent(error)\n        }\n      }\n\n      process.nextTick(() => {\n        this.emit('end')\n      })\n    })\n  }\n\n  connect(callback) {\n    if (callback) {\n      this._connect(callback)\n      return\n    }\n\n    return new this._Promise((resolve, reject) => {\n      this._connect((error) => {\n        if (error) {\n          reject(error)\n        } else {\n          resolve(this)\n        }\n      })\n    })\n  }\n\n  _attachListeners(con) {\n    // password request handling\n    con.on('authenticationCleartextPassword', this._handleAuthCleartextPassword.bind(this))\n    // password request handling\n    con.on('authenticationMD5Password', this._handleAuthMD5Password.bind(this))\n    // password request handling (SASL)\n    con.on('authenticationSASL', this._handleAuthSASL.bind(this))\n    con.on('authenticationSASLContinue', this._handleAuthSASLContinue.bind(this))\n    con.on('authenticationSASLFinal', this._handleAuthSASLFinal.bind(this))\n    con.on('backendKeyData', this._handleBackendKeyData.bind(this))\n    con.on('error', this._handleErrorEvent.bind(this))\n    con.on('errorMessage', this._handleErrorMessage.bind(this))\n    con.on('readyForQuery', this._handleReadyForQuery.bind(this))\n    con.on('notice', this._handleNotice.bind(this))\n    con.on('rowDescription', this._handleRowDescription.bind(this))\n    con.on('dataRow', this._handleDataRow.bind(this))\n    con.on('portalSuspended', this._handlePortalSuspended.bind(this))\n    con.on('emptyQuery', this._handleEmptyQuery.bind(this))\n    con.on('commandComplete', this._handleCommandComplete.bind(this))\n    con.on('parseComplete', this._handleParseComplete.bind(this))\n    con.on('copyInResponse', this._handleCopyInResponse.bind(this))\n    con.on('copyData', this._handleCopyData.bind(this))\n    con.on('notification', this._handleNotification.bind(this))\n  }\n\n  _getPassword(cb) {\n    const con = this.connection\n    if (typeof this.password === 'function') {\n      this._Promise\n        .resolve()\n        .then(() => this.password(this.connectionParameters))\n        .then((pass) => {\n          if (pass !== undefined) {\n            if (typeof pass !== 'string') {\n              con.emit('error', new TypeError('Password must be a string'))\n              return\n            }\n            this.connectionParameters.password = this.password = pass\n          } else {\n            this.connectionParameters.password = this.password = null\n          }\n          cb()\n        })\n        .catch((err) => {\n          con.emit('error', err)\n        })\n    } else if (this.password !== null) {\n      cb()\n    } else {\n      try {\n        const pgPass = require('pgpass')\n        pgPass(this.connectionParameters, (pass) => {\n          if (undefined !== pass) {\n            pgPassDeprecationNotice()\n            this.connectionParameters.password = this.password = pass\n          }\n          cb()\n        })\n      } catch (e) {\n        this.emit('error', e)\n      }\n    }\n  }\n\n  _handleAuthCleartextPassword(msg) {\n    this._getPassword(() => {\n      this.connection.password(this.password)\n    })\n  }\n\n  _handleAuthMD5Password(msg) {\n    this._getPassword(async () => {\n      try {\n        const hashedPassword = await crypto.postgresMd5PasswordHash(this.user, this.password, msg.salt)\n        this.connection.password(hashedPassword)\n      } catch (e) {\n        this.emit('error', e)\n      }\n    })\n  }\n\n  _handleAuthSASL(msg) {\n    this._getPassword(() => {\n      try {\n        this.saslSession = sasl.startSession(msg.mechanisms, this.enableChannelBinding && this.connection.stream)\n        this.connection.sendSASLInitialResponseMessage(this.saslSession.mechanism, this.saslSession.response)\n      } catch (err) {\n        this.connection.emit('error', err)\n      }\n    })\n  }\n\n  async _handleAuthSASLContinue(msg) {\n    try {\n      await sasl.continueSession(\n        this.saslSession,\n        this.password,\n        msg.data,\n        this.enableChannelBinding && this.connection.stream\n      )\n      this.connection.sendSCRAMClientFinalMessage(this.saslSession.response)\n    } catch (err) {\n      this.connection.emit('error', err)\n    }\n  }\n\n  _handleAuthSASLFinal(msg) {\n    try {\n      sasl.finalizeSession(this.saslSession, msg.data)\n      this.saslSession = null\n    } catch (err) {\n      this.connection.emit('error', err)\n    }\n  }\n\n  _handleBackendKeyData(msg) {\n    this.processID = msg.processID\n    this.secretKey = msg.secretKey\n  }\n\n  _handleReadyForQuery(msg) {\n    if (this._connecting) {\n      this._connecting = false\n      this._connected = true\n      clearTimeout(this.connectionTimeoutHandle)\n\n      // process possible callback argument to Client#connect\n      if (this._connectionCallback) {\n        this._connectionCallback(null, this)\n        // remove callback for proper error handling\n        // after the connect event\n        this._connectionCallback = null\n      }\n      this.emit('connect')\n    }\n    const activeQuery = this._getActiveQuery()\n    this._activeQuery = null\n    this.readyForQuery = true\n    if (activeQuery) {\n      activeQuery.handleReadyForQuery(this.connection)\n    }\n    this._pulseQueryQueue()\n  }\n\n  // if we receive an error event or error message\n  // during the connection process we handle it here\n  _handleErrorWhileConnecting(err) {\n    if (this._connectionError) {\n      // TODO(bmc): this is swallowing errors - we shouldn't do this\n      return\n    }\n    this._connectionError = true\n    clearTimeout(this.connectionTimeoutHandle)\n    if (this._connectionCallback) {\n      return this._connectionCallback(err)\n    }\n    this.emit('error', err)\n  }\n\n  // if we're connected and we receive an error event from the connection\n  // this means the socket is dead - do a hard abort of all queries and emit\n  // the socket error on the client as well\n  _handleErrorEvent(err) {\n    if (this._connecting) {\n      return this._handleErrorWhileConnecting(err)\n    }\n    this._queryable = false\n    this._errorAllQueries(err)\n    this.emit('error', err)\n  }\n\n  // handle error messages from the postgres backend\n  _handleErrorMessage(msg) {\n    if (this._connecting) {\n      return this._handleErrorWhileConnecting(msg)\n    }\n    const activeQuery = this._getActiveQuery()\n\n    if (!activeQuery) {\n      this._handleErrorEvent(msg)\n      return\n    }\n\n    this._activeQuery = null\n    activeQuery.handleError(msg, this.connection)\n  }\n\n  _handleRowDescription(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected rowDescription message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // delegate rowDescription to active query\n    activeQuery.handleRowDescription(msg)\n  }\n\n  _handleDataRow(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected dataRow message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // delegate dataRow to active query\n    activeQuery.handleDataRow(msg)\n  }\n\n  _handlePortalSuspended(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected portalSuspended message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // delegate portalSuspended to active query\n    activeQuery.handlePortalSuspended(this.connection)\n  }\n\n  _handleEmptyQuery(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected emptyQuery message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // delegate emptyQuery to active query\n    activeQuery.handleEmptyQuery(this.connection)\n  }\n\n  _handleCommandComplete(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected commandComplete message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // delegate commandComplete to active query\n    activeQuery.handleCommandComplete(msg, this.connection)\n  }\n\n  _handleParseComplete() {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected parseComplete message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    // if a prepared statement has a name and properly parses\n    // we track that its already been executed so we don't parse\n    // it again on the same client\n    if (activeQuery.name) {\n      this.connection.parsedStatements[activeQuery.name] = activeQuery.text\n    }\n  }\n\n  _handleCopyInResponse(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected copyInResponse message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    activeQuery.handleCopyInResponse(this.connection)\n  }\n\n  _handleCopyData(msg) {\n    const activeQuery = this._getActiveQuery()\n    if (activeQuery == null) {\n      const error = new Error('Received unexpected copyData message from backend.')\n      this._handleErrorEvent(error)\n      return\n    }\n    activeQuery.handleCopyData(msg, this.connection)\n  }\n\n  _handleNotification(msg) {\n    this.emit('notification', msg)\n  }\n\n  _handleNotice(msg) {\n    this.emit('notice', msg)\n  }\n\n  getStartupConf() {\n    const params = this.connectionParameters\n\n    const data = {\n      user: params.user,\n      database: params.database,\n    }\n\n    const appName = params.application_name || params.fallback_application_name\n    if (appName) {\n      data.application_name = appName\n    }\n    if (params.replication) {\n      data.replication = '' + params.replication\n    }\n    if (params.statement_timeout) {\n      data.statement_timeout = String(parseInt(params.statement_timeout, 10))\n    }\n    if (params.lock_timeout) {\n      data.lock_timeout = String(parseInt(params.lock_timeout, 10))\n    }\n    if (params.idle_in_transaction_session_timeout) {\n      data.idle_in_transaction_session_timeout = String(parseInt(params.idle_in_transaction_session_timeout, 10))\n    }\n    if (params.options) {\n      data.options = params.options\n    }\n\n    return data\n  }\n\n  cancel(client, query) {\n    if (client.activeQuery === query) {\n      const con = this.connection\n\n      if (this.host && this.host.indexOf('/') === 0) {\n        con.connect(this.host + '/.s.PGSQL.' + this.port)\n      } else {\n        con.connect(this.port, this.host)\n      }\n\n      // once connection is established send cancel message\n      con.on('connect', function () {\n        con.cancel(client.processID, client.secretKey)\n      })\n    } else if (client._queryQueue.indexOf(query) !== -1) {\n      client._queryQueue.splice(client._queryQueue.indexOf(query), 1)\n    }\n  }\n\n  setTypeParser(oid, format, parseFn) {\n    return this._types.setTypeParser(oid, format, parseFn)\n  }\n\n  getTypeParser(oid, format) {\n    return this._types.getTypeParser(oid, format)\n  }\n\n  // escapeIdentifier and escapeLiteral moved to utility functions & exported\n  // on PG\n  // re-exported here for backwards compatibility\n  escapeIdentifier(str) {\n    return utils.escapeIdentifier(str)\n  }\n\n  escapeLiteral(str) {\n    return utils.escapeLiteral(str)\n  }\n\n  _pulseQueryQueue() {\n    if (this.readyForQuery === true) {\n      this._activeQuery = this._queryQueue.shift()\n      const activeQuery = this._getActiveQuery()\n      if (activeQuery) {\n        this.readyForQuery = false\n        this.hasExecuted = true\n\n        const queryError = activeQuery.submit(this.connection)\n        if (queryError) {\n          process.nextTick(() => {\n            activeQuery.handleError(queryError, this.connection)\n            this.readyForQuery = true\n            this._pulseQueryQueue()\n          })\n        }\n      } else if (this.hasExecuted) {\n        this._activeQuery = null\n        this.emit('drain')\n      }\n    }\n  }\n\n  query(config, values, callback) {\n    // can take in strings, config object or query object\n    let query\n    let result\n    let readTimeout\n    let readTimeoutTimer\n    let queryCallback\n\n    if (config === null || config === undefined) {\n      throw new TypeError('Client was passed a null or undefined query')\n    } else if (typeof config.submit === 'function') {\n      readTimeout = config.query_timeout || this.connectionParameters.query_timeout\n      result = query = config\n      if (!query.callback) {\n        if (typeof values === 'function') {\n          query.callback = values\n        } else if (callback) {\n          query.callback = callback\n        }\n      }\n    } else {\n      readTimeout = config.query_timeout || this.connectionParameters.query_timeout\n      query = new Query(config, values, callback)\n      if (!query.callback) {\n        result = new this._Promise((resolve, reject) => {\n          query.callback = (err, res) => (err ? reject(err) : resolve(res))\n        }).catch((err) => {\n          // replace the stack trace that leads to `TCP.onStreamRead` with one that leads back to the\n          // application that created the query\n          Error.captureStackTrace(err)\n          throw err\n        })\n      }\n    }\n\n    if (readTimeout) {\n      queryCallback = query.callback || (() => {})\n\n      readTimeoutTimer = setTimeout(() => {\n        const error = new Error('Query read timeout')\n\n        process.nextTick(() => {\n          query.handleError(error, this.connection)\n        })\n\n        queryCallback(error)\n\n        // we already returned an error,\n        // just do nothing if query completes\n        query.callback = () => {}\n\n        // Remove from queue\n        const index = this._queryQueue.indexOf(query)\n        if (index > -1) {\n          this._queryQueue.splice(index, 1)\n        }\n\n        this._pulseQueryQueue()\n      }, readTimeout)\n\n      query.callback = (err, res) => {\n        clearTimeout(readTimeoutTimer)\n        queryCallback(err, res)\n      }\n    }\n\n    if (this.binary && !query.binary) {\n      query.binary = true\n    }\n\n    if (query._result && !query._result._types) {\n      query._result._types = this._types\n    }\n\n    if (!this._queryable) {\n      process.nextTick(() => {\n        query.handleError(new Error('Client has encountered a connection error and is not queryable'), this.connection)\n      })\n      return result\n    }\n\n    if (this._ending) {\n      process.nextTick(() => {\n        query.handleError(new Error('Client was closed and is not queryable'), this.connection)\n      })\n      return result\n    }\n\n    if (this._queryQueue.length > 0) {\n      queryQueueLengthDeprecationNotice()\n    }\n    this._queryQueue.push(query)\n    this._pulseQueryQueue()\n    return result\n  }\n\n  ref() {\n    this.connection.ref()\n  }\n\n  unref() {\n    this.connection.unref()\n  }\n\n  end(cb) {\n    this._ending = true\n\n    // if we have never connected, then end is a noop, callback immediately\n    if (!this.connection._connecting || this._ended) {\n      if (cb) {\n        cb()\n      } else {\n        return this._Promise.resolve()\n      }\n    }\n\n    if (this._getActiveQuery() || !this._queryable) {\n      // if we have an active query we need to force a disconnect\n      // on the socket - otherwise a hung query could block end forever\n      this.connection.stream.destroy()\n    } else {\n      this.connection.end()\n    }\n\n    if (cb) {\n      this.connection.once('end', cb)\n    } else {\n      return new this._Promise((resolve) => {\n        this.connection.once('end', resolve)\n      })\n    }\n  }\n  get queryQueue() {\n    queryQueueDeprecationNotice()\n    return this._queryQueue\n  }\n}\n\n// expose a Query constructor\nClient.Query = Query\n\nmodule.exports = Client\n", "'use strict'\nconst EventEmitter = require('events').EventEmitter\n\nconst NOOP = function () {}\n\nconst removeWhere = (list, predicate) => {\n  const i = list.findIndex(predicate)\n\n  return i === -1 ? undefined : list.splice(i, 1)[0]\n}\n\nclass IdleItem {\n  constructor(client, idleListener, timeoutId) {\n    this.client = client\n    this.idleListener = idleListener\n    this.timeoutId = timeoutId\n  }\n}\n\nclass PendingItem {\n  constructor(callback) {\n    this.callback = callback\n  }\n}\n\nfunction throwOnDoubleRelease() {\n  throw new Error('Release called on client which has already been released to the pool.')\n}\n\nfunction promisify(Promise, callback) {\n  if (callback) {\n    return { callback: callback, result: undefined }\n  }\n  let rej\n  let res\n  const cb = function (err, client) {\n    err ? rej(err) : res(client)\n  }\n  const result = new Promise(function (resolve, reject) {\n    res = resolve\n    rej = reject\n  }).catch((err) => {\n    // replace the stack trace that leads to `TCP.onStreamRead` with one that leads back to the\n    // application that created the query\n    Error.captureStackTrace(err)\n    throw err\n  })\n  return { callback: cb, result: result }\n}\n\nfunction makeIdleListener(pool, client) {\n  return function idleListener(err) {\n    err.client = client\n\n    client.removeListener('error', idleListener)\n    client.on('error', () => {\n      pool.log('additional client error after disconnection due to error', err)\n    })\n    pool._remove(client)\n    // TODO - document that once the pool emits an error\n    // the client has already been closed & purged and is unusable\n    pool.emit('error', err, client)\n  }\n}\n\nclass Pool extends EventEmitter {\n  constructor(options, Client) {\n    super()\n    this.options = Object.assign({}, options)\n\n    if (options != null && 'password' in options) {\n      // \"hiding\" the password so it doesn't show up in stack traces\n      // or if the client is console.logged\n      Object.defineProperty(this.options, 'password', {\n        configurable: true,\n        enumerable: false,\n        writable: true,\n        value: options.password,\n      })\n    }\n    if (options != null && options.ssl && options.ssl.key) {\n      // \"hiding\" the ssl->key so it doesn't show up in stack traces\n      // or if the client is console.logged\n      Object.defineProperty(this.options.ssl, 'key', {\n        enumerable: false,\n      })\n    }\n\n    this.options.max = this.options.max || this.options.poolSize || 10\n    this.options.min = this.options.min || 0\n    this.options.maxUses = this.options.maxUses || Infinity\n    this.options.allowExitOnIdle = this.options.allowExitOnIdle || false\n    this.options.maxLifetimeSeconds = this.options.maxLifetimeSeconds || 0\n    this.log = this.options.log || function () {}\n    this.Client = this.options.Client || Client || require('pg').Client\n    this.Promise = this.options.Promise || global.Promise\n\n    if (typeof this.options.idleTimeoutMillis === 'undefined') {\n      this.options.idleTimeoutMillis = 10000\n    }\n\n    this._clients = []\n    this._idle = []\n    this._expired = new WeakSet()\n    this._pendingQueue = []\n    this._endCallback = undefined\n    this.ending = false\n    this.ended = false\n  }\n\n  _promiseTry(f) {\n    const Promise = this.Promise\n    if (typeof Promise.try === 'function') {\n      return Promise.try(f)\n    }\n    return new Promise((resolve) => resolve(f()))\n  }\n\n  _isFull() {\n    return this._clients.length >= this.options.max\n  }\n\n  _isAboveMin() {\n    return this._clients.length > this.options.min\n  }\n\n  _pulseQueue() {\n    this.log('pulse queue')\n    if (this.ended) {\n      this.log('pulse queue ended')\n      return\n    }\n    if (this.ending) {\n      this.log('pulse queue on ending')\n      if (this._idle.length) {\n        this._idle.slice().map((item) => {\n          this._remove(item.client)\n        })\n      }\n      if (!this._clients.length) {\n        this.ended = true\n        this._endCallback()\n      }\n      return\n    }\n\n    // if we don't have any waiting, do nothing\n    if (!this._pendingQueue.length) {\n      this.log('no queued requests')\n      return\n    }\n    // if we don't have any idle clients and we have no more room do nothing\n    if (!this._idle.length && this._isFull()) {\n      return\n    }\n    const pendingItem = this._pendingQueue.shift()\n    if (this._idle.length) {\n      const idleItem = this._idle.pop()\n      clearTimeout(idleItem.timeoutId)\n      const client = idleItem.client\n      client.ref && client.ref()\n      const idleListener = idleItem.idleListener\n\n      return this._acquireClient(client, pendingItem, idleListener, false)\n    }\n    if (!this._isFull()) {\n      return this.newClient(pendingItem)\n    }\n    throw new Error('unexpected condition')\n  }\n\n  _remove(client, callback) {\n    const removed = removeWhere(this._idle, (item) => item.client === client)\n\n    if (removed !== undefined) {\n      clearTimeout(removed.timeoutId)\n    }\n\n    this._clients = this._clients.filter((c) => c !== client)\n    const context = this\n    client.end(() => {\n      context.emit('remove', client)\n\n      if (typeof callback === 'function') {\n        callback()\n      }\n    })\n  }\n\n  connect(cb) {\n    if (this.ending) {\n      const err = new Error('Cannot use a pool after calling end on the pool')\n      return cb ? cb(err) : this.Promise.reject(err)\n    }\n\n    const response = promisify(this.Promise, cb)\n    const result = response.result\n\n    // if we don't have to connect a new client, don't do so\n    if (this._isFull() || this._idle.length) {\n      // if we have idle clients schedule a pulse immediately\n      if (this._idle.length) {\n        process.nextTick(() => this._pulseQueue())\n      }\n\n      if (!this.options.connectionTimeoutMillis) {\n        this._pendingQueue.push(new PendingItem(response.callback))\n        return result\n      }\n\n      const queueCallback = (err, res, done) => {\n        clearTimeout(tid)\n        response.callback(err, res, done)\n      }\n\n      const pendingItem = new PendingItem(queueCallback)\n\n      // set connection timeout on checking out an existing client\n      const tid = setTimeout(() => {\n        // remove the callback from pending waiters because\n        // we're going to call it with a timeout error\n        removeWhere(this._pendingQueue, (i) => i.callback === queueCallback)\n        pendingItem.timedOut = true\n        response.callback(new Error('timeout exceeded when trying to connect'))\n      }, this.options.connectionTimeoutMillis)\n\n      if (tid.unref) {\n        tid.unref()\n      }\n\n      this._pendingQueue.push(pendingItem)\n      return result\n    }\n\n    this.newClient(new PendingItem(response.callback))\n\n    return result\n  }\n\n  newClient(pendingItem) {\n    const client = new this.Client(this.options)\n    this._clients.push(client)\n    const idleListener = makeIdleListener(this, client)\n\n    this.log('checking client timeout')\n\n    // connection timeout logic\n    let tid\n    let timeoutHit = false\n    if (this.options.connectionTimeoutMillis) {\n      tid = setTimeout(() => {\n        if (client.connection) {\n          this.log('ending client due to timeout')\n          timeoutHit = true\n          client.connection.stream.destroy()\n        } else if (!client.isConnected()) {\n          this.log('ending client due to timeout')\n          timeoutHit = true\n          // force kill the node driver, and let libpq do its teardown\n          client.end()\n        }\n      }, this.options.connectionTimeoutMillis)\n    }\n\n    this.log('connecting new client')\n    client.connect((err) => {\n      if (tid) {\n        clearTimeout(tid)\n      }\n      client.on('error', idleListener)\n      if (err) {\n        this.log('client failed to connect', err)\n        // remove the dead client from our list of clients\n        this._clients = this._clients.filter((c) => c !== client)\n        if (timeoutHit) {\n          err = new Error('Connection terminated due to connection timeout', { cause: err })\n        }\n\n        // this client won\u2019t be released, so move on immediately\n        this._pulseQueue()\n\n        if (!pendingItem.timedOut) {\n          pendingItem.callback(err, undefined, NOOP)\n        }\n      } else {\n        this.log('new client connected')\n\n        if (this.options.onConnect) {\n          this._promiseTry(() => this.options.onConnect(client)).then(\n            () => {\n              this._afterConnect(client, pendingItem, idleListener)\n            },\n            (hookErr) => {\n              this._clients = this._clients.filter((c) => c !== client)\n              client.end(() => {\n                this._pulseQueue()\n                if (!pendingItem.timedOut) {\n                  pendingItem.callback(hookErr, undefined, NOOP)\n                }\n              })\n            }\n          )\n          return\n        }\n\n        return this._afterConnect(client, pendingItem, idleListener)\n      }\n    })\n  }\n\n  _afterConnect(client, pendingItem, idleListener) {\n    if (this.options.maxLifetimeSeconds !== 0) {\n      const maxLifetimeTimeout = setTimeout(() => {\n        this.log('ending client due to expired lifetime')\n        this._expired.add(client)\n        const idleIndex = this._idle.findIndex((idleItem) => idleItem.client === client)\n        if (idleIndex !== -1) {\n          this._acquireClient(\n            client,\n            new PendingItem((err, client, clientRelease) => clientRelease()),\n            idleListener,\n            false\n          )\n        }\n      }, this.options.maxLifetimeSeconds * 1000)\n\n      maxLifetimeTimeout.unref()\n      client.once('end', () => clearTimeout(maxLifetimeTimeout))\n    }\n\n    return this._acquireClient(client, pendingItem, idleListener, true)\n  }\n\n  // acquire a client for a pending work item\n  _acquireClient(client, pendingItem, idleListener, isNew) {\n    if (isNew) {\n      this.emit('connect', client)\n    }\n\n    this.emit('acquire', client)\n\n    client.release = this._releaseOnce(client, idleListener)\n\n    client.removeListener('error', idleListener)\n\n    if (!pendingItem.timedOut) {\n      if (isNew && this.options.verify) {\n        this.options.verify(client, (err) => {\n          if (err) {\n            client.release(err)\n            return pendingItem.callback(err, undefined, NOOP)\n          }\n\n          pendingItem.callback(undefined, client, client.release)\n        })\n      } else {\n        pendingItem.callback(undefined, client, client.release)\n      }\n    } else {\n      if (isNew && this.options.verify) {\n        this.options.verify(client, client.release)\n      } else {\n        client.release()\n      }\n    }\n  }\n\n  // returns a function that wraps _release and throws if called more than once\n  _releaseOnce(client, idleListener) {\n    let released = false\n\n    return (err) => {\n      if (released) {\n        throwOnDoubleRelease()\n      }\n\n      released = true\n      this._release(client, idleListener, err)\n    }\n  }\n\n  // release a client back to the poll, include an error\n  // to remove it from the pool\n  _release(client, idleListener, err) {\n    client.on('error', idleListener)\n\n    client._poolUseCount = (client._poolUseCount || 0) + 1\n\n    this.emit('release', err, client)\n\n    // TODO(bmc): expose a proper, public interface _queryable and _ending\n    if (err || this.ending || !client._queryable || client._ending || client._poolUseCount >= this.options.maxUses) {\n      if (client._poolUseCount >= this.options.maxUses) {\n        this.log('remove expended client')\n      }\n\n      return this._remove(client, this._pulseQueue.bind(this))\n    }\n\n    const isExpired = this._expired.has(client)\n    if (isExpired) {\n      this.log('remove expired client')\n      this._expired.delete(client)\n      return this._remove(client, this._pulseQueue.bind(this))\n    }\n\n    // idle timeout\n    let tid\n    if (this.options.idleTimeoutMillis && this._isAboveMin()) {\n      tid = setTimeout(() => {\n        if (this._isAboveMin()) {\n          this.log('remove idle client')\n          this._remove(client, this._pulseQueue.bind(this))\n        }\n      }, this.options.idleTimeoutMillis)\n\n      if (this.options.allowExitOnIdle) {\n        // allow Node to exit if this is all that's left\n        tid.unref()\n      }\n    }\n\n    if (this.options.allowExitOnIdle) {\n      client.unref()\n    }\n\n    this._idle.push(new IdleItem(client, idleListener, tid))\n    this._pulseQueue()\n  }\n\n  query(text, values, cb) {\n    // guard clause against passing a function as the first parameter\n    if (typeof text === 'function') {\n      const response = promisify(this.Promise, text)\n      setImmediate(function () {\n        return response.callback(new Error('Passing a function as the first parameter to pool.query is not supported'))\n      })\n      return response.result\n    }\n\n    // allow plain text query without values\n    if (typeof values === 'function') {\n      cb = values\n      values = undefined\n    }\n    const response = promisify(this.Promise, cb)\n    cb = response.callback\n\n    this.connect((err, client) => {\n      if (err) {\n        return cb(err)\n      }\n\n      let clientReleased = false\n      const onError = (err) => {\n        if (clientReleased) {\n          return\n        }\n        clientReleased = true\n        client.release(err)\n        cb(err)\n      }\n\n      client.once('error', onError)\n      this.log('dispatching query')\n      try {\n        client.query(text, values, (err, res) => {\n          this.log('query dispatched')\n          client.removeListener('error', onError)\n          if (clientReleased) {\n            return\n          }\n          clientReleased = true\n          client.release(err)\n          if (err) {\n            return cb(err)\n          }\n          return cb(undefined, res)\n        })\n      } catch (err) {\n        client.release(err)\n        return cb(err)\n      }\n    })\n    return response.result\n  }\n\n  end(cb) {\n    this.log('ending')\n    if (this.ending) {\n      const err = new Error('Called end on pool more than once')\n      return cb ? cb(err) : this.Promise.reject(err)\n    }\n    this.ending = true\n    const promised = promisify(this.Promise, cb)\n    this._endCallback = promised.callback\n    this._pulseQueue()\n    return promised.result\n  }\n\n  get waitingCount() {\n    return this._pendingQueue.length\n  }\n\n  get idleCount() {\n    return this._idle.length\n  }\n\n  get expiredCount() {\n    return this._clients.reduce((acc, client) => acc + (this._expired.has(client) ? 1 : 0), 0)\n  }\n\n  get totalCount() {\n    return this._clients.length\n  }\n}\nmodule.exports = Pool\n", "'use strict'\n\nconst EventEmitter = require('events').EventEmitter\nconst util = require('util')\nconst utils = require('../utils')\n\nconst NativeQuery = (module.exports = function (config, values, callback) {\n  EventEmitter.call(this)\n  config = utils.normalizeQueryConfig(config, values, callback)\n  this.text = config.text\n  this.values = config.values\n  this.name = config.name\n  this.queryMode = config.queryMode\n  this.callback = config.callback\n  this.state = 'new'\n  this._arrayMode = config.rowMode === 'array'\n\n  // if the 'row' event is listened for\n  // then emit them as they come in\n  // without setting singleRowMode to true\n  // this has almost no meaning because libpq\n  // reads all rows into memory before returning any\n  this._emitRowEvents = false\n  this.on(\n    'newListener',\n    function (event) {\n      if (event === 'row') this._emitRowEvents = true\n    }.bind(this)\n  )\n})\n\nutil.inherits(NativeQuery, EventEmitter)\n\nconst errorFieldMap = {\n  sqlState: 'code',\n  statementPosition: 'position',\n  messagePrimary: 'message',\n  context: 'where',\n  schemaName: 'schema',\n  tableName: 'table',\n  columnName: 'column',\n  dataTypeName: 'dataType',\n  constraintName: 'constraint',\n  sourceFile: 'file',\n  sourceLine: 'line',\n  sourceFunction: 'routine',\n}\n\nNativeQuery.prototype.handleError = function (err) {\n  // copy pq error fields into the error object\n  const fields = this.native.pq.resultErrorFields()\n  if (fields) {\n    for (const key in fields) {\n      const normalizedFieldName = errorFieldMap[key] || key\n      err[normalizedFieldName] = fields[key]\n    }\n  }\n  if (this.callback) {\n    this.callback(err)\n  } else {\n    this.emit('error', err)\n  }\n  this.state = 'error'\n}\n\nNativeQuery.prototype.then = function (onSuccess, onFailure) {\n  return this._getPromise().then(onSuccess, onFailure)\n}\n\nNativeQuery.prototype.catch = function (callback) {\n  return this._getPromise().catch(callback)\n}\n\nNativeQuery.prototype._getPromise = function () {\n  if (this._promise) return this._promise\n  this._promise = new Promise(\n    function (resolve, reject) {\n      this._once('end', resolve)\n      this._once('error', reject)\n    }.bind(this)\n  )\n  return this._promise\n}\n\nNativeQuery.prototype.submit = function (client) {\n  this.state = 'running'\n  const self = this\n  this.native = client.native\n  client.native.arrayMode = this._arrayMode\n\n  let after = function (err, rows, results) {\n    client.native.arrayMode = false\n    setImmediate(function () {\n      self.emit('_done')\n    })\n\n    // handle possible query error\n    if (err) {\n      return self.handleError(err)\n    }\n\n    // emit row events for each row in the result\n    if (self._emitRowEvents) {\n      if (results.length > 1) {\n        rows.forEach((rowOfRows, i) => {\n          rowOfRows.forEach((row) => {\n            self.emit('row', row, results[i])\n          })\n        })\n      } else {\n        rows.forEach(function (row) {\n          self.emit('row', row, results)\n        })\n      }\n    }\n\n    // handle successful result\n    self.state = 'end'\n    self.emit('end', results)\n    if (self.callback) {\n      self.callback(null, results)\n    }\n  }\n\n  if (process.domain) {\n    after = process.domain.bind(after)\n  }\n\n  // named query\n  if (this.name) {\n    if (this.name.length > 63) {\n      console.error('Warning! Postgres only supports 63 characters for query names.')\n      console.error('You supplied %s (%s)', this.name, this.name.length)\n      console.error('This can cause conflicts and silent errors executing queries')\n    }\n    const values = (this.values || []).map(utils.prepareValue)\n\n    // check if the client has already executed this named query\n    // if so...just execute it again - skip the planning phase\n    if (client.namedQueries[this.name]) {\n      if (this.text && client.namedQueries[this.name] !== this.text) {\n        const err = new Error(`Prepared statements must be unique - '${this.name}' was used for a different statement`)\n        return after(err)\n      }\n      return client.native.execute(this.name, values, after)\n    }\n    // plan the named query the first time, then execute it\n    return client.native.prepare(this.name, this.text, values.length, function (err) {\n      if (err) return after(err)\n      client.namedQueries[self.name] = self.text\n      return self.native.execute(self.name, values, after)\n    })\n  } else if (this.values) {\n    if (!Array.isArray(this.values)) {\n      const err = new Error('Query values must be an array')\n      return after(err)\n    }\n    const vals = this.values.map(utils.prepareValue)\n    client.native.query(this.text, vals, after)\n  } else if (this.queryMode === 'extended') {\n    client.native.query(this.text, [], after)\n  } else {\n    client.native.query(this.text, after)\n  }\n}\n", "const nodeUtils = require('util')\n// eslint-disable-next-line\nvar Native\n// eslint-disable-next-line no-useless-catch\ntry {\n  // Wrap this `require()` in a try-catch to avoid upstream bundlers from complaining that this might not be available since it is an optional import\n  Native = require('pg-native')\n} catch (e) {\n  throw e\n}\nconst TypeOverrides = require('../type-overrides')\nconst EventEmitter = require('events').EventEmitter\nconst util = require('util')\nconst ConnectionParameters = require('../connection-parameters')\n\nconst NativeQuery = require('./query')\n\nconst queryQueueLengthDeprecationNotice = nodeUtils.deprecate(\n  () => {},\n  'Calling client.query() when the client is already executing a query is deprecated and will be removed in pg@9.0. Use async/await or an external async flow control mechanism instead.'\n)\n\nconst Client = (module.exports = function (config) {\n  EventEmitter.call(this)\n  config = config || {}\n\n  this._Promise = config.Promise || global.Promise\n  this._types = new TypeOverrides(config.types)\n\n  this.native = new Native({\n    types: this._types,\n  })\n\n  this._queryQueue = []\n  this._ending = false\n  this._connecting = false\n  this._connected = false\n  this._queryable = true\n\n  // keep these on the object for legacy reasons\n  // for the time being. TODO: deprecate all this jazz\n  const cp = (this.connectionParameters = new ConnectionParameters(config))\n  if (config.nativeConnectionString) cp.nativeConnectionString = config.nativeConnectionString\n  this.user = cp.user\n\n  // \"hiding\" the password so it doesn't show up in stack traces\n  // or if the client is console.logged\n  Object.defineProperty(this, 'password', {\n    configurable: true,\n    enumerable: false,\n    writable: true,\n    value: cp.password,\n  })\n  this.database = cp.database\n  this.host = cp.host\n  this.port = cp.port\n\n  // a hash to hold named queries\n  this.namedQueries = {}\n})\n\nClient.Query = NativeQuery\n\nutil.inherits(Client, EventEmitter)\n\nClient.prototype._errorAllQueries = function (err) {\n  const enqueueError = (query) => {\n    process.nextTick(() => {\n      query.native = this.native\n      query.handleError(err)\n    })\n  }\n\n  if (this._hasActiveQuery()) {\n    enqueueError(this._activeQuery)\n    this._activeQuery = null\n  }\n\n  this._queryQueue.forEach(enqueueError)\n  this._queryQueue.length = 0\n}\n\n// connect to the backend\n// pass an optional callback to be called once connected\n// or with an error if there was a connection error\nClient.prototype._connect = function (cb) {\n  const self = this\n\n  if (this._connecting) {\n    process.nextTick(() => cb(new Error('Client has already been connected. You cannot reuse a client.')))\n    return\n  }\n\n  this._connecting = true\n\n  this.connectionParameters.getLibpqConnectionString(function (err, conString) {\n    if (self.connectionParameters.nativeConnectionString) conString = self.connectionParameters.nativeConnectionString\n    if (err) return cb(err)\n    self.native.connect(conString, function (err) {\n      if (err) {\n        self.native.end()\n        return cb(err)\n      }\n\n      // set internal states to connected\n      self._connected = true\n\n      // handle connection errors from the native layer\n      self.native.on('error', function (err) {\n        self._queryable = false\n        self._errorAllQueries(err)\n        self.emit('error', err)\n      })\n\n      self.native.on('notification', function (msg) {\n        self.emit('notification', {\n          channel: msg.relname,\n          payload: msg.extra,\n        })\n      })\n\n      // signal we are connected now\n      self.emit('connect')\n      self._pulseQueryQueue(true)\n\n      cb(null, this)\n    })\n  })\n}\n\nClient.prototype.connect = function (callback) {\n  if (callback) {\n    this._connect(callback)\n    return\n  }\n\n  return new this._Promise((resolve, reject) => {\n    this._connect((error) => {\n      if (error) {\n        reject(error)\n      } else {\n        resolve(this)\n      }\n    })\n  })\n}\n\n// send a query to the server\n// this method is highly overloaded to take\n// 1) string query, optional array of parameters, optional function callback\n// 2) object query with {\n//    string query\n//    optional array values,\n//    optional function callback instead of as a separate parameter\n//    optional string name to name & cache the query plan\n//    optional string rowMode = 'array' for an array of results\n//  }\nClient.prototype.query = function (config, values, callback) {\n  let query\n  let result\n  let readTimeout\n  let readTimeoutTimer\n  let queryCallback\n\n  if (config === null || config === undefined) {\n    throw new TypeError('Client was passed a null or undefined query')\n  } else if (typeof config.submit === 'function') {\n    readTimeout = config.query_timeout || this.connectionParameters.query_timeout\n    result = query = config\n    // accept query(new Query(...), (err, res) => { }) style\n    if (typeof values === 'function') {\n      config.callback = values\n    }\n  } else {\n    readTimeout = config.query_timeout || this.connectionParameters.query_timeout\n    query = new NativeQuery(config, values, callback)\n    if (!query.callback) {\n      let resolveOut, rejectOut\n      result = new this._Promise((resolve, reject) => {\n        resolveOut = resolve\n        rejectOut = reject\n      }).catch((err) => {\n        Error.captureStackTrace(err)\n        throw err\n      })\n      query.callback = (err, res) => (err ? rejectOut(err) : resolveOut(res))\n    }\n  }\n\n  if (readTimeout) {\n    queryCallback = query.callback || (() => {})\n\n    readTimeoutTimer = setTimeout(() => {\n      const error = new Error('Query read timeout')\n\n      process.nextTick(() => {\n        query.handleError(error, this.connection)\n      })\n\n      queryCallback(error)\n\n      // we already returned an error,\n      // just do nothing if query completes\n      query.callback = () => {}\n\n      // Remove from queue\n      const index = this._queryQueue.indexOf(query)\n      if (index > -1) {\n        this._queryQueue.splice(index, 1)\n      }\n\n      this._pulseQueryQueue()\n    }, readTimeout)\n\n    query.callback = (err, res) => {\n      clearTimeout(readTimeoutTimer)\n      queryCallback(err, res)\n    }\n  }\n\n  if (!this._queryable) {\n    query.native = this.native\n    process.nextTick(() => {\n      query.handleError(new Error('Client has encountered a connection error and is not queryable'))\n    })\n    return result\n  }\n\n  if (this._ending) {\n    query.native = this.native\n    process.nextTick(() => {\n      query.handleError(new Error('Client was closed and is not queryable'))\n    })\n    return result\n  }\n\n  if (this._queryQueue.length > 0) {\n    queryQueueLengthDeprecationNotice()\n  }\n\n  this._queryQueue.push(query)\n  this._pulseQueryQueue()\n  return result\n}\n\n// disconnect from the backend server\nClient.prototype.end = function (cb) {\n  const self = this\n\n  this._ending = true\n\n  if (!this._connected) {\n    this.once('connect', this.end.bind(this, cb))\n  }\n  let result\n  if (!cb) {\n    result = new this._Promise(function (resolve, reject) {\n      cb = (err) => (err ? reject(err) : resolve())\n    })\n  }\n\n  this.native.end(function () {\n    self._connected = false\n\n    self._errorAllQueries(new Error('Connection terminated'))\n\n    process.nextTick(() => {\n      self.emit('end')\n      if (cb) cb()\n    })\n  })\n  return result\n}\n\nClient.prototype._hasActiveQuery = function () {\n  return this._activeQuery && this._activeQuery.state !== 'error' && this._activeQuery.state !== 'end'\n}\n\nClient.prototype._pulseQueryQueue = function (initialConnection) {\n  if (!this._connected) {\n    return\n  }\n  if (this._hasActiveQuery()) {\n    return\n  }\n  const query = this._queryQueue.shift()\n  if (!query) {\n    if (!initialConnection) {\n      this.emit('drain')\n    }\n    return\n  }\n  this._activeQuery = query\n  query.submit(this)\n  const self = this\n  query.once('_done', function () {\n    self._pulseQueryQueue()\n  })\n}\n\n// attempt to cancel an in-progress query\nClient.prototype.cancel = function (query) {\n  if (this._activeQuery === query) {\n    this.native.cancel(function () {})\n  } else if (this._queryQueue.indexOf(query) !== -1) {\n    this._queryQueue.splice(this._queryQueue.indexOf(query), 1)\n  }\n}\n\nClient.prototype.ref = function () {}\nClient.prototype.unref = function () {}\n\nClient.prototype.setTypeParser = function (oid, format, parseFn) {\n  return this._types.setTypeParser(oid, format, parseFn)\n}\n\nClient.prototype.getTypeParser = function (oid, format) {\n  return this._types.getTypeParser(oid, format)\n}\n\nClient.prototype.isConnected = function () {\n  return this._connected\n}\n", "'use strict'\nmodule.exports = require('./client')\n", "'use strict'\n\nconst Client = require('./client')\nconst defaults = require('./defaults')\nconst Connection = require('./connection')\nconst Result = require('./result')\nconst utils = require('./utils')\nconst Pool = require('pg-pool')\nconst TypeOverrides = require('./type-overrides')\nconst { DatabaseError } = require('pg-protocol')\nconst { escapeIdentifier, escapeLiteral } = require('./utils')\n\nconst poolFactory = (Client) => {\n  return class BoundPool extends Pool {\n    constructor(options) {\n      super(options, Client)\n    }\n  }\n}\n\nconst PG = function (clientConstructor) {\n  this.defaults = defaults\n  this.Client = clientConstructor\n  this.Query = this.Client.Query\n  this.Pool = poolFactory(this.Client)\n  this._pools = []\n  this.Connection = Connection\n  this.types = require('pg-types')\n  this.DatabaseError = DatabaseError\n  this.TypeOverrides = TypeOverrides\n  this.escapeIdentifier = escapeIdentifier\n  this.escapeLiteral = escapeLiteral\n  this.Result = Result\n  this.utils = utils\n}\n\nlet clientConstructor = Client\n\nlet forceNative = false\ntry {\n  forceNative = !!process.env.NODE_PG_FORCE_NATIVE\n} catch {\n  // ignore, e.g., Deno without --allow-env\n}\n\nif (forceNative) {\n  clientConstructor = require('./native')\n}\n\nmodule.exports = new PG(clientConstructor)\n\n// lazy require native module...the native module may not have installed\nObject.defineProperty(module.exports, 'native', {\n  configurable: true,\n  enumerable: false,\n  get() {\n    let native = null\n    try {\n      native = new PG(require('./native'))\n    } catch (err) {\n      if (err.code !== 'MODULE_NOT_FOUND') {\n        throw err\n      }\n    }\n\n    // overwrite module.exports.native so that getter is never called again\n    Object.defineProperty(module.exports, 'native', {\n      value: native,\n    })\n\n    return native\n  },\n})\n", "// ESM wrapper for pg\nimport pg from '../lib/index.js'\n\n// Re-export all the properties\nexport const Client = pg.Client\nexport const Pool = pg.Pool\nexport const Connection = pg.Connection\nexport const types = pg.types\nexport const Query = pg.Query\nexport const DatabaseError = pg.DatabaseError\nexport const escapeIdentifier = pg.escapeIdentifier\nexport const escapeLiteral = pg.escapeLiteral\nexport const Result = pg.Result\nexport const TypeOverrides = pg.TypeOverrides\n\n// Also export the defaults\nexport const defaults = pg.defaults\n\n// Re-export the default\nexport default pg\n", "export const entityKind = Symbol.for('drizzle:entityKind');\nexport const hasOwnEntityKind = Symbol.for('drizzle:hasOwnEntityKind');\n\nexport interface DrizzleEntity {\n\t[entityKind]: string;\n}\n\nexport type DrizzleEntityClass<T> =\n\t& ((abstract new(...args: any[]) => T) | (new(...args: any[]) => T))\n\t& DrizzleEntity;\n\nexport function is<T extends DrizzleEntityClass<any>>(value: any, type: T): value is InstanceType<T> {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (value instanceof type) { // eslint-disable-line no-instanceof/no-instanceof\n\t\treturn true;\n\t}\n\n\tif (!Object.prototype.hasOwnProperty.call(type, entityKind)) {\n\t\tthrow new Error(\n\t\t\t`Class \"${\n\t\t\t\ttype.name ?? '<unknown>'\n\t\t\t}\" doesn't look like a Drizzle entity. If this is incorrect and the class is provided by Drizzle, please report this as a bug.`,\n\t\t);\n\t}\n\n\tlet cls = Object.getPrototypeOf(value).constructor;\n\tif (cls) {\n\t\t// Traverse the prototype chain to find the entityKind\n\t\twhile (cls) {\n\t\t\tif (entityKind in cls && cls[entityKind] === type[entityKind]) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcls = Object.getPrototypeOf(cls);\n\t\t}\n\t}\n\n\treturn false;\n}\n", "import { entityKind } from '~/entity.ts';\n\nexport interface Logger {\n\tlogQuery(query: string, params: unknown[]): void;\n}\n\nexport interface LogWriter {\n\twrite(message: string): void;\n}\n\nexport class ConsoleLogWriter implements LogWriter {\n\tstatic readonly [entityKind]: string = 'ConsoleLogWriter';\n\n\twrite(message: string) {\n\t\tconsole.log(message);\n\t}\n}\n\nexport class DefaultLogger implements Logger {\n\tstatic readonly [entityKind]: string = 'DefaultLogger';\n\n\treadonly writer: LogWriter;\n\n\tconstructor(config?: { writer: LogWriter }) {\n\t\tthis.writer = config?.writer ?? new ConsoleLogWriter();\n\t}\n\n\tlogQuery(query: string, params: unknown[]): void {\n\t\tconst stringifiedParams = params.map((p) => {\n\t\t\ttry {\n\t\t\t\treturn JSON.stringify(p);\n\t\t\t} catch {\n\t\t\t\treturn String(p);\n\t\t\t}\n\t\t});\n\t\tconst paramsStr = stringifiedParams.length ? ` -- params: [${stringifiedParams.join(', ')}]` : '';\n\t\tthis.writer.write(`Query: ${query}${paramsStr}`);\n\t}\n}\n\nexport class NoopLogger implements Logger {\n\tstatic readonly [entityKind]: string = 'NoopLogger';\n\n\tlogQuery(): void {\n\t\t// noop\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\n\nexport abstract class QueryPromise<T> implements Promise<T> {\n\tstatic readonly [entityKind]: string = 'QueryPromise';\n\n\t[Symbol.toStringTag] = 'QueryPromise';\n\n\tcatch<TResult = never>(\n\t\tonRejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined,\n\t): Promise<T | TResult> {\n\t\treturn this.then(undefined, onRejected);\n\t}\n\n\tfinally(onFinally?: (() => void) | null | undefined): Promise<T> {\n\t\treturn this.then(\n\t\t\t(value) => {\n\t\t\t\tonFinally?.();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\t(reason) => {\n\t\t\t\tonFinally?.();\n\t\t\t\tthrow reason;\n\t\t\t},\n\t\t);\n\t}\n\n\tthen<TResult1 = T, TResult2 = never>(\n\t\tonFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n\t\tonRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n\t): Promise<TResult1 | TResult2> {\n\t\treturn this.execute().then(onFulfilled, onRejected);\n\t}\n\n\tabstract execute(): Promise<T>;\n}\n", "import type {\n\tColumnBuilderBaseConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tGeneratedColumnConfig,\n\tGeneratedIdentityConfig,\n} from './column-builder.ts';\nimport { entityKind } from './entity.ts';\nimport type { DriverValueMapper, SQL, SQLWrapper } from './sql/sql.ts';\nimport type { Table } from './table.ts';\nimport type { Update } from './utils.ts';\n\nexport interface ColumnBaseConfig<\n\tTDataType extends ColumnDataType,\n\tTColumnType extends string,\n> extends ColumnBuilderBaseConfig<TDataType, TColumnType> {\n\ttableName: string;\n\tnotNull: boolean;\n\thasDefault: boolean;\n\tisPrimaryKey: boolean;\n\tisAutoincrement: boolean;\n\thasRuntimeDefault: boolean;\n}\n\nexport type ColumnTypeConfig<T extends ColumnBaseConfig<ColumnDataType, string>, TTypeConfig extends object> = T & {\n\tbrand: 'Column';\n\ttableName: T['tableName'];\n\tname: T['name'];\n\tdataType: T['dataType'];\n\tcolumnType: T['columnType'];\n\tdata: T['data'];\n\tdriverParam: T['driverParam'];\n\tnotNull: T['notNull'];\n\thasDefault: T['hasDefault'];\n\tisPrimaryKey: T['isPrimaryKey'];\n\tisAutoincrement: T['isAutoincrement'];\n\thasRuntimeDefault: T['hasRuntimeDefault'];\n\tenumValues: T['enumValues'];\n\tbaseColumn: T extends { baseColumn: infer U } ? U : unknown;\n\tgenerated: GeneratedColumnConfig<T['data']> | undefined;\n\tidentity: undefined | 'always' | 'byDefault';\n} & TTypeConfig;\n\nexport type ColumnRuntimeConfig<TData, TRuntimeConfig extends object> = ColumnBuilderRuntimeConfig<\n\tTData,\n\tTRuntimeConfig\n>;\n\nexport interface Column<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTRuntimeConfig extends object = object,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTTypeConfig extends object = object,\n> extends DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\n/*\n\t`Column` only accepts a full `ColumnConfig` as its generic.\n\tTo infer parts of the config, use `AnyColumn` that accepts a partial config.\n\tSee `GetColumnData` for example usage of inferring.\n*/\nexport abstract class Column<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n> implements DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Column';\n\n\tdeclare readonly _: ColumnTypeConfig<T, TTypeConfig>;\n\n\treadonly name: string;\n\treadonly keyAsName: boolean;\n\treadonly primary: boolean;\n\treadonly notNull: boolean;\n\treadonly default: T['data'] | SQL | undefined;\n\treadonly defaultFn: (() => T['data'] | SQL) | undefined;\n\treadonly onUpdateFn: (() => T['data'] | SQL) | undefined;\n\treadonly hasDefault: boolean;\n\treadonly isUnique: boolean;\n\treadonly uniqueName: string | undefined;\n\treadonly uniqueType: string | undefined;\n\treadonly dataType: T['dataType'];\n\treadonly columnType: T['columnType'];\n\treadonly enumValues: T['enumValues'] = undefined;\n\treadonly generated: GeneratedColumnConfig<T['data']> | undefined = undefined;\n\treadonly generatedIdentity: GeneratedIdentityConfig | undefined = undefined;\n\n\tprotected config: ColumnRuntimeConfig<T['data'], TRuntimeConfig>;\n\n\tconstructor(\n\t\treadonly table: Table,\n\t\tconfig: ColumnRuntimeConfig<T['data'], TRuntimeConfig>,\n\t) {\n\t\tthis.config = config;\n\t\tthis.name = config.name;\n\t\tthis.keyAsName = config.keyAsName;\n\t\tthis.notNull = config.notNull;\n\t\tthis.default = config.default;\n\t\tthis.defaultFn = config.defaultFn;\n\t\tthis.onUpdateFn = config.onUpdateFn;\n\t\tthis.hasDefault = config.hasDefault;\n\t\tthis.primary = config.primaryKey;\n\t\tthis.isUnique = config.isUnique;\n\t\tthis.uniqueName = config.uniqueName;\n\t\tthis.uniqueType = config.uniqueType;\n\t\tthis.dataType = config.dataType as T['dataType'];\n\t\tthis.columnType = config.columnType;\n\t\tthis.generated = config.generated;\n\t\tthis.generatedIdentity = config.generatedIdentity;\n\t}\n\n\tabstract getSQLType(): string;\n\n\tmapFromDriverValue(value: unknown): unknown {\n\t\treturn value;\n\t}\n\n\tmapToDriverValue(value: unknown): unknown {\n\t\treturn value;\n\t}\n\n\t// ** @internal */\n\tshouldDisableInsert(): boolean {\n\t\treturn this.config.generated !== undefined && this.config.generated.type !== 'byDefault';\n\t}\n}\n\nexport type UpdateColConfig<\n\tT extends ColumnBaseConfig<ColumnDataType, string>,\n\tTUpdate extends Partial<ColumnBaseConfig<ColumnDataType, string>>,\n> = Update<T, TUpdate>;\n\nexport type AnyColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> = Column<\n\tRequired<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>\n>;\n\nexport type GetColumnData<TColumn extends Column, TInferMode extends 'query' | 'raw' = 'query'> =\n\t// dprint-ignore\n\tTInferMode extends 'raw' // Raw mode\n\t\t? TColumn['_']['data'] // Just return the underlying type\n\t\t: TColumn['_']['notNull'] extends true // Query mode\n\t\t? TColumn['_']['data'] // Query mode, not null\n\t\t: TColumn['_']['data'] | null; // Query mode, nullable\n\nexport type InferColumnsDataTypes<TColumns extends Record<string, Column>> = {\n\t[Key in keyof TColumns]: GetColumnData<TColumns[Key], 'query'>;\n};\n", "import { entityKind } from '~/entity.ts';\nimport type { Column } from './column.ts';\nimport type { GelColumn, GelExtraConfigColumn } from './gel-core/index.ts';\nimport type { MySqlColumn } from './mysql-core/index.ts';\nimport type { ExtraConfigColumn, PgColumn, PgSequenceOptions } from './pg-core/index.ts';\nimport type { SingleStoreColumn } from './singlestore-core/index.ts';\nimport type { SQL } from './sql/sql.ts';\nimport type { SQLiteColumn } from './sqlite-core/index.ts';\nimport type { Assume, Simplify } from './utils.ts';\n\nexport type ColumnDataType =\n\t| 'string'\n\t| 'number'\n\t| 'boolean'\n\t| 'array'\n\t| 'json'\n\t| 'date'\n\t| 'bigint'\n\t| 'custom'\n\t| 'buffer'\n\t| 'dateDuration'\n\t| 'duration'\n\t| 'relDuration'\n\t| 'localTime'\n\t| 'localDate'\n\t| 'localDateTime';\n\nexport type Dialect = 'pg' | 'mysql' | 'sqlite' | 'singlestore' | 'common' | 'gel';\n\nexport type GeneratedStorageMode = 'virtual' | 'stored';\n\nexport type GeneratedType = 'always' | 'byDefault';\n\nexport type GeneratedColumnConfig<TDataType> = {\n\tas: TDataType | SQL | (() => SQL);\n\ttype?: GeneratedType;\n\tmode?: GeneratedStorageMode;\n};\n\nexport type GeneratedIdentityConfig = {\n\tsequenceName?: string;\n\tsequenceOptions?: PgSequenceOptions;\n\ttype: 'always' | 'byDefault';\n};\n\nexport interface ColumnBuilderBaseConfig<TDataType extends ColumnDataType, TColumnType extends string> {\n\tname: string;\n\tdataType: TDataType;\n\tcolumnType: TColumnType;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: string[] | undefined;\n}\n\nexport type MakeColumnConfig<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTableName extends string,\n\tTData = T extends { $type: infer U } ? U : T['data'],\n> = {\n\tname: T['name'];\n\ttableName: TTableName;\n\tdataType: T['dataType'];\n\tcolumnType: T['columnType'];\n\tdata: TData;\n\tdriverParam: T['driverParam'];\n\tnotNull: T extends { notNull: true } ? true : false;\n\thasDefault: T extends { hasDefault: true } ? true : false;\n\tisPrimaryKey: T extends { isPrimaryKey: true } ? true : false;\n\tisAutoincrement: T extends { isAutoincrement: true } ? true : false;\n\thasRuntimeDefault: T extends { hasRuntimeDefault: true } ? true : false;\n\tenumValues: T['enumValues'];\n\tbaseColumn: T extends { baseBuilder: infer U extends ColumnBuilderBase } ? BuildColumn<TTableName, U, 'common'>\n\t\t: never;\n\tidentity: T extends { identity: 'always' } ? 'always' : T extends { identity: 'byDefault' } ? 'byDefault' : undefined;\n\tgenerated: T extends { generated: infer G } ? unknown extends G ? undefined\n\t\t: G extends undefined ? undefined\n\t\t: G\n\t\t: undefined;\n} & {};\n\nexport type ColumnBuilderTypeConfig<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> = Simplify<\n\t& {\n\t\tbrand: 'ColumnBuilder';\n\t\tname: T['name'];\n\t\tdataType: T['dataType'];\n\t\tcolumnType: T['columnType'];\n\t\tdata: T['data'];\n\t\tdriverParam: T['driverParam'];\n\t\tnotNull: T extends { notNull: infer U } ? U : boolean;\n\t\thasDefault: T extends { hasDefault: infer U } ? U : boolean;\n\t\tenumValues: T['enumValues'];\n\t\tidentity: T extends { identity: infer U } ? U : unknown;\n\t\tgenerated: T extends { generated: infer G } ? G extends undefined ? unknown : G : unknown;\n\t}\n\t& TTypeConfig\n>;\n\nexport type ColumnBuilderRuntimeConfig<TData, TRuntimeConfig extends object = object> = {\n\tname: string;\n\tkeyAsName: boolean;\n\tnotNull: boolean;\n\tdefault: TData | SQL | undefined;\n\tdefaultFn: (() => TData | SQL) | undefined;\n\tonUpdateFn: (() => TData | SQL) | undefined;\n\thasDefault: boolean;\n\tprimaryKey: boolean;\n\tisUnique: boolean;\n\tuniqueName: string | undefined;\n\tuniqueType: string | undefined;\n\tdataType: string;\n\tcolumnType: string;\n\tgenerated: GeneratedColumnConfig<TData> | undefined;\n\tgeneratedIdentity: GeneratedIdentityConfig | undefined;\n} & TRuntimeConfig;\n\nexport interface ColumnBuilderExtraConfig {\n\tprimaryKeyHasDefault?: boolean;\n}\n\nexport type NotNull<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\tnotNull: true;\n\t};\n};\n\nexport type HasDefault<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\thasDefault: true;\n\t};\n};\n\nexport type IsPrimaryKey<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\tisPrimaryKey: true;\n\t};\n};\n\nexport type IsAutoincrement<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\tisAutoincrement: true;\n\t};\n};\n\nexport type HasRuntimeDefault<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\thasRuntimeDefault: true;\n\t};\n};\n\nexport type $Type<T extends ColumnBuilderBase, TType> = T & {\n\t_: {\n\t\t$type: TType;\n\t};\n};\n\nexport type HasGenerated<T extends ColumnBuilderBase, TGenerated extends {} = {}> = T & {\n\t_: {\n\t\thasDefault: true;\n\t\tgenerated: TGenerated;\n\t};\n};\n\nexport type IsIdentity<\n\tT extends ColumnBuilderBase,\n\tTType extends 'always' | 'byDefault',\n> = T & {\n\t_: {\n\t\tnotNull: true;\n\t\thasDefault: true;\n\t\tidentity: TType;\n\t};\n};\nexport interface ColumnBuilderBase<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> {\n\t_: ColumnBuilderTypeConfig<T, TTypeConfig>;\n}\n\n// To understand how to use `ColumnBuilder` and `AnyColumnBuilder`, see `Column` and `AnyColumn` documentation.\nexport abstract class ColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,\n> implements ColumnBuilderBase<T, TTypeConfig> {\n\tstatic readonly [entityKind]: string = 'ColumnBuilder';\n\n\tdeclare _: ColumnBuilderTypeConfig<T, TTypeConfig>;\n\n\tprotected config: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>;\n\n\tconstructor(name: T['name'], dataType: T['dataType'], columnType: T['columnType']) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tkeyAsName: name === '',\n\t\t\tnotNull: false,\n\t\t\tdefault: undefined,\n\t\t\thasDefault: false,\n\t\t\tprimaryKey: false,\n\t\t\tisUnique: false,\n\t\t\tuniqueName: undefined,\n\t\t\tuniqueType: undefined,\n\t\t\tdataType,\n\t\t\tcolumnType,\n\t\t\tgenerated: undefined,\n\t\t} as ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>;\n\t}\n\n\t/**\n\t * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n\t *\n\t * @example\n\t * ```ts\n\t * const users = pgTable('users', {\n\t * \tid: integer('id').$type<UserId>().primaryKey(),\n\t * \tdetails: json('details').$type<UserDetails>().notNull(),\n\t * });\n\t * ```\n\t */\n\t$type<TType>(): $Type<this, TType> {\n\t\treturn this as $Type<this, TType>;\n\t}\n\n\t/**\n\t * Adds a `not null` clause to the column definition.\n\t *\n\t * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n\t */\n\tnotNull(): NotNull<this> {\n\t\tthis.config.notNull = true;\n\t\treturn this as NotNull<this>;\n\t}\n\n\t/**\n\t * Adds a `default <value>` clause to the column definition.\n\t *\n\t * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n\t *\n\t * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n\t */\n\tdefault(value: (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL): HasDefault<this> {\n\t\tthis.config.default = value;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Adds a dynamic default value to the column.\n\t * The function will be called when the row is inserted, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$defaultFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasRuntimeDefault<HasDefault<this>> {\n\t\tthis.config.defaultFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasRuntimeDefault<HasDefault<this>>;\n\t}\n\n\t/**\n\t * Alias for {@link $defaultFn}.\n\t */\n\t$default = this.$defaultFn;\n\n\t/**\n\t * Adds a dynamic update value to the column.\n\t * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n\t * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$onUpdateFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasDefault<this> {\n\t\tthis.config.onUpdateFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $onUpdateFn}.\n\t */\n\t$onUpdate = this.$onUpdateFn;\n\n\t/**\n\t * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n\t *\n\t * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n\t */\n\tprimaryKey(): TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<NotNull<this>>>\n\t\t: IsPrimaryKey<NotNull<this>>\n\t{\n\t\tthis.config.primaryKey = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<NotNull<this>>>\n\t\t\t: IsPrimaryKey<NotNull<this>>;\n\t}\n\n\tabstract generatedAlwaysAs(\n\t\tas: SQL | T['data'] | (() => SQL),\n\t\tconfig?: Partial<GeneratedColumnConfig<unknown>>,\n\t): HasGenerated<this, {\n\t\ttype: 'always';\n\t}>;\n\n\t/** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n\tsetName(name: string) {\n\t\tif (this.config.name !== '') return;\n\t\tthis.config.name = name;\n\t}\n}\n\nexport type BuildColumn<\n\tTTableName extends string,\n\tTBuilder extends ColumnBuilderBase,\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? PgColumn<\n\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t{},\n\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t>\n\t: TDialect extends 'mysql' ? MySqlColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<\n\t\t\t\tOmit<\n\t\t\t\t\tTBuilder['_'],\n\t\t\t\t\t| keyof MakeColumnConfig<TBuilder['_'], TTableName>\n\t\t\t\t\t| 'brand'\n\t\t\t\t\t| 'dialect'\n\t\t\t\t\t| 'primaryKeyHasDefault'\n\t\t\t\t\t| 'mysqlColumnBuilderBrand'\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t: TDialect extends 'sqlite' ? SQLiteColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t\t>\n\t: TDialect extends 'common' ? Column<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t\t>\n\t: TDialect extends 'singlestore' ? SingleStoreColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<\n\t\t\t\tOmit<\n\t\t\t\t\tTBuilder['_'],\n\t\t\t\t\t| keyof MakeColumnConfig<TBuilder['_'], TTableName>\n\t\t\t\t\t| 'brand'\n\t\t\t\t\t| 'dialect'\n\t\t\t\t\t| 'primaryKeyHasDefault'\n\t\t\t\t\t| 'singlestoreColumnBuilderBrand'\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t: TDialect extends 'gel' ? GelColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t\t>\n\t: never;\n\nexport type BuildIndexColumn<\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? ExtraConfigColumn\n\t: TDialect extends 'gel' ? GelExtraConfigColumn\n\t: never;\n\n// TODO\n// try to make sql as well + indexRaw\n\n// optional after everything will be working as expected\n// also try to leave only needed methods for extraConfig\n// make an error if I pass .asc() to fk and so on\n\nexport type BuildColumns<\n\tTTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildColumn<TTableName, {\n\t\t\t_:\n\t\t\t\t& Omit<TConfigMap[Key]['_'], 'name'>\n\t\t\t\t& { name: TConfigMap[Key]['_']['name'] extends '' ? Assume<Key, string> : TConfigMap[Key]['_']['name'] };\n\t\t}, TDialect>;\n\t}\n\t& {};\n\nexport type BuildExtraConfigColumns<\n\t_TTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildIndexColumn<TDialect>;\n\t}\n\t& {};\n\nexport type ChangeColumnTableName<TColumn extends Column, TAlias extends string, TDialect extends Dialect> =\n\tTDialect extends 'pg' ? PgColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'mysql' ? MySqlColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'singlestore' ? SingleStoreColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'sqlite' ? SQLiteColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'gel' ? GelColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: never;\n", "/** @internal */\nexport const TableName = Symbol.for('drizzle:Name');\n", "import { entityKind } from '~/entity.ts';\nimport { TableName } from '~/table.utils.ts';\nimport type { AnyPgColumn, PgColumn } from './columns/index.ts';\nimport type { PgTable } from './table.ts';\n\nexport type UpdateDeleteAction = 'cascade' | 'restrict' | 'no action' | 'set null' | 'set default';\n\nexport type Reference = () => {\n\treadonly name?: string;\n\treadonly columns: PgColumn[];\n\treadonly foreignTable: PgTable;\n\treadonly foreignColumns: PgColumn[];\n};\n\nexport class ForeignKeyBuilder {\n\tstatic readonly [entityKind]: string = 'PgForeignKeyBuilder';\n\n\t/** @internal */\n\treference: Reference;\n\n\t/** @internal */\n\t_onUpdate: UpdateDeleteAction | undefined = 'no action';\n\n\t/** @internal */\n\t_onDelete: UpdateDeleteAction | undefined = 'no action';\n\n\tconstructor(\n\t\tconfig: () => {\n\t\t\tname?: string;\n\t\t\tcolumns: PgColumn[];\n\t\t\tforeignColumns: PgColumn[];\n\t\t},\n\t\tactions?: {\n\t\t\tonUpdate?: UpdateDeleteAction;\n\t\t\tonDelete?: UpdateDeleteAction;\n\t\t} | undefined,\n\t) {\n\t\tthis.reference = () => {\n\t\t\tconst { name, columns, foreignColumns } = config();\n\t\t\treturn { name, columns, foreignTable: foreignColumns[0]!.table as PgTable, foreignColumns };\n\t\t};\n\t\tif (actions) {\n\t\t\tthis._onUpdate = actions.onUpdate;\n\t\t\tthis._onDelete = actions.onDelete;\n\t\t}\n\t}\n\n\tonUpdate(action: UpdateDeleteAction): this {\n\t\tthis._onUpdate = action === undefined ? 'no action' : action;\n\t\treturn this;\n\t}\n\n\tonDelete(action: UpdateDeleteAction): this {\n\t\tthis._onDelete = action === undefined ? 'no action' : action;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: PgTable): ForeignKey {\n\t\treturn new ForeignKey(table, this);\n\t}\n}\n\nexport type AnyForeignKeyBuilder = ForeignKeyBuilder;\n\nexport class ForeignKey {\n\tstatic readonly [entityKind]: string = 'PgForeignKey';\n\n\treadonly reference: Reference;\n\treadonly onUpdate: UpdateDeleteAction | undefined;\n\treadonly onDelete: UpdateDeleteAction | undefined;\n\n\tconstructor(readonly table: PgTable, builder: ForeignKeyBuilder) {\n\t\tthis.reference = builder.reference;\n\t\tthis.onUpdate = builder._onUpdate;\n\t\tthis.onDelete = builder._onDelete;\n\t}\n\n\tgetName(): string {\n\t\tconst { name, columns, foreignColumns } = this.reference();\n\t\tconst columnNames = columns.map((column) => column.name);\n\t\tconst foreignColumnNames = foreignColumns.map((column) => column.name);\n\t\tconst chunks = [\n\t\t\tthis.table[TableName],\n\t\t\t...columnNames,\n\t\t\tforeignColumns[0]!.table[TableName],\n\t\t\t...foreignColumnNames,\n\t\t];\n\t\treturn name ?? `${chunks.join('_')}_fk`;\n\t}\n}\n\ntype ColumnsWithTable<\n\tTTableName extends string,\n\tTColumns extends PgColumn[],\n> = { [Key in keyof TColumns]: AnyPgColumn<{ tableName: TTableName }> };\n\nexport function foreignKey<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends [AnyPgColumn<{ tableName: TTableName }>, ...AnyPgColumn<{ tableName: TTableName }>[]],\n>(\n\tconfig: {\n\t\tname?: string;\n\t\tcolumns: TColumns;\n\t\tforeignColumns: ColumnsWithTable<TForeignTableName, TColumns>;\n\t},\n): ForeignKeyBuilder {\n\tfunction mappedConfig() {\n\t\tconst { name, columns, foreignColumns } = config;\n\t\treturn {\n\t\t\tname,\n\t\t\tcolumns,\n\t\t\tforeignColumns,\n\t\t};\n\t}\n\n\treturn new ForeignKeyBuilder(mappedConfig);\n}\n", "export function iife<T extends unknown[], U>(fn: (...args: T) => U, ...args: T): U {\n\treturn fn(...args);\n}\n", "import { entityKind } from '~/entity.ts';\nimport { TableName } from '~/table.utils.ts';\nimport type { PgColumn } from './columns/index.ts';\nimport type { PgTable } from './table.ts';\n\nexport function unique(name?: string): UniqueOnConstraintBuilder {\n\treturn new UniqueOnConstraintBuilder(name);\n}\n\nexport function uniqueKeyName(table: PgTable, columns: string[]) {\n\treturn `${table[TableName]}_${columns.join('_')}_unique`;\n}\n\nexport class UniqueConstraintBuilder {\n\tstatic readonly [entityKind]: string = 'PgUniqueConstraintBuilder';\n\n\t/** @internal */\n\tcolumns: PgColumn[];\n\t/** @internal */\n\tnullsNotDistinctConfig = false;\n\n\tconstructor(\n\t\tcolumns: PgColumn[],\n\t\tprivate name?: string,\n\t) {\n\t\tthis.columns = columns;\n\t}\n\n\tnullsNotDistinct() {\n\t\tthis.nullsNotDistinctConfig = true;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: PgTable): UniqueConstraint {\n\t\treturn new UniqueConstraint(table, this.columns, this.nullsNotDistinctConfig, this.name);\n\t}\n}\n\nexport class UniqueOnConstraintBuilder {\n\tstatic readonly [entityKind]: string = 'PgUniqueOnConstraintBuilder';\n\n\t/** @internal */\n\tname?: string;\n\n\tconstructor(\n\t\tname?: string,\n\t) {\n\t\tthis.name = name;\n\t}\n\n\ton(...columns: [PgColumn, ...PgColumn[]]) {\n\t\treturn new UniqueConstraintBuilder(columns, this.name);\n\t}\n}\n\nexport class UniqueConstraint {\n\tstatic readonly [entityKind]: string = 'PgUniqueConstraint';\n\n\treadonly columns: PgColumn[];\n\treadonly name?: string;\n\treadonly nullsNotDistinct: boolean = false;\n\n\tconstructor(readonly table: PgTable, columns: PgColumn[], nullsNotDistinct: boolean, name?: string) {\n\t\tthis.columns = columns;\n\t\tthis.name = name ?? uniqueKeyName(this.table, this.columns.map((column) => column.name));\n\t\tthis.nullsNotDistinct = nullsNotDistinct;\n\t}\n\n\tgetName() {\n\t\treturn this.name;\n\t}\n}\n", "function parsePgArrayValue(arrayString: string, startFrom: number, inQuotes: boolean): [string, number] {\n\tfor (let i = startFrom; i < arrayString.length; i++) {\n\t\tconst char = arrayString[i];\n\n\t\tif (char === '\\\\') {\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === '\"') {\n\t\t\treturn [arrayString.slice(startFrom, i).replace(/\\\\/g, ''), i + 1];\n\t\t}\n\n\t\tif (inQuotes) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === ',' || char === '}') {\n\t\t\treturn [arrayString.slice(startFrom, i).replace(/\\\\/g, ''), i];\n\t\t}\n\t}\n\n\treturn [arrayString.slice(startFrom).replace(/\\\\/g, ''), arrayString.length];\n}\n\nexport function parsePgNestedArray(arrayString: string, startFrom = 0): [any[], number] {\n\tconst result: any[] = [];\n\tlet i = startFrom;\n\tlet lastCharIsComma = false;\n\n\twhile (i < arrayString.length) {\n\t\tconst char = arrayString[i];\n\n\t\tif (char === ',') {\n\t\t\tif (lastCharIsComma || i === startFrom) {\n\t\t\t\tresult.push('');\n\t\t\t}\n\t\t\tlastCharIsComma = true;\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tlastCharIsComma = false;\n\n\t\tif (char === '\\\\') {\n\t\t\ti += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === '\"') {\n\t\t\tconst [value, startFrom] = parsePgArrayValue(arrayString, i + 1, true);\n\t\t\tresult.push(value);\n\t\t\ti = startFrom;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === '}') {\n\t\t\treturn [result, i + 1];\n\t\t}\n\n\t\tif (char === '{') {\n\t\t\tconst [value, startFrom] = parsePgNestedArray(arrayString, i + 1);\n\t\t\tresult.push(value);\n\t\t\ti = startFrom;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [value, newStartFrom] = parsePgArrayValue(arrayString, i, false);\n\t\tresult.push(value);\n\t\ti = newStartFrom;\n\t}\n\n\treturn [result, i];\n}\n\nexport function parsePgArray(arrayString: string): any[] {\n\tconst [result] = parsePgNestedArray(arrayString, 1);\n\treturn result;\n}\n\nexport function makePgArray(array: any[]): string {\n\treturn `{${\n\t\tarray.map((item) => {\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\treturn makePgArray(item);\n\t\t\t}\n\n\t\t\tif (typeof item === 'string') {\n\t\t\t\treturn `\"${item.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\n\t\t\t}\n\n\t\t\treturn `${item}`;\n\t\t}).join(',')\n\t}}`;\n}\n", "import type {\n\tColumnBuilderBase,\n\tColumnBuilderBaseConfig,\n\tColumnBuilderExtraConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tHasGenerated,\n\tMakeColumnConfig,\n} from '~/column-builder.ts';\nimport { ColumnBuilder } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { Simplify, Update } from '~/utils.ts';\n\nimport type { ForeignKey, UpdateDeleteAction } from '~/pg-core/foreign-keys.ts';\nimport { ForeignKeyBuilder } from '~/pg-core/foreign-keys.ts';\nimport type { AnyPgTable, PgTable } from '~/pg-core/table.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport { iife } from '~/tracing-utils.ts';\nimport type { PgIndexOpClass } from '../indexes.ts';\nimport { uniqueKeyName } from '../unique-constraint.ts';\nimport { makePgArray, parsePgArray } from '../utils/array.ts';\n\nexport interface ReferenceConfig {\n\tref: () => PgColumn;\n\tactions: {\n\t\tonUpdate?: UpdateDeleteAction;\n\t\tonDelete?: UpdateDeleteAction;\n\t};\n}\n\nexport interface PgColumnBuilderBase<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> extends ColumnBuilderBase<T, TTypeConfig & { dialect: 'pg' }> {}\n\nexport abstract class PgColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,\n> extends ColumnBuilder<T, TRuntimeConfig, TTypeConfig & { dialect: 'pg' }, TExtraConfig>\n\timplements PgColumnBuilderBase<T, TTypeConfig>\n{\n\tprivate foreignKeyConfigs: ReferenceConfig[] = [];\n\n\tstatic override readonly [entityKind]: string = 'PgColumnBuilder';\n\n\tarray<TSize extends number | undefined = undefined>(size?: TSize): PgArrayBuilder<\n\t\t& {\n\t\t\tname: T['name'];\n\t\t\tdataType: 'array';\n\t\t\tcolumnType: 'PgArray';\n\t\t\tdata: T['data'][];\n\t\t\tdriverParam: T['driverParam'][] | string;\n\t\t\tenumValues: T['enumValues'];\n\t\t\tsize: TSize;\n\t\t\tbaseBuilder: T;\n\t\t}\n\t\t& (T extends { notNull: true } ? { notNull: true } : {})\n\t\t& (T extends { hasDefault: true } ? { hasDefault: true } : {}),\n\t\tT\n\t> {\n\t\treturn new PgArrayBuilder(this.config.name, this as PgColumnBuilder<any, any>, size as any);\n\t}\n\n\treferences(\n\t\tref: ReferenceConfig['ref'],\n\t\tactions: ReferenceConfig['actions'] = {},\n\t): this {\n\t\tthis.foreignKeyConfigs.push({ ref, actions });\n\t\treturn this;\n\t}\n\n\tunique(\n\t\tname?: string,\n\t\tconfig?: { nulls: 'distinct' | 'not distinct' },\n\t): this {\n\t\tthis.config.isUnique = true;\n\t\tthis.config.uniqueName = name;\n\t\tthis.config.uniqueType = config?.nulls;\n\t\treturn this;\n\t}\n\n\tgeneratedAlwaysAs(as: SQL | T['data'] | (() => SQL)): HasGenerated<this, {\n\t\ttype: 'always';\n\t}> {\n\t\tthis.config.generated = {\n\t\t\tas,\n\t\t\ttype: 'always',\n\t\t\tmode: 'stored',\n\t\t};\n\t\treturn this as HasGenerated<this, {\n\t\t\ttype: 'always';\n\t\t}>;\n\t}\n\n\t/** @internal */\n\tbuildForeignKeys(column: PgColumn, table: PgTable): ForeignKey[] {\n\t\treturn this.foreignKeyConfigs.map(({ ref, actions }) => {\n\t\t\treturn iife(\n\t\t\t\t(ref, actions) => {\n\t\t\t\t\tconst builder = new ForeignKeyBuilder(() => {\n\t\t\t\t\t\tconst foreignColumn = ref();\n\t\t\t\t\t\treturn { columns: [column], foreignColumns: [foreignColumn] };\n\t\t\t\t\t});\n\t\t\t\t\tif (actions.onUpdate) {\n\t\t\t\t\t\tbuilder.onUpdate(actions.onUpdate);\n\t\t\t\t\t}\n\t\t\t\t\tif (actions.onDelete) {\n\t\t\t\t\t\tbuilder.onDelete(actions.onDelete);\n\t\t\t\t\t}\n\t\t\t\t\treturn builder.build(table);\n\t\t\t\t},\n\t\t\t\tref,\n\t\t\t\tactions,\n\t\t\t);\n\t\t});\n\t}\n\n\t/** @internal */\n\tabstract build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgColumn<MakeColumnConfig<T, TTableName>>;\n\n\t/** @internal */\n\tbuildExtraConfigColumn<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): ExtraConfigColumn {\n\t\treturn new ExtraConfigColumn(table, this.config);\n\t}\n}\n\n// To understand how to use `PgColumn` and `PgColumn`, see `Column` and `AnyColumn` documentation.\nexport abstract class PgColumn<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = {},\n\tTTypeConfig extends object = {},\n> extends Column<T, TRuntimeConfig, TTypeConfig & { dialect: 'pg' }> {\n\tstatic override readonly [entityKind]: string = 'PgColumn';\n\n\tconstructor(\n\t\toverride readonly table: PgTable,\n\t\tconfig: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>,\n\t) {\n\t\tif (!config.uniqueName) {\n\t\t\tconfig.uniqueName = uniqueKeyName(table, [config.name]);\n\t\t}\n\t\tsuper(table, config);\n\t}\n}\n\nexport type IndexedExtraConfigType = { order?: 'asc' | 'desc'; nulls?: 'first' | 'last'; opClass?: string };\n\nexport class ExtraConfigColumn<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n> extends PgColumn<T, IndexedExtraConfigType> {\n\tstatic override readonly [entityKind]: string = 'ExtraConfigColumn';\n\n\toverride getSQLType(): string {\n\t\treturn this.getSQLType();\n\t}\n\n\tindexConfig: IndexedExtraConfigType = {\n\t\torder: this.config.order ?? 'asc',\n\t\tnulls: this.config.nulls ?? 'last',\n\t\topClass: this.config.opClass,\n\t};\n\tdefaultConfig: IndexedExtraConfigType = {\n\t\torder: 'asc',\n\t\tnulls: 'last',\n\t\topClass: undefined,\n\t};\n\n\tasc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'asc';\n\t\treturn this;\n\t}\n\n\tdesc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'desc';\n\t\treturn this;\n\t}\n\n\tnullsFirst(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'first';\n\t\treturn this;\n\t}\n\n\tnullsLast(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'last';\n\t\treturn this;\n\t}\n\n\t/**\n\t * ### PostgreSQL documentation quote\n\t *\n\t * > An operator class with optional parameters can be specified for each column of an index.\n\t * The operator class identifies the operators to be used by the index for that column.\n\t * For example, a B-tree index on four-byte integers would use the int4_ops class;\n\t * this operator class includes comparison functions for four-byte integers.\n\t * In practice the default operator class for the column's data type is usually sufficient.\n\t * The main point of having operator classes is that for some data types, there could be more than one meaningful ordering.\n\t * For example, we might want to sort a complex-number data type either by absolute value or by real part.\n\t * We could do this by defining two operator classes for the data type and then selecting the proper class when creating an index.\n\t * More information about operator classes check:\n\t *\n\t * ### Useful links\n\t * https://www.postgresql.org/docs/current/sql-createindex.html\n\t *\n\t * https://www.postgresql.org/docs/current/indexes-opclass.html\n\t *\n\t * https://www.postgresql.org/docs/current/xindex.html\n\t *\n\t * ### Additional types\n\t * If you have the `pg_vector` extension installed in your database, you can use the\n\t * `vector_l2_ops`, `vector_ip_ops`, `vector_cosine_ops`, `vector_l1_ops`, `bit_hamming_ops`, `bit_jaccard_ops`, `halfvec_l2_ops`, `sparsevec_l2_ops` options, which are predefined types.\n\t *\n\t * **You can always specify any string you want in the operator class, in case Drizzle doesn't have it natively in its types**\n\t *\n\t * @param opClass\n\t * @returns\n\t */\n\top(opClass: PgIndexOpClass): Omit<this, 'op'> {\n\t\tthis.indexConfig.opClass = opClass;\n\t\treturn this;\n\t}\n}\n\nexport class IndexedColumn {\n\tstatic readonly [entityKind]: string = 'IndexedColumn';\n\tconstructor(\n\t\tname: string | undefined,\n\t\tkeyAsName: boolean,\n\t\ttype: string,\n\t\tindexConfig: IndexedExtraConfigType,\n\t) {\n\t\tthis.name = name;\n\t\tthis.keyAsName = keyAsName;\n\t\tthis.type = type;\n\t\tthis.indexConfig = indexConfig;\n\t}\n\n\tname: string | undefined;\n\tkeyAsName: boolean;\n\ttype: string;\n\tindexConfig: IndexedExtraConfigType;\n}\n\nexport type AnyPgColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> = PgColumn<\n\tRequired<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>\n>;\n\nexport type PgArrayColumnBuilderBaseConfig = ColumnBuilderBaseConfig<'array', 'PgArray'> & {\n\tsize: number | undefined;\n\tbaseBuilder: ColumnBuilderBaseConfig<ColumnDataType, string>;\n};\n\nexport class PgArrayBuilder<\n\tT extends PgArrayColumnBuilderBaseConfig,\n\tTBase extends ColumnBuilderBaseConfig<ColumnDataType, string> | PgArrayColumnBuilderBaseConfig,\n> extends PgColumnBuilder<\n\tT,\n\t{\n\t\tbaseBuilder: TBase extends PgArrayColumnBuilderBaseConfig ? PgArrayBuilder<\n\t\t\t\tTBase,\n\t\t\t\tTBase extends { baseBuilder: infer TBaseBuilder extends ColumnBuilderBaseConfig<any, any> } ? TBaseBuilder\n\t\t\t\t\t: never\n\t\t\t>\n\t\t\t: PgColumnBuilder<TBase, {}, Simplify<Omit<TBase, keyof ColumnBuilderBaseConfig<any, any>>>>;\n\t\tsize: T['size'];\n\t},\n\t{\n\t\tbaseBuilder: TBase extends PgArrayColumnBuilderBaseConfig ? PgArrayBuilder<\n\t\t\t\tTBase,\n\t\t\t\tTBase extends { baseBuilder: infer TBaseBuilder extends ColumnBuilderBaseConfig<any, any> } ? TBaseBuilder\n\t\t\t\t\t: never\n\t\t\t>\n\t\t\t: PgColumnBuilder<TBase, {}, Simplify<Omit<TBase, keyof ColumnBuilderBaseConfig<any, any>>>>;\n\t\tsize: T['size'];\n\t}\n> {\n\tstatic override readonly [entityKind] = 'PgArrayBuilder';\n\n\tconstructor(\n\t\tname: string,\n\t\tbaseBuilder: PgArrayBuilder<T, TBase>['config']['baseBuilder'],\n\t\tsize: T['size'],\n\t) {\n\t\tsuper(name, 'array', 'PgArray');\n\t\tthis.config.baseBuilder = baseBuilder;\n\t\tthis.config.size = size;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgArray<MakeColumnConfig<T, TTableName> & { size: T['size']; baseBuilder: T['baseBuilder'] }, TBase> {\n\t\tconst baseColumn = this.config.baseBuilder.build(table);\n\t\treturn new PgArray<MakeColumnConfig<T, TTableName> & { size: T['size']; baseBuilder: T['baseBuilder'] }, TBase>(\n\t\t\ttable as AnyPgTable<{ name: MakeColumnConfig<T, TTableName>['tableName'] }>,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t\tbaseColumn,\n\t\t);\n\t}\n}\n\nexport class PgArray<\n\tT extends ColumnBaseConfig<'array', 'PgArray'> & {\n\t\tsize: number | undefined;\n\t\tbaseBuilder: ColumnBuilderBaseConfig<ColumnDataType, string>;\n\t},\n\tTBase extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n> extends PgColumn<T, {}, { size: T['size']; baseBuilder: T['baseBuilder'] }> {\n\treadonly size: T['size'];\n\n\tstatic override readonly [entityKind]: string = 'PgArray';\n\n\tconstructor(\n\t\ttable: AnyPgTable<{ name: T['tableName'] }>,\n\t\tconfig: PgArrayBuilder<T, TBase>['config'],\n\t\treadonly baseColumn: PgColumn,\n\t\treadonly range?: [number | undefined, number | undefined],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.size = config.size;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn `${this.baseColumn.getSQLType()}[${typeof this.size === 'number' ? this.size : ''}]`;\n\t}\n\n\toverride mapFromDriverValue(value: unknown[] | string): T['data'] {\n\t\tif (typeof value === 'string') {\n\t\t\t// Thank you node-postgres for not parsing enum arrays\n\t\t\tvalue = parsePgArray(value);\n\t\t}\n\t\treturn value.map((v) => this.baseColumn.mapFromDriverValue(v));\n\t}\n\n\toverride mapToDriverValue(value: unknown[], isNestedArray = false): unknown[] | string {\n\t\tconst a = value.map((v) =>\n\t\t\tv === null\n\t\t\t\t? null\n\t\t\t\t: is(this.baseColumn, PgArray)\n\t\t\t\t? this.baseColumn.mapToDriverValue(v as unknown[], true)\n\t\t\t\t: this.baseColumn.mapToDriverValue(v)\n\t\t);\n\t\tif (isNestedArray) return a;\n\t\treturn makePgArray(a);\n\t}\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport type { NonArray, Writable } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\n// Enum as ts enum\n\nexport type PgEnumObjectColumnBuilderInitial<TName extends string, TValues extends object> = PgEnumObjectColumnBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgEnumObjectColumn';\n\tdata: TValues[keyof TValues];\n\tenumValues: string[];\n\tdriverParam: string;\n}>;\n\nexport interface PgEnumObject<TValues extends object> {\n\t(): PgEnumObjectColumnBuilderInitial<'', TValues>;\n\t<TName extends string>(name: TName): PgEnumObjectColumnBuilderInitial<TName, TValues>;\n\t<TName extends string>(name?: TName): PgEnumObjectColumnBuilderInitial<TName, TValues>;\n\n\treadonly enumName: string;\n\treadonly enumValues: string[];\n\treadonly schema: string | undefined;\n\t/** @internal */\n\t[isPgEnumSym]: true;\n}\n\nexport class PgEnumObjectColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'PgEnumObjectColumn'> & { enumValues: string[] },\n> extends PgColumnBuilder<T, { enum: PgEnumObject<any> }> {\n\tstatic override readonly [entityKind]: string = 'PgEnumObjectColumnBuilder';\n\n\tconstructor(name: T['name'], enumInstance: PgEnumObject<any>) {\n\t\tsuper(name, 'string', 'PgEnumObjectColumn');\n\t\tthis.config.enum = enumInstance;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgEnumObjectColumn<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgEnumObjectColumn<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgEnumObjectColumn<T extends ColumnBaseConfig<'string', 'PgEnumObjectColumn'> & { enumValues: object }>\n\textends PgColumn<T, { enum: PgEnumObject<object> }>\n{\n\tstatic override readonly [entityKind]: string = 'PgEnumObjectColumn';\n\n\treadonly enum;\n\toverride readonly enumValues = this.config.enum.enumValues;\n\n\tconstructor(\n\t\ttable: AnyPgTable<{ name: T['tableName'] }>,\n\t\tconfig: PgEnumObjectColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.enum = config.enum;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.enum.enumName;\n\t}\n}\n\n// Enum as string union\n\nexport type PgEnumColumnBuilderInitial<TName extends string, TValues extends [string, ...string[]]> =\n\tPgEnumColumnBuilder<{\n\t\tname: TName;\n\t\tdataType: 'string';\n\t\tcolumnType: 'PgEnumColumn';\n\t\tdata: TValues[number];\n\t\tenumValues: TValues;\n\t\tdriverParam: string;\n\t}>;\n\nconst isPgEnumSym = Symbol.for('drizzle:isPgEnum');\nexport interface PgEnum<TValues extends [string, ...string[]]> {\n\t(): PgEnumColumnBuilderInitial<'', TValues>;\n\t<TName extends string>(name: TName): PgEnumColumnBuilderInitial<TName, TValues>;\n\t<TName extends string>(name?: TName): PgEnumColumnBuilderInitial<TName, TValues>;\n\n\treadonly enumName: string;\n\treadonly enumValues: TValues;\n\treadonly schema: string | undefined;\n\t/** @internal */\n\t[isPgEnumSym]: true;\n}\n\nexport function isPgEnum(obj: unknown): obj is PgEnum<[string, ...string[]]> {\n\treturn !!obj && typeof obj === 'function' && isPgEnumSym in obj && obj[isPgEnumSym] === true;\n}\n\nexport class PgEnumColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'PgEnumColumn'> & { enumValues: [string, ...string[]] },\n> extends PgColumnBuilder<T, { enum: PgEnum<T['enumValues']> }> {\n\tstatic override readonly [entityKind]: string = 'PgEnumColumnBuilder';\n\n\tconstructor(name: T['name'], enumInstance: PgEnum<T['enumValues']>) {\n\t\tsuper(name, 'string', 'PgEnumColumn');\n\t\tthis.config.enum = enumInstance;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgEnumColumn<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgEnumColumn<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgEnumColumn<T extends ColumnBaseConfig<'string', 'PgEnumColumn'> & { enumValues: [string, ...string[]] }>\n\textends PgColumn<T, { enum: PgEnum<T['enumValues']> }>\n{\n\tstatic override readonly [entityKind]: string = 'PgEnumColumn';\n\n\treadonly enum = this.config.enum;\n\toverride readonly enumValues = this.config.enum.enumValues;\n\n\tconstructor(\n\t\ttable: AnyPgTable<{ name: T['tableName'] }>,\n\t\tconfig: PgEnumColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.enum = config.enum;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.enum.enumName;\n\t}\n}\n\nexport function pgEnum<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tenumName: string,\n\tvalues: T | Writable<T>,\n): PgEnum<Writable<T>>;\n\nexport function pgEnum<E extends Record<string, string>>(\n\tenumName: string,\n\tenumObj: NonArray<E>,\n): PgEnumObject<E>;\n\nexport function pgEnum(\n\tenumName: any,\n\tinput: any,\n): any {\n\treturn Array.isArray(input)\n\t\t? pgEnumWithSchema(enumName, [...input] as [string, ...string[]], undefined)\n\t\t: pgEnumObjectWithSchema(enumName, input, undefined);\n}\n\n/** @internal */\nexport function pgEnumWithSchema<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tenumName: string,\n\tvalues: T | Writable<T>,\n\tschema?: string,\n): PgEnum<Writable<T>> {\n\tconst enumInstance: PgEnum<Writable<T>> = Object.assign(\n\t\t<TName extends string>(name?: TName): PgEnumColumnBuilderInitial<TName, Writable<T>> =>\n\t\t\tnew PgEnumColumnBuilder(name ?? '' as TName, enumInstance),\n\t\t{\n\t\t\tenumName,\n\t\t\tenumValues: values,\n\t\t\tschema,\n\t\t\t[isPgEnumSym]: true,\n\t\t} as const,\n\t);\n\n\treturn enumInstance;\n}\n\n/** @internal */\nexport function pgEnumObjectWithSchema<T extends object>(\n\tenumName: string,\n\tvalues: T,\n\tschema?: string,\n): PgEnumObject<T> {\n\tconst enumInstance: PgEnumObject<T> = Object.assign(\n\t\t<TName extends string>(name?: TName): PgEnumObjectColumnBuilderInitial<TName, T> =>\n\t\t\tnew PgEnumObjectColumnBuilder(name ?? '' as TName, enumInstance),\n\t\t{\n\t\t\tenumName,\n\t\t\tenumValues: Object.values(values),\n\t\t\tschema,\n\t\t\t[isPgEnumSym]: true,\n\t\t} as const,\n\t);\n\n\treturn enumInstance;\n}\n", "import { entityKind } from './entity.ts';\nimport type { SQL, SQLWrapper } from './sql/sql.ts';\n\nexport interface Subquery<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTAlias extends string = string,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTSelectedFields extends Record<string, unknown> = Record<string, unknown>,\n> extends SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\nexport class Subquery<\n\tTAlias extends string = string,\n\tTSelectedFields extends Record<string, unknown> = Record<string, unknown>,\n> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Subquery';\n\n\tdeclare _: {\n\t\tbrand: 'Subquery';\n\t\tsql: SQL;\n\t\tselectedFields: TSelectedFields;\n\t\talias: TAlias;\n\t\tisWith: boolean;\n\t\tusedTables?: string[];\n\t};\n\n\tconstructor(sql: SQL, fields: TSelectedFields, alias: string, isWith = false, usedTables: string[] = []) {\n\t\tthis._ = {\n\t\t\tbrand: 'Subquery',\n\t\t\tsql,\n\t\t\tselectedFields: fields as TSelectedFields,\n\t\t\talias: alias as TAlias,\n\t\t\tisWith,\n\t\t\tusedTables,\n\t\t};\n\t}\n\n\t// getSQL(): SQL<unknown> {\n\t// \treturn new SQL([this]);\n\t// }\n}\n\nexport class WithSubquery<\n\tTAlias extends string = string,\n\tTSelection extends Record<string, unknown> = Record<string, unknown>,\n> extends Subquery<TAlias, TSelection> {\n\tstatic override readonly [entityKind]: string = 'WithSubquery';\n}\n\nexport type WithSubqueryWithoutSelection<TAlias extends string> = WithSubquery<TAlias, {}>;\n", "// package.json\nvar version = \"0.45.2\";\n\n// src/version.ts\nvar compatibilityVersion = 10;\nexport {\n  compatibilityVersion,\n  version as npmVersion\n};\n", "import type { Span, Tracer } from '@opentelemetry/api';\nimport { iife } from '~/tracing-utils.ts';\nimport { npmVersion } from '~/version.ts';\n\nlet otel: typeof import('@opentelemetry/api') | undefined;\nlet rawTracer: Tracer | undefined;\n// try {\n// \totel = await import('@opentelemetry/api');\n// } catch (err: any) {\n// \tif (err.code !== 'MODULE_NOT_FOUND' && err.code !== 'ERR_MODULE_NOT_FOUND') {\n// \t\tthrow err;\n// \t}\n// }\n\ntype SpanName =\n\t| 'drizzle.operation'\n\t| 'drizzle.prepareQuery'\n\t| 'drizzle.buildSQL'\n\t| 'drizzle.execute'\n\t| 'drizzle.driver.execute'\n\t| 'drizzle.mapResponse';\n\n/** @internal */\nexport const tracer = {\n\tstartActiveSpan<F extends (span?: Span) => unknown>(name: SpanName, fn: F): ReturnType<F> {\n\t\tif (!otel) {\n\t\t\treturn fn() as ReturnType<F>;\n\t\t}\n\n\t\tif (!rawTracer) {\n\t\t\trawTracer = otel.trace.getTracer('drizzle-orm', npmVersion);\n\t\t}\n\n\t\treturn iife(\n\t\t\t(otel, rawTracer) =>\n\t\t\t\trawTracer.startActiveSpan(\n\t\t\t\t\tname,\n\t\t\t\t\t((span: Span) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn fn(span);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\t\t\tcode: otel.SpanStatusCode.ERROR,\n\t\t\t\t\t\t\t\tmessage: e instanceof Error ? e.message : 'Unknown error', // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tspan.end();\n\t\t\t\t\t\t}\n\t\t\t\t\t}) as F,\n\t\t\t\t),\n\t\t\totel,\n\t\t\trawTracer,\n\t\t);\n\t},\n};\n", "export const ViewBaseConfig = Symbol.for('drizzle:ViewBaseConfig');\n", "import type { Column, GetColumnData } from './column.ts';\nimport { entityKind } from './entity.ts';\nimport type { OptionalKeyOnly, RequiredKeyOnly } from './operations.ts';\nimport type { SQLWrapper } from './sql/sql.ts';\nimport { TableName } from './table.utils.ts';\nimport type { Simplify, Update } from './utils.ts';\n\nexport interface TableConfig<TColumn extends Column = Column<any>> {\n\tname: string;\n\tschema: string | undefined;\n\tcolumns: Record<string, TColumn>;\n\tdialect: string;\n}\n\nexport type UpdateTableConfig<T extends TableConfig, TUpdate extends Partial<TableConfig>> = Required<\n\tUpdate<T, TUpdate>\n>;\n\n/** @internal */\nexport const Schema = Symbol.for('drizzle:Schema');\n\n/** @internal */\nexport const Columns = Symbol.for('drizzle:Columns');\n\n/** @internal */\nexport const ExtraConfigColumns = Symbol.for('drizzle:ExtraConfigColumns');\n\n/** @internal */\nexport const OriginalName = Symbol.for('drizzle:OriginalName');\n\n/** @internal */\nexport const BaseName = Symbol.for('drizzle:BaseName');\n\n/** @internal */\nexport const IsAlias = Symbol.for('drizzle:IsAlias');\n\n/** @internal */\nexport const ExtraConfigBuilder = Symbol.for('drizzle:ExtraConfigBuilder');\n\nconst IsDrizzleTable = Symbol.for('drizzle:IsDrizzleTable');\n\nexport interface Table<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tT extends TableConfig = TableConfig,\n> extends SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\n\nexport class Table<T extends TableConfig = TableConfig> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Table';\n\n\tdeclare readonly _: {\n\t\treadonly brand: 'Table';\n\t\treadonly config: T;\n\t\treadonly name: T['name'];\n\t\treadonly schema: T['schema'];\n\t\treadonly columns: T['columns'];\n\t\treadonly inferSelect: InferSelectModel<Table<T>>;\n\t\treadonly inferInsert: InferInsertModel<Table<T>>;\n\t};\n\n\tdeclare readonly $inferSelect: InferSelectModel<Table<T>>;\n\tdeclare readonly $inferInsert: InferInsertModel<Table<T>>;\n\n\t/** @internal */\n\tstatic readonly Symbol = {\n\t\tName: TableName as typeof TableName,\n\t\tSchema: Schema as typeof Schema,\n\t\tOriginalName: OriginalName as typeof OriginalName,\n\t\tColumns: Columns as typeof Columns,\n\t\tExtraConfigColumns: ExtraConfigColumns as typeof ExtraConfigColumns,\n\t\tBaseName: BaseName as typeof BaseName,\n\t\tIsAlias: IsAlias as typeof IsAlias,\n\t\tExtraConfigBuilder: ExtraConfigBuilder as typeof ExtraConfigBuilder,\n\t};\n\n\t/**\n\t * @internal\n\t * Can be changed if the table is aliased.\n\t */\n\t[TableName]: string;\n\n\t/**\n\t * @internal\n\t * Used to store the original name of the table, before any aliasing.\n\t */\n\t[OriginalName]: string;\n\n\t/** @internal */\n\t[Schema]: string | undefined;\n\n\t/** @internal */\n\t[Columns]!: T['columns'];\n\n\t/** @internal */\n\t[ExtraConfigColumns]!: Record<string, unknown>;\n\n\t/**\n\t *  @internal\n\t * Used to store the table name before the transformation via the `tableCreator` functions.\n\t */\n\t[BaseName]: string;\n\n\t/** @internal */\n\t[IsAlias] = false;\n\n\t/** @internal */\n\t[IsDrizzleTable] = true;\n\n\t/** @internal */\n\t[ExtraConfigBuilder]: ((self: any) => Record<string, unknown> | unknown[]) | undefined = undefined;\n\n\tconstructor(name: string, schema: string | undefined, baseName: string) {\n\t\tthis[TableName] = this[OriginalName] = name;\n\t\tthis[Schema] = schema;\n\t\tthis[BaseName] = baseName;\n\t}\n}\n\nexport function isTable(table: unknown): table is Table {\n\treturn typeof table === 'object' && table !== null && IsDrizzleTable in table;\n}\n\n/**\n * Any table with a specified boundary.\n *\n * @example\n\t```ts\n\t// Any table with a specific name\n\ttype AnyUsersTable = AnyTable<{ name: 'users' }>;\n\t```\n *\n * To describe any table with any config, simply use `Table` without any type arguments, like this:\n *\n\t```ts\n\tfunction needsTable(table: Table) {\n\t\t...\n\t}\n\t```\n */\nexport type AnyTable<TPartial extends Partial<TableConfig>> = Table<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport function getTableName<T extends Table>(table: T): T['_']['name'] {\n\treturn table[TableName];\n}\n\nexport function getTableUniqueName<T extends Table>(table: T): `${T['_']['schema']}.${T['_']['name']}` {\n\treturn `${table[Schema] ?? 'public'}.${table[TableName]}`;\n}\n\nexport type MapColumnName<TName extends string, TColumn extends Column, TDBColumNames extends boolean> =\n\tTDBColumNames extends true ? TColumn['_']['name']\n\t\t: TName;\n\nexport type InferModelFromColumns<\n\tTColumns extends Record<string, Column>,\n\tTInferMode extends 'select' | 'insert' = 'select',\n\tTConfig extends { dbColumnNames: boolean; override?: boolean } = { dbColumnNames: false; override: false },\n> = Simplify<\n\tTInferMode extends 'insert' ?\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as RequiredKeyOnly<\n\t\t\t\t\t\tMapColumnName<Key, TColumns[Key], TConfig['dbColumnNames']>,\n\t\t\t\t\t\tTColumns[Key]\n\t\t\t\t\t>\n\t\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t\t}\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as OptionalKeyOnly<\n\t\t\t\t\t\tMapColumnName<Key, TColumns[Key], TConfig['dbColumnNames']>,\n\t\t\t\t\t\tTColumns[Key],\n\t\t\t\t\t\tTConfig['override']\n\t\t\t\t\t>\n\t\t\t\t]?: GetColumnData<TColumns[Key], 'query'> | undefined;\n\t\t\t}\n\t\t: {\n\t\t\t[\n\t\t\t\tKey in keyof TColumns & string as MapColumnName<\n\t\t\t\t\tKey,\n\t\t\t\t\tTColumns[Key],\n\t\t\t\t\tTConfig['dbColumnNames']\n\t\t\t\t>\n\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t}\n>;\n\n/** @deprecated Use one of the alternatives: {@link InferSelectModel} / {@link InferInsertModel}, or `table.$inferSelect` / `table.$inferInsert`\n */\nexport type InferModel<\n\tTTable extends Table,\n\tTInferMode extends 'select' | 'insert' = 'select',\n\tTConfig extends { dbColumnNames: boolean } = { dbColumnNames: false },\n> = InferModelFromColumns<TTable['_']['columns'], TInferMode, TConfig>;\n\nexport type InferSelectModel<\n\tTTable extends Table,\n\tTConfig extends { dbColumnNames: boolean } = { dbColumnNames: false },\n> = InferModelFromColumns<TTable['_']['columns'], 'select', TConfig>;\n\nexport type InferInsertModel<\n\tTTable extends Table,\n\tTConfig extends { dbColumnNames: boolean; override?: boolean } = { dbColumnNames: false; override: false },\n> = InferModelFromColumns<TTable['_']['columns'], 'insert', TConfig>;\n\nexport type InferEnum<T> = T extends { enumValues: readonly (infer U)[] } ? U\n\t: never;\n", "import type { CasingCache } from '~/casing.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { isPgEnum } from '~/pg-core/columns/enum.ts';\nimport type { SelectResult } from '~/query-builders/select.types.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { tracer } from '~/tracing.ts';\nimport type { Assume, Equal } from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { AnyColumn } from '../column.ts';\nimport { Column } from '../column.ts';\nimport { IsAlias, Table } from '../table.ts';\n\n/**\n * This class is used to indicate a primitive param value that is used in `sql` tag.\n * It is only used on type level and is never instantiated at runtime.\n * If you see a value of this type in the code, its runtime value is actually the primitive param value.\n */\nexport class FakePrimitiveParam {\n\tstatic readonly [entityKind]: string = 'FakePrimitiveParam';\n}\n\nexport type Chunk =\n\t| string\n\t| Table\n\t| View\n\t| AnyColumn\n\t| Name\n\t| Param\n\t| Placeholder\n\t| SQL;\n\nexport interface BuildQueryConfig {\n\tcasing: CasingCache;\n\tescapeName(name: string): string;\n\tescapeParam(num: number, value: unknown): string;\n\tescapeString(str: string): string;\n\tprepareTyping?: (encoder: DriverValueEncoder<unknown, unknown>) => QueryTypingsValue;\n\tparamStartIndex?: { value: number };\n\tinlineParams?: boolean;\n\tinvokeSource?: 'indexes' | undefined;\n}\n\nexport type QueryTypingsValue = 'json' | 'decimal' | 'time' | 'timestamp' | 'uuid' | 'date' | 'none';\n\nexport interface Query {\n\tsql: string;\n\tparams: unknown[];\n}\n\nexport interface QueryWithTypings extends Query {\n\ttypings?: QueryTypingsValue[];\n}\n\n/**\n * Any value that implements the `getSQL` method. The implementations include:\n * - `Table`\n * - `Column`\n * - `View`\n * - `Subquery`\n * - `SQL`\n * - `SQL.Aliased`\n * - `Placeholder`\n * - `Param`\n */\nexport interface SQLWrapper {\n\tgetSQL(): SQL;\n\tshouldOmitSQLParens?(): boolean;\n}\n\nexport function isSQLWrapper(value: unknown): value is SQLWrapper {\n\treturn value !== null && value !== undefined && typeof (value as any).getSQL === 'function';\n}\n\nfunction mergeQueries(queries: QueryWithTypings[]): QueryWithTypings {\n\tconst result: QueryWithTypings = { sql: '', params: [] };\n\tfor (const query of queries) {\n\t\tresult.sql += query.sql;\n\t\tresult.params.push(...query.params);\n\t\tif (query.typings?.length) {\n\t\t\tif (!result.typings) {\n\t\t\t\tresult.typings = [];\n\t\t\t}\n\t\t\tresult.typings.push(...query.typings);\n\t\t}\n\t}\n\treturn result;\n}\n\nexport class StringChunk implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'StringChunk';\n\n\treadonly value: string[];\n\n\tconstructor(value: string | string[]) {\n\t\tthis.value = Array.isArray(value) ? value : [value];\n\t}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\nexport class SQL<T = unknown> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'SQL';\n\n\tdeclare _: {\n\t\tbrand: 'SQL';\n\t\ttype: T;\n\t};\n\n\t/** @internal */\n\tdecoder: DriverValueDecoder<T, any> = noopDecoder;\n\tprivate shouldInlineParams = false;\n\n\t/** @internal */\n\tusedTables: string[] = [];\n\n\tconstructor(readonly queryChunks: SQLChunk[]) {\n\t\tfor (const chunk of queryChunks) {\n\t\t\tif (is(chunk, Table)) {\n\t\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\n\t\t\t\tthis.usedTables.push(\n\t\t\t\t\tschemaName === undefined\n\t\t\t\t\t\t? chunk[Table.Symbol.Name]\n\t\t\t\t\t\t: schemaName + '.' + chunk[Table.Symbol.Name],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tappend(query: SQL): this {\n\t\tthis.queryChunks.push(...query.queryChunks);\n\t\treturn this;\n\t}\n\n\ttoQuery(config: BuildQueryConfig): QueryWithTypings {\n\t\treturn tracer.startActiveSpan('drizzle.buildSQL', (span) => {\n\t\t\tconst query = this.buildQueryFromSourceParams(this.queryChunks, config);\n\t\t\tspan?.setAttributes({\n\t\t\t\t'drizzle.query.text': query.sql,\n\t\t\t\t'drizzle.query.params': JSON.stringify(query.params),\n\t\t\t});\n\t\t\treturn query;\n\t\t});\n\t}\n\n\tbuildQueryFromSourceParams(chunks: SQLChunk[], _config: BuildQueryConfig): Query {\n\t\tconst config = Object.assign({}, _config, {\n\t\t\tinlineParams: _config.inlineParams || this.shouldInlineParams,\n\t\t\tparamStartIndex: _config.paramStartIndex || { value: 0 },\n\t\t});\n\n\t\tconst {\n\t\t\tcasing,\n\t\t\tescapeName,\n\t\t\tescapeParam,\n\t\t\tprepareTyping,\n\t\t\tinlineParams,\n\t\t\tparamStartIndex,\n\t\t} = config;\n\n\t\treturn mergeQueries(chunks.map((chunk): QueryWithTypings => {\n\t\t\tif (is(chunk, StringChunk)) {\n\t\t\t\treturn { sql: chunk.value.join(''), params: [] };\n\t\t\t}\n\n\t\t\tif (is(chunk, Name)) {\n\t\t\t\treturn { sql: escapeName(chunk.value), params: [] };\n\t\t\t}\n\n\t\t\tif (chunk === undefined) {\n\t\t\t\treturn { sql: '', params: [] };\n\t\t\t}\n\n\t\t\tif (Array.isArray(chunk)) {\n\t\t\t\tconst result: SQLChunk[] = [new StringChunk('(')];\n\t\t\t\tfor (const [i, p] of chunk.entries()) {\n\t\t\t\t\tresult.push(p);\n\t\t\t\t\tif (i < chunk.length - 1) {\n\t\t\t\t\t\tresult.push(new StringChunk(', '));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult.push(new StringChunk(')'));\n\t\t\t\treturn this.buildQueryFromSourceParams(result, config);\n\t\t\t}\n\n\t\t\tif (is(chunk, SQL)) {\n\t\t\t\treturn this.buildQueryFromSourceParams(chunk.queryChunks, {\n\t\t\t\t\t...config,\n\t\t\t\t\tinlineParams: inlineParams || chunk.shouldInlineParams,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (is(chunk, Table)) {\n\t\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\t\t\t\tconst tableName = chunk[Table.Symbol.Name];\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === undefined || chunk[IsAlias]\n\t\t\t\t\t\t? escapeName(tableName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(tableName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, Column)) {\n\t\t\t\tconst columnName = casing.getColumnCasing(chunk);\n\t\t\t\tif (_config.invokeSource === 'indexes') {\n\t\t\t\t\treturn { sql: escapeName(columnName), params: [] };\n\t\t\t\t}\n\n\t\t\t\tconst schemaName = chunk.table[Table.Symbol.Schema];\n\t\t\t\treturn {\n\t\t\t\t\tsql: chunk.table[IsAlias] || schemaName === undefined\n\t\t\t\t\t\t? escapeName(chunk.table[Table.Symbol.Name]) + '.' + escapeName(columnName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(chunk.table[Table.Symbol.Name]) + '.'\n\t\t\t\t\t\t\t+ escapeName(columnName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, View)) {\n\t\t\t\tconst schemaName = chunk[ViewBaseConfig].schema;\n\t\t\t\tconst viewName = chunk[ViewBaseConfig].name;\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === undefined || chunk[ViewBaseConfig].isAlias\n\t\t\t\t\t\t? escapeName(viewName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(viewName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, Param)) {\n\t\t\t\tif (is(chunk.value, Placeholder)) {\n\t\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ['none'] };\n\t\t\t\t}\n\n\t\t\t\tconst mappedValue = chunk.value === null ? null : chunk.encoder.mapToDriverValue(chunk.value);\n\n\t\t\t\tif (is(mappedValue, SQL)) {\n\t\t\t\t\treturn this.buildQueryFromSourceParams([mappedValue], config);\n\t\t\t\t}\n\n\t\t\t\tif (inlineParams) {\n\t\t\t\t\treturn { sql: this.mapInlineParam(mappedValue, config), params: [] };\n\t\t\t\t}\n\n\t\t\t\tlet typings: QueryTypingsValue[] = ['none'];\n\t\t\t\tif (prepareTyping) {\n\t\t\t\t\ttypings = [prepareTyping(chunk.encoder)];\n\t\t\t\t}\n\n\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, mappedValue), params: [mappedValue], typings };\n\t\t\t}\n\n\t\t\tif (is(chunk, Placeholder)) {\n\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ['none'] };\n\t\t\t}\n\n\t\t\tif (is(chunk, SQL.Aliased) && chunk.fieldAlias !== undefined) {\n\t\t\t\treturn { sql: escapeName(chunk.fieldAlias), params: [] };\n\t\t\t}\n\n\t\t\tif (is(chunk, Subquery)) {\n\t\t\t\tif (chunk._.isWith) {\n\t\t\t\t\treturn { sql: escapeName(chunk._.alias), params: [] };\n\t\t\t\t}\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk('('),\n\t\t\t\t\tchunk._.sql,\n\t\t\t\t\tnew StringChunk(') '),\n\t\t\t\t\tnew Name(chunk._.alias),\n\t\t\t\t], config);\n\t\t\t}\n\n\t\t\tif (isPgEnum(chunk)) {\n\t\t\t\tif (chunk.schema) {\n\t\t\t\t\treturn { sql: escapeName(chunk.schema) + '.' + escapeName(chunk.enumName), params: [] };\n\t\t\t\t}\n\t\t\t\treturn { sql: escapeName(chunk.enumName), params: [] };\n\t\t\t}\n\n\t\t\tif (isSQLWrapper(chunk)) {\n\t\t\t\tif (chunk.shouldOmitSQLParens?.()) {\n\t\t\t\t\treturn this.buildQueryFromSourceParams([chunk.getSQL()], config);\n\t\t\t\t}\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk('('),\n\t\t\t\t\tchunk.getSQL(),\n\t\t\t\t\tnew StringChunk(')'),\n\t\t\t\t], config);\n\t\t\t}\n\n\t\t\tif (inlineParams) {\n\t\t\t\treturn { sql: this.mapInlineParam(chunk, config), params: [] };\n\t\t\t}\n\n\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ['none'] };\n\t\t}));\n\t}\n\n\tprivate mapInlineParam(\n\t\tchunk: unknown,\n\t\t{ escapeString }: BuildQueryConfig,\n\t): string {\n\t\tif (chunk === null) {\n\t\t\treturn 'null';\n\t\t}\n\t\tif (typeof chunk === 'number' || typeof chunk === 'boolean') {\n\t\t\treturn chunk.toString();\n\t\t}\n\t\tif (typeof chunk === 'string') {\n\t\t\treturn escapeString(chunk);\n\t\t}\n\t\tif (typeof chunk === 'object') {\n\t\t\tconst mappedValueAsString = chunk.toString();\n\t\t\tif (mappedValueAsString === '[object Object]') {\n\t\t\t\treturn escapeString(JSON.stringify(chunk));\n\t\t\t}\n\t\t\treturn escapeString(mappedValueAsString);\n\t\t}\n\t\tthrow new Error('Unexpected param value: ' + chunk);\n\t}\n\n\tgetSQL(): SQL {\n\t\treturn this;\n\t}\n\n\tas(alias: string): SQL.Aliased<T>;\n\t/**\n\t * @deprecated\n\t * Use ``sql<DataType>`query`.as(alias)`` instead.\n\t */\n\tas<TData>(): SQL<TData>;\n\t/**\n\t * @deprecated\n\t * Use ``sql<DataType>`query`.as(alias)`` instead.\n\t */\n\tas<TData>(alias: string): SQL.Aliased<TData>;\n\tas(alias?: string): SQL<T> | SQL.Aliased<T> {\n\t\t// TODO: remove with deprecated overloads\n\t\tif (alias === undefined) {\n\t\t\treturn this;\n\t\t}\n\n\t\treturn new SQL.Aliased(this, alias);\n\t}\n\n\tmapWith<\n\t\tTDecoder extends\n\t\t\t| DriverValueDecoder<any, any>\n\t\t\t| DriverValueDecoder<any, any>['mapFromDriverValue'],\n\t>(decoder: TDecoder): SQL<GetDecoderResult<TDecoder>> {\n\t\tthis.decoder = typeof decoder === 'function' ? { mapFromDriverValue: decoder } : decoder;\n\t\treturn this as SQL<GetDecoderResult<TDecoder>>;\n\t}\n\n\tinlineParams(): this {\n\t\tthis.shouldInlineParams = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * This method is used to conditionally include a part of the query.\n\t *\n\t * @param condition - Condition to check\n\t * @returns itself if the condition is `true`, otherwise `undefined`\n\t */\n\tif(condition: any | undefined): this | undefined {\n\t\treturn condition ? this : undefined;\n\t}\n}\n\nexport type GetDecoderResult<T> = T extends Column ? T['_']['data'] : T extends\n\t| DriverValueDecoder<infer TData, any>\n\t| DriverValueDecoder<infer TData, any>['mapFromDriverValue'] ? TData\n: never;\n\n/**\n * Any DB name (table, column, index etc.)\n */\nexport class Name implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Name';\n\n\tprotected brand!: 'Name';\n\n\tconstructor(readonly value: string) {}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/**\n * Any DB name (table, column, index etc.)\n * @deprecated Use `sql.identifier` instead.\n */\nexport function name(value: string): Name {\n\treturn new Name(value);\n}\n\nexport interface DriverValueDecoder<TData, TDriverParam> {\n\tmapFromDriverValue(value: TDriverParam): TData;\n}\n\nexport interface DriverValueEncoder<TData, TDriverParam> {\n\tmapToDriverValue(value: TData): TDriverParam | SQL;\n}\n\nexport function isDriverValueEncoder(value: unknown): value is DriverValueEncoder<any, any> {\n\treturn typeof value === 'object' && value !== null && 'mapToDriverValue' in value\n\t\t&& typeof (value as any).mapToDriverValue === 'function';\n}\n\nexport const noopDecoder: DriverValueDecoder<any, any> = {\n\tmapFromDriverValue: (value) => value,\n};\n\nexport const noopEncoder: DriverValueEncoder<any, any> = {\n\tmapToDriverValue: (value) => value,\n};\n\nexport interface DriverValueMapper<TData, TDriverParam>\n\textends DriverValueDecoder<TData, TDriverParam>, DriverValueEncoder<TData, TDriverParam>\n{}\n\nexport const noopMapper: DriverValueMapper<any, any> = {\n\t...noopDecoder,\n\t...noopEncoder,\n};\n\n/** Parameter value that is optionally bound to an encoder (for example, a column). */\nexport class Param<TDataType = unknown, TDriverParamType = TDataType> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Param';\n\n\tprotected brand!: 'BoundParamValue';\n\n\t/**\n\t * @param value - Parameter value\n\t * @param encoder - Encoder to convert the value to a driver parameter\n\t */\n\tconstructor(\n\t\treadonly value: TDataType,\n\t\treadonly encoder: DriverValueEncoder<TDataType, TDriverParamType> = noopEncoder,\n\t) {}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/** @deprecated Use `sql.param` instead. */\nexport function param<TData, TDriver>(\n\tvalue: TData,\n\tencoder?: DriverValueEncoder<TData, TDriver>,\n): Param<TData, TDriver> {\n\treturn new Param(value, encoder);\n}\n\n/**\n * Anything that can be passed to the `` sql`...` `` tagged function.\n */\nexport type SQLChunk =\n\t| StringChunk\n\t| SQLChunk[]\n\t| SQLWrapper\n\t| SQL\n\t| Table\n\t| View\n\t| Subquery\n\t| AnyColumn\n\t| Param\n\t| Name\n\t| undefined\n\t| FakePrimitiveParam\n\t| Placeholder;\n\nexport function sql<T>(strings: TemplateStringsArray, ...params: any[]): SQL<T>;\n/*\n\tThe type of `params` is specified as `SQLChunk[]`, but that's slightly incorrect -\n\tin runtime, users won't pass `FakePrimitiveParam` instances as `params` - they will pass primitive values\n\twhich will be wrapped in `Param`. That's why the overload specifies `params` as `any[]` and not as `SQLSourceParam[]`.\n\tThis type is used to make our lives easier and the type checker happy.\n*/\nexport function sql(strings: TemplateStringsArray, ...params: SQLChunk[]): SQL {\n\tconst queryChunks: SQLChunk[] = [];\n\tif (params.length > 0 || (strings.length > 0 && strings[0] !== '')) {\n\t\tqueryChunks.push(new StringChunk(strings[0]!));\n\t}\n\tfor (const [paramIndex, param] of params.entries()) {\n\t\tqueryChunks.push(param, new StringChunk(strings[paramIndex + 1]!));\n\t}\n\n\treturn new SQL(queryChunks);\n}\n\nexport namespace sql {\n\texport function empty(): SQL {\n\t\treturn new SQL([]);\n\t}\n\n\t/** @deprecated - use `sql.join()` */\n\texport function fromList(list: SQLChunk[]): SQL {\n\t\treturn new SQL(list);\n\t}\n\n\t/**\n\t * Convenience function to create an SQL query from a raw string.\n\t * @param str The raw SQL query string.\n\t */\n\texport function raw(str: string): SQL {\n\t\treturn new SQL([new StringChunk(str)]);\n\t}\n\n\t/**\n\t * Join a list of SQL chunks with a separator.\n\t * @example\n\t * ```ts\n\t * const query = sql.join([sql`a`, sql`b`, sql`c`]);\n\t * // sql`abc`\n\t * ```\n\t * @example\n\t * ```ts\n\t * const query = sql.join([sql`a`, sql`b`, sql`c`], sql`, `);\n\t * // sql`a, b, c`\n\t * ```\n\t */\n\texport function join(chunks: SQLChunk[], separator?: SQLChunk): SQL {\n\t\tconst result: SQLChunk[] = [];\n\t\tfor (const [i, chunk] of chunks.entries()) {\n\t\t\tif (i > 0 && separator !== undefined) {\n\t\t\t\tresult.push(separator);\n\t\t\t}\n\t\t\tresult.push(chunk);\n\t\t}\n\t\treturn new SQL(result);\n\t}\n\n\t/**\n\t * Create a SQL chunk that represents a DB identifier (table, column, index etc.).\n\t * When used in a query, the identifier will be escaped based on the DB engine.\n\t * For example, in PostgreSQL, identifiers are escaped with double quotes.\n\t *\n\t * **WARNING: This function does not offer any protection against SQL injections, so you must validate any user input beforehand.**\n\t *\n\t * @example ```ts\n\t * const query = sql`SELECT * FROM ${sql.identifier('my-table')}`;\n\t * // 'SELECT * FROM \"my-table\"'\n\t * ```\n\t */\n\texport function identifier(value: string): Name {\n\t\treturn new Name(value);\n\t}\n\n\texport function placeholder<TName extends string>(name: TName): Placeholder<TName> {\n\t\treturn new Placeholder(name);\n\t}\n\n\texport function param<TData, TDriver>(\n\t\tvalue: TData,\n\t\tencoder?: DriverValueEncoder<TData, TDriver>,\n\t): Param<TData, TDriver> {\n\t\treturn new Param(value, encoder);\n\t}\n}\n\nexport namespace SQL {\n\texport class Aliased<T = unknown> implements SQLWrapper {\n\t\tstatic readonly [entityKind]: string = 'SQL.Aliased';\n\n\t\tdeclare _: {\n\t\t\tbrand: 'SQL.Aliased';\n\t\t\ttype: T;\n\t\t};\n\n\t\t/** @internal */\n\t\tisSelectionField = false;\n\n\t\tconstructor(\n\t\t\treadonly sql: SQL,\n\t\t\treadonly fieldAlias: string,\n\t\t) {}\n\n\t\tgetSQL(): SQL {\n\t\t\treturn this.sql;\n\t\t}\n\n\t\t/** @internal */\n\t\tclone() {\n\t\t\treturn new Aliased(this.sql, this.fieldAlias);\n\t\t}\n\t}\n}\n\nexport class Placeholder<TName extends string = string, TValue = any> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Placeholder';\n\n\tdeclare protected: TValue;\n\n\tconstructor(readonly name: TName) {}\n\n\tgetSQL(): SQL {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/** @deprecated Use `sql.placeholder` instead. */\nexport function placeholder<TName extends string>(name: TName): Placeholder<TName> {\n\treturn new Placeholder(name);\n}\n\nexport function fillPlaceholders(params: unknown[], values: Record<string, unknown>): unknown[] {\n\treturn params.map((p) => {\n\t\tif (is(p, Placeholder)) {\n\t\t\tif (!(p.name in values)) {\n\t\t\t\tthrow new Error(`No value for placeholder \"${p.name}\" was provided`);\n\t\t\t}\n\n\t\t\treturn values[p.name];\n\t\t}\n\n\t\tif (is(p, Param) && is(p.value, Placeholder)) {\n\t\t\tif (!(p.value.name in values)) {\n\t\t\t\tthrow new Error(`No value for placeholder \"${p.value.name}\" was provided`);\n\t\t\t}\n\n\t\t\treturn p.encoder.mapToDriverValue(values[p.value.name]);\n\t\t}\n\n\t\treturn p;\n\t});\n}\n\nexport type ColumnsSelection = Record<string, unknown>;\n\nconst IsDrizzleView = Symbol.for('drizzle:IsDrizzleView');\n\nexport abstract class View<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelection extends ColumnsSelection = ColumnsSelection,\n> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'View';\n\n\tdeclare _: {\n\t\tbrand: 'View';\n\t\tviewBrand: string;\n\t\tname: TName;\n\t\texisting: TExisting;\n\t\tselectedFields: TSelection;\n\t};\n\n\t/** @internal */\n\t[ViewBaseConfig]: {\n\t\tname: TName;\n\t\toriginalName: TName;\n\t\tschema: string | undefined;\n\t\tselectedFields: ColumnsSelection;\n\t\tisExisting: TExisting;\n\t\tquery: TExisting extends true ? undefined : SQL;\n\t\tisAlias: boolean;\n\t};\n\n\t/** @internal */\n\t[IsDrizzleView] = true;\n\n\tdeclare readonly $inferSelect: InferSelectViewModel<View<Assume<TName, string>, TExisting, TSelection>>;\n\n\tconstructor(\n\t\t{ name, schema, selectedFields, query }: {\n\t\t\tname: TName;\n\t\t\tschema: string | undefined;\n\t\t\tselectedFields: ColumnsSelection;\n\t\t\tquery: SQL | undefined;\n\t\t},\n\t) {\n\t\tthis[ViewBaseConfig] = {\n\t\t\tname,\n\t\t\toriginalName: name,\n\t\t\tschema,\n\t\t\tselectedFields,\n\t\t\tquery: query as (TExisting extends true ? undefined : SQL),\n\t\t\tisExisting: !query as TExisting,\n\t\t\tisAlias: false,\n\t\t};\n\t}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\nexport function isView(view: unknown): view is View {\n\treturn typeof view === 'object' && view !== null && IsDrizzleView in view;\n}\n\nexport function getViewName<T extends View>(view: T): T['_']['name'] {\n\treturn view[ViewBaseConfig].name;\n}\n\nexport type InferSelectViewModel<TView extends View> =\n\tEqual<TView['_']['selectedFields'], { [x: string]: unknown }> extends true ? { [x: string]: unknown }\n\t\t: SelectResult<\n\t\t\tTView['_']['selectedFields'],\n\t\t\t'single',\n\t\t\tRecord<TView['_']['name'], 'not-null'>\n\t\t>;\n\n// Defined separately from the Column class to resolve circular dependency\nColumn.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n\n// Defined separately from the Table class to resolve circular dependency\nTable.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n\n// Defined separately from the Column class to resolve circular dependency\nSubquery.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n", "import type { AnyColumn } from './column.ts';\nimport { Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport type { Relation } from './relations.ts';\nimport type { View } from './sql/sql.ts';\nimport { SQL, sql } from './sql/sql.ts';\nimport { Table } from './table.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\nexport class ColumnAliasProxyHandler<TColumn extends Column> implements ProxyHandler<TColumn> {\n\tstatic readonly [entityKind]: string = 'ColumnAliasProxyHandler';\n\n\tconstructor(private table: Table | View) {}\n\n\tget(columnObj: TColumn, prop: string | symbol): any {\n\t\tif (prop === 'table') {\n\t\t\treturn this.table;\n\t\t}\n\n\t\treturn columnObj[prop as keyof TColumn];\n\t}\n}\n\nexport class TableAliasProxyHandler<T extends Table | View> implements ProxyHandler<T> {\n\tstatic readonly [entityKind]: string = 'TableAliasProxyHandler';\n\n\tconstructor(private alias: string, private replaceOriginalName: boolean) {}\n\n\tget(target: T, prop: string | symbol): any {\n\t\tif (prop === Table.Symbol.IsAlias) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (prop === Table.Symbol.Name) {\n\t\t\treturn this.alias;\n\t\t}\n\n\t\tif (this.replaceOriginalName && prop === Table.Symbol.OriginalName) {\n\t\t\treturn this.alias;\n\t\t}\n\n\t\tif (prop === ViewBaseConfig) {\n\t\t\treturn {\n\t\t\t\t...target[ViewBaseConfig as keyof typeof target],\n\t\t\t\tname: this.alias,\n\t\t\t\tisAlias: true,\n\t\t\t};\n\t\t}\n\n\t\tif (prop === Table.Symbol.Columns) {\n\t\t\tconst columns = (target as Table)[Table.Symbol.Columns];\n\t\t\tif (!columns) {\n\t\t\t\treturn columns;\n\t\t\t}\n\n\t\t\tconst proxiedColumns: { [key: string]: any } = {};\n\n\t\t\tObject.keys(columns).map((key) => {\n\t\t\t\tproxiedColumns[key] = new Proxy(\n\t\t\t\t\tcolumns[key]!,\n\t\t\t\t\tnew ColumnAliasProxyHandler(new Proxy(target, this)),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn proxiedColumns;\n\t\t}\n\n\t\tconst value = target[prop as keyof typeof target];\n\t\tif (is(value, Column)) {\n\t\t\treturn new Proxy(value as AnyColumn, new ColumnAliasProxyHandler(new Proxy(target, this)));\n\t\t}\n\n\t\treturn value;\n\t}\n}\n\nexport class RelationTableAliasProxyHandler<T extends Relation> implements ProxyHandler<T> {\n\tstatic readonly [entityKind]: string = 'RelationTableAliasProxyHandler';\n\n\tconstructor(private alias: string) {}\n\n\tget(target: T, prop: string | symbol): any {\n\t\tif (prop === 'sourceTable') {\n\t\t\treturn aliasedTable(target.sourceTable, this.alias);\n\t\t}\n\n\t\treturn target[prop as keyof typeof target];\n\t}\n}\n\nexport function aliasedTable<T extends Table | View>(\n\ttable: T,\n\ttableAlias: string,\n): T {\n\treturn new Proxy(table, new TableAliasProxyHandler(tableAlias, false)) as any;\n}\n\nexport function aliasedRelation<T extends Relation>(relation: T, tableAlias: string): T {\n\treturn new Proxy(relation, new RelationTableAliasProxyHandler(tableAlias));\n}\n\nexport function aliasedTableColumn<T extends AnyColumn>(column: T, tableAlias: string): T {\n\treturn new Proxy(\n\t\tcolumn,\n\t\tnew ColumnAliasProxyHandler(new Proxy(column.table, new TableAliasProxyHandler(tableAlias, false))),\n\t);\n}\n\nexport function mapColumnsInAliasedSQLToAlias(query: SQL.Aliased, alias: string): SQL.Aliased {\n\treturn new SQL.Aliased(mapColumnsInSQLToAlias(query.sql, alias), query.fieldAlias);\n}\n\nexport function mapColumnsInSQLToAlias(query: SQL, alias: string): SQL {\n\treturn sql.join(query.queryChunks.map((c) => {\n\t\tif (is(c, Column)) {\n\t\t\treturn aliasedTableColumn(c, alias);\n\t\t}\n\t\tif (is(c, SQL)) {\n\t\t\treturn mapColumnsInSQLToAlias(c, alias);\n\t\t}\n\t\tif (is(c, SQL.Aliased)) {\n\t\t\treturn mapColumnsInAliasedSQLToAlias(c, alias);\n\t\t}\n\t\treturn c;\n\t}));\n}\n", "import { ColumnAliasProxyHandler, TableAliasProxyHandler } from './alias.ts';\nimport { Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { SQL, View } from './sql/sql.ts';\nimport { Subquery } from './subquery.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\nexport class SelectionProxyHandler<T extends Subquery | Record<string, unknown> | View>\n\timplements ProxyHandler<Subquery | Record<string, unknown> | View>\n{\n\tstatic readonly [entityKind]: string = 'SelectionProxyHandler';\n\n\tprivate config: {\n\t\t/**\n\t\t * Table alias for the columns\n\t\t */\n\t\talias?: string;\n\t\t/**\n\t\t * What to do when a field is an instance of `SQL.Aliased` and it's not a selection field (from a subquery)\n\t\t *\n\t\t * `sql` - return the underlying SQL expression\n\t\t *\n\t\t * `alias` - return the field alias\n\t\t */\n\t\tsqlAliasedBehavior: 'sql' | 'alias';\n\t\t/**\n\t\t * What to do when a field is an instance of `SQL` and it doesn't have an alias declared\n\t\t *\n\t\t * `sql` - return the underlying SQL expression\n\t\t *\n\t\t * `error` - return a DrizzleTypeError on type level and throw an error on runtime\n\t\t */\n\t\tsqlBehavior: 'sql' | 'error';\n\n\t\t/**\n\t\t * Whether to replace the original name of the column with the alias\n\t\t * Should be set to `true` for views creation\n\t\t * @default false\n\t\t */\n\t\treplaceOriginalName?: boolean;\n\t};\n\n\tconstructor(config: SelectionProxyHandler<T>['config']) {\n\t\tthis.config = { ...config };\n\t}\n\n\tget(subquery: T, prop: string | symbol): any {\n\t\tif (prop === '_') {\n\t\t\treturn {\n\t\t\t\t...subquery['_' as keyof typeof subquery],\n\t\t\t\tselectedFields: new Proxy(\n\t\t\t\t\t(subquery as Subquery)._.selectedFields,\n\t\t\t\t\tthis as ProxyHandler<Record<string, unknown>>,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\tif (prop === ViewBaseConfig) {\n\t\t\treturn {\n\t\t\t\t...subquery[ViewBaseConfig as keyof typeof subquery],\n\t\t\t\tselectedFields: new Proxy(\n\t\t\t\t\t(subquery as View)[ViewBaseConfig].selectedFields,\n\t\t\t\t\tthis as ProxyHandler<Record<string, unknown>>,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\tif (typeof prop === 'symbol') {\n\t\t\treturn subquery[prop as keyof typeof subquery];\n\t\t}\n\n\t\tconst columns = is(subquery, Subquery)\n\t\t\t? subquery._.selectedFields\n\t\t\t: is(subquery, View)\n\t\t\t? subquery[ViewBaseConfig].selectedFields\n\t\t\t: subquery;\n\t\tconst value: unknown = columns[prop as keyof typeof columns];\n\n\t\tif (is(value, SQL.Aliased)) {\n\t\t\t// Never return the underlying SQL expression for a field previously selected in a subquery\n\t\t\tif (this.config.sqlAliasedBehavior === 'sql' && !value.isSelectionField) {\n\t\t\t\treturn value.sql;\n\t\t\t}\n\n\t\t\tconst newValue = value.clone();\n\t\t\tnewValue.isSelectionField = true;\n\t\t\treturn newValue;\n\t\t}\n\n\t\tif (is(value, SQL)) {\n\t\t\tif (this.config.sqlBehavior === 'sql') {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tthrow new Error(\n\t\t\t\t`You tried to reference \"${prop}\" field from a subquery, which is a raw SQL field, but it doesn't have an alias declared. Please add an alias to the field using \".as('alias')\" method.`,\n\t\t\t);\n\t\t}\n\n\t\tif (is(value, Column)) {\n\t\t\tif (this.config.alias) {\n\t\t\t\treturn new Proxy(\n\t\t\t\t\tvalue,\n\t\t\t\t\tnew ColumnAliasProxyHandler(\n\t\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\t\tvalue.table,\n\t\t\t\t\t\t\tnew TableAliasProxyHandler(this.config.alias, this.config.replaceOriginalName ?? false),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\n\t\tif (typeof value !== 'object' || value === null) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn new Proxy(value, new SelectionProxyHandler(this.config));\n\t}\n}\n", "import type { Cache } from './cache/core/cache.ts';\nimport type { AnyColumn } from './column.ts';\nimport { Column } from './column.ts';\nimport { is } from './entity.ts';\nimport type { Logger } from './logger.ts';\nimport type { SelectedFieldsOrdered } from './operations.ts';\nimport type { TableLike } from './query-builders/select.types.ts';\nimport { Param, SQL, View } from './sql/sql.ts';\nimport type { DriverValueDecoder } from './sql/sql.ts';\nimport { Subquery } from './subquery.ts';\nimport { getTableName, Table } from './table.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\n/** @internal */\nexport function mapResultRow<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\trow: unknown[],\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): TResult {\n\t// Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n\tconst nullifyMap: Record<string, string | false> = {};\n\n\tconst result = columns.reduce<Record<string, any>>(\n\t\t(result, { path, field }, columnIndex) => {\n\t\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else if (is(field, Subquery)) {\n\t\t\t\tdecoder = field._.sql.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tlet node = result;\n\t\t\tfor (const [pathChunkIndex, pathChunk] of path.entries()) {\n\t\t\t\tif (pathChunkIndex < path.length - 1) {\n\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t}\n\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t} else {\n\t\t\t\t\tconst rawValue = row[columnIndex]!;\n\t\t\t\t\tconst value = node[pathChunk] = rawValue === null ? null : decoder.mapFromDriverValue(rawValue);\n\n\t\t\t\t\tif (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n\t\t\t\t\t\tconst objectName = path[0]!;\n\t\t\t\t\t\tif (!(objectName in nullifyMap)) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\ttypeof nullifyMap[objectName] === 'string' && nullifyMap[objectName] !== getTableName(field.table)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t{},\n\t);\n\n\t// Nullify all nested objects from nullifyMap that are nullable\n\tif (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n\t\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {\n\t\t\tif (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n\t\t\t\tresult[objectName] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result as TResult;\n}\n\n/** @internal */\nexport function orderSelectedFields<TColumn extends AnyColumn>(\n\tfields: Record<string, unknown>,\n\tpathPrefix?: string[],\n): SelectedFieldsOrdered<TColumn> {\n\treturn Object.entries(fields).reduce<SelectedFieldsOrdered<AnyColumn>>((result, [name, field]) => {\n\t\tif (typeof name !== 'string') {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst newPath = pathPrefix ? [...pathPrefix, name] : [name];\n\t\tif (is(field, Column) || is(field, SQL) || is(field, SQL.Aliased) || is(field, Subquery)) {\n\t\t\tresult.push({ path: newPath, field });\n\t\t} else if (is(field, Table)) {\n\t\t\tresult.push(...orderSelectedFields(field[Table.Symbol.Columns], newPath));\n\t\t} else {\n\t\t\tresult.push(...orderSelectedFields(field as Record<string, unknown>, newPath));\n\t\t}\n\t\treturn result;\n\t}, []) as SelectedFieldsOrdered<TColumn>;\n}\n\nexport function haveSameKeys(left: Record<string, unknown>, right: Record<string, unknown>) {\n\tconst leftKeys = Object.keys(left);\n\tconst rightKeys = Object.keys(right);\n\n\tif (leftKeys.length !== rightKeys.length) {\n\t\treturn false;\n\t}\n\n\tfor (const [index, key] of leftKeys.entries()) {\n\t\tif (key !== rightKeys[index]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/** @internal */\nexport function mapUpdateSet(table: Table, values: Record<string, unknown>): UpdateSet {\n\tconst entries: [string, UpdateSet[string]][] = Object.entries(values)\n\t\t.filter(([, value]) => value !== undefined)\n\t\t.map(([key, value]) => {\n\t\t\t// eslint-disable-next-line unicorn/prefer-ternary\n\t\t\tif (is(value, SQL) || is(value, Column)) {\n\t\t\t\treturn [key, value];\n\t\t\t} else {\n\t\t\t\treturn [key, new Param(value, table[Table.Symbol.Columns][key])];\n\t\t\t}\n\t\t});\n\n\tif (entries.length === 0) {\n\t\tthrow new Error('No values to set');\n\t}\n\n\treturn Object.fromEntries(entries);\n}\n\nexport type UpdateSet = Record<string, SQL | Param | AnyColumn | null | undefined>;\n\nexport type OneOrMany<T> = T | T[];\n\nexport type Update<T, TUpdate> =\n\t& {\n\t\t[K in Exclude<keyof T, keyof TUpdate>]: T[K];\n\t}\n\t& TUpdate;\n\nexport type Simplify<T> =\n\t& {\n\t\t// @ts-ignore - \"Type parameter 'K' has a circular constraint\", not sure why\n\t\t[K in keyof T]: T[K];\n\t}\n\t& {};\n\nexport type Not<T extends boolean> = T extends true ? false : true;\n\nexport type IsNever<T> = [T] extends [never] ? true : false;\n\nexport type IsUnion<T, U extends T = T> = (T extends any ? (U extends T ? false : true) : never) extends false ? false\n\t: true;\n\nexport type SingleKeyObject<T, TError extends string, K = keyof T> = IsNever<K> extends true ? never\n\t: IsUnion<K> extends true ? DrizzleTypeError<TError>\n\t: T;\n\nexport type FromSingleKeyObject<T, Result, TError extends string, K = keyof T> = IsNever<K> extends true ? never\n\t: IsUnion<K> extends true ? DrizzleTypeError<TError>\n\t: Result;\n\nexport type SimplifyMappedType<T> = [T] extends [unknown] ? T : never;\n\nexport type ShallowRecord<K extends keyof any, T> = SimplifyMappedType<{ [P in K]: T }>;\n\nexport type Assume<T, U> = T extends U ? T : U;\n\nexport type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;\n\nexport interface DrizzleTypeError<T extends string> {\n\t$drizzleTypeError: T;\n}\n\nexport type ValueOrArray<T> = T | T[];\n\n/** @internal */\nexport function applyMixins(baseClass: any, extendedClasses: any[]) {\n\tfor (const extendedClass of extendedClasses) {\n\t\tfor (const name of Object.getOwnPropertyNames(extendedClass.prototype)) {\n\t\t\tif (name === 'constructor') continue;\n\n\t\t\tObject.defineProperty(\n\t\t\t\tbaseClass.prototype,\n\t\t\t\tname,\n\t\t\t\tObject.getOwnPropertyDescriptor(extendedClass.prototype, name) || Object.create(null),\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport type Or<T1, T2> = T1 extends true ? true : T2 extends true ? true : false;\n\nexport type IfThenElse<If, Then, Else> = If extends true ? Then : Else;\n\nexport type PromiseOf<T> = T extends Promise<infer U> ? U : T;\n\nexport type Writable<T> = {\n\t-readonly [P in keyof T]: T[P];\n};\n\nexport type NonArray<T> = T extends any[] ? never : T;\n\nexport function getTableColumns<T extends Table>(table: T): T['_']['columns'] {\n\treturn table[Table.Symbol.Columns];\n}\n\nexport function getViewSelectedFields<T extends View>(view: T): T['_']['selectedFields'] {\n\treturn view[ViewBaseConfig].selectedFields;\n}\n\n/** @internal */\nexport function getTableLikeName(table: TableLike): string | undefined {\n\treturn is(table, Subquery)\n\t\t? table._.alias\n\t\t: is(table, View)\n\t\t? table[ViewBaseConfig].name\n\t\t: is(table, SQL)\n\t\t? undefined\n\t\t: table[Table.Symbol.IsAlias]\n\t\t? table[Table.Symbol.Name]\n\t\t: table[Table.Symbol.BaseName];\n}\n\nexport type ColumnsWithTable<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> = { [Key in keyof TColumns]: AnyColumn<{ tableName: TForeignTableName }> };\n\nexport type Casing = 'snake_case' | 'camelCase';\n\nexport interface DrizzleConfig<TSchema extends Record<string, unknown> = Record<string, never>> {\n\tlogger?: boolean | Logger;\n\tschema?: TSchema;\n\tcasing?: Casing;\n\tcache?: Cache;\n}\nexport type ValidateShape<T, ValidShape, TResult = T> = T extends ValidShape\n\t? Exclude<keyof T, keyof ValidShape> extends never ? TResult\n\t: DrizzleTypeError<\n\t\t`Invalid key(s): ${Exclude<(keyof T) & (string | number | bigint | boolean | null | undefined), keyof ValidShape>}`\n\t>\n\t: never;\n\nexport type KnownKeysOnly<T, U> = {\n\t[K in keyof T]: K extends keyof U ? T[K] : never;\n};\n\nexport type IsAny<T> = 0 extends (1 & T) ? true : false;\n\n/** @internal */\nexport function getColumnNameAndConfig<\n\tTConfig extends Record<string, any> | undefined,\n>(a: string | TConfig | undefined, b: TConfig | undefined) {\n\treturn {\n\t\tname: typeof a === 'string' && a.length > 0 ? a : '' as string,\n\t\tconfig: typeof a === 'object' ? a : b as TConfig,\n\t};\n}\n\nexport type IfNotImported<T, Y, N> = unknown extends T ? Y : N;\n\nexport type ImportTypeError<TPackageName extends string> =\n\t`Please install \\`${TPackageName}\\` to allow Drizzle ORM to connect to the database`;\n\nexport type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Keys extends any\n\t? Required<Pick<T, Keys>> & Partial<Omit<T, Keys>>\n\t: never;\n\ntype ExpectedConfigShape = {\n\tlogger?: boolean | {\n\t\tlogQuery(query: string, params: unknown[]): void;\n\t};\n\tschema?: Record<string, never>;\n\tcasing?: 'snake_case' | 'camelCase';\n};\n\n// If this errors, you must update config shape checker function with new config specs\nconst _: DrizzleConfig = {} as ExpectedConfigShape;\nconst __: ExpectedConfigShape = {} as DrizzleConfig;\n\nexport function isConfig(data: any): boolean {\n\tif (typeof data !== 'object' || data === null) return false;\n\n\tif (data.constructor.name !== 'Object') return false;\n\n\tif ('logger' in data) {\n\t\tconst type = typeof data['logger'];\n\t\tif (\n\t\t\ttype !== 'boolean' && (type !== 'object' || typeof data['logger']['logQuery'] !== 'function')\n\t\t\t&& type !== 'undefined'\n\t\t) return false;\n\n\t\treturn true;\n\t}\n\n\tif ('schema' in data) {\n\t\tconst type = typeof data['schema'];\n\t\tif (type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('casing' in data) {\n\t\tconst type = typeof data['casing'];\n\t\tif (type !== 'string' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('mode' in data) {\n\t\tif (data['mode'] !== 'default' || data['mode'] !== 'planetscale' || data['mode'] !== undefined) return false;\n\n\t\treturn true;\n\t}\n\n\tif ('connection' in data) {\n\t\tconst type = typeof data['connection'];\n\t\tif (type !== 'string' && type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('client' in data) {\n\t\tconst type = typeof data['client'];\n\t\tif (type !== 'object' && type !== 'function' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif (Object.keys(data).length === 0) return true;\n\n\treturn false;\n}\n\nexport type NeonAuthToken = string | (() => string | Promise<string>);\n\nexport const textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder();\n", "import type { ColumnBuilderBaseConfig, ColumnDataType, GeneratedIdentityConfig, IsIdentity } from '~/column-builder.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { PgSequenceOptions } from '../sequence.ts';\nimport { PgColumnBuilder } from './common.ts';\n\nexport abstract class PgIntColumnBaseBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n> extends PgColumnBuilder<\n\tT,\n\t{ generatedIdentity: GeneratedIdentityConfig }\n> {\n\tstatic override readonly [entityKind]: string = 'PgIntColumnBaseBuilder';\n\n\tgeneratedAlwaysAsIdentity(\n\t\tsequence?: PgSequenceOptions & { name?: string },\n\t): IsIdentity<this, 'always'> {\n\t\tif (sequence) {\n\t\t\tconst { name, ...options } = sequence;\n\t\t\tthis.config.generatedIdentity = {\n\t\t\t\ttype: 'always',\n\t\t\t\tsequenceName: name,\n\t\t\t\tsequenceOptions: options,\n\t\t\t};\n\t\t} else {\n\t\t\tthis.config.generatedIdentity = {\n\t\t\t\ttype: 'always',\n\t\t\t};\n\t\t}\n\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\n\t\treturn this as IsIdentity<this, 'always'>;\n\t}\n\n\tgeneratedByDefaultAsIdentity(\n\t\tsequence?: PgSequenceOptions & { name?: string },\n\t): IsIdentity<this, 'byDefault'> {\n\t\tif (sequence) {\n\t\t\tconst { name, ...options } = sequence;\n\t\t\tthis.config.generatedIdentity = {\n\t\t\t\ttype: 'byDefault',\n\t\t\t\tsequenceName: name,\n\t\t\t\tsequenceOptions: options,\n\t\t\t};\n\t\t} else {\n\t\t\tthis.config.generatedIdentity = {\n\t\t\t\ttype: 'byDefault',\n\t\t\t};\n\t\t}\n\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\n\t\treturn this as IsIdentity<this, 'byDefault'>;\n\t}\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\n\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn } from './common.ts';\nimport { PgIntColumnBaseBuilder } from './int.common.ts';\n\nexport type PgBigInt53BuilderInitial<TName extends string> = PgBigInt53Builder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'PgBigInt53';\n\tdata: number;\n\tdriverParam: number | string;\n\tenumValues: undefined;\n}>;\n\nexport class PgBigInt53Builder<T extends ColumnBuilderBaseConfig<'number', 'PgBigInt53'>>\n\textends PgIntColumnBaseBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'PgBigInt53Builder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'PgBigInt53');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgBigInt53<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgBigInt53<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgBigInt53<T extends ColumnBaseConfig<'number', 'PgBigInt53'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgBigInt53';\n\n\tgetSQLType(): string {\n\t\treturn 'bigint';\n\t}\n\n\toverride mapFromDriverValue(value: number | string): number {\n\t\tif (typeof value === 'number') {\n\t\t\treturn value;\n\t\t}\n\t\treturn Number(value);\n\t}\n}\n\nexport type PgBigInt64BuilderInitial<TName extends string> = PgBigInt64Builder<{\n\tname: TName;\n\tdataType: 'bigint';\n\tcolumnType: 'PgBigInt64';\n\tdata: bigint;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgBigInt64Builder<T extends ColumnBuilderBaseConfig<'bigint', 'PgBigInt64'>>\n\textends PgIntColumnBaseBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'PgBigInt64Builder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'bigint', 'PgBigInt64');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgBigInt64<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgBigInt64<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgBigInt64<T extends ColumnBaseConfig<'bigint', 'PgBigInt64'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgBigInt64';\n\n\tgetSQLType(): string {\n\t\treturn 'bigint';\n\t}\n\n\t// eslint-disable-next-line unicorn/prefer-native-coercion-functions\n\toverride mapFromDriverValue(value: string): bigint {\n\t\treturn BigInt(value);\n\t}\n}\n\nexport interface PgBigIntConfig<T extends 'number' | 'bigint' = 'number' | 'bigint'> {\n\tmode: T;\n}\n\nexport function bigint<TMode extends PgBigIntConfig['mode']>(\n\tconfig: PgBigIntConfig<TMode>,\n): TMode extends 'number' ? PgBigInt53BuilderInitial<''> : PgBigInt64BuilderInitial<''>;\nexport function bigint<TName extends string, TMode extends PgBigIntConfig['mode']>(\n\tname: TName,\n\tconfig: PgBigIntConfig<TMode>,\n): TMode extends 'number' ? PgBigInt53BuilderInitial<TName> : PgBigInt64BuilderInitial<TName>;\nexport function bigint(a: string | PgBigIntConfig, b?: PgBigIntConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgBigIntConfig>(a, b);\n\tif (config.mode === 'number') {\n\t\treturn new PgBigInt53Builder(name);\n\t}\n\treturn new PgBigInt64Builder(name);\n}\n", "import type {\n\tColumnBuilderBaseConfig,\n\tColumnBuilderRuntimeConfig,\n\tHasDefault,\n\tMakeColumnConfig,\n\tNotNull,\n} from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport type { AnyPgTable } from '../table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgBigSerial53BuilderInitial<TName extends string> = NotNull<\n\tHasDefault<\n\t\tPgBigSerial53Builder<{\n\t\t\tname: TName;\n\t\t\tdataType: 'number';\n\t\t\tcolumnType: 'PgBigSerial53';\n\t\t\tdata: number;\n\t\t\tdriverParam: number;\n\t\t\tenumValues: undefined;\n\t\t}>\n\t>\n>;\n\nexport class PgBigSerial53Builder<T extends ColumnBuilderBaseConfig<'number', 'PgBigSerial53'>>\n\textends PgColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'PgBigSerial53Builder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'number', 'PgBigSerial53');\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgBigSerial53<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgBigSerial53<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgBigSerial53<T extends ColumnBaseConfig<'number', 'PgBigSerial53'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgBigSerial53';\n\n\tgetSQLType(): string {\n\t\treturn 'bigserial';\n\t}\n\n\toverride mapFromDriverValue(value: number): number {\n\t\tif (typeof value === 'number') {\n\t\t\treturn value;\n\t\t}\n\t\treturn Number(value);\n\t}\n}\n\nexport type PgBigSerial64BuilderInitial<TName extends string> = NotNull<\n\tHasDefault<\n\t\tPgBigSerial64Builder<{\n\t\t\tname: TName;\n\t\t\tdataType: 'bigint';\n\t\t\tcolumnType: 'PgBigSerial64';\n\t\t\tdata: bigint;\n\t\t\tdriverParam: string;\n\t\t\tenumValues: undefined;\n\t\t}>\n\t>\n>;\n\nexport class PgBigSerial64Builder<T extends ColumnBuilderBaseConfig<'bigint', 'PgBigSerial64'>>\n\textends PgColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'PgBigSerial64Builder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'bigint', 'PgBigSerial64');\n\t\tthis.config.hasDefault = true;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgBigSerial64<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgBigSerial64<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgBigSerial64<T extends ColumnBaseConfig<'bigint', 'PgBigSerial64'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgBigSerial64';\n\n\tgetSQLType(): string {\n\t\treturn 'bigserial';\n\t}\n\n\t// eslint-disable-next-line unicorn/prefer-native-coercion-functions\n\toverride mapFromDriverValue(value: string): bigint {\n\t\treturn BigInt(value);\n\t}\n}\n\nexport interface PgBigSerialConfig<T extends 'number' | 'bigint' = 'number' | 'bigint'> {\n\tmode: T;\n}\n\nexport function bigserial<TMode extends PgBigSerialConfig['mode']>(\n\tconfig: PgBigSerialConfig<TMode>,\n): TMode extends 'number' ? PgBigSerial53BuilderInitial<''> : PgBigSerial64BuilderInitial<''>;\nexport function bigserial<TName extends string, TMode extends PgBigSerialConfig['mode']>(\n\tname: TName,\n\tconfig: PgBigSerialConfig<TMode>,\n): TMode extends 'number' ? PgBigSerial53BuilderInitial<TName> : PgBigSerial64BuilderInitial<TName>;\nexport function bigserial(a: string | PgBigSerialConfig, b?: PgBigSerialConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgBigSerialConfig>(a, b);\n\tif (config.mode === 'number') {\n\t\treturn new PgBigSerial53Builder(name);\n\t}\n\treturn new PgBigSerial64Builder(name);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgBooleanBuilderInitial<TName extends string> = PgBooleanBuilder<{\n\tname: TName;\n\tdataType: 'boolean';\n\tcolumnType: 'PgBoolean';\n\tdata: boolean;\n\tdriverParam: boolean;\n\tenumValues: undefined;\n}>;\n\nexport class PgBooleanBuilder<T extends ColumnBuilderBaseConfig<'boolean', 'PgBoolean'>> extends PgColumnBuilder<T> {\n\tstatic override readonly [entityKind]: string = 'PgBooleanBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'boolean', 'PgBoolean');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgBoolean<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgBoolean<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgBoolean<T extends ColumnBaseConfig<'boolean', 'PgBoolean'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgBoolean';\n\n\tgetSQLType(): string {\n\t\treturn 'boolean';\n\t}\n}\n\nexport function boolean(): PgBooleanBuilderInitial<''>;\nexport function boolean<TName extends string>(name: TName): PgBooleanBuilderInitial<TName>;\nexport function boolean(name?: string) {\n\treturn new PgBooleanBuilder(name ?? '');\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig, type Writable } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgCharBuilderInitial<\n\tTName extends string,\n\tTEnum extends [string, ...string[]],\n\tTLength extends number | undefined,\n> = PgCharBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgChar';\n\tdata: TEnum[number];\n\tenumValues: TEnum;\n\tdriverParam: string;\n\tlength: TLength;\n}>;\n\nexport class PgCharBuilder<T extends ColumnBuilderBaseConfig<'string', 'PgChar'> & { length?: number | undefined }>\n\textends PgColumnBuilder<\n\t\tT,\n\t\t{ length: T['length']; enumValues: T['enumValues'] },\n\t\t{ length: T['length'] }\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'PgCharBuilder';\n\n\tconstructor(name: T['name'], config: PgCharConfig<T['enumValues'], T['length']>) {\n\t\tsuper(name, 'string', 'PgChar');\n\t\tthis.config.length = config.length;\n\t\tthis.config.enumValues = config.enum;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgChar<MakeColumnConfig<T, TTableName> & { length: T['length'] }> {\n\t\treturn new PgChar<MakeColumnConfig<T, TTableName> & { length: T['length'] }>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgChar<T extends ColumnBaseConfig<'string', 'PgChar'> & { length?: number | undefined }>\n\textends PgColumn<T, { length: T['length']; enumValues: T['enumValues'] }, { length: T['length'] }>\n{\n\tstatic override readonly [entityKind]: string = 'PgChar';\n\n\treadonly length = this.config.length;\n\toverride readonly enumValues = this.config.enumValues;\n\n\tgetSQLType(): string {\n\t\treturn this.length === undefined ? `char` : `char(${this.length})`;\n\t}\n}\n\nexport interface PgCharConfig<\n\tTEnum extends readonly string[] | string[] | undefined = readonly string[] | string[] | undefined,\n\tTLength extends number | undefined = number | undefined,\n> {\n\tenum?: TEnum;\n\tlength?: TLength;\n}\n\nexport function char(): PgCharBuilderInitial<'', [string, ...string[]], undefined>;\nexport function char<U extends string, T extends Readonly<[U, ...U[]]>, L extends number | undefined>(\n\tconfig?: PgCharConfig<T | Writable<T>, L>,\n): PgCharBuilderInitial<'', Writable<T>, L>;\nexport function char<\n\tTName extends string,\n\tU extends string,\n\tT extends Readonly<[U, ...U[]]>,\n\tL extends number | undefined,\n>(\n\tname: TName,\n\tconfig?: PgCharConfig<T | Writable<T>, L>,\n): PgCharBuilderInitial<TName, Writable<T>, L>;\nexport function char(a?: string | PgCharConfig, b: PgCharConfig = {}): any {\n\tconst { name, config } = getColumnNameAndConfig<PgCharConfig>(a, b);\n\treturn new PgCharBuilder(name, config as any);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '../table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgCidrBuilderInitial<TName extends string> = PgCidrBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgCidr';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgCidrBuilder<T extends ColumnBuilderBaseConfig<'string', 'PgCidr'>> extends PgColumnBuilder<T> {\n\tstatic override readonly [entityKind]: string = 'PgCidrBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'string', 'PgCidr');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgCidr<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgCidr<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgCidr<T extends ColumnBaseConfig<'string', 'PgCidr'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgCidr';\n\n\tgetSQLType(): string {\n\t\treturn 'cidr';\n\t}\n}\n\nexport function cidr(): PgCidrBuilderInitial<''>;\nexport function cidr<TName extends string>(name: TName): PgCidrBuilderInitial<TName>;\nexport function cidr(name?: string) {\n\treturn new PgCidrBuilder(name ?? '');\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type ConvertCustomConfig<TName extends string, T extends Partial<CustomTypeValues>> =\n\t& {\n\t\tname: TName;\n\t\tdataType: 'custom';\n\t\tcolumnType: 'PgCustomColumn';\n\t\tdata: T['data'];\n\t\tdriverParam: T['driverData'];\n\t\tenumValues: undefined;\n\t}\n\t& (T['notNull'] extends true ? { notNull: true } : {})\n\t& (T['default'] extends true ? { hasDefault: true } : {});\n\nexport interface PgCustomColumnInnerConfig {\n\tcustomTypeValues: CustomTypeValues;\n}\n\nexport class PgCustomColumnBuilder<T extends ColumnBuilderBaseConfig<'custom', 'PgCustomColumn'>>\n\textends PgColumnBuilder<\n\t\tT,\n\t\t{\n\t\t\tfieldConfig: CustomTypeValues['config'];\n\t\t\tcustomTypeParams: CustomTypeParams<any>;\n\t\t},\n\t\t{\n\t\t\tpgColumnBuilderBrand: 'PgCustomColumnBuilderBrand';\n\t\t}\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'PgCustomColumnBuilder';\n\n\tconstructor(\n\t\tname: T['name'],\n\t\tfieldConfig: CustomTypeValues['config'],\n\t\tcustomTypeParams: CustomTypeParams<any>,\n\t) {\n\t\tsuper(name, 'custom', 'PgCustomColumn');\n\t\tthis.config.fieldConfig = fieldConfig;\n\t\tthis.config.customTypeParams = customTypeParams;\n\t}\n\n\t/** @internal */\n\tbuild<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgCustomColumn<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgCustomColumn<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgCustomColumn<T extends ColumnBaseConfig<'custom', 'PgCustomColumn'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgCustomColumn';\n\n\tprivate sqlName: string;\n\tprivate mapTo?: (value: T['data']) => T['driverParam'];\n\tprivate mapFrom?: (value: T['driverParam']) => T['data'];\n\n\tconstructor(\n\t\ttable: AnyPgTable<{ name: T['tableName'] }>,\n\t\tconfig: PgCustomColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.sqlName = config.customTypeParams.dataType(config.fieldConfig);\n\t\tthis.mapTo = config.customTypeParams.toDriver;\n\t\tthis.mapFrom = config.customTypeParams.fromDriver;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.sqlName;\n\t}\n\n\toverride mapFromDriverValue(value: T['driverParam']): T['data'] {\n\t\treturn typeof this.mapFrom === 'function' ? this.mapFrom(value) : value as T['data'];\n\t}\n\n\toverride mapToDriverValue(value: T['data']): T['driverParam'] {\n\t\treturn typeof this.mapTo === 'function' ? this.mapTo(value) : value as T['data'];\n\t}\n}\n\nexport type CustomTypeValues = {\n\t/**\n\t * Required type for custom column, that will infer proper type model\n\t *\n\t * Examples:\n\t *\n\t * If you want your column to be `string` type after selecting/or on inserting - use `data: string`. Like `text`, `varchar`\n\t *\n\t * If you want your column to be `number` type after selecting/or on inserting - use `data: number`. Like `integer`\n\t */\n\tdata: unknown;\n\n\t/**\n\t * Type helper, that represents what type database driver is accepting for specific database data type\n\t */\n\tdriverData?: unknown;\n\n\t/**\n\t * What config type should be used for {@link CustomTypeParams} `dataType` generation\n\t */\n\tconfig?: Record<string, any>;\n\n\t/**\n\t * Whether the config argument should be required or not\n\t * @default false\n\t */\n\tconfigRequired?: boolean;\n\n\t/**\n\t * If your custom data type should be notNull by default you can use `notNull: true`\n\t *\n\t * @example\n\t * const customSerial = customType<{ data: number, notNull: true, default: true }>({\n\t * \t  dataType() {\n\t * \t    return 'serial';\n\t *    },\n\t * });\n\t */\n\tnotNull?: boolean;\n\n\t/**\n\t * If your custom data type has default you can use `default: true`\n\t *\n\t * @example\n\t * const customSerial = customType<{ data: number, notNull: true, default: true }>({\n\t * \t  dataType() {\n\t * \t    return 'serial';\n\t *    },\n\t * });\n\t */\n\tdefault?: boolean;\n};\n\nexport interface CustomTypeParams<T extends CustomTypeValues> {\n\t/**\n\t * Database data type string representation, that is used for migrations\n\t * @example\n\t * ```\n\t * `jsonb`, `text`\n\t * ```\n\t *\n\t * If database data type needs additional params you can use them from `config` param\n\t * @example\n\t * ```\n\t * `varchar(256)`, `numeric(2,3)`\n\t * ```\n\t *\n\t * To make `config` be of specific type please use config generic in {@link CustomTypeValues}\n\t *\n\t * @example\n\t * Usage example\n\t * ```\n\t *   dataType() {\n\t *     return 'boolean';\n\t *   },\n\t * ```\n\t * Or\n\t * ```\n\t *   dataType(config) {\n\t * \t   return typeof config.length !== 'undefined' ? `varchar(${config.length})` : `varchar`;\n\t * \t }\n\t * ```\n\t */\n\tdataType: (config: T['config'] | (Equal<T['configRequired'], true> extends true ? never : undefined)) => string;\n\n\t/**\n\t * Optional mapping function, between user input and driver\n\t * @example\n\t * For example, when using jsonb we need to map JS/TS object to string before writing to database\n\t * ```\n\t * toDriver(value: TData): string {\n\t * \t return JSON.stringify(value);\n\t * }\n\t * ```\n\t */\n\ttoDriver?: (value: T['data']) => T['driverData'] | SQL;\n\n\t/**\n\t * Optional mapping function, that is responsible for data mapping from database to JS/TS code\n\t * @example\n\t * For example, when using timestamp we need to map string Date representation to JS Date\n\t * ```\n\t * fromDriver(value: string): Date {\n\t * \treturn new Date(value);\n\t * },\n\t * ```\n\t */\n\tfromDriver?: (value: T['driverData']) => T['data'];\n}\n\n/**\n * Custom pg database data type generator\n */\nexport function customType<T extends CustomTypeValues = CustomTypeValues>(\n\tcustomTypeParams: CustomTypeParams<T>,\n): Equal<T['configRequired'], true> extends true ? {\n\t\t<TConfig extends Record<string, any> & T['config']>(\n\t\t\tfieldConfig: TConfig,\n\t\t): PgCustomColumnBuilder<ConvertCustomConfig<'', T>>;\n\t\t<TName extends string>(\n\t\t\tdbName: TName,\n\t\t\tfieldConfig: T['config'],\n\t\t): PgCustomColumnBuilder<ConvertCustomConfig<TName, T>>;\n\t}\n\t: {\n\t\t(): PgCustomColumnBuilder<ConvertCustomConfig<'', T>>;\n\t\t<TConfig extends Record<string, any> & T['config']>(\n\t\t\tfieldConfig?: TConfig,\n\t\t): PgCustomColumnBuilder<ConvertCustomConfig<'', T>>;\n\t\t<TName extends string>(\n\t\t\tdbName: TName,\n\t\t\tfieldConfig?: T['config'],\n\t\t): PgCustomColumnBuilder<ConvertCustomConfig<TName, T>>;\n\t}\n{\n\treturn <TName extends string>(\n\t\ta?: TName | T['config'],\n\t\tb?: T['config'],\n\t): PgCustomColumnBuilder<ConvertCustomConfig<TName, T>> => {\n\t\tconst { name, config } = getColumnNameAndConfig<T['config']>(a, b);\n\t\treturn new PgCustomColumnBuilder(name as ConvertCustomConfig<TName, T>['name'], config, customTypeParams);\n\t};\n}\n", "import type { ColumnBuilderBaseConfig, ColumnDataType } from '~/column-builder.ts';\nimport { entityKind } from '~/entity.ts';\nimport { sql } from '~/sql/sql.ts';\nimport { PgColumnBuilder } from './common.ts';\n\nexport abstract class PgDateColumnBaseBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n> extends PgColumnBuilder<T, TRuntimeConfig> {\n\tstatic override readonly [entityKind]: string = 'PgDateColumnBaseBuilder';\n\n\tdefaultNow() {\n\t\treturn this.default(sql`now()`);\n\t}\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn } from './common.ts';\nimport { PgDateColumnBaseBuilder } from './date.common.ts';\n\nexport type PgDateBuilderInitial<TName extends string> = PgDateBuilder<{\n\tname: TName;\n\tdataType: 'date';\n\tcolumnType: 'PgDate';\n\tdata: Date;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgDateBuilder<T extends ColumnBuilderBaseConfig<'date', 'PgDate'>> extends PgDateColumnBaseBuilder<T> {\n\tstatic override readonly [entityKind]: string = 'PgDateBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'date', 'PgDate');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgDate<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgDate<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgDate<T extends ColumnBaseConfig<'date', 'PgDate'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgDate';\n\n\tgetSQLType(): string {\n\t\treturn 'date';\n\t}\n\n\toverride mapFromDriverValue(value: string | Date): Date {\n\t\tif (typeof value === 'string') return new Date(value);\n\n\t\treturn value;\n\t}\n\n\toverride mapToDriverValue(value: Date): string {\n\t\treturn value.toISOString();\n\t}\n}\n\nexport type PgDateStringBuilderInitial<TName extends string> = PgDateStringBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgDateString';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgDateStringBuilder<T extends ColumnBuilderBaseConfig<'string', 'PgDateString'>>\n\textends PgDateColumnBaseBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'PgDateStringBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'string', 'PgDateString');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgDateString<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgDateString<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgDateString<T extends ColumnBaseConfig<'string', 'PgDateString'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgDateString';\n\n\tgetSQLType(): string {\n\t\treturn 'date';\n\t}\n\n\toverride mapFromDriverValue(value: Date | string): string {\n\t\tif (typeof value === 'string') return value;\n\n\t\treturn value.toISOString().slice(0, -14);\n\t}\n}\n\nexport interface PgDateConfig<T extends 'date' | 'string' = 'date' | 'string'> {\n\tmode: T;\n}\n\nexport function date(): PgDateStringBuilderInitial<''>;\nexport function date<TMode extends PgDateConfig['mode'] & {}>(\n\tconfig?: PgDateConfig<TMode>,\n): Equal<TMode, 'date'> extends true ? PgDateBuilderInitial<''> : PgDateStringBuilderInitial<''>;\nexport function date<TName extends string, TMode extends PgDateConfig['mode'] & {}>(\n\tname: TName,\n\tconfig?: PgDateConfig<TMode>,\n): Equal<TMode, 'date'> extends true ? PgDateBuilderInitial<TName> : PgDateStringBuilderInitial<TName>;\nexport function date(a?: string | PgDateConfig, b?: PgDateConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgDateConfig>(a, b);\n\tif (config?.mode === 'date') {\n\t\treturn new PgDateBuilder(name);\n\t}\n\treturn new PgDateStringBuilder(name);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgDoublePrecisionBuilderInitial<TName extends string> = PgDoublePrecisionBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'PgDoublePrecision';\n\tdata: number;\n\tdriverParam: string | number;\n\tenumValues: undefined;\n}>;\n\nexport class PgDoublePrecisionBuilder<T extends ColumnBuilderBaseConfig<'number', 'PgDoublePrecision'>>\n\textends PgColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'PgDoublePrecisionBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'PgDoublePrecision');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgDoublePrecision<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgDoublePrecision<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgDoublePrecision<T extends ColumnBaseConfig<'number', 'PgDoublePrecision'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgDoublePrecision';\n\n\tgetSQLType(): string {\n\t\treturn 'double precision';\n\t}\n\n\toverride mapFromDriverValue(value: string | number): number {\n\t\tif (typeof value === 'string') {\n\t\t\treturn Number.parseFloat(value);\n\t\t}\n\t\treturn value;\n\t}\n}\n\nexport function doublePrecision(): PgDoublePrecisionBuilderInitial<''>;\nexport function doublePrecision<TName extends string>(name: TName): PgDoublePrecisionBuilderInitial<TName>;\nexport function doublePrecision(name?: string) {\n\treturn new PgDoublePrecisionBuilder(name ?? '');\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '../table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgInetBuilderInitial<TName extends string> = PgInetBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgInet';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgInetBuilder<T extends ColumnBuilderBaseConfig<'string', 'PgInet'>> extends PgColumnBuilder<T> {\n\tstatic override readonly [entityKind]: string = 'PgInetBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'string', 'PgInet');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgInet<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgInet<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgInet<T extends ColumnBaseConfig<'string', 'PgInet'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgInet';\n\n\tgetSQLType(): string {\n\t\treturn 'inet';\n\t}\n}\n\nexport function inet(): PgInetBuilderInitial<''>;\nexport function inet<TName extends string>(name: TName): PgInetBuilderInitial<TName>;\nexport function inet(name?: string) {\n\treturn new PgInetBuilder(name ?? '');\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '../table.ts';\nimport { PgColumn } from './common.ts';\nimport { PgIntColumnBaseBuilder } from './int.common.ts';\n\nexport type PgIntegerBuilderInitial<TName extends string> = PgIntegerBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'PgInteger';\n\tdata: number;\n\tdriverParam: number | string;\n\tenumValues: undefined;\n}>;\n\nexport class PgIntegerBuilder<T extends ColumnBuilderBaseConfig<'number', 'PgInteger'>>\n\textends PgIntColumnBaseBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'PgIntegerBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'PgInteger');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgInteger<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgInteger<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgInteger<T extends ColumnBaseConfig<'number', 'PgInteger'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgInteger';\n\n\tgetSQLType(): string {\n\t\treturn 'integer';\n\t}\n\n\toverride mapFromDriverValue(value: number | string): number {\n\t\tif (typeof value === 'string') {\n\t\t\treturn Number.parseInt(value);\n\t\t}\n\t\treturn value;\n\t}\n}\n\nexport function integer(): PgIntegerBuilderInitial<''>;\nexport function integer<TName extends string>(name: TName): PgIntegerBuilderInitial<TName>;\nexport function integer(name?: string) {\n\treturn new PgIntegerBuilder(name ?? '');\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\nimport type { Precision } from './timestamp.ts';\n\nexport type PgIntervalBuilderInitial<TName extends string> = PgIntervalBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgInterval';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgIntervalBuilder<T extends ColumnBuilderBaseConfig<'string', 'PgInterval'>>\n\textends PgColumnBuilder<T, { intervalConfig: IntervalConfig }>\n{\n\tstatic override readonly [entityKind]: string = 'PgIntervalBuilder';\n\n\tconstructor(\n\t\tname: T['name'],\n\t\tintervalConfig: IntervalConfig,\n\t) {\n\t\tsuper(name, 'string', 'PgInterval');\n\t\tthis.config.intervalConfig = intervalConfig;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgInterval<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgInterval<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgInterval<T extends ColumnBaseConfig<'string', 'PgInterval'>>\n\textends PgColumn<T, { intervalConfig: IntervalConfig }>\n{\n\tstatic override readonly [entityKind]: string = 'PgInterval';\n\n\treadonly fields: IntervalConfig['fields'] = this.config.intervalConfig.fields;\n\treadonly precision: IntervalConfig['precision'] = this.config.intervalConfig.precision;\n\n\tgetSQLType(): string {\n\t\tconst fields = this.fields ? ` ${this.fields}` : '';\n\t\tconst precision = this.precision ? `(${this.precision})` : '';\n\t\treturn `interval${fields}${precision}`;\n\t}\n}\n\nexport interface IntervalConfig {\n\tfields?:\n\t\t| 'year'\n\t\t| 'month'\n\t\t| 'day'\n\t\t| 'hour'\n\t\t| 'minute'\n\t\t| 'second'\n\t\t| 'year to month'\n\t\t| 'day to hour'\n\t\t| 'day to minute'\n\t\t| 'day to second'\n\t\t| 'hour to minute'\n\t\t| 'hour to second'\n\t\t| 'minute to second';\n\tprecision?: Precision;\n}\n\nexport function interval(): PgIntervalBuilderInitial<''>;\nexport function interval(\n\tconfig?: IntervalConfig,\n): PgIntervalBuilderInitial<''>;\nexport function interval<TName extends string>(\n\tname: TName,\n\tconfig?: IntervalConfig,\n): PgIntervalBuilderInitial<TName>;\nexport function interval(a?: string | IntervalConfig, b: IntervalConfig = {}) {\n\tconst { name, config } = getColumnNameAndConfig<IntervalConfig>(a, b);\n\treturn new PgIntervalBuilder(name, config);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgJsonBuilderInitial<TName extends string> = PgJsonBuilder<{\n\tname: TName;\n\tdataType: 'json';\n\tcolumnType: 'PgJson';\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: undefined;\n}>;\n\nexport class PgJsonBuilder<T extends ColumnBuilderBaseConfig<'json', 'PgJson'>> extends PgColumnBuilder<\n\tT\n> {\n\tstatic override readonly [entityKind]: string = 'PgJsonBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'json', 'PgJson');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgJson<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgJson<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgJson<T extends ColumnBaseConfig<'json', 'PgJson'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgJson';\n\n\tconstructor(table: AnyPgTable<{ name: T['tableName'] }>, config: PgJsonBuilder<T>['config']) {\n\t\tsuper(table, config);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn 'json';\n\t}\n\n\toverride mapToDriverValue(value: T['data']): string {\n\t\treturn JSON.stringify(value);\n\t}\n\n\toverride mapFromDriverValue(value: T['data'] | string): T['data'] {\n\t\tif (typeof value === 'string') {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(value);\n\t\t\t} catch {\n\t\t\t\treturn value as T['data'];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}\n}\n\nexport function json(): PgJsonBuilderInitial<''>;\nexport function json<TName extends string>(name: TName): PgJsonBuilderInitial<TName>;\nexport function json(name?: string) {\n\treturn new PgJsonBuilder(name ?? '');\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgJsonbBuilderInitial<TName extends string> = PgJsonbBuilder<{\n\tname: TName;\n\tdataType: 'json';\n\tcolumnType: 'PgJsonb';\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: undefined;\n}>;\n\nexport class PgJsonbBuilder<T extends ColumnBuilderBaseConfig<'json', 'PgJsonb'>> extends PgColumnBuilder<T> {\n\tstatic override readonly [entityKind]: string = 'PgJsonbBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'json', 'PgJsonb');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgJsonb<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgJsonb<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgJsonb<T extends ColumnBaseConfig<'json', 'PgJsonb'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgJsonb';\n\n\tconstructor(table: AnyPgTable<{ name: T['tableName'] }>, config: PgJsonbBuilder<T>['config']) {\n\t\tsuper(table, config);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn 'jsonb';\n\t}\n\n\toverride mapToDriverValue(value: T['data']): string {\n\t\treturn JSON.stringify(value);\n\t}\n\n\toverride mapFromDriverValue(value: T['data'] | string): T['data'] {\n\t\tif (typeof value === 'string') {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(value);\n\t\t\t} catch {\n\t\t\t\treturn value as T['data'];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}\n}\n\nexport function jsonb(): PgJsonbBuilderInitial<''>;\nexport function jsonb<TName extends string>(name: TName): PgJsonbBuilderInitial<TName>;\nexport function jsonb(name?: string) {\n\treturn new PgJsonbBuilder(name ?? '');\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\n\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgLineBuilderInitial<TName extends string> = PgLineBuilder<{\n\tname: TName;\n\tdataType: 'array';\n\tcolumnType: 'PgLine';\n\tdata: [number, number, number];\n\tdriverParam: number | string;\n\tenumValues: undefined;\n}>;\n\nexport class PgLineBuilder<T extends ColumnBuilderBaseConfig<'array', 'PgLine'>> extends PgColumnBuilder<T> {\n\tstatic override readonly [entityKind]: string = 'PgLineBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'array', 'PgLine');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgLineTuple<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgLineTuple<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgLineTuple<T extends ColumnBaseConfig<'array', 'PgLine'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgLine';\n\n\tgetSQLType(): string {\n\t\treturn 'line';\n\t}\n\n\toverride mapFromDriverValue(value: string): [number, number, number] {\n\t\tconst [a, b, c] = value.slice(1, -1).split(',');\n\t\treturn [Number.parseFloat(a!), Number.parseFloat(b!), Number.parseFloat(c!)];\n\t}\n\n\toverride mapToDriverValue(value: [number, number, number]): string {\n\t\treturn `{${value[0]},${value[1]},${value[2]}}`;\n\t}\n}\n\nexport type PgLineABCBuilderInitial<TName extends string> = PgLineABCBuilder<{\n\tname: TName;\n\tdataType: 'json';\n\tcolumnType: 'PgLineABC';\n\tdata: { a: number; b: number; c: number };\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgLineABCBuilder<T extends ColumnBuilderBaseConfig<'json', 'PgLineABC'>> extends PgColumnBuilder<T> {\n\tstatic override readonly [entityKind]: string = 'PgLineABCBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'json', 'PgLineABC');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgLineABC<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgLineABC<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgLineABC<T extends ColumnBaseConfig<'json', 'PgLineABC'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgLineABC';\n\n\tgetSQLType(): string {\n\t\treturn 'line';\n\t}\n\n\toverride mapFromDriverValue(value: string): { a: number; b: number; c: number } {\n\t\tconst [a, b, c] = value.slice(1, -1).split(',');\n\t\treturn { a: Number.parseFloat(a!), b: Number.parseFloat(b!), c: Number.parseFloat(c!) };\n\t}\n\n\toverride mapToDriverValue(value: { a: number; b: number; c: number }): string {\n\t\treturn `{${value.a},${value.b},${value.c}}`;\n\t}\n}\n\nexport interface PgLineTypeConfig<T extends 'tuple' | 'abc' = 'tuple' | 'abc'> {\n\tmode?: T;\n}\n\nexport function line(): PgLineBuilderInitial<''>;\nexport function line<TMode extends PgLineTypeConfig['mode'] & {}>(\n\tconfig?: PgLineTypeConfig<TMode>,\n): Equal<TMode, 'abc'> extends true ? PgLineABCBuilderInitial<''>\n\t: PgLineBuilderInitial<''>;\nexport function line<TName extends string, TMode extends PgLineTypeConfig['mode'] & {}>(\n\tname: TName,\n\tconfig?: PgLineTypeConfig<TMode>,\n): Equal<TMode, 'abc'> extends true ? PgLineABCBuilderInitial<TName>\n\t: PgLineBuilderInitial<TName>;\nexport function line(a?: string | PgLineTypeConfig, b?: PgLineTypeConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgLineTypeConfig>(a, b);\n\tif (!config?.mode || config.mode === 'tuple') {\n\t\treturn new PgLineBuilder(name);\n\t}\n\treturn new PgLineABCBuilder(name);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '../table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgMacaddrBuilderInitial<TName extends string> = PgMacaddrBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgMacaddr';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgMacaddrBuilder<T extends ColumnBuilderBaseConfig<'string', 'PgMacaddr'>> extends PgColumnBuilder<T> {\n\tstatic override readonly [entityKind]: string = 'PgMacaddrBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'string', 'PgMacaddr');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgMacaddr<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgMacaddr<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgMacaddr<T extends ColumnBaseConfig<'string', 'PgMacaddr'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgMacaddr';\n\n\tgetSQLType(): string {\n\t\treturn 'macaddr';\n\t}\n}\n\nexport function macaddr(): PgMacaddrBuilderInitial<''>;\nexport function macaddr<TName extends string>(name: TName): PgMacaddrBuilderInitial<TName>;\nexport function macaddr(name?: string) {\n\treturn new PgMacaddrBuilder(name ?? '');\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '../table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgMacaddr8BuilderInitial<TName extends string> = PgMacaddr8Builder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgMacaddr8';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgMacaddr8Builder<T extends ColumnBuilderBaseConfig<'string', 'PgMacaddr8'>> extends PgColumnBuilder<T> {\n\tstatic override readonly [entityKind]: string = 'PgMacaddr8Builder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'string', 'PgMacaddr8');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgMacaddr8<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgMacaddr8<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgMacaddr8<T extends ColumnBaseConfig<'string', 'PgMacaddr8'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgMacaddr8';\n\n\tgetSQLType(): string {\n\t\treturn 'macaddr8';\n\t}\n}\n\nexport function macaddr8(): PgMacaddr8BuilderInitial<''>;\nexport function macaddr8<TName extends string>(name: TName): PgMacaddr8BuilderInitial<TName>;\nexport function macaddr8(name?: string) {\n\treturn new PgMacaddr8Builder(name ?? '');\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgNumericBuilderInitial<TName extends string> = PgNumericBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgNumeric';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgNumericBuilder<T extends ColumnBuilderBaseConfig<'string', 'PgNumeric'>> extends PgColumnBuilder<\n\tT,\n\t{\n\t\tprecision: number | undefined;\n\t\tscale: number | undefined;\n\t}\n> {\n\tstatic override readonly [entityKind]: string = 'PgNumericBuilder';\n\n\tconstructor(name: T['name'], precision?: number, scale?: number) {\n\t\tsuper(name, 'string', 'PgNumeric');\n\t\tthis.config.precision = precision;\n\t\tthis.config.scale = scale;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgNumeric<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgNumeric<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgNumeric<T extends ColumnBaseConfig<'string', 'PgNumeric'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgNumeric';\n\n\treadonly precision: number | undefined;\n\treadonly scale: number | undefined;\n\n\tconstructor(table: AnyPgTable<{ name: T['tableName'] }>, config: PgNumericBuilder<T>['config']) {\n\t\tsuper(table, config);\n\t\tthis.precision = config.precision;\n\t\tthis.scale = config.scale;\n\t}\n\n\toverride mapFromDriverValue(value: unknown): string {\n\t\tif (typeof value === 'string') return value;\n\n\t\treturn String(value);\n\t}\n\n\tgetSQLType(): string {\n\t\tif (this.precision !== undefined && this.scale !== undefined) {\n\t\t\treturn `numeric(${this.precision}, ${this.scale})`;\n\t\t} else if (this.precision === undefined) {\n\t\t\treturn 'numeric';\n\t\t} else {\n\t\t\treturn `numeric(${this.precision})`;\n\t\t}\n\t}\n}\n\nexport type PgNumericNumberBuilderInitial<TName extends string> = PgNumericNumberBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'PgNumericNumber';\n\tdata: number;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgNumericNumberBuilder<T extends ColumnBuilderBaseConfig<'number', 'PgNumericNumber'>>\n\textends PgColumnBuilder<\n\t\tT,\n\t\t{\n\t\t\tprecision: number | undefined;\n\t\t\tscale: number | undefined;\n\t\t}\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'PgNumericNumberBuilder';\n\n\tconstructor(name: T['name'], precision?: number, scale?: number) {\n\t\tsuper(name, 'number', 'PgNumericNumber');\n\t\tthis.config.precision = precision;\n\t\tthis.config.scale = scale;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgNumericNumber<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgNumericNumber<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgNumericNumber<T extends ColumnBaseConfig<'number', 'PgNumericNumber'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgNumericNumber';\n\n\treadonly precision: number | undefined;\n\treadonly scale: number | undefined;\n\n\tconstructor(table: AnyPgTable<{ name: T['tableName'] }>, config: PgNumericNumberBuilder<T>['config']) {\n\t\tsuper(table, config);\n\t\tthis.precision = config.precision;\n\t\tthis.scale = config.scale;\n\t}\n\n\toverride mapFromDriverValue(value: unknown): number {\n\t\tif (typeof value === 'number') return value;\n\n\t\treturn Number(value);\n\t}\n\n\toverride mapToDriverValue = String;\n\n\tgetSQLType(): string {\n\t\tif (this.precision !== undefined && this.scale !== undefined) {\n\t\t\treturn `numeric(${this.precision}, ${this.scale})`;\n\t\t} else if (this.precision === undefined) {\n\t\t\treturn 'numeric';\n\t\t} else {\n\t\t\treturn `numeric(${this.precision})`;\n\t\t}\n\t}\n}\n\nexport type PgNumericBigIntBuilderInitial<TName extends string> = PgNumericBigIntBuilder<{\n\tname: TName;\n\tdataType: 'bigint';\n\tcolumnType: 'PgNumericBigInt';\n\tdata: bigint;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgNumericBigIntBuilder<T extends ColumnBuilderBaseConfig<'bigint', 'PgNumericBigInt'>>\n\textends PgColumnBuilder<\n\t\tT,\n\t\t{\n\t\t\tprecision: number | undefined;\n\t\t\tscale: number | undefined;\n\t\t}\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'PgNumericBigIntBuilder';\n\n\tconstructor(name: T['name'], precision?: number, scale?: number) {\n\t\tsuper(name, 'bigint', 'PgNumericBigInt');\n\t\tthis.config.precision = precision;\n\t\tthis.config.scale = scale;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgNumericBigInt<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgNumericBigInt<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgNumericBigInt<T extends ColumnBaseConfig<'bigint', 'PgNumericBigInt'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgNumericBigInt';\n\n\treadonly precision: number | undefined;\n\treadonly scale: number | undefined;\n\n\tconstructor(table: AnyPgTable<{ name: T['tableName'] }>, config: PgNumericBigIntBuilder<T>['config']) {\n\t\tsuper(table, config);\n\t\tthis.precision = config.precision;\n\t\tthis.scale = config.scale;\n\t}\n\n\toverride mapFromDriverValue = BigInt;\n\n\toverride mapToDriverValue = String;\n\n\tgetSQLType(): string {\n\t\tif (this.precision !== undefined && this.scale !== undefined) {\n\t\t\treturn `numeric(${this.precision}, ${this.scale})`;\n\t\t} else if (this.precision === undefined) {\n\t\t\treturn 'numeric';\n\t\t} else {\n\t\t\treturn `numeric(${this.precision})`;\n\t\t}\n\t}\n}\n\nexport type PgNumericConfig<T extends 'string' | 'number' | 'bigint' = 'string' | 'number' | 'bigint'> =\n\t| { precision: number; scale?: number; mode?: T }\n\t| { precision?: number; scale: number; mode?: T }\n\t| { precision?: number; scale?: number; mode: T };\n\nexport function numeric<TMode extends 'string' | 'number' | 'bigint'>(\n\tconfig?: PgNumericConfig<TMode>,\n): Equal<TMode, 'number'> extends true ? PgNumericNumberBuilderInitial<''>\n\t: Equal<TMode, 'bigint'> extends true ? PgNumericBigIntBuilderInitial<''>\n\t: PgNumericBuilderInitial<''>;\nexport function numeric<TName extends string, TMode extends 'string' | 'number' | 'bigint'>(\n\tname: TName,\n\tconfig?: PgNumericConfig<TMode>,\n): Equal<TMode, 'number'> extends true ? PgNumericNumberBuilderInitial<TName>\n\t: Equal<TMode, 'bigint'> extends true ? PgNumericBigIntBuilderInitial<TName>\n\t: PgNumericBuilderInitial<TName>;\nexport function numeric(a?: string | PgNumericConfig, b?: PgNumericConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgNumericConfig>(a, b);\n\tconst mode = config?.mode;\n\treturn mode === 'number'\n\t\t? new PgNumericNumberBuilder(name, config?.precision, config?.scale)\n\t\t: mode === 'bigint'\n\t\t? new PgNumericBigIntBuilder(name, config?.precision, config?.scale)\n\t\t: new PgNumericBuilder(name, config?.precision, config?.scale);\n}\n\nexport const decimal = numeric;\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\n\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgPointTupleBuilderInitial<TName extends string> = PgPointTupleBuilder<{\n\tname: TName;\n\tdataType: 'array';\n\tcolumnType: 'PgPointTuple';\n\tdata: [number, number];\n\tdriverParam: number | string;\n\tenumValues: undefined;\n}>;\n\nexport class PgPointTupleBuilder<T extends ColumnBuilderBaseConfig<'array', 'PgPointTuple'>>\n\textends PgColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'PgPointTupleBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'array', 'PgPointTuple');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgPointTuple<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgPointTuple<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgPointTuple<T extends ColumnBaseConfig<'array', 'PgPointTuple'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgPointTuple';\n\n\tgetSQLType(): string {\n\t\treturn 'point';\n\t}\n\n\toverride mapFromDriverValue(value: string | { x: number; y: number }): [number, number] {\n\t\tif (typeof value === 'string') {\n\t\t\tconst [x, y] = value.slice(1, -1).split(',');\n\t\t\treturn [Number.parseFloat(x!), Number.parseFloat(y!)];\n\t\t}\n\t\treturn [value.x, value.y];\n\t}\n\n\toverride mapToDriverValue(value: [number, number]): string {\n\t\treturn `(${value[0]},${value[1]})`;\n\t}\n}\n\nexport type PgPointObjectBuilderInitial<TName extends string> = PgPointObjectBuilder<{\n\tname: TName;\n\tdataType: 'json';\n\tcolumnType: 'PgPointObject';\n\tdata: { x: number; y: number };\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgPointObjectBuilder<T extends ColumnBuilderBaseConfig<'json', 'PgPointObject'>>\n\textends PgColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'PgPointObjectBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'json', 'PgPointObject');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgPointObject<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgPointObject<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgPointObject<T extends ColumnBaseConfig<'json', 'PgPointObject'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgPointObject';\n\n\tgetSQLType(): string {\n\t\treturn 'point';\n\t}\n\n\toverride mapFromDriverValue(value: string | { x: number; y: number }): { x: number; y: number } {\n\t\tif (typeof value === 'string') {\n\t\t\tconst [x, y] = value.slice(1, -1).split(',');\n\t\t\treturn { x: Number.parseFloat(x!), y: Number.parseFloat(y!) };\n\t\t}\n\t\treturn value;\n\t}\n\n\toverride mapToDriverValue(value: { x: number; y: number }): string {\n\t\treturn `(${value.x},${value.y})`;\n\t}\n}\n\nexport interface PgPointConfig<T extends 'tuple' | 'xy' = 'tuple' | 'xy'> {\n\tmode?: T;\n}\n\nexport function point(): PgPointTupleBuilderInitial<''>;\nexport function point<TMode extends PgPointConfig['mode'] & {}>(\n\tconfig?: PgPointConfig<TMode>,\n): Equal<TMode, 'xy'> extends true ? PgPointObjectBuilderInitial<''>\n\t: PgPointTupleBuilderInitial<''>;\nexport function point<TName extends string, TMode extends PgPointConfig['mode'] & {}>(\n\tname: TName,\n\tconfig?: PgPointConfig<TMode>,\n): Equal<TMode, 'xy'> extends true ? PgPointObjectBuilderInitial<TName>\n\t: PgPointTupleBuilderInitial<TName>;\nexport function point(a?: string | PgPointConfig, b?: PgPointConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgPointConfig>(a, b);\n\tif (!config?.mode || config.mode === 'tuple') {\n\t\treturn new PgPointTupleBuilder(name);\n\t}\n\treturn new PgPointObjectBuilder(name);\n}\n", "function hexToBytes(hex: string): Uint8Array {\n\tconst bytes: number[] = [];\n\tfor (let c = 0; c < hex.length; c += 2) {\n\t\tbytes.push(Number.parseInt(hex.slice(c, c + 2), 16));\n\t}\n\treturn new Uint8Array(bytes);\n}\n\nfunction bytesToFloat64(bytes: Uint8Array, offset: number): number {\n\tconst buffer = new ArrayBuffer(8);\n\tconst view = new DataView(buffer);\n\tfor (let i = 0; i < 8; i++) {\n\t\tview.setUint8(i, bytes[offset + i]!);\n\t}\n\treturn view.getFloat64(0, true);\n}\n\nexport function parseEWKB(hex: string): [number, number] {\n\tconst bytes = hexToBytes(hex);\n\n\tlet offset = 0;\n\n\t// Byte order: 1 is little-endian, 0 is big-endian\n\tconst byteOrder = bytes[offset];\n\toffset += 1;\n\n\tconst view = new DataView(bytes.buffer);\n\tconst geomType = view.getUint32(offset, byteOrder === 1);\n\toffset += 4;\n\n\tlet _srid: number | undefined;\n\tif (geomType & 0x20000000) { // SRID flag\n\t\t_srid = view.getUint32(offset, byteOrder === 1);\n\t\toffset += 4;\n\t}\n\n\tif ((geomType & 0xFFFF) === 1) {\n\t\tconst x = bytesToFloat64(bytes, offset);\n\t\toffset += 8;\n\t\tconst y = bytesToFloat64(bytes, offset);\n\t\toffset += 8;\n\n\t\treturn [x, y];\n\t}\n\n\tthrow new Error('Unsupported geometry type');\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\n\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from '../common.ts';\nimport { parseEWKB } from './utils.ts';\n\nexport type PgGeometryBuilderInitial<TName extends string> = PgGeometryBuilder<{\n\tname: TName;\n\tdataType: 'array';\n\tcolumnType: 'PgGeometry';\n\tdata: [number, number];\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgGeometryBuilder<T extends ColumnBuilderBaseConfig<'array', 'PgGeometry'>> extends PgColumnBuilder<T> {\n\tstatic override readonly [entityKind]: string = 'PgGeometryBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'array', 'PgGeometry');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgGeometry<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgGeometry<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgGeometry<T extends ColumnBaseConfig<'array', 'PgGeometry'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgGeometry';\n\n\tgetSQLType(): string {\n\t\treturn 'geometry(point)';\n\t}\n\n\toverride mapFromDriverValue(value: string): [number, number] {\n\t\treturn parseEWKB(value);\n\t}\n\n\toverride mapToDriverValue(value: [number, number]): string {\n\t\treturn `point(${value[0]} ${value[1]})`;\n\t}\n}\n\nexport type PgGeometryObjectBuilderInitial<TName extends string> = PgGeometryObjectBuilder<{\n\tname: TName;\n\tdataType: 'json';\n\tcolumnType: 'PgGeometryObject';\n\tdata: { x: number; y: number };\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgGeometryObjectBuilder<T extends ColumnBuilderBaseConfig<'json', 'PgGeometryObject'>>\n\textends PgColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'PgGeometryObjectBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'json', 'PgGeometryObject');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgGeometryObject<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgGeometryObject<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgGeometryObject<T extends ColumnBaseConfig<'json', 'PgGeometryObject'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgGeometryObject';\n\n\tgetSQLType(): string {\n\t\treturn 'geometry(point)';\n\t}\n\n\toverride mapFromDriverValue(value: string): { x: number; y: number } {\n\t\tconst parsed = parseEWKB(value);\n\t\treturn { x: parsed[0], y: parsed[1] };\n\t}\n\n\toverride mapToDriverValue(value: { x: number; y: number }): string {\n\t\treturn `point(${value.x} ${value.y})`;\n\t}\n}\n\nexport interface PgGeometryConfig<T extends 'tuple' | 'xy' = 'tuple' | 'xy'> {\n\tmode?: T;\n\ttype?: 'point' | (string & {});\n\tsrid?: number;\n}\n\nexport function geometry(): PgGeometryBuilderInitial<''>;\nexport function geometry<TMode extends PgGeometryConfig['mode'] & {}>(\n\tconfig?: PgGeometryConfig<TMode>,\n): Equal<TMode, 'xy'> extends true ? PgGeometryObjectBuilderInitial<''> : PgGeometryBuilderInitial<''>;\nexport function geometry<TName extends string, TMode extends PgGeometryConfig['mode'] & {}>(\n\tname: TName,\n\tconfig?: PgGeometryConfig<TMode>,\n): Equal<TMode, 'xy'> extends true ? PgGeometryObjectBuilderInitial<TName> : PgGeometryBuilderInitial<TName>;\nexport function geometry(a?: string | PgGeometryConfig, b?: PgGeometryConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgGeometryConfig>(a, b);\n\tif (!config?.mode || config.mode === 'tuple') {\n\t\treturn new PgGeometryBuilder(name);\n\t}\n\treturn new PgGeometryObjectBuilder(name);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgRealBuilderInitial<TName extends string> = PgRealBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'PgReal';\n\tdata: number;\n\tdriverParam: string | number;\n\tenumValues: undefined;\n}>;\n\nexport class PgRealBuilder<T extends ColumnBuilderBaseConfig<'number', 'PgReal'>> extends PgColumnBuilder<\n\tT,\n\t{ length: number | undefined }\n> {\n\tstatic override readonly [entityKind]: string = 'PgRealBuilder';\n\n\tconstructor(name: T['name'], length?: number) {\n\t\tsuper(name, 'number', 'PgReal');\n\t\tthis.config.length = length;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgReal<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgReal<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgReal<T extends ColumnBaseConfig<'number', 'PgReal'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgReal';\n\n\tconstructor(table: AnyPgTable<{ name: T['tableName'] }>, config: PgRealBuilder<T>['config']) {\n\t\tsuper(table, config);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn 'real';\n\t}\n\n\toverride mapFromDriverValue = (value: string | number): number => {\n\t\tif (typeof value === 'string') {\n\t\t\treturn Number.parseFloat(value);\n\t\t}\n\t\treturn value;\n\t};\n}\n\nexport function real(): PgRealBuilderInitial<''>;\nexport function real<TName extends string>(name: TName): PgRealBuilderInitial<TName>;\nexport function real(name?: string) {\n\treturn new PgRealBuilder(name ?? '');\n}\n", "import type {\n\tColumnBuilderBaseConfig,\n\tColumnBuilderRuntimeConfig,\n\tHasDefault,\n\tMakeColumnConfig,\n\tNotNull,\n} from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgSerialBuilderInitial<TName extends string> = NotNull<\n\tHasDefault<\n\t\tPgSerialBuilder<{\n\t\t\tname: TName;\n\t\t\tdataType: 'number';\n\t\t\tcolumnType: 'PgSerial';\n\t\t\tdata: number;\n\t\t\tdriverParam: number;\n\t\t\tenumValues: undefined;\n\t\t}>\n\t>\n>;\n\nexport class PgSerialBuilder<T extends ColumnBuilderBaseConfig<'number', 'PgSerial'>> extends PgColumnBuilder<T> {\n\tstatic override readonly [entityKind]: string = 'PgSerialBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'PgSerial');\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgSerial<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgSerial<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgSerial<T extends ColumnBaseConfig<'number', 'PgSerial'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgSerial';\n\n\tgetSQLType(): string {\n\t\treturn 'serial';\n\t}\n}\n\nexport function serial(): PgSerialBuilderInitial<''>;\nexport function serial<TName extends string>(name: TName): PgSerialBuilderInitial<TName>;\nexport function serial(name?: string) {\n\treturn new PgSerialBuilder(name ?? '');\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { PgColumn } from './common.ts';\nimport { PgIntColumnBaseBuilder } from './int.common.ts';\n\nexport type PgSmallIntBuilderInitial<TName extends string> = PgSmallIntBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'PgSmallInt';\n\tdata: number;\n\tdriverParam: number | string;\n\tenumValues: undefined;\n}>;\n\nexport class PgSmallIntBuilder<T extends ColumnBuilderBaseConfig<'number', 'PgSmallInt'>>\n\textends PgIntColumnBaseBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'PgSmallIntBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'PgSmallInt');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgSmallInt<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgSmallInt<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgSmallInt<T extends ColumnBaseConfig<'number', 'PgSmallInt'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgSmallInt';\n\n\tgetSQLType(): string {\n\t\treturn 'smallint';\n\t}\n\n\toverride mapFromDriverValue = (value: number | string): number => {\n\t\tif (typeof value === 'string') {\n\t\t\treturn Number(value);\n\t\t}\n\t\treturn value;\n\t};\n}\n\nexport function smallint(): PgSmallIntBuilderInitial<''>;\nexport function smallint<TName extends string>(name: TName): PgSmallIntBuilderInitial<TName>;\nexport function smallint(name?: string) {\n\treturn new PgSmallIntBuilder(name ?? '');\n}\n", "import type {\n\tColumnBuilderBaseConfig,\n\tColumnBuilderRuntimeConfig,\n\tHasDefault,\n\tMakeColumnConfig,\n\tNotNull,\n} from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgSmallSerialBuilderInitial<TName extends string> = NotNull<\n\tHasDefault<\n\t\tPgSmallSerialBuilder<{\n\t\t\tname: TName;\n\t\t\tdataType: 'number';\n\t\t\tcolumnType: 'PgSmallSerial';\n\t\t\tdata: number;\n\t\t\tdriverParam: number;\n\t\t\tenumValues: undefined;\n\t\t}>\n\t>\n>;\n\nexport class PgSmallSerialBuilder<T extends ColumnBuilderBaseConfig<'number', 'PgSmallSerial'>>\n\textends PgColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'PgSmallSerialBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'PgSmallSerial');\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgSmallSerial<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgSmallSerial<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgSmallSerial<T extends ColumnBaseConfig<'number', 'PgSmallSerial'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgSmallSerial';\n\n\tgetSQLType(): string {\n\t\treturn 'smallserial';\n\t}\n}\n\nexport function smallserial(): PgSmallSerialBuilderInitial<''>;\nexport function smallserial<TName extends string>(name: TName): PgSmallSerialBuilderInitial<TName>;\nexport function smallserial(name?: string) {\n\treturn new PgSmallSerialBuilder(name ?? '');\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig, type Writable } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgTextBuilderInitial<TName extends string, TEnum extends [string, ...string[]]> = PgTextBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgText';\n\tdata: TEnum[number];\n\tenumValues: TEnum;\n\tdriverParam: string;\n}>;\n\nexport class PgTextBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'PgText'>,\n> extends PgColumnBuilder<T, { enumValues: T['enumValues'] }> {\n\tstatic override readonly [entityKind]: string = 'PgTextBuilder';\n\n\tconstructor(\n\t\tname: T['name'],\n\t\tconfig: PgTextConfig<T['enumValues']>,\n\t) {\n\t\tsuper(name, 'string', 'PgText');\n\t\tthis.config.enumValues = config.enum;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgText<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgText<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgText<T extends ColumnBaseConfig<'string', 'PgText'>>\n\textends PgColumn<T, { enumValues: T['enumValues'] }>\n{\n\tstatic override readonly [entityKind]: string = 'PgText';\n\n\toverride readonly enumValues = this.config.enumValues;\n\n\tgetSQLType(): string {\n\t\treturn 'text';\n\t}\n}\n\nexport interface PgTextConfig<\n\tTEnum extends readonly string[] | string[] | undefined = readonly string[] | string[] | undefined,\n> {\n\tenum?: TEnum;\n}\n\nexport function text(): PgTextBuilderInitial<'', [string, ...string[]]>;\nexport function text<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tconfig?: PgTextConfig<T | Writable<T>>,\n): PgTextBuilderInitial<'', Writable<T>>;\nexport function text<TName extends string, U extends string, T extends Readonly<[U, ...U[]]>>(\n\tname: TName,\n\tconfig?: PgTextConfig<T | Writable<T>>,\n): PgTextBuilderInitial<TName, Writable<T>>;\nexport function text(a?: string | PgTextConfig, b: PgTextConfig = {}): any {\n\tconst { name, config } = getColumnNameAndConfig<PgTextConfig>(a, b);\n\treturn new PgTextBuilder(name, config as any);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn } from './common.ts';\nimport { PgDateColumnBaseBuilder } from './date.common.ts';\nimport type { Precision } from './timestamp.ts';\n\nexport type PgTimeBuilderInitial<TName extends string> = PgTimeBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgTime';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgTimeBuilder<T extends ColumnBuilderBaseConfig<'string', 'PgTime'>> extends PgDateColumnBaseBuilder<\n\tT,\n\t{ withTimezone: boolean; precision: number | undefined }\n> {\n\tstatic override readonly [entityKind]: string = 'PgTimeBuilder';\n\n\tconstructor(\n\t\tname: T['name'],\n\t\treadonly withTimezone: boolean,\n\t\treadonly precision: number | undefined,\n\t) {\n\t\tsuper(name, 'string', 'PgTime');\n\t\tthis.config.withTimezone = withTimezone;\n\t\tthis.config.precision = precision;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgTime<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgTime<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgTime<T extends ColumnBaseConfig<'string', 'PgTime'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgTime';\n\n\treadonly withTimezone: boolean;\n\treadonly precision: number | undefined;\n\n\tconstructor(table: AnyPgTable<{ name: T['tableName'] }>, config: PgTimeBuilder<T>['config']) {\n\t\tsuper(table, config);\n\t\tthis.withTimezone = config.withTimezone;\n\t\tthis.precision = config.precision;\n\t}\n\n\tgetSQLType(): string {\n\t\tconst precision = this.precision === undefined ? '' : `(${this.precision})`;\n\t\treturn `time${precision}${this.withTimezone ? ' with time zone' : ''}`;\n\t}\n}\n\nexport interface TimeConfig {\n\tprecision?: Precision;\n\twithTimezone?: boolean;\n}\n\nexport function time(): PgTimeBuilderInitial<''>;\nexport function time(config?: TimeConfig): PgTimeBuilderInitial<''>;\nexport function time<TName extends string>(name: TName, config?: TimeConfig): PgTimeBuilderInitial<TName>;\nexport function time(a?: string | TimeConfig, b: TimeConfig = {}) {\n\tconst { name, config } = getColumnNameAndConfig<TimeConfig>(a, b);\n\treturn new PgTimeBuilder(name, config.withTimezone ?? false, config.precision);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn } from './common.ts';\nimport { PgDateColumnBaseBuilder } from './date.common.ts';\n\nexport type PgTimestampBuilderInitial<TName extends string> = PgTimestampBuilder<{\n\tname: TName;\n\tdataType: 'date';\n\tcolumnType: 'PgTimestamp';\n\tdata: Date;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgTimestampBuilder<T extends ColumnBuilderBaseConfig<'date', 'PgTimestamp'>>\n\textends PgDateColumnBaseBuilder<\n\t\tT,\n\t\t{ withTimezone: boolean; precision: number | undefined }\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'PgTimestampBuilder';\n\n\tconstructor(\n\t\tname: T['name'],\n\t\twithTimezone: boolean,\n\t\tprecision: number | undefined,\n\t) {\n\t\tsuper(name, 'date', 'PgTimestamp');\n\t\tthis.config.withTimezone = withTimezone;\n\t\tthis.config.precision = precision;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgTimestamp<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgTimestamp<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgTimestamp<T extends ColumnBaseConfig<'date', 'PgTimestamp'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgTimestamp';\n\n\treadonly withTimezone: boolean;\n\treadonly precision: number | undefined;\n\n\tconstructor(table: AnyPgTable<{ name: T['tableName'] }>, config: PgTimestampBuilder<T>['config']) {\n\t\tsuper(table, config);\n\t\tthis.withTimezone = config.withTimezone;\n\t\tthis.precision = config.precision;\n\t}\n\n\tgetSQLType(): string {\n\t\tconst precision = this.precision === undefined ? '' : ` (${this.precision})`;\n\t\treturn `timestamp${precision}${this.withTimezone ? ' with time zone' : ''}`;\n\t}\n\n\toverride mapFromDriverValue(value: Date | string): Date {\n\t\tif (typeof value === 'string') return new Date(this.withTimezone ? value : value + '+0000');\n\n\t\treturn value;\n\t}\n\n\toverride mapToDriverValue = (value: Date): string => {\n\t\treturn value.toISOString();\n\t};\n}\n\nexport type PgTimestampStringBuilderInitial<TName extends string> = PgTimestampStringBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgTimestampString';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgTimestampStringBuilder<T extends ColumnBuilderBaseConfig<'string', 'PgTimestampString'>>\n\textends PgDateColumnBaseBuilder<\n\t\tT,\n\t\t{ withTimezone: boolean; precision: number | undefined }\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'PgTimestampStringBuilder';\n\n\tconstructor(\n\t\tname: T['name'],\n\t\twithTimezone: boolean,\n\t\tprecision: number | undefined,\n\t) {\n\t\tsuper(name, 'string', 'PgTimestampString');\n\t\tthis.config.withTimezone = withTimezone;\n\t\tthis.config.precision = precision;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgTimestampString<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgTimestampString<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgTimestampString<T extends ColumnBaseConfig<'string', 'PgTimestampString'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgTimestampString';\n\n\treadonly withTimezone: boolean;\n\treadonly precision: number | undefined;\n\n\tconstructor(table: AnyPgTable<{ name: T['tableName'] }>, config: PgTimestampStringBuilder<T>['config']) {\n\t\tsuper(table, config);\n\t\tthis.withTimezone = config.withTimezone;\n\t\tthis.precision = config.precision;\n\t}\n\n\tgetSQLType(): string {\n\t\tconst precision = this.precision === undefined ? '' : `(${this.precision})`;\n\t\treturn `timestamp${precision}${this.withTimezone ? ' with time zone' : ''}`;\n\t}\n\n\toverride mapFromDriverValue(value: Date | string): string {\n\t\tif (typeof value === 'string') return value;\n\n\t\tconst shortened = value.toISOString().slice(0, -1).replace('T', ' ');\n\t\tif (this.withTimezone) {\n\t\t\tconst offset = value.getTimezoneOffset();\n\t\t\tconst sign = offset <= 0 ? '+' : '-';\n\t\t\treturn `${shortened}${sign}${Math.floor(Math.abs(offset) / 60).toString().padStart(2, '0')}`;\n\t\t}\n\n\t\treturn shortened;\n\t}\n}\n\nexport type Precision = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\nexport interface PgTimestampConfig<TMode extends 'date' | 'string' = 'date' | 'string'> {\n\tmode?: TMode;\n\tprecision?: Precision;\n\twithTimezone?: boolean;\n}\n\nexport function timestamp(): PgTimestampBuilderInitial<''>;\nexport function timestamp<TMode extends PgTimestampConfig['mode'] & {}>(\n\tconfig?: PgTimestampConfig<TMode>,\n): Equal<TMode, 'string'> extends true ? PgTimestampStringBuilderInitial<''> : PgTimestampBuilderInitial<''>;\nexport function timestamp<TName extends string, TMode extends PgTimestampConfig['mode'] & {}>(\n\tname: TName,\n\tconfig?: PgTimestampConfig<TMode>,\n): Equal<TMode, 'string'> extends true ? PgTimestampStringBuilderInitial<TName> : PgTimestampBuilderInitial<TName>;\nexport function timestamp(a?: string | PgTimestampConfig, b: PgTimestampConfig = {}) {\n\tconst { name, config } = getColumnNameAndConfig<PgTimestampConfig | undefined>(a, b);\n\tif (config?.mode === 'string') {\n\t\treturn new PgTimestampStringBuilder(name, config.withTimezone ?? false, config.precision);\n\t}\n\treturn new PgTimestampBuilder(name, config?.withTimezone ?? false, config?.precision);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { sql } from '~/sql/sql.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgUUIDBuilderInitial<TName extends string> = PgUUIDBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgUUID';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgUUIDBuilder<T extends ColumnBuilderBaseConfig<'string', 'PgUUID'>> extends PgColumnBuilder<T> {\n\tstatic override readonly [entityKind]: string = 'PgUUIDBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'string', 'PgUUID');\n\t}\n\n\t/**\n\t * Adds `default gen_random_uuid()` to the column definition.\n\t */\n\tdefaultRandom(): ReturnType<this['default']> {\n\t\treturn this.default(sql`gen_random_uuid()`) as ReturnType<this['default']>;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgUUID<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgUUID<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class PgUUID<T extends ColumnBaseConfig<'string', 'PgUUID'>> extends PgColumn<T> {\n\tstatic override readonly [entityKind]: string = 'PgUUID';\n\n\tgetSQLType(): string {\n\t\treturn 'uuid';\n\t}\n}\n\nexport function uuid(): PgUUIDBuilderInitial<''>;\nexport function uuid<TName extends string>(name: TName): PgUUIDBuilderInitial<TName>;\nexport function uuid(name?: string) {\n\treturn new PgUUIDBuilder(name ?? '');\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig, type Writable } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type PgVarcharBuilderInitial<\n\tTName extends string,\n\tTEnum extends [string, ...string[]],\n\tTLength extends number | undefined,\n> = PgVarcharBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgVarchar';\n\tdata: TEnum[number];\n\tdriverParam: string;\n\tenumValues: TEnum;\n\tlength: TLength;\n}>;\n\nexport class PgVarcharBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'PgVarchar'> & { length?: number | undefined },\n> extends PgColumnBuilder<\n\tT,\n\t{ length: T['length']; enumValues: T['enumValues'] },\n\t{ length: T['length'] }\n> {\n\tstatic override readonly [entityKind]: string = 'PgVarcharBuilder';\n\n\tconstructor(name: T['name'], config: PgVarcharConfig<T['enumValues'], T['length']>) {\n\t\tsuper(name, 'string', 'PgVarchar');\n\t\tthis.config.length = config.length;\n\t\tthis.config.enumValues = config.enum;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgVarchar<MakeColumnConfig<T, TTableName> & { length: T['length'] }> {\n\t\treturn new PgVarchar<MakeColumnConfig<T, TTableName> & { length: T['length'] }>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgVarchar<T extends ColumnBaseConfig<'string', 'PgVarchar'> & { length?: number | undefined }>\n\textends PgColumn<T, { length: T['length']; enumValues: T['enumValues'] }, { length: T['length'] }>\n{\n\tstatic override readonly [entityKind]: string = 'PgVarchar';\n\n\treadonly length = this.config.length;\n\toverride readonly enumValues = this.config.enumValues;\n\n\tgetSQLType(): string {\n\t\treturn this.length === undefined ? `varchar` : `varchar(${this.length})`;\n\t}\n}\n\nexport interface PgVarcharConfig<\n\tTEnum extends readonly string[] | string[] | undefined = readonly string[] | string[] | undefined,\n\tTLength extends number | undefined = number | undefined,\n> {\n\tenum?: TEnum;\n\tlength?: TLength;\n}\n\nexport function varchar(): PgVarcharBuilderInitial<'', [string, ...string[]], undefined>;\nexport function varchar<\n\tU extends string,\n\tT extends Readonly<[U, ...U[]]>,\n\tL extends number | undefined,\n>(\n\tconfig?: PgVarcharConfig<T | Writable<T>, L>,\n): PgVarcharBuilderInitial<'', Writable<T>, L>;\nexport function varchar<\n\tTName extends string,\n\tU extends string,\n\tT extends Readonly<[U, ...U[]]>,\n\tL extends number | undefined,\n>(\n\tname: TName,\n\tconfig?: PgVarcharConfig<T | Writable<T>, L>,\n): PgVarcharBuilderInitial<TName, Writable<T>, L>;\nexport function varchar(a?: string | PgVarcharConfig, b: PgVarcharConfig = {}): any {\n\tconst { name, config } = getColumnNameAndConfig<PgVarcharConfig>(a, b);\n\treturn new PgVarcharBuilder(name, config as any);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from '../common.ts';\n\nexport type PgBinaryVectorBuilderInitial<TName extends string, TDimensions extends number> = PgBinaryVectorBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgBinaryVector';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n\tdimensions: TDimensions;\n}>;\n\nexport class PgBinaryVectorBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'PgBinaryVector'> & { dimensions: number },\n> extends PgColumnBuilder<\n\tT,\n\t{ dimensions: T['dimensions'] }\n> {\n\tstatic override readonly [entityKind]: string = 'PgBinaryVectorBuilder';\n\n\tconstructor(name: string, config: PgBinaryVectorConfig<T['dimensions']>) {\n\t\tsuper(name, 'string', 'PgBinaryVector');\n\t\tthis.config.dimensions = config.dimensions;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgBinaryVector<MakeColumnConfig<T, TTableName> & { dimensions: T['dimensions'] }> {\n\t\treturn new PgBinaryVector<MakeColumnConfig<T, TTableName> & { dimensions: T['dimensions'] }>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgBinaryVector<T extends ColumnBaseConfig<'string', 'PgBinaryVector'> & { dimensions: number }>\n\textends PgColumn<T, { dimensions: T['dimensions'] }, { dimensions: T['dimensions'] }>\n{\n\tstatic override readonly [entityKind]: string = 'PgBinaryVector';\n\n\treadonly dimensions = this.config.dimensions;\n\n\tgetSQLType(): string {\n\t\treturn `bit(${this.dimensions})`;\n\t}\n}\n\nexport interface PgBinaryVectorConfig<TDimensions extends number = number> {\n\tdimensions: TDimensions;\n}\n\nexport function bit<D extends number>(\n\tconfig: PgBinaryVectorConfig<D>,\n): PgBinaryVectorBuilderInitial<'', D>;\nexport function bit<TName extends string, D extends number>(\n\tname: TName,\n\tconfig: PgBinaryVectorConfig<D>,\n): PgBinaryVectorBuilderInitial<TName, D>;\nexport function bit(a: string | PgBinaryVectorConfig, b?: PgBinaryVectorConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgBinaryVectorConfig>(a, b);\n\treturn new PgBinaryVectorBuilder(name, config);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from '../common.ts';\n\nexport type PgHalfVectorBuilderInitial<TName extends string, TDimensions extends number> = PgHalfVectorBuilder<{\n\tname: TName;\n\tdataType: 'array';\n\tcolumnType: 'PgHalfVector';\n\tdata: number[];\n\tdriverParam: string;\n\tenumValues: undefined;\n\tdimensions: TDimensions;\n}>;\n\nexport class PgHalfVectorBuilder<T extends ColumnBuilderBaseConfig<'array', 'PgHalfVector'> & { dimensions: number }>\n\textends PgColumnBuilder<\n\t\tT,\n\t\t{ dimensions: T['dimensions'] },\n\t\t{ dimensions: T['dimensions'] }\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'PgHalfVectorBuilder';\n\n\tconstructor(name: string, config: PgHalfVectorConfig<T['dimensions']>) {\n\t\tsuper(name, 'array', 'PgHalfVector');\n\t\tthis.config.dimensions = config.dimensions;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgHalfVector<MakeColumnConfig<T, TTableName> & { dimensions: T['dimensions'] }> {\n\t\treturn new PgHalfVector<MakeColumnConfig<T, TTableName> & { dimensions: T['dimensions'] }>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgHalfVector<T extends ColumnBaseConfig<'array', 'PgHalfVector'> & { dimensions: number }>\n\textends PgColumn<T, { dimensions: T['dimensions'] }, { dimensions: T['dimensions'] }>\n{\n\tstatic override readonly [entityKind]: string = 'PgHalfVector';\n\n\treadonly dimensions: T['dimensions'] = this.config.dimensions;\n\n\tgetSQLType(): string {\n\t\treturn `halfvec(${this.dimensions})`;\n\t}\n\n\toverride mapToDriverValue(value: unknown): unknown {\n\t\treturn JSON.stringify(value);\n\t}\n\n\toverride mapFromDriverValue(value: string): unknown {\n\t\treturn value\n\t\t\t.slice(1, -1)\n\t\t\t.split(',')\n\t\t\t.map((v) => Number.parseFloat(v));\n\t}\n}\n\nexport interface PgHalfVectorConfig<TDimensions extends number = number> {\n\tdimensions: TDimensions;\n}\n\nexport function halfvec<D extends number>(\n\tconfig: PgHalfVectorConfig<D>,\n): PgHalfVectorBuilderInitial<'', D>;\nexport function halfvec<TName extends string, D extends number>(\n\tname: TName,\n\tconfig: PgHalfVectorConfig,\n): PgHalfVectorBuilderInitial<TName, D>;\nexport function halfvec(a: string | PgHalfVectorConfig, b?: PgHalfVectorConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgHalfVectorConfig>(a, b);\n\treturn new PgHalfVectorBuilder(name, config);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from '../common.ts';\n\nexport type PgSparseVectorBuilderInitial<TName extends string> = PgSparseVectorBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgSparseVector';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class PgSparseVectorBuilder<T extends ColumnBuilderBaseConfig<'string', 'PgSparseVector'>>\n\textends PgColumnBuilder<\n\t\tT,\n\t\t{ dimensions: number | undefined }\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'PgSparseVectorBuilder';\n\n\tconstructor(name: string, config: PgSparseVectorConfig) {\n\t\tsuper(name, 'string', 'PgSparseVector');\n\t\tthis.config.dimensions = config.dimensions;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgSparseVector<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgSparseVector<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgSparseVector<T extends ColumnBaseConfig<'string', 'PgSparseVector'>>\n\textends PgColumn<T, { dimensions: number | undefined }>\n{\n\tstatic override readonly [entityKind]: string = 'PgSparseVector';\n\n\treadonly dimensions = this.config.dimensions;\n\n\tgetSQLType(): string {\n\t\treturn `sparsevec(${this.dimensions})`;\n\t}\n}\n\nexport interface PgSparseVectorConfig {\n\tdimensions: number;\n}\n\nexport function sparsevec(\n\tconfig: PgSparseVectorConfig,\n): PgSparseVectorBuilderInitial<''>;\nexport function sparsevec<TName extends string>(\n\tname: TName,\n\tconfig: PgSparseVectorConfig,\n): PgSparseVectorBuilderInitial<TName>;\nexport function sparsevec(a: string | PgSparseVectorConfig, b?: PgSparseVectorConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgSparseVectorConfig>(a, b);\n\treturn new PgSparseVectorBuilder(name, config);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from '../common.ts';\n\nexport type PgVectorBuilderInitial<TName extends string, TDimensions extends number> = PgVectorBuilder<{\n\tname: TName;\n\tdataType: 'array';\n\tcolumnType: 'PgVector';\n\tdata: number[];\n\tdriverParam: string;\n\tenumValues: undefined;\n\tdimensions: TDimensions;\n}>;\n\nexport class PgVectorBuilder<T extends ColumnBuilderBaseConfig<'array', 'PgVector'> & { dimensions: number }>\n\textends PgColumnBuilder<\n\t\tT,\n\t\t{ dimensions: T['dimensions'] },\n\t\t{ dimensions: T['dimensions'] }\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'PgVectorBuilder';\n\n\tconstructor(name: string, config: PgVectorConfig<T['dimensions']>) {\n\t\tsuper(name, 'array', 'PgVector');\n\t\tthis.config.dimensions = config.dimensions;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgVector<MakeColumnConfig<T, TTableName> & { dimensions: T['dimensions'] }> {\n\t\treturn new PgVector<MakeColumnConfig<T, TTableName> & { dimensions: T['dimensions'] }>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgVector<T extends ColumnBaseConfig<'array', 'PgVector'> & { dimensions: number | undefined }>\n\textends PgColumn<T, { dimensions: T['dimensions'] }, { dimensions: T['dimensions'] }>\n{\n\tstatic override readonly [entityKind]: string = 'PgVector';\n\n\treadonly dimensions: T['dimensions'] = this.config.dimensions;\n\n\tgetSQLType(): string {\n\t\treturn `vector(${this.dimensions})`;\n\t}\n\n\toverride mapToDriverValue(value: unknown): unknown {\n\t\treturn JSON.stringify(value);\n\t}\n\n\toverride mapFromDriverValue(value: string): unknown {\n\t\treturn value\n\t\t\t.slice(1, -1)\n\t\t\t.split(',')\n\t\t\t.map((v) => Number.parseFloat(v));\n\t}\n}\n\nexport interface PgVectorConfig<TDimensions extends number = number> {\n\tdimensions: TDimensions;\n}\n\nexport function vector<D extends number>(\n\tconfig: PgVectorConfig<D>,\n): PgVectorBuilderInitial<'', D>;\nexport function vector<TName extends string, D extends number>(\n\tname: TName,\n\tconfig: PgVectorConfig<D>,\n): PgVectorBuilderInitial<TName, D>;\nexport function vector(a: string | PgVectorConfig, b?: PgVectorConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgVectorConfig>(a, b);\n\treturn new PgVectorBuilder(name, config);\n}\n", "import { bigint } from './bigint.ts';\nimport { bigserial } from './bigserial.ts';\nimport { boolean } from './boolean.ts';\nimport { char } from './char.ts';\nimport { cidr } from './cidr.ts';\nimport { customType } from './custom.ts';\nimport { date } from './date.ts';\nimport { doublePrecision } from './double-precision.ts';\nimport { inet } from './inet.ts';\nimport { integer } from './integer.ts';\nimport { interval } from './interval.ts';\nimport { json } from './json.ts';\nimport { jsonb } from './jsonb.ts';\nimport { line } from './line.ts';\nimport { macaddr } from './macaddr.ts';\nimport { macaddr8 } from './macaddr8.ts';\nimport { numeric } from './numeric.ts';\nimport { point } from './point.ts';\nimport { geometry } from './postgis_extension/geometry.ts';\nimport { real } from './real.ts';\nimport { serial } from './serial.ts';\nimport { smallint } from './smallint.ts';\nimport { smallserial } from './smallserial.ts';\nimport { text } from './text.ts';\nimport { time } from './time.ts';\nimport { timestamp } from './timestamp.ts';\nimport { uuid } from './uuid.ts';\nimport { varchar } from './varchar.ts';\nimport { bit } from './vector_extension/bit.ts';\nimport { halfvec } from './vector_extension/halfvec.ts';\nimport { sparsevec } from './vector_extension/sparsevec.ts';\nimport { vector } from './vector_extension/vector.ts';\n\nexport function getPgColumnBuilders() {\n\treturn {\n\t\tbigint,\n\t\tbigserial,\n\t\tboolean,\n\t\tchar,\n\t\tcidr,\n\t\tcustomType,\n\t\tdate,\n\t\tdoublePrecision,\n\t\tinet,\n\t\tinteger,\n\t\tinterval,\n\t\tjson,\n\t\tjsonb,\n\t\tline,\n\t\tmacaddr,\n\t\tmacaddr8,\n\t\tnumeric,\n\t\tpoint,\n\t\tgeometry,\n\t\treal,\n\t\tserial,\n\t\tsmallint,\n\t\tsmallserial,\n\t\ttext,\n\t\ttime,\n\t\ttimestamp,\n\t\tuuid,\n\t\tvarchar,\n\t\tbit,\n\t\thalfvec,\n\t\tsparsevec,\n\t\tvector,\n\t};\n}\n\nexport type PgColumnsBuilders = ReturnType<typeof getPgColumnBuilders>;\n", "import type { BuildColumns, BuildExtraConfigColumns } from '~/column-builder.ts';\nimport { entityKind } from '~/entity.ts';\nimport { Table, type TableConfig as TableConfigBase, type UpdateTableConfig } from '~/table.ts';\nimport type { CheckBuilder } from './checks.ts';\nimport { getPgColumnBuilders, type PgColumnsBuilders } from './columns/all.ts';\nimport type { ExtraConfigColumn, PgColumn, PgColumnBuilder, PgColumnBuilderBase } from './columns/common.ts';\nimport type { ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { AnyIndexBuilder } from './indexes.ts';\nimport type { PgPolicy } from './policies.ts';\nimport type { PrimaryKeyBuilder } from './primary-keys.ts';\nimport type { UniqueConstraintBuilder } from './unique-constraint.ts';\n\nexport type PgTableExtraConfigValue =\n\t| AnyIndexBuilder\n\t| CheckBuilder\n\t| ForeignKeyBuilder\n\t| PrimaryKeyBuilder\n\t| UniqueConstraintBuilder\n\t| PgPolicy;\n\nexport type PgTableExtraConfig = Record<\n\tstring,\n\tPgTableExtraConfigValue\n>;\n\nexport type TableConfig = TableConfigBase<PgColumn>;\n\n/** @internal */\nexport const InlineForeignKeys = Symbol.for('drizzle:PgInlineForeignKeys');\n/** @internal */\nexport const EnableRLS = Symbol.for('drizzle:EnableRLS');\n\nexport class PgTable<T extends TableConfig = TableConfig> extends Table<T> {\n\tstatic override readonly [entityKind]: string = 'PgTable';\n\n\t/** @internal */\n\tstatic override readonly Symbol = Object.assign({}, Table.Symbol, {\n\t\tInlineForeignKeys: InlineForeignKeys as typeof InlineForeignKeys,\n\t\tEnableRLS: EnableRLS as typeof EnableRLS,\n\t});\n\n\t/**@internal */\n\t[InlineForeignKeys]: ForeignKey[] = [];\n\n\t/** @internal */\n\t[EnableRLS]: boolean = false;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigBuilder]: ((self: Record<string, PgColumn>) => PgTableExtraConfig) | undefined =\n\t\tundefined;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigColumns]: Record<string, ExtraConfigColumn> = {};\n}\n\nexport type AnyPgTable<TPartial extends Partial<TableConfig> = {}> = PgTable<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport type PgTableWithColumns<T extends TableConfig> =\n\t& PgTable<T>\n\t& {\n\t\t[Key in keyof T['columns']]: T['columns'][Key];\n\t}\n\t& {\n\t\tenableRLS: () => Omit<\n\t\t\tPgTableWithColumns<T>,\n\t\t\t'enableRLS'\n\t\t>;\n\t};\n\n/** @internal */\nexport function pgTableWithSchema<\n\tTTableName extends string,\n\tTSchemaName extends string | undefined,\n\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n>(\n\tname: TTableName,\n\tcolumns: TColumnsMap | ((columnTypes: PgColumnsBuilders) => TColumnsMap),\n\textraConfig:\n\t\t| ((self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfig | PgTableExtraConfigValue[])\n\t\t| undefined,\n\tschema: TSchemaName,\n\tbaseName = name,\n): PgTableWithColumns<{\n\tname: TTableName;\n\tschema: TSchemaName;\n\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\tdialect: 'pg';\n}> {\n\tconst rawTable = new PgTable<{\n\t\tname: TTableName;\n\t\tschema: TSchemaName;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>(name, schema, baseName);\n\n\tconst parsedColumns: TColumnsMap = typeof columns === 'function' ? columns(getPgColumnBuilders()) : columns;\n\n\tconst builtColumns = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.build(rawTable);\n\t\t\trawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\n\tconst builtColumnsForExtraConfig = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.buildExtraConfigColumn(rawTable);\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>;\n\n\tconst table = Object.assign(rawTable, builtColumns);\n\n\ttable[Table.Symbol.Columns] = builtColumns;\n\ttable[Table.Symbol.ExtraConfigColumns] = builtColumnsForExtraConfig;\n\n\tif (extraConfig) {\n\t\ttable[PgTable.Symbol.ExtraConfigBuilder] = extraConfig as any;\n\t}\n\n\treturn Object.assign(table, {\n\t\tenableRLS: () => {\n\t\t\ttable[PgTable.Symbol.EnableRLS] = true;\n\t\t\treturn table as PgTableWithColumns<{\n\t\t\t\tname: TTableName;\n\t\t\t\tschema: TSchemaName;\n\t\t\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\t\t\tdialect: 'pg';\n\t\t\t}>;\n\t\t},\n\t});\n}\n\nexport interface PgTableFn<TSchema extends string | undefined = undefined> {\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (\n\t\t\tself: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>,\n\t\t) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig?: (self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig: (\n\t\t\tself: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>,\n\t\t) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig: (self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n}\n\nexport const pgTable: PgTableFn = (name, columns, extraConfig) => {\n\treturn pgTableWithSchema(name, columns, extraConfig, undefined);\n};\n\nexport function pgTableCreator(customizeTableName: (name: string) => string): PgTableFn {\n\treturn (name, columns, extraConfig) => {\n\t\treturn pgTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t};\n}\n", "import { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/index.ts';\nimport type { PgTable } from './table.ts';\n\nexport class CheckBuilder {\n\tstatic readonly [entityKind]: string = 'PgCheckBuilder';\n\n\tprotected brand!: 'PgConstraintBuilder';\n\n\tconstructor(public name: string, public value: SQL) {}\n\n\t/** @internal */\n\tbuild(table: PgTable): Check {\n\t\treturn new Check(table, this);\n\t}\n}\n\nexport class Check {\n\tstatic readonly [entityKind]: string = 'PgCheck';\n\n\treadonly name: string;\n\treadonly value: SQL;\n\n\tconstructor(public table: PgTable, builder: CheckBuilder) {\n\t\tthis.name = builder.name;\n\t\tthis.value = builder.value;\n\t}\n}\n\nexport function check(name: string, value: SQL): CheckBuilder {\n\treturn new CheckBuilder(name, value);\n}\n", "export * from './bigint.ts';\nexport * from './bigserial.ts';\nexport * from './boolean.ts';\nexport * from './char.ts';\nexport * from './cidr.ts';\nexport * from './common.ts';\nexport * from './custom.ts';\nexport * from './date.ts';\nexport * from './double-precision.ts';\nexport * from './enum.ts';\nexport * from './inet.ts';\nexport * from './int.common.ts';\nexport * from './integer.ts';\nexport * from './interval.ts';\nexport * from './json.ts';\nexport * from './jsonb.ts';\nexport * from './line.ts';\nexport * from './macaddr.ts';\nexport * from './macaddr8.ts';\nexport * from './numeric.ts';\nexport * from './point.ts';\nexport * from './postgis_extension/geometry.ts';\nexport * from './real.ts';\nexport * from './serial.ts';\nexport * from './smallint.ts';\nexport * from './smallserial.ts';\nexport * from './text.ts';\nexport * from './time.ts';\nexport * from './timestamp.ts';\nexport * from './uuid.ts';\nexport * from './varchar.ts';\nexport * from './vector_extension/bit.ts';\nexport * from './vector_extension/halfvec.ts';\nexport * from './vector_extension/sparsevec.ts';\nexport * from './vector_extension/vector.ts';\n", "import { SQL } from '~/sql/sql.ts';\n\nimport { entityKind, is } from '~/entity.ts';\nimport type { ExtraConfigColumn, PgColumn } from './columns/index.ts';\nimport { IndexedColumn } from './columns/index.ts';\nimport type { PgTable } from './table.ts';\n\ninterface IndexConfig {\n\tname?: string;\n\n\tcolumns: Partial<IndexedColumn | SQL>[];\n\n\t/**\n\t * If true, the index will be created as `create unique index` instead of `create index`.\n\t */\n\tunique: boolean;\n\n\t/**\n\t * If true, the index will be created as `create index concurrently` instead of `create index`.\n\t */\n\tconcurrently?: boolean;\n\n\t/**\n\t * If true, the index will be created as `create index ... on only <table>` instead of `create index ... on <table>`.\n\t */\n\tonly: boolean;\n\n\t/**\n\t * Condition for partial index.\n\t */\n\twhere?: SQL;\n\n\t/**\n\t * The optional WITH clause specifies storage parameters for the index\n\t */\n\twith?: Record<string, any>;\n\n\t/**\n\t * The optional WITH clause method for the index\n\t */\n\tmethod?: 'btree' | string;\n}\n\nexport type IndexColumn = PgColumn;\n\nexport type PgIndexMethod = 'btree' | 'hash' | 'gist' | 'spgist' | 'gin' | 'brin' | 'hnsw' | 'ivfflat' | (string & {});\n\nexport type PgIndexOpClass =\n\t| 'abstime_ops'\n\t| 'access_method'\n\t| 'anyarray_eq'\n\t| 'anyarray_ge'\n\t| 'anyarray_gt'\n\t| 'anyarray_le'\n\t| 'anyarray_lt'\n\t| 'anyarray_ne'\n\t| 'bigint_ops'\n\t| 'bit_ops'\n\t| 'bool_ops'\n\t| 'box_ops'\n\t| 'bpchar_ops'\n\t| 'char_ops'\n\t| 'cidr_ops'\n\t| 'cstring_ops'\n\t| 'date_ops'\n\t| 'float_ops'\n\t| 'int2_ops'\n\t| 'int4_ops'\n\t| 'int8_ops'\n\t| 'interval_ops'\n\t| 'jsonb_ops'\n\t| 'macaddr_ops'\n\t| 'name_ops'\n\t| 'numeric_ops'\n\t| 'oid_ops'\n\t| 'oidint4_ops'\n\t| 'oidint8_ops'\n\t| 'oidname_ops'\n\t| 'oidvector_ops'\n\t| 'point_ops'\n\t| 'polygon_ops'\n\t| 'range_ops'\n\t| 'record_eq'\n\t| 'record_ge'\n\t| 'record_gt'\n\t| 'record_le'\n\t| 'record_lt'\n\t| 'record_ne'\n\t| 'text_ops'\n\t| 'time_ops'\n\t| 'timestamp_ops'\n\t| 'timestamptz_ops'\n\t| 'timetz_ops'\n\t| 'uuid_ops'\n\t| 'varbit_ops'\n\t| 'varchar_ops'\n\t// pg_vector types\n\t| 'xml_ops'\n\t| 'vector_l2_ops'\n\t| 'vector_ip_ops'\n\t| 'vector_cosine_ops'\n\t| 'vector_l1_ops'\n\t| 'bit_hamming_ops'\n\t| 'bit_jaccard_ops'\n\t| 'halfvec_l2_ops'\n\t| 'sparsevec_l2_op'\n\t| (string & {});\n\nexport class IndexBuilderOn {\n\tstatic readonly [entityKind]: string = 'PgIndexBuilderOn';\n\n\tconstructor(private unique: boolean, private name?: string) {}\n\n\ton(...columns: [Partial<ExtraConfigColumn> | SQL, ...Partial<ExtraConfigColumn | SQL>[]]): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\t\t\t\tit = it as ExtraConfigColumn;\n\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(it.name, !!it.keyAsName, it.columnType!, it.indexConfig!);\n\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\treturn clonedIndexedColumn;\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\tfalse,\n\t\t\tthis.name,\n\t\t);\n\t}\n\n\tonOnly(...columns: [Partial<ExtraConfigColumn | SQL>, ...Partial<ExtraConfigColumn | SQL>[]]): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\t\t\t\tit = it as ExtraConfigColumn;\n\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(it.name, !!it.keyAsName, it.columnType!, it.indexConfig!);\n\t\t\t\tit.indexConfig = it.defaultConfig;\n\t\t\t\treturn clonedIndexedColumn;\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\ttrue,\n\t\t\tthis.name,\n\t\t);\n\t}\n\n\t/**\n\t * Specify what index method to use. Choices are `btree`, `hash`, `gist`, `spgist`, `gin`, `brin`, or user-installed access methods like `bloom`. The default method is `btree.\n\t *\n\t * If you have the `pg_vector` extension installed in your database, you can use the `hnsw` and `ivfflat` options, which are predefined types.\n\t *\n\t * **You can always specify any string you want in the method, in case Drizzle doesn't have it natively in its types**\n\t *\n\t * @param method The name of the index method to be used\n\t * @param columns\n\t * @returns\n\t */\n\tusing(\n\t\tmethod: PgIndexMethod,\n\t\t...columns: [Partial<ExtraConfigColumn | SQL>, ...Partial<ExtraConfigColumn | SQL>[]]\n\t): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\t\t\t\tit = it as ExtraConfigColumn;\n\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(it.name, !!it.keyAsName, it.columnType!, it.indexConfig!);\n\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\treturn clonedIndexedColumn;\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\ttrue,\n\t\t\tthis.name,\n\t\t\tmethod,\n\t\t);\n\t}\n}\n\nexport interface AnyIndexBuilder {\n\tbuild(table: PgTable): Index;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IndexBuilder extends AnyIndexBuilder {}\n\nexport class IndexBuilder implements AnyIndexBuilder {\n\tstatic readonly [entityKind]: string = 'PgIndexBuilder';\n\n\t/** @internal */\n\tconfig: IndexConfig;\n\n\tconstructor(\n\t\tcolumns: Partial<IndexedColumn | SQL>[],\n\t\tunique: boolean,\n\t\tonly: boolean,\n\t\tname?: string,\n\t\tmethod: string = 'btree',\n\t) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tcolumns,\n\t\t\tunique,\n\t\t\tonly,\n\t\t\tmethod,\n\t\t};\n\t}\n\n\tconcurrently(): this {\n\t\tthis.config.concurrently = true;\n\t\treturn this;\n\t}\n\n\twith(obj: Record<string, any>): this {\n\t\tthis.config.with = obj;\n\t\treturn this;\n\t}\n\n\twhere(condition: SQL): this {\n\t\tthis.config.where = condition;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: PgTable): Index {\n\t\treturn new Index(this.config, table);\n\t}\n}\n\nexport class Index {\n\tstatic readonly [entityKind]: string = 'PgIndex';\n\n\treadonly config: IndexConfig & { table: PgTable };\n\n\tconstructor(config: IndexConfig, table: PgTable) {\n\t\tthis.config = { ...config, table };\n\t}\n}\n\nexport type GetColumnsTableName<TColumns> = TColumns extends PgColumn ? TColumns['_']['name']\n\t: TColumns extends PgColumn[] ? TColumns[number]['_']['name']\n\t: never;\n\nexport function index(name?: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(false, name);\n}\n\nexport function uniqueIndex(name?: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(true, name);\n}\n", "import { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport type { PgRole } from './roles.ts';\nimport type { PgTable } from './table.ts';\n\nexport type PgPolicyToOption =\n\t| 'public'\n\t| 'current_role'\n\t| 'current_user'\n\t| 'session_user'\n\t| (string & {})\n\t| PgPolicyToOption[]\n\t| PgRole;\n\nexport interface PgPolicyConfig {\n\tas?: 'permissive' | 'restrictive';\n\tfor?: 'all' | 'select' | 'insert' | 'update' | 'delete';\n\tto?: PgPolicyToOption;\n\tusing?: SQL;\n\twithCheck?: SQL;\n}\n\nexport class PgPolicy implements PgPolicyConfig {\n\tstatic readonly [entityKind]: string = 'PgPolicy';\n\n\treadonly as: PgPolicyConfig['as'];\n\treadonly for: PgPolicyConfig['for'];\n\treadonly to: PgPolicyConfig['to'];\n\treadonly using: PgPolicyConfig['using'];\n\treadonly withCheck: PgPolicyConfig['withCheck'];\n\n\t/** @internal */\n\t_linkedTable?: PgTable;\n\n\tconstructor(\n\t\treadonly name: string,\n\t\tconfig?: PgPolicyConfig,\n\t) {\n\t\tif (config) {\n\t\t\tthis.as = config.as;\n\t\t\tthis.for = config.for;\n\t\t\tthis.to = config.to;\n\t\t\tthis.using = config.using;\n\t\t\tthis.withCheck = config.withCheck;\n\t\t}\n\t}\n\n\tlink(table: PgTable): this {\n\t\tthis._linkedTable = table;\n\t\treturn this;\n\t}\n}\n\nexport function pgPolicy(name: string, config?: PgPolicyConfig) {\n\treturn new PgPolicy(name, config);\n}\n", "import { entityKind } from '~/entity.ts';\nimport type { AnyPgColumn, PgColumn } from './columns/index.ts';\nimport { PgTable } from './table.ts';\n\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumn extends AnyPgColumn<{ tableName: TTableName }>,\n\tTColumns extends AnyPgColumn<{ tableName: TTableName }>[],\n>(config: { name?: string; columns: [TColumn, ...TColumns] }): PrimaryKeyBuilder;\n/**\n * @deprecated: Please use primaryKey({ columns: [] }) instead of this function\n * @param columns\n */\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumns extends AnyPgColumn<{ tableName: TTableName }>[],\n>(...columns: TColumns): PrimaryKeyBuilder;\nexport function primaryKey(...config: any) {\n\tif (config[0].columns) {\n\t\treturn new PrimaryKeyBuilder(config[0].columns, config[0].name);\n\t}\n\treturn new PrimaryKeyBuilder(config);\n}\n\nexport class PrimaryKeyBuilder {\n\tstatic readonly [entityKind]: string = 'PgPrimaryKeyBuilder';\n\n\t/** @internal */\n\tcolumns: PgColumn[];\n\n\t/** @internal */\n\tname?: string;\n\n\tconstructor(\n\t\tcolumns: PgColumn[],\n\t\tname?: string,\n\t) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\t/** @internal */\n\tbuild(table: PgTable): PrimaryKey {\n\t\treturn new PrimaryKey(table, this.columns, this.name);\n\t}\n}\n\nexport class PrimaryKey {\n\tstatic readonly [entityKind]: string = 'PgPrimaryKey';\n\n\treadonly columns: AnyPgColumn<{}>[];\n\treadonly name?: string;\n\n\tconstructor(readonly table: PgTable, columns: AnyPgColumn<{}>[], name?: string) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\tgetName(): string {\n\t\treturn this.name ?? `${this.table[PgTable.Symbol.Name]}_${this.columns.map((column) => column.name).join('_')}_pk`;\n\t}\n}\n", "export const PgViewConfig = Symbol.for('drizzle:PgViewConfig');\n", "import type { Column } from '~/column.ts';\nimport { entityKind } from './entity.ts';\nimport { Table } from './table.ts';\nimport type { Casing } from './utils.ts';\n\nexport function toSnakeCase(input: string) {\n\tconst words = input\n\t\t.replace(/['\\u2019]/g, '')\n\t\t.match(/[\\da-z]+|[A-Z]+(?![a-z])|[A-Z][\\da-z]+/g) ?? [];\n\n\treturn words.map((word) => word.toLowerCase()).join('_');\n}\n\nexport function toCamelCase(input: string) {\n\tconst words = input\n\t\t.replace(/['\\u2019]/g, '')\n\t\t.match(/[\\da-z]+|[A-Z]+(?![a-z])|[A-Z][\\da-z]+/g) ?? [];\n\n\treturn words.reduce((acc, word, i) => {\n\t\tconst formattedWord = i === 0 ? word.toLowerCase() : `${word[0]!.toUpperCase()}${word.slice(1)}`;\n\t\treturn acc + formattedWord;\n\t}, '');\n}\n\nfunction noopCase(input: string) {\n\treturn input;\n}\n\nexport class CasingCache {\n\tstatic readonly [entityKind]: string = 'CasingCache';\n\n\t/** @internal */\n\tcache: Record<string, string> = {};\n\tprivate cachedTables: Record<string, true> = {};\n\tprivate convert: (input: string) => string;\n\n\tconstructor(casing?: Casing) {\n\t\tthis.convert = casing === 'snake_case'\n\t\t\t? toSnakeCase\n\t\t\t: casing === 'camelCase'\n\t\t\t? toCamelCase\n\t\t\t: noopCase;\n\t}\n\n\tgetColumnCasing(column: Column): string {\n\t\tif (!column.keyAsName) return column.name;\n\n\t\tconst schema = column.table[Table.Symbol.Schema] ?? 'public';\n\t\tconst tableName = column.table[Table.Symbol.OriginalName];\n\t\tconst key = `${schema}.${tableName}.${column.name}`;\n\n\t\tif (!this.cache[key]) {\n\t\t\tthis.cacheTable(column.table);\n\t\t}\n\t\treturn this.cache[key]!;\n\t}\n\n\tprivate cacheTable(table: Table) {\n\t\tconst schema = table[Table.Symbol.Schema] ?? 'public';\n\t\tconst tableName = table[Table.Symbol.OriginalName];\n\t\tconst tableKey = `${schema}.${tableName}`;\n\n\t\tif (!this.cachedTables[tableKey]) {\n\t\t\tfor (const column of Object.values(table[Table.Symbol.Columns])) {\n\t\t\t\tconst columnKey = `${tableKey}.${column.name}`;\n\t\t\t\tthis.cache[columnKey] = this.convert(column.name);\n\t\t\t}\n\t\t\tthis.cachedTables[tableKey] = true;\n\t\t}\n\t}\n\n\tclearCache() {\n\t\tthis.cache = {};\n\t\tthis.cachedTables = {};\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\n\nexport class DrizzleError extends Error {\n\tstatic readonly [entityKind]: string = 'DrizzleError';\n\n\tconstructor({ message, cause }: { message?: string; cause?: unknown }) {\n\t\tsuper(message);\n\t\tthis.name = 'DrizzleError';\n\t\tthis.cause = cause;\n\t}\n}\n\nexport class DrizzleQueryError extends Error {\n\tconstructor(\n\t\tpublic query: string,\n\t\tpublic params: any[],\n\t\tpublic override cause?: Error,\n\t) {\n\t\tsuper(`Failed query: ${query}\\nparams: ${params}`);\n\t\tError.captureStackTrace(this, DrizzleQueryError);\n\n\t\t// ES2022+: preserves original error on `.cause`\n\t\tif (cause) (this as any).cause = cause;\n\t}\n}\n\nexport class TransactionRollbackError extends DrizzleError {\n\tstatic override readonly [entityKind]: string = 'TransactionRollbackError';\n\n\tconstructor() {\n\t\tsuper({ message: 'Rollback' });\n\t}\n}\n", "import { type AnyColumn, Column, type GetColumnData } from '~/column.ts';\nimport { is } from '~/entity.ts';\nimport { Table } from '~/table.ts';\nimport {\n\tisDriverValueEncoder,\n\tisSQLWrapper,\n\tParam,\n\tPlaceholder,\n\tSQL,\n\tsql,\n\ttype SQLChunk,\n\ttype SQLWrapper,\n\tStringChunk,\n\tView,\n} from '../sql.ts';\n\nexport function bindIfParam(value: unknown, column: SQLWrapper): SQLChunk {\n\tif (\n\t\tisDriverValueEncoder(column)\n\t\t&& !isSQLWrapper(value)\n\t\t&& !is(value, Param)\n\t\t&& !is(value, Placeholder)\n\t\t&& !is(value, Column)\n\t\t&& !is(value, Table)\n\t\t&& !is(value, View)\n\t) {\n\t\treturn new Param(value, column);\n\t}\n\treturn value as SQLChunk;\n}\n\nexport interface BinaryOperator {\n\t<TColumn extends Column>(\n\t\tleft: TColumn,\n\t\tright: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n\t): SQL;\n\t<T>(left: SQL.Aliased<T>, right: T | SQLWrapper): SQL;\n\t<T extends SQLWrapper>(\n\t\tleft: Exclude<T, SQL.Aliased | Column>,\n\t\tright: unknown,\n\t): SQL;\n}\n\n/**\n * Test that two values are equal.\n *\n * Remember that the SQL standard dictates that\n * two NULL values are not equal, so if you want to test\n * whether a value is null, you may want to use\n * `isNull` instead.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made by Ford\n * db.select().from(cars)\n *   .where(eq(cars.make, 'Ford'))\n * ```\n *\n * @see isNull for a way to test equality to NULL.\n */\nexport const eq: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} = ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that two values are not equal.\n *\n * Remember that the SQL standard dictates that\n * two NULL values are not equal, so if you want to test\n * whether a value is not null, you may want to use\n * `isNotNull` instead.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars not made by Ford\n * db.select().from(cars)\n *   .where(ne(cars.make, 'Ford'))\n * ```\n *\n * @see isNotNull for a way to test whether a value is not null.\n */\nexport const ne: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} <> ${bindIfParam(right, left)}`;\n};\n\n/**\n * Combine a list of conditions with the `and` operator. Conditions\n * that are equal `undefined` are automatically ignored.\n *\n * ## Examples\n *\n * ```ts\n * db.select().from(cars)\n *   .where(\n *     and(\n *       eq(cars.make, 'Volvo'),\n *       eq(cars.year, 1950),\n *     )\n *   )\n * ```\n */\nexport function and(...conditions: (SQLWrapper | undefined)[]): SQL | undefined;\nexport function and(\n\t...unfilteredConditions: (SQLWrapper | undefined)[]\n): SQL | undefined {\n\tconst conditions = unfilteredConditions.filter(\n\t\t(c): c is Exclude<typeof c, undefined> => c !== undefined,\n\t);\n\n\tif (conditions.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (conditions.length === 1) {\n\t\treturn new SQL(conditions);\n\t}\n\n\treturn new SQL([\n\t\tnew StringChunk('('),\n\t\tsql.join(conditions, new StringChunk(' and ')),\n\t\tnew StringChunk(')'),\n\t]);\n}\n\n/**\n * Combine a list of conditions with the `or` operator. Conditions\n * that are equal `undefined` are automatically ignored.\n *\n * ## Examples\n *\n * ```ts\n * db.select().from(cars)\n *   .where(\n *     or(\n *       eq(cars.make, 'GM'),\n *       eq(cars.make, 'Ford'),\n *     )\n *   )\n * ```\n */\nexport function or(...conditions: (SQLWrapper | undefined)[]): SQL | undefined;\nexport function or(\n\t...unfilteredConditions: (SQLWrapper | undefined)[]\n): SQL | undefined {\n\tconst conditions = unfilteredConditions.filter(\n\t\t(c): c is Exclude<typeof c, undefined> => c !== undefined,\n\t);\n\n\tif (conditions.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (conditions.length === 1) {\n\t\treturn new SQL(conditions);\n\t}\n\n\treturn new SQL([\n\t\tnew StringChunk('('),\n\t\tsql.join(conditions, new StringChunk(' or ')),\n\t\tnew StringChunk(')'),\n\t]);\n}\n\n/**\n * Negate the meaning of an expression using the `not` keyword.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars _not_ made by GM or Ford.\n * db.select().from(cars)\n *   .where(not(inArray(cars.make, ['GM', 'Ford'])))\n * ```\n */\nexport function not(condition: SQLWrapper): SQL {\n\treturn sql`not ${condition}`;\n}\n\n/**\n * Test that the first expression passed is greater than\n * the second expression.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made after 2000.\n * db.select().from(cars)\n *   .where(gt(cars.year, 2000))\n * ```\n *\n * @see gte for greater-than-or-equal\n */\nexport const gt: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} > ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that the first expression passed is greater than\n * or equal to the second expression. Use `gt` to\n * test whether an expression is strictly greater\n * than another.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made on or after 2000.\n * db.select().from(cars)\n *   .where(gte(cars.year, 2000))\n * ```\n *\n * @see gt for a strictly greater-than condition\n */\nexport const gte: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} >= ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that the first expression passed is less than\n * the second expression.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made before 2000.\n * db.select().from(cars)\n *   .where(lt(cars.year, 2000))\n * ```\n *\n * @see lte for less-than-or-equal\n */\nexport const lt: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} < ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that the first expression passed is less than\n * or equal to the second expression.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made before 2000.\n * db.select().from(cars)\n *   .where(lte(cars.year, 2000))\n * ```\n *\n * @see lt for a strictly less-than condition\n */\nexport const lte: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} <= ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test whether the first parameter, a column or expression,\n * has a value from a list passed as the second argument.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made by Ford or GM.\n * db.select().from(cars)\n *   .where(inArray(cars.make, ['Ford', 'GM']))\n * ```\n *\n * @see notInArray for the inverse of this test\n */\nexport function inArray<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function inArray<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: ReadonlyArray<GetColumnData<TColumn, 'raw'> | Placeholder> | SQLWrapper,\n): SQL;\nexport function inArray<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: ReadonlyArray<unknown | Placeholder> | SQLWrapper,\n): SQL;\nexport function inArray(\n\tcolumn: SQLWrapper,\n\tvalues: ReadonlyArray<unknown | Placeholder> | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\treturn sql`false`;\n\t\t}\n\t\treturn sql`${column} in ${values.map((v) => bindIfParam(v, column))}`;\n\t}\n\n\treturn sql`${column} in ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test whether the first parameter, a column or expression,\n * has a value that is not present in a list passed as the\n * second argument.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made by any company except Ford or GM.\n * db.select().from(cars)\n *   .where(notInArray(cars.make, ['Ford', 'GM']))\n * ```\n *\n * @see inArray for the inverse of this test\n */\nexport function notInArray<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function notInArray<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function notInArray<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function notInArray(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\treturn sql`true`;\n\t\t}\n\t\treturn sql`${column} not in ${values.map((v) => bindIfParam(v, column))}`;\n\t}\n\n\treturn sql`${column} not in ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test whether an expression is NULL. By the SQL standard,\n * NULL is neither equal nor not equal to itself, so\n * it's recommended to use `isNull` and `notIsNull` for\n * comparisons to NULL.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars that have no discontinuedAt date.\n * db.select().from(cars)\n *   .where(isNull(cars.discontinuedAt))\n * ```\n *\n * @see isNotNull for the inverse of this test\n */\nexport function isNull(value: SQLWrapper): SQL {\n\treturn sql`${value} is null`;\n}\n\n/**\n * Test whether an expression is not NULL. By the SQL standard,\n * NULL is neither equal nor not equal to itself, so\n * it's recommended to use `isNull` and `notIsNull` for\n * comparisons to NULL.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars that have been discontinued.\n * db.select().from(cars)\n *   .where(isNotNull(cars.discontinuedAt))\n * ```\n *\n * @see isNull for the inverse of this test\n */\nexport function isNotNull(value: SQLWrapper): SQL {\n\treturn sql`${value} is not null`;\n}\n\n/**\n * Test whether a subquery evaluates to have any rows.\n *\n * ## Examples\n *\n * ```ts\n * // Users whose `homeCity` column has a match in a cities\n * // table.\n * db\n *   .select()\n *   .from(users)\n *   .where(\n *     exists(db.select()\n *       .from(cities)\n *       .where(eq(users.homeCity, cities.id))),\n *   );\n * ```\n *\n * @see notExists for the inverse of this test\n */\nexport function exists(subquery: SQLWrapper): SQL {\n\treturn sql`exists ${subquery}`;\n}\n\n/**\n * Test whether a subquery doesn't include any result\n * rows.\n *\n * ## Examples\n *\n * ```ts\n * // Users whose `homeCity` column doesn't match\n * // a row in the cities table.\n * db\n *   .select()\n *   .from(users)\n *   .where(\n *     notExists(db.select()\n *       .from(cities)\n *       .where(eq(users.homeCity, cities.id))),\n *   );\n * ```\n *\n * @see exists for the inverse of this test\n */\nexport function notExists(subquery: SQLWrapper): SQL {\n\treturn sql`not exists ${subquery}`;\n}\n\n/**\n * Test whether an expression is between two values. This\n * is an easier way to express range tests, which would be\n * expressed mathematically as `x <= a <= y` but in SQL\n * would have to be like `a >= x AND a <= y`.\n *\n * Between is inclusive of the endpoints: if `column`\n * is equal to `min` or `max`, it will be TRUE.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made between 1990 and 2000\n * db.select().from(cars)\n *   .where(between(cars.year, 1990, 2000))\n * ```\n *\n * @see notBetween for the inverse of this test\n */\nexport function between<T>(\n\tcolumn: SQL.Aliased,\n\tmin: T | SQLWrapper,\n\tmax: T | SQLWrapper,\n): SQL;\nexport function between<TColumn extends AnyColumn>(\n\tcolumn: TColumn,\n\tmin: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n\tmax: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n): SQL;\nexport function between<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tmin: unknown,\n\tmax: unknown,\n): SQL;\nexport function between(column: SQLWrapper, min: unknown, max: unknown): SQL {\n\treturn sql`${column} between ${bindIfParam(min, column)} and ${\n\t\tbindIfParam(\n\t\t\tmax,\n\t\t\tcolumn,\n\t\t)\n\t}`;\n}\n\n/**\n * Test whether an expression is not between two values.\n *\n * This, like `between`, includes its endpoints, so if\n * the `column` is equal to `min` or `max`, in this case\n * it will evaluate to FALSE.\n *\n * ## Examples\n *\n * ```ts\n * // Exclude cars made in the 1970s\n * db.select().from(cars)\n *   .where(notBetween(cars.year, 1970, 1979))\n * ```\n *\n * @see between for the inverse of this test\n */\nexport function notBetween<T>(\n\tcolumn: SQL.Aliased,\n\tmin: T | SQLWrapper,\n\tmax: T | SQLWrapper,\n): SQL;\nexport function notBetween<TColumn extends AnyColumn>(\n\tcolumn: TColumn,\n\tmin: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n\tmax: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n): SQL;\nexport function notBetween<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tmin: unknown,\n\tmax: unknown,\n): SQL;\nexport function notBetween(\n\tcolumn: SQLWrapper,\n\tmin: unknown,\n\tmax: unknown,\n): SQL {\n\treturn sql`${column} not between ${\n\t\tbindIfParam(\n\t\t\tmin,\n\t\t\tcolumn,\n\t\t)\n\t} and ${bindIfParam(max, column)}`;\n}\n\n/**\n * Compare a column to a pattern, which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars with 'Turbo' in their names.\n * db.select().from(cars)\n *   .where(like(cars.name, '%Turbo%'))\n * ```\n *\n * @see ilike for a case-insensitive version of this condition\n */\nexport function like(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} like ${value}`;\n}\n\n/**\n * The inverse of like - this tests that a given column\n * does not match a pattern, which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars that don't have \"ROver\" in their name.\n * db.select().from(cars)\n *   .where(notLike(cars.name, '%Rover%'))\n * ```\n *\n * @see like for the inverse condition\n * @see notIlike for a case-insensitive version of this condition\n */\nexport function notLike(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} not like ${value}`;\n}\n\n/**\n * Case-insensitively compare a column to a pattern,\n * which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * Unlike like, this performs a case-insensitive comparison.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars with 'Turbo' in their names.\n * db.select().from(cars)\n *   .where(ilike(cars.name, '%Turbo%'))\n * ```\n *\n * @see like for a case-sensitive version of this condition\n */\nexport function ilike(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} ilike ${value}`;\n}\n\n/**\n * The inverse of ilike - this case-insensitively tests that a given column\n * does not match a pattern, which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars that don't have \"Rover\" in their name.\n * db.select().from(cars)\n *   .where(notLike(cars.name, '%Rover%'))\n * ```\n *\n * @see ilike for the inverse condition\n * @see notLike for a case-sensitive version of this condition\n */\nexport function notIlike(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} not ilike ${value}`;\n}\n\n/**\n * Test that a column or expression contains all elements of\n * the list passed as the second argument.\n *\n * ## Throws\n *\n * The argument passed in the second array can't be empty:\n * if an empty is provided, this method will throw.\n *\n * ## Examples\n *\n * ```ts\n * // Select posts where its tags contain \"Typescript\" and \"ORM\".\n * db.select().from(posts)\n *   .where(arrayContains(posts.tags, ['Typescript', 'ORM']))\n * ```\n *\n * @see arrayContained to find if an array contains all elements of a column or expression\n * @see arrayOverlaps to find if a column or expression contains any elements of an array\n */\nexport function arrayContains<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContains<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContains<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function arrayContains(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('arrayContains requires at least one value');\n\t\t}\n\t\tconst array = sql`${bindIfParam(values, column)}`;\n\t\treturn sql`${column} @> ${array}`;\n\t}\n\n\treturn sql`${column} @> ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test that the list passed as the second argument contains\n * all elements of a column or expression.\n *\n * ## Throws\n *\n * The argument passed in the second array can't be empty:\n * if an empty is provided, this method will throw.\n *\n * ## Examples\n *\n * ```ts\n * // Select posts where its tags contain \"Typescript\", \"ORM\" or both,\n * // but filtering posts that have additional tags.\n * db.select().from(posts)\n *   .where(arrayContained(posts.tags, ['Typescript', 'ORM']))\n * ```\n *\n * @see arrayContains to find if a column or expression contains all elements of an array\n * @see arrayOverlaps to find if a column or expression contains any elements of an array\n */\nexport function arrayContained<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContained<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContained<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function arrayContained(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('arrayContained requires at least one value');\n\t\t}\n\t\tconst array = sql`${bindIfParam(values, column)}`;\n\t\treturn sql`${column} <@ ${array}`;\n\t}\n\n\treturn sql`${column} <@ ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test that a column or expression contains any elements of\n * the list passed as the second argument.\n *\n * ## Throws\n *\n * The argument passed in the second array can't be empty:\n * if an empty is provided, this method will throw.\n *\n * ## Examples\n *\n * ```ts\n * // Select posts where its tags contain \"Typescript\", \"ORM\" or both.\n * db.select().from(posts)\n *   .where(arrayOverlaps(posts.tags, ['Typescript', 'ORM']))\n * ```\n *\n * @see arrayContains to find if a column or expression contains all elements of an array\n * @see arrayContained to find if an array contains all elements of a column or expression\n */\nexport function arrayOverlaps<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayOverlaps<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayOverlaps<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function arrayOverlaps(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('arrayOverlaps requires at least one value');\n\t\t}\n\t\tconst array = sql`${bindIfParam(values, column)}`;\n\t\treturn sql`${column} && ${array}`;\n\t}\n\n\treturn sql`${column} && ${bindIfParam(values, column)}`;\n}\n", "import type { AnyColumn } from '../../column.ts';\nimport type { SQL, SQLWrapper } from '../sql.ts';\nimport { sql } from '../sql.ts';\n\n/**\n * Used in sorting, this specifies that the given\n * column or expression should be sorted in ascending\n * order. By the SQL standard, ascending order is the\n * default, so it is not usually necessary to specify\n * ascending sort order.\n *\n * ## Examples\n *\n * ```ts\n * // Return cars, starting with the oldest models\n * // and going in ascending order to the newest.\n * db.select().from(cars)\n *   .orderBy(asc(cars.year));\n * ```\n *\n * @see desc to sort in descending order\n */\nexport function asc(column: AnyColumn | SQLWrapper): SQL {\n\treturn sql`${column} asc`;\n}\n\n/**\n * Used in sorting, this specifies that the given\n * column or expression should be sorted in descending\n * order.\n *\n * ## Examples\n *\n * ```ts\n * // Select users, with the most recently created\n * // records coming first.\n * db.select().from(users)\n *   .orderBy(desc(users.createdAt));\n * ```\n *\n * @see asc to sort in ascending order\n */\nexport function desc(column: AnyColumn | SQLWrapper): SQL {\n\treturn sql`${column} desc`;\n}\n", "export * from './conditions.ts';\nexport * from './select.ts';\n", "import { type AnyTable, getTableUniqueName, type InferModelFromColumns, Table } from '~/table.ts';\nimport { type AnyColumn, Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { PrimaryKeyBuilder } from './pg-core/primary-keys.ts';\nimport {\n\tand,\n\tasc,\n\tbetween,\n\tdesc,\n\teq,\n\texists,\n\tgt,\n\tgte,\n\tilike,\n\tinArray,\n\tisNotNull,\n\tisNull,\n\tlike,\n\tlt,\n\tlte,\n\tne,\n\tnot,\n\tnotBetween,\n\tnotExists,\n\tnotIlike,\n\tnotInArray,\n\tnotLike,\n\tor,\n} from './sql/expressions/index.ts';\nimport { type Placeholder, SQL, sql } from './sql/sql.ts';\nimport type { Assume, ColumnsWithTable, Equal, Simplify, ValueOrArray } from './utils.ts';\n\nexport abstract class Relation<TTableName extends string = string> {\n\tstatic readonly [entityKind]: string = 'Relation';\n\n\tdeclare readonly $brand: 'Relation';\n\treadonly referencedTableName: TTableName;\n\tfieldName!: string;\n\n\tconstructor(\n\t\treadonly sourceTable: Table,\n\t\treadonly referencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly relationName: string | undefined,\n\t) {\n\t\tthis.referencedTableName = referencedTable[Table.Symbol.Name] as TTableName;\n\t}\n\n\tabstract withFieldName(fieldName: string): Relation<TTableName>;\n}\n\nexport class Relations<\n\tTTableName extends string = string,\n\tTConfig extends Record<string, Relation> = Record<string, Relation>,\n> {\n\tstatic readonly [entityKind]: string = 'Relations';\n\n\tdeclare readonly $brand: 'Relations';\n\n\tconstructor(\n\t\treadonly table: AnyTable<{ name: TTableName }>,\n\t\treadonly config: (helpers: TableRelationsHelpers<TTableName>) => TConfig,\n\t) {}\n}\n\nexport class One<\n\tTTableName extends string = string,\n\tTIsNullable extends boolean = boolean,\n> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'One';\n\n\tdeclare protected $relationBrand: 'One';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config:\n\t\t\t| RelationConfig<\n\t\t\t\tTTableName,\n\t\t\t\tstring,\n\t\t\t\tAnyColumn<{ tableName: TTableName }>[]\n\t\t\t>\n\t\t\t| undefined,\n\t\treadonly isNullable: TIsNullable,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): One<TTableName> {\n\t\tconst relation = new One(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t\tthis.isNullable,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport class Many<TTableName extends string> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'Many';\n\n\tdeclare protected $relationBrand: 'Many';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config: { relationName: string } | undefined,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): Many<TTableName> {\n\t\tconst relation = new Many(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport type TableRelationsKeysOnly<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n\tK extends keyof TSchema,\n> = TSchema[K] extends Relations<TTableName> ? K : never;\n\nexport type ExtractTableRelationsFromSchema<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TableRelationsKeysOnly<\n\t\t\t\tTSchema,\n\t\t\t\tTTableName,\n\t\t\t\tK\n\t\t\t>\n\t\t]: TSchema[K] extends Relations<TTableName, infer TConfig> ? TConfig : never;\n\t}\n>;\n\nexport type ExtractObjectValues<T> = T[keyof T];\n\nexport type ExtractRelationsFromTableExtraConfigSchema<\n\tTConfig extends unknown[],\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TConfig as TConfig[K] extends Relations<any> ? K\n\t\t\t\t: never\n\t\t]: TConfig[K] extends Relations<infer TRelationConfig> ? TRelationConfig\n\t\t\t: never;\n\t}\n>;\n\nexport function getOperators() {\n\treturn {\n\t\tand,\n\t\tbetween,\n\t\teq,\n\t\texists,\n\t\tgt,\n\t\tgte,\n\t\tilike,\n\t\tinArray,\n\t\tisNull,\n\t\tisNotNull,\n\t\tlike,\n\t\tlt,\n\t\tlte,\n\t\tne,\n\t\tnot,\n\t\tnotBetween,\n\t\tnotExists,\n\t\tnotLike,\n\t\tnotIlike,\n\t\tnotInArray,\n\t\tor,\n\t\tsql,\n\t};\n}\n\nexport type Operators = ReturnType<typeof getOperators>;\n\nexport function getOrderByOperators() {\n\treturn {\n\t\tsql,\n\t\tasc,\n\t\tdesc,\n\t};\n}\n\nexport type OrderByOperators = ReturnType<typeof getOrderByOperators>;\n\nexport type FindTableByDBName<\n\tTSchema extends TablesRelationalConfig,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TSchema[K]['dbName'] extends TTableName ? K\n\t\t\t\t: never\n\t\t]: TSchema[K];\n\t}\n>;\n\nexport type DBQueryConfig<\n\tTRelationType extends 'one' | 'many' = 'one' | 'many',\n\tTIsRoot extends boolean = boolean,\n\tTSchema extends TablesRelationalConfig = TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig = TableRelationalConfig,\n> =\n\t& {\n\t\tcolumns?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['columns']]?: boolean;\n\t\t\t}\n\t\t\t| undefined;\n\t\twith?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['relations']]?:\n\t\t\t\t\t| true\n\t\t\t\t\t| DBQueryConfig<\n\t\t\t\t\t\tTTableConfig['relations'][K] extends One ? 'one' : 'many',\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\tFindTableByDBName<\n\t\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\t\tTTableConfig['relations'][K]['referencedTableName']\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\t| undefined;\n\t\t\t}\n\t\t\t| undefined;\n\t\textras?:\n\t\t\t| Record<string, SQL.Aliased>\n\t\t\t| ((\n\t\t\t\tfields: Simplify<\n\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t>,\n\t\t\t\toperators: { sql: Operators['sql'] },\n\t\t\t) => Record<string, SQL.Aliased>)\n\t\t\t| undefined;\n\t}\n\t& (TRelationType extends 'many' ?\n\t\t\t& {\n\t\t\t\twhere?:\n\t\t\t\t\t| SQL\n\t\t\t\t\t| undefined\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: Operators,\n\t\t\t\t\t) => SQL | undefined);\n\t\t\t\torderBy?:\n\t\t\t\t\t| ValueOrArray<AnyColumn | SQL>\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: OrderByOperators,\n\t\t\t\t\t) => ValueOrArray<AnyColumn | SQL>)\n\t\t\t\t\t| undefined;\n\t\t\t\tlimit?: number | Placeholder | undefined;\n\t\t\t}\n\t\t\t& (TIsRoot extends true ? {\n\t\t\t\t\toffset?: number | Placeholder | undefined;\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t: {});\n\nexport interface TableRelationalConfig {\n\ttsName: string;\n\tdbName: string;\n\tcolumns: Record<string, Column>;\n\trelations: Record<string, Relation>;\n\tprimaryKey: AnyColumn[];\n\tschema?: string;\n}\n\nexport type TablesRelationalConfig = Record<string, TableRelationalConfig>;\n\nexport interface RelationalSchemaConfig<\n\tTSchema extends TablesRelationalConfig,\n> {\n\tfullSchema: Record<string, unknown>;\n\tschema: TSchema;\n\ttableNamesMap: Record<string, string>;\n}\n\nexport type ExtractTablesWithRelations<\n\tTSchema extends Record<string, unknown>,\n> = {\n\t[\n\t\tK in keyof TSchema as TSchema[K] extends Table ? K\n\t\t\t: never\n\t]: TSchema[K] extends Table ? {\n\t\t\ttsName: K & string;\n\t\t\tdbName: TSchema[K]['_']['name'];\n\t\t\tcolumns: TSchema[K]['_']['columns'];\n\t\t\trelations: ExtractTableRelationsFromSchema<\n\t\t\t\tTSchema,\n\t\t\t\tTSchema[K]['_']['name']\n\t\t\t>;\n\t\t\tprimaryKey: AnyColumn[];\n\t\t}\n\t\t: never;\n};\n\nexport type ReturnTypeOrValue<T> = T extends (...args: any[]) => infer R ? R\n\t: T;\n\nexport type BuildRelationResult<\n\tTSchema extends TablesRelationalConfig,\n\tTInclude,\n\tTRelations extends Record<string, Relation>,\n> = {\n\t[\n\t\tK in\n\t\t\t& NonUndefinedKeysOnly<TInclude>\n\t\t\t& keyof TRelations\n\t]: TRelations[K] extends infer TRel extends Relation ? BuildQueryResult<\n\t\t\tTSchema,\n\t\t\tFindTableByDBName<TSchema, TRel['referencedTableName']>,\n\t\t\tAssume<TInclude[K], true | Record<string, unknown>>\n\t\t> extends infer TResult ? TRel extends One ?\n\t\t\t\t\t| TResult\n\t\t\t\t\t| (Equal<TRel['isNullable'], false> extends true ? null : never)\n\t\t\t: TResult[]\n\t\t: never\n\t\t: never;\n};\n\nexport type NonUndefinedKeysOnly<T> =\n\t& ExtractObjectValues<\n\t\t{\n\t\t\t[K in keyof T as T[K] extends undefined ? never : K]: K;\n\t\t}\n\t>\n\t& keyof T;\n\nexport type BuildQueryResult<\n\tTSchema extends TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig,\n\tTFullSelection extends true | Record<string, unknown>,\n> = Equal<TFullSelection, true> extends true ? InferModelFromColumns<TTableConfig['columns']>\n\t: TFullSelection extends Record<string, unknown> ? Simplify<\n\t\t\t& (TFullSelection['columns'] extends Record<string, unknown> ? InferModelFromColumns<\n\t\t\t\t\t{\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tK in Equal<\n\t\t\t\t\t\t\t\tExclude<\n\t\t\t\t\t\t\t\t\tTFullSelection['columns'][\n\t\t\t\t\t\t\t\t\t\t& keyof TFullSelection['columns']\n\t\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t> extends true ? Exclude<\n\t\t\t\t\t\t\t\t\tkeyof TTableConfig['columns'],\n\t\t\t\t\t\t\t\t\tNonUndefinedKeysOnly<TFullSelection['columns']>\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t& {\n\t\t\t\t\t\t\t\t\t\t[K in keyof TFullSelection['columns']]: Equal<\n\t\t\t\t\t\t\t\t\t\t\tTFullSelection['columns'][K],\n\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t> extends true ? K\n\t\t\t\t\t\t\t\t\t\t\t: never;\n\t\t\t\t\t\t\t\t\t}[keyof TFullSelection['columns']]\n\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t]: TTableConfig['columns'][K];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t: InferModelFromColumns<TTableConfig['columns']>)\n\t\t\t& (TFullSelection['extras'] extends\n\t\t\t\t| Record<string, unknown>\n\t\t\t\t| ((...args: any[]) => Record<string, unknown>) ? {\n\t\t\t\t\t[\n\t\t\t\t\t\tK in NonUndefinedKeysOnly<\n\t\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>\n\t\t\t\t\t\t>\n\t\t\t\t\t]: Assume<\n\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>[K],\n\t\t\t\t\t\tSQL.Aliased\n\t\t\t\t\t>['_']['type'];\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t\t& (TFullSelection['with'] extends Record<string, unknown> ? BuildRelationResult<\n\t\t\t\t\tTSchema,\n\t\t\t\t\tTFullSelection['with'],\n\t\t\t\t\tTTableConfig['relations']\n\t\t\t\t>\n\t\t\t\t: {})\n\t\t>\n\t: never;\n\nexport interface RelationConfig<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> {\n\trelationName?: string;\n\tfields: TColumns;\n\treferences: ColumnsWithTable<TTableName, TForeignTableName, TColumns>;\n}\n\nexport function extractTablesRelationalConfig<\n\tTTables extends TablesRelationalConfig,\n>(\n\tschema: Record<string, unknown>,\n\tconfigHelpers: (table: Table) => any,\n): { tables: TTables; tableNamesMap: Record<string, string> } {\n\tif (\n\t\tObject.keys(schema).length === 1\n\t\t&& 'default' in schema\n\t\t&& !is(schema['default'], Table)\n\t) {\n\t\tschema = schema['default'] as Record<string, unknown>;\n\t}\n\n\t// table DB name -> schema table key\n\tconst tableNamesMap: Record<string, string> = {};\n\t// Table relations found before their tables - need to buffer them until we know the schema table key\n\tconst relationsBuffer: Record<\n\t\tstring,\n\t\t{ relations: Record<string, Relation>; primaryKey?: AnyColumn[] }\n\t> = {};\n\tconst tablesConfig: TablesRelationalConfig = {};\n\tfor (const [key, value] of Object.entries(schema)) {\n\t\tif (is(value, Table)) {\n\t\t\tconst dbName = getTableUniqueName(value);\n\t\t\tconst bufferedRelations = relationsBuffer[dbName];\n\t\t\ttableNamesMap[dbName] = key;\n\t\t\ttablesConfig[key] = {\n\t\t\t\ttsName: key,\n\t\t\t\tdbName: value[Table.Symbol.Name],\n\t\t\t\tschema: value[Table.Symbol.Schema],\n\t\t\t\tcolumns: value[Table.Symbol.Columns],\n\t\t\t\trelations: bufferedRelations?.relations ?? {},\n\t\t\t\tprimaryKey: bufferedRelations?.primaryKey ?? [],\n\t\t\t};\n\n\t\t\t// Fill in primary keys\n\t\t\tfor (\n\t\t\t\tconst column of Object.values(\n\t\t\t\t\t(value as Table)[Table.Symbol.Columns],\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tif (column.primary) {\n\t\t\t\t\ttablesConfig[key]!.primaryKey.push(column);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst extraConfig = value[Table.Symbol.ExtraConfigBuilder]?.((value as Table)[Table.Symbol.ExtraConfigColumns]);\n\t\t\tif (extraConfig) {\n\t\t\t\tfor (const configEntry of Object.values(extraConfig)) {\n\t\t\t\t\tif (is(configEntry, PrimaryKeyBuilder)) {\n\t\t\t\t\t\ttablesConfig[key]!.primaryKey.push(...configEntry.columns);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (is(value, Relations)) {\n\t\t\tconst dbName = getTableUniqueName(value.table);\n\t\t\tconst tableName = tableNamesMap[dbName];\n\t\t\tconst relations: Record<string, Relation> = value.config(\n\t\t\t\tconfigHelpers(value.table),\n\t\t\t);\n\t\t\tlet primaryKey: AnyColumn[] | undefined;\n\n\t\t\tfor (const [relationName, relation] of Object.entries(relations)) {\n\t\t\t\tif (tableName) {\n\t\t\t\t\tconst tableConfig = tablesConfig[tableName]!;\n\t\t\t\t\ttableConfig.relations[relationName] = relation;\n\t\t\t\t\tif (primaryKey) {\n\t\t\t\t\t\ttableConfig.primaryKey.push(...primaryKey);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!(dbName in relationsBuffer)) {\n\t\t\t\t\t\trelationsBuffer[dbName] = {\n\t\t\t\t\t\t\trelations: {},\n\t\t\t\t\t\t\tprimaryKey,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\trelationsBuffer[dbName]!.relations[relationName] = relation;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { tables: tablesConfig as TTables, tableNamesMap };\n}\n\nexport function relations<\n\tTTableName extends string,\n\tTRelations extends Record<string, Relation<any>>,\n>(\n\ttable: AnyTable<{ name: TTableName }>,\n\trelations: (helpers: TableRelationsHelpers<TTableName>) => TRelations,\n): Relations<TTableName, TRelations> {\n\treturn new Relations<TTableName, TRelations>(\n\t\ttable,\n\t\t(helpers: TableRelationsHelpers<TTableName>) =>\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.entries(relations(helpers)).map(([key, value]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue.withFieldName(key),\n\t\t\t\t]),\n\t\t\t) as TRelations,\n\t);\n}\n\nexport function createOne<TTableName extends string>(sourceTable: Table) {\n\treturn function one<\n\t\tTForeignTable extends Table,\n\t\tTColumns extends [\n\t\t\tAnyColumn<{ tableName: TTableName }>,\n\t\t\t...AnyColumn<{ tableName: TTableName }>[],\n\t\t],\n\t>(\n\t\ttable: TForeignTable,\n\t\tconfig?: RelationConfig<TTableName, TForeignTable['_']['name'], TColumns>,\n\t): One<\n\t\tTForeignTable['_']['name'],\n\t\tEqual<TColumns[number]['_']['notNull'], true>\n\t> {\n\t\treturn new One(\n\t\t\tsourceTable,\n\t\t\ttable,\n\t\t\tconfig,\n\t\t\t(config?.fields.reduce<boolean>((res, f) => res && f.notNull, true)\n\t\t\t\t?? false) as Equal<TColumns[number]['_']['notNull'], true>,\n\t\t);\n\t};\n}\n\nexport function createMany(sourceTable: Table) {\n\treturn function many<TForeignTable extends Table>(\n\t\treferencedTable: TForeignTable,\n\t\tconfig?: { relationName: string },\n\t): Many<TForeignTable['_']['name']> {\n\t\treturn new Many(sourceTable, referencedTable, config);\n\t};\n}\n\nexport interface NormalizedRelation {\n\tfields: AnyColumn[];\n\treferences: AnyColumn[];\n}\n\nexport function normalizeRelation(\n\tschema: TablesRelationalConfig,\n\ttableNamesMap: Record<string, string>,\n\trelation: Relation,\n): NormalizedRelation {\n\tif (is(relation, One) && relation.config) {\n\t\treturn {\n\t\t\tfields: relation.config.fields,\n\t\t\treferences: relation.config.references,\n\t\t};\n\t}\n\n\tconst referencedTableTsName = tableNamesMap[getTableUniqueName(relation.referencedTable)];\n\tif (!referencedTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${relation.referencedTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst referencedTableConfig = schema[referencedTableTsName];\n\tif (!referencedTableConfig) {\n\t\tthrow new Error(`Table \"${referencedTableTsName}\" not found in schema`);\n\t}\n\n\tconst sourceTable = relation.sourceTable;\n\tconst sourceTableTsName = tableNamesMap[getTableUniqueName(sourceTable)];\n\tif (!sourceTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${sourceTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst reverseRelations: Relation[] = [];\n\tfor (\n\t\tconst referencedTableRelation of Object.values(\n\t\t\treferencedTableConfig.relations,\n\t\t)\n\t) {\n\t\tif (\n\t\t\t(relation.relationName\n\t\t\t\t&& relation !== referencedTableRelation\n\t\t\t\t&& referencedTableRelation.relationName === relation.relationName)\n\t\t\t|| (!relation.relationName\n\t\t\t\t&& referencedTableRelation.referencedTable === relation.sourceTable)\n\t\t) {\n\t\t\treverseRelations.push(referencedTableRelation);\n\t\t}\n\t}\n\n\tif (reverseRelations.length > 1) {\n\t\tthrow relation.relationName\n\t\t\t? new Error(\n\t\t\t\t`There are multiple relations with name \"${relation.relationName}\" in table \"${referencedTableTsName}\"`,\n\t\t\t)\n\t\t\t: new Error(\n\t\t\t\t`There are multiple relations between \"${referencedTableTsName}\" and \"${\n\t\t\t\t\trelation.sourceTable[Table.Symbol.Name]\n\t\t\t\t}\". Please specify relation name`,\n\t\t\t);\n\t}\n\n\tif (\n\t\treverseRelations[0]\n\t\t&& is(reverseRelations[0], One)\n\t\t&& reverseRelations[0].config\n\t) {\n\t\treturn {\n\t\t\tfields: reverseRelations[0].config.references,\n\t\t\treferences: reverseRelations[0].config.fields,\n\t\t};\n\t}\n\n\tthrow new Error(\n\t\t`There is not enough information to infer relation \"${sourceTableTsName}.${relation.fieldName}\"`,\n\t);\n}\n\nexport function createTableRelationsHelpers<TTableName extends string>(\n\tsourceTable: AnyTable<{ name: TTableName }>,\n) {\n\treturn {\n\t\tone: createOne<TTableName>(sourceTable),\n\t\tmany: createMany(sourceTable),\n\t};\n}\n\nexport type TableRelationsHelpers<TTableName extends string> = ReturnType<\n\ttypeof createTableRelationsHelpers<TTableName>\n>;\n\nexport interface BuildRelationalQueryResult<\n\tTTable extends Table = Table,\n\tTColumn extends Column = Column,\n> {\n\ttableTsKey: string;\n\tselection: {\n\t\tdbKey: string;\n\t\ttsKey: string;\n\t\tfield: TColumn | SQL | SQL.Aliased;\n\t\trelationTableTsKey: string | undefined;\n\t\tisJson: boolean;\n\t\tisExtra?: boolean;\n\t\tselection: BuildRelationalQueryResult<TTable>['selection'];\n\t}[];\n\tsql: TTable | SQL;\n}\n\nexport function mapRelationalRow(\n\ttablesConfig: TablesRelationalConfig,\n\ttableConfig: TableRelationalConfig,\n\trow: unknown[],\n\tbuildQueryResultSelection: BuildRelationalQueryResult['selection'],\n\tmapColumnValue: (value: unknown) => unknown = (value) => value,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (\n\t\tconst [\n\t\t\tselectionItemIndex,\n\t\t\tselectionItem,\n\t\t] of buildQueryResultSelection.entries()\n\t) {\n\t\tif (selectionItem.isJson) {\n\t\t\tconst relation = tableConfig.relations[selectionItem.tsKey]!;\n\t\t\tconst rawSubRows = row[selectionItemIndex] as\n\t\t\t\t| unknown[]\n\t\t\t\t| null\n\t\t\t\t| [null]\n\t\t\t\t| string;\n\t\t\tconst subRows = typeof rawSubRows === 'string'\n\t\t\t\t? (JSON.parse(rawSubRows) as unknown[])\n\t\t\t\t: rawSubRows;\n\t\t\tresult[selectionItem.tsKey] = is(relation, One)\n\t\t\t\t? subRows\n\t\t\t\t\t&& mapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRows,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t: (subRows as unknown[][]).map((subRow) =>\n\t\t\t\t\tmapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRow,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t} else {\n\t\t\tconst value = mapColumnValue(row[selectionItemIndex]);\n\t\t\tconst field = selectionItem.field!;\n\t\t\tlet decoder;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tresult[selectionItem.tsKey] = value === null ? null : decoder.mapFromDriverValue(value);\n\t\t}\n\t}\n\n\treturn result;\n}\n", "import { type AnyColumn, Column } from '~/column.ts';\nimport { is } from '~/entity.ts';\nimport { type SQL, sql, type SQLWrapper } from '../sql.ts';\n\n/**\n * Returns the number of values in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // Number employees with null values\n * db.select({ value: count() }).from(employees)\n * // Number of employees where `name` is not null\n * db.select({ value: count(employees.name) }).from(employees)\n * ```\n *\n * @see countDistinct to get the number of non-duplicate values in `expression`\n */\nexport function count(expression?: SQLWrapper): SQL<number> {\n\treturn sql`count(${expression || sql.raw('*')})`.mapWith(Number);\n}\n\n/**\n * Returns the number of non-duplicate values in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // Number of employees where `name` is distinct\n * db.select({ value: countDistinct(employees.name) }).from(employees)\n * ```\n *\n * @see count to get the number of values in `expression`, including duplicates\n */\nexport function countDistinct(expression: SQLWrapper): SQL<number> {\n\treturn sql`count(distinct ${expression})`.mapWith(Number);\n}\n\n/**\n * Returns the average (arithmetic mean) of all non-null values in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // Average salary of an employee\n * db.select({ value: avg(employees.salary) }).from(employees)\n * ```\n *\n * @see avgDistinct to get the average of all non-null and non-duplicate values in `expression`\n */\nexport function avg(expression: SQLWrapper): SQL<string | null> {\n\treturn sql`avg(${expression})`.mapWith(String);\n}\n\n/**\n * Returns the average (arithmetic mean) of all non-null and non-duplicate values in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // Average salary of an employee where `salary` is distinct\n * db.select({ value: avgDistinct(employees.salary) }).from(employees)\n * ```\n *\n * @see avg to get the average of all non-null values in `expression`, including duplicates\n */\nexport function avgDistinct(expression: SQLWrapper): SQL<string | null> {\n\treturn sql`avg(distinct ${expression})`.mapWith(String);\n}\n\n/**\n * Returns the sum of all non-null values in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // Sum of every employee's salary\n * db.select({ value: sum(employees.salary) }).from(employees)\n * ```\n *\n * @see sumDistinct to get the sum of all non-null and non-duplicate values in `expression`\n */\nexport function sum(expression: SQLWrapper): SQL<string | null> {\n\treturn sql`sum(${expression})`.mapWith(String);\n}\n\n/**\n * Returns the sum of all non-null and non-duplicate values in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // Sum of every employee's salary where `salary` is distinct (no duplicates)\n * db.select({ value: sumDistinct(employees.salary) }).from(employees)\n * ```\n *\n * @see sum to get the sum of all non-null values in `expression`, including duplicates\n */\nexport function sumDistinct(expression: SQLWrapper): SQL<string | null> {\n\treturn sql`sum(distinct ${expression})`.mapWith(String);\n}\n\n/**\n * Returns the maximum value in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // The employee with the highest salary\n * db.select({ value: max(employees.salary) }).from(employees)\n * ```\n */\nexport function max<T extends SQLWrapper>(expression: T): SQL<(T extends AnyColumn ? T['_']['data'] : string) | null> {\n\treturn sql`max(${expression})`.mapWith(is(expression, Column) ? expression : String) as any;\n}\n\n/**\n * Returns the minimum value in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // The employee with the lowest salary\n * db.select({ value: min(employees.salary) }).from(employees)\n * ```\n */\nexport function min<T extends SQLWrapper>(expression: T): SQL<(T extends AnyColumn ? T['_']['data'] : string) | null> {\n\treturn sql`min(${expression})`.mapWith(is(expression, Column) ? expression : String) as any;\n}\n", "import type { AnyColumn } from '~/column.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport { type SQL, sql, type SQLWrapper } from '../sql.ts';\n\nfunction toSql(value: number[] | string[]): string {\n\treturn JSON.stringify(value);\n}\n\n/**\n * Used in sorting and in querying, if used in sorting,\n * this specifies that the given column or expression should be sorted in an order\n * that minimizes the L2 distance to the given value.\n * If used in querying, this specifies that it should return the L2 distance\n * between the given column or expression and the given value.\n *\n * ## Examples\n *\n * ```ts\n * // Sort cars by embedding similarity\n * // to the given embedding\n * db.select().from(cars)\n *   .orderBy(l2Distance(cars.embedding, embedding));\n * ```\n *\n * ```ts\n * // Select distance of cars and embedding\n * // to the given embedding\n * db.select({distance: l2Distance(cars.embedding, embedding)}).from(cars)\n * ```\n */\nexport function l2Distance(\n\tcolumn: SQLWrapper | AnyColumn,\n\tvalue: number[] | string[] | TypedQueryBuilder<any> | string,\n): SQL {\n\tif (Array.isArray(value)) {\n\t\treturn sql`${column} <-> ${toSql(value)}`;\n\t}\n\treturn sql`${column} <-> ${value}`;\n}\n\n/**\n * L1 distance is one of the possible distance measures between two probability distribution vectors and it is\n * calculated as the sum of the absolute differences.\n * The smaller the distance between the observed probability vectors, the higher the accuracy of the synthetic data\n *\n * ## Examples\n *\n * ```ts\n * // Sort cars by embedding similarity\n * // to the given embedding\n * db.select().from(cars)\n *   .orderBy(l1Distance(cars.embedding, embedding));\n * ```\n *\n * ```ts\n * // Select distance of cars and embedding\n * // to the given embedding\n * db.select({distance: l1Distance(cars.embedding, embedding)}).from(cars)\n * ```\n */\nexport function l1Distance(\n\tcolumn: SQLWrapper | AnyColumn,\n\tvalue: number[] | string[] | TypedQueryBuilder<any> | string,\n): SQL {\n\tif (Array.isArray(value)) {\n\t\treturn sql`${column} <+> ${toSql(value)}`;\n\t}\n\treturn sql`${column} <+> ${value}`;\n}\n\n/**\n * Used in sorting and in querying, if used in sorting,\n * this specifies that the given column or expression should be sorted in an order\n * that minimizes the inner product distance to the given value.\n * If used in querying, this specifies that it should return the inner product distance\n * between the given column or expression and the given value.\n *\n * ## Examples\n *\n * ```ts\n * // Sort cars by embedding similarity\n * // to the given embedding\n * db.select().from(cars)\n *   .orderBy(innerProduct(cars.embedding, embedding));\n * ```\n *\n * ```ts\n * // Select distance of cars and embedding\n * // to the given embedding\n * db.select({ distance: innerProduct(cars.embedding, embedding) }).from(cars)\n * ```\n */\nexport function innerProduct(\n\tcolumn: SQLWrapper | AnyColumn,\n\tvalue: number[] | string[] | TypedQueryBuilder<any> | string,\n): SQL {\n\tif (Array.isArray(value)) {\n\t\treturn sql`${column} <#> ${toSql(value)}`;\n\t}\n\treturn sql`${column} <#> ${value}`;\n}\n\n/**\n * Used in sorting and in querying, if used in sorting,\n * this specifies that the given column or expression should be sorted in an order\n * that minimizes the cosine distance to the given value.\n * If used in querying, this specifies that it should return the cosine distance\n * between the given column or expression and the given value.\n *\n * ## Examples\n *\n * ```ts\n * // Sort cars by embedding similarity\n * // to the given embedding\n * db.select().from(cars)\n *   .orderBy(cosineDistance(cars.embedding, embedding));\n * ```\n *\n * ```ts\n * // Select distance of cars and embedding\n * // to the given embedding\n * db.select({distance: cosineDistance(cars.embedding, embedding)}).from(cars)\n * ```\n */\nexport function cosineDistance(\n\tcolumn: SQLWrapper | AnyColumn,\n\tvalue: number[] | string[] | TypedQueryBuilder<any> | string,\n): SQL {\n\tif (Array.isArray(value)) {\n\t\treturn sql`${column} <=> ${toSql(value)}`;\n\t}\n\treturn sql`${column} <=> ${value}`;\n}\n\n/**\n * Hamming distance between two strings or vectors of equal length is the number of positions at which the\n * corresponding symbols are different. In other words, it measures the minimum number of\n * substitutions required to change one string into the other, or equivalently,\n * the minimum number of errors that could have transformed one string into the other\n *\n * ## Examples\n *\n * ```ts\n * // Sort cars by embedding similarity\n * // to the given embedding\n * db.select().from(cars)\n *   .orderBy(hammingDistance(cars.embedding, embedding));\n * ```\n */\nexport function hammingDistance(\n\tcolumn: SQLWrapper | AnyColumn,\n\tvalue: number[] | string[] | TypedQueryBuilder<any> | string,\n): SQL {\n\tif (Array.isArray(value)) {\n\t\treturn sql`${column} <~> ${toSql(value)}`;\n\t}\n\treturn sql`${column} <~> ${value}`;\n}\n\n/**\n * ## Examples\n *\n * ```ts\n * // Sort cars by embedding similarity\n * // to the given embedding\n * db.select().from(cars)\n *   .orderBy(jaccardDistance(cars.embedding, embedding));\n * ```\n */\nexport function jaccardDistance(\n\tcolumn: SQLWrapper | AnyColumn,\n\tvalue: number[] | string[] | TypedQueryBuilder<any> | string,\n): SQL {\n\tif (Array.isArray(value)) {\n\t\treturn sql`${column} <%> ${toSql(value)}`;\n\t}\n\treturn sql`${column} <%> ${value}`;\n}\n", "export * from './aggregate.ts';\nexport * from './vector.ts';\n", "export * from './expressions/index.ts';\nexport * from './functions/index.ts';\nexport * from './sql.ts';\n", "import { entityKind } from '~/entity.ts';\nimport { type ColumnsSelection, View } from '~/sql/sql.ts';\n\nexport abstract class PgViewBase<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelectedFields extends ColumnsSelection = ColumnsSelection,\n> extends View<TName, TExisting, TSelectedFields> {\n\tstatic override readonly [entityKind]: string = 'PgViewBase';\n\n\tdeclare readonly _: View<TName, TExisting, TSelectedFields>['_'] & {\n\t\treadonly viewBrand: 'PgViewBase';\n\t};\n}\n", "import { aliasedTable, aliasedTableColumn, mapColumnsInAliasedSQLToAlias, mapColumnsInSQLToAlias } from '~/alias.ts';\nimport { CasingCache } from '~/casing.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { DrizzleError } from '~/errors.ts';\nimport type { MigrationConfig, MigrationMeta } from '~/migrator.ts';\nimport {\n\tPgColumn,\n\tPgDate,\n\tPgDateString,\n\tPgJson,\n\tPgJsonb,\n\tPgNumeric,\n\tPgTime,\n\tPgTimestamp,\n\tPgTimestampString,\n\tPgUUID,\n} from '~/pg-core/columns/index.ts';\nimport type {\n\tAnyPgSelectQueryBuilder,\n\tPgDeleteConfig,\n\tPgInsertConfig,\n\tPgSelectJoinConfig,\n\tPgUpdateConfig,\n} from '~/pg-core/query-builders/index.ts';\nimport type { PgSelectConfig, SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport { PgTable } from '~/pg-core/table.ts';\nimport {\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tgetOperators,\n\tgetOrderByOperators,\n\tMany,\n\tnormalizeRelation,\n\tOne,\n\ttype Relation,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { and, eq, View } from '~/sql/index.ts';\nimport {\n\ttype DriverValueEncoder,\n\ttype Name,\n\tParam,\n\ttype QueryTypingsValue,\n\ttype QueryWithTypings,\n\tSQL,\n\tsql,\n\ttype SQLChunk,\n} from '~/sql/sql.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { getTableName, getTableUniqueName, Table } from '~/table.ts';\nimport { type Casing, orderSelectedFields, type UpdateSet } from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { PgSession } from './session.ts';\nimport { PgViewBase } from './view-base.ts';\nimport type { PgMaterializedView } from './view.ts';\n\nexport interface PgDialectConfig {\n\tcasing?: Casing;\n}\n\nexport class PgDialect {\n\tstatic readonly [entityKind]: string = 'PgDialect';\n\n\t/** @internal */\n\treadonly casing: CasingCache;\n\n\tconstructor(config?: PgDialectConfig) {\n\t\tthis.casing = new CasingCache(config?.casing);\n\t}\n\n\tasync migrate(migrations: MigrationMeta[], session: PgSession, config: string | MigrationConfig): Promise<void> {\n\t\tconst migrationsTable = typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\t\tconst migrationsSchema = typeof config === 'string' ? 'drizzle' : config.migrationsSchema ?? 'drizzle';\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at bigint\n\t\t\t)\n\t\t`;\n\t\tawait session.execute(sql`CREATE SCHEMA IF NOT EXISTS ${sql.identifier(migrationsSchema)}`);\n\t\tawait session.execute(migrationTableCreate);\n\n\t\tconst dbMigrations = await session.all<{ id: number; hash: string; created_at: string }>(\n\t\t\tsql`select id, hash, created_at from ${sql.identifier(migrationsSchema)}.${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} order by created_at desc limit 1`,\n\t\t);\n\n\t\tconst lastDbMigration = dbMigrations[0];\n\t\tawait session.transaction(async (tx) => {\n\t\t\tfor await (const migration of migrations) {\n\t\t\t\tif (\n\t\t\t\t\t!lastDbMigration\n\t\t\t\t\t|| Number(lastDbMigration.created_at) < migration.folderMillis\n\t\t\t\t) {\n\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\tawait tx.execute(sql.raw(stmt));\n\t\t\t\t\t}\n\t\t\t\t\tawait tx.execute(\n\t\t\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tescapeName(name: string): string {\n\t\treturn `\"${name.replace(/\"/g, '\"\"')}\"`;\n\t}\n\n\tescapeParam(num: number): string {\n\t\treturn `$${num + 1}`;\n\t}\n\n\tescapeString(str: string): string {\n\t\treturn `'${str.replace(/'/g, \"''\")}'`;\n\t}\n\n\tprivate buildWithCTE(queries: Subquery[] | undefined): SQL | undefined {\n\t\tif (!queries?.length) return undefined;\n\n\t\tconst withSqlChunks = [sql`with `];\n\t\tfor (const [i, w] of queries.entries()) {\n\t\t\twithSqlChunks.push(sql`${sql.identifier(w._.alias)} as (${w._.sql})`);\n\t\t\tif (i < queries.length - 1) {\n\t\t\t\twithSqlChunks.push(sql`, `);\n\t\t\t}\n\t\t}\n\t\twithSqlChunks.push(sql` `);\n\t\treturn sql.join(withSqlChunks);\n\t}\n\n\tbuildDeleteQuery({ table, where, returning, withList }: PgDeleteConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\treturn sql`${withSql}delete from ${table}${whereSql}${returningSql}`;\n\t}\n\n\tbuildUpdateSet(table: PgTable, set: UpdateSet): SQL {\n\t\tconst tableColumns = table[Table.Symbol.Columns];\n\n\t\tconst columnNames = Object.keys(tableColumns).filter((colName) =>\n\t\t\tset[colName] !== undefined || tableColumns[colName]?.onUpdateFn !== undefined\n\t\t);\n\n\t\tconst setSize = columnNames.length;\n\t\treturn sql.join(columnNames.flatMap((colName, i) => {\n\t\t\tconst col = tableColumns[colName]!;\n\n\t\t\tconst onUpdateFnResult = col.onUpdateFn?.();\n\t\t\tconst value = set[colName] ?? (is(onUpdateFnResult, SQL) ? onUpdateFnResult : sql.param(onUpdateFnResult, col));\n\t\t\tconst res = sql`${sql.identifier(this.casing.getColumnCasing(col))} = ${value}`;\n\n\t\t\tif (i < setSize - 1) {\n\t\t\t\treturn [res, sql.raw(', ')];\n\t\t\t}\n\t\t\treturn [res];\n\t\t}));\n\t}\n\n\tbuildUpdateQuery({ table, set, where, returning, withList, from, joins }: PgUpdateConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst tableName = table[PgTable.Symbol.Name];\n\t\tconst tableSchema = table[PgTable.Symbol.Schema];\n\t\tconst origTableName = table[PgTable.Symbol.OriginalName];\n\t\tconst alias = tableName === origTableName ? undefined : tableName;\n\t\tconst tableSql = sql`${tableSchema ? sql`${sql.identifier(tableSchema)}.` : undefined}${\n\t\t\tsql.identifier(origTableName)\n\t\t}${alias && sql` ${sql.identifier(alias)}`}`;\n\n\t\tconst setSql = this.buildUpdateSet(table, set);\n\n\t\tconst fromSql = from && sql.join([sql.raw(' from '), this.buildFromTable(from)]);\n\n\t\tconst joinsSql = this.buildJoins(joins);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: !from })}`\n\t\t\t: undefined;\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\treturn sql`${withSql}update ${tableSql} set ${setSql}${fromSql}${joinsSql}${whereSql}${returningSql}`;\n\t}\n\n\t/**\n\t * Builds selection SQL with provided fields/expressions\n\t *\n\t * Examples:\n\t *\n\t * `select <selection> from`\n\t *\n\t * `insert ... returning <selection>`\n\t *\n\t * If `isSingleTable` is true, then columns won't be prefixed with table name\n\t */\n\tprivate buildSelection(\n\t\tfields: SelectedFieldsOrdered,\n\t\t{ isSingleTable = false }: { isSingleTable?: boolean } = {},\n\t): SQL {\n\t\tconst columnsLen = fields.length;\n\n\t\tconst chunks = fields\n\t\t\t.flatMap(({ field }, i) => {\n\t\t\t\tconst chunk: SQLChunk[] = [];\n\n\t\t\t\tif (is(field, SQL.Aliased) && field.isSelectionField) {\n\t\t\t\t\tchunk.push(sql.identifier(field.fieldAlias));\n\t\t\t\t} else if (is(field, SQL.Aliased) || is(field, SQL)) {\n\t\t\t\t\tconst query = is(field, SQL.Aliased) ? field.sql : field;\n\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tnew SQL(\n\t\t\t\t\t\t\t\tquery.queryChunks.map((c) => {\n\t\t\t\t\t\t\t\t\tif (is(c, PgColumn)) {\n\t\t\t\t\t\t\t\t\t\treturn sql.identifier(this.casing.getColumnCasing(c));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn c;\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(query);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (is(field, SQL.Aliased)) {\n\t\t\t\t\t\tchunk.push(sql` as ${sql.identifier(field.fieldAlias)}`);\n\t\t\t\t\t}\n\t\t\t\t} else if (is(field, Column)) {\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(sql.identifier(this.casing.getColumnCasing(field)));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(field);\n\t\t\t\t\t}\n\t\t\t\t} else if (is(field, Subquery)) {\n\t\t\t\t\tconst entries = Object.entries(field._.selectedFields) as [string, SQL.Aliased | Column | SQL][];\n\n\t\t\t\t\tif (entries.length === 1) {\n\t\t\t\t\t\tconst entry = entries[0]![1];\n\n\t\t\t\t\t\tconst fieldDecoder = is(entry, SQL)\n\t\t\t\t\t\t\t? entry.decoder\n\t\t\t\t\t\t\t: is(entry, Column)\n\t\t\t\t\t\t\t? { mapFromDriverValue: (v: any) => entry.mapFromDriverValue(v) }\n\t\t\t\t\t\t\t: entry.sql.decoder;\n\n\t\t\t\t\t\tif (fieldDecoder) {\n\t\t\t\t\t\t\tfield._.sql.decoder = fieldDecoder;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tchunk.push(field);\n\t\t\t\t}\n\n\t\t\t\tif (i < columnsLen - 1) {\n\t\t\t\t\tchunk.push(sql`, `);\n\t\t\t\t}\n\n\t\t\t\treturn chunk;\n\t\t\t});\n\n\t\treturn sql.join(chunks);\n\t}\n\n\tprivate buildJoins(joins: PgSelectJoinConfig[] | undefined): SQL | undefined {\n\t\tif (!joins || joins.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst joinsArray: SQL[] = [];\n\n\t\tfor (const [index, joinMeta] of joins.entries()) {\n\t\t\tif (index === 0) {\n\t\t\t\tjoinsArray.push(sql` `);\n\t\t\t}\n\t\t\tconst table = joinMeta.table;\n\t\t\tconst lateralSql = joinMeta.lateral ? sql` lateral` : undefined;\n\t\t\tconst onSql = joinMeta.on ? sql` on ${joinMeta.on}` : undefined;\n\n\t\t\tif (is(table, PgTable)) {\n\t\t\t\tconst tableName = table[PgTable.Symbol.Name];\n\t\t\t\tconst tableSchema = table[PgTable.Symbol.Schema];\n\t\t\t\tconst origTableName = table[PgTable.Symbol.OriginalName];\n\t\t\t\tconst alias = tableName === origTableName ? undefined : joinMeta.alias;\n\t\t\t\tjoinsArray.push(\n\t\t\t\t\tsql`${sql.raw(joinMeta.joinType)} join${lateralSql} ${\n\t\t\t\t\t\ttableSchema ? sql`${sql.identifier(tableSchema)}.` : undefined\n\t\t\t\t\t}${sql.identifier(origTableName)}${alias && sql` ${sql.identifier(alias)}`}${onSql}`,\n\t\t\t\t);\n\t\t\t} else if (is(table, View)) {\n\t\t\t\tconst viewName = table[ViewBaseConfig].name;\n\t\t\t\tconst viewSchema = table[ViewBaseConfig].schema;\n\t\t\t\tconst origViewName = table[ViewBaseConfig].originalName;\n\t\t\t\tconst alias = viewName === origViewName ? undefined : joinMeta.alias;\n\t\t\t\tjoinsArray.push(\n\t\t\t\t\tsql`${sql.raw(joinMeta.joinType)} join${lateralSql} ${\n\t\t\t\t\t\tviewSchema ? sql`${sql.identifier(viewSchema)}.` : undefined\n\t\t\t\t\t}${sql.identifier(origViewName)}${alias && sql` ${sql.identifier(alias)}`}${onSql}`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tjoinsArray.push(\n\t\t\t\t\tsql`${sql.raw(joinMeta.joinType)} join${lateralSql} ${table}${onSql}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (index < joins.length - 1) {\n\t\t\t\tjoinsArray.push(sql` `);\n\t\t\t}\n\t\t}\n\n\t\treturn sql.join(joinsArray);\n\t}\n\n\tprivate buildFromTable(\n\t\ttable: SQL | Subquery | PgViewBase | PgTable | undefined,\n\t): SQL | Subquery | PgViewBase | PgTable | undefined {\n\t\tif (is(table, Table) && table[Table.Symbol.IsAlias]) {\n\t\t\tlet fullName = sql`${sql.identifier(table[Table.Symbol.OriginalName])}`;\n\t\t\tif (table[Table.Symbol.Schema]) {\n\t\t\t\tfullName = sql`${sql.identifier(table[Table.Symbol.Schema]!)}.${fullName}`;\n\t\t\t}\n\t\t\treturn sql`${fullName} ${sql.identifier(table[Table.Symbol.Name])}`;\n\t\t}\n\n\t\treturn table;\n\t}\n\n\tbuildSelectQuery(\n\t\t{\n\t\t\twithList,\n\t\t\tfields,\n\t\t\tfieldsFlat,\n\t\t\twhere,\n\t\t\thaving,\n\t\t\ttable,\n\t\t\tjoins,\n\t\t\torderBy,\n\t\t\tgroupBy,\n\t\t\tlimit,\n\t\t\toffset,\n\t\t\tlockingClause,\n\t\t\tdistinct,\n\t\t\tsetOperators,\n\t\t}: PgSelectConfig,\n\t): SQL {\n\t\tconst fieldsList = fieldsFlat ?? orderSelectedFields<PgColumn>(fields);\n\t\tfor (const f of fieldsList) {\n\t\t\tif (\n\t\t\t\tis(f.field, Column)\n\t\t\t\t&& getTableName(f.field.table)\n\t\t\t\t\t!== (is(table, Subquery)\n\t\t\t\t\t\t? table._.alias\n\t\t\t\t\t\t: is(table, PgViewBase)\n\t\t\t\t\t\t? table[ViewBaseConfig].name\n\t\t\t\t\t\t: is(table, SQL)\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: getTableName(table))\n\t\t\t\t&& !((table) =>\n\t\t\t\t\tjoins?.some(({ alias }) =>\n\t\t\t\t\t\talias === (table[Table.Symbol.IsAlias] ? getTableName(table) : table[Table.Symbol.BaseName])\n\t\t\t\t\t))(f.field.table)\n\t\t\t) {\n\t\t\t\tconst tableName = getTableName(f.field.table);\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Your \"${\n\t\t\t\t\t\tf.path.join('->')\n\t\t\t\t\t}\" field references a column \"${tableName}\".\"${f.field.name}\", but the table \"${tableName}\" is not part of the query! Did you forget to join it?`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst isSingleTable = !joins || joins.length === 0;\n\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tlet distinctSql: SQL | undefined;\n\t\tif (distinct) {\n\t\t\tdistinctSql = distinct === true ? sql` distinct` : sql` distinct on (${sql.join(distinct.on, sql`, `)})`;\n\t\t}\n\n\t\tconst selection = this.buildSelection(fieldsList, { isSingleTable });\n\n\t\tconst tableSql = this.buildFromTable(table);\n\n\t\tconst joinsSql = this.buildJoins(joins);\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst havingSql = having ? sql` having ${having}` : undefined;\n\n\t\tlet orderBySql;\n\t\tif (orderBy && orderBy.length > 0) {\n\t\t\torderBySql = sql` order by ${sql.join(orderBy, sql`, `)}`;\n\t\t}\n\n\t\tlet groupBySql;\n\t\tif (groupBy && groupBy.length > 0) {\n\t\t\tgroupBySql = sql` group by ${sql.join(groupBy, sql`, `)}`;\n\t\t}\n\n\t\tconst limitSql = typeof limit === 'object' || (typeof limit === 'number' && limit >= 0)\n\t\t\t? sql` limit ${limit}`\n\t\t\t: undefined;\n\n\t\tconst offsetSql = offset ? sql` offset ${offset}` : undefined;\n\n\t\tconst lockingClauseSql = sql.empty();\n\t\tif (lockingClause) {\n\t\t\tconst clauseSql = sql` for ${sql.raw(lockingClause.strength)}`;\n\t\t\tif (lockingClause.config.of) {\n\t\t\t\tclauseSql.append(\n\t\t\t\t\tsql` of ${\n\t\t\t\t\t\tsql.join(\n\t\t\t\t\t\t\tArray.isArray(lockingClause.config.of) ? lockingClause.config.of : [lockingClause.config.of],\n\t\t\t\t\t\t\tsql`, `,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (lockingClause.config.noWait) {\n\t\t\t\tclauseSql.append(sql` nowait`);\n\t\t\t} else if (lockingClause.config.skipLocked) {\n\t\t\t\tclauseSql.append(sql` skip locked`);\n\t\t\t}\n\t\t\tlockingClauseSql.append(clauseSql);\n\t\t}\n\t\tconst finalQuery =\n\t\t\tsql`${withSql}select${distinctSql} ${selection} from ${tableSql}${joinsSql}${whereSql}${groupBySql}${havingSql}${orderBySql}${limitSql}${offsetSql}${lockingClauseSql}`;\n\n\t\tif (setOperators.length > 0) {\n\t\t\treturn this.buildSetOperations(finalQuery, setOperators);\n\t\t}\n\n\t\treturn finalQuery;\n\t}\n\n\tbuildSetOperations(leftSelect: SQL, setOperators: PgSelectConfig['setOperators']): SQL {\n\t\tconst [setOperator, ...rest] = setOperators;\n\n\t\tif (!setOperator) {\n\t\t\tthrow new Error('Cannot pass undefined values to any set operator');\n\t\t}\n\n\t\tif (rest.length === 0) {\n\t\t\treturn this.buildSetOperationQuery({ leftSelect, setOperator });\n\t\t}\n\n\t\t// Some recursive magic here\n\t\treturn this.buildSetOperations(\n\t\t\tthis.buildSetOperationQuery({ leftSelect, setOperator }),\n\t\t\trest,\n\t\t);\n\t}\n\n\tbuildSetOperationQuery({\n\t\tleftSelect,\n\t\tsetOperator: { type, isAll, rightSelect, limit, orderBy, offset },\n\t}: { leftSelect: SQL; setOperator: PgSelectConfig['setOperators'][number] }): SQL {\n\t\tconst leftChunk = sql`(${leftSelect.getSQL()}) `;\n\t\tconst rightChunk = sql`(${rightSelect.getSQL()})`;\n\n\t\tlet orderBySql;\n\t\tif (orderBy && orderBy.length > 0) {\n\t\t\tconst orderByValues: (SQL<unknown> | Name)[] = [];\n\n\t\t\t// The next bit is necessary because the sql operator replaces ${table.column} with `table`.`column`\n\t\t\t// which is invalid Sql syntax, Table from one of the SELECTs cannot be used in global ORDER clause\n\t\t\tfor (const singleOrderBy of orderBy) {\n\t\t\t\tif (is(singleOrderBy, PgColumn)) {\n\t\t\t\t\torderByValues.push(sql.identifier(singleOrderBy.name));\n\t\t\t\t} else if (is(singleOrderBy, SQL)) {\n\t\t\t\t\tfor (let i = 0; i < singleOrderBy.queryChunks.length; i++) {\n\t\t\t\t\t\tconst chunk = singleOrderBy.queryChunks[i];\n\n\t\t\t\t\t\tif (is(chunk, PgColumn)) {\n\t\t\t\t\t\t\tsingleOrderBy.queryChunks[i] = sql.identifier(chunk.name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\torderByValues.push(sql`${singleOrderBy}`);\n\t\t\t\t} else {\n\t\t\t\t\torderByValues.push(sql`${singleOrderBy}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\torderBySql = sql` order by ${sql.join(orderByValues, sql`, `)} `;\n\t\t}\n\n\t\tconst limitSql = typeof limit === 'object' || (typeof limit === 'number' && limit >= 0)\n\t\t\t? sql` limit ${limit}`\n\t\t\t: undefined;\n\n\t\tconst operatorChunk = sql.raw(`${type} ${isAll ? 'all ' : ''}`);\n\n\t\tconst offsetSql = offset ? sql` offset ${offset}` : undefined;\n\n\t\treturn sql`${leftChunk}${operatorChunk}${rightChunk}${orderBySql}${limitSql}${offsetSql}`;\n\t}\n\n\tbuildInsertQuery(\n\t\t{ table, values: valuesOrSelect, onConflict, returning, withList, select, overridingSystemValue_ }: PgInsertConfig,\n\t): SQL {\n\t\tconst valuesSqlList: ((SQLChunk | SQL)[] | SQL)[] = [];\n\t\tconst columns: Record<string, PgColumn> = table[Table.Symbol.Columns];\n\n\t\tconst colEntries: [string, PgColumn][] = Object.entries(columns).filter(([_, col]) => !col.shouldDisableInsert());\n\n\t\tconst insertOrder = colEntries.map(\n\t\t\t([, column]) => sql.identifier(this.casing.getColumnCasing(column)),\n\t\t);\n\n\t\tif (select) {\n\t\t\tconst select = valuesOrSelect as AnyPgSelectQueryBuilder | SQL;\n\n\t\t\tif (is(select, SQL)) {\n\t\t\t\tvaluesSqlList.push(select);\n\t\t\t} else {\n\t\t\t\tvaluesSqlList.push(select.getSQL());\n\t\t\t}\n\t\t} else {\n\t\t\tconst values = valuesOrSelect as Record<string, Param | SQL>[];\n\t\t\tvaluesSqlList.push(sql.raw('values '));\n\n\t\t\tfor (const [valueIndex, value] of values.entries()) {\n\t\t\t\tconst valueList: (SQLChunk | SQL)[] = [];\n\t\t\t\tfor (const [fieldName, col] of colEntries) {\n\t\t\t\t\tconst colValue = value[fieldName];\n\t\t\t\t\tif (colValue === undefined || (is(colValue, Param) && colValue.value === undefined)) {\n\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t\tif (col.defaultFn !== undefined) {\n\t\t\t\t\t\t\tconst defaultFnResult = col.defaultFn();\n\t\t\t\t\t\t\tconst defaultValue = is(defaultFnResult, SQL) ? defaultFnResult : sql.param(defaultFnResult, col);\n\t\t\t\t\t\t\tvalueList.push(defaultValue);\n\t\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t\t} else if (!col.default && col.onUpdateFn !== undefined) {\n\t\t\t\t\t\t\tconst onUpdateFnResult = col.onUpdateFn();\n\t\t\t\t\t\t\tconst newValue = is(onUpdateFnResult, SQL) ? onUpdateFnResult : sql.param(onUpdateFnResult, col);\n\t\t\t\t\t\t\tvalueList.push(newValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvalueList.push(sql`default`);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalueList.push(colValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvaluesSqlList.push(valueList);\n\t\t\t\tif (valueIndex < values.length - 1) {\n\t\t\t\t\tvaluesSqlList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst valuesSql = sql.join(valuesSqlList);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst onConflictSql = onConflict ? sql` on conflict ${onConflict}` : undefined;\n\n\t\tconst overridingSql = overridingSystemValue_ === true ? sql`overriding system value ` : undefined;\n\n\t\treturn sql`${withSql}insert into ${table} ${insertOrder} ${overridingSql}${valuesSql}${onConflictSql}${returningSql}`;\n\t}\n\n\tbuildRefreshMaterializedViewQuery(\n\t\t{ view, concurrently, withNoData }: { view: PgMaterializedView; concurrently?: boolean; withNoData?: boolean },\n\t): SQL {\n\t\tconst concurrentlySql = concurrently ? sql` concurrently` : undefined;\n\t\tconst withNoDataSql = withNoData ? sql` with no data` : undefined;\n\n\t\treturn sql`refresh materialized view${concurrentlySql} ${view}${withNoDataSql}`;\n\t}\n\n\tprepareTyping(encoder: DriverValueEncoder<unknown, unknown>): QueryTypingsValue {\n\t\tif (is(encoder, PgJsonb) || is(encoder, PgJson)) {\n\t\t\treturn 'json';\n\t\t} else if (is(encoder, PgNumeric)) {\n\t\t\treturn 'decimal';\n\t\t} else if (is(encoder, PgTime)) {\n\t\t\treturn 'time';\n\t\t} else if (is(encoder, PgTimestamp) || is(encoder, PgTimestampString)) {\n\t\t\treturn 'timestamp';\n\t\t} else if (is(encoder, PgDate) || is(encoder, PgDateString)) {\n\t\t\treturn 'date';\n\t\t} else if (is(encoder, PgUUID)) {\n\t\t\treturn 'uuid';\n\t\t} else {\n\t\t\treturn 'none';\n\t\t}\n\t}\n\n\tsqlToQuery(sql: SQL, invokeSource?: 'indexes' | undefined): QueryWithTypings {\n\t\treturn sql.toQuery({\n\t\t\tcasing: this.casing,\n\t\t\tescapeName: this.escapeName,\n\t\t\tescapeParam: this.escapeParam,\n\t\t\tescapeString: this.escapeString,\n\t\t\tprepareTyping: this.prepareTyping,\n\t\t\tinvokeSource,\n\t\t});\n\t}\n\n\t// buildRelationalQueryWithPK({\n\t// \tfullSchema,\n\t// \tschema,\n\t// \ttableNamesMap,\n\t// \ttable,\n\t// \ttableConfig,\n\t// \tqueryConfig: config,\n\t// \ttableAlias,\n\t// \tisRoot = false,\n\t// \tjoinOn,\n\t// }: {\n\t// \tfullSchema: Record<string, unknown>;\n\t// \tschema: TablesRelationalConfig;\n\t// \ttableNamesMap: Record<string, string>;\n\t// \ttable: PgTable;\n\t// \ttableConfig: TableRelationalConfig;\n\t// \tqueryConfig: true | DBQueryConfig<'many', true>;\n\t// \ttableAlias: string;\n\t// \tisRoot?: boolean;\n\t// \tjoinOn?: SQL;\n\t// }): BuildRelationalQueryResult<PgTable, PgColumn> {\n\t// \t// For { \"<relation>\": true }, return a table with selection of all columns\n\t// \tif (config === true) {\n\t// \t\tconst selectionEntries = Object.entries(tableConfig.columns);\n\t// \t\tconst selection: BuildRelationalQueryResult<PgTable, PgColumn>['selection'] = selectionEntries.map((\n\t// \t\t\t[key, value],\n\t// \t\t) => ({\n\t// \t\t\tdbKey: value.name,\n\t// \t\t\ttsKey: key,\n\t// \t\t\tfield: value as PgColumn,\n\t// \t\t\trelationTableTsKey: undefined,\n\t// \t\t\tisJson: false,\n\t// \t\t\tselection: [],\n\t// \t\t}));\n\n\t// \t\treturn {\n\t// \t\t\ttableTsKey: tableConfig.tsName,\n\t// \t\t\tsql: table,\n\t// \t\t\tselection,\n\t// \t\t};\n\t// \t}\n\n\t// \t// let selection: BuildRelationalQueryResult<PgTable, PgColumn>['selection'] = [];\n\t// \t// let selectionForBuild = selection;\n\n\t// \tconst aliasedColumns = Object.fromEntries(\n\t// \t\tObject.entries(tableConfig.columns).map(([key, value]) => [key, aliasedTableColumn(value, tableAlias)]),\n\t// \t);\n\n\t// \tconst aliasedRelations = Object.fromEntries(\n\t// \t\tObject.entries(tableConfig.relations).map(([key, value]) => [key, aliasedRelation(value, tableAlias)]),\n\t// \t);\n\n\t// \tconst aliasedFields = Object.assign({}, aliasedColumns, aliasedRelations);\n\n\t// \tlet where, hasUserDefinedWhere;\n\t// \tif (config.where) {\n\t// \t\tconst whereSql = typeof config.where === 'function' ? config.where(aliasedFields, operators) : config.where;\n\t// \t\twhere = whereSql && mapColumnsInSQLToAlias(whereSql, tableAlias);\n\t// \t\thasUserDefinedWhere = !!where;\n\t// \t}\n\t// \twhere = and(joinOn, where);\n\n\t// \t// const fieldsSelection: { tsKey: string; value: PgColumn | SQL.Aliased; isExtra?: boolean }[] = [];\n\t// \tlet joins: Join[] = [];\n\t// \tlet selectedColumns: string[] = [];\n\n\t// \t// Figure out which columns to select\n\t// \tif (config.columns) {\n\t// \t\tlet isIncludeMode = false;\n\n\t// \t\tfor (const [field, value] of Object.entries(config.columns)) {\n\t// \t\t\tif (value === undefined) {\n\t// \t\t\t\tcontinue;\n\t// \t\t\t}\n\n\t// \t\t\tif (field in tableConfig.columns) {\n\t// \t\t\t\tif (!isIncludeMode && value === true) {\n\t// \t\t\t\t\tisIncludeMode = true;\n\t// \t\t\t\t}\n\t// \t\t\t\tselectedColumns.push(field);\n\t// \t\t\t}\n\t// \t\t}\n\n\t// \t\tif (selectedColumns.length > 0) {\n\t// \t\t\tselectedColumns = isIncludeMode\n\t// \t\t\t\t? selectedColumns.filter((c) => config.columns?.[c] === true)\n\t// \t\t\t\t: Object.keys(tableConfig.columns).filter((key) => !selectedColumns.includes(key));\n\t// \t\t}\n\t// \t} else {\n\t// \t\t// Select all columns if selection is not specified\n\t// \t\tselectedColumns = Object.keys(tableConfig.columns);\n\t// \t}\n\n\t// \t// for (const field of selectedColumns) {\n\t// \t// \tconst column = tableConfig.columns[field]! as PgColumn;\n\t// \t// \tfieldsSelection.push({ tsKey: field, value: column });\n\t// \t// }\n\n\t// \tlet initiallySelectedRelations: {\n\t// \t\ttsKey: string;\n\t// \t\tqueryConfig: true | DBQueryConfig<'many', false>;\n\t// \t\trelation: Relation;\n\t// \t}[] = [];\n\n\t// \t// let selectedRelations: BuildRelationalQueryResult<PgTable, PgColumn>['selection'] = [];\n\n\t// \t// Figure out which relations to select\n\t// \tif (config.with) {\n\t// \t\tinitiallySelectedRelations = Object.entries(config.with)\n\t// \t\t\t.filter((entry): entry is [typeof entry[0], NonNullable<typeof entry[1]>] => !!entry[1])\n\t// \t\t\t.map(([tsKey, queryConfig]) => ({ tsKey, queryConfig, relation: tableConfig.relations[tsKey]! }));\n\t// \t}\n\n\t// \tconst manyRelations = initiallySelectedRelations.filter((r) =>\n\t// \t\tis(r.relation, Many)\n\t// \t\t&& (schema[tableNamesMap[r.relation.referencedTable[Table.Symbol.Name]]!]?.primaryKey.length ?? 0) > 0\n\t// \t);\n\t// \t// If this is the last Many relation (or there are no Many relations), we are on the innermost subquery level\n\t// \tconst isInnermostQuery = manyRelations.length < 2;\n\n\t// \tconst selectedExtras: {\n\t// \t\ttsKey: string;\n\t// \t\tvalue: SQL.Aliased;\n\t// \t}[] = [];\n\n\t// \t// Figure out which extras to select\n\t// \tif (isInnermostQuery && config.extras) {\n\t// \t\tconst extras = typeof config.extras === 'function'\n\t// \t\t\t? config.extras(aliasedFields, { sql })\n\t// \t\t\t: config.extras;\n\t// \t\tfor (const [tsKey, value] of Object.entries(extras)) {\n\t// \t\t\tselectedExtras.push({\n\t// \t\t\t\ttsKey,\n\t// \t\t\t\tvalue: mapColumnsInAliasedSQLToAlias(value, tableAlias),\n\t// \t\t\t});\n\t// \t\t}\n\t// \t}\n\n\t// \t// Transform `fieldsSelection` into `selection`\n\t// \t// `fieldsSelection` shouldn't be used after this point\n\t// \t// for (const { tsKey, value, isExtra } of fieldsSelection) {\n\t// \t// \tselection.push({\n\t// \t// \t\tdbKey: is(value, SQL.Aliased) ? value.fieldAlias : tableConfig.columns[tsKey]!.name,\n\t// \t// \t\ttsKey,\n\t// \t// \t\tfield: is(value, Column) ? aliasedTableColumn(value, tableAlias) : value,\n\t// \t// \t\trelationTableTsKey: undefined,\n\t// \t// \t\tisJson: false,\n\t// \t// \t\tisExtra,\n\t// \t// \t\tselection: [],\n\t// \t// \t});\n\t// \t// }\n\n\t// \tlet orderByOrig = typeof config.orderBy === 'function'\n\t// \t\t? config.orderBy(aliasedFields, orderByOperators)\n\t// \t\t: config.orderBy ?? [];\n\t// \tif (!Array.isArray(orderByOrig)) {\n\t// \t\torderByOrig = [orderByOrig];\n\t// \t}\n\t// \tconst orderBy = orderByOrig.map((orderByValue) => {\n\t// \t\tif (is(orderByValue, Column)) {\n\t// \t\t\treturn aliasedTableColumn(orderByValue, tableAlias) as PgColumn;\n\t// \t\t}\n\t// \t\treturn mapColumnsInSQLToAlias(orderByValue, tableAlias);\n\t// \t});\n\n\t// \tconst limit = isInnermostQuery ? config.limit : undefined;\n\t// \tconst offset = isInnermostQuery ? config.offset : undefined;\n\n\t// \t// For non-root queries without additional config except columns, return a table with selection\n\t// \tif (\n\t// \t\t!isRoot\n\t// \t\t&& initiallySelectedRelations.length === 0\n\t// \t\t&& selectedExtras.length === 0\n\t// \t\t&& !where\n\t// \t\t&& orderBy.length === 0\n\t// \t\t&& limit === undefined\n\t// \t\t&& offset === undefined\n\t// \t) {\n\t// \t\treturn {\n\t// \t\t\ttableTsKey: tableConfig.tsName,\n\t// \t\t\tsql: table,\n\t// \t\t\tselection: selectedColumns.map((key) => ({\n\t// \t\t\t\tdbKey: tableConfig.columns[key]!.name,\n\t// \t\t\t\ttsKey: key,\n\t// \t\t\t\tfield: tableConfig.columns[key] as PgColumn,\n\t// \t\t\t\trelationTableTsKey: undefined,\n\t// \t\t\t\tisJson: false,\n\t// \t\t\t\tselection: [],\n\t// \t\t\t})),\n\t// \t\t};\n\t// \t}\n\n\t// \tconst selectedRelationsWithoutPK:\n\n\t// \t// Process all relations without primary keys, because they need to be joined differently and will all be on the same query level\n\t// \tfor (\n\t// \t\tconst {\n\t// \t\t\ttsKey: selectedRelationTsKey,\n\t// \t\t\tqueryConfig: selectedRelationConfigValue,\n\t// \t\t\trelation,\n\t// \t\t} of initiallySelectedRelations\n\t// \t) {\n\t// \t\tconst normalizedRelation = normalizeRelation(schema, tableNamesMap, relation);\n\t// \t\tconst relationTableName = relation.referencedTable[Table.Symbol.Name];\n\t// \t\tconst relationTableTsName = tableNamesMap[relationTableName]!;\n\t// \t\tconst relationTable = schema[relationTableTsName]!;\n\n\t// \t\tif (relationTable.primaryKey.length > 0) {\n\t// \t\t\tcontinue;\n\t// \t\t}\n\n\t// \t\tconst relationTableAlias = `${tableAlias}_${selectedRelationTsKey}`;\n\t// \t\tconst joinOn = and(\n\t// \t\t\t...normalizedRelation.fields.map((field, i) =>\n\t// \t\t\t\teq(\n\t// \t\t\t\t\taliasedTableColumn(normalizedRelation.references[i]!, relationTableAlias),\n\t// \t\t\t\t\taliasedTableColumn(field, tableAlias),\n\t// \t\t\t\t)\n\t// \t\t\t),\n\t// \t\t);\n\t// \t\tconst builtRelation = this.buildRelationalQueryWithoutPK({\n\t// \t\t\tfullSchema,\n\t// \t\t\tschema,\n\t// \t\t\ttableNamesMap,\n\t// \t\t\ttable: fullSchema[relationTableTsName] as PgTable,\n\t// \t\t\ttableConfig: schema[relationTableTsName]!,\n\t// \t\t\tqueryConfig: selectedRelationConfigValue,\n\t// \t\t\ttableAlias: relationTableAlias,\n\t// \t\t\tjoinOn,\n\t// \t\t\tnestedQueryRelation: relation,\n\t// \t\t});\n\t// \t\tconst field = sql`${sql.identifier(relationTableAlias)}.${sql.identifier('data')}`.as(selectedRelationTsKey);\n\t// \t\tjoins.push({\n\t// \t\t\ton: sql`true`,\n\t// \t\t\ttable: new Subquery(builtRelation.sql as SQL, {}, relationTableAlias),\n\t// \t\t\talias: relationTableAlias,\n\t// \t\t\tjoinType: 'left',\n\t// \t\t\tlateral: true,\n\t// \t\t});\n\t// \t\tselectedRelations.push({\n\t// \t\t\tdbKey: selectedRelationTsKey,\n\t// \t\t\ttsKey: selectedRelationTsKey,\n\t// \t\t\tfield,\n\t// \t\t\trelationTableTsKey: relationTableTsName,\n\t// \t\t\tisJson: true,\n\t// \t\t\tselection: builtRelation.selection,\n\t// \t\t});\n\t// \t}\n\n\t// \tconst oneRelations = initiallySelectedRelations.filter((r): r is typeof r & { relation: One } =>\n\t// \t\tis(r.relation, One)\n\t// \t);\n\n\t// \t// Process all One relations with PKs, because they can all be joined on the same level\n\t// \tfor (\n\t// \t\tconst {\n\t// \t\t\ttsKey: selectedRelationTsKey,\n\t// \t\t\tqueryConfig: selectedRelationConfigValue,\n\t// \t\t\trelation,\n\t// \t\t} of oneRelations\n\t// \t) {\n\t// \t\tconst normalizedRelation = normalizeRelation(schema, tableNamesMap, relation);\n\t// \t\tconst relationTableName = relation.referencedTable[Table.Symbol.Name];\n\t// \t\tconst relationTableTsName = tableNamesMap[relationTableName]!;\n\t// \t\tconst relationTableAlias = `${tableAlias}_${selectedRelationTsKey}`;\n\t// \t\tconst relationTable = schema[relationTableTsName]!;\n\n\t// \t\tif (relationTable.primaryKey.length === 0) {\n\t// \t\t\tcontinue;\n\t// \t\t}\n\n\t// \t\tconst joinOn = and(\n\t// \t\t\t...normalizedRelation.fields.map((field, i) =>\n\t// \t\t\t\teq(\n\t// \t\t\t\t\taliasedTableColumn(normalizedRelation.references[i]!, relationTableAlias),\n\t// \t\t\t\t\taliasedTableColumn(field, tableAlias),\n\t// \t\t\t\t)\n\t// \t\t\t),\n\t// \t\t);\n\t// \t\tconst builtRelation = this.buildRelationalQueryWithPK({\n\t// \t\t\tfullSchema,\n\t// \t\t\tschema,\n\t// \t\t\ttableNamesMap,\n\t// \t\t\ttable: fullSchema[relationTableTsName] as PgTable,\n\t// \t\t\ttableConfig: schema[relationTableTsName]!,\n\t// \t\t\tqueryConfig: selectedRelationConfigValue,\n\t// \t\t\ttableAlias: relationTableAlias,\n\t// \t\t\tjoinOn,\n\t// \t\t});\n\t// \t\tconst field = sql`case when ${sql.identifier(relationTableAlias)} is null then null else json_build_array(${\n\t// \t\t\tsql.join(\n\t// \t\t\t\tbuiltRelation.selection.map(({ field }) =>\n\t// \t\t\t\t\tis(field, SQL.Aliased)\n\t// \t\t\t\t\t\t? sql`${sql.identifier(relationTableAlias)}.${sql.identifier(field.fieldAlias)}`\n\t// \t\t\t\t\t\t: is(field, Column)\n\t// \t\t\t\t\t\t? aliasedTableColumn(field, relationTableAlias)\n\t// \t\t\t\t\t\t: field\n\t// \t\t\t\t),\n\t// \t\t\t\tsql`, `,\n\t// \t\t\t)\n\t// \t\t}) end`.as(selectedRelationTsKey);\n\t// \t\tconst isLateralJoin = is(builtRelation.sql, SQL);\n\t// \t\tjoins.push({\n\t// \t\t\ton: isLateralJoin ? sql`true` : joinOn,\n\t// \t\t\ttable: is(builtRelation.sql, SQL)\n\t// \t\t\t\t? new Subquery(builtRelation.sql, {}, relationTableAlias)\n\t// \t\t\t\t: aliasedTable(builtRelation.sql, relationTableAlias),\n\t// \t\t\talias: relationTableAlias,\n\t// \t\t\tjoinType: 'left',\n\t// \t\t\tlateral: is(builtRelation.sql, SQL),\n\t// \t\t});\n\t// \t\tselectedRelations.push({\n\t// \t\t\tdbKey: selectedRelationTsKey,\n\t// \t\t\ttsKey: selectedRelationTsKey,\n\t// \t\t\tfield,\n\t// \t\t\trelationTableTsKey: relationTableTsName,\n\t// \t\t\tisJson: true,\n\t// \t\t\tselection: builtRelation.selection,\n\t// \t\t});\n\t// \t}\n\n\t// \tlet distinct: PgSelectConfig['distinct'];\n\t// \tlet tableFrom: PgTable | Subquery = table;\n\n\t// \t// Process first Many relation - each one requires a nested subquery\n\t// \tconst manyRelation = manyRelations[0];\n\t// \tif (manyRelation) {\n\t// \t\tconst {\n\t// \t\t\ttsKey: selectedRelationTsKey,\n\t// \t\t\tqueryConfig: selectedRelationQueryConfig,\n\t// \t\t\trelation,\n\t// \t\t} = manyRelation;\n\n\t// \t\tdistinct = {\n\t// \t\t\ton: tableConfig.primaryKey.map((c) => aliasedTableColumn(c as PgColumn, tableAlias)),\n\t// \t\t};\n\n\t// \t\tconst normalizedRelation = normalizeRelation(schema, tableNamesMap, relation);\n\t// \t\tconst relationTableName = relation.referencedTable[Table.Symbol.Name];\n\t// \t\tconst relationTableTsName = tableNamesMap[relationTableName]!;\n\t// \t\tconst relationTableAlias = `${tableAlias}_${selectedRelationTsKey}`;\n\t// \t\tconst joinOn = and(\n\t// \t\t\t...normalizedRelation.fields.map((field, i) =>\n\t// \t\t\t\teq(\n\t// \t\t\t\t\taliasedTableColumn(normalizedRelation.references[i]!, relationTableAlias),\n\t// \t\t\t\t\taliasedTableColumn(field, tableAlias),\n\t// \t\t\t\t)\n\t// \t\t\t),\n\t// \t\t);\n\n\t// \t\tconst builtRelationJoin = this.buildRelationalQueryWithPK({\n\t// \t\t\tfullSchema,\n\t// \t\t\tschema,\n\t// \t\t\ttableNamesMap,\n\t// \t\t\ttable: fullSchema[relationTableTsName] as PgTable,\n\t// \t\t\ttableConfig: schema[relationTableTsName]!,\n\t// \t\t\tqueryConfig: selectedRelationQueryConfig,\n\t// \t\t\ttableAlias: relationTableAlias,\n\t// \t\t\tjoinOn,\n\t// \t\t});\n\n\t// \t\tconst builtRelationSelectionField = sql`case when ${\n\t// \t\t\tsql.identifier(relationTableAlias)\n\t// \t\t} is null then '[]' else json_agg(json_build_array(${\n\t// \t\t\tsql.join(\n\t// \t\t\t\tbuiltRelationJoin.selection.map(({ field }) =>\n\t// \t\t\t\t\tis(field, SQL.Aliased)\n\t// \t\t\t\t\t\t? sql`${sql.identifier(relationTableAlias)}.${sql.identifier(field.fieldAlias)}`\n\t// \t\t\t\t\t\t: is(field, Column)\n\t// \t\t\t\t\t\t? aliasedTableColumn(field, relationTableAlias)\n\t// \t\t\t\t\t\t: field\n\t// \t\t\t\t),\n\t// \t\t\t\tsql`, `,\n\t// \t\t\t)\n\t// \t\t})) over (partition by ${sql.join(distinct.on, sql`, `)}) end`.as(selectedRelationTsKey);\n\t// \t\tconst isLateralJoin = is(builtRelationJoin.sql, SQL);\n\t// \t\tjoins.push({\n\t// \t\t\ton: isLateralJoin ? sql`true` : joinOn,\n\t// \t\t\ttable: isLateralJoin\n\t// \t\t\t\t? new Subquery(builtRelationJoin.sql as SQL, {}, relationTableAlias)\n\t// \t\t\t\t: aliasedTable(builtRelationJoin.sql as PgTable, relationTableAlias),\n\t// \t\t\talias: relationTableAlias,\n\t// \t\t\tjoinType: 'left',\n\t// \t\t\tlateral: isLateralJoin,\n\t// \t\t});\n\n\t// \t\t// Build the \"from\" subquery with the remaining Many relations\n\t// \t\tconst builtTableFrom = this.buildRelationalQueryWithPK({\n\t// \t\t\tfullSchema,\n\t// \t\t\tschema,\n\t// \t\t\ttableNamesMap,\n\t// \t\t\ttable,\n\t// \t\t\ttableConfig,\n\t// \t\t\tqueryConfig: {\n\t// \t\t\t\t...config,\n\t// \t\t\t\twhere: undefined,\n\t// \t\t\t\torderBy: undefined,\n\t// \t\t\t\tlimit: undefined,\n\t// \t\t\t\toffset: undefined,\n\t// \t\t\t\twith: manyRelations.slice(1).reduce<NonNullable<typeof config['with']>>(\n\t// \t\t\t\t\t(result, { tsKey, queryConfig: configValue }) => {\n\t// \t\t\t\t\t\tresult[tsKey] = configValue;\n\t// \t\t\t\t\t\treturn result;\n\t// \t\t\t\t\t},\n\t// \t\t\t\t\t{},\n\t// \t\t\t\t),\n\t// \t\t\t},\n\t// \t\t\ttableAlias,\n\t// \t\t});\n\n\t// \t\tselectedRelations.push({\n\t// \t\t\tdbKey: selectedRelationTsKey,\n\t// \t\t\ttsKey: selectedRelationTsKey,\n\t// \t\t\tfield: builtRelationSelectionField,\n\t// \t\t\trelationTableTsKey: relationTableTsName,\n\t// \t\t\tisJson: true,\n\t// \t\t\tselection: builtRelationJoin.selection,\n\t// \t\t});\n\n\t// \t\t// selection = builtTableFrom.selection.map((item) =>\n\t// \t\t// \tis(item.field, SQL.Aliased)\n\t// \t\t// \t\t? { ...item, field: sql`${sql.identifier(tableAlias)}.${sql.identifier(item.field.fieldAlias)}` }\n\t// \t\t// \t\t: item\n\t// \t\t// );\n\t// \t\t// selectionForBuild = [{\n\t// \t\t// \tdbKey: '*',\n\t// \t\t// \ttsKey: '*',\n\t// \t\t// \tfield: sql`${sql.identifier(tableAlias)}.*`,\n\t// \t\t// \tselection: [],\n\t// \t\t// \tisJson: false,\n\t// \t\t// \trelationTableTsKey: undefined,\n\t// \t\t// }];\n\t// \t\t// const newSelectionItem: (typeof selection)[number] = {\n\t// \t\t// \tdbKey: selectedRelationTsKey,\n\t// \t\t// \ttsKey: selectedRelationTsKey,\n\t// \t\t// \tfield,\n\t// \t\t// \trelationTableTsKey: relationTableTsName,\n\t// \t\t// \tisJson: true,\n\t// \t\t// \tselection: builtRelationJoin.selection,\n\t// \t\t// };\n\t// \t\t// selection.push(newSelectionItem);\n\t// \t\t// selectionForBuild.push(newSelectionItem);\n\n\t// \t\ttableFrom = is(builtTableFrom.sql, PgTable)\n\t// \t\t\t? builtTableFrom.sql\n\t// \t\t\t: new Subquery(builtTableFrom.sql, {}, tableAlias);\n\t// \t}\n\n\t// \tif (selectedColumns.length === 0 && selectedRelations.length === 0 && selectedExtras.length === 0) {\n\t// \t\tthrow new DrizzleError(`No fields selected for table \"${tableConfig.tsName}\" (\"${tableAlias}\")`);\n\t// \t}\n\n\t// \tlet selection: BuildRelationalQueryResult<PgTable, PgColumn>['selection'];\n\n\t// \tfunction prepareSelectedColumns() {\n\t// \t\treturn selectedColumns.map((key) => ({\n\t// \t\t\tdbKey: tableConfig.columns[key]!.name,\n\t// \t\t\ttsKey: key,\n\t// \t\t\tfield: tableConfig.columns[key] as PgColumn,\n\t// \t\t\trelationTableTsKey: undefined,\n\t// \t\t\tisJson: false,\n\t// \t\t\tselection: [],\n\t// \t\t}));\n\t// \t}\n\n\t// \tfunction prepareSelectedExtras() {\n\t// \t\treturn selectedExtras.map((item) => ({\n\t// \t\t\tdbKey: item.value.fieldAlias,\n\t// \t\t\ttsKey: item.tsKey,\n\t// \t\t\tfield: item.value,\n\t// \t\t\trelationTableTsKey: undefined,\n\t// \t\t\tisJson: false,\n\t// \t\t\tselection: [],\n\t// \t\t}));\n\t// \t}\n\n\t// \tif (isRoot) {\n\t// \t\tselection = [\n\t// \t\t\t...prepareSelectedColumns(),\n\t// \t\t\t...prepareSelectedExtras(),\n\t// \t\t];\n\t// \t}\n\n\t// \tif (hasUserDefinedWhere || orderBy.length > 0) {\n\t// \t\ttableFrom = new Subquery(\n\t// \t\t\tthis.buildSelectQuery({\n\t// \t\t\t\ttable: is(tableFrom, PgTable) ? aliasedTable(tableFrom, tableAlias) : tableFrom,\n\t// \t\t\t\tfields: {},\n\t// \t\t\t\tfieldsFlat: selectionForBuild.map(({ field }) => ({\n\t// \t\t\t\t\tpath: [],\n\t// \t\t\t\t\tfield: is(field, Column) ? aliasedTableColumn(field, tableAlias) : field,\n\t// \t\t\t\t})),\n\t// \t\t\t\tjoins,\n\t// \t\t\t\tdistinct,\n\t// \t\t\t}),\n\t// \t\t\t{},\n\t// \t\t\ttableAlias,\n\t// \t\t);\n\t// \t\tselectionForBuild = selection.map((item) =>\n\t// \t\t\tis(item.field, SQL.Aliased)\n\t// \t\t\t\t? { ...item, field: sql`${sql.identifier(tableAlias)}.${sql.identifier(item.field.fieldAlias)}` }\n\t// \t\t\t\t: item\n\t// \t\t);\n\t// \t\tjoins = [];\n\t// \t\tdistinct = undefined;\n\t// \t}\n\n\t// \tconst result = this.buildSelectQuery({\n\t// \t\ttable: is(tableFrom, PgTable) ? aliasedTable(tableFrom, tableAlias) : tableFrom,\n\t// \t\tfields: {},\n\t// \t\tfieldsFlat: selectionForBuild.map(({ field }) => ({\n\t// \t\t\tpath: [],\n\t// \t\t\tfield: is(field, Column) ? aliasedTableColumn(field, tableAlias) : field,\n\t// \t\t})),\n\t// \t\twhere,\n\t// \t\tlimit,\n\t// \t\toffset,\n\t// \t\tjoins,\n\t// \t\torderBy,\n\t// \t\tdistinct,\n\t// \t});\n\n\t// \treturn {\n\t// \t\ttableTsKey: tableConfig.tsName,\n\t// \t\tsql: result,\n\t// \t\tselection,\n\t// \t};\n\t// }\n\n\tbuildRelationalQueryWithoutPK({\n\t\tfullSchema,\n\t\tschema,\n\t\ttableNamesMap,\n\t\ttable,\n\t\ttableConfig,\n\t\tqueryConfig: config,\n\t\ttableAlias,\n\t\tnestedQueryRelation,\n\t\tjoinOn,\n\t}: {\n\t\tfullSchema: Record<string, unknown>;\n\t\tschema: TablesRelationalConfig;\n\t\ttableNamesMap: Record<string, string>;\n\t\ttable: PgTable;\n\t\ttableConfig: TableRelationalConfig;\n\t\tqueryConfig: true | DBQueryConfig<'many', true>;\n\t\ttableAlias: string;\n\t\tnestedQueryRelation?: Relation;\n\t\tjoinOn?: SQL;\n\t}): BuildRelationalQueryResult<PgTable, PgColumn> {\n\t\tlet selection: BuildRelationalQueryResult<PgTable, PgColumn>['selection'] = [];\n\t\tlet limit, offset, orderBy: NonNullable<PgSelectConfig['orderBy']> = [], where;\n\t\tconst joins: PgSelectJoinConfig[] = [];\n\n\t\tif (config === true) {\n\t\t\tconst selectionEntries = Object.entries(tableConfig.columns);\n\t\t\tselection = selectionEntries.map((\n\t\t\t\t[key, value],\n\t\t\t) => ({\n\t\t\t\tdbKey: value.name,\n\t\t\t\ttsKey: key,\n\t\t\t\tfield: aliasedTableColumn(value as PgColumn, tableAlias),\n\t\t\t\trelationTableTsKey: undefined,\n\t\t\t\tisJson: false,\n\t\t\t\tselection: [],\n\t\t\t}));\n\t\t} else {\n\t\t\tconst aliasedColumns = Object.fromEntries(\n\t\t\t\tObject.entries(tableConfig.columns).map((\n\t\t\t\t\t[key, value],\n\t\t\t\t) => [key, aliasedTableColumn(value, tableAlias)]),\n\t\t\t);\n\n\t\t\tif (config.where) {\n\t\t\t\tconst whereSql = typeof config.where === 'function'\n\t\t\t\t\t? config.where(aliasedColumns, getOperators())\n\t\t\t\t\t: config.where;\n\t\t\t\twhere = whereSql && mapColumnsInSQLToAlias(whereSql, tableAlias);\n\t\t\t}\n\n\t\t\tconst fieldsSelection: { tsKey: string; value: PgColumn | SQL.Aliased }[] = [];\n\t\t\tlet selectedColumns: string[] = [];\n\n\t\t\t// Figure out which columns to select\n\t\t\tif (config.columns) {\n\t\t\t\tlet isIncludeMode = false;\n\n\t\t\t\tfor (const [field, value] of Object.entries(config.columns)) {\n\t\t\t\t\tif (value === undefined) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (field in tableConfig.columns) {\n\t\t\t\t\t\tif (!isIncludeMode && value === true) {\n\t\t\t\t\t\t\tisIncludeMode = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tselectedColumns.push(field);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (selectedColumns.length > 0) {\n\t\t\t\t\tselectedColumns = isIncludeMode\n\t\t\t\t\t\t? selectedColumns.filter((c) => config.columns?.[c] === true)\n\t\t\t\t\t\t: Object.keys(tableConfig.columns).filter((key) => !selectedColumns.includes(key));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Select all columns if selection is not specified\n\t\t\t\tselectedColumns = Object.keys(tableConfig.columns);\n\t\t\t}\n\n\t\t\tfor (const field of selectedColumns) {\n\t\t\t\tconst column = tableConfig.columns[field]! as PgColumn;\n\t\t\t\tfieldsSelection.push({ tsKey: field, value: column });\n\t\t\t}\n\n\t\t\tlet selectedRelations: {\n\t\t\t\ttsKey: string;\n\t\t\t\tqueryConfig: true | DBQueryConfig<'many', false>;\n\t\t\t\trelation: Relation;\n\t\t\t}[] = [];\n\n\t\t\t// Figure out which relations to select\n\t\t\tif (config.with) {\n\t\t\t\tselectedRelations = Object.entries(config.with)\n\t\t\t\t\t.filter((entry): entry is [typeof entry[0], NonNullable<typeof entry[1]>] => !!entry[1])\n\t\t\t\t\t.map(([tsKey, queryConfig]) => ({ tsKey, queryConfig, relation: tableConfig.relations[tsKey]! }));\n\t\t\t}\n\n\t\t\tlet extras;\n\n\t\t\t// Figure out which extras to select\n\t\t\tif (config.extras) {\n\t\t\t\textras = typeof config.extras === 'function'\n\t\t\t\t\t? config.extras(aliasedColumns, { sql })\n\t\t\t\t\t: config.extras;\n\t\t\t\tfor (const [tsKey, value] of Object.entries(extras)) {\n\t\t\t\t\tfieldsSelection.push({\n\t\t\t\t\t\ttsKey,\n\t\t\t\t\t\tvalue: mapColumnsInAliasedSQLToAlias(value, tableAlias),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Transform `fieldsSelection` into `selection`\n\t\t\t// `fieldsSelection` shouldn't be used after this point\n\t\t\tfor (const { tsKey, value } of fieldsSelection) {\n\t\t\t\tselection.push({\n\t\t\t\t\tdbKey: is(value, SQL.Aliased) ? value.fieldAlias : tableConfig.columns[tsKey]!.name,\n\t\t\t\t\ttsKey,\n\t\t\t\t\tfield: is(value, Column) ? aliasedTableColumn(value, tableAlias) : value,\n\t\t\t\t\trelationTableTsKey: undefined,\n\t\t\t\t\tisJson: false,\n\t\t\t\t\tselection: [],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet orderByOrig = typeof config.orderBy === 'function'\n\t\t\t\t? config.orderBy(aliasedColumns, getOrderByOperators())\n\t\t\t\t: config.orderBy ?? [];\n\t\t\tif (!Array.isArray(orderByOrig)) {\n\t\t\t\torderByOrig = [orderByOrig];\n\t\t\t}\n\t\t\torderBy = orderByOrig.map((orderByValue) => {\n\t\t\t\tif (is(orderByValue, Column)) {\n\t\t\t\t\treturn aliasedTableColumn(orderByValue, tableAlias) as PgColumn;\n\t\t\t\t}\n\t\t\t\treturn mapColumnsInSQLToAlias(orderByValue, tableAlias);\n\t\t\t});\n\n\t\t\tlimit = config.limit;\n\t\t\toffset = config.offset;\n\n\t\t\t// Process all relations\n\t\t\tfor (\n\t\t\t\tconst {\n\t\t\t\t\ttsKey: selectedRelationTsKey,\n\t\t\t\t\tqueryConfig: selectedRelationConfigValue,\n\t\t\t\t\trelation,\n\t\t\t\t} of selectedRelations\n\t\t\t) {\n\t\t\t\tconst normalizedRelation = normalizeRelation(schema, tableNamesMap, relation);\n\t\t\t\tconst relationTableName = getTableUniqueName(relation.referencedTable);\n\t\t\t\tconst relationTableTsName = tableNamesMap[relationTableName]!;\n\t\t\t\tconst relationTableAlias = `${tableAlias}_${selectedRelationTsKey}`;\n\t\t\t\tconst joinOn = and(\n\t\t\t\t\t...normalizedRelation.fields.map((field, i) =>\n\t\t\t\t\t\teq(\n\t\t\t\t\t\t\taliasedTableColumn(normalizedRelation.references[i]!, relationTableAlias),\n\t\t\t\t\t\t\taliasedTableColumn(field, tableAlias),\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tconst builtRelation = this.buildRelationalQueryWithoutPK({\n\t\t\t\t\tfullSchema,\n\t\t\t\t\tschema,\n\t\t\t\t\ttableNamesMap,\n\t\t\t\t\ttable: fullSchema[relationTableTsName] as PgTable,\n\t\t\t\t\ttableConfig: schema[relationTableTsName]!,\n\t\t\t\t\tqueryConfig: is(relation, One)\n\t\t\t\t\t\t? (selectedRelationConfigValue === true\n\t\t\t\t\t\t\t? { limit: 1 }\n\t\t\t\t\t\t\t: { ...selectedRelationConfigValue, limit: 1 })\n\t\t\t\t\t\t: selectedRelationConfigValue,\n\t\t\t\t\ttableAlias: relationTableAlias,\n\t\t\t\t\tjoinOn,\n\t\t\t\t\tnestedQueryRelation: relation,\n\t\t\t\t});\n\t\t\t\tconst field = sql`${sql.identifier(relationTableAlias)}.${sql.identifier('data')}`.as(selectedRelationTsKey);\n\t\t\t\tjoins.push({\n\t\t\t\t\ton: sql`true`,\n\t\t\t\t\ttable: new Subquery(builtRelation.sql as SQL, {}, relationTableAlias),\n\t\t\t\t\talias: relationTableAlias,\n\t\t\t\t\tjoinType: 'left',\n\t\t\t\t\tlateral: true,\n\t\t\t\t});\n\t\t\t\tselection.push({\n\t\t\t\t\tdbKey: selectedRelationTsKey,\n\t\t\t\t\ttsKey: selectedRelationTsKey,\n\t\t\t\t\tfield,\n\t\t\t\t\trelationTableTsKey: relationTableTsName,\n\t\t\t\t\tisJson: true,\n\t\t\t\t\tselection: builtRelation.selection,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (selection.length === 0) {\n\t\t\tthrow new DrizzleError({ message: `No fields selected for table \"${tableConfig.tsName}\" (\"${tableAlias}\")` });\n\t\t}\n\n\t\tlet result;\n\n\t\twhere = and(joinOn, where);\n\n\t\tif (nestedQueryRelation) {\n\t\t\tlet field = sql`json_build_array(${\n\t\t\t\tsql.join(\n\t\t\t\t\tselection.map(({ field, tsKey, isJson }) =>\n\t\t\t\t\t\tisJson\n\t\t\t\t\t\t\t? sql`${sql.identifier(`${tableAlias}_${tsKey}`)}.${sql.identifier('data')}`\n\t\t\t\t\t\t\t: is(field, SQL.Aliased)\n\t\t\t\t\t\t\t? field.sql\n\t\t\t\t\t\t\t: field\n\t\t\t\t\t),\n\t\t\t\t\tsql`, `,\n\t\t\t\t)\n\t\t\t})`;\n\t\t\tif (is(nestedQueryRelation, Many)) {\n\t\t\t\tfield = sql`coalesce(json_agg(${field}${\n\t\t\t\t\torderBy.length > 0 ? sql` order by ${sql.join(orderBy, sql`, `)}` : undefined\n\t\t\t\t}), '[]'::json)`;\n\t\t\t\t// orderBy = [];\n\t\t\t}\n\t\t\tconst nestedSelection = [{\n\t\t\t\tdbKey: 'data',\n\t\t\t\ttsKey: 'data',\n\t\t\t\tfield: field.as('data'),\n\t\t\t\tisJson: true,\n\t\t\t\trelationTableTsKey: tableConfig.tsName,\n\t\t\t\tselection,\n\t\t\t}];\n\n\t\t\tconst needsSubquery = limit !== undefined || offset !== undefined || orderBy.length > 0;\n\n\t\t\tif (needsSubquery) {\n\t\t\t\tresult = this.buildSelectQuery({\n\t\t\t\t\ttable: aliasedTable(table, tableAlias),\n\t\t\t\t\tfields: {},\n\t\t\t\t\tfieldsFlat: [{\n\t\t\t\t\t\tpath: [],\n\t\t\t\t\t\tfield: sql.raw('*'),\n\t\t\t\t\t}],\n\t\t\t\t\twhere,\n\t\t\t\t\tlimit,\n\t\t\t\t\toffset,\n\t\t\t\t\torderBy,\n\t\t\t\t\tsetOperators: [],\n\t\t\t\t});\n\n\t\t\t\twhere = undefined;\n\t\t\t\tlimit = undefined;\n\t\t\t\toffset = undefined;\n\t\t\t\torderBy = [];\n\t\t\t} else {\n\t\t\t\tresult = aliasedTable(table, tableAlias);\n\t\t\t}\n\n\t\t\tresult = this.buildSelectQuery({\n\t\t\t\ttable: is(result, PgTable) ? result : new Subquery(result, {}, tableAlias),\n\t\t\t\tfields: {},\n\t\t\t\tfieldsFlat: nestedSelection.map(({ field }) => ({\n\t\t\t\t\tpath: [],\n\t\t\t\t\tfield: is(field, Column) ? aliasedTableColumn(field, tableAlias) : field,\n\t\t\t\t})),\n\t\t\t\tjoins,\n\t\t\t\twhere,\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\torderBy,\n\t\t\t\tsetOperators: [],\n\t\t\t});\n\t\t} else {\n\t\t\tresult = this.buildSelectQuery({\n\t\t\t\ttable: aliasedTable(table, tableAlias),\n\t\t\t\tfields: {},\n\t\t\t\tfieldsFlat: selection.map(({ field }) => ({\n\t\t\t\t\tpath: [],\n\t\t\t\t\tfield: is(field, Column) ? aliasedTableColumn(field, tableAlias) : field,\n\t\t\t\t})),\n\t\t\t\tjoins,\n\t\t\t\twhere,\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\torderBy,\n\t\t\t\tsetOperators: [],\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\ttableTsKey: tableConfig.tsName,\n\t\t\tsql: result,\n\t\t\tselection,\n\t\t};\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\nimport type { SQL, SQLWrapper } from '~/sql/index.ts';\n\nexport abstract class TypedQueryBuilder<TSelection, TResult = unknown, TConfig = unknown> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'TypedQueryBuilder';\n\n\tdeclare _: {\n\t\tselectedFields: TSelection;\n\t\tresult: TResult;\n\t\tconfig?: TConfig;\n\t};\n\n\t/** @internal */\n\tgetSelectedFields(): TSelection {\n\t\treturn this._.selectedFields;\n\t}\n\n\tabstract getSQL(): SQL;\n}\n", "import type { CacheConfig, WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { PgColumn } from '~/pg-core/columns/index.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport type { PgSession, PreparedQueryConfig } from '~/pg-core/session.ts';\nimport type { SubqueryWithSelection } from '~/pg-core/subquery.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { PgViewBase } from '~/pg-core/view-base.ts';\nimport { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type {\n\tBuildSubquerySelection,\n\tGetSelectTableName,\n\tGetSelectTableSelection,\n\tJoinNullability,\n\tJoinType,\n\tSelectMode,\n\tSelectResult,\n\tSetOperator,\n} from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport { SQL, View } from '~/sql/sql.ts';\nimport type { ColumnsSelection, Placeholder, Query, SQLWrapper } from '~/sql/sql.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport { tracer } from '~/tracing.ts';\nimport {\n\tapplyMixins,\n\ttype DrizzleTypeError,\n\tgetTableColumns,\n\tgetTableLikeName,\n\thaveSameKeys,\n\ttype NeonAuthToken,\n\ttype ValueOrArray,\n} from '~/utils.ts';\nimport { orderSelectedFields } from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport type {\n\tAnyPgSelect,\n\tCreatePgSelectFromBuilderMode,\n\tGetPgSetOperators,\n\tLockConfig,\n\tLockStrength,\n\tPgCreateSetOperatorFn,\n\tPgSelectConfig,\n\tPgSelectCrossJoinFn,\n\tPgSelectDynamic,\n\tPgSelectHKT,\n\tPgSelectHKTBase,\n\tPgSelectJoinFn,\n\tPgSelectPrepare,\n\tPgSelectWithout,\n\tPgSetOperatorExcludedMethods,\n\tPgSetOperatorWithResult,\n\tSelectedFields,\n\tSetOperatorRightSelect,\n\tTableLikeHasEmptySelection,\n} from './select.types.ts';\n\nexport class PgSelectBuilder<\n\tTSelection extends SelectedFields | undefined,\n\tTBuilderMode extends 'db' | 'qb' = 'db',\n> {\n\tstatic readonly [entityKind]: string = 'PgSelectBuilder';\n\n\tprivate fields: TSelection;\n\tprivate session: PgSession | undefined;\n\tprivate dialect: PgDialect;\n\tprivate withList: Subquery[] = [];\n\tprivate distinct: boolean | {\n\t\ton: (PgColumn | SQLWrapper)[];\n\t} | undefined;\n\n\tconstructor(\n\t\tconfig: {\n\t\t\tfields: TSelection;\n\t\t\tsession: PgSession | undefined;\n\t\t\tdialect: PgDialect;\n\t\t\twithList?: Subquery[];\n\t\t\tdistinct?: boolean | {\n\t\t\t\ton: (PgColumn | SQLWrapper)[];\n\t\t\t};\n\t\t},\n\t) {\n\t\tthis.fields = config.fields;\n\t\tthis.session = config.session;\n\t\tthis.dialect = config.dialect;\n\t\tif (config.withList) {\n\t\t\tthis.withList = config.withList;\n\t\t}\n\t\tthis.distinct = config.distinct;\n\t}\n\n\tprivate authToken?: NeonAuthToken;\n\t/** @internal */\n\tsetToken(token?: NeonAuthToken) {\n\t\tthis.authToken = token;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Specify the table, subquery, or other target that you're\n\t * building a select query against.\n\t *\n\t * {@link https://www.postgresql.org/docs/current/sql-select.html#SQL-FROM | Postgres from documentation}\n\t */\n\tfrom<TFrom extends PgTable | Subquery | PgViewBase | SQL>(\n\t\tsource: TableLikeHasEmptySelection<TFrom> extends true ? DrizzleTypeError<\n\t\t\t\t\"Cannot reference a data-modifying statement subquery if it doesn't contain a `returning` clause\"\n\t\t\t>\n\t\t\t: TFrom,\n\t): CreatePgSelectFromBuilderMode<\n\t\tTBuilderMode,\n\t\tGetSelectTableName<TFrom>,\n\t\tTSelection extends undefined ? GetSelectTableSelection<TFrom> : TSelection,\n\t\tTSelection extends undefined ? 'single' : 'partial'\n\t> {\n\t\tconst isPartialSelect = !!this.fields;\n\t\tconst src = source as TFrom;\n\n\t\tlet fields: SelectedFields;\n\t\tif (this.fields) {\n\t\t\tfields = this.fields;\n\t\t} else if (is(src, Subquery)) {\n\t\t\t// This is required to use the proxy handler to get the correct field values from the subquery\n\t\t\tfields = Object.fromEntries(\n\t\t\t\tObject.keys(src._.selectedFields).map((\n\t\t\t\t\tkey,\n\t\t\t\t) => [key, src[key as unknown as keyof typeof src] as unknown as SelectedFields[string]]),\n\t\t\t);\n\t\t} else if (is(src, PgViewBase)) {\n\t\t\tfields = src[ViewBaseConfig].selectedFields as SelectedFields;\n\t\t} else if (is(src, SQL)) {\n\t\t\tfields = {};\n\t\t} else {\n\t\t\tfields = getTableColumns<PgTable>(src);\n\t\t}\n\n\t\treturn (new PgSelectBase({\n\t\t\ttable: src,\n\t\t\tfields,\n\t\t\tisPartialSelect,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\twithList: this.withList,\n\t\t\tdistinct: this.distinct,\n\t\t}).setToken(this.authToken)) as any;\n\t}\n}\n\nexport abstract class PgSelectQueryBuilderBase<\n\tTHKT extends PgSelectHKTBase,\n\tTTableName extends string | undefined,\n\tTSelection extends ColumnsSelection,\n\tTSelectMode extends SelectMode,\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult extends any[] = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n> extends TypedQueryBuilder<TSelectedFields, TResult> {\n\tstatic override readonly [entityKind]: string = 'PgSelectQueryBuilder';\n\n\toverride readonly _: {\n\t\treadonly dialect: 'pg';\n\t\treadonly hkt: THKT;\n\t\treadonly tableName: TTableName;\n\t\treadonly selection: TSelection;\n\t\treadonly selectMode: TSelectMode;\n\t\treadonly nullabilityMap: TNullabilityMap;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TResult;\n\t\treadonly selectedFields: TSelectedFields;\n\t\treadonly config: PgSelectConfig;\n\t};\n\n\tprotected config: PgSelectConfig;\n\tprotected joinsNotNullableMap: Record<string, boolean>;\n\tprotected tableName: string | undefined;\n\tprivate isPartialSelect: boolean;\n\tprotected session: PgSession | undefined;\n\tprotected dialect: PgDialect;\n\tprotected cacheConfig?: WithCacheConfig = undefined;\n\tprotected usedTables: Set<string> = new Set();\n\n\tconstructor(\n\t\t{ table, fields, isPartialSelect, session, dialect, withList, distinct }: {\n\t\t\ttable: PgSelectConfig['table'];\n\t\t\tfields: PgSelectConfig['fields'];\n\t\t\tisPartialSelect: boolean;\n\t\t\tsession: PgSession | undefined;\n\t\t\tdialect: PgDialect;\n\t\t\twithList: Subquery[];\n\t\t\tdistinct: boolean | {\n\t\t\t\ton: (PgColumn | SQLWrapper)[];\n\t\t\t} | undefined;\n\t\t},\n\t) {\n\t\tsuper();\n\t\tthis.config = {\n\t\t\twithList,\n\t\t\ttable,\n\t\t\tfields: { ...fields },\n\t\t\tdistinct,\n\t\t\tsetOperators: [],\n\t\t};\n\t\tthis.isPartialSelect = isPartialSelect;\n\t\tthis.session = session;\n\t\tthis.dialect = dialect;\n\t\tthis._ = {\n\t\t\tselectedFields: fields as TSelectedFields,\n\t\t\tconfig: this.config,\n\t\t} as this['_'];\n\t\tthis.tableName = getTableLikeName(table);\n\t\tthis.joinsNotNullableMap = typeof this.tableName === 'string' ? { [this.tableName]: true } : {};\n\n\t\tfor (const item of extractUsedTable(table)) this.usedTables.add(item);\n\t}\n\n\t/** @internal */\n\tgetUsedTables() {\n\t\treturn [...this.usedTables];\n\t}\n\n\tprivate createJoin<\n\t\tTJoinType extends JoinType,\n\t\tTIsLateral extends (TJoinType extends 'full' | 'right' ? false : boolean),\n\t>(\n\t\tjoinType: TJoinType,\n\t\tlateral: TIsLateral,\n\t): 'cross' extends TJoinType ? PgSelectCrossJoinFn<this, TDynamic, TIsLateral>\n\t\t: PgSelectJoinFn<this, TDynamic, TJoinType, TIsLateral>\n\t{\n\t\treturn ((\n\t\t\ttable: TIsLateral extends true ? Subquery | SQL : PgTable | Subquery | PgViewBase | SQL,\n\t\t\ton?: ((aliases: TSelection) => SQL | undefined) | SQL | undefined,\n\t\t) => {\n\t\t\tconst baseTableName = this.tableName;\n\t\t\tconst tableName = getTableLikeName(table);\n\n\t\t\t// store all tables used in a query\n\t\t\tfor (const item of extractUsedTable(table)) this.usedTables.add(item);\n\n\t\t\tif (typeof tableName === 'string' && this.config.joins?.some((join) => join.alias === tableName)) {\n\t\t\t\tthrow new Error(`Alias \"${tableName}\" is already used in this query`);\n\t\t\t}\n\n\t\t\tif (!this.isPartialSelect) {\n\t\t\t\t// If this is the first join and this is not a partial select and we're not selecting from raw SQL, \"move\" the fields from the main table to the nested object\n\t\t\t\tif (Object.keys(this.joinsNotNullableMap).length === 1 && typeof baseTableName === 'string') {\n\t\t\t\t\tthis.config.fields = {\n\t\t\t\t\t\t[baseTableName]: this.config.fields,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (typeof tableName === 'string' && !is(table, SQL)) {\n\t\t\t\t\tconst selection = is(table, Subquery)\n\t\t\t\t\t\t? table._.selectedFields\n\t\t\t\t\t\t: is(table, View)\n\t\t\t\t\t\t? table[ViewBaseConfig].selectedFields\n\t\t\t\t\t\t: table[Table.Symbol.Columns];\n\t\t\t\t\tthis.config.fields[tableName] = selection;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof on === 'function') {\n\t\t\t\ton = on(\n\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\tthis.config.fields,\n\t\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t\t) as TSelection,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (!this.config.joins) {\n\t\t\t\tthis.config.joins = [];\n\t\t\t}\n\n\t\t\tthis.config.joins.push({ on, table, joinType, alias: tableName, lateral });\n\n\t\t\tif (typeof tableName === 'string') {\n\t\t\t\tswitch (joinType) {\n\t\t\t\t\tcase 'left': {\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'right': {\n\t\t\t\t\t\tthis.joinsNotNullableMap = Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(this.joinsNotNullableMap).map(([key]) => [key, false]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'cross':\n\t\t\t\t\tcase 'inner': {\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'full': {\n\t\t\t\t\t\tthis.joinsNotNullableMap = Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(this.joinsNotNullableMap).map(([key]) => [key, false]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this as any;\n\t\t}) as any;\n\t}\n\n\t/**\n\t * Executes a `left join` operation by adding another table to the current query.\n\t *\n\t * Calling this method associates each row of the table with the corresponding row from the joined table, if a match is found. If no matching row exists, it sets all columns of the joined table to null.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#left-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User; pets: Pet | null; }[] = await db.select()\n\t *   .from(users)\n\t *   .leftJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number; petId: number | null; }[] = await db.select({\n\t *   userId: users.id,\n\t *   petId: pets.id,\n\t * })\n\t *   .from(users)\n\t *   .leftJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\tleftJoin = this.createJoin('left', false);\n\n\t/**\n\t * Executes a `left join lateral` operation by adding subquery to the current query.\n\t *\n\t * A `lateral` join allows the right-hand expression to refer to columns from the left-hand side.\n\t *\n\t * Calling this method associates each row of the table with the corresponding row from the joined table, if a match is found. If no matching row exists, it sets all columns of the joined table to null.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#left-join-lateral}\n\t *\n\t * @param table the subquery to join.\n\t * @param on the `on` clause.\n\t */\n\tleftJoinLateral = this.createJoin('left', true);\n\n\t/**\n\t * Executes a `right join` operation by adding another table to the current query.\n\t *\n\t * Calling this method associates each row of the joined table with the corresponding row from the main table, if a match is found. If no matching row exists, it sets all columns of the main table to null.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#right-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User | null; pets: Pet; }[] = await db.select()\n\t *   .from(users)\n\t *   .rightJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number | null; petId: number; }[] = await db.select({\n\t *   userId: users.id,\n\t *   petId: pets.id,\n\t * })\n\t *   .from(users)\n\t *   .rightJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\trightJoin = this.createJoin('right', false);\n\n\t/**\n\t * Executes an `inner join` operation, creating a new table by combining rows from two tables that have matching values.\n\t *\n\t * Calling this method retrieves rows that have corresponding entries in both joined tables. Rows without matching entries in either table are excluded, resulting in a table that includes only matching pairs.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#inner-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User; pets: Pet; }[] = await db.select()\n\t *   .from(users)\n\t *   .innerJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number; petId: number; }[] = await db.select({\n\t *   userId: users.id,\n\t *   petId: pets.id,\n\t * })\n\t *   .from(users)\n\t *   .innerJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\tinnerJoin = this.createJoin('inner', false);\n\n\t/**\n\t * Executes an `inner join lateral` operation, creating a new table by combining rows from two queries that have matching values.\n\t *\n\t * A `lateral` join allows the right-hand expression to refer to columns from the left-hand side.\n\t *\n\t * Calling this method retrieves rows that have corresponding entries in both joined tables. Rows without matching entries in either table are excluded, resulting in a table that includes only matching pairs.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#inner-join-lateral}\n\t *\n\t * @param table the subquery to join.\n\t * @param on the `on` clause.\n\t */\n\tinnerJoinLateral = this.createJoin('inner', true);\n\n\t/**\n\t * Executes a `full join` operation by combining rows from two tables into a new table.\n\t *\n\t * Calling this method retrieves all rows from both main and joined tables, merging rows with matching values and filling in `null` for non-matching columns.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#full-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User | null; pets: Pet | null; }[] = await db.select()\n\t *   .from(users)\n\t *   .fullJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number | null; petId: number | null; }[] = await db.select({\n\t *   userId: users.id,\n\t *   petId: pets.id,\n\t * })\n\t *   .from(users)\n\t *   .fullJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\tfullJoin = this.createJoin('full', false);\n\n\t/**\n\t * Executes a `cross join` operation by combining rows from two tables into a new table.\n\t *\n\t * Calling this method retrieves all rows from both main and joined tables, merging all rows from each table.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#cross-join}\n\t *\n\t * @param table the table to join.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users, each user with every pet\n\t * const usersWithPets: { user: User; pets: Pet; }[] = await db.select()\n\t *   .from(users)\n\t *   .crossJoin(pets)\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number; petId: number; }[] = await db.select({\n\t *   userId: users.id,\n\t *   petId: pets.id,\n\t * })\n\t *   .from(users)\n\t *   .crossJoin(pets)\n\t * ```\n\t */\n\tcrossJoin = this.createJoin('cross', false);\n\n\t/**\n\t * Executes a `cross join lateral` operation by combining rows from two queries into a new table.\n\t *\n\t * A `lateral` join allows the right-hand expression to refer to columns from the left-hand side.\n\t *\n\t * Calling this method retrieves all rows from both main and joined queries, merging all rows from each query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#cross-join-lateral}\n\t *\n\t * @param table the query to join.\n\t */\n\tcrossJoinLateral = this.createJoin('cross', true);\n\n\tprivate createSetOperator(\n\t\ttype: SetOperator,\n\t\tisAll: boolean,\n\t): <TValue extends PgSetOperatorWithResult<TResult>>(\n\t\trightSelection:\n\t\t\t| ((setOperators: GetPgSetOperators) => SetOperatorRightSelect<TValue, TResult>)\n\t\t\t| SetOperatorRightSelect<TValue, TResult>,\n\t) => PgSelectWithout<\n\t\tthis,\n\t\tTDynamic,\n\t\tPgSetOperatorExcludedMethods,\n\t\ttrue\n\t> {\n\t\treturn (rightSelection) => {\n\t\t\tconst rightSelect = (typeof rightSelection === 'function'\n\t\t\t\t? rightSelection(getPgSetOperators())\n\t\t\t\t: rightSelection) as TypedQueryBuilder<\n\t\t\t\t\tany,\n\t\t\t\t\tTResult\n\t\t\t\t>;\n\n\t\t\tif (!haveSameKeys(this.getSelectedFields(), rightSelect.getSelectedFields())) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Set operator error (union / intersect / except): selected fields are not the same or are in a different order',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.config.setOperators.push({ type, isAll, rightSelect });\n\t\t\treturn this as any;\n\t\t};\n\t}\n\n\t/**\n\t * Adds `union` set operator to the query.\n\t *\n\t * Calling this method will combine the result sets of the `select` statements and remove any duplicate rows that appear across them.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#union}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all unique names from customers and users tables\n\t * await db.select({ name: users.name })\n\t *   .from(users)\n\t *   .union(\n\t *     db.select({ name: customers.name }).from(customers)\n\t *   );\n\t * // or\n\t * import { union } from 'drizzle-orm/pg-core'\n\t *\n\t * await union(\n\t *   db.select({ name: users.name }).from(users),\n\t *   db.select({ name: customers.name }).from(customers)\n\t * );\n\t * ```\n\t */\n\tunion = this.createSetOperator('union', false);\n\n\t/**\n\t * Adds `union all` set operator to the query.\n\t *\n\t * Calling this method will combine the result-set of the `select` statements and keep all duplicate rows that appear across them.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#union-all}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all transaction ids from both online and in-store sales\n\t * await db.select({ transaction: onlineSales.transactionId })\n\t *   .from(onlineSales)\n\t *   .unionAll(\n\t *     db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n\t *   );\n\t * // or\n\t * import { unionAll } from 'drizzle-orm/pg-core'\n\t *\n\t * await unionAll(\n\t *   db.select({ transaction: onlineSales.transactionId }).from(onlineSales),\n\t *   db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n\t * );\n\t * ```\n\t */\n\tunionAll = this.createSetOperator('union', true);\n\n\t/**\n\t * Adds `intersect` set operator to the query.\n\t *\n\t * Calling this method will retain only the rows that are present in both result sets and eliminate duplicates.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#intersect}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select course names that are offered in both departments A and B\n\t * await db.select({ courseName: depA.courseName })\n\t *   .from(depA)\n\t *   .intersect(\n\t *     db.select({ courseName: depB.courseName }).from(depB)\n\t *   );\n\t * // or\n\t * import { intersect } from 'drizzle-orm/pg-core'\n\t *\n\t * await intersect(\n\t *   db.select({ courseName: depA.courseName }).from(depA),\n\t *   db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * ```\n\t */\n\tintersect = this.createSetOperator('intersect', false);\n\n\t/**\n\t * Adds `intersect all` set operator to the query.\n\t *\n\t * Calling this method will retain only the rows that are present in both result sets including all duplicates.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#intersect-all}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all products and quantities that are ordered by both regular and VIP customers\n\t * await db.select({\n\t *   productId: regularCustomerOrders.productId,\n\t *   quantityOrdered: regularCustomerOrders.quantityOrdered\n\t * })\n\t * .from(regularCustomerOrders)\n\t * .intersectAll(\n\t *   db.select({\n\t *     productId: vipCustomerOrders.productId,\n\t *     quantityOrdered: vipCustomerOrders.quantityOrdered\n\t *   })\n\t *   .from(vipCustomerOrders)\n\t * );\n\t * // or\n\t * import { intersectAll } from 'drizzle-orm/pg-core'\n\t *\n\t * await intersectAll(\n\t *   db.select({\n\t *     productId: regularCustomerOrders.productId,\n\t *     quantityOrdered: regularCustomerOrders.quantityOrdered\n\t *   })\n\t *   .from(regularCustomerOrders),\n\t *   db.select({\n\t *     productId: vipCustomerOrders.productId,\n\t *     quantityOrdered: vipCustomerOrders.quantityOrdered\n\t *   })\n\t *   .from(vipCustomerOrders)\n\t * );\n\t * ```\n\t */\n\tintersectAll = this.createSetOperator('intersect', true);\n\n\t/**\n\t * Adds `except` set operator to the query.\n\t *\n\t * Calling this method will retrieve all unique rows from the left query, except for the rows that are present in the result set of the right query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#except}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all courses offered in department A but not in department B\n\t * await db.select({ courseName: depA.courseName })\n\t *   .from(depA)\n\t *   .except(\n\t *     db.select({ courseName: depB.courseName }).from(depB)\n\t *   );\n\t * // or\n\t * import { except } from 'drizzle-orm/pg-core'\n\t *\n\t * await except(\n\t *   db.select({ courseName: depA.courseName }).from(depA),\n\t *   db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * ```\n\t */\n\texcept = this.createSetOperator('except', false);\n\n\t/**\n\t * Adds `except all` set operator to the query.\n\t *\n\t * Calling this method will retrieve all rows from the left query, except for the rows that are present in the result set of the right query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#except-all}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all products that are ordered by regular customers but not by VIP customers\n\t * await db.select({\n\t *   productId: regularCustomerOrders.productId,\n\t *   quantityOrdered: regularCustomerOrders.quantityOrdered,\n\t * })\n\t * .from(regularCustomerOrders)\n\t * .exceptAll(\n\t *   db.select({\n\t *     productId: vipCustomerOrders.productId,\n\t *     quantityOrdered: vipCustomerOrders.quantityOrdered,\n\t *   })\n\t *   .from(vipCustomerOrders)\n\t * );\n\t * // or\n\t * import { exceptAll } from 'drizzle-orm/pg-core'\n\t *\n\t * await exceptAll(\n\t *   db.select({\n\t *     productId: regularCustomerOrders.productId,\n\t *     quantityOrdered: regularCustomerOrders.quantityOrdered\n\t *   })\n\t *   .from(regularCustomerOrders),\n\t *   db.select({\n\t *     productId: vipCustomerOrders.productId,\n\t *     quantityOrdered: vipCustomerOrders.quantityOrdered\n\t *   })\n\t *   .from(vipCustomerOrders)\n\t * );\n\t * ```\n\t */\n\texceptAll = this.createSetOperator('except', true);\n\n\t/** @internal */\n\taddSetOperators(setOperators: PgSelectConfig['setOperators']): PgSelectWithout<\n\t\tthis,\n\t\tTDynamic,\n\t\tPgSetOperatorExcludedMethods,\n\t\ttrue\n\t> {\n\t\tthis.config.setOperators.push(...setOperators);\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `where` clause to the query.\n\t *\n\t * Calling this method will select only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#filtering}\n\t *\n\t * @param where the `where` clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be selected.\n\t *\n\t * ```ts\n\t * // Select all cars with green color\n\t * await db.select().from(cars).where(eq(cars.color, 'green'));\n\t * // or\n\t * await db.select().from(cars).where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Select all BMW cars with a green color\n\t * await db.select().from(cars).where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Select all cars with the green or blue color\n\t * await db.select().from(cars).where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(\n\t\twhere: ((aliases: this['_']['selection']) => SQL | undefined) | SQL | undefined,\n\t): PgSelectWithout<this, TDynamic, 'where'> {\n\t\tif (typeof where === 'function') {\n\t\t\twhere = where(\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\t\t}\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `having` clause to the query.\n\t *\n\t * Calling this method will select only those rows that fulfill a specified condition. It is typically used with aggregate functions to filter the aggregated data based on a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#aggregations}\n\t *\n\t * @param having the `having` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all brands with more than one car\n\t * await db.select({\n\t * \tbrand: cars.brand,\n\t * \tcount: sql<number>`cast(count(${cars.id}) as int)`,\n\t * })\n\t *   .from(cars)\n\t *   .groupBy(cars.brand)\n\t *   .having(({ count }) => gt(count, 1));\n\t * ```\n\t */\n\thaving(\n\t\thaving: ((aliases: this['_']['selection']) => SQL | undefined) | SQL | undefined,\n\t): PgSelectWithout<this, TDynamic, 'having'> {\n\t\tif (typeof having === 'function') {\n\t\t\thaving = having(\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\t\t}\n\t\tthis.config.having = having;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `group by` clause to the query.\n\t *\n\t * Calling this method will group rows that have the same values into summary rows, often used for aggregation purposes.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#aggregations}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Group and count people by their last names\n\t * await db.select({\n\t *    lastName: people.lastName,\n\t *    count: sql<number>`cast(count(*) as int)`\n\t * })\n\t *   .from(people)\n\t *   .groupBy(people.lastName);\n\t * ```\n\t */\n\tgroupBy(\n\t\tbuilder: (aliases: this['_']['selection']) => ValueOrArray<PgColumn | SQL | SQL.Aliased>,\n\t): PgSelectWithout<this, TDynamic, 'groupBy'>;\n\tgroupBy(...columns: (PgColumn | SQL | SQL.Aliased)[]): PgSelectWithout<this, TDynamic, 'groupBy'>;\n\tgroupBy(\n\t\t...columns:\n\t\t\t| [(aliases: this['_']['selection']) => ValueOrArray<PgColumn | SQL | SQL.Aliased>]\n\t\t\t| (PgColumn | SQL | SQL.Aliased)[]\n\t): PgSelectWithout<this, TDynamic, 'groupBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst groupBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\t\t\tthis.config.groupBy = Array.isArray(groupBy) ? groupBy : [groupBy];\n\t\t} else {\n\t\t\tthis.config.groupBy = columns as (PgColumn | SQL | SQL.Aliased)[];\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `order by` clause to the query.\n\t *\n\t * Calling this method will sort the result-set in ascending or descending order. By default, the sort order is ascending.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#order-by}\n\t *\n\t * @example\n\t *\n\t * ```\n\t * // Select cars ordered by year\n\t * await db.select().from(cars).orderBy(cars.year);\n\t * ```\n\t *\n\t * You can specify whether results are in ascending or descending order with the `asc()` and `desc()` operators.\n\t *\n\t * ```ts\n\t * // Select cars ordered by year in descending order\n\t * await db.select().from(cars).orderBy(desc(cars.year));\n\t *\n\t * // Select cars ordered by year and price\n\t * await db.select().from(cars).orderBy(asc(cars.year), desc(cars.price));\n\t * ```\n\t */\n\torderBy(\n\t\tbuilder: (aliases: this['_']['selection']) => ValueOrArray<PgColumn | SQL | SQL.Aliased>,\n\t): PgSelectWithout<this, TDynamic, 'orderBy'>;\n\torderBy(...columns: (PgColumn | SQL | SQL.Aliased)[]): PgSelectWithout<this, TDynamic, 'orderBy'>;\n\torderBy(\n\t\t...columns:\n\t\t\t| [(aliases: this['_']['selection']) => ValueOrArray<PgColumn | SQL | SQL.Aliased>]\n\t\t\t| (PgColumn | SQL | SQL.Aliased)[]\n\t): PgSelectWithout<this, TDynamic, 'orderBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst orderBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\n\t\t\tconst orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];\n\n\t\t\tif (this.config.setOperators.length > 0) {\n\t\t\t\tthis.config.setOperators.at(-1)!.orderBy = orderByArray;\n\t\t\t} else {\n\t\t\t\tthis.config.orderBy = orderByArray;\n\t\t\t}\n\t\t} else {\n\t\t\tconst orderByArray = columns as (PgColumn | SQL | SQL.Aliased)[];\n\n\t\t\tif (this.config.setOperators.length > 0) {\n\t\t\t\tthis.config.setOperators.at(-1)!.orderBy = orderByArray;\n\t\t\t} else {\n\t\t\t\tthis.config.orderBy = orderByArray;\n\t\t\t}\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `limit` clause to the query.\n\t *\n\t * Calling this method will set the maximum number of rows that will be returned by this query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#limit--offset}\n\t *\n\t * @param limit the `limit` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Get the first 10 people from this query.\n\t * await db.select().from(people).limit(10);\n\t * ```\n\t */\n\tlimit(limit: number | Placeholder): PgSelectWithout<this, TDynamic, 'limit'> {\n\t\tif (this.config.setOperators.length > 0) {\n\t\t\tthis.config.setOperators.at(-1)!.limit = limit;\n\t\t} else {\n\t\t\tthis.config.limit = limit;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `offset` clause to the query.\n\t *\n\t * Calling this method will skip a number of rows when returning results from this query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#limit--offset}\n\t *\n\t * @param offset the `offset` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Get the 10th-20th people from this query.\n\t * await db.select().from(people).offset(10).limit(10);\n\t * ```\n\t */\n\toffset(offset: number | Placeholder): PgSelectWithout<this, TDynamic, 'offset'> {\n\t\tif (this.config.setOperators.length > 0) {\n\t\t\tthis.config.setOperators.at(-1)!.offset = offset;\n\t\t} else {\n\t\t\tthis.config.offset = offset;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `for` clause to the query.\n\t *\n\t * Calling this method will specify a lock strength for this query that controls how strictly it acquires exclusive access to the rows being queried.\n\t *\n\t * See docs: {@link https://www.postgresql.org/docs/current/sql-select.html#SQL-FOR-UPDATE-SHARE}\n\t *\n\t * @param strength the lock strength.\n\t * @param config the lock configuration.\n\t */\n\tfor(strength: LockStrength, config: LockConfig = {}): PgSelectWithout<this, TDynamic, 'for'> {\n\t\tthis.config.lockingClause = { strength, config };\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildSelectQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\tas<TAlias extends string>(\n\t\talias: TAlias,\n\t): SubqueryWithSelection<this['_']['selectedFields'], TAlias> {\n\t\tconst usedTables: string[] = [];\n\t\tusedTables.push(...extractUsedTable(this.config.table));\n\t\tif (this.config.joins) { for (const it of this.config.joins) usedTables.push(...extractUsedTable(it.table)); }\n\n\t\treturn new Proxy(\n\t\t\tnew Subquery(this.getSQL(), this.config.fields, alias, false, [...new Set(usedTables)]),\n\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t) as SubqueryWithSelection<this['_']['selectedFields'], TAlias>;\n\t}\n\n\t/** @internal */\n\toverride getSelectedFields(): this['_']['selectedFields'] {\n\t\treturn new Proxy(\n\t\t\tthis.config.fields,\n\t\t\tnew SelectionProxyHandler({ alias: this.tableName, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t) as this['_']['selectedFields'];\n\t}\n\n\t$dynamic(): PgSelectDynamic<this> {\n\t\treturn this;\n\t}\n\n\t$withCache(config?: { config?: CacheConfig; tag?: string; autoInvalidate?: boolean } | false) {\n\t\tthis.cacheConfig = config === undefined\n\t\t\t? { config: {}, enable: true, autoInvalidate: true }\n\t\t\t: config === false\n\t\t\t? { enable: false }\n\t\t\t: { enable: true, autoInvalidate: true, ...config };\n\t\treturn this;\n\t}\n}\n\nexport interface PgSelectBase<\n\tTTableName extends string | undefined,\n\tTSelection extends ColumnsSelection,\n\tTSelectMode extends SelectMode,\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult extends any[] = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n> extends\n\tPgSelectQueryBuilderBase<\n\t\tPgSelectHKT,\n\t\tTTableName,\n\t\tTSelection,\n\t\tTSelectMode,\n\t\tTNullabilityMap,\n\t\tTDynamic,\n\t\tTExcludedMethods,\n\t\tTResult,\n\t\tTSelectedFields\n\t>,\n\tQueryPromise<TResult>,\n\tSQLWrapper\n{}\n\nexport class PgSelectBase<\n\tTTableName extends string | undefined,\n\tTSelection extends ColumnsSelection,\n\tTSelectMode extends SelectMode,\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields = BuildSubquerySelection<TSelection, TNullabilityMap>,\n> extends PgSelectQueryBuilderBase<\n\tPgSelectHKT,\n\tTTableName,\n\tTSelection,\n\tTSelectMode,\n\tTNullabilityMap,\n\tTDynamic,\n\tTExcludedMethods,\n\tTResult,\n\tTSelectedFields\n> implements RunnableQuery<TResult, 'pg'>, SQLWrapper {\n\tstatic override readonly [entityKind]: string = 'PgSelect';\n\n\t/** @internal */\n\t_prepare(name?: string): PgSelectPrepare<this> {\n\t\tconst { session, config, dialect, joinsNotNullableMap, authToken, cacheConfig, usedTables } = this;\n\t\tif (!session) {\n\t\t\tthrow new Error('Cannot execute a query on a query builder. Please use a database instance instead.');\n\t\t}\n\n\t\tconst { fields } = config;\n\n\t\treturn tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\tconst fieldsList = orderSelectedFields<PgColumn>(fields);\n\t\t\tconst query = session.prepareQuery<\n\t\t\t\tPreparedQueryConfig & { execute: TResult }\n\t\t\t>(dialect.sqlToQuery(this.getSQL()), fieldsList, name, true, undefined, {\n\t\t\t\ttype: 'select',\n\t\t\t\ttables: [...usedTables],\n\t\t\t}, cacheConfig);\n\t\t\tquery.joinsNotNullableMap = joinsNotNullableMap;\n\n\t\t\treturn query.setToken(authToken);\n\t\t});\n\t}\n\n\t/**\n\t * Create a prepared statement for this query. This allows\n\t * the database to remember this query for the given session\n\t * and call it by name, rather than specifying the full query.\n\t *\n\t * {@link https://www.postgresql.org/docs/current/sql-prepare.html | Postgres prepare documentation}\n\t */\n\tprepare(name: string): PgSelectPrepare<this> {\n\t\treturn this._prepare(name);\n\t}\n\n\tprivate authToken?: NeonAuthToken;\n\t/** @internal */\n\tsetToken(token?: NeonAuthToken) {\n\t\tthis.authToken = token;\n\t\treturn this;\n\t}\n\n\texecute: ReturnType<this['prepare']>['execute'] = (placeholderValues) => {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\treturn this._prepare().execute(placeholderValues, this.authToken);\n\t\t});\n\t};\n}\n\napplyMixins(PgSelectBase, [QueryPromise]);\n\nfunction createSetOperator(type: SetOperator, isAll: boolean): PgCreateSetOperatorFn {\n\treturn (leftSelect, rightSelect, ...restSelects) => {\n\t\tconst setOperators = [rightSelect, ...restSelects].map((select) => ({\n\t\t\ttype,\n\t\t\tisAll,\n\t\t\trightSelect: select as AnyPgSelect,\n\t\t}));\n\n\t\tfor (const setOperator of setOperators) {\n\t\t\tif (!haveSameKeys((leftSelect as any).getSelectedFields(), setOperator.rightSelect.getSelectedFields())) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Set operator error (union / intersect / except): selected fields are not the same or are in a different order',\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn (leftSelect as AnyPgSelect).addSetOperators(setOperators) as any;\n\t};\n}\n\nconst getPgSetOperators = () => ({\n\tunion,\n\tunionAll,\n\tintersect,\n\tintersectAll,\n\texcept,\n\texceptAll,\n});\n\n/**\n * Adds `union` set operator to the query.\n *\n * Calling this method will combine the result sets of the `select` statements and remove any duplicate rows that appear across them.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#union}\n *\n * @example\n *\n * ```ts\n * // Select all unique names from customers and users tables\n * import { union } from 'drizzle-orm/pg-core'\n *\n * await union(\n *   db.select({ name: users.name }).from(users),\n *   db.select({ name: customers.name }).from(customers)\n * );\n * // or\n * await db.select({ name: users.name })\n *   .from(users)\n *   .union(\n *     db.select({ name: customers.name }).from(customers)\n *   );\n * ```\n */\nexport const union = createSetOperator('union', false);\n\n/**\n * Adds `union all` set operator to the query.\n *\n * Calling this method will combine the result-set of the `select` statements and keep all duplicate rows that appear across them.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#union-all}\n *\n * @example\n *\n * ```ts\n * // Select all transaction ids from both online and in-store sales\n * import { unionAll } from 'drizzle-orm/pg-core'\n *\n * await unionAll(\n *   db.select({ transaction: onlineSales.transactionId }).from(onlineSales),\n *   db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n * );\n * // or\n * await db.select({ transaction: onlineSales.transactionId })\n *   .from(onlineSales)\n *   .unionAll(\n *     db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n *   );\n * ```\n */\nexport const unionAll = createSetOperator('union', true);\n\n/**\n * Adds `intersect` set operator to the query.\n *\n * Calling this method will retain only the rows that are present in both result sets and eliminate duplicates.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#intersect}\n *\n * @example\n *\n * ```ts\n * // Select course names that are offered in both departments A and B\n * import { intersect } from 'drizzle-orm/pg-core'\n *\n * await intersect(\n *   db.select({ courseName: depA.courseName }).from(depA),\n *   db.select({ courseName: depB.courseName }).from(depB)\n * );\n * // or\n * await db.select({ courseName: depA.courseName })\n *   .from(depA)\n *   .intersect(\n *     db.select({ courseName: depB.courseName }).from(depB)\n *   );\n * ```\n */\nexport const intersect = createSetOperator('intersect', false);\n\n/**\n * Adds `intersect all` set operator to the query.\n *\n * Calling this method will retain only the rows that are present in both result sets including all duplicates.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#intersect-all}\n *\n * @example\n *\n * ```ts\n * // Select all products and quantities that are ordered by both regular and VIP customers\n * import { intersectAll } from 'drizzle-orm/pg-core'\n *\n * await intersectAll(\n *   db.select({\n *     productId: regularCustomerOrders.productId,\n *     quantityOrdered: regularCustomerOrders.quantityOrdered\n *   })\n *   .from(regularCustomerOrders),\n *   db.select({\n *     productId: vipCustomerOrders.productId,\n *     quantityOrdered: vipCustomerOrders.quantityOrdered\n *   })\n *   .from(vipCustomerOrders)\n * );\n * // or\n * await db.select({\n *   productId: regularCustomerOrders.productId,\n *   quantityOrdered: regularCustomerOrders.quantityOrdered\n * })\n * .from(regularCustomerOrders)\n * .intersectAll(\n *   db.select({\n *     productId: vipCustomerOrders.productId,\n *     quantityOrdered: vipCustomerOrders.quantityOrdered\n *   })\n *   .from(vipCustomerOrders)\n * );\n * ```\n */\nexport const intersectAll = createSetOperator('intersect', true);\n\n/**\n * Adds `except` set operator to the query.\n *\n * Calling this method will retrieve all unique rows from the left query, except for the rows that are present in the result set of the right query.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#except}\n *\n * @example\n *\n * ```ts\n * // Select all courses offered in department A but not in department B\n * import { except } from 'drizzle-orm/pg-core'\n *\n * await except(\n *   db.select({ courseName: depA.courseName }).from(depA),\n *   db.select({ courseName: depB.courseName }).from(depB)\n * );\n * // or\n * await db.select({ courseName: depA.courseName })\n *   .from(depA)\n *   .except(\n *     db.select({ courseName: depB.courseName }).from(depB)\n *   );\n * ```\n */\nexport const except = createSetOperator('except', false);\n\n/**\n * Adds `except all` set operator to the query.\n *\n * Calling this method will retrieve all rows from the left query, except for the rows that are present in the result set of the right query.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#except-all}\n *\n * @example\n *\n * ```ts\n * // Select all products that are ordered by regular customers but not by VIP customers\n * import { exceptAll } from 'drizzle-orm/pg-core'\n *\n * await exceptAll(\n *   db.select({\n *     productId: regularCustomerOrders.productId,\n *     quantityOrdered: regularCustomerOrders.quantityOrdered\n *   })\n *   .from(regularCustomerOrders),\n *   db.select({\n *     productId: vipCustomerOrders.productId,\n *     quantityOrdered: vipCustomerOrders.quantityOrdered\n *   })\n *   .from(vipCustomerOrders)\n * );\n * // or\n * await db.select({\n *   productId: regularCustomerOrders.productId,\n *   quantityOrdered: regularCustomerOrders.quantityOrdered,\n * })\n * .from(regularCustomerOrders)\n * .exceptAll(\n *   db.select({\n *     productId: vipCustomerOrders.productId,\n *     quantityOrdered: vipCustomerOrders.quantityOrdered,\n *   })\n *   .from(vipCustomerOrders)\n * );\n * ```\n */\nexport const exceptAll = createSetOperator('except', true);\n", "import { entityKind, is } from '~/entity.ts';\nimport type { PgDialectConfig } from '~/pg-core/dialect.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { ColumnsSelection, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport { WithSubquery } from '~/subquery.ts';\nimport type { PgColumn } from '../columns/index.ts';\nimport type { WithBuilder } from '../subquery.ts';\nimport { PgSelectBuilder } from './select.ts';\nimport type { SelectedFields } from './select.types.ts';\n\nexport class QueryBuilder {\n\tstatic readonly [entityKind]: string = 'PgQueryBuilder';\n\n\tprivate dialect: PgDialect | undefined;\n\tprivate dialectConfig: PgDialectConfig | undefined;\n\n\tconstructor(dialect?: PgDialect | PgDialectConfig) {\n\t\tthis.dialect = is(dialect, PgDialect) ? dialect : undefined;\n\t\tthis.dialectConfig = is(dialect, PgDialect) ? undefined : dialect;\n\t}\n\n\t$with: WithBuilder = (alias: string, selection?: ColumnsSelection) => {\n\t\tconst queryBuilder = this;\n\t\tconst as = (\n\t\t\tqb:\n\t\t\t\t| TypedQueryBuilder<ColumnsSelection | undefined>\n\t\t\t\t| SQL\n\t\t\t\t| ((qb: QueryBuilder) => TypedQueryBuilder<ColumnsSelection | undefined> | SQL),\n\t\t) => {\n\t\t\tif (typeof qb === 'function') {\n\t\t\t\tqb = qb(queryBuilder);\n\t\t\t}\n\n\t\t\treturn new Proxy(\n\t\t\t\tnew WithSubquery(\n\t\t\t\t\tqb.getSQL(),\n\t\t\t\t\tselection ?? ('getSelectedFields' in qb ? qb.getSelectedFields() ?? {} : {}) as SelectedFields,\n\t\t\t\t\talias,\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t\t) as any;\n\t\t};\n\t\treturn { as };\n\t};\n\n\twith(...queries: WithSubquery[]) {\n\t\tconst self = this;\n\n\t\tfunction select(): PgSelectBuilder<undefined, 'qb'>;\n\t\tfunction select<TSelection extends SelectedFields>(fields: TSelection): PgSelectBuilder<TSelection, 'qb'>;\n\t\tfunction select<TSelection extends SelectedFields>(\n\t\t\tfields?: TSelection,\n\t\t): PgSelectBuilder<TSelection | undefined, 'qb'> {\n\t\t\treturn new PgSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: undefined,\n\t\t\t\tdialect: self.getDialect(),\n\t\t\t\twithList: queries,\n\t\t\t});\n\t\t}\n\n\t\tfunction selectDistinct(): PgSelectBuilder<undefined, 'qb'>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(fields: TSelection): PgSelectBuilder<TSelection, 'qb'>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields?: TSelection,\n\t\t): PgSelectBuilder<TSelection | undefined, 'qb'> {\n\t\t\treturn new PgSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: undefined,\n\t\t\t\tdialect: self.getDialect(),\n\t\t\t\tdistinct: true,\n\t\t\t});\n\t\t}\n\n\t\tfunction selectDistinctOn(on: (PgColumn | SQLWrapper)[]): PgSelectBuilder<undefined, 'qb'>;\n\t\tfunction selectDistinctOn<TSelection extends SelectedFields>(\n\t\t\ton: (PgColumn | SQLWrapper)[],\n\t\t\tfields: TSelection,\n\t\t): PgSelectBuilder<TSelection, 'qb'>;\n\t\tfunction selectDistinctOn<TSelection extends SelectedFields>(\n\t\t\ton: (PgColumn | SQLWrapper)[],\n\t\t\tfields?: TSelection,\n\t\t): PgSelectBuilder<TSelection | undefined, 'qb'> {\n\t\t\treturn new PgSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: undefined,\n\t\t\t\tdialect: self.getDialect(),\n\t\t\t\tdistinct: { on },\n\t\t\t});\n\t\t}\n\n\t\treturn { select, selectDistinct, selectDistinctOn };\n\t}\n\n\tselect(): PgSelectBuilder<undefined, 'qb'>;\n\tselect<TSelection extends SelectedFields>(fields: TSelection): PgSelectBuilder<TSelection, 'qb'>;\n\tselect<TSelection extends SelectedFields>(fields?: TSelection): PgSelectBuilder<TSelection | undefined, 'qb'> {\n\t\treturn new PgSelectBuilder({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: undefined,\n\t\t\tdialect: this.getDialect(),\n\t\t});\n\t}\n\n\tselectDistinct(): PgSelectBuilder<undefined>;\n\tselectDistinct<TSelection extends SelectedFields>(fields: TSelection): PgSelectBuilder<TSelection>;\n\tselectDistinct<TSelection extends SelectedFields>(fields?: TSelection): PgSelectBuilder<TSelection | undefined> {\n\t\treturn new PgSelectBuilder({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: undefined,\n\t\t\tdialect: this.getDialect(),\n\t\t\tdistinct: true,\n\t\t});\n\t}\n\n\tselectDistinctOn(on: (PgColumn | SQLWrapper)[]): PgSelectBuilder<undefined>;\n\tselectDistinctOn<TSelection extends SelectedFields>(\n\t\ton: (PgColumn | SQLWrapper)[],\n\t\tfields: TSelection,\n\t): PgSelectBuilder<TSelection>;\n\tselectDistinctOn<TSelection extends SelectedFields>(\n\t\ton: (PgColumn | SQLWrapper)[],\n\t\tfields?: TSelection,\n\t): PgSelectBuilder<TSelection | undefined> {\n\t\treturn new PgSelectBuilder({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: undefined,\n\t\t\tdialect: this.getDialect(),\n\t\t\tdistinct: { on },\n\t\t});\n\t}\n\n\t// Lazy load dialect to avoid circular dependency\n\tprivate getDialect() {\n\t\tif (!this.dialect) {\n\t\t\tthis.dialect = new PgDialect(this.dialectConfig);\n\t\t}\n\n\t\treturn this.dialect;\n\t}\n}\n", "import type { BuildColumns } from '~/column-builder.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { AddAliasToSelection } from '~/query-builders/select.types.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { ColumnsSelection, SQL } from '~/sql/sql.ts';\nimport { getTableColumns } from '~/utils.ts';\nimport type { RequireAtLeastOne } from '~/utils.ts';\nimport type { PgColumn, PgColumnBuilderBase } from './columns/common.ts';\nimport { QueryBuilder } from './query-builders/query-builder.ts';\nimport { pgTable } from './table.ts';\nimport { PgViewBase } from './view-base.ts';\nimport { PgViewConfig } from './view-common.ts';\n\nexport type ViewWithConfig = RequireAtLeastOne<{\n\tcheckOption: 'local' | 'cascaded';\n\tsecurityBarrier: boolean;\n\tsecurityInvoker: boolean;\n}>;\n\nexport class DefaultViewBuilderCore<TConfig extends { name: string; columns?: unknown }> {\n\tstatic readonly [entityKind]: string = 'PgDefaultViewBuilderCore';\n\n\tdeclare readonly _: {\n\t\treadonly name: TConfig['name'];\n\t\treadonly columns: TConfig['columns'];\n\t};\n\n\tconstructor(\n\t\tprotected name: TConfig['name'],\n\t\tprotected schema: string | undefined,\n\t) {}\n\n\tprotected config: {\n\t\twith?: ViewWithConfig;\n\t} = {};\n\n\twith(config: ViewWithConfig): this {\n\t\tthis.config.with = config;\n\t\treturn this;\n\t}\n}\n\nexport class ViewBuilder<TName extends string = string> extends DefaultViewBuilderCore<{ name: TName }> {\n\tstatic override readonly [entityKind]: string = 'PgViewBuilder';\n\n\tas<TSelectedFields extends ColumnsSelection>(\n\t\tqb: TypedQueryBuilder<TSelectedFields> | ((qb: QueryBuilder) => TypedQueryBuilder<TSelectedFields>),\n\t): PgViewWithSelection<TName, false, AddAliasToSelection<TSelectedFields, TName, 'pg'>> {\n\t\tif (typeof qb === 'function') {\n\t\t\tqb = qb(new QueryBuilder());\n\t\t}\n\t\tconst selectionProxy = new SelectionProxyHandler<TSelectedFields>({\n\t\t\talias: this.name,\n\t\t\tsqlBehavior: 'error',\n\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\treplaceOriginalName: true,\n\t\t});\n\t\tconst aliasedSelection = new Proxy(qb.getSelectedFields(), selectionProxy);\n\t\treturn new Proxy(\n\t\t\tnew PgView({\n\t\t\t\tpgConfig: this.config,\n\t\t\t\tconfig: {\n\t\t\t\t\tname: this.name,\n\t\t\t\t\tschema: this.schema,\n\t\t\t\t\tselectedFields: aliasedSelection,\n\t\t\t\t\tquery: qb.getSQL().inlineParams(),\n\t\t\t\t},\n\t\t\t}),\n\t\t\tselectionProxy as any,\n\t\t) as PgViewWithSelection<TName, false, AddAliasToSelection<TSelectedFields, TName, 'pg'>>;\n\t}\n}\n\nexport class ManualViewBuilder<\n\tTName extends string = string,\n\tTColumns extends Record<string, PgColumnBuilderBase> = Record<string, PgColumnBuilderBase>,\n> extends DefaultViewBuilderCore<{ name: TName; columns: TColumns }> {\n\tstatic override readonly [entityKind]: string = 'PgManualViewBuilder';\n\n\tprivate columns: Record<string, PgColumn>;\n\n\tconstructor(\n\t\tname: TName,\n\t\tcolumns: TColumns,\n\t\tschema: string | undefined,\n\t) {\n\t\tsuper(name, schema);\n\t\tthis.columns = getTableColumns(pgTable(name, columns));\n\t}\n\n\texisting(): PgViewWithSelection<TName, true, BuildColumns<TName, TColumns, 'pg'>> {\n\t\treturn new Proxy(\n\t\t\tnew PgView({\n\t\t\t\tpgConfig: undefined,\n\t\t\t\tconfig: {\n\t\t\t\t\tname: this.name,\n\t\t\t\t\tschema: this.schema,\n\t\t\t\t\tselectedFields: this.columns,\n\t\t\t\t\tquery: undefined,\n\t\t\t\t},\n\t\t\t}),\n\t\t\tnew SelectionProxyHandler({\n\t\t\t\talias: this.name,\n\t\t\t\tsqlBehavior: 'error',\n\t\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\t\treplaceOriginalName: true,\n\t\t\t}),\n\t\t) as PgViewWithSelection<TName, true, BuildColumns<TName, TColumns, 'pg'>>;\n\t}\n\n\tas(query: SQL): PgViewWithSelection<TName, false, BuildColumns<TName, TColumns, 'pg'>> {\n\t\treturn new Proxy(\n\t\t\tnew PgView({\n\t\t\t\tpgConfig: this.config,\n\t\t\t\tconfig: {\n\t\t\t\t\tname: this.name,\n\t\t\t\t\tschema: this.schema,\n\t\t\t\t\tselectedFields: this.columns,\n\t\t\t\t\tquery: query.inlineParams(),\n\t\t\t\t},\n\t\t\t}),\n\t\t\tnew SelectionProxyHandler({\n\t\t\t\talias: this.name,\n\t\t\t\tsqlBehavior: 'error',\n\t\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\t\treplaceOriginalName: true,\n\t\t\t}),\n\t\t) as PgViewWithSelection<TName, false, BuildColumns<TName, TColumns, 'pg'>>;\n\t}\n}\n\nexport type PgMaterializedViewWithConfig = RequireAtLeastOne<{\n\tfillfactor: number;\n\ttoastTupleTarget: number;\n\tparallelWorkers: number;\n\tautovacuumEnabled: boolean;\n\tvacuumIndexCleanup: 'auto' | 'off' | 'on';\n\tvacuumTruncate: boolean;\n\tautovacuumVacuumThreshold: number;\n\tautovacuumVacuumScaleFactor: number;\n\tautovacuumVacuumCostDelay: number;\n\tautovacuumVacuumCostLimit: number;\n\tautovacuumFreezeMinAge: number;\n\tautovacuumFreezeMaxAge: number;\n\tautovacuumFreezeTableAge: number;\n\tautovacuumMultixactFreezeMinAge: number;\n\tautovacuumMultixactFreezeMaxAge: number;\n\tautovacuumMultixactFreezeTableAge: number;\n\tlogAutovacuumMinDuration: number;\n\tuserCatalogTable: boolean;\n}>;\n\nexport class MaterializedViewBuilderCore<TConfig extends { name: string; columns?: unknown }> {\n\tstatic readonly [entityKind]: string = 'PgMaterializedViewBuilderCore';\n\n\tdeclare _: {\n\t\treadonly name: TConfig['name'];\n\t\treadonly columns: TConfig['columns'];\n\t};\n\n\tconstructor(\n\t\tprotected name: TConfig['name'],\n\t\tprotected schema: string | undefined,\n\t) {}\n\n\tprotected config: {\n\t\twith?: PgMaterializedViewWithConfig;\n\t\tusing?: string;\n\t\ttablespace?: string;\n\t\twithNoData?: boolean;\n\t} = {};\n\n\tusing(using: string): this {\n\t\tthis.config.using = using;\n\t\treturn this;\n\t}\n\n\twith(config: PgMaterializedViewWithConfig): this {\n\t\tthis.config.with = config;\n\t\treturn this;\n\t}\n\n\ttablespace(tablespace: string): this {\n\t\tthis.config.tablespace = tablespace;\n\t\treturn this;\n\t}\n\n\twithNoData(): this {\n\t\tthis.config.withNoData = true;\n\t\treturn this;\n\t}\n}\n\nexport class MaterializedViewBuilder<TName extends string = string>\n\textends MaterializedViewBuilderCore<{ name: TName }>\n{\n\tstatic override readonly [entityKind]: string = 'PgMaterializedViewBuilder';\n\n\tas<TSelectedFields extends ColumnsSelection>(\n\t\tqb: TypedQueryBuilder<TSelectedFields> | ((qb: QueryBuilder) => TypedQueryBuilder<TSelectedFields>),\n\t): PgMaterializedViewWithSelection<TName, false, AddAliasToSelection<TSelectedFields, TName, 'pg'>> {\n\t\tif (typeof qb === 'function') {\n\t\t\tqb = qb(new QueryBuilder());\n\t\t}\n\t\tconst selectionProxy = new SelectionProxyHandler<TSelectedFields>({\n\t\t\talias: this.name,\n\t\t\tsqlBehavior: 'error',\n\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\treplaceOriginalName: true,\n\t\t});\n\t\tconst aliasedSelection = new Proxy(qb.getSelectedFields(), selectionProxy);\n\t\treturn new Proxy(\n\t\t\tnew PgMaterializedView({\n\t\t\t\tpgConfig: {\n\t\t\t\t\twith: this.config.with,\n\t\t\t\t\tusing: this.config.using,\n\t\t\t\t\ttablespace: this.config.tablespace,\n\t\t\t\t\twithNoData: this.config.withNoData,\n\t\t\t\t},\n\t\t\t\tconfig: {\n\t\t\t\t\tname: this.name,\n\t\t\t\t\tschema: this.schema,\n\t\t\t\t\tselectedFields: aliasedSelection,\n\t\t\t\t\tquery: qb.getSQL().inlineParams(),\n\t\t\t\t},\n\t\t\t}),\n\t\t\tselectionProxy as any,\n\t\t) as PgMaterializedViewWithSelection<TName, false, AddAliasToSelection<TSelectedFields, TName, 'pg'>>;\n\t}\n}\n\nexport class ManualMaterializedViewBuilder<\n\tTName extends string = string,\n\tTColumns extends Record<string, PgColumnBuilderBase> = Record<string, PgColumnBuilderBase>,\n> extends MaterializedViewBuilderCore<{ name: TName; columns: TColumns }> {\n\tstatic override readonly [entityKind]: string = 'PgManualMaterializedViewBuilder';\n\n\tprivate columns: Record<string, PgColumn>;\n\n\tconstructor(\n\t\tname: TName,\n\t\tcolumns: TColumns,\n\t\tschema: string | undefined,\n\t) {\n\t\tsuper(name, schema);\n\t\tthis.columns = getTableColumns(pgTable(name, columns));\n\t}\n\n\texisting(): PgMaterializedViewWithSelection<TName, true, BuildColumns<TName, TColumns, 'pg'>> {\n\t\treturn new Proxy(\n\t\t\tnew PgMaterializedView({\n\t\t\t\tpgConfig: {\n\t\t\t\t\ttablespace: this.config.tablespace,\n\t\t\t\t\tusing: this.config.using,\n\t\t\t\t\twith: this.config.with,\n\t\t\t\t\twithNoData: this.config.withNoData,\n\t\t\t\t},\n\t\t\t\tconfig: {\n\t\t\t\t\tname: this.name,\n\t\t\t\t\tschema: this.schema,\n\t\t\t\t\tselectedFields: this.columns,\n\t\t\t\t\tquery: undefined,\n\t\t\t\t},\n\t\t\t}),\n\t\t\tnew SelectionProxyHandler({\n\t\t\t\talias: this.name,\n\t\t\t\tsqlBehavior: 'error',\n\t\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\t\treplaceOriginalName: true,\n\t\t\t}),\n\t\t) as PgMaterializedViewWithSelection<TName, true, BuildColumns<TName, TColumns, 'pg'>>;\n\t}\n\n\tas(query: SQL): PgMaterializedViewWithSelection<TName, false, BuildColumns<TName, TColumns, 'pg'>> {\n\t\treturn new Proxy(\n\t\t\tnew PgMaterializedView({\n\t\t\t\tpgConfig: {\n\t\t\t\t\ttablespace: this.config.tablespace,\n\t\t\t\t\tusing: this.config.using,\n\t\t\t\t\twith: this.config.with,\n\t\t\t\t\twithNoData: this.config.withNoData,\n\t\t\t\t},\n\t\t\t\tconfig: {\n\t\t\t\t\tname: this.name,\n\t\t\t\t\tschema: this.schema,\n\t\t\t\t\tselectedFields: this.columns,\n\t\t\t\t\tquery: query.inlineParams(),\n\t\t\t\t},\n\t\t\t}),\n\t\t\tnew SelectionProxyHandler({\n\t\t\t\talias: this.name,\n\t\t\t\tsqlBehavior: 'error',\n\t\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\t\treplaceOriginalName: true,\n\t\t\t}),\n\t\t) as PgMaterializedViewWithSelection<TName, false, BuildColumns<TName, TColumns, 'pg'>>;\n\t}\n}\n\nexport class PgView<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelectedFields extends ColumnsSelection = ColumnsSelection,\n> extends PgViewBase<TName, TExisting, TSelectedFields> {\n\tstatic override readonly [entityKind]: string = 'PgView';\n\n\t[PgViewConfig]: {\n\t\twith?: ViewWithConfig;\n\t} | undefined;\n\n\tconstructor({ pgConfig, config }: {\n\t\tpgConfig: {\n\t\t\twith?: ViewWithConfig;\n\t\t} | undefined;\n\t\tconfig: {\n\t\t\tname: TName;\n\t\t\tschema: string | undefined;\n\t\t\tselectedFields: ColumnsSelection;\n\t\t\tquery: SQL | undefined;\n\t\t};\n\t}) {\n\t\tsuper(config);\n\t\tif (pgConfig) {\n\t\t\tthis[PgViewConfig] = {\n\t\t\t\twith: pgConfig.with,\n\t\t\t};\n\t\t}\n\t}\n}\n\nexport type PgViewWithSelection<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelectedFields extends ColumnsSelection = ColumnsSelection,\n> = PgView<TName, TExisting, TSelectedFields> & TSelectedFields;\n\nexport const PgMaterializedViewConfig = Symbol.for('drizzle:PgMaterializedViewConfig');\n\nexport class PgMaterializedView<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelectedFields extends ColumnsSelection = ColumnsSelection,\n> extends PgViewBase<TName, TExisting, TSelectedFields> {\n\tstatic override readonly [entityKind]: string = 'PgMaterializedView';\n\n\treadonly [PgMaterializedViewConfig]: {\n\t\treadonly with?: PgMaterializedViewWithConfig;\n\t\treadonly using?: string;\n\t\treadonly tablespace?: string;\n\t\treadonly withNoData?: boolean;\n\t} | undefined;\n\n\tconstructor({ pgConfig, config }: {\n\t\tpgConfig: {\n\t\t\twith: PgMaterializedViewWithConfig | undefined;\n\t\t\tusing: string | undefined;\n\t\t\ttablespace: string | undefined;\n\t\t\twithNoData: boolean | undefined;\n\t\t} | undefined;\n\t\tconfig: {\n\t\t\tname: TName;\n\t\t\tschema: string | undefined;\n\t\t\tselectedFields: ColumnsSelection;\n\t\t\tquery: SQL | undefined;\n\t\t};\n\t}) {\n\t\tsuper(config);\n\t\tthis[PgMaterializedViewConfig] = {\n\t\t\twith: pgConfig?.with,\n\t\t\tusing: pgConfig?.using,\n\t\t\ttablespace: pgConfig?.tablespace,\n\t\t\twithNoData: pgConfig?.withNoData,\n\t\t};\n\t}\n}\n\nexport type PgMaterializedViewWithSelection<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelectedFields extends ColumnsSelection = ColumnsSelection,\n> = PgMaterializedView<TName, TExisting, TSelectedFields> & TSelectedFields;\n\n/** @internal */\nexport function pgViewWithSchema(\n\tname: string,\n\tselection: Record<string, PgColumnBuilderBase> | undefined,\n\tschema: string | undefined,\n): ViewBuilder | ManualViewBuilder {\n\tif (selection) {\n\t\treturn new ManualViewBuilder(name, selection, schema);\n\t}\n\treturn new ViewBuilder(name, schema);\n}\n\n/** @internal */\nexport function pgMaterializedViewWithSchema(\n\tname: string,\n\tselection: Record<string, PgColumnBuilderBase> | undefined,\n\tschema: string | undefined,\n): MaterializedViewBuilder | ManualMaterializedViewBuilder {\n\tif (selection) {\n\t\treturn new ManualMaterializedViewBuilder(name, selection, schema);\n\t}\n\treturn new MaterializedViewBuilder(name, schema);\n}\n\nexport function pgView<TName extends string>(name: TName): ViewBuilder<TName>;\nexport function pgView<TName extends string, TColumns extends Record<string, PgColumnBuilderBase>>(\n\tname: TName,\n\tcolumns: TColumns,\n): ManualViewBuilder<TName, TColumns>;\nexport function pgView(name: string, columns?: Record<string, PgColumnBuilderBase>): ViewBuilder | ManualViewBuilder {\n\treturn pgViewWithSchema(name, columns, undefined);\n}\n\nexport function pgMaterializedView<TName extends string>(name: TName): MaterializedViewBuilder<TName>;\nexport function pgMaterializedView<TName extends string, TColumns extends Record<string, PgColumnBuilderBase>>(\n\tname: TName,\n\tcolumns: TColumns,\n): ManualMaterializedViewBuilder<TName, TColumns>;\nexport function pgMaterializedView(\n\tname: string,\n\tcolumns?: Record<string, PgColumnBuilderBase>,\n): MaterializedViewBuilder | ManualMaterializedViewBuilder {\n\treturn pgMaterializedViewWithSchema(name, columns, undefined);\n}\n\nexport function isPgView(obj: unknown): obj is PgView {\n\treturn is(obj, PgView);\n}\n\nexport function isPgMaterializedView(obj: unknown): obj is PgMaterializedView {\n\treturn is(obj, PgMaterializedView);\n}\n", "import { is } from '~/entity.ts';\nimport { PgTable } from '~/pg-core/table.ts';\nimport { SQL } from '~/sql/sql.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { Schema, Table } from '~/table.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport { type Check, CheckBuilder } from './checks.ts';\nimport type { AnyPgColumn } from './columns/index.ts';\nimport { type ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { Index } from './indexes.ts';\nimport { IndexBuilder } from './indexes.ts';\nimport { PgPolicy } from './policies.ts';\nimport { type PrimaryKey, PrimaryKeyBuilder } from './primary-keys.ts';\nimport { type UniqueConstraint, UniqueConstraintBuilder } from './unique-constraint.ts';\nimport type { PgViewBase } from './view-base.ts';\nimport { PgViewConfig } from './view-common.ts';\nimport { type PgMaterializedView, PgMaterializedViewConfig, type PgView } from './view.ts';\n\nexport function getTableConfig<TTable extends PgTable>(table: TTable) {\n\tconst columns = Object.values(table[Table.Symbol.Columns]);\n\tconst indexes: Index[] = [];\n\tconst checks: Check[] = [];\n\tconst primaryKeys: PrimaryKey[] = [];\n\tconst foreignKeys: ForeignKey[] = Object.values(table[PgTable.Symbol.InlineForeignKeys]);\n\tconst uniqueConstraints: UniqueConstraint[] = [];\n\tconst name = table[Table.Symbol.Name];\n\tconst schema = table[Table.Symbol.Schema];\n\tconst policies: PgPolicy[] = [];\n\tconst enableRLS: boolean = table[PgTable.Symbol.EnableRLS];\n\n\tconst extraConfigBuilder = table[PgTable.Symbol.ExtraConfigBuilder];\n\n\tif (extraConfigBuilder !== undefined) {\n\t\tconst extraConfig = extraConfigBuilder(table[Table.Symbol.ExtraConfigColumns]);\n\t\tconst extraValues = Array.isArray(extraConfig) ? extraConfig.flat(1) as any[] : Object.values(extraConfig);\n\t\tfor (const builder of extraValues) {\n\t\t\tif (is(builder, IndexBuilder)) {\n\t\t\t\tindexes.push(builder.build(table));\n\t\t\t} else if (is(builder, CheckBuilder)) {\n\t\t\t\tchecks.push(builder.build(table));\n\t\t\t} else if (is(builder, UniqueConstraintBuilder)) {\n\t\t\t\tuniqueConstraints.push(builder.build(table));\n\t\t\t} else if (is(builder, PrimaryKeyBuilder)) {\n\t\t\t\tprimaryKeys.push(builder.build(table));\n\t\t\t} else if (is(builder, ForeignKeyBuilder)) {\n\t\t\t\tforeignKeys.push(builder.build(table));\n\t\t\t} else if (is(builder, PgPolicy)) {\n\t\t\t\tpolicies.push(builder);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tcolumns,\n\t\tindexes,\n\t\tforeignKeys,\n\t\tchecks,\n\t\tprimaryKeys,\n\t\tuniqueConstraints,\n\t\tname,\n\t\tschema,\n\t\tpolicies,\n\t\tenableRLS,\n\t};\n}\n\nexport function extractUsedTable(table: PgTable | Subquery | PgViewBase | SQL): string[] {\n\tif (is(table, PgTable)) {\n\t\treturn [table[Schema] ? `${table[Schema]}.${table[Table.Symbol.BaseName]}` : table[Table.Symbol.BaseName]];\n\t}\n\tif (is(table, Subquery)) {\n\t\treturn table._.usedTables ?? [];\n\t}\n\tif (is(table, SQL)) {\n\t\treturn table.usedTables ?? [];\n\t}\n\treturn [];\n}\n\nexport function getViewConfig<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n>(view: PgView<TName, TExisting>) {\n\treturn {\n\t\t...view[ViewBaseConfig],\n\t\t...view[PgViewConfig],\n\t};\n}\n\nexport function getMaterializedViewConfig<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n>(view: PgMaterializedView<TName, TExisting>) {\n\treturn {\n\t\t...view[ViewBaseConfig],\n\t\t...view[PgMaterializedViewConfig],\n\t};\n}\n\nexport type ColumnsWithTable<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyPgColumn<{ tableName: TTableName }>[],\n> = { [Key in keyof TColumns]: AnyPgColumn<{ tableName: TForeignTableName }> };\n", "import type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport type {\n\tPgPreparedQuery,\n\tPgQueryResultHKT,\n\tPgQueryResultKind,\n\tPgSession,\n\tPreparedQueryConfig,\n} from '~/pg-core/session.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { SelectResultFields } from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { ColumnsSelection, Query, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport { getTableName, Table } from '~/table.ts';\nimport { tracer } from '~/tracing.ts';\nimport { type NeonAuthToken, orderSelectedFields } from '~/utils.ts';\nimport type { PgColumn } from '../columns/common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport type { SelectedFieldsFlat, SelectedFieldsOrdered } from './select.types.ts';\n\nexport type PgDeleteWithout<\n\tT extends AnyPgDeleteBase,\n\tTDynamic extends boolean,\n\tK extends keyof T & string,\n> = TDynamic extends true ? T\n\t: Omit<\n\t\tPgDeleteBase<\n\t\t\tT['_']['table'],\n\t\t\tT['_']['queryResult'],\n\t\t\tT['_']['selectedFields'],\n\t\t\tT['_']['returning'],\n\t\t\tTDynamic,\n\t\t\tT['_']['excludedMethods'] | K\n\t\t>,\n\t\tT['_']['excludedMethods'] | K\n\t>;\n\nexport type PgDelete<\n\tTTable extends PgTable = PgTable,\n\tTQueryResult extends PgQueryResultHKT = PgQueryResultHKT,\n\tTSelectedFields extends ColumnsSelection | undefined = undefined,\n\tTReturning extends Record<string, unknown> | undefined = Record<string, unknown> | undefined,\n> = PgDeleteBase<TTable, TQueryResult, TSelectedFields, TReturning, true, never>;\n\nexport interface PgDeleteConfig {\n\twhere?: SQL | undefined;\n\ttable: PgTable;\n\treturningFields?: SelectedFieldsFlat;\n\treturning?: SelectedFieldsOrdered;\n\twithList?: Subquery[];\n}\n\nexport type PgDeleteReturningAll<\n\tT extends AnyPgDeleteBase,\n\tTDynamic extends boolean,\n> = PgDeleteWithout<\n\tPgDeleteBase<\n\t\tT['_']['table'],\n\t\tT['_']['queryResult'],\n\t\tT['_']['table']['_']['columns'],\n\t\tT['_']['table']['$inferSelect'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type PgDeleteReturning<\n\tT extends AnyPgDeleteBase,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFieldsFlat,\n> = PgDeleteWithout<\n\tPgDeleteBase<\n\t\tT['_']['table'],\n\t\tT['_']['queryResult'],\n\t\tTSelectedFields,\n\t\tSelectResultFields<TSelectedFields>,\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type PgDeletePrepare<T extends AnyPgDeleteBase> = PgPreparedQuery<\n\tPreparedQueryConfig & {\n\t\texecute: T['_']['returning'] extends undefined ? PgQueryResultKind<T['_']['queryResult'], never>\n\t\t\t: T['_']['returning'][];\n\t}\n>;\n\nexport type PgDeleteDynamic<T extends AnyPgDeleteBase> = PgDelete<\n\tT['_']['table'],\n\tT['_']['queryResult'],\n\tT['_']['selectedFields'],\n\tT['_']['returning']\n>;\n\nexport type AnyPgDeleteBase = PgDeleteBase<any, any, any, any, any, any>;\n\nexport interface PgDeleteBase<\n\tTTable extends PgTable,\n\tTQueryResult extends PgQueryResultHKT,\n\tTSelectedFields extends ColumnsSelection | undefined = undefined,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends\n\tTypedQueryBuilder<\n\t\tTSelectedFields,\n\t\tTReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[]\n\t>,\n\tQueryPromise<TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[]>,\n\tRunnableQuery<TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[], 'pg'>,\n\tSQLWrapper\n{\n\treadonly _: {\n\t\treadonly dialect: 'pg';\n\t\treadonly table: TTable;\n\t\treadonly queryResult: TQueryResult;\n\t\treadonly selectedFields: TSelectedFields;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[];\n\t};\n}\n\nexport class PgDeleteBase<\n\tTTable extends PgTable,\n\tTQueryResult extends PgQueryResultHKT,\n\tTSelectedFields extends ColumnsSelection | undefined = undefined,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[]>\n\timplements\n\t\tTypedQueryBuilder<\n\t\t\tTSelectedFields,\n\t\t\tTReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[]\n\t\t>,\n\t\tRunnableQuery<TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[], 'pg'>,\n\t\tSQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'PgDelete';\n\n\tprivate config: PgDeleteConfig;\n\tprotected cacheConfig?: WithCacheConfig;\n\n\tconstructor(\n\t\ttable: TTable,\n\t\tprivate session: PgSession,\n\t\tprivate dialect: PgDialect,\n\t\twithList?: Subquery[],\n\t) {\n\t\tsuper();\n\t\tthis.config = { table, withList };\n\t}\n\n\t/**\n\t * Adds a `where` clause to the query.\n\t *\n\t * Calling this method will delete only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t *\n\t * @param where the `where` clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be deleted.\n\t *\n\t * ```ts\n\t * // Delete all cars with green color\n\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t * // or\n\t * await db.delete(cars).where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Delete all BMW cars with a green color\n\t * await db.delete(cars).where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Delete all cars with the green or blue color\n\t * await db.delete(cars).where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(where: SQL | undefined): PgDeleteWithout<this, TDynamic, 'where'> {\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the deleted rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete#delete-with-return}\n\t *\n\t * @example\n\t * ```ts\n\t * // Delete all cars with the green color and return all fields\n\t * const deletedCars: Car[] = await db.delete(cars)\n\t *   .where(eq(cars.color, 'green'))\n\t *   .returning();\n\t *\n\t * // Delete all cars with the green color and return only their id and brand fields\n\t * const deletedCarsIdsAndBrands: { id: number, brand: string }[] = await db.delete(cars)\n\t *   .where(eq(cars.color, 'green'))\n\t *   .returning({ id: cars.id, brand: cars.brand });\n\t * ```\n\t */\n\treturning(): PgDeleteReturningAll<this, TDynamic>;\n\treturning<TSelectedFields extends SelectedFieldsFlat>(\n\t\tfields: TSelectedFields,\n\t): PgDeleteReturning<this, TDynamic, TSelectedFields>;\n\treturning(\n\t\tfields: SelectedFieldsFlat = this.config.table[Table.Symbol.Columns],\n\t): PgDeleteReturning<this, TDynamic, any> {\n\t\tthis.config.returningFields = fields;\n\t\tthis.config.returning = orderSelectedFields<PgColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildDeleteQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(name?: string): PgDeletePrepare<this> {\n\t\treturn tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\treturn this.session.prepareQuery<\n\t\t\t\tPreparedQueryConfig & {\n\t\t\t\t\texecute: TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[];\n\t\t\t\t}\n\t\t\t>(this.dialect.sqlToQuery(this.getSQL()), this.config.returning, name, true, undefined, {\n\t\t\t\ttype: 'delete',\n\t\t\t\ttables: extractUsedTable(this.config.table),\n\t\t\t}, this.cacheConfig);\n\t\t});\n\t}\n\n\tprepare(name: string): PgDeletePrepare<this> {\n\t\treturn this._prepare(name);\n\t}\n\n\tprivate authToken?: NeonAuthToken;\n\t/** @internal */\n\tsetToken(token?: NeonAuthToken) {\n\t\tthis.authToken = token;\n\t\treturn this;\n\t}\n\n\toverride execute: ReturnType<this['prepare']>['execute'] = (placeholderValues) => {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\treturn this._prepare().execute(placeholderValues, this.authToken);\n\t\t});\n\t};\n\n\t/** @internal */\n\tgetSelectedFields(): this['_']['selectedFields'] {\n\t\treturn (\n\t\t\tthis.config.returningFields\n\t\t\t\t? new Proxy(\n\t\t\t\t\tthis.config.returningFields,\n\t\t\t\t\tnew SelectionProxyHandler({\n\t\t\t\t\t\talias: getTableName(this.config.table),\n\t\t\t\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\t\t\t\tsqlBehavior: 'error',\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t: undefined\n\t\t) as this['_']['selectedFields'];\n\t}\n\n\t$dynamic(): PgDeleteDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n", "import type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport type { IndexColumn } from '~/pg-core/indexes.ts';\nimport type {\n\tPgPreparedQuery,\n\tPgQueryResultHKT,\n\tPgQueryResultKind,\n\tPgSession,\n\tPreparedQueryConfig,\n} from '~/pg-core/session.ts';\nimport type { PgTable, TableConfig } from '~/pg-core/table.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { SelectResultFields } from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { ColumnsSelection, Placeholder, Query, SQLWrapper } from '~/sql/sql.ts';\nimport { Param, SQL, sql } from '~/sql/sql.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport type { InferInsertModel } from '~/table.ts';\nimport { Columns, getTableName, Table } from '~/table.ts';\nimport { tracer } from '~/tracing.ts';\nimport { haveSameKeys, mapUpdateSet, type NeonAuthToken, orderSelectedFields } from '~/utils.ts';\nimport type { AnyPgColumn, PgColumn } from '../columns/common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport { QueryBuilder } from './query-builder.ts';\nimport type { SelectedFieldsFlat, SelectedFieldsOrdered } from './select.types.ts';\nimport type { PgUpdateSetSource } from './update.ts';\n\nexport interface PgInsertConfig<TTable extends PgTable = PgTable> {\n\ttable: TTable;\n\tvalues: Record<string, Param | SQL>[] | PgInsertSelectQueryBuilder<TTable> | SQL;\n\twithList?: Subquery[];\n\tonConflict?: SQL;\n\treturningFields?: SelectedFieldsFlat;\n\treturning?: SelectedFieldsOrdered;\n\tselect?: boolean;\n\toverridingSystemValue_?: boolean;\n}\n\nexport type PgInsertValue<TTable extends PgTable<TableConfig>, OverrideT extends boolean = false> =\n\t& {\n\t\t[Key in keyof InferInsertModel<TTable, { dbColumnNames: false; override: OverrideT }>]:\n\t\t\t| InferInsertModel<TTable, { dbColumnNames: false; override: OverrideT }>[Key]\n\t\t\t| SQL\n\t\t\t| Placeholder;\n\t}\n\t& {};\n\nexport type PgInsertSelectQueryBuilder<TTable extends PgTable> = TypedQueryBuilder<\n\t{ [K in keyof TTable['$inferInsert']]: AnyPgColumn | SQL | SQL.Aliased | TTable['$inferInsert'][K] }\n>;\n\nexport class PgInsertBuilder<\n\tTTable extends PgTable,\n\tTQueryResult extends PgQueryResultHKT,\n\tOverrideT extends boolean = false,\n> {\n\tstatic readonly [entityKind]: string = 'PgInsertBuilder';\n\n\tconstructor(\n\t\tprivate table: TTable,\n\t\tprivate session: PgSession,\n\t\tprivate dialect: PgDialect,\n\t\tprivate withList?: Subquery[],\n\t\tprivate overridingSystemValue_?: boolean,\n\t) {}\n\n\tprivate authToken?: NeonAuthToken;\n\t/** @internal */\n\tsetToken(token?: NeonAuthToken) {\n\t\tthis.authToken = token;\n\t\treturn this;\n\t}\n\n\toverridingSystemValue(): Omit<PgInsertBuilder<TTable, TQueryResult, true>, 'overridingSystemValue'> {\n\t\tthis.overridingSystemValue_ = true;\n\t\treturn this as any;\n\t}\n\n\tvalues(value: PgInsertValue<TTable, OverrideT>): PgInsertBase<TTable, TQueryResult>;\n\tvalues(values: PgInsertValue<TTable, OverrideT>[]): PgInsertBase<TTable, TQueryResult>;\n\tvalues(\n\t\tvalues: PgInsertValue<TTable, OverrideT> | PgInsertValue<TTable, OverrideT>[],\n\t): PgInsertBase<TTable, TQueryResult> {\n\t\tvalues = Array.isArray(values) ? values : [values];\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('values() must be called with at least one value');\n\t\t}\n\t\tconst mappedValues = values.map((entry) => {\n\t\t\tconst result: Record<string, Param | SQL> = {};\n\t\t\tconst cols = this.table[Table.Symbol.Columns];\n\t\t\tfor (const colKey of Object.keys(entry)) {\n\t\t\t\tconst colValue = entry[colKey as keyof typeof entry];\n\t\t\t\tresult[colKey] = is(colValue, SQL) ? colValue : new Param(colValue, cols[colKey]);\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\n\t\treturn new PgInsertBase(\n\t\t\tthis.table,\n\t\t\tmappedValues,\n\t\t\tthis.session,\n\t\t\tthis.dialect,\n\t\t\tthis.withList,\n\t\t\tfalse,\n\t\t\tthis.overridingSystemValue_,\n\t\t).setToken(this.authToken) as any;\n\t}\n\n\tselect(selectQuery: (qb: QueryBuilder) => PgInsertSelectQueryBuilder<TTable>): PgInsertBase<TTable, TQueryResult>;\n\tselect(selectQuery: (qb: QueryBuilder) => SQL): PgInsertBase<TTable, TQueryResult>;\n\tselect(selectQuery: SQL): PgInsertBase<TTable, TQueryResult>;\n\tselect(selectQuery: PgInsertSelectQueryBuilder<TTable>): PgInsertBase<TTable, TQueryResult>;\n\tselect(\n\t\tselectQuery:\n\t\t\t| SQL\n\t\t\t| PgInsertSelectQueryBuilder<TTable>\n\t\t\t| ((qb: QueryBuilder) => PgInsertSelectQueryBuilder<TTable> | SQL),\n\t): PgInsertBase<TTable, TQueryResult> {\n\t\tconst select = typeof selectQuery === 'function' ? selectQuery(new QueryBuilder()) : selectQuery;\n\n\t\tif (\n\t\t\t!is(select, SQL)\n\t\t\t&& !haveSameKeys(this.table[Columns], select._.selectedFields)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t'Insert select error: selected fields are not the same or are in a different order compared to the table definition',\n\t\t\t);\n\t\t}\n\n\t\treturn new PgInsertBase(this.table, select, this.session, this.dialect, this.withList, true);\n\t}\n}\n\nexport type PgInsertWithout<T extends AnyPgInsert, TDynamic extends boolean, K extends keyof T & string> =\n\tTDynamic extends true ? T\n\t\t: Omit<\n\t\t\tPgInsertBase<\n\t\t\t\tT['_']['table'],\n\t\t\t\tT['_']['queryResult'],\n\t\t\t\tT['_']['selectedFields'],\n\t\t\t\tT['_']['returning'],\n\t\t\t\tTDynamic,\n\t\t\t\tT['_']['excludedMethods'] | K\n\t\t\t>,\n\t\t\tT['_']['excludedMethods'] | K\n\t\t>;\n\nexport type PgInsertReturning<\n\tT extends AnyPgInsert,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFieldsFlat,\n> = PgInsertBase<\n\tT['_']['table'],\n\tT['_']['queryResult'],\n\tTSelectedFields,\n\tSelectResultFields<TSelectedFields>,\n\tTDynamic,\n\tT['_']['excludedMethods']\n>;\n\nexport type PgInsertReturningAll<T extends AnyPgInsert, TDynamic extends boolean> = PgInsertBase<\n\tT['_']['table'],\n\tT['_']['queryResult'],\n\tT['_']['table']['_']['columns'],\n\tT['_']['table']['$inferSelect'],\n\tTDynamic,\n\tT['_']['excludedMethods']\n>;\n\nexport interface PgInsertOnConflictDoUpdateConfig<T extends AnyPgInsert> {\n\ttarget: IndexColumn | IndexColumn[];\n\t/** @deprecated use either `targetWhere` or `setWhere` */\n\twhere?: SQL;\n\t// TODO: add tests for targetWhere and setWhere\n\ttargetWhere?: SQL;\n\tsetWhere?: SQL;\n\tset: PgUpdateSetSource<T['_']['table']>;\n}\n\nexport type PgInsertPrepare<T extends AnyPgInsert> = PgPreparedQuery<\n\tPreparedQueryConfig & {\n\t\texecute: T['_']['returning'] extends undefined ? PgQueryResultKind<T['_']['queryResult'], never>\n\t\t\t: T['_']['returning'][];\n\t}\n>;\n\nexport type PgInsertDynamic<T extends AnyPgInsert> = PgInsert<\n\tT['_']['table'],\n\tT['_']['queryResult'],\n\tT['_']['returning']\n>;\n\nexport type AnyPgInsert = PgInsertBase<any, any, any, any, any, any>;\n\nexport type PgInsert<\n\tTTable extends PgTable = PgTable,\n\tTQueryResult extends PgQueryResultHKT = PgQueryResultHKT,\n\tTSelectedFields extends ColumnsSelection | undefined = ColumnsSelection | undefined,\n\tTReturning extends Record<string, unknown> | undefined = Record<string, unknown> | undefined,\n> = PgInsertBase<TTable, TQueryResult, TSelectedFields, TReturning, true, never>;\n\nexport interface PgInsertBase<\n\tTTable extends PgTable,\n\tTQueryResult extends PgQueryResultHKT,\n\tTSelectedFields extends ColumnsSelection | undefined = undefined,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends\n\tTypedQueryBuilder<\n\t\tTSelectedFields,\n\t\tTReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[]\n\t>,\n\tQueryPromise<TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[]>,\n\tRunnableQuery<TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[], 'pg'>,\n\tSQLWrapper\n{\n\treadonly _: {\n\t\treadonly dialect: 'pg';\n\t\treadonly table: TTable;\n\t\treadonly queryResult: TQueryResult;\n\t\treadonly selectedFields: TSelectedFields;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[];\n\t};\n}\n\nexport class PgInsertBase<\n\tTTable extends PgTable,\n\tTQueryResult extends PgQueryResultHKT,\n\tTSelectedFields extends ColumnsSelection | undefined = undefined,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[]>\n\timplements\n\t\tTypedQueryBuilder<\n\t\t\tTSelectedFields,\n\t\t\tTReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[]\n\t\t>,\n\t\tRunnableQuery<TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[], 'pg'>,\n\t\tSQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'PgInsert';\n\n\tprivate config: PgInsertConfig<TTable>;\n\tprotected cacheConfig?: WithCacheConfig;\n\n\tconstructor(\n\t\ttable: TTable,\n\t\tvalues: PgInsertConfig['values'],\n\t\tprivate session: PgSession,\n\t\tprivate dialect: PgDialect,\n\t\twithList?: Subquery[],\n\t\tselect?: boolean,\n\t\toverridingSystemValue_?: boolean,\n\t) {\n\t\tsuper();\n\t\tthis.config = { table, values: values as any, withList, select, overridingSystemValue_ };\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the inserted rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#insert-returning}\n\t *\n\t * @example\n\t * ```ts\n\t * // Insert one row and return all fields\n\t * const insertedCar: Car[] = await db.insert(cars)\n\t *   .values({ brand: 'BMW' })\n\t *   .returning();\n\t *\n\t * // Insert one row and return only the id\n\t * const insertedCarId: { id: number }[] = await db.insert(cars)\n\t *   .values({ brand: 'BMW' })\n\t *   .returning({ id: cars.id });\n\t * ```\n\t */\n\treturning(): PgInsertWithout<PgInsertReturningAll<this, TDynamic>, TDynamic, 'returning'>;\n\treturning<TSelectedFields extends SelectedFieldsFlat>(\n\t\tfields: TSelectedFields,\n\t): PgInsertWithout<PgInsertReturning<this, TDynamic, TSelectedFields>, TDynamic, 'returning'>;\n\treturning(\n\t\tfields: SelectedFieldsFlat = this.config.table[Table.Symbol.Columns],\n\t): PgInsertWithout<AnyPgInsert, TDynamic, 'returning'> {\n\t\tthis.config.returningFields = fields;\n\t\tthis.config.returning = orderSelectedFields<PgColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `on conflict do nothing` clause to the query.\n\t *\n\t * Calling this method simply avoids inserting a row as its alternative action.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#on-conflict-do-nothing}\n\t *\n\t * @param config The `target` and `where` clauses.\n\t *\n\t * @example\n\t * ```ts\n\t * // Insert one row and cancel the insert if there's a conflict\n\t * await db.insert(cars)\n\t *   .values({ id: 1, brand: 'BMW' })\n\t *   .onConflictDoNothing();\n\t *\n\t * // Explicitly specify conflict target\n\t * await db.insert(cars)\n\t *   .values({ id: 1, brand: 'BMW' })\n\t *   .onConflictDoNothing({ target: cars.id });\n\t * ```\n\t */\n\tonConflictDoNothing(\n\t\tconfig: { target?: IndexColumn | IndexColumn[]; where?: SQL } = {},\n\t): PgInsertWithout<this, TDynamic, 'onConflictDoNothing' | 'onConflictDoUpdate'> {\n\t\tif (config.target === undefined) {\n\t\t\tthis.config.onConflict = sql`do nothing`;\n\t\t} else {\n\t\t\tlet targetColumn = '';\n\t\t\ttargetColumn = Array.isArray(config.target)\n\t\t\t\t? config.target.map((it) => this.dialect.escapeName(this.dialect.casing.getColumnCasing(it))).join(',')\n\t\t\t\t: this.dialect.escapeName(this.dialect.casing.getColumnCasing(config.target));\n\n\t\t\tconst whereSql = config.where ? sql` where ${config.where}` : undefined;\n\t\t\tthis.config.onConflict = sql`(${sql.raw(targetColumn)})${whereSql} do nothing`;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `on conflict do update` clause to the query.\n\t *\n\t * Calling this method will update the existing row that conflicts with the row proposed for insertion as its alternative action.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#upserts-and-conflicts}\n\t *\n\t * @param config The `target`, `set` and `where` clauses.\n\t *\n\t * @example\n\t * ```ts\n\t * // Update the row if there's a conflict\n\t * await db.insert(cars)\n\t *   .values({ id: 1, brand: 'BMW' })\n\t *   .onConflictDoUpdate({\n\t *     target: cars.id,\n\t *     set: { brand: 'Porsche' }\n\t *   });\n\t *\n\t * // Upsert with 'where' clause\n\t * await db.insert(cars)\n\t *   .values({ id: 1, brand: 'BMW' })\n\t *   .onConflictDoUpdate({\n\t *     target: cars.id,\n\t *     set: { brand: 'newBMW' },\n\t *     targetWhere: sql`${cars.createdAt} > '2023-01-01'::date`,\n\t *   });\n\t * ```\n\t */\n\tonConflictDoUpdate(\n\t\tconfig: PgInsertOnConflictDoUpdateConfig<this>,\n\t): PgInsertWithout<this, TDynamic, 'onConflictDoNothing' | 'onConflictDoUpdate'> {\n\t\tif (config.where && (config.targetWhere || config.setWhere)) {\n\t\t\tthrow new Error(\n\t\t\t\t'You cannot use both \"where\" and \"targetWhere\"/\"setWhere\" at the same time - \"where\" is deprecated, use \"targetWhere\" or \"setWhere\" instead.',\n\t\t\t);\n\t\t}\n\t\tconst whereSql = config.where ? sql` where ${config.where}` : undefined;\n\t\tconst targetWhereSql = config.targetWhere ? sql` where ${config.targetWhere}` : undefined;\n\t\tconst setWhereSql = config.setWhere ? sql` where ${config.setWhere}` : undefined;\n\t\tconst setSql = this.dialect.buildUpdateSet(this.config.table, mapUpdateSet(this.config.table, config.set));\n\t\tlet targetColumn = '';\n\t\ttargetColumn = Array.isArray(config.target)\n\t\t\t? config.target.map((it) => this.dialect.escapeName(this.dialect.casing.getColumnCasing(it))).join(',')\n\t\t\t: this.dialect.escapeName(this.dialect.casing.getColumnCasing(config.target));\n\t\tthis.config.onConflict = sql`(${\n\t\t\tsql.raw(targetColumn)\n\t\t})${targetWhereSql} do update set ${setSql}${whereSql}${setWhereSql}`;\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildInsertQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(name?: string): PgInsertPrepare<this> {\n\t\treturn tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\treturn this.session.prepareQuery<\n\t\t\t\tPreparedQueryConfig & {\n\t\t\t\t\texecute: TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[];\n\t\t\t\t}\n\t\t\t>(this.dialect.sqlToQuery(this.getSQL()), this.config.returning, name, true, undefined, {\n\t\t\t\ttype: 'insert',\n\t\t\t\ttables: extractUsedTable(this.config.table),\n\t\t\t}, this.cacheConfig);\n\t\t});\n\t}\n\n\tprepare(name: string): PgInsertPrepare<this> {\n\t\treturn this._prepare(name);\n\t}\n\n\tprivate authToken?: NeonAuthToken;\n\t/** @internal */\n\tsetToken(token?: NeonAuthToken) {\n\t\tthis.authToken = token;\n\t\treturn this;\n\t}\n\n\toverride execute: ReturnType<this['prepare']>['execute'] = (placeholderValues) => {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\treturn this._prepare().execute(placeholderValues, this.authToken);\n\t\t});\n\t};\n\n\t/** @internal */\n\tgetSelectedFields(): this['_']['selectedFields'] {\n\t\treturn (\n\t\t\tthis.config.returningFields\n\t\t\t\t? new Proxy(\n\t\t\t\t\tthis.config.returningFields,\n\t\t\t\t\tnew SelectionProxyHandler({\n\t\t\t\t\t\talias: getTableName(this.config.table),\n\t\t\t\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\t\t\t\tsqlBehavior: 'error',\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t: undefined\n\t\t) as this['_']['selectedFields'];\n\t}\n\n\t$dynamic(): PgInsertDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport type {\n\tPgPreparedQuery,\n\tPgQueryResultHKT,\n\tPgQueryResultKind,\n\tPgSession,\n\tPreparedQueryConfig,\n} from '~/pg-core/session.ts';\nimport type { PgMaterializedView } from '~/pg-core/view.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport type { Query, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport { tracer } from '~/tracing.ts';\nimport type { NeonAuthToken } from '~/utils';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface PgRefreshMaterializedView<TQueryResult extends PgQueryResultHKT>\n\textends\n\t\tQueryPromise<PgQueryResultKind<TQueryResult, never>>,\n\t\tRunnableQuery<PgQueryResultKind<TQueryResult, never>, 'pg'>,\n\t\tSQLWrapper\n{\n\treadonly _: {\n\t\treadonly dialect: 'pg';\n\t\treadonly result: PgQueryResultKind<TQueryResult, never>;\n\t};\n}\n\nexport class PgRefreshMaterializedView<TQueryResult extends PgQueryResultHKT>\n\textends QueryPromise<PgQueryResultKind<TQueryResult, never>>\n\timplements RunnableQuery<PgQueryResultKind<TQueryResult, never>, 'pg'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'PgRefreshMaterializedView';\n\n\tprivate config: {\n\t\tview: PgMaterializedView;\n\t\tconcurrently?: boolean;\n\t\twithNoData?: boolean;\n\t};\n\n\tconstructor(\n\t\tview: PgMaterializedView,\n\t\tprivate session: PgSession,\n\t\tprivate dialect: PgDialect,\n\t) {\n\t\tsuper();\n\t\tthis.config = { view };\n\t}\n\n\tconcurrently(): this {\n\t\tif (this.config.withNoData !== undefined) {\n\t\t\tthrow new Error('Cannot use concurrently and withNoData together');\n\t\t}\n\t\tthis.config.concurrently = true;\n\t\treturn this;\n\t}\n\n\twithNoData(): this {\n\t\tif (this.config.concurrently !== undefined) {\n\t\t\tthrow new Error('Cannot use concurrently and withNoData together');\n\t\t}\n\t\tthis.config.withNoData = true;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildRefreshMaterializedViewQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(name?: string): PgPreparedQuery<\n\t\tPreparedQueryConfig & {\n\t\t\texecute: PgQueryResultKind<TQueryResult, never>;\n\t\t}\n\t> {\n\t\treturn tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\treturn this.session.prepareQuery(this.dialect.sqlToQuery(this.getSQL()), undefined, name, true);\n\t\t});\n\t}\n\n\tprepare(name: string): PgPreparedQuery<\n\t\tPreparedQueryConfig & {\n\t\t\texecute: PgQueryResultKind<TQueryResult, never>;\n\t\t}\n\t> {\n\t\treturn this._prepare(name);\n\t}\n\n\tprivate authToken?: NeonAuthToken;\n\t/** @internal */\n\tsetToken(token: NeonAuthToken) {\n\t\tthis.authToken = token;\n\t\treturn this;\n\t}\n\n\texecute: ReturnType<this['prepare']>['execute'] = (placeholderValues) => {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\treturn this._prepare().execute(placeholderValues, this.authToken);\n\t\t});\n\t};\n}\n", "//# sourceMappingURL=select.types.js.map", "import type { WithCacheConfig } from '~/cache/core/types.ts';\nimport type { GetColumnData } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport type {\n\tPgPreparedQuery,\n\tPgQueryResultHKT,\n\tPgQueryResultKind,\n\tPgSession,\n\tPreparedQueryConfig,\n} from '~/pg-core/session.ts';\nimport { PgTable } from '~/pg-core/table.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type {\n\tAppendToNullabilityMap,\n\tAppendToResult,\n\tGetSelectTableName,\n\tGetSelectTableSelection,\n\tJoinNullability,\n\tJoinType,\n\tSelectMode,\n\tSelectResult,\n} from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport { type ColumnsSelection, type Query, SQL, type SQLWrapper } from '~/sql/sql.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { getTableName, Table } from '~/table.ts';\nimport {\n\ttype Assume,\n\ttype DrizzleTypeError,\n\ttype Equal,\n\tgetTableLikeName,\n\tmapUpdateSet,\n\ttype NeonAuthToken,\n\torderSelectedFields,\n\ttype Simplify,\n\ttype UpdateSet,\n} from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { PgColumn } from '../columns/common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport type { PgViewBase } from '../view-base.ts';\nimport type {\n\tPgSelectJoinConfig,\n\tSelectedFields,\n\tSelectedFieldsOrdered,\n\tTableLikeHasEmptySelection,\n} from './select.types.ts';\n\nexport interface PgUpdateConfig {\n\twhere?: SQL | undefined;\n\tset: UpdateSet;\n\ttable: PgTable;\n\tfrom?: PgTable | Subquery | PgViewBase | SQL;\n\tjoins: PgSelectJoinConfig[];\n\treturningFields?: SelectedFields;\n\treturning?: SelectedFieldsOrdered;\n\twithList?: Subquery[];\n}\n\nexport type PgUpdateSetSource<TTable extends PgTable> =\n\t& {\n\t\t[Key in keyof TTable['$inferInsert']]?:\n\t\t\t| GetColumnData<TTable['_']['columns'][Key]>\n\t\t\t| SQL\n\t\t\t| PgColumn\n\t\t\t| undefined;\n\t}\n\t& {};\n\nexport class PgUpdateBuilder<TTable extends PgTable, TQueryResult extends PgQueryResultHKT> {\n\tstatic readonly [entityKind]: string = 'PgUpdateBuilder';\n\n\tdeclare readonly _: {\n\t\treadonly table: TTable;\n\t};\n\n\tconstructor(\n\t\tprivate table: TTable,\n\t\tprivate session: PgSession,\n\t\tprivate dialect: PgDialect,\n\t\tprivate withList?: Subquery[],\n\t) {}\n\n\tprivate authToken?: NeonAuthToken;\n\tsetToken(token: NeonAuthToken) {\n\t\tthis.authToken = token;\n\t\treturn this;\n\t}\n\n\tset(\n\t\tvalues: PgUpdateSetSource<TTable>,\n\t): PgUpdateWithout<PgUpdateBase<TTable, TQueryResult>, false, 'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'> {\n\t\treturn new PgUpdateBase<TTable, TQueryResult>(\n\t\t\tthis.table,\n\t\t\tmapUpdateSet(this.table, values),\n\t\t\tthis.session,\n\t\t\tthis.dialect,\n\t\t\tthis.withList,\n\t\t).setToken(this.authToken);\n\t}\n}\n\nexport type PgUpdateWithout<\n\tT extends AnyPgUpdate,\n\tTDynamic extends boolean,\n\tK extends keyof T & string,\n> = TDynamic extends true ? T : Omit<\n\tPgUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['queryResult'],\n\t\tT['_']['from'],\n\t\tT['_']['selectedFields'],\n\t\tT['_']['returning'],\n\t\tT['_']['nullabilityMap'],\n\t\tT['_']['joins'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods'] | K\n\t>,\n\tT['_']['excludedMethods'] | K\n>;\n\nexport type PgUpdateWithJoins<\n\tT extends AnyPgUpdate,\n\tTDynamic extends boolean,\n\tTFrom extends PgTable | Subquery | PgViewBase | SQL,\n> = TDynamic extends true ? T : Omit<\n\tPgUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['queryResult'],\n\t\tTFrom,\n\t\tT['_']['selectedFields'],\n\t\tT['_']['returning'],\n\t\tAppendToNullabilityMap<T['_']['nullabilityMap'], GetSelectTableName<TFrom>, 'inner'>,\n\t\t[...T['_']['joins'], {\n\t\t\tname: GetSelectTableName<TFrom>;\n\t\t\tjoinType: 'inner';\n\t\t\ttable: TFrom;\n\t\t}],\n\t\tTDynamic,\n\t\tExclude<T['_']['excludedMethods'] | 'from', 'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'>\n\t>,\n\tExclude<T['_']['excludedMethods'] | 'from', 'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'>\n>;\n\nexport type PgUpdateJoinFn<\n\tT extends AnyPgUpdate,\n\tTDynamic extends boolean,\n\tTJoinType extends JoinType,\n> = <\n\tTJoinedTable extends PgTable | Subquery | PgViewBase | SQL,\n>(\n\ttable: TableLikeHasEmptySelection<TJoinedTable> extends true ? DrizzleTypeError<\n\t\t\t\"Cannot reference a data-modifying statement subquery if it doesn't contain a `returning` clause\"\n\t\t>\n\t\t: TJoinedTable,\n\ton:\n\t\t| (\n\t\t\t(\n\t\t\t\tupdateTable: T['_']['table']['_']['columns'],\n\t\t\t\tfrom: T['_']['from'] extends PgTable ? T['_']['from']['_']['columns']\n\t\t\t\t\t: T['_']['from'] extends Subquery | PgViewBase ? T['_']['from']['_']['selectedFields']\n\t\t\t\t\t: never,\n\t\t\t) => SQL | undefined\n\t\t)\n\t\t| SQL\n\t\t| undefined,\n) => PgUpdateJoin<T, TDynamic, TJoinType, TJoinedTable>;\n\nexport type PgUpdateJoin<\n\tT extends AnyPgUpdate,\n\tTDynamic extends boolean,\n\tTJoinType extends JoinType,\n\tTJoinedTable extends PgTable | Subquery | PgViewBase | SQL,\n> = TDynamic extends true ? T : PgUpdateBase<\n\tT['_']['table'],\n\tT['_']['queryResult'],\n\tT['_']['from'],\n\tT['_']['selectedFields'],\n\tT['_']['returning'],\n\tAppendToNullabilityMap<T['_']['nullabilityMap'], GetSelectTableName<TJoinedTable>, TJoinType>,\n\t[...T['_']['joins'], {\n\t\tname: GetSelectTableName<TJoinedTable>;\n\t\tjoinType: TJoinType;\n\t\ttable: TJoinedTable;\n\t}],\n\tTDynamic,\n\tT['_']['excludedMethods']\n>;\n\ntype Join = {\n\tname: string | undefined;\n\tjoinType: JoinType;\n\ttable: PgTable | Subquery | PgViewBase | SQL;\n};\n\ntype AccumulateToResult<\n\tT extends AnyPgUpdate,\n\tTSelectMode extends SelectMode,\n\tTJoins extends Join[],\n\tTSelectedFields extends ColumnsSelection,\n> = TJoins extends [infer TJoin extends Join, ...infer TRest extends Join[]] ? AccumulateToResult<\n\t\tT,\n\t\tTSelectMode extends 'partial' ? TSelectMode : 'multiple',\n\t\tTRest,\n\t\tAppendToResult<\n\t\t\tT['_']['table']['_']['name'],\n\t\t\tTSelectedFields,\n\t\t\tTJoin['name'],\n\t\t\tTJoin['table'] extends Table ? TJoin['table']['_']['columns']\n\t\t\t\t: TJoin['table'] extends Subquery ? Assume<TJoin['table']['_']['selectedFields'], SelectedFields>\n\t\t\t\t: never,\n\t\t\tTSelectMode extends 'partial' ? TSelectMode : 'multiple'\n\t\t>\n\t>\n\t: TSelectedFields;\n\nexport type PgUpdateReturningAll<T extends AnyPgUpdate, TDynamic extends boolean> = PgUpdateWithout<\n\tPgUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['queryResult'],\n\t\tT['_']['from'],\n\t\tEqual<T['_']['joins'], []> extends true ? T['_']['table']['_']['columns'] : Simplify<\n\t\t\t& Record<T['_']['table']['_']['name'], T['_']['table']['_']['columns']>\n\t\t\t& {\n\t\t\t\t[K in keyof T['_']['joins'] as T['_']['joins'][K]['table']['_']['name']]:\n\t\t\t\t\tT['_']['joins'][K]['table']['_']['columns'];\n\t\t\t}\n\t\t>,\n\t\tSelectResult<\n\t\t\tAccumulateToResult<\n\t\t\t\tT,\n\t\t\t\t'single',\n\t\t\t\tT['_']['joins'],\n\t\t\t\tGetSelectTableSelection<T['_']['table']>\n\t\t\t>,\n\t\t\t'partial',\n\t\t\tT['_']['nullabilityMap']\n\t\t>,\n\t\tT['_']['nullabilityMap'],\n\t\tT['_']['joins'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type PgUpdateReturning<\n\tT extends AnyPgUpdate,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFields,\n> = PgUpdateWithout<\n\tPgUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['queryResult'],\n\t\tT['_']['from'],\n\t\tTSelectedFields,\n\t\tSelectResult<\n\t\t\tAccumulateToResult<\n\t\t\t\tT,\n\t\t\t\t'partial',\n\t\t\t\tT['_']['joins'],\n\t\t\t\tTSelectedFields\n\t\t\t>,\n\t\t\t'partial',\n\t\t\tT['_']['nullabilityMap']\n\t\t>,\n\t\tT['_']['nullabilityMap'],\n\t\tT['_']['joins'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type PgUpdatePrepare<T extends AnyPgUpdate> = PgPreparedQuery<\n\tPreparedQueryConfig & {\n\t\texecute: T['_']['returning'] extends undefined ? PgQueryResultKind<T['_']['queryResult'], never>\n\t\t\t: T['_']['returning'][];\n\t}\n>;\n\nexport type PgUpdateDynamic<T extends AnyPgUpdate> = PgUpdate<\n\tT['_']['table'],\n\tT['_']['queryResult'],\n\tT['_']['from'],\n\tT['_']['returning'],\n\tT['_']['nullabilityMap']\n>;\n\nexport type PgUpdate<\n\tTTable extends PgTable = PgTable,\n\tTQueryResult extends PgQueryResultHKT = PgQueryResultHKT,\n\tTFrom extends PgTable | Subquery | PgViewBase | SQL | undefined = undefined,\n\tTSelectedFields extends ColumnsSelection | undefined = undefined,\n\tTReturning extends Record<string, unknown> | undefined = Record<string, unknown> | undefined,\n\tTNullabilityMap extends Record<string, JoinNullability> = Record<TTable['_']['name'], 'not-null'>,\n\tTJoins extends Join[] = [],\n> = PgUpdateBase<TTable, TQueryResult, TFrom, TSelectedFields, TReturning, TNullabilityMap, TJoins, true, never>;\n\nexport type AnyPgUpdate = PgUpdateBase<any, any, any, any, any, any, any, any, any>;\n\nexport interface PgUpdateBase<\n\tTTable extends PgTable,\n\tTQueryResult extends PgQueryResultHKT,\n\tTFrom extends PgTable | Subquery | PgViewBase | SQL | undefined = undefined,\n\tTSelectedFields extends ColumnsSelection | undefined = undefined,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\tTNullabilityMap extends Record<string, JoinNullability> = Record<TTable['_']['name'], 'not-null'>,\n\tTJoins extends Join[] = [],\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends\n\tTypedQueryBuilder<\n\t\tTSelectedFields,\n\t\tTReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[]\n\t>,\n\tQueryPromise<TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[]>,\n\tRunnableQuery<TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[], 'pg'>,\n\tSQLWrapper\n{\n\treadonly _: {\n\t\treadonly dialect: 'pg';\n\t\treadonly table: TTable;\n\t\treadonly joins: TJoins;\n\t\treadonly nullabilityMap: TNullabilityMap;\n\t\treadonly queryResult: TQueryResult;\n\t\treadonly from: TFrom;\n\t\treadonly selectedFields: TSelectedFields;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[];\n\t};\n}\n\nexport class PgUpdateBase<\n\tTTable extends PgTable,\n\tTQueryResult extends PgQueryResultHKT,\n\tTFrom extends PgTable | Subquery | PgViewBase | SQL | undefined = undefined,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTSelectedFields extends ColumnsSelection | undefined = undefined,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTNullabilityMap extends Record<string, JoinNullability> = Record<TTable['_']['name'], 'not-null'>,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTJoins extends Join[] = [],\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[]>\n\timplements\n\t\tRunnableQuery<TReturning extends undefined ? PgQueryResultKind<TQueryResult, never> : TReturning[], 'pg'>,\n\t\tSQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'PgUpdate';\n\n\tprivate config: PgUpdateConfig;\n\tprivate tableName: string | undefined;\n\tprivate joinsNotNullableMap: Record<string, boolean>;\n\tprotected cacheConfig?: WithCacheConfig;\n\n\tconstructor(\n\t\ttable: TTable,\n\t\tset: UpdateSet,\n\t\tprivate session: PgSession,\n\t\tprivate dialect: PgDialect,\n\t\twithList?: Subquery[],\n\t) {\n\t\tsuper();\n\t\tthis.config = { set, table, withList, joins: [] };\n\t\tthis.tableName = getTableLikeName(table);\n\t\tthis.joinsNotNullableMap = typeof this.tableName === 'string' ? { [this.tableName]: true } : {};\n\t}\n\n\tfrom<TFrom extends PgTable | Subquery | PgViewBase | SQL>(\n\t\tsource: TableLikeHasEmptySelection<TFrom> extends true ? DrizzleTypeError<\n\t\t\t\t\"Cannot reference a data-modifying statement subquery if it doesn't contain a `returning` clause\"\n\t\t\t>\n\t\t\t: TFrom,\n\t): PgUpdateWithJoins<this, TDynamic, TFrom> {\n\t\tconst src = source as TFrom;\n\t\tconst tableName = getTableLikeName(src);\n\t\tif (typeof tableName === 'string') {\n\t\t\tthis.joinsNotNullableMap[tableName] = true;\n\t\t}\n\t\tthis.config.from = src;\n\t\treturn this as any;\n\t}\n\n\tprivate getTableLikeFields(table: PgTable | Subquery | PgViewBase): Record<string, unknown> {\n\t\tif (is(table, PgTable)) {\n\t\t\treturn table[Table.Symbol.Columns];\n\t\t} else if (is(table, Subquery)) {\n\t\t\treturn table._.selectedFields;\n\t\t}\n\t\treturn table[ViewBaseConfig].selectedFields;\n\t}\n\n\tprivate createJoin<TJoinType extends JoinType>(\n\t\tjoinType: TJoinType,\n\t): PgUpdateJoinFn<this, TDynamic, TJoinType> {\n\t\treturn ((\n\t\t\ttable: PgTable | Subquery | PgViewBase | SQL,\n\t\t\ton: ((updateTable: TTable, from: TFrom) => SQL | undefined) | SQL | undefined,\n\t\t) => {\n\t\t\tconst tableName = getTableLikeName(table);\n\n\t\t\tif (typeof tableName === 'string' && this.config.joins.some((join) => join.alias === tableName)) {\n\t\t\t\tthrow new Error(`Alias \"${tableName}\" is already used in this query`);\n\t\t\t}\n\n\t\t\tif (typeof on === 'function') {\n\t\t\t\tconst from = this.config.from && !is(this.config.from, SQL)\n\t\t\t\t\t? this.getTableLikeFields(this.config.from)\n\t\t\t\t\t: undefined;\n\t\t\t\ton = on(\n\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\tthis.config.table[Table.Symbol.Columns],\n\t\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t\t) as any,\n\t\t\t\t\tfrom && new Proxy(\n\t\t\t\t\t\tfrom,\n\t\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t\t) as any,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.config.joins.push({ on, table, joinType, alias: tableName });\n\n\t\t\tif (typeof tableName === 'string') {\n\t\t\t\tswitch (joinType) {\n\t\t\t\t\tcase 'left': {\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'right': {\n\t\t\t\t\t\tthis.joinsNotNullableMap = Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(this.joinsNotNullableMap).map(([key]) => [key, false]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'inner': {\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'full': {\n\t\t\t\t\t\tthis.joinsNotNullableMap = Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(this.joinsNotNullableMap).map(([key]) => [key, false]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this as any;\n\t\t}) as any;\n\t}\n\n\tleftJoin = this.createJoin('left');\n\n\trightJoin = this.createJoin('right');\n\n\tinnerJoin = this.createJoin('inner');\n\n\tfullJoin = this.createJoin('full');\n\n\t/**\n\t * Adds a 'where' clause to the query.\n\t *\n\t * Calling this method will update only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t *\n\t * @param where the 'where' clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be updated.\n\t *\n\t * ```ts\n\t * // Update all cars with green color\n\t * await db.update(cars).set({ color: 'red' })\n\t *   .where(eq(cars.color, 'green'));\n\t * // or\n\t * await db.update(cars).set({ color: 'red' })\n\t *   .where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Update all BMW cars with a green color\n\t * await db.update(cars).set({ color: 'red' })\n\t *   .where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Update all cars with the green or blue color\n\t * await db.update(cars).set({ color: 'red' })\n\t *   .where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(where: SQL | undefined): PgUpdateWithout<this, TDynamic, 'where'> {\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the updated rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update#update-with-returning}\n\t *\n\t * @example\n\t * ```ts\n\t * // Update all cars with the green color and return all fields\n\t * const updatedCars: Car[] = await db.update(cars)\n\t *   .set({ color: 'red' })\n\t *   .where(eq(cars.color, 'green'))\n\t *   .returning();\n\t *\n\t * // Update all cars with the green color and return only their id and brand fields\n\t * const updatedCarsIdsAndBrands: { id: number, brand: string }[] = await db.update(cars)\n\t *   .set({ color: 'red' })\n\t *   .where(eq(cars.color, 'green'))\n\t *   .returning({ id: cars.id, brand: cars.brand });\n\t * ```\n\t */\n\treturning(): PgUpdateReturningAll<this, TDynamic>;\n\treturning<TSelectedFields extends SelectedFields>(\n\t\tfields: TSelectedFields,\n\t): PgUpdateReturning<this, TDynamic, TSelectedFields>;\n\treturning(\n\t\tfields?: SelectedFields,\n\t): PgUpdateWithout<AnyPgUpdate, TDynamic, 'returning'> {\n\t\tif (!fields) {\n\t\t\tfields = Object.assign({}, this.config.table[Table.Symbol.Columns]);\n\n\t\t\tif (this.config.from) {\n\t\t\t\tconst tableName = getTableLikeName(this.config.from);\n\n\t\t\t\tif (typeof tableName === 'string' && this.config.from && !is(this.config.from, SQL)) {\n\t\t\t\t\tconst fromFields = this.getTableLikeFields(this.config.from);\n\t\t\t\t\tfields[tableName] = fromFields as any;\n\t\t\t\t}\n\n\t\t\t\tfor (const join of this.config.joins) {\n\t\t\t\t\tconst tableName = getTableLikeName(join.table);\n\n\t\t\t\t\tif (typeof tableName === 'string' && !is(join.table, SQL)) {\n\t\t\t\t\t\tconst fromFields = this.getTableLikeFields(join.table);\n\t\t\t\t\t\tfields[tableName] = fromFields as any;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.config.returningFields = fields;\n\t\tthis.config.returning = orderSelectedFields<PgColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildUpdateQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(name?: string): PgUpdatePrepare<this> {\n\t\tconst query = this.session.prepareQuery<\n\t\t\tPreparedQueryConfig & { execute: TReturning[] }\n\t\t>(this.dialect.sqlToQuery(this.getSQL()), this.config.returning, name, true, undefined, {\n\t\t\ttype: 'insert',\n\t\t\ttables: extractUsedTable(this.config.table),\n\t\t}, this.cacheConfig);\n\t\tquery.joinsNotNullableMap = this.joinsNotNullableMap;\n\t\treturn query;\n\t}\n\n\tprepare(name: string): PgUpdatePrepare<this> {\n\t\treturn this._prepare(name);\n\t}\n\n\tprivate authToken?: NeonAuthToken;\n\t/** @internal */\n\tsetToken(token?: NeonAuthToken) {\n\t\tthis.authToken = token;\n\t\treturn this;\n\t}\n\n\toverride execute: ReturnType<this['prepare']>['execute'] = (placeholderValues) => {\n\t\treturn this._prepare().execute(placeholderValues, this.authToken);\n\t};\n\n\t/** @internal */\n\tgetSelectedFields(): this['_']['selectedFields'] {\n\t\treturn (\n\t\t\tthis.config.returningFields\n\t\t\t\t? new Proxy(\n\t\t\t\t\tthis.config.returningFields,\n\t\t\t\t\tnew SelectionProxyHandler({\n\t\t\t\t\t\talias: getTableName(this.config.table),\n\t\t\t\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\t\t\t\tsqlBehavior: 'error',\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t: undefined\n\t\t) as this['_']['selectedFields'];\n\t}\n\n\t$dynamic(): PgUpdateDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n", "export * from './delete.ts';\nexport * from './insert.ts';\nexport * from './query-builder.ts';\nexport * from './refresh-materialized-view.ts';\nexport * from './select.ts';\nexport * from './select.types.ts';\nexport * from './update.ts';\n", "import { entityKind } from '~/entity.ts';\nimport { SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { NeonAuthToken } from '~/utils.ts';\nimport type { PgSession } from '../session.ts';\nimport type { PgTable } from '../table.ts';\n\nexport class PgCountBuilder<\n\tTSession extends PgSession<any, any, any>,\n> extends SQL<number> implements Promise<number>, SQLWrapper {\n\tprivate sql: SQL<number>;\n\tprivate token?: NeonAuthToken;\n\n\tstatic override readonly [entityKind] = 'PgCountBuilder';\n\t[Symbol.toStringTag] = 'PgCountBuilder';\n\n\tprivate session: TSession;\n\n\tprivate static buildEmbeddedCount(\n\t\tsource: PgTable | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t): SQL<number> {\n\t\treturn sql<number>`(select count(*) from ${source}${sql.raw(' where ').if(filters)}${filters})`;\n\t}\n\n\tprivate static buildCount(\n\t\tsource: PgTable | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t): SQL<number> {\n\t\treturn sql<number>`select count(*) as count from ${source}${sql.raw(' where ').if(filters)}${filters};`;\n\t}\n\n\tconstructor(\n\t\treadonly params: {\n\t\t\tsource: PgTable | SQL | SQLWrapper;\n\t\t\tfilters?: SQL<unknown>;\n\t\t\tsession: TSession;\n\t\t},\n\t) {\n\t\tsuper(PgCountBuilder.buildEmbeddedCount(params.source, params.filters).queryChunks);\n\n\t\tthis.mapWith(Number);\n\n\t\tthis.session = params.session;\n\n\t\tthis.sql = PgCountBuilder.buildCount(\n\t\t\tparams.source,\n\t\t\tparams.filters,\n\t\t);\n\t}\n\n\t/** @intrnal */\n\tsetToken(token?: NeonAuthToken) {\n\t\tthis.token = token;\n\t\treturn this;\n\t}\n\n\tthen<TResult1 = number, TResult2 = never>(\n\t\tonfulfilled?: ((value: number) => TResult1 | PromiseLike<TResult1>) | null | undefined,\n\t\tonrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined,\n\t): Promise<TResult1 | TResult2> {\n\t\treturn Promise.resolve(this.session.count(this.sql, this.token))\n\t\t\t.then(\n\t\t\t\tonfulfilled,\n\t\t\t\tonrejected,\n\t\t\t);\n\t}\n\n\tcatch(\n\t\tonRejected?: ((reason: any) => any) | null | undefined,\n\t): Promise<number> {\n\t\treturn this.then(undefined, onRejected);\n\t}\n\n\tfinally(onFinally?: (() => void) | null | undefined): Promise<number> {\n\t\treturn this.then(\n\t\t\t(value) => {\n\t\t\t\tonFinally?.();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\t(reason) => {\n\t\t\t\tonFinally?.();\n\t\t\t\tthrow reason;\n\t\t\t},\n\t\t);\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport {\n\ttype BuildQueryResult,\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tmapRelationalRow,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport type { Query, QueryWithTypings, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport { tracer } from '~/tracing.ts';\nimport type { KnownKeysOnly, NeonAuthToken } from '~/utils.ts';\nimport type { PgDialect } from '../dialect.ts';\nimport type { PgPreparedQuery, PgSession, PreparedQueryConfig } from '../session.ts';\nimport type { PgTable } from '../table.ts';\n\nexport class RelationalQueryBuilder<TSchema extends TablesRelationalConfig, TFields extends TableRelationalConfig> {\n\tstatic readonly [entityKind]: string = 'PgRelationalQueryBuilder';\n\n\tconstructor(\n\t\tprivate fullSchema: Record<string, unknown>,\n\t\tprivate schema: TSchema,\n\t\tprivate tableNamesMap: Record<string, string>,\n\t\tprivate table: PgTable,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: PgDialect,\n\t\tprivate session: PgSession,\n\t) {}\n\n\tfindMany<TConfig extends DBQueryConfig<'many', true, TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'many', true, TSchema, TFields>>,\n\t): PgRelationalQuery<BuildQueryResult<TSchema, TFields, TConfig>[]> {\n\t\treturn new PgRelationalQuery(\n\t\t\tthis.fullSchema,\n\t\t\tthis.schema,\n\t\t\tthis.tableNamesMap,\n\t\t\tthis.table,\n\t\t\tthis.tableConfig,\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tconfig ? (config as DBQueryConfig<'many', true>) : {},\n\t\t\t'many',\n\t\t);\n\t}\n\n\tfindFirst<TSelection extends Omit<DBQueryConfig<'many', true, TSchema, TFields>, 'limit'>>(\n\t\tconfig?: KnownKeysOnly<TSelection, Omit<DBQueryConfig<'many', true, TSchema, TFields>, 'limit'>>,\n\t): PgRelationalQuery<BuildQueryResult<TSchema, TFields, TSelection> | undefined> {\n\t\treturn new PgRelationalQuery(\n\t\t\tthis.fullSchema,\n\t\t\tthis.schema,\n\t\t\tthis.tableNamesMap,\n\t\t\tthis.table,\n\t\t\tthis.tableConfig,\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tconfig ? { ...(config as DBQueryConfig<'many', true> | undefined), limit: 1 } : { limit: 1 },\n\t\t\t'first',\n\t\t);\n\t}\n}\n\nexport class PgRelationalQuery<TResult> extends QueryPromise<TResult>\n\timplements RunnableQuery<TResult, 'pg'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'PgRelationalQuery';\n\n\tdeclare readonly _: {\n\t\treadonly dialect: 'pg';\n\t\treadonly result: TResult;\n\t};\n\n\tconstructor(\n\t\tprivate fullSchema: Record<string, unknown>,\n\t\tprivate schema: TablesRelationalConfig,\n\t\tprivate tableNamesMap: Record<string, string>,\n\t\tprivate table: PgTable,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: PgDialect,\n\t\tprivate session: PgSession,\n\t\tprivate config: DBQueryConfig<'many', true> | true,\n\t\tprivate mode: 'many' | 'first',\n\t) {\n\t\tsuper();\n\t}\n\n\t/** @internal */\n\t_prepare(name?: string): PgPreparedQuery<PreparedQueryConfig & { execute: TResult }> {\n\t\treturn tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\tconst { query, builtQuery } = this._toSQL();\n\n\t\t\treturn this.session.prepareQuery<PreparedQueryConfig & { execute: TResult }>(\n\t\t\t\tbuiltQuery,\n\t\t\t\tundefined,\n\t\t\t\tname,\n\t\t\t\ttrue,\n\t\t\t\t(rawRows, mapColumnValue) => {\n\t\t\t\t\tconst rows = rawRows.map((row) =>\n\t\t\t\t\t\tmapRelationalRow(this.schema, this.tableConfig, row, query.selection, mapColumnValue)\n\t\t\t\t\t);\n\t\t\t\t\tif (this.mode === 'first') {\n\t\t\t\t\t\treturn rows[0] as TResult;\n\t\t\t\t\t}\n\t\t\t\t\treturn rows as TResult;\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\t}\n\n\tprepare(name: string): PgPreparedQuery<PreparedQueryConfig & { execute: TResult }> {\n\t\treturn this._prepare(name);\n\t}\n\n\tprivate _getQuery() {\n\t\treturn this.dialect.buildRelationalQueryWithoutPK({\n\t\t\tfullSchema: this.fullSchema,\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttableAlias: this.tableConfig.tsName,\n\t\t});\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this._getQuery().sql as SQL;\n\t}\n\n\tprivate _toSQL(): { query: BuildRelationalQueryResult; builtQuery: QueryWithTypings } {\n\t\tconst query = this._getQuery();\n\n\t\tconst builtQuery = this.dialect.sqlToQuery(query.sql as SQL);\n\n\t\treturn { query, builtQuery };\n\t}\n\n\ttoSQL(): Query {\n\t\treturn this._toSQL().builtQuery;\n\t}\n\n\tprivate authToken?: NeonAuthToken;\n\t/** @internal */\n\tsetToken(token?: NeonAuthToken) {\n\t\tthis.authToken = token;\n\t\treturn this;\n\t}\n\n\toverride execute(): Promise<TResult> {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\treturn this._prepare().execute(undefined, this.authToken);\n\t\t});\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport type { Query, SQL, SQLWrapper } from '~/sql/sql.ts';\n\nexport interface PgRaw<TResult> extends QueryPromise<TResult>, RunnableQuery<TResult, 'pg'>, SQLWrapper {}\n\nexport class PgRaw<TResult> extends QueryPromise<TResult>\n\timplements RunnableQuery<TResult, 'pg'>, SQLWrapper, PreparedQuery\n{\n\tstatic override readonly [entityKind]: string = 'PgRaw';\n\n\tdeclare readonly _: {\n\t\treadonly dialect: 'pg';\n\t\treadonly result: TResult;\n\t};\n\n\tconstructor(\n\t\tpublic execute: () => Promise<TResult>,\n\t\tprivate sql: SQL,\n\t\tprivate query: Query,\n\t\tprivate mapBatchResult: (result: unknown) => unknown,\n\t) {\n\t\tsuper();\n\t}\n\n\t/** @internal */\n\tgetSQL() {\n\t\treturn this.sql;\n\t}\n\n\tgetQuery() {\n\t\treturn this.query;\n\t}\n\n\tmapResult(result: unknown, isFromBatch?: boolean) {\n\t\treturn isFromBatch ? this.mapBatchResult(result) : result;\n\t}\n\n\t_prepare(): PreparedQuery {\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode() {\n\t\treturn false;\n\t}\n}\n", "import type { Cache } from '~/cache/core/cache.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport {\n\tPgDeleteBase,\n\tPgInsertBuilder,\n\tPgSelectBuilder,\n\tPgUpdateBuilder,\n\tQueryBuilder,\n} from '~/pg-core/query-builders/index.ts';\nimport type {\n\tPgQueryResultHKT,\n\tPgQueryResultKind,\n\tPgSession,\n\tPgTransaction,\n\tPgTransactionConfig,\n\tPreparedQueryConfig,\n} from '~/pg-core/session.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport { type ColumnsSelection, type SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport { WithSubquery } from '~/subquery.ts';\nimport type { DrizzleTypeError, NeonAuthToken } from '~/utils.ts';\nimport type { PgColumn } from './columns/index.ts';\nimport { PgCountBuilder } from './query-builders/count.ts';\nimport { RelationalQueryBuilder } from './query-builders/query.ts';\nimport { PgRaw } from './query-builders/raw.ts';\nimport { PgRefreshMaterializedView } from './query-builders/refresh-materialized-view.ts';\nimport type { SelectedFields } from './query-builders/select.types.ts';\nimport type { WithBuilder } from './subquery.ts';\nimport type { PgViewBase } from './view-base.ts';\nimport type { PgMaterializedView } from './view.ts';\n\nexport class PgDatabase<\n\tTQueryResult extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTSchema extends TablesRelationalConfig = ExtractTablesWithRelations<TFullSchema>,\n> {\n\tstatic readonly [entityKind]: string = 'PgDatabase';\n\n\tdeclare readonly _: {\n\t\treadonly schema: TSchema | undefined;\n\t\treadonly fullSchema: TFullSchema;\n\t\treadonly tableNamesMap: Record<string, string>;\n\t\treadonly session: PgSession<TQueryResult, TFullSchema, TSchema>;\n\t};\n\n\tquery: TFullSchema extends Record<string, never>\n\t\t? DrizzleTypeError<'Seems like the schema generic is missing - did you forget to add it to your DB type?'>\n\t\t: {\n\t\t\t[K in keyof TSchema]: RelationalQueryBuilder<TSchema, TSchema[K]>;\n\t\t};\n\n\tconstructor(\n\t\t/** @internal */\n\t\treadonly dialect: PgDialect,\n\t\t/** @internal */\n\t\treadonly session: PgSession<any, any, any>,\n\t\tschema: RelationalSchemaConfig<TSchema> | undefined,\n\t) {\n\t\tthis._ = schema\n\t\t\t? {\n\t\t\t\tschema: schema.schema,\n\t\t\t\tfullSchema: schema.fullSchema as TFullSchema,\n\t\t\t\ttableNamesMap: schema.tableNamesMap,\n\t\t\t\tsession,\n\t\t\t}\n\t\t\t: {\n\t\t\t\tschema: undefined,\n\t\t\t\tfullSchema: {} as TFullSchema,\n\t\t\t\ttableNamesMap: {},\n\t\t\t\tsession,\n\t\t\t};\n\t\tthis.query = {} as typeof this['query'];\n\t\tif (this._.schema) {\n\t\t\tfor (const [tableName, columns] of Object.entries(this._.schema)) {\n\t\t\t\t(this.query as PgDatabase<TQueryResult, Record<string, any>>['query'])[tableName] = new RelationalQueryBuilder(\n\t\t\t\t\tschema!.fullSchema,\n\t\t\t\t\tthis._.schema,\n\t\t\t\t\tthis._.tableNamesMap,\n\t\t\t\t\tschema!.fullSchema[tableName] as PgTable,\n\t\t\t\t\tcolumns,\n\t\t\t\t\tdialect,\n\t\t\t\t\tsession,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tthis.$cache = { invalidate: async (_params: any) => {} };\n\t}\n\n\t/**\n\t * Creates a subquery that defines a temporary named result set as a CTE.\n\t *\n\t * It is useful for breaking down complex queries into simpler parts and for reusing the result set in subsequent parts of the query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#with-clause}\n\t *\n\t * @param alias The alias for the subquery.\n\t *\n\t * Failure to provide an alias will result in a DrizzleTypeError, preventing the subquery from being referenced in other queries.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Create a subquery with alias 'sq' and use it in the select query\n\t * const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));\n\t *\n\t * const result = await db.with(sq).select().from(sq);\n\t * ```\n\t *\n\t * To select arbitrary SQL values as fields in a CTE and reference them in other CTEs or in the main query, you need to add aliases to them:\n\t *\n\t * ```ts\n\t * // Select an arbitrary SQL value as a field in a CTE and reference it in the main query\n\t * const sq = db.$with('sq').as(db.select({\n\t *   name: sql<string>`upper(${users.name})`.as('name'),\n\t * })\n\t * .from(users));\n\t *\n\t * const result = await db.with(sq).select({ name: sq.name }).from(sq);\n\t * ```\n\t */\n\t$with: WithBuilder = (alias: string, selection?: ColumnsSelection) => {\n\t\tconst self = this;\n\t\tconst as = (\n\t\t\tqb:\n\t\t\t\t| TypedQueryBuilder<ColumnsSelection | undefined>\n\t\t\t\t| SQL\n\t\t\t\t| ((qb: QueryBuilder) => TypedQueryBuilder<ColumnsSelection | undefined> | SQL),\n\t\t) => {\n\t\t\tif (typeof qb === 'function') {\n\t\t\t\tqb = qb(new QueryBuilder(self.dialect));\n\t\t\t}\n\n\t\t\treturn new Proxy(\n\t\t\t\tnew WithSubquery(\n\t\t\t\t\tqb.getSQL(),\n\t\t\t\t\tselection ?? ('getSelectedFields' in qb ? qb.getSelectedFields() ?? {} : {}) as SelectedFields,\n\t\t\t\t\talias,\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t\t);\n\t\t};\n\t\treturn { as };\n\t};\n\n\t$count(\n\t\tsource: PgTable | PgViewBase | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t) {\n\t\treturn new PgCountBuilder({ source, filters, session: this.session });\n\t}\n\n\t$cache: { invalidate: Cache['onMutate'] };\n\n\t/**\n\t * Incorporates a previously defined CTE (using `$with`) into the main query.\n\t *\n\t * This method allows the main query to reference a temporary named result set.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#with-clause}\n\t *\n\t * @param queries The CTEs to incorporate into the main query.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Define a subquery 'sq' as a CTE using $with\n\t * const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));\n\t *\n\t * // Incorporate the CTE 'sq' into the main query and select from it\n\t * const result = await db.with(sq).select().from(sq);\n\t * ```\n\t */\n\twith(...queries: WithSubquery[]) {\n\t\tconst self = this;\n\n\t\t/**\n\t\t * Creates a select query.\n\t\t *\n\t\t * Calling this method with no arguments will select all columns from the table. Pass a selection object to specify the columns you want to select.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select}\n\t\t *\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Select all columns and all rows from the 'cars' table\n\t\t * const allCars: Car[] = await db.select().from(cars);\n\t\t *\n\t\t * // Select specific columns and all rows from the 'cars' table\n\t\t * const carsIdsAndBrands: { id: number; brand: string }[] = await db.select({\n\t\t *   id: cars.id,\n\t\t *   brand: cars.brand\n\t\t * })\n\t\t *   .from(cars);\n\t\t * ```\n\t\t *\n\t\t * Like in SQL, you can use arbitrary expressions as selection fields, not just table columns:\n\t\t *\n\t\t * ```ts\n\t\t * // Select specific columns along with expression and all rows from the 'cars' table\n\t\t * const carsIdsAndLowerNames: { id: number; lowerBrand: string }[] = await db.select({\n\t\t *   id: cars.id,\n\t\t *   lowerBrand: sql<string>`lower(${cars.brand})`,\n\t\t * })\n\t\t *   .from(cars);\n\t\t * ```\n\t\t */\n\t\tfunction select(): PgSelectBuilder<undefined>;\n\t\tfunction select<TSelection extends SelectedFields>(fields: TSelection): PgSelectBuilder<TSelection>;\n\t\tfunction select<TSelection extends SelectedFields>(fields?: TSelection): PgSelectBuilder<TSelection | undefined> {\n\t\t\treturn new PgSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Adds `distinct` expression to the select query.\n\t\t *\n\t\t * Calling this method will return only unique values. When multiple columns are selected, it returns rows with unique combinations of values in these columns.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t\t *\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t * ```ts\n\t\t * // Select all unique rows from the 'cars' table\n\t\t * await db.selectDistinct()\n\t\t *   .from(cars)\n\t\t *   .orderBy(cars.id, cars.brand, cars.color);\n\t\t *\n\t\t * // Select all unique brands from the 'cars' table\n\t\t * await db.selectDistinct({ brand: cars.brand })\n\t\t *   .from(cars)\n\t\t *   .orderBy(cars.brand);\n\t\t * ```\n\t\t */\n\t\tfunction selectDistinct(): PgSelectBuilder<undefined>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(fields: TSelection): PgSelectBuilder<TSelection>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields?: TSelection,\n\t\t): PgSelectBuilder<TSelection | undefined> {\n\t\t\treturn new PgSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t\tdistinct: true,\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Adds `distinct on` expression to the select query.\n\t\t *\n\t\t * Calling this method will specify how the unique rows are determined.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t\t *\n\t\t * @param on The expression defining uniqueness.\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t * ```ts\n\t\t * // Select the first row for each unique brand from the 'cars' table\n\t\t * await db.selectDistinctOn([cars.brand])\n\t\t *   .from(cars)\n\t\t *   .orderBy(cars.brand);\n\t\t *\n\t\t * // Selects the first occurrence of each unique car brand along with its color from the 'cars' table\n\t\t * await db.selectDistinctOn([cars.brand], { brand: cars.brand, color: cars.color })\n\t\t *   .from(cars)\n\t\t *   .orderBy(cars.brand, cars.color);\n\t\t * ```\n\t\t */\n\t\tfunction selectDistinctOn(on: (PgColumn | SQLWrapper)[]): PgSelectBuilder<undefined>;\n\t\tfunction selectDistinctOn<TSelection extends SelectedFields>(\n\t\t\ton: (PgColumn | SQLWrapper)[],\n\t\t\tfields: TSelection,\n\t\t): PgSelectBuilder<TSelection>;\n\t\tfunction selectDistinctOn<TSelection extends SelectedFields>(\n\t\t\ton: (PgColumn | SQLWrapper)[],\n\t\t\tfields?: TSelection,\n\t\t): PgSelectBuilder<TSelection | undefined> {\n\t\t\treturn new PgSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t\tdistinct: { on },\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Creates an update query.\n\t\t *\n\t\t * Calling this method without `.where()` clause will update all rows in a table. The `.where()` clause specifies which rows should be updated.\n\t\t *\n\t\t * Use `.set()` method to specify which values to update.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t\t *\n\t\t * @param table The table to update.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Update all rows in the 'cars' table\n\t\t * await db.update(cars).set({ color: 'red' });\n\t\t *\n\t\t * // Update rows with filters and conditions\n\t\t * await db.update(cars).set({ color: 'red' }).where(eq(cars.brand, 'BMW'));\n\t\t *\n\t\t * // Update with returning clause\n\t\t * const updatedCar: Car[] = await db.update(cars)\n\t\t *   .set({ color: 'red' })\n\t\t *   .where(eq(cars.id, 1))\n\t\t *   .returning();\n\t\t * ```\n\t\t */\n\t\tfunction update<TTable extends PgTable>(table: TTable): PgUpdateBuilder<TTable, TQueryResult> {\n\t\t\treturn new PgUpdateBuilder(table, self.session, self.dialect, queries);\n\t\t}\n\n\t\t/**\n\t\t * Creates an insert query.\n\t\t *\n\t\t * Calling this method will create new rows in a table. Use `.values()` method to specify which values to insert.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/insert}\n\t\t *\n\t\t * @param table The table to insert into.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Insert one row\n\t\t * await db.insert(cars).values({ brand: 'BMW' });\n\t\t *\n\t\t * // Insert multiple rows\n\t\t * await db.insert(cars).values([{ brand: 'BMW' }, { brand: 'Porsche' }]);\n\t\t *\n\t\t * // Insert with returning clause\n\t\t * const insertedCar: Car[] = await db.insert(cars)\n\t\t *   .values({ brand: 'BMW' })\n\t\t *   .returning();\n\t\t * ```\n\t\t */\n\t\tfunction insert<TTable extends PgTable>(table: TTable): PgInsertBuilder<TTable, TQueryResult> {\n\t\t\treturn new PgInsertBuilder(table, self.session, self.dialect, queries);\n\t\t}\n\n\t\t/**\n\t\t * Creates a delete query.\n\t\t *\n\t\t * Calling this method without `.where()` clause will delete all rows in a table. The `.where()` clause specifies which rows should be deleted.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t\t *\n\t\t * @param table The table to delete from.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Delete all rows in the 'cars' table\n\t\t * await db.delete(cars);\n\t\t *\n\t\t * // Delete rows with filters and conditions\n\t\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t\t *\n\t\t * // Delete with returning clause\n\t\t * const deletedCar: Car[] = await db.delete(cars)\n\t\t *   .where(eq(cars.id, 1))\n\t\t *   .returning();\n\t\t * ```\n\t\t */\n\t\tfunction delete_<TTable extends PgTable>(table: TTable): PgDeleteBase<TTable, TQueryResult> {\n\t\t\treturn new PgDeleteBase(table, self.session, self.dialect, queries);\n\t\t}\n\n\t\treturn { select, selectDistinct, selectDistinctOn, update, insert, delete: delete_ };\n\t}\n\n\t/**\n\t * Creates a select query.\n\t *\n\t * Calling this method with no arguments will select all columns from the table. Pass a selection object to specify the columns you want to select.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select}\n\t *\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all columns and all rows from the 'cars' table\n\t * const allCars: Car[] = await db.select().from(cars);\n\t *\n\t * // Select specific columns and all rows from the 'cars' table\n\t * const carsIdsAndBrands: { id: number; brand: string }[] = await db.select({\n\t *   id: cars.id,\n\t *   brand: cars.brand\n\t * })\n\t *   .from(cars);\n\t * ```\n\t *\n\t * Like in SQL, you can use arbitrary expressions as selection fields, not just table columns:\n\t *\n\t * ```ts\n\t * // Select specific columns along with expression and all rows from the 'cars' table\n\t * const carsIdsAndLowerNames: { id: number; lowerBrand: string }[] = await db.select({\n\t *   id: cars.id,\n\t *   lowerBrand: sql<string>`lower(${cars.brand})`,\n\t * })\n\t *   .from(cars);\n\t * ```\n\t */\n\tselect(): PgSelectBuilder<undefined>;\n\tselect<TSelection extends SelectedFields>(fields: TSelection): PgSelectBuilder<TSelection>;\n\tselect<TSelection extends SelectedFields>(fields?: TSelection): PgSelectBuilder<TSelection | undefined> {\n\t\treturn new PgSelectBuilder({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t});\n\t}\n\n\t/**\n\t * Adds `distinct` expression to the select query.\n\t *\n\t * Calling this method will return only unique values. When multiple columns are selected, it returns rows with unique combinations of values in these columns.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t *\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t * ```ts\n\t * // Select all unique rows from the 'cars' table\n\t * await db.selectDistinct()\n\t *   .from(cars)\n\t *   .orderBy(cars.id, cars.brand, cars.color);\n\t *\n\t * // Select all unique brands from the 'cars' table\n\t * await db.selectDistinct({ brand: cars.brand })\n\t *   .from(cars)\n\t *   .orderBy(cars.brand);\n\t * ```\n\t */\n\tselectDistinct(): PgSelectBuilder<undefined>;\n\tselectDistinct<TSelection extends SelectedFields>(fields: TSelection): PgSelectBuilder<TSelection>;\n\tselectDistinct<TSelection extends SelectedFields>(fields?: TSelection): PgSelectBuilder<TSelection | undefined> {\n\t\treturn new PgSelectBuilder({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\tdistinct: true,\n\t\t});\n\t}\n\n\t/**\n\t * Adds `distinct on` expression to the select query.\n\t *\n\t * Calling this method will specify how the unique rows are determined.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t *\n\t * @param on The expression defining uniqueness.\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t * ```ts\n\t * // Select the first row for each unique brand from the 'cars' table\n\t * await db.selectDistinctOn([cars.brand])\n\t *   .from(cars)\n\t *   .orderBy(cars.brand);\n\t *\n\t * // Selects the first occurrence of each unique car brand along with its color from the 'cars' table\n\t * await db.selectDistinctOn([cars.brand], { brand: cars.brand, color: cars.color })\n\t *   .from(cars)\n\t *   .orderBy(cars.brand, cars.color);\n\t * ```\n\t */\n\tselectDistinctOn(on: (PgColumn | SQLWrapper)[]): PgSelectBuilder<undefined>;\n\tselectDistinctOn<TSelection extends SelectedFields>(\n\t\ton: (PgColumn | SQLWrapper)[],\n\t\tfields: TSelection,\n\t): PgSelectBuilder<TSelection>;\n\tselectDistinctOn<TSelection extends SelectedFields>(\n\t\ton: (PgColumn | SQLWrapper)[],\n\t\tfields?: TSelection,\n\t): PgSelectBuilder<TSelection | undefined> {\n\t\treturn new PgSelectBuilder({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\tdistinct: { on },\n\t\t});\n\t}\n\n\t/**\n\t * Creates an update query.\n\t *\n\t * Calling this method without `.where()` clause will update all rows in a table. The `.where()` clause specifies which rows should be updated.\n\t *\n\t * Use `.set()` method to specify which values to update.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t *\n\t * @param table The table to update.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Update all rows in the 'cars' table\n\t * await db.update(cars).set({ color: 'red' });\n\t *\n\t * // Update rows with filters and conditions\n\t * await db.update(cars).set({ color: 'red' }).where(eq(cars.brand, 'BMW'));\n\t *\n\t * // Update with returning clause\n\t * const updatedCar: Car[] = await db.update(cars)\n\t *   .set({ color: 'red' })\n\t *   .where(eq(cars.id, 1))\n\t *   .returning();\n\t * ```\n\t */\n\tupdate<TTable extends PgTable>(table: TTable): PgUpdateBuilder<TTable, TQueryResult> {\n\t\treturn new PgUpdateBuilder(table, this.session, this.dialect);\n\t}\n\n\t/**\n\t * Creates an insert query.\n\t *\n\t * Calling this method will create new rows in a table. Use `.values()` method to specify which values to insert.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert}\n\t *\n\t * @param table The table to insert into.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Insert one row\n\t * await db.insert(cars).values({ brand: 'BMW' });\n\t *\n\t * // Insert multiple rows\n\t * await db.insert(cars).values([{ brand: 'BMW' }, { brand: 'Porsche' }]);\n\t *\n\t * // Insert with returning clause\n\t * const insertedCar: Car[] = await db.insert(cars)\n\t *   .values({ brand: 'BMW' })\n\t *   .returning();\n\t * ```\n\t */\n\tinsert<TTable extends PgTable>(table: TTable): PgInsertBuilder<TTable, TQueryResult> {\n\t\treturn new PgInsertBuilder(table, this.session, this.dialect);\n\t}\n\n\t/**\n\t * Creates a delete query.\n\t *\n\t * Calling this method without `.where()` clause will delete all rows in a table. The `.where()` clause specifies which rows should be deleted.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t *\n\t * @param table The table to delete from.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Delete all rows in the 'cars' table\n\t * await db.delete(cars);\n\t *\n\t * // Delete rows with filters and conditions\n\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t *\n\t * // Delete with returning clause\n\t * const deletedCar: Car[] = await db.delete(cars)\n\t *   .where(eq(cars.id, 1))\n\t *   .returning();\n\t * ```\n\t */\n\tdelete<TTable extends PgTable>(table: TTable): PgDeleteBase<TTable, TQueryResult> {\n\t\treturn new PgDeleteBase(table, this.session, this.dialect);\n\t}\n\n\trefreshMaterializedView<TView extends PgMaterializedView>(view: TView): PgRefreshMaterializedView<TQueryResult> {\n\t\treturn new PgRefreshMaterializedView(view, this.session, this.dialect);\n\t}\n\n\tprotected authToken?: NeonAuthToken;\n\n\texecute<TRow extends Record<string, unknown> = Record<string, unknown>>(\n\t\tquery: SQLWrapper | string,\n\t): PgRaw<PgQueryResultKind<TQueryResult, TRow>> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tconst builtQuery = this.dialect.sqlToQuery(sequel);\n\t\tconst prepared = this.session.prepareQuery<\n\t\t\tPreparedQueryConfig & { execute: PgQueryResultKind<TQueryResult, TRow> }\n\t\t>(\n\t\t\tbuiltQuery,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t);\n\t\treturn new PgRaw(\n\t\t\t() => prepared.execute(undefined, this.authToken),\n\t\t\tsequel,\n\t\t\tbuiltQuery,\n\t\t\t(result) => prepared.mapResult(result, true),\n\t\t);\n\t}\n\n\ttransaction<T>(\n\t\ttransaction: (tx: PgTransaction<TQueryResult, TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t): Promise<T> {\n\t\treturn this.session.transaction(transaction, config);\n\t}\n}\n\nexport type PgWithReplicas<Q> = Q & { $primary: Q; $replicas: Q[] };\n\nexport const withReplicas = <\n\tHKT extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n\tQ extends PgDatabase<\n\t\tHKT,\n\t\tTFullSchema,\n\t\tTSchema extends Record<string, unknown> ? ExtractTablesWithRelations<TFullSchema> : TSchema\n\t>,\n>(\n\tprimary: Q,\n\treplicas: [Q, ...Q[]],\n\tgetReplica: (replicas: Q[]) => Q = () => replicas[Math.floor(Math.random() * replicas.length)]!,\n): PgWithReplicas<Q> => {\n\tconst select: Q['select'] = (...args: []) => getReplica(replicas).select(...args);\n\tconst selectDistinct: Q['selectDistinct'] = (...args: []) => getReplica(replicas).selectDistinct(...args);\n\tconst selectDistinctOn: Q['selectDistinctOn'] = (...args: [any]) => getReplica(replicas).selectDistinctOn(...args);\n\tconst $count: Q['$count'] = (...args: [any]) => getReplica(replicas).$count(...args);\n\tconst _with: Q['with'] = (...args: any) => getReplica(replicas).with(...args);\n\tconst $with: Q['$with'] = (arg: any) => getReplica(replicas).$with(arg) as any;\n\n\tconst update: Q['update'] = (...args: [any]) => primary.update(...args);\n\tconst insert: Q['insert'] = (...args: [any]) => primary.insert(...args);\n\tconst $delete: Q['delete'] = (...args: [any]) => primary.delete(...args);\n\tconst execute: Q['execute'] = (...args: [any]) => primary.execute(...args);\n\tconst transaction: Q['transaction'] = (...args: [any]) => primary.transaction(...args);\n\tconst refreshMaterializedView: Q['refreshMaterializedView'] = (...args: [any]) =>\n\t\tprimary.refreshMaterializedView(...args);\n\n\treturn {\n\t\t...primary,\n\t\tupdate,\n\t\tinsert,\n\t\tdelete: $delete,\n\t\texecute,\n\t\ttransaction,\n\t\trefreshMaterializedView,\n\t\t$primary: primary,\n\t\t$replicas: replicas,\n\t\tselect,\n\t\tselectDistinct,\n\t\tselectDistinctOn,\n\t\t$count,\n\t\t$with,\n\t\twith: _with,\n\t\tget query() {\n\t\t\treturn getReplica(replicas).query;\n\t\t},\n\t};\n};\n", "import { entityKind } from '~/entity.ts';\nimport type { Table } from '~/index.ts';\nimport type { CacheConfig } from './types.ts';\n\nexport abstract class Cache {\n\tstatic readonly [entityKind]: string = 'Cache';\n\n\tabstract strategy(): 'explicit' | 'all';\n\n\t/**\n\t * Invoked if we should check cache for cached response\n\t * @param sql\n\t * @param tables\n\t */\n\tabstract get(\n\t\tkey: string,\n\t\ttables: string[],\n\t\tisTag: boolean,\n\t\tisAutoInvalidate?: boolean,\n\t): Promise<any[] | undefined>;\n\n\t/**\n\t * Invoked if new query should be inserted to cache\n\t * @param sql\n\t * @param tables\n\t */\n\tabstract put(\n\t\thashedQuery: string,\n\t\tresponse: any,\n\t\ttables: string[],\n\t\tisTag: boolean,\n\t\tconfig?: CacheConfig,\n\t): Promise<void>;\n\n\t/**\n\t * Invoked if insert, update, delete was invoked\n\t * @param tables\n\t */\n\tabstract onMutate(\n\t\tparams: MutationOption,\n\t): Promise<void>;\n}\n\nexport class NoopCache extends Cache {\n\toverride strategy() {\n\t\treturn 'all' as const;\n\t}\n\n\tstatic override readonly [entityKind]: string = 'NoopCache';\n\n\toverride async get(_key: string): Promise<any[] | undefined> {\n\t\treturn undefined;\n\t}\n\toverride async put(\n\t\t_hashedQuery: string,\n\t\t_response: any,\n\t\t_tables: string[],\n\t\t_config?: any,\n\t): Promise<void> {\n\t\t// noop\n\t}\n\toverride async onMutate(_params: MutationOption): Promise<void> {\n\t\t// noop\n\t}\n}\n\nexport type MutationOption = { tags?: string | string[]; tables?: Table<any> | Table<any>[] | string | string[] };\n\nexport async function hashQuery(sql: string, params?: any[]) {\n\tconst dataToHash = `${sql}-${JSON.stringify(params)}`;\n\tconst encoder = new TextEncoder();\n\tconst data = encoder.encode(dataToHash);\n\tconst hashBuffer = await crypto.subtle.digest('SHA-256', data);\n\tconst hashArray = [...new Uint8Array(hashBuffer)];\n\tconst hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n\n\treturn hashHex;\n}\n", "export * from './cache.ts';\n", "import { TableAliasProxyHandler } from '~/alias.ts';\nimport type { BuildAliasTable } from './query-builders/select.types.ts';\n\nimport type { PgTable } from './table.ts';\nimport type { PgViewBase } from './view-base.ts';\n\nexport function alias<TTable extends PgTable | PgViewBase, TAlias extends string>(\n\ttable: TTable,\n\talias: TAlias,\n): BuildAliasTable<TTable, TAlias> {\n\treturn new Proxy(table, new TableAliasProxyHandler(alias, false)) as any;\n}\n", "import { entityKind } from '~/entity.ts';\n\nexport interface PgRoleConfig {\n\tcreateDb?: boolean;\n\tcreateRole?: boolean;\n\tinherit?: boolean;\n}\n\nexport class PgRole implements PgRoleConfig {\n\tstatic readonly [entityKind]: string = 'PgRole';\n\n\t/** @internal */\n\t_existing?: boolean;\n\n\t/** @internal */\n\treadonly createDb: PgRoleConfig['createDb'];\n\t/** @internal */\n\treadonly createRole: PgRoleConfig['createRole'];\n\t/** @internal */\n\treadonly inherit: PgRoleConfig['inherit'];\n\n\tconstructor(\n\t\treadonly name: string,\n\t\tconfig?: PgRoleConfig,\n\t) {\n\t\tif (config) {\n\t\t\tthis.createDb = config.createDb;\n\t\t\tthis.createRole = config.createRole;\n\t\t\tthis.inherit = config.inherit;\n\t\t}\n\t}\n\n\texisting(): this {\n\t\tthis._existing = true;\n\t\treturn this;\n\t}\n}\n\nexport function pgRole(name: string, config?: PgRoleConfig) {\n\treturn new PgRole(name, config);\n}\n", "import { entityKind, is } from '~/entity.ts';\n\nexport type PgSequenceOptions = {\n\tincrement?: number | string;\n\tminValue?: number | string;\n\tmaxValue?: number | string;\n\tstartWith?: number | string;\n\tcache?: number | string;\n\tcycle?: boolean;\n};\n\nexport class PgSequence {\n\tstatic readonly [entityKind]: string = 'PgSequence';\n\n\tconstructor(\n\t\tpublic readonly seqName: string | undefined,\n\t\tpublic readonly seqOptions: PgSequenceOptions | undefined,\n\t\tpublic readonly schema: string | undefined,\n\t) {\n\t}\n}\n\nexport function pgSequence(\n\tname: string,\n\toptions?: PgSequenceOptions,\n): PgSequence {\n\treturn pgSequenceWithSchema(name, options, undefined);\n}\n\n/** @internal */\nexport function pgSequenceWithSchema(\n\tname: string,\n\toptions?: PgSequenceOptions,\n\tschema?: string,\n): PgSequence {\n\treturn new PgSequence(name, options, schema);\n}\n\nexport function isPgSequence(obj: unknown): obj is PgSequence {\n\treturn is(obj, PgSequence);\n}\n", "import { entityKind, is } from '~/entity.ts';\nimport { SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { NonArray, Writable } from '~/utils.ts';\nimport { type PgEnum, type PgEnumObject, pgEnumObjectWithSchema, pgEnumWithSchema } from './columns/enum.ts';\nimport { type pgSequence, pgSequenceWithSchema } from './sequence.ts';\nimport { type PgTableFn, pgTableWithSchema } from './table.ts';\nimport { type pgMaterializedView, pgMaterializedViewWithSchema, type pgView, pgViewWithSchema } from './view.ts';\n\nexport class PgSchema<TName extends string = string> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'PgSchema';\n\tconstructor(\n\t\tpublic readonly schemaName: TName,\n\t) {}\n\n\ttable: PgTableFn<TName> = ((name, columns, extraConfig) => {\n\t\treturn pgTableWithSchema(name, columns, extraConfig, this.schemaName);\n\t});\n\n\tview = ((name, columns) => {\n\t\treturn pgViewWithSchema(name, columns, this.schemaName);\n\t}) as typeof pgView;\n\n\tmaterializedView = ((name, columns) => {\n\t\treturn pgMaterializedViewWithSchema(name, columns, this.schemaName);\n\t}) as typeof pgMaterializedView;\n\n\tpublic enum<U extends string, T extends Readonly<[U, ...U[]]>>(\n\t\tenumName: string,\n\t\tvalues: T | Writable<T>,\n\t): PgEnum<Writable<T>>;\n\n\tpublic enum<E extends Record<string, string>>(\n\t\tenumName: string,\n\t\tenumObj: NonArray<E>,\n\t): PgEnumObject<E>;\n\n\tpublic enum(enumName: any, input: any): any {\n\t\treturn Array.isArray(input)\n\t\t\t? pgEnumWithSchema(\n\t\t\t\tenumName,\n\t\t\t\t[...input] as [string, ...string[]],\n\t\t\t\tthis.schemaName,\n\t\t\t)\n\t\t\t: pgEnumObjectWithSchema(enumName, input, this.schemaName);\n\t}\n\n\tsequence: typeof pgSequence = ((name, options) => {\n\t\treturn pgSequenceWithSchema(name, options, this.schemaName);\n\t});\n\n\tgetSQL(): SQL {\n\t\treturn new SQL([sql.identifier(this.schemaName)]);\n\t}\n\n\tshouldOmitSQLParens(): boolean {\n\t\treturn true;\n\t}\n}\n\nexport function isPgSchema(obj: unknown): obj is PgSchema {\n\treturn is(obj, PgSchema);\n}\n\nexport function pgSchema<T extends string>(name: T) {\n\tif (name === 'public') {\n\t\tthrow new Error(\n\t\t\t`You can't specify 'public' as schema name. Postgres is using public schema by default. If you want to use 'public' schema, just use pgTable() instead of creating a schema`,\n\t\t);\n\t}\n\n\treturn new PgSchema(name);\n}\n", "import { type Cache, hashQuery, NoopCache } from '~/cache/core/cache.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { DrizzleQueryError, TransactionRollbackError } from '~/errors.ts';\nimport type { TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { type Query, type SQL, sql } from '~/sql/index.ts';\nimport { tracer } from '~/tracing.ts';\nimport type { NeonAuthToken } from '~/utils.ts';\nimport { PgDatabase } from './db.ts';\nimport type { PgDialect } from './dialect.ts';\nimport type { SelectedFieldsOrdered } from './query-builders/select.types.ts';\n\nexport interface PreparedQueryConfig {\n\texecute: unknown;\n\tall: unknown;\n\tvalues: unknown;\n}\n\nexport abstract class PgPreparedQuery<T extends PreparedQueryConfig> implements PreparedQuery {\n\tconstructor(\n\t\tprotected query: Query,\n\t\t// cache instance\n\t\tprivate cache: Cache | undefined,\n\t\t// per query related metadata\n\t\tprivate queryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\t// config that was passed through $withCache\n\t\tprivate cacheConfig?: WithCacheConfig,\n\t) {\n\t\t// it means that no $withCache options were passed and it should be just enabled\n\t\tif (cache && cache.strategy() === 'all' && cacheConfig === undefined) {\n\t\t\tthis.cacheConfig = { enable: true, autoInvalidate: true };\n\t\t}\n\t\tif (!this.cacheConfig?.enable) {\n\t\t\tthis.cacheConfig = undefined;\n\t\t}\n\t}\n\n\tprotected authToken?: NeonAuthToken;\n\n\tgetQuery(): Query {\n\t\treturn this.query;\n\t}\n\n\tmapResult(response: unknown, _isFromBatch?: boolean): unknown {\n\t\treturn response;\n\t}\n\n\t/** @internal */\n\tsetToken(token?: NeonAuthToken) {\n\t\tthis.authToken = token;\n\t\treturn this;\n\t}\n\n\tstatic readonly [entityKind]: string = 'PgPreparedQuery';\n\n\t/** @internal */\n\tjoinsNotNullableMap?: Record<string, boolean>;\n\n\t/** @internal */\n\tprotected async queryWithCache<T>(\n\t\tqueryString: string,\n\t\tparams: any[],\n\t\tquery: () => Promise<T>,\n\t): Promise<T> {\n\t\tif (this.cache === undefined || is(this.cache, NoopCache) || this.queryMetadata === undefined) {\n\t\t\ttry {\n\t\t\t\treturn await query();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\t// don't do any mutations, if globally is false\n\t\tif (this.cacheConfig && !this.cacheConfig.enable) {\n\t\t\ttry {\n\t\t\t\treturn await query();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\t// For mutate queries, we should query the database, wait for a response, and then perform invalidation\n\t\tif (\n\t\t\t(\n\t\t\t\tthis.queryMetadata.type === 'insert' || this.queryMetadata.type === 'update'\n\t\t\t\t|| this.queryMetadata.type === 'delete'\n\t\t\t) && this.queryMetadata.tables.length > 0\n\t\t) {\n\t\t\ttry {\n\t\t\t\tconst [res] = await Promise.all([\n\t\t\t\t\tquery(),\n\t\t\t\t\tthis.cache.onMutate({ tables: this.queryMetadata.tables }),\n\t\t\t\t]);\n\t\t\t\treturn res;\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\t// don't do any reads if globally disabled\n\t\tif (!this.cacheConfig) {\n\t\t\ttry {\n\t\t\t\treturn await query();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\tif (this.queryMetadata.type === 'select') {\n\t\t\tconst fromCache = await this.cache.get(\n\t\t\t\tthis.cacheConfig.tag ?? await hashQuery(queryString, params),\n\t\t\t\tthis.queryMetadata.tables,\n\t\t\t\tthis.cacheConfig.tag !== undefined,\n\t\t\t\tthis.cacheConfig.autoInvalidate,\n\t\t\t);\n\t\t\tif (fromCache === undefined) {\n\t\t\t\tlet result;\n\t\t\t\ttry {\n\t\t\t\t\tresult = await query();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t\t}\n\t\t\t\t// put actual key\n\t\t\t\tawait this.cache.put(\n\t\t\t\t\tthis.cacheConfig.tag ?? await hashQuery(queryString, params),\n\t\t\t\t\tresult,\n\t\t\t\t\t// make sure we send tables that were used in a query only if user wants to invalidate it on each write\n\t\t\t\t\tthis.cacheConfig.autoInvalidate ? this.queryMetadata.tables : [],\n\t\t\t\t\tthis.cacheConfig.tag !== undefined,\n\t\t\t\t\tthis.cacheConfig.config,\n\t\t\t\t);\n\t\t\t\t// put flag if we should invalidate or not\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn fromCache as unknown as T;\n\t\t}\n\t\ttry {\n\t\t\treturn await query();\n\t\t} catch (e) {\n\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t}\n\t}\n\n\tabstract execute(placeholderValues?: Record<string, unknown>): Promise<T['execute']>;\n\t/** @internal */\n\tabstract execute(placeholderValues?: Record<string, unknown>, token?: NeonAuthToken): Promise<T['execute']>;\n\t/** @internal */\n\tabstract execute(placeholderValues?: Record<string, unknown>, token?: NeonAuthToken): Promise<T['execute']>;\n\n\t/** @internal */\n\tabstract all(placeholderValues?: Record<string, unknown>): Promise<T['all']>;\n\n\t/** @internal */\n\tabstract isResponseInArrayMode(): boolean;\n}\n\nexport interface PgTransactionConfig {\n\tisolationLevel?: 'read uncommitted' | 'read committed' | 'repeatable read' | 'serializable';\n\taccessMode?: 'read only' | 'read write';\n\tdeferrable?: boolean;\n}\n\nexport abstract class PgSession<\n\tTQueryResult extends PgQueryResultHKT = PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTSchema extends TablesRelationalConfig = Record<string, never>,\n> {\n\tstatic readonly [entityKind]: string = 'PgSession';\n\n\tconstructor(protected dialect: PgDialect) {}\n\n\tabstract prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => T['execute'],\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): PgPreparedQuery<T>;\n\n\texecute<T>(query: SQL): Promise<T>;\n\t/** @internal */\n\texecute<T>(query: SQL, token?: NeonAuthToken): Promise<T>;\n\t/** @internal */\n\texecute<T>(query: SQL, token?: NeonAuthToken): Promise<T> {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\tconst prepared = tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T }>(\n\t\t\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.setToken(token).execute(undefined, token);\n\t\t});\n\t}\n\n\tall<T = unknown>(query: SQL): Promise<T[]> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { all: T[] }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t).all();\n\t}\n\n\tasync count(sql: SQL): Promise<number>;\n\t/** @internal */\n\tasync count(sql: SQL, token?: NeonAuthToken): Promise<number>;\n\t/** @internal */\n\tasync count(sql: SQL, token?: NeonAuthToken): Promise<number> {\n\t\tconst res = await this.execute<[{ count: string }]>(sql, token);\n\n\t\treturn Number(\n\t\t\tres[0]['count'],\n\t\t);\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (tx: PgTransaction<TQueryResult, TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t): Promise<T>;\n}\n\nexport abstract class PgTransaction<\n\tTQueryResult extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTSchema extends TablesRelationalConfig = Record<string, never>,\n> extends PgDatabase<TQueryResult, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PgTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\tsession: PgSession<any, any, any>,\n\t\tprotected schema: {\n\t\t\tfullSchema: Record<string, unknown>;\n\t\t\tschema: TSchema;\n\t\t\ttableNamesMap: Record<string, string>;\n\t\t} | undefined,\n\t\tprotected readonly nestedIndex = 0,\n\t) {\n\t\tsuper(dialect, session, schema);\n\t}\n\n\trollback(): never {\n\t\tthrow new TransactionRollbackError();\n\t}\n\n\t/** @internal */\n\tgetTransactionConfigSQL(config: PgTransactionConfig): SQL {\n\t\tconst chunks: string[] = [];\n\t\tif (config.isolationLevel) {\n\t\t\tchunks.push(`isolation level ${config.isolationLevel}`);\n\t\t}\n\t\tif (config.accessMode) {\n\t\t\tchunks.push(config.accessMode);\n\t\t}\n\t\tif (typeof config.deferrable === 'boolean') {\n\t\t\tchunks.push(config.deferrable ? 'deferrable' : 'not deferrable');\n\t\t}\n\t\treturn sql.raw(chunks.join(' '));\n\t}\n\n\tsetTransaction(config: PgTransactionConfig): Promise<void> {\n\t\treturn this.session.execute(sql`set transaction ${this.getTransactionConfigSQL(config)}`);\n\t}\n\n\tabstract override transaction<T>(\n\t\ttransaction: (tx: PgTransaction<TQueryResult, TFullSchema, TSchema>) => Promise<T>,\n\t): Promise<T>;\n}\n\nexport interface PgQueryResultHKT {\n\treadonly $brand: 'PgQueryResultHKT';\n\treadonly row: unknown;\n\treadonly type: unknown;\n}\n\nexport type PgQueryResultKind<TKind extends PgQueryResultHKT, TRow> = (TKind & {\n\treadonly row: TRow;\n})['type'];\n", "//# sourceMappingURL=subquery.js.map", "export * from './array.ts';\n", "export * from './alias.ts';\nexport * from './checks.ts';\nexport * from './columns/index.ts';\nexport * from './db.ts';\nexport * from './dialect.ts';\nexport * from './foreign-keys.ts';\nexport * from './indexes.ts';\nexport * from './policies.ts';\nexport * from './primary-keys.ts';\nexport * from './query-builders/index.ts';\nexport * from './roles.ts';\nexport * from './schema.ts';\nexport * from './sequence.ts';\nexport * from './session.ts';\nexport * from './subquery.ts';\nexport * from './table.ts';\nexport * from './unique-constraint.ts';\nexport * from './utils.ts';\nexport * from './utils/index.ts';\nexport * from './view-common.ts';\nexport * from './view.ts';\n", "import type { Client, PoolClient, QueryArrayConfig, QueryConfig, QueryResult, QueryResultRow } from 'pg';\nimport pg from 'pg';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { type Logger, NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgTransaction } from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '~/pg-core/session.ts';\nimport { PgPreparedQuery, PgSession } from '~/pg-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, type SQL, sql } from '~/sql/sql.ts';\nimport { tracer } from '~/tracing.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nconst { Pool, types } = pg;\n\nexport type NodePgClient = pg.Pool | PoolClient | Client;\n\nexport class NodePgPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n\tstatic override readonly [entityKind]: string = 'NodePgPreparedQuery';\n\n\tprivate rawQueryConfig: QueryConfig;\n\tprivate queryConfig: QueryArrayConfig;\n\n\tconstructor(\n\t\tprivate client: NodePgClient,\n\t\tprivate queryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tcache: Cache,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t) {\n\t\tsuper({ sql: queryString, params }, cache, queryMetadata, cacheConfig);\n\t\tthis.rawQueryConfig = {\n\t\t\tname,\n\t\t\ttext: queryString,\n\t\t\ttypes: {\n\t\t\t\t// @ts-ignore\n\t\t\t\tgetTypeParser: (typeId, format) => {\n\t\t\t\t\tif (typeId === types.builtins.TIMESTAMPTZ) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeId === types.builtins.TIMESTAMP) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeId === types.builtins.DATE) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeId === types.builtins.INTERVAL) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\t// numeric[]\n\t\t\t\t\tif (typeId === 1231) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\t// timestamp[]\n\t\t\t\t\tif (typeId === 1115) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\t// timestamp with timezone[]\n\t\t\t\t\tif (typeId === 1185) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\t// interval[]\n\t\t\t\t\tif (typeId === 1187) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\t// date[]\n\t\t\t\t\tif (typeId === 1182) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\treturn types.getTypeParser(typeId, format);\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t\tthis.queryConfig = {\n\t\t\tname,\n\t\t\ttext: queryString,\n\t\t\trowMode: 'array',\n\t\t\ttypes: {\n\t\t\t\t// @ts-ignore\n\t\t\t\tgetTypeParser: (typeId, format) => {\n\t\t\t\t\tif (typeId === types.builtins.TIMESTAMPTZ) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeId === types.builtins.TIMESTAMP) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeId === types.builtins.DATE) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeId === types.builtins.INTERVAL) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\t// numeric[]\n\t\t\t\t\tif (typeId === 1231) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\t// timestamp[]\n\t\t\t\t\tif (typeId === 1115) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\t// timestamp with timezone[]\n\t\t\t\t\tif (typeId === 1185) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\t// interval[]\n\t\t\t\t\tif (typeId === 1187) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\t// date[]\n\t\t\t\t\tif (typeId === 1182) {\n\t\t\t\t\t\treturn (val) => val;\n\t\t\t\t\t}\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\treturn types.getTypeParser(typeId, format);\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\treturn tracer.startActiveSpan('drizzle.execute', async () => {\n\t\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\t\tthis.logger.logQuery(this.rawQueryConfig.text, params);\n\n\t\t\tconst { fields, rawQueryConfig: rawQuery, client, queryConfig: query, joinsNotNullableMap, customResultMapper } =\n\t\t\t\tthis;\n\t\t\tif (!fields && !customResultMapper) {\n\t\t\t\treturn tracer.startActiveSpan('drizzle.driver.execute', async (span) => {\n\t\t\t\t\tspan?.setAttributes({\n\t\t\t\t\t\t'drizzle.query.name': rawQuery.name,\n\t\t\t\t\t\t'drizzle.query.text': rawQuery.text,\n\t\t\t\t\t\t'drizzle.query.params': JSON.stringify(params),\n\t\t\t\t\t});\n\t\t\t\t\treturn this.queryWithCache(rawQuery.text, params, async () => {\n\t\t\t\t\t\treturn await client.query(rawQuery, params);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst result = await tracer.startActiveSpan('drizzle.driver.execute', (span) => {\n\t\t\t\tspan?.setAttributes({\n\t\t\t\t\t'drizzle.query.name': query.name,\n\t\t\t\t\t'drizzle.query.text': query.text,\n\t\t\t\t\t'drizzle.query.params': JSON.stringify(params),\n\t\t\t\t});\n\t\t\t\treturn this.queryWithCache(query.text, params, async () => {\n\t\t\t\t\treturn await client.query(query, params);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn tracer.startActiveSpan('drizzle.mapResponse', () => {\n\t\t\t\treturn customResultMapper\n\t\t\t\t\t? customResultMapper(result.rows)\n\t\t\t\t\t: result.rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t\t\t});\n\t\t});\n\t}\n\n\tall(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n\t\treturn tracer.startActiveSpan('drizzle.execute', () => {\n\t\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\t\tthis.logger.logQuery(this.rawQueryConfig.text, params);\n\t\t\treturn tracer.startActiveSpan('drizzle.driver.execute', (span) => {\n\t\t\t\tspan?.setAttributes({\n\t\t\t\t\t'drizzle.query.name': this.rawQueryConfig.name,\n\t\t\t\t\t'drizzle.query.text': this.rawQueryConfig.text,\n\t\t\t\t\t'drizzle.query.params': JSON.stringify(params),\n\t\t\t\t});\n\t\t\t\treturn this.queryWithCache(this.rawQueryConfig.text, params, async () => {\n\t\t\t\t\treturn this.client.query(this.rawQueryConfig, params);\n\t\t\t\t}).then((result) => result.rows);\n\t\t\t});\n\t\t});\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport interface NodePgSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class NodePgSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgSession<NodePgQueryResultHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NodePgSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: NodePgClient,\n\t\tdialect: PgDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: NodePgSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): PgPreparedQuery<T> {\n\t\treturn new NodePgPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\tname,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: NodePgTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig | undefined,\n\t): Promise<T> {\n\t\tconst isPool = this.client instanceof Pool || Object.getPrototypeOf(this.client).constructor.name.includes('Pool'); // eslint-disable-line no-instanceof/no-instanceof\n\t\tconst session = isPool\n\t\t\t? new NodePgSession(await (<pg.Pool> this.client).connect(), this.dialect, this.schema, this.options)\n\t\t\t: this;\n\t\tconst tx = new NodePgTransaction<TFullSchema, TSchema>(this.dialect, session, this.schema);\n\t\tawait tx.execute(sql`begin${config ? sql` ${tx.getTransactionConfigSQL(config)}` : undefined}`);\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tawait tx.execute(sql`rollback`);\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tif (isPool) (session.client as PoolClient).release();\n\t\t}\n\t}\n\n\toverride async count(sql: SQL): Promise<number> {\n\t\tconst res = await this.execute<{ rows: [{ count: string }] }>(sql);\n\t\treturn Number(\n\t\t\tres['rows'][0]['count'],\n\t\t);\n\t}\n}\n\nexport class NodePgTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<NodePgQueryResultHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NodePgTransaction';\n\n\toverride async transaction<T>(transaction: (tx: NodePgTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new NodePgTransaction<TFullSchema, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis.schema,\n\t\t\tthis.nestedIndex + 1,\n\t\t);\n\t\tawait tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport interface NodePgQueryResultHKT extends PgQueryResultHKT {\n\ttype: QueryResult<Assume<this['row'], QueryResultRow>>;\n}\n", "import pg, { type Pool, type PoolConfig } from 'pg';\nimport type { Cache } from '~/cache/core/cache.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport type { NodePgClient, NodePgQueryResultHKT } from './session.ts';\nimport { NodePgSession } from './session.ts';\n\nexport interface PgDriverOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class NodePgDriver {\n\tstatic readonly [entityKind]: string = 'NodePgDriver';\n\n\tconstructor(\n\t\tprivate client: NodePgClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: PgDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NodePgSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NodePgSession(this.client, this.dialect, schema, {\n\t\t\tlogger: this.options.logger,\n\t\t\tcache: this.options.cache,\n\t\t});\n\t}\n}\n\nexport class NodePgDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NodePgQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NodePgDatabase';\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NodePgClient = NodePgClient,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): NodePgDatabase<TSchema> & {\n\t$client: NodePgClient extends TClient ? Pool : TClient;\n} {\n\tconst dialect = new PgDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new NodePgDriver(client, dialect, { logger, cache: config.cache });\n\tconst session = driver.createSession(schema);\n\tconst db = new NodePgDatabase(dialect, session, schema as any) as NodePgDatabase<TSchema>;\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NodePgClient = Pool,\n>(\n\t...params:\n\t\t| [\n\t\t\tTClient | string,\n\t\t]\n\t\t| [\n\t\t\tTClient | string,\n\t\t\tDrizzleConfig<TSchema>,\n\t\t]\n\t\t| [\n\t\t\t& DrizzleConfig<TSchema>\n\t\t\t& ({\n\t\t\t\tclient: TClient;\n\t\t\t} | {\n\t\t\t\tconnection: string | PoolConfig;\n\t\t\t}),\n\t\t]\n): NodePgDatabase<TSchema> & {\n\t$client: NodePgClient extends TClient ? Pool : TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = new pg.Pool({\n\t\t\tconnectionString: params[0],\n\t\t});\n\n\t\treturn construct(instance, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as (\n\t\t\t& ({ connection?: PoolConfig | string; client?: TClient })\n\t\t\t& DrizzleConfig<TSchema>\n\t\t);\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tconst instance = typeof connection === 'string'\n\t\t\t? new pg.Pool({\n\t\t\t\tconnectionString: connection,\n\t\t\t})\n\t\t\t: new pg.Pool(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): NodePgDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n", "export * from './driver.ts';\nexport * from './session.ts';\n", "/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n    status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n    function init(inst, def) {\n        var _a;\n        Object.defineProperty(inst, \"_zod\", {\n            value: inst._zod ?? {},\n            enumerable: false,\n        });\n        (_a = inst._zod).traits ?? (_a.traits = new Set());\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        // support prototype modifications\n        for (const k in _.prototype) {\n            if (!(k in inst))\n                Object.defineProperty(inst, k, { value: _.prototype[k].bind(inst) });\n        }\n        inst._zod.constr = _;\n        inst._zod.def = def;\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        var _a;\n        const inst = params?.Parent ? new Definition() : this;\n        init(inst, def);\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        for (const fn of inst._zod.deferred) {\n            fn();\n        }\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n", "// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error();\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\nexport function cached(getter) {\n    const set = false;\n    return {\n        get value() {\n            if (!set) {\n                const value = getter();\n                Object.defineProperty(this, \"value\", { value });\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n    };\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nexport function defineLazy(object, key, getter) {\n    const set = false;\n    Object.defineProperty(object, key, {\n        get() {\n            if (!set) {\n                const value = getter();\n                object[key] = value;\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport const captureStackTrace = Error.captureStackTrace\n    ? Error.captureStackTrace\n    : (..._args) => { };\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n    });\n}\nexport const NUMBER_FORMAT_RANGES = {\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const newShape = {};\n    const currDef = schema._zod.def; //.shape;\n    for (const key in mask) {\n        if (!(key in currDef.shape)) {\n            throw new Error(`Unrecognized key: \"${key}\"`);\n        }\n        if (!mask[key])\n            continue;\n        // pick key\n        newShape[key] = currDef.shape[key];\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape: newShape,\n        checks: [],\n    });\n}\nexport function omit(schema, mask) {\n    const newShape = { ...schema._zod.def.shape };\n    const currDef = schema._zod.def; //.shape;\n    for (const key in mask) {\n        if (!(key in currDef.shape)) {\n            throw new Error(`Unrecognized key: \"${key}\"`);\n        }\n        if (!mask[key])\n            continue;\n        delete newShape[key];\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape: newShape,\n        checks: [],\n    });\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const def = {\n        ...schema._zod.def,\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        checks: [], // delete existing checks\n    };\n    return clone(schema, def);\n}\nexport function merge(a, b) {\n    return clone(a, {\n        ...a._zod.def,\n        get shape() {\n            const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        catchall: b._zod.def.catchall,\n        checks: [], // delete existing checks\n    });\n}\nexport function partial(Class, schema, mask) {\n    const oldShape = schema._zod.def.shape;\n    const shape = { ...oldShape };\n    if (mask) {\n        for (const key in mask) {\n            if (!(key in oldShape)) {\n                throw new Error(`Unrecognized key: \"${key}\"`);\n            }\n            if (!mask[key])\n                continue;\n            // if (oldShape[key]!._zod.optin === \"optional\") continue;\n            shape[key] = Class\n                ? new Class({\n                    type: \"optional\",\n                    innerType: oldShape[key],\n                })\n                : oldShape[key];\n        }\n    }\n    else {\n        for (const key in oldShape) {\n            // if (oldShape[key]!._zod.optin === \"optional\") continue;\n            shape[key] = Class\n                ? new Class({\n                    type: \"optional\",\n                    innerType: oldShape[key],\n                })\n                : oldShape[key];\n        }\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape,\n        checks: [],\n    });\n}\nexport function required(Class, schema, mask) {\n    const oldShape = schema._zod.def.shape;\n    const shape = { ...oldShape };\n    if (mask) {\n        for (const key in mask) {\n            if (!(key in shape)) {\n                throw new Error(`Unrecognized key: \"${key}\"`);\n            }\n            if (!mask[key])\n                continue;\n            // overwrite with non-optional\n            shape[key] = new Class({\n                type: \"nonoptional\",\n                innerType: oldShape[key],\n            });\n        }\n    }\n    else {\n        for (const key in oldShape) {\n            // overwrite with non-optional\n            shape[key] = new Class({\n                type: \"nonoptional\",\n                innerType: oldShape[key],\n            });\n        }\n    }\n    return clone(schema, {\n        ...schema._zod.def,\n        shape,\n        // optional: [],\n        checks: [],\n    });\n}\nexport function aborted(x, startIndex = 0) {\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true)\n            return true;\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n    const full = { ...iss, path: iss.path ?? [] };\n    // for backwards compatibility\n    if (!iss.message) {\n        const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\";\n        full.message = message;\n    }\n    // delete (full as any).def;\n    delete full.inst;\n    delete full.continue;\n    if (!ctx?.reportInput) {\n        delete full.input;\n    }\n    return full;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n", "import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    Object.defineProperty(inst, \"_zod\", {\n        value: inst._zod,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"issues\", {\n        value: def,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"message\", {\n        get() {\n            return JSON.stringify(def, util.jsonStringifyReplacer, 2);\n        },\n        enumerable: true,\n        // configurable: false,\n    });\n    Object.defineProperty(inst, \"toString\", {\n        value: () => inst.message,\n        enumerable: false,\n    });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n            fieldErrors[sub.path[0]].push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, _mapper) {\n    const mapper = _mapper ||\n        function (issue) {\n            return issue.message;\n        };\n    const fieldErrors = { _errors: [] };\n    const processError = (error) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.path.length === 0) {\n                fieldErrors._errors.push(mapper(issue));\n            }\n            else {\n                let curr = fieldErrors;\n                let i = 0;\n                while (i < issue.path.length) {\n                    const el = issue.path[i];\n                    const terminal = i === issue.path.length - 1;\n                    if (!terminal) {\n                        curr[el] = curr[el] || { _errors: [] };\n                    }\n                    else {\n                        curr[el] = curr[el] || { _errors: [] };\n                        curr[el]._errors.push(mapper(issue));\n                    }\n                    curr = curr[el];\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, _mapper) {\n    const mapper = _mapper ||\n        function (issue) {\n            return issue.message;\n        };\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a, _b;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, issue.path));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   \u2716 Expected number, received string at \"username\n * favoriteNumbers[0]\n *   \u2716 Invalid input: expected number\n * ```\n */\nexport function toDotPath(path) {\n    const segs = [];\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => a.path.length - b.path.length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`\u2716 ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  \u2192 at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n", "import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    if (result.issues.length) {\n        const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, _params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    if (result.issues.length) {\n        const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length\n        ? {\n            success: false,\n            error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length\n        ? {\n            success: false,\n            error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\n", "export const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nexport const _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$/;\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp =\n//   /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$/;\nexport const hostname = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\nexport const e164 = /^\\+(?:[0-9]){6,14}[0-9]$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const time = timeSource({ precision: args.precision });\n    const opts = [\"Z\"];\n    if (args.local)\n        opts.push(\"\");\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^\\d+n?$/;\nexport const integer = /^\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?/i;\nexport const boolean = /true|false/i;\nconst _null = /null/i;\nexport { _null as null };\nconst _undefined = /undefined/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n", "// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n        if (def.value < curr) {\n            if (def.inclusive)\n                bag.maximum = def.value;\n            else\n                bag.exclusiveMaximum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n        if (def.value > curr) {\n            if (def.inclusive)\n                bag.minimum = def.value;\n            else\n                bag.exclusiveMinimum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        var _a;\n        (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n    });\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n        if (isInt)\n            bag.pattern = regexes.integer;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.size;\n        bag.maximum = def.size;\n        bag.size = def.size;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.length;\n        bag.maximum = def.length;\n        bag.length = def.length;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        if (def.pattern) {\n            bag.patterns ?? (bag.patterns = new Set());\n            bag.patterns.add(def.pattern);\n        }\n    });\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.mime = def.mime;\n    });\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n", "export class Doc {\n    constructor(args = []) {\n        this.content = [];\n        this.indent = 0;\n        if (this)\n            this.args = args;\n    }\n    indented(fn) {\n        this.indent += 1;\n        fn(this);\n        this.indent -= 1;\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const args = this?.args;\n        const content = this?.content ?? [``];\n        const lines = [...content.map((x) => `  ${x}`)];\n        // console.log(lines.join(\"\\n\"));\n        return new F(...args, lines.join(\"\\n\"));\n    }\n}\n", "export const version = {\n    major: 4,\n    minor: 0,\n    patch: 0,\n};\n", "import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const checks = [...(inst._zod.def.checks ?? [])];\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    if (inst._zod.traits.has(\"$ZodCheck\")) {\n        checks.unshift(inst);\n    }\n    //\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer\n        // inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        inst._zod.run = (payload, ctx) => {\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n    inst[\"~standard\"] = {\n        validate: (value) => {\n            try {\n                const r = safeParse(inst, value);\n                return r.success ? { value: r.data } : { issues: r.error?.issues };\n            }\n            catch (_) {\n                return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n            }\n        },\n        vendor: \"zod\",\n        version: 1,\n    };\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            const orig = payload.value;\n            const url = new URL(orig);\n            const href = url.href;\n            if (def.hostname) {\n                def.hostname.lastIndex = 0;\n                if (!def.hostname.test(url.hostname)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid hostname\",\n                        pattern: regexes.hostname.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            if (def.protocol) {\n                def.protocol.lastIndex = 0;\n                if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid protocol\",\n                        pattern: def.protocol.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            // payload.value = url.href;\n            if (!orig.endsWith(\"/\") && href.endsWith(\"/\")) {\n                payload.value = href.slice(0, -1);\n            }\n            else {\n                payload.value = href;\n            }\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.nanoid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv4`;\n    });\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv6`;\n    });\n    inst._zod.check = (payload) => {\n        try {\n            new URL(`http://[${payload.value}]`);\n            // return;\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        const [address, prefix] = payload.value.split(\"/\");\n        try {\n            if (!prefix)\n                throw new Error();\n            const prefixNum = Number(prefix);\n            if (`${prefixNum}` !== prefix)\n                throw new Error();\n            if (prefixNum < 0 || prefixNum > 128)\n                throw new Error();\n            new URL(`http://[${address}]`);\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64URL(data) {\n    if (!regexes.base64url.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64url);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64url\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? \"Infinity\"\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checksp\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = Array(input.length);\n        const proms = [];\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n});\nfunction handleObjectResult(result, final, key) {\n    // if(isOptional)\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    final.value[key] = result.value;\n}\nfunction handleOptionalObjectResult(result, final, key, input) {\n    if (result.issues.length) {\n        // validation failed against value schema\n        if (input[key] === undefined) {\n            // if input was undefined, ignore the error\n            if (key in input) {\n                final.value[key] = undefined;\n            }\n            else {\n                final.value[key] = result.value;\n            }\n        }\n        else {\n            final.issues.push(...util.prefixIssues(key, result.issues));\n        }\n    }\n    else if (result.value === undefined) {\n        // validation returned `undefined`\n        if (key in input)\n            final.value[key] = undefined;\n    }\n    else {\n        // non-undefined value\n        final.value[key] = result.value;\n    }\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    const _normalized = util.cached(() => {\n        const keys = Object.keys(def.shape);\n        for (const k of keys) {\n            if (!(def.shape[k] instanceof $ZodType)) {\n                throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n            }\n        }\n        const okeys = util.optionalKeys(def.shape);\n        return {\n            shape: def.shape,\n            keys,\n            keySet: new Set(keys),\n            numKeys: keys.length,\n            optionalKeys: new Set(okeys),\n        };\n    });\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const shape = def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                propValues[key] ?? (propValues[key] = new Set());\n                for (const v of field.values)\n                    propValues[key].add(v);\n            }\n        }\n        return propValues;\n    });\n    const generateFastpass = (shape) => {\n        const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n        const normalized = _normalized.value;\n        const parseStr = (key) => {\n            const k = util.esc(key);\n            return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        };\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.keys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(`const newResult = {}`);\n        for (const key of normalized.keys) {\n            if (normalized.optionalKeys.has(key)) {\n                const id = ids[key];\n                doc.write(`const ${id} = ${parseStr(key)};`);\n                const k = util.esc(key);\n                doc.write(`\n        if (${id}.issues.length) {\n          if (input[${k}] === undefined) {\n            if (${k} in input) {\n              newResult[${k}] = undefined;\n            }\n          } else {\n            payload.issues = payload.issues.concat(\n              ${id}.issues.map((iss) => ({\n                ...iss,\n                path: iss.path ? [${k}, ...iss.path] : [${k}],\n              }))\n            );\n          }\n        } else if (${id}.value === undefined) {\n          if (${k} in input) newResult[${k}] = undefined;\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        `);\n            }\n            else {\n                const id = ids[key];\n                //  const id = ids[key];\n                doc.write(`const ${id} = ${parseStr(key)};`);\n                doc.write(`\n          if (${id}.issues.length) payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${util.esc(key)}, ...iss.path] : [${util.esc(key)}]\n          })));`);\n                doc.write(`newResult[${util.esc(key)}] = ${id}.value`);\n            }\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        const fn = doc.compile();\n        return (payload, ctx) => fn(shape, payload, ctx);\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n        }\n        else {\n            payload.value = {};\n            const shape = value.shape;\n            for (const key of value.keys) {\n                const el = shape[key];\n                // do not add omitted optional keys\n                // if (!(key in input)) {\n                //   if (optionalKeys.has(key)) continue;\n                //   payload.issues.push({\n                //     code: \"invalid_type\",\n                //     path: [key],\n                //     expected: \"nonoptional\",\n                //     note: `Missing required key: \"${key}\"`,\n                //     input,\n                //     inst,\n                //   });\n                // }\n                const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n                const isOptional = el._zod.optin === \"optional\" && el._zod.optout === \"optional\";\n                if (r instanceof Promise) {\n                    proms.push(r.then((r) => isOptional ? handleOptionalObjectResult(r, payload, key, input) : handleObjectResult(r, payload, key)));\n                }\n                else if (isOptional) {\n                    handleOptionalObjectResult(r, payload, key, input);\n                }\n                else {\n                    handleObjectResult(r, payload, key);\n                }\n            }\n        }\n        if (!catchall) {\n            // return payload;\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        const unrecognized = [];\n        // iterate over input keys\n        const keySet = value.keySet;\n        const _catchall = catchall._zod;\n        const t = _catchall.def.type;\n        for (const key of Object.keys(input)) {\n            if (keySet.has(key))\n                continue;\n            if (t === \"never\") {\n                unrecognized.push(key);\n                continue;\n            }\n            const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handleObjectResult(r, payload, key)));\n            }\n            else {\n                handleObjectResult(r, payload, key);\n            }\n        }\n        if (unrecognized.length) {\n            payload.issues.push({\n                code: \"unrecognized_keys\",\n                keys: unrecognized,\n                input,\n                inst,\n            });\n        }\n        if (!proms.length)\n            return payload;\n        return Promise.all(proms).then(() => {\n            return payload;\n        });\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"values\", () => {\n        if (def.options.every((o) => o._zod.values)) {\n            return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        if (def.options.every((o) => o._zod.pattern)) {\n            const patterns = def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const propValues = {};\n        for (const option of def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n            for (const [k, v] of Object.entries(pv)) {\n                if (!propValues[k])\n                    propValues[k] = new Set();\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        return propValues;\n    });\n    const disc = util.cached(() => {\n        const opts = def.options;\n        const map = new Map();\n        for (const o of opts) {\n            const values = o._zod.propValues[def.discriminator];\n            if (!values || values.size === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n            for (const v of values) {\n                if (map.has(v)) {\n                    throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n                }\n                map.set(v, o);\n            }\n        }\n        return map;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const opt = disc.value.get(input?.[def.discriminator]);\n        if (opt) {\n            return opt._zod.run(payload, ctx);\n        }\n        if (def.unionFallback) {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nfunction mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    if (left.issues.length) {\n        result.issues.push(...left.issues);\n    }\n    if (right.issues.length) {\n        result.issues.push(...right.issues);\n    }\n    if (util.aborted(result))\n        return result;\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    const optStart = items.length - [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = [];\n        const proms = [];\n        if (!def.rest) {\n            const tooBig = input.length > items.length;\n            const tooSmall = input.length < optStart - 1;\n            if (tooBig || tooSmall) {\n                payload.issues.push({\n                    input,\n                    inst,\n                    origin: \"array\",\n                    ...(tooBig ? { code: \"too_big\", maximum: items.length } : { code: \"too_small\", minimum: items.length }),\n                });\n                return payload;\n            }\n        }\n        let i = -1;\n        for (const item of items) {\n            i++;\n            if (i >= input.length)\n                if (i >= optStart)\n                    continue;\n            const result = item._zod.run({\n                value: input[i],\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n            }\n            else {\n                handleTupleResult(result, payload, i);\n            }\n        }\n        if (def.rest) {\n            const rest = input.slice(items.length);\n            for (const el of rest) {\n                i++;\n                const result = def.rest._zod.run({\n                    value: el,\n                    issues: [],\n                }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        if (def.keyType._zod.values) {\n            const values = def.keyType._zod.values;\n            payload.value = {};\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[key] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[key] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!values.has(key)) {\n                    unrecognized = unrecognized ?? [];\n                    unrecognized.push(key);\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                });\n            }\n        }\n        else {\n            payload.value = {};\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                if (keyResult.issues.length) {\n                    payload.issues.push({\n                        origin: \"record\",\n                        code: \"invalid_key\",\n                        issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        input: key,\n                        path: [key],\n                        inst,\n                    });\n                    payload.value[keyResult.value] = keyResult.value;\n                    continue;\n                }\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[keyResult.value] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[keyResult.value] = result.value;\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Map();\n        for (const [key, value] of input) {\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_key\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Set();\n        for (const item of input) {\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    inst._zod.values = new Set(values);\n    inst._zod.pattern = new RegExp(`^(${values\n        .filter((k) => util.propertyKeyTypes.has(typeof k))\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (inst._zod.values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.values = new Set(def.values);\n    inst._zod.pattern = new RegExp(`^(${def.values\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? o.toString() : String(o)))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (inst._zod.values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const _out = def.transform(payload.value, payload);\n        if (_ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        return payload;\n    };\n});\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (def.innerType._zod.optin === \"optional\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        if (payload.value === undefined) {\n            return payload;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault always returns the default value immediately.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => {\n        const v = def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.value;\n                if (result.issues.length) {\n                    payload.value = def.catchValue({\n                        ...payload,\n                        error: {\n                            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        },\n                        input: payload.value,\n                    });\n                    payload.issues = [];\n                }\n                return payload;\n            });\n        }\n        payload.value = result.value;\n        if (result.issues.length) {\n            payload.value = def.catchValue({\n                ...payload,\n                error: {\n                    issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                },\n                input: payload.value,\n            });\n            payload.issues = [];\n        }\n        return payload;\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def, ctx));\n        }\n        return handlePipeResult(left, def, ctx);\n    };\n});\nfunction handlePipeResult(left, def, ctx) {\n    if (util.aborted(left)) {\n        return left;\n    }\n    return def.out._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    payload.value = Object.freeze(payload.value);\n    return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (part instanceof $ZodType) {\n            if (!part._zod.pattern) {\n                // if (!source)\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n            if (!source)\n                throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n            const start = source.startsWith(\"^\") ? 1 : 0;\n            const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n            regexParts.push(source.slice(start, end));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"template_literal\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n    util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType._zod.pattern);\n    util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u062D\u0631\u0641\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n        file: { unit: \"\u0628\u0627\u064A\u062A\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n        array: { unit: \"\u0639\u0646\u0635\u0631\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n        set: { unit: \"\u0639\u0646\u0635\u0631\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"number\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"array\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u0645\u062F\u062E\u0644\",\n        email: \"\u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A\",\n        url: \"\u0631\u0627\u0628\u0637\",\n        emoji: \"\u0625\u064A\u0645\u0648\u062C\u064A\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u062A\u0627\u0631\u064A\u062E \u0648\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        date: \"\u062A\u0627\u0631\u064A\u062E \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        time: \"\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        duration: \"\u0645\u062F\u0629 \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        ipv4: \"\u0639\u0646\u0648\u0627\u0646 IPv4\",\n        ipv6: \"\u0639\u0646\u0648\u0627\u0646 IPv6\",\n        cidrv4: \"\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv4\",\n        cidrv6: \"\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv6\",\n        base64: \"\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64-encoded\",\n        base64url: \"\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64url-encoded\",\n        json_string: \"\u0646\u064E\u0635 \u0639\u0644\u0649 \u0647\u064A\u0626\u0629 JSON\",\n        e164: \"\u0631\u0642\u0645 \u0647\u0627\u062A\u0641 \u0628\u0645\u0639\u064A\u0627\u0631 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0645\u062F\u062E\u0644\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${issue.expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0627\u062E\u062A\u064A\u0627\u0631 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062A\u0648\u0642\u0639 \u0627\u0646\u062A\u0642\u0627\u0621 \u0623\u062D\u062F \u0647\u0630\u0647 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return ` \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue.origin ?? \"\u0627\u0644\u0642\u064A\u0645\u0629\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\"}`;\n                return `\u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue.origin ?? \"\u0627\u0644\u0642\u064A\u0645\u0629\"} ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0628\u062F\u0623 \u0628\u0640 \"${issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0646\u062A\u0647\u064A \u0628\u0640 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u062A\u0636\u0645\u0651\u064E\u0646 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0637\u0627\u0628\u0642 \u0627\u0644\u0646\u0645\u0637 ${_issue.pattern}`;\n                return `${Nouns[_issue.format] ?? issue.format} \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644`;\n            }\n            case \"not_multiple_of\":\n                return `\u0631\u0642\u0645 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0645\u0646 \u0645\u0636\u0627\u0639\u0641\u0627\u062A ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u0645\u0639\u0631\u0641${issue.keys.length > 1 ? \"\u0627\u062A\" : \"\"} \u063A\u0631\u064A\u0628${issue.keys.length > 1 ? \"\u0629\" : \"\"}: ${util.joinValues(issue.keys, \"\u060C \")}`;\n            case \"invalid_key\":\n                return `\u0645\u0639\u0631\u0641 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\";\n            case \"invalid_element\":\n                return `\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue.origin}`;\n            default:\n                return \"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"simvol\", verb: \"olmal\u0131d\u0131r\" },\n        file: { unit: \"bayt\", verb: \"olmal\u0131d\u0131r\" },\n        array: { unit: \"element\", verb: \"olmal\u0131d\u0131r\" },\n        set: { unit: \"element\", verb: \"olmal\u0131d\u0131r\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"number\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"array\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n ${issue.expected}, daxil olan ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Yanl\u0131\u015F se\u00E7im: a\u015Fa\u011F\u0131dak\u0131lardan biri olmal\u0131d\u0131r: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ox b\u00F6y\u00FCk: g\u00F6zl\u0259nil\u0259n ${issue.origin ?? \"d\u0259y\u0259r\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n                return `\u00C7ox b\u00F6y\u00FCk: g\u00F6zl\u0259nil\u0259n ${issue.origin ?? \"d\u0259y\u0259r\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ox ki\u00E7ik: g\u00F6zl\u0259nil\u0259n ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                return `\u00C7ox ki\u00E7ik: g\u00F6zl\u0259nil\u0259n ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Yanl\u0131\u015F m\u0259tn: \"${_issue.prefix}\" il\u0259 ba\u015Flamal\u0131d\u0131r`;\n                if (_issue.format === \"ends_with\")\n                    return `Yanl\u0131\u015F m\u0259tn: \"${_issue.suffix}\" il\u0259 bitm\u0259lidir`;\n                if (_issue.format === \"includes\")\n                    return `Yanl\u0131\u015F m\u0259tn: \"${_issue.includes}\" daxil olmal\u0131d\u0131r`;\n                if (_issue.format === \"regex\")\n                    return `Yanl\u0131\u015F m\u0259tn: ${_issue.pattern} \u015Fablonuna uy\u011Fun olmal\u0131d\u0131r`;\n                return `Yanl\u0131\u015F ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Yanl\u0131\u015F \u0259d\u0259d: ${issue.divisor} il\u0259 b\u00F6l\u00FCn\u0259 bil\u0259n olmal\u0131d\u0131r`;\n            case \"unrecognized_keys\":\n                return `Tan\u0131nmayan a\u00E7ar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} daxilind\u0259 yanl\u0131\u015F a\u00E7ar`;\n            case \"invalid_union\":\n                return \"Yanl\u0131\u015F d\u0259y\u0259r\";\n            case \"invalid_element\":\n                return `${issue.origin} daxilind\u0259 yanl\u0131\u015F d\u0259y\u0259r`;\n            default:\n                return `Yanl\u0131\u015F d\u0259y\u0259r`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nfunction getBelarusianPlural(count, one, few, many) {\n    const absCount = Math.abs(count);\n    const lastDigit = absCount % 10;\n    const lastTwoDigits = absCount % 100;\n    if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n        return many;\n    }\n    if (lastDigit === 1) {\n        return one;\n    }\n    if (lastDigit >= 2 && lastDigit <= 4) {\n        return few;\n    }\n    return many;\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"\u0441\u0456\u043C\u0432\u0430\u043B\",\n                few: \"\u0441\u0456\u043C\u0432\u0430\u043B\u044B\",\n                many: \"\u0441\u0456\u043C\u0432\u0430\u043B\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n        array: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n        set: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n        file: {\n            unit: {\n                one: \"\u0431\u0430\u0439\u0442\",\n                few: \"\u0431\u0430\u0439\u0442\u044B\",\n                many: \"\u0431\u0430\u0439\u0442\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"\u043B\u0456\u043A\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"\u043C\u0430\u0441\u0456\u045E\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u0443\u0432\u043E\u0434\",\n        email: \"email \u0430\u0434\u0440\u0430\u0441\",\n        url: \"URL\",\n        emoji: \"\u044D\u043C\u043E\u0434\u0437\u0456\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0434\u0430\u0442\u0430 \u0456 \u0447\u0430\u0441\",\n        date: \"ISO \u0434\u0430\u0442\u0430\",\n        time: \"ISO \u0447\u0430\u0441\",\n        duration: \"ISO \u043F\u0440\u0430\u0446\u044F\u0433\u043B\u0430\u0441\u0446\u044C\",\n        ipv4: \"IPv4 \u0430\u0434\u0440\u0430\u0441\",\n        ipv6: \"IPv6 \u0430\u0434\u0440\u0430\u0441\",\n        cidrv4: \"IPv4 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D\",\n        cidrv6: \"IPv6 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D\",\n        base64: \"\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64\",\n        base64url: \"\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64url\",\n        json_string: \"JSON \u0440\u0430\u0434\u043E\u043A\",\n        e164: \"\u043D\u0443\u043C\u0430\u0440 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0443\u0432\u043E\u0434\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F ${issue.expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0432\u0430\u0440\u044B\u044F\u043D\u0442: \u0447\u0430\u043A\u0430\u045E\u0441\u044F \u0430\u0434\u0437\u0456\u043D \u0437 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435\"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435\"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u043F\u0430\u0447\u044B\u043D\u0430\u0446\u0446\u0430 \u0437 \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u0430\u043A\u0430\u043D\u0447\u0432\u0430\u0446\u0446\u0430 \u043D\u0430 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u043C\u044F\u0448\u0447\u0430\u0446\u044C \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0430\u0434\u043F\u0430\u0432\u044F\u0434\u0430\u0446\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043B\u0456\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0431\u044B\u0446\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u041D\u0435\u0440\u0430\u0441\u043F\u0430\u0437\u043D\u0430\u043D\u044B ${issue.keys.length > 1 ? \"\u043A\u043B\u044E\u0447\u044B\" : \"\u043A\u043B\u044E\u0447\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043A\u043B\u044E\u0447 \u0443 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434\";\n            case \"invalid_element\":\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u0430\u0435 \u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435 \u045E ${issue.origin}`;\n            default:\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"car\u00E0cters\", verb: \"contenir\" },\n        file: { unit: \"bytes\", verb: \"contenir\" },\n        array: { unit: \"elements\", verb: \"contenir\" },\n        set: { unit: \"elements\", verb: \"contenir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"number\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"array\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"entrada\",\n        email: \"adre\u00E7a electr\u00F2nica\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data i hora ISO\",\n        date: \"data ISO\",\n        time: \"hora ISO\",\n        duration: \"durada ISO\",\n        ipv4: \"adre\u00E7a IPv4\",\n        ipv6: \"adre\u00E7a IPv6\",\n        cidrv4: \"rang IPv4\",\n        cidrv6: \"rang IPv6\",\n        base64: \"cadena codificada en base64\",\n        base64url: \"cadena codificada en base64url\",\n        json_string: \"cadena JSON\",\n        e164: \"n\u00FAmero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Tipus inv\u00E0lid: s'esperava ${issue.expected}, s'ha rebut ${parsedType(issue.input)}`;\n            // return `Tipus inv\u00E0lid: s'esperava ${issue.expected}, s'ha rebut ${util.getParsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Valor inv\u00E0lid: s'esperava ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opci\u00F3 inv\u00E0lida: s'esperava una de ${util.joinValues(issue.values, \" o \")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"com a m\u00E0xim\" : \"menys de\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} contingu\u00E9s ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} fos ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"com a m\u00EDnim\" : \"m\u00E9s de\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Massa petit: s'esperava que ${issue.origin} contingu\u00E9s ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Massa petit: s'esperava que ${issue.origin} fos ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Format inv\u00E0lid: ha de comen\u00E7ar amb \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Format inv\u00E0lid: ha d'acabar amb \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Format inv\u00E0lid: ha d'incloure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Format inv\u00E0lid: ha de coincidir amb el patr\u00F3 ${_issue.pattern}`;\n                return `Format inv\u00E0lid per a ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `N\u00FAmero inv\u00E0lid: ha de ser m\u00FAltiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Clau${issue.keys.length > 1 ? \"s\" : \"\"} no reconeguda${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Clau inv\u00E0lida a ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada inv\u00E0lida\"; // Could also be \"Tipus d'uni\u00F3 inv\u00E0lid\" but \"Entrada inv\u00E0lida\" is more general\n            case \"invalid_element\":\n                return `Element inv\u00E0lid a ${issue.origin}`;\n            default:\n                return `Entrada inv\u00E0lida`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znak\u016F\", verb: \"m\u00EDt\" },\n        file: { unit: \"bajt\u016F\", verb: \"m\u00EDt\" },\n        array: { unit: \"prvk\u016F\", verb: \"m\u00EDt\" },\n        set: { unit: \"prvk\u016F\", verb: \"m\u00EDt\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"\u010D\u00EDslo\";\n            }\n            case \"string\": {\n                return \"\u0159et\u011Bzec\";\n            }\n            case \"boolean\": {\n                return \"boolean\";\n            }\n            case \"bigint\": {\n                return \"bigint\";\n            }\n            case \"function\": {\n                return \"funkce\";\n            }\n            case \"symbol\": {\n                return \"symbol\";\n            }\n            case \"undefined\": {\n                return \"undefined\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"pole\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"regul\u00E1rn\u00ED v\u00FDraz\",\n        email: \"e-mailov\u00E1 adresa\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"datum a \u010Das ve form\u00E1tu ISO\",\n        date: \"datum ve form\u00E1tu ISO\",\n        time: \"\u010Das ve form\u00E1tu ISO\",\n        duration: \"doba trv\u00E1n\u00ED ISO\",\n        ipv4: \"IPv4 adresa\",\n        ipv6: \"IPv6 adresa\",\n        cidrv4: \"rozsah IPv4\",\n        cidrv6: \"rozsah IPv6\",\n        base64: \"\u0159et\u011Bzec zak\u00F3dovan\u00FD ve form\u00E1tu base64\",\n        base64url: \"\u0159et\u011Bzec zak\u00F3dovan\u00FD ve form\u00E1tu base64url\",\n        json_string: \"\u0159et\u011Bzec ve form\u00E1tu JSON\",\n        e164: \"\u010D\u00EDslo E.164\",\n        jwt: \"JWT\",\n        template_literal: \"vstup\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no ${issue.expected}, obdr\u017Eeno ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neplatn\u00E1 mo\u017Enost: o\u010Dek\u00E1v\u00E1na jedna z hodnot ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Hodnota je p\u0159\u00EDli\u0161 velk\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED m\u00EDt ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"prvk\u016F\"}`;\n                }\n                return `Hodnota je p\u0159\u00EDli\u0161 velk\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED b\u00FDt ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Hodnota je p\u0159\u00EDli\u0161 mal\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED m\u00EDt ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"prvk\u016F\"}`;\n                }\n                return `Hodnota je p\u0159\u00EDli\u0161 mal\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED b\u00FDt ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED za\u010D\u00EDnat na \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED kon\u010Dit na \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED obsahovat \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED odpov\u00EDdat vzoru ${_issue.pattern}`;\n                return `Neplatn\u00FD form\u00E1t ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neplatn\u00E9 \u010D\u00EDslo: mus\u00ED b\u00FDt n\u00E1sobkem ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nezn\u00E1m\u00E9 kl\u00ED\u010De: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neplatn\u00FD kl\u00ED\u010D v ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Neplatn\u00FD vstup\";\n            case \"invalid_element\":\n                return `Neplatn\u00E1 hodnota v ${issue.origin}`;\n            default:\n                return `Neplatn\u00FD vstup`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"Zeichen\", verb: \"zu haben\" },\n        file: { unit: \"Bytes\", verb: \"zu haben\" },\n        array: { unit: \"Elemente\", verb: \"zu haben\" },\n        set: { unit: \"Elemente\", verb: \"zu haben\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"Zahl\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"Array\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"Eingabe\",\n        email: \"E-Mail-Adresse\",\n        url: \"URL\",\n        emoji: \"Emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-Datum und -Uhrzeit\",\n        date: \"ISO-Datum\",\n        time: \"ISO-Uhrzeit\",\n        duration: \"ISO-Dauer\",\n        ipv4: \"IPv4-Adresse\",\n        ipv6: \"IPv6-Adresse\",\n        cidrv4: \"IPv4-Bereich\",\n        cidrv6: \"IPv6-Bereich\",\n        base64: \"Base64-codierter String\",\n        base64url: \"Base64-URL-codierter String\",\n        json_string: \"JSON-String\",\n        e164: \"E.164-Nummer\",\n        jwt: \"JWT\",\n        template_literal: \"Eingabe\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Ung\u00FCltige Eingabe: erwartet ${issue.expected}, erhalten ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ung\u00FCltige Eingabe: erwartet ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ung\u00FCltige Option: erwartet eine von ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Zu gro\u00DF: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"Elemente\"} hat`;\n                return `Zu gro\u00DF: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ist`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} hat`;\n                }\n                return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ist`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ung\u00FCltiger String: muss mit \"${_issue.prefix}\" beginnen`;\n                if (_issue.format === \"ends_with\")\n                    return `Ung\u00FCltiger String: muss mit \"${_issue.suffix}\" enden`;\n                if (_issue.format === \"includes\")\n                    return `Ung\u00FCltiger String: muss \"${_issue.includes}\" enthalten`;\n                if (_issue.format === \"regex\")\n                    return `Ung\u00FCltiger String: muss dem Muster ${_issue.pattern} entsprechen`;\n                return `Ung\u00FCltig: ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ung\u00FCltige Zahl: muss ein Vielfaches von ${issue.divisor} sein`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Unbekannte Schl\u00FCssel\" : \"Unbekannter Schl\u00FCssel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ung\u00FCltiger Schl\u00FCssel in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ung\u00FCltige Eingabe\";\n            case \"invalid_element\":\n                return `Ung\u00FCltiger Wert in ${issue.origin}`;\n            default:\n                return `Ung\u00FCltige Eingabe`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nexport const parsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"NaN\" : \"number\";\n        }\n        case \"object\": {\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                return data.constructor.name;\n            }\n        }\n    }\n    return t;\n};\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"characters\", verb: \"to have\" },\n        file: { unit: \"bytes\", verb: \"to have\" },\n        array: { unit: \"items\", verb: \"to have\" },\n        set: { unit: \"items\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const Nouns = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Invalid input: expected ${issue.expected}, received ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Invalid string: must start with \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Invalid string: must end with \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Invalid string: must include \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Invalid string: must match pattern ${_issue.pattern}`;\n                return `Invalid ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Invalid number: must be a multiple of ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Invalid key in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Invalid input\";\n            case \"invalid_element\":\n                return `Invalid value in ${issue.origin}`;\n            default:\n                return `Invalid input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nexport const parsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"NaN\" : \"nombro\";\n        }\n        case \"object\": {\n            if (Array.isArray(data)) {\n                return \"tabelo\";\n            }\n            if (data === null) {\n                return \"senvalora\";\n            }\n            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                return data.constructor.name;\n            }\n        }\n    }\n    return t;\n};\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karaktrojn\", verb: \"havi\" },\n        file: { unit: \"bajtojn\", verb: \"havi\" },\n        array: { unit: \"elementojn\", verb: \"havi\" },\n        set: { unit: \"elementojn\", verb: \"havi\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const Nouns = {\n        regex: \"enigo\",\n        email: \"retadreso\",\n        url: \"URL\",\n        emoji: \"emo\u011Dio\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-datotempo\",\n        date: \"ISO-dato\",\n        time: \"ISO-tempo\",\n        duration: \"ISO-da\u016Dro\",\n        ipv4: \"IPv4-adreso\",\n        ipv6: \"IPv6-adreso\",\n        cidrv4: \"IPv4-rango\",\n        cidrv6: \"IPv6-rango\",\n        base64: \"64-ume kodita karaktraro\",\n        base64url: \"URL-64-ume kodita karaktraro\",\n        json_string: \"JSON-karaktraro\",\n        e164: \"E.164-nombro\",\n        jwt: \"JWT\",\n        template_literal: \"enigo\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Nevalida enigo: atendi\u011Dis ${issue.expected}, ricevi\u011Dis ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Nevalida enigo: atendi\u011Dis ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Nevalida opcio: atendi\u011Dis unu el ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Tro granda: atendi\u011Dis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementojn\"}`;\n                return `Tro granda: atendi\u011Dis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Tro malgranda: atendi\u011Dis ke ${issue.origin} havu ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Tro malgranda: atendi\u011Dis ke ${issue.origin} estu ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Nevalida karaktraro: devas komenci\u011Di per \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Nevalida karaktraro: devas fini\u011Di per \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Nevalida karaktraro: devas inkluzivi \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`;\n                return `Nevalida ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Nevalida nombro: devas esti oblo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nekonata${issue.keys.length > 1 ? \"j\" : \"\"} \u015Dlosilo${issue.keys.length > 1 ? \"j\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Nevalida \u015Dlosilo en ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Nevalida enigo\";\n            case \"invalid_element\":\n                return `Nevalida valoro en ${issue.origin}`;\n            default:\n                return `Nevalida enigo`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caracteres\", verb: \"tener\" },\n        file: { unit: \"bytes\", verb: \"tener\" },\n        array: { unit: \"elementos\", verb: \"tener\" },\n        set: { unit: \"elementos\", verb: \"tener\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"n\u00FAmero\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"arreglo\";\n                }\n                if (data === null) {\n                    return \"nulo\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"entrada\",\n        email: \"direcci\u00F3n de correo electr\u00F3nico\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"fecha y hora ISO\",\n        date: \"fecha ISO\",\n        time: \"hora ISO\",\n        duration: \"duraci\u00F3n ISO\",\n        ipv4: \"direcci\u00F3n IPv4\",\n        ipv6: \"direcci\u00F3n IPv6\",\n        cidrv4: \"rango IPv4\",\n        cidrv6: \"rango IPv6\",\n        base64: \"cadena codificada en base64\",\n        base64url: \"URL codificada en base64\",\n        json_string: \"cadena JSON\",\n        e164: \"n\u00FAmero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Entrada inv\u00E1lida: se esperaba ${issue.expected}, recibido ${parsedType(issue.input)}`;\n            // return `Entrada inv\u00E1lida: se esperaba ${issue.expected}, recibido ${util.getParsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrada inv\u00E1lida: se esperaba ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opci\u00F3n inv\u00E1lida: se esperaba una de ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Demasiado grande: se esperaba que ${issue.origin ?? \"valor\"} tuviera ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n                return `Demasiado grande: se esperaba que ${issue.origin ?? \"valor\"} fuera ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Demasiado peque\u00F1o: se esperaba que ${issue.origin} tuviera ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Demasiado peque\u00F1o: se esperaba que ${issue.origin} fuera ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Cadena inv\u00E1lida: debe comenzar con \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Cadena inv\u00E1lida: debe terminar en \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Cadena inv\u00E1lida: debe incluir \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Cadena inv\u00E1lida: debe coincidir con el patr\u00F3n ${_issue.pattern}`;\n                return `Inv\u00E1lido ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `N\u00FAmero inv\u00E1lido: debe ser m\u00FAltiplo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Llave${issue.keys.length > 1 ? \"s\" : \"\"} desconocida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Llave inv\u00E1lida en ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada inv\u00E1lida\";\n            case \"invalid_element\":\n                return `Valor inv\u00E1lido en ${issue.origin}`;\n            default:\n                return `Entrada inv\u00E1lida`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n        file: { unit: \"\u0628\u0627\u06CC\u062A\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n        array: { unit: \"\u0622\u06CC\u062A\u0645\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n        set: { unit: \"\u0622\u06CC\u062A\u0645\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"\u0639\u062F\u062F\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"\u0622\u0631\u0627\u06CC\u0647\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u0648\u0631\u0648\u062F\u06CC\",\n        email: \"\u0622\u062F\u0631\u0633 \u0627\u06CC\u0645\u06CC\u0644\",\n        url: \"URL\",\n        emoji: \"\u0627\u06CC\u0645\u0648\u062C\u06CC\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u062A\u0627\u0631\u06CC\u062E \u0648 \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n        date: \"\u062A\u0627\u0631\u06CC\u062E \u0627\u06CC\u0632\u0648\",\n        time: \"\u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n        duration: \"\u0645\u062F\u062A \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n        ipv4: \"IPv4 \u0622\u062F\u0631\u0633\",\n        ipv6: \"IPv6 \u0622\u062F\u0631\u0633\",\n        cidrv4: \"IPv4 \u062F\u0627\u0645\u0646\u0647\",\n        cidrv6: \"IPv6 \u062F\u0627\u0645\u0646\u0647\",\n        base64: \"base64-encoded \u0631\u0634\u062A\u0647\",\n        base64url: \"base64url-encoded \u0631\u0634\u062A\u0647\",\n        json_string: \"JSON \u0631\u0634\u062A\u0647\",\n        e164: \"E.164 \u0639\u062F\u062F\",\n        jwt: \"JWT\",\n        template_literal: \"\u0648\u0631\u0648\u062F\u06CC\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${issue.expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${parsedType(issue.input)} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`;\n            case \"invalid_value\":\n                if (issue.values.length === 1) {\n                    return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${util.stringifyPrimitive(issue.values[0])} \u0645\u06CC\u200C\u0628\u0648\u062F`;\n                }\n                return `\u06AF\u0632\u06CC\u0646\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A \u06CC\u06A9\u06CC \u0627\u0632 ${util.joinValues(issue.values, \"|\")} \u0645\u06CC\u200C\u0628\u0648\u062F`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue.origin ?? \"\u0645\u0642\u062F\u0627\u0631\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\"} \u0628\u0627\u0634\u062F`;\n                }\n                return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue.origin ?? \"\u0645\u0642\u062F\u0627\u0631\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} \u0628\u0627\u0634\u062F`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} ${sizing.unit} \u0628\u0627\u0634\u062F`;\n                }\n                return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} \u0628\u0627\u0634\u062F`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \"${_issue.prefix}\" \u0634\u0631\u0648\u0639 \u0634\u0648\u062F`;\n                }\n                if (_issue.format === \"ends_with\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \"${_issue.suffix}\" \u062A\u0645\u0627\u0645 \u0634\u0648\u062F`;\n                }\n                if (_issue.format === \"includes\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0634\u0627\u0645\u0644 \"${_issue.includes}\" \u0628\u0627\u0634\u062F`;\n                }\n                if (_issue.format === \"regex\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \u0627\u0644\u06AF\u0648\u06CC ${_issue.pattern} \u0645\u0637\u0627\u0628\u0642\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F`;\n                }\n                return `${Nouns[_issue.format] ?? issue.format} \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n            }\n            case \"not_multiple_of\":\n                return `\u0639\u062F\u062F \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0645\u0636\u0631\u0628 ${issue.divisor} \u0628\u0627\u0634\u062F`;\n            case \"unrecognized_keys\":\n                return `\u06A9\u0644\u06CC\u062F${issue.keys.length > 1 ? \"\u0647\u0627\u06CC\" : \"\"} \u0646\u0627\u0634\u0646\u0627\u0633: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u06A9\u0644\u06CC\u062F \u0646\u0627\u0634\u0646\u0627\u0633 \u062F\u0631 ${issue.origin}`;\n            case \"invalid_union\":\n                return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n            case \"invalid_element\":\n                return `\u0645\u0642\u062F\u0627\u0631 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u062F\u0631 ${issue.origin}`;\n            default:\n                return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"merkki\u00E4\", subject: \"merkkijonon\" },\n        file: { unit: \"tavua\", subject: \"tiedoston\" },\n        array: { unit: \"alkiota\", subject: \"listan\" },\n        set: { unit: \"alkiota\", subject: \"joukon\" },\n        number: { unit: \"\", subject: \"luvun\" },\n        bigint: { unit: \"\", subject: \"suuren kokonaisluvun\" },\n        int: { unit: \"\", subject: \"kokonaisluvun\" },\n        date: { unit: \"\", subject: \"p\u00E4iv\u00E4m\u00E4\u00E4r\u00E4n\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"number\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"array\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"s\u00E4\u00E4nn\u00F6llinen lauseke\",\n        email: \"s\u00E4hk\u00F6postiosoite\",\n        url: \"URL-osoite\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-aikaleima\",\n        date: \"ISO-p\u00E4iv\u00E4m\u00E4\u00E4r\u00E4\",\n        time: \"ISO-aika\",\n        duration: \"ISO-kesto\",\n        ipv4: \"IPv4-osoite\",\n        ipv6: \"IPv6-osoite\",\n        cidrv4: \"IPv4-alue\",\n        cidrv6: \"IPv6-alue\",\n        base64: \"base64-koodattu merkkijono\",\n        base64url: \"base64url-koodattu merkkijono\",\n        json_string: \"JSON-merkkijono\",\n        e164: \"E.164-luku\",\n        jwt: \"JWT\",\n        template_literal: \"templaattimerkkijono\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Virheellinen tyyppi: odotettiin ${issue.expected}, oli ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy olla ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Virheellinen valinta: t\u00E4ytyy olla yksi seuraavista: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Liian suuri: ${sizing.subject} t\u00E4ytyy olla ${adj}${issue.maximum.toString()} ${sizing.unit}`.trim();\n                }\n                return `Liian suuri: arvon t\u00E4ytyy olla ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Liian pieni: ${sizing.subject} t\u00E4ytyy olla ${adj}${issue.minimum.toString()} ${sizing.unit}`.trim();\n                }\n                return `Liian pieni: arvon t\u00E4ytyy olla ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy alkaa \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy loppua \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy sis\u00E4lt\u00E4\u00E4 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\") {\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy vastata s\u00E4\u00E4nn\u00F6llist\u00E4 lauseketta ${_issue.pattern}`;\n                }\n                return `Virheellinen ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Virheellinen luku: t\u00E4ytyy olla luvun ${issue.divisor} monikerta`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Tuntemattomat avaimet\" : \"Tuntematon avain\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return \"Virheellinen avain tietueessa\";\n            case \"invalid_union\":\n                return \"Virheellinen unioni\";\n            case \"invalid_element\":\n                return \"Virheellinen arvo joukossa\";\n            default:\n                return `Virheellinen sy\u00F6te`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caract\u00E8res\", verb: \"avoir\" },\n        file: { unit: \"octets\", verb: \"avoir\" },\n        array: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n        set: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"nombre\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"tableau\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"entr\u00E9e\",\n        email: \"adresse e-mail\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"date et heure ISO\",\n        date: \"date ISO\",\n        time: \"heure ISO\",\n        duration: \"dur\u00E9e ISO\",\n        ipv4: \"adresse IPv4\",\n        ipv6: \"adresse IPv6\",\n        cidrv4: \"plage IPv4\",\n        cidrv6: \"plage IPv6\",\n        base64: \"cha\u00EEne encod\u00E9e en base64\",\n        base64url: \"cha\u00EEne encod\u00E9e en base64url\",\n        json_string: \"cha\u00EEne JSON\",\n        e164: \"num\u00E9ro E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entr\u00E9e\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Entr\u00E9e invalide : ${issue.expected} attendu, ${parsedType(issue.input)} re\u00E7u`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entr\u00E9e invalide : ${util.stringifyPrimitive(issue.values[0])} attendu`;\n                return `Option invalide : une valeur parmi ${util.joinValues(issue.values, \"|\")} attendue`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Trop grand : ${issue.origin ?? \"valeur\"} doit ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u00E9l\u00E9ment(s)\"}`;\n                return `Trop grand : ${issue.origin ?? \"valeur\"} doit \u00EAtre ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Trop petit : ${issue.origin} doit ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Trop petit : ${issue.origin} doit \u00EAtre ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Cha\u00EEne invalide : doit commencer par \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Cha\u00EEne invalide : doit se terminer par \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Cha\u00EEne invalide : doit inclure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Cha\u00EEne invalide : doit correspondre au mod\u00E8le ${_issue.pattern}`;\n                return `${Nouns[_issue.format] ?? issue.format} invalide`;\n            }\n            case \"not_multiple_of\":\n                return `Nombre invalide : doit \u00EAtre un multiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Cl\u00E9${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Cl\u00E9 invalide dans ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entr\u00E9e invalide\";\n            case \"invalid_element\":\n                return `Valeur invalide dans ${issue.origin}`;\n            default:\n                return `Entr\u00E9e invalide`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caract\u00E8res\", verb: \"avoir\" },\n        file: { unit: \"octets\", verb: \"avoir\" },\n        array: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n        set: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"number\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"array\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"entr\u00E9e\",\n        email: \"adresse courriel\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"date-heure ISO\",\n        date: \"date ISO\",\n        time: \"heure ISO\",\n        duration: \"dur\u00E9e ISO\",\n        ipv4: \"adresse IPv4\",\n        ipv6: \"adresse IPv6\",\n        cidrv4: \"plage IPv4\",\n        cidrv6: \"plage IPv6\",\n        base64: \"cha\u00EEne encod\u00E9e en base64\",\n        base64url: \"cha\u00EEne encod\u00E9e en base64url\",\n        json_string: \"cha\u00EEne JSON\",\n        e164: \"num\u00E9ro E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entr\u00E9e\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Entr\u00E9e invalide : attendu ${issue.expected}, re\u00E7u ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entr\u00E9e invalide : attendu ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Option invalide : attendu l'une des valeurs suivantes ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\u2264\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} ait ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} soit ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\u2265\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Trop petit : attendu que ${issue.origin} ait ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Trop petit : attendu que ${issue.origin} soit ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Cha\u00EEne invalide : doit commencer par \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Cha\u00EEne invalide : doit se terminer par \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Cha\u00EEne invalide : doit inclure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Cha\u00EEne invalide : doit correspondre au motif ${_issue.pattern}`;\n                return `${Nouns[_issue.format] ?? issue.format} invalide`;\n            }\n            case \"not_multiple_of\":\n                return `Nombre invalide : doit \u00EAtre un multiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Cl\u00E9${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Cl\u00E9 invalide dans ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entr\u00E9e invalide\";\n            case \"invalid_element\":\n                return `Valeur invalide dans ${issue.origin}`;\n            default:\n                return `Entr\u00E9e invalide`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u05D0\u05D5\u05EA\u05D9\u05D5\u05EA\", verb: \"\u05DC\u05DB\u05DC\u05D5\u05DC\" },\n        file: { unit: \"\u05D1\u05D9\u05D9\u05D8\u05D9\u05DD\", verb: \"\u05DC\u05DB\u05DC\u05D5\u05DC\" },\n        array: { unit: \"\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD\", verb: \"\u05DC\u05DB\u05DC\u05D5\u05DC\" },\n        set: { unit: \"\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD\", verb: \"\u05DC\u05DB\u05DC\u05D5\u05DC\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"number\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"array\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u05E7\u05DC\u05D8\",\n        email: \"\u05DB\u05EA\u05D5\u05D1\u05EA \u05D0\u05D9\u05DE\u05D9\u05D9\u05DC\",\n        url: \"\u05DB\u05EA\u05D5\u05D1\u05EA \u05E8\u05E9\u05EA\",\n        emoji: \"\u05D0\u05D9\u05DE\u05D5\u05D2'\u05D9\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u05EA\u05D0\u05E8\u05D9\u05DA \u05D5\u05D6\u05DE\u05DF ISO\",\n        date: \"\u05EA\u05D0\u05E8\u05D9\u05DA ISO\",\n        time: \"\u05D6\u05DE\u05DF ISO\",\n        duration: \"\u05DE\u05E9\u05DA \u05D6\u05DE\u05DF ISO\",\n        ipv4: \"\u05DB\u05EA\u05D5\u05D1\u05EA IPv4\",\n        ipv6: \"\u05DB\u05EA\u05D5\u05D1\u05EA IPv6\",\n        cidrv4: \"\u05D8\u05D5\u05D5\u05D7 IPv4\",\n        cidrv6: \"\u05D8\u05D5\u05D5\u05D7 IPv6\",\n        base64: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64\",\n        base64url: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64 \u05DC\u05DB\u05EA\u05D5\u05D1\u05D5\u05EA \u05E8\u05E9\u05EA\",\n        json_string: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA JSON\",\n        e164: \"\u05DE\u05E1\u05E4\u05E8 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u05E7\u05DC\u05D8\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA ${issue.expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${parsedType(issue.input)}`;\n            // return `Invalid input: expected ${issue.expected}, received ${util.getParsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05D0\u05D7\u05EA \u05DE\u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA  ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${issue.origin ?? \"value\"} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${issue.origin ?? \"value\"} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${issue.origin} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${issue.origin} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05E0\u05D4: \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1\"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05E0\u05D4: \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05E0\u05D4: \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05E0\u05D4: \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D0\u05D9\u05DD \u05DC\u05EA\u05D1\u05E0\u05D9\u05EA ${_issue.pattern}`;\n                return `${Nouns[_issue.format] ?? issue.format} \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF`;\n            }\n            case \"not_multiple_of\":\n                return `\u05DE\u05E1\u05E4\u05E8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05DB\u05E4\u05DC\u05D4 \u05E9\u05DC ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u05DE\u05E4\u05EA\u05D7${issue.keys.length > 1 ? \"\u05D5\u05EA\" : \"\"} \u05DC\u05D0 \u05DE\u05D6\u05D5\u05D4${issue.keys.length > 1 ? \"\u05D9\u05DD\" : \"\u05D4\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u05DE\u05E4\u05EA\u05D7 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF\";\n            case \"invalid_element\":\n                return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${issue.origin}`;\n            default:\n                return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"legyen\" },\n        file: { unit: \"byte\", verb: \"legyen\" },\n        array: { unit: \"elem\", verb: \"legyen\" },\n        set: { unit: \"elem\", verb: \"legyen\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"sz\u00E1m\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"t\u00F6mb\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"bemenet\",\n        email: \"email c\u00EDm\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO id\u0151b\u00E9lyeg\",\n        date: \"ISO d\u00E1tum\",\n        time: \"ISO id\u0151\",\n        duration: \"ISO id\u0151intervallum\",\n        ipv4: \"IPv4 c\u00EDm\",\n        ipv6: \"IPv6 c\u00EDm\",\n        cidrv4: \"IPv4 tartom\u00E1ny\",\n        cidrv6: \"IPv6 tartom\u00E1ny\",\n        base64: \"base64-k\u00F3dolt string\",\n        base64url: \"base64url-k\u00F3dolt string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 sz\u00E1m\",\n        jwt: \"JWT\",\n        template_literal: \"bemenet\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k ${issue.expected}, a kapott \u00E9rt\u00E9k ${parsedType(issue.input)}`;\n            // return `Invalid input: expected ${issue.expected}, received ${util.getParsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u00C9rv\u00E9nytelen opci\u00F3: valamelyik \u00E9rt\u00E9k v\u00E1rt ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `T\u00FAl nagy: ${issue.origin ?? \"\u00E9rt\u00E9k\"} m\u00E9rete t\u00FAl nagy ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elem\"}`;\n                return `T\u00FAl nagy: a bemeneti \u00E9rt\u00E9k ${issue.origin ?? \"\u00E9rt\u00E9k\"} t\u00FAl nagy: ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `T\u00FAl kicsi: a bemeneti \u00E9rt\u00E9k ${issue.origin} m\u00E9rete t\u00FAl kicsi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `T\u00FAl kicsi: a bemeneti \u00E9rt\u00E9k ${issue.origin} t\u00FAl kicsi ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u00C9rv\u00E9nytelen string: \"${_issue.prefix}\" \u00E9rt\u00E9kkel kell kezd\u0151dnie`;\n                if (_issue.format === \"ends_with\")\n                    return `\u00C9rv\u00E9nytelen string: \"${_issue.suffix}\" \u00E9rt\u00E9kkel kell v\u00E9gz\u0151dnie`;\n                if (_issue.format === \"includes\")\n                    return `\u00C9rv\u00E9nytelen string: \"${_issue.includes}\" \u00E9rt\u00E9ket kell tartalmaznia`;\n                if (_issue.format === \"regex\")\n                    return `\u00C9rv\u00E9nytelen string: ${_issue.pattern} mint\u00E1nak kell megfelelnie`;\n                return `\u00C9rv\u00E9nytelen ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u00C9rv\u00E9nytelen sz\u00E1m: ${issue.divisor} t\u00F6bbsz\u00F6r\u00F6s\u00E9nek kell lennie`;\n            case \"unrecognized_keys\":\n                return `Ismeretlen kulcs${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u00C9rv\u00E9nytelen kulcs ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u00C9rv\u00E9nytelen bemenet\";\n            case \"invalid_element\":\n                return `\u00C9rv\u00E9nytelen \u00E9rt\u00E9k: ${issue.origin}`;\n            default:\n                return `\u00C9rv\u00E9nytelen bemenet`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"memiliki\" },\n        file: { unit: \"byte\", verb: \"memiliki\" },\n        array: { unit: \"item\", verb: \"memiliki\" },\n        set: { unit: \"item\", verb: \"memiliki\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"number\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"array\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"input\",\n        email: \"alamat email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"tanggal dan waktu format ISO\",\n        date: \"tanggal format ISO\",\n        time: \"jam format ISO\",\n        duration: \"durasi format ISO\",\n        ipv4: \"alamat IPv4\",\n        ipv6: \"alamat IPv6\",\n        cidrv4: \"rentang alamat IPv4\",\n        cidrv6: \"rentang alamat IPv6\",\n        base64: \"string dengan enkode base64\",\n        base64url: \"string dengan enkode base64url\",\n        json_string: \"string JSON\",\n        e164: \"angka E.164\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Input tidak valid: diharapkan ${issue.expected}, diterima ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input tidak valid: diharapkan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Pilihan tidak valid: diharapkan salah satu dari ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} memiliki ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n                return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} menjadi ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Terlalu kecil: diharapkan ${issue.origin} memiliki ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Terlalu kecil: diharapkan ${issue.origin} menjadi ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `String tidak valid: harus dimulai dengan \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `String tidak valid: harus berakhir dengan \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `String tidak valid: harus menyertakan \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `String tidak valid: harus sesuai pola ${_issue.pattern}`;\n                return `${Nouns[_issue.format] ?? issue.format} tidak valid`;\n            }\n            case \"not_multiple_of\":\n                return `Angka tidak valid: harus kelipatan dari ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kunci tidak dikenali ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kunci tidak valid di ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input tidak valid\";\n            case \"invalid_element\":\n                return `Nilai tidak valid di ${issue.origin}`;\n            default:\n                return `Input tidak valid`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caratteri\", verb: \"avere\" },\n        file: { unit: \"byte\", verb: \"avere\" },\n        array: { unit: \"elementi\", verb: \"avere\" },\n        set: { unit: \"elementi\", verb: \"avere\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"numero\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"vettore\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"input\",\n        email: \"indirizzo email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data e ora ISO\",\n        date: \"data ISO\",\n        time: \"ora ISO\",\n        duration: \"durata ISO\",\n        ipv4: \"indirizzo IPv4\",\n        ipv6: \"indirizzo IPv6\",\n        cidrv4: \"intervallo IPv4\",\n        cidrv6: \"intervallo IPv6\",\n        base64: \"stringa codificata in base64\",\n        base64url: \"URL codificata in base64\",\n        json_string: \"stringa JSON\",\n        e164: \"numero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Input non valido: atteso ${issue.expected}, ricevuto ${parsedType(issue.input)}`;\n            // return `Input non valido: atteso ${issue.expected}, ricevuto ${util.getParsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input non valido: atteso ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opzione non valida: atteso uno tra ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Troppo grande: ${issue.origin ?? \"valore\"} deve avere ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementi\"}`;\n                return `Troppo grande: ${issue.origin ?? \"valore\"} deve essere ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Troppo piccolo: ${issue.origin} deve avere ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Troppo piccolo: ${issue.origin} deve essere ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Stringa non valida: deve iniziare con \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Stringa non valida: deve terminare con \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Stringa non valida: deve includere \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`;\n                return `Invalid ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Numero non valido: deve essere un multiplo di ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Chiav${issue.keys.length > 1 ? \"i\" : \"e\"} non riconosciut${issue.keys.length > 1 ? \"e\" : \"a\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Chiave non valida in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input non valido\";\n            case \"invalid_element\":\n                return `Valore non valido in ${issue.origin}`;\n            default:\n                return `Input non valido`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u6587\u5B57\", verb: \"\u3067\u3042\u308B\" },\n        file: { unit: \"\u30D0\u30A4\u30C8\", verb: \"\u3067\u3042\u308B\" },\n        array: { unit: \"\u8981\u7D20\", verb: \"\u3067\u3042\u308B\" },\n        set: { unit: \"\u8981\u7D20\", verb: \"\u3067\u3042\u308B\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"\u6570\u5024\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"\u914D\u5217\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u5165\u529B\u5024\",\n        email: \"\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\",\n        url: \"URL\",\n        emoji: \"\u7D75\u6587\u5B57\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO\u65E5\u6642\",\n        date: \"ISO\u65E5\u4ED8\",\n        time: \"ISO\u6642\u523B\",\n        duration: \"ISO\u671F\u9593\",\n        ipv4: \"IPv4\u30A2\u30C9\u30EC\u30B9\",\n        ipv6: \"IPv6\u30A2\u30C9\u30EC\u30B9\",\n        cidrv4: \"IPv4\u7BC4\u56F2\",\n        cidrv6: \"IPv6\u7BC4\u56F2\",\n        base64: \"base64\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217\",\n        base64url: \"base64url\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217\",\n        json_string: \"JSON\u6587\u5B57\u5217\",\n        e164: \"E.164\u756A\u53F7\",\n        jwt: \"JWT\",\n        template_literal: \"\u5165\u529B\u5024\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u7121\u52B9\u306A\u5165\u529B: ${issue.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${parsedType(issue.input)}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u7121\u52B9\u306A\u5165\u529B: ${util.stringifyPrimitive(issue.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`;\n                return `\u7121\u52B9\u306A\u9078\u629E: ${util.joinValues(issue.values, \"\u3001\")}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\u4EE5\u4E0B\u3067\u3042\u308B\" : \"\u3088\u308A\u5C0F\u3055\u3044\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue.origin ?? \"\u5024\"}\u306F${issue.maximum.toString()}${sizing.unit ?? \"\u8981\u7D20\"}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue.origin ?? \"\u5024\"}\u306F${issue.maximum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\u4EE5\u4E0A\u3067\u3042\u308B\" : \"\u3088\u308A\u5927\u304D\u3044\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue.origin}\u306F${issue.minimum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue.origin}\u306F${issue.minimum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.prefix}\"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                if (_issue.format === \"ends_with\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.suffix}\"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                if (_issue.format === \"includes\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.includes}\"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                if (_issue.format === \"regex\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${_issue.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                return `\u7121\u52B9\u306A${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u7121\u52B9\u306A\u6570\u5024: ${issue.divisor}\u306E\u500D\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            case \"unrecognized_keys\":\n                return `\u8A8D\u8B58\u3055\u308C\u3066\u3044\u306A\u3044\u30AD\u30FC${issue.keys.length > 1 ? \"\u7FA4\" : \"\"}: ${util.joinValues(issue.keys, \"\u3001\")}`;\n            case \"invalid_key\":\n                return `${issue.origin}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`;\n            case \"invalid_union\":\n                return \"\u7121\u52B9\u306A\u5165\u529B\";\n            case \"invalid_element\":\n                return `${issue.origin}\u5185\u306E\u7121\u52B9\u306A\u5024`;\n            default:\n                return `\u7121\u52B9\u306A\u5165\u529B`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n        file: { unit: \"\u1794\u17C3\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n        array: { unit: \"\u1792\u17B6\u178F\u17BB\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n        set: { unit: \"\u1792\u17B6\u178F\u17BB\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"\u1798\u17B7\u1793\u1798\u17C2\u1793\u1787\u17B6\u179B\u17C1\u1781 (NaN)\" : \"\u179B\u17C1\u1781\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"\u17A2\u17B6\u179A\u17C1 (Array)\";\n                }\n                if (data === null) {\n                    return \"\u1782\u17D2\u1798\u17B6\u1793\u178F\u1798\u17D2\u179B\u17C3 (null)\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\",\n        email: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793\u17A2\u17CA\u17B8\u1798\u17C2\u179B\",\n        url: \"URL\",\n        emoji: \"\u179F\u1789\u17D2\u1789\u17B6\u17A2\u17B6\u179A\u1798\u17D2\u1798\u178E\u17CD\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 \u1793\u17B7\u1784\u1798\u17C9\u17C4\u1784 ISO\",\n        date: \"\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 ISO\",\n        time: \"\u1798\u17C9\u17C4\u1784 ISO\",\n        duration: \"\u179A\u1799\u17C8\u1796\u17C1\u179B ISO\",\n        ipv4: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4\",\n        ipv6: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6\",\n        cidrv4: \"\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4\",\n        cidrv6: \"\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6\",\n        base64: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64\",\n        base64url: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64url\",\n        json_string: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A JSON\",\n        e164: \"\u179B\u17C1\u1781 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u1787\u1798\u17D2\u179A\u17BE\u179F\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1787\u17B6\u1798\u17BD\u1799\u1780\u17D2\u1793\u17BB\u1784\u1785\u17C6\u178E\u17C4\u1798 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin ?? \"\u178F\u1798\u17D2\u179B\u17C3\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u1792\u17B6\u178F\u17BB\"}`;\n                return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin ?? \"\u178F\u1798\u17D2\u179B\u17C3\"} ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin} ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1785\u17B6\u1794\u17CB\u1795\u17D2\u178F\u17BE\u1798\u178A\u17C4\u1799 \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1794\u1789\u17D2\u1785\u1794\u17CB\u178A\u17C4\u1799 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1798\u17B6\u1793 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1795\u17D2\u1782\u17BC\u1795\u17D2\u1782\u1784\u1793\u17B9\u1784\u1791\u1798\u17D2\u179A\u1784\u17CB\u178A\u17C2\u179B\u1794\u17B6\u1793\u1780\u17C6\u178E\u178F\u17CB ${_issue.pattern}`;\n                return `\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u179B\u17C1\u1781\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1787\u17B6\u1796\u17A0\u17BB\u1782\u17BB\u178E\u1793\u17C3 ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u179A\u1780\u1783\u17BE\u1789\u179F\u17C4\u1798\u17B7\u1793\u179F\u17D2\u1782\u17B6\u179B\u17CB\u17D6 ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u179F\u17C4\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue.origin}`;\n            case \"invalid_union\":\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;\n            case \"invalid_element\":\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue.origin}`;\n            default:\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\uBB38\uC790\", verb: \"to have\" },\n        file: { unit: \"\uBC14\uC774\uD2B8\", verb: \"to have\" },\n        array: { unit: \"\uAC1C\", verb: \"to have\" },\n        set: { unit: \"\uAC1C\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"number\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"array\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\uC785\uB825\",\n        email: \"\uC774\uBA54\uC77C \uC8FC\uC18C\",\n        url: \"URL\",\n        emoji: \"\uC774\uBAA8\uC9C0\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \uB0A0\uC9DC\uC2DC\uAC04\",\n        date: \"ISO \uB0A0\uC9DC\",\n        time: \"ISO \uC2DC\uAC04\",\n        duration: \"ISO \uAE30\uAC04\",\n        ipv4: \"IPv4 \uC8FC\uC18C\",\n        ipv6: \"IPv6 \uC8FC\uC18C\",\n        cidrv4: \"IPv4 \uBC94\uC704\",\n        cidrv6: \"IPv6 \uBC94\uC704\",\n        base64: \"base64 \uC778\uCF54\uB529 \uBB38\uC790\uC5F4\",\n        base64url: \"base64url \uC778\uCF54\uB529 \uBB38\uC790\uC5F4\",\n        json_string: \"JSON \uBB38\uC790\uC5F4\",\n        e164: \"E.164 \uBC88\uD638\",\n        jwt: \"JWT\",\n        template_literal: \"\uC785\uB825\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 ${issue.expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${parsedType(issue.input)}\uC785\uB2C8\uB2E4`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\uC798\uBABB\uB41C \uC785\uB825: \uAC12\uC740 ${util.stringifyPrimitive(issue.values[0])} \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`;\n                return `\uC798\uBABB\uB41C \uC635\uC158: ${util.joinValues(issue.values, \"\uB610\uB294 \")} \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\uC774\uD558\" : \"\uBBF8\uB9CC\";\n                const suffix = adj === \"\uBBF8\uB9CC\" ? \"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4\" : \"\uC5EC\uC57C \uD569\uB2C8\uB2E4\";\n                const sizing = getSizing(issue.origin);\n                const unit = sizing?.unit ?? \"\uC694\uC18C\";\n                if (sizing)\n                    return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue.maximum.toString()}${unit} ${adj}${suffix}`;\n                return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue.maximum.toString()} ${adj}${suffix}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\uC774\uC0C1\" : \"\uCD08\uACFC\";\n                const suffix = adj === \"\uC774\uC0C1\" ? \"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4\" : \"\uC5EC\uC57C \uD569\uB2C8\uB2E4\";\n                const sizing = getSizing(issue.origin);\n                const unit = sizing?.unit ?? \"\uC694\uC18C\";\n                if (sizing) {\n                    return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue.minimum.toString()}${unit} ${adj}${suffix}`;\n                }\n                return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue.minimum.toString()} ${adj}${suffix}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.prefix}\"(\uC73C)\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.suffix}\"(\uC73C)\uB85C \uB05D\uB098\uC57C \uD569\uB2C8\uB2E4`;\n                if (_issue.format === \"includes\")\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.includes}\"\uC744(\uB97C) \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4`;\n                if (_issue.format === \"regex\")\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \uC815\uADDC\uC2DD ${_issue.pattern} \uD328\uD134\uACFC \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4`;\n                return `\uC798\uBABB\uB41C ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\uC798\uBABB\uB41C \uC22B\uC790: ${issue.divisor}\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4`;\n            case \"unrecognized_keys\":\n                return `\uC778\uC2DD\uD560 \uC218 \uC5C6\uB294 \uD0A4: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\uC798\uBABB\uB41C \uD0A4: ${issue.origin}`;\n            case \"invalid_union\":\n                return `\uC798\uBABB\uB41C \uC785\uB825`;\n            case \"invalid_element\":\n                return `\uC798\uBABB\uB41C \uAC12: ${issue.origin}`;\n            default:\n                return `\uC798\uBABB\uB41C \uC785\uB825`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0437\u043D\u0430\u0446\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n        file: { unit: \"\u0431\u0430\u0458\u0442\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n        array: { unit: \"\u0441\u0442\u0430\u0432\u043A\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n        set: { unit: \"\u0441\u0442\u0430\u0432\u043A\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"\u0431\u0440\u043E\u0458\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"\u043D\u0438\u0437\u0430\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u0432\u043D\u0435\u0441\",\n        email: \"\u0430\u0434\u0440\u0435\u0441\u0430 \u043D\u0430 \u0435-\u043F\u043E\u0448\u0442\u0430\",\n        url: \"URL\",\n        emoji: \"\u0435\u043C\u043E\u045F\u0438\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0434\u0430\u0442\u0443\u043C \u0438 \u0432\u0440\u0435\u043C\u0435\",\n        date: \"ISO \u0434\u0430\u0442\u0443\u043C\",\n        time: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n        duration: \"ISO \u0432\u0440\u0435\u043C\u0435\u0442\u0440\u0430\u0435\u045A\u0435\",\n        ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\u0430\",\n        ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\u0430\",\n        cidrv4: \"IPv4 \u043E\u043F\u0441\u0435\u0433\",\n        cidrv6: \"IPv6 \u043E\u043F\u0441\u0435\u0433\",\n        base64: \"base64-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430\",\n        base64url: \"base64url-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430\",\n        json_string: \"JSON \u043D\u0438\u0437\u0430\",\n        e164: \"E.164 \u0431\u0440\u043E\u0458\",\n        jwt: \"JWT\",\n        template_literal: \"\u0432\u043D\u0435\u0441\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${parsedType(issue.input)}`;\n            // return `Invalid input: expected ${issue.expected}, received ${util.getParsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0413\u0440\u0435\u0448\u0430\u043D\u0430 \u043E\u043F\u0446\u0438\u0458\u0430: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 \u0435\u0434\u043D\u0430 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin ?? \"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430\"} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0438\"}`;\n                return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin ?? \"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430\"} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u043D\u0443\u0432\u0430 \u0441\u043E \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u0432\u0440\u0448\u0443\u0432\u0430 \u0441\u043E \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0432\u043A\u043B\u0443\u0447\u0443\u0432\u0430 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u043E\u0434\u0433\u043E\u0430\u0440\u0430 \u043D\u0430 \u043F\u0430\u0442\u0435\u0440\u043D\u043E\u0442 ${_issue.pattern}`;\n                return `Invalid ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u0431\u0440\u043E\u0458: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0434\u0435\u043B\u0438\u0432 \u0441\u043E ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D\u0438 \u043A\u043B\u0443\u0447\u0435\u0432\u0438\" : \"\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D \u043A\u043B\u0443\u0447\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u043A\u043B\u0443\u0447 \u0432\u043E ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441\";\n            case \"invalid_element\":\n                return `\u0413\u0440\u0435\u0448\u043D\u0430 \u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442 \u0432\u043E ${issue.origin}`;\n            default:\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"aksara\", verb: \"mempunyai\" },\n        file: { unit: \"bait\", verb: \"mempunyai\" },\n        array: { unit: \"elemen\", verb: \"mempunyai\" },\n        set: { unit: \"elemen\", verb: \"mempunyai\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"nombor\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"array\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"input\",\n        email: \"alamat e-mel\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"tarikh masa ISO\",\n        date: \"tarikh ISO\",\n        time: \"masa ISO\",\n        duration: \"tempoh ISO\",\n        ipv4: \"alamat IPv4\",\n        ipv6: \"alamat IPv6\",\n        cidrv4: \"julat IPv4\",\n        cidrv6: \"julat IPv6\",\n        base64: \"string dikodkan base64\",\n        base64url: \"string dikodkan base64url\",\n        json_string: \"string JSON\",\n        e164: \"nombor E.164\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Input tidak sah: dijangka ${issue.expected}, diterima ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input tidak sah: dijangka ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Pilihan tidak sah: dijangka salah satu daripada ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n                return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} adalah ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Terlalu kecil: dijangka ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Terlalu kecil: dijangka ${issue.origin} adalah ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `String tidak sah: mesti bermula dengan \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `String tidak sah: mesti berakhir dengan \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `String tidak sah: mesti mengandungi \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `String tidak sah: mesti sepadan dengan corak ${_issue.pattern}`;\n                return `${Nouns[_issue.format] ?? issue.format} tidak sah`;\n            }\n            case \"not_multiple_of\":\n                return `Nombor tidak sah: perlu gandaan ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kunci tidak dikenali: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kunci tidak sah dalam ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input tidak sah\";\n            case \"invalid_element\":\n                return `Nilai tidak sah dalam ${issue.origin}`;\n            default:\n                return `Input tidak sah`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tekens\" },\n        file: { unit: \"bytes\" },\n        array: { unit: \"elementen\" },\n        set: { unit: \"elementen\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"getal\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"array\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"invoer\",\n        email: \"emailadres\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datum en tijd\",\n        date: \"ISO datum\",\n        time: \"ISO tijd\",\n        duration: \"ISO duur\",\n        ipv4: \"IPv4-adres\",\n        ipv6: \"IPv6-adres\",\n        cidrv4: \"IPv4-bereik\",\n        cidrv6: \"IPv6-bereik\",\n        base64: \"base64-gecodeerde tekst\",\n        base64url: \"base64 URL-gecodeerde tekst\",\n        json_string: \"JSON string\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"invoer\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Ongeldige invoer: verwacht ${issue.expected}, ontving ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ongeldige invoer: verwacht ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ongeldige optie: verwacht \u00E9\u00E9n van ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Te lang: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementen\"} bevat`;\n                return `Te lang: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} is`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Te kort: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} bevat`;\n                }\n                return `Te kort: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} is`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Ongeldige tekst: moet met \"${_issue.prefix}\" beginnen`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Ongeldige tekst: moet op \"${_issue.suffix}\" eindigen`;\n                if (_issue.format === \"includes\")\n                    return `Ongeldige tekst: moet \"${_issue.includes}\" bevatten`;\n                if (_issue.format === \"regex\")\n                    return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`;\n                return `Ongeldig: ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ongeldig getal: moet een veelvoud van ${issue.divisor} zijn`;\n            case \"unrecognized_keys\":\n                return `Onbekende key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ongeldige key in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ongeldige invoer\";\n            case \"invalid_element\":\n                return `Ongeldige waarde in ${issue.origin}`;\n            default:\n                return `Ongeldige invoer`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tegn\", verb: \"\u00E5 ha\" },\n        file: { unit: \"bytes\", verb: \"\u00E5 ha\" },\n        array: { unit: \"elementer\", verb: \"\u00E5 inneholde\" },\n        set: { unit: \"elementer\", verb: \"\u00E5 inneholde\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"tall\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"liste\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"input\",\n        email: \"e-postadresse\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dato- og klokkeslett\",\n        date: \"ISO-dato\",\n        time: \"ISO-klokkeslett\",\n        duration: \"ISO-varighet\",\n        ipv4: \"IPv4-omr\u00E5de\",\n        ipv6: \"IPv6-omr\u00E5de\",\n        cidrv4: \"IPv4-spekter\",\n        cidrv6: \"IPv6-spekter\",\n        base64: \"base64-enkodet streng\",\n        base64url: \"base64url-enkodet streng\",\n        json_string: \"JSON-streng\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Ugyldig input: forventet ${issue.expected}, fikk ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ugyldig verdi: forventet ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ugyldig valg: forventet en av ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `For stor(t): forventet ${issue.origin ?? \"value\"} til \u00E5 ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n                return `For stor(t): forventet ${issue.origin ?? \"value\"} til \u00E5 ha ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `For lite(n): forventet ${issue.origin} til \u00E5 ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `For lite(n): forventet ${issue.origin} til \u00E5 ha ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ugyldig streng: m\u00E5 starte med \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Ugyldig streng: m\u00E5 ende med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ugyldig streng: m\u00E5 inneholde \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ugyldig streng: m\u00E5 matche m\u00F8nsteret ${_issue.pattern}`;\n                return `Ugyldig ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ugyldig tall: m\u00E5 v\u00E6re et multiplum av ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ukjente n\u00F8kler\" : \"Ukjent n\u00F8kkel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ugyldig n\u00F8kkel i ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ugyldig input\";\n            case \"invalid_element\":\n                return `Ugyldig verdi i ${issue.origin}`;\n            default:\n                return `Ugyldig input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"harf\", verb: \"olmal\u0131d\u0131r\" },\n        file: { unit: \"bayt\", verb: \"olmal\u0131d\u0131r\" },\n        array: { unit: \"unsur\", verb: \"olmal\u0131d\u0131r\" },\n        set: { unit: \"unsur\", verb: \"olmal\u0131d\u0131r\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"numara\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"saf\";\n                }\n                if (data === null) {\n                    return \"gayb\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"giren\",\n        email: \"epostag\u00E2h\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO heng\u00E2m\u0131\",\n        date: \"ISO tarihi\",\n        time: \"ISO zaman\u0131\",\n        duration: \"ISO m\u00FCddeti\",\n        ipv4: \"IPv4 ni\u015F\u00E2n\u0131\",\n        ipv6: \"IPv6 ni\u015F\u00E2n\u0131\",\n        cidrv4: \"IPv4 menzili\",\n        cidrv6: \"IPv6 menzili\",\n        base64: \"base64-\u015Fifreli metin\",\n        base64url: \"base64url-\u015Fifreli metin\",\n        json_string: \"JSON metin\",\n        e164: \"E.164 say\u0131s\u0131\",\n        jwt: \"JWT\",\n        template_literal: \"giren\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `F\u00E2sit giren: umulan ${issue.expected}, al\u0131nan ${parsedType(issue.input)}`;\n            // return `F\u00E2sit giren: umulan ${issue.expected}, al\u0131nan ${util.getParsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `F\u00E2sit giren: umulan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `F\u00E2sit tercih: m\u00FBteberler ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Fazla b\u00FCy\u00FCk: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"} sahip olmal\u0131yd\u0131.`;\n                return `Fazla b\u00FCy\u00FCk: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} olmal\u0131yd\u0131.`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Fazla k\u00FC\u00E7\u00FCk: ${issue.origin}, ${adj}${issue.minimum.toString()} ${sizing.unit} sahip olmal\u0131yd\u0131.`;\n                }\n                return `Fazla k\u00FC\u00E7\u00FCk: ${issue.origin}, ${adj}${issue.minimum.toString()} olmal\u0131yd\u0131.`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `F\u00E2sit metin: \"${_issue.prefix}\" ile ba\u015Flamal\u0131.`;\n                if (_issue.format === \"ends_with\")\n                    return `F\u00E2sit metin: \"${_issue.suffix}\" ile bitmeli.`;\n                if (_issue.format === \"includes\")\n                    return `F\u00E2sit metin: \"${_issue.includes}\" ihtiv\u00E2 etmeli.`;\n                if (_issue.format === \"regex\")\n                    return `F\u00E2sit metin: ${_issue.pattern} nak\u015F\u0131na uymal\u0131.`;\n                return `F\u00E2sit ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `F\u00E2sit say\u0131: ${issue.divisor} kat\u0131 olmal\u0131yd\u0131.`;\n            case \"unrecognized_keys\":\n                return `Tan\u0131nmayan anahtar ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} i\u00E7in tan\u0131nmayan anahtar var.`;\n            case \"invalid_union\":\n                return \"Giren tan\u0131namad\u0131.\";\n            case \"invalid_element\":\n                return `${issue.origin} i\u00E7in tan\u0131nmayan k\u0131ymet var.`;\n            default:\n                return `K\u0131ymet tan\u0131namad\u0131.`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n        file: { unit: \"\u0628\u0627\u06CC\u067C\u0633\", verb: \"\u0648\u0644\u0631\u064A\" },\n        array: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n        set: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"\u0639\u062F\u062F\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"\u0627\u0631\u06D0\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u0648\u0631\u0648\u062F\u064A\",\n        email: \"\u0628\u0631\u06CC\u069A\u0646\u0627\u0644\u06CC\u06A9\",\n        url: \"\u06CC\u0648 \u0622\u0631 \u0627\u0644\",\n        emoji: \"\u0627\u06CC\u0645\u0648\u062C\u064A\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u0646\u06CC\u067C\u0647 \u0627\u0648 \u0648\u062E\u062A\",\n        date: \"\u0646\u06D0\u067C\u0647\",\n        time: \"\u0648\u062E\u062A\",\n        duration: \"\u0645\u0648\u062F\u0647\",\n        ipv4: \"\u062F IPv4 \u067E\u062A\u0647\",\n        ipv6: \"\u062F IPv6 \u067E\u062A\u0647\",\n        cidrv4: \"\u062F IPv4 \u0633\u0627\u062D\u0647\",\n        cidrv6: \"\u062F IPv6 \u0633\u0627\u062D\u0647\",\n        base64: \"base64-encoded \u0645\u062A\u0646\",\n        base64url: \"base64url-encoded \u0645\u062A\u0646\",\n        json_string: \"JSON \u0645\u062A\u0646\",\n        e164: \"\u062F E.164 \u0634\u0645\u06D0\u0631\u0647\",\n        jwt: \"JWT\",\n        template_literal: \"\u0648\u0631\u0648\u062F\u064A\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${issue.expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${parsedType(issue.input)} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;\n            case \"invalid_value\":\n                if (issue.values.length === 1) {\n                    return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${util.stringifyPrimitive(issue.values[0])} \u0648\u0627\u06CC`;\n                }\n                return `\u0646\u0627\u0633\u0645 \u0627\u0646\u062A\u062E\u0627\u0628: \u0628\u0627\u06CC\u062F \u06CC\u0648 \u0644\u0647 ${util.joinValues(issue.values, \"|\")} \u0685\u062E\u0647 \u0648\u0627\u06CC`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue.origin ?? \"\u0627\u0631\u0632\u069A\u062A\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\u0648\u0646\u0647\"} \u0648\u0644\u0631\u064A`;\n                }\n                return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue.origin ?? \"\u0627\u0631\u0632\u069A\u062A\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} \u0648\u064A`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} ${sizing.unit} \u0648\u0644\u0631\u064A`;\n                }\n                return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} \u0648\u064A`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F \"${_issue.prefix}\" \u0633\u0631\u0647 \u067E\u06CC\u0644 \u0634\u064A`;\n                }\n                if (_issue.format === \"ends_with\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F \"${_issue.suffix}\" \u0633\u0631\u0647 \u067E\u0627\u06CC \u062A\u0647 \u0648\u0631\u0633\u064A\u0696\u064A`;\n                }\n                if (_issue.format === \"includes\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \"${_issue.includes}\" \u0648\u0644\u0631\u064A`;\n                }\n                if (_issue.format === \"regex\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F ${_issue.pattern} \u0633\u0631\u0647 \u0645\u0637\u0627\u0628\u0642\u062A \u0648\u0644\u0631\u064A`;\n                }\n                return `${Nouns[_issue.format] ?? issue.format} \u0646\u0627\u0633\u0645 \u062F\u06CC`;\n            }\n            case \"not_multiple_of\":\n                return `\u0646\u0627\u0633\u0645 \u0639\u062F\u062F: \u0628\u0627\u06CC\u062F \u062F ${issue.divisor} \u0645\u0636\u0631\u0628 \u0648\u064A`;\n            case \"unrecognized_keys\":\n                return `\u0646\u0627\u0633\u0645 ${issue.keys.length > 1 ? \"\u06A9\u0644\u06CC\u0689\u0648\u0646\u0647\" : \"\u06A9\u0644\u06CC\u0689\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u0646\u0627\u0633\u0645 \u06A9\u0644\u06CC\u0689 \u067E\u0647 ${issue.origin} \u06A9\u06D0`;\n            case \"invalid_union\":\n                return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;\n            case \"invalid_element\":\n                return `\u0646\u0627\u0633\u0645 \u0639\u0646\u0635\u0631 \u067E\u0647 ${issue.origin} \u06A9\u06D0`;\n            default:\n                return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znak\u00F3w\", verb: \"mie\u0107\" },\n        file: { unit: \"bajt\u00F3w\", verb: \"mie\u0107\" },\n        array: { unit: \"element\u00F3w\", verb: \"mie\u0107\" },\n        set: { unit: \"element\u00F3w\", verb: \"mie\u0107\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"liczba\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"tablica\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"wyra\u017Cenie\",\n        email: \"adres email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data i godzina w formacie ISO\",\n        date: \"data w formacie ISO\",\n        time: \"godzina w formacie ISO\",\n        duration: \"czas trwania ISO\",\n        ipv4: \"adres IPv4\",\n        ipv6: \"adres IPv6\",\n        cidrv4: \"zakres IPv4\",\n        cidrv6: \"zakres IPv6\",\n        base64: \"ci\u0105g znak\u00F3w zakodowany w formacie base64\",\n        base64url: \"ci\u0105g znak\u00F3w zakodowany w formacie base64url\",\n        json_string: \"ci\u0105g znak\u00F3w w formacie JSON\",\n        e164: \"liczba E.164\",\n        jwt: \"JWT\",\n        template_literal: \"wej\u015Bcie\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${issue.expected}, otrzymano ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Nieprawid\u0142owa opcja: oczekiwano jednej z warto\u015Bci ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Za du\u017Ca warto\u015B\u0107: oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie mie\u0107 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\u00F3w\"}`;\n                }\n                return `Zbyt du\u017C(y/a/e): oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie wynosi\u0107 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Za ma\u0142a warto\u015B\u0107: oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie mie\u0107 ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"element\u00F3w\"}`;\n                }\n                return `Zbyt ma\u0142(y/a/e): oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie wynosi\u0107 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi zaczyna\u0107 si\u0119 od \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi ko\u0144czy\u0107 si\u0119 na \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi zawiera\u0107 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi odpowiada\u0107 wzorcowi ${_issue.pattern}`;\n                return `Nieprawid\u0142ow(y/a/e) ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Nieprawid\u0142owa liczba: musi by\u0107 wielokrotno\u015Bci\u0105 ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nierozpoznane klucze${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Nieprawid\u0142owy klucz w ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Nieprawid\u0142owe dane wej\u015Bciowe\";\n            case \"invalid_element\":\n                return `Nieprawid\u0142owa warto\u015B\u0107 w ${issue.origin}`;\n            default:\n                return `Nieprawid\u0142owe dane wej\u015Bciowe`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caracteres\", verb: \"ter\" },\n        file: { unit: \"bytes\", verb: \"ter\" },\n        array: { unit: \"itens\", verb: \"ter\" },\n        set: { unit: \"itens\", verb: \"ter\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"n\u00FAmero\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"array\";\n                }\n                if (data === null) {\n                    return \"nulo\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"padr\u00E3o\",\n        email: \"endere\u00E7o de e-mail\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data e hora ISO\",\n        date: \"data ISO\",\n        time: \"hora ISO\",\n        duration: \"dura\u00E7\u00E3o ISO\",\n        ipv4: \"endere\u00E7o IPv4\",\n        ipv6: \"endere\u00E7o IPv6\",\n        cidrv4: \"faixa de IPv4\",\n        cidrv6: \"faixa de IPv6\",\n        base64: \"texto codificado em base64\",\n        base64url: \"URL codificada em base64\",\n        json_string: \"texto JSON\",\n        e164: \"n\u00FAmero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Tipo inv\u00E1lido: esperado ${issue.expected}, recebido ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrada inv\u00E1lida: esperado ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Op\u00E7\u00E3o inv\u00E1lida: esperada uma das ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Muito grande: esperado que ${issue.origin ?? \"valor\"} tivesse ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n                return `Muito grande: esperado que ${issue.origin ?? \"valor\"} fosse ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Muito pequeno: esperado que ${issue.origin} tivesse ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Muito pequeno: esperado que ${issue.origin} fosse ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Texto inv\u00E1lido: deve come\u00E7ar com \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Texto inv\u00E1lido: deve terminar com \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Texto inv\u00E1lido: deve incluir \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Texto inv\u00E1lido: deve corresponder ao padr\u00E3o ${_issue.pattern}`;\n                return `${Nouns[_issue.format] ?? issue.format} inv\u00E1lido`;\n            }\n            case \"not_multiple_of\":\n                return `N\u00FAmero inv\u00E1lido: deve ser m\u00FAltiplo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Chave${issue.keys.length > 1 ? \"s\" : \"\"} desconhecida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Chave inv\u00E1lida em ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada inv\u00E1lida\";\n            case \"invalid_element\":\n                return `Valor inv\u00E1lido em ${issue.origin}`;\n            default:\n                return `Campo inv\u00E1lido`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nfunction getRussianPlural(count, one, few, many) {\n    const absCount = Math.abs(count);\n    const lastDigit = absCount % 10;\n    const lastTwoDigits = absCount % 100;\n    if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n        return many;\n    }\n    if (lastDigit === 1) {\n        return one;\n    }\n    if (lastDigit >= 2 && lastDigit <= 4) {\n        return few;\n    }\n    return many;\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"\u0441\u0438\u043C\u0432\u043E\u043B\",\n                few: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0430\",\n                many: \"\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n        file: {\n            unit: {\n                one: \"\u0431\u0430\u0439\u0442\",\n                few: \"\u0431\u0430\u0439\u0442\u0430\",\n                many: \"\u0431\u0430\u0439\u0442\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n        array: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n        set: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"\u0447\u0438\u0441\u043B\u043E\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"\u043C\u0430\u0441\u0441\u0438\u0432\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u0432\u0432\u043E\u0434\",\n        email: \"email \u0430\u0434\u0440\u0435\u0441\",\n        url: \"URL\",\n        emoji: \"\u044D\u043C\u043E\u0434\u0437\u0438\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F\",\n        date: \"ISO \u0434\u0430\u0442\u0430\",\n        time: \"ISO \u0432\u0440\u0435\u043C\u044F\",\n        duration: \"ISO \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C\",\n        ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\",\n        ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\",\n        cidrv4: \"IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n        cidrv6: \"IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n        base64: \"\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64\",\n        base64url: \"\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64url\",\n        json_string: \"JSON \u0441\u0442\u0440\u043E\u043A\u0430\",\n        e164: \"\u043D\u043E\u043C\u0435\u0440 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0432\u0432\u043E\u0434\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${issue.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0434\u043D\u043E \u0438\u0437 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441 \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E: \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u041D\u0435\u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u043D${issue.keys.length > 1 ? \"\u044B\u0435\" : \"\u044B\u0439\"} \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u0438\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u0432 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435\";\n            case \"invalid_element\":\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 ${issue.origin}`;\n            default:\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znakov\", verb: \"imeti\" },\n        file: { unit: \"bajtov\", verb: \"imeti\" },\n        array: { unit: \"elementov\", verb: \"imeti\" },\n        set: { unit: \"elementov\", verb: \"imeti\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"\u0161tevilo\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"tabela\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"vnos\",\n        email: \"e-po\u0161tni naslov\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datum in \u010Das\",\n        date: \"ISO datum\",\n        time: \"ISO \u010Das\",\n        duration: \"ISO trajanje\",\n        ipv4: \"IPv4 naslov\",\n        ipv6: \"IPv6 naslov\",\n        cidrv4: \"obseg IPv4\",\n        cidrv6: \"obseg IPv6\",\n        base64: \"base64 kodiran niz\",\n        base64url: \"base64url kodiran niz\",\n        json_string: \"JSON niz\",\n        e164: \"E.164 \u0161tevilka\",\n        jwt: \"JWT\",\n        template_literal: \"vnos\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Neveljaven vnos: pri\u010Dakovano ${issue.expected}, prejeto ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neveljaven vnos: pri\u010Dakovano ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neveljavna mo\u017Enost: pri\u010Dakovano eno izmed ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Preveliko: pri\u010Dakovano, da bo ${issue.origin ?? \"vrednost\"} imelo ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementov\"}`;\n                return `Preveliko: pri\u010Dakovano, da bo ${issue.origin ?? \"vrednost\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Premajhno: pri\u010Dakovano, da bo ${issue.origin} imelo ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Premajhno: pri\u010Dakovano, da bo ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Neveljaven niz: mora se za\u010Deti z \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Neveljaven niz: mora se kon\u010Dati z \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neveljaven niz: mora vsebovati \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`;\n                return `Neveljaven ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neveljavno \u0161tevilo: mora biti ve\u010Dkratnik ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Neprepoznan${issue.keys.length > 1 ? \"i klju\u010Di\" : \" klju\u010D\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neveljaven klju\u010D v ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Neveljaven vnos\";\n            case \"invalid_element\":\n                return `Neveljavna vrednost v ${issue.origin}`;\n            default:\n                return \"Neveljaven vnos\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tecken\", verb: \"att ha\" },\n        file: { unit: \"bytes\", verb: \"att ha\" },\n        array: { unit: \"objekt\", verb: \"att inneh\u00E5lla\" },\n        set: { unit: \"objekt\", verb: \"att inneh\u00E5lla\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"antal\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"lista\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"regulj\u00E4rt uttryck\",\n        email: \"e-postadress\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-datum och tid\",\n        date: \"ISO-datum\",\n        time: \"ISO-tid\",\n        duration: \"ISO-varaktighet\",\n        ipv4: \"IPv4-intervall\",\n        ipv6: \"IPv6-intervall\",\n        cidrv4: \"IPv4-spektrum\",\n        cidrv6: \"IPv6-spektrum\",\n        base64: \"base64-kodad str\u00E4ng\",\n        base64url: \"base64url-kodad str\u00E4ng\",\n        json_string: \"JSON-str\u00E4ng\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"mall-literal\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Ogiltig inmatning: f\u00F6rv\u00E4ntat ${issue.expected}, fick ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ogiltig inmatning: f\u00F6rv\u00E4ntat ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ogiltigt val: f\u00F6rv\u00E4ntade en av ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `F\u00F6r stor(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n                }\n                return `F\u00F6r stor(t): f\u00F6rv\u00E4ntat ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `F\u00F6r lite(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `F\u00F6r lite(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Ogiltig str\u00E4ng: m\u00E5ste b\u00F6rja med \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Ogiltig str\u00E4ng: m\u00E5ste sluta med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ogiltig str\u00E4ng: m\u00E5ste inneh\u00E5lla \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ogiltig str\u00E4ng: m\u00E5ste matcha m\u00F6nstret \"${_issue.pattern}\"`;\n                return `Ogiltig(t) ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ogiltigt tal: m\u00E5ste vara en multipel av ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ok\u00E4nda nycklar\" : \"Ok\u00E4nd nyckel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ogiltig nyckel i ${issue.origin ?? \"v\u00E4rdet\"}`;\n            case \"invalid_union\":\n                return \"Ogiltig input\";\n            case \"invalid_element\":\n                return `Ogiltigt v\u00E4rde i ${issue.origin ?? \"v\u00E4rdet\"}`;\n            default:\n                return `Ogiltig input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n        file: { unit: \"\u0BAA\u0BC8\u0B9F\u0BCD\u0B9F\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n        array: { unit: \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n        set: { unit: \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"\u0B8E\u0BA3\u0BCD \u0B85\u0BB2\u0BCD\u0BB2\u0BBE\u0BA4\u0BA4\u0BC1\" : \"\u0B8E\u0BA3\u0BCD\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"\u0B85\u0BA3\u0BBF\";\n                }\n                if (data === null) {\n                    return \"\u0BB5\u0BC6\u0BB1\u0BC1\u0BAE\u0BC8\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1\",\n        email: \"\u0BAE\u0BBF\u0BA9\u0BCD\u0BA9\u0B9E\u0BCD\u0B9A\u0BB2\u0BCD \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0BA4\u0BC7\u0BA4\u0BBF \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD\",\n        date: \"ISO \u0BA4\u0BC7\u0BA4\u0BBF\",\n        time: \"ISO \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD\",\n        duration: \"ISO \u0B95\u0BBE\u0BB2 \u0B85\u0BB3\u0BB5\u0BC1\",\n        ipv4: \"IPv4 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n        ipv6: \"IPv6 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n        cidrv4: \"IPv4 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1\",\n        cidrv6: \"IPv6 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1\",\n        base64: \"base64-encoded \u0B9A\u0BB0\u0BAE\u0BCD\",\n        base64url: \"base64url-encoded \u0B9A\u0BB0\u0BAE\u0BCD\",\n        json_string: \"JSON \u0B9A\u0BB0\u0BAE\u0BCD\",\n        e164: \"E.164 \u0B8E\u0BA3\u0BCD\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0BAE\u0BCD: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${util.joinValues(issue.values, \"|\")} \u0B87\u0BB2\u0BCD \u0B92\u0BA9\u0BCD\u0BB1\u0BC1`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin ?? \"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\"} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                }\n                return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin ?? \"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\"} ${adj}${issue.maximum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; //\n                }\n                return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin} ${adj}${issue.minimum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.prefix}\" \u0B87\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                if (_issue.format === \"ends_with\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.suffix}\" \u0B87\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0B9F\u0BC8\u0BAF \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                if (_issue.format === \"includes\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.includes}\" \u0B90 \u0B89\u0BB3\u0BCD\u0BB3\u0B9F\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                if (_issue.format === \"regex\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: ${_issue.pattern} \u0BAE\u0BC1\u0BB1\u0BC8\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B9F\u0BA9\u0BCD \u0BAA\u0BCA\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B8E\u0BA3\u0BCD: ${issue.divisor} \u0B87\u0BA9\u0BCD \u0BAA\u0BB2\u0BAE\u0BBE\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n            case \"unrecognized_keys\":\n                return `\u0B85\u0B9F\u0BC8\u0BAF\u0BBE\u0BB3\u0BAE\u0BCD \u0BA4\u0BC6\u0BB0\u0BBF\u0BAF\u0BBE\u0BA4 \u0BB5\u0BBF\u0B9A\u0BC8${issue.keys.length > 1 ? \"\u0B95\u0BB3\u0BCD\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0B9A\u0BC8`;\n            case \"invalid_union\":\n                return \"\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1\";\n            case \"invalid_element\":\n                return `${issue.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1`;\n            default:\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n        file: { unit: \"\u0E44\u0E1A\u0E15\u0E4C\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n        array: { unit: \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n        set: { unit: \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"\u0E44\u0E21\u0E48\u0E43\u0E0A\u0E48\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02 (NaN)\" : \"\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"\u0E2D\u0E32\u0E23\u0E4C\u0E40\u0E23\u0E22\u0E4C (Array)\";\n                }\n                if (data === null) {\n                    return \"\u0E44\u0E21\u0E48\u0E21\u0E35\u0E04\u0E48\u0E32 (null)\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19\",\n        email: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E2D\u0E35\u0E40\u0E21\u0E25\",\n        url: \"URL\",\n        emoji: \"\u0E2D\u0E34\u0E42\u0E21\u0E08\u0E34\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n        date: \"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E41\u0E1A\u0E1A ISO\",\n        time: \"\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n        duration: \"\u0E0A\u0E48\u0E27\u0E07\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n        ipv4: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv4\",\n        ipv6: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv6\",\n        cidrv4: \"\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv4\",\n        cidrv6: \"\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv6\",\n        base64: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64\",\n        base64url: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A URL\",\n        json_string: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A JSON\",\n        e164: \"\u0E40\u0E1A\u0E2D\u0E23\u0E4C\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28 (E.164)\",\n        jwt: \"\u0E42\u0E17\u0E40\u0E04\u0E19 JWT\",\n        template_literal: \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${issue.expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0E04\u0E48\u0E32\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E43\u0E19 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19\" : \"\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin ?? \"\u0E04\u0E48\u0E32\"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\"}`;\n                return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin ?? \"\u0E04\u0E48\u0E32\"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22\" : \"\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E25\u0E07\u0E17\u0E49\u0E32\u0E22\u0E14\u0E49\u0E27\u0E22 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 \"${_issue.includes}\" \u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21`;\n                if (_issue.format === \"regex\")\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14 ${_issue.pattern}`;\n                return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E32\u0E23\u0E14\u0E49\u0E27\u0E22 ${issue.divisor} \u0E44\u0E14\u0E49\u0E25\u0E07\u0E15\u0E31\u0E27`;\n            case \"unrecognized_keys\":\n                return `\u0E1E\u0E1A\u0E04\u0E35\u0E22\u0E4C\u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u0E04\u0E35\u0E22\u0E4C\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E39\u0E40\u0E19\u0E35\u0E22\u0E19\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49\";\n            case \"invalid_element\":\n                return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue.origin}`;\n            default:\n                return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nexport const parsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"NaN\" : \"number\";\n        }\n        case \"object\": {\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                return data.constructor.name;\n            }\n        }\n    }\n    return t;\n};\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"olmal\u0131\" },\n        file: { unit: \"bayt\", verb: \"olmal\u0131\" },\n        array: { unit: \"\u00F6\u011Fe\", verb: \"olmal\u0131\" },\n        set: { unit: \"\u00F6\u011Fe\", verb: \"olmal\u0131\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const Nouns = {\n        regex: \"girdi\",\n        email: \"e-posta adresi\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO tarih ve saat\",\n        date: \"ISO tarih\",\n        time: \"ISO saat\",\n        duration: \"ISO s\u00FCre\",\n        ipv4: \"IPv4 adresi\",\n        ipv6: \"IPv6 adresi\",\n        cidrv4: \"IPv4 aral\u0131\u011F\u0131\",\n        cidrv6: \"IPv6 aral\u0131\u011F\u0131\",\n        base64: \"base64 ile \u015Fifrelenmi\u015F metin\",\n        base64url: \"base64url ile \u015Fifrelenmi\u015F metin\",\n        json_string: \"JSON dizesi\",\n        e164: \"E.164 say\u0131s\u0131\",\n        jwt: \"JWT\",\n        template_literal: \"\u015Eablon dizesi\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Ge\u00E7ersiz de\u011Fer: beklenen ${issue.expected}, al\u0131nan ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ge\u00E7ersiz de\u011Fer: beklenen ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ge\u00E7ersiz se\u00E7enek: a\u015Fa\u011F\u0131dakilerden biri olmal\u0131: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ok b\u00FCy\u00FCk: beklenen ${issue.origin ?? \"de\u011Fer\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u00F6\u011Fe\"}`;\n                return `\u00C7ok b\u00FCy\u00FCk: beklenen ${issue.origin ?? \"de\u011Fer\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ok k\u00FC\u00E7\u00FCk: beklenen ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                return `\u00C7ok k\u00FC\u00E7\u00FCk: beklenen ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ge\u00E7ersiz metin: \"${_issue.prefix}\" ile ba\u015Flamal\u0131`;\n                if (_issue.format === \"ends_with\")\n                    return `Ge\u00E7ersiz metin: \"${_issue.suffix}\" ile bitmeli`;\n                if (_issue.format === \"includes\")\n                    return `Ge\u00E7ersiz metin: \"${_issue.includes}\" i\u00E7ermeli`;\n                if (_issue.format === \"regex\")\n                    return `Ge\u00E7ersiz metin: ${_issue.pattern} desenine uymal\u0131`;\n                return `Ge\u00E7ersiz ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ge\u00E7ersiz say\u0131: ${issue.divisor} ile tam b\u00F6l\u00FCnebilmeli`;\n            case \"unrecognized_keys\":\n                return `Tan\u0131nmayan anahtar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} i\u00E7inde ge\u00E7ersiz anahtar`;\n            case \"invalid_union\":\n                return \"Ge\u00E7ersiz de\u011Fer\";\n            case \"invalid_element\":\n                return `${issue.origin} i\u00E7inde ge\u00E7ersiz de\u011Fer`;\n            default:\n                return `Ge\u00E7ersiz de\u011Fer`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n        file: { unit: \"\u0431\u0430\u0439\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n        array: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n        set: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"\u0447\u0438\u0441\u043B\u043E\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"\u043C\u0430\u0441\u0438\u0432\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\",\n        email: \"\u0430\u0434\u0440\u0435\u0441\u0430 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u043F\u043E\u0448\u0442\u0438\",\n        url: \"URL\",\n        emoji: \"\u0435\u043C\u043E\u0434\u0437\u0456\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u0434\u0430\u0442\u0430 \u0442\u0430 \u0447\u0430\u0441 ISO\",\n        date: \"\u0434\u0430\u0442\u0430 ISO\",\n        time: \"\u0447\u0430\u0441 ISO\",\n        duration: \"\u0442\u0440\u0438\u0432\u0430\u043B\u0456\u0441\u0442\u044C ISO\",\n        ipv4: \"\u0430\u0434\u0440\u0435\u0441\u0430 IPv4\",\n        ipv6: \"\u0430\u0434\u0440\u0435\u0441\u0430 IPv6\",\n        cidrv4: \"\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv4\",\n        cidrv6: \"\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv6\",\n        base64: \"\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64\",\n        base64url: \"\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64url\",\n        json_string: \"\u0440\u044F\u0434\u043E\u043A JSON\",\n        e164: \"\u043D\u043E\u043C\u0435\u0440 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${issue.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${parsedType(issue.input)}`;\n            // return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${issue.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${util.getParsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430 \u043E\u043F\u0446\u0456\u044F: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F \u043E\u0434\u043D\u0435 \u0437 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\"}`;\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\"} \u0431\u0443\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin} \u0431\u0443\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043F\u043E\u0447\u0438\u043D\u0430\u0442\u0438\u0441\u044F \u0437 \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0437\u0430\u043A\u0456\u043D\u0447\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u043D\u0430 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043C\u0456\u0441\u0442\u0438\u0442\u0438 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0442\u0438 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0447\u0438\u0441\u043B\u043E: \u043F\u043E\u0432\u0438\u043D\u043D\u043E \u0431\u0443\u0442\u0438 \u043A\u0440\u0430\u0442\u043D\u0438\u043C ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u041D\u0435\u0440\u043E\u0437\u043F\u0456\u0437\u043D\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u0456\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0443 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\";\n            case \"invalid_element\":\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0443 ${issue.origin}`;\n            default:\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u062D\u0631\u0648\u0641\", verb: \"\u06C1\u0648\u0646\u0627\" },\n        file: { unit: \"\u0628\u0627\u0626\u0679\u0633\", verb: \"\u06C1\u0648\u0646\u0627\" },\n        array: { unit: \"\u0622\u0626\u0679\u0645\u0632\", verb: \"\u06C1\u0648\u0646\u0627\" },\n        set: { unit: \"\u0622\u0626\u0679\u0645\u0632\", verb: \"\u06C1\u0648\u0646\u0627\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"\u0646\u0645\u0628\u0631\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"\u0622\u0631\u06D2\";\n                }\n                if (data === null) {\n                    return \"\u0646\u0644\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u0627\u0646 \u067E\u0679\",\n        email: \"\u0627\u06CC \u0645\u06CC\u0644 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n        url: \"\u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644\",\n        emoji: \"\u0627\u06CC\u0645\u0648\u062C\u06CC\",\n        uuid: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        uuidv4: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 4\",\n        uuidv6: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 6\",\n        nanoid: \"\u0646\u06CC\u0646\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        guid: \"\u062C\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        cuid: \"\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        cuid2: \"\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC 2\",\n        ulid: \"\u06CC\u0648 \u0627\u06CC\u0644 \u0622\u0626\u06CC \u0688\u06CC\",\n        xid: \"\u0627\u06CC\u06A9\u0633 \u0622\u0626\u06CC \u0688\u06CC\",\n        ksuid: \"\u06A9\u06D2 \u0627\u06CC\u0633 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        datetime: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0688\u06CC\u0679 \u0679\u0627\u0626\u0645\",\n        date: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u062A\u0627\u0631\u06CC\u062E\",\n        time: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0648\u0642\u062A\",\n        duration: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0645\u062F\u062A\",\n        ipv4: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n        ipv6: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n        cidrv4: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0631\u06CC\u0646\u062C\",\n        cidrv6: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0631\u06CC\u0646\u062C\",\n        base64: \"\u0628\u06CC\u0633 64 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF\",\n        base64url: \"\u0628\u06CC\u0633 64 \u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF\",\n        json_string: \"\u062C\u06D2 \u0627\u06CC\u0633 \u0627\u0648 \u0627\u06CC\u0646 \u0633\u0679\u0631\u0646\u06AF\",\n        e164: \"\u0627\u06CC 164 \u0646\u0645\u0628\u0631\",\n        jwt: \"\u062C\u06D2 \u0688\u0628\u0644\u06CC\u0648 \u0679\u06CC\",\n        template_literal: \"\u0627\u0646 \u067E\u0679\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${issue.expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${parsedType(issue.input)} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${util.stringifyPrimitive(issue.values[0])} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n                return `\u063A\u0644\u0637 \u0622\u067E\u0634\u0646: ${util.joinValues(issue.values, \"|\")} \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue.origin ?? \"\u0648\u06CC\u0644\u06CC\u0648\"} \u06A9\u06D2 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0627\u0635\u0631\"} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;\n                return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue.origin ?? \"\u0648\u06CC\u0644\u06CC\u0648\"} \u06A9\u0627 ${adj}${issue.maximum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue.origin} \u06A9\u06D2 ${adj}${issue.minimum.toString()} ${sizing.unit} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;\n                }\n                return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue.origin} \u06A9\u0627 ${adj}${issue.minimum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.prefix}\" \u0633\u06D2 \u0634\u0631\u0648\u0639 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.suffix}\" \u067E\u0631 \u062E\u062A\u0645 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                if (_issue.format === \"includes\")\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.includes}\" \u0634\u0627\u0645\u0644 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                if (_issue.format === \"regex\")\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \u067E\u06CC\u0679\u0631\u0646 ${_issue.pattern} \u0633\u06D2 \u0645\u06CC\u0686 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                return `\u063A\u0644\u0637 ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u063A\u0644\u0637 \u0646\u0645\u0628\u0631: ${issue.divisor} \u06A9\u0627 \u0645\u0636\u0627\u0639\u0641 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n            case \"unrecognized_keys\":\n                return `\u063A\u06CC\u0631 \u062A\u0633\u0644\u06CC\u0645 \u0634\u062F\u06C1 \u06A9\u06CC${issue.keys.length > 1 ? \"\u0632\" : \"\"}: ${util.joinValues(issue.keys, \"\u060C \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u06A9\u06CC`;\n            case \"invalid_union\":\n                return \"\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679\";\n            case \"invalid_element\":\n                return `${issue.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u0648\u06CC\u0644\u06CC\u0648`;\n            default:\n                return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"k\u00FD t\u1EF1\", verb: \"c\u00F3\" },\n        file: { unit: \"byte\", verb: \"c\u00F3\" },\n        array: { unit: \"ph\u1EA7n t\u1EED\", verb: \"c\u00F3\" },\n        set: { unit: \"ph\u1EA7n t\u1EED\", verb: \"c\u00F3\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"s\u1ED1\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"m\u1EA3ng\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u0111\u1EA7u v\u00E0o\",\n        email: \"\u0111\u1ECBa ch\u1EC9 email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ng\u00E0y gi\u1EDD ISO\",\n        date: \"ng\u00E0y ISO\",\n        time: \"gi\u1EDD ISO\",\n        duration: \"kho\u1EA3ng th\u1EDDi gian ISO\",\n        ipv4: \"\u0111\u1ECBa ch\u1EC9 IPv4\",\n        ipv6: \"\u0111\u1ECBa ch\u1EC9 IPv6\",\n        cidrv4: \"d\u1EA3i IPv4\",\n        cidrv6: \"d\u1EA3i IPv6\",\n        base64: \"chu\u1ED7i m\u00E3 h\u00F3a base64\",\n        base64url: \"chu\u1ED7i m\u00E3 h\u00F3a base64url\",\n        json_string: \"chu\u1ED7i JSON\",\n        e164: \"s\u1ED1 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0111\u1EA7u v\u00E0o\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${issue.expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${util.stringifyPrimitive(issue.values[0])}`;\n                return `T\u00F9y ch\u1ECDn kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i m\u1ED9t trong c\u00E1c gi\u00E1 tr\u1ECB ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Qu\u00E1 l\u1EDBn: mong \u0111\u1EE3i ${issue.origin ?? \"gi\u00E1 tr\u1ECB\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"ph\u1EA7n t\u1EED\"}`;\n                return `Qu\u00E1 l\u1EDBn: mong \u0111\u1EE3i ${issue.origin ?? \"gi\u00E1 tr\u1ECB\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Qu\u00E1 nh\u1ECF: mong \u0111\u1EE3i ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Qu\u00E1 nh\u1ECF: mong \u0111\u1EE3i ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i b\u1EAFt \u0111\u1EA7u b\u1EB1ng \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i k\u1EBFt th\u00FAc b\u1EB1ng \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i bao g\u1ED3m \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i kh\u1EDBp v\u1EDBi m\u1EABu ${_issue.pattern}`;\n                return `${Nouns[_issue.format] ?? issue.format} kh\u00F4ng h\u1EE3p l\u1EC7`;\n            }\n            case \"not_multiple_of\":\n                return `S\u1ED1 kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i l\u00E0 b\u1ED9i s\u1ED1 c\u1EE7a ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kh\u00F3a kh\u00F4ng \u0111\u01B0\u1EE3c nh\u1EADn d\u1EA1ng: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kh\u00F3a kh\u00F4ng h\u1EE3p l\u1EC7 trong ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7\";\n            case \"invalid_element\":\n                return `Gi\u00E1 tr\u1ECB kh\u00F4ng h\u1EE3p l\u1EC7 trong ${issue.origin}`;\n            default:\n                return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u5B57\u7B26\", verb: \"\u5305\u542B\" },\n        file: { unit: \"\u5B57\u8282\", verb: \"\u5305\u542B\" },\n        array: { unit: \"\u9879\", verb: \"\u5305\u542B\" },\n        set: { unit: \"\u9879\", verb: \"\u5305\u542B\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"\u975E\u6570\u5B57(NaN)\" : \"\u6570\u5B57\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"\u6570\u7EC4\";\n                }\n                if (data === null) {\n                    return \"\u7A7A\u503C(null)\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u8F93\u5165\",\n        email: \"\u7535\u5B50\u90AE\u4EF6\",\n        url: \"URL\",\n        emoji: \"\u8868\u60C5\u7B26\u53F7\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO\u65E5\u671F\u65F6\u95F4\",\n        date: \"ISO\u65E5\u671F\",\n        time: \"ISO\u65F6\u95F4\",\n        duration: \"ISO\u65F6\u957F\",\n        ipv4: \"IPv4\u5730\u5740\",\n        ipv6: \"IPv6\u5730\u5740\",\n        cidrv4: \"IPv4\u7F51\u6BB5\",\n        cidrv6: \"IPv6\u7F51\u6BB5\",\n        base64: \"base64\u7F16\u7801\u5B57\u7B26\u4E32\",\n        base64url: \"base64url\u7F16\u7801\u5B57\u7B26\u4E32\",\n        json_string: \"JSON\u5B57\u7B26\u4E32\",\n        e164: \"E.164\u53F7\u7801\",\n        jwt: \"JWT\",\n        template_literal: \"\u8F93\u5165\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${issue.expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u65E0\u6548\u9009\u9879\uFF1A\u671F\u671B\u4EE5\u4E0B\u4E4B\u4E00 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue.origin ?? \"\u503C\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u4E2A\u5143\u7D20\"}`;\n                return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue.origin ?? \"\u503C\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 \"${_issue.prefix}\" \u5F00\u5934`;\n                if (_issue.format === \"ends_with\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 \"${_issue.suffix}\" \u7ED3\u5C3E`;\n                if (_issue.format === \"includes\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u5305\u542B \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u6EE1\u8DB3\u6B63\u5219\u8868\u8FBE\u5F0F ${_issue.pattern}`;\n                return `\u65E0\u6548${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u65E0\u6548\u6570\u5B57\uFF1A\u5FC5\u987B\u662F ${issue.divisor} \u7684\u500D\u6570`;\n            case \"unrecognized_keys\":\n                return `\u51FA\u73B0\u672A\u77E5\u7684\u952E(key): ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u4E2D\u7684\u952E(key)\u65E0\u6548`;\n            case \"invalid_union\":\n                return \"\u65E0\u6548\u8F93\u5165\";\n            case \"invalid_element\":\n                return `${issue.origin} \u4E2D\u5305\u542B\u65E0\u6548\u503C(value)`;\n            default:\n                return `\u65E0\u6548\u8F93\u5165`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u5B57\u5143\", verb: \"\u64C1\u6709\" },\n        file: { unit: \"\u4F4D\u5143\u7D44\", verb: \"\u64C1\u6709\" },\n        array: { unit: \"\u9805\u76EE\", verb: \"\u64C1\u6709\" },\n        set: { unit: \"\u9805\u76EE\", verb: \"\u64C1\u6709\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const parsedType = (data) => {\n        const t = typeof data;\n        switch (t) {\n            case \"number\": {\n                return Number.isNaN(data) ? \"NaN\" : \"number\";\n            }\n            case \"object\": {\n                if (Array.isArray(data)) {\n                    return \"array\";\n                }\n                if (data === null) {\n                    return \"null\";\n                }\n                if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                    return data.constructor.name;\n                }\n            }\n        }\n        return t;\n    };\n    const Nouns = {\n        regex: \"\u8F38\u5165\",\n        email: \"\u90F5\u4EF6\u5730\u5740\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u65E5\u671F\u6642\u9593\",\n        date: \"ISO \u65E5\u671F\",\n        time: \"ISO \u6642\u9593\",\n        duration: \"ISO \u671F\u9593\",\n        ipv4: \"IPv4 \u4F4D\u5740\",\n        ipv6: \"IPv6 \u4F4D\u5740\",\n        cidrv4: \"IPv4 \u7BC4\u570D\",\n        cidrv6: \"IPv6 \u7BC4\u570D\",\n        base64: \"base64 \u7DE8\u78BC\u5B57\u4E32\",\n        base64url: \"base64url \u7DE8\u78BC\u5B57\u4E32\",\n        json_string: \"JSON \u5B57\u4E32\",\n        e164: \"E.164 \u6578\u503C\",\n        jwt: \"JWT\",\n        template_literal: \"\u8F38\u5165\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${issue.expected}\uFF0C\u4F46\u6536\u5230 ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u7121\u6548\u7684\u9078\u9805\uFF1A\u9810\u671F\u70BA\u4EE5\u4E0B\u5176\u4E2D\u4E4B\u4E00 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue.origin ?? \"\u503C\"} \u61C9\u70BA ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u500B\u5143\u7D20\"}`;\n                return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue.origin ?? \"\u503C\"} \u61C9\u70BA ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue.origin} \u61C9\u70BA ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue.origin} \u61C9\u70BA ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 \"${_issue.prefix}\" \u958B\u982D`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 \"${_issue.suffix}\" \u7D50\u5C3E`;\n                if (_issue.format === \"includes\")\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u5305\u542B \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u7B26\u5408\u683C\u5F0F ${_issue.pattern}`;\n                return `\u7121\u6548\u7684 ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u7121\u6548\u7684\u6578\u5B57\uFF1A\u5FC5\u9808\u70BA ${issue.divisor} \u7684\u500D\u6578`;\n            case \"unrecognized_keys\":\n                return `\u7121\u6CD5\u8B58\u5225\u7684\u9375\u503C${issue.keys.length > 1 ? \"\u5011\" : \"\"}\uFF1A${util.joinValues(issue.keys, \"\u3001\")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u4E2D\u6709\u7121\u6548\u7684\u9375\u503C`;\n            case \"invalid_union\":\n                return \"\u7121\u6548\u7684\u8F38\u5165\u503C\";\n            case \"invalid_element\":\n                return `${issue.origin} \u4E2D\u6709\u7121\u6548\u7684\u503C`;\n            default:\n                return `\u7121\u6548\u7684\u8F38\u5165\u503C`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "export { default as ar } from \"./ar.js\";\nexport { default as az } from \"./az.js\";\nexport { default as be } from \"./be.js\";\nexport { default as ca } from \"./ca.js\";\nexport { default as cs } from \"./cs.js\";\nexport { default as de } from \"./de.js\";\nexport { default as en } from \"./en.js\";\nexport { default as eo } from \"./eo.js\";\nexport { default as es } from \"./es.js\";\nexport { default as fa } from \"./fa.js\";\nexport { default as fi } from \"./fi.js\";\nexport { default as fr } from \"./fr.js\";\nexport { default as frCA } from \"./fr-CA.js\";\nexport { default as he } from \"./he.js\";\nexport { default as hu } from \"./hu.js\";\nexport { default as id } from \"./id.js\";\nexport { default as it } from \"./it.js\";\nexport { default as ja } from \"./ja.js\";\nexport { default as kh } from \"./kh.js\";\nexport { default as ko } from \"./ko.js\";\nexport { default as mk } from \"./mk.js\";\nexport { default as ms } from \"./ms.js\";\nexport { default as nl } from \"./nl.js\";\nexport { default as no } from \"./no.js\";\nexport { default as ota } from \"./ota.js\";\nexport { default as ps } from \"./ps.js\";\nexport { default as pl } from \"./pl.js\";\nexport { default as pt } from \"./pt.js\";\nexport { default as ru } from \"./ru.js\";\nexport { default as sl } from \"./sl.js\";\nexport { default as sv } from \"./sv.js\";\nexport { default as ta } from \"./ta.js\";\nexport { default as th } from \"./th.js\";\nexport { default as tr } from \"./tr.js\";\nexport { default as ua } from \"./ua.js\";\nexport { default as ur } from \"./ur.js\";\nexport { default as vi } from \"./vi.js\";\nexport { default as zhCN } from \"./zh-CN.js\";\nexport { default as zhTW } from \"./zh-TW.js\";\n", "export const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n    constructor() {\n        this._map = new Map();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            if (this._idmap.has(meta.id)) {\n                throw new Error(`ID ${meta.id} already exists in the registry`);\n            }\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new Map();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            return { ...pm, ...this._map.get(schema) };\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\n// registries\nexport function registry() {\n    return new $ZodRegistry();\n}\nexport const globalRegistry = /*@__PURE__*/ registry();\n", "import * as checks from \"./checks.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\nexport function _string(Class, params) {\n    return new Class({\n        type: \"string\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedString(Class, params) {\n    return new Class({\n        type: \"string\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _number(Class, params) {\n    return new Class({\n        type: \"number\",\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedNumber(Class, params) {\n    return new Class({\n        type: \"number\",\n        coerce: true,\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// export function _refine<T>(\n//   Class: util.SchemaClass<schemas.$ZodCustom>,\n//   fn: (arg: NoInfer<T>) => util.MaybeAsync<unknown>,\n//   _params: string | $ZodCustomParams = {}\n// ): checks.$ZodCheck<T> {\n//   return _custom(Class, fn, _params);\n// }\n// same as _custom but defaults to abort:false\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Pipe = Classes.Pipe ?? schemas.$ZodPipe;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const _Transform = Classes.Transform ?? schemas.$ZodTransform;\n    const tx = new _Transform({\n        type: \"transform\",\n        transform: (input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: tx,\n                });\n                return {};\n            }\n        },\n        error: params.error,\n    });\n    // params.error;\n    const innerPipe = new _Pipe({\n        type: \"pipe\",\n        in: new _String({ type: \"string\", error: params.error }),\n        out: tx,\n        error: params.error,\n    });\n    const outerPipe = new _Pipe({\n        type: \"pipe\",\n        in: innerPipe,\n        out: new _Boolean({\n            type: \"boolean\",\n            error: params.error,\n        }),\n        error: params.error,\n    });\n    return outerPipe;\n}\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        ...util.normalizeParams(_params),\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n", "import { _array, _tuple, _unknown } from \"./api.js\";\nimport { parse, parseAsync } from \"./parse.js\";\nimport * as schemas from \"./schemas.js\";\nimport { $ZodTuple } from \"./schemas.js\";\nexport class $ZodFunction {\n    constructor(def) {\n        this._def = def;\n        this.def = def;\n    }\n    implement(func) {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implement() must be called with a function\");\n        }\n        const impl = ((...args) => {\n            const parsedArgs = this._def.input ? parse(this._def.input, args, undefined, { callee: impl }) : args;\n            if (!Array.isArray(parsedArgs)) {\n                throw new Error(\"Invalid arguments schema: not an array or tuple schema.\");\n            }\n            const output = func(...parsedArgs);\n            return this._def.output ? parse(this._def.output, output, undefined, { callee: impl }) : output;\n        });\n        return impl;\n    }\n    implementAsync(func) {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implement() must be called with a function\");\n        }\n        const impl = (async (...args) => {\n            const parsedArgs = this._def.input ? await parseAsync(this._def.input, args, undefined, { callee: impl }) : args;\n            if (!Array.isArray(parsedArgs)) {\n                throw new Error(\"Invalid arguments schema: not an array or tuple schema.\");\n            }\n            const output = await func(...parsedArgs);\n            return this._def.output ? parseAsync(this._def.output, output, undefined, { callee: impl }) : output;\n        });\n        return impl;\n    }\n    input(...args) {\n        const F = this.constructor;\n        if (Array.isArray(args[0])) {\n            return new F({\n                type: \"function\",\n                input: new $ZodTuple({\n                    type: \"tuple\",\n                    items: args[0],\n                    rest: args[1],\n                }),\n                output: this._def.output,\n            });\n        }\n        return new F({\n            type: \"function\",\n            input: args[0],\n            output: this._def.output,\n        });\n    }\n    output(output) {\n        const F = this.constructor;\n        return new F({\n            type: \"function\",\n            input: this._def.input,\n            output,\n        });\n    }\n}\nfunction _function(params) {\n    return new $ZodFunction({\n        type: \"function\",\n        input: Array.isArray(params?.input)\n            ? _tuple(schemas.$ZodTuple, params?.input)\n            : (params?.input ?? _array(schemas.$ZodArray, _unknown(schemas.$ZodUnknown))),\n        output: params?.output ?? _unknown(schemas.$ZodUnknown),\n    });\n}\nexport { _function as function };\n", "import { $ZodRegistry, globalRegistry } from \"./registries.js\";\nimport { getEnumValues } from \"./util.js\";\nexport class JSONSchemaGenerator {\n    constructor(params) {\n        this.counter = 0;\n        this.metadataRegistry = params?.metadata ?? globalRegistry;\n        this.target = params?.target ?? \"draft-2020-12\";\n        this.unrepresentable = params?.unrepresentable ?? \"throw\";\n        this.override = params?.override ?? (() => { });\n        this.io = params?.io ?? \"output\";\n        this.seen = new Map();\n    }\n    process(schema, _params = { path: [], schemaPath: [] }) {\n        var _a;\n        const def = schema._zod.def;\n        const formatMap = {\n            guid: \"uuid\",\n            url: \"uri\",\n            datetime: \"date-time\",\n            json_string: \"json-string\",\n            regex: \"\", // do not set\n        };\n        // check for schema in seens\n        const seen = this.seen.get(schema);\n        if (seen) {\n            seen.count++;\n            // check if cycle\n            const isCycle = _params.schemaPath.includes(schema);\n            if (isCycle) {\n                seen.cycle = _params.path;\n            }\n            return seen.schema;\n        }\n        // initialize\n        const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n        this.seen.set(schema, result);\n        // custom method overrides default behavior\n        const overrideSchema = schema._zod.toJSONSchema?.();\n        if (overrideSchema) {\n            result.schema = overrideSchema;\n        }\n        else {\n            const params = {\n                ..._params,\n                schemaPath: [..._params.schemaPath, schema],\n                path: _params.path,\n            };\n            const parent = schema._zod.parent;\n            if (parent) {\n                // schema was cloned from another schema\n                result.ref = parent;\n                this.process(parent, params);\n                this.seen.get(parent).isParent = true;\n            }\n            else {\n                const _json = result.schema;\n                switch (def.type) {\n                    case \"string\": {\n                        const json = _json;\n                        json.type = \"string\";\n                        const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n                            .bag;\n                        if (typeof minimum === \"number\")\n                            json.minLength = minimum;\n                        if (typeof maximum === \"number\")\n                            json.maxLength = maximum;\n                        // custom pattern overrides format\n                        if (format) {\n                            json.format = formatMap[format] ?? format;\n                            if (json.format === \"\")\n                                delete json.format; // empty format is not valid\n                        }\n                        if (contentEncoding)\n                            json.contentEncoding = contentEncoding;\n                        if (patterns && patterns.size > 0) {\n                            const regexes = [...patterns];\n                            if (regexes.length === 1)\n                                json.pattern = regexes[0].source;\n                            else if (regexes.length > 1) {\n                                result.schema.allOf = [\n                                    ...regexes.map((regex) => ({\n                                        ...(this.target === \"draft-7\" ? { type: \"string\" } : {}),\n                                        pattern: regex.source,\n                                    })),\n                                ];\n                            }\n                        }\n                        break;\n                    }\n                    case \"number\": {\n                        const json = _json;\n                        const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n                        if (typeof format === \"string\" && format.includes(\"int\"))\n                            json.type = \"integer\";\n                        else\n                            json.type = \"number\";\n                        if (typeof exclusiveMinimum === \"number\")\n                            json.exclusiveMinimum = exclusiveMinimum;\n                        if (typeof minimum === \"number\") {\n                            json.minimum = minimum;\n                            if (typeof exclusiveMinimum === \"number\") {\n                                if (exclusiveMinimum >= minimum)\n                                    delete json.minimum;\n                                else\n                                    delete json.exclusiveMinimum;\n                            }\n                        }\n                        if (typeof exclusiveMaximum === \"number\")\n                            json.exclusiveMaximum = exclusiveMaximum;\n                        if (typeof maximum === \"number\") {\n                            json.maximum = maximum;\n                            if (typeof exclusiveMaximum === \"number\") {\n                                if (exclusiveMaximum <= maximum)\n                                    delete json.maximum;\n                                else\n                                    delete json.exclusiveMaximum;\n                            }\n                        }\n                        if (typeof multipleOf === \"number\")\n                            json.multipleOf = multipleOf;\n                        break;\n                    }\n                    case \"boolean\": {\n                        const json = _json;\n                        json.type = \"boolean\";\n                        break;\n                    }\n                    case \"bigint\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"BigInt cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"symbol\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Symbols cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"null\": {\n                        _json.type = \"null\";\n                        break;\n                    }\n                    case \"any\": {\n                        break;\n                    }\n                    case \"unknown\": {\n                        break;\n                    }\n                    case \"undefined\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Undefined cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"void\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Void cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"never\": {\n                        _json.not = {};\n                        break;\n                    }\n                    case \"date\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Date cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"array\": {\n                        const json = _json;\n                        const { minimum, maximum } = schema._zod.bag;\n                        if (typeof minimum === \"number\")\n                            json.minItems = minimum;\n                        if (typeof maximum === \"number\")\n                            json.maxItems = maximum;\n                        json.type = \"array\";\n                        json.items = this.process(def.element, { ...params, path: [...params.path, \"items\"] });\n                        break;\n                    }\n                    case \"object\": {\n                        const json = _json;\n                        json.type = \"object\";\n                        json.properties = {};\n                        const shape = def.shape; // params.shapeCache.get(schema)!;\n                        for (const key in shape) {\n                            json.properties[key] = this.process(shape[key], {\n                                ...params,\n                                path: [...params.path, \"properties\", key],\n                            });\n                        }\n                        // required keys\n                        const allKeys = new Set(Object.keys(shape));\n                        // const optionalKeys = new Set(def.optional);\n                        const requiredKeys = new Set([...allKeys].filter((key) => {\n                            const v = def.shape[key]._zod;\n                            if (this.io === \"input\") {\n                                return v.optin === undefined;\n                            }\n                            else {\n                                return v.optout === undefined;\n                            }\n                        }));\n                        if (requiredKeys.size > 0) {\n                            json.required = Array.from(requiredKeys);\n                        }\n                        // catchall\n                        if (def.catchall?._zod.def.type === \"never\") {\n                            // strict\n                            json.additionalProperties = false;\n                        }\n                        else if (!def.catchall) {\n                            // regular\n                            if (this.io === \"output\")\n                                json.additionalProperties = false;\n                        }\n                        else if (def.catchall) {\n                            json.additionalProperties = this.process(def.catchall, {\n                                ...params,\n                                path: [...params.path, \"additionalProperties\"],\n                            });\n                        }\n                        break;\n                    }\n                    case \"union\": {\n                        const json = _json;\n                        json.anyOf = def.options.map((x, i) => this.process(x, {\n                            ...params,\n                            path: [...params.path, \"anyOf\", i],\n                        }));\n                        break;\n                    }\n                    case \"intersection\": {\n                        const json = _json;\n                        const a = this.process(def.left, {\n                            ...params,\n                            path: [...params.path, \"allOf\", 0],\n                        });\n                        const b = this.process(def.right, {\n                            ...params,\n                            path: [...params.path, \"allOf\", 1],\n                        });\n                        const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n                        const allOf = [\n                            ...(isSimpleIntersection(a) ? a.allOf : [a]),\n                            ...(isSimpleIntersection(b) ? b.allOf : [b]),\n                        ];\n                        json.allOf = allOf;\n                        break;\n                    }\n                    case \"tuple\": {\n                        const json = _json;\n                        json.type = \"array\";\n                        const prefixItems = def.items.map((x, i) => this.process(x, { ...params, path: [...params.path, \"prefixItems\", i] }));\n                        if (this.target === \"draft-2020-12\") {\n                            json.prefixItems = prefixItems;\n                        }\n                        else {\n                            json.items = prefixItems;\n                        }\n                        if (def.rest) {\n                            const rest = this.process(def.rest, {\n                                ...params,\n                                path: [...params.path, \"items\"],\n                            });\n                            if (this.target === \"draft-2020-12\") {\n                                json.items = rest;\n                            }\n                            else {\n                                json.additionalItems = rest;\n                            }\n                        }\n                        // additionalItems\n                        if (def.rest) {\n                            json.items = this.process(def.rest, {\n                                ...params,\n                                path: [...params.path, \"items\"],\n                            });\n                        }\n                        // length\n                        const { minimum, maximum } = schema._zod.bag;\n                        if (typeof minimum === \"number\")\n                            json.minItems = minimum;\n                        if (typeof maximum === \"number\")\n                            json.maxItems = maximum;\n                        break;\n                    }\n                    case \"record\": {\n                        const json = _json;\n                        json.type = \"object\";\n                        json.propertyNames = this.process(def.keyType, { ...params, path: [...params.path, \"propertyNames\"] });\n                        json.additionalProperties = this.process(def.valueType, {\n                            ...params,\n                            path: [...params.path, \"additionalProperties\"],\n                        });\n                        break;\n                    }\n                    case \"map\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Map cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"set\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Set cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"enum\": {\n                        const json = _json;\n                        const values = getEnumValues(def.entries);\n                        // Number enums can have both string and number values\n                        if (values.every((v) => typeof v === \"number\"))\n                            json.type = \"number\";\n                        if (values.every((v) => typeof v === \"string\"))\n                            json.type = \"string\";\n                        json.enum = values;\n                        break;\n                    }\n                    case \"literal\": {\n                        const json = _json;\n                        const vals = [];\n                        for (const val of def.values) {\n                            if (val === undefined) {\n                                if (this.unrepresentable === \"throw\") {\n                                    throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n                                }\n                                else {\n                                    // do not add to vals\n                                }\n                            }\n                            else if (typeof val === \"bigint\") {\n                                if (this.unrepresentable === \"throw\") {\n                                    throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n                                }\n                                else {\n                                    vals.push(Number(val));\n                                }\n                            }\n                            else {\n                                vals.push(val);\n                            }\n                        }\n                        if (vals.length === 0) {\n                            // do nothing (an undefined literal was stripped)\n                        }\n                        else if (vals.length === 1) {\n                            const val = vals[0];\n                            json.type = val === null ? \"null\" : typeof val;\n                            json.const = val;\n                        }\n                        else {\n                            if (vals.every((v) => typeof v === \"number\"))\n                                json.type = \"number\";\n                            if (vals.every((v) => typeof v === \"string\"))\n                                json.type = \"string\";\n                            if (vals.every((v) => typeof v === \"boolean\"))\n                                json.type = \"string\";\n                            if (vals.every((v) => v === null))\n                                json.type = \"null\";\n                            json.enum = vals;\n                        }\n                        break;\n                    }\n                    case \"file\": {\n                        const json = _json;\n                        const file = {\n                            type: \"string\",\n                            format: \"binary\",\n                            contentEncoding: \"binary\",\n                        };\n                        const { minimum, maximum, mime } = schema._zod.bag;\n                        if (minimum !== undefined)\n                            file.minLength = minimum;\n                        if (maximum !== undefined)\n                            file.maxLength = maximum;\n                        if (mime) {\n                            if (mime.length === 1) {\n                                file.contentMediaType = mime[0];\n                                Object.assign(json, file);\n                            }\n                            else {\n                                json.anyOf = mime.map((m) => {\n                                    const mFile = { ...file, contentMediaType: m };\n                                    return mFile;\n                                });\n                            }\n                        }\n                        else {\n                            Object.assign(json, file);\n                        }\n                        // if (this.unrepresentable === \"throw\") {\n                        //   throw new Error(\"File cannot be represented in JSON Schema\");\n                        // }\n                        break;\n                    }\n                    case \"transform\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Transforms cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"nullable\": {\n                        const inner = this.process(def.innerType, params);\n                        _json.anyOf = [inner, { type: \"null\" }];\n                        break;\n                    }\n                    case \"nonoptional\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        break;\n                    }\n                    case \"success\": {\n                        const json = _json;\n                        json.type = \"boolean\";\n                        break;\n                    }\n                    case \"default\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        _json.default = JSON.parse(JSON.stringify(def.defaultValue));\n                        break;\n                    }\n                    case \"prefault\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        if (this.io === \"input\")\n                            _json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n                        break;\n                    }\n                    case \"catch\": {\n                        // use conditionals\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        let catchValue;\n                        try {\n                            catchValue = def.catchValue(undefined);\n                        }\n                        catch {\n                            throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n                        }\n                        _json.default = catchValue;\n                        break;\n                    }\n                    case \"nan\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"NaN cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    case \"template_literal\": {\n                        const json = _json;\n                        const pattern = schema._zod.pattern;\n                        if (!pattern)\n                            throw new Error(\"Pattern not found in template literal\");\n                        json.type = \"string\";\n                        json.pattern = pattern.source;\n                        break;\n                    }\n                    case \"pipe\": {\n                        const innerType = this.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n                        this.process(innerType, params);\n                        result.ref = innerType;\n                        break;\n                    }\n                    case \"readonly\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        _json.readOnly = true;\n                        break;\n                    }\n                    // passthrough types\n                    case \"promise\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        break;\n                    }\n                    case \"optional\": {\n                        this.process(def.innerType, params);\n                        result.ref = def.innerType;\n                        break;\n                    }\n                    case \"lazy\": {\n                        const innerType = schema._zod.innerType;\n                        this.process(innerType, params);\n                        result.ref = innerType;\n                        break;\n                    }\n                    case \"custom\": {\n                        if (this.unrepresentable === \"throw\") {\n                            throw new Error(\"Custom types cannot be represented in JSON Schema\");\n                        }\n                        break;\n                    }\n                    default: {\n                        def;\n                    }\n                }\n            }\n        }\n        // metadata\n        const meta = this.metadataRegistry.get(schema);\n        if (meta)\n            Object.assign(result.schema, meta);\n        if (this.io === \"input\" && isTransforming(schema)) {\n            // examples/defaults only apply to output type of pipe\n            delete result.schema.examples;\n            delete result.schema.default;\n        }\n        // set prefault as default\n        if (this.io === \"input\" && result.schema._prefault)\n            (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n        delete result.schema._prefault;\n        // pulling fresh from this.seen in case it was overwritten\n        const _result = this.seen.get(schema);\n        return _result.schema;\n    }\n    emit(schema, _params) {\n        const params = {\n            cycles: _params?.cycles ?? \"ref\",\n            reused: _params?.reused ?? \"inline\",\n            // unrepresentable: _params?.unrepresentable ?? \"throw\",\n            // uri: _params?.uri ?? ((id) => `${id}`),\n            external: _params?.external ?? undefined,\n        };\n        // iterate over seen map;\n        const root = this.seen.get(schema);\n        if (!root)\n            throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n        // initialize result with root schema fields\n        // Object.assign(result, seen.cached);\n        // returns a ref to the schema\n        // defId will be empty if the ref points to an external schema (or #)\n        const makeURI = (entry) => {\n            // comparing the seen objects because sometimes\n            // multiple schemas map to the same seen object.\n            // e.g. lazy\n            // external is configured\n            const defsSegment = this.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n            if (params.external) {\n                const externalId = params.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${this.counter++}`;\n                // check if schema is in the external registry\n                const uriGenerator = params.external.uri ?? ((id) => id);\n                if (externalId) {\n                    return { ref: uriGenerator(externalId) };\n                }\n                // otherwise, add to __shared\n                const id = entry[1].defId ?? entry[1].schema.id ?? `schema${this.counter++}`;\n                entry[1].defId = id; // set defId so it will be reused if needed\n                return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n            }\n            if (entry[1] === root) {\n                return { ref: \"#\" };\n            }\n            // self-contained schema\n            const uriPrefix = `#`;\n            const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n            const defId = entry[1].schema.id ?? `__schema${this.counter++}`;\n            return { defId, ref: defUriPrefix + defId };\n        };\n        // stored cached version in `def` property\n        // remove all properties, set $ref\n        const extractToDef = (entry) => {\n            // if the schema is already a reference, do not extract it\n            if (entry[1].schema.$ref) {\n                return;\n            }\n            const seen = entry[1];\n            const { ref, defId } = makeURI(entry);\n            seen.def = { ...seen.schema };\n            // defId won't be set if the schema is a reference to an external schema\n            if (defId)\n                seen.defId = defId;\n            // wipe away all properties except $ref\n            const schema = seen.schema;\n            for (const key in schema) {\n                delete schema[key];\n            }\n            schema.$ref = ref;\n        };\n        // throw on cycles\n        // break cycles\n        if (params.cycles === \"throw\") {\n            for (const entry of this.seen.entries()) {\n                const seen = entry[1];\n                if (seen.cycle) {\n                    throw new Error(\"Cycle detected: \" +\n                        `#/${seen.cycle?.join(\"/\")}/<root>` +\n                        '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n                }\n            }\n        }\n        // extract schemas into $defs\n        for (const entry of this.seen.entries()) {\n            const seen = entry[1];\n            // convert root schema to # $ref\n            if (schema === entry[0]) {\n                extractToDef(entry); // this has special handling for the root schema\n                continue;\n            }\n            // extract schemas that are in the external registry\n            if (params.external) {\n                const ext = params.external.registry.get(entry[0])?.id;\n                if (schema !== entry[0] && ext) {\n                    extractToDef(entry);\n                    continue;\n                }\n            }\n            // extract schemas with `id` meta\n            const id = this.metadataRegistry.get(entry[0])?.id;\n            if (id) {\n                extractToDef(entry);\n                continue;\n            }\n            // break cycles\n            if (seen.cycle) {\n                // any\n                extractToDef(entry);\n                continue;\n            }\n            // extract reused schemas\n            if (seen.count > 1) {\n                if (params.reused === \"ref\") {\n                    extractToDef(entry);\n                    // biome-ignore lint:\n                    continue;\n                }\n            }\n        }\n        // flatten _refs\n        const flattenRef = (zodSchema, params) => {\n            const seen = this.seen.get(zodSchema);\n            const schema = seen.def ?? seen.schema;\n            const _cached = { ...schema };\n            // already seen\n            if (seen.ref === null) {\n                return;\n            }\n            // flatten ref if defined\n            const ref = seen.ref;\n            seen.ref = null; // prevent recursion\n            if (ref) {\n                flattenRef(ref, params);\n                // merge referenced schema into current\n                const refSchema = this.seen.get(ref).schema;\n                if (refSchema.$ref && params.target === \"draft-7\") {\n                    schema.allOf = schema.allOf ?? [];\n                    schema.allOf.push(refSchema);\n                }\n                else {\n                    Object.assign(schema, refSchema);\n                    Object.assign(schema, _cached); // prevent overwriting any fields in the original schema\n                }\n            }\n            // execute overrides\n            if (!seen.isParent)\n                this.override({\n                    zodSchema: zodSchema,\n                    jsonSchema: schema,\n                    path: seen.path ?? [],\n                });\n        };\n        for (const entry of [...this.seen.entries()].reverse()) {\n            flattenRef(entry[0], { target: this.target });\n        }\n        const result = {};\n        if (this.target === \"draft-2020-12\") {\n            result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n        }\n        else if (this.target === \"draft-7\") {\n            result.$schema = \"http://json-schema.org/draft-07/schema#\";\n        }\n        else {\n            console.warn(`Invalid target: ${this.target}`);\n        }\n        if (params.external?.uri) {\n            const id = params.external.registry.get(schema)?.id;\n            if (!id)\n                throw new Error(\"Schema is missing an `id` property\");\n            result.$id = params.external.uri(id);\n        }\n        Object.assign(result, root.def);\n        // build defs object\n        const defs = params.external?.defs ?? {};\n        for (const entry of this.seen.entries()) {\n            const seen = entry[1];\n            if (seen.def && seen.defId) {\n                defs[seen.defId] = seen.def;\n            }\n        }\n        // set definitions in result\n        if (params.external) {\n        }\n        else {\n            if (Object.keys(defs).length > 0) {\n                if (this.target === \"draft-2020-12\") {\n                    result.$defs = defs;\n                }\n                else {\n                    result.definitions = defs;\n                }\n            }\n        }\n        try {\n            // this \"finalizes\" this schema and ensures all cycles are removed\n            // each call to .emit() is functionally independent\n            // though the seen map is shared\n            return JSON.parse(JSON.stringify(result));\n        }\n        catch (_err) {\n            throw new Error(\"Error converting schema to JSON.\");\n        }\n    }\n}\nexport function toJSONSchema(input, _params) {\n    if (input instanceof $ZodRegistry) {\n        const gen = new JSONSchemaGenerator(_params);\n        const defs = {};\n        for (const entry of input._idmap.entries()) {\n            const [_, schema] = entry;\n            gen.process(schema);\n        }\n        const schemas = {};\n        const external = {\n            registry: input,\n            uri: _params?.uri,\n            defs,\n        };\n        for (const entry of input._idmap.entries()) {\n            const [key, schema] = entry;\n            schemas[key] = gen.emit(schema, {\n                ..._params,\n                external,\n            });\n        }\n        if (Object.keys(defs).length > 0) {\n            const defsSegment = gen.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n            schemas.__shared = {\n                [defsSegment]: defs,\n            };\n        }\n        return { schemas };\n    }\n    const gen = new JSONSchemaGenerator(_params);\n    gen.process(input);\n    return gen.emit(input, _params);\n}\nfunction isTransforming(_schema, _ctx) {\n    const ctx = _ctx ?? { seen: new Set() };\n    if (ctx.seen.has(_schema))\n        return false;\n    ctx.seen.add(_schema);\n    const schema = _schema;\n    const def = schema._zod.def;\n    switch (def.type) {\n        case \"string\":\n        case \"number\":\n        case \"bigint\":\n        case \"boolean\":\n        case \"date\":\n        case \"symbol\":\n        case \"undefined\":\n        case \"null\":\n        case \"any\":\n        case \"unknown\":\n        case \"never\":\n        case \"void\":\n        case \"literal\":\n        case \"enum\":\n        case \"nan\":\n        case \"file\":\n        case \"template_literal\":\n            return false;\n        case \"array\": {\n            return isTransforming(def.element, ctx);\n        }\n        case \"object\": {\n            for (const key in def.shape) {\n                if (isTransforming(def.shape[key], ctx))\n                    return true;\n            }\n            return false;\n        }\n        case \"union\": {\n            for (const option of def.options) {\n                if (isTransforming(option, ctx))\n                    return true;\n            }\n            return false;\n        }\n        case \"intersection\": {\n            return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n        }\n        case \"tuple\": {\n            for (const item of def.items) {\n                if (isTransforming(item, ctx))\n                    return true;\n            }\n            if (def.rest && isTransforming(def.rest, ctx))\n                return true;\n            return false;\n        }\n        case \"record\": {\n            return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n        }\n        case \"map\": {\n            return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n        }\n        case \"set\": {\n            return isTransforming(def.valueType, ctx);\n        }\n        // inner types\n        case \"promise\":\n        case \"optional\":\n        case \"nonoptional\":\n        case \"nullable\":\n        case \"readonly\":\n            return isTransforming(def.innerType, ctx);\n        case \"lazy\":\n            return isTransforming(def.getter(), ctx);\n        case \"default\": {\n            return isTransforming(def.innerType, ctx);\n        }\n        case \"prefault\": {\n            return isTransforming(def.innerType, ctx);\n        }\n        case \"custom\": {\n            return false;\n        }\n        case \"transform\": {\n            return true;\n        }\n        case \"pipe\": {\n            return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n        }\n        case \"success\": {\n            return false;\n        }\n        case \"catch\": {\n            return false;\n        }\n        default:\n            def;\n    }\n    throw new Error(`Unknown schema type: ${def.type}`);\n}\n", "export {};\n", "export * from \"./core.js\";\nexport * from \"./parse.js\";\nexport * from \"./errors.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./versions.js\";\nexport * as util from \"./util.js\";\nexport * as regexes from \"./regexes.js\";\nexport * as locales from \"../locales/index.js\";\nexport * from \"./registries.js\";\nexport * from \"./doc.js\";\nexport * from \"./function.js\";\nexport * from \"./api.js\";\nexport * from \"./to-json-schema.js\";\nexport * as JSONSchema from \"./json-schema.js\";\n", "export { _lt as lt, _lte as lte, _gt as gt, _gte as gte, _positive as positive, _negative as negative, _nonpositive as nonpositive, _nonnegative as nonnegative, _multipleOf as multipleOf, _maxSize as maxSize, _minSize as minSize, _size as size, _maxLength as maxLength, _minLength as minLength, _length as length, _regex as regex, _lowercase as lowercase, _uppercase as uppercase, _includes as includes, _startsWith as startsWith, _endsWith as endsWith, _property as property, _mime as mime, _overwrite as overwrite, _normalize as normalize, _trim as trim, _toLowerCase as toLowerCase, _toUpperCase as toUpperCase, } from \"../core/index.js\";\n", "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n    return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n    return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n    return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n    return core._isoDuration(ZodISODuration, params);\n}\n", "import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nconst initializer = (inst, issues) => {\n    $ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    Object.defineProperties(inst, {\n        format: {\n            value: (mapper) => core.formatError(inst, mapper),\n            // enumerable: false,\n        },\n        flatten: {\n            value: (mapper) => core.flattenError(inst, mapper),\n            // enumerable: false,\n        },\n        addIssue: {\n            value: (issue) => inst.issues.push(issue),\n            // enumerable: false,\n        },\n        addIssues: {\n            value: (issues) => inst.issues.push(...issues),\n            // enumerable: false,\n        },\n        isEmpty: {\n            get() {\n                return inst.issues.length === 0;\n            },\n            // enumerable: false,\n        },\n    });\n    // Object.defineProperty(inst, \"isEmpty\", {\n    //   get() {\n    //     return inst.issues.length === 0;\n    //   },\n    // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n", "import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n", "import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n    core.$ZodType.init(inst, def);\n    inst.def = def;\n    Object.defineProperty(inst, \"_def\", { value: def });\n    // base methods\n    inst.check = (...checks) => {\n        return inst.clone({\n            ...def,\n            checks: [\n                ...(def.checks ?? []),\n                ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }\n        // { parent: true }\n        );\n    };\n    inst.clone = (def, params) => core.clone(inst, def, params);\n    inst.brand = () => inst;\n    inst.register = ((reg, meta) => {\n        reg.add(inst, meta);\n        return inst;\n    });\n    // parsing\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.spa = inst.safeParseAsync;\n    // refinements\n    inst.refine = (check, params) => inst.check(refine(check, params));\n    inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n    inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n    // wrappers\n    inst.optional = () => optional(inst);\n    inst.nullable = () => nullable(inst);\n    inst.nullish = () => optional(nullable(inst));\n    inst.nonoptional = (params) => nonoptional(inst, params);\n    inst.array = () => array(inst);\n    inst.or = (arg) => union([inst, arg]);\n    inst.and = (arg) => intersection(inst, arg);\n    inst.transform = (tx) => pipe(inst, transform(tx));\n    inst.default = (def) => _default(inst, def);\n    inst.prefault = (def) => prefault(inst, def);\n    // inst.coalesce = (def, params) => coalesce(inst, def, params);\n    inst.catch = (params) => _catch(inst, params);\n    inst.pipe = (target) => pipe(inst, target);\n    inst.readonly = () => readonly(inst);\n    // meta\n    inst.describe = (description) => {\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, { description });\n        return cl;\n    };\n    Object.defineProperty(inst, \"description\", {\n        get() {\n            return core.globalRegistry.get(inst)?.description;\n        },\n        configurable: true,\n    });\n    inst.meta = (...args) => {\n        if (args.length === 0) {\n            return core.globalRegistry.get(inst);\n        }\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, args[0]);\n        return cl;\n    };\n    // helpers\n    inst.isOptional = () => inst.safeParse(undefined).success;\n    inst.isNullable = () => inst.safeParse(null).success;\n    return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodType.init(inst, def);\n    const bag = inst._zod.bag;\n    inst.format = bag.format ?? null;\n    inst.minLength = bag.minimum ?? null;\n    inst.maxLength = bag.maximum ?? null;\n    // validations\n    inst.regex = (...args) => inst.check(checks.regex(...args));\n    inst.includes = (...args) => inst.check(checks.includes(...args));\n    inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n    inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n    inst.min = (...args) => inst.check(checks.minLength(...args));\n    inst.max = (...args) => inst.check(checks.maxLength(...args));\n    inst.length = (...args) => inst.check(checks.length(...args));\n    inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n    inst.lowercase = (params) => inst.check(checks.lowercase(params));\n    inst.uppercase = (params) => inst.check(checks.uppercase(params));\n    // transforms\n    inst.trim = () => inst.check(checks.trim());\n    inst.normalize = (...args) => inst.check(checks.normalize(...args));\n    inst.toLowerCase = () => inst.check(checks.toLowerCase());\n    inst.toUpperCase = () => inst.check(checks.toUpperCase());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    _ZodString.init(inst, def);\n    inst.email = (params) => inst.check(core._email(ZodEmail, params));\n    inst.url = (params) => inst.check(core._url(ZodURL, params));\n    inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n    inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n    inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n    inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n    inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n    inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n    inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n    inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n    inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n    inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n    inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n    inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n    inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n    inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n    inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n    inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n    inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n    // iso\n    inst.datetime = (params) => inst.check(iso.datetime(params));\n    inst.date = (params) => inst.check(iso.date(params));\n    inst.time = (params) => inst.check(iso.time(params));\n    inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n    return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodURL, params);\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n    return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodIPv4, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.int = (params) => inst.check(int(params));\n    inst.safe = (params) => inst.check(int(params));\n    inst.positive = (params) => inst.check(checks.gt(0, params));\n    inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n    inst.negative = (params) => inst.check(checks.lt(0, params));\n    inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n    // inst.finite = (params) => inst.check(core.finite(params));\n    inst.finite = () => inst;\n    const bag = inst._zod.bag;\n    inst.minValue =\n        Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n    inst.maxValue =\n        Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n    inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n    inst.isFinite = true;\n    inst.format = bag.format ?? null;\n});\nexport function number(params) {\n    return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function boolean(params) {\n    return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n    inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n    inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n    inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    const bag = inst._zod.bag;\n    inst.minValue = bag.minimum ?? null;\n    inst.maxValue = bag.maximum ?? null;\n    inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n    return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function symbol(params) {\n    return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _null(params) {\n    return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function any() {\n    return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function unknown() {\n    return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function never(params) {\n    return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _void(params) {\n    return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    const c = inst._zod.bag;\n    inst.minDate = c.minimum ? new Date(c.minimum) : null;\n    inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n    return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodType.init(inst, def);\n    inst.element = def.element;\n    inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n    inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n    inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n    inst.length = (len, params) => inst.check(checks.length(len, params));\n    inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n    return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return literal(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n    core.$ZodObject.init(inst, def);\n    ZodType.init(inst, def);\n    util.defineLazy(inst, \"shape\", () => def.shape);\n    inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n    inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n    inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    // inst.nonstrict = () => inst.clone({ ...inst._zod.def, catchall: api.unknown() });\n    inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n    inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n    inst.extend = (incoming) => {\n        return util.extend(inst, incoming);\n    };\n    inst.merge = (other) => util.merge(inst, other);\n    inst.pick = (mask) => util.pick(inst, mask);\n    inst.omit = (mask) => util.omit(inst, mask);\n    inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n    inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        ...util.normalizeParams(params),\n    };\n    return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        get shape() {\n            util.assignProp(this, \"shape\", { ...shape });\n            return this.shape;\n        },\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodType.init(inst, def);\n    inst.options = def.options;\n});\nexport function union(options, params) {\n    return new ZodUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new ZodDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function intersection(left, right) {\n    return new ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodType.init(inst, def);\n    inst.rest = (rest) => inst.clone({\n        ...inst._zod.def,\n        rest: rest,\n    });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType: union([keyType, never()]),\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n    return new ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodType.init(inst, def);\n    inst.enum = def.entries;\n    inst.options = Object.values(def.entries);\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nexport function literal(value, params) {\n    return new ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n    return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = inst);\n                _issue.continue ?? (_issue.continue = true);\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        payload.value = output;\n        return payload;\n    };\n});\nexport function transform(fn) {\n    return new ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n    return new ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n    return new ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n        },\n    });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n    return new ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n    return new ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function nan(params) {\n    return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodType.init(inst, def);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nexport function pipe(in_, out) {\n    return new ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function readonly(innerType) {\n    return new ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n    return new ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n    return new ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodType.init(inst, def);\n});\n// custom checks\nexport function check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function custom(fn, _params) {\n    return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n    const ch = check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort);\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    });\n    return ch;\n}\nfunction _instanceof(cls, params = {\n    error: `Input not instance of ${cls.name}`,\n}) {\n    const inst = new ZodCustom({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Pipe: ZodPipe,\n    Boolean: ZodBoolean,\n    String: ZodString,\n    Transform: ZodTransform,\n}, ...args);\nexport function json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n    return pipe(transform(fn), schema);\n}\n", "// Zod 3 compat layer\nimport * as core from \"../core/index.js\";\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexport const ZodIssueCode = {\n    invalid_type: \"invalid_type\",\n    too_big: \"too_big\",\n    too_small: \"too_small\",\n    invalid_format: \"invalid_format\",\n    not_multiple_of: \"not_multiple_of\",\n    unrecognized_keys: \"unrecognized_keys\",\n    invalid_union: \"invalid_union\",\n    invalid_key: \"invalid_key\",\n    invalid_element: \"invalid_element\",\n    invalid_value: \"invalid_value\",\n    custom: \"custom\",\n};\nexport { $brand, config } from \"../core/index.js\";\n/** @deprecated Use `z.config(params)` instead. */\nexport function setErrorMap(map) {\n    core.config({\n        customError: map,\n    });\n}\n/** @deprecated Use `z.config()` instead. */\nexport function getErrorMap() {\n    return core.config().customError;\n}\n", "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport function string(params) {\n    return core._coercedString(schemas.ZodString, params);\n}\nexport function number(params) {\n    return core._coercedNumber(schemas.ZodNumber, params);\n}\nexport function boolean(params) {\n    return core._coercedBoolean(schemas.ZodBoolean, params);\n}\nexport function bigint(params) {\n    return core._coercedBigint(schemas.ZodBigInt, params);\n}\nexport function date(params) {\n    return core._coercedDate(schemas.ZodDate, params);\n}\n", "export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, function, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, toJSONSchema, TimePrecision, NEVER, } from \"../core/index.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n", "import * as z from \"./external.js\";\nexport { z };\nexport * from \"./external.js\";\nexport default z;\n", "import z4 from \"./classic/index.js\";\nexport * from \"./classic/index.js\";\nexport default z4;\n", "//# sourceMappingURL=operations.js.map", "export * from './alias.ts';\nexport * from './column-builder.ts';\nexport * from './column.ts';\nexport * from './entity.ts';\nexport * from './errors.ts';\nexport * from './logger.ts';\nexport * from './operations.ts';\nexport * from './query-promise.ts';\nexport * from './relations.ts';\nexport * from './sql/index.ts';\nexport * from './subquery.ts';\nexport * from './table.ts';\nexport * from './utils.ts';\nexport * from './view-common.ts';\n", null, null, null, null, "import { pgTable, text, serial, timestamp } from \"drizzle-orm/pg-core\";\nimport { createInsertSchema } from \"drizzle-zod\";\nimport { z } from \"zod/v4\";\n\nexport const adminContentTable = pgTable(\"admin_content\", {\n  id: serial(\"id\").primaryKey(),\n  type: text(\"type\").notNull(),\n  label: text(\"label\").notNull(),\n  value: text(\"value\").notNull(),\n  createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport const insertAdminContentSchema = createInsertSchema(adminContentTable).omit({\n  id: true,\n  createdAt: true,\n});\nexport type InsertAdminContent = z.infer<typeof insertAdminContentSchema>;\nexport type AdminContent = typeof adminContentTable.$inferSelect;\n", "import { pgTable, text, serial, timestamp, bigint } from \"drizzle-orm/pg-core\";\nimport { createInsertSchema, createSelectSchema } from \"drizzle-zod\";\nimport { z } from \"zod/v4\";\n\nexport const userExportsTable = pgTable(\"user_exports\", {\n  id: serial(\"id\").primaryKey(),\n  userId: text(\"user_id\").notNull(),\n  filename: text(\"filename\").notNull(),\n  objectPath: text(\"object_path\").notNull(),\n  format: text(\"format\").notNull(),\n  fileSizeBytes: bigint(\"file_size_bytes\", { mode: \"number\" }).notNull().default(0),\n  createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  jobId: text(\"job_id\"),\n  manifest: text(\"manifest\"),\n});\n\nexport const insertUserExportSchema = createInsertSchema(userExportsTable).omit({\n  id: true,\n  createdAt: true,\n});\nexport const selectUserExportSchema = createSelectSchema(userExportsTable);\n\nexport type InsertUserExport = z.infer<typeof insertUserExportSchema>;\nexport type UserExport = typeof userExportsTable.$inferSelect;\n", "import { pgTable, text, serial, timestamp, boolean } from \"drizzle-orm/pg-core\";\nimport { createInsertSchema, createSelectSchema } from \"drizzle-zod\";\nimport { z } from \"zod/v4\";\n\nexport const CURRENT_TOS_VERSION = \"2026-05\";\n\nexport const userAgreementsTable = pgTable(\"user_agreements\", {\n  id: serial(\"id\").primaryKey(),\n  userId: text(\"user_id\").notNull(),\n  tosVersion: text(\"tos_version\").notNull(),\n  birthDate: text(\"birth_date\").notNull(),\n  profileType: text(\"profile_type\").notNull(),\n  ipHash: text(\"ip_hash\").notNull(),\n  isAdult: boolean(\"is_adult\").notNull().default(false),\n  acceptedAt: timestamp(\"accepted_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport const insertUserAgreementSchema = createInsertSchema(userAgreementsTable).omit({\n  id: true,\n  acceptedAt: true,\n});\nexport const selectUserAgreementSchema = createSelectSchema(userAgreementsTable);\nexport type InsertUserAgreement = z.infer<typeof insertUserAgreementSchema>;\nexport type UserAgreement = typeof userAgreementsTable.$inferSelect;\n\nexport const dmcaClaimsTable = pgTable(\"dmca_claims\", {\n  id: serial(\"id\").primaryKey(),\n  claimantName: text(\"claimant_name\").notNull(),\n  claimantEmail: text(\"claimant_email\").notNull(),\n  contentUrl: text(\"content_url\").notNull(),\n  description: text(\"description\").notNull(),\n  status: text(\"status\").notNull().default(\"pending\"),\n  submittedAt: timestamp(\"submitted_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport const insertDmcaClaimSchema = createInsertSchema(dmcaClaimsTable).omit({\n  id: true,\n  status: true,\n  submittedAt: true,\n});\nexport const selectDmcaClaimSchema = createSelectSchema(dmcaClaimsTable);\nexport type InsertDmcaClaim = z.infer<typeof insertDmcaClaimSchema>;\nexport type DmcaClaim = typeof dmcaClaimsTable.$inferSelect;\n", "import { pgTable, text, serial, timestamp, uniqueIndex } from \"drizzle-orm/pg-core\";\nimport { createInsertSchema, createSelectSchema } from \"drizzle-zod\";\nimport { z } from \"zod/v4\";\n\nexport const socialConnectionsTable = pgTable(\n  \"social_connections\",\n  {\n    id: serial(\"id\").primaryKey(),\n    userId: text(\"user_id\").notNull(),\n    platform: text(\"platform\").notNull(),\n    accessToken: text(\"access_token\").notNull(),\n    refreshToken: text(\"refresh_token\"),\n    expiresAt: timestamp(\"expires_at\", { withTimezone: true }),\n    channelId: text(\"channel_id\"),\n    channelName: text(\"channel_name\"),\n    channelAvatar: text(\"channel_avatar\"),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n    updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (table) => [\n    uniqueIndex(\"social_connections_user_platform_uniq\").on(table.userId, table.platform),\n  ],\n);\n\nexport const insertSocialConnectionSchema = createInsertSchema(socialConnectionsTable).omit({\n  id: true,\n  createdAt: true,\n  updatedAt: true,\n});\nexport const selectSocialConnectionSchema = createSelectSchema(socialConnectionsTable);\n\nexport type InsertSocialConnection = z.infer<typeof insertSocialConnectionSchema>;\nexport type SocialConnection = typeof socialConnectionsTable.$inferSelect;\n", "import { pgTable, text, serial, timestamp, boolean } from \"drizzle-orm/pg-core\";\nimport { createInsertSchema, createSelectSchema } from \"drizzle-zod\";\nimport { z } from \"zod/v4\";\n\nexport const videoContentFlagsTable = pgTable(\"video_content_flags\", {\n  id: serial(\"id\").primaryKey(),\n  uploadSessionId: text(\"upload_session_id\").notNull().unique(),\n  userId: text(\"user_id\").notNull(),\n  bloodDetected: boolean(\"blood_detected\").notNull().default(false),\n  adultConfirmed: boolean(\"adult_confirmed\").notNull().default(false),\n  legalConfirmed: boolean(\"legal_confirmed\").notNull().default(false),\n  analyzedAt: timestamp(\"analyzed_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport const insertVideoContentFlagSchema = createInsertSchema(videoContentFlagsTable).omit({\n  id: true,\n  analyzedAt: true,\n});\nexport const selectVideoContentFlagSchema = createSelectSchema(videoContentFlagsTable);\nexport type InsertVideoContentFlag = z.infer<typeof insertVideoContentFlagSchema>;\nexport type VideoContentFlag = typeof videoContentFlagsTable.$inferSelect;\n", "import { pgTable, text, boolean, integer, real, timestamp, json } from \"drizzle-orm/pg-core\";\nimport { sql } from \"drizzle-orm\";\n\nexport type GearSpecs = Record<string, string | number | boolean | string[]>;\n\n// \u2500\u2500 Gear Catalog \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nexport const gearCatalogTable = pgTable(\"gear_catalog\", {\n  id: text(\"id\").primaryKey(),\n  name: text(\"name\").notNull(),\n  brand: text(\"brand\").notNull(),\n  category: text(\"category\").notNull(),\n  subcategory: text(\"subcategory\").notNull(),\n  price: integer(\"price\").notNull(),\n  description: text(\"description\").notNull().default(\"\"),\n  thumbnailUrl: text(\"thumbnail_url\").notNull().default(\"\"),\n  imageUrls: text(\"image_urls\").array().notNull().default(sql`'{}'::text[]`),\n  specs: json(\"specs\").$type<GearSpecs>().notNull().default({}),\n  storeName: text(\"store_name\").notNull().default(\"\"),\n  affiliateUrl: text(\"affiliate_url\").notNull().default(\"\"),\n  trackingId: text(\"tracking_id\").notNull().default(\"\"),\n  utmSource: text(\"utm_source\").notNull().default(\"hooknbone\"),\n  utmMedium: text(\"utm_medium\").notNull().default(\"affiliate\"),\n  utmCampaign: text(\"utm_campaign\").notNull().default(\"official-gear\"),\n  clickCount: integer(\"click_count\").notNull().default(0),\n  impressionCount: integer(\"impression_count\").notNull().default(0),\n  conversionRate: real(\"conversion_rate\").notNull().default(0),\n  linkStatus: text(\"link_status\").notNull().default(\"unknown\"),\n  linkCheckedAt: timestamp(\"link_checked_at\", { withTimezone: true }),\n  status: text(\"status\").notNull().default(\"published\"),\n  featured: boolean(\"featured\").notNull().default(false),\n  position: integer(\"position\").notNull().default(0),\n  createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport type GearCatalogRow = typeof gearCatalogTable.$inferSelect;\n\n// \u2500\u2500 Used Listings (P2P) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nexport const usedListingsTable = pgTable(\"used_listings\", {\n  id: text(\"id\").primaryKey(),\n  name: text(\"name\").notNull(),\n  price: integer(\"price\").notNull(),\n  condition: text(\"condition\").notNull(),\n  seller: text(\"seller\").notNull(),\n  location: text(\"location\").notNull(),\n  status: text(\"status\").notNull().default(\"pending\"),\n  postedAt: timestamp(\"posted_at\", { withTimezone: true }).notNull(),\n  category: text(\"category\").notNull(),\n  imageUrls: text(\"image_urls\").array().notNull().default(sql`'{}'::text[]`),\n  userId: text(\"user_id\"),\n  createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport type UsedListingRow = typeof usedListingsTable.$inferSelect;\n\n// \u2500\u2500 Moderation Flags \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nexport const moderationFlagsTable = pgTable(\"moderation_flags\", {\n  id: text(\"id\").primaryKey(),\n  contentType: text(\"content_type\").notNull(),\n  contentPreview: text(\"content_preview\").notNull(),\n  reason: text(\"reason\").notNull(),\n  reporter: text(\"reporter\").notNull(),\n  reportedUser: text(\"reported_user\").notNull(),\n  reportedAt: timestamp(\"reported_at\", { withTimezone: true }).notNull(),\n  status: text(\"status\").notNull().default(\"pending\"),\n  createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport type ModerationFlagRow = typeof moderationFlagsTable.$inferSelect;\n\n// \u2500\u2500 Outfitters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nexport const outfittersTable = pgTable(\"outfitters\", {\n  id: text(\"id\").primaryKey(),\n  name: text(\"name\").notNull(),\n  guide: text(\"guide\").notNull(),\n  location: text(\"location\").notNull(),\n  state: text(\"state\").notNull(),\n  targetSpecies: json(\"target_species\").notNull().default([]),\n  imageKey: text(\"image_key\").notNull().default(\"\"),\n  photos: json(\"photos\").notNull().default([]),\n  rating: real(\"rating\").notNull().default(0),\n  reviewCount: integer(\"review_count\").notNull().default(0),\n  pricePerDay: integer(\"price_per_day\").notNull().default(0),\n  category: text(\"category\").notNull().default(\"hunting\"),\n  status: text(\"status\").notNull().default(\"pending\"),\n  featured: boolean(\"featured\").notNull().default(false),\n  bio: text(\"bio\").notNull().default(\"\"),\n  email: text(\"email\").notNull().default(\"\"),\n  phone: text(\"phone\").notNull().default(\"\"),\n  website: text(\"website\").notNull().default(\"\"),\n  yearsInOperation: integer(\"years_in_operation\").notNull().default(0),\n  groupSize: text(\"group_size\").notNull().default(\"\"),\n  tripsInclude: json(\"trips_include\").notNull().default([]),\n  seasons: json(\"seasons\").notNull().default([]),\n  licenses: json(\"licenses\").notNull().default([]),\n  reviews: json(\"reviews\").notNull().default([]),\n  submittedAt: timestamp(\"submitted_at\", { withTimezone: true }),\n  approvedAt: timestamp(\"approved_at\", { withTimezone: true }),\n  userId: text(\"user_id\"),\n  createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport type OutfitterRow = typeof outfittersTable.$inferSelect;\n", "import { pgTable, text, serial, timestamp, unique, index } from \"drizzle-orm/pg-core\";\nimport { createInsertSchema, createSelectSchema } from \"drizzle-zod\";\nimport { z } from \"zod/v4\";\n\nexport const REPORT_CATEGORIES = [\n  \"illegal_activity\",\n  \"animal_cruelty\",\n  \"copyright_infringement\",\n  \"spam\",\n] as const;\nexport type ReportCategory = (typeof REPORT_CATEGORIES)[number];\n\nexport const CONTENT_VISIBILITY_VALUES = [\"visible\", \"hidden\", \"removed\"] as const;\nexport type ContentVisibility = (typeof CONTENT_VISIBILITY_VALUES)[number];\n\nexport const APPEAL_STATUS_VALUES = [\"pending\", \"approved\", \"rejected\"] as const;\nexport type AppealStatus = (typeof APPEAL_STATUS_VALUES)[number];\n\nexport const videoReportsTable = pgTable(\n  \"video_reports\",\n  {\n    id: serial(\"id\").primaryKey(),\n    contentId: text(\"content_id\").notNull(),\n    contentType: text(\"content_type\").notNull().default(\"video\"),\n    reporterId: text(\"reporter_id\").notNull(),\n    category: text(\"category\").notNull(),\n    description: text(\"description\"),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => ({\n    uniqueReporterContent: unique(\"uq_reporter_content\").on(t.contentId, t.contentType, t.reporterId),\n  }),\n);\n\nexport const contentVisibilityTable = pgTable(\"content_visibility\", {\n  id: serial(\"id\").primaryKey(),\n  contentId: text(\"content_id\").notNull(),\n  contentType: text(\"content_type\").notNull(),\n  visibility: text(\"visibility\").notNull().default(\"hidden\"),\n  hiddenAt: timestamp(\"hidden_at\", { withTimezone: true }),\n  hiddenReason: text(\"hidden_reason\"),\n});\n\nexport const contentAppealsTable = pgTable(\n  \"content_appeals\",\n  {\n    id: serial(\"id\").primaryKey(),\n    contentId: text(\"content_id\").notNull(),\n    contentType: text(\"content_type\").notNull().default(\"video\"),\n    appellantId: text(\"appellant_id\").notNull(),\n    reason: text(\"reason\").notNull(),\n    status: text(\"status\").notNull().default(\"pending\"),\n    reviewedBy: text(\"reviewed_by\"),\n    reviewedAt: timestamp(\"reviewed_at\", { withTimezone: true }),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => ({\n    uniqueAppellantContent: unique(\"uq_appellant_content\").on(t.contentId, t.contentType, t.appellantId),\n    idxAppealStatus: index(\"idx_appeal_status\").on(t.status),\n    idxAppealAppellant: index(\"idx_appeal_appellant\").on(t.appellantId),\n  }),\n);\n\nexport const insertVideoReportSchema = createInsertSchema(videoReportsTable).omit({\n  id: true,\n  createdAt: true,\n});\nexport const selectVideoReportSchema = createSelectSchema(videoReportsTable);\nexport type InsertVideoReport = z.infer<typeof insertVideoReportSchema>;\nexport type VideoReport = typeof videoReportsTable.$inferSelect;\n\nexport const insertContentVisibilitySchema = createInsertSchema(contentVisibilityTable).omit({\n  id: true,\n});\nexport const selectContentVisibilitySchema = createSelectSchema(contentVisibilityTable);\nexport type InsertContentVisibility = z.infer<typeof insertContentVisibilitySchema>;\nexport type ContentVisibilityRow = typeof contentVisibilityTable.$inferSelect;\n\nexport const insertContentAppealSchema = createInsertSchema(contentAppealsTable).omit({\n  id: true,\n  createdAt: true,\n  reviewedBy: true,\n  reviewedAt: true,\n  status: true,\n});\nexport const selectContentAppealSchema = createSelectSchema(contentAppealsTable);\nexport type InsertContentAppeal = z.infer<typeof insertContentAppealSchema>;\nexport type ContentAppeal = typeof contentAppealsTable.$inferSelect;\n", "import { index, pgTable, text, timestamp } from \"drizzle-orm/pg-core\";\n\nexport const feedCacheTable = pgTable(\n  \"feed_cache\",\n  {\n    key: text(\"key\").primaryKey(),\n    clipsJson: text(\"clips_json\").notNull(),\n    fetchedAt: timestamp(\"fetched_at\", { withTimezone: true })\n      .notNull()\n      .defaultNow(),\n    expiresAt: timestamp(\"expires_at\", { withTimezone: true }).notNull(),\n  },\n  (table) => [index(\"feed_cache_expires_at_idx\").on(table.expiresAt)],\n);\n\nexport type FeedCacheRow = typeof feedCacheTable.$inferSelect;\n", "import { pgTable, text, serial, timestamp, uniqueIndex } from \"drizzle-orm/pg-core\";\nimport { createInsertSchema, createSelectSchema } from \"drizzle-zod\";\nimport { z } from \"zod/v4\";\n\nexport const youtubeImportsTable = pgTable(\n  \"youtube_imports\",\n  {\n    id: serial(\"id\").primaryKey(),\n    userId: text(\"user_id\").notNull(),\n    platform: text(\"platform\").notNull().default(\"youtube\"),\n    videoId: text(\"video_id\").notNull(),\n    title: text(\"title\"),\n    thumbnailUrl: text(\"thumbnail_url\"),\n    importedAt: timestamp(\"imported_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (table) => [\n    uniqueIndex(\"platform_imports_user_platform_video_uniq\").on(table.userId, table.platform, table.videoId),\n  ],\n);\n\nexport const insertYoutubeImportSchema = createInsertSchema(youtubeImportsTable).omit({\n  id: true,\n  importedAt: true,\n});\nexport const selectYoutubeImportSchema = createSelectSchema(youtubeImportsTable);\n\nexport type InsertYoutubeImport = z.infer<typeof insertYoutubeImportSchema>;\nexport type YoutubeImport = typeof youtubeImportsTable.$inferSelect;\n", "import { pgTable, text, serial, timestamp, integer, jsonb, index } from \"drizzle-orm/pg-core\";\nimport { createInsertSchema, createSelectSchema } from \"drizzle-zod\";\nimport { z } from \"zod/v4\";\n\nexport const userVideosTable = pgTable(\"user_videos\", {\n  id: serial(\"id\").primaryKey(),\n  userId: text(\"user_id\").notNull(),\n  title: text(\"title\").notNull(),\n  creator: text(\"creator\").notNull(),\n  creatorHandle: text(\"creator_handle\").notNull(),\n  videoUrl: text(\"video_url\").notNull(),\n  thumbnailUrl: text(\"thumbnail_url\"),\n  thumbnailKey: text(\"thumbnail_key\").notNull().default(\"deer\"),\n  species: text(\"species\"),\n  locationState: text(\"location_state\"),\n  locationCountry: text(\"location_country\"),\n  weightSize: text(\"weight_size\"),\n  category: text(\"category\").notNull().default(\"both\"),\n  description: text(\"description\"),\n  uploadSessionId: text(\"upload_session_id\"),\n  sourcePlatform: text(\"source_platform\"),\n  sourceVideoId: text(\"source_video_id\"),\n  embedUrl: text(\"embed_url\"),\n  publishedAt: timestamp(\"published_at\", { withTimezone: true }),\n  tags: jsonb(\"tags\").$type<string[]>().default([]),\n  viewCount: integer(\"view_count\"),\n  externalLikeCount: integer(\"external_like_count\"),\n  relevanceScore: integer(\"relevance_score\"),\n  ingestionSource: text(\"ingestion_source\"),\n  rightsMetadata: jsonb(\"rights_metadata\").$type<Record<string, unknown>>(),\n  /** hook | shot (9:16 vertical) | video (16:9 landscape) */\n  videoFormat: text(\"video_format\"),\n  postProcessStatus: text(\"post_process_status\").notNull().default(\"pending\"),\n  postProcessedAt: timestamp(\"post_processed_at\", { withTimezone: true }),\n  postProcessVersion: integer(\"post_process_version\").notNull().default(0),\n  enrichmentMetadata: jsonb(\"enrichment_metadata\").$type<Record<string, unknown>>().default({}),\n  sourceUrl: text(\"source_url\"),\n  creatorUrl: text(\"creator_url\"),\n  durationSeconds: integer(\"duration_seconds\"),\n  language: text(\"language\"),\n  retrievedAt: timestamp(\"retrieved_at\", { withTimezone: true }),\n  pinnedAt: timestamp(\"pinned_at\", { withTimezone: true }),\n  createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n}, (t) => ({\n  idxPublishedAt: index(\"idx_user_videos_published_at\").on(t.publishedAt),\n  idxRelevance: index(\"idx_user_videos_relevance_score\").on(t.relevanceScore),\n  idxIngestionSource: index(\"idx_user_videos_ingestion_source\").on(t.ingestionSource),\n  idxViewCount: index(\"idx_user_videos_view_count\").on(t.viewCount),\n}));\n\nexport const insertUserVideoSchema = createInsertSchema(userVideosTable).omit({\n  id: true,\n  createdAt: true,\n});\nexport const selectUserVideoSchema = createSelectSchema(userVideosTable);\n\nexport type InsertUserVideo = z.infer<typeof insertUserVideoSchema>;\nexport type UserVideo = typeof userVideosTable.$inferSelect;\n", "import { pgTable, text, serial, timestamp, unique, integer } from \"drizzle-orm/pg-core\";\nimport { createInsertSchema, createSelectSchema } from \"drizzle-zod\";\nimport { z } from \"zod/v4\";\n\nexport const feedLikesTable = pgTable(\n  \"feed_likes\",\n  {\n    id: serial(\"id\").primaryKey(),\n    clipId: text(\"clip_id\").notNull(),\n    userId: text(\"user_id\").notNull(),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => ({\n    uniqueUserClip: unique(\"uq_feed_like_user_clip\").on(t.userId, t.clipId),\n  }),\n);\n\nexport const feedCommentsTable = pgTable(\"feed_comments\", {\n  id: serial(\"id\").primaryKey(),\n  clipId: text(\"clip_id\").notNull(),\n  userId: text(\"user_id\").notNull(),\n  userDisplay: text(\"user_display\").notNull(),\n  text: text(\"text\").notNull(),\n  createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport const insertFeedLikeSchema = createInsertSchema(feedLikesTable).omit({\n  id: true,\n  createdAt: true,\n});\nexport type InsertFeedLike = z.infer<typeof insertFeedLikeSchema>;\nexport type FeedLike = typeof feedLikesTable.$inferSelect;\n\nexport const insertFeedCommentSchema = createInsertSchema(feedCommentsTable).omit({\n  id: true,\n  createdAt: true,\n});\nexport type InsertFeedComment = z.infer<typeof insertFeedCommentSchema>;\nexport type FeedComment = typeof feedCommentsTable.$inferSelect;\n", "import { pgTable, serial, text, timestamp } from \"drizzle-orm/pg-core\";\n\nexport const seedResetLogTable = pgTable(\"seed_reset_log\", {\n  id: serial(\"id\").primaryKey(),\n  adminUserId: text(\"admin_user_id\").notNull(),\n  adminEmail: text(\"admin_email\").notNull(),\n  resetAt: timestamp(\"reset_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport type SeedResetLogRow = typeof seedResetLogTable.$inferSelect;\n", "import { pgTable, text, serial, timestamp } from \"drizzle-orm/pg-core\";\n\nexport const waitlistEmailsTable = pgTable(\"waitlist_emails\", {\n  id: serial(\"id\").primaryKey(),\n  email: text(\"email\").notNull().unique(),\n  createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport type WaitlistEmail = typeof waitlistEmailsTable.$inferSelect;\n", "import { index, pgTable, text, timestamp } from \"drizzle-orm/pg-core\";\n\nexport const speciesSightingsCacheTable = pgTable(\n  \"species_sightings_cache\",\n  {\n    taxonName: text(\"taxon_name\").primaryKey(),\n    sightingsJson: text(\"sightings_json\").notNull(),\n    fetchedAt: timestamp(\"fetched_at\", { withTimezone: true })\n      .notNull()\n      .defaultNow(),\n  },\n  (table) => [index(\"species_sightings_cache_fetched_at_idx\").on(table.fetchedAt)],\n);\n\nexport type SpeciesSightingsCacheRow = typeof speciesSightingsCacheTable.$inferSelect;\n", "import { integer, pgTable, text } from \"drizzle-orm/pg-core\";\n\nexport const quotaCountersTable = pgTable(\"quota_counters\", {\n  name: text(\"name\").primaryKey(),\n  dateUtc: text(\"date_utc\").notNull(),\n  count: integer(\"count\").notNull().default(0),\n});\n\nexport type QuotaCounterRow = typeof quotaCountersTable.$inferSelect;\n", "import { integer, pgTable, text } from \"drizzle-orm/pg-core\";\n\nexport const quotaDailyLogTable = pgTable(\"quota_daily_log\", {\n  dateUtc: text(\"date_utc\").primaryKey(),\n  count: integer(\"count\").notNull().default(0),\n  cap: integer(\"cap\").notNull().default(0),\n});\n\nexport type QuotaDailyLogRow = typeof quotaDailyLogTable.$inferSelect;\n", "import { index, pgTable, text, timestamp } from \"drizzle-orm/pg-core\";\n\nexport const regulationCacheTable = pgTable(\n  \"regulation_cache\",\n  {\n    jurisdictionId: text(\"jurisdiction_id\").primaryKey(),\n    dataJson: text(\"data_json\").notNull(),\n    sourceUrl: text(\"source_url\").notNull(),\n    fetchedAt: timestamp(\"fetched_at\", { withTimezone: true }).notNull().defaultNow(),\n    expiresAt: timestamp(\"expires_at\", { withTimezone: true }).notNull(),\n  },\n  (table) => [index(\"regulation_cache_expires_at_idx\").on(table.expiresAt)],\n);\n\nexport type RegulationCacheRow = typeof regulationCacheTable.$inferSelect;\n", "import { pgTable, text, serial, timestamp, uniqueIndex } from \"drizzle-orm/pg-core\";\nimport { createInsertSchema } from \"drizzle-zod\";\nimport { z } from \"zod/v4\";\n\nexport const userFavoriteJurisdictionsTable = pgTable(\n  \"user_favorite_jurisdictions\",\n  {\n    id: serial(\"id\").primaryKey(),\n    userId: text(\"user_id\").notNull(),\n    jurisdictionName: text(\"jurisdiction_name\").notNull(),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (table) => [\n    uniqueIndex(\"user_fav_jurisdiction_uniq\").on(table.userId, table.jurisdictionName),\n  ],\n);\n\nexport const insertUserFavoriteJurisdictionSchema = createInsertSchema(\n  userFavoriteJurisdictionsTable,\n).omit({ id: true, createdAt: true });\n\nexport type InsertUserFavoriteJurisdiction = z.infer<typeof insertUserFavoriteJurisdictionSchema>;\nexport type UserFavoriteJurisdiction = typeof userFavoriteJurisdictionsTable.$inferSelect;\n", "import { pgTable, text, integer, timestamp } from \"drizzle-orm/pg-core\";\n\nexport const gearPriceCacheTable = pgTable(\"gear_price_cache\", {\n  id: text(\"id\").primaryKey(),\n  retailPrice: integer(\"retail_price\"),\n  salePrice: integer(\"sale_price\"),\n  source: text(\"source\").notNull().default(\"simulated\"),\n  fetchedAt: timestamp(\"fetched_at\", { withTimezone: true }).notNull().defaultNow(),\n  expiresAt: timestamp(\"expires_at\", { withTimezone: true }).notNull(),\n});\n\nexport type GearPriceCacheRow = typeof gearPriceCacheTable.$inferSelect;\n", "import { pgTable, text, boolean, integer, real, timestamp, json, index } from \"drizzle-orm/pg-core\";\nimport { sql } from \"drizzle-orm\";\n\n/** Affiliate store configuration for the Official Gear hub. */\nexport const gearStoresTable = pgTable(\"gear_stores\", {\n  id: text(\"id\").primaryKey(),\n  name: text(\"name\").notNull(),\n  slug: text(\"slug\").notNull(),\n  baseUrl: text(\"base_url\").notNull().default(\"\"),\n  defaultTrackingId: text(\"default_tracking_id\").notNull().default(\"\"),\n  defaultUtmSource: text(\"default_utm_source\").notNull().default(\"hooknbone\"),\n  defaultUtmMedium: text(\"default_utm_medium\").notNull().default(\"affiliate\"),\n  defaultUtmCampaign: text(\"default_utm_campaign\").notNull().default(\"official-gear\"),\n  active: boolean(\"active\").notNull().default(true),\n  createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport type GearStoreRow = typeof gearStoresTable.$inferSelect;\n\n/** Multi-store price/affiliate offers for comparative shopping. */\nexport const gearOffersTable = pgTable(\n  \"gear_offers\",\n  {\n    id: text(\"id\").primaryKey(),\n    gearId: text(\"gear_id\").notNull(),\n    storeId: text(\"store_id\"),\n    storeName: text(\"store_name\").notNull(),\n    location: text(\"location\").notNull().default(\"US\"),\n    price: integer(\"price\").notNull(),\n    currency: text(\"currency\").notNull().default(\"USD\"),\n    affiliateUrl: text(\"affiliate_url\").notNull(),\n    trackingId: text(\"tracking_id\").notNull().default(\"\"),\n    utmSource: text(\"utm_source\").notNull().default(\"\"),\n    utmMedium: text(\"utm_medium\").notNull().default(\"\"),\n    utmCampaign: text(\"utm_campaign\").notNull().default(\"\"),\n    isPrimary: boolean(\"is_primary\").notNull().default(false),\n    linkStatus: text(\"link_status\").notNull().default(\"unknown\"),\n    linkCheckedAt: timestamp(\"link_checked_at\", { withTimezone: true }),\n    position: integer(\"position\").notNull().default(0),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => [index(\"gear_offers_gear_id_idx\").on(t.gearId)],\n);\n\nexport type GearOfferRow = typeof gearOffersTable.$inferSelect;\n\n/** Stage-one affiliate click events for analytics. */\nexport const gearClickEventsTable = pgTable(\n  \"gear_click_events\",\n  {\n    id: text(\"id\").primaryKey(),\n    gearId: text(\"gear_id\").notNull(),\n    offerId: text(\"offer_id\"),\n    userId: text(\"user_id\"),\n    source: text(\"source\").notNull().default(\"web\"),\n    referrer: text(\"referrer\").notNull().default(\"\"),\n    userAgent: text(\"user_agent\").notNull().default(\"\"),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => [\n    index(\"gear_click_events_gear_id_idx\").on(t.gearId),\n    index(\"gear_click_events_created_at_idx\").on(t.createdAt),\n  ],\n);\n\nexport type GearClickEventRow = typeof gearClickEventsTable.$inferSelect;\n\n/** Pending scraped images awaiting admin approval. */\nexport const gearImageScrapeJobsTable = pgTable(\"gear_image_scrape_jobs\", {\n  id: text(\"id\").primaryKey(),\n  gearId: text(\"gear_id\"),\n  query: text(\"query\").notNull(),\n  sourceUrl: text(\"source_url\").notNull().default(\"\"),\n  candidateUrl: text(\"candidate_url\").notNull().default(\"\"),\n  fallbackUrl: text(\"fallback_url\").notNull().default(\"\"),\n  status: text(\"status\").notNull().default(\"pending\"),\n  error: text(\"error\").notNull().default(\"\"),\n  createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  resolvedAt: timestamp(\"resolved_at\", { withTimezone: true }),\n});\n\nexport type GearImageScrapeJobRow = typeof gearImageScrapeJobsTable.$inferSelect;\n", "import { pgTable, text, timestamp } from \"drizzle-orm/pg-core\";\n\nexport const gscCacheTable = pgTable(\"gsc_cache\", {\n  siteUrl: text(\"site_url\").primaryKey(),\n  dataJson: text(\"data_json\").notNull(),\n  fetchedAt: timestamp(\"fetched_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport type GscCacheRow = typeof gscCacheTable.$inferSelect;\n", "import { integer, pgTable, text, timestamp } from \"drizzle-orm/pg-core\";\n\nexport const youtubeSearchCacheTable = pgTable(\"youtube_search_cache\", {\n  key: text(\"key\").primaryKey(),\n  dataJson: text(\"data_json\").notNull(),\n  fetchedAt: timestamp(\"fetched_at\", { withTimezone: true }).notNull().defaultNow(),\n  ttlMs: integer(\"ttl_ms\").notNull().default(600_000),\n});\n\nexport type YoutubeSearchCacheRow = typeof youtubeSearchCacheTable.$inferSelect;\n", "import { pgTable, text, timestamp } from \"drizzle-orm/pg-core\";\n\nexport const musicSearchCacheTable = pgTable(\"music_search_cache\", {\n  key: text(\"key\").primaryKey(),\n  dataJson: text(\"data_json\").notNull(),\n  fetchedAt: timestamp(\"fetched_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport type MusicSearchCacheRow = typeof musicSearchCacheTable.$inferSelect;\n", "import { integer, pgTable, text, timestamp } from \"drizzle-orm/pg-core\";\n\nexport const adminCacheTable = pgTable(\"admin_cache\", {\n  key: text(\"key\").primaryKey(),\n  dataJson: text(\"data_json\").notNull(),\n  fetchedAt: timestamp(\"fetched_at\", { withTimezone: true }).notNull().defaultNow(),\n  ttlMs: integer(\"ttl_ms\").notNull().default(300_000),\n});\n\nexport type AdminCacheRow = typeof adminCacheTable.$inferSelect;\n", "import { sql } from \"drizzle-orm\";\nimport { boolean, index, jsonb, pgTable, text, timestamp, varchar } from \"drizzle-orm/pg-core\";\n\nexport const sessionsTable = pgTable(\n  \"sessions\",\n  {\n    sid: varchar(\"sid\").primaryKey(),\n    sess: jsonb(\"sess\").notNull(),\n    expire: timestamp(\"expire\").notNull(),\n  },\n  (table) => [index(\"IDX_session_expire\").on(table.expire)],\n);\n\nexport const user = pgTable(\"user\", {\n  id: text(\"id\").primaryKey(),\n  name: text(\"name\").notNull(),\n  email: text(\"email\").notNull().unique(),\n  emailVerified: boolean(\"email_verified\").notNull().default(false),\n  image: text(\"image\"),\n  createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n  updatedAt: timestamp(\"updated_at\").notNull().$onUpdate(() => new Date()),\n  role: text(\"role\").default(\"user\"),\n  banned: boolean(\"banned\").default(false),\n  banReason: text(\"ban_reason\"),\n  banExpires: timestamp(\"ban_expires\"),\n});\n\nexport const session = pgTable(\"session\", {\n  id: text(\"id\").primaryKey(),\n  expiresAt: timestamp(\"expires_at\").notNull(),\n  token: text(\"token\").notNull().unique(),\n  createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n  updatedAt: timestamp(\"updated_at\").notNull().$onUpdate(() => new Date()),\n  ipAddress: text(\"ip_address\"),\n  userAgent: text(\"user_agent\"),\n  userId: text(\"user_id\").notNull().references(() => user.id, { onDelete: \"cascade\" }),\n});\n\nexport const account = pgTable(\"account\", {\n  id: text(\"id\").primaryKey(),\n  accountId: text(\"account_id\").notNull(),\n  providerId: text(\"provider_id\").notNull(),\n  userId: text(\"user_id\").notNull().references(() => user.id, { onDelete: \"cascade\" }),\n  accessToken: text(\"access_token\"),\n  refreshToken: text(\"refresh_token\"),\n  idToken: text(\"id_token\"),\n  accessTokenExpiresAt: timestamp(\"access_token_expires_at\"),\n  refreshTokenExpiresAt: timestamp(\"refresh_token_expires_at\"),\n  scope: text(\"scope\"),\n  password: text(\"password\"),\n  createdAt: timestamp(\"created_at\").notNull().defaultNow(),\n  updatedAt: timestamp(\"updated_at\").notNull().$onUpdate(() => new Date()),\n});\n\nexport const verification = pgTable(\"verification\", {\n  id: text(\"id\").primaryKey(),\n  identifier: text(\"identifier\").notNull(),\n  value: text(\"value\").notNull(),\n  expiresAt: timestamp(\"expires_at\").notNull(),\n  createdAt: timestamp(\"created_at\").defaultNow(),\n  updatedAt: timestamp(\"updated_at\").$onUpdate(() => new Date()),\n});\n\nexport type UpsertUser = typeof user.$inferInsert;\nexport type UserRow = typeof user.$inferSelect;\nexport type SessionRow = typeof sessionsTable.$inferSelect;\n", "import {\n  pgTable,\n  text,\n  timestamp,\n  uuid,\n  unique,\n  index,\n} from \"drizzle-orm/pg-core\";\nimport { createInsertSchema, createSelectSchema } from \"drizzle-zod\";\nimport { z } from \"zod/v4\";\n\nexport const conversationsTable = pgTable(\n  \"conversations\",\n  {\n    id: uuid(\"id\").primaryKey().defaultRandom(),\n    type: text(\"type\").notNull().default(\"dm\"),\n    userAId: text(\"user_a_id\").notNull(),\n    userBId: text(\"user_b_id\").notNull(),\n    lastMessageAt: timestamp(\"last_message_at\", { withTimezone: true }),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => ({\n    uniquePair: unique(\"uq_conversations_user_pair\").on(t.userAId, t.userBId),\n    userAIdx: index(\"idx_conversations_user_a\").on(t.userAId),\n    userBIdx: index(\"idx_conversations_user_b\").on(t.userBId),\n  }),\n);\n\nexport const messagesTable = pgTable(\n  \"messages\",\n  {\n    id: uuid(\"id\").primaryKey().defaultRandom(),\n    conversationId: uuid(\"conversation_id\")\n      .notNull()\n      .references(() => conversationsTable.id, { onDelete: \"cascade\" }),\n    senderId: text(\"sender_id\").notNull(),\n    text: text(\"text\").notNull(),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => ({\n    convCreatedIdx: index(\"idx_messages_conversation_created\").on(\n      t.conversationId,\n      t.createdAt,\n    ),\n  }),\n);\n\nexport const conversationReadsTable = pgTable(\n  \"conversation_reads\",\n  {\n    conversationId: uuid(\"conversation_id\")\n      .notNull()\n      .references(() => conversationsTable.id, { onDelete: \"cascade\" }),\n    userId: text(\"user_id\").notNull(),\n    lastReadAt: timestamp(\"last_read_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => ({\n    uniqueRead: unique(\"uq_conversation_reads\").on(t.conversationId, t.userId),\n  }),\n);\n\nexport const friendshipsTable = pgTable(\n  \"friendships\",\n  {\n    id: uuid(\"id\").primaryKey().defaultRandom(),\n    userAId: text(\"user_a_id\").notNull(),\n    userBId: text(\"user_b_id\").notNull(),\n    status: text(\"status\").notNull().default(\"pending\"),\n    requestedById: text(\"requested_by_id\").notNull(),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => ({\n    uniqueFriendPair: unique(\"uq_friendships_user_pair\").on(t.userAId, t.userBId),\n    userAIdx: index(\"idx_friendships_user_a\").on(t.userAId),\n    userBIdx: index(\"idx_friendships_user_b\").on(t.userBId),\n  }),\n);\n\nexport const insertConversationSchema = createInsertSchema(conversationsTable).omit({\n  id: true,\n  createdAt: true,\n});\nexport const insertMessageSchema = createInsertSchema(messagesTable).omit({\n  id: true,\n  createdAt: true,\n});\nexport const insertFriendshipSchema = createInsertSchema(friendshipsTable).omit({\n  id: true,\n  createdAt: true,\n});\n\nexport type Conversation = typeof conversationsTable.$inferSelect;\nexport type Message = typeof messagesTable.$inferSelect;\nexport type Friendship = typeof friendshipsTable.$inferSelect;\n", "import {\n  pgTable,\n  text,\n  timestamp,\n  uuid,\n  unique,\n  index,\n} from \"drizzle-orm/pg-core\";\nimport { createInsertSchema } from \"drizzle-zod\";\nimport { user } from \"./auth\";\n\n/** Singleton id for the global Campfire room \u2014 seeded in migration 0030. */\nexport const GLOBAL_CAMPFIRE_CONVERSATION_ID =\n  \"00000000-0000-4000-a000-000000000001\";\n\nexport type ChatConversationType = \"GLOBAL_CAMPFIRE\" | \"DIRECT_MESSAGE\";\n\n/**\n * Unified chat rooms (global Campfire + direct messages).\n * Append-only model \u2014 does not replace legacy `conversations` / `campfire_chat`.\n */\nexport const chatConversationsTable = pgTable(\n  \"chat_conversations\",\n  {\n    id: uuid(\"id\").primaryKey().defaultRandom(),\n    type: text(\"type\").notNull().$type<ChatConversationType>(),\n    title: text(\"title\"),\n    lastMessageAt: timestamp(\"last_message_at\", { withTimezone: true }),\n    createdAt: timestamp(\"created_at\", { withTimezone: true })\n      .notNull()\n      .defaultNow(),\n  },\n  (t) => ({\n    typeIdx: index(\"idx_chat_conversations_type\").on(t.type),\n    lastMessageIdx: index(\"idx_chat_conversations_last_message\").on(t.lastMessageAt),\n  }),\n);\n\n/** Many-to-many: users \u2194 chat conversations (primarily for DMs). */\nexport const chatConversationParticipantsTable = pgTable(\n  \"chat_conversation_participants\",\n  {\n    id: uuid(\"id\").primaryKey().defaultRandom(),\n    conversationId: uuid(\"conversation_id\")\n      .notNull()\n      .references(() => chatConversationsTable.id, { onDelete: \"cascade\" }),\n    userId: text(\"user_id\")\n      .notNull()\n      .references(() => user.id, { onDelete: \"cascade\" }),\n    joinedAt: timestamp(\"joined_at\", { withTimezone: true }).notNull().defaultNow(),\n    lastReadAt: timestamp(\"last_read_at\", { withTimezone: true }),\n  },\n  (t) => ({\n    uniqueParticipant: unique(\"uq_chat_conversation_participants\").on(\n      t.conversationId,\n      t.userId,\n    ),\n    userIdx: index(\"idx_chat_participants_user\").on(t.userId),\n    convIdx: index(\"idx_chat_participants_conversation\").on(t.conversationId),\n  }),\n);\n\nexport const chatMessagesTable = pgTable(\n  \"chat_messages\",\n  {\n    id: uuid(\"id\").primaryKey().defaultRandom(),\n    conversationId: uuid(\"conversation_id\")\n      .notNull()\n      .references(() => chatConversationsTable.id, { onDelete: \"cascade\" }),\n    senderId: text(\"sender_id\")\n      .notNull()\n      .references(() => user.id, { onDelete: \"cascade\" }),\n    text: text(\"text\").notNull().default(\"\"),\n    createdAt: timestamp(\"created_at\", { withTimezone: true })\n      .notNull()\n      .defaultNow(),\n  },\n  (t) => ({\n    convCreatedIdx: index(\"idx_chat_messages_conversation_created\").on(\n      t.conversationId,\n      t.createdAt,\n    ),\n    senderIdx: index(\"idx_chat_messages_sender\").on(t.senderId),\n  }),\n);\n\nexport const chatMessageAttachmentsTable = pgTable(\n  \"chat_message_attachments\",\n  {\n    id: uuid(\"id\").primaryKey().defaultRandom(),\n    messageId: uuid(\"message_id\")\n      .notNull()\n      .references(() => chatMessagesTable.id, { onDelete: \"cascade\" }),\n    url: text(\"url\").notNull(),\n    mimeType: text(\"mime_type\"),\n    fileName: text(\"file_name\"),\n    createdAt: timestamp(\"created_at\", { withTimezone: true })\n      .notNull()\n      .defaultNow(),\n  },\n  (t) => ({\n    messageIdx: index(\"idx_chat_message_attachments_message\").on(t.messageId),\n  }),\n);\n\nexport const insertChatConversationSchema = createInsertSchema(\n  chatConversationsTable,\n).omit({ id: true, createdAt: true });\nexport const insertChatMessageSchema = createInsertSchema(chatMessagesTable).omit({\n  id: true,\n  createdAt: true,\n});\nexport const insertChatAttachmentSchema = createInsertSchema(\n  chatMessageAttachmentsTable,\n).omit({ id: true, createdAt: true });\n\nexport type ChatConversation = typeof chatConversationsTable.$inferSelect;\nexport type ChatConversationParticipant =\n  typeof chatConversationParticipantsTable.$inferSelect;\nexport type ChatMessage = typeof chatMessagesTable.$inferSelect;\nexport type ChatMessageAttachment = typeof chatMessageAttachmentsTable.$inferSelect;\n", "import { pgTable, text, integer, timestamp, uniqueIndex, jsonb } from \"drizzle-orm/pg-core\";\nimport { gearCatalogTable } from \"./adminStores\";\nimport { userVideosTable } from \"./userVideos\";\n\n/** Junction table linking user videos to official gear catalog items. */\nexport const videoGearLinksTable = pgTable(\n  \"video_gear_links\",\n  {\n    id: text(\"id\").primaryKey(),\n    videoId: integer(\"video_id\")\n      .notNull()\n      .references(() => userVideosTable.id, { onDelete: \"cascade\" }),\n    gearId: text(\"gear_id\")\n      .notNull()\n      .references(() => gearCatalogTable.id, { onDelete: \"cascade\" }),\n    /** How the link was created: auto (AI) or manual (admin/user) */\n    source: text(\"source\").notNull().default(\"auto\"),\n    /** Keyword that produced the match (for auto links) */\n    matchKeyword: text(\"match_keyword\").notNull().default(\"\"),\n    confidence: integer(\"confidence\").notNull().default(0),\n    detectionMethod: text(\"detection_method\").notNull().default(\"text\"),\n    evidence: jsonb(\"evidence\").$type<Record<string, unknown>>().notNull().default({}),\n    position: integer(\"position\").notNull().default(0),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (table) => [\n    uniqueIndex(\"video_gear_links_video_gear_uidx\").on(table.videoId, table.gearId),\n  ],\n);\n\nexport type VideoGearLink = typeof videoGearLinksTable.$inferSelect;\nexport type InsertVideoGearLink = typeof videoGearLinksTable.$inferInsert;\n", "import { pgTable, text, serial, timestamp, boolean, unique, index, integer } from \"drizzle-orm/pg-core\";\nimport { createInsertSchema, createSelectSchema } from \"drizzle-zod\";\nimport { z } from \"zod/v4\";\n\nexport const SCRAPER_PENDING_STATUS = [\"pending\", \"approved\", \"rejected\"] as const;\nexport type ScraperPendingStatus = (typeof SCRAPER_PENDING_STATUS)[number];\n\n/** Target hashtags configured by admins for the background scraper agent. */\nexport const scraperHashtagsTable = pgTable(\n  \"scraper_hashtags\",\n  {\n    id: serial(\"id\").primaryKey(),\n    hashtag: text(\"hashtag\").notNull(),\n    enabled: boolean(\"enabled\").notNull().default(true),\n    lastScrapedAt: timestamp(\"last_scraped_at\", { withTimezone: true }),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => ({\n    uniqueHashtag: unique(\"uq_scraper_hashtag\").on(t.hashtag),\n    idxEnabled: index(\"idx_scraper_hashtags_enabled\").on(t.enabled),\n  }),\n);\n\n/** Instagram media awaiting admin review before publishing to the public feed. */\nexport const scraperPendingVideosTable = pgTable(\n  \"scraper_pending_videos\",\n  {\n    id: serial(\"id\").primaryKey(),\n    sourceVideoId: text(\"source_video_id\").notNull(),\n    videoUrl: text(\"video_url\").notNull(),\n    thumbnailUrl: text(\"thumbnail_url\"),\n    caption: text(\"caption\"),\n    hashtag: text(\"hashtag\").notNull(),\n    status: text(\"status\").notNull().default(\"pending\"),\n    scrapedAt: timestamp(\"scraped_at\", { withTimezone: true }).notNull().defaultNow(),\n    reviewedAt: timestamp(\"reviewed_at\", { withTimezone: true }),\n    approvedVideoId: integer(\"approved_video_id\"),\n  },\n  (t) => ({\n    uniqueSource: unique(\"uq_scraper_pending_source\").on(t.sourceVideoId),\n    idxStatus: index(\"idx_scraper_pending_status\").on(t.status),\n    idxHashtag: index(\"idx_scraper_pending_hashtag\").on(t.hashtag),\n  }),\n);\n\nexport const insertScraperHashtagSchema = createInsertSchema(scraperHashtagsTable).omit({\n  id: true,\n  createdAt: true,\n  lastScrapedAt: true,\n});\nexport const selectScraperHashtagSchema = createSelectSchema(scraperHashtagsTable);\n\nexport const insertScraperPendingVideoSchema = createInsertSchema(scraperPendingVideosTable).omit({\n  id: true,\n  scrapedAt: true,\n  reviewedAt: true,\n  approvedVideoId: true,\n  status: true,\n});\nexport const selectScraperPendingVideoSchema = createSelectSchema(scraperPendingVideosTable);\n\nexport type ScraperHashtag = typeof scraperHashtagsTable.$inferSelect;\nexport type InsertScraperHashtag = z.infer<typeof insertScraperHashtagSchema>;\nexport type ScraperPendingVideo = typeof scraperPendingVideosTable.$inferSelect;\nexport type InsertScraperPendingVideo = z.infer<typeof insertScraperPendingVideoSchema>;\n", "import {\n  boolean,\n  date,\n  doublePrecision,\n  index,\n  integer,\n  jsonb,\n  pgTable,\n  text,\n  timestamp,\n  uuid,\n} from \"drizzle-orm/pg-core\";\n\nexport const wardenLocationsTable = pgTable(\n  \"warden_locations\",\n  {\n    id: uuid(\"id\").primaryKey().defaultRandom(),\n    slug: text(\"slug\").notNull().unique(),\n    name: text(\"name\").notNull(),\n    type: text(\"type\").notNull(),\n    region: text(\"region\").notNull(),\n    countryCode: text(\"country_code\").notNull().default(\"US\"),\n    coordinates: jsonb(\"coordinates\").notNull().default({ lat: 0, lng: 0 }),\n    agencyName: text(\"agency_name\"),\n    licenseUrl: text(\"license_url\"),\n    regulationsUrl: text(\"regulations_url\"),\n    lat: doublePrecision(\"lat\"),\n    long: doublePrecision(\"long\"),\n    imageUrl: text(\"image_url\"),\n    primarySpecies: text(\"primary_species\").array().notNull().default([]),\n    isFeatured: boolean(\"is_featured\").notNull().default(false),\n    rank: integer(\"rank\"),\n    description: text(\"description\"),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (table) => [\n    index(\"warden_locations_region_idx\").on(table.region),\n    index(\"warden_locations_featured_idx\").on(table.isFeatured, table.rank),\n    index(\"warden_locations_lat_long_idx\").on(table.lat, table.long),\n  ],\n);\n\nexport const wardenRegulationsTable = pgTable(\n  \"warden_regulations\",\n  {\n    id: uuid(\"id\").primaryKey().defaultRandom(),\n    locationId: uuid(\"location_id\")\n      .notNull()\n      .references(() => wardenLocationsTable.id, { onDelete: \"cascade\" }),\n    category: text(\"category\").notNull(),\n    rulesJson: jsonb(\"rules_json\").notNull().default({}),\n    licenseFees: jsonb(\"license_fees\").notNull().default({}),\n    officialLink: text(\"official_link\"),\n    rawText: text(\"raw_text\"),\n    updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (table) => [index(\"warden_regulations_location_idx\").on(table.locationId)],\n);\n\nexport const wardenSeasonsTable = pgTable(\n  \"warden_seasons\",\n  {\n    id: uuid(\"id\").primaryKey().defaultRandom(),\n    locationId: uuid(\"location_id\")\n      .notNull()\n      .references(() => wardenLocationsTable.id, { onDelete: \"cascade\" }),\n    species: text(\"species\").notNull(),\n    category: text(\"category\").notNull(),\n    startDate: date(\"start_date\").notNull(),\n    endDate: date(\"end_date\").notNull(),\n    deadlineDate: date(\"deadline_date\"),\n    seasonType: text(\"season_type\").notNull().default(\"general\"),\n    notes: text(\"notes\"),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (table) => [\n    index(\"warden_seasons_location_idx\").on(table.locationId),\n    index(\"warden_seasons_dates_idx\").on(table.startDate, table.endDate),\n    index(\"warden_seasons_species_idx\").on(table.species),\n  ],\n);\n\nexport type WardenLocationRow = typeof wardenLocationsTable.$inferSelect;\nexport type WardenRegulationRow = typeof wardenRegulationsTable.$inferSelect;\nexport type WardenSeasonRow = typeof wardenSeasonsTable.$inferSelect;\n", "import {\n  boolean,\n  doublePrecision,\n  index,\n  integer,\n  jsonb,\n  pgTable,\n  text,\n  timestamp,\n  uniqueIndex,\n} from \"drizzle-orm/pg-core\";\n\n/** Behavioral + technical events from the public tracking script. */\nexport const analyticsEventsTable = pgTable(\n  \"analytics_events\",\n  {\n    id: text(\"id\").primaryKey(),\n    sessionId: text(\"session_id\").notNull(),\n    eventType: text(\"event_type\").notNull(),\n    pagePath: text(\"page_path\").notNull(),\n    referrer: text(\"referrer\"),\n    utmSource: text(\"utm_source\"),\n    utmMedium: text(\"utm_medium\"),\n    utmCampaign: text(\"utm_campaign\"),\n    scrollDepth: integer(\"scroll_depth\"),\n    durationMs: integer(\"duration_ms\"),\n    metadata: jsonb(\"metadata\"),\n    userAgent: text(\"user_agent\"),\n    isBot: boolean(\"is_bot\").notNull().default(false),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => [\n    uniqueIndex(\"analytics_events_id_uidx\").on(t.id),\n    index(\"analytics_events_created_at_idx\").on(t.createdAt),\n    index(\"analytics_events_session_idx\").on(t.sessionId),\n    index(\"analytics_events_type_idx\").on(t.eventType),\n    index(\"analytics_events_path_idx\").on(t.pagePath),\n  ],\n);\n\n/** Core Web Vitals and client-side performance snapshots. */\nexport const analyticsWebVitalsTable = pgTable(\n  \"analytics_web_vitals\",\n  {\n    id: text(\"id\").primaryKey(),\n    sessionId: text(\"session_id\").notNull(),\n    pagePath: text(\"page_path\").notNull(),\n    lcp: doublePrecision(\"lcp\"),\n    fid: doublePrecision(\"fid\"),\n    cls: doublePrecision(\"cls\"),\n    ttfb: doublePrecision(\"ttfb\"),\n    inp: doublePrecision(\"inp\"),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => [\n    index(\"analytics_web_vitals_created_at_idx\").on(t.createdAt),\n    index(\"analytics_web_vitals_path_idx\").on(t.pagePath),\n  ],\n);\n\n/** Internal LLM / API usage for cost monitoring. */\nexport const analyticsApiUsageTable = pgTable(\n  \"analytics_api_usage\",\n  {\n    id: text(\"id\").primaryKey(),\n    provider: text(\"provider\").notNull(),\n    model: text(\"model\"),\n    endpoint: text(\"endpoint\").notNull(),\n    tokensIn: integer(\"tokens_in\").notNull().default(0),\n    tokensOut: integer(\"tokens_out\").notNull().default(0),\n    latencyMs: integer(\"latency_ms\"),\n    costUsd: doublePrecision(\"cost_usd\"),\n    userId: text(\"user_id\"),\n    metadata: jsonb(\"metadata\"),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => [\n    index(\"analytics_api_usage_created_at_idx\").on(t.createdAt),\n    index(\"analytics_api_usage_provider_idx\").on(t.provider),\n  ],\n);\n\n/** Cached Gemini executive briefs. */\nexport const analyticsInsightsTable = pgTable(\"analytics_insights\", {\n  id: text(\"id\").primaryKey(),\n  periodHours: integer(\"period_hours\").notNull(),\n  summaryJson: jsonb(\"summary_json\").notNull(),\n  narrative: text(\"narrative\").notNull(),\n  generatedAt: timestamp(\"generated_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\n/** Per-path SEO + social metadata overrides. */\nexport const analyticsSeoConfigTable = pgTable(\n  \"analytics_seo_config\",\n  {\n    path: text(\"path\").primaryKey(),\n    ogTitle: text(\"og_title\"),\n    ogDescription: text(\"og_description\"),\n    ogImage: text(\"og_image\"),\n    twitterCard: text(\"twitter_card\"),\n    keywords: text(\"keywords\"),\n    updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n);\n\nexport type AnalyticsEventRow = typeof analyticsEventsTable.$inferSelect;\nexport type AnalyticsWebVitalsRow = typeof analyticsWebVitalsTable.$inferSelect;\nexport type AnalyticsApiUsageRow = typeof analyticsApiUsageTable.$inferSelect;\nexport type AnalyticsInsightRow = typeof analyticsInsightsTable.$inferSelect;\nexport type AnalyticsSeoConfigRow = typeof analyticsSeoConfigTable.$inferSelect;\n", "import { index, jsonb, pgTable, serial, text, timestamp } from \"drizzle-orm/pg-core\";\nimport { createInsertSchema, createSelectSchema } from \"drizzle-zod\";\nimport { z } from \"zod/v4\";\nimport { user } from \"./auth\";\n\nexport const BETA_FEEDBACK_STATUSES = [\"unread\", \"read\", \"resolved\"] as const;\nexport type BetaFeedbackStatus = (typeof BETA_FEEDBACK_STATUSES)[number];\n\nexport const betaFeedbackTable = pgTable(\n  \"beta_feedback\",\n  {\n    id: serial(\"id\").primaryKey(),\n    userId: text(\"user_id\")\n      .notNull()\n      .references(() => user.id, { onDelete: \"cascade\" }),\n    subject: text(\"subject\").notNull(),\n    message: text(\"message\").notNull(),\n    screenshotUrls: jsonb(\"screenshot_urls\").$type<string[]>().notNull().default([]),\n    deviceMetadata: jsonb(\"device_metadata\").$type<Record<string, string>>().notNull().default({}),\n    status: text(\"status\").notNull().default(\"unread\"),\n    aiTriage: jsonb(\"ai_triage\").$type<BetaFeedbackAiTriage | null>(),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n    updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => ({\n    idxStatus: index(\"idx_beta_feedback_status\").on(t.status),\n    idxCreatedAt: index(\"idx_beta_feedback_created_at\").on(t.createdAt),\n    idxUserId: index(\"idx_beta_feedback_user_id\").on(t.userId),\n  }),\n);\n\nexport interface BetaFeedbackAiTriage {\n  category: \"bug\" | \"feature\" | \"ux\" | \"performance\" | \"other\";\n  priority: \"low\" | \"medium\" | \"high\" | \"critical\";\n  summary: string;\n  suggestedAction: string;\n  screenshotAnalysis?: string;\n  source: \"gemini\" | \"fallback\";\n}\n\nexport const insertBetaFeedbackSchema = createInsertSchema(betaFeedbackTable).omit({\n  id: true,\n  createdAt: true,\n  updatedAt: true,\n});\nexport const selectBetaFeedbackSchema = createSelectSchema(betaFeedbackTable);\nexport type InsertBetaFeedback = z.infer<typeof insertBetaFeedbackSchema>;\nexport type BetaFeedbackRow = typeof betaFeedbackTable.$inferSelect;\n", "import { pgTable, text, serial, timestamp, integer, jsonb, unique, index } from \"drizzle-orm/pg-core\";\nimport { createInsertSchema, createSelectSchema } from \"drizzle-zod\";\nimport { z } from \"zod/v4\";\n\nexport const ingestionCheckpointsTable = pgTable(\n  \"ingestion_checkpoints\",\n  {\n    id: serial(\"id\").primaryKey(),\n    provider: text(\"provider\").notNull(),\n    scopeKey: text(\"scope_key\").notNull(),\n    cursorToken: text(\"cursor_token\"),\n    metadata: jsonb(\"metadata\").$type<Record<string, unknown>>().default({}),\n    lastSuccessAt: timestamp(\"last_success_at\", { withTimezone: true }),\n    lastError: text(\"last_error\"),\n    updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => ({\n    uniqueProviderScope: unique(\"uq_ingestion_checkpoint_provider_scope\").on(t.provider, t.scopeKey),\n    idxProvider: index(\"idx_ingestion_checkpoints_provider\").on(t.provider),\n  }),\n);\n\nexport const ingestionRunsTable = pgTable(\n  \"ingestion_runs\",\n  {\n    id: serial(\"id\").primaryKey(),\n    provider: text(\"provider\").notNull(),\n    status: text(\"status\").notNull().default(\"running\"),\n    startedAt: timestamp(\"started_at\", { withTimezone: true }).notNull().defaultNow(),\n    finishedAt: timestamp(\"finished_at\", { withTimezone: true }),\n    discovered: integer(\"discovered\").notNull().default(0),\n    eligible: integer(\"eligible\").notNull().default(0),\n    inserted: integer(\"inserted\").notNull().default(0),\n    skippedDuplicate: integer(\"skipped_duplicate\").notNull().default(0),\n    rejected: integer(\"rejected\").notNull().default(0),\n    errors: integer(\"errors\").notNull().default(0),\n    quotaUsed: integer(\"quota_used\").notNull().default(0),\n    details: jsonb(\"details\").$type<Record<string, unknown>>().default({}),\n  },\n  (t) => ({\n    idxStarted: index(\"idx_ingestion_runs_started_at\").on(t.startedAt),\n  }),\n);\n\nexport const insertIngestionCheckpointSchema = createInsertSchema(ingestionCheckpointsTable).omit({\n  id: true,\n  updatedAt: true,\n});\nexport const selectIngestionCheckpointSchema = createSelectSchema(ingestionCheckpointsTable);\nexport const insertIngestionRunSchema = createInsertSchema(ingestionRunsTable).omit({\n  id: true,\n  startedAt: true,\n});\nexport const selectIngestionRunSchema = createSelectSchema(ingestionRunsTable);\n\nexport type IngestionCheckpoint = typeof ingestionCheckpointsTable.$inferSelect;\nexport type IngestionRun = typeof ingestionRunsTable.$inferSelect;\n", "import {\n  pgTable,\n  text,\n  serial,\n  timestamp,\n  boolean,\n  unique,\n  index,\n  integer,\n  jsonb,\n  real,\n} from \"drizzle-orm/pg-core\";\nimport { createInsertSchema, createSelectSchema } from \"drizzle-zod\";\nimport { z } from \"zod/v4\";\n\nexport const DISCOVERED_CONTENT_STATUS = [\n  \"discovered\",\n  \"eligible\",\n  \"rejected\",\n  \"published\",\n] as const;\nexport type DiscoveredContentStatus = (typeof DISCOVERED_CONTENT_STATUS)[number];\n\nexport const DISCOVERY_TARGET_TYPES = [\n  \"profile\",\n  \"hashtag\",\n  \"music\",\n  \"trending\",\n  \"category\",\n] as const;\nexport type DiscoveryTargetType = (typeof DISCOVERY_TARGET_TYPES)[number];\n\n/** Admin-configured discovery sources (creators, hashtags, audio IDs, etc.). */\nexport const discoveryTargetsTable = pgTable(\n  \"discovery_targets\",\n  {\n    id: serial(\"id\").primaryKey(),\n    platform: text(\"platform\").notNull(),\n    targetType: text(\"target_type\").notNull(),\n    targetValue: text(\"target_value\").notNull(),\n    label: text(\"label\"),\n    niche: text(\"niche\"),\n    enabled: boolean(\"enabled\").notNull().default(true),\n    cursorToken: text(\"cursor_token\"),\n    lastCollectedAt: timestamp(\"last_collected_at\", { withTimezone: true }),\n    metadata: jsonb(\"metadata\").$type<Record<string, unknown>>().default({}),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => ({\n    uniqueTarget: unique(\"uq_discovery_target\").on(t.platform, t.targetType, t.targetValue),\n    idxEnabled: index(\"idx_discovery_targets_enabled\").on(t.enabled, t.platform),\n  }),\n);\n\n/** Unified staging for TikTok + Instagram short-form discovery with rich metadata. */\nexport const discoveredContentTable = pgTable(\n  \"discovered_content\",\n  {\n    id: serial(\"id\").primaryKey(),\n    platform: text(\"platform\").notNull(),\n    sourceVideoId: text(\"source_video_id\").notNull(),\n    creatorUsername: text(\"creator_username\"),\n    creatorProfileUrl: text(\"creator_profile_url\"),\n    caption: text(\"caption\"),\n    hashtags: jsonb(\"hashtags\").$type<string[]>().default([]),\n    audioTitle: text(\"audio_title\"),\n    audioArtist: text(\"audio_artist\"),\n    audioId: text(\"audio_id\"),\n    viewCount: integer(\"view_count\"),\n    likeCount: integer(\"like_count\"),\n    commentCount: integer(\"comment_count\"),\n    shareCount: integer(\"share_count\"),\n    publishedAt: timestamp(\"published_at\", { withTimezone: true }),\n    videoUrl: text(\"video_url\").notNull(),\n    thumbnailUrl: text(\"thumbnail_url\"),\n    embedUrl: text(\"embed_url\"),\n    durationSec: integer(\"duration_sec\"),\n    engagementRate: real(\"engagement_rate\"),\n    viralScore: integer(\"viral_score\"),\n    trendingScore: integer(\"trending_score\"),\n    niche: text(\"niche\"),\n    category: text(\"category\"),\n    discoverySource: text(\"discovery_source\").notNull(),\n    discoveryQuery: text(\"discovery_query\"),\n    status: text(\"status\").notNull().default(\"discovered\"),\n    rejectionReason: text(\"rejection_reason\"),\n    publishedVideoId: integer(\"published_video_id\"),\n    ingestionRunId: integer(\"ingestion_run_id\"),\n    rawPayload: jsonb(\"raw_payload\").$type<Record<string, unknown>>(),\n    firstSeenAt: timestamp(\"first_seen_at\", { withTimezone: true }).notNull().defaultNow(),\n    lastSeenAt: timestamp(\"last_seen_at\", { withTimezone: true }).notNull().defaultNow(),\n    metricsUpdatedAt: timestamp(\"metrics_updated_at\", { withTimezone: true }),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n    updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => ({\n    uniquePlatformVideo: unique(\"uq_discovered_content_platform_video\").on(\n      t.platform,\n      t.sourceVideoId,\n    ),\n    idxPlatformStatus: index(\"idx_discovered_content_platform_status\").on(t.platform, t.status),\n    idxViralScore: index(\"idx_discovered_content_viral_score\").on(t.viralScore),\n    idxTrendingScore: index(\"idx_discovered_content_trending_score\").on(t.trendingScore),\n    idxPublishedAt: index(\"idx_discovered_content_published_at\").on(t.publishedAt),\n    idxDiscoverySource: index(\"idx_discovered_content_discovery_source\").on(t.discoverySource),\n    idxCreator: index(\"idx_discovered_content_creator\").on(t.creatorUsername),\n    idxAudioId: index(\"idx_discovered_content_audio_id\").on(t.audioId),\n  }),\n);\n\nexport const insertDiscoveryTargetSchema = createInsertSchema(discoveryTargetsTable).omit({\n  id: true,\n  createdAt: true,\n  lastCollectedAt: true,\n});\nexport const selectDiscoveryTargetSchema = createSelectSchema(discoveryTargetsTable);\nexport const insertDiscoveredContentSchema = createInsertSchema(discoveredContentTable).omit({\n  id: true,\n  createdAt: true,\n  updatedAt: true,\n  firstSeenAt: true,\n  lastSeenAt: true,\n});\nexport const selectDiscoveredContentSchema = createSelectSchema(discoveredContentTable);\n\nexport type DiscoveryTarget = typeof discoveryTargetsTable.$inferSelect;\nexport type InsertDiscoveryTarget = z.infer<typeof insertDiscoveryTargetSchema>;\nexport type DiscoveredContent = typeof discoveredContentTable.$inferSelect;\nexport type InsertDiscoveredContent = z.infer<typeof insertDiscoveredContentSchema>;\n", "import { pgTable, text, integer, timestamp, jsonb, index } from \"drizzle-orm/pg-core\";\nimport { gearCatalogTable } from \"./adminStores\";\nimport { userVideosTable } from \"./userVideos\";\n\nexport type VideoEnrichmentMetadata = {\n  attribution?: {\n    platform?: string | null;\n    creatorName?: string | null;\n    creatorHandle?: string | null;\n    creatorUrl?: string | null;\n    sourceUrl?: string | null;\n    originalTitle?: string | null;\n    license?: string | null;\n    playbackMethod?: string | null;\n    embeddable?: boolean | null;\n    retrievedAt?: string | null;\n    publishedAt?: string | null;\n  };\n  topics?: string[];\n  activities?: string[];\n  locations?: string[];\n  outfitterHints?: string[];\n  commerceTags?: string[];\n  aiSummary?: string | null;\n  processingErrors?: string[];\n  gearDetection?: {\n    textKeywords?: string[];\n    visionItemCount?: number;\n    catalogMatchCount?: number;\n  };\n};\n\nexport const videoDetectedProductsTable = pgTable(\n  \"video_detected_products\",\n  {\n    id: text(\"id\").primaryKey(),\n    videoId: integer(\"video_id\")\n      .notNull()\n      .references(() => userVideosTable.id, { onDelete: \"cascade\" }),\n    brand: text(\"brand\").notNull().default(\"\"),\n    name: text(\"name\").notNull().default(\"\"),\n    model: text(\"model\"),\n    category: text(\"category\").notNull().default(\"Other\"),\n    confidence: integer(\"confidence\").notNull().default(0),\n    searchQuery: text(\"search_query\").notNull().default(\"\"),\n    evidence: jsonb(\"evidence\").$type<Record<string, unknown>>().notNull().default({}),\n    detectionSource: text(\"detection_source\").notNull().default(\"text\"),\n    catalogGearId: text(\"catalog_gear_id\").references(() => gearCatalogTable.id, {\n      onDelete: \"set null\",\n    }),\n    status: text(\"status\").notNull().default(\"detected\"),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n    updatedAt: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => [\n    index(\"video_detected_products_video_id_idx\").on(t.videoId),\n    index(\"video_detected_products_catalog_gear_id_idx\").on(t.catalogGearId),\n  ],\n);\n\nexport const videoPostProcessLogsTable = pgTable(\n  \"video_post_process_logs\",\n  {\n    id: text(\"id\").primaryKey(),\n    videoId: integer(\"video_id\")\n      .notNull()\n      .references(() => userVideosTable.id, { onDelete: \"cascade\" }),\n    stage: text(\"stage\").notNull(),\n    status: text(\"status\").notNull(),\n    message: text(\"message\").notNull().default(\"\"),\n    details: jsonb(\"details\").$type<Record<string, unknown>>().notNull().default({}),\n    createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n  },\n  (t) => [\n    index(\"video_post_process_logs_video_id_idx\").on(t.videoId),\n    index(\"video_post_process_logs_created_at_idx\").on(t.createdAt),\n  ],\n);\n\nexport type VideoDetectedProduct = typeof videoDetectedProductsTable.$inferSelect;\nexport type VideoPostProcessLog = typeof videoPostProcessLogsTable.$inferSelect;\n", "export * from \"./adminContent\";\nexport * from \"./userExports\";\nexport * from \"./legal\";\nexport * from \"./socialConnections\";\nexport * from \"./videoContentFlags\";\nexport * from \"./adminStores\";\nexport * from \"./reports\";\nexport * from \"./feedCache\";\nexport * from \"./youtubeImports\";\nexport * from \"./userVideos\";\nexport * from \"./feedEngagement\";\nexport * from \"./seedResetLog\";\nexport * from \"./waitlistEmails\";\nexport * from \"./speciesSightingsCache\";\nexport * from \"./quotaCounters\";\nexport * from \"./quotaDailyLog\";\nexport * from \"./regulationCache\";\nexport * from \"./userFavoriteJurisdictions\";\nexport * from \"./gearPriceCache\";\nexport * from \"./officialGear\";\nexport * from \"./gscCache\";\nexport * from \"./youtubeSearchCache\";\nexport * from \"./musicSearchCache\";\nexport * from \"./adminCache\";\nexport * from \"./auth\";\nexport * from \"./messaging\";\nexport * from \"./campfireChat\";\nexport * from \"./videoGearLinks\";\nexport * from \"./contentScraper\";\nexport * from \"./wardenDesk\";\nexport * from \"./analyticsEngine\";\nexport * from \"./betaFeedback\";\nexport * from \"./videoIngestion\";\nexport * from \"./discoveredContent\";\nexport * from \"./videoPostProcess\";\n", "import { drizzle } from \"drizzle-orm/node-postgres\";\nimport pg from \"pg\";\nimport * as schema from \"./schema\";\n\nconst { Pool } = pg;\n\nif (!process.env.DATABASE_URL) {\n  throw new Error(\n    \"DATABASE_URL must be set in artifacts/api-server/.env or .env.secrets. \" +\n      \"Use the Supabase Transaction pooler URI (port 6543) for serverless/Vercel. \" +\n      \"Run: pnpm env:sync\",\n  );\n}\n\nconst poolMaxRaw = parseInt(process.env.DB_POOL_MAX ?? \"2\", 10);\nconst poolMax = Number.isFinite(poolMaxRaw) ? Math.max(1, Math.min(poolMaxRaw, 10)) : 2;\n\n/** Small per-instance pool \u2014 Vercel spins many lambdas; session pooler caps are easy to exhaust. */\nexport const pool = new Pool({\n  connectionString: process.env.DATABASE_URL,\n  max: poolMax,\n  idleTimeoutMillis: 20_000,\n  connectionTimeoutMillis: 10_000,\n  allowExitOnIdle: true,\n});\nexport const db = drizzle(pool, { schema });\n\nexport * from \"./schema\";\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n", "import { Fetch } from './types'\n\nexport const resolveFetch = (customFetch?: Fetch): Fetch => {\n  if (customFetch) {\n    return (...args) => customFetch(...args)\n  }\n  return (...args) => fetch(...args)\n}\n", "export type Fetch = typeof fetch\n\n/**\n * Response format\n */\nexport interface FunctionsResponseSuccess<T> {\n  data: T\n  error: null\n  response?: Response\n}\nexport interface FunctionsResponseFailure {\n  data: null\n  error: any\n  response?: Response\n}\nexport type FunctionsResponse<T> = FunctionsResponseSuccess<T> | FunctionsResponseFailure\n\n/**\n * Base error for Supabase Edge Function invocations.\n *\n * @example\n * ```ts\n * import { FunctionsError } from '@supabase/functions-js'\n *\n * throw new FunctionsError('Unexpected error invoking function', 'FunctionsError', {\n *   requestId: 'abc123',\n * })\n * ```\n */\nexport class FunctionsError extends Error {\n  context: any\n  constructor(message: string, name = 'FunctionsError', context?: any) {\n    super(message)\n    this.name = name\n    this.context = context\n  }\n\n  toJSON(): { name: string; message: string; context: any } {\n    return {\n      name: this.name,\n      message: this.message,\n      context: this.context,\n    }\n  }\n}\n\n/**\n * Error thrown when the network request to an Edge Function fails.\n *\n * @example\n * ```ts\n * import { FunctionsFetchError } from '@supabase/functions-js'\n *\n * throw new FunctionsFetchError({ requestId: 'abc123' })\n * ```\n */\nexport class FunctionsFetchError extends FunctionsError {\n  constructor(context: any) {\n    super('Failed to send a request to the Edge Function', 'FunctionsFetchError', context)\n  }\n}\n\n/**\n * Error thrown when the Supabase relay cannot reach the Edge Function.\n *\n * @example\n * ```ts\n * import { FunctionsRelayError } from '@supabase/functions-js'\n *\n * throw new FunctionsRelayError({ region: 'us-east-1' })\n * ```\n */\nexport class FunctionsRelayError extends FunctionsError {\n  constructor(context: any) {\n    super('Relay Error invoking the Edge Function', 'FunctionsRelayError', context)\n  }\n}\n\n/**\n * Error thrown when the Edge Function returns a non-2xx status code.\n *\n * @example\n * ```ts\n * import { FunctionsHttpError } from '@supabase/functions-js'\n *\n * throw new FunctionsHttpError({ status: 500 })\n * ```\n */\nexport class FunctionsHttpError extends FunctionsError {\n  constructor(context: any) {\n    super('Edge Function returned a non-2xx status code', 'FunctionsHttpError', context)\n  }\n}\n// Define the enum for the 'region' property\nexport enum FunctionRegion {\n  Any = 'any',\n  ApNortheast1 = 'ap-northeast-1',\n  ApNortheast2 = 'ap-northeast-2',\n  ApSouth1 = 'ap-south-1',\n  ApSoutheast1 = 'ap-southeast-1',\n  ApSoutheast2 = 'ap-southeast-2',\n  CaCentral1 = 'ca-central-1',\n  EuCentral1 = 'eu-central-1',\n  EuWest1 = 'eu-west-1',\n  EuWest2 = 'eu-west-2',\n  EuWest3 = 'eu-west-3',\n  SaEast1 = 'sa-east-1',\n  UsEast1 = 'us-east-1',\n  UsWest1 = 'us-west-1',\n  UsWest2 = 'us-west-2',\n}\n\nexport type FunctionInvokeOptions = {\n  /**\n   * Object representing the headers to send with the request.\n   */\n  headers?: { [key: string]: string }\n  /**\n   * The HTTP verb of the request\n   */\n  method?: 'POST' | 'GET' | 'PUT' | 'PATCH' | 'DELETE'\n  /**\n   * The Region to invoke the function in.\n   */\n  region?: FunctionRegion\n  /**\n   * The body of the request.\n   */\n  body?:\n    | File\n    | Blob\n    | ArrayBuffer\n    | FormData\n    | ReadableStream<Uint8Array>\n    | Record<string, any>\n    | string\n  /**\n   * The AbortSignal to use for the request.\n   * */\n  signal?: AbortSignal\n  /**\n   * The timeout for the request in milliseconds.\n   * If the function takes longer than this, the request will be aborted.\n   * */\n  timeout?: number\n}\n", "import { resolveFetch } from './helper'\nimport {\n  Fetch,\n  FunctionInvokeOptions,\n  FunctionRegion,\n  FunctionsFetchError,\n  FunctionsHttpError,\n  FunctionsRelayError,\n  FunctionsResponse,\n} from './types'\n\n/**\n * Client for invoking Supabase Edge Functions.\n */\nexport class FunctionsClient {\n  protected url: string\n  protected headers: Record<string, string>\n  protected region: FunctionRegion\n  protected fetch: Fetch\n\n  /**\n   * Creates a new Functions client bound to an Edge Functions URL.\n   *\n   * @example Using supabase-js (recommended)\n   * ```ts\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n   * const { data, error } = await supabase.functions.invoke('hello-world')\n   * ```\n   *\n   * @category Edge Functions\n   *\n   * @example Standalone import for bundle-sensitive environments\n   * ```ts\n   * import { FunctionsClient, FunctionRegion } from '@supabase/functions-js'\n   *\n   * const functions = new FunctionsClient('https://xyzcompany.supabase.co/functions/v1', {\n   *   headers: { apikey: 'your-publishable-key' },\n   *   region: FunctionRegion.UsEast1,\n   * })\n   * ```\n   */\n  constructor(\n    url: string,\n    {\n      headers = {},\n      customFetch,\n      region = FunctionRegion.Any,\n    }: {\n      headers?: Record<string, string>\n      customFetch?: Fetch\n      region?: FunctionRegion\n    } = {}\n  ) {\n    this.url = url\n    this.headers = headers\n    this.region = region\n    this.fetch = resolveFetch(customFetch)\n  }\n\n  /**\n   * Updates the authorization header\n   * @param token - the new jwt token sent in the authorisation header\n   *\n   * @category Edge Functions\n   *\n   * @example Setting the authorization header\n   * ```ts\n   * functions.setAuth(session.access_token)\n   * ```\n   */\n  setAuth(token: string) {\n    this.headers.Authorization = `Bearer ${token}`\n  }\n\n  /**\n   * Invokes a function\n   * @param functionName - The name of the Function to invoke.\n   * @param options - Options for invoking the Function.\n   * @example\n   * ```ts\n   * const { data, error } = await functions.invoke('hello-world', {\n   *   body: { name: 'Ada' },\n   * })\n   * ```\n   *\n   * @category Edge Functions\n   *\n   * @remarks\n   * - Requires an Authorization header.\n   * - Invoke params generally match the [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) spec.\n   * - When you pass in a body to your function, we automatically attach the Content-Type header for `Blob`, `ArrayBuffer`, `File`, `FormData` and `String`. If it doesn't match any of these types we assume the payload is `json`, serialize it and attach the `Content-Type` header as `application/json`. You can override this behavior by passing in a `Content-Type` header of your own.\n   * - Responses are automatically parsed as `json`, `blob` and `form-data` depending on the `Content-Type` header sent by your function. Responses are parsed as `text` by default.\n   *\n   * @example Basic invocation\n   * ```js\n   * const { data, error } = await supabase.functions.invoke('hello', {\n   *   body: { foo: 'bar' }\n   * })\n   * ```\n   *\n   * @exampleDescription Error handling\n   * A `FunctionsHttpError` error is returned if your function throws an error, `FunctionsRelayError` if the Supabase Relay has an error processing your function and `FunctionsFetchError` if there is a network error in calling your function.\n   *\n   * @example Error handling\n   * ```js\n   * import { FunctionsHttpError, FunctionsRelayError, FunctionsFetchError } from \"@supabase/supabase-js\";\n   *\n   * const { data, error } = await supabase.functions.invoke('hello', {\n   *   headers: {\n   *     \"my-custom-header\": 'my-custom-header-value'\n   *   },\n   *   body: { foo: 'bar' }\n   * })\n   *\n   * if (error instanceof FunctionsHttpError) {\n   *   const errorMessage = await error.context.json()\n   *   console.log('Function returned an error', errorMessage)\n   * } else if (error instanceof FunctionsRelayError) {\n   *   console.log('Relay error:', error.message)\n   * } else if (error instanceof FunctionsFetchError) {\n   *   console.log('Fetch error:', error.message)\n   * }\n   * ```\n   *\n   * @exampleDescription Passing custom headers\n   * You can pass custom headers to your function. Note: supabase-js automatically passes the `Authorization` header with the signed in user's JWT.\n   *\n   * @example Passing custom headers\n   * ```js\n   * const { data, error } = await supabase.functions.invoke('hello', {\n   *   headers: {\n   *     \"my-custom-header\": 'my-custom-header-value'\n   *   },\n   *   body: { foo: 'bar' }\n   * })\n   * ```\n   *\n   * @exampleDescription Calling with DELETE HTTP verb\n   * You can also set the HTTP verb to `DELETE` when calling your Edge Function.\n   *\n   * @example Calling with DELETE HTTP verb\n   * ```js\n   * const { data, error } = await supabase.functions.invoke('hello', {\n   *   headers: {\n   *     \"my-custom-header\": 'my-custom-header-value'\n   *   },\n   *   body: { foo: 'bar' },\n   *   method: 'DELETE'\n   * })\n   * ```\n   *\n   * @exampleDescription Invoking a Function in the UsEast1 region\n   * Here are the available regions:\n   * - `FunctionRegion.Any`\n   * - `FunctionRegion.ApNortheast1`\n   * - `FunctionRegion.ApNortheast2`\n   * - `FunctionRegion.ApSouth1`\n   * - `FunctionRegion.ApSoutheast1`\n   * - `FunctionRegion.ApSoutheast2`\n   * - `FunctionRegion.CaCentral1`\n   * - `FunctionRegion.EuCentral1`\n   * - `FunctionRegion.EuWest1`\n   * - `FunctionRegion.EuWest2`\n   * - `FunctionRegion.EuWest3`\n   * - `FunctionRegion.SaEast1`\n   * - `FunctionRegion.UsEast1`\n   * - `FunctionRegion.UsWest1`\n   * - `FunctionRegion.UsWest2`\n   *\n   * @example Invoking a Function in the UsEast1 region\n   * ```js\n   * import { createClient, FunctionRegion } from '@supabase/supabase-js'\n   *\n   * const { data, error } = await supabase.functions.invoke('hello', {\n   *   body: { foo: 'bar' },\n   *   region: FunctionRegion.UsEast1\n   * })\n   * ```\n   *\n   * @exampleDescription Calling with GET HTTP verb\n   * You can also set the HTTP verb to `GET` when calling your Edge Function.\n   *\n   * @example Calling with GET HTTP verb\n   * ```js\n   * const { data, error } = await supabase.functions.invoke('hello', {\n   *   headers: {\n   *     \"my-custom-header\": 'my-custom-header-value'\n   *   },\n   *   method: 'GET'\n   * })\n   * ```\n   *\n   * @example Standalone client invoke\n   * ```ts\n   * const { data, error } = await functions.invoke('hello-world', {\n   *   body: { name: 'Ada' },\n   * })\n   * ```\n   */\n  async invoke<T = any>(\n    functionName: string,\n    options: FunctionInvokeOptions = {}\n  ): Promise<FunctionsResponse<T>> {\n    let timeoutId: ReturnType<typeof setTimeout> | undefined\n    let timeoutController: AbortController | undefined\n\n    try {\n      const { headers, method, body: functionArgs, signal, timeout } = options\n      let _headers: Record<string, string> = {}\n      let { region } = options\n      if (!region) {\n        region = this.region\n      }\n      // Add region as query parameter using URL API\n      const url = new URL(`${this.url}/${functionName}`)\n      if (region && region !== 'any') {\n        _headers['x-region'] = region\n        url.searchParams.set('forceFunctionRegion', region)\n      }\n      let body: any\n      if (\n        functionArgs &&\n        ((headers && !Object.prototype.hasOwnProperty.call(headers, 'Content-Type')) || !headers)\n      ) {\n        if (\n          (typeof Blob !== 'undefined' && functionArgs instanceof Blob) ||\n          functionArgs instanceof ArrayBuffer\n        ) {\n          // will work for File as File inherits Blob\n          // also works for ArrayBuffer as it is the same underlying structure as a Blob\n          _headers['Content-Type'] = 'application/octet-stream'\n          body = functionArgs\n        } else if (typeof functionArgs === 'string') {\n          // plain string\n          _headers['Content-Type'] = 'text/plain'\n          body = functionArgs\n        } else if (typeof FormData !== 'undefined' && functionArgs instanceof FormData) {\n          // don't set content-type headers\n          // Request will automatically add the right boundary value\n          body = functionArgs\n        } else {\n          // default, assume this is JSON\n          _headers['Content-Type'] = 'application/json'\n          body = JSON.stringify(functionArgs)\n        }\n      } else {\n        if (\n          functionArgs &&\n          typeof functionArgs !== 'string' &&\n          !(typeof Blob !== 'undefined' && functionArgs instanceof Blob) &&\n          !(functionArgs instanceof ArrayBuffer) &&\n          !(typeof FormData !== 'undefined' && functionArgs instanceof FormData)\n        ) {\n          body = JSON.stringify(functionArgs)\n        } else {\n          body = functionArgs\n        }\n      }\n\n      // Handle timeout by creating an AbortController\n      let effectiveSignal = signal\n      if (timeout) {\n        timeoutController = new AbortController()\n        timeoutId = setTimeout(() => timeoutController!.abort(), timeout)\n\n        // If user provided their own signal, we need to respect both\n        if (signal) {\n          effectiveSignal = timeoutController.signal\n          // If the user's signal is aborted, abort our timeout controller too\n          signal.addEventListener('abort', () => timeoutController!.abort())\n        } else {\n          effectiveSignal = timeoutController.signal\n        }\n      }\n\n      const response = await this.fetch(url.toString(), {\n        method: method || 'POST',\n        // headers priority is (high to low):\n        // 1. invoke-level headers\n        // 2. client-level headers\n        // 3. default Content-Type header\n        headers: { ..._headers, ...this.headers, ...headers },\n        body,\n        signal: effectiveSignal,\n      }).catch((fetchError) => {\n        throw new FunctionsFetchError(fetchError)\n      })\n\n      const isRelayError = response.headers.get('x-relay-error')\n      if (isRelayError && isRelayError === 'true') {\n        throw new FunctionsRelayError(response)\n      }\n\n      if (!response.ok) {\n        throw new FunctionsHttpError(response)\n      }\n\n      let responseType = (response.headers.get('Content-Type') ?? 'text/plain').split(';')[0].trim()\n      let data: any\n      if (responseType === 'application/json') {\n        data = await response.json()\n      } else if (\n        responseType === 'application/octet-stream' ||\n        responseType === 'application/pdf'\n      ) {\n        data = await response.blob()\n      } else if (responseType === 'text/event-stream') {\n        data = response\n      } else if (responseType === 'multipart/form-data') {\n        data = await response.formData()\n      } else {\n        // default to text\n        data = await response.text()\n      }\n\n      return { data, error: null, response }\n    } catch (error) {\n      return {\n        data: null,\n        error,\n        response:\n          error instanceof FunctionsHttpError || error instanceof FunctionsRelayError\n            ? error.context\n            : undefined,\n      }\n    } finally {\n      // Clear the timeout if it was set\n      if (timeoutId) {\n        clearTimeout(timeoutId)\n      }\n    }\n  }\n}\n", "export { FunctionsClient } from './FunctionsClient'\nexport {\n  type FunctionInvokeOptions,\n  FunctionsError,\n  FunctionsFetchError,\n  FunctionsHttpError,\n  FunctionsRelayError,\n  FunctionRegion,\n  type FunctionsResponse,\n} from './types'\n", "// Types that are shared between supabase-js and postgrest-js\n\nexport type Fetch = typeof fetch\n\n/**\n * Default number of retry attempts.\n */\nexport const DEFAULT_MAX_RETRIES = 3\n\n/**\n * Default exponential backoff delay function.\n * Delays: 1s, 2s, 4s, 8s, ... (max 30s)\n *\n * @param attemptIndex - Zero-based index of the retry attempt\n * @returns Delay in milliseconds before the next retry\n */\nexport const getRetryDelay = (attemptIndex: number): number =>\n  Math.min(1000 * 2 ** attemptIndex, 30000)\n\n/**\n * Status codes that are safe to retry.\n * 520 = Cloudflare timeout/connection errors (transient)\n * 503 = PostgREST schema cache not yet loaded (transient, signals retry via Retry-After header)\n */\nexport const RETRYABLE_STATUS_CODES = [520, 503] as const\n\n/**\n * HTTP methods that are safe to retry (idempotent operations).\n */\nexport const RETRYABLE_METHODS = ['GET', 'HEAD', 'OPTIONS'] as const\n\nexport type GenericRelationship = {\n  foreignKeyName: string\n  columns: string[]\n  isOneToOne?: boolean\n  referencedRelation: string\n  referencedColumns: string[]\n}\n\nexport type GenericTable = {\n  Row: Record<string, unknown>\n  Insert: Record<string, unknown>\n  Update: Record<string, unknown>\n  Relationships: GenericRelationship[]\n}\n\nexport type GenericUpdatableView = {\n  Row: Record<string, unknown>\n  Insert: Record<string, unknown>\n  Update: Record<string, unknown>\n  Relationships: GenericRelationship[]\n}\n\nexport type GenericNonUpdatableView = {\n  Row: Record<string, unknown>\n  Relationships: GenericRelationship[]\n}\n\nexport type GenericView = GenericUpdatableView | GenericNonUpdatableView\n\nexport type GenericSetofOption = {\n  isSetofReturn?: boolean | undefined\n  isOneToOne?: boolean | undefined\n  isNotNullable?: boolean | undefined\n  to: string\n  from: string\n}\n\nexport type GenericFunction = {\n  Args: Record<string, unknown> | never\n  Returns: unknown\n  SetofOptions?: GenericSetofOption\n}\n\nexport type GenericSchema = {\n  Tables: Record<string, GenericTable>\n  Views: Record<string, GenericView>\n  Functions: Record<string, GenericFunction>\n}\n\nexport type ClientServerOptions = {\n  PostgrestVersion?: string\n}\n", "/**\n * Error format\n *\n * {@link https://postgrest.org/en/stable/api.html?highlight=options#errors-and-http-status-codes}\n */\nexport default class PostgrestError extends Error {\n  details: string\n  hint: string\n  code: string\n\n  /**\n   * @example\n   * ```ts\n   * import PostgrestError from '@supabase/postgrest-js'\n   *\n   * throw new PostgrestError({\n   *   message: 'Row level security prevented the request',\n   *   details: 'RLS denied the insert',\n   *   hint: 'Check your policies',\n   *   code: 'PGRST301',\n   * })\n   * ```\n   */\n  constructor(context: { message: string; details: string; hint: string; code: string }) {\n    super(context.message)\n    this.name = 'PostgrestError'\n    this.details = context.details\n    this.hint = context.hint\n    this.code = context.code\n  }\n\n  toJSON(): { name: string; message: string; details: string; hint: string; code: string } {\n    return {\n      name: this.name,\n      message: this.message,\n      details: this.details,\n      hint: this.hint,\n      code: this.code,\n    }\n  }\n}\n", "import type {\n  PostgrestSingleResponse,\n  PostgrestResponseSuccess,\n  CheckMatchingArrayTypes,\n  MergePartialResult,\n  IsValidResultOverride,\n} from './types/types'\nimport {\n  ClientServerOptions,\n  Fetch,\n  DEFAULT_MAX_RETRIES,\n  getRetryDelay,\n  RETRYABLE_STATUS_CODES,\n  RETRYABLE_METHODS,\n} from './types/common/common'\nimport PostgrestError from './PostgrestError'\nimport { ContainsNull } from './select-query-parser/types'\n\n/**\n * Sleep for a given number of milliseconds.\n * If an AbortSignal is provided, the sleep resolves early when the signal is aborted.\n */\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n  return new Promise((resolve) => {\n    if (signal?.aborted) {\n      resolve()\n      return\n    }\n    const id = setTimeout(() => {\n      signal?.removeEventListener('abort', onAbort)\n      resolve()\n    }, ms)\n    function onAbort() {\n      clearTimeout(id)\n      resolve()\n    }\n    signal?.addEventListener('abort', onAbort)\n  })\n}\n\n/**\n * Check if a request should be retried based on method and status code.\n */\nfunction shouldRetry(\n  method: string,\n  status: number,\n  attemptCount: number,\n  retryEnabled: boolean\n): boolean {\n  // Don't retry if retries are disabled or we've exhausted attempts\n  if (!retryEnabled || attemptCount >= DEFAULT_MAX_RETRIES) {\n    return false\n  }\n\n  // Only retry idempotent methods (GET, HEAD, OPTIONS)\n  if (!RETRYABLE_METHODS.includes(method as (typeof RETRYABLE_METHODS)[number])) {\n    return false\n  }\n\n  // Only retry on specific status codes (520 - Cloudflare errors)\n  if (!RETRYABLE_STATUS_CODES.includes(status as (typeof RETRYABLE_STATUS_CODES)[number])) {\n    return false\n  }\n\n  return true\n}\n\nexport default abstract class PostgrestBuilder<\n  ClientOptions extends ClientServerOptions,\n  Result,\n  ThrowOnError extends boolean = false,\n> implements\n    PromiseLike<\n      ThrowOnError extends true ? PostgrestResponseSuccess<Result> : PostgrestSingleResponse<Result>\n    >\n{\n  protected method: 'GET' | 'HEAD' | 'POST' | 'PATCH' | 'DELETE'\n  protected url: URL\n  protected headers: Headers\n  protected schema?: string\n  protected body?: unknown\n  protected shouldThrowOnError = false\n  protected signal?: AbortSignal\n  protected fetch: Fetch\n  protected isMaybeSingle: boolean\n  protected shouldStripNulls: boolean\n  protected urlLengthLimit: number\n\n  // Retry configuration - enabled by default\n  protected retryEnabled: boolean = true\n\n  /**\n   * Creates a builder configured for a specific PostgREST request.\n   *\n   * @example Using supabase-js (recommended)\n   * ```ts\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n   * const { data, error } = await supabase.from('users').select('*')\n   * ```\n   *\n   * @category Database\n   *\n   * @example Standalone import for bundle-sensitive environments\n   * ```ts\n   * import { PostgrestQueryBuilder } from '@supabase/postgrest-js'\n   *\n   * const builder = new PostgrestQueryBuilder(\n   *   new URL('https://xyzcompany.supabase.co/rest/v1/users'),\n   *   { headers: new Headers({ apikey: 'your-publishable-key' }) }\n   * )\n   * ```\n   */\n  constructor(builder: {\n    method: 'GET' | 'HEAD' | 'POST' | 'PATCH' | 'DELETE'\n    url: URL\n    headers: HeadersInit\n    schema?: string\n    body?: unknown\n    shouldThrowOnError?: boolean\n    signal?: AbortSignal\n    fetch?: Fetch\n    isMaybeSingle?: boolean\n    shouldStripNulls?: boolean\n    urlLengthLimit?: number\n    // Retry option\n    retry?: boolean\n  }) {\n    this.method = builder.method\n    this.url = builder.url\n    this.headers = new Headers(builder.headers)\n    this.schema = builder.schema\n    this.body = builder.body\n    this.shouldThrowOnError = builder.shouldThrowOnError ?? false\n    this.signal = builder.signal\n    this.isMaybeSingle = builder.isMaybeSingle ?? false\n    this.shouldStripNulls = builder.shouldStripNulls ?? false\n    this.urlLengthLimit = builder.urlLengthLimit ?? 8000\n    this.retryEnabled = builder.retry ?? true\n\n    if (builder.fetch) {\n      this.fetch = builder.fetch\n    } else {\n      this.fetch = fetch\n    }\n  }\n\n  /**\n   * If there's an error with the query, throwOnError will reject the promise by\n   * throwing the error instead of returning it as part of a successful response.\n   *\n   * {@link https://github.com/supabase/supabase-js/issues/92}\n   *\n   * @category Database\n   */\n  throwOnError(): this & PostgrestBuilder<ClientOptions, Result, true> {\n    this.shouldThrowOnError = true\n    return this as this & PostgrestBuilder<ClientOptions, Result, true>\n  }\n\n  /**\n   * Strip null values from the response data. Properties with `null` values\n   * will be omitted from the returned JSON objects.\n   *\n   * Requires PostgREST 11.2.0+.\n   *\n   * {@link https://docs.postgrest.org/en/stable/references/api/resource_representation.html#stripped-nulls}\n   *\n   * @category Database\n   * @subcategory Using modifiers\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select()\n   *   .stripNulls()\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text, bio text);\n   *\n   * insert into\n   *   characters (id, name, bio)\n   * values\n   *   (1, 'Luke', null),\n   *   (2, 'Leia', 'Princess of Alderaan');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"name\": \"Luke\"\n   *     },\n   *     {\n   *       \"id\": 2,\n   *       \"name\": \"Leia\",\n   *       \"bio\": \"Princess of Alderaan\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  stripNulls(): this {\n    if (this.headers.get('Accept') === 'text/csv') {\n      throw new Error('stripNulls() cannot be used with csv()')\n    }\n    this.shouldStripNulls = true\n    return this\n  }\n\n  /**\n   * Set an HTTP header for the request.\n   *\n   * @category Database\n   */\n  setHeader(name: string, value: string): this {\n    this.headers = new Headers(this.headers)\n    this.headers.set(name, value)\n    return this\n  }\n\n  /**\n   * @category Database\n   *\n   * Configure retry behavior for this request.\n   *\n   * By default, retries are enabled for idempotent requests (GET, HEAD, OPTIONS)\n   * that fail with network errors or specific HTTP status codes (503, 520).\n   * Retries use exponential backoff (1s, 2s, 4s) with a maximum of 3 attempts.\n   *\n   * @param enabled - Whether to enable retries for this request\n   *\n   * @example\n   * ```ts\n   * // Disable retries for a specific query\n   * const { data, error } = await supabase\n   *   .from('users')\n   *   .select()\n   *   .retry(false)\n   * ```\n   */\n  retry(enabled: boolean): this {\n    this.retryEnabled = enabled\n    return this\n  }\n\n  then<\n    TResult1 = ThrowOnError extends true\n      ? PostgrestResponseSuccess<Result>\n      : PostgrestSingleResponse<Result>,\n    TResult2 = never,\n  >(\n    onfulfilled?:\n      | ((\n          value: ThrowOnError extends true\n            ? PostgrestResponseSuccess<Result>\n            : PostgrestSingleResponse<Result>\n        ) => TResult1 | PromiseLike<TResult1>)\n      | undefined\n      | null,\n    onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null\n  ): PromiseLike<TResult1 | TResult2> {\n    // https://postgrest.org/en/stable/api.html#switching-schemas\n    if (this.schema === undefined) {\n      // skip\n    } else if (['GET', 'HEAD'].includes(this.method)) {\n      this.headers.set('Accept-Profile', this.schema)\n    } else {\n      this.headers.set('Content-Profile', this.schema)\n    }\n    if (this.method !== 'GET' && this.method !== 'HEAD') {\n      this.headers.set('Content-Type', 'application/json')\n    }\n\n    // https://docs.postgrest.org/en/stable/references/api/resource_representation.html#stripped-nulls\n    if (this.shouldStripNulls) {\n      const currentAccept = this.headers.get('Accept')\n      if (currentAccept === 'application/vnd.pgrst.object+json') {\n        this.headers.set('Accept', 'application/vnd.pgrst.object+json;nulls=stripped')\n      } else if (!currentAccept || currentAccept === 'application/json') {\n        this.headers.set('Accept', 'application/vnd.pgrst.array+json;nulls=stripped')\n      }\n    }\n\n    // NOTE: Invoke w/o `this` to avoid illegal invocation error.\n    // https://github.com/supabase/postgrest-js/pull/247\n    const _fetch = this.fetch\n\n    // Execute fetch with retry logic\n    const executeWithRetry = async (): Promise<{\n      error: any\n      data: any\n      count: number | null\n      status: number\n      statusText: string\n    }> => {\n      let attemptCount = 0\n\n      while (true) {\n        const requestHeaders = new Headers(this.headers)\n        if (attemptCount > 0) {\n          requestHeaders.set('X-Retry-Count', String(attemptCount))\n        }\n\n        // Only wrap the fetch call itself — processResponse errors must never trigger retries\n        let res: Response\n        try {\n          res = await _fetch(this.url.toString(), {\n            method: this.method,\n            headers: requestHeaders,\n            body: JSON.stringify(this.body, (_, value) =>\n              typeof value === 'bigint' ? value.toString() : value\n            ),\n            signal: this.signal,\n          })\n          // JS allows throwing any value, and serverless or realm-crossing fetch\n          // implementations can reject with non-Error objects. `instanceof Error`\n          // is too narrow here; narrow at the use site with optional chaining.\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        } catch (fetchError: any) {\n          // Never retry aborted requests\n          if (fetchError?.name === 'AbortError' || fetchError?.code === 'ABORT_ERR') {\n            throw fetchError\n          }\n\n          // Don't retry network errors for non-idempotent methods\n          if (!RETRYABLE_METHODS.includes(this.method as (typeof RETRYABLE_METHODS)[number])) {\n            throw fetchError\n          }\n\n          // Check if we should retry network errors\n          if (this.retryEnabled && attemptCount < DEFAULT_MAX_RETRIES) {\n            const delay = getRetryDelay(attemptCount)\n            attemptCount++\n            await sleep(delay, this.signal)\n            continue\n          }\n\n          // Exhausted retries or retries disabled, throw the last error\n          throw fetchError\n        }\n\n        // Check if we should retry this HTTP response\n        if (shouldRetry(this.method, res.status, attemptCount, this.retryEnabled)) {\n          const retryAfterHeader = res.headers?.get('Retry-After') ?? null\n          const delay =\n            retryAfterHeader !== null\n              ? Math.max(0, parseInt(retryAfterHeader, 10) || 0) * 1000\n              : getRetryDelay(attemptCount)\n          await res.text()\n          attemptCount++\n          await sleep(delay, this.signal)\n          continue\n        }\n\n        return await this.processResponse(res)\n      }\n    }\n\n    let res = executeWithRetry()\n\n    if (!this.shouldThrowOnError) {\n      res = res.catch((fetchError) => {\n        // Build detailed error information including cause if available\n        // Note: We don't populate code/hint for client-side network errors since those\n        // fields are meant for upstream service errors (PostgREST/PostgreSQL)\n        let errorDetails = ''\n        let hint = ''\n        let code = ''\n\n        // Add cause information if available (e.g., DNS errors, network failures)\n        const cause = fetchError?.cause\n        if (cause) {\n          const causeMessage = cause?.message ?? ''\n          const causeCode = cause?.code ?? ''\n\n          errorDetails = `${fetchError?.name ?? 'FetchError'}: ${fetchError?.message}`\n          errorDetails += `\\n\\nCaused by: ${cause?.name ?? 'Error'}: ${causeMessage}`\n          if (causeCode) {\n            errorDetails += ` (${causeCode})`\n          }\n          if (cause?.stack) {\n            errorDetails += `\\n${cause.stack}`\n          }\n        } else {\n          // No cause available, just include the error stack\n          errorDetails = fetchError?.stack ?? ''\n        }\n\n        // Get URL length for potential hints\n        const urlLength = this.url.toString().length\n\n        // Handle AbortError specially with helpful hints\n        if (fetchError?.name === 'AbortError' || fetchError?.code === 'ABORT_ERR') {\n          code = ''\n          hint = 'Request was aborted (timeout or manual cancellation)'\n\n          if (urlLength > this.urlLengthLimit) {\n            hint += `. Note: Your request URL is ${urlLength} characters, which may exceed server limits. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [many IDs])), consider using an RPC function to pass values server-side.`\n          }\n        }\n        // Handle HeadersOverflowError from undici (Node.js fetch implementation)\n        else if (\n          cause?.name === 'HeadersOverflowError' ||\n          cause?.code === 'UND_ERR_HEADERS_OVERFLOW'\n        ) {\n          code = ''\n          hint = 'HTTP headers exceeded server limits (typically 16KB)'\n\n          if (urlLength > this.urlLengthLimit) {\n            hint += `. Your request URL is ${urlLength} characters. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [200+ IDs])), consider using an RPC function instead.`\n          }\n        }\n\n        return {\n          success: false as const,\n          error: {\n            message: `${fetchError?.name ?? 'FetchError'}: ${fetchError?.message}`,\n            details: errorDetails,\n            hint: hint,\n            code: code,\n          },\n          data: null,\n          count: null,\n          status: 0,\n          statusText: '',\n        }\n      })\n    }\n\n    return (\n      res as Promise<\n        ThrowOnError extends true\n          ? PostgrestResponseSuccess<Result>\n          : PostgrestSingleResponse<Result>\n      >\n    ).then(onfulfilled, onrejected)\n  }\n\n  /**\n   * Process a fetch response and return the standardized postgrest response.\n   */\n  private async processResponse(res: Response): Promise<{\n    success: boolean\n    error: any\n    data: any\n    count: number | null\n    status: number\n    statusText: string\n  }> {\n    let error = null\n    let data = null\n    let count: number | null = null\n    let status = res.status\n    let statusText = res.statusText\n\n    if (res.ok) {\n      if (this.method !== 'HEAD') {\n        const body = await res.text()\n        if (body === '') {\n          // Prefer: return=minimal\n        } else if (this.headers.get('Accept') === 'text/csv') {\n          data = body\n        } else if (\n          this.headers.get('Accept') &&\n          this.headers.get('Accept')?.includes('application/vnd.pgrst.plan+text')\n        ) {\n          data = body\n        } else {\n          data = JSON.parse(body)\n        }\n      }\n\n      const countHeader = this.headers.get('Prefer')?.match(/count=(exact|planned|estimated)/)\n      const contentRange = res.headers.get('content-range')?.split('/')\n      if (countHeader && contentRange && contentRange.length > 1) {\n        count = parseInt(contentRange[1])\n      }\n\n      // Fix for https://github.com/supabase/postgrest-js/issues/361 — applies to all methods.\n      if (this.isMaybeSingle && Array.isArray(data)) {\n        if (data.length > 1) {\n          error = {\n            // https://github.com/PostgREST/postgrest/blob/a867d79c42419af16c18c3fb019eba8df992626f/src/PostgREST/Error.hs#L553\n            code: 'PGRST116',\n            details: `Results contain ${data.length} rows, application/vnd.pgrst.object+json requires 1 row`,\n            hint: null,\n            message: 'JSON object requested, multiple (or no) rows returned',\n          }\n          data = null\n          count = null\n          status = 406\n          statusText = 'Not Acceptable'\n        } else if (data.length === 1) {\n          data = data[0]\n        } else {\n          data = null\n        }\n      }\n    } else {\n      const body = await res.text()\n\n      try {\n        error = JSON.parse(body)\n\n        // Workaround for https://github.com/supabase/postgrest-js/issues/295\n        if (Array.isArray(error) && res.status === 404) {\n          data = []\n          error = null\n          status = 200\n          statusText = 'OK'\n        }\n      } catch {\n        // Workaround for https://github.com/supabase/postgrest-js/issues/295\n        if (res.status === 404 && body === '') {\n          status = 204\n          statusText = 'No Content'\n        } else {\n          error = {\n            message: body,\n          }\n        }\n      }\n\n      if (error && this.shouldThrowOnError) {\n        throw new PostgrestError(error)\n      }\n    }\n\n    return {\n      success: error === null,\n      error,\n      data,\n      count,\n      status,\n      statusText,\n    }\n  }\n\n  /**\n   * Override the type of the returned `data`.\n   *\n   * @typeParam NewResult - The new result type to override with\n   * @deprecated Use overrideTypes<yourType, { merge: false }>() method at the end of your call chain instead\n   *\n   * @category Database\n   */\n  returns<NewResult>(): PostgrestBuilder<\n    ClientOptions,\n    CheckMatchingArrayTypes<Result, NewResult>,\n    ThrowOnError\n  > {\n    /* istanbul ignore next */\n    return this as unknown as PostgrestBuilder<\n      ClientOptions,\n      CheckMatchingArrayTypes<Result, NewResult>,\n      ThrowOnError\n    >\n  }\n\n  /**\n   * Override the type of the returned `data` field in the response.\n   *\n   * @typeParam NewResult - The new type to cast the response data to\n   * @typeParam Options - Optional type configuration (defaults to { merge: true })\n   * @typeParam Options.merge - When true, merges the new type with existing return type. When false, replaces the existing types entirely (defaults to true)\n   * @example\n   * ```typescript\n   * // Merge with existing types (default behavior)\n   * const query = supabase\n   *   .from('users')\n   *   .select()\n   *   .overrideTypes<{ custom_field: string }>()\n   *\n   * // Replace existing types completely\n   * const replaceQuery = supabase\n   *   .from('users')\n   *   .select()\n   *   .overrideTypes<{ id: number; name: string }, { merge: false }>()\n   * ```\n   * @returns A PostgrestBuilder instance with the new type\n   *\n   * @category Database\n   * @subcategory Using modifiers\n   *\n   * @example Complete Override type of successful response\n   * ```ts\n   * const { data } = await supabase\n   *   .from('countries')\n   *   .select()\n   *   .overrideTypes<Array<MyType>, { merge: false }>()\n   * ```\n   *\n   * @exampleResponse Complete Override type of successful response\n   * ```ts\n   * let x: typeof data // MyType[]\n   * ```\n   *\n   * @example Complete Override type of object response\n   * ```ts\n   * const { data } = await supabase\n   *   .from('countries')\n   *   .select()\n   *   .maybeSingle()\n   *   .overrideTypes<MyType, { merge: false }>()\n   * ```\n   *\n   * @exampleResponse Complete Override type of object response\n   * ```ts\n   * let x: typeof data // MyType | null\n   * ```\n   *\n   * @example Partial Override type of successful response\n   * ```ts\n   * const { data } = await supabase\n   *   .from('countries')\n   *   .select()\n   *   .overrideTypes<Array<{ status: \"A\" | \"B\" }>>()\n   * ```\n   *\n   * @exampleResponse Partial Override type of successful response\n   * ```ts\n   * let x: typeof data // Array<CountryRowProperties & { status: \"A\" | \"B\" }>\n   * ```\n   *\n   * @example Partial Override type of object response\n   * ```ts\n   * const { data } = await supabase\n   *   .from('countries')\n   *   .select()\n   *   .maybeSingle()\n   *   .overrideTypes<{ status: \"A\" | \"B\" }>()\n   * ```\n   *\n   * @exampleResponse Partial Override type of object response\n   * ```ts\n   * let x: typeof data // CountryRowProperties & { status: \"A\" | \"B\" } | null\n   * ```\n   *\n   * @example Merge vs replace existing types\n   * ```typescript\n   * // Merge with existing types (default behavior)\n   * const query = supabase\n   *   .from('users')\n   *   .select()\n   *   .overrideTypes<{ custom_field: string }>()\n   *\n   * // Replace existing types completely\n   * const replaceQuery = supabase\n   *   .from('users')\n   *   .select()\n   *   .overrideTypes<{ id: number; name: string }, { merge: false }>()\n   * ```\n   */\n  overrideTypes<\n    NewResult,\n    Options extends { merge?: boolean } = { merge: true },\n  >(): PostgrestBuilder<\n    ClientOptions,\n    IsValidResultOverride<Result, NewResult, false, false> extends true\n      ? // Preserve the optionality of the result if the overriden type is an object (case of chaining with `maybeSingle`)\n        ContainsNull<Result> extends true\n        ? MergePartialResult<NewResult, NonNullable<Result>, Options> | null\n        : MergePartialResult<NewResult, Result, Options>\n      : CheckMatchingArrayTypes<Result, NewResult>,\n    ThrowOnError\n  > {\n    return this as unknown as PostgrestBuilder<\n      ClientOptions,\n      IsValidResultOverride<Result, NewResult, false, false> extends true\n        ? // Preserve the optionality of the result if the overriden type is an object (case of chaining with `maybeSingle`)\n          ContainsNull<Result> extends true\n          ? MergePartialResult<NewResult, NonNullable<Result>, Options> | null\n          : MergePartialResult<NewResult, Result, Options>\n        : CheckMatchingArrayTypes<Result, NewResult>,\n      ThrowOnError\n    >\n  }\n}\n", "import PostgrestBuilder from './PostgrestBuilder'\nimport PostgrestFilterBuilder, { InvalidMethodError } from './PostgrestFilterBuilder'\nimport { GetResult } from './select-query-parser/result'\nimport { CheckMatchingArrayTypes } from './types/types'\nimport { ClientServerOptions, GenericSchema } from './types/common/common'\nimport type { MaxAffectedEnabled } from './types/feature-flags'\n\nexport default class PostgrestTransformBuilder<\n  ClientOptions extends ClientServerOptions,\n  Schema extends GenericSchema,\n  Row extends Record<string, unknown>,\n  Result,\n  RelationName = unknown,\n  Relationships = unknown,\n  Method = unknown,\n> extends PostgrestBuilder<ClientOptions, Result> {\n  /**\n   * Perform a SELECT on the query result.\n   *\n   * By default, `.insert()`, `.update()`, `.upsert()`, and `.delete()` do not\n   * return modified rows. By calling this method, modified rows are returned in\n   * `data`.\n   *\n   * @param columns - The columns to retrieve, separated by commas\n   *\n   * @category Database\n   * @subcategory Using modifiers\n   *\n   * @example With `upsert()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .upsert({ id: 1, name: 'Han Solo' })\n   *   .select()\n   * ```\n   *\n   * @exampleSql With `upsert()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Han');\n   * ```\n   *\n   * @exampleResponse With `upsert()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"name\": \"Han Solo\"\n   *     }\n   *   ],\n   *   \"status\": 201,\n   *   \"statusText\": \"Created\"\n   * }\n   * ```\n   */\n  select<\n    Query extends string = '*',\n    NewResultOne = GetResult<Schema, Row, RelationName, Relationships, Query, ClientOptions>,\n  >(\n    columns?: Query\n  ): PostgrestFilterBuilder<\n    ClientOptions,\n    Schema,\n    Row,\n    Method extends 'RPC'\n      ? Result extends unknown[]\n        ? NewResultOne[]\n        : NewResultOne\n      : NewResultOne[],\n    RelationName,\n    Relationships,\n    Method\n  > {\n    // Remove whitespaces except when quoted\n    let quoted = false\n    const cleanedColumns = (columns ?? '*')\n      .split('')\n      .map((c) => {\n        if (/\\s/.test(c) && !quoted) {\n          return ''\n        }\n        if (c === '\"') {\n          quoted = !quoted\n        }\n        return c\n      })\n      .join('')\n    this.url.searchParams.set('select', cleanedColumns)\n    this.headers.append('Prefer', 'return=representation')\n    return this as unknown as PostgrestFilterBuilder<\n      ClientOptions,\n      Schema,\n      Row,\n      Method extends 'RPC'\n        ? Result extends unknown[]\n          ? NewResultOne[]\n          : NewResultOne\n        : NewResultOne[],\n      RelationName,\n      Relationships,\n      Method\n    >\n  }\n\n  order<ColumnName extends string & keyof Row>(\n    column: ColumnName,\n    options?: { ascending?: boolean; nullsFirst?: boolean; referencedTable?: undefined }\n  ): this\n  order(\n    column: string,\n    options?: { ascending?: boolean; nullsFirst?: boolean; referencedTable?: string }\n  ): this\n  /**\n   * @deprecated Use `options.referencedTable` instead of `options.foreignTable`\n   */\n  order<ColumnName extends string & keyof Row>(\n    column: ColumnName,\n    options?: { ascending?: boolean; nullsFirst?: boolean; foreignTable?: undefined }\n  ): this\n  /**\n   * @deprecated Use `options.referencedTable` instead of `options.foreignTable`\n   */\n  order(\n    column: string,\n    options?: { ascending?: boolean; nullsFirst?: boolean; foreignTable?: string }\n  ): this\n  /**\n   * Order the query result by `column`.\n   *\n   * You can call this method multiple times to order by multiple columns.\n   *\n   * You can order referenced tables, but it only affects the ordering of the\n   * parent table if you use `!inner` in the query.\n   *\n   * @param column - The column to order by\n   * @param options - Named parameters\n   * @param options.ascending - If `true`, the result will be in ascending order\n   * @param options.nullsFirst - If `true`, `null`s appear first. If `false`,\n   * `null`s appear last.\n   * @param options.referencedTable - Set this to order a referenced table by\n   * its columns\n   * @param options.foreignTable - Deprecated, use `options.referencedTable`\n   * instead\n   *\n   * @category Database\n   * @subcategory Using modifiers\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select('id, name')\n   *   .order('id', { ascending: false })\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 3,\n   *       \"name\": \"Han\"\n   *     },\n   *     {\n   *       \"id\": 2,\n   *       \"name\": \"Leia\"\n   *     },\n   *     {\n   *       \"id\": 1,\n   *       \"name\": \"Luke\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @exampleDescription On a referenced table\n   * Ordering with `referencedTable` doesn't affect the ordering of the\n   * parent table.\n   *\n   * @example On a referenced table\n   * ```ts\n   *   const { data, error } = await supabase\n   *     .from('orchestral_sections')\n   *     .select(`\n   *       name,\n   *       instruments (\n   *         name\n   *       )\n   *     `)\n   *     .order('name', { referencedTable: 'instruments', ascending: false })\n   *\n   * ```\n   *\n   * @exampleSql On a referenced table\n   * ```sql\n   * create table\n   *   orchestral_sections (id int8 primary key, name text);\n   * create table\n   *   instruments (\n   *     id int8 primary key,\n   *     section_id int8 not null references orchestral_sections,\n   *     name text\n   *   );\n   *\n   * insert into\n   *   orchestral_sections (id, name)\n   * values\n   *   (1, 'strings'),\n   *   (2, 'woodwinds');\n   * insert into\n   *   instruments (id, section_id, name)\n   * values\n   *   (1, 1, 'harp'),\n   *   (2, 1, 'violin');\n   * ```\n   *\n   * @exampleResponse On a referenced table\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"name\": \"strings\",\n   *       \"instruments\": [\n   *         {\n   *           \"name\": \"violin\"\n   *         },\n   *         {\n   *           \"name\": \"harp\"\n   *         }\n   *       ]\n   *     },\n   *     {\n   *       \"name\": \"woodwinds\",\n   *       \"instruments\": []\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @exampleDescription Order parent table by a referenced table\n   * Ordering with `referenced_table(col)` affects the ordering of the\n   * parent table.\n   *\n   * @example Order parent table by a referenced table\n   * ```ts\n   *   const { data, error } = await supabase\n   *     .from('instruments')\n   *     .select(`\n   *       name,\n   *       section:orchestral_sections (\n   *         name\n   *       )\n   *     `)\n   *     .order('section(name)', { ascending: true })\n   *\n   * ```\n   *\n   * @exampleSql Order parent table by a referenced table\n   * ```sql\n   * create table\n   *   orchestral_sections (id int8 primary key, name text);\n   * create table\n   *   instruments (\n   *     id int8 primary key,\n   *     section_id int8 not null references orchestral_sections,\n   *     name text\n   *   );\n   *\n   * insert into\n   *   orchestral_sections (id, name)\n   * values\n   *   (1, 'strings'),\n   *   (2, 'woodwinds');\n   * insert into\n   *   instruments (id, section_id, name)\n   * values\n   *   (1, 2, 'flute'),\n   *   (2, 1, 'violin');\n   * ```\n   *\n   * @exampleResponse Order parent table by a referenced table\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"name\": \"violin\",\n   *       \"orchestral_sections\": {\"name\": \"strings\"}\n   *     },\n   *     {\n   *       \"name\": \"flute\",\n   *       \"orchestral_sections\": {\"name\": \"woodwinds\"}\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  order(\n    column: string,\n    {\n      ascending = true,\n      nullsFirst,\n      foreignTable,\n      referencedTable = foreignTable,\n    }: {\n      ascending?: boolean\n      nullsFirst?: boolean\n      foreignTable?: string\n      referencedTable?: string\n    } = {}\n  ): this {\n    const key = referencedTable ? `${referencedTable}.order` : 'order'\n    const existingOrder = this.url.searchParams.get(key)\n\n    this.url.searchParams.set(\n      key,\n      `${existingOrder ? `${existingOrder},` : ''}${column}.${ascending ? 'asc' : 'desc'}${\n        nullsFirst === undefined ? '' : nullsFirst ? '.nullsfirst' : '.nullslast'\n      }`\n    )\n    return this\n  }\n\n  /**\n   * Limit the query result by `count`.\n   *\n   * @param count - The maximum number of rows to return\n   * @param options - Named parameters\n   * @param options.referencedTable - Set this to limit rows of referenced\n   * tables instead of the parent table\n   * @param options.foreignTable - Deprecated, use `options.referencedTable`\n   * instead\n   *\n   * @category Database\n   * @subcategory Using modifiers\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select('name')\n   *   .limit(1)\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"name\": \"Luke\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @example On a referenced table\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('orchestral_sections')\n   *   .select(`\n   *     name,\n   *     instruments (\n   *       name\n   *     )\n   *   `)\n   *   .limit(1, { referencedTable: 'instruments' })\n   * ```\n   *\n   * @exampleSql On a referenced table\n   * ```sql\n   * create table\n   *   orchestral_sections (id int8 primary key, name text);\n   * create table\n   *   instruments (\n   *     id int8 primary key,\n   *     section_id int8 not null references orchestral_sections,\n   *     name text\n   *   );\n   *\n   * insert into\n   *   orchestral_sections (id, name)\n   * values\n   *   (1, 'strings');\n   * insert into\n   *   instruments (id, section_id, name)\n   * values\n   *   (1, 1, 'harp'),\n   *   (2, 1, 'violin');\n   * ```\n   *\n   * @exampleResponse On a referenced table\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"name\": \"strings\",\n   *       \"instruments\": [\n   *         {\n   *           \"name\": \"violin\"\n   *         }\n   *       ]\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  limit(\n    count: number,\n    {\n      foreignTable,\n      referencedTable = foreignTable,\n    }: { foreignTable?: string; referencedTable?: string } = {}\n  ): this {\n    const key = typeof referencedTable === 'undefined' ? 'limit' : `${referencedTable}.limit`\n    this.url.searchParams.set(key, `${count}`)\n    return this\n  }\n\n  /**\n   * Limit the query result by starting at an offset `from` and ending at the offset `to`.\n   * Only records within this range are returned.\n   * This respects the query order and if there is no order clause the range could behave unexpectedly.\n   * The `from` and `to` values are 0-based and inclusive: `range(1, 3)` will include the second, third\n   * and fourth rows of the query.\n   *\n   * @param from - The starting index from which to limit the result\n   * @param to - The last index to which to limit the result\n   * @param options - Named parameters\n   * @param options.referencedTable - Set this to limit rows of referenced\n   * tables instead of the parent table\n   * @param options.foreignTable - Deprecated, use `options.referencedTable`\n   * instead\n   *\n   * @category Database\n   * @subcategory Using modifiers\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select('name')\n   *   .range(0, 1)\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"name\": \"Luke\"\n   *     },\n   *     {\n   *       \"name\": \"Leia\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  range(\n    from: number,\n    to: number,\n    {\n      foreignTable,\n      referencedTable = foreignTable,\n    }: { foreignTable?: string; referencedTable?: string } = {}\n  ): this {\n    const keyOffset =\n      typeof referencedTable === 'undefined' ? 'offset' : `${referencedTable}.offset`\n    const keyLimit = typeof referencedTable === 'undefined' ? 'limit' : `${referencedTable}.limit`\n    this.url.searchParams.set(keyOffset, `${from}`)\n    // Range is inclusive, so add 1\n    this.url.searchParams.set(keyLimit, `${to - from + 1}`)\n    return this\n  }\n\n  /**\n   * Set the AbortSignal for the fetch request.\n   *\n   * @param signal - The AbortSignal to use for the fetch request\n   *\n   * @category Database\n   * @subcategory Using modifiers\n   *\n   * @remarks\n   * You can use this to set a timeout for the request.\n   *\n   * @exampleDescription Aborting requests in-flight\n   * You can use an [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) to abort requests.\n   * Note that `status` and `statusText` don't mean anything for aborted requests as the request wasn't fulfilled.\n   *\n   * @example Aborting requests in-flight\n   * ```ts\n   * const ac = new AbortController()\n   *\n   * const { data, error } = await supabase\n   *   .from('very_big_table')\n   *   .select()\n   *   .abortSignal(ac.signal)\n   *\n   * // Abort the request after 100 ms\n   * setTimeout(() => ac.abort(), 100)\n   * ```\n   *\n   * @exampleResponse Aborting requests in-flight\n   * ```json\n   *   {\n   *     \"error\": {\n   *       \"message\": \"AbortError: The user aborted a request.\",\n   *       \"details\": \"\",\n   *       \"hint\": \"The request was aborted locally via the provided AbortSignal.\",\n   *       \"code\": \"\"\n   *     },\n   *     \"status\": 0,\n   *     \"statusText\": \"\"\n   *   }\n   *\n   * ```\n   *\n   * @example Set a timeout\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('very_big_table')\n   *   .select()\n   *   .abortSignal(AbortSignal.timeout(1000 /* ms *\\/))\n   * ```\n   *\n   * @exampleResponse Set a timeout\n   * ```json\n   *   {\n   *     \"error\": {\n   *       \"message\": \"FetchError: The user aborted a request.\",\n   *       \"details\": \"\",\n   *       \"hint\": \"\",\n   *       \"code\": \"\"\n   *     },\n   *     \"status\": 400,\n   *     \"statusText\": \"Bad Request\"\n   *   }\n   *\n   * ```\n   */\n  abortSignal(signal: AbortSignal): this {\n    this.signal = signal\n    return this\n  }\n\n  /**\n   * Return `data` as a single object instead of an array of objects.\n   *\n   * Query result must be one row (e.g. using `.limit(1)`), otherwise this\n   * returns an error.\n   *\n   * @category Database\n   * @subcategory Using modifiers\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select('name')\n   *   .limit(1)\n   *   .single()\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"name\": \"Luke\"\n   *   },\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  single<ResultOne = Result extends (infer ResultOne)[] ? ResultOne : never>(): PostgrestBuilder<\n    ClientOptions,\n    ResultOne\n  > {\n    this.headers.set('Accept', 'application/vnd.pgrst.object+json')\n    return this as unknown as PostgrestBuilder<ClientOptions, ResultOne>\n  }\n\n  /**\n   * Return `data` as a single object instead of an array of objects.\n   *\n   * Query result must be zero or one row (e.g. using `.limit(1)`), otherwise\n   * this returns an error.\n   *\n   * @category Database\n   * @subcategory Using modifiers\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select()\n   *   .eq('name', 'Katniss')\n   *   .maybeSingle()\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  maybeSingle<\n    ResultOne = Result extends (infer ResultOne)[] ? ResultOne : never,\n  >(): PostgrestBuilder<ClientOptions, ResultOne | null> {\n    // No Accept header override — we fetch as a list and enforce cardinality client-side.\n    // Fixes https://github.com/supabase/postgrest-js/issues/361 for all request methods.\n    this.isMaybeSingle = true\n    return this as unknown as PostgrestBuilder<ClientOptions, ResultOne | null>\n  }\n\n  /**\n   * Return `data` as a string in CSV format.\n   *\n   * @category Database\n   * @subcategory Using modifiers\n   *\n   * @exampleDescription Return data as CSV\n   * By default, the data is returned in JSON format, but can also be returned as Comma Separated Values.\n   *\n   * @example Return data as CSV\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select()\n   *   .csv()\n   * ```\n   *\n   * @exampleSql Return data as CSV\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse Return data as CSV\n   * ```json\n   * {\n   *   \"data\": \"id,name\\n1,Luke\\n2,Leia\\n3,Han\",\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  csv(): PostgrestBuilder<ClientOptions, string> {\n    this.headers.set('Accept', 'text/csv')\n    return this as unknown as PostgrestBuilder<ClientOptions, string>\n  }\n\n  /**\n   * Return `data` as an object in [GeoJSON](https://geojson.org) format.\n   *\n   * @category Database\n   */\n  geojson(): PostgrestBuilder<ClientOptions, Record<string, unknown>> {\n    this.headers.set('Accept', 'application/geo+json')\n    return this as unknown as PostgrestBuilder<ClientOptions, Record<string, unknown>>\n  }\n\n  /**\n   * Return `data` as the EXPLAIN plan for the query.\n   *\n   * You need to enable the\n   * [db_plan_enabled](https://supabase.com/docs/guides/database/debugging-performance#enabling-explain)\n   * setting before using this method.\n   *\n   * @param options - Named parameters\n   *\n   * @param options.analyze - If `true`, the query will be executed and the\n   * actual run time will be returned\n   *\n   * @param options.verbose - If `true`, the query identifier will be returned\n   * and `data` will include the output columns of the query\n   *\n   * @param options.settings - If `true`, include information on configuration\n   * parameters that affect query planning\n   *\n   * @param options.buffers - If `true`, include information on buffer usage\n   *\n   * @param options.wal - If `true`, include information on WAL record generation\n   *\n   * @param options.format - The format of the output, can be `\"text\"` (default)\n   * or `\"json\"`\n   *\n   * @category Database\n   * @subcategory Using modifiers\n   *\n   * @exampleDescription Get the execution plan\n   * By default, the data is returned in TEXT format, but can also be returned as JSON by using the `format` parameter.\n   *\n   * @example Get the execution plan\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select()\n   *   .explain()\n   * ```\n   *\n   * @exampleSql Get the execution plan\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse Get the execution plan\n   * ```js\n   * Aggregate  (cost=33.34..33.36 rows=1 width=112)\n   *   ->  Limit  (cost=0.00..18.33 rows=1000 width=40)\n   *         ->  Seq Scan on characters  (cost=0.00..22.00 rows=1200 width=40)\n   * ```\n   *\n   * @exampleDescription Get the execution plan with analyze and verbose\n   * By default, the data is returned in TEXT format, but can also be returned as JSON by using the `format` parameter.\n   *\n   * @example Get the execution plan with analyze and verbose\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select()\n   *   .explain({analyze:true,verbose:true})\n   * ```\n   *\n   * @exampleSql Get the execution plan with analyze and verbose\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse Get the execution plan with analyze and verbose\n   * ```js\n   * Aggregate  (cost=33.34..33.36 rows=1 width=112) (actual time=0.041..0.041 rows=1 loops=1)\n   *   Output: NULL::bigint, count(ROW(characters.id, characters.name)), COALESCE(json_agg(ROW(characters.id, characters.name)), '[]'::json), NULLIF(current_setting('response.headers'::text, true), ''::text), NULLIF(current_setting('response.status'::text, true), ''::text)\n   *   ->  Limit  (cost=0.00..18.33 rows=1000 width=40) (actual time=0.005..0.006 rows=3 loops=1)\n   *         Output: characters.id, characters.name\n   *         ->  Seq Scan on public.characters  (cost=0.00..22.00 rows=1200 width=40) (actual time=0.004..0.005 rows=3 loops=1)\n   *               Output: characters.id, characters.name\n   * Query Identifier: -4730654291623321173\n   * Planning Time: 0.407 ms\n   * Execution Time: 0.119 ms\n   * ```\n   */\n  explain({\n    analyze = false,\n    verbose = false,\n    settings = false,\n    buffers = false,\n    wal = false,\n    format = 'text',\n  }: {\n    analyze?: boolean\n    verbose?: boolean\n    settings?: boolean\n    buffers?: boolean\n    wal?: boolean\n    format?: 'json' | 'text'\n  } = {}) {\n    const options = [\n      analyze ? 'analyze' : null,\n      verbose ? 'verbose' : null,\n      settings ? 'settings' : null,\n      buffers ? 'buffers' : null,\n      wal ? 'wal' : null,\n    ]\n      .filter(Boolean)\n      .join('|')\n    // An Accept header can carry multiple media types but postgrest-js always sends one\n    const forMediatype = this.headers.get('Accept') ?? 'application/json'\n    this.headers.set(\n      'Accept',\n      `application/vnd.pgrst.plan+${format}; for=\"${forMediatype}\"; options=${options};`\n    )\n    if (format === 'json') {\n      return this as unknown as PostgrestBuilder<ClientOptions, Record<string, unknown>[]>\n    } else {\n      return this as unknown as PostgrestBuilder<ClientOptions, string>\n    }\n  }\n\n  /**\n   * Rollback the query.\n   *\n   * `data` will still be returned, but the query is not committed.\n   *\n   * @category Database\n   */\n  rollback(): this {\n    this.headers.append('Prefer', 'tx=rollback')\n    return this\n  }\n\n  /**\n   * Override the type of the returned `data`.\n   *\n   * @typeParam NewResult - The new result type to override with\n   * @deprecated Use overrideTypes<yourType, { merge: false }>() method at the end of your call chain instead\n   *\n   * @category Database\n   * @subcategory Using modifiers\n   *\n   * @remarks\n   * - Deprecated: use overrideTypes method instead\n   *\n   * @example Override type of successful response\n   * ```ts\n   * const { data } = await supabase\n   *   .from('countries')\n   *   .select()\n   *   .returns<Array<MyType>>()\n   * ```\n   *\n   * @exampleResponse Override type of successful response\n   * ```js\n   * let x: typeof data // MyType[]\n   * ```\n   *\n   * @example Override type of object response\n   * ```ts\n   * const { data } = await supabase\n   *   .from('countries')\n   *   .select()\n   *   .maybeSingle()\n   *   .returns<MyType>()\n   * ```\n   *\n   * @exampleResponse Override type of object response\n   * ```js\n   * let x: typeof data // MyType | null\n   * ```\n   */\n  returns<NewResult>(): PostgrestTransformBuilder<\n    ClientOptions,\n    Schema,\n    Row,\n    CheckMatchingArrayTypes<Result, NewResult>,\n    RelationName,\n    Relationships,\n    Method\n  > {\n    return this as unknown as PostgrestTransformBuilder<\n      ClientOptions,\n      Schema,\n      Row,\n      CheckMatchingArrayTypes<Result, NewResult>,\n      RelationName,\n      Relationships,\n      Method\n    >\n  }\n\n  /**\n   * Set the maximum number of rows that can be affected by the query.\n   * Only available in PostgREST v13+ and only works with PATCH and DELETE methods.\n   *\n   * @param value - The maximum number of rows that can be affected\n   *\n   * @category Database\n   */\n  maxAffected(value: number): MaxAffectedEnabled<ClientOptions['PostgrestVersion']> extends true\n    ? // TODO: update the RPC case to only work on RPC that returns SETOF rows\n      Method extends 'PATCH' | 'DELETE' | 'RPC'\n      ? this\n      : InvalidMethodError<'maxAffected method only available on update or delete'>\n    : InvalidMethodError<'maxAffected method only available on postgrest 13+'> {\n    this.headers.append('Prefer', 'handling=strict')\n    this.headers.append('Prefer', `max-affected=${value}`)\n    return this as unknown as MaxAffectedEnabled<ClientOptions['PostgrestVersion']> extends true\n      ? Method extends 'PATCH' | 'DELETE' | 'RPC'\n        ? this\n        : InvalidMethodError<'maxAffected method only available on update or delete'>\n      : InvalidMethodError<'maxAffected method only available on postgrest 13+'>\n  }\n}\n", "import PostgrestTransformBuilder from './PostgrestTransformBuilder'\nimport { JsonPathToAccessor, JsonPathToType } from './select-query-parser/utils'\nimport { ClientServerOptions, GenericSchema } from './types/common/common'\n\ntype FilterOperator =\n  | 'eq'\n  | 'neq'\n  | 'gt'\n  | 'gte'\n  | 'lt'\n  | 'lte'\n  | 'like'\n  | 'ilike'\n  | 'is'\n  | 'isdistinct'\n  | 'in'\n  | 'cs'\n  | 'cd'\n  | 'sl'\n  | 'sr'\n  | 'nxl'\n  | 'nxr'\n  | 'adj'\n  | 'ov'\n  | 'fts'\n  | 'plfts'\n  | 'phfts'\n  | 'wfts'\n  | 'match'\n  | 'imatch'\n\nexport type IsStringOperator<Path extends string> = Path extends `${string}->>${string}`\n  ? true\n  : false\n\nconst PostgrestReservedCharsRegexp = new RegExp('[,()]')\n\n// Match relationship filters with `table.column` syntax and resolve underlying\n// column value. If not matched, fallback to generic type.\n// TODO: Validate the relationship itself ala select-query-parser. Currently we\n// assume that all tables have valid relationships to each other, despite\n// nonexistent foreign keys.\ntype ResolveFilterValue<\n  Schema extends GenericSchema,\n  Row extends Record<string, unknown>,\n  ColumnName extends string,\n> = ColumnName extends `${infer RelationshipTable}.${infer Remainder}`\n  ? Remainder extends `${infer _}.${infer _}`\n    ? ResolveFilterValue<Schema, Row, Remainder>\n    : ResolveFilterRelationshipValue<Schema, RelationshipTable, Remainder>\n  : ColumnName extends keyof Row\n    ? Row[ColumnName]\n    : // If the column selection is a jsonpath like `data->value` or `data->>value` we attempt to match\n      // the expected type with the parsed custom json type\n      IsStringOperator<ColumnName> extends true\n      ? string\n      : JsonPathToType<Row, JsonPathToAccessor<ColumnName>> extends infer JsonPathValue\n        ? JsonPathValue extends never\n          ? never\n          : JsonPathValue\n        : never\n\ntype ResolveFilterRelationshipValue<\n  Schema extends GenericSchema,\n  RelationshipTable extends string,\n  RelationshipColumn extends string,\n> = Schema['Tables'] & Schema['Views'] extends infer TablesAndViews\n  ? RelationshipTable extends keyof TablesAndViews\n    ? 'Row' extends keyof TablesAndViews[RelationshipTable]\n      ? RelationshipColumn extends keyof TablesAndViews[RelationshipTable]['Row']\n        ? TablesAndViews[RelationshipTable]['Row'][RelationshipColumn]\n        : unknown\n      : unknown\n    : unknown\n  : never\n\nexport type InvalidMethodError<S extends string> = { Error: S }\n\ntype NonNullableColumn<T extends Record<string, unknown>, Col extends string> = Col extends keyof T\n  ? { [K in keyof T]: K extends Col ? NonNullable<T[K]> : T[K] }\n  : T\n\ntype NarrowResultColumn<T, Col extends string> = T extends (infer Item)[]\n  ? Item extends Record<string, unknown>\n    ? Col extends keyof Item\n      ? { [K in keyof Item]: K extends Col ? NonNullable<Item[K]> : Item[K] }[]\n      : T\n    : T\n  : T extends Record<string, unknown>\n    ? Col extends keyof T\n      ? { [K in keyof T]: K extends Col ? NonNullable<T[K]> : T[K] }\n      : T\n    : T\n\nexport default class PostgrestFilterBuilder<\n  ClientOptions extends ClientServerOptions,\n  Schema extends GenericSchema,\n  Row extends Record<string, unknown>,\n  Result,\n  RelationName = unknown,\n  Relationships = unknown,\n  Method = unknown,\n> extends PostgrestTransformBuilder<\n  ClientOptions,\n  Schema,\n  Row,\n  Result,\n  RelationName,\n  Relationships,\n  Method\n> {\n  /**\n   * Match only rows where `column` is equal to `value`.\n   *\n   * To check if the value of `column` is NULL, you should use `.is()` instead.\n   *\n   * @param column - The column to filter on\n   * @param value - The value to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select()\n   *   .eq('name', 'Leia')\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 2,\n   *       \"name\": \"Leia\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  eq<ColumnName extends string>(\n    column: ColumnName extends keyof Row\n      ? ColumnName\n      : ColumnName extends `${string}.${string}` | `${string}->${string}`\n        ? ColumnName\n        : string extends ColumnName\n          ? string\n          : keyof Row,\n    value: ResolveFilterValue<Schema, Row, ColumnName> extends never\n      ? NonNullable<unknown>\n      : ResolveFilterValue<Schema, Row, ColumnName> extends infer ResolvedFilterValue\n        ? NonNullable<ResolvedFilterValue>\n        : never\n  ): this {\n    this.url.searchParams.append(column as string, `eq.${value}`)\n    return this\n  }\n\n  /**\n   * Match only rows where `column` is not equal to `value`.\n   *\n   * This filter does not include rows where `column` is `NULL`. To match null\n   * values, use `.is(column, null)` instead.\n   *\n   * @param column - The column to filter on\n   * @param value - The value to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select()\n   *   .neq('name', 'Leia')\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"name\": \"Luke\"\n   *     },\n   *     {\n   *       \"id\": 3,\n   *       \"name\": \"Han\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  neq<ColumnName extends string>(\n    column: ColumnName extends keyof Row\n      ? ColumnName\n      : ColumnName extends `${string}.${string}` | `${string}->${string}`\n        ? ColumnName\n        : string extends ColumnName\n          ? string\n          : keyof Row,\n    value: ResolveFilterValue<Schema, Row, ColumnName> extends never\n      ? unknown\n      : ResolveFilterValue<Schema, Row, ColumnName> extends infer Resolved\n        ? Resolved\n        : never\n  ): this {\n    this.url.searchParams.append(column as string, `neq.${value}`)\n    return this\n  }\n\n  gt<ColumnName extends string & keyof Row>(column: ColumnName, value: Row[ColumnName]): this\n  gt(column: string, value: unknown): this\n  /**\n   * Match only rows where `column` is greater than `value`.\n   *\n   * @param column - The column to filter on\n   * @param value - The value to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @exampleDescription With `select()`\n   * When using [reserved words](https://www.postgresql.org/docs/current/sql-keywords-appendix.html) for column names you need\n   * to add double quotes e.g. `.gt('\"order\"', 2)`\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select()\n   *   .gt('id', 2)\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 3,\n   *       \"name\": \"Han\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  gt(column: string, value: unknown): this {\n    this.url.searchParams.append(column, `gt.${value}`)\n    return this\n  }\n\n  gte<ColumnName extends string & keyof Row>(column: ColumnName, value: Row[ColumnName]): this\n  gte(column: string, value: unknown): this\n  /**\n   * Match only rows where `column` is greater than or equal to `value`.\n   *\n   * @param column - The column to filter on\n   * @param value - The value to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select()\n   *   .gte('id', 2)\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 2,\n   *       \"name\": \"Leia\"\n   *     },\n   *     {\n   *       \"id\": 3,\n   *       \"name\": \"Han\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  gte(column: string, value: unknown): this {\n    this.url.searchParams.append(column, `gte.${value}`)\n    return this\n  }\n\n  lt<ColumnName extends string & keyof Row>(column: ColumnName, value: Row[ColumnName]): this\n  lt(column: string, value: unknown): this\n  /**\n   * Match only rows where `column` is less than `value`.\n   *\n   * @param column - The column to filter on\n   * @param value - The value to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select()\n   *   .lt('id', 2)\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"name\": \"Luke\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  lt(column: string, value: unknown): this {\n    this.url.searchParams.append(column, `lt.${value}`)\n    return this\n  }\n\n  lte<ColumnName extends string & keyof Row>(column: ColumnName, value: Row[ColumnName]): this\n  lte(column: string, value: unknown): this\n  /**\n   * Match only rows where `column` is less than or equal to `value`.\n   *\n   * @param column - The column to filter on\n   * @param value - The value to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select()\n   *   .lte('id', 2)\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"name\": \"Luke\"\n   *     },\n   *     {\n   *       \"id\": 2,\n   *       \"name\": \"Leia\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  lte(column: string, value: unknown): this {\n    this.url.searchParams.append(column, `lte.${value}`)\n    return this\n  }\n\n  like<ColumnName extends string & keyof Row>(column: ColumnName, pattern: string): this\n  like(column: string, pattern: string): this\n  /**\n   * Match only rows where `column` matches `pattern` case-sensitively.\n   *\n   * @param column - The column to filter on\n   * @param pattern - The pattern to match with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select()\n   *   .like('name', '%Lu%')\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"name\": \"Luke\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  like(column: string, pattern: string): this {\n    this.url.searchParams.append(column, `like.${pattern}`)\n    return this\n  }\n\n  likeAllOf<ColumnName extends string & keyof Row>(\n    column: ColumnName,\n    patterns: readonly string[]\n  ): this\n  likeAllOf(column: string, patterns: readonly string[]): this\n  /**\n   * Match only rows where `column` matches all of `patterns` case-sensitively.\n   *\n   * @param column - The column to filter on\n   * @param patterns - The patterns to match with\n   *\n   * @category Database\n   * @subcategory Using filters\n   */\n  likeAllOf(column: string, patterns: readonly string[]): this {\n    this.url.searchParams.append(column, `like(all).{${patterns.join(',')}}`)\n    return this\n  }\n\n  likeAnyOf<ColumnName extends string & keyof Row>(\n    column: ColumnName,\n    patterns: readonly string[]\n  ): this\n  likeAnyOf(column: string, patterns: readonly string[]): this\n  /**\n   * Match only rows where `column` matches any of `patterns` case-sensitively.\n   *\n   * @param column - The column to filter on\n   * @param patterns - The patterns to match with\n   *\n   * @category Database\n   * @subcategory Using filters\n   */\n  likeAnyOf(column: string, patterns: readonly string[]): this {\n    this.url.searchParams.append(column, `like(any).{${patterns.join(',')}}`)\n    return this\n  }\n\n  ilike<ColumnName extends string & keyof Row>(column: ColumnName, pattern: string): this\n  ilike(column: string, pattern: string): this\n  /**\n   * Match only rows where `column` matches `pattern` case-insensitively.\n   *\n   * @param column - The column to filter on\n   * @param pattern - The pattern to match with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select()\n   *   .ilike('name', '%lu%')\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"name\": \"Luke\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  ilike(column: string, pattern: string): this {\n    this.url.searchParams.append(column, `ilike.${pattern}`)\n    return this\n  }\n\n  ilikeAllOf<ColumnName extends string & keyof Row>(\n    column: ColumnName,\n    patterns: readonly string[]\n  ): this\n  ilikeAllOf(column: string, patterns: readonly string[]): this\n  /**\n   * Match only rows where `column` matches all of `patterns` case-insensitively.\n   *\n   * @param column - The column to filter on\n   * @param patterns - The patterns to match with\n   *\n   * @category Database\n   * @subcategory Using filters\n   */\n  ilikeAllOf(column: string, patterns: readonly string[]): this {\n    this.url.searchParams.append(column, `ilike(all).{${patterns.join(',')}}`)\n    return this\n  }\n\n  ilikeAnyOf<ColumnName extends string & keyof Row>(\n    column: ColumnName,\n    patterns: readonly string[]\n  ): this\n  ilikeAnyOf(column: string, patterns: readonly string[]): this\n  /**\n   * Match only rows where `column` matches any of `patterns` case-insensitively.\n   *\n   * @param column - The column to filter on\n   * @param patterns - The patterns to match with\n   *\n   * @category Database\n   * @subcategory Using filters\n   */\n  ilikeAnyOf(column: string, patterns: readonly string[]): this {\n    this.url.searchParams.append(column, `ilike(any).{${patterns.join(',')}}`)\n    return this\n  }\n\n  regexMatch<ColumnName extends string & keyof Row>(column: ColumnName, pattern: string): this\n  regexMatch(column: string, pattern: string): this\n  /**\n   * Match only rows where `column` matches the PostgreSQL regex `pattern`\n   * case-sensitively (using the `~` operator).\n   *\n   * @param column - The column to filter on\n   * @param pattern - The PostgreSQL regular expression pattern to match with\n   */\n  regexMatch(column: string, pattern: string): this {\n    this.url.searchParams.append(column, `match.${pattern}`)\n    return this\n  }\n\n  regexIMatch<ColumnName extends string & keyof Row>(column: ColumnName, pattern: string): this\n  regexIMatch(column: string, pattern: string): this\n  /**\n   * Match only rows where `column` matches the PostgreSQL regex `pattern`\n   * case-insensitively (using the `~*` operator).\n   *\n   * @param column - The column to filter on\n   * @param pattern - The PostgreSQL regular expression pattern to match with\n   */\n  regexIMatch(column: string, pattern: string): this {\n    this.url.searchParams.append(column, `imatch.${pattern}`)\n    return this\n  }\n\n  is<ColumnName extends string & keyof Row>(\n    column: ColumnName,\n    value: Row[ColumnName] & (boolean | null)\n  ): this\n  is(column: string, value: boolean | null): this\n  /**\n   * Match only rows where `column` IS `value`.\n   *\n   * For non-boolean columns, this is only relevant for checking if the value of\n   * `column` is NULL by setting `value` to `null`.\n   *\n   * For boolean columns, you can also set `value` to `true` or `false` and it\n   * will behave the same way as `.eq()`.\n   *\n   * @param column - The column to filter on\n   * @param value - The value to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @exampleDescription Checking for nullness, true or false\n   * Using the `eq()` filter doesn't work when filtering for `null`.\n   *\n   * Instead, you need to use `is()`.\n   *\n   * @example Checking for nullness, true or false\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('countries')\n   *   .select()\n   *   .is('name', null)\n   * ```\n   *\n   * @exampleSql Checking for nullness, true or false\n   * ```sql\n   * create table\n   *   countries (id int8 primary key, name text);\n   *\n   * insert into\n   *   countries (id, name)\n   * values\n   *   (1, 'null'),\n   *   (2, null);\n   * ```\n   *\n   * @exampleResponse Checking for nullness, true or false\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 2,\n   *       \"name\": \"null\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  is(column: string, value: boolean | null): this {\n    this.url.searchParams.append(column, `is.${value}`)\n    return this\n  }\n\n  /**\n   * Match only rows where `column` IS DISTINCT FROM `value`.\n   *\n   * Unlike `.neq()`, this treats `NULL` as a comparable value. Two `NULL` values\n   * are considered equal (not distinct), and comparing `NULL` with any non-NULL\n   * value returns true (distinct).\n   *\n   * @param column - The column to filter on\n   * @param value - The value to filter with\n   */\n  isDistinct<ColumnName extends string>(\n    column: ColumnName,\n    value: ResolveFilterValue<Schema, Row, ColumnName> extends never\n      ? unknown\n      : ResolveFilterValue<Schema, Row, ColumnName> extends infer ResolvedFilterValue\n        ? ResolvedFilterValue\n        : never\n  ): this {\n    this.url.searchParams.append(column, `isdistinct.${value}`)\n    return this\n  }\n\n  /**\n   * Match only rows where `column` is included in the `values` array.\n   *\n   * @param column - The column to filter on\n   * @param values - The values array to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select()\n   *   .in('name', ['Leia', 'Han'])\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 2,\n   *       \"name\": \"Leia\"\n   *     },\n   *     {\n   *       \"id\": 3,\n   *       \"name\": \"Han\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  in<ColumnName extends string>(\n    column: ColumnName,\n    values: ReadonlyArray<\n      ResolveFilterValue<Schema, Row, ColumnName> extends never\n        ? unknown\n        : // We want to infer the type before wrapping it into a `NonNullable` to avoid too deep\n          // type resolution error\n          ResolveFilterValue<Schema, Row, ColumnName> extends infer ResolvedFilterValue\n          ? ResolvedFilterValue\n          : // We should never enter this case as all the branches are covered above\n            never\n    >\n  ): this {\n    const cleanedValues = Array.from(new Set(values))\n      .map((s) => {\n        // handle postgrest reserved characters\n        // https://postgrest.org/en/v7.0.0/api.html#reserved-characters\n        if (typeof s === 'string' && PostgrestReservedCharsRegexp.test(s)) return `\"${s}\"`\n        else return `${s}`\n      })\n      .join(',')\n    this.url.searchParams.append(column, `in.(${cleanedValues})`)\n    return this\n  }\n\n  /**\n   * Match only rows where `column` is NOT included in the `values` array.\n   *\n   * @param column - The column to filter on\n   * @param values - The values array to filter with\n   */\n  notIn<ColumnName extends string>(\n    column: ColumnName,\n    values: ReadonlyArray<\n      ResolveFilterValue<Schema, Row, ColumnName> extends never\n        ? unknown\n        : ResolveFilterValue<Schema, Row, ColumnName> extends infer ResolvedFilterValue\n          ? ResolvedFilterValue\n          : never\n    >\n  ): this {\n    const cleanedValues = Array.from(new Set(values))\n      .map((s) => {\n        // handle postgrest reserved characters\n        // https://postgrest.org/en/v7.0.0/api.html#reserved-characters\n        if (typeof s === 'string' && PostgrestReservedCharsRegexp.test(s)) return `\"${s}\"`\n        else return `${s}`\n      })\n      .join(',')\n    this.url.searchParams.append(column, `not.in.(${cleanedValues})`)\n    return this\n  }\n\n  contains<ColumnName extends string & keyof Row>(\n    column: ColumnName,\n    value: string | ReadonlyArray<Row[ColumnName]> | Record<string, unknown>\n  ): this\n  contains(column: string, value: string | readonly unknown[] | Record<string, unknown>): this\n  /**\n   * Only relevant for jsonb, array, and range columns. Match only rows where\n   * `column` contains every element appearing in `value`.\n   *\n   * @param column - The jsonb, array, or range column to filter on\n   * @param value - The jsonb, array, or range value to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @example On array columns\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('issues')\n   *   .select()\n   *   .contains('tags', ['is:open', 'priority:low'])\n   * ```\n   *\n   * @exampleSql On array columns\n   * ```sql\n   * create table\n   *   issues (\n   *     id int8 primary key,\n   *     title text,\n   *     tags text[]\n   *   );\n   *\n   * insert into\n   *   issues (id, title, tags)\n   * values\n   *   (1, 'Cache invalidation is not working', array['is:open', 'severity:high', 'priority:low']),\n   *   (2, 'Use better names', array['is:open', 'severity:low', 'priority:medium']);\n   * ```\n   *\n   * @exampleResponse On array columns\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"title\": \"Cache invalidation is not working\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @exampleDescription On range columns\n   * Postgres supports a number of [range\n   * types](https://www.postgresql.org/docs/current/rangetypes.html). You\n   * can filter on range columns using the string representation of range\n   * values.\n   *\n   * @example On range columns\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('reservations')\n   *   .select()\n   *   .contains('during', '[2000-01-01 13:00, 2000-01-01 13:30)')\n   * ```\n   *\n   * @exampleSql On range columns\n   * ```sql\n   * create table\n   *   reservations (\n   *     id int8 primary key,\n   *     room_name text,\n   *     during tsrange\n   *   );\n   *\n   * insert into\n   *   reservations (id, room_name, during)\n   * values\n   *   (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n   *   (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n   * ```\n   *\n   * @exampleResponse On range columns\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"room_name\": \"Emerald\",\n   *       \"during\": \"[\\\"2000-01-01 13:00:00\\\",\\\"2000-01-01 15:00:00\\\")\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @example On `jsonb` columns\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('users')\n   *   .select('name')\n   *   .contains('address', { postcode: 90210 })\n   * ```\n   *\n   * @exampleSql On `jsonb` columns\n   * ```sql\n   * create table\n   *   users (\n   *     id int8 primary key,\n   *     name text,\n   *     address jsonb\n   *   );\n   *\n   * insert into\n   *   users (id, name, address)\n   * values\n   *   (1, 'Michael', '{ \"postcode\": 90210, \"street\": \"Melrose Place\" }'),\n   *   (2, 'Jane', '{}');\n   * ```\n   *\n   * @exampleResponse On `jsonb` columns\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"name\": \"Michael\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  contains(column: string, value: string | readonly unknown[] | Record<string, unknown>): this {\n    if (typeof value === 'string') {\n      // range types can be inclusive '[', ']' or exclusive '(', ')' so just\n      // keep it simple and accept a string\n      this.url.searchParams.append(column, `cs.${value}`)\n    } else if (Array.isArray(value)) {\n      // array\n      this.url.searchParams.append(column, `cs.{${value.join(',')}}`)\n    } else {\n      // json\n      this.url.searchParams.append(column, `cs.${JSON.stringify(value)}`)\n    }\n    return this\n  }\n\n  containedBy<ColumnName extends string & keyof Row>(\n    column: ColumnName,\n    value: string | ReadonlyArray<Row[ColumnName]> | Record<string, unknown>\n  ): this\n  containedBy(column: string, value: string | readonly unknown[] | Record<string, unknown>): this\n  /**\n   * Only relevant for jsonb, array, and range columns. Match only rows where\n   * every element appearing in `column` is contained by `value`.\n   *\n   * @param column - The jsonb, array, or range column to filter on\n   * @param value - The jsonb, array, or range value to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @example On array columns\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('classes')\n   *   .select('name')\n   *   .containedBy('days', ['monday', 'tuesday', 'wednesday', 'friday'])\n   * ```\n   *\n   * @exampleSql On array columns\n   * ```sql\n   * create table\n   *   classes (\n   *     id int8 primary key,\n   *     name text,\n   *     days text[]\n   *   );\n   *\n   * insert into\n   *   classes (id, name, days)\n   * values\n   *   (1, 'Chemistry', array['monday', 'friday']),\n   *   (2, 'History', array['monday', 'wednesday', 'thursday']);\n   * ```\n   *\n   * @exampleResponse On array columns\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"name\": \"Chemistry\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @exampleDescription On range columns\n   * Postgres supports a number of [range\n   * types](https://www.postgresql.org/docs/current/rangetypes.html). You\n   * can filter on range columns using the string representation of range\n   * values.\n   *\n   * @example On range columns\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('reservations')\n   *   .select()\n   *   .containedBy('during', '[2000-01-01 00:00, 2000-01-01 23:59)')\n   * ```\n   *\n   * @exampleSql On range columns\n   * ```sql\n   * create table\n   *   reservations (\n   *     id int8 primary key,\n   *     room_name text,\n   *     during tsrange\n   *   );\n   *\n   * insert into\n   *   reservations (id, room_name, during)\n   * values\n   *   (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n   *   (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n   * ```\n   *\n   * @exampleResponse On range columns\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"room_name\": \"Emerald\",\n   *       \"during\": \"[\\\"2000-01-01 13:00:00\\\",\\\"2000-01-01 15:00:00\\\")\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @example On `jsonb` columns\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('users')\n   *   .select('name')\n   *   .containedBy('address', {})\n   * ```\n   *\n   * @exampleSql On `jsonb` columns\n   * ```sql\n   * create table\n   *   users (\n   *     id int8 primary key,\n   *     name text,\n   *     address jsonb\n   *   );\n   *\n   * insert into\n   *   users (id, name, address)\n   * values\n   *   (1, 'Michael', '{ \"postcode\": 90210, \"street\": \"Melrose Place\" }'),\n   *   (2, 'Jane', '{}');\n   * ```\n   *\n   * @exampleResponse On `jsonb` columns\n   * ```json\n   *   {\n   *     \"data\": [\n   *       {\n   *         \"name\": \"Jane\"\n   *       }\n   *     ],\n   *     \"status\": 200,\n   *     \"statusText\": \"OK\"\n   *   }\n   *\n   * ```\n   */\n  containedBy(column: string, value: string | readonly unknown[] | Record<string, unknown>): this {\n    if (typeof value === 'string') {\n      // range\n      this.url.searchParams.append(column, `cd.${value}`)\n    } else if (Array.isArray(value)) {\n      // array\n      this.url.searchParams.append(column, `cd.{${value.join(',')}}`)\n    } else {\n      // json\n      this.url.searchParams.append(column, `cd.${JSON.stringify(value)}`)\n    }\n    return this\n  }\n\n  rangeGt<ColumnName extends string & keyof Row>(column: ColumnName, range: string): this\n  rangeGt(column: string, range: string): this\n  /**\n   * Only relevant for range columns. Match only rows where every element in\n   * `column` is greater than any element in `range`.\n   *\n   * @param column - The range column to filter on\n   * @param range - The range to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @exampleDescription With `select()`\n   * Postgres supports a number of [range\n   * types](https://www.postgresql.org/docs/current/rangetypes.html). You\n   * can filter on range columns using the string representation of range\n   * values.\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('reservations')\n   *   .select()\n   *   .rangeGt('during', '[2000-01-02 08:00, 2000-01-02 09:00)')\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   reservations (\n   *     id int8 primary key,\n   *     room_name text,\n   *     during tsrange\n   *   );\n   *\n   * insert into\n   *   reservations (id, room_name, during)\n   * values\n   *   (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n   *   (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   *   {\n   *     \"data\": [\n   *       {\n   *         \"id\": 2,\n   *         \"room_name\": \"Topaz\",\n   *         \"during\": \"[\\\"2000-01-02 09:00:00\\\",\\\"2000-01-02 10:00:00\\\")\"\n   *       }\n   *     ],\n   *     \"status\": 200,\n   *     \"statusText\": \"OK\"\n   *   }\n   *\n   * ```\n   */\n  rangeGt(column: string, range: string): this {\n    this.url.searchParams.append(column, `sr.${range}`)\n    return this\n  }\n\n  rangeGte<ColumnName extends string & keyof Row>(column: ColumnName, range: string): this\n  rangeGte(column: string, range: string): this\n  /**\n   * Only relevant for range columns. Match only rows where every element in\n   * `column` is either contained in `range` or greater than any element in\n   * `range`.\n   *\n   * @param column - The range column to filter on\n   * @param range - The range to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @exampleDescription With `select()`\n   * Postgres supports a number of [range\n   * types](https://www.postgresql.org/docs/current/rangetypes.html). You\n   * can filter on range columns using the string representation of range\n   * values.\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('reservations')\n   *   .select()\n   *   .rangeGte('during', '[2000-01-02 08:30, 2000-01-02 09:30)')\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   reservations (\n   *     id int8 primary key,\n   *     room_name text,\n   *     during tsrange\n   *   );\n   *\n   * insert into\n   *   reservations (id, room_name, during)\n   * values\n   *   (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n   *   (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   *   {\n   *     \"data\": [\n   *       {\n   *         \"id\": 2,\n   *         \"room_name\": \"Topaz\",\n   *         \"during\": \"[\\\"2000-01-02 09:00:00\\\",\\\"2000-01-02 10:00:00\\\")\"\n   *       }\n   *     ],\n   *     \"status\": 200,\n   *     \"statusText\": \"OK\"\n   *   }\n   *\n   * ```\n   */\n  rangeGte(column: string, range: string): this {\n    this.url.searchParams.append(column, `nxl.${range}`)\n    return this\n  }\n\n  rangeLt<ColumnName extends string & keyof Row>(column: ColumnName, range: string): this\n  rangeLt(column: string, range: string): this\n  /**\n   * Only relevant for range columns. Match only rows where every element in\n   * `column` is less than any element in `range`.\n   *\n   * @param column - The range column to filter on\n   * @param range - The range to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @exampleDescription With `select()`\n   * Postgres supports a number of [range\n   * types](https://www.postgresql.org/docs/current/rangetypes.html). You\n   * can filter on range columns using the string representation of range\n   * values.\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('reservations')\n   *   .select()\n   *   .rangeLt('during', '[2000-01-01 15:00, 2000-01-01 16:00)')\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   reservations (\n   *     id int8 primary key,\n   *     room_name text,\n   *     during tsrange\n   *   );\n   *\n   * insert into\n   *   reservations (id, room_name, during)\n   * values\n   *   (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n   *   (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"room_name\": \"Emerald\",\n   *       \"during\": \"[\\\"2000-01-01 13:00:00\\\",\\\"2000-01-01 15:00:00\\\")\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  rangeLt(column: string, range: string): this {\n    this.url.searchParams.append(column, `sl.${range}`)\n    return this\n  }\n\n  rangeLte<ColumnName extends string & keyof Row>(column: ColumnName, range: string): this\n  rangeLte(column: string, range: string): this\n  /**\n   * Only relevant for range columns. Match only rows where every element in\n   * `column` is either contained in `range` or less than any element in\n   * `range`.\n   *\n   * @param column - The range column to filter on\n   * @param range - The range to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @exampleDescription With `select()`\n   * Postgres supports a number of [range\n   * types](https://www.postgresql.org/docs/current/rangetypes.html). You\n   * can filter on range columns using the string representation of range\n   * values.\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('reservations')\n   *   .select()\n   *   .rangeLte('during', '[2000-01-01 14:00, 2000-01-01 16:00)')\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   reservations (\n   *     id int8 primary key,\n   *     room_name text,\n   *     during tsrange\n   *   );\n   *\n   * insert into\n   *   reservations (id, room_name, during)\n   * values\n   *   (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n   *   (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   *   {\n   *     \"data\": [\n   *       {\n   *         \"id\": 1,\n   *         \"room_name\": \"Emerald\",\n   *         \"during\": \"[\\\"2000-01-01 13:00:00\\\",\\\"2000-01-01 15:00:00\\\")\"\n   *       }\n   *     ],\n   *     \"status\": 200,\n   *     \"statusText\": \"OK\"\n   *   }\n   *\n   * ```\n   */\n  rangeLte(column: string, range: string): this {\n    this.url.searchParams.append(column, `nxr.${range}`)\n    return this\n  }\n\n  rangeAdjacent<ColumnName extends string & keyof Row>(column: ColumnName, range: string): this\n  rangeAdjacent(column: string, range: string): this\n  /**\n   * Only relevant for range columns. Match only rows where `column` is\n   * mutually exclusive to `range` and there can be no element between the two\n   * ranges.\n   *\n   * @param column - The range column to filter on\n   * @param range - The range to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @exampleDescription With `select()`\n   * Postgres supports a number of [range\n   * types](https://www.postgresql.org/docs/current/rangetypes.html). You\n   * can filter on range columns using the string representation of range\n   * values.\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('reservations')\n   *   .select()\n   *   .rangeAdjacent('during', '[2000-01-01 12:00, 2000-01-01 13:00)')\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   reservations (\n   *     id int8 primary key,\n   *     room_name text,\n   *     during tsrange\n   *   );\n   *\n   * insert into\n   *   reservations (id, room_name, during)\n   * values\n   *   (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n   *   (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"room_name\": \"Emerald\",\n   *       \"during\": \"[\\\"2000-01-01 13:00:00\\\",\\\"2000-01-01 15:00:00\\\")\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  rangeAdjacent(column: string, range: string): this {\n    this.url.searchParams.append(column, `adj.${range}`)\n    return this\n  }\n\n  overlaps<ColumnName extends string & keyof Row>(\n    column: ColumnName,\n    value: string | ReadonlyArray<Row[ColumnName]>\n  ): this\n  overlaps(column: string, value: string | readonly unknown[]): this\n  /**\n   * Only relevant for array and range columns. Match only rows where\n   * `column` and `value` have an element in common.\n   *\n   * @param column - The array or range column to filter on\n   * @param value - The array or range value to filter with\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @example On array columns\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('issues')\n   *   .select('title')\n   *   .overlaps('tags', ['is:closed', 'severity:high'])\n   * ```\n   *\n   * @exampleSql On array columns\n   * ```sql\n   * create table\n   *   issues (\n   *     id int8 primary key,\n   *     title text,\n   *     tags text[]\n   *   );\n   *\n   * insert into\n   *   issues (id, title, tags)\n   * values\n   *   (1, 'Cache invalidation is not working', array['is:open', 'severity:high', 'priority:low']),\n   *   (2, 'Use better names', array['is:open', 'severity:low', 'priority:medium']);\n   * ```\n   *\n   * @exampleResponse On array columns\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"title\": \"Cache invalidation is not working\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @exampleDescription On range columns\n   * Postgres supports a number of [range\n   * types](https://www.postgresql.org/docs/current/rangetypes.html). You\n   * can filter on range columns using the string representation of range\n   * values.\n   *\n   * @example On range columns\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('reservations')\n   *   .select()\n   *   .overlaps('during', '[2000-01-01 12:45, 2000-01-01 13:15)')\n   * ```\n   *\n   * @exampleSql On range columns\n   * ```sql\n   * create table\n   *   reservations (\n   *     id int8 primary key,\n   *     room_name text,\n   *     during tsrange\n   *   );\n   *\n   * insert into\n   *   reservations (id, room_name, during)\n   * values\n   *   (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n   *   (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n   * ```\n   *\n   * @exampleResponse On range columns\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"room_name\": \"Emerald\",\n   *       \"during\": \"[\\\"2000-01-01 13:00:00\\\",\\\"2000-01-01 15:00:00\\\")\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  overlaps(column: string, value: string | readonly unknown[]): this {\n    if (typeof value === 'string') {\n      // range\n      this.url.searchParams.append(column, `ov.${value}`)\n    } else {\n      // array\n      this.url.searchParams.append(column, `ov.{${value.join(',')}}`)\n    }\n    return this\n  }\n\n  textSearch<ColumnName extends string & keyof Row>(\n    column: ColumnName,\n    query: string,\n    options?: { config?: string; type?: 'plain' | 'phrase' | 'websearch' }\n  ): this\n  textSearch(\n    column: string,\n    query: string,\n    options?: { config?: string; type?: 'plain' | 'phrase' | 'websearch' }\n  ): this\n  /**\n   * Only relevant for text and tsvector columns. Match only rows where\n   * `column` matches the query string in `query`.\n   *\n   * @param column - The text or tsvector column to filter on\n   * @param query - The query text to match with\n   * @param options - Named parameters\n   * @param options.config - The text search configuration to use\n   * @param options.type - Change how the `query` text is interpreted\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @remarks\n   * - For more information, see [Postgres full text search](/docs/guides/database/full-text-search).\n   *\n   * @example Text search\n   * ```ts\n   * const result = await supabase\n   *   .from(\"texts\")\n   *   .select(\"content\")\n   *   .textSearch(\"content\", `'eggs' & 'ham'`, {\n   *     config: \"english\",\n   *   });\n   * ```\n   *\n   * @exampleSql Text search\n   * ```sql\n   * create table texts (\n   *   id      bigint\n   *           primary key\n   *           generated always as identity,\n   *   content text\n   * );\n   *\n   * insert into texts (content) values\n   *     ('Four score and seven years ago'),\n   *     ('The road goes ever on and on'),\n   *     ('Green eggs and ham')\n   * ;\n   * ```\n   *\n   * @exampleResponse Text search\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"content\": \"Green eggs and ham\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @exampleDescription Basic normalization\n   * Uses PostgreSQL's `plainto_tsquery` function.\n   *\n   * @example Basic normalization\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('quotes')\n   *   .select('catchphrase')\n   *   .textSearch('catchphrase', `'fat' & 'cat'`, {\n   *     type: 'plain',\n   *     config: 'english'\n   *   })\n   * ```\n   *\n   * @exampleDescription Full normalization\n   * Uses PostgreSQL's `phraseto_tsquery` function.\n   *\n   * @example Full normalization\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('quotes')\n   *   .select('catchphrase')\n   *   .textSearch('catchphrase', `'fat' & 'cat'`, {\n   *     type: 'phrase',\n   *     config: 'english'\n   *   })\n   * ```\n   *\n   * @exampleDescription Websearch\n   * Uses PostgreSQL's `websearch_to_tsquery` function.\n   * This function will never raise syntax errors, which makes it possible to use raw user-supplied input for search, and can be used\n   * with advanced operators.\n   *\n   * - `unquoted text`: text not inside quote marks will be converted to terms separated by & operators, as if processed by plainto_tsquery.\n   * - `\"quoted text\"`: text inside quote marks will be converted to terms separated by `<->` operators, as if processed by phraseto_tsquery.\n   * - `OR`: the word “or” will be converted to the | operator.\n   * - `-`: a dash will be converted to the ! operator.\n   *\n   * @example Websearch\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('quotes')\n   *   .select('catchphrase')\n   *   .textSearch('catchphrase', `'fat or cat'`, {\n   *     type: 'websearch',\n   *     config: 'english'\n   *   })\n   * ```\n   */\n  textSearch(\n    column: string,\n    query: string,\n    { config, type }: { config?: string; type?: 'plain' | 'phrase' | 'websearch' } = {}\n  ): this {\n    let typePart = ''\n    if (type === 'plain') {\n      typePart = 'pl'\n    } else if (type === 'phrase') {\n      typePart = 'ph'\n    } else if (type === 'websearch') {\n      typePart = 'w'\n    }\n    const configPart = config === undefined ? '' : `(${config})`\n    this.url.searchParams.append(column, `${typePart}fts${configPart}.${query}`)\n    return this\n  }\n\n  match<ColumnName extends string & keyof Row>(query: Record<ColumnName, Row[ColumnName]>): this\n  match(query: Record<string, unknown>): this\n  /**\n   * Match only rows where each column in `query` keys is equal to its\n   * associated value. Shorthand for multiple `.eq()`s.\n   *\n   * @param query - The object to filter with, with column names as keys mapped\n   * to their filter values\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select('name')\n   *   .match({ id: 2, name: 'Leia' })\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"name\": \"Leia\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  match(query: Record<string, unknown>): this {\n    Object.entries(query)\n      // columns with `undefined` value needs to be filtered out, otherwise it'll\n      // show up as `?column=eq.undefined`\n      .filter(([_, value]) => value !== undefined)\n      .forEach(([column, value]) => {\n        this.url.searchParams.append(column, `eq.${value}`)\n      })\n    return this\n  }\n\n  not<ColumnName extends string & keyof Row>(\n    column: ColumnName,\n    operator: 'is',\n    value: null\n  ): PostgrestFilterBuilder<\n    ClientOptions,\n    Schema,\n    NonNullableColumn<Row, ColumnName>,\n    NarrowResultColumn<Result, ColumnName>,\n    RelationName,\n    Relationships,\n    Method\n  > &\n    this\n  not<ColumnName extends string & keyof Row>(\n    column: ColumnName,\n    operator: FilterOperator,\n    value: Row[ColumnName]\n  ): this\n  not(column: string, operator: string, value: unknown): this\n  /**\n   * Match only rows which doesn't satisfy the filter.\n   *\n   * Unlike most filters, `opearator` and `value` are used as-is and need to\n   * follow [PostgREST\n   * syntax](https://postgrest.org/en/stable/api.html#operators). You also need\n   * to make sure they are properly sanitized.\n   *\n   * @param column - The column to filter on\n   * @param operator - The operator to be negated to filter with, following\n   * PostgREST syntax\n   * @param value - The value to filter with, following PostgREST syntax\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @remarks\n   * not() expects you to use the raw PostgREST syntax for the filter values.\n   *\n   * ```ts\n   * .not('id', 'in', '(5,6,7)')  // Use `()` for `in` filter\n   * .not('arraycol', 'cs', '{\"a\",\"b\"}')  // Use `cs` for `contains()`, `{}` for array values\n   * ```\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('countries')\n   *   .select()\n   *   .not('name', 'is', null)\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   countries (id int8 primary key, name text);\n   *\n   * insert into\n   *   countries (id, name)\n   * values\n   *   (1, 'null'),\n   *   (2, null);\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   *   {\n   *     \"data\": [\n   *       {\n   *         \"id\": 1,\n   *         \"name\": \"null\"\n   *       }\n   *     ],\n   *     \"status\": 200,\n   *     \"statusText\": \"OK\"\n   *   }\n   *\n   * ```\n   */\n  not(\n    column: string,\n    operator: string,\n    value: unknown\n  ): PostgrestFilterBuilder<ClientOptions, Schema, any, any, RelationName, Relationships, Method> &\n    this {\n    this.url.searchParams.append(column, `not.${operator}.${value}`)\n    return this as any\n  }\n\n  /**\n   * Match only rows which satisfy at least one of the filters.\n   *\n   * Unlike most filters, `filters` is used as-is and needs to follow [PostgREST\n   * syntax](https://postgrest.org/en/stable/api.html#operators). You also need\n   * to make sure it's properly sanitized.\n   *\n   * It's currently not possible to do an `.or()` filter across multiple tables.\n   *\n   * @param filters - The filters to use, following PostgREST syntax\n   * @param options - Named parameters\n   * @param options.referencedTable - Set this to filter on referenced tables\n   * instead of the parent table\n   * @param options.foreignTable - Deprecated, use `referencedTable` instead\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @remarks\n   * or() expects you to use the raw PostgREST syntax for the filter names and values.\n   *\n   * ```ts\n   * .or('id.in.(5,6,7), arraycol.cs.{\"a\",\"b\"}')  // Use `()` for `in` filter, `{}` for array values and `cs` for `contains()`.\n   * .or('id.in.(5,6,7), arraycol.cd.{\"a\",\"b\"}')  // Use `cd` for `containedBy()`\n   * ```\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select('name')\n   *   .or('id.eq.2,name.eq.Han')\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"name\": \"Leia\"\n   *     },\n   *     {\n   *       \"name\": \"Han\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @example Use `or` with `and`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select('name')\n   *   .or('id.gt.3,and(id.eq.1,name.eq.Luke)')\n   * ```\n   *\n   * @exampleSql Use `or` with `and`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse Use `or` with `and`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"name\": \"Luke\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @example Use `or` on referenced tables\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('orchestral_sections')\n   *   .select(`\n   *     name,\n   *     instruments!inner (\n   *       name\n   *     )\n   *   `)\n   *   .or('section_id.eq.1,name.eq.guzheng', { referencedTable: 'instruments' })\n   * ```\n   *\n   * @exampleSql Use `or` on referenced tables\n   * ```sql\n   * create table\n   *   orchestral_sections (id int8 primary key, name text);\n   * create table\n   *   instruments (\n   *     id int8 primary key,\n   *     section_id int8 not null references orchestral_sections,\n   *     name text\n   *   );\n   *\n   * insert into\n   *   orchestral_sections (id, name)\n   * values\n   *   (1, 'strings'),\n   *   (2, 'woodwinds');\n   * insert into\n   *   instruments (id, section_id, name)\n   * values\n   *   (1, 2, 'flute'),\n   *   (2, 1, 'violin');\n   * ```\n   *\n   * @exampleResponse Use `or` on referenced tables\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"name\": \"strings\",\n   *       \"instruments\": [\n   *         {\n   *           \"name\": \"violin\"\n   *         }\n   *       ]\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  or(\n    filters: string,\n    {\n      foreignTable,\n      referencedTable = foreignTable,\n    }: { foreignTable?: string; referencedTable?: string } = {}\n  ): this {\n    const key = referencedTable ? `${referencedTable}.or` : 'or'\n    this.url.searchParams.append(key, `(${filters})`)\n    return this\n  }\n\n  filter<ColumnName extends string & keyof Row>(\n    column: ColumnName,\n    operator: `${'' | 'not.'}${FilterOperator}`,\n    value: unknown\n  ): this\n  filter(column: string, operator: string, value: unknown): this\n  /**\n   * Match only rows which satisfy the filter. This is an escape hatch - you\n   * should use the specific filter methods wherever possible.\n   *\n   * Unlike most filters, `opearator` and `value` are used as-is and need to\n   * follow [PostgREST\n   * syntax](https://postgrest.org/en/stable/api.html#operators). You also need\n   * to make sure they are properly sanitized.\n   *\n   * @param column - The column to filter on\n   * @param operator - The operator to filter with, following PostgREST syntax\n   * @param value - The value to filter with, following PostgREST syntax\n   *\n   * @category Database\n   * @subcategory Using filters\n   *\n   * @remarks\n   * filter() expects you to use the raw PostgREST syntax for the filter values.\n   *\n   * ```ts\n   * .filter('id', 'in', '(5,6,7)')  // Use `()` for `in` filter\n   * .filter('arraycol', 'cs', '{\"a\",\"b\"}')  // Use `cs` for `contains()`, `{}` for array values\n   * ```\n   *\n   * @example With `select()`\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('characters')\n   *   .select()\n   *   .filter('name', 'in', '(\"Han\",\"Yoda\")')\n   * ```\n   *\n   * @exampleSql With `select()`\n   * ```sql\n   * create table\n   *   characters (id int8 primary key, name text);\n   *\n   * insert into\n   *   characters (id, name)\n   * values\n   *   (1, 'Luke'),\n   *   (2, 'Leia'),\n   *   (3, 'Han');\n   * ```\n   *\n   * @exampleResponse With `select()`\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 3,\n   *       \"name\": \"Han\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @example On a referenced table\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('orchestral_sections')\n   *   .select(`\n   *     name,\n   *     instruments!inner (\n   *       name\n   *     )\n   *   `)\n   *   .filter('instruments.name', 'eq', 'flute')\n   * ```\n   *\n   * @exampleSql On a referenced table\n   * ```sql\n   * create table\n   *   orchestral_sections (id int8 primary key, name text);\n   * create table\n   *    instruments (\n   *     id int8 primary key,\n   *     section_id int8 not null references orchestral_sections,\n   *     name text\n   *   );\n   *\n   * insert into\n   *   orchestral_sections (id, name)\n   * values\n   *   (1, 'strings'),\n   *   (2, 'woodwinds');\n   * insert into\n   *   instruments (id, section_id, name)\n   * values\n   *   (1, 2, 'flute'),\n   *   (2, 1, 'violin');\n   * ```\n   *\n   * @exampleResponse On a referenced table\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"name\": \"woodwinds\",\n   *       \"instruments\": [\n   *         {\n   *           \"name\": \"flute\"\n   *         }\n   *       ]\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  filter(column: string, operator: string, value: unknown): this {\n    this.url.searchParams.append(column, `${operator}.${value}`)\n    return this\n  }\n}\n", "import PostgrestFilterBuilder from './PostgrestFilterBuilder'\nimport { GetResult } from './select-query-parser/result'\nimport {\n  ClientServerOptions,\n  Fetch,\n  GenericSchema,\n  GenericTable,\n  GenericView,\n} from './types/common/common'\nimport { RejectExcessProperties } from './types/types'\n\nexport default class PostgrestQueryBuilder<\n  ClientOptions extends ClientServerOptions,\n  Schema extends GenericSchema,\n  Relation extends GenericTable | GenericView,\n  RelationName = unknown,\n  Relationships = Relation extends { Relationships: infer R } ? R : unknown,\n> {\n  url: URL\n  headers: Headers\n  schema?: string\n  signal?: AbortSignal\n  fetch?: Fetch\n  urlLengthLimit: number\n\n  /**\n   * Enable or disable automatic retries for transient errors.\n   * When enabled, idempotent requests (GET/HEAD/OPTIONS) that fail with network\n   * errors or HTTP 503/520 responses are automatically retried with exponential\n   * backoff (1s, 2s, 4s, up to 3 attempts). Defaults to `true` when not specified.\n   */\n  retry?: boolean\n\n  /**\n   * Creates a query builder scoped to a Postgres table or view.\n   *\n   * @category Database\n   *\n   * @param url - The URL for the query\n   * @param options - Named parameters\n   * @param options.headers - Custom headers\n   * @param options.schema - Postgres schema to use\n   * @param options.fetch - Custom fetch implementation\n   * @param options.urlLengthLimit - Maximum URL length before warning\n   * @param options.retry - Enable automatic retries for transient errors (default: true)\n   *\n   * @example Using supabase-js (recommended)\n   * ```ts\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n   * const { data, error } = await supabase.from('users').select('*')\n   * ```\n   *\n   * @example Standalone import for bundle-sensitive environments\n   * ```ts\n   * import { PostgrestQueryBuilder } from '@supabase/postgrest-js'\n   *\n   * const query = new PostgrestQueryBuilder(\n   *   new URL('https://xyzcompany.supabase.co/rest/v1/users'),\n   *   { headers: { apikey: 'your-publishable-key' }, retry: true }\n   * )\n   * ```\n   */\n  constructor(\n    url: URL,\n    {\n      headers = {},\n      schema,\n      fetch,\n      urlLengthLimit = 8000,\n      retry,\n    }: {\n      headers?: HeadersInit\n      schema?: string\n      fetch?: Fetch\n      urlLengthLimit?: number\n      retry?: boolean\n    }\n  ) {\n    this.url = url\n    this.headers = new Headers(headers)\n    this.schema = schema\n    this.fetch = fetch\n    this.urlLengthLimit = urlLengthLimit\n    this.retry = retry\n  }\n\n  /**\n   * Clone URL and headers to prevent shared state between operations.\n   */\n  private cloneRequestState(): { url: URL; headers: Headers } {\n    return {\n      url: new URL(this.url.toString()),\n      headers: new Headers(this.headers),\n    }\n  }\n\n  /**\n       * Perform a SELECT query on the table or view.\n       *\n       * @param columns - The columns to retrieve, separated by commas. Columns can be renamed when returned with `customName:columnName`\n       *\n       * @param options - Named parameters\n       *\n       * @param options.head - When set to `true`, `data` will not be returned.\n       * Useful if you only need the count.\n       *\n       * @param options.count - Count algorithm to use to count rows in the table or view.\n       *\n       * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n       * hood.\n       *\n       * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n       * statistics under the hood.\n       *\n       * `\"estimated\"`: Uses exact count for low numbers and planned count for high\n       * numbers.\n       *\n       * @remarks\n       * When using `count` with `.range()` or `.limit()`, the returned `count` is the total number of rows\n       * that match your filters, not the number of rows in the current page. Use this to build pagination UI.\n       \n     * - By default, Supabase projects return a maximum of 1,000 rows. This setting can be changed in your project's [API settings](/dashboard/project/_/settings/api). It's recommended that you keep it low to limit the payload size of accidental or malicious requests. You can use `range()` queries to paginate through your data.\n     * - `select()` can be combined with [Filters](/docs/reference/javascript/using-filters)\n     * - `select()` can be combined with [Modifiers](/docs/reference/javascript/using-modifiers)\n     * - `apikey` is a reserved keyword if you're using the [Supabase Platform](/docs/guides/platform) and [should be avoided as a column name](https://github.com/supabase/supabase/issues/5465). *\n     * @category Database\n     *\n     * @example Getting your data\n     * ```js\n     * const { data, error } = await supabase\n     *   .from('characters')\n     *   .select()\n     * ```\n     *\n     * @exampleSql Getting your data\n     * ```sql\n     * create table\n     *   characters (id int8 primary key, name text);\n     *\n     * insert into\n     *   characters (id, name)\n     * values\n     *   (1, 'Harry'),\n     *   (2, 'Frodo'),\n     *   (3, 'Katniss');\n     * ```\n     *\n     * @exampleResponse Getting your data\n     * ```json\n     * {\n     *   \"data\": [\n     *     {\n     *       \"id\": 1,\n     *       \"name\": \"Harry\"\n     *     },\n     *     {\n     *       \"id\": 2,\n     *       \"name\": \"Frodo\"\n     *     },\n     *     {\n     *       \"id\": 3,\n     *       \"name\": \"Katniss\"\n     *     }\n     *   ],\n     *   \"status\": 200,\n     *   \"statusText\": \"OK\"\n     * }\n     * ```\n     *\n     * @example Selecting specific columns\n     * ```js\n     * const { data, error } = await supabase\n     *   .from('characters')\n     *   .select('name')\n     * ```\n     *\n     * @exampleSql Selecting specific columns\n     * ```sql\n     * create table\n     *   characters (id int8 primary key, name text);\n     *\n     * insert into\n     *   characters (id, name)\n     * values\n     *   (1, 'Frodo'),\n     *   (2, 'Harry'),\n     *   (3, 'Katniss');\n     * ```\n     *\n     * @exampleResponse Selecting specific columns\n     * ```json\n     * {\n     *   \"data\": [\n     *     {\n     *       \"name\": \"Frodo\"\n     *     },\n     *     {\n     *       \"name\": \"Harry\"\n     *     },\n     *     {\n     *       \"name\": \"Katniss\"\n     *     }\n     *   ],\n     *   \"status\": 200,\n     *   \"statusText\": \"OK\"\n     * }\n     * ```\n     *\n     * @exampleDescription Query referenced tables\n     * If your database has foreign key relationships, you can query related tables too.\n     *\n     * @example Query referenced tables\n     * ```js\n     * const { data, error } = await supabase\n     *   .from('orchestral_sections')\n     *   .select(`\n     *     name,\n     *     instruments (\n     *       name\n     *     )\n     *   `)\n     * ```\n     *\n     * @exampleSql Query referenced tables\n     * ```sql\n     * create table\n     *   orchestral_sections (id int8 primary key, name text);\n     * create table\n     *   instruments (\n     *     id int8 primary key,\n     *     section_id int8 not null references orchestral_sections,\n     *     name text\n     *   );\n     *\n     * insert into\n     *   orchestral_sections (id, name)\n     * values\n     *   (1, 'strings'),\n     *   (2, 'woodwinds');\n     * insert into\n     *   instruments (id, section_id, name)\n     * values\n     *   (1, 2, 'flute'),\n     *   (2, 1, 'violin');\n     * ```\n     *\n     * @exampleResponse Query referenced tables\n     * ```json\n     * {\n     *   \"data\": [\n     *     {\n     *       \"name\": \"strings\",\n     *       \"instruments\": [\n     *         {\n     *           \"name\": \"violin\"\n     *         }\n     *       ]\n     *     },\n     *     {\n     *       \"name\": \"woodwinds\",\n     *       \"instruments\": [\n     *         {\n     *           \"name\": \"flute\"\n     *         }\n     *       ]\n     *     }\n     *   ],\n     *   \"status\": 200,\n     *   \"statusText\": \"OK\"\n     * }\n     * ```\n     *\n     * @exampleDescription Query referenced tables with spaces in their names\n     * If your table name contains spaces, you must use double quotes in the `select` statement to reference the table.\n     *\n     * @example Query referenced tables with spaces in their names\n     * ```js\n     * const { data, error } = await supabase\n     *   .from('orchestral sections')\n     *   .select(`\n     *     name,\n     *     \"musical instruments\" (\n     *       name\n     *     )\n     *   `)\n     * ```\n     *\n     * @exampleSql Query referenced tables with spaces in their names\n     * ```sql\n     * create table\n     *   \"orchestral sections\" (id int8 primary key, name text);\n     * create table\n     *   \"musical instruments\" (\n     *     id int8 primary key,\n     *     section_id int8 not null references \"orchestral sections\",\n     *     name text\n     *   );\n     *\n     * insert into\n     *   \"orchestral sections\" (id, name)\n     * values\n     *   (1, 'strings'),\n     *   (2, 'woodwinds');\n     * insert into\n     *   \"musical instruments\" (id, section_id, name)\n     * values\n     *   (1, 2, 'flute'),\n     *   (2, 1, 'violin');\n     * ```\n     *\n     * @exampleResponse Query referenced tables with spaces in their names\n     * ```json\n     * {\n     *   \"data\": [\n     *     {\n     *       \"name\": \"strings\",\n     *       \"musical instruments\": [\n     *         {\n     *           \"name\": \"violin\"\n     *         }\n     *       ]\n     *     },\n     *     {\n     *       \"name\": \"woodwinds\",\n     *       \"musical instruments\": [\n     *         {\n     *           \"name\": \"flute\"\n     *         }\n     *       ]\n     *     }\n     *   ],\n     *   \"status\": 200,\n     *   \"statusText\": \"OK\"\n     * }\n     * ```\n     *\n     * @exampleDescription Query referenced tables through a join table\n     * If you're in a situation where your tables are **NOT** directly\n     * related, but instead are joined by a _join table_, you can still use\n     * the `select()` method to query the related data. The join table needs\n     * to have the foreign keys as part of its composite primary key.\n     *\n     * @example Query referenced tables through a join table\n     * ```ts\n     * const { data, error } = await supabase\n     *   .from('users')\n     *   .select(`\n     *     name,\n     *     teams (\n     *       name\n     *     )\n     *   `)\n     *   \n     * ```\n     *\n     * @exampleSql Query referenced tables through a join table\n     * ```sql\n     * create table\n     *   users (\n     *     id int8 primary key,\n     *     name text\n     *   );\n     * create table\n     *   teams (\n     *     id int8 primary key,\n     *     name text\n     *   );\n     * -- join table\n     * create table\n     *   users_teams (\n     *     user_id int8 not null references users,\n     *     team_id int8 not null references teams,\n     *     -- both foreign keys must be part of a composite primary key\n     *     primary key (user_id, team_id)\n     *   );\n     *\n     * insert into\n     *   users (id, name)\n     * values\n     *   (1, 'Kiran'),\n     *   (2, 'Evan');\n     * insert into\n     *   teams (id, name)\n     * values\n     *   (1, 'Green'),\n     *   (2, 'Blue');\n     * insert into\n     *   users_teams (user_id, team_id)\n     * values\n     *   (1, 1),\n     *   (1, 2),\n     *   (2, 2);\n     * ```\n     *\n     * @exampleResponse Query referenced tables through a join table\n     * ```json\n     *   {\n     *     \"data\": [\n     *       {\n     *         \"name\": \"Kiran\",\n     *         \"teams\": [\n     *           {\n     *             \"name\": \"Green\"\n     *           },\n     *           {\n     *             \"name\": \"Blue\"\n     *           }\n     *         ]\n     *       },\n     *       {\n     *         \"name\": \"Evan\",\n     *         \"teams\": [\n     *           {\n     *             \"name\": \"Blue\"\n     *           }\n     *         ]\n     *       }\n     *     ],\n     *     \"status\": 200,\n     *     \"statusText\": \"OK\"\n     *   }\n     *   \n     * ```\n     *\n     * @exampleDescription Query the same referenced table multiple times\n     * If you need to query the same referenced table twice, use the name of the\n     * joined column to identify which join to use. You can also give each\n     * column an alias.\n     *\n     * @example Query the same referenced table multiple times\n     * ```ts\n     * const { data, error } = await supabase\n     *   .from('messages')\n     *   .select(`\n     *     content,\n     *     from:sender_id(name),\n     *     to:receiver_id(name)\n     *   `)\n     *\n     * // To infer types, use the name of the table (in this case `users`) and\n     * // the name of the foreign key constraint.\n     * const { data, error } = await supabase\n     *   .from('messages')\n     *   .select(`\n     *     content,\n     *     from:users!messages_sender_id_fkey(name),\n     *     to:users!messages_receiver_id_fkey(name)\n     *   `)\n     * ```\n     *\n     * @exampleSql Query the same referenced table multiple times\n     * ```sql\n     *  create table\n     *  users (id int8 primary key, name text);\n     *\n     *  create table\n     *    messages (\n     *      sender_id int8 not null references users,\n     *      receiver_id int8 not null references users,\n     *      content text\n     *    );\n     *\n     *  insert into\n     *    users (id, name)\n     *  values\n     *    (1, 'Kiran'),\n     *    (2, 'Evan');\n     *\n     *  insert into\n     *    messages (sender_id, receiver_id, content)\n     *  values\n     *    (1, 2, '👋');\n     *  ```\n     * ```\n     *\n     * @exampleResponse Query the same referenced table multiple times\n     * ```json\n     * {\n     *   \"data\": [\n     *     {\n     *       \"content\": \"👋\",\n     *       \"from\": {\n     *         \"name\": \"Kiran\"\n     *       },\n     *       \"to\": {\n     *         \"name\": \"Evan\"\n     *       }\n     *     }\n     *   ],\n     *   \"status\": 200,\n     *   \"statusText\": \"OK\"\n     * }\n     * ```\n     *\n     * @exampleDescription Query nested foreign tables through a join table\n     * You can use the result of a joined table to gather data in\n     * another foreign table. With multiple references to the same foreign\n     * table you must specify the column on which to conduct the join.\n     *\n     * @example Query nested foreign tables through a join table\n     * ```ts\n     *   const { data, error } = await supabase\n     *     .from('games')\n     *     .select(`\n     *       game_id:id,\n     *       away_team:teams!games_away_team_fkey (\n     *         users (\n     *           id,\n     *           name\n     *         )\n     *       )\n     *     `)\n     *   \n     * ```\n     *\n     * @exampleSql Query nested foreign tables through a join table\n     * ```sql\n     * ```sql\n     * create table\n     *   users (\n     *     id int8 primary key,\n     *     name text\n     *   );\n     * create table\n     *   teams (\n     *     id int8 primary key,\n     *     name text\n     *   );\n     * -- join table\n     * create table\n     *   users_teams (\n     *     user_id int8 not null references users,\n     *     team_id int8 not null references teams,\n     *\n     *     primary key (user_id, team_id)\n     *   );\n     * create table\n     *   games (\n     *     id int8 primary key,\n     *     home_team int8 not null references teams,\n     *     away_team int8 not null references teams,\n     *     name text\n     *   );\n     *\n     * insert into users (id, name)\n     * values\n     *   (1, 'Kiran'),\n     *   (2, 'Evan');\n     * insert into\n     *   teams (id, name)\n     * values\n     *   (1, 'Green'),\n     *   (2, 'Blue');\n     * insert into\n     *   users_teams (user_id, team_id)\n     * values\n     *   (1, 1),\n     *   (1, 2),\n     *   (2, 2);\n     * insert into\n     *   games (id, home_team, away_team, name)\n     * values\n     *   (1, 1, 2, 'Green vs Blue'),\n     *   (2, 2, 1, 'Blue vs Green');\n     * ```\n     *\n     * @exampleResponse Query nested foreign tables through a join table\n     * ```json\n     *   {\n     *     \"data\": [\n     *       {\n     *         \"game_id\": 1,\n     *         \"away_team\": {\n     *           \"users\": [\n     *             {\n     *               \"id\": 1,\n     *               \"name\": \"Kiran\"\n     *             },\n     *             {\n     *               \"id\": 2,\n     *               \"name\": \"Evan\"\n     *             }\n     *           ]\n     *         }\n     *       },\n     *       {\n     *         \"game_id\": 2,\n     *         \"away_team\": {\n     *           \"users\": [\n     *             {\n     *               \"id\": 1,\n     *               \"name\": \"Kiran\"\n     *             }\n     *           ]\n     *         }\n     *       }\n     *     ],\n     *     \"status\": 200,\n     *     \"statusText\": \"OK\"\n     *   }\n     *   \n     * ```\n     *\n     * @exampleDescription Filtering through referenced tables\n     * If the filter on a referenced table's column is not satisfied, the referenced\n     * table returns `[]` or `null` but the parent table is not filtered out.\n     * If you want to filter out the parent table rows, use the `!inner` hint\n     *\n     * @example Filtering through referenced tables\n     * ```ts\n     * const { data, error } = await supabase\n     *   .from('instruments')\n     *   .select('name, orchestral_sections(*)')\n     *   .eq('orchestral_sections.name', 'percussion')\n     * ```\n     *\n     * @exampleSql Filtering through referenced tables\n     * ```sql\n     * create table\n     *   orchestral_sections (id int8 primary key, name text);\n     * create table\n     *   instruments (\n     *     id int8 primary key,\n     *     section_id int8 not null references orchestral_sections,\n     *     name text\n     *   );\n     *\n     * insert into\n     *   orchestral_sections (id, name)\n     * values\n     *   (1, 'strings'),\n     *   (2, 'woodwinds');\n     * insert into\n     *   instruments (id, section_id, name)\n     * values\n     *   (1, 2, 'flute'),\n     *   (2, 1, 'violin');\n     * ```\n     *\n     * @exampleResponse Filtering through referenced tables\n     * ```json\n     * {\n     *   \"data\": [\n     *     {\n     *       \"name\": \"flute\",\n     *       \"orchestral_sections\": null\n     *     },\n     *     {\n     *       \"name\": \"violin\",\n     *       \"orchestral_sections\": null\n     *     }\n     *   ],\n     *   \"status\": 200,\n     *   \"statusText\": \"OK\"\n     * }\n     * ```\n     *\n     * @exampleDescription Querying referenced table with count\n     * You can get the number of rows in a related table by using the\n     * **count** property.\n     *\n     * @example Querying referenced table with count\n     * ```ts\n     * const { data, error } = await supabase\n     *   .from('orchestral_sections')\n     *   .select(`*, instruments(count)`)\n     * ```\n     *\n     * @exampleSql Querying referenced table with count\n     * ```sql\n     * create table orchestral_sections (\n     *   \"id\" \"uuid\" primary key default \"extensions\".\"uuid_generate_v4\"() not null,\n     *   \"name\" text\n     * );\n     *\n     * create table characters (\n     *   \"id\" \"uuid\" primary key default \"extensions\".\"uuid_generate_v4\"() not null,\n     *   \"name\" text,\n     *   \"section_id\" \"uuid\" references public.orchestral_sections on delete cascade\n     * );\n     *\n     * with section as (\n     *   insert into orchestral_sections (name)\n     *   values ('strings') returning id\n     * )\n     * insert into instruments (name, section_id) values\n     * ('violin', (select id from section)),\n     * ('viola', (select id from section)),\n     * ('cello', (select id from section)),\n     * ('double bass', (select id from section));\n     * ```\n     *\n     * @exampleResponse Querying referenced table with count\n     * ```json\n     * [\n     *   {\n     *     \"id\": \"693694e7-d993-4360-a6d7-6294e325d9b6\",\n     *     \"name\": \"strings\",\n     *     \"instruments\": [\n     *       {\n     *         \"count\": 4\n     *       }\n     *     ]\n     *   }\n     * ]\n     * ```\n     *\n     * @exampleDescription Querying with count option\n     * You can get the number of rows by using the\n     * [count](/docs/reference/javascript/select#parameters) option.\n     *\n     * @example Querying with count option\n     * ```ts\n     * const { count, error } = await supabase\n     *   .from('characters')\n     *   .select('*', { count: 'exact', head: true })\n     * ```\n     *\n     * @exampleSql Querying with count option\n     * ```sql\n     * create table\n     *   characters (id int8 primary key, name text);\n     *\n     * insert into\n     *   characters (id, name)\n     * values\n     *   (1, 'Luke'),\n     *   (2, 'Leia'),\n     *   (3, 'Han');\n     * ```\n     *\n     * @exampleResponse Querying with count option\n     * ```json\n     * {\n     *   \"count\": 3,\n     *   \"status\": 200,\n     *   \"statusText\": \"OK\"\n     * }\n     * ```\n     *\n     * @exampleDescription Querying JSON data\n     * You can select and filter data inside of\n     * [JSON](/docs/guides/database/json) columns. Postgres offers some\n     * [operators](/docs/guides/database/json#query-the-jsonb-data) for\n     * querying JSON data.\n     *\n     * @example Querying JSON data\n     * ```ts\n     * const { data, error } = await supabase\n     *   .from('users')\n     *   .select(`\n     *     id, name,\n     *     address->city\n     *   `)\n     * ```\n     *\n     * @exampleSql Querying JSON data\n     * ```sql\n     * create table\n     *   users (\n     *     id int8 primary key,\n     *     name text,\n     *     address jsonb\n     *   );\n     *\n     * insert into\n     *   users (id, name, address)\n     * values\n     *   (1, 'Frodo', '{\"city\":\"Hobbiton\"}');\n     * ```\n     *\n     * @exampleResponse Querying JSON data\n     * ```json\n     * {\n     *   \"data\": [\n     *     {\n     *       \"id\": 1,\n     *       \"name\": \"Frodo\",\n     *       \"city\": \"Hobbiton\"\n     *     }\n     *   ],\n     *   \"status\": 200,\n     *   \"statusText\": \"OK\"\n     * }\n     * ```\n     *\n     * @exampleDescription Querying referenced table with inner join\n     * If you don't want to return the referenced table contents, you can leave the parenthesis empty.\n     * Like `.select('name, orchestral_sections!inner()')`.\n     *\n     * @example Querying referenced table with inner join\n     * ```ts\n     * const { data, error } = await supabase\n     *   .from('instruments')\n     *   .select('name, orchestral_sections!inner(name)')\n     *   .eq('orchestral_sections.name', 'woodwinds')\n     *   .limit(1)\n     * ```\n     *\n     * @exampleSql Querying referenced table with inner join\n     * ```sql\n     * create table orchestral_sections (\n     *   \"id\" \"uuid\" primary key default \"extensions\".\"uuid_generate_v4\"() not null,\n     *   \"name\" text\n     * );\n     *\n     * create table instruments (\n     *   \"id\" \"uuid\" primary key default \"extensions\".\"uuid_generate_v4\"() not null,\n     *   \"name\" text,\n     *   \"section_id\" \"uuid\" references public.orchestral_sections on delete cascade\n     * );\n     *\n     * with section as (\n     *   insert into orchestral_sections (name)\n     *   values ('woodwinds') returning id\n     * )\n     * insert into instruments (name, section_id) values\n     * ('flute', (select id from section)),\n     * ('clarinet', (select id from section)),\n     * ('bassoon', (select id from section)),\n     * ('piccolo', (select id from section));\n     * ```\n     *\n     * @exampleResponse Querying referenced table with inner join\n     * ```json\n     * {\n     *   \"data\": [\n     *     {\n     *       \"name\": \"flute\",\n     *       \"orchestral_sections\": {\"name\": \"woodwinds\"}\n     *     }\n     *   ],\n     *   \"status\": 200,\n     *   \"statusText\": \"OK\"\n     * }\n     * ```\n     *\n     * @exampleDescription Switching schemas per query\n     * In addition to setting the schema during initialization, you can also switch schemas on a per-query basis.\n     * Make sure you've set up your [database privileges and API settings](/docs/guides/api/using-custom-schemas).\n     *\n     * @example Switching schemas per query\n     * ```ts\n     * const { data, error } = await supabase\n     *   .schema('myschema')\n     *   .from('mytable')\n     *   .select()\n     * ```\n     *\n     * @exampleSql Switching schemas per query\n     * ```sql\n     * create schema myschema;\n     *\n     * create table myschema.mytable (\n     *   id uuid primary key default gen_random_uuid(),\n     *   data text\n     * );\n     *\n     * insert into myschema.mytable (data) values ('mydata');\n     * ```\n     *\n     * @exampleResponse Switching schemas per query\n     * ```json\n     * {\n     *   \"data\": [\n     *     {\n     *       \"id\": \"4162e008-27b0-4c0f-82dc-ccaeee9a624d\",\n     *       \"data\": \"mydata\"\n     *     }\n     *   ],\n     *   \"status\": 200,\n     *   \"statusText\": \"OK\"\n     * }\n     * ```\n       */\n  select<\n    Query extends string = '*',\n    ResultOne = GetResult<\n      Schema,\n      Relation['Row'],\n      RelationName,\n      Relationships,\n      Query,\n      ClientOptions\n    >,\n  >(\n    columns?: Query,\n    options?: {\n      head?: boolean\n      count?: 'exact' | 'planned' | 'estimated' | (string & {})\n    }\n  ): PostgrestFilterBuilder<\n    ClientOptions,\n    Schema,\n    Relation['Row'],\n    ResultOne[],\n    RelationName,\n    Relationships,\n    'GET'\n  > {\n    const { head = false, count } = options ?? {}\n\n    const method = head ? 'HEAD' : 'GET'\n    // Remove whitespaces except when quoted\n    let quoted = false\n    const cleanedColumns = (columns ?? '*')\n      .split('')\n      .map((c) => {\n        if (/\\s/.test(c) && !quoted) {\n          return ''\n        }\n        if (c === '\"') {\n          quoted = !quoted\n        }\n        return c\n      })\n      .join('')\n\n    const { url, headers } = this.cloneRequestState()\n    url.searchParams.set('select', cleanedColumns)\n\n    if (count) {\n      headers.append('Prefer', `count=${count}`)\n    }\n\n    return new PostgrestFilterBuilder({\n      method,\n      url,\n      headers,\n      schema: this.schema,\n      fetch: this.fetch,\n      urlLengthLimit: this.urlLengthLimit,\n      retry: this.retry,\n    })\n  }\n\n  /**\n   * Perform an INSERT into the table or view.\n   *\n   * By default, inserted rows are not returned. To return it, chain the call\n   * with `.select()`.\n   *\n   * @param values - The values to insert. Pass an object to insert a single row\n   * or an array to insert multiple rows.\n   *\n   * @param options - Named parameters\n   *\n   * @param options.count - Count algorithm to use to count inserted rows.\n   *\n   * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n   * hood.\n   *\n   * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n   * statistics under the hood.\n   *\n   * `\"estimated\"`: Uses exact count for low numbers and planned count for high\n   * numbers.\n   *\n   * @param options.defaultToNull - Make missing fields default to `null`.\n   * Otherwise, use the default value for the column. Only applies for bulk\n   * inserts.\n   *\n   * @category Database\n   *\n   * @example Create a record\n   * ```ts\n   * const { error } = await supabase\n   *   .from('countries')\n   *   .insert({ id: 1, name: 'Mordor' })\n   * ```\n   *\n   * @exampleSql Create a record\n   * ```sql\n   * create table\n   *   countries (id int8 primary key, name text);\n   * ```\n   *\n   * @exampleResponse Create a record\n   * ```json\n   * {\n   *   \"status\": 201,\n   *   \"statusText\": \"Created\"\n   * }\n   * ```\n   *\n   * @example Create a record and return it\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('countries')\n   *   .insert({ id: 1, name: 'Mordor' })\n   *   .select()\n   * ```\n   *\n   * @exampleSql Create a record and return it\n   * ```sql\n   * create table\n   *   countries (id int8 primary key, name text);\n   * ```\n   *\n   * @exampleResponse Create a record and return it\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"name\": \"Mordor\"\n   *     }\n   *   ],\n   *   \"status\": 201,\n   *   \"statusText\": \"Created\"\n   * }\n   * ```\n   *\n   * @exampleDescription Bulk create\n   * A bulk create operation is handled in a single transaction.\n   * If any of the inserts fail, none of the rows are inserted.\n   *\n   * @example Bulk create\n   * ```ts\n   * const { error } = await supabase\n   *   .from('countries')\n   *   .insert([\n   *     { id: 1, name: 'Mordor' },\n   *     { id: 1, name: 'The Shire' },\n   *   ])\n   * ```\n   *\n   * @exampleSql Bulk create\n   * ```sql\n   * create table\n   *   countries (id int8 primary key, name text);\n   * ```\n   *\n   * @exampleResponse Bulk create\n   * ```json\n   * {\n   *   \"error\": {\n   *     \"code\": \"23505\",\n   *     \"details\": \"Key (id)=(1) already exists.\",\n   *     \"hint\": null,\n   *     \"message\": \"duplicate key value violates unique constraint \\\"countries_pkey\\\"\"\n   *   },\n   *   \"status\": 409,\n   *   \"statusText\": \"Conflict\"\n   * }\n   * ```\n   */\n  insert<Row extends Relation extends { Insert: unknown } ? Relation['Insert'] : never>(\n    values:\n      | RejectExcessProperties<\n          Relation extends { Insert: unknown } ? Relation['Insert'] : never,\n          Row\n        >\n      | RejectExcessProperties<\n          Relation extends { Insert: unknown } ? Relation['Insert'] : never,\n          Row\n        >[],\n    {\n      count,\n      defaultToNull = true,\n    }: {\n      count?: 'exact' | 'planned' | 'estimated' | (string & {})\n      defaultToNull?: boolean\n    } = {}\n  ): PostgrestFilterBuilder<\n    ClientOptions,\n    Schema,\n    Relation['Row'],\n    null,\n    RelationName,\n    Relationships,\n    'POST'\n  > {\n    const method = 'POST'\n    const { url, headers } = this.cloneRequestState()\n\n    if (count) {\n      headers.append('Prefer', `count=${count}`)\n    }\n    if (!defaultToNull) {\n      headers.append('Prefer', `missing=default`)\n    }\n\n    if (Array.isArray(values)) {\n      const columns = values.reduce((acc, x) => acc.concat(Object.keys(x)), [] as string[])\n      if (columns.length > 0) {\n        const uniqueColumns = [...new Set(columns)].map((column) => `\"${column}\"`)\n        url.searchParams.set('columns', uniqueColumns.join(','))\n      }\n    }\n\n    return new PostgrestFilterBuilder({\n      method,\n      url,\n      headers,\n      schema: this.schema,\n      body: values,\n      fetch: this.fetch ?? fetch,\n      urlLengthLimit: this.urlLengthLimit,\n      retry: this.retry,\n    })\n  }\n\n  /**\n   * Perform an UPSERT on the table or view. Depending on the column(s) passed\n   * to `onConflict`, `.upsert()` allows you to perform the equivalent of\n   * `.insert()` if a row with the corresponding `onConflict` columns doesn't\n   * exist, or if it does exist, perform an alternative action depending on\n   * `ignoreDuplicates`.\n   *\n   * By default, upserted rows are not returned. To return it, chain the call\n   * with `.select()`.\n   *\n   * @param values - The values to upsert with. Pass an object to upsert a\n   * single row or an array to upsert multiple rows.\n   *\n   * @param options - Named parameters\n   *\n   * @param options.onConflict - Comma-separated UNIQUE column(s) to specify how\n   * duplicate rows are determined. Two rows are duplicates if all the\n   * `onConflict` columns are equal.\n   *\n   * @param options.ignoreDuplicates - If `true`, duplicate rows are ignored. If\n   * `false`, duplicate rows are merged with existing rows.\n   *\n   * @param options.count - Count algorithm to use to count upserted rows.\n   *\n   * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n   * hood.\n   *\n   * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n   * statistics under the hood.\n   *\n   * `\"estimated\"`: Uses exact count for low numbers and planned count for high\n   * numbers.\n   *\n   * @param options.defaultToNull - Make missing fields default to `null`.\n   * Otherwise, use the default value for the column. This only applies when\n   * inserting new rows, not when merging with existing rows under\n   * `ignoreDuplicates: false`. This also only applies when doing bulk upserts.\n   *\n   * @example Upsert a single row using a unique key\n   * ```ts\n   * // Upserting a single row, overwriting based on the 'username' unique column\n   * const { data, error } = await supabase\n   *   .from('users')\n   *   .upsert({ username: 'supabot' }, { onConflict: 'username' })\n   *\n   * // Example response:\n   * // {\n   * //   data: [\n   * //     { id: 4, message: 'bar', username: 'supabot' }\n   * //   ],\n   * //   error: null\n   * // }\n   * ```\n   *\n   * @example Upsert with conflict resolution and exact row counting\n   * ```ts\n   * // Upserting and returning exact count\n   * const { data, error, count } = await supabase\n   *   .from('users')\n   *   .upsert(\n   *     {\n   *       id: 3,\n   *       message: 'foo',\n   *       username: 'supabot'\n   *     },\n   *     {\n   *       onConflict: 'username',\n   *       count: 'exact'\n   *     }\n   *   )\n   *\n   * // Example response:\n   * // {\n   * //   data: [\n   * //     {\n   * //       id: 42,\n   * //       handle: \"saoirse\",\n   * //       display_name: \"Saoirse\"\n   * //     }\n   * //   ],\n   * //   count: 1,\n   * //   error: null\n   * // }\n   * ```\n   *\n   * @category Database\n   *\n   * @remarks\n   * - Primary keys must be included in `values` to use upsert.\n   *\n   * @example Upsert your data\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('instruments')\n   *   .upsert({ id: 1, name: 'piano' })\n   *   .select()\n   * ```\n   *\n   * @exampleSql Upsert your data\n   * ```sql\n   * create table\n   *   instruments (id int8 primary key, name text);\n   *\n   * insert into\n   *   instruments (id, name)\n   * values\n   *   (1, 'harpsichord');\n   * ```\n   *\n   * @exampleResponse Upsert your data\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"name\": \"piano\"\n   *     }\n   *   ],\n   *   \"status\": 201,\n   *   \"statusText\": \"Created\"\n   * }\n   * ```\n   *\n   * @example Bulk Upsert your data\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('instruments')\n   *   .upsert([\n   *     { id: 1, name: 'piano' },\n   *     { id: 2, name: 'harp' },\n   *   ])\n   *   .select()\n   * ```\n   *\n   * @exampleSql Bulk Upsert your data\n   * ```sql\n   * create table\n   *   instruments (id int8 primary key, name text);\n   *\n   * insert into\n   *   instruments (id, name)\n   * values\n   *   (1, 'harpsichord');\n   * ```\n   *\n   * @exampleResponse Bulk Upsert your data\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"name\": \"piano\"\n   *     },\n   *     {\n   *       \"id\": 2,\n   *       \"name\": \"harp\"\n   *     }\n   *   ],\n   *   \"status\": 201,\n   *   \"statusText\": \"Created\"\n   * }\n   * ```\n   *\n   * @exampleDescription Upserting into tables with constraints\n   * In the following query, `upsert()` implicitly uses the `id`\n   * (primary key) column to determine conflicts. If there is no existing\n   * row with the same `id`, `upsert()` inserts a new row, which\n   * will fail in this case as there is already a row with `handle` `\"saoirse\"`.\n   * Using the `onConflict` option, you can instruct `upsert()` to use\n   * another column with a unique constraint to determine conflicts.\n   *\n   * @example Upserting into tables with constraints\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('users')\n   *   .upsert({ id: 42, handle: 'saoirse', display_name: 'Saoirse' })\n   *   .select()\n   * ```\n   *\n   * @exampleSql Upserting into tables with constraints\n   * ```sql\n   * create table\n   *   users (\n   *     id int8 generated by default as identity primary key,\n   *     handle text not null unique,\n   *     display_name text\n   *   );\n   *\n   * insert into\n   *   users (id, handle, display_name)\n   * values\n   *   (1, 'saoirse', null);\n   * ```\n   *\n   * @exampleResponse Upserting into tables with constraints\n   * ```json\n   * {\n   *   \"error\": {\n   *     \"code\": \"23505\",\n   *     \"details\": \"Key (handle)=(saoirse) already exists.\",\n   *     \"hint\": null,\n   *     \"message\": \"duplicate key value violates unique constraint \\\"users_handle_key\\\"\"\n   *   },\n   *   \"status\": 409,\n   *   \"statusText\": \"Conflict\"\n   * }\n   * ```\n   */\n\n  upsert<Row extends Relation extends { Insert: unknown } ? Relation['Insert'] : never>(\n    values:\n      | RejectExcessProperties<\n          Relation extends { Insert: unknown } ? Relation['Insert'] : never,\n          Row\n        >\n      | RejectExcessProperties<\n          Relation extends { Insert: unknown } ? Relation['Insert'] : never,\n          Row\n        >[],\n    {\n      onConflict,\n      ignoreDuplicates = false,\n      count,\n      defaultToNull = true,\n    }: {\n      onConflict?: string\n      ignoreDuplicates?: boolean\n      count?: 'exact' | 'planned' | 'estimated' | (string & {})\n      defaultToNull?: boolean\n    } = {}\n  ): PostgrestFilterBuilder<\n    ClientOptions,\n    Schema,\n    Relation['Row'],\n    null,\n    RelationName,\n    Relationships,\n    'POST'\n  > {\n    const method = 'POST'\n    const { url, headers } = this.cloneRequestState()\n\n    headers.append('Prefer', `resolution=${ignoreDuplicates ? 'ignore' : 'merge'}-duplicates`)\n\n    if (onConflict !== undefined) url.searchParams.set('on_conflict', onConflict)\n    if (count) {\n      headers.append('Prefer', `count=${count}`)\n    }\n    if (!defaultToNull) {\n      headers.append('Prefer', 'missing=default')\n    }\n\n    if (Array.isArray(values)) {\n      const columns = values.reduce((acc, x) => acc.concat(Object.keys(x)), [] as string[])\n      if (columns.length > 0) {\n        const uniqueColumns = [...new Set(columns)].map((column) => `\"${column}\"`)\n        url.searchParams.set('columns', uniqueColumns.join(','))\n      }\n    }\n\n    return new PostgrestFilterBuilder({\n      method,\n      url,\n      headers,\n      schema: this.schema,\n      body: values,\n      fetch: this.fetch ?? fetch,\n      urlLengthLimit: this.urlLengthLimit,\n      retry: this.retry,\n    })\n  }\n\n  /**\n   * Perform an UPDATE on the table or view.\n   *\n   * By default, updated rows are not returned. To return it, chain the call\n   * with `.select()` after filters.\n   *\n   * @param values - The values to update with\n   *\n   * @param options - Named parameters\n   *\n   * @param options.count - Count algorithm to use to count updated rows.\n   *\n   * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n   * hood.\n   *\n   * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n   * statistics under the hood.\n   *\n   * `\"estimated\"`: Uses exact count for low numbers and planned count for high\n   * numbers.\n   *\n   * @category Database\n   *\n   * @remarks\n   * - `update()` should always be combined with [Filters](/docs/reference/javascript/using-filters) to target the item(s) you wish to update.\n   *\n   * @example Updating your data\n   * ```ts\n   * const { error } = await supabase\n   *   .from('instruments')\n   *   .update({ name: 'piano' })\n   *   .eq('id', 1)\n   * ```\n   *\n   * @exampleSql Updating your data\n   * ```sql\n   * create table\n   *   instruments (id int8 primary key, name text);\n   *\n   * insert into\n   *   instruments (id, name)\n   * values\n   *   (1, 'harpsichord');\n   * ```\n   *\n   * @exampleResponse Updating your data\n   * ```json\n   * {\n   *   \"status\": 204,\n   *   \"statusText\": \"No Content\"\n   * }\n   * ```\n   *\n   * @example Update a record and return it\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('instruments')\n   *   .update({ name: 'piano' })\n   *   .eq('id', 1)\n   *   .select()\n   * ```\n   *\n   * @exampleSql Update a record and return it\n   * ```sql\n   * create table\n   *   instruments (id int8 primary key, name text);\n   *\n   * insert into\n   *   instruments (id, name)\n   * values\n   *   (1, 'harpsichord');\n   * ```\n   *\n   * @exampleResponse Update a record and return it\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"name\": \"piano\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @exampleDescription Updating JSON data\n   * Postgres offers some\n   * [operators](/docs/guides/database/json#query-the-jsonb-data) for\n   * working with JSON data. Currently, it is only possible to update the entire JSON document.\n   *\n   * @example Updating JSON data\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('users')\n   *   .update({\n   *     address: {\n   *       street: 'Melrose Place',\n   *       postcode: 90210\n   *     }\n   *   })\n   *   .eq('address->postcode', 90210)\n   *   .select()\n   * ```\n   *\n   * @exampleSql Updating JSON data\n   * ```sql\n   * create table\n   *   users (\n   *     id int8 primary key,\n   *     name text,\n   *     address jsonb\n   *   );\n   *\n   * insert into\n   *   users (id, name, address)\n   * values\n   *   (1, 'Michael', '{ \"postcode\": 90210 }');\n   * ```\n   *\n   * @exampleResponse Updating JSON data\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"name\": \"Michael\",\n   *       \"address\": {\n   *         \"street\": \"Melrose Place\",\n   *         \"postcode\": 90210\n   *       }\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  update<Row extends Relation extends { Update: unknown } ? Relation['Update'] : never>(\n    values: RejectExcessProperties<\n      Relation extends { Update: unknown } ? Relation['Update'] : never,\n      Row\n    >,\n    {\n      count,\n    }: {\n      count?: 'exact' | 'planned' | 'estimated' | (string & {})\n    } = {}\n  ): PostgrestFilterBuilder<\n    ClientOptions,\n    Schema,\n    Relation['Row'],\n    null,\n    RelationName,\n    Relationships,\n    'PATCH'\n  > {\n    const method = 'PATCH'\n    const { url, headers } = this.cloneRequestState()\n\n    if (count) {\n      headers.append('Prefer', `count=${count}`)\n    }\n\n    return new PostgrestFilterBuilder({\n      method,\n      url,\n      headers,\n      schema: this.schema,\n      body: values,\n      fetch: this.fetch ?? fetch,\n      urlLengthLimit: this.urlLengthLimit,\n      retry: this.retry,\n    })\n  }\n\n  /**\n   * Perform a DELETE on the table or view.\n   *\n   * By default, deleted rows are not returned. To return it, chain the call\n   * with `.select()` after filters.\n   *\n   * @param options - Named parameters\n   *\n   * @param options.count - Count algorithm to use to count deleted rows.\n   *\n   * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n   * hood.\n   *\n   * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n   * statistics under the hood.\n   *\n   * `\"estimated\"`: Uses exact count for low numbers and planned count for high\n   * numbers.\n   *\n   * @category Database\n   *\n   * @remarks\n   * - `delete()` should always be combined with [filters](/docs/reference/javascript/using-filters) to target the item(s) you wish to delete.\n   * - If you use `delete()` with filters and you have\n   *   [RLS](/docs/learn/auth-deep-dive/auth-row-level-security) enabled, only\n   *   rows visible through `SELECT` policies are deleted. Note that by default\n   *   no rows are visible, so you need at least one `SELECT`/`ALL` policy that\n   *   makes the rows visible.\n   * - When using `delete().in()`, specify an array of values to target multiple rows with a single query. This is particularly useful for batch deleting entries that share common criteria, such as deleting users by their IDs. Ensure that the array you provide accurately represents all records you intend to delete to avoid unintended data removal.\n   *\n   * @example Delete a single record\n   * ```ts\n   * const response = await supabase\n   *   .from('countries')\n   *   .delete()\n   *   .eq('id', 1)\n   * ```\n   *\n   * @exampleSql Delete a single record\n   * ```sql\n   * create table\n   *   countries (id int8 primary key, name text);\n   *\n   * insert into\n   *   countries (id, name)\n   * values\n   *   (1, 'Mordor');\n   * ```\n   *\n   * @exampleResponse Delete a single record\n   * ```json\n   * {\n   *   \"status\": 204,\n   *   \"statusText\": \"No Content\"\n   * }\n   * ```\n   *\n   * @example Delete a record and return it\n   * ```ts\n   * const { data, error } = await supabase\n   *   .from('countries')\n   *   .delete()\n   *   .eq('id', 1)\n   *   .select()\n   * ```\n   *\n   * @exampleSql Delete a record and return it\n   * ```sql\n   * create table\n   *   countries (id int8 primary key, name text);\n   *\n   * insert into\n   *   countries (id, name)\n   * values\n   *   (1, 'Mordor');\n   * ```\n   *\n   * @exampleResponse Delete a record and return it\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"id\": 1,\n   *       \"name\": \"Mordor\"\n   *     }\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @example Delete multiple records\n   * ```ts\n   * const response = await supabase\n   *   .from('countries')\n   *   .delete()\n   *   .in('id', [1, 2, 3])\n   * ```\n   *\n   * @exampleSql Delete multiple records\n   * ```sql\n   * create table\n   *   countries (id int8 primary key, name text);\n   *\n   * insert into\n   *   countries (id, name)\n   * values\n   *   (1, 'Rohan'), (2, 'The Shire'), (3, 'Mordor');\n   * ```\n   *\n   * @exampleResponse Delete multiple records\n   * ```json\n   * {\n   *   \"status\": 204,\n   *   \"statusText\": \"No Content\"\n   * }\n   * ```\n   */\n  delete({\n    count,\n  }: {\n    count?: 'exact' | 'planned' | 'estimated' | (string & {})\n  } = {}): PostgrestFilterBuilder<\n    ClientOptions,\n    Schema,\n    Relation['Row'],\n    null,\n    RelationName,\n    Relationships,\n    'DELETE'\n  > {\n    const method = 'DELETE'\n    const { url, headers } = this.cloneRequestState()\n\n    if (count) {\n      headers.append('Prefer', `count=${count}`)\n    }\n\n    return new PostgrestFilterBuilder({\n      method,\n      url,\n      headers,\n      schema: this.schema,\n      fetch: this.fetch ?? fetch,\n      urlLengthLimit: this.urlLengthLimit,\n      retry: this.retry,\n    })\n  }\n}\n", "import PostgrestQueryBuilder from './PostgrestQueryBuilder'\nimport PostgrestFilterBuilder from './PostgrestFilterBuilder'\nimport { Fetch, GenericSchema, ClientServerOptions } from './types/common/common'\nimport { GetRpcFunctionFilterBuilderByArgs } from './types/common/rpc'\n\n/**\n * PostgREST client.\n *\n * @typeParam Database - Types for the schema from the [type\n * generator](https://supabase.com/docs/reference/javascript/next/typescript-support)\n *\n * @typeParam SchemaName - Postgres schema to switch to. Must be a string\n * literal, the same one passed to the constructor. If the schema is not\n * `\"public\"`, this must be supplied manually.\n */\nexport default class PostgrestClient<\n  Database = any,\n  ClientOptions extends ClientServerOptions = Database extends {\n    __InternalSupabase: infer I extends ClientServerOptions\n  }\n    ? I\n    : {},\n  SchemaName extends string &\n    keyof Omit<Database, '__InternalSupabase'> = 'public' extends keyof Omit<\n    Database,\n    '__InternalSupabase'\n  >\n    ? 'public'\n    : string & keyof Omit<Database, '__InternalSupabase'>,\n  Schema extends GenericSchema = Omit<\n    Database,\n    '__InternalSupabase'\n  >[SchemaName] extends GenericSchema\n    ? Omit<Database, '__InternalSupabase'>[SchemaName]\n    : any,\n> {\n  url: string\n  headers: Headers\n  schemaName?: SchemaName\n  fetch?: Fetch\n  urlLengthLimit: number\n\n  // Retry configuration - enabled by default\n  retry?: boolean\n\n  // TODO: Add back shouldThrowOnError once we figure out the typings\n  /**\n   * Creates a PostgREST client.\n   *\n   * @param url - URL of the PostgREST endpoint\n   * @param options - Named parameters\n   * @param options.headers - Custom headers\n   * @param options.schema - Postgres schema to switch to\n   * @param options.fetch - Custom fetch\n   * @param options.timeout - Optional timeout in milliseconds for all requests. When set, requests will automatically abort after this duration to prevent indefinite hangs.\n   * @param options.urlLengthLimit - Maximum URL length in characters before warnings/errors are triggered. Defaults to 8000.\n   * @param options.retry - Enable or disable automatic retries for transient errors.\n   *   When enabled, idempotent requests (GET, HEAD, OPTIONS) that fail with network\n   *   errors or HTTP 503/520 responses will be automatically retried up to 3 times\n   *   with exponential backoff (1s, 2s, 4s). Defaults to `true`.\n   * @example Using supabase-js (recommended)\n   * ```ts\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n   * const { data, error } = await supabase.from('profiles').select('*')\n   * ```\n   *\n   * @category Database\n   *\n   * @remarks\n   * - A `timeout` option (in milliseconds) can be set to automatically abort requests that take too long.\n   * - A `urlLengthLimit` option (default: 8000) can be set to control when URL length warnings are included in error messages for aborted requests.\n   *\n   * @example Standalone import for bundle-sensitive environments\n   * ```ts\n   * import { PostgrestClient } from '@supabase/postgrest-js'\n   *\n   * const postgrest = new PostgrestClient('https://xyzcompany.supabase.co/rest/v1', {\n   *   headers: { apikey: 'your-publishable-key' },\n   *   schema: 'public',\n   *   timeout: 30000, // 30 second timeout\n   * })\n   * ```\n   */\n  constructor(\n    url: string,\n    {\n      headers = {},\n      schema,\n      fetch,\n      timeout,\n      urlLengthLimit = 8000,\n      retry,\n    }: {\n      headers?: HeadersInit\n      schema?: SchemaName\n      fetch?: Fetch\n      timeout?: number\n      urlLengthLimit?: number\n      retry?: boolean\n    } = {}\n  ) {\n    this.url = url\n    this.headers = new Headers(headers)\n    this.schemaName = schema\n    this.urlLengthLimit = urlLengthLimit\n\n    const originalFetch = fetch ?? globalThis.fetch\n\n    // Wrap fetch with timeout if specified\n    if (timeout !== undefined && timeout > 0) {\n      this.fetch = (input, init) => {\n        const controller = new AbortController()\n        const timeoutId = setTimeout(() => controller.abort(), timeout)\n\n        // Merge abort signals if one already exists\n        const existingSignal = init?.signal\n        if (existingSignal) {\n          // If the existing signal is already aborted, use it directly\n          if (existingSignal.aborted) {\n            clearTimeout(timeoutId)\n            return originalFetch(input, init)\n          }\n\n          // Listen to existing signal and abort our controller too\n          const abortHandler = () => {\n            clearTimeout(timeoutId)\n            controller.abort()\n          }\n          existingSignal.addEventListener('abort', abortHandler, { once: true })\n\n          return originalFetch(input, {\n            ...init,\n            signal: controller.signal,\n          }).finally(() => {\n            clearTimeout(timeoutId)\n            existingSignal.removeEventListener('abort', abortHandler)\n          })\n        }\n\n        return originalFetch(input, {\n          ...init,\n          signal: controller.signal,\n        }).finally(() => clearTimeout(timeoutId))\n      }\n    } else {\n      this.fetch = originalFetch\n    }\n    this.retry = retry\n  }\n  from<\n    TableName extends string & keyof Schema['Tables'],\n    Table extends Schema['Tables'][TableName],\n  >(relation: TableName): PostgrestQueryBuilder<ClientOptions, Schema, Table, TableName>\n  from<ViewName extends string & keyof Schema['Views'], View extends Schema['Views'][ViewName]>(\n    relation: ViewName\n  ): PostgrestQueryBuilder<ClientOptions, Schema, View, ViewName>\n  /**\n   * Perform a query on a table or a view.\n   *\n   * @param relation - The table or view name to query\n   *\n   * @category Database\n   */\n  from(\n    relation: (string & keyof Schema['Tables']) | (string & keyof Schema['Views'])\n  ): PostgrestQueryBuilder<ClientOptions, Schema, any, any> {\n    if (!relation || typeof relation !== 'string' || relation.trim() === '') {\n      throw new Error('Invalid relation name: relation must be a non-empty string.')\n    }\n\n    const url = new URL(`${this.url}/${relation}`)\n    return new PostgrestQueryBuilder(url, {\n      headers: new Headers(this.headers),\n      schema: this.schemaName,\n      fetch: this.fetch,\n      urlLengthLimit: this.urlLengthLimit,\n      retry: this.retry,\n    })\n  }\n\n  /**\n   * Select a schema to query or perform an function (rpc) call.\n   *\n   * The schema needs to be on the list of exposed schemas inside Supabase.\n   *\n   * @param schema - The schema to query\n   *\n   * @category Database\n   */\n  schema<DynamicSchema extends string & keyof Omit<Database, '__InternalSupabase'>>(\n    schema: DynamicSchema\n  ): PostgrestClient<\n    Database,\n    ClientOptions,\n    DynamicSchema,\n    Database[DynamicSchema] extends GenericSchema ? Database[DynamicSchema] : any\n  > {\n    return new PostgrestClient(this.url, {\n      headers: this.headers,\n      schema,\n      fetch: this.fetch,\n      urlLengthLimit: this.urlLengthLimit,\n      retry: this.retry,\n    })\n  }\n\n  /**\n   * Perform a function call.\n   *\n   * @param fn - The function name to call\n   * @param args - The arguments to pass to the function call\n   * @param options - Named parameters\n   * @param options.head - When set to `true`, `data` will not be returned.\n   * Useful if you only need the count.\n   * @param options.get - When set to `true`, the function will be called with\n   * read-only access mode.\n   * @param options.count - Count algorithm to use to count rows returned by the\n   * function. Only applicable for [set-returning\n   * functions](https://www.postgresql.org/docs/current/functions-srf.html).\n   *\n   * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n   * hood.\n   *\n   * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n   * statistics under the hood.\n   *\n   * `\"estimated\"`: Uses exact count for low numbers and planned count for high\n   * numbers.\n   *\n   * @example\n   * ```ts\n   * // For cross-schema functions where type inference fails, use overrideTypes:\n   * const { data } = await supabase\n   *   .schema('schema_b')\n   *   .rpc('function_a', {})\n   *   .overrideTypes<{ id: string; user_id: string }[]>()\n   * ```\n   *\n   * @category Database\n   *\n   * @example Call a Postgres function without arguments\n   * ```ts\n   * const { data, error } = await supabase.rpc('hello_world')\n   * ```\n   *\n   * @exampleSql Call a Postgres function without arguments\n   * ```sql\n   * create function hello_world() returns text as $$\n   *   select 'Hello world';\n   * $$ language sql;\n   * ```\n   *\n   * @exampleResponse Call a Postgres function without arguments\n   * ```json\n   * {\n   *   \"data\": \"Hello world\",\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @example Call a Postgres function with arguments\n   * ```ts\n   * const { data, error } = await supabase.rpc('echo', { say: '👋' })\n   * ```\n   *\n   * @exampleSql Call a Postgres function with arguments\n   * ```sql\n   * create function echo(say text) returns text as $$\n   *   select say;\n   * $$ language sql;\n   * ```\n   *\n   * @exampleResponse Call a Postgres function with arguments\n   * ```json\n   *   {\n   *     \"data\": \"👋\",\n   *     \"status\": 200,\n   *     \"statusText\": \"OK\"\n   *   }\n   *\n   * ```\n   *\n   * @exampleDescription Bulk processing\n   * You can process large payloads by passing in an array as an argument.\n   *\n   * @example Bulk processing\n   * ```ts\n   * const { data, error } = await supabase.rpc('add_one_each', { arr: [1, 2, 3] })\n   * ```\n   *\n   * @exampleSql Bulk processing\n   * ```sql\n   * create function add_one_each(arr int[]) returns int[] as $$\n   *   select array_agg(n + 1) from unnest(arr) as n;\n   * $$ language sql;\n   * ```\n   *\n   * @exampleResponse Bulk processing\n   * ```json\n   * {\n   *   \"data\": [\n   *     2,\n   *     3,\n   *     4\n   *   ],\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @exampleDescription Call a Postgres function with filters\n   * Postgres functions that return tables can also be combined with [Filters](/docs/reference/javascript/using-filters) and [Modifiers](/docs/reference/javascript/using-modifiers).\n   *\n   * @example Call a Postgres function with filters\n   * ```ts\n   * const { data, error } = await supabase\n   *   .rpc('list_stored_countries')\n   *   .eq('id', 1)\n   *   .single()\n   * ```\n   *\n   * @exampleSql Call a Postgres function with filters\n   * ```sql\n   * create table\n   *   countries (id int8 primary key, name text);\n   *\n   * insert into\n   *   countries (id, name)\n   * values\n   *   (1, 'Rohan'),\n   *   (2, 'The Shire');\n   *\n   * create function list_stored_countries() returns setof countries as $$\n   *   select * from countries;\n   * $$ language sql;\n   * ```\n   *\n   * @exampleResponse Call a Postgres function with filters\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"id\": 1,\n   *     \"name\": \"Rohan\"\n   *   },\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   *\n   * @example Call a read-only Postgres function\n   * ```ts\n   * const { data, error } = await supabase.rpc('hello_world', undefined, { get: true })\n   * ```\n   *\n   * @exampleSql Call a read-only Postgres function\n   * ```sql\n   * create function hello_world() returns text as $$\n   *   select 'Hello world';\n   * $$ language sql;\n   * ```\n   *\n   * @exampleResponse Call a read-only Postgres function\n   * ```json\n   * {\n   *   \"data\": \"Hello world\",\n   *   \"status\": 200,\n   *   \"statusText\": \"OK\"\n   * }\n   * ```\n   */\n  rpc<\n    FnName extends string & keyof Schema['Functions'],\n    Args extends Schema['Functions'][FnName]['Args'] = never,\n    FilterBuilder extends GetRpcFunctionFilterBuilderByArgs<\n      Schema,\n      FnName,\n      Args\n    > = GetRpcFunctionFilterBuilderByArgs<Schema, FnName, Args>,\n  >(\n    fn: FnName,\n    args: Args = {} as Args,\n    {\n      head = false,\n      get = false,\n      count,\n    }: {\n      head?: boolean\n      get?: boolean\n      count?: 'exact' | 'planned' | 'estimated' | (string & {})\n    } = {}\n  ): PostgrestFilterBuilder<\n    ClientOptions,\n    Schema,\n    FilterBuilder['Row'],\n    FilterBuilder['Result'],\n    FilterBuilder['RelationName'],\n    FilterBuilder['Relationships'],\n    'RPC'\n  > {\n    let method: 'HEAD' | 'GET' | 'POST'\n    const url = new URL(`${this.url}/rpc/${fn}`)\n    let body: unknown | undefined\n    // objects/arrays-of-objects can't be serialized to URL params, use POST + return=minimal instead\n    const _isObject = (v: unknown): boolean =>\n      v !== null && typeof v === 'object' && (!Array.isArray(v) || v.some(_isObject))\n    const _hasObjectArg = head && Object.values(args as object).some(_isObject)\n    if (_hasObjectArg) {\n      method = 'POST'\n      body = args\n    } else if (head || get) {\n      method = head ? 'HEAD' : 'GET'\n      Object.entries(args)\n        // params with undefined value needs to be filtered out, otherwise it'll\n        // show up as `?param=undefined`\n        .filter(([_, value]) => value !== undefined)\n        // array values need special syntax\n        .map(([name, value]) => [name, Array.isArray(value) ? `{${value.join(',')}}` : `${value}`])\n        .forEach(([name, value]) => {\n          url.searchParams.append(name, value)\n        })\n    } else {\n      method = 'POST'\n      body = args\n    }\n\n    const headers = new Headers(this.headers)\n    if (_hasObjectArg) {\n      headers.set('Prefer', count ? `count=${count},return=minimal` : 'return=minimal')\n    } else if (count) {\n      headers.set('Prefer', `count=${count}`)\n    }\n\n    return new PostgrestFilterBuilder({\n      method,\n      url,\n      headers,\n      schema: this.schemaName,\n      body,\n      fetch: this.fetch ?? fetch,\n      urlLengthLimit: this.urlLengthLimit,\n      retry: this.retry,\n    })\n  }\n}\n", "import PostgrestClient from './PostgrestClient'\nimport PostgrestQueryBuilder from './PostgrestQueryBuilder'\nimport PostgrestFilterBuilder from './PostgrestFilterBuilder'\nimport PostgrestTransformBuilder from './PostgrestTransformBuilder'\nimport PostgrestBuilder from './PostgrestBuilder'\nimport PostgrestError from './PostgrestError'\n\nexport {\n  PostgrestClient,\n  PostgrestQueryBuilder,\n  PostgrestFilterBuilder,\n  PostgrestTransformBuilder,\n  PostgrestBuilder,\n  PostgrestError,\n}\nexport default {\n  PostgrestClient,\n  PostgrestQueryBuilder,\n  PostgrestFilterBuilder,\n  PostgrestTransformBuilder,\n  PostgrestBuilder,\n  PostgrestError,\n}\nexport type {\n  PostgrestResponse,\n  PostgrestResponseFailure,\n  PostgrestResponseSuccess,\n  PostgrestSingleResponse,\n  PostgrestMaybeSingleResponse,\n} from './types/types'\nexport type { ClientServerOptions as PostgrestClientOptions } from './types/common/common'\n// https://github.com/supabase/postgrest-js/issues/551\n// To be replaced with a helper type that only uses public types\nexport type { GetResult as UnstableGetResult } from './select-query-parser/result'\n", "export interface WebSocketLike {\n  readonly CONNECTING: number\n  readonly OPEN: number\n  readonly CLOSING: number\n  readonly CLOSED: number\n  readonly readyState: number\n  readonly url: string\n  readonly protocol: string\n\n  /**\n   * Closes the socket, optionally providing a close code and reason.\n   */\n  close(code?: number, reason?: string): void\n  /**\n   * Sends data through the socket using the underlying implementation.\n   */\n  send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void\n\n  onopen: ((this: any, ev: Event) => any) | null\n  onmessage: ((this: any, ev: MessageEvent) => any) | null\n  onclose: ((this: any, ev: CloseEvent) => any) | null\n  onerror: ((this: any, ev: Event) => any) | null\n\n  /**\n   * Registers an event listener on the socket (compatible with browser WebSocket API).\n   */\n  addEventListener(type: string, listener: EventListener): void\n  /**\n   * Removes a previously registered event listener.\n   */\n  removeEventListener(type: string, listener: EventListener): void\n\n  // Add additional properties that may exist on WebSocket implementations\n  binaryType?: string\n  bufferedAmount?: number\n  extensions?: string\n  dispatchEvent?: (event: Event) => boolean\n}\n\nexport interface WebSocketEnvironment {\n  type: 'native' | 'ws' | 'cloudflare' | 'unsupported'\n  /** WebSocket constructor for this environment, if available. */\n  wsConstructor?: typeof WebSocket\n  error?: string\n  workaround?: string\n}\n\n/**\n * Extended globalThis with optional runtime-specific properties\n * that may or may not exist depending on the environment.\n */\ninterface RuntimeGlobals {\n  WebSocket?: { new (url: string, protocols?: string | string[]): WebSocketLike }\n  WebSocketPair?: unknown\n  EdgeRuntime?: unknown\n}\n\n/**\n * Utilities for creating WebSocket instances across runtimes.\n */\nexport class WebSocketFactory {\n  /**\n   * Static-only utility \u2013 prevent instantiation.\n   */\n  private constructor() {}\n  private static detectEnvironment(): WebSocketEnvironment {\n    if (typeof WebSocket !== 'undefined') {\n      return { type: 'native', wsConstructor: WebSocket }\n    }\n\n    const gt = globalThis as typeof globalThis & RuntimeGlobals\n    if (typeof globalThis !== 'undefined' && typeof gt.WebSocket !== 'undefined') {\n      return { type: 'native', wsConstructor: gt.WebSocket as typeof WebSocket }\n    }\n\n    const gl =\n      typeof global !== 'undefined' ? (global as typeof global & RuntimeGlobals) : undefined\n    if (gl && typeof gl.WebSocket !== 'undefined') {\n      return { type: 'native', wsConstructor: gl.WebSocket as typeof WebSocket }\n    }\n\n    if (\n      typeof globalThis !== 'undefined' &&\n      typeof gt.WebSocketPair !== 'undefined' &&\n      typeof globalThis.WebSocket === 'undefined'\n    ) {\n      return {\n        type: 'cloudflare',\n        error:\n          'Cloudflare Workers detected. WebSocket clients are not supported in Cloudflare Workers.',\n        workaround:\n          'Use Cloudflare Workers WebSocket API for server-side WebSocket handling, or deploy to a different runtime.',\n      }\n    }\n\n    if (\n      (typeof globalThis !== 'undefined' && gt.EdgeRuntime) ||\n      (typeof navigator !== 'undefined' && navigator.userAgent?.includes('Vercel-Edge'))\n    ) {\n      return {\n        type: 'unsupported',\n        error:\n          'Edge runtime detected (Vercel Edge/Netlify Edge). WebSockets are not supported in edge functions.',\n        workaround:\n          'Use serverless functions or a different deployment target for WebSocket functionality.',\n      }\n    }\n\n    // Use dynamic property access to avoid Next.js Edge Runtime static analysis warnings\n    const _process = (globalThis as Record<string, unknown>)['process'] as\n      | { versions?: { node?: string } }\n      | undefined\n    if (_process) {\n      const processVersions = _process['versions']\n      if (processVersions && processVersions['node']) {\n        // Remove 'v' prefix if present and parse the major version\n        const versionString = processVersions['node']\n        const nodeVersion = parseInt(versionString.replace(/^v/, '').split('.')[0])\n\n        // Node.js 22+ should have native WebSocket\n        if (nodeVersion >= 22) {\n          // Check if native WebSocket is available (should be in Node.js 22+)\n          if (typeof globalThis.WebSocket !== 'undefined') {\n            return { type: 'native', wsConstructor: globalThis.WebSocket }\n          }\n          // If not available, user needs to provide it\n          return {\n            type: 'unsupported',\n            error: `Node.js ${nodeVersion} detected but native WebSocket not found.`,\n            workaround: 'Provide a WebSocket implementation via the transport option.',\n          }\n        }\n\n        // Node.js < 22 doesn't have native WebSocket\n        return {\n          type: 'unsupported',\n          error: `Node.js ${nodeVersion} detected without native WebSocket support.`,\n          workaround:\n            'For Node.js < 22, install \"ws\" package and provide it via the transport option:\\n' +\n            'import ws from \"ws\"\\n' +\n            'new RealtimeClient(url, { transport: ws })',\n        }\n      }\n    }\n\n    return {\n      type: 'unsupported',\n      error: 'Unknown JavaScript runtime without WebSocket support.',\n      workaround:\n        \"Ensure you're running in a supported environment (browser, Node.js, Deno) or provide a custom WebSocket implementation.\",\n    }\n  }\n\n  /**\n   * Returns the best available WebSocket constructor for the current runtime.\n   *\n   * @category Realtime\n   *\n   * @example Example with error handling\n   * ```ts\n   * try {\n   *   const WS = WebSocketFactory.getWebSocketConstructor()\n   *   const socket = new WS('wss://example.com/socket')\n   * } catch (error) {\n   *   console.error('WebSocket not available in this environment.', error)\n   * }\n   * ```\n   */\n  public static getWebSocketConstructor(): typeof WebSocket {\n    const env = this.detectEnvironment()\n    if (env.wsConstructor) {\n      return env.wsConstructor\n    }\n    let errorMessage = env.error || 'WebSocket not supported in this environment.'\n    if (env.workaround) {\n      errorMessage += `\\n\\nSuggested solution: ${env.workaround}`\n    }\n    throw new Error(errorMessage)\n  }\n\n  /**\n   * Detects whether the runtime can establish WebSocket connections.\n   *\n   * @category Realtime\n   *\n   * @example Example in a Node.js script\n   * ```ts\n   * if (!WebSocketFactory.isWebSocketSupported()) {\n   *   console.error('WebSockets are required for this script.')\n   *   process.exitCode = 1\n   * }\n   * ```\n   */\n  public static isWebSocketSupported(): boolean {\n    try {\n      const env = this.detectEnvironment()\n      return env.type === 'native' || env.type === 'ws'\n    } catch {\n      return false\n    }\n  }\n}\n\nexport default WebSocketFactory\n", "// Generated automatically during releases by scripts/update-version-files.ts\n// This file provides runtime access to the package version for:\n// - HTTP request headers (e.g., X-Client-Info header for API requests)\n// - Debugging and support (identifying which version is running)\n// - Telemetry and logging (version reporting in errors/analytics)\n// - Ensuring build artifacts match the published package version\nexport const version = '2.106.1'\n", "import { version } from './version'\nimport type {\n  SocketState,\n  ChannelState,\n  ChannelEvent as PhoenixChannelEvent,\n  Transport,\n  Vsn,\n} from '../phoenix/types'\n\nexport type { SocketState, ChannelState, Transport }\n\nexport const DEFAULT_VERSION = `realtime-js/${version}`\n\nexport const VSN_1_0_0: Vsn = '1.0.0'\nexport const VSN_2_0_0: Vsn = '2.0.0'\nexport const DEFAULT_VSN: Vsn = VSN_2_0_0\n\nexport const VERSION = version\n\nexport const DEFAULT_TIMEOUT = 10000\n\nexport const WS_CLOSE_NORMAL = 1000\nexport const MAX_PUSH_BUFFER_SIZE = 100\n\nexport const SOCKET_STATES = {\n  connecting: 0,\n  open: 1,\n  closing: 2,\n  closed: 3,\n} as const\n\nexport const CHANNEL_STATES = {\n  closed: 'closed',\n  errored: 'errored',\n  joined: 'joined',\n  joining: 'joining',\n  leaving: 'leaving',\n} as const\n\nexport type ChannelEvent = PhoenixChannelEvent | 'access_token'\n\nexport const CHANNEL_EVENTS = {\n  close: 'phx_close',\n  error: 'phx_error',\n  join: 'phx_join',\n  reply: 'phx_reply',\n  leave: 'phx_leave',\n  access_token: 'access_token',\n} as const\n\nexport const TRANSPORTS = {\n  websocket: 'websocket',\n} as const\n\nexport type ConnectionState = 'connecting' | 'open' | 'closing' | 'closed' | (string & {})\n\nexport const CONNECTION_STATE = {\n  connecting: 'connecting',\n  open: 'open',\n  closing: 'closing',\n  closed: 'closed',\n} as const\n", "// This file draws heavily from https://github.com/phoenixframework/phoenix/commit/cf098e9cf7a44ee6479d31d911a97d3c7430c6fe\n// License: https://github.com/phoenixframework/phoenix/blob/master/LICENSE.md\nexport type Msg<T> = {\n  join_ref?: string | null\n  ref?: string | null\n  topic: string\n  event: string\n  payload: T\n}\n\nexport default class Serializer {\n  HEADER_LENGTH = 1\n  USER_BROADCAST_PUSH_META_LENGTH = 6\n  KINDS = { userBroadcastPush: 3, userBroadcast: 4 }\n  BINARY_ENCODING = 0\n  JSON_ENCODING = 1\n  BROADCAST_EVENT = 'broadcast'\n\n  allowedMetadataKeys: string[] = []\n\n  constructor(allowedMetadataKeys?: string[] | null) {\n    this.allowedMetadataKeys = allowedMetadataKeys ?? []\n  }\n\n  encode(msg: Msg<{ [key: string]: any }>, callback: (result: ArrayBuffer | string) => any) {\n    if (\n      msg.event === this.BROADCAST_EVENT &&\n      !(msg.payload instanceof ArrayBuffer) &&\n      typeof msg.payload.event === 'string'\n    ) {\n      return callback(\n        this._binaryEncodeUserBroadcastPush(msg as Msg<{ event: string } & { [key: string]: any }>)\n      )\n    }\n\n    let payload = [msg.join_ref, msg.ref, msg.topic, msg.event, msg.payload]\n    return callback(JSON.stringify(payload))\n  }\n\n  private _binaryEncodeUserBroadcastPush(message: Msg<{ event: string } & { [key: string]: any }>) {\n    if (this._isArrayBuffer(message.payload?.payload)) {\n      return this._encodeBinaryUserBroadcastPush(message)\n    } else {\n      return this._encodeJsonUserBroadcastPush(message)\n    }\n  }\n\n  private _encodeBinaryUserBroadcastPush(message: Msg<{ event: string } & { [key: string]: any }>) {\n    const userPayload = message.payload?.payload ?? new ArrayBuffer(0)\n    return this._encodeUserBroadcastPush(message, this.BINARY_ENCODING, userPayload)\n  }\n\n  private _encodeJsonUserBroadcastPush(message: Msg<{ event: string } & { [key: string]: any }>) {\n    const userPayload = message.payload?.payload ?? {}\n    const encoder = new TextEncoder()\n    const encodedUserPayload = encoder.encode(JSON.stringify(userPayload)).buffer\n    return this._encodeUserBroadcastPush(message, this.JSON_ENCODING, encodedUserPayload)\n  }\n\n  private _encodeUserBroadcastPush(\n    message: Msg<{ event: string } & { [key: string]: any }>,\n    encodingType: number,\n    encodedPayload: ArrayBuffer\n  ) {\n    const topic = message.topic\n    const ref = message.ref ?? ''\n    const joinRef = message.join_ref ?? ''\n    const userEvent = message.payload.event\n\n    // Filter metadata based on allowed keys\n    const rest = this.allowedMetadataKeys\n      ? this._pick(message.payload, this.allowedMetadataKeys)\n      : {}\n\n    const metadata = Object.keys(rest).length === 0 ? '' : JSON.stringify(rest)\n\n    // Validate lengths don't exceed uint8 max value (255)\n    if (joinRef.length > 255) {\n      throw new Error(`joinRef length ${joinRef.length} exceeds maximum of 255`)\n    }\n    if (ref.length > 255) {\n      throw new Error(`ref length ${ref.length} exceeds maximum of 255`)\n    }\n    if (topic.length > 255) {\n      throw new Error(`topic length ${topic.length} exceeds maximum of 255`)\n    }\n    if (userEvent.length > 255) {\n      throw new Error(`userEvent length ${userEvent.length} exceeds maximum of 255`)\n    }\n    if (metadata.length > 255) {\n      throw new Error(`metadata length ${metadata.length} exceeds maximum of 255`)\n    }\n\n    const metaLength =\n      this.USER_BROADCAST_PUSH_META_LENGTH +\n      joinRef.length +\n      ref.length +\n      topic.length +\n      userEvent.length +\n      metadata.length\n\n    const header = new ArrayBuffer(this.HEADER_LENGTH + metaLength)\n    let view = new DataView(header)\n    let offset = 0\n\n    view.setUint8(offset++, this.KINDS.userBroadcastPush) // kind\n    view.setUint8(offset++, joinRef.length)\n    view.setUint8(offset++, ref.length)\n    view.setUint8(offset++, topic.length)\n    view.setUint8(offset++, userEvent.length)\n    view.setUint8(offset++, metadata.length)\n    view.setUint8(offset++, encodingType)\n    Array.from(joinRef, (char) => view.setUint8(offset++, char.charCodeAt(0)))\n    Array.from(ref, (char) => view.setUint8(offset++, char.charCodeAt(0)))\n    Array.from(topic, (char) => view.setUint8(offset++, char.charCodeAt(0)))\n    Array.from(userEvent, (char) => view.setUint8(offset++, char.charCodeAt(0)))\n    Array.from(metadata, (char) => view.setUint8(offset++, char.charCodeAt(0)))\n\n    var combined = new Uint8Array(header.byteLength + encodedPayload.byteLength)\n    combined.set(new Uint8Array(header), 0)\n    combined.set(new Uint8Array(encodedPayload), header.byteLength)\n\n    return combined.buffer\n  }\n\n  decode(rawPayload: ArrayBuffer | string, callback: Function) {\n    if (this._isArrayBuffer(rawPayload)) {\n      let result = this._binaryDecode(rawPayload as ArrayBuffer)\n      return callback(result)\n    }\n\n    if (typeof rawPayload === 'string') {\n      const jsonPayload = JSON.parse(rawPayload)\n      const [join_ref, ref, topic, event, payload] = jsonPayload\n      return callback({ join_ref, ref, topic, event, payload })\n    }\n\n    return callback({})\n  }\n\n  private _binaryDecode(buffer: ArrayBuffer) {\n    const view = new DataView(buffer)\n    const kind = view.getUint8(0)\n    const decoder = new TextDecoder()\n    switch (kind) {\n      case this.KINDS.userBroadcast:\n        return this._decodeUserBroadcast(buffer, view, decoder)\n    }\n  }\n\n  private _decodeUserBroadcast(\n    buffer: ArrayBuffer,\n    view: DataView,\n    decoder: TextDecoder\n  ): {\n    join_ref: null\n    ref: null\n    topic: string\n    event: string\n    payload: { [key: string]: any }\n  } {\n    const topicSize = view.getUint8(1)\n    const userEventSize = view.getUint8(2)\n    const metadataSize = view.getUint8(3)\n    const payloadEncoding = view.getUint8(4)\n\n    let offset = this.HEADER_LENGTH + 4\n    const topic = decoder.decode(buffer.slice(offset, offset + topicSize))\n    offset = offset + topicSize\n    const userEvent = decoder.decode(buffer.slice(offset, offset + userEventSize))\n    offset = offset + userEventSize\n    const metadata = decoder.decode(buffer.slice(offset, offset + metadataSize))\n    offset = offset + metadataSize\n\n    const payload = buffer.slice(offset, buffer.byteLength)\n    const parsedPayload =\n      payloadEncoding === this.JSON_ENCODING ? JSON.parse(decoder.decode(payload)) : payload\n\n    const data: { [key: string]: any } = {\n      type: this.BROADCAST_EVENT,\n      event: userEvent,\n      payload: parsedPayload,\n    }\n\n    // Metadata is optional and always JSON encoded\n    if (metadataSize > 0) {\n      data['meta'] = JSON.parse(metadata)\n    }\n\n    return { join_ref: null, ref: null, topic: topic, event: this.BROADCAST_EVENT, payload: data }\n  }\n\n  private _isArrayBuffer(buffer: any): boolean {\n    return buffer instanceof ArrayBuffer || buffer?.constructor?.name === 'ArrayBuffer'\n  }\n\n  private _pick(obj: Record<string, any> | null | undefined, keys: string[]): Record<string, any> {\n    if (!obj || typeof obj !== 'object') {\n      return {}\n    }\n    return Object.fromEntries(Object.entries(obj).filter(([key]) => keys.includes(key)))\n  }\n}\n", "/**\n * Helpers to convert the change Payload into native JS types.\n */\n\n// Adapted from epgsql (src/epgsql_binary.erl), this module licensed under\n// 3-clause BSD found here: https://raw.githubusercontent.com/epgsql/epgsql/devel/LICENSE\n\nexport enum PostgresTypes {\n  abstime = 'abstime',\n  bool = 'bool',\n  date = 'date',\n  daterange = 'daterange',\n  float4 = 'float4',\n  float8 = 'float8',\n  int2 = 'int2',\n  int4 = 'int4',\n  int4range = 'int4range',\n  int8 = 'int8',\n  int8range = 'int8range',\n  json = 'json',\n  jsonb = 'jsonb',\n  money = 'money',\n  numeric = 'numeric',\n  oid = 'oid',\n  reltime = 'reltime',\n  text = 'text',\n  time = 'time',\n  timestamp = 'timestamp',\n  timestamptz = 'timestamptz',\n  timetz = 'timetz',\n  tsrange = 'tsrange',\n  tstzrange = 'tstzrange',\n}\n\ntype Columns = {\n  name: string // the column name. eg: \"user_id\"\n  type: string // the column type. eg: \"uuid\"\n  flags?: string[] // any special flags for the column. eg: [\"key\"]\n  type_modifier?: number // the type modifier. eg: 4294967295\n}[]\n\ntype BaseValue = null | string | number | boolean\ntype RecordValue = BaseValue | BaseValue[]\n\ntype Record = {\n  [key: string]: RecordValue\n}\n\n/**\n * Takes an array of columns and an object of string values then converts each string value\n * to its mapped type.\n *\n * @param {{name: String, type: String}[]} columns\n * @param {Object} record\n * @param {Object} options The map of various options that can be applied to the mapper\n * @param {Array} options.skipTypes The array of types that should not be converted\n *\n * @example convertChangeData([{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age:'33'}, {})\n * //=>{ first_name: 'Paul', age: 33 }\n */\nexport const convertChangeData = (\n  columns: Columns,\n  record: Record | null,\n  options: { skipTypes?: string[] } = {}\n): Record => {\n  const skipTypes = options.skipTypes ?? []\n\n  if (!record) {\n    return {}\n  }\n\n  return Object.keys(record).reduce((acc, rec_key) => {\n    acc[rec_key] = convertColumn(rec_key, columns, record, skipTypes)\n    return acc\n  }, {} as Record)\n}\n\n/**\n * Converts the value of an individual column.\n *\n * @param {String} columnName The column that you want to convert\n * @param {{name: String, type: String}[]} columns All of the columns\n * @param {Object} record The map of string values\n * @param {Array} skipTypes An array of types that should not be converted\n * @return {object} Useless information\n *\n * @example convertColumn('age', [{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age: '33'}, [])\n * //=> 33\n * @example convertColumn('age', [{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age: '33'}, ['int4'])\n * //=> \"33\"\n */\nexport const convertColumn = (\n  columnName: string,\n  columns: Columns,\n  record: Record,\n  skipTypes: string[]\n): RecordValue => {\n  const column = columns.find((x) => x.name === columnName)\n  const colType = column?.type\n  const value = record[columnName]\n\n  if (colType && !skipTypes.includes(colType)) {\n    return convertCell(colType, value)\n  }\n\n  return noop(value)\n}\n\n/**\n * If the value of the cell is `null`, returns null.\n * Otherwise converts the string value to the correct type.\n * @param {String} type A postgres column type\n * @param {String} value The cell value\n *\n * @example convertCell('bool', 't')\n * //=> true\n * @example convertCell('int8', '10')\n * //=> 10\n * @example convertCell('_int4', '{1,2,3,4}')\n * //=> [1,2,3,4]\n */\nexport const convertCell = (type: string, value: RecordValue): RecordValue => {\n  // if data type is an array\n  if (type.charAt(0) === '_') {\n    const dataType = type.slice(1, type.length)\n    return toArray(value, dataType)\n  }\n\n  // If not null, convert to correct type.\n  switch (type) {\n    case PostgresTypes.bool:\n      return toBoolean(value)\n    case PostgresTypes.float4:\n    case PostgresTypes.float8:\n    case PostgresTypes.int2:\n    case PostgresTypes.int4:\n    case PostgresTypes.int8:\n    case PostgresTypes.numeric:\n    case PostgresTypes.oid:\n      return toNumber(value)\n    case PostgresTypes.json:\n    case PostgresTypes.jsonb:\n      return toJson(value)\n    case PostgresTypes.timestamp:\n      return toTimestampString(value) // Format to be consistent with PostgREST\n    case PostgresTypes.abstime: // To allow users to cast it based on Timezone\n    case PostgresTypes.date: // To allow users to cast it based on Timezone\n    case PostgresTypes.daterange:\n    case PostgresTypes.int4range:\n    case PostgresTypes.int8range:\n    case PostgresTypes.money:\n    case PostgresTypes.reltime: // To allow users to cast it based on Timezone\n    case PostgresTypes.text:\n    case PostgresTypes.time: // To allow users to cast it based on Timezone\n    case PostgresTypes.timestamptz: // To allow users to cast it based on Timezone\n    case PostgresTypes.timetz: // To allow users to cast it based on Timezone\n    case PostgresTypes.tsrange:\n    case PostgresTypes.tstzrange:\n      return noop(value)\n    default:\n      // Return the value for remaining types\n      return noop(value)\n  }\n}\n\nconst noop = (value: RecordValue): RecordValue => {\n  return value\n}\nexport const toBoolean = (value: RecordValue): RecordValue => {\n  switch (value) {\n    case 't':\n      return true\n    case 'f':\n      return false\n    default:\n      return value\n  }\n}\nexport const toNumber = (value: RecordValue): RecordValue => {\n  if (typeof value === 'string') {\n    const parsedValue = parseFloat(value)\n    if (!Number.isNaN(parsedValue)) {\n      return parsedValue\n    }\n  }\n  return value\n}\nexport const toJson = (value: RecordValue): RecordValue => {\n  if (typeof value === 'string') {\n    try {\n      return JSON.parse(value)\n    } catch {\n      return value\n    }\n  }\n  return value\n}\n\n/**\n * Converts a Postgres Array into a native JS array\n *\n * @example toArray('{}', 'int4')\n * //=> []\n * @example toArray('{\"[2021-01-01,2021-12-31)\",\"(2021-01-01,2021-12-32]\"}', 'daterange')\n * //=> ['[2021-01-01,2021-12-31)', '(2021-01-01,2021-12-32]']\n * @example toArray([1,2,3,4], 'int4')\n * //=> [1,2,3,4]\n */\nexport const toArray = (value: RecordValue, type: string): RecordValue => {\n  if (typeof value !== 'string') {\n    return value\n  }\n\n  const lastIdx = value.length - 1\n  const closeBrace = value[lastIdx]\n  const openBrace = value[0]\n\n  // Confirm value is a Postgres array by checking curly brackets\n  if (openBrace === '{' && closeBrace === '}') {\n    let arr\n    const valTrim = value.slice(1, lastIdx)\n\n    // TODO: find a better solution to separate Postgres array data\n    try {\n      arr = JSON.parse('[' + valTrim + ']')\n    } catch (_) {\n      // WARNING: splitting on comma does not cover all edge cases\n      arr = valTrim ? valTrim.split(',') : []\n    }\n\n    return arr.map((val: BaseValue) => convertCell(type, val))\n  }\n\n  return value\n}\n\n/**\n * Fixes timestamp to be ISO-8601. Swaps the space between the date and time for a 'T'\n * See https://github.com/supabase/supabase/issues/18\n *\n * @example toTimestampString('2019-09-10 00:00:00')\n * //=> '2019-09-10T00:00:00'\n */\nexport const toTimestampString = (value: RecordValue): RecordValue => {\n  if (typeof value === 'string') {\n    return value.replace(' ', 'T')\n  }\n\n  return value\n}\n\nexport const httpEndpointURL = (socketUrl: string): string => {\n  const wsUrl = new URL(socketUrl)\n\n  wsUrl.protocol = wsUrl.protocol.replace(/^ws/i, 'http')\n\n  wsUrl.pathname = wsUrl.pathname\n    .replace(/\\/+$/, '') // remove all trailing slashes\n    .replace(/\\/socket\\/websocket$/i, '') // remove the socket/websocket path\n    .replace(/\\/socket$/i, '') // remove the socket path\n    .replace(/\\/websocket$/i, '') // remove the websocket path\n\n  if (wsUrl.pathname === '' || wsUrl.pathname === '/') {\n    wsUrl.pathname = '/api/broadcast'\n  } else {\n    wsUrl.pathname = wsUrl.pathname + '/api/broadcast'\n  }\n\n  return wsUrl.href\n}\n", "/**\n * Phoenix Channels JavaScript client\n *\n * ## Socket Connection\n *\n * A single connection is established to the server and\n * channels are multiplexed over the connection.\n * Connect to the server using the `Socket` class:\n *\n * ```javascript\n * let socket = new Socket(\"/socket\", {params: {userToken: \"123\"}})\n * socket.connect()\n * ```\n *\n * The `Socket` constructor takes the mount point of the socket,\n * the authentication params, as well as options that can be found in\n * the Socket docs, such as configuring the `LongPoll` transport, and\n * heartbeat.\n *\n * ## Channels\n *\n * Channels are isolated, concurrent processes on the server that\n * subscribe to topics and broker events between the client and server.\n * To join a channel, you must provide the topic, and channel params for\n * authorization. Here's an example chat room example where `\"new_msg\"`\n * events are listened for, messages are pushed to the server, and\n * the channel is joined with ok/error/timeout matches:\n *\n * ```\n * let channel = socket.channel(\"room:123\", {token: roomToken})\n * channel.on(\"new_msg\", msg => console.log(\"Got message\", msg) )\n * $input.onEnter( e => {\n *   channel.push(\"new_msg\", {body: e.target.val}, 10000)\n *     .receive(\"ok\", (msg) => console.log(\"created message\", msg) )\n *     .receive(\"error\", (reasons) => console.log(\"create failed\", reasons) )\n *     .receive(\"timeout\", () => console.log(\"Networking issue...\") )\n * })\n *\n * channel.join()\n *   .receive(\"ok\", ({messages}) => console.log(\"catching up\", messages) )\n *   .receive(\"error\", ({reason}) => console.log(\"failed join\", reason) )\n *   .receive(\"timeout\", () => console.log(\"Networking issue. Still waiting...\"))\n *```\n *\n * ## Joining\n *\n * Creating a channel with `socket.channel(topic, params)`, binds the params to\n * `channel.params`, which are sent up on `channel.join()`.\n * Subsequent rejoins will send up the modified params for\n * updating authorization params, or passing up last_message_id information.\n * Successful joins receive an \"ok\" status, while unsuccessful joins\n * receive \"error\".\n *\n * With the default serializers and WebSocket transport, JSON text frames are\n * used for pushing a JSON object literal. If an `ArrayBuffer` instance is provided,\n * binary encoding will be used and the message will be sent with the binary\n * opcode.\n *\n * *Note*: binary messages are only supported on the WebSocket transport.\n *\n * ## Duplicate Join Subscriptions\n *\n * While the client may join any number of topics on any number of channels,\n * the client may only hold a single subscription for each unique topic at any\n * given time. When attempting to create a duplicate subscription,\n * the server will close the existing channel, log a warning, and\n * spawn a new channel for the topic. The client will have their\n * `channel.onClose` callbacks fired for the existing channel, and the new\n * channel join will have its receive hooks processed as normal.\n *\n * ## Pushing Messages\n *\n * From the previous example, we can see that pushing messages to the server\n * can be done with `channel.push(eventName, payload)` and we can optionally\n * receive responses from the push. Additionally, we can use\n * `receive(\"timeout\", callback)` to abort waiting for our other `receive` hooks\n *  and take action after some period of waiting. The default timeout is 10000ms.\n *\n *\n * ## Socket Hooks\n *\n * Lifecycle events of the multiplexed connection can be hooked into via\n * `socket.onError()` and `socket.onClose()` events, ie:\n *\n * ```\n * socket.onError( () => console.log(\"there was an error with the connection!\") )\n * socket.onClose( () => console.log(\"the connection dropped\") )\n * ```\n *\n *\n * ## Channel Hooks\n *\n * For each joined channel, you can bind to `onError` and `onClose` events\n * to monitor the channel lifecycle, ie:\n *\n * ```\n * channel.onError( () => console.log(\"there was an error!\") )\n * channel.onClose( () => console.log(\"the channel has gone away gracefully\") )\n * ```\n *\n * ### onError hooks\n *\n * `onError` hooks are invoked if the socket connection drops, or the channel\n * crashes on the server. In either case, a channel rejoin is attempted\n * automatically in an exponential backoff manner.\n *\n * ### onClose hooks\n *\n * `onClose` hooks are invoked only in two cases. 1) the channel explicitly\n * closed on the server, or 2). The client explicitly closed, by calling\n * `channel.leave()`\n *\n *\n * ## Presence\n *\n * The `Presence` object provides features for syncing presence information\n * from the server with the client and handling presences joining and leaving.\n *\n * ### Syncing state from the server\n *\n * To sync presence state from the server, first instantiate an object and\n * pass your channel in to track lifecycle events:\n *\n * ```\n * let channel = socket.channel(\"some:topic\")\n * let presence = new Presence(channel)\n * ```\n *\n * Next, use the `presence.onSync` callback to react to state changes\n * from the server. For example, to render the list of users every time\n * the list changes, you could write:\n *\n * ```\n * presence.onSync(() => {\n *   myRenderUsersFunction(presence.list())\n * })\n * ```\n *\n * ### Listing Presences\n *\n * `presence.list` is used to return a list of presence information\n * based on the local state of metadata. By default, all presence\n * metadata is returned, but a `listBy` function can be supplied to\n * allow the client to select which metadata to use for a given presence.\n * For example, you may have a user online from different devices with\n * a metadata status of \"online\", but they have set themselves to \"away\"\n * on another device. In this case, the app may choose to use the \"away\"\n * status for what appears on the UI. The example below defines a `listBy`\n * function which prioritizes the first metadata which was registered for\n * each user. This could be the first tab they opened, or the first device\n * they came online from:\n *\n * ```\n * let listBy = (id, {metas: [first, ...rest]}) => {\n *   first.count = rest.length + 1 // count of this user's presences\n *   first.id = id\n *   return first\n * }\n * let onlineUsers = presence.list(listBy)\n * ```\n *\n * ### Handling individual presence join and leave events\n *\n * The `presence.onJoin` and `presence.onLeave` callbacks can be used to\n * react to individual presences joining and leaving the app. For example:\n *\n * ```\n * let presence = new Presence(channel)\n *\n * // detect if user has joined for the 1st time or from another tab/device\n * presence.onJoin((id, current, newPres) => {\n *   if(!current){\n *     console.log(\"user has entered for the first time\", newPres)\n *   } else {\n *     console.log(\"user additional presence\", newPres)\n *   }\n * })\n *\n * // detect if user has left from all tabs/devices, or is still present\n * presence.onLeave((id, current, leftPres) => {\n *   if(current.metas.length === 0){\n *     console.log(\"user has left from all devices\", leftPres)\n *   } else {\n *     console.log(\"user left from a device\", leftPres)\n *   }\n * })\n * // receive presence data from server\n * presence.onSync(() => {\n *   displayUsers(presence.list())\n * })\n * ```\n * @module phoenix\n */\n\nimport Channel from \"./channel\"\nimport LongPoll from \"./longpoll\"\nimport Presence from \"./presence\"\nimport Serializer from \"./serializer\"\nimport Socket from \"./socket\"\nimport Timer from \"./timer\"\nimport Push from \"./push\"\nexport * from \"./types\"\n\nexport {\n  Channel,\n  LongPoll,\n  Presence,\n  Push,\n  Serializer,\n  Socket,\n  Timer\n}\n", "/**\n*\n* Wraps value in closure or returns closure\n*\n* @template T\n* @param {T | (() => T)} value\n* @returns {() => T}\n*/\nexport let closure = (value) => {\n  if(typeof value === \"function\"){\n    return /** @type {() => T} */ (value)\n  } else {\n    let closure = function (){ return value }\n    return closure\n  }\n}\n", "export const globalSelf = typeof self !== \"undefined\" ? self : null\nexport const phxWindow = typeof window !== \"undefined\" ? window : null\nexport const global = globalSelf || phxWindow || globalThis\nexport const DEFAULT_VSN = \"2.0.0\"\nexport const DEFAULT_TIMEOUT = 10000\nexport const WS_CLOSE_NORMAL = 1000\n\nexport const SOCKET_STATES = /** @type {const} */ ({connecting: 0, open: 1, closing: 2, closed: 3})\n\nexport const CHANNEL_STATES = /** @type {const} */ ({\n  closed: \"closed\",\n  errored: \"errored\",\n  joined: \"joined\",\n  joining: \"joining\",\n  leaving: \"leaving\",\n})\n\nexport const CHANNEL_EVENTS = /** @type {const} */ ({\n  close: \"phx_close\",\n  error: \"phx_error\",\n  join: \"phx_join\",\n  reply: \"phx_reply\",\n  leave: \"phx_leave\"\n})\n\nexport const TRANSPORTS = /** @type {const} */ ({\n  longpoll: \"longpoll\",\n  websocket: \"websocket\"\n})\n\nexport const XHR_STATES = /** @type {const} */ ({\n  complete: 4\n})\n\nexport const AUTH_TOKEN_PREFIX = \"base64url.bearer.phx.\"\n", "/**\n * @import Channel from \"./channel\"\n * @import { ChannelEvent } from \"./types\"\n */\nexport default class Push {\n  /**\n   * Initializes the Push\n   * @param {Channel} channel - The Channel\n   * @param {ChannelEvent} event - The event, for example `\"phx_join\"`\n   * @param {() => Record<string, unknown>} payload - The payload, for example `{user_id: 123}`\n   * @param {number} timeout - The push timeout in milliseconds\n   */\n  constructor(channel, event, payload, timeout){\n    /** @type{Channel} */\n    this.channel = channel\n    /** @type{ChannelEvent} */\n    this.event = event\n    /** @type{() => Record<string, unknown>} */\n    this.payload = payload || function (){ return {} }\n    this.receivedResp = null\n    /** @type{number} */\n    this.timeout = timeout\n    /** @type{(ReturnType<typeof setTimeout>) | null} */\n    this.timeoutTimer = null\n    /** @type{{status: string; callback: (response: any) => void}[]} */\n    this.recHooks = []\n    /** @type{boolean} */\n    this.sent = false\n    /** @type{string | null | undefined} */\n    this.ref = undefined\n  }\n\n  /**\n   *\n   * @param {number} timeout\n   */\n  resend(timeout){\n    this.timeout = timeout\n    this.reset()\n    this.send()\n  }\n\n  /**\n   *\n   */\n  send(){\n    if(this.hasReceived(\"timeout\")){ return }\n    this.startTimeout()\n    this.sent = true\n    this.channel.socket.push({\n      topic: this.channel.topic,\n      event: this.event,\n      payload: this.payload(),\n      ref: this.ref,\n      join_ref: this.channel.joinRef()\n    })\n  }\n\n  /**\n   *\n   * @param {string} status\n   * @param {(response: any) => void} callback\n   */\n  receive(status, callback){\n    if(this.hasReceived(status)){\n      callback(this.receivedResp.response)\n    }\n\n    this.recHooks.push({status, callback})\n    return this\n  }\n\n  reset(){\n    this.cancelRefEvent()\n    this.ref = null\n    this.refEvent = null\n    this.receivedResp = null\n    this.sent = false\n  }\n\n  destroy(){\n    this.cancelRefEvent()\n    this.cancelTimeout()\n  }\n\n  /**\n   * @private\n   */\n  matchReceive({status, response, _ref}){\n    this.recHooks.filter(h => h.status === status)\n      .forEach(h => h.callback(response))\n  }\n\n  /**\n   * @private\n   */\n  cancelRefEvent(){\n    if(!this.refEvent){ return }\n    this.channel.off(this.refEvent)\n  }\n\n  cancelTimeout(){\n    clearTimeout(this.timeoutTimer)\n    this.timeoutTimer = null\n  }\n\n  startTimeout(){\n    if(this.timeoutTimer){ this.cancelTimeout() }\n    this.ref = this.channel.socket.makeRef()\n    this.refEvent = this.channel.replyEventName(this.ref)\n\n    this.channel.on(this.refEvent, payload => {\n      this.cancelRefEvent()\n      this.cancelTimeout()\n      this.receivedResp = payload\n      this.matchReceive(payload)\n    })\n\n    this.timeoutTimer = setTimeout(() => {\n      this.trigger(\"timeout\", {})\n    }, this.timeout)\n  }\n\n  /**\n   * @private\n   */\n  hasReceived(status){\n    return this.receivedResp && this.receivedResp.status === status\n  }\n\n  trigger(status, response){\n    this.channel.trigger(this.refEvent, {status, response})\n  }\n}\n", "/**\n *\n * Creates a timer that accepts a `timerCalc` function to perform\n * calculated timeout retries, such as exponential backoff.\n *\n * @example\n * let reconnectTimer = new Timer(() => this.connect(), function(tries){\n *   return [1000, 5000, 10000][tries - 1] || 10000\n * })\n * reconnectTimer.scheduleTimeout() // fires after 1000\n * reconnectTimer.scheduleTimeout() // fires after 5000\n * reconnectTimer.reset()\n * reconnectTimer.scheduleTimeout() // fires after 1000\n *\n */\nexport default class Timer {\n  /**\n  * @param {() => void} callback\n  * @param {(tries: number) => number} timerCalc\n  */\n  constructor(callback, timerCalc){\n    /** @type {() => void} */\n    this.callback = callback\n    /** @type {(tries: number) => number} */\n    this.timerCalc = timerCalc\n    /** @type {ReturnType<typeof setTimeout> | undefined} */\n    this.timer = undefined\n    /** @type {number} */\n    this.tries = 0\n  }\n\n  reset(){\n    this.tries = 0\n    clearTimeout(this.timer)\n  }\n\n  /**\n   * Cancels any previous scheduleTimeout and schedules callback\n   */\n  scheduleTimeout(){\n    clearTimeout(this.timer)\n\n    this.timer = setTimeout(() => {\n      this.tries = this.tries + 1\n      this.callback()\n    }, this.timerCalc(this.tries + 1))\n  }\n}\n", "import {closure} from \"./utils\"\nimport {\n  CHANNEL_EVENTS,\n  CHANNEL_STATES,\n} from \"./constants\"\n\nimport Push from \"./push\"\nimport Timer from \"./timer\"\n\n/**\n* @import Socket from \"./socket\"\n* @import { ChannelState, Params, ChannelBindingCallback, ChannelOnMessage, ChannelFilterBindings, ChannelOnErrorCallback, ChannelBinding } from \"./types\"\n*/\n\nexport default class Channel {\n/**\n * @param {string} topic\n * @param {Params | (() => Params)} params\n * @param {Socket} socket\n */\n  constructor(topic, params, socket){\n    /** @type{ChannelState} */\n    this.state = CHANNEL_STATES.closed\n    /** @type{string} */\n    this.topic = topic\n    /** @type{() => Params} */\n    this.params = closure(params || {})\n    /** @type {Socket} */\n    this.socket = socket\n    /** @type{ChannelBinding[]} */\n    this.bindings = []\n    /** @type{number} */\n    this.bindingRef = 0\n    /** @type{number} */\n    this.timeout = this.socket.timeout\n    /** @type{boolean} */\n    this.joinedOnce = false\n    /** @type{Push} */\n    this.joinPush = new Push(this, CHANNEL_EVENTS.join, this.params, this.timeout)\n    /** @type{Push[]} */\n    this.pushBuffer = []\n    /** @type{string[]} */\n    this.stateChangeRefs = []\n\n    /** @type{Timer} */\n    this.rejoinTimer = new Timer(() => {\n      if(this.socket.isConnected()){ this.rejoin() }\n    }, this.socket.rejoinAfterMs)\n    this.stateChangeRefs.push(this.socket.onError(() => this.rejoinTimer.reset()))\n    this.stateChangeRefs.push(this.socket.onOpen(() => {\n      this.rejoinTimer.reset()\n      if(this.isErrored()){ this.rejoin() }\n    })\n    )\n    this.joinPush.receive(\"ok\", () => {\n      this.state = CHANNEL_STATES.joined\n      this.rejoinTimer.reset()\n      this.pushBuffer.forEach(pushEvent => pushEvent.send())\n      this.pushBuffer = []\n    })\n    this.joinPush.receive(\"error\", (reason) => {\n      this.state = CHANNEL_STATES.errored\n      if(this.socket.hasLogger()) this.socket.log(\"channel\", `error ${this.topic}`, reason)\n      if(this.socket.isConnected()){ this.rejoinTimer.scheduleTimeout() }\n    })\n    this.onClose(() => {\n      this.rejoinTimer.reset()\n      if(this.socket.hasLogger()) this.socket.log(\"channel\", `close ${this.topic}`)\n      this.state = CHANNEL_STATES.closed\n      this.socket.remove(this)\n    })\n    this.onError(reason => {\n      if(this.socket.hasLogger()) this.socket.log(\"channel\", `error ${this.topic}`, reason)\n      if(this.isJoining()){ this.joinPush.reset() }\n      this.state = CHANNEL_STATES.errored\n      if(this.socket.isConnected()){ this.rejoinTimer.scheduleTimeout() }\n    })\n    this.joinPush.receive(\"timeout\", () => {\n      if(this.socket.hasLogger()) this.socket.log(\"channel\", `timeout ${this.topic}`, this.joinPush.timeout)\n      let leavePush = new Push(this, CHANNEL_EVENTS.leave, closure({}), this.timeout)\n      leavePush.send()\n      this.state = CHANNEL_STATES.errored\n      this.joinPush.reset()\n      if(this.socket.isConnected()){ this.rejoinTimer.scheduleTimeout() }\n    })\n    this.on(CHANNEL_EVENTS.reply, (payload, ref) => {\n      this.trigger(this.replyEventName(ref), payload)\n    })\n  }\n\n  /**\n   * Join the channel\n   * @param {number} timeout\n   * @returns {Push}\n   */\n  join(timeout = this.timeout){\n    if(this.joinedOnce){\n      throw new Error(\"tried to join multiple times. 'join' can only be called a single time per channel instance\")\n    } else {\n      this.timeout = timeout\n      this.joinedOnce = true\n      this.rejoin()\n      return this.joinPush\n    }\n  }\n\n  /**\n   * Teardown the channel.\n   *\n   * Destroys and stops related timers.\n   */\n  teardown(){\n    this.pushBuffer.forEach((push) => push.destroy())\n    this.pushBuffer = []\n    this.rejoinTimer.reset()\n    this.joinPush.destroy()\n    this.state = CHANNEL_STATES.closed\n    this.bindings = []\n  }\n\n  /**\n   * Hook into channel close\n   * @param {ChannelBindingCallback} callback\n   */\n  onClose(callback){\n    this.on(CHANNEL_EVENTS.close, callback)\n  }\n\n  /**\n   * Hook into channel errors\n   * @param {ChannelOnErrorCallback} callback\n   * @return {number}\n   */\n  onError(callback){\n    return this.on(CHANNEL_EVENTS.error, reason => callback(reason))\n  }\n\n  /**\n   * Subscribes on channel events\n   *\n   * Subscription returns a ref counter, which can be used later to\n   * unsubscribe the exact event listener\n   *\n   * @example\n   * const ref1 = channel.on(\"event\", do_stuff)\n   * const ref2 = channel.on(\"event\", do_other_stuff)\n   * channel.off(\"event\", ref1)\n   * // Since unsubscription, do_stuff won't fire,\n   * // while do_other_stuff will keep firing on the \"event\"\n   *\n   * @param {string} event\n   * @param {ChannelBindingCallback} callback\n   * @returns {number} ref\n   */\n  on(event, callback){\n    let ref = this.bindingRef++\n    this.bindings.push({event, ref, callback})\n    return ref\n  }\n\n  /**\n   * Unsubscribes off of channel events\n   *\n   * Use the ref returned from a channel.on() to unsubscribe one\n   * handler, or pass nothing for the ref to unsubscribe all\n   * handlers for the given event.\n   *\n   * @example\n   * // Unsubscribe the do_stuff handler\n   * const ref1 = channel.on(\"event\", do_stuff)\n   * channel.off(\"event\", ref1)\n   *\n   * // Unsubscribe all handlers from event\n   * channel.off(\"event\")\n   *\n   * @param {string} event\n   * @param {number} [ref]\n   */\n  off(event, ref){\n    this.bindings = this.bindings.filter((bind) => {\n      return !(bind.event === event && (typeof ref === \"undefined\" || ref === bind.ref))\n    })\n  }\n\n  /**\n   * @private\n   */\n  canPush(){ return this.socket.isConnected() && this.isJoined() }\n\n  /**\n   * Sends a message `event` to phoenix with the payload `payload`.\n   * Phoenix receives this in the `handle_in(event, payload, socket)`\n   * function. if phoenix replies or it times out (default 10000ms),\n   * then optionally the reply can be received.\n   *\n   * @example\n   * channel.push(\"event\")\n   *   .receive(\"ok\", payload => console.log(\"phoenix replied:\", payload))\n   *   .receive(\"error\", err => console.log(\"phoenix errored\", err))\n   *   .receive(\"timeout\", () => console.log(\"timed out pushing\"))\n   * @param {string} event\n   * @param {Object} payload\n   * @param {number} [timeout]\n   * @returns {Push}\n   */\n  push(event, payload, timeout = this.timeout){\n    payload = payload || {}\n    if(!this.joinedOnce){\n      throw new Error(`tried to push '${event}' to '${this.topic}' before joining. Use channel.join() before pushing events`)\n    }\n    let pushEvent = new Push(this, event, function (){ return payload }, timeout)\n    if(this.canPush()){\n      pushEvent.send()\n    } else {\n      pushEvent.startTimeout()\n      this.pushBuffer.push(pushEvent)\n    }\n\n    return pushEvent\n  }\n\n  /** Leaves the channel\n   *\n   * Unsubscribes from server events, and\n   * instructs channel to terminate on server\n   *\n   * Triggers onClose() hooks\n   *\n   * To receive leave acknowledgements, use the `receive`\n   * hook to bind to the server ack, ie:\n   *\n   * @example\n   * channel.leave().receive(\"ok\", () => alert(\"left!\") )\n   *\n   * @param {number} timeout\n   * @returns {Push}\n   */\n  leave(timeout = this.timeout){\n    this.rejoinTimer.reset()\n    this.joinPush.cancelTimeout()\n\n    this.state = CHANNEL_STATES.leaving\n    let onClose = () => {\n      if(this.socket.hasLogger()) this.socket.log(\"channel\", `leave ${this.topic}`)\n      this.trigger(CHANNEL_EVENTS.close, \"leave\")\n    }\n    let leavePush = new Push(this, CHANNEL_EVENTS.leave, closure({}), timeout)\n    leavePush.receive(\"ok\", () => onClose())\n      .receive(\"timeout\", () => onClose())\n    leavePush.send()\n    if(!this.canPush()){ leavePush.trigger(\"ok\", {}) }\n\n    return leavePush\n  }\n\n  /**\n   * Overridable message hook\n   *\n   * Receives all events for specialized message handling\n   * before dispatching to the channel callbacks.\n   *\n   * Must return the payload, modified or unmodified\n   * @type{ChannelOnMessage}\n   */\n  onMessage(_event, payload, _ref){ return payload }\n\n  /**\n   * Overridable filter hook\n   *\n   * If this function returns `true`, `binding`'s callback will be called.\n   *\n   * @type{ChannelFilterBindings}\n   */\n  filterBindings(_binding, _payload, _ref){ return true }\n\n  isMember(topic, event, payload, joinRef){\n    if(this.topic !== topic){ return false }\n\n    if(joinRef && joinRef !== this.joinRef()){\n      if(this.socket.hasLogger()) this.socket.log(\"channel\", \"dropping outdated message\", {topic, event, payload, joinRef})\n      return false\n    } else {\n      return true\n    }\n  }\n\n  joinRef(){ return this.joinPush.ref }\n\n  /**\n   * @private\n   */\n  rejoin(timeout = this.timeout){\n    if(this.isLeaving()){ return }\n    this.socket.leaveOpenTopic(this.topic)\n    this.state = CHANNEL_STATES.joining\n    this.joinPush.resend(timeout)\n  }\n\n  /**\n   * @param {string} event\n   * @param {unknown} [payload]\n   * @param {?string} [ref]\n   * @param {?string} [joinRef]\n   */\n  trigger(event, payload, ref, joinRef){\n    let handledPayload = this.onMessage(event, payload, ref, joinRef)\n    if(payload && !handledPayload){ throw new Error(\"channel onMessage callbacks must return the payload, modified or unmodified\") }\n\n    let eventBindings = this.bindings.filter(bind => bind.event === event && this.filterBindings(bind, payload, ref))\n\n    for(let i = 0; i < eventBindings.length; i++){\n      let bind = eventBindings[i]\n      bind.callback(handledPayload, ref, joinRef || this.joinRef())\n    }\n  }\n\n  /**\n  * @param {string} ref\n  */\n  replyEventName(ref){ return `chan_reply_${ref}` }\n\n  isClosed(){ return this.state === CHANNEL_STATES.closed }\n\n  isErrored(){ return this.state === CHANNEL_STATES.errored }\n\n  isJoined(){ return this.state === CHANNEL_STATES.joined }\n\n  isJoining(){ return this.state === CHANNEL_STATES.joining }\n\n  isLeaving(){ return this.state === CHANNEL_STATES.leaving }\n}\n", "import {\n  global,\n  XHR_STATES\n} from \"./constants\"\n\nexport default class Ajax {\n\n  static request(method, endPoint, headers, body, timeout, ontimeout, callback){\n    if(global.XDomainRequest){\n      let req = new global.XDomainRequest() // IE8, IE9\n      return this.xdomainRequest(req, method, endPoint, body, timeout, ontimeout, callback)\n    } else if(global.XMLHttpRequest){\n      let req = new global.XMLHttpRequest() // IE7+, Firefox, Chrome, Opera, Safari\n      return this.xhrRequest(req, method, endPoint, headers, body, timeout, ontimeout, callback)\n    } else if(global.fetch && global.AbortController){\n      // Fetch with AbortController for modern browsers\n      return this.fetchRequest(method, endPoint, headers, body, timeout, ontimeout, callback)\n    } else {\n      throw new Error(\"No suitable XMLHttpRequest implementation found\")\n    }\n  }\n\n  static fetchRequest(method, endPoint, headers, body, timeout, ontimeout, callback){\n    let options = {\n      method,\n      headers,\n      body,\n    }\n    let controller = null\n    if(timeout){\n      controller = new AbortController()\n      const _timeoutId = setTimeout(() => controller.abort(), timeout)\n      options.signal = controller.signal\n    }\n    global.fetch(endPoint, options)\n      .then(response => response.text())\n      .then(data => this.parseJSON(data))\n      .then(data => callback && callback(data))\n      .catch(err => {\n        if(err.name === \"AbortError\" && ontimeout){\n          ontimeout()\n        } else {\n          callback && callback(null)\n        }\n      })\n    return controller\n  }\n\n  static xdomainRequest(req, method, endPoint, body, timeout, ontimeout, callback){\n    req.timeout = timeout\n    req.open(method, endPoint)\n    req.onload = () => {\n      let response = this.parseJSON(req.responseText)\n      callback && callback(response)\n    }\n    if(ontimeout){ req.ontimeout = ontimeout }\n\n    // Work around bug in IE9 that requires an attached onprogress handler\n    req.onprogress = () => { }\n\n    req.send(body)\n    return req\n  }\n\n  static xhrRequest(req, method, endPoint, headers, body, timeout, ontimeout, callback){\n    req.open(method, endPoint, true)\n    req.timeout = timeout\n    for(let [key, value] of Object.entries(headers)){\n      req.setRequestHeader(key, value)\n    }\n    req.onerror = () => callback && callback(null)\n    req.onreadystatechange = () => {\n      if(req.readyState === XHR_STATES.complete && callback){\n        let response = this.parseJSON(req.responseText)\n        callback(response)\n      }\n    }\n    if(ontimeout){ req.ontimeout = ontimeout }\n\n    req.send(body)\n    return req\n  }\n\n  static parseJSON(resp){\n    if(!resp || resp === \"\"){ return null }\n\n    try {\n      return JSON.parse(resp)\n    } catch {\n      console && console.log(\"failed to parse JSON response\", resp)\n      return null\n    }\n  }\n\n  static serialize(obj, parentKey){\n    let queryStr = []\n    for(var key in obj){\n      if(!Object.prototype.hasOwnProperty.call(obj, key)){ continue }\n      let paramKey = parentKey ? `${parentKey}[${key}]` : key\n      let paramVal = obj[key]\n      if(typeof paramVal === \"object\"){\n        queryStr.push(this.serialize(paramVal, paramKey))\n      } else {\n        queryStr.push(encodeURIComponent(paramKey) + \"=\" + encodeURIComponent(paramVal))\n      }\n    }\n    return queryStr.join(\"&\")\n  }\n\n  static appendParams(url, params){\n    if(Object.keys(params).length === 0){ return url }\n\n    let prefix = url.match(/\\?/) ? \"&\" : \"?\"\n    return `${url}${prefix}${this.serialize(params)}`\n  }\n}\n", "import {\n  SOCKET_STATES,\n  TRANSPORTS,\n  AUTH_TOKEN_PREFIX\n} from \"./constants\"\n\nimport Ajax from \"./ajax\"\n\nlet arrayBufferToBase64 = (buffer) => {\n  let binary = \"\"\n  let bytes = new Uint8Array(buffer)\n  let len = bytes.byteLength\n  for(let i = 0; i < len; i++){ binary += String.fromCharCode(bytes[i]) }\n  return btoa(binary)\n}\n\nexport default class LongPoll {\n\n  constructor(endPoint, protocols){\n    // we only support subprotocols for authToken\n    // [\"phoenix\", \"base64url.bearer.phx.BASE64_ENCODED_TOKEN\"]\n    if(protocols && protocols.length === 2 && protocols[1].startsWith(AUTH_TOKEN_PREFIX)){\n      this.authToken = atob(protocols[1].slice(AUTH_TOKEN_PREFIX.length))\n    }\n    this.endPoint = null\n    this.token = null\n    this.skipHeartbeat = true\n    this.reqs = new Set()\n    this.awaitingBatchAck = false\n    this.currentBatch = null\n    this.currentBatchTimer = null\n    this.batchBuffer = []\n    this.onopen = function (){ } // noop\n    this.onerror = function (){ } // noop\n    this.onmessage = function (){ } // noop\n    this.onclose = function (){ } // noop\n    this.pollEndpoint = this.normalizeEndpoint(endPoint)\n    this.readyState = SOCKET_STATES.connecting\n    // we must wait for the caller to finish setting up our callbacks and timeout properties\n    setTimeout(() => this.poll(), 0)\n  }\n\n  normalizeEndpoint(endPoint){\n    return (endPoint\n      .replace(\"ws://\", \"http://\")\n      .replace(\"wss://\", \"https://\")\n      .replace(new RegExp(\"(.*)\\/\" + TRANSPORTS.websocket), \"$1/\" + TRANSPORTS.longpoll))\n  }\n\n  endpointURL(){\n    return Ajax.appendParams(this.pollEndpoint, {token: this.token})\n  }\n\n  closeAndRetry(code, reason, wasClean){\n    this.close(code, reason, wasClean)\n    this.readyState = SOCKET_STATES.connecting\n  }\n\n  ontimeout(){\n    this.onerror(\"timeout\")\n    this.closeAndRetry(1005, \"timeout\", false)\n  }\n\n  isActive(){ return this.readyState === SOCKET_STATES.open || this.readyState === SOCKET_STATES.connecting }\n\n  poll(){\n    const headers = {\"Accept\": \"application/json\"}\n    if(this.authToken){\n      headers[\"X-Phoenix-AuthToken\"] = this.authToken\n    }\n    this.ajax(\"GET\", headers, null, () => this.ontimeout(), resp => {\n      if(resp){\n        var {status, token, messages} = resp\n        if(status === 410 && this.token !== null){\n          // In case we already have a token, this means that our existing session\n          // is gone. We fail so that the client rejoins its channels.\n          this.onerror(410)\n          this.closeAndRetry(3410, \"session_gone\", false)\n          return\n        }\n        this.token = token\n      } else {\n        status = 0\n      }\n\n      switch(status){\n        case 200:\n          messages.forEach(msg => {\n            // Tasks are what things like event handlers, setTimeout callbacks,\n            // promise resolves and more are run within.\n            // In modern browsers, there are two different kinds of tasks,\n            // microtasks and macrotasks.\n            // Microtasks are mainly used for Promises, while macrotasks are\n            // used for everything else.\n            // Microtasks always have priority over macrotasks. If the JS engine\n            // is looking for a task to run, it will always try to empty the\n            // microtask queue before attempting to run anything from the\n            // macrotask queue.\n            //\n            // For the WebSocket transport, messages always arrive in their own\n            // event. This means that if any promises are resolved from within,\n            // their callbacks will always finish execution by the time the\n            // next message event handler is run.\n            //\n            // In order to emulate this behaviour, we need to make sure each\n            // onmessage handler is run within its own macrotask.\n            setTimeout(() => this.onmessage({data: msg}), 0)\n          })\n          this.poll()\n          break\n        case 204:\n          this.poll()\n          break\n        case 410:\n          this.readyState = SOCKET_STATES.open\n          this.onopen({})\n          this.poll()\n          break\n        case 403:\n          this.onerror(403)\n          this.close(1008, \"forbidden\", false)\n          break\n        case 0:\n        case 500:\n          this.onerror(500)\n          this.closeAndRetry(1011, \"internal server error\", 500)\n          break\n        default: throw new Error(`unhandled poll status ${status}`)\n      }\n    })\n  }\n\n  // we collect all pushes within the current event loop by\n  // setTimeout 0, which optimizes back-to-back procedural\n  // pushes against an empty buffer\n\n  send(body){\n    if(typeof(body) !== \"string\"){ body = arrayBufferToBase64(body) }\n    if(this.currentBatch){\n      this.currentBatch.push(body)\n    } else if(this.awaitingBatchAck){\n      this.batchBuffer.push(body)\n    } else {\n      this.currentBatch = [body]\n      this.currentBatchTimer = setTimeout(() => {\n        this.batchSend(this.currentBatch)\n        this.currentBatch = null\n      }, 0)\n    }\n  }\n\n  batchSend(messages){\n    this.awaitingBatchAck = true\n    this.ajax(\"POST\", {\"Content-Type\": \"application/x-ndjson\"}, messages.join(\"\\n\"), () => this.onerror(\"timeout\"), resp => {\n      this.awaitingBatchAck = false\n      if(!resp || resp.status !== 200){\n        this.onerror(resp && resp.status)\n        this.closeAndRetry(1011, \"internal server error\", false)\n      } else if(this.batchBuffer.length > 0){\n        this.batchSend(this.batchBuffer)\n        this.batchBuffer = []\n      }\n    })\n  }\n\n  close(code, reason, wasClean){\n    for(let req of this.reqs){ req.abort() }\n    this.readyState = SOCKET_STATES.closed\n    let opts = Object.assign({code: 1000, reason: undefined, wasClean: true}, {code, reason, wasClean})\n    this.batchBuffer = []\n    clearTimeout(this.currentBatchTimer)\n    this.currentBatchTimer = null\n    if(typeof(CloseEvent) !== \"undefined\"){\n      this.onclose(new CloseEvent(\"close\", opts))\n    } else {\n      this.onclose(opts)\n    }\n  }\n\n  ajax(method, headers, body, onCallerTimeout, callback){\n    let req\n    let ontimeout = () => {\n      this.reqs.delete(req)\n      onCallerTimeout()\n    }\n    req = Ajax.request(method, this.endpointURL(), headers, body, this.timeout, ontimeout, resp => {\n      this.reqs.delete(req)\n      if(this.isActive()){ callback(resp) }\n    })\n    this.reqs.add(req)\n  }\n}\n", "/**\n * @import Channel from \"./channel\"\n * @import { PresenceEvents, PresenceOnJoin, PresenceOnLeave, PresenceOnSync, PresenceState, PresenceDiff, PresenceOptions } from \"./types\"\n */\nexport default class Presence {\n\n  /**\n   * Initializes the Presence\n   * @param {Channel} channel - The Channel\n   * @param {PresenceOptions} [opts] - The options, for example `{events: {state: \"state\", diff: \"diff\"}}`\n   */\n  constructor(channel, opts = {}){\n    let events = opts.events || /** @type {PresenceEvents} */ ({state: \"presence_state\", diff: \"presence_diff\"})\n    /** @type{Record<string, PresenceState>} */\n    this.state = {}\n    /** @type{PresenceDiff[]} */\n    this.pendingDiffs = []\n    /** @type{Channel} */\n    this.channel = channel\n    /** @type{?number} */\n    this.joinRef = null\n    /** @type{({ onJoin: PresenceOnJoin; onLeave: PresenceOnLeave; onSync: PresenceOnSync })} */\n    this.caller = {\n      onJoin: function (){ },\n      onLeave: function (){ },\n      onSync: function (){ }\n    }\n\n    this.channel.on(events.state, newState => {\n      let {onJoin, onLeave, onSync} = this.caller\n\n      this.joinRef = this.channel.joinRef()\n      this.state = Presence.syncState(this.state, newState, onJoin, onLeave)\n\n      this.pendingDiffs.forEach(diff => {\n        this.state = Presence.syncDiff(this.state, diff, onJoin, onLeave)\n      })\n      this.pendingDiffs = []\n      onSync()\n    })\n\n    this.channel.on(events.diff, diff => {\n      let {onJoin, onLeave, onSync} = this.caller\n\n      if(this.inPendingSyncState()){\n        this.pendingDiffs.push(diff)\n      } else {\n        this.state = Presence.syncDiff(this.state, diff, onJoin, onLeave)\n        onSync()\n      }\n    })\n  }\n\n  /**\n   * @param {PresenceOnJoin} callback\n   */\n  onJoin(callback){ this.caller.onJoin = callback }\n\n  /**\n   * @param {PresenceOnLeave} callback\n   */\n  onLeave(callback){ this.caller.onLeave = callback }\n\n  /**\n   * @param {PresenceOnSync} callback\n   */\n  onSync(callback){ this.caller.onSync = callback }\n\n  /**\n   * Returns the array of presences, with selected metadata.\n   *\n   * @template [T=PresenceState]\n   * @param {((key: string, obj: PresenceState) => T)} [by]\n   *\n   * @returns {T[]}\n   */\n  list(by){ return Presence.list(this.state, by) }\n\n  inPendingSyncState(){\n    return !this.joinRef || (this.joinRef !== this.channel.joinRef())\n  }\n\n  // lower-level public static API\n\n  /**\n   * Used to sync the list of presences on the server\n   * with the client's state. An optional `onJoin` and `onLeave` callback can\n   * be provided to react to changes in the client's local presences across\n   * disconnects and reconnects with the server.\n   *\n   * @param {Record<string, PresenceState>} currentState\n   * @param {Record<string, PresenceState>} newState\n   * @param {PresenceOnJoin} onJoin\n   * @param {PresenceOnLeave} onLeave\n   *\n   * @returns {Record<string, PresenceState>}\n   */\n  static syncState(currentState, newState, onJoin, onLeave){\n    let state = this.clone(currentState)\n    let joins = {}\n    let leaves = {}\n\n    this.map(state, (key, presence) => {\n      if(!newState[key]){\n        leaves[key] = presence\n      }\n    })\n    this.map(newState, (key, newPresence) => {\n      let currentPresence = state[key]\n      if(currentPresence){\n        let newRefs = newPresence.metas.map(m => m.phx_ref)\n        let curRefs = currentPresence.metas.map(m => m.phx_ref)\n        let joinedMetas = newPresence.metas.filter(m => curRefs.indexOf(m.phx_ref) < 0)\n        let leftMetas = currentPresence.metas.filter(m => newRefs.indexOf(m.phx_ref) < 0)\n        if(joinedMetas.length > 0){\n          joins[key] = newPresence\n          joins[key].metas = joinedMetas\n        }\n        if(leftMetas.length > 0){\n          leaves[key] = this.clone(currentPresence)\n          leaves[key].metas = leftMetas\n        }\n      } else {\n        joins[key] = newPresence\n      }\n    })\n    return this.syncDiff(state, {joins: joins, leaves: leaves}, onJoin, onLeave)\n  }\n\n  /**\n   *\n   * Used to sync a diff of presence join and leave\n   * events from the server, as they happen. Like `syncState`, `syncDiff`\n   * accepts optional `onJoin` and `onLeave` callbacks to react to a user\n   * joining or leaving from a device.\n   *\n   * @param {Record<string, PresenceState>} state\n   * @param {PresenceDiff} diff\n   * @param {PresenceOnJoin} onJoin\n   * @param {PresenceOnLeave} onLeave\n   *\n   * @returns {Record<string, PresenceState>}\n   */\n  static syncDiff(state, diff, onJoin, onLeave){\n    let {joins, leaves} = this.clone(diff)\n    if(!onJoin){ onJoin = function (){ } }\n    if(!onLeave){ onLeave = function (){ } }\n\n    this.map(joins, (key, newPresence) => {\n      let currentPresence = state[key]\n      state[key] = this.clone(newPresence)\n      if(currentPresence){\n        let joinedRefs = state[key].metas.map(m => m.phx_ref)\n        let curMetas = currentPresence.metas.filter(m => joinedRefs.indexOf(m.phx_ref) < 0)\n        state[key].metas.unshift(...curMetas)\n      }\n      onJoin(key, currentPresence, newPresence)\n    })\n    this.map(leaves, (key, leftPresence) => {\n      let currentPresence = state[key]\n      if(!currentPresence){ return }\n      let refsToRemove = leftPresence.metas.map(m => m.phx_ref)\n      currentPresence.metas = currentPresence.metas.filter(p => {\n        return refsToRemove.indexOf(p.phx_ref) < 0\n      })\n      onLeave(key, currentPresence, leftPresence)\n      if(currentPresence.metas.length === 0){\n        delete state[key]\n      }\n    })\n    return state\n  }\n\n  /**\n   * Returns the array of presences, with selected metadata.\n   *\n   * @template [T=PresenceState]\n   * @param {Record<string, PresenceState>} presences\n   * @param {((key: string, obj: PresenceState) => T)} [chooser]\n   *\n   * @returns {T[]}\n   */\n  static list(presences, chooser){\n    if(!chooser){ chooser = function (key, pres){ return pres } }\n\n    return this.map(presences, (key, presence) => {\n      return chooser(key, presence)\n    })\n  }\n\n  // private\n\n  /**\n  * @template T\n  * @param {Record<string, PresenceState>} obj\n  * @param {(key: string, obj: PresenceState) => T} func\n  */\n  static map(obj, func){\n    return Object.getOwnPropertyNames(obj).map(key => func(key, obj[key]))\n  }\n\n  /**\n  * @template T\n  * @param {T} obj\n  * @returns {T}\n  */\n  static clone(obj){ return JSON.parse(JSON.stringify(obj)) }\n}\n", "/* The default serializer for encoding and decoding messages */\nimport {\n  CHANNEL_EVENTS\n} from \"./constants\"\n\n/**\n * @import { Message } from \"./types\"\n */\n\nexport default {\n  HEADER_LENGTH: 1,\n  META_LENGTH: 4,\n  KINDS: {push: 0, reply: 1, broadcast: 2},\n\n  /**\n  * @template T\n  * @param {Message<Record<string, any>>} msg\n  * @param {(msg: ArrayBuffer | string) => T} callback\n  * @returns {T}\n  */\n  encode(msg, callback){\n    if(msg.payload.constructor === ArrayBuffer){\n      return callback(this.binaryEncode(msg))\n    } else {\n      let payload = [msg.join_ref, msg.ref, msg.topic, msg.event, msg.payload]\n      return callback(JSON.stringify(payload))\n    }\n  },\n\n  /**\n  * @template T\n  * @param {ArrayBuffer | string} rawPayload\n  * @param {(msg: Message<unknown>) => T} callback\n  * @returns {T}\n  */\n  decode(rawPayload, callback){\n    if(rawPayload.constructor === ArrayBuffer){\n      return callback(this.binaryDecode(rawPayload))\n    } else {\n      let [join_ref, ref, topic, event, payload] = JSON.parse(rawPayload)\n      return callback({join_ref, ref, topic, event, payload})\n    }\n  },\n\n  /** @private */\n  binaryEncode(message){\n    let {join_ref, ref, event, topic, payload} = message\n    let metaLength = this.META_LENGTH + join_ref.length + ref.length + topic.length + event.length\n    let header = new ArrayBuffer(this.HEADER_LENGTH + metaLength)\n    let view = new DataView(header)\n    let offset = 0\n\n    view.setUint8(offset++, this.KINDS.push) // kind\n    view.setUint8(offset++, join_ref.length)\n    view.setUint8(offset++, ref.length)\n    view.setUint8(offset++, topic.length)\n    view.setUint8(offset++, event.length)\n    Array.from(join_ref, char => view.setUint8(offset++, char.charCodeAt(0)))\n    Array.from(ref, char => view.setUint8(offset++, char.charCodeAt(0)))\n    Array.from(topic, char => view.setUint8(offset++, char.charCodeAt(0)))\n    Array.from(event, char => view.setUint8(offset++, char.charCodeAt(0)))\n\n    var combined = new Uint8Array(header.byteLength + payload.byteLength)\n    combined.set(new Uint8Array(header), 0)\n    combined.set(new Uint8Array(payload), header.byteLength)\n\n    return combined.buffer\n  },\n\n  /**\n  * @private\n  */\n  binaryDecode(buffer){\n    let view = new DataView(buffer)\n    let kind = view.getUint8(0)\n    let decoder = new TextDecoder()\n    switch(kind){\n      case this.KINDS.push: return this.decodePush(buffer, view, decoder)\n      case this.KINDS.reply: return this.decodeReply(buffer, view, decoder)\n      case this.KINDS.broadcast: return this.decodeBroadcast(buffer, view, decoder)\n    }\n  },\n\n  /** @private */\n  decodePush(buffer, view, decoder){\n    let joinRefSize = view.getUint8(1)\n    let topicSize = view.getUint8(2)\n    let eventSize = view.getUint8(3)\n    let offset = this.HEADER_LENGTH + this.META_LENGTH - 1 // pushes have no ref\n    let joinRef = decoder.decode(buffer.slice(offset, offset + joinRefSize))\n    offset = offset + joinRefSize\n    let topic = decoder.decode(buffer.slice(offset, offset + topicSize))\n    offset = offset + topicSize\n    let event = decoder.decode(buffer.slice(offset, offset + eventSize))\n    offset = offset + eventSize\n    let data = buffer.slice(offset, buffer.byteLength)\n    return {join_ref: joinRef, ref: null, topic: topic, event: event, payload: data}\n  },\n\n  /** @private */\n  decodeReply(buffer, view, decoder){\n    let joinRefSize = view.getUint8(1)\n    let refSize = view.getUint8(2)\n    let topicSize = view.getUint8(3)\n    let eventSize = view.getUint8(4)\n    let offset = this.HEADER_LENGTH + this.META_LENGTH\n    let joinRef = decoder.decode(buffer.slice(offset, offset + joinRefSize))\n    offset = offset + joinRefSize\n    let ref = decoder.decode(buffer.slice(offset, offset + refSize))\n    offset = offset + refSize\n    let topic = decoder.decode(buffer.slice(offset, offset + topicSize))\n    offset = offset + topicSize\n    let event = decoder.decode(buffer.slice(offset, offset + eventSize))\n    offset = offset + eventSize\n    let data = buffer.slice(offset, buffer.byteLength)\n    let payload = {status: event, response: data}\n    return {join_ref: joinRef, ref: ref, topic: topic, event: CHANNEL_EVENTS.reply, payload: payload}\n  },\n\n  /** @private */\n  decodeBroadcast(buffer, view, decoder){\n    let topicSize = view.getUint8(1)\n    let eventSize = view.getUint8(2)\n    let offset = this.HEADER_LENGTH + 2\n    let topic = decoder.decode(buffer.slice(offset, offset + topicSize))\n    offset = offset + topicSize\n    let event = decoder.decode(buffer.slice(offset, offset + eventSize))\n    offset = offset + eventSize\n    let data = buffer.slice(offset, buffer.byteLength)\n\n    return {join_ref: null, ref: null, topic: topic, event: event, payload: data}\n  }\n}\n", "import {\n  global,\n  phxWindow,\n  CHANNEL_EVENTS,\n  DEFAULT_TIMEOUT,\n  DEFAULT_VSN,\n  SOCKET_STATES,\n  TRANSPORTS,\n  WS_CLOSE_NORMAL,\n  AUTH_TOKEN_PREFIX\n} from \"./constants\"\n\nimport {\n  closure\n} from \"./utils\"\n\nimport Ajax from \"./ajax\"\nimport Channel from \"./channel\"\nimport LongPoll from \"./longpoll\"\nimport Serializer from \"./serializer\"\nimport Timer from \"./timer\"\n\n/**\n* @import { Encode, Decode, Message, Vsn, SocketTransport, Params, SocketOnOpen, SocketOnClose, SocketOnError, SocketOnMessage, SocketOptions, SocketStateChangeCallbacks, HeartbeatCallback } from \"./types\"\n*/\n\nexport default class Socket {\n  /** Initializes the Socket *\n   *\n   * For IE8 support use an ES5-shim (https://github.com/es-shims/es5-shim)\n   *\n   * @constructor\n   * @param {string} endPoint - The string WebSocket endpoint, ie, `\"ws://example.com/socket\"`,\n   *                                               `\"wss://example.com\"`\n   *                                               `\"/socket\"` (inherited host & protocol)\n   * @param {SocketOptions} [opts] - Optional configuration\n   */\n  constructor(endPoint, opts = {}){\n    /** @type{SocketStateChangeCallbacks} */\n    this.stateChangeCallbacks = {open: [], close: [], error: [], message: []}\n    /** @type{Channel[]} */\n    this.channels = []\n    /** @type{(() => void)[]} */\n    this.sendBuffer = []\n    /** @type{number} */\n    this.ref = 0\n    /** @type{?string} */\n    this.fallbackRef = null\n    /** @type{number} */\n    this.timeout = opts.timeout || DEFAULT_TIMEOUT\n    /** @type{SocketTransport} */\n    this.transport = opts.transport || global.WebSocket || LongPoll\n    /** @type{InstanceType<SocketTransport> | undefined | null} */\n    this.conn = undefined\n    /** @type{boolean} */\n    this.primaryPassedHealthCheck = false\n    /** @type{number | undefined} */\n    this.longPollFallbackMs = opts.longPollFallbackMs\n    /** @type{ReturnType<typeof setTimeout>} */\n    this.fallbackTimer = null\n    // In some environments (sandboxed iframes without `allow-same-origin`,\n    // in-app webviews, \"block third-party storage\" privacy modes), reading\n    // `global.sessionStorage` throws SecurityError at the property-access level.\n    // Wrap the read so the Socket constructor cannot throw synchronously.\n    let envSessionStorage = null\n    try { envSessionStorage = global && global.sessionStorage } catch {}\n    /** @type{Storage} */\n    this.sessionStore = opts.sessionStorage || envSessionStorage\n    /** @type{number} */\n    this.establishedConnections = 0\n    /** @type{Encode<void>} */\n    this.defaultEncoder = Serializer.encode.bind(Serializer)\n    /** @type{Decode<void>} */\n    this.defaultDecoder = Serializer.decode.bind(Serializer)\n    // We start with closeWasClean true to avoid the visibility change\n    // logic from connecting if the socket was never connected in the first place.\n    // transportConnect sets it to false on open.\n    /** @type{boolean} */\n    this.closeWasClean = true\n    /** @type{boolean} */\n    this.disconnecting = false\n    /** @type{BinaryType} */\n    this.binaryType = opts.binaryType || \"arraybuffer\"\n    /** @type{number} */\n    this.connectClock = 1\n    /** @type{boolean} */\n    this.pageHidden = false\n    /** @type{Encode<void>} */\n    this.encode = undefined\n    /** @type{Decode<void>} */\n    this.decode = undefined\n    if(this.transport !== LongPoll){\n      this.encode = opts.encode || this.defaultEncoder\n      this.decode = opts.decode || this.defaultDecoder\n    } else {\n      this.encode = this.defaultEncoder\n      this.decode = this.defaultDecoder\n    }\n    /** @type{number | null} */\n    let awaitingConnectionOnPageShow = null\n    if(phxWindow && phxWindow.addEventListener){\n      phxWindow.addEventListener(\"pagehide\", _e => {\n        if(this.conn){\n          this.disconnect()\n          awaitingConnectionOnPageShow = this.connectClock\n        }\n      })\n      phxWindow.addEventListener(\"pageshow\", _e => {\n        if(awaitingConnectionOnPageShow === this.connectClock){\n          awaitingConnectionOnPageShow = null\n          this.connect()\n        }\n      })\n      phxWindow.addEventListener(\"visibilitychange\", () => {\n        if(document.visibilityState === \"hidden\"){\n          this.pageHidden = true\n        } else {\n          this.pageHidden = false\n          // reconnect immediately\n          if(!this.isConnected() && !this.closeWasClean){\n            this.teardown(() => this.connect())\n          }\n        }\n      })\n    }\n    /** @type{number} */\n    this.heartbeatIntervalMs = opts.heartbeatIntervalMs || 30000\n    /** @type{boolean} */\n    this.autoSendHeartbeat = opts.autoSendHeartbeat ?? true\n    /** @type{HeartbeatCallback} */\n    this.heartbeatCallback = opts.heartbeatCallback ?? (() => {})\n    /** @type{(tries: number) => number} */\n    this.rejoinAfterMs = (tries) => {\n      if(opts.rejoinAfterMs){\n        return opts.rejoinAfterMs(tries)\n      } else {\n        return [1000, 2000, 5000][tries - 1] || 10000\n      }\n    }\n    /** @type{(tries: number) => number} */\n    this.reconnectAfterMs = (tries) => {\n      if(opts.reconnectAfterMs){\n        return opts.reconnectAfterMs(tries)\n      } else {\n        return [10, 50, 100, 150, 200, 250, 500, 1000, 2000][tries - 1] || 5000\n      }\n    }\n    /** @type{((kind: string, msg: string, data: any) => void) | null} */\n    this.logger = opts.logger || null\n    if(!this.logger && opts.debug){\n      this.logger = (kind, msg, data) => { console.log(`${kind}: ${msg}`, data) }\n    }\n    /** @type{number} */\n    this.longpollerTimeout = opts.longpollerTimeout || 20000\n    /** @type{() => Params} */\n    this.params = closure(opts.params || {})\n    /** @type{string} */\n    this.endPoint = `${endPoint}/${TRANSPORTS.websocket}`\n    /** @type{Vsn} */\n    this.vsn = opts.vsn || DEFAULT_VSN\n    /** @type{ReturnType<typeof setTimeout>} */\n    this.heartbeatTimeoutTimer = null\n    /** @type{ReturnType<typeof setTimeout>} */\n    this.heartbeatTimer = null\n    /** @type{number | null} */\n    this.heartbeatSentAt = null\n    /** @type{?string} */\n    this.pendingHeartbeatRef = null\n    /** @type{Timer} */\n    this.reconnectTimer = new Timer( () => {\n      if(this.pageHidden){\n        this.log(\"Not reconnecting as page is hidden!\")\n        this.teardown()\n        return\n      }\n\n      this.teardown(async () => {\n        if(opts.beforeReconnect) await opts.beforeReconnect()\n        this.connect()\n      })\n    }, this.reconnectAfterMs)\n    /** @type{string | undefined} */\n    this.authToken = opts.authToken\n  }\n\n  /**\n   * Returns the LongPoll transport reference\n   */\n  getLongPollTransport(){ return LongPoll }\n\n  /**\n   * Disconnects and replaces the active transport\n   *\n   * @param {SocketTransport} newTransport - The new transport class to instantiate\n   *\n   */\n  replaceTransport(newTransport){\n    this.connectClock++\n    this.closeWasClean = true\n    clearTimeout(this.fallbackTimer)\n    this.reconnectTimer.reset()\n    if(this.conn){\n      this.conn.close()\n      this.conn = null\n    }\n    this.transport = newTransport\n  }\n\n  /**\n   * Returns the socket protocol\n   *\n   * @returns {\"wss\" | \"ws\"}\n   */\n  protocol(){ return location.protocol.match(/^https/) ? \"wss\" : \"ws\" }\n\n  /**\n   * The fully qualified socket url\n   *\n   * @returns {string}\n   */\n  endPointURL(){\n    let uri = Ajax.appendParams(\n      Ajax.appendParams(this.endPoint, this.params()), {vsn: this.vsn})\n    if(uri.charAt(0) !== \"/\"){ return uri }\n    if(uri.charAt(1) === \"/\"){ return `${this.protocol()}:${uri}` }\n\n    return `${this.protocol()}://${location.host}${uri}`\n  }\n\n  /**\n   * Disconnects the socket\n   *\n   * See https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Status_codes for valid status codes.\n   *\n   * @param {() => void} [callback] - Optional callback which is called after socket is disconnected.\n   * @param {number} [code] - A status code for disconnection (Optional).\n   * @param {string} [reason] - A textual description of the reason to disconnect. (Optional)\n   */\n  disconnect(callback, code, reason){\n    this.connectClock++\n    this.disconnecting = true\n    this.closeWasClean = true\n    clearTimeout(this.fallbackTimer)\n    this.reconnectTimer.reset()\n    this.teardown(() => {\n      this.disconnecting = false\n      callback && callback()\n    }, code, reason)\n  }\n\n  /**\n   * @param {Params} [params] - [DEPRECATED] The params to send when connecting, for example `{user_id: userToken}`\n   *\n   * Passing params to connect is deprecated; pass them in the Socket constructor instead:\n   * `new Socket(\"/socket\", {params: {user_id: userToken}})`.\n   */\n  connect(params){\n    if(params){\n      console && console.log(\"passing params to connect is deprecated. Instead pass :params to the Socket constructor\")\n      this.params = closure(params)\n    }\n    if(this.conn && !this.disconnecting){ return }\n    if(this.longPollFallbackMs && this.transport !== LongPoll){\n      this.connectWithFallback(LongPoll, this.longPollFallbackMs)\n    } else {\n      this.transportConnect()\n    }\n  }\n\n  /**\n   * Logs the message. Override `this.logger` for specialized logging. noops by default\n   * @param {string} kind\n   * @param {string} msg\n   * @param {Object} data\n   */\n  log(kind, msg, data){ this.logger && this.logger(kind, msg, data) }\n\n  /**\n   * Returns true if a logger has been set on this socket.\n   */\n  hasLogger(){ return this.logger !== null }\n\n  /**\n   * Registers callbacks for connection open events\n   *\n   * @example socket.onOpen(function(){ console.info(\"the socket was opened\") })\n   *\n   * @param {SocketOnOpen} callback\n   */\n  onOpen(callback){\n    let ref = this.makeRef()\n    this.stateChangeCallbacks.open.push([ref, callback])\n    return ref\n  }\n\n  /**\n   * Registers callbacks for connection close events\n   * @param {SocketOnClose} callback\n   * @returns {string}\n   */\n  onClose(callback){\n    let ref = this.makeRef()\n    this.stateChangeCallbacks.close.push([ref, callback])\n    return ref\n  }\n\n  /**\n   * Registers callbacks for connection error events\n   *\n   * @example socket.onError(function(error){ alert(\"An error occurred\") })\n   *\n   * @param {SocketOnError} callback\n   * @returns {string}\n   */\n  onError(callback){\n    let ref = this.makeRef()\n    this.stateChangeCallbacks.error.push([ref, callback])\n    return ref\n  }\n\n  /**\n   * Registers callbacks for connection message events\n   * @param {SocketOnMessage} callback\n   * @returns {string}\n   */\n  onMessage(callback){\n    let ref = this.makeRef()\n    this.stateChangeCallbacks.message.push([ref, callback])\n    return ref\n  }\n\n  /**\n   * Sets a callback that receives lifecycle events for internal heartbeat messages.\n   * Useful for instrumenting connection health (e.g. sent/ok/timeout/disconnected).\n   * @param {HeartbeatCallback} callback\n   */\n  onHeartbeat(callback){\n    this.heartbeatCallback = callback\n  }\n\n  /**\n   * Pings the server and invokes the callback with the RTT in milliseconds\n   * @param {(timeDelta: number) => void} callback\n   *\n   * Returns true if the ping was pushed or false if unable to be pushed.\n   */\n  ping(callback){\n    if(!this.isConnected()){ return false }\n    let ref = this.makeRef()\n    let startTime = Date.now()\n    this.push({topic: \"phoenix\", event: \"heartbeat\", payload: {}, ref: ref})\n    let onMsgRef = this.onMessage(msg => {\n      if(msg.ref === ref){\n        this.off([onMsgRef])\n        callback(Date.now() - startTime)\n      }\n    })\n    return true\n  }\n\n  /**\n   * @private\n   *\n   * @param {Function}\n   */\n  transportName(transport){\n    // JavaScript minification, enabled by default in production in Phoenix\n    // projects, renames symbols to reduce code size.\n    // See https://esbuild.github.io/api/#keep-names.\n    // This helper ensures we return the correct name for the LongPoll transport\n    // even after minification. The other common transport is WebSocket, which\n    // is native to browsers and does not need special handling.\n    switch(transport){\n      case LongPoll: return \"LongPoll\"\n      default: return transport.name\n    }\n  }\n\n  /**\n   * @private\n   */\n  transportConnect(){\n    this.connectClock++\n    this.closeWasClean = false\n    let protocols = undefined\n    // Sec-WebSocket-Protocol based token\n    // (longpoll uses Authorization header instead)\n    if(this.authToken){\n      protocols = [\"phoenix\", `${AUTH_TOKEN_PREFIX}${btoa(this.authToken).replace(/=/g, \"\")}`]\n    }\n    this.conn = new this.transport(this.endPointURL(), protocols)\n    this.conn.binaryType = this.binaryType\n    this.conn.timeout = this.longpollerTimeout\n    this.conn.onopen = () => this.onConnOpen()\n    this.conn.onerror = error => this.onConnError(error)\n    this.conn.onmessage = event => this.onConnMessage(event)\n    this.conn.onclose = event => this.onConnClose(event)\n  }\n\n  getSession(key){ return this.sessionStore && this.sessionStore.getItem(key) }\n\n  storeSession(key, val){ this.sessionStore && this.sessionStore.setItem(key, val) }\n\n  connectWithFallback(fallbackTransport, fallbackThreshold = 2500){\n    clearTimeout(this.fallbackTimer)\n    let established = false\n    let primaryTransport = true\n    let openRef, errorRef\n    let fallbackTransportName = this.transportName(fallbackTransport)\n    let fallback = (reason) => {\n      this.log(\"transport\", `falling back to ${fallbackTransportName}...`, reason)\n      this.off([openRef, errorRef])\n      primaryTransport = false\n      this.replaceTransport(fallbackTransport)\n      this.transportConnect()\n    }\n    if(this.getSession(`phx:fallback:${fallbackTransportName}`)){ return fallback(\"memorized\") }\n\n    this.fallbackTimer = setTimeout(fallback, fallbackThreshold)\n\n    errorRef = this.onError(reason => {\n      this.log(\"transport\", \"error\", reason)\n      if(primaryTransport && !established){\n        clearTimeout(this.fallbackTimer)\n        fallback(reason)\n      }\n    })\n    if(this.fallbackRef){\n      this.off([this.fallbackRef])\n    }\n    this.fallbackRef = this.onOpen(() => {\n      established = true\n      if(!primaryTransport){\n        let fallbackTransportName = this.transportName(fallbackTransport)\n        // only memorize LP if we never connected to primary\n        if(!this.primaryPassedHealthCheck){ this.storeSession(`phx:fallback:${fallbackTransportName}`, \"true\") }\n        return this.log(\"transport\", `established ${fallbackTransportName} fallback`)\n      }\n      // if we've established primary, give the fallback a new period to attempt ping\n      clearTimeout(this.fallbackTimer)\n      this.fallbackTimer = setTimeout(fallback, fallbackThreshold)\n      this.ping(rtt => {\n        this.log(\"transport\", \"connected to primary after\", rtt)\n        this.primaryPassedHealthCheck = true\n        clearTimeout(this.fallbackTimer)\n      })\n    })\n    this.transportConnect()\n  }\n\n  clearHeartbeats(){\n    clearTimeout(this.heartbeatTimer)\n    clearTimeout(this.heartbeatTimeoutTimer)\n  }\n\n  onConnOpen(){\n    if(this.hasLogger()) this.log(\"transport\", `connected to ${this.endPointURL()}`)\n    this.closeWasClean = false\n    this.disconnecting = false\n    this.establishedConnections++\n    this.flushSendBuffer()\n    this.reconnectTimer.reset()\n    if(this.autoSendHeartbeat){\n      this.resetHeartbeat()\n    }\n    this.triggerStateCallbacks(\"open\")\n  }\n\n  /**\n   * @private\n   */\n\n  heartbeatTimeout(){\n    if(this.pendingHeartbeatRef){\n      this.pendingHeartbeatRef = null\n      this.heartbeatSentAt = null\n      if(this.hasLogger()){ this.log(\"transport\", \"heartbeat timeout. Attempting to re-establish connection\") }\n      try {\n        this.heartbeatCallback(\"timeout\")\n      } catch (e){\n        this.log(\"error\", \"error in heartbeat callback\", e)\n      }\n      this.triggerChanError(new Error(\"heartbeat timeout\"))\n      this.closeWasClean = false\n      this.teardown(() => this.reconnectTimer.scheduleTimeout(), WS_CLOSE_NORMAL, \"heartbeat timeout\")\n    }\n  }\n\n  resetHeartbeat(){\n    if(this.conn && this.conn.skipHeartbeat){ return }\n    this.pendingHeartbeatRef = null\n    this.clearHeartbeats()\n    this.heartbeatTimer = setTimeout(() => this.sendHeartbeat(), this.heartbeatIntervalMs)\n  }\n\n  teardown(callback, code, reason){\n    if(!this.conn){\n      return callback && callback()\n    }\n\n    // If someone calls connect before we finish tearing down,\n    // we create a new connection, but we still want to finish tearing down the old one.\n    const connToClose = this.conn\n\n    this.waitForBufferDone(connToClose, () => {\n      if(code){ connToClose.close(code, reason || \"\") } else { connToClose.close() }\n\n      this.waitForSocketClosed(connToClose, () => {\n        if(this.conn === connToClose){\n          this.conn.onopen = function (){ } // noop\n          this.conn.onerror = function (){ } // noop\n          this.conn.onmessage = function (){ } // noop\n          this.conn.onclose = function (){ } // noop\n          this.conn = null\n        }\n\n        callback && callback()\n      })\n    })\n  }\n\n  waitForBufferDone(conn, callback, tries = 1){\n    if(tries === 5 || !conn.bufferedAmount){\n      callback()\n      return\n    }\n\n    setTimeout(() => {\n      this.waitForBufferDone(conn, callback, tries + 1)\n    }, 150 * tries)\n  }\n\n  waitForSocketClosed(conn, callback, tries = 1){\n    if(tries === 5 || conn.readyState === SOCKET_STATES.closed){\n      callback()\n      return\n    }\n\n    setTimeout(() => {\n      this.waitForSocketClosed(conn, callback, tries + 1)\n    }, 150 * tries)\n  }\n\n  /**\n  * @param {CloseEvent} event\n  */\n  onConnClose(event){\n    if(this.conn) this.conn.onclose = () => {} // noop to prevent recursive calls in teardown\n    if(this.hasLogger()) this.log(\"transport\", \"close\", event)\n    this.triggerChanError(event)\n    this.clearHeartbeats()\n    if(!this.closeWasClean){\n      this.reconnectTimer.scheduleTimeout()\n    }\n    this.triggerStateCallbacks(\"close\", event)\n  }\n\n  /**\n   * @private\n   * @param {Event} error\n   */\n  onConnError(error){\n    if(this.hasLogger()) this.log(\"transport\", \"error\", error)\n    let transportBefore = this.transport\n    let establishedBefore = this.establishedConnections\n    this.triggerStateCallbacks(\"error\", error, transportBefore, establishedBefore)\n    if(transportBefore === this.transport || establishedBefore > 0){\n      this.triggerChanError(error)\n    }\n  }\n\n  /**\n   * @private\n   * @param {unknown} [reason] underlying close/error event forwarded to channel error listeners\n   */\n  triggerChanError(reason){\n    this.channels.forEach(channel => {\n      if(!(channel.isErrored() || channel.isLeaving() || channel.isClosed())){\n        channel.trigger(CHANNEL_EVENTS.error, reason)\n      }\n    })\n  }\n\n  /**\n   * @returns {string}\n   */\n  connectionState(){\n    switch(this.conn && this.conn.readyState){\n      case SOCKET_STATES.connecting: return \"connecting\"\n      case SOCKET_STATES.open: return \"open\"\n      case SOCKET_STATES.closing: return \"closing\"\n      default: return \"closed\"\n    }\n  }\n\n  /**\n   * @returns {boolean}\n   */\n  isConnected(){ return this.connectionState() === \"open\" }\n\n  /**\n   *\n   * @param {Channel} channel\n   */\n  remove(channel){\n    this.off(channel.stateChangeRefs)\n    this.channels = this.channels.filter(c => c !== channel)\n  }\n\n  /**\n   * Removes `onOpen`, `onClose`, `onError,` and `onMessage` registrations.\n   *\n   * @param {string[]} refs - list of refs returned by calls to\n   *                 `onOpen`, `onClose`, `onError,` and `onMessage`\n   */\n  off(refs){\n    for(let key in this.stateChangeCallbacks){\n      this.stateChangeCallbacks[key] = this.stateChangeCallbacks[key].filter(([ref]) => {\n        return refs.indexOf(ref) === -1\n      })\n    }\n  }\n\n  /**\n   * Initiates a new channel for the given topic\n   *\n   * @param {string} topic\n   * @param {Params | (() => Params)} [chanParams]- Parameters for the channel\n   * @returns {Channel}\n   */\n  channel(topic, chanParams = {}){\n    let chan = new Channel(topic, chanParams, this)\n    this.channels.push(chan)\n    return chan\n  }\n\n  /**\n   * @param {Message<Record<string, any>>} data\n   */\n  push(data){\n    if(this.hasLogger()){\n      let {topic, event, payload, ref, join_ref} = data\n      this.log(\"push\", `${topic} ${event} (${join_ref}, ${ref})`, payload)\n    }\n\n    if(this.isConnected()){\n      this.encode(data, result => this.conn.send(result))\n    } else {\n      this.sendBuffer.push(() => this.encode(data, result => this.conn.send(result)))\n    }\n  }\n\n  /**\n   * Return the next message ref, accounting for overflows\n   * @returns {string}\n   */\n  makeRef(){\n    let newRef = this.ref + 1\n    if(newRef === this.ref){ this.ref = 0 } else { this.ref = newRef }\n\n    return this.ref.toString()\n  }\n\n  sendHeartbeat(){\n    if(!this.isConnected()){\n      try {\n        this.heartbeatCallback(\"disconnected\")\n      } catch (e){\n        this.log(\"error\", \"error in heartbeat callback\", e)\n      }\n      return\n    }\n    if(this.pendingHeartbeatRef){\n      this.heartbeatTimeout()\n      return\n    }\n    this.pendingHeartbeatRef = this.makeRef()\n    this.heartbeatSentAt = Date.now()\n    this.push({topic: \"phoenix\", event: \"heartbeat\", payload: {}, ref: this.pendingHeartbeatRef})\n    try {\n      this.heartbeatCallback(\"sent\")\n    } catch (e){\n      this.log(\"error\", \"error in heartbeat callback\", e)\n    }\n    this.heartbeatTimeoutTimer = setTimeout(() => this.heartbeatTimeout(), this.heartbeatIntervalMs)\n  }\n\n  flushSendBuffer(){\n    if(this.isConnected() && this.sendBuffer.length > 0){\n      this.sendBuffer.forEach(callback => callback())\n      this.sendBuffer = []\n    }\n  }\n\n  /**\n  * @param {MessageEvent<any>} rawMessage\n  */\n  onConnMessage(rawMessage){\n    this.decode(rawMessage.data, msg => {\n      let {topic, event, payload, ref, join_ref} = msg\n      if(ref && ref === this.pendingHeartbeatRef){\n        const latency = this.heartbeatSentAt ? Date.now() - this.heartbeatSentAt : undefined\n        this.clearHeartbeats()\n        try {\n          this.heartbeatCallback(payload.status === \"ok\" ? \"ok\" : \"error\", latency)\n        } catch (e){\n          this.log(\"error\", \"error in heartbeat callback\", e)\n        }\n        this.pendingHeartbeatRef = null\n        this.heartbeatSentAt = null\n        if(this.autoSendHeartbeat){\n          this.heartbeatTimer = setTimeout(() => this.sendHeartbeat(), this.heartbeatIntervalMs)\n        }\n      }\n\n      if(this.hasLogger()) this.log(\"receive\", `${payload.status || \"\"} ${topic} ${event} ${ref && \"(\" + ref + \")\" || \"\"}`.trim(), payload)\n\n      for(let i = 0; i < this.channels.length; i++){\n        const channel = this.channels[i]\n        if(!channel.isMember(topic, event, payload, join_ref)){ continue }\n        channel.trigger(event, payload, ref, join_ref)\n      }\n\n      this.triggerStateCallbacks(\"message\", msg)\n    })\n  }\n\n  /**\n   * @private\n   * @template {keyof SocketStateChangeCallbacks} K\n   * @param {K} event\n   * @param {...Parameters<SocketStateChangeCallbacks[K][number][1]>} args\n   * @returns {void}\n   */\n  triggerStateCallbacks(event, ...args){\n    try {\n      this.stateChangeCallbacks[event].forEach(([_, callback]) => {\n        try {\n          callback(...args)\n        } catch (e){\n          this.log(\"error\", `error in ${event} callback`, e)\n        }\n      })\n    } catch (e){\n      this.log(\"error\", `error triggering ${event} callbacks`, e)\n    }\n  }\n\n  leaveOpenTopic(topic){\n    let dupChannel = this.channels.find(c => c.topic === topic && (c.isJoined() || c.isJoining()))\n    if(dupChannel){\n      if(this.hasLogger()) this.log(\"transport\", `leaving duplicate topic \"${topic}\"`)\n      dupChannel.leave()\n    }\n  }\n}\n", "import { Presence } from '@supabase/phoenix'\nimport type { PresenceState, PresenceStates } from './types'\nimport type {\n  RealtimePresenceOptions,\n  RealtimePresenceState,\n  Presence as RealtimePresenceType,\n} from '../RealtimePresence'\nimport ChannelAdapter from './channelAdapter'\n\nexport default class PresenceAdapter {\n  private presence: Presence\n\n  constructor(channel: ChannelAdapter, opts?: RealtimePresenceOptions) {\n    const phoenixOptions = phoenixPresenceOptions(opts)\n    this.presence = new Presence(channel.getChannel(), phoenixOptions)\n\n    this.presence.onJoin((key, currentPresence, newPresence) => {\n      const onJoinPayload = PresenceAdapter.onJoinPayload(key, currentPresence, newPresence)\n      channel.getChannel().trigger('presence', onJoinPayload)\n    })\n\n    this.presence.onLeave((key, currentPresence, leftPresence) => {\n      const onLeavePayload = PresenceAdapter.onLeavePayload(key, currentPresence, leftPresence)\n      channel.getChannel().trigger('presence', onLeavePayload)\n    })\n\n    this.presence.onSync(() => {\n      channel.getChannel().trigger('presence', { event: 'sync' })\n    })\n  }\n\n  get state() {\n    return PresenceAdapter.transformState(this.presence.state)\n  }\n\n  /**\n   * @private\n   * Remove 'metas' key\n   * Change 'phx_ref' to 'presence_ref'\n   * Remove 'phx_ref' and 'phx_ref_prev'\n   *\n   * @example Transform state\n   * // returns {\n   *  abc123: [\n   *    { presence_ref: '2', user_id: 1 },\n   *    { presence_ref: '3', user_id: 2 }\n   *  ]\n   * }\n   * RealtimePresence.transformState({\n   *  abc123: {\n   *    metas: [\n   *      { phx_ref: '2', phx_ref_prev: '1' user_id: 1 },\n   *      { phx_ref: '3', user_id: 2 }\n   *    ]\n   *  }\n   * })\n   *\n   */\n  static transformState(state: PresenceStates): RealtimePresenceState {\n    state = cloneState(state)\n\n    return Object.getOwnPropertyNames(state).reduce((newState, key) => {\n      const presences = state[key]\n      newState[key] = transformState(presences)\n\n      return newState\n    }, {} as RealtimePresenceState)\n  }\n\n  static onJoinPayload(key: string, currentPresence: PresenceState, newPresence: PresenceState) {\n    const currentPresences = parseCurrentPresences(currentPresence)\n    const newPresences = transformState(newPresence)\n\n    return {\n      event: 'join',\n      key,\n      currentPresences,\n      newPresences,\n    }\n  }\n\n  static onLeavePayload(key: string, currentPresence: PresenceState, leftPresence: PresenceState) {\n    const currentPresences = parseCurrentPresences(currentPresence)\n    const leftPresences = transformState(leftPresence)\n\n    return {\n      event: 'leave',\n      key,\n      currentPresences,\n      leftPresences,\n    }\n  }\n}\n\nfunction transformState(presences: PresenceState) {\n  return presences.metas.map((presence) => {\n    presence['presence_ref'] = presence['phx_ref']\n\n    delete presence['phx_ref']\n    delete presence['phx_ref_prev']\n\n    return presence\n  }) as RealtimePresenceType[]\n}\n\nfunction cloneState(state: PresenceStates): PresenceStates {\n  return JSON.parse(JSON.stringify(state))\n}\n\nfunction phoenixPresenceOptions(opts?: RealtimePresenceOptions) {\n  return opts?.events && { events: opts.events }\n}\n\nfunction parseCurrentPresences(currentPresences?: PresenceState) {\n  return currentPresences?.metas ? transformState(currentPresences) : []\n}\n", "/*\n  This file draws heavily from https://github.com/phoenixframework/phoenix/blob/d344ec0a732ab4ee204215b31de69cf4be72e3bf/assets/js/phoenix/presence.js\n  License: https://github.com/phoenixframework/phoenix/blob/d344ec0a732ab4ee204215b31de69cf4be72e3bf/LICENSE.md\n*/\n\nimport type RealtimeChannel from './RealtimeChannel'\nimport PresenceAdapter from './phoenix/presenceAdapter'\n\nexport type Presence<T extends { [key: string]: any } = {}> = {\n  presence_ref: string\n} & T\n\nexport type RealtimePresenceState<T extends { [key: string]: any } = {}> = {\n  [key: string]: Presence<T>[]\n}\n\nexport type RealtimePresenceJoinPayload<T extends { [key: string]: any }> = {\n  event: `${REALTIME_PRESENCE_LISTEN_EVENTS.JOIN}`\n  key: string\n  currentPresences: Presence<T>[]\n  newPresences: Presence<T>[]\n}\n\nexport type RealtimePresenceLeavePayload<T extends { [key: string]: any }> = {\n  event: `${REALTIME_PRESENCE_LISTEN_EVENTS.LEAVE}`\n  key: string\n  currentPresences: Presence<T>[]\n  leftPresences: Presence<T>[]\n}\n\nexport enum REALTIME_PRESENCE_LISTEN_EVENTS {\n  SYNC = 'sync',\n  JOIN = 'join',\n  LEAVE = 'leave',\n}\n\nexport type RealtimePresenceOptions = {\n  events?: { state: string; diff: string }\n}\n\nexport default class RealtimePresence {\n  get state() {\n    return this.presenceAdapter.state\n  }\n\n  private presenceAdapter: PresenceAdapter\n\n  /**\n   * Creates a Presence helper that keeps the local presence state in sync with the server.\n   *\n   * @param channel - The realtime channel to bind to.\n   * @param opts - Optional custom event names, e.g. `{ events: { state: 'state', diff: 'diff' } }`.\n   *\n   * @category Realtime\n   *\n   * @example Example for a presence channel\n   * ```ts\n   * const presence = new RealtimePresence(channel)\n   *\n   * channel.on('presence', ({ event, key }) => {\n   *   console.log(`Presence ${event} on ${key}`)\n   * })\n   * ```\n   */\n  constructor(\n    public channel: RealtimeChannel,\n    opts?: RealtimePresenceOptions\n  ) {\n    this.presenceAdapter = new PresenceAdapter(this.channel.channelAdapter, opts)\n  }\n}\n", "/**\n * Normalize the various shapes a channel error reason can take into a real `Error`.\n *\n * Transport-level channel errors arrive as a `CloseEvent`, a transport `Event`, an `Error`,\n * a string, or `undefined` depending on which path in the underlying socket fired. Server-reply\n * errors arrive as a payload object. This helper produces a consistent `Error` for every case\n * and preserves the original via `cause` so callers can still inspect the raw event.\n */\nexport function normalizeChannelError(reason: unknown): Error {\n  if (reason instanceof Error) {\n    return reason\n  }\n\n  if (typeof reason === 'string') {\n    return new Error(reason)\n  }\n\n  if (reason && typeof reason === 'object') {\n    const obj = reason as Record<string, unknown>\n\n    if (typeof obj.code === 'number') {\n      const detail = typeof obj.reason === 'string' && obj.reason ? ` (${obj.reason})` : ''\n      return new Error(`socket closed: ${obj.code}${detail}`, { cause: reason })\n    }\n\n    return new Error('channel error: transport failure', { cause: reason })\n  }\n\n  return new Error('channel error: connection lost')\n}\n", "import { Channel } from '@supabase/phoenix'\nimport { CHANNEL_STATES, MAX_PUSH_BUFFER_SIZE } from '../lib/constants'\nimport type { RealtimeChannelOptions } from '../RealtimeChannel'\nimport SocketAdapter from './socketAdapter'\nimport type {\n  ChannelBindingCallback,\n  ChannelOnMessage,\n  ChannelOnErrorCallback,\n  ChannelFilterBindings,\n  Params,\n  ChannelState,\n  Push,\n  Timer,\n} from './types'\n\nexport default class ChannelAdapter {\n  private channel: Channel\n  private socket: SocketAdapter\n\n  constructor(socket: SocketAdapter, topic: string, params: RealtimeChannelOptions) {\n    const phoenixParams = phoenixChannelParams(params)\n    this.channel = socket.getSocket().channel(topic, phoenixParams)\n    this.socket = socket\n  }\n\n  get state(): ChannelState {\n    return this.channel.state\n  }\n\n  set state(state: ChannelState) {\n    this.channel.state = state\n  }\n\n  get joinedOnce(): boolean {\n    return this.channel.joinedOnce\n  }\n\n  get joinPush(): Push {\n    return this.channel.joinPush\n  }\n\n  get rejoinTimer(): Timer {\n    return this.channel.rejoinTimer\n  }\n\n  on(event: string, callback: ChannelBindingCallback): number {\n    return this.channel.on(event, callback)\n  }\n\n  off(event: string, refNumber?: number) {\n    this.channel.off(event, refNumber)\n  }\n\n  subscribe(timeout?: number): Push {\n    return this.channel.join(timeout)\n  }\n\n  unsubscribe(timeout?: number): Push {\n    return this.channel.leave(timeout)\n  }\n\n  teardown() {\n    this.channel.teardown()\n  }\n\n  onClose(callback: ChannelBindingCallback) {\n    this.channel.onClose(callback)\n  }\n\n  onError(callback: ChannelOnErrorCallback): number {\n    return this.channel.onError(callback)\n  }\n\n  push(event: string, payload: { [key: string]: any }, timeout?: number): Push {\n    let push: Push\n\n    try {\n      push = this.channel.push(event, payload, timeout)\n    } catch (error) {\n      throw new Error(\n        `tried to push '${event}' to '${this.channel.topic}' before joining. Use channel.subscribe() before pushing events`\n      )\n    }\n\n    if (this.channel.pushBuffer.length > MAX_PUSH_BUFFER_SIZE) {\n      const removedPush = this.channel.pushBuffer.shift()!\n      removedPush.cancelTimeout()\n      this.socket.log(\n        'channel',\n        `discarded push due to buffer overflow: ${removedPush.event}`,\n        removedPush.payload()\n      )\n    }\n    return push\n  }\n\n  updateJoinPayload(payload: Record<string, any>) {\n    const oldPayload = this.channel.joinPush.payload()\n    this.channel.joinPush.payload = () => ({ ...oldPayload, ...payload })\n  }\n\n  canPush() {\n    return this.socket.isConnected() && this.state === CHANNEL_STATES.joined\n  }\n\n  isJoined() {\n    return this.state === CHANNEL_STATES.joined\n  }\n\n  isJoining() {\n    return this.state === CHANNEL_STATES.joining\n  }\n\n  isClosed() {\n    return this.state === CHANNEL_STATES.closed\n  }\n\n  isLeaving() {\n    return this.state === CHANNEL_STATES.leaving\n  }\n\n  updateFilterBindings(filterBindings: ChannelFilterBindings) {\n    this.channel.filterBindings = filterBindings\n  }\n\n  updatePayloadTransform(callback: ChannelOnMessage) {\n    this.channel.onMessage = callback\n  }\n\n  /**\n   * @internal\n   */\n  getChannel() {\n    return this.channel\n  }\n}\n\nfunction phoenixChannelParams(options: RealtimeChannelOptions): Params {\n  return {\n    config: {\n      ...{\n        broadcast: { ack: false, self: false },\n        presence: { key: '', enabled: false },\n        private: false,\n      },\n      ...options.config,\n    },\n  }\n}\n", "import { CHANNEL_EVENTS, CHANNEL_STATES } from './lib/constants'\nimport type { ChannelState } from './lib/constants'\nimport type RealtimeClient from './RealtimeClient'\nimport RealtimePresence, { REALTIME_PRESENCE_LISTEN_EVENTS } from './RealtimePresence'\nimport type {\n  RealtimePresenceJoinPayload,\n  RealtimePresenceLeavePayload,\n  RealtimePresenceState,\n} from './RealtimePresence'\nimport * as Transformers from './lib/transformers'\nimport { httpEndpointURL } from './lib/transformers'\nimport { normalizeChannelError } from './lib/normalizeChannelError'\nimport ChannelAdapter from './phoenix/channelAdapter'\nimport { ChannelBindingCallback, ChannelOnErrorCallback } from './phoenix/types'\nimport type { Timer } from './phoenix/types'\n\ntype ReplayOption = {\n  since: number\n  limit?: number\n}\n\nexport type RealtimeChannelOptions = {\n  config: {\n    /**\n     * self option enables client to receive message it broadcast\n     * ack option instructs server to acknowledge that broadcast message was received\n     * replay option instructs server to replay broadcast messages\n     */\n    broadcast?: { self?: boolean; ack?: boolean; replay?: ReplayOption }\n    /**\n     * key option is used to track presence payload across clients\n     */\n    presence?: { key?: string; enabled?: boolean }\n    /**\n     * defines if the channel is private or not and if RLS policies will be used to check data\n     */\n    private?: boolean\n  }\n}\n\ntype RealtimeChangesPayloadBase = {\n  schema: string\n  table: string\n}\n\ntype RealtimeBroadcastChangesPayloadBase = RealtimeChangesPayloadBase & {\n  id: string\n}\n\nexport type RealtimeBroadcastInsertPayload<T extends { [key: string]: any }> =\n  RealtimeBroadcastChangesPayloadBase & {\n    operation: `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT}`\n    record: T\n    old_record: null\n  }\n\nexport type RealtimeBroadcastUpdatePayload<T extends { [key: string]: any }> =\n  RealtimeBroadcastChangesPayloadBase & {\n    operation: `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE}`\n    record: T\n    old_record: T\n  }\n\nexport type RealtimeBroadcastDeletePayload<T extends { [key: string]: any }> =\n  RealtimeBroadcastChangesPayloadBase & {\n    operation: `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE}`\n    record: null\n    old_record: T\n  }\n\nexport type RealtimeBroadcastPayload<T extends { [key: string]: any }> =\n  | RealtimeBroadcastInsertPayload<T>\n  | RealtimeBroadcastUpdatePayload<T>\n  | RealtimeBroadcastDeletePayload<T>\n\ntype RealtimePostgresChangesPayloadBase = {\n  schema: string\n  table: string\n  commit_timestamp: string\n  errors: string[]\n}\n\nexport type RealtimePostgresInsertPayload<T extends { [key: string]: any }> =\n  RealtimePostgresChangesPayloadBase & {\n    eventType: `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT}`\n    new: T\n    old: {}\n  }\n\nexport type RealtimePostgresUpdatePayload<T extends { [key: string]: any }> =\n  RealtimePostgresChangesPayloadBase & {\n    eventType: `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE}`\n    new: T\n    old: Partial<T>\n  }\n\nexport type RealtimePostgresDeletePayload<T extends { [key: string]: any }> =\n  RealtimePostgresChangesPayloadBase & {\n    eventType: `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE}`\n    new: {}\n    old: Partial<T>\n  }\n\nexport type RealtimePostgresChangesPayload<T extends { [key: string]: any }> =\n  | RealtimePostgresInsertPayload<T>\n  | RealtimePostgresUpdatePayload<T>\n  | RealtimePostgresDeletePayload<T>\n\nexport type RealtimePostgresChangesFilter<T extends `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT}`> = {\n  /**\n   * The type of database change to listen to.\n   */\n  event: T\n  /**\n   * The database schema to listen to.\n   */\n  schema: string\n  /**\n   * The database table to listen to.\n   */\n  table?: string\n  /**\n   * Receive database changes when filter is matched.\n   */\n  filter?: string\n}\n\nexport type RealtimeChannelSendResponse = 'ok' | 'timed out' | 'error' | (string & {})\n\nexport enum REALTIME_POSTGRES_CHANGES_LISTEN_EVENT {\n  ALL = '*',\n  INSERT = 'INSERT',\n  UPDATE = 'UPDATE',\n  DELETE = 'DELETE',\n}\n\nexport enum REALTIME_LISTEN_TYPES {\n  BROADCAST = 'broadcast',\n  PRESENCE = 'presence',\n  POSTGRES_CHANGES = 'postgres_changes',\n  SYSTEM = 'system',\n}\n\nexport enum REALTIME_SUBSCRIBE_STATES {\n  SUBSCRIBED = 'SUBSCRIBED',\n  TIMED_OUT = 'TIMED_OUT',\n  CLOSED = 'CLOSED',\n  CHANNEL_ERROR = 'CHANNEL_ERROR',\n}\n\nexport const REALTIME_CHANNEL_STATES = CHANNEL_STATES\n\ntype PostgresChangesFilters = {\n  postgres_changes: {\n    id: string\n    event: string\n    schema?: string\n    table?: string\n    filter?: string\n  }[]\n}\n\ntype Binding = {\n  type: string\n  filter: { [key: string]: any }\n  callback: ChannelBindingCallback\n  ref: number\n  id?: string\n}\n\n/** A channel is the basic building block of Realtime\n * and narrows the scope of data flow to subscribed clients.\n * You can think of a channel as a chatroom where participants are able to see who's online\n * and send and receive messages.\n */\nexport default class RealtimeChannel {\n  bindings: Record<string, Binding[]> = {}\n  subTopic: string\n  broadcastEndpointURL: string\n  private: boolean\n  presence: RealtimePresence\n  /** @internal */\n  channelAdapter: ChannelAdapter\n\n  get state() {\n    return this.channelAdapter.state\n  }\n\n  set state(state: ChannelState) {\n    this.channelAdapter.state = state\n  }\n\n  get joinedOnce() {\n    return this.channelAdapter.joinedOnce\n  }\n\n  get timeout() {\n    return this.socket.timeout\n  }\n\n  get joinPush() {\n    return this.channelAdapter.joinPush\n  }\n\n  get rejoinTimer(): Timer {\n    return this.channelAdapter.rejoinTimer\n  }\n\n  /**\n   * Creates a channel that can broadcast messages, sync presence, and listen to Postgres changes.\n   *\n   * The topic determines which realtime stream you are subscribing to. Config options let you\n   * enable acknowledgement for broadcasts, presence tracking, or private channels.\n   *\n   * @category Realtime\n   *\n   * @example Using supabase-js (recommended)\n   * ```ts\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n   * const channel = supabase.channel('room1')\n   * channel\n   *   .on('broadcast', { event: 'cursor-pos' }, (payload) => console.log(payload))\n   *   .subscribe()\n   * ```\n   *\n   * @example Standalone import for bundle-sensitive environments\n   * ```ts\n   * import RealtimeClient from '@supabase/realtime-js'\n   *\n   * const client = new RealtimeClient('https://xyzcompany.supabase.co/realtime/v1', {\n   *   params: { apikey: 'your-publishable-key' },\n   * })\n   * const channel = new RealtimeChannel('realtime:public:messages', { config: {} }, client)\n   * ```\n   */\n  constructor(\n    /** Topic name can be any string. */\n    public topic: string,\n    public params: RealtimeChannelOptions = { config: {} },\n    public socket: RealtimeClient\n  ) {\n    this.subTopic = topic.replace(/^realtime:/i, '')\n    this.params.config = {\n      ...{\n        broadcast: { ack: false, self: false },\n        presence: { key: '', enabled: false },\n        private: false,\n      },\n      ...params.config,\n    }\n\n    this.channelAdapter = new ChannelAdapter(this.socket.socketAdapter, topic, this.params)\n    this.presence = new RealtimePresence(this)\n\n    this._onClose(() => {\n      this.socket._remove(this)\n    })\n\n    this._updateFilterTransform()\n\n    this.broadcastEndpointURL = httpEndpointURL(this.socket.socketAdapter.endPointURL())\n    this.private = this.params.config.private || false\n\n    if (!this.private && this.params.config?.broadcast?.replay) {\n      throw new Error(\n        `tried to use replay on public channel '${this.topic}'. It must be a private channel.`\n      )\n    }\n  }\n\n  /**\n   * Subscribe registers your client with the server\n   * @category Realtime\n   */\n  subscribe(\n    callback?: (status: REALTIME_SUBSCRIBE_STATES, err?: Error) => void,\n    timeout = this.timeout\n  ): RealtimeChannel {\n    if (!this.socket.isConnected()) {\n      this.socket.connect()\n    }\n    if (this.channelAdapter.isClosed()) {\n      const {\n        config: { broadcast, presence, private: isPrivate },\n      } = this.params\n\n      const postgres_changes = this.bindings.postgres_changes?.map((r) => r.filter) ?? []\n\n      const presence_enabled =\n        (!!this.bindings[REALTIME_LISTEN_TYPES.PRESENCE] &&\n          this.bindings[REALTIME_LISTEN_TYPES.PRESENCE].length > 0) ||\n        this.params.config.presence?.enabled === true\n      const accessTokenPayload: { access_token?: string } = {}\n      const config = {\n        broadcast,\n        presence: { ...presence, enabled: presence_enabled },\n        postgres_changes,\n        private: isPrivate,\n      }\n\n      if (this.socket.accessTokenValue) {\n        accessTokenPayload.access_token = this.socket.accessTokenValue\n      }\n\n      this._onError((reason: unknown) => {\n        callback?.(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, normalizeChannelError(reason))\n      })\n\n      this._onClose(() => callback?.(REALTIME_SUBSCRIBE_STATES.CLOSED))\n\n      this.updateJoinPayload({ ...{ config }, ...accessTokenPayload })\n\n      this._updateFilterMessage()\n\n      this.channelAdapter\n        .subscribe(timeout)\n        .receive('ok', async ({ postgres_changes }: PostgresChangesFilters) => {\n          // Only refresh auth if using callback-based tokens\n          if (!this.socket._isManualToken()) {\n            this.socket.setAuth()\n          }\n          if (postgres_changes === undefined) {\n            callback?.(REALTIME_SUBSCRIBE_STATES.SUBSCRIBED)\n            return\n          }\n\n          this._updatePostgresBindings(postgres_changes, callback)\n        })\n        .receive('error', (error: { [key: string]: any }) => {\n          this.state = CHANNEL_STATES.errored\n          const message = Object.values(error).join(', ') || 'error'\n          callback?.(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, new Error(message, { cause: error }))\n        })\n        .receive('timeout', () => {\n          callback?.(REALTIME_SUBSCRIBE_STATES.TIMED_OUT)\n        })\n    }\n    return this\n  }\n\n  private _updatePostgresBindings(\n    postgres_changes: PostgresChangesFilters['postgres_changes'],\n    callback?: (status: REALTIME_SUBSCRIBE_STATES, err?: Error) => void\n  ) {\n    const clientPostgresBindings = this.bindings.postgres_changes\n    const bindingsLen = clientPostgresBindings?.length ?? 0\n    const newPostgresBindings = []\n\n    for (let i = 0; i < bindingsLen; i++) {\n      const clientPostgresBinding = clientPostgresBindings[i]\n      const {\n        filter: { event, schema, table, filter },\n      } = clientPostgresBinding\n      const serverPostgresFilter = postgres_changes && postgres_changes[i]\n\n      if (\n        serverPostgresFilter &&\n        serverPostgresFilter.event === event &&\n        RealtimeChannel.isFilterValueEqual(serverPostgresFilter.schema, schema) &&\n        RealtimeChannel.isFilterValueEqual(serverPostgresFilter.table, table) &&\n        RealtimeChannel.isFilterValueEqual(serverPostgresFilter.filter, filter)\n      ) {\n        newPostgresBindings.push({\n          ...clientPostgresBinding,\n          id: serverPostgresFilter.id,\n        })\n      } else {\n        this.unsubscribe()\n        this.state = CHANNEL_STATES.errored\n\n        callback?.(\n          REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR,\n          new Error('mismatch between server and client bindings for postgres changes')\n        )\n        return\n      }\n    }\n\n    this.bindings.postgres_changes = newPostgresBindings\n\n    if (this.state != CHANNEL_STATES.errored && callback) {\n      callback(REALTIME_SUBSCRIBE_STATES.SUBSCRIBED)\n    }\n  }\n\n  /**\n   * Returns the current presence state for this channel.\n   *\n   * The shape is a map keyed by presence key (for example a user id) where each entry contains the\n   * tracked metadata for that user.\n   *\n   * @category Realtime\n   */\n  presenceState<T extends { [key: string]: any } = {}>(): RealtimePresenceState<T> {\n    return this.presence.state as RealtimePresenceState<T>\n  }\n\n  /**\n   * Sends the supplied payload to the presence tracker so other subscribers can see that this\n   * client is online. Use `untrack` to stop broadcasting presence for the same key.\n   *\n   * @category Realtime\n   */\n  async track(\n    payload: { [key: string]: any },\n    opts: { [key: string]: any } = {}\n  ): Promise<RealtimeChannelSendResponse> {\n    return await this.send(\n      {\n        type: 'presence',\n        event: 'track',\n        payload,\n      },\n      opts.timeout || this.timeout\n    )\n  }\n\n  /**\n   * Removes the current presence state for this client.\n   *\n   * @category Realtime\n   */\n  async untrack(opts: { [key: string]: any } = {}): Promise<RealtimeChannelSendResponse> {\n    return await this.send(\n      {\n        type: 'presence',\n        event: 'untrack',\n      },\n      opts\n    )\n  }\n\n  /**\n   * Creates an event handler that listens to changes.\n   */\n  on(\n    type: `${REALTIME_LISTEN_TYPES.PRESENCE}`,\n    filter: { event: `${REALTIME_PRESENCE_LISTEN_EVENTS.SYNC}` },\n    callback: () => void\n  ): RealtimeChannel\n  on<T extends { [key: string]: any }>(\n    type: `${REALTIME_LISTEN_TYPES.PRESENCE}`,\n    filter: { event: `${REALTIME_PRESENCE_LISTEN_EVENTS.JOIN}` },\n    callback: (payload: RealtimePresenceJoinPayload<T>) => void\n  ): RealtimeChannel\n  on<T extends { [key: string]: any }>(\n    type: `${REALTIME_LISTEN_TYPES.PRESENCE}`,\n    filter: { event: `${REALTIME_PRESENCE_LISTEN_EVENTS.LEAVE}` },\n    callback: (payload: RealtimePresenceLeavePayload<T>) => void\n  ): RealtimeChannel\n  on<T extends { [key: string]: any }>(\n    type: `${REALTIME_LISTEN_TYPES.PRESENCE}`,\n    filter: { event: '*' },\n    callback: (payload?: RealtimePresenceJoinPayload<T> | RealtimePresenceLeavePayload<T>) => void\n  ): RealtimeChannel\n  on<T extends { [key: string]: any }>(\n    type: `${REALTIME_LISTEN_TYPES.POSTGRES_CHANGES}`,\n    filter: RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.ALL}`>,\n    callback: (payload: RealtimePostgresChangesPayload<T>) => void\n  ): RealtimeChannel\n  on<T extends { [key: string]: any }>(\n    type: `${REALTIME_LISTEN_TYPES.POSTGRES_CHANGES}`,\n    filter: RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT}`>,\n    callback: (payload: RealtimePostgresInsertPayload<T>) => void\n  ): RealtimeChannel\n  on<T extends { [key: string]: any }>(\n    type: `${REALTIME_LISTEN_TYPES.POSTGRES_CHANGES}`,\n    filter: RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE}`>,\n    callback: (payload: RealtimePostgresUpdatePayload<T>) => void\n  ): RealtimeChannel\n  on<T extends { [key: string]: any }>(\n    type: `${REALTIME_LISTEN_TYPES.POSTGRES_CHANGES}`,\n    filter: RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE}`>,\n    callback: (payload: RealtimePostgresDeletePayload<T>) => void\n  ): RealtimeChannel\n  on<T extends { [key: string]: any }>(\n    type: `${REALTIME_LISTEN_TYPES.POSTGRES_CHANGES}`,\n    filter: RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT}`>,\n    callback: (payload: RealtimePostgresChangesPayload<T>) => void\n  ): RealtimeChannel\n  /**\n   * The following is placed here to display on supabase.com/docs/reference/javascript/subscribe.\n   * @param type One of \"broadcast\", \"presence\", or \"postgres_changes\".\n   * @param filter Custom object specific to the Realtime feature detailing which payloads to receive.\n   * @param callback Function to be invoked when event handler is triggered.\n   */\n  on(\n    type: `${REALTIME_LISTEN_TYPES.BROADCAST}`,\n    filter: { event: string },\n    callback: (payload: {\n      type: `${REALTIME_LISTEN_TYPES.BROADCAST}`\n      event: string\n      meta?: {\n        replayed?: boolean\n        id: string\n      }\n      [key: string]: any\n    }) => void\n  ): RealtimeChannel\n  on<T extends { [key: string]: any }>(\n    type: `${REALTIME_LISTEN_TYPES.BROADCAST}`,\n    filter: { event: string },\n    callback: (payload: {\n      type: `${REALTIME_LISTEN_TYPES.BROADCAST}`\n      event: string\n      meta?: {\n        replayed?: boolean\n        id: string\n      }\n      payload: T\n    }) => void\n  ): RealtimeChannel\n  on<T extends Record<string, unknown>>(\n    type: `${REALTIME_LISTEN_TYPES.BROADCAST}`,\n    filter: { event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.ALL },\n    callback: (payload: {\n      type: `${REALTIME_LISTEN_TYPES.BROADCAST}`\n      event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.ALL\n      payload: RealtimeBroadcastPayload<T>\n    }) => void\n  ): RealtimeChannel\n  on<T extends { [key: string]: any }>(\n    type: `${REALTIME_LISTEN_TYPES.BROADCAST}`,\n    filter: { event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT },\n    callback: (payload: {\n      type: `${REALTIME_LISTEN_TYPES.BROADCAST}`\n      event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT\n      payload: RealtimeBroadcastInsertPayload<T>\n    }) => void\n  ): RealtimeChannel\n  on<T extends { [key: string]: any }>(\n    type: `${REALTIME_LISTEN_TYPES.BROADCAST}`,\n    filter: { event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE },\n    callback: (payload: {\n      type: `${REALTIME_LISTEN_TYPES.BROADCAST}`\n      event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE\n      payload: RealtimeBroadcastUpdatePayload<T>\n    }) => void\n  ): RealtimeChannel\n  on<T extends { [key: string]: any }>(\n    type: `${REALTIME_LISTEN_TYPES.BROADCAST}`,\n    filter: { event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE },\n    callback: (payload: {\n      type: `${REALTIME_LISTEN_TYPES.BROADCAST}`\n      event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE\n      payload: RealtimeBroadcastDeletePayload<T>\n    }) => void\n  ): RealtimeChannel\n  on<T extends { [key: string]: any }>(\n    type: `${REALTIME_LISTEN_TYPES.SYSTEM}`,\n    filter: {},\n    callback: (payload: any) => void\n  ): RealtimeChannel\n  /**\n   * Listen to realtime events on this channel.\n   * @category Realtime\n   *\n   * @remarks\n   * - By default, Broadcast and Presence are enabled for all projects.\n   * - By default, listening to database changes is disabled for new projects due to database performance and security concerns. You can turn it on by managing Realtime's [replication](/docs/guides/api#realtime-api-overview).\n   * - You can receive the \"previous\" data for updates and deletes by setting the table's `REPLICA IDENTITY` to `FULL` (e.g., `ALTER TABLE your_table REPLICA IDENTITY FULL;`).\n   * - Row level security is not applied to delete statements. When RLS is enabled and replica identity is set to full, only the primary key is sent to clients.\n   *\n   * @example Listen to broadcast messages\n   * ```js\n   * const channel = supabase.channel(\"room1\")\n   *\n   * channel.on(\"broadcast\", { event: \"cursor-pos\" }, (payload) => {\n   *   console.log(\"Cursor position received!\", payload);\n   * }).subscribe((status) => {\n   *   if (status === \"SUBSCRIBED\") {\n   *     channel.send({\n   *       type: \"broadcast\",\n   *       event: \"cursor-pos\",\n   *       payload: { x: Math.random(), y: Math.random() },\n   *     });\n   *   }\n   * });\n   * ```\n   *\n   * @example Listen to presence sync\n   * ```js\n   * const channel = supabase.channel('room1')\n   * channel\n   *   .on('presence', { event: 'sync' }, () => {\n   *     console.log('Synced presence state: ', channel.presenceState())\n   *   })\n   *   .subscribe(async (status) => {\n   *     if (status === 'SUBSCRIBED') {\n   *       await channel.track({ online_at: new Date().toISOString() })\n   *     }\n   *   })\n   * ```\n   *\n   * @example Listen to presence join\n   * ```js\n   * const channel = supabase.channel('room1')\n   * channel\n   *   .on('presence', { event: 'join' }, ({ newPresences }) => {\n   *     console.log('Newly joined presences: ', newPresences)\n   *   })\n   *   .subscribe(async (status) => {\n   *     if (status === 'SUBSCRIBED') {\n   *       await channel.track({ online_at: new Date().toISOString() })\n   *     }\n   *   })\n   * ```\n   *\n   * @example Listen to presence leave\n   * ```js\n   * const channel = supabase.channel('room1')\n   * channel\n   *   .on('presence', { event: 'leave' }, ({ leftPresences }) => {\n   *     console.log('Newly left presences: ', leftPresences)\n   *   })\n   *   .subscribe(async (status) => {\n   *     if (status === 'SUBSCRIBED') {\n   *       await channel.track({ online_at: new Date().toISOString() })\n   *       await channel.untrack()\n   *     }\n   *   })\n   * ```\n   *\n   * @example Listen to all database changes\n   * ```js\n   * supabase\n   *   .channel('room1')\n   *   .on('postgres_changes', { event: '*', schema: '*' }, payload => {\n   *     console.log('Change received!', payload)\n   *   })\n   *   .subscribe()\n   * ```\n   *\n   * @example Listen to a specific table\n   * ```js\n   * supabase\n   *   .channel('room1')\n   *   .on('postgres_changes', { event: '*', schema: 'public', table: 'countries' }, payload => {\n   *     console.log('Change received!', payload)\n   *   })\n   *   .subscribe()\n   * ```\n   *\n   * @example Listen to inserts\n   * ```js\n   * supabase\n   *   .channel('room1')\n   *   .on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'countries' }, payload => {\n   *     console.log('Change received!', payload)\n   *   })\n   *   .subscribe()\n   * ```\n   *\n   * @exampleDescription Listen to updates\n   * By default, Supabase will send only the updated record. If you want to receive the previous values as well you can\n   * enable full replication for the table you are listening to:\n   *\n   * ```sql\n   * alter table \"your_table\" replica identity full;\n   * ```\n   *\n   * @example Listen to updates\n   * ```js\n   * supabase\n   *   .channel('room1')\n   *   .on('postgres_changes', { event: 'UPDATE', schema: 'public', table: 'countries' }, payload => {\n   *     console.log('Change received!', payload)\n   *   })\n   *   .subscribe()\n   * ```\n   *\n   * @exampleDescription Listen to deletes\n   * By default, Supabase does not send deleted records. If you want to receive the deleted record you can\n   * enable full replication for the table you are listening to:\n   *\n   * ```sql\n   * alter table \"your_table\" replica identity full;\n   * ```\n   *\n   * @example Listen to deletes\n   * ```js\n   * supabase\n   *   .channel('room1')\n   *   .on('postgres_changes', { event: 'DELETE', schema: 'public', table: 'countries' }, payload => {\n   *     console.log('Change received!', payload)\n   *   })\n   *   .subscribe()\n   * ```\n   *\n   * @exampleDescription Listen to multiple events\n   * You can chain listeners if you want to listen to multiple events for each table.\n   *\n   * @example Listen to multiple events\n   * ```js\n   * supabase\n   *   .channel('room1')\n   *   .on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'countries' }, handleRecordInserted)\n   *   .on('postgres_changes', { event: 'DELETE', schema: 'public', table: 'countries' }, handleRecordDeleted)\n   *   .subscribe()\n   * ```\n   *\n   * @exampleDescription Listen to row level changes\n   * You can listen to individual rows using the format `{table}:{col}=eq.{val}` - where `{col}` is the column name, and `{val}` is the value which you want to match.\n   *\n   * @example Listen to row level changes\n   * ```js\n   * supabase\n   *   .channel('room1')\n   *   .on('postgres_changes', { event: 'UPDATE', schema: 'public', table: 'countries', filter: 'id=eq.200' }, handleRecordUpdated)\n   *   .subscribe()\n   * ```\n   */\n  on(\n    type: `${REALTIME_LISTEN_TYPES}`,\n    filter: { event: string; [key: string]: string },\n    callback: (payload: any) => void\n  ): RealtimeChannel {\n    const stateCheck = this.channelAdapter.isJoined() || this.channelAdapter.isJoining()\n    const typeCheck =\n      type === REALTIME_LISTEN_TYPES.PRESENCE || type === REALTIME_LISTEN_TYPES.POSTGRES_CHANGES\n\n    if (stateCheck && typeCheck) {\n      this.socket.log(\n        'channel',\n        `cannot add \\`${type}\\` callbacks for ${this.topic} after \\`subscribe()\\`.`\n      )\n      throw new Error(`cannot add \\`${type}\\` callbacks for ${this.topic} after \\`subscribe()\\`.`)\n    }\n    return this._on(type, filter, callback)\n  }\n  /**\n   * Sends a broadcast message explicitly via REST API.\n   *\n   * This method always uses the REST API endpoint regardless of WebSocket connection state.\n   * Useful when you want to guarantee REST delivery or when gradually migrating from implicit REST fallback.\n   *\n   * @param event The name of the broadcast event\n   * @param payload Payload to be sent (required)\n   * @param opts Options including timeout\n   * @returns Promise resolving to object with success status, and error details if failed\n   *\n   * @category Realtime\n   */\n  async httpSend(\n    event: string,\n    payload: any,\n    opts: { timeout?: number } = {}\n  ): Promise<{ success: true } | { success: false; status: number; error: string }> {\n    if (payload === undefined || payload === null) {\n      return Promise.reject(new Error('Payload is required for httpSend()'))\n    }\n\n    const headers: Record<string, string> = {\n      apikey: this.socket.apiKey ? this.socket.apiKey : '',\n      'Content-Type': 'application/json',\n    }\n\n    if (this.socket.accessTokenValue) {\n      headers['Authorization'] = `Bearer ${this.socket.accessTokenValue}`\n    }\n\n    const options = {\n      method: 'POST',\n      headers,\n      body: JSON.stringify({\n        messages: [\n          {\n            topic: this.subTopic,\n            event,\n            payload: payload,\n            private: this.private,\n          },\n        ],\n      }),\n    }\n\n    const response = await this._fetchWithTimeout(\n      this.broadcastEndpointURL,\n      options,\n      opts.timeout ?? this.timeout\n    )\n\n    if (response.status === 202) {\n      return { success: true }\n    }\n\n    let errorMessage = response.statusText\n    try {\n      const errorBody = await response.json()\n      errorMessage = errorBody.error || errorBody.message || errorMessage\n    } catch {}\n\n    return Promise.reject(new Error(errorMessage))\n  }\n\n  /**\n   * Sends a message into the channel.\n   *\n   * @param args Arguments to send to channel\n   * @param args.type The type of event to send\n   * @param args.event The name of the event being sent\n   * @param args.payload Payload to be sent\n   * @param opts Options to be used during the send process\n   *\n   * @category Realtime\n   *\n   * @remarks\n   * - When using REST you don't need to subscribe to the channel\n   * - REST calls are only available from 2.37.0 onwards\n   * - If you create a channel only to send a REST broadcast, remove it from\n   *   the client when the send completes\n   *\n   * @example Send a message via websocket\n   * ```js\n   * const channel = supabase.channel('room1')\n   *\n   * channel.subscribe((status) => {\n   *   if (status === 'SUBSCRIBED') {\n   *     channel.send({\n   *       type: 'broadcast',\n   *       event: 'cursor-pos',\n   *       payload: { x: Math.random(), y: Math.random() },\n   *     })\n   *   }\n   * })\n   * ```\n   *\n   * @exampleResponse Send a message via websocket\n   * ```js\n   * ok | timed out | error\n   * ```\n   *\n   * @example Send a message via REST\n   * ```js\n   * const channel = supabase.channel('room1')\n   *\n   * try {\n   *   await channel.httpSend('cursor-pos', { x: Math.random(), y: Math.random() })\n   * } finally {\n   *   await supabase.removeChannel(channel)\n   * }\n   * ```\n   */\n  async send(\n    args: {\n      type: 'broadcast' | 'presence' | 'postgres_changes'\n      event: string\n      payload?: any\n      [key: string]: any\n    },\n    opts: { [key: string]: any } = {}\n  ): Promise<RealtimeChannelSendResponse> {\n    if (!this.channelAdapter.canPush() && args.type === 'broadcast') {\n      console.warn(\n        'Realtime send() is automatically falling back to REST API. ' +\n          'This behavior will be deprecated in the future. ' +\n          'Please use httpSend() explicitly for REST delivery.'\n      )\n\n      const { event, payload: endpoint_payload } = args\n      const headers: Record<string, string> = {\n        apikey: this.socket.apiKey ? this.socket.apiKey : '',\n        'Content-Type': 'application/json',\n      }\n\n      if (this.socket.accessTokenValue) {\n        headers['Authorization'] = `Bearer ${this.socket.accessTokenValue}`\n      }\n\n      const options = {\n        method: 'POST',\n        headers,\n        body: JSON.stringify({\n          messages: [\n            {\n              topic: this.subTopic,\n              event,\n              payload: endpoint_payload,\n              private: this.private,\n            },\n          ],\n        }),\n      }\n\n      try {\n        const response = await this._fetchWithTimeout(\n          this.broadcastEndpointURL,\n          options,\n          opts.timeout ?? this.timeout\n        )\n\n        await response.body?.cancel()\n        return response.ok ? 'ok' : 'error'\n      } catch (error) {\n        if (error instanceof Error && error.name === 'AbortError') {\n          return 'timed out'\n        } else {\n          return 'error'\n        }\n      }\n    } else {\n      return new Promise((resolve) => {\n        const push = this.channelAdapter.push(args.type, args, opts.timeout || this.timeout)\n\n        if (args.type === 'broadcast' && !this.params?.config?.broadcast?.ack) {\n          resolve('ok')\n        }\n\n        push.receive('ok', () => resolve('ok'))\n        push.receive('error', () => resolve('error'))\n        push.receive('timeout', () => resolve('timed out'))\n      })\n    }\n  }\n\n  /**\n   * Updates the payload that will be sent the next time the channel joins (reconnects).\n   * Useful for rotating access tokens or updating config without re-creating the channel.\n   *\n   * @category Realtime\n   */\n  updateJoinPayload(payload: Record<string, any>) {\n    this.channelAdapter.updateJoinPayload(payload)\n  }\n\n  /**\n   * Leaves the channel.\n   *\n   * Unsubscribes from server events, and instructs channel to terminate on server.\n   * Triggers onClose() hooks.\n   *\n   * To receive leave acknowledgements, use the a `receive` hook to bind to the server ack, ie:\n   * channel.unsubscribe().receive(\"ok\", () => alert(\"left!\") )\n   *\n   * @category Realtime\n   */\n  async unsubscribe(timeout = this.timeout) {\n    return new Promise<RealtimeChannelSendResponse>((resolve) => {\n      this.channelAdapter\n        .unsubscribe(timeout)\n        .receive('ok', () => resolve('ok'))\n        .receive('timeout', () => resolve('timed out'))\n        .receive('error', () => resolve('error'))\n    })\n  }\n\n  /**\n   * Destroys and stops related timers.\n   *\n   * @category Realtime\n   */\n  teardown() {\n    this.channelAdapter.teardown()\n  }\n\n  /** @internal */\n  async _fetchWithTimeout(url: string, options: { [key: string]: any }, timeout: number) {\n    const controller = new AbortController()\n    const id = setTimeout(() => controller.abort(), timeout)\n\n    const response = await this.socket.fetch(url, {\n      ...options,\n      signal: controller.signal,\n    })\n\n    clearTimeout(id)\n\n    return response\n  }\n\n  /** @internal */\n  _on(type: string, filter: { [key: string]: any }, callback: ChannelBindingCallback) {\n    const typeLower = type.toLocaleLowerCase()\n\n    const ref = this.channelAdapter.on(type, callback)\n\n    const binding: Binding = {\n      type: typeLower,\n      filter: filter,\n      callback: callback,\n      ref: ref,\n    }\n\n    if (this.bindings[typeLower]) {\n      this.bindings[typeLower].push(binding)\n    } else {\n      this.bindings[typeLower] = [binding]\n    }\n\n    this._updateFilterMessage()\n\n    return this\n  }\n\n  /**\n   * Registers a callback that will be executed when the channel closes.\n   *\n   * @internal\n   */\n  private _onClose(callback: ChannelBindingCallback) {\n    this.channelAdapter.onClose(callback)\n  }\n\n  /**\n   * Registers a callback that will be executed when the channel encounteres an error.\n   *\n   * @internal\n   */\n  private _onError(callback: ChannelOnErrorCallback) {\n    this.channelAdapter.onError(callback)\n  }\n\n  /** @internal */\n  private _updateFilterMessage() {\n    this.channelAdapter.updateFilterBindings((binding, payload: any, ref) => {\n      const typeLower = binding.event.toLocaleLowerCase()\n\n      if (this._notThisChannelEvent(typeLower, ref)) {\n        return false\n      }\n\n      const bind = this.bindings[typeLower]?.find((bind) => bind.ref === binding.ref)\n\n      if (!bind) {\n        return true\n      }\n\n      if (['broadcast', 'presence', 'postgres_changes'].includes(typeLower)) {\n        if ('id' in bind) {\n          const bindId = bind.id\n          const bindEvent = bind.filter?.event\n          return (\n            bindId &&\n            payload.ids?.includes(bindId) &&\n            (bindEvent === '*' ||\n              bindEvent?.toLocaleLowerCase() === payload.data?.type.toLocaleLowerCase())\n          )\n        } else {\n          const bindEvent = bind?.filter?.event?.toLocaleLowerCase()\n          return bindEvent === '*' || bindEvent === payload?.event?.toLocaleLowerCase()\n        }\n      } else {\n        return bind.type.toLocaleLowerCase() === typeLower\n      }\n    })\n  }\n\n  /** @internal */\n  private _notThisChannelEvent(event: string, ref?: string | null) {\n    const { close, error, leave, join } = CHANNEL_EVENTS\n    const events: string[] = [close, error, leave, join]\n    return ref && events.includes(event) && ref !== this.joinPush.ref\n  }\n\n  /** @internal */\n  private _updateFilterTransform() {\n    this.channelAdapter.updatePayloadTransform((event, payload: any, ref) => {\n      if (typeof payload === 'object' && 'ids' in payload) {\n        const postgresChanges = payload.data\n        const { schema, table, commit_timestamp, type, errors } = postgresChanges\n        const enrichedPayload = {\n          schema: schema,\n          table: table,\n          commit_timestamp: commit_timestamp,\n          eventType: type,\n          new: {},\n          old: {},\n          errors: errors,\n        }\n        return {\n          ...enrichedPayload,\n          ...this._getPayloadRecords(postgresChanges),\n        }\n      }\n\n      return payload\n    })\n  }\n\n  copyBindings(other: RealtimeChannel) {\n    if (this.joinedOnce) {\n      throw new Error('cannot copy bindings into joined channel')\n    }\n    for (const kind in other.bindings) {\n      for (const binding of other.bindings[kind]) {\n        this._on(binding.type, binding.filter, binding.callback)\n      }\n    }\n  }\n\n  /**\n   * Compares two optional filter values for equality.\n   * Treats undefined, null, and empty string as equivalent empty values.\n   * @internal\n   */\n  private static isFilterValueEqual(\n    serverValue: string | undefined | null,\n    clientValue: string | undefined\n  ): boolean {\n    const normalizedServer = serverValue ?? undefined\n    const normalizedClient = clientValue ?? undefined\n    return normalizedServer === normalizedClient\n  }\n\n  /** @internal */\n  private _getPayloadRecords(payload: any) {\n    const records = {\n      new: {},\n      old: {},\n    }\n\n    if (payload.type === 'INSERT' || payload.type === 'UPDATE') {\n      records.new = Transformers.convertChangeData(payload.columns, payload.record)\n    }\n\n    if (payload.type === 'UPDATE' || payload.type === 'DELETE') {\n      records.old = Transformers.convertChangeData(payload.columns, payload.old_record)\n    }\n\n    return records\n  }\n}\n", "import { Socket } from '@supabase/phoenix'\nimport type {\n  Message,\n  SocketOnClose,\n  SocketOnMessage,\n  SocketOnOpen,\n  SocketOnError,\n  SocketOptions,\n  SocketStateChangeCallbacks,\n  Vsn,\n  Encode,\n  Decode,\n  HeartbeatCallback,\n  Timer,\n} from './types'\nimport { CONNECTION_STATE, ConnectionState } from '../lib/constants'\nimport type { HeartbeatTimer, WebSocketLikeConstructor } from '../RealtimeClient'\n\nexport default class SocketAdapter {\n  private socket: Socket\n\n  constructor(endPoint: string, options: SocketOptions) {\n    this.socket = new Socket(endPoint, options)\n  }\n\n  get timeout(): number {\n    return this.socket.timeout\n  }\n\n  get endPoint(): string {\n    return this.socket.endPoint\n  }\n\n  get transport(): WebSocketLikeConstructor {\n    return this.socket.transport as WebSocketLikeConstructor\n  }\n\n  get heartbeatIntervalMs(): number {\n    return this.socket.heartbeatIntervalMs\n  }\n\n  get heartbeatCallback(): HeartbeatCallback {\n    return this.socket.heartbeatCallback\n  }\n\n  set heartbeatCallback(callback: HeartbeatCallback) {\n    this.socket.heartbeatCallback = callback\n  }\n\n  get heartbeatTimer(): HeartbeatTimer {\n    return this.socket.heartbeatTimer\n  }\n\n  get pendingHeartbeatRef(): string | null {\n    return this.socket.pendingHeartbeatRef\n  }\n\n  get reconnectTimer(): Timer {\n    return this.socket.reconnectTimer\n  }\n\n  get vsn(): Vsn {\n    return this.socket.vsn\n  }\n\n  get encode(): Encode<void> {\n    return this.socket.encode\n  }\n\n  get decode(): Decode<void> {\n    return this.socket.decode\n  }\n\n  get reconnectAfterMs(): (tries: number) => number {\n    return this.socket.reconnectAfterMs\n  }\n\n  get sendBuffer(): (() => void)[] {\n    return this.socket.sendBuffer\n  }\n\n  get stateChangeCallbacks(): SocketStateChangeCallbacks {\n    return this.socket.stateChangeCallbacks\n  }\n\n  connect() {\n    this.socket.connect()\n  }\n\n  disconnect(\n    callback: () => void,\n    code?: number,\n    reason?: string,\n    timeout: number = 10000\n  ): Promise<'ok' | 'timeout'> {\n    return new Promise((resolve) => {\n      setTimeout(() => resolve('timeout'), timeout)\n      this.socket.disconnect(\n        () => {\n          callback()\n          resolve('ok')\n        },\n        code,\n        reason\n      )\n    })\n  }\n\n  push(data: Message<Record<string, unknown>>) {\n    this.socket.push(data)\n  }\n\n  log(kind: string, msg: string, data?: any) {\n    this.socket.log(kind, msg, data)\n  }\n\n  makeRef(): string {\n    return this.socket.makeRef()\n  }\n\n  onOpen(callback: SocketOnOpen) {\n    this.socket.onOpen(callback)\n  }\n\n  onClose(callback: SocketOnClose) {\n    this.socket.onClose(callback)\n  }\n\n  onError(callback: SocketOnError) {\n    this.socket.onError(callback)\n  }\n\n  onMessage(callback: SocketOnMessage) {\n    this.socket.onMessage(callback)\n  }\n\n  isConnected() {\n    return this.socket.isConnected()\n  }\n\n  isConnecting() {\n    return this.socket.connectionState() == CONNECTION_STATE.connecting\n  }\n\n  isDisconnecting() {\n    return this.socket.connectionState() == CONNECTION_STATE.closing\n  }\n\n  connectionState(): ConnectionState {\n    // @ts-ignore - requires better typing and exposing type in phoenix\n    return this.socket.connectionState()\n  }\n\n  endPointURL(): string {\n    return this.socket.endPointURL()\n  }\n\n  sendHeartbeat() {\n    this.socket.sendHeartbeat()\n  }\n\n  /**\n   * @internal\n   */\n  getSocket() {\n    return this.socket\n  }\n}\n", "import WebSocketFactory, { WebSocketLike } from './lib/websocket-factory'\n\nimport {\n  CHANNEL_EVENTS,\n  CONNECTION_STATE,\n  DEFAULT_VERSION,\n  DEFAULT_TIMEOUT,\n  DEFAULT_VSN,\n  VSN_1_0_0,\n  VSN_2_0_0,\n} from './lib/constants'\n\nimport Serializer from './lib/serializer'\nimport { httpEndpointURL } from './lib/transformers'\nimport RealtimeChannel from './RealtimeChannel'\nimport type { RealtimeChannelOptions } from './RealtimeChannel'\nimport SocketAdapter from './phoenix/socketAdapter'\nimport type {\n  Message,\n  SocketOptions,\n  HeartbeatCallback,\n  Encode,\n  Decode,\n  Timer,\n  Vsn,\n} from './phoenix/types'\n\ntype Fetch = typeof fetch\n\nexport type LogLevel = 'info' | 'warn' | 'error' | (string & {})\n\nexport type RealtimeMessage = {\n  topic: string\n  event: string\n  payload: any\n  ref: string\n  join_ref?: string\n}\n\nexport type RealtimeRemoveChannelResponse = 'ok' | 'timed out' | 'error' | (string & {})\nexport type HeartbeatStatus = 'sent' | 'ok' | 'error' | 'timeout' | 'disconnected' | (string & {})\nexport type HeartbeatTimer = ReturnType<typeof setTimeout> | undefined\n\n// Connection-related constants\nconst CONNECTION_TIMEOUTS = {\n  HEARTBEAT_INTERVAL: 25000,\n  RECONNECT_DELAY: 10,\n  HEARTBEAT_TIMEOUT_FALLBACK: 100,\n} as const\n\nconst RECONNECT_INTERVALS = [1000, 2000, 5000, 10000] as const\nconst DEFAULT_RECONNECT_FALLBACK = 10000\n\n/**\n * Minimal WebSocket constructor interface that RealtimeClient can work with.\n * Supply a compatible implementation (native WebSocket, `ws`, etc) when running outside the browser.\n */\nexport interface WebSocketLikeConstructor {\n  new (address: string | URL, subprotocols?: string | string[] | undefined): WebSocketLike\n  // Allow additional properties that may exist on WebSocket constructors\n  [key: string]: any\n}\n\nexport type RealtimeClientOptions = {\n  transport?: WebSocketLikeConstructor\n  timeout?: number\n  heartbeatIntervalMs?: number\n  heartbeatCallback?: (status: HeartbeatStatus, latency?: number) => void\n  vsn?: string\n  logger?: (kind: string, msg: string, data?: any) => void\n  encode?: Encode<void>\n  decode?: Decode<void>\n  reconnectAfterMs?: (tries: number) => number\n  headers?: { [key: string]: string }\n  params?: { [key: string]: any }\n  //Deprecated: Use it in favour of correct casing `logLevel`\n  log_level?: LogLevel\n  logLevel?: LogLevel\n  fetch?: Fetch\n  worker?: boolean\n  workerUrl?: string\n  accessToken?: () => Promise<string | null>\n  disconnectOnEmptyChannelsAfterMs?: number\n  /**\n   * Storage compatible object used by the underlying socket for longpoll fallback history.\n   * Provide a custom implementation in environments where reading `globalThis.sessionStorage`\n   * throws (sandboxed iframes, in-app webviews, \"block third-party storage\" privacy modes).\n   * Defaults to `globalThis.sessionStorage` when accessible, otherwise an in-memory store.\n   */\n  sessionStorage?: Storage\n}\n\nfunction createMemorySessionStorage(): Storage {\n  const store = new Map<string, string>()\n  return {\n    get length() {\n      return store.size\n    },\n    clear() {\n      store.clear()\n    },\n    getItem(key: string) {\n      return store.has(key) ? (store.get(key) as string) : null\n    },\n    key(index: number) {\n      return Array.from(store.keys())[index] ?? null\n    },\n    removeItem(key: string) {\n      store.delete(key)\n    },\n    setItem(key: string, value: string) {\n      store.set(key, String(value))\n    },\n  }\n}\n\nfunction resolveSessionStorage(): Storage {\n  try {\n    if (typeof globalThis !== 'undefined' && globalThis.sessionStorage) {\n      return globalThis.sessionStorage\n    }\n  } catch {\n    // Property access on `sessionStorage` itself throws in restricted-storage browsers.\n  }\n  return createMemorySessionStorage()\n}\n\nconst WORKER_SCRIPT = `\n  addEventListener(\"message\", (e) => {\n    if (e.data.event === \"start\") {\n      setInterval(() => postMessage({ event: \"keepAlive\" }), e.data.interval);\n    }\n  });`\n\nexport default class RealtimeClient {\n  /** @internal */\n  socketAdapter: SocketAdapter\n  channels: RealtimeChannel[] = new Array()\n\n  accessTokenValue: string | null = null\n  accessToken: (() => Promise<string | null>) | null = null\n  apiKey: string | null = null\n\n  httpEndpoint: string = ''\n  /** @deprecated headers cannot be set on websocket connections */\n  headers?: { [key: string]: string } = {}\n  params?: { [key: string]: string } = {}\n\n  ref: number = 0\n\n  logLevel?: LogLevel\n\n  fetch: Fetch\n  worker?: boolean\n  workerUrl?: string\n  workerRef?: Worker\n\n  serializer: Serializer = new Serializer()\n\n  get endPoint() {\n    return this.socketAdapter.endPoint\n  }\n\n  get timeout() {\n    return this.socketAdapter.timeout\n  }\n\n  get transport() {\n    return this.socketAdapter.transport\n  }\n\n  get heartbeatCallback() {\n    return this.socketAdapter.heartbeatCallback\n  }\n\n  get heartbeatIntervalMs() {\n    return this.socketAdapter.heartbeatIntervalMs\n  }\n\n  get heartbeatTimer() {\n    if (this.worker) {\n      return this._workerHeartbeatTimer\n    }\n    return this.socketAdapter.heartbeatTimer\n  }\n\n  get pendingHeartbeatRef() {\n    if (this.worker) {\n      return this._pendingWorkerHeartbeatRef\n    }\n    return this.socketAdapter.pendingHeartbeatRef\n  }\n\n  get reconnectTimer(): Timer {\n    return this.socketAdapter.reconnectTimer\n  }\n\n  get vsn(): Vsn {\n    return this.socketAdapter.vsn\n  }\n\n  get encode() {\n    return this.socketAdapter.encode\n  }\n\n  get decode() {\n    return this.socketAdapter.decode\n  }\n\n  get reconnectAfterMs() {\n    return this.socketAdapter.reconnectAfterMs\n  }\n\n  get sendBuffer() {\n    return this.socketAdapter.sendBuffer\n  }\n\n  get stateChangeCallbacks(): {\n    open: [string, Function][]\n    close: [string, Function][]\n    error: [string, Function][]\n    message: [string, Function][]\n  } {\n    return this.socketAdapter.stateChangeCallbacks\n  }\n\n  private _manuallySetToken: boolean = false\n  private _authPromise: Promise<void> | null = null\n  private _workerHeartbeatTimer: HeartbeatTimer = undefined\n  private _pendingWorkerHeartbeatRef: string | null = null\n  private _pendingDisconnectTimer: ReturnType<typeof setTimeout> | null = null\n  private _disconnectOnEmptyChannelsAfterMs: number = 0\n\n  /**\n   * Initializes the Socket.\n   *\n   * @param endPoint The string WebSocket endpoint, ie, \"ws://example.com/socket\", \"wss://example.com\", \"/socket\" (inherited host & protocol)\n   * @param httpEndpoint The string HTTP endpoint, ie, \"https://example.com\", \"/\" (inherited host & protocol)\n   * @param options.transport The Websocket Transport, for example WebSocket. This can be a custom implementation\n   * @param options.timeout The default timeout in milliseconds to trigger push timeouts.\n   * @param options.params The optional params to pass when connecting.\n   * @param options.headers Deprecated: headers cannot be set on websocket connections and this option will be removed in the future.\n   * @param options.heartbeatIntervalMs The millisec interval to send a heartbeat message.\n   * @param options.heartbeatCallback The optional function to handle heartbeat status and latency.\n   * @param options.logger The optional function for specialized logging, ie: logger: (kind, msg, data) => { console.log(`${kind}: ${msg}`, data) }\n   * @param options.logLevel Sets the log level for Realtime\n   * @param options.encode The function to encode outgoing messages. Defaults to JSON: (payload, callback) => callback(JSON.stringify(payload))\n   * @param options.decode The function to decode incoming messages. Defaults to Serializer's decode.\n   * @param options.reconnectAfterMs he optional function that returns the millsec reconnect interval. Defaults to stepped backoff off.\n   * @param options.worker Use Web Worker to set a side flow. Defaults to false.\n   * @param options.workerUrl The URL of the worker script. Defaults to https://realtime.supabase.com/worker.js that includes a heartbeat event call to keep the connection alive.\n   * @param options.vsn The protocol version to use when connecting. Supported versions are \"1.0.0\" and \"2.0.0\". Defaults to \"2.0.0\".\n   *\n   * @category Realtime\n   *\n   * @example Using supabase-js (recommended)\n   * ```ts\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n   * const channel = supabase.channel('room1')\n   * channel\n   *   .on('broadcast', { event: 'cursor-pos' }, (payload) => console.log(payload))\n   *   .subscribe()\n   * ```\n   *\n   * @example Standalone import for bundle-sensitive environments\n   * ```ts\n   * import RealtimeClient from '@supabase/realtime-js'\n   *\n   * const client = new RealtimeClient('https://xyzcompany.supabase.co/realtime/v1', {\n   *   params: { apikey: 'your-publishable-key' },\n   * })\n   * client.connect()\n   * ```\n   */\n  constructor(endPoint: string, options?: RealtimeClientOptions) {\n    // Validate required parameters\n    if (!options?.params?.apikey) {\n      throw new Error('API key is required to connect to Realtime')\n    }\n    this.apiKey = options.params.apikey\n\n    const socketAdapterOptions = this._initializeOptions(options)\n\n    this.socketAdapter = new SocketAdapter(endPoint, socketAdapterOptions)\n    this.httpEndpoint = httpEndpointURL(endPoint)\n\n    this.fetch = this._resolveFetch(options?.fetch)\n  }\n\n  /**\n   * Connects the socket, unless already connected.\n   *\n   * @category Realtime\n   */\n  connect(): void {\n    // Skip if already connecting, disconnecting, or connected\n    if (this.isConnecting() || this.isDisconnecting() || this.isConnected()) {\n      return\n    }\n\n    // Trigger auth if needed and not already in progress\n    // This ensures auth is called for standalone RealtimeClient usage\n    // while avoiding race conditions with SupabaseClient's immediate setAuth call\n    if (this.accessToken && !this._authPromise) {\n      this._setAuthSafely('connect')\n    }\n\n    this._setupConnectionHandlers()\n\n    try {\n      this.socketAdapter.connect()\n    } catch (error) {\n      const errorMessage = (error as Error).message\n\n      // Provide helpful error message based on environment\n      if (errorMessage.includes('Node.js')) {\n        throw new Error(\n          `${errorMessage}\\n\\n` +\n            'To use Realtime in Node.js, you need to provide a WebSocket implementation:\\n\\n' +\n            'Option 1: Use Node.js 22+ which has native WebSocket support\\n' +\n            'Option 2: Install and provide the \"ws\" package:\\n\\n' +\n            '  npm install ws\\n\\n' +\n            '  import ws from \"ws\"\\n' +\n            '  const client = new RealtimeClient(url, {\\n' +\n            '    ...options,\\n' +\n            '    transport: ws\\n' +\n            '  })'\n        )\n      }\n      throw new Error(`WebSocket not available: ${errorMessage}`)\n    }\n\n    this._handleNodeJsRaceCondition()\n  }\n\n  /**\n   * Returns the URL of the websocket.\n   * @returns string The URL of the websocket.\n   *\n   * @category Realtime\n   */\n  endpointURL(): string {\n    return this.socketAdapter.endPointURL()\n  }\n\n  /**\n   * Disconnects the socket.\n   *\n   * @param code A numeric status code to send on disconnect.\n   * @param reason A custom reason for the disconnect.\n   *\n   * @category Realtime\n   */\n  async disconnect(code?: number, reason?: string) {\n    this._cancelPendingDisconnect()\n    if (this.isDisconnecting()) {\n      return 'ok'\n    }\n    return await this.socketAdapter.disconnect(\n      () => {\n        clearInterval(this._workerHeartbeatTimer)\n        this._terminateWorker()\n      },\n      code,\n      reason\n    )\n  }\n\n  /**\n   * Returns all created channels\n   *\n   * @category Realtime\n   */\n  getChannels(): RealtimeChannel[] {\n    return this.channels\n  }\n\n  /**\n   * Unsubscribes, removes and tears down a single channel\n   * @param channel A RealtimeChannel instance\n   *\n   * @category Realtime\n   */\n  async removeChannel(channel: RealtimeChannel): Promise<RealtimeRemoveChannelResponse> {\n    const status = await channel.unsubscribe()\n\n    if (status === 'ok') {\n      channel.teardown()\n    }\n\n    return status\n  }\n\n  /**\n   * Unsubscribes, removes and tears down all channels\n   *\n   * @category Realtime\n   */\n  async removeAllChannels(): Promise<RealtimeRemoveChannelResponse[]> {\n    const promises = this.channels.map(async (channel) => {\n      const result = await channel.unsubscribe()\n      channel.teardown()\n      return result\n    })\n\n    const result = await Promise.all(promises)\n    await this.disconnect()\n    return result\n  }\n\n  /**\n   * Logs the message.\n   *\n   * For customized logging, `this.logger` can be overridden in Client constructor.\n   *\n   * @category Realtime\n   */\n  log(kind: string, msg: string, data?: any) {\n    this.socketAdapter.log(kind, msg, data)\n  }\n\n  /**\n   * Returns the current state of the socket.\n   *\n   * @category Realtime\n   */\n  connectionState() {\n    return this.socketAdapter.connectionState() || CONNECTION_STATE.closed\n  }\n\n  /**\n   * Returns `true` is the connection is open.\n   *\n   * @category Realtime\n   */\n  isConnected(): boolean {\n    return this.socketAdapter.isConnected()\n  }\n\n  /**\n   * Returns `true` if the connection is currently connecting.\n   *\n   * @category Realtime\n   */\n  isConnecting(): boolean {\n    return this.socketAdapter.isConnecting()\n  }\n\n  /**\n   * Returns `true` if the connection is currently disconnecting.\n   *\n   * @category Realtime\n   */\n  isDisconnecting(): boolean {\n    return this.socketAdapter.isDisconnecting()\n  }\n\n  /**\n   * Creates (or reuses) a {@link RealtimeChannel} for the provided topic.\n   *\n   * Topics are automatically prefixed with `realtime:` to match the Realtime service.\n   * If a channel with the same topic already exists it will be returned instead of creating\n   * a duplicate connection.\n   *\n   * @category Realtime\n   */\n  channel(topic: string, params: RealtimeChannelOptions = { config: {} }): RealtimeChannel {\n    const realtimeTopic = `realtime:${topic}`\n    const exists = this.getChannels().find((c: RealtimeChannel) => c.topic === realtimeTopic)\n\n    if (!exists) {\n      const chan = new RealtimeChannel(`realtime:${topic}`, params, this)\n      this._cancelPendingDisconnect()\n      this.channels.push(chan)\n\n      return chan\n    } else {\n      return exists\n    }\n  }\n\n  /**\n   * Push out a message if the socket is connected.\n   *\n   * If the socket is not connected, the message gets enqueued within a local buffer, and sent out when a connection is next established.\n   *\n   * @category Realtime\n   */\n  push(data: RealtimeMessage): void {\n    this.socketAdapter.push(data)\n  }\n\n  /**\n   * Sets the JWT access token used for channel subscription authorization and Realtime RLS.\n   *\n   * If param is null it will use the `accessToken` callback function or the token set on the client.\n   *\n   * On callback used, it will set the value of the token internal to the client.\n   *\n   * When a token is explicitly provided, it will be preserved across channel operations\n   * (including removeChannel and resubscribe). The `accessToken` callback will not be\n   * invoked until `setAuth()` is called without arguments.\n   *\n   * @param token A JWT string to override the token set on the client.\n   *\n   * @example Setting the authorization header\n   * // Use a manual token (preserved across resubscribes, ignores accessToken callback)\n   * client.realtime.setAuth('my-custom-jwt')\n   *\n   * // Switch back to using the accessToken callback\n   * client.realtime.setAuth()\n   *\n   * @category Realtime\n   */\n  async setAuth(token: string | null = null): Promise<void> {\n    this._authPromise = this._performAuth(token)\n    try {\n      await this._authPromise\n    } finally {\n      this._authPromise = null\n    }\n  }\n\n  /**\n   * Returns true if the current access token was explicitly set via setAuth(token),\n   * false if it was obtained via the accessToken callback.\n   * @internal\n   */\n  _isManualToken(): boolean {\n    return this._manuallySetToken\n  }\n\n  /**\n   * Sends a heartbeat message if the socket is connected.\n   *\n   * @category Realtime\n   */\n  async sendHeartbeat() {\n    this.socketAdapter.sendHeartbeat()\n  }\n\n  /**\n   * Sets a callback that receives lifecycle events for internal heartbeat messages.\n   * Useful for instrumenting connection health (e.g. sent/ok/timeout/disconnected).\n   *\n   * @category Realtime\n   */\n  onHeartbeat(callback: HeartbeatCallback) {\n    this.socketAdapter.heartbeatCallback = this._wrapHeartbeatCallback(callback)\n  }\n\n  /**\n   * Use either custom fetch, if provided, or default fetch to make HTTP requests\n   *\n   * @internal\n   */\n  _resolveFetch = (customFetch?: Fetch): Fetch => {\n    if (customFetch) {\n      return (...args) => customFetch(...args)\n    }\n    return (...args) => fetch(...args)\n  }\n\n  /**\n   * Return the next message ref, accounting for overflows\n   *\n   * @internal\n   */\n  _makeRef(): string {\n    return this.socketAdapter.makeRef()\n  }\n\n  /**\n   * Removes a channel from RealtimeClient\n   *\n   * @param channel An open subscription.\n   *\n   * @internal\n   */\n  _remove(channel: RealtimeChannel) {\n    this.channels = this.channels.filter((c) => c.topic !== channel.topic)\n    if (this.channels.length === 0) {\n      this.log('transport', 'no channels remaining, scheduling disconnect')\n      this._schedulePendingDisconnect()\n    }\n  }\n\n  /** @internal */\n  private _schedulePendingDisconnect() {\n    this._cancelPendingDisconnect()\n    if (this._disconnectOnEmptyChannelsAfterMs === 0) {\n      this.log('transport', 'disconnecting immediately - no channels')\n      this.disconnect()\n      return\n    }\n    this._pendingDisconnectTimer = setTimeout(() => {\n      this._pendingDisconnectTimer = null\n      if (this.channels.length === 0) {\n        this.log('transport', 'deferred disconnect fired - no channels, disconnecting')\n        this.disconnect()\n      }\n    }, this._disconnectOnEmptyChannelsAfterMs)\n    this.log(\n      'transport',\n      `deferred disconnect scheduled in ${this._disconnectOnEmptyChannelsAfterMs}ms`\n    )\n  }\n\n  /** @internal */\n  private _cancelPendingDisconnect() {\n    if (this._pendingDisconnectTimer !== null) {\n      this.log('transport', 'pending disconnect cancelled - channel activity detected')\n      clearTimeout(this._pendingDisconnectTimer)\n      this._pendingDisconnectTimer = null\n    }\n  }\n\n  /**\n   * Perform the actual auth operation\n   * @internal\n   */\n  private async _performAuth(token: string | null = null): Promise<void> {\n    let tokenToSend: string | null\n    let isManualToken = false\n\n    if (token) {\n      tokenToSend = token\n      // Track if this is a manually-provided token\n      isManualToken = true\n    } else if (this.accessToken) {\n      // Call the accessToken callback to get fresh token\n      try {\n        tokenToSend = await this.accessToken()\n      } catch (e) {\n        this.log('error', 'Error fetching access token from callback', e)\n        // Fall back to cached value if callback fails\n        tokenToSend = this.accessTokenValue\n      }\n    } else {\n      tokenToSend = this.accessTokenValue\n    }\n\n    // Track whether this token was manually set or fetched via callback\n    if (isManualToken) {\n      this._manuallySetToken = true\n    } else if (this.accessToken) {\n      // If we used the callback, clear the manual flag\n      this._manuallySetToken = false\n    }\n\n    if (this.accessTokenValue != tokenToSend) {\n      this.accessTokenValue = tokenToSend\n      this.channels.forEach((channel) => {\n        const payload = {\n          access_token: tokenToSend,\n          version: DEFAULT_VERSION,\n        }\n\n        tokenToSend && channel.updateJoinPayload(payload)\n\n        if (channel.joinedOnce && channel.channelAdapter.isJoined()) {\n          channel.channelAdapter.push(CHANNEL_EVENTS.access_token, {\n            access_token: tokenToSend,\n          })\n        }\n      })\n    }\n  }\n\n  /**\n   * Wait for any in-flight auth operations to complete\n   * @internal\n   */\n  private async _waitForAuthIfNeeded(): Promise<void> {\n    if (this._authPromise) {\n      await this._authPromise\n    }\n  }\n\n  /**\n   * Safely call setAuth with standardized error handling\n   * @internal\n   */\n  private _setAuthSafely(context = 'general'): void {\n    // Only refresh auth if using callback-based tokens\n    if (!this._isManualToken()) {\n      this.setAuth().catch((e) => {\n        this.log('error', `Error setting auth in ${context}`, e)\n      })\n    }\n  }\n\n  /** @internal */\n  private _setupConnectionHandlers(): void {\n    this.socketAdapter.onOpen(() => {\n      const authPromise =\n        this._authPromise ||\n        (this.accessToken && !this.accessTokenValue ? this.setAuth() : Promise.resolve())\n\n      authPromise.catch((e) => {\n        this.log('error', 'error waiting for auth on connect', e)\n      })\n\n      if (this.worker && !this.workerRef) {\n        this._startWorkerHeartbeat()\n      }\n    })\n    this.socketAdapter.onClose(() => {\n      if (this.worker && this.workerRef) {\n        this._terminateWorker()\n      }\n    })\n    this.socketAdapter.onMessage((message: Message<any>) => {\n      if (message.ref && message.ref === this._pendingWorkerHeartbeatRef) {\n        this._pendingWorkerHeartbeatRef = null\n      }\n    })\n  }\n\n  /** @internal */\n  private _handleNodeJsRaceCondition() {\n    if (this.socketAdapter.isConnected()) {\n      // hack: ensure onConnOpen is called\n      this.socketAdapter.getSocket().onConnOpen()\n    }\n  }\n\n  /** @internal */\n  private _wrapHeartbeatCallback(heartbeatCallback?: HeartbeatCallback): HeartbeatCallback {\n    return (status, latency) => {\n      if (status == 'sent') this._setAuthSafely()\n      if (heartbeatCallback) heartbeatCallback(status, latency)\n    }\n  }\n\n  /** @internal */\n  private _startWorkerHeartbeat() {\n    if (this.workerUrl) {\n      this.log('worker', `starting worker for from ${this.workerUrl}`)\n    } else {\n      this.log('worker', `starting default worker`)\n    }\n    const objectUrl = this._workerObjectUrl(this.workerUrl!)\n    this.workerRef = new Worker(objectUrl)\n    this.workerRef.onerror = (error) => {\n      this.log('worker', 'worker error', (error as ErrorEvent).message)\n      this._terminateWorker()\n      this.disconnect()\n    }\n    this.workerRef.onmessage = (event) => {\n      if (event.data.event === 'keepAlive') {\n        this.sendHeartbeat()\n      }\n    }\n    this.workerRef.postMessage({\n      event: 'start',\n      interval: this.heartbeatIntervalMs,\n    })\n  }\n\n  /**\n   * Terminate the Web Worker and clear the reference\n   * @internal\n   */\n  private _terminateWorker(): void {\n    if (this.workerRef) {\n      this.log('worker', 'terminating worker')\n      this.workerRef.terminate()\n      this.workerRef = undefined\n    }\n  }\n\n  /** @internal */\n  private _workerObjectUrl(url: string | undefined): string {\n    let result_url: string\n    if (url) {\n      result_url = url\n    } else {\n      const blob = new Blob([WORKER_SCRIPT], { type: 'application/javascript' })\n      result_url = URL.createObjectURL(blob)\n    }\n    return result_url\n  }\n\n  /**\n   * Initialize socket options with defaults\n   * @internal\n   */\n  private _initializeOptions(options?: RealtimeClientOptions): SocketOptions {\n    this.worker = options?.worker ?? false\n    this.accessToken = options?.accessToken ?? null\n\n    const result: SocketOptions = {}\n    result.timeout = options?.timeout ?? DEFAULT_TIMEOUT\n    result.heartbeatIntervalMs =\n      options?.heartbeatIntervalMs ?? CONNECTION_TIMEOUTS.HEARTBEAT_INTERVAL\n\n    this._disconnectOnEmptyChannelsAfterMs =\n      options?.disconnectOnEmptyChannelsAfterMs ??\n      2 * (options?.heartbeatIntervalMs ?? CONNECTION_TIMEOUTS.HEARTBEAT_INTERVAL)\n\n    // @ts-ignore - mismatch between phoenix and supabase\n    result.transport = options?.transport ?? WebSocketFactory.getWebSocketConstructor()\n    result.params = options?.params\n    result.logger = options?.logger\n    result.heartbeatCallback = this._wrapHeartbeatCallback(options?.heartbeatCallback)\n    result.sessionStorage = options?.sessionStorage ?? resolveSessionStorage()\n    result.reconnectAfterMs =\n      options?.reconnectAfterMs ??\n      ((tries: number) => {\n        return RECONNECT_INTERVALS[tries - 1] || DEFAULT_RECONNECT_FALLBACK\n      })\n\n    let defaultEncode: Encode<void>\n    let defaultDecode: Decode<void>\n\n    const vsn = options?.vsn ?? DEFAULT_VSN\n\n    switch (vsn) {\n      case VSN_1_0_0:\n        defaultEncode = (payload, callback) => {\n          return callback(JSON.stringify(payload))\n        }\n        defaultDecode = (payload, callback) => {\n          return callback(JSON.parse(payload as string))\n        }\n        break\n      case VSN_2_0_0:\n        defaultEncode = this.serializer.encode.bind(this.serializer)\n        defaultDecode = this.serializer.decode.bind(this.serializer)\n        break\n      default:\n        throw new Error(`Unsupported serializer version: ${result.vsn}`)\n    }\n\n    result.vsn = vsn\n    result.encode = options?.encode ?? defaultEncode\n    result.decode = options?.decode ?? defaultDecode\n\n    result.beforeReconnect = this._reconnectAuth.bind(this)\n\n    if (options?.logLevel || options?.log_level) {\n      this.logLevel = options.logLevel || options.log_level\n      result.params = { ...result.params, log_level: this.logLevel as string }\n    }\n\n    // Handle worker setup\n    if (this.worker) {\n      if (typeof window !== 'undefined' && !window.Worker) {\n        throw new Error('Web Worker is not supported')\n      }\n      this.workerUrl = options?.workerUrl\n      result.autoSendHeartbeat = !this.worker\n    }\n\n    return result\n  }\n\n  /** @internal */\n  private async _reconnectAuth() {\n    await this._waitForAuthIfNeeded()\n    if (!this.isConnected()) {\n      this.connect()\n    }\n  }\n}\n", "import RealtimeClient, {\n  RealtimeClientOptions,\n  RealtimeMessage,\n  RealtimeRemoveChannelResponse,\n  WebSocketLikeConstructor,\n} from './RealtimeClient'\nimport RealtimeChannel, {\n  RealtimeChannelOptions,\n  RealtimeChannelSendResponse,\n  RealtimePostgresChangesFilter,\n  RealtimePostgresChangesPayload,\n  RealtimePostgresInsertPayload,\n  RealtimePostgresUpdatePayload,\n  RealtimePostgresDeletePayload,\n  REALTIME_LISTEN_TYPES,\n  REALTIME_POSTGRES_CHANGES_LISTEN_EVENT,\n  REALTIME_SUBSCRIBE_STATES,\n  REALTIME_CHANNEL_STATES,\n} from './RealtimeChannel'\nimport RealtimePresence, {\n  RealtimePresenceState,\n  RealtimePresenceJoinPayload,\n  RealtimePresenceLeavePayload,\n  REALTIME_PRESENCE_LISTEN_EVENTS,\n} from './RealtimePresence'\nimport WebSocketFactory, { WebSocketLike } from './lib/websocket-factory'\n\nexport {\n  RealtimePresence,\n  RealtimeChannel,\n  RealtimeChannelOptions,\n  RealtimeChannelSendResponse,\n  RealtimeClient,\n  RealtimeClientOptions,\n  RealtimeMessage,\n  RealtimePostgresChangesFilter,\n  RealtimePostgresChangesPayload,\n  RealtimePostgresInsertPayload,\n  RealtimePostgresUpdatePayload,\n  RealtimePostgresDeletePayload,\n  RealtimePresenceJoinPayload,\n  RealtimePresenceLeavePayload,\n  RealtimePresenceState,\n  RealtimeRemoveChannelResponse,\n  REALTIME_LISTEN_TYPES,\n  REALTIME_POSTGRES_CHANGES_LISTEN_EVENT,\n  REALTIME_PRESENCE_LISTEN_EVENTS,\n  REALTIME_SUBSCRIBE_STATES,\n  REALTIME_CHANNEL_STATES,\n  WebSocketFactory,\n  WebSocketLike,\n  WebSocketLikeConstructor,\n}\n", "export interface IcebergErrorResponse {\n  error: {\n    message: string\n    type: string\n    code: number\n    stack?: string[]\n  }\n}\n\nexport class IcebergError extends Error {\n  readonly status: number\n  readonly icebergType?: string\n  readonly icebergCode?: number\n  readonly details?: unknown\n  readonly isCommitStateUnknown: boolean\n\n  constructor(\n    message: string,\n    opts: {\n      status: number\n      icebergType?: string\n      icebergCode?: number\n      details?: unknown\n    }\n  ) {\n    super(message)\n    this.name = 'IcebergError'\n    this.status = opts.status\n    this.icebergType = opts.icebergType\n    this.icebergCode = opts.icebergCode\n    this.details = opts.details\n\n    // Detect CommitStateUnknownException (500, 502, 504 during table commits)\n    this.isCommitStateUnknown =\n      opts.icebergType === 'CommitStateUnknownException' ||\n      ([500, 502, 504].includes(opts.status) && opts.icebergType?.includes('CommitState') === true)\n  }\n\n  /**\n   * Returns true if the error is a 404 Not Found error.\n   */\n  isNotFound(): boolean {\n    return this.status === 404\n  }\n\n  /**\n   * Returns true if the error is a 409 Conflict error.\n   */\n  isConflict(): boolean {\n    return this.status === 409\n  }\n\n  /**\n   * Returns true if the error is a 419 Authentication Timeout error.\n   */\n  isAuthenticationTimeout(): boolean {\n    return this.status === 419\n  }\n}\n", "export function buildUrl(\n  baseUrl: string,\n  path: string,\n  query?: Record<string, string | undefined>\n): string {\n  const url = new URL(path, baseUrl)\n\n  if (query) {\n    for (const [key, value] of Object.entries(query)) {\n      if (value !== undefined) {\n        url.searchParams.set(key, value)\n      }\n    }\n  }\n\n  return url.toString()\n}\n", "import { IcebergError, type IcebergErrorResponse } from '../errors/IcebergError'\nimport { buildUrl } from '../utils/url'\nimport type { AuthConfig, HttpClient, HttpRequest, HttpResponse } from './types'\n\nasync function buildAuthHeaders(auth?: AuthConfig): Promise<Record<string, string>> {\n  if (!auth || auth.type === 'none') {\n    return {}\n  }\n\n  if (auth.type === 'bearer') {\n    return { Authorization: `Bearer ${auth.token}` }\n  }\n\n  if (auth.type === 'header') {\n    return { [auth.name]: auth.value }\n  }\n\n  if (auth.type === 'custom') {\n    return await auth.getHeaders()\n  }\n\n  return {}\n}\n\nexport function createFetchClient(options: {\n  baseUrl: string\n  auth?: AuthConfig\n  fetchImpl?: typeof fetch\n}): HttpClient {\n  const fetchFn = options.fetchImpl ?? globalThis.fetch\n\n  return {\n    async request<T>({\n      method,\n      path,\n      query,\n      body,\n      headers,\n    }: HttpRequest): Promise<HttpResponse<T>> {\n      const url = buildUrl(options.baseUrl, path, query)\n      const authHeaders = await buildAuthHeaders(options.auth)\n\n      const res = await fetchFn(url, {\n        method,\n        headers: {\n          ...(body ? { 'Content-Type': 'application/json' } : {}),\n          ...authHeaders,\n          ...headers,\n        },\n        body: body ? JSON.stringify(body) : undefined,\n      })\n\n      const text = await res.text()\n      const isJson = (res.headers.get('content-type') || '').includes('application/json')\n      const data = isJson && text ? (JSON.parse(text) as T) : (text as T)\n\n      if (!res.ok) {\n        const errBody = isJson ? (data as IcebergErrorResponse) : undefined\n        const errorDetail = errBody?.error\n        throw new IcebergError(\n          errorDetail?.message ?? `Request failed with status ${res.status}`,\n          {\n            status: res.status,\n            icebergType: errorDetail?.type,\n            icebergCode: errorDetail?.code,\n            details: errBody,\n          }\n        )\n      }\n\n      return { status: res.status, headers: res.headers, data: data as T }\n    },\n  }\n}\n", "import type { HttpClient } from '../http/types'\nimport { IcebergError } from '../errors/IcebergError'\nimport type {\n  CreateNamespaceRequest,\n  CreateNamespaceResponse,\n  GetNamespaceResponse,\n  ListNamespacesResponse,\n  NamespaceIdentifier,\n  NamespaceMetadata,\n} from './types'\n\nfunction namespaceToPath(namespace: string[]): string {\n  return namespace.join('\\x1F')\n}\n\nexport class NamespaceOperations {\n  constructor(\n    private readonly client: HttpClient,\n    private readonly prefix: string = ''\n  ) {}\n\n  async listNamespaces(parent?: NamespaceIdentifier): Promise<NamespaceIdentifier[]> {\n    const query = parent ? { parent: namespaceToPath(parent.namespace) } : undefined\n\n    const response = await this.client.request<ListNamespacesResponse>({\n      method: 'GET',\n      path: `${this.prefix}/namespaces`,\n      query,\n    })\n\n    return response.data.namespaces.map((ns) => ({ namespace: ns }))\n  }\n\n  async createNamespace(\n    id: NamespaceIdentifier,\n    metadata?: NamespaceMetadata\n  ): Promise<CreateNamespaceResponse> {\n    const request: CreateNamespaceRequest = {\n      namespace: id.namespace,\n      properties: metadata?.properties,\n    }\n\n    const response = await this.client.request<CreateNamespaceResponse>({\n      method: 'POST',\n      path: `${this.prefix}/namespaces`,\n      body: request,\n    })\n\n    return response.data\n  }\n\n  async dropNamespace(id: NamespaceIdentifier): Promise<void> {\n    await this.client.request<void>({\n      method: 'DELETE',\n      path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}`,\n    })\n  }\n\n  async loadNamespaceMetadata(id: NamespaceIdentifier): Promise<NamespaceMetadata> {\n    const response = await this.client.request<GetNamespaceResponse>({\n      method: 'GET',\n      path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}`,\n    })\n\n    return {\n      properties: response.data.properties,\n    }\n  }\n\n  async namespaceExists(id: NamespaceIdentifier): Promise<boolean> {\n    try {\n      await this.client.request<void>({\n        method: 'HEAD',\n        path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}`,\n      })\n      return true\n    } catch (error) {\n      if (error instanceof IcebergError && error.status === 404) {\n        return false\n      }\n      throw error\n    }\n  }\n\n  async createNamespaceIfNotExists(\n    id: NamespaceIdentifier,\n    metadata?: NamespaceMetadata\n  ): Promise<CreateNamespaceResponse | void> {\n    try {\n      return await this.createNamespace(id, metadata)\n    } catch (error) {\n      if (error instanceof IcebergError && error.status === 409) {\n        return\n      }\n      throw error\n    }\n  }\n}\n", "import type { HttpClient } from '../http/types'\nimport { IcebergError } from '../errors/IcebergError'\nimport type {\n  CreateTableRequest,\n  CommitTableResponse,\n  ListTablesResponse,\n  LoadTableResponse,\n  NamespaceIdentifier,\n  TableIdentifier,\n  TableMetadata,\n  UpdateTableRequest,\n  DropTableRequest,\n} from './types'\n\nfunction namespaceToPath(namespace: string[]): string {\n  return namespace.join('\\x1F')\n}\n\nexport class TableOperations {\n  constructor(\n    private readonly client: HttpClient,\n    private readonly prefix: string = '',\n    private readonly accessDelegation?: string\n  ) {}\n\n  async listTables(namespace: NamespaceIdentifier): Promise<TableIdentifier[]> {\n    const response = await this.client.request<ListTablesResponse>({\n      method: 'GET',\n      path: `${this.prefix}/namespaces/${namespaceToPath(namespace.namespace)}/tables`,\n    })\n\n    return response.data.identifiers\n  }\n\n  async createTable(\n    namespace: NamespaceIdentifier,\n    request: CreateTableRequest\n  ): Promise<TableMetadata> {\n    const headers: Record<string, string> = {}\n    if (this.accessDelegation) {\n      headers['X-Iceberg-Access-Delegation'] = this.accessDelegation\n    }\n\n    const response = await this.client.request<LoadTableResponse>({\n      method: 'POST',\n      path: `${this.prefix}/namespaces/${namespaceToPath(namespace.namespace)}/tables`,\n      body: request,\n      headers,\n    })\n\n    return response.data.metadata\n  }\n\n  async updateTable(id: TableIdentifier, request: UpdateTableRequest): Promise<CommitTableResponse> {\n    const response = await this.client.request<LoadTableResponse>({\n      method: 'POST',\n      path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}/tables/${id.name}`,\n      body: request,\n    })\n\n    return {\n      'metadata-location': response.data['metadata-location'],\n      metadata: response.data.metadata,\n    }\n  }\n\n  async dropTable(id: TableIdentifier, options?: DropTableRequest): Promise<void> {\n    await this.client.request<void>({\n      method: 'DELETE',\n      path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}/tables/${id.name}`,\n      query: { purgeRequested: String(options?.purge ?? false) },\n    })\n  }\n\n  async loadTable(id: TableIdentifier): Promise<TableMetadata> {\n    const headers: Record<string, string> = {}\n    if (this.accessDelegation) {\n      headers['X-Iceberg-Access-Delegation'] = this.accessDelegation\n    }\n\n    const response = await this.client.request<LoadTableResponse>({\n      method: 'GET',\n      path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}/tables/${id.name}`,\n      headers,\n    })\n\n    return response.data.metadata\n  }\n\n  async tableExists(id: TableIdentifier): Promise<boolean> {\n    const headers: Record<string, string> = {}\n    if (this.accessDelegation) {\n      headers['X-Iceberg-Access-Delegation'] = this.accessDelegation\n    }\n\n    try {\n      await this.client.request<void>({\n        method: 'HEAD',\n        path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}/tables/${id.name}`,\n        headers,\n      })\n      return true\n    } catch (error) {\n      if (error instanceof IcebergError && error.status === 404) {\n        return false\n      }\n      throw error\n    }\n  }\n\n  async createTableIfNotExists(\n    namespace: NamespaceIdentifier,\n    request: CreateTableRequest\n  ): Promise<TableMetadata> {\n    try {\n      return await this.createTable(namespace, request)\n    } catch (error) {\n      if (error instanceof IcebergError && error.status === 409) {\n        return await this.loadTable({ namespace: namespace.namespace, name: request.name })\n      }\n      throw error\n    }\n  }\n}\n", "import { createFetchClient } from '../http/createFetchClient'\nimport type { AuthConfig, HttpClient } from '../http/types'\nimport { NamespaceOperations } from './namespaces'\nimport { TableOperations } from './tables'\nimport type {\n  CreateTableRequest,\n  CreateNamespaceResponse,\n  CommitTableResponse,\n  NamespaceIdentifier,\n  NamespaceMetadata,\n  TableIdentifier,\n  TableMetadata,\n  UpdateTableRequest,\n  DropTableRequest,\n} from './types'\n\n/**\n * Access delegation mechanisms supported by the Iceberg REST Catalog.\n *\n * - `vended-credentials`: Server provides temporary credentials for data access\n * - `remote-signing`: Server signs requests on behalf of the client\n */\nexport type AccessDelegation = 'vended-credentials' | 'remote-signing'\n\n/**\n * Configuration options for the Iceberg REST Catalog client.\n */\nexport interface IcebergRestCatalogOptions {\n  /** Base URL of the Iceberg REST Catalog API */\n  baseUrl: string\n  /** Optional catalog name prefix for multi-catalog servers */\n  catalogName?: string\n  /** Authentication configuration */\n  auth?: AuthConfig\n  /** Custom fetch implementation (defaults to globalThis.fetch) */\n  fetch?: typeof fetch\n  /**\n   * Access delegation mechanisms to request from the server.\n   * When specified, the X-Iceberg-Access-Delegation header will be sent\n   * with supported operations (createTable, loadTable).\n   *\n   * @example ['vended-credentials']\n   * @example ['vended-credentials', 'remote-signing']\n   */\n  accessDelegation?: AccessDelegation[]\n}\n\n/**\n * Client for interacting with an Apache Iceberg REST Catalog.\n *\n * This class provides methods for managing namespaces and tables in an Iceberg catalog.\n * It handles authentication, request formatting, and error handling automatically.\n *\n * @example\n * ```typescript\n * const catalog = new IcebergRestCatalog({\n *   baseUrl: 'https://my-catalog.example.com/iceberg/v1',\n *   auth: { type: 'bearer', token: process.env.ICEBERG_TOKEN }\n * });\n *\n * // Create a namespace\n * await catalog.createNamespace({ namespace: ['analytics'] });\n *\n * // Create a table\n * await catalog.createTable(\n *   { namespace: ['analytics'] },\n *   {\n *     name: 'events',\n *     schema: { type: 'struct', fields: [...] }\n *   }\n * );\n * ```\n */\nexport class IcebergRestCatalog {\n  private readonly client: HttpClient\n  private readonly namespaceOps: NamespaceOperations\n  private readonly tableOps: TableOperations\n  private readonly accessDelegation?: string\n\n  /**\n   * Creates a new Iceberg REST Catalog client.\n   *\n   * @param options - Configuration options for the catalog client\n   */\n  constructor(options: IcebergRestCatalogOptions) {\n    let prefix = 'v1'\n    if (options.catalogName) {\n      prefix += `/${options.catalogName}`\n    }\n\n    const baseUrl = options.baseUrl.endsWith('/') ? options.baseUrl : `${options.baseUrl}/`\n\n    this.client = createFetchClient({\n      baseUrl,\n      auth: options.auth,\n      fetchImpl: options.fetch,\n    })\n\n    // Format accessDelegation as comma-separated string per spec\n    this.accessDelegation = options.accessDelegation?.join(',')\n\n    this.namespaceOps = new NamespaceOperations(this.client, prefix)\n    this.tableOps = new TableOperations(this.client, prefix, this.accessDelegation)\n  }\n\n  /**\n   * Lists all namespaces in the catalog.\n   *\n   * @param parent - Optional parent namespace to list children under\n   * @returns Array of namespace identifiers\n   *\n   * @example\n   * ```typescript\n   * // List all top-level namespaces\n   * const namespaces = await catalog.listNamespaces();\n   *\n   * // List namespaces under a parent\n   * const children = await catalog.listNamespaces({ namespace: ['analytics'] });\n   * ```\n   */\n  async listNamespaces(parent?: NamespaceIdentifier): Promise<NamespaceIdentifier[]> {\n    return this.namespaceOps.listNamespaces(parent)\n  }\n\n  /**\n   * Creates a new namespace in the catalog.\n   *\n   * @param id - Namespace identifier to create\n   * @param metadata - Optional metadata properties for the namespace\n   * @returns Response containing the created namespace and its properties\n   *\n   * @example\n   * ```typescript\n   * const response = await catalog.createNamespace(\n   *   { namespace: ['analytics'] },\n   *   { properties: { owner: 'data-team' } }\n   * );\n   * console.log(response.namespace); // ['analytics']\n   * console.log(response.properties); // { owner: 'data-team', ... }\n   * ```\n   */\n  async createNamespace(id: NamespaceIdentifier, metadata?: NamespaceMetadata): Promise<CreateNamespaceResponse> {\n    return this.namespaceOps.createNamespace(id, metadata)\n  }\n\n  /**\n   * Drops a namespace from the catalog.\n   *\n   * The namespace must be empty (contain no tables) before it can be dropped.\n   *\n   * @param id - Namespace identifier to drop\n   *\n   * @example\n   * ```typescript\n   * await catalog.dropNamespace({ namespace: ['analytics'] });\n   * ```\n   */\n  async dropNamespace(id: NamespaceIdentifier): Promise<void> {\n    await this.namespaceOps.dropNamespace(id)\n  }\n\n  /**\n   * Loads metadata for a namespace.\n   *\n   * @param id - Namespace identifier to load\n   * @returns Namespace metadata including properties\n   *\n   * @example\n   * ```typescript\n   * const metadata = await catalog.loadNamespaceMetadata({ namespace: ['analytics'] });\n   * console.log(metadata.properties);\n   * ```\n   */\n  async loadNamespaceMetadata(id: NamespaceIdentifier): Promise<NamespaceMetadata> {\n    return this.namespaceOps.loadNamespaceMetadata(id)\n  }\n\n  /**\n   * Lists all tables in a namespace.\n   *\n   * @param namespace - Namespace identifier to list tables from\n   * @returns Array of table identifiers\n   *\n   * @example\n   * ```typescript\n   * const tables = await catalog.listTables({ namespace: ['analytics'] });\n   * console.log(tables); // [{ namespace: ['analytics'], name: 'events' }, ...]\n   * ```\n   */\n  async listTables(namespace: NamespaceIdentifier): Promise<TableIdentifier[]> {\n    return this.tableOps.listTables(namespace)\n  }\n\n  /**\n   * Creates a new table in the catalog.\n   *\n   * @param namespace - Namespace to create the table in\n   * @param request - Table creation request including name, schema, partition spec, etc.\n   * @returns Table metadata for the created table\n   *\n   * @example\n   * ```typescript\n   * const metadata = await catalog.createTable(\n   *   { namespace: ['analytics'] },\n   *   {\n   *     name: 'events',\n   *     schema: {\n   *       type: 'struct',\n   *       fields: [\n   *         { id: 1, name: 'id', type: 'long', required: true },\n   *         { id: 2, name: 'timestamp', type: 'timestamp', required: true }\n   *       ],\n   *       'schema-id': 0\n   *     },\n   *     'partition-spec': {\n   *       'spec-id': 0,\n   *       fields: [\n   *         { source_id: 2, field_id: 1000, name: 'ts_day', transform: 'day' }\n   *       ]\n   *     }\n   *   }\n   * );\n   * ```\n   */\n  async createTable(\n    namespace: NamespaceIdentifier,\n    request: CreateTableRequest\n  ): Promise<TableMetadata> {\n    return this.tableOps.createTable(namespace, request)\n  }\n\n  /**\n   * Updates an existing table's metadata.\n   *\n   * Can update the schema, partition spec, or properties of a table.\n   *\n   * @param id - Table identifier to update\n   * @param request - Update request with fields to modify\n   * @returns Response containing the metadata location and updated table metadata\n   *\n   * @example\n   * ```typescript\n   * const response = await catalog.updateTable(\n   *   { namespace: ['analytics'], name: 'events' },\n   *   {\n   *     properties: { 'read.split.target-size': '134217728' }\n   *   }\n   * );\n   * console.log(response['metadata-location']); // s3://...\n   * console.log(response.metadata); // TableMetadata object\n   * ```\n   */\n  async updateTable(id: TableIdentifier, request: UpdateTableRequest): Promise<CommitTableResponse> {\n    return this.tableOps.updateTable(id, request)\n  }\n\n  /**\n   * Drops a table from the catalog.\n   *\n   * @param id - Table identifier to drop\n   *\n   * @example\n   * ```typescript\n   * await catalog.dropTable({ namespace: ['analytics'], name: 'events' });\n   * ```\n   */\n  async dropTable(id: TableIdentifier, options?: DropTableRequest): Promise<void> {\n    await this.tableOps.dropTable(id, options)\n  }\n\n  /**\n   * Loads metadata for a table.\n   *\n   * @param id - Table identifier to load\n   * @returns Table metadata including schema, partition spec, location, etc.\n   *\n   * @example\n   * ```typescript\n   * const metadata = await catalog.loadTable({ namespace: ['analytics'], name: 'events' });\n   * console.log(metadata.schema);\n   * console.log(metadata.location);\n   * ```\n   */\n  async loadTable(id: TableIdentifier): Promise<TableMetadata> {\n    return this.tableOps.loadTable(id)\n  }\n\n  /**\n   * Checks if a namespace exists in the catalog.\n   *\n   * @param id - Namespace identifier to check\n   * @returns True if the namespace exists, false otherwise\n   *\n   * @example\n   * ```typescript\n   * const exists = await catalog.namespaceExists({ namespace: ['analytics'] });\n   * console.log(exists); // true or false\n   * ```\n   */\n  async namespaceExists(id: NamespaceIdentifier): Promise<boolean> {\n    return this.namespaceOps.namespaceExists(id)\n  }\n\n  /**\n   * Checks if a table exists in the catalog.\n   *\n   * @param id - Table identifier to check\n   * @returns True if the table exists, false otherwise\n   *\n   * @example\n   * ```typescript\n   * const exists = await catalog.tableExists({ namespace: ['analytics'], name: 'events' });\n   * console.log(exists); // true or false\n   * ```\n   */\n  async tableExists(id: TableIdentifier): Promise<boolean> {\n    return this.tableOps.tableExists(id)\n  }\n\n  /**\n   * Creates a namespace if it does not exist.\n   *\n   * If the namespace already exists, returns void. If created, returns the response.\n   *\n   * @param id - Namespace identifier to create\n   * @param metadata - Optional metadata properties for the namespace\n   * @returns Response containing the created namespace and its properties, or void if it already exists\n   *\n   * @example\n   * ```typescript\n   * const response = await catalog.createNamespaceIfNotExists(\n   *   { namespace: ['analytics'] },\n   *   { properties: { owner: 'data-team' } }\n   * );\n   * if (response) {\n   *   console.log('Created:', response.namespace);\n   * } else {\n   *   console.log('Already exists');\n   * }\n   * ```\n   */\n  async createNamespaceIfNotExists(\n    id: NamespaceIdentifier,\n    metadata?: NamespaceMetadata\n  ): Promise<CreateNamespaceResponse | void> {\n    return this.namespaceOps.createNamespaceIfNotExists(id, metadata)\n  }\n\n  /**\n   * Creates a table if it does not exist.\n   *\n   * If the table already exists, returns its metadata instead.\n   *\n   * @param namespace - Namespace to create the table in\n   * @param request - Table creation request including name, schema, partition spec, etc.\n   * @returns Table metadata for the created or existing table\n   *\n   * @example\n   * ```typescript\n   * const metadata = await catalog.createTableIfNotExists(\n   *   { namespace: ['analytics'] },\n   *   {\n   *     name: 'events',\n   *     schema: {\n   *       type: 'struct',\n   *       fields: [\n   *         { id: 1, name: 'id', type: 'long', required: true },\n   *         { id: 2, name: 'timestamp', type: 'timestamp', required: true }\n   *       ],\n   *       'schema-id': 0\n   *     }\n   *   }\n   * );\n   * ```\n   */\n  async createTableIfNotExists(\n    namespace: NamespaceIdentifier,\n    request: CreateTableRequest\n  ): Promise<TableMetadata> {\n    return this.tableOps.createTableIfNotExists(namespace, request)\n  }\n}\n", "export interface NamespaceIdentifier {\n  namespace: string[]\n}\n\nexport interface NamespaceMetadata {\n  properties: Record<string, string>\n}\n\nexport interface TableIdentifier {\n  namespace: string[]\n  name: string\n}\n\n/**\n * Primitive types in Iceberg - all represented as strings.\n * Parameterized types use string format: decimal(precision,scale) and fixed[length]\n *\n * Note: The OpenAPI spec defines PrimitiveType as `type: string`, so any string is valid.\n * We include known types for autocomplete, plus a catch-all for flexibility.\n */\nexport type PrimitiveType =\n  | 'boolean'\n  | 'int'\n  | 'long'\n  | 'float'\n  | 'double'\n  | 'string'\n  | 'timestamp'\n  | 'date'\n  | 'time'\n  | 'timestamptz'\n  | 'uuid'\n  | 'binary'\n  | `decimal(${number},${number})`\n  | `fixed[${number}]`\n  | (string & {}) // catch-all for any format (e.g., \"decimal(10, 2)\" with spaces) and future types\n\n/**\n * Regex patterns for parsing parameterized types.\n * These allow flexible whitespace matching.\n */\nconst DECIMAL_REGEX = /^decimal\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/\nconst FIXED_REGEX = /^fixed\\s*\\[\\s*(\\d+)\\s*\\]$/\n\n/**\n * Parse a decimal type string into its components.\n * Handles any whitespace formatting (e.g., \"decimal(10,2)\", \"decimal(10, 2)\", \"decimal( 10 , 2 )\").\n *\n * @param type - The type string to parse\n * @returns Object with precision and scale, or null if not a valid decimal type\n */\nexport function parseDecimalType(type: string): { precision: number; scale: number } | null {\n  const match = type.match(DECIMAL_REGEX)\n  if (!match) return null\n  return {\n    precision: parseInt(match[1], 10),\n    scale: parseInt(match[2], 10),\n  }\n}\n\n/**\n * Parse a fixed type string into its length.\n * Handles any whitespace formatting (e.g., \"fixed[16]\", \"fixed[ 16 ]\").\n *\n * @param type - The type string to parse\n * @returns Object with length, or null if not a valid fixed type\n */\nexport function parseFixedType(type: string): { length: number } | null {\n  const match = type.match(FIXED_REGEX)\n  if (!match) return null\n  return {\n    length: parseInt(match[1], 10),\n  }\n}\n\n/**\n * Check if a type string is a decimal type.\n */\nexport function isDecimalType(type: string): boolean {\n  return DECIMAL_REGEX.test(type)\n}\n\n/**\n * Check if a type string is a fixed type.\n */\nexport function isFixedType(type: string): boolean {\n  return FIXED_REGEX.test(type)\n}\n\n/**\n * Compare two Iceberg type strings for equality, ignoring whitespace differences.\n * This is useful when comparing types from user input vs catalog responses,\n * as catalogs may normalize whitespace differently.\n *\n * @param a - First type string\n * @param b - Second type string\n * @returns true if the types are equivalent\n */\nexport function typesEqual(a: string, b: string): boolean {\n  // For decimal types, compare parsed values\n  const decimalA = parseDecimalType(a)\n  const decimalB = parseDecimalType(b)\n  if (decimalA && decimalB) {\n    return decimalA.precision === decimalB.precision && decimalA.scale === decimalB.scale\n  }\n\n  // For fixed types, compare parsed values\n  const fixedA = parseFixedType(a)\n  const fixedB = parseFixedType(b)\n  if (fixedA && fixedB) {\n    return fixedA.length === fixedB.length\n  }\n\n  // For other types, direct string comparison\n  return a === b\n}\n\n/**\n * Struct type - a nested structure containing fields.\n * Used for nested records within a field.\n */\nexport interface StructType {\n  type: 'struct'\n  fields: StructField[]\n}\n\n/**\n * List type - an array of elements.\n */\nexport interface ListType {\n  type: 'list'\n  'element-id': number\n  element: IcebergType\n  'element-required': boolean\n}\n\n/**\n * Map type - a key-value mapping.\n */\nexport interface MapType {\n  type: 'map'\n  'key-id': number\n  key: IcebergType\n  'value-id': number\n  value: IcebergType\n  'value-required': boolean\n}\n\n/**\n * Union of all Iceberg types.\n * Can be a primitive type (string) or a complex type (struct, list, map).\n */\nexport type IcebergType = PrimitiveType | StructType | ListType | MapType\n\n/**\n * Primitive type values for default values.\n * Represents the possible values for initial-default and write-default.\n */\nexport type PrimitiveTypeValue = boolean | number | string\n\n/**\n * A field within a struct (used in nested StructType).\n */\nexport interface StructField {\n  id: number\n  name: string\n  type: IcebergType\n  required: boolean\n  doc?: string\n  'initial-default'?: PrimitiveTypeValue\n  'write-default'?: PrimitiveTypeValue\n}\n\n/**\n * A field within a table schema (top-level).\n * Equivalent to StructField but kept for backwards compatibility.\n */\nexport interface TableField {\n  id: number\n  name: string\n  type: IcebergType\n  required: boolean\n  doc?: string\n  'initial-default'?: PrimitiveTypeValue\n  'write-default'?: PrimitiveTypeValue\n}\n\nexport interface TableSchema {\n  type: 'struct'\n  fields: TableField[]\n  'schema-id'?: number\n  'identifier-field-ids'?: number[]\n}\n\nexport interface PartitionField {\n  source_id: number\n  field_id: number\n  name: string\n  transform: string\n}\n\nexport interface PartitionSpec {\n  'spec-id': number\n  fields: PartitionField[]\n}\n\nexport interface SortField {\n  source_id: number\n  transform: string\n  direction: 'asc' | 'desc'\n  null_order: 'nulls-first' | 'nulls-last'\n}\n\nexport interface SortOrder {\n  'order-id': number\n  fields: SortField[]\n}\n\nexport interface CreateTableRequest {\n  name: string\n  schema: TableSchema\n  'partition-spec'?: PartitionSpec\n  'write-order'?: SortOrder\n  properties?: Record<string, string>\n  'stage-create'?: boolean\n}\n\nexport interface UpdateTableRequest {\n  schema?: TableSchema\n  'partition-spec'?: PartitionSpec\n  properties?: Record<string, string>\n}\n\nexport interface DropTableRequest {\n  purge?: boolean\n}\n\nexport interface TableMetadata {\n  name?: string\n  location: string\n  schemas: TableSchema[]\n  'current-schema-id': number\n  'partition-specs': PartitionSpec[]\n  'default-spec-id'?: number\n  'sort-orders': SortOrder[]\n  'default-sort-order-id'?: number\n  properties: Record<string, string>\n  'metadata-location'?: string\n  'current-snapshot-id'?: number\n  snapshots?: unknown[]\n  'snapshot-log'?: unknown[]\n  'metadata-log'?: unknown[]\n  refs?: Record<string, unknown>\n  'last-updated-ms'?: number\n  'last-column-id'?: number\n  'last-sequence-number'?: number\n  'table-uuid'?: string\n  'format-version'?: number\n  'last-partition-id'?: number\n}\n\nexport interface CreateNamespaceRequest {\n  namespace: string[]\n  properties?: Record<string, string>\n}\n\nexport interface CreateNamespaceResponse {\n  namespace: string[]\n  properties?: Record<string, string>\n}\n\nexport interface GetNamespaceResponse {\n  namespace: string[]\n  properties: Record<string, string>\n}\n\nexport interface ListNamespacesResponse {\n  namespaces: string[][]\n  'next-page-token'?: string\n}\n\nexport interface ListTablesResponse {\n  identifiers: TableIdentifier[]\n  'next-page-token'?: string\n}\n\nexport interface LoadTableResponse {\n  'metadata-location': string\n  metadata: TableMetadata\n  config?: Record<string, string>\n}\n\nexport interface CommitTableResponse {\n  'metadata-location': string\n  metadata: TableMetadata\n}\n\n/**\n * Gets the current (active) schema from table metadata.\n *\n * @param metadata - Table metadata containing schemas array and current-schema-id\n * @returns The current table schema, or undefined if not found\n */\nexport function getCurrentSchema(metadata: TableMetadata): TableSchema | undefined {\n  return metadata.schemas.find((s) => s['schema-id'] === metadata['current-schema-id'])\n}\n", "/**\n * Namespace type for error classes\n * Determines the error class names and type guards\n */\nexport type ErrorNamespace = 'storage' | 'vectors'\n\n/**\n * Base error class for all Storage errors\n * Supports both 'storage' and 'vectors' namespaces\n */\nexport class StorageError extends Error {\n  protected __isStorageError = true\n  protected namespace: ErrorNamespace\n  status: number | undefined\n  statusCode: string | undefined\n\n  constructor(\n    message: string,\n    namespace: ErrorNamespace = 'storage',\n    status?: number,\n    statusCode?: string\n  ) {\n    super(message)\n    this.namespace = namespace\n    this.name = namespace === 'vectors' ? 'StorageVectorsError' : 'StorageError'\n    this.status = status\n    this.statusCode = statusCode\n  }\n\n  toJSON(): {\n    name: string\n    message: string\n    status: number | undefined\n    statusCode: string | undefined\n  } {\n    return {\n      name: this.name,\n      message: this.message,\n      status: this.status,\n      statusCode: this.statusCode,\n    }\n  }\n}\n\n/**\n * Type guard to check if an error is a StorageError\n * @param error - The error to check\n * @returns True if the error is a StorageError\n */\nexport function isStorageError(error: unknown): error is StorageError {\n  return typeof error === 'object' && error !== null && '__isStorageError' in error\n}\n\n/**\n * API error returned from Storage service\n * Includes HTTP status code and service-specific error code\n */\nexport class StorageApiError extends StorageError {\n  override status: number\n  override statusCode: string\n\n  constructor(\n    message: string,\n    status: number,\n    statusCode: string,\n    namespace: ErrorNamespace = 'storage'\n  ) {\n    super(message, namespace, status, statusCode)\n    this.name = namespace === 'vectors' ? 'StorageVectorsApiError' : 'StorageApiError'\n    this.status = status\n    this.statusCode = statusCode\n  }\n\n  toJSON(): {\n    name: string\n    message: string\n    status: number | undefined\n    statusCode: string | undefined\n  } {\n    return {\n      ...super.toJSON(),\n    }\n  }\n}\n\n/**\n * Unknown error that doesn't match expected error patterns\n * Wraps the original error for debugging\n */\nexport class StorageUnknownError extends StorageError {\n  originalError: unknown\n\n  constructor(message: string, originalError: unknown, namespace: ErrorNamespace = 'storage') {\n    super(message, namespace)\n    this.name = namespace === 'vectors' ? 'StorageVectorsUnknownError' : 'StorageUnknownError'\n    this.originalError = originalError\n  }\n}\n\n// ============================================================================\n// Backward Compatibility Exports for Vectors\n// ============================================================================\n\n/**\n * @deprecated Use StorageError with namespace='vectors' instead\n * Alias for backward compatibility with existing vector storage code\n */\nexport class StorageVectorsError extends StorageError {\n  constructor(message: string) {\n    super(message, 'vectors')\n  }\n}\n\n/**\n * Type guard to check if an error is a StorageVectorsError\n * @param error - The error to check\n * @returns True if the error is a StorageVectorsError\n */\nexport function isStorageVectorsError(error: unknown): error is StorageVectorsError {\n  return isStorageError(error) && (error as StorageError)['namespace'] === 'vectors'\n}\n\n/**\n * @deprecated Use StorageApiError with namespace='vectors' instead\n * Alias for backward compatibility with existing vector storage code\n */\nexport class StorageVectorsApiError extends StorageApiError {\n  constructor(message: string, status: number, statusCode: string) {\n    super(message, status, statusCode, 'vectors')\n  }\n}\n\n/**\n * @deprecated Use StorageUnknownError with namespace='vectors' instead\n * Alias for backward compatibility with existing vector storage code\n */\nexport class StorageVectorsUnknownError extends StorageUnknownError {\n  constructor(message: string, originalError: unknown) {\n    super(message, originalError, 'vectors')\n  }\n}\n\n/**\n * Error codes specific to S3 Vectors API\n * Maps AWS service errors to application-friendly error codes\n */\nexport enum StorageVectorsErrorCode {\n  /** Internal server fault (HTTP 500) */\n  InternalError = 'InternalError',\n  /** Resource already exists / conflict (HTTP 409) */\n  S3VectorConflictException = 'S3VectorConflictException',\n  /** Resource not found (HTTP 404) */\n  S3VectorNotFoundException = 'S3VectorNotFoundException',\n  /** Delete bucket while not empty (HTTP 400) */\n  S3VectorBucketNotEmpty = 'S3VectorBucketNotEmpty',\n  /** Exceeds bucket quota/limit (HTTP 400) */\n  S3VectorMaxBucketsExceeded = 'S3VectorMaxBucketsExceeded',\n  /** Exceeds index quota/limit (HTTP 400) */\n  S3VectorMaxIndexesExceeded = 'S3VectorMaxIndexesExceeded',\n}\n", "/**\n * Sets a header with case-insensitive deduplication.\n * Removes any existing headers whose name matches (case-insensitive),\n * then sets the value under the lowercase key. Does not mutate the input object.\n *\n * @param headers - Existing headers object\n * @param name - Header name to set (stored as lowercase)\n * @param value - Header value\n * @returns New headers object with the header set\n */\nexport function setHeader(\n  headers: Record<string, string>,\n  name: string,\n  value: string\n): Record<string, string> {\n  const result = { ...headers }\n  const nameLower = name.toLowerCase()\n\n  for (const key of Object.keys(result)) {\n    if (key.toLowerCase() === nameLower) {\n      delete result[key]\n    }\n  }\n\n  result[nameLower] = value\n  return result\n}\n\n/**\n * Normalizes all header keys to lowercase with case-insensitive deduplication.\n * When duplicate keys exist (differing only in case), the last value wins.\n * Does not mutate the input object.\n *\n * @param headers - Headers object to normalize\n * @returns New headers object with all keys lowercased\n */\nexport function normalizeHeaders(headers: Record<string, string>): Record<string, string> {\n  const result: Record<string, string> = {}\n  for (const [key, value] of Object.entries(headers)) {\n    result[key.toLowerCase()] = value\n  }\n  return result\n}\n", "type Fetch = typeof fetch\n\n/**\n * Resolves the fetch implementation to use\n * Uses custom fetch if provided, otherwise uses native fetch\n *\n * @param customFetch - Optional custom fetch implementation\n * @returns Resolved fetch function\n */\nexport const resolveFetch = (customFetch?: Fetch): Fetch => {\n  if (customFetch) {\n    return (...args) => customFetch(...args)\n  }\n  return (...args) => fetch(...args)\n}\n\n/**\n * Resolves the Response constructor to use\n * Returns native Response constructor\n *\n * @returns Response constructor\n */\nexport const resolveResponse = (): typeof Response => {\n  return Response\n}\n\n/**\n * Determine if input is a plain object\n * An object is plain if it's created by either {}, new Object(), or Object.create(null)\n *\n * @param value - Value to check\n * @returns True if value is a plain object\n * @source https://github.com/sindresorhus/is-plain-obj\n */\nexport const isPlainObject = (value: object): boolean => {\n  if (typeof value !== 'object' || value === null) {\n    return false\n  }\n\n  const prototype = Object.getPrototypeOf(value)\n  return (\n    (prototype === null ||\n      prototype === Object.prototype ||\n      Object.getPrototypeOf(prototype) === null) &&\n    !(Symbol.toStringTag in value) &&\n    !(Symbol.iterator in value)\n  )\n}\n\n/**\n * Recursively converts object keys from snake_case to camelCase\n * Used for normalizing API responses\n *\n * @param item - Object to convert\n * @returns Converted object with camelCase keys\n */\nexport const recursiveToCamel = (item: Record<string, any>): unknown => {\n  if (Array.isArray(item)) {\n    return item.map((el) => recursiveToCamel(el))\n  } else if (typeof item === 'function' || item !== Object(item)) {\n    return item\n  }\n\n  const result: Record<string, any> = {}\n  Object.entries(item).forEach(([key, value]) => {\n    const newKey = key.replace(/([-_][a-z])/gi, (c) => c.toUpperCase().replace(/[-_]/g, ''))\n    result[newKey] = recursiveToCamel(value)\n  })\n\n  return result\n}\n\n/**\n * Validates if a given bucket name is valid according to Supabase Storage API rules\n * Mirrors backend validation from: storage/src/storage/limits.ts:isValidBucketName()\n *\n * Rules:\n * - Length: 1-100 characters\n * - Allowed characters: alphanumeric (a-z, A-Z, 0-9), underscore (_), and safe special characters\n * - Safe special characters: ! - . * ' ( ) space & $ @ = ; : + , ?\n * - Forbidden: path separators (/, \\), path traversal (..), leading/trailing whitespace\n *\n * AWS S3 Reference: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html\n *\n * @param bucketName - The bucket name to validate\n * @returns true if valid, false otherwise\n */\nexport const isValidBucketName = (bucketName: string): boolean => {\n  if (!bucketName || typeof bucketName !== 'string') {\n    return false\n  }\n\n  // Check length constraints (1-100 characters)\n  if (bucketName.length === 0 || bucketName.length > 100) {\n    return false\n  }\n\n  // Check for leading/trailing whitespace\n  if (bucketName.trim() !== bucketName) {\n    return false\n  }\n\n  // Explicitly reject path separators (security)\n  // Note: Consecutive periods (..) are allowed by backend - the AWS restriction\n  // on relative paths applies to object keys, not bucket names\n  if (bucketName.includes('/') || bucketName.includes('\\\\')) {\n    return false\n  }\n\n  // Validate against allowed character set\n  // Pattern matches backend regex: /^(\\w|!|-|\\.|\\*|'|\\(|\\)| |&|\\$|@|=|;|:|\\+|,|\\?)*$/\n  // This explicitly excludes path separators (/, \\) and other problematic characters\n  const bucketNameRegex = /^[\\w!.\\*'() &$@=;:+,?-]+$/\n  return bucketNameRegex.test(bucketName)\n}\n\n/**\n * Normalizes a number array to float32 format\n * Ensures all vector values are valid 32-bit floats\n *\n * @param values - Array of numbers to normalize\n * @returns Normalized float32 array\n */\nexport const normalizeToFloat32 = (values: number[]): number[] => {\n  // Use Float32Array to ensure proper precision\n  return Array.from(new Float32Array(values))\n}\n\n/**\n * Validates vector dimensions match expected dimension\n * Throws error if dimensions don't match\n *\n * @param vector - Vector data to validate\n * @param expectedDimension - Expected vector dimension\n * @throws Error if dimensions don't match\n */\nexport const validateVectorDimension = (\n  vector: { float32: number[] },\n  expectedDimension?: number\n): void => {\n  if (expectedDimension !== undefined && vector.float32.length !== expectedDimension) {\n    throw new Error(\n      `Vector dimension mismatch: expected ${expectedDimension}, got ${vector.float32.length}`\n    )\n  }\n}\n", "import { StorageApiError, StorageError, StorageUnknownError, ErrorNamespace } from './errors'\nimport { setHeader } from './headers'\nimport { isPlainObject, resolveResponse } from './helpers'\nimport { FetchParameters } from '../types'\n\nexport type Fetch = typeof fetch\n\n/**\n * Options for fetch requests\n */\nexport interface FetchOptions {\n  headers?: {\n    [key: string]: string\n  }\n  duplex?: string\n  noResolveJson?: boolean\n}\n\n/**\n * HTTP methods supported by the API\n */\nexport type RequestMethodType = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'HEAD'\n\n/**\n * Extracts error message from various error response formats\n * @param err - Error object from API\n * @returns Human-readable error message\n */\nconst _getErrorMessage = (err: unknown): string => {\n  if (typeof err === 'object' && err !== null) {\n    const e = err as Record<string, unknown>\n    if (typeof e.msg === 'string') return e.msg\n    if (typeof e.message === 'string') return e.message\n    if (typeof e.error_description === 'string') return e.error_description\n    if (typeof e.error === 'string') return e.error\n    if (typeof e.error === 'object' && e.error !== null) {\n      const nested = e.error as Record<string, unknown>\n      if (typeof nested.message === 'string') return nested.message\n    }\n  }\n  return JSON.stringify(err)\n}\n\n/**\n * Handles fetch errors and converts them to Storage error types\n * @param error - The error caught from fetch\n * @param reject - Promise rejection function\n * @param options - Fetch options that may affect error handling\n * @param namespace - Error namespace ('storage' or 'vectors')\n */\nconst handleError = async (\n  error: unknown,\n  reject: (reason: StorageError) => void,\n  options: FetchOptions | undefined,\n  namespace: ErrorNamespace\n) => {\n  // Structural detection of json() method, present in all Response implementations\n  // (native, node-fetch, cross-fetch, undici) and absent from standard Error objects.\n  // Checking 'ok' or 'status' via `in` is unreliable across fetch polyfills/realms.\n  const isResponseLike =\n    error !== null &&\n    typeof error === 'object' &&\n    'json' in error &&\n    typeof (error as Record<string, unknown>).json === 'function'\n\n  if (isResponseLike) {\n    const responseError = error as Response\n    // Defensive coercion: some fetch polyfills have historically returned status as a string.\n    let status = parseInt(String(responseError.status), 10)\n    if (!Number.isFinite(status)) {\n      status = 500\n    }\n\n    responseError\n      .json()\n      .then(\n        (err: { statusCode?: string; code?: string; error?: string; message?: string } | null) => {\n          const statusCode = err?.statusCode || err?.code || status + ''\n          reject(new StorageApiError(_getErrorMessage(err), status, statusCode, namespace))\n        }\n      )\n      .catch(() => {\n        const statusCode = status + ''\n        const message = responseError.statusText || `HTTP ${status} error`\n        reject(new StorageApiError(message, status, statusCode, namespace))\n      })\n  } else {\n    reject(new StorageUnknownError(_getErrorMessage(error), error, namespace))\n  }\n}\n\n/**\n * Builds request parameters for fetch calls\n * @param method - HTTP method\n * @param options - Custom fetch options\n * @param parameters - Additional fetch parameters like AbortSignal\n * @param body - Request body (will be JSON stringified if plain object)\n * @returns Complete fetch request parameters\n */\nconst _getRequestParams = (\n  method: RequestMethodType,\n  options?: FetchOptions,\n  parameters?: FetchParameters,\n  body?: object\n) => {\n  const params: { [k: string]: any } = { method, headers: options?.headers || {} }\n\n  if (method === 'GET' || method === 'HEAD' || !body) {\n    return { ...params, ...parameters }\n  }\n\n  if (isPlainObject(body)) {\n    const headers = options?.headers || {}\n    let contentType: string | undefined\n\n    for (const [key, value] of Object.entries(headers)) {\n      if (key.toLowerCase() === 'content-type') {\n        contentType = value\n      }\n    }\n\n    params.headers = setHeader(headers, 'Content-Type', contentType ?? 'application/json')\n    params.body = JSON.stringify(body)\n  } else {\n    params.body = body\n  }\n\n  if (options?.duplex) {\n    params.duplex = options.duplex\n  }\n\n  return { ...params, ...parameters }\n}\n\n/**\n * Internal request handler that wraps fetch with error handling\n * @param fetcher - Fetch function to use\n * @param method - HTTP method\n * @param url - Request URL\n * @param options - Custom fetch options\n * @param parameters - Additional fetch parameters\n * @param body - Request body\n * @param namespace - Error namespace ('storage' or 'vectors')\n * @returns Promise with parsed response or error\n */\nasync function _handleRequest(\n  fetcher: Fetch,\n  method: RequestMethodType,\n  url: string,\n  options: FetchOptions | undefined,\n  parameters: FetchParameters | undefined,\n  body: object | undefined,\n  namespace: ErrorNamespace\n): Promise<any> {\n  return new Promise((resolve, reject) => {\n    fetcher(url, _getRequestParams(method, options, parameters, body))\n      .then((result) => {\n        if (!result.ok) throw result\n        if (options?.noResolveJson) return result\n\n        // AWS S3 Vectors API returns 200 OK with content-length: 0 for successful mutations\n        // (putVectors, deleteVectors) instead of 204 or JSON response. This is AWS's design choice\n        // for performance optimization of bulk operations (up to 500 vectors per request).\n        // We handle this to prevent \"Unexpected end of JSON input\" errors when calling result.json()\n        if (namespace === 'vectors') {\n          const contentType = result.headers.get('content-type')\n          const contentLength = result.headers.get('content-length')\n\n          // Return empty object for explicitly empty responses\n          if (contentLength === '0' || result.status === 204) {\n            return {}\n          }\n\n          // Return empty object if no JSON content type\n          if (!contentType || !contentType.includes('application/json')) {\n            return {}\n          }\n        }\n\n        return result.json()\n      })\n      .then((data) => resolve(data))\n      .catch((error) => handleError(error, reject, options, namespace))\n  })\n}\n\n/**\n * Creates a fetch API with the specified namespace\n * @param namespace - Error namespace ('storage' or 'vectors')\n * @returns Object with HTTP method functions\n */\nexport function createFetchApi(namespace: ErrorNamespace = 'storage') {\n  return {\n    /**\n     * Performs a GET request\n     * @param fetcher - Fetch function to use\n     * @param url - Request URL\n     * @param options - Custom fetch options\n     * @param parameters - Additional fetch parameters\n     * @returns Promise with parsed response\n     */\n    get: async (\n      fetcher: Fetch,\n      url: string,\n      options?: FetchOptions,\n      parameters?: FetchParameters\n    ): Promise<any> => {\n      return _handleRequest(fetcher, 'GET', url, options, parameters, undefined, namespace)\n    },\n\n    /**\n     * Performs a POST request\n     * @param fetcher - Fetch function to use\n     * @param url - Request URL\n     * @param body - Request body to be JSON stringified\n     * @param options - Custom fetch options\n     * @param parameters - Additional fetch parameters\n     * @returns Promise with parsed response\n     */\n    post: async (\n      fetcher: Fetch,\n      url: string,\n      body: object,\n      options?: FetchOptions,\n      parameters?: FetchParameters\n    ): Promise<any> => {\n      return _handleRequest(fetcher, 'POST', url, options, parameters, body, namespace)\n    },\n\n    /**\n     * Performs a PUT request\n     * @param fetcher - Fetch function to use\n     * @param url - Request URL\n     * @param body - Request body to be JSON stringified\n     * @param options - Custom fetch options\n     * @param parameters - Additional fetch parameters\n     * @returns Promise with parsed response\n     */\n    put: async (\n      fetcher: Fetch,\n      url: string,\n      body: object,\n      options?: FetchOptions,\n      parameters?: FetchParameters\n    ): Promise<any> => {\n      return _handleRequest(fetcher, 'PUT', url, options, parameters, body, namespace)\n    },\n\n    /**\n     * Performs a HEAD request\n     * @param fetcher - Fetch function to use\n     * @param url - Request URL\n     * @param options - Custom fetch options\n     * @param parameters - Additional fetch parameters\n     * @returns Promise with Response object (not JSON parsed)\n     */\n    head: async (\n      fetcher: Fetch,\n      url: string,\n      options?: FetchOptions,\n      parameters?: FetchParameters\n    ): Promise<any> => {\n      return _handleRequest(\n        fetcher,\n        'HEAD',\n        url,\n        {\n          ...options,\n          noResolveJson: true,\n        },\n        parameters,\n        undefined,\n        namespace\n      )\n    },\n\n    /**\n     * Performs a DELETE request\n     * @param fetcher - Fetch function to use\n     * @param url - Request URL\n     * @param body - Request body to be JSON stringified\n     * @param options - Custom fetch options\n     * @param parameters - Additional fetch parameters\n     * @returns Promise with parsed response\n     */\n    remove: async (\n      fetcher: Fetch,\n      url: string,\n      body: object,\n      options?: FetchOptions,\n      parameters?: FetchParameters\n    ): Promise<any> => {\n      return _handleRequest(fetcher, 'DELETE', url, options, parameters, body, namespace)\n    },\n  }\n}\n\n// Default exports for backward compatibility with 'storage' namespace\nconst defaultApi = createFetchApi('storage')\nexport const { get, post, put, head, remove } = defaultApi\n\n// Vectors API with 'vectors' namespace for proper error handling\nexport const vectorsApi = createFetchApi('vectors')\n", "import { ErrorNamespace, isStorageError, StorageError } from './errors'\nimport { Fetch } from './fetch'\nimport { normalizeHeaders, setHeader as setHeaderUtil } from './headers'\nimport { resolveFetch } from './helpers'\n\n/**\n * @ignore\n * Base API client class for all Storage API classes\n * Provides common infrastructure for error handling and configuration\n *\n * @typeParam TError - The error type (StorageError or subclass)\n */\nexport default abstract class BaseApiClient<TError extends StorageError = StorageError> {\n  protected url: string\n  protected headers: { [key: string]: string }\n  protected fetch: Fetch\n  protected shouldThrowOnError = false\n  protected namespace: ErrorNamespace\n\n  /**\n   * Creates a new BaseApiClient instance\n   * @param url - Base URL for API requests\n   * @param headers - Default headers for API requests\n   * @param fetch - Optional custom fetch implementation\n   * @param namespace - Error namespace ('storage' or 'vectors')\n   */\n  constructor(\n    url: string,\n    headers: { [key: string]: string } = {},\n    fetch?: Fetch,\n    namespace: ErrorNamespace = 'storage'\n  ) {\n    this.url = url\n    this.headers = normalizeHeaders(headers)\n    this.fetch = resolveFetch(fetch)\n    this.namespace = namespace\n  }\n\n  /**\n   * Enable throwing errors instead of returning them.\n   * When enabled, errors are thrown instead of returned in { data, error } format.\n   *\n   * @returns this - For method chaining\n   */\n  public throwOnError(): this {\n    this.shouldThrowOnError = true\n    return this\n  }\n\n  /**\n   * Set an HTTP header for the request.\n   * Creates a shallow copy of headers to avoid mutating shared state.\n   *\n   * @param name - Header name\n   * @param value - Header value\n   * @returns this - For method chaining\n   */\n  public setHeader(name: string, value: string): this {\n    this.headers = setHeaderUtil(this.headers, name, value)\n    return this\n  }\n\n  /**\n   * Handles API operation with standardized error handling\n   * Eliminates repetitive try-catch blocks across all API methods\n   *\n   * This wrapper:\n   * 1. Executes the operation\n   * 2. Returns { data, error: null } on success\n   * 3. Returns { data: null, error } on failure (if shouldThrowOnError is false)\n   * 4. Throws error on failure (if shouldThrowOnError is true)\n   *\n   * @typeParam T - The expected data type from the operation\n   * @param operation - Async function that performs the API call\n   * @returns Promise with { data, error } tuple\n   *\n   * @example Handling an operation\n   * ```typescript\n   * async listBuckets() {\n   *   return this.handleOperation(async () => {\n   *     return await get(this.fetch, `${this.url}/bucket`, {\n   *       headers: this.headers,\n   *     })\n   *   })\n   * }\n   * ```\n   */\n  protected async handleOperation<T>(\n    operation: () => Promise<T>\n  ): Promise<{ data: T; error: null } | { data: null; error: TError }> {\n    try {\n      const data = await operation()\n      return { data, error: null }\n    } catch (error) {\n      if (this.shouldThrowOnError) {\n        throw error\n      }\n      if (isStorageError(error)) {\n        return { data: null, error: error as TError }\n      }\n      throw error\n    }\n  }\n}\n", "import { isStorageError } from '../lib/common/errors'\nimport { DownloadResult } from '../lib/types'\n\nexport default class StreamDownloadBuilder implements Promise<DownloadResult<ReadableStream>> {\n  readonly [Symbol.toStringTag]: string = 'StreamDownloadBuilder'\n  private promise: Promise<DownloadResult<ReadableStream>> | null = null\n\n  constructor(\n    private downloadFn: () => Promise<Response>,\n    private shouldThrowOnError: boolean\n  ) {}\n\n  then<TResult1 = DownloadResult<ReadableStream>, TResult2 = never>(\n    onfulfilled?:\n      | ((value: DownloadResult<ReadableStream>) => TResult1 | PromiseLike<TResult1>)\n      | null,\n    onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null\n  ): Promise<TResult1 | TResult2> {\n    return this.getPromise().then(onfulfilled, onrejected)\n  }\n\n  catch<TResult = never>(\n    onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null\n  ): Promise<DownloadResult<ReadableStream> | TResult> {\n    return this.getPromise().catch(onrejected)\n  }\n\n  finally(onfinally?: (() => void) | null): Promise<DownloadResult<ReadableStream>> {\n    return this.getPromise().finally(onfinally)\n  }\n\n  private getPromise(): Promise<DownloadResult<ReadableStream>> {\n    if (!this.promise) {\n      this.promise = this.execute()\n    }\n    return this.promise\n  }\n\n  private async execute(): Promise<DownloadResult<ReadableStream>> {\n    try {\n      const result = await this.downloadFn()\n\n      return {\n        data: result.body as ReadableStream,\n        error: null,\n      }\n    } catch (error) {\n      if (this.shouldThrowOnError) {\n        throw error\n      }\n\n      if (isStorageError(error)) {\n        return { data: null, error }\n      }\n\n      throw error\n    }\n  }\n}\n", "import { isStorageError } from '../lib/common/errors'\nimport { DownloadResult } from '../lib/types'\nimport StreamDownloadBuilder from './StreamDownloadBuilder'\n\nexport default class BlobDownloadBuilder implements Promise<DownloadResult<Blob>> {\n  readonly [Symbol.toStringTag]: string = 'BlobDownloadBuilder'\n  private promise: Promise<DownloadResult<Blob>> | null = null\n\n  constructor(\n    private downloadFn: () => Promise<Response>,\n    private shouldThrowOnError: boolean\n  ) {}\n\n  asStream(): StreamDownloadBuilder {\n    return new StreamDownloadBuilder(this.downloadFn, this.shouldThrowOnError)\n  }\n\n  then<TResult1 = DownloadResult<Blob>, TResult2 = never>(\n    onfulfilled?: ((value: DownloadResult<Blob>) => TResult1 | PromiseLike<TResult1>) | null,\n    onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null\n  ): Promise<TResult1 | TResult2> {\n    return this.getPromise().then(onfulfilled, onrejected)\n  }\n\n  catch<TResult = never>(\n    onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null\n  ): Promise<DownloadResult<Blob> | TResult> {\n    return this.getPromise().catch(onrejected)\n  }\n\n  finally(onfinally?: (() => void) | null): Promise<DownloadResult<Blob>> {\n    return this.getPromise().finally(onfinally)\n  }\n\n  private getPromise(): Promise<DownloadResult<Blob>> {\n    if (!this.promise) {\n      this.promise = this.execute()\n    }\n    return this.promise\n  }\n\n  private async execute(): Promise<DownloadResult<Blob>> {\n    try {\n      const result = await this.downloadFn()\n\n      return {\n        data: await result.blob(),\n        error: null,\n      }\n    } catch (error) {\n      if (this.shouldThrowOnError) {\n        throw error\n      }\n\n      if (isStorageError(error)) {\n        return { data: null, error }\n      }\n\n      throw error\n    }\n  }\n}\n", "import {\n  StorageApiError,\n  StorageError,\n  StorageUnknownError,\n  isStorageError,\n} from '../lib/common/errors'\nimport { get, head, post, put, remove, Fetch } from '../lib/common/fetch'\nimport { setHeader } from '../lib/common/headers'\nimport { recursiveToCamel } from '../lib/common/helpers'\nimport BaseApiClient from '../lib/common/BaseApiClient'\nimport {\n  FileObject,\n  FileOptions,\n  SearchOptions,\n  FetchParameters,\n  TransformOptions,\n  DestinationOptions,\n  FileObjectV2,\n  Camelize,\n  SearchV2Options,\n  SearchV2Result,\n} from '../lib/types'\nimport BlobDownloadBuilder from './BlobDownloadBuilder'\n\nconst DEFAULT_SEARCH_OPTIONS = {\n  limit: 100,\n  offset: 0,\n  sortBy: {\n    column: 'name',\n    order: 'asc',\n  },\n}\n\nconst DEFAULT_FILE_OPTIONS: FileOptions = {\n  cacheControl: '3600',\n  contentType: 'text/plain;charset=UTF-8',\n  upsert: false,\n}\n\ntype FileBody =\n  | ArrayBuffer\n  | ArrayBufferView\n  | Blob\n  | Buffer\n  | File\n  | FormData\n  | NodeJS.ReadableStream\n  | ReadableStream<Uint8Array>\n  | URLSearchParams\n  | string\n\nexport default class StorageFileApi extends BaseApiClient<StorageError> {\n  protected bucketId: string | undefined\n\n  constructor(\n    url: string,\n    headers: { [key: string]: string } = {},\n    bucketId?: string,\n    fetch?: Fetch\n  ) {\n    super(url, headers, fetch, 'storage')\n    this.bucketId = bucketId\n  }\n\n  /**\n   * Uploads a file to an existing bucket or replaces an existing file at the specified path with a new one.\n   *\n   * @param method HTTP method.\n   * @param path The relative file path. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\n   * @param fileBody The body of the file to be stored in the bucket.\n   */\n  private async uploadOrUpdate(\n    method: 'POST' | 'PUT',\n    path: string,\n    fileBody: FileBody,\n    fileOptions?: FileOptions\n  ): Promise<\n    | {\n        data: { id: string; path: string; fullPath: string }\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      let body\n      const options = { ...DEFAULT_FILE_OPTIONS, ...fileOptions }\n      let headers: Record<string, string> = {\n        ...this.headers,\n        ...(method === 'POST' && { 'x-upsert': String(options.upsert as boolean) }),\n      }\n\n      const metadata = options.metadata\n\n      if (typeof Blob !== 'undefined' && fileBody instanceof Blob) {\n        body = new FormData()\n        body.append('cacheControl', options.cacheControl as string)\n        if (metadata) {\n          body.append('metadata', this.encodeMetadata(metadata))\n        }\n        body.append('', fileBody)\n      } else if (typeof FormData !== 'undefined' && fileBody instanceof FormData) {\n        body = fileBody\n        // Only append if not already present\n        if (!body.has('cacheControl')) {\n          body.append('cacheControl', options.cacheControl as string)\n        }\n        if (metadata && !body.has('metadata')) {\n          body.append('metadata', this.encodeMetadata(metadata))\n        }\n      } else {\n        body = fileBody\n        headers['cache-control'] = `max-age=${options.cacheControl}`\n        headers['content-type'] = options.contentType as string\n\n        if (metadata) {\n          headers['x-metadata'] = this.toBase64(this.encodeMetadata(metadata))\n        }\n\n        // Node.js streams require duplex option for fetch in Node 20+\n        // Check for both web ReadableStream and Node.js streams\n        const isStream =\n          (typeof ReadableStream !== 'undefined' && body instanceof ReadableStream) ||\n          (body && typeof body === 'object' && 'pipe' in body && typeof body.pipe === 'function')\n\n        if (isStream && !options.duplex) {\n          options.duplex = 'half'\n        }\n      }\n\n      if (fileOptions?.headers) {\n        for (const [key, value] of Object.entries(fileOptions.headers)) {\n          headers = setHeader(headers, key, value)\n        }\n      }\n\n      const cleanPath = this._removeEmptyFolders(path)\n      const _path = this._getFinalPath(cleanPath)\n      const data = await (method == 'PUT' ? put : post)(\n        this.fetch,\n        `${this.url}/object/${_path}`,\n        body as object,\n        { headers, ...(options?.duplex ? { duplex: options.duplex } : {}) }\n      )\n\n      return { path: cleanPath, id: data.Id, fullPath: data.Key }\n    })\n  }\n\n  /**\n   * Uploads a file to an existing bucket.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param path The file path, including the file name. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\n   * @param fileBody The body of the file to be stored in the bucket.\n   * @param fileOptions Optional file upload options including cacheControl, contentType, upsert, and metadata.\n   * @returns Promise with response containing file path, id, and fullPath or error\n   *\n   * @example Upload file\n   * ```js\n   * const avatarFile = event.target.files[0]\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .upload('public/avatar1.png', avatarFile, {\n   *     cacheControl: '3600',\n   *     upsert: false\n   *   })\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"path\": \"public/avatar1.png\",\n   *     \"fullPath\": \"avatars/public/avatar1.png\"\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @example Upload file using `ArrayBuffer` from base64 file data\n   * ```js\n   * import { decode } from 'base64-arraybuffer'\n   *\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .upload('public/avatar1.png', decode('base64FileData'), {\n   *     contentType: 'image/png'\n   *   })\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: none\n   *   - `objects` table permissions: only `insert` when you are uploading new files and `select`, `insert` and `update` when you are upserting files\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   * - For React Native, using either `Blob`, `File` or `FormData` does not work as intended. Upload file using `ArrayBuffer` from base64 file data instead, see example below.\n   */\n  async upload(\n    path: string,\n    fileBody: FileBody,\n    fileOptions?: FileOptions\n  ): Promise<\n    | {\n        data: { id: string; path: string; fullPath: string }\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.uploadOrUpdate('POST', path, fileBody, fileOptions)\n  }\n\n  /**\n   * Upload a file with a token generated from `createSignedUploadUrl`.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param path The file path, including the file name. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\n   * @param token The token generated from `createSignedUploadUrl`\n   * @param fileBody The body of the file to be stored in the bucket.\n   * @param fileOptions HTTP headers (cacheControl, contentType, etc.).\n   * **Note:** The `upsert` option has no effect here. To enable upsert behavior,\n   * pass `{ upsert: true }` when calling `createSignedUploadUrl()` instead.\n   * @returns Promise with response containing file path and fullPath or error\n   *\n   * @example Upload to a signed URL\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .uploadToSignedUrl('folder/cat.jpg', 'token-from-createSignedUploadUrl', file)\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"path\": \"folder/cat.jpg\",\n   *     \"fullPath\": \"avatars/folder/cat.jpg\"\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: none\n   *   - `objects` table permissions: none\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  async uploadToSignedUrl(\n    path: string,\n    token: string,\n    fileBody: FileBody,\n    fileOptions?: FileOptions\n  ) {\n    const cleanPath = this._removeEmptyFolders(path)\n    const _path = this._getFinalPath(cleanPath)\n\n    const url = new URL(this.url + `/object/upload/sign/${_path}`)\n    url.searchParams.set('token', token)\n\n    return this.handleOperation(async () => {\n      let body\n      const options = { ...DEFAULT_FILE_OPTIONS, ...fileOptions }\n      let headers: Record<string, string> = {\n        ...this.headers,\n        ...{ 'x-upsert': String(options.upsert as boolean) },\n      }\n\n      const metadata = options.metadata\n\n      if (typeof Blob !== 'undefined' && fileBody instanceof Blob) {\n        body = new FormData()\n        body.append('cacheControl', options.cacheControl as string)\n        if (metadata) {\n          body.append('metadata', this.encodeMetadata(metadata))\n        }\n        body.append('', fileBody)\n      } else if (typeof FormData !== 'undefined' && fileBody instanceof FormData) {\n        body = fileBody\n        if (!body.has('cacheControl')) {\n          body.append('cacheControl', options.cacheControl as string)\n        }\n        if (metadata && !body.has('metadata')) {\n          body.append('metadata', this.encodeMetadata(metadata))\n        }\n      } else {\n        body = fileBody\n        headers['cache-control'] = `max-age=${options.cacheControl}`\n        headers['content-type'] = options.contentType as string\n        if (metadata) {\n          headers['x-metadata'] = this.toBase64(this.encodeMetadata(metadata))\n        }\n\n        const isStream =\n          (typeof ReadableStream !== 'undefined' && body instanceof ReadableStream) ||\n          (body && typeof body === 'object' && 'pipe' in body && typeof body.pipe === 'function')\n\n        if (isStream && !options.duplex) {\n          options.duplex = 'half'\n        }\n      }\n\n      if (fileOptions?.headers) {\n        for (const [key, value] of Object.entries(fileOptions.headers)) {\n          headers = setHeader(headers, key, value)\n        }\n      }\n\n      const data = await put(this.fetch, url.toString(), body as object, {\n        headers,\n        ...(options?.duplex ? { duplex: options.duplex } : {}),\n      })\n\n      return { path: cleanPath, fullPath: data.Key }\n    })\n  }\n\n  /**\n   * Creates a signed upload URL.\n   * Signed upload URLs can be used to upload files to the bucket without further authentication.\n   * They are valid for 2 hours.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param path The file path, including the current file name. For example `folder/image.png`.\n   * @param options.upsert If set to true, allows the file to be overwritten if it already exists.\n   * @returns Promise with response containing signed upload URL, token, and path or error\n   *\n   * @example Create Signed Upload URL\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .createSignedUploadUrl('folder/cat.jpg')\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"signedUrl\": \"https://example.supabase.co/storage/v1/object/upload/sign/avatars/folder/cat.jpg?token=<TOKEN>\",\n   *     \"path\": \"folder/cat.jpg\",\n   *     \"token\": \"<TOKEN>\"\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: none\n   *   - `objects` table permissions: `insert`\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  async createSignedUploadUrl(\n    path: string,\n    options?: { upsert: boolean }\n  ): Promise<\n    | {\n        data: { signedUrl: string; token: string; path: string }\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      let _path = this._getFinalPath(path)\n\n      const headers = { ...this.headers }\n\n      if (options?.upsert) {\n        headers['x-upsert'] = 'true'\n      }\n\n      const data = await post(\n        this.fetch,\n        `${this.url}/object/upload/sign/${_path}`,\n        {},\n        { headers }\n      )\n\n      const url = new URL(this.url + data.url)\n\n      const token = url.searchParams.get('token')\n\n      if (!token) {\n        throw new StorageError('No token returned by API')\n      }\n\n      return { signedUrl: url.toString(), path, token }\n    })\n  }\n\n  /**\n   * Replaces an existing file at the specified path with a new one.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param path The relative file path. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to update.\n   * @param fileBody The body of the file to be stored in the bucket.\n   * @param fileOptions Optional file upload options including cacheControl, contentType, and metadata.\n   * **Note:** The `upsert` option has no effect here. `update()` always replaces the\n   * file at the given path, so the `x-upsert` header is not sent. To control upsert\n   * behavior, use `upload()` instead.\n   * @returns Promise with response containing file path, id, and fullPath or error\n   *\n   * @example Update file\n   * ```js\n   * const avatarFile = event.target.files[0]\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .update('public/avatar1.png', avatarFile, {\n   *     cacheControl: '3600'\n   *   })\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"path\": \"public/avatar1.png\",\n   *     \"fullPath\": \"avatars/public/avatar1.png\"\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @example Update file using `ArrayBuffer` from base64 file data\n   * ```js\n   * import {decode} from 'base64-arraybuffer'\n   *\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .update('public/avatar1.png', decode('base64FileData'), {\n   *     contentType: 'image/png'\n   *   })\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: none\n   *   - `objects` table permissions: `update` and `select`\n   * - `update()` always replaces the file at the given path regardless of the `upsert` option.\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   * - For React Native, using either `Blob`, `File` or `FormData` does not work as intended. Update file using `ArrayBuffer` from base64 file data instead, see example below.\n   */\n  async update(\n    path: string,\n    fileBody:\n      | ArrayBuffer\n      | ArrayBufferView\n      | Blob\n      | Buffer\n      | File\n      | FormData\n      | NodeJS.ReadableStream\n      | ReadableStream<Uint8Array>\n      | URLSearchParams\n      | string,\n    fileOptions?: FileOptions\n  ): Promise<\n    | {\n        data: { id: string; path: string; fullPath: string }\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.uploadOrUpdate('PUT', path, fileBody, fileOptions)\n  }\n\n  /**\n   * Moves an existing file to a new path in the same bucket.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param fromPath The original file path, including the current file name. For example `folder/image.png`.\n   * @param toPath The new file path, including the new file name. For example `folder/image-new.png`.\n   * @param options The destination options.\n   * @returns Promise with response containing success message or error\n   *\n   * @example Move file\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .move('public/avatar1.png', 'private/avatar2.png')\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"message\": \"Successfully moved\"\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: none\n   *   - `objects` table permissions: `update` and `select`\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  async move(\n    fromPath: string,\n    toPath: string,\n    options?: DestinationOptions\n  ): Promise<\n    | {\n        data: { message: string }\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      return await post(\n        this.fetch,\n        `${this.url}/object/move`,\n        {\n          bucketId: this.bucketId,\n          sourceKey: fromPath,\n          destinationKey: toPath,\n          destinationBucket: options?.destinationBucket,\n        },\n        { headers: this.headers }\n      )\n    })\n  }\n\n  /**\n   * Copies an existing file to a new path in the same bucket.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param fromPath The original file path, including the current file name. For example `folder/image.png`.\n   * @param toPath The new file path, including the new file name. For example `folder/image-copy.png`.\n   * @param options The destination options.\n   * @returns Promise with response containing copied file path or error\n   *\n   * @example Copy file\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .copy('public/avatar1.png', 'private/avatar2.png')\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"path\": \"avatars/private/avatar2.png\"\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: none\n   *   - `objects` table permissions: `insert` and `select`\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  async copy(\n    fromPath: string,\n    toPath: string,\n    options?: DestinationOptions\n  ): Promise<\n    | {\n        data: { path: string }\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      const data = await post(\n        this.fetch,\n        `${this.url}/object/copy`,\n        {\n          bucketId: this.bucketId,\n          sourceKey: fromPath,\n          destinationKey: toPath,\n          destinationBucket: options?.destinationBucket,\n        },\n        { headers: this.headers }\n      )\n      return { path: data.Key }\n    })\n  }\n\n  /**\n   * Creates a signed URL. Use a signed URL to share a file for a fixed amount of time.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param path The file path, including the current file name. For example `folder/image.png`.\n   * @param expiresIn The number of seconds until the signed URL expires. For example, `60` for a URL which is valid for one minute.\n   * @param options.download triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\n   * @param options.transform Transform the asset before serving it to the client.\n   * @param options.cacheNonce Append a cache nonce parameter to the URL to invalidate the cache.\n   * @returns Promise with response containing signed URL or error\n   *\n   * @example Create Signed URL\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .createSignedUrl('folder/avatar1.png', 60)\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"signedUrl\": \"https://example.supabase.co/storage/v1/object/sign/avatars/folder/avatar1.png?token=<TOKEN>\"\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @example Create a signed URL for an asset with transformations\n   * ```js\n   * const { data } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .createSignedUrl('folder/avatar1.png', 60, {\n   *     transform: {\n   *       width: 100,\n   *       height: 100,\n   *     }\n   *   })\n   * ```\n   *\n   * @example Create a signed URL which triggers the download of the asset\n   * ```js\n   * const { data } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .createSignedUrl('folder/avatar1.png', 60, {\n   *     download: true,\n   *   })\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: none\n   *   - `objects` table permissions: `select`\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  async createSignedUrl(\n    path: string,\n    expiresIn: number,\n    options?: {\n      download?: string | boolean\n      transform?: TransformOptions\n      cacheNonce?: string\n    }\n  ): Promise<\n    | {\n        data: { signedUrl: string }\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      let _path = this._getFinalPath(path)\n\n      const hasTransform =\n        typeof options?.transform === 'object' &&\n        options.transform !== null &&\n        Object.keys(options.transform).length > 0\n\n      let data = await post(\n        this.fetch,\n        `${this.url}/object/sign/${_path}`,\n        { expiresIn, ...(hasTransform ? { transform: options!.transform } : {}) },\n        { headers: this.headers }\n      )\n\n      const query = new URLSearchParams()\n      if (options?.download)\n        query.set('download', options.download === true ? '' : options.download)\n      if (options?.cacheNonce != null) query.set('cacheNonce', String(options.cacheNonce))\n      const queryString = query.toString()\n\n      // `data.signedURL` contains a `token` query parameter, so append extra params with `&`\n      // only when we actually have something to add.\n      const signedUrl = encodeURI(\n        `${this.url}${data.signedURL}${queryString ? `&${queryString}` : ''}`\n      )\n\n      return { signedUrl }\n    })\n  }\n\n  /**\n   * Creates multiple signed URLs. Use a signed URL to share a file for a fixed amount of time.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param paths The file paths to be downloaded, including the current file names. For example `['folder/image.png', 'folder2/image2.png']`.\n   * @param expiresIn The number of seconds until the signed URLs expire. For example, `60` for URLs which are valid for one minute.\n   * @param options.download triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\n   * @param options.cacheNonce Append a cache nonce parameter to the URL to invalidate the cache.\n   * @returns Promise with response containing array of objects with signedUrl, path, and error or error\n   *\n   * @example Create Signed URLs\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .createSignedUrls(['folder/avatar1.png', 'folder/avatar2.png'], 60)\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"error\": null,\n   *       \"path\": \"folder/avatar1.png\",\n   *       \"signedURL\": \"/object/sign/avatars/folder/avatar1.png?token=<TOKEN>\",\n   *       \"signedUrl\": \"https://example.supabase.co/storage/v1/object/sign/avatars/folder/avatar1.png?token=<TOKEN>\"\n   *     },\n   *     {\n   *       \"error\": null,\n   *       \"path\": \"folder/avatar2.png\",\n   *       \"signedURL\": \"/object/sign/avatars/folder/avatar2.png?token=<TOKEN>\",\n   *       \"signedUrl\": \"https://example.supabase.co/storage/v1/object/sign/avatars/folder/avatar2.png?token=<TOKEN>\"\n   *     }\n   *   ],\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: none\n   *   - `objects` table permissions: `select`\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  async createSignedUrls(\n    paths: string[],\n    expiresIn: number,\n    options?: { download?: string | boolean; cacheNonce?: string }\n  ): Promise<\n    | {\n        data: { error: string | null; path: string | null; signedUrl: string | null }[]\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      const data = await post(\n        this.fetch,\n        `${this.url}/object/sign/${this.bucketId}`,\n        { expiresIn, paths },\n        { headers: this.headers }\n      )\n\n      const query = new URLSearchParams()\n\n      if (options?.download)\n        query.set('download', options.download === true ? '' : options.download)\n      if (options?.cacheNonce != null) query.set('cacheNonce', String(options.cacheNonce))\n\n      const queryString = query.toString()\n\n      return data.map((datum: { signedURL: string }) => ({\n        ...datum,\n        signedUrl: datum.signedURL\n          ? encodeURI(`${this.url}${datum.signedURL}${queryString ? `&${queryString}` : ''}`)\n          : null,\n      }))\n    })\n  }\n\n  /**\n   * Downloads a file from a private bucket. For public buckets, make a request to the URL returned from `getPublicUrl` instead.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param path The full path and file name of the file to be downloaded. For example `folder/image.png`.\n   * @param options.transform Transform the asset before serving it to the client.\n   * @param options.cacheNonce Append a cache nonce parameter to the URL to invalidate the cache.\n   * @param parameters Additional fetch parameters like signal for cancellation. Supports standard fetch options including cache control.\n   * @returns BlobDownloadBuilder instance for downloading the file\n   *\n   * @example Download file\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .download('folder/avatar1.png')\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": <BLOB>,\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @example Download file with transformations\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .download('folder/avatar1.png', {\n   *     transform: {\n   *       width: 100,\n   *       height: 100,\n   *       quality: 80\n   *     }\n   *   })\n   * ```\n   *\n   * @example Download with cache control (useful in Edge Functions)\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .download('folder/avatar1.png', {}, { cache: 'no-store' })\n   * ```\n   *\n   * @example Download with abort signal\n   * ```js\n   * const controller = new AbortController()\n   * setTimeout(() => controller.abort(), 5000)\n   *\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .download('folder/avatar1.png', {}, { signal: controller.signal })\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: none\n   *   - `objects` table permissions: `select`\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  download<Options extends { transform?: TransformOptions; cacheNonce?: string }>(\n    path: string,\n    options?: Options,\n    parameters?: FetchParameters\n  ): BlobDownloadBuilder {\n    const wantsTransformation =\n      typeof options?.transform === 'object' &&\n      options.transform !== null &&\n      Object.keys(options.transform).length > 0\n    const renderPath = wantsTransformation ? 'render/image/authenticated' : 'object'\n\n    const query = new URLSearchParams()\n    if (options?.transform) this.applyTransformOptsToQuery(query, options.transform)\n    if (options?.cacheNonce != null) query.set('cacheNonce', String(options.cacheNonce))\n    const queryString = query.toString()\n\n    const _path = this._getFinalPath(path)\n    const downloadFn = () =>\n      get(\n        this.fetch,\n        `${this.url}/${renderPath}/${_path}${queryString ? `?${queryString}` : ''}`,\n        {\n          headers: this.headers,\n          noResolveJson: true,\n        },\n        parameters\n      )\n    return new BlobDownloadBuilder(downloadFn, this.shouldThrowOnError)\n  }\n\n  /**\n   * Retrieves the details of an existing file.\n   *\n   * Returns detailed file metadata including size, content type, and timestamps.\n   * Note: The API returns `last_modified` field, not `updated_at`.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param path The file path, including the file name. For example `folder/image.png`.\n   * @returns Promise with response containing file metadata or error\n   *\n   * @example Get file info\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .info('folder/avatar1.png')\n   *\n   * if (data) {\n   *   console.log('Last modified:', data.lastModified)\n   *   console.log('Size:', data.size)\n   * }\n   * ```\n   */\n  async info(path: string): Promise<\n    | {\n        data: Camelize<FileObjectV2>\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    const _path = this._getFinalPath(path)\n\n    return this.handleOperation(async () => {\n      const data = await get(this.fetch, `${this.url}/object/info/${_path}`, {\n        headers: this.headers,\n      })\n\n      return recursiveToCamel(data) as Camelize<FileObjectV2>\n    })\n  }\n\n  /**\n   * Checks the existence of a file.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param path The file path, including the file name. For example `folder/image.png`.\n   * @returns Promise with response containing boolean indicating file existence or error\n   *\n   * @example Check file existence\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .exists('folder/avatar1.png')\n   * ```\n   */\n  async exists(path: string): Promise<\n    | {\n        data: boolean\n        error: null\n      }\n    | {\n        data: boolean\n        error: StorageError\n      }\n  > {\n    const _path = this._getFinalPath(path)\n\n    try {\n      await head(this.fetch, `${this.url}/object/${_path}`, {\n        headers: this.headers,\n      })\n\n      return { data: true, error: null }\n    } catch (error) {\n      if (this.shouldThrowOnError) {\n        throw error\n      }\n      if (isStorageError(error)) {\n        // HEAD requests produce StorageApiError (via handleError) or StorageUnknownError (legacy)\n        const status =\n          error instanceof StorageApiError\n            ? error.status\n            : error instanceof StorageUnknownError\n              ? (error.originalError as { status: number })?.status\n              : undefined\n\n        if (status !== undefined && [400, 404].includes(status)) {\n          return { data: false, error }\n        }\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * A simple convenience function to get the URL for an asset in a public bucket. If you do not want to use this function, you can construct the public URL by concatenating the bucket URL with the path to the asset.\n   * This function does not verify if the bucket is public. If a public URL is created for a bucket which is not public, you will not be able to download the asset.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param path The path and name of the file to generate the public URL for. For example `folder/image.png`.\n   * @param options.download Triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\n   * @param options.transform Transform the asset before serving it to the client.\n   * @param options.cacheNonce Append a cache nonce parameter to the URL to invalidate the cache.\n   * @returns Object with public URL\n   *\n   * @example Returns the URL for an asset in a public bucket\n   * ```js\n   * const { data } = supabase\n   *   .storage\n   *   .from('public-bucket')\n   *   .getPublicUrl('folder/avatar1.png')\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"publicUrl\": \"https://example.supabase.co/storage/v1/object/public/public-bucket/folder/avatar1.png\"\n   *   }\n   * }\n   * ```\n   *\n   * @example Returns the URL for an asset in a public bucket with transformations\n   * ```js\n   * const { data } = supabase\n   *   .storage\n   *   .from('public-bucket')\n   *   .getPublicUrl('folder/avatar1.png', {\n   *     transform: {\n   *       width: 100,\n   *       height: 100,\n   *     }\n   *   })\n   * ```\n   *\n   * @example Returns the URL which triggers the download of an asset in a public bucket\n   * ```js\n   * const { data } = supabase\n   *   .storage\n   *   .from('public-bucket')\n   *   .getPublicUrl('folder/avatar1.png', {\n   *     download: true,\n   *   })\n   * ```\n   *\n   * @remarks\n   * - The bucket needs to be set to public, either via [updateBucket()](/docs/reference/javascript/storage-updatebucket) or by going to Storage on [supabase.com/dashboard](https://supabase.com/dashboard), clicking the overflow menu on a bucket and choosing \"Make public\"\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: none\n   *   - `objects` table permissions: none\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  getPublicUrl(\n    path: string,\n    options?: {\n      download?: string | boolean\n      transform?: TransformOptions\n      cacheNonce?: string\n    }\n  ): { data: { publicUrl: string } } {\n    const _path = this._getFinalPath(path)\n\n    const query = new URLSearchParams()\n    if (options?.download) query.set('download', options.download === true ? '' : options.download)\n    if (options?.transform) this.applyTransformOptsToQuery(query, options.transform)\n    if (options?.cacheNonce != null) query.set('cacheNonce', String(options.cacheNonce))\n    const queryString = query.toString()\n\n    const wantsTransformation =\n      typeof options?.transform === 'object' &&\n      options.transform !== null &&\n      Object.keys(options.transform).length > 0\n    const renderPath = wantsTransformation ? 'render/image' : 'object'\n\n    return {\n      data: {\n        publicUrl:\n          encodeURI(`${this.url}/${renderPath}/public/${_path}`) +\n          (queryString ? `?${queryString}` : ''),\n      },\n    }\n  }\n\n  /**\n   * Deletes files within the same bucket\n   *\n   * Returns an array of FileObject entries for the deleted files. Note that deprecated\n   * fields like `bucket_id` may or may not be present in the response - do not rely on them.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param paths An array of files to delete, including the path and file name. For example [`'folder/image.png'`].\n   * @returns Promise with response containing array of deleted file objects or error\n   *\n   * @example Delete file\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .remove(['folder/avatar1.png'])\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": [],\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: none\n   *   - `objects` table permissions: `delete` and `select`\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  async remove(paths: string[]): Promise<\n    | {\n        data: FileObject[]\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      return await remove(\n        this.fetch,\n        `${this.url}/object/${this.bucketId}`,\n        { prefixes: paths },\n        { headers: this.headers }\n      )\n    })\n  }\n\n  /**\n   * Get file metadata\n   * @param id the file id to retrieve metadata\n   */\n  // async getMetadata(\n  //   id: string\n  // ): Promise<\n  //   | {\n  //       data: Metadata\n  //       error: null\n  //     }\n  //   | {\n  //       data: null\n  //       error: StorageError\n  //     }\n  // > {\n  //   try {\n  //     const data = await get(this.fetch, `${this.url}/metadata/${id}`, { headers: this.headers })\n  //     return { data, error: null }\n  //   } catch (error) {\n  //     if (isStorageError(error)) {\n  //       return { data: null, error }\n  //     }\n\n  //     throw error\n  //   }\n  // }\n\n  /**\n   * Update file metadata\n   * @param id the file id to update metadata\n   * @param meta the new file metadata\n   */\n  // async updateMetadata(\n  //   id: string,\n  //   meta: Metadata\n  // ): Promise<\n  //   | {\n  //       data: Metadata\n  //       error: null\n  //     }\n  //   | {\n  //       data: null\n  //       error: StorageError\n  //     }\n  // > {\n  //   try {\n  //     const data = await post(\n  //       this.fetch,\n  //       `${this.url}/metadata/${id}`,\n  //       { ...meta },\n  //       { headers: this.headers }\n  //     )\n  //     return { data, error: null }\n  //   } catch (error) {\n  //     if (isStorageError(error)) {\n  //       return { data: null, error }\n  //     }\n\n  //     throw error\n  //   }\n  // }\n\n  /**\n   * Lists all the files and folders within a path of the bucket.\n   *\n   * **Important:** For folder entries, fields like `id`, `updated_at`, `created_at`,\n   * `last_accessed_at`, and `metadata` will be `null`. Only files have these fields populated.\n   * Additionally, deprecated fields like `bucket_id`, `owner`, and `buckets` are NOT returned\n   * by this method.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param path The folder path.\n   * @param options Search options including limit (defaults to 100), offset, sortBy, and search\n   * @param parameters Optional fetch parameters including signal for cancellation\n   * @returns Promise with response containing array of files/folders or error\n   *\n   * @example List files in a bucket\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .list('folder', {\n   *     limit: 100,\n   *     offset: 0,\n   *     sortBy: { column: 'name', order: 'asc' },\n   *   })\n   *\n   * // Handle files vs folders\n   * data?.forEach(item => {\n   *   if (item.id !== null) {\n   *     // It's a file\n   *     console.log('File:', item.name, 'Size:', item.metadata?.size)\n   *   } else {\n   *     // It's a folder\n   *     console.log('Folder:', item.name)\n   *   }\n   * })\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"name\": \"avatar1.png\",\n   *       \"id\": \"e668cf7f-821b-4a2f-9dce-7dfa5dd1cfd2\",\n   *       \"updated_at\": \"2024-05-22T23:06:05.580Z\",\n   *       \"created_at\": \"2024-05-22T23:04:34.443Z\",\n   *       \"last_accessed_at\": \"2024-05-22T23:04:34.443Z\",\n   *       \"metadata\": {\n   *         \"eTag\": \"\\\"c5e8c553235d9af30ef4f6e280790b92\\\"\",\n   *         \"size\": 32175,\n   *         \"mimetype\": \"image/png\",\n   *         \"cacheControl\": \"max-age=3600\",\n   *         \"lastModified\": \"2024-05-22T23:06:05.574Z\",\n   *         \"contentLength\": 32175,\n   *         \"httpStatusCode\": 200\n   *       }\n   *     }\n   *   ],\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @example Search files in a bucket\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .list('folder', {\n   *     limit: 100,\n   *     offset: 0,\n   *     sortBy: { column: 'name', order: 'asc' },\n   *     search: 'jon'\n   *   })\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: none\n   *   - `objects` table permissions: `select`\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  async list(\n    path?: string,\n    options?: SearchOptions,\n    parameters?: FetchParameters\n  ): Promise<\n    | {\n        data: FileObject[]\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      const body = { ...DEFAULT_SEARCH_OPTIONS, ...options, prefix: path || '' }\n      return await post(\n        this.fetch,\n        `${this.url}/object/list/${this.bucketId}`,\n        body,\n        { headers: this.headers },\n        parameters\n      )\n    })\n  }\n\n  /**\n   * Lists all the files and folders within a bucket using the V2 API with pagination support.\n   *\n   * **Important:** Folder entries in the `folders` array only contain `name` and optionally `key` —\n   * they have no `id`, timestamps, or `metadata` fields. Full file metadata is only available\n   * on entries in the `objects` array.\n   *\n   * @experimental this method signature might change in the future\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param options Search options including prefix, cursor for pagination, limit, with_delimiter\n   * @param parameters Optional fetch parameters including signal for cancellation\n   * @returns Promise with response containing folders/objects arrays with pagination info or error\n   *\n   * @example List files with pagination\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .from('avatars')\n   *   .listV2({\n   *     prefix: 'folder/',\n   *     limit: 100,\n   *   })\n   *\n   * // Handle pagination\n   * if (data?.hasNext) {\n   *   const nextPage = await supabase\n   *     .storage\n   *     .from('avatars')\n   *     .listV2({\n   *       prefix: 'folder/',\n   *       cursor: data.nextCursor,\n   *     })\n   * }\n   *\n   * // Handle files vs folders\n   * data?.objects.forEach(file => {\n   *   if (file.id !== null) {\n   *     console.log('File:', file.name, 'Size:', file.metadata?.size)\n   *   }\n   * })\n   * data?.folders.forEach(folder => {\n   *   console.log('Folder:', folder.name)\n   * })\n   * ```\n   */\n  async listV2(\n    options?: SearchV2Options,\n    parameters?: FetchParameters\n  ): Promise<\n    | {\n        data: SearchV2Result\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      const body = { ...options }\n      return await post(\n        this.fetch,\n        `${this.url}/object/list-v2/${this.bucketId}`,\n        body,\n        { headers: this.headers },\n        parameters\n      )\n    })\n  }\n\n  protected encodeMetadata(metadata: Record<string, any>) {\n    return JSON.stringify(metadata)\n  }\n\n  toBase64(data: string) {\n    if (typeof Buffer !== 'undefined') {\n      return Buffer.from(data).toString('base64')\n    }\n    return btoa(data)\n  }\n\n  private _getFinalPath(path: string) {\n    return `${this.bucketId}/${path.replace(/^\\/+/, '')}`\n  }\n\n  private _removeEmptyFolders(path: string) {\n    return path.replace(/^\\/|\\/$/g, '').replace(/\\/+/g, '/')\n  }\n\n  /** Modifies the `query`, appending values the from `transform` */\n  private applyTransformOptsToQuery(\n    query: URLSearchParams,\n    transform: TransformOptions\n  ): URLSearchParams {\n    if (transform.width) query.set('width', transform.width.toString())\n    if (transform.height) query.set('height', transform.height.toString())\n    if (transform.resize) query.set('resize', transform.resize)\n    if (transform.format) query.set('format', transform.format)\n    if (transform.quality) query.set('quality', transform.quality.toString())\n\n    return query\n  }\n}\n", "// Generated automatically during releases by scripts/update-version-files.ts\n// This file provides runtime access to the package version for:\n// - HTTP request headers (e.g., X-Client-Info header for API requests)\n// - Debugging and support (identifying which version is running)\n// - Telemetry and logging (version reporting in errors/analytics)\n// - Ensuring build artifacts match the published package version\nexport const version = '2.106.1'\n", "import { version } from './version'\nexport const DEFAULT_HEADERS = {\n  'X-Client-Info': `storage-js/${version}`,\n}\n", "import { DEFAULT_HEADERS } from '../lib/constants'\nimport { StorageError } from '../lib/common/errors'\nimport { Fetch, get, post, put, remove } from '../lib/common/fetch'\nimport BaseApiClient from '../lib/common/BaseApiClient'\nimport { Bucket, BucketType, ListBucketOptions } from '../lib/types'\nimport { StorageClientOptions } from '../StorageClient'\n\nexport default class StorageBucketApi extends BaseApiClient<StorageError> {\n  constructor(\n    url: string,\n    headers: { [key: string]: string } = {},\n    fetch?: Fetch,\n    opts?: StorageClientOptions\n  ) {\n    const baseUrl = new URL(url)\n\n    // if legacy uri is used, replace with new storage host (disables request buffering to allow > 50GB uploads)\n    // \"project-ref.supabase.co\" becomes \"project-ref.storage.supabase.co\"\n    if (opts?.useNewHostname) {\n      const isSupabaseHost = /supabase\\.(co|in|red)$/.test(baseUrl.hostname)\n      if (isSupabaseHost && !baseUrl.hostname.includes('storage.supabase.')) {\n        baseUrl.hostname = baseUrl.hostname.replace('supabase.', 'storage.supabase.')\n      }\n    }\n\n    const finalUrl = baseUrl.href.replace(/\\/$/, '')\n    const finalHeaders = { ...DEFAULT_HEADERS, ...headers }\n\n    super(finalUrl, finalHeaders, fetch, 'storage')\n  }\n\n  /**\n   * Retrieves the details of all Storage buckets within an existing project.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param options Query parameters for listing buckets\n   * @param options.limit Maximum number of buckets to return\n   * @param options.offset Number of buckets to skip\n   * @param options.sortColumn Column to sort by ('id', 'name', 'created_at', 'updated_at')\n   * @param options.sortOrder Sort order ('asc' or 'desc')\n   * @param options.search Search term to filter bucket names\n   * @returns Promise with response containing array of buckets or error\n   *\n   * @example List buckets\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .listBuckets()\n   * ```\n   *\n   * @example List buckets with options\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .listBuckets({\n   *     limit: 10,\n   *     offset: 0,\n   *     sortColumn: 'created_at',\n   *     sortOrder: 'desc',\n   *     search: 'prod'\n   *   })\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: `select`\n   *   - `objects` table permissions: none\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  async listBuckets(options?: ListBucketOptions): Promise<\n    | {\n        data: Bucket[]\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      const queryString = this.listBucketOptionsToQueryString(options)\n      return await get(this.fetch, `${this.url}/bucket${queryString}`, {\n        headers: this.headers,\n      })\n    })\n  }\n\n  /**\n   * Retrieves the details of an existing Storage bucket.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param id The unique identifier of the bucket you would like to retrieve.\n   * @returns Promise with response containing bucket details or error\n   *\n   * @example Get bucket\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .getBucket('avatars')\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"id\": \"avatars\",\n   *     \"name\": \"avatars\",\n   *     \"owner\": \"\",\n   *     \"public\": false,\n   *     \"file_size_limit\": 1024,\n   *     \"allowed_mime_types\": [\n   *       \"image/png\"\n   *     ],\n   *     \"created_at\": \"2024-05-22T22:26:05.100Z\",\n   *     \"updated_at\": \"2024-05-22T22:26:05.100Z\"\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: `select`\n   *   - `objects` table permissions: none\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  async getBucket(id: string): Promise<\n    | {\n        data: Bucket\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      return await get(this.fetch, `${this.url}/bucket/${id}`, { headers: this.headers })\n    })\n  }\n\n  /**\n   * Creates a new Storage bucket\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param id A unique identifier for the bucket you are creating.\n   * @param options.public The visibility of the bucket. Public buckets don't require an authorization token to download objects, but still require a valid token for all other operations. By default, buckets are private.\n   * @param options.fileSizeLimit specifies the max file size in bytes that can be uploaded to this bucket.\n   * The global file size limit takes precedence over this value.\n   * The default value is null, which doesn't set a per bucket file size limit.\n   * @param options.allowedMimeTypes specifies the allowed mime types that this bucket can accept during upload.\n   * The default value is null, which allows files with all mime types to be uploaded.\n   * Each mime type specified can be a wildcard, e.g. image/*, or a specific mime type, e.g. image/png.\n   * @param options.type (private-beta) specifies the bucket type. see `BucketType` for more details.\n   *   - default bucket type is `STANDARD`\n   * @returns Promise with response containing newly created bucket name or error\n   *\n   * @example Create bucket\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .createBucket('avatars', {\n   *     public: false,\n   *     allowedMimeTypes: ['image/png'],\n   *     fileSizeLimit: 1024\n   *   })\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"name\": \"avatars\"\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: `insert`\n   *   - `objects` table permissions: none\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  async createBucket(\n    id: string,\n    options: {\n      public: boolean\n      fileSizeLimit?: number | string | null\n      allowedMimeTypes?: string[] | null\n      type?: BucketType\n    } = {\n      public: false,\n    }\n  ): Promise<\n    | {\n        data: Pick<Bucket, 'name'>\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      return await post(\n        this.fetch,\n        `${this.url}/bucket`,\n        {\n          id,\n          name: id,\n          type: options.type,\n          public: options.public,\n          file_size_limit: options.fileSizeLimit,\n          allowed_mime_types: options.allowedMimeTypes,\n        },\n        { headers: this.headers }\n      )\n    })\n  }\n\n  /**\n   * Updates a Storage bucket\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param id A unique identifier for the bucket you are updating.\n   * @param options.public The visibility of the bucket. Public buckets don't require an authorization token to download objects, but still require a valid token for all other operations.\n   * @param options.fileSizeLimit specifies the max file size in bytes that can be uploaded to this bucket.\n   * The global file size limit takes precedence over this value.\n   * The default value is null, which doesn't set a per bucket file size limit.\n   * @param options.allowedMimeTypes specifies the allowed mime types that this bucket can accept during upload.\n   * The default value is null, which allows files with all mime types to be uploaded.\n   * Each mime type specified can be a wildcard, e.g. image/*, or a specific mime type, e.g. image/png.\n   * @returns Promise with response containing success message or error\n   *\n   * @example Update bucket\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .updateBucket('avatars', {\n   *     public: false,\n   *     allowedMimeTypes: ['image/png'],\n   *     fileSizeLimit: 1024\n   *   })\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"message\": \"Successfully updated\"\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: `select` and `update`\n   *   - `objects` table permissions: none\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  async updateBucket(\n    id: string,\n    options: {\n      public: boolean\n      fileSizeLimit?: number | string | null\n      allowedMimeTypes?: string[] | null\n    }\n  ): Promise<\n    | {\n        data: { message: string }\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      return await put(\n        this.fetch,\n        `${this.url}/bucket/${id}`,\n        {\n          id,\n          name: id,\n          public: options.public,\n          file_size_limit: options.fileSizeLimit,\n          allowed_mime_types: options.allowedMimeTypes,\n        },\n        { headers: this.headers }\n      )\n    })\n  }\n\n  /**\n   * Removes all objects inside a single bucket.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param id The unique identifier of the bucket you would like to empty.\n   * @returns Promise with success message or error\n   *\n   * @example Empty bucket\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .emptyBucket('avatars')\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"message\": \"Successfully emptied\"\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: `select`\n   *   - `objects` table permissions: `select` and `delete`\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  async emptyBucket(id: string): Promise<\n    | {\n        data: { message: string }\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      return await post(this.fetch, `${this.url}/bucket/${id}/empty`, {}, { headers: this.headers })\n    })\n  }\n\n  /**\n   * Deletes an existing bucket. A bucket can't be deleted with existing objects inside it.\n   * You must first `empty()` the bucket.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   * @param id The unique identifier of the bucket you would like to delete.\n   * @returns Promise with success message or error\n   *\n   * @example Delete bucket\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .deleteBucket('avatars')\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"message\": \"Successfully deleted\"\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @remarks\n   * - RLS policy permissions required:\n   *   - `buckets` table permissions: `select` and `delete`\n   *   - `objects` table permissions: none\n   * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n   */\n  async deleteBucket(id: string): Promise<\n    | {\n        data: { message: string }\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      return await remove(this.fetch, `${this.url}/bucket/${id}`, {}, { headers: this.headers })\n    })\n  }\n\n  private listBucketOptionsToQueryString(options?: ListBucketOptions): string {\n    const params: Record<string, string> = {}\n    if (options) {\n      if ('limit' in options) {\n        params.limit = String(options.limit)\n      }\n      if ('offset' in options) {\n        params.offset = String(options.offset)\n      }\n      if (options.search) {\n        params.search = options.search\n      }\n      if (options.sortColumn) {\n        params.sortColumn = options.sortColumn\n      }\n      if (options.sortOrder) {\n        params.sortOrder = options.sortOrder\n      }\n    }\n    return Object.keys(params).length > 0 ? '?' + new URLSearchParams(params).toString() : ''\n  }\n}\n", "import { IcebergRestCatalog, IcebergError } from 'iceberg-js'\nimport { DEFAULT_HEADERS } from '../lib/constants'\nimport { StorageError } from '../lib/common/errors'\nimport { Fetch, get, post, remove } from '../lib/common/fetch'\nimport { isValidBucketName } from '../lib/common/helpers'\nimport BaseApiClient from '../lib/common/BaseApiClient'\nimport { AnalyticBucket } from '../lib/types'\n\ntype WrapAsyncMethod<T> = T extends (...args: infer A) => Promise<infer R>\n  ? (...args: A) => Promise<{ data: R; error: null } | { data: null; error: IcebergError }>\n  : T\n\nexport type WrappedIcebergRestCatalog = {\n  [K in keyof IcebergRestCatalog]: WrapAsyncMethod<IcebergRestCatalog[K]>\n}\n\n/**\n * Client class for managing Analytics Buckets using Iceberg tables\n * Provides methods for creating, listing, and deleting analytics buckets\n */\nexport default class StorageAnalyticsClient extends BaseApiClient<StorageError> {\n  /**\n   * @alpha\n   *\n   * Creates a new StorageAnalyticsClient instance\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Analytics Buckets\n   * @param url - The base URL for the storage API\n   * @param headers - HTTP headers to include in requests\n   * @param fetch - Optional custom fetch implementation\n   *\n   * @example Using supabase-js (recommended)\n   * ```typescript\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n   * const { data, error } = await supabase.storage.analytics.listBuckets()\n   * ```\n   *\n   * @example Standalone import for bundle-sensitive environments\n   * ```typescript\n   * import { StorageAnalyticsClient } from '@supabase/storage-js'\n   *\n   * const client = new StorageAnalyticsClient(url, headers)\n   * ```\n   */\n  constructor(url: string, headers: { [key: string]: string } = {}, fetch?: Fetch) {\n    const finalUrl = url.replace(/\\/$/, '')\n    const finalHeaders = { ...DEFAULT_HEADERS, ...headers }\n    super(finalUrl, finalHeaders, fetch, 'storage')\n  }\n\n  /**\n   * @alpha\n   *\n   * Creates a new analytics bucket using Iceberg tables\n   * Analytics buckets are optimized for analytical queries and data processing\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Analytics Buckets\n   * @param name A unique name for the bucket you are creating\n   * @returns Promise with response containing newly created analytics bucket or error\n   *\n   * @example Create analytics bucket\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .analytics\n   *   .createBucket('analytics-data')\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"name\": \"analytics-data\",\n   *     \"type\": \"ANALYTICS\",\n   *     \"format\": \"iceberg\",\n   *     \"created_at\": \"2024-05-22T22:26:05.100Z\",\n   *     \"updated_at\": \"2024-05-22T22:26:05.100Z\"\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @remarks\n   * - Creates a new analytics bucket using Iceberg tables\n   * - Analytics buckets are optimized for analytical queries and data processing\n   */\n  async createBucket(name: string): Promise<\n    | {\n        data: AnalyticBucket\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      return await post(this.fetch, `${this.url}/bucket`, { name }, { headers: this.headers })\n    })\n  }\n\n  /**\n   * @alpha\n   *\n   * Retrieves the details of all Analytics Storage buckets within an existing project\n   * Only returns buckets of type 'ANALYTICS'\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Analytics Buckets\n   * @param options Query parameters for listing buckets\n   * @param options.limit Maximum number of buckets to return\n   * @param options.offset Number of buckets to skip\n   * @param options.sortColumn Column to sort by ('name', 'created_at', 'updated_at')\n   * @param options.sortOrder Sort order ('asc' or 'desc')\n   * @param options.search Search term to filter bucket names\n   * @returns Promise with response containing array of analytics buckets or error\n   *\n   * @example List analytics buckets\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .analytics\n   *   .listBuckets({\n   *     limit: 10,\n   *     offset: 0,\n   *     sortColumn: 'created_at',\n   *     sortOrder: 'desc'\n   *   })\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": [\n   *     {\n   *       \"name\": \"analytics-data\",\n   *       \"type\": \"ANALYTICS\",\n   *       \"format\": \"iceberg\",\n   *       \"created_at\": \"2024-05-22T22:26:05.100Z\",\n   *       \"updated_at\": \"2024-05-22T22:26:05.100Z\"\n   *     }\n   *   ],\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @remarks\n   * - Retrieves the details of all Analytics Storage buckets within an existing project\n   * - Only returns buckets of type 'ANALYTICS'\n   */\n  async listBuckets(options?: {\n    limit?: number\n    offset?: number\n    sortColumn?: 'name' | 'created_at' | 'updated_at'\n    sortOrder?: 'asc' | 'desc'\n    search?: string\n  }): Promise<\n    | {\n        data: AnalyticBucket[]\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      // Build query string from options\n      const queryParams = new URLSearchParams()\n      if (options?.limit !== undefined) queryParams.set('limit', options.limit.toString())\n      if (options?.offset !== undefined) queryParams.set('offset', options.offset.toString())\n      if (options?.sortColumn) queryParams.set('sortColumn', options.sortColumn)\n      if (options?.sortOrder) queryParams.set('sortOrder', options.sortOrder)\n      if (options?.search) queryParams.set('search', options.search)\n\n      const queryString = queryParams.toString()\n      const url = queryString ? `${this.url}/bucket?${queryString}` : `${this.url}/bucket`\n\n      return await get(this.fetch, url, { headers: this.headers })\n    })\n  }\n\n  /**\n   * @alpha\n   *\n   * Deletes an existing analytics bucket\n   * A bucket can't be deleted with existing objects inside it\n   * You must first empty the bucket before deletion\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Analytics Buckets\n   * @param bucketName The unique identifier of the bucket you would like to delete\n   * @returns Promise with response containing success message or error\n   *\n   * @example Delete analytics bucket\n   * ```js\n   * const { data, error } = await supabase\n   *   .storage\n   *   .analytics\n   *   .deleteBucket('analytics-data')\n   * ```\n   *\n   * Response:\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"message\": \"Successfully deleted\"\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @remarks\n   * - Deletes an analytics bucket\n   */\n  async deleteBucket(bucketName: string): Promise<\n    | {\n        data: { message: string }\n        error: null\n      }\n    | {\n        data: null\n        error: StorageError\n      }\n  > {\n    return this.handleOperation(async () => {\n      return await remove(\n        this.fetch,\n        `${this.url}/bucket/${bucketName}`,\n        {},\n        { headers: this.headers }\n      )\n    })\n  }\n\n  /**\n   * @alpha\n   *\n   * Get an Iceberg REST Catalog client configured for a specific analytics bucket\n   * Use this to perform advanced table and namespace operations within the bucket\n   * The returned client provides full access to the Apache Iceberg REST Catalog API\n   * with the Supabase `{ data, error }` pattern for consistent error handling on all operations.\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Analytics Buckets\n   * @param bucketName - The name of the analytics bucket (warehouse) to connect to\n   * @returns The wrapped Iceberg catalog client\n   * @throws {StorageError} If the bucket name is invalid\n   *\n   * @example Get catalog and create table\n   * ```js\n   * // First, create an analytics bucket\n   * const { data: bucket, error: bucketError } = await supabase\n   *   .storage\n   *   .analytics\n   *   .createBucket('analytics-data')\n   *\n   * // Get the Iceberg catalog for that bucket\n   * const catalog = supabase.storage.analytics.from('analytics-data')\n   *\n   * // Create a namespace\n   * const { error: nsError } = await catalog.createNamespace({ namespace: ['default'] })\n   *\n   * // Create a table with schema\n   * const { data: tableMetadata, error: tableError } = await catalog.createTable(\n   *   { namespace: ['default'] },\n   *   {\n   *     name: 'events',\n   *     schema: {\n   *       type: 'struct',\n   *       fields: [\n   *         { id: 1, name: 'id', type: 'long', required: true },\n   *         { id: 2, name: 'timestamp', type: 'timestamp', required: true },\n   *         { id: 3, name: 'user_id', type: 'string', required: false }\n   *       ],\n   *       'schema-id': 0,\n   *       'identifier-field-ids': [1]\n   *     },\n   *     'partition-spec': {\n   *       'spec-id': 0,\n   *       fields: []\n   *     },\n   *     'write-order': {\n   *       'order-id': 0,\n   *       fields: []\n   *     },\n   *     properties: {\n   *       'write.format.default': 'parquet'\n   *     }\n   *   }\n   * )\n   * ```\n   *\n   * @example List tables in namespace\n   * ```js\n   * const catalog = supabase.storage.analytics.from('analytics-data')\n   *\n   * // List all tables in the default namespace\n   * const { data: tables, error: listError } = await catalog.listTables({ namespace: ['default'] })\n   * if (listError) {\n   *   if (listError.isNotFound()) {\n   *     console.log('Namespace not found')\n   *   }\n   *   return\n   * }\n   * console.log(tables) // [{ namespace: ['default'], name: 'events' }]\n   * ```\n   *\n   * @example Working with namespaces\n   * ```js\n   * const catalog = supabase.storage.analytics.from('analytics-data')\n   *\n   * // List all namespaces\n   * const { data: namespaces } = await catalog.listNamespaces()\n   *\n   * // Create namespace with properties\n   * await catalog.createNamespace(\n   *   { namespace: ['production'] },\n   *   { properties: { owner: 'data-team', env: 'prod' } }\n   * )\n   * ```\n   *\n   * @example Cleanup operations\n   * ```js\n   * const catalog = supabase.storage.analytics.from('analytics-data')\n   *\n   * // Drop table with purge option (removes all data)\n   * const { error: dropError } = await catalog.dropTable(\n   *   { namespace: ['default'], name: 'events' },\n   *   { purge: true }\n   * )\n   *\n   * if (dropError?.isNotFound()) {\n   *   console.log('Table does not exist')\n   * }\n   *\n   * // Drop namespace (must be empty)\n   * await catalog.dropNamespace({ namespace: ['default'] })\n   * ```\n   *\n   * @remarks\n   * This method provides a bridge between Supabase's bucket management and the standard\n   * Apache Iceberg REST Catalog API. The bucket name maps to the Iceberg warehouse parameter.\n   * All authentication and configuration is handled automatically using your Supabase credentials.\n   *\n   * **Error Handling**: Invalid bucket names throw immediately. All catalog\n   * operations return `{ data, error }` where errors are `IcebergError` instances from iceberg-js.\n   * Use helper methods like `error.isNotFound()` or check `error.status` for specific error handling.\n   * Use `.throwOnError()` on the analytics client if you prefer exceptions for catalog operations.\n   *\n   * **Cleanup Operations**: When using `dropTable`, the `purge: true` option permanently\n   * deletes all table data. Without it, the table is marked as deleted but data remains.\n   *\n   * **Library Dependency**: The returned catalog wraps `IcebergRestCatalog` from iceberg-js.\n   * For complete API documentation and advanced usage, refer to the\n   * [iceberg-js documentation](https://supabase.github.io/iceberg-js/).\n   */\n  from(bucketName: string): WrappedIcebergRestCatalog {\n    // Validate bucket name using same rules as Supabase Storage API backend\n    if (!isValidBucketName(bucketName)) {\n      throw new StorageError(\n        'Invalid bucket name: File, folder, and bucket names must follow AWS object key naming guidelines ' +\n          'and should avoid the use of any other characters.'\n      )\n    }\n\n    // Construct the Iceberg REST Catalog URL\n    // The base URL is /storage/v1/iceberg\n    // Note: IcebergRestCatalog from iceberg-js automatically adds /v1/ prefix to API paths\n    // so we should NOT append /v1 here (it would cause double /v1/v1/ in the URL)\n    const catalog = new IcebergRestCatalog({\n      baseUrl: this.url,\n      catalogName: bucketName, // Maps to the warehouse parameter in Supabase's implementation\n      auth: {\n        type: 'custom',\n        getHeaders: async () => this.headers,\n      },\n      fetch: this.fetch,\n    })\n\n    const shouldThrowOnError = this.shouldThrowOnError\n\n    const wrappedCatalog = new Proxy(catalog, {\n      get(target, prop: keyof IcebergRestCatalog) {\n        const value = target[prop]\n        if (typeof value !== 'function') {\n          return value\n        }\n\n        return async (...args: unknown[]) => {\n          try {\n            const data = await (value as Function).apply(target, args)\n            return { data, error: null }\n          } catch (error) {\n            if (shouldThrowOnError) {\n              throw error\n            }\n            return { data: null, error: error as IcebergError }\n          }\n        }\n      },\n    }) as unknown as WrappedIcebergRestCatalog\n\n    return wrappedCatalog\n  }\n}\n", "import { DEFAULT_HEADERS } from '../lib/constants'\nimport { StorageError } from '../lib/common/errors'\nimport { Fetch, vectorsApi } from '../lib/common/fetch'\nimport BaseApiClient from '../lib/common/BaseApiClient'\nimport {\n  ApiResponse,\n  VectorIndex,\n  ListIndexesOptions,\n  ListIndexesResponse,\n  VectorDataType,\n  DistanceMetric,\n  MetadataConfiguration,\n} from '../lib/types'\n\n/**\n * @alpha\n *\n * Options for creating a vector index\n *\n * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n */\nexport interface CreateIndexOptions {\n  vectorBucketName: string\n  indexName: string\n  dataType: VectorDataType\n  dimension: number\n  distanceMetric: DistanceMetric\n  metadataConfiguration?: MetadataConfiguration\n}\n\n/**\n * @hidden\n * Base implementation for vector index operations.\n * Use {@link VectorBucketScope} via `supabase.storage.vectors.from('bucket')` instead.\n */\nexport default class VectorIndexApi extends BaseApiClient<StorageError> {\n  /** Creates a new VectorIndexApi instance */\n  constructor(url: string, headers: { [key: string]: string } = {}, fetch?: Fetch) {\n    const finalUrl = url.replace(/\\/$/, '')\n    const finalHeaders = { ...DEFAULT_HEADERS, 'Content-Type': 'application/json', ...headers }\n    super(finalUrl, finalHeaders, fetch, 'vectors')\n  }\n\n  /** Creates a new vector index within a bucket */\n  async createIndex(options: CreateIndexOptions): Promise<ApiResponse<undefined>> {\n    return this.handleOperation(async () => {\n      const data = await vectorsApi.post(this.fetch, `${this.url}/CreateIndex`, options, {\n        headers: this.headers,\n      })\n      return data || {}\n    })\n  }\n\n  /** Retrieves metadata for a specific vector index */\n  async getIndex(\n    vectorBucketName: string,\n    indexName: string\n  ): Promise<ApiResponse<{ index: VectorIndex }>> {\n    return this.handleOperation(async () => {\n      return await vectorsApi.post(\n        this.fetch,\n        `${this.url}/GetIndex`,\n        { vectorBucketName, indexName },\n        { headers: this.headers }\n      )\n    })\n  }\n\n  /** Lists vector indexes within a bucket with optional filtering and pagination */\n  async listIndexes(options: ListIndexesOptions): Promise<ApiResponse<ListIndexesResponse>> {\n    return this.handleOperation(async () => {\n      return await vectorsApi.post(this.fetch, `${this.url}/ListIndexes`, options, {\n        headers: this.headers,\n      })\n    })\n  }\n\n  /** Deletes a vector index and all its data */\n  async deleteIndex(vectorBucketName: string, indexName: string): Promise<ApiResponse<undefined>> {\n    return this.handleOperation(async () => {\n      const data = await vectorsApi.post(\n        this.fetch,\n        `${this.url}/DeleteIndex`,\n        { vectorBucketName, indexName },\n        { headers: this.headers }\n      )\n      return data || {}\n    })\n  }\n}\n", "import { DEFAULT_HEADERS } from '../lib/constants'\nimport { StorageError } from '../lib/common/errors'\nimport { Fetch, vectorsApi } from '../lib/common/fetch'\nimport BaseApiClient from '../lib/common/BaseApiClient'\nimport {\n  ApiResponse,\n  PutVectorsOptions,\n  GetVectorsOptions,\n  GetVectorsResponse,\n  DeleteVectorsOptions,\n  ListVectorsOptions,\n  ListVectorsResponse,\n  QueryVectorsOptions,\n  QueryVectorsResponse,\n} from '../lib/types'\n\n/**\n * @hidden\n * Base implementation for vector data operations.\n * Use {@link VectorIndexScope} via `supabase.storage.vectors.from('bucket').index('idx')` instead.\n */\nexport default class VectorDataApi extends BaseApiClient<StorageError> {\n  /** Creates a new VectorDataApi instance */\n  constructor(url: string, headers: { [key: string]: string } = {}, fetch?: Fetch) {\n    const finalUrl = url.replace(/\\/$/, '')\n    const finalHeaders = { ...DEFAULT_HEADERS, 'Content-Type': 'application/json', ...headers }\n    super(finalUrl, finalHeaders, fetch, 'vectors')\n  }\n\n  /** Inserts or updates vectors in batch (1-500 per request) */\n  async putVectors(options: PutVectorsOptions): Promise<ApiResponse<undefined>> {\n    // Validate batch size\n    if (options.vectors.length < 1 || options.vectors.length > 500) {\n      throw new Error('Vector batch size must be between 1 and 500 items')\n    }\n\n    return this.handleOperation(async () => {\n      const data = await vectorsApi.post(this.fetch, `${this.url}/PutVectors`, options, {\n        headers: this.headers,\n      })\n      return data || {}\n    })\n  }\n\n  /** Retrieves vectors by their keys in batch */\n  async getVectors(options: GetVectorsOptions): Promise<ApiResponse<GetVectorsResponse>> {\n    return this.handleOperation(async () => {\n      return await vectorsApi.post(this.fetch, `${this.url}/GetVectors`, options, {\n        headers: this.headers,\n      })\n    })\n  }\n\n  /** Lists vectors in an index with pagination */\n  async listVectors(options: ListVectorsOptions): Promise<ApiResponse<ListVectorsResponse>> {\n    // Validate segment configuration\n    if (options.segmentCount !== undefined) {\n      if (options.segmentCount < 1 || options.segmentCount > 16) {\n        throw new Error('segmentCount must be between 1 and 16')\n      }\n      if (options.segmentIndex !== undefined) {\n        if (options.segmentIndex < 0 || options.segmentIndex >= options.segmentCount) {\n          throw new Error(`segmentIndex must be between 0 and ${options.segmentCount - 1}`)\n        }\n      }\n    }\n\n    return this.handleOperation(async () => {\n      return await vectorsApi.post(this.fetch, `${this.url}/ListVectors`, options, {\n        headers: this.headers,\n      })\n    })\n  }\n\n  /** Queries for similar vectors using approximate nearest neighbor search */\n  async queryVectors(options: QueryVectorsOptions): Promise<ApiResponse<QueryVectorsResponse>> {\n    return this.handleOperation(async () => {\n      return await vectorsApi.post(this.fetch, `${this.url}/QueryVectors`, options, {\n        headers: this.headers,\n      })\n    })\n  }\n\n  /** Deletes vectors by their keys in batch (1-500 per request) */\n  async deleteVectors(options: DeleteVectorsOptions): Promise<ApiResponse<undefined>> {\n    // Validate batch size\n    if (options.keys.length < 1 || options.keys.length > 500) {\n      throw new Error('Keys batch size must be between 1 and 500 items')\n    }\n\n    return this.handleOperation(async () => {\n      const data = await vectorsApi.post(this.fetch, `${this.url}/DeleteVectors`, options, {\n        headers: this.headers,\n      })\n      return data || {}\n    })\n  }\n}\n", "import { DEFAULT_HEADERS } from '../lib/constants'\nimport { StorageError } from '../lib/common/errors'\nimport { Fetch, vectorsApi } from '../lib/common/fetch'\nimport BaseApiClient from '../lib/common/BaseApiClient'\nimport {\n  ApiResponse,\n  VectorBucket,\n  ListVectorBucketsOptions,\n  ListVectorBucketsResponse,\n} from '../lib/types'\n\n/**\n * @hidden\n * Base implementation for vector bucket operations.\n * Use {@link StorageVectorsClient} via `supabase.storage.vectors` instead.\n */\nexport default class VectorBucketApi extends BaseApiClient<StorageError> {\n  /** Creates a new VectorBucketApi instance */\n  constructor(url: string, headers: { [key: string]: string } = {}, fetch?: Fetch) {\n    const finalUrl = url.replace(/\\/$/, '')\n    const finalHeaders = { ...DEFAULT_HEADERS, 'Content-Type': 'application/json', ...headers }\n    super(finalUrl, finalHeaders, fetch, 'vectors')\n  }\n\n  /** Creates a new vector bucket */\n  async createBucket(vectorBucketName: string): Promise<ApiResponse<undefined>> {\n    return this.handleOperation(async () => {\n      const data = await vectorsApi.post(\n        this.fetch,\n        `${this.url}/CreateVectorBucket`,\n        { vectorBucketName },\n        { headers: this.headers }\n      )\n      return data || {}\n    })\n  }\n\n  /** Retrieves metadata for a specific vector bucket */\n  async getBucket(vectorBucketName: string): Promise<ApiResponse<{ vectorBucket: VectorBucket }>> {\n    return this.handleOperation(async () => {\n      return await vectorsApi.post(\n        this.fetch,\n        `${this.url}/GetVectorBucket`,\n        { vectorBucketName },\n        { headers: this.headers }\n      )\n    })\n  }\n\n  /** Lists vector buckets with optional filtering and pagination */\n  async listBuckets(\n    options: ListVectorBucketsOptions = {}\n  ): Promise<ApiResponse<ListVectorBucketsResponse>> {\n    return this.handleOperation(async () => {\n      return await vectorsApi.post(this.fetch, `${this.url}/ListVectorBuckets`, options, {\n        headers: this.headers,\n      })\n    })\n  }\n\n  /** Deletes a vector bucket (must be empty first) */\n  async deleteBucket(vectorBucketName: string): Promise<ApiResponse<undefined>> {\n    return this.handleOperation(async () => {\n      const data = await vectorsApi.post(\n        this.fetch,\n        `${this.url}/DeleteVectorBucket`,\n        { vectorBucketName },\n        { headers: this.headers }\n      )\n      return data || {}\n    })\n  }\n}\n", "import VectorIndexApi, { CreateIndexOptions } from './VectorIndexApi'\nimport VectorDataApi from './VectorDataApi'\nimport { Fetch } from '../lib/common/fetch'\nimport VectorBucketApi from './VectorBucketApi'\nimport {\n  ApiResponse,\n  DeleteVectorsOptions,\n  GetVectorsOptions,\n  ListIndexesOptions,\n  ListVectorsOptions,\n  ListVectorBucketsOptions,\n  ListVectorBucketsResponse,\n  PutVectorsOptions,\n  QueryVectorsOptions,\n  VectorBucket,\n} from '../lib/types'\n\n/**\n *\n * @alpha\n *\n * Configuration options for the Storage Vectors client\n *\n * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n */\nexport interface StorageVectorsClientOptions {\n  /**\n   * Custom headers to include in all requests\n   */\n  headers?: { [key: string]: string }\n  /**\n   * Custom fetch implementation (optional)\n   * Useful for testing or custom request handling\n   */\n  fetch?: Fetch\n}\n\n/**\n *\n * @alpha\n *\n * Main client for interacting with S3 Vectors API\n * Provides access to bucket, index, and vector data operations\n *\n * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n *\n * **Usage Patterns:**\n *\n * ```typescript\n * const { data, error } = await supabase\n *  .storage\n *  .vectors\n *  .createBucket('embeddings-prod')\n *\n * // Access index operations via buckets\n * const bucket = supabase.storage.vectors.from('embeddings-prod')\n * await bucket.createIndex({\n *   indexName: 'documents',\n *   dataType: 'float32',\n *   dimension: 1536,\n *   distanceMetric: 'cosine'\n * })\n *\n * // Access vector operations via index\n * const index = bucket.index('documents')\n * await index.putVectors({\n *   vectors: [\n *     { key: 'doc-1', data: { float32: [...] }, metadata: { title: 'Intro' } }\n *   ]\n * })\n *\n * // Query similar vectors\n * const { data } = await index.queryVectors({\n *   queryVector: { float32: [...] },\n *   topK: 5,\n *   returnDistance: true\n * })\n * ```\n */\nexport class StorageVectorsClient extends VectorBucketApi {\n  /**\n   * @alpha\n   *\n   * Creates a StorageVectorsClient that can manage buckets, indexes, and vectors.\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param url - Base URL of the Storage Vectors REST API.\n   * @param options.headers - Optional headers (for example `Authorization`) applied to every request.\n   * @param options.fetch - Optional custom `fetch` implementation for non-browser runtimes.\n   *\n   * @example Using supabase-js (recommended)\n   * ```typescript\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n   * const bucket = supabase.storage.vectors.from('embeddings-prod')\n   * ```\n   *\n   * @example Standalone import for bundle-sensitive environments\n   * ```typescript\n   * import { StorageVectorsClient } from '@supabase/storage-js'\n   *\n   * const client = new StorageVectorsClient(url, options)\n   * ```\n   */\n  constructor(url: string, options: StorageVectorsClientOptions = {}) {\n    super(url, options.headers || {}, options.fetch)\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Access operations for a specific vector bucket\n   * Returns a scoped client for index and vector operations within the bucket\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param vectorBucketName - Name of the vector bucket\n   * @returns Bucket-scoped client with index and vector operations\n   *\n   * @example Accessing a vector bucket\n   * ```typescript\n   * const bucket = supabase.storage.vectors.from('embeddings-prod')\n   * ```\n   */\n  from(vectorBucketName: string): VectorBucketScope {\n    return new VectorBucketScope(this.url, this.headers, vectorBucketName, this.fetch)\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Creates a new vector bucket\n   * Vector buckets are containers for vector indexes and their data\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param vectorBucketName - Unique name for the vector bucket\n   * @returns Promise with empty response on success or error\n   *\n   * @example Creating a vector bucket\n   * ```typescript\n   * const { data, error } = await supabase\n   *   .storage\n   *   .vectors\n   *   .createBucket('embeddings-prod')\n   * ```\n   */\n  async createBucket(vectorBucketName: string): Promise<ApiResponse<undefined>> {\n    return super.createBucket(vectorBucketName)\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Retrieves metadata for a specific vector bucket\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param vectorBucketName - Name of the vector bucket\n   * @returns Promise with bucket metadata or error\n   *\n   * @example Get bucket metadata\n   * ```typescript\n   * const { data, error } = await supabase\n   *   .storage\n   *   .vectors\n   *   .getBucket('embeddings-prod')\n   *\n   * console.log('Bucket created:', data?.vectorBucket.creationTime)\n   * ```\n   */\n  async getBucket(vectorBucketName: string): Promise<ApiResponse<{ vectorBucket: VectorBucket }>> {\n    return super.getBucket(vectorBucketName)\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Lists all vector buckets with optional filtering and pagination\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param options - Optional filters (prefix, maxResults, nextToken)\n   * @returns Promise with list of buckets or error\n   *\n   * @example List vector buckets\n   * ```typescript\n   * const { data, error } = await supabase\n   *   .storage\n   *   .vectors\n   *   .listBuckets({ prefix: 'embeddings-' })\n   *\n   * data?.vectorBuckets.forEach(bucket => {\n   *   console.log(bucket.vectorBucketName)\n   * })\n   * ```\n   */\n  async listBuckets(\n    options: ListVectorBucketsOptions = {}\n  ): Promise<ApiResponse<ListVectorBucketsResponse>> {\n    return super.listBuckets(options)\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Deletes a vector bucket (bucket must be empty)\n   * All indexes must be deleted before deleting the bucket\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param vectorBucketName - Name of the vector bucket to delete\n   * @returns Promise with empty response on success or error\n   *\n   * @example Delete a vector bucket\n   * ```typescript\n   * const { data, error } = await supabase\n   *   .storage\n   *   .vectors\n   *   .deleteBucket('embeddings-old')\n   * ```\n   */\n  async deleteBucket(vectorBucketName: string): Promise<ApiResponse<undefined>> {\n    return super.deleteBucket(vectorBucketName)\n  }\n}\n\n/**\n *\n * @alpha\n *\n * Scoped client for operations within a specific vector bucket\n * Provides index management and access to vector operations\n *\n * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n */\nexport class VectorBucketScope extends VectorIndexApi {\n  private vectorBucketName: string\n\n  /**\n   * @alpha\n   *\n   * Creates a helper that automatically scopes all index operations to the provided bucket.\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @example Creating a vector bucket scope\n   * ```typescript\n   * const bucket = supabase.storage.vectors.from('embeddings-prod')\n   * ```\n   */\n  constructor(\n    url: string,\n    headers: { [key: string]: string },\n    vectorBucketName: string,\n    fetch?: Fetch\n  ) {\n    super(url, headers, fetch)\n    this.vectorBucketName = vectorBucketName\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Creates a new vector index in this bucket\n   * Convenience method that automatically includes the bucket name\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param options - Index configuration (vectorBucketName is automatically set)\n   * @returns Promise with empty response on success or error\n   *\n   * @example Creating a vector index\n   * ```typescript\n   * const bucket = supabase.storage.vectors.from('embeddings-prod')\n   * await bucket.createIndex({\n   *   indexName: 'documents-openai',\n   *   dataType: 'float32',\n   *   dimension: 1536,\n   *   distanceMetric: 'cosine',\n   *   metadataConfiguration: {\n   *     nonFilterableMetadataKeys: ['raw_text']\n   *   }\n   * })\n   * ```\n   */\n  override async createIndex(options: Omit<CreateIndexOptions, 'vectorBucketName'>) {\n    return super.createIndex({\n      ...options,\n      vectorBucketName: this.vectorBucketName,\n    })\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Lists indexes in this bucket\n   * Convenience method that automatically includes the bucket name\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param options - Listing options (vectorBucketName is automatically set)\n   * @returns Promise with response containing indexes array and pagination token or error\n   *\n   * @example List indexes\n   * ```typescript\n   * const bucket = supabase.storage.vectors.from('embeddings-prod')\n   * const { data } = await bucket.listIndexes({ prefix: 'documents-' })\n   * ```\n   */\n  override async listIndexes(options: Omit<ListIndexesOptions, 'vectorBucketName'> = {}) {\n    return super.listIndexes({\n      ...options,\n      vectorBucketName: this.vectorBucketName,\n    })\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Retrieves metadata for a specific index in this bucket\n   * Convenience method that automatically includes the bucket name\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param indexName - Name of the index to retrieve\n   * @returns Promise with index metadata or error\n   *\n   * @example Get index metadata\n   * ```typescript\n   * const bucket = supabase.storage.vectors.from('embeddings-prod')\n   * const { data } = await bucket.getIndex('documents-openai')\n   * console.log('Dimension:', data?.index.dimension)\n   * ```\n   */\n  override async getIndex(indexName: string) {\n    return super.getIndex(this.vectorBucketName, indexName)\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Deletes an index from this bucket\n   * Convenience method that automatically includes the bucket name\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param indexName - Name of the index to delete\n   * @returns Promise with empty response on success or error\n   *\n   * @example Delete an index\n   * ```typescript\n   * const bucket = supabase.storage.vectors.from('embeddings-prod')\n   * await bucket.deleteIndex('old-index')\n   * ```\n   */\n  override async deleteIndex(indexName: string) {\n    return super.deleteIndex(this.vectorBucketName, indexName)\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Access operations for a specific index within this bucket\n   * Returns a scoped client for vector data operations\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param indexName - Name of the index\n   * @returns Index-scoped client with vector data operations\n   *\n   * @example Accessing an index\n   * ```typescript\n   * const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n   *\n   * // Insert vectors\n   * await index.putVectors({\n   *   vectors: [\n   *     { key: 'doc-1', data: { float32: [...] }, metadata: { title: 'Intro' } }\n   *   ]\n   * })\n   *\n   * // Query similar vectors\n   * const { data } = await index.queryVectors({\n   *   queryVector: { float32: [...] },\n   *   topK: 5\n   * })\n   * ```\n   */\n  index(indexName: string): VectorIndexScope {\n    return new VectorIndexScope(\n      this.url,\n      this.headers,\n      this.vectorBucketName,\n      indexName,\n      this.fetch\n    )\n  }\n}\n\n/**\n *\n * @alpha\n *\n * Scoped client for operations within a specific vector index\n * Provides vector data operations (put, get, list, query, delete)\n *\n * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n */\nexport class VectorIndexScope extends VectorDataApi {\n  private vectorBucketName: string\n  private indexName: string\n\n  /**\n   *\n   * @alpha\n   *\n   * Creates a helper that automatically scopes all vector operations to the provided bucket/index names.\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @example Creating a vector index scope\n   * ```typescript\n   * const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n   * ```\n   */\n  constructor(\n    url: string,\n    headers: { [key: string]: string },\n    vectorBucketName: string,\n    indexName: string,\n    fetch?: Fetch\n  ) {\n    super(url, headers, fetch)\n    this.vectorBucketName = vectorBucketName\n    this.indexName = indexName\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Inserts or updates vectors in this index\n   * Convenience method that automatically includes bucket and index names\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param options - Vector insertion options (bucket and index names automatically set)\n   * @returns Promise with empty response on success or error\n   *\n   * @example Insert vectors into an index\n   * ```typescript\n   * const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n   * await index.putVectors({\n   *   vectors: [\n   *     {\n   *       key: 'doc-1',\n   *       data: { float32: [0.1, 0.2, ...] },\n   *       metadata: { title: 'Introduction', page: 1 }\n   *     }\n   *   ]\n   * })\n   * ```\n   */\n  override async putVectors(options: Omit<PutVectorsOptions, 'vectorBucketName' | 'indexName'>) {\n    return super.putVectors({\n      ...options,\n      vectorBucketName: this.vectorBucketName,\n      indexName: this.indexName,\n    })\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Retrieves vectors by keys from this index\n   * Convenience method that automatically includes bucket and index names\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param options - Vector retrieval options (bucket and index names automatically set)\n   * @returns Promise with response containing vectors array or error\n   *\n   * @example Get vectors by keys\n   * ```typescript\n   * const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n   * const { data } = await index.getVectors({\n   *   keys: ['doc-1', 'doc-2'],\n   *   returnMetadata: true\n   * })\n   * ```\n   */\n  override async getVectors(options: Omit<GetVectorsOptions, 'vectorBucketName' | 'indexName'>) {\n    return super.getVectors({\n      ...options,\n      vectorBucketName: this.vectorBucketName,\n      indexName: this.indexName,\n    })\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Lists vectors in this index with pagination\n   * Convenience method that automatically includes bucket and index names\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param options - Listing options (bucket and index names automatically set)\n   * @returns Promise with response containing vectors array and pagination token or error\n   *\n   * @example List vectors with pagination\n   * ```typescript\n   * const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n   * const { data } = await index.listVectors({\n   *   maxResults: 500,\n   *   returnMetadata: true\n   * })\n   * ```\n   */\n  override async listVectors(\n    options: Omit<ListVectorsOptions, 'vectorBucketName' | 'indexName'> = {}\n  ) {\n    return super.listVectors({\n      ...options,\n      vectorBucketName: this.vectorBucketName,\n      indexName: this.indexName,\n    })\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Queries for similar vectors in this index\n   * Convenience method that automatically includes bucket and index names\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param options - Query options (bucket and index names automatically set)\n   * @returns Promise with response containing matches array of similar vectors ordered by distance or error\n   *\n   * @example Query similar vectors\n   * ```typescript\n   * const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n   * const { data } = await index.queryVectors({\n   *   queryVector: { float32: [0.1, 0.2, ...] },\n   *   topK: 5,\n   *   filter: { category: 'technical' },\n   *   returnDistance: true,\n   *   returnMetadata: true\n   * })\n   * ```\n   */\n  override async queryVectors(\n    options: Omit<QueryVectorsOptions, 'vectorBucketName' | 'indexName'>\n  ) {\n    return super.queryVectors({\n      ...options,\n      vectorBucketName: this.vectorBucketName,\n      indexName: this.indexName,\n    })\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Deletes vectors by keys from this index\n   * Convenience method that automatically includes bucket and index names\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   * @param options - Deletion options (bucket and index names automatically set)\n   * @returns Promise with empty response on success or error\n   *\n   * @example Delete vectors by keys\n   * ```typescript\n   * const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n   * await index.deleteVectors({\n   *   keys: ['doc-1', 'doc-2', 'doc-3']\n   * })\n   * ```\n   */\n  override async deleteVectors(\n    options: Omit<DeleteVectorsOptions, 'vectorBucketName' | 'indexName'>\n  ) {\n    return super.deleteVectors({\n      ...options,\n      vectorBucketName: this.vectorBucketName,\n      indexName: this.indexName,\n    })\n  }\n}\n", "import StorageFileApi from './packages/StorageFileApi'\nimport StorageBucketApi from './packages/StorageBucketApi'\nimport StorageAnalyticsClient from './packages/StorageAnalyticsClient'\nimport { Fetch } from './lib/common/fetch'\nimport { StorageVectorsClient } from './packages/StorageVectorsClient'\n\nexport interface StorageClientOptions {\n  useNewHostname?: boolean\n}\n\nexport class StorageClient extends StorageBucketApi {\n  /**\n   * Creates a client for Storage buckets, files, analytics, and vectors.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   *\n   * @example Using supabase-js (recommended)\n   * ```ts\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n   * const avatars = supabase.storage.from('avatars')\n   * ```\n   *\n   * @example Standalone import for bundle-sensitive environments\n   * ```ts\n   * import { StorageClient } from '@supabase/storage-js'\n   *\n   * const storage = new StorageClient('https://xyzcompany.supabase.co/storage/v1', {\n   *   apikey: 'your-publishable-key',\n   * })\n   * const avatars = storage.from('avatars')\n   * ```\n   */\n  constructor(\n    url: string,\n    headers: { [key: string]: string } = {},\n    fetch?: Fetch,\n    opts?: StorageClientOptions\n  ) {\n    super(url, headers, fetch, opts)\n  }\n\n  /**\n   * Perform file operation in a bucket.\n   *\n   * @category Storage\n   * @subcategory File Buckets\n   *\n   * @param id The bucket id to operate on.\n   *\n   * @example Accessing a bucket\n   * ```typescript\n   * const avatars = supabase.storage.from('avatars')\n   * ```\n   */\n  from(id: string): StorageFileApi {\n    return new StorageFileApi(this.url, this.headers, id, this.fetch)\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Access vector storage operations.\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Vector Buckets\n   *\n   * @returns A StorageVectorsClient instance configured with the current storage settings.\n   */\n  get vectors(): StorageVectorsClient {\n    return new StorageVectorsClient(this.url + '/vector', {\n      headers: this.headers,\n      fetch: this.fetch,\n    })\n  }\n\n  /**\n   *\n   * @alpha\n   *\n   * Access analytics storage operations using Iceberg tables.\n   *\n   * **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n   *\n   * @category Storage\n   * @subcategory Analytics Buckets\n   *\n   * @returns A StorageAnalyticsClient instance configured with the current storage settings.\n   */\n  get analytics(): StorageAnalyticsClient {\n    return new StorageAnalyticsClient(this.url + '/iceberg', this.headers, this.fetch)\n  }\n}\n", "// Generated automatically during releases by scripts/update-version-files.ts\n// This file provides runtime access to the package version for:\n// - HTTP request headers (e.g., X-Client-Info header for API requests)\n// - Debugging and support (identifying which version is running)\n// - Telemetry and logging (version reporting in errors/analytics)\n// - Ensuring build artifacts match the published package version\nexport const version = '2.106.1'\n", "import { version } from './version'\n\n/** Current session will be checked for refresh at this interval. */\nexport const AUTO_REFRESH_TICK_DURATION_MS = 30 * 1000\n\n/**\n * A token refresh will be attempted this many ticks before the current session expires. */\nexport const AUTO_REFRESH_TICK_THRESHOLD = 3\n\n/*\n * Earliest time before an access token expires that the session should be refreshed.\n */\nexport const EXPIRY_MARGIN_MS = AUTO_REFRESH_TICK_THRESHOLD * AUTO_REFRESH_TICK_DURATION_MS\n\nexport const GOTRUE_URL = 'http://localhost:9999'\nexport const STORAGE_KEY = 'supabase.auth.token'\nexport const AUDIENCE = ''\nexport const DEFAULT_HEADERS = { 'X-Client-Info': `gotrue-js/${version}` }\nexport const NETWORK_FAILURE = {\n  MAX_RETRIES: 10,\n  RETRY_INTERVAL: 2, // in deciseconds\n}\n\nexport const API_VERSION_HEADER_NAME = 'X-Supabase-Api-Version'\nexport const API_VERSIONS = {\n  '2024-01-01': {\n    timestamp: Date.parse('2024-01-01T00:00:00.0Z'),\n    name: '2024-01-01',\n  },\n}\n\nexport const BASE64URL_REGEX = /^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}$|[a-z0-9_-]{2}$)$/i\n\nexport const JWKS_TTL = 10 * 60 * 1000 // 10 minutes\n", "import { WeakPasswordReasons } from './types'\nimport { ErrorCode } from './error-codes'\n\n/**\n * Base error thrown by Supabase Auth helpers.\n *\n * @example\n * ```ts\n * import { AuthError } from '@supabase/auth-js'\n *\n * throw new AuthError('Unexpected auth error', 500, 'unexpected')\n * ```\n */\nexport class AuthError extends Error {\n  /**\n   * Error code associated with the error. Most errors coming from\n   * HTTP responses will have a code, though some errors that occur\n   * before a response is received will not have one present. In that\n   * case {@link #status} will also be undefined.\n   */\n  code: ErrorCode | (string & {}) | undefined\n\n  /** HTTP status code that caused the error. */\n  status: number | undefined\n\n  protected __isAuthError = true\n\n  constructor(message: string, status?: number, code?: string) {\n    super(message)\n    this.name = 'AuthError'\n    this.status = status\n    this.code = code\n  }\n\n  toJSON(): {\n    name: string\n    message: string\n    status: number | undefined\n    code: ErrorCode | (string & {}) | undefined\n  } {\n    return {\n      name: this.name,\n      message: this.message,\n      status: this.status,\n      code: this.code,\n    }\n  }\n}\n\nexport function isAuthError(error: unknown): error is AuthError {\n  return typeof error === 'object' && error !== null && '__isAuthError' in error\n}\n\n/**\n * Error returned directly from the GoTrue REST API.\n *\n * @example\n * ```ts\n * import { AuthApiError } from '@supabase/auth-js'\n *\n * throw new AuthApiError('Invalid credentials', 400, 'invalid_credentials')\n * ```\n */\nexport class AuthApiError extends AuthError {\n  status: number\n\n  constructor(message: string, status: number, code: string | undefined) {\n    super(message, status, code)\n    this.name = 'AuthApiError'\n    this.status = status\n    this.code = code\n  }\n}\n\nexport function isAuthApiError(error: unknown): error is AuthApiError {\n  return isAuthError(error) && error.name === 'AuthApiError'\n}\n\n/**\n * Wraps non-standard errors so callers can inspect the root cause.\n *\n * @example\n * ```ts\n * import { AuthUnknownError } from '@supabase/auth-js'\n *\n * try {\n *   await someAuthCall()\n * } catch (err) {\n *   throw new AuthUnknownError('Auth failed', err)\n * }\n * ```\n */\nexport class AuthUnknownError extends AuthError {\n  originalError: unknown\n\n  constructor(message: string, originalError: unknown) {\n    super(message)\n    this.name = 'AuthUnknownError'\n    this.originalError = originalError\n  }\n}\n\n/**\n * Flexible error class used to create named auth errors at runtime.\n *\n * @example\n * ```ts\n * import { CustomAuthError } from '@supabase/auth-js'\n *\n * throw new CustomAuthError('My custom auth error', 'MyAuthError', 400, 'custom_code')\n * ```\n */\nexport class CustomAuthError extends AuthError {\n  name: string\n  status: number\n\n  constructor(message: string, name: string, status: number, code: string | undefined) {\n    super(message, status, code)\n    this.name = name\n    this.status = status\n  }\n}\n\n/**\n * Error thrown when an operation requires a session but none is present.\n *\n * @example\n * ```ts\n * import { AuthSessionMissingError } from '@supabase/auth-js'\n *\n * throw new AuthSessionMissingError()\n * ```\n */\nexport class AuthSessionMissingError extends CustomAuthError {\n  constructor() {\n    super('Auth session missing!', 'AuthSessionMissingError', 400, undefined)\n  }\n}\n\nexport function isAuthSessionMissingError(error: any): error is AuthSessionMissingError {\n  return isAuthError(error) && error.name === 'AuthSessionMissingError'\n}\n\n/**\n * Error thrown when the token response is malformed.\n *\n * @example\n * ```ts\n * import { AuthInvalidTokenResponseError } from '@supabase/auth-js'\n *\n * throw new AuthInvalidTokenResponseError()\n * ```\n */\nexport class AuthInvalidTokenResponseError extends CustomAuthError {\n  constructor() {\n    super('Auth session or user missing', 'AuthInvalidTokenResponseError', 500, undefined)\n  }\n}\n\n/**\n * Error thrown when email/password credentials are invalid.\n *\n * @example\n * ```ts\n * import { AuthInvalidCredentialsError } from '@supabase/auth-js'\n *\n * throw new AuthInvalidCredentialsError('Email or password is incorrect')\n * ```\n */\nexport class AuthInvalidCredentialsError extends CustomAuthError {\n  constructor(message: string) {\n    super(message, 'AuthInvalidCredentialsError', 400, undefined)\n  }\n}\n\n/**\n * Error thrown when implicit grant redirects contain an error.\n *\n * @example\n * ```ts\n * import { AuthImplicitGrantRedirectError } from '@supabase/auth-js'\n *\n * throw new AuthImplicitGrantRedirectError('OAuth redirect failed', {\n *   error: 'access_denied',\n *   code: 'oauth_error',\n * })\n * ```\n */\nexport class AuthImplicitGrantRedirectError extends CustomAuthError {\n  details: { error: string; code: string } | null = null\n  constructor(message: string, details: { error: string; code: string } | null = null) {\n    super(message, 'AuthImplicitGrantRedirectError', 500, undefined)\n    this.details = details\n  }\n\n  toJSON(): {\n    name: string\n    message: string\n    status: number | undefined\n    code: ErrorCode | (string & {}) | undefined\n    details: { error: string; code: string } | null\n  } {\n    return {\n      ...super.toJSON(),\n      details: this.details,\n    }\n  }\n}\n\nexport function isAuthImplicitGrantRedirectError(\n  error: any\n): error is AuthImplicitGrantRedirectError {\n  return isAuthError(error) && error.name === 'AuthImplicitGrantRedirectError'\n}\n\n/**\n * Error thrown during PKCE code exchanges.\n *\n * @example\n * ```ts\n * import { AuthPKCEGrantCodeExchangeError } from '@supabase/auth-js'\n *\n * throw new AuthPKCEGrantCodeExchangeError('PKCE exchange failed')\n * ```\n */\nexport class AuthPKCEGrantCodeExchangeError extends CustomAuthError {\n  details: { error: string; code: string } | null = null\n\n  constructor(message: string, details: { error: string; code: string } | null = null) {\n    super(message, 'AuthPKCEGrantCodeExchangeError', 500, undefined)\n    this.details = details\n  }\n\n  toJSON(): {\n    name: string\n    message: string\n    status: number | undefined\n    code: ErrorCode | (string & {}) | undefined\n    details: { error: string; code: string } | null\n  } {\n    return {\n      ...super.toJSON(),\n      details: this.details,\n    }\n  }\n}\n\n/**\n * Error thrown when the PKCE code verifier is not found in storage.\n * This typically happens when the auth flow was initiated in a different\n * browser, device, or the storage was cleared.\n *\n * @example\n * ```ts\n * import { AuthPKCECodeVerifierMissingError } from '@supabase/auth-js'\n *\n * throw new AuthPKCECodeVerifierMissingError()\n * ```\n */\nexport class AuthPKCECodeVerifierMissingError extends CustomAuthError {\n  constructor() {\n    super(\n      'PKCE code verifier not found in storage. ' +\n        'This can happen if the auth flow was initiated in a different browser or device, ' +\n        'or if the storage was cleared. For SSR frameworks (Next.js, SvelteKit, etc.), ' +\n        'use @supabase/ssr on both the server and client to store the code verifier in cookies.',\n      'AuthPKCECodeVerifierMissingError',\n      400,\n      'pkce_code_verifier_not_found'\n    )\n  }\n}\n\nexport function isAuthPKCECodeVerifierMissingError(\n  error: unknown\n): error is AuthPKCECodeVerifierMissingError {\n  return isAuthError(error) && error.name === 'AuthPKCECodeVerifierMissingError'\n}\n\n/**\n * Error thrown when a transient fetch issue occurs.\n *\n * @example\n * ```ts\n * import { AuthRetryableFetchError } from '@supabase/auth-js'\n *\n * throw new AuthRetryableFetchError('Service temporarily unavailable', 503)\n * ```\n */\nexport class AuthRetryableFetchError extends CustomAuthError {\n  constructor(message: string, status: number) {\n    super(message, 'AuthRetryableFetchError', status, undefined)\n  }\n}\n\nexport function isAuthRetryableFetchError(error: unknown): error is AuthRetryableFetchError {\n  return isAuthError(error) && error.name === 'AuthRetryableFetchError'\n}\n\n/**\n * This error is thrown on certain methods when the password used is deemed\n * weak. Inspect the reasons to identify what password strength rules are\n * inadequate.\n */\n/**\n * Error thrown when a supplied password is considered weak.\n *\n * @example\n * ```ts\n * import { AuthWeakPasswordError } from '@supabase/auth-js'\n *\n * throw new AuthWeakPasswordError('Password too short', 400, ['min_length'])\n * ```\n */\nexport class AuthWeakPasswordError extends CustomAuthError {\n  /**\n   * Reasons why the password is deemed weak.\n   */\n  reasons: WeakPasswordReasons[]\n\n  constructor(message: string, status: number, reasons: WeakPasswordReasons[]) {\n    super(message, 'AuthWeakPasswordError', status, 'weak_password')\n\n    this.reasons = reasons\n  }\n\n  toJSON(): {\n    name: string\n    message: string\n    status: number | undefined\n    code: ErrorCode | (string & {}) | undefined\n    reasons: WeakPasswordReasons[]\n  } {\n    return {\n      ...super.toJSON(),\n      reasons: this.reasons,\n    }\n  }\n}\n\nexport function isAuthWeakPasswordError(error: unknown): error is AuthWeakPasswordError {\n  return isAuthError(error) && error.name === 'AuthWeakPasswordError'\n}\n\n/**\n * Error thrown when a JWT cannot be verified or parsed.\n *\n * @example\n * ```ts\n * import { AuthInvalidJwtError } from '@supabase/auth-js'\n *\n * throw new AuthInvalidJwtError('Token signature is invalid')\n * ```\n */\nexport class AuthInvalidJwtError extends CustomAuthError {\n  constructor(message: string) {\n    super(message, 'AuthInvalidJwtError', 400, 'invalid_jwt')\n  }\n}\n", "/**\n * Avoid modifying this file. It's part of\n * https://github.com/supabase-community/base64url-js.  Submit all fixes on\n * that repo!\n */\n\nimport { Uint8Array_ } from './webauthn.dom'\n\n/**\n * An array of characters that encode 6 bits into a Base64-URL alphabet\n * character.\n */\nconst TO_BASE64URL = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'.split('')\n\n/**\n * An array of characters that can appear in a Base64-URL encoded string but\n * should be ignored.\n */\nconst IGNORE_BASE64URL = ' \\t\\n\\r='.split('')\n\n/**\n * An array of 128 numbers that map a Base64-URL character to 6 bits, or if -2\n * used to skip the character, or if -1 used to error out.\n */\nconst FROM_BASE64URL = (() => {\n  const charMap: number[] = new Array(128)\n\n  for (let i = 0; i < charMap.length; i += 1) {\n    charMap[i] = -1\n  }\n\n  for (let i = 0; i < IGNORE_BASE64URL.length; i += 1) {\n    charMap[IGNORE_BASE64URL[i].charCodeAt(0)] = -2\n  }\n\n  for (let i = 0; i < TO_BASE64URL.length; i += 1) {\n    charMap[TO_BASE64URL[i].charCodeAt(0)] = i\n  }\n\n  return charMap\n})()\n\n/**\n * Converts a byte to a Base64-URL string.\n *\n * @param byte The byte to convert, or null to flush at the end of the byte sequence.\n * @param state The Base64 conversion state. Pass an initial value of `{ queue: 0, queuedBits: 0 }`.\n * @param emit A function called with the next Base64 character when ready.\n */\nexport function byteToBase64URL(\n  byte: number | null,\n  state: { queue: number; queuedBits: number },\n  emit: (char: string) => void\n) {\n  if (byte !== null) {\n    state.queue = (state.queue << 8) | byte\n    state.queuedBits += 8\n\n    while (state.queuedBits >= 6) {\n      const pos = (state.queue >> (state.queuedBits - 6)) & 63\n      emit(TO_BASE64URL[pos])\n      state.queuedBits -= 6\n    }\n  } else if (state.queuedBits > 0) {\n    state.queue = state.queue << (6 - state.queuedBits)\n    state.queuedBits = 6\n\n    while (state.queuedBits >= 6) {\n      const pos = (state.queue >> (state.queuedBits - 6)) & 63\n      emit(TO_BASE64URL[pos])\n      state.queuedBits -= 6\n    }\n  }\n}\n\n/**\n * Converts a String char code (extracted using `string.charCodeAt(position)`) to a sequence of Base64-URL characters.\n *\n * @param charCode The char code of the JavaScript string.\n * @param state The Base64 state. Pass an initial value of `{ queue: 0, queuedBits: 0 }`.\n * @param emit A function called with the next byte.\n */\nexport function byteFromBase64URL(\n  charCode: number,\n  state: { queue: number; queuedBits: number },\n  emit: (byte: number) => void\n) {\n  const bits = FROM_BASE64URL[charCode]\n\n  if (bits > -1) {\n    // valid Base64-URL character\n    state.queue = (state.queue << 6) | bits\n    state.queuedBits += 6\n\n    while (state.queuedBits >= 8) {\n      emit((state.queue >> (state.queuedBits - 8)) & 0xff)\n      state.queuedBits -= 8\n    }\n  } else if (bits === -2) {\n    // ignore spaces, tabs, newlines, =\n    return\n  } else {\n    throw new Error(`Invalid Base64-URL character \"${String.fromCharCode(charCode)}\"`)\n  }\n}\n\n/**\n * Converts a JavaScript string (which may include any valid character) into a\n * Base64-URL encoded string. The string is first encoded in UTF-8 which is\n * then encoded as Base64-URL.\n *\n * @param str The string to convert.\n */\nexport function stringToBase64URL(str: string) {\n  const base64: string[] = []\n\n  const emitter = (char: string) => {\n    base64.push(char)\n  }\n\n  const state = { queue: 0, queuedBits: 0 }\n\n  stringToUTF8(str, (byte: number) => {\n    byteToBase64URL(byte, state, emitter)\n  })\n\n  byteToBase64URL(null, state, emitter)\n\n  return base64.join('')\n}\n\n/**\n * Converts a Base64-URL encoded string into a JavaScript string. It is assumed\n * that the underlying string has been encoded as UTF-8.\n *\n * @param str The Base64-URL encoded string.\n */\nexport function stringFromBase64URL(str: string) {\n  const conv: string[] = []\n\n  const utf8Emit = (codepoint: number) => {\n    conv.push(String.fromCodePoint(codepoint))\n  }\n\n  const utf8State = {\n    utf8seq: 0,\n    codepoint: 0,\n  }\n\n  const b64State = { queue: 0, queuedBits: 0 }\n\n  const byteEmit = (byte: number) => {\n    stringFromUTF8(byte, utf8State, utf8Emit)\n  }\n\n  for (let i = 0; i < str.length; i += 1) {\n    byteFromBase64URL(str.charCodeAt(i), b64State, byteEmit)\n  }\n\n  return conv.join('')\n}\n\n/**\n * Converts a Unicode codepoint to a multi-byte UTF-8 sequence.\n *\n * @param codepoint The Unicode codepoint.\n * @param emit      Function which will be called for each UTF-8 byte that represents the codepoint.\n */\nexport function codepointToUTF8(codepoint: number, emit: (byte: number) => void) {\n  if (codepoint <= 0x7f) {\n    emit(codepoint)\n    return\n  } else if (codepoint <= 0x7ff) {\n    emit(0xc0 | (codepoint >> 6))\n    emit(0x80 | (codepoint & 0x3f))\n    return\n  } else if (codepoint <= 0xffff) {\n    emit(0xe0 | (codepoint >> 12))\n    emit(0x80 | ((codepoint >> 6) & 0x3f))\n    emit(0x80 | (codepoint & 0x3f))\n    return\n  } else if (codepoint <= 0x10ffff) {\n    emit(0xf0 | (codepoint >> 18))\n    emit(0x80 | ((codepoint >> 12) & 0x3f))\n    emit(0x80 | ((codepoint >> 6) & 0x3f))\n    emit(0x80 | (codepoint & 0x3f))\n    return\n  }\n\n  throw new Error(`Unrecognized Unicode codepoint: ${codepoint.toString(16)}`)\n}\n\n/**\n * Converts a JavaScript string to a sequence of UTF-8 bytes.\n *\n * @param str  The string to convert to UTF-8.\n * @param emit Function which will be called for each UTF-8 byte of the string.\n */\nexport function stringToUTF8(str: string, emit: (byte: number) => void) {\n  for (let i = 0; i < str.length; i += 1) {\n    let codepoint = str.charCodeAt(i)\n\n    if (codepoint > 0xd7ff && codepoint <= 0xdbff) {\n      // most UTF-16 codepoints are Unicode codepoints, except values in this\n      // range where the next UTF-16 codepoint needs to be combined with the\n      // current one to get the Unicode codepoint\n      const highSurrogate = ((codepoint - 0xd800) * 0x400) & 0xffff\n      const lowSurrogate = (str.charCodeAt(i + 1) - 0xdc00) & 0xffff\n      codepoint = (lowSurrogate | highSurrogate) + 0x10000\n      i += 1\n    }\n\n    codepointToUTF8(codepoint, emit)\n  }\n}\n\n/**\n * Converts a UTF-8 byte to a Unicode codepoint.\n *\n * @param byte  The UTF-8 byte next in the sequence.\n * @param state The shared state between consecutive UTF-8 bytes in the\n *              sequence, an object with the shape `{ utf8seq: 0, codepoint: 0 }`.\n * @param emit  Function which will be called for each codepoint.\n */\nexport function stringFromUTF8(\n  byte: number,\n  state: { utf8seq: number; codepoint: number },\n  emit: (codepoint: number) => void\n) {\n  if (state.utf8seq === 0) {\n    if (byte <= 0x7f) {\n      emit(byte)\n      return\n    }\n\n    // count the number of 1 leading bits until you reach 0\n    for (let leadingBit = 1; leadingBit < 6; leadingBit += 1) {\n      if (((byte >> (7 - leadingBit)) & 1) === 0) {\n        state.utf8seq = leadingBit\n        break\n      }\n    }\n\n    if (state.utf8seq === 2) {\n      state.codepoint = byte & 31\n    } else if (state.utf8seq === 3) {\n      state.codepoint = byte & 15\n    } else if (state.utf8seq === 4) {\n      state.codepoint = byte & 7\n    } else {\n      throw new Error('Invalid UTF-8 sequence')\n    }\n\n    state.utf8seq -= 1\n  } else if (state.utf8seq > 0) {\n    if (byte <= 0x7f) {\n      throw new Error('Invalid UTF-8 sequence')\n    }\n\n    state.codepoint = (state.codepoint << 6) | (byte & 63)\n    state.utf8seq -= 1\n\n    if (state.utf8seq === 0) {\n      emit(state.codepoint)\n    }\n  }\n}\n\n/**\n * Helper functions to convert different types of strings to Uint8Array\n */\n\nexport function base64UrlToUint8Array(str: string): Uint8Array_ {\n  const result: number[] = []\n  const state = { queue: 0, queuedBits: 0 }\n\n  const onByte = (byte: number) => {\n    result.push(byte)\n  }\n\n  for (let i = 0; i < str.length; i += 1) {\n    byteFromBase64URL(str.charCodeAt(i), state, onByte)\n  }\n\n  return new Uint8Array(result)\n}\n\nexport function stringToUint8Array(str: string): Uint8Array_ {\n  const result: number[] = []\n  stringToUTF8(str, (byte: number) => result.push(byte))\n  return new Uint8Array(result)\n}\n\nexport function bytesToBase64URL(bytes: Uint8Array) {\n  const result: string[] = []\n  const state = { queue: 0, queuedBits: 0 }\n\n  const onChar = (char: string) => {\n    result.push(char)\n  }\n\n  bytes.forEach((byte) => byteToBase64URL(byte, state, onChar))\n\n  // always call with `null` after processing all bytes\n  byteToBase64URL(null, state, onChar)\n\n  return result.join('')\n}\n", "import { API_VERSION_HEADER_NAME, BASE64URL_REGEX } from './constants'\nimport { AuthInvalidJwtError } from './errors'\nimport { base64UrlToUint8Array, stringFromBase64URL } from './base64url'\nimport { JwtHeader, JwtPayload, SupportedStorage, User } from './types'\nimport { Uint8Array_ } from './webauthn.dom'\n\nexport function expiresAt(expiresIn: number) {\n  const timeNow = Math.round(Date.now() / 1000)\n  return timeNow + expiresIn\n}\n\n/**\n * Generates a unique identifier for internal callback subscriptions.\n *\n * This function uses JavaScript Symbols to create guaranteed-unique identifiers\n * for auth state change callbacks. Symbols are ideal for this use case because:\n * - They are guaranteed unique by the JavaScript runtime\n * - They work in all environments (browser, SSR, Node.js)\n * - They avoid issues with Next.js 16 deterministic rendering requirements\n * - They are perfect for internal, non-serializable identifiers\n *\n * Note: This function is only used for internal subscription management,\n * not for security-critical operations like session tokens.\n */\nexport function generateCallbackId(): symbol {\n  return Symbol('auth-callback')\n}\n\nexport const isBrowser = () => typeof window !== 'undefined' && typeof document !== 'undefined'\n\nconst localStorageWriteTests = {\n  tested: false,\n  writable: false,\n}\n\n/**\n * Checks whether localStorage is supported on this browser.\n */\nexport const supportsLocalStorage = () => {\n  if (!isBrowser()) {\n    return false\n  }\n\n  try {\n    if (typeof globalThis.localStorage !== 'object') {\n      return false\n    }\n  } catch (e) {\n    // DOM exception when accessing `localStorage`\n    return false\n  }\n\n  if (localStorageWriteTests.tested) {\n    return localStorageWriteTests.writable\n  }\n\n  const randomKey = `lswt-${Math.random()}${Math.random()}`\n\n  try {\n    globalThis.localStorage.setItem(randomKey, randomKey)\n    globalThis.localStorage.removeItem(randomKey)\n\n    localStorageWriteTests.tested = true\n    localStorageWriteTests.writable = true\n  } catch (e) {\n    // localStorage can't be written to\n    // https://www.chromium.org/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document\n\n    localStorageWriteTests.tested = true\n    localStorageWriteTests.writable = false\n  }\n\n  return localStorageWriteTests.writable\n}\n\n/**\n * Extracts parameters encoded in the URL both in the query and fragment.\n */\nexport function parseParametersFromURL(href: string) {\n  const result: { [parameter: string]: string } = {}\n\n  const url = new URL(href)\n\n  if (url.hash && url.hash[0] === '#') {\n    try {\n      const hashSearchParams = new URLSearchParams(url.hash.substring(1))\n      hashSearchParams.forEach((value, key) => {\n        result[key] = value\n      })\n    } catch (_e) {\n      // hash is not a query string\n    }\n  }\n\n  // search parameters take precedence over hash parameters\n  url.searchParams.forEach((value, key) => {\n    result[key] = value\n  })\n\n  return result\n}\n\ntype Fetch = typeof fetch\n\nexport const resolveFetch = (customFetch?: Fetch): Fetch => {\n  if (customFetch) {\n    return (...args) => customFetch(...args)\n  }\n  return (...args) => fetch(...args)\n}\n\nexport const looksLikeFetchResponse = (maybeResponse: unknown): maybeResponse is Response => {\n  return (\n    typeof maybeResponse === 'object' &&\n    maybeResponse !== null &&\n    'status' in maybeResponse &&\n    'ok' in maybeResponse &&\n    'json' in maybeResponse &&\n    typeof (maybeResponse as any).json === 'function'\n  )\n}\n\n// Storage helpers\nexport const setItemAsync = async (\n  storage: SupportedStorage,\n  key: string,\n  data: any\n): Promise<void> => {\n  await storage.setItem(key, JSON.stringify(data))\n}\n\nexport const getItemAsync = async (storage: SupportedStorage, key: string): Promise<unknown> => {\n  const value = await storage.getItem(key)\n\n  if (!value) {\n    return null\n  }\n\n  try {\n    return JSON.parse(value)\n  } catch {\n    // Storage values are always written as JSON via setItemAsync. A non-JSON\n    // value means the entry is corrupted (e.g. mismatched chunked cookies in\n    // SSR contexts). Treat as absent so callers do not mutate or re-save the\n    // garbage, which would otherwise trigger a TypeError downstream and\n    // leak the raw value into error logs.\n    return null\n  }\n}\n\nexport const removeItemAsync = async (storage: SupportedStorage, key: string): Promise<void> => {\n  await storage.removeItem(key)\n}\n\n/**\n * A deferred represents some asynchronous work that is not yet finished, which\n * may or may not culminate in a value.\n * Taken from: https://github.com/mike-north/types/blob/master/src/async.ts\n */\nexport class Deferred<T = any> {\n  public static promiseConstructor: PromiseConstructor = Promise\n\n  public readonly promise!: PromiseLike<T>\n\n  public readonly resolve!: (value?: T | PromiseLike<T>) => void\n\n  public readonly reject!: (reason?: any) => any\n\n  public constructor() {\n    // eslint-disable-next-line @typescript-eslint/no-extra-semi\n    ;(this as any).promise = new Deferred.promiseConstructor((res, rej) => {\n      // eslint-disable-next-line @typescript-eslint/no-extra-semi\n      ;(this as any).resolve = res\n      // eslint-disable-next-line @typescript-eslint/no-extra-semi\n      ;(this as any).reject = rej\n    })\n  }\n}\n\nexport function decodeJWT(token: string): {\n  header: JwtHeader\n  payload: JwtPayload\n  signature: Uint8Array_\n  raw: {\n    header: string\n    payload: string\n  }\n} {\n  const parts = token.split('.')\n\n  if (parts.length !== 3) {\n    throw new AuthInvalidJwtError('Invalid JWT structure')\n  }\n\n  // Regex checks for base64url format\n  for (let i = 0; i < parts.length; i++) {\n    if (!BASE64URL_REGEX.test(parts[i] as string)) {\n      throw new AuthInvalidJwtError('JWT not in base64url format')\n    }\n  }\n  const data = {\n    // using base64url lib\n    header: JSON.parse(stringFromBase64URL(parts[0])),\n    payload: JSON.parse(stringFromBase64URL(parts[1])),\n    signature: base64UrlToUint8Array(parts[2]),\n    raw: {\n      header: parts[0],\n      payload: parts[1],\n    },\n  }\n  return data\n}\n\n/**\n * Creates a promise that resolves to null after some time.\n */\nexport async function sleep(time: number): Promise<null> {\n  return await new Promise((accept) => {\n    setTimeout(() => accept(null), time)\n  })\n}\n\n/**\n * Converts the provided async function into a retryable function. Each result\n * or thrown error is sent to the isRetryable function which should return true\n * if the function should run again.\n */\nexport function retryable<T>(\n  fn: (attempt: number) => Promise<T>,\n  isRetryable: (attempt: number, error: any | null, result?: T) => boolean\n): Promise<T> {\n  const promise = new Promise<T>((accept, reject) => {\n    // eslint-disable-next-line @typescript-eslint/no-extra-semi\n    ;(async () => {\n      for (let attempt = 0; attempt < Infinity; attempt++) {\n        try {\n          const result = await fn(attempt)\n\n          if (!isRetryable(attempt, null, result)) {\n            accept(result)\n            return\n          }\n        } catch (e) {\n          if (!isRetryable(attempt, e)) {\n            reject(e)\n            return\n          }\n        }\n      }\n    })()\n  })\n\n  return promise\n}\n\nfunction dec2hex(dec: number) {\n  return ('0' + dec.toString(16)).substr(-2)\n}\n\n// Functions below taken from: https://stackoverflow.com/questions/63309409/creating-a-code-verifier-and-challenge-for-pkce-auth-on-spotify-api-in-reactjs\nexport function generatePKCEVerifier() {\n  const verifierLength = 56\n  const array = new Uint32Array(verifierLength)\n  if (typeof crypto === 'undefined') {\n    const charSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~'\n    const charSetLen = charSet.length\n    let verifier = ''\n    for (let i = 0; i < verifierLength; i++) {\n      verifier += charSet.charAt(Math.floor(Math.random() * charSetLen))\n    }\n    return verifier\n  }\n  crypto.getRandomValues(array)\n  return Array.from(array, dec2hex).join('')\n}\n\nasync function sha256(randomString: string) {\n  const encoder = new TextEncoder()\n  const encodedData = encoder.encode(randomString)\n  const hash = await crypto.subtle.digest('SHA-256', encodedData)\n  const bytes = new Uint8Array(hash)\n\n  return Array.from(bytes)\n    .map((c) => String.fromCharCode(c))\n    .join('')\n}\n\nexport async function generatePKCEChallenge(verifier: string) {\n  const hasCryptoSupport =\n    typeof crypto !== 'undefined' &&\n    typeof crypto.subtle !== 'undefined' &&\n    typeof TextEncoder !== 'undefined'\n\n  if (!hasCryptoSupport) {\n    console.warn(\n      'WebCrypto API is not supported. Code challenge method will default to use plain instead of sha256.'\n    )\n    return verifier\n  }\n  const hashed = await sha256(verifier)\n  return btoa(hashed).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '')\n}\n\nexport async function getCodeChallengeAndMethod(\n  storage: SupportedStorage,\n  storageKey: string,\n  isPasswordRecovery = false\n) {\n  const codeVerifier = generatePKCEVerifier()\n  let storedCodeVerifier = codeVerifier\n  if (isPasswordRecovery) {\n    storedCodeVerifier += '/recovery'\n  }\n  await setItemAsync(storage, `${storageKey}-code-verifier`, storedCodeVerifier)\n  const codeChallenge = await generatePKCEChallenge(codeVerifier)\n  const codeChallengeMethod = codeVerifier === codeChallenge ? 'plain' : 's256'\n  return [codeChallenge, codeChallengeMethod]\n}\n\n/** Parses the API version which is 2YYY-MM-DD. */\nconst API_VERSION_REGEX = /^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i\n\nexport function parseResponseAPIVersion(response: Response) {\n  const apiVersion = response.headers.get(API_VERSION_HEADER_NAME)\n\n  if (!apiVersion) {\n    return null\n  }\n\n  if (!apiVersion.match(API_VERSION_REGEX)) {\n    return null\n  }\n\n  try {\n    const date = new Date(`${apiVersion}T00:00:00.0Z`)\n    return date\n  } catch (_e) {\n    return null\n  }\n}\n\nexport function validateExp(exp: number) {\n  if (!exp) {\n    throw new Error('Missing exp claim')\n  }\n  const timeNow = Math.floor(Date.now() / 1000)\n  if (exp <= timeNow) {\n    throw new Error('JWT has expired')\n  }\n}\n\nexport function getAlgorithm(\n  alg: 'HS256' | 'RS256' | 'ES256' | (string & {})\n): RsaHashedImportParams | EcKeyImportParams {\n  switch (alg) {\n    case 'RS256':\n      return {\n        name: 'RSASSA-PKCS1-v1_5',\n        hash: { name: 'SHA-256' },\n      }\n    case 'ES256':\n      return {\n        name: 'ECDSA',\n        namedCurve: 'P-256',\n        hash: { name: 'SHA-256' },\n      }\n    default:\n      throw new Error('Invalid alg claim')\n  }\n}\n\nconst UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/\n\nexport function validateUUID(str: string) {\n  if (!UUID_REGEX.test(str)) {\n    throw new Error('@supabase/auth-js: Expected parameter to be UUID but is not')\n  }\n}\n\nexport function assertPasskeyExperimentalEnabled(experimental: { passkey?: boolean }): void {\n  if (!experimental.passkey) {\n    throw new Error(\n      '@supabase/auth-js: the passkey API is experimental and disabled by default. Enable it by passing `auth: { experimental: { passkey: true } }` to createClient (or to the GoTrueClient constructor).'\n    )\n  }\n}\n\nexport function userNotAvailableProxy(): User {\n  const proxyTarget = {} as User\n\n  return new Proxy(proxyTarget, {\n    get: (target: any, prop: string) => {\n      if (prop === '__isUserNotAvailableProxy') {\n        return true\n      }\n      // Preventative check for common problematic symbols during cloning/inspection\n      // These symbols might be accessed by structuredClone or other internal mechanisms.\n      if (typeof prop === 'symbol') {\n        const sProp = (prop as symbol).toString()\n        if (\n          sProp === 'Symbol(Symbol.toPrimitive)' ||\n          sProp === 'Symbol(Symbol.toStringTag)' ||\n          sProp === 'Symbol(util.inspect.custom)'\n        ) {\n          // Node.js util.inspect\n          return undefined\n        }\n      }\n      throw new Error(\n        `@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Accessing the \"${prop}\" property of the session object is not supported. Please use getUser() instead.`\n      )\n    },\n    set: (_target: any, prop: string) => {\n      throw new Error(\n        `@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Setting the \"${prop}\" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`\n      )\n    },\n    deleteProperty: (_target: any, prop: string) => {\n      throw new Error(\n        `@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Deleting the \"${prop}\" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`\n      )\n    },\n  })\n}\n\n/**\n * Creates a proxy around a user object that warns when properties are accessed on the server.\n * This is used to alert developers that using user data from getSession() on the server is insecure.\n *\n * @param user The actual user object to wrap\n * @param suppressWarningRef An object with a 'value' property that controls warning suppression\n * @returns A proxied user object that warns on property access\n */\nexport function insecureUserWarningProxy(user: User, suppressWarningRef: { value: boolean }): User {\n  return new Proxy(user, {\n    get: (target: any, prop: string | symbol, receiver: any) => {\n      // Allow internal checks without warning\n      if (prop === '__isInsecureUserWarningProxy') {\n        return true\n      }\n\n      // Preventative check for common problematic symbols during cloning/inspection\n      // These symbols might be accessed by structuredClone or other internal mechanisms\n      if (typeof prop === 'symbol') {\n        const sProp = prop.toString()\n        if (\n          sProp === 'Symbol(Symbol.toPrimitive)' ||\n          sProp === 'Symbol(Symbol.toStringTag)' ||\n          sProp === 'Symbol(util.inspect.custom)' ||\n          sProp === 'Symbol(nodejs.util.inspect.custom)'\n        ) {\n          // Return the actual value for these symbols to allow proper inspection\n          return Reflect.get(target, prop, receiver)\n        }\n      }\n\n      // Emit warning on first property access\n      if (!suppressWarningRef.value && typeof prop === 'string') {\n        console.warn(\n          'Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server.'\n        )\n        suppressWarningRef.value = true\n      }\n\n      return Reflect.get(target, prop, receiver)\n    },\n  })\n}\n\n/**\n * Deep clones a JSON-serializable object using JSON.parse(JSON.stringify(obj)).\n * Note: Only works for JSON-safe data.\n */\nexport function deepClone<T>(obj: T): T {\n  return JSON.parse(JSON.stringify(obj))\n}\n", "import { API_VERSIONS, API_VERSION_HEADER_NAME } from './constants'\nimport { expiresAt, looksLikeFetchResponse, parseResponseAPIVersion } from './helpers'\nimport {\n  AuthResponse,\n  AuthResponsePassword,\n  Session,\n  SSOResponse,\n  GenerateLinkProperties,\n  GenerateLinkResponse,\n  User,\n  UserResponse,\n  WeakPassword,\n} from './types'\nimport {\n  AuthApiError,\n  AuthRetryableFetchError,\n  AuthWeakPasswordError,\n  AuthUnknownError,\n  AuthSessionMissingError,\n} from './errors'\n\nexport type Fetch = typeof fetch\n\n/** Raw session data from GoTrue server response. */\ninterface GoTrueSessionData {\n  access_token?: string\n  refresh_token?: string\n  expires_in?: number\n  expires_at?: number\n  user?: User\n  [key: string]: any // server returns additional fields (token_type, provider_token, etc.) copied into Session\n}\n\n/** Raw session data that includes weak password info (password sign-in endpoints). */\ninterface GoTrueSessionPasswordData extends GoTrueSessionData {\n  weak_password?: WeakPassword\n}\n\n/** Raw user data \u2014 either `{ user: User }` or the User object itself. */\ninterface GoTrueUserData {\n  user?: User\n  [key: string]: any // data may BE the User directly (fallback path)\n}\n\n/** Raw generate-link data \u2014 link properties + User fields flattened into one object. */\ntype GoTrueGenerateLinkData = GenerateLinkProperties & Record<string, any>\n\nexport interface FetchOptions {\n  headers?: {\n    [key: string]: string\n  }\n  noResolveJson?: boolean\n}\n\nexport interface FetchParameters {\n  signal?: AbortSignal\n}\n\nexport type RequestMethodType = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n\nconst _getErrorMessage = (err: unknown): string => {\n  if (typeof err === 'object' && err !== null) {\n    const e = err as Record<string, unknown>\n    if (typeof e.msg === 'string') return e.msg\n    if (typeof e.message === 'string') return e.message\n    if (typeof e.error_description === 'string') return e.error_description\n    if (typeof e.error === 'string') return e.error\n  }\n  return JSON.stringify(err)\n}\n\n// 502, 503, 504: Standard server/gateway errors\n// 520-524, 530: Cloudflare-specific error codes (web server down, connection timed out, etc.)\n// These are infrastructure errors and should not cause session invalidation.\nconst NETWORK_ERROR_CODES = [502, 503, 504, 520, 521, 522, 523, 524, 530]\n\nexport async function handleError(error: unknown) {\n  if (!looksLikeFetchResponse(error)) {\n    throw new AuthRetryableFetchError(_getErrorMessage(error), 0)\n  }\n\n  if (NETWORK_ERROR_CODES.includes(error.status)) {\n    // status in 500...599 range - server had an error, request might be retryed.\n    throw new AuthRetryableFetchError(_getErrorMessage(error), error.status)\n  }\n\n  let data: any\n  try {\n    data = await error.json()\n  } catch (e) {\n    throw new AuthUnknownError(_getErrorMessage(e), e)\n  }\n\n  let errorCode: string | undefined = undefined\n\n  const responseAPIVersion = parseResponseAPIVersion(error)\n  if (\n    responseAPIVersion &&\n    responseAPIVersion.getTime() >= API_VERSIONS['2024-01-01'].timestamp &&\n    typeof data === 'object' &&\n    data &&\n    typeof data.code === 'string'\n  ) {\n    errorCode = data.code\n  } else if (typeof data === 'object' && data && typeof data.error_code === 'string') {\n    errorCode = data.error_code\n  }\n\n  if (!errorCode) {\n    // Legacy support for weak password errors, when there were no error codes\n    if (\n      typeof data === 'object' &&\n      data &&\n      typeof data.weak_password === 'object' &&\n      data.weak_password &&\n      Array.isArray(data.weak_password.reasons) &&\n      data.weak_password.reasons.length &&\n      data.weak_password.reasons.reduce((a: boolean, i: any) => a && typeof i === 'string', true)\n    ) {\n      throw new AuthWeakPasswordError(\n        _getErrorMessage(data),\n        error.status,\n        data.weak_password.reasons\n      )\n    }\n  } else if (errorCode === 'weak_password') {\n    throw new AuthWeakPasswordError(\n      _getErrorMessage(data),\n      error.status,\n      data.weak_password?.reasons || []\n    )\n  } else if (errorCode === 'session_not_found') {\n    // The `session_id` inside the JWT does not correspond to a row in the\n    // `sessions` table. This usually means the user has signed out, has been\n    // deleted, or their session has somehow been terminated.\n    throw new AuthSessionMissingError()\n  }\n\n  throw new AuthApiError(_getErrorMessage(data), error.status || 500, errorCode)\n}\n\nconst _getRequestParams = (\n  method: RequestMethodType,\n  options?: FetchOptions,\n  parameters?: FetchParameters,\n  body?: object\n) => {\n  const params: { [k: string]: any } = { method, headers: options?.headers || {} }\n\n  if (method === 'GET') {\n    return params\n  }\n\n  params.headers = { 'Content-Type': 'application/json;charset=UTF-8', ...options?.headers }\n  params.body = JSON.stringify(body)\n  return { ...params, ...parameters }\n}\n\ninterface GotrueRequestOptions extends FetchOptions {\n  jwt?: string\n  redirectTo?: string\n  body?: object\n  query?: { [key: string]: string }\n  /**\n   * Function that transforms api response from gotrue into a desirable / standardised format\n   */\n  xform?: (data: any) => any\n}\n\nexport async function _request(\n  fetcher: Fetch,\n  method: RequestMethodType,\n  url: string,\n  options?: GotrueRequestOptions\n) {\n  const headers = {\n    ...options?.headers,\n  }\n\n  if (!headers[API_VERSION_HEADER_NAME]) {\n    headers[API_VERSION_HEADER_NAME] = API_VERSIONS['2024-01-01'].name\n  }\n\n  if (options?.jwt) {\n    headers['Authorization'] = `Bearer ${options.jwt}`\n  }\n\n  const qs = options?.query ?? {}\n  if (options?.redirectTo) {\n    qs['redirect_to'] = options.redirectTo\n  }\n\n  const queryString = Object.keys(qs).length ? '?' + new URLSearchParams(qs).toString() : ''\n  const data = await _handleRequest(\n    fetcher,\n    method,\n    url + queryString,\n    {\n      headers,\n      noResolveJson: options?.noResolveJson,\n    },\n    {},\n    options?.body\n  )\n  return options?.xform ? options?.xform(data) : { data: { ...data }, error: null }\n}\n\nasync function _handleRequest(\n  fetcher: Fetch,\n  method: RequestMethodType,\n  url: string,\n  options?: FetchOptions,\n  parameters?: FetchParameters,\n  body?: object\n): Promise<any> {\n  const requestParams = _getRequestParams(method, options, parameters, body)\n\n  let result: Response\n\n  try {\n    result = await fetcher(url, {\n      ...requestParams,\n    })\n  } catch (e) {\n    console.error(e)\n\n    // fetch failed, likely due to a network or CORS error\n    throw new AuthRetryableFetchError(_getErrorMessage(e), 0)\n  }\n\n  if (!result.ok) {\n    await handleError(result)\n  }\n\n  if (options?.noResolveJson) {\n    return result\n  }\n\n  try {\n    return await result.json()\n  } catch (e) {\n    await handleError(e)\n  }\n}\n\nexport function _sessionResponse(data: GoTrueSessionData): AuthResponse {\n  let session = null\n  if (hasSession(data)) {\n    session = { ...data } as Session\n\n    if (!data.expires_at) {\n      session.expires_at = expiresAt(data.expires_in!)\n    }\n  }\n\n  // Some /verify responses (e.g. secure email_change first-confirmation) return\n  // only `{ msg, code }` with no user and no session. Treat those as null user.\n  const user: User | null = data.user ?? null\n  return { data: { session, user }, error: null }\n}\n\nexport function _sessionResponsePassword(data: GoTrueSessionPasswordData): AuthResponsePassword {\n  const response = _sessionResponse(data) as AuthResponsePassword\n\n  if (\n    !response.error &&\n    data.weak_password &&\n    typeof data.weak_password === 'object' &&\n    Array.isArray(data.weak_password.reasons) &&\n    data.weak_password.reasons.length &&\n    data.weak_password.message &&\n    typeof data.weak_password.message === 'string' &&\n    data.weak_password.reasons.reduce((a: boolean, i: unknown) => a && typeof i === 'string', true)\n  ) {\n    response.data.weak_password = data.weak_password\n  }\n\n  return response\n}\n\nexport function _userResponse(data: GoTrueUserData): UserResponse {\n  const user: User = data.user ?? (data as User)\n  return { data: { user }, error: null }\n}\n\nexport function _ssoResponse(data: Record<string, any>): SSOResponse {\n  return { data, error: null } as SSOResponse\n}\n\nexport function _generateLinkResponse(data: GoTrueGenerateLinkData): GenerateLinkResponse {\n  const { action_link, email_otp, hashed_token, redirect_to, verification_type, ...rest } = data\n\n  const properties: GenerateLinkProperties = {\n    action_link,\n    email_otp,\n    hashed_token,\n    redirect_to,\n    verification_type,\n  }\n\n  const user = { ...rest } as User\n  return {\n    data: {\n      properties,\n      user,\n    },\n    error: null,\n  }\n}\n\nexport function _noResolveJsonResponse(data: Response): Response {\n  return data\n}\n\n/**\n * hasSession checks if the response object contains a valid session\n * @param data A response object\n * @returns true if a session is in the response\n */\nfunction hasSession(data: GoTrueSessionData): boolean {\n  return !!data.access_token && !!data.refresh_token && !!data.expires_in\n}\n", "import { AuthError } from './errors'\nimport { Fetch } from './fetch'\nimport { EIP1193Provider, EthereumSignInInput, Hex } from './web3/ethereum'\nimport type { SolanaSignInInput, SolanaSignInOutput } from './web3/solana'\nimport {\n  ServerCredentialCreationOptions,\n  ServerCredentialRequestOptions,\n  WebAuthnApi,\n  WebAuthnError,\n} from './webauthn'\nimport type {\n  RegistrationResponseJSON,\n  AuthenticationResponseJSON,\n  ServerCredentialResponse,\n} from './webauthn'\nimport {\n  AuthenticationCredential,\n  PublicKeyCredentialCreationOptionsFuture,\n  PublicKeyCredentialRequestOptionsFuture,\n  RegistrationCredential,\n} from './webauthn.dom'\n\n/** One of the providers supported by GoTrue. Use the `custom:` prefix for custom OIDC providers (e.g. `custom:my-oidc-provider`). */\nexport type Provider =\n  | 'apple'\n  | 'azure'\n  | 'bitbucket'\n  | 'discord'\n  | 'facebook'\n  | 'figma'\n  | 'github'\n  | 'gitlab'\n  | 'google'\n  | 'kakao'\n  | 'keycloak'\n  | 'linkedin'\n  | 'linkedin_oidc'\n  | 'notion'\n  | 'slack'\n  | 'slack_oidc'\n  | 'spotify'\n  | 'twitch'\n  /** Uses OAuth 1.0a */\n  | 'twitter'\n  /** Uses OAuth 2.0 */\n  | 'x'\n  | 'workos'\n  | 'zoom'\n  | 'fly'\n  | `custom:${string}`\n\nexport type AuthChangeEventMFA = 'MFA_CHALLENGE_VERIFIED'\n\nexport type AuthChangeEvent =\n  | 'INITIAL_SESSION'\n  | 'PASSWORD_RECOVERY'\n  | 'SIGNED_IN'\n  | 'SIGNED_OUT'\n  | 'TOKEN_REFRESHED'\n  | 'USER_UPDATED'\n  | AuthChangeEventMFA\n\n/**\n * Provide your own global lock implementation instead of the default\n * implementation. The function should acquire a lock for the duration of the\n * `fn` async function, such that no other client instances will be able to\n * hold it at the same time.\n *\n * @experimental\n *\n * @param name Name of the lock to be acquired.\n * @param acquireTimeout If negative, no timeout should occur. If positive it\n *                       should throw an Error with an `isAcquireTimeout`\n *                       property set to true if the operation fails to be\n *                       acquired after this much time (ms).\n * @param fn The operation to execute when the lock is acquired.\n */\nexport type LockFunc = <R>(name: string, acquireTimeout: number, fn: () => Promise<R>) => Promise<R>\n\nexport type GoTrueClientOptions = {\n  /* The URL of the GoTrue server. */\n  url?: string\n  /* Any additional headers to send to the GoTrue server. */\n  headers?: { [key: string]: string }\n  /* Optional key name used for storing tokens in local storage. */\n  storageKey?: string\n  /**\n   * Set to \"true\" if you want to automatically detect OAuth grants in the URL and sign in the user.\n   * Set to \"false\" to disable automatic detection.\n   * Set to a function to provide custom logic for determining if a URL contains a Supabase auth callback.\n   * The function receives the current URL and parsed parameters, and should return true if the URL\n   * should be processed as a Supabase auth callback, or false to ignore it.\n   *\n   * This is useful when your app uses other OAuth providers (e.g., Facebook Login) that also return\n   * access_token in the URL fragment, which would otherwise be incorrectly intercepted by Supabase Auth.\n   *\n   * @example\n   * ```ts\n   * detectSessionInUrl: (url, params) => {\n   *   // Ignore Facebook OAuth redirects\n   *   if (url.pathname === '/facebook/redirect') return false\n   *   // Use default detection for other URLs\n   *   return Boolean(params.access_token || params.error_description)\n   * }\n   * ```\n   */\n  detectSessionInUrl?: boolean | ((url: URL, params: { [parameter: string]: string }) => boolean)\n  /* Set to \"true\" if you want to automatically refresh the token before expiring. */\n  autoRefreshToken?: boolean\n  /* Set to \"true\" if you want to automatically save the user session into local storage. If set to false, session will just be saved in memory. */\n  persistSession?: boolean\n  /* Provide your own local storage implementation to use instead of the browser's local storage. */\n  storage?: SupportedStorage\n  /**\n   * Stores the user object in a separate storage location from the rest of the session data. When non-null, `storage` will only store a JSON object containing the access and refresh token and some adjacent metadata, while `userStorage` will only contain the user object under the key `storageKey + '-user'`.\n   *\n   * When this option is set and cookie storage is used, `getSession()` and other functions that load a session from the cookie store might not return back a user. It's very important to always use `getUser()` to fetch a user object in those scenarios.\n   *\n   * @experimental\n   */\n  userStorage?: SupportedStorage\n  /* A custom fetch implementation. */\n  fetch?: Fetch\n  /* If set to 'pkce' PKCE flow. Defaults to the 'implicit' flow otherwise */\n  flowType?: AuthFlowType\n  /* If debug messages are emitted. Can be used to inspect the behavior of the library. If set to a function, the provided function will be used instead of `console.log()` to perform the logging. */\n  debug?: boolean | ((message: string, ...args: any[]) => void)\n  /**\n   * Provide your own locking mechanism based on the environment. By default,\n   * `navigatorLock` (Web Locks API) is used in browser environments when\n   * `persistSession` is true. Falls back to an in-process lock for non-browser\n   * environments (e.g. React Native).\n   *\n   * @experimental\n   */\n  lock?: LockFunc\n  /**\n   * Set to \"true\" if there is a custom authorization header set globally.\n   * @experimental\n   */\n  hasCustomAuthorizationHeader?: boolean\n  /**\n   * If there is an error with the query, throwOnError will reject the promise by\n   * throwing the error instead of returning it as part of a successful response.\n   */\n  throwOnError?: boolean\n  /**\n   * The maximum time in milliseconds to wait for acquiring a cross-tab synchronization lock.\n   *\n   * When multiple browser tabs or windows use the auth client simultaneously, they coordinate\n   * via the Web Locks API to prevent race conditions during session refresh and other operations.\n   * This timeout controls how long to wait before attempting lock recovery.\n   *\n   * - **Positive value**: Wait up to this many milliseconds. If the lock is still held, attempt\n   *   automatic recovery by stealing it (the previous holder is evicted, its callback continues\n   *   to completion without exclusive access). This recovers from orphaned locks caused by\n   *   React Strict Mode double-mount, storage API hangs, or aborted operations.\n   * - **Zero (0)**: Fail immediately if the lock is unavailable; throws `LockAcquireTimeoutError`\n   *   (check `error.isAcquireTimeout === true`).\n   * - **Negative value**: Wait indefinitely \u2014 can cause permanent deadlocks if the lock is orphaned.\n   *\n   * @default 5000\n   *\n   * @example\n   * ```ts\n   * const client = createClient(url, key, {\n   *   auth: {\n   *     lockAcquireTimeout: 5000, // 5 seconds, then steal orphaned lock\n   *   },\n   * })\n   * ```\n   */\n  lockAcquireTimeout?: number\n\n  /**\n   * If true, skips automatic initialization in constructor. Useful for SSR\n   * contexts where initialization timing must be controlled to prevent race\n   * conditions with HTTP response generation.\n   *\n   * @default false\n   */\n  skipAutoInitialize?: boolean\n\n  /**\n   * Opt-in flags for experimental features. These APIs may change without\n   * notice and are disabled by default.\n   *\n   * @experimental\n   */\n  experimental?: ExperimentalFeatureFlags\n}\n\nexport type ExperimentalFeatureFlags = {\n  /**\n   * Enables passkey support:\n   *   - `auth.signInWithPasskey()`, `auth.registerPasskey()`\n   *   - `auth.passkey.*`\n   *   - `auth.admin.passkey.*`\n   *\n   * Defaults to `false`. Calling any passkey method while this flag is\n   * disabled throws a descriptive error at call time.\n   */\n  passkey?: boolean\n}\n\nconst WeakPasswordReasons = ['length', 'characters', 'pwned'] as const\n\nexport type WeakPasswordReasons = (typeof WeakPasswordReasons)[number]\nexport type WeakPassword = {\n  reasons: WeakPasswordReasons[]\n  message: string\n}\n\n/**\n * Resolve mapped types and show the derived keys and their types when hovering in\n * VS Code, instead of just showing the names those mapped types are defined with.\n */\nexport type Prettify<T> = T extends Function ? T : { [K in keyof T]: T[K] }\n\n/**\n * A stricter version of TypeScript's Omit that only allows omitting keys that actually exist.\n * This prevents typos and ensures type safety at compile time.\n * Unlike regular Omit, this will error if you try to omit a non-existent key.\n */\nexport type StrictOmit<T, K extends keyof T> = Omit<T, K>\n\n/**\n * a shared result type that encapsulates errors instead of throwing them, allows you to optionally specify the ErrorType\n */\nexport type RequestResult<T, ErrorType extends Error = AuthError> =\n  | {\n      data: T\n      error: null\n    }\n  | {\n      data: null\n      error: Error extends AuthError ? AuthError : ErrorType\n    }\n\n/**\n * similar to RequestResult except it allows you to destructure the possible shape of the success response\n *  {@see RequestResult}\n */\nexport type RequestResultSafeDestructure<T> =\n  | { data: T; error: null }\n  | {\n      data: T extends object ? { [K in keyof T]: null } : null\n      error: AuthError\n    }\n\nexport type AuthResponse = RequestResultSafeDestructure<{\n  user: User | null\n  session: Session | null\n}>\n\nexport type AuthResponsePassword = RequestResultSafeDestructure<{\n  user: User | null\n  session: Session | null\n  weak_password?: WeakPassword | null\n}>\n\n/**\n * AuthOtpResponse is returned when OTP is used.\n *\n * {@see AuthResponse}\n */\nexport type AuthOtpResponse = RequestResultSafeDestructure<{\n  user: null\n  session: null\n  messageId?: string | null\n}>\n\nexport type AuthTokenResponse = RequestResultSafeDestructure<{\n  user: User\n  session: Session\n}>\n\nexport type AuthTokenResponsePassword = RequestResultSafeDestructure<{\n  user: User\n  session: Session\n  weakPassword?: WeakPassword\n}>\n\nexport type OAuthResponse =\n  | {\n      data: {\n        provider: Provider\n        url: string\n      }\n      error: null\n    }\n  | {\n      data: {\n        provider: Provider\n        url: null\n      }\n      error: AuthError\n    }\n\nexport type SSOResponse = RequestResult<{\n  /**\n   * URL to open in a browser which will complete the sign-in flow by\n   * taking the user to the identity provider's authentication flow.\n   *\n   * On browsers you can set the URL to `window.location.href` to take\n   * the user to the authentication flow.\n   */\n  url: string\n}>\n\nexport type UserResponse = RequestResultSafeDestructure<{\n  user: User\n}>\n\nexport interface Session {\n  /**\n   * The oauth provider token. If present, this can be used to make external API requests to the oauth provider used.\n   */\n  provider_token?: string | null\n  /**\n   * The oauth provider refresh token. If present, this can be used to refresh the provider_token via the oauth provider's API.\n   * Not all oauth providers return a provider refresh token. If the provider_refresh_token is missing, please refer to the oauth provider's documentation for information on how to obtain the provider refresh token.\n   */\n  provider_refresh_token?: string | null\n  /**\n   * The access token jwt. It is recommended to set the JWT_EXPIRY to a shorter expiry value.\n   */\n  access_token: string\n  /**\n   * A one-time used refresh token that never expires.\n   */\n  refresh_token: string\n  /**\n   * The number of seconds until the token expires (since it was issued). Returned when a login is confirmed.\n   */\n  expires_in: number\n  /**\n   * A timestamp of when the token will expire. Returned when a login is confirmed.\n   */\n  expires_at?: number\n  token_type: 'bearer'\n\n  /**\n   * When using a separate user storage, accessing properties of this object will throw an error.\n   */\n  user: User\n}\n\nconst AMRMethods = [\n  'password',\n  'otp',\n  'oauth',\n  'totp',\n  'mfa/totp',\n  'mfa/phone',\n  'mfa/webauthn',\n  'anonymous',\n  'sso/saml',\n  'magiclink',\n  'web3',\n  'oauth_provider/authorization_code',\n] as const\n\nexport type AMRMethod = (typeof AMRMethods)[number] | (string & {})\n\n/**\n * An authentication method reference (AMR) entry.\n *\n * An entry designates what method was used by the user to verify their\n * identity and at what time.\n *\n * Note: Custom access token hooks can return AMR claims as either:\n * - An array of AMREntry objects (detailed format with timestamps)\n * - An array of strings (RFC-8176 compliant format)\n *\n * @see {@link GoTrueMFAApi#getAuthenticatorAssuranceLevel}.\n */\nexport interface AMREntry {\n  /** Authentication method name. */\n  method: AMRMethod\n\n  /**\n   * Timestamp when the method was successfully used. Represents number of\n   * seconds since 1st January 1970 (UNIX epoch) in UTC.\n   */\n  timestamp: number\n}\n\nexport interface UserIdentity {\n  id: string\n  user_id: string\n  identity_data?: {\n    [key: string]: any\n  }\n  identity_id: string\n  provider: string\n  created_at?: string\n  last_sign_in_at?: string\n  updated_at?: string\n}\n\nconst FactorTypes = ['totp', 'phone', 'webauthn'] as const\n\n/**\n * Type of factor. `totp` and `phone` supported with this version\n */\nexport type FactorType = (typeof FactorTypes)[number]\n\nconst FactorVerificationStatuses = ['verified', 'unverified'] as const\n\n/**\n * The verification status of the factor, default is `unverified` after `.enroll()`, then `verified` after the user verifies it with `.verify()`\n */\ntype FactorVerificationStatus = (typeof FactorVerificationStatuses)[number]\n\n/**\n * A MFA factor.\n *\n * @see {@link GoTrueMFAApi#enroll}\n * @see {@link GoTrueMFAApi#listFactors}\n * @see {@link GoTrueMFAAdminApi#listFactors}\n */\nexport type Factor<\n  Type extends FactorType = FactorType,\n  Status extends FactorVerificationStatus = (typeof FactorVerificationStatuses)[number],\n> = {\n  /** ID of the factor. */\n  id: string\n\n  /** Friendly name of the factor, useful to disambiguate between multiple factors. */\n  friendly_name?: string\n\n  /**\n   * Type of factor. `totp` and `phone` supported with this version\n   */\n  factor_type: Type\n\n  /**\n   * The verification status of the factor, default is `unverified` after `.enroll()`, then `verified` after the user verifies it with `.verify()`\n   */\n  status: Status\n\n  created_at: string\n  updated_at: string\n  last_challenged_at?: string\n}\n\nexport interface UserAppMetadata {\n  /**\n   * The first provider that the user used to sign up with.\n   */\n  provider?: string\n  /**\n   * A list of all providers that the user has linked to their account.\n   */\n  providers?: string[]\n  [key: string]: any\n}\n\nexport interface UserMetadata {\n  [key: string]: any\n}\n\nexport interface User {\n  id: string\n  app_metadata: UserAppMetadata\n  user_metadata: UserMetadata\n  aud: string\n  confirmation_sent_at?: string\n  recovery_sent_at?: string\n  email_change_sent_at?: string\n  new_email?: string\n  new_phone?: string\n  invited_at?: string\n  action_link?: string\n  email?: string\n  phone?: string\n  created_at: string\n  confirmed_at?: string\n  email_confirmed_at?: string\n  phone_confirmed_at?: string\n  last_sign_in_at?: string\n  role?: string\n  updated_at?: string\n  identities?: UserIdentity[]\n  is_anonymous?: boolean\n  is_sso_user?: boolean\n  factors?: (Factor<FactorType, 'verified'> | Factor<FactorType, 'unverified'>)[]\n  deleted_at?: string\n  banned_until?: string\n}\n\nexport interface UserAttributes {\n  /**\n   * The user's current password\n   *\n   * This is only ever present when the user is resetting\n   * their password and GOTRUE_SECURITY_UPDATE_PASSWORD_REQUIRE_CURRENT_PASSWORD is true.\n   *\n   */\n  current_password?: string\n\n  /**\n   * The user's email.\n   */\n  email?: string\n\n  /**\n   * The user's phone.\n   */\n  phone?: string\n\n  /**\n   * The user's password.\n   */\n  password?: string\n\n  /**\n   * The nonce sent for reauthentication if the user's password is to be updated.\n   *\n   * Call reauthenticate() to obtain the nonce first.\n   */\n  nonce?: string\n\n  /**\n   * A custom data object to store the user's metadata. This maps to the `auth.users.raw_user_meta_data` column.\n   *\n   * The `data` should be a JSON object that includes user-specific info, such as their first and last name.\n   *\n   */\n  data?: object\n}\n\nexport interface AdminUserAttributes extends Omit<UserAttributes, 'data'> {\n  /**\n   * A custom data object to store the user's metadata. This maps to the `auth.users.raw_user_meta_data` column.\n   *\n   *\n   * The `user_metadata` should be a JSON object that includes user-specific info, such as their first and last name.\n   *\n   * Note: When using the GoTrueAdminApi and wanting to modify a user's metadata,\n   * this attribute is used instead of UserAttributes data.\n   *\n   */\n  user_metadata?: object\n\n  /**\n   * A custom data object to store the user's application specific metadata. This maps to the `auth.users.app_metadata` column.\n   *\n   * Only a service role can modify.\n   *\n   * The `app_metadata` should be a JSON object that includes app-specific info, such as identity providers, roles, and other\n   * access control information.\n   */\n  app_metadata?: object\n\n  /**\n   * Sets the user's email as confirmed when true, or unconfirmed when false.\n   *\n   * Only a service role can modify.\n   */\n  email_confirm?: boolean\n\n  /**\n   * Sets the user's phone as confirmed when true, or unconfirmed when false.\n   *\n   * Only a service role can modify.\n   */\n  phone_confirm?: boolean\n\n  /**\n   * Determines how long a user is banned for.\n   *\n   * The format for the ban duration follows a strict sequence of decimal numbers with a unit suffix.\n   * Valid time units are \"ns\", \"us\" (or \"\u00B5s\"), \"ms\", \"s\", \"m\", \"h\".\n   *\n   * For example, some possible durations include: '300ms', '2h45m'.\n   *\n   * Setting the ban duration to 'none' lifts the ban on the user.\n   */\n  ban_duration?: string | 'none'\n\n  /**\n   * The `role` claim set in the user's access token JWT.\n   *\n   * When a user signs up, this role is set to `authenticated` by default. You should only modify the `role` if you need to provision several levels of admin access that have different permissions on individual columns in your database.\n   *\n   * Setting this role to `service_role` is not recommended as it grants the user admin privileges.\n   */\n  role?: string\n\n  /**\n   * The `password_hash` for the user's password.\n   *\n   * Allows you to specify a password hash for the user. This is useful for migrating a user's password hash from another service.\n   *\n   * Supports bcrypt, scrypt (firebase), and argon2 password hashes.\n   */\n  password_hash?: string\n\n  /**\n   * The `id` for the user.\n   *\n   * Allows you to overwrite the default `id` set for the user.\n   */\n  id?: string\n}\n\nexport interface Subscription {\n  /**\n   * A unique identifier for this subscription, set by the client.\n   * This is an internal identifier used for managing callbacks and should not be\n   * relied upon by application code. Use the unsubscribe() method to remove listeners.\n   */\n  id: string | symbol\n  /**\n   * The function to call every time there is an event. eg: (eventName) => {}\n   */\n  callback: (event: AuthChangeEvent, session: Session | null) => void\n  /**\n   * Call this to remove the listener.\n   */\n  unsubscribe: () => void\n}\n\nexport type SignInAnonymouslyCredentials = {\n  options?: {\n    /**\n     * A custom data object to store the user's metadata. This maps to the `auth.users.raw_user_meta_data` column.\n     *\n     * The `data` should be a JSON object that includes user-specific info, such as their first and last name.\n     */\n    data?: object\n    /** Verification token received when the user completes the captcha on the site. */\n    captchaToken?: string\n  }\n}\n\nexport type SignUpWithPasswordCredentials = PasswordCredentialsBase & {\n  options?: {\n    emailRedirectTo?: string // only for email\n    data?: object\n    captchaToken?: string\n    channel?: 'sms' | 'whatsapp' // only for phone\n  }\n}\n\ntype PasswordCredentialsBase =\n  | { email: string; password: string }\n  | { phone: string; password: string }\n\nexport type SignInWithPasswordCredentials = PasswordCredentialsBase & {\n  options?: {\n    captchaToken?: string\n  }\n}\n\nexport type SignInWithPasswordlessCredentials =\n  | {\n      /** The user's email address. */\n      email: string\n      options?: {\n        /** The redirect url embedded in the email link */\n        emailRedirectTo?: string\n        /** If set to false, this method will not create a new user. Defaults to true. */\n        shouldCreateUser?: boolean\n        /**\n         * A custom data object to store the user's metadata. This maps to the `auth.users.raw_user_meta_data` column.\n         *\n         * The `data` should be a JSON object that includes user-specific info, such as their first and last name.\n         */\n        data?: object\n        /** Verification token received when the user completes the captcha on the site. */\n        captchaToken?: string\n      }\n    }\n  | {\n      /** The user's phone number. */\n      phone: string\n      options?: {\n        /** If set to false, this method will not create a new user. Defaults to true. */\n        shouldCreateUser?: boolean\n        /**\n         * A custom data object to store the user's metadata. This maps to the `auth.users.raw_user_meta_data` column.\n         *\n         * The `data` should be a JSON object that includes user-specific info, such as their first and last name.\n         */\n        data?: object\n        /** Verification token received when the user completes the captcha on the site. */\n        captchaToken?: string\n        /** Messaging channel to use (e.g. whatsapp or sms) */\n        channel?: 'sms' | 'whatsapp'\n      }\n    }\n\nexport type AuthFlowType = 'implicit' | 'pkce' | (string & {})\nexport type SignInWithOAuthCredentials = {\n  /** One of the providers supported by GoTrue. */\n  provider: Provider\n  options?: {\n    /** A URL to send the user to after they are confirmed. */\n    redirectTo?: string\n    /** A space-separated list of scopes granted to the OAuth application. */\n    scopes?: string\n    /** An object of query params */\n    queryParams?: { [key: string]: string }\n    /** If set to true does not immediately redirect the current browser context to visit the OAuth authorization page for the provider. */\n    skipBrowserRedirect?: boolean\n  }\n}\n\nexport type SignInWithIdTokenCredentials = {\n  /** Provider name or OIDC `iss` value identifying which provider should be used to verify the provided token. Supported names: `google`, `apple`, `azure`, `facebook`, `kakao`. Use the `custom:` prefix for custom OIDC providers (e.g. `custom:my-oidc-provider`). */\n  provider: 'google' | 'apple' | 'azure' | 'facebook' | 'kakao' | `custom:${string}` | (string & {})\n  /** OIDC ID token issued by the specified provider. The `iss` claim in the ID token must match the supplied provider. Some ID tokens contain an `at_hash` which require that you provide an `access_token` value to be accepted properly. If the token contains a `nonce` claim you must supply the nonce used to obtain the ID token. */\n  token: string\n  /** If the ID token contains an `at_hash` claim, then the hash of this value is compared to the value in the ID token. */\n  access_token?: string\n  /** If the ID token contains a `nonce` claim, then the hash of this value is compared to the value in the ID token. */\n  nonce?: string\n  options?: {\n    /** Verification token received when the user completes the captcha on the site. */\n    captchaToken?: string\n  }\n}\n\nexport type SolanaWallet = {\n  signIn?: (...inputs: SolanaSignInInput[]) => Promise<SolanaSignInOutput | SolanaSignInOutput[]>\n  publicKey?: {\n    toBase58: () => string\n  } | null\n\n  signMessage?: (message: Uint8Array, encoding?: 'utf8' | string) => Promise<Uint8Array> | undefined\n}\n\nexport type SolanaWeb3Credentials =\n  | {\n      chain: 'solana'\n\n      /** Wallet interface to use. If not specified will default to `window.solana`. */\n      wallet?: SolanaWallet\n\n      /** Optional statement to include in the Sign in with Solana message. Must not include new line characters. Most wallets like Phantom **require specifying a statement!** */\n      statement?: string\n\n      options?: {\n        /** URL to use with the wallet interface. Some wallets do not allow signing a message for URLs different from the current page. */\n        url?: string\n\n        /** Verification token received when the user completes the captcha on the site. */\n        captchaToken?: string\n\n        signInWithSolana?: Partial<\n          Omit<SolanaSignInInput, 'version' | 'chain' | 'domain' | 'uri' | 'statement'>\n        >\n      }\n    }\n  | {\n      chain: 'solana'\n\n      /** Sign in with Solana compatible message. Must include `Issued At`, `URI` and `Version`. */\n      message: string\n\n      /** Ed25519 signature of the message. */\n      signature: Uint8Array\n\n      options?: {\n        /** Verification token received when the user completes the captcha on the site. */\n        captchaToken?: string\n      }\n    }\n\nexport type EthereumWallet = EIP1193Provider\n\nexport type EthereumWeb3Credentials =\n  | {\n      chain: 'ethereum'\n\n      /** Wallet interface to use. If not specified will default to `window.ethereum`. */\n      wallet?: EthereumWallet\n\n      /** Optional statement to include in the Sign in with Ethereum message. Must not include new line characters. Most wallets like Phantom **require specifying a statement!** */\n      statement?: string\n\n      options?: {\n        /** URL to use with the wallet interface. Some wallets do not allow signing a message for URLs different from the current page. */\n        url?: string\n\n        /** Verification token received when the user completes the captcha on the site. */\n        captchaToken?: string\n\n        signInWithEthereum?: Partial<\n          Omit<EthereumSignInInput, 'version' | 'domain' | 'uri' | 'statement'>\n        >\n      }\n    }\n  | {\n      chain: 'ethereum'\n\n      /** Sign in with Ethereum compatible message. Must include `Issued At`, `URI` and `Version`. */\n      message: string\n\n      /** Ethereum curve (secp256k1) signature of the message. */\n      signature: Hex\n\n      options?: {\n        /** Verification token received when the user completes the captcha on the site. */\n        captchaToken?: string\n      }\n    }\n\nexport type Web3Credentials = SolanaWeb3Credentials | EthereumWeb3Credentials\n\nexport type VerifyOtpParams = VerifyMobileOtpParams | VerifyEmailOtpParams | VerifyTokenHashParams\nexport interface VerifyMobileOtpParams {\n  /** The user's phone number. */\n  phone: string\n  /** The otp sent to the user's phone number. */\n  token: string\n  /** The user's verification type. */\n  type: MobileOtpType\n  options?: {\n    /** A URL to send the user to after they are confirmed. */\n    redirectTo?: string\n\n    /**\n     * Verification token received when the user completes the captcha on the site.\n     *\n     * @deprecated\n     */\n    captchaToken?: string\n  }\n}\nexport interface VerifyEmailOtpParams {\n  /** The user's email address. */\n  email: string\n  /** The otp sent to the user's email address. */\n  token: string\n  /** The user's verification type. */\n  type: EmailOtpType\n  options?: {\n    /** A URL to send the user to after they are confirmed. */\n    redirectTo?: string\n\n    /** Verification token received when the user completes the captcha on the site.\n     *\n     * @deprecated\n     */\n    captchaToken?: string\n  }\n}\n\nexport interface VerifyTokenHashParams {\n  /** The token hash used in an email link */\n  token_hash: string\n\n  /** The user's verification type. */\n  type: EmailOtpType\n}\n\nexport type MobileOtpType = 'sms' | 'phone_change' | (string & {})\nexport type EmailOtpType =\n  | 'signup'\n  | 'invite'\n  | 'magiclink'\n  | 'recovery'\n  | 'email_change'\n  | 'email'\n  | (string & {})\n\nexport type ResendParams =\n  | {\n      type: Extract<EmailOtpType, 'signup' | 'email_change'>\n      email: string\n      options?: {\n        /** A URL to send the user to after they have signed-in. */\n        emailRedirectTo?: string\n        /** Verification token received when the user completes the captcha on the site. */\n        captchaToken?: string\n      }\n    }\n  | {\n      type: Extract<MobileOtpType, 'sms' | 'phone_change'>\n      phone: string\n      options?: {\n        /** Verification token received when the user completes the captcha on the site. */\n        captchaToken?: string\n      }\n    }\n\nexport type SignInWithSSO =\n  | {\n      /** UUID of the SSO provider to invoke single-sign on to. */\n      providerId: string\n\n      options?: {\n        /** A URL to send the user to after they have signed-in. */\n        redirectTo?: string\n        /** Verification token received when the user completes the captcha on the site. */\n        captchaToken?: string\n        /**\n         * If set to true, the redirect will not happen on the client side.\n         * This parameter is used when you wish to handle the redirect yourself.\n         * Defaults to false.\n         */\n        skipBrowserRedirect?: boolean\n      }\n    }\n  | {\n      /** Domain name of the organization for which to invoke single-sign on. */\n      domain: string\n\n      options?: {\n        /** A URL to send the user to after they have signed-in. */\n        redirectTo?: string\n        /** Verification token received when the user completes the captcha on the site. */\n        captchaToken?: string\n        /**\n         * If set to true, the redirect will not happen on the client side.\n         * This parameter is used when you wish to handle the redirect yourself.\n         * Defaults to false.\n         */\n        skipBrowserRedirect?: boolean\n      }\n    }\n\nexport type GenerateSignupLinkParams = {\n  type: 'signup'\n  email: string\n  password: string\n  options?: Pick<GenerateLinkOptions, 'data' | 'redirectTo'>\n}\n\nexport type GenerateInviteOrMagiclinkParams = {\n  type: 'invite' | 'magiclink'\n  /** The user's email */\n  email: string\n  options?: Pick<GenerateLinkOptions, 'data' | 'redirectTo'>\n}\n\nexport type GenerateRecoveryLinkParams = {\n  type: 'recovery'\n  /** The user's email */\n  email: string\n  options?: Pick<GenerateLinkOptions, 'redirectTo'>\n}\n\nexport type GenerateEmailChangeLinkParams = {\n  type: 'email_change_current' | 'email_change_new'\n  /** The user's email */\n  email: string\n  /**\n   * The user's new email. Only required if type is 'email_change_current' or 'email_change_new'.\n   */\n  newEmail: string\n  options?: Pick<GenerateLinkOptions, 'redirectTo'>\n}\n\nexport interface GenerateLinkOptions {\n  /**\n   * A custom data object to store the user's metadata. This maps to the `auth.users.raw_user_meta_data` column.\n   *\n   * The `data` should be a JSON object that includes user-specific info, such as their first and last name.\n   */\n  data?: object\n  /** The URL which will be appended to the email link generated. */\n  redirectTo?: string\n}\n\nexport type GenerateLinkParams =\n  | GenerateSignupLinkParams\n  | GenerateInviteOrMagiclinkParams\n  | GenerateRecoveryLinkParams\n  | GenerateEmailChangeLinkParams\n\nexport type GenerateLinkResponse = RequestResultSafeDestructure<{\n  properties: GenerateLinkProperties\n  user: User\n}>\n\n/** The properties related to the email link generated  */\nexport type GenerateLinkProperties = {\n  /**\n   * The email link to send to the user.\n   * The action_link follows the following format: auth/v1/verify?type={verification_type}&token={hashed_token}&redirect_to={redirect_to}\n   * */\n  action_link: string\n  /**\n   * The raw email OTP.\n   * You should send this in the email if you want your users to verify using an OTP instead of the action link.\n   * */\n  email_otp: string\n  /**\n   * The hashed token appended to the action link.\n   * */\n  hashed_token: string\n  /** The URL appended to the action link. */\n  redirect_to: string\n  /** The verification type that the email link is associated to. */\n  verification_type: GenerateLinkType\n}\n\nexport type GenerateLinkType =\n  | 'signup'\n  | 'invite'\n  | 'magiclink'\n  | 'recovery'\n  | 'email_change_current'\n  | 'email_change_new'\n\nexport type MFAEnrollParams = MFAEnrollTOTPParams | MFAEnrollPhoneParams | MFAEnrollWebauthnParams\n\nexport type MFAUnenrollParams = {\n  /** ID of the factor being unenrolled. */\n  factorId: string\n}\n\ntype MFAVerifyParamsBase = {\n  /** ID of the factor being verified. Returned in enroll(). */\n  factorId: string\n  /** ID of the challenge being verified. Returned in challenge(). */\n  challengeId: string\n}\n\ntype MFAVerifyTOTPParamFields = {\n  /** Verification code provided by the user. */\n  code: string\n}\n\nexport type MFAVerifyTOTPParams = MFAVerifyParamsBase & MFAVerifyTOTPParamFields\n\ntype MFAVerifyPhoneParamFields = MFAVerifyTOTPParamFields\n\nexport type MFAVerifyPhoneParams = MFAVerifyParamsBase & MFAVerifyPhoneParamFields\n\ntype MFAVerifyWebauthnParamFieldsBase = {\n  /** Relying party ID */\n  rpId: string\n  /** Relying party origins */\n  rpOrigins?: string[]\n}\n\ntype MFAVerifyWebauthnCredentialParamFields<T extends 'create' | 'request' = 'create' | 'request'> =\n  {\n    /** Operation type */\n    type: T\n    /** Creation response from the authenticator (for enrollment/unverified factors) */\n    credential_response: T extends 'create' ? RegistrationCredential : AuthenticationCredential\n  }\n\n/**\n * WebAuthn-specific fields for MFA verification.\n * Supports both credential creation (registration) and request (authentication) flows.\n * @template T - Type of WebAuthn operation: 'create' for registration, 'request' for authentication\n */\nexport type MFAVerifyWebauthnParamFields<T extends 'create' | 'request' = 'create' | 'request'> = {\n  webauthn: MFAVerifyWebauthnParamFieldsBase & MFAVerifyWebauthnCredentialParamFields<T>\n}\n\n/**\n * Parameters for WebAuthn MFA verification.\n * Used to verify WebAuthn credentials after challenge.\n * @template T - Type of WebAuthn operation: 'create' for registration, 'request' for authentication\n * @see {@link https://w3c.github.io/webauthn/#sctn-verifying-assertion W3C WebAuthn Spec - Verifying an Authentication Assertion}\n */\nexport type MFAVerifyWebauthnParams<T extends 'create' | 'request' = 'create' | 'request'> =\n  MFAVerifyParamsBase & MFAVerifyWebauthnParamFields<T>\n\nexport type MFAVerifyParams = MFAVerifyTOTPParams | MFAVerifyPhoneParams | MFAVerifyWebauthnParams\n\ntype MFAChallengeParamsBase = {\n  /** ID of the factor to be challenged. Returned in enroll(). */\n  factorId: string\n}\n\nconst MFATOTPChannels = ['sms', 'whatsapp'] as const\nexport type MFATOTPChannel = (typeof MFATOTPChannels)[number]\n\nexport type MFAChallengeTOTPParams = MFAChallengeParamsBase\n\ntype MFAChallengePhoneParamFields<Channel extends MFATOTPChannel = MFATOTPChannel> = {\n  /** Messaging channel to use (e.g. whatsapp or sms). Only relevant for phone factors */\n  channel: Channel\n}\n\nexport type MFAChallengePhoneParams = MFAChallengeParamsBase & MFAChallengePhoneParamFields\n\n/** WebAuthn parameters for WebAuthn factor challenge */\ntype MFAChallengeWebauthnParamFields = {\n  webauthn: {\n    /** Relying party ID */\n    rpId: string\n    /** Relying party origins*/\n    rpOrigins?: string[]\n  }\n}\n\n/**\n * Parameters for initiating a WebAuthn MFA challenge.\n * Includes Relying Party information needed for WebAuthn ceremonies.\n * @see {@link https://w3c.github.io/webauthn/#sctn-rp-operations W3C WebAuthn Spec - Relying Party Operations}\n */\nexport type MFAChallengeWebauthnParams = MFAChallengeParamsBase & MFAChallengeWebauthnParamFields\n\nexport type MFAChallengeParams =\n  | MFAChallengeTOTPParams\n  | MFAChallengePhoneParams\n  | MFAChallengeWebauthnParams\n\ntype MFAChallengeAndVerifyParamsBase = Omit<MFAVerifyParamsBase, 'challengeId'>\n\ntype MFAChallengeAndVerifyTOTPParamFields = MFAVerifyTOTPParamFields\n\ntype MFAChallengeAndVerifyTOTPParams = MFAChallengeAndVerifyParamsBase &\n  MFAChallengeAndVerifyTOTPParamFields\n\nexport type MFAChallengeAndVerifyParams = MFAChallengeAndVerifyTOTPParams\n\n/**\n * Data returned after successful MFA verification.\n * Contains new session tokens and updated user information.\n */\nexport type AuthMFAVerifyResponseData = {\n  /** New access token (JWT) after successful verification. */\n  access_token: string\n\n  /** Type of token, always `bearer`. */\n  token_type: 'bearer'\n\n  /** Number of seconds in which the access token will expire. */\n  expires_in: number\n\n  /** Refresh token you can use to obtain new access tokens when expired. */\n  refresh_token: string\n\n  /** Updated user profile. */\n  user: User\n}\n\n/**\n * Response type for MFA verification operations.\n * Returns session tokens on successful verification.\n */\nexport type AuthMFAVerifyResponse = RequestResult<AuthMFAVerifyResponseData>\n\nexport type AuthMFAEnrollResponse =\n  | AuthMFAEnrollTOTPResponse\n  | AuthMFAEnrollPhoneResponse\n  | AuthMFAEnrollWebauthnResponse\n\nexport type AuthMFAUnenrollResponse = RequestResult<{\n  /** ID of the factor that was successfully unenrolled. */\n  id: string\n}>\n\ntype AuthMFAChallengeResponseBase<T extends FactorType> = {\n  /** ID of the newly created challenge. */\n  id: string\n\n  /** Factor Type which generated the challenge */\n  type: T\n\n  /** Timestamp in UNIX seconds when this challenge will no longer be usable. */\n  expires_at: number\n}\n\ntype AuthMFAChallengeTOTPResponseFields = {\n  /** no extra fields for now, kept for consistency and for possible future changes  */\n}\n\nexport type AuthMFAChallengeTOTPResponse = RequestResult<\n  AuthMFAChallengeResponseBase<'totp'> & AuthMFAChallengeTOTPResponseFields\n>\n\ntype AuthMFAChallengePhoneResponseFields = {\n  /** no extra fields for now, kept for consistency and for possible future changes  */\n}\n\nexport type AuthMFAChallengePhoneResponse = RequestResult<\n  AuthMFAChallengeResponseBase<'phone'> & AuthMFAChallengePhoneResponseFields\n>\n\ntype AuthMFAChallengeWebauthnResponseFields = {\n  webauthn:\n    | {\n        type: 'create'\n        credential_options: { publicKey: PublicKeyCredentialCreationOptionsFuture }\n      }\n    | {\n        type: 'request'\n        credential_options: { publicKey: PublicKeyCredentialRequestOptionsFuture }\n      }\n}\n\n/**\n * Response type for WebAuthn MFA challenge.\n * Contains credential creation or request options from the server.\n * @see {@link https://w3c.github.io/webauthn/#sctn-credential-creation W3C WebAuthn Spec - Credential Creation}\n */\nexport type AuthMFAChallengeWebauthnResponse = RequestResult<\n  AuthMFAChallengeResponseBase<'webauthn'> & AuthMFAChallengeWebauthnResponseFields\n>\n\ntype AuthMFAChallengeWebauthnResponseFieldsJSON = {\n  webauthn:\n    | {\n        type: 'create'\n        credential_options: { publicKey: ServerCredentialCreationOptions }\n      }\n    | {\n        type: 'request'\n        credential_options: { publicKey: ServerCredentialRequestOptions }\n      }\n}\n\n/**\n * JSON-serializable version of WebAuthn challenge response.\n * Used for server communication with base64url-encoded binary fields.\n */\nexport type AuthMFAChallengeWebauthnResponseDataJSON = AuthMFAChallengeResponseBase<'webauthn'> &\n  AuthMFAChallengeWebauthnResponseFieldsJSON\n\n/**\n * Server response type for WebAuthn MFA challenge.\n * Contains JSON-formatted WebAuthn options ready for browser API.\n */\nexport type AuthMFAChallengeWebauthnServerResponse =\n  RequestResult<AuthMFAChallengeWebauthnResponseDataJSON>\n\nexport type AuthMFAChallengeResponse =\n  | AuthMFAChallengeTOTPResponse\n  | AuthMFAChallengePhoneResponse\n  | AuthMFAChallengeWebauthnResponse\n\n/** response of ListFactors, which should contain all the types of factors that are available, this ensures we always include all */\nexport type AuthMFAListFactorsResponse<T extends typeof FactorTypes = typeof FactorTypes> =\n  RequestResult<\n    {\n      /** All available factors (verified and unverified). */\n      all: Factor[]\n\n      // Dynamically create a property for each factor type with only verified factors\n    } & {\n      [K in T[number]]: Factor<K, 'verified'>[]\n    }\n  >\n\nexport type AuthenticatorAssuranceLevels = 'aal1' | 'aal2' | (string & {})\n\nexport type AuthMFAGetAuthenticatorAssuranceLevelResponse = RequestResult<{\n  /** Current AAL level of the session. */\n  currentLevel: AuthenticatorAssuranceLevels | null\n\n  /**\n   * Next possible AAL level for the session. If the next level is higher\n   * than the current one, the user should go through MFA.\n   *\n   * @see {@link GoTrueMFAApi#challenge}\n   */\n  nextLevel: AuthenticatorAssuranceLevels | null\n\n  /**\n   * A list of all authentication methods attached to this session. Use\n   * the information here to detect the last time a user verified a\n   * factor, for example if implementing a step-up scenario.\n   *\n   * Supports both RFC-8176 compliant format (string[]) and detailed format (AMREntry[]).\n   * - String format: ['password', 'otp'] - RFC-8176 compliant\n   * - Object format: [{ method: 'password', timestamp: 1234567890 }] - includes timestamps\n   */\n  currentAuthenticationMethods: AMREntry[] | string[]\n}>\n\n/**\n * Contains the full multi-factor authentication API.\n *\n */\nexport interface GoTrueMFAApi {\n  /**\n   * Starts the enrollment process for a new Multi-Factor Authentication (MFA)\n   * factor. This method creates a new `unverified` factor.\n   * To verify a factor, present the QR code or secret to the user and ask them to add it to their\n   * authenticator app.\n   * The user has to enter the code from their authenticator app to verify it.\n   *\n   * Upon verifying a factor, all other sessions are logged out and the current session's authenticator level is promoted to `aal2`.\n   *\n   * @category Auth\n   * @subcategory Auth MFA\n   *\n   * @remarks\n   * - Use `totp` or `phone` as the `factorType` and use the returned `id` to create a challenge.\n   * - To create a challenge, see [`mfa.challenge()`](/docs/reference/javascript/auth-mfa-challenge).\n   * - To verify a challenge, see [`mfa.verify()`](/docs/reference/javascript/auth-mfa-verify).\n   * - To create and verify a TOTP challenge in a single step, see [`mfa.challengeAndVerify()`](/docs/reference/javascript/auth-mfa-challengeandverify).\n   * - To generate a QR code for the `totp` secret in Next.js, you can do the following:\n   * ```html\n   * <Image src={data.totp.qr_code} alt={data.totp.uri} layout=\"fill\"></Image>\n   * ```\n   * - The `challenge` and `verify` steps are separated when using Phone factors as the user will need time to receive and input the code obtained from the SMS in challenge.\n   *\n   * @example Enroll a time-based, one-time password (TOTP) factor\n   * ```js\n   * const { data, error } = await supabase.auth.mfa.enroll({\n   *   factorType: 'totp',\n   *   friendlyName: 'your_friendly_name'\n   * })\n   *\n   * // Use the id to create a challenge.\n   * // The challenge can be verified by entering the code generated from the authenticator app.\n   * // The code will be generated upon scanning the qr_code or entering the secret into the authenticator app.\n   * const { id, type, totp: { qr_code, secret, uri }, friendly_name } = data\n   * const challenge = await supabase.auth.mfa.challenge({ factorId: id });\n   * ```\n   *\n   * @exampleResponse Enroll a time-based, one-time password (TOTP) factor\n   * ```json\n   * {\n   *   data: {\n   *     id: '<ID>',\n   *     type: 'totp'\n   *     totp: {\n   *       qr_code: '<QR_CODE_AS_SVG_DATA>',\n   *       secret: '<SECRET>',\n   *       uri: '<URI>',\n   *     }\n   *     friendly_name?: 'Important app'\n   *   },\n   *   error: null\n   * }\n   * ```\n   *\n   * @example Enroll a Phone Factor\n   * ```js\n   * const { data, error } = await supabase.auth.mfa.enroll({\n   *   factorType: 'phone',\n   *   friendlyName: 'your_friendly_name',\n   *   phone: '+12345678',\n   * })\n   *\n   * // Use the id to create a challenge and send an SMS with a code to the user.\n   * const { id, type, friendly_name, phone } = data\n   *\n   * const challenge = await supabase.auth.mfa.challenge({ factorId: id });\n   * ```\n   *\n   * @exampleResponse Enroll a Phone Factor\n   * ```json\n   * {\n   *   data: {\n   *     id: '<ID>',\n   *     type: 'phone',\n   *     friendly_name?: 'Important app',\n   *     phone: '+5787123456'\n   *   },\n   *   error: null\n   * }\n   * ```\n   */\n  enroll(params: MFAEnrollTOTPParams): Promise<AuthMFAEnrollTOTPResponse>\n  enroll(params: MFAEnrollPhoneParams): Promise<AuthMFAEnrollPhoneResponse>\n  enroll(params: MFAEnrollWebauthnParams): Promise<AuthMFAEnrollWebauthnResponse>\n  enroll(params: MFAEnrollParams): Promise<AuthMFAEnrollResponse>\n\n  /**\n   * Prepares a challenge used to verify that a user has access to a MFA\n   * factor.\n   *\n   * @category Auth\n   * @subcategory Auth MFA\n   *\n   * @remarks\n   * - An [enrolled factor](/docs/reference/javascript/auth-mfa-enroll) is required before creating a challenge.\n   * - To verify a challenge, see [`mfa.verify()`](/docs/reference/javascript/auth-mfa-verify).\n   * - A phone factor sends a code to the user upon challenge. The channel defaults to `sms` unless otherwise specified.\n   *\n   * @example Create a challenge for a factor\n   * ```js\n   * const { data, error } = await supabase.auth.mfa.challenge({\n   *   factorId: '34e770dd-9ff9-416c-87fa-43b31d7ef225'\n   * })\n   * ```\n   *\n   * @exampleResponse Create a challenge for a factor\n   * ```json\n   * {\n   *   data: {\n   *     id: '<ID>',\n   *     type: 'totp',\n   *     expires_at: 1700000000\n   *   },\n   *   error: null\n   * }\n   * ```\n   *\n   * @example Create a challenge for a phone factor\n   * ```js\n   * const { data, error } = await supabase.auth.mfa.challenge({\n   *   factorId: '34e770dd-9ff9-416c-87fa-43b31d7ef225',\n   * })\n   * ```\n   *\n   * @exampleResponse Create a challenge for a phone factor\n   * ```json\n   * {\n   *   data: {\n   *     id: '<ID>',\n   *     type: 'phone',\n   *     expires_at: 1700000000\n   *   },\n   *   error: null\n   * }\n   * ```\n   *\n   * @example Create a challenge for a phone factor (WhatsApp)\n   * ```js\n   * const { data, error } = await supabase.auth.mfa.challenge({\n   *   factorId: '34e770dd-9ff9-416c-87fa-43b31d7ef225',\n   *   channel: 'whatsapp',\n   * })\n   * ```\n   *\n   * @exampleResponse Create a challenge for a phone factor (WhatsApp)\n   * ```json\n   * {\n   *   data: {\n   *     id: '<ID>',\n   *     expires_at: 1700000000\n   *   },\n   *   error: null\n   * }\n   * ```\n   */\n  challenge(params: MFAChallengeTOTPParams): Promise<Prettify<AuthMFAChallengeTOTPResponse>>\n  challenge(params: MFAChallengePhoneParams): Promise<Prettify<AuthMFAChallengePhoneResponse>>\n  challenge(params: MFAChallengeWebauthnParams): Promise<Prettify<AuthMFAChallengeWebauthnResponse>>\n  challenge(params: MFAChallengeParams): Promise<AuthMFAChallengeResponse>\n\n  /**\n   * Verifies a code against a challenge. The verification code is\n   * provided by the user by entering a code seen in their authenticator app.\n   *\n   * @category Auth\n   * @subcategory Auth MFA\n   *\n   * @remarks\n   * - To verify a challenge, please [create a challenge](/docs/reference/javascript/auth-mfa-challenge) first.\n   *\n   * @example Verify a challenge for a factor\n   * ```js\n   * const { data, error } = await supabase.auth.mfa.verify({\n   *   factorId: '34e770dd-9ff9-416c-87fa-43b31d7ef225',\n   *   challengeId: '4034ae6f-a8ce-4fb5-8ee5-69a5863a7c15',\n   *   code: '123456'\n   * })\n   * ```\n   *\n   * @exampleResponse Verify a challenge for a factor\n   * ```json\n   * {\n   *   data: {\n   *     access_token: '<ACCESS_TOKEN>',\n   *     token_type: 'Bearer',\n   *     expires_in: 3600,\n   *     refresh_token: '<REFRESH_TOKEN>',\n   *     user: {\n   *       id: '11111111-1111-1111-1111-111111111111',\n   *       aud: 'authenticated',\n   *       role: 'authenticated',\n   *       email: 'example@email.com',\n   *       email_confirmed_at: '2024-01-01T00:00:00Z',\n   *       phone: '',\n   *       confirmation_sent_at: '2024-01-01T00:00:00Z',\n   *       confirmed_at: '2024-01-01T00:00:00Z',\n   *       last_sign_in_at: '2024-01-01T00:00:00Z',\n   *       app_metadata: {\n   *         provider: 'email',\n   *         providers: [\n   *           \"email\",\n   *         ]\n   *       },\n   *       user_metadata: {},\n   *       identities: [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"identity_data\": {\n   *             \"email\": \"example@email.com\",\n   *             \"email_verified\": true,\n   *             \"phone_verified\": false,\n   *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *           },\n   *           \"provider\": \"email\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"email@example.com\"\n   *         },\n   *       ],\n   *       created_at: '2024-01-01T00:00:00Z',\n   *       updated_at: '2024-01-01T00:00:00Z',\n   *       is_anonymous: false,\n   *       factors: [\n   *         \"id\": '<ID>',\n   *         \"friendly_name\": 'Important Auth App',\n   *         \"factor_type\": 'totp',\n   *         \"status\": 'verified',\n   *         \"created_at\": \"2024-01-01T00:00:00Z\",\n   *         \"updated_at\": \"2024-01-01T00:00:00Z\"\n   *       ]\n   *     }\n   *   }\n   *   error: null\n   * }\n   * ```\n   */\n  verify(params: MFAVerifyTOTPParams): Promise<AuthMFAVerifyResponse>\n  verify(params: MFAVerifyPhoneParams): Promise<AuthMFAVerifyResponse>\n  verify(params: MFAVerifyWebauthnParams): Promise<AuthMFAVerifyResponse>\n  verify(params: MFAVerifyParams): Promise<AuthMFAVerifyResponse>\n\n  /**\n   * Unenroll removes a MFA factor.\n   * A user has to have an `aal2` authenticator level in order to unenroll a `verified` factor.\n   *\n   * @category Auth\n   * @subcategory Auth MFA\n   *\n   * @example Unenroll a factor\n   * ```js\n   * const { data, error } = await supabase.auth.mfa.unenroll({\n   *   factorId: '34e770dd-9ff9-416c-87fa-43b31d7ef225',\n   * })\n   * ```\n   *\n   * @exampleResponse Unenroll a factor\n   * ```json\n   * {\n   *   data: {\n   *     id: '<FACTOR_ID>'\n   *   },\n   *   error: null\n   * }\n   * ```\n   */\n  unenroll(params: MFAUnenrollParams): Promise<AuthMFAUnenrollResponse>\n\n  /**\n   * Helper method which creates a challenge and immediately uses the given code to verify against it thereafter. The verification code is\n   * provided by the user by entering a code seen in their authenticator app.\n   *\n   * @category Auth\n   * @subcategory Auth MFA\n   *\n   * @remarks\n   * - Intended for use with only TOTP factors.\n   * - An [enrolled factor](/docs/reference/javascript/auth-mfa-enroll) is required before invoking `challengeAndVerify()`.\n   * - Executes [`mfa.challenge()`](/docs/reference/javascript/auth-mfa-challenge) and [`mfa.verify()`](/docs/reference/javascript/auth-mfa-verify) in a single step.\n   *\n   * @example Create and verify a challenge for a factor\n   * ```js\n   * const { data, error } = await supabase.auth.mfa.challengeAndVerify({\n   *   factorId: '34e770dd-9ff9-416c-87fa-43b31d7ef225',\n   *   code: '123456'\n   * })\n   * ```\n   *\n   * @exampleResponse Create and verify a challenge for a factor\n   * ```json\n   * {\n   *   data: {\n   *     access_token: '<ACCESS_TOKEN>',\n   *     token_type: 'Bearer',\n   *     expires_in: 3600,\n   *     refresh_token: '<REFRESH_TOKEN>',\n   *     user: {\n   *       id: '11111111-1111-1111-1111-111111111111',\n   *       aud: 'authenticated',\n   *       role: 'authenticated',\n   *       email: 'example@email.com',\n   *       email_confirmed_at: '2024-01-01T00:00:00Z',\n   *       phone: '',\n   *       confirmation_sent_at: '2024-01-01T00:00:00Z',\n   *       confirmed_at: '2024-01-01T00:00:00Z',\n   *       last_sign_in_at: '2024-01-01T00:00:00Z',\n   *       app_metadata: {\n   *         provider: 'email',\n   *         providers: [\n   *           \"email\",\n   *         ]\n   *       },\n   *       user_metadata: {},\n   *       identities: [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"identity_data\": {\n   *             \"email\": \"example@email.com\",\n   *             \"email_verified\": true,\n   *             \"phone_verified\": false,\n   *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *           },\n   *           \"provider\": \"email\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"email@example.com\"\n   *         },\n   *       ],\n   *       created_at: '2024-01-01T00:00:00Z',\n   *       updated_at: '2024-01-01T00:00:00Z',\n   *       is_anonymous: false,\n   *       factors: [\n   *         \"id\": '<ID>',\n   *         \"friendly_name\": 'Important Auth App',\n   *         \"factor_type\": 'totp',\n   *         \"status\": 'verified',\n   *         \"created_at\": \"2024-01-01T00:00:00Z\",\n   *         \"updated_at\": \"2024-01-01T00:00:00Z\"\n   *       ]\n   *     }\n   *   }\n   *   error: null\n   * }\n   * ```\n   */\n  challengeAndVerify(params: MFAChallengeAndVerifyParams): Promise<AuthMFAVerifyResponse>\n\n  /**\n   * Returns the list of MFA factors enabled for this user.\n   *\n   * @see {@link GoTrueMFAApi#enroll}\n   * @see {@link GoTrueMFAApi#getAuthenticatorAssuranceLevel}\n   * @see {@link GoTrueClient#getUser}\n   *\n   *\n   * @category Auth\n   * @subcategory Auth MFA\n   */\n  listFactors(): Promise<AuthMFAListFactorsResponse>\n\n  /**\n   * Returns the Authenticator Assurance Level (AAL) for the active session.\n   *\n   * - `aal1` (or `null`) means that the user's identity has been verified only\n   * with a conventional login (email+password, OTP, magic link, social login,\n   * etc.).\n   * - `aal2` means that the user's identity has been verified both with a conventional login and at least one MFA factor.\n   *\n   * When called without a JWT parameter, this method is fairly quick (microseconds)\n   * and rarely uses the network. When a JWT is provided (useful in server-side\n   * environments like Edge Functions where no session is stored), this method\n   * will make a network request to validate the user and fetch their MFA factors.\n   *\n   * @param jwt Takes in an optional access token JWT. If no JWT is provided, the JWT from the current session is used.\n   *\n   * @category Auth\n   * @subcategory Auth MFA\n   *\n   * @remarks\n   * - Authenticator Assurance Level (AAL) is the measure of the strength of an authentication mechanism.\n   * - In Supabase, having an AAL of `aal1` refers to having the 1st factor of authentication such as an email and password or OAuth sign-in while `aal2` refers to the 2nd factor of authentication such as a time-based, one-time-password (TOTP) or Phone factor.\n   * - If the user has a verified factor, the `nextLevel` field will return `aal2`, else, it will return `aal1`.\n   * - An optional `jwt` parameter can be passed to check the AAL level of a specific JWT instead of the current session.\n   *\n   * @example Get the AAL details of a session\n   * ```js\n   * const { data, error } = await supabase.auth.mfa.getAuthenticatorAssuranceLevel()\n   * const { currentLevel, nextLevel, currentAuthenticationMethods } = data\n   * ```\n   *\n   * @exampleResponse Get the AAL details of a session\n   * ```json\n   * {\n   *   data: {\n   *     currentLevel: 'aal1',\n   *     nextLevel: 'aal2',\n   *     currentAuthenticationMethods: [\n   *       {\n   *         method: 'password',\n   *         timestamp: 1700000000\n   *       }\n   *     ]\n   *   }\n   *   error: null\n   * }\n   * ```\n   *\n   * @example Get the AAL details for a specific JWT\n   * ```js\n   * const { data, error } = await supabase.auth.mfa.getAuthenticatorAssuranceLevel(jwt)\n   * ```\n   */\n  getAuthenticatorAssuranceLevel(\n    jwt?: string\n  ): Promise<AuthMFAGetAuthenticatorAssuranceLevelResponse>\n\n  // namespace for the webauthn methods\n  webauthn: WebAuthnApi\n}\n\n/**\n * @expermental\n */\nexport type AuthMFAAdminDeleteFactorResponse = RequestResult<{\n  /** ID of the factor that was successfully deleted. */\n  id: string\n}>\n/**\n * @expermental\n */\nexport type AuthMFAAdminDeleteFactorParams = {\n  /** ID of the MFA factor to delete. */\n  id: string\n\n  /** ID of the user whose factor is being deleted. */\n  userId: string\n}\n\n/**\n * @expermental\n */\nexport type AuthMFAAdminListFactorsResponse = RequestResult<{\n  /** All factors attached to the user. */\n  factors: Factor[]\n}>\n\n/**\n * @expermental\n */\nexport type AuthMFAAdminListFactorsParams = {\n  /** ID of the user. */\n  userId: string\n}\n\n/**\n * Contains the full multi-factor authentication administration API.\n *\n * @expermental\n */\nexport interface GoTrueAdminMFAApi {\n  /**\n   * Lists all factors associated to a user.\n   *\n   *\n   * @category Auth\n   * @subcategory Auth Admin\n   *\n   * @example List all factors for a user\n   * ```js\n   * const { data, error } = await supabase.auth.admin.mfa.listFactors()\n   * ```\n   *\n   * @exampleResponse List all factors for a user\n   * ```json\n   * {\n   *   data: {\n   *     factors: Factor[\n   *       {\n   *         id: '<ID>',\n   *         friendly_name: 'Auth App Factor',\n   *         factor_type: 'totp',\n   *         status: 'verified',\n   *         created_at: '2024-01-01T00:00:00Z',\n   *         updated_at: '2024-01-01T00:00:00Z'\n   *       }\n   *     ]\n   *   },\n   *   error: null\n   * }\n   * ```\n   */\n  listFactors(params: AuthMFAAdminListFactorsParams): Promise<AuthMFAAdminListFactorsResponse>\n\n  /**\n   * Deletes a factor on a user. This will log the user out of all active\n   * sessions if the deleted factor was verified.\n   *\n   * @see {@link GoTrueMFAApi#unenroll}\n   *\n   * @expermental\n   *\n   * @category Auth\n   * @subcategory Auth Admin\n   *\n   * @example Delete a factor for a user\n   * ```js\n   * const { data, error } = await supabase.auth.admin.mfa.deleteFactor({\n   *   id: '34e770dd-9ff9-416c-87fa-43b31d7ef225',\n   *   userId: 'a89baba7-b1b7-440f-b4bb-91026967f66b',\n   * })\n   * ```\n   *\n   * @exampleResponse Delete a factor for a user\n   * ```json\n   * {\n   *   data: {\n   *     id: '34e770dd-9ff9-416c-87fa-43b31d7ef225'\n   *   },\n   *   error: null\n   * }\n   * ```\n   */\n  deleteFactor(params: AuthMFAAdminDeleteFactorParams): Promise<AuthMFAAdminDeleteFactorResponse>\n}\n\ntype AnyFunction = (...args: any[]) => any\ntype MaybePromisify<T> = T | Promise<T>\n\ntype PromisifyMethods<T> = {\n  [K in keyof T]: T[K] extends AnyFunction\n    ? (...args: Parameters<T[K]>) => MaybePromisify<ReturnType<T[K]>>\n    : T[K]\n}\n\nexport type SupportedStorage = PromisifyMethods<\n  Pick<Storage, 'getItem' | 'setItem' | 'removeItem'>\n> & {\n  /**\n   * If set to `true` signals to the library that the storage medium is used\n   * on a server and the values may not be authentic, such as reading from\n   * request cookies. Implementations should not set this to true if the client\n   * is used on a server that reads storage information from authenticated\n   * sources, such as a secure database or file.\n   */\n  isServer?: boolean\n}\n\nexport type InitializeResult = { error: AuthError | null }\n\nexport type CallRefreshTokenResult = RequestResult<Session>\n\nexport type Pagination = {\n  [key: string]: any\n  nextPage: number | null\n  lastPage: number\n  total: number\n}\n\nexport type PageParams = {\n  /** The page number */\n  page?: number\n  /** Number of items returned per page */\n  perPage?: number\n}\n\nexport type SignOut = {\n  /**\n   * Determines which sessions should be\n   * logged out. Global means all\n   * sessions by this account. Local\n   * means only this session. Others\n   * means all other sessions except the\n   * current one. When using others,\n   * there is no sign-out event fired on\n   * the current session!\n   */\n  scope?: 'global' | 'local' | 'others'\n}\n\ntype MFAEnrollParamsBase<T extends FactorType> = {\n  /** The type of factor being enrolled. */\n  factorType: T\n  /** Human readable name assigned to the factor. */\n  friendlyName?: string\n}\n\ntype MFAEnrollTOTPParamFields = {\n  /** Domain which the user is enrolled with. */\n  issuer?: string\n}\n\nexport type MFAEnrollTOTPParams = MFAEnrollParamsBase<'totp'> & MFAEnrollTOTPParamFields\n\ntype MFAEnrollPhoneParamFields = {\n  /** Phone number associated with a factor. Number should conform to E.164 format */\n  phone: string\n}\nexport type MFAEnrollPhoneParams = MFAEnrollParamsBase<'phone'> & MFAEnrollPhoneParamFields\n\ntype MFAEnrollWebauthnFields = {\n  /** no extra fields for now, kept for consistency and for possible future changes  */\n}\n\n/**\n * Parameters for enrolling a WebAuthn factor.\n * Creates an unverified WebAuthn factor that must be verified with a credential.\n * @see {@link https://w3c.github.io/webauthn/#sctn-registering-a-new-credential W3C WebAuthn Spec - Registering a New Credential}\n */\nexport type MFAEnrollWebauthnParams = MFAEnrollParamsBase<'webauthn'> & MFAEnrollWebauthnFields\n\ntype AuthMFAEnrollResponseBase<T extends FactorType> = {\n  /** ID of the factor that was just enrolled (in an unverified state). */\n  id: string\n\n  /** Type of MFA factor.*/\n  type: T\n\n  /** Friendly name of the factor, useful for distinguishing between factors **/\n  friendly_name?: string\n}\n\ntype AuthMFAEnrollTOTPResponseFields = {\n  /** TOTP enrollment information. */\n  totp: {\n    /** Contains a QR code encoding the authenticator URI. You can\n     * convert it to a URL by prepending `data:image/svg+xml;utf-8,` to\n     * the value. Avoid logging this value to the console. */\n    qr_code: string\n\n    /** The TOTP secret (also encoded in the QR code). Show this secret\n     * in a password-style field to the user, in case they are unable to\n     * scan the QR code. Avoid logging this value to the console. */\n    secret: string\n\n    /** The authenticator URI encoded within the QR code, should you need\n     * to use it. Avoid loggin this value to the console. */\n    uri: string\n  }\n}\n\nexport type AuthMFAEnrollTOTPResponse = RequestResult<\n  AuthMFAEnrollResponseBase<'totp'> & AuthMFAEnrollTOTPResponseFields\n>\n\ntype AuthMFAEnrollPhoneResponseFields = {\n  /** Phone number of the MFA factor in E.164 format. Used to send messages  */\n  phone: string\n}\n\nexport type AuthMFAEnrollPhoneResponse = RequestResult<\n  AuthMFAEnrollResponseBase<'phone'> & AuthMFAEnrollPhoneResponseFields\n>\n\ntype AuthMFAEnrollWebauthnFields = {\n  /** no extra fields for now, kept for consistency and for possible future changes  */\n}\n\n/**\n * Response type for WebAuthn factor enrollment.\n * Returns the enrolled factor ID and metadata.\n * @see {@link https://w3c.github.io/webauthn/#sctn-registering-a-new-credential W3C WebAuthn Spec - Registering a New Credential}\n */\nexport type AuthMFAEnrollWebauthnResponse = RequestResult<\n  AuthMFAEnrollResponseBase<'webauthn'> & AuthMFAEnrollWebauthnFields\n>\n\nexport type JwtHeader = {\n  alg: 'RS256' | 'ES256' | 'HS256' | (string & {})\n  kid: string\n  typ: string\n}\n\nexport type RequiredClaims = {\n  iss: string\n  sub: string\n  aud: string | string[]\n  exp: number\n  iat: number\n  role: string\n  aal: AuthenticatorAssuranceLevels\n  session_id: string\n}\n\n/**\n * JWT Payload containing claims for Supabase authentication tokens.\n *\n * Required claims (iss, aud, exp, iat, sub, role, aal, session_id) are inherited from RequiredClaims.\n * All other claims are optional as they can be customized via Custom Access Token Hooks.\n *\n * @see https://supabase.com/docs/guides/auth/jwt-fields\n */\nexport interface JwtPayload extends RequiredClaims {\n  // Standard optional claims (can be customized via custom access token hooks)\n  email?: string\n  phone?: string\n  is_anonymous?: boolean\n\n  // Optional claims\n  jti?: string\n  nbf?: number\n  app_metadata?: UserAppMetadata\n  user_metadata?: UserMetadata\n  /**\n   * Authentication Method References.\n   * Supports both RFC-8176 compliant format (string[]) and detailed format (AMREntry[]).\n   * - String format: ['password', 'otp'] - RFC-8176 compliant\n   * - Object format: [{ method: 'password', timestamp: 1234567890 }] - includes timestamps\n   */\n  amr?: AMREntry[] | string[]\n\n  // Special claims (only in anon/service role tokens)\n  ref?: string\n\n  // Allow custom claims via custom access token hooks\n  [key: string]: any\n}\n\nexport interface JWK {\n  kty: 'RSA' | 'EC' | 'oct' | (string & {})\n  key_ops: string[]\n  alg?: string\n  kid?: string\n  [key: string]: any\n}\n\nexport const SIGN_OUT_SCOPES = ['global', 'local', 'others'] as const\nexport type SignOutScope = (typeof SIGN_OUT_SCOPES)[number]\n\n/**\n * OAuth client grant types supported by the OAuth 2.1 server.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport type OAuthClientGrantType = 'authorization_code' | 'refresh_token' | (string & {})\n\n/**\n * OAuth client response types supported by the OAuth 2.1 server.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport type OAuthClientResponseType = 'code'\n\n/**\n * OAuth client type indicating whether the client can keep credentials confidential.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport type OAuthClientType = 'public' | 'confidential'\n\n/**\n * OAuth client registration type.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport type OAuthClientRegistrationType = 'dynamic' | 'manual'\n\n/**\n * OAuth client token endpoint authentication method.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport type OAuthClientTokenEndpointAuthMethod =\n  | 'none'\n  | 'client_secret_basic'\n  | 'client_secret_post'\n\n/**\n * OAuth client object returned from the OAuth 2.1 server.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport type OAuthClient = {\n  /** Unique identifier for the OAuth client */\n  client_id: string\n  /** Human-readable name of the OAuth client */\n  client_name: string\n  /** Client secret (only returned on registration and regeneration) */\n  client_secret?: string\n  /** Type of OAuth client */\n  client_type: OAuthClientType\n  /** Token endpoint authentication method */\n  token_endpoint_auth_method: OAuthClientTokenEndpointAuthMethod\n  /** Registration type of the client */\n  registration_type: OAuthClientRegistrationType\n  /** URI of the OAuth client */\n  client_uri?: string\n  /** URI of the OAuth client's logo */\n  logo_uri?: string\n  /** Array of allowed redirect URIs */\n  redirect_uris: string[]\n  /** Array of allowed grant types */\n  grant_types: OAuthClientGrantType[]\n  /** Array of allowed response types */\n  response_types: OAuthClientResponseType[]\n  /** Scope of the OAuth client */\n  scope?: string\n  /** Timestamp when the client was created */\n  created_at: string\n  /** Timestamp when the client was last updated */\n  updated_at: string\n}\n\n/**\n * Parameters for creating a new OAuth client.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport type CreateOAuthClientParams = {\n  /** Human-readable name of the OAuth client */\n  client_name: string\n  /** URI of the OAuth client */\n  client_uri?: string\n  /** Array of allowed redirect URIs */\n  redirect_uris: string[]\n  /** Array of allowed grant types (optional, defaults to authorization_code and refresh_token) */\n  grant_types?: OAuthClientGrantType[]\n  /** Array of allowed response types (optional, defaults to code) */\n  response_types?: OAuthClientResponseType[]\n  /** Scope of the OAuth client */\n  scope?: string\n  /** Token endpoint authentication method (defaults to server default if not specified) */\n  token_endpoint_auth_method?: OAuthClientTokenEndpointAuthMethod\n}\n\n/**\n * Parameters for updating an existing OAuth client.\n * All fields are optional. Only provided fields will be updated.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport type UpdateOAuthClientParams = {\n  /** Human-readable name of the OAuth client */\n  client_name?: string\n  /** URI of the OAuth client */\n  client_uri?: string\n  /** URI of the OAuth client's logo */\n  logo_uri?: string\n  /** Array of allowed redirect URIs */\n  redirect_uris?: string[]\n  /** Array of allowed grant types */\n  grant_types?: OAuthClientGrantType[]\n  /** Token endpoint authentication method */\n  token_endpoint_auth_method?: OAuthClientTokenEndpointAuthMethod\n}\n\n/**\n * Response type for OAuth client operations.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport type OAuthClientResponse = RequestResult<OAuthClient>\n\n/**\n * Response type for listing OAuth clients.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport type OAuthClientListResponse =\n  | {\n      data: { clients: OAuthClient[]; aud: string } & Pagination\n      error: null\n    }\n  | {\n      data: { clients: [] }\n      error: AuthError\n    }\n\n/**\n * Contains all OAuth client administration methods.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport interface GoTrueAdminOAuthApi {\n  /**\n   * Lists all OAuth clients with optional pagination.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory OAuth Admin\n   */\n  listClients(params?: PageParams): Promise<OAuthClientListResponse>\n\n  /**\n   * Creates a new OAuth client.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory OAuth Admin\n   */\n  createClient(params: CreateOAuthClientParams): Promise<OAuthClientResponse>\n\n  /**\n   * Gets details of a specific OAuth client.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory OAuth Admin\n   */\n  getClient(clientId: string): Promise<OAuthClientResponse>\n\n  /**\n   * Updates an existing OAuth client.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory OAuth Admin\n   */\n  updateClient(clientId: string, params: UpdateOAuthClientParams): Promise<OAuthClientResponse>\n\n  /**\n   * Deletes an OAuth client.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory OAuth Admin\n   */\n  deleteClient(clientId: string): Promise<{ data: null; error: AuthError | null }>\n\n  /**\n   * Regenerates the secret for an OAuth client.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory OAuth Admin\n   */\n  regenerateClientSecret(clientId: string): Promise<OAuthClientResponse>\n}\n\n/**\n * Type of custom identity provider.\n */\nexport type CustomProviderType = 'oauth2' | 'oidc'\n\n/**\n * OIDC discovery document fields.\n * Populated when the server successfully fetches and validates the\n * provider's OpenID Connect discovery document.\n */\nexport type OIDCDiscoveryDocument = {\n  /** The issuer identifier */\n  issuer: string\n  /** URL of the authorization endpoint */\n  authorization_endpoint: string\n  /** URL of the token endpoint */\n  token_endpoint: string\n  /** URL of the JSON Web Key Set */\n  jwks_uri: string\n  /** URL of the userinfo endpoint */\n  userinfo_endpoint?: string\n  /** URL of the revocation endpoint */\n  revocation_endpoint?: string\n  /** List of supported scopes */\n  supported_scopes?: string[]\n  /** List of supported response types */\n  supported_response_types?: string[]\n  /** List of supported subject types */\n  supported_subject_types?: string[]\n  /** List of supported ID token signing algorithms */\n  supported_id_token_signing_algs?: string[]\n}\n\n/**\n * Custom OAuth/OIDC provider object returned from the admin API.\n */\nexport type CustomOAuthProvider = {\n  /** Unique identifier (UUID) */\n  id: string\n  /** Provider type */\n  provider_type: CustomProviderType\n  /** Provider identifier (e.g. `custom:mycompany`) */\n  identifier: string\n  /** Human-readable name */\n  name: string\n  /** OAuth client ID */\n  client_id: string\n  /** Additional client IDs accepted during token validation */\n  acceptable_client_ids?: string[]\n  /** OAuth scopes requested during authorization */\n  scopes?: string[]\n  /** Whether PKCE is enabled */\n  pkce_enabled?: boolean\n  /** Mapping of provider attributes to Supabase user attributes */\n  attribute_mapping?: Record<string, any>\n  /** Additional parameters sent with the authorization request */\n  authorization_params?: Record<string, string>\n  /** Whether the provider is enabled */\n  enabled?: boolean\n  /** Whether email is optional for this provider */\n  email_optional?: boolean\n  /** OIDC issuer URL */\n  issuer?: string\n  /** OIDC discovery URL */\n  discovery_url?: string\n  /** Whether to skip nonce check (OIDC) */\n  skip_nonce_check?: boolean\n  /** OAuth2 authorization URL */\n  authorization_url?: string\n  /** OAuth2 token URL */\n  token_url?: string\n  /** OAuth2 userinfo URL */\n  userinfo_url?: string\n  /** JWKS URI for token verification */\n  jwks_uri?: string\n  /** OIDC discovery document (OIDC providers only) */\n  discovery_document?: OIDCDiscoveryDocument | null\n  /** Timestamp when the provider was created */\n  created_at: string\n  /** Timestamp when the provider was last updated */\n  updated_at: string\n}\n\n/**\n * Parameters for creating a new custom provider.\n */\nexport type CreateCustomProviderParams = {\n  /** Provider type */\n  provider_type: CustomProviderType\n  /** Provider identifier (e.g. `custom:mycompany`) */\n  identifier: string\n  /** Human-readable name */\n  name: string\n  /** OAuth client ID */\n  client_id: string\n  /** OAuth client secret (write-only, not returned in responses) */\n  client_secret: string\n  /** Additional client IDs accepted during token validation */\n  acceptable_client_ids?: string[]\n  /** OAuth scopes requested during authorization */\n  scopes?: string[]\n  /** Whether PKCE is enabled */\n  pkce_enabled?: boolean\n  /** Mapping of provider attributes to Supabase user attributes */\n  attribute_mapping?: Record<string, any>\n  /** Additional parameters sent with the authorization request */\n  authorization_params?: Record<string, string>\n  /** Whether the provider is enabled */\n  enabled?: boolean\n  /** Whether email is optional for this provider */\n  email_optional?: boolean\n  /** OIDC issuer URL */\n  issuer?: string\n  /** OIDC discovery URL */\n  discovery_url?: string\n  /** Whether to skip nonce check (OIDC) */\n  skip_nonce_check?: boolean\n  /** OAuth2 authorization URL */\n  authorization_url?: string\n  /** OAuth2 token URL */\n  token_url?: string\n  /** OAuth2 userinfo URL */\n  userinfo_url?: string\n  /** JWKS URI for token verification */\n  jwks_uri?: string\n}\n\n/**\n * Parameters for updating an existing custom provider.\n * All fields are optional. Only provided fields will be updated.\n * `provider_type` and `identifier` are immutable and cannot be changed.\n */\nexport type UpdateCustomProviderParams = {\n  /** Human-readable name */\n  name?: string\n  /** OAuth client ID */\n  client_id?: string\n  /** OAuth client secret (write-only, not returned in responses) */\n  client_secret?: string\n  /** Additional client IDs accepted during token validation */\n  acceptable_client_ids?: string[]\n  /** OAuth scopes requested during authorization */\n  scopes?: string[]\n  /** Whether PKCE is enabled */\n  pkce_enabled?: boolean\n  /** Mapping of provider attributes to Supabase user attributes */\n  attribute_mapping?: Record<string, any>\n  /** Additional parameters sent with the authorization request */\n  authorization_params?: Record<string, string>\n  /** Whether the provider is enabled */\n  enabled?: boolean\n  /** Whether email is optional for this provider */\n  email_optional?: boolean\n  /** OIDC issuer URL */\n  issuer?: string\n  /** OIDC discovery URL */\n  discovery_url?: string\n  /** Whether to skip nonce check (OIDC) */\n  skip_nonce_check?: boolean\n  /** OAuth2 authorization URL */\n  authorization_url?: string\n  /** OAuth2 token URL */\n  token_url?: string\n  /** OAuth2 userinfo URL */\n  userinfo_url?: string\n  /** JWKS URI for token verification */\n  jwks_uri?: string\n}\n\n/**\n * Parameters for listing custom providers.\n */\nexport type ListCustomProvidersParams = {\n  /** Filter by provider type */\n  type?: CustomProviderType\n}\n\n/**\n * Response type for custom provider operations.\n */\nexport type CustomProviderResponse = RequestResult<CustomOAuthProvider>\n\n/**\n * Response type for listing custom providers.\n */\nexport type CustomProviderListResponse =\n  | {\n      data: { providers: CustomOAuthProvider[] }\n      error: null\n    }\n  | {\n      data: { providers: [] }\n      error: AuthError\n    }\n\n/**\n * Contains all custom OIDC/OAuth provider administration methods.\n */\nexport interface GoTrueAdminCustomProvidersApi {\n  /**\n   * Lists all custom providers with optional type filter.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory Auth Admin\n   */\n  listProviders(params?: ListCustomProvidersParams): Promise<CustomProviderListResponse>\n\n  /**\n   * Creates a new custom OIDC/OAuth provider.\n   *\n   * For OIDC providers, the server fetches and validates the OpenID Connect discovery document\n   * from the issuer's well-known endpoint (or the provided `discovery_url`) at creation time.\n   * This may return a validation error (`error_code: \"validation_failed\"`) if the discovery\n   * document is unreachable, not valid JSON, missing required fields, or if the issuer\n   * in the document does not match the expected issuer.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory Auth Admin\n   */\n  createProvider(params: CreateCustomProviderParams): Promise<CustomProviderResponse>\n\n  /**\n   * Gets details of a specific custom provider by identifier.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory Auth Admin\n   */\n  getProvider(identifier: string): Promise<CustomProviderResponse>\n\n  /**\n   * Updates an existing custom provider.\n   *\n   * When `issuer` or `discovery_url` is changed on an OIDC provider, the server re-fetches and\n   * validates the discovery document before persisting. This may return a validation error\n   * (`error_code: \"validation_failed\"`) if the discovery document is unreachable, invalid, or\n   * the issuer does not match.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory Auth Admin\n   */\n  updateProvider(\n    identifier: string,\n    params: UpdateCustomProviderParams\n  ): Promise<CustomProviderResponse>\n\n  /**\n   * Deletes a custom provider.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory Auth Admin\n   */\n  deleteProvider(identifier: string): Promise<{ data: null; error: AuthError | null }>\n}\n\n/**\n * OAuth client details in an authorization request.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport type OAuthAuthorizationClient = {\n  /** Unique identifier for the OAuth client (UUID) */\n  id: string\n  /** Human-readable name of the OAuth client */\n  name: string\n  /** URI of the OAuth client's website */\n  uri: string\n  /** URI of the OAuth client's logo */\n  logo_uri: string\n}\n\n/**\n * OAuth authorization details when user needs to provide consent.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n *\n * This response includes all information needed to display a consent page:\n * client details, user info, requested scopes, and where the user will be redirected.\n *\n * Note: `redirect_uri` is the base URI (e.g., \"https://app.com/callback\") without\n * query parameters. After consent, you'll receive a complete `redirect_url` with\n * the authorization code and state parameters appended.\n */\nexport type OAuthAuthorizationDetails = {\n  /** The authorization ID used to approve or deny the request */\n  authorization_id: string\n  /** The OAuth client's registered redirect URI (base URI without query parameters) */\n  redirect_uri: string\n  /** OAuth client requesting authorization */\n  client: OAuthAuthorizationClient\n  /** User object associated with the authorization */\n  user: {\n    /** User ID (UUID) */\n    id: string\n    /** User email */\n    email: string\n  }\n  /** Space-separated list of requested scopes (e.g., \"openid profile email\") */\n  scope: string\n}\n\n/**\n * OAuth redirect response when user has already consented or after consent decision.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n *\n * This response is returned in three scenarios:\n * 1. User already consented to these scopes (auto-approved)\n * 2. User just approved the authorization request\n * 3. User just denied the authorization request\n *\n * The `redirect_url` is a complete URL ready for redirecting the user back to the\n * OAuth client, including authorization code (on success) or error (on denial) in\n * query parameters, along with the state parameter if one was provided.\n */\nexport type OAuthRedirect = {\n  /** Complete redirect URL with authorization code and state parameters (e.g., \"https://app.com/callback?code=xxx&state=yyy\") */\n  redirect_url: string\n}\n\n/**\n * Response type for getting OAuth authorization details.\n * Returns either full authorization details (if consent needed) or redirect URL (if already consented).\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n *\n * @example\n * ```typescript\n * const { data, error } = await supabase.auth.oauth.getAuthorizationDetails(authorizationId)\n *\n * if (error) {\n *   console.error('Error:', error)\n * } else if ('authorization_id' in data) {\n *   // User needs to provide consent - show consent page\n *   console.log('Client:', data.client.name)\n *   console.log('Scopes:', data.scope)\n *   console.log('Redirect URI:', data.redirect_uri)\n * } else {\n *   // User already consented - redirect immediately\n *   window.location.href = data.redirect_url\n * }\n * ```\n */\nexport type AuthOAuthAuthorizationDetailsResponse = RequestResult<\n  OAuthAuthorizationDetails | OAuthRedirect\n>\n\n/**\n * Response type for OAuth consent decision (approve/deny).\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport type AuthOAuthConsentResponse = RequestResult<OAuthRedirect>\n\n/**\n * An OAuth grant representing a user's authorization of an OAuth client.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport type OAuthGrant = {\n  /** OAuth client information */\n  client: OAuthAuthorizationClient\n  /** Array of scopes granted to this client */\n  scopes: string[]\n  /** Timestamp when the grant was created (ISO 8601 date-time) */\n  granted_at: string\n}\n\n/**\n * Response type for listing user's OAuth grants.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport type AuthOAuthGrantsResponse = RequestResult<OAuthGrant[]>\n\n/**\n * Response type for revoking an OAuth grant.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\nexport type AuthOAuthRevokeGrantResponse = RequestResult<{}>\n\n/**\n * Contains all OAuth 2.1 authorization server user-facing methods.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n *\n * These methods are used to implement the consent page.\n */\nexport interface AuthOAuthServerApi {\n  /**\n   * Retrieves details about an OAuth authorization request.\n   * Used to display consent information to the user.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * This method returns one of two response types:\n   * - `OAuthAuthorizationDetails`: User needs to consent - show consent page with client info\n   * - `OAuthRedirect`: User already consented - redirect immediately to the OAuth client\n   *\n   * Use type narrowing to distinguish between the responses:\n   * ```typescript\n   * if ('authorization_id' in data) {\n   *   // Show consent page\n   * } else {\n   *   // Redirect to data.redirect_url\n   * }\n   * ```\n   *\n   * @param authorizationId - The authorization ID from the authorization request\n   * @returns Authorization details or redirect URL depending on consent status\n   *\n   * @category Auth\n   * @subcategory OAuth Server\n   */\n  getAuthorizationDetails(authorizationId: string): Promise<AuthOAuthAuthorizationDetailsResponse>\n\n  /**\n   * Approves an OAuth authorization request.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * After approval, the user's consent is stored and an authorization code is generated.\n   * The response contains a complete redirect URL with the authorization code and state.\n   *\n   * @param authorizationId - The authorization ID to approve\n   * @param options - Optional parameters\n   * @param options.skipBrowserRedirect - If false (default), automatically redirects the browser to the OAuth client. If true, returns the redirect_url without automatic redirect (useful for custom handling).\n   * @returns Redirect URL to send the user back to the OAuth client with authorization code\n   *\n   * @category Auth\n   * @subcategory OAuth Server\n   */\n  approveAuthorization(\n    authorizationId: string,\n    options?: { skipBrowserRedirect?: boolean }\n  ): Promise<AuthOAuthConsentResponse>\n\n  /**\n   * Denies an OAuth authorization request.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * After denial, the response contains a redirect URL with an OAuth error\n   * (access_denied) to inform the OAuth client that the user rejected the request.\n   *\n   * @param authorizationId - The authorization ID to deny\n   * @param options - Optional parameters\n   * @param options.skipBrowserRedirect - If false (default), automatically redirects the browser to the OAuth client. If true, returns the redirect_url without automatic redirect (useful for custom handling).\n   * @returns Redirect URL to send the user back to the OAuth client with error information\n   *\n   * @category Auth\n   * @subcategory OAuth Server\n   */\n  denyAuthorization(\n    authorizationId: string,\n    options?: { skipBrowserRedirect?: boolean }\n  ): Promise<AuthOAuthConsentResponse>\n\n  /**\n   * Lists all OAuth grants that the authenticated user has authorized.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * @returns Response with array of OAuth grants with client information and granted scopes\n   *\n   * @category Auth\n   * @subcategory OAuth Server\n   */\n  listGrants(): Promise<AuthOAuthGrantsResponse>\n\n  /**\n   * Revokes a user's OAuth grant for a specific client.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * Revocation marks consent as revoked, deletes active sessions for that OAuth client,\n   * and invalidates associated refresh tokens.\n   *\n   * @param options - Revocation options\n   * @param options.clientId - The OAuth client identifier (UUID) to revoke access for\n   * @returns Empty response on successful revocation\n   *\n   * @category Auth\n   * @subcategory OAuth Server\n   */\n  revokeGrant(options: { clientId: string }): Promise<AuthOAuthRevokeGrantResponse>\n}\n\n// --- Passkey Types ---\n\n/** Response from POST /passkeys/registration/options */\nexport type PasskeyRegistrationOptionsResponse = {\n  challenge_id: string\n  options: ServerCredentialCreationOptions\n  expires_at: number\n}\n\n/** Request body for POST /passkeys/registration/verify */\nexport type PasskeyRegistrationVerifyParams = {\n  challenge_id: string\n  credential: RegistrationResponseJSON\n}\n\n/** Response from POST /passkeys/registration/verify */\nexport type PasskeyMetadata = {\n  id: string\n  friendly_name?: string\n  created_at: string\n}\n\n/** Response from POST /passkeys/authentication/options */\nexport type PasskeyAuthenticationOptionsResponse = {\n  challenge_id: string\n  options: ServerCredentialRequestOptions\n  expires_at: number\n}\n\n/** Request body for POST /passkeys/authentication/verify */\nexport type PasskeyAuthenticationVerifyParams = {\n  challenge_id: string\n  credential: AuthenticationResponseJSON\n}\n\n/** Item in the passkeys list (GET /passkeys/ and admin list) */\nexport type PasskeyListItem = {\n  id: string\n  friendly_name?: string\n  created_at: string\n  last_used_at?: string\n}\n\n// --- Passkey SDK Method Parameter/Response Types ---\n\nexport type SignInWithPasskeyCredentials = {\n  options?: {\n    captchaToken?: string\n    signal?: AbortSignal\n  }\n}\n\nexport type RegisterPasskeyCredentials = {\n  options?: {\n    signal?: AbortSignal\n  }\n}\n\nexport type VerifyPasskeyRegistrationParams = {\n  /** Challenge ID from startRegistration */\n  challengeId: string\n  /** Serialized credential from navigator.credentials.create() */\n  credential: ServerCredentialResponse\n}\n\nexport type StartPasskeyAuthenticationParams = {\n  options?: {\n    captchaToken?: string\n  }\n}\n\nexport type VerifyPasskeyAuthenticationParams = {\n  /** Challenge ID from startAuthentication */\n  challengeId: string\n  /** Serialized credential from navigator.credentials.get() */\n  credential: ServerCredentialResponse\n}\n\nexport type PasskeyUpdateParams = {\n  /** UUID of the passkey to update */\n  passkeyId: string\n  /** New friendly name (max 120 chars) */\n  friendlyName: string\n}\n\nexport type PasskeyDeleteParams = {\n  /** UUID of the passkey to delete */\n  passkeyId: string\n}\n\n// --- Passkey Response Types ---\n\nexport type AuthPasskeyRegistrationOptionsResponse =\n  RequestResult<PasskeyRegistrationOptionsResponse>\nexport type AuthPasskeyRegistrationVerifyResponse = RequestResult<\n  PasskeyMetadata,\n  WebAuthnError | AuthError\n>\nexport type AuthPasskeyAuthenticationOptionsResponse =\n  RequestResult<PasskeyAuthenticationOptionsResponse>\nexport type AuthPasskeyAuthenticationVerifyResponse = RequestResult<\n  { session: Session | null; user: User | null },\n  WebAuthnError | AuthError\n>\nexport type AuthPasskeyListResponse = RequestResult<PasskeyListItem[]>\nexport type AuthPasskeyUpdateResponse = RequestResult<PasskeyListItem>\nexport type AuthPasskeyDeleteResponse = RequestResult<null>\n\n// --- Passkey Admin Types ---\n\nexport type AuthPasskeyAdminListParams = {\n  userId: string\n}\n\nexport type AuthPasskeyAdminDeleteParams = {\n  userId: string\n  passkeyId: string\n}\n\n// --- Passkey Namespace Interfaces ---\n\n/**\n * Lower-level two-step API and management methods for passkeys.\n * Access via `supabase.auth.passkey`.\n */\nexport interface AuthPasskeyApi {\n  // Two-step registration\n  /**\n   * Starts the passkey registration ceremony. Fetches a registration challenge\n   * and credential creation options from the server. Used as the first step of\n   * a two-step registration flow when the caller wants to handle\n   * `navigator.credentials.create()` themselves.\n   *\n   * @category Auth\n   * @subcategory Auth Passkey\n   */\n  startRegistration(): Promise<AuthPasskeyRegistrationOptionsResponse>\n\n  /**\n   * Verifies a passkey registration credential against a previously issued\n   * challenge. Used as the second step of a two-step registration flow.\n   *\n   * @category Auth\n   * @subcategory Auth Passkey\n   */\n  verifyRegistration(\n    params: VerifyPasskeyRegistrationParams\n  ): Promise<AuthPasskeyRegistrationVerifyResponse>\n\n  // Two-step authentication\n  /**\n   * Starts the passkey authentication ceremony. Fetches an authentication\n   * challenge and credential request options from the server. Used as the\n   * first step of a two-step sign-in flow when the caller wants to handle\n   * `navigator.credentials.get()` themselves.\n   *\n   * @category Auth\n   * @subcategory Auth Passkey\n   */\n  startAuthentication(\n    params?: StartPasskeyAuthenticationParams\n  ): Promise<AuthPasskeyAuthenticationOptionsResponse>\n\n  /**\n   * Verifies a passkey authentication credential against a previously issued\n   * challenge. Used as the second step of a two-step sign-in flow.\n   *\n   * @category Auth\n   * @subcategory Auth Passkey\n   */\n  verifyAuthentication(\n    params: VerifyPasskeyAuthenticationParams\n  ): Promise<AuthPasskeyAuthenticationVerifyResponse>\n\n  // Management\n  /**\n   * Lists all passkeys registered for the currently signed-in user.\n   *\n   * @category Auth\n   * @subcategory Auth Passkey\n   */\n  list(): Promise<AuthPasskeyListResponse>\n\n  /**\n   * Updates a passkey's friendly name.\n   *\n   * @category Auth\n   * @subcategory Auth Passkey\n   */\n  update(params: PasskeyUpdateParams): Promise<AuthPasskeyUpdateResponse>\n\n  /**\n   * Deletes a passkey for the currently signed-in user.\n   *\n   * @category Auth\n   * @subcategory Auth Passkey\n   */\n  delete(params: PasskeyDeleteParams): Promise<AuthPasskeyDeleteResponse>\n}\n\nexport interface GoTrueAdminPasskeyApi {\n  /**\n   * Lists all passkeys registered for a specific user.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory Passkey Admin\n   */\n  listPasskeys(params: AuthPasskeyAdminListParams): Promise<AuthPasskeyListResponse>\n\n  /**\n   * Deletes a specific passkey for a specific user.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory Passkey Admin\n   */\n  deletePasskey(params: AuthPasskeyAdminDeleteParams): Promise<AuthPasskeyDeleteResponse>\n}\n", "import {\n  Fetch,\n  _generateLinkResponse,\n  _noResolveJsonResponse,\n  _request,\n  _userResponse,\n} from './lib/fetch'\nimport { assertPasskeyExperimentalEnabled, resolveFetch, validateUUID } from './lib/helpers'\nimport {\n  AdminUserAttributes,\n  GenerateLinkParams,\n  GenerateLinkResponse,\n  Pagination,\n  User,\n  UserResponse,\n  GoTrueAdminMFAApi,\n  AuthMFAAdminDeleteFactorParams,\n  AuthMFAAdminDeleteFactorResponse,\n  AuthMFAAdminListFactorsParams,\n  AuthMFAAdminListFactorsResponse,\n  PageParams,\n  SIGN_OUT_SCOPES,\n  SignOutScope,\n  GoTrueAdminOAuthApi,\n  CreateOAuthClientParams,\n  UpdateOAuthClientParams,\n  OAuthClientResponse,\n  OAuthClientListResponse,\n  GoTrueAdminCustomProvidersApi,\n  CreateCustomProviderParams,\n  UpdateCustomProviderParams,\n  ListCustomProvidersParams,\n  CustomProviderResponse,\n  CustomProviderListResponse,\n  GoTrueAdminPasskeyApi,\n  AuthPasskeyAdminListParams,\n  AuthPasskeyAdminDeleteParams,\n  AuthPasskeyListResponse,\n  AuthPasskeyDeleteResponse,\n  ExperimentalFeatureFlags,\n} from './lib/types'\nimport { AuthError, isAuthError } from './lib/errors'\n\nexport default class GoTrueAdminApi {\n  /** Contains all MFA administration methods. */\n  mfa: GoTrueAdminMFAApi\n\n  /**\n   * Contains all OAuth client administration methods.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   */\n  oauth: GoTrueAdminOAuthApi\n\n  /** Contains all custom OIDC/OAuth provider administration methods. */\n  customProviders: GoTrueAdminCustomProvidersApi\n\n  /**\n   * Contains all passkey administration methods.\n   *\n   * Requires `auth.experimental.passkey: true`; otherwise all methods throw.\n   */\n  passkey: GoTrueAdminPasskeyApi\n\n  protected url: string\n  protected headers: {\n    [key: string]: string\n  }\n\n  private _encodePathSegment(segment: string): string {\n    if (segment === '.' || segment === '..') {\n      throw new AuthError('Invalid path segment')\n    }\n\n    return encodeURIComponent(segment)\n  }\n  protected fetch: Fetch\n  protected experimental: ExperimentalFeatureFlags\n\n  /**\n   * Creates an admin API client that can be used to manage users and OAuth clients.\n   *\n   * @example Using supabase-js (recommended)\n   * ```ts\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * const supabase = createClient('https://xyzcompany.supabase.co', 'your-secret-key')\n   * const { data, error } = await supabase.auth.admin.listUsers()\n   * ```\n   *\n   * @example Standalone import for bundle-sensitive environments\n   * ```ts\n   * import { GoTrueAdminApi } from '@supabase/auth-js'\n   *\n   * const admin = new GoTrueAdminApi({\n   *   url: 'https://xyzcompany.supabase.co/auth/v1',\n   *   headers: { Authorization: `Bearer ${process.env.SUPABASE_SECRET_KEY}` },\n   * })\n   * ```\n   */\n  constructor({\n    url = '',\n    headers = {},\n    fetch,\n    experimental,\n  }: {\n    url: string\n    headers?: {\n      [key: string]: string\n    }\n    fetch?: Fetch\n    experimental?: ExperimentalFeatureFlags\n  }) {\n    this.url = url\n    this.headers = headers\n    this.fetch = resolveFetch(fetch)\n    this.experimental = experimental ?? {}\n    this.mfa = {\n      listFactors: this._listFactors.bind(this),\n      deleteFactor: this._deleteFactor.bind(this),\n    }\n    this.oauth = {\n      listClients: this._listOAuthClients.bind(this),\n      createClient: this._createOAuthClient.bind(this),\n      getClient: this._getOAuthClient.bind(this),\n      updateClient: this._updateOAuthClient.bind(this),\n      deleteClient: this._deleteOAuthClient.bind(this),\n      regenerateClientSecret: this._regenerateOAuthClientSecret.bind(this),\n    }\n    this.customProviders = {\n      listProviders: this._listCustomProviders.bind(this),\n      createProvider: this._createCustomProvider.bind(this),\n      getProvider: this._getCustomProvider.bind(this),\n      updateProvider: this._updateCustomProvider.bind(this),\n      deleteProvider: this._deleteCustomProvider.bind(this),\n    }\n    this.passkey = {\n      listPasskeys: this._adminListPasskeys.bind(this),\n      deletePasskey: this._adminDeletePasskey.bind(this),\n    }\n  }\n\n  /**\n   * Removes a logged-in session.\n   * @param jwt A valid, logged-in JWT.\n   * @param scope The logout sope.\n   *\n   * @category Auth\n   * @subcategory Auth Admin\n   */\n  async signOut(\n    jwt: string,\n    scope: SignOutScope = SIGN_OUT_SCOPES[0]\n  ): Promise<{ data: null; error: AuthError | null }> {\n    if (SIGN_OUT_SCOPES.indexOf(scope) < 0) {\n      throw new Error(\n        `@supabase/auth-js: Parameter scope must be one of ${SIGN_OUT_SCOPES.join(', ')}`\n      )\n    }\n\n    try {\n      await _request(this.fetch, 'POST', `${this.url}/logout?scope=${scope}`, {\n        headers: this.headers,\n        jwt,\n        noResolveJson: true,\n      })\n      return { data: null, error: null }\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Sends an invite link to an email address.\n   * @param email The email address of the user.\n   * @param options Additional options to be included when inviting.\n   *\n   * @category Auth\n   * @subcategory Auth Admin\n   *\n   * @remarks\n   * - Sends an invite link to the user's email address.\n   * - The `inviteUserByEmail()` method is typically used by administrators to invite users to join the application.\n   * - Note that PKCE is not supported when using `inviteUserByEmail`. This is because the browser initiating the invite is often different from the browser accepting the invite which makes it difficult to provide the security guarantees required of the PKCE flow.\n   *\n   * @example Invite a user\n   * ```js\n   * const { data, error } = await supabase.auth.admin.inviteUserByEmail('email@example.com')\n   * ```\n   *\n   * @exampleResponse Invite a user\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"user\": {\n   *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *       \"aud\": \"authenticated\",\n   *       \"role\": \"authenticated\",\n   *       \"email\": \"example@email.com\",\n   *       \"invited_at\": \"2024-01-01T00:00:00Z\",\n   *       \"phone\": \"\",\n   *       \"confirmation_sent_at\": \"2024-01-01T00:00:00Z\",\n   *       \"app_metadata\": {\n   *         \"provider\": \"email\",\n   *         \"providers\": [\n   *           \"email\"\n   *         ]\n   *       },\n   *       \"user_metadata\": {},\n   *       \"identities\": [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"identity_data\": {\n   *             \"email\": \"example@email.com\",\n   *             \"email_verified\": false,\n   *             \"phone_verified\": false,\n   *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *           },\n   *           \"provider\": \"email\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"example@email.com\"\n   *         }\n   *       ],\n   *       \"created_at\": \"2024-01-01T00:00:00Z\",\n   *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *       \"is_anonymous\": false\n   *     }\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   */\n  async inviteUserByEmail(\n    email: string,\n    options: {\n      /** A custom data object to store additional metadata about the user. This maps to the `auth.users.user_metadata` column. */\n      data?: object\n\n      /** The URL which will be appended to the email link sent to the user's email address. Once clicked the user will end up on this URL. */\n      redirectTo?: string\n    } = {}\n  ): Promise<UserResponse> {\n    try {\n      return await _request(this.fetch, 'POST', `${this.url}/invite`, {\n        body: { email, data: options.data },\n        headers: this.headers,\n        redirectTo: options.redirectTo,\n        xform: _userResponse,\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: { user: null }, error }\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Generates email links and OTPs to be sent via a custom email provider.\n   * @param email The user's email.\n   * @param options.password User password. For signup only.\n   * @param options.data Optional user metadata. For signup only.\n   * @param options.redirectTo The redirect url which should be appended to the generated link\n   *\n   * @category Auth\n   * @subcategory Auth Admin\n   *\n   * @remarks\n   * - The following types can be passed into `generateLink()`: `signup`, `magiclink`, `invite`, `recovery`, `email_change_current`, `email_change_new`, `phone_change`.\n   * - `generateLink()` only generates the email link for `email_change_email` if the **Secure email change** is enabled in your project's [email auth provider settings](/dashboard/project/_/auth/providers).\n   * - `generateLink()` handles the creation of the user for `signup`, `invite` and `magiclink`.\n   *\n   * @example Generate a signup link\n   * ```js\n   * const { data, error } = await supabase.auth.admin.generateLink({\n   *   type: 'signup',\n   *   email: 'email@example.com',\n   *   password: 'secret'\n   * })\n   * ```\n   *\n   * @exampleResponse Generate a signup link\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"properties\": {\n   *       \"action_link\": \"<LINK_TO_SEND_TO_USER>\",\n   *       \"email_otp\": \"999999\",\n   *       \"hashed_token\": \"<HASHED_TOKEN\",\n   *       \"redirect_to\": \"<REDIRECT_URL>\",\n   *       \"verification_type\": \"signup\"\n   *     },\n   *     \"user\": {\n   *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *       \"aud\": \"authenticated\",\n   *       \"role\": \"authenticated\",\n   *       \"email\": \"email@example.com\",\n   *       \"phone\": \"\",\n   *       \"confirmation_sent_at\": \"2024-01-01T00:00:00Z\",\n   *       \"app_metadata\": {\n   *         \"provider\": \"email\",\n   *         \"providers\": [\n   *           \"email\"\n   *         ]\n   *       },\n   *       \"user_metadata\": {},\n   *       \"identities\": [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"identity_data\": {\n   *             \"email\": \"email@example.com\",\n   *             \"email_verified\": false,\n   *             \"phone_verified\": false,\n   *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *           },\n   *           \"provider\": \"email\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"email@example.com\"\n   *         }\n   *       ],\n   *       \"created_at\": \"2024-01-01T00:00:00Z\",\n   *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *       \"is_anonymous\": false\n   *     }\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @example Generate an invite link\n   * ```js\n   * const { data, error } = await supabase.auth.admin.generateLink({\n   *   type: 'invite',\n   *   email: 'email@example.com'\n   * })\n   * ```\n   *\n   * @example Generate a magic link\n   * ```js\n   * const { data, error } = await supabase.auth.admin.generateLink({\n   *   type: 'magiclink',\n   *   email: 'email@example.com'\n   * })\n   * ```\n   *\n   * @example Generate a recovery link\n   * ```js\n   * const { data, error } = await supabase.auth.admin.generateLink({\n   *   type: 'recovery',\n   *   email: 'email@example.com'\n   * })\n   * ```\n   *\n   * @example Generate links to change current email address\n   * ```js\n   * // generate an email change link to be sent to the current email address\n   * const { data, error } = await supabase.auth.admin.generateLink({\n   *   type: 'email_change_current',\n   *   email: 'current.email@example.com',\n   *   newEmail: 'new.email@example.com'\n   * })\n   *\n   * // generate an email change link to be sent to the new email address\n   * const { data, error } = await supabase.auth.admin.generateLink({\n   *   type: 'email_change_new',\n   *   email: 'current.email@example.com',\n   *   newEmail: 'new.email@example.com'\n   * })\n   * ```\n   */\n  async generateLink(params: GenerateLinkParams): Promise<GenerateLinkResponse> {\n    try {\n      const { options, ...rest } = params\n      const body: any = { ...rest, ...options }\n      if ('newEmail' in rest) {\n        // replace newEmail with new_email in request body\n        body.new_email = rest?.newEmail\n        delete body['newEmail']\n      }\n      return await _request(this.fetch, 'POST', `${this.url}/admin/generate_link`, {\n        body: body,\n        headers: this.headers,\n        xform: _generateLinkResponse,\n        redirectTo: options?.redirectTo,\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return {\n          data: {\n            properties: null,\n            user: null,\n          },\n          error,\n        }\n      }\n      throw error\n    }\n  }\n\n  // User Admin API\n  /**\n   * Creates a new user.\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory Auth Admin\n   *\n   * @remarks\n   * - To confirm the user's email address or phone number, set `email_confirm` or `phone_confirm` to true. Both arguments default to false.\n   * - `createUser()` will not send a confirmation email to the user. You can use [`inviteUserByEmail()`](/docs/reference/javascript/auth-admin-inviteuserbyemail) if you want to send them an email invite instead.\n   * - If you are sure that the created user's email or phone number is legitimate and verified, you can set the `email_confirm` or `phone_confirm` param to `true`.\n   *\n   * @example With custom user metadata\n   * ```js\n   * const { data, error } = await supabase.auth.admin.createUser({\n   *   email: 'user@email.com',\n   *   password: 'password',\n   *   user_metadata: { name: 'Yoda' }\n   * })\n   * ```\n   *\n   * @exampleResponse With custom user metadata\n   * ```json\n   * {\n   *   data: {\n   *     user: {\n   *       id: '1',\n   *       aud: 'authenticated',\n   *       role: 'authenticated',\n   *       email: 'example@email.com',\n   *       email_confirmed_at: '2024-01-01T00:00:00Z',\n   *       phone: '',\n   *       confirmation_sent_at: '2024-01-01T00:00:00Z',\n   *       confirmed_at: '2024-01-01T00:00:00Z',\n   *       last_sign_in_at: '2024-01-01T00:00:00Z',\n   *       app_metadata: {},\n   *       user_metadata: {},\n   *       identities: [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"id\": \"1\",\n   *           \"user_id\": \"1\",\n   *           \"identity_data\": {\n   *             \"email\": \"example@email.com\",\n   *             \"email_verified\": true,\n   *             \"phone_verified\": false,\n   *             \"sub\": \"1\"\n   *           },\n   *           \"provider\": \"email\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"email@example.com\"\n   *         },\n   *       ],\n   *       created_at: '2024-01-01T00:00:00Z',\n   *       updated_at: '2024-01-01T00:00:00Z',\n   *       is_anonymous: false,\n   *     }\n   *   }\n   *   error: null\n   * }\n   * ```\n   *\n   * @example Auto-confirm the user's email\n   * ```js\n   * const { data, error } = await supabase.auth.admin.createUser({\n   *   email: 'user@email.com',\n   *   email_confirm: true\n   * })\n   * ```\n   *\n   * @example Auto-confirm the user's phone number\n   * ```js\n   * const { data, error } = await supabase.auth.admin.createUser({\n   *   phone: '1234567890',\n   *   phone_confirm: true\n   * })\n   * ```\n   */\n  async createUser(attributes: AdminUserAttributes): Promise<UserResponse> {\n    try {\n      return await _request(this.fetch, 'POST', `${this.url}/admin/users`, {\n        body: attributes,\n        headers: this.headers,\n        xform: _userResponse,\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: { user: null }, error }\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Get a list of users.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   * @param params An object which supports `page` and `perPage` as numbers, to alter the paginated results.\n   *\n   * @category Auth\n   * @subcategory Auth Admin\n   *\n   * @remarks\n   * - Defaults to return 50 users per page.\n   *\n   * @example Get a page of users\n   * ```js\n   * const { data: { users }, error } = await supabase.auth.admin.listUsers()\n   * ```\n   *\n   * @example Paginated list of users\n   * ```js\n   * const { data: { users }, error } = await supabase.auth.admin.listUsers({\n   *   page: 1,\n   *   perPage: 1000\n   * })\n   * ```\n   */\n  async listUsers(\n    params?: PageParams\n  ): Promise<\n    | { data: { users: User[]; aud: string } & Pagination; error: null }\n    | { data: { users: [] }; error: AuthError }\n  > {\n    try {\n      const pagination: Pagination = { nextPage: null, lastPage: 0, total: 0 }\n      const response = await _request(this.fetch, 'GET', `${this.url}/admin/users`, {\n        headers: this.headers,\n        noResolveJson: true,\n        query: {\n          page: params?.page?.toString() ?? '',\n          per_page: params?.perPage?.toString() ?? '',\n        },\n        xform: _noResolveJsonResponse,\n      })\n      if (response.error) throw response.error\n\n      const users = await response.json()\n      const total = response.headers.get('x-total-count') ?? 0\n      const links = response.headers.get('link')?.split(',') ?? []\n      if (links.length > 0) {\n        links.forEach((link: string) => {\n          const page = parseInt(link.split(';')[0].split('=')[1].substring(0, 1))\n          const rel = JSON.parse(link.split(';')[1].split('=')[1])\n          pagination[`${rel}Page`] = page\n        })\n\n        pagination.total = parseInt(total)\n      }\n      return { data: { ...users, ...pagination }, error: null }\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: { users: [] }, error }\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Get user by id.\n   *\n   * @param uid The user's unique identifier\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory Auth Admin\n   *\n   * @remarks\n   * - Fetches the user object from the database based on the user's id.\n   * - The `getUserById()` method requires the user's id which maps to the `auth.users.id` column.\n   *\n   * @example Fetch the user object using the access_token jwt\n   * ```js\n   * const { data, error } = await supabase.auth.admin.getUserById(1)\n   * ```\n   *\n   * @exampleResponse Fetch the user object using the access_token jwt\n   * ```json\n   * {\n   *   data: {\n   *     user: {\n   *       id: '1',\n   *       aud: 'authenticated',\n   *       role: 'authenticated',\n   *       email: 'example@email.com',\n   *       email_confirmed_at: '2024-01-01T00:00:00Z',\n   *       phone: '',\n   *       confirmation_sent_at: '2024-01-01T00:00:00Z',\n   *       confirmed_at: '2024-01-01T00:00:00Z',\n   *       last_sign_in_at: '2024-01-01T00:00:00Z',\n   *       app_metadata: {},\n   *       user_metadata: {},\n   *       identities: [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"id\": \"1\",\n   *           \"user_id\": \"1\",\n   *           \"identity_data\": {\n   *             \"email\": \"example@email.com\",\n   *             \"email_verified\": true,\n   *             \"phone_verified\": false,\n   *             \"sub\": \"1\"\n   *           },\n   *           \"provider\": \"email\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"email@example.com\"\n   *         },\n   *       ],\n   *       created_at: '2024-01-01T00:00:00Z',\n   *       updated_at: '2024-01-01T00:00:00Z',\n   *       is_anonymous: false,\n   *     }\n   *   }\n   *   error: null\n   * }\n   * ```\n   */\n  async getUserById(uid: string): Promise<UserResponse> {\n    validateUUID(uid)\n\n    try {\n      return await _request(this.fetch, 'GET', `${this.url}/admin/users/${uid}`, {\n        headers: this.headers,\n        xform: _userResponse,\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: { user: null }, error }\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Updates the user data. Changes are applied directly without confirmation flows.\n   *\n   * @param uid The user's unique identifier\n   * @param attributes The data you want to update.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @remarks\n   * **Important:** This is a server-side operation and does **not** trigger client-side\n   * `onAuthStateChange` listeners. The admin API has no connection to client state.\n   *\n   * To sync changes to the client after calling this method:\n   * 1. On the client, call `supabase.auth.refreshSession()` to fetch the updated user data\n   * 2. This will trigger the `TOKEN_REFRESHED` event and notify all listeners\n   *\n   * @example\n   * ```typescript\n   * // Server-side (Edge Function)\n   * const { data, error } = await supabase.auth.admin.updateUserById(\n   *   userId,\n   *   { user_metadata: { preferences: { theme: 'dark' } } }\n   * )\n   *\n   * // Client-side (to sync the changes)\n   * const { data, error } = await supabase.auth.refreshSession()\n   * // onAuthStateChange listeners will now be notified with updated user\n   * ```\n   *\n   * @see {@link GoTrueClient.refreshSession} for syncing admin changes to the client\n   * @see {@link GoTrueClient.updateUser} for client-side user updates (triggers listeners automatically)\n   *\n   * @category Auth\n   * @subcategory Auth Admin\n   *\n   * @example Updates a user's email\n   * ```js\n   * const { data: user, error } = await supabase.auth.admin.updateUserById(\n   *   '11111111-1111-1111-1111-111111111111',\n   *   { email: 'new@email.com' }\n   * )\n   * ```\n   *\n   * @exampleResponse Updates a user's email\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"user\": {\n   *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *       \"aud\": \"authenticated\",\n   *       \"role\": \"authenticated\",\n   *       \"email\": \"new@email.com\",\n   *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *       \"phone\": \"\",\n   *       \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *       \"recovery_sent_at\": \"2024-01-01T00:00:00Z\",\n   *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *       \"app_metadata\": {\n   *         \"provider\": \"email\",\n   *         \"providers\": [\n   *           \"email\"\n   *         ]\n   *       },\n   *       \"user_metadata\": {\n   *         \"email\": \"example@email.com\",\n   *         \"email_verified\": false,\n   *         \"phone_verified\": false,\n   *         \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *       },\n   *       \"identities\": [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"identity_data\": {\n   *             \"email\": \"example@email.com\",\n   *             \"email_verified\": false,\n   *             \"phone_verified\": false,\n   *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *           },\n   *           \"provider\": \"email\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"example@email.com\"\n   *         }\n   *       ],\n   *       \"created_at\": \"2024-01-01T00:00:00Z\",\n   *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *       \"is_anonymous\": false\n   *     }\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @example Updates a user's password\n   * ```js\n   * const { data: user, error } = await supabase.auth.admin.updateUserById(\n   *   '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n   *   { password: 'new_password' }\n   * )\n   * ```\n   *\n   * @example Updates a user's metadata\n   * ```js\n   * const { data: user, error } = await supabase.auth.admin.updateUserById(\n   *   '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n   *   { user_metadata: { hello: 'world' } }\n   * )\n   * ```\n   *\n   * @example Updates a user's app_metadata\n   * ```js\n   * const { data: user, error } = await supabase.auth.admin.updateUserById(\n   *   '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n   *   { app_metadata: { plan: 'trial' } }\n   * )\n   * ```\n   *\n   * @example Confirms a user's email address\n   * ```js\n   * const { data: user, error } = await supabase.auth.admin.updateUserById(\n   *   '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n   *   { email_confirm: true }\n   * )\n   * ```\n   *\n   * @example Confirms a user's phone number\n   * ```js\n   * const { data: user, error } = await supabase.auth.admin.updateUserById(\n   *   '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n   *   { phone_confirm: true }\n   * )\n   * ```\n   *\n   * @example Ban a user for 100 years\n   * ```js\n   * const { data: user, error } = await supabase.auth.admin.updateUserById(\n   *   '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n   *   { ban_duration: '876000h' }\n   * )\n   * ```\n   */\n  async updateUserById(uid: string, attributes: AdminUserAttributes): Promise<UserResponse> {\n    validateUUID(uid)\n\n    try {\n      return await _request(this.fetch, 'PUT', `${this.url}/admin/users/${uid}`, {\n        body: attributes,\n        headers: this.headers,\n        xform: _userResponse,\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: { user: null }, error }\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Delete a user. Requires a `service_role` key.\n   *\n   * @param id The user id you want to remove.\n   * @param shouldSoftDelete If true, then the user will be soft-deleted from the auth schema. Soft deletion allows user identification from the hashed user ID but is not reversible.\n   * Defaults to false for backward compatibility.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   *\n   * @category Auth\n   * @subcategory Auth Admin\n   *\n   * @remarks\n   * - The `deleteUser()` method requires the user's ID, which maps to the `auth.users.id` column.\n   *\n   * @example Removes a user\n   * ```js\n   * const { data, error } = await supabase.auth.admin.deleteUser(\n   *   '715ed5db-f090-4b8c-a067-640ecee36aa0'\n   * )\n   * ```\n   *\n   * @exampleResponse Removes a user\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"user\": {}\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   */\n  async deleteUser(id: string, shouldSoftDelete = false): Promise<UserResponse> {\n    validateUUID(id)\n\n    try {\n      return await _request(this.fetch, 'DELETE', `${this.url}/admin/users/${id}`, {\n        headers: this.headers,\n        body: {\n          should_soft_delete: shouldSoftDelete,\n        },\n        xform: _userResponse,\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: { user: null }, error }\n      }\n\n      throw error\n    }\n  }\n\n  private async _listFactors(\n    params: AuthMFAAdminListFactorsParams\n  ): Promise<AuthMFAAdminListFactorsResponse> {\n    validateUUID(params.userId)\n\n    try {\n      const { data, error } = await _request(\n        this.fetch,\n        'GET',\n        `${this.url}/admin/users/${params.userId}/factors`,\n        {\n          headers: this.headers,\n          xform: (factors: any) => {\n            return { data: { factors }, error: null }\n          },\n        }\n      )\n      return { data, error }\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n\n      throw error\n    }\n  }\n\n  private async _deleteFactor(\n    params: AuthMFAAdminDeleteFactorParams\n  ): Promise<AuthMFAAdminDeleteFactorResponse> {\n    validateUUID(params.userId)\n    validateUUID(params.id)\n\n    try {\n      const data = await _request(\n        this.fetch,\n        'DELETE',\n        `${this.url}/admin/users/${params.userId}/factors/${params.id}`,\n        {\n          headers: this.headers,\n        }\n      )\n\n      return { data, error: null }\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Lists all OAuth clients with optional pagination.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   */\n  private async _listOAuthClients(params?: PageParams): Promise<OAuthClientListResponse> {\n    try {\n      const pagination: Pagination = { nextPage: null, lastPage: 0, total: 0 }\n      const response = await _request(this.fetch, 'GET', `${this.url}/admin/oauth/clients`, {\n        headers: this.headers,\n        noResolveJson: true,\n        query: {\n          page: params?.page?.toString() ?? '',\n          per_page: params?.perPage?.toString() ?? '',\n        },\n        xform: _noResolveJsonResponse,\n      })\n      if (response.error) throw response.error\n\n      const clients = await response.json()\n      const total = response.headers.get('x-total-count') ?? 0\n      const links = response.headers.get('link')?.split(',') ?? []\n      if (links.length > 0) {\n        links.forEach((link: string) => {\n          const page = parseInt(link.split(';')[0].split('=')[1].substring(0, 1))\n          const rel = JSON.parse(link.split(';')[1].split('=')[1])\n          pagination[`${rel}Page`] = page\n        })\n\n        pagination.total = parseInt(total)\n      }\n      return { data: { ...clients, ...pagination }, error: null }\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: { clients: [] }, error }\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Creates a new OAuth client.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   */\n  private async _createOAuthClient(params: CreateOAuthClientParams): Promise<OAuthClientResponse> {\n    try {\n      return await _request(this.fetch, 'POST', `${this.url}/admin/oauth/clients`, {\n        body: params,\n        headers: this.headers,\n        xform: (client: any) => {\n          return { data: client, error: null }\n        },\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Gets details of a specific OAuth client.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   */\n  private async _getOAuthClient(clientId: string): Promise<OAuthClientResponse> {\n    try {\n      const encodedClientId = this._encodePathSegment(clientId)\n      return await _request(\n        this.fetch,\n        'GET',\n        `${this.url}/admin/oauth/clients/${encodedClientId}`,\n        {\n          headers: this.headers,\n          xform: (client: any) => {\n            return { data: client, error: null }\n          },\n        }\n      )\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Updates an existing OAuth client.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   */\n  private async _updateOAuthClient(\n    clientId: string,\n    params: UpdateOAuthClientParams\n  ): Promise<OAuthClientResponse> {\n    try {\n      const encodedClientId = this._encodePathSegment(clientId)\n      return await _request(\n        this.fetch,\n        'PUT',\n        `${this.url}/admin/oauth/clients/${encodedClientId}`,\n        {\n          body: params,\n          headers: this.headers,\n          xform: (client: any) => {\n            return { data: client, error: null }\n          },\n        }\n      )\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Deletes an OAuth client.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   */\n  private async _deleteOAuthClient(\n    clientId: string\n  ): Promise<{ data: null; error: AuthError | null }> {\n    try {\n      const encodedClientId = this._encodePathSegment(clientId)\n      await _request(this.fetch, 'DELETE', `${this.url}/admin/oauth/clients/${encodedClientId}`, {\n        headers: this.headers,\n        noResolveJson: true,\n      })\n      return { data: null, error: null }\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Regenerates the secret for an OAuth client.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   */\n  private async _regenerateOAuthClientSecret(clientId: string): Promise<OAuthClientResponse> {\n    try {\n      const encodedClientId = this._encodePathSegment(clientId)\n      return await _request(\n        this.fetch,\n        'POST',\n        `${this.url}/admin/oauth/clients/${encodedClientId}/regenerate_secret`,\n        {\n          headers: this.headers,\n          xform: (client: any) => {\n            return { data: client, error: null }\n          },\n        }\n      )\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Lists all custom providers with optional type filter.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   */\n  private async _listCustomProviders(\n    params?: ListCustomProvidersParams\n  ): Promise<CustomProviderListResponse> {\n    try {\n      const query: Record<string, string> = {}\n      if (params?.type) {\n        query.type = params.type\n      }\n      return await _request(this.fetch, 'GET', `${this.url}/admin/custom-providers`, {\n        headers: this.headers,\n        query,\n        xform: (data: any) => {\n          return { data: { providers: data?.providers ?? [] }, error: null }\n        },\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: { providers: [] }, error }\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Creates a new custom OIDC/OAuth provider.\n   *\n   * For OIDC providers, the server fetches and validates the OpenID Connect discovery document\n   * from the issuer's well-known endpoint (or the provided `discovery_url`) at creation time.\n   * This may return a validation error (`error_code: \"validation_failed\"`) if the discovery\n   * document is unreachable, not valid JSON, missing required fields, or if the issuer\n   * in the document does not match the expected issuer.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   */\n  private async _createCustomProvider(\n    params: CreateCustomProviderParams\n  ): Promise<CustomProviderResponse> {\n    try {\n      return await _request(this.fetch, 'POST', `${this.url}/admin/custom-providers`, {\n        body: params,\n        headers: this.headers,\n        xform: (provider: any) => {\n          return { data: provider, error: null }\n        },\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Gets details of a specific custom provider by identifier.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   */\n  private async _getCustomProvider(identifier: string): Promise<CustomProviderResponse> {\n    try {\n      const encodedIdentifier = this._encodePathSegment(identifier)\n      return await _request(\n        this.fetch,\n        'GET',\n        `${this.url}/admin/custom-providers/${encodedIdentifier}`,\n        {\n          headers: this.headers,\n          xform: (provider: any) => {\n            return { data: provider, error: null }\n          },\n        }\n      )\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Updates an existing custom provider.\n   *\n   * When `issuer` or `discovery_url` is changed on an OIDC provider, the server re-fetches and\n   * validates the discovery document before persisting. This may return a validation error\n   * (`error_code: \"validation_failed\"`) if the discovery document is unreachable, invalid, or\n   * the issuer does not match.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   */\n  private async _updateCustomProvider(\n    identifier: string,\n    params: UpdateCustomProviderParams\n  ): Promise<CustomProviderResponse> {\n    try {\n      const encodedIdentifier = this._encodePathSegment(identifier)\n      return await _request(\n        this.fetch,\n        'PUT',\n        `${this.url}/admin/custom-providers/${encodedIdentifier}`,\n        {\n          body: params,\n          headers: this.headers,\n          xform: (provider: any) => {\n            return { data: provider, error: null }\n          },\n        }\n      )\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Deletes a custom provider.\n   *\n   * This function should only be called on a server. Never expose your `service_role` key in the browser.\n   */\n  private async _deleteCustomProvider(\n    identifier: string\n  ): Promise<{ data: null; error: AuthError | null }> {\n    try {\n      const encodedIdentifier = this._encodePathSegment(identifier)\n      await _request(\n        this.fetch,\n        'DELETE',\n        `${this.url}/admin/custom-providers/${encodedIdentifier}`,\n        {\n          headers: this.headers,\n          noResolveJson: true,\n        }\n      )\n      return { data: null, error: null }\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Lists all passkeys for a user.\n   *\n   * This function should only be called on a server. Never expose your secret key in the browser.\n   *\n   * Requires `auth.experimental.passkey: true`.\n   */\n  private async _adminListPasskeys(\n    params: AuthPasskeyAdminListParams\n  ): Promise<AuthPasskeyListResponse> {\n    assertPasskeyExperimentalEnabled(this.experimental)\n    validateUUID(params.userId)\n\n    try {\n      return await _request(\n        this.fetch,\n        'GET',\n        `${this.url}/admin/users/${params.userId}/passkeys`,\n        { headers: this.headers, xform: (data: any) => ({ data, error: null }) }\n      )\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Deletes a user's passkey.\n   *\n   * This function should only be called on a server. Never expose your secret key in the browser.\n   *\n   * Requires `auth.experimental.passkey: true`.\n   */\n  private async _adminDeletePasskey(\n    params: AuthPasskeyAdminDeleteParams\n  ): Promise<AuthPasskeyDeleteResponse> {\n    assertPasskeyExperimentalEnabled(this.experimental)\n    validateUUID(params.userId)\n    validateUUID(params.passkeyId)\n\n    try {\n      await _request(\n        this.fetch,\n        'DELETE',\n        `${this.url}/admin/users/${params.userId}/passkeys/${params.passkeyId}`,\n        { headers: this.headers, noResolveJson: true }\n      )\n      return { data: null, error: null }\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n      throw error\n    }\n  }\n}\n", "import { SupportedStorage } from './types'\n\n/**\n * Returns a localStorage-like object that stores the key-value pairs in\n * memory.\n */\nexport function memoryLocalStorageAdapter(store: { [key: string]: string } = {}): SupportedStorage {\n  return {\n    getItem: (key) => {\n      return store[key] || null\n    },\n\n    setItem: (key, value) => {\n      store[key] = value\n    },\n\n    removeItem: (key) => {\n      delete store[key]\n    },\n  }\n}\n", "import { supportsLocalStorage } from './helpers'\n\n/**\n * @experimental\n */\nexport const internals = {\n  /**\n   * @experimental\n   */\n  debug: !!(\n    globalThis &&\n    supportsLocalStorage() &&\n    globalThis.localStorage &&\n    globalThis.localStorage.getItem('supabase.gotrue-js.locks.debug') === 'true'\n  ),\n}\n\n/**\n * An error thrown when a lock cannot be acquired after some amount of time.\n *\n * Use the {@link #isAcquireTimeout} property instead of checking with `instanceof`.\n *\n * @example\n * ```ts\n * import { LockAcquireTimeoutError } from '@supabase/auth-js'\n *\n * class CustomLockError extends LockAcquireTimeoutError {\n *   constructor() {\n *     super('Lock timed out')\n *   }\n * }\n * ```\n */\nexport abstract class LockAcquireTimeoutError extends Error {\n  public readonly isAcquireTimeout = true\n\n  constructor(message: string) {\n    super(message)\n  }\n}\n\n/**\n * Error thrown when the browser Navigator Lock API fails to acquire a lock.\n *\n * @example\n * ```ts\n * import { NavigatorLockAcquireTimeoutError } from '@supabase/auth-js'\n *\n * throw new NavigatorLockAcquireTimeoutError('Lock timed out')\n * ```\n */\nexport class NavigatorLockAcquireTimeoutError extends LockAcquireTimeoutError {}\n/**\n * Error thrown when the process-level lock helper cannot acquire a lock.\n *\n * @example\n * ```ts\n * import { ProcessLockAcquireTimeoutError } from '@supabase/auth-js'\n *\n * throw new ProcessLockAcquireTimeoutError('Lock timed out')\n * ```\n */\nexport class ProcessLockAcquireTimeoutError extends LockAcquireTimeoutError {}\n\n/**\n * Implements a global exclusive lock using the Navigator LockManager API. It\n * is available on all browsers released after 2022-03-15 with Safari being the\n * last one to release support. If the API is not available, this function will\n * throw. Make sure you check availablility before configuring {@link\n * GoTrueClient}.\n *\n * You can turn on debugging by setting the `supabase.gotrue-js.locks.debug`\n * local storage item to `true`.\n *\n * Internals:\n *\n * Since the LockManager API does not preserve stack traces for the async\n * function passed in the `request` method, a trick is used where acquiring the\n * lock releases a previously started promise to run the operation in the `fn`\n * function. The lock waits for that promise to finish (with or without error),\n * while the function will finally wait for the result anyway.\n *\n * @param name Name of the lock to be acquired.\n * @param acquireTimeout If negative, no timeout. If 0 an error is thrown if\n *                       the lock can't be acquired without waiting. If positive, the lock acquire\n *                       will time out after so many milliseconds. An error is\n *                       a timeout if it has `isAcquireTimeout` set to true.\n * @param fn The operation to run once the lock is acquired.\n * @example\n * ```ts\n * await navigatorLock('sync-user', 1000, async () => {\n *   await refreshSession()\n * })\n * ```\n */\nexport async function navigatorLock<R>(\n  name: string,\n  acquireTimeout: number,\n  fn: () => Promise<R>\n): Promise<R> {\n  if (internals.debug) {\n    console.log('@supabase/gotrue-js: navigatorLock: acquire lock', name, acquireTimeout)\n  }\n\n  const abortController = new globalThis.AbortController()\n\n  let acquireTimeoutTimer: ReturnType<typeof setTimeout> | undefined\n\n  if (acquireTimeout > 0) {\n    acquireTimeoutTimer = setTimeout(() => {\n      abortController.abort()\n      if (internals.debug) {\n        console.log('@supabase/gotrue-js: navigatorLock acquire timed out', name)\n      }\n    }, acquireTimeout)\n  }\n\n  // MDN article: https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request\n\n  // Wrapping navigator.locks.request() with a plain Promise is done as some\n  // libraries like zone.js patch the Promise object to track the execution\n  // context. However, it appears that most browsers use an internal promise\n  // implementation when using the navigator.locks.request() API causing them\n  // to lose context and emit confusing log messages or break certain features.\n  // This wrapping is believed to help zone.js track the execution context\n  // better.\n  await Promise.resolve()\n\n  try {\n    return await globalThis.navigator.locks.request(\n      name,\n      acquireTimeout === 0\n        ? {\n            mode: 'exclusive',\n            ifAvailable: true,\n          }\n        : {\n            mode: 'exclusive',\n            signal: abortController.signal,\n          },\n      async (lock) => {\n        if (lock) {\n          // Lock acquired \u2014 cancel the acquire-timeout timer so it cannot fire\n          // while fn() is running. Without this, a delayed timeout abort would\n          // set signal.aborted = true even though we already hold the lock,\n          // causing a subsequent steal to be misclassified as \"our timeout\n          // fired\" and triggering a spurious steal-back cascade.\n          clearTimeout(acquireTimeoutTimer)\n\n          if (internals.debug) {\n            console.log('@supabase/gotrue-js: navigatorLock: acquired', name, lock.name)\n          }\n\n          try {\n            return await fn()\n          } finally {\n            if (internals.debug) {\n              console.log('@supabase/gotrue-js: navigatorLock: released', name, lock.name)\n            }\n          }\n        } else {\n          if (acquireTimeout === 0) {\n            if (internals.debug) {\n              console.log('@supabase/gotrue-js: navigatorLock: not immediately available', name)\n            }\n\n            throw new NavigatorLockAcquireTimeoutError(\n              `Acquiring an exclusive Navigator LockManager lock \"${name}\" immediately failed`\n            )\n          } else {\n            if (internals.debug) {\n              try {\n                const result = await globalThis.navigator.locks.query()\n\n                console.log(\n                  '@supabase/gotrue-js: Navigator LockManager state',\n                  JSON.stringify(result, null, '  ')\n                )\n              } catch (e) {\n                console.warn(\n                  '@supabase/gotrue-js: Error when querying Navigator LockManager state',\n                  e\n                )\n              }\n            }\n\n            // Browser is not following the Navigator LockManager spec, it\n            // returned a null lock when we didn't use ifAvailable. So we can\n            // pretend the lock is acquired in the name of backward compatibility\n            // and user experience and just run the function.\n            console.warn(\n              '@supabase/gotrue-js: Navigator LockManager returned a null lock when using #request without ifAvailable set to true, it appears this browser is not following the LockManager spec https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request'\n            )\n\n            clearTimeout(acquireTimeoutTimer)\n            return await fn()\n          }\n        }\n      }\n    )\n  } catch (e) {\n    // Always clear the acquire timeout once the request settles, so it cannot\n    // fire later and incorrectly abort/log after a rejection.\n    if (acquireTimeout > 0) {\n      clearTimeout(acquireTimeoutTimer)\n    }\n\n    // DOMException does not extend Error in Node.js, so use structural check\n    if (\n      e !== null &&\n      typeof e === 'object' &&\n      'name' in e &&\n      e.name === 'AbortError' &&\n      acquireTimeout > 0\n    ) {\n      if (abortController.signal.aborted) {\n        // OUR timeout fired \u2014 the lock is genuinely orphaned. Steal it.\n        //\n        // The lock acquisition was aborted because the timeout fired while the\n        // request was still pending. This typically means another lock holder is\n        // not releasing the lock, possibly due to React Strict Mode's\n        // double-mount/unmount behavior or a component unmounting mid-operation,\n        // leaving an orphaned lock.\n        //\n        // Recovery: use { steal: true } to forcefully acquire the lock. Per the\n        // Web Locks API spec, this releases any currently held lock with the same\n        // name and grants the request immediately, preempting any queued requests.\n        // The previous holder's callback continues running to completion but no\n        // longer holds the lock for exclusion purposes.\n        //\n        // See: https://github.com/supabase/supabase/issues/42505\n        if (internals.debug) {\n          console.log(\n            '@supabase/gotrue-js: navigatorLock: acquire timeout, recovering by stealing lock',\n            name\n          )\n        }\n\n        console.warn(\n          `@supabase/gotrue-js: Lock \"${name}\" was not released within ${acquireTimeout}ms. ` +\n            'This may indicate an orphaned lock from a component unmount (e.g., React Strict Mode). ' +\n            'Forcefully acquiring the lock to recover.'\n        )\n\n        return await Promise.resolve().then(() =>\n          globalThis.navigator.locks.request(\n            name,\n            {\n              mode: 'exclusive',\n              steal: true,\n            },\n            async (lock) => {\n              if (lock) {\n                if (internals.debug) {\n                  console.log(\n                    '@supabase/gotrue-js: navigatorLock: recovered (stolen)',\n                    name,\n                    lock.name\n                  )\n                }\n\n                try {\n                  return await fn()\n                } finally {\n                  if (internals.debug) {\n                    console.log(\n                      '@supabase/gotrue-js: navigatorLock: released (stolen)',\n                      name,\n                      lock.name\n                    )\n                  }\n                }\n              } else {\n                // This should not happen with steal: true, but handle gracefully.\n                console.warn(\n                  '@supabase/gotrue-js: Navigator LockManager returned null lock even with steal: true'\n                )\n                return await fn()\n              }\n            }\n          )\n        )\n      } else {\n        // We HELD the lock but another request stole it from us.\n        // Per the Web Locks spec, our fn() callback is still running as an\n        // orphaned background task \u2014 do NOT steal back. Stealing back would\n        // cause a cascade (A steals B, B steals A, ...) and run fn() a second\n        // time concurrently, corrupting auth state.\n        // Convert to a typed error so callers (e.g. _autoRefreshTokenTick)\n        // can handle/filter it without it leaking to Sentry as a raw AbortError.\n        if (internals.debug) {\n          console.log(\n            '@supabase/gotrue-js: navigatorLock: lock was stolen by another request',\n            name\n          )\n        }\n\n        throw new NavigatorLockAcquireTimeoutError(\n          `Lock \"${name}\" was released because another request stole it`\n        )\n      }\n    }\n\n    throw e\n  }\n}\n\nconst PROCESS_LOCKS: { [name: string]: Promise<any> } = {}\n\n/**\n * Implements a global exclusive lock that works only in the current process.\n * Useful for environments like React Native or other non-browser\n * single-process (i.e. no concept of \"tabs\") environments.\n *\n * Use {@link #navigatorLock} in browser environments.\n *\n * @param name Name of the lock to be acquired.\n * @param acquireTimeout If negative, no timeout. If 0 an error is thrown if\n *                       the lock can't be acquired without waiting. If positive, the lock acquire\n *                       will time out after so many milliseconds. An error is\n *                       a timeout if it has `isAcquireTimeout` set to true.\n * @param fn The operation to run once the lock is acquired.\n * @example\n * ```ts\n * await processLock('migrate', 5000, async () => {\n *   await runMigration()\n * })\n * ```\n */\nexport async function processLock<R>(\n  name: string,\n  acquireTimeout: number,\n  fn: () => Promise<R>\n): Promise<R> {\n  const previousOperation = PROCESS_LOCKS[name] ?? Promise.resolve()\n\n  // Wrap previousOperation to handle errors without using .catch()\n  // This avoids Firefox content script security errors\n  const previousOperationHandled = (async () => {\n    try {\n      await previousOperation\n      return null\n    } catch (e) {\n      // ignore error of previous operation that we're waiting to finish\n      return null\n    }\n  })()\n\n  const currentOperation = (async () => {\n    let timeoutId: ReturnType<typeof setTimeout> | null = null\n\n    try {\n      // Wait for either previous operation or timeout\n      const timeoutPromise =\n        acquireTimeout >= 0\n          ? new Promise((_, reject) => {\n              timeoutId = setTimeout(() => {\n                console.warn(\n                  `@supabase/gotrue-js: Lock \"${name}\" acquisition timed out after ${acquireTimeout}ms. ` +\n                    'This may be caused by another operation holding the lock. ' +\n                    'Consider increasing lockAcquireTimeout or checking for stuck operations.'\n                )\n\n                reject(\n                  new ProcessLockAcquireTimeoutError(\n                    `Acquiring process lock with name \"${name}\" timed out`\n                  )\n                )\n              }, acquireTimeout)\n            })\n          : null\n\n      await Promise.race([previousOperationHandled, timeoutPromise].filter((x) => x))\n\n      // If we reach here, previousOperationHandled won the race\n      // Clear the timeout to prevent false warnings\n      if (timeoutId !== null) {\n        clearTimeout(timeoutId)\n      }\n    } catch (e) {\n      // Clear the timeout on error path as well\n      if (timeoutId !== null) {\n        clearTimeout(timeoutId)\n      }\n\n      // Re-throw timeout errors, ignore others\n      if (e instanceof LockAcquireTimeoutError) {\n        throw e\n      }\n      // Fall through to run fn() - previous operation finished with error\n    }\n\n    // Previous operations finished and we didn't get a race on the acquire\n    // timeout, so the current operation can finally start\n    return await fn()\n  })()\n\n  PROCESS_LOCKS[name] = (async () => {\n    try {\n      return await currentOperation\n    } catch (e) {\n      if (e instanceof LockAcquireTimeoutError) {\n        // if the current operation timed out, it doesn't mean that the previous\n        // operation finished, so we need continue waiting for it to finish\n        try {\n          await previousOperation\n        } catch (prevError) {\n          // Ignore previous operation errors\n        }\n        return null\n      }\n\n      throw e\n    }\n  })()\n\n  // finally wait for the current operation to finish successfully, with an\n  // error or with an acquire timeout error\n  return await currentOperation\n}\n", "/**\n * https://mathiasbynens.be/notes/globalthis\n */\nexport function polyfillGlobalThis() {\n  if (typeof globalThis === 'object') return\n  try {\n    Object.defineProperty(Object.prototype, '__magic__', {\n      get: function () {\n        return this\n      },\n      configurable: true,\n    })\n    // @ts-expect-error 'Allow access to magic'\n    __magic__.globalThis = __magic__\n    // @ts-expect-error 'Allow access to magic'\n    delete Object.prototype.__magic__\n  } catch (e) {\n    if (typeof self !== 'undefined') {\n      // @ts-expect-error 'Allow access to globals'\n      self.globalThis = self\n    }\n  }\n}\n", "// types and functions copied over from viem so this library doesn't depend on it\n\nexport type Hex = `0x${string}`\n\nexport type Address = Hex\n\nexport type EIP1193EventMap = {\n  accountsChanged(accounts: Address[]): void\n  chainChanged(chainId: string): void\n  connect(connectInfo: { chainId: string }): void\n  disconnect(error: { code: number; message: string }): void\n  message(message: { type: string; data: unknown }): void\n}\n\nexport type EIP1193Events = {\n  on<event extends keyof EIP1193EventMap>(event: event, listener: EIP1193EventMap[event]): void\n  removeListener<event extends keyof EIP1193EventMap>(\n    event: event,\n    listener: EIP1193EventMap[event]\n  ): void\n}\n\nexport type EIP1193RequestFn = (args: { method: string; params?: unknown }) => Promise<unknown>\n\nexport type EIP1193Provider = EIP1193Events & {\n  address: string\n  request: EIP1193RequestFn\n}\n\nexport type EthereumWallet = EIP1193Provider\n\n/**\n * EIP-4361 message fields\n */\nexport type SiweMessage = {\n  /**\n   * The Ethereum address performing the signing.\n   */\n  address: Address\n  /**\n   * The [EIP-155](https://eips.ethereum.org/EIPS/eip-155) Chain ID to which the session is bound,\n   */\n  chainId: number\n  /**\n   * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986) authority that is requesting the signing.\n   */\n  domain: string\n  /**\n   * Time when the signed authentication message is no longer valid.\n   */\n  expirationTime?: Date | undefined\n  /**\n   * Time when the message was generated, typically the current time.\n   */\n  issuedAt?: Date | undefined\n  /**\n   * A random string typically chosen by the relying party and used to prevent replay attacks.\n   */\n  nonce?: string\n  /**\n   * Time when the signed authentication message will become valid.\n   */\n  notBefore?: Date | undefined\n  /**\n   * A system-specific identifier that may be used to uniquely refer to the sign-in request.\n   */\n  requestId?: string | undefined\n  /**\n   * A list of information or references to information the user wishes to have resolved as part of authentication by the relying party.\n   */\n  resources?: string[] | undefined\n  /**\n   * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) URI scheme of the origin of the request.\n   */\n  scheme?: string | undefined\n  /**\n   * A human-readable ASCII assertion that the user will sign.\n   */\n  statement?: string | undefined\n  /**\n   * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986) URI referring to the resource that is the subject of the signing (as in the subject of a claim).\n   */\n  uri: string\n  /**\n   * The current version of the SIWE Message.\n   */\n  version: '1'\n}\n\nexport type EthereumSignInInput = SiweMessage\n\nexport function getAddress(address: string): Address {\n  if (!/^0x[a-fA-F0-9]{40}$/.test(address)) {\n    throw new Error(`@supabase/auth-js: Address \"${address}\" is invalid.`)\n  }\n  return address.toLowerCase() as Address\n}\n\nexport function fromHex(hex: Hex): number {\n  return parseInt(hex, 16)\n}\n\nexport function toHex(value: string): Hex {\n  const bytes = new TextEncoder().encode(value)\n  const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('')\n  return ('0x' + hex) as Hex\n}\n\n/**\n * Creates EIP-4361 formatted message.\n */\nexport function createSiweMessage(parameters: SiweMessage): string {\n  const {\n    chainId,\n    domain,\n    expirationTime,\n    issuedAt = new Date(),\n    nonce,\n    notBefore,\n    requestId,\n    resources,\n    scheme,\n    uri,\n    version,\n  } = parameters\n\n  // Validate fields\n  {\n    if (!Number.isInteger(chainId))\n      throw new Error(\n        `@supabase/auth-js: Invalid SIWE message field \"chainId\". Chain ID must be a EIP-155 chain ID. Provided value: ${chainId}`\n      )\n\n    if (!domain)\n      throw new Error(\n        `@supabase/auth-js: Invalid SIWE message field \"domain\". Domain must be provided.`\n      )\n\n    if (nonce && nonce.length < 8)\n      throw new Error(\n        `@supabase/auth-js: Invalid SIWE message field \"nonce\". Nonce must be at least 8 characters. Provided value: ${nonce}`\n      )\n\n    if (!uri)\n      throw new Error(`@supabase/auth-js: Invalid SIWE message field \"uri\". URI must be provided.`)\n\n    if (version !== '1')\n      throw new Error(\n        `@supabase/auth-js: Invalid SIWE message field \"version\". Version must be '1'. Provided value: ${version}`\n      )\n\n    if (parameters.statement?.includes('\\n'))\n      throw new Error(\n        `@supabase/auth-js: Invalid SIWE message field \"statement\". Statement must not include '\\\\n'. Provided value: ${parameters.statement}`\n      )\n  }\n\n  // Construct message\n  const address = getAddress(parameters.address)\n  const origin = scheme ? `${scheme}://${domain}` : domain\n  const statement = parameters.statement ? `${parameters.statement}\\n` : ''\n  const prefix = `${origin} wants you to sign in with your Ethereum account:\\n${address}\\n\\n${statement}`\n\n  let suffix = `URI: ${uri}\\nVersion: ${version}\\nChain ID: ${chainId}${\n    nonce ? `\\nNonce: ${nonce}` : ''\n  }\\nIssued At: ${issuedAt.toISOString()}`\n\n  if (expirationTime) suffix += `\\nExpiration Time: ${expirationTime.toISOString()}`\n  if (notBefore) suffix += `\\nNot Before: ${notBefore.toISOString()}`\n  if (requestId) suffix += `\\nRequest ID: ${requestId}`\n  if (resources) {\n    let content = '\\nResources:'\n    for (const resource of resources) {\n      if (!resource || typeof resource !== 'string')\n        throw new Error(\n          `@supabase/auth-js: Invalid SIWE message field \"resources\". Every resource must be a valid string. Provided value: ${resource}`\n        )\n      content += `\\n- ${resource}`\n    }\n    suffix += content\n  }\n\n  return `${prefix}\\n${suffix}`\n}\n", "/* eslint-disable @typescript-eslint/ban-ts-comment */\n\nimport { StrictOmit } from './types'\nimport { isValidDomain } from './webauthn'\nimport {\n  PublicKeyCredentialCreationOptionsFuture,\n  PublicKeyCredentialRequestOptionsFuture,\n} from './webauthn.dom'\n\n/**\n * A custom Error used to return a more nuanced error detailing _why_ one of the eight documented\n * errors in the spec was raised after calling `navigator.credentials.create()` or\n * `navigator.credentials.get()`:\n *\n * - `AbortError`\n * - `ConstraintError`\n * - `InvalidStateError`\n * - `NotAllowedError`\n * - `NotSupportedError`\n * - `SecurityError`\n * - `TypeError`\n * - `UnknownError`\n *\n * Error messages were determined through investigation of the spec to determine under which\n * scenarios a given error would be raised.\n */\nexport class WebAuthnError extends Error {\n  code: WebAuthnErrorCode\n\n  protected __isWebAuthnError = true\n\n  constructor({\n    message,\n    code,\n    cause,\n    name,\n  }: {\n    message: string\n    code: WebAuthnErrorCode\n    cause?: Error | unknown\n    name?: string\n  }) {\n    // @ts-ignore: help Rollup understand that `cause` is okay to set\n    super(message, { cause })\n    this.name = name ?? (cause instanceof Error ? cause.name : undefined) ?? 'Unknown Error'\n    this.code = code\n  }\n\n  toJSON(): {\n    name: string\n    message: string\n    code: WebAuthnErrorCode\n  } {\n    return {\n      name: this.name,\n      message: this.message,\n      code: this.code,\n    }\n  }\n}\n\n/**\n * Error class for unknown WebAuthn errors.\n * Wraps unexpected errors that don't match known WebAuthn error conditions.\n */\nexport class WebAuthnUnknownError extends WebAuthnError {\n  originalError: unknown\n\n  constructor(message: string, originalError: unknown) {\n    super({\n      code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n      cause: originalError,\n      message,\n    })\n    this.name = 'WebAuthnUnknownError'\n    this.originalError = originalError\n  }\n}\n\n/**\n * Type guard to check if an error is a WebAuthnError.\n * @param {unknown} error - The error to check\n * @returns {boolean} True if the error is a WebAuthnError\n */\nexport function isWebAuthnError(error: unknown): error is WebAuthnError {\n  return typeof error === 'object' && error !== null && '__isWebAuthnError' in error\n}\n\n/**\n * Error codes for WebAuthn operations.\n * These codes provide specific information about why a WebAuthn ceremony failed.\n * @see {@link https://w3c.github.io/webauthn/#sctn-defined-errors W3C WebAuthn Spec - Defined Errors}\n */\nexport type WebAuthnErrorCode =\n  | 'ERROR_CEREMONY_ABORTED'\n  | 'ERROR_INVALID_DOMAIN'\n  | 'ERROR_INVALID_RP_ID'\n  | 'ERROR_INVALID_USER_ID_LENGTH'\n  | 'ERROR_MALFORMED_PUBKEYCREDPARAMS'\n  | 'ERROR_AUTHENTICATOR_GENERAL_ERROR'\n  | 'ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT'\n  | 'ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT'\n  | 'ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED'\n  | 'ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG'\n  | 'ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE'\n  | 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY'\n\n/**\n * Attempt to intuit _why_ an error was raised after calling `navigator.credentials.create()`.\n * Maps browser errors to specific WebAuthn error codes for better debugging.\n * @param {Object} params - Error identification parameters\n * @param {Error} params.error - The error thrown by the browser\n * @param {CredentialCreationOptions} params.options - The options passed to credentials.create()\n * @returns {WebAuthnError} A WebAuthnError with a specific error code\n * @see {@link https://w3c.github.io/webauthn/#sctn-createCredential W3C WebAuthn Spec - Create Credential}\n */\nexport function identifyRegistrationError({\n  error,\n  options,\n}: {\n  error: Error\n  options: StrictOmit<CredentialCreationOptions, 'publicKey'> & {\n    publicKey: PublicKeyCredentialCreationOptionsFuture\n  }\n}): WebAuthnError {\n  const { publicKey } = options\n\n  if (!publicKey) {\n    throw Error('options was missing required publicKey property')\n  }\n\n  if (error.name === 'AbortError') {\n    if (options.signal instanceof AbortSignal) {\n      // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 16)\n      return new WebAuthnError({\n        message: 'Registration ceremony was sent an abort signal',\n        code: 'ERROR_CEREMONY_ABORTED',\n        cause: error,\n      })\n    }\n  } else if (error.name === 'ConstraintError') {\n    if (publicKey.authenticatorSelection?.requireResidentKey === true) {\n      // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 4)\n      return new WebAuthnError({\n        message:\n          'Discoverable credentials were required but no available authenticator supported it',\n        code: 'ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT',\n        cause: error,\n      })\n    } else if (\n      // @ts-ignore: `mediation` doesn't yet exist on CredentialCreationOptions but it's possible as of Sept 2024\n      options.mediation === 'conditional' &&\n      publicKey.authenticatorSelection?.userVerification === 'required'\n    ) {\n      // https://w3c.github.io/webauthn/#sctn-createCredential (Step 22.4)\n      return new WebAuthnError({\n        message:\n          'User verification was required during automatic registration but it could not be performed',\n        code: 'ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE',\n        cause: error,\n      })\n    } else if (publicKey.authenticatorSelection?.userVerification === 'required') {\n      // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 5)\n      return new WebAuthnError({\n        message: 'User verification was required but no available authenticator supported it',\n        code: 'ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT',\n        cause: error,\n      })\n    }\n  } else if (error.name === 'InvalidStateError') {\n    // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 20)\n    // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 3)\n    return new WebAuthnError({\n      message: 'The authenticator was previously registered',\n      code: 'ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED',\n      cause: error,\n    })\n  } else if (error.name === 'NotAllowedError') {\n    /**\n     * Pass the error directly through. Platforms are overloading this error beyond what the spec\n     * defines and we don't want to overwrite potentially useful error messages.\n     */\n    return new WebAuthnError({\n      message: error.message,\n      code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n      cause: error,\n    })\n  } else if (error.name === 'NotSupportedError') {\n    const validPubKeyCredParams = publicKey.pubKeyCredParams.filter(\n      (param) => param.type === 'public-key'\n    )\n\n    if (validPubKeyCredParams.length === 0) {\n      // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 10)\n      return new WebAuthnError({\n        message: 'No entry in pubKeyCredParams was of type \"public-key\"',\n        code: 'ERROR_MALFORMED_PUBKEYCREDPARAMS',\n        cause: error,\n      })\n    }\n\n    // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 2)\n    return new WebAuthnError({\n      message:\n        'No available authenticator supported any of the specified pubKeyCredParams algorithms',\n      code: 'ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG',\n      cause: error,\n    })\n  } else if (error.name === 'SecurityError') {\n    const effectiveDomain = window.location.hostname\n    if (!isValidDomain(effectiveDomain)) {\n      // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 7)\n      return new WebAuthnError({\n        message: `${window.location.hostname} is an invalid domain`,\n        code: 'ERROR_INVALID_DOMAIN',\n        cause: error,\n      })\n    } else if (publicKey.rp.id !== effectiveDomain) {\n      // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 8)\n      return new WebAuthnError({\n        message: `The RP ID \"${publicKey.rp.id}\" is invalid for this domain`,\n        code: 'ERROR_INVALID_RP_ID',\n        cause: error,\n      })\n    }\n  } else if (error.name === 'TypeError') {\n    if (publicKey.user.id.byteLength < 1 || publicKey.user.id.byteLength > 64) {\n      // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 5)\n      return new WebAuthnError({\n        message: 'User ID was not between 1 and 64 characters',\n        code: 'ERROR_INVALID_USER_ID_LENGTH',\n        cause: error,\n      })\n    }\n  } else if (error.name === 'UnknownError') {\n    // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 1)\n    // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 8)\n    return new WebAuthnError({\n      message:\n        'The authenticator was unable to process the specified options, or could not create a new credential',\n      code: 'ERROR_AUTHENTICATOR_GENERAL_ERROR',\n      cause: error,\n    })\n  }\n\n  return new WebAuthnError({\n    message: 'a Non-Webauthn related error has occurred',\n    code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n    cause: error,\n  })\n}\n\n/**\n * Attempt to intuit _why_ an error was raised after calling `navigator.credentials.get()`.\n * Maps browser errors to specific WebAuthn error codes for better debugging.\n * @param {Object} params - Error identification parameters\n * @param {Error} params.error - The error thrown by the browser\n * @param {CredentialRequestOptions} params.options - The options passed to credentials.get()\n * @returns {WebAuthnError} A WebAuthnError with a specific error code\n * @see {@link https://w3c.github.io/webauthn/#sctn-getAssertion W3C WebAuthn Spec - Get Assertion}\n */\nexport function identifyAuthenticationError({\n  error,\n  options,\n}: {\n  error: Error\n  options: StrictOmit<CredentialRequestOptions, 'publicKey'> & {\n    publicKey: PublicKeyCredentialRequestOptionsFuture\n  }\n}): WebAuthnError {\n  const { publicKey } = options\n\n  if (!publicKey) {\n    throw Error('options was missing required publicKey property')\n  }\n\n  if (error.name === 'AbortError') {\n    if (options.signal instanceof AbortSignal) {\n      // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 16)\n      return new WebAuthnError({\n        message: 'Authentication ceremony was sent an abort signal',\n        code: 'ERROR_CEREMONY_ABORTED',\n        cause: error,\n      })\n    }\n  } else if (error.name === 'NotAllowedError') {\n    /**\n     * Pass the error directly through. Platforms are overloading this error beyond what the spec\n     * defines and we don't want to overwrite potentially useful error messages.\n     */\n    return new WebAuthnError({\n      message: error.message,\n      code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n      cause: error,\n    })\n  } else if (error.name === 'SecurityError') {\n    const effectiveDomain = window.location.hostname\n    if (!isValidDomain(effectiveDomain)) {\n      // https://www.w3.org/TR/webauthn-2/#sctn-discover-from-external-source (Step 5)\n      return new WebAuthnError({\n        message: `${window.location.hostname} is an invalid domain`,\n        code: 'ERROR_INVALID_DOMAIN',\n        cause: error,\n      })\n    } else if (publicKey.rpId !== effectiveDomain) {\n      // https://www.w3.org/TR/webauthn-2/#sctn-discover-from-external-source (Step 6)\n      return new WebAuthnError({\n        message: `The RP ID \"${publicKey.rpId}\" is invalid for this domain`,\n        code: 'ERROR_INVALID_RP_ID',\n        cause: error,\n      })\n    }\n  } else if (error.name === 'UnknownError') {\n    // https://www.w3.org/TR/webauthn-2/#sctn-op-get-assertion (Step 1)\n    // https://www.w3.org/TR/webauthn-2/#sctn-op-get-assertion (Step 12)\n    return new WebAuthnError({\n      message:\n        'The authenticator was unable to process the specified options, or could not create a new assertion signature',\n      code: 'ERROR_AUTHENTICATOR_GENERAL_ERROR',\n      cause: error,\n    })\n  }\n\n  return new WebAuthnError({\n    message: 'a Non-Webauthn related error has occurred',\n    code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n    cause: error,\n  })\n}\n", "import GoTrueClient from '../GoTrueClient'\nimport { base64UrlToUint8Array, bytesToBase64URL } from './base64url'\nimport { AuthError, AuthUnknownError, isAuthError } from './errors'\nimport {\n  AuthMFAEnrollWebauthnResponse,\n  AuthMFAVerifyResponse,\n  AuthMFAVerifyResponseData,\n  MFAChallengeWebauthnParams,\n  MFAEnrollWebauthnParams,\n  MFAVerifyWebauthnParamFields,\n  MFAVerifyWebauthnParams,\n  RequestResult,\n  StrictOmit,\n} from './types'\nimport { isBrowser } from './helpers'\nimport type {\n  AuthenticationCredential,\n  AuthenticationResponseJSON,\n  AuthenticatorAttachment,\n  PublicKeyCredentialCreationOptionsFuture,\n  PublicKeyCredentialCreationOptionsJSON,\n  PublicKeyCredentialFuture,\n  PublicKeyCredentialRequestOptionsFuture,\n  PublicKeyCredentialRequestOptionsJSON,\n  RegistrationCredential,\n  RegistrationResponseJSON,\n} from './webauthn.dom'\n\nimport {\n  identifyAuthenticationError,\n  identifyRegistrationError,\n  isWebAuthnError,\n  WebAuthnError,\n  WebAuthnUnknownError,\n} from './webauthn.errors'\n\nexport { WebAuthnError, isWebAuthnError, identifyRegistrationError, identifyAuthenticationError }\n// Re-export the JSON types for use in other files\nexport type { RegistrationResponseJSON, AuthenticationResponseJSON }\n\n/**\n * WebAuthn abort service to manage ceremony cancellation.\n * Ensures only one WebAuthn ceremony is active at a time to prevent \"operation already in progress\" errors.\n *\n * @experimental This class is experimental and may change in future releases\n * @see {@link https://w3c.github.io/webauthn/#sctn-automation-webdriver-capability W3C WebAuthn Spec - Aborting Ceremonies}\n */\nexport class WebAuthnAbortService {\n  private controller: AbortController | undefined\n\n  /**\n   * Create an abort signal for a new WebAuthn operation.\n   * Automatically cancels any existing operation.\n   *\n   * @returns {AbortSignal} Signal to pass to navigator.credentials.create() or .get()\n   * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal MDN - AbortSignal}\n   */\n  createNewAbortSignal(): AbortSignal {\n    // Abort any existing calls to navigator.credentials.create() or navigator.credentials.get()\n    if (this.controller) {\n      const abortError = new Error('Cancelling existing WebAuthn API call for new one')\n      abortError.name = 'AbortError'\n      this.controller.abort(abortError)\n    }\n\n    const newController = new AbortController()\n    this.controller = newController\n    return newController.signal\n  }\n\n  /**\n   * Manually cancel the current WebAuthn operation.\n   * Useful for cleaning up when user cancels or navigates away.\n   *\n   * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/AbortController/abort MDN - AbortController.abort}\n   */\n  cancelCeremony(): void {\n    if (this.controller) {\n      const abortError = new Error('Manually cancelling existing WebAuthn API call')\n      abortError.name = 'AbortError'\n      this.controller.abort(abortError)\n      this.controller = undefined\n    }\n  }\n}\n\n/**\n * Singleton instance to ensure only one WebAuthn ceremony is active at a time.\n * This prevents \"operation already in progress\" errors when retrying WebAuthn operations.\n *\n * @experimental This instance is experimental and may change in future releases\n */\nexport const webAuthnAbortService = new WebAuthnAbortService()\n\n/**\n * Server response format for WebAuthn credential creation options.\n * Uses W3C standard JSON format with base64url-encoded binary fields.\n */\nexport type ServerCredentialCreationOptions = PublicKeyCredentialCreationOptionsJSON\n\n/**\n * Server response format for WebAuthn credential request options.\n * Uses W3C standard JSON format with base64url-encoded binary fields.\n */\nexport type ServerCredentialRequestOptions = PublicKeyCredentialRequestOptionsJSON\n\n/**\n * Convert base64url encoded strings in WebAuthn credential creation options to ArrayBuffers\n * as required by the WebAuthn browser API.\n * Supports both native WebAuthn Level 3 parseCreationOptionsFromJSON and manual fallback.\n *\n * @param {ServerCredentialCreationOptions} options - JSON options from server with base64url encoded fields\n * @returns {PublicKeyCredentialCreationOptionsFuture} Options ready for navigator.credentials.create()\n * @see {@link https://w3c.github.io/webauthn/#sctn-parseCreationOptionsFromJSON W3C WebAuthn Spec - parseCreationOptionsFromJSON}\n */\nexport function deserializeCredentialCreationOptions(\n  options: ServerCredentialCreationOptions\n): PublicKeyCredentialCreationOptionsFuture {\n  if (!options) {\n    throw new Error('Credential creation options are required')\n  }\n\n  // Check if the native parseCreationOptionsFromJSON method is available\n  if (\n    typeof PublicKeyCredential !== 'undefined' &&\n    'parseCreationOptionsFromJSON' in PublicKeyCredential &&\n    typeof (PublicKeyCredential as unknown as PublicKeyCredentialFuture)\n      .parseCreationOptionsFromJSON === 'function'\n  ) {\n    // Use the native WebAuthn Level 3 method\n    return (\n      PublicKeyCredential as unknown as PublicKeyCredentialFuture\n    ).parseCreationOptionsFromJSON(\n      /** we assert the options here as typescript still doesn't know about future webauthn types */\n      options as any\n    ) as PublicKeyCredentialCreationOptionsFuture\n  }\n\n  // Fallback to manual parsing for browsers that don't support the native method\n  // Destructure to separate fields that need transformation\n  const { challenge: challengeStr, user: userOpts, excludeCredentials, ...restOptions } = options\n\n  // Convert challenge from base64url to ArrayBuffer\n  const challenge = base64UrlToUint8Array(challengeStr).buffer as ArrayBuffer\n\n  // Convert user.id from base64url to ArrayBuffer\n  const user: PublicKeyCredentialUserEntity = {\n    ...userOpts,\n    id: base64UrlToUint8Array(userOpts.id).buffer as ArrayBuffer,\n  }\n\n  // Build the result object\n  const result: PublicKeyCredentialCreationOptionsFuture = {\n    ...restOptions,\n    challenge,\n    user,\n  }\n\n  // Only add excludeCredentials if it exists\n  if (excludeCredentials && excludeCredentials.length > 0) {\n    result.excludeCredentials = new Array(excludeCredentials.length)\n\n    for (let i = 0; i < excludeCredentials.length; i++) {\n      const cred = excludeCredentials[i]\n      result.excludeCredentials[i] = {\n        ...cred,\n        id: base64UrlToUint8Array(cred.id).buffer,\n        type: cred.type || 'public-key',\n        // Cast transports to handle future transport types like \"cable\"\n        transports: cred.transports,\n      }\n    }\n  }\n\n  return result\n}\n\n/**\n * Convert base64url encoded strings in WebAuthn credential request options to ArrayBuffers\n * as required by the WebAuthn browser API.\n * Supports both native WebAuthn Level 3 parseRequestOptionsFromJSON and manual fallback.\n *\n * @param {ServerCredentialRequestOptions} options - JSON options from server with base64url encoded fields\n * @returns {PublicKeyCredentialRequestOptionsFuture} Options ready for navigator.credentials.get()\n * @see {@link https://w3c.github.io/webauthn/#sctn-parseRequestOptionsFromJSON W3C WebAuthn Spec - parseRequestOptionsFromJSON}\n */\nexport function deserializeCredentialRequestOptions(\n  options: ServerCredentialRequestOptions\n): PublicKeyCredentialRequestOptionsFuture {\n  if (!options) {\n    throw new Error('Credential request options are required')\n  }\n\n  // Check if the native parseRequestOptionsFromJSON method is available\n  if (\n    typeof PublicKeyCredential !== 'undefined' &&\n    'parseRequestOptionsFromJSON' in PublicKeyCredential &&\n    typeof (PublicKeyCredential as unknown as PublicKeyCredentialFuture)\n      .parseRequestOptionsFromJSON === 'function'\n  ) {\n    // Use the native WebAuthn Level 3 method\n    return (\n      PublicKeyCredential as unknown as PublicKeyCredentialFuture\n    ).parseRequestOptionsFromJSON(options) as PublicKeyCredentialRequestOptionsFuture\n  }\n\n  // Fallback to manual parsing for browsers that don't support the native method\n  // Destructure to separate fields that need transformation\n  const { challenge: challengeStr, allowCredentials, ...restOptions } = options\n\n  // Convert challenge from base64url to ArrayBuffer\n  const challenge = base64UrlToUint8Array(challengeStr).buffer as ArrayBuffer\n\n  // Build the result object\n  const result: PublicKeyCredentialRequestOptionsFuture = {\n    ...restOptions,\n    challenge,\n  }\n\n  // Only add allowCredentials if it exists\n  if (allowCredentials && allowCredentials.length > 0) {\n    result.allowCredentials = new Array(allowCredentials.length)\n\n    for (let i = 0; i < allowCredentials.length; i++) {\n      const cred = allowCredentials[i]\n      result.allowCredentials[i] = {\n        ...cred,\n        id: base64UrlToUint8Array(cred.id).buffer,\n        type: cred.type || 'public-key',\n        // Cast transports to handle future transport types like \"cable\"\n        transports: cred.transports,\n      }\n    }\n  }\n\n  return result\n}\n\n/**\n * Server format for credential response with base64url-encoded binary fields\n * Can be either a registration or authentication response\n */\nexport type ServerCredentialResponse = RegistrationResponseJSON | AuthenticationResponseJSON\n\n/**\n * Convert a registration/enrollment credential response to server format.\n * Serializes binary fields to base64url for JSON transmission.\n * Supports both native WebAuthn Level 3 toJSON and manual fallback.\n *\n * @param {RegistrationCredential} credential - Credential from navigator.credentials.create()\n * @returns {RegistrationResponseJSON} JSON-serializable credential for server\n * @see {@link https://w3c.github.io/webauthn/#dom-publickeycredential-tojson W3C WebAuthn Spec - toJSON}\n */\nexport function serializeCredentialCreationResponse(\n  credential: RegistrationCredential\n): RegistrationResponseJSON {\n  // Check if the credential instance has the toJSON method\n  if ('toJSON' in credential && typeof credential.toJSON === 'function') {\n    // Use the native WebAuthn Level 3 method\n    return (credential as RegistrationCredential).toJSON()\n  }\n  const credentialWithAttachment = credential as PublicKeyCredential & {\n    response: AuthenticatorAttestationResponse\n    authenticatorAttachment?: string | null\n  }\n\n  return {\n    id: credential.id,\n    rawId: credential.id,\n    response: {\n      attestationObject: bytesToBase64URL(new Uint8Array(credential.response.attestationObject)),\n      clientDataJSON: bytesToBase64URL(new Uint8Array(credential.response.clientDataJSON)),\n    },\n    type: 'public-key',\n    clientExtensionResults: credential.getClientExtensionResults(),\n    // Convert null to undefined and cast to AuthenticatorAttachment type\n    authenticatorAttachment: (credentialWithAttachment.authenticatorAttachment ?? undefined) as\n      | AuthenticatorAttachment\n      | undefined,\n  }\n}\n\n/**\n * Convert an authentication/verification credential response to server format.\n * Serializes binary fields to base64url for JSON transmission.\n * Supports both native WebAuthn Level 3 toJSON and manual fallback.\n *\n * @param {AuthenticationCredential} credential - Credential from navigator.credentials.get()\n * @returns {AuthenticationResponseJSON} JSON-serializable credential for server\n * @see {@link https://w3c.github.io/webauthn/#dom-publickeycredential-tojson W3C WebAuthn Spec - toJSON}\n */\nexport function serializeCredentialRequestResponse(\n  credential: AuthenticationCredential\n): AuthenticationResponseJSON {\n  // Check if the credential instance has the toJSON method\n  if ('toJSON' in credential && typeof credential.toJSON === 'function') {\n    // Use the native WebAuthn Level 3 method\n    return (credential as AuthenticationCredential).toJSON()\n  }\n\n  // Fallback to manual conversion for browsers that don't support toJSON\n  // Access authenticatorAttachment via type assertion to handle TypeScript version differences\n  // @simplewebauthn/types includes this property but base TypeScript 4.7.4 doesn't\n  const credentialWithAttachment = credential as PublicKeyCredential & {\n    response: AuthenticatorAssertionResponse\n    authenticatorAttachment?: string | null\n  }\n\n  const clientExtensionResults = credential.getClientExtensionResults()\n  const assertionResponse = credential.response\n\n  return {\n    id: credential.id,\n    rawId: credential.id, // W3C spec expects rawId to match id for JSON format\n    response: {\n      authenticatorData: bytesToBase64URL(new Uint8Array(assertionResponse.authenticatorData)),\n      clientDataJSON: bytesToBase64URL(new Uint8Array(assertionResponse.clientDataJSON)),\n      signature: bytesToBase64URL(new Uint8Array(assertionResponse.signature)),\n      userHandle: assertionResponse.userHandle\n        ? bytesToBase64URL(new Uint8Array(assertionResponse.userHandle))\n        : undefined,\n    },\n    type: 'public-key',\n    clientExtensionResults,\n    // Convert null to undefined and cast to AuthenticatorAttachment type\n    authenticatorAttachment: (credentialWithAttachment.authenticatorAttachment ?? undefined) as\n      | AuthenticatorAttachment\n      | undefined,\n  }\n}\n\n/**\n * A simple test to determine if a hostname is a properly-formatted domain name.\n * Considers localhost valid for development environments.\n *\n * A \"valid domain\" is defined here: https://url.spec.whatwg.org/#valid-domain\n *\n * Regex sourced from here:\n * https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch08s15.html\n *\n * @param {string} hostname - The hostname to validate\n * @returns {boolean} True if valid domain or localhost\n * @see {@link https://url.spec.whatwg.org/#valid-domain WHATWG URL Spec - Valid Domain}\n */\nexport function isValidDomain(hostname: string): boolean {\n  return (\n    // Consider localhost valid as well since it's okay wrt Secure Contexts\n    hostname === 'localhost' || /^([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,}$/i.test(hostname)\n  )\n}\n\n/**\n * Determine if the browser is capable of WebAuthn.\n * Checks for necessary Web APIs: PublicKeyCredential and Credential Management.\n *\n * @returns {boolean} True if browser supports WebAuthn\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredential#browser_compatibility MDN - PublicKeyCredential Browser Compatibility}\n */\nexport function browserSupportsWebAuthn(): boolean {\n  return !!(\n    isBrowser() &&\n    'PublicKeyCredential' in window &&\n    window.PublicKeyCredential &&\n    'credentials' in navigator &&\n    typeof navigator?.credentials?.create === 'function' &&\n    typeof navigator?.credentials?.get === 'function'\n  )\n}\n\n/**\n * Create a WebAuthn credential using the browser's credentials API.\n * Wraps navigator.credentials.create() with error handling.\n *\n * @param {CredentialCreationOptions} options - Options including publicKey parameters\n * @returns {Promise<RequestResult<RegistrationCredential, WebAuthnError>>} Created credential or error\n * @see {@link https://w3c.github.io/webauthn/#sctn-createCredential W3C WebAuthn Spec - Create Credential}\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/CredentialsContainer/create MDN - credentials.create}\n */\nexport async function createCredential(\n  options: StrictOmit<CredentialCreationOptions, 'publicKey'> & {\n    publicKey: PublicKeyCredentialCreationOptionsFuture\n  }\n): Promise<RequestResult<RegistrationCredential, WebAuthnError>> {\n  try {\n    const response = await navigator.credentials.create(\n      /** we assert the type here until typescript types are updated */\n      options as Parameters<typeof navigator.credentials.create>[0]\n    )\n    if (!response) {\n      return {\n        data: null,\n        error: new WebAuthnUnknownError('Empty credential response', response),\n      }\n    }\n    if (!(response instanceof PublicKeyCredential)) {\n      return {\n        data: null,\n        error: new WebAuthnUnknownError('Browser returned unexpected credential type', response),\n      }\n    }\n    return { data: response as RegistrationCredential, error: null }\n  } catch (err) {\n    return {\n      data: null,\n      error: identifyRegistrationError({\n        error: err as Error,\n        options,\n      }),\n    }\n  }\n}\n\n/**\n * Get a WebAuthn credential using the browser's credentials API.\n * Wraps navigator.credentials.get() with error handling.\n *\n * @param {CredentialRequestOptions} options - Options including publicKey parameters\n * @returns {Promise<RequestResult<AuthenticationCredential, WebAuthnError>>} Retrieved credential or error\n * @see {@link https://w3c.github.io/webauthn/#sctn-getAssertion W3C WebAuthn Spec - Get Assertion}\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/CredentialsContainer/get MDN - credentials.get}\n */\nexport async function getCredential(\n  options: StrictOmit<CredentialRequestOptions, 'publicKey'> & {\n    publicKey: PublicKeyCredentialRequestOptionsFuture\n  }\n): Promise<RequestResult<AuthenticationCredential, WebAuthnError>> {\n  try {\n    const response = await navigator.credentials.get(\n      /** we assert the type here until typescript types are updated */\n      options as Parameters<typeof navigator.credentials.get>[0]\n    )\n    if (!response) {\n      return {\n        data: null,\n        error: new WebAuthnUnknownError('Empty credential response', response),\n      }\n    }\n    if (!(response instanceof PublicKeyCredential)) {\n      return {\n        data: null,\n        error: new WebAuthnUnknownError('Browser returned unexpected credential type', response),\n      }\n    }\n    return { data: response as AuthenticationCredential, error: null }\n  } catch (err) {\n    return {\n      data: null,\n      error: identifyAuthenticationError({\n        error: err as Error,\n        options,\n      }),\n    }\n  }\n}\n\nexport const DEFAULT_CREATION_OPTIONS: Partial<PublicKeyCredentialCreationOptionsFuture> = {\n  hints: ['security-key'],\n  authenticatorSelection: {\n    authenticatorAttachment: 'cross-platform',\n    requireResidentKey: false,\n    /** set to preferred because older yubikeys don't have PIN/Biometric */\n    userVerification: 'preferred',\n    residentKey: 'discouraged',\n  },\n  attestation: 'direct',\n}\n\nexport const DEFAULT_REQUEST_OPTIONS: Partial<PublicKeyCredentialRequestOptionsFuture> = {\n  /** set to preferred because older yubikeys don't have PIN/Biometric */\n  userVerification: 'preferred',\n  hints: ['security-key'],\n  attestation: 'direct',\n}\n\nfunction deepMerge<T>(...sources: Partial<T>[]): T {\n  const isObject = (val: unknown): val is Record<string, unknown> =>\n    val !== null && typeof val === 'object' && !Array.isArray(val)\n\n  const isArrayBufferLike = (val: unknown): val is ArrayBuffer | ArrayBufferView =>\n    val instanceof ArrayBuffer || ArrayBuffer.isView(val)\n\n  const result: Partial<T> = {}\n\n  for (const source of sources) {\n    if (!source) continue\n\n    for (const key in source) {\n      const value = source[key]\n      if (value === undefined) continue\n\n      if (Array.isArray(value)) {\n        // preserve array reference, including unions like AuthenticatorTransport[]\n        result[key] = value as T[typeof key]\n      } else if (isArrayBufferLike(value)) {\n        result[key] = value as T[typeof key]\n      } else if (isObject(value)) {\n        const existing = result[key]\n        if (isObject(existing)) {\n          result[key] = deepMerge(existing, value) as unknown as T[typeof key]\n        } else {\n          result[key] = deepMerge(value) as unknown as T[typeof key]\n        }\n      } else {\n        result[key] = value as T[typeof key]\n      }\n    }\n  }\n\n  return result as T\n}\n\n/**\n * Merges WebAuthn credential creation options with overrides.\n * Sets sensible defaults for authenticator selection and extensions.\n *\n * @param {PublicKeyCredentialCreationOptionsFuture} baseOptions - The base options from the server\n * @param {PublicKeyCredentialCreationOptionsFuture} overrides - Optional overrides to apply\n * @param {string} friendlyName - Optional friendly name for the credential\n * @returns {PublicKeyCredentialCreationOptionsFuture} Merged credential creation options\n * @see {@link https://w3c.github.io/webauthn/#dictdef-authenticatorselectioncriteria W3C WebAuthn Spec - AuthenticatorSelectionCriteria}\n */\nexport function mergeCredentialCreationOptions(\n  baseOptions: PublicKeyCredentialCreationOptionsFuture,\n  overrides?: Partial<PublicKeyCredentialCreationOptionsFuture>\n): PublicKeyCredentialCreationOptionsFuture {\n  return deepMerge(DEFAULT_CREATION_OPTIONS, baseOptions, overrides || {})\n}\n\n/**\n * Merges WebAuthn credential request options with overrides.\n * Sets sensible defaults for user verification and hints.\n *\n * @param {PublicKeyCredentialRequestOptionsFuture} baseOptions - The base options from the server\n * @param {PublicKeyCredentialRequestOptionsFuture} overrides - Optional overrides to apply\n * @returns {PublicKeyCredentialRequestOptionsFuture} Merged credential request options\n * @see {@link https://w3c.github.io/webauthn/#dictdef-publickeycredentialrequestoptions W3C WebAuthn Spec - PublicKeyCredentialRequestOptions}\n */\nexport function mergeCredentialRequestOptions(\n  baseOptions: PublicKeyCredentialRequestOptionsFuture,\n  overrides?: Partial<PublicKeyCredentialRequestOptionsFuture>\n): PublicKeyCredentialRequestOptionsFuture {\n  return deepMerge(DEFAULT_REQUEST_OPTIONS, baseOptions, overrides || {})\n}\n\n/**\n * WebAuthn API wrapper for Supabase Auth.\n * Provides methods for enrolling, challenging, verifying, authenticating, and registering WebAuthn credentials.\n *\n * @experimental This API is experimental and may change in future releases\n * @see {@link https://w3c.github.io/webauthn/ W3C WebAuthn Specification}\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API MDN - Web Authentication API}\n */\nexport class WebAuthnApi {\n  public enroll: typeof WebAuthnApi.prototype._enroll\n  public challenge: typeof WebAuthnApi.prototype._challenge\n  public verify: typeof WebAuthnApi.prototype._verify\n  public authenticate: typeof WebAuthnApi.prototype._authenticate\n  public register: typeof WebAuthnApi.prototype._register\n\n  constructor(private client: GoTrueClient) {\n    // Bind all methods so they can be destructured\n    this.enroll = this._enroll.bind(this)\n    this.challenge = this._challenge.bind(this)\n    this.verify = this._verify.bind(this)\n    this.authenticate = this._authenticate.bind(this)\n    this.register = this._register.bind(this)\n  }\n\n  /**\n   * Enroll a new WebAuthn factor.\n   * Creates an unverified WebAuthn factor that must be verified with a credential.\n   *\n   * @experimental This method is experimental and may change in future releases\n   * @param {Omit<MFAEnrollWebauthnParams, 'factorType'>} params - Enrollment parameters (friendlyName required)\n   * @returns {Promise<AuthMFAEnrollWebauthnResponse>} Enrolled factor details or error\n   * @see {@link https://w3c.github.io/webauthn/#sctn-registering-a-new-credential W3C WebAuthn Spec - Registering a New Credential}\n   */\n  public async _enroll(\n    params: Omit<MFAEnrollWebauthnParams, 'factorType'>\n  ): Promise<AuthMFAEnrollWebauthnResponse> {\n    return this.client.mfa.enroll({ ...params, factorType: 'webauthn' })\n  }\n\n  /**\n   * Challenge for WebAuthn credential creation or authentication.\n   * Combines server challenge with browser credential operations.\n   * Handles both registration (create) and authentication (request) flows.\n   *\n   * @experimental This method is experimental and may change in future releases\n   * @param {MFAChallengeWebauthnParams & { friendlyName?: string; signal?: AbortSignal }} params - Challenge parameters including factorId\n   * @param {Object} overrides - Allows you to override the parameters passed to navigator.credentials\n   * @param {PublicKeyCredentialCreationOptionsFuture} overrides.create - Override options for credential creation\n   * @param {PublicKeyCredentialRequestOptionsFuture} overrides.request - Override options for credential request\n   * @returns {Promise<RequestResult>} Challenge response with credential or error\n   * @see {@link https://w3c.github.io/webauthn/#sctn-credential-creation W3C WebAuthn Spec - Credential Creation}\n   * @see {@link https://w3c.github.io/webauthn/#sctn-verifying-assertion W3C WebAuthn Spec - Verifying Assertion}\n   */\n  public async _challenge(\n    {\n      factorId,\n      webauthn,\n      friendlyName,\n      signal,\n    }: MFAChallengeWebauthnParams & { friendlyName?: string; signal?: AbortSignal },\n    overrides?:\n      | {\n          create?: Partial<PublicKeyCredentialCreationOptionsFuture>\n          request?: never\n        }\n      | {\n          create?: never\n          request?: Partial<PublicKeyCredentialRequestOptionsFuture>\n        }\n  ): Promise<\n    RequestResult<\n      { factorId: string; challengeId: string } & {\n        webauthn: StrictOmit<\n          MFAVerifyWebauthnParamFields<'create' | 'request'>['webauthn'],\n          'rpId' | 'rpOrigins'\n        >\n      },\n      WebAuthnError | AuthError\n    >\n  > {\n    try {\n      // Get challenge from server using the client's MFA methods\n      const { data: challengeResponse, error: challengeError } = await this.client.mfa.challenge({\n        factorId,\n        webauthn,\n      })\n\n      if (!challengeResponse) {\n        return { data: null, error: challengeError }\n      }\n\n      const abortSignal = signal ?? webAuthnAbortService.createNewAbortSignal()\n\n      /** webauthn will fail if either of the name/displayname are blank */\n      if (challengeResponse.webauthn.type === 'create') {\n        const { user } = challengeResponse.webauthn.credential_options.publicKey\n        if (!user.name) {\n          // Preserve original format: use friendlyName if provided, otherwise fetch fallback\n          // This maintains backward compatibility with the ${user.id}:${name} format\n          const nameToUse = friendlyName\n          if (!nameToUse) {\n            // Only fetch user data if friendlyName is not provided (bug fix for null friendlyName)\n            const currentUser = await this.client.getUser()\n            const userData = currentUser.data.user\n            const fallbackName =\n              userData?.user_metadata?.name || userData?.email || userData?.id || 'User'\n            user.name = `${user.id}:${fallbackName}`\n          } else {\n            user.name = `${user.id}:${nameToUse}`\n          }\n        }\n        if (!user.displayName) {\n          user.displayName = user.name\n        }\n      }\n\n      switch (challengeResponse.webauthn.type) {\n        case 'create': {\n          const options = mergeCredentialCreationOptions(\n            challengeResponse.webauthn.credential_options.publicKey,\n            overrides?.create\n          )\n\n          const { data, error } = await createCredential({\n            publicKey: options,\n            signal: abortSignal,\n          })\n\n          if (data) {\n            return {\n              data: {\n                factorId,\n                challengeId: challengeResponse.id,\n                webauthn: {\n                  type: challengeResponse.webauthn.type,\n                  credential_response: data,\n                },\n              },\n              error: null,\n            }\n          }\n          return { data: null, error }\n        }\n\n        case 'request': {\n          const options = mergeCredentialRequestOptions(\n            challengeResponse.webauthn.credential_options.publicKey,\n            overrides?.request\n          )\n\n          const { data, error } = await getCredential({\n            ...challengeResponse.webauthn.credential_options,\n            publicKey: options,\n            signal: abortSignal,\n          })\n\n          if (data) {\n            return {\n              data: {\n                factorId,\n                challengeId: challengeResponse.id,\n                webauthn: {\n                  type: challengeResponse.webauthn.type,\n                  credential_response: data,\n                },\n              },\n              error: null,\n            }\n          }\n          return { data: null, error }\n        }\n      }\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n      return {\n        data: null,\n        error: new AuthUnknownError('Unexpected error in challenge', error),\n      }\n    }\n  }\n\n  /**\n   * Verify a WebAuthn credential with the server.\n   * Completes the WebAuthn ceremony by sending the credential to the server for verification.\n   *\n   * @experimental This method is experimental and may change in future releases\n   * @param {Object} params - Verification parameters\n   * @param {string} params.challengeId - ID of the challenge being verified\n   * @param {string} params.factorId - ID of the WebAuthn factor\n   * @param {MFAVerifyWebauthnParams<T>['webauthn']} params.webauthn - WebAuthn credential response\n   * @returns {Promise<AuthMFAVerifyResponse>} Verification result with session or error\n   * @see {@link https://w3c.github.io/webauthn/#sctn-verifying-assertion W3C WebAuthn Spec - Verifying an Authentication Assertion}\n   * */\n  public async _verify<T extends 'create' | 'request'>({\n    challengeId,\n    factorId,\n    webauthn,\n  }: {\n    challengeId: string\n    factorId: string\n    webauthn: MFAVerifyWebauthnParams<T>['webauthn']\n  }): Promise<AuthMFAVerifyResponse> {\n    return this.client.mfa.verify({\n      factorId,\n      challengeId,\n      webauthn: webauthn,\n    })\n  }\n\n  /**\n   * Complete WebAuthn authentication flow.\n   * Performs challenge and verification in a single operation for existing credentials.\n   *\n   * @experimental This method is experimental and may change in future releases\n   * @param {Object} params - Authentication parameters\n   * @param {string} params.factorId - ID of the WebAuthn factor to authenticate with\n   * @param {Object} params.webauthn - WebAuthn configuration\n   * @param {string} params.webauthn.rpId - Relying Party ID (defaults to current hostname)\n   * @param {string[]} params.webauthn.rpOrigins - Allowed origins (defaults to current origin)\n   * @param {AbortSignal} params.webauthn.signal - Optional abort signal\n   * @param {PublicKeyCredentialRequestOptionsFuture} overrides - Override options for navigator.credentials.get\n   * @returns {Promise<RequestResult<AuthMFAVerifyResponseData, WebAuthnError | AuthError>>} Authentication result\n   * @see {@link https://w3c.github.io/webauthn/#sctn-authentication W3C WebAuthn Spec - Authentication Ceremony}\n   * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredentialRequestOptions MDN - PublicKeyCredentialRequestOptions}\n   */\n  public async _authenticate(\n    {\n      factorId,\n      webauthn: {\n        rpId = typeof window !== 'undefined' ? window.location.hostname : undefined,\n        rpOrigins = typeof window !== 'undefined' ? [window.location.origin] : undefined,\n        signal,\n      } = {},\n    }: {\n      factorId: string\n      webauthn?: {\n        rpId?: string\n        rpOrigins?: string[]\n        signal?: AbortSignal\n      }\n    },\n    overrides?: PublicKeyCredentialRequestOptionsFuture\n  ): Promise<RequestResult<AuthMFAVerifyResponseData, WebAuthnError | AuthError>> {\n    if (!rpId) {\n      return {\n        data: null,\n        error: new AuthError('rpId is required for WebAuthn authentication'),\n      }\n    }\n    try {\n      if (!browserSupportsWebAuthn()) {\n        return {\n          data: null,\n          error: new AuthUnknownError('Browser does not support WebAuthn', null),\n        }\n      }\n\n      // Get challenge and credential\n      const { data: challengeResponse, error: challengeError } = await this.challenge(\n        {\n          factorId,\n          webauthn: { rpId, rpOrigins },\n          signal,\n        },\n        { request: overrides }\n      )\n\n      if (!challengeResponse) {\n        return { data: null, error: challengeError }\n      }\n\n      const { webauthn } = challengeResponse\n\n      // Verify credential\n      return this._verify({\n        factorId,\n        challengeId: challengeResponse.challengeId,\n        webauthn: {\n          type: webauthn.type,\n          rpId,\n          rpOrigins,\n          credential_response: webauthn.credential_response,\n        },\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n      return {\n        data: null,\n        error: new AuthUnknownError('Unexpected error in authenticate', error),\n      }\n    }\n  }\n\n  /**\n   * Complete WebAuthn registration flow.\n   * Performs enrollment, challenge, and verification in a single operation for new credentials.\n   *\n   * @experimental This method is experimental and may change in future releases\n   * @param {Object} params - Registration parameters\n   * @param {string} params.friendlyName - User-friendly name for the credential\n   * @param {string} params.rpId - Relying Party ID (defaults to current hostname)\n   * @param {string[]} params.rpOrigins - Allowed origins (defaults to current origin)\n   * @param {AbortSignal} params.signal - Optional abort signal\n   * @param {PublicKeyCredentialCreationOptionsFuture} overrides - Override options for navigator.credentials.create\n   * @returns {Promise<RequestResult<AuthMFAVerifyResponseData, WebAuthnError | AuthError>>} Registration result\n   * @see {@link https://w3c.github.io/webauthn/#sctn-registering-a-new-credential W3C WebAuthn Spec - Registration Ceremony}\n   * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredentialCreationOptions MDN - PublicKeyCredentialCreationOptions}\n   */\n  public async _register(\n    {\n      friendlyName,\n      webauthn: {\n        rpId = typeof window !== 'undefined' ? window.location.hostname : undefined,\n        rpOrigins = typeof window !== 'undefined' ? [window.location.origin] : undefined,\n        signal,\n      } = {},\n    }: {\n      friendlyName: string\n      webauthn?: {\n        rpId?: string\n        rpOrigins?: string[]\n        signal?: AbortSignal\n      }\n    },\n    overrides?: Partial<PublicKeyCredentialCreationOptionsFuture>\n  ): Promise<RequestResult<AuthMFAVerifyResponseData, WebAuthnError | AuthError>> {\n    if (!rpId) {\n      return {\n        data: null,\n        error: new AuthError('rpId is required for WebAuthn registration'),\n      }\n    }\n    try {\n      if (!browserSupportsWebAuthn()) {\n        return {\n          data: null,\n          error: new AuthUnknownError('Browser does not support WebAuthn', null),\n        }\n      }\n\n      // Enroll factor\n      const { data: factor, error: enrollError } = await this._enroll({\n        friendlyName,\n      })\n\n      if (!factor) {\n        await this.client.mfa\n          .listFactors()\n          .then((factors) =>\n            factors.data?.all.find(\n              (v) =>\n                v.factor_type === 'webauthn' &&\n                v.friendly_name === friendlyName &&\n                v.status !== 'unverified'\n            )\n          )\n          .then((factor) => (factor ? this.client.mfa.unenroll({ factorId: factor?.id }) : void 0))\n        return { data: null, error: enrollError }\n      }\n\n      // Get challenge and create credential\n      const { data: challengeResponse, error: challengeError } = await this._challenge(\n        {\n          factorId: factor.id,\n          friendlyName: factor.friendly_name,\n          webauthn: { rpId, rpOrigins },\n          signal,\n        },\n        {\n          create: overrides,\n        }\n      )\n\n      if (!challengeResponse) {\n        return { data: null, error: challengeError }\n      }\n\n      return this._verify({\n        factorId: factor.id,\n        challengeId: challengeResponse.challengeId,\n        webauthn: {\n          rpId,\n          rpOrigins,\n          type: challengeResponse.webauthn.type,\n          credential_response: challengeResponse.webauthn.credential_response,\n        },\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return { data: null, error }\n      }\n      return {\n        data: null,\n        error: new AuthUnknownError('Unexpected error in register', error),\n      }\n    }\n  }\n}\n", "import GoTrueAdminApi from './GoTrueAdminApi'\nimport {\n  AUTO_REFRESH_TICK_DURATION_MS,\n  AUTO_REFRESH_TICK_THRESHOLD,\n  DEFAULT_HEADERS,\n  EXPIRY_MARGIN_MS,\n  GOTRUE_URL,\n  JWKS_TTL,\n  STORAGE_KEY,\n} from './lib/constants'\nimport {\n  AuthError,\n  AuthImplicitGrantRedirectError,\n  AuthInvalidCredentialsError,\n  AuthInvalidJwtError,\n  AuthInvalidTokenResponseError,\n  AuthPKCECodeVerifierMissingError,\n  AuthPKCEGrantCodeExchangeError,\n  AuthSessionMissingError,\n  AuthUnknownError,\n  isAuthApiError,\n  isAuthError,\n  isAuthImplicitGrantRedirectError,\n  isAuthRetryableFetchError,\n  isAuthSessionMissingError,\n} from './lib/errors'\nimport {\n  Fetch,\n  _request,\n  _sessionResponse,\n  _sessionResponsePassword,\n  _ssoResponse,\n  _userResponse,\n} from './lib/fetch'\nimport {\n  assertPasskeyExperimentalEnabled,\n  decodeJWT,\n  deepClone,\n  Deferred,\n  generateCallbackId,\n  getAlgorithm,\n  getCodeChallengeAndMethod,\n  getItemAsync,\n  insecureUserWarningProxy,\n  isBrowser,\n  parseParametersFromURL,\n  removeItemAsync,\n  resolveFetch,\n  retryable,\n  setItemAsync,\n  sleep,\n  supportsLocalStorage,\n  userNotAvailableProxy,\n  validateExp,\n} from './lib/helpers'\nimport { memoryLocalStorageAdapter } from './lib/local-storage'\nimport { LockAcquireTimeoutError, navigatorLock } from './lib/locks'\nimport { polyfillGlobalThis } from './lib/polyfills'\nimport { version } from './lib/version'\n\nimport { bytesToBase64URL, stringToUint8Array } from './lib/base64url'\nimport type {\n  AuthChangeEvent,\n  AuthenticatorAssuranceLevels,\n  AuthFlowType,\n  AuthMFAChallengePhoneResponse,\n  AuthMFAChallengeResponse,\n  AuthMFAChallengeTOTPResponse,\n  AuthMFAChallengeWebauthnResponse,\n  AuthMFAChallengeWebauthnServerResponse,\n  AuthMFAEnrollPhoneResponse,\n  AuthMFAEnrollResponse,\n  AuthMFAEnrollTOTPResponse,\n  AuthMFAEnrollWebauthnResponse,\n  AuthMFAGetAuthenticatorAssuranceLevelResponse,\n  AuthMFAListFactorsResponse,\n  AuthMFAUnenrollResponse,\n  AuthMFAVerifyResponse,\n  AuthOtpResponse,\n  AuthResponse,\n  AuthResponsePassword,\n  AuthTokenResponse,\n  AuthTokenResponsePassword,\n  CallRefreshTokenResult,\n  EthereumWallet,\n  EthereumWeb3Credentials,\n  Factor,\n  GoTrueClientOptions,\n  GoTrueMFAApi,\n  InitializeResult,\n  JWK,\n  JwtHeader,\n  JwtPayload,\n  LockFunc,\n  MFAChallengeAndVerifyParams,\n  MFAChallengeParams,\n  MFAChallengePhoneParams,\n  MFAChallengeTOTPParams,\n  MFAChallengeWebauthnParams,\n  MFAEnrollParams,\n  MFAEnrollPhoneParams,\n  MFAEnrollTOTPParams,\n  MFAEnrollWebauthnParams,\n  MFAUnenrollParams,\n  MFAVerifyParams,\n  MFAVerifyPhoneParams,\n  MFAVerifyTOTPParams,\n  MFAVerifyWebauthnParamFields,\n  MFAVerifyWebauthnParams,\n  OAuthResponse,\n  AuthOAuthServerApi,\n  AuthOAuthAuthorizationDetailsResponse,\n  AuthOAuthConsentResponse,\n  AuthOAuthGrantsResponse,\n  AuthOAuthRevokeGrantResponse,\n  Prettify,\n  Provider,\n  ResendParams,\n  Session,\n  SignInAnonymouslyCredentials,\n  SignInWithIdTokenCredentials,\n  SignInWithOAuthCredentials,\n  SignInWithPasswordCredentials,\n  SignInWithPasswordlessCredentials,\n  SignInWithSSO,\n  SignOut,\n  SignUpWithPasswordCredentials,\n  SolanaWallet,\n  SolanaWeb3Credentials,\n  SSOResponse,\n  StrictOmit,\n  Subscription,\n  SupportedStorage,\n  User,\n  UserAttributes,\n  UserIdentity,\n  UserResponse,\n  VerifyOtpParams,\n  Web3Credentials,\n  AuthPasskeyApi,\n  ExperimentalFeatureFlags,\n  SignInWithPasskeyCredentials,\n  RegisterPasskeyCredentials,\n  VerifyPasskeyRegistrationParams,\n  StartPasskeyAuthenticationParams,\n  VerifyPasskeyAuthenticationParams,\n  PasskeyUpdateParams,\n  PasskeyDeleteParams,\n  AuthPasskeyRegistrationOptionsResponse,\n  AuthPasskeyRegistrationVerifyResponse,\n  AuthPasskeyAuthenticationOptionsResponse,\n  AuthPasskeyAuthenticationVerifyResponse,\n  AuthPasskeyListResponse,\n  AuthPasskeyUpdateResponse,\n  AuthPasskeyDeleteResponse,\n} from './lib/types'\nimport {\n  createSiweMessage,\n  fromHex,\n  getAddress,\n  Hex,\n  SiweMessage,\n  toHex,\n} from './lib/web3/ethereum'\nimport {\n  createCredential,\n  deserializeCredentialCreationOptions,\n  deserializeCredentialRequestOptions,\n  getCredential,\n  serializeCredentialCreationResponse,\n  serializeCredentialRequestResponse,\n  browserSupportsWebAuthn,\n  webAuthnAbortService,\n  WebAuthnApi,\n} from './lib/webauthn'\nimport {\n  AuthenticationCredential,\n  PublicKeyCredentialJSON,\n  RegistrationCredential,\n} from './lib/webauthn.dom'\n\npolyfillGlobalThis() // Make \"globalThis\" available\n\nconst DEFAULT_OPTIONS: Omit<\n  Required<GoTrueClientOptions>,\n  'fetch' | 'storage' | 'userStorage' | 'lock'\n> = {\n  url: GOTRUE_URL,\n  storageKey: STORAGE_KEY,\n  autoRefreshToken: true,\n  persistSession: true,\n  detectSessionInUrl: true,\n  headers: DEFAULT_HEADERS,\n  flowType: 'implicit',\n  debug: false,\n  hasCustomAuthorizationHeader: false,\n  throwOnError: false,\n  lockAcquireTimeout: 5000, // 5 seconds\n  skipAutoInitialize: false,\n  experimental: {},\n}\n\nasync function lockNoOp<R>(name: string, acquireTimeout: number, fn: () => Promise<R>): Promise<R> {\n  return await fn()\n}\n\n/**\n * Caches JWKS values for all clients created in the same environment. This is\n * especially useful for shared-memory execution environments such as Vercel's\n * Fluid Compute, AWS Lambda or Supabase's Edge Functions. Regardless of how\n * many clients are created, if they share the same storage key they will use\n * the same JWKS cache, significantly speeding up getClaims() with asymmetric\n * JWTs.\n */\nconst GLOBAL_JWKS: { [storageKey: string]: { cachedAt: number; jwks: { keys: JWK[] } } } = {}\n\nexport default class GoTrueClient {\n  private static nextInstanceID: Record<string, number> = {}\n\n  private instanceID: number\n\n  /**\n   * Namespace for the GoTrue admin methods.\n   * These methods should only be used in a trusted server-side environment.\n   */\n  admin: GoTrueAdminApi\n  /**\n   * Namespace for the MFA methods.\n   */\n  mfa: GoTrueMFAApi\n  /**\n   * Namespace for the OAuth 2.1 authorization server methods.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   * Used to implement the authorization code flow on the consent page.\n   */\n  oauth: AuthOAuthServerApi\n  /**\n   * Namespace for passkey methods.\n   * Includes lower-level two-step registration/authentication and passkey management.\n   *\n   * Requires `auth.experimental.passkey: true`; otherwise all methods throw.\n   */\n  passkey: AuthPasskeyApi\n  /**\n   * The storage key used to identify the values saved in localStorage\n   */\n  protected storageKey: string\n\n  protected flowType: AuthFlowType\n\n  /**\n   * The JWKS used for verifying asymmetric JWTs\n   */\n  protected get jwks() {\n    return GLOBAL_JWKS[this.storageKey]?.jwks ?? { keys: [] }\n  }\n\n  protected set jwks(value: { keys: JWK[] }) {\n    GLOBAL_JWKS[this.storageKey] = { ...GLOBAL_JWKS[this.storageKey], jwks: value }\n  }\n\n  protected get jwks_cached_at() {\n    return GLOBAL_JWKS[this.storageKey]?.cachedAt ?? Number.MIN_SAFE_INTEGER\n  }\n\n  protected set jwks_cached_at(value: number) {\n    GLOBAL_JWKS[this.storageKey] = { ...GLOBAL_JWKS[this.storageKey], cachedAt: value }\n  }\n\n  protected autoRefreshToken: boolean\n  protected persistSession: boolean\n  protected storage: SupportedStorage\n  /**\n   * @experimental\n   */\n  protected userStorage: SupportedStorage | null = null\n  protected memoryStorage: { [key: string]: string } | null = null\n  protected stateChangeEmitters: Map<string | symbol, Subscription> = new Map()\n  protected autoRefreshTicker: ReturnType<typeof setInterval> | null = null\n  protected autoRefreshTickTimeout: ReturnType<typeof setTimeout> | null = null\n  protected visibilityChangedCallback: (() => Promise<any>) | null = null\n  protected refreshingDeferred: Deferred<CallRefreshTokenResult> | null = null\n  /**\n   * Keeps track of the async client initialization.\n   * When null or not yet resolved the auth state is `unknown`\n   * Once resolved the auth state is known and it's safe to call any further client methods.\n   * Keep extra care to never reject or throw uncaught errors\n   */\n  protected initializePromise: Promise<InitializeResult> | null = null\n  protected detectSessionInUrl:\n    | boolean\n    | ((url: URL, params: { [parameter: string]: string }) => boolean) = true\n  protected url: string\n  protected headers: {\n    [key: string]: string\n  }\n  protected hasCustomAuthorizationHeader = false\n  protected suppressGetSessionWarning = false\n  protected fetch: Fetch\n  protected lock: LockFunc\n  protected lockAcquired = false\n  protected pendingInLock: Promise<any>[] = []\n  protected throwOnError: boolean\n  protected lockAcquireTimeout: number\n  /**\n   * Opt-in flags for experimental features. Defaults to an empty object.\n   * See `GoTrueClientOptions.experimental`.\n   */\n  protected experimental: ExperimentalFeatureFlags\n\n  /**\n   * Used to broadcast state change events to other tabs listening.\n   */\n  protected broadcastChannel: BroadcastChannel | null = null\n\n  protected logDebugMessages: boolean\n  protected logger: (message: string, ...args: any[]) => void = console.log\n\n  /**\n   * Create a new client for use in the browser.\n   *\n   * @example Using supabase-js (recommended)\n   * ```ts\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n   * const { data, error } = await supabase.auth.getUser()\n   * ```\n   *\n   * @example Standalone import for bundle-sensitive environments\n   * ```ts\n   * import { GoTrueClient } from '@supabase/auth-js'\n   *\n   * const auth = new GoTrueClient({\n   *   url: 'https://xyzcompany.supabase.co/auth/v1',\n   *   headers: { apikey: 'your-publishable-key' },\n   *   storageKey: 'supabase-auth',\n   * })\n   * ```\n   */\n  constructor(options: GoTrueClientOptions) {\n    const settings = { ...DEFAULT_OPTIONS, ...options }\n    this.storageKey = settings.storageKey\n\n    this.instanceID = GoTrueClient.nextInstanceID[this.storageKey] ?? 0\n    GoTrueClient.nextInstanceID[this.storageKey] = this.instanceID + 1\n\n    this.logDebugMessages = !!settings.debug\n    if (typeof settings.debug === 'function') {\n      this.logger = settings.debug\n    }\n\n    if (this.instanceID > 0 && isBrowser()) {\n      const message = `${this._logPrefix()} Multiple GoTrueClient instances detected in the same browser context. It is not an error, but this should be avoided as it may produce undefined behavior when used concurrently under the same storage key.`\n      console.warn(message)\n      if (this.logDebugMessages) {\n        console.trace(message)\n      }\n    }\n\n    this.persistSession = settings.persistSession\n    this.autoRefreshToken = settings.autoRefreshToken\n    this.experimental = settings.experimental ?? {}\n    this.admin = new GoTrueAdminApi({\n      url: settings.url,\n      headers: settings.headers,\n      fetch: settings.fetch,\n      experimental: this.experimental,\n    })\n\n    this.url = settings.url\n    this.headers = settings.headers\n    this.fetch = resolveFetch(settings.fetch)\n    this.lock = settings.lock || lockNoOp\n    this.detectSessionInUrl = settings.detectSessionInUrl\n    this.flowType = settings.flowType\n    this.hasCustomAuthorizationHeader = settings.hasCustomAuthorizationHeader\n    this.throwOnError = settings.throwOnError\n    this.lockAcquireTimeout = settings.lockAcquireTimeout\n\n    if (settings.lock) {\n      this.lock = settings.lock\n    } else if (this.persistSession && isBrowser() && globalThis?.navigator?.locks) {\n      this.lock = navigatorLock\n    } else {\n      this.lock = lockNoOp\n    }\n\n    if (!this.jwks) {\n      this.jwks = { keys: [] }\n      this.jwks_cached_at = Number.MIN_SAFE_INTEGER\n    }\n\n    this.mfa = {\n      verify: this._verify.bind(this),\n      enroll: this._enroll.bind(this),\n      unenroll: this._unenroll.bind(this),\n      challenge: this._challenge.bind(this),\n      listFactors: this._listFactors.bind(this),\n      challengeAndVerify: this._challengeAndVerify.bind(this),\n      getAuthenticatorAssuranceLevel: this._getAuthenticatorAssuranceLevel.bind(this),\n      webauthn: new WebAuthnApi(this),\n    }\n\n    this.oauth = {\n      getAuthorizationDetails: this._getAuthorizationDetails.bind(this),\n      approveAuthorization: this._approveAuthorization.bind(this),\n      denyAuthorization: this._denyAuthorization.bind(this),\n      listGrants: this._listOAuthGrants.bind(this),\n      revokeGrant: this._revokeOAuthGrant.bind(this),\n    }\n\n    this.passkey = {\n      startRegistration: this._startPasskeyRegistration.bind(this),\n      verifyRegistration: this._verifyPasskeyRegistration.bind(this),\n      startAuthentication: this._startPasskeyAuthentication.bind(this),\n      verifyAuthentication: this._verifyPasskeyAuthentication.bind(this),\n      list: this._listPasskeys.bind(this),\n      update: this._updatePasskey.bind(this),\n      delete: this._deletePasskey.bind(this),\n    }\n\n    if (this.persistSession) {\n      if (settings.storage) {\n        this.storage = settings.storage\n      } else {\n        if (supportsLocalStorage()) {\n          this.storage = globalThis.localStorage\n        } else {\n          this.memoryStorage = {}\n          this.storage = memoryLocalStorageAdapter(this.memoryStorage)\n        }\n      }\n\n      if (settings.userStorage) {\n        this.userStorage = settings.userStorage\n      }\n    } else {\n      this.memoryStorage = {}\n      this.storage = memoryLocalStorageAdapter(this.memoryStorage)\n    }\n\n    if (isBrowser() && globalThis.BroadcastChannel && this.persistSession && this.storageKey) {\n      try {\n        this.broadcastChannel = new globalThis.BroadcastChannel(this.storageKey)\n      } catch (e) {\n        console.error(\n          'Failed to create a new BroadcastChannel, multi-tab state changes will not be available',\n          e\n        )\n      }\n\n      this.broadcastChannel?.addEventListener('message', async (event) => {\n        this._debug('received broadcast notification from other tab or client', event)\n\n        try {\n          await this._notifyAllSubscribers(event.data.event, event.data.session, false) // broadcast = false so we don't get an endless loop of messages\n        } catch (error) {\n          this._debug('#broadcastChannel', 'error', error)\n        }\n      })\n    }\n\n    // Only auto-initialize if not explicitly disabled. Skipped in SSR contexts\n    // where initialization timing must be controlled. All public methods have\n    // lazy initialization, so the client remains fully functional.\n    if (!settings.skipAutoInitialize) {\n      this.initialize().catch((error) => {\n        this._debug('#initialize()', 'error', error)\n      })\n    }\n  }\n\n  /**\n   * Returns whether error throwing mode is enabled for this client.\n   */\n  public isThrowOnErrorEnabled(): boolean {\n    return this.throwOnError\n  }\n\n  /**\n   * Centralizes return handling with optional error throwing. When `throwOnError` is enabled\n   * and the provided result contains a non-nullish error, the error is thrown instead of\n   * being returned. This ensures consistent behavior across all public API methods.\n   */\n  private _returnResult<T extends { error: any }>(result: T): T {\n    if (this.throwOnError && result && result.error) {\n      throw result.error\n    }\n    return result\n  }\n\n  private _logPrefix(): string {\n    return (\n      'GoTrueClient@' +\n      `${this.storageKey}:${this.instanceID} (${version}) ${new Date().toISOString()}`\n    )\n  }\n\n  private _debug(...args: any[]): GoTrueClient {\n    if (this.logDebugMessages) {\n      this.logger(this._logPrefix(), ...args)\n    }\n\n    return this\n  }\n\n  /**\n   * Initializes the client session either from the url or from storage.\n   * This method is automatically called when instantiating the client, but should also be called\n   * manually when checking for an error from an auth redirect (oauth, magiclink, password recovery, etc).\n   *\n   * @category Auth\n   */\n  async initialize(): Promise<InitializeResult> {\n    if (this.initializePromise) {\n      return await this.initializePromise\n    }\n\n    this.initializePromise = (async () => {\n      return await this._acquireLock(this.lockAcquireTimeout, async () => {\n        return await this._initialize()\n      })\n    })()\n\n    return await this.initializePromise\n  }\n\n  /**\n   * IMPORTANT:\n   * 1. Never throw in this method, as it is called from the constructor\n   * 2. Never return a session from this method as it would be cached over\n   *    the whole lifetime of the client\n   */\n  private async _initialize(): Promise<InitializeResult> {\n    try {\n      let params: { [parameter: string]: string } = {}\n      let callbackUrlType = 'none'\n\n      if (isBrowser()) {\n        params = parseParametersFromURL(window.location.href)\n        if (this._isImplicitGrantCallback(params)) {\n          callbackUrlType = 'implicit'\n        } else if (await this._isPKCECallback(params)) {\n          callbackUrlType = 'pkce'\n        }\n      }\n\n      /**\n       * Attempt to get the session from the URL only if these conditions are fulfilled\n       *\n       * Note: If the URL isn't one of the callback url types (implicit or pkce),\n       * then there could be an existing session so we don't want to prematurely remove it\n       */\n      if (isBrowser() && this.detectSessionInUrl && callbackUrlType !== 'none') {\n        const { data, error } = await this._getSessionFromURL(params, callbackUrlType)\n        if (error) {\n          this._debug('#_initialize()', 'error detecting session from URL', error)\n\n          if (isAuthImplicitGrantRedirectError(error)) {\n            const errorCode = error.details?.code\n            if (\n              errorCode === 'identity_already_exists' ||\n              errorCode === 'identity_not_found' ||\n              errorCode === 'single_identity_not_deletable'\n            ) {\n              return { error }\n            }\n          }\n\n          // Don't remove existing session on URL login failure.\n          // A failed attempt (e.g. reused magic link) shouldn't invalidate a valid session.\n\n          return { error }\n        }\n\n        const { session, redirectType } = data\n\n        this._debug(\n          '#_initialize()',\n          'detected session in URL',\n          session,\n          'redirect type',\n          redirectType\n        )\n\n        await this._saveSession(session)\n\n        setTimeout(async () => {\n          if (redirectType === 'recovery') {\n            await this._notifyAllSubscribers('PASSWORD_RECOVERY', session)\n          } else {\n            await this._notifyAllSubscribers('SIGNED_IN', session)\n          }\n        }, 0)\n\n        return { error: null }\n      }\n      // no login attempt via callback url try to recover session from storage\n      await this._recoverAndRefresh()\n      return { error: null }\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ error })\n      }\n\n      return this._returnResult({\n        error: new AuthUnknownError('Unexpected error during initialization', error),\n      })\n    } finally {\n      await this._handleVisibilityChange()\n      this._debug('#_initialize()', 'end')\n    }\n  }\n\n  /**\n   * Creates a new anonymous user.\n   *\n   * @returns A session where the is_anonymous claim in the access token JWT set to true\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - Returns an anonymous user\n   * - It is recommended to set up captcha for anonymous sign-ins to prevent abuse. You can pass in the captcha token in the `options` param.\n   *\n   * @example Create an anonymous user\n   * ```js\n   * const { data, error } = await supabase.auth.signInAnonymously({\n   *   options: {\n   *     captchaToken\n   *   }\n   * });\n   * ```\n   *\n   * @exampleResponse Create an anonymous user\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"user\": {\n   *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *       \"aud\": \"authenticated\",\n   *       \"role\": \"authenticated\",\n   *       \"email\": \"\",\n   *       \"phone\": \"\",\n   *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *       \"app_metadata\": {},\n   *       \"user_metadata\": {},\n   *       \"identities\": [],\n   *       \"created_at\": \"2024-01-01T00:00:00Z\",\n   *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *       \"is_anonymous\": true\n   *     },\n   *     \"session\": {\n   *       \"access_token\": \"<ACCESS_TOKEN>\",\n   *       \"token_type\": \"bearer\",\n   *       \"expires_in\": 3600,\n   *       \"expires_at\": 1700000000,\n   *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n   *       \"user\": {\n   *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *         \"aud\": \"authenticated\",\n   *         \"role\": \"authenticated\",\n   *         \"email\": \"\",\n   *         \"phone\": \"\",\n   *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *         \"app_metadata\": {},\n   *         \"user_metadata\": {},\n   *         \"identities\": [],\n   *         \"created_at\": \"2024-01-01T00:00:00Z\",\n   *         \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *         \"is_anonymous\": true\n   *       }\n   *     }\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @example Create an anonymous user with custom user metadata\n   * ```js\n   * const { data, error } = await supabase.auth.signInAnonymously({\n   *   options: {\n   *     data\n   *   }\n   * })\n   * ```\n   */\n  async signInAnonymously(credentials?: SignInAnonymouslyCredentials): Promise<AuthResponse> {\n    try {\n      const res = await _request(this.fetch, 'POST', `${this.url}/signup`, {\n        headers: this.headers,\n        body: {\n          data: credentials?.options?.data ?? {},\n          gotrue_meta_security: { captcha_token: credentials?.options?.captchaToken },\n        },\n        xform: _sessionResponse,\n      })\n      const { data, error } = res\n\n      if (error || !data) {\n        return this._returnResult({ data: { user: null, session: null }, error: error })\n      }\n      const session: Session | null = data.session\n      const user: User | null = data.user\n\n      if (data.session) {\n        await this._saveSession(data.session)\n        await this._notifyAllSubscribers('SIGNED_IN', session)\n      }\n\n      return this._returnResult({ data: { user, session }, error: null })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { user: null, session: null }, error })\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Creates a new user.\n   *\n   * Be aware that if a user account exists in the system you may get back an\n   * error message that attempts to hide this information from the user.\n   * This method has support for PKCE via email signups. The PKCE flow cannot be used when autoconfirm is enabled.\n   *\n   * @returns A logged-in session if the server has \"autoconfirm\" ON\n   * @returns A user if the server has \"autoconfirm\" OFF\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - By default, the user needs to verify their email address before logging in. To turn this off, disable **Confirm email** in [your project](/dashboard/project/_/auth/providers).\n   * - **Confirm email** determines if users need to confirm their email address after signing up.\n   *   - If **Confirm email** is enabled, a `user` is returned but `session` is null.\n   *   - If **Confirm email** is disabled, both a `user` and a `session` are returned.\n   * - When the user confirms their email address, they are redirected to the [`SITE_URL`](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) by default. You can modify your `SITE_URL` or add additional redirect URLs in [your project](/dashboard/project/_/auth/url-configuration).\n   * - If signUp() is called for an existing confirmed user:\n   *   - When both **Confirm email** and **Confirm phone** (even when phone provider is disabled) are enabled in [your project](/dashboard/project/_/auth/providers), an obfuscated/fake user object is returned.\n   *   - When either **Confirm email** or **Confirm phone** (even when phone provider is disabled) is disabled, the error message, `User already registered` is returned.\n   * - To fetch the currently logged-in user, refer to [`getUser()`](/docs/reference/javascript/auth-getuser).\n   *\n   * @example Sign up with an email and password\n   * ```js\n   * const { data, error } = await supabase.auth.signUp({\n   *   email: 'example@email.com',\n   *   password: 'example-password',\n   * })\n   * ```\n   *\n   * @exampleResponse Sign up with an email and password\n   * ```json\n   * // Some fields may be null if \"confirm email\" is enabled.\n   * {\n   *   \"data\": {\n   *     \"user\": {\n   *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *       \"aud\": \"authenticated\",\n   *       \"role\": \"authenticated\",\n   *       \"email\": \"example@email.com\",\n   *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *       \"phone\": \"\",\n   *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *       \"app_metadata\": {\n   *         \"provider\": \"email\",\n   *         \"providers\": [\n   *           \"email\"\n   *         ]\n   *       },\n   *       \"user_metadata\": {},\n   *       \"identities\": [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"identity_data\": {\n   *             \"email\": \"example@email.com\",\n   *             \"email_verified\": false,\n   *             \"phone_verified\": false,\n   *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *           },\n   *           \"provider\": \"email\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"example@email.com\"\n   *         }\n   *       ],\n   *       \"created_at\": \"2024-01-01T00:00:00Z\",\n   *       \"updated_at\": \"2024-01-01T00:00:00Z\"\n   *     },\n   *     \"session\": {\n   *       \"access_token\": \"<ACCESS_TOKEN>\",\n   *       \"token_type\": \"bearer\",\n   *       \"expires_in\": 3600,\n   *       \"expires_at\": 1700000000,\n   *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n   *       \"user\": {\n   *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *         \"aud\": \"authenticated\",\n   *         \"role\": \"authenticated\",\n   *         \"email\": \"example@email.com\",\n   *         \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *         \"phone\": \"\",\n   *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *         \"app_metadata\": {\n   *           \"provider\": \"email\",\n   *           \"providers\": [\n   *             \"email\"\n   *           ]\n   *         },\n   *         \"user_metadata\": {},\n   *         \"identities\": [\n   *           {\n   *             \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *             \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *             \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *             \"identity_data\": {\n   *               \"email\": \"example@email.com\",\n   *               \"email_verified\": false,\n   *               \"phone_verified\": false,\n   *               \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *             },\n   *             \"provider\": \"email\",\n   *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *             \"created_at\": \"2024-01-01T00:00:00Z\",\n   *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *             \"email\": \"example@email.com\"\n   *           }\n   *         ],\n   *         \"created_at\": \"2024-01-01T00:00:00Z\",\n   *         \"updated_at\": \"2024-01-01T00:00:00Z\"\n   *       }\n   *     }\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @example Sign up with a phone number and password (SMS)\n   * ```js\n   * const { data, error } = await supabase.auth.signUp({\n   *   phone: '123456789',\n   *   password: 'example-password',\n   *   options: {\n   *     channel: 'sms'\n   *   }\n   * })\n   * ```\n   *\n   * @exampleDescription Sign up with a phone number and password (whatsapp)\n   * The user will be sent a WhatsApp message which contains a OTP. By default, a given user can only request a OTP once every 60 seconds. Note that a user will need to have a valid WhatsApp account that is linked to Twilio in order to use this feature.\n   *\n   * @example Sign up with a phone number and password (whatsapp)\n   * ```js\n   * const { data, error } = await supabase.auth.signUp({\n   *   phone: '123456789',\n   *   password: 'example-password',\n   *   options: {\n   *     channel: 'whatsapp'\n   *   }\n   * })\n   * ```\n   *\n   * @example Sign up with additional user metadata\n   * ```js\n   * const { data, error } = await supabase.auth.signUp(\n   *   {\n   *     email: 'example@email.com',\n   *     password: 'example-password',\n   *     options: {\n   *       data: {\n   *         first_name: 'John',\n   *         age: 27,\n   *       }\n   *     }\n   *   }\n   * )\n   * ```\n   *\n   * @exampleDescription Sign up with a redirect URL\n   * - See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project.\n   *\n   * @example Sign up with a redirect URL\n   * ```js\n   * const { data, error } = await supabase.auth.signUp(\n   *   {\n   *     email: 'example@email.com',\n   *     password: 'example-password',\n   *     options: {\n   *       emailRedirectTo: 'https://example.com/welcome'\n   *     }\n   *   }\n   * )\n   * ```\n   */\n  async signUp(credentials: SignUpWithPasswordCredentials): Promise<AuthResponse> {\n    try {\n      let res: AuthResponse\n      if ('email' in credentials) {\n        const { email, password, options } = credentials\n        let codeChallenge: string | null = null\n        let codeChallengeMethod: string | null = null\n        if (this.flowType === 'pkce') {\n          ;[codeChallenge, codeChallengeMethod] = await getCodeChallengeAndMethod(\n            this.storage,\n            this.storageKey\n          )\n        }\n        res = await _request(this.fetch, 'POST', `${this.url}/signup`, {\n          headers: this.headers,\n          redirectTo: options?.emailRedirectTo,\n          body: {\n            email,\n            password,\n            data: options?.data ?? {},\n            gotrue_meta_security: { captcha_token: options?.captchaToken },\n            code_challenge: codeChallenge,\n            code_challenge_method: codeChallengeMethod,\n          },\n          xform: _sessionResponse,\n        })\n      } else if ('phone' in credentials) {\n        const { phone, password, options } = credentials\n        res = await _request(this.fetch, 'POST', `${this.url}/signup`, {\n          headers: this.headers,\n          body: {\n            phone,\n            password,\n            data: options?.data ?? {},\n            channel: options?.channel ?? 'sms',\n            gotrue_meta_security: { captcha_token: options?.captchaToken },\n          },\n          xform: _sessionResponse,\n        })\n      } else {\n        throw new AuthInvalidCredentialsError(\n          'You must provide either an email or phone number and a password'\n        )\n      }\n\n      const { data, error } = res\n\n      if (error || !data) {\n        await removeItemAsync(this.storage, `${this.storageKey}-code-verifier`)\n        return this._returnResult({ data: { user: null, session: null }, error: error })\n      }\n\n      const session: Session | null = data.session\n      const user: User | null = data.user\n\n      if (data.session) {\n        await this._saveSession(data.session)\n        await this._notifyAllSubscribers('SIGNED_IN', session)\n      }\n\n      return this._returnResult({ data: { user, session }, error: null })\n    } catch (error) {\n      await removeItemAsync(this.storage, `${this.storageKey}-code-verifier`)\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { user: null, session: null }, error })\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Log in an existing user with an email and password or phone and password.\n   *\n   * Be aware that you may get back an error message that will not distinguish\n   * between the cases where the account does not exist or that the\n   * email/phone and password combination is wrong or that the account can only\n   * be accessed via social login.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - Requires either an email and password or a phone number and password.\n   *\n   * @example Sign in with email and password\n   * ```js\n   * const { data, error } = await supabase.auth.signInWithPassword({\n   *   email: 'example@email.com',\n   *   password: 'example-password',\n   * })\n   * ```\n   *\n   * @exampleResponse Sign in with email and password\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"user\": {\n   *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *       \"aud\": \"authenticated\",\n   *       \"role\": \"authenticated\",\n   *       \"email\": \"example@email.com\",\n   *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *       \"phone\": \"\",\n   *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *       \"app_metadata\": {\n   *         \"provider\": \"email\",\n   *         \"providers\": [\n   *           \"email\"\n   *         ]\n   *       },\n   *       \"user_metadata\": {},\n   *       \"identities\": [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"identity_data\": {\n   *             \"email\": \"example@email.com\",\n   *             \"email_verified\": false,\n   *             \"phone_verified\": false,\n   *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *           },\n   *           \"provider\": \"email\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"example@email.com\"\n   *         }\n   *       ],\n   *       \"created_at\": \"2024-01-01T00:00:00Z\",\n   *       \"updated_at\": \"2024-01-01T00:00:00Z\"\n   *     },\n   *     \"session\": {\n   *       \"access_token\": \"<ACCESS_TOKEN>\",\n   *       \"token_type\": \"bearer\",\n   *       \"expires_in\": 3600,\n   *       \"expires_at\": 1700000000,\n   *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n   *       \"user\": {\n   *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *         \"aud\": \"authenticated\",\n   *         \"role\": \"authenticated\",\n   *         \"email\": \"example@email.com\",\n   *         \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *         \"phone\": \"\",\n   *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *         \"app_metadata\": {\n   *           \"provider\": \"email\",\n   *           \"providers\": [\n   *             \"email\"\n   *           ]\n   *         },\n   *         \"user_metadata\": {},\n   *         \"identities\": [\n   *           {\n   *             \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *             \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *             \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *             \"identity_data\": {\n   *               \"email\": \"example@email.com\",\n   *               \"email_verified\": false,\n   *               \"phone_verified\": false,\n   *               \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *             },\n   *             \"provider\": \"email\",\n   *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *             \"created_at\": \"2024-01-01T00:00:00Z\",\n   *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *             \"email\": \"example@email.com\"\n   *           }\n   *         ],\n   *         \"created_at\": \"2024-01-01T00:00:00Z\",\n   *         \"updated_at\": \"2024-01-01T00:00:00Z\"\n   *       }\n   *     }\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @example Sign in with phone and password\n   * ```js\n   * const { data, error } = await supabase.auth.signInWithPassword({\n   *   phone: '+13334445555',\n   *   password: 'some-password',\n   * })\n   * ```\n   */\n  async signInWithPassword(\n    credentials: SignInWithPasswordCredentials\n  ): Promise<AuthTokenResponsePassword> {\n    try {\n      let res: AuthResponsePassword\n      if ('email' in credentials) {\n        const { email, password, options } = credentials\n        res = await _request(this.fetch, 'POST', `${this.url}/token?grant_type=password`, {\n          headers: this.headers,\n          body: {\n            email,\n            password,\n            gotrue_meta_security: { captcha_token: options?.captchaToken },\n          },\n          xform: _sessionResponsePassword,\n        })\n      } else if ('phone' in credentials) {\n        const { phone, password, options } = credentials\n        res = await _request(this.fetch, 'POST', `${this.url}/token?grant_type=password`, {\n          headers: this.headers,\n          body: {\n            phone,\n            password,\n            gotrue_meta_security: { captcha_token: options?.captchaToken },\n          },\n          xform: _sessionResponsePassword,\n        })\n      } else {\n        throw new AuthInvalidCredentialsError(\n          'You must provide either an email or phone number and a password'\n        )\n      }\n      const { data, error } = res\n\n      if (error) {\n        return this._returnResult({ data: { user: null, session: null }, error })\n      } else if (!data || !data.session || !data.user) {\n        const invalidTokenError = new AuthInvalidTokenResponseError()\n        return this._returnResult({ data: { user: null, session: null }, error: invalidTokenError })\n      }\n      if (data.session) {\n        await this._saveSession(data.session)\n        await this._notifyAllSubscribers('SIGNED_IN', data.session)\n      }\n      return this._returnResult({\n        data: {\n          user: data.user,\n          session: data.session,\n          ...(data.weak_password ? { weakPassword: data.weak_password } : null),\n        },\n        error,\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { user: null, session: null }, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Log in an existing user via a third-party provider.\n   * This method supports the PKCE flow.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - This method is used for signing in using [Social Login (OAuth) providers](/docs/guides/auth#configure-third-party-providers).\n   * - It works by redirecting your application to the provider's authorization screen, before bringing back the user to your app.\n   *\n   * @example Sign in using a third-party provider\n   * ```js\n   * const { data, error } = await supabase.auth.signInWithOAuth({\n   *   provider: 'github'\n   * })\n   * ```\n   *\n   * @exampleResponse Sign in using a third-party provider\n   * ```json\n   * {\n   *   data: {\n   *     provider: 'github',\n   *     url: <PROVIDER_URL_TO_REDIRECT_TO>\n   *   },\n   *   error: null\n   * }\n   * ```\n   *\n   * @exampleDescription Sign in using a third-party provider with redirect\n   * - When the OAuth provider successfully authenticates the user, they are redirected to the URL specified in the `redirectTo` parameter. This parameter defaults to the [`SITE_URL`](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls). It does not redirect the user immediately after invoking this method.\n   * - See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project.\n   *\n   * @example Sign in using a third-party provider with redirect\n   * ```js\n   * const { data, error } = await supabase.auth.signInWithOAuth({\n   *   provider: 'github',\n   *   options: {\n   *     redirectTo: 'https://example.com/welcome'\n   *   }\n   * })\n   * ```\n   *\n   * @exampleDescription Sign in with scopes and access provider tokens\n   * If you need additional access from an OAuth provider, in order to access provider specific APIs in the name of the user, you can do this by passing in the scopes the user should authorize for your application. Note that the `scopes` option takes in **a space-separated list** of scopes.\n   *\n   * Because OAuth sign-in often includes redirects, you should register an `onAuthStateChange` callback immediately after you create the Supabase client. This callback will listen for the presence of `provider_token` and `provider_refresh_token` properties on the `session` object and store them in local storage. The client library will emit these values **only once** immediately after the user signs in. You can then access them by looking them up in local storage, or send them to your backend servers for further processing.\n   *\n   * Finally, make sure you remove them from local storage on the `SIGNED_OUT` event. If the OAuth provider supports token revocation, make sure you call those APIs either from the frontend or schedule them to be called on the backend.\n   *\n   * @example Sign in with scopes and access provider tokens\n   * ```js\n   * // Register this immediately after calling createClient!\n   * // Because signInWithOAuth causes a redirect, you need to fetch the\n   * // provider tokens from the callback.\n   * supabase.auth.onAuthStateChange((event, session) => {\n   *   if (session && session.provider_token) {\n   *     window.localStorage.setItem('oauth_provider_token', session.provider_token)\n   *   }\n   *\n   *   if (session && session.provider_refresh_token) {\n   *     window.localStorage.setItem('oauth_provider_refresh_token', session.provider_refresh_token)\n   *   }\n   *\n   *   if (event === 'SIGNED_OUT') {\n   *     window.localStorage.removeItem('oauth_provider_token')\n   *     window.localStorage.removeItem('oauth_provider_refresh_token')\n   *   }\n   * })\n   *\n   * // Call this on your Sign in with GitHub button to initiate OAuth\n   * // with GitHub with the requested elevated scopes.\n   * await supabase.auth.signInWithOAuth({\n   *   provider: 'github',\n   *   options: {\n   *     scopes: 'repo gist notifications'\n   *   }\n   * })\n   * ```\n   */\n  async signInWithOAuth(credentials: SignInWithOAuthCredentials): Promise<OAuthResponse> {\n    return await this._handleProviderSignIn(credentials.provider, {\n      redirectTo: credentials.options?.redirectTo,\n      scopes: credentials.options?.scopes,\n      queryParams: credentials.options?.queryParams,\n      skipBrowserRedirect: credentials.options?.skipBrowserRedirect,\n    })\n  }\n\n  /**\n   * Log in an existing user by exchanging an Auth Code issued during the PKCE flow.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - Used when `flowType` is set to `pkce` in client options.\n   *\n   * @example Exchange Auth Code\n   * ```js\n   * supabase.auth.exchangeCodeForSession('34e770dd-9ff9-416c-87fa-43b31d7ef225')\n   * ```\n   *\n   * @exampleResponse Exchange Auth Code\n   * ```json\n   * {\n   *   \"data\": {\n   *     session: {\n   *       access_token: '<ACCESS_TOKEN>',\n   *       token_type: 'bearer',\n   *       expires_in: 3600,\n   *       expires_at: 1700000000,\n   *       refresh_token: '<REFRESH_TOKEN>',\n   *       user: {\n   *         id: '11111111-1111-1111-1111-111111111111',\n   *         aud: 'authenticated',\n   *         role: 'authenticated',\n   *         email: 'example@email.com'\n   *         email_confirmed_at: '2024-01-01T00:00:00Z',\n   *         phone: '',\n   *         confirmation_sent_at: '2024-01-01T00:00:00Z',\n   *         confirmed_at: '2024-01-01T00:00:00Z',\n   *         last_sign_in_at: '2024-01-01T00:00:00Z',\n   *         app_metadata: {\n   *           \"provider\": \"email\",\n   *           \"providers\": [\n   *             \"email\",\n   *             \"<OTHER_PROVIDER>\"\n   *           ]\n   *         },\n   *         user_metadata: {\n   *           email: 'email@email.com',\n   *           email_verified: true,\n   *           full_name: 'User Name',\n   *           iss: '<ISS>',\n   *           name: 'User Name',\n   *           phone_verified: false,\n   *           provider_id: '<PROVIDER_ID>',\n   *           sub: '<SUB>'\n   *         },\n   *         identities: [\n   *           {\n   *             \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *             \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *             \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *             \"identity_data\": {\n   *               \"email\": \"example@email.com\",\n   *               \"email_verified\": false,\n   *               \"phone_verified\": false,\n   *               \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *             },\n   *             \"provider\": \"email\",\n   *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *             \"created_at\": \"2024-01-01T00:00:00Z\",\n   *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *             \"email\": \"email@example.com\"\n   *           },\n   *           {\n   *             \"identity_id\": \"33333333-3333-3333-3333-333333333333\",\n   *             \"id\": \"<ID>\",\n   *             \"user_id\": \"<USER_ID>\",\n   *             \"identity_data\": {\n   *               \"email\": \"example@email.com\",\n   *               \"email_verified\": true,\n   *               \"full_name\": \"User Name\",\n   *               \"iss\": \"<ISS>\",\n   *               \"name\": \"User Name\",\n   *               \"phone_verified\": false,\n   *               \"provider_id\": \"<PROVIDER_ID>\",\n   *               \"sub\": \"<SUB>\"\n   *             },\n   *             \"provider\": \"<PROVIDER>\",\n   *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *             \"created_at\": \"2024-01-01T00:00:00Z\",\n   *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *             \"email\": \"example@email.com\"\n   *           }\n   *         ],\n   *         created_at: '2024-01-01T00:00:00Z',\n   *         updated_at: '2024-01-01T00:00:00Z',\n   *         is_anonymous: false\n   *       },\n   *       provider_token: '<PROVIDER_TOKEN>',\n   *       provider_refresh_token: '<PROVIDER_REFRESH_TOKEN>'\n   *     },\n   *     user: {\n   *       id: '11111111-1111-1111-1111-111111111111',\n   *       aud: 'authenticated',\n   *       role: 'authenticated',\n   *       email: 'example@email.com',\n   *       email_confirmed_at: '2024-01-01T00:00:00Z',\n   *       phone: '',\n   *       confirmation_sent_at: '2024-01-01T00:00:00Z',\n   *       confirmed_at: '2024-01-01T00:00:00Z',\n   *       last_sign_in_at: '2024-01-01T00:00:00Z',\n   *       app_metadata: {\n   *         provider: 'email',\n   *         providers: [\n   *           \"email\",\n   *           \"<OTHER_PROVIDER>\"\n   *         ]\n   *       },\n   *       user_metadata: {\n   *         email: 'email@email.com',\n   *         email_verified: true,\n   *         full_name: 'User Name',\n   *         iss: '<ISS>',\n   *         name: 'User Name',\n   *         phone_verified: false,\n   *         provider_id: '<PROVIDER_ID>',\n   *         sub: '<SUB>'\n   *       },\n   *       identities: [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"identity_data\": {\n   *             \"email\": \"example@email.com\",\n   *             \"email_verified\": false,\n   *             \"phone_verified\": false,\n   *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *           },\n   *           \"provider\": \"email\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"email@example.com\"\n   *         },\n   *         {\n   *           \"identity_id\": \"33333333-3333-3333-3333-333333333333\",\n   *           \"id\": \"<ID>\",\n   *           \"user_id\": \"<USER_ID>\",\n   *           \"identity_data\": {\n   *             \"email\": \"example@email.com\",\n   *             \"email_verified\": true,\n   *             \"full_name\": \"User Name\",\n   *             \"iss\": \"<ISS>\",\n   *             \"name\": \"User Name\",\n   *             \"phone_verified\": false,\n   *             \"provider_id\": \"<PROVIDER_ID>\",\n   *             \"sub\": \"<SUB>\"\n   *           },\n   *           \"provider\": \"<PROVIDER>\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"example@email.com\"\n   *         }\n   *       ],\n   *       created_at: '2024-01-01T00:00:00Z',\n   *       updated_at: '2024-01-01T00:00:00Z',\n   *       is_anonymous: false\n   *     },\n   *     redirectType: null\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   */\n  async exchangeCodeForSession(authCode: string): Promise<AuthTokenResponse> {\n    await this.initializePromise\n\n    return this._acquireLock(this.lockAcquireTimeout, async () => {\n      return this._exchangeCodeForSession(authCode)\n    })\n  }\n\n  /**\n   * Signs in a user by verifying a message signed by the user's private key.\n   * Supports Ethereum (via Sign-In-With-Ethereum) & Solana (Sign-In-With-Solana) standards,\n   * both of which derive from the EIP-4361 standard\n   * With slight variation on Solana's side.\n   * @reference https://eips.ethereum.org/EIPS/eip-4361\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - Uses a Web3 (Ethereum, Solana) wallet to sign a user in.\n   * - Read up on the [potential for abuse](/docs/guides/auth/auth-web3#potential-for-abuse) before using it.\n   *\n   * @example Sign in with Solana or Ethereum (Window API)\n   * ```js\n   *   // uses window.ethereum for the wallet\n   *   const { data, error } = await supabase.auth.signInWithWeb3({\n   *     chain: 'ethereum',\n   *     statement: 'I accept the Terms of Service at https://example.com/tos'\n   *   })\n   *\n   *   // uses window.solana for the wallet\n   *   const { data, error } = await supabase.auth.signInWithWeb3({\n   *     chain: 'solana',\n   *     statement: 'I accept the Terms of Service at https://example.com/tos'\n   *   })\n   * ```\n   *\n   * @example Sign in with Ethereum (Message and Signature)\n   * ```js\n   *   const { data, error } = await supabase.auth.signInWithWeb3({\n   *     chain: 'ethereum',\n   *     message: '<sign in with ethereum message>',\n   *     signature: '<hex of the ethereum signature over the message>',\n   *   })\n   * ```\n   *\n   * @example Sign in with Solana (Brave)\n   * ```js\n   *   const { data, error } = await supabase.auth.signInWithWeb3({\n   *     chain: 'solana',\n   *     statement: 'I accept the Terms of Service at https://example.com/tos',\n   *     wallet: window.braveSolana\n   *   })\n   * ```\n   *\n   * @example Sign in with Solana (Wallet Adapter)\n   * ```jsx\n   *   function SignInButton() {\n   *   const wallet = useWallet()\n   *\n   *   return (\n   *     <>\n   *       {wallet.connected ? (\n   *         <button\n   *           onClick={() => {\n   *             supabase.auth.signInWithWeb3({\n   *               chain: 'solana',\n   *               statement: 'I accept the Terms of Service at https://example.com/tos',\n   *               wallet,\n   *             })\n   *           }}\n   *         >\n   *           Sign in with Solana\n   *         </button>\n   *       ) : (\n   *         <WalletMultiButton />\n   *       )}\n   *     </>\n   *   )\n   * }\n   *\n   * function App() {\n   *   const endpoint = clusterApiUrl('devnet')\n   *   const wallets = useMemo(() => [], [])\n   *\n   *   return (\n   *     <ConnectionProvider endpoint={endpoint}>\n   *       <WalletProvider wallets={wallets}>\n   *         <WalletModalProvider>\n   *           <SignInButton />\n   *         </WalletModalProvider>\n   *       </WalletProvider>\n   *     </ConnectionProvider>\n   *   )\n   * }\n   * ```\n   */\n  async signInWithWeb3(credentials: Web3Credentials): Promise<\n    | {\n        data: { session: Session; user: User }\n        error: null\n      }\n    | { data: { session: null; user: null }; error: AuthError }\n  > {\n    const { chain } = credentials\n\n    switch (chain) {\n      case 'ethereum':\n        return await this.signInWithEthereum(credentials)\n      case 'solana':\n        return await this.signInWithSolana(credentials)\n      default:\n        throw new Error(`@supabase/auth-js: Unsupported chain \"${chain}\"`)\n    }\n  }\n\n  private async signInWithEthereum(\n    credentials: EthereumWeb3Credentials\n  ): Promise<\n    | { data: { session: Session; user: User }; error: null }\n    | { data: { session: null; user: null }; error: AuthError }\n  > {\n    // TODO: flatten type\n    let message: string\n    let signature: Hex\n\n    if ('message' in credentials) {\n      message = credentials.message\n      signature = credentials.signature\n    } else {\n      const { chain, wallet, statement, options } = credentials\n\n      let resolvedWallet: EthereumWallet\n\n      if (!isBrowser()) {\n        if (typeof wallet !== 'object' || !options?.url) {\n          throw new Error(\n            '@supabase/auth-js: Both wallet and url must be specified in non-browser environments.'\n          )\n        }\n\n        resolvedWallet = wallet\n      } else if (typeof wallet === 'object') {\n        resolvedWallet = wallet\n      } else {\n        const windowAny = window as any\n\n        if (\n          'ethereum' in windowAny &&\n          typeof windowAny.ethereum === 'object' &&\n          'request' in windowAny.ethereum &&\n          typeof windowAny.ethereum.request === 'function'\n        ) {\n          resolvedWallet = windowAny.ethereum\n        } else {\n          throw new Error(\n            `@supabase/auth-js: No compatible Ethereum wallet interface on the window object (window.ethereum) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'ethereum', wallet: resolvedUserWallet }) instead.`\n          )\n        }\n      }\n\n      const url = new URL(options?.url ?? window.location.href)\n\n      const accounts = await resolvedWallet\n        .request({\n          method: 'eth_requestAccounts',\n        })\n        .then((accs) => accs as string[])\n        .catch(() => {\n          throw new Error(\n            `@supabase/auth-js: Wallet method eth_requestAccounts is missing or invalid`\n          )\n        })\n\n      if (!accounts || accounts.length === 0) {\n        throw new Error(\n          `@supabase/auth-js: No accounts available. Please ensure the wallet is connected.`\n        )\n      }\n\n      const address = getAddress(accounts[0])\n\n      let chainId = options?.signInWithEthereum?.chainId\n      if (!chainId) {\n        const chainIdHex = await resolvedWallet.request({\n          method: 'eth_chainId',\n        })\n        chainId = fromHex(chainIdHex as Hex)\n      }\n\n      const siweMessage: SiweMessage = {\n        domain: url.host,\n        address: address,\n        statement: statement,\n        uri: url.href,\n        version: '1',\n        chainId: chainId,\n        nonce: options?.signInWithEthereum?.nonce,\n        issuedAt: options?.signInWithEthereum?.issuedAt ?? new Date(),\n        expirationTime: options?.signInWithEthereum?.expirationTime,\n        notBefore: options?.signInWithEthereum?.notBefore,\n        requestId: options?.signInWithEthereum?.requestId,\n        resources: options?.signInWithEthereum?.resources,\n      }\n\n      message = createSiweMessage(siweMessage)\n\n      // Sign message\n      signature = (await resolvedWallet.request({\n        method: 'personal_sign',\n        params: [toHex(message), address],\n      })) as Hex\n    }\n\n    try {\n      const { data, error } = await _request(\n        this.fetch,\n        'POST',\n        `${this.url}/token?grant_type=web3`,\n        {\n          headers: this.headers,\n          body: {\n            chain: 'ethereum',\n            message,\n            signature,\n            ...(credentials.options?.captchaToken\n              ? { gotrue_meta_security: { captcha_token: credentials.options?.captchaToken } }\n              : null),\n          },\n          xform: _sessionResponse,\n        }\n      )\n      if (error) {\n        throw error\n      }\n      if (!data || !data.session || !data.user) {\n        const invalidTokenError = new AuthInvalidTokenResponseError()\n        return this._returnResult({ data: { user: null, session: null }, error: invalidTokenError })\n      }\n      if (data.session) {\n        await this._saveSession(data.session)\n        await this._notifyAllSubscribers('SIGNED_IN', data.session)\n      }\n      return this._returnResult({ data: { ...data }, error })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { user: null, session: null }, error })\n      }\n\n      throw error\n    }\n  }\n\n  private async signInWithSolana(credentials: SolanaWeb3Credentials) {\n    let message: string\n    let signature: Uint8Array\n\n    if ('message' in credentials) {\n      message = credentials.message\n      signature = credentials.signature\n    } else {\n      const { chain, wallet, statement, options } = credentials\n\n      let resolvedWallet: SolanaWallet\n\n      if (!isBrowser()) {\n        if (typeof wallet !== 'object' || !options?.url) {\n          throw new Error(\n            '@supabase/auth-js: Both wallet and url must be specified in non-browser environments.'\n          )\n        }\n\n        resolvedWallet = wallet\n      } else if (typeof wallet === 'object') {\n        resolvedWallet = wallet\n      } else {\n        const windowAny = window as any\n\n        if (\n          'solana' in windowAny &&\n          typeof windowAny.solana === 'object' &&\n          (('signIn' in windowAny.solana && typeof windowAny.solana.signIn === 'function') ||\n            ('signMessage' in windowAny.solana &&\n              typeof windowAny.solana.signMessage === 'function'))\n        ) {\n          resolvedWallet = windowAny.solana\n        } else {\n          throw new Error(\n            `@supabase/auth-js: No compatible Solana wallet interface on the window object (window.solana) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'solana', wallet: resolvedUserWallet }) instead.`\n          )\n        }\n      }\n\n      const url = new URL(options?.url ?? window.location.href)\n\n      if ('signIn' in resolvedWallet && resolvedWallet.signIn) {\n        const output = await resolvedWallet.signIn({\n          issuedAt: new Date().toISOString(),\n\n          ...options?.signInWithSolana,\n\n          // non-overridable properties\n          version: '1',\n          domain: url.host,\n          uri: url.href,\n\n          ...(statement ? { statement } : null),\n        })\n\n        let outputToProcess: any\n\n        if (Array.isArray(output) && output[0] && typeof output[0] === 'object') {\n          outputToProcess = output[0]\n        } else if (\n          output &&\n          typeof output === 'object' &&\n          'signedMessage' in output &&\n          'signature' in output\n        ) {\n          outputToProcess = output\n        } else {\n          throw new Error('@supabase/auth-js: Wallet method signIn() returned unrecognized value')\n        }\n\n        if (\n          'signedMessage' in outputToProcess &&\n          'signature' in outputToProcess &&\n          (typeof outputToProcess.signedMessage === 'string' ||\n            outputToProcess.signedMessage instanceof Uint8Array) &&\n          outputToProcess.signature instanceof Uint8Array\n        ) {\n          message =\n            typeof outputToProcess.signedMessage === 'string'\n              ? outputToProcess.signedMessage\n              : new TextDecoder().decode(outputToProcess.signedMessage)\n          signature = outputToProcess.signature\n        } else {\n          throw new Error(\n            '@supabase/auth-js: Wallet method signIn() API returned object without signedMessage and signature fields'\n          )\n        }\n      } else {\n        if (\n          !('signMessage' in resolvedWallet) ||\n          typeof resolvedWallet.signMessage !== 'function' ||\n          !('publicKey' in resolvedWallet) ||\n          typeof resolvedWallet !== 'object' ||\n          !resolvedWallet.publicKey ||\n          !('toBase58' in resolvedWallet.publicKey) ||\n          typeof resolvedWallet.publicKey.toBase58 !== 'function'\n        ) {\n          throw new Error(\n            '@supabase/auth-js: Wallet does not have a compatible signMessage() and publicKey.toBase58() API'\n          )\n        }\n\n        message = [\n          `${url.host} wants you to sign in with your Solana account:`,\n          resolvedWallet.publicKey.toBase58(),\n          ...(statement ? ['', statement, ''] : ['']),\n          'Version: 1',\n          `URI: ${url.href}`,\n          `Issued At: ${options?.signInWithSolana?.issuedAt ?? new Date().toISOString()}`,\n          ...(options?.signInWithSolana?.notBefore\n            ? [`Not Before: ${options.signInWithSolana.notBefore}`]\n            : []),\n          ...(options?.signInWithSolana?.expirationTime\n            ? [`Expiration Time: ${options.signInWithSolana.expirationTime}`]\n            : []),\n          ...(options?.signInWithSolana?.chainId\n            ? [`Chain ID: ${options.signInWithSolana.chainId}`]\n            : []),\n          ...(options?.signInWithSolana?.nonce ? [`Nonce: ${options.signInWithSolana.nonce}`] : []),\n          ...(options?.signInWithSolana?.requestId\n            ? [`Request ID: ${options.signInWithSolana.requestId}`]\n            : []),\n          ...(options?.signInWithSolana?.resources?.length\n            ? [\n                'Resources',\n                ...options.signInWithSolana.resources.map((resource) => `- ${resource}`),\n              ]\n            : []),\n        ].join('\\n')\n\n        const maybeSignature = await resolvedWallet.signMessage(\n          new TextEncoder().encode(message),\n          'utf8'\n        )\n\n        if (!maybeSignature || !(maybeSignature instanceof Uint8Array)) {\n          throw new Error(\n            '@supabase/auth-js: Wallet signMessage() API returned an recognized value'\n          )\n        }\n\n        signature = maybeSignature\n      }\n    }\n\n    try {\n      const { data, error } = await _request(\n        this.fetch,\n        'POST',\n        `${this.url}/token?grant_type=web3`,\n        {\n          headers: this.headers,\n          body: {\n            chain: 'solana',\n            message,\n            signature: bytesToBase64URL(signature),\n\n            ...(credentials.options?.captchaToken\n              ? { gotrue_meta_security: { captcha_token: credentials.options?.captchaToken } }\n              : null),\n          },\n          xform: _sessionResponse,\n        }\n      )\n      if (error) {\n        throw error\n      }\n      if (!data || !data.session || !data.user) {\n        const invalidTokenError = new AuthInvalidTokenResponseError()\n        return this._returnResult({ data: { user: null, session: null }, error: invalidTokenError })\n      }\n      if (data.session) {\n        await this._saveSession(data.session)\n        await this._notifyAllSubscribers('SIGNED_IN', data.session)\n      }\n      return this._returnResult({ data: { ...data }, error })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { user: null, session: null }, error })\n      }\n\n      throw error\n    }\n  }\n\n  private async _exchangeCodeForSession(authCode: string): Promise<\n    | {\n        data: { session: Session; user: User; redirectType: string | null }\n        error: null\n      }\n    | { data: { session: null; user: null; redirectType: null }; error: AuthError }\n  > {\n    const storageItem = await getItemAsync(this.storage, `${this.storageKey}-code-verifier`)\n    const [codeVerifier, redirectType] = ((storageItem ?? '') as string).split('/')\n\n    try {\n      if (!codeVerifier && this.flowType === 'pkce') {\n        throw new AuthPKCECodeVerifierMissingError()\n      }\n\n      const { data, error } = await _request(\n        this.fetch,\n        'POST',\n        `${this.url}/token?grant_type=pkce`,\n        {\n          headers: this.headers,\n          body: {\n            auth_code: authCode,\n            code_verifier: codeVerifier,\n          },\n          xform: _sessionResponse,\n        }\n      )\n      await removeItemAsync(this.storage, `${this.storageKey}-code-verifier`)\n      if (error) {\n        throw error\n      }\n      if (!data || !data.session || !data.user) {\n        const invalidTokenError = new AuthInvalidTokenResponseError()\n        return this._returnResult({\n          data: { user: null, session: null, redirectType: null },\n          error: invalidTokenError,\n        })\n      }\n      if (data.session) {\n        await this._saveSession(data.session)\n        await this._notifyAllSubscribers(\n          redirectType === 'recovery' ? 'PASSWORD_RECOVERY' : 'SIGNED_IN',\n          data.session\n        )\n      }\n      return this._returnResult({ data: { ...data, redirectType: redirectType ?? null }, error })\n    } catch (error) {\n      await removeItemAsync(this.storage, `${this.storageKey}-code-verifier`)\n      if (isAuthError(error)) {\n        return this._returnResult({\n          data: { user: null, session: null, redirectType: null },\n          error,\n        })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Allows signing in with an OIDC ID token. The authentication provider used\n   * should be enabled and configured.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - Use an ID token to sign in.\n   * - Especially useful when implementing sign in using native platform dialogs in mobile or desktop apps using Sign in with Apple or Sign in with Google on iOS and Android.\n   * - You can also use Google's [One Tap](https://developers.google.com/identity/gsi/web/guides/display-google-one-tap) and [Automatic sign-in](https://developers.google.com/identity/gsi/web/guides/automatic-sign-in-sign-out) via this API.\n   *\n   * @example Sign In using ID Token\n   * ```js\n   * const { data, error } = await supabase.auth.signInWithIdToken({\n   *   provider: 'google',\n   *   token: 'your-id-token'\n   * })\n   * ```\n   *\n   * @exampleResponse Sign In using ID Token\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"user\": {\n   *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *       \"aud\": \"authenticated\",\n   *       \"role\": \"authenticated\",\n   *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *       \"app_metadata\": {\n   *         ...\n   *       },\n   *       \"user_metadata\": {\n   *         ...\n   *       },\n   *       \"identities\": [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"provider\": \"google\",\n   *         }\n   *       ],\n   *       \"created_at\": \"2024-01-01T00:00:00Z\",\n   *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *     },\n   *     \"session\": {\n   *       \"access_token\": \"<ACCESS_TOKEN>\",\n   *       \"token_type\": \"bearer\",\n   *       \"expires_in\": 3600,\n   *       \"expires_at\": 1700000000,\n   *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n   *       \"user\": {\n   *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *         \"aud\": \"authenticated\",\n   *         \"role\": \"authenticated\",\n   *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *         \"app_metadata\": {\n   *           ...\n   *         },\n   *         \"user_metadata\": {\n   *           ...\n   *         },\n   *         \"identities\": [\n   *           {\n   *             \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *             \"provider\": \"google\",\n   *           }\n   *         ],\n   *         \"created_at\": \"2024-01-01T00:00:00Z\",\n   *         \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *       }\n   *     }\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   */\n  async signInWithIdToken(credentials: SignInWithIdTokenCredentials): Promise<AuthTokenResponse> {\n    try {\n      const { options, provider, token, access_token, nonce } = credentials\n\n      const res = await _request(this.fetch, 'POST', `${this.url}/token?grant_type=id_token`, {\n        headers: this.headers,\n        body: {\n          provider,\n          id_token: token,\n          access_token,\n          nonce,\n          gotrue_meta_security: { captcha_token: options?.captchaToken },\n        },\n        xform: _sessionResponse,\n      })\n\n      const { data, error } = res\n      if (error) {\n        return this._returnResult({ data: { user: null, session: null }, error })\n      } else if (!data || !data.session || !data.user) {\n        const invalidTokenError = new AuthInvalidTokenResponseError()\n        return this._returnResult({ data: { user: null, session: null }, error: invalidTokenError })\n      }\n      if (data.session) {\n        await this._saveSession(data.session)\n        await this._notifyAllSubscribers('SIGNED_IN', data.session)\n      }\n      return this._returnResult({ data, error })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { user: null, session: null }, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Log in a user using magiclink or a one-time password (OTP).\n   *\n   * If the `{{ .ConfirmationURL }}` variable is specified in the email template, a magiclink will be sent.\n   * If the `{{ .Token }}` variable is specified in the email template, an OTP will be sent.\n   * If you're using phone sign-ins, only an OTP will be sent. You won't be able to send a magiclink for phone sign-ins.\n   *\n   * Be aware that you may get back an error message that will not distinguish\n   * between the cases where the account does not exist or, that the account\n   * can only be accessed via social login.\n   *\n   * Do note that you will need to configure a Whatsapp sender on Twilio\n   * if you are using phone sign in with the 'whatsapp' channel. The whatsapp\n   * channel is not supported on other providers\n   * at this time.\n   * This method supports PKCE when an email is passed.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - Requires either an email or phone number.\n   * - This method is used for passwordless sign-ins where a OTP is sent to the user's email or phone number.\n   * - If the user doesn't exist, `signInWithOtp()` will signup the user instead. To restrict this behavior, you can set `shouldCreateUser` in `SignInWithPasswordlessCredentials.options` to `false`.\n   * - If you're using an email, you can configure whether you want the user to receive a magiclink or a OTP.\n   * - If you're using phone, you can configure whether you want the user to receive a OTP.\n   * - The magic link's destination URL is determined by the [`SITE_URL`](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls).\n   * - See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project.\n   * - Magic links and OTPs share the same implementation. To send users a one-time code instead of a magic link, [modify the magic link email template](/dashboard/project/_/auth/templates) to include `{{ .Token }}` instead of `{{ .ConfirmationURL }}`.\n   * - See our [Twilio Phone Auth Guide](/docs/guides/auth/phone-login?showSMSProvider=Twilio) for details about configuring WhatsApp sign in.\n   *\n   * @exampleDescription Sign in with email\n   * The user will be sent an email which contains either a magiclink or a OTP or both. By default, a given user can only request a OTP once every 60 seconds.\n   *\n   * @example Sign in with email\n   * ```js\n   * const { data, error } = await supabase.auth.signInWithOtp({\n   *   email: 'example@email.com',\n   *   options: {\n   *     emailRedirectTo: 'https://example.com/welcome'\n   *   }\n   * })\n   * ```\n   *\n   * @exampleResponse Sign in with email\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"user\": null,\n   *     \"session\": null\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @exampleDescription Sign in with SMS OTP\n   * The user will be sent a SMS which contains a OTP. By default, a given user can only request a OTP once every 60 seconds.\n   *\n   * @example Sign in with SMS OTP\n   * ```js\n   * const { data, error } = await supabase.auth.signInWithOtp({\n   *   phone: '+13334445555',\n   * })\n   * ```\n   *\n   * @exampleDescription Sign in with WhatsApp OTP\n   * The user will be sent a WhatsApp message which contains a OTP. By default, a given user can only request a OTP once every 60 seconds. Note that a user will need to have a valid WhatsApp account that is linked to Twilio in order to use this feature.\n   *\n   * @example Sign in with WhatsApp OTP\n   * ```js\n   * const { data, error } = await supabase.auth.signInWithOtp({\n   *   phone: '+13334445555',\n   *   options: {\n   *     channel:'whatsapp',\n   *   }\n   * })\n   * ```\n   */\n  async signInWithOtp(credentials: SignInWithPasswordlessCredentials): Promise<AuthOtpResponse> {\n    try {\n      if ('email' in credentials) {\n        const { email, options } = credentials\n        let codeChallenge: string | null = null\n        let codeChallengeMethod: string | null = null\n        if (this.flowType === 'pkce') {\n          ;[codeChallenge, codeChallengeMethod] = await getCodeChallengeAndMethod(\n            this.storage,\n            this.storageKey\n          )\n        }\n        const { error } = await _request(this.fetch, 'POST', `${this.url}/otp`, {\n          headers: this.headers,\n          body: {\n            email,\n            data: options?.data ?? {},\n            create_user: options?.shouldCreateUser ?? true,\n            gotrue_meta_security: { captcha_token: options?.captchaToken },\n            code_challenge: codeChallenge,\n            code_challenge_method: codeChallengeMethod,\n          },\n          redirectTo: options?.emailRedirectTo,\n        })\n        return this._returnResult({ data: { user: null, session: null }, error })\n      }\n      if ('phone' in credentials) {\n        const { phone, options } = credentials\n        const { data, error } = await _request(this.fetch, 'POST', `${this.url}/otp`, {\n          headers: this.headers,\n          body: {\n            phone,\n            data: options?.data ?? {},\n            create_user: options?.shouldCreateUser ?? true,\n            gotrue_meta_security: { captcha_token: options?.captchaToken },\n            channel: options?.channel ?? 'sms',\n          },\n        })\n        return this._returnResult({\n          data: { user: null, session: null, messageId: data?.message_id },\n          error,\n        })\n      }\n      throw new AuthInvalidCredentialsError('You must provide either an email or phone number.')\n    } catch (error) {\n      await removeItemAsync(this.storage, `${this.storageKey}-code-verifier`)\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { user: null, session: null }, error })\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Log in a user given a User supplied OTP or TokenHash received through mobile or email.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - The `verifyOtp` method takes in different verification types.\n   * - If a phone number is used, the type can either be:\n   *   1. `sms` \u2013 Used when verifying a one-time password (OTP) sent via SMS during sign-up or sign-in.\n   *   2. `phone_change` \u2013 Used when verifying an OTP sent to a new phone number during a phone number update process.\n   * - If an email address is used, the type can be one of the following (note: `signup` and `magiclink` types are deprecated):\n   *   1. `email` \u2013 Used when verifying an OTP sent to the user's email during sign-up or sign-in.\n   *   2. `recovery` \u2013 Used when verifying an OTP sent for account recovery, typically after a password reset request.\n   *   3. `invite` \u2013 Used when verifying an OTP sent as part of an invitation to join a project or organization.\n   *   4. `email_change` \u2013 Used when verifying an OTP sent to a new email address during an email update process.\n   * - The verification type used should be determined based on the corresponding auth method called before `verifyOtp` to sign up / sign-in a user.\n   * - The `TokenHash` is contained in the [email templates](/docs/guides/auth/auth-email-templates) and can be used to sign in.  You may wish to use the hash for the PKCE flow for Server Side Auth. Read [the Password-based Auth guide](/docs/guides/auth/passwords) for more details.\n   *\n   * @example Verify Signup One-Time Password (OTP)\n   * ```js\n   * const { data, error } = await supabase.auth.verifyOtp({ email, token, type: 'email'})\n   * ```\n   *\n   * @exampleResponse Verify Signup One-Time Password (OTP)\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"user\": {\n   *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *       \"aud\": \"authenticated\",\n   *       \"role\": \"authenticated\",\n   *       \"email\": \"example@email.com\",\n   *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *       \"phone\": \"\",\n   *       \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *       \"recovery_sent_at\": \"2024-01-01T00:00:00Z\",\n   *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *       \"app_metadata\": {\n   *         \"provider\": \"email\",\n   *         \"providers\": [\n   *           \"email\"\n   *         ]\n   *       },\n   *       \"user_metadata\": {\n   *         \"email\": \"example@email.com\",\n   *         \"email_verified\": false,\n   *         \"phone_verified\": false,\n   *         \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *       },\n   *       \"identities\": [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"identity_data\": {\n   *             \"email\": \"example@email.com\",\n   *             \"email_verified\": false,\n   *             \"phone_verified\": false,\n   *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *           },\n   *           \"provider\": \"email\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"example@email.com\"\n   *         }\n   *       ],\n   *       \"created_at\": \"2024-01-01T00:00:00Z\",\n   *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *       \"is_anonymous\": false\n   *     },\n   *     \"session\": {\n   *       \"access_token\": \"<ACCESS_TOKEN>\",\n   *       \"token_type\": \"bearer\",\n   *       \"expires_in\": 3600,\n   *       \"expires_at\": 1700000000,\n   *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n   *       \"user\": {\n   *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *         \"aud\": \"authenticated\",\n   *         \"role\": \"authenticated\",\n   *         \"email\": \"example@email.com\",\n   *         \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *         \"phone\": \"\",\n   *         \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *         \"recovery_sent_at\": \"2024-01-01T00:00:00Z\",\n   *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *         \"app_metadata\": {\n   *           \"provider\": \"email\",\n   *           \"providers\": [\n   *             \"email\"\n   *           ]\n   *         },\n   *         \"user_metadata\": {\n   *           \"email\": \"example@email.com\",\n   *           \"email_verified\": false,\n   *           \"phone_verified\": false,\n   *           \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *         },\n   *         \"identities\": [\n   *           {\n   *             \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *             \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *             \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *             \"identity_data\": {\n   *               \"email\": \"example@email.com\",\n   *               \"email_verified\": false,\n   *               \"phone_verified\": false,\n   *               \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *             },\n   *             \"provider\": \"email\",\n   *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *             \"created_at\": \"2024-01-01T00:00:00Z\",\n   *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *             \"email\": \"example@email.com\"\n   *           }\n   *         ],\n   *         \"created_at\": \"2024-01-01T00:00:00Z\",\n   *         \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *         \"is_anonymous\": false\n   *       }\n   *     }\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @example Verify SMS One-Time Password (OTP)\n   * ```js\n   * const { data, error } = await supabase.auth.verifyOtp({ phone, token, type: 'sms'})\n   * ```\n   *\n   * @example Verify Email Auth (Token Hash)\n   * ```js\n   * const { data, error } = await supabase.auth.verifyOtp({ token_hash: tokenHash, type: 'email'})\n   * ```\n   */\n  async verifyOtp(params: VerifyOtpParams): Promise<AuthResponse> {\n    try {\n      let redirectTo: string | undefined = undefined\n      let captchaToken: string | undefined = undefined\n      if ('options' in params) {\n        redirectTo = params.options?.redirectTo\n        captchaToken = params.options?.captchaToken\n      }\n      const { data, error } = await _request(this.fetch, 'POST', `${this.url}/verify`, {\n        headers: this.headers,\n        body: {\n          ...params,\n          gotrue_meta_security: { captcha_token: captchaToken },\n        },\n        redirectTo,\n        xform: _sessionResponse,\n      })\n\n      if (error) {\n        throw error\n      }\n      if (!data) {\n        const tokenVerificationError = new Error('An error occurred on token verification.')\n        throw tokenVerificationError\n      }\n\n      const session: Session | null = data.session\n      const user: User | null = data.user\n\n      if (session?.access_token) {\n        await this._saveSession(session as Session)\n        await this._notifyAllSubscribers(\n          params.type == 'recovery' ? 'PASSWORD_RECOVERY' : 'SIGNED_IN',\n          session\n        )\n      }\n\n      return this._returnResult({ data: { user, session }, error: null })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { user: null, session: null }, error })\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Attempts a single-sign on using an enterprise Identity Provider. A\n   * successful SSO attempt will redirect the current page to the identity\n   * provider authorization page. The redirect URL is implementation and SSO\n   * protocol specific.\n   *\n   * You can use it by providing a SSO domain. Typically you can extract this\n   * domain by asking users for their email address. If this domain is\n   * registered on the Auth instance the redirect will use that organization's\n   * currently active SSO Identity Provider for the login.\n   *\n   * If you have built an organization-specific login page, you can use the\n   * organization's SSO Identity Provider UUID directly instead.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - Before you can call this method you need to [establish a connection](/docs/guides/auth/sso/auth-sso-saml#managing-saml-20-connections) to an identity provider. Use the [CLI commands](/docs/reference/cli/supabase-sso) to do this.\n   * - If you've associated an email domain to the identity provider, you can use the `domain` property to start a sign-in flow.\n   * - In case you need to use a different way to start the authentication flow with an identity provider, you can use the `providerId` property. For example:\n   *     - Mapping specific user email addresses with an identity provider.\n   *     - Using different hints to identity the identity provider to be used by the user, like a company-specific page, IP address or other tracking information.\n   *\n   * @example Sign in with email domain\n   * ```js\n   *   // You can extract the user's email domain and use it to trigger the\n   *   // authentication flow with the correct identity provider.\n   *\n   *   const { data, error } = await supabase.auth.signInWithSSO({\n   *     domain: 'company.com'\n   *   })\n   *\n   *   if (data?.url) {\n   *     // redirect the user to the identity provider's authentication flow\n   *     window.location.href = data.url\n   *   }\n   * ```\n   *\n   * @example Sign in with provider UUID\n   * ```js\n   *   // Useful when you need to map a user's sign in request according\n   *   // to different rules that can't use email domains.\n   *\n   *   const { data, error } = await supabase.auth.signInWithSSO({\n   *     providerId: '21648a9d-8d5a-4555-a9d1-d6375dc14e92'\n   *   })\n   *\n   *   if (data?.url) {\n   *     // redirect the user to the identity provider's authentication flow\n   *     window.location.href = data.url\n   *   }\n   * ```\n   */\n  async signInWithSSO(params: SignInWithSSO): Promise<SSOResponse> {\n    try {\n      let codeChallenge: string | null = null\n      let codeChallengeMethod: string | null = null\n      if (this.flowType === 'pkce') {\n        ;[codeChallenge, codeChallengeMethod] = await getCodeChallengeAndMethod(\n          this.storage,\n          this.storageKey\n        )\n      }\n\n      const result = await _request(this.fetch, 'POST', `${this.url}/sso`, {\n        body: {\n          ...('providerId' in params ? { provider_id: params.providerId } : null),\n          ...('domain' in params ? { domain: params.domain } : null),\n          redirect_to: params.options?.redirectTo ?? undefined,\n          ...(params?.options?.captchaToken\n            ? { gotrue_meta_security: { captcha_token: params.options.captchaToken } }\n            : null),\n          skip_http_redirect: true, // fetch does not handle redirects\n          code_challenge: codeChallenge,\n          code_challenge_method: codeChallengeMethod,\n        },\n        headers: this.headers,\n        xform: _ssoResponse,\n      })\n\n      // Automatically redirect in browser unless skipBrowserRedirect is true\n      if (result.data?.url && isBrowser() && !params.options?.skipBrowserRedirect) {\n        window.location.assign(result.data.url)\n      }\n\n      return this._returnResult(result)\n    } catch (error) {\n      await removeItemAsync(this.storage, `${this.storageKey}-code-verifier`)\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Sends a reauthentication OTP to the user's email or phone number.\n   * Requires the user to be signed-in.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - This method is used together with `updateUser()` when a user's password needs to be updated.\n   * - If you require your user to reauthenticate before updating their password, you need to enable the **Secure password change** option in your [project's email provider settings](/dashboard/project/_/auth/providers).\n   * - A user is only require to reauthenticate before updating their password if **Secure password change** is enabled and the user **hasn't recently signed in**. A user is deemed recently signed in if the session was created in the last 24 hours.\n   * - This method will send a nonce to the user's email. If the user doesn't have a confirmed email address, the method will send the nonce to the user's confirmed phone number instead.\n   * - After receiving the OTP, include it as the `nonce` in your `updateUser()` call to finalize the password change.\n   *\n   * @exampleDescription Send reauthentication nonce\n   * Sends a reauthentication nonce to the user's email or phone number.\n   *\n   * @example Send reauthentication nonce\n   * ```js\n   * const { error } = await supabase.auth.reauthenticate()\n   * ```\n   */\n  async reauthenticate(): Promise<AuthResponse> {\n    await this.initializePromise\n\n    return await this._acquireLock(this.lockAcquireTimeout, async () => {\n      return await this._reauthenticate()\n    })\n  }\n\n  private async _reauthenticate(): Promise<AuthResponse> {\n    try {\n      return await this._useSession(async (result) => {\n        const {\n          data: { session },\n          error: sessionError,\n        } = result\n        if (sessionError) throw sessionError\n        if (!session) throw new AuthSessionMissingError()\n\n        const { error } = await _request(this.fetch, 'GET', `${this.url}/reauthenticate`, {\n          headers: this.headers,\n          jwt: session.access_token,\n        })\n        return this._returnResult({ data: { user: null, session: null }, error })\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { user: null, session: null }, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Resends an existing signup confirmation email, email change email, SMS OTP or phone change OTP.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - Resends a signup confirmation, email change or phone change email to the user.\n   * - Passwordless sign-ins can be resent by calling the `signInWithOtp()` method again.\n   * - Password recovery emails can be resent by calling the `resetPasswordForEmail()` method again.\n   * - This method will only resend an email or phone OTP to the user if there was an initial signup, email change or phone change request being made(note: For existing users signing in with OTP, you should use `signInWithOtp()` again to resend the OTP).\n   * - You can specify a redirect url when you resend an email link using the `emailRedirectTo` option.\n   *\n   * @exampleDescription Resend an email signup confirmation\n   * Resends the email signup confirmation to the user\n   *\n   * @example Resend an email signup confirmation\n   * ```js\n   * const { error } = await supabase.auth.resend({\n   *   type: 'signup',\n   *   email: 'email@example.com',\n   *   options: {\n   *     emailRedirectTo: 'https://example.com/welcome'\n   *   }\n   * })\n   * ```\n   *\n   * @exampleDescription Resend a phone signup confirmation\n   * Resends the phone signup confirmation email to the user\n   *\n   * @example Resend a phone signup confirmation\n   * ```js\n   * const { error } = await supabase.auth.resend({\n   *   type: 'sms',\n   *   phone: '1234567890'\n   * })\n   * ```\n   *\n   * @exampleDescription Resend email change email\n   * Resends the email change email to the user\n   *\n   * @example Resend email change email\n   * ```js\n   * const { error } = await supabase.auth.resend({\n   *   type: 'email_change',\n   *   email: 'email@example.com'\n   * })\n   * ```\n   *\n   * @exampleDescription Resend phone change OTP\n   * Resends the phone change OTP to the user\n   *\n   * @example Resend phone change OTP\n   * ```js\n   * const { error } = await supabase.auth.resend({\n   *   type: 'phone_change',\n   *   phone: '1234567890'\n   * })\n   * ```\n   */\n  async resend(credentials: ResendParams): Promise<AuthOtpResponse> {\n    try {\n      const endpoint = `${this.url}/resend`\n      if ('email' in credentials) {\n        const { email, type, options } = credentials\n        const { error } = await _request(this.fetch, 'POST', endpoint, {\n          headers: this.headers,\n          body: {\n            email,\n            type,\n            gotrue_meta_security: { captcha_token: options?.captchaToken },\n          },\n          redirectTo: options?.emailRedirectTo,\n        })\n        return this._returnResult({ data: { user: null, session: null }, error })\n      } else if ('phone' in credentials) {\n        const { phone, type, options } = credentials\n        const { data, error } = await _request(this.fetch, 'POST', endpoint, {\n          headers: this.headers,\n          body: {\n            phone,\n            type,\n            gotrue_meta_security: { captcha_token: options?.captchaToken },\n          },\n        })\n        return this._returnResult({\n          data: { user: null, session: null, messageId: data?.message_id },\n          error,\n        })\n      }\n      throw new AuthInvalidCredentialsError(\n        'You must provide either an email or phone number and a type'\n      )\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { user: null, session: null }, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Returns the session, refreshing it if necessary.\n   *\n   * The session returned can be null if the session is not detected which can happen in the event a user is not signed-in or has logged out.\n   *\n   * **IMPORTANT:** This method loads values directly from the storage attached\n   * to the client. If that storage is based on request cookies for example,\n   * the values in it may not be authentic and therefore it's strongly advised\n   * against using this method and its results in such circumstances. A warning\n   * will be emitted if this is detected. Use {@link #getUser()} instead.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - Since the introduction of [asymmetric JWT signing keys](/docs/guides/auth/signing-keys), this method is considered low-level and we encourage you to use `getClaims()` or `getUser()` instead.\n   * - Retrieves the current [user session](/docs/guides/auth/sessions) from the storage medium (local storage, cookies).\n   * - The session contains an access token (signed JWT), a refresh token and the user object.\n   * - If the session's access token is expired or is about to expire, this method will use the refresh token to refresh the session.\n   * - When using in a browser, or you've called `startAutoRefresh()` in your environment (React Native, etc.) this function always returns a valid access token without refreshing the session itself, as this is done in the background. This function returns very fast.\n   * - **IMPORTANT SECURITY NOTICE:** If using an insecure storage medium, such as cookies or request headers, the user object returned by this function **must not be trusted**. Always verify the JWT using `getClaims()` or your own JWT verification library to securely establish the user's identity and access. You can also use `getUser()` to fetch the user object directly from the Auth server for this purpose.\n   * - When using in a browser, this function is synchronized across all tabs using the [LockManager](https://developer.mozilla.org/en-US/docs/Web/API/LockManager) API. In other environments make sure you've defined a proper `lock` property, if necessary, to make sure there are no race conditions while the session is being refreshed.\n   *\n   * @example Get the session data\n   * ```js\n   * const { data, error } = await supabase.auth.getSession()\n   * ```\n   *\n   * @exampleResponse Get the session data\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"session\": {\n   *       \"access_token\": \"<ACCESS_TOKEN>\",\n   *       \"token_type\": \"bearer\",\n   *       \"expires_in\": 3600,\n   *       \"expires_at\": 1700000000,\n   *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n   *       \"user\": {\n   *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *         \"aud\": \"authenticated\",\n   *         \"role\": \"authenticated\",\n   *         \"email\": \"example@email.com\",\n   *         \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *         \"phone\": \"\",\n   *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *         \"app_metadata\": {\n   *           \"provider\": \"email\",\n   *           \"providers\": [\n   *             \"email\"\n   *           ]\n   *         },\n   *         \"user_metadata\": {\n   *           \"email\": \"example@email.com\",\n   *           \"email_verified\": false,\n   *           \"phone_verified\": false,\n   *           \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *         },\n   *         \"identities\": [\n   *           {\n   *             \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *             \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *             \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *             \"identity_data\": {\n   *               \"email\": \"example@email.com\",\n   *               \"email_verified\": false,\n   *               \"phone_verified\": false,\n   *               \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *             },\n   *             \"provider\": \"email\",\n   *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *             \"created_at\": \"2024-01-01T00:00:00Z\",\n   *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *             \"email\": \"example@email.com\"\n   *           }\n   *         ],\n   *         \"created_at\": \"2024-01-01T00:00:00Z\",\n   *         \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *         \"is_anonymous\": false\n   *       }\n   *     }\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   */\n  async getSession() {\n    await this.initializePromise\n\n    const result = await this._acquireLock(this.lockAcquireTimeout, async () => {\n      return this._useSession(async (result) => {\n        return result\n      })\n    })\n\n    return result\n  }\n\n  /**\n   * Acquires a global lock based on the storage key.\n   */\n  private async _acquireLock<R>(acquireTimeout: number, fn: () => Promise<R>): Promise<R> {\n    this._debug('#_acquireLock', 'begin', acquireTimeout)\n\n    try {\n      if (this.lockAcquired) {\n        const last = this.pendingInLock.length\n          ? this.pendingInLock[this.pendingInLock.length - 1]\n          : Promise.resolve()\n\n        const result = (async () => {\n          await last\n          return await fn()\n        })()\n\n        this.pendingInLock.push(\n          (async () => {\n            try {\n              await result\n            } catch (_e) {\n              // we just care if it finished\n            }\n          })()\n        )\n\n        return result\n      }\n\n      return await this.lock(`lock:${this.storageKey}`, acquireTimeout, async () => {\n        this._debug('#_acquireLock', 'lock acquired for storage key', this.storageKey)\n\n        try {\n          this.lockAcquired = true\n\n          const result = fn()\n\n          this.pendingInLock.push(\n            (async () => {\n              try {\n                await result\n              } catch (e: any) {\n                // we just care if it finished\n              }\n            })()\n          )\n\n          await result\n\n          // keep draining the queue until there's nothing to wait on\n          while (this.pendingInLock.length) {\n            const waitOn = [...this.pendingInLock]\n\n            await Promise.all(waitOn)\n\n            this.pendingInLock.splice(0, waitOn.length)\n          }\n\n          return await result\n        } finally {\n          this._debug('#_acquireLock', 'lock released for storage key', this.storageKey)\n\n          this.lockAcquired = false\n        }\n      })\n    } finally {\n      this._debug('#_acquireLock', 'end')\n    }\n  }\n\n  /**\n   * Use instead of {@link #getSession} inside the library. It is\n   * semantically usually what you want, as getting a session involves some\n   * processing afterwards that requires only one client operating on the\n   * session at once across multiple tabs or processes.\n   */\n  private async _useSession<R>(\n    fn: (\n      result:\n        | {\n            data: {\n              session: Session\n            }\n            error: null\n          }\n        | {\n            data: {\n              session: null\n            }\n            error: AuthError\n          }\n        | {\n            data: {\n              session: null\n            }\n            error: null\n          }\n    ) => Promise<R>\n  ): Promise<R> {\n    this._debug('#_useSession', 'begin')\n\n    try {\n      // the use of __loadSession here is the only correct use of the function!\n      const result = await this.__loadSession()\n\n      return await fn(result)\n    } finally {\n      this._debug('#_useSession', 'end')\n    }\n  }\n\n  /**\n   * NEVER USE DIRECTLY!\n   *\n   * Always use {@link #_useSession}.\n   */\n  private async __loadSession(): Promise<\n    | {\n        data: {\n          session: Session\n        }\n        error: null\n      }\n    | {\n        data: {\n          session: null\n        }\n        error: AuthError\n      }\n    | {\n        data: {\n          session: null\n        }\n        error: null\n      }\n  > {\n    this._debug('#__loadSession()', 'begin')\n\n    if (!this.lockAcquired) {\n      this._debug('#__loadSession()', 'used outside of an acquired lock!', new Error().stack)\n    }\n\n    try {\n      let currentSession: Session | null = null\n\n      const maybeSession = await getItemAsync(this.storage, this.storageKey)\n\n      this._debug('#getSession()', 'session from storage', maybeSession)\n\n      if (maybeSession !== null) {\n        if (this._isValidSession(maybeSession)) {\n          currentSession = maybeSession\n        } else {\n          this._debug('#getSession()', 'session from storage is not valid')\n          await this._removeSession()\n        }\n      }\n\n      if (!currentSession) {\n        return { data: { session: null }, error: null }\n      }\n\n      // A session is considered expired before the access token _actually_\n      // expires. When the autoRefreshToken option is off (or when the tab is\n      // in the background), very eager users of getSession() -- like\n      // realtime-js -- might send a valid JWT which will expire by the time it\n      // reaches the server.\n      const hasExpired = currentSession.expires_at\n        ? currentSession.expires_at * 1000 - Date.now() < EXPIRY_MARGIN_MS\n        : false\n\n      this._debug(\n        '#__loadSession()',\n        `session has${hasExpired ? '' : ' not'} expired`,\n        'expires_at',\n        currentSession.expires_at\n      )\n\n      if (!hasExpired) {\n        if (this.userStorage) {\n          const maybeUser: { user?: User | null } | null = (await getItemAsync(\n            this.userStorage,\n            this.storageKey + '-user'\n          )) as any\n\n          if (maybeUser?.user) {\n            currentSession.user = maybeUser.user\n          } else {\n            currentSession.user = userNotAvailableProxy()\n          }\n        }\n\n        // Wrap the user object with a warning proxy on the server\n        // This warns when properties of the user are accessed, not when session.user itself is accessed\n        if (\n          this.storage.isServer &&\n          currentSession.user &&\n          !(currentSession.user as any).__isUserNotAvailableProxy\n        ) {\n          const suppressWarningRef = { value: this.suppressGetSessionWarning }\n          currentSession.user = insecureUserWarningProxy(currentSession.user, suppressWarningRef)\n\n          // Update the client-level suppression flag when the proxy suppresses the warning\n          if (suppressWarningRef.value) {\n            this.suppressGetSessionWarning = true\n          }\n        }\n\n        return { data: { session: currentSession }, error: null }\n      }\n\n      const { data: session, error } = await this._callRefreshToken(currentSession.refresh_token)\n      if (error) {\n        return this._returnResult({ data: { session: null }, error })\n      }\n\n      return this._returnResult({ data: { session }, error: null })\n    } finally {\n      this._debug('#__loadSession()', 'end')\n    }\n  }\n\n  /**\n   * Gets the current user details if there is an existing session. This method\n   * performs a network request to the Supabase Auth server, so the returned\n   * value is authentic and can be used to base authorization rules on.\n   *\n   * @param jwt Takes in an optional access token JWT. If no JWT is provided, the JWT from the current session is used.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - This method fetches the user object from the database instead of local session.\n   * - This method is useful for checking if the user is authorized because it validates the user's access token JWT on the server.\n   * - Should always be used when checking for user authorization on the server. On the client, you can instead use `getSession().session.user` for faster results. `getSession` is insecure on the server.\n   *\n   * @example Get the logged in user with the current existing session\n   * ```js\n   * const { data: { user } } = await supabase.auth.getUser()\n   * ```\n   *\n   * @exampleResponse Get the logged in user with the current existing session\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"user\": {\n   *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *       \"aud\": \"authenticated\",\n   *       \"role\": \"authenticated\",\n   *       \"email\": \"example@email.com\",\n   *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *       \"phone\": \"\",\n   *       \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *       \"app_metadata\": {\n   *         \"provider\": \"email\",\n   *         \"providers\": [\n   *           \"email\"\n   *         ]\n   *       },\n   *       \"user_metadata\": {\n   *         \"email\": \"example@email.com\",\n   *         \"email_verified\": false,\n   *         \"phone_verified\": false,\n   *         \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *       },\n   *       \"identities\": [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"identity_data\": {\n   *             \"email\": \"example@email.com\",\n   *             \"email_verified\": false,\n   *             \"phone_verified\": false,\n   *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *           },\n   *           \"provider\": \"email\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"example@email.com\"\n   *         }\n   *       ],\n   *       \"created_at\": \"2024-01-01T00:00:00Z\",\n   *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *       \"is_anonymous\": false\n   *     }\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @example Get the logged in user with a custom access token jwt\n   * ```js\n   * const { data: { user } } = await supabase.auth.getUser(jwt)\n   * ```\n   */\n  async getUser(jwt?: string): Promise<UserResponse> {\n    if (jwt) {\n      return await this._getUser(jwt)\n    }\n\n    await this.initializePromise\n\n    const result = await this._acquireLock(this.lockAcquireTimeout, async () => {\n      return await this._getUser()\n    })\n\n    if (result.data.user) {\n      this.suppressGetSessionWarning = true\n    }\n\n    return result\n  }\n\n  private async _getUser(jwt?: string): Promise<UserResponse> {\n    try {\n      if (jwt) {\n        return await _request(this.fetch, 'GET', `${this.url}/user`, {\n          headers: this.headers,\n          jwt: jwt,\n          xform: _userResponse,\n        })\n      }\n\n      return await this._useSession(async (result) => {\n        const { data, error } = result\n        if (error) {\n          throw error\n        }\n\n        // returns an error if there is no access_token or custom authorization header\n        if (!data.session?.access_token && !this.hasCustomAuthorizationHeader) {\n          return { data: { user: null }, error: new AuthSessionMissingError() }\n        }\n\n        return await _request(this.fetch, 'GET', `${this.url}/user`, {\n          headers: this.headers,\n          jwt: data.session?.access_token ?? undefined,\n          xform: _userResponse,\n        })\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        if (isAuthSessionMissingError(error)) {\n          // JWT contains a `session_id` which does not correspond to an active\n          // session in the database, indicating the user is signed out.\n\n          await this._removeSession()\n          await removeItemAsync(this.storage, `${this.storageKey}-code-verifier`)\n        }\n\n        return this._returnResult({ data: { user: null }, error })\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Updates user data for a logged in user.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - In order to use the `updateUser()` method, the user needs to be signed in first.\n   * - By default, email updates sends a confirmation link to both the user's current and new email.\n   * To only send a confirmation link to the user's new email, disable **Secure email change** in your project's [email auth provider settings](/dashboard/project/_/auth/providers).\n   *\n   * @exampleDescription Update the email for an authenticated user\n   * Sends a \"Confirm Email Change\" email to the new address. If **Secure Email Change** is enabled (default), confirmation is also required from the **old email** before the change is applied. To skip dual confirmation and apply the change after only the new email is verified, disable **Secure Email Change** in the [Email Auth Provider settings](/dashboard/project/_/auth/providers?provider=Email).\n   *\n   * @example Update the email for an authenticated user\n   * ```js\n   * const { data, error } = await supabase.auth.updateUser({\n   *   email: 'new@email.com'\n   * })\n   * ```\n   *\n   * @exampleResponse Update the email for an authenticated user\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"user\": {\n   *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *       \"aud\": \"authenticated\",\n   *       \"role\": \"authenticated\",\n   *       \"email\": \"example@email.com\",\n   *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *       \"phone\": \"\",\n   *       \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *       \"new_email\": \"new@email.com\",\n   *       \"email_change_sent_at\": \"2024-01-01T00:00:00Z\",\n   *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *       \"app_metadata\": {\n   *         \"provider\": \"email\",\n   *         \"providers\": [\n   *           \"email\"\n   *         ]\n   *       },\n   *       \"user_metadata\": {\n   *         \"email\": \"example@email.com\",\n   *         \"email_verified\": false,\n   *         \"phone_verified\": false,\n   *         \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *       },\n   *       \"identities\": [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"identity_data\": {\n   *             \"email\": \"example@email.com\",\n   *             \"email_verified\": false,\n   *             \"phone_verified\": false,\n   *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *           },\n   *           \"provider\": \"email\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"example@email.com\"\n   *         }\n   *       ],\n   *       \"created_at\": \"2024-01-01T00:00:00Z\",\n   *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *       \"is_anonymous\": false\n   *     }\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @exampleDescription Update the phone number for an authenticated user\n   * Sends a one-time password (OTP) to the new phone number.\n   *\n   * @example Update the phone number for an authenticated user\n   * ```js\n   * const { data, error } = await supabase.auth.updateUser({\n   *   phone: '123456789'\n   * })\n   * ```\n   *\n   * @example Update the password for an authenticated user\n   * ```js\n   * const { data, error } = await supabase.auth.updateUser({\n   *   password: 'new password'\n   * })\n   * ```\n   *\n   * @exampleDescription Update the user's metadata\n   * Updates the user's custom metadata.\n   *\n   * **Note**: The `data` field maps to the `auth.users.raw_user_meta_data` column in your Supabase database. When calling `getUser()`, the data will be available as `user.user_metadata`.\n   *\n   * @example Update the user's metadata\n   * ```js\n   * const { data, error } = await supabase.auth.updateUser({\n   *   data: { hello: 'world' }\n   * })\n   * ```\n   *\n   * @exampleDescription Update the user's password with a nonce\n   * If **Secure password change** is enabled in your [project's email provider settings](/dashboard/project/_/auth/providers), updating the user's password would require a nonce if the user **hasn't recently signed in**. The nonce is sent to the user's email or phone number. A user is deemed recently signed in if the session was created in the last 24 hours.\n   *\n   * @example Update the user's password with a nonce\n   * ```js\n   * const { data, error } = await supabase.auth.updateUser({\n   *   password: 'new password',\n   *   nonce: '123456'\n   * })\n   * ```\n   */\n  async updateUser(\n    attributes: UserAttributes,\n    options: {\n      emailRedirectTo?: string | undefined\n    } = {}\n  ): Promise<UserResponse> {\n    await this.initializePromise\n\n    return await this._acquireLock(this.lockAcquireTimeout, async () => {\n      return await this._updateUser(attributes, options)\n    })\n  }\n\n  protected async _updateUser(\n    attributes: UserAttributes,\n    options: {\n      emailRedirectTo?: string | undefined\n    } = {}\n  ): Promise<UserResponse> {\n    try {\n      return await this._useSession(async (result) => {\n        const { data: sessionData, error: sessionError } = result\n        if (sessionError) {\n          throw sessionError\n        }\n        if (!sessionData.session) {\n          throw new AuthSessionMissingError()\n        }\n        const session: Session = sessionData.session\n        let codeChallenge: string | null = null\n        let codeChallengeMethod: string | null = null\n        if (this.flowType === 'pkce' && attributes.email != null) {\n          ;[codeChallenge, codeChallengeMethod] = await getCodeChallengeAndMethod(\n            this.storage,\n            this.storageKey\n          )\n        }\n\n        const { data, error: userError } = await _request(this.fetch, 'PUT', `${this.url}/user`, {\n          headers: this.headers,\n          redirectTo: options?.emailRedirectTo,\n          body: {\n            ...attributes,\n            code_challenge: codeChallenge,\n            code_challenge_method: codeChallengeMethod,\n          },\n          jwt: session.access_token,\n          xform: _userResponse,\n        })\n        if (userError) {\n          throw userError\n        }\n        session.user = data.user as User\n        await this._saveSession(session)\n        await this._notifyAllSubscribers('USER_UPDATED', session)\n        return this._returnResult({ data: { user: session.user }, error: null })\n      })\n    } catch (error) {\n      await removeItemAsync(this.storage, `${this.storageKey}-code-verifier`)\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { user: null }, error })\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Sets the session data from the current session. If the current session is expired, setSession will take care of refreshing it to obtain a new session.\n   * If the refresh token or access token in the current session is invalid, an error will be thrown.\n   * @param currentSession The current session that minimally contains an access token and refresh token.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - This method sets the session using an `access_token` and `refresh_token`.\n   * - If successful, a `SIGNED_IN` event is emitted.\n   *\n   * @exampleDescription Set the session\n   * Sets the session data from an access_token and refresh_token, then returns an auth response or error.\n   *\n   * @example Set the session\n   * ```js\n   *   const { data, error } = await supabase.auth.setSession({\n   *     access_token,\n   *     refresh_token\n   *   })\n   * ```\n   *\n   * @exampleResponse Set the session\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"user\": {\n   *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *       \"aud\": \"authenticated\",\n   *       \"role\": \"authenticated\",\n   *       \"email\": \"example@email.com\",\n   *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *       \"phone\": \"\",\n   *       \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *       \"app_metadata\": {\n   *         \"provider\": \"email\",\n   *         \"providers\": [\n   *           \"email\"\n   *         ]\n   *       },\n   *       \"user_metadata\": {\n   *         \"email\": \"example@email.com\",\n   *         \"email_verified\": false,\n   *         \"phone_verified\": false,\n   *         \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *       },\n   *       \"identities\": [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"identity_data\": {\n   *             \"email\": \"example@email.com\",\n   *             \"email_verified\": false,\n   *             \"phone_verified\": false,\n   *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *           },\n   *           \"provider\": \"email\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"example@email.com\"\n   *         }\n   *       ],\n   *       \"created_at\": \"2024-01-01T00:00:00Z\",\n   *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *       \"is_anonymous\": false\n   *     },\n   *     \"session\": {\n   *       \"access_token\": \"<ACCESS_TOKEN>\",\n   *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n   *       \"user\": {\n   *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *         \"aud\": \"authenticated\",\n   *         \"role\": \"authenticated\",\n   *         \"email\": \"example@email.com\",\n   *         \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *         \"phone\": \"\",\n   *         \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *         \"last_sign_in_at\": \"11111111-1111-1111-1111-111111111111\",\n   *         \"app_metadata\": {\n   *           \"provider\": \"email\",\n   *           \"providers\": [\n   *             \"email\"\n   *           ]\n   *         },\n   *         \"user_metadata\": {\n   *           \"email\": \"example@email.com\",\n   *           \"email_verified\": false,\n   *           \"phone_verified\": false,\n   *           \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *         },\n   *         \"identities\": [\n   *           {\n   *             \"identity_id\": \"2024-01-01T00:00:00Z\",\n   *             \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *             \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *             \"identity_data\": {\n   *               \"email\": \"example@email.com\",\n   *               \"email_verified\": false,\n   *               \"phone_verified\": false,\n   *               \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *             },\n   *             \"provider\": \"email\",\n   *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *             \"created_at\": \"2024-01-01T00:00:00Z\",\n   *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *             \"email\": \"example@email.com\"\n   *           }\n   *         ],\n   *         \"created_at\": \"2024-01-01T00:00:00Z\",\n   *         \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *         \"is_anonymous\": false\n   *       },\n   *       \"token_type\": \"bearer\",\n   *       \"expires_in\": 3500,\n   *       \"expires_at\": 1700000000\n   *     }\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   */\n  async setSession(currentSession: {\n    access_token: string\n    refresh_token: string\n  }): Promise<AuthResponse> {\n    await this.initializePromise\n\n    return await this._acquireLock(this.lockAcquireTimeout, async () => {\n      return await this._setSession(currentSession)\n    })\n  }\n\n  protected async _setSession(currentSession: {\n    access_token: string\n    refresh_token: string\n  }): Promise<AuthResponse> {\n    try {\n      if (!currentSession.access_token || !currentSession.refresh_token) {\n        throw new AuthSessionMissingError()\n      }\n\n      const timeNow = Date.now() / 1000\n      let expiresAt = timeNow\n      let hasExpired = true\n      let session: Session | null = null\n      const { payload } = decodeJWT(currentSession.access_token)\n      if (payload.exp) {\n        expiresAt = payload.exp\n        hasExpired = expiresAt <= timeNow\n      }\n\n      if (hasExpired) {\n        const { data: refreshedSession, error } = await this._callRefreshToken(\n          currentSession.refresh_token\n        )\n        if (error) {\n          return this._returnResult({ data: { user: null, session: null }, error: error })\n        }\n\n        if (!refreshedSession) {\n          return { data: { user: null, session: null }, error: null }\n        }\n        session = refreshedSession\n      } else {\n        const { data, error } = await this._getUser(currentSession.access_token)\n        if (error) {\n          return this._returnResult({ data: { user: null, session: null }, error })\n        }\n        session = {\n          access_token: currentSession.access_token,\n          refresh_token: currentSession.refresh_token,\n          user: data.user,\n          token_type: 'bearer',\n          expires_in: expiresAt - timeNow,\n          expires_at: expiresAt,\n        }\n        await this._saveSession(session)\n        await this._notifyAllSubscribers('SIGNED_IN', session)\n      }\n\n      return this._returnResult({ data: { user: session.user, session }, error: null })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { session: null, user: null }, error })\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Returns a new session, regardless of expiry status.\n   * Takes in an optional current session. If not passed in, then refreshSession() will attempt to retrieve it from getSession().\n   * If the current session's refresh token is invalid, an error will be thrown.\n   * @param currentSession The current session. If passed in, it must contain a refresh token.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - This method will refresh and return a new session whether the current one is expired or not.\n   *\n   * @example Refresh session using the current session\n   * ```js\n   * const { data, error } = await supabase.auth.refreshSession()\n   * const { session, user } = data\n   * ```\n   *\n   * @exampleResponse Refresh session using the current session\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"user\": {\n   *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *       \"aud\": \"authenticated\",\n   *       \"role\": \"authenticated\",\n   *       \"email\": \"example@email.com\",\n   *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *       \"phone\": \"\",\n   *       \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *       \"app_metadata\": {\n   *         \"provider\": \"email\",\n   *         \"providers\": [\n   *           \"email\"\n   *         ]\n   *       },\n   *       \"user_metadata\": {\n   *         \"email\": \"example@email.com\",\n   *         \"email_verified\": false,\n   *         \"phone_verified\": false,\n   *         \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *       },\n   *       \"identities\": [\n   *         {\n   *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *           \"identity_data\": {\n   *             \"email\": \"example@email.com\",\n   *             \"email_verified\": false,\n   *             \"phone_verified\": false,\n   *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *           },\n   *           \"provider\": \"email\",\n   *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *           \"created_at\": \"2024-01-01T00:00:00Z\",\n   *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *           \"email\": \"example@email.com\"\n   *         }\n   *       ],\n   *       \"created_at\": \"2024-01-01T00:00:00Z\",\n   *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *       \"is_anonymous\": false\n   *     },\n   *     \"session\": {\n   *       \"access_token\": \"<ACCESS_TOKEN>\",\n   *       \"token_type\": \"bearer\",\n   *       \"expires_in\": 3600,\n   *       \"expires_at\": 1700000000,\n   *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n   *       \"user\": {\n   *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *         \"aud\": \"authenticated\",\n   *         \"role\": \"authenticated\",\n   *         \"email\": \"example@email.com\",\n   *         \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *         \"phone\": \"\",\n   *         \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n   *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *         \"app_metadata\": {\n   *           \"provider\": \"email\",\n   *           \"providers\": [\n   *             \"email\"\n   *           ]\n   *         },\n   *         \"user_metadata\": {\n   *           \"email\": \"example@email.com\",\n   *           \"email_verified\": false,\n   *           \"phone_verified\": false,\n   *           \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *         },\n   *         \"identities\": [\n   *           {\n   *             \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *             \"id\": \"11111111-1111-1111-1111-111111111111\",\n   *             \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n   *             \"identity_data\": {\n   *               \"email\": \"example@email.com\",\n   *               \"email_verified\": false,\n   *               \"phone_verified\": false,\n   *               \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *             },\n   *             \"provider\": \"email\",\n   *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *             \"created_at\": \"2024-01-01T00:00:00Z\",\n   *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *             \"email\": \"example@email.com\"\n   *           }\n   *         ],\n   *         \"created_at\": \"2024-01-01T00:00:00Z\",\n   *         \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *         \"is_anonymous\": false\n   *       }\n   *     }\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   *\n   * @example Refresh session using a refresh token\n   * ```js\n   * const { data, error } = await supabase.auth.refreshSession({ refresh_token })\n   * const { session, user } = data\n   * ```\n   */\n  async refreshSession(currentSession?: { refresh_token: string }): Promise<AuthResponse> {\n    await this.initializePromise\n\n    return await this._acquireLock(this.lockAcquireTimeout, async () => {\n      return await this._refreshSession(currentSession)\n    })\n  }\n\n  protected async _refreshSession(currentSession?: {\n    refresh_token: string\n  }): Promise<AuthResponse> {\n    try {\n      return await this._useSession(async (result) => {\n        if (!currentSession) {\n          const { data, error } = result\n          if (error) {\n            throw error\n          }\n\n          currentSession = data.session ?? undefined\n        }\n\n        if (!currentSession?.refresh_token) {\n          throw new AuthSessionMissingError()\n        }\n\n        const { data: session, error } = await this._callRefreshToken(currentSession.refresh_token)\n        if (error) {\n          return this._returnResult({ data: { user: null, session: null }, error: error })\n        }\n\n        if (!session) {\n          return this._returnResult({ data: { user: null, session: null }, error: null })\n        }\n\n        return this._returnResult({ data: { user: session.user, session }, error: null })\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { user: null, session: null }, error })\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Gets the session data from a URL string\n   */\n  private async _getSessionFromURL(\n    params: { [parameter: string]: string },\n    callbackUrlType: string\n  ): Promise<\n    | {\n        data: { session: Session; redirectType: string | null }\n        error: null\n      }\n    | { data: { session: null; redirectType: null }; error: AuthError }\n  > {\n    try {\n      if (!isBrowser()) throw new AuthImplicitGrantRedirectError('No browser detected.')\n\n      // If there's an error in the URL, it doesn't matter what flow it is, we just return the error.\n      if (params.error || params.error_description || params.error_code) {\n        // The error class returned implies that the redirect is from an implicit grant flow\n        // but it could also be from a redirect error from a PKCE flow.\n        throw new AuthImplicitGrantRedirectError(\n          params.error_description || 'Error in URL with unspecified error_description',\n          {\n            error: params.error || 'unspecified_error',\n            code: params.error_code || 'unspecified_code',\n          }\n        )\n      }\n\n      // Checks for mismatches between the flowType initialised in the client and the URL parameters\n      switch (callbackUrlType) {\n        case 'implicit':\n          if (this.flowType === 'pkce') {\n            throw new AuthPKCEGrantCodeExchangeError('Not a valid PKCE flow url.')\n          }\n          break\n        case 'pkce':\n          if (this.flowType === 'implicit') {\n            throw new AuthImplicitGrantRedirectError('Not a valid implicit grant flow url.')\n          }\n          break\n        default:\n        // there's no mismatch so we continue\n      }\n\n      // Since this is a redirect for PKCE, we attempt to retrieve the code from the URL for the code exchange\n      if (callbackUrlType === 'pkce') {\n        this._debug('#_initialize()', 'begin', 'is PKCE flow', true)\n        if (!params.code) throw new AuthPKCEGrantCodeExchangeError('No code detected.')\n        const { data, error } = await this._exchangeCodeForSession(params.code)\n        if (error) throw error\n\n        const url = new URL(window.location.href)\n        url.searchParams.delete('code')\n\n        window.history.replaceState(window.history.state, '', url.toString())\n\n        return {\n          data: { session: data.session, redirectType: data.redirectType ?? null },\n          error: null,\n        }\n      }\n\n      const {\n        provider_token,\n        provider_refresh_token,\n        access_token,\n        refresh_token,\n        expires_in,\n        expires_at,\n        token_type,\n      } = params\n\n      if (!access_token || !expires_in || !refresh_token || !token_type) {\n        throw new AuthImplicitGrantRedirectError('No session defined in URL')\n      }\n\n      const timeNow = Math.round(Date.now() / 1000)\n      const expiresIn = parseInt(expires_in)\n      let expiresAt = timeNow + expiresIn\n\n      if (expires_at) {\n        expiresAt = parseInt(expires_at)\n      }\n\n      const actuallyExpiresIn = expiresAt - timeNow\n      if (actuallyExpiresIn * 1000 <= AUTO_REFRESH_TICK_DURATION_MS) {\n        console.warn(\n          `@supabase/gotrue-js: Session as retrieved from URL expires in ${actuallyExpiresIn}s, should have been closer to ${expiresIn}s`\n        )\n      }\n\n      const issuedAt = expiresAt - expiresIn\n      if (timeNow - issuedAt >= 120) {\n        console.warn(\n          '@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale',\n          issuedAt,\n          expiresAt,\n          timeNow\n        )\n      } else if (timeNow - issuedAt < 0) {\n        console.warn(\n          '@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew',\n          issuedAt,\n          expiresAt,\n          timeNow\n        )\n      }\n\n      const { data, error } = await this._getUser(access_token)\n      if (error) throw error\n\n      const session: Session = {\n        provider_token,\n        provider_refresh_token,\n        access_token,\n        expires_in: expiresIn,\n        expires_at: expiresAt,\n        refresh_token,\n        token_type: token_type as 'bearer',\n        user: data.user,\n      }\n\n      // Remove tokens from URL\n      window.location.hash = ''\n      this._debug('#_getSessionFromURL()', 'clearing window.location.hash')\n\n      return this._returnResult({ data: { session, redirectType: params.type }, error: null })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { session: null, redirectType: null }, error })\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Checks if the current URL contains parameters given by an implicit oauth grant flow (https://www.rfc-editor.org/rfc/rfc6749.html#section-4.2)\n   *\n   * If `detectSessionInUrl` is a function, it will be called with the URL and params to determine\n   * if the URL should be processed as a Supabase auth callback. This allows users to exclude\n   * URLs from other OAuth providers (e.g., Facebook Login) that also return access_token in the fragment.\n   */\n  private _isImplicitGrantCallback(params: { [parameter: string]: string }): boolean {\n    if (typeof this.detectSessionInUrl === 'function') {\n      return this.detectSessionInUrl(new URL(window.location.href), params)\n    }\n    return Boolean(params.access_token || params.error_description)\n  }\n\n  /**\n   * Checks if the current URL and backing storage contain parameters given by a PKCE flow\n   */\n  private async _isPKCECallback(params: { [parameter: string]: string }): Promise<boolean> {\n    const currentStorageContent = await getItemAsync(\n      this.storage,\n      `${this.storageKey}-code-verifier`\n    )\n\n    return !!(params.code && currentStorageContent)\n  }\n\n  /**\n   * Inside a browser context, `signOut()` will remove the logged in user from the browser session and log them out - removing all items from localstorage and then trigger a `\"SIGNED_OUT\"` event.\n   *\n   * For server-side management, you can revoke all refresh tokens for a user by passing a user's JWT through to `auth.api.signOut(JWT: string)`.\n   * There is no way to revoke a user's access token jwt until it expires. It is recommended to set a shorter expiry on the jwt for this reason.\n   *\n   * If using `others` scope, no `SIGNED_OUT` event is fired!\n   *\n   * **Warning:** the default `scope` is `'global'`. This signs the user out of\n   * **every device they are currently signed in on**, not just the current\n   * tab/session. If you only want to sign the user out of the current session\n   * (the behavior most other auth libraries default to), pass\n   * `{ scope: 'local' }` explicitly.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - In order to use the `signOut()` method, the user needs to be signed in first.\n   * - By default, `signOut()` uses the **global** scope, which signs out the user\n   *   on every device they are signed in on (not just the current one). Pass\n   *   `{ scope: 'local' }` to only sign out the current session. This is\n   *   usually what apps want on a \"Sign out\" button, especially when users\n   *   sign in from multiple devices and do not expect signing out of one to\n   *   terminate the others.\n   * - Since Supabase Auth uses JWTs for authentication, the access token JWT will be valid until it's expired. When the user signs out, Supabase revokes the refresh token and deletes the JWT from the client-side. This does not revoke the JWT and it will still be valid until it expires.\n   *\n   * @example Sign out of every device (global \u2013 default)\n   * ```js\n   * const { error } = await supabase.auth.signOut()\n   * ```\n   *\n   * @example Sign out only the current session (recommended for most apps)\n   * ```js\n   * const { error } = await supabase.auth.signOut({ scope: 'local' })\n   * ```\n   *\n   * @example Sign out of all other sessions, keep the current one\n   * ```js\n   * const { error } = await supabase.auth.signOut({ scope: 'others' })\n   * ```\n   */\n  async signOut(options: SignOut = { scope: 'global' }): Promise<{ error: AuthError | null }> {\n    await this.initializePromise\n\n    return await this._acquireLock(this.lockAcquireTimeout, async () => {\n      return await this._signOut(options)\n    })\n  }\n\n  protected async _signOut(\n    { scope }: SignOut = { scope: 'global' }\n  ): Promise<{ error: AuthError | null }> {\n    return await this._useSession(async (result) => {\n      const { data, error: sessionError } = result\n      if (sessionError && !isAuthSessionMissingError(sessionError)) {\n        return this._returnResult({ error: sessionError })\n      }\n      const accessToken = data.session?.access_token\n      if (accessToken) {\n        const { error } = await this.admin.signOut(accessToken, scope)\n        if (error) {\n          // ignore 404s since user might not exist anymore\n          // ignore 401s since an invalid or expired JWT should sign out the current session\n          if (\n            !(\n              (isAuthApiError(error) &&\n                (error.status === 404 || error.status === 401 || error.status === 403)) ||\n              isAuthSessionMissingError(error)\n            )\n          ) {\n            return this._returnResult({ error })\n          }\n        }\n      }\n      if (scope !== 'others') {\n        await this._removeSession()\n        await removeItemAsync(this.storage, `${this.storageKey}-code-verifier`)\n      }\n      return this._returnResult({ error: null })\n    })\n  }\n\n  /**\n   * Receive a notification every time an auth event happens.\n   * Safe to use without an async function as callback.\n   *\n   * @param callback A callback function to be invoked when an auth event happens.\n   */\n  onAuthStateChange(callback: (event: AuthChangeEvent, session: Session | null) => void): {\n    data: { subscription: Subscription }\n  }\n\n  /**\n   * Avoid using an async function inside `onAuthStateChange` as you might end\n   * up with a deadlock. The callback function runs inside an exclusive lock,\n   * so calling other Supabase Client APIs that also try to acquire the\n   * exclusive lock, might cause a deadlock. This behavior is observable across\n   * tabs. In the next major library version, this behavior will not be supported.\n   *\n   * Receive a notification every time an auth event happens.\n   *\n   * @param callback A callback function to be invoked when an auth event happens.\n   * @deprecated Due to the possibility of deadlocks with async functions as callbacks, use the version without an async function.\n   */\n  onAuthStateChange(callback: (event: AuthChangeEvent, session: Session | null) => Promise<void>): {\n    data: { subscription: Subscription }\n  }\n\n  /**  *\n   * @category Auth\n   *\n   * @remarks\n   * - Subscribes to important events occurring on the user's session.\n   * - Use on the frontend/client. It is less useful on the server.\n   * - Events are emitted across tabs to keep your application's UI up-to-date. Some events can fire very frequently, based on the number of tabs open. Use a quick and efficient callback function, and defer or debounce as many operations as you can to be performed outside of the callback.\n   * - **Important:** A callback can be an `async` function and it runs synchronously during the processing of the changes causing the event. You can easily create a dead-lock by using `await` on a call to another method of the Supabase library.\n   *   - Avoid using `async` functions as callbacks.\n   *   - Limit the number of `await` calls in `async` callbacks.\n   *   - Do not use other Supabase functions in the callback function. If you must, dispatch the functions once the callback has finished executing. Use this as a quick way to achieve this:\n   *     ```js\n   *     supabase.auth.onAuthStateChange((event, session) => {\n   *       setTimeout(async () => {\n   *         // await on other Supabase function here\n   *         // this runs right after the callback has finished\n   *       }, 0)\n   *     })\n   *     ```\n   * - Emitted events:\n   *   - `INITIAL_SESSION`\n   *     - Emitted right after the Supabase client is constructed and the initial session from storage is loaded.\n   *   - `SIGNED_IN`\n   *     - Emitted each time a user session is confirmed or re-established, including on user sign in and when refocusing a tab.\n   *     - Avoid making assumptions as to when this event is fired, this may occur even when the user is already signed in. Instead, check the user object attached to the event to see if a new user has signed in and update your application's UI.\n   *     - This event can fire very frequently depending on the number of tabs open in your application.\n   *   - `SIGNED_OUT`\n   *     - Emitted when the user signs out. This can be after:\n   *       - A call to `supabase.auth.signOut()`.\n   *       - After the user's session has expired for any reason:\n   *         - User has signed out on another device.\n   *         - The session has reached its timebox limit or inactivity timeout.\n   *         - User has signed in on another device with single session per user enabled.\n   *         - Check the [User Sessions](/docs/guides/auth/sessions) docs for more information.\n   *     - Use this to clean up any local storage your application has associated with the user.\n   *   - `TOKEN_REFRESHED`\n   *     - Emitted each time a new access and refresh token are fetched for the signed in user.\n   *     - It's best practice and highly recommended to extract the access token (JWT) and store it in memory for further use in your application.\n   *       - Avoid frequent calls to `supabase.auth.getSession()` for the same purpose.\n   *     - There is a background process that keeps track of when the session should be refreshed so you will always receive valid tokens by listening to this event.\n   *     - The frequency of this event is related to the JWT expiry limit configured on your project.\n   *   - `USER_UPDATED`\n   *     - Emitted each time the `supabase.auth.updateUser()` method finishes successfully. Listen to it to update your application's UI based on new profile information.\n   *   - `PASSWORD_RECOVERY`\n   *     - Emitted instead of the `SIGNED_IN` event when the user lands on a page that includes a password recovery link in the URL.\n   *     - Use it to show a UI to the user where they can [reset their password](/docs/guides/auth/passwords#resetting-a-users-password-forgot-password).\n   *\n   * @example Listen to auth changes\n   * ```js\n   * const { data } = supabase.auth.onAuthStateChange((event, session) => {\n   *   console.log(event, session)\n   *\n   *   if (event === 'INITIAL_SESSION') {\n   *     // handle initial session\n   *   } else if (event === 'SIGNED_IN') {\n   *     // handle sign in event\n   *   } else if (event === 'SIGNED_OUT') {\n   *     // handle sign out event\n   *   } else if (event === 'PASSWORD_RECOVERY') {\n   *     // handle password recovery event\n   *   } else if (event === 'TOKEN_REFRESHED') {\n   *     // handle token refreshed event\n   *   } else if (event === 'USER_UPDATED') {\n   *     // handle user updated event\n   *   }\n   * })\n   *\n   * // call unsubscribe to remove the callback\n   * data.subscription.unsubscribe()\n   * ```\n   *\n   * @exampleDescription Listen to sign out\n   * Make sure you clear out any local data, such as local and session storage, after the client library has detected the user's sign out.\n   *\n   * @example Listen to sign out\n   * ```js\n   * supabase.auth.onAuthStateChange((event, session) => {\n   *   if (event === 'SIGNED_OUT') {\n   *     console.log('SIGNED_OUT', session)\n   *\n   *     // clear local and session storage\n   *     [\n   *       window.localStorage,\n   *       window.sessionStorage,\n   *     ].forEach((storage) => {\n   *       Object.entries(storage)\n   *         .forEach(([key]) => {\n   *           storage.removeItem(key)\n   *         })\n   *     })\n   *   }\n   * })\n   * ```\n   *\n   * @exampleDescription Store OAuth provider tokens on sign in\n   * When using [OAuth (Social Login)](/docs/guides/auth/social-login) you sometimes wish to get access to the provider's access token and refresh token, in order to call provider APIs in the name of the user.\n   *\n   * For example, if you are using [Sign in with Google](/docs/guides/auth/social-login/auth-google) you may want to use the provider token to call Google APIs on behalf of the user. Supabase Auth does not keep track of the provider access and refresh token, but does return them for you once, immediately after sign in. You can use the `onAuthStateChange` method to listen for the presence of the provider tokens and store them in local storage. You can further send them to your server's APIs for use on the backend.\n   *\n   * Finally, make sure you remove them from local storage on the `SIGNED_OUT` event. If the OAuth provider supports token revocation, make sure you call those APIs either from the frontend or schedule them to be called on the backend.\n   *\n   * @example Store OAuth provider tokens on sign in\n   * ```js\n   * // Register this immediately after calling createClient!\n   * // Because signInWithOAuth causes a redirect, you need to fetch the\n   * // provider tokens from the callback.\n   * supabase.auth.onAuthStateChange((event, session) => {\n   *   if (session && session.provider_token) {\n   *     window.localStorage.setItem('oauth_provider_token', session.provider_token)\n   *   }\n   *\n   *   if (session && session.provider_refresh_token) {\n   *     window.localStorage.setItem('oauth_provider_refresh_token', session.provider_refresh_token)\n   *   }\n   *\n   *   if (event === 'SIGNED_OUT') {\n   *     window.localStorage.removeItem('oauth_provider_token')\n   *     window.localStorage.removeItem('oauth_provider_refresh_token')\n   *   }\n   * })\n   * ```\n   *\n   * @exampleDescription Use React Context for the User's session\n   * Instead of relying on `supabase.auth.getSession()` within your React components, you can use a [React Context](https://react.dev/reference/react/createContext) to store the latest session information from the `onAuthStateChange` callback and access it that way.\n   *\n   * @example Use React Context for the User's session\n   * ```js\n   * const SessionContext = React.createContext(null)\n   *\n   * function main() {\n   *   const [session, setSession] = React.useState(null)\n   *\n   *   React.useEffect(() => {\n   *     const {data: { subscription }} = supabase.auth.onAuthStateChange(\n   *       (event, session) => {\n   *         if (event === 'SIGNED_OUT') {\n   *           setSession(null)\n   *         } else if (session) {\n   *           setSession(session)\n   *         }\n   *       })\n   *\n   *     return () => {\n   *       subscription.unsubscribe()\n   *     }\n   *   }, [])\n   *\n   *   return (\n   *     <SessionContext.Provider value={session}>\n   *       <App />\n   *     </SessionContext.Provider>\n   *   )\n   * }\n   * ```\n   *\n   * @example Listen to password recovery events\n   * ```js\n   * supabase.auth.onAuthStateChange((event, session) => {\n   *   if (event === 'PASSWORD_RECOVERY') {\n   *     console.log('PASSWORD_RECOVERY', session)\n   *     // show screen to update user's password\n   *     showPasswordResetScreen(true)\n   *   }\n   * })\n   * ```\n   *\n   * @example Listen to sign in\n   * ```js\n   * supabase.auth.onAuthStateChange((event, session) => {\n   *   if (event === 'SIGNED_IN') console.log('SIGNED_IN', session)\n   * })\n   * ```\n   *\n   * @example Listen to token refresh\n   * ```js\n   * supabase.auth.onAuthStateChange((event, session) => {\n   *   if (event === 'TOKEN_REFRESHED') console.log('TOKEN_REFRESHED', session)\n   * })\n   * ```\n   *\n   * @example Listen to user updates\n   * ```js\n   * supabase.auth.onAuthStateChange((event, session) => {\n   *   if (event === 'USER_UPDATED') console.log('USER_UPDATED', session)\n   * })\n   * ```\n   */\n  onAuthStateChange(\n    callback: (event: AuthChangeEvent, session: Session | null) => void | Promise<void>\n  ): {\n    data: { subscription: Subscription }\n  } {\n    const id: string | symbol = generateCallbackId()\n    const subscription: Subscription = {\n      id,\n      callback,\n      unsubscribe: () => {\n        this._debug('#unsubscribe()', 'state change callback with id removed', id)\n\n        this.stateChangeEmitters.delete(id)\n      },\n    }\n\n    this._debug('#onAuthStateChange()', 'registered callback with id', id)\n\n    this.stateChangeEmitters.set(id, subscription)\n    ;(async () => {\n      await this.initializePromise\n\n      await this._acquireLock(this.lockAcquireTimeout, async () => {\n        this._emitInitialSession(id)\n      })\n    })()\n\n    return { data: { subscription } }\n  }\n\n  private async _emitInitialSession(id: string | symbol): Promise<void> {\n    return await this._useSession(async (result) => {\n      try {\n        const {\n          data: { session },\n          error,\n        } = result\n        if (error) throw error\n\n        await this.stateChangeEmitters.get(id)?.callback('INITIAL_SESSION', session)\n        this._debug('INITIAL_SESSION', 'callback id', id, 'session', session)\n      } catch (err) {\n        await this.stateChangeEmitters.get(id)?.callback('INITIAL_SESSION', null)\n        this._debug('INITIAL_SESSION', 'callback id', id, 'error', err)\n        if (isAuthSessionMissingError(err)) {\n          console.warn(err)\n        } else {\n          console.error(err)\n        }\n      }\n    })\n  }\n\n  /**\n   * Sends a password reset request to an email address. This method supports the PKCE flow.\n   *\n   * @param email The email address of the user.\n   * @param options.redirectTo The URL to send the user to after they click the password reset link.\n   * @param options.captchaToken Verification token received when the user completes the captcha on the site.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - The password reset flow consist of 2 broad steps: (i) Allow the user to login via the password reset link; (ii) Update the user's password.\n   * - The `resetPasswordForEmail()` only sends a password reset link to the user's email.\n   * To update the user's password, see [`updateUser()`](/docs/reference/javascript/auth-updateuser).\n   * - A `PASSWORD_RECOVERY` event will be emitted when the password recovery link is clicked.\n   * You can use [`onAuthStateChange()`](/docs/reference/javascript/auth-onauthstatechange) to listen and invoke a callback function on these events.\n   * - When the user clicks the reset link in the email they are redirected back to your application.\n   * You can configure the URL that the user is redirected to with the `redirectTo` parameter.\n   * See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project.\n   * - After the user has been redirected successfully, prompt them for a new password and call `updateUser()`:\n   * ```js\n   * const { data, error } = await supabase.auth.updateUser({\n   *   password: new_password\n   * })\n   * ```\n   *\n   * @example Reset password\n   * ```js\n   * const { data, error } = await supabase.auth.resetPasswordForEmail(email, {\n   *   redirectTo: 'https://example.com/update-password',\n   * })\n   * ```\n   *\n   * @exampleResponse Reset password\n   * ```json\n   * {\n   *   data: {}\n   *   error: null\n   * }\n   * ```\n   *\n   * @example Reset password (React)\n   * ```js\n   * /**\n   *  * Step 1: Send the user an email to get a password reset token.\n   *  * This email contains a link which sends the user back to your application.\n   *  *\\/\n   * const { data, error } = await supabase.auth\n   *   .resetPasswordForEmail('user@email.com')\n   *\n   * /**\n   *  * Step 2: Once the user is redirected back to your application,\n   *  * ask the user to reset their password.\n   *  *\\/\n   *  useEffect(() => {\n   *    supabase.auth.onAuthStateChange(async (event, session) => {\n   *      if (event == \"PASSWORD_RECOVERY\") {\n   *        const newPassword = prompt(\"What would you like your new password to be?\");\n   *        const { data, error } = await supabase.auth\n   *          .updateUser({ password: newPassword })\n   *\n   *        if (data) alert(\"Password updated successfully!\")\n   *        if (error) alert(\"There was an error updating your password.\")\n   *      }\n   *    })\n   *  }, [])\n   * ```\n   */\n  async resetPasswordForEmail(\n    email: string,\n    options: {\n      redirectTo?: string\n      captchaToken?: string\n    } = {}\n  ): Promise<\n    | {\n        data: {}\n        error: null\n      }\n    | { data: null; error: AuthError }\n  > {\n    let codeChallenge: string | null = null\n    let codeChallengeMethod: string | null = null\n\n    if (this.flowType === 'pkce') {\n      ;[codeChallenge, codeChallengeMethod] = await getCodeChallengeAndMethod(\n        this.storage,\n        this.storageKey,\n        true // isPasswordRecovery\n      )\n    }\n    try {\n      return await _request(this.fetch, 'POST', `${this.url}/recover`, {\n        body: {\n          email,\n          code_challenge: codeChallenge,\n          code_challenge_method: codeChallengeMethod,\n          gotrue_meta_security: { captcha_token: options.captchaToken },\n        },\n        headers: this.headers,\n        redirectTo: options.redirectTo,\n      })\n    } catch (error) {\n      await removeItemAsync(this.storage, `${this.storageKey}-code-verifier`)\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Gets all the identities linked to a user.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - The user needs to be signed in to call `getUserIdentities()`.\n   *\n   * @example Returns a list of identities linked to the user\n   * ```js\n   * const { data, error } = await supabase.auth.getUserIdentities()\n   * ```\n   *\n   * @exampleResponse Returns a list of identities linked to the user\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"identities\": [\n   *       {\n   *         \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n   *         \"id\": \"2024-01-01T00:00:00Z\",\n   *         \"user_id\": \"2024-01-01T00:00:00Z\",\n   *         \"identity_data\": {\n   *           \"email\": \"example@email.com\",\n   *           \"email_verified\": false,\n   *           \"phone_verified\": false,\n   *           \"sub\": \"11111111-1111-1111-1111-111111111111\"\n   *         },\n   *         \"provider\": \"email\",\n   *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n   *         \"created_at\": \"2024-01-01T00:00:00Z\",\n   *         \"updated_at\": \"2024-01-01T00:00:00Z\",\n   *         \"email\": \"example@email.com\"\n   *       }\n   *     ]\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   */\n  async getUserIdentities(): Promise<\n    | {\n        data: {\n          identities: UserIdentity[]\n        }\n        error: null\n      }\n    | { data: null; error: AuthError }\n  > {\n    try {\n      const { data, error } = await this.getUser()\n      if (error) throw error\n      return this._returnResult({ data: { identities: data.user.identities ?? [] }, error: null })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Links an oauth identity to an existing user.\n   * This method supports the PKCE flow.\n   */\n  async linkIdentity(credentials: SignInWithOAuthCredentials): Promise<OAuthResponse>\n\n  /**\n   * Links an OIDC identity to an existing user.\n   */\n  async linkIdentity(credentials: SignInWithIdTokenCredentials): Promise<AuthTokenResponse>\n\n  /**  *\n   * @category Auth\n   *\n   * @remarks\n   * - The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).\n   * - The user needs to be signed in to call `linkIdentity()`.\n   * - If the candidate identity is already linked to the existing user or another user, `linkIdentity()` will fail.\n   * - If `linkIdentity` is run in the browser, the user is automatically redirected to the returned URL. On the server, you should handle the redirect.\n   *\n   * @example Link an identity to a user\n   * ```js\n   * const { data, error } = await supabase.auth.linkIdentity({\n   *   provider: 'github'\n   * })\n   * ```\n   *\n   * @exampleResponse Link an identity to a user\n   * ```json\n   * {\n   *   data: {\n   *     provider: 'github',\n   *     url: <PROVIDER_URL_TO_REDIRECT_TO>\n   *   },\n   *   error: null\n   * }\n   * ```\n   */\n  async linkIdentity(credentials: any): Promise<any> {\n    if ('token' in credentials) {\n      return this.linkIdentityIdToken(credentials)\n    }\n\n    return this.linkIdentityOAuth(credentials)\n  }\n\n  private async linkIdentityOAuth(credentials: SignInWithOAuthCredentials): Promise<OAuthResponse> {\n    try {\n      const { data, error } = await this._useSession(async (result) => {\n        const { data, error } = result\n        if (error) throw error\n        const url: string = await this._getUrlForProvider(\n          `${this.url}/user/identities/authorize`,\n          credentials.provider,\n          {\n            redirectTo: credentials.options?.redirectTo,\n            scopes: credentials.options?.scopes,\n            queryParams: credentials.options?.queryParams,\n            skipBrowserRedirect: true,\n          }\n        )\n        return await _request(this.fetch, 'GET', url, {\n          headers: this.headers,\n          jwt: data.session?.access_token ?? undefined,\n        })\n      })\n      if (error) throw error\n      if (isBrowser() && !credentials.options?.skipBrowserRedirect) {\n        window.location.assign(data?.url)\n      }\n      return this._returnResult({\n        data: { provider: credentials.provider, url: data?.url },\n        error: null,\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { provider: credentials.provider, url: null }, error })\n      }\n      throw error\n    }\n  }\n\n  private async linkIdentityIdToken(\n    credentials: SignInWithIdTokenCredentials\n  ): Promise<AuthTokenResponse> {\n    return await this._useSession(async (result) => {\n      try {\n        const {\n          error: sessionError,\n          data: { session },\n        } = result\n        if (sessionError) throw sessionError\n\n        const { options, provider, token, access_token, nonce } = credentials\n\n        const res = await _request(this.fetch, 'POST', `${this.url}/token?grant_type=id_token`, {\n          headers: this.headers,\n          jwt: session?.access_token ?? undefined,\n          body: {\n            provider,\n            id_token: token,\n            access_token,\n            nonce,\n            link_identity: true,\n            gotrue_meta_security: { captcha_token: options?.captchaToken },\n          },\n          xform: _sessionResponse,\n        })\n\n        const { data, error } = res\n        if (error) {\n          return this._returnResult({ data: { user: null, session: null }, error })\n        } else if (!data || !data.session || !data.user) {\n          return this._returnResult({\n            data: { user: null, session: null },\n            error: new AuthInvalidTokenResponseError(),\n          })\n        }\n        if (data.session) {\n          await this._saveSession(data.session)\n          await this._notifyAllSubscribers('USER_UPDATED', data.session)\n        }\n        return this._returnResult({ data, error })\n      } catch (error) {\n        await removeItemAsync(this.storage, `${this.storageKey}-code-verifier`)\n        if (isAuthError(error)) {\n          return this._returnResult({ data: { user: null, session: null }, error })\n        }\n        throw error\n      }\n    })\n  }\n\n  /**\n   * Unlinks an identity from a user by deleting it. The user will no longer be able to sign in with that identity once it's unlinked.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).\n   * - The user needs to be signed in to call `unlinkIdentity()`.\n   * - The user must have at least 2 identities in order to unlink an identity.\n   * - The identity to be unlinked must belong to the user.\n   *\n   * @example Unlink an identity\n   * ```js\n   * // retrieve all identities linked to a user\n   * const identities = await supabase.auth.getUserIdentities()\n   *\n   * // find the google identity\n   * const googleIdentity = identities.find(\n   *   identity => identity.provider === 'google'\n   * )\n   *\n   * // unlink the google identity\n   * const { error } = await supabase.auth.unlinkIdentity(googleIdentity)\n   * ```\n   */\n  async unlinkIdentity(identity: UserIdentity): Promise<\n    | {\n        data: {}\n        error: null\n      }\n    | { data: null; error: AuthError }\n  > {\n    try {\n      return await this._useSession(async (result) => {\n        const { data, error } = result\n        if (error) {\n          throw error\n        }\n        return await _request(\n          this.fetch,\n          'DELETE',\n          `${this.url}/user/identities/${identity.identity_id}`,\n          {\n            headers: this.headers,\n            jwt: data.session?.access_token ?? undefined,\n          }\n        )\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Generates a new JWT.\n   * @param refreshToken A valid refresh token that was returned on login.\n   */\n  private async _refreshAccessToken(refreshToken: string): Promise<AuthResponse> {\n    const debugName = `#_refreshAccessToken(${refreshToken.substring(0, 5)}...)`\n    this._debug(debugName, 'begin')\n\n    try {\n      const startedAt = Date.now()\n\n      // will attempt to refresh the token with exponential backoff\n      return await retryable(\n        async (attempt) => {\n          if (attempt > 0) {\n            await sleep(200 * Math.pow(2, attempt - 1)) // 200, 400, 800, ...\n          }\n\n          this._debug(debugName, 'refreshing attempt', attempt)\n\n          return await _request(this.fetch, 'POST', `${this.url}/token?grant_type=refresh_token`, {\n            body: { refresh_token: refreshToken },\n            headers: this.headers,\n            xform: _sessionResponse,\n          })\n        },\n        (attempt, error) => {\n          const nextBackOffInterval = 200 * Math.pow(2, attempt)\n          return (\n            error &&\n            isAuthRetryableFetchError(error) &&\n            // retryable only if the request can be sent before the backoff overflows the tick duration\n            Date.now() + nextBackOffInterval - startedAt < AUTO_REFRESH_TICK_DURATION_MS\n          )\n        }\n      )\n    } catch (error) {\n      this._debug(debugName, 'error', error)\n\n      if (isAuthError(error)) {\n        return this._returnResult({ data: { session: null, user: null }, error })\n      }\n      throw error\n    } finally {\n      this._debug(debugName, 'end')\n    }\n  }\n\n  private _isValidSession(maybeSession: unknown): maybeSession is Session {\n    const isValidSession =\n      typeof maybeSession === 'object' &&\n      maybeSession !== null &&\n      'access_token' in maybeSession &&\n      'refresh_token' in maybeSession &&\n      'expires_at' in maybeSession\n\n    return isValidSession\n  }\n\n  private async _handleProviderSignIn(\n    provider: Provider,\n    options: {\n      redirectTo?: string\n      scopes?: string\n      queryParams?: { [key: string]: string }\n      skipBrowserRedirect?: boolean\n    }\n  ) {\n    const url: string = await this._getUrlForProvider(`${this.url}/authorize`, provider, {\n      redirectTo: options.redirectTo,\n      scopes: options.scopes,\n      queryParams: options.queryParams,\n    })\n\n    this._debug('#_handleProviderSignIn()', 'provider', provider, 'options', options, 'url', url)\n\n    // try to open on the browser\n    if (isBrowser() && !options.skipBrowserRedirect) {\n      window.location.assign(url)\n    }\n\n    return { data: { provider, url }, error: null }\n  }\n\n  /**\n   * Recovers the session from LocalStorage and refreshes the token\n   * Note: this method is async to accommodate for AsyncStorage e.g. in React native.\n   */\n  private async _recoverAndRefresh() {\n    const debugName = '#_recoverAndRefresh()'\n    this._debug(debugName, 'begin')\n\n    try {\n      const currentSession = (await getItemAsync(this.storage, this.storageKey)) as Session | null\n\n      if (currentSession && this.userStorage) {\n        let maybeUser: { user: User | null } | null = (await getItemAsync(\n          this.userStorage,\n          this.storageKey + '-user'\n        )) as any\n\n        if (!this.storage.isServer && Object.is(this.storage, this.userStorage) && !maybeUser) {\n          // storage and userStorage are the same storage medium, for example\n          // window.localStorage if userStorage does not have the user from\n          // storage stored, store it first thereby migrating the user object\n          // from storage -> userStorage\n\n          maybeUser = { user: currentSession.user }\n          await setItemAsync(this.userStorage, this.storageKey + '-user', maybeUser)\n        }\n\n        currentSession.user = maybeUser?.user ?? userNotAvailableProxy()\n      } else if (currentSession && !currentSession.user) {\n        // user storage is not set, let's check if it was previously enabled so\n        // we bring back the storage as it should be\n\n        if (!currentSession.user) {\n          // test if userStorage was previously enabled and the storage medium was the same, to move the user back under the same key\n          const separateUser: { user: User | null } | null = (await getItemAsync(\n            this.storage,\n            this.storageKey + '-user'\n          )) as any\n\n          if (separateUser && separateUser?.user) {\n            currentSession.user = separateUser.user\n\n            await removeItemAsync(this.storage, this.storageKey + '-user')\n            await setItemAsync(this.storage, this.storageKey, currentSession)\n          } else {\n            currentSession.user = userNotAvailableProxy()\n          }\n        }\n      }\n\n      this._debug(debugName, 'session from storage', currentSession)\n\n      if (!this._isValidSession(currentSession)) {\n        this._debug(debugName, 'session is not valid')\n        if (currentSession !== null) {\n          await this._removeSession()\n        }\n\n        return\n      }\n\n      const expiresWithMargin =\n        (currentSession.expires_at ?? Infinity) * 1000 - Date.now() < EXPIRY_MARGIN_MS\n\n      this._debug(\n        debugName,\n        `session has${expiresWithMargin ? '' : ' not'} expired with margin of ${EXPIRY_MARGIN_MS}s`\n      )\n\n      if (expiresWithMargin) {\n        if (this.autoRefreshToken && currentSession.refresh_token) {\n          const { error } = await this._callRefreshToken(currentSession.refresh_token)\n\n          if (error) {\n            console.error(error)\n\n            if (!isAuthRetryableFetchError(error)) {\n              this._debug(\n                debugName,\n                'refresh failed with a non-retryable error, removing the session',\n                error\n              )\n              await this._removeSession()\n            }\n          }\n        }\n      } else if (\n        currentSession.user &&\n        (currentSession.user as any).__isUserNotAvailableProxy === true\n      ) {\n        // If we have a proxy user, try to get the real user data\n        try {\n          const { data, error: userError } = await this._getUser(currentSession.access_token)\n\n          if (!userError && data?.user) {\n            currentSession.user = data.user\n            await this._saveSession(currentSession)\n            await this._notifyAllSubscribers('SIGNED_IN', currentSession)\n          } else {\n            this._debug(debugName, 'could not get user data, skipping SIGNED_IN notification')\n          }\n        } catch (getUserError) {\n          console.error('Error getting user data:', getUserError)\n          this._debug(\n            debugName,\n            'error getting user data, skipping SIGNED_IN notification',\n            getUserError\n          )\n        }\n      } else {\n        // no need to persist currentSession again, as we just loaded it from\n        // local storage; persisting it again may overwrite a value saved by\n        // another client with access to the same local storage\n        await this._notifyAllSubscribers('SIGNED_IN', currentSession)\n      }\n    } catch (err) {\n      this._debug(debugName, 'error', err)\n\n      console.error(err)\n      return\n    } finally {\n      this._debug(debugName, 'end')\n    }\n  }\n\n  private async _callRefreshToken(refreshToken: string): Promise<CallRefreshTokenResult> {\n    if (!refreshToken) {\n      throw new AuthSessionMissingError()\n    }\n\n    // refreshing is already in progress\n    if (this.refreshingDeferred) {\n      return this.refreshingDeferred.promise\n    }\n\n    const debugName = `#_callRefreshToken(${refreshToken.substring(0, 5)}...)`\n\n    this._debug(debugName, 'begin')\n\n    try {\n      this.refreshingDeferred = new Deferred<CallRefreshTokenResult>()\n\n      const { data, error } = await this._refreshAccessToken(refreshToken)\n      if (error) throw error\n      if (!data.session) throw new AuthSessionMissingError()\n\n      await this._saveSession(data.session)\n      await this._notifyAllSubscribers('TOKEN_REFRESHED', data.session)\n\n      const result = { data: data.session, error: null }\n\n      this.refreshingDeferred.resolve(result)\n\n      return result\n    } catch (error) {\n      this._debug(debugName, 'error', error)\n\n      if (isAuthError(error)) {\n        const result = { data: null, error }\n\n        if (!isAuthRetryableFetchError(error)) {\n          await this._removeSession()\n        }\n\n        this.refreshingDeferred?.resolve(result)\n\n        return result\n      }\n\n      this.refreshingDeferred?.reject(error)\n      throw error\n    } finally {\n      this.refreshingDeferred = null\n      this._debug(debugName, 'end')\n    }\n  }\n\n  private async _notifyAllSubscribers(\n    event: AuthChangeEvent,\n    session: Session | null,\n    broadcast = true\n  ) {\n    const debugName = `#_notifyAllSubscribers(${event})`\n    this._debug(debugName, 'begin', session, `broadcast = ${broadcast}`)\n\n    try {\n      if (this.broadcastChannel && broadcast) {\n        this.broadcastChannel.postMessage({ event, session })\n      }\n\n      const errors: unknown[] = []\n      const promises = Array.from(this.stateChangeEmitters.values()).map(async (x) => {\n        try {\n          await x.callback(event, session)\n        } catch (e) {\n          errors.push(e)\n        }\n      })\n\n      await Promise.all(promises)\n\n      if (errors.length > 0) {\n        for (let i = 0; i < errors.length; i += 1) {\n          console.error(errors[i])\n        }\n\n        throw errors[0]\n      }\n    } finally {\n      this._debug(debugName, 'end')\n    }\n  }\n\n  /**\n   * set currentSession and currentUser\n   * process to _startAutoRefreshToken if possible\n   */\n  private async _saveSession(session: Session) {\n    this._debug('#_saveSession()', session)\n    // _saveSession is always called whenever a new session has been acquired\n    // so we can safely suppress the warning returned by future getSession calls\n    this.suppressGetSessionWarning = true\n    await removeItemAsync(this.storage, `${this.storageKey}-code-verifier`)\n    // Create a shallow copy to work with, to avoid mutating the original session object if it's used elsewhere\n    const sessionToProcess = { ...session }\n\n    const userIsProxy =\n      sessionToProcess.user && (sessionToProcess.user as any).__isUserNotAvailableProxy === true\n    if (this.userStorage) {\n      if (!userIsProxy && sessionToProcess.user) {\n        // If it's a real user object, save it to userStorage.\n        await setItemAsync(this.userStorage, this.storageKey + '-user', {\n          user: sessionToProcess.user,\n        })\n      } else if (userIsProxy) {\n        // If it's the proxy, it means user was not found in userStorage.\n        // We should ensure no stale user data for this key exists in userStorage if we were to save null,\n        // or simply not save the proxy. For now, we don't save the proxy here.\n        // If there's a need to clear userStorage if user becomes proxy, that logic would go here.\n      }\n\n      // Prepare the main session data for primary storage: remove the user property before cloning\n      // This is important because the original session.user might be the proxy\n      const mainSessionData: Omit<Session, 'user'> & { user?: User } = { ...sessionToProcess }\n      delete mainSessionData.user // Remove user (real or proxy) before cloning for main storage\n\n      const clonedMainSessionData = deepClone(mainSessionData)\n      await setItemAsync(this.storage, this.storageKey, clonedMainSessionData)\n    } else {\n      // No userStorage is configured.\n      // In this case, session.user should ideally not be a proxy.\n      // If it were, structuredClone would fail. This implies an issue elsewhere if user is a proxy here\n      const clonedSession = deepClone(sessionToProcess) // sessionToProcess still has its original user property\n      await setItemAsync(this.storage, this.storageKey, clonedSession)\n    }\n  }\n\n  private async _removeSession() {\n    this._debug('#_removeSession()')\n\n    this.suppressGetSessionWarning = false\n\n    await removeItemAsync(this.storage, this.storageKey)\n    await removeItemAsync(this.storage, this.storageKey + '-code-verifier')\n    await removeItemAsync(this.storage, this.storageKey + '-user')\n\n    if (this.userStorage) {\n      await removeItemAsync(this.userStorage, this.storageKey + '-user')\n    }\n\n    await this._notifyAllSubscribers('SIGNED_OUT', null)\n  }\n\n  /**\n   * Removes any registered visibilitychange callback.\n   *\n   * {@see #startAutoRefresh}\n   * {@see #stopAutoRefresh}\n   */\n  private _removeVisibilityChangedCallback() {\n    this._debug('#_removeVisibilityChangedCallback()')\n\n    const callback = this.visibilityChangedCallback\n    this.visibilityChangedCallback = null\n\n    try {\n      if (callback && isBrowser() && window?.removeEventListener) {\n        window.removeEventListener('visibilitychange', callback)\n      }\n    } catch (e) {\n      console.error('removing visibilitychange callback failed', e)\n    }\n  }\n\n  /**\n   * This is the private implementation of {@link #startAutoRefresh}. Use this\n   * within the library.\n   */\n  private async _startAutoRefresh() {\n    await this._stopAutoRefresh()\n\n    this._debug('#_startAutoRefresh()')\n\n    const ticker = setInterval(() => this._autoRefreshTokenTick(), AUTO_REFRESH_TICK_DURATION_MS)\n    this.autoRefreshTicker = ticker\n\n    if (ticker && typeof ticker === 'object' && typeof ticker.unref === 'function') {\n      // ticker is a NodeJS Timeout object that has an `unref` method\n      // https://nodejs.org/api/timers.html#timeoutunref\n      // When auto refresh is used in NodeJS (like for testing) the\n      // `setInterval` is preventing the process from being marked as\n      // finished and tests run endlessly. This can be prevented by calling\n      // `unref()` on the returned object.\n      ticker.unref()\n      // @ts-expect-error TS has no context of Deno\n    } else if (typeof Deno !== 'undefined' && typeof Deno.unrefTimer === 'function') {\n      // similar like for NodeJS, but with the Deno API\n      // https://deno.land/api@latest?unstable&s=Deno.unrefTimer\n      // @ts-expect-error TS has no context of Deno\n      Deno.unrefTimer(ticker)\n    }\n\n    // run the tick immediately, but in the next pass of the event loop so that\n    // #_initialize can be allowed to complete without recursively waiting on\n    // itself\n    const timeout = setTimeout(async () => {\n      await this.initializePromise\n      await this._autoRefreshTokenTick()\n    }, 0)\n    this.autoRefreshTickTimeout = timeout\n\n    if (timeout && typeof timeout === 'object' && typeof timeout.unref === 'function') {\n      timeout.unref()\n      // @ts-expect-error TS has no context of Deno\n    } else if (typeof Deno !== 'undefined' && typeof Deno.unrefTimer === 'function') {\n      // @ts-expect-error TS has no context of Deno\n      Deno.unrefTimer(timeout)\n    }\n  }\n\n  /**\n   * This is the private implementation of {@link #stopAutoRefresh}. Use this\n   * within the library.\n   */\n  private async _stopAutoRefresh() {\n    this._debug('#_stopAutoRefresh()')\n\n    const ticker = this.autoRefreshTicker\n    this.autoRefreshTicker = null\n\n    if (ticker) {\n      clearInterval(ticker)\n    }\n\n    const timeout = this.autoRefreshTickTimeout\n    this.autoRefreshTickTimeout = null\n\n    if (timeout) {\n      clearTimeout(timeout)\n    }\n  }\n\n  /**\n   * Starts an auto-refresh process in the background. The session is checked\n   * every few seconds. Close to the time of expiration a process is started to\n   * refresh the session. If refreshing fails it will be retried for as long as\n   * necessary.\n   *\n   * If you set the {@link GoTrueClientOptions#autoRefreshToken} you don't need\n   * to call this function, it will be called for you.\n   *\n   * On browsers the refresh process works only when the tab/window is in the\n   * foreground to conserve resources as well as prevent race conditions and\n   * flooding auth with requests. If you call this method any managed\n   * visibility change callback will be removed and you must manage visibility\n   * changes on your own.\n   *\n   * On non-browser platforms the refresh process works *continuously* in the\n   * background, which may not be desirable. You should hook into your\n   * platform's foreground indication mechanism and call these methods\n   * appropriately to conserve resources.\n   *\n   * {@see #stopAutoRefresh}\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - Only useful in non-browser environments such as React Native or Electron.\n   * - The Supabase Auth library automatically starts and stops proactively refreshing the session when a tab is focused or not.\n   * - On non-browser platforms, such as mobile or desktop apps built with web technologies, the library is not able to effectively determine whether the application is _focused_ or not.\n   * - To give this hint to the application, you should be calling this method when the app is in focus and calling `supabase.auth.stopAutoRefresh()` when it's out of focus.\n   *\n   * @example Start and stop auto refresh in React Native\n   * ```js\n   * import { AppState } from 'react-native'\n   *\n   * // make sure you register this only once!\n   * AppState.addEventListener('change', (state) => {\n   *   if (state === 'active') {\n   *     supabase.auth.startAutoRefresh()\n   *   } else {\n   *     supabase.auth.stopAutoRefresh()\n   *   }\n   * })\n   * ```\n   */\n  async startAutoRefresh() {\n    this._removeVisibilityChangedCallback()\n    await this._startAutoRefresh()\n  }\n\n  /**\n   * Stops an active auto refresh process running in the background (if any).\n   *\n   * If you call this method any managed visibility change callback will be\n   * removed and you must manage visibility changes on your own.\n   *\n   * See {@link #startAutoRefresh} for more details.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - Only useful in non-browser environments such as React Native or Electron.\n   * - The Supabase Auth library automatically starts and stops proactively refreshing the session when a tab is focused or not.\n   * - On non-browser platforms, such as mobile or desktop apps built with web technologies, the library is not able to effectively determine whether the application is _focused_ or not.\n   * - When your application goes in the background or out of focus, call this method to stop the proactive refreshing of the session.\n   *\n   * @example Start and stop auto refresh in React Native\n   * ```js\n   * import { AppState } from 'react-native'\n   *\n   * // make sure you register this only once!\n   * AppState.addEventListener('change', (state) => {\n   *   if (state === 'active') {\n   *     supabase.auth.startAutoRefresh()\n   *   } else {\n   *     supabase.auth.stopAutoRefresh()\n   *   }\n   * })\n   * ```\n   */\n  async stopAutoRefresh() {\n    this._removeVisibilityChangedCallback()\n    await this._stopAutoRefresh()\n  }\n\n  /**\n   * Runs the auto refresh token tick.\n   */\n  private async _autoRefreshTokenTick() {\n    this._debug('#_autoRefreshTokenTick()', 'begin')\n\n    try {\n      await this._acquireLock(0, async () => {\n        try {\n          const now = Date.now()\n\n          try {\n            return await this._useSession(async (result) => {\n              const {\n                data: { session },\n              } = result\n\n              if (!session || !session.refresh_token || !session.expires_at) {\n                this._debug('#_autoRefreshTokenTick()', 'no session')\n                return\n              }\n\n              // session will expire in this many ticks (or has already expired if <= 0)\n              const expiresInTicks = Math.floor(\n                (session.expires_at * 1000 - now) / AUTO_REFRESH_TICK_DURATION_MS\n              )\n\n              this._debug(\n                '#_autoRefreshTokenTick()',\n                `access token expires in ${expiresInTicks} ticks, a tick lasts ${AUTO_REFRESH_TICK_DURATION_MS}ms, refresh threshold is ${AUTO_REFRESH_TICK_THRESHOLD} ticks`\n              )\n\n              if (expiresInTicks <= AUTO_REFRESH_TICK_THRESHOLD) {\n                await this._callRefreshToken(session.refresh_token)\n              }\n            })\n          } catch (e) {\n            console.error(\n              'Auto refresh tick failed with error. This is likely a transient error.',\n              e\n            )\n          }\n        } finally {\n          this._debug('#_autoRefreshTokenTick()', 'end')\n        }\n      })\n    } catch (e) {\n      if (e instanceof LockAcquireTimeoutError) {\n        this._debug('auto refresh token tick lock not available')\n      } else {\n        throw e\n      }\n    }\n  }\n\n  /**\n   * Registers callbacks on the browser / platform, which in-turn run\n   * algorithms when the browser window/tab are in foreground. On non-browser\n   * platforms it assumes always foreground.\n   */\n  private async _handleVisibilityChange() {\n    this._debug('#_handleVisibilityChange()')\n\n    if (!isBrowser() || !window?.addEventListener) {\n      if (this.autoRefreshToken) {\n        // in non-browser environments the refresh token ticker runs always\n        this.startAutoRefresh()\n      }\n\n      return false\n    }\n\n    try {\n      this.visibilityChangedCallback = async () => {\n        try {\n          await this._onVisibilityChanged(false)\n        } catch (error) {\n          this._debug('#visibilityChangedCallback', 'error', error)\n        }\n      }\n\n      window?.addEventListener('visibilitychange', this.visibilityChangedCallback)\n\n      // now immediately call the visbility changed callback to setup with the\n      // current visbility state\n      await this._onVisibilityChanged(true) // initial call\n    } catch (error) {\n      console.error('_handleVisibilityChange', error)\n    }\n  }\n\n  /**\n   * Callback registered with `window.addEventListener('visibilitychange')`.\n   */\n  private async _onVisibilityChanged(calledFromInitialize: boolean) {\n    const methodName = `#_onVisibilityChanged(${calledFromInitialize})`\n    this._debug(methodName, 'visibilityState', document.visibilityState)\n\n    if (document.visibilityState === 'visible') {\n      if (this.autoRefreshToken) {\n        // in browser environments the refresh token ticker runs only on focused tabs\n        // which prevents race conditions\n        this._startAutoRefresh()\n      }\n\n      if (!calledFromInitialize) {\n        // called when the visibility has changed, i.e. the browser\n        // transitioned from hidden -> visible so we need to see if the session\n        // should be recovered immediately... but to do that we need to acquire\n        // the lock first asynchronously\n        await this.initializePromise\n\n        await this._acquireLock(this.lockAcquireTimeout, async () => {\n          if (document.visibilityState !== 'visible') {\n            this._debug(\n              methodName,\n              'acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting'\n            )\n\n            // visibility has changed while waiting for the lock, abort\n            return\n          }\n\n          // recover the session\n          await this._recoverAndRefresh()\n        })\n      }\n    } else if (document.visibilityState === 'hidden') {\n      if (this.autoRefreshToken) {\n        this._stopAutoRefresh()\n      }\n    }\n  }\n\n  /**\n   * Generates the relevant login URL for a third-party provider.\n   * @param options.redirectTo A URL or mobile address to send the user to after they are confirmed.\n   * @param options.scopes A space-separated list of scopes granted to the OAuth application.\n   * @param options.queryParams An object of key-value pairs containing query parameters granted to the OAuth application.\n   */\n  private async _getUrlForProvider(\n    url: string,\n    provider: Provider,\n    options: {\n      redirectTo?: string\n      scopes?: string\n      queryParams?: { [key: string]: string }\n      skipBrowserRedirect?: boolean\n    }\n  ) {\n    const urlParams: string[] = [`provider=${encodeURIComponent(provider)}`]\n    if (options?.redirectTo) {\n      urlParams.push(`redirect_to=${encodeURIComponent(options.redirectTo)}`)\n    }\n    if (options?.scopes) {\n      urlParams.push(`scopes=${encodeURIComponent(options.scopes)}`)\n    }\n    if (this.flowType === 'pkce') {\n      const [codeChallenge, codeChallengeMethod] = await getCodeChallengeAndMethod(\n        this.storage,\n        this.storageKey\n      )\n\n      const flowParams = new URLSearchParams({\n        code_challenge: `${encodeURIComponent(codeChallenge)}`,\n        code_challenge_method: `${encodeURIComponent(codeChallengeMethod)}`,\n      })\n      urlParams.push(flowParams.toString())\n    }\n    if (options?.queryParams) {\n      const query = new URLSearchParams(options.queryParams)\n      urlParams.push(query.toString())\n    }\n    if (options?.skipBrowserRedirect) {\n      urlParams.push(`skip_http_redirect=${options.skipBrowserRedirect}`)\n    }\n\n    return `${url}?${urlParams.join('&')}`\n  }\n\n  private async _unenroll(params: MFAUnenrollParams): Promise<AuthMFAUnenrollResponse> {\n    try {\n      return await this._useSession(async (result) => {\n        const { data: sessionData, error: sessionError } = result\n        if (sessionError) {\n          return this._returnResult({ data: null, error: sessionError })\n        }\n\n        return await _request(this.fetch, 'DELETE', `${this.url}/factors/${params.factorId}`, {\n          headers: this.headers,\n          jwt: sessionData?.session?.access_token,\n        })\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * {@see GoTrueMFAApi#enroll}\n   */\n  private async _enroll(params: MFAEnrollTOTPParams): Promise<AuthMFAEnrollTOTPResponse>\n  private async _enroll(params: MFAEnrollPhoneParams): Promise<AuthMFAEnrollPhoneResponse>\n  private async _enroll(params: MFAEnrollWebauthnParams): Promise<AuthMFAEnrollWebauthnResponse>\n  private async _enroll(params: MFAEnrollParams): Promise<AuthMFAEnrollResponse> {\n    try {\n      return await this._useSession(async (result) => {\n        const { data: sessionData, error: sessionError } = result\n        if (sessionError) {\n          return this._returnResult({ data: null, error: sessionError })\n        }\n\n        const body = {\n          friendly_name: params.friendlyName,\n          factor_type: params.factorType,\n          ...(params.factorType === 'phone'\n            ? { phone: params.phone }\n            : params.factorType === 'totp'\n              ? { issuer: params.issuer }\n              : {}),\n        }\n\n        const { data, error } = (await _request(this.fetch, 'POST', `${this.url}/factors`, {\n          body,\n          headers: this.headers,\n          jwt: sessionData?.session?.access_token,\n        })) as AuthMFAEnrollResponse\n        if (error) {\n          return this._returnResult({ data: null, error })\n        }\n\n        if (params.factorType === 'totp' && data.type === 'totp' && data?.totp?.qr_code) {\n          data.totp.qr_code = `data:image/svg+xml;utf-8,${data.totp.qr_code}`\n        }\n\n        return this._returnResult({ data, error: null })\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * {@see GoTrueMFAApi#verify}\n   */\n  private async _verify(params: MFAVerifyTOTPParams): Promise<AuthMFAVerifyResponse>\n  private async _verify(params: MFAVerifyPhoneParams): Promise<AuthMFAVerifyResponse>\n  private async _verify<T extends 'create' | 'request'>(\n    params: MFAVerifyWebauthnParams<T>\n  ): Promise<AuthMFAVerifyResponse>\n  private async _verify(params: MFAVerifyParams): Promise<AuthMFAVerifyResponse> {\n    return this._acquireLock(this.lockAcquireTimeout, async () => {\n      try {\n        return await this._useSession(async (result) => {\n          const { data: sessionData, error: sessionError } = result\n          if (sessionError) {\n            return this._returnResult({ data: null, error: sessionError })\n          }\n\n          const body: StrictOmit<\n            | Exclude<MFAVerifyParams, MFAVerifyWebauthnParams>\n            /** Exclude out the webauthn params from here because we're going to need to serialize them in the response */\n            | Prettify<\n                StrictOmit<MFAVerifyWebauthnParams, 'webauthn'> & {\n                  webauthn: Prettify<\n                    StrictOmit<MFAVerifyWebauthnParamFields['webauthn'], 'credential_response'> & {\n                      credential_response: PublicKeyCredentialJSON\n                    }\n                  >\n                }\n              >,\n            /*  Exclude challengeId because the backend expects snake_case, and exclude factorId since it's passed in the path params */\n            'challengeId' | 'factorId'\n          > & {\n            challenge_id: string\n          } = {\n            challenge_id: params.challengeId,\n            ...('webauthn' in params\n              ? {\n                  webauthn: {\n                    ...params.webauthn,\n                    credential_response:\n                      params.webauthn.type === 'create'\n                        ? serializeCredentialCreationResponse(\n                            params.webauthn.credential_response as RegistrationCredential\n                          )\n                        : serializeCredentialRequestResponse(\n                            params.webauthn.credential_response as AuthenticationCredential\n                          ),\n                  },\n                }\n              : { code: params.code }),\n          }\n\n          const { data, error } = await _request(\n            this.fetch,\n            'POST',\n            `${this.url}/factors/${params.factorId}/verify`,\n            {\n              body,\n              headers: this.headers,\n              jwt: sessionData?.session?.access_token,\n            }\n          )\n          if (error) {\n            return this._returnResult({ data: null, error })\n          }\n\n          await this._saveSession({\n            expires_at: Math.round(Date.now() / 1000) + data.expires_in,\n            ...data,\n          })\n          await this._notifyAllSubscribers('MFA_CHALLENGE_VERIFIED', data)\n\n          return this._returnResult({ data, error })\n        })\n      } catch (error) {\n        if (isAuthError(error)) {\n          return this._returnResult({ data: null, error })\n        }\n        throw error\n      }\n    })\n  }\n\n  /**\n   * {@see GoTrueMFAApi#challenge}\n   */\n  private async _challenge(\n    params: MFAChallengeTOTPParams\n  ): Promise<Prettify<AuthMFAChallengeTOTPResponse>>\n  private async _challenge(\n    params: MFAChallengePhoneParams\n  ): Promise<Prettify<AuthMFAChallengePhoneResponse>>\n  private async _challenge(\n    params: MFAChallengeWebauthnParams\n  ): Promise<Prettify<AuthMFAChallengeWebauthnResponse>>\n  private async _challenge(params: MFAChallengeParams): Promise<AuthMFAChallengeResponse> {\n    return this._acquireLock(this.lockAcquireTimeout, async () => {\n      try {\n        return await this._useSession(async (result) => {\n          const { data: sessionData, error: sessionError } = result\n          if (sessionError) {\n            return this._returnResult({ data: null, error: sessionError })\n          }\n\n          const response = (await _request(\n            this.fetch,\n            'POST',\n            `${this.url}/factors/${params.factorId}/challenge`,\n            {\n              body: params,\n              headers: this.headers,\n              jwt: sessionData?.session?.access_token,\n            }\n          )) as\n            | Exclude<AuthMFAChallengeResponse, AuthMFAChallengeWebauthnResponse>\n            /** The server will send `serialized` data, so we assert the serialized response */\n            | AuthMFAChallengeWebauthnServerResponse\n\n          if (response.error) {\n            return response\n          }\n\n          const { data } = response\n\n          if (data.type !== 'webauthn') {\n            return { data, error: null }\n          }\n\n          switch (data.webauthn.type) {\n            case 'create':\n              return {\n                data: {\n                  ...data,\n                  webauthn: {\n                    ...data.webauthn,\n                    credential_options: {\n                      ...data.webauthn.credential_options,\n                      publicKey: deserializeCredentialCreationOptions(\n                        data.webauthn.credential_options.publicKey\n                      ),\n                    },\n                  },\n                },\n                error: null,\n              }\n            case 'request':\n              return {\n                data: {\n                  ...data,\n                  webauthn: {\n                    ...data.webauthn,\n                    credential_options: {\n                      ...data.webauthn.credential_options,\n                      publicKey: deserializeCredentialRequestOptions(\n                        data.webauthn.credential_options.publicKey\n                      ),\n                    },\n                  },\n                },\n                error: null,\n              }\n          }\n        })\n      } catch (error) {\n        if (isAuthError(error)) {\n          return this._returnResult({ data: null, error })\n        }\n        throw error\n      }\n    })\n  }\n\n  /**\n   * {@see GoTrueMFAApi#challengeAndVerify}\n   */\n  private async _challengeAndVerify(\n    params: MFAChallengeAndVerifyParams\n  ): Promise<AuthMFAVerifyResponse> {\n    // both _challenge and _verify independently acquire the lock, so no need\n    // to acquire it here\n\n    const { data: challengeData, error: challengeError } = await this._challenge({\n      factorId: params.factorId,\n    })\n    if (challengeError) {\n      return this._returnResult({ data: null, error: challengeError })\n    }\n\n    return await this._verify({\n      factorId: params.factorId,\n      challengeId: challengeData.id,\n      code: params.code,\n    })\n  }\n\n  /**\n   * {@see GoTrueMFAApi#listFactors}\n   */\n  private async _listFactors(): Promise<AuthMFAListFactorsResponse> {\n    // use #getUser instead of #_getUser as the former acquires a lock\n    const {\n      data: { user },\n      error: userError,\n    } = await this.getUser()\n    if (userError) {\n      return { data: null, error: userError }\n    }\n\n    const data: AuthMFAListFactorsResponse['data'] = {\n      all: [],\n      phone: [],\n      totp: [],\n      webauthn: [],\n    }\n\n    // loop over the factors ONCE\n    for (const factor of user?.factors ?? []) {\n      data.all.push(factor)\n      if (factor.status === 'verified') {\n        ;(data[factor.factor_type] as (typeof factor)[]).push(factor)\n      }\n    }\n\n    return {\n      data,\n      error: null,\n    }\n  }\n\n  /**\n   * {@see GoTrueMFAApi#getAuthenticatorAssuranceLevel}\n   */\n  private async _getAuthenticatorAssuranceLevel(\n    jwt?: string\n  ): Promise<AuthMFAGetAuthenticatorAssuranceLevelResponse> {\n    if (jwt) {\n      try {\n        const { payload } = decodeJWT(jwt)\n\n        let currentLevel: AuthenticatorAssuranceLevels | null = null\n        if (payload.aal) {\n          currentLevel = payload.aal\n        }\n\n        let nextLevel: AuthenticatorAssuranceLevels | null = currentLevel\n\n        const {\n          data: { user },\n          error: userError,\n        } = await this.getUser(jwt)\n\n        if (userError) {\n          return this._returnResult({ data: null, error: userError })\n        }\n\n        const verifiedFactors =\n          user?.factors?.filter((factor: Factor) => factor.status === 'verified') ?? []\n\n        if (verifiedFactors.length > 0) {\n          nextLevel = 'aal2'\n        }\n\n        const currentAuthenticationMethods = payload.amr || []\n\n        return { data: { currentLevel, nextLevel, currentAuthenticationMethods }, error: null }\n      } catch (error) {\n        if (isAuthError(error)) {\n          return this._returnResult({ data: null, error })\n        }\n        throw error\n      }\n    }\n\n    const {\n      data: { session },\n      error: sessionError,\n    } = await this.getSession()\n\n    if (sessionError) {\n      return this._returnResult({ data: null, error: sessionError })\n    }\n    if (!session) {\n      return {\n        data: { currentLevel: null, nextLevel: null, currentAuthenticationMethods: [] },\n        error: null,\n      }\n    }\n\n    const { payload } = decodeJWT(session.access_token)\n\n    let currentLevel: AuthenticatorAssuranceLevels | null = null\n\n    if (payload.aal) {\n      currentLevel = payload.aal\n    }\n\n    let nextLevel: AuthenticatorAssuranceLevels | null = currentLevel\n\n    const verifiedFactors =\n      session.user.factors?.filter((factor: Factor) => factor.status === 'verified') ?? []\n\n    if (verifiedFactors.length > 0) {\n      nextLevel = 'aal2'\n    }\n\n    const currentAuthenticationMethods = payload.amr || []\n\n    return { data: { currentLevel, nextLevel, currentAuthenticationMethods }, error: null }\n  }\n\n  /**\n   * Retrieves details about an OAuth authorization request.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   *\n   * Returns authorization details including client info, scopes, and user information.\n   * If the response includes only a redirect_url field, it means consent was already given - the caller\n   * should handle the redirect manually if needed.\n   */\n  private async _getAuthorizationDetails(\n    authorizationId: string\n  ): Promise<AuthOAuthAuthorizationDetailsResponse> {\n    try {\n      return await this._useSession(async (result) => {\n        const {\n          data: { session },\n          error: sessionError,\n        } = result\n\n        if (sessionError) {\n          return this._returnResult({ data: null, error: sessionError })\n        }\n\n        if (!session) {\n          return this._returnResult({ data: null, error: new AuthSessionMissingError() })\n        }\n\n        return await _request(\n          this.fetch,\n          'GET',\n          `${this.url}/oauth/authorizations/${authorizationId}`,\n          {\n            headers: this.headers,\n            jwt: session.access_token,\n            xform: (data: any) => ({ data, error: null }),\n          }\n        )\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Approves an OAuth authorization request.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   */\n  private async _approveAuthorization(\n    authorizationId: string,\n    options?: { skipBrowserRedirect?: boolean }\n  ): Promise<AuthOAuthConsentResponse> {\n    try {\n      return await this._useSession(async (result) => {\n        const {\n          data: { session },\n          error: sessionError,\n        } = result\n\n        if (sessionError) {\n          return this._returnResult({ data: null, error: sessionError })\n        }\n\n        if (!session) {\n          return this._returnResult({ data: null, error: new AuthSessionMissingError() })\n        }\n\n        const response = await _request(\n          this.fetch,\n          'POST',\n          `${this.url}/oauth/authorizations/${authorizationId}/consent`,\n          {\n            headers: this.headers,\n            jwt: session.access_token,\n            body: { action: 'approve' },\n            xform: (data: any) => ({ data, error: null }),\n          }\n        )\n\n        if (response.data && response.data.redirect_url) {\n          // Automatically redirect in browser unless skipBrowserRedirect is true\n          if (isBrowser() && !options?.skipBrowserRedirect) {\n            window.location.assign(response.data.redirect_url)\n          }\n        }\n\n        return response\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Denies an OAuth authorization request.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   */\n  private async _denyAuthorization(\n    authorizationId: string,\n    options?: { skipBrowserRedirect?: boolean }\n  ): Promise<AuthOAuthConsentResponse> {\n    try {\n      return await this._useSession(async (result) => {\n        const {\n          data: { session },\n          error: sessionError,\n        } = result\n\n        if (sessionError) {\n          return this._returnResult({ data: null, error: sessionError })\n        }\n\n        if (!session) {\n          return this._returnResult({ data: null, error: new AuthSessionMissingError() })\n        }\n\n        const response = await _request(\n          this.fetch,\n          'POST',\n          `${this.url}/oauth/authorizations/${authorizationId}/consent`,\n          {\n            headers: this.headers,\n            jwt: session.access_token,\n            body: { action: 'deny' },\n            xform: (data: any) => ({ data, error: null }),\n          }\n        )\n\n        if (response.data && response.data.redirect_url) {\n          // Automatically redirect in browser unless skipBrowserRedirect is true\n          if (isBrowser() && !options?.skipBrowserRedirect) {\n            window.location.assign(response.data.redirect_url)\n          }\n        }\n\n        return response\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Lists all OAuth grants that the authenticated user has authorized.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   */\n  private async _listOAuthGrants(): Promise<AuthOAuthGrantsResponse> {\n    try {\n      return await this._useSession(async (result) => {\n        const {\n          data: { session },\n          error: sessionError,\n        } = result\n\n        if (sessionError) {\n          return this._returnResult({ data: null, error: sessionError })\n        }\n\n        if (!session) {\n          return this._returnResult({ data: null, error: new AuthSessionMissingError() })\n        }\n\n        return await _request(this.fetch, 'GET', `${this.url}/user/oauth/grants`, {\n          headers: this.headers,\n          jwt: session.access_token,\n          xform: (data: any) => ({ data, error: null }),\n        })\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n\n      throw error\n    }\n  }\n\n  /**\n   * Revokes a user's OAuth grant for a specific client.\n   * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n   */\n  private async _revokeOAuthGrant(options: {\n    clientId: string\n  }): Promise<AuthOAuthRevokeGrantResponse> {\n    try {\n      return await this._useSession(async (result) => {\n        const {\n          data: { session },\n          error: sessionError,\n        } = result\n\n        if (sessionError) {\n          return this._returnResult({ data: null, error: sessionError })\n        }\n\n        if (!session) {\n          return this._returnResult({ data: null, error: new AuthSessionMissingError() })\n        }\n\n        await _request(this.fetch, 'DELETE', `${this.url}/user/oauth/grants`, {\n          headers: this.headers,\n          jwt: session.access_token,\n          query: { client_id: options.clientId },\n          noResolveJson: true,\n        })\n        return { data: {}, error: null }\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n\n      throw error\n    }\n  }\n\n  private async fetchJwk(kid: string, jwks: { keys: JWK[] } = { keys: [] }): Promise<JWK | null> {\n    // try fetching from the supplied jwks\n    let jwk = jwks.keys.find((key) => key.kid === kid)\n    if (jwk) {\n      return jwk\n    }\n\n    const now = Date.now()\n\n    // try fetching from cache\n    jwk = this.jwks.keys.find((key) => key.kid === kid)\n\n    // jwk exists and jwks isn't stale\n    if (jwk && this.jwks_cached_at + JWKS_TTL > now) {\n      return jwk\n    }\n    // jwk isn't cached in memory so we need to fetch it from the well-known endpoint\n    const { data, error } = await _request(this.fetch, 'GET', `${this.url}/.well-known/jwks.json`, {\n      headers: this.headers,\n    })\n    if (error) {\n      throw error\n    }\n    if (!data.keys || data.keys.length === 0) {\n      return null\n    }\n\n    this.jwks = data\n    this.jwks_cached_at = now\n\n    // Find the signing key\n    jwk = data.keys.find((key: any) => key.kid === kid)\n    if (!jwk) {\n      return null\n    }\n    return jwk\n  }\n\n  /**\n   * Extracts the JWT claims present in the access token by first verifying the\n   * JWT against the server's JSON Web Key Set endpoint\n   * `/.well-known/jwks.json` which is often cached, resulting in significantly\n   * faster responses. Prefer this method over {@link #getUser} which always\n   * sends a request to the Auth server for each JWT.\n   *\n   * If the project is not using an asymmetric JWT signing key (like ECC or\n   * RSA) it always sends a request to the Auth server (similar to {@link\n   * #getUser}) to verify the JWT.\n   *\n   * @param jwt An optional specific JWT you wish to verify, not the one you\n   *            can obtain from {@link #getSession}.\n   * @param options Various additional options that allow you to customize the\n   *                behavior of this method.\n   *\n   * @category Auth\n   *\n   * @remarks\n   * - Parses the user's [access token](/docs/guides/auth/sessions#access-token-jwt-claims) as a [JSON Web Token (JWT)](/docs/guides/auth/jwts) and returns its components if valid and not expired.\n   * - If your project is using asymmetric JWT signing keys, then the verification is done locally usually without a network request using the [WebCrypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API).\n   * - A network request is sent to your project's JWT signing key discovery endpoint `https://project-id.supabase.co/auth/v1/.well-known/jwks.json`, which is cached locally. If your environment is ephemeral, such as a Lambda function that is destroyed after every request, a network request will be sent for each new invocation. Supabase provides a network-edge cache providing fast responses for these situations.\n   * - If the user's access token is about to expire when calling this function, the user's session will first be refreshed before validating the JWT.\n   * - If your project is using a symmetric secret to sign the JWT, it always sends a request similar to `getUser()` to validate the JWT at the server before returning the decoded token. This is also used if the WebCrypto API is not available in the environment. Make sure you polyfill it in such situations.\n   * - The returned claims can be customized per project using the [Custom Access Token Hook](/docs/guides/auth/auth-hooks/custom-access-token-hook).\n   *\n   * @example Get JWT claims, header and signature\n   * ```js\n   * const { data, error } = await supabase.auth.getClaims()\n   * ```\n   *\n   * @exampleResponse Get JWT claims, header and signature\n   * ```json\n   * {\n   *   \"data\": {\n   *     \"claims\": {\n   *       \"aal\": \"aal1\",\n   *       \"amr\": [{\n   *         \"method\": \"email\",\n   *         \"timestamp\": 1715766000\n   *       }],\n   *       \"app_metadata\": {},\n   *       \"aud\": \"authenticated\",\n   *       \"email\": \"example@email.com\",\n   *       \"exp\": 1715769600,\n   *       \"iat\": 1715766000,\n   *       \"is_anonymous\": false,\n   *       \"iss\": \"https://project-id.supabase.co/auth/v1\",\n   *       \"phone\": \"+13334445555\",\n   *       \"role\": \"authenticated\",\n   *       \"session_id\": \"11111111-1111-1111-1111-111111111111\",\n   *       \"sub\": \"11111111-1111-1111-1111-111111111111\",\n   *       \"user_metadata\": {}\n   *     },\n   *     \"header\": {\n   *       \"alg\": \"RS256\",\n   *       \"typ\": \"JWT\",\n   *       \"kid\": \"11111111-1111-1111-1111-111111111111\"\n   *     },\n   *     \"signature\": [/** Uint8Array *\\/],\n   *   },\n   *   \"error\": null\n   * }\n   * ```\n   */\n  async getClaims(\n    jwt?: string,\n    options: {\n      /**\n       * @deprecated Please use options.jwks instead.\n       */\n      keys?: JWK[]\n\n      /** If set to `true` the `exp` claim will not be validated against the current time. */\n      allowExpired?: boolean\n\n      /** If set, this JSON Web Key Set is going to have precedence over the cached value available on the server. */\n      jwks?: { keys: JWK[] }\n    } = {}\n  ): Promise<\n    | {\n        data: { claims: JwtPayload; header: JwtHeader; signature: Uint8Array }\n        error: null\n      }\n    | { data: null; error: AuthError }\n    | { data: null; error: null }\n  > {\n    try {\n      let token = jwt\n      if (!token) {\n        const { data, error } = await this.getSession()\n        if (error || !data.session) {\n          return this._returnResult({ data: null, error })\n        }\n        token = data.session.access_token\n      }\n\n      const {\n        header,\n        payload,\n        signature,\n        raw: { header: rawHeader, payload: rawPayload },\n      } = decodeJWT(token)\n\n      if (!options?.allowExpired) {\n        // Reject expired JWTs should only happen if jwt argument was passed\n        validateExp(payload.exp)\n      }\n\n      const signingKey =\n        !header.alg ||\n        header.alg.startsWith('HS') ||\n        !header.kid ||\n        !('crypto' in globalThis && 'subtle' in globalThis.crypto)\n          ? null\n          : await this.fetchJwk(header.kid, options?.keys ? { keys: options.keys } : options?.jwks)\n\n      // If symmetric algorithm or WebCrypto API is unavailable, fallback to getUser()\n      if (!signingKey) {\n        const { error } = await this.getUser(token)\n        if (error) {\n          throw error\n        }\n        // getUser succeeds so the claims in the JWT can be trusted\n        return {\n          data: {\n            claims: payload,\n            header,\n            signature,\n          },\n          error: null,\n        }\n      }\n\n      const algorithm = getAlgorithm(header.alg)\n\n      // Convert JWK to CryptoKey\n      const publicKey = await crypto.subtle.importKey('jwk', signingKey, algorithm, true, [\n        'verify',\n      ])\n\n      // Verify the signature\n      const isValid = await crypto.subtle.verify(\n        algorithm,\n        publicKey,\n        signature,\n        stringToUint8Array(`${rawHeader}.${rawPayload}`)\n      )\n\n      if (!isValid) {\n        throw new AuthInvalidJwtError('Invalid JWT signature')\n      }\n\n      // If verification succeeds, decode and return claims\n      return {\n        data: {\n          claims: payload,\n          header,\n          signature,\n        },\n        error: null,\n      }\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n      throw error\n    }\n  }\n\n  // --- Passkey Methods ---\n\n  /**\n   * Sign in with a passkey. Handles the full WebAuthn ceremony:\n   * 1. Fetches authentication challenge from server\n   * 2. Prompts user via navigator.credentials.get()\n   * 3. Verifies credential with server and creates session\n   *\n   * Requires `auth.experimental.passkey: true`.\n   *\n   * @category Auth\n   */\n  async signInWithPasskey(\n    credentials?: SignInWithPasskeyCredentials\n  ): Promise<AuthPasskeyAuthenticationVerifyResponse> {\n    assertPasskeyExperimentalEnabled(this.experimental)\n    try {\n      if (!browserSupportsWebAuthn()) {\n        return this._returnResult({\n          data: null,\n          error: new AuthUnknownError('Browser does not support WebAuthn', null),\n        })\n      }\n\n      // 1. Get challenge options from server\n      const { data: options, error: optionsError } = await this._startPasskeyAuthentication({\n        options: { captchaToken: credentials?.options?.captchaToken },\n      })\n      if (optionsError || !options) {\n        return this._returnResult({ data: null, error: optionsError })\n      }\n\n      // 2. Deserialize and prompt user via browser WebAuthn API\n      const publicKeyOptions = deserializeCredentialRequestOptions(options.options)\n      const signal = credentials?.options?.signal ?? webAuthnAbortService.createNewAbortSignal()\n      const { data: credential, error: credentialError } = await getCredential({\n        publicKey: publicKeyOptions,\n        signal,\n      })\n      if (credentialError || !credential) {\n        return this._returnResult({\n          data: null,\n          error: credentialError ?? new AuthUnknownError('WebAuthn ceremony failed', null),\n        })\n      }\n\n      // 3. Serialize and verify with server\n      const serialized = serializeCredentialRequestResponse(credential)\n      return this._verifyPasskeyAuthentication({\n        challengeId: options.challenge_id,\n        credential: serialized,\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Register a passkey for the current authenticated user. Handles the full WebAuthn ceremony:\n   * 1. Fetches registration challenge from server\n   * 2. Prompts user via navigator.credentials.create()\n   * 3. Verifies credential with server\n   *\n   * Requires an active session. Requires `auth.experimental.passkey: true`.\n   *\n   * @category Auth\n   */\n  async registerPasskey(\n    credentials?: RegisterPasskeyCredentials\n  ): Promise<AuthPasskeyRegistrationVerifyResponse> {\n    assertPasskeyExperimentalEnabled(this.experimental)\n    try {\n      if (!browserSupportsWebAuthn()) {\n        return this._returnResult({\n          data: null,\n          error: new AuthUnknownError('Browser does not support WebAuthn', null),\n        })\n      }\n\n      // 1. Get challenge options from server\n      const { data: options, error: optionsError } = await this._startPasskeyRegistration()\n      if (optionsError || !options) {\n        return this._returnResult({ data: null, error: optionsError })\n      }\n\n      // 2. Deserialize and prompt user via browser WebAuthn API\n      const publicKeyOptions = deserializeCredentialCreationOptions(options.options)\n      const signal = credentials?.options?.signal ?? webAuthnAbortService.createNewAbortSignal()\n      const { data: credential, error: credentialError } = await createCredential({\n        publicKey: publicKeyOptions,\n        signal,\n      })\n      if (credentialError || !credential) {\n        return this._returnResult({\n          data: null,\n          error: credentialError ?? new AuthUnknownError('WebAuthn ceremony failed', null),\n        })\n      }\n\n      // 3. Serialize and verify with server\n      const serialized = serializeCredentialCreationResponse(credential)\n      return this._verifyPasskeyRegistration({\n        challengeId: options.challenge_id,\n        credential: serialized,\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Start passkey registration for the current authenticated user.\n   * Returns WebAuthn credential creation options to pass to navigator.credentials.create().\n   */\n  private async _startPasskeyRegistration(): Promise<AuthPasskeyRegistrationOptionsResponse> {\n    assertPasskeyExperimentalEnabled(this.experimental)\n    try {\n      return await this._useSession(async (result) => {\n        const {\n          data: { session },\n          error: sessionError,\n        } = result\n        if (sessionError) {\n          return this._returnResult({ data: null, error: sessionError })\n        }\n        if (!session) {\n          return this._returnResult({ data: null, error: new AuthSessionMissingError() })\n        }\n        const { data, error } = await _request(\n          this.fetch,\n          'POST',\n          `${this.url}/passkeys/registration/options`,\n          {\n            headers: this.headers,\n            jwt: session.access_token,\n            body: {},\n          }\n        )\n        if (error) {\n          return this._returnResult({ data: null, error })\n        }\n        return this._returnResult({ data, error: null })\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Verify passkey registration with the credential response.\n   * The credentialResponse should be the serialized output of navigator.credentials.create().\n   */\n  private async _verifyPasskeyRegistration(\n    params: VerifyPasskeyRegistrationParams\n  ): Promise<AuthPasskeyRegistrationVerifyResponse> {\n    assertPasskeyExperimentalEnabled(this.experimental)\n    try {\n      return await this._useSession(async (result) => {\n        const {\n          data: { session },\n          error: sessionError,\n        } = result\n        if (sessionError) {\n          return this._returnResult({ data: null, error: sessionError })\n        }\n        if (!session) {\n          return this._returnResult({ data: null, error: new AuthSessionMissingError() })\n        }\n        const { data, error } = await _request(\n          this.fetch,\n          'POST',\n          `${this.url}/passkeys/registration/verify`,\n          {\n            headers: this.headers,\n            jwt: session.access_token,\n            body: {\n              challenge_id: params.challengeId,\n              credential: params.credential,\n            },\n          }\n        )\n        if (error) {\n          return this._returnResult({ data: null, error })\n        }\n        return this._returnResult({ data, error: null })\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Start passkey authentication.\n   * Returns WebAuthn credential request options to pass to navigator.credentials.get().\n   */\n  private async _startPasskeyAuthentication(\n    params?: StartPasskeyAuthenticationParams\n  ): Promise<AuthPasskeyAuthenticationOptionsResponse> {\n    assertPasskeyExperimentalEnabled(this.experimental)\n    try {\n      const { data, error } = await _request(\n        this.fetch,\n        'POST',\n        `${this.url}/passkeys/authentication/options`,\n        {\n          headers: this.headers,\n          body: {\n            gotrue_meta_security: { captcha_token: params?.options?.captchaToken },\n          },\n        }\n      )\n      if (error) {\n        return this._returnResult({ data: null, error })\n      }\n      return this._returnResult({ data, error: null })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Verify passkey authentication and create a session.\n   * The credential should be the serialized output of navigator.credentials.get().\n   */\n  private async _verifyPasskeyAuthentication(\n    params: VerifyPasskeyAuthenticationParams\n  ): Promise<AuthPasskeyAuthenticationVerifyResponse> {\n    assertPasskeyExperimentalEnabled(this.experimental)\n    try {\n      const { data, error } = await _request(\n        this.fetch,\n        'POST',\n        `${this.url}/passkeys/authentication/verify`,\n        {\n          headers: this.headers,\n          body: {\n            challenge_id: params.challengeId,\n            credential: params.credential,\n          },\n          xform: _sessionResponse,\n        }\n      )\n      if (error) {\n        return this._returnResult({ data: null, error })\n      }\n      if (data.session) {\n        await this._saveSession(data.session)\n        await this._notifyAllSubscribers('SIGNED_IN', data.session)\n      }\n      return this._returnResult({ data, error: null })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * List all passkeys for the current user.\n   */\n  private async _listPasskeys(): Promise<AuthPasskeyListResponse> {\n    assertPasskeyExperimentalEnabled(this.experimental)\n    try {\n      return await this._useSession(async (result) => {\n        const {\n          data: { session },\n          error: sessionError,\n        } = result\n        if (sessionError) {\n          return this._returnResult({ data: null, error: sessionError })\n        }\n        if (!session) {\n          return this._returnResult({ data: null, error: new AuthSessionMissingError() })\n        }\n        const { data, error } = await _request(this.fetch, 'GET', `${this.url}/passkeys`, {\n          headers: this.headers,\n          jwt: session.access_token,\n          xform: (data: any) => ({ data, error: null }),\n        })\n        if (error) {\n          return this._returnResult({ data: null, error })\n        }\n        return this._returnResult({ data, error: null })\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Update a passkey.\n   */\n  private async _updatePasskey(params: PasskeyUpdateParams): Promise<AuthPasskeyUpdateResponse> {\n    assertPasskeyExperimentalEnabled(this.experimental)\n    try {\n      return await this._useSession(async (result) => {\n        const {\n          data: { session },\n          error: sessionError,\n        } = result\n        if (sessionError) {\n          return this._returnResult({ data: null, error: sessionError })\n        }\n        if (!session) {\n          return this._returnResult({ data: null, error: new AuthSessionMissingError() })\n        }\n        const { data, error } = await _request(\n          this.fetch,\n          'PATCH',\n          `${this.url}/passkeys/${params.passkeyId}`,\n          {\n            headers: this.headers,\n            jwt: session.access_token,\n            body: { friendly_name: params.friendlyName },\n          }\n        )\n        if (error) {\n          return this._returnResult({ data: null, error })\n        }\n        return this._returnResult({ data, error: null })\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n      throw error\n    }\n  }\n\n  /**\n   * Delete a passkey.\n   */\n  private async _deletePasskey(params: PasskeyDeleteParams): Promise<AuthPasskeyDeleteResponse> {\n    assertPasskeyExperimentalEnabled(this.experimental)\n    try {\n      return await this._useSession(async (result) => {\n        const {\n          data: { session },\n          error: sessionError,\n        } = result\n        if (sessionError) {\n          return this._returnResult({ data: null, error: sessionError })\n        }\n        if (!session) {\n          return this._returnResult({ data: null, error: new AuthSessionMissingError() })\n        }\n        const { error } = await _request(\n          this.fetch,\n          'DELETE',\n          `${this.url}/passkeys/${params.passkeyId}`,\n          {\n            headers: this.headers,\n            jwt: session.access_token,\n            noResolveJson: true,\n          }\n        )\n        if (error) {\n          return this._returnResult({ data: null, error })\n        }\n        return this._returnResult({ data: null, error: null })\n      })\n    } catch (error) {\n      if (isAuthError(error)) {\n        return this._returnResult({ data: null, error })\n      }\n      throw error\n    }\n  }\n}\n", "import GoTrueAdminApi from './GoTrueAdminApi'\n\nconst AuthAdminApi = GoTrueAdminApi\n\nexport default AuthAdminApi\n", "import GoTrueClient from './GoTrueClient'\n\nconst AuthClient = GoTrueClient\n\nexport default AuthClient\n", "import GoTrueAdminApi from './GoTrueAdminApi'\nimport GoTrueClient from './GoTrueClient'\nimport AuthAdminApi from './AuthAdminApi'\nimport AuthClient from './AuthClient'\nexport { GoTrueAdminApi, GoTrueClient, AuthAdminApi, AuthClient }\nexport * from './lib/types'\nexport * from './lib/errors'\nexport {\n  navigatorLock,\n  NavigatorLockAcquireTimeoutError,\n  internals as lockInternals,\n  processLock,\n} from './lib/locks'\n", "// Generated automatically during releases by scripts/update-version-files.ts\n// This file provides runtime access to the package version for:\n// - HTTP request headers (e.g., X-Client-Info header for API requests)\n// - Debugging and support (identifying which version is running)\n// - Telemetry and logging (version reporting in errors/analytics)\n// - Ensuring build artifacts match the published package version\nexport const version = '2.106.1'\n", "// constants.ts\nimport { RealtimeClientOptions } from '@supabase/realtime-js'\nimport { SupabaseAuthClientOptions, TracePropagationOptions } from './types'\nimport { version } from './version'\n\nlet JS_ENV = ''\n// @ts-ignore\nif (typeof Deno !== 'undefined') {\n  JS_ENV = 'deno'\n} else if (typeof document !== 'undefined') {\n  JS_ENV = 'web'\n} else if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n  JS_ENV = 'react-native'\n} else {\n  JS_ENV = 'node'\n}\n\nexport const DEFAULT_HEADERS = { 'X-Client-Info': `supabase-js-${JS_ENV}/${version}` }\n\nexport const DEFAULT_GLOBAL_OPTIONS = {\n  headers: DEFAULT_HEADERS,\n}\n\nexport const DEFAULT_DB_OPTIONS = {\n  schema: 'public',\n}\n\nexport const DEFAULT_AUTH_OPTIONS: SupabaseAuthClientOptions = {\n  autoRefreshToken: true,\n  persistSession: true,\n  detectSessionInUrl: true,\n  flowType: 'implicit',\n}\n\nexport const DEFAULT_REALTIME_OPTIONS: RealtimeClientOptions = {}\n\nexport const DEFAULT_TRACE_PROPAGATION_OPTIONS: TracePropagationOptions = {\n  enabled: false,\n  respectSamplingDecision: true,\n}\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n", "import { __awaiter } from \"tslib\";\nlet otelModulePromise = null;\n// Variable specifier keeps `@opentelemetry/api` from being statically resolved\n// by bundlers. supabase-js's tsdown build also post-processes its ESM output\n// to inject /* webpackIgnore */ /* turbopackIgnore */ /* @vite-ignore */ on\n// this expression — rolldown strips magic comments from source. See PR #2381.\nconst OTEL_PKG = '@opentelemetry/api';\nfunction loadOtel() {\n    if (otelModulePromise === null) {\n        otelModulePromise = import(OTEL_PKG).catch(() => null);\n    }\n    return otelModulePromise;\n}\n/**\n * For tests only. Resets the cached OpenTelemetry import.\n *\n * @internal\n */\nexport function _resetOtelCache() {\n    otelModulePromise = null;\n}\n/**\n * Extract trace context from the OpenTelemetry API.\n *\n * Returns null if `@opentelemetry/api` is not installed or there is no active\n * trace context. The dynamic import is cached after the first call.\n *\n * @returns Trace context with traceparent, tracestate, and baggage headers, or null if unavailable\n */\nexport function extractTraceContext() {\n    return __awaiter(this, void 0, void 0, function* () {\n        try {\n            const otel = yield loadOtel();\n            if (!otel || !otel.propagation || !otel.context) {\n                return null;\n            }\n            const carrier = {};\n            otel.propagation.inject(otel.context.active(), carrier);\n            const traceparent = carrier['traceparent'];\n            if (!traceparent) {\n                return null;\n            }\n            return {\n                traceparent,\n                tracestate: carrier['tracestate'],\n                baggage: carrier['baggage'],\n            };\n        }\n        catch (_a) {\n            return null;\n        }\n    });\n}\n//# sourceMappingURL=extract.js.map", "/**\n * Parse W3C traceparent header according to the specification.\n *\n * The traceparent header format is: version-traceid-parentid-traceflags\n * - version: 2 hex digits (currently always \"00\")\n * - traceid: 32 hex digits (128-bit trace identifier)\n * - parentid: 16 hex digits (64-bit span/parent identifier)\n * - traceflags: 2 hex digits (8-bit flags, bit 0 is sampled flag)\n *\n * @param traceparent - The traceparent header value\n * @returns Parsed traceparent object, or null if invalid format\n *\n * @see https://www.w3.org/TR/trace-context/#traceparent-header\n *\n * @example\n * ```typescript\n * const parsed = parseTraceParent('00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01')\n *\n * console.log(parsed)\n * // {\n * //   version: '00',\n * //   traceId: '0af7651916cd43dd8448eb211c80319c',\n * //   parentId: 'b7ad6b7169203331',\n * //   traceFlags: '01',\n * //   isSampled: true\n * // }\n * ```\n */\nexport function parseTraceParent(traceparent) {\n    if (!traceparent || typeof traceparent !== 'string') {\n        return null;\n    }\n    // Split by hyphen\n    const parts = traceparent.split('-');\n    // Must have exactly 4 parts\n    if (parts.length !== 4) {\n        return null;\n    }\n    const [version, traceId, parentId, traceFlags] = parts;\n    // Validate field lengths according to W3C spec\n    if (version.length !== 2 ||\n        traceId.length !== 32 ||\n        parentId.length !== 16 ||\n        traceFlags.length !== 2) {\n        return null;\n    }\n    // Validate that all fields are valid hexadecimal\n    const hexRegex = /^[0-9a-f]+$/i;\n    if (!hexRegex.test(version) ||\n        !hexRegex.test(traceId) ||\n        !hexRegex.test(parentId) ||\n        !hexRegex.test(traceFlags)) {\n        return null;\n    }\n    // Validate that trace-id and parent-id are not all zeros (invalid per spec)\n    if (traceId === '00000000000000000000000000000000' || parentId === '0000000000000000') {\n        return null;\n    }\n    // Parse sampling decision from trace-flags (bit 0)\n    const flags = parseInt(traceFlags, 16);\n    const isSampled = (flags & 0x01) === 0x01;\n    return {\n        version,\n        traceId,\n        parentId,\n        traceFlags,\n        isSampled,\n    };\n}\n//# sourceMappingURL=parse.js.map", "/**\n * Check if trace context should be propagated to the target URL.\n *\n * This function checks if the target URL matches any of the configured\n * propagation targets. Targets can be:\n * - String: Exact hostname match or wildcard domain (*.example.com)\n * - RegExp: Pattern matching hostname\n * - Function: Custom logic to determine if URL should receive trace context\n *\n * @param targetUrl - The URL to check\n * @param targets - Array of propagation targets\n * @returns True if trace context should be propagated, false otherwise\n *\n * @example\n * ```typescript\n * const targets = [\n *   'myproject.supabase.co',           // Exact match\n *   '*.supabase.co',                   // Wildcard domain\n *   /.*\\.supabase\\.co$/,               // Regex pattern\n *   (url) => url.hostname === 'localhost' // Custom function\n * ]\n *\n * shouldPropagateToTarget('https://myproject.supabase.co/rest/v1/table', targets)\n * // true\n *\n * shouldPropagateToTarget('https://evil.com/api', targets)\n * // false\n * ```\n */\nexport function shouldPropagateToTarget(targetUrl, targets) {\n    if (!targetUrl || !targets || targets.length === 0) {\n        return false;\n    }\n    let url;\n    if (targetUrl instanceof URL) {\n        url = targetUrl;\n    }\n    else {\n        try {\n            url = new URL(targetUrl);\n        }\n        catch (error) {\n            // Invalid URL\n            return false;\n        }\n    }\n    // Check each target\n    for (const target of targets) {\n        try {\n            if (typeof target === 'string') {\n                // String matcher: exact match or wildcard domain\n                if (matchStringTarget(url.hostname, target)) {\n                    return true;\n                }\n            }\n            else if (target instanceof RegExp) {\n                // Regex matcher\n                if (target.test(url.hostname)) {\n                    return true;\n                }\n            }\n            else if (typeof target === 'function') {\n                // Function matcher\n                if (target(url)) {\n                    return true;\n                }\n            }\n        }\n        catch (error) {\n            // Ignore errors from individual matchers and continue\n            continue;\n        }\n    }\n    return false;\n}\n/**\n * Match hostname against string target (exact match or wildcard)\n *\n * @param hostname - The hostname to check\n * @param target - The target pattern (exact or wildcard)\n * @returns True if hostname matches target\n */\nfunction matchStringTarget(hostname, target) {\n    // Exact match\n    if (target === hostname) {\n        return true;\n    }\n    // Wildcard domain match (*.example.com)\n    if (target.startsWith('*.')) {\n        const domain = target.slice(2); // Remove \"*.\"\n        // Check if hostname ends with the domain\n        if (hostname.endsWith(domain)) {\n            // Ensure it's either an exact match or has a subdomain\n            // (prevents \"notexample.com\" from matching \"*.example.com\")\n            if (hostname === domain || hostname.endsWith('.' + domain)) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n//# sourceMappingURL=validate.js.map", "/**\n * Generate default propagation targets based on the Supabase project URL.\n *\n * By default, trace context is only propagated to Supabase domains for\n * security. This prevents leaking trace context to potentially malicious\n * third-party services.\n *\n * Wildcard strings (e.g. `*.supabase.co`) are matched with linear string\n * operations rather than regex, avoiding ReDoS risk.\n *\n * @param supabaseUrl - The Supabase project URL\n * @returns Array of default propagation targets\n */\nexport function getDefaultPropagationTargets(supabaseUrl) {\n    const targets = [];\n    // Add exact project hostname\n    try {\n        const url = new URL(supabaseUrl);\n        targets.push(url.hostname);\n    }\n    catch (error) {\n        // Invalid URL, skip exact hostname\n    }\n    // Supabase cloud domains. Use wildcard strings (not regex) — these are\n    // matched by linear hostname-suffix checks, so there is no ReDoS surface.\n    targets.push('*.supabase.co', '*.supabase.in');\n    // Localhost and loopback addresses for local development.\n    targets.push('localhost', '127.0.0.1', '[::1]');\n    return targets;\n}\n//# sourceMappingURL=defaults.js.map", "import {\n  extractTraceContext,\n  parseTraceParent,\n  shouldPropagateToTarget,\n  getDefaultPropagationTargets,\n  type TraceContext,\n  type TracePropagationTarget,\n} from '@supabase/tracing'\nimport type { TracePropagationOptions } from './types'\n\ntype Fetch = typeof fetch\n\nexport const resolveFetch = (customFetch?: Fetch): Fetch => {\n  if (customFetch) {\n    return (...args: Parameters<Fetch>) => customFetch(...args)\n  }\n  return (...args: Parameters<Fetch>) => fetch(...args)\n}\n\nexport const resolveHeadersConstructor = () => {\n  return Headers\n}\n\nexport const fetchWithAuth = (\n  supabaseKey: string,\n  supabaseUrl: string,\n  getAccessToken: () => Promise<string | null>,\n  customFetch?: Fetch,\n  tracePropagationOptions?: TracePropagationOptions\n): Fetch => {\n  const fetch = resolveFetch(customFetch)\n  const HeadersConstructor = resolveHeadersConstructor()\n\n  // Pre-compute trace propagation state once. When disabled, the per-request\n  // path skips all tracing work with a single truthy check.\n  const traceEnabled = tracePropagationOptions?.enabled === true\n  const respectSampling = tracePropagationOptions?.respectSamplingDecision !== false\n  const traceTargets: TracePropagationTarget[] | null = traceEnabled\n    ? getDefaultPropagationTargets(supabaseUrl)\n    : null\n\n  return async (input, init) => {\n    const accessToken = (await getAccessToken()) ?? supabaseKey\n    let headers = new HeadersConstructor(init?.headers)\n\n    if (!headers.has('apikey')) {\n      headers.set('apikey', supabaseKey)\n    }\n\n    if (!headers.has('Authorization')) {\n      headers.set('Authorization', `Bearer ${accessToken}`)\n    }\n\n    if (traceTargets) {\n      const traceHeaders = await getTraceHeaders(input, traceTargets, respectSampling)\n\n      if (traceHeaders) {\n        if (traceHeaders.traceparent && !headers.has('traceparent')) {\n          headers.set('traceparent', traceHeaders.traceparent)\n        }\n        if (traceHeaders.tracestate && !headers.has('tracestate')) {\n          headers.set('tracestate', traceHeaders.tracestate)\n        }\n        if (traceHeaders.baggage && !headers.has('baggage')) {\n          headers.set('baggage', traceHeaders.baggage)\n        }\n      }\n    }\n\n    return fetch(input, { ...init, headers })\n  }\n}\n\nasync function getTraceHeaders(\n  input: RequestInfo | URL,\n  targets: TracePropagationTarget[],\n  respectSampling: boolean\n): Promise<TraceContext | null> {\n  const targetUrl: string | URL =\n    typeof input === 'string' ? input : input instanceof URL ? input : input.url\n\n  if (!shouldPropagateToTarget(targetUrl, targets)) {\n    return null\n  }\n\n  const traceContext = await extractTraceContext()\n\n  if (!traceContext || !traceContext.traceparent) {\n    return null\n  }\n\n  if (respectSampling) {\n    const parsed = parseTraceParent(traceContext.traceparent)\n    if (parsed && !parsed.isSampled) {\n      return null\n    }\n  }\n\n  return traceContext\n}\n", "// helpers.ts\nimport { SupabaseClientOptions, TracePropagationOptions } from './types'\n\nfunction normalizeTracePropagation(\n  value: TracePropagationOptions | boolean | undefined\n): TracePropagationOptions | undefined {\n  return typeof value === 'boolean' ? { enabled: value } : value\n}\n\nexport function uuid() {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n    var r = (Math.random() * 16) | 0,\n      v = c == 'x' ? r : (r & 0x3) | 0x8\n    return v.toString(16)\n  })\n}\n\nexport function ensureTrailingSlash(url: string): string {\n  return url.endsWith('/') ? url : url + '/'\n}\n\nexport const isBrowser = () => typeof window !== 'undefined'\n\nexport type ResolvedSupabaseClientOptions<SchemaName> = Omit<\n  Required<SupabaseClientOptions<SchemaName>>,\n  'tracePropagation'\n> & {\n  tracePropagation: TracePropagationOptions\n}\n\nexport function applySettingDefaults<\n  Database = any,\n  SchemaName extends string & keyof Database = 'public' extends keyof Database\n    ? 'public'\n    : string & keyof Database,\n>(\n  options: SupabaseClientOptions<SchemaName>,\n  defaults: SupabaseClientOptions<any>\n): ResolvedSupabaseClientOptions<SchemaName> {\n  const {\n    db: dbOptions,\n    auth: authOptions,\n    realtime: realtimeOptions,\n    global: globalOptions,\n  } = options\n  const {\n    db: DEFAULT_DB_OPTIONS,\n    auth: DEFAULT_AUTH_OPTIONS,\n    realtime: DEFAULT_REALTIME_OPTIONS,\n    global: DEFAULT_GLOBAL_OPTIONS,\n  } = defaults\n\n  // Accept either a boolean shorthand or an options object on both sides.\n  const tracePropagationOptions = normalizeTracePropagation(options.tracePropagation)\n  const DEFAULT_TRACE_PROPAGATION_OPTIONS = normalizeTracePropagation(defaults.tracePropagation)\n\n  const result: ResolvedSupabaseClientOptions<SchemaName> = {\n    db: {\n      ...DEFAULT_DB_OPTIONS,\n      ...dbOptions,\n    },\n    auth: {\n      ...DEFAULT_AUTH_OPTIONS,\n      ...authOptions,\n    },\n    realtime: {\n      ...DEFAULT_REALTIME_OPTIONS,\n      ...realtimeOptions,\n    },\n    storage: {},\n    global: {\n      ...DEFAULT_GLOBAL_OPTIONS,\n      ...globalOptions,\n      headers: {\n        ...(DEFAULT_GLOBAL_OPTIONS?.headers ?? {}),\n        ...(globalOptions?.headers ?? {}),\n      },\n    },\n    tracePropagation: {\n      enabled:\n        tracePropagationOptions?.enabled ?? DEFAULT_TRACE_PROPAGATION_OPTIONS?.enabled ?? false,\n      respectSamplingDecision:\n        tracePropagationOptions?.respectSamplingDecision ??\n        DEFAULT_TRACE_PROPAGATION_OPTIONS?.respectSamplingDecision ??\n        true,\n    },\n    accessToken: async () => '',\n  }\n\n  if (options.accessToken) {\n    result.accessToken = options.accessToken\n  } else {\n    // hack around Required<>\n    delete (result as any).accessToken\n  }\n\n  return result\n}\n\n/**\n * Validates a Supabase client URL\n *\n * @param {string} supabaseUrl - The Supabase client URL string.\n * @returns {URL} - The validated base URL.\n * @throws {Error}\n */\nexport function validateSupabaseUrl(supabaseUrl: string): URL {\n  const trimmedUrl = supabaseUrl?.trim()\n\n  if (!trimmedUrl) {\n    throw new Error('supabaseUrl is required.')\n  }\n\n  if (!trimmedUrl.match(/^https?:\\/\\//i)) {\n    throw new Error('Invalid supabaseUrl: Must be a valid HTTP or HTTPS URL.')\n  }\n\n  try {\n    return new URL(ensureTrailingSlash(trimmedUrl))\n  } catch {\n    throw Error('Invalid supabaseUrl: Provided URL is malformed.')\n  }\n}\n", "import { AuthClient } from '@supabase/auth-js'\nimport { SupabaseAuthClientOptions } from './types'\n\nexport class SupabaseAuthClient extends AuthClient {\n  constructor(options: SupabaseAuthClientOptions) {\n    super(options)\n  }\n}\n", "import type { AuthChangeEvent } from '@supabase/auth-js'\nimport { FunctionsClient } from '@supabase/functions-js'\nimport {\n  PostgrestClient,\n  type PostgrestFilterBuilder,\n  type PostgrestQueryBuilder,\n} from '@supabase/postgrest-js'\nimport {\n  type RealtimeChannel,\n  type RealtimeChannelOptions,\n  RealtimeClient,\n  type RealtimeClientOptions,\n  type RealtimeRemoveChannelResponse,\n} from '@supabase/realtime-js'\nimport { StorageClient as SupabaseStorageClient } from '@supabase/storage-js'\nimport {\n  DEFAULT_AUTH_OPTIONS,\n  DEFAULT_DB_OPTIONS,\n  DEFAULT_GLOBAL_OPTIONS,\n  DEFAULT_REALTIME_OPTIONS,\n  DEFAULT_TRACE_PROPAGATION_OPTIONS,\n} from './lib/constants'\nimport { fetchWithAuth } from './lib/fetch'\nimport {\n  applySettingDefaults,\n  validateSupabaseUrl,\n  type ResolvedSupabaseClientOptions,\n} from './lib/helpers'\nimport { SupabaseAuthClient } from './lib/SupabaseAuthClient'\nimport type {\n  Fetch,\n  GenericSchema,\n  SupabaseAuthClientOptions,\n  SupabaseClientOptions,\n} from './lib/types'\nimport { GetRpcFunctionFilterBuilderByArgs } from './lib/rest/types/common/rpc'\n\n/**\n * Supabase Client.\n *\n * An isomorphic Javascript client for interacting with Postgres.\n */\nexport default class SupabaseClient<\n  Database = any,\n  // The second type parameter is also used for specifying db_schema, so we\n  // support both cases.\n  // TODO: Allow setting db_schema from ClientOptions.\n  SchemaNameOrClientOptions extends\n    | (string & keyof Omit<Database, '__InternalSupabase'>)\n    | { PostgrestVersion: string } = 'public' extends keyof Omit<Database, '__InternalSupabase'>\n    ? 'public'\n    : string & keyof Omit<Database, '__InternalSupabase'>,\n  SchemaName extends string &\n    keyof Omit<Database, '__InternalSupabase'> = SchemaNameOrClientOptions extends string &\n    keyof Omit<Database, '__InternalSupabase'>\n    ? SchemaNameOrClientOptions\n    : 'public' extends keyof Omit<Database, '__InternalSupabase'>\n      ? 'public'\n      : string & keyof Omit<Omit<Database, '__InternalSupabase'>, '__InternalSupabase'>,\n  Schema extends Omit<Database, '__InternalSupabase'>[SchemaName] extends GenericSchema\n    ? Omit<Database, '__InternalSupabase'>[SchemaName]\n    : never = Omit<Database, '__InternalSupabase'>[SchemaName] extends GenericSchema\n    ? Omit<Database, '__InternalSupabase'>[SchemaName]\n    : never,\n  ClientOptions extends { PostgrestVersion: string } = SchemaNameOrClientOptions extends string &\n    keyof Omit<Database, '__InternalSupabase'>\n    ? // If the version isn't explicitly set, look for it in the __InternalSupabase object to infer the right version\n      Database extends { __InternalSupabase: { PostgrestVersion: string } }\n      ? Database['__InternalSupabase']\n      : // otherwise default to 12\n        { PostgrestVersion: '12' }\n    : SchemaNameOrClientOptions extends { PostgrestVersion: string }\n      ? SchemaNameOrClientOptions\n      : never,\n> {\n  /**\n   * Supabase Auth allows you to create and manage user sessions for access to data that is secured by access policies.\n   */\n  auth: SupabaseAuthClient\n  realtime: RealtimeClient\n  /**\n   * Supabase Storage allows you to manage user-generated content, such as photos or videos.\n   */\n  storage: SupabaseStorageClient\n\n  protected realtimeUrl: URL\n  protected authUrl: URL\n  protected storageUrl: URL\n  protected functionsUrl: URL\n  protected rest: PostgrestClient<Database, ClientOptions, SchemaName>\n  protected storageKey: string\n  protected fetch?: Fetch\n  protected changedAccessToken?: string\n  protected accessToken?: () => Promise<string | null>\n\n  protected headers: Record<string, string>\n  protected settings?: ResolvedSupabaseClientOptions<SchemaName>\n\n  /**\n   * Create a new client for use in the browser.\n   *\n   * @category Initializing\n   *\n   * @param supabaseUrl The unique Supabase URL which is supplied when you create a new project in your project dashboard.\n   * @param supabaseKey The unique Supabase Key which is supplied when you create a new project in your project dashboard.\n   * @param options.db.schema You can switch in between schemas. The schema needs to be on the list of exposed schemas inside Supabase.\n   * @param options.auth.autoRefreshToken Set to \"true\" if you want to automatically refresh the token before expiring.\n   * @param options.auth.persistSession Set to \"true\" if you want to automatically save the user session into local storage.\n   * @param options.auth.detectSessionInUrl Set to \"true\" if you want to automatically detects OAuth grants in the URL and signs in the user.\n   * @param options.realtime Options passed along to realtime-js constructor.\n   * @param options.storage Options passed along to the storage-js constructor.\n   * @param options.global.fetch A custom fetch implementation.\n   * @param options.global.headers Any additional headers to send with each network request.\n   *\n   * @example Creating a client\n   * ```js\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * // Create a single supabase client for interacting with your database\n   * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n   * ```\n   *\n   * @example With a custom domain\n   * ```js\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * // Use a custom domain as the supabase URL\n   * const supabase = createClient('https://my-custom-domain.com', 'your-publishable-key')\n   * ```\n   *\n   * @example With additional parameters\n   * ```js\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * const options = {\n   *   db: {\n   *     schema: 'public',\n   *   },\n   *   auth: {\n   *     autoRefreshToken: true,\n   *     persistSession: true,\n   *     detectSessionInUrl: true\n   *   },\n   *   global: {\n   *     headers: { 'x-my-custom-header': 'my-app-name' },\n   *   },\n   * }\n   * const supabase = createClient(\"https://xyzcompany.supabase.co\", \"your-publishable-key\", options)\n   * ```\n   *\n   * @exampleDescription With custom schemas\n   * By default the API server points to the `public` schema. You can enable other database schemas within the Dashboard.\n   * Go to [Settings > API > Exposed schemas](/dashboard/project/_/settings/api) and add the schema which you want to expose to the API.\n   *\n   * Note: each client connection can only access a single schema, so the code above can access the `other_schema` schema but cannot access the `public` schema.\n   *\n   * @example With custom schemas\n   * ```js\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key', {\n   *   // Provide a custom schema. Defaults to \"public\".\n   *   db: { schema: 'other_schema' }\n   * })\n   * ```\n   *\n   * @exampleDescription Custom fetch implementation\n   * `supabase-js` uses the [`cross-fetch`](https://www.npmjs.com/package/cross-fetch) library to make HTTP requests,\n   * but an alternative `fetch` implementation can be provided as an option.\n   * This is most useful in environments where `cross-fetch` is not compatible (for instance Cloudflare Workers).\n   *\n   * @example Custom fetch implementation\n   * ```js\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key', {\n   *   global: { fetch: fetch.bind(globalThis) }\n   * })\n   * ```\n   *\n   * @exampleDescription React Native options with AsyncStorage\n   * For React Native we recommend using `AsyncStorage` as the storage implementation for Supabase Auth.\n   *\n   * @example React Native options with AsyncStorage\n   * ```js\n   * import 'react-native-url-polyfill/auto'\n   * import { createClient } from '@supabase/supabase-js'\n   * import AsyncStorage from \"@react-native-async-storage/async-storage\";\n   *\n   * const supabase = createClient(\"https://xyzcompany.supabase.co\", \"your-publishable-key\", {\n   *   auth: {\n   *     storage: AsyncStorage,\n   *     autoRefreshToken: true,\n   *     persistSession: true,\n   *     detectSessionInUrl: false,\n   *   },\n   * });\n   * ```\n   *\n   * @exampleDescription React Native options with Expo SecureStore\n   * If you wish to encrypt the user's session information, you can use `aes-js` and store the encryption key in Expo SecureStore.\n   * The `aes-js` library, a reputable JavaScript-only implementation of the AES encryption algorithm in CTR mode.\n   * A new 256-bit encryption key is generated using the `react-native-get-random-values` library.\n   * This key is stored inside Expo's SecureStore, while the value is encrypted and placed inside AsyncStorage.\n   *\n   * Please make sure that:\n   * - You keep the `expo-secure-store`, `aes-js` and `react-native-get-random-values` libraries up-to-date.\n   * - Choose the correct [`SecureStoreOptions`](https://docs.expo.dev/versions/latest/sdk/securestore/#securestoreoptions) for your app's needs.\n   *   E.g. [`SecureStore.WHEN_UNLOCKED`](https://docs.expo.dev/versions/latest/sdk/securestore/#securestorewhen_unlocked) regulates when the data can be accessed.\n   * - Carefully consider optimizations or other modifications to the above example, as those can lead to introducing subtle security vulnerabilities.\n   *\n   * @example React Native options with Expo SecureStore\n   * ```ts\n   * import 'react-native-url-polyfill/auto'\n   * import { createClient } from '@supabase/supabase-js'\n   * import AsyncStorage from '@react-native-async-storage/async-storage';\n   * import * as SecureStore from 'expo-secure-store';\n   * import * as aesjs from 'aes-js';\n   * import 'react-native-get-random-values';\n   *\n   * // As Expo's SecureStore does not support values larger than 2048\n   * // bytes, an AES-256 key is generated and stored in SecureStore, while\n   * // it is used to encrypt/decrypt values stored in AsyncStorage.\n   * class LargeSecureStore {\n   *   private async _encrypt(key: string, value: string) {\n   *     const encryptionKey = crypto.getRandomValues(new Uint8Array(256 / 8));\n   *\n   *     const cipher = new aesjs.ModeOfOperation.ctr(encryptionKey, new aesjs.Counter(1));\n   *     const encryptedBytes = cipher.encrypt(aesjs.utils.utf8.toBytes(value));\n   *\n   *     await SecureStore.setItemAsync(key, aesjs.utils.hex.fromBytes(encryptionKey));\n   *\n   *     return aesjs.utils.hex.fromBytes(encryptedBytes);\n   *   }\n   *\n   *   private async _decrypt(key: string, value: string) {\n   *     const encryptionKeyHex = await SecureStore.getItemAsync(key);\n   *     if (!encryptionKeyHex) {\n   *       return encryptionKeyHex;\n   *     }\n   *\n   *     const cipher = new aesjs.ModeOfOperation.ctr(aesjs.utils.hex.toBytes(encryptionKeyHex), new aesjs.Counter(1));\n   *     const decryptedBytes = cipher.decrypt(aesjs.utils.hex.toBytes(value));\n   *\n   *     return aesjs.utils.utf8.fromBytes(decryptedBytes);\n   *   }\n   *\n   *   async getItem(key: string) {\n   *     const encrypted = await AsyncStorage.getItem(key);\n   *     if (!encrypted) { return encrypted; }\n   *\n   *     return await this._decrypt(key, encrypted);\n   *   }\n   *\n   *   async removeItem(key: string) {\n   *     await AsyncStorage.removeItem(key);\n   *     await SecureStore.deleteItemAsync(key);\n   *   }\n   *\n   *   async setItem(key: string, value: string) {\n   *     const encrypted = await this._encrypt(key, value);\n   *\n   *     await AsyncStorage.setItem(key, encrypted);\n   *   }\n   * }\n   *\n   * const supabase = createClient(\"https://xyzcompany.supabase.co\", \"your-publishable-key\", {\n   *   auth: {\n   *     storage: new LargeSecureStore(),\n   *     autoRefreshToken: true,\n   *     persistSession: true,\n   *     detectSessionInUrl: false,\n   *   },\n   * });\n   * ```\n   *\n   * @example With a database query\n   * ```ts\n   * import { createClient } from '@supabase/supabase-js'\n   *\n   * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n   *\n   * const { data } = await supabase.from('profiles').select('*')\n   * ```\n   */\n  constructor(\n    protected supabaseUrl: string,\n    protected supabaseKey: string,\n    options?: SupabaseClientOptions<SchemaName>\n  ) {\n    const baseUrl = validateSupabaseUrl(supabaseUrl)\n    if (!supabaseKey) throw new Error('supabaseKey is required.')\n\n    this.realtimeUrl = new URL('realtime/v1', baseUrl)\n    this.realtimeUrl.protocol = this.realtimeUrl.protocol.replace('http', 'ws')\n    this.authUrl = new URL('auth/v1', baseUrl)\n    this.storageUrl = new URL('storage/v1', baseUrl)\n    this.functionsUrl = new URL('functions/v1', baseUrl)\n\n    // default storage key uses the supabase project ref as a namespace\n    const defaultStorageKey = `sb-${baseUrl.hostname.split('.')[0]}-auth-token`\n    const DEFAULTS = {\n      db: DEFAULT_DB_OPTIONS,\n      realtime: DEFAULT_REALTIME_OPTIONS,\n      auth: { ...DEFAULT_AUTH_OPTIONS, storageKey: defaultStorageKey },\n      global: DEFAULT_GLOBAL_OPTIONS,\n      tracePropagation: DEFAULT_TRACE_PROPAGATION_OPTIONS,\n    }\n\n    const settings = applySettingDefaults(options ?? {}, DEFAULTS)\n    this.settings = settings\n\n    this.storageKey = settings.auth.storageKey ?? ''\n    this.headers = settings.global.headers ?? {}\n\n    if (!settings.accessToken) {\n      this.auth = this._initSupabaseAuthClient(\n        settings.auth ?? {},\n        this.headers,\n        settings.global.fetch\n      )\n    } else {\n      this.accessToken = settings.accessToken\n\n      this.auth = new Proxy<SupabaseAuthClient>({} as any, {\n        get: (_, prop) => {\n          throw new Error(\n            `@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(\n              prop\n            )} is not possible`\n          )\n        },\n      })\n    }\n\n    this.fetch = fetchWithAuth(\n      supabaseKey,\n      supabaseUrl,\n      this._getAccessToken.bind(this),\n      settings.global.fetch,\n      settings.tracePropagation\n    )\n    this.realtime = this._initRealtimeClient({\n      headers: this.headers,\n      accessToken: this._getAccessToken.bind(this),\n      fetch: this.fetch,\n      ...settings.realtime,\n    })\n    if (this.accessToken) {\n      // Start auth immediately to avoid race condition with channel subscriptions\n      // Wrap Promise to avoid Firefox extension cross-context Promise access errors\n      Promise.resolve(this.accessToken())\n        .then((token) => this.realtime.setAuth(token))\n        .catch((e) => console.warn('Failed to set initial Realtime auth token:', e))\n    }\n\n    this.rest = new PostgrestClient(new URL('rest/v1', baseUrl).href, {\n      headers: this.headers,\n      schema: settings.db.schema,\n      fetch: this.fetch,\n      timeout: settings.db.timeout,\n      urlLengthLimit: settings.db.urlLengthLimit,\n    })\n\n    this.storage = new SupabaseStorageClient(\n      this.storageUrl.href,\n      this.headers,\n      this.fetch,\n      options?.storage\n    )\n\n    if (!settings.accessToken) {\n      this._listenForAuthEvents()\n    }\n  }\n\n  /**\n   * Supabase Functions allows you to deploy and invoke edge functions.\n   */\n  get functions(): FunctionsClient {\n    return new FunctionsClient(this.functionsUrl.href, {\n      headers: this.headers,\n      customFetch: this.fetch,\n    })\n  }\n\n  // NOTE: signatures must be kept in sync with PostgrestClient.from\n  from<\n    TableName extends string & keyof Schema['Tables'],\n    Table extends Schema['Tables'][TableName],\n  >(relation: TableName): PostgrestQueryBuilder<ClientOptions, Schema, Table, TableName>\n  from<ViewName extends string & keyof Schema['Views'], View extends Schema['Views'][ViewName]>(\n    relation: ViewName\n  ): PostgrestQueryBuilder<ClientOptions, Schema, View, ViewName>\n  /**\n   * Perform a query on a table or a view.\n   *\n   * @param relation - The table or view name to query\n   */\n  from(relation: string): PostgrestQueryBuilder<ClientOptions, Schema, any> {\n    return this.rest.from(relation)\n  }\n\n  // NOTE: signatures must be kept in sync with PostgrestClient.schema\n  /**\n   * Select a schema to query or perform an function (rpc) call.\n   *\n   * The schema needs to be on the list of exposed schemas inside Supabase.\n   *\n   * @param schema - The schema to query\n   */\n  schema<DynamicSchema extends string & keyof Omit<Database, '__InternalSupabase'>>(\n    schema: DynamicSchema\n  ): PostgrestClient<\n    Database,\n    ClientOptions,\n    DynamicSchema,\n    Database[DynamicSchema] extends GenericSchema ? Database[DynamicSchema] : any\n  > {\n    return this.rest.schema<DynamicSchema>(schema)\n  }\n\n  // NOTE: signatures must be kept in sync with PostgrestClient.rpc\n  /**\n   * Perform a function call.\n   *\n   * @param fn - The function name to call\n   * @param args - The arguments to pass to the function call\n   * @param options - Named parameters\n   * @param options.head - When set to `true`, `data` will not be returned.\n   * Useful if you only need the count.\n   * @param options.get - When set to `true`, the function will be called with\n   * read-only access mode.\n   * @param options.count - Count algorithm to use to count rows returned by the\n   * function. Only applicable for [set-returning\n   * functions](https://www.postgresql.org/docs/current/functions-srf.html).\n   *\n   * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n   * hood.\n   *\n   * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n   * statistics under the hood.\n   *\n   * `\"estimated\"`: Uses exact count for low numbers and planned count for high\n   * numbers.\n   */\n  rpc<\n    FnName extends string & keyof Schema['Functions'],\n    Args extends Schema['Functions'][FnName]['Args'] = never,\n    FilterBuilder extends GetRpcFunctionFilterBuilderByArgs<\n      Schema,\n      FnName,\n      Args\n    > = GetRpcFunctionFilterBuilderByArgs<Schema, FnName, Args>,\n  >(\n    fn: FnName,\n    args: Args = {} as Args,\n    options: {\n      head?: boolean\n      get?: boolean\n      count?: 'exact' | 'planned' | 'estimated'\n    } = {\n      head: false,\n      get: false,\n      count: undefined,\n    }\n  ): PostgrestFilterBuilder<\n    ClientOptions,\n    Schema,\n    FilterBuilder['Row'],\n    FilterBuilder['Result'],\n    FilterBuilder['RelationName'],\n    FilterBuilder['Relationships'],\n    'RPC'\n  > {\n    return this.rest.rpc(fn, args, options) as unknown as PostgrestFilterBuilder<\n      ClientOptions,\n      Schema,\n      FilterBuilder['Row'],\n      FilterBuilder['Result'],\n      FilterBuilder['RelationName'],\n      FilterBuilder['Relationships'],\n      'RPC'\n    >\n  }\n\n  /**\n   * Creates a Realtime channel with Broadcast, Presence, and Postgres Changes.\n   *\n   * @param {string} name - The name of the Realtime channel.\n   * @param {Object} opts - The options to pass to the Realtime channel.\n   *\n   * @category Realtime\n   */\n  channel(name: string, opts: RealtimeChannelOptions = { config: {} }): RealtimeChannel {\n    return this.realtime.channel(name, opts)\n  }\n\n  /**\n   * Returns all Realtime channels.\n   *\n   * @category Realtime\n   *\n   * @example Get all channels\n   * ```js\n   * const channels = supabase.getChannels()\n   * ```\n   */\n  getChannels(): RealtimeChannel[] {\n    return this.realtime.getChannels()\n  }\n\n  /**\n   * Unsubscribes and removes Realtime channel from Realtime client.\n   *\n   * @param {RealtimeChannel} channel - The name of the Realtime channel.\n   *\n   *\n   * @category Realtime\n   *\n   * @remarks\n   * - Removing a channel is a great way to maintain the performance of your project's Realtime service as well as your database if you're listening to Postgres changes. Supabase will automatically handle cleanup 30 seconds after a client is disconnected, but unused channels may cause degradation as more clients are simultaneously subscribed.\n   *\n   * @example Removes a channel\n   * ```js\n   * supabase.removeChannel(myChannel)\n   * ```\n   */\n  removeChannel(channel: RealtimeChannel): Promise<RealtimeRemoveChannelResponse> {\n    return this.realtime.removeChannel(channel)\n  }\n\n  /**\n   * Unsubscribes and removes all Realtime channels from Realtime client.\n   *\n   * @category Realtime\n   *\n   * @remarks\n   * - Removing channels is a great way to maintain the performance of your project's Realtime service as well as your database if you're listening to Postgres changes. Supabase will automatically handle cleanup 30 seconds after a client is disconnected, but unused channels may cause degradation as more clients are simultaneously subscribed.\n   *\n   * @example Remove all channels\n   * ```js\n   * supabase.removeAllChannels()\n   * ```\n   */\n  removeAllChannels(): Promise<RealtimeRemoveChannelResponse[]> {\n    return this.realtime.removeAllChannels()\n  }\n\n  private async _getAccessToken() {\n    if (this.accessToken) {\n      return await this.accessToken()\n    }\n\n    const { data } = await this.auth.getSession()\n\n    return data.session?.access_token ?? this.supabaseKey\n  }\n\n  private _initSupabaseAuthClient(\n    {\n      autoRefreshToken,\n      persistSession,\n      detectSessionInUrl,\n      storage,\n      userStorage,\n      storageKey,\n      flowType,\n      lock,\n      debug,\n      throwOnError,\n      experimental,\n      lockAcquireTimeout,\n      skipAutoInitialize,\n    }: SupabaseAuthClientOptions,\n    headers?: Record<string, string>,\n    fetch?: Fetch\n  ) {\n    const authHeaders = {\n      Authorization: `Bearer ${this.supabaseKey}`,\n      apikey: `${this.supabaseKey}`,\n    }\n    return new SupabaseAuthClient({\n      url: this.authUrl.href,\n      headers: { ...authHeaders, ...headers },\n      storageKey: storageKey,\n      autoRefreshToken,\n      persistSession,\n      detectSessionInUrl,\n      storage,\n      userStorage,\n      flowType,\n      lock,\n      debug,\n      throwOnError,\n      experimental,\n      fetch,\n      lockAcquireTimeout,\n      skipAutoInitialize,\n      // auth checks if there is a custom authorizaiton header using this flag\n      // so it knows whether to return an error when getUser is called with no session\n      hasCustomAuthorizationHeader: Object.keys(this.headers).some(\n        (key) => key.toLowerCase() === 'authorization'\n      ),\n    })\n  }\n\n  private _initRealtimeClient(options: RealtimeClientOptions) {\n    return new RealtimeClient(this.realtimeUrl.href, {\n      ...options,\n      params: { ...{ apikey: this.supabaseKey }, ...options?.params },\n    })\n  }\n\n  private _listenForAuthEvents() {\n    const data = this.auth.onAuthStateChange((event, session) => {\n      this._handleTokenChanged(event, 'CLIENT', session?.access_token)\n    })\n    return data\n  }\n\n  private _handleTokenChanged(\n    event: AuthChangeEvent,\n    source: 'CLIENT' | 'STORAGE',\n    token?: string\n  ) {\n    if (\n      (event === 'TOKEN_REFRESHED' || event === 'SIGNED_IN') &&\n      this.changedAccessToken !== token\n    ) {\n      this.changedAccessToken = token\n      this.realtime.setAuth(token)\n    } else if (event === 'SIGNED_OUT') {\n      this.realtime.setAuth()\n      if (source == 'STORAGE') this.auth.signOut()\n      this.changedAccessToken = undefined\n    }\n  }\n}\n", "import SupabaseClient from './SupabaseClient'\nimport type { SupabaseClientOptions } from './lib/types'\n\nexport * from '@supabase/auth-js'\nexport type { User as AuthUser, Session as AuthSession } from '@supabase/auth-js'\nexport type {\n  PostgrestResponse,\n  PostgrestSingleResponse,\n  PostgrestMaybeSingleResponse,\n  PostgrestBuilder,\n  PostgrestFilterBuilder,\n  PostgrestTransformBuilder,\n  PostgrestQueryBuilder,\n} from '@supabase/postgrest-js'\nexport { PostgrestError } from '@supabase/postgrest-js'\nexport { StorageApiError } from '@supabase/storage-js'\nexport type { FunctionInvokeOptions } from '@supabase/functions-js'\nexport {\n  FunctionsHttpError,\n  FunctionsFetchError,\n  FunctionsRelayError,\n  FunctionsError,\n  FunctionRegion,\n} from '@supabase/functions-js'\nexport * from '@supabase/realtime-js'\nexport { default as SupabaseClient } from './SupabaseClient'\nexport type {\n  SupabaseClientOptions,\n  QueryResult,\n  QueryData,\n  QueryError,\n  DatabaseWithoutInternals,\n} from './lib/types'\n\n/**\n * Creates a new Supabase Client.\n *\n * @example Creating a Supabase client\n * ```ts\n * import { createClient } from '@supabase/supabase-js'\n *\n * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n * const { data, error } = await supabase.from('profiles').select('*')\n * ```\n */\nexport const createClient = <\n  Database = any,\n  SchemaNameOrClientOptions extends\n    | (string & keyof Omit<Database, '__InternalSupabase'>)\n    | { PostgrestVersion: string } = 'public' extends keyof Omit<Database, '__InternalSupabase'>\n    ? 'public'\n    : string & keyof Omit<Database, '__InternalSupabase'>,\n  SchemaName extends string &\n    keyof Omit<Database, '__InternalSupabase'> = SchemaNameOrClientOptions extends string &\n    keyof Omit<Database, '__InternalSupabase'>\n    ? SchemaNameOrClientOptions\n    : 'public' extends keyof Omit<Database, '__InternalSupabase'>\n      ? 'public'\n      : string & keyof Omit<Omit<Database, '__InternalSupabase'>, '__InternalSupabase'>,\n>(\n  supabaseUrl: string,\n  supabaseKey: string,\n  options?: SupabaseClientOptions<SchemaName>\n): SupabaseClient<Database, SchemaNameOrClientOptions, SchemaName> => {\n  return new SupabaseClient<Database, SchemaNameOrClientOptions, SchemaName>(\n    supabaseUrl,\n    supabaseKey,\n    options\n  )\n}\n\n// Check for Node.js <= 18 deprecation\nfunction shouldShowDeprecationWarning(): boolean {\n  // Skip in browser environments\n  if (typeof window !== 'undefined') {\n    return false\n  }\n\n  // Skip if process is not available (e.g., Edge Runtime)\n  // Use dynamic property access to avoid Next.js Edge Runtime static analysis warnings\n  const _process = (globalThis as any)['process']\n  if (!_process) {\n    return false\n  }\n\n  const processVersion = _process['version']\n  if (processVersion === undefined || processVersion === null) {\n    return false\n  }\n\n  const versionMatch = processVersion.match(/^v(\\d+)\\./)\n  if (!versionMatch) {\n    return false\n  }\n\n  const majorVersion = parseInt(versionMatch[1], 10)\n  return majorVersion <= 18\n}\n\nif (shouldShowDeprecationWarning()) {\n  console.warn(\n    `⚠️  Node.js 18 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. ` +\n      `Please upgrade to Node.js 20 or later. ` +\n      `For more information, visit: https://github.com/orgs/supabase/discussions/37217`\n  )\n}\n", "import { createClient, type SupabaseClient } from \"@supabase/supabase-js\";\n\nconst SUPABASE_URL = process.env.SUPABASE_URL ?? \"\";\nconst ANON_KEY = process.env.SUPABASE_ANON_KEY ?? \"\";\nconst SERVICE_ROLE_KEY = process.env.SUPABASE_SERVICE_ROLE_KEY ?? \"\";\n\nlet _auth: SupabaseClient | null = null;\nlet _admin: SupabaseClient | null = null;\n\n/**\n * Client used to *verify* a caller's access token (`auth.getUser(token)`). The\n * anon key is enough for this \u2014 token validation does not require service-role.\n * Falls back to the service-role key if only that is configured.\n */\nexport function getSupabaseAuth(): SupabaseClient {\n  if (!_auth) {\n    const key = ANON_KEY || SERVICE_ROLE_KEY;\n    if (!SUPABASE_URL || !key) {\n      throw new Error(\n        \"Supabase auth not configured: set SUPABASE_URL and SUPABASE_ANON_KEY in the api-server environment.\",\n      );\n    }\n    _auth = createClient(SUPABASE_URL, key, {\n      auth: { autoRefreshToken: false, persistSession: false },\n    });\n  }\n  return _auth;\n}\n\n/**\n * Service-role client for admin user management (`auth.admin.*`) from the admin\n * panel. Requires the service-role key \u2014 only the admin routes need this.\n * Created lazily so the rest of the app boots without it.\n */\nexport function getSupabaseAdmin(): SupabaseClient {\n  if (!_admin) {\n    if (!SUPABASE_URL || !SERVICE_ROLE_KEY) {\n      throw new Error(\n        \"Supabase admin not configured: set SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY in the api-server environment.\",\n      );\n    }\n    _admin = createClient(SUPABASE_URL, SERVICE_ROLE_KEY, {\n      auth: { autoRefreshToken: false, persistSession: false },\n    });\n  }\n  return _admin;\n}\n", "import { type Request } from \"express\";\nimport { db } from \"@workspace/db\";\nimport { user as usersTable } from \"@workspace/db/schema\";\nimport { eq } from \"drizzle-orm\";\nimport type { User as SupabaseUser } from \"@supabase/supabase-js\";\nimport { getSupabaseAuth } from \"./supabase\";\n\n// Cookie that carries the Supabase access token for browser (cookie-based)\n// clients. Native clients send the same token via `Authorization: Bearer`.\nexport const SESSION_COOKIE = \"sb-access-token\";\n\n// The downstream session-user shape. Kept identical to the previous OIDC\n// implementation so guards, routes, and client hooks stay unchanged.\nexport interface SessionUser {\n  id: string;\n  email: string | null;\n  firstName: string | null;\n  lastName: string | null;\n  profileImageUrl: string | null;\n  role?: string | null;\n  banned?: boolean | null;\n}\n\n/** Extract the bearer/cookie access token from a request, if present. */\nexport function getAccessToken(req: Request): string | undefined {\n  const authHeader = req.headers[\"authorization\"];\n  if (authHeader?.startsWith(\"Bearer \")) {\n    const token = authHeader.slice(7).trim();\n    if (token) return token;\n  }\n  return req.cookies?.[SESSION_COOKIE];\n}\n\n// Short-lived identity cache keyed by access token. Avoids a Supabase\n// `getUser` round-trip (and the upsert) on every authenticated request.\n// Role/banned are deliberately NOT cached here \u2014 the middleware re-reads them\n// from the DB each request so permission changes take effect immediately.\nconst TOKEN_CACHE_TTL_MS = 60_000;\nconst tokenCache = new Map<string, { user: SessionUser; expiresAt: number }>();\n\n/**\n * Verify a Supabase access token and return the mirrored local user. Returns\n * null when the token is missing/invalid/expired.\n */\nexport async function verifyAccessToken(token: string): Promise<SessionUser | null> {\n  const cached = tokenCache.get(token);\n  if (cached && cached.expiresAt > Date.now()) return cached.user;\n\n  // Any failure here (missing config, Supabase unreachable, bad/expired token)\n  // degrades to \"unauthenticated\" rather than throwing out of the middleware.\n  try {\n    const { data, error } = await getSupabaseAuth().auth.getUser(token);\n    if (error || !data.user) {\n      tokenCache.delete(token);\n      return null;\n    }\n\n    let sessionUser: SessionUser | null = null;\n    try {\n      sessionUser = await upsertUserFromSupabase(data.user);\n    } catch {\n      sessionUser = await sessionUserFromDbRow(data.user);\n    }\n\n    if (sessionUser) {\n      if (tokenCache.size > 5000) tokenCache.clear();\n      tokenCache.set(token, { user: sessionUser, expiresAt: Date.now() + TOKEN_CACHE_TTL_MS });\n    }\n    return sessionUser;\n  } catch {\n    tokenCache.delete(token);\n    return null;\n  }\n}\n\nasync function findUserRow(su: SupabaseUser) {\n  const email = su.email?.trim();\n  if (email) {\n    const [byEmail] = await db.select().from(usersTable).where(eq(usersTable.email, email)).limit(1);\n    if (byEmail) return byEmail;\n  }\n  const [byId] = await db.select().from(usersTable).where(eq(usersTable.id, su.id)).limit(1);\n  return byId ?? null;\n}\n\nfunction sessionUserFromRow(row: typeof usersTable.$inferSelect): SessionUser {\n  const parts = (row.name ?? \"\").split(\" \");\n  return {\n    id: row.id,\n    email: row.email,\n    firstName: parts[0] || null,\n    lastName: parts.slice(1).join(\" \") || null,\n    profileImageUrl: row.image ?? null,\n    role: row.role ?? \"user\",\n    banned: row.banned ?? false,\n  };\n}\n\nasync function sessionUserFromDbRow(su: SupabaseUser): Promise<SessionUser | null> {\n  const row = await findUserRow(su);\n  if (row) return sessionUserFromRow(row);\n\n  const email = su.email ?? \"\";\n  const meta = (su.user_metadata ?? {}) as Record<string, unknown>;\n  const name =\n    (meta.full_name as string) ||\n    (meta.name as string) ||\n    [meta.first_name, meta.last_name].filter(Boolean).join(\" \") ||\n    (email ? email.split(\"@\")[0]! : \"User\");\n  const image = (meta.avatar_url as string) || (meta.picture as string) || null;\n\n  return {\n    id: su.id,\n    email: su.email ?? null,\n    firstName: name.split(\" \")[0] || null,\n    lastName: name.split(\" \").slice(1).join(\" \") || null,\n    profileImageUrl: image,\n    role: \"user\",\n    banned: false,\n  };\n}\n\n/**\n * Mirror a Supabase auth user into the local `user` table. Matches an existing\n * row by email first so legacy ids (and the foreign keys that reference them)\n * are preserved; otherwise inserts keyed by the Supabase user id.\n */\nexport async function upsertUserFromSupabase(su: SupabaseUser): Promise<SessionUser | null> {\n  const email = su.email ?? \"\";\n  const meta = (su.user_metadata ?? {}) as Record<string, unknown>;\n  const name =\n    (meta.full_name as string) ||\n    (meta.name as string) ||\n    [meta.first_name, meta.last_name].filter(Boolean).join(\" \") ||\n    (email ? email.split(\"@\")[0]! : \"User\");\n  const image = (meta.avatar_url as string) || (meta.picture as string) || null;\n  const emailVerified = !!su.email_confirmed_at;\n\n  let row = await findUserRow(su);\n\n  if (row) {\n    const [updated] = await db\n      .update(usersTable)\n      .set({ name, emailVerified, image, updatedAt: new Date() })\n      .where(eq(usersTable.id, row.id))\n      .returning();\n    row = updated ?? row;\n  } else {\n    [row] = await db\n      .insert(usersTable)\n      .values({ id: su.id, name, email, emailVerified, image, role: \"user\", banned: false })\n      .onConflictDoUpdate({\n        target: usersTable.id,\n        set: { name, email, emailVerified, image, updatedAt: new Date() },\n      })\n      .returning();\n  }\n\n  if (!row) return null;\n  return sessionUserFromRow(row);\n}\n", "import { type Request, type Response, type NextFunction } from \"express\";\nimport { db } from \"@workspace/db\";\nimport { user as usersTable } from \"@workspace/db/schema\";\nimport { eq } from \"drizzle-orm\";\nimport {\n  getAccessToken,\n  verifyAccessToken,\n  type SessionUser,\n} from \"./auth\";\n\ndeclare global {\n  namespace Express {\n    interface User extends SessionUser {}\n\n    interface Request {\n      isAuthenticated(): this is AuthedRequest;\n      user?: User | undefined;\n    }\n\n    export interface AuthedRequest extends Request {\n      user: User;\n    }\n  }\n}\n\nexport async function authMiddleware(\n  req: Request,\n  _res: Response,\n  next: NextFunction,\n) {\n  req.isAuthenticated = function (this: Request) {\n    return this.user != null;\n  } as Request[\"isAuthenticated\"];\n\n  const token = getAccessToken(req);\n  if (!token) {\n    next();\n    return;\n  }\n\n  try {\n    const user = await verifyAccessToken(token);\n    if (!user?.id) {\n      next();\n      return;\n    }\n\n    // Always re-read role + banned from DB so changes take effect immediately,\n    // even though the token identity is cached.\n    try {\n      let [dbRow] = await db\n        .select({ role: usersTable.role, banned: usersTable.banned })\n        .from(usersTable)\n        .where(eq(usersTable.id, user.id))\n        .limit(1);\n\n      if (!dbRow && user.email) {\n        [dbRow] = await db\n          .select({ role: usersTable.role, banned: usersTable.banned })\n          .from(usersTable)\n          .where(eq(usersTable.email, user.email))\n          .limit(1);\n      }\n\n      if (dbRow) {\n        user.role = dbRow.role ?? \"user\";\n        user.banned = dbRow.banned ?? false;\n      }\n    } catch {\n      // non-fatal: fall back to the values resolved during verification\n    }\n\n    req.user = user;\n  } catch {\n    // Invalid/expired token or transient Supabase error \u2192 treat as anonymous.\n  }\n\n  next();\n}\n\nexport function getSessionUser(req: Request) {\n  if (!req.isAuthenticated()) return null;\n  const u = req.user;\n  return {\n    userId: u.id,\n    role: (u.role as string | null | undefined) ?? \"user\",\n    email: u.email ?? \"\",\n    name: [u.firstName, u.lastName].filter(Boolean).join(\" \") || null,\n    banned: u.banned ?? false,\n  };\n}\n\nexport function requireAuth(req: Request, res: Response, next: NextFunction): void {\n  const u = getSessionUser(req);\n  if (!u?.userId) {\n    res.status(401).json({ error: \"Unauthorized\" });\n    return;\n  }\n  if (u.banned) {\n    res.status(403).json({ error: \"Account banned\" });\n    return;\n  }\n  next();\n}\n\nexport function requireAdmin(req: Request, res: Response, next: NextFunction): void {\n  const u = getSessionUser(req);\n  if (!u?.userId) { res.status(401).json({ error: \"Unauthorized\" }); return; }\n  if (u.banned) { res.status(403).json({ error: \"Account banned\" }); return; }\n  if (u.role !== \"admin\" && u.role !== \"super_admin\") { res.status(403).json({ error: \"Forbidden: admin access required\" }); return; }\n  next();\n}\n\nexport function requireModerator(req: Request, res: Response, next: NextFunction): void {\n  const u = getSessionUser(req);\n  if (!u?.userId) { res.status(401).json({ error: \"Unauthorized\" }); return; }\n  if (u.banned) { res.status(403).json({ error: \"Account banned\" }); return; }\n  if (u.role !== \"admin\" && u.role !== \"super_admin\" && u.role !== \"moderator\") {\n    res.status(403).json({ error: \"Forbidden: moderator or admin access required\" });\n    return;\n  }\n  next();\n}\n\nexport function isBetaTesterOrAdminRole(role: string | null | undefined): boolean {\n  return role === \"admin\" || role === \"super_admin\" || role === \"beta_tester\";\n}\n\nexport function requireBetaTesterOrAdmin(req: Request, res: Response, next: NextFunction): void {\n  const u = getSessionUser(req);\n  if (!u?.userId) { res.status(401).json({ error: \"Unauthorized\" }); return; }\n  if (u.banned) { res.status(403).json({ error: \"Account banned\" }); return; }\n  if (!isBetaTesterOrAdminRole(u.role)) {\n    res.status(403).json({ error: \"Forbidden: beta tester or admin access required\" });\n    return;\n  }\n  next();\n}\n\nexport async function getDbUser(userId: string) {\n  const { db } = await import(\"@workspace/db\");\n  const { user: userTable } = await import(\"@workspace/db/schema\");\n  const { eq } = await import(\"drizzle-orm\");\n  const rows = await db.select().from(userTable).where(eq(userTable.id, userId)).limit(1);\n  return rows[0] ?? null;\n}\n", "export var util;\n(function (util) {\n    util.assertEqual = (_) => { };\n    function assertIs(_arg) { }\n    util.assertIs = assertIs;\n    function assertNever(_x) {\n        throw new Error();\n    }\n    util.assertNever = assertNever;\n    util.arrayToEnum = (items) => {\n        const obj = {};\n        for (const item of items) {\n            obj[item] = item;\n        }\n        return obj;\n    };\n    util.getValidEnumValues = (obj) => {\n        const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n        const filtered = {};\n        for (const k of validKeys) {\n            filtered[k] = obj[k];\n        }\n        return util.objectValues(filtered);\n    };\n    util.objectValues = (obj) => {\n        return util.objectKeys(obj).map(function (e) {\n            return obj[e];\n        });\n    };\n    util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n        ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n        : (object) => {\n            const keys = [];\n            for (const key in object) {\n                if (Object.prototype.hasOwnProperty.call(object, key)) {\n                    keys.push(key);\n                }\n            }\n            return keys;\n        };\n    util.find = (arr, checker) => {\n        for (const item of arr) {\n            if (checker(item))\n                return item;\n        }\n        return undefined;\n    };\n    util.isInteger = typeof Number.isInteger === \"function\"\n        ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n        : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n    function joinValues(array, separator = \" | \") {\n        return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n    }\n    util.joinValues = joinValues;\n    util.jsonStringifyReplacer = (_, value) => {\n        if (typeof value === \"bigint\") {\n            return value.toString();\n        }\n        return value;\n    };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n    objectUtil.mergeShapes = (first, second) => {\n        return {\n            ...first,\n            ...second, // second overwrites first\n        };\n    };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n    \"string\",\n    \"nan\",\n    \"number\",\n    \"integer\",\n    \"float\",\n    \"boolean\",\n    \"date\",\n    \"bigint\",\n    \"symbol\",\n    \"function\",\n    \"undefined\",\n    \"null\",\n    \"array\",\n    \"object\",\n    \"unknown\",\n    \"promise\",\n    \"void\",\n    \"never\",\n    \"map\",\n    \"set\",\n]);\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return ZodParsedType.undefined;\n        case \"string\":\n            return ZodParsedType.string;\n        case \"number\":\n            return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n        case \"boolean\":\n            return ZodParsedType.boolean;\n        case \"function\":\n            return ZodParsedType.function;\n        case \"bigint\":\n            return ZodParsedType.bigint;\n        case \"symbol\":\n            return ZodParsedType.symbol;\n        case \"object\":\n            if (Array.isArray(data)) {\n                return ZodParsedType.array;\n            }\n            if (data === null) {\n                return ZodParsedType.null;\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return ZodParsedType.promise;\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return ZodParsedType.map;\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return ZodParsedType.set;\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return ZodParsedType.date;\n            }\n            return ZodParsedType.object;\n        default:\n            return ZodParsedType.unknown;\n    }\n};\n", "import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n    \"invalid_type\",\n    \"invalid_literal\",\n    \"custom\",\n    \"invalid_union\",\n    \"invalid_union_discriminator\",\n    \"invalid_enum_value\",\n    \"unrecognized_keys\",\n    \"invalid_arguments\",\n    \"invalid_return_type\",\n    \"invalid_date\",\n    \"invalid_string\",\n    \"too_small\",\n    \"too_big\",\n    \"invalid_intersection_types\",\n    \"not_multiple_of\",\n    \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n    const json = JSON.stringify(obj, null, 2);\n    return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n    get errors() {\n        return this.issues;\n    }\n    constructor(issues) {\n        super();\n        this.issues = [];\n        this.addIssue = (sub) => {\n            this.issues = [...this.issues, sub];\n        };\n        this.addIssues = (subs = []) => {\n            this.issues = [...this.issues, ...subs];\n        };\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            // eslint-disable-next-line ban/ban\n            Object.setPrototypeOf(this, actualProto);\n        }\n        else {\n            this.__proto__ = actualProto;\n        }\n        this.name = \"ZodError\";\n        this.issues = issues;\n    }\n    format(_mapper) {\n        const mapper = _mapper ||\n            function (issue) {\n                return issue.message;\n            };\n        const fieldErrors = { _errors: [] };\n        const processError = (error) => {\n            for (const issue of error.issues) {\n                if (issue.code === \"invalid_union\") {\n                    issue.unionErrors.map(processError);\n                }\n                else if (issue.code === \"invalid_return_type\") {\n                    processError(issue.returnTypeError);\n                }\n                else if (issue.code === \"invalid_arguments\") {\n                    processError(issue.argumentsError);\n                }\n                else if (issue.path.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < issue.path.length) {\n                        const el = issue.path[i];\n                        const terminal = i === issue.path.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                            // if (typeof el === \"string\") {\n                            //   curr[el] = curr[el] || { _errors: [] };\n                            // } else if (typeof el === \"number\") {\n                            //   const errorArray: any = [];\n                            //   errorArray._errors = [];\n                            //   curr[el] = curr[el] || errorArray;\n                            // }\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        };\n        processError(this);\n        return fieldErrors;\n    }\n    static assert(value) {\n        if (!(value instanceof ZodError)) {\n            throw new Error(`Not a ZodError: ${value}`);\n        }\n    }\n    toString() {\n        return this.message;\n    }\n    get message() {\n        return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n    }\n    get isEmpty() {\n        return this.issues.length === 0;\n    }\n    flatten(mapper = (issue) => issue.message) {\n        const fieldErrors = {};\n        const formErrors = [];\n        for (const sub of this.issues) {\n            if (sub.path.length > 0) {\n                const firstEl = sub.path[0];\n                fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n                fieldErrors[firstEl].push(mapper(sub));\n            }\n            else {\n                formErrors.push(mapper(sub));\n            }\n        }\n        return { formErrors, fieldErrors };\n    }\n    get formErrors() {\n        return this.flatten();\n    }\n}\nZodError.create = (issues) => {\n    const error = new ZodError(issues);\n    return error;\n};\n", "import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n    let message;\n    switch (issue.code) {\n        case ZodIssueCode.invalid_type:\n            if (issue.received === ZodParsedType.undefined) {\n                message = \"Required\";\n            }\n            else {\n                message = `Expected ${issue.expected}, received ${issue.received}`;\n            }\n            break;\n        case ZodIssueCode.invalid_literal:\n            message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n            break;\n        case ZodIssueCode.unrecognized_keys:\n            message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n            break;\n        case ZodIssueCode.invalid_union:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_union_discriminator:\n            message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n            break;\n        case ZodIssueCode.invalid_enum_value:\n            message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n            break;\n        case ZodIssueCode.invalid_arguments:\n            message = `Invalid function arguments`;\n            break;\n        case ZodIssueCode.invalid_return_type:\n            message = `Invalid function return type`;\n            break;\n        case ZodIssueCode.invalid_date:\n            message = `Invalid date`;\n            break;\n        case ZodIssueCode.invalid_string:\n            if (typeof issue.validation === \"object\") {\n                if (\"includes\" in issue.validation) {\n                    message = `Invalid input: must include \"${issue.validation.includes}\"`;\n                    if (typeof issue.validation.position === \"number\") {\n                        message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n                    }\n                }\n                else if (\"startsWith\" in issue.validation) {\n                    message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n                }\n                else if (\"endsWith\" in issue.validation) {\n                    message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n                }\n                else {\n                    util.assertNever(issue.validation);\n                }\n            }\n            else if (issue.validation !== \"regex\") {\n                message = `Invalid ${issue.validation}`;\n            }\n            else {\n                message = \"Invalid\";\n            }\n            break;\n        case ZodIssueCode.too_small:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"bigint\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.too_big:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"bigint\")\n                message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.custom:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_intersection_types:\n            message = `Intersection results could not be merged`;\n            break;\n        case ZodIssueCode.not_multiple_of:\n            message = `Number must be a multiple of ${issue.multipleOf}`;\n            break;\n        case ZodIssueCode.not_finite:\n            message = \"Number must be finite\";\n            break;\n        default:\n            message = _ctx.defaultError;\n            util.assertNever(issue);\n    }\n    return { message };\n};\nexport default errorMap;\n", "import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n    overrideErrorMap = map;\n}\nexport function getErrorMap() {\n    return overrideErrorMap;\n}\n", "import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n    const { data, path, errorMaps, issueData } = params;\n    const fullPath = [...path, ...(issueData.path || [])];\n    const fullIssue = {\n        ...issueData,\n        path: fullPath,\n    };\n    if (issueData.message !== undefined) {\n        return {\n            ...issueData,\n            path: fullPath,\n            message: issueData.message,\n        };\n    }\n    let errorMessage = \"\";\n    const maps = errorMaps\n        .filter((m) => !!m)\n        .slice()\n        .reverse();\n    for (const map of maps) {\n        errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n    }\n    return {\n        ...issueData,\n        path: fullPath,\n        message: errorMessage,\n    };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n    const overrideMap = getErrorMap();\n    const issue = makeIssue({\n        issueData: issueData,\n        data: ctx.data,\n        path: ctx.path,\n        errorMaps: [\n            ctx.common.contextualErrorMap, // contextual error map is first priority\n            ctx.schemaErrorMap, // then schema-bound map if available\n            overrideMap, // then global override map\n            overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n        ].filter((x) => !!x),\n    });\n    ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n    constructor() {\n        this.value = \"valid\";\n    }\n    dirty() {\n        if (this.value === \"valid\")\n            this.value = \"dirty\";\n    }\n    abort() {\n        if (this.value !== \"aborted\")\n            this.value = \"aborted\";\n    }\n    static mergeArray(status, results) {\n        const arrayValue = [];\n        for (const s of results) {\n            if (s.status === \"aborted\")\n                return INVALID;\n            if (s.status === \"dirty\")\n                status.dirty();\n            arrayValue.push(s.value);\n        }\n        return { status: status.value, value: arrayValue };\n    }\n    static async mergeObjectAsync(status, pairs) {\n        const syncPairs = [];\n        for (const pair of pairs) {\n            const key = await pair.key;\n            const value = await pair.value;\n            syncPairs.push({\n                key,\n                value,\n            });\n        }\n        return ParseStatus.mergeObjectSync(status, syncPairs);\n    }\n    static mergeObjectSync(status, pairs) {\n        const finalObject = {};\n        for (const pair of pairs) {\n            const { key, value } = pair;\n            if (key.status === \"aborted\")\n                return INVALID;\n            if (value.status === \"aborted\")\n                return INVALID;\n            if (key.status === \"dirty\")\n                status.dirty();\n            if (value.status === \"dirty\")\n                status.dirty();\n            if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n                finalObject[key.value] = value.value;\n            }\n        }\n        return { status: status.value, value: finalObject };\n    }\n}\nexport const INVALID = Object.freeze({\n    status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n", "export {};\n", "export var errorUtil;\n(function (errorUtil) {\n    errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n    // biome-ignore lint:\n    errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n", "import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n    constructor(parent, value, path, key) {\n        this._cachedPath = [];\n        this.parent = parent;\n        this.data = value;\n        this._path = path;\n        this._key = key;\n    }\n    get path() {\n        if (!this._cachedPath.length) {\n            if (Array.isArray(this._key)) {\n                this._cachedPath.push(...this._path, ...this._key);\n            }\n            else {\n                this._cachedPath.push(...this._path, this._key);\n            }\n        }\n        return this._cachedPath;\n    }\n}\nconst handleResult = (ctx, result) => {\n    if (isValid(result)) {\n        return { success: true, data: result.value };\n    }\n    else {\n        if (!ctx.common.issues.length) {\n            throw new Error(\"Validation failed but no issues detected.\");\n        }\n        return {\n            success: false,\n            get error() {\n                if (this._error)\n                    return this._error;\n                const error = new ZodError(ctx.common.issues);\n                this._error = error;\n                return this._error;\n            },\n        };\n    }\n};\nfunction processCreateParams(params) {\n    if (!params)\n        return {};\n    const { errorMap, invalid_type_error, required_error, description } = params;\n    if (errorMap && (invalid_type_error || required_error)) {\n        throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n    }\n    if (errorMap)\n        return { errorMap: errorMap, description };\n    const customMap = (iss, ctx) => {\n        const { message } = params;\n        if (iss.code === \"invalid_enum_value\") {\n            return { message: message ?? ctx.defaultError };\n        }\n        if (typeof ctx.data === \"undefined\") {\n            return { message: message ?? required_error ?? ctx.defaultError };\n        }\n        if (iss.code !== \"invalid_type\")\n            return { message: ctx.defaultError };\n        return { message: message ?? invalid_type_error ?? ctx.defaultError };\n    };\n    return { errorMap: customMap, description };\n}\nexport class ZodType {\n    get description() {\n        return this._def.description;\n    }\n    _getType(input) {\n        return getParsedType(input.data);\n    }\n    _getOrReturnCtx(input, ctx) {\n        return (ctx || {\n            common: input.parent.common,\n            data: input.data,\n            parsedType: getParsedType(input.data),\n            schemaErrorMap: this._def.errorMap,\n            path: input.path,\n            parent: input.parent,\n        });\n    }\n    _processInputParams(input) {\n        return {\n            status: new ParseStatus(),\n            ctx: {\n                common: input.parent.common,\n                data: input.data,\n                parsedType: getParsedType(input.data),\n                schemaErrorMap: this._def.errorMap,\n                path: input.path,\n                parent: input.parent,\n            },\n        };\n    }\n    _parseSync(input) {\n        const result = this._parse(input);\n        if (isAsync(result)) {\n            throw new Error(\"Synchronous parse encountered promise.\");\n        }\n        return result;\n    }\n    _parseAsync(input) {\n        const result = this._parse(input);\n        return Promise.resolve(result);\n    }\n    parse(data, params) {\n        const result = this.safeParse(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    safeParse(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: params?.async ?? false,\n                contextualErrorMap: params?.errorMap,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n        return handleResult(ctx, result);\n    }\n    \"~validate\"(data) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: !!this[\"~standard\"].async,\n            },\n            path: [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        if (!this[\"~standard\"].async) {\n            try {\n                const result = this._parseSync({ data, path: [], parent: ctx });\n                return isValid(result)\n                    ? {\n                        value: result.value,\n                    }\n                    : {\n                        issues: ctx.common.issues,\n                    };\n            }\n            catch (err) {\n                if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n                    this[\"~standard\"].async = true;\n                }\n                ctx.common = {\n                    issues: [],\n                    async: true,\n                };\n            }\n        }\n        return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n            ? {\n                value: result.value,\n            }\n            : {\n                issues: ctx.common.issues,\n            });\n    }\n    async parseAsync(data, params) {\n        const result = await this.safeParseAsync(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    async safeParseAsync(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                contextualErrorMap: params?.errorMap,\n                async: true,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n        const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n        return handleResult(ctx, result);\n    }\n    refine(check, message) {\n        const getIssueProperties = (val) => {\n            if (typeof message === \"string\" || typeof message === \"undefined\") {\n                return { message };\n            }\n            else if (typeof message === \"function\") {\n                return message(val);\n            }\n            else {\n                return message;\n            }\n        };\n        return this._refinement((val, ctx) => {\n            const result = check(val);\n            const setError = () => ctx.addIssue({\n                code: ZodIssueCode.custom,\n                ...getIssueProperties(val),\n            });\n            if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n                return result.then((data) => {\n                    if (!data) {\n                        setError();\n                        return false;\n                    }\n                    else {\n                        return true;\n                    }\n                });\n            }\n            if (!result) {\n                setError();\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    refinement(check, refinementData) {\n        return this._refinement((val, ctx) => {\n            if (!check(val)) {\n                ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    _refinement(refinement) {\n        return new ZodEffects({\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"refinement\", refinement },\n        });\n    }\n    superRefine(refinement) {\n        return this._refinement(refinement);\n    }\n    constructor(def) {\n        /** Alias of safeParseAsync */\n        this.spa = this.safeParseAsync;\n        this._def = def;\n        this.parse = this.parse.bind(this);\n        this.safeParse = this.safeParse.bind(this);\n        this.parseAsync = this.parseAsync.bind(this);\n        this.safeParseAsync = this.safeParseAsync.bind(this);\n        this.spa = this.spa.bind(this);\n        this.refine = this.refine.bind(this);\n        this.refinement = this.refinement.bind(this);\n        this.superRefine = this.superRefine.bind(this);\n        this.optional = this.optional.bind(this);\n        this.nullable = this.nullable.bind(this);\n        this.nullish = this.nullish.bind(this);\n        this.array = this.array.bind(this);\n        this.promise = this.promise.bind(this);\n        this.or = this.or.bind(this);\n        this.and = this.and.bind(this);\n        this.transform = this.transform.bind(this);\n        this.brand = this.brand.bind(this);\n        this.default = this.default.bind(this);\n        this.catch = this.catch.bind(this);\n        this.describe = this.describe.bind(this);\n        this.pipe = this.pipe.bind(this);\n        this.readonly = this.readonly.bind(this);\n        this.isNullable = this.isNullable.bind(this);\n        this.isOptional = this.isOptional.bind(this);\n        this[\"~standard\"] = {\n            version: 1,\n            vendor: \"zod\",\n            validate: (data) => this[\"~validate\"](data),\n        };\n    }\n    optional() {\n        return ZodOptional.create(this, this._def);\n    }\n    nullable() {\n        return ZodNullable.create(this, this._def);\n    }\n    nullish() {\n        return this.nullable().optional();\n    }\n    array() {\n        return ZodArray.create(this);\n    }\n    promise() {\n        return ZodPromise.create(this, this._def);\n    }\n    or(option) {\n        return ZodUnion.create([this, option], this._def);\n    }\n    and(incoming) {\n        return ZodIntersection.create(this, incoming, this._def);\n    }\n    transform(transform) {\n        return new ZodEffects({\n            ...processCreateParams(this._def),\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"transform\", transform },\n        });\n    }\n    default(def) {\n        const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodDefault({\n            ...processCreateParams(this._def),\n            innerType: this,\n            defaultValue: defaultValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodDefault,\n        });\n    }\n    brand() {\n        return new ZodBranded({\n            typeName: ZodFirstPartyTypeKind.ZodBranded,\n            type: this,\n            ...processCreateParams(this._def),\n        });\n    }\n    catch(def) {\n        const catchValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodCatch({\n            ...processCreateParams(this._def),\n            innerType: this,\n            catchValue: catchValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodCatch,\n        });\n    }\n    describe(description) {\n        const This = this.constructor;\n        return new This({\n            ...this._def,\n            description,\n        });\n    }\n    pipe(target) {\n        return ZodPipeline.create(this, target);\n    }\n    readonly() {\n        return ZodReadonly.create(this);\n    }\n    isOptional() {\n        return this.safeParse(undefined).success;\n    }\n    isNullable() {\n        return this.safeParse(null).success;\n    }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n//   /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n//   /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n//   /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n//   /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n//   /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n    let secondsRegexSource = `[0-5]\\\\d`;\n    if (args.precision) {\n        secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n    }\n    else if (args.precision == null) {\n        secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n    }\n    const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n    return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n    return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n    let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n    const opts = [];\n    opts.push(args.local ? `Z?` : `Z`);\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n    regex = `${regex}(${opts.join(\"|\")})`;\n    return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nfunction isValidJWT(jwt, alg) {\n    if (!jwtRegex.test(jwt))\n        return false;\n    try {\n        const [header] = jwt.split(\".\");\n        if (!header)\n            return false;\n        // Convert base64url to base64\n        const base64 = header\n            .replace(/-/g, \"+\")\n            .replace(/_/g, \"/\")\n            .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n        const decoded = JSON.parse(atob(base64));\n        if (typeof decoded !== \"object\" || decoded === null)\n            return false;\n        if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n            return false;\n        if (!decoded.alg)\n            return false;\n        if (alg && decoded.alg !== alg)\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nfunction isValidCidr(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nexport class ZodString extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = String(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.string) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.string,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.length < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.length > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"length\") {\n                const tooBig = input.data.length > check.value;\n                const tooSmall = input.data.length < check.value;\n                if (tooBig || tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    if (tooBig) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_big,\n                            maximum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    else if (tooSmall) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_small,\n                            minimum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"email\") {\n                if (!emailRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"email\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"emoji\") {\n                if (!emojiRegex) {\n                    emojiRegex = new RegExp(_emojiRegex, \"u\");\n                }\n                if (!emojiRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"emoji\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"uuid\") {\n                if (!uuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"uuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"nanoid\") {\n                if (!nanoidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"nanoid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid\") {\n                if (!cuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid2\") {\n                if (!cuid2Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid2\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ulid\") {\n                if (!ulidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ulid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"url\") {\n                try {\n                    new URL(input.data);\n                }\n                catch {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"regex\") {\n                check.regex.lastIndex = 0;\n                const testResult = check.regex.test(input.data);\n                if (!testResult) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"regex\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"trim\") {\n                input.data = input.data.trim();\n            }\n            else if (check.kind === \"includes\") {\n                if (!input.data.includes(check.value, check.position)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { includes: check.value, position: check.position },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"toLowerCase\") {\n                input.data = input.data.toLowerCase();\n            }\n            else if (check.kind === \"toUpperCase\") {\n                input.data = input.data.toUpperCase();\n            }\n            else if (check.kind === \"startsWith\") {\n                if (!input.data.startsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { startsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"endsWith\") {\n                if (!input.data.endsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { endsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"datetime\") {\n                const regex = datetimeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"datetime\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"date\") {\n                const regex = dateRegex;\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"date\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"time\") {\n                const regex = timeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"time\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"duration\") {\n                if (!durationRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"duration\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ip\") {\n                if (!isValidIP(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ip\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"jwt\") {\n                if (!isValidJWT(input.data, check.alg)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"jwt\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cidr\") {\n                if (!isValidCidr(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cidr\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64\") {\n                if (!base64Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64url\") {\n                if (!base64urlRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _regex(regex, validation, message) {\n        return this.refinement((data) => regex.test(data), {\n            validation,\n            code: ZodIssueCode.invalid_string,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    _addCheck(check) {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    email(message) {\n        return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n    }\n    url(message) {\n        return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n    }\n    emoji(message) {\n        return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n    }\n    uuid(message) {\n        return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n    }\n    nanoid(message) {\n        return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n    }\n    cuid(message) {\n        return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n    }\n    cuid2(message) {\n        return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n    }\n    ulid(message) {\n        return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n    }\n    base64(message) {\n        return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n    }\n    base64url(message) {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return this._addCheck({\n            kind: \"base64url\",\n            ...errorUtil.errToObj(message),\n        });\n    }\n    jwt(options) {\n        return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n    }\n    ip(options) {\n        return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n    }\n    cidr(options) {\n        return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n    }\n    datetime(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"datetime\",\n                precision: null,\n                offset: false,\n                local: false,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"datetime\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            offset: options?.offset ?? false,\n            local: options?.local ?? false,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    date(message) {\n        return this._addCheck({ kind: \"date\", message });\n    }\n    time(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"time\",\n                precision: null,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"time\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    duration(message) {\n        return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n    }\n    regex(regex, message) {\n        return this._addCheck({\n            kind: \"regex\",\n            regex: regex,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    includes(value, options) {\n        return this._addCheck({\n            kind: \"includes\",\n            value: value,\n            position: options?.position,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    startsWith(value, message) {\n        return this._addCheck({\n            kind: \"startsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    endsWith(value, message) {\n        return this._addCheck({\n            kind: \"endsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    min(minLength, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    max(maxLength, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    length(len, message) {\n        return this._addCheck({\n            kind: \"length\",\n            value: len,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    /**\n     * Equivalent to `.min(1)`\n     */\n    nonempty(message) {\n        return this.min(1, errorUtil.errToObj(message));\n    }\n    trim() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"trim\" }],\n        });\n    }\n    toLowerCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n        });\n    }\n    toUpperCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n        });\n    }\n    get isDatetime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n    }\n    get isDate() {\n        return !!this._def.checks.find((ch) => ch.kind === \"date\");\n    }\n    get isTime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"time\");\n    }\n    get isDuration() {\n        return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n    }\n    get isEmail() {\n        return !!this._def.checks.find((ch) => ch.kind === \"email\");\n    }\n    get isURL() {\n        return !!this._def.checks.find((ch) => ch.kind === \"url\");\n    }\n    get isEmoji() {\n        return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n    }\n    get isUUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n    }\n    get isNANOID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n    }\n    get isCUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n    }\n    get isCUID2() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n    }\n    get isULID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n    }\n    get isIP() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n    }\n    get isCIDR() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n    }\n    get isBase64() {\n        return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n    }\n    get isBase64url() {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n    }\n    get minLength() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxLength() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodString.create = (params) => {\n    return new ZodString({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodString,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n        this.step = this.multipleOf;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Number(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.number) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.number,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"int\") {\n                if (!util.isInteger(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_type,\n                        expected: \"integer\",\n                        received: \"float\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (floatSafeRemainder(input.data, check.value) !== 0) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"finite\") {\n                if (!Number.isFinite(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_finite,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    int(message) {\n        return this._addCheck({\n            kind: \"int\",\n            message: errorUtil.toString(message),\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value: value,\n            message: errorUtil.toString(message),\n        });\n    }\n    finite(message) {\n        return this._addCheck({\n            kind: \"finite\",\n            message: errorUtil.toString(message),\n        });\n    }\n    safe(message) {\n        return this._addCheck({\n            kind: \"min\",\n            inclusive: true,\n            value: Number.MIN_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        })._addCheck({\n            kind: \"max\",\n            inclusive: true,\n            value: Number.MAX_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n    get isInt() {\n        return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n    }\n    get isFinite() {\n        let max = null;\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n                return true;\n            }\n            else if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n            else if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return Number.isFinite(min) && Number.isFinite(max);\n    }\n}\nZodNumber.create = (params) => {\n    return new ZodNumber({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodNumber,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBigInt extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            try {\n                input.data = BigInt(input.data);\n            }\n            catch {\n                return this._getInvalidInput(input);\n            }\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.bigint) {\n            return this._getInvalidInput(input);\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        type: \"bigint\",\n                        minimum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        type: \"bigint\",\n                        maximum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (input.data % check.value !== BigInt(0)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _getInvalidInput(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.bigint,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodBigInt.create = (params) => {\n    return new ZodBigInt({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodBigInt,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBoolean extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Boolean(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.boolean) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.boolean,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodBoolean.create = (params) => {\n    return new ZodBoolean({\n        typeName: ZodFirstPartyTypeKind.ZodBoolean,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDate extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = new Date(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.date) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.date,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (Number.isNaN(input.data.getTime())) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_date,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.getTime() < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        minimum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.getTime() > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        maximum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return {\n            status: status.value,\n            value: new Date(input.data.getTime()),\n        };\n    }\n    _addCheck(check) {\n        return new ZodDate({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    min(minDate, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    max(maxDate, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    get minDate() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min != null ? new Date(min) : null;\n    }\n    get maxDate() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max != null ? new Date(max) : null;\n    }\n}\nZodDate.create = (params) => {\n    return new ZodDate({\n        checks: [],\n        coerce: params?.coerce || false,\n        typeName: ZodFirstPartyTypeKind.ZodDate,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSymbol extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.symbol) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.symbol,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodSymbol.create = (params) => {\n    return new ZodSymbol({\n        typeName: ZodFirstPartyTypeKind.ZodSymbol,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUndefined extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.undefined,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodUndefined.create = (params) => {\n    return new ZodUndefined({\n        typeName: ZodFirstPartyTypeKind.ZodUndefined,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNull extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.null) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.null,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodNull.create = (params) => {\n    return new ZodNull({\n        typeName: ZodFirstPartyTypeKind.ZodNull,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodAny extends ZodType {\n    constructor() {\n        super(...arguments);\n        // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n        this._any = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodAny.create = (params) => {\n    return new ZodAny({\n        typeName: ZodFirstPartyTypeKind.ZodAny,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnknown extends ZodType {\n    constructor() {\n        super(...arguments);\n        // required\n        this._unknown = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodUnknown.create = (params) => {\n    return new ZodUnknown({\n        typeName: ZodFirstPartyTypeKind.ZodUnknown,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNever extends ZodType {\n    _parse(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.never,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n}\nZodNever.create = (params) => {\n    return new ZodNever({\n        typeName: ZodFirstPartyTypeKind.ZodNever,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodVoid extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.void,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodVoid.create = (params) => {\n    return new ZodVoid({\n        typeName: ZodFirstPartyTypeKind.ZodVoid,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodArray extends ZodType {\n    _parse(input) {\n        const { ctx, status } = this._processInputParams(input);\n        const def = this._def;\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (def.exactLength !== null) {\n            const tooBig = ctx.data.length > def.exactLength.value;\n            const tooSmall = ctx.data.length < def.exactLength.value;\n            if (tooBig || tooSmall) {\n                addIssueToContext(ctx, {\n                    code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n                    minimum: (tooSmall ? def.exactLength.value : undefined),\n                    maximum: (tooBig ? def.exactLength.value : undefined),\n                    type: \"array\",\n                    inclusive: true,\n                    exact: true,\n                    message: def.exactLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.minLength !== null) {\n            if (ctx.data.length < def.minLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxLength !== null) {\n            if (ctx.data.length > def.maxLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.all([...ctx.data].map((item, i) => {\n                return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n            })).then((result) => {\n                return ParseStatus.mergeArray(status, result);\n            });\n        }\n        const result = [...ctx.data].map((item, i) => {\n            return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n        });\n        return ParseStatus.mergeArray(status, result);\n    }\n    get element() {\n        return this._def.type;\n    }\n    min(minLength, message) {\n        return new ZodArray({\n            ...this._def,\n            minLength: { value: minLength, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxLength, message) {\n        return new ZodArray({\n            ...this._def,\n            maxLength: { value: maxLength, message: errorUtil.toString(message) },\n        });\n    }\n    length(len, message) {\n        return new ZodArray({\n            ...this._def,\n            exactLength: { value: len, message: errorUtil.toString(message) },\n        });\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodArray.create = (schema, params) => {\n    return new ZodArray({\n        type: schema,\n        minLength: null,\n        maxLength: null,\n        exactLength: null,\n        typeName: ZodFirstPartyTypeKind.ZodArray,\n        ...processCreateParams(params),\n    });\n};\nfunction deepPartialify(schema) {\n    if (schema instanceof ZodObject) {\n        const newShape = {};\n        for (const key in schema.shape) {\n            const fieldSchema = schema.shape[key];\n            newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n        }\n        return new ZodObject({\n            ...schema._def,\n            shape: () => newShape,\n        });\n    }\n    else if (schema instanceof ZodArray) {\n        return new ZodArray({\n            ...schema._def,\n            type: deepPartialify(schema.element),\n        });\n    }\n    else if (schema instanceof ZodOptional) {\n        return ZodOptional.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodNullable) {\n        return ZodNullable.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodTuple) {\n        return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n    }\n    else {\n        return schema;\n    }\n}\nexport class ZodObject extends ZodType {\n    constructor() {\n        super(...arguments);\n        this._cached = null;\n        /**\n         * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n         * If you want to pass through unknown properties, use `.passthrough()` instead.\n         */\n        this.nonstrict = this.passthrough;\n        // extend<\n        //   Augmentation extends ZodRawShape,\n        //   NewOutput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_output\"]\n        //       : k extends keyof Output\n        //       ? Output[k]\n        //       : never;\n        //   }>,\n        //   NewInput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_input\"]\n        //       : k extends keyof Input\n        //       ? Input[k]\n        //       : never;\n        //   }>\n        // >(\n        //   augmentation: Augmentation\n        // ): ZodObject<\n        //   extendShape<T, Augmentation>,\n        //   UnknownKeys,\n        //   Catchall,\n        //   NewOutput,\n        //   NewInput\n        // > {\n        //   return new ZodObject({\n        //     ...this._def,\n        //     shape: () => ({\n        //       ...this._def.shape(),\n        //       ...augmentation,\n        //     }),\n        //   }) as any;\n        // }\n        /**\n         * @deprecated Use `.extend` instead\n         *  */\n        this.augment = this.extend;\n    }\n    _getCached() {\n        if (this._cached !== null)\n            return this._cached;\n        const shape = this._def.shape();\n        const keys = util.objectKeys(shape);\n        this._cached = { shape, keys };\n        return this._cached;\n    }\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.object) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const { status, ctx } = this._processInputParams(input);\n        const { shape, keys: shapeKeys } = this._getCached();\n        const extraKeys = [];\n        if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n            for (const key in ctx.data) {\n                if (!shapeKeys.includes(key)) {\n                    extraKeys.push(key);\n                }\n            }\n        }\n        const pairs = [];\n        for (const key of shapeKeys) {\n            const keyValidator = shape[key];\n            const value = ctx.data[key];\n            pairs.push({\n                key: { status: \"valid\", value: key },\n                value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (this._def.catchall instanceof ZodNever) {\n            const unknownKeys = this._def.unknownKeys;\n            if (unknownKeys === \"passthrough\") {\n                for (const key of extraKeys) {\n                    pairs.push({\n                        key: { status: \"valid\", value: key },\n                        value: { status: \"valid\", value: ctx.data[key] },\n                    });\n                }\n            }\n            else if (unknownKeys === \"strict\") {\n                if (extraKeys.length > 0) {\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.unrecognized_keys,\n                        keys: extraKeys,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (unknownKeys === \"strip\") {\n            }\n            else {\n                throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n            }\n        }\n        else {\n            // run catchall validation\n            const catchall = this._def.catchall;\n            for (const key of extraKeys) {\n                const value = ctx.data[key];\n                pairs.push({\n                    key: { status: \"valid\", value: key },\n                    value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n                    ),\n                    alwaysSet: key in ctx.data,\n                });\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.resolve()\n                .then(async () => {\n                const syncPairs = [];\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    syncPairs.push({\n                        key,\n                        value,\n                        alwaysSet: pair.alwaysSet,\n                    });\n                }\n                return syncPairs;\n            })\n                .then((syncPairs) => {\n                return ParseStatus.mergeObjectSync(status, syncPairs);\n            });\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get shape() {\n        return this._def.shape();\n    }\n    strict(message) {\n        errorUtil.errToObj;\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strict\",\n            ...(message !== undefined\n                ? {\n                    errorMap: (issue, ctx) => {\n                        const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n                        if (issue.code === \"unrecognized_keys\")\n                            return {\n                                message: errorUtil.errToObj(message).message ?? defaultError,\n                            };\n                        return {\n                            message: defaultError,\n                        };\n                    },\n                }\n                : {}),\n        });\n    }\n    strip() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strip\",\n        });\n    }\n    passthrough() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"passthrough\",\n        });\n    }\n    // const AugmentFactory =\n    //   <Def extends ZodObjectDef>(def: Def) =>\n    //   <Augmentation extends ZodRawShape>(\n    //     augmentation: Augmentation\n    //   ): ZodObject<\n    //     extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n    //     Def[\"unknownKeys\"],\n    //     Def[\"catchall\"]\n    //   > => {\n    //     return new ZodObject({\n    //       ...def,\n    //       shape: () => ({\n    //         ...def.shape(),\n    //         ...augmentation,\n    //       }),\n    //     }) as any;\n    //   };\n    extend(augmentation) {\n        return new ZodObject({\n            ...this._def,\n            shape: () => ({\n                ...this._def.shape(),\n                ...augmentation,\n            }),\n        });\n    }\n    /**\n     * Prior to zod@1.0.12 there was a bug in the\n     * inferred type of merged objects. Please\n     * upgrade if you are experiencing issues.\n     */\n    merge(merging) {\n        const merged = new ZodObject({\n            unknownKeys: merging._def.unknownKeys,\n            catchall: merging._def.catchall,\n            shape: () => ({\n                ...this._def.shape(),\n                ...merging._def.shape(),\n            }),\n            typeName: ZodFirstPartyTypeKind.ZodObject,\n        });\n        return merged;\n    }\n    // merge<\n    //   Incoming extends AnyZodObject,\n    //   Augmentation extends Incoming[\"shape\"],\n    //   NewOutput extends {\n    //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_output\"]\n    //       : k extends keyof Output\n    //       ? Output[k]\n    //       : never;\n    //   },\n    //   NewInput extends {\n    //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_input\"]\n    //       : k extends keyof Input\n    //       ? Input[k]\n    //       : never;\n    //   }\n    // >(\n    //   merging: Incoming\n    // ): ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"],\n    //   NewOutput,\n    //   NewInput\n    // > {\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    setKey(key, schema) {\n        return this.augment({ [key]: schema });\n    }\n    // merge<Incoming extends AnyZodObject>(\n    //   merging: Incoming\n    // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n    // ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"]\n    // > {\n    //   // const mergedShape = objectUtil.mergeShapes(\n    //   //   this._def.shape(),\n    //   //   merging._def.shape()\n    //   // );\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    catchall(index) {\n        return new ZodObject({\n            ...this._def,\n            catchall: index,\n        });\n    }\n    pick(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(mask)) {\n            if (mask[key] && this.shape[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    omit(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (!mask[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    /**\n     * @deprecated\n     */\n    deepPartial() {\n        return deepPartialify(this);\n    }\n    partial(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            const fieldSchema = this.shape[key];\n            if (mask && !mask[key]) {\n                newShape[key] = fieldSchema;\n            }\n            else {\n                newShape[key] = fieldSchema.optional();\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    required(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (mask && !mask[key]) {\n                newShape[key] = this.shape[key];\n            }\n            else {\n                const fieldSchema = this.shape[key];\n                let newField = fieldSchema;\n                while (newField instanceof ZodOptional) {\n                    newField = newField._def.innerType;\n                }\n                newShape[key] = newField;\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    keyof() {\n        return createZodEnum(util.objectKeys(this.shape));\n    }\n}\nZodObject.create = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.strictCreate = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strict\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.lazycreate = (shape, params) => {\n    return new ZodObject({\n        shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const options = this._def.options;\n        function handleResults(results) {\n            // return first issue-free validation if it exists\n            for (const result of results) {\n                if (result.result.status === \"valid\") {\n                    return result.result;\n                }\n            }\n            for (const result of results) {\n                if (result.result.status === \"dirty\") {\n                    // add issues from dirty option\n                    ctx.common.issues.push(...result.ctx.common.issues);\n                    return result.result;\n                }\n            }\n            // return invalid\n            const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return Promise.all(options.map(async (option) => {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                return {\n                    result: await option._parseAsync({\n                        data: ctx.data,\n                        path: ctx.path,\n                        parent: childCtx,\n                    }),\n                    ctx: childCtx,\n                };\n            })).then(handleResults);\n        }\n        else {\n            let dirty = undefined;\n            const issues = [];\n            for (const option of options) {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                const result = option._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: childCtx,\n                });\n                if (result.status === \"valid\") {\n                    return result;\n                }\n                else if (result.status === \"dirty\" && !dirty) {\n                    dirty = { result, ctx: childCtx };\n                }\n                if (childCtx.common.issues.length) {\n                    issues.push(childCtx.common.issues);\n                }\n            }\n            if (dirty) {\n                ctx.common.issues.push(...dirty.ctx.common.issues);\n                return dirty.result;\n            }\n            const unionErrors = issues.map((issues) => new ZodError(issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n    }\n    get options() {\n        return this._def.options;\n    }\n}\nZodUnion.create = (types, params) => {\n    return new ZodUnion({\n        options: types,\n        typeName: ZodFirstPartyTypeKind.ZodUnion,\n        ...processCreateParams(params),\n    });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n//////////                                 //////////\n//////////      ZodDiscriminatedUnion      //////////\n//////////                                 //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n    if (type instanceof ZodLazy) {\n        return getDiscriminator(type.schema);\n    }\n    else if (type instanceof ZodEffects) {\n        return getDiscriminator(type.innerType());\n    }\n    else if (type instanceof ZodLiteral) {\n        return [type.value];\n    }\n    else if (type instanceof ZodEnum) {\n        return type.options;\n    }\n    else if (type instanceof ZodNativeEnum) {\n        // eslint-disable-next-line ban/ban\n        return util.objectValues(type.enum);\n    }\n    else if (type instanceof ZodDefault) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else if (type instanceof ZodUndefined) {\n        return [undefined];\n    }\n    else if (type instanceof ZodNull) {\n        return [null];\n    }\n    else if (type instanceof ZodOptional) {\n        return [undefined, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodNullable) {\n        return [null, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodBranded) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodReadonly) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodCatch) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else {\n        return [];\n    }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const discriminator = this.discriminator;\n        const discriminatorValue = ctx.data[discriminator];\n        const option = this.optionsMap.get(discriminatorValue);\n        if (!option) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union_discriminator,\n                options: Array.from(this.optionsMap.keys()),\n                path: [discriminator],\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return option._parseAsync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n        else {\n            return option._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n    }\n    get discriminator() {\n        return this._def.discriminator;\n    }\n    get options() {\n        return this._def.options;\n    }\n    get optionsMap() {\n        return this._def.optionsMap;\n    }\n    /**\n     * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n     * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n     * have a different value for each object in the union.\n     * @param discriminator the name of the discriminator property\n     * @param types an array of object schemas\n     * @param params\n     */\n    static create(discriminator, options, params) {\n        // Get all the valid discriminator values\n        const optionsMap = new Map();\n        // try {\n        for (const type of options) {\n            const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n            if (!discriminatorValues.length) {\n                throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n            }\n            for (const value of discriminatorValues) {\n                if (optionsMap.has(value)) {\n                    throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n                }\n                optionsMap.set(value, type);\n            }\n        }\n        return new ZodDiscriminatedUnion({\n            typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n            discriminator,\n            options,\n            optionsMap,\n            ...processCreateParams(params),\n        });\n    }\n}\nfunction mergeValues(a, b) {\n    const aType = getParsedType(a);\n    const bType = getParsedType(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n        const bKeys = util.objectKeys(b);\n        const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n        if (a.length !== b.length) {\n            return { valid: false };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    else {\n        return { valid: false };\n    }\n}\nexport class ZodIntersection extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const handleParsed = (parsedLeft, parsedRight) => {\n            if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n                return INVALID;\n            }\n            const merged = mergeValues(parsedLeft.value, parsedRight.value);\n            if (!merged.valid) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.invalid_intersection_types,\n                });\n                return INVALID;\n            }\n            if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n                status.dirty();\n            }\n            return { status: status.value, value: merged.data };\n        };\n        if (ctx.common.async) {\n            return Promise.all([\n                this._def.left._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n                this._def.right._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n            ]).then(([left, right]) => handleParsed(left, right));\n        }\n        else {\n            return handleParsed(this._def.left._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }), this._def.right._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }));\n        }\n    }\n}\nZodIntersection.create = (left, right, params) => {\n    return new ZodIntersection({\n        left: left,\n        right: right,\n        typeName: ZodFirstPartyTypeKind.ZodIntersection,\n        ...processCreateParams(params),\n    });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (ctx.data.length < this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_small,\n                minimum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            return INVALID;\n        }\n        const rest = this._def.rest;\n        if (!rest && ctx.data.length > this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_big,\n                maximum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            status.dirty();\n        }\n        const items = [...ctx.data]\n            .map((item, itemIndex) => {\n            const schema = this._def.items[itemIndex] || this._def.rest;\n            if (!schema)\n                return null;\n            return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n        })\n            .filter((x) => !!x); // filter nulls\n        if (ctx.common.async) {\n            return Promise.all(items).then((results) => {\n                return ParseStatus.mergeArray(status, results);\n            });\n        }\n        else {\n            return ParseStatus.mergeArray(status, items);\n        }\n    }\n    get items() {\n        return this._def.items;\n    }\n    rest(rest) {\n        return new ZodTuple({\n            ...this._def,\n            rest,\n        });\n    }\n}\nZodTuple.create = (schemas, params) => {\n    if (!Array.isArray(schemas)) {\n        throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n    }\n    return new ZodTuple({\n        items: schemas,\n        typeName: ZodFirstPartyTypeKind.ZodTuple,\n        rest: null,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodRecord extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const pairs = [];\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        for (const key in ctx.data) {\n            pairs.push({\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n                value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (ctx.common.async) {\n            return ParseStatus.mergeObjectAsync(status, pairs);\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get element() {\n        return this._def.valueType;\n    }\n    static create(first, second, third) {\n        if (second instanceof ZodType) {\n            return new ZodRecord({\n                keyType: first,\n                valueType: second,\n                typeName: ZodFirstPartyTypeKind.ZodRecord,\n                ...processCreateParams(third),\n            });\n        }\n        return new ZodRecord({\n            keyType: ZodString.create(),\n            valueType: first,\n            typeName: ZodFirstPartyTypeKind.ZodRecord,\n            ...processCreateParams(second),\n        });\n    }\n}\nexport class ZodMap extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.map) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.map,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n            return {\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n                value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n            };\n        });\n        if (ctx.common.async) {\n            const finalMap = new Map();\n            return Promise.resolve().then(async () => {\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    if (key.status === \"aborted\" || value.status === \"aborted\") {\n                        return INVALID;\n                    }\n                    if (key.status === \"dirty\" || value.status === \"dirty\") {\n                        status.dirty();\n                    }\n                    finalMap.set(key.value, value.value);\n                }\n                return { status: status.value, value: finalMap };\n            });\n        }\n        else {\n            const finalMap = new Map();\n            for (const pair of pairs) {\n                const key = pair.key;\n                const value = pair.value;\n                if (key.status === \"aborted\" || value.status === \"aborted\") {\n                    return INVALID;\n                }\n                if (key.status === \"dirty\" || value.status === \"dirty\") {\n                    status.dirty();\n                }\n                finalMap.set(key.value, value.value);\n            }\n            return { status: status.value, value: finalMap };\n        }\n    }\n}\nZodMap.create = (keyType, valueType, params) => {\n    return new ZodMap({\n        valueType,\n        keyType,\n        typeName: ZodFirstPartyTypeKind.ZodMap,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSet extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.set) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.set,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const def = this._def;\n        if (def.minSize !== null) {\n            if (ctx.data.size < def.minSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minSize.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxSize !== null) {\n            if (ctx.data.size > def.maxSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxSize.message,\n                });\n                status.dirty();\n            }\n        }\n        const valueType = this._def.valueType;\n        function finalizeSet(elements) {\n            const parsedSet = new Set();\n            for (const element of elements) {\n                if (element.status === \"aborted\")\n                    return INVALID;\n                if (element.status === \"dirty\")\n                    status.dirty();\n                parsedSet.add(element.value);\n            }\n            return { status: status.value, value: parsedSet };\n        }\n        const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n        if (ctx.common.async) {\n            return Promise.all(elements).then((elements) => finalizeSet(elements));\n        }\n        else {\n            return finalizeSet(elements);\n        }\n    }\n    min(minSize, message) {\n        return new ZodSet({\n            ...this._def,\n            minSize: { value: minSize, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxSize, message) {\n        return new ZodSet({\n            ...this._def,\n            maxSize: { value: maxSize, message: errorUtil.toString(message) },\n        });\n    }\n    size(size, message) {\n        return this.min(size, message).max(size, message);\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodSet.create = (valueType, params) => {\n    return new ZodSet({\n        valueType,\n        minSize: null,\n        maxSize: null,\n        typeName: ZodFirstPartyTypeKind.ZodSet,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodFunction extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.validate = this.implement;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.function) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.function,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        function makeArgsIssue(args, error) {\n            return makeIssue({\n                data: args,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_arguments,\n                    argumentsError: error,\n                },\n            });\n        }\n        function makeReturnsIssue(returns, error) {\n            return makeIssue({\n                data: returns,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_return_type,\n                    returnTypeError: error,\n                },\n            });\n        }\n        const params = { errorMap: ctx.common.contextualErrorMap };\n        const fn = ctx.data;\n        if (this._def.returns instanceof ZodPromise) {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(async function (...args) {\n                const error = new ZodError([]);\n                const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n                    error.addIssue(makeArgsIssue(args, e));\n                    throw error;\n                });\n                const result = await Reflect.apply(fn, this, parsedArgs);\n                const parsedReturns = await me._def.returns._def.type\n                    .parseAsync(result, params)\n                    .catch((e) => {\n                    error.addIssue(makeReturnsIssue(result, e));\n                    throw error;\n                });\n                return parsedReturns;\n            });\n        }\n        else {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(function (...args) {\n                const parsedArgs = me._def.args.safeParse(args, params);\n                if (!parsedArgs.success) {\n                    throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n                }\n                const result = Reflect.apply(fn, this, parsedArgs.data);\n                const parsedReturns = me._def.returns.safeParse(result, params);\n                if (!parsedReturns.success) {\n                    throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n                }\n                return parsedReturns.data;\n            });\n        }\n    }\n    parameters() {\n        return this._def.args;\n    }\n    returnType() {\n        return this._def.returns;\n    }\n    args(...items) {\n        return new ZodFunction({\n            ...this._def,\n            args: ZodTuple.create(items).rest(ZodUnknown.create()),\n        });\n    }\n    returns(returnType) {\n        return new ZodFunction({\n            ...this._def,\n            returns: returnType,\n        });\n    }\n    implement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    strictImplement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    static create(args, returns, params) {\n        return new ZodFunction({\n            args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n            returns: returns || ZodUnknown.create(),\n            typeName: ZodFirstPartyTypeKind.ZodFunction,\n            ...processCreateParams(params),\n        });\n    }\n}\nexport class ZodLazy extends ZodType {\n    get schema() {\n        return this._def.getter();\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const lazySchema = this._def.getter();\n        return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n    }\n}\nZodLazy.create = (getter, params) => {\n    return new ZodLazy({\n        getter: getter,\n        typeName: ZodFirstPartyTypeKind.ZodLazy,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodLiteral extends ZodType {\n    _parse(input) {\n        if (input.data !== this._def.value) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_literal,\n                expected: this._def.value,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n    get value() {\n        return this._def.value;\n    }\n}\nZodLiteral.create = (value, params) => {\n    return new ZodLiteral({\n        value: value,\n        typeName: ZodFirstPartyTypeKind.ZodLiteral,\n        ...processCreateParams(params),\n    });\n};\nfunction createZodEnum(values, params) {\n    return new ZodEnum({\n        values,\n        typeName: ZodFirstPartyTypeKind.ZodEnum,\n        ...processCreateParams(params),\n    });\n}\nexport class ZodEnum extends ZodType {\n    _parse(input) {\n        if (typeof input.data !== \"string\") {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(this._def.values);\n        }\n        if (!this._cache.has(input.data)) {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get options() {\n        return this._def.values;\n    }\n    get enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Values() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    extract(values, newDef = this._def) {\n        return ZodEnum.create(values, {\n            ...this._def,\n            ...newDef,\n        });\n    }\n    exclude(values, newDef = this._def) {\n        return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n            ...this._def,\n            ...newDef,\n        });\n    }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n    _parse(input) {\n        const nativeEnumValues = util.getValidEnumValues(this._def.values);\n        const ctx = this._getOrReturnCtx(input);\n        if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(util.getValidEnumValues(this._def.values));\n        }\n        if (!this._cache.has(input.data)) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get enum() {\n        return this._def.values;\n    }\n}\nZodNativeEnum.create = (values, params) => {\n    return new ZodNativeEnum({\n        values: values,\n        typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodPromise extends ZodType {\n    unwrap() {\n        return this._def.type;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.promise,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n        return OK(promisified.then((data) => {\n            return this._def.type.parseAsync(data, {\n                path: ctx.path,\n                errorMap: ctx.common.contextualErrorMap,\n            });\n        }));\n    }\n}\nZodPromise.create = (schema, params) => {\n    return new ZodPromise({\n        type: schema,\n        typeName: ZodFirstPartyTypeKind.ZodPromise,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodEffects extends ZodType {\n    innerType() {\n        return this._def.schema;\n    }\n    sourceType() {\n        return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n            ? this._def.schema.sourceType()\n            : this._def.schema;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const effect = this._def.effect || null;\n        const checkCtx = {\n            addIssue: (arg) => {\n                addIssueToContext(ctx, arg);\n                if (arg.fatal) {\n                    status.abort();\n                }\n                else {\n                    status.dirty();\n                }\n            },\n            get path() {\n                return ctx.path;\n            },\n        };\n        checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n        if (effect.type === \"preprocess\") {\n            const processed = effect.transform(ctx.data, checkCtx);\n            if (ctx.common.async) {\n                return Promise.resolve(processed).then(async (processed) => {\n                    if (status.value === \"aborted\")\n                        return INVALID;\n                    const result = await this._def.schema._parseAsync({\n                        data: processed,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                    if (result.status === \"aborted\")\n                        return INVALID;\n                    if (result.status === \"dirty\")\n                        return DIRTY(result.value);\n                    if (status.value === \"dirty\")\n                        return DIRTY(result.value);\n                    return result;\n                });\n            }\n            else {\n                if (status.value === \"aborted\")\n                    return INVALID;\n                const result = this._def.schema._parseSync({\n                    data: processed,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (result.status === \"aborted\")\n                    return INVALID;\n                if (result.status === \"dirty\")\n                    return DIRTY(result.value);\n                if (status.value === \"dirty\")\n                    return DIRTY(result.value);\n                return result;\n            }\n        }\n        if (effect.type === \"refinement\") {\n            const executeRefinement = (acc) => {\n                const result = effect.refinement(acc, checkCtx);\n                if (ctx.common.async) {\n                    return Promise.resolve(result);\n                }\n                if (result instanceof Promise) {\n                    throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n                }\n                return acc;\n            };\n            if (ctx.common.async === false) {\n                const inner = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inner.status === \"aborted\")\n                    return INVALID;\n                if (inner.status === \"dirty\")\n                    status.dirty();\n                // return value is ignored\n                executeRefinement(inner.value);\n                return { status: status.value, value: inner.value };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n                    if (inner.status === \"aborted\")\n                        return INVALID;\n                    if (inner.status === \"dirty\")\n                        status.dirty();\n                    return executeRefinement(inner.value).then(() => {\n                        return { status: status.value, value: inner.value };\n                    });\n                });\n            }\n        }\n        if (effect.type === \"transform\") {\n            if (ctx.common.async === false) {\n                const base = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (!isValid(base))\n                    return INVALID;\n                const result = effect.transform(base.value, checkCtx);\n                if (result instanceof Promise) {\n                    throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n                }\n                return { status: status.value, value: result };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n                    if (!isValid(base))\n                        return INVALID;\n                    return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n                        status: status.value,\n                        value: result,\n                    }));\n                });\n            }\n        }\n        util.assertNever(effect);\n    }\n}\nZodEffects.create = (schema, effect, params) => {\n    return new ZodEffects({\n        schema,\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        effect,\n        ...processCreateParams(params),\n    });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n    return new ZodEffects({\n        schema,\n        effect: { type: \"preprocess\", transform: preprocess },\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        ...processCreateParams(params),\n    });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.undefined) {\n            return OK(undefined);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodOptional.create = (type, params) => {\n    return new ZodOptional({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodOptional,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNullable extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.null) {\n            return OK(null);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodNullable.create = (type, params) => {\n    return new ZodNullable({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodNullable,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDefault extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        let data = ctx.data;\n        if (ctx.parsedType === ZodParsedType.undefined) {\n            data = this._def.defaultValue();\n        }\n        return this._def.innerType._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    removeDefault() {\n        return this._def.innerType;\n    }\n}\nZodDefault.create = (type, params) => {\n    return new ZodDefault({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodDefault,\n        defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodCatch extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        // newCtx is used to not collect issues from inner types in ctx\n        const newCtx = {\n            ...ctx,\n            common: {\n                ...ctx.common,\n                issues: [],\n            },\n        };\n        const result = this._def.innerType._parse({\n            data: newCtx.data,\n            path: newCtx.path,\n            parent: {\n                ...newCtx,\n            },\n        });\n        if (isAsync(result)) {\n            return result.then((result) => {\n                return {\n                    status: \"valid\",\n                    value: result.status === \"valid\"\n                        ? result.value\n                        : this._def.catchValue({\n                            get error() {\n                                return new ZodError(newCtx.common.issues);\n                            },\n                            input: newCtx.data,\n                        }),\n                };\n            });\n        }\n        else {\n            return {\n                status: \"valid\",\n                value: result.status === \"valid\"\n                    ? result.value\n                    : this._def.catchValue({\n                        get error() {\n                            return new ZodError(newCtx.common.issues);\n                        },\n                        input: newCtx.data,\n                    }),\n            };\n        }\n    }\n    removeCatch() {\n        return this._def.innerType;\n    }\n}\nZodCatch.create = (type, params) => {\n    return new ZodCatch({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodCatch,\n        catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNaN extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.nan) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.nan,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n}\nZodNaN.create = (params) => {\n    return new ZodNaN({\n        typeName: ZodFirstPartyTypeKind.ZodNaN,\n        ...processCreateParams(params),\n    });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const data = ctx.data;\n        return this._def.type._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    unwrap() {\n        return this._def.type;\n    }\n}\nexport class ZodPipeline extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.common.async) {\n            const handleAsync = async () => {\n                const inResult = await this._def.in._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inResult.status === \"aborted\")\n                    return INVALID;\n                if (inResult.status === \"dirty\") {\n                    status.dirty();\n                    return DIRTY(inResult.value);\n                }\n                else {\n                    return this._def.out._parseAsync({\n                        data: inResult.value,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                }\n            };\n            return handleAsync();\n        }\n        else {\n            const inResult = this._def.in._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n            if (inResult.status === \"aborted\")\n                return INVALID;\n            if (inResult.status === \"dirty\") {\n                status.dirty();\n                return {\n                    status: \"dirty\",\n                    value: inResult.value,\n                };\n            }\n            else {\n                return this._def.out._parseSync({\n                    data: inResult.value,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n            }\n        }\n    }\n    static create(a, b) {\n        return new ZodPipeline({\n            in: a,\n            out: b,\n            typeName: ZodFirstPartyTypeKind.ZodPipeline,\n        });\n    }\n}\nexport class ZodReadonly extends ZodType {\n    _parse(input) {\n        const result = this._def.innerType._parse(input);\n        const freeze = (data) => {\n            if (isValid(data)) {\n                data.value = Object.freeze(data.value);\n            }\n            return data;\n        };\n        return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodReadonly.create = (type, params) => {\n    return new ZodReadonly({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodReadonly,\n        ...processCreateParams(params),\n    });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n//////////                    //////////\n//////////      z.custom      //////////\n//////////                    //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n    const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n    const p2 = typeof p === \"string\" ? { message: p } : p;\n    return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n    if (check)\n        return ZodAny.create().superRefine((data, ctx) => {\n            const r = check(data);\n            if (r instanceof Promise) {\n                return r.then((r) => {\n                    if (!r) {\n                        const params = cleanParams(_params, data);\n                        const _fatal = params.fatal ?? fatal ?? true;\n                        ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n                    }\n                });\n            }\n            if (!r) {\n                const params = cleanParams(_params, data);\n                const _fatal = params.fatal ?? fatal ?? true;\n                ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n            }\n            return;\n        });\n    return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n    object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n    ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n    ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n    ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n    ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n    ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n    ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n    ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n    ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n    ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n    ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n    ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n    ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n    ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n    ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n    ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n    ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n    ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n    ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n    ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n    ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n    ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n    ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n    ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n    ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n    ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n    ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n    ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n    ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n    ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n    ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n    ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n    ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n    ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n    ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n    ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n    ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n    constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n    message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n    string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n    number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n    boolean: ((arg) => ZodBoolean.create({\n        ...arg,\n        coerce: true,\n    })),\n    bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n    date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n", "export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n", "import * as z from \"./v3/external.js\";\nexport * from \"./v3/external.js\";\nexport { z };\nexport default z;\n", "/**\n * Contains the list of OpenAPI data types\n * as defined by https://swagger.io/docs/specification/data-models/data-types/\n * @public\n */\nvar SchemaType;\n(function (SchemaType) {\n    /** String type. */\n    SchemaType[\"STRING\"] = \"string\";\n    /** Number type. */\n    SchemaType[\"NUMBER\"] = \"number\";\n    /** Integer type. */\n    SchemaType[\"INTEGER\"] = \"integer\";\n    /** Boolean type. */\n    SchemaType[\"BOOLEAN\"] = \"boolean\";\n    /** Array type. */\n    SchemaType[\"ARRAY\"] = \"array\";\n    /** Object type. */\n    SchemaType[\"OBJECT\"] = \"object\";\n})(SchemaType || (SchemaType = {}));\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @public\n */\nvar ExecutableCodeLanguage;\n(function (ExecutableCodeLanguage) {\n    ExecutableCodeLanguage[\"LANGUAGE_UNSPECIFIED\"] = \"language_unspecified\";\n    ExecutableCodeLanguage[\"PYTHON\"] = \"python\";\n})(ExecutableCodeLanguage || (ExecutableCodeLanguage = {}));\n/**\n * Possible outcomes of code execution.\n * @public\n */\nvar Outcome;\n(function (Outcome) {\n    /**\n     * Unspecified status. This value should not be used.\n     */\n    Outcome[\"OUTCOME_UNSPECIFIED\"] = \"outcome_unspecified\";\n    /**\n     * Code execution completed successfully.\n     */\n    Outcome[\"OUTCOME_OK\"] = \"outcome_ok\";\n    /**\n     * Code execution finished but with a failure. `stderr` should contain the\n     * reason.\n     */\n    Outcome[\"OUTCOME_FAILED\"] = \"outcome_failed\";\n    /**\n     * Code execution ran for too long, and was cancelled. There may or may not\n     * be a partial output present.\n     */\n    Outcome[\"OUTCOME_DEADLINE_EXCEEDED\"] = \"outcome_deadline_exceeded\";\n})(Outcome || (Outcome = {}));\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Possible roles.\n * @public\n */\nconst POSSIBLE_ROLES = [\"user\", \"model\", \"function\", \"system\"];\n/**\n * Harm categories that would cause prompts or candidates to be blocked.\n * @public\n */\nvar HarmCategory;\n(function (HarmCategory) {\n    HarmCategory[\"HARM_CATEGORY_UNSPECIFIED\"] = \"HARM_CATEGORY_UNSPECIFIED\";\n    HarmCategory[\"HARM_CATEGORY_HATE_SPEECH\"] = \"HARM_CATEGORY_HATE_SPEECH\";\n    HarmCategory[\"HARM_CATEGORY_SEXUALLY_EXPLICIT\"] = \"HARM_CATEGORY_SEXUALLY_EXPLICIT\";\n    HarmCategory[\"HARM_CATEGORY_HARASSMENT\"] = \"HARM_CATEGORY_HARASSMENT\";\n    HarmCategory[\"HARM_CATEGORY_DANGEROUS_CONTENT\"] = \"HARM_CATEGORY_DANGEROUS_CONTENT\";\n    HarmCategory[\"HARM_CATEGORY_CIVIC_INTEGRITY\"] = \"HARM_CATEGORY_CIVIC_INTEGRITY\";\n})(HarmCategory || (HarmCategory = {}));\n/**\n * Threshold above which a prompt or candidate will be blocked.\n * @public\n */\nvar HarmBlockThreshold;\n(function (HarmBlockThreshold) {\n    /** Threshold is unspecified. */\n    HarmBlockThreshold[\"HARM_BLOCK_THRESHOLD_UNSPECIFIED\"] = \"HARM_BLOCK_THRESHOLD_UNSPECIFIED\";\n    /** Content with NEGLIGIBLE will be allowed. */\n    HarmBlockThreshold[\"BLOCK_LOW_AND_ABOVE\"] = \"BLOCK_LOW_AND_ABOVE\";\n    /** Content with NEGLIGIBLE and LOW will be allowed. */\n    HarmBlockThreshold[\"BLOCK_MEDIUM_AND_ABOVE\"] = \"BLOCK_MEDIUM_AND_ABOVE\";\n    /** Content with NEGLIGIBLE, LOW, and MEDIUM will be allowed. */\n    HarmBlockThreshold[\"BLOCK_ONLY_HIGH\"] = \"BLOCK_ONLY_HIGH\";\n    /** All content will be allowed. */\n    HarmBlockThreshold[\"BLOCK_NONE\"] = \"BLOCK_NONE\";\n})(HarmBlockThreshold || (HarmBlockThreshold = {}));\n/**\n * Probability that a prompt or candidate matches a harm category.\n * @public\n */\nvar HarmProbability;\n(function (HarmProbability) {\n    /** Probability is unspecified. */\n    HarmProbability[\"HARM_PROBABILITY_UNSPECIFIED\"] = \"HARM_PROBABILITY_UNSPECIFIED\";\n    /** Content has a negligible chance of being unsafe. */\n    HarmProbability[\"NEGLIGIBLE\"] = \"NEGLIGIBLE\";\n    /** Content has a low chance of being unsafe. */\n    HarmProbability[\"LOW\"] = \"LOW\";\n    /** Content has a medium chance of being unsafe. */\n    HarmProbability[\"MEDIUM\"] = \"MEDIUM\";\n    /** Content has a high chance of being unsafe. */\n    HarmProbability[\"HIGH\"] = \"HIGH\";\n})(HarmProbability || (HarmProbability = {}));\n/**\n * Reason that a prompt was blocked.\n * @public\n */\nvar BlockReason;\n(function (BlockReason) {\n    // A blocked reason was not specified.\n    BlockReason[\"BLOCKED_REASON_UNSPECIFIED\"] = \"BLOCKED_REASON_UNSPECIFIED\";\n    // Content was blocked by safety settings.\n    BlockReason[\"SAFETY\"] = \"SAFETY\";\n    // Content was blocked, but the reason is uncategorized.\n    BlockReason[\"OTHER\"] = \"OTHER\";\n})(BlockReason || (BlockReason = {}));\n/**\n * Reason that a candidate finished.\n * @public\n */\nvar FinishReason;\n(function (FinishReason) {\n    // Default value. This value is unused.\n    FinishReason[\"FINISH_REASON_UNSPECIFIED\"] = \"FINISH_REASON_UNSPECIFIED\";\n    // Natural stop point of the model or provided stop sequence.\n    FinishReason[\"STOP\"] = \"STOP\";\n    // The maximum number of tokens as specified in the request was reached.\n    FinishReason[\"MAX_TOKENS\"] = \"MAX_TOKENS\";\n    // The candidate content was flagged for safety reasons.\n    FinishReason[\"SAFETY\"] = \"SAFETY\";\n    // The candidate content was flagged for recitation reasons.\n    FinishReason[\"RECITATION\"] = \"RECITATION\";\n    // The candidate content was flagged for using an unsupported language.\n    FinishReason[\"LANGUAGE\"] = \"LANGUAGE\";\n    // Token generation stopped because the content contains forbidden terms.\n    FinishReason[\"BLOCKLIST\"] = \"BLOCKLIST\";\n    // Token generation stopped for potentially containing prohibited content.\n    FinishReason[\"PROHIBITED_CONTENT\"] = \"PROHIBITED_CONTENT\";\n    // Token generation stopped because the content potentially contains Sensitive Personally Identifiable Information (SPII).\n    FinishReason[\"SPII\"] = \"SPII\";\n    // The function call generated by the model is invalid.\n    FinishReason[\"MALFORMED_FUNCTION_CALL\"] = \"MALFORMED_FUNCTION_CALL\";\n    // Unknown reason.\n    FinishReason[\"OTHER\"] = \"OTHER\";\n})(FinishReason || (FinishReason = {}));\n/**\n * Task type for embedding content.\n * @public\n */\nvar TaskType;\n(function (TaskType) {\n    TaskType[\"TASK_TYPE_UNSPECIFIED\"] = \"TASK_TYPE_UNSPECIFIED\";\n    TaskType[\"RETRIEVAL_QUERY\"] = \"RETRIEVAL_QUERY\";\n    TaskType[\"RETRIEVAL_DOCUMENT\"] = \"RETRIEVAL_DOCUMENT\";\n    TaskType[\"SEMANTIC_SIMILARITY\"] = \"SEMANTIC_SIMILARITY\";\n    TaskType[\"CLASSIFICATION\"] = \"CLASSIFICATION\";\n    TaskType[\"CLUSTERING\"] = \"CLUSTERING\";\n})(TaskType || (TaskType = {}));\n/**\n * @public\n */\nvar FunctionCallingMode;\n(function (FunctionCallingMode) {\n    // Unspecified function calling mode. This value should not be used.\n    FunctionCallingMode[\"MODE_UNSPECIFIED\"] = \"MODE_UNSPECIFIED\";\n    // Default model behavior, model decides to predict either a function call\n    // or a natural language repspose.\n    FunctionCallingMode[\"AUTO\"] = \"AUTO\";\n    // Model is constrained to always predicting a function call only.\n    // If \"allowed_function_names\" are set, the predicted function call will be\n    // limited to any one of \"allowed_function_names\", else the predicted\n    // function call will be any one of the provided \"function_declarations\".\n    FunctionCallingMode[\"ANY\"] = \"ANY\";\n    // Model will not predict any function call. Model behavior is same as when\n    // not passing any function declarations.\n    FunctionCallingMode[\"NONE\"] = \"NONE\";\n})(FunctionCallingMode || (FunctionCallingMode = {}));\n/**\n * The mode of the predictor to be used in dynamic retrieval.\n * @public\n */\nvar DynamicRetrievalMode;\n(function (DynamicRetrievalMode) {\n    // Unspecified function calling mode. This value should not be used.\n    DynamicRetrievalMode[\"MODE_UNSPECIFIED\"] = \"MODE_UNSPECIFIED\";\n    // Run retrieval only when system decides it is necessary.\n    DynamicRetrievalMode[\"MODE_DYNAMIC\"] = \"MODE_DYNAMIC\";\n})(DynamicRetrievalMode || (DynamicRetrievalMode = {}));\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Basic error type for this SDK.\n * @public\n */\nclass GoogleGenerativeAIError extends Error {\n    constructor(message) {\n        super(`[GoogleGenerativeAI Error]: ${message}`);\n    }\n}\n/**\n * Errors in the contents of a response from the model. This includes parsing\n * errors, or responses including a safety block reason.\n * @public\n */\nclass GoogleGenerativeAIResponseError extends GoogleGenerativeAIError {\n    constructor(message, response) {\n        super(message);\n        this.response = response;\n    }\n}\n/**\n * Error class covering HTTP errors when calling the server. Includes HTTP\n * status, statusText, and optional details, if provided in the server response.\n * @public\n */\nclass GoogleGenerativeAIFetchError extends GoogleGenerativeAIError {\n    constructor(message, status, statusText, errorDetails) {\n        super(message);\n        this.status = status;\n        this.statusText = statusText;\n        this.errorDetails = errorDetails;\n    }\n}\n/**\n * Errors in the contents of a request originating from user input.\n * @public\n */\nclass GoogleGenerativeAIRequestInputError extends GoogleGenerativeAIError {\n}\n/**\n * Error thrown when a request is aborted, either due to a timeout or\n * intentional cancellation by the user.\n * @public\n */\nclass GoogleGenerativeAIAbortError extends GoogleGenerativeAIError {\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_BASE_URL = \"https://generativelanguage.googleapis.com\";\nconst DEFAULT_API_VERSION = \"v1beta\";\n/**\n * We can't `require` package.json if this runs on web. We will use rollup to\n * swap in the version number here at build time.\n */\nconst PACKAGE_VERSION = \"0.24.1\";\nconst PACKAGE_LOG_HEADER = \"genai-js\";\nvar Task;\n(function (Task) {\n    Task[\"GENERATE_CONTENT\"] = \"generateContent\";\n    Task[\"STREAM_GENERATE_CONTENT\"] = \"streamGenerateContent\";\n    Task[\"COUNT_TOKENS\"] = \"countTokens\";\n    Task[\"EMBED_CONTENT\"] = \"embedContent\";\n    Task[\"BATCH_EMBED_CONTENTS\"] = \"batchEmbedContents\";\n})(Task || (Task = {}));\nclass RequestUrl {\n    constructor(model, task, apiKey, stream, requestOptions) {\n        this.model = model;\n        this.task = task;\n        this.apiKey = apiKey;\n        this.stream = stream;\n        this.requestOptions = requestOptions;\n    }\n    toString() {\n        var _a, _b;\n        const apiVersion = ((_a = this.requestOptions) === null || _a === void 0 ? void 0 : _a.apiVersion) || DEFAULT_API_VERSION;\n        const baseUrl = ((_b = this.requestOptions) === null || _b === void 0 ? void 0 : _b.baseUrl) || DEFAULT_BASE_URL;\n        let url = `${baseUrl}/${apiVersion}/${this.model}:${this.task}`;\n        if (this.stream) {\n            url += \"?alt=sse\";\n        }\n        return url;\n    }\n}\n/**\n * Simple, but may become more complex if we add more versions to log.\n */\nfunction getClientHeaders(requestOptions) {\n    const clientHeaders = [];\n    if (requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.apiClient) {\n        clientHeaders.push(requestOptions.apiClient);\n    }\n    clientHeaders.push(`${PACKAGE_LOG_HEADER}/${PACKAGE_VERSION}`);\n    return clientHeaders.join(\" \");\n}\nasync function getHeaders(url) {\n    var _a;\n    const headers = new Headers();\n    headers.append(\"Content-Type\", \"application/json\");\n    headers.append(\"x-goog-api-client\", getClientHeaders(url.requestOptions));\n    headers.append(\"x-goog-api-key\", url.apiKey);\n    let customHeaders = (_a = url.requestOptions) === null || _a === void 0 ? void 0 : _a.customHeaders;\n    if (customHeaders) {\n        if (!(customHeaders instanceof Headers)) {\n            try {\n                customHeaders = new Headers(customHeaders);\n            }\n            catch (e) {\n                throw new GoogleGenerativeAIRequestInputError(`unable to convert customHeaders value ${JSON.stringify(customHeaders)} to Headers: ${e.message}`);\n            }\n        }\n        for (const [headerName, headerValue] of customHeaders.entries()) {\n            if (headerName === \"x-goog-api-key\") {\n                throw new GoogleGenerativeAIRequestInputError(`Cannot set reserved header name ${headerName}`);\n            }\n            else if (headerName === \"x-goog-api-client\") {\n                throw new GoogleGenerativeAIRequestInputError(`Header name ${headerName} can only be set using the apiClient field`);\n            }\n            headers.append(headerName, headerValue);\n        }\n    }\n    return headers;\n}\nasync function constructModelRequest(model, task, apiKey, stream, body, requestOptions) {\n    const url = new RequestUrl(model, task, apiKey, stream, requestOptions);\n    return {\n        url: url.toString(),\n        fetchOptions: Object.assign(Object.assign({}, buildFetchOptions(requestOptions)), { method: \"POST\", headers: await getHeaders(url), body }),\n    };\n}\nasync function makeModelRequest(model, task, apiKey, stream, body, requestOptions = {}, \n// Allows this to be stubbed for tests\nfetchFn = fetch) {\n    const { url, fetchOptions } = await constructModelRequest(model, task, apiKey, stream, body, requestOptions);\n    return makeRequest(url, fetchOptions, fetchFn);\n}\nasync function makeRequest(url, fetchOptions, fetchFn = fetch) {\n    let response;\n    try {\n        response = await fetchFn(url, fetchOptions);\n    }\n    catch (e) {\n        handleResponseError(e, url);\n    }\n    if (!response.ok) {\n        await handleResponseNotOk(response, url);\n    }\n    return response;\n}\nfunction handleResponseError(e, url) {\n    let err = e;\n    if (err.name === \"AbortError\") {\n        err = new GoogleGenerativeAIAbortError(`Request aborted when fetching ${url.toString()}: ${e.message}`);\n        err.stack = e.stack;\n    }\n    else if (!(e instanceof GoogleGenerativeAIFetchError ||\n        e instanceof GoogleGenerativeAIRequestInputError)) {\n        err = new GoogleGenerativeAIError(`Error fetching from ${url.toString()}: ${e.message}`);\n        err.stack = e.stack;\n    }\n    throw err;\n}\nasync function handleResponseNotOk(response, url) {\n    let message = \"\";\n    let errorDetails;\n    try {\n        const json = await response.json();\n        message = json.error.message;\n        if (json.error.details) {\n            message += ` ${JSON.stringify(json.error.details)}`;\n            errorDetails = json.error.details;\n        }\n    }\n    catch (e) {\n        // ignored\n    }\n    throw new GoogleGenerativeAIFetchError(`Error fetching from ${url.toString()}: [${response.status} ${response.statusText}] ${message}`, response.status, response.statusText, errorDetails);\n}\n/**\n * Generates the request options to be passed to the fetch API.\n * @param requestOptions - The user-defined request options.\n * @returns The generated request options.\n */\nfunction buildFetchOptions(requestOptions) {\n    const fetchOptions = {};\n    if ((requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.signal) !== undefined || (requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeout) >= 0) {\n        const controller = new AbortController();\n        if ((requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeout) >= 0) {\n            setTimeout(() => controller.abort(), requestOptions.timeout);\n        }\n        if (requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.signal) {\n            requestOptions.signal.addEventListener(\"abort\", () => {\n                controller.abort();\n            });\n        }\n        fetchOptions.signal = controller.signal;\n    }\n    return fetchOptions;\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Adds convenience helper methods to a response object, including stream\n * chunks (as long as each chunk is a complete GenerateContentResponse JSON).\n */\nfunction addHelpers(response) {\n    response.text = () => {\n        if (response.candidates && response.candidates.length > 0) {\n            if (response.candidates.length > 1) {\n                console.warn(`This response had ${response.candidates.length} ` +\n                    `candidates. Returning text from the first candidate only. ` +\n                    `Access response.candidates directly to use the other candidates.`);\n            }\n            if (hadBadFinishReason(response.candidates[0])) {\n                throw new GoogleGenerativeAIResponseError(`${formatBlockErrorMessage(response)}`, response);\n            }\n            return getText(response);\n        }\n        else if (response.promptFeedback) {\n            throw new GoogleGenerativeAIResponseError(`Text not available. ${formatBlockErrorMessage(response)}`, response);\n        }\n        return \"\";\n    };\n    /**\n     * TODO: remove at next major version\n     */\n    response.functionCall = () => {\n        if (response.candidates && response.candidates.length > 0) {\n            if (response.candidates.length > 1) {\n                console.warn(`This response had ${response.candidates.length} ` +\n                    `candidates. Returning function calls from the first candidate only. ` +\n                    `Access response.candidates directly to use the other candidates.`);\n            }\n            if (hadBadFinishReason(response.candidates[0])) {\n                throw new GoogleGenerativeAIResponseError(`${formatBlockErrorMessage(response)}`, response);\n            }\n            console.warn(`response.functionCall() is deprecated. ` +\n                `Use response.functionCalls() instead.`);\n            return getFunctionCalls(response)[0];\n        }\n        else if (response.promptFeedback) {\n            throw new GoogleGenerativeAIResponseError(`Function call not available. ${formatBlockErrorMessage(response)}`, response);\n        }\n        return undefined;\n    };\n    response.functionCalls = () => {\n        if (response.candidates && response.candidates.length > 0) {\n            if (response.candidates.length > 1) {\n                console.warn(`This response had ${response.candidates.length} ` +\n                    `candidates. Returning function calls from the first candidate only. ` +\n                    `Access response.candidates directly to use the other candidates.`);\n            }\n            if (hadBadFinishReason(response.candidates[0])) {\n                throw new GoogleGenerativeAIResponseError(`${formatBlockErrorMessage(response)}`, response);\n            }\n            return getFunctionCalls(response);\n        }\n        else if (response.promptFeedback) {\n            throw new GoogleGenerativeAIResponseError(`Function call not available. ${formatBlockErrorMessage(response)}`, response);\n        }\n        return undefined;\n    };\n    return response;\n}\n/**\n * Returns all text found in all parts of first candidate.\n */\nfunction getText(response) {\n    var _a, _b, _c, _d;\n    const textStrings = [];\n    if ((_b = (_a = response.candidates) === null || _a === void 0 ? void 0 : _a[0].content) === null || _b === void 0 ? void 0 : _b.parts) {\n        for (const part of (_d = (_c = response.candidates) === null || _c === void 0 ? void 0 : _c[0].content) === null || _d === void 0 ? void 0 : _d.parts) {\n            if (part.text) {\n                textStrings.push(part.text);\n            }\n            if (part.executableCode) {\n                textStrings.push(\"\\n```\" +\n                    part.executableCode.language +\n                    \"\\n\" +\n                    part.executableCode.code +\n                    \"\\n```\\n\");\n            }\n            if (part.codeExecutionResult) {\n                textStrings.push(\"\\n```\\n\" + part.codeExecutionResult.output + \"\\n```\\n\");\n            }\n        }\n    }\n    if (textStrings.length > 0) {\n        return textStrings.join(\"\");\n    }\n    else {\n        return \"\";\n    }\n}\n/**\n * Returns functionCall of first candidate.\n */\nfunction getFunctionCalls(response) {\n    var _a, _b, _c, _d;\n    const functionCalls = [];\n    if ((_b = (_a = response.candidates) === null || _a === void 0 ? void 0 : _a[0].content) === null || _b === void 0 ? void 0 : _b.parts) {\n        for (const part of (_d = (_c = response.candidates) === null || _c === void 0 ? void 0 : _c[0].content) === null || _d === void 0 ? void 0 : _d.parts) {\n            if (part.functionCall) {\n                functionCalls.push(part.functionCall);\n            }\n        }\n    }\n    if (functionCalls.length > 0) {\n        return functionCalls;\n    }\n    else {\n        return undefined;\n    }\n}\nconst badFinishReasons = [\n    FinishReason.RECITATION,\n    FinishReason.SAFETY,\n    FinishReason.LANGUAGE,\n];\nfunction hadBadFinishReason(candidate) {\n    return (!!candidate.finishReason &&\n        badFinishReasons.includes(candidate.finishReason));\n}\nfunction formatBlockErrorMessage(response) {\n    var _a, _b, _c;\n    let message = \"\";\n    if ((!response.candidates || response.candidates.length === 0) &&\n        response.promptFeedback) {\n        message += \"Response was blocked\";\n        if ((_a = response.promptFeedback) === null || _a === void 0 ? void 0 : _a.blockReason) {\n            message += ` due to ${response.promptFeedback.blockReason}`;\n        }\n        if ((_b = response.promptFeedback) === null || _b === void 0 ? void 0 : _b.blockReasonMessage) {\n            message += `: ${response.promptFeedback.blockReasonMessage}`;\n        }\n    }\n    else if ((_c = response.candidates) === null || _c === void 0 ? void 0 : _c[0]) {\n        const firstCandidate = response.candidates[0];\n        if (hadBadFinishReason(firstCandidate)) {\n            message += `Candidate was blocked due to ${firstCandidate.finishReason}`;\n            if (firstCandidate.finishMessage) {\n                message += `: ${firstCandidate.finishMessage}`;\n            }\n        }\n    }\n    return message;\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nfunction __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nfunction __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst responseLineRE = /^data\\: (.*)(?:\\n\\n|\\r\\r|\\r\\n\\r\\n)/;\n/**\n * Process a response.body stream from the backend and return an\n * iterator that provides one complete GenerateContentResponse at a time\n * and a promise that resolves with a single aggregated\n * GenerateContentResponse.\n *\n * @param response - Response from a fetch call\n */\nfunction processStream(response) {\n    const inputStream = response.body.pipeThrough(new TextDecoderStream(\"utf8\", { fatal: true }));\n    const responseStream = getResponseStream(inputStream);\n    const [stream1, stream2] = responseStream.tee();\n    return {\n        stream: generateResponseSequence(stream1),\n        response: getResponsePromise(stream2),\n    };\n}\nasync function getResponsePromise(stream) {\n    const allResponses = [];\n    const reader = stream.getReader();\n    while (true) {\n        const { done, value } = await reader.read();\n        if (done) {\n            return addHelpers(aggregateResponses(allResponses));\n        }\n        allResponses.push(value);\n    }\n}\nfunction generateResponseSequence(stream) {\n    return __asyncGenerator(this, arguments, function* generateResponseSequence_1() {\n        const reader = stream.getReader();\n        while (true) {\n            const { value, done } = yield __await(reader.read());\n            if (done) {\n                break;\n            }\n            yield yield __await(addHelpers(value));\n        }\n    });\n}\n/**\n * Reads a raw stream from the fetch response and join incomplete\n * chunks, returning a new stream that provides a single complete\n * GenerateContentResponse in each iteration.\n */\nfunction getResponseStream(inputStream) {\n    const reader = inputStream.getReader();\n    const stream = new ReadableStream({\n        start(controller) {\n            let currentText = \"\";\n            return pump();\n            function pump() {\n                return reader\n                    .read()\n                    .then(({ value, done }) => {\n                    if (done) {\n                        if (currentText.trim()) {\n                            controller.error(new GoogleGenerativeAIError(\"Failed to parse stream\"));\n                            return;\n                        }\n                        controller.close();\n                        return;\n                    }\n                    currentText += value;\n                    let match = currentText.match(responseLineRE);\n                    let parsedResponse;\n                    while (match) {\n                        try {\n                            parsedResponse = JSON.parse(match[1]);\n                        }\n                        catch (e) {\n                            controller.error(new GoogleGenerativeAIError(`Error parsing JSON response: \"${match[1]}\"`));\n                            return;\n                        }\n                        controller.enqueue(parsedResponse);\n                        currentText = currentText.substring(match[0].length);\n                        match = currentText.match(responseLineRE);\n                    }\n                    return pump();\n                })\n                    .catch((e) => {\n                    let err = e;\n                    err.stack = e.stack;\n                    if (err.name === \"AbortError\") {\n                        err = new GoogleGenerativeAIAbortError(\"Request aborted when reading from the stream\");\n                    }\n                    else {\n                        err = new GoogleGenerativeAIError(\"Error reading from the stream\");\n                    }\n                    throw err;\n                });\n            }\n        },\n    });\n    return stream;\n}\n/**\n * Aggregates an array of `GenerateContentResponse`s into a single\n * GenerateContentResponse.\n */\nfunction aggregateResponses(responses) {\n    const lastResponse = responses[responses.length - 1];\n    const aggregatedResponse = {\n        promptFeedback: lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.promptFeedback,\n    };\n    for (const response of responses) {\n        if (response.candidates) {\n            let candidateIndex = 0;\n            for (const candidate of response.candidates) {\n                if (!aggregatedResponse.candidates) {\n                    aggregatedResponse.candidates = [];\n                }\n                if (!aggregatedResponse.candidates[candidateIndex]) {\n                    aggregatedResponse.candidates[candidateIndex] = {\n                        index: candidateIndex,\n                    };\n                }\n                // Keep overwriting, the last one will be final\n                aggregatedResponse.candidates[candidateIndex].citationMetadata =\n                    candidate.citationMetadata;\n                aggregatedResponse.candidates[candidateIndex].groundingMetadata =\n                    candidate.groundingMetadata;\n                aggregatedResponse.candidates[candidateIndex].finishReason =\n                    candidate.finishReason;\n                aggregatedResponse.candidates[candidateIndex].finishMessage =\n                    candidate.finishMessage;\n                aggregatedResponse.candidates[candidateIndex].safetyRatings =\n                    candidate.safetyRatings;\n                /**\n                 * Candidates should always have content and parts, but this handles\n                 * possible malformed responses.\n                 */\n                if (candidate.content && candidate.content.parts) {\n                    if (!aggregatedResponse.candidates[candidateIndex].content) {\n                        aggregatedResponse.candidates[candidateIndex].content = {\n                            role: candidate.content.role || \"user\",\n                            parts: [],\n                        };\n                    }\n                    const newPart = {};\n                    for (const part of candidate.content.parts) {\n                        if (part.text) {\n                            newPart.text = part.text;\n                        }\n                        if (part.functionCall) {\n                            newPart.functionCall = part.functionCall;\n                        }\n                        if (part.executableCode) {\n                            newPart.executableCode = part.executableCode;\n                        }\n                        if (part.codeExecutionResult) {\n                            newPart.codeExecutionResult = part.codeExecutionResult;\n                        }\n                        if (Object.keys(newPart).length === 0) {\n                            newPart.text = \"\";\n                        }\n                        aggregatedResponse.candidates[candidateIndex].content.parts.push(newPart);\n                    }\n                }\n            }\n            candidateIndex++;\n        }\n        if (response.usageMetadata) {\n            aggregatedResponse.usageMetadata = response.usageMetadata;\n        }\n    }\n    return aggregatedResponse;\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function generateContentStream(apiKey, model, params, requestOptions) {\n    const response = await makeModelRequest(model, Task.STREAM_GENERATE_CONTENT, apiKey, \n    /* stream */ true, JSON.stringify(params), requestOptions);\n    return processStream(response);\n}\nasync function generateContent(apiKey, model, params, requestOptions) {\n    const response = await makeModelRequest(model, Task.GENERATE_CONTENT, apiKey, \n    /* stream */ false, JSON.stringify(params), requestOptions);\n    const responseJson = await response.json();\n    const enhancedResponse = addHelpers(responseJson);\n    return {\n        response: enhancedResponse,\n    };\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction formatSystemInstruction(input) {\n    // null or undefined\n    if (input == null) {\n        return undefined;\n    }\n    else if (typeof input === \"string\") {\n        return { role: \"system\", parts: [{ text: input }] };\n    }\n    else if (input.text) {\n        return { role: \"system\", parts: [input] };\n    }\n    else if (input.parts) {\n        if (!input.role) {\n            return { role: \"system\", parts: input.parts };\n        }\n        else {\n            return input;\n        }\n    }\n}\nfunction formatNewContent(request) {\n    let newParts = [];\n    if (typeof request === \"string\") {\n        newParts = [{ text: request }];\n    }\n    else {\n        for (const partOrString of request) {\n            if (typeof partOrString === \"string\") {\n                newParts.push({ text: partOrString });\n            }\n            else {\n                newParts.push(partOrString);\n            }\n        }\n    }\n    return assignRoleToPartsAndValidateSendMessageRequest(newParts);\n}\n/**\n * When multiple Part types (i.e. FunctionResponsePart and TextPart) are\n * passed in a single Part array, we may need to assign different roles to each\n * part. Currently only FunctionResponsePart requires a role other than 'user'.\n * @private\n * @param parts Array of parts to pass to the model\n * @returns Array of content items\n */\nfunction assignRoleToPartsAndValidateSendMessageRequest(parts) {\n    const userContent = { role: \"user\", parts: [] };\n    const functionContent = { role: \"function\", parts: [] };\n    let hasUserContent = false;\n    let hasFunctionContent = false;\n    for (const part of parts) {\n        if (\"functionResponse\" in part) {\n            functionContent.parts.push(part);\n            hasFunctionContent = true;\n        }\n        else {\n            userContent.parts.push(part);\n            hasUserContent = true;\n        }\n    }\n    if (hasUserContent && hasFunctionContent) {\n        throw new GoogleGenerativeAIError(\"Within a single message, FunctionResponse cannot be mixed with other type of part in the request for sending chat message.\");\n    }\n    if (!hasUserContent && !hasFunctionContent) {\n        throw new GoogleGenerativeAIError(\"No content is provided for sending chat message.\");\n    }\n    if (hasUserContent) {\n        return userContent;\n    }\n    return functionContent;\n}\nfunction formatCountTokensInput(params, modelParams) {\n    var _a;\n    let formattedGenerateContentRequest = {\n        model: modelParams === null || modelParams === void 0 ? void 0 : modelParams.model,\n        generationConfig: modelParams === null || modelParams === void 0 ? void 0 : modelParams.generationConfig,\n        safetySettings: modelParams === null || modelParams === void 0 ? void 0 : modelParams.safetySettings,\n        tools: modelParams === null || modelParams === void 0 ? void 0 : modelParams.tools,\n        toolConfig: modelParams === null || modelParams === void 0 ? void 0 : modelParams.toolConfig,\n        systemInstruction: modelParams === null || modelParams === void 0 ? void 0 : modelParams.systemInstruction,\n        cachedContent: (_a = modelParams === null || modelParams === void 0 ? void 0 : modelParams.cachedContent) === null || _a === void 0 ? void 0 : _a.name,\n        contents: [],\n    };\n    const containsGenerateContentRequest = params.generateContentRequest != null;\n    if (params.contents) {\n        if (containsGenerateContentRequest) {\n            throw new GoogleGenerativeAIRequestInputError(\"CountTokensRequest must have one of contents or generateContentRequest, not both.\");\n        }\n        formattedGenerateContentRequest.contents = params.contents;\n    }\n    else if (containsGenerateContentRequest) {\n        formattedGenerateContentRequest = Object.assign(Object.assign({}, formattedGenerateContentRequest), params.generateContentRequest);\n    }\n    else {\n        // Array or string\n        const content = formatNewContent(params);\n        formattedGenerateContentRequest.contents = [content];\n    }\n    return { generateContentRequest: formattedGenerateContentRequest };\n}\nfunction formatGenerateContentInput(params) {\n    let formattedRequest;\n    if (params.contents) {\n        formattedRequest = params;\n    }\n    else {\n        // Array or string\n        const content = formatNewContent(params);\n        formattedRequest = { contents: [content] };\n    }\n    if (params.systemInstruction) {\n        formattedRequest.systemInstruction = formatSystemInstruction(params.systemInstruction);\n    }\n    return formattedRequest;\n}\nfunction formatEmbedContentInput(params) {\n    if (typeof params === \"string\" || Array.isArray(params)) {\n        const content = formatNewContent(params);\n        return { content };\n    }\n    return params;\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// https://ai.google.dev/api/rest/v1beta/Content#part\nconst VALID_PART_FIELDS = [\n    \"text\",\n    \"inlineData\",\n    \"functionCall\",\n    \"functionResponse\",\n    \"executableCode\",\n    \"codeExecutionResult\",\n];\nconst VALID_PARTS_PER_ROLE = {\n    user: [\"text\", \"inlineData\"],\n    function: [\"functionResponse\"],\n    model: [\"text\", \"functionCall\", \"executableCode\", \"codeExecutionResult\"],\n    // System instructions shouldn't be in history anyway.\n    system: [\"text\"],\n};\nfunction validateChatHistory(history) {\n    let prevContent = false;\n    for (const currContent of history) {\n        const { role, parts } = currContent;\n        if (!prevContent && role !== \"user\") {\n            throw new GoogleGenerativeAIError(`First content should be with role 'user', got ${role}`);\n        }\n        if (!POSSIBLE_ROLES.includes(role)) {\n            throw new GoogleGenerativeAIError(`Each item should include role field. Got ${role} but valid roles are: ${JSON.stringify(POSSIBLE_ROLES)}`);\n        }\n        if (!Array.isArray(parts)) {\n            throw new GoogleGenerativeAIError(\"Content should have 'parts' property with an array of Parts\");\n        }\n        if (parts.length === 0) {\n            throw new GoogleGenerativeAIError(\"Each Content should have at least one part\");\n        }\n        const countFields = {\n            text: 0,\n            inlineData: 0,\n            functionCall: 0,\n            functionResponse: 0,\n            fileData: 0,\n            executableCode: 0,\n            codeExecutionResult: 0,\n        };\n        for (const part of parts) {\n            for (const key of VALID_PART_FIELDS) {\n                if (key in part) {\n                    countFields[key] += 1;\n                }\n            }\n        }\n        const validParts = VALID_PARTS_PER_ROLE[role];\n        for (const key of VALID_PART_FIELDS) {\n            if (!validParts.includes(key) && countFields[key] > 0) {\n                throw new GoogleGenerativeAIError(`Content with role '${role}' can't contain '${key}' part`);\n            }\n        }\n        prevContent = true;\n    }\n}\n/**\n * Returns true if the response is valid (could be appended to the history), flase otherwise.\n */\nfunction isValidResponse(response) {\n    var _a;\n    if (response.candidates === undefined || response.candidates.length === 0) {\n        return false;\n    }\n    const content = (_a = response.candidates[0]) === null || _a === void 0 ? void 0 : _a.content;\n    if (content === undefined) {\n        return false;\n    }\n    if (content.parts === undefined || content.parts.length === 0) {\n        return false;\n    }\n    for (const part of content.parts) {\n        if (part === undefined || Object.keys(part).length === 0) {\n            return false;\n        }\n        if (part.text !== undefined && part.text === \"\") {\n            return false;\n        }\n    }\n    return true;\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Do not log a message for this error.\n */\nconst SILENT_ERROR = \"SILENT_ERROR\";\n/**\n * ChatSession class that enables sending chat messages and stores\n * history of sent and received messages so far.\n *\n * @public\n */\nclass ChatSession {\n    constructor(apiKey, model, params, _requestOptions = {}) {\n        this.model = model;\n        this.params = params;\n        this._requestOptions = _requestOptions;\n        this._history = [];\n        this._sendPromise = Promise.resolve();\n        this._apiKey = apiKey;\n        if (params === null || params === void 0 ? void 0 : params.history) {\n            validateChatHistory(params.history);\n            this._history = params.history;\n        }\n    }\n    /**\n     * Gets the chat history so far. Blocked prompts are not added to history.\n     * Blocked candidates are not added to history, nor are the prompts that\n     * generated them.\n     */\n    async getHistory() {\n        await this._sendPromise;\n        return this._history;\n    }\n    /**\n     * Sends a chat message and receives a non-streaming\n     * {@link GenerateContentResult}.\n     *\n     * Fields set in the optional {@link SingleRequestOptions} parameter will\n     * take precedence over the {@link RequestOptions} values provided to\n     * {@link GoogleGenerativeAI.getGenerativeModel }.\n     */\n    async sendMessage(request, requestOptions = {}) {\n        var _a, _b, _c, _d, _e, _f;\n        await this._sendPromise;\n        const newContent = formatNewContent(request);\n        const generateContentRequest = {\n            safetySettings: (_a = this.params) === null || _a === void 0 ? void 0 : _a.safetySettings,\n            generationConfig: (_b = this.params) === null || _b === void 0 ? void 0 : _b.generationConfig,\n            tools: (_c = this.params) === null || _c === void 0 ? void 0 : _c.tools,\n            toolConfig: (_d = this.params) === null || _d === void 0 ? void 0 : _d.toolConfig,\n            systemInstruction: (_e = this.params) === null || _e === void 0 ? void 0 : _e.systemInstruction,\n            cachedContent: (_f = this.params) === null || _f === void 0 ? void 0 : _f.cachedContent,\n            contents: [...this._history, newContent],\n        };\n        const chatSessionRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n        let finalResult;\n        // Add onto the chain.\n        this._sendPromise = this._sendPromise\n            .then(() => generateContent(this._apiKey, this.model, generateContentRequest, chatSessionRequestOptions))\n            .then((result) => {\n            var _a;\n            if (isValidResponse(result.response)) {\n                this._history.push(newContent);\n                const responseContent = Object.assign({ parts: [], \n                    // Response seems to come back without a role set.\n                    role: \"model\" }, (_a = result.response.candidates) === null || _a === void 0 ? void 0 : _a[0].content);\n                this._history.push(responseContent);\n            }\n            else {\n                const blockErrorMessage = formatBlockErrorMessage(result.response);\n                if (blockErrorMessage) {\n                    console.warn(`sendMessage() was unsuccessful. ${blockErrorMessage}. Inspect response object for details.`);\n                }\n            }\n            finalResult = result;\n        })\n            .catch((e) => {\n            // Resets _sendPromise to avoid subsequent calls failing and throw error.\n            this._sendPromise = Promise.resolve();\n            throw e;\n        });\n        await this._sendPromise;\n        return finalResult;\n    }\n    /**\n     * Sends a chat message and receives the response as a\n     * {@link GenerateContentStreamResult} containing an iterable stream\n     * and a response promise.\n     *\n     * Fields set in the optional {@link SingleRequestOptions} parameter will\n     * take precedence over the {@link RequestOptions} values provided to\n     * {@link GoogleGenerativeAI.getGenerativeModel }.\n     */\n    async sendMessageStream(request, requestOptions = {}) {\n        var _a, _b, _c, _d, _e, _f;\n        await this._sendPromise;\n        const newContent = formatNewContent(request);\n        const generateContentRequest = {\n            safetySettings: (_a = this.params) === null || _a === void 0 ? void 0 : _a.safetySettings,\n            generationConfig: (_b = this.params) === null || _b === void 0 ? void 0 : _b.generationConfig,\n            tools: (_c = this.params) === null || _c === void 0 ? void 0 : _c.tools,\n            toolConfig: (_d = this.params) === null || _d === void 0 ? void 0 : _d.toolConfig,\n            systemInstruction: (_e = this.params) === null || _e === void 0 ? void 0 : _e.systemInstruction,\n            cachedContent: (_f = this.params) === null || _f === void 0 ? void 0 : _f.cachedContent,\n            contents: [...this._history, newContent],\n        };\n        const chatSessionRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n        const streamPromise = generateContentStream(this._apiKey, this.model, generateContentRequest, chatSessionRequestOptions);\n        // Add onto the chain.\n        this._sendPromise = this._sendPromise\n            .then(() => streamPromise)\n            // This must be handled to avoid unhandled rejection, but jump\n            // to the final catch block with a label to not log this error.\n            .catch((_ignored) => {\n            throw new Error(SILENT_ERROR);\n        })\n            .then((streamResult) => streamResult.response)\n            .then((response) => {\n            if (isValidResponse(response)) {\n                this._history.push(newContent);\n                const responseContent = Object.assign({}, response.candidates[0].content);\n                // Response seems to come back without a role set.\n                if (!responseContent.role) {\n                    responseContent.role = \"model\";\n                }\n                this._history.push(responseContent);\n            }\n            else {\n                const blockErrorMessage = formatBlockErrorMessage(response);\n                if (blockErrorMessage) {\n                    console.warn(`sendMessageStream() was unsuccessful. ${blockErrorMessage}. Inspect response object for details.`);\n                }\n            }\n        })\n            .catch((e) => {\n            // Errors in streamPromise are already catchable by the user as\n            // streamPromise is returned.\n            // Avoid duplicating the error message in logs.\n            if (e.message !== SILENT_ERROR) {\n                // Users do not have access to _sendPromise to catch errors\n                // downstream from streamPromise, so they should not throw.\n                console.error(e);\n            }\n        });\n        return streamPromise;\n    }\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function countTokens(apiKey, model, params, singleRequestOptions) {\n    const response = await makeModelRequest(model, Task.COUNT_TOKENS, apiKey, false, JSON.stringify(params), singleRequestOptions);\n    return response.json();\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function embedContent(apiKey, model, params, requestOptions) {\n    const response = await makeModelRequest(model, Task.EMBED_CONTENT, apiKey, false, JSON.stringify(params), requestOptions);\n    return response.json();\n}\nasync function batchEmbedContents(apiKey, model, params, requestOptions) {\n    const requestsWithModel = params.requests.map((request) => {\n        return Object.assign(Object.assign({}, request), { model });\n    });\n    const response = await makeModelRequest(model, Task.BATCH_EMBED_CONTENTS, apiKey, false, JSON.stringify({ requests: requestsWithModel }), requestOptions);\n    return response.json();\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class for generative model APIs.\n * @public\n */\nclass GenerativeModel {\n    constructor(apiKey, modelParams, _requestOptions = {}) {\n        this.apiKey = apiKey;\n        this._requestOptions = _requestOptions;\n        if (modelParams.model.includes(\"/\")) {\n            // Models may be named \"models/model-name\" or \"tunedModels/model-name\"\n            this.model = modelParams.model;\n        }\n        else {\n            // If path is not included, assume it's a non-tuned model.\n            this.model = `models/${modelParams.model}`;\n        }\n        this.generationConfig = modelParams.generationConfig || {};\n        this.safetySettings = modelParams.safetySettings || [];\n        this.tools = modelParams.tools;\n        this.toolConfig = modelParams.toolConfig;\n        this.systemInstruction = formatSystemInstruction(modelParams.systemInstruction);\n        this.cachedContent = modelParams.cachedContent;\n    }\n    /**\n     * Makes a single non-streaming call to the model\n     * and returns an object containing a single {@link GenerateContentResponse}.\n     *\n     * Fields set in the optional {@link SingleRequestOptions} parameter will\n     * take precedence over the {@link RequestOptions} values provided to\n     * {@link GoogleGenerativeAI.getGenerativeModel }.\n     */\n    async generateContent(request, requestOptions = {}) {\n        var _a;\n        const formattedParams = formatGenerateContentInput(request);\n        const generativeModelRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n        return generateContent(this.apiKey, this.model, Object.assign({ generationConfig: this.generationConfig, safetySettings: this.safetySettings, tools: this.tools, toolConfig: this.toolConfig, systemInstruction: this.systemInstruction, cachedContent: (_a = this.cachedContent) === null || _a === void 0 ? void 0 : _a.name }, formattedParams), generativeModelRequestOptions);\n    }\n    /**\n     * Makes a single streaming call to the model and returns an object\n     * containing an iterable stream that iterates over all chunks in the\n     * streaming response as well as a promise that returns the final\n     * aggregated response.\n     *\n     * Fields set in the optional {@link SingleRequestOptions} parameter will\n     * take precedence over the {@link RequestOptions} values provided to\n     * {@link GoogleGenerativeAI.getGenerativeModel }.\n     */\n    async generateContentStream(request, requestOptions = {}) {\n        var _a;\n        const formattedParams = formatGenerateContentInput(request);\n        const generativeModelRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n        return generateContentStream(this.apiKey, this.model, Object.assign({ generationConfig: this.generationConfig, safetySettings: this.safetySettings, tools: this.tools, toolConfig: this.toolConfig, systemInstruction: this.systemInstruction, cachedContent: (_a = this.cachedContent) === null || _a === void 0 ? void 0 : _a.name }, formattedParams), generativeModelRequestOptions);\n    }\n    /**\n     * Gets a new {@link ChatSession} instance which can be used for\n     * multi-turn chats.\n     */\n    startChat(startChatParams) {\n        var _a;\n        return new ChatSession(this.apiKey, this.model, Object.assign({ generationConfig: this.generationConfig, safetySettings: this.safetySettings, tools: this.tools, toolConfig: this.toolConfig, systemInstruction: this.systemInstruction, cachedContent: (_a = this.cachedContent) === null || _a === void 0 ? void 0 : _a.name }, startChatParams), this._requestOptions);\n    }\n    /**\n     * Counts the tokens in the provided request.\n     *\n     * Fields set in the optional {@link SingleRequestOptions} parameter will\n     * take precedence over the {@link RequestOptions} values provided to\n     * {@link GoogleGenerativeAI.getGenerativeModel }.\n     */\n    async countTokens(request, requestOptions = {}) {\n        const formattedParams = formatCountTokensInput(request, {\n            model: this.model,\n            generationConfig: this.generationConfig,\n            safetySettings: this.safetySettings,\n            tools: this.tools,\n            toolConfig: this.toolConfig,\n            systemInstruction: this.systemInstruction,\n            cachedContent: this.cachedContent,\n        });\n        const generativeModelRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n        return countTokens(this.apiKey, this.model, formattedParams, generativeModelRequestOptions);\n    }\n    /**\n     * Embeds the provided content.\n     *\n     * Fields set in the optional {@link SingleRequestOptions} parameter will\n     * take precedence over the {@link RequestOptions} values provided to\n     * {@link GoogleGenerativeAI.getGenerativeModel }.\n     */\n    async embedContent(request, requestOptions = {}) {\n        const formattedParams = formatEmbedContentInput(request);\n        const generativeModelRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n        return embedContent(this.apiKey, this.model, formattedParams, generativeModelRequestOptions);\n    }\n    /**\n     * Embeds an array of {@link EmbedContentRequest}s.\n     *\n     * Fields set in the optional {@link SingleRequestOptions} parameter will\n     * take precedence over the {@link RequestOptions} values provided to\n     * {@link GoogleGenerativeAI.getGenerativeModel }.\n     */\n    async batchEmbedContents(batchEmbedContentRequest, requestOptions = {}) {\n        const generativeModelRequestOptions = Object.assign(Object.assign({}, this._requestOptions), requestOptions);\n        return batchEmbedContents(this.apiKey, this.model, batchEmbedContentRequest, generativeModelRequestOptions);\n    }\n}\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Top-level class for this SDK\n * @public\n */\nclass GoogleGenerativeAI {\n    constructor(apiKey) {\n        this.apiKey = apiKey;\n    }\n    /**\n     * Gets a {@link GenerativeModel} instance for the provided model name.\n     */\n    getGenerativeModel(modelParams, requestOptions) {\n        if (!modelParams.model) {\n            throw new GoogleGenerativeAIError(`Must provide a model name. ` +\n                `Example: genai.getGenerativeModel({ model: 'my-model-name' })`);\n        }\n        return new GenerativeModel(this.apiKey, modelParams, requestOptions);\n    }\n    /**\n     * Creates a {@link GenerativeModel} instance from provided content cache.\n     */\n    getGenerativeModelFromCachedContent(cachedContent, modelParams, requestOptions) {\n        if (!cachedContent.name) {\n            throw new GoogleGenerativeAIRequestInputError(\"Cached content must contain a `name` field.\");\n        }\n        if (!cachedContent.model) {\n            throw new GoogleGenerativeAIRequestInputError(\"Cached content must contain a `model` field.\");\n        }\n        /**\n         * Not checking tools and toolConfig for now as it would require a deep\n         * equality comparison and isn't likely to be a common case.\n         */\n        const disallowedDuplicates = [\"model\", \"systemInstruction\"];\n        for (const key of disallowedDuplicates) {\n            if ((modelParams === null || modelParams === void 0 ? void 0 : modelParams[key]) &&\n                cachedContent[key] &&\n                (modelParams === null || modelParams === void 0 ? void 0 : modelParams[key]) !== cachedContent[key]) {\n                if (key === \"model\") {\n                    const modelParamsComp = modelParams.model.startsWith(\"models/\")\n                        ? modelParams.model.replace(\"models/\", \"\")\n                        : modelParams.model;\n                    const cachedContentComp = cachedContent.model.startsWith(\"models/\")\n                        ? cachedContent.model.replace(\"models/\", \"\")\n                        : cachedContent.model;\n                    if (modelParamsComp === cachedContentComp) {\n                        continue;\n                    }\n                }\n                throw new GoogleGenerativeAIRequestInputError(`Different value for \"${key}\" specified in modelParams` +\n                    ` (${modelParams[key]}) and cachedContent (${cachedContent[key]})`);\n            }\n        }\n        const modelParamsFromCache = Object.assign(Object.assign({}, modelParams), { model: cachedContent.model, tools: cachedContent.tools, toolConfig: cachedContent.toolConfig, systemInstruction: cachedContent.systemInstruction, cachedContent });\n        return new GenerativeModel(this.apiKey, modelParamsFromCache, requestOptions);\n    }\n}\n\nexport { BlockReason, ChatSession, DynamicRetrievalMode, ExecutableCodeLanguage, FinishReason, FunctionCallingMode, GenerativeModel, GoogleGenerativeAI, GoogleGenerativeAIAbortError, GoogleGenerativeAIError, GoogleGenerativeAIFetchError, GoogleGenerativeAIRequestInputError, GoogleGenerativeAIResponseError, HarmBlockThreshold, HarmCategory, HarmProbability, Outcome, POSSIBLE_ROLES, SchemaType, TaskType };\n//# sourceMappingURL=index.mjs.map\n", "function __classPrivateFieldSet(receiver, state, value, kind, f) {\n    if (kind === \"m\")\n        throw new TypeError(\"Private method is not writable\");\n    if (kind === \"a\" && !f)\n        throw new TypeError(\"Private accessor was defined without a setter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n        throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n    return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n    if (kind === \"a\" && !f)\n        throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n        throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n  const { crypto } = globalThis as any;\n  if (crypto?.randomUUID) {\n    uuid4 = crypto.randomUUID.bind(crypto);\n    return crypto.randomUUID();\n  }\n  const u8 = new Uint8Array(1);\n  const randomByte = crypto ? () => crypto.getRandomValues(u8)[0]! : () => (Math.random() * 0xff) & 0xff;\n  return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) =>\n    (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16),\n  );\n};\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nexport function isAbortError(err: unknown) {\n  return (\n    typeof err === 'object' &&\n    err !== null &&\n    // Spec-compliant fetch implementations\n    (('name' in err && (err as any).name === 'AbortError') ||\n      // Expo fetch\n      ('message' in err && String((err as any).message).includes('FetchRequestCanceledException')))\n  );\n}\n\nexport const castToError = (err: any): Error => {\n  if (err instanceof Error) return err;\n  if (typeof err === 'object' && err !== null) {\n    try {\n      if (Object.prototype.toString.call(err) === '[object Error]') {\n        // @ts-ignore - not all envs have native support for cause yet\n        const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n        if (err.stack) error.stack = err.stack;\n        // @ts-ignore - not all envs have native support for cause yet\n        if (err.cause && !error.cause) error.cause = err.cause;\n        if (err.name) error.name = err.name;\n        return error;\n      }\n    } catch {}\n    try {\n      return new Error(JSON.stringify(err));\n    } catch {}\n  }\n  return new Error(err);\n};\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { castToError } from '../internal/errors';\n\nexport class GroqError extends Error {}\n\nexport class APIError<\n  TStatus extends number | undefined = number | undefined,\n  THeaders extends Headers | undefined = Headers | undefined,\n  TError extends Object | undefined = Object | undefined,\n> extends GroqError {\n  /** HTTP status for the response that caused the error */\n  readonly status: TStatus;\n  /** HTTP headers for the response that caused the error */\n  readonly headers: THeaders;\n  /** JSON body of the response that caused the error */\n  readonly error: TError;\n\n  constructor(status: TStatus, error: TError, message: string | undefined, headers: THeaders) {\n    super(`${APIError.makeMessage(status, error, message)}`);\n    this.status = status;\n    this.headers = headers;\n    this.error = error;\n  }\n\n  private static makeMessage(status: number | undefined, error: any, message: string | undefined) {\n    const msg =\n      error?.message ?\n        typeof error.message === 'string' ?\n          error.message\n        : JSON.stringify(error.message)\n      : error ? JSON.stringify(error)\n      : message;\n\n    if (status && msg) {\n      return `${status} ${msg}`;\n    }\n    if (status) {\n      return `${status} status code (no body)`;\n    }\n    if (msg) {\n      return msg;\n    }\n    return '(no status code or body)';\n  }\n\n  static generate(\n    status: number | undefined,\n    errorResponse: Object | undefined,\n    message: string | undefined,\n    headers: Headers | undefined,\n  ): APIError {\n    if (!status || !headers) {\n      return new APIConnectionError({ message, cause: castToError(errorResponse) });\n    }\n\n    const error = errorResponse as Record<string, any>;\n\n    if (status === 400) {\n      return new BadRequestError(status, error, message, headers);\n    }\n\n    if (status === 401) {\n      return new AuthenticationError(status, error, message, headers);\n    }\n\n    if (status === 403) {\n      return new PermissionDeniedError(status, error, message, headers);\n    }\n\n    if (status === 404) {\n      return new NotFoundError(status, error, message, headers);\n    }\n\n    if (status === 409) {\n      return new ConflictError(status, error, message, headers);\n    }\n\n    if (status === 422) {\n      return new UnprocessableEntityError(status, error, message, headers);\n    }\n\n    if (status === 429) {\n      return new RateLimitError(status, error, message, headers);\n    }\n\n    if (status >= 500) {\n      return new InternalServerError(status, error, message, headers);\n    }\n\n    return new APIError(status, error, message, headers);\n  }\n}\n\nexport class APIUserAbortError extends APIError<undefined, undefined, undefined> {\n  constructor({ message }: { message?: string } = {}) {\n    super(undefined, undefined, message || 'Request was aborted.', undefined);\n  }\n}\n\nexport class APIConnectionError extends APIError<undefined, undefined, undefined> {\n  constructor({ message, cause }: { message?: string | undefined; cause?: Error | undefined }) {\n    super(undefined, undefined, message || 'Connection error.', undefined);\n    // in some environments the 'cause' property is already declared\n    // @ts-ignore\n    if (cause) this.cause = cause;\n  }\n}\n\nexport class APIConnectionTimeoutError extends APIConnectionError {\n  constructor({ message }: { message?: string } = {}) {\n    super({ message: message ?? 'Request timed out.' });\n  }\n}\n\nexport class BadRequestError extends APIError<400, Headers> {}\n\nexport class AuthenticationError extends APIError<401, Headers> {}\n\nexport class PermissionDeniedError extends APIError<403, Headers> {}\n\nexport class NotFoundError extends APIError<404, Headers> {}\n\nexport class ConflictError extends APIError<409, Headers> {}\n\nexport class UnprocessableEntityError extends APIError<422, Headers> {}\n\nexport class RateLimitError extends APIError<429, Headers> {}\n\nexport class InternalServerError extends APIError<number, Headers> {}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { GroqError } from '../../core/error';\n\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\n\nexport const isAbsoluteURL = (url: string): boolean => {\n  return startsWithSchemeRegexp.test(url);\n};\n\nexport let isArray = (val: unknown): val is unknown[] => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray as (val: unknown) => val is readonly unknown[];\n\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x: unknown): object {\n  if (typeof x !== 'object') {\n    return {};\n  }\n\n  return x ?? {};\n}\n\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj: Object | null | undefined): boolean {\n  if (!obj) return true;\n  for (const _k in obj) return false;\n  return true;\n}\n\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn<T extends object = object>(obj: T, key: PropertyKey): key is keyof T {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexport function isObj(obj: unknown): obj is Record<string, unknown> {\n  return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\n\nexport const ensurePresent = <T>(value: T | null | undefined): T => {\n  if (value == null) {\n    throw new GroqError(`Expected a value to be given but received ${value} instead.`);\n  }\n\n  return value;\n};\n\nexport const validatePositiveInteger = (name: string, n: unknown): number => {\n  if (typeof n !== 'number' || !Number.isInteger(n)) {\n    throw new GroqError(`${name} must be an integer`);\n  }\n  if (n < 0) {\n    throw new GroqError(`${name} must be a positive integer`);\n  }\n  return n;\n};\n\nexport const coerceInteger = (value: unknown): number => {\n  if (typeof value === 'number') return Math.round(value);\n  if (typeof value === 'string') return parseInt(value, 10);\n\n  throw new GroqError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\n\nexport const coerceFloat = (value: unknown): number => {\n  if (typeof value === 'number') return value;\n  if (typeof value === 'string') return parseFloat(value);\n\n  throw new GroqError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\n\nexport const coerceBoolean = (value: unknown): boolean => {\n  if (typeof value === 'boolean') return value;\n  if (typeof value === 'string') return value === 'true';\n  return Boolean(value);\n};\n\nexport const maybeCoerceInteger = (value: unknown): number | undefined => {\n  if (value == null) {\n    return undefined;\n  }\n  return coerceInteger(value);\n};\n\nexport const maybeCoerceFloat = (value: unknown): number | undefined => {\n  if (value == null) {\n    return undefined;\n  }\n  return coerceFloat(value);\n};\n\nexport const maybeCoerceBoolean = (value: unknown): boolean | undefined => {\n  if (value == null) {\n    return undefined;\n  }\n  return coerceBoolean(value);\n};\n\nexport const safeJSON = (text: string) => {\n  try {\n    return JSON.parse(text);\n  } catch (err) {\n    return undefined;\n  }\n};\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nexport const sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));\n", "export const VERSION = '1.2.0'; // x-release-please-version\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { VERSION } from '../version';\n\nexport const isRunningInBrowser = () => {\n  return (\n    // @ts-ignore\n    typeof window !== 'undefined' &&\n    // @ts-ignore\n    typeof window.document !== 'undefined' &&\n    // @ts-ignore\n    typeof navigator !== 'undefined'\n  );\n};\n\ntype DetectedPlatform = 'deno' | 'node' | 'edge' | 'unknown';\n\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform(): DetectedPlatform {\n  if (typeof Deno !== 'undefined' && Deno.build != null) {\n    return 'deno';\n  }\n  if (typeof EdgeRuntime !== 'undefined') {\n    return 'edge';\n  }\n  if (\n    Object.prototype.toString.call(\n      typeof (globalThis as any).process !== 'undefined' ? (globalThis as any).process : 0,\n    ) === '[object process]'\n  ) {\n    return 'node';\n  }\n  return 'unknown';\n}\n\ndeclare const Deno: any;\ndeclare const EdgeRuntime: any;\ntype Arch = 'x32' | 'x64' | 'arm' | 'arm64' | `other:${string}` | 'unknown';\ntype PlatformName =\n  | 'MacOS'\n  | 'Linux'\n  | 'Windows'\n  | 'FreeBSD'\n  | 'OpenBSD'\n  | 'iOS'\n  | 'Android'\n  | `Other:${string}`\n  | 'Unknown';\ntype Browser = 'ie' | 'edge' | 'chrome' | 'firefox' | 'safari';\ntype PlatformProperties = {\n  'X-Stainless-Lang': 'js';\n  'X-Stainless-Package-Version': string;\n  'X-Stainless-OS': PlatformName;\n  'X-Stainless-Arch': Arch;\n  'X-Stainless-Runtime': 'node' | 'deno' | 'edge' | `browser:${Browser}` | 'unknown';\n  'X-Stainless-Runtime-Version': string;\n};\nconst getPlatformProperties = (): PlatformProperties => {\n  const detectedPlatform = getDetectedPlatform();\n  if (detectedPlatform === 'deno') {\n    return {\n      'X-Stainless-Lang': 'js',\n      'X-Stainless-Package-Version': VERSION,\n      'X-Stainless-OS': normalizePlatform(Deno.build.os),\n      'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n      'X-Stainless-Runtime': 'deno',\n      'X-Stainless-Runtime-Version':\n        typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n    };\n  }\n  if (typeof EdgeRuntime !== 'undefined') {\n    return {\n      'X-Stainless-Lang': 'js',\n      'X-Stainless-Package-Version': VERSION,\n      'X-Stainless-OS': 'Unknown',\n      'X-Stainless-Arch': `other:${EdgeRuntime}`,\n      'X-Stainless-Runtime': 'edge',\n      'X-Stainless-Runtime-Version': (globalThis as any).process.version,\n    };\n  }\n  // Check if Node.js\n  if (detectedPlatform === 'node') {\n    return {\n      'X-Stainless-Lang': 'js',\n      'X-Stainless-Package-Version': VERSION,\n      'X-Stainless-OS': normalizePlatform((globalThis as any).process.platform ?? 'unknown'),\n      'X-Stainless-Arch': normalizeArch((globalThis as any).process.arch ?? 'unknown'),\n      'X-Stainless-Runtime': 'node',\n      'X-Stainless-Runtime-Version': (globalThis as any).process.version ?? 'unknown',\n    };\n  }\n\n  const browserInfo = getBrowserInfo();\n  if (browserInfo) {\n    return {\n      'X-Stainless-Lang': 'js',\n      'X-Stainless-Package-Version': VERSION,\n      'X-Stainless-OS': 'Unknown',\n      'X-Stainless-Arch': 'unknown',\n      'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n      'X-Stainless-Runtime-Version': browserInfo.version,\n    };\n  }\n\n  // TODO add support for Cloudflare workers, etc.\n  return {\n    'X-Stainless-Lang': 'js',\n    'X-Stainless-Package-Version': VERSION,\n    'X-Stainless-OS': 'Unknown',\n    'X-Stainless-Arch': 'unknown',\n    'X-Stainless-Runtime': 'unknown',\n    'X-Stainless-Runtime-Version': 'unknown',\n  };\n};\n\ntype BrowserInfo = {\n  browser: Browser;\n  version: string;\n};\n\ndeclare const navigator: { userAgent: string } | undefined;\n\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo(): BrowserInfo | null {\n  if (typeof navigator === 'undefined' || !navigator) {\n    return null;\n  }\n\n  // NOTE: The order matters here!\n  const browserPatterns = [\n    { key: 'edge' as const, pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n    { key: 'ie' as const, pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n    { key: 'ie' as const, pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n    { key: 'chrome' as const, pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n    { key: 'firefox' as const, pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n    { key: 'safari' as const, pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n  ];\n\n  // Find the FIRST matching browser\n  for (const { key, pattern } of browserPatterns) {\n    const match = pattern.exec(navigator.userAgent);\n    if (match) {\n      const major = match[1] || 0;\n      const minor = match[2] || 0;\n      const patch = match[3] || 0;\n\n      return { browser: key, version: `${major}.${minor}.${patch}` };\n    }\n  }\n\n  return null;\n}\n\nconst normalizeArch = (arch: string): Arch => {\n  // Node docs:\n  // - https://nodejs.org/api/process.html#processarch\n  // Deno docs:\n  // - https://doc.deno.land/deno/stable/~/Deno.build\n  if (arch === 'x32') return 'x32';\n  if (arch === 'x86_64' || arch === 'x64') return 'x64';\n  if (arch === 'arm') return 'arm';\n  if (arch === 'aarch64' || arch === 'arm64') return 'arm64';\n  if (arch) return `other:${arch}`;\n  return 'unknown';\n};\n\nconst normalizePlatform = (platform: string): PlatformName => {\n  // Node platforms:\n  // - https://nodejs.org/api/process.html#processplatform\n  // Deno platforms:\n  // - https://doc.deno.land/deno/stable/~/Deno.build\n  // - https://github.com/denoland/deno/issues/14799\n\n  platform = platform.toLowerCase();\n\n  // NOTE: this iOS check is untested and may not work\n  // Node does not work natively on IOS, there is a fork at\n  // https://github.com/nodejs-mobile/nodejs-mobile\n  // however it is unknown at the time of writing how to detect if it is running\n  if (platform.includes('ios')) return 'iOS';\n  if (platform === 'android') return 'Android';\n  if (platform === 'darwin') return 'MacOS';\n  if (platform === 'win32') return 'Windows';\n  if (platform === 'freebsd') return 'FreeBSD';\n  if (platform === 'openbsd') return 'OpenBSD';\n  if (platform === 'linux') return 'Linux';\n  if (platform) return `Other:${platform}`;\n  return 'Unknown';\n};\n\nlet _platformHeaders: PlatformProperties;\nexport const getPlatformHeaders = () => {\n  return (_platformHeaders ??= getPlatformProperties());\n};\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\n/**\n * This module provides internal shims and utility functions for environments where certain Node.js or global types may not be available.\n *\n * These are used to ensure we can provide a consistent behaviour between different JavaScript environments and good error\n * messages in cases where an environment isn't fully supported.\n */\n\nimport type { Fetch } from './builtin-types';\nimport type { ReadableStream } from './shim-types';\n\nexport function getDefaultFetch(): Fetch {\n  if (typeof fetch !== 'undefined') {\n    return fetch as any;\n  }\n\n  throw new Error(\n    '`fetch` is not defined as a global; Either pass `fetch` to the client, `new Groq({ fetch })` or polyfill the global, `globalThis.fetch = fetch`',\n  );\n}\n\ntype ReadableStreamArgs = ConstructorParameters<typeof ReadableStream>;\n\nexport function makeReadableStream(...args: ReadableStreamArgs): ReadableStream {\n  const ReadableStream = (globalThis as any).ReadableStream;\n  if (typeof ReadableStream === 'undefined') {\n    // Note: All of the platforms / runtimes we officially support already define\n    // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n    throw new Error(\n      '`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`',\n    );\n  }\n\n  return new ReadableStream(...args);\n}\n\nexport function ReadableStreamFrom<T>(iterable: Iterable<T> | AsyncIterable<T>): ReadableStream<T> {\n  let iter: AsyncIterator<T> | Iterator<T> =\n    Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n\n  return makeReadableStream({\n    start() {},\n    async pull(controller: any) {\n      const { done, value } = await iter.next();\n      if (done) {\n        controller.close();\n      } else {\n        controller.enqueue(value);\n      }\n    },\n    async cancel() {\n      await iter.return?.();\n    },\n  });\n}\n\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable<T>(stream: any): AsyncIterableIterator<T> {\n  if (stream[Symbol.asyncIterator]) return stream;\n\n  const reader = stream.getReader();\n  return {\n    async next() {\n      try {\n        const result = await reader.read();\n        if (result?.done) reader.releaseLock(); // release lock when stream becomes closed\n        return result;\n      } catch (e) {\n        reader.releaseLock(); // release lock when stream becomes errored\n        throw e;\n      }\n    },\n    async return() {\n      const cancelPromise = reader.cancel();\n      reader.releaseLock();\n      await cancelPromise;\n      return { done: true, value: undefined };\n    },\n    [Symbol.asyncIterator]() {\n      return this;\n    },\n  };\n}\n\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream: any): Promise<void> {\n  if (stream === null || typeof stream !== 'object') return;\n\n  if (stream[Symbol.asyncIterator]) {\n    await stream[Symbol.asyncIterator]().return?.();\n    return;\n  }\n\n  const reader = stream.getReader();\n  const cancelPromise = reader.cancel();\n  reader.releaseLock();\n  await cancelPromise;\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { NullableHeaders } from './headers';\n\nimport type { BodyInit } from './builtin-types';\nimport type { HTTPMethod, MergedRequestInit } from './types';\nimport { type HeadersLike } from './headers';\n\nexport type FinalRequestOptions = RequestOptions & { method: HTTPMethod; path: string };\n\nexport type RequestOptions = {\n  /**\n   * The HTTP method for the request (e.g., 'get', 'post', 'put', 'delete').\n   */\n  method?: HTTPMethod;\n\n  /**\n   * The URL path for the request.\n   *\n   * @example \"/v1/foo\"\n   */\n  path?: string;\n\n  /**\n   * Query parameters to include in the request URL.\n   */\n  query?: object | undefined | null;\n\n  /**\n   * The request body. Can be a string, JSON object, FormData, or other supported types.\n   */\n  body?: unknown;\n\n  /**\n   * HTTP headers to include with the request. Can be a Headers object, plain object, or array of tuples.\n   */\n  headers?: HeadersLike;\n\n  /**\n   * The maximum number of times that the client will retry a request in case of a\n   * temporary failure, like a network error or a 5XX error from the server.\n   *\n   * @default 2\n   */\n  maxRetries?: number;\n\n  stream?: boolean | undefined;\n\n  /**\n   * The maximum amount of time (in milliseconds) that the client should wait for a response\n   * from the server before timing out a single request.\n   *\n   * @unit milliseconds\n   */\n  timeout?: number;\n\n  /**\n   * Additional `RequestInit` options to be passed to the underlying `fetch` call.\n   * These options will be merged with the client's default fetch options.\n   */\n  fetchOptions?: MergedRequestInit;\n\n  /**\n   * An AbortSignal that can be used to cancel the request.\n   */\n  signal?: AbortSignal | undefined | null;\n\n  /**\n   * A unique key for this request to enable idempotency.\n   */\n  idempotencyKey?: string;\n\n  /**\n   * Override the default base URL for this specific request.\n   */\n  defaultBaseURL?: string | undefined;\n\n  __binaryResponse?: boolean | undefined;\n};\n\nexport type EncodedContent = { bodyHeaders: HeadersLike; body: BodyInit };\nexport type RequestEncoder = (request: { headers: NullableHeaders; body: unknown }) => EncodedContent;\n\nexport const FallbackEncoder: RequestEncoder = ({ headers, body }) => {\n  return {\n    bodyHeaders: {\n      'content-type': 'application/json',\n    },\n    body: JSON.stringify(body),\n  };\n};\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { GroqError } from '../../core/error';\n\n/**\n * Basic re-implementation of `qs.stringify` for primitive types.\n */\nexport function stringifyQuery(query: object | Record<string, unknown>) {\n  return Object.entries(query)\n    .filter(([_, value]) => typeof value !== 'undefined')\n    .map(([key, value]) => {\n      if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n        return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n      }\n      if (value === null) {\n        return `${encodeURIComponent(key)}=`;\n      }\n      throw new GroqError(\n        `Cannot stringify type ${typeof value}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`,\n      );\n    })\n    .join('&');\n}\n", "import { type RequestOptions } from './request-options';\nimport type { FilePropertyBag, Fetch } from './builtin-types';\nimport type { Groq } from '../client';\nimport { ReadableStreamFrom } from './shims';\n\nexport type BlobPart = string | ArrayBuffer | ArrayBufferView | Blob | DataView;\ntype FsReadStream = AsyncIterable<Uint8Array> & { path: string | { toString(): string } };\n\n// https://github.com/oven-sh/bun/issues/5980\ninterface BunFile extends Blob {\n  readonly name?: string | undefined;\n}\n\nexport const checkFileSupport = () => {\n  if (typeof File === 'undefined') {\n    const { process } = globalThis as any;\n    const isOldNode =\n      typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n    throw new Error(\n      '`File` is not defined as a global, which is required for file uploads.' +\n        (isOldNode ?\n          \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n        : ''),\n    );\n  }\n};\n\n/**\n * Typically, this is a native \"File\" class.\n *\n * We provide the {@link toFile} utility to convert a variety of objects\n * into the File class.\n *\n * For convenience, you can also pass a fetch Response, or in Node,\n * the result of fs.createReadStream().\n */\nexport type Uploadable = File | Response | FsReadStream | BunFile;\n\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(\n  fileBits: BlobPart[],\n  fileName: string | undefined,\n  options?: FilePropertyBag,\n): File {\n  checkFileSupport();\n  return new File(fileBits as any, fileName ?? 'unknown_file', options);\n}\n\nexport function getName(value: any): string | undefined {\n  return (\n    (\n      (typeof value === 'object' &&\n        value !== null &&\n        (('name' in value && value.name && String(value.name)) ||\n          ('url' in value && value.url && String(value.url)) ||\n          ('filename' in value && value.filename && String(value.filename)) ||\n          ('path' in value && value.path && String(value.path)))) ||\n      ''\n    )\n      .split(/[\\\\/]/)\n      .pop() || undefined\n  );\n}\n\nexport const isAsyncIterable = (value: any): value is AsyncIterable<any> =>\n  value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (\n  opts: RequestOptions,\n  fetch: Groq | Fetch,\n): Promise<RequestOptions> => {\n  if (!hasUploadableValue(opts.body)) return opts;\n\n  return { ...opts, body: await createForm(opts.body, fetch) };\n};\n\ntype MultipartFormRequestOptions = Omit<RequestOptions, 'body'> & { body: unknown };\n\nexport const multipartFormRequestOptions = async (\n  opts: MultipartFormRequestOptions,\n  fetch: Groq | Fetch,\n): Promise<RequestOptions> => {\n  return { ...opts, body: await createForm(opts.body, fetch) };\n};\n\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap<Fetch, Promise<boolean>>();\n\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject: Groq | Fetch): Promise<boolean> {\n  const fetch: Fetch = typeof fetchObject === 'function' ? fetchObject : (fetchObject as any).fetch;\n  const cached = supportsFormDataMap.get(fetch);\n  if (cached) return cached;\n  const promise = (async () => {\n    try {\n      const FetchResponse = (\n        'Response' in fetch ?\n          fetch.Response\n        : (await fetch('data:,')).constructor) as typeof Response;\n      const data = new FormData();\n      if (data.toString() === (await new FetchResponse(data).text())) {\n        return false;\n      }\n      return true;\n    } catch {\n      // avoid false negatives\n      return true;\n    }\n  })();\n  supportsFormDataMap.set(fetch, promise);\n  return promise;\n}\n\nexport const createForm = async <T = Record<string, unknown>>(\n  body: T | undefined,\n  fetch: Groq | Fetch,\n): Promise<FormData> => {\n  if (!(await supportsFormData(fetch))) {\n    throw new TypeError(\n      'The provided fetch function does not support file uploads with the current global FormData class.',\n    );\n  }\n  const form = new FormData();\n  await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n  return form;\n};\n\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value: unknown) => value instanceof Blob && 'name' in value;\n\nconst isUploadable = (value: unknown) =>\n  typeof value === 'object' &&\n  value !== null &&\n  (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\n\nconst hasUploadableValue = (value: unknown): boolean => {\n  if (isUploadable(value)) return true;\n  if (Array.isArray(value)) return value.some(hasUploadableValue);\n  if (value && typeof value === 'object') {\n    for (const k in value) {\n      if (hasUploadableValue((value as any)[k])) return true;\n    }\n  }\n  return false;\n};\n\nconst addFormValue = async (form: FormData, key: string, value: unknown): Promise<void> => {\n  if (value === undefined) return;\n  if (value == null) {\n    throw new TypeError(\n      `Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`,\n    );\n  }\n\n  // TODO: make nested formats configurable\n  if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n    form.append(key, String(value));\n  } else if (value instanceof Response) {\n    form.append(key, makeFile([await value.blob()], getName(value)));\n  } else if (isAsyncIterable(value)) {\n    form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n  } else if (isNamedBlob(value)) {\n    form.append(key, value, getName(value));\n  } else if (Array.isArray(value)) {\n    await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n  } else if (typeof value === 'object') {\n    await Promise.all(\n      Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)),\n    );\n  } else {\n    throw new TypeError(\n      `Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`,\n    );\n  }\n};\n", "import { BlobPart, getName, makeFile, isAsyncIterable } from './uploads';\nimport type { FilePropertyBag } from './builtin-types';\nimport { checkFileSupport } from './uploads';\n\ntype BlobLikePart = string | ArrayBuffer | ArrayBufferView | BlobLike | DataView;\n\n/**\n * Intended to match DOM Blob, node-fetch Blob, node:buffer Blob, etc.\n * Don't add arrayBuffer here, node-fetch doesn't have it\n */\ninterface BlobLike {\n  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/size) */\n  readonly size: number;\n  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/type) */\n  readonly type: string;\n  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/text) */\n  text(): Promise<string>;\n  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/slice) */\n  slice(start?: number, end?: number): BlobLike;\n}\n\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value: any): value is BlobLike & { arrayBuffer(): Promise<ArrayBuffer> } =>\n  value != null &&\n  typeof value === 'object' &&\n  typeof value.size === 'number' &&\n  typeof value.type === 'string' &&\n  typeof value.text === 'function' &&\n  typeof value.slice === 'function' &&\n  typeof value.arrayBuffer === 'function';\n\n/**\n * Intended to match DOM File, node:buffer File, undici File, etc.\n */\ninterface FileLike extends BlobLike {\n  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/lastModified) */\n  readonly lastModified: number;\n  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/name) */\n  readonly name?: string | undefined;\n}\n\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value: any): value is FileLike & { arrayBuffer(): Promise<ArrayBuffer> } =>\n  value != null &&\n  typeof value === 'object' &&\n  typeof value.name === 'string' &&\n  typeof value.lastModified === 'number' &&\n  isBlobLike(value);\n\n/**\n * Intended to match DOM Response, node-fetch Response, undici Response, etc.\n */\nexport interface ResponseLike {\n  url: string;\n  blob(): Promise<BlobLike>;\n}\n\nconst isResponseLike = (value: any): value is ResponseLike =>\n  value != null &&\n  typeof value === 'object' &&\n  typeof value.url === 'string' &&\n  typeof value.blob === 'function';\n\nexport type ToFileInput =\n  | FileLike\n  | ResponseLike\n  | Exclude<BlobLikePart, string>\n  | AsyncIterable<BlobLikePart>;\n\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, BlobLikePart, or AsyncIterable of BlobLikeParts\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(\n  value: ToFileInput | PromiseLike<ToFileInput>,\n  name?: string | null | undefined,\n  options?: FilePropertyBag | undefined,\n): Promise<File> {\n  checkFileSupport();\n\n  // If it's a promise, resolve it.\n  value = await value;\n\n  // If we've been given a `File` we don't need to do anything\n  if (isFileLike(value)) {\n    if (value instanceof File) {\n      return value;\n    }\n    return makeFile([await value.arrayBuffer()], value.name);\n  }\n\n  if (isResponseLike(value)) {\n    const blob = await value.blob();\n    name ||= new URL(value.url).pathname.split(/[\\\\/]/).pop();\n\n    return makeFile(await getBytes(blob), name, options);\n  }\n\n  const parts = await getBytes(value);\n\n  name ||= getName(value);\n\n  if (!options?.type) {\n    const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n    if (typeof type === 'string') {\n      options = { ...options, type };\n    }\n  }\n\n  return makeFile(parts, name, options);\n}\n\nasync function getBytes(value: BlobLikePart | AsyncIterable<BlobLikePart>): Promise<Array<BlobPart>> {\n  let parts: Array<BlobPart> = [];\n  if (\n    typeof value === 'string' ||\n    ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n    value instanceof ArrayBuffer\n  ) {\n    parts.push(value);\n  } else if (isBlobLike(value)) {\n    parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n  } else if (\n    isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n  ) {\n    for await (const chunk of value) {\n      parts.push(...(await getBytes(chunk as BlobLikePart))); // TODO, consider validating?\n    }\n  } else {\n    const constructor = value?.constructor?.name;\n    throw new Error(\n      `Unexpected data type: ${typeof value}${\n        constructor ? `; constructor: ${constructor}` : ''\n      }${propsForError(value)}`,\n    );\n  }\n\n  return parts;\n}\n\nfunction propsForError(value: unknown): string {\n  if (typeof value !== 'object' || value === null) return '';\n  const props = Object.getOwnPropertyNames(value);\n  return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nexport interface ErrorObject {\n  message: string;\n\n  type: string;\n\n  code?: string | null;\n\n  /**\n   * Debug information including input and output token IDs and strings. Only present\n   * when debug=true in the request.\n   */\n  debug?: ErrorObject.Debug;\n\n  failed_generation?: string | null;\n\n  param?: string | null;\n\n  schema_code?: string | null;\n\n  schema_kind?: string | null;\n\n  schema_path?: string | null;\n\n  /**\n   * Segments of the schema path relevant to validation errors.\n   */\n  schema_path_segments?: Array<string>;\n}\n\nexport namespace ErrorObject {\n  /**\n   * Debug information including input and output token IDs and strings. Only present\n   * when debug=true in the request.\n   */\n  export interface Debug {\n    /**\n     * Token IDs for the input.\n     */\n    input_token_ids?: Array<number>;\n\n    /**\n     * Token strings for the input.\n     */\n    input_tokens?: Array<string>;\n\n    /**\n     * Token IDs for the output.\n     */\n    output_token_ids?: Array<number>;\n\n    /**\n     * Token strings for the output.\n     */\n    output_tokens?: Array<string>;\n  }\n}\n\nexport interface FunctionDefinition {\n  /**\n   * The name of the function to be called. Must be a-z, A-Z, 0-9, or contain\n   * underscores and dashes, with a maximum length of 64.\n   */\n  name: string;\n\n  /**\n   * A description of what the function does, used by the model to choose when and\n   * how to call the function.\n   */\n  description?: string;\n\n  /**\n   * Function parameters defined as a JSON Schema object. Refer to\n   * https://json-schema.org/understanding-json-schema/ for schema documentation.\n   */\n  parameters?: FunctionParameters;\n\n  /**\n   * Whether to enable strict schema adherence when generating the output. If set to\n   * true, the model will always follow the exact schema defined in the `schema`\n   * field. Only a subset of JSON Schema is supported when `strict` is `true`.\n   */\n  strict?: boolean;\n}\n\n/**\n * Function parameters defined as a JSON Schema object. Refer to\n * https://json-schema.org/understanding-json-schema/ for schema documentation.\n */\nexport type FunctionParameters = { [key: string]: unknown };\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport type { Groq } from '../client';\n\nexport abstract class APIResource {\n  protected _client: Groq;\n\n  constructor(client: Groq) {\n    this._client = client;\n  }\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { isReadonlyArray } from './utils/values';\n\ntype HeaderValue = string | undefined | null;\nexport type HeadersLike =\n  | Headers\n  | readonly HeaderValue[][]\n  | Record<string, HeaderValue | readonly HeaderValue[]>\n  | undefined\n  | null\n  | NullableHeaders;\n\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\n\n/**\n * @internal\n * Users can pass explicit nulls to unset default headers. When we parse them\n * into a standard headers type we need to preserve that information.\n */\nexport type NullableHeaders = {\n  /** Brand check, prevent users from creating a NullableHeaders. */\n  [brand_privateNullableHeaders]: true;\n  /** Parsed headers. */\n  values: Headers;\n  /** Set of lowercase header names explicitly set to null. */\n  nulls: Set<string>;\n};\n\nfunction* iterateHeaders(headers: HeadersLike): IterableIterator<readonly [string, string | null]> {\n  if (!headers) return;\n\n  if (brand_privateNullableHeaders in headers) {\n    const { values, nulls } = headers;\n    yield* values.entries();\n    for (const name of nulls) {\n      yield [name, null];\n    }\n    return;\n  }\n\n  let shouldClear = false;\n  let iter: Iterable<readonly (HeaderValue | readonly HeaderValue[])[]>;\n  if (headers instanceof Headers) {\n    iter = headers.entries();\n  } else if (isReadonlyArray(headers)) {\n    iter = headers;\n  } else {\n    shouldClear = true;\n    iter = Object.entries(headers ?? {});\n  }\n  for (let row of iter) {\n    const name = row[0];\n    if (typeof name !== 'string') throw new TypeError('expected header name to be a string');\n    const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n    let didClear = false;\n    for (const value of values) {\n      if (value === undefined) continue;\n\n      // Objects keys always overwrite older headers, they never append.\n      // Yield a null to clear the header before adding the new values.\n      if (shouldClear && !didClear) {\n        didClear = true;\n        yield [name, null];\n      }\n      yield [name, value];\n    }\n  }\n}\n\nexport const buildHeaders = (newHeaders: HeadersLike[]): NullableHeaders => {\n  const targetHeaders = new Headers();\n  const nullHeaders = new Set<string>();\n  for (const headers of newHeaders) {\n    const seenHeaders = new Set<string>();\n    for (const [name, value] of iterateHeaders(headers)) {\n      const lowerName = name.toLowerCase();\n      if (!seenHeaders.has(lowerName)) {\n        targetHeaders.delete(name);\n        seenHeaders.add(lowerName);\n      }\n      if (value === null) {\n        targetHeaders.delete(name);\n        nullHeaders.add(lowerName);\n      } else {\n        targetHeaders.append(name, value);\n        nullHeaders.delete(lowerName);\n      }\n    }\n  }\n  return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\n\nexport const isEmptyHeaders = (headers: HeadersLike) => {\n  for (const _ of iterateHeaders(headers)) return false;\n  return true;\n};\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport { APIPromise } from '../../core/api-promise';\nimport { buildHeaders } from '../../internal/headers';\nimport { RequestOptions } from '../../internal/request-options';\n\nexport class Speech extends APIResource {\n  /**\n   * Generates audio from the input text.\n   *\n   * @example\n   * ```ts\n   * const speech = await client.audio.speech.create({\n   *   input: 'The quick brown fox jumped over the lazy dog',\n   *   model: 'playai-tts',\n   *   voice: 'Fritz-PlayAI',\n   * });\n   *\n   * const content = await speech.blob();\n   * console.log(content);\n   * ```\n   */\n  create(body: SpeechCreateParams, options?: RequestOptions): APIPromise<Response> {\n    return this._client.post('/openai/v1/audio/speech', {\n      body,\n      ...options,\n      headers: buildHeaders([{ Accept: 'audio/wav' }, options?.headers]),\n      __binaryResponse: true,\n    });\n  }\n}\n\nexport interface SpeechCreateParams {\n  /**\n   * The text to generate audio for.\n   */\n  input: string;\n\n  /**\n   * One of the [available TTS models](/docs/text-to-speech).\n   */\n  model: (string & {}) | 'playai-tts' | 'playai-tts-arabic';\n\n  /**\n   * The voice to use when generating the audio. List of voices can be found\n   * [here](/docs/text-to-speech).\n   */\n  voice: string;\n\n  /**\n   * The format of the generated audio. Supported formats are\n   * `flac, mp3, mulaw, ogg, wav`.\n   */\n  response_format?: 'flac' | 'mp3' | 'mulaw' | 'ogg' | 'wav';\n\n  /**\n   * The sample rate for generated audio\n   */\n  sample_rate?: 8000 | 16000 | 22050 | 24000 | 32000 | 44100 | 48000;\n\n  /**\n   * The speed of the generated audio.\n   */\n  speed?: number;\n}\n\nexport declare namespace Speech {\n  export { type SpeechCreateParams as SpeechCreateParams };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport { APIPromise } from '../../core/api-promise';\nimport { type Uploadable } from '../../core/uploads';\nimport { RequestOptions } from '../../internal/request-options';\nimport { multipartFormRequestOptions } from '../../internal/uploads';\n\nexport class Transcriptions extends APIResource {\n  /**\n   * Transcribes audio into the input language.\n   *\n   * @example\n   * ```ts\n   * const transcription =\n   *   await client.audio.transcriptions.create({\n   *     model: 'whisper-large-v3-turbo',\n   *   });\n   * ```\n   */\n  create(body: TranscriptionCreateParams, options?: RequestOptions): APIPromise<Transcription> {\n    return this._client.post(\n      '/openai/v1/audio/transcriptions',\n      multipartFormRequestOptions({ body, ...options }, this._client),\n    );\n  }\n}\n\n/**\n * Represents a transcription response returned by model, based on the provided\n * input.\n */\nexport interface Transcription {\n  /**\n   * The transcribed text.\n   */\n  text: string;\n}\n\nexport interface TranscriptionCreateParams {\n  /**\n   * ID of the model to use. `whisper-large-v3` and `whisper-large-v3-turbo` are\n   * currently available.\n   */\n  model: (string & {}) | 'whisper-large-v3' | 'whisper-large-v3-turbo';\n\n  /**\n   * The audio file object (not file name) to transcribe, in one of these formats:\n   * flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm. Either a file or a URL must\n   * be provided. Note that the file field is not supported in Batch API requests.\n   */\n  file?: Uploadable;\n\n  /**\n   * The language of the input audio. Supplying the input language in\n   * [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) format will\n   * improve accuracy and latency.\n   */\n  language?:\n    | (string & {})\n    | 'en'\n    | 'zh'\n    | 'de'\n    | 'es'\n    | 'ru'\n    | 'ko'\n    | 'fr'\n    | 'ja'\n    | 'pt'\n    | 'tr'\n    | 'pl'\n    | 'ca'\n    | 'nl'\n    | 'ar'\n    | 'sv'\n    | 'it'\n    | 'id'\n    | 'hi'\n    | 'fi'\n    | 'vi'\n    | 'he'\n    | 'uk'\n    | 'el'\n    | 'ms'\n    | 'cs'\n    | 'ro'\n    | 'da'\n    | 'hu'\n    | 'ta'\n    | 'no'\n    | 'th'\n    | 'ur'\n    | 'hr'\n    | 'bg'\n    | 'lt'\n    | 'la'\n    | 'mi'\n    | 'ml'\n    | 'cy'\n    | 'sk'\n    | 'te'\n    | 'fa'\n    | 'lv'\n    | 'bn'\n    | 'sr'\n    | 'az'\n    | 'sl'\n    | 'kn'\n    | 'et'\n    | 'mk'\n    | 'br'\n    | 'eu'\n    | 'is'\n    | 'hy'\n    | 'ne'\n    | 'mn'\n    | 'bs'\n    | 'kk'\n    | 'sq'\n    | 'sw'\n    | 'gl'\n    | 'mr'\n    | 'pa'\n    | 'si'\n    | 'km'\n    | 'sn'\n    | 'yo'\n    | 'so'\n    | 'af'\n    | 'oc'\n    | 'ka'\n    | 'be'\n    | 'tg'\n    | 'sd'\n    | 'gu'\n    | 'am'\n    | 'yi'\n    | 'lo'\n    | 'uz'\n    | 'fo'\n    | 'ht'\n    | 'ps'\n    | 'tk'\n    | 'nn'\n    | 'mt'\n    | 'sa'\n    | 'lb'\n    | 'my'\n    | 'bo'\n    | 'tl'\n    | 'mg'\n    | 'as'\n    | 'tt'\n    | 'haw'\n    | 'ln'\n    | 'ha'\n    | 'ba'\n    | 'jv'\n    | 'su'\n    | 'yue';\n\n  /**\n   * An optional text to guide the model's style or continue a previous audio\n   * segment. The [prompt](/docs/speech-text) should match the audio language.\n   */\n  prompt?: string;\n\n  /**\n   * The format of the transcript output, in one of these options: `json`, `text`, or\n   * `verbose_json`.\n   */\n  response_format?: 'json' | 'text' | 'verbose_json';\n\n  /**\n   * The sampling temperature, between 0 and 1. Higher values like 0.8 will make the\n   * output more random, while lower values like 0.2 will make it more focused and\n   * deterministic. If set to 0, the model will use\n   * [log probability](https://en.wikipedia.org/wiki/Log_probability) to\n   * automatically increase the temperature until certain thresholds are hit.\n   */\n  temperature?: number;\n\n  /**\n   * The timestamp granularities to populate for this transcription.\n   * `response_format` must be set `verbose_json` to use timestamp granularities.\n   * Either or both of these options are supported: `word`, or `segment`. Note: There\n   * is no additional latency for segment timestamps, but generating word timestamps\n   * incurs additional latency.\n   */\n  timestamp_granularities?: Array<'word' | 'segment'>;\n\n  /**\n   * The audio URL to translate/transcribe (supports Base64URL). Either a file or a\n   * URL must be provided. For Batch API requests, the URL field is required since\n   * the file field is not supported.\n   */\n  url?: string;\n}\n\nexport declare namespace Transcriptions {\n  export { type Transcription as Transcription, type TranscriptionCreateParams as TranscriptionCreateParams };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport { APIPromise } from '../../core/api-promise';\nimport { type Uploadable } from '../../core/uploads';\nimport { RequestOptions } from '../../internal/request-options';\nimport { multipartFormRequestOptions } from '../../internal/uploads';\n\nexport class Translations extends APIResource {\n  /**\n   * Translates audio into English.\n   *\n   * @example\n   * ```ts\n   * const translation = await client.audio.translations.create({\n   *   model: 'whisper-large-v3-turbo',\n   * });\n   * ```\n   */\n  create(body: TranslationCreateParams, options?: RequestOptions): APIPromise<Translation> {\n    return this._client.post(\n      '/openai/v1/audio/translations',\n      multipartFormRequestOptions({ body, ...options }, this._client),\n    );\n  }\n}\n\nexport interface Translation {\n  text: string;\n}\n\nexport interface TranslationCreateParams {\n  /**\n   * ID of the model to use. `whisper-large-v3` and `whisper-large-v3-turbo` are\n   * currently available.\n   */\n  model: (string & {}) | 'whisper-large-v3' | 'whisper-large-v3-turbo';\n\n  /**\n   * The audio file object (not file name) translate, in one of these formats: flac,\n   * mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.\n   */\n  file?: Uploadable;\n\n  /**\n   * An optional text to guide the model's style or continue a previous audio\n   * segment. The [prompt](/docs/guides/speech-to-text/prompting) should be in\n   * English.\n   */\n  prompt?: string;\n\n  /**\n   * The format of the transcript output, in one of these options: `json`, `text`, or\n   * `verbose_json`.\n   */\n  response_format?: 'json' | 'text' | 'verbose_json';\n\n  /**\n   * The sampling temperature, between 0 and 1. Higher values like 0.8 will make the\n   * output more random, while lower values like 0.2 will make it more focused and\n   * deterministic. If set to 0, the model will use\n   * [log probability](https://en.wikipedia.org/wiki/Log_probability) to\n   * automatically increase the temperature until certain thresholds are hit.\n   */\n  temperature?: number;\n\n  /**\n   * The audio URL to translate/transcribe (supports Base64URL). Either file or url\n   * must be provided. When using the Batch API only url is supported.\n   */\n  url?: string;\n}\n\nexport declare namespace Translations {\n  export { type Translation as Translation, type TranslationCreateParams as TranslationCreateParams };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as SpeechAPI from './speech';\nimport { Speech, SpeechCreateParams } from './speech';\nimport * as TranscriptionsAPI from './transcriptions';\nimport { Transcription, TranscriptionCreateParams, Transcriptions } from './transcriptions';\nimport * as TranslationsAPI from './translations';\nimport { Translation, TranslationCreateParams, Translations } from './translations';\n\nexport class Audio extends APIResource {\n  speech: SpeechAPI.Speech = new SpeechAPI.Speech(this._client);\n  transcriptions: TranscriptionsAPI.Transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n  translations: TranslationsAPI.Translations = new TranslationsAPI.Translations(this._client);\n}\n\nAudio.Speech = Speech;\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\n\nexport declare namespace Audio {\n  export { Speech as Speech, type SpeechCreateParams as SpeechCreateParams };\n\n  export {\n    Transcriptions as Transcriptions,\n    type Transcription as Transcription,\n    type TranscriptionCreateParams as TranscriptionCreateParams,\n  };\n\n  export {\n    Translations as Translations,\n    type Translation as Translation,\n    type TranslationCreateParams as TranslationCreateParams,\n  };\n}\n", "import { GroqError } from '../../core/error';\n\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved  = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims  = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar       = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str: string) {\n  return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\n\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\n\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) =>\n  function path(statics: readonly string[], ...params: readonly unknown[]): string {\n    // If there are no params, no processing is needed.\n    if (statics.length === 1) return statics[0]!;\n\n    let postPath = false;\n    const invalidSegments = [];\n    const path = statics.reduce((previousValue, currentValue, index) => {\n      if (/[?#]/.test(currentValue)) {\n        postPath = true;\n      }\n      const value = params[index];\n      let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n      if (\n        index !== params.length &&\n        (value == null ||\n          (typeof value === 'object' &&\n            // handle values from other realms\n            value.toString ===\n              Object.getPrototypeOf(Object.getPrototypeOf((value as any).hasOwnProperty ?? EMPTY) ?? EMPTY)\n                ?.toString))\n      ) {\n        encoded = value + '';\n        invalidSegments.push({\n          start: previousValue.length + currentValue.length,\n          length: encoded.length,\n          error: `Value of type ${Object.prototype.toString\n            .call(value)\n            .slice(8, -1)} is not a valid path parameter`,\n        });\n      }\n      return previousValue + currentValue + (index === params.length ? '' : encoded);\n    }, '');\n\n    const pathOnly = path.split(/[?#]/, 1)[0]!;\n    const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n    let match;\n\n    // Find all invalid segments\n    while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n      invalidSegments.push({\n        start: match.index,\n        length: match[0].length,\n        error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n      });\n    }\n\n    invalidSegments.sort((a, b) => a.start - b.start);\n\n    if (invalidSegments.length > 0) {\n      let lastEnd = 0;\n      const underline = invalidSegments.reduce((acc, segment) => {\n        const spaces = ' '.repeat(segment.start - lastEnd);\n        const arrows = '^'.repeat(segment.length);\n        lastEnd = segment.start + segment.length;\n        return acc + spaces + arrows;\n      }, '');\n\n      throw new GroqError(\n        `Path parameters result in path with invalid segments:\\n${invalidSegments\n          .map((e) => e.error)\n          .join('\\n')}\\n${path}\\n${underline}`,\n      );\n    }\n\n    return path;\n  };\n\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../core/resource';\nimport { APIPromise } from '../core/api-promise';\nimport { RequestOptions } from '../internal/request-options';\nimport { path } from '../internal/utils/path';\n\nexport class Batches extends APIResource {\n  /**\n   * Creates and executes a batch from an uploaded file of requests.\n   * [Learn more](/docs/batch).\n   */\n  create(body: BatchCreateParams, options?: RequestOptions): APIPromise<BatchCreateResponse> {\n    return this._client.post('/openai/v1/batches', { body, ...options });\n  }\n\n  /**\n   * Retrieves a batch.\n   */\n  retrieve(batchID: string, options?: RequestOptions): APIPromise<BatchRetrieveResponse> {\n    return this._client.get(path`/openai/v1/batches/${batchID}`, options);\n  }\n\n  /**\n   * List your organization's batches.\n   */\n  list(options?: RequestOptions): APIPromise<BatchListResponse> {\n    return this._client.get('/openai/v1/batches', options);\n  }\n\n  /**\n   * Cancels a batch.\n   */\n  cancel(batchID: string, options?: RequestOptions): APIPromise<BatchCancelResponse> {\n    return this._client.post(path`/openai/v1/batches/${batchID}/cancel`, options);\n  }\n}\n\nexport interface BatchCreateResponse {\n  id: string;\n\n  /**\n   * The time frame within which the batch should be processed.\n   */\n  completion_window: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch was created.\n   */\n  created_at: number;\n\n  /**\n   * The API endpoint used by the batch.\n   */\n  endpoint: string;\n\n  /**\n   * The ID of the input file for the batch.\n   */\n  input_file_id: string;\n\n  /**\n   * The object type, which is always `batch`.\n   */\n  object: 'batch';\n\n  /**\n   * The current status of the batch.\n   */\n  status:\n    | 'validating'\n    | 'failed'\n    | 'in_progress'\n    | 'finalizing'\n    | 'completed'\n    | 'expired'\n    | 'cancelling'\n    | 'cancelled';\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch was cancelled.\n   */\n  cancelled_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch started cancelling.\n   */\n  cancelling_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch was completed.\n   */\n  completed_at?: number;\n\n  /**\n   * The ID of the file containing the outputs of requests with errors.\n   */\n  error_file_id?: string;\n\n  errors?: BatchCreateResponse.Errors;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch expired.\n   */\n  expired_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch will expire.\n   */\n  expires_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch failed.\n   */\n  failed_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch started finalizing.\n   */\n  finalizing_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch started processing.\n   */\n  in_progress_at?: number;\n\n  /**\n   * Set of key-value pairs that can be attached to an object. This can be useful for\n   * storing additional information about the object in a structured format.\n   */\n  metadata?: unknown | null;\n\n  /**\n   * The ID of the file containing the outputs of successfully executed requests.\n   */\n  output_file_id?: string;\n\n  /**\n   * The request counts for different statuses within the batch.\n   */\n  request_counts?: BatchCreateResponse.RequestCounts;\n}\n\nexport namespace BatchCreateResponse {\n  export interface Errors {\n    data?: Array<Errors.Data>;\n\n    /**\n     * The object type, which is always `list`.\n     */\n    object?: string;\n  }\n\n  export namespace Errors {\n    export interface Data {\n      /**\n       * An error code identifying the error type.\n       */\n      code?: string;\n\n      /**\n       * The line number of the input file where the error occurred, if applicable.\n       */\n      line?: number | null;\n\n      /**\n       * A human-readable message providing more details about the error.\n       */\n      message?: string;\n\n      /**\n       * The name of the parameter that caused the error, if applicable.\n       */\n      param?: string | null;\n    }\n  }\n\n  /**\n   * The request counts for different statuses within the batch.\n   */\n  export interface RequestCounts {\n    /**\n     * Number of requests that have been completed successfully.\n     */\n    completed: number;\n\n    /**\n     * Number of requests that have failed.\n     */\n    failed: number;\n\n    /**\n     * Total number of requests in the batch.\n     */\n    total: number;\n  }\n}\n\nexport interface BatchRetrieveResponse {\n  id: string;\n\n  /**\n   * The time frame within which the batch should be processed.\n   */\n  completion_window: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch was created.\n   */\n  created_at: number;\n\n  /**\n   * The API endpoint used by the batch.\n   */\n  endpoint: string;\n\n  /**\n   * The ID of the input file for the batch.\n   */\n  input_file_id: string;\n\n  /**\n   * The object type, which is always `batch`.\n   */\n  object: 'batch';\n\n  /**\n   * The current status of the batch.\n   */\n  status:\n    | 'validating'\n    | 'failed'\n    | 'in_progress'\n    | 'finalizing'\n    | 'completed'\n    | 'expired'\n    | 'cancelling'\n    | 'cancelled';\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch was cancelled.\n   */\n  cancelled_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch started cancelling.\n   */\n  cancelling_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch was completed.\n   */\n  completed_at?: number;\n\n  /**\n   * The ID of the file containing the outputs of requests with errors.\n   */\n  error_file_id?: string;\n\n  errors?: BatchRetrieveResponse.Errors;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch expired.\n   */\n  expired_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch will expire.\n   */\n  expires_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch failed.\n   */\n  failed_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch started finalizing.\n   */\n  finalizing_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch started processing.\n   */\n  in_progress_at?: number;\n\n  /**\n   * Set of key-value pairs that can be attached to an object. This can be useful for\n   * storing additional information about the object in a structured format.\n   */\n  metadata?: unknown | null;\n\n  /**\n   * The ID of the file containing the outputs of successfully executed requests.\n   */\n  output_file_id?: string;\n\n  /**\n   * The request counts for different statuses within the batch.\n   */\n  request_counts?: BatchRetrieveResponse.RequestCounts;\n}\n\nexport namespace BatchRetrieveResponse {\n  export interface Errors {\n    data?: Array<Errors.Data>;\n\n    /**\n     * The object type, which is always `list`.\n     */\n    object?: string;\n  }\n\n  export namespace Errors {\n    export interface Data {\n      /**\n       * An error code identifying the error type.\n       */\n      code?: string;\n\n      /**\n       * The line number of the input file where the error occurred, if applicable.\n       */\n      line?: number | null;\n\n      /**\n       * A human-readable message providing more details about the error.\n       */\n      message?: string;\n\n      /**\n       * The name of the parameter that caused the error, if applicable.\n       */\n      param?: string | null;\n    }\n  }\n\n  /**\n   * The request counts for different statuses within the batch.\n   */\n  export interface RequestCounts {\n    /**\n     * Number of requests that have been completed successfully.\n     */\n    completed: number;\n\n    /**\n     * Number of requests that have failed.\n     */\n    failed: number;\n\n    /**\n     * Total number of requests in the batch.\n     */\n    total: number;\n  }\n}\n\nexport interface BatchListResponse {\n  data: Array<BatchListResponse.Data>;\n\n  object: 'list';\n}\n\nexport namespace BatchListResponse {\n  export interface Data {\n    id: string;\n\n    /**\n     * The time frame within which the batch should be processed.\n     */\n    completion_window: string;\n\n    /**\n     * The Unix timestamp (in seconds) for when the batch was created.\n     */\n    created_at: number;\n\n    /**\n     * The API endpoint used by the batch.\n     */\n    endpoint: string;\n\n    /**\n     * The ID of the input file for the batch.\n     */\n    input_file_id: string;\n\n    /**\n     * The object type, which is always `batch`.\n     */\n    object: 'batch';\n\n    /**\n     * The current status of the batch.\n     */\n    status:\n      | 'validating'\n      | 'failed'\n      | 'in_progress'\n      | 'finalizing'\n      | 'completed'\n      | 'expired'\n      | 'cancelling'\n      | 'cancelled';\n\n    /**\n     * The Unix timestamp (in seconds) for when the batch was cancelled.\n     */\n    cancelled_at?: number;\n\n    /**\n     * The Unix timestamp (in seconds) for when the batch started cancelling.\n     */\n    cancelling_at?: number;\n\n    /**\n     * The Unix timestamp (in seconds) for when the batch was completed.\n     */\n    completed_at?: number;\n\n    /**\n     * The ID of the file containing the outputs of requests with errors.\n     */\n    error_file_id?: string;\n\n    errors?: Data.Errors;\n\n    /**\n     * The Unix timestamp (in seconds) for when the batch expired.\n     */\n    expired_at?: number;\n\n    /**\n     * The Unix timestamp (in seconds) for when the batch will expire.\n     */\n    expires_at?: number;\n\n    /**\n     * The Unix timestamp (in seconds) for when the batch failed.\n     */\n    failed_at?: number;\n\n    /**\n     * The Unix timestamp (in seconds) for when the batch started finalizing.\n     */\n    finalizing_at?: number;\n\n    /**\n     * The Unix timestamp (in seconds) for when the batch started processing.\n     */\n    in_progress_at?: number;\n\n    /**\n     * Set of key-value pairs that can be attached to an object. This can be useful for\n     * storing additional information about the object in a structured format.\n     */\n    metadata?: unknown | null;\n\n    /**\n     * The ID of the file containing the outputs of successfully executed requests.\n     */\n    output_file_id?: string;\n\n    /**\n     * The request counts for different statuses within the batch.\n     */\n    request_counts?: Data.RequestCounts;\n  }\n\n  export namespace Data {\n    export interface Errors {\n      data?: Array<Errors.Data>;\n\n      /**\n       * The object type, which is always `list`.\n       */\n      object?: string;\n    }\n\n    export namespace Errors {\n      export interface Data {\n        /**\n         * An error code identifying the error type.\n         */\n        code?: string;\n\n        /**\n         * The line number of the input file where the error occurred, if applicable.\n         */\n        line?: number | null;\n\n        /**\n         * A human-readable message providing more details about the error.\n         */\n        message?: string;\n\n        /**\n         * The name of the parameter that caused the error, if applicable.\n         */\n        param?: string | null;\n      }\n    }\n\n    /**\n     * The request counts for different statuses within the batch.\n     */\n    export interface RequestCounts {\n      /**\n       * Number of requests that have been completed successfully.\n       */\n      completed: number;\n\n      /**\n       * Number of requests that have failed.\n       */\n      failed: number;\n\n      /**\n       * Total number of requests in the batch.\n       */\n      total: number;\n    }\n  }\n}\n\nexport interface BatchCancelResponse {\n  id: string;\n\n  /**\n   * The time frame within which the batch should be processed.\n   */\n  completion_window: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch was created.\n   */\n  created_at: number;\n\n  /**\n   * The API endpoint used by the batch.\n   */\n  endpoint: string;\n\n  /**\n   * The ID of the input file for the batch.\n   */\n  input_file_id: string;\n\n  /**\n   * The object type, which is always `batch`.\n   */\n  object: 'batch';\n\n  /**\n   * The current status of the batch.\n   */\n  status:\n    | 'validating'\n    | 'failed'\n    | 'in_progress'\n    | 'finalizing'\n    | 'completed'\n    | 'expired'\n    | 'cancelling'\n    | 'cancelled';\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch was cancelled.\n   */\n  cancelled_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch started cancelling.\n   */\n  cancelling_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch was completed.\n   */\n  completed_at?: number;\n\n  /**\n   * The ID of the file containing the outputs of requests with errors.\n   */\n  error_file_id?: string;\n\n  errors?: BatchCancelResponse.Errors;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch expired.\n   */\n  expired_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch will expire.\n   */\n  expires_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch failed.\n   */\n  failed_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch started finalizing.\n   */\n  finalizing_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch started processing.\n   */\n  in_progress_at?: number;\n\n  /**\n   * Set of key-value pairs that can be attached to an object. This can be useful for\n   * storing additional information about the object in a structured format.\n   */\n  metadata?: unknown | null;\n\n  /**\n   * The ID of the file containing the outputs of successfully executed requests.\n   */\n  output_file_id?: string;\n\n  /**\n   * The request counts for different statuses within the batch.\n   */\n  request_counts?: BatchCancelResponse.RequestCounts;\n}\n\nexport namespace BatchCancelResponse {\n  export interface Errors {\n    data?: Array<Errors.Data>;\n\n    /**\n     * The object type, which is always `list`.\n     */\n    object?: string;\n  }\n\n  export namespace Errors {\n    export interface Data {\n      /**\n       * An error code identifying the error type.\n       */\n      code?: string;\n\n      /**\n       * The line number of the input file where the error occurred, if applicable.\n       */\n      line?: number | null;\n\n      /**\n       * A human-readable message providing more details about the error.\n       */\n      message?: string;\n\n      /**\n       * The name of the parameter that caused the error, if applicable.\n       */\n      param?: string | null;\n    }\n  }\n\n  /**\n   * The request counts for different statuses within the batch.\n   */\n  export interface RequestCounts {\n    /**\n     * Number of requests that have been completed successfully.\n     */\n    completed: number;\n\n    /**\n     * Number of requests that have failed.\n     */\n    failed: number;\n\n    /**\n     * Total number of requests in the batch.\n     */\n    total: number;\n  }\n}\n\nexport interface BatchCreateParams {\n  /**\n   * The time frame within which the batch should be processed. Durations from `24h`\n   * to `7d` are supported.\n   */\n  completion_window: string;\n\n  /**\n   * The endpoint to be used for all requests in the batch. Currently\n   * `/v1/chat/completions` is supported.\n   */\n  endpoint: '/v1/chat/completions';\n\n  /**\n   * The ID of an uploaded file that contains requests for the new batch.\n   *\n   * See [upload file](/docs/api-reference#files-upload) for how to upload a file.\n   *\n   * Your input file must be formatted as a [JSONL file](/docs/batch), and must be\n   * uploaded with the purpose `batch`. The file can be up to 100 MB in size.\n   */\n  input_file_id: string;\n\n  /**\n   * Optional custom metadata for the batch.\n   */\n  metadata?: { [key: string]: string } | null;\n}\n\nexport declare namespace Batches {\n  export {\n    type BatchCreateResponse as BatchCreateResponse,\n    type BatchRetrieveResponse as BatchRetrieveResponse,\n    type BatchListResponse as BatchListResponse,\n    type BatchCancelResponse as BatchCancelResponse,\n    type BatchCreateParams as BatchCreateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as ChatCompletionsAPI from './completions';\nimport * as CompletionsAPI from '../completions';\nimport * as Shared from '../shared';\nimport { APIPromise } from '../../core/api-promise';\nimport { Stream } from '../../core/streaming';\nimport { RequestOptions } from '../../internal/request-options';\n\nexport class Completions extends APIResource {\n  /**\n   * Creates a model response for the given chat conversation.\n   *\n   * @example\n   * ```ts\n   * const chatCompletion = await client.chat.completions.create(\n   *   {\n   *     messages: [{ content: 'string', role: 'system' }],\n   *     model: 'meta-llama/llama-4-scout-17b-16e-instruct',\n   *   },\n   * );\n   * ```\n   */\n  create(body: ChatCompletionCreateParamsNonStreaming, options?: RequestOptions): APIPromise<ChatCompletion>;\n  create(\n    body: ChatCompletionCreateParamsStreaming,\n    options?: RequestOptions,\n  ): APIPromise<Stream<ChatCompletionChunk>>;\n  create(\n    body: ChatCompletionCreateParamsBase,\n    options?: RequestOptions,\n  ): APIPromise<Stream<ChatCompletionChunk> | ChatCompletion>;\n  create(\n    body: ChatCompletionCreateParams,\n    options?: RequestOptions,\n  ): APIPromise<ChatCompletion> | APIPromise<Stream<ChatCompletionChunk>> {\n    return this._client.post('/openai/v1/chat/completions', {\n      body,\n      ...options,\n      stream: body.stream ?? false,\n    }) as APIPromise<ChatCompletion> | APIPromise<Stream<ChatCompletionChunk>>;\n  }\n}\n\n/**\n * Represents a chat completion response returned by model, based on the provided\n * input.\n */\nexport interface ChatCompletion {\n  /**\n   * A unique identifier for the chat completion.\n   */\n  id: string;\n\n  /**\n   * A list of chat completion choices. Can be more than one if `n` is greater\n   * than 1.\n   */\n  choices: Array<ChatCompletion.Choice>;\n\n  /**\n   * The Unix timestamp (in seconds) of when the chat completion was created.\n   */\n  created: number;\n\n  /**\n   * The model used for the chat completion.\n   */\n  model: string;\n\n  /**\n   * The object type, which is always `chat.completion`.\n   */\n  object: 'chat.completion';\n\n  /**\n   * List of discovered MCP tools from connected servers.\n   */\n  mcp_list_tools?: Array<ChatCompletion.McpListTool> | null;\n\n  /**\n   * The service tier used for the request.\n   */\n  service_tier?: 'auto' | 'on_demand' | 'flex' | 'performance' | null;\n\n  /**\n   * This fingerprint represents the backend configuration that the model runs with.\n   *\n   * Can be used in conjunction with the `seed` request parameter to understand when\n   * backend changes have been made that might impact determinism.\n   */\n  system_fingerprint?: string;\n\n  /**\n   * Usage statistics for the completion request.\n   */\n  usage?: CompletionsAPI.CompletionUsage;\n\n  /**\n   * Detailed usage breakdown by model when multiple models are used in the request\n   * for compound AI systems.\n   */\n  usage_breakdown?: ChatCompletion.UsageBreakdown;\n\n  /**\n   * Groq-specific metadata for non-streaming chat completion responses.\n   */\n  x_groq?: ChatCompletion.XGroq;\n}\n\nexport namespace ChatCompletion {\n  export interface Choice {\n    /**\n     * The reason the model stopped generating tokens. This will be `stop` if the model\n     * hit a natural stop point or a provided stop sequence, `length` if the maximum\n     * number of tokens specified in the request was reached, `tool_calls` if the model\n     * called a tool, or `function_call` (deprecated) if the model called a function.\n     */\n    finish_reason: 'stop' | 'length' | 'tool_calls' | 'function_call';\n\n    /**\n     * The index of the choice in the list of choices.\n     */\n    index: number;\n\n    /**\n     * Log probability information for the choice.\n     */\n    logprobs: Choice.Logprobs | null;\n\n    /**\n     * A chat completion message generated by the model.\n     */\n    message: ChatCompletionsAPI.ChatCompletionMessage;\n  }\n\n  export namespace Choice {\n    /**\n     * Log probability information for the choice.\n     */\n    export interface Logprobs {\n      /**\n       * A list of message content tokens with log probability information.\n       */\n      content: Array<ChatCompletionsAPI.ChatCompletionTokenLogprob> | null;\n    }\n  }\n\n  export interface McpListTool {\n    /**\n     * Unique identifier for this tool list response.\n     */\n    id?: string;\n\n    /**\n     * Human-readable label for the MCP server.\n     */\n    server_label?: string;\n\n    /**\n     * Array of discovered tools from the server.\n     */\n    tools?: Array<McpListTool.Tool>;\n\n    /**\n     * The type identifier.\n     */\n    type?: string;\n  }\n\n  export namespace McpListTool {\n    export interface Tool {\n      /**\n       * Additional metadata for the tool.\n       */\n      annotations?: unknown;\n\n      /**\n       * Description of what the tool does.\n       */\n      description?: string;\n\n      /**\n       * JSON Schema describing the tool's input parameters.\n       */\n      input_schema?: { [key: string]: unknown };\n\n      /**\n       * The name of the tool.\n       */\n      name?: string;\n    }\n  }\n\n  /**\n   * Detailed usage breakdown by model when multiple models are used in the request\n   * for compound AI systems.\n   */\n  export interface UsageBreakdown {\n    /**\n     * List of models used in the request and their individual usage statistics\n     */\n    models: Array<UsageBreakdown.Model>;\n  }\n\n  export namespace UsageBreakdown {\n    export interface Model {\n      /**\n       * The name/identifier of the model used\n       */\n      model: string;\n\n      /**\n       * Usage statistics for the completion request.\n       */\n      usage: CompletionsAPI.CompletionUsage;\n    }\n  }\n\n  /**\n   * Groq-specific metadata for non-streaming chat completion responses.\n   */\n  export interface XGroq {\n    /**\n     * A groq request ID which can be used to refer to a specific request to groq\n     * support.\n     */\n    id: string;\n\n    /**\n     * Debug information including input and output token IDs and strings. Only present\n     * when debug=true in the request.\n     */\n    debug?: XGroq.Debug | null;\n\n    /**\n     * The seed used for the request. See the seed property on\n     * CreateChatCompletionRequest for more details.\n     */\n    seed?: number | null;\n\n    /**\n     * Additional Groq-specific usage metrics (hardware cache statistics).\n     */\n    usage?: XGroq.Usage | null;\n  }\n\n  export namespace XGroq {\n    /**\n     * Debug information including input and output token IDs and strings. Only present\n     * when debug=true in the request.\n     */\n    export interface Debug {\n      /**\n       * Token IDs for the input.\n       */\n      input_token_ids?: Array<number>;\n\n      /**\n       * Token strings for the input.\n       */\n      input_tokens?: Array<string>;\n\n      /**\n       * Token IDs for the output.\n       */\n      output_token_ids?: Array<number>;\n\n      /**\n       * Token strings for the output.\n       */\n      output_tokens?: Array<string>;\n    }\n\n    /**\n     * Additional Groq-specific usage metrics (hardware cache statistics).\n     */\n    export interface Usage {\n      /**\n       * Number of tokens served from DRAM cache.\n       */\n      dram_cached_tokens?: number;\n\n      /**\n       * Number of tokens served from SRAM cache.\n       */\n      sram_cached_tokens?: number;\n    }\n  }\n}\n\nexport interface ChatCompletionAssistantMessageParam {\n  /**\n   * The role of the messages author, in this case `assistant`.\n   */\n  role: 'assistant';\n\n  /**\n   * The contents of the assistant message. Required unless `tool_calls` or\n   * `function_call` is specified.\n   */\n  content?: string | Array<ChatCompletionContentPartText> | null;\n\n  /**\n   * @deprecated Deprecated and replaced by `tool_calls`. The name and arguments of a\n   * function that should be called, as generated by the model.\n   */\n  function_call?: ChatCompletionAssistantMessageParam.FunctionCall;\n\n  /**\n   * An optional name for the participant. Provides the model information to\n   * differentiate between participants of the same role.\n   */\n  name?: string;\n\n  /**\n   * The reasoning output by the assistant if reasoning_format was set to 'parsed'.\n   * This field is supported on\n   * [models that support reasoning](https://console.groq.com/docs/reasoning).\n   */\n  reasoning?: string | null;\n\n  /**\n   * The tool calls generated by the model, such as function calls.\n   */\n  tool_calls?: Array<ChatCompletionMessageToolCall>;\n}\n\nexport namespace ChatCompletionAssistantMessageParam {\n  /**\n   * @deprecated Deprecated and replaced by `tool_calls`. The name and arguments of a\n   * function that should be called, as generated by the model.\n   */\n  export interface FunctionCall {\n    /**\n     * The arguments to call the function with, as generated by the model in JSON\n     * format. Note that the model does not always generate valid JSON, and may\n     * hallucinate parameters not defined by your function schema. Validate the\n     * arguments in your code before calling your function.\n     */\n    arguments?: string;\n\n    /**\n     * The name of the function to call.\n     */\n    name?: string;\n  }\n}\n\n/**\n * Represents a streamed chunk of a chat completion response returned by model,\n * based on the provided input.\n */\nexport interface ChatCompletionChunk {\n  /**\n   * A unique identifier for the chat completion. Each chunk has the same ID.\n   */\n  id: string;\n\n  /**\n   * A list of chat completion choices. Can contain more than one elements if `n` is\n   * greater than 1.\n   */\n  choices: Array<ChatCompletionChunk.Choice>;\n\n  /**\n   * The Unix timestamp (in seconds) of when the chat completion was created. Each\n   * chunk has the same timestamp.\n   */\n  created: number;\n\n  /**\n   * The model to generate the completion.\n   */\n  model: string;\n\n  /**\n   * The object type, which is always `chat.completion.chunk`.\n   */\n  object: 'chat.completion.chunk';\n\n  /**\n   * This fingerprint represents the backend configuration that the model runs with.\n   * Can be used in conjunction with the `seed` request parameter to understand when\n   * backend changes have been made that might impact determinism.\n   */\n  system_fingerprint?: string;\n\n  /**\n   * Groq-specific metadata for streaming responses. Different fields appear in\n   * different chunks.\n   */\n  x_groq?: ChatCompletionChunk.XGroq;\n}\n\nexport namespace ChatCompletionChunk {\n  export interface Choice {\n    /**\n     * A chat completion delta generated by streamed model responses.\n     */\n    delta: Choice.Delta;\n\n    /**\n     * The reason the model stopped generating tokens. This will be `stop` if the model\n     * hit a natural stop point or a provided stop sequence, `length` if the maximum\n     * number of tokens specified in the request was reached, `tool_calls` if the model\n     * called a tool, or `function_call` (deprecated) if the model called a function.\n     */\n    finish_reason: 'stop' | 'length' | 'tool_calls' | 'function_call' | null;\n\n    /**\n     * The index of the choice in the list of choices.\n     */\n    index: number;\n\n    /**\n     * Log probability information for the choice.\n     */\n    logprobs?: Choice.Logprobs | null;\n  }\n\n  export namespace Choice {\n    /**\n     * A chat completion delta generated by streamed model responses.\n     */\n    export interface Delta {\n      /**\n       * A list of annotations providing citations and references for the content in the\n       * message.\n       */\n      annotations?: Array<Delta.Annotation>;\n\n      /**\n       * The contents of the chunk message.\n       */\n      content?: string | null;\n\n      /**\n       * A list of tools that were executed during the chat completion for compound AI\n       * systems.\n       */\n      executed_tools?: Array<Delta.ExecutedTool>;\n\n      /**\n       * @deprecated Deprecated and replaced by `tool_calls`. The name and arguments of a\n       * function that should be called, as generated by the model.\n       */\n      function_call?: Delta.FunctionCall;\n\n      /**\n       * The model's reasoning for a response. Only available for\n       * [models that support reasoning](https://console.groq.com/docs/reasoning) when\n       * request parameter reasoning_format has value `parsed`.\n       */\n      reasoning?: string | null;\n\n      /**\n       * The role of the author of this message.\n       */\n      role?: 'system' | 'user' | 'assistant' | 'tool';\n\n      tool_calls?: Array<Delta.ToolCall>;\n    }\n\n    export namespace Delta {\n      /**\n       * An annotation that provides citations or references for content in a message.\n       */\n      export interface Annotation {\n        /**\n         * The type of annotation.\n         */\n        type: 'document_citation' | 'function_citation';\n\n        /**\n         * A citation referencing a specific document that was provided in the request.\n         */\n        document_citation?: Annotation.DocumentCitation;\n\n        /**\n         * A citation referencing the result of a function or tool call.\n         */\n        function_citation?: Annotation.FunctionCitation;\n      }\n\n      export namespace Annotation {\n        /**\n         * A citation referencing a specific document that was provided in the request.\n         */\n        export interface DocumentCitation {\n          /**\n           * The ID of the document being cited, corresponding to a document provided in the\n           * request.\n           */\n          document_id: string;\n\n          /**\n           * The character index in the message content where this citation ends.\n           */\n          end_index: number;\n\n          /**\n           * The character index in the message content where this citation begins.\n           */\n          start_index: number;\n        }\n\n        /**\n         * A citation referencing the result of a function or tool call.\n         */\n        export interface FunctionCitation {\n          /**\n           * The character index in the message content where this citation ends.\n           */\n          end_index: number;\n\n          /**\n           * The character index in the message content where this citation begins.\n           */\n          start_index: number;\n\n          /**\n           * The ID of the tool call being cited, corresponding to a tool call made during\n           * the conversation.\n           */\n          tool_call_id: string;\n        }\n      }\n\n      export interface ExecutedTool {\n        /**\n         * The arguments passed to the tool in JSON format.\n         */\n        arguments: string;\n\n        /**\n         * The index of the executed tool.\n         */\n        index: number;\n\n        /**\n         * The type of tool that was executed.\n         */\n        type: string;\n\n        /**\n         * Array of browser results\n         */\n        browser_results?: Array<ExecutedTool.BrowserResult>;\n\n        /**\n         * Array of code execution results\n         */\n        code_results?: Array<ExecutedTool.CodeResult>;\n\n        /**\n         * The output returned by the tool.\n         */\n        output?: string | null;\n\n        /**\n         * The search results returned by the tool, if applicable.\n         */\n        search_results?: ExecutedTool.SearchResults | null;\n      }\n\n      export namespace ExecutedTool {\n        export interface BrowserResult {\n          /**\n           * The title of the browser window\n           */\n          title: string;\n\n          /**\n           * The URL of the browser window\n           */\n          url: string;\n\n          /**\n           * The content of the browser result\n           */\n          content?: string;\n\n          /**\n           * The live view URL for the browser window\n           */\n          live_view_url?: string;\n        }\n\n        export interface CodeResult {\n          chart?: CodeResult.Chart;\n\n          /**\n           * Array of charts from a superchart\n           */\n          charts?: Array<CodeResult.Chart>;\n\n          /**\n           * Base64 encoded PNG image output from code execution\n           */\n          png?: string;\n\n          /**\n           * The text version of the code execution result\n           */\n          text?: string;\n        }\n\n        export namespace CodeResult {\n          export interface Chart {\n            /**\n             * The chart elements (data series, points, etc.)\n             */\n            elements: Array<Chart.Element>;\n\n            /**\n             * The type of chart\n             */\n            type: 'bar' | 'box_and_whisker' | 'line' | 'pie' | 'scatter' | 'superchart' | 'unknown';\n\n            /**\n             * The title of the chart\n             */\n            title?: string;\n\n            /**\n             * The label for the x-axis\n             */\n            x_label?: string;\n\n            /**\n             * The scale type for the x-axis\n             */\n            x_scale?: string;\n\n            /**\n             * The labels for the x-axis ticks\n             */\n            x_tick_labels?: Array<string>;\n\n            /**\n             * The tick values for the x-axis\n             */\n            x_ticks?: Array<number>;\n\n            /**\n             * The unit for the x-axis\n             */\n            x_unit?: string;\n\n            /**\n             * The label for the y-axis\n             */\n            y_label?: string;\n\n            /**\n             * The scale type for the y-axis\n             */\n            y_scale?: string;\n\n            /**\n             * The labels for the y-axis ticks\n             */\n            y_tick_labels?: Array<string>;\n\n            /**\n             * The tick values for the y-axis\n             */\n            y_ticks?: Array<number>;\n\n            /**\n             * The unit for the y-axis\n             */\n            y_unit?: string;\n          }\n\n          export namespace Chart {\n            export interface Element {\n              /**\n               * The label for this chart element\n               */\n              label: string;\n\n              /**\n               * The angle for this element\n               */\n              angle?: number;\n\n              /**\n               * The first quartile value for this element\n               */\n              first_quartile?: number;\n\n              /**\n               * The group this element belongs to\n               */\n              group?: string;\n\n              max?: number;\n\n              /**\n               * The median value for this element\n               */\n              median?: number;\n\n              /**\n               * The minimum value for this element\n               */\n              min?: number;\n\n              /**\n               * The outliers for this element\n               */\n              outliers?: Array<number>;\n\n              /**\n               * The points for this element\n               */\n              points?: Array<Array<number>>;\n\n              /**\n               * The radius for this element\n               */\n              radius?: number;\n\n              /**\n               * The third quartile value for this element\n               */\n              third_quartile?: number;\n\n              /**\n               * The value for this element\n               */\n              value?: number;\n            }\n          }\n\n          export interface Chart {\n            /**\n             * The chart elements (data series, points, etc.)\n             */\n            elements: Array<Chart.Element>;\n\n            /**\n             * The type of chart\n             */\n            type: 'bar' | 'box_and_whisker' | 'line' | 'pie' | 'scatter' | 'superchart' | 'unknown';\n\n            /**\n             * The title of the chart\n             */\n            title?: string;\n\n            /**\n             * The label for the x-axis\n             */\n            x_label?: string;\n\n            /**\n             * The scale type for the x-axis\n             */\n            x_scale?: string;\n\n            /**\n             * The labels for the x-axis ticks\n             */\n            x_tick_labels?: Array<string>;\n\n            /**\n             * The tick values for the x-axis\n             */\n            x_ticks?: Array<number>;\n\n            /**\n             * The unit for the x-axis\n             */\n            x_unit?: string;\n\n            /**\n             * The label for the y-axis\n             */\n            y_label?: string;\n\n            /**\n             * The scale type for the y-axis\n             */\n            y_scale?: string;\n\n            /**\n             * The labels for the y-axis ticks\n             */\n            y_tick_labels?: Array<string>;\n\n            /**\n             * The tick values for the y-axis\n             */\n            y_ticks?: Array<number>;\n\n            /**\n             * The unit for the y-axis\n             */\n            y_unit?: string;\n          }\n\n          export namespace Chart {\n            export interface Element {\n              /**\n               * The label for this chart element\n               */\n              label: string;\n\n              /**\n               * The angle for this element\n               */\n              angle?: number;\n\n              /**\n               * The first quartile value for this element\n               */\n              first_quartile?: number;\n\n              /**\n               * The group this element belongs to\n               */\n              group?: string;\n\n              max?: number;\n\n              /**\n               * The median value for this element\n               */\n              median?: number;\n\n              /**\n               * The minimum value for this element\n               */\n              min?: number;\n\n              /**\n               * The outliers for this element\n               */\n              outliers?: Array<number>;\n\n              /**\n               * The points for this element\n               */\n              points?: Array<Array<number>>;\n\n              /**\n               * The radius for this element\n               */\n              radius?: number;\n\n              /**\n               * The third quartile value for this element\n               */\n              third_quartile?: number;\n\n              /**\n               * The value for this element\n               */\n              value?: number;\n            }\n          }\n        }\n\n        /**\n         * The search results returned by the tool, if applicable.\n         */\n        export interface SearchResults {\n          /**\n           * List of image URLs returned by the search\n           */\n          images?: Array<string>;\n\n          /**\n           * List of search results\n           */\n          results?: Array<SearchResults.Result>;\n        }\n\n        export namespace SearchResults {\n          export interface Result {\n            /**\n             * The content of the search result\n             */\n            content?: string;\n\n            /**\n             * The relevance score of the search result\n             */\n            score?: number;\n\n            /**\n             * The title of the search result\n             */\n            title?: string;\n\n            /**\n             * The URL of the search result\n             */\n            url?: string;\n          }\n        }\n      }\n\n      /**\n       * @deprecated Deprecated and replaced by `tool_calls`. The name and arguments of a\n       * function that should be called, as generated by the model.\n       */\n      export interface FunctionCall {\n        /**\n         * The arguments to call the function with, as generated by the model in JSON\n         * format. Note that the model does not always generate valid JSON, and may\n         * hallucinate parameters not defined by your function schema. Validate the\n         * arguments in your code before calling your function.\n         */\n        arguments?: string;\n\n        /**\n         * The name of the function to call.\n         */\n        name?: string;\n      }\n\n      export interface ToolCall {\n        index: number;\n\n        /**\n         * The ID of the tool call.\n         */\n        id?: string;\n\n        function?: ToolCall.Function;\n\n        /**\n         * The type of the tool. Currently, only `function` is supported.\n         */\n        type?: 'function';\n      }\n\n      export namespace ToolCall {\n        export interface Function {\n          /**\n           * The arguments to call the function with, as generated by the model in JSON\n           * format. Note that the model does not always generate valid JSON, and may\n           * hallucinate parameters not defined by your function schema. Validate the\n           * arguments in your code before calling your function.\n           */\n          arguments?: string;\n\n          /**\n           * The name of the function to call.\n           */\n          name?: string;\n        }\n      }\n    }\n\n    /**\n     * Log probability information for the choice.\n     */\n    export interface Logprobs {\n      /**\n       * A list of message content tokens with log probability information.\n       */\n      content: Array<ChatCompletionsAPI.ChatCompletionTokenLogprob> | null;\n    }\n  }\n\n  /**\n   * Groq-specific metadata for streaming responses. Different fields appear in\n   * different chunks.\n   */\n  export interface XGroq {\n    /**\n     * A groq request ID which can be used to refer to a specific request to groq\n     * support. Sent only in the first and final chunk.\n     */\n    id?: string | null;\n\n    /**\n     * Debug information including input and output token IDs and strings. Only present\n     * when debug=true in the request.\n     */\n    debug?: XGroq.Debug | null;\n\n    /**\n     * An error string indicating why a stream was stopped early.\n     */\n    error?: string | null;\n\n    /**\n     * The seed used for the request. Sent in the final chunk.\n     */\n    seed?: number | null;\n\n    /**\n     * Usage statistics for the completion request.\n     */\n    usage?: CompletionsAPI.CompletionUsage | null;\n\n    /**\n     * Usage statistics for compound AI completion requests.\n     */\n    usage_breakdown?: XGroq.UsageBreakdown | null;\n  }\n\n  export namespace XGroq {\n    /**\n     * Debug information including input and output token IDs and strings. Only present\n     * when debug=true in the request.\n     */\n    export interface Debug {\n      /**\n       * Token IDs for the input.\n       */\n      input_token_ids?: Array<number>;\n\n      /**\n       * Token strings for the input.\n       */\n      input_tokens?: Array<string>;\n\n      /**\n       * Token IDs for the output.\n       */\n      output_token_ids?: Array<number>;\n\n      /**\n       * Token strings for the output.\n       */\n      output_tokens?: Array<string>;\n    }\n\n    /**\n     * Usage statistics for compound AI completion requests.\n     */\n    export interface UsageBreakdown {\n      /**\n       * List of models used in the request and their individual usage statistics\n       */\n      models: Array<UsageBreakdown.Model>;\n    }\n\n    export namespace UsageBreakdown {\n      export interface Model {\n        /**\n         * The name/identifier of the model used\n         */\n        model: string;\n\n        /**\n         * Usage statistics for the completion request.\n         */\n        usage: CompletionsAPI.CompletionUsage;\n      }\n    }\n  }\n}\n\nexport type ChatCompletionContentPart =\n  | ChatCompletionContentPartText\n  | ChatCompletionContentPartImage\n  | ChatCompletionContentPart.ChatCompletionRequestMessageContentPartDocument;\n\nexport namespace ChatCompletionContentPart {\n  export interface ChatCompletionRequestMessageContentPartDocument {\n    document: ChatCompletionRequestMessageContentPartDocument.Document;\n\n    /**\n     * The type of the content part.\n     */\n    type: 'document';\n  }\n\n  export namespace ChatCompletionRequestMessageContentPartDocument {\n    export interface Document {\n      /**\n       * The JSON document data.\n       */\n      data: { [key: string]: unknown };\n\n      /**\n       * Optional unique identifier for the document.\n       */\n      id?: string | null;\n    }\n  }\n}\n\nexport interface ChatCompletionContentPartImage {\n  image_url: ChatCompletionContentPartImage.ImageURL;\n\n  /**\n   * The type of the content part.\n   */\n  type: 'image_url';\n}\n\nexport namespace ChatCompletionContentPartImage {\n  export interface ImageURL {\n    /**\n     * Either a URL of the image or the base64 encoded image data.\n     */\n    url: string;\n\n    /**\n     * Specifies the detail level of the image.\n     */\n    detail?: 'auto' | 'low' | 'high';\n  }\n}\n\nexport interface ChatCompletionContentPartText {\n  /**\n   * The text content.\n   */\n  text: string;\n\n  /**\n   * The type of the content part.\n   */\n  type: 'text';\n}\n\n/**\n * Specifying a particular function via `{\"name\": \"my_function\"}` forces the model\n * to call that function.\n */\nexport interface ChatCompletionFunctionCallOption {\n  /**\n   * The name of the function to call.\n   */\n  name: string;\n}\n\n/**\n * @deprecated\n */\nexport interface ChatCompletionFunctionMessageParam {\n  /**\n   * The contents of the function message.\n   */\n  content: string | null;\n\n  /**\n   * The name of the function to call.\n   */\n  name: string;\n\n  /**\n   * The role of the messages author, in this case `function`.\n   */\n  role: 'function';\n}\n\n/**\n * A chat completion message generated by the model.\n */\nexport interface ChatCompletionMessage {\n  /**\n   * The contents of the message.\n   */\n  content: string | null;\n\n  /**\n   * The role of the author of this message.\n   */\n  role: 'assistant';\n\n  /**\n   * A list of annotations providing citations and references for the content in the\n   * message.\n   */\n  annotations?: Array<ChatCompletionMessage.Annotation>;\n\n  /**\n   * A list of tools that were executed during the chat completion for compound AI\n   * systems.\n   */\n  executed_tools?: Array<ChatCompletionMessage.ExecutedTool>;\n\n  /**\n   * @deprecated Deprecated and replaced by `tool_calls`. The name and arguments of a\n   * function that should be called, as generated by the model.\n   */\n  function_call?: ChatCompletionMessage.FunctionCall;\n\n  /**\n   * The model's reasoning for a response. Only available for\n   * [models that support reasoning](https://console.groq.com/docs/reasoning) when\n   * request parameter reasoning_format has value `parsed`.\n   */\n  reasoning?: string | null;\n\n  /**\n   * The tool calls generated by the model, such as function calls.\n   */\n  tool_calls?: Array<ChatCompletionMessageToolCall>;\n}\n\nexport namespace ChatCompletionMessage {\n  /**\n   * An annotation that provides citations or references for content in a message.\n   */\n  export interface Annotation {\n    /**\n     * The type of annotation.\n     */\n    type: 'document_citation' | 'function_citation';\n\n    /**\n     * A citation referencing a specific document that was provided in the request.\n     */\n    document_citation?: Annotation.DocumentCitation;\n\n    /**\n     * A citation referencing the result of a function or tool call.\n     */\n    function_citation?: Annotation.FunctionCitation;\n  }\n\n  export namespace Annotation {\n    /**\n     * A citation referencing a specific document that was provided in the request.\n     */\n    export interface DocumentCitation {\n      /**\n       * The ID of the document being cited, corresponding to a document provided in the\n       * request.\n       */\n      document_id: string;\n\n      /**\n       * The character index in the message content where this citation ends.\n       */\n      end_index: number;\n\n      /**\n       * The character index in the message content where this citation begins.\n       */\n      start_index: number;\n    }\n\n    /**\n     * A citation referencing the result of a function or tool call.\n     */\n    export interface FunctionCitation {\n      /**\n       * The character index in the message content where this citation ends.\n       */\n      end_index: number;\n\n      /**\n       * The character index in the message content where this citation begins.\n       */\n      start_index: number;\n\n      /**\n       * The ID of the tool call being cited, corresponding to a tool call made during\n       * the conversation.\n       */\n      tool_call_id: string;\n    }\n  }\n\n  export interface ExecutedTool {\n    /**\n     * The arguments passed to the tool in JSON format.\n     */\n    arguments: string;\n\n    /**\n     * The index of the executed tool.\n     */\n    index: number;\n\n    /**\n     * The type of tool that was executed.\n     */\n    type: string;\n\n    /**\n     * Array of browser results\n     */\n    browser_results?: Array<ExecutedTool.BrowserResult>;\n\n    /**\n     * Array of code execution results\n     */\n    code_results?: Array<ExecutedTool.CodeResult>;\n\n    /**\n     * The output returned by the tool.\n     */\n    output?: string | null;\n\n    /**\n     * The search results returned by the tool, if applicable.\n     */\n    search_results?: ExecutedTool.SearchResults | null;\n  }\n\n  export namespace ExecutedTool {\n    export interface BrowserResult {\n      /**\n       * The title of the browser window\n       */\n      title: string;\n\n      /**\n       * The URL of the browser window\n       */\n      url: string;\n\n      /**\n       * The content of the browser result\n       */\n      content?: string;\n\n      /**\n       * The live view URL for the browser window\n       */\n      live_view_url?: string;\n    }\n\n    export interface CodeResult {\n      chart?: CodeResult.Chart;\n\n      /**\n       * Array of charts from a superchart\n       */\n      charts?: Array<CodeResult.Chart>;\n\n      /**\n       * Base64 encoded PNG image output from code execution\n       */\n      png?: string;\n\n      /**\n       * The text version of the code execution result\n       */\n      text?: string;\n    }\n\n    export namespace CodeResult {\n      export interface Chart {\n        /**\n         * The chart elements (data series, points, etc.)\n         */\n        elements: Array<Chart.Element>;\n\n        /**\n         * The type of chart\n         */\n        type: 'bar' | 'box_and_whisker' | 'line' | 'pie' | 'scatter' | 'superchart' | 'unknown';\n\n        /**\n         * The title of the chart\n         */\n        title?: string;\n\n        /**\n         * The label for the x-axis\n         */\n        x_label?: string;\n\n        /**\n         * The scale type for the x-axis\n         */\n        x_scale?: string;\n\n        /**\n         * The labels for the x-axis ticks\n         */\n        x_tick_labels?: Array<string>;\n\n        /**\n         * The tick values for the x-axis\n         */\n        x_ticks?: Array<number>;\n\n        /**\n         * The unit for the x-axis\n         */\n        x_unit?: string;\n\n        /**\n         * The label for the y-axis\n         */\n        y_label?: string;\n\n        /**\n         * The scale type for the y-axis\n         */\n        y_scale?: string;\n\n        /**\n         * The labels for the y-axis ticks\n         */\n        y_tick_labels?: Array<string>;\n\n        /**\n         * The tick values for the y-axis\n         */\n        y_ticks?: Array<number>;\n\n        /**\n         * The unit for the y-axis\n         */\n        y_unit?: string;\n      }\n\n      export namespace Chart {\n        export interface Element {\n          /**\n           * The label for this chart element\n           */\n          label: string;\n\n          /**\n           * The angle for this element\n           */\n          angle?: number;\n\n          /**\n           * The first quartile value for this element\n           */\n          first_quartile?: number;\n\n          /**\n           * The group this element belongs to\n           */\n          group?: string;\n\n          max?: number;\n\n          /**\n           * The median value for this element\n           */\n          median?: number;\n\n          /**\n           * The minimum value for this element\n           */\n          min?: number;\n\n          /**\n           * The outliers for this element\n           */\n          outliers?: Array<number>;\n\n          /**\n           * The points for this element\n           */\n          points?: Array<Array<number>>;\n\n          /**\n           * The radius for this element\n           */\n          radius?: number;\n\n          /**\n           * The third quartile value for this element\n           */\n          third_quartile?: number;\n\n          /**\n           * The value for this element\n           */\n          value?: number;\n        }\n      }\n\n      export interface Chart {\n        /**\n         * The chart elements (data series, points, etc.)\n         */\n        elements: Array<Chart.Element>;\n\n        /**\n         * The type of chart\n         */\n        type: 'bar' | 'box_and_whisker' | 'line' | 'pie' | 'scatter' | 'superchart' | 'unknown';\n\n        /**\n         * The title of the chart\n         */\n        title?: string;\n\n        /**\n         * The label for the x-axis\n         */\n        x_label?: string;\n\n        /**\n         * The scale type for the x-axis\n         */\n        x_scale?: string;\n\n        /**\n         * The labels for the x-axis ticks\n         */\n        x_tick_labels?: Array<string>;\n\n        /**\n         * The tick values for the x-axis\n         */\n        x_ticks?: Array<number>;\n\n        /**\n         * The unit for the x-axis\n         */\n        x_unit?: string;\n\n        /**\n         * The label for the y-axis\n         */\n        y_label?: string;\n\n        /**\n         * The scale type for the y-axis\n         */\n        y_scale?: string;\n\n        /**\n         * The labels for the y-axis ticks\n         */\n        y_tick_labels?: Array<string>;\n\n        /**\n         * The tick values for the y-axis\n         */\n        y_ticks?: Array<number>;\n\n        /**\n         * The unit for the y-axis\n         */\n        y_unit?: string;\n      }\n\n      export namespace Chart {\n        export interface Element {\n          /**\n           * The label for this chart element\n           */\n          label: string;\n\n          /**\n           * The angle for this element\n           */\n          angle?: number;\n\n          /**\n           * The first quartile value for this element\n           */\n          first_quartile?: number;\n\n          /**\n           * The group this element belongs to\n           */\n          group?: string;\n\n          max?: number;\n\n          /**\n           * The median value for this element\n           */\n          median?: number;\n\n          /**\n           * The minimum value for this element\n           */\n          min?: number;\n\n          /**\n           * The outliers for this element\n           */\n          outliers?: Array<number>;\n\n          /**\n           * The points for this element\n           */\n          points?: Array<Array<number>>;\n\n          /**\n           * The radius for this element\n           */\n          radius?: number;\n\n          /**\n           * The third quartile value for this element\n           */\n          third_quartile?: number;\n\n          /**\n           * The value for this element\n           */\n          value?: number;\n        }\n      }\n    }\n\n    /**\n     * The search results returned by the tool, if applicable.\n     */\n    export interface SearchResults {\n      /**\n       * List of image URLs returned by the search\n       */\n      images?: Array<string>;\n\n      /**\n       * List of search results\n       */\n      results?: Array<SearchResults.Result>;\n    }\n\n    export namespace SearchResults {\n      export interface Result {\n        /**\n         * The content of the search result\n         */\n        content?: string;\n\n        /**\n         * The relevance score of the search result\n         */\n        score?: number;\n\n        /**\n         * The title of the search result\n         */\n        title?: string;\n\n        /**\n         * The URL of the search result\n         */\n        url?: string;\n      }\n    }\n  }\n\n  /**\n   * @deprecated Deprecated and replaced by `tool_calls`. The name and arguments of a\n   * function that should be called, as generated by the model.\n   */\n  export interface FunctionCall {\n    /**\n     * The arguments to call the function with, as generated by the model in JSON\n     * format. Note that the model does not always generate valid JSON, and may\n     * hallucinate parameters not defined by your function schema. Validate the\n     * arguments in your code before calling your function.\n     */\n    arguments: string;\n\n    /**\n     * The name of the function to call.\n     */\n    name: string;\n  }\n}\n\nexport type ChatCompletionMessageParam =\n  | ChatCompletionSystemMessageParam\n  | ChatCompletionUserMessageParam\n  | ChatCompletionAssistantMessageParam\n  | ChatCompletionToolMessageParam\n  | ChatCompletionFunctionMessageParam;\n\nexport interface ChatCompletionMessageToolCall {\n  /**\n   * The ID of the tool call.\n   */\n  id: string;\n\n  /**\n   * The function that the model called.\n   */\n  function: ChatCompletionMessageToolCall.Function;\n\n  /**\n   * The type of the tool. Currently, only `function` is supported.\n   */\n  type: 'function';\n}\n\nexport namespace ChatCompletionMessageToolCall {\n  /**\n   * The function that the model called.\n   */\n  export interface Function {\n    /**\n     * The arguments to call the function with, as generated by the model in JSON\n     * format. Note that the model does not always generate valid JSON, and may\n     * hallucinate parameters not defined by your function schema. Validate the\n     * arguments in your code before calling your function.\n     */\n    arguments: string;\n\n    /**\n     * The name of the function to call.\n     */\n    name: string;\n  }\n}\n\n/**\n * Specifies a tool the model should use. Use to force the model to call a specific\n * function.\n */\nexport interface ChatCompletionNamedToolChoice {\n  function: ChatCompletionNamedToolChoice.Function;\n\n  /**\n   * The type of the tool. Currently, only `function` is supported.\n   */\n  type: 'function';\n}\n\nexport namespace ChatCompletionNamedToolChoice {\n  export interface Function {\n    /**\n     * The name of the function to call.\n     */\n    name: string;\n  }\n}\n\n/**\n * The role of the author of a message\n */\nexport type ChatCompletionRole = 'system' | 'user' | 'assistant' | 'tool' | 'function';\n\nexport interface ChatCompletionSystemMessageParam {\n  /**\n   * The contents of the system message.\n   */\n  content: string | Array<ChatCompletionContentPartText>;\n\n  /**\n   * The role of the messages author, in this case `system`.\n   */\n  role: 'system' | 'developer';\n\n  /**\n   * An optional name for the participant. Provides the model information to\n   * differentiate between participants of the same role.\n   */\n  name?: string;\n}\n\nexport interface ChatCompletionTokenLogprob {\n  /**\n   * The token.\n   */\n  token: string;\n\n  /**\n   * A list of integers representing the UTF-8 bytes representation of the token.\n   * Useful in instances where characters are represented by multiple tokens and\n   * their byte representations must be combined to generate the correct text\n   * representation. Can be `null` if there is no bytes representation for the token.\n   */\n  bytes: Array<number> | null;\n\n  /**\n   * The log probability of this token, if it is within the top 20 most likely\n   * tokens. Otherwise, the value `-9999.0` is used to signify that the token is very\n   * unlikely.\n   */\n  logprob: number;\n\n  /**\n   * List of the most likely tokens and their log probability, at this token\n   * position. In rare cases, there may be fewer than the number of requested\n   * `top_logprobs` returned.\n   */\n  top_logprobs: Array<ChatCompletionTokenLogprob.TopLogprob>;\n}\n\nexport namespace ChatCompletionTokenLogprob {\n  export interface TopLogprob {\n    /**\n     * The token.\n     */\n    token: string;\n\n    /**\n     * A list of integers representing the UTF-8 bytes representation of the token.\n     * Useful in instances where characters are represented by multiple tokens and\n     * their byte representations must be combined to generate the correct text\n     * representation. Can be `null` if there is no bytes representation for the token.\n     */\n    bytes: Array<number> | null;\n\n    /**\n     * The log probability of this token, if it is within the top 20 most likely\n     * tokens. Otherwise, the value `-9999.0` is used to signify that the token is very\n     * unlikely.\n     */\n    logprob: number;\n  }\n}\n\nexport interface ChatCompletionTool {\n  /**\n   * The type of the tool. `function`, `browser_search`, and `code_interpreter` are\n   * supported.\n   */\n  type: 'function' | 'browser_search' | 'code_interpreter' | (string & {});\n\n  function?: Shared.FunctionDefinition;\n}\n\n/**\n * Controls which (if any) tool is called by the model. `none` means the model will\n * not call any tool and instead generates a message. `auto` means the model can\n * pick between generating a message or calling one or more tools. `required` means\n * the model must call one or more tools. Specifying a particular tool via\n * `{\"type\": \"function\", \"function\": {\"name\": \"my_function\"}}` forces the model to\n * call that tool.\n *\n * `none` is the default when no tools are present. `auto` is the default if tools\n * are present.\n */\nexport type ChatCompletionToolChoiceOption = 'none' | 'auto' | 'required' | ChatCompletionNamedToolChoice;\n\nexport interface ChatCompletionToolMessageParam {\n  /**\n   * The contents of the tool message.\n   */\n  content: string | Array<ChatCompletionContentPart>;\n\n  /**\n   * The role of the messages author, in this case `tool`.\n   */\n  role: 'tool';\n\n  /**\n   * Tool call that this message is responding to.\n   */\n  tool_call_id: string;\n}\n\nexport interface ChatCompletionUserMessageParam {\n  /**\n   * The contents of the user message.\n   */\n  content: string | Array<ChatCompletionContentPart>;\n\n  /**\n   * The role of the messages author, in this case `user`.\n   */\n  role: 'user';\n\n  /**\n   * An optional name for the participant. Provides the model information to\n   * differentiate between participants of the same role.\n   */\n  name?: string;\n}\n\nexport type ChatCompletionCreateParams =\n  | ChatCompletionCreateParamsNonStreaming\n  | ChatCompletionCreateParamsStreaming;\n\nexport interface ChatCompletionCreateParamsBase {\n  /**\n   * A list of messages comprising the conversation so far.\n   */\n  messages: Array<ChatCompletionMessageParam>;\n\n  /**\n   * ID of the model to use. For details on which models are compatible with the Chat\n   * API, see available [models](https://console.groq.com/docs/models)\n   */\n  model:\n    | (string & {})\n    | 'compound-beta'\n    | 'compound-beta-mini'\n    | 'gemma2-9b-it'\n    | 'llama-3.1-8b-instant'\n    | 'llama-3.3-70b-versatile'\n    | 'meta-llama/llama-4-maverick-17b-128e-instruct'\n    | 'meta-llama/llama-4-scout-17b-16e-instruct'\n    | 'meta-llama/llama-guard-4-12b'\n    | 'moonshotai/kimi-k2-instruct'\n    | 'openai/gpt-oss-120b'\n    | 'openai/gpt-oss-20b'\n    | 'qwen/qwen3-32b';\n\n  /**\n   * Whether to enable citations in the response. When enabled, the model will\n   * include citations for information retrieved from provided documents or web\n   * searches.\n   */\n  citation_options?: 'enabled' | 'disabled' | null;\n\n  /**\n   * Custom configuration of models and tools for Compound.\n   */\n  compound_custom?: CompletionCreateParams.CompoundCustom | null;\n\n  /**\n   * If set to true, groq will return called tools without validating that the tool\n   * is present in request.tools. tool_choice=required/none will still be enforced,\n   * but the request cannot require a specific tool be used.\n   */\n  disable_tool_validation?: boolean;\n\n  /**\n   * A list of documents to provide context for the conversation. Each document\n   * contains text that can be referenced by the model.\n   */\n  documents?: Array<CompletionCreateParams.Document> | null;\n\n  /**\n   * @deprecated Deprecated: Use search_settings.exclude_domains instead. A list of\n   * domains to exclude from the search results when the model uses a web search\n   * tool.\n   */\n  exclude_domains?: Array<string> | null;\n\n  /**\n   * This is not yet supported by any of our models. Number between -2.0 and 2.0.\n   * Positive values penalize new tokens based on their existing frequency in the\n   * text so far, decreasing the model's likelihood to repeat the same line verbatim.\n   */\n  frequency_penalty?: number | null;\n\n  /**\n   * @deprecated Deprecated in favor of `tool_choice`.\n   *\n   * Controls which (if any) function is called by the model. `none` means the model\n   * will not call a function and instead generates a message. `auto` means the model\n   * can pick between generating a message or calling a function. Specifying a\n   * particular function via `{\"name\": \"my_function\"}` forces the model to call that\n   * function.\n   *\n   * `none` is the default when no functions are present. `auto` is the default if\n   * functions are present.\n   */\n  function_call?: 'none' | 'auto' | 'required' | ChatCompletionFunctionCallOption | null;\n\n  /**\n   * @deprecated Deprecated in favor of `tools`.\n   *\n   * A list of functions the model may generate JSON inputs for.\n   */\n  functions?: Array<CompletionCreateParams.Function> | null;\n\n  /**\n   * @deprecated Deprecated: Use search_settings.include_domains instead. A list of\n   * domains to include in the search results when the model uses a web search tool.\n   */\n  include_domains?: Array<string> | null;\n\n  /**\n   * Whether to include reasoning in the response. If true, the response will include\n   * a `reasoning` field. If false, the model's reasoning will not be included in the\n   * response. This field is mutually exclusive with `reasoning_format`.\n   */\n  include_reasoning?: boolean | null;\n\n  /**\n   * This is not yet supported by any of our models. Modify the likelihood of\n   * specified tokens appearing in the completion.\n   */\n  logit_bias?: { [key: string]: number } | null;\n\n  /**\n   * This is not yet supported by any of our models. Whether to return log\n   * probabilities of the output tokens or not. If true, returns the log\n   * probabilities of each output token returned in the `content` of `message`.\n   */\n  logprobs?: boolean | null;\n\n  /**\n   * The maximum number of tokens that can be generated in the chat completion. The\n   * total length of input tokens and generated tokens is limited by the model's\n   * context length.\n   */\n  max_completion_tokens?: number | null;\n\n  /**\n   * @deprecated Deprecated in favor of `max_completion_tokens`. The maximum number\n   * of tokens that can be generated in the chat completion. The total length of\n   * input tokens and generated tokens is limited by the model's context length.\n   */\n  max_tokens?: number | null;\n\n  /**\n   * This parameter is not currently supported.\n   */\n  metadata?: { [key: string]: string } | null;\n\n  /**\n   * How many chat completion choices to generate for each input message. Note that\n   * the current moment, only n=1 is supported. Other values will result in a 400\n   * response.\n   */\n  n?: number | null;\n\n  /**\n   * Whether to enable parallel function calling during tool use.\n   */\n  parallel_tool_calls?: boolean | null;\n\n  /**\n   * This is not yet supported by any of our models. Number between -2.0 and 2.0.\n   * Positive values penalize new tokens based on whether they appear in the text so\n   * far, increasing the model's likelihood to talk about new topics.\n   */\n  presence_penalty?: number | null;\n\n  /**\n   * qwen3 models support the following values Set to 'none' to disable reasoning.\n   * Set to 'default' or null to let Qwen reason.\n   *\n   * openai/gpt-oss-20b and openai/gpt-oss-120b support 'low', 'medium', or 'high'.\n   * 'medium' is the default value.\n   */\n  reasoning_effort?: 'none' | 'default' | 'low' | 'medium' | 'high' | null;\n\n  /**\n   * Specifies how to output reasoning tokens This field is mutually exclusive with\n   * `include_reasoning`.\n   */\n  reasoning_format?: 'hidden' | 'raw' | 'parsed' | null;\n\n  /**\n   * An object specifying the format that the model must output. Setting to\n   * `{ \"type\": \"json_schema\", \"json_schema\": {...} }` enables Structured Outputs\n   * which ensures the model will match your supplied JSON schema. `json_schema`\n   * response format is only available on\n   * [supported models](https://console.groq.com/docs/structured-outputs#supported-models).\n   * Setting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\n   * ensures the message the model generates is valid JSON. Using `json_schema` is\n   * preferred for models that support it.\n   */\n  response_format?:\n    | CompletionCreateParams.ResponseFormatText\n    | CompletionCreateParams.ResponseFormatJsonSchema\n    | CompletionCreateParams.ResponseFormatJsonObject\n    | null;\n\n  /**\n   * Settings for web search functionality when the model uses a web search tool.\n   */\n  search_settings?: CompletionCreateParams.SearchSettings | null;\n\n  /**\n   * If specified, our system will make a best effort to sample deterministically,\n   * such that repeated requests with the same `seed` and parameters should return\n   * the same result. Determinism is not guaranteed, and you should refer to the\n   * `system_fingerprint` response parameter to monitor changes in the backend.\n   */\n  seed?: number | null;\n\n  /**\n   * The service tier to use for the request. Defaults to `on_demand`.\n   *\n   * - `auto` will automatically select the highest tier available within the rate\n   *   limits of your organization.\n   * - `flex` uses the flex tier, which will succeed or fail quickly.\n   */\n  service_tier?: 'auto' | 'on_demand' | 'flex' | 'performance' | null;\n\n  /**\n   * Up to 4 sequences where the API will stop generating further tokens. The\n   * returned text will not contain the stop sequence.\n   */\n  stop?: string | null | Array<string>;\n\n  /**\n   * This parameter is not currently supported.\n   */\n  store?: boolean | null;\n\n  /**\n   * If set, partial message deltas will be sent. Tokens will be sent as data-only\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format)\n   * as they become available, with the stream terminated by a `data: [DONE]`\n   * message. [Example code](/docs/text-chat#streaming-a-chat-completion).\n   */\n  stream?: boolean | null;\n\n  /**\n   * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will\n   * make the output more random, while lower values like 0.2 will make it more\n   * focused and deterministic. We generally recommend altering this or top_p but not\n   * both.\n   */\n  temperature?: number | null;\n\n  /**\n   * Controls which (if any) tool is called by the model. `none` means the model will\n   * not call any tool and instead generates a message. `auto` means the model can\n   * pick between generating a message or calling one or more tools. `required` means\n   * the model must call one or more tools. Specifying a particular tool via\n   * `{\"type\": \"function\", \"function\": {\"name\": \"my_function\"}}` forces the model to\n   * call that tool.\n   *\n   * `none` is the default when no tools are present. `auto` is the default if tools\n   * are present.\n   */\n  tool_choice?: ChatCompletionToolChoiceOption | null;\n\n  /**\n   * A list of tools the model may call. Currently, only functions are supported as a\n   * tool. Use this to provide a list of functions the model may generate JSON inputs\n   * for. A max of 128 functions are supported.\n   */\n  tools?: Array<ChatCompletionTool> | null;\n\n  /**\n   * This is not yet supported by any of our models. An integer between 0 and 20\n   * specifying the number of most likely tokens to return at each token position,\n   * each with an associated log probability. `logprobs` must be set to `true` if\n   * this parameter is used.\n   */\n  top_logprobs?: number | null;\n\n  /**\n   * An alternative to sampling with temperature, called nucleus sampling, where the\n   * model considers the results of the tokens with top_p probability mass. So 0.1\n   * means only the tokens comprising the top 10% probability mass are considered. We\n   * generally recommend altering this or temperature but not both.\n   */\n  top_p?: number | null;\n\n  /**\n   * A unique identifier representing your end-user, which can help us monitor and\n   * detect abuse.\n   */\n  user?: string | null;\n}\n\nexport namespace CompletionCreateParams {\n  /**\n   * Custom configuration of models and tools for Compound.\n   */\n  export interface CompoundCustom {\n    models?: CompoundCustom.Models | null;\n\n    /**\n     * Configuration options for tools available to Compound.\n     */\n    tools?: CompoundCustom.Tools | null;\n  }\n\n  export namespace CompoundCustom {\n    export interface Models {\n      /**\n       * Custom model to use for answering.\n       */\n      answering_model?: string | null;\n\n      /**\n       * Custom model to use for reasoning.\n       */\n      reasoning_model?: string | null;\n    }\n\n    /**\n     * Configuration options for tools available to Compound.\n     */\n    export interface Tools {\n      /**\n       * A list of tool names that are enabled for the request.\n       */\n      enabled_tools?: Array<string> | null;\n\n      /**\n       * Configuration for the Wolfram tool integration.\n       */\n      wolfram_settings?: Tools.WolframSettings | null;\n    }\n\n    export namespace Tools {\n      /**\n       * Configuration for the Wolfram tool integration.\n       */\n      export interface WolframSettings {\n        /**\n         * API key used to authorize requests to Wolfram services.\n         */\n        authorization?: string | null;\n      }\n    }\n  }\n\n  /**\n   * A document that can be referenced by the model while generating responses.\n   */\n  export interface Document {\n    /**\n     * The source of the document. Only text and JSON sources are currently supported.\n     */\n    source: Document.ChatCompletionDocumentSourceText | Document.ChatCompletionDocumentSourceJson;\n\n    /**\n     * Optional unique identifier that can be used for citations in responses.\n     */\n    id?: string | null;\n  }\n\n  export namespace Document {\n    /**\n     * A document whose contents are provided inline as text.\n     */\n    export interface ChatCompletionDocumentSourceText {\n      /**\n       * The document contents.\n       */\n      text: string;\n\n      /**\n       * Identifies this document source as inline text.\n       */\n      type: 'text';\n    }\n\n    /**\n     * A document whose contents are provided inline as JSON data.\n     */\n    export interface ChatCompletionDocumentSourceJson {\n      /**\n       * The JSON payload associated with the document.\n       */\n      data: { [key: string]: unknown };\n\n      /**\n       * Identifies this document source as JSON data.\n       */\n      type: 'json';\n    }\n  }\n\n  /**\n   * @deprecated\n   */\n  export interface Function {\n    /**\n     * The name of the function to be called. Must be a-z, A-Z, 0-9, or contain\n     * underscores and dashes, with a maximum length of 64.\n     */\n    name: string;\n\n    /**\n     * A description of what the function does, used by the model to choose when and\n     * how to call the function.\n     */\n    description?: string;\n\n    /**\n     * Function parameters defined as a JSON Schema object. Refer to\n     * https://json-schema.org/understanding-json-schema/ for schema documentation.\n     */\n    parameters?: Shared.FunctionParameters;\n  }\n\n  /**\n   * Default response format. Used to generate text responses.\n   */\n  export interface ResponseFormatText {\n    /**\n     * The type of response format being defined. Always `text`.\n     */\n    type: 'text';\n  }\n\n  /**\n   * JSON Schema response format. Used to generate structured JSON responses.\n   */\n  export interface ResponseFormatJsonSchema {\n    /**\n     * Structured Outputs configuration options, including a JSON Schema.\n     */\n    json_schema: ResponseFormatJsonSchema.JsonSchema;\n\n    /**\n     * The type of response format being defined. Always `json_schema`.\n     */\n    type: 'json_schema';\n  }\n\n  export namespace ResponseFormatJsonSchema {\n    /**\n     * Structured Outputs configuration options, including a JSON Schema.\n     */\n    export interface JsonSchema {\n      /**\n       * The name of the response format. Must be a-z, A-Z, 0-9, or contain underscores\n       * and dashes, with a maximum length of 64.\n       */\n      name: string;\n\n      /**\n       * A description of what the response format is for, used by the model to determine\n       * how to respond in the format.\n       */\n      description?: string;\n\n      /**\n       * The schema for the response format, described as a JSON Schema object. Learn how\n       * to build JSON schemas [here](https://json-schema.org/).\n       */\n      schema?: { [key: string]: unknown };\n\n      /**\n       * Whether to enable strict schema adherence when generating the output. If set to\n       * true, the model will always follow the exact schema defined in the `schema`\n       * field. Only a subset of JSON Schema is supported when `strict` is `true`.\n       */\n      strict?: boolean | null;\n    }\n  }\n\n  /**\n   * JSON object response format. An older method of generating JSON responses. Using\n   * `json_schema` is recommended for models that support it. Note that the model\n   * will not generate JSON without a system or user message instructing it to do so.\n   */\n  export interface ResponseFormatJsonObject {\n    /**\n     * The type of response format being defined. Always `json_object`.\n     */\n    type: 'json_object';\n  }\n\n  /**\n   * Settings for web search functionality when the model uses a web search tool.\n   */\n  export interface SearchSettings {\n    /**\n     * Name of country to prioritize search results from (e.g., \"united states\",\n     * \"germany\", \"france\").\n     */\n    country?: string | null;\n\n    /**\n     * A list of domains to exclude from the search results.\n     */\n    exclude_domains?: Array<string> | null;\n\n    /**\n     * A list of domains to include in the search results.\n     */\n    include_domains?: Array<string> | null;\n\n    /**\n     * Whether to include images in the search results.\n     */\n    include_images?: boolean | null;\n  }\n}\n\nexport interface ChatCompletionCreateParamsNonStreaming extends ChatCompletionCreateParamsBase {\n  /**\n   * If set, partial message deltas will be sent. Tokens will be sent as data-only\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format)\n   * as they become available, with the stream terminated by a `data: [DONE]`\n   * message. [Example code](/docs/text-chat#streaming-a-chat-completion).\n   */\n  stream?: false | null;\n}\n\nexport interface ChatCompletionCreateParamsStreaming extends ChatCompletionCreateParamsBase {\n  /**\n   * If set, partial message deltas will be sent. Tokens will be sent as data-only\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format)\n   * as they become available, with the stream terminated by a `data: [DONE]`\n   * message. [Example code](/docs/text-chat#streaming-a-chat-completion).\n   */\n  stream: true;\n}\n\nexport declare namespace Completions {\n  export {\n    type ChatCompletion as ChatCompletion,\n    type ChatCompletionAssistantMessageParam as ChatCompletionAssistantMessageParam,\n    type ChatCompletionChunk as ChatCompletionChunk,\n    type ChatCompletionContentPart as ChatCompletionContentPart,\n    type ChatCompletionContentPartImage as ChatCompletionContentPartImage,\n    type ChatCompletionContentPartText as ChatCompletionContentPartText,\n    type ChatCompletionFunctionCallOption as ChatCompletionFunctionCallOption,\n    type ChatCompletionFunctionMessageParam as ChatCompletionFunctionMessageParam,\n    type ChatCompletionMessage as ChatCompletionMessage,\n    type ChatCompletionMessageParam as ChatCompletionMessageParam,\n    type ChatCompletionMessageToolCall as ChatCompletionMessageToolCall,\n    type ChatCompletionNamedToolChoice as ChatCompletionNamedToolChoice,\n    type ChatCompletionRole as ChatCompletionRole,\n    type ChatCompletionSystemMessageParam as ChatCompletionSystemMessageParam,\n    type ChatCompletionTokenLogprob as ChatCompletionTokenLogprob,\n    type ChatCompletionTool as ChatCompletionTool,\n    type ChatCompletionToolChoiceOption as ChatCompletionToolChoiceOption,\n    type ChatCompletionToolMessageParam as ChatCompletionToolMessageParam,\n    type ChatCompletionUserMessageParam as ChatCompletionUserMessageParam,\n    type CompletionCreateParams as CompletionCreateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as CompletionsAPI from './completions';\nimport {\n  ChatCompletion,\n  ChatCompletionAssistantMessageParam,\n  ChatCompletionChunk,\n  ChatCompletionContentPart,\n  ChatCompletionContentPartImage,\n  ChatCompletionContentPartText,\n  ChatCompletionFunctionCallOption,\n  ChatCompletionFunctionMessageParam,\n  ChatCompletionMessage,\n  ChatCompletionMessageParam,\n  ChatCompletionMessageToolCall,\n  ChatCompletionNamedToolChoice,\n  ChatCompletionRole,\n  ChatCompletionSystemMessageParam,\n  ChatCompletionTokenLogprob,\n  ChatCompletionTool,\n  ChatCompletionToolChoiceOption,\n  ChatCompletionToolMessageParam,\n  ChatCompletionUserMessageParam,\n  CompletionCreateParams,\n  Completions,\n} from './completions';\n\nexport class Chat extends APIResource {\n  completions: CompletionsAPI.Completions = new CompletionsAPI.Completions(this._client);\n}\n\nChat.Completions = Completions;\n\nexport declare namespace Chat {\n  export {\n    Completions as Completions,\n    type ChatCompletion as ChatCompletion,\n    type ChatCompletionAssistantMessageParam as ChatCompletionAssistantMessageParam,\n    type ChatCompletionChunk as ChatCompletionChunk,\n    type ChatCompletionContentPart as ChatCompletionContentPart,\n    type ChatCompletionContentPartImage as ChatCompletionContentPartImage,\n    type ChatCompletionContentPartText as ChatCompletionContentPartText,\n    type ChatCompletionFunctionCallOption as ChatCompletionFunctionCallOption,\n    type ChatCompletionFunctionMessageParam as ChatCompletionFunctionMessageParam,\n    type ChatCompletionMessage as ChatCompletionMessage,\n    type ChatCompletionMessageParam as ChatCompletionMessageParam,\n    type ChatCompletionMessageToolCall as ChatCompletionMessageToolCall,\n    type ChatCompletionNamedToolChoice as ChatCompletionNamedToolChoice,\n    type ChatCompletionRole as ChatCompletionRole,\n    type ChatCompletionSystemMessageParam as ChatCompletionSystemMessageParam,\n    type ChatCompletionTokenLogprob as ChatCompletionTokenLogprob,\n    type ChatCompletionTool as ChatCompletionTool,\n    type ChatCompletionToolChoiceOption as ChatCompletionToolChoiceOption,\n    type ChatCompletionToolMessageParam as ChatCompletionToolMessageParam,\n    type ChatCompletionUserMessageParam as ChatCompletionUserMessageParam,\n    type CompletionCreateParams as CompletionCreateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../core/resource';\n\nexport class Completions extends APIResource {}\n\n/**\n * Usage statistics for the completion request.\n */\nexport interface CompletionUsage {\n  /**\n   * Number of tokens in the generated completion.\n   */\n  completion_tokens: number;\n\n  /**\n   * Number of tokens in the prompt.\n   */\n  prompt_tokens: number;\n\n  /**\n   * Total number of tokens used in the request (prompt + completion).\n   */\n  total_tokens: number;\n\n  /**\n   * Time spent generating tokens\n   */\n  completion_time?: number;\n\n  /**\n   * Breakdown of tokens in the completion.\n   */\n  completion_tokens_details?: CompletionUsage.CompletionTokensDetails | null;\n\n  /**\n   * Time spent processing input tokens\n   */\n  prompt_time?: number;\n\n  /**\n   * Breakdown of tokens in the prompt.\n   */\n  prompt_tokens_details?: CompletionUsage.PromptTokensDetails | null;\n\n  /**\n   * Time the requests was spent queued\n   */\n  queue_time?: number;\n\n  /**\n   * completion time and prompt time combined\n   */\n  total_time?: number;\n}\n\nexport namespace CompletionUsage {\n  /**\n   * Breakdown of tokens in the completion.\n   */\n  export interface CompletionTokensDetails {\n    /**\n     * Number of tokens used for reasoning (for reasoning models).\n     */\n    reasoning_tokens: number;\n  }\n\n  /**\n   * Breakdown of tokens in the prompt.\n   */\n  export interface PromptTokensDetails {\n    /**\n     * Number of tokens that were cached and reused.\n     */\n    cached_tokens: number;\n  }\n}\n\nexport declare namespace Completions {\n  export { type CompletionUsage as CompletionUsage };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../core/resource';\nimport { APIPromise } from '../core/api-promise';\nimport { RequestOptions } from '../internal/request-options';\n\nexport class Embeddings extends APIResource {\n  /**\n   * Creates an embedding vector representing the input text.\n   *\n   * @example\n   * ```ts\n   * const createEmbeddingResponse =\n   *   await client.embeddings.create({\n   *     input: 'The quick brown fox jumped over the lazy dog',\n   *     model: 'nomic-embed-text-v1_5',\n   *   });\n   * ```\n   */\n  create(body: EmbeddingCreateParams, options?: RequestOptions): APIPromise<CreateEmbeddingResponse> {\n    return this._client.post('/openai/v1/embeddings', { body, ...options });\n  }\n}\n\nexport interface CreateEmbeddingResponse {\n  /**\n   * The list of embeddings generated by the model.\n   */\n  data: Array<Embedding>;\n\n  /**\n   * The name of the model used to generate the embedding.\n   */\n  model: string;\n\n  /**\n   * The object type, which is always \"list\".\n   */\n  object: 'list';\n\n  /**\n   * The usage information for the request.\n   */\n  usage: CreateEmbeddingResponse.Usage;\n}\n\nexport namespace CreateEmbeddingResponse {\n  /**\n   * The usage information for the request.\n   */\n  export interface Usage {\n    /**\n     * The number of tokens used by the prompt.\n     */\n    prompt_tokens: number;\n\n    /**\n     * The total number of tokens used by the request.\n     */\n    total_tokens: number;\n  }\n}\n\n/**\n * Represents an embedding vector returned by embedding endpoint.\n */\nexport interface Embedding {\n  /**\n   * The embedding vector, which is a list of floats. The length of vector depends on\n   * the model as listed in the [embedding guide](/docs/guides/embeddings).\n   */\n  embedding: Array<number> | string;\n\n  /**\n   * The index of the embedding in the list of embeddings.\n   */\n  index: number;\n\n  /**\n   * The object type, which is always \"embedding\".\n   */\n  object: 'embedding';\n}\n\nexport interface EmbeddingCreateParams {\n  /**\n   * Input text to embed, encoded as a string or array of tokens. To embed multiple\n   * inputs in a single request, pass an array of strings or array of token arrays.\n   * The input must not exceed the max input tokens for the model, cannot be an empty\n   * string, and any array must be 2048 dimensions or less.\n   */\n  input: string | Array<string>;\n\n  /**\n   * ID of the model to use.\n   */\n  model: (string & {}) | 'nomic-embed-text-v1_5';\n\n  /**\n   * The format to return the embeddings in. Can only be `float` or `base64`.\n   */\n  encoding_format?: 'float' | 'base64';\n\n  /**\n   * A unique identifier representing your end-user, which can help us monitor and\n   * detect abuse.\n   */\n  user?: string | null;\n}\n\nexport declare namespace Embeddings {\n  export {\n    type CreateEmbeddingResponse as CreateEmbeddingResponse,\n    type Embedding as Embedding,\n    type EmbeddingCreateParams as EmbeddingCreateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../core/resource';\nimport { APIPromise } from '../core/api-promise';\nimport { type Uploadable } from '../core/uploads';\nimport { buildHeaders } from '../internal/headers';\nimport { RequestOptions } from '../internal/request-options';\nimport { multipartFormRequestOptions } from '../internal/uploads';\nimport { path } from '../internal/utils/path';\n\nexport class Files extends APIResource {\n  /**\n   * Upload a file that can be used across various endpoints.\n   *\n   * The Batch API only supports `.jsonl` files up to 100 MB in size. The input also\n   * has a specific required [format](/docs/batch).\n   *\n   * Please contact us if you need to increase these storage limits.\n   */\n  create(body: FileCreateParams, options?: RequestOptions): APIPromise<FileCreateResponse> {\n    return this._client.post(\n      '/openai/v1/files',\n      multipartFormRequestOptions({ body, ...options }, this._client),\n    );\n  }\n\n  /**\n   * Returns a list of files.\n   */\n  list(options?: RequestOptions): APIPromise<FileListResponse> {\n    return this._client.get('/openai/v1/files', options);\n  }\n\n  /**\n   * Delete a file.\n   */\n  delete(fileID: string, options?: RequestOptions): APIPromise<FileDeleteResponse> {\n    return this._client.delete(path`/openai/v1/files/${fileID}`, options);\n  }\n\n  /**\n   * Returns the contents of the specified file.\n   */\n  content(fileID: string, options?: RequestOptions): APIPromise<Response> {\n    return this._client.get(path`/openai/v1/files/${fileID}/content`, {\n      ...options,\n      headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n      __binaryResponse: true,\n    });\n  }\n\n  /**\n   * Returns information about a file.\n   */\n  info(fileID: string, options?: RequestOptions): APIPromise<FileInfoResponse> {\n    return this._client.get(path`/openai/v1/files/${fileID}`, options);\n  }\n}\n\n/**\n * The `File` object represents a document that has been uploaded.\n */\nexport interface FileCreateResponse {\n  /**\n   * The file identifier, which can be referenced in the API endpoints.\n   */\n  id?: string;\n\n  /**\n   * The size of the file, in bytes.\n   */\n  bytes?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the file was created.\n   */\n  created_at?: number;\n\n  /**\n   * The name of the file.\n   */\n  filename?: string;\n\n  /**\n   * The object type, which is always `file`.\n   */\n  object?: 'file';\n\n  /**\n   * The intended purpose of the file. Supported values are `batch`, and\n   * `batch_output`.\n   */\n  purpose?: 'batch' | 'batch_output';\n}\n\nexport interface FileListResponse {\n  data: Array<FileListResponse.Data>;\n\n  object: 'list';\n}\n\nexport namespace FileListResponse {\n  /**\n   * The `File` object represents a document that has been uploaded.\n   */\n  export interface Data {\n    /**\n     * The file identifier, which can be referenced in the API endpoints.\n     */\n    id?: string;\n\n    /**\n     * The size of the file, in bytes.\n     */\n    bytes?: number;\n\n    /**\n     * The Unix timestamp (in seconds) for when the file was created.\n     */\n    created_at?: number;\n\n    /**\n     * The name of the file.\n     */\n    filename?: string;\n\n    /**\n     * The object type, which is always `file`.\n     */\n    object?: 'file';\n\n    /**\n     * The intended purpose of the file. Supported values are `batch`, and\n     * `batch_output`.\n     */\n    purpose?: 'batch' | 'batch_output';\n  }\n}\n\nexport interface FileDeleteResponse {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'file';\n}\n\n/**\n * The `File` object represents a document that has been uploaded.\n */\nexport interface FileInfoResponse {\n  /**\n   * The file identifier, which can be referenced in the API endpoints.\n   */\n  id?: string;\n\n  /**\n   * The size of the file, in bytes.\n   */\n  bytes?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the file was created.\n   */\n  created_at?: number;\n\n  /**\n   * The name of the file.\n   */\n  filename?: string;\n\n  /**\n   * The object type, which is always `file`.\n   */\n  object?: 'file';\n\n  /**\n   * The intended purpose of the file. Supported values are `batch`, and\n   * `batch_output`.\n   */\n  purpose?: 'batch' | 'batch_output';\n}\n\nexport interface FileCreateParams {\n  /**\n   * The File object (not file name) to be uploaded.\n   */\n  file: Uploadable;\n\n  /**\n   * The intended purpose of the uploaded file. Use \"batch\" for\n   * [Batch API](/docs/api-reference#batches).\n   */\n  purpose: 'batch';\n}\n\nexport declare namespace Files {\n  export {\n    type FileCreateResponse as FileCreateResponse,\n    type FileListResponse as FileListResponse,\n    type FileDeleteResponse as FileDeleteResponse,\n    type FileInfoResponse as FileInfoResponse,\n    type FileCreateParams as FileCreateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../core/resource';\nimport { APIPromise } from '../core/api-promise';\nimport { RequestOptions } from '../internal/request-options';\nimport { path } from '../internal/utils/path';\n\nexport class Models extends APIResource {\n  /**\n   * Get a specific model\n   */\n  retrieve(model: string, options?: RequestOptions): APIPromise<Model> {\n    return this._client.get(path`/openai/v1/models/${model}`, options);\n  }\n\n  /**\n   * get all available models\n   */\n  list(options?: RequestOptions): APIPromise<ModelListResponse> {\n    return this._client.get('/openai/v1/models', options);\n  }\n\n  /**\n   * Delete a model\n   */\n  delete(model: string, options?: RequestOptions): APIPromise<ModelDeleted> {\n    return this._client.delete(path`/openai/v1/models/${model}`, options);\n  }\n}\n\n/**\n * Describes an OpenAI model offering that can be used with the API.\n */\nexport interface Model {\n  /**\n   * The model identifier, which can be referenced in the API endpoints.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) when the model was created.\n   */\n  created: number;\n\n  /**\n   * The object type, which is always \"model\".\n   */\n  object: 'model';\n\n  /**\n   * The organization that owns the model.\n   */\n  owned_by: string;\n}\n\nexport interface ModelDeleted {\n  id: string;\n\n  deleted: boolean;\n\n  object: string;\n}\n\nexport interface ModelListResponse {\n  data: Array<Model>;\n\n  object: 'list';\n}\n\nexport declare namespace Models {\n  export {\n    type Model as Model,\n    type ModelDeleted as ModelDeleted,\n    type ModelListResponse as ModelListResponse,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nexport * from './shared';\nexport { Audio } from './audio/audio';\nexport {\n  Batches,\n  type BatchCreateResponse,\n  type BatchRetrieveResponse,\n  type BatchListResponse,\n  type BatchCancelResponse,\n  type BatchCreateParams,\n} from './batches';\nexport { Chat } from './chat/chat';\nexport { Completions, type CompletionUsage } from './completions';\nexport {\n  Embeddings,\n  type CreateEmbeddingResponse,\n  type Embedding,\n  type EmbeddingCreateParams,\n} from './embeddings';\nexport {\n  Files,\n  type FileCreateResponse,\n  type FileListResponse,\n  type FileDeleteResponse,\n  type FileInfoResponse,\n  type FileCreateParams,\n} from './files';\nexport { Models, type Model, type ModelDeleted, type ModelListResponse } from './models';\n", "export function concatBytes(buffers: Uint8Array[]): Uint8Array {\n  let length = 0;\n  for (const buffer of buffers) {\n    length += buffer.length;\n  }\n  const output = new Uint8Array(length);\n  let index = 0;\n  for (const buffer of buffers) {\n    output.set(buffer, index);\n    index += buffer.length;\n  }\n\n  return output;\n}\n\nlet encodeUTF8_: (str: string) => Uint8Array;\nexport function encodeUTF8(str: string) {\n  let encoder;\n  return (\n    encodeUTF8_ ??\n    ((encoder = new (globalThis as any).TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder)))\n  )(str);\n}\n\nlet decodeUTF8_: (bytes: Uint8Array) => string;\nexport function decodeUTF8(bytes: Uint8Array) {\n  let decoder;\n  return (\n    decodeUTF8_ ??\n    ((decoder = new (globalThis as any).TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder)))\n  )(bytes);\n}\n", "import { concatBytes, decodeUTF8, encodeUTF8 } from '../utils/bytes';\n\nexport type Bytes = string | ArrayBuffer | Uint8Array | null | undefined;\n\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n  // prettier-ignore\n  static NEWLINE_CHARS = new Set(['\\n', '\\r']);\n  static NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n\n  #buffer: Uint8Array;\n  #carriageReturnIndex: number | null;\n\n  constructor() {\n    this.#buffer = new Uint8Array();\n    this.#carriageReturnIndex = null;\n  }\n\n  decode(chunk: Bytes): string[] {\n    if (chunk == null) {\n      return [];\n    }\n\n    const binaryChunk =\n      chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n      : typeof chunk === 'string' ? encodeUTF8(chunk)\n      : chunk;\n\n    this.#buffer = concatBytes([this.#buffer, binaryChunk]);\n\n    const lines: string[] = [];\n    let patternIndex;\n    while ((patternIndex = findNewlineIndex(this.#buffer, this.#carriageReturnIndex)) != null) {\n      if (patternIndex.carriage && this.#carriageReturnIndex == null) {\n        // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n        this.#carriageReturnIndex = patternIndex.index;\n        continue;\n      }\n\n      // we got double \\r or \\rtext\\n\n      if (\n        this.#carriageReturnIndex != null &&\n        (patternIndex.index !== this.#carriageReturnIndex + 1 || patternIndex.carriage)\n      ) {\n        lines.push(decodeUTF8(this.#buffer.subarray(0, this.#carriageReturnIndex - 1)));\n        this.#buffer = this.#buffer.subarray(this.#carriageReturnIndex);\n        this.#carriageReturnIndex = null;\n        continue;\n      }\n\n      const endIndex =\n        this.#carriageReturnIndex !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n\n      const line = decodeUTF8(this.#buffer.subarray(0, endIndex));\n      lines.push(line);\n\n      this.#buffer = this.#buffer.subarray(patternIndex.index);\n      this.#carriageReturnIndex = null;\n    }\n\n    return lines;\n  }\n\n  flush(): string[] {\n    if (!this.#buffer.length) {\n      return [];\n    }\n    return this.decode('\\n');\n  }\n}\n\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(\n  buffer: Uint8Array,\n  startIndex: number | null,\n): { preceding: number; index: number; carriage: boolean } | null {\n  const newline = 0x0a; // \\n\n  const carriage = 0x0d; // \\r\n\n  for (let i = startIndex ?? 0; i < buffer.length; i++) {\n    if (buffer[i] === newline) {\n      return { preceding: i, index: i + 1, carriage: false };\n    }\n\n    if (buffer[i] === carriage) {\n      return { preceding: i, index: i + 1, carriage: true };\n    }\n  }\n\n  return null;\n}\n\nexport function findDoubleNewlineIndex(buffer: Uint8Array): number {\n  // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n  // and returns the index right after the first occurrence of any pattern,\n  // or -1 if none of the patterns are found.\n  const newline = 0x0a; // \\n\n  const carriage = 0x0d; // \\r\n\n  for (let i = 0; i < buffer.length - 1; i++) {\n    if (buffer[i] === newline && buffer[i + 1] === newline) {\n      // \\n\\n\n      return i + 2;\n    }\n    if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n      // \\r\\r\n      return i + 2;\n    }\n    if (\n      buffer[i] === carriage &&\n      buffer[i + 1] === newline &&\n      i + 3 < buffer.length &&\n      buffer[i + 2] === carriage &&\n      buffer[i + 3] === newline\n    ) {\n      // \\r\\n\\r\\n\n      return i + 4;\n    }\n  }\n\n  return -1;\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { hasOwn } from './values';\nimport { type Groq } from '../../client';\nimport { RequestOptions } from '../request-options';\n\ntype LogFn = (message: string, ...rest: unknown[]) => void;\nexport type Logger = {\n  error: LogFn;\n  warn: LogFn;\n  info: LogFn;\n  debug: LogFn;\n};\nexport type LogLevel = 'off' | 'error' | 'warn' | 'info' | 'debug';\n\nconst levelNumbers = {\n  off: 0,\n  error: 200,\n  warn: 300,\n  info: 400,\n  debug: 500,\n};\n\nexport const parseLogLevel = (\n  maybeLevel: string | undefined,\n  sourceName: string,\n  client: Groq,\n): LogLevel | undefined => {\n  if (!maybeLevel) {\n    return undefined;\n  }\n  if (hasOwn(levelNumbers, maybeLevel)) {\n    return maybeLevel;\n  }\n  loggerFor(client).warn(\n    `${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(\n      Object.keys(levelNumbers),\n    )}`,\n  );\n  return undefined;\n};\n\nfunction noop() {}\n\nfunction makeLogFn(fnLevel: keyof Logger, logger: Logger | undefined, logLevel: LogLevel) {\n  if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n    return noop;\n  } else {\n    // Don't wrap logger functions, we want the stacktrace intact!\n    return logger[fnLevel].bind(logger);\n  }\n}\n\nconst noopLogger = {\n  error: noop,\n  warn: noop,\n  info: noop,\n  debug: noop,\n};\n\nlet cachedLoggers = /* @__PURE__ */ new WeakMap<Logger, [LogLevel, Logger]>();\n\nexport function loggerFor(client: Groq): Logger {\n  const logger = client.logger;\n  const logLevel = client.logLevel ?? 'off';\n  if (!logger) {\n    return noopLogger;\n  }\n\n  const cachedLogger = cachedLoggers.get(logger);\n  if (cachedLogger && cachedLogger[0] === logLevel) {\n    return cachedLogger[1];\n  }\n\n  const levelLogger = {\n    error: makeLogFn('error', logger, logLevel),\n    warn: makeLogFn('warn', logger, logLevel),\n    info: makeLogFn('info', logger, logLevel),\n    debug: makeLogFn('debug', logger, logLevel),\n  };\n\n  cachedLoggers.set(logger, [logLevel, levelLogger]);\n\n  return levelLogger;\n}\n\nexport const formatRequestDetails = (details: {\n  options?: RequestOptions | undefined;\n  headers?: Headers | Record<string, string> | undefined;\n  retryOfRequestLogID?: string | undefined;\n  retryOf?: string | undefined;\n  url?: string | undefined;\n  status?: number | undefined;\n  method?: string | undefined;\n  durationMs?: number | undefined;\n  message?: unknown;\n  body?: unknown;\n}) => {\n  if (details.options) {\n    details.options = { ...details.options };\n    delete details.options['headers']; // redundant + leaks internals\n  }\n  if (details.headers) {\n    details.headers = Object.fromEntries(\n      (details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(\n        ([name, value]) => [\n          name,\n          (\n            name.toLowerCase() === 'authorization' ||\n            name.toLowerCase() === 'api-key' ||\n            name.toLowerCase() === 'x-api-key' ||\n            name.toLowerCase() === 'cookie' ||\n            name.toLowerCase() === 'set-cookie'\n          ) ?\n            '***'\n          : value,\n        ],\n      ),\n    );\n  }\n  if ('retryOfRequestLogID' in details) {\n    if (details.retryOfRequestLogID) {\n      details.retryOf = details.retryOfRequestLogID;\n    }\n    delete details.retryOfRequestLogID;\n  }\n  return details;\n};\n", "import { GroqError } from './error';\nimport { type ReadableStream } from '../internal/shim-types';\nimport { makeReadableStream } from '../internal/shims';\nimport { findDoubleNewlineIndex, LineDecoder } from '../internal/decoders/line';\nimport { ReadableStreamToAsyncIterable } from '../internal/shims';\nimport { isAbortError } from '../internal/errors';\nimport { encodeUTF8 } from '../internal/utils/bytes';\nimport { loggerFor } from '../internal/utils/log';\nimport type { Groq } from '../client';\n\nimport { APIError } from './error';\n\ntype Bytes = string | ArrayBuffer | Uint8Array | null | undefined;\n\nexport type ServerSentEvent = {\n  event: string | null;\n  data: string;\n  raw: string[];\n};\n\nexport class Stream<Item> implements AsyncIterable<Item> {\n  controller: AbortController;\n  #client: Groq | undefined;\n\n  constructor(\n    private iterator: () => AsyncIterator<Item>,\n    controller: AbortController,\n    client?: Groq,\n  ) {\n    this.controller = controller;\n    this.#client = client;\n  }\n\n  static fromSSEResponse<Item>(response: Response, controller: AbortController, client?: Groq): Stream<Item> {\n    let consumed = false;\n    const logger = client ? loggerFor(client) : console;\n\n    async function* iterator(): AsyncIterator<Item, any, undefined> {\n      if (consumed) {\n        throw new GroqError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n      }\n      consumed = true;\n      let done = false;\n      try {\n        for await (const sse of _iterSSEMessages(response, controller)) {\n          if (done) continue;\n\n          if (sse.data.startsWith('[DONE]')) {\n            done = true;\n            continue;\n          }\n\n          if (sse.event === null || !sse.event.startsWith('thread.')) {\n            let data;\n\n            try {\n              data = JSON.parse(sse.data);\n            } catch (e) {\n              logger.error(`Could not parse message into JSON:`, sse.data);\n              logger.error(`From chunk:`, sse.raw);\n              throw e;\n            }\n\n            if (data && data.error) {\n              throw new APIError(undefined, data.error, undefined, response.headers);\n            }\n\n            yield data;\n          } else {\n            let data;\n            try {\n              data = JSON.parse(sse.data);\n            } catch (e) {\n              console.error(`Could not parse message into JSON:`, sse.data);\n              console.error(`From chunk:`, sse.raw);\n              throw e;\n            }\n            // TODO: Is this where the error should be thrown?\n            if (sse.event == 'error') {\n              throw new APIError(undefined, data.error, data.message, undefined);\n            }\n            yield { event: sse.event, data: data } as any;\n          }\n        }\n        done = true;\n      } catch (e) {\n        // If the user calls `stream.controller.abort()`, we should exit without throwing.\n        if (isAbortError(e)) return;\n        throw e;\n      } finally {\n        // If the user `break`s, abort the ongoing request.\n        if (!done) controller.abort();\n      }\n    }\n\n    return new Stream(iterator, controller, client);\n  }\n\n  /**\n   * Generates a Stream from a newline-separated ReadableStream\n   * where each item is a JSON value.\n   */\n  static fromReadableStream<Item>(\n    readableStream: ReadableStream,\n    controller: AbortController,\n    client?: Groq,\n  ): Stream<Item> {\n    let consumed = false;\n\n    async function* iterLines(): AsyncGenerator<string, void, unknown> {\n      const lineDecoder = new LineDecoder();\n\n      const iter = ReadableStreamToAsyncIterable<Bytes>(readableStream);\n      for await (const chunk of iter) {\n        for (const line of lineDecoder.decode(chunk)) {\n          yield line;\n        }\n      }\n\n      for (const line of lineDecoder.flush()) {\n        yield line;\n      }\n    }\n\n    async function* iterator(): AsyncIterator<Item, any, undefined> {\n      if (consumed) {\n        throw new GroqError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n      }\n      consumed = true;\n      let done = false;\n      try {\n        for await (const line of iterLines()) {\n          if (done) continue;\n          if (line) yield JSON.parse(line);\n        }\n        done = true;\n      } catch (e) {\n        // If the user calls `stream.controller.abort()`, we should exit without throwing.\n        if (isAbortError(e)) return;\n        throw e;\n      } finally {\n        // If the user `break`s, abort the ongoing request.\n        if (!done) controller.abort();\n      }\n    }\n\n    return new Stream(iterator, controller, client);\n  }\n\n  [Symbol.asyncIterator](): AsyncIterator<Item> {\n    return this.iterator();\n  }\n\n  /**\n   * Splits the stream into two streams which can be\n   * independently read from at different speeds.\n   */\n  tee(): [Stream<Item>, Stream<Item>] {\n    const left: Array<Promise<IteratorResult<Item>>> = [];\n    const right: Array<Promise<IteratorResult<Item>>> = [];\n    const iterator = this.iterator();\n\n    const teeIterator = (queue: Array<Promise<IteratorResult<Item>>>): AsyncIterator<Item> => {\n      return {\n        next: () => {\n          if (queue.length === 0) {\n            const result = iterator.next();\n            left.push(result);\n            right.push(result);\n          }\n          return queue.shift()!;\n        },\n      };\n    };\n\n    return [\n      new Stream(() => teeIterator(left), this.controller, this.#client),\n      new Stream(() => teeIterator(right), this.controller, this.#client),\n    ];\n  }\n\n  /**\n   * Converts this stream to a newline-separated ReadableStream of\n   * JSON stringified values in the stream\n   * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n   */\n  toReadableStream(): ReadableStream {\n    const self = this;\n    let iter: AsyncIterator<Item>;\n\n    return makeReadableStream({\n      async start() {\n        iter = self[Symbol.asyncIterator]();\n      },\n      async pull(ctrl: any) {\n        try {\n          const { value, done } = await iter.next();\n          if (done) return ctrl.close();\n\n          const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n\n          ctrl.enqueue(bytes);\n        } catch (err) {\n          ctrl.error(err);\n        }\n      },\n      async cancel() {\n        await iter.return?.();\n      },\n    });\n  }\n}\n\nexport async function* _iterSSEMessages(\n  response: Response,\n  controller: AbortController,\n): AsyncGenerator<ServerSentEvent, void, unknown> {\n  if (!response.body) {\n    controller.abort();\n    if (\n      typeof (globalThis as any).navigator !== 'undefined' &&\n      (globalThis as any).navigator.product === 'ReactNative'\n    ) {\n      throw new GroqError(\n        `The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`,\n      );\n    }\n    throw new GroqError(`Attempted to iterate over a response with no body`);\n  }\n\n  const sseDecoder = new SSEDecoder();\n  const lineDecoder = new LineDecoder();\n\n  const iter = ReadableStreamToAsyncIterable<Bytes>(response.body);\n  for await (const sseChunk of iterSSEChunks(iter)) {\n    for (const line of lineDecoder.decode(sseChunk)) {\n      const sse = sseDecoder.decode(line);\n      if (sse) yield sse;\n    }\n  }\n\n  for (const line of lineDecoder.flush()) {\n    const sse = sseDecoder.decode(line);\n    if (sse) yield sse;\n  }\n}\n\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator: AsyncIterableIterator<Bytes>): AsyncGenerator<Uint8Array> {\n  let data = new Uint8Array();\n\n  for await (const chunk of iterator) {\n    if (chunk == null) {\n      continue;\n    }\n\n    const binaryChunk =\n      chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n      : typeof chunk === 'string' ? encodeUTF8(chunk)\n      : chunk;\n\n    let newData = new Uint8Array(data.length + binaryChunk.length);\n    newData.set(data);\n    newData.set(binaryChunk, data.length);\n    data = newData;\n\n    let patternIndex;\n    while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n      yield data.slice(0, patternIndex);\n      data = data.slice(patternIndex);\n    }\n  }\n\n  if (data.length > 0) {\n    yield data;\n  }\n}\n\nclass SSEDecoder {\n  private data: string[];\n  private event: string | null;\n  private chunks: string[];\n\n  constructor() {\n    this.event = null;\n    this.data = [];\n    this.chunks = [];\n  }\n\n  decode(line: string) {\n    if (line.endsWith('\\r')) {\n      line = line.substring(0, line.length - 1);\n    }\n\n    if (!line) {\n      // empty line and we didn't previously encounter any messages\n      if (!this.event && !this.data.length) return null;\n\n      const sse: ServerSentEvent = {\n        event: this.event,\n        data: this.data.join('\\n'),\n        raw: this.chunks,\n      };\n\n      this.event = null;\n      this.data = [];\n      this.chunks = [];\n\n      return sse;\n    }\n\n    this.chunks.push(line);\n\n    if (line.startsWith(':')) {\n      return null;\n    }\n\n    let [fieldname, _, value] = partition(line, ':');\n\n    if (value.startsWith(' ')) {\n      value = value.substring(1);\n    }\n\n    if (fieldname === 'event') {\n      this.event = value;\n    } else if (fieldname === 'data') {\n      this.data.push(value);\n    }\n\n    return null;\n  }\n}\n\nfunction partition(str: string, delimiter: string): [string, string, string] {\n  const index = str.indexOf(delimiter);\n  if (index !== -1) {\n    return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n  }\n\n  return [str, '', ''];\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport type { FinalRequestOptions } from './request-options';\nimport { type Groq } from '../client';\nimport { Stream } from '../core/streaming';\nimport { formatRequestDetails, loggerFor } from './utils/log';\n\nexport type APIResponseProps = {\n  response: Response;\n  options: FinalRequestOptions;\n  controller: AbortController;\n  requestLogID: string;\n  retryOfRequestLogID: string | undefined;\n  startTime: number;\n};\n\nexport async function defaultParseResponse<T>(client: Groq, props: APIResponseProps): Promise<T> {\n  const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n  const body = await (async () => {\n    // fetch refuses to read the body when the status code is 204.\n    if (response.status === 204) {\n      return null as T;\n    }\n\n    if (props.options.__binaryResponse) {\n      return response as unknown as T;\n    }\n\n    if (props.options.stream) {\n      return Stream.fromSSEResponse(response, props.controller, client) as unknown as T;\n    }\n\n    const contentType = response.headers.get('content-type');\n    const mediaType = contentType?.split(';')[0]?.trim();\n    const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n    if (isJSON) {\n      const contentLength = response.headers.get('content-length');\n      if (contentLength === '0') {\n        // if there is no content we can't do anything\n        return undefined as T;\n      }\n\n      const json = await response.json();\n      return json as T;\n    }\n\n    const text = await response.text();\n    return text as unknown as T;\n  })();\n  loggerFor(client).debug(\n    `[${requestLogID}] response parsed`,\n    formatRequestDetails({\n      retryOfRequestLogID,\n      url: response.url,\n      status: response.status,\n      body,\n      durationMs: Date.now() - startTime,\n    }),\n  );\n  return body;\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { type Groq } from '../client';\n\nimport { type PromiseOrValue } from '../internal/types';\nimport { APIResponseProps, defaultParseResponse } from '../internal/parse';\n\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise<T> extends Promise<T> {\n  private parsedPromise: Promise<T> | undefined;\n  #client: Groq;\n\n  constructor(\n    client: Groq,\n    private responsePromise: Promise<APIResponseProps>,\n    private parseResponse: (\n      client: Groq,\n      props: APIResponseProps,\n    ) => PromiseOrValue<T> = defaultParseResponse,\n  ) {\n    super((resolve) => {\n      // this is maybe a bit weird but this has to be a no-op to not implicitly\n      // parse the response body; instead .then, .catch, .finally are overridden\n      // to parse the response\n      resolve(null as any);\n    });\n    this.#client = client;\n  }\n\n  _thenUnwrap<U>(transform: (data: T, props: APIResponseProps) => U): APIPromise<U> {\n    return new APIPromise(this.#client, this.responsePromise, async (client, props) =>\n      transform(await this.parseResponse(client, props), props),\n    );\n  }\n\n  /**\n   * Gets the raw `Response` instance instead of parsing the response\n   * data.\n   *\n   * If you want to parse the response body but still get the `Response`\n   * instance, you can use {@link withResponse()}.\n   *\n   * \uD83D\uDC4B Getting the wrong TypeScript type for `Response`?\n   * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n   * to your `tsconfig.json`.\n   */\n  asResponse(): Promise<Response> {\n    return this.responsePromise.then((p) => p.response);\n  }\n\n  /**\n   * Gets the parsed response data and the raw `Response` instance.\n   *\n   * If you just want to get the raw `Response` instance without parsing it,\n   * you can use {@link asResponse()}.\n   *\n   * \uD83D\uDC4B Getting the wrong TypeScript type for `Response`?\n   * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n   * to your `tsconfig.json`.\n   */\n  async withResponse(): Promise<{ data: T; response: Response }> {\n    const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n    return { data, response };\n  }\n\n  private parse(): Promise<T> {\n    if (!this.parsedPromise) {\n      this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(this.#client, data));\n    }\n    return this.parsedPromise;\n  }\n\n  override then<TResult1 = T, TResult2 = never>(\n    onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n    onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n  ): Promise<TResult1 | TResult2> {\n    return this.parse().then(onfulfilled, onrejected);\n  }\n\n  override catch<TResult = never>(\n    onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,\n  ): Promise<T | TResult> {\n    return this.parse().catch(onrejected);\n  }\n\n  override finally(onfinally?: (() => void) | undefined | null): Promise<T> {\n    return this.parse().finally(onfinally);\n  }\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env: string): string | undefined => {\n  if (typeof (globalThis as any).process !== 'undefined') {\n    return (globalThis as any).process.env?.[env]?.trim() || undefined;\n  }\n  if (typeof (globalThis as any).Deno !== 'undefined') {\n    return (globalThis as any).Deno.env?.get?.(env)?.trim() || undefined;\n  }\n  return undefined;\n};\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport type { RequestInit, RequestInfo, BodyInit } from './internal/builtin-types';\nimport type { HTTPMethod, PromiseOrValue, MergedRequestInit, FinalizedRequestInit } from './internal/types';\nimport { uuid4 } from './internal/utils/uuid';\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from './internal/utils/values';\nimport { sleep } from './internal/utils/sleep';\nexport type { Logger, LogLevel } from './internal/utils/log';\nimport { castToError, isAbortError } from './internal/errors';\nimport type { APIResponseProps } from './internal/parse';\nimport { getPlatformHeaders } from './internal/detect-platform';\nimport * as Shims from './internal/shims';\nimport * as Opts from './internal/request-options';\nimport { stringifyQuery } from './internal/utils/query';\nimport { VERSION } from './version';\nimport * as Errors from './core/error';\nimport * as Uploads from './core/uploads';\nimport * as API from './resources/index';\nimport { APIPromise } from './core/api-promise';\nimport {\n  BatchCancelResponse,\n  BatchCreateParams,\n  BatchCreateResponse,\n  BatchListResponse,\n  BatchRetrieveResponse,\n  Batches,\n} from './resources/batches';\nimport { CompletionUsage, Completions } from './resources/completions';\nimport {\n  CreateEmbeddingResponse,\n  Embedding,\n  EmbeddingCreateParams,\n  Embeddings,\n} from './resources/embeddings';\nimport {\n  FileCreateParams,\n  FileCreateResponse,\n  FileDeleteResponse,\n  FileInfoResponse,\n  FileListResponse,\n  Files,\n} from './resources/files';\nimport { Model, ModelDeleted, ModelListResponse, Models } from './resources/models';\nimport { Audio } from './resources/audio/audio';\nimport { Chat } from './resources/chat/chat';\nimport { type Fetch } from './internal/builtin-types';\nimport { isRunningInBrowser } from './internal/detect-platform';\nimport { HeadersLike, NullableHeaders, buildHeaders } from './internal/headers';\nimport { FinalRequestOptions, RequestOptions } from './internal/request-options';\nimport { readEnv } from './internal/utils/env';\nimport {\n  type LogLevel,\n  type Logger,\n  formatRequestDetails,\n  loggerFor,\n  parseLogLevel,\n} from './internal/utils/log';\nimport { isEmptyObj } from './internal/utils/values';\n\nexport interface ClientOptions {\n  /**\n   * Defaults to process.env['GROQ_API_KEY'].\n   */\n  apiKey?: string | undefined;\n\n  /**\n   * Override the default base URL for the API, e.g., \"https://api.example.com/v2/\"\n   *\n   * Defaults to process.env['GROQ_BASE_URL'].\n   */\n  baseURL?: string | null | undefined;\n\n  /**\n   * The maximum amount of time (in milliseconds) that the client should wait for a response\n   * from the server before timing out a single request.\n   *\n   * Note that request timeouts are retried by default, so in a worst-case scenario you may wait\n   * much longer than this timeout before the promise succeeds or fails.\n   *\n   * @unit milliseconds\n   */\n  timeout?: number | undefined;\n  /**\n   * Additional `RequestInit` options to be passed to `fetch` calls.\n   * Properties will be overridden by per-request `fetchOptions`.\n   */\n  fetchOptions?: MergedRequestInit | undefined;\n\n  /**\n   * Specify a custom `fetch` function implementation.\n   *\n   * If not provided, we expect that `fetch` is defined globally.\n   */\n  fetch?: Fetch | undefined;\n\n  /**\n   * The maximum number of times that the client will retry a request in case of a\n   * temporary failure, like a network error or a 5XX error from the server.\n   *\n   * @default 2\n   */\n  maxRetries?: number | undefined;\n\n  /**\n   * Default headers to include with every request to the API.\n   *\n   * These can be removed in individual requests by explicitly setting the\n   * header to `null` in request options.\n   */\n  defaultHeaders?: HeadersLike | undefined;\n\n  /**\n   * Default query parameters to include with every request to the API.\n   *\n   * These can be removed in individual requests by explicitly setting the\n   * param to `undefined` in request options.\n   */\n  defaultQuery?: Record<string, string | undefined> | undefined;\n\n  /**\n   * By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n   * Only set this option to `true` if you understand the risks and have appropriate mitigations in place.\n   */\n  dangerouslyAllowBrowser?: boolean | undefined;\n\n  /**\n   * Set the log level.\n   *\n   * Defaults to process.env['GROQ_LOG'] or 'warn' if it isn't set.\n   */\n  logLevel?: LogLevel | undefined;\n\n  /**\n   * Set the logger.\n   *\n   * Defaults to globalThis.console.\n   */\n  logger?: Logger | undefined;\n}\n\n/**\n * API Client for interfacing with the Groq API.\n */\nexport class Groq {\n  apiKey: string;\n\n  baseURL: string;\n  maxRetries: number;\n  timeout: number;\n  logger: Logger;\n  logLevel: LogLevel | undefined;\n  fetchOptions: MergedRequestInit | undefined;\n\n  private fetch: Fetch;\n  #encoder: Opts.RequestEncoder;\n  protected idempotencyHeader?: string;\n  private _options: ClientOptions;\n\n  /**\n   * API Client for interfacing with the Groq API.\n   *\n   * @param {string | undefined} [opts.apiKey=process.env['GROQ_API_KEY'] ?? undefined]\n   * @param {string} [opts.baseURL=process.env['GROQ_BASE_URL'] ?? https://api.groq.com] - Override the default base URL for the API.\n   * @param {number} [opts.timeout=1 minute] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n   * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n   * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n   * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n   * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n   * @param {Record<string, string | undefined>} opts.defaultQuery - Default query parameters to include with every request to the API.\n   * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n   */\n  constructor({\n    baseURL = readEnv('GROQ_BASE_URL'),\n    apiKey = readEnv('GROQ_API_KEY'),\n    ...opts\n  }: ClientOptions = {}) {\n    if (apiKey === undefined) {\n      throw new Errors.GroqError(\n        \"The GROQ_API_KEY environment variable is missing or empty; either provide it, or instantiate the Groq client with an apiKey option, like new Groq({ apiKey: 'My API Key' }).\",\n      );\n    }\n\n    const options: ClientOptions = {\n      apiKey,\n      ...opts,\n      baseURL: baseURL || `https://api.groq.com`,\n    };\n\n    if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n      throw new Errors.GroqError(\n        \"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew Groq({ apiKey, dangerouslyAllowBrowser: true })\",\n      );\n    }\n\n    this.baseURL = options.baseURL!;\n    this.timeout = options.timeout ?? Groq.DEFAULT_TIMEOUT /* 1 minute */;\n    this.logger = options.logger ?? console;\n    const defaultLogLevel = 'warn';\n    // Set default logLevel early so that we can log a warning in parseLogLevel.\n    this.logLevel = defaultLogLevel;\n    this.logLevel =\n      parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n      parseLogLevel(readEnv('GROQ_LOG'), \"process.env['GROQ_LOG']\", this) ??\n      defaultLogLevel;\n    this.fetchOptions = options.fetchOptions;\n    this.maxRetries = options.maxRetries ?? 2;\n    this.fetch = options.fetch ?? Shims.getDefaultFetch();\n    this.#encoder = Opts.FallbackEncoder;\n\n    const customHeadersEnv = readEnv('GROQ_CUSTOM_HEADERS');\n    if (customHeadersEnv) {\n      const parsed: Record<string, string> = {};\n      for (const line of customHeadersEnv.split('\\n')) {\n        const colon = line.indexOf(':');\n        if (colon >= 0) {\n          parsed[line.substring(0, colon).trim()] = line.substring(colon + 1).trim();\n        }\n      }\n      options.defaultHeaders = { ...parsed, ...options.defaultHeaders };\n    }\n\n    this._options = options;\n\n    this.apiKey = apiKey;\n  }\n\n  /**\n   * Create a new client instance re-using the same options given to the current client with optional overriding.\n   */\n  withOptions(options: Partial<ClientOptions>): this {\n    const client = new (this.constructor as any as new (props: ClientOptions) => typeof this)({\n      ...this._options,\n      baseURL: this.baseURL,\n      maxRetries: this.maxRetries,\n      timeout: this.timeout,\n      logger: this.logger,\n      logLevel: this.logLevel,\n      fetch: this.fetch,\n      fetchOptions: this.fetchOptions,\n      apiKey: this.apiKey,\n      ...options,\n    });\n    return client;\n  }\n\n  /**\n   * Check whether the base URL is set to its default.\n   */\n  #baseURLOverridden(): boolean {\n    return this.baseURL !== 'https://api.groq.com';\n  }\n\n  protected defaultQuery(): Record<string, string | undefined> | undefined {\n    return this._options.defaultQuery;\n  }\n\n  protected validateHeaders({ values, nulls }: NullableHeaders) {\n    return;\n  }\n\n  protected async authHeaders(opts: FinalRequestOptions): Promise<NullableHeaders | undefined> {\n    return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n  }\n\n  /**\n   * Basic re-implementation of `qs.stringify` for primitive types.\n   */\n  protected stringifyQuery(query: object | Record<string, unknown>): string {\n    return stringifyQuery(query);\n  }\n\n  private getUserAgent(): string {\n    return `${this.constructor.name}/JS ${VERSION}`;\n  }\n\n  protected defaultIdempotencyKey(): string {\n    return `stainless-node-retry-${uuid4()}`;\n  }\n\n  protected makeStatusError(\n    status: number,\n    error: Object,\n    message: string | undefined,\n    headers: Headers,\n  ): Errors.APIError {\n    return Errors.APIError.generate(status, error, message, headers);\n  }\n\n  buildURL(\n    path: string,\n    query: Record<string, unknown> | null | undefined,\n    defaultBaseURL?: string | undefined,\n  ): string {\n    const baseURL = (!this.#baseURLOverridden() && defaultBaseURL) || this.baseURL;\n    const url =\n      isAbsoluteURL(path) ?\n        new URL(path)\n      : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n\n    const defaultQuery = this.defaultQuery();\n    const pathQuery = Object.fromEntries(url.searchParams);\n    if (!isEmptyObj(defaultQuery) || !isEmptyObj(pathQuery)) {\n      query = { ...pathQuery, ...defaultQuery, ...query };\n    }\n\n    if (typeof query === 'object' && query && !Array.isArray(query)) {\n      url.search = this.stringifyQuery(query);\n    }\n\n    return url.toString();\n  }\n\n  /**\n   * Used as a callback for mutating the given `FinalRequestOptions` object.\n   */\n  protected async prepareOptions(options: FinalRequestOptions): Promise<void> {}\n\n  /**\n   * Used as a callback for mutating the given `RequestInit` object.\n   *\n   * This is useful for cases where you want to add certain headers based off of\n   * the request properties, e.g. `method` or `url`.\n   */\n  protected async prepareRequest(\n    request: RequestInit,\n    { url, options }: { url: string; options: FinalRequestOptions },\n  ): Promise<void> {}\n\n  get<Rsp>(path: string, opts?: PromiseOrValue<RequestOptions>): APIPromise<Rsp> {\n    return this.methodRequest('get', path, opts);\n  }\n\n  post<Rsp>(path: string, opts?: PromiseOrValue<RequestOptions>): APIPromise<Rsp> {\n    return this.methodRequest('post', path, opts);\n  }\n\n  patch<Rsp>(path: string, opts?: PromiseOrValue<RequestOptions>): APIPromise<Rsp> {\n    return this.methodRequest('patch', path, opts);\n  }\n\n  put<Rsp>(path: string, opts?: PromiseOrValue<RequestOptions>): APIPromise<Rsp> {\n    return this.methodRequest('put', path, opts);\n  }\n\n  delete<Rsp>(path: string, opts?: PromiseOrValue<RequestOptions>): APIPromise<Rsp> {\n    return this.methodRequest('delete', path, opts);\n  }\n\n  private methodRequest<Rsp>(\n    method: HTTPMethod,\n    path: string,\n    opts?: PromiseOrValue<RequestOptions>,\n  ): APIPromise<Rsp> {\n    return this.request(\n      Promise.resolve(opts).then((opts) => {\n        return { method, path, ...opts };\n      }),\n    );\n  }\n\n  request<Rsp>(\n    options: PromiseOrValue<FinalRequestOptions>,\n    remainingRetries: number | null = null,\n  ): APIPromise<Rsp> {\n    return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n  }\n\n  private async makeRequest(\n    optionsInput: PromiseOrValue<FinalRequestOptions>,\n    retriesRemaining: number | null,\n    retryOfRequestLogID: string | undefined,\n  ): Promise<APIResponseProps> {\n    const options = await optionsInput;\n    const maxRetries = options.maxRetries ?? this.maxRetries;\n    if (retriesRemaining == null) {\n      retriesRemaining = maxRetries;\n    }\n\n    await this.prepareOptions(options);\n\n    const { req, url, timeout } = await this.buildRequest(options, {\n      retryCount: maxRetries - retriesRemaining,\n    });\n\n    await this.prepareRequest(req, { url, options });\n\n    /** Not an API request ID, just for correlating local log entries. */\n    const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n    const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n    const startTime = Date.now();\n\n    loggerFor(this).debug(\n      `[${requestLogID}] sending request`,\n      formatRequestDetails({\n        retryOfRequestLogID,\n        method: options.method,\n        url,\n        options,\n        headers: req.headers,\n      }),\n    );\n\n    if (options.signal?.aborted) {\n      throw new Errors.APIUserAbortError();\n    }\n\n    const controller = new AbortController();\n    const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n    const headersTime = Date.now();\n\n    if (response instanceof globalThis.Error) {\n      const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n      if (options.signal?.aborted) {\n        throw new Errors.APIUserAbortError();\n      }\n      // detect native connection timeout errors\n      // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n      // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n      // others do not provide enough information to distinguish timeouts from other connection errors\n      const isTimeout =\n        isAbortError(response) ||\n        /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n      if (retriesRemaining) {\n        loggerFor(this).info(\n          `[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`,\n        );\n        loggerFor(this).debug(\n          `[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`,\n          formatRequestDetails({\n            retryOfRequestLogID,\n            url,\n            durationMs: headersTime - startTime,\n            message: response.message,\n          }),\n        );\n        return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n      }\n      loggerFor(this).info(\n        `[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`,\n      );\n      loggerFor(this).debug(\n        `[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`,\n        formatRequestDetails({\n          retryOfRequestLogID,\n          url,\n          durationMs: headersTime - startTime,\n          message: response.message,\n        }),\n      );\n      if (isTimeout) {\n        throw new Errors.APIConnectionTimeoutError();\n      }\n      throw new Errors.APIConnectionError({ cause: response });\n    }\n\n    const responseInfo = `[${requestLogID}${retryLogStr}] ${req.method} ${url} ${\n      response.ok ? 'succeeded' : 'failed'\n    } with status ${response.status} in ${headersTime - startTime}ms`;\n\n    if (!response.ok) {\n      const shouldRetry = await this.shouldRetry(response);\n      if (retriesRemaining && shouldRetry) {\n        const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n\n        // We don't need the body of this response.\n        await Shims.CancelReadableStream(response.body);\n        loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n        loggerFor(this).debug(\n          `[${requestLogID}] response error (${retryMessage})`,\n          formatRequestDetails({\n            retryOfRequestLogID,\n            url: response.url,\n            status: response.status,\n            headers: response.headers,\n            durationMs: headersTime - startTime,\n          }),\n        );\n        return this.retryRequest(\n          options,\n          retriesRemaining,\n          retryOfRequestLogID ?? requestLogID,\n          response.headers,\n        );\n      }\n\n      const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n\n      loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n\n      const errText = await response.text().catch((err: any) => castToError(err).message);\n      const errJSON = safeJSON(errText) as any;\n      const errMessage = errJSON ? undefined : errText;\n\n      loggerFor(this).debug(\n        `[${requestLogID}] response error (${retryMessage})`,\n        formatRequestDetails({\n          retryOfRequestLogID,\n          url: response.url,\n          status: response.status,\n          headers: response.headers,\n          message: errMessage,\n          durationMs: Date.now() - startTime,\n        }),\n      );\n\n      const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n      throw err;\n    }\n\n    loggerFor(this).info(responseInfo);\n    loggerFor(this).debug(\n      `[${requestLogID}] response start`,\n      formatRequestDetails({\n        retryOfRequestLogID,\n        url: response.url,\n        status: response.status,\n        headers: response.headers,\n        durationMs: headersTime - startTime,\n      }),\n    );\n\n    return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n  }\n\n  async fetchWithTimeout(\n    url: RequestInfo,\n    init: RequestInit | undefined,\n    ms: number,\n    controller: AbortController,\n  ): Promise<Response> {\n    const { signal, method, ...options } = init || {};\n    const abort = this._makeAbort(controller);\n    if (signal) signal.addEventListener('abort', abort, { once: true });\n\n    const timeout = setTimeout(abort, ms);\n\n    const isReadableBody =\n      ((globalThis as any).ReadableStream && options.body instanceof (globalThis as any).ReadableStream) ||\n      (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n\n    const fetchOptions: RequestInit = {\n      signal: controller.signal as any,\n      ...(isReadableBody ? { duplex: 'half' } : {}),\n      method: 'GET',\n      ...options,\n    };\n    if (method) {\n      // Custom methods like 'patch' need to be uppercased\n      // See https://github.com/nodejs/undici/issues/2294\n      fetchOptions.method = method.toUpperCase();\n    }\n\n    try {\n      // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n      return await this.fetch.call(undefined, url, fetchOptions);\n    } finally {\n      clearTimeout(timeout);\n    }\n  }\n\n  private async shouldRetry(response: Response): Promise<boolean> {\n    // Note this is not a standard header.\n    const shouldRetryHeader = response.headers.get('x-should-retry');\n\n    // If the server explicitly says whether or not to retry, obey.\n    if (shouldRetryHeader === 'true') return true;\n    if (shouldRetryHeader === 'false') return false;\n\n    // Retry on request timeouts.\n    if (response.status === 408) return true;\n\n    // Retry on lock timeouts.\n    if (response.status === 409) return true;\n\n    // Retry on rate limits.\n    if (response.status === 429) return true;\n\n    // Retry internal errors.\n    if (response.status >= 500) return true;\n\n    return false;\n  }\n\n  private async retryRequest(\n    options: FinalRequestOptions,\n    retriesRemaining: number,\n    requestLogID: string,\n    responseHeaders?: Headers | undefined,\n  ): Promise<APIResponseProps> {\n    let timeoutMillis: number | undefined;\n\n    // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n    const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n    if (retryAfterMillisHeader) {\n      const timeoutMs = parseFloat(retryAfterMillisHeader);\n      if (!Number.isNaN(timeoutMs)) {\n        timeoutMillis = timeoutMs;\n      }\n    }\n\n    // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n    const retryAfterHeader = responseHeaders?.get('retry-after');\n    if (retryAfterHeader && !timeoutMillis) {\n      const timeoutSeconds = parseFloat(retryAfterHeader);\n      if (!Number.isNaN(timeoutSeconds)) {\n        timeoutMillis = timeoutSeconds * 1000;\n      } else {\n        timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n      }\n    }\n\n    // If the API asks us to wait a certain amount of time, just do what it\n    // says, but otherwise calculate a default\n    if (timeoutMillis === undefined) {\n      const maxRetries = options.maxRetries ?? this.maxRetries;\n      timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n    }\n    await sleep(timeoutMillis);\n\n    return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n  }\n\n  private calculateDefaultRetryTimeoutMillis(retriesRemaining: number, maxRetries: number): number {\n    const initialRetryDelay = 0.5;\n    const maxRetryDelay = 8.0;\n\n    const numRetries = maxRetries - retriesRemaining;\n\n    // Apply exponential backoff, but not more than the max.\n    const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n\n    // Apply some jitter, take up to at most 25 percent of the retry time.\n    const jitter = 1 - Math.random() * 0.25;\n\n    return sleepSeconds * jitter * 1000;\n  }\n\n  async buildRequest(\n    inputOptions: FinalRequestOptions,\n    { retryCount = 0 }: { retryCount?: number } = {},\n  ): Promise<{ req: FinalizedRequestInit; url: string; timeout: number }> {\n    const options = { ...inputOptions };\n    const { method, path, query, defaultBaseURL } = options;\n\n    const url = this.buildURL(path!, query as Record<string, unknown>, defaultBaseURL);\n    if ('timeout' in options) validatePositiveInteger('timeout', options.timeout);\n    options.timeout = options.timeout ?? this.timeout;\n    const { bodyHeaders, body } = this.buildBody({ options });\n    const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n\n    const req: FinalizedRequestInit = {\n      method,\n      headers: reqHeaders,\n      ...(options.signal && { signal: options.signal }),\n      ...((globalThis as any).ReadableStream &&\n        body instanceof (globalThis as any).ReadableStream && { duplex: 'half' }),\n      ...(body && { body }),\n      ...((this.fetchOptions as any) ?? {}),\n      ...((options.fetchOptions as any) ?? {}),\n    };\n\n    return { req, url, timeout: options.timeout };\n  }\n\n  private async buildHeaders({\n    options,\n    method,\n    bodyHeaders,\n    retryCount,\n  }: {\n    options: FinalRequestOptions;\n    method: HTTPMethod;\n    bodyHeaders: HeadersLike;\n    retryCount: number;\n  }): Promise<Headers> {\n    let idempotencyHeaders: HeadersLike = {};\n    if (this.idempotencyHeader && method !== 'get') {\n      if (!options.idempotencyKey) options.idempotencyKey = this.defaultIdempotencyKey();\n      idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n    }\n\n    const headers = buildHeaders([\n      idempotencyHeaders,\n      {\n        Accept: 'application/json',\n        'User-Agent': this.getUserAgent(),\n        'X-Stainless-Retry-Count': String(retryCount),\n        ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n        ...getPlatformHeaders(),\n      },\n      await this.authHeaders(options),\n      this._options.defaultHeaders,\n      bodyHeaders,\n      options.headers,\n    ]);\n\n    this.validateHeaders(headers);\n\n    return headers.values;\n  }\n\n  private _makeAbort(controller: AbortController) {\n    // note: we can't just inline this method inside `fetchWithTimeout()` because then the closure\n    //       would capture all request options, and cause a memory leak.\n    return () => controller.abort();\n  }\n\n  private buildBody({ options: { body, headers: rawHeaders } }: { options: FinalRequestOptions }): {\n    bodyHeaders: HeadersLike;\n    body: BodyInit | undefined;\n  } {\n    if (!body) {\n      return { bodyHeaders: undefined, body: undefined };\n    }\n    const headers = buildHeaders([rawHeaders]);\n    if (\n      // Pass raw type verbatim\n      ArrayBuffer.isView(body) ||\n      body instanceof ArrayBuffer ||\n      body instanceof DataView ||\n      (typeof body === 'string' &&\n        // Preserve legacy string encoding behavior for now\n        headers.values.has('content-type')) ||\n      // `Blob` is superset of `File`\n      ((globalThis as any).Blob && body instanceof (globalThis as any).Blob) ||\n      // `FormData` -> `multipart/form-data`\n      body instanceof FormData ||\n      // `URLSearchParams` -> `application/x-www-form-urlencoded`\n      body instanceof URLSearchParams ||\n      // Send chunked stream (each chunk has own `length`)\n      ((globalThis as any).ReadableStream && body instanceof (globalThis as any).ReadableStream)\n    ) {\n      return { bodyHeaders: undefined, body: body as BodyInit };\n    } else if (\n      typeof body === 'object' &&\n      (Symbol.asyncIterator in body ||\n        (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))\n    ) {\n      return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body as AsyncIterable<Uint8Array>) };\n    } else if (\n      typeof body === 'object' &&\n      headers.values.get('content-type') === 'application/x-www-form-urlencoded'\n    ) {\n      return {\n        bodyHeaders: { 'content-type': 'application/x-www-form-urlencoded' },\n        body: this.stringifyQuery(body),\n      };\n    } else {\n      return this.#encoder({ body, headers });\n    }\n  }\n\n  static Groq = this;\n  static DEFAULT_TIMEOUT = 60000; // 1 minute\n\n  static GroqError = Errors.GroqError;\n  static APIError = Errors.APIError;\n  static APIConnectionError = Errors.APIConnectionError;\n  static APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\n  static APIUserAbortError = Errors.APIUserAbortError;\n  static NotFoundError = Errors.NotFoundError;\n  static ConflictError = Errors.ConflictError;\n  static RateLimitError = Errors.RateLimitError;\n  static BadRequestError = Errors.BadRequestError;\n  static AuthenticationError = Errors.AuthenticationError;\n  static InternalServerError = Errors.InternalServerError;\n  static PermissionDeniedError = Errors.PermissionDeniedError;\n  static UnprocessableEntityError = Errors.UnprocessableEntityError;\n\n  static toFile = Uploads.toFile;\n\n  completions: API.Completions = new API.Completions(this);\n  chat: API.Chat = new API.Chat(this);\n  embeddings: API.Embeddings = new API.Embeddings(this);\n  audio: API.Audio = new API.Audio(this);\n  models: API.Models = new API.Models(this);\n  batches: API.Batches = new API.Batches(this);\n  files: API.Files = new API.Files(this);\n}\n\nGroq.Completions = Completions;\nGroq.Chat = Chat;\nGroq.Embeddings = Embeddings;\nGroq.Audio = Audio;\nGroq.Models = Models;\nGroq.Batches = Batches;\nGroq.Files = Files;\n\nexport declare namespace Groq {\n  export type RequestOptions = Opts.RequestOptions;\n\n  export { Completions as Completions, type CompletionUsage as CompletionUsage };\n\n  export { Chat as Chat };\n\n  export {\n    Embeddings as Embeddings,\n    type CreateEmbeddingResponse as CreateEmbeddingResponse,\n    type Embedding as Embedding,\n    type EmbeddingCreateParams as EmbeddingCreateParams,\n  };\n\n  export { Audio as Audio };\n\n  export {\n    Models as Models,\n    type Model as Model,\n    type ModelDeleted as ModelDeleted,\n    type ModelListResponse as ModelListResponse,\n  };\n\n  export {\n    Batches as Batches,\n    type BatchCreateResponse as BatchCreateResponse,\n    type BatchRetrieveResponse as BatchRetrieveResponse,\n    type BatchListResponse as BatchListResponse,\n    type BatchCancelResponse as BatchCancelResponse,\n    type BatchCreateParams as BatchCreateParams,\n  };\n\n  export {\n    Files as Files,\n    type FileCreateResponse as FileCreateResponse,\n    type FileListResponse as FileListResponse,\n    type FileDeleteResponse as FileDeleteResponse,\n    type FileInfoResponse as FileInfoResponse,\n    type FileCreateParams as FileCreateParams,\n  };\n\n  export type ErrorObject = API.ErrorObject;\n  export type FunctionDefinition = API.FunctionDefinition;\n  export type FunctionParameters = API.FunctionParameters;\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nexport { Groq as default } from './client';\n\nexport { type Uploadable, toFile } from './core/uploads';\nexport { APIPromise } from './core/api-promise';\nexport { Groq, type ClientOptions } from './client';\nexport {\n  GroqError,\n  APIError,\n  APIConnectionError,\n  APIConnectionTimeoutError,\n  APIUserAbortError,\n  NotFoundError,\n  ConflictError,\n  RateLimitError,\n  BadRequestError,\n  AuthenticationError,\n  InternalServerError,\n  PermissionDeniedError,\n  UnprocessableEntityError,\n} from './core/error';\n", "function __classPrivateFieldSet(receiver, state, value, kind, f) {\n    if (kind === \"m\")\n        throw new TypeError(\"Private method is not writable\");\n    if (kind === \"a\" && !f)\n        throw new TypeError(\"Private accessor was defined without a setter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n        throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n    return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n    if (kind === \"a\" && !f)\n        throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n        throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n  const { crypto } = globalThis as any;\n  if (crypto?.randomUUID) {\n    uuid4 = crypto.randomUUID.bind(crypto);\n    return crypto.randomUUID();\n  }\n  const u8 = new Uint8Array(1);\n  const randomByte = crypto ? () => crypto.getRandomValues(u8)[0]! : () => (Math.random() * 0xff) & 0xff;\n  return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) =>\n    (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16),\n  );\n};\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nexport function isAbortError(err: unknown) {\n  return (\n    typeof err === 'object' &&\n    err !== null &&\n    // Spec-compliant fetch implementations\n    (('name' in err && (err as any).name === 'AbortError') ||\n      // Expo fetch\n      ('message' in err && String((err as any).message).includes('FetchRequestCanceledException')))\n  );\n}\n\nexport const castToError = (err: any): Error => {\n  if (err instanceof Error) return err;\n  if (typeof err === 'object' && err !== null) {\n    try {\n      if (Object.prototype.toString.call(err) === '[object Error]') {\n        // @ts-ignore - not all envs have native support for cause yet\n        const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n        if (err.stack) error.stack = err.stack;\n        // @ts-ignore - not all envs have native support for cause yet\n        if (err.cause && !error.cause) error.cause = err.cause;\n        if (err.name) error.name = err.name;\n        return error;\n      }\n    } catch {}\n    try {\n      return new Error(JSON.stringify(err));\n    } catch {}\n  }\n  return new Error(err);\n};\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { castToError } from '../internal/errors';\nimport type { OAuthErrorCode } from '../resources/shared';\n\nexport class OpenAIError extends Error {}\n\nexport class APIError<\n  TStatus extends number | undefined = number | undefined,\n  THeaders extends Headers | undefined = Headers | undefined,\n  TError extends Object | undefined = Object | undefined,\n> extends OpenAIError {\n  /** HTTP status for the response that caused the error */\n  readonly status: TStatus;\n  /** HTTP headers for the response that caused the error */\n  readonly headers: THeaders;\n  /** JSON body of the response that caused the error */\n  readonly error: TError;\n\n  readonly code: string | null | undefined;\n  readonly param: string | null | undefined;\n  readonly type: string | undefined;\n\n  readonly requestID: string | null | undefined;\n\n  constructor(status: TStatus, error: TError, message: string | undefined, headers: THeaders) {\n    super(`${APIError.makeMessage(status, error, message)}`);\n    this.status = status;\n    this.headers = headers;\n    this.requestID = headers?.get('x-request-id');\n    this.error = error;\n\n    const data = error as Record<string, any>;\n    this.code = data?.['code'];\n    this.param = data?.['param'];\n    this.type = data?.['type'];\n  }\n\n  private static makeMessage(status: number | undefined, error: any, message: string | undefined) {\n    const msg =\n      error?.message ?\n        typeof error.message === 'string' ?\n          error.message\n        : JSON.stringify(error.message)\n      : error ? JSON.stringify(error)\n      : message;\n\n    if (status && msg) {\n      return `${status} ${msg}`;\n    }\n    if (status) {\n      return `${status} status code (no body)`;\n    }\n    if (msg) {\n      return msg;\n    }\n    return '(no status code or body)';\n  }\n\n  static generate(\n    status: number | undefined,\n    errorResponse: Object | undefined,\n    message: string | undefined,\n    headers: Headers | undefined,\n  ): APIError {\n    if (!status || !headers) {\n      return new APIConnectionError({ message, cause: castToError(errorResponse) });\n    }\n\n    const error = (errorResponse as Record<string, any>)?.['error'];\n\n    if (status === 400) {\n      return new BadRequestError(status, error, message, headers);\n    }\n\n    if (status === 401) {\n      return new AuthenticationError(status, error, message, headers);\n    }\n\n    if (status === 403) {\n      return new PermissionDeniedError(status, error, message, headers);\n    }\n\n    if (status === 404) {\n      return new NotFoundError(status, error, message, headers);\n    }\n\n    if (status === 409) {\n      return new ConflictError(status, error, message, headers);\n    }\n\n    if (status === 422) {\n      return new UnprocessableEntityError(status, error, message, headers);\n    }\n\n    if (status === 429) {\n      return new RateLimitError(status, error, message, headers);\n    }\n\n    if (status >= 500) {\n      return new InternalServerError(status, error, message, headers);\n    }\n\n    return new APIError(status, error, message, headers);\n  }\n}\n\nexport class APIUserAbortError extends APIError<undefined, undefined, undefined> {\n  constructor({ message }: { message?: string } = {}) {\n    super(undefined, undefined, message || 'Request was aborted.', undefined);\n  }\n}\n\nexport class APIConnectionError extends APIError<undefined, undefined, undefined> {\n  constructor({ message, cause }: { message?: string | undefined; cause?: Error | undefined }) {\n    super(undefined, undefined, message || 'Connection error.', undefined);\n    // in some environments the 'cause' property is already declared\n    // @ts-ignore\n    if (cause) this.cause = cause;\n  }\n}\n\nexport class APIConnectionTimeoutError extends APIConnectionError {\n  constructor({ message }: { message?: string } = {}) {\n    super({ message: message ?? 'Request timed out.' });\n  }\n}\n\nexport class BadRequestError extends APIError<400, Headers> {}\n\nexport class AuthenticationError extends APIError<401, Headers> {}\n\nexport class PermissionDeniedError extends APIError<403, Headers> {}\n\nexport class NotFoundError extends APIError<404, Headers> {}\n\nexport class ConflictError extends APIError<409, Headers> {}\n\nexport class UnprocessableEntityError extends APIError<422, Headers> {}\n\nexport class RateLimitError extends APIError<429, Headers> {}\n\nexport class InternalServerError extends APIError<number, Headers> {}\n\nexport class LengthFinishReasonError extends OpenAIError {\n  constructor() {\n    super(`Could not parse response content as the length limit was reached`);\n  }\n}\n\nexport class ContentFilterFinishReasonError extends OpenAIError {\n  constructor() {\n    super(`Could not parse response content as the request was rejected by the content filter`);\n  }\n}\n\nexport class InvalidWebhookSignatureError extends Error {\n  constructor(message: string) {\n    super(message);\n  }\n}\n\n/**\n * Error thrown by the API server during OAuth token exchange.\n * Can have status codes 400, 401, or 403.\n * Other status codes from OAuth endpoints are raised as normal APIError types.\n */\nexport class OAuthError extends APIError<400 | 401 | 403, Headers> {\n  readonly error_code: OAuthErrorCode | undefined;\n\n  constructor(status: 400 | 401 | 403, error: Object | undefined, headers: Headers) {\n    let finalMessage = 'OAuth2 authentication error';\n    let error_code: OAuthErrorCode | undefined = undefined;\n\n    if (error && typeof error === 'object') {\n      const errorData = error as Record<string, any>;\n      error_code = errorData['error'];\n      const description = errorData['error_description'];\n      if (description && typeof description === 'string') {\n        finalMessage = description;\n      } else if (error_code) {\n        finalMessage = error_code;\n      }\n    }\n\n    super(status, error, finalMessage, headers);\n    this.error_code = error_code;\n  }\n}\n\nexport class SubjectTokenProviderError extends OpenAIError {\n  readonly provider: string;\n  readonly cause: Error | undefined;\n\n  constructor(message: string, provider: string, cause?: Error) {\n    super(message);\n    this.provider = provider;\n    this.cause = cause;\n  }\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { OpenAIError } from '../../core/error';\n\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\n\nexport const isAbsoluteURL = (url: string): boolean => {\n  return startsWithSchemeRegexp.test(url);\n};\n\nexport let isArray = (val: unknown): val is unknown[] => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray as (val: unknown) => val is readonly unknown[];\n\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x: unknown): object {\n  if (typeof x !== 'object') {\n    return {};\n  }\n\n  return x ?? {};\n}\n\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj: Object | null | undefined): boolean {\n  if (!obj) return true;\n  for (const _k in obj) return false;\n  return true;\n}\n\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn<T extends object = object>(obj: T, key: PropertyKey): key is keyof T {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexport function isObj(obj: unknown): obj is Record<string, unknown> {\n  return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\n\nexport const ensurePresent = <T>(value: T | null | undefined): T => {\n  if (value == null) {\n    throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n  }\n\n  return value;\n};\n\nexport const validatePositiveInteger = (name: string, n: unknown): number => {\n  if (typeof n !== 'number' || !Number.isInteger(n)) {\n    throw new OpenAIError(`${name} must be an integer`);\n  }\n  if (n < 0) {\n    throw new OpenAIError(`${name} must be a positive integer`);\n  }\n  return n;\n};\n\nexport const coerceInteger = (value: unknown): number => {\n  if (typeof value === 'number') return Math.round(value);\n  if (typeof value === 'string') return parseInt(value, 10);\n\n  throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\n\nexport const coerceFloat = (value: unknown): number => {\n  if (typeof value === 'number') return value;\n  if (typeof value === 'string') return parseFloat(value);\n\n  throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\n\nexport const coerceBoolean = (value: unknown): boolean => {\n  if (typeof value === 'boolean') return value;\n  if (typeof value === 'string') return value === 'true';\n  return Boolean(value);\n};\n\nexport const maybeCoerceInteger = (value: unknown): number | undefined => {\n  if (value == null) {\n    return undefined;\n  }\n  return coerceInteger(value);\n};\n\nexport const maybeCoerceFloat = (value: unknown): number | undefined => {\n  if (value == null) {\n    return undefined;\n  }\n  return coerceFloat(value);\n};\n\nexport const maybeCoerceBoolean = (value: unknown): boolean | undefined => {\n  if (value == null) {\n    return undefined;\n  }\n  return coerceBoolean(value);\n};\n\nexport const safeJSON = (text: string) => {\n  try {\n    return JSON.parse(text);\n  } catch (err) {\n    return undefined;\n  }\n};\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nexport const sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));\n", "export const VERSION = '6.39.0'; // x-release-please-version\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { VERSION } from '../version';\n\nexport const isRunningInBrowser = () => {\n  return (\n    // @ts-ignore\n    typeof window !== 'undefined' &&\n    // @ts-ignore\n    typeof window.document !== 'undefined' &&\n    // @ts-ignore\n    typeof navigator !== 'undefined'\n  );\n};\n\ntype DetectedPlatform = 'deno' | 'node' | 'edge' | 'unknown';\n\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform(): DetectedPlatform {\n  if (typeof Deno !== 'undefined' && Deno.build != null) {\n    return 'deno';\n  }\n  if (typeof EdgeRuntime !== 'undefined') {\n    return 'edge';\n  }\n  if (\n    Object.prototype.toString.call(\n      typeof (globalThis as any).process !== 'undefined' ? (globalThis as any).process : 0,\n    ) === '[object process]'\n  ) {\n    return 'node';\n  }\n  return 'unknown';\n}\n\ndeclare const Deno: any;\ndeclare const EdgeRuntime: any;\ntype Arch = 'x32' | 'x64' | 'arm' | 'arm64' | `other:${string}` | 'unknown';\ntype PlatformName =\n  | 'MacOS'\n  | 'Linux'\n  | 'Windows'\n  | 'FreeBSD'\n  | 'OpenBSD'\n  | 'iOS'\n  | 'Android'\n  | `Other:${string}`\n  | 'Unknown';\ntype Browser = 'ie' | 'edge' | 'chrome' | 'firefox' | 'safari';\ntype PlatformProperties = {\n  'X-Stainless-Lang': 'js';\n  'X-Stainless-Package-Version': string;\n  'X-Stainless-OS': PlatformName;\n  'X-Stainless-Arch': Arch;\n  'X-Stainless-Runtime': 'node' | 'deno' | 'edge' | `browser:${Browser}` | 'unknown';\n  'X-Stainless-Runtime-Version': string;\n};\nconst getPlatformProperties = (): PlatformProperties => {\n  const detectedPlatform = getDetectedPlatform();\n  if (detectedPlatform === 'deno') {\n    return {\n      'X-Stainless-Lang': 'js',\n      'X-Stainless-Package-Version': VERSION,\n      'X-Stainless-OS': normalizePlatform(Deno.build.os),\n      'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n      'X-Stainless-Runtime': 'deno',\n      'X-Stainless-Runtime-Version':\n        typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n    };\n  }\n  if (typeof EdgeRuntime !== 'undefined') {\n    return {\n      'X-Stainless-Lang': 'js',\n      'X-Stainless-Package-Version': VERSION,\n      'X-Stainless-OS': 'Unknown',\n      'X-Stainless-Arch': `other:${EdgeRuntime}`,\n      'X-Stainless-Runtime': 'edge',\n      'X-Stainless-Runtime-Version': (globalThis as any).process.version,\n    };\n  }\n  // Check if Node.js\n  if (detectedPlatform === 'node') {\n    return {\n      'X-Stainless-Lang': 'js',\n      'X-Stainless-Package-Version': VERSION,\n      'X-Stainless-OS': normalizePlatform((globalThis as any).process.platform ?? 'unknown'),\n      'X-Stainless-Arch': normalizeArch((globalThis as any).process.arch ?? 'unknown'),\n      'X-Stainless-Runtime': 'node',\n      'X-Stainless-Runtime-Version': (globalThis as any).process.version ?? 'unknown',\n    };\n  }\n\n  const browserInfo = getBrowserInfo();\n  if (browserInfo) {\n    return {\n      'X-Stainless-Lang': 'js',\n      'X-Stainless-Package-Version': VERSION,\n      'X-Stainless-OS': 'Unknown',\n      'X-Stainless-Arch': 'unknown',\n      'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n      'X-Stainless-Runtime-Version': browserInfo.version,\n    };\n  }\n\n  // TODO add support for Cloudflare workers, etc.\n  return {\n    'X-Stainless-Lang': 'js',\n    'X-Stainless-Package-Version': VERSION,\n    'X-Stainless-OS': 'Unknown',\n    'X-Stainless-Arch': 'unknown',\n    'X-Stainless-Runtime': 'unknown',\n    'X-Stainless-Runtime-Version': 'unknown',\n  };\n};\n\ntype BrowserInfo = {\n  browser: Browser;\n  version: string;\n};\n\ndeclare const navigator: { userAgent: string } | undefined;\n\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo(): BrowserInfo | null {\n  if (typeof navigator === 'undefined' || !navigator) {\n    return null;\n  }\n\n  // NOTE: The order matters here!\n  const browserPatterns = [\n    { key: 'edge' as const, pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n    { key: 'ie' as const, pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n    { key: 'ie' as const, pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n    { key: 'chrome' as const, pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n    { key: 'firefox' as const, pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n    { key: 'safari' as const, pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n  ];\n\n  // Find the FIRST matching browser\n  for (const { key, pattern } of browserPatterns) {\n    const match = pattern.exec(navigator.userAgent);\n    if (match) {\n      const major = match[1] || 0;\n      const minor = match[2] || 0;\n      const patch = match[3] || 0;\n\n      return { browser: key, version: `${major}.${minor}.${patch}` };\n    }\n  }\n\n  return null;\n}\n\nconst normalizeArch = (arch: string): Arch => {\n  // Node docs:\n  // - https://nodejs.org/api/process.html#processarch\n  // Deno docs:\n  // - https://doc.deno.land/deno/stable/~/Deno.build\n  if (arch === 'x32') return 'x32';\n  if (arch === 'x86_64' || arch === 'x64') return 'x64';\n  if (arch === 'arm') return 'arm';\n  if (arch === 'aarch64' || arch === 'arm64') return 'arm64';\n  if (arch) return `other:${arch}`;\n  return 'unknown';\n};\n\nconst normalizePlatform = (platform: string): PlatformName => {\n  // Node platforms:\n  // - https://nodejs.org/api/process.html#processplatform\n  // Deno platforms:\n  // - https://doc.deno.land/deno/stable/~/Deno.build\n  // - https://github.com/denoland/deno/issues/14799\n\n  platform = platform.toLowerCase();\n\n  // NOTE: this iOS check is untested and may not work\n  // Node does not work natively on IOS, there is a fork at\n  // https://github.com/nodejs-mobile/nodejs-mobile\n  // however it is unknown at the time of writing how to detect if it is running\n  if (platform.includes('ios')) return 'iOS';\n  if (platform === 'android') return 'Android';\n  if (platform === 'darwin') return 'MacOS';\n  if (platform === 'win32') return 'Windows';\n  if (platform === 'freebsd') return 'FreeBSD';\n  if (platform === 'openbsd') return 'OpenBSD';\n  if (platform === 'linux') return 'Linux';\n  if (platform) return `Other:${platform}`;\n  return 'Unknown';\n};\n\nlet _platformHeaders: PlatformProperties;\nexport const getPlatformHeaders = () => {\n  return (_platformHeaders ??= getPlatformProperties());\n};\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\n/**\n * This module provides internal shims and utility functions for environments where certain Node.js or global types may not be available.\n *\n * These are used to ensure we can provide a consistent behaviour between different JavaScript environments and good error\n * messages in cases where an environment isn't fully supported.\n */\n\nimport type { Fetch } from './builtin-types';\nimport type { ReadableStream } from './shim-types';\n\nexport function getDefaultFetch(): Fetch {\n  if (typeof fetch !== 'undefined') {\n    return fetch as any;\n  }\n\n  throw new Error(\n    '`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`',\n  );\n}\n\ntype ReadableStreamArgs = ConstructorParameters<typeof ReadableStream>;\n\nexport function makeReadableStream(...args: ReadableStreamArgs): ReadableStream {\n  const ReadableStream = (globalThis as any).ReadableStream;\n  if (typeof ReadableStream === 'undefined') {\n    // Note: All of the platforms / runtimes we officially support already define\n    // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n    throw new Error(\n      '`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`',\n    );\n  }\n\n  return new ReadableStream(...args);\n}\n\nexport function ReadableStreamFrom<T>(iterable: Iterable<T> | AsyncIterable<T>): ReadableStream<T> {\n  let iter: AsyncIterator<T> | Iterator<T> =\n    Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n\n  return makeReadableStream({\n    start() {},\n    async pull(controller: any) {\n      const { done, value } = await iter.next();\n      if (done) {\n        controller.close();\n      } else {\n        controller.enqueue(value);\n      }\n    },\n    async cancel() {\n      await iter.return?.();\n    },\n  });\n}\n\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable<T>(stream: any): AsyncIterableIterator<T> {\n  if (stream[Symbol.asyncIterator]) return stream;\n\n  const reader = stream.getReader();\n  return {\n    async next() {\n      try {\n        const result = await reader.read();\n        if (result?.done) reader.releaseLock(); // release lock when stream becomes closed\n        return result;\n      } catch (e) {\n        reader.releaseLock(); // release lock when stream becomes errored\n        throw e;\n      }\n    },\n    async return() {\n      const cancelPromise = reader.cancel();\n      reader.releaseLock();\n      await cancelPromise;\n      return { done: true, value: undefined };\n    },\n    [Symbol.asyncIterator]() {\n      return this;\n    },\n  };\n}\n\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream: any): Promise<void> {\n  if (stream === null || typeof stream !== 'object') return;\n\n  if (stream[Symbol.asyncIterator]) {\n    await stream[Symbol.asyncIterator]().return?.();\n    return;\n  }\n\n  const reader = stream.getReader();\n  const cancelPromise = reader.cancel();\n  reader.releaseLock();\n  await cancelPromise;\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { NullableHeaders } from './headers';\n\nimport type { BodyInit } from './builtin-types';\nimport { Stream } from '../core/streaming';\nimport type { HTTPMethod, MergedRequestInit } from './types';\nimport { type HeadersLike } from './headers';\n\nexport type FinalRequestOptions = RequestOptions & { method: HTTPMethod; path: string };\n\nexport type RequestOptions = {\n  /**\n   * The HTTP method for the request (e.g., 'get', 'post', 'put', 'delete').\n   */\n  method?: HTTPMethod;\n\n  /**\n   * The URL path for the request.\n   *\n   * @example \"/v1/foo\"\n   */\n  path?: string;\n\n  /**\n   * Query parameters to include in the request URL.\n   */\n  query?: object | undefined | null;\n\n  /**\n   * The request body. Can be a string, JSON object, FormData, or other supported types.\n   */\n  body?: unknown;\n\n  /**\n   * HTTP headers to include with the request. Can be a Headers object, plain object, or array of tuples.\n   */\n  headers?: HeadersLike;\n\n  /**\n   * The maximum number of times that the client will retry a request in case of a\n   * temporary failure, like a network error or a 5XX error from the server.\n   *\n   * @default 2\n   */\n  maxRetries?: number;\n\n  stream?: boolean | undefined;\n\n  /**\n   * The maximum amount of time (in milliseconds) that the client should wait for a response\n   * from the server before timing out a single request.\n   *\n   * @unit milliseconds\n   */\n  timeout?: number;\n\n  /**\n   * Additional `RequestInit` options to be passed to the underlying `fetch` call.\n   * These options will be merged with the client's default fetch options.\n   */\n  fetchOptions?: MergedRequestInit;\n\n  /**\n   * An AbortSignal that can be used to cancel the request.\n   */\n  signal?: AbortSignal | undefined | null;\n\n  /**\n   * A unique key for this request to enable idempotency.\n   */\n  idempotencyKey?: string;\n\n  /**\n   * Override the default base URL for this specific request.\n   */\n  defaultBaseURL?: string | undefined;\n\n  __metadata?: Record<string, unknown>;\n  __security?: { bearerAuth?: boolean; adminAPIKeyAuth?: boolean };\n  __binaryResponse?: boolean | undefined;\n  __streamClass?: typeof Stream;\n  __synthesizeEventData?: boolean;\n};\n\nexport type EncodedContent = { bodyHeaders: HeadersLike; body: BodyInit };\nexport type RequestEncoder = (request: { headers: NullableHeaders; body: unknown }) => EncodedContent;\n\nexport const FallbackEncoder: RequestEncoder = ({ headers, body }) => {\n  return {\n    bodyHeaders: {\n      'content-type': 'application/json',\n    },\n    body: JSON.stringify(body),\n  };\n};\n", "import type { Format } from './types';\n\nexport const default_format: Format = 'RFC3986';\nexport const default_formatter = (v: PropertyKey) => String(v);\nexport const formatters: Record<Format, (str: PropertyKey) => string> = {\n  RFC1738: (v: PropertyKey) => String(v).replace(/%20/g, '+'),\n  RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n", "import { RFC1738 } from './formats';\nimport type { DefaultEncoder, Format } from './types';\nimport { isArray } from '../utils/values';\n\nexport let has = (obj: object, key: PropertyKey): boolean => (\n  (has = (Object as any).hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n  has(obj, key)\n);\n\nconst hex_table = /* @__PURE__ */ (() => {\n  const array = [];\n  for (let i = 0; i < 256; ++i) {\n    array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n  }\n\n  return array;\n})();\n\nfunction compact_queue<T extends Record<string, any>>(queue: Array<{ obj: T; prop: string }>) {\n  while (queue.length > 1) {\n    const item = queue.pop();\n    if (!item) continue;\n\n    const obj = item.obj[item.prop];\n\n    if (isArray(obj)) {\n      const compacted: unknown[] = [];\n\n      for (let j = 0; j < obj.length; ++j) {\n        if (typeof obj[j] !== 'undefined') {\n          compacted.push(obj[j]);\n        }\n      }\n\n      // @ts-ignore\n      item.obj[item.prop] = compacted;\n    }\n  }\n}\n\nfunction array_to_object(source: any[], options: { plainObjects: boolean }) {\n  const obj = options && options.plainObjects ? Object.create(null) : {};\n  for (let i = 0; i < source.length; ++i) {\n    if (typeof source[i] !== 'undefined') {\n      obj[i] = source[i];\n    }\n  }\n\n  return obj;\n}\n\nexport function merge(\n  target: any,\n  source: any,\n  options: { plainObjects?: boolean; allowPrototypes?: boolean } = {},\n) {\n  if (!source) {\n    return target;\n  }\n\n  if (typeof source !== 'object') {\n    if (isArray(target)) {\n      target.push(source);\n    } else if (target && typeof target === 'object') {\n      if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n        target[source] = true;\n      }\n    } else {\n      return [target, source];\n    }\n\n    return target;\n  }\n\n  if (!target || typeof target !== 'object') {\n    return [target].concat(source);\n  }\n\n  let mergeTarget = target;\n  if (isArray(target) && !isArray(source)) {\n    // @ts-ignore\n    mergeTarget = array_to_object(target, options);\n  }\n\n  if (isArray(target) && isArray(source)) {\n    source.forEach(function (item, i) {\n      if (has(target, i)) {\n        const targetItem = target[i];\n        if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n          target[i] = merge(targetItem, item, options);\n        } else {\n          target.push(item);\n        }\n      } else {\n        target[i] = item;\n      }\n    });\n    return target;\n  }\n\n  return Object.keys(source).reduce(function (acc, key) {\n    const value = source[key];\n\n    if (has(acc, key)) {\n      acc[key] = merge(acc[key], value, options);\n    } else {\n      acc[key] = value;\n    }\n    return acc;\n  }, mergeTarget);\n}\n\nexport function assign_single_source(target: any, source: any) {\n  return Object.keys(source).reduce(function (acc, key) {\n    acc[key] = source[key];\n    return acc;\n  }, target);\n}\n\nexport function decode(str: string, _: any, charset: string) {\n  const strWithoutPlus = str.replace(/\\+/g, ' ');\n  if (charset === 'iso-8859-1') {\n    // unescape never throws, no try...catch needed:\n    return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n  }\n  // utf-8\n  try {\n    return decodeURIComponent(strWithoutPlus);\n  } catch (e) {\n    return strWithoutPlus;\n  }\n}\n\nconst limit = 1024;\n\nexport const encode: (\n  str: any,\n  defaultEncoder: DefaultEncoder,\n  charset: string,\n  type: 'key' | 'value',\n  format: Format,\n) => string = (str, _defaultEncoder, charset, _kind, format: Format) => {\n  // This code was originally written by Brian White for the io.js core querystring library.\n  // It has been adapted here for stricter adherence to RFC 3986\n  if (str.length === 0) {\n    return str;\n  }\n\n  let string = str;\n  if (typeof str === 'symbol') {\n    string = Symbol.prototype.toString.call(str);\n  } else if (typeof str !== 'string') {\n    string = String(str);\n  }\n\n  if (charset === 'iso-8859-1') {\n    return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n      return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n    });\n  }\n\n  let out = '';\n  for (let j = 0; j < string.length; j += limit) {\n    const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n    const arr = [];\n\n    for (let i = 0; i < segment.length; ++i) {\n      let c = segment.charCodeAt(i);\n      if (\n        c === 0x2d || // -\n        c === 0x2e || // .\n        c === 0x5f || // _\n        c === 0x7e || // ~\n        (c >= 0x30 && c <= 0x39) || // 0-9\n        (c >= 0x41 && c <= 0x5a) || // a-z\n        (c >= 0x61 && c <= 0x7a) || // A-Z\n        (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n      ) {\n        arr[arr.length] = segment.charAt(i);\n        continue;\n      }\n\n      if (c < 0x80) {\n        arr[arr.length] = hex_table[c];\n        continue;\n      }\n\n      if (c < 0x800) {\n        arr[arr.length] = hex_table[0xc0 | (c >> 6)]! + hex_table[0x80 | (c & 0x3f)];\n        continue;\n      }\n\n      if (c < 0xd800 || c >= 0xe000) {\n        arr[arr.length] =\n          hex_table[0xe0 | (c >> 12)]! + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n        continue;\n      }\n\n      i += 1;\n      c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n\n      arr[arr.length] =\n        hex_table[0xf0 | (c >> 18)]! +\n        hex_table[0x80 | ((c >> 12) & 0x3f)] +\n        hex_table[0x80 | ((c >> 6) & 0x3f)] +\n        hex_table[0x80 | (c & 0x3f)];\n    }\n\n    out += arr.join('');\n  }\n\n  return out;\n};\n\nexport function compact(value: any) {\n  const queue = [{ obj: { o: value }, prop: 'o' }];\n  const refs = [];\n\n  for (let i = 0; i < queue.length; ++i) {\n    const item = queue[i];\n    // @ts-ignore\n    const obj = item.obj[item.prop];\n\n    const keys = Object.keys(obj);\n    for (let j = 0; j < keys.length; ++j) {\n      const key = keys[j]!;\n      const val = obj[key];\n      if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n        queue.push({ obj: obj, prop: key });\n        refs.push(val);\n      }\n    }\n  }\n\n  compact_queue(queue);\n\n  return value;\n}\n\nexport function is_regexp(obj: any) {\n  return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\n\nexport function is_buffer(obj: any) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\n\nexport function combine(a: any, b: any) {\n  return [].concat(a, b);\n}\n\nexport function maybe_map<T>(val: T[], fn: (v: T) => T) {\n  if (isArray(val)) {\n    const mapped = [];\n    for (let i = 0; i < val.length; i += 1) {\n      mapped.push(fn(val[i]!));\n    }\n    return mapped;\n  }\n  return fn(val);\n}\n", "import { encode, is_buffer, maybe_map, has } from './utils';\nimport { default_format, default_formatter, formatters } from './formats';\nimport type { NonNullableProperties, StringifyOptions } from './types';\nimport { isArray } from '../utils/values';\n\nconst array_prefix_generators = {\n  brackets(prefix: PropertyKey) {\n    return String(prefix) + '[]';\n  },\n  comma: 'comma',\n  indices(prefix: PropertyKey, key: string) {\n    return String(prefix) + '[' + key + ']';\n  },\n  repeat(prefix: PropertyKey) {\n    return String(prefix);\n  },\n};\n\nconst push_to_array = function (arr: any[], value_or_array: any) {\n  Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\n\nlet toISOString;\n\nconst defaults = {\n  addQueryPrefix: false,\n  allowDots: false,\n  allowEmptyArrays: false,\n  arrayFormat: 'indices',\n  charset: 'utf-8',\n  charsetSentinel: false,\n  delimiter: '&',\n  encode: true,\n  encodeDotInKeys: false,\n  encoder: encode,\n  encodeValuesOnly: false,\n  format: default_format,\n  formatter: default_formatter,\n  /** @deprecated */\n  indices: false,\n  serializeDate(date) {\n    return (toISOString ??= Function.prototype.call.bind(Date.prototype.toISOString))(date);\n  },\n  skipNulls: false,\n  strictNullHandling: false,\n} as NonNullableProperties<StringifyOptions & { formatter: (typeof formatters)['RFC1738'] }>;\n\nfunction is_non_nullish_primitive(v: unknown): v is string | number | boolean | symbol | bigint {\n  return (\n    typeof v === 'string' ||\n    typeof v === 'number' ||\n    typeof v === 'boolean' ||\n    typeof v === 'symbol' ||\n    typeof v === 'bigint'\n  );\n}\n\nconst sentinel = {};\n\nfunction inner_stringify(\n  object: any,\n  prefix: PropertyKey,\n  generateArrayPrefix: StringifyOptions['arrayFormat'] | ((prefix: string, key: string) => string),\n  commaRoundTrip: boolean,\n  allowEmptyArrays: boolean,\n  strictNullHandling: boolean,\n  skipNulls: boolean,\n  encodeDotInKeys: boolean,\n  encoder: StringifyOptions['encoder'],\n  filter: StringifyOptions['filter'],\n  sort: StringifyOptions['sort'],\n  allowDots: StringifyOptions['allowDots'],\n  serializeDate: StringifyOptions['serializeDate'],\n  format: StringifyOptions['format'],\n  formatter: StringifyOptions['formatter'],\n  encodeValuesOnly: boolean,\n  charset: StringifyOptions['charset'],\n  sideChannel: WeakMap<any, any>,\n) {\n  let obj = object;\n\n  let tmp_sc = sideChannel;\n  let step = 0;\n  let find_flag = false;\n  while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n    // Where object last appeared in the ref tree\n    const pos = tmp_sc.get(object);\n    step += 1;\n    if (typeof pos !== 'undefined') {\n      if (pos === step) {\n        throw new RangeError('Cyclic object value');\n      } else {\n        find_flag = true; // Break while\n      }\n    }\n    if (typeof tmp_sc.get(sentinel) === 'undefined') {\n      step = 0;\n    }\n  }\n\n  if (typeof filter === 'function') {\n    obj = filter(prefix, obj);\n  } else if (obj instanceof Date) {\n    obj = serializeDate?.(obj);\n  } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n    obj = maybe_map(obj, function (value) {\n      if (value instanceof Date) {\n        return serializeDate?.(value);\n      }\n      return value;\n    });\n  }\n\n  if (obj === null) {\n    if (strictNullHandling) {\n      return encoder && !encodeValuesOnly ?\n          // @ts-expect-error\n          encoder(prefix, defaults.encoder, charset, 'key', format)\n        : prefix;\n    }\n\n    obj = '';\n  }\n\n  if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n    if (encoder) {\n      const key_value =\n        encodeValuesOnly ? prefix\n          // @ts-expect-error\n        : encoder(prefix, defaults.encoder, charset, 'key', format);\n      return [\n        formatter?.(key_value) +\n          '=' +\n          // @ts-expect-error\n          formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n      ];\n    }\n    return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n  }\n\n  const values: string[] = [];\n\n  if (typeof obj === 'undefined') {\n    return values;\n  }\n\n  let obj_keys;\n  if (generateArrayPrefix === 'comma' && isArray(obj)) {\n    // we need to join elements in\n    if (encodeValuesOnly && encoder) {\n      // @ts-expect-error values only\n      obj = maybe_map(obj, encoder);\n    }\n    obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n  } else if (isArray(filter)) {\n    obj_keys = filter;\n  } else {\n    const keys = Object.keys(obj);\n    obj_keys = sort ? keys.sort(sort) : keys;\n  }\n\n  const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n\n  const adjusted_prefix =\n    commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n\n  if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n    return adjusted_prefix + '[]';\n  }\n\n  for (let j = 0; j < obj_keys.length; ++j) {\n    const key = obj_keys[j];\n    const value =\n      // @ts-ignore\n      typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key as any];\n\n    if (skipNulls && value === null) {\n      continue;\n    }\n\n    // @ts-ignore\n    const encoded_key = allowDots && encodeDotInKeys ? (key as any).replace(/\\./g, '%2E') : key;\n    const key_prefix =\n      isArray(obj) ?\n        typeof generateArrayPrefix === 'function' ?\n          generateArrayPrefix(adjusted_prefix, encoded_key)\n        : adjusted_prefix\n      : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n\n    sideChannel.set(object, step);\n    const valueSideChannel = new WeakMap();\n    valueSideChannel.set(sentinel, sideChannel);\n    push_to_array(\n      values,\n      inner_stringify(\n        value,\n        key_prefix,\n        generateArrayPrefix,\n        commaRoundTrip,\n        allowEmptyArrays,\n        strictNullHandling,\n        skipNulls,\n        encodeDotInKeys,\n        // @ts-ignore\n        generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n        filter,\n        sort,\n        allowDots,\n        serializeDate,\n        format,\n        formatter,\n        encodeValuesOnly,\n        charset,\n        valueSideChannel,\n      ),\n    );\n  }\n\n  return values;\n}\n\nfunction normalize_stringify_options(\n  opts: StringifyOptions = defaults,\n): NonNullableProperties<Omit<StringifyOptions, 'indices'>> & { indices?: boolean } {\n  if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n    throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n  }\n\n  if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n    throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n  }\n\n  if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n    throw new TypeError('Encoder has to be a function.');\n  }\n\n  const charset = opts.charset || defaults.charset;\n  if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n    throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n  }\n\n  let format = default_format;\n  if (typeof opts.format !== 'undefined') {\n    if (!has(formatters, opts.format)) {\n      throw new TypeError('Unknown format option provided.');\n    }\n    format = opts.format;\n  }\n  const formatter = formatters[format];\n\n  let filter = defaults.filter;\n  if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n    filter = opts.filter;\n  }\n\n  let arrayFormat: StringifyOptions['arrayFormat'];\n  if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n    arrayFormat = opts.arrayFormat;\n  } else if ('indices' in opts) {\n    arrayFormat = opts.indices ? 'indices' : 'repeat';\n  } else {\n    arrayFormat = defaults.arrayFormat;\n  }\n\n  if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n    throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n  }\n\n  const allowDots =\n    typeof opts.allowDots === 'undefined' ?\n      !!opts.encodeDotInKeys === true ?\n        true\n      : defaults.allowDots\n    : !!opts.allowDots;\n\n  return {\n    addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n    // @ts-ignore\n    allowDots: allowDots,\n    allowEmptyArrays:\n      typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n    arrayFormat: arrayFormat,\n    charset: charset,\n    charsetSentinel:\n      typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n    commaRoundTrip: !!opts.commaRoundTrip,\n    delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n    encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n    encodeDotInKeys:\n      typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n    encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n    encodeValuesOnly:\n      typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n    filter: filter,\n    format: format,\n    formatter: formatter,\n    serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n    skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n    // @ts-ignore\n    sort: typeof opts.sort === 'function' ? opts.sort : null,\n    strictNullHandling:\n      typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n  };\n}\n\nexport function stringify(object: any, opts: StringifyOptions = {}) {\n  let obj = object;\n  const options = normalize_stringify_options(opts);\n\n  let obj_keys: PropertyKey[] | undefined;\n  let filter;\n\n  if (typeof options.filter === 'function') {\n    filter = options.filter;\n    obj = filter('', obj);\n  } else if (isArray(options.filter)) {\n    filter = options.filter;\n    obj_keys = filter;\n  }\n\n  const keys: string[] = [];\n\n  if (typeof obj !== 'object' || obj === null) {\n    return '';\n  }\n\n  const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n  const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n\n  if (!obj_keys) {\n    obj_keys = Object.keys(obj);\n  }\n\n  if (options.sort) {\n    obj_keys.sort(options.sort);\n  }\n\n  const sideChannel = new WeakMap();\n  for (let i = 0; i < obj_keys.length; ++i) {\n    const key = obj_keys[i]!;\n\n    if (options.skipNulls && obj[key] === null) {\n      continue;\n    }\n    push_to_array(\n      keys,\n      inner_stringify(\n        obj[key],\n        key,\n        // @ts-expect-error\n        generateArrayPrefix,\n        commaRoundTrip,\n        options.allowEmptyArrays,\n        options.strictNullHandling,\n        options.skipNulls,\n        options.encodeDotInKeys,\n        options.encode ? options.encoder : null,\n        options.filter,\n        options.sort,\n        options.allowDots,\n        options.serializeDate,\n        options.format,\n        options.formatter,\n        options.encodeValuesOnly,\n        options.charset,\n        sideChannel,\n      ),\n    );\n  }\n\n  const joined = keys.join(options.delimiter);\n  let prefix = options.addQueryPrefix === true ? '?' : '';\n\n  if (options.charsetSentinel) {\n    if (options.charset === 'iso-8859-1') {\n      // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n      prefix += 'utf8=%26%2310003%3B&';\n    } else {\n      // encodeURIComponent('\u2713')\n      prefix += 'utf8=%E2%9C%93&';\n    }\n  }\n\n  return joined.length > 0 ? prefix + joined : '';\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport * as qs from '../qs/stringify';\n\nexport function stringifyQuery(query: object | Record<string, unknown>) {\n  return qs.stringify(query, { arrayFormat: 'brackets' });\n}\n", "export function concatBytes(buffers: Uint8Array[]): Uint8Array {\n  let length = 0;\n  for (const buffer of buffers) {\n    length += buffer.length;\n  }\n  const output = new Uint8Array(length);\n  let index = 0;\n  for (const buffer of buffers) {\n    output.set(buffer, index);\n    index += buffer.length;\n  }\n\n  return output;\n}\n\nlet encodeUTF8_: (str: string) => Uint8Array;\nexport function encodeUTF8(str: string) {\n  let encoder;\n  return (\n    encodeUTF8_ ??\n    ((encoder = new (globalThis as any).TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder)))\n  )(str);\n}\n\nlet decodeUTF8_: (bytes: Uint8Array) => string;\nexport function decodeUTF8(bytes: Uint8Array) {\n  let decoder;\n  return (\n    decodeUTF8_ ??\n    ((decoder = new (globalThis as any).TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder)))\n  )(bytes);\n}\n", "import { concatBytes, decodeUTF8, encodeUTF8 } from '../utils/bytes';\n\nexport type Bytes = string | ArrayBuffer | Uint8Array | null | undefined;\n\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n  // prettier-ignore\n  static NEWLINE_CHARS = new Set(['\\n', '\\r']);\n  static NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n\n  #buffer: Uint8Array;\n  #carriageReturnIndex: number | null;\n\n  constructor() {\n    this.#buffer = new Uint8Array();\n    this.#carriageReturnIndex = null;\n  }\n\n  decode(chunk: Bytes): string[] {\n    if (chunk == null) {\n      return [];\n    }\n\n    const binaryChunk =\n      chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n      : typeof chunk === 'string' ? encodeUTF8(chunk)\n      : chunk;\n\n    this.#buffer = concatBytes([this.#buffer, binaryChunk]);\n\n    const lines: string[] = [];\n    let patternIndex;\n    while ((patternIndex = findNewlineIndex(this.#buffer, this.#carriageReturnIndex)) != null) {\n      if (patternIndex.carriage && this.#carriageReturnIndex == null) {\n        // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n        this.#carriageReturnIndex = patternIndex.index;\n        continue;\n      }\n\n      // we got double \\r or \\rtext\\n\n      if (\n        this.#carriageReturnIndex != null &&\n        (patternIndex.index !== this.#carriageReturnIndex + 1 || patternIndex.carriage)\n      ) {\n        lines.push(decodeUTF8(this.#buffer.subarray(0, this.#carriageReturnIndex - 1)));\n        this.#buffer = this.#buffer.subarray(this.#carriageReturnIndex);\n        this.#carriageReturnIndex = null;\n        continue;\n      }\n\n      const endIndex =\n        this.#carriageReturnIndex !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n\n      const line = decodeUTF8(this.#buffer.subarray(0, endIndex));\n      lines.push(line);\n\n      this.#buffer = this.#buffer.subarray(patternIndex.index);\n      this.#carriageReturnIndex = null;\n    }\n\n    return lines;\n  }\n\n  flush(): string[] {\n    if (!this.#buffer.length) {\n      return [];\n    }\n    return this.decode('\\n');\n  }\n}\n\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(\n  buffer: Uint8Array,\n  startIndex: number | null,\n): { preceding: number; index: number; carriage: boolean } | null {\n  const newline = 0x0a; // \\n\n  const carriage = 0x0d; // \\r\n\n  for (let i = startIndex ?? 0; i < buffer.length; i++) {\n    if (buffer[i] === newline) {\n      return { preceding: i, index: i + 1, carriage: false };\n    }\n\n    if (buffer[i] === carriage) {\n      return { preceding: i, index: i + 1, carriage: true };\n    }\n  }\n\n  return null;\n}\n\nexport function findDoubleNewlineIndex(buffer: Uint8Array): number {\n  // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n  // and returns the index right after the first occurrence of any pattern,\n  // or -1 if none of the patterns are found.\n  const newline = 0x0a; // \\n\n  const carriage = 0x0d; // \\r\n\n  for (let i = 0; i < buffer.length - 1; i++) {\n    if (buffer[i] === newline && buffer[i + 1] === newline) {\n      // \\n\\n\n      return i + 2;\n    }\n    if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n      // \\r\\r\n      return i + 2;\n    }\n    if (\n      buffer[i] === carriage &&\n      buffer[i + 1] === newline &&\n      i + 3 < buffer.length &&\n      buffer[i + 2] === carriage &&\n      buffer[i + 3] === newline\n    ) {\n      // \\r\\n\\r\\n\n      return i + 4;\n    }\n  }\n\n  return -1;\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { hasOwn } from './values';\nimport { type OpenAI } from '../../client';\nimport { RequestOptions } from '../request-options';\n\ntype LogFn = (message: string, ...rest: unknown[]) => void;\nexport type Logger = {\n  error: LogFn;\n  warn: LogFn;\n  info: LogFn;\n  debug: LogFn;\n};\nexport type LogLevel = 'off' | 'error' | 'warn' | 'info' | 'debug';\n\nconst levelNumbers = {\n  off: 0,\n  error: 200,\n  warn: 300,\n  info: 400,\n  debug: 500,\n};\n\nexport const parseLogLevel = (\n  maybeLevel: string | undefined,\n  sourceName: string,\n  client: OpenAI,\n): LogLevel | undefined => {\n  if (!maybeLevel) {\n    return undefined;\n  }\n  if (hasOwn(levelNumbers, maybeLevel)) {\n    return maybeLevel;\n  }\n  loggerFor(client).warn(\n    `${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(\n      Object.keys(levelNumbers),\n    )}`,\n  );\n  return undefined;\n};\n\nfunction noop() {}\n\nfunction makeLogFn(fnLevel: keyof Logger, logger: Logger | undefined, logLevel: LogLevel) {\n  if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n    return noop;\n  } else {\n    // Don't wrap logger functions, we want the stacktrace intact!\n    return logger[fnLevel].bind(logger);\n  }\n}\n\nconst noopLogger = {\n  error: noop,\n  warn: noop,\n  info: noop,\n  debug: noop,\n};\n\nlet cachedLoggers = /* @__PURE__ */ new WeakMap<Logger, [LogLevel, Logger]>();\n\nexport function loggerFor(client: OpenAI): Logger {\n  const logger = client.logger;\n  const logLevel = client.logLevel ?? 'off';\n  if (!logger) {\n    return noopLogger;\n  }\n\n  const cachedLogger = cachedLoggers.get(logger);\n  if (cachedLogger && cachedLogger[0] === logLevel) {\n    return cachedLogger[1];\n  }\n\n  const levelLogger = {\n    error: makeLogFn('error', logger, logLevel),\n    warn: makeLogFn('warn', logger, logLevel),\n    info: makeLogFn('info', logger, logLevel),\n    debug: makeLogFn('debug', logger, logLevel),\n  };\n\n  cachedLoggers.set(logger, [logLevel, levelLogger]);\n\n  return levelLogger;\n}\n\nexport const formatRequestDetails = (details: {\n  options?: RequestOptions | undefined;\n  headers?: Headers | Record<string, string> | undefined;\n  retryOfRequestLogID?: string | undefined;\n  retryOf?: string | undefined;\n  url?: string | undefined;\n  status?: number | undefined;\n  method?: string | undefined;\n  durationMs?: number | undefined;\n  message?: unknown;\n  body?: unknown;\n}) => {\n  if (details.options) {\n    details.options = { ...details.options };\n    delete details.options['headers']; // redundant + leaks internals\n  }\n  if (details.headers) {\n    details.headers = Object.fromEntries(\n      (details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(\n        ([name, value]) => [\n          name,\n          (\n            name.toLowerCase() === 'authorization' ||\n            name.toLowerCase() === 'api-key' ||\n            name.toLowerCase() === 'x-api-key' ||\n            name.toLowerCase() === 'cookie' ||\n            name.toLowerCase() === 'set-cookie'\n          ) ?\n            '***'\n          : value,\n        ],\n      ),\n    );\n  }\n  if ('retryOfRequestLogID' in details) {\n    if (details.retryOfRequestLogID) {\n      details.retryOf = details.retryOfRequestLogID;\n    }\n    delete details.retryOfRequestLogID;\n  }\n  return details;\n};\n", "import { OpenAIError } from './error';\nimport { type ReadableStream } from '../internal/shim-types';\nimport { makeReadableStream } from '../internal/shims';\nimport { findDoubleNewlineIndex, LineDecoder } from '../internal/decoders/line';\nimport { ReadableStreamToAsyncIterable } from '../internal/shims';\nimport { isAbortError } from '../internal/errors';\nimport { encodeUTF8 } from '../internal/utils/bytes';\nimport { loggerFor } from '../internal/utils/log';\nimport type { OpenAI } from '../client';\n\nimport { APIError } from './error';\n\ntype Bytes = string | ArrayBuffer | Uint8Array | null | undefined;\n\nexport type ServerSentEvent = {\n  event: string | null;\n  data: string;\n  raw: string[];\n};\n\nexport class Stream<Item> implements AsyncIterable<Item> {\n  controller: AbortController;\n  #client: OpenAI | undefined;\n\n  constructor(\n    private iterator: () => AsyncIterator<Item>,\n    controller: AbortController,\n    client?: OpenAI,\n  ) {\n    this.controller = controller;\n    this.#client = client;\n  }\n\n  static fromSSEResponse<Item>(\n    response: Response,\n    controller: AbortController,\n    client?: OpenAI,\n    synthesizeEventData?: boolean,\n  ): Stream<Item> {\n    let consumed = false;\n    const logger = client ? loggerFor(client) : console;\n\n    async function* iterator(): AsyncIterator<Item, any, undefined> {\n      if (consumed) {\n        throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n      }\n      consumed = true;\n      let done = false;\n      try {\n        for await (const sse of _iterSSEMessages(response, controller)) {\n          if (done) continue;\n\n          if (sse.data.startsWith('[DONE]')) {\n            done = true;\n            continue;\n          }\n\n          if (sse.event === null || !sse.event.startsWith('thread.')) {\n            let data;\n\n            try {\n              data = JSON.parse(sse.data) as any;\n            } catch (e) {\n              logger.error(`Could not parse message into JSON:`, sse.data);\n              logger.error(`From chunk:`, sse.raw);\n              throw e;\n            }\n\n            if (data && data.error) {\n              throw new APIError(undefined, data.error, undefined, response.headers);\n            }\n\n            yield synthesizeEventData ? { event: sse.event, data } : data;\n          } else {\n            let data;\n            try {\n              data = JSON.parse(sse.data);\n            } catch (e) {\n              console.error(`Could not parse message into JSON:`, sse.data);\n              console.error(`From chunk:`, sse.raw);\n              throw e;\n            }\n            // TODO: Is this where the error should be thrown?\n            if (sse.event == 'error') {\n              throw new APIError(undefined, data.error, data.message, undefined);\n            }\n            yield { event: sse.event, data: data } as any;\n          }\n        }\n        done = true;\n      } catch (e) {\n        // If the user calls `stream.controller.abort()`, we should exit without throwing.\n        if (isAbortError(e)) return;\n        throw e;\n      } finally {\n        // If the user `break`s, abort the ongoing request.\n        if (!done) controller.abort();\n      }\n    }\n\n    return new Stream(iterator, controller, client);\n  }\n\n  /**\n   * Generates a Stream from a newline-separated ReadableStream\n   * where each item is a JSON value.\n   */\n  static fromReadableStream<Item>(\n    readableStream: ReadableStream,\n    controller: AbortController,\n    client?: OpenAI,\n  ): Stream<Item> {\n    let consumed = false;\n\n    async function* iterLines(): AsyncGenerator<string, void, unknown> {\n      const lineDecoder = new LineDecoder();\n\n      const iter = ReadableStreamToAsyncIterable<Bytes>(readableStream);\n      for await (const chunk of iter) {\n        for (const line of lineDecoder.decode(chunk)) {\n          yield line;\n        }\n      }\n\n      for (const line of lineDecoder.flush()) {\n        yield line;\n      }\n    }\n\n    async function* iterator(): AsyncIterator<Item, any, undefined> {\n      if (consumed) {\n        throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n      }\n      consumed = true;\n      let done = false;\n      try {\n        for await (const line of iterLines()) {\n          if (done) continue;\n          if (line) yield JSON.parse(line) as Item;\n        }\n        done = true;\n      } catch (e) {\n        // If the user calls `stream.controller.abort()`, we should exit without throwing.\n        if (isAbortError(e)) return;\n        throw e;\n      } finally {\n        // If the user `break`s, abort the ongoing request.\n        if (!done) controller.abort();\n      }\n    }\n\n    return new Stream(iterator, controller, client);\n  }\n\n  [Symbol.asyncIterator](): AsyncIterator<Item> {\n    return this.iterator();\n  }\n\n  /**\n   * Splits the stream into two streams which can be\n   * independently read from at different speeds.\n   */\n  tee(): [Stream<Item>, Stream<Item>] {\n    const left: Array<Promise<IteratorResult<Item>>> = [];\n    const right: Array<Promise<IteratorResult<Item>>> = [];\n    const iterator = this.iterator();\n\n    const teeIterator = (queue: Array<Promise<IteratorResult<Item>>>): AsyncIterator<Item> => {\n      return {\n        next: () => {\n          if (queue.length === 0) {\n            const result = iterator.next();\n            left.push(result);\n            right.push(result);\n          }\n          return queue.shift()!;\n        },\n      };\n    };\n\n    return [\n      new Stream(() => teeIterator(left), this.controller, this.#client),\n      new Stream(() => teeIterator(right), this.controller, this.#client),\n    ];\n  }\n\n  /**\n   * Converts this stream to a newline-separated ReadableStream of\n   * JSON stringified values in the stream\n   * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n   */\n  toReadableStream(): ReadableStream {\n    const self = this;\n    let iter: AsyncIterator<Item>;\n\n    return makeReadableStream({\n      async start() {\n        iter = self[Symbol.asyncIterator]();\n      },\n      async pull(ctrl: any) {\n        try {\n          const { value, done } = await iter.next();\n          if (done) return ctrl.close();\n\n          const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n\n          ctrl.enqueue(bytes);\n        } catch (err) {\n          ctrl.error(err);\n        }\n      },\n      async cancel() {\n        await iter.return?.();\n      },\n    });\n  }\n}\n\nexport async function* _iterSSEMessages(\n  response: Response,\n  controller: AbortController,\n): AsyncGenerator<ServerSentEvent, void, unknown> {\n  if (!response.body) {\n    controller.abort();\n    if (\n      typeof (globalThis as any).navigator !== 'undefined' &&\n      (globalThis as any).navigator.product === 'ReactNative'\n    ) {\n      throw new OpenAIError(\n        `The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`,\n      );\n    }\n    throw new OpenAIError(`Attempted to iterate over a response with no body`);\n  }\n\n  const sseDecoder = new SSEDecoder();\n  const lineDecoder = new LineDecoder();\n\n  const iter = ReadableStreamToAsyncIterable<Bytes>(response.body);\n  for await (const sseChunk of iterSSEChunks(iter)) {\n    for (const line of lineDecoder.decode(sseChunk)) {\n      const sse = sseDecoder.decode(line);\n      if (sse) yield sse;\n    }\n  }\n\n  for (const line of lineDecoder.flush()) {\n    const sse = sseDecoder.decode(line);\n    if (sse) yield sse;\n  }\n}\n\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator: AsyncIterableIterator<Bytes>): AsyncGenerator<Uint8Array> {\n  let data = new Uint8Array();\n\n  for await (const chunk of iterator) {\n    if (chunk == null) {\n      continue;\n    }\n\n    const binaryChunk =\n      chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n      : typeof chunk === 'string' ? encodeUTF8(chunk)\n      : chunk;\n\n    let newData = new Uint8Array(data.length + binaryChunk.length);\n    newData.set(data);\n    newData.set(binaryChunk, data.length);\n    data = newData;\n\n    let patternIndex;\n    while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n      yield data.slice(0, patternIndex);\n      data = data.slice(patternIndex);\n    }\n  }\n\n  if (data.length > 0) {\n    yield data;\n  }\n}\n\nclass SSEDecoder {\n  private data: string[];\n  private event: string | null;\n  private chunks: string[];\n\n  constructor() {\n    this.event = null;\n    this.data = [];\n    this.chunks = [];\n  }\n\n  decode(line: string) {\n    if (line.endsWith('\\r')) {\n      line = line.substring(0, line.length - 1);\n    }\n\n    if (!line) {\n      // empty line and we didn't previously encounter any messages\n      if (!this.event && !this.data.length) return null;\n\n      const sse: ServerSentEvent = {\n        event: this.event,\n        data: this.data.join('\\n'),\n        raw: this.chunks,\n      };\n\n      this.event = null;\n      this.data = [];\n      this.chunks = [];\n\n      return sse;\n    }\n\n    this.chunks.push(line);\n\n    if (line.startsWith(':')) {\n      return null;\n    }\n\n    let [fieldname, _, value] = partition(line, ':');\n\n    if (value.startsWith(' ')) {\n      value = value.substring(1);\n    }\n\n    if (fieldname === 'event') {\n      this.event = value;\n    } else if (fieldname === 'data') {\n      this.data.push(value);\n    }\n\n    return null;\n  }\n}\n\nfunction partition(str: string, delimiter: string): [string, string, string] {\n  const index = str.indexOf(delimiter);\n  if (index !== -1) {\n    return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n  }\n\n  return [str, '', ''];\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport type { FinalRequestOptions } from './request-options';\nimport { Stream } from '../core/streaming';\nimport { type OpenAI } from '../client';\nimport { formatRequestDetails, loggerFor } from './utils/log';\nimport type { AbstractPage } from '../pagination';\n\nexport type APIResponseProps = {\n  response: Response;\n  options: FinalRequestOptions;\n  controller: AbortController;\n  requestLogID: string;\n  retryOfRequestLogID: string | undefined;\n  startTime: number;\n};\n\nexport async function defaultParseResponse<T>(\n  client: OpenAI,\n  props: APIResponseProps,\n): Promise<WithRequestID<T>> {\n  const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n  const body = await (async () => {\n    if (props.options.stream) {\n      loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n\n      // Note: there is an invariant here that isn't represented in the type system\n      // that if you set `stream: true` the response type must also be `Stream<T>`\n\n      if (props.options.__streamClass) {\n        return props.options.__streamClass.fromSSEResponse(\n          response,\n          props.controller,\n          client,\n          props.options.__synthesizeEventData,\n        ) as any;\n      }\n\n      return Stream.fromSSEResponse(\n        response,\n        props.controller,\n        client,\n        props.options.__synthesizeEventData,\n      ) as any;\n    }\n\n    // fetch refuses to read the body when the status code is 204.\n    if (response.status === 204) {\n      return null as T;\n    }\n\n    if (props.options.__binaryResponse) {\n      return response as unknown as T;\n    }\n\n    const contentType = response.headers.get('content-type');\n    const mediaType = contentType?.split(';')[0]?.trim();\n    const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n    if (isJSON) {\n      const contentLength = response.headers.get('content-length');\n      if (contentLength === '0') {\n        // if there is no content we can't do anything\n        return undefined as T;\n      }\n\n      const json = await response.json();\n      return addRequestID(json as T, response);\n    }\n\n    const text = await response.text();\n    return text as unknown as T;\n  })();\n  loggerFor(client).debug(\n    `[${requestLogID}] response parsed`,\n    formatRequestDetails({\n      retryOfRequestLogID,\n      url: response.url,\n      status: response.status,\n      body,\n      durationMs: Date.now() - startTime,\n    }),\n  );\n  return body;\n}\n\nexport type WithRequestID<T> =\n  T extends Array<any> | Response | AbstractPage<any> ? T\n  : T extends Record<string, any> ? T & { _request_id?: string | null }\n  : T;\n\nexport function addRequestID<T>(value: T, response: Response): WithRequestID<T> {\n  if (!value || typeof value !== 'object' || Array.isArray(value)) {\n    return value as WithRequestID<T>;\n  }\n\n  return Object.defineProperty(value, '_request_id', {\n    value: response.headers.get('x-request-id'),\n    enumerable: false,\n  }) as WithRequestID<T>;\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { type OpenAI } from '../client';\n\nimport { type PromiseOrValue } from '../internal/types';\nimport {\n  type APIResponseProps,\n  defaultParseResponse,\n  type WithRequestID,\n  addRequestID,\n} from '../internal/parse';\n\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise<T> extends Promise<WithRequestID<T>> {\n  private parsedPromise: Promise<WithRequestID<T>> | undefined;\n  #client: OpenAI;\n\n  constructor(\n    client: OpenAI,\n    private responsePromise: Promise<APIResponseProps>,\n    private parseResponse: (\n      client: OpenAI,\n      props: APIResponseProps,\n    ) => PromiseOrValue<WithRequestID<T>> = defaultParseResponse,\n  ) {\n    super((resolve) => {\n      // this is maybe a bit weird but this has to be a no-op to not implicitly\n      // parse the response body; instead .then, .catch, .finally are overridden\n      // to parse the response\n      resolve(null as any);\n    });\n    this.#client = client;\n  }\n\n  _thenUnwrap<U>(transform: (data: T, props: APIResponseProps) => U): APIPromise<U> {\n    return new APIPromise(this.#client, this.responsePromise, async (client, props) =>\n      addRequestID(transform(await this.parseResponse(client, props), props), props.response),\n    );\n  }\n\n  /**\n   * Gets the raw `Response` instance instead of parsing the response\n   * data.\n   *\n   * If you want to parse the response body but still get the `Response`\n   * instance, you can use {@link withResponse()}.\n   *\n   * \uD83D\uDC4B Getting the wrong TypeScript type for `Response`?\n   * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n   * to your `tsconfig.json`.\n   */\n  asResponse(): Promise<Response> {\n    return this.responsePromise.then((p) => p.response);\n  }\n\n  /**\n   * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n   * returned via the X-Request-ID header which is useful for debugging requests and reporting\n   * issues to OpenAI.\n   *\n   * If you just want to get the raw `Response` instance without parsing it,\n   * you can use {@link asResponse()}.\n   *\n   * \uD83D\uDC4B Getting the wrong TypeScript type for `Response`?\n   * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n   * to your `tsconfig.json`.\n   */\n  async withResponse(): Promise<{ data: T; response: Response; request_id: string | null }> {\n    const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n    return { data, response, request_id: response.headers.get('x-request-id') };\n  }\n\n  private parse(): Promise<WithRequestID<T>> {\n    if (!this.parsedPromise) {\n      this.parsedPromise = this.responsePromise.then((data) =>\n        this.parseResponse(this.#client, data),\n      ) as any as Promise<WithRequestID<T>>;\n    }\n    return this.parsedPromise;\n  }\n\n  override then<TResult1 = WithRequestID<T>, TResult2 = never>(\n    onfulfilled?: ((value: WithRequestID<T>) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n    onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n  ): Promise<TResult1 | TResult2> {\n    return this.parse().then(onfulfilled, onrejected);\n  }\n\n  override catch<TResult = never>(\n    onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,\n  ): Promise<WithRequestID<T> | TResult> {\n    return this.parse().catch(onrejected);\n  }\n\n  override finally(onfinally?: (() => void) | undefined | null): Promise<WithRequestID<T>> {\n    return this.parse().finally(onfinally);\n  }\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { OpenAIError } from './error';\nimport { FinalRequestOptions } from '../internal/request-options';\nimport { defaultParseResponse, WithRequestID } from '../internal/parse';\nimport { APIPromise } from './api-promise';\nimport { type OpenAI } from '../client';\nimport { type APIResponseProps } from '../internal/parse';\nimport { maybeObj } from '../internal/utils/values';\n\nexport type PageRequestOptions = Pick<FinalRequestOptions, 'query' | 'headers' | 'body' | 'path' | 'method'>;\n\nexport abstract class AbstractPage<Item> implements AsyncIterable<Item> {\n  #client: OpenAI;\n  protected options: FinalRequestOptions;\n\n  protected response: Response;\n  protected body: unknown;\n\n  constructor(client: OpenAI, response: Response, body: unknown, options: FinalRequestOptions) {\n    this.#client = client;\n    this.options = options;\n    this.response = response;\n    this.body = body;\n  }\n\n  abstract nextPageRequestOptions(): PageRequestOptions | null;\n\n  abstract getPaginatedItems(): Item[];\n\n  hasNextPage(): boolean {\n    const items = this.getPaginatedItems();\n    if (!items.length) return false;\n    return this.nextPageRequestOptions() != null;\n  }\n\n  async getNextPage(): Promise<this> {\n    const nextOptions = this.nextPageRequestOptions();\n    if (!nextOptions) {\n      throw new OpenAIError(\n        'No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.',\n      );\n    }\n\n    return await this.#client.requestAPIList(this.constructor as any, nextOptions);\n  }\n\n  async *iterPages(): AsyncGenerator<this> {\n    let page: this = this;\n    yield page;\n    while (page.hasNextPage()) {\n      page = await page.getNextPage();\n      yield page;\n    }\n  }\n\n  async *[Symbol.asyncIterator](): AsyncGenerator<Item> {\n    for await (const page of this.iterPages()) {\n      for (const item of page.getPaginatedItems()) {\n        yield item;\n      }\n    }\n  }\n}\n\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n *    for await (const item of client.items.list()) {\n *      console.log(item)\n *    }\n */\nexport class PagePromise<\n    PageClass extends AbstractPage<Item>,\n    Item = ReturnType<PageClass['getPaginatedItems']>[number],\n  >\n  extends APIPromise<PageClass>\n  implements AsyncIterable<Item>\n{\n  constructor(\n    client: OpenAI,\n    request: Promise<APIResponseProps>,\n    Page: new (...args: ConstructorParameters<typeof AbstractPage>) => PageClass,\n  ) {\n    super(\n      client,\n      request,\n      async (client, props) =>\n        new Page(\n          client,\n          props.response,\n          await defaultParseResponse(client, props),\n          props.options,\n        ) as WithRequestID<PageClass>,\n    );\n  }\n\n  /**\n   * Allow auto-paginating iteration on an unawaited list call, eg:\n   *\n   *    for await (const item of client.items.list()) {\n   *      console.log(item)\n   *    }\n   */\n  async *[Symbol.asyncIterator](): AsyncGenerator<Item> {\n    const page = await this;\n    for await (const item of page) {\n      yield item;\n    }\n  }\n}\n\nexport interface PageResponse<Item> {\n  data: Array<Item>;\n\n  object: string;\n}\n\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page<Item> extends AbstractPage<Item> implements PageResponse<Item> {\n  data: Array<Item>;\n\n  object: string;\n\n  constructor(client: OpenAI, response: Response, body: PageResponse<Item>, options: FinalRequestOptions) {\n    super(client, response, body, options);\n\n    this.data = body.data || [];\n    this.object = body.object;\n  }\n\n  getPaginatedItems(): Item[] {\n    return this.data ?? [];\n  }\n\n  nextPageRequestOptions(): PageRequestOptions | null {\n    return null;\n  }\n}\n\nexport interface CursorPageResponse<Item> {\n  data: Array<Item>;\n\n  has_more: boolean;\n}\n\nexport interface CursorPageParams {\n  after?: string;\n\n  limit?: number;\n}\n\nexport class CursorPage<Item extends { id: string }>\n  extends AbstractPage<Item>\n  implements CursorPageResponse<Item>\n{\n  data: Array<Item>;\n\n  has_more: boolean;\n\n  constructor(\n    client: OpenAI,\n    response: Response,\n    body: CursorPageResponse<Item>,\n    options: FinalRequestOptions,\n  ) {\n    super(client, response, body, options);\n\n    this.data = body.data || [];\n    this.has_more = body.has_more || false;\n  }\n\n  getPaginatedItems(): Item[] {\n    return this.data ?? [];\n  }\n\n  override hasNextPage(): boolean {\n    if (this.has_more === false) {\n      return false;\n    }\n\n    return super.hasNextPage();\n  }\n\n  nextPageRequestOptions(): PageRequestOptions | null {\n    const data = this.getPaginatedItems();\n    const id = data[data.length - 1]?.id;\n    if (!id) {\n      return null;\n    }\n\n    return {\n      ...this.options,\n      query: {\n        ...maybeObj(this.options.query),\n        after: id,\n      },\n    };\n  }\n}\n\nexport interface ConversationCursorPageResponse<Item> {\n  data: Array<Item>;\n\n  has_more: boolean;\n\n  last_id: string;\n}\n\nexport interface ConversationCursorPageParams {\n  after?: string;\n\n  limit?: number;\n}\n\nexport class ConversationCursorPage<Item>\n  extends AbstractPage<Item>\n  implements ConversationCursorPageResponse<Item>\n{\n  data: Array<Item>;\n\n  has_more: boolean;\n\n  last_id: string;\n\n  constructor(\n    client: OpenAI,\n    response: Response,\n    body: ConversationCursorPageResponse<Item>,\n    options: FinalRequestOptions,\n  ) {\n    super(client, response, body, options);\n\n    this.data = body.data || [];\n    this.has_more = body.has_more || false;\n    this.last_id = body.last_id || '';\n  }\n\n  getPaginatedItems(): Item[] {\n    return this.data ?? [];\n  }\n\n  override hasNextPage(): boolean {\n    if (this.has_more === false) {\n      return false;\n    }\n\n    return super.hasNextPage();\n  }\n\n  nextPageRequestOptions(): PageRequestOptions | null {\n    const cursor = this.last_id;\n    if (!cursor) {\n      return null;\n    }\n\n    return {\n      ...this.options,\n      query: {\n        ...maybeObj(this.options.query),\n        after: cursor,\n      },\n    };\n  }\n}\n\nexport interface NextCursorPageResponse<Item> {\n  data: Array<Item>;\n\n  has_more: boolean;\n\n  next: string | null;\n}\n\nexport interface NextCursorPageParams {\n  after?: string;\n\n  limit?: number;\n}\n\nexport class NextCursorPage<Item> extends AbstractPage<Item> implements NextCursorPageResponse<Item> {\n  data: Array<Item>;\n\n  has_more: boolean;\n\n  next: string | null;\n\n  constructor(\n    client: OpenAI,\n    response: Response,\n    body: NextCursorPageResponse<Item>,\n    options: FinalRequestOptions,\n  ) {\n    super(client, response, body, options);\n\n    this.data = body.data || [];\n    this.has_more = body.has_more || false;\n    this.next = body.next || null;\n  }\n\n  getPaginatedItems(): Item[] {\n    return this.data ?? [];\n  }\n\n  override hasNextPage(): boolean {\n    if (this.has_more === false) {\n      return false;\n    }\n\n    return super.hasNextPage();\n  }\n\n  nextPageRequestOptions(): PageRequestOptions | null {\n    const cursor = this.next;\n    if (!cursor) {\n      return null;\n    }\n\n    return {\n      ...this.options,\n      query: {\n        ...maybeObj(this.options.query),\n        after: cursor,\n      },\n    };\n  }\n}\n", "import type { WorkloadIdentity, TokenExchangeResponse } from './types';\nimport type { Fetch } from '../internal/builtin-types';\nimport * as Shims from '../internal/shims';\nimport { APIError, OAuthError } from '../core/error';\n\ninterface CachedToken {\n  token: string;\n  expiresAt: number;\n}\n\nconst SUBJECT_TOKEN_TYPES: Record<WorkloadIdentity['provider']['tokenType'], string> = {\n  jwt: 'urn:ietf:params:oauth:token-type:jwt',\n  id: 'urn:ietf:params:oauth:token-type:id_token',\n};\n\nconst TOKEN_EXCHANGE_GRANT_TYPE = 'urn:ietf:params:oauth:grant-type:token-exchange';\n\nexport class WorkloadIdentityAuth {\n  private cachedToken: CachedToken | null = null;\n  private refreshPromise: Promise<string> | null = null;\n  private readonly config: WorkloadIdentity;\n  private readonly tokenExchangeUrl: string = 'https://auth.openai.com/oauth/token';\n  private readonly fetch: Fetch;\n\n  constructor(config: WorkloadIdentity, fetch?: Fetch) {\n    this.config = config;\n    this.fetch = fetch ?? Shims.getDefaultFetch();\n  }\n\n  async getToken(): Promise<string> {\n    if (!this.cachedToken || this.isTokenExpired(this.cachedToken)) {\n      if (this.refreshPromise) {\n        return await this.refreshPromise;\n      }\n\n      this.refreshPromise = this.refreshToken();\n\n      try {\n        const token = await this.refreshPromise;\n        return token;\n      } finally {\n        this.refreshPromise = null;\n      }\n    }\n\n    if (this.needsRefresh(this.cachedToken) && !this.refreshPromise) {\n      this.refreshPromise = this.refreshToken().finally(() => {\n        this.refreshPromise = null;\n      });\n    }\n\n    return this.cachedToken.token;\n  }\n\n  private async refreshToken(): Promise<string> {\n    const subjectToken = await this.config.provider.getToken();\n    const body: Record<string, string> = {\n      grant_type: TOKEN_EXCHANGE_GRANT_TYPE,\n      subject_token: subjectToken,\n      subject_token_type: SUBJECT_TOKEN_TYPES[this.config.provider.tokenType],\n      identity_provider_id: this.config.identityProviderId,\n      service_account_id: this.config.serviceAccountId,\n    };\n\n    if (this.config.clientId) {\n      body['client_id'] = this.config.clientId;\n    }\n\n    const response = await this.fetch(this.tokenExchangeUrl, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(body),\n    });\n\n    if (!response.ok) {\n      const errorText = await response.text();\n      let body: any = undefined;\n\n      try {\n        body = JSON.parse(errorText);\n      } catch {}\n\n      if (response.status === 400 || response.status === 401 || response.status === 403) {\n        throw new OAuthError(response.status as 400 | 401 | 403, body, response.headers);\n      }\n      throw APIError.generate(\n        response.status,\n        body,\n        `Token exchange failed with status ${response.status}`,\n        response.headers,\n      );\n    }\n\n    const tokenResponse = (await response.json()) as TokenExchangeResponse;\n    const expiresIn = tokenResponse.expires_in || 3600;\n    const expiresAt = Date.now() + expiresIn * 1000;\n\n    this.cachedToken = {\n      token: tokenResponse.access_token,\n      expiresAt,\n    };\n\n    return tokenResponse.access_token;\n  }\n\n  private isTokenExpired(cachedToken: CachedToken): boolean {\n    return Date.now() >= cachedToken.expiresAt;\n  }\n\n  private needsRefresh(cachedToken: CachedToken): boolean {\n    const bufferSeconds = this.config.refreshBufferSeconds ?? 1200;\n    const bufferMs = bufferSeconds * 1000;\n    return Date.now() >= cachedToken.expiresAt - bufferMs;\n  }\n\n  invalidateToken(): void {\n    this.cachedToken = null;\n    this.refreshPromise = null;\n  }\n}\n", "import { type RequestOptions } from './request-options';\nimport type { FilePropertyBag, Fetch } from './builtin-types';\nimport type { OpenAI } from '../client';\nimport { ReadableStreamFrom } from './shims';\n\nexport type BlobPart = string | ArrayBuffer | ArrayBufferView | Blob | DataView;\ntype FsReadStream = AsyncIterable<Uint8Array> & { path: string | { toString(): string } };\n\n// https://github.com/oven-sh/bun/issues/5980\ninterface BunFile extends Blob {\n  readonly name?: string | undefined;\n}\n\nexport const checkFileSupport = () => {\n  if (typeof File === 'undefined') {\n    const { process } = globalThis as any;\n    const isOldNode =\n      typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n    throw new Error(\n      '`File` is not defined as a global, which is required for file uploads.' +\n        (isOldNode ?\n          \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n        : ''),\n    );\n  }\n};\n\n/**\n * Typically, this is a native \"File\" class.\n *\n * We provide the {@link toFile} utility to convert a variety of objects\n * into the File class.\n *\n * For convenience, you can also pass a fetch Response, or in Node,\n * the result of fs.createReadStream().\n */\nexport type Uploadable = File | Response | FsReadStream | BunFile;\n\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(\n  fileBits: BlobPart[],\n  fileName: string | undefined,\n  options?: FilePropertyBag,\n): File {\n  checkFileSupport();\n  return new File(fileBits as any, fileName ?? 'unknown_file', options);\n}\n\nexport function getName(value: any): string | undefined {\n  return (\n    (\n      (typeof value === 'object' &&\n        value !== null &&\n        (('name' in value && value.name && String(value.name)) ||\n          ('url' in value && value.url && String(value.url)) ||\n          ('filename' in value && value.filename && String(value.filename)) ||\n          ('path' in value && value.path && String(value.path)))) ||\n      ''\n    )\n      .split(/[\\\\/]/)\n      .pop() || undefined\n  );\n}\n\nexport const isAsyncIterable = (value: any): value is AsyncIterable<any> =>\n  value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (\n  opts: RequestOptions,\n  fetch: OpenAI | Fetch,\n): Promise<RequestOptions> => {\n  if (!hasUploadableValue(opts.body)) return opts;\n\n  return { ...opts, body: await createForm(opts.body, fetch) };\n};\n\ntype MultipartFormRequestOptions = Omit<RequestOptions, 'body'> & { body: unknown };\n\nexport const multipartFormRequestOptions = async (\n  opts: MultipartFormRequestOptions,\n  fetch: OpenAI | Fetch,\n): Promise<RequestOptions> => {\n  return { ...opts, body: await createForm(opts.body, fetch) };\n};\n\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap<Fetch, Promise<boolean>>();\n\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject: OpenAI | Fetch): Promise<boolean> {\n  const fetch: Fetch = typeof fetchObject === 'function' ? fetchObject : (fetchObject as any).fetch;\n  const cached = supportsFormDataMap.get(fetch);\n  if (cached) return cached;\n  const promise = (async () => {\n    try {\n      const FetchResponse = (\n        'Response' in fetch ?\n          fetch.Response\n        : (await fetch('data:,')).constructor) as typeof Response;\n      const data = new FormData();\n      if (data.toString() === (await new FetchResponse(data).text())) {\n        return false;\n      }\n      return true;\n    } catch {\n      // avoid false negatives\n      return true;\n    }\n  })();\n  supportsFormDataMap.set(fetch, promise);\n  return promise;\n}\n\nexport const createForm = async <T = Record<string, unknown>>(\n  body: T | undefined,\n  fetch: OpenAI | Fetch,\n): Promise<FormData> => {\n  if (!(await supportsFormData(fetch))) {\n    throw new TypeError(\n      'The provided fetch function does not support file uploads with the current global FormData class.',\n    );\n  }\n  const form = new FormData();\n  await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n  return form;\n};\n\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value: unknown) => value instanceof Blob && 'name' in value;\n\nconst isUploadable = (value: unknown) =>\n  typeof value === 'object' &&\n  value !== null &&\n  (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\n\nconst hasUploadableValue = (value: unknown): boolean => {\n  if (isUploadable(value)) return true;\n  if (Array.isArray(value)) return value.some(hasUploadableValue);\n  if (value && typeof value === 'object') {\n    for (const k in value) {\n      if (hasUploadableValue((value as any)[k])) return true;\n    }\n  }\n  return false;\n};\n\nconst addFormValue = async (form: FormData, key: string, value: unknown): Promise<void> => {\n  if (value === undefined) return;\n  if (value == null) {\n    throw new TypeError(\n      `Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`,\n    );\n  }\n\n  // TODO: make nested formats configurable\n  if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n    form.append(key, String(value));\n  } else if (value instanceof Response) {\n    form.append(key, makeFile([await value.blob()], getName(value)));\n  } else if (isAsyncIterable(value)) {\n    form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n  } else if (isNamedBlob(value)) {\n    form.append(key, value, getName(value));\n  } else if (Array.isArray(value)) {\n    await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n  } else if (typeof value === 'object') {\n    await Promise.all(\n      Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)),\n    );\n  } else {\n    throw new TypeError(\n      `Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`,\n    );\n  }\n};\n", "import { BlobPart, getName, makeFile, isAsyncIterable } from './uploads';\nimport type { FilePropertyBag } from './builtin-types';\nimport { checkFileSupport } from './uploads';\n\ntype BlobLikePart = string | ArrayBuffer | ArrayBufferView | BlobLike | DataView;\n\n/**\n * Intended to match DOM Blob, node-fetch Blob, node:buffer Blob, etc.\n * Don't add arrayBuffer here, node-fetch doesn't have it\n */\ninterface BlobLike {\n  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/size) */\n  readonly size: number;\n  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/type) */\n  readonly type: string;\n  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/text) */\n  text(): Promise<string>;\n  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/slice) */\n  slice(start?: number, end?: number): BlobLike;\n}\n\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value: any): value is BlobLike & { arrayBuffer(): Promise<ArrayBuffer> } =>\n  value != null &&\n  typeof value === 'object' &&\n  typeof value.size === 'number' &&\n  typeof value.type === 'string' &&\n  typeof value.text === 'function' &&\n  typeof value.slice === 'function' &&\n  typeof value.arrayBuffer === 'function';\n\n/**\n * Intended to match DOM File, node:buffer File, undici File, etc.\n */\ninterface FileLike extends BlobLike {\n  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/lastModified) */\n  readonly lastModified: number;\n  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/name) */\n  readonly name?: string | undefined;\n}\n\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value: any): value is FileLike & { arrayBuffer(): Promise<ArrayBuffer> } =>\n  value != null &&\n  typeof value === 'object' &&\n  typeof value.name === 'string' &&\n  typeof value.lastModified === 'number' &&\n  isBlobLike(value);\n\n/**\n * Intended to match DOM Response, node-fetch Response, undici Response, etc.\n */\nexport interface ResponseLike {\n  url: string;\n  blob(): Promise<BlobLike>;\n}\n\nconst isResponseLike = (value: any): value is ResponseLike =>\n  value != null &&\n  typeof value === 'object' &&\n  typeof value.url === 'string' &&\n  typeof value.blob === 'function';\n\nexport type ToFileInput =\n  | FileLike\n  | ResponseLike\n  | Exclude<BlobLikePart, string>\n  | AsyncIterable<BlobLikePart>;\n\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, BlobLikePart, or AsyncIterable of BlobLikeParts\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(\n  value: ToFileInput | PromiseLike<ToFileInput>,\n  name?: string | null | undefined,\n  options?: FilePropertyBag | undefined,\n): Promise<File> {\n  checkFileSupport();\n\n  // If it's a promise, resolve it.\n  value = await value;\n\n  // If we've been given a `File` we don't need to do anything\n  if (isFileLike(value)) {\n    if (value instanceof File) {\n      return value;\n    }\n    return makeFile([await value.arrayBuffer()], value.name);\n  }\n\n  if (isResponseLike(value)) {\n    const blob = await value.blob();\n    name ||= new URL(value.url).pathname.split(/[\\\\/]/).pop();\n\n    return makeFile(await getBytes(blob), name, options);\n  }\n\n  const parts = await getBytes(value);\n\n  name ||= getName(value);\n\n  if (!options?.type) {\n    const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n    if (typeof type === 'string') {\n      options = { ...options, type };\n    }\n  }\n\n  return makeFile(parts, name, options);\n}\n\nasync function getBytes(value: BlobLikePart | AsyncIterable<BlobLikePart>): Promise<Array<BlobPart>> {\n  let parts: Array<BlobPart> = [];\n  if (\n    typeof value === 'string' ||\n    ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n    value instanceof ArrayBuffer\n  ) {\n    parts.push(value);\n  } else if (isBlobLike(value)) {\n    parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n  } else if (\n    isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n  ) {\n    for await (const chunk of value) {\n      parts.push(...(await getBytes(chunk as BlobLikePart))); // TODO, consider validating?\n    }\n  } else {\n    const constructor = value?.constructor?.name;\n    throw new Error(\n      `Unexpected data type: ${typeof value}${\n        constructor ? `; constructor: ${constructor}` : ''\n      }${propsForError(value)}`,\n    );\n  }\n\n  return parts;\n}\n\nfunction propsForError(value: unknown): string {\n  if (typeof value !== 'object' || value === null) return '';\n  const props = Object.getOwnPropertyNames(value);\n  return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n", "export { type Uploadable } from '../internal/uploads';\nexport { toFile, type ToFileInput } from '../internal/to-file';\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport type { OpenAI } from '../client';\n\nexport abstract class APIResource {\n  protected _client: OpenAI;\n\n  constructor(client: OpenAI) {\n    this._client = client;\n  }\n}\n", "import { OpenAIError } from '../../core/error';\n\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved  = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims  = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar       = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str: string) {\n  return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\n\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\n\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) =>\n  function path(statics: readonly string[], ...params: readonly unknown[]): string {\n    // If there are no params, no processing is needed.\n    if (statics.length === 1) return statics[0]!;\n\n    let postPath = false;\n    const invalidSegments = [];\n    const path = statics.reduce((previousValue, currentValue, index) => {\n      if (/[?#]/.test(currentValue)) {\n        postPath = true;\n      }\n      const value = params[index];\n      let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n      if (\n        index !== params.length &&\n        (value == null ||\n          (typeof value === 'object' &&\n            // handle values from other realms\n            value.toString ===\n              Object.getPrototypeOf(Object.getPrototypeOf((value as any).hasOwnProperty ?? EMPTY) ?? EMPTY)\n                ?.toString))\n      ) {\n        encoded = value + '';\n        invalidSegments.push({\n          start: previousValue.length + currentValue.length,\n          length: encoded.length,\n          error: `Value of type ${Object.prototype.toString\n            .call(value)\n            .slice(8, -1)} is not a valid path parameter`,\n        });\n      }\n      return previousValue + currentValue + (index === params.length ? '' : encoded);\n    }, '');\n\n    const pathOnly = path.split(/[?#]/, 1)[0]!;\n    const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n    let match;\n\n    // Find all invalid segments\n    while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n      invalidSegments.push({\n        start: match.index,\n        length: match[0].length,\n        error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n      });\n    }\n\n    invalidSegments.sort((a, b) => a.start - b.start);\n\n    if (invalidSegments.length > 0) {\n      let lastEnd = 0;\n      const underline = invalidSegments.reduce((acc, segment) => {\n        const spaces = ' '.repeat(segment.start - lastEnd);\n        const arrows = '^'.repeat(segment.length);\n        lastEnd = segment.start + segment.length;\n        return acc + spaces + arrows;\n      }, '');\n\n      throw new OpenAIError(\n        `Path parameters result in path with invalid segments:\\n${invalidSegments\n          .map((e) => e.error)\n          .join('\\n')}\\n${path}\\n${underline}`,\n      );\n    }\n\n    return path;\n  };\n\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as CompletionsAPI from './completions';\nimport { ChatCompletionStoreMessagesPage } from './completions';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pagination';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\n/**\n * Given a list of messages comprising a conversation, the model will return a response.\n */\nexport class Messages extends APIResource {\n  /**\n   * Get the messages in a stored chat completion. Only Chat Completions that have\n   * been created with the `store` parameter set to `true` will be returned.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n   *   'completion_id',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    completionID: string,\n    query: MessageListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<ChatCompletionStoreMessagesPage, CompletionsAPI.ChatCompletionStoreMessage> {\n    return this._client.getAPIList(\n      path`/chat/completions/${completionID}/messages`,\n      CursorPage<CompletionsAPI.ChatCompletionStoreMessage>,\n      { query, ...options, __security: { bearerAuth: true } },\n    );\n  }\n}\n\nexport interface MessageListParams extends CursorPageParams {\n  /**\n   * Sort order for messages by timestamp. Use `asc` for ascending order or `desc`\n   * for descending order. Defaults to `asc`.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport declare namespace Messages {\n  export { type MessageListParams as MessageListParams };\n}\n\nexport { type ChatCompletionStoreMessagesPage };\n", "/** @deprecated Import from ./core/error instead */\nexport * from './core/error';\n", "import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from '../error';\nimport {\n  ChatCompletion,\n  ChatCompletionCreateParams,\n  ChatCompletionCreateParamsBase,\n  ChatCompletionFunctionTool,\n  ChatCompletionMessage,\n  ChatCompletionMessageFunctionToolCall,\n  ChatCompletionStreamingToolRunnerParams,\n  ChatCompletionStreamParams,\n  ChatCompletionToolRunnerParams,\n  ParsedChatCompletion,\n  ParsedChoice,\n  ParsedFunctionToolCall,\n} from '../resources/chat/completions';\nimport { type ResponseFormatTextJSONSchemaConfig } from '../resources/responses/responses';\nimport { ResponseFormatJSONSchema } from '../resources/shared';\n\ntype AnyChatCompletionCreateParams =\n  | ChatCompletionCreateParams\n  | ChatCompletionToolRunnerParams<any>\n  | ChatCompletionStreamingToolRunnerParams<any>\n  | ChatCompletionStreamParams;\n\ntype Unpacked<T> = T extends (infer U)[] ? U : T;\n\ntype ToolCall = Unpacked<ChatCompletionCreateParamsBase['tools']>;\n\nexport function isChatCompletionFunctionTool(tool: ToolCall): tool is ChatCompletionFunctionTool {\n  return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\n\nexport type ExtractParsedContentFromParams<Params extends AnyChatCompletionCreateParams> =\n  Params['response_format'] extends AutoParseableResponseFormat<infer P> ? P : null;\n\nexport type AutoParseableResponseFormat<ParsedT> = ResponseFormatJSONSchema & {\n  __output: ParsedT; // type-level only\n\n  $brand: 'auto-parseable-response-format';\n  $parseRaw(content: string): ParsedT;\n};\n\nexport function makeParseableResponseFormat<ParsedT>(\n  response_format: ResponseFormatJSONSchema,\n  parser: (content: string) => ParsedT,\n): AutoParseableResponseFormat<ParsedT> {\n  const obj = { ...response_format };\n\n  Object.defineProperties(obj, {\n    $brand: {\n      value: 'auto-parseable-response-format',\n      enumerable: false,\n    },\n    $parseRaw: {\n      value: parser,\n      enumerable: false,\n    },\n  });\n\n  return obj as AutoParseableResponseFormat<ParsedT>;\n}\n\nexport type AutoParseableTextFormat<ParsedT> = ResponseFormatTextJSONSchemaConfig & {\n  __output: ParsedT; // type-level only\n\n  $brand: 'auto-parseable-response-format';\n  $parseRaw(content: string): ParsedT;\n};\n\nexport function makeParseableTextFormat<ParsedT>(\n  response_format: ResponseFormatTextJSONSchemaConfig,\n  parser: (content: string) => ParsedT,\n): AutoParseableTextFormat<ParsedT> {\n  const obj = { ...response_format };\n\n  Object.defineProperties(obj, {\n    $brand: {\n      value: 'auto-parseable-response-format',\n      enumerable: false,\n    },\n    $parseRaw: {\n      value: parser,\n      enumerable: false,\n    },\n  });\n\n  return obj as AutoParseableTextFormat<ParsedT>;\n}\n\nexport function isAutoParsableResponseFormat<ParsedT>(\n  response_format: any,\n): response_format is AutoParseableResponseFormat<ParsedT> {\n  return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\n\ntype ToolOptions = {\n  name: string;\n  arguments: any;\n  function?: ((args: any) => any) | undefined;\n};\n\nexport type AutoParseableTool<\n  OptionsT extends ToolOptions,\n  HasFunction = OptionsT['function'] extends Function ? true : false,\n> = ChatCompletionFunctionTool & {\n  __arguments: OptionsT['arguments']; // type-level only\n  __name: OptionsT['name']; // type-level only\n  __hasFunction: HasFunction; // type-level only\n\n  $brand: 'auto-parseable-tool';\n  $callback: ((args: OptionsT['arguments']) => any) | undefined;\n  $parseRaw(args: string): OptionsT['arguments'];\n};\n\nexport function makeParseableTool<OptionsT extends ToolOptions>(\n  tool: ChatCompletionFunctionTool,\n  {\n    parser,\n    callback,\n  }: {\n    parser: (content: string) => OptionsT['arguments'];\n    callback: ((args: any) => any) | undefined;\n  },\n): AutoParseableTool<OptionsT['arguments']> {\n  const obj = { ...tool };\n\n  Object.defineProperties(obj, {\n    $brand: {\n      value: 'auto-parseable-tool',\n      enumerable: false,\n    },\n    $parseRaw: {\n      value: parser,\n      enumerable: false,\n    },\n    $callback: {\n      value: callback,\n      enumerable: false,\n    },\n  });\n\n  return obj as AutoParseableTool<OptionsT['arguments']>;\n}\n\nexport function isAutoParsableTool(tool: any): tool is AutoParseableTool<any> {\n  return tool?.['$brand'] === 'auto-parseable-tool';\n}\n\nexport function maybeParseChatCompletion<\n  Params extends ChatCompletionCreateParams | null,\n  ParsedT = Params extends null ? null : ExtractParsedContentFromParams<NonNullable<Params>>,\n>(completion: ChatCompletion, params: Params): ParsedChatCompletion<ParsedT> {\n  if (!params || !hasAutoParseableInput(params)) {\n    return {\n      ...completion,\n      choices: completion.choices.map((choice) => {\n        assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n\n        return {\n          ...choice,\n          message: {\n            ...choice.message,\n            parsed: null,\n            ...(choice.message.tool_calls ?\n              {\n                tool_calls: choice.message.tool_calls,\n              }\n            : undefined),\n          },\n        };\n      }),\n    } as ParsedChatCompletion<ParsedT>;\n  }\n\n  return parseChatCompletion(completion, params);\n}\n\nexport function parseChatCompletion<\n  Params extends ChatCompletionCreateParams,\n  ParsedT = ExtractParsedContentFromParams<Params>,\n>(completion: ChatCompletion, params: Params): ParsedChatCompletion<ParsedT> {\n  const choices: Array<ParsedChoice<ParsedT>> = completion.choices.map((choice): ParsedChoice<ParsedT> => {\n    if (choice.finish_reason === 'length') {\n      throw new LengthFinishReasonError();\n    }\n\n    if (choice.finish_reason === 'content_filter') {\n      throw new ContentFilterFinishReasonError();\n    }\n\n    assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n\n    return {\n      ...choice,\n      message: {\n        ...choice.message,\n        ...(choice.message.tool_calls ?\n          {\n            tool_calls:\n              choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n          }\n        : undefined),\n        parsed:\n          choice.message.content && !choice.message.refusal ?\n            parseResponseFormat(params, choice.message.content)\n          : null,\n      },\n    } as ParsedChoice<ParsedT>;\n  });\n\n  return { ...completion, choices };\n}\n\nfunction parseResponseFormat<\n  Params extends ChatCompletionCreateParams,\n  ParsedT = ExtractParsedContentFromParams<Params>,\n>(params: Params, content: string): ParsedT | null {\n  if (params.response_format?.type !== 'json_schema') {\n    return null;\n  }\n\n  if (params.response_format?.type === 'json_schema') {\n    if ('$parseRaw' in params.response_format) {\n      const response_format = params.response_format as AutoParseableResponseFormat<ParsedT>;\n\n      return response_format.$parseRaw(content);\n    }\n\n    return JSON.parse(content);\n  }\n\n  return null;\n}\n\nfunction parseToolCall<Params extends ChatCompletionCreateParams>(\n  params: Params,\n  toolCall: ChatCompletionMessageFunctionToolCall,\n): ParsedFunctionToolCall {\n  const inputTool = params.tools?.find(\n    (inputTool) =>\n      isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name,\n  ) as ChatCompletionFunctionTool | undefined; // TS doesn't narrow based on isChatCompletionTool\n  return {\n    ...toolCall,\n    function: {\n      ...toolCall.function,\n      parsed_arguments:\n        isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n        : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n        : null,\n    },\n  };\n}\n\nexport function shouldParseToolCall(\n  params: ChatCompletionCreateParams | null | undefined,\n  toolCall: ChatCompletionMessageFunctionToolCall,\n): boolean {\n  if (!params || !('tools' in params) || !params.tools) {\n    return false;\n  }\n\n  const inputTool = params.tools?.find(\n    (inputTool) =>\n      isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name,\n  );\n  return (\n    isChatCompletionFunctionTool(inputTool) &&\n    (isAutoParsableTool(inputTool) || inputTool?.function.strict || false)\n  );\n}\n\nexport function hasAutoParseableInput(params: AnyChatCompletionCreateParams): boolean {\n  if (isAutoParsableResponseFormat(params.response_format)) {\n    return true;\n  }\n\n  return (\n    params.tools?.some(\n      (t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true),\n    ) ?? false\n  );\n}\n\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(\n  toolCalls: ChatCompletionMessage['tool_calls'],\n): asserts toolCalls is ChatCompletionMessageFunctionToolCall[] {\n  for (const toolCall of toolCalls || []) {\n    if (toolCall.type !== 'function') {\n      throw new OpenAIError(\n        `Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``,\n      );\n    }\n  }\n}\n\nexport function validateInputTools(tools: ChatCompletionCreateParamsBase['tools']) {\n  for (const tool of tools ?? []) {\n    if (tool.type !== 'function') {\n      throw new OpenAIError(\n        `Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``,\n      );\n    }\n\n    if (tool.function.strict !== true) {\n      throw new OpenAIError(\n        `The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`,\n      );\n    }\n  }\n}\n", "import {\n  type ChatCompletionAssistantMessageParam,\n  type ChatCompletionMessageParam,\n  type ChatCompletionToolMessageParam,\n} from '../resources';\n\nexport const isAssistantMessage = (\n  message: ChatCompletionMessageParam | null | undefined,\n): message is ChatCompletionAssistantMessageParam => {\n  return message?.role === 'assistant';\n};\n\nexport const isToolMessage = (\n  message: ChatCompletionMessageParam | null | undefined,\n): message is ChatCompletionToolMessageParam => {\n  return message?.role === 'tool';\n};\n\nexport function isPresent<T>(obj: T | null | undefined): obj is T {\n  return obj != null;\n}\n", "import { APIUserAbortError, OpenAIError } from '../error';\n\nexport class EventStream<EventTypes extends BaseEvents> {\n  controller: AbortController = new AbortController();\n\n  #connectedPromise: Promise<void>;\n  #resolveConnectedPromise: () => void = () => {};\n  #rejectConnectedPromise: (error: OpenAIError) => void = () => {};\n\n  #endPromise: Promise<void>;\n  #resolveEndPromise: () => void = () => {};\n  #rejectEndPromise: (error: OpenAIError) => void = () => {};\n\n  #listeners: {\n    [Event in keyof EventTypes]?: EventListeners<EventTypes, Event>;\n  } = {};\n\n  #ended = false;\n  #errored = false;\n  #aborted = false;\n  #catchingPromiseCreated = false;\n\n  constructor() {\n    this.#connectedPromise = new Promise<void>((resolve, reject) => {\n      this.#resolveConnectedPromise = resolve;\n      this.#rejectConnectedPromise = reject;\n    });\n\n    this.#endPromise = new Promise<void>((resolve, reject) => {\n      this.#resolveEndPromise = resolve;\n      this.#rejectEndPromise = reject;\n    });\n\n    // Don't let these promises cause unhandled rejection errors.\n    // we will manually cause an unhandled rejection error later\n    // if the user hasn't registered any error listener or called\n    // any promise-returning method.\n    this.#connectedPromise.catch(() => {});\n    this.#endPromise.catch(() => {});\n  }\n\n  protected _run(this: EventStream<EventTypes>, executor: () => Promise<any>) {\n    // Unfortunately if we call `executor()` immediately we get runtime errors about\n    // references to `this` before the `super()` constructor call returns.\n    setTimeout(() => {\n      executor().then(() => {\n        this._emitFinal();\n        this._emit('end');\n      }, this.#handleError.bind(this));\n    }, 0);\n  }\n\n  protected _connected(this: EventStream<EventTypes>) {\n    if (this.ended) return;\n    this.#resolveConnectedPromise();\n    this._emit('connect');\n  }\n\n  get ended(): boolean {\n    return this.#ended;\n  }\n\n  get errored(): boolean {\n    return this.#errored;\n  }\n\n  get aborted(): boolean {\n    return this.#aborted;\n  }\n\n  abort() {\n    this.controller.abort();\n  }\n\n  /**\n   * Adds the listener function to the end of the listeners array for the event.\n   * No checks are made to see if the listener has already been added. Multiple calls passing\n   * the same combination of event and listener will result in the listener being added, and\n   * called, multiple times.\n   * @returns this ChatCompletionStream, so that calls can be chained\n   */\n  on<Event extends keyof EventTypes>(event: Event, listener: EventListener<EventTypes, Event>): this {\n    const listeners: EventListeners<EventTypes, Event> =\n      this.#listeners[event] || (this.#listeners[event] = []);\n    listeners.push({ listener });\n    return this;\n  }\n\n  /**\n   * Removes the specified listener from the listener array for the event.\n   * off() will remove, at most, one instance of a listener from the listener array. If any single\n   * listener has been added multiple times to the listener array for the specified event, then\n   * off() must be called multiple times to remove each instance.\n   * @returns this ChatCompletionStream, so that calls can be chained\n   */\n  off<Event extends keyof EventTypes>(event: Event, listener: EventListener<EventTypes, Event>): this {\n    const listeners = this.#listeners[event];\n    if (!listeners) return this;\n    const index = listeners.findIndex((l) => l.listener === listener);\n    if (index >= 0) listeners.splice(index, 1);\n    return this;\n  }\n\n  /**\n   * Adds a one-time listener function for the event. The next time the event is triggered,\n   * this listener is removed and then invoked.\n   * @returns this ChatCompletionStream, so that calls can be chained\n   */\n  once<Event extends keyof EventTypes>(event: Event, listener: EventListener<EventTypes, Event>): this {\n    const listeners: EventListeners<EventTypes, Event> =\n      this.#listeners[event] || (this.#listeners[event] = []);\n    listeners.push({ listener, once: true });\n    return this;\n  }\n\n  /**\n   * This is similar to `.once()`, but returns a Promise that resolves the next time\n   * the event is triggered, instead of calling a listener callback.\n   * @returns a Promise that resolves the next time given event is triggered,\n   * or rejects if an error is emitted.  (If you request the 'error' event,\n   * returns a promise that resolves with the error).\n   *\n   * Example:\n   *\n   *   const message = await stream.emitted('message') // rejects if the stream errors\n   */\n  emitted<Event extends keyof EventTypes>(\n    event: Event,\n  ): Promise<\n    EventParameters<EventTypes, Event> extends [infer Param] ? Param\n    : EventParameters<EventTypes, Event> extends [] ? void\n    : EventParameters<EventTypes, Event>\n  > {\n    return new Promise((resolve, reject) => {\n      this.#catchingPromiseCreated = true;\n      if (event !== 'error') this.once('error', reject);\n      this.once(event, resolve as any);\n    });\n  }\n\n  async done(): Promise<void> {\n    this.#catchingPromiseCreated = true;\n    await this.#endPromise;\n  }\n\n  #handleError(this: EventStream<EventTypes>, error: unknown) {\n    this.#errored = true;\n    if (error instanceof Error && error.name === 'AbortError') {\n      error = new APIUserAbortError();\n    }\n    if (error instanceof APIUserAbortError) {\n      this.#aborted = true;\n      return this._emit('abort', error);\n    }\n    if (error instanceof OpenAIError) {\n      return this._emit('error', error);\n    }\n    if (error instanceof Error) {\n      const openAIError: OpenAIError = new OpenAIError(error.message);\n      // @ts-ignore\n      openAIError.cause = error;\n      return this._emit('error', openAIError);\n    }\n    return this._emit('error', new OpenAIError(String(error)));\n  }\n\n  _emit<Event extends keyof BaseEvents>(event: Event, ...args: EventParameters<BaseEvents, Event>): void;\n  _emit<Event extends keyof EventTypes>(event: Event, ...args: EventParameters<EventTypes, Event>): void;\n  _emit<Event extends keyof EventTypes>(\n    this: EventStream<EventTypes>,\n    event: Event,\n    ...args: EventParameters<EventTypes, Event>\n  ) {\n    // make sure we don't emit any events after end\n    if (this.#ended) {\n      return;\n    }\n\n    if (event === 'end') {\n      this.#ended = true;\n      this.#resolveEndPromise();\n    }\n\n    const listeners: EventListeners<EventTypes, Event> | undefined = this.#listeners[event];\n    if (listeners) {\n      this.#listeners[event] = listeners.filter((l) => !l.once) as any;\n      listeners.forEach(({ listener }: any) => listener(...(args as any)));\n    }\n\n    if (event === 'abort') {\n      const error = args[0] as APIUserAbortError;\n      if (!this.#catchingPromiseCreated && !listeners?.length) {\n        Promise.reject(error);\n      }\n      this.#rejectConnectedPromise(error);\n      this.#rejectEndPromise(error);\n      this._emit('end');\n      return;\n    }\n\n    if (event === 'error') {\n      // NOTE: _emit('error', error) should only be called from #handleError().\n\n      const error = args[0] as OpenAIError;\n      if (!this.#catchingPromiseCreated && !listeners?.length) {\n        // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n        // If you are seeing stack traces here, make sure to handle errors via either:\n        // - runner.on('error', () => ...)\n        // - await runner.done()\n        // - await runner.finalChatCompletion()\n        // - etc.\n        Promise.reject(error);\n      }\n      this.#rejectConnectedPromise(error);\n      this.#rejectEndPromise(error);\n      this._emit('end');\n    }\n  }\n\n  protected _emitFinal(): void {}\n}\n\ntype EventListener<Events, EventType extends keyof Events> = Events[EventType];\n\ntype EventListeners<Events, EventType extends keyof Events> = Array<{\n  listener: EventListener<Events, EventType>;\n  once?: boolean;\n}>;\n\nexport type EventParameters<Events, EventType extends keyof Events> = {\n  [Event in EventType]: EventListener<Events, EventType> extends (...args: infer P) => any ? P : never;\n}[EventType];\n\nexport interface BaseEvents {\n  connect: () => void;\n  error: (error: OpenAIError) => void;\n  abort: (error: APIUserAbortError) => void;\n  end: () => void;\n}\n", "import { type ChatCompletionRunner } from './ChatCompletionRunner';\nimport { type ChatCompletionStreamingRunner } from './ChatCompletionStreamingRunner';\nimport { JSONSchema } from './jsonschema';\n\ntype PromiseOrValue<T> = T | Promise<T>;\n\nexport type RunnableFunctionWithParse<Args extends object> = {\n  /**\n   * @param args the return value from `parse`.\n   * @param runner the runner evaluating this callback.\n   * @returns a string to send back to OpenAI.\n   */\n  function: (\n    args: Args,\n    runner: ChatCompletionRunner<unknown> | ChatCompletionStreamingRunner<unknown>,\n  ) => PromiseOrValue<unknown>;\n  /**\n   * @param input the raw args from the OpenAI function call.\n   * @returns the parsed arguments to pass to `function`\n   */\n  parse: (input: string) => PromiseOrValue<Args>;\n  /**\n   * The parameters the function accepts, describes as a JSON Schema object.\n   */\n  parameters: JSONSchema;\n  /**\n   * A description of what the function does, used by the model to choose when and how to call the function.\n   */\n  description: string;\n  /**\n   * The name of the function to be called. Will default to function.name if omitted.\n   */\n  name?: string | undefined;\n  strict?: boolean | undefined;\n};\n\nexport type RunnableFunctionWithoutParse = {\n  /**\n   * @param args the raw args from the OpenAI function call.\n   * @returns a string to send back to OpenAI\n   */\n  function: (\n    args: string,\n    runner: ChatCompletionRunner<unknown> | ChatCompletionStreamingRunner<unknown>,\n  ) => PromiseOrValue<unknown>;\n  /**\n   * The parameters the function accepts, describes as a JSON Schema object.\n   */\n  parameters: JSONSchema;\n  /**\n   * A description of what the function does, used by the model to choose when and how to call the function.\n   */\n  description: string;\n  /**\n   * The name of the function to be called. Will default to function.name if omitted.\n   */\n  name?: string | undefined;\n  strict?: boolean | undefined;\n};\n\nexport type RunnableFunction<Args extends object | string> =\n  Args extends string ? RunnableFunctionWithoutParse\n  : Args extends object ? RunnableFunctionWithParse<Args>\n  : never;\n\nexport type RunnableToolFunction<Args extends object | string> =\n  Args extends string ? RunnableToolFunctionWithoutParse\n  : Args extends object ? RunnableToolFunctionWithParse<Args>\n  : never;\n\nexport type RunnableToolFunctionWithoutParse = {\n  type: 'function';\n  function: RunnableFunctionWithoutParse;\n};\nexport type RunnableToolFunctionWithParse<Args extends object> = {\n  type: 'function';\n  function: RunnableFunctionWithParse<Args>;\n};\n\nexport function isRunnableFunctionWithParse<Args extends object>(\n  fn: any,\n): fn is RunnableFunctionWithParse<Args> {\n  return typeof (fn as any).parse === 'function';\n}\n\nexport type BaseFunctionsArgs = readonly (object | string)[];\n\nexport type RunnableFunctions<FunctionsArgs extends BaseFunctionsArgs> =\n  [any[]] extends [FunctionsArgs] ? readonly RunnableFunction<any>[]\n  : {\n      [Index in keyof FunctionsArgs]: Index extends number ? RunnableFunction<FunctionsArgs[Index]>\n      : FunctionsArgs[Index];\n    };\n\nexport type RunnableTools<FunctionsArgs extends BaseFunctionsArgs> =\n  [any[]] extends [FunctionsArgs] ? readonly RunnableToolFunction<any>[]\n  : {\n      [Index in keyof FunctionsArgs]: Index extends number ? RunnableToolFunction<FunctionsArgs[Index]>\n      : FunctionsArgs[Index];\n    };\n\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction<Args extends object> {\n  type: 'function';\n  function: RunnableFunctionWithParse<Args>;\n\n  constructor(input: RunnableFunctionWithParse<Args>) {\n    this.type = 'function';\n    this.function = input;\n  }\n}\n", "import { OpenAIError } from '../error';\nimport type OpenAI from '../index';\nimport type { RequestOptions } from '../internal/request-options';\nimport { isAutoParsableTool, parseChatCompletion } from '../lib/parser';\nimport type {\n  ChatCompletion,\n  ChatCompletionCreateParams,\n  ChatCompletionMessage,\n  ChatCompletionMessageFunctionToolCall,\n  ChatCompletionMessageParam,\n  ChatCompletionTool,\n  ParsedChatCompletion,\n} from '../resources/chat/completions';\nimport type { CompletionUsage } from '../resources/completions';\nimport type { ChatCompletionToolRunnerParams } from './ChatCompletionRunner';\nimport type { ChatCompletionStreamingToolRunnerParams } from './ChatCompletionStreamingRunner';\nimport { isAssistantMessage, isToolMessage } from './chatCompletionUtils';\nimport { BaseEvents, EventStream } from './EventStream';\nimport {\n  isRunnableFunctionWithParse,\n  type BaseFunctionsArgs,\n  type RunnableFunction,\n  type RunnableToolFunction,\n} from './RunnableFunction';\n\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport interface RunnerOptions extends RequestOptions {\n  /** How many requests to make before canceling. Default 10. */\n  maxChatCompletions?: number;\n}\n\nexport class AbstractChatCompletionRunner<\n  EventTypes extends AbstractChatCompletionRunnerEvents,\n  ParsedT,\n> extends EventStream<EventTypes> {\n  protected _chatCompletions: ParsedChatCompletion<ParsedT>[] = [];\n  messages: ChatCompletionMessageParam[] = [];\n\n  protected _addChatCompletion(\n    this: AbstractChatCompletionRunner<AbstractChatCompletionRunnerEvents, ParsedT>,\n    chatCompletion: ParsedChatCompletion<ParsedT>,\n  ): ParsedChatCompletion<ParsedT> {\n    this._chatCompletions.push(chatCompletion);\n    this._emit('chatCompletion', chatCompletion);\n    const message = chatCompletion.choices[0]?.message;\n    if (message) this._addMessage(message as ChatCompletionMessageParam);\n    return chatCompletion;\n  }\n\n  protected _addMessage(\n    this: AbstractChatCompletionRunner<AbstractChatCompletionRunnerEvents, ParsedT>,\n    message: ChatCompletionMessageParam,\n    emit = true,\n  ) {\n    if (!('content' in message)) message.content = null;\n\n    this.messages.push(message);\n\n    if (emit) {\n      this._emit('message', message);\n      if (isToolMessage(message) && message.content) {\n        // Note, this assumes that {role: 'tool', content: \u2026} is always the result of a call of tool of type=function.\n        this._emit('functionToolCallResult', message.content as string);\n      } else if (isAssistantMessage(message) && message.tool_calls) {\n        for (const tool_call of message.tool_calls) {\n          if (tool_call.type === 'function') {\n            this._emit('functionToolCall', tool_call.function);\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * @returns a promise that resolves with the final ChatCompletion, or rejects\n   * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n   */\n  async finalChatCompletion(): Promise<ParsedChatCompletion<ParsedT>> {\n    await this.done();\n    const completion = this._chatCompletions[this._chatCompletions.length - 1];\n    if (!completion) throw new OpenAIError('stream ended without producing a ChatCompletion');\n    return completion;\n  }\n\n  #getFinalContent(): string | null {\n    return this.#getFinalMessage().content ?? null;\n  }\n\n  /**\n   * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n   * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n   */\n  async finalContent(): Promise<string | null> {\n    await this.done();\n    return this.#getFinalContent();\n  }\n\n  #getFinalMessage(): ChatCompletionMessage {\n    let i = this.messages.length;\n    while (i-- > 0) {\n      const message = this.messages[i];\n      if (isAssistantMessage(message)) {\n        // TODO: support audio here\n        const ret: Omit<ChatCompletionMessage, 'audio'> = {\n          ...message,\n          content: (message as ChatCompletionMessage).content ?? null,\n          refusal: (message as ChatCompletionMessage).refusal ?? null,\n        };\n        return ret;\n      }\n    }\n    throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n  }\n\n  /**\n   * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n   * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n   */\n  async finalMessage(): Promise<ChatCompletionMessage> {\n    await this.done();\n    return this.#getFinalMessage();\n  }\n\n  #getFinalFunctionToolCall(): ChatCompletionMessageFunctionToolCall.Function | undefined {\n    for (let i = this.messages.length - 1; i >= 0; i--) {\n      const message = this.messages[i];\n      if (isAssistantMessage(message) && message?.tool_calls?.length) {\n        return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n      }\n    }\n\n    return;\n  }\n\n  /**\n   * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n   * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n   */\n  async finalFunctionToolCall(): Promise<ChatCompletionMessageFunctionToolCall.Function | undefined> {\n    await this.done();\n    return this.#getFinalFunctionToolCall();\n  }\n\n  #getFinalFunctionToolCallResult(): string | undefined {\n    for (let i = this.messages.length - 1; i >= 0; i--) {\n      const message = this.messages[i];\n      if (\n        isToolMessage(message) &&\n        message.content != null &&\n        typeof message.content === 'string' &&\n        this.messages.some(\n          (x) =>\n            x.role === 'assistant' &&\n            x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id),\n        )\n      ) {\n        return message.content;\n      }\n    }\n\n    return;\n  }\n\n  async finalFunctionToolCallResult(): Promise<string | undefined> {\n    await this.done();\n    return this.#getFinalFunctionToolCallResult();\n  }\n\n  #calculateTotalUsage(): CompletionUsage {\n    const total: CompletionUsage = {\n      completion_tokens: 0,\n      prompt_tokens: 0,\n      total_tokens: 0,\n    };\n    for (const { usage } of this._chatCompletions) {\n      if (usage) {\n        total.completion_tokens += usage.completion_tokens;\n        total.prompt_tokens += usage.prompt_tokens;\n        total.total_tokens += usage.total_tokens;\n      }\n    }\n    return total;\n  }\n\n  async totalUsage(): Promise<CompletionUsage> {\n    await this.done();\n    return this.#calculateTotalUsage();\n  }\n\n  allChatCompletions(): ChatCompletion[] {\n    return [...this._chatCompletions];\n  }\n\n  protected override _emitFinal(\n    this: AbstractChatCompletionRunner<AbstractChatCompletionRunnerEvents, ParsedT>,\n  ) {\n    const completion = this._chatCompletions[this._chatCompletions.length - 1];\n    if (completion) this._emit('finalChatCompletion', completion);\n    const finalMessage = this.#getFinalMessage();\n    if (finalMessage) this._emit('finalMessage', finalMessage);\n    const finalContent = this.#getFinalContent();\n    if (finalContent) this._emit('finalContent', finalContent);\n\n    const finalFunctionCall = this.#getFinalFunctionToolCall();\n    if (finalFunctionCall) this._emit('finalFunctionToolCall', finalFunctionCall);\n\n    const finalFunctionCallResult = this.#getFinalFunctionToolCallResult();\n    if (finalFunctionCallResult != null) this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n\n    if (this._chatCompletions.some((c) => c.usage)) {\n      this._emit('totalUsage', this.#calculateTotalUsage());\n    }\n  }\n\n  #validateParams(params: ChatCompletionCreateParams): void {\n    if (params.n != null && params.n > 1) {\n      throw new OpenAIError(\n        'ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.',\n      );\n    }\n  }\n\n  protected async _createChatCompletion(\n    client: OpenAI,\n    params: ChatCompletionCreateParams,\n    options?: RequestOptions,\n  ): Promise<ParsedChatCompletion<ParsedT>> {\n    const signal = options?.signal;\n    if (signal) {\n      if (signal.aborted) this.controller.abort();\n      signal.addEventListener('abort', () => this.controller.abort());\n    }\n    this.#validateParams(params);\n\n    const chatCompletion = await client.chat.completions.create(\n      { ...params, stream: false },\n      { ...options, signal: this.controller.signal },\n    );\n    this._connected();\n    return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n  }\n\n  protected async _runChatCompletion(\n    client: OpenAI,\n    params: ChatCompletionCreateParams,\n    options?: RequestOptions,\n  ): Promise<ChatCompletion> {\n    for (const message of params.messages) {\n      this._addMessage(message, false);\n    }\n    return await this._createChatCompletion(client, params, options);\n  }\n\n  protected async _runTools<FunctionsArgs extends BaseFunctionsArgs>(\n    client: OpenAI,\n    params:\n      | ChatCompletionToolRunnerParams<FunctionsArgs>\n      | ChatCompletionStreamingToolRunnerParams<FunctionsArgs>,\n    options?: RunnerOptions,\n  ) {\n    const role = 'tool' as const;\n    const { tool_choice = 'auto', stream, ...restParams } = params;\n    const singleFunctionToCall =\n      typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n    const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n\n    // TODO(someday): clean this logic up\n    const inputTools = params.tools.map((tool): RunnableToolFunction<any> => {\n      if (isAutoParsableTool(tool)) {\n        if (!tool.$callback) {\n          throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n        }\n\n        return {\n          type: 'function',\n          function: {\n            function: tool.$callback,\n            name: tool.function.name,\n            description: tool.function.description || '',\n            parameters: tool.function.parameters as any,\n            parse: tool.$parseRaw,\n            strict: true,\n          },\n        };\n      }\n\n      return tool as any as RunnableToolFunction<any>;\n    });\n\n    const functionsByName: Record<string, RunnableFunction<any>> = {};\n    for (const f of inputTools) {\n      if (f.type === 'function') {\n        functionsByName[f.function.name || f.function.function.name] = f.function;\n      }\n    }\n\n    const tools: ChatCompletionTool[] =\n      'tools' in params ?\n        inputTools.map((t) =>\n          t.type === 'function' ?\n            {\n              type: 'function',\n              function: {\n                name: t.function.name || t.function.function.name,\n                parameters: t.function.parameters as Record<string, unknown>,\n                description: t.function.description,\n                strict: t.function.strict,\n              },\n            }\n          : (t as unknown as ChatCompletionTool),\n        )\n      : (undefined as any);\n\n    for (const message of params.messages) {\n      this._addMessage(message, false);\n    }\n\n    for (let i = 0; i < maxChatCompletions; ++i) {\n      const chatCompletion: ChatCompletion = await this._createChatCompletion(\n        client,\n        {\n          ...restParams,\n          tool_choice,\n          tools,\n          messages: [...this.messages],\n        },\n        options,\n      );\n      const message = chatCompletion.choices[0]?.message;\n      if (!message) {\n        throw new OpenAIError(`missing message in ChatCompletion response`);\n      }\n      if (!message.tool_calls?.length) {\n        return;\n      }\n\n      for (const tool_call of message.tool_calls) {\n        if (tool_call.type !== 'function') continue;\n        const tool_call_id = tool_call.id;\n        const { name, arguments: args } = tool_call.function;\n        const fn = functionsByName[name];\n\n        if (!fn) {\n          const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(\n            functionsByName,\n          )\n            .map((name) => JSON.stringify(name))\n            .join(', ')}. Please try again`;\n\n          this._addMessage({ role, tool_call_id, content });\n          continue;\n        } else if (singleFunctionToCall && singleFunctionToCall !== name) {\n          const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(\n            singleFunctionToCall,\n          )} requested. Please try again`;\n\n          this._addMessage({ role, tool_call_id, content });\n          continue;\n        }\n\n        let parsed;\n        try {\n          parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n        } catch (error) {\n          const content = error instanceof Error ? error.message : String(error);\n          this._addMessage({ role, tool_call_id, content });\n          continue;\n        }\n\n        // @ts-expect-error it can't rule out `never` type.\n        const rawContent = await fn.function(parsed, this);\n        const content = this.#stringifyFunctionCallResult(rawContent);\n        this._addMessage({ role, tool_call_id, content });\n\n        if (singleFunctionToCall) {\n          return;\n        }\n      }\n    }\n\n    return;\n  }\n\n  #stringifyFunctionCallResult(rawContent: unknown): string {\n    return (\n      typeof rawContent === 'string' ? rawContent\n      : rawContent === undefined ? 'undefined'\n      : JSON.stringify(rawContent)\n    );\n  }\n}\n\nexport interface AbstractChatCompletionRunnerEvents extends BaseEvents {\n  functionToolCall: (functionCall: ChatCompletionMessageFunctionToolCall.Function) => void;\n  message: (message: ChatCompletionMessageParam) => void;\n  chatCompletion: (completion: ChatCompletion) => void;\n  finalContent: (contentSnapshot: string) => void;\n  finalMessage: (message: ChatCompletionMessageParam) => void;\n  finalChatCompletion: (completion: ChatCompletion) => void;\n  finalFunctionToolCall: (functionCall: ChatCompletionMessageFunctionToolCall.Function) => void;\n  functionToolCallResult: (content: string) => void;\n  finalFunctionToolCallResult: (content: string) => void;\n  totalUsage: (usage: CompletionUsage) => void;\n}\n", "import {\n  type ChatCompletionMessageParam,\n  type ChatCompletionCreateParamsNonStreaming,\n} from '../resources/chat/completions';\nimport { type BaseFunctionsArgs, RunnableTools } from './RunnableFunction';\nimport {\n  AbstractChatCompletionRunner,\n  AbstractChatCompletionRunnerEvents,\n  RunnerOptions,\n} from './AbstractChatCompletionRunner';\nimport { isAssistantMessage } from './chatCompletionUtils';\nimport OpenAI from '../index';\nimport { AutoParseableTool } from '../lib/parser';\n\nexport interface ChatCompletionRunnerEvents extends AbstractChatCompletionRunnerEvents {\n  content: (content: string) => void;\n}\n\nexport type ChatCompletionToolRunnerParams<FunctionsArgs extends BaseFunctionsArgs> = Omit<\n  ChatCompletionCreateParamsNonStreaming,\n  'tools'\n> & {\n  tools: RunnableTools<FunctionsArgs> | AutoParseableTool<any, true>[];\n};\n\nexport class ChatCompletionRunner<ParsedT = null> extends AbstractChatCompletionRunner<\n  ChatCompletionRunnerEvents,\n  ParsedT\n> {\n  static runTools<ParsedT>(\n    client: OpenAI,\n    params: ChatCompletionToolRunnerParams<any[]>,\n    options?: RunnerOptions,\n  ): ChatCompletionRunner<ParsedT> {\n    const runner = new ChatCompletionRunner<ParsedT>();\n    const opts = {\n      ...options,\n      headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n    };\n    runner._run(() => runner._runTools(client, params, opts));\n    return runner;\n  }\n\n  override _addMessage(\n    this: ChatCompletionRunner<ParsedT>,\n    message: ChatCompletionMessageParam,\n    emit: boolean = true,\n  ) {\n    super._addMessage(message, emit);\n    if (isAssistantMessage(message) && message.content) {\n      this._emit('content', message.content as string);\n    }\n  }\n}\n", "const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\n\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\n\nconst Allow = {\n  STR,\n  NUM,\n  ARR,\n  OBJ,\n  NULL,\n  BOOL,\n  NAN,\n  INFINITY,\n  MINUS_INFINITY,\n  INF,\n  SPECIAL,\n  ATOM,\n  COLLECTION,\n  ALL,\n};\n\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {}\n\nclass MalformedJSON extends Error {}\n\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString: string, allowPartial: number = Allow.ALL): any {\n  if (typeof jsonString !== 'string') {\n    throw new TypeError(`expecting str, got ${typeof jsonString}`);\n  }\n  if (!jsonString.trim()) {\n    throw new Error(`${jsonString} is empty`);\n  }\n  return _parseJSON(jsonString.trim(), allowPartial);\n}\n\nconst _parseJSON = (jsonString: string, allow: number) => {\n  const length = jsonString.length;\n  let index = 0;\n\n  const markPartialJSON = (msg: string) => {\n    throw new PartialJSON(`${msg} at position ${index}`);\n  };\n\n  const throwMalformedError = (msg: string) => {\n    throw new MalformedJSON(`${msg} at position ${index}`);\n  };\n\n  const parseAny: () => any = () => {\n    skipBlank();\n    if (index >= length) markPartialJSON('Unexpected end of input');\n    if (jsonString[index] === '\"') return parseStr();\n    if (jsonString[index] === '{') return parseObj();\n    if (jsonString[index] === '[') return parseArr();\n    if (\n      jsonString.substring(index, index + 4) === 'null' ||\n      (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))\n    ) {\n      index += 4;\n      return null;\n    }\n    if (\n      jsonString.substring(index, index + 4) === 'true' ||\n      (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))\n    ) {\n      index += 4;\n      return true;\n    }\n    if (\n      jsonString.substring(index, index + 5) === 'false' ||\n      (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))\n    ) {\n      index += 5;\n      return false;\n    }\n    if (\n      jsonString.substring(index, index + 8) === 'Infinity' ||\n      (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))\n    ) {\n      index += 8;\n      return Infinity;\n    }\n    if (\n      jsonString.substring(index, index + 9) === '-Infinity' ||\n      (Allow.MINUS_INFINITY & allow &&\n        1 < length - index &&\n        length - index < 9 &&\n        '-Infinity'.startsWith(jsonString.substring(index)))\n    ) {\n      index += 9;\n      return -Infinity;\n    }\n    if (\n      jsonString.substring(index, index + 3) === 'NaN' ||\n      (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))\n    ) {\n      index += 3;\n      return NaN;\n    }\n    return parseNum();\n  };\n\n  const parseStr: () => string = () => {\n    const start = index;\n    let escape = false;\n    index++; // skip initial quote\n    while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n      escape = jsonString[index] === '\\\\' ? !escape : false;\n      index++;\n    }\n    if (jsonString.charAt(index) == '\"') {\n      try {\n        return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n      } catch (e) {\n        throwMalformedError(String(e));\n      }\n    } else if (Allow.STR & allow) {\n      try {\n        return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n      } catch (e) {\n        // SyntaxError: Invalid escape sequence\n        return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n      }\n    }\n    markPartialJSON('Unterminated string literal');\n  };\n\n  const parseObj = () => {\n    index++; // skip initial brace\n    skipBlank();\n    const obj: Record<string, any> = {};\n    try {\n      while (jsonString[index] !== '}') {\n        skipBlank();\n        if (index >= length && Allow.OBJ & allow) return obj;\n        const key = parseStr();\n        skipBlank();\n        index++; // skip colon\n        try {\n          const value = parseAny();\n          Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n        } catch (e) {\n          if (Allow.OBJ & allow) return obj;\n          else throw e;\n        }\n        skipBlank();\n        if (jsonString[index] === ',') index++; // skip comma\n      }\n    } catch (e) {\n      if (Allow.OBJ & allow) return obj;\n      else markPartialJSON(\"Expected '}' at end of object\");\n    }\n    index++; // skip final brace\n    return obj;\n  };\n\n  const parseArr = () => {\n    index++; // skip initial bracket\n    const arr = [];\n    try {\n      while (jsonString[index] !== ']') {\n        arr.push(parseAny());\n        skipBlank();\n        if (jsonString[index] === ',') {\n          index++; // skip comma\n        }\n      }\n    } catch (e) {\n      if (Allow.ARR & allow) {\n        return arr;\n      }\n      markPartialJSON(\"Expected ']' at end of array\");\n    }\n    index++; // skip final bracket\n    return arr;\n  };\n\n  const parseNum = () => {\n    if (index === 0) {\n      if (jsonString === '-' && Allow.NUM & allow) markPartialJSON(\"Not sure what '-' is\");\n      try {\n        return JSON.parse(jsonString);\n      } catch (e) {\n        if (Allow.NUM & allow) {\n          try {\n            if ('.' === jsonString[jsonString.length - 1])\n              return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n            return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n          } catch (e) {}\n        }\n        throwMalformedError(String(e));\n      }\n    }\n\n    const start = index;\n\n    if (jsonString[index] === '-') index++;\n    while (jsonString[index] && !',]}'.includes(jsonString[index]!)) index++;\n\n    if (index == length && !(Allow.NUM & allow)) markPartialJSON('Unterminated number literal');\n\n    try {\n      return JSON.parse(jsonString.substring(start, index));\n    } catch (e) {\n      if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n        markPartialJSON(\"Not sure what '-' is\");\n      try {\n        return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n      } catch (e) {\n        throwMalformedError(String(e));\n      }\n    }\n  };\n\n  const skipBlank = () => {\n    while (index < length && ' \\n\\r\\t'.includes(jsonString[index]!)) {\n      index++;\n    }\n  };\n\n  return parseAny();\n};\n\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input: string) => parseJSON(input, Allow.ALL ^ Allow.NUM);\n\nexport { partialParse, PartialJSON, MalformedJSON };\n", "/** @deprecated Import from ./core/streaming instead */\nexport * from './core/streaming';\n", "import { partialParse } from '../_vendor/partial-json-parser/parser';\nimport {\n  APIUserAbortError,\n  ContentFilterFinishReasonError,\n  LengthFinishReasonError,\n  OpenAIError,\n} from '../error';\nimport OpenAI from '../index';\nimport { RequestOptions } from '../internal/request-options';\nimport { type ReadableStream } from '../internal/shim-types';\nimport {\n  AutoParseableResponseFormat,\n  hasAutoParseableInput,\n  isAutoParsableResponseFormat,\n  isAutoParsableTool,\n  isChatCompletionFunctionTool,\n  maybeParseChatCompletion,\n  shouldParseToolCall,\n} from '../lib/parser';\nimport { ChatCompletionFunctionTool, ParsedChatCompletion } from '../resources/chat/completions';\nimport {\n  ChatCompletionTokenLogprob,\n  type ChatCompletion,\n  type ChatCompletionChunk,\n  type ChatCompletionCreateParams,\n  type ChatCompletionCreateParamsBase,\n  type ChatCompletionCreateParamsStreaming,\n  type ChatCompletionRole,\n} from '../resources/chat/completions/completions';\nimport { Stream } from '../streaming';\nimport {\n  AbstractChatCompletionRunner,\n  type AbstractChatCompletionRunnerEvents,\n} from './AbstractChatCompletionRunner';\n\nexport interface ContentDeltaEvent {\n  delta: string;\n  snapshot: string;\n  parsed: unknown | null;\n}\n\nexport interface ContentDoneEvent<ParsedT = null> {\n  content: string;\n  parsed: ParsedT | null;\n}\n\nexport interface RefusalDeltaEvent {\n  delta: string;\n  snapshot: string;\n}\n\nexport interface RefusalDoneEvent {\n  refusal: string;\n}\n\nexport interface FunctionToolCallArgumentsDeltaEvent {\n  name: string;\n\n  index: number;\n\n  arguments: string;\n\n  parsed_arguments: unknown;\n\n  arguments_delta: string;\n}\n\nexport interface FunctionToolCallArgumentsDoneEvent {\n  name: string;\n\n  index: number;\n\n  arguments: string;\n\n  parsed_arguments: unknown;\n}\n\nexport interface LogProbsContentDeltaEvent {\n  content: Array<ChatCompletionTokenLogprob>;\n  snapshot: Array<ChatCompletionTokenLogprob>;\n}\n\nexport interface LogProbsContentDoneEvent {\n  content: Array<ChatCompletionTokenLogprob>;\n}\n\nexport interface LogProbsRefusalDeltaEvent {\n  refusal: Array<ChatCompletionTokenLogprob>;\n  snapshot: Array<ChatCompletionTokenLogprob>;\n}\n\nexport interface LogProbsRefusalDoneEvent {\n  refusal: Array<ChatCompletionTokenLogprob>;\n}\n\nexport interface ChatCompletionStreamEvents<ParsedT = null> extends AbstractChatCompletionRunnerEvents {\n  content: (contentDelta: string, contentSnapshot: string) => void;\n  chunk: (chunk: ChatCompletionChunk, snapshot: ChatCompletionSnapshot) => void;\n\n  'content.delta': (props: ContentDeltaEvent) => void;\n  'content.done': (props: ContentDoneEvent<ParsedT>) => void;\n\n  'refusal.delta': (props: RefusalDeltaEvent) => void;\n  'refusal.done': (props: RefusalDoneEvent) => void;\n\n  'tool_calls.function.arguments.delta': (props: FunctionToolCallArgumentsDeltaEvent) => void;\n  'tool_calls.function.arguments.done': (props: FunctionToolCallArgumentsDoneEvent) => void;\n\n  'logprobs.content.delta': (props: LogProbsContentDeltaEvent) => void;\n  'logprobs.content.done': (props: LogProbsContentDoneEvent) => void;\n\n  'logprobs.refusal.delta': (props: LogProbsRefusalDeltaEvent) => void;\n  'logprobs.refusal.done': (props: LogProbsRefusalDoneEvent) => void;\n}\n\nexport type ChatCompletionStreamParams = Omit<ChatCompletionCreateParamsBase, 'stream'> & {\n  stream?: true;\n};\n\ninterface ChoiceEventState {\n  content_done: boolean;\n  refusal_done: boolean;\n  logprobs_content_done: boolean;\n  logprobs_refusal_done: boolean;\n  current_tool_call_index: number | null;\n  done_tool_calls: Set<number>;\n}\n\nexport class ChatCompletionStream<ParsedT = null>\n  extends AbstractChatCompletionRunner<ChatCompletionStreamEvents<ParsedT>, ParsedT>\n  implements AsyncIterable<ChatCompletionChunk>\n{\n  #params: ChatCompletionCreateParams | null;\n  #choiceEventStates: ChoiceEventState[];\n  #currentChatCompletionSnapshot: ChatCompletionSnapshot | undefined;\n\n  constructor(params: ChatCompletionCreateParams | null) {\n    super();\n    this.#params = params;\n    this.#choiceEventStates = [];\n  }\n\n  get currentChatCompletionSnapshot(): ChatCompletionSnapshot | undefined {\n    return this.#currentChatCompletionSnapshot;\n  }\n\n  /**\n   * Intended for use on the frontend, consuming a stream produced with\n   * `.toReadableStream()` on the backend.\n   *\n   * Note that messages sent to the model do not appear in `.on('message')`\n   * in this context.\n   */\n  static fromReadableStream(stream: ReadableStream): ChatCompletionStream<null> {\n    const runner = new ChatCompletionStream(null);\n    runner._run(() => runner._fromReadableStream(stream));\n    return runner;\n  }\n\n  static createChatCompletion<ParsedT>(\n    client: OpenAI,\n    params: ChatCompletionStreamParams,\n    options?: RequestOptions,\n  ): ChatCompletionStream<ParsedT> {\n    const runner = new ChatCompletionStream<ParsedT>(params as ChatCompletionCreateParamsStreaming);\n    runner._run(() =>\n      runner._runChatCompletion(\n        client,\n        { ...params, stream: true },\n        { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } },\n      ),\n    );\n    return runner;\n  }\n\n  #beginRequest() {\n    if (this.ended) return;\n    this.#currentChatCompletionSnapshot = undefined;\n  }\n\n  #getChoiceEventState(choice: ChatCompletionSnapshot.Choice): ChoiceEventState {\n    let state = this.#choiceEventStates[choice.index];\n    if (state) {\n      return state;\n    }\n\n    state = {\n      content_done: false,\n      refusal_done: false,\n      logprobs_content_done: false,\n      logprobs_refusal_done: false,\n      done_tool_calls: new Set(),\n      current_tool_call_index: null,\n    };\n    this.#choiceEventStates[choice.index] = state;\n    return state;\n  }\n\n  #addChunk(this: ChatCompletionStream<ParsedT>, chunk: ChatCompletionChunk) {\n    if (this.ended) return;\n\n    const completion = this.#accumulateChatCompletion(chunk);\n    this._emit('chunk', chunk, completion);\n\n    for (const choice of chunk.choices) {\n      const choiceSnapshot = completion.choices[choice.index]!;\n\n      if (\n        choice.delta.content != null &&\n        choiceSnapshot.message?.role === 'assistant' &&\n        choiceSnapshot.message?.content\n      ) {\n        this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n        this._emit('content.delta', {\n          delta: choice.delta.content,\n          snapshot: choiceSnapshot.message.content,\n          parsed: choiceSnapshot.message.parsed,\n        });\n      }\n\n      if (\n        choice.delta.refusal != null &&\n        choiceSnapshot.message?.role === 'assistant' &&\n        choiceSnapshot.message?.refusal\n      ) {\n        this._emit('refusal.delta', {\n          delta: choice.delta.refusal,\n          snapshot: choiceSnapshot.message.refusal,\n        });\n      }\n\n      if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n        this._emit('logprobs.content.delta', {\n          content: choice.logprobs?.content,\n          snapshot: choiceSnapshot.logprobs?.content ?? [],\n        });\n      }\n\n      if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n        this._emit('logprobs.refusal.delta', {\n          refusal: choice.logprobs?.refusal,\n          snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n        });\n      }\n\n      const state = this.#getChoiceEventState(choiceSnapshot);\n\n      if (choiceSnapshot.finish_reason) {\n        this.#emitContentDoneEvents(choiceSnapshot);\n\n        if (state.current_tool_call_index != null) {\n          this.#emitToolCallDoneEvent(choiceSnapshot, state.current_tool_call_index);\n        }\n      }\n\n      for (const toolCall of choice.delta.tool_calls ?? []) {\n        if (state.current_tool_call_index !== toolCall.index) {\n          this.#emitContentDoneEvents(choiceSnapshot);\n\n          // new tool call started, the previous one is done\n          if (state.current_tool_call_index != null) {\n            this.#emitToolCallDoneEvent(choiceSnapshot, state.current_tool_call_index);\n          }\n        }\n\n        state.current_tool_call_index = toolCall.index;\n      }\n\n      for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n        const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n        if (!toolCallSnapshot?.type) {\n          continue;\n        }\n\n        if (toolCallSnapshot?.type === 'function') {\n          this._emit('tool_calls.function.arguments.delta', {\n            name: toolCallSnapshot.function?.name,\n            index: toolCallDelta.index,\n            arguments: toolCallSnapshot.function.arguments,\n            parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n            arguments_delta: toolCallDelta.function?.arguments ?? '',\n          });\n        } else {\n          assertNever(toolCallSnapshot?.type);\n        }\n      }\n    }\n  }\n\n  #emitToolCallDoneEvent(choiceSnapshot: ChatCompletionSnapshot.Choice, toolCallIndex: number) {\n    const state = this.#getChoiceEventState(choiceSnapshot);\n    if (state.done_tool_calls.has(toolCallIndex)) {\n      // we've already fired the done event\n      return;\n    }\n\n    const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n    if (!toolCallSnapshot) {\n      throw new Error('no tool call snapshot');\n    }\n    if (!toolCallSnapshot.type) {\n      throw new Error('tool call snapshot missing `type`');\n    }\n\n    if (toolCallSnapshot.type === 'function') {\n      const inputTool = this.#params?.tools?.find(\n        (tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name,\n      ) as ChatCompletionFunctionTool | undefined; // TS doesn't narrow based on isChatCompletionTool\n\n      this._emit('tool_calls.function.arguments.done', {\n        name: toolCallSnapshot.function.name,\n        index: toolCallIndex,\n        arguments: toolCallSnapshot.function.arguments,\n        parsed_arguments:\n          isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n          : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n          : null,\n      });\n    } else {\n      assertNever(toolCallSnapshot.type);\n    }\n  }\n\n  #emitContentDoneEvents(choiceSnapshot: ChatCompletionSnapshot.Choice) {\n    const state = this.#getChoiceEventState(choiceSnapshot);\n\n    if (choiceSnapshot.message.content && !state.content_done) {\n      state.content_done = true;\n\n      const responseFormat = this.#getAutoParseableResponseFormat();\n\n      this._emit('content.done', {\n        content: choiceSnapshot.message.content,\n        parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : (null as any),\n      });\n    }\n\n    if (choiceSnapshot.message.refusal && !state.refusal_done) {\n      state.refusal_done = true;\n\n      this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n    }\n\n    if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n      state.logprobs_content_done = true;\n\n      this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n    }\n\n    if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n      state.logprobs_refusal_done = true;\n\n      this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n    }\n  }\n\n  #endRequest(): ParsedChatCompletion<ParsedT> {\n    if (this.ended) {\n      throw new OpenAIError(`stream has ended, this shouldn't happen`);\n    }\n    const snapshot = this.#currentChatCompletionSnapshot;\n    if (!snapshot) {\n      throw new OpenAIError(`request ended without sending any chunks`);\n    }\n    this.#currentChatCompletionSnapshot = undefined;\n    this.#choiceEventStates = [];\n    return finalizeChatCompletion(snapshot, this.#params);\n  }\n\n  protected override async _createChatCompletion(\n    client: OpenAI,\n    params: ChatCompletionCreateParams,\n    options?: RequestOptions,\n  ): Promise<ParsedChatCompletion<ParsedT>> {\n    super._createChatCompletion;\n    const signal = options?.signal;\n    if (signal) {\n      if (signal.aborted) this.controller.abort();\n      signal.addEventListener('abort', () => this.controller.abort());\n    }\n    this.#beginRequest();\n\n    const stream = await client.chat.completions.create(\n      { ...params, stream: true },\n      { ...options, signal: this.controller.signal },\n    );\n    this._connected();\n    for await (const chunk of stream) {\n      this.#addChunk(chunk);\n    }\n    if (stream.controller.signal?.aborted) {\n      throw new APIUserAbortError();\n    }\n    return this._addChatCompletion(this.#endRequest());\n  }\n\n  protected async _fromReadableStream(\n    readableStream: ReadableStream,\n    options?: RequestOptions,\n  ): Promise<ChatCompletion> {\n    const signal = options?.signal;\n    if (signal) {\n      if (signal.aborted) this.controller.abort();\n      signal.addEventListener('abort', () => this.controller.abort());\n    }\n    this.#beginRequest();\n    this._connected();\n    const stream = Stream.fromReadableStream<ChatCompletionChunk>(readableStream, this.controller);\n    let chatId;\n    for await (const chunk of stream) {\n      if (chatId && chatId !== chunk.id) {\n        // A new request has been made.\n        this._addChatCompletion(this.#endRequest());\n      }\n\n      this.#addChunk(chunk);\n      chatId = chunk.id;\n    }\n    if (stream.controller.signal?.aborted) {\n      throw new APIUserAbortError();\n    }\n    return this._addChatCompletion(this.#endRequest());\n  }\n\n  #getAutoParseableResponseFormat(): AutoParseableResponseFormat<ParsedT> | null {\n    const responseFormat = this.#params?.response_format;\n    if (isAutoParsableResponseFormat<ParsedT>(responseFormat)) {\n      return responseFormat;\n    }\n\n    return null;\n  }\n\n  #accumulateChatCompletion(chunk: ChatCompletionChunk): ChatCompletionSnapshot {\n    let snapshot = this.#currentChatCompletionSnapshot;\n    const { choices, ...rest } = chunk;\n    if (!snapshot) {\n      snapshot = this.#currentChatCompletionSnapshot = {\n        ...rest,\n        choices: [],\n      };\n    } else {\n      Object.assign(snapshot, rest);\n    }\n\n    for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n      let choice = snapshot.choices[index];\n      if (!choice) {\n        choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n      }\n\n      if (logprobs) {\n        if (!choice.logprobs) {\n          choice.logprobs = Object.assign({}, logprobs);\n        } else {\n          const { content, refusal, ...rest } = logprobs;\n          assertIsEmpty(rest);\n          Object.assign(choice.logprobs, rest);\n\n          if (content) {\n            choice.logprobs.content ??= [];\n            choice.logprobs.content.push(...content);\n          }\n\n          if (refusal) {\n            choice.logprobs.refusal ??= [];\n            choice.logprobs.refusal.push(...refusal);\n          }\n        }\n      }\n\n      if (finish_reason) {\n        choice.finish_reason = finish_reason;\n\n        if (this.#params && hasAutoParseableInput(this.#params)) {\n          if (finish_reason === 'length') {\n            throw new LengthFinishReasonError();\n          }\n\n          if (finish_reason === 'content_filter') {\n            throw new ContentFilterFinishReasonError();\n          }\n        }\n      }\n\n      Object.assign(choice, other);\n\n      if (!delta) continue; // Shouldn't happen; just in case.\n\n      const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n      assertIsEmpty(rest);\n      Object.assign(choice.message, rest);\n\n      if (refusal) {\n        choice.message.refusal = (choice.message.refusal || '') + refusal;\n      }\n\n      if (role) choice.message.role = role;\n      if (function_call) {\n        if (!choice.message.function_call) {\n          choice.message.function_call = function_call;\n        } else {\n          if (function_call.name) choice.message.function_call.name = function_call.name;\n          if (function_call.arguments) {\n            choice.message.function_call.arguments ??= '';\n            choice.message.function_call.arguments += function_call.arguments;\n          }\n        }\n      }\n      if (content) {\n        choice.message.content = (choice.message.content || '') + content;\n\n        if (!choice.message.refusal && this.#getAutoParseableResponseFormat()) {\n          choice.message.parsed = partialParse(choice.message.content);\n        }\n      }\n\n      if (tool_calls) {\n        if (!choice.message.tool_calls) choice.message.tool_calls = [];\n\n        for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n          const tool_call = (choice.message.tool_calls[index] ??=\n            {} as ChatCompletionSnapshot.Choice.Message.ToolCall);\n          Object.assign(tool_call, rest);\n          if (id) tool_call.id = id;\n          if (type) tool_call.type = type;\n          if (fn) tool_call.function ??= { name: fn.name ?? '', arguments: '' };\n          if (fn?.name) tool_call.function!.name = fn.name;\n          if (fn?.arguments) {\n            tool_call.function!.arguments += fn.arguments;\n\n            if (shouldParseToolCall(this.#params, tool_call)) {\n              tool_call.function!.parsed_arguments = partialParse(tool_call.function!.arguments);\n            }\n          }\n        }\n      }\n    }\n    return snapshot;\n  }\n\n  [Symbol.asyncIterator](this: ChatCompletionStream<ParsedT>): AsyncIterator<ChatCompletionChunk> {\n    const pushQueue: ChatCompletionChunk[] = [];\n    const readQueue: {\n      resolve: (chunk: ChatCompletionChunk | undefined) => void;\n      reject: (err: unknown) => void;\n    }[] = [];\n    let done = false;\n\n    this.on('chunk', (chunk) => {\n      const reader = readQueue.shift();\n      if (reader) {\n        reader.resolve(chunk);\n      } else {\n        pushQueue.push(chunk);\n      }\n    });\n\n    this.on('end', () => {\n      done = true;\n      for (const reader of readQueue) {\n        reader.resolve(undefined);\n      }\n      readQueue.length = 0;\n    });\n\n    this.on('abort', (err) => {\n      done = true;\n      for (const reader of readQueue) {\n        reader.reject(err);\n      }\n      readQueue.length = 0;\n    });\n\n    this.on('error', (err) => {\n      done = true;\n      for (const reader of readQueue) {\n        reader.reject(err);\n      }\n      readQueue.length = 0;\n    });\n\n    return {\n      next: async (): Promise<IteratorResult<ChatCompletionChunk>> => {\n        if (!pushQueue.length) {\n          if (done) {\n            return { value: undefined, done: true };\n          }\n          return new Promise<ChatCompletionChunk | undefined>((resolve, reject) =>\n            readQueue.push({ resolve, reject }),\n          ).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n        }\n        const chunk = pushQueue.shift()!;\n        return { value: chunk, done: false };\n      },\n      return: async () => {\n        this.abort();\n        return { value: undefined, done: true };\n      },\n    };\n  }\n\n  toReadableStream(): ReadableStream {\n    const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n    return stream.toReadableStream();\n  }\n}\n\nfunction finalizeChatCompletion<ParsedT>(\n  snapshot: ChatCompletionSnapshot,\n  params: ChatCompletionCreateParams | null,\n): ParsedChatCompletion<ParsedT> {\n  const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n  const completion: ChatCompletion = {\n    ...rest,\n    id,\n    choices: choices.map(\n      ({ message, finish_reason, index, logprobs, ...choiceRest }): ChatCompletion.Choice => {\n        if (!finish_reason) {\n          throw new OpenAIError(`missing finish_reason for choice ${index}`);\n        }\n\n        const { content = null, function_call, tool_calls, ...messageRest } = message;\n        const role = message.role as 'assistant'; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n        if (!role) {\n          throw new OpenAIError(`missing role for choice ${index}`);\n        }\n\n        if (function_call) {\n          const { arguments: args, name } = function_call;\n          if (args == null) {\n            throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n          }\n\n          if (!name) {\n            throw new OpenAIError(`missing function_call.name for choice ${index}`);\n          }\n\n          return {\n            ...choiceRest,\n            message: {\n              content,\n              function_call: { arguments: args, name },\n              role,\n              refusal: message.refusal ?? null,\n            },\n            finish_reason,\n            index,\n            logprobs,\n          };\n        }\n\n        if (tool_calls) {\n          return {\n            ...choiceRest,\n            index,\n            finish_reason,\n            logprobs,\n            message: {\n              ...messageRest,\n              role,\n              content,\n              refusal: message.refusal ?? null,\n              tool_calls: tool_calls.map((tool_call, i) => {\n                const { function: fn, type, id, ...toolRest } = tool_call;\n                const { arguments: args, name, ...fnRest } = fn || {};\n                if (id == null) {\n                  throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n                }\n                if (type == null) {\n                  throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n                }\n                if (name == null) {\n                  throw new OpenAIError(\n                    `missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`,\n                  );\n                }\n                if (args == null) {\n                  throw new OpenAIError(\n                    `missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`,\n                  );\n                }\n\n                return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n              }),\n            },\n          };\n        }\n        return {\n          ...choiceRest,\n          message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n          finish_reason,\n          index,\n          logprobs,\n        };\n      },\n    ),\n    created,\n    model,\n    object: 'chat.completion',\n    ...(system_fingerprint ? { system_fingerprint } : {}),\n  };\n\n  return maybeParseChatCompletion(completion, params);\n}\n\nfunction str(x: unknown) {\n  return JSON.stringify(x);\n}\n\n/**\n * Represents a streamed chunk of a chat completion response returned by model,\n * based on the provided input.\n */\nexport interface ChatCompletionSnapshot {\n  /**\n   * A unique identifier for the chat completion.\n   */\n  id: string;\n\n  /**\n   * A list of chat completion choices. Can be more than one if `n` is greater\n   * than 1.\n   */\n  choices: Array<ChatCompletionSnapshot.Choice>;\n\n  /**\n   * The Unix timestamp (in seconds) of when the chat completion was created.\n   */\n  created: number;\n\n  /**\n   * The model to generate the completion.\n   */\n  model: string;\n\n  // Note we do not include an \"object\" type on the snapshot,\n  // because the object is not a valid \"chat.completion\" until finalized.\n  // object: 'chat.completion';\n\n  /**\n   * This fingerprint represents the backend configuration that the model runs with.\n   *\n   * Can be used in conjunction with the `seed` request parameter to understand when\n   * backend changes have been made that might impact determinism.\n   */\n  system_fingerprint?: string;\n}\n\nexport namespace ChatCompletionSnapshot {\n  export interface Choice {\n    /**\n     * A chat completion delta generated by streamed model responses.\n     */\n    message: Choice.Message;\n\n    /**\n     * The reason the model stopped generating tokens. This will be `stop` if the model\n     * hit a natural stop point or a provided stop sequence, `length` if the maximum\n     * number of tokens specified in the request was reached, `content_filter` if\n     * content was omitted due to a flag from our content filters, or `function_call`\n     * if the model called a function.\n     */\n    finish_reason: ChatCompletion.Choice['finish_reason'] | null;\n\n    /**\n     * Log probability information for the choice.\n     */\n    logprobs: ChatCompletion.Choice.Logprobs | null;\n\n    /**\n     * The index of the choice in the list of choices.\n     */\n    index: number;\n  }\n\n  export namespace Choice {\n    /**\n     * A chat completion delta generated by streamed model responses.\n     */\n    export interface Message {\n      /**\n       * The contents of the chunk message.\n       */\n      content?: string | null;\n\n      refusal?: string | null;\n\n      parsed?: unknown | null;\n\n      /**\n       * The name and arguments of a function that should be called, as generated by the\n       * model.\n       */\n      function_call?: Message.FunctionCall;\n\n      tool_calls?: Array<Message.ToolCall>;\n\n      /**\n       * The role of the author of this message.\n       */\n      role?: ChatCompletionRole;\n    }\n\n    export namespace Message {\n      export interface ToolCall {\n        /**\n         * The ID of the tool call.\n         */\n        id: string;\n\n        function: ToolCall.Function;\n\n        /**\n         * The type of the tool.\n         */\n        type: 'function';\n      }\n\n      export namespace ToolCall {\n        export interface Function {\n          /**\n           * The arguments to call the function with, as generated by the model in JSON\n           * format. Note that the model does not always generate valid JSON, and may\n           * hallucinate parameters not defined by your function schema. Validate the\n           * arguments in your code before calling your function.\n           */\n          arguments: string;\n\n          parsed_arguments?: unknown;\n\n          /**\n           * The name of the function to call.\n           */\n          name: string;\n        }\n      }\n\n      /**\n       * The name and arguments of a function that should be called, as generated by the\n       * model.\n       */\n      export interface FunctionCall {\n        /**\n         * The arguments to call the function with, as generated by the model in JSON\n         * format. Note that the model does not always generate valid JSON, and may\n         * hallucinate parameters not defined by your function schema. Validate the\n         * arguments in your code before calling your function.\n         */\n        arguments?: string;\n\n        /**\n         * The name of the function to call.\n         */\n        name?: string;\n      }\n    }\n  }\n}\n\ntype AssertIsEmpty<T extends {}> = keyof T extends never ? T : never;\n\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty<T extends {}>(obj: AssertIsEmpty<T>): asserts obj is AssertIsEmpty<T> {\n  return;\n}\n\nfunction assertNever(_x: never) {}\n", "import {\n  type ChatCompletionChunk,\n  type ChatCompletionCreateParamsStreaming,\n} from '../resources/chat/completions';\nimport { RunnerOptions, type AbstractChatCompletionRunnerEvents } from './AbstractChatCompletionRunner';\nimport { type ReadableStream } from '../internal/shim-types';\nimport { RunnableTools, type BaseFunctionsArgs } from './RunnableFunction';\nimport { ChatCompletionSnapshot, ChatCompletionStream } from './ChatCompletionStream';\nimport OpenAI from '../index';\nimport { AutoParseableTool } from '../lib/parser';\n\nexport interface ChatCompletionStreamEvents extends AbstractChatCompletionRunnerEvents {\n  content: (contentDelta: string, contentSnapshot: string) => void;\n  chunk: (chunk: ChatCompletionChunk, snapshot: ChatCompletionSnapshot) => void;\n}\n\nexport type ChatCompletionStreamingToolRunnerParams<FunctionsArgs extends BaseFunctionsArgs> = Omit<\n  ChatCompletionCreateParamsStreaming,\n  'tools'\n> & {\n  tools: RunnableTools<FunctionsArgs> | AutoParseableTool<any, true>[];\n};\n\nexport class ChatCompletionStreamingRunner<ParsedT = null>\n  extends ChatCompletionStream<ParsedT>\n  implements AsyncIterable<ChatCompletionChunk>\n{\n  static override fromReadableStream(stream: ReadableStream): ChatCompletionStreamingRunner<null> {\n    const runner = new ChatCompletionStreamingRunner(null);\n    runner._run(() => runner._fromReadableStream(stream));\n    return runner;\n  }\n\n  static runTools<T extends (string | object)[], ParsedT = null>(\n    client: OpenAI,\n    params: ChatCompletionStreamingToolRunnerParams<T>,\n    options?: RunnerOptions,\n  ): ChatCompletionStreamingRunner<ParsedT> {\n    const runner = new ChatCompletionStreamingRunner<ParsedT>(\n      // @ts-expect-error TODO these types are incompatible\n      params,\n    );\n    const opts = {\n      ...options,\n      headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n    };\n    runner._run(() => runner._runTools(client, params, opts));\n    return runner;\n  }\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as ChatCompletionsAPI from './completions';\nimport * as CompletionsAPI from '../../completions';\nimport * as Shared from '../../shared';\nimport * as MessagesAPI from './messages';\nimport { MessageListParams, Messages } from './messages';\nimport { APIPromise } from '../../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pagination';\nimport { Stream } from '../../../core/streaming';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\nimport { ChatCompletionRunner } from '../../../lib/ChatCompletionRunner';\nimport { ChatCompletionStreamingRunner } from '../../../lib/ChatCompletionStreamingRunner';\nimport { RunnerOptions } from '../../../lib/AbstractChatCompletionRunner';\nimport { ChatCompletionToolRunnerParams } from '../../../lib/ChatCompletionRunner';\nimport { ChatCompletionStreamingToolRunnerParams } from '../../../lib/ChatCompletionStreamingRunner';\nimport { ChatCompletionStream, type ChatCompletionStreamParams } from '../../../lib/ChatCompletionStream';\nimport { ExtractParsedContentFromParams, parseChatCompletion, validateInputTools } from '../../../lib/parser';\n\n/**\n * Given a list of messages comprising a conversation, the model will return a response.\n */\nexport class Completions extends APIResource {\n  messages: MessagesAPI.Messages = new MessagesAPI.Messages(this._client);\n\n  /**\n   * **Starting a new project?** We recommend trying\n   * [Responses](https://platform.openai.com/docs/api-reference/responses) to take\n   * advantage of the latest OpenAI platform features. Compare\n   * [Chat Completions with Responses](https://platform.openai.com/docs/guides/responses-vs-chat-completions?api-mode=responses).\n   *\n   * ---\n   *\n   * Creates a model response for the given chat conversation. Learn more in the\n   * [text generation](https://platform.openai.com/docs/guides/text-generation),\n   * [vision](https://platform.openai.com/docs/guides/vision), and\n   * [audio](https://platform.openai.com/docs/guides/audio) guides.\n   *\n   * Parameter support can differ depending on the model used to generate the\n   * response, particularly for newer reasoning models. Parameters that are only\n   * supported for reasoning models are noted below. For the current state of\n   * unsupported parameters in reasoning models,\n   * [refer to the reasoning guide](https://platform.openai.com/docs/guides/reasoning).\n   *\n   * Returns a chat completion object, or a streamed sequence of chat completion\n   * chunk objects if the request is streamed.\n   *\n   * @example\n   * ```ts\n   * const chatCompletion = await client.chat.completions.create(\n   *   {\n   *     messages: [{ content: 'string', role: 'developer' }],\n   *     model: 'gpt-5.4',\n   *   },\n   * );\n   * ```\n   */\n  create(body: ChatCompletionCreateParamsNonStreaming, options?: RequestOptions): APIPromise<ChatCompletion>;\n  create(\n    body: ChatCompletionCreateParamsStreaming,\n    options?: RequestOptions,\n  ): APIPromise<Stream<ChatCompletionChunk>>;\n  create(\n    body: ChatCompletionCreateParamsBase,\n    options?: RequestOptions,\n  ): APIPromise<Stream<ChatCompletionChunk> | ChatCompletion>;\n  create(\n    body: ChatCompletionCreateParams,\n    options?: RequestOptions,\n  ): APIPromise<ChatCompletion> | APIPromise<Stream<ChatCompletionChunk>> {\n    return this._client.post('/chat/completions', {\n      body,\n      ...options,\n      stream: body.stream ?? false,\n      __security: { bearerAuth: true },\n    }) as APIPromise<ChatCompletion> | APIPromise<Stream<ChatCompletionChunk>>;\n  }\n\n  /**\n   * Get a stored chat completion. Only Chat Completions that have been created with\n   * the `store` parameter set to `true` will be returned.\n   *\n   * @example\n   * ```ts\n   * const chatCompletion =\n   *   await client.chat.completions.retrieve('completion_id');\n   * ```\n   */\n  retrieve(completionID: string, options?: RequestOptions): APIPromise<ChatCompletion> {\n    return this._client.get(path`/chat/completions/${completionID}`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Modify a stored chat completion. Only Chat Completions that have been created\n   * with the `store` parameter set to `true` can be modified. Currently, the only\n   * supported modification is to update the `metadata` field.\n   *\n   * @example\n   * ```ts\n   * const chatCompletion = await client.chat.completions.update(\n   *   'completion_id',\n   *   { metadata: { foo: 'string' } },\n   * );\n   * ```\n   */\n  update(\n    completionID: string,\n    body: ChatCompletionUpdateParams,\n    options?: RequestOptions,\n  ): APIPromise<ChatCompletion> {\n    return this._client.post(path`/chat/completions/${completionID}`, {\n      body,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * List stored Chat Completions. Only Chat Completions that have been stored with\n   * the `store` parameter set to `true` will be returned.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const chatCompletion of client.chat.completions.list()) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    query: ChatCompletionListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<ChatCompletionsPage, ChatCompletion> {\n    return this._client.getAPIList('/chat/completions', CursorPage<ChatCompletion>, {\n      query,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Delete a stored chat completion. Only Chat Completions that have been created\n   * with the `store` parameter set to `true` can be deleted.\n   *\n   * @example\n   * ```ts\n   * const chatCompletionDeleted =\n   *   await client.chat.completions.delete('completion_id');\n   * ```\n   */\n  delete(completionID: string, options?: RequestOptions): APIPromise<ChatCompletionDeleted> {\n    return this._client.delete(path`/chat/completions/${completionID}`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  parse<Params extends ChatCompletionParseParams, ParsedT = ExtractParsedContentFromParams<Params>>(\n    body: Params,\n    options?: RequestOptions,\n  ): APIPromise<ParsedChatCompletion<ParsedT>> {\n    validateInputTools(body.tools);\n\n    return this._client.chat.completions\n      .create(body, {\n        ...options,\n        headers: {\n          ...options?.headers,\n          'X-Stainless-Helper-Method': 'chat.completions.parse',\n        },\n      })\n      ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n  }\n\n  /**\n   * A convenience helper for using tool calls with the /chat/completions endpoint\n   * which automatically calls the JavaScript functions you provide and sends their\n   * results back to the /chat/completions endpoint, looping as long as the model\n   * requests function calls.\n   *\n   * For more details and examples, see\n   * [the docs](https://github.com/openai/openai-node#automated-function-calls)\n   */\n  runTools<\n    Params extends ChatCompletionToolRunnerParams<any>,\n    ParsedT = ExtractParsedContentFromParams<Params>,\n  >(body: Params, options?: RunnerOptions): ChatCompletionRunner<ParsedT>;\n\n  runTools<\n    Params extends ChatCompletionStreamingToolRunnerParams<any>,\n    ParsedT = ExtractParsedContentFromParams<Params>,\n  >(body: Params, options?: RunnerOptions): ChatCompletionStreamingRunner<ParsedT>;\n\n  runTools<\n    Params extends ChatCompletionToolRunnerParams<any> | ChatCompletionStreamingToolRunnerParams<any>,\n    ParsedT = ExtractParsedContentFromParams<Params>,\n  >(\n    body: Params,\n    options?: RunnerOptions,\n  ): ChatCompletionRunner<ParsedT> | ChatCompletionStreamingRunner<ParsedT> {\n    if (body.stream) {\n      return ChatCompletionStreamingRunner.runTools(\n        this._client,\n        body as ChatCompletionStreamingToolRunnerParams<any>,\n        options,\n      );\n    }\n\n    return ChatCompletionRunner.runTools(this._client, body as ChatCompletionToolRunnerParams<any>, options);\n  }\n\n  /**\n   * Creates a chat completion stream\n   */\n  stream<Params extends ChatCompletionStreamParams, ParsedT = ExtractParsedContentFromParams<Params>>(\n    body: Params,\n    options?: RequestOptions,\n  ): ChatCompletionStream<ParsedT> {\n    return ChatCompletionStream.createChatCompletion(this._client, body, options);\n  }\n}\n\nexport interface ParsedFunction extends ChatCompletionMessageFunctionToolCall.Function {\n  parsed_arguments?: unknown;\n}\n\nexport interface ParsedFunctionToolCall extends ChatCompletionMessageFunctionToolCall {\n  function: ParsedFunction;\n}\n\nexport interface ParsedChatCompletionMessage<ParsedT> extends ChatCompletionMessage {\n  parsed: ParsedT | null;\n  tool_calls?: Array<ParsedFunctionToolCall>;\n}\n\nexport interface ParsedChoice<ParsedT> extends ChatCompletion.Choice {\n  message: ParsedChatCompletionMessage<ParsedT>;\n}\n\nexport interface ParsedChatCompletion<ParsedT> extends ChatCompletion {\n  choices: Array<ParsedChoice<ParsedT>>;\n}\n\nexport type ChatCompletionParseParams = ChatCompletionCreateParamsNonStreaming;\n\nexport { ChatCompletionStreamingRunner } from '../../../lib/ChatCompletionStreamingRunner';\nexport {\n  type RunnableFunctionWithParse,\n  type RunnableFunctionWithoutParse,\n  ParsingToolFunction,\n} from '../../../lib/RunnableFunction';\nexport { type ChatCompletionToolRunnerParams } from '../../../lib/ChatCompletionRunner';\nexport { type ChatCompletionStreamingToolRunnerParams } from '../../../lib/ChatCompletionStreamingRunner';\nexport { ChatCompletionStream, type ChatCompletionStreamParams } from '../../../lib/ChatCompletionStream';\nexport { ChatCompletionRunner } from '../../../lib/ChatCompletionRunner';\n\nexport type ChatCompletionsPage = CursorPage<ChatCompletion>;\n\nexport type ChatCompletionStoreMessagesPage = CursorPage<ChatCompletionStoreMessage>;\n\n/**\n * Represents a chat completion response returned by model, based on the provided\n * input.\n */\nexport interface ChatCompletion {\n  /**\n   * A unique identifier for the chat completion.\n   */\n  id: string;\n\n  /**\n   * A list of chat completion choices. Can be more than one if `n` is greater\n   * than 1.\n   */\n  choices: Array<ChatCompletion.Choice>;\n\n  /**\n   * The Unix timestamp (in seconds) of when the chat completion was created.\n   */\n  created: number;\n\n  /**\n   * The model used for the chat completion.\n   */\n  model: string;\n\n  /**\n   * The object type, which is always `chat.completion`.\n   */\n  object: 'chat.completion';\n\n  /**\n   * Specifies the processing type used for serving the request.\n   *\n   * - If set to 'auto', then the request will be processed with the service tier\n   *   configured in the Project settings. Unless otherwise configured, the Project\n   *   will use 'default'.\n   * - If set to 'default', then the request will be processed with the standard\n   *   pricing and performance for the selected model.\n   * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or\n   *   '[priority](https://openai.com/api-priority-processing/)', then the request\n   *   will be processed with the corresponding service tier.\n   * - When not set, the default behavior is 'auto'.\n   *\n   * When the `service_tier` parameter is set, the response body will include the\n   * `service_tier` value based on the processing mode actually used to serve the\n   * request. This response value may be different from the value set in the\n   * parameter.\n   */\n  service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | null;\n\n  /**\n   * @deprecated This fingerprint represents the backend configuration that the model\n   * runs with.\n   *\n   * Can be used in conjunction with the `seed` request parameter to understand when\n   * backend changes have been made that might impact determinism.\n   */\n  system_fingerprint?: string;\n\n  /**\n   * Usage statistics for the completion request.\n   */\n  usage?: CompletionsAPI.CompletionUsage;\n}\n\nexport namespace ChatCompletion {\n  export interface Choice {\n    /**\n     * The reason the model stopped generating tokens. This will be `stop` if the model\n     * hit a natural stop point or a provided stop sequence, `length` if the maximum\n     * number of tokens specified in the request was reached, `content_filter` if\n     * content was omitted due to a flag from our content filters, `tool_calls` if the\n     * model called a tool, or `function_call` (deprecated) if the model called a\n     * function.\n     */\n    finish_reason: 'stop' | 'length' | 'tool_calls' | 'content_filter' | 'function_call';\n\n    /**\n     * The index of the choice in the list of choices.\n     */\n    index: number;\n\n    /**\n     * Log probability information for the choice.\n     */\n    logprobs: Choice.Logprobs | null;\n\n    /**\n     * A chat completion message generated by the model.\n     */\n    message: ChatCompletionsAPI.ChatCompletionMessage;\n  }\n\n  export namespace Choice {\n    /**\n     * Log probability information for the choice.\n     */\n    export interface Logprobs {\n      /**\n       * A list of message content tokens with log probability information.\n       */\n      content: Array<ChatCompletionsAPI.ChatCompletionTokenLogprob> | null;\n\n      /**\n       * A list of message refusal tokens with log probability information.\n       */\n      refusal: Array<ChatCompletionsAPI.ChatCompletionTokenLogprob> | null;\n    }\n  }\n}\n\n/**\n * Constrains the tools available to the model to a pre-defined set.\n */\nexport interface ChatCompletionAllowedToolChoice {\n  /**\n   * Constrains the tools available to the model to a pre-defined set.\n   */\n  allowed_tools: ChatCompletionAllowedTools;\n\n  /**\n   * Allowed tool configuration type. Always `allowed_tools`.\n   */\n  type: 'allowed_tools';\n}\n\n/**\n * Messages sent by the model in response to user messages.\n */\nexport interface ChatCompletionAssistantMessageParam {\n  /**\n   * The role of the messages author, in this case `assistant`.\n   */\n  role: 'assistant';\n\n  /**\n   * Data about a previous audio response from the model.\n   * [Learn more](https://platform.openai.com/docs/guides/audio).\n   */\n  audio?: ChatCompletionAssistantMessageParam.Audio | null;\n\n  /**\n   * The contents of the assistant message. Required unless `tool_calls` or\n   * `function_call` is specified.\n   */\n  content?: string | Array<ChatCompletionContentPartText | ChatCompletionContentPartRefusal> | null;\n\n  /**\n   * @deprecated Deprecated and replaced by `tool_calls`. The name and arguments of a\n   * function that should be called, as generated by the model.\n   */\n  function_call?: ChatCompletionAssistantMessageParam.FunctionCall | null;\n\n  /**\n   * An optional name for the participant. Provides the model information to\n   * differentiate between participants of the same role.\n   */\n  name?: string;\n\n  /**\n   * The refusal message by the assistant.\n   */\n  refusal?: string | null;\n\n  /**\n   * The tool calls generated by the model, such as function calls.\n   */\n  tool_calls?: Array<ChatCompletionMessageToolCall>;\n}\n\nexport namespace ChatCompletionAssistantMessageParam {\n  /**\n   * Data about a previous audio response from the model.\n   * [Learn more](https://platform.openai.com/docs/guides/audio).\n   */\n  export interface Audio {\n    /**\n     * Unique identifier for a previous audio response from the model.\n     */\n    id: string;\n  }\n\n  /**\n   * @deprecated Deprecated and replaced by `tool_calls`. The name and arguments of a\n   * function that should be called, as generated by the model.\n   */\n  export interface FunctionCall {\n    /**\n     * The arguments to call the function with, as generated by the model in JSON\n     * format. Note that the model does not always generate valid JSON, and may\n     * hallucinate parameters not defined by your function schema. Validate the\n     * arguments in your code before calling your function.\n     */\n    arguments: string;\n\n    /**\n     * The name of the function to call.\n     */\n    name: string;\n  }\n}\n\n/**\n * If the audio output modality is requested, this object contains data about the\n * audio response from the model.\n * [Learn more](https://platform.openai.com/docs/guides/audio).\n */\nexport interface ChatCompletionAudio {\n  /**\n   * Unique identifier for this audio response.\n   */\n  id: string;\n\n  /**\n   * Base64 encoded audio bytes generated by the model, in the format specified in\n   * the request.\n   */\n  data: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when this audio response will no longer be\n   * accessible on the server for use in multi-turn conversations.\n   */\n  expires_at: number;\n\n  /**\n   * Transcript of the audio generated by the model.\n   */\n  transcript: string;\n}\n\n/**\n * Parameters for audio output. Required when audio output is requested with\n * `modalities: [\"audio\"]`.\n * [Learn more](https://platform.openai.com/docs/guides/audio).\n */\nexport interface ChatCompletionAudioParam {\n  /**\n   * Specifies the output audio format. Must be one of `wav`, `mp3`, `flac`, `opus`,\n   * or `pcm16`.\n   */\n  format: 'wav' | 'aac' | 'mp3' | 'flac' | 'opus' | 'pcm16';\n\n  /**\n   * The voice the model uses to respond. Supported built-in voices are `alloy`,\n   * `ash`, `ballad`, `coral`, `echo`, `fable`, `nova`, `onyx`, `sage`, `shimmer`,\n   * `marin`, and `cedar`. You may also provide a custom voice object with an `id`,\n   * for example `{ \"id\": \"voice_1234\" }`.\n   */\n  voice:\n    | string\n    | 'alloy'\n    | 'ash'\n    | 'ballad'\n    | 'coral'\n    | 'echo'\n    | 'sage'\n    | 'shimmer'\n    | 'verse'\n    | 'marin'\n    | 'cedar'\n    | ChatCompletionAudioParam.ID;\n}\n\nexport namespace ChatCompletionAudioParam {\n  /**\n   * Custom voice reference.\n   */\n  export interface ID {\n    /**\n     * The custom voice ID, e.g. `voice_1234`.\n     */\n    id: string;\n  }\n}\n\n/**\n * Represents a streamed chunk of a chat completion response returned by the model,\n * based on the provided input.\n * [Learn more](https://platform.openai.com/docs/guides/streaming-responses).\n */\nexport interface ChatCompletionChunk {\n  /**\n   * A unique identifier for the chat completion. Each chunk has the same ID.\n   */\n  id: string;\n\n  /**\n   * A list of chat completion choices. Can contain more than one elements if `n` is\n   * greater than 1. Can also be empty for the last chunk if you set\n   * `stream_options: {\"include_usage\": true}`.\n   */\n  choices: Array<ChatCompletionChunk.Choice>;\n\n  /**\n   * The Unix timestamp (in seconds) of when the chat completion was created. Each\n   * chunk has the same timestamp.\n   */\n  created: number;\n\n  /**\n   * The model to generate the completion.\n   */\n  model: string;\n\n  /**\n   * The object type, which is always `chat.completion.chunk`.\n   */\n  object: 'chat.completion.chunk';\n\n  /**\n   * Specifies the processing type used for serving the request.\n   *\n   * - If set to 'auto', then the request will be processed with the service tier\n   *   configured in the Project settings. Unless otherwise configured, the Project\n   *   will use 'default'.\n   * - If set to 'default', then the request will be processed with the standard\n   *   pricing and performance for the selected model.\n   * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or\n   *   '[priority](https://openai.com/api-priority-processing/)', then the request\n   *   will be processed with the corresponding service tier.\n   * - When not set, the default behavior is 'auto'.\n   *\n   * When the `service_tier` parameter is set, the response body will include the\n   * `service_tier` value based on the processing mode actually used to serve the\n   * request. This response value may be different from the value set in the\n   * parameter.\n   */\n  service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | null;\n\n  /**\n   * @deprecated This fingerprint represents the backend configuration that the model\n   * runs with. Can be used in conjunction with the `seed` request parameter to\n   * understand when backend changes have been made that might impact determinism.\n   */\n  system_fingerprint?: string;\n\n  /**\n   * An optional field that will only be present when you set\n   * `stream_options: {\"include_usage\": true}` in your request. When present, it\n   * contains a null value **except for the last chunk** which contains the token\n   * usage statistics for the entire request.\n   *\n   * **NOTE:** If the stream is interrupted or cancelled, you may not receive the\n   * final usage chunk which contains the total token usage for the request.\n   */\n  usage?: CompletionsAPI.CompletionUsage | null;\n}\n\nexport namespace ChatCompletionChunk {\n  export interface Choice {\n    /**\n     * A chat completion delta generated by streamed model responses.\n     */\n    delta: Choice.Delta;\n\n    /**\n     * The reason the model stopped generating tokens. This will be `stop` if the model\n     * hit a natural stop point or a provided stop sequence, `length` if the maximum\n     * number of tokens specified in the request was reached, `content_filter` if\n     * content was omitted due to a flag from our content filters, `tool_calls` if the\n     * model called a tool, or `function_call` (deprecated) if the model called a\n     * function.\n     */\n    finish_reason: 'stop' | 'length' | 'tool_calls' | 'content_filter' | 'function_call' | null;\n\n    /**\n     * The index of the choice in the list of choices.\n     */\n    index: number;\n\n    /**\n     * Log probability information for the choice.\n     */\n    logprobs?: Choice.Logprobs | null;\n  }\n\n  export namespace Choice {\n    /**\n     * A chat completion delta generated by streamed model responses.\n     */\n    export interface Delta {\n      /**\n       * The contents of the chunk message.\n       */\n      content?: string | null;\n\n      /**\n       * @deprecated Deprecated and replaced by `tool_calls`. The name and arguments of a\n       * function that should be called, as generated by the model.\n       */\n      function_call?: Delta.FunctionCall;\n\n      /**\n       * The refusal message generated by the model.\n       */\n      refusal?: string | null;\n\n      /**\n       * The role of the author of this message.\n       */\n      role?: 'developer' | 'system' | 'user' | 'assistant' | 'tool';\n\n      tool_calls?: Array<Delta.ToolCall>;\n    }\n\n    export namespace Delta {\n      /**\n       * @deprecated Deprecated and replaced by `tool_calls`. The name and arguments of a\n       * function that should be called, as generated by the model.\n       */\n      export interface FunctionCall {\n        /**\n         * The arguments to call the function with, as generated by the model in JSON\n         * format. Note that the model does not always generate valid JSON, and may\n         * hallucinate parameters not defined by your function schema. Validate the\n         * arguments in your code before calling your function.\n         */\n        arguments?: string;\n\n        /**\n         * The name of the function to call.\n         */\n        name?: string;\n      }\n\n      export interface ToolCall {\n        index: number;\n\n        /**\n         * The ID of the tool call.\n         */\n        id?: string;\n\n        function?: ToolCall.Function;\n\n        /**\n         * The type of the tool. Currently, only `function` is supported.\n         */\n        type?: 'function';\n      }\n\n      export namespace ToolCall {\n        export interface Function {\n          /**\n           * The arguments to call the function with, as generated by the model in JSON\n           * format. Note that the model does not always generate valid JSON, and may\n           * hallucinate parameters not defined by your function schema. Validate the\n           * arguments in your code before calling your function.\n           */\n          arguments?: string;\n\n          /**\n           * The name of the function to call.\n           */\n          name?: string;\n        }\n      }\n    }\n\n    /**\n     * Log probability information for the choice.\n     */\n    export interface Logprobs {\n      /**\n       * A list of message content tokens with log probability information.\n       */\n      content: Array<ChatCompletionsAPI.ChatCompletionTokenLogprob> | null;\n\n      /**\n       * A list of message refusal tokens with log probability information.\n       */\n      refusal: Array<ChatCompletionsAPI.ChatCompletionTokenLogprob> | null;\n    }\n  }\n}\n\n/**\n * Learn about\n * [text inputs](https://platform.openai.com/docs/guides/text-generation).\n */\nexport type ChatCompletionContentPart =\n  | ChatCompletionContentPartText\n  | ChatCompletionContentPartImage\n  | ChatCompletionContentPartInputAudio\n  | ChatCompletionContentPart.File;\n\nexport namespace ChatCompletionContentPart {\n  /**\n   * Learn about [file inputs](https://platform.openai.com/docs/guides/text) for text\n   * generation.\n   */\n  export interface File {\n    file: File.File;\n\n    /**\n     * The type of the content part. Always `file`.\n     */\n    type: 'file';\n  }\n\n  export namespace File {\n    export interface File {\n      /**\n       * The base64 encoded file data, used when passing the file to the model as a\n       * string.\n       */\n      file_data?: string;\n\n      /**\n       * The ID of an uploaded file to use as input.\n       */\n      file_id?: string;\n\n      /**\n       * The name of the file, used when passing the file to the model as a string.\n       */\n      filename?: string;\n    }\n  }\n}\n\n/**\n * Learn about [image inputs](https://platform.openai.com/docs/guides/vision).\n */\nexport interface ChatCompletionContentPartImage {\n  image_url: ChatCompletionContentPartImage.ImageURL;\n\n  /**\n   * The type of the content part.\n   */\n  type: 'image_url';\n}\n\nexport namespace ChatCompletionContentPartImage {\n  export interface ImageURL {\n    /**\n     * Either a URL of the image or the base64 encoded image data.\n     */\n    url: string;\n\n    /**\n     * Specifies the detail level of the image. Learn more in the\n     * [Vision guide](https://platform.openai.com/docs/guides/vision#low-or-high-fidelity-image-understanding).\n     */\n    detail?: 'auto' | 'low' | 'high';\n  }\n}\n\n/**\n * Learn about [audio inputs](https://platform.openai.com/docs/guides/audio).\n */\nexport interface ChatCompletionContentPartInputAudio {\n  input_audio: ChatCompletionContentPartInputAudio.InputAudio;\n\n  /**\n   * The type of the content part. Always `input_audio`.\n   */\n  type: 'input_audio';\n}\n\nexport namespace ChatCompletionContentPartInputAudio {\n  export interface InputAudio {\n    /**\n     * Base64 encoded audio data.\n     */\n    data: string;\n\n    /**\n     * The format of the encoded audio data. Currently supports \"wav\" and \"mp3\".\n     */\n    format: 'wav' | 'mp3';\n  }\n}\n\nexport interface ChatCompletionContentPartRefusal {\n  /**\n   * The refusal message generated by the model.\n   */\n  refusal: string;\n\n  /**\n   * The type of the content part.\n   */\n  type: 'refusal';\n}\n\n/**\n * Learn about\n * [text inputs](https://platform.openai.com/docs/guides/text-generation).\n */\nexport interface ChatCompletionContentPartText {\n  /**\n   * The text content.\n   */\n  text: string;\n\n  /**\n   * The type of the content part.\n   */\n  type: 'text';\n}\n\n/**\n * A custom tool that processes input using a specified format.\n */\nexport interface ChatCompletionCustomTool {\n  /**\n   * Properties of the custom tool.\n   */\n  custom: ChatCompletionCustomTool.Custom;\n\n  /**\n   * The type of the custom tool. Always `custom`.\n   */\n  type: 'custom';\n}\n\nexport namespace ChatCompletionCustomTool {\n  /**\n   * Properties of the custom tool.\n   */\n  export interface Custom {\n    /**\n     * The name of the custom tool, used to identify it in tool calls.\n     */\n    name: string;\n\n    /**\n     * Optional description of the custom tool, used to provide more context.\n     */\n    description?: string;\n\n    /**\n     * The input format for the custom tool. Default is unconstrained text.\n     */\n    format?: Custom.Text | Custom.Grammar;\n  }\n\n  export namespace Custom {\n    /**\n     * Unconstrained free-form text.\n     */\n    export interface Text {\n      /**\n       * Unconstrained text format. Always `text`.\n       */\n      type: 'text';\n    }\n\n    /**\n     * A grammar defined by the user.\n     */\n    export interface Grammar {\n      /**\n       * Your chosen grammar.\n       */\n      grammar: Grammar.Grammar;\n\n      /**\n       * Grammar format. Always `grammar`.\n       */\n      type: 'grammar';\n    }\n\n    export namespace Grammar {\n      /**\n       * Your chosen grammar.\n       */\n      export interface Grammar {\n        /**\n         * The grammar definition.\n         */\n        definition: string;\n\n        /**\n         * The syntax of the grammar definition. One of `lark` or `regex`.\n         */\n        syntax: 'lark' | 'regex';\n      }\n    }\n  }\n}\n\nexport interface ChatCompletionDeleted {\n  /**\n   * The ID of the chat completion that was deleted.\n   */\n  id: string;\n\n  /**\n   * Whether the chat completion was deleted.\n   */\n  deleted: boolean;\n\n  /**\n   * The type of object being deleted.\n   */\n  object: 'chat.completion.deleted';\n}\n\n/**\n * Developer-provided instructions that the model should follow, regardless of\n * messages sent by the user. With o1 models and newer, `developer` messages\n * replace the previous `system` messages.\n */\nexport interface ChatCompletionDeveloperMessageParam {\n  /**\n   * The contents of the developer message.\n   */\n  content: string | Array<ChatCompletionContentPartText>;\n\n  /**\n   * The role of the messages author, in this case `developer`.\n   */\n  role: 'developer';\n\n  /**\n   * An optional name for the participant. Provides the model information to\n   * differentiate between participants of the same role.\n   */\n  name?: string;\n}\n\n/**\n * Specifying a particular function via `{\"name\": \"my_function\"}` forces the model\n * to call that function.\n */\nexport interface ChatCompletionFunctionCallOption {\n  /**\n   * The name of the function to call.\n   */\n  name: string;\n}\n\n/**\n * @deprecated\n */\nexport interface ChatCompletionFunctionMessageParam {\n  /**\n   * The contents of the function message.\n   */\n  content: string | null;\n\n  /**\n   * The name of the function to call.\n   */\n  name: string;\n\n  /**\n   * The role of the messages author, in this case `function`.\n   */\n  role: 'function';\n}\n\n/**\n * A function tool that can be used to generate a response.\n */\nexport interface ChatCompletionFunctionTool {\n  function: Shared.FunctionDefinition;\n\n  /**\n   * The type of the tool. Currently, only `function` is supported.\n   */\n  type: 'function';\n}\n\n/**\n * A chat completion message generated by the model.\n */\nexport interface ChatCompletionMessage {\n  /**\n   * The contents of the message.\n   */\n  content: string | null;\n\n  /**\n   * The refusal message generated by the model.\n   */\n  refusal: string | null;\n\n  /**\n   * The role of the author of this message.\n   */\n  role: 'assistant';\n\n  /**\n   * Annotations for the message, when applicable, as when using the\n   * [web search tool](https://platform.openai.com/docs/guides/tools-web-search?api-mode=chat).\n   */\n  annotations?: Array<ChatCompletionMessage.Annotation>;\n\n  /**\n   * If the audio output modality is requested, this object contains data about the\n   * audio response from the model.\n   * [Learn more](https://platform.openai.com/docs/guides/audio).\n   */\n  audio?: ChatCompletionAudio | null;\n\n  /**\n   * @deprecated Deprecated and replaced by `tool_calls`. The name and arguments of a\n   * function that should be called, as generated by the model.\n   */\n  function_call?: ChatCompletionMessage.FunctionCall | null;\n\n  /**\n   * The tool calls generated by the model, such as function calls.\n   */\n  tool_calls?: Array<ChatCompletionMessageToolCall>;\n}\n\nexport namespace ChatCompletionMessage {\n  /**\n   * A URL citation when using web search.\n   */\n  export interface Annotation {\n    /**\n     * The type of the URL citation. Always `url_citation`.\n     */\n    type: 'url_citation';\n\n    /**\n     * A URL citation when using web search.\n     */\n    url_citation: Annotation.URLCitation;\n  }\n\n  export namespace Annotation {\n    /**\n     * A URL citation when using web search.\n     */\n    export interface URLCitation {\n      /**\n       * The index of the last character of the URL citation in the message.\n       */\n      end_index: number;\n\n      /**\n       * The index of the first character of the URL citation in the message.\n       */\n      start_index: number;\n\n      /**\n       * The title of the web resource.\n       */\n      title: string;\n\n      /**\n       * The URL of the web resource.\n       */\n      url: string;\n    }\n  }\n\n  /**\n   * @deprecated Deprecated and replaced by `tool_calls`. The name and arguments of a\n   * function that should be called, as generated by the model.\n   */\n  export interface FunctionCall {\n    /**\n     * The arguments to call the function with, as generated by the model in JSON\n     * format. Note that the model does not always generate valid JSON, and may\n     * hallucinate parameters not defined by your function schema. Validate the\n     * arguments in your code before calling your function.\n     */\n    arguments: string;\n\n    /**\n     * The name of the function to call.\n     */\n    name: string;\n  }\n}\n\n/**\n * A call to a custom tool created by the model.\n */\nexport interface ChatCompletionMessageCustomToolCall {\n  /**\n   * The ID of the tool call.\n   */\n  id: string;\n\n  /**\n   * The custom tool that the model called.\n   */\n  custom: ChatCompletionMessageCustomToolCall.Custom;\n\n  /**\n   * The type of the tool. Always `custom`.\n   */\n  type: 'custom';\n}\n\nexport namespace ChatCompletionMessageCustomToolCall {\n  /**\n   * The custom tool that the model called.\n   */\n  export interface Custom {\n    /**\n     * The input for the custom tool call generated by the model.\n     */\n    input: string;\n\n    /**\n     * The name of the custom tool to call.\n     */\n    name: string;\n  }\n}\n\n/**\n * A call to a function tool created by the model.\n */\nexport interface ChatCompletionMessageFunctionToolCall {\n  /**\n   * The ID of the tool call.\n   */\n  id: string;\n\n  /**\n   * The function that the model called.\n   */\n  function: ChatCompletionMessageFunctionToolCall.Function;\n\n  /**\n   * The type of the tool. Currently, only `function` is supported.\n   */\n  type: 'function';\n}\n\nexport namespace ChatCompletionMessageFunctionToolCall {\n  /**\n   * The function that the model called.\n   */\n  export interface Function {\n    /**\n     * The arguments to call the function with, as generated by the model in JSON\n     * format. Note that the model does not always generate valid JSON, and may\n     * hallucinate parameters not defined by your function schema. Validate the\n     * arguments in your code before calling your function.\n     */\n    arguments: string;\n\n    /**\n     * The name of the function to call.\n     */\n    name: string;\n  }\n}\n\n/**\n * Developer-provided instructions that the model should follow, regardless of\n * messages sent by the user. With o1 models and newer, `developer` messages\n * replace the previous `system` messages.\n */\nexport type ChatCompletionMessageParam =\n  | ChatCompletionDeveloperMessageParam\n  | ChatCompletionSystemMessageParam\n  | ChatCompletionUserMessageParam\n  | ChatCompletionAssistantMessageParam\n  | ChatCompletionToolMessageParam\n  | ChatCompletionFunctionMessageParam;\n\n/**\n * A call to a function tool created by the model.\n */\nexport type ChatCompletionMessageToolCall =\n  | ChatCompletionMessageFunctionToolCall\n  | ChatCompletionMessageCustomToolCall;\n\nexport type ChatCompletionModality = 'text' | 'audio';\n\n/**\n * Specifies a tool the model should use. Use to force the model to call a specific\n * function.\n */\nexport interface ChatCompletionNamedToolChoice {\n  function: ChatCompletionNamedToolChoice.Function;\n\n  /**\n   * For function calling, the type is always `function`.\n   */\n  type: 'function';\n}\n\nexport namespace ChatCompletionNamedToolChoice {\n  export interface Function {\n    /**\n     * The name of the function to call.\n     */\n    name: string;\n  }\n}\n\n/**\n * Specifies a tool the model should use. Use to force the model to call a specific\n * custom tool.\n */\nexport interface ChatCompletionNamedToolChoiceCustom {\n  custom: ChatCompletionNamedToolChoiceCustom.Custom;\n\n  /**\n   * For custom tool calling, the type is always `custom`.\n   */\n  type: 'custom';\n}\n\nexport namespace ChatCompletionNamedToolChoiceCustom {\n  export interface Custom {\n    /**\n     * The name of the custom tool to call.\n     */\n    name: string;\n  }\n}\n\n/**\n * Static predicted output content, such as the content of a text file that is\n * being regenerated.\n */\nexport interface ChatCompletionPredictionContent {\n  /**\n   * The content that should be matched when generating a model response. If\n   * generated tokens would match this content, the entire model response can be\n   * returned much more quickly.\n   */\n  content: string | Array<ChatCompletionContentPartText>;\n\n  /**\n   * The type of the predicted content you want to provide. This type is currently\n   * always `content`.\n   */\n  type: 'content';\n}\n\n/**\n * The role of the author of a message\n */\nexport type ChatCompletionRole = 'developer' | 'system' | 'user' | 'assistant' | 'tool' | 'function';\n\n/**\n * A chat completion message generated by the model.\n */\nexport interface ChatCompletionStoreMessage extends ChatCompletionMessage {\n  /**\n   * The identifier of the chat message.\n   */\n  id: string;\n\n  /**\n   * If a content parts array was provided, this is an array of `text` and\n   * `image_url` parts. Otherwise, null.\n   */\n  content_parts?: Array<ChatCompletionContentPartText | ChatCompletionContentPartImage> | null;\n}\n\n/**\n * Options for streaming response. Only set this when you set `stream: true`.\n */\nexport interface ChatCompletionStreamOptions {\n  /**\n   * When true, stream obfuscation will be enabled. Stream obfuscation adds random\n   * characters to an `obfuscation` field on streaming delta events to normalize\n   * payload sizes as a mitigation to certain side-channel attacks. These obfuscation\n   * fields are included by default, but add a small amount of overhead to the data\n   * stream. You can set `include_obfuscation` to false to optimize for bandwidth if\n   * you trust the network links between your application and the OpenAI API.\n   */\n  include_obfuscation?: boolean;\n\n  /**\n   * If set, an additional chunk will be streamed before the `data: [DONE]` message.\n   * The `usage` field on this chunk shows the token usage statistics for the entire\n   * request, and the `choices` field will always be an empty array.\n   *\n   * All other chunks will also include a `usage` field, but with a null value.\n   * **NOTE:** If the stream is interrupted, you may not receive the final usage\n   * chunk which contains the total token usage for the request.\n   */\n  include_usage?: boolean;\n}\n\n/**\n * Developer-provided instructions that the model should follow, regardless of\n * messages sent by the user. With o1 models and newer, use `developer` messages\n * for this purpose instead.\n */\nexport interface ChatCompletionSystemMessageParam {\n  /**\n   * The contents of the system message.\n   */\n  content: string | Array<ChatCompletionContentPartText>;\n\n  /**\n   * The role of the messages author, in this case `system`.\n   */\n  role: 'system';\n\n  /**\n   * An optional name for the participant. Provides the model information to\n   * differentiate between participants of the same role.\n   */\n  name?: string;\n}\n\nexport interface ChatCompletionTokenLogprob {\n  /**\n   * The token.\n   */\n  token: string;\n\n  /**\n   * A list of integers representing the UTF-8 bytes representation of the token.\n   * Useful in instances where characters are represented by multiple tokens and\n   * their byte representations must be combined to generate the correct text\n   * representation. Can be `null` if there is no bytes representation for the token.\n   */\n  bytes: Array<number> | null;\n\n  /**\n   * The log probability of this token, if it is within the top 20 most likely\n   * tokens. Otherwise, the value `-9999.0` is used to signify that the token is very\n   * unlikely.\n   */\n  logprob: number;\n\n  /**\n   * List of the most likely tokens and their log probability, at this token\n   * position. The number of entries may be fewer than the requested `top_logprobs`.\n   */\n  top_logprobs: Array<ChatCompletionTokenLogprob.TopLogprob>;\n}\n\nexport namespace ChatCompletionTokenLogprob {\n  export interface TopLogprob {\n    /**\n     * The token.\n     */\n    token: string;\n\n    /**\n     * A list of integers representing the UTF-8 bytes representation of the token.\n     * Useful in instances where characters are represented by multiple tokens and\n     * their byte representations must be combined to generate the correct text\n     * representation. Can be `null` if there is no bytes representation for the token.\n     */\n    bytes: Array<number> | null;\n\n    /**\n     * The log probability of this token, if it is within the top 20 most likely\n     * tokens. Otherwise, the value `-9999.0` is used to signify that the token is very\n     * unlikely.\n     */\n    logprob: number;\n  }\n}\n\n/**\n * A function tool that can be used to generate a response.\n */\nexport type ChatCompletionTool = ChatCompletionFunctionTool | ChatCompletionCustomTool;\n\n/**\n * Controls which (if any) tool is called by the model. `none` means the model will\n * not call any tool and instead generates a message. `auto` means the model can\n * pick between generating a message or calling one or more tools. `required` means\n * the model must call one or more tools. Specifying a particular tool via\n * `{\"type\": \"function\", \"function\": {\"name\": \"my_function\"}}` forces the model to\n * call that tool.\n *\n * `none` is the default when no tools are present. `auto` is the default if tools\n * are present.\n */\nexport type ChatCompletionToolChoiceOption =\n  | 'none'\n  | 'auto'\n  | 'required'\n  | ChatCompletionAllowedToolChoice\n  | ChatCompletionNamedToolChoice\n  | ChatCompletionNamedToolChoiceCustom;\n\nexport interface ChatCompletionToolMessageParam {\n  /**\n   * The contents of the tool message.\n   */\n  content: string | Array<ChatCompletionContentPartText>;\n\n  /**\n   * The role of the messages author, in this case `tool`.\n   */\n  role: 'tool';\n\n  /**\n   * Tool call that this message is responding to.\n   */\n  tool_call_id: string;\n}\n\n/**\n * Messages sent by an end user, containing prompts or additional context\n * information.\n */\nexport interface ChatCompletionUserMessageParam {\n  /**\n   * The contents of the user message.\n   */\n  content: string | Array<ChatCompletionContentPart>;\n\n  /**\n   * The role of the messages author, in this case `user`.\n   */\n  role: 'user';\n\n  /**\n   * An optional name for the participant. Provides the model information to\n   * differentiate between participants of the same role.\n   */\n  name?: string;\n}\n\n/**\n * Constrains the tools available to the model to a pre-defined set.\n */\nexport interface ChatCompletionAllowedTools {\n  /**\n   * Constrains the tools available to the model to a pre-defined set.\n   *\n   * `auto` allows the model to pick from among the allowed tools and generate a\n   * message.\n   *\n   * `required` requires the model to call one or more of the allowed tools.\n   */\n  mode: 'auto' | 'required';\n\n  /**\n   * A list of tool definitions that the model should be allowed to call.\n   *\n   * For the Chat Completions API, the list of tool definitions might look like:\n   *\n   * ```json\n   * [\n   *   { \"type\": \"function\", \"function\": { \"name\": \"get_weather\" } },\n   *   { \"type\": \"function\", \"function\": { \"name\": \"get_time\" } }\n   * ]\n   * ```\n   */\n  tools: Array<{ [key: string]: unknown }>;\n}\n\nexport type ChatCompletionReasoningEffort = Shared.ReasoningEffort | null;\n\nexport type ChatCompletionCreateParams =\n  | ChatCompletionCreateParamsNonStreaming\n  | ChatCompletionCreateParamsStreaming;\n\nexport interface ChatCompletionCreateParamsBase {\n  /**\n   * A list of messages comprising the conversation so far. Depending on the\n   * [model](https://platform.openai.com/docs/models) you use, different message\n   * types (modalities) are supported, like\n   * [text](https://platform.openai.com/docs/guides/text-generation),\n   * [images](https://platform.openai.com/docs/guides/vision), and\n   * [audio](https://platform.openai.com/docs/guides/audio).\n   */\n  messages: Array<ChatCompletionMessageParam>;\n\n  /**\n   * Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a\n   * wide range of models with different capabilities, performance characteristics,\n   * and price points. Refer to the\n   * [model guide](https://platform.openai.com/docs/models) to browse and compare\n   * available models.\n   */\n  model: (string & {}) | Shared.ChatModel;\n\n  /**\n   * Parameters for audio output. Required when audio output is requested with\n   * `modalities: [\"audio\"]`.\n   * [Learn more](https://platform.openai.com/docs/guides/audio).\n   */\n  audio?: ChatCompletionAudioParam | null;\n\n  /**\n   * Number between -2.0 and 2.0. Positive values penalize new tokens based on their\n   * existing frequency in the text so far, decreasing the model's likelihood to\n   * repeat the same line verbatim.\n   */\n  frequency_penalty?: number | null;\n\n  /**\n   * @deprecated Deprecated in favor of `tool_choice`.\n   *\n   * Controls which (if any) function is called by the model.\n   *\n   * `none` means the model will not call a function and instead generates a message.\n   *\n   * `auto` means the model can pick between generating a message or calling a\n   * function.\n   *\n   * Specifying a particular function via `{\"name\": \"my_function\"}` forces the model\n   * to call that function.\n   *\n   * `none` is the default when no functions are present. `auto` is the default if\n   * functions are present.\n   */\n  function_call?: 'none' | 'auto' | ChatCompletionFunctionCallOption;\n\n  /**\n   * @deprecated Deprecated in favor of `tools`.\n   *\n   * A list of functions the model may generate JSON inputs for.\n   */\n  functions?: Array<ChatCompletionCreateParams.Function>;\n\n  /**\n   * Modify the likelihood of specified tokens appearing in the completion.\n   *\n   * Accepts a JSON object that maps tokens (specified by their token ID in the\n   * tokenizer) to an associated bias value from -100 to 100. Mathematically, the\n   * bias is added to the logits generated by the model prior to sampling. The exact\n   * effect will vary per model, but values between -1 and 1 should decrease or\n   * increase likelihood of selection; values like -100 or 100 should result in a ban\n   * or exclusive selection of the relevant token.\n   */\n  logit_bias?: { [key: string]: number } | null;\n\n  /**\n   * Whether to return log probabilities of the output tokens or not. If true,\n   * returns the log probabilities of each output token returned in the `content` of\n   * `message`.\n   */\n  logprobs?: boolean | null;\n\n  /**\n   * An upper bound for the number of tokens that can be generated for a completion,\n   * including visible output tokens and\n   * [reasoning tokens](https://platform.openai.com/docs/guides/reasoning).\n   */\n  max_completion_tokens?: number | null;\n\n  /**\n   * @deprecated The maximum number of [tokens](/tokenizer) that can be generated in\n   * the chat completion. This value can be used to control\n   * [costs](https://openai.com/api/pricing/) for text generated via API.\n   *\n   * This value is now deprecated in favor of `max_completion_tokens`, and is not\n   * compatible with\n   * [o-series models](https://platform.openai.com/docs/guides/reasoning).\n   */\n  max_tokens?: number | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * Output types that you would like the model to generate. Most models are capable\n   * of generating text, which is the default:\n   *\n   * `[\"text\"]`\n   *\n   * The `gpt-4o-audio-preview` model can also be used to\n   * [generate audio](https://platform.openai.com/docs/guides/audio). To request that\n   * this model generate both text and audio responses, you can use:\n   *\n   * `[\"text\", \"audio\"]`\n   */\n  modalities?: Array<'text' | 'audio'> | null;\n\n  /**\n   * How many chat completion choices to generate for each input message. Note that\n   * you will be charged based on the number of generated tokens across all of the\n   * choices. Keep `n` as `1` to minimize costs.\n   */\n  n?: number | null;\n\n  /**\n   * Whether to enable\n   * [parallel function calling](https://platform.openai.com/docs/guides/function-calling#configuring-parallel-function-calling)\n   * during tool use.\n   */\n  parallel_tool_calls?: boolean;\n\n  /**\n   * Static predicted output content, such as the content of a text file that is\n   * being regenerated.\n   */\n  prediction?: ChatCompletionPredictionContent | null;\n\n  /**\n   * Number between -2.0 and 2.0. Positive values penalize new tokens based on\n   * whether they appear in the text so far, increasing the model's likelihood to\n   * talk about new topics.\n   */\n  presence_penalty?: number | null;\n\n  /**\n   * Used by OpenAI to cache responses for similar requests to optimize your cache\n   * hit rates. Replaces the `user` field.\n   * [Learn more](https://platform.openai.com/docs/guides/prompt-caching).\n   */\n  prompt_cache_key?: string;\n\n  /**\n   * The retention policy for the prompt cache. Set to `24h` to enable extended\n   * prompt caching, which keeps cached prefixes active for longer, up to a maximum\n   * of 24 hours.\n   * [Learn more](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention).\n   */\n  prompt_cache_retention?: 'in_memory' | '24h' | null;\n\n  /**\n   * Constrains effort on reasoning for\n   * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n   * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n   * Reducing reasoning effort can result in faster responses and fewer tokens used\n   * on reasoning in a response.\n   *\n   * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n   *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n   *   calls are supported for all reasoning values in gpt-5.1.\n   * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n   *   support `none`.\n   * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n   * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n   */\n  reasoning_effort?: Shared.ReasoningEffort | null;\n\n  /**\n   * An object specifying the format that the model must output.\n   *\n   * Setting to `{ \"type\": \"json_schema\", \"json_schema\": {...} }` enables Structured\n   * Outputs which ensures the model will match your supplied JSON schema. Learn more\n   * in the\n   * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n   *\n   * Setting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\n   * ensures the message the model generates is valid JSON. Using `json_schema` is\n   * preferred for models that support it.\n   */\n  response_format?:\n    | Shared.ResponseFormatText\n    | Shared.ResponseFormatJSONSchema\n    | Shared.ResponseFormatJSONObject;\n\n  /**\n   * A stable identifier used to help detect users of your application that may be\n   * violating OpenAI's usage policies. The IDs should be a string that uniquely\n   * identifies each user, with a maximum length of 64 characters. We recommend\n   * hashing their username or email address, in order to avoid sending us any\n   * identifying information.\n   * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers).\n   */\n  safety_identifier?: string;\n\n  /**\n   * @deprecated This feature is in Beta. If specified, our system will make a best\n   * effort to sample deterministically, such that repeated requests with the same\n   * `seed` and parameters should return the same result. Determinism is not\n   * guaranteed, and you should refer to the `system_fingerprint` response parameter\n   * to monitor changes in the backend.\n   */\n  seed?: number | null;\n\n  /**\n   * Specifies the processing type used for serving the request.\n   *\n   * - If set to 'auto', then the request will be processed with the service tier\n   *   configured in the Project settings. Unless otherwise configured, the Project\n   *   will use 'default'.\n   * - If set to 'default', then the request will be processed with the standard\n   *   pricing and performance for the selected model.\n   * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or\n   *   '[priority](https://openai.com/api-priority-processing/)', then the request\n   *   will be processed with the corresponding service tier.\n   * - When not set, the default behavior is 'auto'.\n   *\n   * When the `service_tier` parameter is set, the response body will include the\n   * `service_tier` value based on the processing mode actually used to serve the\n   * request. This response value may be different from the value set in the\n   * parameter.\n   */\n  service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | null;\n\n  /**\n   * Not supported with latest reasoning models `o3` and `o4-mini`.\n   *\n   * Up to 4 sequences where the API will stop generating further tokens. The\n   * returned text will not contain the stop sequence.\n   */\n  stop?: string | null | Array<string>;\n\n  /**\n   * Whether or not to store the output of this chat completion request for use in\n   * our [model distillation](https://platform.openai.com/docs/guides/distillation)\n   * or [evals](https://platform.openai.com/docs/guides/evals) products.\n   *\n   * Supports text and image inputs. Note: image inputs over 8MB will be dropped.\n   */\n  store?: boolean | null;\n\n  /**\n   * If set to true, the model response data will be streamed to the client as it is\n   * generated using\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\n   * See the\n   * [Streaming section below](https://platform.openai.com/docs/api-reference/chat/streaming)\n   * for more information, along with the\n   * [streaming responses](https://platform.openai.com/docs/guides/streaming-responses)\n   * guide for more information on how to handle the streaming events.\n   */\n  stream?: boolean | null;\n\n  /**\n   * Options for streaming response. Only set this when you set `stream: true`.\n   */\n  stream_options?: ChatCompletionStreamOptions | null;\n\n  /**\n   * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will\n   * make the output more random, while lower values like 0.2 will make it more\n   * focused and deterministic. We generally recommend altering this or `top_p` but\n   * not both.\n   */\n  temperature?: number | null;\n\n  /**\n   * Controls which (if any) tool is called by the model. `none` means the model will\n   * not call any tool and instead generates a message. `auto` means the model can\n   * pick between generating a message or calling one or more tools. `required` means\n   * the model must call one or more tools. Specifying a particular tool via\n   * `{\"type\": \"function\", \"function\": {\"name\": \"my_function\"}}` forces the model to\n   * call that tool.\n   *\n   * `none` is the default when no tools are present. `auto` is the default if tools\n   * are present.\n   */\n  tool_choice?: ChatCompletionToolChoiceOption;\n\n  /**\n   * A list of tools the model may call. You can provide either\n   * [custom tools](https://platform.openai.com/docs/guides/function-calling#custom-tools)\n   * or [function tools](https://platform.openai.com/docs/guides/function-calling).\n   */\n  tools?: Array<ChatCompletionTool>;\n\n  /**\n   * An integer between 0 and 20 specifying the maximum number of most likely tokens\n   * to return at each token position, each with an associated log probability. In\n   * some cases, the number of returned tokens may be fewer than requested.\n   * `logprobs` must be set to `true` if this parameter is used.\n   */\n  top_logprobs?: number | null;\n\n  /**\n   * An alternative to sampling with temperature, called nucleus sampling, where the\n   * model considers the results of the tokens with top_p probability mass. So 0.1\n   * means only the tokens comprising the top 10% probability mass are considered.\n   *\n   * We generally recommend altering this or `temperature` but not both.\n   */\n  top_p?: number | null;\n\n  /**\n   * @deprecated This field is being replaced by `safety_identifier` and\n   * `prompt_cache_key`. Use `prompt_cache_key` instead to maintain caching\n   * optimizations. A stable identifier for your end-users. Used to boost cache hit\n   * rates by better bucketing similar requests and to help OpenAI detect and prevent\n   * abuse.\n   * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers).\n   */\n  user?: string;\n\n  /**\n   * Constrains the verbosity of the model's response. Lower values will result in\n   * more concise responses, while higher values will result in more verbose\n   * responses. Currently supported values are `low`, `medium`, and `high`.\n   */\n  verbosity?: 'low' | 'medium' | 'high' | null;\n\n  /**\n   * This tool searches the web for relevant results to use in a response. Learn more\n   * about the\n   * [web search tool](https://platform.openai.com/docs/guides/tools-web-search?api-mode=chat).\n   */\n  web_search_options?: ChatCompletionCreateParams.WebSearchOptions;\n}\n\nexport namespace ChatCompletionCreateParams {\n  /**\n   * @deprecated\n   */\n  export interface Function {\n    /**\n     * The name of the function to be called. Must be a-z, A-Z, 0-9, or contain\n     * underscores and dashes, with a maximum length of 64.\n     */\n    name: string;\n\n    /**\n     * A description of what the function does, used by the model to choose when and\n     * how to call the function.\n     */\n    description?: string;\n\n    /**\n     * The parameters the functions accepts, described as a JSON Schema object. See the\n     * [guide](https://platform.openai.com/docs/guides/function-calling) for examples,\n     * and the\n     * [JSON Schema reference](https://json-schema.org/understanding-json-schema/) for\n     * documentation about the format.\n     *\n     * Omitting `parameters` defines a function with an empty parameter list.\n     */\n    parameters?: Shared.FunctionParameters;\n  }\n\n  /**\n   * This tool searches the web for relevant results to use in a response. Learn more\n   * about the\n   * [web search tool](https://platform.openai.com/docs/guides/tools-web-search?api-mode=chat).\n   */\n  export interface WebSearchOptions {\n    /**\n     * High level guidance for the amount of context window space to use for the\n     * search. One of `low`, `medium`, or `high`. `medium` is the default.\n     */\n    search_context_size?: 'low' | 'medium' | 'high';\n\n    /**\n     * Approximate location parameters for the search.\n     */\n    user_location?: WebSearchOptions.UserLocation | null;\n  }\n\n  export namespace WebSearchOptions {\n    /**\n     * Approximate location parameters for the search.\n     */\n    export interface UserLocation {\n      /**\n       * Approximate location parameters for the search.\n       */\n      approximate: UserLocation.Approximate;\n\n      /**\n       * The type of location approximation. Always `approximate`.\n       */\n      type: 'approximate';\n    }\n\n    export namespace UserLocation {\n      /**\n       * Approximate location parameters for the search.\n       */\n      export interface Approximate {\n        /**\n         * Free text input for the city of the user, e.g. `San Francisco`.\n         */\n        city?: string;\n\n        /**\n         * The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of\n         * the user, e.g. `US`.\n         */\n        country?: string;\n\n        /**\n         * Free text input for the region of the user, e.g. `California`.\n         */\n        region?: string;\n\n        /**\n         * The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the\n         * user, e.g. `America/Los_Angeles`.\n         */\n        timezone?: string;\n      }\n    }\n  }\n\n  export type ChatCompletionCreateParamsNonStreaming =\n    ChatCompletionsAPI.ChatCompletionCreateParamsNonStreaming;\n  export type ChatCompletionCreateParamsStreaming = ChatCompletionsAPI.ChatCompletionCreateParamsStreaming;\n}\n\nexport interface ChatCompletionCreateParamsNonStreaming extends ChatCompletionCreateParamsBase {\n  /**\n   * If set to true, the model response data will be streamed to the client as it is\n   * generated using\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\n   * See the\n   * [Streaming section below](https://platform.openai.com/docs/api-reference/chat/streaming)\n   * for more information, along with the\n   * [streaming responses](https://platform.openai.com/docs/guides/streaming-responses)\n   * guide for more information on how to handle the streaming events.\n   */\n  stream?: false | null;\n}\n\nexport interface ChatCompletionCreateParamsStreaming extends ChatCompletionCreateParamsBase {\n  /**\n   * If set to true, the model response data will be streamed to the client as it is\n   * generated using\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\n   * See the\n   * [Streaming section below](https://platform.openai.com/docs/api-reference/chat/streaming)\n   * for more information, along with the\n   * [streaming responses](https://platform.openai.com/docs/guides/streaming-responses)\n   * guide for more information on how to handle the streaming events.\n   */\n  stream: true;\n}\n\nexport interface ChatCompletionUpdateParams {\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n}\n\nexport interface ChatCompletionListParams extends CursorPageParams {\n  /**\n   * A list of metadata keys to filter the Chat Completions by. Example:\n   *\n   * `metadata[key1]=value1&metadata[key2]=value2`\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * The model used to generate the Chat Completions.\n   */\n  model?: string;\n\n  /**\n   * Sort order for Chat Completions by timestamp. Use `asc` for ascending order or\n   * `desc` for descending order. Defaults to `asc`.\n   */\n  order?: 'asc' | 'desc';\n}\n\nCompletions.Messages = Messages;\n\nexport declare namespace Completions {\n  export {\n    type ChatCompletion as ChatCompletion,\n    type ChatCompletionAllowedToolChoice as ChatCompletionAllowedToolChoice,\n    type ChatCompletionAssistantMessageParam as ChatCompletionAssistantMessageParam,\n    type ChatCompletionAudio as ChatCompletionAudio,\n    type ChatCompletionAudioParam as ChatCompletionAudioParam,\n    type ChatCompletionChunk as ChatCompletionChunk,\n    type ChatCompletionContentPart as ChatCompletionContentPart,\n    type ChatCompletionContentPartImage as ChatCompletionContentPartImage,\n    type ChatCompletionContentPartInputAudio as ChatCompletionContentPartInputAudio,\n    type ChatCompletionContentPartRefusal as ChatCompletionContentPartRefusal,\n    type ChatCompletionContentPartText as ChatCompletionContentPartText,\n    type ChatCompletionCustomTool as ChatCompletionCustomTool,\n    type ChatCompletionDeleted as ChatCompletionDeleted,\n    type ChatCompletionDeveloperMessageParam as ChatCompletionDeveloperMessageParam,\n    type ChatCompletionFunctionCallOption as ChatCompletionFunctionCallOption,\n    type ChatCompletionFunctionMessageParam as ChatCompletionFunctionMessageParam,\n    type ChatCompletionFunctionTool as ChatCompletionFunctionTool,\n    type ChatCompletionMessage as ChatCompletionMessage,\n    type ChatCompletionMessageCustomToolCall as ChatCompletionMessageCustomToolCall,\n    type ChatCompletionMessageFunctionToolCall as ChatCompletionMessageFunctionToolCall,\n    type ChatCompletionMessageParam as ChatCompletionMessageParam,\n    type ChatCompletionMessageToolCall as ChatCompletionMessageToolCall,\n    type ChatCompletionModality as ChatCompletionModality,\n    type ChatCompletionNamedToolChoice as ChatCompletionNamedToolChoice,\n    type ChatCompletionNamedToolChoiceCustom as ChatCompletionNamedToolChoiceCustom,\n    type ChatCompletionPredictionContent as ChatCompletionPredictionContent,\n    type ChatCompletionRole as ChatCompletionRole,\n    type ChatCompletionStoreMessage as ChatCompletionStoreMessage,\n    type ChatCompletionStreamOptions as ChatCompletionStreamOptions,\n    type ChatCompletionSystemMessageParam as ChatCompletionSystemMessageParam,\n    type ChatCompletionTokenLogprob as ChatCompletionTokenLogprob,\n    type ChatCompletionTool as ChatCompletionTool,\n    type ChatCompletionToolChoiceOption as ChatCompletionToolChoiceOption,\n    type ChatCompletionToolMessageParam as ChatCompletionToolMessageParam,\n    type ChatCompletionUserMessageParam as ChatCompletionUserMessageParam,\n    type ChatCompletionAllowedTools as ChatCompletionAllowedTools,\n    type ChatCompletionReasoningEffort as ChatCompletionReasoningEffort,\n    type ChatCompletionsPage as ChatCompletionsPage,\n    type ChatCompletionCreateParams as ChatCompletionCreateParams,\n    type ChatCompletionCreateParamsNonStreaming as ChatCompletionCreateParamsNonStreaming,\n    type ChatCompletionCreateParamsStreaming as ChatCompletionCreateParamsStreaming,\n    type ChatCompletionUpdateParams as ChatCompletionUpdateParams,\n    type ChatCompletionListParams as ChatCompletionListParams,\n  };\n\n  export { Messages as Messages, type MessageListParams as MessageListParams };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as Shared from '../shared';\nimport * as CompletionsAPI from './completions/completions';\nimport {\n  ChatCompletion,\n  ChatCompletionAllowedToolChoice,\n  ChatCompletionAllowedTools,\n  ChatCompletionAssistantMessageParam,\n  ChatCompletionAudio,\n  ChatCompletionAudioParam,\n  ChatCompletionChunk,\n  ChatCompletionContentPart,\n  ChatCompletionContentPartImage,\n  ChatCompletionContentPartInputAudio,\n  ChatCompletionContentPartRefusal,\n  ChatCompletionContentPartText,\n  ChatCompletionCreateParams,\n  ChatCompletionCreateParamsNonStreaming,\n  ChatCompletionCreateParamsStreaming,\n  ChatCompletionCustomTool,\n  ChatCompletionDeleted,\n  ChatCompletionDeveloperMessageParam,\n  ChatCompletionFunctionCallOption,\n  ChatCompletionFunctionMessageParam,\n  ChatCompletionFunctionTool,\n  ChatCompletionListParams,\n  ChatCompletionMessage,\n  ChatCompletionMessageCustomToolCall,\n  ChatCompletionMessageFunctionToolCall,\n  ChatCompletionMessageParam,\n  ChatCompletionMessageToolCall,\n  ChatCompletionModality,\n  ChatCompletionNamedToolChoice,\n  ChatCompletionNamedToolChoiceCustom,\n  ChatCompletionPredictionContent,\n  ChatCompletionReasoningEffort,\n  ChatCompletionRole,\n  ChatCompletionStoreMessage,\n  ChatCompletionStreamOptions,\n  ChatCompletionSystemMessageParam,\n  ChatCompletionTokenLogprob,\n  ChatCompletionTool,\n  ChatCompletionToolChoiceOption,\n  ChatCompletionToolMessageParam,\n  ChatCompletionUpdateParams,\n  ChatCompletionUserMessageParam,\n  ChatCompletionsPage,\n  Completions,\n} from './completions/completions';\n\nexport class Chat extends APIResource {\n  completions: CompletionsAPI.Completions = new CompletionsAPI.Completions(this._client);\n}\n\nexport type ChatModel = Shared.ChatModel;\n\nChat.Completions = Completions;\n\nexport declare namespace Chat {\n  export { type ChatModel as ChatModel };\n\n  export {\n    Completions as Completions,\n    type ChatCompletion as ChatCompletion,\n    type ChatCompletionAllowedToolChoice as ChatCompletionAllowedToolChoice,\n    type ChatCompletionAssistantMessageParam as ChatCompletionAssistantMessageParam,\n    type ChatCompletionAudio as ChatCompletionAudio,\n    type ChatCompletionAudioParam as ChatCompletionAudioParam,\n    type ChatCompletionChunk as ChatCompletionChunk,\n    type ChatCompletionContentPart as ChatCompletionContentPart,\n    type ChatCompletionContentPartImage as ChatCompletionContentPartImage,\n    type ChatCompletionContentPartInputAudio as ChatCompletionContentPartInputAudio,\n    type ChatCompletionContentPartRefusal as ChatCompletionContentPartRefusal,\n    type ChatCompletionContentPartText as ChatCompletionContentPartText,\n    type ChatCompletionCustomTool as ChatCompletionCustomTool,\n    type ChatCompletionDeleted as ChatCompletionDeleted,\n    type ChatCompletionDeveloperMessageParam as ChatCompletionDeveloperMessageParam,\n    type ChatCompletionFunctionCallOption as ChatCompletionFunctionCallOption,\n    type ChatCompletionFunctionMessageParam as ChatCompletionFunctionMessageParam,\n    type ChatCompletionFunctionTool as ChatCompletionFunctionTool,\n    type ChatCompletionMessage as ChatCompletionMessage,\n    type ChatCompletionMessageCustomToolCall as ChatCompletionMessageCustomToolCall,\n    type ChatCompletionMessageFunctionToolCall as ChatCompletionMessageFunctionToolCall,\n    type ChatCompletionMessageParam as ChatCompletionMessageParam,\n    type ChatCompletionMessageToolCall as ChatCompletionMessageToolCall,\n    type ChatCompletionModality as ChatCompletionModality,\n    type ChatCompletionNamedToolChoice as ChatCompletionNamedToolChoice,\n    type ChatCompletionNamedToolChoiceCustom as ChatCompletionNamedToolChoiceCustom,\n    type ChatCompletionPredictionContent as ChatCompletionPredictionContent,\n    type ChatCompletionRole as ChatCompletionRole,\n    type ChatCompletionStoreMessage as ChatCompletionStoreMessage,\n    type ChatCompletionStreamOptions as ChatCompletionStreamOptions,\n    type ChatCompletionSystemMessageParam as ChatCompletionSystemMessageParam,\n    type ChatCompletionTokenLogprob as ChatCompletionTokenLogprob,\n    type ChatCompletionTool as ChatCompletionTool,\n    type ChatCompletionToolChoiceOption as ChatCompletionToolChoiceOption,\n    type ChatCompletionToolMessageParam as ChatCompletionToolMessageParam,\n    type ChatCompletionUserMessageParam as ChatCompletionUserMessageParam,\n    type ChatCompletionAllowedTools as ChatCompletionAllowedTools,\n    type ChatCompletionReasoningEffort as ChatCompletionReasoningEffort,\n    type ChatCompletionsPage as ChatCompletionsPage,\n    type ChatCompletionCreateParams as ChatCompletionCreateParams,\n    type ChatCompletionCreateParamsNonStreaming as ChatCompletionCreateParamsNonStreaming,\n    type ChatCompletionCreateParamsStreaming as ChatCompletionCreateParamsStreaming,\n    type ChatCompletionUpdateParams as ChatCompletionUpdateParams,\n    type ChatCompletionListParams as ChatCompletionListParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nexport {\n  Completions,\n  type ChatCompletion,\n  type ChatCompletionAllowedToolChoice,\n  type ChatCompletionAssistantMessageParam,\n  type ChatCompletionAudio,\n  type ChatCompletionAudioParam,\n  type ChatCompletionChunk,\n  type ChatCompletionContentPart,\n  type ChatCompletionContentPartImage,\n  type ChatCompletionContentPartInputAudio,\n  type ChatCompletionContentPartRefusal,\n  type ChatCompletionContentPartText,\n  type ChatCompletionCustomTool,\n  type ChatCompletionDeleted,\n  type ChatCompletionDeveloperMessageParam,\n  type ChatCompletionFunctionCallOption,\n  type ChatCompletionFunctionMessageParam,\n  type ChatCompletionFunctionTool,\n  type ChatCompletionMessage,\n  type ChatCompletionMessageCustomToolCall,\n  type ChatCompletionMessageFunctionToolCall,\n  type ChatCompletionMessageParam,\n  type ChatCompletionMessageToolCall,\n  type ChatCompletionModality,\n  type ChatCompletionNamedToolChoice,\n  type ChatCompletionNamedToolChoiceCustom,\n  type ChatCompletionPredictionContent,\n  type ChatCompletionRole,\n  type ChatCompletionStoreMessage,\n  type ChatCompletionStreamOptions,\n  type ChatCompletionSystemMessageParam,\n  type ChatCompletionTokenLogprob,\n  type ChatCompletionTool,\n  type ChatCompletionToolChoiceOption,\n  type ChatCompletionToolMessageParam,\n  type ChatCompletionUserMessageParam,\n  type ChatCompletionAllowedTools,\n  type ChatCompletionCreateParams,\n  type ChatCompletionCreateParamsNonStreaming,\n  type ChatCompletionCreateParamsStreaming,\n  type ChatCompletionUpdateParams,\n  type ChatCompletionListParams,\n  type ChatCompletionStoreMessagesPage,\n  type ChatCompletionsPage,\n} from './completions';\nexport * from './completions';\nexport { Messages, type MessageListParams } from './messages';\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nexport { Chat } from './chat';\nexport {\n  Completions,\n  type ChatCompletion,\n  type ChatCompletionAllowedToolChoice,\n  type ChatCompletionAssistantMessageParam,\n  type ChatCompletionAudio,\n  type ChatCompletionAudioParam,\n  type ChatCompletionChunk,\n  type ChatCompletionContentPart,\n  type ChatCompletionContentPartImage,\n  type ChatCompletionContentPartInputAudio,\n  type ChatCompletionContentPartRefusal,\n  type ChatCompletionContentPartText,\n  type ChatCompletionCustomTool,\n  type ChatCompletionDeleted,\n  type ChatCompletionDeveloperMessageParam,\n  type ChatCompletionFunctionCallOption,\n  type ChatCompletionFunctionMessageParam,\n  type ChatCompletionFunctionTool,\n  type ChatCompletionMessage,\n  type ChatCompletionMessageCustomToolCall,\n  type ChatCompletionMessageFunctionToolCall,\n  type ChatCompletionMessageParam,\n  type ChatCompletionMessageToolCall,\n  type ChatCompletionModality,\n  type ChatCompletionNamedToolChoice,\n  type ChatCompletionNamedToolChoiceCustom,\n  type ChatCompletionPredictionContent,\n  type ChatCompletionRole,\n  type ChatCompletionStoreMessage,\n  type ChatCompletionStreamOptions,\n  type ChatCompletionSystemMessageParam,\n  type ChatCompletionTokenLogprob,\n  type ChatCompletionTool,\n  type ChatCompletionToolChoiceOption,\n  type ChatCompletionToolMessageParam,\n  type ChatCompletionUserMessageParam,\n  type ChatCompletionAllowedTools,\n  type ChatCompletionCreateParams,\n  type ChatCompletionCreateParamsNonStreaming,\n  type ChatCompletionCreateParamsStreaming,\n  type ChatCompletionUpdateParams,\n  type ChatCompletionListParams,\n  type ChatCompletionStoreMessagesPage,\n  type ChatCompletionsPage,\n} from './completions/index';\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nexport type AllModels =\n  | (string & {})\n  | ChatModel\n  | 'o1-pro'\n  | 'o1-pro-2025-03-19'\n  | 'o3-pro'\n  | 'o3-pro-2025-06-10'\n  | 'o3-deep-research'\n  | 'o3-deep-research-2025-06-26'\n  | 'o4-mini-deep-research'\n  | 'o4-mini-deep-research-2025-06-26'\n  | 'computer-use-preview'\n  | 'computer-use-preview-2025-03-11'\n  | 'gpt-5-codex'\n  | 'gpt-5-pro'\n  | 'gpt-5-pro-2025-10-06'\n  | 'gpt-5.1-codex-max';\n\nexport type ChatModel =\n  | 'gpt-5.4'\n  | 'gpt-5.4-mini'\n  | 'gpt-5.4-nano'\n  | 'gpt-5.4-mini-2026-03-17'\n  | 'gpt-5.4-nano-2026-03-17'\n  | 'gpt-5.3-chat-latest'\n  | 'gpt-5.2'\n  | 'gpt-5.2-2025-12-11'\n  | 'gpt-5.2-chat-latest'\n  | 'gpt-5.2-pro'\n  | 'gpt-5.2-pro-2025-12-11'\n  | 'gpt-5.1'\n  | 'gpt-5.1-2025-11-13'\n  | 'gpt-5.1-codex'\n  | 'gpt-5.1-mini'\n  | 'gpt-5.1-chat-latest'\n  | 'gpt-5'\n  | 'gpt-5-mini'\n  | 'gpt-5-nano'\n  | 'gpt-5-2025-08-07'\n  | 'gpt-5-mini-2025-08-07'\n  | 'gpt-5-nano-2025-08-07'\n  | 'gpt-5-chat-latest'\n  | 'gpt-4.1'\n  | 'gpt-4.1-mini'\n  | 'gpt-4.1-nano'\n  | 'gpt-4.1-2025-04-14'\n  | 'gpt-4.1-mini-2025-04-14'\n  | 'gpt-4.1-nano-2025-04-14'\n  | 'o4-mini'\n  | 'o4-mini-2025-04-16'\n  | 'o3'\n  | 'o3-2025-04-16'\n  | 'o3-mini'\n  | 'o3-mini-2025-01-31'\n  | 'o1'\n  | 'o1-2024-12-17'\n  | 'o1-preview'\n  | 'o1-preview-2024-09-12'\n  | 'o1-mini'\n  | 'o1-mini-2024-09-12'\n  | 'gpt-4o'\n  | 'gpt-4o-2024-11-20'\n  | 'gpt-4o-2024-08-06'\n  | 'gpt-4o-2024-05-13'\n  | 'gpt-4o-audio-preview'\n  | 'gpt-4o-audio-preview-2024-10-01'\n  | 'gpt-4o-audio-preview-2024-12-17'\n  | 'gpt-4o-audio-preview-2025-06-03'\n  | 'gpt-4o-mini-audio-preview'\n  | 'gpt-4o-mini-audio-preview-2024-12-17'\n  | 'gpt-4o-search-preview'\n  | 'gpt-4o-mini-search-preview'\n  | 'gpt-4o-search-preview-2025-03-11'\n  | 'gpt-4o-mini-search-preview-2025-03-11'\n  | 'chatgpt-4o-latest'\n  | 'codex-mini-latest'\n  | 'gpt-4o-mini'\n  | 'gpt-4o-mini-2024-07-18'\n  | 'gpt-4-turbo'\n  | 'gpt-4-turbo-2024-04-09'\n  | 'gpt-4-0125-preview'\n  | 'gpt-4-turbo-preview'\n  | 'gpt-4-1106-preview'\n  | 'gpt-4-vision-preview'\n  | 'gpt-4'\n  | 'gpt-4-0314'\n  | 'gpt-4-0613'\n  | 'gpt-4-32k'\n  | 'gpt-4-32k-0314'\n  | 'gpt-4-32k-0613'\n  | 'gpt-3.5-turbo'\n  | 'gpt-3.5-turbo-16k'\n  | 'gpt-3.5-turbo-0301'\n  | 'gpt-3.5-turbo-0613'\n  | 'gpt-3.5-turbo-1106'\n  | 'gpt-3.5-turbo-0125'\n  | 'gpt-3.5-turbo-16k-0613';\n\n/**\n * A filter used to compare a specified attribute key to a given value using a\n * defined comparison operation.\n */\nexport interface ComparisonFilter {\n  /**\n   * The key to compare against the value.\n   */\n  key: string;\n\n  /**\n   * Specifies the comparison operator: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`,\n   * `nin`.\n   *\n   * - `eq`: equals\n   * - `ne`: not equal\n   * - `gt`: greater than\n   * - `gte`: greater than or equal\n   * - `lt`: less than\n   * - `lte`: less than or equal\n   * - `in`: in\n   * - `nin`: not in\n   */\n  type: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'nin';\n\n  /**\n   * The value to compare against the attribute key; supports string, number, or\n   * boolean types.\n   */\n  value: string | number | boolean | Array<string | number>;\n}\n\n/**\n * Combine multiple filters using `and` or `or`.\n */\nexport interface CompoundFilter {\n  /**\n   * Array of filters to combine. Items can be `ComparisonFilter` or\n   * `CompoundFilter`.\n   */\n  filters: Array<ComparisonFilter | unknown>;\n\n  /**\n   * Type of operation: `and` or `or`.\n   */\n  type: 'and' | 'or';\n}\n\n/**\n * The input format for the custom tool. Default is unconstrained text.\n */\nexport type CustomToolInputFormat = CustomToolInputFormat.Text | CustomToolInputFormat.Grammar;\n\nexport namespace CustomToolInputFormat {\n  /**\n   * Unconstrained free-form text.\n   */\n  export interface Text {\n    /**\n     * Unconstrained text format. Always `text`.\n     */\n    type: 'text';\n  }\n\n  /**\n   * A grammar defined by the user.\n   */\n  export interface Grammar {\n    /**\n     * The grammar definition.\n     */\n    definition: string;\n\n    /**\n     * The syntax of the grammar definition. One of `lark` or `regex`.\n     */\n    syntax: 'lark' | 'regex';\n\n    /**\n     * Grammar format. Always `grammar`.\n     */\n    type: 'grammar';\n  }\n}\n\nexport interface ErrorObject {\n  code: string | null;\n\n  message: string;\n\n  param: string | null;\n\n  type: string;\n}\n\nexport interface FunctionDefinition {\n  /**\n   * The name of the function to be called. Must be a-z, A-Z, 0-9, or contain\n   * underscores and dashes, with a maximum length of 64.\n   */\n  name: string;\n\n  /**\n   * A description of what the function does, used by the model to choose when and\n   * how to call the function.\n   */\n  description?: string;\n\n  /**\n   * The parameters the functions accepts, described as a JSON Schema object. See the\n   * [guide](https://platform.openai.com/docs/guides/function-calling) for examples,\n   * and the\n   * [JSON Schema reference](https://json-schema.org/understanding-json-schema/) for\n   * documentation about the format.\n   *\n   * Omitting `parameters` defines a function with an empty parameter list.\n   */\n  parameters?: FunctionParameters;\n\n  /**\n   * Whether to enable strict schema adherence when generating the function call. If\n   * set to true, the model will follow the exact schema defined in the `parameters`\n   * field. Only a subset of JSON Schema is supported when `strict` is `true`. Learn\n   * more about Structured Outputs in the\n   * [function calling guide](https://platform.openai.com/docs/guides/function-calling).\n   */\n  strict?: boolean | null;\n}\n\n/**\n * The parameters the functions accepts, described as a JSON Schema object. See the\n * [guide](https://platform.openai.com/docs/guides/function-calling) for examples,\n * and the\n * [JSON Schema reference](https://json-schema.org/understanding-json-schema/) for\n * documentation about the format.\n *\n * Omitting `parameters` defines a function with an empty parameter list.\n */\nexport type FunctionParameters = { [key: string]: unknown };\n\n/**\n * Set of 16 key-value pairs that can be attached to an object. This can be useful\n * for storing additional information about the object in a structured format, and\n * querying for objects via API or the dashboard.\n *\n * Keys are strings with a maximum length of 64 characters. Values are strings with\n * a maximum length of 512 characters.\n */\nexport type Metadata = { [key: string]: string };\n\nexport type OAuthErrorCode = 'invalid_grant' | 'invalid_subject_token' | (string & {});\n\n/**\n * **gpt-5 and o-series models only**\n *\n * Configuration options for\n * [reasoning models](https://platform.openai.com/docs/guides/reasoning).\n */\nexport interface Reasoning {\n  /**\n   * Constrains effort on reasoning for\n   * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n   * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n   * Reducing reasoning effort can result in faster responses and fewer tokens used\n   * on reasoning in a response.\n   *\n   * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n   *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n   *   calls are supported for all reasoning values in gpt-5.1.\n   * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n   *   support `none`.\n   * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n   * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n   */\n  effort?: ReasoningEffort | null;\n\n  /**\n   * @deprecated **Deprecated:** use `summary` instead.\n   *\n   * A summary of the reasoning performed by the model. This can be useful for\n   * debugging and understanding the model's reasoning process. One of `auto`,\n   * `concise`, or `detailed`.\n   */\n  generate_summary?: 'auto' | 'concise' | 'detailed' | null;\n\n  /**\n   * A summary of the reasoning performed by the model. This can be useful for\n   * debugging and understanding the model's reasoning process. One of `auto`,\n   * `concise`, or `detailed`.\n   *\n   * `concise` is supported for `computer-use-preview` models and all reasoning\n   * models after `gpt-5`.\n   */\n  summary?: 'auto' | 'concise' | 'detailed' | null;\n}\n\n/**\n * Constrains effort on reasoning for\n * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n * Reducing reasoning effort can result in faster responses and fewer tokens used\n * on reasoning in a response.\n *\n * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n *   calls are supported for all reasoning values in gpt-5.1.\n * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n *   support `none`.\n * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n */\nexport type ReasoningEffort = 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | null;\n\n/**\n * JSON object response format. An older method of generating JSON responses. Using\n * `json_schema` is recommended for models that support it. Note that the model\n * will not generate JSON without a system or user message instructing it to do so.\n */\nexport interface ResponseFormatJSONObject {\n  /**\n   * The type of response format being defined. Always `json_object`.\n   */\n  type: 'json_object';\n}\n\n/**\n * JSON Schema response format. Used to generate structured JSON responses. Learn\n * more about\n * [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs).\n */\nexport interface ResponseFormatJSONSchema {\n  /**\n   * Structured Outputs configuration options, including a JSON Schema.\n   */\n  json_schema: ResponseFormatJSONSchema.JSONSchema;\n\n  /**\n   * The type of response format being defined. Always `json_schema`.\n   */\n  type: 'json_schema';\n}\n\nexport namespace ResponseFormatJSONSchema {\n  /**\n   * Structured Outputs configuration options, including a JSON Schema.\n   */\n  export interface JSONSchema {\n    /**\n     * The name of the response format. Must be a-z, A-Z, 0-9, or contain underscores\n     * and dashes, with a maximum length of 64.\n     */\n    name: string;\n\n    /**\n     * A description of what the response format is for, used by the model to determine\n     * how to respond in the format.\n     */\n    description?: string;\n\n    /**\n     * The schema for the response format, described as a JSON Schema object. Learn how\n     * to build JSON schemas [here](https://json-schema.org/).\n     */\n    schema?: { [key: string]: unknown };\n\n    /**\n     * Whether to enable strict schema adherence when generating the output. If set to\n     * true, the model will always follow the exact schema defined in the `schema`\n     * field. Only a subset of JSON Schema is supported when `strict` is `true`. To\n     * learn more, read the\n     * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n     */\n    strict?: boolean | null;\n  }\n}\n\n/**\n * Default response format. Used to generate text responses.\n */\nexport interface ResponseFormatText {\n  /**\n   * The type of response format being defined. Always `text`.\n   */\n  type: 'text';\n}\n\n/**\n * A custom grammar for the model to follow when generating text. Learn more in the\n * [custom grammars guide](https://platform.openai.com/docs/guides/custom-grammars).\n */\nexport interface ResponseFormatTextGrammar {\n  /**\n   * The custom grammar for the model to follow.\n   */\n  grammar: string;\n\n  /**\n   * The type of response format being defined. Always `grammar`.\n   */\n  type: 'grammar';\n}\n\n/**\n * Configure the model to generate valid Python code. See the\n * [custom grammars guide](https://platform.openai.com/docs/guides/custom-grammars)\n * for more details.\n */\nexport interface ResponseFormatTextPython {\n  /**\n   * The type of response format being defined. Always `python`.\n   */\n  type: 'python';\n}\n\nexport type ResponsesModel =\n  | (string & {})\n  | ChatModel\n  | 'o1-pro'\n  | 'o1-pro-2025-03-19'\n  | 'o3-pro'\n  | 'o3-pro-2025-06-10'\n  | 'o3-deep-research'\n  | 'o3-deep-research-2025-06-26'\n  | 'o4-mini-deep-research'\n  | 'o4-mini-deep-research-2025-06-26'\n  | 'computer-use-preview'\n  | 'computer-use-preview-2025-03-11'\n  | 'gpt-5-codex'\n  | 'gpt-5-pro'\n  | 'gpt-5-pro-2025-10-06'\n  | 'gpt-5.1-codex-max';\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport { APIPromise } from '../../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pagination';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\nexport class AdminAPIKeys extends APIResource {\n  /**\n   * Create an organization admin API key\n   *\n   * @example\n   * ```ts\n   * const adminAPIKey =\n   *   await client.admin.organization.adminAPIKeys.create({\n   *     name: 'New Admin Key',\n   *   });\n   * ```\n   */\n  create(body: AdminAPIKeyCreateParams, options?: RequestOptions): APIPromise<AdminAPIKeyCreateResponse> {\n    return this._client.post('/organization/admin_api_keys', {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Retrieve a single organization API key\n   *\n   * @example\n   * ```ts\n   * const adminAPIKey =\n   *   await client.admin.organization.adminAPIKeys.retrieve(\n   *     'key_id',\n   *   );\n   * ```\n   */\n  retrieve(keyID: string, options?: RequestOptions): APIPromise<AdminAPIKey> {\n    return this._client.get(path`/organization/admin_api_keys/${keyID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * List organization API keys\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const adminAPIKey of client.admin.organization.adminAPIKeys.list()) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    query: AdminAPIKeyListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<AdminAPIKeysPage, AdminAPIKey> {\n    return this._client.getAPIList('/organization/admin_api_keys', CursorPage<AdminAPIKey>, {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Delete an organization admin API key\n   *\n   * @example\n   * ```ts\n   * const adminAPIKey =\n   *   await client.admin.organization.adminAPIKeys.delete(\n   *     'key_id',\n   *   );\n   * ```\n   */\n  delete(keyID: string, options?: RequestOptions): APIPromise<AdminAPIKeyDeleteResponse> {\n    return this._client.delete(path`/organization/admin_api_keys/${keyID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type AdminAPIKeysPage = CursorPage<AdminAPIKey>;\n\n/**\n * Represents an individual Admin API key in an org.\n */\nexport interface AdminAPIKey {\n  /**\n   * The identifier, which can be referenced in API endpoints\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the API key was created\n   */\n  created_at: number;\n\n  /**\n   * The object type, which is always `organization.admin_api_key`\n   */\n  object: 'organization.admin_api_key';\n\n  owner: AdminAPIKey.Owner;\n\n  /**\n   * The redacted value of the API key\n   */\n  redacted_value: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the API key was last used\n   */\n  last_used_at?: number | null;\n\n  /**\n   * The name of the API key\n   */\n  name?: string | null;\n}\n\nexport namespace AdminAPIKey {\n  export interface Owner {\n    /**\n     * The identifier, which can be referenced in API endpoints\n     */\n    id?: string;\n\n    /**\n     * The Unix timestamp (in seconds) of when the user was created\n     */\n    created_at?: number;\n\n    /**\n     * The name of the user\n     */\n    name?: string;\n\n    /**\n     * The object type, which is always organization.user\n     */\n    object?: string;\n\n    /**\n     * Always `owner`\n     */\n    role?: string;\n\n    /**\n     * Always `user`\n     */\n    type?: string;\n  }\n}\n\n/**\n * Represents an individual Admin API key in an org.\n */\nexport interface AdminAPIKeyCreateResponse extends AdminAPIKey {\n  /**\n   * The value of the API key. Only shown on create.\n   */\n  value: string;\n}\n\nexport interface AdminAPIKeyDeleteResponse {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'organization.admin_api_key.deleted';\n}\n\nexport interface AdminAPIKeyCreateParams {\n  name: string;\n}\n\nexport interface AdminAPIKeyListParams extends CursorPageParams {\n  /**\n   * Order results by creation time, ascending or descending.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport declare namespace AdminAPIKeys {\n  export {\n    type AdminAPIKey as AdminAPIKey,\n    type AdminAPIKeyCreateResponse as AdminAPIKeyCreateResponse,\n    type AdminAPIKeyDeleteResponse as AdminAPIKeyDeleteResponse,\n    type AdminAPIKeysPage as AdminAPIKeysPage,\n    type AdminAPIKeyCreateParams as AdminAPIKeyCreateParams,\n    type AdminAPIKeyListParams as AdminAPIKeyListParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport {\n  ConversationCursorPage,\n  type ConversationCursorPageParams,\n  PagePromise,\n} from '../../../core/pagination';\nimport { RequestOptions } from '../../../internal/request-options';\n\n/**\n * List user actions and configuration changes within this organization.\n */\nexport class AuditLogs extends APIResource {\n  /**\n   * List user actions and configuration changes within this organization.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const auditLogListResponse of client.admin.organization.auditLogs.list()) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    query: AuditLogListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<AuditLogListResponsesPage, AuditLogListResponse> {\n    return this._client.getAPIList('/organization/audit_logs', ConversationCursorPage<AuditLogListResponse>, {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type AuditLogListResponsesPage = ConversationCursorPage<AuditLogListResponse>;\n\n/**\n * A log of a user action or configuration change within this organization.\n */\nexport interface AuditLogListResponse {\n  /**\n   * The ID of this log.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of the event.\n   */\n  effective_at: number;\n\n  /**\n   * The event type.\n   */\n  type:\n    | 'api_key.created'\n    | 'api_key.updated'\n    | 'api_key.deleted'\n    | 'certificate.created'\n    | 'certificate.updated'\n    | 'certificate.deleted'\n    | 'certificates.activated'\n    | 'certificates.deactivated'\n    | 'checkpoint.permission.created'\n    | 'checkpoint.permission.deleted'\n    | 'external_key.registered'\n    | 'external_key.removed'\n    | 'group.created'\n    | 'group.updated'\n    | 'group.deleted'\n    | 'invite.sent'\n    | 'invite.accepted'\n    | 'invite.deleted'\n    | 'ip_allowlist.created'\n    | 'ip_allowlist.updated'\n    | 'ip_allowlist.deleted'\n    | 'ip_allowlist.config.activated'\n    | 'ip_allowlist.config.deactivated'\n    | 'login.succeeded'\n    | 'login.failed'\n    | 'logout.succeeded'\n    | 'logout.failed'\n    | 'organization.updated'\n    | 'project.created'\n    | 'project.updated'\n    | 'project.archived'\n    | 'project.deleted'\n    | 'rate_limit.updated'\n    | 'rate_limit.deleted'\n    | 'resource.deleted'\n    | 'tunnel.created'\n    | 'tunnel.updated'\n    | 'tunnel.deleted'\n    | 'role.created'\n    | 'role.updated'\n    | 'role.deleted'\n    | 'role.assignment.created'\n    | 'role.assignment.deleted'\n    | 'scim.enabled'\n    | 'scim.disabled'\n    | 'service_account.created'\n    | 'service_account.updated'\n    | 'service_account.deleted'\n    | 'user.added'\n    | 'user.updated'\n    | 'user.deleted';\n\n  /**\n   * The actor who performed the audit logged action.\n   */\n  actor?: AuditLogListResponse.Actor | null;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'api_key.created'?: AuditLogListResponse.APIKeyCreated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'api_key.deleted'?: AuditLogListResponse.APIKeyDeleted;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'api_key.updated'?: AuditLogListResponse.APIKeyUpdated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'certificate.created'?: AuditLogListResponse.CertificateCreated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'certificate.deleted'?: AuditLogListResponse.CertificateDeleted;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'certificate.updated'?: AuditLogListResponse.CertificateUpdated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'certificates.activated'?: AuditLogListResponse.CertificatesActivated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'certificates.deactivated'?: AuditLogListResponse.CertificatesDeactivated;\n\n  /**\n   * The project and fine-tuned model checkpoint that the checkpoint permission was\n   * created for.\n   */\n  'checkpoint.permission.created'?: AuditLogListResponse.CheckpointPermissionCreated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'checkpoint.permission.deleted'?: AuditLogListResponse.CheckpointPermissionDeleted;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'external_key.registered'?: AuditLogListResponse.ExternalKeyRegistered;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'external_key.removed'?: AuditLogListResponse.ExternalKeyRemoved;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'group.created'?: AuditLogListResponse.GroupCreated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'group.deleted'?: AuditLogListResponse.GroupDeleted;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'group.updated'?: AuditLogListResponse.GroupUpdated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'invite.accepted'?: AuditLogListResponse.InviteAccepted;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'invite.deleted'?: AuditLogListResponse.InviteDeleted;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'invite.sent'?: AuditLogListResponse.InviteSent;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'ip_allowlist.config.activated'?: AuditLogListResponse.IPAllowlistConfigActivated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'ip_allowlist.config.deactivated'?: AuditLogListResponse.IPAllowlistConfigDeactivated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'ip_allowlist.created'?: AuditLogListResponse.IPAllowlistCreated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'ip_allowlist.deleted'?: AuditLogListResponse.IPAllowlistDeleted;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'ip_allowlist.updated'?: AuditLogListResponse.IPAllowlistUpdated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'login.failed'?: AuditLogListResponse.LoginFailed;\n\n  /**\n   * This event has no additional fields beyond the standard audit log attributes.\n   */\n  'login.succeeded'?: unknown;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'logout.failed'?: AuditLogListResponse.LogoutFailed;\n\n  /**\n   * This event has no additional fields beyond the standard audit log attributes.\n   */\n  'logout.succeeded'?: unknown;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'organization.updated'?: AuditLogListResponse.OrganizationUpdated;\n\n  /**\n   * The project that the action was scoped to. Absent for actions not scoped to\n   * projects. Note that any admin actions taken via Admin API keys are associated\n   * with the default project.\n   */\n  project?: AuditLogListResponse.Project;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'project.archived'?: AuditLogListResponse.ProjectArchived;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'project.created'?: AuditLogListResponse.ProjectCreated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'project.deleted'?: AuditLogListResponse.ProjectDeleted;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'project.updated'?: AuditLogListResponse.ProjectUpdated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'rate_limit.deleted'?: AuditLogListResponse.RateLimitDeleted;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'rate_limit.updated'?: AuditLogListResponse.RateLimitUpdated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'role.assignment.created'?: AuditLogListResponse.RoleAssignmentCreated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'role.assignment.deleted'?: AuditLogListResponse.RoleAssignmentDeleted;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'role.created'?: AuditLogListResponse.RoleCreated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'role.deleted'?: AuditLogListResponse.RoleDeleted;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'role.updated'?: AuditLogListResponse.RoleUpdated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'scim.disabled'?: AuditLogListResponse.ScimDisabled;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'scim.enabled'?: AuditLogListResponse.ScimEnabled;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'service_account.created'?: AuditLogListResponse.ServiceAccountCreated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'service_account.deleted'?: AuditLogListResponse.ServiceAccountDeleted;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'service_account.updated'?: AuditLogListResponse.ServiceAccountUpdated;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'user.added'?: AuditLogListResponse.UserAdded;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'user.deleted'?: AuditLogListResponse.UserDeleted;\n\n  /**\n   * The details for events with this `type`.\n   */\n  'user.updated'?: AuditLogListResponse.UserUpdated;\n}\n\nexport namespace AuditLogListResponse {\n  /**\n   * The actor who performed the audit logged action.\n   */\n  export interface Actor {\n    /**\n     * The API Key used to perform the audit logged action.\n     */\n    api_key?: Actor.APIKey;\n\n    /**\n     * The session in which the audit logged action was performed.\n     */\n    session?: Actor.Session;\n\n    /**\n     * The type of actor. Is either `session` or `api_key`.\n     */\n    type?: 'session' | 'api_key';\n  }\n\n  export namespace Actor {\n    /**\n     * The API Key used to perform the audit logged action.\n     */\n    export interface APIKey {\n      /**\n       * The tracking id of the API key.\n       */\n      id?: string;\n\n      /**\n       * The service account that performed the audit logged action.\n       */\n      service_account?: APIKey.ServiceAccount;\n\n      /**\n       * The type of API key. Can be either `user` or `service_account`.\n       */\n      type?: 'user' | 'service_account';\n\n      /**\n       * The user who performed the audit logged action.\n       */\n      user?: APIKey.User;\n    }\n\n    export namespace APIKey {\n      /**\n       * The service account that performed the audit logged action.\n       */\n      export interface ServiceAccount {\n        /**\n         * The service account id.\n         */\n        id?: string;\n      }\n\n      /**\n       * The user who performed the audit logged action.\n       */\n      export interface User {\n        /**\n         * The user id.\n         */\n        id?: string;\n\n        /**\n         * The user email.\n         */\n        email?: string;\n      }\n    }\n\n    /**\n     * The session in which the audit logged action was performed.\n     */\n    export interface Session {\n      /**\n       * The IP address from which the action was performed.\n       */\n      ip_address?: string;\n\n      /**\n       * The user who performed the audit logged action.\n       */\n      user?: Session.User;\n    }\n\n    export namespace Session {\n      /**\n       * The user who performed the audit logged action.\n       */\n      export interface User {\n        /**\n         * The user id.\n         */\n        id?: string;\n\n        /**\n         * The user email.\n         */\n        email?: string;\n      }\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface APIKeyCreated {\n    /**\n     * The tracking ID of the API key.\n     */\n    id?: string;\n\n    /**\n     * The payload used to create the API key.\n     */\n    data?: APIKeyCreated.Data;\n  }\n\n  export namespace APIKeyCreated {\n    /**\n     * The payload used to create the API key.\n     */\n    export interface Data {\n      /**\n       * A list of scopes allowed for the API key, e.g. `[\"api.model.request\"]`\n       */\n      scopes?: Array<string>;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface APIKeyDeleted {\n    /**\n     * The tracking ID of the API key.\n     */\n    id?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface APIKeyUpdated {\n    /**\n     * The tracking ID of the API key.\n     */\n    id?: string;\n\n    /**\n     * The payload used to update the API key.\n     */\n    changes_requested?: APIKeyUpdated.ChangesRequested;\n  }\n\n  export namespace APIKeyUpdated {\n    /**\n     * The payload used to update the API key.\n     */\n    export interface ChangesRequested {\n      /**\n       * A list of scopes allowed for the API key, e.g. `[\"api.model.request\"]`\n       */\n      scopes?: Array<string>;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface CertificateCreated {\n    /**\n     * The certificate ID.\n     */\n    id?: string;\n\n    /**\n     * The name of the certificate.\n     */\n    name?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface CertificateDeleted {\n    /**\n     * The certificate ID.\n     */\n    id?: string;\n\n    /**\n     * The certificate content in PEM format.\n     */\n    certificate?: string;\n\n    /**\n     * The name of the certificate.\n     */\n    name?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface CertificateUpdated {\n    /**\n     * The certificate ID.\n     */\n    id?: string;\n\n    /**\n     * The name of the certificate.\n     */\n    name?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface CertificatesActivated {\n    certificates?: Array<CertificatesActivated.Certificate>;\n  }\n\n  export namespace CertificatesActivated {\n    export interface Certificate {\n      /**\n       * The certificate ID.\n       */\n      id?: string;\n\n      /**\n       * The name of the certificate.\n       */\n      name?: string;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface CertificatesDeactivated {\n    certificates?: Array<CertificatesDeactivated.Certificate>;\n  }\n\n  export namespace CertificatesDeactivated {\n    export interface Certificate {\n      /**\n       * The certificate ID.\n       */\n      id?: string;\n\n      /**\n       * The name of the certificate.\n       */\n      name?: string;\n    }\n  }\n\n  /**\n   * The project and fine-tuned model checkpoint that the checkpoint permission was\n   * created for.\n   */\n  export interface CheckpointPermissionCreated {\n    /**\n     * The ID of the checkpoint permission.\n     */\n    id?: string;\n\n    /**\n     * The payload used to create the checkpoint permission.\n     */\n    data?: CheckpointPermissionCreated.Data;\n  }\n\n  export namespace CheckpointPermissionCreated {\n    /**\n     * The payload used to create the checkpoint permission.\n     */\n    export interface Data {\n      /**\n       * The ID of the fine-tuned model checkpoint.\n       */\n      fine_tuned_model_checkpoint?: string;\n\n      /**\n       * The ID of the project that the checkpoint permission was created for.\n       */\n      project_id?: string;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface CheckpointPermissionDeleted {\n    /**\n     * The ID of the checkpoint permission.\n     */\n    id?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface ExternalKeyRegistered {\n    /**\n     * The ID of the external key configuration.\n     */\n    id?: string;\n\n    /**\n     * The configuration for the external key.\n     */\n    data?: unknown;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface ExternalKeyRemoved {\n    /**\n     * The ID of the external key configuration.\n     */\n    id?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface GroupCreated {\n    /**\n     * The ID of the group.\n     */\n    id?: string;\n\n    /**\n     * Information about the created group.\n     */\n    data?: GroupCreated.Data;\n  }\n\n  export namespace GroupCreated {\n    /**\n     * Information about the created group.\n     */\n    export interface Data {\n      /**\n       * The group name.\n       */\n      group_name?: string;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface GroupDeleted {\n    /**\n     * The ID of the group.\n     */\n    id?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface GroupUpdated {\n    /**\n     * The ID of the group.\n     */\n    id?: string;\n\n    /**\n     * The payload used to update the group.\n     */\n    changes_requested?: GroupUpdated.ChangesRequested;\n  }\n\n  export namespace GroupUpdated {\n    /**\n     * The payload used to update the group.\n     */\n    export interface ChangesRequested {\n      /**\n       * The updated group name.\n       */\n      group_name?: string;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface InviteAccepted {\n    /**\n     * The ID of the invite.\n     */\n    id?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface InviteDeleted {\n    /**\n     * The ID of the invite.\n     */\n    id?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface InviteSent {\n    /**\n     * The ID of the invite.\n     */\n    id?: string;\n\n    /**\n     * The payload used to create the invite.\n     */\n    data?: InviteSent.Data;\n  }\n\n  export namespace InviteSent {\n    /**\n     * The payload used to create the invite.\n     */\n    export interface Data {\n      /**\n       * The email invited to the organization.\n       */\n      email?: string;\n\n      /**\n       * The role the email was invited to be. Is either `owner` or `member`.\n       */\n      role?: string;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface IPAllowlistConfigActivated {\n    /**\n     * The configurations that were activated.\n     */\n    configs?: Array<IPAllowlistConfigActivated.Config>;\n  }\n\n  export namespace IPAllowlistConfigActivated {\n    export interface Config {\n      /**\n       * The ID of the IP allowlist configuration.\n       */\n      id?: string;\n\n      /**\n       * The name of the IP allowlist configuration.\n       */\n      name?: string;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface IPAllowlistConfigDeactivated {\n    /**\n     * The configurations that were deactivated.\n     */\n    configs?: Array<IPAllowlistConfigDeactivated.Config>;\n  }\n\n  export namespace IPAllowlistConfigDeactivated {\n    export interface Config {\n      /**\n       * The ID of the IP allowlist configuration.\n       */\n      id?: string;\n\n      /**\n       * The name of the IP allowlist configuration.\n       */\n      name?: string;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface IPAllowlistCreated {\n    /**\n     * The ID of the IP allowlist configuration.\n     */\n    id?: string;\n\n    /**\n     * The IP addresses or CIDR ranges included in the configuration.\n     */\n    allowed_ips?: Array<string>;\n\n    /**\n     * The name of the IP allowlist configuration.\n     */\n    name?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface IPAllowlistDeleted {\n    /**\n     * The ID of the IP allowlist configuration.\n     */\n    id?: string;\n\n    /**\n     * The IP addresses or CIDR ranges that were in the configuration.\n     */\n    allowed_ips?: Array<string>;\n\n    /**\n     * The name of the IP allowlist configuration.\n     */\n    name?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface IPAllowlistUpdated {\n    /**\n     * The ID of the IP allowlist configuration.\n     */\n    id?: string;\n\n    /**\n     * The updated set of IP addresses or CIDR ranges in the configuration.\n     */\n    allowed_ips?: Array<string>;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface LoginFailed {\n    /**\n     * The error code of the failure.\n     */\n    error_code?: string;\n\n    /**\n     * The error message of the failure.\n     */\n    error_message?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface LogoutFailed {\n    /**\n     * The error code of the failure.\n     */\n    error_code?: string;\n\n    /**\n     * The error message of the failure.\n     */\n    error_message?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface OrganizationUpdated {\n    /**\n     * The organization ID.\n     */\n    id?: string;\n\n    /**\n     * The payload used to update the organization settings.\n     */\n    changes_requested?: OrganizationUpdated.ChangesRequested;\n  }\n\n  export namespace OrganizationUpdated {\n    /**\n     * The payload used to update the organization settings.\n     */\n    export interface ChangesRequested {\n      /**\n       * How your organization logs data from supported API calls. One of `disabled`,\n       * `enabled_per_call`, `enabled_for_all_projects`, or\n       * `enabled_for_selected_projects`\n       */\n      api_call_logging?: string;\n\n      /**\n       * The list of project ids if api_call_logging is set to\n       * `enabled_for_selected_projects`\n       */\n      api_call_logging_project_ids?: string;\n\n      /**\n       * The organization description.\n       */\n      description?: string;\n\n      /**\n       * The organization name.\n       */\n      name?: string;\n\n      /**\n       * Visibility of the threads page which shows messages created with the Assistants\n       * API and Playground. One of `ANY_ROLE`, `OWNERS`, or `NONE`.\n       */\n      threads_ui_visibility?: string;\n\n      /**\n       * The organization title.\n       */\n      title?: string;\n\n      /**\n       * Visibility of the usage dashboard which shows activity and costs for your\n       * organization. One of `ANY_ROLE` or `OWNERS`.\n       */\n      usage_dashboard_visibility?: string;\n    }\n  }\n\n  /**\n   * The project that the action was scoped to. Absent for actions not scoped to\n   * projects. Note that any admin actions taken via Admin API keys are associated\n   * with the default project.\n   */\n  export interface Project {\n    /**\n     * The project ID.\n     */\n    id?: string;\n\n    /**\n     * The project title.\n     */\n    name?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface ProjectArchived {\n    /**\n     * The project ID.\n     */\n    id?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface ProjectCreated {\n    /**\n     * The project ID.\n     */\n    id?: string;\n\n    /**\n     * The payload used to create the project.\n     */\n    data?: ProjectCreated.Data;\n  }\n\n  export namespace ProjectCreated {\n    /**\n     * The payload used to create the project.\n     */\n    export interface Data {\n      /**\n       * The project name.\n       */\n      name?: string;\n\n      /**\n       * The title of the project as seen on the dashboard.\n       */\n      title?: string;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface ProjectDeleted {\n    /**\n     * The project ID.\n     */\n    id?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface ProjectUpdated {\n    /**\n     * The project ID.\n     */\n    id?: string;\n\n    /**\n     * The payload used to update the project.\n     */\n    changes_requested?: ProjectUpdated.ChangesRequested;\n  }\n\n  export namespace ProjectUpdated {\n    /**\n     * The payload used to update the project.\n     */\n    export interface ChangesRequested {\n      /**\n       * The title of the project as seen on the dashboard.\n       */\n      title?: string;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface RateLimitDeleted {\n    /**\n     * The rate limit ID\n     */\n    id?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface RateLimitUpdated {\n    /**\n     * The rate limit ID\n     */\n    id?: string;\n\n    /**\n     * The payload used to update the rate limits.\n     */\n    changes_requested?: RateLimitUpdated.ChangesRequested;\n  }\n\n  export namespace RateLimitUpdated {\n    /**\n     * The payload used to update the rate limits.\n     */\n    export interface ChangesRequested {\n      /**\n       * The maximum batch input tokens per day. Only relevant for certain models.\n       */\n      batch_1_day_max_input_tokens?: number;\n\n      /**\n       * The maximum audio megabytes per minute. Only relevant for certain models.\n       */\n      max_audio_megabytes_per_1_minute?: number;\n\n      /**\n       * The maximum images per minute. Only relevant for certain models.\n       */\n      max_images_per_1_minute?: number;\n\n      /**\n       * The maximum requests per day. Only relevant for certain models.\n       */\n      max_requests_per_1_day?: number;\n\n      /**\n       * The maximum requests per minute.\n       */\n      max_requests_per_1_minute?: number;\n\n      /**\n       * The maximum tokens per minute.\n       */\n      max_tokens_per_1_minute?: number;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface RoleAssignmentCreated {\n    /**\n     * The identifier of the role assignment.\n     */\n    id?: string;\n\n    /**\n     * The principal (user or group) that received the role.\n     */\n    principal_id?: string;\n\n    /**\n     * The type of principal (user or group) that received the role.\n     */\n    principal_type?: string;\n\n    /**\n     * The resource the role assignment is scoped to.\n     */\n    resource_id?: string;\n\n    /**\n     * The type of resource the role assignment is scoped to.\n     */\n    resource_type?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface RoleAssignmentDeleted {\n    /**\n     * The identifier of the role assignment.\n     */\n    id?: string;\n\n    /**\n     * The principal (user or group) that had the role removed.\n     */\n    principal_id?: string;\n\n    /**\n     * The type of principal (user or group) that had the role removed.\n     */\n    principal_type?: string;\n\n    /**\n     * The resource the role assignment was scoped to.\n     */\n    resource_id?: string;\n\n    /**\n     * The type of resource the role assignment was scoped to.\n     */\n    resource_type?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface RoleCreated {\n    /**\n     * The role ID.\n     */\n    id?: string;\n\n    /**\n     * The permissions granted by the role.\n     */\n    permissions?: Array<string>;\n\n    /**\n     * The resource the role is scoped to.\n     */\n    resource_id?: string;\n\n    /**\n     * The type of resource the role belongs to.\n     */\n    resource_type?: string;\n\n    /**\n     * The name of the role.\n     */\n    role_name?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface RoleDeleted {\n    /**\n     * The role ID.\n     */\n    id?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface RoleUpdated {\n    /**\n     * The role ID.\n     */\n    id?: string;\n\n    /**\n     * The payload used to update the role.\n     */\n    changes_requested?: RoleUpdated.ChangesRequested;\n  }\n\n  export namespace RoleUpdated {\n    /**\n     * The payload used to update the role.\n     */\n    export interface ChangesRequested {\n      /**\n       * The updated role description, when provided.\n       */\n      description?: string;\n\n      /**\n       * Additional metadata stored on the role.\n       */\n      metadata?: unknown;\n\n      /**\n       * The permissions added to the role.\n       */\n      permissions_added?: Array<string>;\n\n      /**\n       * The permissions removed from the role.\n       */\n      permissions_removed?: Array<string>;\n\n      /**\n       * The resource the role is scoped to.\n       */\n      resource_id?: string;\n\n      /**\n       * The type of resource the role belongs to.\n       */\n      resource_type?: string;\n\n      /**\n       * The updated role name, when provided.\n       */\n      role_name?: string;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface ScimDisabled {\n    /**\n     * The ID of the SCIM was disabled for.\n     */\n    id?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface ScimEnabled {\n    /**\n     * The ID of the SCIM was enabled for.\n     */\n    id?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface ServiceAccountCreated {\n    /**\n     * The service account ID.\n     */\n    id?: string;\n\n    /**\n     * The payload used to create the service account.\n     */\n    data?: ServiceAccountCreated.Data;\n  }\n\n  export namespace ServiceAccountCreated {\n    /**\n     * The payload used to create the service account.\n     */\n    export interface Data {\n      /**\n       * The role of the service account. Is either `owner` or `member`.\n       */\n      role?: string;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface ServiceAccountDeleted {\n    /**\n     * The service account ID.\n     */\n    id?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface ServiceAccountUpdated {\n    /**\n     * The service account ID.\n     */\n    id?: string;\n\n    /**\n     * The payload used to updated the service account.\n     */\n    changes_requested?: ServiceAccountUpdated.ChangesRequested;\n  }\n\n  export namespace ServiceAccountUpdated {\n    /**\n     * The payload used to updated the service account.\n     */\n    export interface ChangesRequested {\n      /**\n       * The role of the service account. Is either `owner` or `member`.\n       */\n      role?: string;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface UserAdded {\n    /**\n     * The user ID.\n     */\n    id?: string;\n\n    /**\n     * The payload used to add the user to the project.\n     */\n    data?: UserAdded.Data;\n  }\n\n  export namespace UserAdded {\n    /**\n     * The payload used to add the user to the project.\n     */\n    export interface Data {\n      /**\n       * The role of the user. Is either `owner` or `member`.\n       */\n      role?: string;\n    }\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface UserDeleted {\n    /**\n     * The user ID.\n     */\n    id?: string;\n  }\n\n  /**\n   * The details for events with this `type`.\n   */\n  export interface UserUpdated {\n    /**\n     * The project ID.\n     */\n    id?: string;\n\n    /**\n     * The payload used to update the user.\n     */\n    changes_requested?: UserUpdated.ChangesRequested;\n  }\n\n  export namespace UserUpdated {\n    /**\n     * The payload used to update the user.\n     */\n    export interface ChangesRequested {\n      /**\n       * The role of the user. Is either `owner` or `member`.\n       */\n      role?: string;\n    }\n  }\n}\n\nexport interface AuditLogListParams extends ConversationCursorPageParams {\n  /**\n   * Return only events performed by users with these emails.\n   */\n  actor_emails?: Array<string>;\n\n  /**\n   * Return only events performed by these actors. Can be a user ID, a service\n   * account ID, or an api key tracking ID.\n   */\n  actor_ids?: Array<string>;\n\n  /**\n   * A cursor for use in pagination. `before` is an object ID that defines your place\n   * in the list. For instance, if you make a list request and receive 100 objects,\n   * starting with obj_foo, your subsequent call can include before=obj_foo in order\n   * to fetch the previous page of the list.\n   */\n  before?: string;\n\n  /**\n   * Return only events whose `effective_at` (Unix seconds) is in this range.\n   */\n  effective_at?: AuditLogListParams.EffectiveAt;\n\n  /**\n   * Return only events with a `type` in one of these values. For example,\n   * `project.created`. For all options, see the documentation for the\n   * [audit log object](https://platform.openai.com/docs/api-reference/audit-logs/object).\n   */\n  event_types?: Array<\n    | 'api_key.created'\n    | 'api_key.updated'\n    | 'api_key.deleted'\n    | 'certificate.created'\n    | 'certificate.updated'\n    | 'certificate.deleted'\n    | 'certificates.activated'\n    | 'certificates.deactivated'\n    | 'checkpoint.permission.created'\n    | 'checkpoint.permission.deleted'\n    | 'external_key.registered'\n    | 'external_key.removed'\n    | 'group.created'\n    | 'group.updated'\n    | 'group.deleted'\n    | 'invite.sent'\n    | 'invite.accepted'\n    | 'invite.deleted'\n    | 'ip_allowlist.created'\n    | 'ip_allowlist.updated'\n    | 'ip_allowlist.deleted'\n    | 'ip_allowlist.config.activated'\n    | 'ip_allowlist.config.deactivated'\n    | 'login.succeeded'\n    | 'login.failed'\n    | 'logout.succeeded'\n    | 'logout.failed'\n    | 'organization.updated'\n    | 'project.created'\n    | 'project.updated'\n    | 'project.archived'\n    | 'project.deleted'\n    | 'rate_limit.updated'\n    | 'rate_limit.deleted'\n    | 'resource.deleted'\n    | 'tunnel.created'\n    | 'tunnel.updated'\n    | 'tunnel.deleted'\n    | 'role.created'\n    | 'role.updated'\n    | 'role.deleted'\n    | 'role.assignment.created'\n    | 'role.assignment.deleted'\n    | 'scim.enabled'\n    | 'scim.disabled'\n    | 'service_account.created'\n    | 'service_account.updated'\n    | 'service_account.deleted'\n    | 'user.added'\n    | 'user.updated'\n    | 'user.deleted'\n  >;\n\n  /**\n   * Return only events for these projects.\n   */\n  project_ids?: Array<string>;\n\n  /**\n   * Return only events performed on these targets. For example, a project ID\n   * updated.\n   */\n  resource_ids?: Array<string>;\n}\n\nexport namespace AuditLogListParams {\n  /**\n   * Return only events whose `effective_at` (Unix seconds) is in this range.\n   */\n  export interface EffectiveAt {\n    /**\n     * Return only events whose `effective_at` (Unix seconds) is greater than this\n     * value.\n     */\n    gt?: number;\n\n    /**\n     * Return only events whose `effective_at` (Unix seconds) is greater than or equal\n     * to this value.\n     */\n    gte?: number;\n\n    /**\n     * Return only events whose `effective_at` (Unix seconds) is less than this value.\n     */\n    lt?: number;\n\n    /**\n     * Return only events whose `effective_at` (Unix seconds) is less than or equal to\n     * this value.\n     */\n    lte?: number;\n  }\n}\n\nexport declare namespace AuditLogs {\n  export {\n    type AuditLogListResponse as AuditLogListResponse,\n    type AuditLogListResponsesPage as AuditLogListResponsesPage,\n    type AuditLogListParams as AuditLogListParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport { APIPromise } from '../../../core/api-promise';\nimport {\n  ConversationCursorPage,\n  type ConversationCursorPageParams,\n  Page,\n  PagePromise,\n} from '../../../core/pagination';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\nexport class Certificates extends APIResource {\n  /**\n   * Upload a certificate to the organization. This does **not** automatically\n   * activate the certificate.\n   *\n   * Organizations can upload up to 50 certificates.\n   *\n   * @example\n   * ```ts\n   * const certificate =\n   *   await client.admin.organization.certificates.create({\n   *     certificate: 'certificate',\n   *   });\n   * ```\n   */\n  create(body: CertificateCreateParams, options?: RequestOptions): APIPromise<Certificate> {\n    return this._client.post('/organization/certificates', {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Get a certificate that has been uploaded to the organization.\n   *\n   * You can get a certificate regardless of whether it is active or not.\n   *\n   * @example\n   * ```ts\n   * const certificate =\n   *   await client.admin.organization.certificates.retrieve(\n   *     'certificate_id',\n   *   );\n   * ```\n   */\n  retrieve(\n    certificateID: string,\n    query: CertificateRetrieveParams | null | undefined = {},\n    options?: RequestOptions,\n  ): APIPromise<Certificate> {\n    return this._client.get(path`/organization/certificates/${certificateID}`, {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Modify a certificate. Note that only the name can be modified.\n   *\n   * @example\n   * ```ts\n   * const certificate =\n   *   await client.admin.organization.certificates.update(\n   *     'certificate_id',\n   *   );\n   * ```\n   */\n  update(\n    certificateID: string,\n    body: CertificateUpdateParams,\n    options?: RequestOptions,\n  ): APIPromise<Certificate> {\n    return this._client.post(path`/organization/certificates/${certificateID}`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * List uploaded certificates for this organization.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const certificateListResponse of client.admin.organization.certificates.list()) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    query: CertificateListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<CertificateListResponsesPage, CertificateListResponse> {\n    return this._client.getAPIList(\n      '/organization/certificates',\n      ConversationCursorPage<CertificateListResponse>,\n      { query, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Delete a certificate from the organization.\n   *\n   * The certificate must be inactive for the organization and all projects.\n   *\n   * @example\n   * ```ts\n   * const certificate =\n   *   await client.admin.organization.certificates.delete(\n   *     'certificate_id',\n   *   );\n   * ```\n   */\n  delete(certificateID: string, options?: RequestOptions): APIPromise<CertificateDeleteResponse> {\n    return this._client.delete(path`/organization/certificates/${certificateID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Activate certificates at the organization level.\n   *\n   * You can atomically and idempotently activate up to 10 certificates at a time.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const certificateActivateResponse of client.admin.organization.certificates.activate(\n   *   { certificate_ids: ['cert_abc'] },\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  activate(\n    body: CertificateActivateParams,\n    options?: RequestOptions,\n  ): PagePromise<CertificateActivateResponsesPage, CertificateActivateResponse> {\n    return this._client.getAPIList('/organization/certificates/activate', Page<CertificateActivateResponse>, {\n      body,\n      method: 'post',\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Deactivate certificates at the organization level.\n   *\n   * You can atomically and idempotently deactivate up to 10 certificates at a time.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const certificateDeactivateResponse of client.admin.organization.certificates.deactivate(\n   *   { certificate_ids: ['cert_abc'] },\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  deactivate(\n    body: CertificateDeactivateParams,\n    options?: RequestOptions,\n  ): PagePromise<CertificateDeactivateResponsesPage, CertificateDeactivateResponse> {\n    return this._client.getAPIList(\n      '/organization/certificates/deactivate',\n      Page<CertificateDeactivateResponse>,\n      { body, method: 'post', ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n}\n\nexport type CertificateListResponsesPage = ConversationCursorPage<CertificateListResponse>;\n\n// Note: no pagination actually occurs yet, this is for forwards-compatibility.\nexport type CertificateActivateResponsesPage = Page<CertificateActivateResponse>;\n\n// Note: no pagination actually occurs yet, this is for forwards-compatibility.\nexport type CertificateDeactivateResponsesPage = Page<CertificateDeactivateResponse>;\n\n/**\n * Represents an individual `certificate` uploaded to the organization.\n */\nexport interface Certificate {\n  /**\n   * The identifier, which can be referenced in API endpoints\n   */\n  id: string;\n\n  certificate_details: Certificate.CertificateDetails;\n\n  /**\n   * The Unix timestamp (in seconds) of when the certificate was uploaded.\n   */\n  created_at: number;\n\n  /**\n   * The name of the certificate.\n   */\n  name: string | null;\n\n  /**\n   * The object type.\n   *\n   * - If creating, updating, or getting a specific certificate, the object type is\n   *   `certificate`.\n   * - If listing, activating, or deactivating certificates for the organization, the\n   *   object type is `organization.certificate`.\n   * - If listing, activating, or deactivating certificates for a project, the object\n   *   type is `organization.project.certificate`.\n   */\n  object: 'certificate' | 'organization.certificate' | 'organization.project.certificate';\n\n  /**\n   * Whether the certificate is currently active at the specified scope. Not returned\n   * when getting details for a specific certificate.\n   */\n  active?: boolean;\n}\n\nexport namespace Certificate {\n  export interface CertificateDetails {\n    /**\n     * The content of the certificate in PEM format.\n     */\n    content?: string;\n\n    /**\n     * The Unix timestamp (in seconds) of when the certificate expires.\n     */\n    expires_at?: number;\n\n    /**\n     * The Unix timestamp (in seconds) of when the certificate becomes valid.\n     */\n    valid_at?: number;\n  }\n}\n\n/**\n * Represents an individual certificate configured at the organization level.\n */\nexport interface CertificateListResponse {\n  /**\n   * The identifier, which can be referenced in API endpoints\n   */\n  id: string;\n\n  /**\n   * Whether the certificate is currently active at the organization level.\n   */\n  active: boolean;\n\n  certificate_details: CertificateListResponse.CertificateDetails;\n\n  /**\n   * The Unix timestamp (in seconds) of when the certificate was uploaded.\n   */\n  created_at: number;\n\n  /**\n   * The name of the certificate.\n   */\n  name: string | null;\n\n  /**\n   * The object type, which is always `organization.certificate`.\n   */\n  object: 'organization.certificate';\n}\n\nexport namespace CertificateListResponse {\n  export interface CertificateDetails {\n    /**\n     * The Unix timestamp (in seconds) of when the certificate expires.\n     */\n    expires_at?: number;\n\n    /**\n     * The Unix timestamp (in seconds) of when the certificate becomes valid.\n     */\n    valid_at?: number;\n  }\n}\n\nexport interface CertificateDeleteResponse {\n  /**\n   * The ID of the certificate that was deleted.\n   */\n  id: string;\n\n  /**\n   * The object type, must be `certificate.deleted`.\n   */\n  object: 'certificate.deleted';\n}\n\n/**\n * Represents an individual certificate configured at the organization level.\n */\nexport interface CertificateActivateResponse {\n  /**\n   * The identifier, which can be referenced in API endpoints\n   */\n  id: string;\n\n  /**\n   * Whether the certificate is currently active at the organization level.\n   */\n  active: boolean;\n\n  certificate_details: CertificateActivateResponse.CertificateDetails;\n\n  /**\n   * The Unix timestamp (in seconds) of when the certificate was uploaded.\n   */\n  created_at: number;\n\n  /**\n   * The name of the certificate.\n   */\n  name: string | null;\n\n  /**\n   * The object type, which is always `organization.certificate`.\n   */\n  object: 'organization.certificate';\n}\n\nexport namespace CertificateActivateResponse {\n  export interface CertificateDetails {\n    /**\n     * The Unix timestamp (in seconds) of when the certificate expires.\n     */\n    expires_at?: number;\n\n    /**\n     * The Unix timestamp (in seconds) of when the certificate becomes valid.\n     */\n    valid_at?: number;\n  }\n}\n\n/**\n * Represents an individual certificate configured at the organization level.\n */\nexport interface CertificateDeactivateResponse {\n  /**\n   * The identifier, which can be referenced in API endpoints\n   */\n  id: string;\n\n  /**\n   * Whether the certificate is currently active at the organization level.\n   */\n  active: boolean;\n\n  certificate_details: CertificateDeactivateResponse.CertificateDetails;\n\n  /**\n   * The Unix timestamp (in seconds) of when the certificate was uploaded.\n   */\n  created_at: number;\n\n  /**\n   * The name of the certificate.\n   */\n  name: string | null;\n\n  /**\n   * The object type, which is always `organization.certificate`.\n   */\n  object: 'organization.certificate';\n}\n\nexport namespace CertificateDeactivateResponse {\n  export interface CertificateDetails {\n    /**\n     * The Unix timestamp (in seconds) of when the certificate expires.\n     */\n    expires_at?: number;\n\n    /**\n     * The Unix timestamp (in seconds) of when the certificate becomes valid.\n     */\n    valid_at?: number;\n  }\n}\n\nexport interface CertificateCreateParams {\n  /**\n   * The certificate content in PEM format\n   */\n  certificate: string;\n\n  /**\n   * An optional name for the certificate\n   */\n  name?: string;\n}\n\nexport interface CertificateRetrieveParams {\n  /**\n   * A list of additional fields to include in the response. Currently the only\n   * supported value is `content` to fetch the PEM content of the certificate.\n   */\n  include?: Array<'content'>;\n}\n\nexport interface CertificateUpdateParams {\n  /**\n   * The updated name for the certificate\n   */\n  name?: string;\n}\n\nexport interface CertificateListParams extends ConversationCursorPageParams {\n  /**\n   * Sort order by the `created_at` timestamp of the objects. `asc` for ascending\n   * order and `desc` for descending order.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface CertificateActivateParams {\n  certificate_ids: Array<string>;\n}\n\nexport interface CertificateDeactivateParams {\n  certificate_ids: Array<string>;\n}\n\nexport declare namespace Certificates {\n  export {\n    type Certificate as Certificate,\n    type CertificateListResponse as CertificateListResponse,\n    type CertificateDeleteResponse as CertificateDeleteResponse,\n    type CertificateActivateResponse as CertificateActivateResponse,\n    type CertificateDeactivateResponse as CertificateDeactivateResponse,\n    type CertificateListResponsesPage as CertificateListResponsesPage,\n    type CertificateActivateResponsesPage as CertificateActivateResponsesPage,\n    type CertificateDeactivateResponsesPage as CertificateDeactivateResponsesPage,\n    type CertificateCreateParams as CertificateCreateParams,\n    type CertificateRetrieveParams as CertificateRetrieveParams,\n    type CertificateUpdateParams as CertificateUpdateParams,\n    type CertificateListParams as CertificateListParams,\n    type CertificateActivateParams as CertificateActivateParams,\n    type CertificateDeactivateParams as CertificateDeactivateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport { APIPromise } from '../../../core/api-promise';\nimport { RequestOptions } from '../../../internal/request-options';\n\nexport class DataRetention extends APIResource {\n  /**\n   * Retrieves organization data retention controls.\n   *\n   * @example\n   * ```ts\n   * const organizationDataRetention =\n   *   await client.admin.organization.dataRetention.retrieve();\n   * ```\n   */\n  retrieve(options?: RequestOptions): APIPromise<OrganizationDataRetention> {\n    return this._client.get('/organization/data_retention', {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Updates organization data retention controls.\n   *\n   * @example\n   * ```ts\n   * const organizationDataRetention =\n   *   await client.admin.organization.dataRetention.update({\n   *     retention_type: 'zero_data_retention',\n   *   });\n   * ```\n   */\n  update(body: DataRetentionUpdateParams, options?: RequestOptions): APIPromise<OrganizationDataRetention> {\n    return this._client.post('/organization/data_retention', {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\n/**\n * Represents the organization's data retention control setting.\n */\nexport interface OrganizationDataRetention {\n  /**\n   * The object type, which is always `organization.data_retention`.\n   */\n  object: 'organization.data_retention';\n\n  /**\n   * The configured organization data retention type.\n   */\n  type:\n    | 'zero_data_retention'\n    | 'modified_abuse_monitoring'\n    | 'enhanced_zero_data_retention'\n    | 'enhanced_modified_abuse_monitoring';\n}\n\nexport interface DataRetentionUpdateParams {\n  /**\n   * The desired organization data retention type.\n   */\n  retention_type:\n    | 'zero_data_retention'\n    | 'modified_abuse_monitoring'\n    | 'enhanced_zero_data_retention'\n    | 'enhanced_modified_abuse_monitoring';\n}\n\nexport declare namespace DataRetention {\n  export {\n    type OrganizationDataRetention as OrganizationDataRetention,\n    type DataRetentionUpdateParams as DataRetentionUpdateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport { APIPromise } from '../../../core/api-promise';\nimport {\n  ConversationCursorPage,\n  type ConversationCursorPageParams,\n  PagePromise,\n} from '../../../core/pagination';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\nexport class Invites extends APIResource {\n  /**\n   * Create an invite for a user to the organization. The invite must be accepted by\n   * the user before they have access to the organization.\n   *\n   * @example\n   * ```ts\n   * const invite =\n   *   await client.admin.organization.invites.create({\n   *     email: 'email',\n   *     role: 'reader',\n   *   });\n   * ```\n   */\n  create(body: InviteCreateParams, options?: RequestOptions): APIPromise<Invite> {\n    return this._client.post('/organization/invites', {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves an invite.\n   *\n   * @example\n   * ```ts\n   * const invite =\n   *   await client.admin.organization.invites.retrieve(\n   *     'invite_id',\n   *   );\n   * ```\n   */\n  retrieve(inviteID: string, options?: RequestOptions): APIPromise<Invite> {\n    return this._client.get(path`/organization/invites/${inviteID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Returns a list of invites in the organization.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const invite of client.admin.organization.invites.list()) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    query: InviteListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<InvitesPage, Invite> {\n    return this._client.getAPIList('/organization/invites', ConversationCursorPage<Invite>, {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Delete an invite. If the invite has already been accepted, it cannot be deleted.\n   *\n   * @example\n   * ```ts\n   * const invite =\n   *   await client.admin.organization.invites.delete(\n   *     'invite_id',\n   *   );\n   * ```\n   */\n  delete(inviteID: string, options?: RequestOptions): APIPromise<InviteDeleteResponse> {\n    return this._client.delete(path`/organization/invites/${inviteID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type InvitesPage = ConversationCursorPage<Invite>;\n\n/**\n * Represents an individual `invite` to the organization.\n */\nexport interface Invite {\n  /**\n   * The identifier, which can be referenced in API endpoints\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the invite was sent.\n   */\n  created_at: number;\n\n  /**\n   * The email address of the individual to whom the invite was sent\n   */\n  email: string;\n\n  /**\n   * The object type, which is always `organization.invite`\n   */\n  object: 'organization.invite';\n\n  /**\n   * The projects that were granted membership upon acceptance of the invite.\n   */\n  projects: Array<Invite.Project>;\n\n  /**\n   * `owner` or `reader`\n   */\n  role: 'owner' | 'reader';\n\n  /**\n   * `accepted`,`expired`, or `pending`\n   */\n  status: 'accepted' | 'expired' | 'pending';\n\n  /**\n   * The Unix timestamp (in seconds) of when the invite was accepted.\n   */\n  accepted_at?: number | null;\n\n  /**\n   * The Unix timestamp (in seconds) of when the invite expires.\n   */\n  expires_at?: number | null;\n}\n\nexport namespace Invite {\n  export interface Project {\n    /**\n     * Project's public ID\n     */\n    id: string;\n\n    /**\n     * Project membership role\n     */\n    role: 'member' | 'owner';\n  }\n}\n\nexport interface InviteDeleteResponse {\n  id: string;\n\n  deleted: boolean;\n\n  /**\n   * The object type, which is always `organization.invite.deleted`\n   */\n  object: 'organization.invite.deleted';\n}\n\nexport interface InviteCreateParams {\n  /**\n   * Send an email to this address\n   */\n  email: string;\n\n  /**\n   * `owner` or `reader`\n   */\n  role: 'reader' | 'owner';\n\n  /**\n   * An array of projects to which membership is granted at the same time the org\n   * invite is accepted. If omitted, the user will be invited to the default project\n   * for compatibility with legacy behavior. If empty list is passed, the user will\n   * not be invited to any projects, including the default one.\n   */\n  projects?: Array<InviteCreateParams.Project>;\n}\n\nexport namespace InviteCreateParams {\n  export interface Project {\n    /**\n     * Project's public ID\n     */\n    id: string;\n\n    /**\n     * Project membership role\n     */\n    role: 'member' | 'owner';\n  }\n}\n\nexport interface InviteListParams extends ConversationCursorPageParams {}\n\nexport declare namespace Invites {\n  export {\n    type Invite as Invite,\n    type InviteDeleteResponse as InviteDeleteResponse,\n    type InvitesPage as InvitesPage,\n    type InviteCreateParams as InviteCreateParams,\n    type InviteListParams as InviteListParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport { APIPromise } from '../../../core/api-promise';\nimport { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../core/pagination';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\nexport class Roles extends APIResource {\n  /**\n   * Creates a custom role for the organization.\n   *\n   * @example\n   * ```ts\n   * const role = await client.admin.organization.roles.create({\n   *   permissions: ['string'],\n   *   role_name: 'role_name',\n   * });\n   * ```\n   */\n  create(body: RoleCreateParams, options?: RequestOptions): APIPromise<Role> {\n    return this._client.post('/organization/roles', {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves an organization role.\n   *\n   * @example\n   * ```ts\n   * const role = await client.admin.organization.roles.retrieve(\n   *   'role_id',\n   * );\n   * ```\n   */\n  retrieve(roleID: string, options?: RequestOptions): APIPromise<Role> {\n    return this._client.get(path`/organization/roles/${roleID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Updates an existing organization role.\n   *\n   * @example\n   * ```ts\n   * const role = await client.admin.organization.roles.update(\n   *   'role_id',\n   * );\n   * ```\n   */\n  update(roleID: string, body: RoleUpdateParams, options?: RequestOptions): APIPromise<Role> {\n    return this._client.post(path`/organization/roles/${roleID}`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Lists the roles configured for the organization.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const role of client.admin.organization.roles.list()) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    query: RoleListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<RolesPage, Role> {\n    return this._client.getAPIList('/organization/roles', NextCursorPage<Role>, {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Deletes a custom role from the organization.\n   *\n   * @example\n   * ```ts\n   * const role = await client.admin.organization.roles.delete(\n   *   'role_id',\n   * );\n   * ```\n   */\n  delete(roleID: string, options?: RequestOptions): APIPromise<RoleDeleteResponse> {\n    return this._client.delete(path`/organization/roles/${roleID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type RolesPage = NextCursorPage<Role>;\n\n/**\n * Details about a role that can be assigned through the public Roles API.\n */\nexport interface Role {\n  /**\n   * Identifier for the role.\n   */\n  id: string;\n\n  /**\n   * Optional description of the role.\n   */\n  description: string | null;\n\n  /**\n   * Unique name for the role.\n   */\n  name: string;\n\n  /**\n   * Always `role`.\n   */\n  object: 'role';\n\n  /**\n   * Permissions granted by the role.\n   */\n  permissions: Array<string>;\n\n  /**\n   * Whether the role is predefined and managed by OpenAI.\n   */\n  predefined_role: boolean;\n\n  /**\n   * Resource type the role is bound to (for example `api.organization` or\n   * `api.project`).\n   */\n  resource_type: string;\n}\n\n/**\n * Confirmation payload returned after deleting a role.\n */\nexport interface RoleDeleteResponse {\n  /**\n   * Identifier of the deleted role.\n   */\n  id: string;\n\n  /**\n   * Whether the role was deleted.\n   */\n  deleted: boolean;\n\n  /**\n   * Always `role.deleted`.\n   */\n  object: 'role.deleted';\n}\n\nexport interface RoleCreateParams {\n  /**\n   * Permissions to grant to the role.\n   */\n  permissions: Array<string>;\n\n  /**\n   * Unique name for the role.\n   */\n  role_name: string;\n\n  /**\n   * Optional description of the role.\n   */\n  description?: string | null;\n}\n\nexport interface RoleUpdateParams {\n  /**\n   * New description for the role.\n   */\n  description?: string | null;\n\n  /**\n   * Updated set of permissions for the role.\n   */\n  permissions?: Array<string> | null;\n\n  /**\n   * New name for the role.\n   */\n  role_name?: string | null;\n}\n\nexport interface RoleListParams extends NextCursorPageParams {\n  /**\n   * Sort order for the returned roles.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport declare namespace Roles {\n  export {\n    type Role as Role,\n    type RoleDeleteResponse as RoleDeleteResponse,\n    type RolesPage as RolesPage,\n    type RoleCreateParams as RoleCreateParams,\n    type RoleUpdateParams as RoleUpdateParams,\n    type RoleListParams as RoleListParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport { APIPromise } from '../../../core/api-promise';\nimport {\n  ConversationCursorPage,\n  type ConversationCursorPageParams,\n  PagePromise,\n} from '../../../core/pagination';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\nexport class SpendAlerts extends APIResource {\n  /**\n   * Creates an organization spend alert.\n   *\n   * @example\n   * ```ts\n   * const organizationSpendAlert =\n   *   await client.admin.organization.spendAlerts.create({\n   *     currency: 'USD',\n   *     interval: 'month',\n   *     notification_channel: {\n   *       recipients: ['string'],\n   *       type: 'email',\n   *     },\n   *     threshold_amount: 0,\n   *   });\n   * ```\n   */\n  create(body: SpendAlertCreateParams, options?: RequestOptions): APIPromise<OrganizationSpendAlert> {\n    return this._client.post('/organization/spend_alerts', {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Updates an organization spend alert.\n   *\n   * @example\n   * ```ts\n   * const organizationSpendAlert =\n   *   await client.admin.organization.spendAlerts.update(\n   *     'alert_id',\n   *     {\n   *       currency: 'USD',\n   *       interval: 'month',\n   *       notification_channel: {\n   *         recipients: ['string'],\n   *         type: 'email',\n   *       },\n   *       threshold_amount: 0,\n   *     },\n   *   );\n   * ```\n   */\n  update(\n    alertID: string,\n    body: SpendAlertUpdateParams,\n    options?: RequestOptions,\n  ): APIPromise<OrganizationSpendAlert> {\n    return this._client.post(path`/organization/spend_alerts/${alertID}`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Lists organization spend alerts.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const organizationSpendAlert of client.admin.organization.spendAlerts.list()) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    query: SpendAlertListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<OrganizationSpendAlertsPage, OrganizationSpendAlert> {\n    return this._client.getAPIList(\n      '/organization/spend_alerts',\n      ConversationCursorPage<OrganizationSpendAlert>,\n      { query, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Deletes an organization spend alert.\n   *\n   * @example\n   * ```ts\n   * const organizationSpendAlertDeleted =\n   *   await client.admin.organization.spendAlerts.delete(\n   *     'alert_id',\n   *   );\n   * ```\n   */\n  delete(alertID: string, options?: RequestOptions): APIPromise<OrganizationSpendAlertDeleted> {\n    return this._client.delete(path`/organization/spend_alerts/${alertID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type OrganizationSpendAlertsPage = ConversationCursorPage<OrganizationSpendAlert>;\n\n/**\n * Represents a spend alert configured at the organization level.\n */\nexport interface OrganizationSpendAlert {\n  /**\n   * The identifier, which can be referenced in API endpoints.\n   */\n  id: string;\n\n  /**\n   * The currency for the threshold amount.\n   */\n  currency: 'USD';\n\n  /**\n   * The time interval for evaluating spend against the threshold.\n   */\n  interval: 'month';\n\n  /**\n   * Email notification settings for a spend alert.\n   */\n  notification_channel: OrganizationSpendAlert.NotificationChannel;\n\n  /**\n   * The object type, which is always `organization.spend_alert`.\n   */\n  object: 'organization.spend_alert';\n\n  /**\n   * The alert threshold amount, in cents.\n   */\n  threshold_amount: number;\n}\n\nexport namespace OrganizationSpendAlert {\n  /**\n   * Email notification settings for a spend alert.\n   */\n  export interface NotificationChannel {\n    /**\n     * Email addresses that receive the spend alert notification.\n     */\n    recipients: Array<string>;\n\n    /**\n     * The notification channel type. Currently only `email` is supported.\n     */\n    type: 'email';\n\n    /**\n     * Optional subject prefix for alert emails.\n     */\n    subject_prefix?: string | null;\n  }\n}\n\n/**\n * Confirmation payload returned after deleting an organization spend alert.\n */\nexport interface OrganizationSpendAlertDeleted {\n  /**\n   * The deleted spend alert ID.\n   */\n  id: string;\n\n  /**\n   * Whether the spend alert was deleted.\n   */\n  deleted: boolean;\n\n  /**\n   * Always `organization.spend_alert.deleted`.\n   */\n  object: 'organization.spend_alert.deleted';\n}\n\nexport interface SpendAlertCreateParams {\n  /**\n   * The currency for the threshold amount.\n   */\n  currency: 'USD';\n\n  /**\n   * The time interval for evaluating spend against the threshold.\n   */\n  interval: 'month';\n\n  /**\n   * Email notification settings for a spend alert.\n   */\n  notification_channel: SpendAlertCreateParams.NotificationChannel;\n\n  /**\n   * The alert threshold amount, in cents.\n   */\n  threshold_amount: number;\n}\n\nexport namespace SpendAlertCreateParams {\n  /**\n   * Email notification settings for a spend alert.\n   */\n  export interface NotificationChannel {\n    /**\n     * Email addresses that receive the spend alert notification.\n     */\n    recipients: Array<string>;\n\n    /**\n     * The notification channel type. Currently only `email` is supported.\n     */\n    type: 'email';\n\n    /**\n     * Optional subject prefix for alert emails.\n     */\n    subject_prefix?: string | null;\n  }\n}\n\nexport interface SpendAlertUpdateParams {\n  /**\n   * The currency for the threshold amount.\n   */\n  currency: 'USD';\n\n  /**\n   * The time interval for evaluating spend against the threshold.\n   */\n  interval: 'month';\n\n  /**\n   * Email notification settings for a spend alert.\n   */\n  notification_channel: SpendAlertUpdateParams.NotificationChannel;\n\n  /**\n   * The alert threshold amount, in cents.\n   */\n  threshold_amount: number;\n}\n\nexport namespace SpendAlertUpdateParams {\n  /**\n   * Email notification settings for a spend alert.\n   */\n  export interface NotificationChannel {\n    /**\n     * Email addresses that receive the spend alert notification.\n     */\n    recipients: Array<string>;\n\n    /**\n     * The notification channel type. Currently only `email` is supported.\n     */\n    type: 'email';\n\n    /**\n     * Optional subject prefix for alert emails.\n     */\n    subject_prefix?: string | null;\n  }\n}\n\nexport interface SpendAlertListParams extends ConversationCursorPageParams {\n  /**\n   * Cursor for pagination. Provide the ID of the first spend alert from the previous\n   * response to fetch the previous page.\n   */\n  before?: string;\n\n  /**\n   * Sort order for the returned spend alerts.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport declare namespace SpendAlerts {\n  export {\n    type OrganizationSpendAlert as OrganizationSpendAlert,\n    type OrganizationSpendAlertDeleted as OrganizationSpendAlertDeleted,\n    type OrganizationSpendAlertsPage as OrganizationSpendAlertsPage,\n    type SpendAlertCreateParams as SpendAlertCreateParams,\n    type SpendAlertUpdateParams as SpendAlertUpdateParams,\n    type SpendAlertListParams as SpendAlertListParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport { APIPromise } from '../../../core/api-promise';\nimport { RequestOptions } from '../../../internal/request-options';\n\nexport class Usage extends APIResource {\n  /**\n   * Get audio speeches usage details for the organization.\n   *\n   * @example\n   * ```ts\n   * const response =\n   *   await client.admin.organization.usage.audioSpeeches({\n   *     start_time: 0,\n   *   });\n   * ```\n   */\n  audioSpeeches(\n    query: UsageAudioSpeechesParams,\n    options?: RequestOptions,\n  ): APIPromise<UsageAudioSpeechesResponse> {\n    return this._client.get('/organization/usage/audio_speeches', {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Get audio transcriptions usage details for the organization.\n   *\n   * @example\n   * ```ts\n   * const response =\n   *   await client.admin.organization.usage.audioTranscriptions(\n   *     { start_time: 0 },\n   *   );\n   * ```\n   */\n  audioTranscriptions(\n    query: UsageAudioTranscriptionsParams,\n    options?: RequestOptions,\n  ): APIPromise<UsageAudioTranscriptionsResponse> {\n    return this._client.get('/organization/usage/audio_transcriptions', {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Get code interpreter sessions usage details for the organization.\n   *\n   * @example\n   * ```ts\n   * const response =\n   *   await client.admin.organization.usage.codeInterpreterSessions(\n   *     { start_time: 0 },\n   *   );\n   * ```\n   */\n  codeInterpreterSessions(\n    query: UsageCodeInterpreterSessionsParams,\n    options?: RequestOptions,\n  ): APIPromise<UsageCodeInterpreterSessionsResponse> {\n    return this._client.get('/organization/usage/code_interpreter_sessions', {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Get completions usage details for the organization.\n   *\n   * @example\n   * ```ts\n   * const response =\n   *   await client.admin.organization.usage.completions({\n   *     start_time: 0,\n   *   });\n   * ```\n   */\n  completions(query: UsageCompletionsParams, options?: RequestOptions): APIPromise<UsageCompletionsResponse> {\n    return this._client.get('/organization/usage/completions', {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Get costs details for the organization.\n   *\n   * @example\n   * ```ts\n   * const response =\n   *   await client.admin.organization.usage.costs({\n   *     start_time: 0,\n   *   });\n   * ```\n   */\n  costs(query: UsageCostsParams, options?: RequestOptions): APIPromise<UsageCostsResponse> {\n    return this._client.get('/organization/costs', {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Get embeddings usage details for the organization.\n   *\n   * @example\n   * ```ts\n   * const response =\n   *   await client.admin.organization.usage.embeddings({\n   *     start_time: 0,\n   *   });\n   * ```\n   */\n  embeddings(query: UsageEmbeddingsParams, options?: RequestOptions): APIPromise<UsageEmbeddingsResponse> {\n    return this._client.get('/organization/usage/embeddings', {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Get file search calls usage details for the organization.\n   *\n   * @example\n   * ```ts\n   * const response =\n   *   await client.admin.organization.usage.fileSearchCalls({\n   *     start_time: 0,\n   *   });\n   * ```\n   */\n  fileSearchCalls(\n    query: UsageFileSearchCallsParams,\n    options?: RequestOptions,\n  ): APIPromise<UsageFileSearchCallsResponse> {\n    return this._client.get('/organization/usage/file_search_calls', {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Get images usage details for the organization.\n   *\n   * @example\n   * ```ts\n   * const response =\n   *   await client.admin.organization.usage.images({\n   *     start_time: 0,\n   *   });\n   * ```\n   */\n  images(query: UsageImagesParams, options?: RequestOptions): APIPromise<UsageImagesResponse> {\n    return this._client.get('/organization/usage/images', {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Get moderations usage details for the organization.\n   *\n   * @example\n   * ```ts\n   * const response =\n   *   await client.admin.organization.usage.moderations({\n   *     start_time: 0,\n   *   });\n   * ```\n   */\n  moderations(query: UsageModerationsParams, options?: RequestOptions): APIPromise<UsageModerationsResponse> {\n    return this._client.get('/organization/usage/moderations', {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Get vector stores usage details for the organization.\n   *\n   * @example\n   * ```ts\n   * const response =\n   *   await client.admin.organization.usage.vectorStores({\n   *     start_time: 0,\n   *   });\n   * ```\n   */\n  vectorStores(\n    query: UsageVectorStoresParams,\n    options?: RequestOptions,\n  ): APIPromise<UsageVectorStoresResponse> {\n    return this._client.get('/organization/usage/vector_stores', {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Get web search calls usage details for the organization.\n   *\n   * @example\n   * ```ts\n   * const response =\n   *   await client.admin.organization.usage.webSearchCalls({\n   *     start_time: 0,\n   *   });\n   * ```\n   */\n  webSearchCalls(\n    query: UsageWebSearchCallsParams,\n    options?: RequestOptions,\n  ): APIPromise<UsageWebSearchCallsResponse> {\n    return this._client.get('/organization/usage/web_search_calls', {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport interface UsageAudioSpeechesResponse {\n  data: Array<UsageAudioSpeechesResponse.Data>;\n\n  has_more: boolean;\n\n  next_page: string | null;\n\n  object: 'page';\n}\n\nexport namespace UsageAudioSpeechesResponse {\n  export interface Data {\n    end_time: number;\n\n    object: 'bucket';\n\n    results: Array<\n      | Data.OrganizationUsageCompletionsResult\n      | Data.OrganizationUsageEmbeddingsResult\n      | Data.OrganizationUsageModerationsResult\n      | Data.OrganizationUsageImagesResult\n      | Data.OrganizationUsageAudioSpeechesResult\n      | Data.OrganizationUsageAudioTranscriptionsResult\n      | Data.OrganizationUsageVectorStoresResult\n      | Data.OrganizationUsageCodeInterpreterSessionsResult\n      | Data.OrganizationUsageFileSearchesResult\n      | Data.OrganizationUsageWebSearchesResult\n      | Data.OrganizationCostsResult\n    >;\n\n    start_time: number;\n  }\n\n  export namespace Data {\n    /**\n     * The aggregated completions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageCompletionsResult {\n      /**\n       * The aggregated number of text input tokens used, including cached tokens. For\n       * customers subscribe to scale tier, this includes scale tier tokens.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.completions.result';\n\n      /**\n       * The aggregated number of text output tokens used. For customers subscribe to\n       * scale tier, this includes scale tier tokens.\n       */\n      output_tokens: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=batch`, this field tells whether the grouped usage result is\n       * batch or not.\n       */\n      batch?: boolean | null;\n\n      /**\n       * The aggregated number of audio input tokens used, including cached tokens.\n       */\n      input_audio_tokens?: number;\n\n      /**\n       * The aggregated number of text input tokens that has been cached from previous\n       * requests. For customers subscribe to scale tier, this includes scale tier\n       * tokens.\n       */\n      input_cached_tokens?: number;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * The aggregated number of audio output tokens used.\n       */\n      output_audio_tokens?: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=service_tier`, this field provides the service tier of the\n       * grouped usage result.\n       */\n      service_tier?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated embeddings usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageEmbeddingsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.embeddings.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated moderations usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageModerationsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.moderations.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated images usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageImagesResult {\n      /**\n       * The number of images processed.\n       */\n      images: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.images.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=size`, this field provides the image size of the grouped usage\n       * result.\n       */\n      size?: string | null;\n\n      /**\n       * When `group_by=source`, this field provides the source of the grouped usage\n       * result, possible values are `image.generation`, `image.edit`, `image.variation`.\n       */\n      source?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio speeches usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioSpeechesResult {\n      /**\n       * The number of characters processed.\n       */\n      characters: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_speeches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio transcriptions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioTranscriptionsResult {\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_transcriptions.result';\n\n      /**\n       * The number of seconds processed.\n       */\n      seconds: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated vector stores usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageVectorStoresResult {\n      object: 'organization.usage.vector_stores.result';\n\n      /**\n       * The vector stores usage in bytes.\n       */\n      usage_bytes: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated code interpreter sessions usage details of the specific time\n     * bucket.\n     */\n    export interface OrganizationUsageCodeInterpreterSessionsResult {\n      /**\n       * The number of code interpreter sessions.\n       */\n      num_sessions: number;\n\n      object: 'organization.usage.code_interpreter_sessions.result';\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated file search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageFileSearchesResult {\n      /**\n       * The count of file search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.file_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n\n      /**\n       * When `group_by=vector_store_id`, this field provides the vector store ID of the\n       * grouped usage result.\n       */\n      vector_store_id?: string | null;\n    }\n\n    /**\n     * The aggregated web search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageWebSearchesResult {\n      /**\n       * The count of model requests.\n       */\n      num_model_requests: number;\n\n      /**\n       * The count of web search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.web_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=context_level`, this field provides the search context size of\n       * the grouped usage result.\n       */\n      context_level?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated costs details of the specific time bucket.\n     */\n    export interface OrganizationCostsResult {\n      object: 'organization.costs.result';\n\n      /**\n       * The monetary value in its associated currency.\n       */\n      amount?: OrganizationCostsResult.Amount;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API Key ID of the grouped\n       * costs result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the line item of the grouped\n       * costs result.\n       */\n      line_item?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * costs result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the quantity of the grouped costs\n       * result.\n       */\n      quantity?: number | null;\n    }\n\n    export namespace OrganizationCostsResult {\n      /**\n       * The monetary value in its associated currency.\n       */\n      export interface Amount {\n        /**\n         * Lowercase ISO-4217 currency e.g. \"usd\"\n         */\n        currency?: string;\n\n        /**\n         * The numeric value of the cost.\n         */\n        value?: number;\n      }\n    }\n  }\n}\n\nexport interface UsageAudioTranscriptionsResponse {\n  data: Array<UsageAudioTranscriptionsResponse.Data>;\n\n  has_more: boolean;\n\n  next_page: string | null;\n\n  object: 'page';\n}\n\nexport namespace UsageAudioTranscriptionsResponse {\n  export interface Data {\n    end_time: number;\n\n    object: 'bucket';\n\n    results: Array<\n      | Data.OrganizationUsageCompletionsResult\n      | Data.OrganizationUsageEmbeddingsResult\n      | Data.OrganizationUsageModerationsResult\n      | Data.OrganizationUsageImagesResult\n      | Data.OrganizationUsageAudioSpeechesResult\n      | Data.OrganizationUsageAudioTranscriptionsResult\n      | Data.OrganizationUsageVectorStoresResult\n      | Data.OrganizationUsageCodeInterpreterSessionsResult\n      | Data.OrganizationUsageFileSearchesResult\n      | Data.OrganizationUsageWebSearchesResult\n      | Data.OrganizationCostsResult\n    >;\n\n    start_time: number;\n  }\n\n  export namespace Data {\n    /**\n     * The aggregated completions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageCompletionsResult {\n      /**\n       * The aggregated number of text input tokens used, including cached tokens. For\n       * customers subscribe to scale tier, this includes scale tier tokens.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.completions.result';\n\n      /**\n       * The aggregated number of text output tokens used. For customers subscribe to\n       * scale tier, this includes scale tier tokens.\n       */\n      output_tokens: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=batch`, this field tells whether the grouped usage result is\n       * batch or not.\n       */\n      batch?: boolean | null;\n\n      /**\n       * The aggregated number of audio input tokens used, including cached tokens.\n       */\n      input_audio_tokens?: number;\n\n      /**\n       * The aggregated number of text input tokens that has been cached from previous\n       * requests. For customers subscribe to scale tier, this includes scale tier\n       * tokens.\n       */\n      input_cached_tokens?: number;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * The aggregated number of audio output tokens used.\n       */\n      output_audio_tokens?: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=service_tier`, this field provides the service tier of the\n       * grouped usage result.\n       */\n      service_tier?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated embeddings usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageEmbeddingsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.embeddings.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated moderations usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageModerationsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.moderations.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated images usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageImagesResult {\n      /**\n       * The number of images processed.\n       */\n      images: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.images.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=size`, this field provides the image size of the grouped usage\n       * result.\n       */\n      size?: string | null;\n\n      /**\n       * When `group_by=source`, this field provides the source of the grouped usage\n       * result, possible values are `image.generation`, `image.edit`, `image.variation`.\n       */\n      source?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio speeches usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioSpeechesResult {\n      /**\n       * The number of characters processed.\n       */\n      characters: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_speeches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio transcriptions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioTranscriptionsResult {\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_transcriptions.result';\n\n      /**\n       * The number of seconds processed.\n       */\n      seconds: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated vector stores usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageVectorStoresResult {\n      object: 'organization.usage.vector_stores.result';\n\n      /**\n       * The vector stores usage in bytes.\n       */\n      usage_bytes: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated code interpreter sessions usage details of the specific time\n     * bucket.\n     */\n    export interface OrganizationUsageCodeInterpreterSessionsResult {\n      /**\n       * The number of code interpreter sessions.\n       */\n      num_sessions: number;\n\n      object: 'organization.usage.code_interpreter_sessions.result';\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated file search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageFileSearchesResult {\n      /**\n       * The count of file search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.file_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n\n      /**\n       * When `group_by=vector_store_id`, this field provides the vector store ID of the\n       * grouped usage result.\n       */\n      vector_store_id?: string | null;\n    }\n\n    /**\n     * The aggregated web search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageWebSearchesResult {\n      /**\n       * The count of model requests.\n       */\n      num_model_requests: number;\n\n      /**\n       * The count of web search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.web_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=context_level`, this field provides the search context size of\n       * the grouped usage result.\n       */\n      context_level?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated costs details of the specific time bucket.\n     */\n    export interface OrganizationCostsResult {\n      object: 'organization.costs.result';\n\n      /**\n       * The monetary value in its associated currency.\n       */\n      amount?: OrganizationCostsResult.Amount;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API Key ID of the grouped\n       * costs result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the line item of the grouped\n       * costs result.\n       */\n      line_item?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * costs result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the quantity of the grouped costs\n       * result.\n       */\n      quantity?: number | null;\n    }\n\n    export namespace OrganizationCostsResult {\n      /**\n       * The monetary value in its associated currency.\n       */\n      export interface Amount {\n        /**\n         * Lowercase ISO-4217 currency e.g. \"usd\"\n         */\n        currency?: string;\n\n        /**\n         * The numeric value of the cost.\n         */\n        value?: number;\n      }\n    }\n  }\n}\n\nexport interface UsageCodeInterpreterSessionsResponse {\n  data: Array<UsageCodeInterpreterSessionsResponse.Data>;\n\n  has_more: boolean;\n\n  next_page: string | null;\n\n  object: 'page';\n}\n\nexport namespace UsageCodeInterpreterSessionsResponse {\n  export interface Data {\n    end_time: number;\n\n    object: 'bucket';\n\n    results: Array<\n      | Data.OrganizationUsageCompletionsResult\n      | Data.OrganizationUsageEmbeddingsResult\n      | Data.OrganizationUsageModerationsResult\n      | Data.OrganizationUsageImagesResult\n      | Data.OrganizationUsageAudioSpeechesResult\n      | Data.OrganizationUsageAudioTranscriptionsResult\n      | Data.OrganizationUsageVectorStoresResult\n      | Data.OrganizationUsageCodeInterpreterSessionsResult\n      | Data.OrganizationUsageFileSearchesResult\n      | Data.OrganizationUsageWebSearchesResult\n      | Data.OrganizationCostsResult\n    >;\n\n    start_time: number;\n  }\n\n  export namespace Data {\n    /**\n     * The aggregated completions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageCompletionsResult {\n      /**\n       * The aggregated number of text input tokens used, including cached tokens. For\n       * customers subscribe to scale tier, this includes scale tier tokens.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.completions.result';\n\n      /**\n       * The aggregated number of text output tokens used. For customers subscribe to\n       * scale tier, this includes scale tier tokens.\n       */\n      output_tokens: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=batch`, this field tells whether the grouped usage result is\n       * batch or not.\n       */\n      batch?: boolean | null;\n\n      /**\n       * The aggregated number of audio input tokens used, including cached tokens.\n       */\n      input_audio_tokens?: number;\n\n      /**\n       * The aggregated number of text input tokens that has been cached from previous\n       * requests. For customers subscribe to scale tier, this includes scale tier\n       * tokens.\n       */\n      input_cached_tokens?: number;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * The aggregated number of audio output tokens used.\n       */\n      output_audio_tokens?: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=service_tier`, this field provides the service tier of the\n       * grouped usage result.\n       */\n      service_tier?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated embeddings usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageEmbeddingsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.embeddings.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated moderations usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageModerationsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.moderations.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated images usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageImagesResult {\n      /**\n       * The number of images processed.\n       */\n      images: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.images.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=size`, this field provides the image size of the grouped usage\n       * result.\n       */\n      size?: string | null;\n\n      /**\n       * When `group_by=source`, this field provides the source of the grouped usage\n       * result, possible values are `image.generation`, `image.edit`, `image.variation`.\n       */\n      source?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio speeches usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioSpeechesResult {\n      /**\n       * The number of characters processed.\n       */\n      characters: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_speeches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio transcriptions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioTranscriptionsResult {\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_transcriptions.result';\n\n      /**\n       * The number of seconds processed.\n       */\n      seconds: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated vector stores usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageVectorStoresResult {\n      object: 'organization.usage.vector_stores.result';\n\n      /**\n       * The vector stores usage in bytes.\n       */\n      usage_bytes: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated code interpreter sessions usage details of the specific time\n     * bucket.\n     */\n    export interface OrganizationUsageCodeInterpreterSessionsResult {\n      /**\n       * The number of code interpreter sessions.\n       */\n      num_sessions: number;\n\n      object: 'organization.usage.code_interpreter_sessions.result';\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated file search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageFileSearchesResult {\n      /**\n       * The count of file search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.file_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n\n      /**\n       * When `group_by=vector_store_id`, this field provides the vector store ID of the\n       * grouped usage result.\n       */\n      vector_store_id?: string | null;\n    }\n\n    /**\n     * The aggregated web search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageWebSearchesResult {\n      /**\n       * The count of model requests.\n       */\n      num_model_requests: number;\n\n      /**\n       * The count of web search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.web_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=context_level`, this field provides the search context size of\n       * the grouped usage result.\n       */\n      context_level?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated costs details of the specific time bucket.\n     */\n    export interface OrganizationCostsResult {\n      object: 'organization.costs.result';\n\n      /**\n       * The monetary value in its associated currency.\n       */\n      amount?: OrganizationCostsResult.Amount;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API Key ID of the grouped\n       * costs result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the line item of the grouped\n       * costs result.\n       */\n      line_item?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * costs result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the quantity of the grouped costs\n       * result.\n       */\n      quantity?: number | null;\n    }\n\n    export namespace OrganizationCostsResult {\n      /**\n       * The monetary value in its associated currency.\n       */\n      export interface Amount {\n        /**\n         * Lowercase ISO-4217 currency e.g. \"usd\"\n         */\n        currency?: string;\n\n        /**\n         * The numeric value of the cost.\n         */\n        value?: number;\n      }\n    }\n  }\n}\n\nexport interface UsageCompletionsResponse {\n  data: Array<UsageCompletionsResponse.Data>;\n\n  has_more: boolean;\n\n  next_page: string | null;\n\n  object: 'page';\n}\n\nexport namespace UsageCompletionsResponse {\n  export interface Data {\n    end_time: number;\n\n    object: 'bucket';\n\n    results: Array<\n      | Data.OrganizationUsageCompletionsResult\n      | Data.OrganizationUsageEmbeddingsResult\n      | Data.OrganizationUsageModerationsResult\n      | Data.OrganizationUsageImagesResult\n      | Data.OrganizationUsageAudioSpeechesResult\n      | Data.OrganizationUsageAudioTranscriptionsResult\n      | Data.OrganizationUsageVectorStoresResult\n      | Data.OrganizationUsageCodeInterpreterSessionsResult\n      | Data.OrganizationUsageFileSearchesResult\n      | Data.OrganizationUsageWebSearchesResult\n      | Data.OrganizationCostsResult\n    >;\n\n    start_time: number;\n  }\n\n  export namespace Data {\n    /**\n     * The aggregated completions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageCompletionsResult {\n      /**\n       * The aggregated number of text input tokens used, including cached tokens. For\n       * customers subscribe to scale tier, this includes scale tier tokens.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.completions.result';\n\n      /**\n       * The aggregated number of text output tokens used. For customers subscribe to\n       * scale tier, this includes scale tier tokens.\n       */\n      output_tokens: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=batch`, this field tells whether the grouped usage result is\n       * batch or not.\n       */\n      batch?: boolean | null;\n\n      /**\n       * The aggregated number of audio input tokens used, including cached tokens.\n       */\n      input_audio_tokens?: number;\n\n      /**\n       * The aggregated number of text input tokens that has been cached from previous\n       * requests. For customers subscribe to scale tier, this includes scale tier\n       * tokens.\n       */\n      input_cached_tokens?: number;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * The aggregated number of audio output tokens used.\n       */\n      output_audio_tokens?: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=service_tier`, this field provides the service tier of the\n       * grouped usage result.\n       */\n      service_tier?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated embeddings usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageEmbeddingsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.embeddings.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated moderations usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageModerationsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.moderations.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated images usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageImagesResult {\n      /**\n       * The number of images processed.\n       */\n      images: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.images.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=size`, this field provides the image size of the grouped usage\n       * result.\n       */\n      size?: string | null;\n\n      /**\n       * When `group_by=source`, this field provides the source of the grouped usage\n       * result, possible values are `image.generation`, `image.edit`, `image.variation`.\n       */\n      source?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio speeches usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioSpeechesResult {\n      /**\n       * The number of characters processed.\n       */\n      characters: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_speeches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio transcriptions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioTranscriptionsResult {\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_transcriptions.result';\n\n      /**\n       * The number of seconds processed.\n       */\n      seconds: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated vector stores usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageVectorStoresResult {\n      object: 'organization.usage.vector_stores.result';\n\n      /**\n       * The vector stores usage in bytes.\n       */\n      usage_bytes: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated code interpreter sessions usage details of the specific time\n     * bucket.\n     */\n    export interface OrganizationUsageCodeInterpreterSessionsResult {\n      /**\n       * The number of code interpreter sessions.\n       */\n      num_sessions: number;\n\n      object: 'organization.usage.code_interpreter_sessions.result';\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated file search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageFileSearchesResult {\n      /**\n       * The count of file search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.file_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n\n      /**\n       * When `group_by=vector_store_id`, this field provides the vector store ID of the\n       * grouped usage result.\n       */\n      vector_store_id?: string | null;\n    }\n\n    /**\n     * The aggregated web search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageWebSearchesResult {\n      /**\n       * The count of model requests.\n       */\n      num_model_requests: number;\n\n      /**\n       * The count of web search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.web_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=context_level`, this field provides the search context size of\n       * the grouped usage result.\n       */\n      context_level?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated costs details of the specific time bucket.\n     */\n    export interface OrganizationCostsResult {\n      object: 'organization.costs.result';\n\n      /**\n       * The monetary value in its associated currency.\n       */\n      amount?: OrganizationCostsResult.Amount;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API Key ID of the grouped\n       * costs result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the line item of the grouped\n       * costs result.\n       */\n      line_item?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * costs result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the quantity of the grouped costs\n       * result.\n       */\n      quantity?: number | null;\n    }\n\n    export namespace OrganizationCostsResult {\n      /**\n       * The monetary value in its associated currency.\n       */\n      export interface Amount {\n        /**\n         * Lowercase ISO-4217 currency e.g. \"usd\"\n         */\n        currency?: string;\n\n        /**\n         * The numeric value of the cost.\n         */\n        value?: number;\n      }\n    }\n  }\n}\n\nexport interface UsageCostsResponse {\n  data: Array<UsageCostsResponse.Data>;\n\n  has_more: boolean;\n\n  next_page: string | null;\n\n  object: 'page';\n}\n\nexport namespace UsageCostsResponse {\n  export interface Data {\n    end_time: number;\n\n    object: 'bucket';\n\n    results: Array<\n      | Data.OrganizationUsageCompletionsResult\n      | Data.OrganizationUsageEmbeddingsResult\n      | Data.OrganizationUsageModerationsResult\n      | Data.OrganizationUsageImagesResult\n      | Data.OrganizationUsageAudioSpeechesResult\n      | Data.OrganizationUsageAudioTranscriptionsResult\n      | Data.OrganizationUsageVectorStoresResult\n      | Data.OrganizationUsageCodeInterpreterSessionsResult\n      | Data.OrganizationUsageFileSearchesResult\n      | Data.OrganizationUsageWebSearchesResult\n      | Data.OrganizationCostsResult\n    >;\n\n    start_time: number;\n  }\n\n  export namespace Data {\n    /**\n     * The aggregated completions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageCompletionsResult {\n      /**\n       * The aggregated number of text input tokens used, including cached tokens. For\n       * customers subscribe to scale tier, this includes scale tier tokens.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.completions.result';\n\n      /**\n       * The aggregated number of text output tokens used. For customers subscribe to\n       * scale tier, this includes scale tier tokens.\n       */\n      output_tokens: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=batch`, this field tells whether the grouped usage result is\n       * batch or not.\n       */\n      batch?: boolean | null;\n\n      /**\n       * The aggregated number of audio input tokens used, including cached tokens.\n       */\n      input_audio_tokens?: number;\n\n      /**\n       * The aggregated number of text input tokens that has been cached from previous\n       * requests. For customers subscribe to scale tier, this includes scale tier\n       * tokens.\n       */\n      input_cached_tokens?: number;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * The aggregated number of audio output tokens used.\n       */\n      output_audio_tokens?: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=service_tier`, this field provides the service tier of the\n       * grouped usage result.\n       */\n      service_tier?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated embeddings usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageEmbeddingsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.embeddings.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated moderations usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageModerationsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.moderations.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated images usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageImagesResult {\n      /**\n       * The number of images processed.\n       */\n      images: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.images.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=size`, this field provides the image size of the grouped usage\n       * result.\n       */\n      size?: string | null;\n\n      /**\n       * When `group_by=source`, this field provides the source of the grouped usage\n       * result, possible values are `image.generation`, `image.edit`, `image.variation`.\n       */\n      source?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio speeches usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioSpeechesResult {\n      /**\n       * The number of characters processed.\n       */\n      characters: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_speeches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio transcriptions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioTranscriptionsResult {\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_transcriptions.result';\n\n      /**\n       * The number of seconds processed.\n       */\n      seconds: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated vector stores usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageVectorStoresResult {\n      object: 'organization.usage.vector_stores.result';\n\n      /**\n       * The vector stores usage in bytes.\n       */\n      usage_bytes: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated code interpreter sessions usage details of the specific time\n     * bucket.\n     */\n    export interface OrganizationUsageCodeInterpreterSessionsResult {\n      /**\n       * The number of code interpreter sessions.\n       */\n      num_sessions: number;\n\n      object: 'organization.usage.code_interpreter_sessions.result';\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated file search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageFileSearchesResult {\n      /**\n       * The count of file search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.file_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n\n      /**\n       * When `group_by=vector_store_id`, this field provides the vector store ID of the\n       * grouped usage result.\n       */\n      vector_store_id?: string | null;\n    }\n\n    /**\n     * The aggregated web search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageWebSearchesResult {\n      /**\n       * The count of model requests.\n       */\n      num_model_requests: number;\n\n      /**\n       * The count of web search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.web_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=context_level`, this field provides the search context size of\n       * the grouped usage result.\n       */\n      context_level?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated costs details of the specific time bucket.\n     */\n    export interface OrganizationCostsResult {\n      object: 'organization.costs.result';\n\n      /**\n       * The monetary value in its associated currency.\n       */\n      amount?: OrganizationCostsResult.Amount;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API Key ID of the grouped\n       * costs result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the line item of the grouped\n       * costs result.\n       */\n      line_item?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * costs result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the quantity of the grouped costs\n       * result.\n       */\n      quantity?: number | null;\n    }\n\n    export namespace OrganizationCostsResult {\n      /**\n       * The monetary value in its associated currency.\n       */\n      export interface Amount {\n        /**\n         * Lowercase ISO-4217 currency e.g. \"usd\"\n         */\n        currency?: string;\n\n        /**\n         * The numeric value of the cost.\n         */\n        value?: number;\n      }\n    }\n  }\n}\n\nexport interface UsageEmbeddingsResponse {\n  data: Array<UsageEmbeddingsResponse.Data>;\n\n  has_more: boolean;\n\n  next_page: string | null;\n\n  object: 'page';\n}\n\nexport namespace UsageEmbeddingsResponse {\n  export interface Data {\n    end_time: number;\n\n    object: 'bucket';\n\n    results: Array<\n      | Data.OrganizationUsageCompletionsResult\n      | Data.OrganizationUsageEmbeddingsResult\n      | Data.OrganizationUsageModerationsResult\n      | Data.OrganizationUsageImagesResult\n      | Data.OrganizationUsageAudioSpeechesResult\n      | Data.OrganizationUsageAudioTranscriptionsResult\n      | Data.OrganizationUsageVectorStoresResult\n      | Data.OrganizationUsageCodeInterpreterSessionsResult\n      | Data.OrganizationUsageFileSearchesResult\n      | Data.OrganizationUsageWebSearchesResult\n      | Data.OrganizationCostsResult\n    >;\n\n    start_time: number;\n  }\n\n  export namespace Data {\n    /**\n     * The aggregated completions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageCompletionsResult {\n      /**\n       * The aggregated number of text input tokens used, including cached tokens. For\n       * customers subscribe to scale tier, this includes scale tier tokens.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.completions.result';\n\n      /**\n       * The aggregated number of text output tokens used. For customers subscribe to\n       * scale tier, this includes scale tier tokens.\n       */\n      output_tokens: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=batch`, this field tells whether the grouped usage result is\n       * batch or not.\n       */\n      batch?: boolean | null;\n\n      /**\n       * The aggregated number of audio input tokens used, including cached tokens.\n       */\n      input_audio_tokens?: number;\n\n      /**\n       * The aggregated number of text input tokens that has been cached from previous\n       * requests. For customers subscribe to scale tier, this includes scale tier\n       * tokens.\n       */\n      input_cached_tokens?: number;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * The aggregated number of audio output tokens used.\n       */\n      output_audio_tokens?: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=service_tier`, this field provides the service tier of the\n       * grouped usage result.\n       */\n      service_tier?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated embeddings usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageEmbeddingsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.embeddings.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated moderations usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageModerationsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.moderations.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated images usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageImagesResult {\n      /**\n       * The number of images processed.\n       */\n      images: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.images.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=size`, this field provides the image size of the grouped usage\n       * result.\n       */\n      size?: string | null;\n\n      /**\n       * When `group_by=source`, this field provides the source of the grouped usage\n       * result, possible values are `image.generation`, `image.edit`, `image.variation`.\n       */\n      source?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio speeches usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioSpeechesResult {\n      /**\n       * The number of characters processed.\n       */\n      characters: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_speeches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio transcriptions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioTranscriptionsResult {\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_transcriptions.result';\n\n      /**\n       * The number of seconds processed.\n       */\n      seconds: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated vector stores usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageVectorStoresResult {\n      object: 'organization.usage.vector_stores.result';\n\n      /**\n       * The vector stores usage in bytes.\n       */\n      usage_bytes: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated code interpreter sessions usage details of the specific time\n     * bucket.\n     */\n    export interface OrganizationUsageCodeInterpreterSessionsResult {\n      /**\n       * The number of code interpreter sessions.\n       */\n      num_sessions: number;\n\n      object: 'organization.usage.code_interpreter_sessions.result';\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated file search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageFileSearchesResult {\n      /**\n       * The count of file search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.file_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n\n      /**\n       * When `group_by=vector_store_id`, this field provides the vector store ID of the\n       * grouped usage result.\n       */\n      vector_store_id?: string | null;\n    }\n\n    /**\n     * The aggregated web search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageWebSearchesResult {\n      /**\n       * The count of model requests.\n       */\n      num_model_requests: number;\n\n      /**\n       * The count of web search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.web_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=context_level`, this field provides the search context size of\n       * the grouped usage result.\n       */\n      context_level?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated costs details of the specific time bucket.\n     */\n    export interface OrganizationCostsResult {\n      object: 'organization.costs.result';\n\n      /**\n       * The monetary value in its associated currency.\n       */\n      amount?: OrganizationCostsResult.Amount;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API Key ID of the grouped\n       * costs result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the line item of the grouped\n       * costs result.\n       */\n      line_item?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * costs result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the quantity of the grouped costs\n       * result.\n       */\n      quantity?: number | null;\n    }\n\n    export namespace OrganizationCostsResult {\n      /**\n       * The monetary value in its associated currency.\n       */\n      export interface Amount {\n        /**\n         * Lowercase ISO-4217 currency e.g. \"usd\"\n         */\n        currency?: string;\n\n        /**\n         * The numeric value of the cost.\n         */\n        value?: number;\n      }\n    }\n  }\n}\n\nexport interface UsageFileSearchCallsResponse {\n  data: Array<UsageFileSearchCallsResponse.Data>;\n\n  has_more: boolean;\n\n  next_page: string | null;\n\n  object: 'page';\n}\n\nexport namespace UsageFileSearchCallsResponse {\n  export interface Data {\n    end_time: number;\n\n    object: 'bucket';\n\n    results: Array<\n      | Data.OrganizationUsageCompletionsResult\n      | Data.OrganizationUsageEmbeddingsResult\n      | Data.OrganizationUsageModerationsResult\n      | Data.OrganizationUsageImagesResult\n      | Data.OrganizationUsageAudioSpeechesResult\n      | Data.OrganizationUsageAudioTranscriptionsResult\n      | Data.OrganizationUsageVectorStoresResult\n      | Data.OrganizationUsageCodeInterpreterSessionsResult\n      | Data.OrganizationUsageFileSearchesResult\n      | Data.OrganizationUsageWebSearchesResult\n      | Data.OrganizationCostsResult\n    >;\n\n    start_time: number;\n  }\n\n  export namespace Data {\n    /**\n     * The aggregated completions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageCompletionsResult {\n      /**\n       * The aggregated number of text input tokens used, including cached tokens. For\n       * customers subscribe to scale tier, this includes scale tier tokens.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.completions.result';\n\n      /**\n       * The aggregated number of text output tokens used. For customers subscribe to\n       * scale tier, this includes scale tier tokens.\n       */\n      output_tokens: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=batch`, this field tells whether the grouped usage result is\n       * batch or not.\n       */\n      batch?: boolean | null;\n\n      /**\n       * The aggregated number of audio input tokens used, including cached tokens.\n       */\n      input_audio_tokens?: number;\n\n      /**\n       * The aggregated number of text input tokens that has been cached from previous\n       * requests. For customers subscribe to scale tier, this includes scale tier\n       * tokens.\n       */\n      input_cached_tokens?: number;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * The aggregated number of audio output tokens used.\n       */\n      output_audio_tokens?: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=service_tier`, this field provides the service tier of the\n       * grouped usage result.\n       */\n      service_tier?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated embeddings usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageEmbeddingsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.embeddings.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated moderations usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageModerationsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.moderations.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated images usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageImagesResult {\n      /**\n       * The number of images processed.\n       */\n      images: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.images.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=size`, this field provides the image size of the grouped usage\n       * result.\n       */\n      size?: string | null;\n\n      /**\n       * When `group_by=source`, this field provides the source of the grouped usage\n       * result, possible values are `image.generation`, `image.edit`, `image.variation`.\n       */\n      source?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio speeches usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioSpeechesResult {\n      /**\n       * The number of characters processed.\n       */\n      characters: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_speeches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio transcriptions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioTranscriptionsResult {\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_transcriptions.result';\n\n      /**\n       * The number of seconds processed.\n       */\n      seconds: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated vector stores usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageVectorStoresResult {\n      object: 'organization.usage.vector_stores.result';\n\n      /**\n       * The vector stores usage in bytes.\n       */\n      usage_bytes: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated code interpreter sessions usage details of the specific time\n     * bucket.\n     */\n    export interface OrganizationUsageCodeInterpreterSessionsResult {\n      /**\n       * The number of code interpreter sessions.\n       */\n      num_sessions: number;\n\n      object: 'organization.usage.code_interpreter_sessions.result';\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated file search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageFileSearchesResult {\n      /**\n       * The count of file search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.file_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n\n      /**\n       * When `group_by=vector_store_id`, this field provides the vector store ID of the\n       * grouped usage result.\n       */\n      vector_store_id?: string | null;\n    }\n\n    /**\n     * The aggregated web search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageWebSearchesResult {\n      /**\n       * The count of model requests.\n       */\n      num_model_requests: number;\n\n      /**\n       * The count of web search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.web_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=context_level`, this field provides the search context size of\n       * the grouped usage result.\n       */\n      context_level?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated costs details of the specific time bucket.\n     */\n    export interface OrganizationCostsResult {\n      object: 'organization.costs.result';\n\n      /**\n       * The monetary value in its associated currency.\n       */\n      amount?: OrganizationCostsResult.Amount;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API Key ID of the grouped\n       * costs result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the line item of the grouped\n       * costs result.\n       */\n      line_item?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * costs result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the quantity of the grouped costs\n       * result.\n       */\n      quantity?: number | null;\n    }\n\n    export namespace OrganizationCostsResult {\n      /**\n       * The monetary value in its associated currency.\n       */\n      export interface Amount {\n        /**\n         * Lowercase ISO-4217 currency e.g. \"usd\"\n         */\n        currency?: string;\n\n        /**\n         * The numeric value of the cost.\n         */\n        value?: number;\n      }\n    }\n  }\n}\n\nexport interface UsageImagesResponse {\n  data: Array<UsageImagesResponse.Data>;\n\n  has_more: boolean;\n\n  next_page: string | null;\n\n  object: 'page';\n}\n\nexport namespace UsageImagesResponse {\n  export interface Data {\n    end_time: number;\n\n    object: 'bucket';\n\n    results: Array<\n      | Data.OrganizationUsageCompletionsResult\n      | Data.OrganizationUsageEmbeddingsResult\n      | Data.OrganizationUsageModerationsResult\n      | Data.OrganizationUsageImagesResult\n      | Data.OrganizationUsageAudioSpeechesResult\n      | Data.OrganizationUsageAudioTranscriptionsResult\n      | Data.OrganizationUsageVectorStoresResult\n      | Data.OrganizationUsageCodeInterpreterSessionsResult\n      | Data.OrganizationUsageFileSearchesResult\n      | Data.OrganizationUsageWebSearchesResult\n      | Data.OrganizationCostsResult\n    >;\n\n    start_time: number;\n  }\n\n  export namespace Data {\n    /**\n     * The aggregated completions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageCompletionsResult {\n      /**\n       * The aggregated number of text input tokens used, including cached tokens. For\n       * customers subscribe to scale tier, this includes scale tier tokens.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.completions.result';\n\n      /**\n       * The aggregated number of text output tokens used. For customers subscribe to\n       * scale tier, this includes scale tier tokens.\n       */\n      output_tokens: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=batch`, this field tells whether the grouped usage result is\n       * batch or not.\n       */\n      batch?: boolean | null;\n\n      /**\n       * The aggregated number of audio input tokens used, including cached tokens.\n       */\n      input_audio_tokens?: number;\n\n      /**\n       * The aggregated number of text input tokens that has been cached from previous\n       * requests. For customers subscribe to scale tier, this includes scale tier\n       * tokens.\n       */\n      input_cached_tokens?: number;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * The aggregated number of audio output tokens used.\n       */\n      output_audio_tokens?: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=service_tier`, this field provides the service tier of the\n       * grouped usage result.\n       */\n      service_tier?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated embeddings usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageEmbeddingsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.embeddings.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated moderations usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageModerationsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.moderations.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated images usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageImagesResult {\n      /**\n       * The number of images processed.\n       */\n      images: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.images.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=size`, this field provides the image size of the grouped usage\n       * result.\n       */\n      size?: string | null;\n\n      /**\n       * When `group_by=source`, this field provides the source of the grouped usage\n       * result, possible values are `image.generation`, `image.edit`, `image.variation`.\n       */\n      source?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio speeches usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioSpeechesResult {\n      /**\n       * The number of characters processed.\n       */\n      characters: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_speeches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio transcriptions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioTranscriptionsResult {\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_transcriptions.result';\n\n      /**\n       * The number of seconds processed.\n       */\n      seconds: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated vector stores usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageVectorStoresResult {\n      object: 'organization.usage.vector_stores.result';\n\n      /**\n       * The vector stores usage in bytes.\n       */\n      usage_bytes: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated code interpreter sessions usage details of the specific time\n     * bucket.\n     */\n    export interface OrganizationUsageCodeInterpreterSessionsResult {\n      /**\n       * The number of code interpreter sessions.\n       */\n      num_sessions: number;\n\n      object: 'organization.usage.code_interpreter_sessions.result';\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated file search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageFileSearchesResult {\n      /**\n       * The count of file search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.file_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n\n      /**\n       * When `group_by=vector_store_id`, this field provides the vector store ID of the\n       * grouped usage result.\n       */\n      vector_store_id?: string | null;\n    }\n\n    /**\n     * The aggregated web search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageWebSearchesResult {\n      /**\n       * The count of model requests.\n       */\n      num_model_requests: number;\n\n      /**\n       * The count of web search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.web_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=context_level`, this field provides the search context size of\n       * the grouped usage result.\n       */\n      context_level?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated costs details of the specific time bucket.\n     */\n    export interface OrganizationCostsResult {\n      object: 'organization.costs.result';\n\n      /**\n       * The monetary value in its associated currency.\n       */\n      amount?: OrganizationCostsResult.Amount;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API Key ID of the grouped\n       * costs result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the line item of the grouped\n       * costs result.\n       */\n      line_item?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * costs result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the quantity of the grouped costs\n       * result.\n       */\n      quantity?: number | null;\n    }\n\n    export namespace OrganizationCostsResult {\n      /**\n       * The monetary value in its associated currency.\n       */\n      export interface Amount {\n        /**\n         * Lowercase ISO-4217 currency e.g. \"usd\"\n         */\n        currency?: string;\n\n        /**\n         * The numeric value of the cost.\n         */\n        value?: number;\n      }\n    }\n  }\n}\n\nexport interface UsageModerationsResponse {\n  data: Array<UsageModerationsResponse.Data>;\n\n  has_more: boolean;\n\n  next_page: string | null;\n\n  object: 'page';\n}\n\nexport namespace UsageModerationsResponse {\n  export interface Data {\n    end_time: number;\n\n    object: 'bucket';\n\n    results: Array<\n      | Data.OrganizationUsageCompletionsResult\n      | Data.OrganizationUsageEmbeddingsResult\n      | Data.OrganizationUsageModerationsResult\n      | Data.OrganizationUsageImagesResult\n      | Data.OrganizationUsageAudioSpeechesResult\n      | Data.OrganizationUsageAudioTranscriptionsResult\n      | Data.OrganizationUsageVectorStoresResult\n      | Data.OrganizationUsageCodeInterpreterSessionsResult\n      | Data.OrganizationUsageFileSearchesResult\n      | Data.OrganizationUsageWebSearchesResult\n      | Data.OrganizationCostsResult\n    >;\n\n    start_time: number;\n  }\n\n  export namespace Data {\n    /**\n     * The aggregated completions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageCompletionsResult {\n      /**\n       * The aggregated number of text input tokens used, including cached tokens. For\n       * customers subscribe to scale tier, this includes scale tier tokens.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.completions.result';\n\n      /**\n       * The aggregated number of text output tokens used. For customers subscribe to\n       * scale tier, this includes scale tier tokens.\n       */\n      output_tokens: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=batch`, this field tells whether the grouped usage result is\n       * batch or not.\n       */\n      batch?: boolean | null;\n\n      /**\n       * The aggregated number of audio input tokens used, including cached tokens.\n       */\n      input_audio_tokens?: number;\n\n      /**\n       * The aggregated number of text input tokens that has been cached from previous\n       * requests. For customers subscribe to scale tier, this includes scale tier\n       * tokens.\n       */\n      input_cached_tokens?: number;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * The aggregated number of audio output tokens used.\n       */\n      output_audio_tokens?: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=service_tier`, this field provides the service tier of the\n       * grouped usage result.\n       */\n      service_tier?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated embeddings usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageEmbeddingsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.embeddings.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated moderations usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageModerationsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.moderations.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated images usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageImagesResult {\n      /**\n       * The number of images processed.\n       */\n      images: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.images.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=size`, this field provides the image size of the grouped usage\n       * result.\n       */\n      size?: string | null;\n\n      /**\n       * When `group_by=source`, this field provides the source of the grouped usage\n       * result, possible values are `image.generation`, `image.edit`, `image.variation`.\n       */\n      source?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio speeches usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioSpeechesResult {\n      /**\n       * The number of characters processed.\n       */\n      characters: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_speeches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio transcriptions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioTranscriptionsResult {\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_transcriptions.result';\n\n      /**\n       * The number of seconds processed.\n       */\n      seconds: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated vector stores usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageVectorStoresResult {\n      object: 'organization.usage.vector_stores.result';\n\n      /**\n       * The vector stores usage in bytes.\n       */\n      usage_bytes: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated code interpreter sessions usage details of the specific time\n     * bucket.\n     */\n    export interface OrganizationUsageCodeInterpreterSessionsResult {\n      /**\n       * The number of code interpreter sessions.\n       */\n      num_sessions: number;\n\n      object: 'organization.usage.code_interpreter_sessions.result';\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated file search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageFileSearchesResult {\n      /**\n       * The count of file search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.file_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n\n      /**\n       * When `group_by=vector_store_id`, this field provides the vector store ID of the\n       * grouped usage result.\n       */\n      vector_store_id?: string | null;\n    }\n\n    /**\n     * The aggregated web search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageWebSearchesResult {\n      /**\n       * The count of model requests.\n       */\n      num_model_requests: number;\n\n      /**\n       * The count of web search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.web_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=context_level`, this field provides the search context size of\n       * the grouped usage result.\n       */\n      context_level?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated costs details of the specific time bucket.\n     */\n    export interface OrganizationCostsResult {\n      object: 'organization.costs.result';\n\n      /**\n       * The monetary value in its associated currency.\n       */\n      amount?: OrganizationCostsResult.Amount;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API Key ID of the grouped\n       * costs result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the line item of the grouped\n       * costs result.\n       */\n      line_item?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * costs result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the quantity of the grouped costs\n       * result.\n       */\n      quantity?: number | null;\n    }\n\n    export namespace OrganizationCostsResult {\n      /**\n       * The monetary value in its associated currency.\n       */\n      export interface Amount {\n        /**\n         * Lowercase ISO-4217 currency e.g. \"usd\"\n         */\n        currency?: string;\n\n        /**\n         * The numeric value of the cost.\n         */\n        value?: number;\n      }\n    }\n  }\n}\n\nexport interface UsageVectorStoresResponse {\n  data: Array<UsageVectorStoresResponse.Data>;\n\n  has_more: boolean;\n\n  next_page: string | null;\n\n  object: 'page';\n}\n\nexport namespace UsageVectorStoresResponse {\n  export interface Data {\n    end_time: number;\n\n    object: 'bucket';\n\n    results: Array<\n      | Data.OrganizationUsageCompletionsResult\n      | Data.OrganizationUsageEmbeddingsResult\n      | Data.OrganizationUsageModerationsResult\n      | Data.OrganizationUsageImagesResult\n      | Data.OrganizationUsageAudioSpeechesResult\n      | Data.OrganizationUsageAudioTranscriptionsResult\n      | Data.OrganizationUsageVectorStoresResult\n      | Data.OrganizationUsageCodeInterpreterSessionsResult\n      | Data.OrganizationUsageFileSearchesResult\n      | Data.OrganizationUsageWebSearchesResult\n      | Data.OrganizationCostsResult\n    >;\n\n    start_time: number;\n  }\n\n  export namespace Data {\n    /**\n     * The aggregated completions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageCompletionsResult {\n      /**\n       * The aggregated number of text input tokens used, including cached tokens. For\n       * customers subscribe to scale tier, this includes scale tier tokens.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.completions.result';\n\n      /**\n       * The aggregated number of text output tokens used. For customers subscribe to\n       * scale tier, this includes scale tier tokens.\n       */\n      output_tokens: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=batch`, this field tells whether the grouped usage result is\n       * batch or not.\n       */\n      batch?: boolean | null;\n\n      /**\n       * The aggregated number of audio input tokens used, including cached tokens.\n       */\n      input_audio_tokens?: number;\n\n      /**\n       * The aggregated number of text input tokens that has been cached from previous\n       * requests. For customers subscribe to scale tier, this includes scale tier\n       * tokens.\n       */\n      input_cached_tokens?: number;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * The aggregated number of audio output tokens used.\n       */\n      output_audio_tokens?: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=service_tier`, this field provides the service tier of the\n       * grouped usage result.\n       */\n      service_tier?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated embeddings usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageEmbeddingsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.embeddings.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated moderations usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageModerationsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.moderations.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated images usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageImagesResult {\n      /**\n       * The number of images processed.\n       */\n      images: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.images.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=size`, this field provides the image size of the grouped usage\n       * result.\n       */\n      size?: string | null;\n\n      /**\n       * When `group_by=source`, this field provides the source of the grouped usage\n       * result, possible values are `image.generation`, `image.edit`, `image.variation`.\n       */\n      source?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio speeches usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioSpeechesResult {\n      /**\n       * The number of characters processed.\n       */\n      characters: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_speeches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio transcriptions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioTranscriptionsResult {\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_transcriptions.result';\n\n      /**\n       * The number of seconds processed.\n       */\n      seconds: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated vector stores usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageVectorStoresResult {\n      object: 'organization.usage.vector_stores.result';\n\n      /**\n       * The vector stores usage in bytes.\n       */\n      usage_bytes: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated code interpreter sessions usage details of the specific time\n     * bucket.\n     */\n    export interface OrganizationUsageCodeInterpreterSessionsResult {\n      /**\n       * The number of code interpreter sessions.\n       */\n      num_sessions: number;\n\n      object: 'organization.usage.code_interpreter_sessions.result';\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated file search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageFileSearchesResult {\n      /**\n       * The count of file search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.file_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n\n      /**\n       * When `group_by=vector_store_id`, this field provides the vector store ID of the\n       * grouped usage result.\n       */\n      vector_store_id?: string | null;\n    }\n\n    /**\n     * The aggregated web search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageWebSearchesResult {\n      /**\n       * The count of model requests.\n       */\n      num_model_requests: number;\n\n      /**\n       * The count of web search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.web_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=context_level`, this field provides the search context size of\n       * the grouped usage result.\n       */\n      context_level?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated costs details of the specific time bucket.\n     */\n    export interface OrganizationCostsResult {\n      object: 'organization.costs.result';\n\n      /**\n       * The monetary value in its associated currency.\n       */\n      amount?: OrganizationCostsResult.Amount;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API Key ID of the grouped\n       * costs result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the line item of the grouped\n       * costs result.\n       */\n      line_item?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * costs result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the quantity of the grouped costs\n       * result.\n       */\n      quantity?: number | null;\n    }\n\n    export namespace OrganizationCostsResult {\n      /**\n       * The monetary value in its associated currency.\n       */\n      export interface Amount {\n        /**\n         * Lowercase ISO-4217 currency e.g. \"usd\"\n         */\n        currency?: string;\n\n        /**\n         * The numeric value of the cost.\n         */\n        value?: number;\n      }\n    }\n  }\n}\n\nexport interface UsageWebSearchCallsResponse {\n  data: Array<UsageWebSearchCallsResponse.Data>;\n\n  has_more: boolean;\n\n  next_page: string | null;\n\n  object: 'page';\n}\n\nexport namespace UsageWebSearchCallsResponse {\n  export interface Data {\n    end_time: number;\n\n    object: 'bucket';\n\n    results: Array<\n      | Data.OrganizationUsageCompletionsResult\n      | Data.OrganizationUsageEmbeddingsResult\n      | Data.OrganizationUsageModerationsResult\n      | Data.OrganizationUsageImagesResult\n      | Data.OrganizationUsageAudioSpeechesResult\n      | Data.OrganizationUsageAudioTranscriptionsResult\n      | Data.OrganizationUsageVectorStoresResult\n      | Data.OrganizationUsageCodeInterpreterSessionsResult\n      | Data.OrganizationUsageFileSearchesResult\n      | Data.OrganizationUsageWebSearchesResult\n      | Data.OrganizationCostsResult\n    >;\n\n    start_time: number;\n  }\n\n  export namespace Data {\n    /**\n     * The aggregated completions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageCompletionsResult {\n      /**\n       * The aggregated number of text input tokens used, including cached tokens. For\n       * customers subscribe to scale tier, this includes scale tier tokens.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.completions.result';\n\n      /**\n       * The aggregated number of text output tokens used. For customers subscribe to\n       * scale tier, this includes scale tier tokens.\n       */\n      output_tokens: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=batch`, this field tells whether the grouped usage result is\n       * batch or not.\n       */\n      batch?: boolean | null;\n\n      /**\n       * The aggregated number of audio input tokens used, including cached tokens.\n       */\n      input_audio_tokens?: number;\n\n      /**\n       * The aggregated number of text input tokens that has been cached from previous\n       * requests. For customers subscribe to scale tier, this includes scale tier\n       * tokens.\n       */\n      input_cached_tokens?: number;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * The aggregated number of audio output tokens used.\n       */\n      output_audio_tokens?: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=service_tier`, this field provides the service tier of the\n       * grouped usage result.\n       */\n      service_tier?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated embeddings usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageEmbeddingsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.embeddings.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated moderations usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageModerationsResult {\n      /**\n       * The aggregated number of input tokens used.\n       */\n      input_tokens: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.moderations.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated images usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageImagesResult {\n      /**\n       * The number of images processed.\n       */\n      images: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.images.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=size`, this field provides the image size of the grouped usage\n       * result.\n       */\n      size?: string | null;\n\n      /**\n       * When `group_by=source`, this field provides the source of the grouped usage\n       * result, possible values are `image.generation`, `image.edit`, `image.variation`.\n       */\n      source?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio speeches usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioSpeechesResult {\n      /**\n       * The number of characters processed.\n       */\n      characters: number;\n\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_speeches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated audio transcriptions usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageAudioTranscriptionsResult {\n      /**\n       * The count of requests made to the model.\n       */\n      num_model_requests: number;\n\n      object: 'organization.usage.audio_transcriptions.result';\n\n      /**\n       * The number of seconds processed.\n       */\n      seconds: number;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated vector stores usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageVectorStoresResult {\n      object: 'organization.usage.vector_stores.result';\n\n      /**\n       * The vector stores usage in bytes.\n       */\n      usage_bytes: number;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated code interpreter sessions usage details of the specific time\n     * bucket.\n     */\n    export interface OrganizationUsageCodeInterpreterSessionsResult {\n      /**\n       * The number of code interpreter sessions.\n       */\n      num_sessions: number;\n\n      object: 'organization.usage.code_interpreter_sessions.result';\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n    }\n\n    /**\n     * The aggregated file search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageFileSearchesResult {\n      /**\n       * The count of file search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.file_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n\n      /**\n       * When `group_by=vector_store_id`, this field provides the vector store ID of the\n       * grouped usage result.\n       */\n      vector_store_id?: string | null;\n    }\n\n    /**\n     * The aggregated web search calls usage details of the specific time bucket.\n     */\n    export interface OrganizationUsageWebSearchesResult {\n      /**\n       * The count of model requests.\n       */\n      num_model_requests: number;\n\n      /**\n       * The count of web search calls.\n       */\n      num_requests: number;\n\n      object: 'organization.usage.web_searches.result';\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API key ID of the grouped\n       * usage result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=context_level`, this field provides the search context size of\n       * the grouped usage result.\n       */\n      context_level?: string | null;\n\n      /**\n       * When `group_by=model`, this field provides the model name of the grouped usage\n       * result.\n       */\n      model?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * usage result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=user_id`, this field provides the user ID of the grouped usage\n       * result.\n       */\n      user_id?: string | null;\n    }\n\n    /**\n     * The aggregated costs details of the specific time bucket.\n     */\n    export interface OrganizationCostsResult {\n      object: 'organization.costs.result';\n\n      /**\n       * The monetary value in its associated currency.\n       */\n      amount?: OrganizationCostsResult.Amount;\n\n      /**\n       * When `group_by=api_key_id`, this field provides the API Key ID of the grouped\n       * costs result.\n       */\n      api_key_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the line item of the grouped\n       * costs result.\n       */\n      line_item?: string | null;\n\n      /**\n       * When `group_by=project_id`, this field provides the project ID of the grouped\n       * costs result.\n       */\n      project_id?: string | null;\n\n      /**\n       * When `group_by=line_item`, this field provides the quantity of the grouped costs\n       * result.\n       */\n      quantity?: number | null;\n    }\n\n    export namespace OrganizationCostsResult {\n      /**\n       * The monetary value in its associated currency.\n       */\n      export interface Amount {\n        /**\n         * Lowercase ISO-4217 currency e.g. \"usd\"\n         */\n        currency?: string;\n\n        /**\n         * The numeric value of the cost.\n         */\n        value?: number;\n      }\n    }\n  }\n}\n\nexport interface UsageAudioSpeechesParams {\n  /**\n   * Start time (Unix seconds) of the query time range, inclusive.\n   */\n  start_time: number;\n\n  /**\n   * Return only usage for these API keys.\n   */\n  api_key_ids?: Array<string>;\n\n  /**\n   * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are\n   * supported, default to `1d`.\n   */\n  bucket_width?: '1m' | '1h' | '1d';\n\n  /**\n   * End time (Unix seconds) of the query time range, exclusive.\n   */\n  end_time?: number;\n\n  /**\n   * Group the usage data by the specified fields. Support fields include\n   * `project_id`, `user_id`, `api_key_id`, `model` or any combination of them.\n   */\n  group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'model'>;\n\n  /**\n   * Specifies the number of buckets to return.\n   *\n   * - `bucket_width=1d`: default: 7, max: 31\n   * - `bucket_width=1h`: default: 24, max: 168\n   * - `bucket_width=1m`: default: 60, max: 1440\n   */\n  limit?: number;\n\n  /**\n   * Return only usage for these models.\n   */\n  models?: Array<string>;\n\n  /**\n   * A cursor for use in pagination. Corresponding to the `next_page` field from the\n   * previous response.\n   */\n  page?: string;\n\n  /**\n   * Return only usage for these projects.\n   */\n  project_ids?: Array<string>;\n\n  /**\n   * Return only usage for these users.\n   */\n  user_ids?: Array<string>;\n}\n\nexport interface UsageAudioTranscriptionsParams {\n  /**\n   * Start time (Unix seconds) of the query time range, inclusive.\n   */\n  start_time: number;\n\n  /**\n   * Return only usage for these API keys.\n   */\n  api_key_ids?: Array<string>;\n\n  /**\n   * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are\n   * supported, default to `1d`.\n   */\n  bucket_width?: '1m' | '1h' | '1d';\n\n  /**\n   * End time (Unix seconds) of the query time range, exclusive.\n   */\n  end_time?: number;\n\n  /**\n   * Group the usage data by the specified fields. Support fields include\n   * `project_id`, `user_id`, `api_key_id`, `model` or any combination of them.\n   */\n  group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'model'>;\n\n  /**\n   * Specifies the number of buckets to return.\n   *\n   * - `bucket_width=1d`: default: 7, max: 31\n   * - `bucket_width=1h`: default: 24, max: 168\n   * - `bucket_width=1m`: default: 60, max: 1440\n   */\n  limit?: number;\n\n  /**\n   * Return only usage for these models.\n   */\n  models?: Array<string>;\n\n  /**\n   * A cursor for use in pagination. Corresponding to the `next_page` field from the\n   * previous response.\n   */\n  page?: string;\n\n  /**\n   * Return only usage for these projects.\n   */\n  project_ids?: Array<string>;\n\n  /**\n   * Return only usage for these users.\n   */\n  user_ids?: Array<string>;\n}\n\nexport interface UsageCodeInterpreterSessionsParams {\n  /**\n   * Start time (Unix seconds) of the query time range, inclusive.\n   */\n  start_time: number;\n\n  /**\n   * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are\n   * supported, default to `1d`.\n   */\n  bucket_width?: '1m' | '1h' | '1d';\n\n  /**\n   * End time (Unix seconds) of the query time range, exclusive.\n   */\n  end_time?: number;\n\n  /**\n   * Group the usage data by the specified fields. Support fields include\n   * `project_id`.\n   */\n  group_by?: Array<'project_id'>;\n\n  /**\n   * Specifies the number of buckets to return.\n   *\n   * - `bucket_width=1d`: default: 7, max: 31\n   * - `bucket_width=1h`: default: 24, max: 168\n   * - `bucket_width=1m`: default: 60, max: 1440\n   */\n  limit?: number;\n\n  /**\n   * A cursor for use in pagination. Corresponding to the `next_page` field from the\n   * previous response.\n   */\n  page?: string;\n\n  /**\n   * Return only usage for these projects.\n   */\n  project_ids?: Array<string>;\n}\n\nexport interface UsageCompletionsParams {\n  /**\n   * Start time (Unix seconds) of the query time range, inclusive.\n   */\n  start_time: number;\n\n  /**\n   * Return only usage for these API keys.\n   */\n  api_key_ids?: Array<string>;\n\n  /**\n   * If `true`, return batch jobs only. If `false`, return non-batch jobs only. By\n   * default, return both.\n   */\n  batch?: boolean;\n\n  /**\n   * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are\n   * supported, default to `1d`.\n   */\n  bucket_width?: '1m' | '1h' | '1d';\n\n  /**\n   * End time (Unix seconds) of the query time range, exclusive.\n   */\n  end_time?: number;\n\n  /**\n   * Group the usage data by the specified fields. Support fields include\n   * `project_id`, `user_id`, `api_key_id`, `model`, `batch`, `service_tier` or any\n   * combination of them.\n   */\n  group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'model' | 'batch' | 'service_tier'>;\n\n  /**\n   * Specifies the number of buckets to return.\n   *\n   * - `bucket_width=1d`: default: 7, max: 31\n   * - `bucket_width=1h`: default: 24, max: 168\n   * - `bucket_width=1m`: default: 60, max: 1440\n   */\n  limit?: number;\n\n  /**\n   * Return only usage for these models.\n   */\n  models?: Array<string>;\n\n  /**\n   * A cursor for use in pagination. Corresponding to the `next_page` field from the\n   * previous response.\n   */\n  page?: string;\n\n  /**\n   * Return only usage for these projects.\n   */\n  project_ids?: Array<string>;\n\n  /**\n   * Return only usage for these users.\n   */\n  user_ids?: Array<string>;\n}\n\nexport interface UsageCostsParams {\n  /**\n   * Start time (Unix seconds) of the query time range, inclusive.\n   */\n  start_time: number;\n\n  /**\n   * Return only costs for these API keys.\n   */\n  api_key_ids?: Array<string>;\n\n  /**\n   * Width of each time bucket in response. Currently only `1d` is supported, default\n   * to `1d`.\n   */\n  bucket_width?: '1d';\n\n  /**\n   * End time (Unix seconds) of the query time range, exclusive.\n   */\n  end_time?: number;\n\n  /**\n   * Group the costs by the specified fields. Support fields include `project_id`,\n   * `line_item`, `api_key_id` and any combination of them.\n   */\n  group_by?: Array<'project_id' | 'line_item' | 'api_key_id'>;\n\n  /**\n   * A limit on the number of buckets to be returned. Limit can range between 1 and\n   * 180, and the default is 7.\n   */\n  limit?: number;\n\n  /**\n   * A cursor for use in pagination. Corresponding to the `next_page` field from the\n   * previous response.\n   */\n  page?: string;\n\n  /**\n   * Return only costs for these projects.\n   */\n  project_ids?: Array<string>;\n}\n\nexport interface UsageEmbeddingsParams {\n  /**\n   * Start time (Unix seconds) of the query time range, inclusive.\n   */\n  start_time: number;\n\n  /**\n   * Return only usage for these API keys.\n   */\n  api_key_ids?: Array<string>;\n\n  /**\n   * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are\n   * supported, default to `1d`.\n   */\n  bucket_width?: '1m' | '1h' | '1d';\n\n  /**\n   * End time (Unix seconds) of the query time range, exclusive.\n   */\n  end_time?: number;\n\n  /**\n   * Group the usage data by the specified fields. Support fields include\n   * `project_id`, `user_id`, `api_key_id`, `model` or any combination of them.\n   */\n  group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'model'>;\n\n  /**\n   * Specifies the number of buckets to return.\n   *\n   * - `bucket_width=1d`: default: 7, max: 31\n   * - `bucket_width=1h`: default: 24, max: 168\n   * - `bucket_width=1m`: default: 60, max: 1440\n   */\n  limit?: number;\n\n  /**\n   * Return only usage for these models.\n   */\n  models?: Array<string>;\n\n  /**\n   * A cursor for use in pagination. Corresponding to the `next_page` field from the\n   * previous response.\n   */\n  page?: string;\n\n  /**\n   * Return only usage for these projects.\n   */\n  project_ids?: Array<string>;\n\n  /**\n   * Return only usage for these users.\n   */\n  user_ids?: Array<string>;\n}\n\nexport interface UsageFileSearchCallsParams {\n  /**\n   * Start time (Unix seconds) of the query time range, inclusive.\n   */\n  start_time: number;\n\n  /**\n   * Return only usage for these API keys.\n   */\n  api_key_ids?: Array<string>;\n\n  /**\n   * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are\n   * supported, default to `1d`.\n   */\n  bucket_width?: '1m' | '1h' | '1d';\n\n  /**\n   * End time (Unix seconds) of the query time range, exclusive.\n   */\n  end_time?: number;\n\n  /**\n   * Group the usage data by the specified fields. Support fields include\n   * `project_id`, `user_id`, `api_key_id`, `vector_store_id` or any combination of\n   * them.\n   */\n  group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'vector_store_id'>;\n\n  /**\n   * Specifies the number of buckets to return.\n   *\n   * - `bucket_width=1d`: default: 7, max: 31\n   * - `bucket_width=1h`: default: 24, max: 168\n   * - `bucket_width=1m`: default: 60, max: 1440\n   */\n  limit?: number;\n\n  /**\n   * A cursor for use in pagination. Corresponding to the `next_page` field from the\n   * previous response.\n   */\n  page?: string;\n\n  /**\n   * Return only usage for these projects.\n   */\n  project_ids?: Array<string>;\n\n  /**\n   * Return only usage for these users.\n   */\n  user_ids?: Array<string>;\n\n  /**\n   * Return only usage for these vector stores.\n   */\n  vector_store_ids?: Array<string>;\n}\n\nexport interface UsageImagesParams {\n  /**\n   * Start time (Unix seconds) of the query time range, inclusive.\n   */\n  start_time: number;\n\n  /**\n   * Return only usage for these API keys.\n   */\n  api_key_ids?: Array<string>;\n\n  /**\n   * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are\n   * supported, default to `1d`.\n   */\n  bucket_width?: '1m' | '1h' | '1d';\n\n  /**\n   * End time (Unix seconds) of the query time range, exclusive.\n   */\n  end_time?: number;\n\n  /**\n   * Group the usage data by the specified fields. Support fields include\n   * `project_id`, `user_id`, `api_key_id`, `model`, `size`, `source` or any\n   * combination of them.\n   */\n  group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'model' | 'size' | 'source'>;\n\n  /**\n   * Specifies the number of buckets to return.\n   *\n   * - `bucket_width=1d`: default: 7, max: 31\n   * - `bucket_width=1h`: default: 24, max: 168\n   * - `bucket_width=1m`: default: 60, max: 1440\n   */\n  limit?: number;\n\n  /**\n   * Return only usage for these models.\n   */\n  models?: Array<string>;\n\n  /**\n   * A cursor for use in pagination. Corresponding to the `next_page` field from the\n   * previous response.\n   */\n  page?: string;\n\n  /**\n   * Return only usage for these projects.\n   */\n  project_ids?: Array<string>;\n\n  /**\n   * Return only usages for these image sizes. Possible values are `256x256`,\n   * `512x512`, `1024x1024`, `1792x1792`, `1024x1792` or any combination of them.\n   */\n  sizes?: Array<'256x256' | '512x512' | '1024x1024' | '1792x1792' | '1024x1792'>;\n\n  /**\n   * Return only usages for these sources. Possible values are `image.generation`,\n   * `image.edit`, `image.variation` or any combination of them.\n   */\n  sources?: Array<'image.generation' | 'image.edit' | 'image.variation'>;\n\n  /**\n   * Return only usage for these users.\n   */\n  user_ids?: Array<string>;\n}\n\nexport interface UsageModerationsParams {\n  /**\n   * Start time (Unix seconds) of the query time range, inclusive.\n   */\n  start_time: number;\n\n  /**\n   * Return only usage for these API keys.\n   */\n  api_key_ids?: Array<string>;\n\n  /**\n   * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are\n   * supported, default to `1d`.\n   */\n  bucket_width?: '1m' | '1h' | '1d';\n\n  /**\n   * End time (Unix seconds) of the query time range, exclusive.\n   */\n  end_time?: number;\n\n  /**\n   * Group the usage data by the specified fields. Support fields include\n   * `project_id`, `user_id`, `api_key_id`, `model` or any combination of them.\n   */\n  group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'model'>;\n\n  /**\n   * Specifies the number of buckets to return.\n   *\n   * - `bucket_width=1d`: default: 7, max: 31\n   * - `bucket_width=1h`: default: 24, max: 168\n   * - `bucket_width=1m`: default: 60, max: 1440\n   */\n  limit?: number;\n\n  /**\n   * Return only usage for these models.\n   */\n  models?: Array<string>;\n\n  /**\n   * A cursor for use in pagination. Corresponding to the `next_page` field from the\n   * previous response.\n   */\n  page?: string;\n\n  /**\n   * Return only usage for these projects.\n   */\n  project_ids?: Array<string>;\n\n  /**\n   * Return only usage for these users.\n   */\n  user_ids?: Array<string>;\n}\n\nexport interface UsageVectorStoresParams {\n  /**\n   * Start time (Unix seconds) of the query time range, inclusive.\n   */\n  start_time: number;\n\n  /**\n   * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are\n   * supported, default to `1d`.\n   */\n  bucket_width?: '1m' | '1h' | '1d';\n\n  /**\n   * End time (Unix seconds) of the query time range, exclusive.\n   */\n  end_time?: number;\n\n  /**\n   * Group the usage data by the specified fields. Support fields include\n   * `project_id`.\n   */\n  group_by?: Array<'project_id'>;\n\n  /**\n   * Specifies the number of buckets to return.\n   *\n   * - `bucket_width=1d`: default: 7, max: 31\n   * - `bucket_width=1h`: default: 24, max: 168\n   * - `bucket_width=1m`: default: 60, max: 1440\n   */\n  limit?: number;\n\n  /**\n   * A cursor for use in pagination. Corresponding to the `next_page` field from the\n   * previous response.\n   */\n  page?: string;\n\n  /**\n   * Return only usage for these projects.\n   */\n  project_ids?: Array<string>;\n}\n\nexport interface UsageWebSearchCallsParams {\n  /**\n   * Start time (Unix seconds) of the query time range, inclusive.\n   */\n  start_time: number;\n\n  /**\n   * Return only usage for these API keys.\n   */\n  api_key_ids?: Array<string>;\n\n  /**\n   * Width of each time bucket in response. Currently `1m`, `1h` and `1d` are\n   * supported, default to `1d`.\n   */\n  bucket_width?: '1m' | '1h' | '1d';\n\n  /**\n   * Return only web search usage for these context levels.\n   */\n  context_levels?: Array<'low' | 'medium' | 'high'>;\n\n  /**\n   * End time (Unix seconds) of the query time range, exclusive.\n   */\n  end_time?: number;\n\n  /**\n   * Group the usage data by the specified fields. Support fields include\n   * `project_id`, `user_id`, `api_key_id`, `model`, `context_level` or any\n   * combination of them.\n   */\n  group_by?: Array<'project_id' | 'user_id' | 'api_key_id' | 'model' | 'context_level'>;\n\n  /**\n   * Specifies the number of buckets to return.\n   *\n   * - `bucket_width=1d`: default: 7, max: 31\n   * - `bucket_width=1h`: default: 24, max: 168\n   * - `bucket_width=1m`: default: 60, max: 1440\n   */\n  limit?: number;\n\n  /**\n   * Return only usage for these models.\n   */\n  models?: Array<string>;\n\n  /**\n   * A cursor for use in pagination. Corresponding to the `next_page` field from the\n   * previous response.\n   */\n  page?: string;\n\n  /**\n   * Return only usage for these projects.\n   */\n  project_ids?: Array<string>;\n\n  /**\n   * Return only usage for these users.\n   */\n  user_ids?: Array<string>;\n}\n\nexport declare namespace Usage {\n  export {\n    type UsageAudioSpeechesResponse as UsageAudioSpeechesResponse,\n    type UsageAudioTranscriptionsResponse as UsageAudioTranscriptionsResponse,\n    type UsageCodeInterpreterSessionsResponse as UsageCodeInterpreterSessionsResponse,\n    type UsageCompletionsResponse as UsageCompletionsResponse,\n    type UsageCostsResponse as UsageCostsResponse,\n    type UsageEmbeddingsResponse as UsageEmbeddingsResponse,\n    type UsageFileSearchCallsResponse as UsageFileSearchCallsResponse,\n    type UsageImagesResponse as UsageImagesResponse,\n    type UsageModerationsResponse as UsageModerationsResponse,\n    type UsageVectorStoresResponse as UsageVectorStoresResponse,\n    type UsageWebSearchCallsResponse as UsageWebSearchCallsResponse,\n    type UsageAudioSpeechesParams as UsageAudioSpeechesParams,\n    type UsageAudioTranscriptionsParams as UsageAudioTranscriptionsParams,\n    type UsageCodeInterpreterSessionsParams as UsageCodeInterpreterSessionsParams,\n    type UsageCompletionsParams as UsageCompletionsParams,\n    type UsageCostsParams as UsageCostsParams,\n    type UsageEmbeddingsParams as UsageEmbeddingsParams,\n    type UsageFileSearchCallsParams as UsageFileSearchCallsParams,\n    type UsageImagesParams as UsageImagesParams,\n    type UsageModerationsParams as UsageModerationsParams,\n    type UsageVectorStoresParams as UsageVectorStoresParams,\n    type UsageWebSearchCallsParams as UsageWebSearchCallsParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport * as RolesAPI from '../roles';\nimport { APIPromise } from '../../../../core/api-promise';\nimport { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../core/pagination';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\nexport class Roles extends APIResource {\n  /**\n   * Assigns an organization role to a group within the organization.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.groups.roles.create(\n   *     'group_id',\n   *     { role_id: 'role_id' },\n   *   );\n   * ```\n   */\n  create(groupID: string, body: RoleCreateParams, options?: RequestOptions): APIPromise<RoleCreateResponse> {\n    return this._client.post(path`/organization/groups/${groupID}/roles`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves an organization role assigned to a group.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.groups.roles.retrieve(\n   *     'role_id',\n   *     { group_id: 'group_id' },\n   *   );\n   * ```\n   */\n  retrieve(\n    roleID: string,\n    params: RoleRetrieveParams,\n    options?: RequestOptions,\n  ): APIPromise<RoleRetrieveResponse> {\n    const { group_id } = params;\n    return this._client.get(path`/organization/groups/${group_id}/roles/${roleID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Lists the organization roles assigned to a group within the organization.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const roleListResponse of client.admin.organization.groups.roles.list(\n   *   'group_id',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    groupID: string,\n    query: RoleListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<RoleListResponsesPage, RoleListResponse> {\n    return this._client.getAPIList(\n      path`/organization/groups/${groupID}/roles`,\n      NextCursorPage<RoleListResponse>,\n      { query, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Unassigns an organization role from a group within the organization.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.groups.roles.delete(\n   *     'role_id',\n   *     { group_id: 'group_id' },\n   *   );\n   * ```\n   */\n  delete(roleID: string, params: RoleDeleteParams, options?: RequestOptions): APIPromise<RoleDeleteResponse> {\n    const { group_id } = params;\n    return this._client.delete(path`/organization/groups/${group_id}/roles/${roleID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type RoleListResponsesPage = NextCursorPage<RoleListResponse>;\n\n/**\n * Role assignment linking a group to a role.\n */\nexport interface RoleCreateResponse {\n  /**\n   * Summary information about a group returned in role assignment responses.\n   */\n  group: RoleCreateResponse.Group;\n\n  /**\n   * Always `group.role`.\n   */\n  object: 'group.role';\n\n  /**\n   * Details about a role that can be assigned through the public Roles API.\n   */\n  role: RolesAPI.Role;\n}\n\nexport namespace RoleCreateResponse {\n  /**\n   * Summary information about a group returned in role assignment responses.\n   */\n  export interface Group {\n    /**\n     * Identifier for the group.\n     */\n    id: string;\n\n    /**\n     * Unix timestamp (in seconds) when the group was created.\n     */\n    created_at: number;\n\n    /**\n     * Display name of the group.\n     */\n    name: string;\n\n    /**\n     * Always `group`.\n     */\n    object: 'group';\n\n    /**\n     * Whether the group is managed through SCIM.\n     */\n    scim_managed: boolean;\n  }\n}\n\n/**\n * Detailed information about a role assignment entry returned when listing\n * assignments.\n */\nexport interface RoleRetrieveResponse {\n  /**\n   * Identifier for the role.\n   */\n  id: string;\n\n  /**\n   * Principals from which the role assignment is inherited, when available.\n   */\n  assignment_sources: Array<RoleRetrieveResponse.AssignmentSource> | null;\n\n  /**\n   * When the role was created.\n   */\n  created_at: number | null;\n\n  /**\n   * Identifier of the actor who created the role.\n   */\n  created_by: string | null;\n\n  /**\n   * User details for the actor that created the role, when available.\n   */\n  created_by_user_obj: { [key: string]: unknown } | null;\n\n  /**\n   * Description of the role.\n   */\n  description: string | null;\n\n  /**\n   * Arbitrary metadata stored on the role.\n   */\n  metadata: { [key: string]: unknown } | null;\n\n  /**\n   * Name of the role.\n   */\n  name: string;\n\n  /**\n   * Permissions associated with the role.\n   */\n  permissions: Array<string>;\n\n  /**\n   * Whether the role is predefined by OpenAI.\n   */\n  predefined_role: boolean;\n\n  /**\n   * Resource type the role applies to.\n   */\n  resource_type: string;\n\n  /**\n   * When the role was last updated.\n   */\n  updated_at: number | null;\n}\n\nexport namespace RoleRetrieveResponse {\n  export interface AssignmentSource {\n    principal_id: string;\n\n    principal_type: string;\n  }\n}\n\n/**\n * Detailed information about a role assignment entry returned when listing\n * assignments.\n */\nexport interface RoleListResponse {\n  /**\n   * Identifier for the role.\n   */\n  id: string;\n\n  /**\n   * Principals from which the role assignment is inherited, when available.\n   */\n  assignment_sources: Array<RoleListResponse.AssignmentSource> | null;\n\n  /**\n   * When the role was created.\n   */\n  created_at: number | null;\n\n  /**\n   * Identifier of the actor who created the role.\n   */\n  created_by: string | null;\n\n  /**\n   * User details for the actor that created the role, when available.\n   */\n  created_by_user_obj: { [key: string]: unknown } | null;\n\n  /**\n   * Description of the role.\n   */\n  description: string | null;\n\n  /**\n   * Arbitrary metadata stored on the role.\n   */\n  metadata: { [key: string]: unknown } | null;\n\n  /**\n   * Name of the role.\n   */\n  name: string;\n\n  /**\n   * Permissions associated with the role.\n   */\n  permissions: Array<string>;\n\n  /**\n   * Whether the role is predefined by OpenAI.\n   */\n  predefined_role: boolean;\n\n  /**\n   * Resource type the role applies to.\n   */\n  resource_type: string;\n\n  /**\n   * When the role was last updated.\n   */\n  updated_at: number | null;\n}\n\nexport namespace RoleListResponse {\n  export interface AssignmentSource {\n    principal_id: string;\n\n    principal_type: string;\n  }\n}\n\n/**\n * Confirmation payload returned after unassigning a role.\n */\nexport interface RoleDeleteResponse {\n  /**\n   * Whether the assignment was removed.\n   */\n  deleted: boolean;\n\n  /**\n   * Identifier for the deleted assignment, such as `group.role.deleted` or\n   * `user.role.deleted`.\n   */\n  object: string;\n}\n\nexport interface RoleCreateParams {\n  /**\n   * Identifier of the role to assign.\n   */\n  role_id: string;\n}\n\nexport interface RoleRetrieveParams {\n  /**\n   * The ID of the group to inspect.\n   */\n  group_id: string;\n}\n\nexport interface RoleListParams extends NextCursorPageParams {\n  /**\n   * Sort order for the returned organization roles.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface RoleDeleteParams {\n  /**\n   * The ID of the group to modify.\n   */\n  group_id: string;\n}\n\nexport declare namespace Roles {\n  export {\n    type RoleCreateResponse as RoleCreateResponse,\n    type RoleRetrieveResponse as RoleRetrieveResponse,\n    type RoleListResponse as RoleListResponse,\n    type RoleDeleteResponse as RoleDeleteResponse,\n    type RoleListResponsesPage as RoleListResponsesPage,\n    type RoleCreateParams as RoleCreateParams,\n    type RoleRetrieveParams as RoleRetrieveParams,\n    type RoleListParams as RoleListParams,\n    type RoleDeleteParams as RoleDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport { APIPromise } from '../../../../core/api-promise';\nimport { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../core/pagination';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\nexport class Users extends APIResource {\n  /**\n   * Adds a user to a group.\n   *\n   * @example\n   * ```ts\n   * const user =\n   *   await client.admin.organization.groups.users.create(\n   *     'group_id',\n   *     { user_id: 'user_id' },\n   *   );\n   * ```\n   */\n  create(groupID: string, body: UserCreateParams, options?: RequestOptions): APIPromise<UserCreateResponse> {\n    return this._client.post(path`/organization/groups/${groupID}/users`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves a user in a group.\n   *\n   * @example\n   * ```ts\n   * const user =\n   *   await client.admin.organization.groups.users.retrieve(\n   *     'user_id',\n   *     { group_id: 'group_id' },\n   *   );\n   * ```\n   */\n  retrieve(\n    userID: string,\n    params: UserRetrieveParams,\n    options?: RequestOptions,\n  ): APIPromise<UserRetrieveResponse> {\n    const { group_id } = params;\n    return this._client.get(path`/organization/groups/${group_id}/users/${userID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Lists the users assigned to a group.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const organizationGroupUser of client.admin.organization.groups.users.list(\n   *   'group_id',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    groupID: string,\n    query: UserListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<OrganizationGroupUsersPage, OrganizationGroupUser> {\n    return this._client.getAPIList(\n      path`/organization/groups/${groupID}/users`,\n      NextCursorPage<OrganizationGroupUser>,\n      { query, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Removes a user from a group.\n   *\n   * @example\n   * ```ts\n   * const user =\n   *   await client.admin.organization.groups.users.delete(\n   *     'user_id',\n   *     { group_id: 'group_id' },\n   *   );\n   * ```\n   */\n  delete(userID: string, params: UserDeleteParams, options?: RequestOptions): APIPromise<UserDeleteResponse> {\n    const { group_id } = params;\n    return this._client.delete(path`/organization/groups/${group_id}/users/${userID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type OrganizationGroupUsersPage = NextCursorPage<OrganizationGroupUser>;\n\n/**\n * Represents an individual user returned when inspecting group membership.\n */\nexport interface OrganizationGroupUser {\n  /**\n   * The identifier, which can be referenced in API endpoints\n   */\n  id: string;\n\n  /**\n   * The email address of the user.\n   */\n  email: string | null;\n\n  /**\n   * The name of the user.\n   */\n  name: string;\n}\n\n/**\n * Confirmation payload returned after adding a user to a group.\n */\nexport interface UserCreateResponse {\n  /**\n   * Identifier of the group the user was added to.\n   */\n  group_id: string;\n\n  /**\n   * Always `group.user`.\n   */\n  object: 'group.user';\n\n  /**\n   * Identifier of the user that was added.\n   */\n  user_id: string;\n}\n\n/**\n * Details about a user returned from an organization group membership lookup.\n */\nexport interface UserRetrieveResponse {\n  /**\n   * Identifier for the user.\n   */\n  id: string;\n\n  /**\n   * Email address of the user, or `null` for users without an email.\n   */\n  email: string | null;\n\n  /**\n   * Whether the user is a service account.\n   */\n  is_service_account: boolean | null;\n\n  /**\n   * Display name of the user.\n   */\n  name: string;\n\n  /**\n   * URL of the user's profile picture, if available.\n   */\n  picture: string | null;\n\n  /**\n   * The type of user.\n   */\n  user_type: 'user' | 'tenant_user';\n}\n\n/**\n * Confirmation payload returned after removing a user from a group.\n */\nexport interface UserDeleteResponse {\n  /**\n   * Whether the group membership was removed.\n   */\n  deleted: boolean;\n\n  /**\n   * Always `group.user.deleted`.\n   */\n  object: 'group.user.deleted';\n}\n\nexport interface UserCreateParams {\n  /**\n   * Identifier of the user to add to the group.\n   */\n  user_id: string;\n}\n\nexport interface UserRetrieveParams {\n  /**\n   * The ID of the group to inspect.\n   */\n  group_id: string;\n}\n\nexport interface UserListParams extends NextCursorPageParams {\n  /**\n   * Specifies the sort order of users in the list.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface UserDeleteParams {\n  /**\n   * The ID of the group to update.\n   */\n  group_id: string;\n}\n\nexport declare namespace Users {\n  export {\n    type OrganizationGroupUser as OrganizationGroupUser,\n    type UserCreateResponse as UserCreateResponse,\n    type UserRetrieveResponse as UserRetrieveResponse,\n    type UserDeleteResponse as UserDeleteResponse,\n    type OrganizationGroupUsersPage as OrganizationGroupUsersPage,\n    type UserCreateParams as UserCreateParams,\n    type UserRetrieveParams as UserRetrieveParams,\n    type UserListParams as UserListParams,\n    type UserDeleteParams as UserDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport * as RolesAPI from './roles';\nimport {\n  RoleCreateParams,\n  RoleCreateResponse,\n  RoleDeleteParams,\n  RoleDeleteResponse,\n  RoleListParams,\n  RoleListResponse,\n  RoleListResponsesPage,\n  RoleRetrieveParams,\n  RoleRetrieveResponse,\n  Roles,\n} from './roles';\nimport * as UsersAPI from './users';\nimport {\n  OrganizationGroupUser,\n  OrganizationGroupUsersPage,\n  UserCreateParams,\n  UserCreateResponse,\n  UserDeleteParams,\n  UserDeleteResponse,\n  UserListParams,\n  UserRetrieveParams,\n  UserRetrieveResponse,\n  Users,\n} from './users';\nimport { APIPromise } from '../../../../core/api-promise';\nimport { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../core/pagination';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\nexport class Groups extends APIResource {\n  users: UsersAPI.Users = new UsersAPI.Users(this._client);\n  roles: RolesAPI.Roles = new RolesAPI.Roles(this._client);\n\n  /**\n   * Creates a new group in the organization.\n   *\n   * @example\n   * ```ts\n   * const group = await client.admin.organization.groups.create(\n   *   { name: 'x' },\n   * );\n   * ```\n   */\n  create(body: GroupCreateParams, options?: RequestOptions): APIPromise<Group> {\n    return this._client.post('/organization/groups', {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves a group.\n   *\n   * @example\n   * ```ts\n   * const group =\n   *   await client.admin.organization.groups.retrieve(\n   *     'group_id',\n   *   );\n   * ```\n   */\n  retrieve(groupID: string, options?: RequestOptions): APIPromise<Group> {\n    return this._client.get(path`/organization/groups/${groupID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Updates a group's information.\n   *\n   * @example\n   * ```ts\n   * const group = await client.admin.organization.groups.update(\n   *   'group_id',\n   *   { name: 'x' },\n   * );\n   * ```\n   */\n  update(\n    groupID: string,\n    body: GroupUpdateParams,\n    options?: RequestOptions,\n  ): APIPromise<GroupUpdateResponse> {\n    return this._client.post(path`/organization/groups/${groupID}`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Lists all groups in the organization.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const group of client.admin.organization.groups.list()) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    query: GroupListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<GroupsPage, Group> {\n    return this._client.getAPIList('/organization/groups', NextCursorPage<Group>, {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Deletes a group from the organization.\n   *\n   * @example\n   * ```ts\n   * const group = await client.admin.organization.groups.delete(\n   *   'group_id',\n   * );\n   * ```\n   */\n  delete(groupID: string, options?: RequestOptions): APIPromise<GroupDeleteResponse> {\n    return this._client.delete(path`/organization/groups/${groupID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type GroupsPage = NextCursorPage<Group>;\n\n/**\n * Details about an organization group.\n */\nexport interface Group {\n  /**\n   * Identifier for the group.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (in seconds) when the group was created.\n   */\n  created_at: number;\n\n  /**\n   * The type of the group.\n   */\n  group_type: 'group' | 'tenant_group';\n\n  /**\n   * Whether the group is managed through SCIM and controlled by your identity\n   * provider.\n   */\n  is_scim_managed: boolean;\n\n  /**\n   * Display name of the group.\n   */\n  name: string;\n}\n\n/**\n * Response returned after updating a group.\n */\nexport interface GroupUpdateResponse {\n  /**\n   * Identifier for the group.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (in seconds) when the group was created.\n   */\n  created_at: number;\n\n  /**\n   * Whether the group is managed through SCIM and controlled by your identity\n   * provider.\n   */\n  is_scim_managed: boolean;\n\n  /**\n   * Updated display name for the group.\n   */\n  name: string;\n}\n\n/**\n * Confirmation payload returned after deleting a group.\n */\nexport interface GroupDeleteResponse {\n  /**\n   * Identifier of the deleted group.\n   */\n  id: string;\n\n  /**\n   * Whether the group was deleted.\n   */\n  deleted: boolean;\n\n  /**\n   * Always `group.deleted`.\n   */\n  object: 'group.deleted';\n}\n\nexport interface GroupCreateParams {\n  /**\n   * Human readable name for the group.\n   */\n  name: string;\n}\n\nexport interface GroupUpdateParams {\n  /**\n   * New display name for the group.\n   */\n  name: string;\n}\n\nexport interface GroupListParams extends NextCursorPageParams {\n  /**\n   * Specifies the sort order of the returned groups.\n   */\n  order?: 'asc' | 'desc';\n}\n\nGroups.Users = Users;\nGroups.Roles = Roles;\n\nexport declare namespace Groups {\n  export {\n    type Group as Group,\n    type GroupUpdateResponse as GroupUpdateResponse,\n    type GroupDeleteResponse as GroupDeleteResponse,\n    type GroupsPage as GroupsPage,\n    type GroupCreateParams as GroupCreateParams,\n    type GroupUpdateParams as GroupUpdateParams,\n    type GroupListParams as GroupListParams,\n  };\n\n  export {\n    Users as Users,\n    type OrganizationGroupUser as OrganizationGroupUser,\n    type UserCreateResponse as UserCreateResponse,\n    type UserRetrieveResponse as UserRetrieveResponse,\n    type UserDeleteResponse as UserDeleteResponse,\n    type OrganizationGroupUsersPage as OrganizationGroupUsersPage,\n    type UserCreateParams as UserCreateParams,\n    type UserRetrieveParams as UserRetrieveParams,\n    type UserListParams as UserListParams,\n    type UserDeleteParams as UserDeleteParams,\n  };\n\n  export {\n    Roles as Roles,\n    type RoleCreateResponse as RoleCreateResponse,\n    type RoleRetrieveResponse as RoleRetrieveResponse,\n    type RoleListResponse as RoleListResponse,\n    type RoleDeleteResponse as RoleDeleteResponse,\n    type RoleListResponsesPage as RoleListResponsesPage,\n    type RoleCreateParams as RoleCreateParams,\n    type RoleRetrieveParams as RoleRetrieveParams,\n    type RoleListParams as RoleListParams,\n    type RoleDeleteParams as RoleDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport { APIPromise } from '../../../../core/api-promise';\nimport {\n  ConversationCursorPage,\n  type ConversationCursorPageParams,\n  PagePromise,\n} from '../../../../core/pagination';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\nexport class APIKeys extends APIResource {\n  /**\n   * Retrieves an API key in the project.\n   *\n   * @example\n   * ```ts\n   * const projectAPIKey =\n   *   await client.admin.organization.projects.apiKeys.retrieve(\n   *     'api_key_id',\n   *     { project_id: 'project_id' },\n   *   );\n   * ```\n   */\n  retrieve(\n    apiKeyID: string,\n    params: APIKeyRetrieveParams,\n    options?: RequestOptions,\n  ): APIPromise<ProjectAPIKey> {\n    const { project_id } = params;\n    return this._client.get(path`/organization/projects/${project_id}/api_keys/${apiKeyID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Returns a list of API keys in the project.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const projectAPIKey of client.admin.organization.projects.apiKeys.list(\n   *   'project_id',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    projectID: string,\n    query: APIKeyListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<ProjectAPIKeysPage, ProjectAPIKey> {\n    return this._client.getAPIList(\n      path`/organization/projects/${projectID}/api_keys`,\n      ConversationCursorPage<ProjectAPIKey>,\n      { query, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Deletes an API key from the project.\n   *\n   * Returns confirmation of the key deletion, or an error if the key belonged to a\n   * service account.\n   *\n   * @example\n   * ```ts\n   * const apiKey =\n   *   await client.admin.organization.projects.apiKeys.delete(\n   *     'api_key_id',\n   *     { project_id: 'project_id' },\n   *   );\n   * ```\n   */\n  delete(\n    apiKeyID: string,\n    params: APIKeyDeleteParams,\n    options?: RequestOptions,\n  ): APIPromise<APIKeyDeleteResponse> {\n    const { project_id } = params;\n    return this._client.delete(path`/organization/projects/${project_id}/api_keys/${apiKeyID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type ProjectAPIKeysPage = ConversationCursorPage<ProjectAPIKey>;\n\n/**\n * Represents an individual API key in a project.\n */\nexport interface ProjectAPIKey {\n  /**\n   * The identifier, which can be referenced in API endpoints\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the API key was created\n   */\n  created_at: number;\n\n  /**\n   * The Unix timestamp (in seconds) of when the API key was last used.\n   */\n  last_used_at: number | null;\n\n  /**\n   * The name of the API key\n   */\n  name: string;\n\n  /**\n   * The object type, which is always `organization.project.api_key`\n   */\n  object: 'organization.project.api_key';\n\n  owner: ProjectAPIKey.Owner;\n\n  /**\n   * The redacted value of the API key\n   */\n  redacted_value: string;\n}\n\nexport namespace ProjectAPIKey {\n  export interface Owner {\n    /**\n     * The service account that owns a project API key.\n     */\n    service_account?: Owner.ServiceAccount;\n\n    /**\n     * `user` or `service_account`\n     */\n    type?: 'user' | 'service_account';\n\n    /**\n     * The user that owns a project API key.\n     */\n    user?: Owner.User;\n  }\n\n  export namespace Owner {\n    /**\n     * The service account that owns a project API key.\n     */\n    export interface ServiceAccount {\n      /**\n       * The identifier, which can be referenced in API endpoints\n       */\n      id: string;\n\n      /**\n       * The Unix timestamp (in seconds) of when the service account was created.\n       */\n      created_at: number;\n\n      /**\n       * The name of the service account.\n       */\n      name: string;\n\n      /**\n       * The service account's project role.\n       */\n      role: string;\n    }\n\n    /**\n     * The user that owns a project API key.\n     */\n    export interface User {\n      /**\n       * The identifier, which can be referenced in API endpoints\n       */\n      id: string;\n\n      /**\n       * The Unix timestamp (in seconds) of when the user was created.\n       */\n      created_at: number;\n\n      /**\n       * The email address of the user.\n       */\n      email: string;\n\n      /**\n       * The name of the user.\n       */\n      name: string;\n\n      /**\n       * The user's project role.\n       */\n      role: string;\n    }\n  }\n}\n\nexport interface APIKeyDeleteResponse {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'organization.project.api_key.deleted';\n}\n\nexport interface APIKeyRetrieveParams {\n  /**\n   * The ID of the project.\n   */\n  project_id: string;\n}\n\nexport interface APIKeyListParams extends ConversationCursorPageParams {}\n\nexport interface APIKeyDeleteParams {\n  /**\n   * The ID of the project.\n   */\n  project_id: string;\n}\n\nexport declare namespace APIKeys {\n  export {\n    type ProjectAPIKey as ProjectAPIKey,\n    type APIKeyDeleteResponse as APIKeyDeleteResponse,\n    type ProjectAPIKeysPage as ProjectAPIKeysPage,\n    type APIKeyRetrieveParams as APIKeyRetrieveParams,\n    type APIKeyListParams as APIKeyListParams,\n    type APIKeyDeleteParams as APIKeyDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport {\n  ConversationCursorPage,\n  type ConversationCursorPageParams,\n  Page,\n  PagePromise,\n} from '../../../../core/pagination';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\nexport class Certificates extends APIResource {\n  /**\n   * List certificates for this project.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const certificateListResponse of client.admin.organization.projects.certificates.list(\n   *   'project_id',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    projectID: string,\n    query: CertificateListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<CertificateListResponsesPage, CertificateListResponse> {\n    return this._client.getAPIList(\n      path`/organization/projects/${projectID}/certificates`,\n      ConversationCursorPage<CertificateListResponse>,\n      { query, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Activate certificates at the project level.\n   *\n   * You can atomically and idempotently activate up to 10 certificates at a time.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const certificateActivateResponse of client.admin.organization.projects.certificates.activate(\n   *   'project_id',\n   *   { certificate_ids: ['cert_abc'] },\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  activate(\n    projectID: string,\n    body: CertificateActivateParams,\n    options?: RequestOptions,\n  ): PagePromise<CertificateActivateResponsesPage, CertificateActivateResponse> {\n    return this._client.getAPIList(\n      path`/organization/projects/${projectID}/certificates/activate`,\n      Page<CertificateActivateResponse>,\n      { body, method: 'post', ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Deactivate certificates at the project level. You can atomically and\n   * idempotently deactivate up to 10 certificates at a time.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const certificateDeactivateResponse of client.admin.organization.projects.certificates.deactivate(\n   *   'project_id',\n   *   { certificate_ids: ['cert_abc'] },\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  deactivate(\n    projectID: string,\n    body: CertificateDeactivateParams,\n    options?: RequestOptions,\n  ): PagePromise<CertificateDeactivateResponsesPage, CertificateDeactivateResponse> {\n    return this._client.getAPIList(\n      path`/organization/projects/${projectID}/certificates/deactivate`,\n      Page<CertificateDeactivateResponse>,\n      { body, method: 'post', ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n}\n\nexport type CertificateListResponsesPage = ConversationCursorPage<CertificateListResponse>;\n\n// Note: no pagination actually occurs yet, this is for forwards-compatibility.\nexport type CertificateActivateResponsesPage = Page<CertificateActivateResponse>;\n\n// Note: no pagination actually occurs yet, this is for forwards-compatibility.\nexport type CertificateDeactivateResponsesPage = Page<CertificateDeactivateResponse>;\n\n/**\n * Represents an individual certificate configured at the project level.\n */\nexport interface CertificateListResponse {\n  /**\n   * The identifier, which can be referenced in API endpoints\n   */\n  id: string;\n\n  /**\n   * Whether the certificate is currently active at the project level.\n   */\n  active: boolean;\n\n  certificate_details: CertificateListResponse.CertificateDetails;\n\n  /**\n   * The Unix timestamp (in seconds) of when the certificate was uploaded.\n   */\n  created_at: number;\n\n  /**\n   * The name of the certificate.\n   */\n  name: string | null;\n\n  /**\n   * The object type, which is always `organization.project.certificate`.\n   */\n  object: 'organization.project.certificate';\n}\n\nexport namespace CertificateListResponse {\n  export interface CertificateDetails {\n    /**\n     * The Unix timestamp (in seconds) of when the certificate expires.\n     */\n    expires_at?: number;\n\n    /**\n     * The Unix timestamp (in seconds) of when the certificate becomes valid.\n     */\n    valid_at?: number;\n  }\n}\n\n/**\n * Represents an individual certificate configured at the project level.\n */\nexport interface CertificateActivateResponse {\n  /**\n   * The identifier, which can be referenced in API endpoints\n   */\n  id: string;\n\n  /**\n   * Whether the certificate is currently active at the project level.\n   */\n  active: boolean;\n\n  certificate_details: CertificateActivateResponse.CertificateDetails;\n\n  /**\n   * The Unix timestamp (in seconds) of when the certificate was uploaded.\n   */\n  created_at: number;\n\n  /**\n   * The name of the certificate.\n   */\n  name: string | null;\n\n  /**\n   * The object type, which is always `organization.project.certificate`.\n   */\n  object: 'organization.project.certificate';\n}\n\nexport namespace CertificateActivateResponse {\n  export interface CertificateDetails {\n    /**\n     * The Unix timestamp (in seconds) of when the certificate expires.\n     */\n    expires_at?: number;\n\n    /**\n     * The Unix timestamp (in seconds) of when the certificate becomes valid.\n     */\n    valid_at?: number;\n  }\n}\n\n/**\n * Represents an individual certificate configured at the project level.\n */\nexport interface CertificateDeactivateResponse {\n  /**\n   * The identifier, which can be referenced in API endpoints\n   */\n  id: string;\n\n  /**\n   * Whether the certificate is currently active at the project level.\n   */\n  active: boolean;\n\n  certificate_details: CertificateDeactivateResponse.CertificateDetails;\n\n  /**\n   * The Unix timestamp (in seconds) of when the certificate was uploaded.\n   */\n  created_at: number;\n\n  /**\n   * The name of the certificate.\n   */\n  name: string | null;\n\n  /**\n   * The object type, which is always `organization.project.certificate`.\n   */\n  object: 'organization.project.certificate';\n}\n\nexport namespace CertificateDeactivateResponse {\n  export interface CertificateDetails {\n    /**\n     * The Unix timestamp (in seconds) of when the certificate expires.\n     */\n    expires_at?: number;\n\n    /**\n     * The Unix timestamp (in seconds) of when the certificate becomes valid.\n     */\n    valid_at?: number;\n  }\n}\n\nexport interface CertificateListParams extends ConversationCursorPageParams {\n  /**\n   * Sort order by the `created_at` timestamp of the objects. `asc` for ascending\n   * order and `desc` for descending order.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface CertificateActivateParams {\n  certificate_ids: Array<string>;\n}\n\nexport interface CertificateDeactivateParams {\n  certificate_ids: Array<string>;\n}\n\nexport declare namespace Certificates {\n  export {\n    type CertificateListResponse as CertificateListResponse,\n    type CertificateActivateResponse as CertificateActivateResponse,\n    type CertificateDeactivateResponse as CertificateDeactivateResponse,\n    type CertificateListResponsesPage as CertificateListResponsesPage,\n    type CertificateActivateResponsesPage as CertificateActivateResponsesPage,\n    type CertificateDeactivateResponsesPage as CertificateDeactivateResponsesPage,\n    type CertificateListParams as CertificateListParams,\n    type CertificateActivateParams as CertificateActivateParams,\n    type CertificateDeactivateParams as CertificateDeactivateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport { APIPromise } from '../../../../core/api-promise';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\nexport class DataRetention extends APIResource {\n  /**\n   * Retrieves project data retention controls.\n   *\n   * @example\n   * ```ts\n   * const projectDataRetention =\n   *   await client.admin.organization.projects.dataRetention.retrieve(\n   *     'project_id',\n   *   );\n   * ```\n   */\n  retrieve(projectID: string, options?: RequestOptions): APIPromise<ProjectDataRetention> {\n    return this._client.get(path`/organization/projects/${projectID}/data_retention`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Updates project data retention controls.\n   *\n   * @example\n   * ```ts\n   * const projectDataRetention =\n   *   await client.admin.organization.projects.dataRetention.update(\n   *     'project_id',\n   *     { retention_type: 'organization_default' },\n   *   );\n   * ```\n   */\n  update(\n    projectID: string,\n    body: DataRetentionUpdateParams,\n    options?: RequestOptions,\n  ): APIPromise<ProjectDataRetention> {\n    return this._client.post(path`/organization/projects/${projectID}/data_retention`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\n/**\n * Represents a project's data retention control setting.\n */\nexport interface ProjectDataRetention {\n  /**\n   * The object type, which is always `project.data_retention`.\n   */\n  object: 'project.data_retention';\n\n  /**\n   * The configured project data retention type.\n   */\n  type:\n    | 'organization_default'\n    | 'none'\n    | 'zero_data_retention'\n    | 'modified_abuse_monitoring'\n    | 'enhanced_zero_data_retention'\n    | 'enhanced_modified_abuse_monitoring';\n}\n\nexport interface DataRetentionUpdateParams {\n  /**\n   * The desired project data retention type.\n   */\n  retention_type:\n    | 'organization_default'\n    | 'none'\n    | 'zero_data_retention'\n    | 'modified_abuse_monitoring'\n    | 'enhanced_zero_data_retention'\n    | 'enhanced_modified_abuse_monitoring';\n}\n\nexport declare namespace DataRetention {\n  export {\n    type ProjectDataRetention as ProjectDataRetention,\n    type DataRetentionUpdateParams as DataRetentionUpdateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport { APIPromise } from '../../../../core/api-promise';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\nexport class HostedToolPermissions extends APIResource {\n  /**\n   * Returns hosted tool permissions for a project.\n   *\n   * @example\n   * ```ts\n   * const projectHostedToolPermissions =\n   *   await client.admin.organization.projects.hostedToolPermissions.retrieve(\n   *     'project_id',\n   *   );\n   * ```\n   */\n  retrieve(projectID: string, options?: RequestOptions): APIPromise<ProjectHostedToolPermissions> {\n    return this._client.get(path`/organization/projects/${projectID}/hosted_tool_permissions`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Updates hosted tool permissions for a project.\n   *\n   * @example\n   * ```ts\n   * const projectHostedToolPermissions =\n   *   await client.admin.organization.projects.hostedToolPermissions.update(\n   *     'project_id',\n   *   );\n   * ```\n   */\n  update(\n    projectID: string,\n    body: HostedToolPermissionUpdateParams,\n    options?: RequestOptions,\n  ): APIPromise<ProjectHostedToolPermissions> {\n    return this._client.post(path`/organization/projects/${projectID}/hosted_tool_permissions`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\n/**\n * Represents hosted tool permissions for a project.\n */\nexport interface ProjectHostedToolPermissions {\n  /**\n   * Permission state for a single hosted tool on a project.\n   */\n  code_interpreter: ProjectHostedToolPermissions.CodeInterpreter;\n\n  /**\n   * Permission state for a single hosted tool on a project.\n   */\n  file_search: ProjectHostedToolPermissions.FileSearch;\n\n  /**\n   * Permission state for a single hosted tool on a project.\n   */\n  image_generation: ProjectHostedToolPermissions.ImageGeneration;\n\n  /**\n   * Permission state for a single hosted tool on a project.\n   */\n  mcp: ProjectHostedToolPermissions.Mcp;\n\n  /**\n   * Permission state for a single hosted tool on a project.\n   */\n  web_search: ProjectHostedToolPermissions.WebSearch;\n}\n\nexport namespace ProjectHostedToolPermissions {\n  /**\n   * Permission state for a single hosted tool on a project.\n   */\n  export interface CodeInterpreter {\n    /**\n     * Whether the hosted tool is enabled for the project.\n     */\n    enabled: boolean;\n  }\n\n  /**\n   * Permission state for a single hosted tool on a project.\n   */\n  export interface FileSearch {\n    /**\n     * Whether the hosted tool is enabled for the project.\n     */\n    enabled: boolean;\n  }\n\n  /**\n   * Permission state for a single hosted tool on a project.\n   */\n  export interface ImageGeneration {\n    /**\n     * Whether the hosted tool is enabled for the project.\n     */\n    enabled: boolean;\n  }\n\n  /**\n   * Permission state for a single hosted tool on a project.\n   */\n  export interface Mcp {\n    /**\n     * Whether the hosted tool is enabled for the project.\n     */\n    enabled: boolean;\n  }\n\n  /**\n   * Permission state for a single hosted tool on a project.\n   */\n  export interface WebSearch {\n    /**\n     * Whether the hosted tool is enabled for the project.\n     */\n    enabled: boolean;\n  }\n}\n\nexport interface HostedToolPermissionUpdateParams {\n  /**\n   * The code interpreter permission update.\n   */\n  code_interpreter?: HostedToolPermissionUpdateParams.CodeInterpreter | null;\n\n  /**\n   * The file search permission update.\n   */\n  file_search?: HostedToolPermissionUpdateParams.FileSearch | null;\n\n  /**\n   * The image generation permission update.\n   */\n  image_generation?: HostedToolPermissionUpdateParams.ImageGeneration | null;\n\n  /**\n   * The MCP permission update.\n   */\n  mcp?: HostedToolPermissionUpdateParams.Mcp | null;\n\n  /**\n   * The web search permission update.\n   */\n  web_search?: HostedToolPermissionUpdateParams.WebSearch | null;\n}\n\nexport namespace HostedToolPermissionUpdateParams {\n  /**\n   * The code interpreter permission update.\n   */\n  export interface CodeInterpreter {\n    /**\n     * Whether to enable the hosted tool for the project.\n     */\n    enabled: boolean;\n  }\n\n  /**\n   * The file search permission update.\n   */\n  export interface FileSearch {\n    /**\n     * Whether to enable the hosted tool for the project.\n     */\n    enabled: boolean;\n  }\n\n  /**\n   * The image generation permission update.\n   */\n  export interface ImageGeneration {\n    /**\n     * Whether to enable the hosted tool for the project.\n     */\n    enabled: boolean;\n  }\n\n  /**\n   * The MCP permission update.\n   */\n  export interface Mcp {\n    /**\n     * Whether to enable the hosted tool for the project.\n     */\n    enabled: boolean;\n  }\n\n  /**\n   * The web search permission update.\n   */\n  export interface WebSearch {\n    /**\n     * Whether to enable the hosted tool for the project.\n     */\n    enabled: boolean;\n  }\n}\n\nexport declare namespace HostedToolPermissions {\n  export {\n    type ProjectHostedToolPermissions as ProjectHostedToolPermissions,\n    type HostedToolPermissionUpdateParams as HostedToolPermissionUpdateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport { APIPromise } from '../../../../core/api-promise';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\nexport class ModelPermissions extends APIResource {\n  /**\n   * Returns model permissions for a project.\n   *\n   * @example\n   * ```ts\n   * const projectModelPermissions =\n   *   await client.admin.organization.projects.modelPermissions.retrieve(\n   *     'project_id',\n   *   );\n   * ```\n   */\n  retrieve(projectID: string, options?: RequestOptions): APIPromise<ProjectModelPermissions> {\n    return this._client.get(path`/organization/projects/${projectID}/model_permissions`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Updates model permissions for a project.\n   *\n   * @example\n   * ```ts\n   * const projectModelPermissions =\n   *   await client.admin.organization.projects.modelPermissions.update(\n   *     'project_id',\n   *     { mode: 'allow_list', model_ids: ['string'] },\n   *   );\n   * ```\n   */\n  update(\n    projectID: string,\n    body: ModelPermissionUpdateParams,\n    options?: RequestOptions,\n  ): APIPromise<ProjectModelPermissions> {\n    return this._client.post(path`/organization/projects/${projectID}/model_permissions`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Deletes model permissions for a project.\n   *\n   * @example\n   * ```ts\n   * const projectModelPermissionsDeleted =\n   *   await client.admin.organization.projects.modelPermissions.delete(\n   *     'project_id',\n   *   );\n   * ```\n   */\n  delete(projectID: string, options?: RequestOptions): APIPromise<ProjectModelPermissionsDeleted> {\n    return this._client.delete(path`/organization/projects/${projectID}/model_permissions`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\n/**\n * Represents the model allowlist or denylist policy for a project.\n */\nexport interface ProjectModelPermissions {\n  /**\n   * Whether the project uses an allowlist or a denylist.\n   */\n  mode: 'allow_list' | 'deny_list';\n\n  /**\n   * The model IDs included in the model permissions policy.\n   */\n  model_ids: Array<string>;\n\n  /**\n   * The object type, which is always `project.model_permissions`.\n   */\n  object: 'project.model_permissions';\n}\n\n/**\n * Confirmation payload returned after deleting project model permissions.\n */\nexport interface ProjectModelPermissionsDeleted {\n  /**\n   * Whether the project model permissions were deleted.\n   */\n  deleted: boolean;\n\n  /**\n   * The object type, which is always `project.model_permissions.deleted`.\n   */\n  object: 'project.model_permissions.deleted';\n}\n\nexport interface ModelPermissionUpdateParams {\n  /**\n   * The model permissions mode to apply.\n   */\n  mode: 'allow_list' | 'deny_list';\n\n  /**\n   * The model IDs included in this permissions policy.\n   */\n  model_ids: Array<string>;\n}\n\nexport declare namespace ModelPermissions {\n  export {\n    type ProjectModelPermissions as ProjectModelPermissions,\n    type ProjectModelPermissionsDeleted as ProjectModelPermissionsDeleted,\n    type ModelPermissionUpdateParams as ModelPermissionUpdateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport { APIPromise } from '../../../../core/api-promise';\nimport {\n  ConversationCursorPage,\n  type ConversationCursorPageParams,\n  PagePromise,\n} from '../../../../core/pagination';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\nexport class RateLimits extends APIResource {\n  /**\n   * Returns the rate limits per model for a project.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const projectRateLimit of client.admin.organization.projects.rateLimits.listRateLimits(\n   *   'project_id',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  listRateLimits(\n    projectID: string,\n    query: RateLimitListRateLimitsParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<ProjectRateLimitsPage, ProjectRateLimit> {\n    return this._client.getAPIList(\n      path`/organization/projects/${projectID}/rate_limits`,\n      ConversationCursorPage<ProjectRateLimit>,\n      { query, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Updates a project rate limit.\n   *\n   * @example\n   * ```ts\n   * const projectRateLimit =\n   *   await client.admin.organization.projects.rateLimits.updateRateLimit(\n   *     'rate_limit_id',\n   *     { project_id: 'project_id' },\n   *   );\n   * ```\n   */\n  updateRateLimit(\n    rateLimitID: string,\n    params: RateLimitUpdateRateLimitParams,\n    options?: RequestOptions,\n  ): APIPromise<ProjectRateLimit> {\n    const { project_id, ...body } = params;\n    return this._client.post(path`/organization/projects/${project_id}/rate_limits/${rateLimitID}`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type ProjectRateLimitsPage = ConversationCursorPage<ProjectRateLimit>;\n\n/**\n * Represents a project rate limit config.\n */\nexport interface ProjectRateLimit {\n  /**\n   * The identifier, which can be referenced in API endpoints.\n   */\n  id: string;\n\n  /**\n   * The maximum requests per minute.\n   */\n  max_requests_per_1_minute: number;\n\n  /**\n   * The maximum tokens per minute.\n   */\n  max_tokens_per_1_minute: number;\n\n  /**\n   * The model this rate limit applies to.\n   */\n  model: string;\n\n  /**\n   * The object type, which is always `project.rate_limit`\n   */\n  object: 'project.rate_limit';\n\n  /**\n   * The maximum batch input tokens per day. Only present for relevant models.\n   */\n  batch_1_day_max_input_tokens?: number;\n\n  /**\n   * The maximum audio megabytes per minute. Only present for relevant models.\n   */\n  max_audio_megabytes_per_1_minute?: number;\n\n  /**\n   * The maximum images per minute. Only present for relevant models.\n   */\n  max_images_per_1_minute?: number;\n\n  /**\n   * The maximum requests per day. Only present for relevant models.\n   */\n  max_requests_per_1_day?: number;\n}\n\nexport interface RateLimitListRateLimitsParams extends ConversationCursorPageParams {\n  /**\n   * A cursor for use in pagination. `before` is an object ID that defines your place\n   * in the list. For instance, if you make a list request and receive 100 objects,\n   * beginning with obj_foo, your subsequent call can include before=obj_foo in order\n   * to fetch the previous page of the list.\n   */\n  before?: string;\n}\n\nexport interface RateLimitUpdateRateLimitParams {\n  /**\n   * Path param: The ID of the project.\n   */\n  project_id: string;\n\n  /**\n   * Body param: The maximum batch input tokens per day. Only relevant for certain\n   * models.\n   */\n  batch_1_day_max_input_tokens?: number;\n\n  /**\n   * Body param: The maximum audio megabytes per minute. Only relevant for certain\n   * models.\n   */\n  max_audio_megabytes_per_1_minute?: number;\n\n  /**\n   * Body param: The maximum images per minute. Only relevant for certain models.\n   */\n  max_images_per_1_minute?: number;\n\n  /**\n   * Body param: The maximum requests per day. Only relevant for certain models.\n   */\n  max_requests_per_1_day?: number;\n\n  /**\n   * Body param: The maximum requests per minute.\n   */\n  max_requests_per_1_minute?: number;\n\n  /**\n   * Body param: The maximum tokens per minute.\n   */\n  max_tokens_per_1_minute?: number;\n}\n\nexport declare namespace RateLimits {\n  export {\n    type ProjectRateLimit as ProjectRateLimit,\n    type ProjectRateLimitsPage as ProjectRateLimitsPage,\n    type RateLimitListRateLimitsParams as RateLimitListRateLimitsParams,\n    type RateLimitUpdateRateLimitParams as RateLimitUpdateRateLimitParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport * as RolesAPI from '../roles';\nimport { RolesPage } from '../roles';\nimport { APIPromise } from '../../../../core/api-promise';\nimport { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../core/pagination';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\nexport class Roles extends APIResource {\n  /**\n   * Creates a custom role for a project.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.projects.roles.create(\n   *     'project_id',\n   *     { permissions: ['string'], role_name: 'role_name' },\n   *   );\n   * ```\n   */\n  create(projectID: string, body: RoleCreateParams, options?: RequestOptions): APIPromise<RolesAPI.Role> {\n    return this._client.post(path`/projects/${projectID}/roles`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves a project role.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.projects.roles.retrieve(\n   *     'role_id',\n   *     { project_id: 'project_id' },\n   *   );\n   * ```\n   */\n  retrieve(roleID: string, params: RoleRetrieveParams, options?: RequestOptions): APIPromise<RolesAPI.Role> {\n    const { project_id } = params;\n    return this._client.get(path`/projects/${project_id}/roles/${roleID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Updates an existing project role.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.projects.roles.update(\n   *     'role_id',\n   *     { project_id: 'project_id' },\n   *   );\n   * ```\n   */\n  update(roleID: string, params: RoleUpdateParams, options?: RequestOptions): APIPromise<RolesAPI.Role> {\n    const { project_id, ...body } = params;\n    return this._client.post(path`/projects/${project_id}/roles/${roleID}`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Lists the roles configured for a project.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const role of client.admin.organization.projects.roles.list(\n   *   'project_id',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    projectID: string,\n    query: RoleListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<RolesPage, RolesAPI.Role> {\n    return this._client.getAPIList(path`/projects/${projectID}/roles`, NextCursorPage<RolesAPI.Role>, {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Deletes a custom role from a project.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.projects.roles.delete(\n   *     'role_id',\n   *     { project_id: 'project_id' },\n   *   );\n   * ```\n   */\n  delete(roleID: string, params: RoleDeleteParams, options?: RequestOptions): APIPromise<RoleDeleteResponse> {\n    const { project_id } = params;\n    return this._client.delete(path`/projects/${project_id}/roles/${roleID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\n/**\n * Confirmation payload returned after deleting a role.\n */\nexport interface RoleDeleteResponse {\n  /**\n   * Identifier of the deleted role.\n   */\n  id: string;\n\n  /**\n   * Whether the role was deleted.\n   */\n  deleted: boolean;\n\n  /**\n   * Always `role.deleted`.\n   */\n  object: 'role.deleted';\n}\n\nexport interface RoleCreateParams {\n  /**\n   * Permissions to grant to the role.\n   */\n  permissions: Array<string>;\n\n  /**\n   * Unique name for the role.\n   */\n  role_name: string;\n\n  /**\n   * Optional description of the role.\n   */\n  description?: string | null;\n}\n\nexport interface RoleRetrieveParams {\n  /**\n   * The ID of the project.\n   */\n  project_id: string;\n}\n\nexport interface RoleUpdateParams {\n  /**\n   * Path param: The ID of the project to update.\n   */\n  project_id: string;\n\n  /**\n   * Body param: New description for the role.\n   */\n  description?: string | null;\n\n  /**\n   * Body param: Updated set of permissions for the role.\n   */\n  permissions?: Array<string> | null;\n\n  /**\n   * Body param: New name for the role.\n   */\n  role_name?: string | null;\n}\n\nexport interface RoleListParams extends NextCursorPageParams {\n  /**\n   * Sort order for the returned roles.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface RoleDeleteParams {\n  /**\n   * The ID of the project to update.\n   */\n  project_id: string;\n}\n\nexport declare namespace Roles {\n  export {\n    type RoleDeleteResponse as RoleDeleteResponse,\n    type RoleCreateParams as RoleCreateParams,\n    type RoleRetrieveParams as RoleRetrieveParams,\n    type RoleUpdateParams as RoleUpdateParams,\n    type RoleListParams as RoleListParams,\n    type RoleDeleteParams as RoleDeleteParams,\n  };\n}\n\nexport { type RolesPage };\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport { APIPromise } from '../../../../core/api-promise';\nimport {\n  ConversationCursorPage,\n  type ConversationCursorPageParams,\n  PagePromise,\n} from '../../../../core/pagination';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\nexport class ServiceAccounts extends APIResource {\n  /**\n   * Creates a new service account in the project. This also returns an unredacted\n   * API key for the service account.\n   *\n   * @example\n   * ```ts\n   * const serviceAccount =\n   *   await client.admin.organization.projects.serviceAccounts.create(\n   *     'project_id',\n   *     { name: 'name' },\n   *   );\n   * ```\n   */\n  create(\n    projectID: string,\n    body: ServiceAccountCreateParams,\n    options?: RequestOptions,\n  ): APIPromise<ServiceAccountCreateResponse> {\n    return this._client.post(path`/organization/projects/${projectID}/service_accounts`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves a service account in the project.\n   *\n   * @example\n   * ```ts\n   * const projectServiceAccount =\n   *   await client.admin.organization.projects.serviceAccounts.retrieve(\n   *     'service_account_id',\n   *     { project_id: 'project_id' },\n   *   );\n   * ```\n   */\n  retrieve(\n    serviceAccountID: string,\n    params: ServiceAccountRetrieveParams,\n    options?: RequestOptions,\n  ): APIPromise<ProjectServiceAccount> {\n    const { project_id } = params;\n    return this._client.get(path`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Updates a service account in the project.\n   *\n   * @example\n   * ```ts\n   * const projectServiceAccount =\n   *   await client.admin.organization.projects.serviceAccounts.update(\n   *     'service_account_id',\n   *     { project_id: 'project_id' },\n   *   );\n   * ```\n   */\n  update(\n    serviceAccountID: string,\n    params: ServiceAccountUpdateParams,\n    options?: RequestOptions,\n  ): APIPromise<ProjectServiceAccount> {\n    const { project_id, ...body } = params;\n    return this._client.post(\n      path`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`,\n      { body, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Returns a list of service accounts in the project.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const projectServiceAccount of client.admin.organization.projects.serviceAccounts.list(\n   *   'project_id',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    projectID: string,\n    query: ServiceAccountListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<ProjectServiceAccountsPage, ProjectServiceAccount> {\n    return this._client.getAPIList(\n      path`/organization/projects/${projectID}/service_accounts`,\n      ConversationCursorPage<ProjectServiceAccount>,\n      { query, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Deletes a service account from the project.\n   *\n   * Returns confirmation of service account deletion, or an error if the project is\n   * archived (archived projects have no service accounts).\n   *\n   * @example\n   * ```ts\n   * const serviceAccount =\n   *   await client.admin.organization.projects.serviceAccounts.delete(\n   *     'service_account_id',\n   *     { project_id: 'project_id' },\n   *   );\n   * ```\n   */\n  delete(\n    serviceAccountID: string,\n    params: ServiceAccountDeleteParams,\n    options?: RequestOptions,\n  ): APIPromise<ServiceAccountDeleteResponse> {\n    const { project_id } = params;\n    return this._client.delete(\n      path`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`,\n      { ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n}\n\nexport type ProjectServiceAccountsPage = ConversationCursorPage<ProjectServiceAccount>;\n\n/**\n * Represents an individual service account in a project.\n */\nexport interface ProjectServiceAccount {\n  /**\n   * The identifier, which can be referenced in API endpoints\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the service account was created\n   */\n  created_at: number;\n\n  /**\n   * The name of the service account\n   */\n  name: string;\n\n  /**\n   * The object type, which is always `organization.project.service_account`\n   */\n  object: 'organization.project.service_account';\n\n  /**\n   * `owner` or `member`\n   */\n  role: 'owner' | 'member';\n}\n\nexport interface ServiceAccountCreateResponse {\n  id: string;\n\n  api_key: ServiceAccountCreateResponse.APIKey | null;\n\n  created_at: number;\n\n  name: string;\n\n  object: 'organization.project.service_account';\n\n  /**\n   * Service accounts can only have one role of type `member`\n   */\n  role: 'member';\n}\n\nexport namespace ServiceAccountCreateResponse {\n  export interface APIKey {\n    id: string;\n\n    created_at: number;\n\n    name: string;\n\n    /**\n     * The object type, which is always `organization.project.service_account.api_key`\n     */\n    object: 'organization.project.service_account.api_key';\n\n    value: string;\n  }\n}\n\nexport interface ServiceAccountDeleteResponse {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'organization.project.service_account.deleted';\n}\n\nexport interface ServiceAccountCreateParams {\n  /**\n   * The name of the service account being created.\n   */\n  name: string;\n}\n\nexport interface ServiceAccountRetrieveParams {\n  /**\n   * The ID of the project.\n   */\n  project_id: string;\n}\n\nexport interface ServiceAccountUpdateParams {\n  /**\n   * Path param: The ID of the project.\n   */\n  project_id: string;\n\n  /**\n   * Body param: The updated service account name.\n   */\n  name?: string;\n\n  /**\n   * Body param: The updated service account role.\n   */\n  role?: 'member' | 'owner';\n}\n\nexport interface ServiceAccountListParams extends ConversationCursorPageParams {}\n\nexport interface ServiceAccountDeleteParams {\n  /**\n   * The ID of the project.\n   */\n  project_id: string;\n}\n\nexport declare namespace ServiceAccounts {\n  export {\n    type ProjectServiceAccount as ProjectServiceAccount,\n    type ServiceAccountCreateResponse as ServiceAccountCreateResponse,\n    type ServiceAccountDeleteResponse as ServiceAccountDeleteResponse,\n    type ProjectServiceAccountsPage as ProjectServiceAccountsPage,\n    type ServiceAccountCreateParams as ServiceAccountCreateParams,\n    type ServiceAccountRetrieveParams as ServiceAccountRetrieveParams,\n    type ServiceAccountUpdateParams as ServiceAccountUpdateParams,\n    type ServiceAccountListParams as ServiceAccountListParams,\n    type ServiceAccountDeleteParams as ServiceAccountDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport { APIPromise } from '../../../../core/api-promise';\nimport {\n  ConversationCursorPage,\n  type ConversationCursorPageParams,\n  PagePromise,\n} from '../../../../core/pagination';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\nexport class SpendAlerts extends APIResource {\n  /**\n   * Creates a project spend alert.\n   *\n   * @example\n   * ```ts\n   * const projectSpendAlert =\n   *   await client.admin.organization.projects.spendAlerts.create(\n   *     'project_id',\n   *     {\n   *       currency: 'USD',\n   *       interval: 'month',\n   *       notification_channel: {\n   *         recipients: ['string'],\n   *         type: 'email',\n   *       },\n   *       threshold_amount: 0,\n   *     },\n   *   );\n   * ```\n   */\n  create(\n    projectID: string,\n    body: SpendAlertCreateParams,\n    options?: RequestOptions,\n  ): APIPromise<ProjectSpendAlert> {\n    return this._client.post(path`/organization/projects/${projectID}/spend_alerts`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Updates a project spend alert.\n   *\n   * @example\n   * ```ts\n   * const projectSpendAlert =\n   *   await client.admin.organization.projects.spendAlerts.update(\n   *     'alert_id',\n   *     {\n   *       project_id: 'project_id',\n   *       currency: 'USD',\n   *       interval: 'month',\n   *       notification_channel: {\n   *         recipients: ['string'],\n   *         type: 'email',\n   *       },\n   *       threshold_amount: 0,\n   *     },\n   *   );\n   * ```\n   */\n  update(\n    alertID: string,\n    params: SpendAlertUpdateParams,\n    options?: RequestOptions,\n  ): APIPromise<ProjectSpendAlert> {\n    const { project_id, ...body } = params;\n    return this._client.post(path`/organization/projects/${project_id}/spend_alerts/${alertID}`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Lists project spend alerts.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const projectSpendAlert of client.admin.organization.projects.spendAlerts.list(\n   *   'project_id',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    projectID: string,\n    query: SpendAlertListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<ProjectSpendAlertsPage, ProjectSpendAlert> {\n    return this._client.getAPIList(\n      path`/organization/projects/${projectID}/spend_alerts`,\n      ConversationCursorPage<ProjectSpendAlert>,\n      { query, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Deletes a project spend alert.\n   *\n   * @example\n   * ```ts\n   * const projectSpendAlertDeleted =\n   *   await client.admin.organization.projects.spendAlerts.delete(\n   *     'alert_id',\n   *     { project_id: 'project_id' },\n   *   );\n   * ```\n   */\n  delete(\n    alertID: string,\n    params: SpendAlertDeleteParams,\n    options?: RequestOptions,\n  ): APIPromise<ProjectSpendAlertDeleted> {\n    const { project_id } = params;\n    return this._client.delete(path`/organization/projects/${project_id}/spend_alerts/${alertID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type ProjectSpendAlertsPage = ConversationCursorPage<ProjectSpendAlert>;\n\n/**\n * Represents a spend alert configured at the project level.\n */\nexport interface ProjectSpendAlert {\n  /**\n   * The identifier, which can be referenced in API endpoints.\n   */\n  id: string;\n\n  /**\n   * The currency for the threshold amount.\n   */\n  currency: 'USD';\n\n  /**\n   * The time interval for evaluating spend against the threshold.\n   */\n  interval: 'month';\n\n  /**\n   * Email notification settings for a spend alert.\n   */\n  notification_channel: ProjectSpendAlert.NotificationChannel;\n\n  /**\n   * The object type, which is always `project.spend_alert`.\n   */\n  object: 'project.spend_alert';\n\n  /**\n   * The alert threshold amount, in cents.\n   */\n  threshold_amount: number;\n}\n\nexport namespace ProjectSpendAlert {\n  /**\n   * Email notification settings for a spend alert.\n   */\n  export interface NotificationChannel {\n    /**\n     * Email addresses that receive the spend alert notification.\n     */\n    recipients: Array<string>;\n\n    /**\n     * The notification channel type. Currently only `email` is supported.\n     */\n    type: 'email';\n\n    /**\n     * Optional subject prefix for alert emails.\n     */\n    subject_prefix?: string | null;\n  }\n}\n\n/**\n * Confirmation payload returned after deleting a project spend alert.\n */\nexport interface ProjectSpendAlertDeleted {\n  /**\n   * The deleted spend alert ID.\n   */\n  id: string;\n\n  /**\n   * Whether the spend alert was deleted.\n   */\n  deleted: boolean;\n\n  /**\n   * Always `project.spend_alert.deleted`.\n   */\n  object: 'project.spend_alert.deleted';\n}\n\nexport interface SpendAlertCreateParams {\n  /**\n   * The currency for the threshold amount.\n   */\n  currency: 'USD';\n\n  /**\n   * The time interval for evaluating spend against the threshold.\n   */\n  interval: 'month';\n\n  /**\n   * Email notification settings for a spend alert.\n   */\n  notification_channel: SpendAlertCreateParams.NotificationChannel;\n\n  /**\n   * The alert threshold amount, in cents.\n   */\n  threshold_amount: number;\n}\n\nexport namespace SpendAlertCreateParams {\n  /**\n   * Email notification settings for a spend alert.\n   */\n  export interface NotificationChannel {\n    /**\n     * Email addresses that receive the spend alert notification.\n     */\n    recipients: Array<string>;\n\n    /**\n     * The notification channel type. Currently only `email` is supported.\n     */\n    type: 'email';\n\n    /**\n     * Optional subject prefix for alert emails.\n     */\n    subject_prefix?: string | null;\n  }\n}\n\nexport interface SpendAlertUpdateParams {\n  /**\n   * Path param: The ID of the project to update.\n   */\n  project_id: string;\n\n  /**\n   * Body param: The currency for the threshold amount.\n   */\n  currency: 'USD';\n\n  /**\n   * Body param: The time interval for evaluating spend against the threshold.\n   */\n  interval: 'month';\n\n  /**\n   * Body param: Email notification settings for a spend alert.\n   */\n  notification_channel: SpendAlertUpdateParams.NotificationChannel;\n\n  /**\n   * Body param: The alert threshold amount, in cents.\n   */\n  threshold_amount: number;\n}\n\nexport namespace SpendAlertUpdateParams {\n  /**\n   * Email notification settings for a spend alert.\n   */\n  export interface NotificationChannel {\n    /**\n     * Email addresses that receive the spend alert notification.\n     */\n    recipients: Array<string>;\n\n    /**\n     * The notification channel type. Currently only `email` is supported.\n     */\n    type: 'email';\n\n    /**\n     * Optional subject prefix for alert emails.\n     */\n    subject_prefix?: string | null;\n  }\n}\n\nexport interface SpendAlertListParams extends ConversationCursorPageParams {\n  /**\n   * Cursor for pagination. Provide the ID of the first spend alert from the previous\n   * response to fetch the previous page.\n   */\n  before?: string;\n\n  /**\n   * Sort order for the returned spend alerts.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface SpendAlertDeleteParams {\n  /**\n   * The ID of the project to update.\n   */\n  project_id: string;\n}\n\nexport declare namespace SpendAlerts {\n  export {\n    type ProjectSpendAlert as ProjectSpendAlert,\n    type ProjectSpendAlertDeleted as ProjectSpendAlertDeleted,\n    type ProjectSpendAlertsPage as ProjectSpendAlertsPage,\n    type SpendAlertCreateParams as SpendAlertCreateParams,\n    type SpendAlertUpdateParams as SpendAlertUpdateParams,\n    type SpendAlertListParams as SpendAlertListParams,\n    type SpendAlertDeleteParams as SpendAlertDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../../core/resource';\nimport * as RolesAPI from '../../roles';\nimport { APIPromise } from '../../../../../core/api-promise';\nimport { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../../core/pagination';\nimport { RequestOptions } from '../../../../../internal/request-options';\nimport { path } from '../../../../../internal/utils/path';\n\nexport class Roles extends APIResource {\n  /**\n   * Assigns a project role to a group within a project.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.projects.groups.roles.create(\n   *     'group_id',\n   *     { project_id: 'project_id', role_id: 'role_id' },\n   *   );\n   * ```\n   */\n  create(\n    groupID: string,\n    params: RoleCreateParams,\n    options?: RequestOptions,\n  ): APIPromise<RoleCreateResponse> {\n    const { project_id, ...body } = params;\n    return this._client.post(path`/projects/${project_id}/groups/${groupID}/roles`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves a project role assigned to a group.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.projects.groups.roles.retrieve(\n   *     'role_id',\n   *     { project_id: 'project_id', group_id: 'group_id' },\n   *   );\n   * ```\n   */\n  retrieve(\n    roleID: string,\n    params: RoleRetrieveParams,\n    options?: RequestOptions,\n  ): APIPromise<RoleRetrieveResponse> {\n    const { project_id, group_id } = params;\n    return this._client.get(path`/projects/${project_id}/groups/${group_id}/roles/${roleID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Lists the project roles assigned to a group within a project.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const roleListResponse of client.admin.organization.projects.groups.roles.list(\n   *   'group_id',\n   *   { project_id: 'project_id' },\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    groupID: string,\n    params: RoleListParams,\n    options?: RequestOptions,\n  ): PagePromise<RoleListResponsesPage, RoleListResponse> {\n    const { project_id, ...query } = params;\n    return this._client.getAPIList(\n      path`/projects/${project_id}/groups/${groupID}/roles`,\n      NextCursorPage<RoleListResponse>,\n      { query, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Unassigns a project role from a group within a project.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.projects.groups.roles.delete(\n   *     'role_id',\n   *     { project_id: 'project_id', group_id: 'group_id' },\n   *   );\n   * ```\n   */\n  delete(roleID: string, params: RoleDeleteParams, options?: RequestOptions): APIPromise<RoleDeleteResponse> {\n    const { project_id, group_id } = params;\n    return this._client.delete(path`/projects/${project_id}/groups/${group_id}/roles/${roleID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type RoleListResponsesPage = NextCursorPage<RoleListResponse>;\n\n/**\n * Role assignment linking a group to a role.\n */\nexport interface RoleCreateResponse {\n  /**\n   * Summary information about a group returned in role assignment responses.\n   */\n  group: RoleCreateResponse.Group;\n\n  /**\n   * Always `group.role`.\n   */\n  object: 'group.role';\n\n  /**\n   * Details about a role that can be assigned through the public Roles API.\n   */\n  role: RolesAPI.Role;\n}\n\nexport namespace RoleCreateResponse {\n  /**\n   * Summary information about a group returned in role assignment responses.\n   */\n  export interface Group {\n    /**\n     * Identifier for the group.\n     */\n    id: string;\n\n    /**\n     * Unix timestamp (in seconds) when the group was created.\n     */\n    created_at: number;\n\n    /**\n     * Display name of the group.\n     */\n    name: string;\n\n    /**\n     * Always `group`.\n     */\n    object: 'group';\n\n    /**\n     * Whether the group is managed through SCIM.\n     */\n    scim_managed: boolean;\n  }\n}\n\n/**\n * Detailed information about a role assignment entry returned when listing\n * assignments.\n */\nexport interface RoleRetrieveResponse {\n  /**\n   * Identifier for the role.\n   */\n  id: string;\n\n  /**\n   * Principals from which the role assignment is inherited, when available.\n   */\n  assignment_sources: Array<RoleRetrieveResponse.AssignmentSource> | null;\n\n  /**\n   * When the role was created.\n   */\n  created_at: number | null;\n\n  /**\n   * Identifier of the actor who created the role.\n   */\n  created_by: string | null;\n\n  /**\n   * User details for the actor that created the role, when available.\n   */\n  created_by_user_obj: { [key: string]: unknown } | null;\n\n  /**\n   * Description of the role.\n   */\n  description: string | null;\n\n  /**\n   * Arbitrary metadata stored on the role.\n   */\n  metadata: { [key: string]: unknown } | null;\n\n  /**\n   * Name of the role.\n   */\n  name: string;\n\n  /**\n   * Permissions associated with the role.\n   */\n  permissions: Array<string>;\n\n  /**\n   * Whether the role is predefined by OpenAI.\n   */\n  predefined_role: boolean;\n\n  /**\n   * Resource type the role applies to.\n   */\n  resource_type: string;\n\n  /**\n   * When the role was last updated.\n   */\n  updated_at: number | null;\n}\n\nexport namespace RoleRetrieveResponse {\n  export interface AssignmentSource {\n    principal_id: string;\n\n    principal_type: string;\n  }\n}\n\n/**\n * Detailed information about a role assignment entry returned when listing\n * assignments.\n */\nexport interface RoleListResponse {\n  /**\n   * Identifier for the role.\n   */\n  id: string;\n\n  /**\n   * Principals from which the role assignment is inherited, when available.\n   */\n  assignment_sources: Array<RoleListResponse.AssignmentSource> | null;\n\n  /**\n   * When the role was created.\n   */\n  created_at: number | null;\n\n  /**\n   * Identifier of the actor who created the role.\n   */\n  created_by: string | null;\n\n  /**\n   * User details for the actor that created the role, when available.\n   */\n  created_by_user_obj: { [key: string]: unknown } | null;\n\n  /**\n   * Description of the role.\n   */\n  description: string | null;\n\n  /**\n   * Arbitrary metadata stored on the role.\n   */\n  metadata: { [key: string]: unknown } | null;\n\n  /**\n   * Name of the role.\n   */\n  name: string;\n\n  /**\n   * Permissions associated with the role.\n   */\n  permissions: Array<string>;\n\n  /**\n   * Whether the role is predefined by OpenAI.\n   */\n  predefined_role: boolean;\n\n  /**\n   * Resource type the role applies to.\n   */\n  resource_type: string;\n\n  /**\n   * When the role was last updated.\n   */\n  updated_at: number | null;\n}\n\nexport namespace RoleListResponse {\n  export interface AssignmentSource {\n    principal_id: string;\n\n    principal_type: string;\n  }\n}\n\n/**\n * Confirmation payload returned after unassigning a role.\n */\nexport interface RoleDeleteResponse {\n  /**\n   * Whether the assignment was removed.\n   */\n  deleted: boolean;\n\n  /**\n   * Identifier for the deleted assignment, such as `group.role.deleted` or\n   * `user.role.deleted`.\n   */\n  object: string;\n}\n\nexport interface RoleCreateParams {\n  /**\n   * Path param: The ID of the project to update.\n   */\n  project_id: string;\n\n  /**\n   * Body param: Identifier of the role to assign.\n   */\n  role_id: string;\n}\n\nexport interface RoleRetrieveParams {\n  /**\n   * The ID of the project to inspect.\n   */\n  project_id: string;\n\n  /**\n   * The ID of the group to inspect.\n   */\n  group_id: string;\n}\n\nexport interface RoleListParams extends NextCursorPageParams {\n  /**\n   * Path param: The ID of the project to inspect.\n   */\n  project_id: string;\n\n  /**\n   * Query param: Sort order for the returned project roles.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface RoleDeleteParams {\n  /**\n   * The ID of the project to modify.\n   */\n  project_id: string;\n\n  /**\n   * The ID of the group whose project role assignment should be removed.\n   */\n  group_id: string;\n}\n\nexport declare namespace Roles {\n  export {\n    type RoleCreateResponse as RoleCreateResponse,\n    type RoleRetrieveResponse as RoleRetrieveResponse,\n    type RoleListResponse as RoleListResponse,\n    type RoleDeleteResponse as RoleDeleteResponse,\n    type RoleListResponsesPage as RoleListResponsesPage,\n    type RoleCreateParams as RoleCreateParams,\n    type RoleRetrieveParams as RoleRetrieveParams,\n    type RoleListParams as RoleListParams,\n    type RoleDeleteParams as RoleDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../../core/resource';\nimport * as RolesAPI from './roles';\nimport {\n  RoleCreateParams,\n  RoleCreateResponse,\n  RoleDeleteParams,\n  RoleDeleteResponse,\n  RoleListParams,\n  RoleListResponse,\n  RoleListResponsesPage,\n  RoleRetrieveParams,\n  RoleRetrieveResponse,\n  Roles,\n} from './roles';\nimport { APIPromise } from '../../../../../core/api-promise';\nimport { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../../core/pagination';\nimport { RequestOptions } from '../../../../../internal/request-options';\nimport { path } from '../../../../../internal/utils/path';\n\nexport class Groups extends APIResource {\n  roles: RolesAPI.Roles = new RolesAPI.Roles(this._client);\n\n  /**\n   * Grants a group access to a project.\n   *\n   * @example\n   * ```ts\n   * const projectGroup =\n   *   await client.admin.organization.projects.groups.create(\n   *     'project_id',\n   *     { group_id: 'group_id', role: 'role' },\n   *   );\n   * ```\n   */\n  create(projectID: string, body: GroupCreateParams, options?: RequestOptions): APIPromise<ProjectGroup> {\n    return this._client.post(path`/organization/projects/${projectID}/groups`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves a project's group.\n   *\n   * @example\n   * ```ts\n   * const projectGroup =\n   *   await client.admin.organization.projects.groups.retrieve(\n   *     'group_id',\n   *     { project_id: 'project_id' },\n   *   );\n   * ```\n   */\n  retrieve(groupID: string, params: GroupRetrieveParams, options?: RequestOptions): APIPromise<ProjectGroup> {\n    const { project_id, ...query } = params;\n    return this._client.get(path`/organization/projects/${project_id}/groups/${groupID}`, {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Lists the groups that have access to a project.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const projectGroup of client.admin.organization.projects.groups.list(\n   *   'project_id',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    projectID: string,\n    query: GroupListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<ProjectGroupsPage, ProjectGroup> {\n    return this._client.getAPIList(\n      path`/organization/projects/${projectID}/groups`,\n      NextCursorPage<ProjectGroup>,\n      { query, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Revokes a group's access to a project.\n   *\n   * @example\n   * ```ts\n   * const group =\n   *   await client.admin.organization.projects.groups.delete(\n   *     'group_id',\n   *     { project_id: 'project_id' },\n   *   );\n   * ```\n   */\n  delete(\n    groupID: string,\n    params: GroupDeleteParams,\n    options?: RequestOptions,\n  ): APIPromise<GroupDeleteResponse> {\n    const { project_id } = params;\n    return this._client.delete(path`/organization/projects/${project_id}/groups/${groupID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type ProjectGroupsPage = NextCursorPage<ProjectGroup>;\n\n/**\n * Details about a group's membership in a project.\n */\nexport interface ProjectGroup {\n  /**\n   * Unix timestamp (in seconds) when the group was granted project access.\n   */\n  created_at: number;\n\n  /**\n   * Identifier of the group that has access to the project.\n   */\n  group_id: string;\n\n  /**\n   * Display name of the group.\n   */\n  group_name: string;\n\n  /**\n   * The type of the group.\n   */\n  group_type: 'group' | 'tenant_group';\n\n  /**\n   * Always `project.group`.\n   */\n  object: 'project.group';\n\n  /**\n   * Identifier of the project.\n   */\n  project_id: string;\n}\n\n/**\n * Confirmation payload returned after removing a group from a project.\n */\nexport interface GroupDeleteResponse {\n  /**\n   * Whether the group membership in the project was removed.\n   */\n  deleted: boolean;\n\n  /**\n   * Always `project.group.deleted`.\n   */\n  object: 'project.group.deleted';\n}\n\nexport interface GroupCreateParams {\n  /**\n   * Identifier of the group to add to the project.\n   */\n  group_id: string;\n\n  /**\n   * Identifier of the project role to grant to the group.\n   */\n  role: string;\n}\n\nexport interface GroupRetrieveParams {\n  /**\n   * Path param: The ID of the project to inspect.\n   */\n  project_id: string;\n\n  /**\n   * Query param: The type of group to retrieve.\n   */\n  group_type?: 'group' | 'tenant_group';\n}\n\nexport interface GroupListParams extends NextCursorPageParams {\n  /**\n   * Sort order for the returned groups.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface GroupDeleteParams {\n  /**\n   * The ID of the project to update.\n   */\n  project_id: string;\n}\n\nGroups.Roles = Roles;\n\nexport declare namespace Groups {\n  export {\n    type ProjectGroup as ProjectGroup,\n    type GroupDeleteResponse as GroupDeleteResponse,\n    type ProjectGroupsPage as ProjectGroupsPage,\n    type GroupCreateParams as GroupCreateParams,\n    type GroupRetrieveParams as GroupRetrieveParams,\n    type GroupListParams as GroupListParams,\n    type GroupDeleteParams as GroupDeleteParams,\n  };\n\n  export {\n    Roles as Roles,\n    type RoleCreateResponse as RoleCreateResponse,\n    type RoleRetrieveResponse as RoleRetrieveResponse,\n    type RoleListResponse as RoleListResponse,\n    type RoleDeleteResponse as RoleDeleteResponse,\n    type RoleListResponsesPage as RoleListResponsesPage,\n    type RoleCreateParams as RoleCreateParams,\n    type RoleRetrieveParams as RoleRetrieveParams,\n    type RoleListParams as RoleListParams,\n    type RoleDeleteParams as RoleDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../../core/resource';\nimport * as RolesAPI from '../../roles';\nimport * as UsersAPI from '../../users/users';\nimport { APIPromise } from '../../../../../core/api-promise';\nimport { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../../core/pagination';\nimport { RequestOptions } from '../../../../../internal/request-options';\nimport { path } from '../../../../../internal/utils/path';\n\nexport class Roles extends APIResource {\n  /**\n   * Assigns a project role to a user within a project.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.projects.users.roles.create(\n   *     'user_id',\n   *     { project_id: 'project_id', role_id: 'role_id' },\n   *   );\n   * ```\n   */\n  create(userID: string, params: RoleCreateParams, options?: RequestOptions): APIPromise<RoleCreateResponse> {\n    const { project_id, ...body } = params;\n    return this._client.post(path`/projects/${project_id}/users/${userID}/roles`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves a project role assigned to a user.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.projects.users.roles.retrieve(\n   *     'role_id',\n   *     { project_id: 'project_id', user_id: 'user_id' },\n   *   );\n   * ```\n   */\n  retrieve(\n    roleID: string,\n    params: RoleRetrieveParams,\n    options?: RequestOptions,\n  ): APIPromise<RoleRetrieveResponse> {\n    const { project_id, user_id } = params;\n    return this._client.get(path`/projects/${project_id}/users/${user_id}/roles/${roleID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Lists the project roles assigned to a user within a project.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const roleListResponse of client.admin.organization.projects.users.roles.list(\n   *   'user_id',\n   *   { project_id: 'project_id' },\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    userID: string,\n    params: RoleListParams,\n    options?: RequestOptions,\n  ): PagePromise<RoleListResponsesPage, RoleListResponse> {\n    const { project_id, ...query } = params;\n    return this._client.getAPIList(\n      path`/projects/${project_id}/users/${userID}/roles`,\n      NextCursorPage<RoleListResponse>,\n      { query, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Unassigns a project role from a user within a project.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.projects.users.roles.delete(\n   *     'role_id',\n   *     { project_id: 'project_id', user_id: 'user_id' },\n   *   );\n   * ```\n   */\n  delete(roleID: string, params: RoleDeleteParams, options?: RequestOptions): APIPromise<RoleDeleteResponse> {\n    const { project_id, user_id } = params;\n    return this._client.delete(path`/projects/${project_id}/users/${user_id}/roles/${roleID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type RoleListResponsesPage = NextCursorPage<RoleListResponse>;\n\n/**\n * Role assignment linking a user to a role.\n */\nexport interface RoleCreateResponse {\n  /**\n   * Always `user.role`.\n   */\n  object: 'user.role';\n\n  /**\n   * Details about a role that can be assigned through the public Roles API.\n   */\n  role: RolesAPI.Role;\n\n  /**\n   * Represents an individual `user` within an organization.\n   */\n  user: UsersAPI.OrganizationUser;\n}\n\n/**\n * Detailed information about a role assignment entry returned when listing\n * assignments.\n */\nexport interface RoleRetrieveResponse {\n  /**\n   * Identifier for the role.\n   */\n  id: string;\n\n  /**\n   * Principals from which the role assignment is inherited, when available.\n   */\n  assignment_sources: Array<RoleRetrieveResponse.AssignmentSource> | null;\n\n  /**\n   * When the role was created.\n   */\n  created_at: number | null;\n\n  /**\n   * Identifier of the actor who created the role.\n   */\n  created_by: string | null;\n\n  /**\n   * User details for the actor that created the role, when available.\n   */\n  created_by_user_obj: { [key: string]: unknown } | null;\n\n  /**\n   * Description of the role.\n   */\n  description: string | null;\n\n  /**\n   * Arbitrary metadata stored on the role.\n   */\n  metadata: { [key: string]: unknown } | null;\n\n  /**\n   * Name of the role.\n   */\n  name: string;\n\n  /**\n   * Permissions associated with the role.\n   */\n  permissions: Array<string>;\n\n  /**\n   * Whether the role is predefined by OpenAI.\n   */\n  predefined_role: boolean;\n\n  /**\n   * Resource type the role applies to.\n   */\n  resource_type: string;\n\n  /**\n   * When the role was last updated.\n   */\n  updated_at: number | null;\n}\n\nexport namespace RoleRetrieveResponse {\n  export interface AssignmentSource {\n    principal_id: string;\n\n    principal_type: string;\n  }\n}\n\n/**\n * Detailed information about a role assignment entry returned when listing\n * assignments.\n */\nexport interface RoleListResponse {\n  /**\n   * Identifier for the role.\n   */\n  id: string;\n\n  /**\n   * Principals from which the role assignment is inherited, when available.\n   */\n  assignment_sources: Array<RoleListResponse.AssignmentSource> | null;\n\n  /**\n   * When the role was created.\n   */\n  created_at: number | null;\n\n  /**\n   * Identifier of the actor who created the role.\n   */\n  created_by: string | null;\n\n  /**\n   * User details for the actor that created the role, when available.\n   */\n  created_by_user_obj: { [key: string]: unknown } | null;\n\n  /**\n   * Description of the role.\n   */\n  description: string | null;\n\n  /**\n   * Arbitrary metadata stored on the role.\n   */\n  metadata: { [key: string]: unknown } | null;\n\n  /**\n   * Name of the role.\n   */\n  name: string;\n\n  /**\n   * Permissions associated with the role.\n   */\n  permissions: Array<string>;\n\n  /**\n   * Whether the role is predefined by OpenAI.\n   */\n  predefined_role: boolean;\n\n  /**\n   * Resource type the role applies to.\n   */\n  resource_type: string;\n\n  /**\n   * When the role was last updated.\n   */\n  updated_at: number | null;\n}\n\nexport namespace RoleListResponse {\n  export interface AssignmentSource {\n    principal_id: string;\n\n    principal_type: string;\n  }\n}\n\n/**\n * Confirmation payload returned after unassigning a role.\n */\nexport interface RoleDeleteResponse {\n  /**\n   * Whether the assignment was removed.\n   */\n  deleted: boolean;\n\n  /**\n   * Identifier for the deleted assignment, such as `group.role.deleted` or\n   * `user.role.deleted`.\n   */\n  object: string;\n}\n\nexport interface RoleCreateParams {\n  /**\n   * Path param: The ID of the project to update.\n   */\n  project_id: string;\n\n  /**\n   * Body param: Identifier of the role to assign.\n   */\n  role_id: string;\n}\n\nexport interface RoleRetrieveParams {\n  /**\n   * The ID of the project to inspect.\n   */\n  project_id: string;\n\n  /**\n   * The ID of the user to inspect.\n   */\n  user_id: string;\n}\n\nexport interface RoleListParams extends NextCursorPageParams {\n  /**\n   * Path param: The ID of the project to inspect.\n   */\n  project_id: string;\n\n  /**\n   * Query param: Sort order for the returned project roles.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface RoleDeleteParams {\n  /**\n   * The ID of the project to modify.\n   */\n  project_id: string;\n\n  /**\n   * The ID of the user whose project role assignment should be removed.\n   */\n  user_id: string;\n}\n\nexport declare namespace Roles {\n  export {\n    type RoleCreateResponse as RoleCreateResponse,\n    type RoleRetrieveResponse as RoleRetrieveResponse,\n    type RoleListResponse as RoleListResponse,\n    type RoleDeleteResponse as RoleDeleteResponse,\n    type RoleListResponsesPage as RoleListResponsesPage,\n    type RoleCreateParams as RoleCreateParams,\n    type RoleRetrieveParams as RoleRetrieveParams,\n    type RoleListParams as RoleListParams,\n    type RoleDeleteParams as RoleDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../../core/resource';\nimport * as RolesAPI from './roles';\nimport {\n  RoleCreateParams,\n  RoleCreateResponse,\n  RoleDeleteParams,\n  RoleDeleteResponse,\n  RoleListParams,\n  RoleListResponse,\n  RoleListResponsesPage,\n  RoleRetrieveParams,\n  RoleRetrieveResponse,\n  Roles,\n} from './roles';\nimport { APIPromise } from '../../../../../core/api-promise';\nimport {\n  ConversationCursorPage,\n  type ConversationCursorPageParams,\n  PagePromise,\n} from '../../../../../core/pagination';\nimport { RequestOptions } from '../../../../../internal/request-options';\nimport { path } from '../../../../../internal/utils/path';\n\nexport class Users extends APIResource {\n  roles: RolesAPI.Roles = new RolesAPI.Roles(this._client);\n\n  /**\n   * Adds a user to the project. Users must already be members of the organization to\n   * be added to a project.\n   *\n   * @example\n   * ```ts\n   * const projectUser =\n   *   await client.admin.organization.projects.users.create(\n   *     'project_id',\n   *     { role: 'role' },\n   *   );\n   * ```\n   */\n  create(projectID: string, body: UserCreateParams, options?: RequestOptions): APIPromise<ProjectUser> {\n    return this._client.post(path`/organization/projects/${projectID}/users`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves a user in the project.\n   *\n   * @example\n   * ```ts\n   * const projectUser =\n   *   await client.admin.organization.projects.users.retrieve(\n   *     'user_id',\n   *     { project_id: 'project_id' },\n   *   );\n   * ```\n   */\n  retrieve(userID: string, params: UserRetrieveParams, options?: RequestOptions): APIPromise<ProjectUser> {\n    const { project_id } = params;\n    return this._client.get(path`/organization/projects/${project_id}/users/${userID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Modifies a user's role in the project.\n   *\n   * @example\n   * ```ts\n   * const projectUser =\n   *   await client.admin.organization.projects.users.update(\n   *     'user_id',\n   *     { project_id: 'project_id' },\n   *   );\n   * ```\n   */\n  update(userID: string, params: UserUpdateParams, options?: RequestOptions): APIPromise<ProjectUser> {\n    const { project_id, ...body } = params;\n    return this._client.post(path`/organization/projects/${project_id}/users/${userID}`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Returns a list of users in the project.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const projectUser of client.admin.organization.projects.users.list(\n   *   'project_id',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    projectID: string,\n    query: UserListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<ProjectUsersPage, ProjectUser> {\n    return this._client.getAPIList(\n      path`/organization/projects/${projectID}/users`,\n      ConversationCursorPage<ProjectUser>,\n      { query, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Deletes a user from the project.\n   *\n   * Returns confirmation of project user deletion, or an error if the project is\n   * archived (archived projects have no users).\n   *\n   * @example\n   * ```ts\n   * const user =\n   *   await client.admin.organization.projects.users.delete(\n   *     'user_id',\n   *     { project_id: 'project_id' },\n   *   );\n   * ```\n   */\n  delete(userID: string, params: UserDeleteParams, options?: RequestOptions): APIPromise<UserDeleteResponse> {\n    const { project_id } = params;\n    return this._client.delete(path`/organization/projects/${project_id}/users/${userID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type ProjectUsersPage = ConversationCursorPage<ProjectUser>;\n\n/**\n * Represents an individual user in a project.\n */\nexport interface ProjectUser {\n  /**\n   * The identifier, which can be referenced in API endpoints\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the project was added.\n   */\n  added_at: number;\n\n  /**\n   * The object type, which is always `organization.project.user`\n   */\n  object: 'organization.project.user';\n\n  /**\n   * `owner` or `member`\n   */\n  role: string;\n\n  /**\n   * The email address of the user\n   */\n  email?: string | null;\n\n  /**\n   * The name of the user\n   */\n  name?: string | null;\n}\n\nexport interface UserDeleteResponse {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'organization.project.user.deleted';\n}\n\nexport interface UserCreateParams {\n  /**\n   * `owner` or `member`\n   */\n  role: string;\n\n  /**\n   * Email of the user to add.\n   */\n  email?: string | null;\n\n  /**\n   * The ID of the user.\n   */\n  user_id?: string | null;\n}\n\nexport interface UserRetrieveParams {\n  /**\n   * The ID of the project.\n   */\n  project_id: string;\n}\n\nexport interface UserUpdateParams {\n  /**\n   * Path param: The ID of the project.\n   */\n  project_id: string;\n\n  /**\n   * Body param: `owner` or `member`\n   */\n  role?: string | null;\n}\n\nexport interface UserListParams extends ConversationCursorPageParams {}\n\nexport interface UserDeleteParams {\n  /**\n   * The ID of the project.\n   */\n  project_id: string;\n}\n\nUsers.Roles = Roles;\n\nexport declare namespace Users {\n  export {\n    type ProjectUser as ProjectUser,\n    type UserDeleteResponse as UserDeleteResponse,\n    type ProjectUsersPage as ProjectUsersPage,\n    type UserCreateParams as UserCreateParams,\n    type UserRetrieveParams as UserRetrieveParams,\n    type UserUpdateParams as UserUpdateParams,\n    type UserListParams as UserListParams,\n    type UserDeleteParams as UserDeleteParams,\n  };\n\n  export {\n    Roles as Roles,\n    type RoleCreateResponse as RoleCreateResponse,\n    type RoleRetrieveResponse as RoleRetrieveResponse,\n    type RoleListResponse as RoleListResponse,\n    type RoleDeleteResponse as RoleDeleteResponse,\n    type RoleListResponsesPage as RoleListResponsesPage,\n    type RoleCreateParams as RoleCreateParams,\n    type RoleRetrieveParams as RoleRetrieveParams,\n    type RoleListParams as RoleListParams,\n    type RoleDeleteParams as RoleDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport * as APIKeysAPI from './api-keys';\nimport {\n  APIKeyDeleteParams,\n  APIKeyDeleteResponse,\n  APIKeyListParams,\n  APIKeyRetrieveParams,\n  APIKeys,\n  ProjectAPIKey,\n  ProjectAPIKeysPage,\n} from './api-keys';\nimport * as CertificatesAPI from './certificates';\nimport {\n  CertificateActivateParams,\n  CertificateActivateResponse,\n  CertificateActivateResponsesPage,\n  CertificateDeactivateParams,\n  CertificateDeactivateResponse,\n  CertificateDeactivateResponsesPage,\n  CertificateListParams,\n  CertificateListResponse,\n  CertificateListResponsesPage,\n  Certificates,\n} from './certificates';\nimport * as DataRetentionAPI from './data-retention';\nimport { DataRetention, DataRetentionUpdateParams, ProjectDataRetention } from './data-retention';\nimport * as HostedToolPermissionsAPI from './hosted-tool-permissions';\nimport {\n  HostedToolPermissionUpdateParams,\n  HostedToolPermissions,\n  ProjectHostedToolPermissions,\n} from './hosted-tool-permissions';\nimport * as ModelPermissionsAPI from './model-permissions';\nimport {\n  ModelPermissionUpdateParams,\n  ModelPermissions,\n  ProjectModelPermissions,\n  ProjectModelPermissionsDeleted,\n} from './model-permissions';\nimport * as RateLimitsAPI from './rate-limits';\nimport {\n  ProjectRateLimit,\n  ProjectRateLimitsPage,\n  RateLimitListRateLimitsParams,\n  RateLimitUpdateRateLimitParams,\n  RateLimits,\n} from './rate-limits';\nimport * as RolesAPI from './roles';\nimport {\n  RoleCreateParams,\n  RoleDeleteParams,\n  RoleDeleteResponse,\n  RoleListParams,\n  RoleRetrieveParams,\n  RoleUpdateParams,\n  Roles,\n} from './roles';\nimport * as ServiceAccountsAPI from './service-accounts';\nimport {\n  ProjectServiceAccount,\n  ProjectServiceAccountsPage,\n  ServiceAccountCreateParams,\n  ServiceAccountCreateResponse,\n  ServiceAccountDeleteParams,\n  ServiceAccountDeleteResponse,\n  ServiceAccountListParams,\n  ServiceAccountRetrieveParams,\n  ServiceAccountUpdateParams,\n  ServiceAccounts,\n} from './service-accounts';\nimport * as SpendAlertsAPI from './spend-alerts';\nimport {\n  ProjectSpendAlert,\n  ProjectSpendAlertDeleted,\n  ProjectSpendAlertsPage,\n  SpendAlertCreateParams,\n  SpendAlertDeleteParams,\n  SpendAlertListParams,\n  SpendAlertUpdateParams,\n  SpendAlerts,\n} from './spend-alerts';\nimport * as GroupsAPI from './groups/groups';\nimport {\n  GroupCreateParams,\n  GroupDeleteParams,\n  GroupDeleteResponse,\n  GroupListParams,\n  GroupRetrieveParams,\n  Groups,\n  ProjectGroup,\n  ProjectGroupsPage,\n} from './groups/groups';\nimport * as UsersAPI from './users/users';\nimport {\n  ProjectUser,\n  ProjectUsersPage,\n  UserCreateParams,\n  UserDeleteParams,\n  UserDeleteResponse,\n  UserListParams,\n  UserRetrieveParams,\n  UserUpdateParams,\n  Users,\n} from './users/users';\nimport { APIPromise } from '../../../../core/api-promise';\nimport {\n  ConversationCursorPage,\n  type ConversationCursorPageParams,\n  PagePromise,\n} from '../../../../core/pagination';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\nexport class Projects extends APIResource {\n  users: UsersAPI.Users = new UsersAPI.Users(this._client);\n  serviceAccounts: ServiceAccountsAPI.ServiceAccounts = new ServiceAccountsAPI.ServiceAccounts(this._client);\n  apiKeys: APIKeysAPI.APIKeys = new APIKeysAPI.APIKeys(this._client);\n  rateLimits: RateLimitsAPI.RateLimits = new RateLimitsAPI.RateLimits(this._client);\n  modelPermissions: ModelPermissionsAPI.ModelPermissions = new ModelPermissionsAPI.ModelPermissions(\n    this._client,\n  );\n  hostedToolPermissions: HostedToolPermissionsAPI.HostedToolPermissions =\n    new HostedToolPermissionsAPI.HostedToolPermissions(this._client);\n  groups: GroupsAPI.Groups = new GroupsAPI.Groups(this._client);\n  roles: RolesAPI.Roles = new RolesAPI.Roles(this._client);\n  dataRetention: DataRetentionAPI.DataRetention = new DataRetentionAPI.DataRetention(this._client);\n  spendAlerts: SpendAlertsAPI.SpendAlerts = new SpendAlertsAPI.SpendAlerts(this._client);\n  certificates: CertificatesAPI.Certificates = new CertificatesAPI.Certificates(this._client);\n\n  /**\n   * Create a new project in the organization. Projects can be created and archived,\n   * but cannot be deleted.\n   *\n   * @example\n   * ```ts\n   * const project =\n   *   await client.admin.organization.projects.create({\n   *     name: 'name',\n   *   });\n   * ```\n   */\n  create(body: ProjectCreateParams, options?: RequestOptions): APIPromise<Project> {\n    return this._client.post('/organization/projects', {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves a project.\n   *\n   * @example\n   * ```ts\n   * const project =\n   *   await client.admin.organization.projects.retrieve(\n   *     'project_id',\n   *   );\n   * ```\n   */\n  retrieve(projectID: string, options?: RequestOptions): APIPromise<Project> {\n    return this._client.get(path`/organization/projects/${projectID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Modifies a project in the organization.\n   *\n   * @example\n   * ```ts\n   * const project =\n   *   await client.admin.organization.projects.update(\n   *     'project_id',\n   *   );\n   * ```\n   */\n  update(projectID: string, body: ProjectUpdateParams, options?: RequestOptions): APIPromise<Project> {\n    return this._client.post(path`/organization/projects/${projectID}`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Returns a list of projects.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const project of client.admin.organization.projects.list()) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    query: ProjectListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<ProjectsPage, Project> {\n    return this._client.getAPIList('/organization/projects', ConversationCursorPage<Project>, {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Archives a project in the organization. Archived projects cannot be used or\n   * updated.\n   *\n   * @example\n   * ```ts\n   * const project =\n   *   await client.admin.organization.projects.archive(\n   *     'project_id',\n   *   );\n   * ```\n   */\n  archive(projectID: string, options?: RequestOptions): APIPromise<Project> {\n    return this._client.post(path`/organization/projects/${projectID}/archive`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type ProjectsPage = ConversationCursorPage<Project>;\n\n/**\n * Represents an individual project.\n */\nexport interface Project {\n  /**\n   * The identifier, which can be referenced in API endpoints\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the project was created.\n   */\n  created_at: number;\n\n  /**\n   * The object type, which is always `organization.project`\n   */\n  object: 'organization.project';\n\n  /**\n   * The Unix timestamp (in seconds) of when the project was archived or `null`.\n   */\n  archived_at?: number | null;\n\n  /**\n   * The external key associated with the project.\n   */\n  external_key_id?: string | null;\n\n  /**\n   * The name of the project. This appears in reporting.\n   */\n  name?: string | null;\n\n  /**\n   * `active` or `archived`\n   */\n  status?: string | null;\n}\n\nexport interface ProjectCreateParams {\n  /**\n   * The friendly name of the project, this name appears in reports.\n   */\n  name: string;\n\n  /**\n   * External key ID to associate with the project.\n   */\n  external_key_id?: string | null;\n\n  /**\n   * Create the project with the specified data residency region. Your organization\n   * must have access to Data residency functionality in order to use. See\n   * [data residency controls](https://platform.openai.com/docs/guides/your-data#data-residency-controls)\n   * to review the functionality and limitations of setting this field.\n   */\n  geography?: string | null;\n}\n\nexport interface ProjectUpdateParams {\n  /**\n   * External key ID to associate with the project.\n   */\n  external_key_id?: string | null;\n\n  /**\n   * Geography for the project.\n   */\n  geography?: string | null;\n\n  /**\n   * The updated name of the project, this name appears in reports.\n   */\n  name?: string | null;\n}\n\nexport interface ProjectListParams extends ConversationCursorPageParams {\n  /**\n   * If `true` returns all projects including those that have been `archived`.\n   * Archived projects are not included by default.\n   */\n  include_archived?: boolean;\n}\n\nProjects.Users = Users;\nProjects.ServiceAccounts = ServiceAccounts;\nProjects.APIKeys = APIKeys;\nProjects.RateLimits = RateLimits;\nProjects.ModelPermissions = ModelPermissions;\nProjects.HostedToolPermissions = HostedToolPermissions;\nProjects.Groups = Groups;\nProjects.Roles = Roles;\nProjects.DataRetention = DataRetention;\nProjects.SpendAlerts = SpendAlerts;\nProjects.Certificates = Certificates;\n\nexport declare namespace Projects {\n  export {\n    type Project as Project,\n    type ProjectsPage as ProjectsPage,\n    type ProjectCreateParams as ProjectCreateParams,\n    type ProjectUpdateParams as ProjectUpdateParams,\n    type ProjectListParams as ProjectListParams,\n  };\n\n  export {\n    Users as Users,\n    type ProjectUser as ProjectUser,\n    type UserDeleteResponse as UserDeleteResponse,\n    type ProjectUsersPage as ProjectUsersPage,\n    type UserCreateParams as UserCreateParams,\n    type UserRetrieveParams as UserRetrieveParams,\n    type UserUpdateParams as UserUpdateParams,\n    type UserListParams as UserListParams,\n    type UserDeleteParams as UserDeleteParams,\n  };\n\n  export {\n    ServiceAccounts as ServiceAccounts,\n    type ProjectServiceAccount as ProjectServiceAccount,\n    type ServiceAccountCreateResponse as ServiceAccountCreateResponse,\n    type ServiceAccountDeleteResponse as ServiceAccountDeleteResponse,\n    type ProjectServiceAccountsPage as ProjectServiceAccountsPage,\n    type ServiceAccountCreateParams as ServiceAccountCreateParams,\n    type ServiceAccountRetrieveParams as ServiceAccountRetrieveParams,\n    type ServiceAccountUpdateParams as ServiceAccountUpdateParams,\n    type ServiceAccountListParams as ServiceAccountListParams,\n    type ServiceAccountDeleteParams as ServiceAccountDeleteParams,\n  };\n\n  export {\n    APIKeys as APIKeys,\n    type ProjectAPIKey as ProjectAPIKey,\n    type APIKeyDeleteResponse as APIKeyDeleteResponse,\n    type ProjectAPIKeysPage as ProjectAPIKeysPage,\n    type APIKeyRetrieveParams as APIKeyRetrieveParams,\n    type APIKeyListParams as APIKeyListParams,\n    type APIKeyDeleteParams as APIKeyDeleteParams,\n  };\n\n  export {\n    RateLimits as RateLimits,\n    type ProjectRateLimit as ProjectRateLimit,\n    type ProjectRateLimitsPage as ProjectRateLimitsPage,\n    type RateLimitListRateLimitsParams as RateLimitListRateLimitsParams,\n    type RateLimitUpdateRateLimitParams as RateLimitUpdateRateLimitParams,\n  };\n\n  export {\n    ModelPermissions as ModelPermissions,\n    type ProjectModelPermissions as ProjectModelPermissions,\n    type ProjectModelPermissionsDeleted as ProjectModelPermissionsDeleted,\n    type ModelPermissionUpdateParams as ModelPermissionUpdateParams,\n  };\n\n  export {\n    HostedToolPermissions as HostedToolPermissions,\n    type ProjectHostedToolPermissions as ProjectHostedToolPermissions,\n    type HostedToolPermissionUpdateParams as HostedToolPermissionUpdateParams,\n  };\n\n  export {\n    Groups as Groups,\n    type ProjectGroup as ProjectGroup,\n    type GroupDeleteResponse as GroupDeleteResponse,\n    type ProjectGroupsPage as ProjectGroupsPage,\n    type GroupCreateParams as GroupCreateParams,\n    type GroupRetrieveParams as GroupRetrieveParams,\n    type GroupListParams as GroupListParams,\n    type GroupDeleteParams as GroupDeleteParams,\n  };\n\n  export {\n    Roles as Roles,\n    type RoleDeleteResponse as RoleDeleteResponse,\n    type RoleCreateParams as RoleCreateParams,\n    type RoleRetrieveParams as RoleRetrieveParams,\n    type RoleUpdateParams as RoleUpdateParams,\n    type RoleListParams as RoleListParams,\n    type RoleDeleteParams as RoleDeleteParams,\n  };\n\n  export {\n    DataRetention as DataRetention,\n    type ProjectDataRetention as ProjectDataRetention,\n    type DataRetentionUpdateParams as DataRetentionUpdateParams,\n  };\n\n  export {\n    SpendAlerts as SpendAlerts,\n    type ProjectSpendAlert as ProjectSpendAlert,\n    type ProjectSpendAlertDeleted as ProjectSpendAlertDeleted,\n    type ProjectSpendAlertsPage as ProjectSpendAlertsPage,\n    type SpendAlertCreateParams as SpendAlertCreateParams,\n    type SpendAlertUpdateParams as SpendAlertUpdateParams,\n    type SpendAlertListParams as SpendAlertListParams,\n    type SpendAlertDeleteParams as SpendAlertDeleteParams,\n  };\n\n  export {\n    Certificates as Certificates,\n    type CertificateListResponse as CertificateListResponse,\n    type CertificateActivateResponse as CertificateActivateResponse,\n    type CertificateDeactivateResponse as CertificateDeactivateResponse,\n    type CertificateListResponsesPage as CertificateListResponsesPage,\n    type CertificateActivateResponsesPage as CertificateActivateResponsesPage,\n    type CertificateDeactivateResponsesPage as CertificateDeactivateResponsesPage,\n    type CertificateListParams as CertificateListParams,\n    type CertificateActivateParams as CertificateActivateParams,\n    type CertificateDeactivateParams as CertificateDeactivateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport * as RolesAPI from '../roles';\nimport * as UsersAPI from './users';\nimport { APIPromise } from '../../../../core/api-promise';\nimport { NextCursorPage, type NextCursorPageParams, PagePromise } from '../../../../core/pagination';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\nexport class Roles extends APIResource {\n  /**\n   * Assigns an organization role to a user within the organization.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.users.roles.create(\n   *     'user_id',\n   *     { role_id: 'role_id' },\n   *   );\n   * ```\n   */\n  create(userID: string, body: RoleCreateParams, options?: RequestOptions): APIPromise<RoleCreateResponse> {\n    return this._client.post(path`/organization/users/${userID}/roles`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves an organization role assigned to a user.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.users.roles.retrieve(\n   *     'role_id',\n   *     { user_id: 'user_id' },\n   *   );\n   * ```\n   */\n  retrieve(\n    roleID: string,\n    params: RoleRetrieveParams,\n    options?: RequestOptions,\n  ): APIPromise<RoleRetrieveResponse> {\n    const { user_id } = params;\n    return this._client.get(path`/organization/users/${user_id}/roles/${roleID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Lists the organization roles assigned to a user within the organization.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const roleListResponse of client.admin.organization.users.roles.list(\n   *   'user_id',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    userID: string,\n    query: RoleListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<RoleListResponsesPage, RoleListResponse> {\n    return this._client.getAPIList(\n      path`/organization/users/${userID}/roles`,\n      NextCursorPage<RoleListResponse>,\n      { query, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * Unassigns an organization role from a user within the organization.\n   *\n   * @example\n   * ```ts\n   * const role =\n   *   await client.admin.organization.users.roles.delete(\n   *     'role_id',\n   *     { user_id: 'user_id' },\n   *   );\n   * ```\n   */\n  delete(roleID: string, params: RoleDeleteParams, options?: RequestOptions): APIPromise<RoleDeleteResponse> {\n    const { user_id } = params;\n    return this._client.delete(path`/organization/users/${user_id}/roles/${roleID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type RoleListResponsesPage = NextCursorPage<RoleListResponse>;\n\n/**\n * Role assignment linking a user to a role.\n */\nexport interface RoleCreateResponse {\n  /**\n   * Always `user.role`.\n   */\n  object: 'user.role';\n\n  /**\n   * Details about a role that can be assigned through the public Roles API.\n   */\n  role: RolesAPI.Role;\n\n  /**\n   * Represents an individual `user` within an organization.\n   */\n  user: UsersAPI.OrganizationUser;\n}\n\n/**\n * Detailed information about a role assignment entry returned when listing\n * assignments.\n */\nexport interface RoleRetrieveResponse {\n  /**\n   * Identifier for the role.\n   */\n  id: string;\n\n  /**\n   * Principals from which the role assignment is inherited, when available.\n   */\n  assignment_sources: Array<RoleRetrieveResponse.AssignmentSource> | null;\n\n  /**\n   * When the role was created.\n   */\n  created_at: number | null;\n\n  /**\n   * Identifier of the actor who created the role.\n   */\n  created_by: string | null;\n\n  /**\n   * User details for the actor that created the role, when available.\n   */\n  created_by_user_obj: { [key: string]: unknown } | null;\n\n  /**\n   * Description of the role.\n   */\n  description: string | null;\n\n  /**\n   * Arbitrary metadata stored on the role.\n   */\n  metadata: { [key: string]: unknown } | null;\n\n  /**\n   * Name of the role.\n   */\n  name: string;\n\n  /**\n   * Permissions associated with the role.\n   */\n  permissions: Array<string>;\n\n  /**\n   * Whether the role is predefined by OpenAI.\n   */\n  predefined_role: boolean;\n\n  /**\n   * Resource type the role applies to.\n   */\n  resource_type: string;\n\n  /**\n   * When the role was last updated.\n   */\n  updated_at: number | null;\n}\n\nexport namespace RoleRetrieveResponse {\n  export interface AssignmentSource {\n    principal_id: string;\n\n    principal_type: string;\n  }\n}\n\n/**\n * Detailed information about a role assignment entry returned when listing\n * assignments.\n */\nexport interface RoleListResponse {\n  /**\n   * Identifier for the role.\n   */\n  id: string;\n\n  /**\n   * Principals from which the role assignment is inherited, when available.\n   */\n  assignment_sources: Array<RoleListResponse.AssignmentSource> | null;\n\n  /**\n   * When the role was created.\n   */\n  created_at: number | null;\n\n  /**\n   * Identifier of the actor who created the role.\n   */\n  created_by: string | null;\n\n  /**\n   * User details for the actor that created the role, when available.\n   */\n  created_by_user_obj: { [key: string]: unknown } | null;\n\n  /**\n   * Description of the role.\n   */\n  description: string | null;\n\n  /**\n   * Arbitrary metadata stored on the role.\n   */\n  metadata: { [key: string]: unknown } | null;\n\n  /**\n   * Name of the role.\n   */\n  name: string;\n\n  /**\n   * Permissions associated with the role.\n   */\n  permissions: Array<string>;\n\n  /**\n   * Whether the role is predefined by OpenAI.\n   */\n  predefined_role: boolean;\n\n  /**\n   * Resource type the role applies to.\n   */\n  resource_type: string;\n\n  /**\n   * When the role was last updated.\n   */\n  updated_at: number | null;\n}\n\nexport namespace RoleListResponse {\n  export interface AssignmentSource {\n    principal_id: string;\n\n    principal_type: string;\n  }\n}\n\n/**\n * Confirmation payload returned after unassigning a role.\n */\nexport interface RoleDeleteResponse {\n  /**\n   * Whether the assignment was removed.\n   */\n  deleted: boolean;\n\n  /**\n   * Identifier for the deleted assignment, such as `group.role.deleted` or\n   * `user.role.deleted`.\n   */\n  object: string;\n}\n\nexport interface RoleCreateParams {\n  /**\n   * Identifier of the role to assign.\n   */\n  role_id: string;\n}\n\nexport interface RoleRetrieveParams {\n  /**\n   * The ID of the user to inspect.\n   */\n  user_id: string;\n}\n\nexport interface RoleListParams extends NextCursorPageParams {\n  /**\n   * Sort order for the returned organization roles.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface RoleDeleteParams {\n  /**\n   * The ID of the user to modify.\n   */\n  user_id: string;\n}\n\nexport declare namespace Roles {\n  export {\n    type RoleCreateResponse as RoleCreateResponse,\n    type RoleRetrieveResponse as RoleRetrieveResponse,\n    type RoleListResponse as RoleListResponse,\n    type RoleDeleteResponse as RoleDeleteResponse,\n    type RoleListResponsesPage as RoleListResponsesPage,\n    type RoleCreateParams as RoleCreateParams,\n    type RoleRetrieveParams as RoleRetrieveParams,\n    type RoleListParams as RoleListParams,\n    type RoleDeleteParams as RoleDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport * as RolesAPI from './roles';\nimport {\n  RoleCreateParams,\n  RoleCreateResponse,\n  RoleDeleteParams,\n  RoleDeleteResponse,\n  RoleListParams,\n  RoleListResponse,\n  RoleListResponsesPage,\n  RoleRetrieveParams,\n  RoleRetrieveResponse,\n  Roles,\n} from './roles';\nimport { APIPromise } from '../../../../core/api-promise';\nimport {\n  ConversationCursorPage,\n  type ConversationCursorPageParams,\n  PagePromise,\n} from '../../../../core/pagination';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\nexport class Users extends APIResource {\n  roles: RolesAPI.Roles = new RolesAPI.Roles(this._client);\n\n  /**\n   * Retrieves a user by their identifier.\n   *\n   * @example\n   * ```ts\n   * const organizationUser =\n   *   await client.admin.organization.users.retrieve('user_id');\n   * ```\n   */\n  retrieve(userID: string, options?: RequestOptions): APIPromise<OrganizationUser> {\n    return this._client.get(path`/organization/users/${userID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Modifies a user's role in the organization.\n   *\n   * @example\n   * ```ts\n   * const organizationUser =\n   *   await client.admin.organization.users.update('user_id');\n   * ```\n   */\n  update(userID: string, body: UserUpdateParams, options?: RequestOptions): APIPromise<OrganizationUser> {\n    return this._client.post(path`/organization/users/${userID}`, {\n      body,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Lists all of the users in the organization.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const organizationUser of client.admin.organization.users.list()) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    query: UserListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<OrganizationUsersPage, OrganizationUser> {\n    return this._client.getAPIList('/organization/users', ConversationCursorPage<OrganizationUser>, {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * Deletes a user from the organization.\n   *\n   * @example\n   * ```ts\n   * const user = await client.admin.organization.users.delete(\n   *   'user_id',\n   * );\n   * ```\n   */\n  delete(userID: string, options?: RequestOptions): APIPromise<UserDeleteResponse> {\n    return this._client.delete(path`/organization/users/${userID}`, {\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n}\n\nexport type OrganizationUsersPage = ConversationCursorPage<OrganizationUser>;\n\n/**\n * Represents an individual `user` within an organization.\n */\nexport interface OrganizationUser {\n  /**\n   * The identifier, which can be referenced in API endpoints\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the user was added.\n   */\n  added_at: number;\n\n  /**\n   * The object type, which is always `organization.user`\n   */\n  object: 'organization.user';\n\n  /**\n   * The Unix timestamp (in seconds) of the user's last API key usage.\n   */\n  api_key_last_used_at?: number | null;\n\n  /**\n   * The Unix timestamp (in seconds) of when the user was created.\n   */\n  created?: number;\n\n  /**\n   * The developer persona metadata for the user.\n   */\n  developer_persona?: string | null;\n\n  /**\n   * The email address of the user\n   */\n  email?: string | null;\n\n  /**\n   * Whether this is the organization's default user.\n   */\n  is_default?: boolean;\n\n  /**\n   * Whether the user is an authorized purchaser for Scale Tier.\n   */\n  is_scale_tier_authorized_purchaser?: boolean | null;\n\n  /**\n   * Whether the user is managed through SCIM.\n   */\n  is_scim_managed?: boolean;\n\n  /**\n   * Whether the user is a service account.\n   */\n  is_service_account?: boolean;\n\n  /**\n   * The name of the user\n   */\n  name?: string | null;\n\n  /**\n   * Projects associated with the user, if included.\n   */\n  projects?: OrganizationUser.Projects | null;\n\n  /**\n   * `owner` or `reader`\n   */\n  role?: string | null;\n\n  /**\n   * The technical level metadata for the user.\n   */\n  technical_level?: string | null;\n\n  /**\n   * Nested user details.\n   */\n  user?: OrganizationUser.User;\n}\n\nexport namespace OrganizationUser {\n  /**\n   * Projects associated with the user, if included.\n   */\n  export interface Projects {\n    data: Array<Projects.Data>;\n\n    object: 'list';\n  }\n\n  export namespace Projects {\n    export interface Data {\n      id?: string | null;\n\n      name?: string | null;\n\n      role?: string | null;\n    }\n  }\n\n  /**\n   * Nested user details.\n   */\n  export interface User {\n    id: string;\n\n    object: 'user';\n\n    banned?: boolean | null;\n\n    banned_at?: number | null;\n\n    email?: string | null;\n\n    enabled?: boolean | null;\n\n    name?: string | null;\n\n    picture?: string | null;\n  }\n}\n\nexport interface UserDeleteResponse {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'organization.user.deleted';\n}\n\nexport interface UserUpdateParams {\n  /**\n   * Developer persona metadata.\n   */\n  developer_persona?: string | null;\n\n  /**\n   * `owner` or `reader`\n   */\n  role?: string | null;\n\n  /**\n   * Role ID to assign to the user.\n   */\n  role_id?: string | null;\n\n  /**\n   * Technical level metadata.\n   */\n  technical_level?: string | null;\n}\n\nexport interface UserListParams extends ConversationCursorPageParams {\n  /**\n   * Filter by the email address of users.\n   */\n  emails?: Array<string>;\n}\n\nUsers.Roles = Roles;\n\nexport declare namespace Users {\n  export {\n    type OrganizationUser as OrganizationUser,\n    type UserDeleteResponse as UserDeleteResponse,\n    type OrganizationUsersPage as OrganizationUsersPage,\n    type UserUpdateParams as UserUpdateParams,\n    type UserListParams as UserListParams,\n  };\n\n  export {\n    Roles as Roles,\n    type RoleCreateResponse as RoleCreateResponse,\n    type RoleRetrieveResponse as RoleRetrieveResponse,\n    type RoleListResponse as RoleListResponse,\n    type RoleDeleteResponse as RoleDeleteResponse,\n    type RoleListResponsesPage as RoleListResponsesPage,\n    type RoleCreateParams as RoleCreateParams,\n    type RoleRetrieveParams as RoleRetrieveParams,\n    type RoleListParams as RoleListParams,\n    type RoleDeleteParams as RoleDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as AdminAPIKeysAPI from './admin-api-keys';\nimport {\n  AdminAPIKey,\n  AdminAPIKeyCreateParams,\n  AdminAPIKeyCreateResponse,\n  AdminAPIKeyDeleteResponse,\n  AdminAPIKeyListParams,\n  AdminAPIKeys,\n  AdminAPIKeysPage,\n} from './admin-api-keys';\nimport * as AuditLogsAPI from './audit-logs';\nimport { AuditLogListParams, AuditLogListResponse, AuditLogListResponsesPage, AuditLogs } from './audit-logs';\nimport * as CertificatesAPI from './certificates';\nimport {\n  Certificate,\n  CertificateActivateParams,\n  CertificateActivateResponse,\n  CertificateActivateResponsesPage,\n  CertificateCreateParams,\n  CertificateDeactivateParams,\n  CertificateDeactivateResponse,\n  CertificateDeactivateResponsesPage,\n  CertificateDeleteResponse,\n  CertificateListParams,\n  CertificateListResponse,\n  CertificateListResponsesPage,\n  CertificateRetrieveParams,\n  CertificateUpdateParams,\n  Certificates,\n} from './certificates';\nimport * as DataRetentionAPI from './data-retention';\nimport { DataRetention, DataRetentionUpdateParams, OrganizationDataRetention } from './data-retention';\nimport * as InvitesAPI from './invites';\nimport {\n  Invite,\n  InviteCreateParams,\n  InviteDeleteResponse,\n  InviteListParams,\n  Invites,\n  InvitesPage,\n} from './invites';\nimport * as RolesAPI from './roles';\nimport {\n  Role,\n  RoleCreateParams,\n  RoleDeleteResponse,\n  RoleListParams,\n  RoleUpdateParams,\n  Roles,\n  RolesPage,\n} from './roles';\nimport * as SpendAlertsAPI from './spend-alerts';\nimport {\n  OrganizationSpendAlert,\n  OrganizationSpendAlertDeleted,\n  OrganizationSpendAlertsPage,\n  SpendAlertCreateParams,\n  SpendAlertListParams,\n  SpendAlertUpdateParams,\n  SpendAlerts,\n} from './spend-alerts';\nimport * as UsageAPI from './usage';\nimport {\n  Usage,\n  UsageAudioSpeechesParams,\n  UsageAudioSpeechesResponse,\n  UsageAudioTranscriptionsParams,\n  UsageAudioTranscriptionsResponse,\n  UsageCodeInterpreterSessionsParams,\n  UsageCodeInterpreterSessionsResponse,\n  UsageCompletionsParams,\n  UsageCompletionsResponse,\n  UsageCostsParams,\n  UsageCostsResponse,\n  UsageEmbeddingsParams,\n  UsageEmbeddingsResponse,\n  UsageFileSearchCallsParams,\n  UsageFileSearchCallsResponse,\n  UsageImagesParams,\n  UsageImagesResponse,\n  UsageModerationsParams,\n  UsageModerationsResponse,\n  UsageVectorStoresParams,\n  UsageVectorStoresResponse,\n  UsageWebSearchCallsParams,\n  UsageWebSearchCallsResponse,\n} from './usage';\nimport * as GroupsAPI from './groups/groups';\nimport {\n  Group,\n  GroupCreateParams,\n  GroupDeleteResponse,\n  GroupListParams,\n  GroupUpdateParams,\n  GroupUpdateResponse,\n  Groups,\n  GroupsPage,\n} from './groups/groups';\nimport * as ProjectsAPI from './projects/projects';\nimport {\n  Project,\n  ProjectCreateParams,\n  ProjectListParams,\n  ProjectUpdateParams,\n  Projects,\n  ProjectsPage,\n} from './projects/projects';\nimport * as UsersAPI from './users/users';\nimport {\n  OrganizationUser,\n  OrganizationUsersPage,\n  UserDeleteResponse,\n  UserListParams,\n  UserUpdateParams,\n  Users,\n} from './users/users';\n\nexport class Organization extends APIResource {\n  auditLogs: AuditLogsAPI.AuditLogs = new AuditLogsAPI.AuditLogs(this._client);\n  adminAPIKeys: AdminAPIKeysAPI.AdminAPIKeys = new AdminAPIKeysAPI.AdminAPIKeys(this._client);\n  usage: UsageAPI.Usage = new UsageAPI.Usage(this._client);\n  invites: InvitesAPI.Invites = new InvitesAPI.Invites(this._client);\n  users: UsersAPI.Users = new UsersAPI.Users(this._client);\n  groups: GroupsAPI.Groups = new GroupsAPI.Groups(this._client);\n  roles: RolesAPI.Roles = new RolesAPI.Roles(this._client);\n  dataRetention: DataRetentionAPI.DataRetention = new DataRetentionAPI.DataRetention(this._client);\n  spendAlerts: SpendAlertsAPI.SpendAlerts = new SpendAlertsAPI.SpendAlerts(this._client);\n  certificates: CertificatesAPI.Certificates = new CertificatesAPI.Certificates(this._client);\n  projects: ProjectsAPI.Projects = new ProjectsAPI.Projects(this._client);\n}\n\nOrganization.AuditLogs = AuditLogs;\nOrganization.AdminAPIKeys = AdminAPIKeys;\nOrganization.Usage = Usage;\nOrganization.Invites = Invites;\nOrganization.Users = Users;\nOrganization.Groups = Groups;\nOrganization.Roles = Roles;\nOrganization.DataRetention = DataRetention;\nOrganization.SpendAlerts = SpendAlerts;\nOrganization.Certificates = Certificates;\nOrganization.Projects = Projects;\n\nexport declare namespace Organization {\n  export {\n    AuditLogs as AuditLogs,\n    type AuditLogListResponse as AuditLogListResponse,\n    type AuditLogListResponsesPage as AuditLogListResponsesPage,\n    type AuditLogListParams as AuditLogListParams,\n  };\n\n  export {\n    AdminAPIKeys as AdminAPIKeys,\n    type AdminAPIKey as AdminAPIKey,\n    type AdminAPIKeyCreateResponse as AdminAPIKeyCreateResponse,\n    type AdminAPIKeyDeleteResponse as AdminAPIKeyDeleteResponse,\n    type AdminAPIKeysPage as AdminAPIKeysPage,\n    type AdminAPIKeyCreateParams as AdminAPIKeyCreateParams,\n    type AdminAPIKeyListParams as AdminAPIKeyListParams,\n  };\n\n  export {\n    Usage as Usage,\n    type UsageAudioSpeechesResponse as UsageAudioSpeechesResponse,\n    type UsageAudioTranscriptionsResponse as UsageAudioTranscriptionsResponse,\n    type UsageCodeInterpreterSessionsResponse as UsageCodeInterpreterSessionsResponse,\n    type UsageCompletionsResponse as UsageCompletionsResponse,\n    type UsageCostsResponse as UsageCostsResponse,\n    type UsageEmbeddingsResponse as UsageEmbeddingsResponse,\n    type UsageFileSearchCallsResponse as UsageFileSearchCallsResponse,\n    type UsageImagesResponse as UsageImagesResponse,\n    type UsageModerationsResponse as UsageModerationsResponse,\n    type UsageVectorStoresResponse as UsageVectorStoresResponse,\n    type UsageWebSearchCallsResponse as UsageWebSearchCallsResponse,\n    type UsageAudioSpeechesParams as UsageAudioSpeechesParams,\n    type UsageAudioTranscriptionsParams as UsageAudioTranscriptionsParams,\n    type UsageCodeInterpreterSessionsParams as UsageCodeInterpreterSessionsParams,\n    type UsageCompletionsParams as UsageCompletionsParams,\n    type UsageCostsParams as UsageCostsParams,\n    type UsageEmbeddingsParams as UsageEmbeddingsParams,\n    type UsageFileSearchCallsParams as UsageFileSearchCallsParams,\n    type UsageImagesParams as UsageImagesParams,\n    type UsageModerationsParams as UsageModerationsParams,\n    type UsageVectorStoresParams as UsageVectorStoresParams,\n    type UsageWebSearchCallsParams as UsageWebSearchCallsParams,\n  };\n\n  export {\n    Invites as Invites,\n    type Invite as Invite,\n    type InviteDeleteResponse as InviteDeleteResponse,\n    type InvitesPage as InvitesPage,\n    type InviteCreateParams as InviteCreateParams,\n    type InviteListParams as InviteListParams,\n  };\n\n  export {\n    Users as Users,\n    type OrganizationUser as OrganizationUser,\n    type UserDeleteResponse as UserDeleteResponse,\n    type OrganizationUsersPage as OrganizationUsersPage,\n    type UserUpdateParams as UserUpdateParams,\n    type UserListParams as UserListParams,\n  };\n\n  export {\n    Groups as Groups,\n    type Group as Group,\n    type GroupUpdateResponse as GroupUpdateResponse,\n    type GroupDeleteResponse as GroupDeleteResponse,\n    type GroupsPage as GroupsPage,\n    type GroupCreateParams as GroupCreateParams,\n    type GroupUpdateParams as GroupUpdateParams,\n    type GroupListParams as GroupListParams,\n  };\n\n  export {\n    Roles as Roles,\n    type Role as Role,\n    type RoleDeleteResponse as RoleDeleteResponse,\n    type RolesPage as RolesPage,\n    type RoleCreateParams as RoleCreateParams,\n    type RoleUpdateParams as RoleUpdateParams,\n    type RoleListParams as RoleListParams,\n  };\n\n  export {\n    DataRetention as DataRetention,\n    type OrganizationDataRetention as OrganizationDataRetention,\n    type DataRetentionUpdateParams as DataRetentionUpdateParams,\n  };\n\n  export {\n    SpendAlerts as SpendAlerts,\n    type OrganizationSpendAlert as OrganizationSpendAlert,\n    type OrganizationSpendAlertDeleted as OrganizationSpendAlertDeleted,\n    type OrganizationSpendAlertsPage as OrganizationSpendAlertsPage,\n    type SpendAlertCreateParams as SpendAlertCreateParams,\n    type SpendAlertUpdateParams as SpendAlertUpdateParams,\n    type SpendAlertListParams as SpendAlertListParams,\n  };\n\n  export {\n    Certificates as Certificates,\n    type Certificate as Certificate,\n    type CertificateListResponse as CertificateListResponse,\n    type CertificateDeleteResponse as CertificateDeleteResponse,\n    type CertificateActivateResponse as CertificateActivateResponse,\n    type CertificateDeactivateResponse as CertificateDeactivateResponse,\n    type CertificateListResponsesPage as CertificateListResponsesPage,\n    type CertificateActivateResponsesPage as CertificateActivateResponsesPage,\n    type CertificateDeactivateResponsesPage as CertificateDeactivateResponsesPage,\n    type CertificateCreateParams as CertificateCreateParams,\n    type CertificateRetrieveParams as CertificateRetrieveParams,\n    type CertificateUpdateParams as CertificateUpdateParams,\n    type CertificateListParams as CertificateListParams,\n    type CertificateActivateParams as CertificateActivateParams,\n    type CertificateDeactivateParams as CertificateDeactivateParams,\n  };\n\n  export {\n    Projects as Projects,\n    type Project as Project,\n    type ProjectsPage as ProjectsPage,\n    type ProjectCreateParams as ProjectCreateParams,\n    type ProjectUpdateParams as ProjectUpdateParams,\n    type ProjectListParams as ProjectListParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as OrganizationAPI from './organization/organization';\nimport { Organization } from './organization/organization';\n\nexport class Admin extends APIResource {\n  organization: OrganizationAPI.Organization = new OrganizationAPI.Organization(this._client);\n}\n\nAdmin.Organization = Organization;\n\nexport declare namespace Admin {\n  export { Organization as Organization };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { isReadonlyArray } from './utils/values';\n\ntype HeaderValue = string | undefined | null;\nexport type HeadersLike =\n  | Headers\n  | readonly HeaderValue[][]\n  | Record<string, HeaderValue | readonly HeaderValue[]>\n  | undefined\n  | null\n  | NullableHeaders;\n\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\n\n/**\n * @internal\n * Users can pass explicit nulls to unset default headers. When we parse them\n * into a standard headers type we need to preserve that information.\n */\nexport type NullableHeaders = {\n  /** Brand check, prevent users from creating a NullableHeaders. */\n  [brand_privateNullableHeaders]: true;\n  /** Parsed headers. */\n  values: Headers;\n  /** Set of lowercase header names explicitly set to null. */\n  nulls: Set<string>;\n};\n\nfunction* iterateHeaders(headers: HeadersLike): IterableIterator<readonly [string, string | null]> {\n  if (!headers) return;\n\n  if (brand_privateNullableHeaders in headers) {\n    const { values, nulls } = headers;\n    yield* values.entries();\n    for (const name of nulls) {\n      yield [name, null];\n    }\n    return;\n  }\n\n  let shouldClear = false;\n  let iter: Iterable<readonly (HeaderValue | readonly HeaderValue[])[]>;\n  if (headers instanceof Headers) {\n    iter = headers.entries();\n  } else if (isReadonlyArray(headers)) {\n    iter = headers;\n  } else {\n    shouldClear = true;\n    iter = Object.entries(headers ?? {});\n  }\n  for (let row of iter) {\n    const name = row[0];\n    if (typeof name !== 'string') throw new TypeError('expected header name to be a string');\n    const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n    let didClear = false;\n    for (const value of values) {\n      if (value === undefined) continue;\n\n      // Objects keys always overwrite older headers, they never append.\n      // Yield a null to clear the header before adding the new values.\n      if (shouldClear && !didClear) {\n        didClear = true;\n        yield [name, null];\n      }\n      yield [name, value];\n    }\n  }\n}\n\nexport const buildHeaders = (newHeaders: HeadersLike[]): NullableHeaders => {\n  const targetHeaders = new Headers();\n  const nullHeaders = new Set<string>();\n  for (const headers of newHeaders) {\n    const seenHeaders = new Set<string>();\n    for (const [name, value] of iterateHeaders(headers)) {\n      const lowerName = name.toLowerCase();\n      if (!seenHeaders.has(lowerName)) {\n        targetHeaders.delete(name);\n        seenHeaders.add(lowerName);\n      }\n      if (value === null) {\n        targetHeaders.delete(name);\n        nullHeaders.add(lowerName);\n      } else {\n        targetHeaders.append(name, value);\n        nullHeaders.delete(lowerName);\n      }\n    }\n  }\n  return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\n\nexport const isEmptyHeaders = (headers: HeadersLike) => {\n  for (const _ of iterateHeaders(headers)) return false;\n  return true;\n};\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport { APIPromise } from '../../core/api-promise';\nimport { buildHeaders } from '../../internal/headers';\nimport { RequestOptions } from '../../internal/request-options';\n\n/**\n * Turn audio into text or text into audio.\n */\nexport class Speech extends APIResource {\n  /**\n   * Generates audio from the input text.\n   *\n   * Returns the audio file content, or a stream of audio events.\n   *\n   * @example\n   * ```ts\n   * const speech = await client.audio.speech.create({\n   *   input: 'input',\n   *   model: 'tts-1',\n   *   voice: 'alloy',\n   * });\n   *\n   * const content = await speech.blob();\n   * console.log(content);\n   * ```\n   */\n  create(body: SpeechCreateParams, options?: RequestOptions): APIPromise<Response> {\n    return this._client.post('/audio/speech', {\n      body,\n      ...options,\n      headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n      __security: { bearerAuth: true },\n      __binaryResponse: true,\n    });\n  }\n}\n\nexport type SpeechModel = 'tts-1' | 'tts-1-hd' | 'gpt-4o-mini-tts' | 'gpt-4o-mini-tts-2025-12-15';\n\nexport interface SpeechCreateParams {\n  /**\n   * The text to generate audio for. The maximum length is 4096 characters.\n   */\n  input: string;\n\n  /**\n   * One of the available [TTS models](https://platform.openai.com/docs/models#tts):\n   * `tts-1`, `tts-1-hd`, `gpt-4o-mini-tts`, or `gpt-4o-mini-tts-2025-12-15`.\n   */\n  model: (string & {}) | SpeechModel;\n\n  /**\n   * The voice to use when generating the audio. Supported built-in voices are\n   * `alloy`, `ash`, `ballad`, `coral`, `echo`, `fable`, `onyx`, `nova`, `sage`,\n   * `shimmer`, `verse`, `marin`, and `cedar`. You may also provide a custom voice\n   * object with an `id`, for example `{ \"id\": \"voice_1234\" }`. Previews of the\n   * voices are available in the\n   * [Text to speech guide](https://platform.openai.com/docs/guides/text-to-speech#voice-options).\n   */\n  voice:\n    | string\n    | 'alloy'\n    | 'ash'\n    | 'ballad'\n    | 'coral'\n    | 'echo'\n    | 'sage'\n    | 'shimmer'\n    | 'verse'\n    | 'marin'\n    | 'cedar'\n    | SpeechCreateParams.ID;\n\n  /**\n   * Control the voice of your generated audio with additional instructions. Does not\n   * work with `tts-1` or `tts-1-hd`.\n   */\n  instructions?: string;\n\n  /**\n   * The format to audio in. Supported formats are `mp3`, `opus`, `aac`, `flac`,\n   * `wav`, and `pcm`.\n   */\n  response_format?: 'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm';\n\n  /**\n   * The speed of the generated audio. Select a value from `0.25` to `4.0`. `1.0` is\n   * the default.\n   */\n  speed?: number;\n\n  /**\n   * The format to stream the audio in. Supported formats are `sse` and `audio`.\n   * `sse` is not supported for `tts-1` or `tts-1-hd`.\n   */\n  stream_format?: 'sse' | 'audio';\n}\n\nexport namespace SpeechCreateParams {\n  /**\n   * Custom voice reference.\n   */\n  export interface ID {\n    /**\n     * The custom voice ID, e.g. `voice_1234`.\n     */\n    id: string;\n  }\n}\n\nexport declare namespace Speech {\n  export { type SpeechModel as SpeechModel, type SpeechCreateParams as SpeechCreateParams };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as TranscriptionsAPI from './transcriptions';\nimport * as AudioAPI from './audio';\nimport { APIPromise } from '../../core/api-promise';\nimport { Stream } from '../../core/streaming';\nimport { type Uploadable } from '../../core/uploads';\nimport { RequestOptions } from '../../internal/request-options';\nimport { multipartFormRequestOptions } from '../../internal/uploads';\n\n/**\n * Turn audio into text or text into audio.\n */\nexport class Transcriptions extends APIResource {\n  /**\n   * Transcribes audio into the input language.\n   *\n   * Returns a transcription object in `json`, `diarized_json`, or `verbose_json`\n   * format, or a stream of transcript events.\n   *\n   * @example\n   * ```ts\n   * const transcription =\n   *   await client.audio.transcriptions.create({\n   *     file: fs.createReadStream('speech.mp3'),\n   *     model: 'gpt-4o-transcribe',\n   *   });\n   * ```\n   */\n  create(\n    body: TranscriptionCreateParamsNonStreaming<'json' | undefined>,\n    options?: RequestOptions,\n  ): APIPromise<Transcription>;\n  create(\n    body: TranscriptionCreateParamsNonStreaming<'verbose_json'>,\n    options?: RequestOptions,\n  ): APIPromise<TranscriptionVerbose>;\n  create(\n    body: TranscriptionCreateParamsNonStreaming<'srt' | 'vtt' | 'text'>,\n    options?: RequestOptions,\n  ): APIPromise<string>;\n  create(body: TranscriptionCreateParamsNonStreaming, options?: RequestOptions): APIPromise<Transcription>;\n  create(\n    body: TranscriptionCreateParamsStreaming,\n    options?: RequestOptions,\n  ): APIPromise<Stream<TranscriptionStreamEvent>>;\n  create(\n    body: TranscriptionCreateParamsStreaming,\n    options?: RequestOptions,\n  ): APIPromise<TranscriptionCreateResponse | string | Stream<TranscriptionStreamEvent>>;\n  create(\n    body: TranscriptionCreateParams,\n    options?: RequestOptions,\n  ): APIPromise<TranscriptionCreateResponse | string | Stream<TranscriptionStreamEvent>> {\n    return this._client.post(\n      '/audio/transcriptions',\n      multipartFormRequestOptions(\n        {\n          body,\n          ...options,\n          stream: body.stream ?? false,\n          __metadata: { model: body.model },\n          __security: { bearerAuth: true },\n        },\n        this._client,\n      ),\n    );\n  }\n}\n\n/**\n * Represents a transcription response returned by model, based on the provided\n * input.\n */\nexport interface Transcription {\n  /**\n   * The transcribed text.\n   */\n  text: string;\n\n  /**\n   * The log probabilities of the tokens in the transcription. Only returned with the\n   * models `gpt-4o-transcribe` and `gpt-4o-mini-transcribe` if `logprobs` is added\n   * to the `include` array.\n   */\n  logprobs?: Array<Transcription.Logprob>;\n\n  /**\n   * Token usage statistics for the request.\n   */\n  usage?: Transcription.Tokens | Transcription.Duration;\n}\n\nexport namespace Transcription {\n  export interface Logprob {\n    /**\n     * The token in the transcription.\n     */\n    token?: string;\n\n    /**\n     * The bytes of the token.\n     */\n    bytes?: Array<number>;\n\n    /**\n     * The log probability of the token.\n     */\n    logprob?: number;\n  }\n\n  /**\n   * Usage statistics for models billed by token usage.\n   */\n  export interface Tokens {\n    /**\n     * Number of input tokens billed for this request.\n     */\n    input_tokens: number;\n\n    /**\n     * Number of output tokens generated.\n     */\n    output_tokens: number;\n\n    /**\n     * Total number of tokens used (input + output).\n     */\n    total_tokens: number;\n\n    /**\n     * The type of the usage object. Always `tokens` for this variant.\n     */\n    type: 'tokens';\n\n    /**\n     * Details about the input tokens billed for this request.\n     */\n    input_token_details?: Tokens.InputTokenDetails;\n  }\n\n  export namespace Tokens {\n    /**\n     * Details about the input tokens billed for this request.\n     */\n    export interface InputTokenDetails {\n      /**\n       * Number of audio tokens billed for this request.\n       */\n      audio_tokens?: number;\n\n      /**\n       * Number of text tokens billed for this request.\n       */\n      text_tokens?: number;\n    }\n  }\n\n  /**\n   * Usage statistics for models billed by audio input duration.\n   */\n  export interface Duration {\n    /**\n     * Duration of the input audio in seconds.\n     */\n    seconds: number;\n\n    /**\n     * The type of the usage object. Always `duration` for this variant.\n     */\n    type: 'duration';\n  }\n}\n\n/**\n * Represents a diarized transcription response returned by the model, including\n * the combined transcript and speaker-segment annotations.\n */\nexport interface TranscriptionDiarized {\n  /**\n   * Duration of the input audio in seconds.\n   */\n  duration: number;\n\n  /**\n   * Segments of the transcript annotated with timestamps and speaker labels.\n   */\n  segments: Array<TranscriptionDiarizedSegment>;\n\n  /**\n   * The type of task that was run. Always `transcribe`.\n   */\n  task: 'transcribe';\n\n  /**\n   * The concatenated transcript text for the entire audio input.\n   */\n  text: string;\n\n  /**\n   * Token or duration usage statistics for the request.\n   */\n  usage?: TranscriptionDiarized.Tokens | TranscriptionDiarized.Duration;\n}\n\nexport namespace TranscriptionDiarized {\n  /**\n   * Usage statistics for models billed by token usage.\n   */\n  export interface Tokens {\n    /**\n     * Number of input tokens billed for this request.\n     */\n    input_tokens: number;\n\n    /**\n     * Number of output tokens generated.\n     */\n    output_tokens: number;\n\n    /**\n     * Total number of tokens used (input + output).\n     */\n    total_tokens: number;\n\n    /**\n     * The type of the usage object. Always `tokens` for this variant.\n     */\n    type: 'tokens';\n\n    /**\n     * Details about the input tokens billed for this request.\n     */\n    input_token_details?: Tokens.InputTokenDetails;\n  }\n\n  export namespace Tokens {\n    /**\n     * Details about the input tokens billed for this request.\n     */\n    export interface InputTokenDetails {\n      /**\n       * Number of audio tokens billed for this request.\n       */\n      audio_tokens?: number;\n\n      /**\n       * Number of text tokens billed for this request.\n       */\n      text_tokens?: number;\n    }\n  }\n\n  /**\n   * Usage statistics for models billed by audio input duration.\n   */\n  export interface Duration {\n    /**\n     * Duration of the input audio in seconds.\n     */\n    seconds: number;\n\n    /**\n     * The type of the usage object. Always `duration` for this variant.\n     */\n    type: 'duration';\n  }\n}\n\n/**\n * A segment of diarized transcript text with speaker metadata.\n */\nexport interface TranscriptionDiarizedSegment {\n  /**\n   * Unique identifier for the segment.\n   */\n  id: string;\n\n  /**\n   * End timestamp of the segment in seconds.\n   */\n  end: number;\n\n  /**\n   * Speaker label for this segment. When known speakers are provided, the label\n   * matches `known_speaker_names[]`. Otherwise speakers are labeled sequentially\n   * using capital letters (`A`, `B`, ...).\n   */\n  speaker: string;\n\n  /**\n   * Start timestamp of the segment in seconds.\n   */\n  start: number;\n\n  /**\n   * Transcript text for this segment.\n   */\n  text: string;\n\n  /**\n   * The type of the segment. Always `transcript.text.segment`.\n   */\n  type: 'transcript.text.segment';\n}\n\nexport type TranscriptionInclude = 'logprobs';\n\nexport interface TranscriptionSegment {\n  /**\n   * Unique identifier of the segment.\n   */\n  id: number;\n\n  /**\n   * Average logprob of the segment. If the value is lower than -1, consider the\n   * logprobs failed.\n   */\n  avg_logprob: number;\n\n  /**\n   * Compression ratio of the segment. If the value is greater than 2.4, consider the\n   * compression failed.\n   */\n  compression_ratio: number;\n\n  /**\n   * End time of the segment in seconds.\n   */\n  end: number;\n\n  /**\n   * Probability of no speech in the segment. If the value is higher than 1.0 and the\n   * `avg_logprob` is below -1, consider this segment silent.\n   */\n  no_speech_prob: number;\n\n  /**\n   * Seek offset of the segment.\n   */\n  seek: number;\n\n  /**\n   * Start time of the segment in seconds.\n   */\n  start: number;\n\n  /**\n   * Temperature parameter used for generating the segment.\n   */\n  temperature: number;\n\n  /**\n   * Text content of the segment.\n   */\n  text: string;\n\n  /**\n   * Array of token IDs for the text content.\n   */\n  tokens: Array<number>;\n}\n\n/**\n * Emitted when a diarized transcription returns a completed segment with speaker\n * information. Only emitted when you\n * [create a transcription](https://platform.openai.com/docs/api-reference/audio/create-transcription)\n * with `stream` set to `true` and `response_format` set to `diarized_json`.\n */\nexport type TranscriptionStreamEvent =\n  | TranscriptionTextSegmentEvent\n  | TranscriptionTextDeltaEvent\n  | TranscriptionTextDoneEvent;\n\n/**\n * Emitted when there is an additional text delta. This is also the first event\n * emitted when the transcription starts. Only emitted when you\n * [create a transcription](https://platform.openai.com/docs/api-reference/audio/create-transcription)\n * with the `Stream` parameter set to `true`.\n */\nexport interface TranscriptionTextDeltaEvent {\n  /**\n   * The text delta that was additionally transcribed.\n   */\n  delta: string;\n\n  /**\n   * The type of the event. Always `transcript.text.delta`.\n   */\n  type: 'transcript.text.delta';\n\n  /**\n   * The log probabilities of the delta. Only included if you\n   * [create a transcription](https://platform.openai.com/docs/api-reference/audio/create-transcription)\n   * with the `include[]` parameter set to `logprobs`.\n   */\n  logprobs?: Array<TranscriptionTextDeltaEvent.Logprob>;\n\n  /**\n   * Identifier of the diarized segment that this delta belongs to. Only present when\n   * using `gpt-4o-transcribe-diarize`.\n   */\n  segment_id?: string;\n}\n\nexport namespace TranscriptionTextDeltaEvent {\n  export interface Logprob {\n    /**\n     * The token that was used to generate the log probability.\n     */\n    token?: string;\n\n    /**\n     * The bytes that were used to generate the log probability.\n     */\n    bytes?: Array<number>;\n\n    /**\n     * The log probability of the token.\n     */\n    logprob?: number;\n  }\n}\n\n/**\n * Emitted when the transcription is complete. Contains the complete transcription\n * text. Only emitted when you\n * [create a transcription](https://platform.openai.com/docs/api-reference/audio/create-transcription)\n * with the `Stream` parameter set to `true`.\n */\nexport interface TranscriptionTextDoneEvent {\n  /**\n   * The text that was transcribed.\n   */\n  text: string;\n\n  /**\n   * The type of the event. Always `transcript.text.done`.\n   */\n  type: 'transcript.text.done';\n\n  /**\n   * The log probabilities of the individual tokens in the transcription. Only\n   * included if you\n   * [create a transcription](https://platform.openai.com/docs/api-reference/audio/create-transcription)\n   * with the `include[]` parameter set to `logprobs`.\n   */\n  logprobs?: Array<TranscriptionTextDoneEvent.Logprob>;\n\n  /**\n   * Usage statistics for models billed by token usage.\n   */\n  usage?: TranscriptionTextDoneEvent.Usage;\n}\n\nexport namespace TranscriptionTextDoneEvent {\n  export interface Logprob {\n    /**\n     * The token that was used to generate the log probability.\n     */\n    token?: string;\n\n    /**\n     * The bytes that were used to generate the log probability.\n     */\n    bytes?: Array<number>;\n\n    /**\n     * The log probability of the token.\n     */\n    logprob?: number;\n  }\n\n  /**\n   * Usage statistics for models billed by token usage.\n   */\n  export interface Usage {\n    /**\n     * Number of input tokens billed for this request.\n     */\n    input_tokens: number;\n\n    /**\n     * Number of output tokens generated.\n     */\n    output_tokens: number;\n\n    /**\n     * Total number of tokens used (input + output).\n     */\n    total_tokens: number;\n\n    /**\n     * The type of the usage object. Always `tokens` for this variant.\n     */\n    type: 'tokens';\n\n    /**\n     * Details about the input tokens billed for this request.\n     */\n    input_token_details?: Usage.InputTokenDetails;\n  }\n\n  export namespace Usage {\n    /**\n     * Details about the input tokens billed for this request.\n     */\n    export interface InputTokenDetails {\n      /**\n       * Number of audio tokens billed for this request.\n       */\n      audio_tokens?: number;\n\n      /**\n       * Number of text tokens billed for this request.\n       */\n      text_tokens?: number;\n    }\n  }\n}\n\n/**\n * Emitted when a diarized transcription returns a completed segment with speaker\n * information. Only emitted when you\n * [create a transcription](https://platform.openai.com/docs/api-reference/audio/create-transcription)\n * with `stream` set to `true` and `response_format` set to `diarized_json`.\n */\nexport interface TranscriptionTextSegmentEvent {\n  /**\n   * Unique identifier for the segment.\n   */\n  id: string;\n\n  /**\n   * End timestamp of the segment in seconds.\n   */\n  end: number;\n\n  /**\n   * Speaker label for this segment.\n   */\n  speaker: string;\n\n  /**\n   * Start timestamp of the segment in seconds.\n   */\n  start: number;\n\n  /**\n   * Transcript text for this segment.\n   */\n  text: string;\n\n  /**\n   * The type of the event. Always `transcript.text.segment`.\n   */\n  type: 'transcript.text.segment';\n}\n\n/**\n * Represents a verbose json transcription response returned by model, based on the\n * provided input.\n */\nexport interface TranscriptionVerbose {\n  /**\n   * The duration of the input audio.\n   */\n  duration: number;\n\n  /**\n   * The language of the input audio.\n   */\n  language: string;\n\n  /**\n   * The transcribed text.\n   */\n  text: string;\n\n  /**\n   * Segments of the transcribed text and their corresponding details.\n   */\n  segments?: Array<TranscriptionSegment>;\n\n  /**\n   * Usage statistics for models billed by audio input duration.\n   */\n  usage?: TranscriptionVerbose.Usage;\n\n  /**\n   * Extracted words and their corresponding timestamps.\n   */\n  words?: Array<TranscriptionWord>;\n}\n\nexport namespace TranscriptionVerbose {\n  /**\n   * Usage statistics for models billed by audio input duration.\n   */\n  export interface Usage {\n    /**\n     * Duration of the input audio in seconds.\n     */\n    seconds: number;\n\n    /**\n     * The type of the usage object. Always `duration` for this variant.\n     */\n    type: 'duration';\n  }\n}\n\nexport interface TranscriptionWord {\n  /**\n   * End time of the word in seconds.\n   */\n  end: number;\n\n  /**\n   * Start time of the word in seconds.\n   */\n  start: number;\n\n  /**\n   * The text content of the word.\n   */\n  word: string;\n}\n\n/**\n * Represents a transcription response returned by model, based on the provided\n * input.\n */\nexport type TranscriptionCreateResponse = Transcription | TranscriptionDiarized | TranscriptionVerbose;\n\nexport type TranscriptionCreateParams<\n  ResponseFormat extends AudioAPI.AudioResponseFormat | undefined = AudioAPI.AudioResponseFormat | undefined,\n> = TranscriptionCreateParamsNonStreaming<ResponseFormat> | TranscriptionCreateParamsStreaming;\n\nexport interface TranscriptionCreateParamsBase<\n  ResponseFormat extends AudioAPI.AudioResponseFormat | undefined = AudioAPI.AudioResponseFormat | undefined,\n> {\n  /**\n   * The audio file object (not file name) to transcribe, in one of these formats:\n   * flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.\n   */\n  file: Uploadable;\n\n  /**\n   * ID of the model to use. The options are `gpt-4o-transcribe`,\n   * `gpt-4o-mini-transcribe`, `gpt-4o-mini-transcribe-2025-12-15`, `whisper-1`\n   * (which is powered by our open source Whisper V2 model), and\n   * `gpt-4o-transcribe-diarize`.\n   */\n  model: (string & {}) | AudioAPI.AudioModel;\n\n  /**\n   * Controls how the audio is cut into chunks. When set to `\"auto\"`, the server\n   * first normalizes loudness and then uses voice activity detection (VAD) to choose\n   * boundaries. `server_vad` object can be provided to tweak VAD detection\n   * parameters manually. If unset, the audio is transcribed as a single block.\n   * Required when using `gpt-4o-transcribe-diarize` for inputs longer than 30\n   * seconds.\n   */\n  chunking_strategy?: 'auto' | TranscriptionCreateParams.VadConfig | null;\n\n  /**\n   * Additional information to include in the transcription response. `logprobs` will\n   * return the log probabilities of the tokens in the response to understand the\n   * model's confidence in the transcription. `logprobs` only works with\n   * response_format set to `json` and only with the models `gpt-4o-transcribe`,\n   * `gpt-4o-mini-transcribe`, and `gpt-4o-mini-transcribe-2025-12-15`. This field is\n   * not supported when using `gpt-4o-transcribe-diarize`.\n   */\n  include?: Array<TranscriptionInclude>;\n\n  /**\n   * Optional list of speaker names that correspond to the audio samples provided in\n   * `known_speaker_references[]`. Each entry should be a short identifier (for\n   * example `customer` or `agent`). Up to 4 speakers are supported.\n   */\n  known_speaker_names?: Array<string>;\n\n  /**\n   * Optional list of audio samples (as\n   * [data URLs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs))\n   * that contain known speaker references matching `known_speaker_names[]`. Each\n   * sample must be between 2 and 10 seconds, and can use any of the same input audio\n   * formats supported by `file`.\n   */\n  known_speaker_references?: Array<string>;\n\n  /**\n   * The language of the input audio. Supplying the input language in\n   * [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) (e.g. `en`)\n   * format will improve accuracy and latency.\n   */\n  language?: string;\n\n  /**\n   * An optional text to guide the model's style or continue a previous audio\n   * segment. The\n   * [prompt](https://platform.openai.com/docs/guides/speech-to-text#prompting)\n   * should match the audio language. This field is not supported when using\n   * `gpt-4o-transcribe-diarize`.\n   */\n  prompt?: string;\n\n  /**\n   * The format of the output, in one of these options: `json`, `text`, `srt`,\n   * `verbose_json`, `vtt`, or `diarized_json`. For `gpt-4o-transcribe` and\n   * `gpt-4o-mini-transcribe`, the only supported format is `json`. For\n   * `gpt-4o-transcribe-diarize`, the supported formats are `json`, `text`, and\n   * `diarized_json`, with `diarized_json` required to receive speaker annotations.\n   */\n  response_format?: ResponseFormat;\n\n  /**\n   * If set to true, the model response data will be streamed to the client as it is\n   * generated using\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\n   * See the\n   * [Streaming section of the Speech-to-Text guide](https://platform.openai.com/docs/guides/speech-to-text?lang=curl#streaming-transcriptions)\n   * for more information.\n   *\n   * Note: Streaming is not supported for the `whisper-1` model and will be ignored.\n   */\n  stream?: boolean | null;\n\n  /**\n   * The sampling temperature, between 0 and 1. Higher values like 0.8 will make the\n   * output more random, while lower values like 0.2 will make it more focused and\n   * deterministic. If set to 0, the model will use\n   * [log probability](https://en.wikipedia.org/wiki/Log_probability) to\n   * automatically increase the temperature until certain thresholds are hit.\n   */\n  temperature?: number;\n\n  /**\n   * The timestamp granularities to populate for this transcription.\n   * `response_format` must be set `verbose_json` to use timestamp granularities.\n   * Either or both of these options are supported: `word`, or `segment`. Note: There\n   * is no additional latency for segment timestamps, but generating word timestamps\n   * incurs additional latency. This option is not available for\n   * `gpt-4o-transcribe-diarize`.\n   */\n  timestamp_granularities?: Array<'word' | 'segment'>;\n}\n\nexport namespace TranscriptionCreateParams {\n  export interface VadConfig {\n    /**\n     * Must be set to `server_vad` to enable manual chunking using server side VAD.\n     */\n    type: 'server_vad';\n\n    /**\n     * Amount of audio to include before the VAD detected speech (in milliseconds).\n     */\n    prefix_padding_ms?: number;\n\n    /**\n     * Duration of silence to detect speech stop (in milliseconds). With shorter values\n     * the model will respond more quickly, but may jump in on short pauses from the\n     * user.\n     */\n    silence_duration_ms?: number;\n\n    /**\n     * Sensitivity threshold (0.0 to 1.0) for voice activity detection. A higher\n     * threshold will require louder audio to activate the model, and thus might\n     * perform better in noisy environments.\n     */\n    threshold?: number;\n  }\n\n  export type TranscriptionCreateParamsNonStreaming = TranscriptionsAPI.TranscriptionCreateParamsNonStreaming;\n  export type TranscriptionCreateParamsStreaming = TranscriptionsAPI.TranscriptionCreateParamsStreaming;\n}\n\nexport interface TranscriptionCreateParamsNonStreaming<\n  ResponseFormat extends AudioAPI.AudioResponseFormat | undefined = AudioAPI.AudioResponseFormat | undefined,\n> extends TranscriptionCreateParamsBase<ResponseFormat> {\n  /**\n   * If set to true, the model response data will be streamed to the client as it is\n   * generated using\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\n   * See the\n   * [Streaming section of the Speech-to-Text guide](https://platform.openai.com/docs/guides/speech-to-text?lang=curl#streaming-transcriptions)\n   * for more information.\n   *\n   * Note: Streaming is not supported for the `whisper-1` model and will be ignored.\n   */\n  stream?: false | null;\n}\n\nexport interface TranscriptionCreateParamsStreaming extends TranscriptionCreateParamsBase {\n  /**\n   * If set to true, the model response data will be streamed to the client as it is\n   * generated using\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\n   * See the\n   * [Streaming section of the Speech-to-Text guide](https://platform.openai.com/docs/guides/speech-to-text?lang=curl#streaming-transcriptions)\n   * for more information.\n   *\n   * Note: Streaming is not supported for the `whisper-1` model and will be ignored.\n   */\n  stream: true;\n}\n\nexport declare namespace Transcriptions {\n  export {\n    type Transcription as Transcription,\n    type TranscriptionDiarized as TranscriptionDiarized,\n    type TranscriptionDiarizedSegment as TranscriptionDiarizedSegment,\n    type TranscriptionInclude as TranscriptionInclude,\n    type TranscriptionSegment as TranscriptionSegment,\n    type TranscriptionStreamEvent as TranscriptionStreamEvent,\n    type TranscriptionTextDeltaEvent as TranscriptionTextDeltaEvent,\n    type TranscriptionTextDoneEvent as TranscriptionTextDoneEvent,\n    type TranscriptionTextSegmentEvent as TranscriptionTextSegmentEvent,\n    type TranscriptionVerbose as TranscriptionVerbose,\n    type TranscriptionWord as TranscriptionWord,\n    type TranscriptionCreateResponse as TranscriptionCreateResponse,\n    type TranscriptionCreateParams as TranscriptionCreateParams,\n    type TranscriptionCreateParamsNonStreaming as TranscriptionCreateParamsNonStreaming,\n    type TranscriptionCreateParamsStreaming as TranscriptionCreateParamsStreaming,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as AudioAPI from './audio';\nimport * as TranscriptionsAPI from './transcriptions';\nimport { APIPromise } from '../../core/api-promise';\nimport { type Uploadable } from '../../core/uploads';\nimport { RequestOptions } from '../../internal/request-options';\nimport { multipartFormRequestOptions } from '../../internal/uploads';\n\n/**\n * Turn audio into text or text into audio.\n */\nexport class Translations extends APIResource {\n  /**\n   * Translates audio into English.\n   *\n   * @example\n   * ```ts\n   * const translation = await client.audio.translations.create({\n   *   file: fs.createReadStream('speech.mp3'),\n   *   model: 'whisper-1',\n   * });\n   * ```\n   */\n  create(\n    body: TranslationCreateParams<'json' | undefined>,\n    options?: RequestOptions,\n  ): APIPromise<Translation>;\n  create(\n    body: TranslationCreateParams<'verbose_json'>,\n    options?: RequestOptions,\n  ): APIPromise<TranslationVerbose>;\n  create(body: TranslationCreateParams<'text' | 'srt' | 'vtt'>, options?: RequestOptions): APIPromise<string>;\n  create(body: TranslationCreateParams, options?: RequestOptions): APIPromise<Translation>;\n  create(\n    body: TranslationCreateParams,\n    options?: RequestOptions,\n  ): APIPromise<TranslationCreateResponse | string> {\n    return this._client.post(\n      '/audio/translations',\n      multipartFormRequestOptions(\n        { body, ...options, __metadata: { model: body.model }, __security: { bearerAuth: true } },\n        this._client,\n      ),\n    );\n  }\n}\n\nexport interface Translation {\n  text: string;\n}\n\nexport interface TranslationVerbose {\n  /**\n   * The duration of the input audio.\n   */\n  duration: number;\n\n  /**\n   * The language of the output translation (always `english`).\n   */\n  language: string;\n\n  /**\n   * The translated text.\n   */\n  text: string;\n\n  /**\n   * Segments of the translated text and their corresponding details.\n   */\n  segments?: Array<TranscriptionsAPI.TranscriptionSegment>;\n}\n\nexport type TranslationCreateResponse = Translation | TranslationVerbose;\n\nexport interface TranslationCreateParams<\n  ResponseFormat extends AudioAPI.AudioResponseFormat | undefined = AudioAPI.AudioResponseFormat | undefined,\n> {\n  /**\n   * The audio file object (not file name) translate, in one of these formats: flac,\n   * mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.\n   */\n  file: Uploadable;\n\n  /**\n   * ID of the model to use. Only `whisper-1` (which is powered by our open source\n   * Whisper V2 model) is currently available.\n   */\n  model: (string & {}) | AudioAPI.AudioModel;\n\n  /**\n   * An optional text to guide the model's style or continue a previous audio\n   * segment. The\n   * [prompt](https://platform.openai.com/docs/guides/speech-to-text#prompting)\n   * should be in English.\n   */\n  prompt?: string;\n\n  /**\n   * The format of the output, in one of these options: `json`, `text`, `srt`,\n   * `verbose_json`, or `vtt`.\n   */\n  response_format?: 'json' | 'text' | 'srt' | 'verbose_json' | 'vtt';\n\n  /**\n   * The sampling temperature, between 0 and 1. Higher values like 0.8 will make the\n   * output more random, while lower values like 0.2 will make it more focused and\n   * deterministic. If set to 0, the model will use\n   * [log probability](https://en.wikipedia.org/wiki/Log_probability) to\n   * automatically increase the temperature until certain thresholds are hit.\n   */\n  temperature?: number;\n}\n\nexport declare namespace Translations {\n  export {\n    type Translation as Translation,\n    type TranslationVerbose as TranslationVerbose,\n    type TranslationCreateResponse as TranslationCreateResponse,\n    type TranslationCreateParams as TranslationCreateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as SpeechAPI from './speech';\nimport { Speech, SpeechCreateParams, SpeechModel } from './speech';\nimport * as TranscriptionsAPI from './transcriptions';\nimport {\n  Transcription,\n  TranscriptionCreateParams,\n  TranscriptionCreateParamsNonStreaming,\n  TranscriptionCreateParamsStreaming,\n  TranscriptionCreateResponse,\n  TranscriptionDiarized,\n  TranscriptionDiarizedSegment,\n  TranscriptionInclude,\n  TranscriptionSegment,\n  TranscriptionStreamEvent,\n  TranscriptionTextDeltaEvent,\n  TranscriptionTextDoneEvent,\n  TranscriptionTextSegmentEvent,\n  TranscriptionVerbose,\n  TranscriptionWord,\n  Transcriptions,\n} from './transcriptions';\nimport * as TranslationsAPI from './translations';\nimport {\n  Translation,\n  TranslationCreateParams,\n  TranslationCreateResponse,\n  TranslationVerbose,\n  Translations,\n} from './translations';\n\nexport class Audio extends APIResource {\n  transcriptions: TranscriptionsAPI.Transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n  translations: TranslationsAPI.Translations = new TranslationsAPI.Translations(this._client);\n  speech: SpeechAPI.Speech = new SpeechAPI.Speech(this._client);\n}\n\nexport type AudioModel =\n  | 'whisper-1'\n  | 'gpt-4o-transcribe'\n  | 'gpt-4o-mini-transcribe'\n  | 'gpt-4o-mini-transcribe-2025-12-15'\n  | 'gpt-4o-transcribe-diarize';\n\n/**\n * The format of the output, in one of these options: `json`, `text`, `srt`,\n * `verbose_json`, `vtt`, or `diarized_json`. For `gpt-4o-transcribe` and\n * `gpt-4o-mini-transcribe`, the only supported format is `json`. For\n * `gpt-4o-transcribe-diarize`, the supported formats are `json`, `text`, and\n * `diarized_json`, with `diarized_json` required to receive speaker annotations.\n */\nexport type AudioResponseFormat = 'json' | 'text' | 'srt' | 'verbose_json' | 'vtt' | 'diarized_json';\n\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n\nexport declare namespace Audio {\n  export { type AudioModel as AudioModel, type AudioResponseFormat as AudioResponseFormat };\n\n  export {\n    Transcriptions as Transcriptions,\n    type Transcription as Transcription,\n    type TranscriptionDiarized as TranscriptionDiarized,\n    type TranscriptionDiarizedSegment as TranscriptionDiarizedSegment,\n    type TranscriptionInclude as TranscriptionInclude,\n    type TranscriptionSegment as TranscriptionSegment,\n    type TranscriptionStreamEvent as TranscriptionStreamEvent,\n    type TranscriptionTextDeltaEvent as TranscriptionTextDeltaEvent,\n    type TranscriptionTextDoneEvent as TranscriptionTextDoneEvent,\n    type TranscriptionTextSegmentEvent as TranscriptionTextSegmentEvent,\n    type TranscriptionVerbose as TranscriptionVerbose,\n    type TranscriptionWord as TranscriptionWord,\n    type TranscriptionCreateResponse as TranscriptionCreateResponse,\n    type TranscriptionCreateParams as TranscriptionCreateParams,\n    type TranscriptionCreateParamsNonStreaming as TranscriptionCreateParamsNonStreaming,\n    type TranscriptionCreateParamsStreaming as TranscriptionCreateParamsStreaming,\n  };\n\n  export {\n    Translations as Translations,\n    type Translation as Translation,\n    type TranslationVerbose as TranslationVerbose,\n    type TranslationCreateResponse as TranslationCreateResponse,\n    type TranslationCreateParams as TranslationCreateParams,\n  };\n\n  export { Speech as Speech, type SpeechModel as SpeechModel, type SpeechCreateParams as SpeechCreateParams };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../core/resource';\nimport * as BatchesAPI from './batches';\nimport * as Shared from './shared';\nimport { APIPromise } from '../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../core/pagination';\nimport { RequestOptions } from '../internal/request-options';\nimport { path } from '../internal/utils/path';\n\n/**\n * Create large batches of API requests to run asynchronously.\n */\nexport class Batches extends APIResource {\n  /**\n   * Creates and executes a batch from an uploaded file of requests\n   */\n  create(body: BatchCreateParams, options?: RequestOptions): APIPromise<Batch> {\n    return this._client.post('/batches', { body, ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * Retrieves a batch.\n   */\n  retrieve(batchID: string, options?: RequestOptions): APIPromise<Batch> {\n    return this._client.get(path`/batches/${batchID}`, { ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * List your organization's batches.\n   */\n  list(\n    query: BatchListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<BatchesPage, Batch> {\n    return this._client.getAPIList('/batches', CursorPage<Batch>, {\n      query,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n   * 10 minutes, before changing to `cancelled`, where it will have partial results\n   * (if any) available in the output file.\n   */\n  cancel(batchID: string, options?: RequestOptions): APIPromise<Batch> {\n    return this._client.post(path`/batches/${batchID}/cancel`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\nexport type BatchesPage = CursorPage<Batch>;\n\nexport interface Batch {\n  id: string;\n\n  /**\n   * The time frame within which the batch should be processed.\n   */\n  completion_window: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch was created.\n   */\n  created_at: number;\n\n  /**\n   * The OpenAI API endpoint used by the batch.\n   */\n  endpoint: string;\n\n  /**\n   * The ID of the input file for the batch.\n   */\n  input_file_id: string;\n\n  /**\n   * The object type, which is always `batch`.\n   */\n  object: 'batch';\n\n  /**\n   * The current status of the batch.\n   */\n  status:\n    | 'validating'\n    | 'failed'\n    | 'in_progress'\n    | 'finalizing'\n    | 'completed'\n    | 'expired'\n    | 'cancelling'\n    | 'cancelled';\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch was cancelled.\n   */\n  cancelled_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch started cancelling.\n   */\n  cancelling_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch was completed.\n   */\n  completed_at?: number;\n\n  /**\n   * The ID of the file containing the outputs of requests with errors.\n   */\n  error_file_id?: string;\n\n  errors?: Batch.Errors;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch expired.\n   */\n  expired_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch will expire.\n   */\n  expires_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch failed.\n   */\n  failed_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch started finalizing.\n   */\n  finalizing_at?: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the batch started processing.\n   */\n  in_progress_at?: number;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * Model ID used to process the batch, like `gpt-5-2025-08-07`. OpenAI offers a\n   * wide range of models with different capabilities, performance characteristics,\n   * and price points. Refer to the\n   * [model guide](https://platform.openai.com/docs/models) to browse and compare\n   * available models.\n   */\n  model?: string;\n\n  /**\n   * The ID of the file containing the outputs of successfully executed requests.\n   */\n  output_file_id?: string;\n\n  /**\n   * The request counts for different statuses within the batch.\n   */\n  request_counts?: BatchRequestCounts;\n\n  /**\n   * Represents token usage details including input tokens, output tokens, a\n   * breakdown of output tokens, and the total tokens used. Only populated on batches\n   * created after September 7, 2025.\n   */\n  usage?: BatchUsage;\n}\n\nexport namespace Batch {\n  export interface Errors {\n    data?: Array<BatchesAPI.BatchError>;\n\n    /**\n     * The object type, which is always `list`.\n     */\n    object?: string;\n  }\n}\n\nexport interface BatchError {\n  /**\n   * An error code identifying the error type.\n   */\n  code?: string;\n\n  /**\n   * The line number of the input file where the error occurred, if applicable.\n   */\n  line?: number | null;\n\n  /**\n   * A human-readable message providing more details about the error.\n   */\n  message?: string;\n\n  /**\n   * The name of the parameter that caused the error, if applicable.\n   */\n  param?: string | null;\n}\n\n/**\n * The request counts for different statuses within the batch.\n */\nexport interface BatchRequestCounts {\n  /**\n   * Number of requests that have been completed successfully.\n   */\n  completed: number;\n\n  /**\n   * Number of requests that have failed.\n   */\n  failed: number;\n\n  /**\n   * Total number of requests in the batch.\n   */\n  total: number;\n}\n\n/**\n * Represents token usage details including input tokens, output tokens, a\n * breakdown of output tokens, and the total tokens used. Only populated on batches\n * created after September 7, 2025.\n */\nexport interface BatchUsage {\n  /**\n   * The number of input tokens.\n   */\n  input_tokens: number;\n\n  /**\n   * A detailed breakdown of the input tokens.\n   */\n  input_tokens_details: BatchUsage.InputTokensDetails;\n\n  /**\n   * The number of output tokens.\n   */\n  output_tokens: number;\n\n  /**\n   * A detailed breakdown of the output tokens.\n   */\n  output_tokens_details: BatchUsage.OutputTokensDetails;\n\n  /**\n   * The total number of tokens used.\n   */\n  total_tokens: number;\n}\n\nexport namespace BatchUsage {\n  /**\n   * A detailed breakdown of the input tokens.\n   */\n  export interface InputTokensDetails {\n    /**\n     * The number of tokens that were retrieved from the cache.\n     * [More on prompt caching](https://platform.openai.com/docs/guides/prompt-caching).\n     */\n    cached_tokens: number;\n  }\n\n  /**\n   * A detailed breakdown of the output tokens.\n   */\n  export interface OutputTokensDetails {\n    /**\n     * The number of reasoning tokens.\n     */\n    reasoning_tokens: number;\n  }\n}\n\nexport interface BatchCreateParams {\n  /**\n   * The time frame within which the batch should be processed. Currently only `24h`\n   * is supported.\n   */\n  completion_window: '24h';\n\n  /**\n   * The endpoint to be used for all requests in the batch. Currently\n   * `/v1/responses`, `/v1/chat/completions`, `/v1/embeddings`, `/v1/completions`,\n   * `/v1/moderations`, `/v1/images/generations`, `/v1/images/edits`, and\n   * `/v1/videos` are supported. Note that `/v1/embeddings` batches are also\n   * restricted to a maximum of 50,000 embedding inputs across all requests in the\n   * batch.\n   */\n  endpoint:\n    | '/v1/responses'\n    | '/v1/chat/completions'\n    | '/v1/embeddings'\n    | '/v1/completions'\n    | '/v1/moderations'\n    | '/v1/images/generations'\n    | '/v1/images/edits'\n    | '/v1/videos';\n\n  /**\n   * The ID of an uploaded file that contains requests for the new batch.\n   *\n   * See [upload file](https://platform.openai.com/docs/api-reference/files/create)\n   * for how to upload a file.\n   *\n   * Your input file must be formatted as a\n   * [JSONL file](https://platform.openai.com/docs/api-reference/batch/request-input),\n   * and must be uploaded with the purpose `batch`. The file can contain up to 50,000\n   * requests, and can be up to 200 MB in size.\n   */\n  input_file_id: string;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * The expiration policy for the output and/or error file that are generated for a\n   * batch.\n   */\n  output_expires_after?: BatchCreateParams.OutputExpiresAfter;\n}\n\nexport namespace BatchCreateParams {\n  /**\n   * The expiration policy for the output and/or error file that are generated for a\n   * batch.\n   */\n  export interface OutputExpiresAfter {\n    /**\n     * Anchor timestamp after which the expiration policy applies. Supported anchors:\n     * `created_at`. Note that the anchor is the file creation time, not the time the\n     * batch is created.\n     */\n    anchor: 'created_at';\n\n    /**\n     * The number of seconds after the anchor time that the file will expire. Must be\n     * between 3600 (1 hour) and 2592000 (30 days).\n     */\n    seconds: number;\n  }\n}\n\nexport interface BatchListParams extends CursorPageParams {}\n\nexport declare namespace Batches {\n  export {\n    type Batch as Batch,\n    type BatchError as BatchError,\n    type BatchRequestCounts as BatchRequestCounts,\n    type BatchUsage as BatchUsage,\n    type BatchesPage as BatchesPage,\n    type BatchCreateParams as BatchCreateParams,\n    type BatchListParams as BatchListParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as Shared from '../shared';\nimport * as MessagesAPI from './threads/messages';\nimport * as ThreadsAPI from './threads/threads';\nimport * as RunsAPI from './threads/runs/runs';\nimport * as StepsAPI from './threads/runs/steps';\nimport { APIPromise } from '../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../core/pagination';\nimport { buildHeaders } from '../../internal/headers';\nimport { RequestOptions } from '../../internal/request-options';\nimport { path } from '../../internal/utils/path';\nimport { AssistantStream } from '../../lib/AssistantStream';\n\n/**\n * Build Assistants that can call models and use tools.\n */\nexport class Assistants extends APIResource {\n  /**\n   * Create an assistant with a model and instructions.\n   *\n   * @deprecated\n   */\n  create(body: AssistantCreateParams, options?: RequestOptions): APIPromise<Assistant> {\n    return this._client.post('/assistants', {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves an assistant.\n   *\n   * @deprecated\n   */\n  retrieve(assistantID: string, options?: RequestOptions): APIPromise<Assistant> {\n    return this._client.get(path`/assistants/${assistantID}`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Modifies an assistant.\n   *\n   * @deprecated\n   */\n  update(assistantID: string, body: AssistantUpdateParams, options?: RequestOptions): APIPromise<Assistant> {\n    return this._client.post(path`/assistants/${assistantID}`, {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Returns a list of assistants.\n   *\n   * @deprecated\n   */\n  list(\n    query: AssistantListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<AssistantsPage, Assistant> {\n    return this._client.getAPIList('/assistants', CursorPage<Assistant>, {\n      query,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Delete an assistant.\n   *\n   * @deprecated\n   */\n  delete(assistantID: string, options?: RequestOptions): APIPromise<AssistantDeleted> {\n    return this._client.delete(path`/assistants/${assistantID}`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\nexport type AssistantsPage = CursorPage<Assistant>;\n\n/**\n * @deprecated Represents an `assistant` that can call the model and use tools.\n */\nexport interface Assistant {\n  /**\n   * The identifier, which can be referenced in API endpoints.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the assistant was created.\n   */\n  created_at: number;\n\n  /**\n   * The description of the assistant. The maximum length is 512 characters.\n   */\n  description: string | null;\n\n  /**\n   * The system instructions that the assistant uses. The maximum length is 256,000\n   * characters.\n   */\n  instructions: string | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n\n  /**\n   * ID of the model to use. You can use the\n   * [List models](https://platform.openai.com/docs/api-reference/models/list) API to\n   * see all of your available models, or see our\n   * [Model overview](https://platform.openai.com/docs/models) for descriptions of\n   * them.\n   */\n  model: string;\n\n  /**\n   * The name of the assistant. The maximum length is 256 characters.\n   */\n  name: string | null;\n\n  /**\n   * The object type, which is always `assistant`.\n   */\n  object: 'assistant';\n\n  /**\n   * A list of tool enabled on the assistant. There can be a maximum of 128 tools per\n   * assistant. Tools can be of types `code_interpreter`, `file_search`, or\n   * `function`.\n   */\n  tools: Array<AssistantTool>;\n\n  /**\n   * Specifies the format that the model must output. Compatible with\n   * [GPT-4o](https://platform.openai.com/docs/models#gpt-4o),\n   * [GPT-4 Turbo](https://platform.openai.com/docs/models#gpt-4-turbo-and-gpt-4),\n   * and all GPT-3.5 Turbo models since `gpt-3.5-turbo-1106`.\n   *\n   * Setting to `{ \"type\": \"json_schema\", \"json_schema\": {...} }` enables Structured\n   * Outputs which ensures the model will match your supplied JSON schema. Learn more\n   * in the\n   * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n   *\n   * Setting to `{ \"type\": \"json_object\" }` enables JSON mode, which ensures the\n   * message the model generates is valid JSON.\n   *\n   * **Important:** when using JSON mode, you **must** also instruct the model to\n   * produce JSON yourself via a system or user message. Without this, the model may\n   * generate an unending stream of whitespace until the generation reaches the token\n   * limit, resulting in a long-running and seemingly \"stuck\" request. Also note that\n   * the message content may be partially cut off if `finish_reason=\"length\"`, which\n   * indicates the generation exceeded `max_tokens` or the conversation exceeded the\n   * max context length.\n   */\n  response_format?: ThreadsAPI.AssistantResponseFormatOption | null;\n\n  /**\n   * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will\n   * make the output more random, while lower values like 0.2 will make it more\n   * focused and deterministic.\n   */\n  temperature?: number | null;\n\n  /**\n   * A set of resources that are used by the assistant's tools. The resources are\n   * specific to the type of tool. For example, the `code_interpreter` tool requires\n   * a list of file IDs, while the `file_search` tool requires a list of vector store\n   * IDs.\n   */\n  tool_resources?: Assistant.ToolResources | null;\n\n  /**\n   * An alternative to sampling with temperature, called nucleus sampling, where the\n   * model considers the results of the tokens with top_p probability mass. So 0.1\n   * means only the tokens comprising the top 10% probability mass are considered.\n   *\n   * We generally recommend altering this or temperature but not both.\n   */\n  top_p?: number | null;\n}\n\nexport namespace Assistant {\n  /**\n   * A set of resources that are used by the assistant's tools. The resources are\n   * specific to the type of tool. For example, the `code_interpreter` tool requires\n   * a list of file IDs, while the `file_search` tool requires a list of vector store\n   * IDs.\n   */\n  export interface ToolResources {\n    code_interpreter?: ToolResources.CodeInterpreter;\n\n    file_search?: ToolResources.FileSearch;\n  }\n\n  export namespace ToolResources {\n    export interface CodeInterpreter {\n      /**\n       * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs made\n       * available to the `code_interpreter`` tool. There can be a maximum of 20 files\n       * associated with the tool.\n       */\n      file_ids?: Array<string>;\n    }\n\n    export interface FileSearch {\n      /**\n       * The ID of the\n       * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n       * attached to this assistant. There can be a maximum of 1 vector store attached to\n       * the assistant.\n       */\n      vector_store_ids?: Array<string>;\n    }\n  }\n}\n\nexport interface AssistantDeleted {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'assistant.deleted';\n}\n\n/**\n * Represents an event emitted when streaming a Run.\n *\n * Each event in a server-sent events stream has an `event` and `data` property:\n *\n * ```\n * event: thread.created\n * data: {\"id\": \"thread_123\", \"object\": \"thread\", ...}\n * ```\n *\n * We emit events whenever a new object is created, transitions to a new state, or\n * is being streamed in parts (deltas). For example, we emit `thread.run.created`\n * when a new run is created, `thread.run.completed` when a run completes, and so\n * on. When an Assistant chooses to create a message during a run, we emit a\n * `thread.message.created event`, a `thread.message.in_progress` event, many\n * `thread.message.delta` events, and finally a `thread.message.completed` event.\n *\n * We may add additional events over time, so we recommend handling unknown events\n * gracefully in your code. See the\n * [Assistants API quickstart](https://platform.openai.com/docs/assistants/overview)\n * to learn how to integrate the Assistants API with streaming.\n */\nexport type AssistantStreamEvent =\n  | AssistantStreamEvent.ThreadCreated\n  | AssistantStreamEvent.ThreadRunCreated\n  | AssistantStreamEvent.ThreadRunQueued\n  | AssistantStreamEvent.ThreadRunInProgress\n  | AssistantStreamEvent.ThreadRunRequiresAction\n  | AssistantStreamEvent.ThreadRunCompleted\n  | AssistantStreamEvent.ThreadRunIncomplete\n  | AssistantStreamEvent.ThreadRunFailed\n  | AssistantStreamEvent.ThreadRunCancelling\n  | AssistantStreamEvent.ThreadRunCancelled\n  | AssistantStreamEvent.ThreadRunExpired\n  | AssistantStreamEvent.ThreadRunStepCreated\n  | AssistantStreamEvent.ThreadRunStepInProgress\n  | AssistantStreamEvent.ThreadRunStepDelta\n  | AssistantStreamEvent.ThreadRunStepCompleted\n  | AssistantStreamEvent.ThreadRunStepFailed\n  | AssistantStreamEvent.ThreadRunStepCancelled\n  | AssistantStreamEvent.ThreadRunStepExpired\n  | AssistantStreamEvent.ThreadMessageCreated\n  | AssistantStreamEvent.ThreadMessageInProgress\n  | AssistantStreamEvent.ThreadMessageDelta\n  | AssistantStreamEvent.ThreadMessageCompleted\n  | AssistantStreamEvent.ThreadMessageIncomplete\n  | AssistantStreamEvent.ErrorEvent;\n\nexport namespace AssistantStreamEvent {\n  /**\n   * Occurs when a new\n   * [thread](https://platform.openai.com/docs/api-reference/threads/object) is\n   * created.\n   */\n  export interface ThreadCreated {\n    /**\n     * Represents a thread that contains\n     * [messages](https://platform.openai.com/docs/api-reference/messages).\n     */\n    data: ThreadsAPI.Thread;\n\n    event: 'thread.created';\n\n    /**\n     * Whether to enable input audio transcription.\n     */\n    enabled?: boolean;\n  }\n\n  /**\n   * Occurs when a new\n   * [run](https://platform.openai.com/docs/api-reference/runs/object) is created.\n   */\n  export interface ThreadRunCreated {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.created';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * moves to a `queued` status.\n   */\n  export interface ThreadRunQueued {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.queued';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * moves to an `in_progress` status.\n   */\n  export interface ThreadRunInProgress {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.in_progress';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * moves to a `requires_action` status.\n   */\n  export interface ThreadRunRequiresAction {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.requires_action';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * is completed.\n   */\n  export interface ThreadRunCompleted {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.completed';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * ends with status `incomplete`.\n   */\n  export interface ThreadRunIncomplete {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.incomplete';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * fails.\n   */\n  export interface ThreadRunFailed {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.failed';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * moves to a `cancelling` status.\n   */\n  export interface ThreadRunCancelling {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.cancelling';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * is cancelled.\n   */\n  export interface ThreadRunCancelled {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.cancelled';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * expires.\n   */\n  export interface ThreadRunExpired {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.expired';\n  }\n\n  /**\n   * Occurs when a\n   * [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object)\n   * is created.\n   */\n  export interface ThreadRunStepCreated {\n    /**\n     * Represents a step in execution of a run.\n     */\n    data: StepsAPI.RunStep;\n\n    event: 'thread.run.step.created';\n  }\n\n  /**\n   * Occurs when a\n   * [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object)\n   * moves to an `in_progress` state.\n   */\n  export interface ThreadRunStepInProgress {\n    /**\n     * Represents a step in execution of a run.\n     */\n    data: StepsAPI.RunStep;\n\n    event: 'thread.run.step.in_progress';\n  }\n\n  /**\n   * Occurs when parts of a\n   * [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object)\n   * are being streamed.\n   */\n  export interface ThreadRunStepDelta {\n    /**\n     * Represents a run step delta i.e. any changed fields on a run step during\n     * streaming.\n     */\n    data: StepsAPI.RunStepDeltaEvent;\n\n    event: 'thread.run.step.delta';\n  }\n\n  /**\n   * Occurs when a\n   * [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object)\n   * is completed.\n   */\n  export interface ThreadRunStepCompleted {\n    /**\n     * Represents a step in execution of a run.\n     */\n    data: StepsAPI.RunStep;\n\n    event: 'thread.run.step.completed';\n  }\n\n  /**\n   * Occurs when a\n   * [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object)\n   * fails.\n   */\n  export interface ThreadRunStepFailed {\n    /**\n     * Represents a step in execution of a run.\n     */\n    data: StepsAPI.RunStep;\n\n    event: 'thread.run.step.failed';\n  }\n\n  /**\n   * Occurs when a\n   * [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object)\n   * is cancelled.\n   */\n  export interface ThreadRunStepCancelled {\n    /**\n     * Represents a step in execution of a run.\n     */\n    data: StepsAPI.RunStep;\n\n    event: 'thread.run.step.cancelled';\n  }\n\n  /**\n   * Occurs when a\n   * [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object)\n   * expires.\n   */\n  export interface ThreadRunStepExpired {\n    /**\n     * Represents a step in execution of a run.\n     */\n    data: StepsAPI.RunStep;\n\n    event: 'thread.run.step.expired';\n  }\n\n  /**\n   * Occurs when a\n   * [message](https://platform.openai.com/docs/api-reference/messages/object) is\n   * created.\n   */\n  export interface ThreadMessageCreated {\n    /**\n     * Represents a message within a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: MessagesAPI.Message;\n\n    event: 'thread.message.created';\n  }\n\n  /**\n   * Occurs when a\n   * [message](https://platform.openai.com/docs/api-reference/messages/object) moves\n   * to an `in_progress` state.\n   */\n  export interface ThreadMessageInProgress {\n    /**\n     * Represents a message within a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: MessagesAPI.Message;\n\n    event: 'thread.message.in_progress';\n  }\n\n  /**\n   * Occurs when parts of a\n   * [Message](https://platform.openai.com/docs/api-reference/messages/object) are\n   * being streamed.\n   */\n  export interface ThreadMessageDelta {\n    /**\n     * Represents a message delta i.e. any changed fields on a message during\n     * streaming.\n     */\n    data: MessagesAPI.MessageDeltaEvent;\n\n    event: 'thread.message.delta';\n  }\n\n  /**\n   * Occurs when a\n   * [message](https://platform.openai.com/docs/api-reference/messages/object) is\n   * completed.\n   */\n  export interface ThreadMessageCompleted {\n    /**\n     * Represents a message within a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: MessagesAPI.Message;\n\n    event: 'thread.message.completed';\n  }\n\n  /**\n   * Occurs when a\n   * [message](https://platform.openai.com/docs/api-reference/messages/object) ends\n   * before it is completed.\n   */\n  export interface ThreadMessageIncomplete {\n    /**\n     * Represents a message within a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: MessagesAPI.Message;\n\n    event: 'thread.message.incomplete';\n  }\n\n  /**\n   * Occurs when an\n   * [error](https://platform.openai.com/docs/guides/error-codes#api-errors) occurs.\n   * This can happen due to an internal server error or a timeout.\n   */\n  export interface ErrorEvent {\n    data: Shared.ErrorObject;\n\n    event: 'error';\n  }\n}\n\nexport type AssistantTool = CodeInterpreterTool | FileSearchTool | FunctionTool;\n\nexport interface CodeInterpreterTool {\n  /**\n   * The type of tool being defined: `code_interpreter`\n   */\n  type: 'code_interpreter';\n}\n\nexport interface FileSearchTool {\n  /**\n   * The type of tool being defined: `file_search`\n   */\n  type: 'file_search';\n\n  /**\n   * Overrides for the file search tool.\n   */\n  file_search?: FileSearchTool.FileSearch;\n}\n\nexport namespace FileSearchTool {\n  /**\n   * Overrides for the file search tool.\n   */\n  export interface FileSearch {\n    /**\n     * The maximum number of results the file search tool should output. The default is\n     * 20 for `gpt-4*` models and 5 for `gpt-3.5-turbo`. This number should be between\n     * 1 and 50 inclusive.\n     *\n     * Note that the file search tool may output fewer than `max_num_results` results.\n     * See the\n     * [file search tool documentation](https://platform.openai.com/docs/assistants/tools/file-search#customizing-file-search-settings)\n     * for more information.\n     */\n    max_num_results?: number;\n\n    /**\n     * The ranking options for the file search. If not specified, the file search tool\n     * will use the `auto` ranker and a score_threshold of 0.\n     *\n     * See the\n     * [file search tool documentation](https://platform.openai.com/docs/assistants/tools/file-search#customizing-file-search-settings)\n     * for more information.\n     */\n    ranking_options?: FileSearch.RankingOptions;\n  }\n\n  export namespace FileSearch {\n    /**\n     * The ranking options for the file search. If not specified, the file search tool\n     * will use the `auto` ranker and a score_threshold of 0.\n     *\n     * See the\n     * [file search tool documentation](https://platform.openai.com/docs/assistants/tools/file-search#customizing-file-search-settings)\n     * for more information.\n     */\n    export interface RankingOptions {\n      /**\n       * The score threshold for the file search. All values must be a floating point\n       * number between 0 and 1.\n       */\n      score_threshold: number;\n\n      /**\n       * The ranker to use for the file search. If not specified will use the `auto`\n       * ranker.\n       */\n      ranker?: 'auto' | 'default_2024_08_21';\n    }\n  }\n}\n\nexport interface FunctionTool {\n  function: Shared.FunctionDefinition;\n\n  /**\n   * The type of tool being defined: `function`\n   */\n  type: 'function';\n}\n\n/**\n * Occurs when a\n * [message](https://platform.openai.com/docs/api-reference/messages/object) is\n * created.\n */\nexport type MessageStreamEvent =\n  | MessageStreamEvent.ThreadMessageCreated\n  | MessageStreamEvent.ThreadMessageInProgress\n  | MessageStreamEvent.ThreadMessageDelta\n  | MessageStreamEvent.ThreadMessageCompleted\n  | MessageStreamEvent.ThreadMessageIncomplete;\n\nexport namespace MessageStreamEvent {\n  /**\n   * Occurs when a\n   * [message](https://platform.openai.com/docs/api-reference/messages/object) is\n   * created.\n   */\n  export interface ThreadMessageCreated {\n    /**\n     * Represents a message within a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: MessagesAPI.Message;\n\n    event: 'thread.message.created';\n  }\n\n  /**\n   * Occurs when a\n   * [message](https://platform.openai.com/docs/api-reference/messages/object) moves\n   * to an `in_progress` state.\n   */\n  export interface ThreadMessageInProgress {\n    /**\n     * Represents a message within a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: MessagesAPI.Message;\n\n    event: 'thread.message.in_progress';\n  }\n\n  /**\n   * Occurs when parts of a\n   * [Message](https://platform.openai.com/docs/api-reference/messages/object) are\n   * being streamed.\n   */\n  export interface ThreadMessageDelta {\n    /**\n     * Represents a message delta i.e. any changed fields on a message during\n     * streaming.\n     */\n    data: MessagesAPI.MessageDeltaEvent;\n\n    event: 'thread.message.delta';\n  }\n\n  /**\n   * Occurs when a\n   * [message](https://platform.openai.com/docs/api-reference/messages/object) is\n   * completed.\n   */\n  export interface ThreadMessageCompleted {\n    /**\n     * Represents a message within a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: MessagesAPI.Message;\n\n    event: 'thread.message.completed';\n  }\n\n  /**\n   * Occurs when a\n   * [message](https://platform.openai.com/docs/api-reference/messages/object) ends\n   * before it is completed.\n   */\n  export interface ThreadMessageIncomplete {\n    /**\n     * Represents a message within a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: MessagesAPI.Message;\n\n    event: 'thread.message.incomplete';\n  }\n}\n\n/**\n * Occurs when a\n * [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object)\n * is created.\n */\nexport type RunStepStreamEvent =\n  | RunStepStreamEvent.ThreadRunStepCreated\n  | RunStepStreamEvent.ThreadRunStepInProgress\n  | RunStepStreamEvent.ThreadRunStepDelta\n  | RunStepStreamEvent.ThreadRunStepCompleted\n  | RunStepStreamEvent.ThreadRunStepFailed\n  | RunStepStreamEvent.ThreadRunStepCancelled\n  | RunStepStreamEvent.ThreadRunStepExpired;\n\nexport namespace RunStepStreamEvent {\n  /**\n   * Occurs when a\n   * [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object)\n   * is created.\n   */\n  export interface ThreadRunStepCreated {\n    /**\n     * Represents a step in execution of a run.\n     */\n    data: StepsAPI.RunStep;\n\n    event: 'thread.run.step.created';\n  }\n\n  /**\n   * Occurs when a\n   * [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object)\n   * moves to an `in_progress` state.\n   */\n  export interface ThreadRunStepInProgress {\n    /**\n     * Represents a step in execution of a run.\n     */\n    data: StepsAPI.RunStep;\n\n    event: 'thread.run.step.in_progress';\n  }\n\n  /**\n   * Occurs when parts of a\n   * [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object)\n   * are being streamed.\n   */\n  export interface ThreadRunStepDelta {\n    /**\n     * Represents a run step delta i.e. any changed fields on a run step during\n     * streaming.\n     */\n    data: StepsAPI.RunStepDeltaEvent;\n\n    event: 'thread.run.step.delta';\n  }\n\n  /**\n   * Occurs when a\n   * [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object)\n   * is completed.\n   */\n  export interface ThreadRunStepCompleted {\n    /**\n     * Represents a step in execution of a run.\n     */\n    data: StepsAPI.RunStep;\n\n    event: 'thread.run.step.completed';\n  }\n\n  /**\n   * Occurs when a\n   * [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object)\n   * fails.\n   */\n  export interface ThreadRunStepFailed {\n    /**\n     * Represents a step in execution of a run.\n     */\n    data: StepsAPI.RunStep;\n\n    event: 'thread.run.step.failed';\n  }\n\n  /**\n   * Occurs when a\n   * [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object)\n   * is cancelled.\n   */\n  export interface ThreadRunStepCancelled {\n    /**\n     * Represents a step in execution of a run.\n     */\n    data: StepsAPI.RunStep;\n\n    event: 'thread.run.step.cancelled';\n  }\n\n  /**\n   * Occurs when a\n   * [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object)\n   * expires.\n   */\n  export interface ThreadRunStepExpired {\n    /**\n     * Represents a step in execution of a run.\n     */\n    data: StepsAPI.RunStep;\n\n    event: 'thread.run.step.expired';\n  }\n}\n\n/**\n * Occurs when a new\n * [run](https://platform.openai.com/docs/api-reference/runs/object) is created.\n */\nexport type RunStreamEvent =\n  | RunStreamEvent.ThreadRunCreated\n  | RunStreamEvent.ThreadRunQueued\n  | RunStreamEvent.ThreadRunInProgress\n  | RunStreamEvent.ThreadRunRequiresAction\n  | RunStreamEvent.ThreadRunCompleted\n  | RunStreamEvent.ThreadRunIncomplete\n  | RunStreamEvent.ThreadRunFailed\n  | RunStreamEvent.ThreadRunCancelling\n  | RunStreamEvent.ThreadRunCancelled\n  | RunStreamEvent.ThreadRunExpired;\n\nexport namespace RunStreamEvent {\n  /**\n   * Occurs when a new\n   * [run](https://platform.openai.com/docs/api-reference/runs/object) is created.\n   */\n  export interface ThreadRunCreated {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.created';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * moves to a `queued` status.\n   */\n  export interface ThreadRunQueued {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.queued';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * moves to an `in_progress` status.\n   */\n  export interface ThreadRunInProgress {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.in_progress';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * moves to a `requires_action` status.\n   */\n  export interface ThreadRunRequiresAction {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.requires_action';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * is completed.\n   */\n  export interface ThreadRunCompleted {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.completed';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * ends with status `incomplete`.\n   */\n  export interface ThreadRunIncomplete {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.incomplete';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * fails.\n   */\n  export interface ThreadRunFailed {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.failed';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * moves to a `cancelling` status.\n   */\n  export interface ThreadRunCancelling {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.cancelling';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * is cancelled.\n   */\n  export interface ThreadRunCancelled {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.cancelled';\n  }\n\n  /**\n   * Occurs when a [run](https://platform.openai.com/docs/api-reference/runs/object)\n   * expires.\n   */\n  export interface ThreadRunExpired {\n    /**\n     * Represents an execution run on a\n     * [thread](https://platform.openai.com/docs/api-reference/threads).\n     */\n    data: RunsAPI.Run;\n\n    event: 'thread.run.expired';\n  }\n}\n\n/**\n * Occurs when a new\n * [thread](https://platform.openai.com/docs/api-reference/threads/object) is\n * created.\n */\nexport interface ThreadStreamEvent {\n  /**\n   * Represents a thread that contains\n   * [messages](https://platform.openai.com/docs/api-reference/messages).\n   */\n  data: ThreadsAPI.Thread;\n\n  event: 'thread.created';\n\n  /**\n   * Whether to enable input audio transcription.\n   */\n  enabled?: boolean;\n}\n\nexport interface AssistantCreateParams {\n  /**\n   * ID of the model to use. You can use the\n   * [List models](https://platform.openai.com/docs/api-reference/models/list) API to\n   * see all of your available models, or see our\n   * [Model overview](https://platform.openai.com/docs/models) for descriptions of\n   * them.\n   */\n  model: (string & {}) | Shared.ChatModel;\n\n  /**\n   * The description of the assistant. The maximum length is 512 characters.\n   */\n  description?: string | null;\n\n  /**\n   * The system instructions that the assistant uses. The maximum length is 256,000\n   * characters.\n   */\n  instructions?: string | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * The name of the assistant. The maximum length is 256 characters.\n   */\n  name?: string | null;\n\n  /**\n   * Constrains effort on reasoning for\n   * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n   * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n   * Reducing reasoning effort can result in faster responses and fewer tokens used\n   * on reasoning in a response.\n   *\n   * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n   *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n   *   calls are supported for all reasoning values in gpt-5.1.\n   * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n   *   support `none`.\n   * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n   * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n   */\n  reasoning_effort?: Shared.ReasoningEffort | null;\n\n  /**\n   * Specifies the format that the model must output. Compatible with\n   * [GPT-4o](https://platform.openai.com/docs/models#gpt-4o),\n   * [GPT-4 Turbo](https://platform.openai.com/docs/models#gpt-4-turbo-and-gpt-4),\n   * and all GPT-3.5 Turbo models since `gpt-3.5-turbo-1106`.\n   *\n   * Setting to `{ \"type\": \"json_schema\", \"json_schema\": {...} }` enables Structured\n   * Outputs which ensures the model will match your supplied JSON schema. Learn more\n   * in the\n   * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n   *\n   * Setting to `{ \"type\": \"json_object\" }` enables JSON mode, which ensures the\n   * message the model generates is valid JSON.\n   *\n   * **Important:** when using JSON mode, you **must** also instruct the model to\n   * produce JSON yourself via a system or user message. Without this, the model may\n   * generate an unending stream of whitespace until the generation reaches the token\n   * limit, resulting in a long-running and seemingly \"stuck\" request. Also note that\n   * the message content may be partially cut off if `finish_reason=\"length\"`, which\n   * indicates the generation exceeded `max_tokens` or the conversation exceeded the\n   * max context length.\n   */\n  response_format?: ThreadsAPI.AssistantResponseFormatOption | null;\n\n  /**\n   * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will\n   * make the output more random, while lower values like 0.2 will make it more\n   * focused and deterministic.\n   */\n  temperature?: number | null;\n\n  /**\n   * A set of resources that are used by the assistant's tools. The resources are\n   * specific to the type of tool. For example, the `code_interpreter` tool requires\n   * a list of file IDs, while the `file_search` tool requires a list of vector store\n   * IDs.\n   */\n  tool_resources?: AssistantCreateParams.ToolResources | null;\n\n  /**\n   * A list of tool enabled on the assistant. There can be a maximum of 128 tools per\n   * assistant. Tools can be of types `code_interpreter`, `file_search`, or\n   * `function`.\n   */\n  tools?: Array<AssistantTool>;\n\n  /**\n   * An alternative to sampling with temperature, called nucleus sampling, where the\n   * model considers the results of the tokens with top_p probability mass. So 0.1\n   * means only the tokens comprising the top 10% probability mass are considered.\n   *\n   * We generally recommend altering this or temperature but not both.\n   */\n  top_p?: number | null;\n}\n\nexport namespace AssistantCreateParams {\n  /**\n   * A set of resources that are used by the assistant's tools. The resources are\n   * specific to the type of tool. For example, the `code_interpreter` tool requires\n   * a list of file IDs, while the `file_search` tool requires a list of vector store\n   * IDs.\n   */\n  export interface ToolResources {\n    code_interpreter?: ToolResources.CodeInterpreter;\n\n    file_search?: ToolResources.FileSearch;\n  }\n\n  export namespace ToolResources {\n    export interface CodeInterpreter {\n      /**\n       * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs made\n       * available to the `code_interpreter` tool. There can be a maximum of 20 files\n       * associated with the tool.\n       */\n      file_ids?: Array<string>;\n    }\n\n    export interface FileSearch {\n      /**\n       * The\n       * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n       * attached to this assistant. There can be a maximum of 1 vector store attached to\n       * the assistant.\n       */\n      vector_store_ids?: Array<string>;\n\n      /**\n       * A helper to create a\n       * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n       * with file_ids and attach it to this assistant. There can be a maximum of 1\n       * vector store attached to the assistant.\n       */\n      vector_stores?: Array<FileSearch.VectorStore>;\n    }\n\n    export namespace FileSearch {\n      export interface VectorStore {\n        /**\n         * The chunking strategy used to chunk the file(s). If not set, will use the `auto`\n         * strategy.\n         */\n        chunking_strategy?: VectorStore.Auto | VectorStore.Static;\n\n        /**\n         * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs to\n         * add to the vector store. For vector stores created before Nov 2025, there can be\n         * a maximum of 10,000 files in a vector store. For vector stores created starting\n         * in Nov 2025, the limit is 100,000,000 files.\n         */\n        file_ids?: Array<string>;\n\n        /**\n         * Set of 16 key-value pairs that can be attached to an object. This can be useful\n         * for storing additional information about the object in a structured format, and\n         * querying for objects via API or the dashboard.\n         *\n         * Keys are strings with a maximum length of 64 characters. Values are strings with\n         * a maximum length of 512 characters.\n         */\n        metadata?: Shared.Metadata | null;\n      }\n\n      export namespace VectorStore {\n        /**\n         * The default strategy. This strategy currently uses a `max_chunk_size_tokens` of\n         * `800` and `chunk_overlap_tokens` of `400`.\n         */\n        export interface Auto {\n          /**\n           * Always `auto`.\n           */\n          type: 'auto';\n        }\n\n        export interface Static {\n          static: Static.Static;\n\n          /**\n           * Always `static`.\n           */\n          type: 'static';\n        }\n\n        export namespace Static {\n          export interface Static {\n            /**\n             * The number of tokens that overlap between chunks. The default value is `400`.\n             *\n             * Note that the overlap must not exceed half of `max_chunk_size_tokens`.\n             */\n            chunk_overlap_tokens: number;\n\n            /**\n             * The maximum number of tokens in each chunk. The default value is `800`. The\n             * minimum value is `100` and the maximum value is `4096`.\n             */\n            max_chunk_size_tokens: number;\n          }\n        }\n      }\n    }\n  }\n}\n\nexport interface AssistantUpdateParams {\n  /**\n   * The description of the assistant. The maximum length is 512 characters.\n   */\n  description?: string | null;\n\n  /**\n   * The system instructions that the assistant uses. The maximum length is 256,000\n   * characters.\n   */\n  instructions?: string | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * ID of the model to use. You can use the\n   * [List models](https://platform.openai.com/docs/api-reference/models/list) API to\n   * see all of your available models, or see our\n   * [Model overview](https://platform.openai.com/docs/models) for descriptions of\n   * them.\n   */\n  model?:\n    | (string & {})\n    | 'gpt-5'\n    | 'gpt-5-mini'\n    | 'gpt-5-nano'\n    | 'gpt-5-2025-08-07'\n    | 'gpt-5-mini-2025-08-07'\n    | 'gpt-5-nano-2025-08-07'\n    | 'gpt-4.1'\n    | 'gpt-4.1-mini'\n    | 'gpt-4.1-nano'\n    | 'gpt-4.1-2025-04-14'\n    | 'gpt-4.1-mini-2025-04-14'\n    | 'gpt-4.1-nano-2025-04-14'\n    | 'o3-mini'\n    | 'o3-mini-2025-01-31'\n    | 'o1'\n    | 'o1-2024-12-17'\n    | 'gpt-4o'\n    | 'gpt-4o-2024-11-20'\n    | 'gpt-4o-2024-08-06'\n    | 'gpt-4o-2024-05-13'\n    | 'gpt-4o-mini'\n    | 'gpt-4o-mini-2024-07-18'\n    | 'gpt-4.5-preview'\n    | 'gpt-4.5-preview-2025-02-27'\n    | 'gpt-4-turbo'\n    | 'gpt-4-turbo-2024-04-09'\n    | 'gpt-4-0125-preview'\n    | 'gpt-4-turbo-preview'\n    | 'gpt-4-1106-preview'\n    | 'gpt-4-vision-preview'\n    | 'gpt-4'\n    | 'gpt-4-0314'\n    | 'gpt-4-0613'\n    | 'gpt-4-32k'\n    | 'gpt-4-32k-0314'\n    | 'gpt-4-32k-0613'\n    | 'gpt-3.5-turbo'\n    | 'gpt-3.5-turbo-16k'\n    | 'gpt-3.5-turbo-0613'\n    | 'gpt-3.5-turbo-1106'\n    | 'gpt-3.5-turbo-0125'\n    | 'gpt-3.5-turbo-16k-0613';\n\n  /**\n   * The name of the assistant. The maximum length is 256 characters.\n   */\n  name?: string | null;\n\n  /**\n   * Constrains effort on reasoning for\n   * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n   * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n   * Reducing reasoning effort can result in faster responses and fewer tokens used\n   * on reasoning in a response.\n   *\n   * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n   *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n   *   calls are supported for all reasoning values in gpt-5.1.\n   * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n   *   support `none`.\n   * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n   * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n   */\n  reasoning_effort?: Shared.ReasoningEffort | null;\n\n  /**\n   * Specifies the format that the model must output. Compatible with\n   * [GPT-4o](https://platform.openai.com/docs/models#gpt-4o),\n   * [GPT-4 Turbo](https://platform.openai.com/docs/models#gpt-4-turbo-and-gpt-4),\n   * and all GPT-3.5 Turbo models since `gpt-3.5-turbo-1106`.\n   *\n   * Setting to `{ \"type\": \"json_schema\", \"json_schema\": {...} }` enables Structured\n   * Outputs which ensures the model will match your supplied JSON schema. Learn more\n   * in the\n   * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n   *\n   * Setting to `{ \"type\": \"json_object\" }` enables JSON mode, which ensures the\n   * message the model generates is valid JSON.\n   *\n   * **Important:** when using JSON mode, you **must** also instruct the model to\n   * produce JSON yourself via a system or user message. Without this, the model may\n   * generate an unending stream of whitespace until the generation reaches the token\n   * limit, resulting in a long-running and seemingly \"stuck\" request. Also note that\n   * the message content may be partially cut off if `finish_reason=\"length\"`, which\n   * indicates the generation exceeded `max_tokens` or the conversation exceeded the\n   * max context length.\n   */\n  response_format?: ThreadsAPI.AssistantResponseFormatOption | null;\n\n  /**\n   * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will\n   * make the output more random, while lower values like 0.2 will make it more\n   * focused and deterministic.\n   */\n  temperature?: number | null;\n\n  /**\n   * A set of resources that are used by the assistant's tools. The resources are\n   * specific to the type of tool. For example, the `code_interpreter` tool requires\n   * a list of file IDs, while the `file_search` tool requires a list of vector store\n   * IDs.\n   */\n  tool_resources?: AssistantUpdateParams.ToolResources | null;\n\n  /**\n   * A list of tool enabled on the assistant. There can be a maximum of 128 tools per\n   * assistant. Tools can be of types `code_interpreter`, `file_search`, or\n   * `function`.\n   */\n  tools?: Array<AssistantTool>;\n\n  /**\n   * An alternative to sampling with temperature, called nucleus sampling, where the\n   * model considers the results of the tokens with top_p probability mass. So 0.1\n   * means only the tokens comprising the top 10% probability mass are considered.\n   *\n   * We generally recommend altering this or temperature but not both.\n   */\n  top_p?: number | null;\n}\n\nexport namespace AssistantUpdateParams {\n  /**\n   * A set of resources that are used by the assistant's tools. The resources are\n   * specific to the type of tool. For example, the `code_interpreter` tool requires\n   * a list of file IDs, while the `file_search` tool requires a list of vector store\n   * IDs.\n   */\n  export interface ToolResources {\n    code_interpreter?: ToolResources.CodeInterpreter;\n\n    file_search?: ToolResources.FileSearch;\n  }\n\n  export namespace ToolResources {\n    export interface CodeInterpreter {\n      /**\n       * Overrides the list of\n       * [file](https://platform.openai.com/docs/api-reference/files) IDs made available\n       * to the `code_interpreter` tool. There can be a maximum of 20 files associated\n       * with the tool.\n       */\n      file_ids?: Array<string>;\n    }\n\n    export interface FileSearch {\n      /**\n       * Overrides the\n       * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n       * attached to this assistant. There can be a maximum of 1 vector store attached to\n       * the assistant.\n       */\n      vector_store_ids?: Array<string>;\n    }\n  }\n}\n\nexport interface AssistantListParams extends CursorPageParams {\n  /**\n   * A cursor for use in pagination. `before` is an object ID that defines your place\n   * in the list. For instance, if you make a list request and receive 100 objects,\n   * starting with obj_foo, your subsequent call can include before=obj_foo in order\n   * to fetch the previous page of the list.\n   */\n  before?: string;\n\n  /**\n   * Sort order by the `created_at` timestamp of the objects. `asc` for ascending\n   * order and `desc` for descending order.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport declare namespace Assistants {\n  export {\n    type Assistant as Assistant,\n    type AssistantDeleted as AssistantDeleted,\n    type AssistantStreamEvent as AssistantStreamEvent,\n    type AssistantTool as AssistantTool,\n    type CodeInterpreterTool as CodeInterpreterTool,\n    type FileSearchTool as FileSearchTool,\n    type FunctionTool as FunctionTool,\n    type MessageStreamEvent as MessageStreamEvent,\n    type RunStepStreamEvent as RunStepStreamEvent,\n    type RunStreamEvent as RunStreamEvent,\n    type ThreadStreamEvent as ThreadStreamEvent,\n    type AssistantsPage as AssistantsPage,\n    type AssistantCreateParams as AssistantCreateParams,\n    type AssistantUpdateParams as AssistantUpdateParams,\n    type AssistantListParams as AssistantListParams,\n  };\n\n  export { AssistantStream };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport { APIPromise } from '../../../core/api-promise';\nimport { buildHeaders } from '../../../internal/headers';\nimport { RequestOptions } from '../../../internal/request-options';\n\nexport class Sessions extends APIResource {\n  /**\n   * Create an ephemeral API token for use in client-side applications with the\n   * Realtime API. Can be configured with the same session parameters as the\n   * `session.update` client event.\n   *\n   * It responds with a session object, plus a `client_secret` key which contains a\n   * usable ephemeral API token that can be used to authenticate browser clients for\n   * the Realtime API.\n   *\n   * @example\n   * ```ts\n   * const session =\n   *   await client.beta.realtime.sessions.create();\n   * ```\n   */\n  create(body: SessionCreateParams, options?: RequestOptions): APIPromise<SessionCreateResponse> {\n    return this._client.post('/realtime/sessions', {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\n/**\n * Realtime session object configuration.\n */\nexport interface Session {\n  /**\n   * Unique identifier for the session that looks like `sess_1234567890abcdef`.\n   */\n  id?: string;\n\n  /**\n   * The format of input audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`. For\n   * `pcm16`, input audio must be 16-bit PCM at a 24kHz sample rate, single channel\n   * (mono), and little-endian byte order.\n   */\n  input_audio_format?: 'pcm16' | 'g711_ulaw' | 'g711_alaw';\n\n  /**\n   * Configuration for input audio noise reduction. This can be set to `null` to turn\n   * off. Noise reduction filters audio added to the input audio buffer before it is\n   * sent to VAD and the model. Filtering the audio can improve VAD and turn\n   * detection accuracy (reducing false positives) and model performance by improving\n   * perception of the input audio.\n   */\n  input_audio_noise_reduction?: Session.InputAudioNoiseReduction;\n\n  /**\n   * Configuration for input audio transcription, defaults to off and can be set to\n   * `null` to turn off once on. Input audio transcription is not native to the\n   * model, since the model consumes audio directly. Transcription runs\n   * asynchronously through\n   * [the /audio/transcriptions endpoint](https://platform.openai.com/docs/api-reference/audio/createTranscription)\n   * and should be treated as guidance of input audio content rather than precisely\n   * what the model heard. The client can optionally set the language and prompt for\n   * transcription, these offer additional guidance to the transcription service.\n   */\n  input_audio_transcription?: Session.InputAudioTranscription;\n\n  /**\n   * The default system instructions (i.e. system message) prepended to model calls.\n   * This field allows the client to guide the model on desired responses. The model\n   * can be instructed on response content and format, (e.g. \"be extremely succinct\",\n   * \"act friendly\", \"here are examples of good responses\") and on audio behavior\n   * (e.g. \"talk quickly\", \"inject emotion into your voice\", \"laugh frequently\"). The\n   * instructions are not guaranteed to be followed by the model, but they provide\n   * guidance to the model on the desired behavior.\n   *\n   * Note that the server sets default instructions which will be used if this field\n   * is not set and are visible in the `session.created` event at the start of the\n   * session.\n   */\n  instructions?: string;\n\n  /**\n   * Maximum number of output tokens for a single assistant response, inclusive of\n   * tool calls. Provide an integer between 1 and 4096 to limit output tokens, or\n   * `inf` for the maximum available tokens for a given model. Defaults to `inf`.\n   */\n  max_response_output_tokens?: number | 'inf';\n\n  /**\n   * The set of modalities the model can respond with. To disable audio, set this to\n   * [\"text\"].\n   */\n  modalities?: Array<'text' | 'audio'>;\n\n  /**\n   * The Realtime model used for this session.\n   */\n  model?:\n    | 'gpt-4o-realtime-preview'\n    | 'gpt-4o-realtime-preview-2024-10-01'\n    | 'gpt-4o-realtime-preview-2024-12-17'\n    | 'gpt-4o-realtime-preview-2025-06-03'\n    | 'gpt-4o-mini-realtime-preview'\n    | 'gpt-4o-mini-realtime-preview-2024-12-17';\n\n  /**\n   * The format of output audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`.\n   * For `pcm16`, output audio is sampled at a rate of 24kHz.\n   */\n  output_audio_format?: 'pcm16' | 'g711_ulaw' | 'g711_alaw';\n\n  /**\n   * The speed of the model's spoken response. 1.0 is the default speed. 0.25 is the\n   * minimum speed. 1.5 is the maximum speed. This value can only be changed in\n   * between model turns, not while a response is in progress.\n   */\n  speed?: number;\n\n  /**\n   * Sampling temperature for the model, limited to [0.6, 1.2]. For audio models a\n   * temperature of 0.8 is highly recommended for best performance.\n   */\n  temperature?: number;\n\n  /**\n   * How the model chooses tools. Options are `auto`, `none`, `required`, or specify\n   * a function.\n   */\n  tool_choice?: string;\n\n  /**\n   * Tools (functions) available to the model.\n   */\n  tools?: Array<Session.Tool>;\n\n  /**\n   * Configuration options for tracing. Set to null to disable tracing. Once tracing\n   * is enabled for a session, the configuration cannot be modified.\n   *\n   * `auto` will create a trace for the session with default values for the workflow\n   * name, group id, and metadata.\n   */\n  tracing?: 'auto' | Session.TracingConfiguration;\n\n  /**\n   * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n   * set to `null` to turn off, in which case the client must manually trigger model\n   * response. Server VAD means that the model will detect the start and end of\n   * speech based on audio volume and respond at the end of user speech. Semantic VAD\n   * is more advanced and uses a turn detection model (in conjunction with VAD) to\n   * semantically estimate whether the user has finished speaking, then dynamically\n   * sets a timeout based on this probability. For example, if user audio trails off\n   * with \"uhhm\", the model will score a low probability of turn end and wait longer\n   * for the user to continue speaking. This can be useful for more natural\n   * conversations, but may have a higher latency.\n   */\n  turn_detection?: Session.TurnDetection;\n\n  /**\n   * The voice the model uses to respond. Voice cannot be changed during the session\n   * once the model has responded with audio at least once. Current voice options are\n   * `alloy`, `ash`, `ballad`, `coral`, `echo`, `sage`, `shimmer`, and `verse`.\n   */\n  voice?: (string & {}) | 'alloy' | 'ash' | 'ballad' | 'coral' | 'echo' | 'sage' | 'shimmer' | 'verse';\n}\n\nexport namespace Session {\n  /**\n   * Configuration for input audio noise reduction. This can be set to `null` to turn\n   * off. Noise reduction filters audio added to the input audio buffer before it is\n   * sent to VAD and the model. Filtering the audio can improve VAD and turn\n   * detection accuracy (reducing false positives) and model performance by improving\n   * perception of the input audio.\n   */\n  export interface InputAudioNoiseReduction {\n    /**\n     * Type of noise reduction. `near_field` is for close-talking microphones such as\n     * headphones, `far_field` is for far-field microphones such as laptop or\n     * conference room microphones.\n     */\n    type?: 'near_field' | 'far_field';\n  }\n\n  /**\n   * Configuration for input audio transcription, defaults to off and can be set to\n   * `null` to turn off once on. Input audio transcription is not native to the\n   * model, since the model consumes audio directly. Transcription runs\n   * asynchronously through\n   * [the /audio/transcriptions endpoint](https://platform.openai.com/docs/api-reference/audio/createTranscription)\n   * and should be treated as guidance of input audio content rather than precisely\n   * what the model heard. The client can optionally set the language and prompt for\n   * transcription, these offer additional guidance to the transcription service.\n   */\n  export interface InputAudioTranscription {\n    /**\n     * The language of the input audio. Supplying the input language in\n     * [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) (e.g. `en`)\n     * format will improve accuracy and latency.\n     */\n    language?: string;\n\n    /**\n     * The model to use for transcription, current options are `gpt-4o-transcribe`,\n     * `gpt-4o-mini-transcribe`, and `whisper-1`.\n     */\n    model?: string;\n\n    /**\n     * An optional text to guide the model's style or continue a previous audio\n     * segment. For `whisper-1`, the\n     * [prompt is a list of keywords](https://platform.openai.com/docs/guides/speech-to-text#prompting).\n     * For `gpt-4o-transcribe` models, the prompt is a free text string, for example\n     * \"expect words related to technology\".\n     */\n    prompt?: string;\n  }\n\n  export interface Tool {\n    /**\n     * The description of the function, including guidance on when and how to call it,\n     * and guidance about what to tell the user when calling (if anything).\n     */\n    description?: string;\n\n    /**\n     * The name of the function.\n     */\n    name?: string;\n\n    /**\n     * Parameters of the function in JSON Schema.\n     */\n    parameters?: unknown;\n\n    /**\n     * The type of the tool, i.e. `function`.\n     */\n    type?: 'function';\n  }\n\n  /**\n   * Granular configuration for tracing.\n   */\n  export interface TracingConfiguration {\n    /**\n     * The group id to attach to this trace to enable filtering and grouping in the\n     * traces dashboard.\n     */\n    group_id?: string;\n\n    /**\n     * The arbitrary metadata to attach to this trace to enable filtering in the traces\n     * dashboard.\n     */\n    metadata?: unknown;\n\n    /**\n     * The name of the workflow to attach to this trace. This is used to name the trace\n     * in the traces dashboard.\n     */\n    workflow_name?: string;\n  }\n\n  /**\n   * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n   * set to `null` to turn off, in which case the client must manually trigger model\n   * response. Server VAD means that the model will detect the start and end of\n   * speech based on audio volume and respond at the end of user speech. Semantic VAD\n   * is more advanced and uses a turn detection model (in conjunction with VAD) to\n   * semantically estimate whether the user has finished speaking, then dynamically\n   * sets a timeout based on this probability. For example, if user audio trails off\n   * with \"uhhm\", the model will score a low probability of turn end and wait longer\n   * for the user to continue speaking. This can be useful for more natural\n   * conversations, but may have a higher latency.\n   */\n  export interface TurnDetection {\n    /**\n     * Whether or not to automatically generate a response when a VAD stop event\n     * occurs.\n     */\n    create_response?: boolean;\n\n    /**\n     * Used only for `semantic_vad` mode. The eagerness of the model to respond. `low`\n     * will wait longer for the user to continue speaking, `high` will respond more\n     * quickly. `auto` is the default and is equivalent to `medium`.\n     */\n    eagerness?: 'low' | 'medium' | 'high' | 'auto';\n\n    /**\n     * Whether or not to automatically interrupt any ongoing response with output to\n     * the default conversation (i.e. `conversation` of `auto`) when a VAD start event\n     * occurs.\n     */\n    interrupt_response?: boolean;\n\n    /**\n     * Used only for `server_vad` mode. Amount of audio to include before the VAD\n     * detected speech (in milliseconds). Defaults to 300ms.\n     */\n    prefix_padding_ms?: number;\n\n    /**\n     * Used only for `server_vad` mode. Duration of silence to detect speech stop (in\n     * milliseconds). Defaults to 500ms. With shorter values the model will respond\n     * more quickly, but may jump in on short pauses from the user.\n     */\n    silence_duration_ms?: number;\n\n    /**\n     * Used only for `server_vad` mode. Activation threshold for VAD (0.0 to 1.0), this\n     * defaults to 0.5. A higher threshold will require louder audio to activate the\n     * model, and thus might perform better in noisy environments.\n     */\n    threshold?: number;\n\n    /**\n     * Type of turn detection.\n     */\n    type?: 'server_vad' | 'semantic_vad';\n  }\n}\n\n/**\n * A new Realtime session configuration, with an ephemeral key. Default TTL for\n * keys is one minute.\n */\nexport interface SessionCreateResponse {\n  /**\n   * Ephemeral key returned by the API.\n   */\n  client_secret: SessionCreateResponse.ClientSecret;\n\n  /**\n   * The format of input audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`.\n   */\n  input_audio_format?: string;\n\n  /**\n   * Configuration for input audio transcription, defaults to off and can be set to\n   * `null` to turn off once on. Input audio transcription is not native to the\n   * model, since the model consumes audio directly. Transcription runs\n   * asynchronously and should be treated as rough guidance rather than the\n   * representation understood by the model.\n   */\n  input_audio_transcription?: SessionCreateResponse.InputAudioTranscription;\n\n  /**\n   * The default system instructions (i.e. system message) prepended to model calls.\n   * This field allows the client to guide the model on desired responses. The model\n   * can be instructed on response content and format, (e.g. \"be extremely succinct\",\n   * \"act friendly\", \"here are examples of good responses\") and on audio behavior\n   * (e.g. \"talk quickly\", \"inject emotion into your voice\", \"laugh frequently\"). The\n   * instructions are not guaranteed to be followed by the model, but they provide\n   * guidance to the model on the desired behavior.\n   *\n   * Note that the server sets default instructions which will be used if this field\n   * is not set and are visible in the `session.created` event at the start of the\n   * session.\n   */\n  instructions?: string;\n\n  /**\n   * Maximum number of output tokens for a single assistant response, inclusive of\n   * tool calls. Provide an integer between 1 and 4096 to limit output tokens, or\n   * `inf` for the maximum available tokens for a given model. Defaults to `inf`.\n   */\n  max_response_output_tokens?: number | 'inf';\n\n  /**\n   * The set of modalities the model can respond with. To disable audio, set this to\n   * [\"text\"].\n   */\n  modalities?: Array<'text' | 'audio'>;\n\n  /**\n   * The format of output audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`.\n   */\n  output_audio_format?: string;\n\n  /**\n   * The speed of the model's spoken response. 1.0 is the default speed. 0.25 is the\n   * minimum speed. 1.5 is the maximum speed. This value can only be changed in\n   * between model turns, not while a response is in progress.\n   */\n  speed?: number;\n\n  /**\n   * Sampling temperature for the model, limited to [0.6, 1.2]. Defaults to 0.8.\n   */\n  temperature?: number;\n\n  /**\n   * How the model chooses tools. Options are `auto`, `none`, `required`, or specify\n   * a function.\n   */\n  tool_choice?: string;\n\n  /**\n   * Tools (functions) available to the model.\n   */\n  tools?: Array<SessionCreateResponse.Tool>;\n\n  /**\n   * Configuration options for tracing. Set to null to disable tracing. Once tracing\n   * is enabled for a session, the configuration cannot be modified.\n   *\n   * `auto` will create a trace for the session with default values for the workflow\n   * name, group id, and metadata.\n   */\n  tracing?: 'auto' | SessionCreateResponse.TracingConfiguration;\n\n  /**\n   * Configuration for turn detection. Can be set to `null` to turn off. Server VAD\n   * means that the model will detect the start and end of speech based on audio\n   * volume and respond at the end of user speech.\n   */\n  turn_detection?: SessionCreateResponse.TurnDetection;\n\n  /**\n   * The voice the model uses to respond. Voice cannot be changed during the session\n   * once the model has responded with audio at least once. Current voice options are\n   * `alloy`, `ash`, `ballad`, `coral`, `echo`, `sage`, `shimmer`, and `verse`.\n   */\n  voice?: (string & {}) | 'alloy' | 'ash' | 'ballad' | 'coral' | 'echo' | 'sage' | 'shimmer' | 'verse';\n}\n\nexport namespace SessionCreateResponse {\n  /**\n   * Ephemeral key returned by the API.\n   */\n  export interface ClientSecret {\n    /**\n     * Timestamp for when the token expires. Currently, all tokens expire after one\n     * minute.\n     */\n    expires_at: number;\n\n    /**\n     * Ephemeral key usable in client environments to authenticate connections to the\n     * Realtime API. Use this in client-side environments rather than a standard API\n     * token, which should only be used server-side.\n     */\n    value: string;\n  }\n\n  /**\n   * Configuration for input audio transcription, defaults to off and can be set to\n   * `null` to turn off once on. Input audio transcription is not native to the\n   * model, since the model consumes audio directly. Transcription runs\n   * asynchronously and should be treated as rough guidance rather than the\n   * representation understood by the model.\n   */\n  export interface InputAudioTranscription {\n    /**\n     * The model to use for transcription.\n     */\n    model?: string;\n  }\n\n  export interface Tool {\n    /**\n     * The description of the function, including guidance on when and how to call it,\n     * and guidance about what to tell the user when calling (if anything).\n     */\n    description?: string;\n\n    /**\n     * The name of the function.\n     */\n    name?: string;\n\n    /**\n     * Parameters of the function in JSON Schema.\n     */\n    parameters?: unknown;\n\n    /**\n     * The type of the tool, i.e. `function`.\n     */\n    type?: 'function';\n  }\n\n  /**\n   * Granular configuration for tracing.\n   */\n  export interface TracingConfiguration {\n    /**\n     * The group id to attach to this trace to enable filtering and grouping in the\n     * traces dashboard.\n     */\n    group_id?: string;\n\n    /**\n     * The arbitrary metadata to attach to this trace to enable filtering in the traces\n     * dashboard.\n     */\n    metadata?: unknown;\n\n    /**\n     * The name of the workflow to attach to this trace. This is used to name the trace\n     * in the traces dashboard.\n     */\n    workflow_name?: string;\n  }\n\n  /**\n   * Configuration for turn detection. Can be set to `null` to turn off. Server VAD\n   * means that the model will detect the start and end of speech based on audio\n   * volume and respond at the end of user speech.\n   */\n  export interface TurnDetection {\n    /**\n     * Amount of audio to include before the VAD detected speech (in milliseconds).\n     * Defaults to 300ms.\n     */\n    prefix_padding_ms?: number;\n\n    /**\n     * Duration of silence to detect speech stop (in milliseconds). Defaults to 500ms.\n     * With shorter values the model will respond more quickly, but may jump in on\n     * short pauses from the user.\n     */\n    silence_duration_ms?: number;\n\n    /**\n     * Activation threshold for VAD (0.0 to 1.0), this defaults to 0.5. A higher\n     * threshold will require louder audio to activate the model, and thus might\n     * perform better in noisy environments.\n     */\n    threshold?: number;\n\n    /**\n     * Type of turn detection, only `server_vad` is currently supported.\n     */\n    type?: string;\n  }\n}\n\nexport interface SessionCreateParams {\n  /**\n   * Configuration options for the generated client secret.\n   */\n  client_secret?: SessionCreateParams.ClientSecret;\n\n  /**\n   * The format of input audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`. For\n   * `pcm16`, input audio must be 16-bit PCM at a 24kHz sample rate, single channel\n   * (mono), and little-endian byte order.\n   */\n  input_audio_format?: 'pcm16' | 'g711_ulaw' | 'g711_alaw';\n\n  /**\n   * Configuration for input audio noise reduction. This can be set to `null` to turn\n   * off. Noise reduction filters audio added to the input audio buffer before it is\n   * sent to VAD and the model. Filtering the audio can improve VAD and turn\n   * detection accuracy (reducing false positives) and model performance by improving\n   * perception of the input audio.\n   */\n  input_audio_noise_reduction?: SessionCreateParams.InputAudioNoiseReduction;\n\n  /**\n   * Configuration for input audio transcription, defaults to off and can be set to\n   * `null` to turn off once on. Input audio transcription is not native to the\n   * model, since the model consumes audio directly. Transcription runs\n   * asynchronously through\n   * [the /audio/transcriptions endpoint](https://platform.openai.com/docs/api-reference/audio/createTranscription)\n   * and should be treated as guidance of input audio content rather than precisely\n   * what the model heard. The client can optionally set the language and prompt for\n   * transcription, these offer additional guidance to the transcription service.\n   */\n  input_audio_transcription?: SessionCreateParams.InputAudioTranscription;\n\n  /**\n   * The default system instructions (i.e. system message) prepended to model calls.\n   * This field allows the client to guide the model on desired responses. The model\n   * can be instructed on response content and format, (e.g. \"be extremely succinct\",\n   * \"act friendly\", \"here are examples of good responses\") and on audio behavior\n   * (e.g. \"talk quickly\", \"inject emotion into your voice\", \"laugh frequently\"). The\n   * instructions are not guaranteed to be followed by the model, but they provide\n   * guidance to the model on the desired behavior.\n   *\n   * Note that the server sets default instructions which will be used if this field\n   * is not set and are visible in the `session.created` event at the start of the\n   * session.\n   */\n  instructions?: string;\n\n  /**\n   * Maximum number of output tokens for a single assistant response, inclusive of\n   * tool calls. Provide an integer between 1 and 4096 to limit output tokens, or\n   * `inf` for the maximum available tokens for a given model. Defaults to `inf`.\n   */\n  max_response_output_tokens?: number | 'inf';\n\n  /**\n   * The set of modalities the model can respond with. To disable audio, set this to\n   * [\"text\"].\n   */\n  modalities?: Array<'text' | 'audio'>;\n\n  /**\n   * The Realtime model used for this session.\n   */\n  model?:\n    | 'gpt-4o-realtime-preview'\n    | 'gpt-4o-realtime-preview-2024-10-01'\n    | 'gpt-4o-realtime-preview-2024-12-17'\n    | 'gpt-4o-realtime-preview-2025-06-03'\n    | 'gpt-4o-mini-realtime-preview'\n    | 'gpt-4o-mini-realtime-preview-2024-12-17';\n\n  /**\n   * The format of output audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`.\n   * For `pcm16`, output audio is sampled at a rate of 24kHz.\n   */\n  output_audio_format?: 'pcm16' | 'g711_ulaw' | 'g711_alaw';\n\n  /**\n   * The speed of the model's spoken response. 1.0 is the default speed. 0.25 is the\n   * minimum speed. 1.5 is the maximum speed. This value can only be changed in\n   * between model turns, not while a response is in progress.\n   */\n  speed?: number;\n\n  /**\n   * Sampling temperature for the model, limited to [0.6, 1.2]. For audio models a\n   * temperature of 0.8 is highly recommended for best performance.\n   */\n  temperature?: number;\n\n  /**\n   * How the model chooses tools. Options are `auto`, `none`, `required`, or specify\n   * a function.\n   */\n  tool_choice?: string;\n\n  /**\n   * Tools (functions) available to the model.\n   */\n  tools?: Array<SessionCreateParams.Tool>;\n\n  /**\n   * Configuration options for tracing. Set to null to disable tracing. Once tracing\n   * is enabled for a session, the configuration cannot be modified.\n   *\n   * `auto` will create a trace for the session with default values for the workflow\n   * name, group id, and metadata.\n   */\n  tracing?: 'auto' | SessionCreateParams.TracingConfiguration;\n\n  /**\n   * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n   * set to `null` to turn off, in which case the client must manually trigger model\n   * response. Server VAD means that the model will detect the start and end of\n   * speech based on audio volume and respond at the end of user speech. Semantic VAD\n   * is more advanced and uses a turn detection model (in conjunction with VAD) to\n   * semantically estimate whether the user has finished speaking, then dynamically\n   * sets a timeout based on this probability. For example, if user audio trails off\n   * with \"uhhm\", the model will score a low probability of turn end and wait longer\n   * for the user to continue speaking. This can be useful for more natural\n   * conversations, but may have a higher latency.\n   */\n  turn_detection?: SessionCreateParams.TurnDetection;\n\n  /**\n   * The voice the model uses to respond. Voice cannot be changed during the session\n   * once the model has responded with audio at least once. Current voice options are\n   * `alloy`, `ash`, `ballad`, `coral`, `echo`, `sage`, `shimmer`, and `verse`.\n   */\n  voice?: (string & {}) | 'alloy' | 'ash' | 'ballad' | 'coral' | 'echo' | 'sage' | 'shimmer' | 'verse';\n}\n\nexport namespace SessionCreateParams {\n  /**\n   * Configuration options for the generated client secret.\n   */\n  export interface ClientSecret {\n    /**\n     * Configuration for the ephemeral token expiration.\n     */\n    expires_after?: ClientSecret.ExpiresAfter;\n  }\n\n  export namespace ClientSecret {\n    /**\n     * Configuration for the ephemeral token expiration.\n     */\n    export interface ExpiresAfter {\n      /**\n       * The anchor point for the ephemeral token expiration. Only `created_at` is\n       * currently supported.\n       */\n      anchor: 'created_at';\n\n      /**\n       * The number of seconds from the anchor point to the expiration. Select a value\n       * between `10` and `7200`.\n       */\n      seconds?: number;\n    }\n  }\n\n  /**\n   * Configuration for input audio noise reduction. This can be set to `null` to turn\n   * off. Noise reduction filters audio added to the input audio buffer before it is\n   * sent to VAD and the model. Filtering the audio can improve VAD and turn\n   * detection accuracy (reducing false positives) and model performance by improving\n   * perception of the input audio.\n   */\n  export interface InputAudioNoiseReduction {\n    /**\n     * Type of noise reduction. `near_field` is for close-talking microphones such as\n     * headphones, `far_field` is for far-field microphones such as laptop or\n     * conference room microphones.\n     */\n    type?: 'near_field' | 'far_field';\n  }\n\n  /**\n   * Configuration for input audio transcription, defaults to off and can be set to\n   * `null` to turn off once on. Input audio transcription is not native to the\n   * model, since the model consumes audio directly. Transcription runs\n   * asynchronously through\n   * [the /audio/transcriptions endpoint](https://platform.openai.com/docs/api-reference/audio/createTranscription)\n   * and should be treated as guidance of input audio content rather than precisely\n   * what the model heard. The client can optionally set the language and prompt for\n   * transcription, these offer additional guidance to the transcription service.\n   */\n  export interface InputAudioTranscription {\n    /**\n     * The language of the input audio. Supplying the input language in\n     * [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) (e.g. `en`)\n     * format will improve accuracy and latency.\n     */\n    language?: string;\n\n    /**\n     * The model to use for transcription, current options are `gpt-4o-transcribe`,\n     * `gpt-4o-mini-transcribe`, and `whisper-1`.\n     */\n    model?: string;\n\n    /**\n     * An optional text to guide the model's style or continue a previous audio\n     * segment. For `whisper-1`, the\n     * [prompt is a list of keywords](https://platform.openai.com/docs/guides/speech-to-text#prompting).\n     * For `gpt-4o-transcribe` models, the prompt is a free text string, for example\n     * \"expect words related to technology\".\n     */\n    prompt?: string;\n  }\n\n  export interface Tool {\n    /**\n     * The description of the function, including guidance on when and how to call it,\n     * and guidance about what to tell the user when calling (if anything).\n     */\n    description?: string;\n\n    /**\n     * The name of the function.\n     */\n    name?: string;\n\n    /**\n     * Parameters of the function in JSON Schema.\n     */\n    parameters?: unknown;\n\n    /**\n     * The type of the tool, i.e. `function`.\n     */\n    type?: 'function';\n  }\n\n  /**\n   * Granular configuration for tracing.\n   */\n  export interface TracingConfiguration {\n    /**\n     * The group id to attach to this trace to enable filtering and grouping in the\n     * traces dashboard.\n     */\n    group_id?: string;\n\n    /**\n     * The arbitrary metadata to attach to this trace to enable filtering in the traces\n     * dashboard.\n     */\n    metadata?: unknown;\n\n    /**\n     * The name of the workflow to attach to this trace. This is used to name the trace\n     * in the traces dashboard.\n     */\n    workflow_name?: string;\n  }\n\n  /**\n   * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n   * set to `null` to turn off, in which case the client must manually trigger model\n   * response. Server VAD means that the model will detect the start and end of\n   * speech based on audio volume and respond at the end of user speech. Semantic VAD\n   * is more advanced and uses a turn detection model (in conjunction with VAD) to\n   * semantically estimate whether the user has finished speaking, then dynamically\n   * sets a timeout based on this probability. For example, if user audio trails off\n   * with \"uhhm\", the model will score a low probability of turn end and wait longer\n   * for the user to continue speaking. This can be useful for more natural\n   * conversations, but may have a higher latency.\n   */\n  export interface TurnDetection {\n    /**\n     * Whether or not to automatically generate a response when a VAD stop event\n     * occurs.\n     */\n    create_response?: boolean;\n\n    /**\n     * Used only for `semantic_vad` mode. The eagerness of the model to respond. `low`\n     * will wait longer for the user to continue speaking, `high` will respond more\n     * quickly. `auto` is the default and is equivalent to `medium`.\n     */\n    eagerness?: 'low' | 'medium' | 'high' | 'auto';\n\n    /**\n     * Whether or not to automatically interrupt any ongoing response with output to\n     * the default conversation (i.e. `conversation` of `auto`) when a VAD start event\n     * occurs.\n     */\n    interrupt_response?: boolean;\n\n    /**\n     * Used only for `server_vad` mode. Amount of audio to include before the VAD\n     * detected speech (in milliseconds). Defaults to 300ms.\n     */\n    prefix_padding_ms?: number;\n\n    /**\n     * Used only for `server_vad` mode. Duration of silence to detect speech stop (in\n     * milliseconds). Defaults to 500ms. With shorter values the model will respond\n     * more quickly, but may jump in on short pauses from the user.\n     */\n    silence_duration_ms?: number;\n\n    /**\n     * Used only for `server_vad` mode. Activation threshold for VAD (0.0 to 1.0), this\n     * defaults to 0.5. A higher threshold will require louder audio to activate the\n     * model, and thus might perform better in noisy environments.\n     */\n    threshold?: number;\n\n    /**\n     * Type of turn detection.\n     */\n    type?: 'server_vad' | 'semantic_vad';\n  }\n}\n\nexport declare namespace Sessions {\n  export {\n    type Session as Session,\n    type SessionCreateResponse as SessionCreateResponse,\n    type SessionCreateParams as SessionCreateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport { APIPromise } from '../../../core/api-promise';\nimport { buildHeaders } from '../../../internal/headers';\nimport { RequestOptions } from '../../../internal/request-options';\n\nexport class TranscriptionSessions extends APIResource {\n  /**\n   * Create an ephemeral API token for use in client-side applications with the\n   * Realtime API specifically for realtime transcriptions. Can be configured with\n   * the same session parameters as the `transcription_session.update` client event.\n   *\n   * It responds with a session object, plus a `client_secret` key which contains a\n   * usable ephemeral API token that can be used to authenticate browser clients for\n   * the Realtime API.\n   *\n   * @example\n   * ```ts\n   * const transcriptionSession =\n   *   await client.beta.realtime.transcriptionSessions.create();\n   * ```\n   */\n  create(body: TranscriptionSessionCreateParams, options?: RequestOptions): APIPromise<TranscriptionSession> {\n    return this._client.post('/realtime/transcription_sessions', {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\n/**\n * A new Realtime transcription session configuration.\n *\n * When a session is created on the server via REST API, the session object also\n * contains an ephemeral key. Default TTL for keys is 10 minutes. This property is\n * not present when a session is updated via the WebSocket API.\n */\nexport interface TranscriptionSession {\n  /**\n   * Ephemeral key returned by the API. Only present when the session is created on\n   * the server via REST API.\n   */\n  client_secret: TranscriptionSession.ClientSecret;\n\n  /**\n   * The format of input audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`.\n   */\n  input_audio_format?: string;\n\n  /**\n   * Configuration of the transcription model.\n   */\n  input_audio_transcription?: TranscriptionSession.InputAudioTranscription;\n\n  /**\n   * The set of modalities the model can respond with. To disable audio, set this to\n   * [\"text\"].\n   */\n  modalities?: Array<'text' | 'audio'>;\n\n  /**\n   * Configuration for turn detection. Can be set to `null` to turn off. Server VAD\n   * means that the model will detect the start and end of speech based on audio\n   * volume and respond at the end of user speech.\n   */\n  turn_detection?: TranscriptionSession.TurnDetection;\n}\n\nexport namespace TranscriptionSession {\n  /**\n   * Ephemeral key returned by the API. Only present when the session is created on\n   * the server via REST API.\n   */\n  export interface ClientSecret {\n    /**\n     * Timestamp for when the token expires. Currently, all tokens expire after one\n     * minute.\n     */\n    expires_at: number;\n\n    /**\n     * Ephemeral key usable in client environments to authenticate connections to the\n     * Realtime API. Use this in client-side environments rather than a standard API\n     * token, which should only be used server-side.\n     */\n    value: string;\n  }\n\n  /**\n   * Configuration of the transcription model.\n   */\n  export interface InputAudioTranscription {\n    /**\n     * The language of the input audio. Supplying the input language in\n     * [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) (e.g. `en`)\n     * format will improve accuracy and latency.\n     */\n    language?: string;\n\n    /**\n     * The model to use for transcription. Can be `gpt-4o-transcribe`,\n     * `gpt-4o-mini-transcribe`, or `whisper-1`.\n     */\n    model?: 'gpt-4o-transcribe' | 'gpt-4o-mini-transcribe' | 'whisper-1';\n\n    /**\n     * An optional text to guide the model's style or continue a previous audio\n     * segment. The\n     * [prompt](https://platform.openai.com/docs/guides/speech-to-text#prompting)\n     * should match the audio language.\n     */\n    prompt?: string;\n  }\n\n  /**\n   * Configuration for turn detection. Can be set to `null` to turn off. Server VAD\n   * means that the model will detect the start and end of speech based on audio\n   * volume and respond at the end of user speech.\n   */\n  export interface TurnDetection {\n    /**\n     * Amount of audio to include before the VAD detected speech (in milliseconds).\n     * Defaults to 300ms.\n     */\n    prefix_padding_ms?: number;\n\n    /**\n     * Duration of silence to detect speech stop (in milliseconds). Defaults to 500ms.\n     * With shorter values the model will respond more quickly, but may jump in on\n     * short pauses from the user.\n     */\n    silence_duration_ms?: number;\n\n    /**\n     * Activation threshold for VAD (0.0 to 1.0), this defaults to 0.5. A higher\n     * threshold will require louder audio to activate the model, and thus might\n     * perform better in noisy environments.\n     */\n    threshold?: number;\n\n    /**\n     * Type of turn detection, only `server_vad` is currently supported.\n     */\n    type?: string;\n  }\n}\n\nexport interface TranscriptionSessionCreateParams {\n  /**\n   * Configuration options for the generated client secret.\n   */\n  client_secret?: TranscriptionSessionCreateParams.ClientSecret;\n\n  /**\n   * The set of items to include in the transcription. Current available items are:\n   *\n   * - `item.input_audio_transcription.logprobs`\n   */\n  include?: Array<string>;\n\n  /**\n   * The format of input audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`. For\n   * `pcm16`, input audio must be 16-bit PCM at a 24kHz sample rate, single channel\n   * (mono), and little-endian byte order.\n   */\n  input_audio_format?: 'pcm16' | 'g711_ulaw' | 'g711_alaw';\n\n  /**\n   * Configuration for input audio noise reduction. This can be set to `null` to turn\n   * off. Noise reduction filters audio added to the input audio buffer before it is\n   * sent to VAD and the model. Filtering the audio can improve VAD and turn\n   * detection accuracy (reducing false positives) and model performance by improving\n   * perception of the input audio.\n   */\n  input_audio_noise_reduction?: TranscriptionSessionCreateParams.InputAudioNoiseReduction;\n\n  /**\n   * Configuration for input audio transcription. The client can optionally set the\n   * language and prompt for transcription, these offer additional guidance to the\n   * transcription service.\n   */\n  input_audio_transcription?: TranscriptionSessionCreateParams.InputAudioTranscription;\n\n  /**\n   * The set of modalities the model can respond with. To disable audio, set this to\n   * [\"text\"].\n   */\n  modalities?: Array<'text' | 'audio'>;\n\n  /**\n   * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n   * set to `null` to turn off, in which case the client must manually trigger model\n   * response. Server VAD means that the model will detect the start and end of\n   * speech based on audio volume and respond at the end of user speech. Semantic VAD\n   * is more advanced and uses a turn detection model (in conjunction with VAD) to\n   * semantically estimate whether the user has finished speaking, then dynamically\n   * sets a timeout based on this probability. For example, if user audio trails off\n   * with \"uhhm\", the model will score a low probability of turn end and wait longer\n   * for the user to continue speaking. This can be useful for more natural\n   * conversations, but may have a higher latency.\n   */\n  turn_detection?: TranscriptionSessionCreateParams.TurnDetection;\n}\n\nexport namespace TranscriptionSessionCreateParams {\n  /**\n   * Configuration options for the generated client secret.\n   */\n  export interface ClientSecret {\n    /**\n     * Configuration for the ephemeral token expiration.\n     */\n    expires_at?: ClientSecret.ExpiresAt;\n  }\n\n  export namespace ClientSecret {\n    /**\n     * Configuration for the ephemeral token expiration.\n     */\n    export interface ExpiresAt {\n      /**\n       * The anchor point for the ephemeral token expiration. Only `created_at` is\n       * currently supported.\n       */\n      anchor?: 'created_at';\n\n      /**\n       * The number of seconds from the anchor point to the expiration. Select a value\n       * between `10` and `7200`.\n       */\n      seconds?: number;\n    }\n  }\n\n  /**\n   * Configuration for input audio noise reduction. This can be set to `null` to turn\n   * off. Noise reduction filters audio added to the input audio buffer before it is\n   * sent to VAD and the model. Filtering the audio can improve VAD and turn\n   * detection accuracy (reducing false positives) and model performance by improving\n   * perception of the input audio.\n   */\n  export interface InputAudioNoiseReduction {\n    /**\n     * Type of noise reduction. `near_field` is for close-talking microphones such as\n     * headphones, `far_field` is for far-field microphones such as laptop or\n     * conference room microphones.\n     */\n    type?: 'near_field' | 'far_field';\n  }\n\n  /**\n   * Configuration for input audio transcription. The client can optionally set the\n   * language and prompt for transcription, these offer additional guidance to the\n   * transcription service.\n   */\n  export interface InputAudioTranscription {\n    /**\n     * The language of the input audio. Supplying the input language in\n     * [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) (e.g. `en`)\n     * format will improve accuracy and latency.\n     */\n    language?: string;\n\n    /**\n     * The model to use for transcription, current options are `gpt-4o-transcribe`,\n     * `gpt-4o-mini-transcribe`, and `whisper-1`.\n     */\n    model?: 'gpt-4o-transcribe' | 'gpt-4o-mini-transcribe' | 'whisper-1';\n\n    /**\n     * An optional text to guide the model's style or continue a previous audio\n     * segment. For `whisper-1`, the\n     * [prompt is a list of keywords](https://platform.openai.com/docs/guides/speech-to-text#prompting).\n     * For `gpt-4o-transcribe` models, the prompt is a free text string, for example\n     * \"expect words related to technology\".\n     */\n    prompt?: string;\n  }\n\n  /**\n   * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n   * set to `null` to turn off, in which case the client must manually trigger model\n   * response. Server VAD means that the model will detect the start and end of\n   * speech based on audio volume and respond at the end of user speech. Semantic VAD\n   * is more advanced and uses a turn detection model (in conjunction with VAD) to\n   * semantically estimate whether the user has finished speaking, then dynamically\n   * sets a timeout based on this probability. For example, if user audio trails off\n   * with \"uhhm\", the model will score a low probability of turn end and wait longer\n   * for the user to continue speaking. This can be useful for more natural\n   * conversations, but may have a higher latency.\n   */\n  export interface TurnDetection {\n    /**\n     * Whether or not to automatically generate a response when a VAD stop event\n     * occurs. Not available for transcription sessions.\n     */\n    create_response?: boolean;\n\n    /**\n     * Used only for `semantic_vad` mode. The eagerness of the model to respond. `low`\n     * will wait longer for the user to continue speaking, `high` will respond more\n     * quickly. `auto` is the default and is equivalent to `medium`.\n     */\n    eagerness?: 'low' | 'medium' | 'high' | 'auto';\n\n    /**\n     * Whether or not to automatically interrupt any ongoing response with output to\n     * the default conversation (i.e. `conversation` of `auto`) when a VAD start event\n     * occurs. Not available for transcription sessions.\n     */\n    interrupt_response?: boolean;\n\n    /**\n     * Used only for `server_vad` mode. Amount of audio to include before the VAD\n     * detected speech (in milliseconds). Defaults to 300ms.\n     */\n    prefix_padding_ms?: number;\n\n    /**\n     * Used only for `server_vad` mode. Duration of silence to detect speech stop (in\n     * milliseconds). Defaults to 500ms. With shorter values the model will respond\n     * more quickly, but may jump in on short pauses from the user.\n     */\n    silence_duration_ms?: number;\n\n    /**\n     * Used only for `server_vad` mode. Activation threshold for VAD (0.0 to 1.0), this\n     * defaults to 0.5. A higher threshold will require louder audio to activate the\n     * model, and thus might perform better in noisy environments.\n     */\n    threshold?: number;\n\n    /**\n     * Type of turn detection.\n     */\n    type?: 'server_vad' | 'semantic_vad';\n  }\n}\n\nexport declare namespace TranscriptionSessions {\n  export {\n    type TranscriptionSession as TranscriptionSession,\n    type TranscriptionSessionCreateParams as TranscriptionSessionCreateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as RealtimeAPI from './realtime';\nimport * as Shared from '../../shared';\nimport * as SessionsAPI from './sessions';\nimport {\n  Session as SessionsAPISession,\n  SessionCreateParams,\n  SessionCreateResponse,\n  Sessions,\n} from './sessions';\nimport * as TranscriptionSessionsAPI from './transcription-sessions';\nimport {\n  TranscriptionSession,\n  TranscriptionSessionCreateParams,\n  TranscriptionSessions,\n} from './transcription-sessions';\n\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n  sessions: SessionsAPI.Sessions = new SessionsAPI.Sessions(this._client);\n  transcriptionSessions: TranscriptionSessionsAPI.TranscriptionSessions =\n    new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n}\n\n/**\n * Returned when a conversation is created. Emitted right after session creation.\n */\nexport interface ConversationCreatedEvent {\n  /**\n   * The conversation resource.\n   */\n  conversation: ConversationCreatedEvent.Conversation;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The event type, must be `conversation.created`.\n   */\n  type: 'conversation.created';\n}\n\nexport namespace ConversationCreatedEvent {\n  /**\n   * The conversation resource.\n   */\n  export interface Conversation {\n    /**\n     * The unique ID of the conversation.\n     */\n    id?: string;\n\n    /**\n     * The object type, must be `realtime.conversation`.\n     */\n    object?: 'realtime.conversation';\n  }\n}\n\n/**\n * The item to add to the conversation.\n */\nexport interface ConversationItem {\n  /**\n   * The unique ID of the item, this can be generated by the client to help manage\n   * server-side context, but is not required because the server will generate one if\n   * not provided.\n   */\n  id?: string;\n\n  /**\n   * The arguments of the function call (for `function_call` items).\n   */\n  arguments?: string;\n\n  /**\n   * The ID of the function call (for `function_call` and `function_call_output`\n   * items). If passed on a `function_call_output` item, the server will check that a\n   * `function_call` item with the same ID exists in the conversation history.\n   */\n  call_id?: string;\n\n  /**\n   * The content of the message, applicable for `message` items.\n   *\n   * - Message items of role `system` support only `input_text` content\n   * - Message items of role `user` support `input_text` and `input_audio` content\n   * - Message items of role `assistant` support `text` content.\n   */\n  content?: Array<ConversationItemContent>;\n\n  /**\n   * The name of the function being called (for `function_call` items).\n   */\n  name?: string;\n\n  /**\n   * Identifier for the API object being returned - always `realtime.item`.\n   */\n  object?: 'realtime.item';\n\n  /**\n   * The output of the function call (for `function_call_output` items).\n   */\n  output?: string;\n\n  /**\n   * The role of the message sender (`user`, `assistant`, `system`), only applicable\n   * for `message` items.\n   */\n  role?: 'user' | 'assistant' | 'system';\n\n  /**\n   * The status of the item (`completed`, `incomplete`, `in_progress`). These have no\n   * effect on the conversation, but are accepted for consistency with the\n   * `conversation.item.created` event.\n   */\n  status?: 'completed' | 'incomplete' | 'in_progress';\n\n  /**\n   * The type of the item (`message`, `function_call`, `function_call_output`).\n   */\n  type?: 'message' | 'function_call' | 'function_call_output';\n}\n\nexport interface ConversationItemContent {\n  /**\n   * ID of a previous conversation item to reference (for `item_reference` content\n   * types in `response.create` events). These can reference both client and server\n   * created items.\n   */\n  id?: string;\n\n  /**\n   * Base64-encoded audio bytes, used for `input_audio` content type.\n   */\n  audio?: string;\n\n  /**\n   * The text content, used for `input_text` and `text` content types.\n   */\n  text?: string;\n\n  /**\n   * The transcript of the audio, used for `input_audio` and `audio` content types.\n   */\n  transcript?: string;\n\n  /**\n   * The content type (`input_text`, `input_audio`, `item_reference`, `text`,\n   * `audio`).\n   */\n  type?: 'input_text' | 'input_audio' | 'item_reference' | 'text' | 'audio';\n}\n\n/**\n * Add a new Item to the Conversation's context, including messages, function\n * calls, and function call responses. This event can be used both to populate a\n * \"history\" of the conversation and to add new items mid-stream, but has the\n * current limitation that it cannot populate assistant audio messages.\n *\n * If successful, the server will respond with a `conversation.item.created` event,\n * otherwise an `error` event will be sent.\n */\nexport interface ConversationItemCreateEvent {\n  /**\n   * The item to add to the conversation.\n   */\n  item: ConversationItem;\n\n  /**\n   * The event type, must be `conversation.item.create`.\n   */\n  type: 'conversation.item.create';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n\n  /**\n   * The ID of the preceding item after which the new item will be inserted. If not\n   * set, the new item will be appended to the end of the conversation. If set to\n   * `root`, the new item will be added to the beginning of the conversation. If set\n   * to an existing ID, it allows an item to be inserted mid-conversation. If the ID\n   * cannot be found, an error will be returned and the item will not be added.\n   */\n  previous_item_id?: string;\n}\n\n/**\n * Returned when a conversation item is created. There are several scenarios that\n * produce this event:\n *\n * - The server is generating a Response, which if successful will produce either\n *   one or two Items, which will be of type `message` (role `assistant`) or type\n *   `function_call`.\n * - The input audio buffer has been committed, either by the client or the server\n *   (in `server_vad` mode). The server will take the content of the input audio\n *   buffer and add it to a new user message Item.\n * - The client has sent a `conversation.item.create` event to add a new Item to\n *   the Conversation.\n */\nexport interface ConversationItemCreatedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The item to add to the conversation.\n   */\n  item: ConversationItem;\n\n  /**\n   * The event type, must be `conversation.item.created`.\n   */\n  type: 'conversation.item.created';\n\n  /**\n   * The ID of the preceding item in the Conversation context, allows the client to\n   * understand the order of the conversation. Can be `null` if the item has no\n   * predecessor.\n   */\n  previous_item_id?: string | null;\n}\n\n/**\n * Send this event when you want to remove any item from the conversation history.\n * The server will respond with a `conversation.item.deleted` event, unless the\n * item does not exist in the conversation history, in which case the server will\n * respond with an error.\n */\nexport interface ConversationItemDeleteEvent {\n  /**\n   * The ID of the item to delete.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `conversation.item.delete`.\n   */\n  type: 'conversation.item.delete';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\n/**\n * Returned when an item in the conversation is deleted by the client with a\n * `conversation.item.delete` event. This event is used to synchronize the server's\n * understanding of the conversation history with the client's view.\n */\nexport interface ConversationItemDeletedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item that was deleted.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `conversation.item.deleted`.\n   */\n  type: 'conversation.item.deleted';\n}\n\n/**\n * This event is the output of audio transcription for user audio written to the\n * user audio buffer. Transcription begins when the input audio buffer is committed\n * by the client or server (in `server_vad` mode). Transcription runs\n * asynchronously with Response creation, so this event may come before or after\n * the Response events.\n *\n * Realtime API models accept audio natively, and thus input transcription is a\n * separate process run on a separate ASR (Automatic Speech Recognition) model. The\n * transcript may diverge somewhat from the model's interpretation, and should be\n * treated as a rough guide.\n */\nexport interface ConversationItemInputAudioTranscriptionCompletedEvent {\n  /**\n   * The index of the content part containing the audio.\n   */\n  content_index: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the user message item containing the audio.\n   */\n  item_id: string;\n\n  /**\n   * The transcribed text.\n   */\n  transcript: string;\n\n  /**\n   * The event type, must be `conversation.item.input_audio_transcription.completed`.\n   */\n  type: 'conversation.item.input_audio_transcription.completed';\n\n  /**\n   * Usage statistics for the transcription.\n   */\n  usage:\n    | ConversationItemInputAudioTranscriptionCompletedEvent.TranscriptTextUsageTokens\n    | ConversationItemInputAudioTranscriptionCompletedEvent.TranscriptTextUsageDuration;\n\n  /**\n   * The log probabilities of the transcription.\n   */\n  logprobs?: Array<ConversationItemInputAudioTranscriptionCompletedEvent.Logprob> | null;\n}\n\nexport namespace ConversationItemInputAudioTranscriptionCompletedEvent {\n  /**\n   * Usage statistics for models billed by token usage.\n   */\n  export interface TranscriptTextUsageTokens {\n    /**\n     * Number of input tokens billed for this request.\n     */\n    input_tokens: number;\n\n    /**\n     * Number of output tokens generated.\n     */\n    output_tokens: number;\n\n    /**\n     * Total number of tokens used (input + output).\n     */\n    total_tokens: number;\n\n    /**\n     * The type of the usage object. Always `tokens` for this variant.\n     */\n    type: 'tokens';\n\n    /**\n     * Details about the input tokens billed for this request.\n     */\n    input_token_details?: TranscriptTextUsageTokens.InputTokenDetails;\n  }\n\n  export namespace TranscriptTextUsageTokens {\n    /**\n     * Details about the input tokens billed for this request.\n     */\n    export interface InputTokenDetails {\n      /**\n       * Number of audio tokens billed for this request.\n       */\n      audio_tokens?: number;\n\n      /**\n       * Number of text tokens billed for this request.\n       */\n      text_tokens?: number;\n    }\n  }\n\n  /**\n   * Usage statistics for models billed by audio input duration.\n   */\n  export interface TranscriptTextUsageDuration {\n    /**\n     * Duration of the input audio in seconds.\n     */\n    seconds: number;\n\n    /**\n     * The type of the usage object. Always `duration` for this variant.\n     */\n    type: 'duration';\n  }\n\n  /**\n   * A log probability object.\n   */\n  export interface Logprob {\n    /**\n     * The token that was used to generate the log probability.\n     */\n    token: string;\n\n    /**\n     * The bytes that were used to generate the log probability.\n     */\n    bytes: Array<number>;\n\n    /**\n     * The log probability of the token.\n     */\n    logprob: number;\n  }\n}\n\n/**\n * Returned when the text value of an input audio transcription content part is\n * updated.\n */\nexport interface ConversationItemInputAudioTranscriptionDeltaEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `conversation.item.input_audio_transcription.delta`.\n   */\n  type: 'conversation.item.input_audio_transcription.delta';\n\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index?: number;\n\n  /**\n   * The text delta.\n   */\n  delta?: string;\n\n  /**\n   * The log probabilities of the transcription.\n   */\n  logprobs?: Array<ConversationItemInputAudioTranscriptionDeltaEvent.Logprob> | null;\n}\n\nexport namespace ConversationItemInputAudioTranscriptionDeltaEvent {\n  /**\n   * A log probability object.\n   */\n  export interface Logprob {\n    /**\n     * The token that was used to generate the log probability.\n     */\n    token: string;\n\n    /**\n     * The bytes that were used to generate the log probability.\n     */\n    bytes: Array<number>;\n\n    /**\n     * The log probability of the token.\n     */\n    logprob: number;\n  }\n}\n\n/**\n * Returned when input audio transcription is configured, and a transcription\n * request for a user message failed. These events are separate from other `error`\n * events so that the client can identify the related Item.\n */\nexport interface ConversationItemInputAudioTranscriptionFailedEvent {\n  /**\n   * The index of the content part containing the audio.\n   */\n  content_index: number;\n\n  /**\n   * Details of the transcription error.\n   */\n  error: ConversationItemInputAudioTranscriptionFailedEvent.Error;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the user message item.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `conversation.item.input_audio_transcription.failed`.\n   */\n  type: 'conversation.item.input_audio_transcription.failed';\n}\n\nexport namespace ConversationItemInputAudioTranscriptionFailedEvent {\n  /**\n   * Details of the transcription error.\n   */\n  export interface Error {\n    /**\n     * Error code, if any.\n     */\n    code?: string;\n\n    /**\n     * A human-readable error message.\n     */\n    message?: string;\n\n    /**\n     * Parameter related to the error, if any.\n     */\n    param?: string;\n\n    /**\n     * The type of error.\n     */\n    type?: string;\n  }\n}\n\n/**\n * Send this event when you want to retrieve the server's representation of a\n * specific item in the conversation history. This is useful, for example, to\n * inspect user audio after noise cancellation and VAD. The server will respond\n * with a `conversation.item.retrieved` event, unless the item does not exist in\n * the conversation history, in which case the server will respond with an error.\n */\nexport interface ConversationItemRetrieveEvent {\n  /**\n   * The ID of the item to retrieve.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `conversation.item.retrieve`.\n   */\n  type: 'conversation.item.retrieve';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\n/**\n * Send this event to truncate a previous assistant message\u2019s audio. The server\n * will produce audio faster than realtime, so this event is useful when the user\n * interrupts to truncate audio that has already been sent to the client but not\n * yet played. This will synchronize the server's understanding of the audio with\n * the client's playback.\n *\n * Truncating audio will delete the server-side text transcript to ensure there is\n * not text in the context that hasn't been heard by the user.\n *\n * If successful, the server will respond with a `conversation.item.truncated`\n * event.\n */\nexport interface ConversationItemTruncateEvent {\n  /**\n   * Inclusive duration up to which audio is truncated, in milliseconds. If the\n   * audio_end_ms is greater than the actual audio duration, the server will respond\n   * with an error.\n   */\n  audio_end_ms: number;\n\n  /**\n   * The index of the content part to truncate. Set this to 0.\n   */\n  content_index: number;\n\n  /**\n   * The ID of the assistant message item to truncate. Only assistant message items\n   * can be truncated.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `conversation.item.truncate`.\n   */\n  type: 'conversation.item.truncate';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\n/**\n * Returned when an earlier assistant audio message item is truncated by the client\n * with a `conversation.item.truncate` event. This event is used to synchronize the\n * server's understanding of the audio with the client's playback.\n *\n * This action will truncate the audio and remove the server-side text transcript\n * to ensure there is no text in the context that hasn't been heard by the user.\n */\nexport interface ConversationItemTruncatedEvent {\n  /**\n   * The duration up to which the audio was truncated, in milliseconds.\n   */\n  audio_end_ms: number;\n\n  /**\n   * The index of the content part that was truncated.\n   */\n  content_index: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the assistant message item that was truncated.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `conversation.item.truncated`.\n   */\n  type: 'conversation.item.truncated';\n}\n\n/**\n * The item to add to the conversation.\n */\nexport interface ConversationItemWithReference {\n  /**\n   * For an item of type (`message` | `function_call` | `function_call_output`) this\n   * field allows the client to assign the unique ID of the item. It is not required\n   * because the server will generate one if not provided.\n   *\n   * For an item of type `item_reference`, this field is required and is a reference\n   * to any item that has previously existed in the conversation.\n   */\n  id?: string;\n\n  /**\n   * The arguments of the function call (for `function_call` items).\n   */\n  arguments?: string;\n\n  /**\n   * The ID of the function call (for `function_call` and `function_call_output`\n   * items). If passed on a `function_call_output` item, the server will check that a\n   * `function_call` item with the same ID exists in the conversation history.\n   */\n  call_id?: string;\n\n  /**\n   * The content of the message, applicable for `message` items.\n   *\n   * - Message items of role `system` support only `input_text` content\n   * - Message items of role `user` support `input_text` and `input_audio` content\n   * - Message items of role `assistant` support `text` content.\n   */\n  content?: Array<ConversationItemWithReference.Content>;\n\n  /**\n   * The name of the function being called (for `function_call` items).\n   */\n  name?: string;\n\n  /**\n   * Identifier for the API object being returned - always `realtime.item`.\n   */\n  object?: 'realtime.item';\n\n  /**\n   * The output of the function call (for `function_call_output` items).\n   */\n  output?: string;\n\n  /**\n   * The role of the message sender (`user`, `assistant`, `system`), only applicable\n   * for `message` items.\n   */\n  role?: 'user' | 'assistant' | 'system';\n\n  /**\n   * The status of the item (`completed`, `incomplete`, `in_progress`). These have no\n   * effect on the conversation, but are accepted for consistency with the\n   * `conversation.item.created` event.\n   */\n  status?: 'completed' | 'incomplete' | 'in_progress';\n\n  /**\n   * The type of the item (`message`, `function_call`, `function_call_output`,\n   * `item_reference`).\n   */\n  type?: 'message' | 'function_call' | 'function_call_output' | 'item_reference';\n}\n\nexport namespace ConversationItemWithReference {\n  export interface Content {\n    /**\n     * ID of a previous conversation item to reference (for `item_reference` content\n     * types in `response.create` events). These can reference both client and server\n     * created items.\n     */\n    id?: string;\n\n    /**\n     * Base64-encoded audio bytes, used for `input_audio` content type.\n     */\n    audio?: string;\n\n    /**\n     * The text content, used for `input_text` and `text` content types.\n     */\n    text?: string;\n\n    /**\n     * The transcript of the audio, used for `input_audio` content type.\n     */\n    transcript?: string;\n\n    /**\n     * The content type (`input_text`, `input_audio`, `item_reference`, `text`).\n     */\n    type?: 'input_text' | 'input_audio' | 'item_reference' | 'text';\n  }\n}\n\n/**\n * Returned when an error occurs, which could be a client problem or a server\n * problem. Most errors are recoverable and the session will stay open, we\n * recommend to implementors to monitor and log error messages by default.\n */\nexport interface ErrorEvent {\n  /**\n   * Details of the error.\n   */\n  error: ErrorEvent.Error;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The event type, must be `error`.\n   */\n  type: 'error';\n}\n\nexport namespace ErrorEvent {\n  /**\n   * Details of the error.\n   */\n  export interface Error {\n    /**\n     * A human-readable error message.\n     */\n    message: string;\n\n    /**\n     * The type of error (e.g., \"invalid_request_error\", \"server_error\").\n     */\n    type: string;\n\n    /**\n     * Error code, if any.\n     */\n    code?: string | null;\n\n    /**\n     * The event_id of the client event that caused the error, if applicable.\n     */\n    event_id?: string | null;\n\n    /**\n     * Parameter related to the error, if any.\n     */\n    param?: string | null;\n  }\n}\n\n/**\n * Send this event to append audio bytes to the input audio buffer. The audio\n * buffer is temporary storage you can write to and later commit. In Server VAD\n * mode, the audio buffer is used to detect speech and the server will decide when\n * to commit. When Server VAD is disabled, you must commit the audio buffer\n * manually.\n *\n * The client may choose how much audio to place in each event up to a maximum of\n * 15 MiB, for example streaming smaller chunks from the client may allow the VAD\n * to be more responsive. Unlike made other client events, the server will not send\n * a confirmation response to this event.\n */\nexport interface InputAudioBufferAppendEvent {\n  /**\n   * Base64-encoded audio bytes. This must be in the format specified by the\n   * `input_audio_format` field in the session configuration.\n   */\n  audio: string;\n\n  /**\n   * The event type, must be `input_audio_buffer.append`.\n   */\n  type: 'input_audio_buffer.append';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\n/**\n * Send this event to clear the audio bytes in the buffer. The server will respond\n * with an `input_audio_buffer.cleared` event.\n */\nexport interface InputAudioBufferClearEvent {\n  /**\n   * The event type, must be `input_audio_buffer.clear`.\n   */\n  type: 'input_audio_buffer.clear';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\n/**\n * Returned when the input audio buffer is cleared by the client with a\n * `input_audio_buffer.clear` event.\n */\nexport interface InputAudioBufferClearedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The event type, must be `input_audio_buffer.cleared`.\n   */\n  type: 'input_audio_buffer.cleared';\n}\n\n/**\n * Send this event to commit the user input audio buffer, which will create a new\n * user message item in the conversation. This event will produce an error if the\n * input audio buffer is empty. When in Server VAD mode, the client does not need\n * to send this event, the server will commit the audio buffer automatically.\n *\n * Committing the input audio buffer will trigger input audio transcription (if\n * enabled in session configuration), but it will not create a response from the\n * model. The server will respond with an `input_audio_buffer.committed` event.\n */\nexport interface InputAudioBufferCommitEvent {\n  /**\n   * The event type, must be `input_audio_buffer.commit`.\n   */\n  type: 'input_audio_buffer.commit';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\n/**\n * Returned when an input audio buffer is committed, either by the client or\n * automatically in server VAD mode. The `item_id` property is the ID of the user\n * message item that will be created, thus a `conversation.item.created` event will\n * also be sent to the client.\n */\nexport interface InputAudioBufferCommittedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the user message item that will be created.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `input_audio_buffer.committed`.\n   */\n  type: 'input_audio_buffer.committed';\n\n  /**\n   * The ID of the preceding item after which the new item will be inserted. Can be\n   * `null` if the item has no predecessor.\n   */\n  previous_item_id?: string | null;\n}\n\n/**\n * Sent by the server when in `server_vad` mode to indicate that speech has been\n * detected in the audio buffer. This can happen any time audio is added to the\n * buffer (unless speech is already detected). The client may want to use this\n * event to interrupt audio playback or provide visual feedback to the user.\n *\n * The client should expect to receive a `input_audio_buffer.speech_stopped` event\n * when speech stops. The `item_id` property is the ID of the user message item\n * that will be created when speech stops and will also be included in the\n * `input_audio_buffer.speech_stopped` event (unless the client manually commits\n * the audio buffer during VAD activation).\n */\nexport interface InputAudioBufferSpeechStartedEvent {\n  /**\n   * Milliseconds from the start of all audio written to the buffer during the\n   * session when speech was first detected. This will correspond to the beginning of\n   * audio sent to the model, and thus includes the `prefix_padding_ms` configured in\n   * the Session.\n   */\n  audio_start_ms: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the user message item that will be created when speech stops.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `input_audio_buffer.speech_started`.\n   */\n  type: 'input_audio_buffer.speech_started';\n}\n\n/**\n * Returned in `server_vad` mode when the server detects the end of speech in the\n * audio buffer. The server will also send an `conversation.item.created` event\n * with the user message item that is created from the audio buffer.\n */\nexport interface InputAudioBufferSpeechStoppedEvent {\n  /**\n   * Milliseconds since the session started when speech stopped. This will correspond\n   * to the end of audio sent to the model, and thus includes the\n   * `min_silence_duration_ms` configured in the Session.\n   */\n  audio_end_ms: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the user message item that will be created.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `input_audio_buffer.speech_stopped`.\n   */\n  type: 'input_audio_buffer.speech_stopped';\n}\n\n/**\n * Emitted at the beginning of a Response to indicate the updated rate limits. When\n * a Response is created some tokens will be \"reserved\" for the output tokens, the\n * rate limits shown here reflect that reservation, which is then adjusted\n * accordingly once the Response is completed.\n */\nexport interface RateLimitsUpdatedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * List of rate limit information.\n   */\n  rate_limits: Array<RateLimitsUpdatedEvent.RateLimit>;\n\n  /**\n   * The event type, must be `rate_limits.updated`.\n   */\n  type: 'rate_limits.updated';\n}\n\nexport namespace RateLimitsUpdatedEvent {\n  export interface RateLimit {\n    /**\n     * The maximum allowed value for the rate limit.\n     */\n    limit?: number;\n\n    /**\n     * The name of the rate limit (`requests`, `tokens`).\n     */\n    name?: 'requests' | 'tokens';\n\n    /**\n     * The remaining value before the limit is reached.\n     */\n    remaining?: number;\n\n    /**\n     * Seconds until the rate limit resets.\n     */\n    reset_seconds?: number;\n  }\n}\n\n/**\n * A realtime client event.\n */\nexport type RealtimeClientEvent =\n  | ConversationItemCreateEvent\n  | ConversationItemDeleteEvent\n  | ConversationItemRetrieveEvent\n  | ConversationItemTruncateEvent\n  | InputAudioBufferAppendEvent\n  | InputAudioBufferClearEvent\n  | RealtimeClientEvent.OutputAudioBufferClear\n  | InputAudioBufferCommitEvent\n  | ResponseCancelEvent\n  | ResponseCreateEvent\n  | SessionUpdateEvent\n  | TranscriptionSessionUpdate;\n\nexport namespace RealtimeClientEvent {\n  /**\n   * **WebRTC Only:** Emit to cut off the current audio response. This will trigger\n   * the server to stop generating audio and emit a `output_audio_buffer.cleared`\n   * event. This event should be preceded by a `response.cancel` client event to stop\n   * the generation of the current response.\n   * [Learn more](https://platform.openai.com/docs/guides/realtime-conversations#client-and-server-events-for-audio-in-webrtc).\n   */\n  export interface OutputAudioBufferClear {\n    /**\n     * The event type, must be `output_audio_buffer.clear`.\n     */\n    type: 'output_audio_buffer.clear';\n\n    /**\n     * The unique ID of the client event used for error handling.\n     */\n    event_id?: string;\n  }\n}\n\n/**\n * The response resource.\n */\nexport interface RealtimeResponse {\n  /**\n   * The unique ID of the response.\n   */\n  id?: string;\n\n  /**\n   * Which conversation the response is added to, determined by the `conversation`\n   * field in the `response.create` event. If `auto`, the response will be added to\n   * the default conversation and the value of `conversation_id` will be an id like\n   * `conv_1234`. If `none`, the response will not be added to any conversation and\n   * the value of `conversation_id` will be `null`. If responses are being triggered\n   * by server VAD, the response will be added to the default conversation, thus the\n   * `conversation_id` will be an id like `conv_1234`.\n   */\n  conversation_id?: string;\n\n  /**\n   * Maximum number of output tokens for a single assistant response, inclusive of\n   * tool calls, that was used in this response.\n   */\n  max_output_tokens?: number | 'inf';\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * The set of modalities the model used to respond. If there are multiple\n   * modalities, the model will pick one, for example if `modalities` is\n   * `[\"text\", \"audio\"]`, the model could be responding in either text or audio.\n   */\n  modalities?: Array<'text' | 'audio'>;\n\n  /**\n   * The object type, must be `realtime.response`.\n   */\n  object?: 'realtime.response';\n\n  /**\n   * The list of output items generated by the response.\n   */\n  output?: Array<ConversationItem>;\n\n  /**\n   * The format of output audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`.\n   */\n  output_audio_format?: 'pcm16' | 'g711_ulaw' | 'g711_alaw';\n\n  /**\n   * The final status of the response (`completed`, `cancelled`, `failed`, or\n   * `incomplete`, `in_progress`).\n   */\n  status?: 'completed' | 'cancelled' | 'failed' | 'incomplete' | 'in_progress';\n\n  /**\n   * Additional details about the status.\n   */\n  status_details?: RealtimeResponseStatus;\n\n  /**\n   * Sampling temperature for the model, limited to [0.6, 1.2]. Defaults to 0.8.\n   */\n  temperature?: number;\n\n  /**\n   * Usage statistics for the Response, this will correspond to billing. A Realtime\n   * API session will maintain a conversation context and append new Items to the\n   * Conversation, thus output from previous turns (text and audio tokens) will\n   * become the input for later turns.\n   */\n  usage?: RealtimeResponseUsage;\n\n  /**\n   * The voice the model used to respond. Current voice options are `alloy`, `ash`,\n   * `ballad`, `coral`, `echo`, `sage`, `shimmer`, and `verse`.\n   */\n  voice?: (string & {}) | 'alloy' | 'ash' | 'ballad' | 'coral' | 'echo' | 'sage' | 'shimmer' | 'verse';\n}\n\n/**\n * Additional details about the status.\n */\nexport interface RealtimeResponseStatus {\n  /**\n   * A description of the error that caused the response to fail, populated when the\n   * `status` is `failed`.\n   */\n  error?: RealtimeResponseStatus.Error;\n\n  /**\n   * The reason the Response did not complete. For a `cancelled` Response, one of\n   * `turn_detected` (the server VAD detected a new start of speech) or\n   * `client_cancelled` (the client sent a cancel event). For an `incomplete`\n   * Response, one of `max_output_tokens` or `content_filter` (the server-side safety\n   * filter activated and cut off the response).\n   */\n  reason?: 'turn_detected' | 'client_cancelled' | 'max_output_tokens' | 'content_filter';\n\n  /**\n   * The type of error that caused the response to fail, corresponding with the\n   * `status` field (`completed`, `cancelled`, `incomplete`, `failed`).\n   */\n  type?: 'completed' | 'cancelled' | 'incomplete' | 'failed';\n}\n\nexport namespace RealtimeResponseStatus {\n  /**\n   * A description of the error that caused the response to fail, populated when the\n   * `status` is `failed`.\n   */\n  export interface Error {\n    /**\n     * Error code, if any.\n     */\n    code?: string;\n\n    /**\n     * The type of error.\n     */\n    type?: string;\n  }\n}\n\n/**\n * Usage statistics for the Response, this will correspond to billing. A Realtime\n * API session will maintain a conversation context and append new Items to the\n * Conversation, thus output from previous turns (text and audio tokens) will\n * become the input for later turns.\n */\nexport interface RealtimeResponseUsage {\n  /**\n   * Details about the input tokens used in the Response.\n   */\n  input_token_details?: RealtimeResponseUsage.InputTokenDetails;\n\n  /**\n   * The number of input tokens used in the Response, including text and audio\n   * tokens.\n   */\n  input_tokens?: number;\n\n  /**\n   * Details about the output tokens used in the Response.\n   */\n  output_token_details?: RealtimeResponseUsage.OutputTokenDetails;\n\n  /**\n   * The number of output tokens sent in the Response, including text and audio\n   * tokens.\n   */\n  output_tokens?: number;\n\n  /**\n   * The total number of tokens in the Response including input and output text and\n   * audio tokens.\n   */\n  total_tokens?: number;\n}\n\nexport namespace RealtimeResponseUsage {\n  /**\n   * Details about the input tokens used in the Response.\n   */\n  export interface InputTokenDetails {\n    /**\n     * The number of audio tokens used in the Response.\n     */\n    audio_tokens?: number;\n\n    /**\n     * The number of cached tokens used in the Response.\n     */\n    cached_tokens?: number;\n\n    /**\n     * The number of text tokens used in the Response.\n     */\n    text_tokens?: number;\n  }\n\n  /**\n   * Details about the output tokens used in the Response.\n   */\n  export interface OutputTokenDetails {\n    /**\n     * The number of audio tokens used in the Response.\n     */\n    audio_tokens?: number;\n\n    /**\n     * The number of text tokens used in the Response.\n     */\n    text_tokens?: number;\n  }\n}\n\n/**\n * A realtime server event.\n */\nexport type RealtimeServerEvent =\n  | ConversationCreatedEvent\n  | ConversationItemCreatedEvent\n  | ConversationItemDeletedEvent\n  | ConversationItemInputAudioTranscriptionCompletedEvent\n  | ConversationItemInputAudioTranscriptionDeltaEvent\n  | ConversationItemInputAudioTranscriptionFailedEvent\n  | RealtimeServerEvent.ConversationItemRetrieved\n  | ConversationItemTruncatedEvent\n  | ErrorEvent\n  | InputAudioBufferClearedEvent\n  | InputAudioBufferCommittedEvent\n  | InputAudioBufferSpeechStartedEvent\n  | InputAudioBufferSpeechStoppedEvent\n  | RateLimitsUpdatedEvent\n  | ResponseAudioDeltaEvent\n  | ResponseAudioDoneEvent\n  | ResponseAudioTranscriptDeltaEvent\n  | ResponseAudioTranscriptDoneEvent\n  | ResponseContentPartAddedEvent\n  | ResponseContentPartDoneEvent\n  | ResponseCreatedEvent\n  | ResponseDoneEvent\n  | ResponseFunctionCallArgumentsDeltaEvent\n  | ResponseFunctionCallArgumentsDoneEvent\n  | ResponseOutputItemAddedEvent\n  | ResponseOutputItemDoneEvent\n  | ResponseTextDeltaEvent\n  | ResponseTextDoneEvent\n  | SessionCreatedEvent\n  | SessionUpdatedEvent\n  | TranscriptionSessionUpdatedEvent\n  | RealtimeServerEvent.OutputAudioBufferStarted\n  | RealtimeServerEvent.OutputAudioBufferStopped\n  | RealtimeServerEvent.OutputAudioBufferCleared;\n\nexport namespace RealtimeServerEvent {\n  /**\n   * Returned when a conversation item is retrieved with\n   * `conversation.item.retrieve`.\n   */\n  export interface ConversationItemRetrieved {\n    /**\n     * The unique ID of the server event.\n     */\n    event_id: string;\n\n    /**\n     * The item to add to the conversation.\n     */\n    item: RealtimeAPI.ConversationItem;\n\n    /**\n     * The event type, must be `conversation.item.retrieved`.\n     */\n    type: 'conversation.item.retrieved';\n  }\n\n  /**\n   * **WebRTC Only:** Emitted when the server begins streaming audio to the client.\n   * This event is emitted after an audio content part has been added\n   * (`response.content_part.added`) to the response.\n   * [Learn more](https://platform.openai.com/docs/guides/realtime-conversations#client-and-server-events-for-audio-in-webrtc).\n   */\n  export interface OutputAudioBufferStarted {\n    /**\n     * The unique ID of the server event.\n     */\n    event_id: string;\n\n    /**\n     * The unique ID of the response that produced the audio.\n     */\n    response_id: string;\n\n    /**\n     * The event type, must be `output_audio_buffer.started`.\n     */\n    type: 'output_audio_buffer.started';\n  }\n\n  /**\n   * **WebRTC Only:** Emitted when the output audio buffer has been completely\n   * drained on the server, and no more audio is forthcoming. This event is emitted\n   * after the full response data has been sent to the client (`response.done`).\n   * [Learn more](https://platform.openai.com/docs/guides/realtime-conversations#client-and-server-events-for-audio-in-webrtc).\n   */\n  export interface OutputAudioBufferStopped {\n    /**\n     * The unique ID of the server event.\n     */\n    event_id: string;\n\n    /**\n     * The unique ID of the response that produced the audio.\n     */\n    response_id: string;\n\n    /**\n     * The event type, must be `output_audio_buffer.stopped`.\n     */\n    type: 'output_audio_buffer.stopped';\n  }\n\n  /**\n   * **WebRTC Only:** Emitted when the output audio buffer is cleared. This happens\n   * either in VAD mode when the user has interrupted\n   * (`input_audio_buffer.speech_started`), or when the client has emitted the\n   * `output_audio_buffer.clear` event to manually cut off the current audio\n   * response.\n   * [Learn more](https://platform.openai.com/docs/guides/realtime-conversations#client-and-server-events-for-audio-in-webrtc).\n   */\n  export interface OutputAudioBufferCleared {\n    /**\n     * The unique ID of the server event.\n     */\n    event_id: string;\n\n    /**\n     * The unique ID of the response that produced the audio.\n     */\n    response_id: string;\n\n    /**\n     * The event type, must be `output_audio_buffer.cleared`.\n     */\n    type: 'output_audio_buffer.cleared';\n  }\n}\n\n/**\n * Returned when the model-generated audio is updated.\n */\nexport interface ResponseAudioDeltaEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * Base64-encoded audio data delta.\n   */\n  delta: string;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.audio.delta`.\n   */\n  type: 'response.audio.delta';\n}\n\n/**\n * Returned when the model-generated audio is done. Also emitted when a Response is\n * interrupted, incomplete, or cancelled.\n */\nexport interface ResponseAudioDoneEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.audio.done`.\n   */\n  type: 'response.audio.done';\n}\n\n/**\n * Returned when the model-generated transcription of audio output is updated.\n */\nexport interface ResponseAudioTranscriptDeltaEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * The transcript delta.\n   */\n  delta: string;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.audio_transcript.delta`.\n   */\n  type: 'response.audio_transcript.delta';\n}\n\n/**\n * Returned when the model-generated transcription of audio output is done\n * streaming. Also emitted when a Response is interrupted, incomplete, or\n * cancelled.\n */\nexport interface ResponseAudioTranscriptDoneEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The final transcript of the audio.\n   */\n  transcript: string;\n\n  /**\n   * The event type, must be `response.audio_transcript.done`.\n   */\n  type: 'response.audio_transcript.done';\n}\n\n/**\n * Send this event to cancel an in-progress response. The server will respond with\n * a `response.done` event with a status of `response.status=cancelled`. If there\n * is no response to cancel, the server will respond with an error.\n */\nexport interface ResponseCancelEvent {\n  /**\n   * The event type, must be `response.cancel`.\n   */\n  type: 'response.cancel';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n\n  /**\n   * A specific response ID to cancel - if not provided, will cancel an in-progress\n   * response in the default conversation.\n   */\n  response_id?: string;\n}\n\n/**\n * Returned when a new content part is added to an assistant message item during\n * response generation.\n */\nexport interface ResponseContentPartAddedEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item to which the content part was added.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The content part that was added.\n   */\n  part: ResponseContentPartAddedEvent.Part;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.content_part.added`.\n   */\n  type: 'response.content_part.added';\n}\n\nexport namespace ResponseContentPartAddedEvent {\n  /**\n   * The content part that was added.\n   */\n  export interface Part {\n    /**\n     * Base64-encoded audio data (if type is \"audio\").\n     */\n    audio?: string;\n\n    /**\n     * The text content (if type is \"text\").\n     */\n    text?: string;\n\n    /**\n     * The transcript of the audio (if type is \"audio\").\n     */\n    transcript?: string;\n\n    /**\n     * The content type (\"text\", \"audio\").\n     */\n    type?: 'text' | 'audio';\n  }\n}\n\n/**\n * Returned when a content part is done streaming in an assistant message item.\n * Also emitted when a Response is interrupted, incomplete, or cancelled.\n */\nexport interface ResponseContentPartDoneEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The content part that is done.\n   */\n  part: ResponseContentPartDoneEvent.Part;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.content_part.done`.\n   */\n  type: 'response.content_part.done';\n}\n\nexport namespace ResponseContentPartDoneEvent {\n  /**\n   * The content part that is done.\n   */\n  export interface Part {\n    /**\n     * Base64-encoded audio data (if type is \"audio\").\n     */\n    audio?: string;\n\n    /**\n     * The text content (if type is \"text\").\n     */\n    text?: string;\n\n    /**\n     * The transcript of the audio (if type is \"audio\").\n     */\n    transcript?: string;\n\n    /**\n     * The content type (\"text\", \"audio\").\n     */\n    type?: 'text' | 'audio';\n  }\n}\n\n/**\n * This event instructs the server to create a Response, which means triggering\n * model inference. When in Server VAD mode, the server will create Responses\n * automatically.\n *\n * A Response will include at least one Item, and may have two, in which case the\n * second will be a function call. These Items will be appended to the conversation\n * history.\n *\n * The server will respond with a `response.created` event, events for Items and\n * content created, and finally a `response.done` event to indicate the Response is\n * complete.\n *\n * The `response.create` event includes inference configuration like\n * `instructions`, and `temperature`. These fields will override the Session's\n * configuration for this Response only.\n */\nexport interface ResponseCreateEvent {\n  /**\n   * The event type, must be `response.create`.\n   */\n  type: 'response.create';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n\n  /**\n   * Create a new Realtime response with these parameters\n   */\n  response?: ResponseCreateEvent.Response;\n}\n\nexport namespace ResponseCreateEvent {\n  /**\n   * Create a new Realtime response with these parameters\n   */\n  export interface Response {\n    /**\n     * Controls which conversation the response is added to. Currently supports `auto`\n     * and `none`, with `auto` as the default value. The `auto` value means that the\n     * contents of the response will be added to the default conversation. Set this to\n     * `none` to create an out-of-band response which will not add items to default\n     * conversation.\n     */\n    conversation?: (string & {}) | 'auto' | 'none';\n\n    /**\n     * Input items to include in the prompt for the model. Using this field creates a\n     * new context for this Response instead of using the default conversation. An\n     * empty array `[]` will clear the context for this Response. Note that this can\n     * include references to items from the default conversation.\n     */\n    input?: Array<RealtimeAPI.ConversationItemWithReference>;\n\n    /**\n     * The default system instructions (i.e. system message) prepended to model calls.\n     * This field allows the client to guide the model on desired responses. The model\n     * can be instructed on response content and format, (e.g. \"be extremely succinct\",\n     * \"act friendly\", \"here are examples of good responses\") and on audio behavior\n     * (e.g. \"talk quickly\", \"inject emotion into your voice\", \"laugh frequently\"). The\n     * instructions are not guaranteed to be followed by the model, but they provide\n     * guidance to the model on the desired behavior.\n     *\n     * Note that the server sets default instructions which will be used if this field\n     * is not set and are visible in the `session.created` event at the start of the\n     * session.\n     */\n    instructions?: string;\n\n    /**\n     * Maximum number of output tokens for a single assistant response, inclusive of\n     * tool calls. Provide an integer between 1 and 4096 to limit output tokens, or\n     * `inf` for the maximum available tokens for a given model. Defaults to `inf`.\n     */\n    max_response_output_tokens?: number | 'inf';\n\n    /**\n     * Set of 16 key-value pairs that can be attached to an object. This can be useful\n     * for storing additional information about the object in a structured format, and\n     * querying for objects via API or the dashboard.\n     *\n     * Keys are strings with a maximum length of 64 characters. Values are strings with\n     * a maximum length of 512 characters.\n     */\n    metadata?: Shared.Metadata | null;\n\n    /**\n     * The set of modalities the model can respond with. To disable audio, set this to\n     * [\"text\"].\n     */\n    modalities?: Array<'text' | 'audio'>;\n\n    /**\n     * The format of output audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`.\n     */\n    output_audio_format?: 'pcm16' | 'g711_ulaw' | 'g711_alaw';\n\n    /**\n     * Sampling temperature for the model, limited to [0.6, 1.2]. Defaults to 0.8.\n     */\n    temperature?: number;\n\n    /**\n     * How the model chooses tools. Options are `auto`, `none`, `required`, or specify\n     * a function, like `{\"type\": \"function\", \"function\": {\"name\": \"my_function\"}}`.\n     */\n    tool_choice?: string;\n\n    /**\n     * Tools (functions) available to the model.\n     */\n    tools?: Array<Response.Tool>;\n\n    /**\n     * The voice the model uses to respond. Voice cannot be changed during the session\n     * once the model has responded with audio at least once. Current voice options are\n     * `alloy`, `ash`, `ballad`, `coral`, `echo`, `sage`, `shimmer`, and `verse`.\n     */\n    voice?: (string & {}) | 'alloy' | 'ash' | 'ballad' | 'coral' | 'echo' | 'sage' | 'shimmer' | 'verse';\n  }\n\n  export namespace Response {\n    export interface Tool {\n      /**\n       * The description of the function, including guidance on when and how to call it,\n       * and guidance about what to tell the user when calling (if anything).\n       */\n      description?: string;\n\n      /**\n       * The name of the function.\n       */\n      name?: string;\n\n      /**\n       * Parameters of the function in JSON Schema.\n       */\n      parameters?: unknown;\n\n      /**\n       * The type of the tool, i.e. `function`.\n       */\n      type?: 'function';\n    }\n  }\n}\n\n/**\n * Returned when a new Response is created. The first event of response creation,\n * where the response is in an initial state of `in_progress`.\n */\nexport interface ResponseCreatedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The response resource.\n   */\n  response: RealtimeResponse;\n\n  /**\n   * The event type, must be `response.created`.\n   */\n  type: 'response.created';\n}\n\n/**\n * Returned when a Response is done streaming. Always emitted, no matter the final\n * state. The Response object included in the `response.done` event will include\n * all output Items in the Response but will omit the raw audio data.\n */\nexport interface ResponseDoneEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The response resource.\n   */\n  response: RealtimeResponse;\n\n  /**\n   * The event type, must be `response.done`.\n   */\n  type: 'response.done';\n}\n\n/**\n * Returned when the model-generated function call arguments are updated.\n */\nexport interface ResponseFunctionCallArgumentsDeltaEvent {\n  /**\n   * The ID of the function call.\n   */\n  call_id: string;\n\n  /**\n   * The arguments delta as a JSON string.\n   */\n  delta: string;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the function call item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.function_call_arguments.delta`.\n   */\n  type: 'response.function_call_arguments.delta';\n}\n\n/**\n * Returned when the model-generated function call arguments are done streaming.\n * Also emitted when a Response is interrupted, incomplete, or cancelled.\n */\nexport interface ResponseFunctionCallArgumentsDoneEvent {\n  /**\n   * The final arguments as a JSON string.\n   */\n  arguments: string;\n\n  /**\n   * The ID of the function call.\n   */\n  call_id: string;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the function call item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.function_call_arguments.done`.\n   */\n  type: 'response.function_call_arguments.done';\n}\n\n/**\n * Returned when a new Item is created during Response generation.\n */\nexport interface ResponseOutputItemAddedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The item to add to the conversation.\n   */\n  item: ConversationItem;\n\n  /**\n   * The index of the output item in the Response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the Response to which the item belongs.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.output_item.added`.\n   */\n  type: 'response.output_item.added';\n}\n\n/**\n * Returned when an Item is done streaming. Also emitted when a Response is\n * interrupted, incomplete, or cancelled.\n */\nexport interface ResponseOutputItemDoneEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The item to add to the conversation.\n   */\n  item: ConversationItem;\n\n  /**\n   * The index of the output item in the Response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the Response to which the item belongs.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.output_item.done`.\n   */\n  type: 'response.output_item.done';\n}\n\n/**\n * Returned when the text value of a \"text\" content part is updated.\n */\nexport interface ResponseTextDeltaEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * The text delta.\n   */\n  delta: string;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.text.delta`.\n   */\n  type: 'response.text.delta';\n}\n\n/**\n * Returned when the text value of a \"text\" content part is done streaming. Also\n * emitted when a Response is interrupted, incomplete, or cancelled.\n */\nexport interface ResponseTextDoneEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The final text content.\n   */\n  text: string;\n\n  /**\n   * The event type, must be `response.text.done`.\n   */\n  type: 'response.text.done';\n}\n\n/**\n * Returned when a Session is created. Emitted automatically when a new connection\n * is established as the first server event. This event will contain the default\n * Session configuration.\n */\nexport interface SessionCreatedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * Realtime session object configuration.\n   */\n  session: SessionsAPI.Session;\n\n  /**\n   * The event type, must be `session.created`.\n   */\n  type: 'session.created';\n}\n\n/**\n * Send this event to update the session\u2019s default configuration. The client may\n * send this event at any time to update any field, except for `voice`. However,\n * note that once a session has been initialized with a particular `model`, it\n * can\u2019t be changed to another model using `session.update`.\n *\n * When the server receives a `session.update`, it will respond with a\n * `session.updated` event showing the full, effective configuration. Only the\n * fields that are present are updated. To clear a field like `instructions`, pass\n * an empty string.\n */\nexport interface SessionUpdateEvent {\n  /**\n   * Realtime session object configuration.\n   */\n  session: SessionUpdateEvent.Session;\n\n  /**\n   * The event type, must be `session.update`.\n   */\n  type: 'session.update';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\nexport namespace SessionUpdateEvent {\n  /**\n   * Realtime session object configuration.\n   */\n  export interface Session {\n    /**\n     * Configuration options for the generated client secret.\n     */\n    client_secret?: Session.ClientSecret;\n\n    /**\n     * The format of input audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`. For\n     * `pcm16`, input audio must be 16-bit PCM at a 24kHz sample rate, single channel\n     * (mono), and little-endian byte order.\n     */\n    input_audio_format?: 'pcm16' | 'g711_ulaw' | 'g711_alaw';\n\n    /**\n     * Configuration for input audio noise reduction. This can be set to `null` to turn\n     * off. Noise reduction filters audio added to the input audio buffer before it is\n     * sent to VAD and the model. Filtering the audio can improve VAD and turn\n     * detection accuracy (reducing false positives) and model performance by improving\n     * perception of the input audio.\n     */\n    input_audio_noise_reduction?: Session.InputAudioNoiseReduction;\n\n    /**\n     * Configuration for input audio transcription, defaults to off and can be set to\n     * `null` to turn off once on. Input audio transcription is not native to the\n     * model, since the model consumes audio directly. Transcription runs\n     * asynchronously through\n     * [the /audio/transcriptions endpoint](https://platform.openai.com/docs/api-reference/audio/createTranscription)\n     * and should be treated as guidance of input audio content rather than precisely\n     * what the model heard. The client can optionally set the language and prompt for\n     * transcription, these offer additional guidance to the transcription service.\n     */\n    input_audio_transcription?: Session.InputAudioTranscription;\n\n    /**\n     * The default system instructions (i.e. system message) prepended to model calls.\n     * This field allows the client to guide the model on desired responses. The model\n     * can be instructed on response content and format, (e.g. \"be extremely succinct\",\n     * \"act friendly\", \"here are examples of good responses\") and on audio behavior\n     * (e.g. \"talk quickly\", \"inject emotion into your voice\", \"laugh frequently\"). The\n     * instructions are not guaranteed to be followed by the model, but they provide\n     * guidance to the model on the desired behavior.\n     *\n     * Note that the server sets default instructions which will be used if this field\n     * is not set and are visible in the `session.created` event at the start of the\n     * session.\n     */\n    instructions?: string;\n\n    /**\n     * Maximum number of output tokens for a single assistant response, inclusive of\n     * tool calls. Provide an integer between 1 and 4096 to limit output tokens, or\n     * `inf` for the maximum available tokens for a given model. Defaults to `inf`.\n     */\n    max_response_output_tokens?: number | 'inf';\n\n    /**\n     * The set of modalities the model can respond with. To disable audio, set this to\n     * [\"text\"].\n     */\n    modalities?: Array<'text' | 'audio'>;\n\n    /**\n     * The Realtime model used for this session.\n     */\n    model?:\n      | 'gpt-4o-realtime-preview'\n      | 'gpt-4o-realtime-preview-2024-10-01'\n      | 'gpt-4o-realtime-preview-2024-12-17'\n      | 'gpt-4o-realtime-preview-2025-06-03'\n      | 'gpt-4o-mini-realtime-preview'\n      | 'gpt-4o-mini-realtime-preview-2024-12-17';\n\n    /**\n     * The format of output audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`.\n     * For `pcm16`, output audio is sampled at a rate of 24kHz.\n     */\n    output_audio_format?: 'pcm16' | 'g711_ulaw' | 'g711_alaw';\n\n    /**\n     * The speed of the model's spoken response. 1.0 is the default speed. 0.25 is the\n     * minimum speed. 1.5 is the maximum speed. This value can only be changed in\n     * between model turns, not while a response is in progress.\n     */\n    speed?: number;\n\n    /**\n     * Sampling temperature for the model, limited to [0.6, 1.2]. For audio models a\n     * temperature of 0.8 is highly recommended for best performance.\n     */\n    temperature?: number;\n\n    /**\n     * How the model chooses tools. Options are `auto`, `none`, `required`, or specify\n     * a function.\n     */\n    tool_choice?: string;\n\n    /**\n     * Tools (functions) available to the model.\n     */\n    tools?: Array<Session.Tool>;\n\n    /**\n     * Configuration options for tracing. Set to null to disable tracing. Once tracing\n     * is enabled for a session, the configuration cannot be modified.\n     *\n     * `auto` will create a trace for the session with default values for the workflow\n     * name, group id, and metadata.\n     */\n    tracing?: 'auto' | Session.TracingConfiguration;\n\n    /**\n     * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n     * set to `null` to turn off, in which case the client must manually trigger model\n     * response. Server VAD means that the model will detect the start and end of\n     * speech based on audio volume and respond at the end of user speech. Semantic VAD\n     * is more advanced and uses a turn detection model (in conjunction with VAD) to\n     * semantically estimate whether the user has finished speaking, then dynamically\n     * sets a timeout based on this probability. For example, if user audio trails off\n     * with \"uhhm\", the model will score a low probability of turn end and wait longer\n     * for the user to continue speaking. This can be useful for more natural\n     * conversations, but may have a higher latency.\n     */\n    turn_detection?: Session.TurnDetection;\n\n    /**\n     * The voice the model uses to respond. Voice cannot be changed during the session\n     * once the model has responded with audio at least once. Current voice options are\n     * `alloy`, `ash`, `ballad`, `coral`, `echo`, `sage`, `shimmer`, and `verse`.\n     */\n    voice?: (string & {}) | 'alloy' | 'ash' | 'ballad' | 'coral' | 'echo' | 'sage' | 'shimmer' | 'verse';\n  }\n\n  export namespace Session {\n    /**\n     * Configuration options for the generated client secret.\n     */\n    export interface ClientSecret {\n      /**\n       * Configuration for the ephemeral token expiration.\n       */\n      expires_after?: ClientSecret.ExpiresAfter;\n    }\n\n    export namespace ClientSecret {\n      /**\n       * Configuration for the ephemeral token expiration.\n       */\n      export interface ExpiresAfter {\n        /**\n         * The anchor point for the ephemeral token expiration. Only `created_at` is\n         * currently supported.\n         */\n        anchor: 'created_at';\n\n        /**\n         * The number of seconds from the anchor point to the expiration. Select a value\n         * between `10` and `7200`.\n         */\n        seconds?: number;\n      }\n    }\n\n    /**\n     * Configuration for input audio noise reduction. This can be set to `null` to turn\n     * off. Noise reduction filters audio added to the input audio buffer before it is\n     * sent to VAD and the model. Filtering the audio can improve VAD and turn\n     * detection accuracy (reducing false positives) and model performance by improving\n     * perception of the input audio.\n     */\n    export interface InputAudioNoiseReduction {\n      /**\n       * Type of noise reduction. `near_field` is for close-talking microphones such as\n       * headphones, `far_field` is for far-field microphones such as laptop or\n       * conference room microphones.\n       */\n      type?: 'near_field' | 'far_field';\n    }\n\n    /**\n     * Configuration for input audio transcription, defaults to off and can be set to\n     * `null` to turn off once on. Input audio transcription is not native to the\n     * model, since the model consumes audio directly. Transcription runs\n     * asynchronously through\n     * [the /audio/transcriptions endpoint](https://platform.openai.com/docs/api-reference/audio/createTranscription)\n     * and should be treated as guidance of input audio content rather than precisely\n     * what the model heard. The client can optionally set the language and prompt for\n     * transcription, these offer additional guidance to the transcription service.\n     */\n    export interface InputAudioTranscription {\n      /**\n       * The language of the input audio. Supplying the input language in\n       * [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) (e.g. `en`)\n       * format will improve accuracy and latency.\n       */\n      language?: string;\n\n      /**\n       * The model to use for transcription, current options are `gpt-4o-transcribe`,\n       * `gpt-4o-mini-transcribe`, and `whisper-1`.\n       */\n      model?: string;\n\n      /**\n       * An optional text to guide the model's style or continue a previous audio\n       * segment. For `whisper-1`, the\n       * [prompt is a list of keywords](https://platform.openai.com/docs/guides/speech-to-text#prompting).\n       * For `gpt-4o-transcribe` models, the prompt is a free text string, for example\n       * \"expect words related to technology\".\n       */\n      prompt?: string;\n    }\n\n    export interface Tool {\n      /**\n       * The description of the function, including guidance on when and how to call it,\n       * and guidance about what to tell the user when calling (if anything).\n       */\n      description?: string;\n\n      /**\n       * The name of the function.\n       */\n      name?: string;\n\n      /**\n       * Parameters of the function in JSON Schema.\n       */\n      parameters?: unknown;\n\n      /**\n       * The type of the tool, i.e. `function`.\n       */\n      type?: 'function';\n    }\n\n    /**\n     * Granular configuration for tracing.\n     */\n    export interface TracingConfiguration {\n      /**\n       * The group id to attach to this trace to enable filtering and grouping in the\n       * traces dashboard.\n       */\n      group_id?: string;\n\n      /**\n       * The arbitrary metadata to attach to this trace to enable filtering in the traces\n       * dashboard.\n       */\n      metadata?: unknown;\n\n      /**\n       * The name of the workflow to attach to this trace. This is used to name the trace\n       * in the traces dashboard.\n       */\n      workflow_name?: string;\n    }\n\n    /**\n     * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n     * set to `null` to turn off, in which case the client must manually trigger model\n     * response. Server VAD means that the model will detect the start and end of\n     * speech based on audio volume and respond at the end of user speech. Semantic VAD\n     * is more advanced and uses a turn detection model (in conjunction with VAD) to\n     * semantically estimate whether the user has finished speaking, then dynamically\n     * sets a timeout based on this probability. For example, if user audio trails off\n     * with \"uhhm\", the model will score a low probability of turn end and wait longer\n     * for the user to continue speaking. This can be useful for more natural\n     * conversations, but may have a higher latency.\n     */\n    export interface TurnDetection {\n      /**\n       * Whether or not to automatically generate a response when a VAD stop event\n       * occurs.\n       */\n      create_response?: boolean;\n\n      /**\n       * Used only for `semantic_vad` mode. The eagerness of the model to respond. `low`\n       * will wait longer for the user to continue speaking, `high` will respond more\n       * quickly. `auto` is the default and is equivalent to `medium`.\n       */\n      eagerness?: 'low' | 'medium' | 'high' | 'auto';\n\n      /**\n       * Whether or not to automatically interrupt any ongoing response with output to\n       * the default conversation (i.e. `conversation` of `auto`) when a VAD start event\n       * occurs.\n       */\n      interrupt_response?: boolean;\n\n      /**\n       * Used only for `server_vad` mode. Amount of audio to include before the VAD\n       * detected speech (in milliseconds). Defaults to 300ms.\n       */\n      prefix_padding_ms?: number;\n\n      /**\n       * Used only for `server_vad` mode. Duration of silence to detect speech stop (in\n       * milliseconds). Defaults to 500ms. With shorter values the model will respond\n       * more quickly, but may jump in on short pauses from the user.\n       */\n      silence_duration_ms?: number;\n\n      /**\n       * Used only for `server_vad` mode. Activation threshold for VAD (0.0 to 1.0), this\n       * defaults to 0.5. A higher threshold will require louder audio to activate the\n       * model, and thus might perform better in noisy environments.\n       */\n      threshold?: number;\n\n      /**\n       * Type of turn detection.\n       */\n      type?: 'server_vad' | 'semantic_vad';\n    }\n  }\n}\n\n/**\n * Returned when a session is updated with a `session.update` event, unless there\n * is an error.\n */\nexport interface SessionUpdatedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * Realtime session object configuration.\n   */\n  session: SessionsAPI.Session;\n\n  /**\n   * The event type, must be `session.updated`.\n   */\n  type: 'session.updated';\n}\n\n/**\n * Send this event to update a transcription session.\n */\nexport interface TranscriptionSessionUpdate {\n  /**\n   * Realtime transcription session object configuration.\n   */\n  session: TranscriptionSessionUpdate.Session;\n\n  /**\n   * The event type, must be `transcription_session.update`.\n   */\n  type: 'transcription_session.update';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\nexport namespace TranscriptionSessionUpdate {\n  /**\n   * Realtime transcription session object configuration.\n   */\n  export interface Session {\n    /**\n     * Configuration options for the generated client secret.\n     */\n    client_secret?: Session.ClientSecret;\n\n    /**\n     * The set of items to include in the transcription. Current available items are:\n     *\n     * - `item.input_audio_transcription.logprobs`\n     */\n    include?: Array<string>;\n\n    /**\n     * The format of input audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`. For\n     * `pcm16`, input audio must be 16-bit PCM at a 24kHz sample rate, single channel\n     * (mono), and little-endian byte order.\n     */\n    input_audio_format?: 'pcm16' | 'g711_ulaw' | 'g711_alaw';\n\n    /**\n     * Configuration for input audio noise reduction. This can be set to `null` to turn\n     * off. Noise reduction filters audio added to the input audio buffer before it is\n     * sent to VAD and the model. Filtering the audio can improve VAD and turn\n     * detection accuracy (reducing false positives) and model performance by improving\n     * perception of the input audio.\n     */\n    input_audio_noise_reduction?: Session.InputAudioNoiseReduction;\n\n    /**\n     * Configuration for input audio transcription. The client can optionally set the\n     * language and prompt for transcription, these offer additional guidance to the\n     * transcription service.\n     */\n    input_audio_transcription?: Session.InputAudioTranscription;\n\n    /**\n     * The set of modalities the model can respond with. To disable audio, set this to\n     * [\"text\"].\n     */\n    modalities?: Array<'text' | 'audio'>;\n\n    /**\n     * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n     * set to `null` to turn off, in which case the client must manually trigger model\n     * response. Server VAD means that the model will detect the start and end of\n     * speech based on audio volume and respond at the end of user speech. Semantic VAD\n     * is more advanced and uses a turn detection model (in conjunction with VAD) to\n     * semantically estimate whether the user has finished speaking, then dynamically\n     * sets a timeout based on this probability. For example, if user audio trails off\n     * with \"uhhm\", the model will score a low probability of turn end and wait longer\n     * for the user to continue speaking. This can be useful for more natural\n     * conversations, but may have a higher latency.\n     */\n    turn_detection?: Session.TurnDetection;\n  }\n\n  export namespace Session {\n    /**\n     * Configuration options for the generated client secret.\n     */\n    export interface ClientSecret {\n      /**\n       * Configuration for the ephemeral token expiration.\n       */\n      expires_at?: ClientSecret.ExpiresAt;\n    }\n\n    export namespace ClientSecret {\n      /**\n       * Configuration for the ephemeral token expiration.\n       */\n      export interface ExpiresAt {\n        /**\n         * The anchor point for the ephemeral token expiration. Only `created_at` is\n         * currently supported.\n         */\n        anchor?: 'created_at';\n\n        /**\n         * The number of seconds from the anchor point to the expiration. Select a value\n         * between `10` and `7200`.\n         */\n        seconds?: number;\n      }\n    }\n\n    /**\n     * Configuration for input audio noise reduction. This can be set to `null` to turn\n     * off. Noise reduction filters audio added to the input audio buffer before it is\n     * sent to VAD and the model. Filtering the audio can improve VAD and turn\n     * detection accuracy (reducing false positives) and model performance by improving\n     * perception of the input audio.\n     */\n    export interface InputAudioNoiseReduction {\n      /**\n       * Type of noise reduction. `near_field` is for close-talking microphones such as\n       * headphones, `far_field` is for far-field microphones such as laptop or\n       * conference room microphones.\n       */\n      type?: 'near_field' | 'far_field';\n    }\n\n    /**\n     * Configuration for input audio transcription. The client can optionally set the\n     * language and prompt for transcription, these offer additional guidance to the\n     * transcription service.\n     */\n    export interface InputAudioTranscription {\n      /**\n       * The language of the input audio. Supplying the input language in\n       * [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) (e.g. `en`)\n       * format will improve accuracy and latency.\n       */\n      language?: string;\n\n      /**\n       * The model to use for transcription, current options are `gpt-4o-transcribe`,\n       * `gpt-4o-mini-transcribe`, and `whisper-1`.\n       */\n      model?: 'gpt-4o-transcribe' | 'gpt-4o-mini-transcribe' | 'whisper-1';\n\n      /**\n       * An optional text to guide the model's style or continue a previous audio\n       * segment. For `whisper-1`, the\n       * [prompt is a list of keywords](https://platform.openai.com/docs/guides/speech-to-text#prompting).\n       * For `gpt-4o-transcribe` models, the prompt is a free text string, for example\n       * \"expect words related to technology\".\n       */\n      prompt?: string;\n    }\n\n    /**\n     * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n     * set to `null` to turn off, in which case the client must manually trigger model\n     * response. Server VAD means that the model will detect the start and end of\n     * speech based on audio volume and respond at the end of user speech. Semantic VAD\n     * is more advanced and uses a turn detection model (in conjunction with VAD) to\n     * semantically estimate whether the user has finished speaking, then dynamically\n     * sets a timeout based on this probability. For example, if user audio trails off\n     * with \"uhhm\", the model will score a low probability of turn end and wait longer\n     * for the user to continue speaking. This can be useful for more natural\n     * conversations, but may have a higher latency.\n     */\n    export interface TurnDetection {\n      /**\n       * Whether or not to automatically generate a response when a VAD stop event\n       * occurs. Not available for transcription sessions.\n       */\n      create_response?: boolean;\n\n      /**\n       * Used only for `semantic_vad` mode. The eagerness of the model to respond. `low`\n       * will wait longer for the user to continue speaking, `high` will respond more\n       * quickly. `auto` is the default and is equivalent to `medium`.\n       */\n      eagerness?: 'low' | 'medium' | 'high' | 'auto';\n\n      /**\n       * Whether or not to automatically interrupt any ongoing response with output to\n       * the default conversation (i.e. `conversation` of `auto`) when a VAD start event\n       * occurs. Not available for transcription sessions.\n       */\n      interrupt_response?: boolean;\n\n      /**\n       * Used only for `server_vad` mode. Amount of audio to include before the VAD\n       * detected speech (in milliseconds). Defaults to 300ms.\n       */\n      prefix_padding_ms?: number;\n\n      /**\n       * Used only for `server_vad` mode. Duration of silence to detect speech stop (in\n       * milliseconds). Defaults to 500ms. With shorter values the model will respond\n       * more quickly, but may jump in on short pauses from the user.\n       */\n      silence_duration_ms?: number;\n\n      /**\n       * Used only for `server_vad` mode. Activation threshold for VAD (0.0 to 1.0), this\n       * defaults to 0.5. A higher threshold will require louder audio to activate the\n       * model, and thus might perform better in noisy environments.\n       */\n      threshold?: number;\n\n      /**\n       * Type of turn detection.\n       */\n      type?: 'server_vad' | 'semantic_vad';\n    }\n  }\n}\n\n/**\n * Returned when a transcription session is updated with a\n * `transcription_session.update` event, unless there is an error.\n */\nexport interface TranscriptionSessionUpdatedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * A new Realtime transcription session configuration.\n   *\n   * When a session is created on the server via REST API, the session object also\n   * contains an ephemeral key. Default TTL for keys is 10 minutes. This property is\n   * not present when a session is updated via the WebSocket API.\n   */\n  session: TranscriptionSessionsAPI.TranscriptionSession;\n\n  /**\n   * The event type, must be `transcription_session.updated`.\n   */\n  type: 'transcription_session.updated';\n}\n\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n\nexport declare namespace Realtime {\n  export {\n    type ConversationCreatedEvent as ConversationCreatedEvent,\n    type ConversationItem as ConversationItem,\n    type ConversationItemContent as ConversationItemContent,\n    type ConversationItemCreateEvent as ConversationItemCreateEvent,\n    type ConversationItemCreatedEvent as ConversationItemCreatedEvent,\n    type ConversationItemDeleteEvent as ConversationItemDeleteEvent,\n    type ConversationItemDeletedEvent as ConversationItemDeletedEvent,\n    type ConversationItemInputAudioTranscriptionCompletedEvent as ConversationItemInputAudioTranscriptionCompletedEvent,\n    type ConversationItemInputAudioTranscriptionDeltaEvent as ConversationItemInputAudioTranscriptionDeltaEvent,\n    type ConversationItemInputAudioTranscriptionFailedEvent as ConversationItemInputAudioTranscriptionFailedEvent,\n    type ConversationItemRetrieveEvent as ConversationItemRetrieveEvent,\n    type ConversationItemTruncateEvent as ConversationItemTruncateEvent,\n    type ConversationItemTruncatedEvent as ConversationItemTruncatedEvent,\n    type ConversationItemWithReference as ConversationItemWithReference,\n    type ErrorEvent as ErrorEvent,\n    type InputAudioBufferAppendEvent as InputAudioBufferAppendEvent,\n    type InputAudioBufferClearEvent as InputAudioBufferClearEvent,\n    type InputAudioBufferClearedEvent as InputAudioBufferClearedEvent,\n    type InputAudioBufferCommitEvent as InputAudioBufferCommitEvent,\n    type InputAudioBufferCommittedEvent as InputAudioBufferCommittedEvent,\n    type InputAudioBufferSpeechStartedEvent as InputAudioBufferSpeechStartedEvent,\n    type InputAudioBufferSpeechStoppedEvent as InputAudioBufferSpeechStoppedEvent,\n    type RateLimitsUpdatedEvent as RateLimitsUpdatedEvent,\n    type RealtimeClientEvent as RealtimeClientEvent,\n    type RealtimeResponse as RealtimeResponse,\n    type RealtimeResponseStatus as RealtimeResponseStatus,\n    type RealtimeResponseUsage as RealtimeResponseUsage,\n    type RealtimeServerEvent as RealtimeServerEvent,\n    type ResponseAudioDeltaEvent as ResponseAudioDeltaEvent,\n    type ResponseAudioDoneEvent as ResponseAudioDoneEvent,\n    type ResponseAudioTranscriptDeltaEvent as ResponseAudioTranscriptDeltaEvent,\n    type ResponseAudioTranscriptDoneEvent as ResponseAudioTranscriptDoneEvent,\n    type ResponseCancelEvent as ResponseCancelEvent,\n    type ResponseContentPartAddedEvent as ResponseContentPartAddedEvent,\n    type ResponseContentPartDoneEvent as ResponseContentPartDoneEvent,\n    type ResponseCreateEvent as ResponseCreateEvent,\n    type ResponseCreatedEvent as ResponseCreatedEvent,\n    type ResponseDoneEvent as ResponseDoneEvent,\n    type ResponseFunctionCallArgumentsDeltaEvent as ResponseFunctionCallArgumentsDeltaEvent,\n    type ResponseFunctionCallArgumentsDoneEvent as ResponseFunctionCallArgumentsDoneEvent,\n    type ResponseOutputItemAddedEvent as ResponseOutputItemAddedEvent,\n    type ResponseOutputItemDoneEvent as ResponseOutputItemDoneEvent,\n    type ResponseTextDeltaEvent as ResponseTextDeltaEvent,\n    type ResponseTextDoneEvent as ResponseTextDoneEvent,\n    type SessionCreatedEvent as SessionCreatedEvent,\n    type SessionUpdateEvent as SessionUpdateEvent,\n    type SessionUpdatedEvent as SessionUpdatedEvent,\n    type TranscriptionSessionUpdate as TranscriptionSessionUpdate,\n    type TranscriptionSessionUpdatedEvent as TranscriptionSessionUpdatedEvent,\n  };\n\n  export {\n    Sessions as Sessions,\n    type SessionsAPISession as Session,\n    type SessionCreateResponse as SessionCreateResponse,\n    type SessionCreateParams as SessionCreateParams,\n  };\n\n  export {\n    TranscriptionSessions as TranscriptionSessions,\n    type TranscriptionSession as TranscriptionSession,\n    type TranscriptionSessionCreateParams as TranscriptionSessionCreateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as ThreadsAPI from './threads';\nimport { APIPromise } from '../../../core/api-promise';\nimport { buildHeaders } from '../../../internal/headers';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\nexport class Sessions extends APIResource {\n  /**\n   * Create a ChatKit session.\n   *\n   * @example\n   * ```ts\n   * const chatSession =\n   *   await client.beta.chatkit.sessions.create({\n   *     user: 'x',\n   *     workflow: { id: 'id' },\n   *   });\n   * ```\n   */\n  create(body: SessionCreateParams, options?: RequestOptions): APIPromise<ThreadsAPI.ChatSession> {\n    return this._client.post('/chatkit/sessions', {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Cancel an active ChatKit session and return its most recent metadata.\n   *\n   * Cancelling prevents new requests from using the issued client secret.\n   *\n   * @example\n   * ```ts\n   * const chatSession =\n   *   await client.beta.chatkit.sessions.cancel('cksess_123');\n   * ```\n   */\n  cancel(sessionID: string, options?: RequestOptions): APIPromise<ThreadsAPI.ChatSession> {\n    return this._client.post(path`/chatkit/sessions/${sessionID}/cancel`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\nexport interface SessionCreateParams {\n  /**\n   * A free-form string that identifies your end user; ensures this Session can\n   * access other objects that have the same `user` scope.\n   */\n  user: string;\n\n  /**\n   * Workflow that powers the session.\n   */\n  workflow: ThreadsAPI.ChatSessionWorkflowParam;\n\n  /**\n   * Optional overrides for ChatKit runtime configuration features\n   */\n  chatkit_configuration?: ThreadsAPI.ChatSessionChatKitConfigurationParam;\n\n  /**\n   * Optional override for session expiration timing in seconds from creation.\n   * Defaults to 10 minutes.\n   */\n  expires_after?: ThreadsAPI.ChatSessionExpiresAfterParam;\n\n  /**\n   * Optional override for per-minute request limits. When omitted, defaults to 10.\n   */\n  rate_limits?: ThreadsAPI.ChatSessionRateLimitsParam;\n}\n\nexport declare namespace Sessions {\n  export { type SessionCreateParams as SessionCreateParams };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as ChatKitAPI from './chatkit';\nimport { APIPromise } from '../../../core/api-promise';\nimport {\n  ConversationCursorPage,\n  type ConversationCursorPageParams,\n  PagePromise,\n} from '../../../core/pagination';\nimport { buildHeaders } from '../../../internal/headers';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\nexport class Threads extends APIResource {\n  /**\n   * Retrieve a ChatKit thread by its identifier.\n   *\n   * @example\n   * ```ts\n   * const chatkitThread =\n   *   await client.beta.chatkit.threads.retrieve('cthr_123');\n   * ```\n   */\n  retrieve(threadID: string, options?: RequestOptions): APIPromise<ChatKitThread> {\n    return this._client.get(path`/chatkit/threads/${threadID}`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * List ChatKit threads with optional pagination and user filters.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const chatkitThread of client.beta.chatkit.threads.list()) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    query: ThreadListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<ChatKitThreadsPage, ChatKitThread> {\n    return this._client.getAPIList('/chatkit/threads', ConversationCursorPage<ChatKitThread>, {\n      query,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Delete a ChatKit thread along with its items and stored attachments.\n   *\n   * @example\n   * ```ts\n   * const thread = await client.beta.chatkit.threads.delete(\n   *   'cthr_123',\n   * );\n   * ```\n   */\n  delete(threadID: string, options?: RequestOptions): APIPromise<ThreadDeleteResponse> {\n    return this._client.delete(path`/chatkit/threads/${threadID}`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * List items that belong to a ChatKit thread.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const thread of client.beta.chatkit.threads.listItems(\n   *   'cthr_123',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  listItems(\n    threadID: string,\n    query: ThreadListItemsParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<\n    ChatKitThreadItemListDataPage,\n    | ChatKitThreadUserMessageItem\n    | ChatKitThreadAssistantMessageItem\n    | ChatKitWidgetItem\n    | ChatKitThreadItemList.ChatKitClientToolCall\n    | ChatKitThreadItemList.ChatKitTask\n    | ChatKitThreadItemList.ChatKitTaskGroup\n  > {\n    return this._client.getAPIList(\n      path`/chatkit/threads/${threadID}/items`,\n      ConversationCursorPage<\n        | ChatKitThreadUserMessageItem\n        | ChatKitThreadAssistantMessageItem\n        | ChatKitWidgetItem\n        | ChatKitThreadItemList.ChatKitClientToolCall\n        | ChatKitThreadItemList.ChatKitTask\n        | ChatKitThreadItemList.ChatKitTaskGroup\n      >,\n      {\n        query,\n        ...options,\n        headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n        __security: { bearerAuth: true },\n      },\n    );\n  }\n}\n\nexport type ChatKitThreadsPage = ConversationCursorPage<ChatKitThread>;\n\nexport type ChatKitThreadItemListDataPage = ConversationCursorPage<\n  | ChatKitThreadUserMessageItem\n  | ChatKitThreadAssistantMessageItem\n  | ChatKitWidgetItem\n  | ChatKitThreadItemList.ChatKitClientToolCall\n  | ChatKitThreadItemList.ChatKitTask\n  | ChatKitThreadItemList.ChatKitTaskGroup\n>;\n\n/**\n * Represents a ChatKit session and its resolved configuration.\n */\nexport interface ChatSession {\n  /**\n   * Identifier for the ChatKit session.\n   */\n  id: string;\n\n  /**\n   * Resolved ChatKit feature configuration for the session.\n   */\n  chatkit_configuration: ChatSessionChatKitConfiguration;\n\n  /**\n   * Ephemeral client secret that authenticates session requests.\n   */\n  client_secret: string;\n\n  /**\n   * Unix timestamp (in seconds) for when the session expires.\n   */\n  expires_at: number;\n\n  /**\n   * Convenience copy of the per-minute request limit.\n   */\n  max_requests_per_1_minute: number;\n\n  /**\n   * Type discriminator that is always `chatkit.session`.\n   */\n  object: 'chatkit.session';\n\n  /**\n   * Resolved rate limit values.\n   */\n  rate_limits: ChatSessionRateLimits;\n\n  /**\n   * Current lifecycle state of the session.\n   */\n  status: ChatSessionStatus;\n\n  /**\n   * User identifier associated with the session.\n   */\n  user: string;\n\n  /**\n   * Workflow metadata for the session.\n   */\n  workflow: ChatKitAPI.ChatKitWorkflow;\n}\n\n/**\n * Automatic thread title preferences for the session.\n */\nexport interface ChatSessionAutomaticThreadTitling {\n  /**\n   * Whether automatic thread titling is enabled.\n   */\n  enabled: boolean;\n}\n\n/**\n * ChatKit configuration for the session.\n */\nexport interface ChatSessionChatKitConfiguration {\n  /**\n   * Automatic thread titling preferences.\n   */\n  automatic_thread_titling: ChatSessionAutomaticThreadTitling;\n\n  /**\n   * Upload settings for the session.\n   */\n  file_upload: ChatSessionFileUpload;\n\n  /**\n   * History retention configuration.\n   */\n  history: ChatSessionHistory;\n}\n\n/**\n * Optional per-session configuration settings for ChatKit behavior.\n */\nexport interface ChatSessionChatKitConfigurationParam {\n  /**\n   * Configuration for automatic thread titling. When omitted, automatic thread\n   * titling is enabled by default.\n   */\n  automatic_thread_titling?: ChatSessionChatKitConfigurationParam.AutomaticThreadTitling;\n\n  /**\n   * Configuration for upload enablement and limits. When omitted, uploads are\n   * disabled by default (max_files 10, max_file_size 512 MB).\n   */\n  file_upload?: ChatSessionChatKitConfigurationParam.FileUpload;\n\n  /**\n   * Configuration for chat history retention. When omitted, history is enabled by\n   * default with no limit on recent_threads (null).\n   */\n  history?: ChatSessionChatKitConfigurationParam.History;\n}\n\nexport namespace ChatSessionChatKitConfigurationParam {\n  /**\n   * Configuration for automatic thread titling. When omitted, automatic thread\n   * titling is enabled by default.\n   */\n  export interface AutomaticThreadTitling {\n    /**\n     * Enable automatic thread title generation. Defaults to true.\n     */\n    enabled?: boolean;\n  }\n\n  /**\n   * Configuration for upload enablement and limits. When omitted, uploads are\n   * disabled by default (max_files 10, max_file_size 512 MB).\n   */\n  export interface FileUpload {\n    /**\n     * Enable uploads for this session. Defaults to false.\n     */\n    enabled?: boolean;\n\n    /**\n     * Maximum size in megabytes for each uploaded file. Defaults to 512 MB, which is\n     * the maximum allowable size.\n     */\n    max_file_size?: number;\n\n    /**\n     * Maximum number of files that can be uploaded to the session. Defaults to 10.\n     */\n    max_files?: number;\n  }\n\n  /**\n   * Configuration for chat history retention. When omitted, history is enabled by\n   * default with no limit on recent_threads (null).\n   */\n  export interface History {\n    /**\n     * Enables chat users to access previous ChatKit threads. Defaults to true.\n     */\n    enabled?: boolean;\n\n    /**\n     * Number of recent ChatKit threads users have access to. Defaults to unlimited\n     * when unset.\n     */\n    recent_threads?: number;\n  }\n}\n\n/**\n * Controls when the session expires relative to an anchor timestamp.\n */\nexport interface ChatSessionExpiresAfterParam {\n  /**\n   * Base timestamp used to calculate expiration. Currently fixed to `created_at`.\n   */\n  anchor: 'created_at';\n\n  /**\n   * Number of seconds after the anchor when the session expires.\n   */\n  seconds: number;\n}\n\n/**\n * Upload permissions and limits applied to the session.\n */\nexport interface ChatSessionFileUpload {\n  /**\n   * Indicates if uploads are enabled for the session.\n   */\n  enabled: boolean;\n\n  /**\n   * Maximum upload size in megabytes.\n   */\n  max_file_size: number | null;\n\n  /**\n   * Maximum number of uploads allowed during the session.\n   */\n  max_files: number | null;\n}\n\n/**\n * History retention preferences returned for the session.\n */\nexport interface ChatSessionHistory {\n  /**\n   * Indicates if chat history is persisted for the session.\n   */\n  enabled: boolean;\n\n  /**\n   * Number of prior threads surfaced in history views. Defaults to null when all\n   * history is retained.\n   */\n  recent_threads: number | null;\n}\n\n/**\n * Active per-minute request limit for the session.\n */\nexport interface ChatSessionRateLimits {\n  /**\n   * Maximum allowed requests per one-minute window.\n   */\n  max_requests_per_1_minute: number;\n}\n\n/**\n * Controls request rate limits for the session.\n */\nexport interface ChatSessionRateLimitsParam {\n  /**\n   * Maximum number of requests allowed per minute for the session. Defaults to 10.\n   */\n  max_requests_per_1_minute?: number;\n}\n\nexport type ChatSessionStatus = 'active' | 'expired' | 'cancelled';\n\n/**\n * Workflow reference and overrides applied to the chat session.\n */\nexport interface ChatSessionWorkflowParam {\n  /**\n   * Identifier for the workflow invoked by the session.\n   */\n  id: string;\n\n  /**\n   * State variables forwarded to the workflow. Keys may be up to 64 characters,\n   * values must be primitive types, and the map defaults to an empty object.\n   */\n  state_variables?: { [key: string]: string | boolean | number };\n\n  /**\n   * Optional tracing overrides for the workflow invocation. When omitted, tracing is\n   * enabled by default.\n   */\n  tracing?: ChatSessionWorkflowParam.Tracing;\n\n  /**\n   * Specific workflow version to run. Defaults to the latest deployed version.\n   */\n  version?: string;\n}\n\nexport namespace ChatSessionWorkflowParam {\n  /**\n   * Optional tracing overrides for the workflow invocation. When omitted, tracing is\n   * enabled by default.\n   */\n  export interface Tracing {\n    /**\n     * Whether tracing is enabled during the session. Defaults to true.\n     */\n    enabled?: boolean;\n  }\n}\n\n/**\n * Attachment metadata included on thread items.\n */\nexport interface ChatKitAttachment {\n  /**\n   * Identifier for the attachment.\n   */\n  id: string;\n\n  /**\n   * MIME type of the attachment.\n   */\n  mime_type: string;\n\n  /**\n   * Original display name for the attachment.\n   */\n  name: string;\n\n  /**\n   * Preview URL for rendering the attachment inline.\n   */\n  preview_url: string | null;\n\n  /**\n   * Attachment discriminator.\n   */\n  type: 'image' | 'file';\n}\n\n/**\n * Assistant response text accompanied by optional annotations.\n */\nexport interface ChatKitResponseOutputText {\n  /**\n   * Ordered list of annotations attached to the response text.\n   */\n  annotations: Array<ChatKitResponseOutputText.File | ChatKitResponseOutputText.URL>;\n\n  /**\n   * Assistant generated text.\n   */\n  text: string;\n\n  /**\n   * Type discriminator that is always `output_text`.\n   */\n  type: 'output_text';\n}\n\nexport namespace ChatKitResponseOutputText {\n  /**\n   * Annotation that references an uploaded file.\n   */\n  export interface File {\n    /**\n     * File attachment referenced by the annotation.\n     */\n    source: File.Source;\n\n    /**\n     * Type discriminator that is always `file` for this annotation.\n     */\n    type: 'file';\n  }\n\n  export namespace File {\n    /**\n     * File attachment referenced by the annotation.\n     */\n    export interface Source {\n      /**\n       * Filename referenced by the annotation.\n       */\n      filename: string;\n\n      /**\n       * Type discriminator that is always `file`.\n       */\n      type: 'file';\n    }\n  }\n\n  /**\n   * Annotation that references a URL.\n   */\n  export interface URL {\n    /**\n     * URL referenced by the annotation.\n     */\n    source: URL.Source;\n\n    /**\n     * Type discriminator that is always `url` for this annotation.\n     */\n    type: 'url';\n  }\n\n  export namespace URL {\n    /**\n     * URL referenced by the annotation.\n     */\n    export interface Source {\n      /**\n       * Type discriminator that is always `url`.\n       */\n      type: 'url';\n\n      /**\n       * URL referenced by the annotation.\n       */\n      url: string;\n    }\n  }\n}\n\n/**\n * Represents a ChatKit thread and its current status.\n */\nexport interface ChatKitThread {\n  /**\n   * Identifier of the thread.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (in seconds) for when the thread was created.\n   */\n  created_at: number;\n\n  /**\n   * Type discriminator that is always `chatkit.thread`.\n   */\n  object: 'chatkit.thread';\n\n  /**\n   * Current status for the thread. Defaults to `active` for newly created threads.\n   */\n  status: ChatKitThread.Active | ChatKitThread.Locked | ChatKitThread.Closed;\n\n  /**\n   * Optional human-readable title for the thread. Defaults to null when no title has\n   * been generated.\n   */\n  title: string | null;\n\n  /**\n   * Free-form string that identifies your end user who owns the thread.\n   */\n  user: string;\n}\n\nexport namespace ChatKitThread {\n  /**\n   * Indicates that a thread is active.\n   */\n  export interface Active {\n    /**\n     * Status discriminator that is always `active`.\n     */\n    type: 'active';\n  }\n\n  /**\n   * Indicates that a thread is locked and cannot accept new input.\n   */\n  export interface Locked {\n    /**\n     * Reason that the thread was locked. Defaults to null when no reason is recorded.\n     */\n    reason: string | null;\n\n    /**\n     * Status discriminator that is always `locked`.\n     */\n    type: 'locked';\n  }\n\n  /**\n   * Indicates that a thread has been closed.\n   */\n  export interface Closed {\n    /**\n     * Reason that the thread was closed. Defaults to null when no reason is recorded.\n     */\n    reason: string | null;\n\n    /**\n     * Status discriminator that is always `closed`.\n     */\n    type: 'closed';\n  }\n}\n\n/**\n * Assistant-authored message within a thread.\n */\nexport interface ChatKitThreadAssistantMessageItem {\n  /**\n   * Identifier of the thread item.\n   */\n  id: string;\n\n  /**\n   * Ordered assistant response segments.\n   */\n  content: Array<ChatKitResponseOutputText>;\n\n  /**\n   * Unix timestamp (in seconds) for when the item was created.\n   */\n  created_at: number;\n\n  /**\n   * Type discriminator that is always `chatkit.thread_item`.\n   */\n  object: 'chatkit.thread_item';\n\n  /**\n   * Identifier of the parent thread.\n   */\n  thread_id: string;\n\n  /**\n   * Type discriminator that is always `chatkit.assistant_message`.\n   */\n  type: 'chatkit.assistant_message';\n}\n\n/**\n * A paginated list of thread items rendered for the ChatKit API.\n */\nexport interface ChatKitThreadItemList {\n  /**\n   * A list of items\n   */\n  data: Array<\n    | ChatKitThreadUserMessageItem\n    | ChatKitThreadAssistantMessageItem\n    | ChatKitWidgetItem\n    | ChatKitThreadItemList.ChatKitClientToolCall\n    | ChatKitThreadItemList.ChatKitTask\n    | ChatKitThreadItemList.ChatKitTaskGroup\n  >;\n\n  /**\n   * The ID of the first item in the list.\n   */\n  first_id: string | null;\n\n  /**\n   * Whether there are more items available.\n   */\n  has_more: boolean;\n\n  /**\n   * The ID of the last item in the list.\n   */\n  last_id: string | null;\n\n  /**\n   * The type of object returned, must be `list`.\n   */\n  object: 'list';\n}\n\nexport namespace ChatKitThreadItemList {\n  /**\n   * Record of a client side tool invocation initiated by the assistant.\n   */\n  export interface ChatKitClientToolCall {\n    /**\n     * Identifier of the thread item.\n     */\n    id: string;\n\n    /**\n     * JSON-encoded arguments that were sent to the tool.\n     */\n    arguments: string;\n\n    /**\n     * Identifier for the client tool call.\n     */\n    call_id: string;\n\n    /**\n     * Unix timestamp (in seconds) for when the item was created.\n     */\n    created_at: number;\n\n    /**\n     * Tool name that was invoked.\n     */\n    name: string;\n\n    /**\n     * Type discriminator that is always `chatkit.thread_item`.\n     */\n    object: 'chatkit.thread_item';\n\n    /**\n     * JSON-encoded output captured from the tool. Defaults to null while execution is\n     * in progress.\n     */\n    output: string | null;\n\n    /**\n     * Execution status for the tool call.\n     */\n    status: 'in_progress' | 'completed';\n\n    /**\n     * Identifier of the parent thread.\n     */\n    thread_id: string;\n\n    /**\n     * Type discriminator that is always `chatkit.client_tool_call`.\n     */\n    type: 'chatkit.client_tool_call';\n  }\n\n  /**\n   * Task emitted by the workflow to show progress and status updates.\n   */\n  export interface ChatKitTask {\n    /**\n     * Identifier of the thread item.\n     */\n    id: string;\n\n    /**\n     * Unix timestamp (in seconds) for when the item was created.\n     */\n    created_at: number;\n\n    /**\n     * Optional heading for the task. Defaults to null when not provided.\n     */\n    heading: string | null;\n\n    /**\n     * Type discriminator that is always `chatkit.thread_item`.\n     */\n    object: 'chatkit.thread_item';\n\n    /**\n     * Optional summary that describes the task. Defaults to null when omitted.\n     */\n    summary: string | null;\n\n    /**\n     * Subtype for the task.\n     */\n    task_type: 'custom' | 'thought';\n\n    /**\n     * Identifier of the parent thread.\n     */\n    thread_id: string;\n\n    /**\n     * Type discriminator that is always `chatkit.task`.\n     */\n    type: 'chatkit.task';\n  }\n\n  /**\n   * Collection of workflow tasks grouped together in the thread.\n   */\n  export interface ChatKitTaskGroup {\n    /**\n     * Identifier of the thread item.\n     */\n    id: string;\n\n    /**\n     * Unix timestamp (in seconds) for when the item was created.\n     */\n    created_at: number;\n\n    /**\n     * Type discriminator that is always `chatkit.thread_item`.\n     */\n    object: 'chatkit.thread_item';\n\n    /**\n     * Tasks included in the group.\n     */\n    tasks: Array<ChatKitTaskGroup.Task>;\n\n    /**\n     * Identifier of the parent thread.\n     */\n    thread_id: string;\n\n    /**\n     * Type discriminator that is always `chatkit.task_group`.\n     */\n    type: 'chatkit.task_group';\n  }\n\n  export namespace ChatKitTaskGroup {\n    /**\n     * Task entry that appears within a TaskGroup.\n     */\n    export interface Task {\n      /**\n       * Optional heading for the grouped task. Defaults to null when not provided.\n       */\n      heading: string | null;\n\n      /**\n       * Optional summary that describes the grouped task. Defaults to null when omitted.\n       */\n      summary: string | null;\n\n      /**\n       * Subtype for the grouped task.\n       */\n      type: 'custom' | 'thought';\n    }\n  }\n}\n\n/**\n * User-authored messages within a thread.\n */\nexport interface ChatKitThreadUserMessageItem {\n  /**\n   * Identifier of the thread item.\n   */\n  id: string;\n\n  /**\n   * Attachments associated with the user message. Defaults to an empty list.\n   */\n  attachments: Array<ChatKitAttachment>;\n\n  /**\n   * Ordered content elements supplied by the user.\n   */\n  content: Array<ChatKitThreadUserMessageItem.InputText | ChatKitThreadUserMessageItem.QuotedText>;\n\n  /**\n   * Unix timestamp (in seconds) for when the item was created.\n   */\n  created_at: number;\n\n  /**\n   * Inference overrides applied to the message. Defaults to null when unset.\n   */\n  inference_options: ChatKitThreadUserMessageItem.InferenceOptions | null;\n\n  /**\n   * Type discriminator that is always `chatkit.thread_item`.\n   */\n  object: 'chatkit.thread_item';\n\n  /**\n   * Identifier of the parent thread.\n   */\n  thread_id: string;\n\n  type: 'chatkit.user_message';\n}\n\nexport namespace ChatKitThreadUserMessageItem {\n  /**\n   * Text block that a user contributed to the thread.\n   */\n  export interface InputText {\n    /**\n     * Plain-text content supplied by the user.\n     */\n    text: string;\n\n    /**\n     * Type discriminator that is always `input_text`.\n     */\n    type: 'input_text';\n  }\n\n  /**\n   * Quoted snippet that the user referenced in their message.\n   */\n  export interface QuotedText {\n    /**\n     * Quoted text content.\n     */\n    text: string;\n\n    /**\n     * Type discriminator that is always `quoted_text`.\n     */\n    type: 'quoted_text';\n  }\n\n  /**\n   * Inference overrides applied to the message. Defaults to null when unset.\n   */\n  export interface InferenceOptions {\n    /**\n     * Model name that generated the response. Defaults to null when using the session\n     * default.\n     */\n    model: string | null;\n\n    /**\n     * Preferred tool to invoke. Defaults to null when ChatKit should auto-select.\n     */\n    tool_choice: InferenceOptions.ToolChoice | null;\n  }\n\n  export namespace InferenceOptions {\n    /**\n     * Preferred tool to invoke. Defaults to null when ChatKit should auto-select.\n     */\n    export interface ToolChoice {\n      /**\n       * Identifier of the requested tool.\n       */\n      id: string;\n    }\n  }\n}\n\n/**\n * Thread item that renders a widget payload.\n */\nexport interface ChatKitWidgetItem {\n  /**\n   * Identifier of the thread item.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (in seconds) for when the item was created.\n   */\n  created_at: number;\n\n  /**\n   * Type discriminator that is always `chatkit.thread_item`.\n   */\n  object: 'chatkit.thread_item';\n\n  /**\n   * Identifier of the parent thread.\n   */\n  thread_id: string;\n\n  /**\n   * Type discriminator that is always `chatkit.widget`.\n   */\n  type: 'chatkit.widget';\n\n  /**\n   * Serialized widget payload rendered in the UI.\n   */\n  widget: string;\n}\n\n/**\n * Confirmation payload returned after deleting a thread.\n */\nexport interface ThreadDeleteResponse {\n  /**\n   * Identifier of the deleted thread.\n   */\n  id: string;\n\n  /**\n   * Indicates that the thread has been deleted.\n   */\n  deleted: boolean;\n\n  /**\n   * Type discriminator that is always `chatkit.thread.deleted`.\n   */\n  object: 'chatkit.thread.deleted';\n}\n\nexport interface ThreadListParams extends ConversationCursorPageParams {\n  /**\n   * List items created before this thread item ID. Defaults to null for the newest\n   * results.\n   */\n  before?: string;\n\n  /**\n   * Sort order for results by creation time. Defaults to `desc`.\n   */\n  order?: 'asc' | 'desc';\n\n  /**\n   * Filter threads that belong to this user identifier. Defaults to null to return\n   * all users.\n   */\n  user?: string;\n}\n\nexport interface ThreadListItemsParams extends ConversationCursorPageParams {\n  /**\n   * List items created before this thread item ID. Defaults to null for the newest\n   * results.\n   */\n  before?: string;\n\n  /**\n   * Sort order for results by creation time. Defaults to `desc`.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport declare namespace Threads {\n  export {\n    type ChatSession as ChatSession,\n    type ChatSessionAutomaticThreadTitling as ChatSessionAutomaticThreadTitling,\n    type ChatSessionChatKitConfiguration as ChatSessionChatKitConfiguration,\n    type ChatSessionChatKitConfigurationParam as ChatSessionChatKitConfigurationParam,\n    type ChatSessionExpiresAfterParam as ChatSessionExpiresAfterParam,\n    type ChatSessionFileUpload as ChatSessionFileUpload,\n    type ChatSessionHistory as ChatSessionHistory,\n    type ChatSessionRateLimits as ChatSessionRateLimits,\n    type ChatSessionRateLimitsParam as ChatSessionRateLimitsParam,\n    type ChatSessionStatus as ChatSessionStatus,\n    type ChatSessionWorkflowParam as ChatSessionWorkflowParam,\n    type ChatKitAttachment as ChatKitAttachment,\n    type ChatKitResponseOutputText as ChatKitResponseOutputText,\n    type ChatKitThread as ChatKitThread,\n    type ChatKitThreadAssistantMessageItem as ChatKitThreadAssistantMessageItem,\n    type ChatKitThreadItemList as ChatKitThreadItemList,\n    type ChatKitThreadUserMessageItem as ChatKitThreadUserMessageItem,\n    type ChatKitWidgetItem as ChatKitWidgetItem,\n    type ThreadDeleteResponse as ThreadDeleteResponse,\n    type ChatKitThreadsPage as ChatKitThreadsPage,\n    type ChatKitThreadItemListDataPage as ChatKitThreadItemListDataPage,\n    type ThreadListParams as ThreadListParams,\n    type ThreadListItemsParams as ThreadListItemsParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as SessionsAPI from './sessions';\nimport { SessionCreateParams, Sessions } from './sessions';\nimport * as ThreadsAPI from './threads';\nimport {\n  ChatKitAttachment,\n  ChatKitResponseOutputText,\n  ChatKitThread,\n  ChatKitThreadAssistantMessageItem,\n  ChatKitThreadItemList,\n  ChatKitThreadItemListDataPage,\n  ChatKitThreadUserMessageItem,\n  ChatKitThreadsPage,\n  ChatKitWidgetItem,\n  ChatSession,\n  ChatSessionAutomaticThreadTitling,\n  ChatSessionChatKitConfiguration,\n  ChatSessionChatKitConfigurationParam,\n  ChatSessionExpiresAfterParam,\n  ChatSessionFileUpload,\n  ChatSessionHistory,\n  ChatSessionRateLimits,\n  ChatSessionRateLimitsParam,\n  ChatSessionStatus,\n  ChatSessionWorkflowParam,\n  ThreadDeleteResponse,\n  ThreadListItemsParams,\n  ThreadListParams,\n  Threads,\n} from './threads';\n\nexport class ChatKit extends APIResource {\n  sessions: SessionsAPI.Sessions = new SessionsAPI.Sessions(this._client);\n  threads: ThreadsAPI.Threads = new ThreadsAPI.Threads(this._client);\n}\n\n/**\n * Workflow metadata and state returned for the session.\n */\nexport interface ChatKitWorkflow {\n  /**\n   * Identifier of the workflow backing the session.\n   */\n  id: string;\n\n  /**\n   * State variable key-value pairs applied when invoking the workflow. Defaults to\n   * null when no overrides were provided.\n   */\n  state_variables: { [key: string]: string | boolean | number } | null;\n\n  /**\n   * Tracing settings applied to the workflow.\n   */\n  tracing: ChatKitWorkflow.Tracing;\n\n  /**\n   * Specific workflow version used for the session. Defaults to null when using the\n   * latest deployment.\n   */\n  version: string | null;\n}\n\nexport namespace ChatKitWorkflow {\n  /**\n   * Tracing settings applied to the workflow.\n   */\n  export interface Tracing {\n    /**\n     * Indicates whether tracing is enabled.\n     */\n    enabled: boolean;\n  }\n}\n\nChatKit.Sessions = Sessions;\nChatKit.Threads = Threads;\n\nexport declare namespace ChatKit {\n  export { type ChatKitWorkflow as ChatKitWorkflow };\n\n  export { Sessions as Sessions, type SessionCreateParams as SessionCreateParams };\n\n  export {\n    Threads as Threads,\n    type ChatSession as ChatSession,\n    type ChatSessionAutomaticThreadTitling as ChatSessionAutomaticThreadTitling,\n    type ChatSessionChatKitConfiguration as ChatSessionChatKitConfiguration,\n    type ChatSessionChatKitConfigurationParam as ChatSessionChatKitConfigurationParam,\n    type ChatSessionExpiresAfterParam as ChatSessionExpiresAfterParam,\n    type ChatSessionFileUpload as ChatSessionFileUpload,\n    type ChatSessionHistory as ChatSessionHistory,\n    type ChatSessionRateLimits as ChatSessionRateLimits,\n    type ChatSessionRateLimitsParam as ChatSessionRateLimitsParam,\n    type ChatSessionStatus as ChatSessionStatus,\n    type ChatSessionWorkflowParam as ChatSessionWorkflowParam,\n    type ChatKitAttachment as ChatKitAttachment,\n    type ChatKitResponseOutputText as ChatKitResponseOutputText,\n    type ChatKitThread as ChatKitThread,\n    type ChatKitThreadAssistantMessageItem as ChatKitThreadAssistantMessageItem,\n    type ChatKitThreadItemList as ChatKitThreadItemList,\n    type ChatKitThreadUserMessageItem as ChatKitThreadUserMessageItem,\n    type ChatKitWidgetItem as ChatKitWidgetItem,\n    type ThreadDeleteResponse as ThreadDeleteResponse,\n    type ChatKitThreadsPage as ChatKitThreadsPage,\n    type ChatKitThreadItemListDataPage as ChatKitThreadItemListDataPage,\n    type ThreadListParams as ThreadListParams,\n    type ThreadListItemsParams as ThreadListItemsParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as Shared from '../../shared';\nimport * as AssistantsAPI from '../assistants';\nimport { APIPromise } from '../../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pagination';\nimport { buildHeaders } from '../../../internal/headers';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\n/**\n * Build Assistants that can call models and use tools.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n  /**\n   * Create a message.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  create(threadID: string, body: MessageCreateParams, options?: RequestOptions): APIPromise<Message> {\n    return this._client.post(path`/threads/${threadID}/messages`, {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Retrieve a message.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  retrieve(messageID: string, params: MessageRetrieveParams, options?: RequestOptions): APIPromise<Message> {\n    const { thread_id } = params;\n    return this._client.get(path`/threads/${thread_id}/messages/${messageID}`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Modifies a message.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  update(messageID: string, params: MessageUpdateParams, options?: RequestOptions): APIPromise<Message> {\n    const { thread_id, ...body } = params;\n    return this._client.post(path`/threads/${thread_id}/messages/${messageID}`, {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Returns a list of messages for a given thread.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  list(\n    threadID: string,\n    query: MessageListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<MessagesPage, Message> {\n    return this._client.getAPIList(path`/threads/${threadID}/messages`, CursorPage<Message>, {\n      query,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Deletes a message.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  delete(\n    messageID: string,\n    params: MessageDeleteParams,\n    options?: RequestOptions,\n  ): APIPromise<MessageDeleted> {\n    const { thread_id } = params;\n    return this._client.delete(path`/threads/${thread_id}/messages/${messageID}`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\nexport type MessagesPage = CursorPage<Message>;\n\n/**\n * A citation within the message that points to a specific quote from a specific\n * File associated with the assistant or the message. Generated when the assistant\n * uses the \"file_search\" tool to search files.\n */\nexport type Annotation = FileCitationAnnotation | FilePathAnnotation;\n\n/**\n * A citation within the message that points to a specific quote from a specific\n * File associated with the assistant or the message. Generated when the assistant\n * uses the \"file_search\" tool to search files.\n */\nexport type AnnotationDelta = FileCitationDeltaAnnotation | FilePathDeltaAnnotation;\n\n/**\n * A citation within the message that points to a specific quote from a specific\n * File associated with the assistant or the message. Generated when the assistant\n * uses the \"file_search\" tool to search files.\n */\nexport interface FileCitationAnnotation {\n  end_index: number;\n\n  file_citation: FileCitationAnnotation.FileCitation;\n\n  start_index: number;\n\n  /**\n   * The text in the message content that needs to be replaced.\n   */\n  text: string;\n\n  /**\n   * Always `file_citation`.\n   */\n  type: 'file_citation';\n}\n\nexport namespace FileCitationAnnotation {\n  export interface FileCitation {\n    /**\n     * The ID of the specific File the citation is from.\n     */\n    file_id: string;\n  }\n}\n\n/**\n * A citation within the message that points to a specific quote from a specific\n * File associated with the assistant or the message. Generated when the assistant\n * uses the \"file_search\" tool to search files.\n */\nexport interface FileCitationDeltaAnnotation {\n  /**\n   * The index of the annotation in the text content part.\n   */\n  index: number;\n\n  /**\n   * Always `file_citation`.\n   */\n  type: 'file_citation';\n\n  end_index?: number;\n\n  file_citation?: FileCitationDeltaAnnotation.FileCitation;\n\n  start_index?: number;\n\n  /**\n   * The text in the message content that needs to be replaced.\n   */\n  text?: string;\n}\n\nexport namespace FileCitationDeltaAnnotation {\n  export interface FileCitation {\n    /**\n     * The ID of the specific File the citation is from.\n     */\n    file_id?: string;\n\n    /**\n     * The specific quote in the file.\n     */\n    quote?: string;\n  }\n}\n\n/**\n * A URL for the file that's generated when the assistant used the\n * `code_interpreter` tool to generate a file.\n */\nexport interface FilePathAnnotation {\n  end_index: number;\n\n  file_path: FilePathAnnotation.FilePath;\n\n  start_index: number;\n\n  /**\n   * The text in the message content that needs to be replaced.\n   */\n  text: string;\n\n  /**\n   * Always `file_path`.\n   */\n  type: 'file_path';\n}\n\nexport namespace FilePathAnnotation {\n  export interface FilePath {\n    /**\n     * The ID of the file that was generated.\n     */\n    file_id: string;\n  }\n}\n\n/**\n * A URL for the file that's generated when the assistant used the\n * `code_interpreter` tool to generate a file.\n */\nexport interface FilePathDeltaAnnotation {\n  /**\n   * The index of the annotation in the text content part.\n   */\n  index: number;\n\n  /**\n   * Always `file_path`.\n   */\n  type: 'file_path';\n\n  end_index?: number;\n\n  file_path?: FilePathDeltaAnnotation.FilePath;\n\n  start_index?: number;\n\n  /**\n   * The text in the message content that needs to be replaced.\n   */\n  text?: string;\n}\n\nexport namespace FilePathDeltaAnnotation {\n  export interface FilePath {\n    /**\n     * The ID of the file that was generated.\n     */\n    file_id?: string;\n  }\n}\n\nexport interface ImageFile {\n  /**\n   * The [File](https://platform.openai.com/docs/api-reference/files) ID of the image\n   * in the message content. Set `purpose=\"vision\"` when uploading the File if you\n   * need to later display the file content.\n   */\n  file_id: string;\n\n  /**\n   * Specifies the detail level of the image if specified by the user. `low` uses\n   * fewer tokens, you can opt in to high resolution using `high`.\n   */\n  detail?: 'auto' | 'low' | 'high';\n}\n\n/**\n * References an image [File](https://platform.openai.com/docs/api-reference/files)\n * in the content of a message.\n */\nexport interface ImageFileContentBlock {\n  image_file: ImageFile;\n\n  /**\n   * Always `image_file`.\n   */\n  type: 'image_file';\n}\n\nexport interface ImageFileDelta {\n  /**\n   * Specifies the detail level of the image if specified by the user. `low` uses\n   * fewer tokens, you can opt in to high resolution using `high`.\n   */\n  detail?: 'auto' | 'low' | 'high';\n\n  /**\n   * The [File](https://platform.openai.com/docs/api-reference/files) ID of the image\n   * in the message content. Set `purpose=\"vision\"` when uploading the File if you\n   * need to later display the file content.\n   */\n  file_id?: string;\n}\n\n/**\n * References an image [File](https://platform.openai.com/docs/api-reference/files)\n * in the content of a message.\n */\nexport interface ImageFileDeltaBlock {\n  /**\n   * The index of the content part in the message.\n   */\n  index: number;\n\n  /**\n   * Always `image_file`.\n   */\n  type: 'image_file';\n\n  image_file?: ImageFileDelta;\n}\n\nexport interface ImageURL {\n  /**\n   * The external URL of the image, must be a supported image types: jpeg, jpg, png,\n   * gif, webp.\n   */\n  url: string;\n\n  /**\n   * Specifies the detail level of the image. `low` uses fewer tokens, you can opt in\n   * to high resolution using `high`. Default value is `auto`\n   */\n  detail?: 'auto' | 'low' | 'high';\n}\n\n/**\n * References an image URL in the content of a message.\n */\nexport interface ImageURLContentBlock {\n  image_url: ImageURL;\n\n  /**\n   * The type of the content part.\n   */\n  type: 'image_url';\n}\n\nexport interface ImageURLDelta {\n  /**\n   * Specifies the detail level of the image. `low` uses fewer tokens, you can opt in\n   * to high resolution using `high`.\n   */\n  detail?: 'auto' | 'low' | 'high';\n\n  /**\n   * The URL of the image, must be a supported image types: jpeg, jpg, png, gif,\n   * webp.\n   */\n  url?: string;\n}\n\n/**\n * References an image URL in the content of a message.\n */\nexport interface ImageURLDeltaBlock {\n  /**\n   * The index of the content part in the message.\n   */\n  index: number;\n\n  /**\n   * Always `image_url`.\n   */\n  type: 'image_url';\n\n  image_url?: ImageURLDelta;\n}\n\n/**\n * Represents a message within a\n * [thread](https://platform.openai.com/docs/api-reference/threads).\n */\nexport interface Message {\n  /**\n   * The identifier, which can be referenced in API endpoints.\n   */\n  id: string;\n\n  /**\n   * If applicable, the ID of the\n   * [assistant](https://platform.openai.com/docs/api-reference/assistants) that\n   * authored this message.\n   */\n  assistant_id: string | null;\n\n  /**\n   * A list of files attached to the message, and the tools they were added to.\n   */\n  attachments: Array<Message.Attachment> | null;\n\n  /**\n   * The Unix timestamp (in seconds) for when the message was completed.\n   */\n  completed_at: number | null;\n\n  /**\n   * The content of the message in array of text and/or images.\n   */\n  content: Array<MessageContent>;\n\n  /**\n   * The Unix timestamp (in seconds) for when the message was created.\n   */\n  created_at: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the message was marked as incomplete.\n   */\n  incomplete_at: number | null;\n\n  /**\n   * On an incomplete message, details about why the message is incomplete.\n   */\n  incomplete_details: Message.IncompleteDetails | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n\n  /**\n   * The object type, which is always `thread.message`.\n   */\n  object: 'thread.message';\n\n  /**\n   * The entity that produced the message. One of `user` or `assistant`.\n   */\n  role: 'user' | 'assistant';\n\n  /**\n   * The ID of the [run](https://platform.openai.com/docs/api-reference/runs)\n   * associated with the creation of this message. Value is `null` when messages are\n   * created manually using the create message or create thread endpoints.\n   */\n  run_id: string | null;\n\n  /**\n   * The status of the message, which can be either `in_progress`, `incomplete`, or\n   * `completed`.\n   */\n  status: 'in_progress' | 'incomplete' | 'completed';\n\n  /**\n   * The [thread](https://platform.openai.com/docs/api-reference/threads) ID that\n   * this message belongs to.\n   */\n  thread_id: string;\n}\n\nexport namespace Message {\n  export interface Attachment {\n    /**\n     * The ID of the file to attach to the message.\n     */\n    file_id?: string;\n\n    /**\n     * The tools to add this file to.\n     */\n    tools?: Array<AssistantsAPI.CodeInterpreterTool | Attachment.AssistantToolsFileSearchTypeOnly>;\n  }\n\n  export namespace Attachment {\n    export interface AssistantToolsFileSearchTypeOnly {\n      /**\n       * The type of tool being defined: `file_search`\n       */\n      type: 'file_search';\n    }\n  }\n\n  /**\n   * On an incomplete message, details about why the message is incomplete.\n   */\n  export interface IncompleteDetails {\n    /**\n     * The reason the message is incomplete.\n     */\n    reason: 'content_filter' | 'max_tokens' | 'run_cancelled' | 'run_expired' | 'run_failed';\n  }\n}\n\n/**\n * References an image [File](https://platform.openai.com/docs/api-reference/files)\n * in the content of a message.\n */\nexport type MessageContent =\n  | ImageFileContentBlock\n  | ImageURLContentBlock\n  | TextContentBlock\n  | RefusalContentBlock;\n\n/**\n * References an image [File](https://platform.openai.com/docs/api-reference/files)\n * in the content of a message.\n */\nexport type MessageContentDelta =\n  | ImageFileDeltaBlock\n  | TextDeltaBlock\n  | RefusalDeltaBlock\n  | ImageURLDeltaBlock;\n\n/**\n * References an image [File](https://platform.openai.com/docs/api-reference/files)\n * in the content of a message.\n */\nexport type MessageContentPartParam = ImageFileContentBlock | ImageURLContentBlock | TextContentBlockParam;\n\nexport interface MessageDeleted {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'thread.message.deleted';\n}\n\n/**\n * The delta containing the fields that have changed on the Message.\n */\nexport interface MessageDelta {\n  /**\n   * The content of the message in array of text and/or images.\n   */\n  content?: Array<MessageContentDelta>;\n\n  /**\n   * The entity that produced the message. One of `user` or `assistant`.\n   */\n  role?: 'user' | 'assistant';\n}\n\n/**\n * Represents a message delta i.e. any changed fields on a message during\n * streaming.\n */\nexport interface MessageDeltaEvent {\n  /**\n   * The identifier of the message, which can be referenced in API endpoints.\n   */\n  id: string;\n\n  /**\n   * The delta containing the fields that have changed on the Message.\n   */\n  delta: MessageDelta;\n\n  /**\n   * The object type, which is always `thread.message.delta`.\n   */\n  object: 'thread.message.delta';\n}\n\n/**\n * The refusal content generated by the assistant.\n */\nexport interface RefusalContentBlock {\n  refusal: string;\n\n  /**\n   * Always `refusal`.\n   */\n  type: 'refusal';\n}\n\n/**\n * The refusal content that is part of a message.\n */\nexport interface RefusalDeltaBlock {\n  /**\n   * The index of the refusal part in the message.\n   */\n  index: number;\n\n  /**\n   * Always `refusal`.\n   */\n  type: 'refusal';\n\n  refusal?: string;\n}\n\nexport interface Text {\n  annotations: Array<Annotation>;\n\n  /**\n   * The data that makes up the text.\n   */\n  value: string;\n}\n\n/**\n * The text content that is part of a message.\n */\nexport interface TextContentBlock {\n  text: Text;\n\n  /**\n   * Always `text`.\n   */\n  type: 'text';\n}\n\n/**\n * The text content that is part of a message.\n */\nexport interface TextContentBlockParam {\n  /**\n   * Text content to be sent to the model\n   */\n  text: string;\n\n  /**\n   * Always `text`.\n   */\n  type: 'text';\n}\n\nexport interface TextDelta {\n  annotations?: Array<AnnotationDelta>;\n\n  /**\n   * The data that makes up the text.\n   */\n  value?: string;\n}\n\n/**\n * The text content that is part of a message.\n */\nexport interface TextDeltaBlock {\n  /**\n   * The index of the content part in the message.\n   */\n  index: number;\n\n  /**\n   * Always `text`.\n   */\n  type: 'text';\n\n  text?: TextDelta;\n}\n\nexport interface MessageCreateParams {\n  /**\n   * The text contents of the message.\n   */\n  content: string | Array<MessageContentPartParam>;\n\n  /**\n   * The role of the entity that is creating the message. Allowed values include:\n   *\n   * - `user`: Indicates the message is sent by an actual user and should be used in\n   *   most cases to represent user-generated messages.\n   * - `assistant`: Indicates the message is generated by the assistant. Use this\n   *   value to insert messages from the assistant into the conversation.\n   */\n  role: 'user' | 'assistant';\n\n  /**\n   * A list of files attached to the message, and the tools they should be added to.\n   */\n  attachments?: Array<MessageCreateParams.Attachment> | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n}\n\nexport namespace MessageCreateParams {\n  export interface Attachment {\n    /**\n     * The ID of the file to attach to the message.\n     */\n    file_id?: string;\n\n    /**\n     * The tools to add this file to.\n     */\n    tools?: Array<AssistantsAPI.CodeInterpreterTool | Attachment.FileSearch>;\n  }\n\n  export namespace Attachment {\n    export interface FileSearch {\n      /**\n       * The type of tool being defined: `file_search`\n       */\n      type: 'file_search';\n    }\n  }\n}\n\nexport interface MessageRetrieveParams {\n  /**\n   * The ID of the [thread](https://platform.openai.com/docs/api-reference/threads)\n   * to which this message belongs.\n   */\n  thread_id: string;\n}\n\nexport interface MessageUpdateParams {\n  /**\n   * Path param: The ID of the thread to which this message belongs.\n   */\n  thread_id: string;\n\n  /**\n   * Body param: Set of 16 key-value pairs that can be attached to an object. This\n   * can be useful for storing additional information about the object in a\n   * structured format, and querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n}\n\nexport interface MessageListParams extends CursorPageParams {\n  /**\n   * A cursor for use in pagination. `before` is an object ID that defines your place\n   * in the list. For instance, if you make a list request and receive 100 objects,\n   * starting with obj_foo, your subsequent call can include before=obj_foo in order\n   * to fetch the previous page of the list.\n   */\n  before?: string;\n\n  /**\n   * Sort order by the `created_at` timestamp of the objects. `asc` for ascending\n   * order and `desc` for descending order.\n   */\n  order?: 'asc' | 'desc';\n\n  /**\n   * Filter messages by the run ID that generated them.\n   */\n  run_id?: string;\n}\n\nexport interface MessageDeleteParams {\n  /**\n   * The ID of the thread to which this message belongs.\n   */\n  thread_id: string;\n}\n\nexport declare namespace Messages {\n  export {\n    type Annotation as Annotation,\n    type AnnotationDelta as AnnotationDelta,\n    type FileCitationAnnotation as FileCitationAnnotation,\n    type FileCitationDeltaAnnotation as FileCitationDeltaAnnotation,\n    type FilePathAnnotation as FilePathAnnotation,\n    type FilePathDeltaAnnotation as FilePathDeltaAnnotation,\n    type ImageFile as ImageFile,\n    type ImageFileContentBlock as ImageFileContentBlock,\n    type ImageFileDelta as ImageFileDelta,\n    type ImageFileDeltaBlock as ImageFileDeltaBlock,\n    type ImageURL as ImageURL,\n    type ImageURLContentBlock as ImageURLContentBlock,\n    type ImageURLDelta as ImageURLDelta,\n    type ImageURLDeltaBlock as ImageURLDeltaBlock,\n    type Message as Message,\n    type MessageContent as MessageContent,\n    type MessageContentDelta as MessageContentDelta,\n    type MessageContentPartParam as MessageContentPartParam,\n    type MessageDeleted as MessageDeleted,\n    type MessageDelta as MessageDelta,\n    type MessageDeltaEvent as MessageDeltaEvent,\n    type RefusalContentBlock as RefusalContentBlock,\n    type RefusalDeltaBlock as RefusalDeltaBlock,\n    type Text as Text,\n    type TextContentBlock as TextContentBlock,\n    type TextContentBlockParam as TextContentBlockParam,\n    type TextDelta as TextDelta,\n    type TextDeltaBlock as TextDeltaBlock,\n    type MessagesPage as MessagesPage,\n    type MessageCreateParams as MessageCreateParams,\n    type MessageRetrieveParams as MessageRetrieveParams,\n    type MessageUpdateParams as MessageUpdateParams,\n    type MessageListParams as MessageListParams,\n    type MessageDeleteParams as MessageDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport * as StepsAPI from './steps';\nimport * as Shared from '../../../shared';\nimport { APIPromise } from '../../../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../../../core/pagination';\nimport { buildHeaders } from '../../../../internal/headers';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { path } from '../../../../internal/utils/path';\n\n/**\n * Build Assistants that can call models and use tools.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n  /**\n   * Retrieves a run step.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  retrieve(stepID: string, params: StepRetrieveParams, options?: RequestOptions): APIPromise<RunStep> {\n    const { thread_id, run_id, ...query } = params;\n    return this._client.get(path`/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n      query,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Returns a list of run steps belonging to a run.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  list(runID: string, params: StepListParams, options?: RequestOptions): PagePromise<RunStepsPage, RunStep> {\n    const { thread_id, ...query } = params;\n    return this._client.getAPIList(path`/threads/${thread_id}/runs/${runID}/steps`, CursorPage<RunStep>, {\n      query,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\nexport type RunStepsPage = CursorPage<RunStep>;\n\n/**\n * Text output from the Code Interpreter tool call as part of a run step.\n */\nexport interface CodeInterpreterLogs {\n  /**\n   * The index of the output in the outputs array.\n   */\n  index: number;\n\n  /**\n   * Always `logs`.\n   */\n  type: 'logs';\n\n  /**\n   * The text output from the Code Interpreter tool call.\n   */\n  logs?: string;\n}\n\nexport interface CodeInterpreterOutputImage {\n  /**\n   * The index of the output in the outputs array.\n   */\n  index: number;\n\n  /**\n   * Always `image`.\n   */\n  type: 'image';\n\n  image?: CodeInterpreterOutputImage.Image;\n}\n\nexport namespace CodeInterpreterOutputImage {\n  export interface Image {\n    /**\n     * The [file](https://platform.openai.com/docs/api-reference/files) ID of the\n     * image.\n     */\n    file_id?: string;\n  }\n}\n\n/**\n * Details of the Code Interpreter tool call the run step was involved in.\n */\nexport interface CodeInterpreterToolCall {\n  /**\n   * The ID of the tool call.\n   */\n  id: string;\n\n  /**\n   * The Code Interpreter tool call definition.\n   */\n  code_interpreter: CodeInterpreterToolCall.CodeInterpreter;\n\n  /**\n   * The type of tool call. This is always going to be `code_interpreter` for this\n   * type of tool call.\n   */\n  type: 'code_interpreter';\n}\n\nexport namespace CodeInterpreterToolCall {\n  /**\n   * The Code Interpreter tool call definition.\n   */\n  export interface CodeInterpreter {\n    /**\n     * The input to the Code Interpreter tool call.\n     */\n    input: string;\n\n    /**\n     * The outputs from the Code Interpreter tool call. Code Interpreter can output one\n     * or more items, including text (`logs`) or images (`image`). Each of these are\n     * represented by a different object type.\n     */\n    outputs: Array<CodeInterpreter.Logs | CodeInterpreter.Image>;\n  }\n\n  export namespace CodeInterpreter {\n    /**\n     * Text output from the Code Interpreter tool call as part of a run step.\n     */\n    export interface Logs {\n      /**\n       * The text output from the Code Interpreter tool call.\n       */\n      logs: string;\n\n      /**\n       * Always `logs`.\n       */\n      type: 'logs';\n    }\n\n    export interface Image {\n      image: Image.Image;\n\n      /**\n       * Always `image`.\n       */\n      type: 'image';\n    }\n\n    export namespace Image {\n      export interface Image {\n        /**\n         * The [file](https://platform.openai.com/docs/api-reference/files) ID of the\n         * image.\n         */\n        file_id: string;\n      }\n    }\n  }\n}\n\n/**\n * Details of the Code Interpreter tool call the run step was involved in.\n */\nexport interface CodeInterpreterToolCallDelta {\n  /**\n   * The index of the tool call in the tool calls array.\n   */\n  index: number;\n\n  /**\n   * The type of tool call. This is always going to be `code_interpreter` for this\n   * type of tool call.\n   */\n  type: 'code_interpreter';\n\n  /**\n   * The ID of the tool call.\n   */\n  id?: string;\n\n  /**\n   * The Code Interpreter tool call definition.\n   */\n  code_interpreter?: CodeInterpreterToolCallDelta.CodeInterpreter;\n}\n\nexport namespace CodeInterpreterToolCallDelta {\n  /**\n   * The Code Interpreter tool call definition.\n   */\n  export interface CodeInterpreter {\n    /**\n     * The input to the Code Interpreter tool call.\n     */\n    input?: string;\n\n    /**\n     * The outputs from the Code Interpreter tool call. Code Interpreter can output one\n     * or more items, including text (`logs`) or images (`image`). Each of these are\n     * represented by a different object type.\n     */\n    outputs?: Array<StepsAPI.CodeInterpreterLogs | StepsAPI.CodeInterpreterOutputImage>;\n  }\n}\n\nexport interface FileSearchToolCall {\n  /**\n   * The ID of the tool call object.\n   */\n  id: string;\n\n  /**\n   * For now, this is always going to be an empty object.\n   */\n  file_search: FileSearchToolCall.FileSearch;\n\n  /**\n   * The type of tool call. This is always going to be `file_search` for this type of\n   * tool call.\n   */\n  type: 'file_search';\n}\n\nexport namespace FileSearchToolCall {\n  /**\n   * For now, this is always going to be an empty object.\n   */\n  export interface FileSearch {\n    /**\n     * The ranking options for the file search.\n     */\n    ranking_options?: FileSearch.RankingOptions;\n\n    /**\n     * The results of the file search.\n     */\n    results?: Array<FileSearch.Result>;\n  }\n\n  export namespace FileSearch {\n    /**\n     * The ranking options for the file search.\n     */\n    export interface RankingOptions {\n      /**\n       * The ranker to use for the file search. If not specified will use the `auto`\n       * ranker.\n       */\n      ranker: 'auto' | 'default_2024_08_21';\n\n      /**\n       * The score threshold for the file search. All values must be a floating point\n       * number between 0 and 1.\n       */\n      score_threshold: number;\n    }\n\n    /**\n     * A result instance of the file search.\n     */\n    export interface Result {\n      /**\n       * The ID of the file that result was found in.\n       */\n      file_id: string;\n\n      /**\n       * The name of the file that result was found in.\n       */\n      file_name: string;\n\n      /**\n       * The score of the result. All values must be a floating point number between 0\n       * and 1.\n       */\n      score: number;\n\n      /**\n       * The content of the result that was found. The content is only included if\n       * requested via the include query parameter.\n       */\n      content?: Array<Result.Content>;\n    }\n\n    export namespace Result {\n      export interface Content {\n        /**\n         * The text content of the file.\n         */\n        text?: string;\n\n        /**\n         * The type of the content.\n         */\n        type?: 'text';\n      }\n    }\n  }\n}\n\nexport interface FileSearchToolCallDelta {\n  /**\n   * For now, this is always going to be an empty object.\n   */\n  file_search: unknown;\n\n  /**\n   * The index of the tool call in the tool calls array.\n   */\n  index: number;\n\n  /**\n   * The type of tool call. This is always going to be `file_search` for this type of\n   * tool call.\n   */\n  type: 'file_search';\n\n  /**\n   * The ID of the tool call object.\n   */\n  id?: string;\n}\n\nexport interface FunctionToolCall {\n  /**\n   * The ID of the tool call object.\n   */\n  id: string;\n\n  /**\n   * The definition of the function that was called.\n   */\n  function: FunctionToolCall.Function;\n\n  /**\n   * The type of tool call. This is always going to be `function` for this type of\n   * tool call.\n   */\n  type: 'function';\n}\n\nexport namespace FunctionToolCall {\n  /**\n   * The definition of the function that was called.\n   */\n  export interface Function {\n    /**\n     * The arguments passed to the function.\n     */\n    arguments: string;\n\n    /**\n     * The name of the function.\n     */\n    name: string;\n\n    /**\n     * The output of the function. This will be `null` if the outputs have not been\n     * [submitted](https://platform.openai.com/docs/api-reference/runs/submitToolOutputs)\n     * yet.\n     */\n    output: string | null;\n  }\n}\n\nexport interface FunctionToolCallDelta {\n  /**\n   * The index of the tool call in the tool calls array.\n   */\n  index: number;\n\n  /**\n   * The type of tool call. This is always going to be `function` for this type of\n   * tool call.\n   */\n  type: 'function';\n\n  /**\n   * The ID of the tool call object.\n   */\n  id?: string;\n\n  /**\n   * The definition of the function that was called.\n   */\n  function?: FunctionToolCallDelta.Function;\n}\n\nexport namespace FunctionToolCallDelta {\n  /**\n   * The definition of the function that was called.\n   */\n  export interface Function {\n    /**\n     * The arguments passed to the function.\n     */\n    arguments?: string;\n\n    /**\n     * The name of the function.\n     */\n    name?: string;\n\n    /**\n     * The output of the function. This will be `null` if the outputs have not been\n     * [submitted](https://platform.openai.com/docs/api-reference/runs/submitToolOutputs)\n     * yet.\n     */\n    output?: string | null;\n  }\n}\n\n/**\n * Details of the message creation by the run step.\n */\nexport interface MessageCreationStepDetails {\n  message_creation: MessageCreationStepDetails.MessageCreation;\n\n  /**\n   * Always `message_creation`.\n   */\n  type: 'message_creation';\n}\n\nexport namespace MessageCreationStepDetails {\n  export interface MessageCreation {\n    /**\n     * The ID of the message that was created by this run step.\n     */\n    message_id: string;\n  }\n}\n\n/**\n * Represents a step in execution of a run.\n */\nexport interface RunStep {\n  /**\n   * The identifier of the run step, which can be referenced in API endpoints.\n   */\n  id: string;\n\n  /**\n   * The ID of the\n   * [assistant](https://platform.openai.com/docs/api-reference/assistants)\n   * associated with the run step.\n   */\n  assistant_id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the run step was cancelled.\n   */\n  cancelled_at: number | null;\n\n  /**\n   * The Unix timestamp (in seconds) for when the run step completed.\n   */\n  completed_at: number | null;\n\n  /**\n   * The Unix timestamp (in seconds) for when the run step was created.\n   */\n  created_at: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the run step expired. A step is\n   * considered expired if the parent run is expired.\n   */\n  expired_at: number | null;\n\n  /**\n   * The Unix timestamp (in seconds) for when the run step failed.\n   */\n  failed_at: number | null;\n\n  /**\n   * The last error associated with this run step. Will be `null` if there are no\n   * errors.\n   */\n  last_error: RunStep.LastError | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n\n  /**\n   * The object type, which is always `thread.run.step`.\n   */\n  object: 'thread.run.step';\n\n  /**\n   * The ID of the [run](https://platform.openai.com/docs/api-reference/runs) that\n   * this run step is a part of.\n   */\n  run_id: string;\n\n  /**\n   * The status of the run step, which can be either `in_progress`, `cancelled`,\n   * `failed`, `completed`, or `expired`.\n   */\n  status: 'in_progress' | 'cancelled' | 'failed' | 'completed' | 'expired';\n\n  /**\n   * The details of the run step.\n   */\n  step_details: MessageCreationStepDetails | ToolCallsStepDetails;\n\n  /**\n   * The ID of the [thread](https://platform.openai.com/docs/api-reference/threads)\n   * that was run.\n   */\n  thread_id: string;\n\n  /**\n   * The type of run step, which can be either `message_creation` or `tool_calls`.\n   */\n  type: 'message_creation' | 'tool_calls';\n\n  /**\n   * Usage statistics related to the run step. This value will be `null` while the\n   * run step's status is `in_progress`.\n   */\n  usage: RunStep.Usage | null;\n}\n\nexport namespace RunStep {\n  /**\n   * The last error associated with this run step. Will be `null` if there are no\n   * errors.\n   */\n  export interface LastError {\n    /**\n     * One of `server_error` or `rate_limit_exceeded`.\n     */\n    code: 'server_error' | 'rate_limit_exceeded';\n\n    /**\n     * A human-readable description of the error.\n     */\n    message: string;\n  }\n\n  /**\n   * Usage statistics related to the run step. This value will be `null` while the\n   * run step's status is `in_progress`.\n   */\n  export interface Usage {\n    /**\n     * Number of completion tokens used over the course of the run step.\n     */\n    completion_tokens: number;\n\n    /**\n     * Number of prompt tokens used over the course of the run step.\n     */\n    prompt_tokens: number;\n\n    /**\n     * Total number of tokens used (prompt + completion).\n     */\n    total_tokens: number;\n  }\n}\n\n/**\n * The delta containing the fields that have changed on the run step.\n */\nexport interface RunStepDelta {\n  /**\n   * The details of the run step.\n   */\n  step_details?: RunStepDeltaMessageDelta | ToolCallDeltaObject;\n}\n\n/**\n * Represents a run step delta i.e. any changed fields on a run step during\n * streaming.\n */\nexport interface RunStepDeltaEvent {\n  /**\n   * The identifier of the run step, which can be referenced in API endpoints.\n   */\n  id: string;\n\n  /**\n   * The delta containing the fields that have changed on the run step.\n   */\n  delta: RunStepDelta;\n\n  /**\n   * The object type, which is always `thread.run.step.delta`.\n   */\n  object: 'thread.run.step.delta';\n}\n\n/**\n * Details of the message creation by the run step.\n */\nexport interface RunStepDeltaMessageDelta {\n  /**\n   * Always `message_creation`.\n   */\n  type: 'message_creation';\n\n  message_creation?: RunStepDeltaMessageDelta.MessageCreation;\n}\n\nexport namespace RunStepDeltaMessageDelta {\n  export interface MessageCreation {\n    /**\n     * The ID of the message that was created by this run step.\n     */\n    message_id?: string;\n  }\n}\n\nexport type RunStepInclude = 'step_details.tool_calls[*].file_search.results[*].content';\n\n/**\n * Details of the Code Interpreter tool call the run step was involved in.\n */\nexport type ToolCall = CodeInterpreterToolCall | FileSearchToolCall | FunctionToolCall;\n\n/**\n * Details of the Code Interpreter tool call the run step was involved in.\n */\nexport type ToolCallDelta = CodeInterpreterToolCallDelta | FileSearchToolCallDelta | FunctionToolCallDelta;\n\n/**\n * Details of the tool call.\n */\nexport interface ToolCallDeltaObject {\n  /**\n   * Always `tool_calls`.\n   */\n  type: 'tool_calls';\n\n  /**\n   * An array of tool calls the run step was involved in. These can be associated\n   * with one of three types of tools: `code_interpreter`, `file_search`, or\n   * `function`.\n   */\n  tool_calls?: Array<ToolCallDelta>;\n}\n\n/**\n * Details of the tool call.\n */\nexport interface ToolCallsStepDetails {\n  /**\n   * An array of tool calls the run step was involved in. These can be associated\n   * with one of three types of tools: `code_interpreter`, `file_search`, or\n   * `function`.\n   */\n  tool_calls: Array<ToolCall>;\n\n  /**\n   * Always `tool_calls`.\n   */\n  type: 'tool_calls';\n}\n\nexport interface StepRetrieveParams {\n  /**\n   * Path param: The ID of the thread to which the run and run step belongs.\n   */\n  thread_id: string;\n\n  /**\n   * Path param: The ID of the run to which the run step belongs.\n   */\n  run_id: string;\n\n  /**\n   * Query param: A list of additional fields to include in the response. Currently\n   * the only supported value is\n   * `step_details.tool_calls[*].file_search.results[*].content` to fetch the file\n   * search result content.\n   *\n   * See the\n   * [file search tool documentation](https://platform.openai.com/docs/assistants/tools/file-search#customizing-file-search-settings)\n   * for more information.\n   */\n  include?: Array<RunStepInclude>;\n}\n\nexport interface StepListParams extends CursorPageParams {\n  /**\n   * Path param: The ID of the thread the run and run steps belong to.\n   */\n  thread_id: string;\n\n  /**\n   * Query param: A cursor for use in pagination. `before` is an object ID that\n   * defines your place in the list. For instance, if you make a list request and\n   * receive 100 objects, starting with obj_foo, your subsequent call can include\n   * before=obj_foo in order to fetch the previous page of the list.\n   */\n  before?: string;\n\n  /**\n   * Query param: A list of additional fields to include in the response. Currently\n   * the only supported value is\n   * `step_details.tool_calls[*].file_search.results[*].content` to fetch the file\n   * search result content.\n   *\n   * See the\n   * [file search tool documentation](https://platform.openai.com/docs/assistants/tools/file-search#customizing-file-search-settings)\n   * for more information.\n   */\n  include?: Array<RunStepInclude>;\n\n  /**\n   * Query param: Sort order by the `created_at` timestamp of the objects. `asc` for\n   * ascending order and `desc` for descending order.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport declare namespace Steps {\n  export {\n    type CodeInterpreterLogs as CodeInterpreterLogs,\n    type CodeInterpreterOutputImage as CodeInterpreterOutputImage,\n    type CodeInterpreterToolCall as CodeInterpreterToolCall,\n    type CodeInterpreterToolCallDelta as CodeInterpreterToolCallDelta,\n    type FileSearchToolCall as FileSearchToolCall,\n    type FileSearchToolCallDelta as FileSearchToolCallDelta,\n    type FunctionToolCall as FunctionToolCall,\n    type FunctionToolCallDelta as FunctionToolCallDelta,\n    type MessageCreationStepDetails as MessageCreationStepDetails,\n    type RunStep as RunStep,\n    type RunStepDelta as RunStepDelta,\n    type RunStepDeltaEvent as RunStepDeltaEvent,\n    type RunStepDeltaMessageDelta as RunStepDeltaMessageDelta,\n    type RunStepInclude as RunStepInclude,\n    type ToolCall as ToolCall,\n    type ToolCallDelta as ToolCallDelta,\n    type ToolCallDeltaObject as ToolCallDeltaObject,\n    type ToolCallsStepDetails as ToolCallsStepDetails,\n    type RunStepsPage as RunStepsPage,\n    type StepRetrieveParams as StepRetrieveParams,\n    type StepListParams as StepListParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { OpenAIError } from '../../core/error';\nimport { encodeUTF8 } from './bytes';\n\nexport const toBase64 = (data: string | Uint8Array | null | undefined): string => {\n  if (!data) return '';\n\n  if (typeof (globalThis as any).Buffer !== 'undefined') {\n    return (globalThis as any).Buffer.from(data).toString('base64');\n  }\n\n  if (typeof data === 'string') {\n    data = encodeUTF8(data);\n  }\n\n  if (typeof btoa !== 'undefined') {\n    return btoa(String.fromCharCode.apply(null, data as any));\n  }\n\n  throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\n\nexport const fromBase64 = (str: string): Uint8Array => {\n  if (typeof (globalThis as any).Buffer !== 'undefined') {\n    const buf = (globalThis as any).Buffer.from(str, 'base64');\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n  }\n\n  if (typeof atob !== 'undefined') {\n    const bstr = atob(str);\n    const buf = new Uint8Array(bstr.length);\n    for (let i = 0; i < bstr.length; i++) {\n      buf[i] = bstr.charCodeAt(i);\n    }\n    return buf;\n  }\n\n  throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str: string): Array<number> => {\n  if (typeof Buffer !== 'undefined') {\n    // for Node.js environment\n    const buf = Buffer.from(base64Str, 'base64');\n    return Array.from(\n      new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT),\n    );\n  } else {\n    // for legacy web platform APIs\n    const binaryStr = atob(base64Str);\n    const len = binaryStr.length;\n    const bytes = new Uint8Array(len);\n    for (let i = 0; i < len; i++) {\n      bytes[i] = binaryStr.charCodeAt(i);\n    }\n    return Array.from(new Float32Array(bytes.buffer));\n  }\n};\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env: string): string | undefined => {\n  if (typeof (globalThis as any).process !== 'undefined') {\n    return (globalThis as any).process.env?.[env]?.trim() || undefined;\n  }\n  if (typeof (globalThis as any).Deno !== 'undefined') {\n    return (globalThis as any).Deno.env?.get?.(env)?.trim() || undefined;\n  }\n  return undefined;\n};\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nexport * from './utils/values';\nexport * from './utils/base64';\nexport * from './utils/env';\nexport * from './utils/log';\nexport * from './utils/uuid';\nexport * from './utils/sleep';\nexport * from './utils/query';\n", "import {\n  TextContentBlock,\n  ImageFileContentBlock,\n  Message,\n  MessageContentDelta,\n  Text,\n  ImageFile,\n  TextDelta,\n  MessageDelta,\n  MessageContent,\n} from '../resources/beta/threads/messages';\nimport { RequestOptions } from '../internal/request-options';\nimport {\n  Run,\n  RunCreateParamsBase,\n  RunCreateParamsStreaming,\n  Runs,\n  RunSubmitToolOutputsParamsBase,\n  RunSubmitToolOutputsParamsStreaming,\n} from '../resources/beta/threads/runs/runs';\nimport { type ReadableStream } from '../internal/shim-types';\nimport { Stream } from '../streaming';\nimport { APIUserAbortError, OpenAIError } from '../error';\nimport {\n  AssistantStreamEvent,\n  MessageStreamEvent,\n  RunStepStreamEvent,\n  RunStreamEvent,\n} from '../resources/beta/assistants';\nimport { RunStep, RunStepDelta, ToolCall, ToolCallDelta } from '../resources/beta/threads/runs/steps';\nimport { ThreadCreateAndRunParamsBase, Threads } from '../resources/beta/threads/threads';\nimport { BaseEvents, EventStream } from './EventStream';\nimport { isObj } from '../internal/utils';\n\nexport interface AssistantStreamEvents extends BaseEvents {\n  run: (run: Run) => void;\n\n  //New event structure\n  messageCreated: (message: Message) => void;\n  messageDelta: (message: MessageDelta, snapshot: Message) => void;\n  messageDone: (message: Message) => void;\n\n  runStepCreated: (runStep: RunStep) => void;\n  runStepDelta: (delta: RunStepDelta, snapshot: Runs.RunStep) => void;\n  runStepDone: (runStep: Runs.RunStep, snapshot: Runs.RunStep) => void;\n\n  toolCallCreated: (toolCall: ToolCall) => void;\n  toolCallDelta: (delta: ToolCallDelta, snapshot: ToolCall) => void;\n  toolCallDone: (toolCall: ToolCall) => void;\n\n  textCreated: (content: Text) => void;\n  textDelta: (delta: TextDelta, snapshot: Text) => void;\n  textDone: (content: Text, snapshot: Message) => void;\n\n  //No created or delta as this is not streamed\n  imageFileDone: (content: ImageFile, snapshot: Message) => void;\n\n  event: (event: AssistantStreamEvent) => void;\n}\n\nexport type ThreadCreateAndRunParamsBaseStream = Omit<ThreadCreateAndRunParamsBase, 'stream'> & {\n  stream?: true;\n};\n\nexport type RunCreateParamsBaseStream = Omit<RunCreateParamsBase, 'stream'> & {\n  stream?: true;\n};\n\nexport type RunSubmitToolOutputsParamsStream = Omit<RunSubmitToolOutputsParamsBase, 'stream'> & {\n  stream?: true;\n};\n\nexport class AssistantStream\n  extends EventStream<AssistantStreamEvents>\n  implements AsyncIterable<AssistantStreamEvent>\n{\n  //Track all events in a single list for reference\n  #events: AssistantStreamEvent[] = [];\n\n  //Used to accumulate deltas\n  //We are accumulating many types so the value here is not strict\n  #runStepSnapshots: { [id: string]: Runs.RunStep } = {};\n  #messageSnapshots: { [id: string]: Message } = {};\n  #messageSnapshot: Message | undefined;\n  #finalRun: Run | undefined;\n  #currentContentIndex: number | undefined;\n  #currentContent: MessageContent | undefined;\n  #currentToolCallIndex: number | undefined;\n  #currentToolCall: ToolCall | undefined;\n\n  //For current snapshot methods\n  #currentEvent: AssistantStreamEvent | undefined;\n  #currentRunSnapshot: Run | undefined;\n  #currentRunStepSnapshot: Runs.RunStep | undefined;\n\n  [Symbol.asyncIterator](): AsyncIterator<AssistantStreamEvent> {\n    const pushQueue: AssistantStreamEvent[] = [];\n    const readQueue: {\n      resolve: (chunk: AssistantStreamEvent | undefined) => void;\n      reject: (err: unknown) => void;\n    }[] = [];\n    let done = false;\n\n    //Catch all for passing along all events\n    this.on('event', (event) => {\n      const reader = readQueue.shift();\n      if (reader) {\n        reader.resolve(event);\n      } else {\n        pushQueue.push(event);\n      }\n    });\n\n    this.on('end', () => {\n      done = true;\n      for (const reader of readQueue) {\n        reader.resolve(undefined);\n      }\n      readQueue.length = 0;\n    });\n\n    this.on('abort', (err) => {\n      done = true;\n      for (const reader of readQueue) {\n        reader.reject(err);\n      }\n      readQueue.length = 0;\n    });\n\n    this.on('error', (err) => {\n      done = true;\n      for (const reader of readQueue) {\n        reader.reject(err);\n      }\n      readQueue.length = 0;\n    });\n\n    return {\n      next: async (): Promise<IteratorResult<AssistantStreamEvent>> => {\n        if (!pushQueue.length) {\n          if (done) {\n            return { value: undefined, done: true };\n          }\n          return new Promise<AssistantStreamEvent | undefined>((resolve, reject) =>\n            readQueue.push({ resolve, reject }),\n          ).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n        }\n        const chunk = pushQueue.shift()!;\n        return { value: chunk, done: false };\n      },\n      return: async () => {\n        this.abort();\n        return { value: undefined, done: true };\n      },\n    };\n  }\n\n  static fromReadableStream(stream: ReadableStream): AssistantStream {\n    const runner = new AssistantStream();\n    runner._run(() => runner._fromReadableStream(stream));\n    return runner;\n  }\n\n  protected async _fromReadableStream(\n    readableStream: ReadableStream,\n    options?: RequestOptions,\n  ): Promise<Run> {\n    const signal = options?.signal;\n    if (signal) {\n      if (signal.aborted) this.controller.abort();\n      signal.addEventListener('abort', () => this.controller.abort());\n    }\n    this._connected();\n    const stream = Stream.fromReadableStream<AssistantStreamEvent>(readableStream, this.controller);\n    for await (const event of stream) {\n      this.#addEvent(event);\n    }\n    if (stream.controller.signal?.aborted) {\n      throw new APIUserAbortError();\n    }\n    return this._addRun(this.#endRequest());\n  }\n\n  toReadableStream(): ReadableStream {\n    const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n    return stream.toReadableStream();\n  }\n\n  static createToolAssistantStream(\n    runId: string,\n    runs: Runs,\n    params: RunSubmitToolOutputsParamsStream,\n    options: RequestOptions | undefined,\n  ): AssistantStream {\n    const runner = new AssistantStream();\n    runner._run(() =>\n      runner._runToolAssistantStream(runId, runs, params, {\n        ...options,\n        headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n      }),\n    );\n    return runner;\n  }\n\n  protected async _createToolAssistantStream(\n    run: Runs,\n    runId: string,\n    params: RunSubmitToolOutputsParamsStream,\n    options?: RequestOptions,\n  ): Promise<Run> {\n    const signal = options?.signal;\n    if (signal) {\n      if (signal.aborted) this.controller.abort();\n      signal.addEventListener('abort', () => this.controller.abort());\n    }\n\n    const body: RunSubmitToolOutputsParamsStreaming = { ...params, stream: true };\n    const stream = await run.submitToolOutputs(runId, body, {\n      ...options,\n      signal: this.controller.signal,\n    });\n\n    this._connected();\n\n    for await (const event of stream) {\n      this.#addEvent(event);\n    }\n    if (stream.controller.signal?.aborted) {\n      throw new APIUserAbortError();\n    }\n\n    return this._addRun(this.#endRequest());\n  }\n\n  static createThreadAssistantStream(\n    params: ThreadCreateAndRunParamsBaseStream,\n    thread: Threads,\n    options?: RequestOptions,\n  ): AssistantStream {\n    const runner = new AssistantStream();\n    runner._run(() =>\n      runner._threadAssistantStream(params, thread, {\n        ...options,\n        headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n      }),\n    );\n    return runner;\n  }\n\n  static createAssistantStream(\n    threadId: string,\n    runs: Runs,\n    params: RunCreateParamsBaseStream,\n    options?: RequestOptions,\n  ): AssistantStream {\n    const runner = new AssistantStream();\n    runner._run(() =>\n      runner._runAssistantStream(threadId, runs, params, {\n        ...options,\n        headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n      }),\n    );\n    return runner;\n  }\n\n  currentEvent(): AssistantStreamEvent | undefined {\n    return this.#currentEvent;\n  }\n\n  currentRun(): Run | undefined {\n    return this.#currentRunSnapshot;\n  }\n\n  currentMessageSnapshot(): Message | undefined {\n    return this.#messageSnapshot;\n  }\n\n  currentRunStepSnapshot(): Runs.RunStep | undefined {\n    return this.#currentRunStepSnapshot;\n  }\n\n  async finalRunSteps(): Promise<Runs.RunStep[]> {\n    await this.done();\n\n    return Object.values(this.#runStepSnapshots);\n  }\n\n  async finalMessages(): Promise<Message[]> {\n    await this.done();\n\n    return Object.values(this.#messageSnapshots);\n  }\n\n  async finalRun(): Promise<Run> {\n    await this.done();\n    if (!this.#finalRun) throw Error('Final run was not received.');\n\n    return this.#finalRun;\n  }\n\n  protected async _createThreadAssistantStream(\n    thread: Threads,\n    params: ThreadCreateAndRunParamsBase,\n    options?: RequestOptions,\n  ): Promise<Run> {\n    const signal = options?.signal;\n    if (signal) {\n      if (signal.aborted) this.controller.abort();\n      signal.addEventListener('abort', () => this.controller.abort());\n    }\n\n    const body: RunCreateParamsStreaming = { ...params, stream: true };\n    const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n\n    this._connected();\n\n    for await (const event of stream) {\n      this.#addEvent(event);\n    }\n    if (stream.controller.signal?.aborted) {\n      throw new APIUserAbortError();\n    }\n\n    return this._addRun(this.#endRequest());\n  }\n\n  protected async _createAssistantStream(\n    run: Runs,\n    threadId: string,\n    params: RunCreateParamsBase,\n    options?: RequestOptions,\n  ): Promise<Run> {\n    const signal = options?.signal;\n    if (signal) {\n      if (signal.aborted) this.controller.abort();\n      signal.addEventListener('abort', () => this.controller.abort());\n    }\n\n    const body: RunCreateParamsStreaming = { ...params, stream: true };\n    const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n\n    this._connected();\n\n    for await (const event of stream) {\n      this.#addEvent(event);\n    }\n    if (stream.controller.signal?.aborted) {\n      throw new APIUserAbortError();\n    }\n\n    return this._addRun(this.#endRequest());\n  }\n\n  #addEvent(event: AssistantStreamEvent) {\n    if (this.ended) return;\n\n    this.#currentEvent = event;\n\n    this.#handleEvent(event);\n\n    switch (event.event) {\n      case 'thread.created':\n        //No action on this event.\n        break;\n\n      case 'thread.run.created':\n      case 'thread.run.queued':\n      case 'thread.run.in_progress':\n      case 'thread.run.requires_action':\n      case 'thread.run.completed':\n      case 'thread.run.incomplete':\n      case 'thread.run.failed':\n      case 'thread.run.cancelling':\n      case 'thread.run.cancelled':\n      case 'thread.run.expired':\n        this.#handleRun(event);\n        break;\n\n      case 'thread.run.step.created':\n      case 'thread.run.step.in_progress':\n      case 'thread.run.step.delta':\n      case 'thread.run.step.completed':\n      case 'thread.run.step.failed':\n      case 'thread.run.step.cancelled':\n      case 'thread.run.step.expired':\n        this.#handleRunStep(event);\n        break;\n\n      case 'thread.message.created':\n      case 'thread.message.in_progress':\n      case 'thread.message.delta':\n      case 'thread.message.completed':\n      case 'thread.message.incomplete':\n        this.#handleMessage(event);\n        break;\n\n      case 'error':\n        //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n        throw new Error(\n          'Encountered an error event in event processing - errors should be processed earlier',\n        );\n      default:\n        assertNever(event);\n    }\n  }\n\n  #endRequest(): Run {\n    if (this.ended) {\n      throw new OpenAIError(`stream has ended, this shouldn't happen`);\n    }\n\n    if (!this.#finalRun) throw Error('Final run has not been received');\n\n    return this.#finalRun;\n  }\n\n  #handleMessage(this: AssistantStream, event: MessageStreamEvent) {\n    const [accumulatedMessage, newContent] = this.#accumulateMessage(event, this.#messageSnapshot);\n    this.#messageSnapshot = accumulatedMessage;\n    this.#messageSnapshots[accumulatedMessage.id] = accumulatedMessage;\n\n    for (const content of newContent) {\n      const snapshotContent = accumulatedMessage.content[content.index];\n      if (snapshotContent?.type == 'text') {\n        this._emit('textCreated', snapshotContent.text);\n      }\n    }\n\n    switch (event.event) {\n      case 'thread.message.created':\n        this._emit('messageCreated', event.data);\n        break;\n\n      case 'thread.message.in_progress':\n        break;\n\n      case 'thread.message.delta':\n        this._emit('messageDelta', event.data.delta, accumulatedMessage);\n\n        if (event.data.delta.content) {\n          for (const content of event.data.delta.content) {\n            //If it is text delta, emit a text delta event\n            if (content.type == 'text' && content.text) {\n              let textDelta = content.text;\n              let snapshot = accumulatedMessage.content[content.index];\n              if (snapshot && snapshot.type == 'text') {\n                this._emit('textDelta', textDelta, snapshot.text);\n              } else {\n                throw Error('The snapshot associated with this text delta is not text or missing');\n              }\n            }\n\n            if (content.index != this.#currentContentIndex) {\n              //See if we have in progress content\n              if (this.#currentContent) {\n                switch (this.#currentContent.type) {\n                  case 'text':\n                    this._emit('textDone', this.#currentContent.text, this.#messageSnapshot);\n                    break;\n                  case 'image_file':\n                    this._emit('imageFileDone', this.#currentContent.image_file, this.#messageSnapshot);\n                    break;\n                }\n              }\n\n              this.#currentContentIndex = content.index;\n            }\n\n            this.#currentContent = accumulatedMessage.content[content.index];\n          }\n        }\n\n        break;\n\n      case 'thread.message.completed':\n      case 'thread.message.incomplete':\n        //We emit the latest content we were working on on completion (including incomplete)\n        if (this.#currentContentIndex !== undefined) {\n          const currentContent = event.data.content[this.#currentContentIndex];\n          if (currentContent) {\n            switch (currentContent.type) {\n              case 'image_file':\n                this._emit('imageFileDone', currentContent.image_file, this.#messageSnapshot);\n                break;\n              case 'text':\n                this._emit('textDone', currentContent.text, this.#messageSnapshot);\n                break;\n            }\n          }\n        }\n\n        if (this.#messageSnapshot) {\n          this._emit('messageDone', event.data);\n        }\n\n        this.#messageSnapshot = undefined;\n    }\n  }\n\n  #handleRunStep(this: AssistantStream, event: RunStepStreamEvent) {\n    const accumulatedRunStep = this.#accumulateRunStep(event);\n    this.#currentRunStepSnapshot = accumulatedRunStep;\n\n    switch (event.event) {\n      case 'thread.run.step.created':\n        this._emit('runStepCreated', event.data);\n        break;\n      case 'thread.run.step.delta':\n        const delta = event.data.delta;\n        if (\n          delta.step_details &&\n          delta.step_details.type == 'tool_calls' &&\n          delta.step_details.tool_calls &&\n          accumulatedRunStep.step_details.type == 'tool_calls'\n        ) {\n          for (const toolCall of delta.step_details.tool_calls) {\n            if (toolCall.index == this.#currentToolCallIndex) {\n              this._emit(\n                'toolCallDelta',\n                toolCall,\n                accumulatedRunStep.step_details.tool_calls[toolCall.index] as ToolCall,\n              );\n            } else {\n              if (this.#currentToolCall) {\n                this._emit('toolCallDone', this.#currentToolCall);\n              }\n\n              this.#currentToolCallIndex = toolCall.index;\n              this.#currentToolCall = accumulatedRunStep.step_details.tool_calls[toolCall.index];\n              if (this.#currentToolCall) this._emit('toolCallCreated', this.#currentToolCall);\n            }\n          }\n        }\n\n        this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n        break;\n      case 'thread.run.step.completed':\n      case 'thread.run.step.failed':\n      case 'thread.run.step.cancelled':\n      case 'thread.run.step.expired':\n        this.#currentRunStepSnapshot = undefined;\n        const details = event.data.step_details;\n        if (details.type == 'tool_calls') {\n          if (this.#currentToolCall) {\n            this._emit('toolCallDone', this.#currentToolCall as ToolCall);\n            this.#currentToolCall = undefined;\n          }\n        }\n        this._emit('runStepDone', event.data, accumulatedRunStep);\n        break;\n      case 'thread.run.step.in_progress':\n        break;\n    }\n  }\n\n  #handleEvent(this: AssistantStream, event: AssistantStreamEvent) {\n    this.#events.push(event);\n    this._emit('event', event);\n  }\n\n  #accumulateRunStep(event: RunStepStreamEvent): Runs.RunStep {\n    switch (event.event) {\n      case 'thread.run.step.created':\n        this.#runStepSnapshots[event.data.id] = event.data;\n        return event.data;\n\n      case 'thread.run.step.delta':\n        let snapshot = this.#runStepSnapshots[event.data.id] as Runs.RunStep;\n        if (!snapshot) {\n          throw Error('Received a RunStepDelta before creation of a snapshot');\n        }\n\n        let data = event.data;\n\n        if (data.delta) {\n          const accumulated = AssistantStream.accumulateDelta(snapshot, data.delta) as Runs.RunStep;\n          this.#runStepSnapshots[event.data.id] = accumulated;\n        }\n\n        return this.#runStepSnapshots[event.data.id] as Runs.RunStep;\n\n      case 'thread.run.step.completed':\n      case 'thread.run.step.failed':\n      case 'thread.run.step.cancelled':\n      case 'thread.run.step.expired':\n      case 'thread.run.step.in_progress':\n        this.#runStepSnapshots[event.data.id] = event.data;\n        break;\n    }\n\n    if (this.#runStepSnapshots[event.data.id]) return this.#runStepSnapshots[event.data.id] as Runs.RunStep;\n    throw new Error('No snapshot available');\n  }\n\n  #accumulateMessage(\n    event: AssistantStreamEvent,\n    snapshot: Message | undefined,\n  ): [Message, MessageContentDelta[]] {\n    let newContent: MessageContentDelta[] = [];\n\n    switch (event.event) {\n      case 'thread.message.created':\n        //On creation the snapshot is just the initial message\n        return [event.data, newContent];\n\n      case 'thread.message.delta':\n        if (!snapshot) {\n          throw Error(\n            'Received a delta with no existing snapshot (there should be one from message creation)',\n          );\n        }\n\n        let data = event.data;\n\n        //If this delta does not have content, nothing to process\n        if (data.delta.content) {\n          for (const contentElement of data.delta.content) {\n            if (contentElement.index in snapshot.content) {\n              let currentContent = snapshot.content[contentElement.index];\n              snapshot.content[contentElement.index] = this.#accumulateContent(\n                contentElement,\n                currentContent,\n              );\n            } else {\n              snapshot.content[contentElement.index] = contentElement as MessageContent;\n              // This is a new element\n              newContent.push(contentElement);\n            }\n          }\n        }\n\n        return [snapshot, newContent];\n\n      case 'thread.message.in_progress':\n      case 'thread.message.completed':\n      case 'thread.message.incomplete':\n        //No changes on other thread events\n        if (snapshot) {\n          return [snapshot, newContent];\n        } else {\n          throw Error('Received thread message event with no existing snapshot');\n        }\n    }\n    throw Error('Tried to accumulate a non-message event');\n  }\n\n  #accumulateContent(\n    contentElement: MessageContentDelta,\n    currentContent: MessageContent | undefined,\n  ): TextContentBlock | ImageFileContentBlock {\n    return AssistantStream.accumulateDelta(currentContent as unknown as Record<any, any>, contentElement) as\n      | TextContentBlock\n      | ImageFileContentBlock;\n  }\n\n  static accumulateDelta(acc: Record<string, any>, delta: Record<string, any>): Record<string, any> {\n    for (const [key, deltaValue] of Object.entries(delta)) {\n      if (!acc.hasOwnProperty(key)) {\n        acc[key] = deltaValue;\n        continue;\n      }\n\n      let accValue = acc[key];\n      if (accValue === null || accValue === undefined) {\n        acc[key] = deltaValue;\n        continue;\n      }\n\n      // We don't accumulate these special properties\n      if (key === 'index' || key === 'type') {\n        acc[key] = deltaValue;\n        continue;\n      }\n\n      // Type-specific accumulation logic\n      if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n        accValue += deltaValue;\n      } else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n        accValue += deltaValue;\n      } else if (isObj(accValue) && isObj(deltaValue)) {\n        accValue = this.accumulateDelta(accValue as Record<string, any>, deltaValue as Record<string, any>);\n      } else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n        if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n          accValue.push(...deltaValue); // Use spread syntax for efficient addition\n          continue;\n        }\n\n        for (const deltaEntry of deltaValue) {\n          if (!isObj(deltaEntry)) {\n            throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n          }\n\n          const index = deltaEntry['index'];\n          if (index == null) {\n            console.error(deltaEntry);\n            throw new Error('Expected array delta entry to have an `index` property');\n          }\n\n          if (typeof index !== 'number') {\n            throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n          }\n\n          const accEntry = accValue[index];\n          if (accEntry == null) {\n            accValue.push(deltaEntry);\n          } else {\n            accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n          }\n        }\n        continue;\n      } else {\n        throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n      }\n      acc[key] = accValue;\n    }\n\n    return acc;\n  }\n\n  #handleRun(this: AssistantStream, event: RunStreamEvent) {\n    this.#currentRunSnapshot = event.data;\n\n    switch (event.event) {\n      case 'thread.run.created':\n        break;\n      case 'thread.run.queued':\n        break;\n      case 'thread.run.in_progress':\n        break;\n      case 'thread.run.requires_action':\n      case 'thread.run.cancelled':\n      case 'thread.run.failed':\n      case 'thread.run.completed':\n      case 'thread.run.expired':\n      case 'thread.run.incomplete':\n        this.#finalRun = event.data;\n        if (this.#currentToolCall) {\n          this._emit('toolCallDone', this.#currentToolCall);\n          this.#currentToolCall = undefined;\n        }\n        break;\n      case 'thread.run.cancelling':\n        break;\n    }\n  }\n\n  protected _addRun(run: Run): Run {\n    return run;\n  }\n\n  protected async _threadAssistantStream(\n    params: ThreadCreateAndRunParamsBase,\n    thread: Threads,\n    options?: RequestOptions,\n  ): Promise<Run> {\n    return await this._createThreadAssistantStream(thread, params, options);\n  }\n\n  protected async _runAssistantStream(\n    threadId: string,\n    runs: Runs,\n    params: RunCreateParamsBase,\n    options?: RequestOptions,\n  ): Promise<Run> {\n    return await this._createAssistantStream(runs, threadId, params, options);\n  }\n\n  protected async _runToolAssistantStream(\n    runId: string,\n    runs: Runs,\n    params: RunSubmitToolOutputsParamsStream,\n    options?: RequestOptions,\n  ): Promise<Run> {\n    return await this._createToolAssistantStream(runs, runId, params, options);\n  }\n}\n\nfunction assertNever(_x: never) {}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../../core/resource';\nimport * as RunsAPI from './runs';\nimport * as Shared from '../../../shared';\nimport * as AssistantsAPI from '../../assistants';\nimport * as MessagesAPI from '../messages';\nimport * as ThreadsAPI from '../threads';\nimport * as StepsAPI from './steps';\nimport {\n  CodeInterpreterLogs,\n  CodeInterpreterOutputImage,\n  CodeInterpreterToolCall,\n  CodeInterpreterToolCallDelta,\n  FileSearchToolCall,\n  FileSearchToolCallDelta,\n  FunctionToolCall,\n  FunctionToolCallDelta,\n  MessageCreationStepDetails,\n  RunStep,\n  RunStepDelta,\n  RunStepDeltaEvent,\n  RunStepDeltaMessageDelta,\n  RunStepInclude,\n  RunStepsPage,\n  StepListParams,\n  StepRetrieveParams,\n  Steps,\n  ToolCall,\n  ToolCallDelta,\n  ToolCallDeltaObject,\n  ToolCallsStepDetails,\n} from './steps';\nimport { APIPromise } from '../../../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../../../core/pagination';\nimport { Stream } from '../../../../core/streaming';\nimport { buildHeaders } from '../../../../internal/headers';\nimport { RequestOptions } from '../../../../internal/request-options';\nimport { AssistantStream, RunCreateParamsBaseStream } from '../../../../lib/AssistantStream';\nimport { sleep } from '../../../../internal/utils/sleep';\nimport { RunSubmitToolOutputsParamsStream } from '../../../../lib/AssistantStream';\nimport { path } from '../../../../internal/utils/path';\n\n/**\n * Build Assistants that can call models and use tools.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n  steps: StepsAPI.Steps = new StepsAPI.Steps(this._client);\n\n  /**\n   * Create a run.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  create(threadID: string, params: RunCreateParamsNonStreaming, options?: RequestOptions): APIPromise<Run>;\n  create(\n    threadID: string,\n    params: RunCreateParamsStreaming,\n    options?: RequestOptions,\n  ): APIPromise<Stream<AssistantsAPI.AssistantStreamEvent>>;\n  create(\n    threadID: string,\n    params: RunCreateParamsBase,\n    options?: RequestOptions,\n  ): APIPromise<Stream<AssistantsAPI.AssistantStreamEvent> | Run>;\n  create(\n    threadID: string,\n    params: RunCreateParams,\n    options?: RequestOptions,\n  ): APIPromise<Run> | APIPromise<Stream<AssistantsAPI.AssistantStreamEvent>> {\n    const { include, ...body } = params;\n    return this._client.post(path`/threads/${threadID}/runs`, {\n      query: { include },\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      stream: params.stream ?? false,\n      __synthesizeEventData: true,\n      __security: { bearerAuth: true },\n    }) as APIPromise<Run> | APIPromise<Stream<AssistantsAPI.AssistantStreamEvent>>;\n  }\n\n  /**\n   * Retrieves a run.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  retrieve(runID: string, params: RunRetrieveParams, options?: RequestOptions): APIPromise<Run> {\n    const { thread_id } = params;\n    return this._client.get(path`/threads/${thread_id}/runs/${runID}`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Modifies a run.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  update(runID: string, params: RunUpdateParams, options?: RequestOptions): APIPromise<Run> {\n    const { thread_id, ...body } = params;\n    return this._client.post(path`/threads/${thread_id}/runs/${runID}`, {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Returns a list of runs belonging to a thread.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  list(\n    threadID: string,\n    query: RunListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<RunsPage, Run> {\n    return this._client.getAPIList(path`/threads/${threadID}/runs`, CursorPage<Run>, {\n      query,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Cancels a run that is `in_progress`.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  cancel(runID: string, params: RunCancelParams, options?: RequestOptions): APIPromise<Run> {\n    const { thread_id } = params;\n    return this._client.post(path`/threads/${thread_id}/runs/${runID}/cancel`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * A helper to create a run an poll for a terminal state. More information on Run\n   * lifecycles can be found here:\n   * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n   */\n  async createAndPoll(\n    threadId: string,\n    body: RunCreateParamsNonStreaming,\n    options?: RequestOptions & { pollIntervalMs?: number },\n  ): Promise<Run> {\n    const run = await this.create(threadId, body, options);\n    return await this.poll(run.id, { thread_id: threadId }, options);\n  }\n\n  /**\n   * Create a Run stream\n   *\n   * @deprecated use `stream` instead\n   */\n  createAndStream(\n    threadId: string,\n    body: RunCreateParamsBaseStream,\n    options?: RequestOptions,\n  ): AssistantStream {\n    return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n  }\n\n  /**\n   * A helper to poll a run status until it reaches a terminal state. More\n   * information on Run lifecycles can be found here:\n   * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n   */\n  async poll(\n    runId: string,\n    params: RunRetrieveParams,\n    options?: RequestOptions & { pollIntervalMs?: number },\n  ): Promise<Run> {\n    const headers = buildHeaders([\n      options?.headers,\n      {\n        'X-Stainless-Poll-Helper': 'true',\n        'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n      },\n    ]);\n\n    while (true) {\n      const { data: run, response } = await this.retrieve(runId, params, {\n        ...options,\n        headers: { ...options?.headers, ...headers },\n      }).withResponse();\n\n      switch (run.status) {\n        //If we are in any sort of intermediate state we poll\n        case 'queued':\n        case 'in_progress':\n        case 'cancelling':\n          let sleepInterval = 5000;\n\n          if (options?.pollIntervalMs) {\n            sleepInterval = options.pollIntervalMs;\n          } else {\n            const headerInterval = response.headers.get('openai-poll-after-ms');\n            if (headerInterval) {\n              const headerIntervalMs = parseInt(headerInterval);\n              if (!isNaN(headerIntervalMs)) {\n                sleepInterval = headerIntervalMs;\n              }\n            }\n          }\n          await sleep(sleepInterval);\n          break;\n        //We return the run in any terminal state.\n        case 'requires_action':\n        case 'incomplete':\n        case 'cancelled':\n        case 'completed':\n        case 'failed':\n        case 'expired':\n          return run;\n      }\n    }\n  }\n\n  /**\n   * Create a Run stream\n   */\n  stream(threadId: string, body: RunCreateParamsBaseStream, options?: RequestOptions): AssistantStream {\n    return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n  }\n\n  /**\n   * When a run has the `status: \"requires_action\"` and `required_action.type` is\n   * `submit_tool_outputs`, this endpoint can be used to submit the outputs from the\n   * tool calls once they're all completed. All outputs must be submitted in a single\n   * request.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  submitToolOutputs(\n    runID: string,\n    params: RunSubmitToolOutputsParamsNonStreaming,\n    options?: RequestOptions,\n  ): APIPromise<Run>;\n  submitToolOutputs(\n    runID: string,\n    params: RunSubmitToolOutputsParamsStreaming,\n    options?: RequestOptions,\n  ): APIPromise<Stream<AssistantsAPI.AssistantStreamEvent>>;\n  submitToolOutputs(\n    runID: string,\n    params: RunSubmitToolOutputsParamsBase,\n    options?: RequestOptions,\n  ): APIPromise<Stream<AssistantsAPI.AssistantStreamEvent> | Run>;\n  submitToolOutputs(\n    runID: string,\n    params: RunSubmitToolOutputsParams,\n    options?: RequestOptions,\n  ): APIPromise<Run> | APIPromise<Stream<AssistantsAPI.AssistantStreamEvent>> {\n    const { thread_id, ...body } = params;\n    return this._client.post(path`/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      stream: params.stream ?? false,\n      __synthesizeEventData: true,\n      __security: { bearerAuth: true },\n    }) as APIPromise<Run> | APIPromise<Stream<AssistantsAPI.AssistantStreamEvent>>;\n  }\n\n  /**\n   * A helper to submit a tool output to a run and poll for a terminal run state.\n   * More information on Run lifecycles can be found here:\n   * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n   */\n  async submitToolOutputsAndPoll(\n    runId: string,\n    params: RunSubmitToolOutputsParamsNonStreaming,\n    options?: RequestOptions & { pollIntervalMs?: number },\n  ): Promise<Run> {\n    const run = await this.submitToolOutputs(runId, params, options);\n    return await this.poll(run.id, params, options);\n  }\n\n  /**\n   * Submit the tool outputs from a previous run and stream the run to a terminal\n   * state. More information on Run lifecycles can be found here:\n   * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n   */\n  submitToolOutputsStream(\n    runId: string,\n    params: RunSubmitToolOutputsParamsStream,\n    options?: RequestOptions,\n  ): AssistantStream {\n    return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n  }\n}\n\nexport type RunsPage = CursorPage<Run>;\n\n/**\n * Tool call objects\n */\nexport interface RequiredActionFunctionToolCall {\n  /**\n   * The ID of the tool call. This ID must be referenced when you submit the tool\n   * outputs in using the\n   * [Submit tool outputs to run](https://platform.openai.com/docs/api-reference/runs/submitToolOutputs)\n   * endpoint.\n   */\n  id: string;\n\n  /**\n   * The function definition.\n   */\n  function: RequiredActionFunctionToolCall.Function;\n\n  /**\n   * The type of tool call the output is required for. For now, this is always\n   * `function`.\n   */\n  type: 'function';\n}\n\nexport namespace RequiredActionFunctionToolCall {\n  /**\n   * The function definition.\n   */\n  export interface Function {\n    /**\n     * The arguments that the model expects you to pass to the function.\n     */\n    arguments: string;\n\n    /**\n     * The name of the function.\n     */\n    name: string;\n  }\n}\n\n/**\n * Represents an execution run on a\n * [thread](https://platform.openai.com/docs/api-reference/threads).\n */\nexport interface Run {\n  /**\n   * The identifier, which can be referenced in API endpoints.\n   */\n  id: string;\n\n  /**\n   * The ID of the\n   * [assistant](https://platform.openai.com/docs/api-reference/assistants) used for\n   * execution of this run.\n   */\n  assistant_id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the run was cancelled.\n   */\n  cancelled_at: number | null;\n\n  /**\n   * The Unix timestamp (in seconds) for when the run was completed.\n   */\n  completed_at: number | null;\n\n  /**\n   * The Unix timestamp (in seconds) for when the run was created.\n   */\n  created_at: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the run will expire.\n   */\n  expires_at: number | null;\n\n  /**\n   * The Unix timestamp (in seconds) for when the run failed.\n   */\n  failed_at: number | null;\n\n  /**\n   * Details on why the run is incomplete. Will be `null` if the run is not\n   * incomplete.\n   */\n  incomplete_details: Run.IncompleteDetails | null;\n\n  /**\n   * The instructions that the\n   * [assistant](https://platform.openai.com/docs/api-reference/assistants) used for\n   * this run.\n   */\n  instructions: string;\n\n  /**\n   * The last error associated with this run. Will be `null` if there are no errors.\n   */\n  last_error: Run.LastError | null;\n\n  /**\n   * The maximum number of completion tokens specified to have been used over the\n   * course of the run.\n   */\n  max_completion_tokens: number | null;\n\n  /**\n   * The maximum number of prompt tokens specified to have been used over the course\n   * of the run.\n   */\n  max_prompt_tokens: number | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n\n  /**\n   * The model that the\n   * [assistant](https://platform.openai.com/docs/api-reference/assistants) used for\n   * this run.\n   */\n  model: string;\n\n  /**\n   * The object type, which is always `thread.run`.\n   */\n  object: 'thread.run';\n\n  /**\n   * Whether to enable\n   * [parallel function calling](https://platform.openai.com/docs/guides/function-calling#configuring-parallel-function-calling)\n   * during tool use.\n   */\n  parallel_tool_calls: boolean;\n\n  /**\n   * Details on the action required to continue the run. Will be `null` if no action\n   * is required.\n   */\n  required_action: Run.RequiredAction | null;\n\n  /**\n   * Specifies the format that the model must output. Compatible with\n   * [GPT-4o](https://platform.openai.com/docs/models#gpt-4o),\n   * [GPT-4 Turbo](https://platform.openai.com/docs/models#gpt-4-turbo-and-gpt-4),\n   * and all GPT-3.5 Turbo models since `gpt-3.5-turbo-1106`.\n   *\n   * Setting to `{ \"type\": \"json_schema\", \"json_schema\": {...} }` enables Structured\n   * Outputs which ensures the model will match your supplied JSON schema. Learn more\n   * in the\n   * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n   *\n   * Setting to `{ \"type\": \"json_object\" }` enables JSON mode, which ensures the\n   * message the model generates is valid JSON.\n   *\n   * **Important:** when using JSON mode, you **must** also instruct the model to\n   * produce JSON yourself via a system or user message. Without this, the model may\n   * generate an unending stream of whitespace until the generation reaches the token\n   * limit, resulting in a long-running and seemingly \"stuck\" request. Also note that\n   * the message content may be partially cut off if `finish_reason=\"length\"`, which\n   * indicates the generation exceeded `max_tokens` or the conversation exceeded the\n   * max context length.\n   */\n  response_format: ThreadsAPI.AssistantResponseFormatOption | null;\n\n  /**\n   * The Unix timestamp (in seconds) for when the run was started.\n   */\n  started_at: number | null;\n\n  /**\n   * The status of the run, which can be either `queued`, `in_progress`,\n   * `requires_action`, `cancelling`, `cancelled`, `failed`, `completed`,\n   * `incomplete`, or `expired`.\n   */\n  status: RunStatus;\n\n  /**\n   * The ID of the [thread](https://platform.openai.com/docs/api-reference/threads)\n   * that was executed on as a part of this run.\n   */\n  thread_id: string;\n\n  /**\n   * Controls which (if any) tool is called by the model. `none` means the model will\n   * not call any tools and instead generates a message. `auto` is the default value\n   * and means the model can pick between generating a message or calling one or more\n   * tools. `required` means the model must call one or more tools before responding\n   * to the user. Specifying a particular tool like `{\"type\": \"file_search\"}` or\n   * `{\"type\": \"function\", \"function\": {\"name\": \"my_function\"}}` forces the model to\n   * call that tool.\n   */\n  tool_choice: ThreadsAPI.AssistantToolChoiceOption | null;\n\n  /**\n   * The list of tools that the\n   * [assistant](https://platform.openai.com/docs/api-reference/assistants) used for\n   * this run.\n   */\n  tools: Array<AssistantsAPI.AssistantTool>;\n\n  /**\n   * Controls for how a thread will be truncated prior to the run. Use this to\n   * control the initial context window of the run.\n   */\n  truncation_strategy: Run.TruncationStrategy | null;\n\n  /**\n   * Usage statistics related to the run. This value will be `null` if the run is not\n   * in a terminal state (i.e. `in_progress`, `queued`, etc.).\n   */\n  usage: Run.Usage | null;\n\n  /**\n   * The sampling temperature used for this run. If not set, defaults to 1.\n   */\n  temperature?: number | null;\n\n  /**\n   * The nucleus sampling value used for this run. If not set, defaults to 1.\n   */\n  top_p?: number | null;\n}\n\nexport namespace Run {\n  /**\n   * Details on why the run is incomplete. Will be `null` if the run is not\n   * incomplete.\n   */\n  export interface IncompleteDetails {\n    /**\n     * The reason why the run is incomplete. This will point to which specific token\n     * limit was reached over the course of the run.\n     */\n    reason?: 'max_completion_tokens' | 'max_prompt_tokens';\n  }\n\n  /**\n   * The last error associated with this run. Will be `null` if there are no errors.\n   */\n  export interface LastError {\n    /**\n     * One of `server_error`, `rate_limit_exceeded`, or `invalid_prompt`.\n     */\n    code: 'server_error' | 'rate_limit_exceeded' | 'invalid_prompt';\n\n    /**\n     * A human-readable description of the error.\n     */\n    message: string;\n  }\n\n  /**\n   * Details on the action required to continue the run. Will be `null` if no action\n   * is required.\n   */\n  export interface RequiredAction {\n    /**\n     * Details on the tool outputs needed for this run to continue.\n     */\n    submit_tool_outputs: RequiredAction.SubmitToolOutputs;\n\n    /**\n     * For now, this is always `submit_tool_outputs`.\n     */\n    type: 'submit_tool_outputs';\n  }\n\n  export namespace RequiredAction {\n    /**\n     * Details on the tool outputs needed for this run to continue.\n     */\n    export interface SubmitToolOutputs {\n      /**\n       * A list of the relevant tool calls.\n       */\n      tool_calls: Array<RunsAPI.RequiredActionFunctionToolCall>;\n    }\n  }\n\n  /**\n   * Controls for how a thread will be truncated prior to the run. Use this to\n   * control the initial context window of the run.\n   */\n  export interface TruncationStrategy {\n    /**\n     * The truncation strategy to use for the thread. The default is `auto`. If set to\n     * `last_messages`, the thread will be truncated to the n most recent messages in\n     * the thread. When set to `auto`, messages in the middle of the thread will be\n     * dropped to fit the context length of the model, `max_prompt_tokens`.\n     */\n    type: 'auto' | 'last_messages';\n\n    /**\n     * The number of most recent messages from the thread when constructing the context\n     * for the run.\n     */\n    last_messages?: number | null;\n  }\n\n  /**\n   * Usage statistics related to the run. This value will be `null` if the run is not\n   * in a terminal state (i.e. `in_progress`, `queued`, etc.).\n   */\n  export interface Usage {\n    /**\n     * Number of completion tokens used over the course of the run.\n     */\n    completion_tokens: number;\n\n    /**\n     * Number of prompt tokens used over the course of the run.\n     */\n    prompt_tokens: number;\n\n    /**\n     * Total number of tokens used (prompt + completion).\n     */\n    total_tokens: number;\n  }\n}\n\n/**\n * The status of the run, which can be either `queued`, `in_progress`,\n * `requires_action`, `cancelling`, `cancelled`, `failed`, `completed`,\n * `incomplete`, or `expired`.\n */\nexport type RunStatus =\n  | 'queued'\n  | 'in_progress'\n  | 'requires_action'\n  | 'cancelling'\n  | 'cancelled'\n  | 'failed'\n  | 'completed'\n  | 'incomplete'\n  | 'expired';\n\nexport type RunCreateParams = RunCreateParamsNonStreaming | RunCreateParamsStreaming;\n\nexport interface RunCreateParamsBase {\n  /**\n   * Body param: The ID of the\n   * [assistant](https://platform.openai.com/docs/api-reference/assistants) to use to\n   * execute this run.\n   */\n  assistant_id: string;\n\n  /**\n   * Query param: A list of additional fields to include in the response. Currently\n   * the only supported value is\n   * `step_details.tool_calls[*].file_search.results[*].content` to fetch the file\n   * search result content.\n   *\n   * See the\n   * [file search tool documentation](https://platform.openai.com/docs/assistants/tools/file-search#customizing-file-search-settings)\n   * for more information.\n   */\n  include?: Array<StepsAPI.RunStepInclude>;\n\n  /**\n   * Body param: Appends additional instructions at the end of the instructions for\n   * the run. This is useful for modifying the behavior on a per-run basis without\n   * overriding other instructions.\n   */\n  additional_instructions?: string | null;\n\n  /**\n   * Body param: Adds additional messages to the thread before creating the run.\n   */\n  additional_messages?: Array<RunCreateParams.AdditionalMessage> | null;\n\n  /**\n   * Body param: Overrides the\n   * [instructions](https://platform.openai.com/docs/api-reference/assistants/createAssistant)\n   * of the assistant. This is useful for modifying the behavior on a per-run basis.\n   */\n  instructions?: string | null;\n\n  /**\n   * Body param: The maximum number of completion tokens that may be used over the\n   * course of the run. The run will make a best effort to use only the number of\n   * completion tokens specified, across multiple turns of the run. If the run\n   * exceeds the number of completion tokens specified, the run will end with status\n   * `incomplete`. See `incomplete_details` for more info.\n   */\n  max_completion_tokens?: number | null;\n\n  /**\n   * Body param: The maximum number of prompt tokens that may be used over the course\n   * of the run. The run will make a best effort to use only the number of prompt\n   * tokens specified, across multiple turns of the run. If the run exceeds the\n   * number of prompt tokens specified, the run will end with status `incomplete`.\n   * See `incomplete_details` for more info.\n   */\n  max_prompt_tokens?: number | null;\n\n  /**\n   * Body param: Set of 16 key-value pairs that can be attached to an object. This\n   * can be useful for storing additional information about the object in a\n   * structured format, and querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * Body param: The ID of the\n   * [Model](https://platform.openai.com/docs/api-reference/models) to be used to\n   * execute this run. If a value is provided here, it will override the model\n   * associated with the assistant. If not, the model associated with the assistant\n   * will be used.\n   */\n  model?: (string & {}) | Shared.ChatModel | null;\n\n  /**\n   * Body param: Whether to enable\n   * [parallel function calling](https://platform.openai.com/docs/guides/function-calling#configuring-parallel-function-calling)\n   * during tool use.\n   */\n  parallel_tool_calls?: boolean;\n\n  /**\n   * Body param: Constrains effort on reasoning for\n   * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n   * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n   * Reducing reasoning effort can result in faster responses and fewer tokens used\n   * on reasoning in a response.\n   *\n   * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n   *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n   *   calls are supported for all reasoning values in gpt-5.1.\n   * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n   *   support `none`.\n   * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n   * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n   */\n  reasoning_effort?: Shared.ReasoningEffort | null;\n\n  /**\n   * Body param: Specifies the format that the model must output. Compatible with\n   * [GPT-4o](https://platform.openai.com/docs/models#gpt-4o),\n   * [GPT-4 Turbo](https://platform.openai.com/docs/models#gpt-4-turbo-and-gpt-4),\n   * and all GPT-3.5 Turbo models since `gpt-3.5-turbo-1106`.\n   *\n   * Setting to `{ \"type\": \"json_schema\", \"json_schema\": {...} }` enables Structured\n   * Outputs which ensures the model will match your supplied JSON schema. Learn more\n   * in the\n   * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n   *\n   * Setting to `{ \"type\": \"json_object\" }` enables JSON mode, which ensures the\n   * message the model generates is valid JSON.\n   *\n   * **Important:** when using JSON mode, you **must** also instruct the model to\n   * produce JSON yourself via a system or user message. Without this, the model may\n   * generate an unending stream of whitespace until the generation reaches the token\n   * limit, resulting in a long-running and seemingly \"stuck\" request. Also note that\n   * the message content may be partially cut off if `finish_reason=\"length\"`, which\n   * indicates the generation exceeded `max_tokens` or the conversation exceeded the\n   * max context length.\n   */\n  response_format?: ThreadsAPI.AssistantResponseFormatOption | null;\n\n  /**\n   * Body param: If `true`, returns a stream of events that happen during the Run as\n   * server-sent events, terminating when the Run enters a terminal state with a\n   * `data: [DONE]` message.\n   */\n  stream?: boolean | null;\n\n  /**\n   * Body param: What sampling temperature to use, between 0 and 2. Higher values\n   * like 0.8 will make the output more random, while lower values like 0.2 will make\n   * it more focused and deterministic.\n   */\n  temperature?: number | null;\n\n  /**\n   * Body param: Controls which (if any) tool is called by the model. `none` means\n   * the model will not call any tools and instead generates a message. `auto` is the\n   * default value and means the model can pick between generating a message or\n   * calling one or more tools. `required` means the model must call one or more\n   * tools before responding to the user. Specifying a particular tool like\n   * `{\"type\": \"file_search\"}` or\n   * `{\"type\": \"function\", \"function\": {\"name\": \"my_function\"}}` forces the model to\n   * call that tool.\n   */\n  tool_choice?: ThreadsAPI.AssistantToolChoiceOption | null;\n\n  /**\n   * Body param: Override the tools the assistant can use for this run. This is\n   * useful for modifying the behavior on a per-run basis.\n   */\n  tools?: Array<AssistantsAPI.AssistantTool> | null;\n\n  /**\n   * Body param: An alternative to sampling with temperature, called nucleus\n   * sampling, where the model considers the results of the tokens with top_p\n   * probability mass. So 0.1 means only the tokens comprising the top 10%\n   * probability mass are considered.\n   *\n   * We generally recommend altering this or temperature but not both.\n   */\n  top_p?: number | null;\n\n  /**\n   * Body param: Controls for how a thread will be truncated prior to the run. Use\n   * this to control the initial context window of the run.\n   */\n  truncation_strategy?: RunCreateParams.TruncationStrategy | null;\n}\n\nexport namespace RunCreateParams {\n  export interface AdditionalMessage {\n    /**\n     * The text contents of the message.\n     */\n    content: string | Array<MessagesAPI.MessageContentPartParam>;\n\n    /**\n     * The role of the entity that is creating the message. Allowed values include:\n     *\n     * - `user`: Indicates the message is sent by an actual user and should be used in\n     *   most cases to represent user-generated messages.\n     * - `assistant`: Indicates the message is generated by the assistant. Use this\n     *   value to insert messages from the assistant into the conversation.\n     */\n    role: 'user' | 'assistant';\n\n    /**\n     * A list of files attached to the message, and the tools they should be added to.\n     */\n    attachments?: Array<AdditionalMessage.Attachment> | null;\n\n    /**\n     * Set of 16 key-value pairs that can be attached to an object. This can be useful\n     * for storing additional information about the object in a structured format, and\n     * querying for objects via API or the dashboard.\n     *\n     * Keys are strings with a maximum length of 64 characters. Values are strings with\n     * a maximum length of 512 characters.\n     */\n    metadata?: Shared.Metadata | null;\n  }\n\n  export namespace AdditionalMessage {\n    export interface Attachment {\n      /**\n       * The ID of the file to attach to the message.\n       */\n      file_id?: string;\n\n      /**\n       * The tools to add this file to.\n       */\n      tools?: Array<AssistantsAPI.CodeInterpreterTool | Attachment.FileSearch>;\n    }\n\n    export namespace Attachment {\n      export interface FileSearch {\n        /**\n         * The type of tool being defined: `file_search`\n         */\n        type: 'file_search';\n      }\n    }\n  }\n\n  /**\n   * Controls for how a thread will be truncated prior to the run. Use this to\n   * control the initial context window of the run.\n   */\n  export interface TruncationStrategy {\n    /**\n     * The truncation strategy to use for the thread. The default is `auto`. If set to\n     * `last_messages`, the thread will be truncated to the n most recent messages in\n     * the thread. When set to `auto`, messages in the middle of the thread will be\n     * dropped to fit the context length of the model, `max_prompt_tokens`.\n     */\n    type: 'auto' | 'last_messages';\n\n    /**\n     * The number of most recent messages from the thread when constructing the context\n     * for the run.\n     */\n    last_messages?: number | null;\n  }\n\n  export type RunCreateParamsNonStreaming = RunsAPI.RunCreateParamsNonStreaming;\n  export type RunCreateParamsStreaming = RunsAPI.RunCreateParamsStreaming;\n}\n\nexport interface RunCreateParamsNonStreaming extends RunCreateParamsBase {\n  /**\n   * Body param: If `true`, returns a stream of events that happen during the Run as\n   * server-sent events, terminating when the Run enters a terminal state with a\n   * `data: [DONE]` message.\n   */\n  stream?: false | null;\n}\n\nexport interface RunCreateParamsStreaming extends RunCreateParamsBase {\n  /**\n   * Body param: If `true`, returns a stream of events that happen during the Run as\n   * server-sent events, terminating when the Run enters a terminal state with a\n   * `data: [DONE]` message.\n   */\n  stream: true;\n}\n\nexport interface RunRetrieveParams {\n  /**\n   * The ID of the [thread](https://platform.openai.com/docs/api-reference/threads)\n   * that was run.\n   */\n  thread_id: string;\n}\n\nexport interface RunUpdateParams {\n  /**\n   * Path param: The ID of the\n   * [thread](https://platform.openai.com/docs/api-reference/threads) that was run.\n   */\n  thread_id: string;\n\n  /**\n   * Body param: Set of 16 key-value pairs that can be attached to an object. This\n   * can be useful for storing additional information about the object in a\n   * structured format, and querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n}\n\nexport interface RunListParams extends CursorPageParams {\n  /**\n   * A cursor for use in pagination. `before` is an object ID that defines your place\n   * in the list. For instance, if you make a list request and receive 100 objects,\n   * starting with obj_foo, your subsequent call can include before=obj_foo in order\n   * to fetch the previous page of the list.\n   */\n  before?: string;\n\n  /**\n   * Sort order by the `created_at` timestamp of the objects. `asc` for ascending\n   * order and `desc` for descending order.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface RunCancelParams {\n  /**\n   * The ID of the thread to which this run belongs.\n   */\n  thread_id: string;\n}\n\nexport type RunCreateAndPollParams = ThreadsAPI.ThreadCreateAndRunParamsNonStreaming;\n\nexport type RunCreateAndStreamParams = RunCreateParamsBaseStream;\n\nexport type RunStreamParams = RunCreateParamsBaseStream;\n\nexport type RunSubmitToolOutputsParams =\n  | RunSubmitToolOutputsParamsNonStreaming\n  | RunSubmitToolOutputsParamsStreaming;\n\nexport interface RunSubmitToolOutputsParamsBase {\n  /**\n   * Path param: The ID of the\n   * [thread](https://platform.openai.com/docs/api-reference/threads) to which this\n   * run belongs.\n   */\n  thread_id: string;\n\n  /**\n   * Body param: A list of tools for which the outputs are being submitted.\n   */\n  tool_outputs: Array<RunSubmitToolOutputsParams.ToolOutput>;\n\n  /**\n   * Body param: If `true`, returns a stream of events that happen during the Run as\n   * server-sent events, terminating when the Run enters a terminal state with a\n   * `data: [DONE]` message.\n   */\n  stream?: boolean | null;\n}\n\nexport namespace RunSubmitToolOutputsParams {\n  export interface ToolOutput {\n    /**\n     * The output of the tool call to be submitted to continue the run.\n     */\n    output?: string;\n\n    /**\n     * The ID of the tool call in the `required_action` object within the run object\n     * the output is being submitted for.\n     */\n    tool_call_id?: string;\n  }\n\n  export type RunSubmitToolOutputsParamsNonStreaming = RunsAPI.RunSubmitToolOutputsParamsNonStreaming;\n  export type RunSubmitToolOutputsParamsStreaming = RunsAPI.RunSubmitToolOutputsParamsStreaming;\n}\n\nexport interface RunSubmitToolOutputsParamsNonStreaming extends RunSubmitToolOutputsParamsBase {\n  /**\n   * Body param: If `true`, returns a stream of events that happen during the Run as\n   * server-sent events, terminating when the Run enters a terminal state with a\n   * `data: [DONE]` message.\n   */\n  stream?: false | null;\n}\n\nexport interface RunSubmitToolOutputsParamsStreaming extends RunSubmitToolOutputsParamsBase {\n  /**\n   * Body param: If `true`, returns a stream of events that happen during the Run as\n   * server-sent events, terminating when the Run enters a terminal state with a\n   * `data: [DONE]` message.\n   */\n  stream: true;\n}\n\nexport type RunSubmitToolOutputsAndPollParams = RunSubmitToolOutputsParamsNonStreaming;\nexport type RunSubmitToolOutputsStreamParams = RunSubmitToolOutputsParamsStream;\n\nRuns.Steps = Steps;\n\nexport declare namespace Runs {\n  export {\n    type RequiredActionFunctionToolCall as RequiredActionFunctionToolCall,\n    type Run as Run,\n    type RunStatus as RunStatus,\n    type RunsPage as RunsPage,\n    type RunCreateParams as RunCreateParams,\n    type RunCreateParamsNonStreaming as RunCreateParamsNonStreaming,\n    type RunCreateParamsStreaming as RunCreateParamsStreaming,\n    type RunRetrieveParams as RunRetrieveParams,\n    type RunUpdateParams as RunUpdateParams,\n    type RunListParams as RunListParams,\n    type RunCreateAndPollParams,\n    type RunCreateAndStreamParams,\n    type RunStreamParams,\n    type RunSubmitToolOutputsParams as RunSubmitToolOutputsParams,\n    type RunSubmitToolOutputsParamsNonStreaming as RunSubmitToolOutputsParamsNonStreaming,\n    type RunSubmitToolOutputsParamsStreaming as RunSubmitToolOutputsParamsStreaming,\n    type RunSubmitToolOutputsAndPollParams,\n    type RunSubmitToolOutputsStreamParams,\n  };\n\n  export {\n    Steps as Steps,\n    type CodeInterpreterLogs as CodeInterpreterLogs,\n    type CodeInterpreterOutputImage as CodeInterpreterOutputImage,\n    type CodeInterpreterToolCall as CodeInterpreterToolCall,\n    type CodeInterpreterToolCallDelta as CodeInterpreterToolCallDelta,\n    type FileSearchToolCall as FileSearchToolCall,\n    type FileSearchToolCallDelta as FileSearchToolCallDelta,\n    type FunctionToolCall as FunctionToolCall,\n    type FunctionToolCallDelta as FunctionToolCallDelta,\n    type MessageCreationStepDetails as MessageCreationStepDetails,\n    type RunStep as RunStep,\n    type RunStepDelta as RunStepDelta,\n    type RunStepDeltaEvent as RunStepDeltaEvent,\n    type RunStepDeltaMessageDelta as RunStepDeltaMessageDelta,\n    type RunStepInclude as RunStepInclude,\n    type ToolCall as ToolCall,\n    type ToolCallDelta as ToolCallDelta,\n    type ToolCallDeltaObject as ToolCallDeltaObject,\n    type ToolCallsStepDetails as ToolCallsStepDetails,\n    type RunStepsPage as RunStepsPage,\n    type StepRetrieveParams as StepRetrieveParams,\n    type StepListParams as StepListParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as ThreadsAPI from './threads';\nimport * as Shared from '../../shared';\nimport * as AssistantsAPI from '../assistants';\nimport * as MessagesAPI from './messages';\nimport {\n  Annotation,\n  AnnotationDelta,\n  FileCitationAnnotation,\n  FileCitationDeltaAnnotation,\n  FilePathAnnotation,\n  FilePathDeltaAnnotation,\n  ImageFile,\n  ImageFileContentBlock,\n  ImageFileDelta,\n  ImageFileDeltaBlock,\n  ImageURL,\n  ImageURLContentBlock,\n  ImageURLDelta,\n  ImageURLDeltaBlock,\n  Message as MessagesAPIMessage,\n  MessageContent,\n  MessageContentDelta,\n  MessageContentPartParam,\n  MessageCreateParams,\n  MessageDeleteParams,\n  MessageDeleted,\n  MessageDelta,\n  MessageDeltaEvent,\n  MessageListParams,\n  MessageRetrieveParams,\n  MessageUpdateParams,\n  Messages,\n  MessagesPage,\n  RefusalContentBlock,\n  RefusalDeltaBlock,\n  Text,\n  TextContentBlock,\n  TextContentBlockParam,\n  TextDelta,\n  TextDeltaBlock,\n} from './messages';\nimport * as RunsAPI from './runs/runs';\nimport {\n  RequiredActionFunctionToolCall,\n  Run,\n  RunCreateAndPollParams,\n  RunCreateAndStreamParams,\n  RunCancelParams,\n  RunCreateParams,\n  RunCreateParamsNonStreaming,\n  RunCreateParamsStreaming,\n  RunListParams,\n  RunRetrieveParams,\n  RunStatus,\n  RunStreamParams,\n  RunSubmitToolOutputsAndPollParams,\n  RunSubmitToolOutputsParams,\n  RunSubmitToolOutputsParamsNonStreaming,\n  RunSubmitToolOutputsParamsStreaming,\n  RunSubmitToolOutputsStreamParams,\n  RunUpdateParams,\n  Runs,\n  RunsPage,\n} from './runs/runs';\nimport { APIPromise } from '../../../core/api-promise';\nimport { Stream } from '../../../core/streaming';\nimport { buildHeaders } from '../../../internal/headers';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { AssistantStream, ThreadCreateAndRunParamsBaseStream } from '../../../lib/AssistantStream';\nimport { path } from '../../../internal/utils/path';\n\n/**\n * Build Assistants that can call models and use tools.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n  runs: RunsAPI.Runs = new RunsAPI.Runs(this._client);\n  messages: MessagesAPI.Messages = new MessagesAPI.Messages(this._client);\n\n  /**\n   * Create a thread.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  create(body: ThreadCreateParams | null | undefined = {}, options?: RequestOptions): APIPromise<Thread> {\n    return this._client.post('/threads', {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves a thread.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  retrieve(threadID: string, options?: RequestOptions): APIPromise<Thread> {\n    return this._client.get(path`/threads/${threadID}`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Modifies a thread.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  update(threadID: string, body: ThreadUpdateParams, options?: RequestOptions): APIPromise<Thread> {\n    return this._client.post(path`/threads/${threadID}`, {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Delete a thread.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  delete(threadID: string, options?: RequestOptions): APIPromise<ThreadDeleted> {\n    return this._client.delete(path`/threads/${threadID}`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Create a thread and run it in one request.\n   *\n   * @deprecated The Assistants API is deprecated in favor of the Responses API\n   */\n  createAndRun(body: ThreadCreateAndRunParamsNonStreaming, options?: RequestOptions): APIPromise<RunsAPI.Run>;\n  createAndRun(\n    body: ThreadCreateAndRunParamsStreaming,\n    options?: RequestOptions,\n  ): APIPromise<Stream<AssistantsAPI.AssistantStreamEvent>>;\n  createAndRun(\n    body: ThreadCreateAndRunParamsBase,\n    options?: RequestOptions,\n  ): APIPromise<Stream<AssistantsAPI.AssistantStreamEvent> | RunsAPI.Run>;\n  createAndRun(\n    body: ThreadCreateAndRunParams,\n    options?: RequestOptions,\n  ): APIPromise<RunsAPI.Run> | APIPromise<Stream<AssistantsAPI.AssistantStreamEvent>> {\n    return this._client.post('/threads/runs', {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      stream: body.stream ?? false,\n      __synthesizeEventData: true,\n      __security: { bearerAuth: true },\n    }) as APIPromise<RunsAPI.Run> | APIPromise<Stream<AssistantsAPI.AssistantStreamEvent>>;\n  }\n\n  /**\n   * A helper to create a thread, start a run and then poll for a terminal state.\n   * More information on Run lifecycles can be found here:\n   * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n   */\n  async createAndRunPoll(\n    body: ThreadCreateAndRunParamsNonStreaming,\n    options?: RequestOptions & { pollIntervalMs?: number },\n  ): Promise<Threads.Run> {\n    const run = await this.createAndRun(body, options);\n    return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n  }\n\n  /**\n   * Create a thread and stream the run back\n   */\n  createAndRunStream(body: ThreadCreateAndRunParamsBaseStream, options?: RequestOptions): AssistantStream {\n    return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n  }\n}\n\n/**\n * Specifies the format that the model must output. Compatible with\n * [GPT-4o](https://platform.openai.com/docs/models#gpt-4o),\n * [GPT-4 Turbo](https://platform.openai.com/docs/models#gpt-4-turbo-and-gpt-4),\n * and all GPT-3.5 Turbo models since `gpt-3.5-turbo-1106`.\n *\n * Setting to `{ \"type\": \"json_schema\", \"json_schema\": {...} }` enables Structured\n * Outputs which ensures the model will match your supplied JSON schema. Learn more\n * in the\n * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n *\n * Setting to `{ \"type\": \"json_object\" }` enables JSON mode, which ensures the\n * message the model generates is valid JSON.\n *\n * **Important:** when using JSON mode, you **must** also instruct the model to\n * produce JSON yourself via a system or user message. Without this, the model may\n * generate an unending stream of whitespace until the generation reaches the token\n * limit, resulting in a long-running and seemingly \"stuck\" request. Also note that\n * the message content may be partially cut off if `finish_reason=\"length\"`, which\n * indicates the generation exceeded `max_tokens` or the conversation exceeded the\n * max context length.\n */\nexport type AssistantResponseFormatOption =\n  | 'auto'\n  | Shared.ResponseFormatText\n  | Shared.ResponseFormatJSONObject\n  | Shared.ResponseFormatJSONSchema;\n\n/**\n * Specifies a tool the model should use. Use to force the model to call a specific\n * tool.\n */\nexport interface AssistantToolChoice {\n  /**\n   * The type of the tool. If type is `function`, the function name must be set\n   */\n  type: 'function' | 'code_interpreter' | 'file_search';\n\n  function?: AssistantToolChoiceFunction;\n}\n\nexport interface AssistantToolChoiceFunction {\n  /**\n   * The name of the function to call.\n   */\n  name: string;\n}\n\n/**\n * Controls which (if any) tool is called by the model. `none` means the model will\n * not call any tools and instead generates a message. `auto` is the default value\n * and means the model can pick between generating a message or calling one or more\n * tools. `required` means the model must call one or more tools before responding\n * to the user. Specifying a particular tool like `{\"type\": \"file_search\"}` or\n * `{\"type\": \"function\", \"function\": {\"name\": \"my_function\"}}` forces the model to\n * call that tool.\n */\nexport type AssistantToolChoiceOption = 'none' | 'auto' | 'required' | AssistantToolChoice;\n\n/**\n * Represents a thread that contains\n * [messages](https://platform.openai.com/docs/api-reference/messages).\n */\nexport interface Thread {\n  /**\n   * The identifier, which can be referenced in API endpoints.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the thread was created.\n   */\n  created_at: number;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n\n  /**\n   * The object type, which is always `thread`.\n   */\n  object: 'thread';\n\n  /**\n   * A set of resources that are made available to the assistant's tools in this\n   * thread. The resources are specific to the type of tool. For example, the\n   * `code_interpreter` tool requires a list of file IDs, while the `file_search`\n   * tool requires a list of vector store IDs.\n   */\n  tool_resources: Thread.ToolResources | null;\n}\n\nexport namespace Thread {\n  /**\n   * A set of resources that are made available to the assistant's tools in this\n   * thread. The resources are specific to the type of tool. For example, the\n   * `code_interpreter` tool requires a list of file IDs, while the `file_search`\n   * tool requires a list of vector store IDs.\n   */\n  export interface ToolResources {\n    code_interpreter?: ToolResources.CodeInterpreter;\n\n    file_search?: ToolResources.FileSearch;\n  }\n\n  export namespace ToolResources {\n    export interface CodeInterpreter {\n      /**\n       * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs made\n       * available to the `code_interpreter` tool. There can be a maximum of 20 files\n       * associated with the tool.\n       */\n      file_ids?: Array<string>;\n    }\n\n    export interface FileSearch {\n      /**\n       * The\n       * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n       * attached to this thread. There can be a maximum of 1 vector store attached to\n       * the thread.\n       */\n      vector_store_ids?: Array<string>;\n    }\n  }\n}\n\nexport interface ThreadDeleted {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'thread.deleted';\n}\n\nexport interface ThreadCreateParams {\n  /**\n   * A list of [messages](https://platform.openai.com/docs/api-reference/messages) to\n   * start the thread with.\n   */\n  messages?: Array<ThreadCreateParams.Message>;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * A set of resources that are made available to the assistant's tools in this\n   * thread. The resources are specific to the type of tool. For example, the\n   * `code_interpreter` tool requires a list of file IDs, while the `file_search`\n   * tool requires a list of vector store IDs.\n   */\n  tool_resources?: ThreadCreateParams.ToolResources | null;\n}\n\nexport namespace ThreadCreateParams {\n  export interface Message {\n    /**\n     * The text contents of the message.\n     */\n    content: string | Array<MessagesAPI.MessageContentPartParam>;\n\n    /**\n     * The role of the entity that is creating the message. Allowed values include:\n     *\n     * - `user`: Indicates the message is sent by an actual user and should be used in\n     *   most cases to represent user-generated messages.\n     * - `assistant`: Indicates the message is generated by the assistant. Use this\n     *   value to insert messages from the assistant into the conversation.\n     */\n    role: 'user' | 'assistant';\n\n    /**\n     * A list of files attached to the message, and the tools they should be added to.\n     */\n    attachments?: Array<Message.Attachment> | null;\n\n    /**\n     * Set of 16 key-value pairs that can be attached to an object. This can be useful\n     * for storing additional information about the object in a structured format, and\n     * querying for objects via API or the dashboard.\n     *\n     * Keys are strings with a maximum length of 64 characters. Values are strings with\n     * a maximum length of 512 characters.\n     */\n    metadata?: Shared.Metadata | null;\n  }\n\n  export namespace Message {\n    export interface Attachment {\n      /**\n       * The ID of the file to attach to the message.\n       */\n      file_id?: string;\n\n      /**\n       * The tools to add this file to.\n       */\n      tools?: Array<AssistantsAPI.CodeInterpreterTool | Attachment.FileSearch>;\n    }\n\n    export namespace Attachment {\n      export interface FileSearch {\n        /**\n         * The type of tool being defined: `file_search`\n         */\n        type: 'file_search';\n      }\n    }\n  }\n\n  /**\n   * A set of resources that are made available to the assistant's tools in this\n   * thread. The resources are specific to the type of tool. For example, the\n   * `code_interpreter` tool requires a list of file IDs, while the `file_search`\n   * tool requires a list of vector store IDs.\n   */\n  export interface ToolResources {\n    code_interpreter?: ToolResources.CodeInterpreter;\n\n    file_search?: ToolResources.FileSearch;\n  }\n\n  export namespace ToolResources {\n    export interface CodeInterpreter {\n      /**\n       * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs made\n       * available to the `code_interpreter` tool. There can be a maximum of 20 files\n       * associated with the tool.\n       */\n      file_ids?: Array<string>;\n    }\n\n    export interface FileSearch {\n      /**\n       * The\n       * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n       * attached to this thread. There can be a maximum of 1 vector store attached to\n       * the thread.\n       */\n      vector_store_ids?: Array<string>;\n\n      /**\n       * A helper to create a\n       * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n       * with file_ids and attach it to this thread. There can be a maximum of 1 vector\n       * store attached to the thread.\n       */\n      vector_stores?: Array<FileSearch.VectorStore>;\n    }\n\n    export namespace FileSearch {\n      export interface VectorStore {\n        /**\n         * The chunking strategy used to chunk the file(s). If not set, will use the `auto`\n         * strategy.\n         */\n        chunking_strategy?: VectorStore.Auto | VectorStore.Static;\n\n        /**\n         * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs to\n         * add to the vector store. For vector stores created before Nov 2025, there can be\n         * a maximum of 10,000 files in a vector store. For vector stores created starting\n         * in Nov 2025, the limit is 100,000,000 files.\n         */\n        file_ids?: Array<string>;\n\n        /**\n         * Set of 16 key-value pairs that can be attached to an object. This can be useful\n         * for storing additional information about the object in a structured format, and\n         * querying for objects via API or the dashboard.\n         *\n         * Keys are strings with a maximum length of 64 characters. Values are strings with\n         * a maximum length of 512 characters.\n         */\n        metadata?: Shared.Metadata | null;\n      }\n\n      export namespace VectorStore {\n        /**\n         * The default strategy. This strategy currently uses a `max_chunk_size_tokens` of\n         * `800` and `chunk_overlap_tokens` of `400`.\n         */\n        export interface Auto {\n          /**\n           * Always `auto`.\n           */\n          type: 'auto';\n        }\n\n        export interface Static {\n          static: Static.Static;\n\n          /**\n           * Always `static`.\n           */\n          type: 'static';\n        }\n\n        export namespace Static {\n          export interface Static {\n            /**\n             * The number of tokens that overlap between chunks. The default value is `400`.\n             *\n             * Note that the overlap must not exceed half of `max_chunk_size_tokens`.\n             */\n            chunk_overlap_tokens: number;\n\n            /**\n             * The maximum number of tokens in each chunk. The default value is `800`. The\n             * minimum value is `100` and the maximum value is `4096`.\n             */\n            max_chunk_size_tokens: number;\n          }\n        }\n      }\n    }\n  }\n}\n\nexport interface ThreadUpdateParams {\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * A set of resources that are made available to the assistant's tools in this\n   * thread. The resources are specific to the type of tool. For example, the\n   * `code_interpreter` tool requires a list of file IDs, while the `file_search`\n   * tool requires a list of vector store IDs.\n   */\n  tool_resources?: ThreadUpdateParams.ToolResources | null;\n}\n\nexport namespace ThreadUpdateParams {\n  /**\n   * A set of resources that are made available to the assistant's tools in this\n   * thread. The resources are specific to the type of tool. For example, the\n   * `code_interpreter` tool requires a list of file IDs, while the `file_search`\n   * tool requires a list of vector store IDs.\n   */\n  export interface ToolResources {\n    code_interpreter?: ToolResources.CodeInterpreter;\n\n    file_search?: ToolResources.FileSearch;\n  }\n\n  export namespace ToolResources {\n    export interface CodeInterpreter {\n      /**\n       * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs made\n       * available to the `code_interpreter` tool. There can be a maximum of 20 files\n       * associated with the tool.\n       */\n      file_ids?: Array<string>;\n    }\n\n    export interface FileSearch {\n      /**\n       * The\n       * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n       * attached to this thread. There can be a maximum of 1 vector store attached to\n       * the thread.\n       */\n      vector_store_ids?: Array<string>;\n    }\n  }\n}\n\nexport type ThreadCreateAndRunParams =\n  | ThreadCreateAndRunParamsNonStreaming\n  | ThreadCreateAndRunParamsStreaming;\n\nexport interface ThreadCreateAndRunParamsBase {\n  /**\n   * The ID of the\n   * [assistant](https://platform.openai.com/docs/api-reference/assistants) to use to\n   * execute this run.\n   */\n  assistant_id: string;\n\n  /**\n   * Override the default system message of the assistant. This is useful for\n   * modifying the behavior on a per-run basis.\n   */\n  instructions?: string | null;\n\n  /**\n   * The maximum number of completion tokens that may be used over the course of the\n   * run. The run will make a best effort to use only the number of completion tokens\n   * specified, across multiple turns of the run. If the run exceeds the number of\n   * completion tokens specified, the run will end with status `incomplete`. See\n   * `incomplete_details` for more info.\n   */\n  max_completion_tokens?: number | null;\n\n  /**\n   * The maximum number of prompt tokens that may be used over the course of the run.\n   * The run will make a best effort to use only the number of prompt tokens\n   * specified, across multiple turns of the run. If the run exceeds the number of\n   * prompt tokens specified, the run will end with status `incomplete`. See\n   * `incomplete_details` for more info.\n   */\n  max_prompt_tokens?: number | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * The ID of the [Model](https://platform.openai.com/docs/api-reference/models) to\n   * be used to execute this run. If a value is provided here, it will override the\n   * model associated with the assistant. If not, the model associated with the\n   * assistant will be used.\n   */\n  model?: (string & {}) | Shared.ChatModel | null;\n\n  /**\n   * Whether to enable\n   * [parallel function calling](https://platform.openai.com/docs/guides/function-calling#configuring-parallel-function-calling)\n   * during tool use.\n   */\n  parallel_tool_calls?: boolean;\n\n  /**\n   * Specifies the format that the model must output. Compatible with\n   * [GPT-4o](https://platform.openai.com/docs/models#gpt-4o),\n   * [GPT-4 Turbo](https://platform.openai.com/docs/models#gpt-4-turbo-and-gpt-4),\n   * and all GPT-3.5 Turbo models since `gpt-3.5-turbo-1106`.\n   *\n   * Setting to `{ \"type\": \"json_schema\", \"json_schema\": {...} }` enables Structured\n   * Outputs which ensures the model will match your supplied JSON schema. Learn more\n   * in the\n   * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n   *\n   * Setting to `{ \"type\": \"json_object\" }` enables JSON mode, which ensures the\n   * message the model generates is valid JSON.\n   *\n   * **Important:** when using JSON mode, you **must** also instruct the model to\n   * produce JSON yourself via a system or user message. Without this, the model may\n   * generate an unending stream of whitespace until the generation reaches the token\n   * limit, resulting in a long-running and seemingly \"stuck\" request. Also note that\n   * the message content may be partially cut off if `finish_reason=\"length\"`, which\n   * indicates the generation exceeded `max_tokens` or the conversation exceeded the\n   * max context length.\n   */\n  response_format?: AssistantResponseFormatOption | null;\n\n  /**\n   * If `true`, returns a stream of events that happen during the Run as server-sent\n   * events, terminating when the Run enters a terminal state with a `data: [DONE]`\n   * message.\n   */\n  stream?: boolean | null;\n\n  /**\n   * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will\n   * make the output more random, while lower values like 0.2 will make it more\n   * focused and deterministic.\n   */\n  temperature?: number | null;\n\n  /**\n   * Options to create a new thread. If no thread is provided when running a request,\n   * an empty thread will be created.\n   */\n  thread?: ThreadCreateAndRunParams.Thread;\n\n  /**\n   * Controls which (if any) tool is called by the model. `none` means the model will\n   * not call any tools and instead generates a message. `auto` is the default value\n   * and means the model can pick between generating a message or calling one or more\n   * tools. `required` means the model must call one or more tools before responding\n   * to the user. Specifying a particular tool like `{\"type\": \"file_search\"}` or\n   * `{\"type\": \"function\", \"function\": {\"name\": \"my_function\"}}` forces the model to\n   * call that tool.\n   */\n  tool_choice?: AssistantToolChoiceOption | null;\n\n  /**\n   * A set of resources that are used by the assistant's tools. The resources are\n   * specific to the type of tool. For example, the `code_interpreter` tool requires\n   * a list of file IDs, while the `file_search` tool requires a list of vector store\n   * IDs.\n   */\n  tool_resources?: ThreadCreateAndRunParams.ToolResources | null;\n\n  /**\n   * Override the tools the assistant can use for this run. This is useful for\n   * modifying the behavior on a per-run basis.\n   */\n  tools?: Array<AssistantsAPI.AssistantTool> | null;\n\n  /**\n   * An alternative to sampling with temperature, called nucleus sampling, where the\n   * model considers the results of the tokens with top_p probability mass. So 0.1\n   * means only the tokens comprising the top 10% probability mass are considered.\n   *\n   * We generally recommend altering this or temperature but not both.\n   */\n  top_p?: number | null;\n\n  /**\n   * Controls for how a thread will be truncated prior to the run. Use this to\n   * control the initial context window of the run.\n   */\n  truncation_strategy?: ThreadCreateAndRunParams.TruncationStrategy | null;\n}\n\nexport namespace ThreadCreateAndRunParams {\n  /**\n   * Options to create a new thread. If no thread is provided when running a request,\n   * an empty thread will be created.\n   */\n  export interface Thread {\n    /**\n     * A list of [messages](https://platform.openai.com/docs/api-reference/messages) to\n     * start the thread with.\n     */\n    messages?: Array<Thread.Message>;\n\n    /**\n     * Set of 16 key-value pairs that can be attached to an object. This can be useful\n     * for storing additional information about the object in a structured format, and\n     * querying for objects via API or the dashboard.\n     *\n     * Keys are strings with a maximum length of 64 characters. Values are strings with\n     * a maximum length of 512 characters.\n     */\n    metadata?: Shared.Metadata | null;\n\n    /**\n     * A set of resources that are made available to the assistant's tools in this\n     * thread. The resources are specific to the type of tool. For example, the\n     * `code_interpreter` tool requires a list of file IDs, while the `file_search`\n     * tool requires a list of vector store IDs.\n     */\n    tool_resources?: Thread.ToolResources | null;\n  }\n\n  export namespace Thread {\n    export interface Message {\n      /**\n       * The text contents of the message.\n       */\n      content: string | Array<MessagesAPI.MessageContentPartParam>;\n\n      /**\n       * The role of the entity that is creating the message. Allowed values include:\n       *\n       * - `user`: Indicates the message is sent by an actual user and should be used in\n       *   most cases to represent user-generated messages.\n       * - `assistant`: Indicates the message is generated by the assistant. Use this\n       *   value to insert messages from the assistant into the conversation.\n       */\n      role: 'user' | 'assistant';\n\n      /**\n       * A list of files attached to the message, and the tools they should be added to.\n       */\n      attachments?: Array<Message.Attachment> | null;\n\n      /**\n       * Set of 16 key-value pairs that can be attached to an object. This can be useful\n       * for storing additional information about the object in a structured format, and\n       * querying for objects via API or the dashboard.\n       *\n       * Keys are strings with a maximum length of 64 characters. Values are strings with\n       * a maximum length of 512 characters.\n       */\n      metadata?: Shared.Metadata | null;\n    }\n\n    export namespace Message {\n      export interface Attachment {\n        /**\n         * The ID of the file to attach to the message.\n         */\n        file_id?: string;\n\n        /**\n         * The tools to add this file to.\n         */\n        tools?: Array<AssistantsAPI.CodeInterpreterTool | Attachment.FileSearch>;\n      }\n\n      export namespace Attachment {\n        export interface FileSearch {\n          /**\n           * The type of tool being defined: `file_search`\n           */\n          type: 'file_search';\n        }\n      }\n    }\n\n    /**\n     * A set of resources that are made available to the assistant's tools in this\n     * thread. The resources are specific to the type of tool. For example, the\n     * `code_interpreter` tool requires a list of file IDs, while the `file_search`\n     * tool requires a list of vector store IDs.\n     */\n    export interface ToolResources {\n      code_interpreter?: ToolResources.CodeInterpreter;\n\n      file_search?: ToolResources.FileSearch;\n    }\n\n    export namespace ToolResources {\n      export interface CodeInterpreter {\n        /**\n         * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs made\n         * available to the `code_interpreter` tool. There can be a maximum of 20 files\n         * associated with the tool.\n         */\n        file_ids?: Array<string>;\n      }\n\n      export interface FileSearch {\n        /**\n         * The\n         * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n         * attached to this thread. There can be a maximum of 1 vector store attached to\n         * the thread.\n         */\n        vector_store_ids?: Array<string>;\n\n        /**\n         * A helper to create a\n         * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n         * with file_ids and attach it to this thread. There can be a maximum of 1 vector\n         * store attached to the thread.\n         */\n        vector_stores?: Array<FileSearch.VectorStore>;\n      }\n\n      export namespace FileSearch {\n        export interface VectorStore {\n          /**\n           * The chunking strategy used to chunk the file(s). If not set, will use the `auto`\n           * strategy.\n           */\n          chunking_strategy?: VectorStore.Auto | VectorStore.Static;\n\n          /**\n           * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs to\n           * add to the vector store. For vector stores created before Nov 2025, there can be\n           * a maximum of 10,000 files in a vector store. For vector stores created starting\n           * in Nov 2025, the limit is 100,000,000 files.\n           */\n          file_ids?: Array<string>;\n\n          /**\n           * Set of 16 key-value pairs that can be attached to an object. This can be useful\n           * for storing additional information about the object in a structured format, and\n           * querying for objects via API or the dashboard.\n           *\n           * Keys are strings with a maximum length of 64 characters. Values are strings with\n           * a maximum length of 512 characters.\n           */\n          metadata?: Shared.Metadata | null;\n        }\n\n        export namespace VectorStore {\n          /**\n           * The default strategy. This strategy currently uses a `max_chunk_size_tokens` of\n           * `800` and `chunk_overlap_tokens` of `400`.\n           */\n          export interface Auto {\n            /**\n             * Always `auto`.\n             */\n            type: 'auto';\n          }\n\n          export interface Static {\n            static: Static.Static;\n\n            /**\n             * Always `static`.\n             */\n            type: 'static';\n          }\n\n          export namespace Static {\n            export interface Static {\n              /**\n               * The number of tokens that overlap between chunks. The default value is `400`.\n               *\n               * Note that the overlap must not exceed half of `max_chunk_size_tokens`.\n               */\n              chunk_overlap_tokens: number;\n\n              /**\n               * The maximum number of tokens in each chunk. The default value is `800`. The\n               * minimum value is `100` and the maximum value is `4096`.\n               */\n              max_chunk_size_tokens: number;\n            }\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * A set of resources that are used by the assistant's tools. The resources are\n   * specific to the type of tool. For example, the `code_interpreter` tool requires\n   * a list of file IDs, while the `file_search` tool requires a list of vector store\n   * IDs.\n   */\n  export interface ToolResources {\n    code_interpreter?: ToolResources.CodeInterpreter;\n\n    file_search?: ToolResources.FileSearch;\n  }\n\n  export namespace ToolResources {\n    export interface CodeInterpreter {\n      /**\n       * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs made\n       * available to the `code_interpreter` tool. There can be a maximum of 20 files\n       * associated with the tool.\n       */\n      file_ids?: Array<string>;\n    }\n\n    export interface FileSearch {\n      /**\n       * The ID of the\n       * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n       * attached to this assistant. There can be a maximum of 1 vector store attached to\n       * the assistant.\n       */\n      vector_store_ids?: Array<string>;\n    }\n  }\n\n  /**\n   * Controls for how a thread will be truncated prior to the run. Use this to\n   * control the initial context window of the run.\n   */\n  export interface TruncationStrategy {\n    /**\n     * The truncation strategy to use for the thread. The default is `auto`. If set to\n     * `last_messages`, the thread will be truncated to the n most recent messages in\n     * the thread. When set to `auto`, messages in the middle of the thread will be\n     * dropped to fit the context length of the model, `max_prompt_tokens`.\n     */\n    type: 'auto' | 'last_messages';\n\n    /**\n     * The number of most recent messages from the thread when constructing the context\n     * for the run.\n     */\n    last_messages?: number | null;\n  }\n\n  export type ThreadCreateAndRunParamsNonStreaming = ThreadsAPI.ThreadCreateAndRunParamsNonStreaming;\n  export type ThreadCreateAndRunParamsStreaming = ThreadsAPI.ThreadCreateAndRunParamsStreaming;\n}\n\nexport interface ThreadCreateAndRunParamsNonStreaming extends ThreadCreateAndRunParamsBase {\n  /**\n   * If `true`, returns a stream of events that happen during the Run as server-sent\n   * events, terminating when the Run enters a terminal state with a `data: [DONE]`\n   * message.\n   */\n  stream?: false | null;\n}\n\nexport interface ThreadCreateAndRunParamsStreaming extends ThreadCreateAndRunParamsBase {\n  /**\n   * If `true`, returns a stream of events that happen during the Run as server-sent\n   * events, terminating when the Run enters a terminal state with a `data: [DONE]`\n   * message.\n   */\n  stream: true;\n}\n\nexport interface ThreadCreateAndRunPollParams {\n  /**\n   * The ID of the\n   * [assistant](https://platform.openai.com/docs/api-reference/assistants) to use to\n   * execute this run.\n   */\n  assistant_id: string;\n\n  /**\n   * Override the default system message of the assistant. This is useful for\n   * modifying the behavior on a per-run basis.\n   */\n  instructions?: string | null;\n\n  /**\n   * The maximum number of completion tokens that may be used over the course of the\n   * run. The run will make a best effort to use only the number of completion tokens\n   * specified, across multiple turns of the run. If the run exceeds the number of\n   * completion tokens specified, the run will end with status `incomplete`. See\n   * `incomplete_details` for more info.\n   */\n  max_completion_tokens?: number | null;\n\n  /**\n   * The maximum number of prompt tokens that may be used over the course of the run.\n   * The run will make a best effort to use only the number of prompt tokens\n   * specified, across multiple turns of the run. If the run exceeds the number of\n   * prompt tokens specified, the run will end with status `incomplete`. See\n   * `incomplete_details` for more info.\n   */\n  max_prompt_tokens?: number | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format. Keys\n   * can be a maximum of 64 characters long and values can be a maxium of 512\n   * characters long.\n   */\n  metadata?: unknown | null;\n\n  /**\n   * The ID of the [Model](https://platform.openai.com/docs/api-reference/models) to\n   * be used to execute this run. If a value is provided here, it will override the\n   * model associated with the assistant. If not, the model associated with the\n   * assistant will be used.\n   */\n  model?:\n    | (string & {})\n    | 'gpt-4o'\n    | 'gpt-4o-2024-05-13'\n    | 'gpt-4-turbo'\n    | 'gpt-4-turbo-2024-04-09'\n    | 'gpt-4-0125-preview'\n    | 'gpt-4-turbo-preview'\n    | 'gpt-4-1106-preview'\n    | 'gpt-4-vision-preview'\n    | 'gpt-4'\n    | 'gpt-4-0314'\n    | 'gpt-4-0613'\n    | 'gpt-4-32k'\n    | 'gpt-4-32k-0314'\n    | 'gpt-4-32k-0613'\n    | 'gpt-3.5-turbo'\n    | 'gpt-3.5-turbo-16k'\n    | 'gpt-3.5-turbo-0613'\n    | 'gpt-3.5-turbo-1106'\n    | 'gpt-3.5-turbo-0125'\n    | 'gpt-3.5-turbo-16k-0613'\n    | null;\n\n  /**\n   * Specifies the format that the model must output. Compatible with\n   * [GPT-4o](https://platform.openai.com/docs/models/gpt-4o),\n   * [GPT-4 Turbo](https://platform.openai.com/docs/models/gpt-4-turbo-and-gpt-4),\n   * and all GPT-3.5 Turbo models since `gpt-3.5-turbo-1106`.\n   *\n   * Setting to `{ \"type\": \"json_object\" }` enables JSON mode, which guarantees the\n   * message the model generates is valid JSON.\n   *\n   * **Important:** when using JSON mode, you **must** also instruct the model to\n   * produce JSON yourself via a system or user message. Without this, the model may\n   * generate an unending stream of whitespace until the generation reaches the token\n   * limit, resulting in a long-running and seemingly \"stuck\" request. Also note that\n   * the message content may be partially cut off if `finish_reason=\"length\"`, which\n   * indicates the generation exceeded `max_tokens` or the conversation exceeded the\n   * max context length.\n   */\n  response_format?: AssistantResponseFormatOption | null;\n\n  /**\n   * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will\n   * make the output more random, while lower values like 0.2 will make it more\n   * focused and deterministic.\n   */\n  temperature?: number | null;\n\n  /**\n   * If no thread is provided, an empty thread will be created.\n   */\n  thread?: ThreadCreateAndRunPollParams.Thread;\n\n  /**\n   * Controls which (if any) tool is called by the model. `none` means the model will\n   * not call any tools and instead generates a message. `auto` is the default value\n   * and means the model can pick between generating a message or calling one or more\n   * tools. `required` means the model must call one or more tools before responding\n   * to the user. Specifying a particular tool like `{\"type\": \"file_search\"}` or\n   * `{\"type\": \"function\", \"function\": {\"name\": \"my_function\"}}` forces the model to\n   * call that tool.\n   */\n  tool_choice?: AssistantToolChoiceOption | null;\n\n  /**\n   * A set of resources that are used by the assistant's tools. The resources are\n   * specific to the type of tool. For example, the `code_interpreter` tool requires\n   * a list of file IDs, while the `file_search` tool requires a list of vector store\n   * IDs.\n   */\n  tool_resources?: ThreadCreateAndRunPollParams.ToolResources | null;\n\n  /**\n   * Override the tools the assistant can use for this run. This is useful for\n   * modifying the behavior on a per-run basis.\n   */\n  tools?: Array<\n    AssistantsAPI.CodeInterpreterTool | AssistantsAPI.FileSearchTool | AssistantsAPI.FunctionTool\n  > | null;\n\n  /**\n   * An alternative to sampling with temperature, called nucleus sampling, where the\n   * model considers the results of the tokens with top_p probability mass. So 0.1\n   * means only the tokens comprising the top 10% probability mass are considered.\n   *\n   * We generally recommend altering this or temperature but not both.\n   */\n  top_p?: number | null;\n\n  /**\n   * Controls for how a thread will be truncated prior to the run. Use this to\n   * control the intial context window of the run.\n   */\n  truncation_strategy?: ThreadCreateAndRunPollParams.TruncationStrategy | null;\n}\n\nexport namespace ThreadCreateAndRunPollParams {\n  /**\n   * If no thread is provided, an empty thread will be created.\n   */\n  export interface Thread {\n    /**\n     * A list of [messages](https://platform.openai.com/docs/api-reference/messages) to\n     * start the thread with.\n     */\n    messages?: Array<Thread.Message>;\n\n    /**\n     * Set of 16 key-value pairs that can be attached to an object. This can be useful\n     * for storing additional information about the object in a structured format. Keys\n     * can be a maximum of 64 characters long and values can be a maxium of 512\n     * characters long.\n     */\n    metadata?: unknown | null;\n\n    /**\n     * A set of resources that are made available to the assistant's tools in this\n     * thread. The resources are specific to the type of tool. For example, the\n     * `code_interpreter` tool requires a list of file IDs, while the `file_search`\n     * tool requires a list of vector store IDs.\n     */\n    tool_resources?: Thread.ToolResources | null;\n  }\n\n  export namespace Thread {\n    export interface Message {\n      /**\n       * The text contents of the message.\n       */\n      content: string | Array<MessagesAPI.MessageContentPartParam>;\n\n      /**\n       * The role of the entity that is creating the message. Allowed values include:\n       *\n       * - `user`: Indicates the message is sent by an actual user and should be used in\n       *   most cases to represent user-generated messages.\n       * - `assistant`: Indicates the message is generated by the assistant. Use this\n       *   value to insert messages from the assistant into the conversation.\n       */\n      role: 'user' | 'assistant';\n\n      /**\n       * A list of files attached to the message, and the tools they should be added to.\n       */\n      attachments?: Array<Message.Attachment> | null;\n\n      /**\n       * Set of 16 key-value pairs that can be attached to an object. This can be useful\n       * for storing additional information about the object in a structured format. Keys\n       * can be a maximum of 64 characters long and values can be a maxium of 512\n       * characters long.\n       */\n      metadata?: unknown | null;\n    }\n\n    export namespace Message {\n      export interface Attachment {\n        /**\n         * The ID of the file to attach to the message.\n         */\n        file_id?: string;\n\n        /**\n         * The tools to add this file to.\n         */\n        tools?: Array<AssistantsAPI.CodeInterpreterTool | AssistantsAPI.FileSearchTool>;\n      }\n    }\n\n    /**\n     * A set of resources that are made available to the assistant's tools in this\n     * thread. The resources are specific to the type of tool. For example, the\n     * `code_interpreter` tool requires a list of file IDs, while the `file_search`\n     * tool requires a list of vector store IDs.\n     */\n    export interface ToolResources {\n      code_interpreter?: ToolResources.CodeInterpreter;\n\n      file_search?: ToolResources.FileSearch;\n    }\n\n    export namespace ToolResources {\n      export interface CodeInterpreter {\n        /**\n         * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs made\n         * available to the `code_interpreter` tool. There can be a maximum of 20 files\n         * associated with the tool.\n         */\n        file_ids?: Array<string>;\n      }\n\n      export interface FileSearch {\n        /**\n         * The\n         * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n         * attached to this thread. There can be a maximum of 1 vector store attached to\n         * the thread.\n         */\n        vector_store_ids?: Array<string>;\n\n        /**\n         * A helper to create a\n         * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n         * with file_ids and attach it to this thread. There can be a maximum of 1 vector\n         * store attached to the thread.\n         */\n        vector_stores?: Array<FileSearch.VectorStore>;\n      }\n\n      export namespace FileSearch {\n        export interface VectorStore {\n          /**\n           * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs to\n           * add to the vector store. There can be a maximum of 10000 files in a vector\n           * store.\n           */\n          file_ids?: Array<string>;\n\n          /**\n           * Set of 16 key-value pairs that can be attached to a vector store. This can be\n           * useful for storing additional information about the vector store in a structured\n           * format. Keys can be a maximum of 64 characters long and values can be a maxium\n           * of 512 characters long.\n           */\n          metadata?: unknown;\n        }\n      }\n    }\n  }\n\n  /**\n   * A set of resources that are used by the assistant's tools. The resources are\n   * specific to the type of tool. For example, the `code_interpreter` tool requires\n   * a list of file IDs, while the `file_search` tool requires a list of vector store\n   * IDs.\n   */\n  export interface ToolResources {\n    code_interpreter?: ToolResources.CodeInterpreter;\n\n    file_search?: ToolResources.FileSearch;\n  }\n\n  export namespace ToolResources {\n    export interface CodeInterpreter {\n      /**\n       * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs made\n       * available to the `code_interpreter` tool. There can be a maximum of 20 files\n       * associated with the tool.\n       */\n      file_ids?: Array<string>;\n    }\n\n    export interface FileSearch {\n      /**\n       * The ID of the\n       * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n       * attached to this assistant. There can be a maximum of 1 vector store attached to\n       * the assistant.\n       */\n      vector_store_ids?: Array<string>;\n    }\n  }\n\n  /**\n   * Controls for how a thread will be truncated prior to the run. Use this to\n   * control the intial context window of the run.\n   */\n  export interface TruncationStrategy {\n    /**\n     * The truncation strategy to use for the thread. The default is `auto`. If set to\n     * `last_messages`, the thread will be truncated to the n most recent messages in\n     * the thread. When set to `auto`, messages in the middle of the thread will be\n     * dropped to fit the context length of the model, `max_prompt_tokens`.\n     */\n    type: 'auto' | 'last_messages';\n\n    /**\n     * The number of most recent messages from the thread when constructing the context\n     * for the run.\n     */\n    last_messages?: number | null;\n  }\n}\n\nexport type ThreadCreateAndRunStreamParams = ThreadCreateAndRunParamsBaseStream;\n\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n\nexport declare namespace Threads {\n  export {\n    type AssistantResponseFormatOption as AssistantResponseFormatOption,\n    type AssistantToolChoice as AssistantToolChoice,\n    type AssistantToolChoiceFunction as AssistantToolChoiceFunction,\n    type AssistantToolChoiceOption as AssistantToolChoiceOption,\n    type Thread as Thread,\n    type ThreadDeleted as ThreadDeleted,\n    type ThreadCreateParams as ThreadCreateParams,\n    type ThreadUpdateParams as ThreadUpdateParams,\n    type ThreadCreateAndRunParams as ThreadCreateAndRunParams,\n    type ThreadCreateAndRunParamsNonStreaming as ThreadCreateAndRunParamsNonStreaming,\n    type ThreadCreateAndRunParamsStreaming as ThreadCreateAndRunParamsStreaming,\n    type ThreadCreateAndRunPollParams,\n    type ThreadCreateAndRunStreamParams,\n  };\n\n  export {\n    Runs as Runs,\n    type RequiredActionFunctionToolCall as RequiredActionFunctionToolCall,\n    type Run as Run,\n    type RunStatus as RunStatus,\n    type RunsPage as RunsPage,\n    type RunCreateParams as RunCreateParams,\n    type RunCreateParamsNonStreaming as RunCreateParamsNonStreaming,\n    type RunCreateParamsStreaming as RunCreateParamsStreaming,\n    type RunRetrieveParams as RunRetrieveParams,\n    type RunUpdateParams as RunUpdateParams,\n    type RunListParams as RunListParams,\n    type RunCancelParams as RunCancelParams,\n    type RunCreateAndPollParams,\n    type RunCreateAndStreamParams,\n    type RunStreamParams,\n    type RunSubmitToolOutputsParams as RunSubmitToolOutputsParams,\n    type RunSubmitToolOutputsParamsNonStreaming as RunSubmitToolOutputsParamsNonStreaming,\n    type RunSubmitToolOutputsParamsStreaming as RunSubmitToolOutputsParamsStreaming,\n    type RunSubmitToolOutputsAndPollParams,\n    type RunSubmitToolOutputsStreamParams,\n  };\n\n  export {\n    Messages as Messages,\n    type Annotation as Annotation,\n    type AnnotationDelta as AnnotationDelta,\n    type FileCitationAnnotation as FileCitationAnnotation,\n    type FileCitationDeltaAnnotation as FileCitationDeltaAnnotation,\n    type FilePathAnnotation as FilePathAnnotation,\n    type FilePathDeltaAnnotation as FilePathDeltaAnnotation,\n    type ImageFile as ImageFile,\n    type ImageFileContentBlock as ImageFileContentBlock,\n    type ImageFileDelta as ImageFileDelta,\n    type ImageFileDeltaBlock as ImageFileDeltaBlock,\n    type ImageURL as ImageURL,\n    type ImageURLContentBlock as ImageURLContentBlock,\n    type ImageURLDelta as ImageURLDelta,\n    type ImageURLDeltaBlock as ImageURLDeltaBlock,\n    type MessagesAPIMessage as Message,\n    type MessageContent as MessageContent,\n    type MessageContentDelta as MessageContentDelta,\n    type MessageContentPartParam as MessageContentPartParam,\n    type MessageDeleted as MessageDeleted,\n    type MessageDelta as MessageDelta,\n    type MessageDeltaEvent as MessageDeltaEvent,\n    type RefusalContentBlock as RefusalContentBlock,\n    type RefusalDeltaBlock as RefusalDeltaBlock,\n    type Text as Text,\n    type TextContentBlock as TextContentBlock,\n    type TextContentBlockParam as TextContentBlockParam,\n    type TextDelta as TextDelta,\n    type TextDeltaBlock as TextDeltaBlock,\n    type MessagesPage as MessagesPage,\n    type MessageCreateParams as MessageCreateParams,\n    type MessageRetrieveParams as MessageRetrieveParams,\n    type MessageUpdateParams as MessageUpdateParams,\n    type MessageListParams as MessageListParams,\n    type MessageDeleteParams as MessageDeleteParams,\n  };\n\n  export { AssistantStream };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as AssistantsAPI from './assistants';\nimport {\n  Assistant,\n  AssistantCreateParams,\n  AssistantDeleted,\n  AssistantListParams,\n  AssistantStreamEvent,\n  AssistantTool,\n  AssistantUpdateParams,\n  Assistants,\n  AssistantsPage,\n  CodeInterpreterTool,\n  FileSearchTool,\n  FunctionTool,\n  MessageStreamEvent,\n  RunStepStreamEvent,\n  RunStreamEvent,\n  ThreadStreamEvent,\n} from './assistants';\nimport * as RealtimeAPI from './realtime/realtime';\nimport {\n  ConversationCreatedEvent,\n  ConversationItem,\n  ConversationItemContent,\n  ConversationItemCreateEvent,\n  ConversationItemCreatedEvent,\n  ConversationItemDeleteEvent,\n  ConversationItemDeletedEvent,\n  ConversationItemInputAudioTranscriptionCompletedEvent,\n  ConversationItemInputAudioTranscriptionDeltaEvent,\n  ConversationItemInputAudioTranscriptionFailedEvent,\n  ConversationItemRetrieveEvent,\n  ConversationItemTruncateEvent,\n  ConversationItemTruncatedEvent,\n  ConversationItemWithReference,\n  ErrorEvent,\n  InputAudioBufferAppendEvent,\n  InputAudioBufferClearEvent,\n  InputAudioBufferClearedEvent,\n  InputAudioBufferCommitEvent,\n  InputAudioBufferCommittedEvent,\n  InputAudioBufferSpeechStartedEvent,\n  InputAudioBufferSpeechStoppedEvent,\n  RateLimitsUpdatedEvent,\n  Realtime,\n  RealtimeClientEvent,\n  RealtimeResponse,\n  RealtimeResponseStatus,\n  RealtimeResponseUsage,\n  RealtimeServerEvent,\n  ResponseAudioDeltaEvent,\n  ResponseAudioDoneEvent,\n  ResponseAudioTranscriptDeltaEvent,\n  ResponseAudioTranscriptDoneEvent,\n  ResponseCancelEvent,\n  ResponseContentPartAddedEvent,\n  ResponseContentPartDoneEvent,\n  ResponseCreateEvent,\n  ResponseCreatedEvent,\n  ResponseDoneEvent,\n  ResponseFunctionCallArgumentsDeltaEvent,\n  ResponseFunctionCallArgumentsDoneEvent,\n  ResponseOutputItemAddedEvent,\n  ResponseOutputItemDoneEvent,\n  ResponseTextDeltaEvent,\n  ResponseTextDoneEvent,\n  SessionCreatedEvent,\n  SessionUpdateEvent,\n  SessionUpdatedEvent,\n  TranscriptionSessionUpdate,\n  TranscriptionSessionUpdatedEvent,\n} from './realtime/realtime';\nimport * as ChatKitAPI from './chatkit/chatkit';\nimport { ChatKit, ChatKitWorkflow } from './chatkit/chatkit';\nimport * as ThreadsAPI from './threads/threads';\nimport {\n  AssistantResponseFormatOption,\n  AssistantToolChoice,\n  AssistantToolChoiceFunction,\n  AssistantToolChoiceOption,\n  Thread,\n  ThreadCreateAndRunParams,\n  ThreadCreateAndRunParamsNonStreaming,\n  ThreadCreateAndRunParamsStreaming,\n  ThreadCreateAndRunPollParams,\n  ThreadCreateAndRunStreamParams,\n  ThreadCreateParams,\n  ThreadDeleted,\n  ThreadUpdateParams,\n  Threads,\n} from './threads/threads';\n\nexport class Beta extends APIResource {\n  realtime: RealtimeAPI.Realtime = new RealtimeAPI.Realtime(this._client);\n  chatkit: ChatKitAPI.ChatKit = new ChatKitAPI.ChatKit(this._client);\n  assistants: AssistantsAPI.Assistants = new AssistantsAPI.Assistants(this._client);\n  threads: ThreadsAPI.Threads = new ThreadsAPI.Threads(this._client);\n}\n\nBeta.Realtime = Realtime;\nBeta.ChatKit = ChatKit;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n\nexport declare namespace Beta {\n  export {\n    Realtime as Realtime,\n    type ConversationCreatedEvent as ConversationCreatedEvent,\n    type ConversationItem as ConversationItem,\n    type ConversationItemContent as ConversationItemContent,\n    type ConversationItemCreateEvent as ConversationItemCreateEvent,\n    type ConversationItemCreatedEvent as ConversationItemCreatedEvent,\n    type ConversationItemDeleteEvent as ConversationItemDeleteEvent,\n    type ConversationItemDeletedEvent as ConversationItemDeletedEvent,\n    type ConversationItemInputAudioTranscriptionCompletedEvent as ConversationItemInputAudioTranscriptionCompletedEvent,\n    type ConversationItemInputAudioTranscriptionDeltaEvent as ConversationItemInputAudioTranscriptionDeltaEvent,\n    type ConversationItemInputAudioTranscriptionFailedEvent as ConversationItemInputAudioTranscriptionFailedEvent,\n    type ConversationItemRetrieveEvent as ConversationItemRetrieveEvent,\n    type ConversationItemTruncateEvent as ConversationItemTruncateEvent,\n    type ConversationItemTruncatedEvent as ConversationItemTruncatedEvent,\n    type ConversationItemWithReference as ConversationItemWithReference,\n    type ErrorEvent as ErrorEvent,\n    type InputAudioBufferAppendEvent as InputAudioBufferAppendEvent,\n    type InputAudioBufferClearEvent as InputAudioBufferClearEvent,\n    type InputAudioBufferClearedEvent as InputAudioBufferClearedEvent,\n    type InputAudioBufferCommitEvent as InputAudioBufferCommitEvent,\n    type InputAudioBufferCommittedEvent as InputAudioBufferCommittedEvent,\n    type InputAudioBufferSpeechStartedEvent as InputAudioBufferSpeechStartedEvent,\n    type InputAudioBufferSpeechStoppedEvent as InputAudioBufferSpeechStoppedEvent,\n    type RateLimitsUpdatedEvent as RateLimitsUpdatedEvent,\n    type RealtimeClientEvent as RealtimeClientEvent,\n    type RealtimeResponse as RealtimeResponse,\n    type RealtimeResponseStatus as RealtimeResponseStatus,\n    type RealtimeResponseUsage as RealtimeResponseUsage,\n    type RealtimeServerEvent as RealtimeServerEvent,\n    type ResponseAudioDeltaEvent as ResponseAudioDeltaEvent,\n    type ResponseAudioDoneEvent as ResponseAudioDoneEvent,\n    type ResponseAudioTranscriptDeltaEvent as ResponseAudioTranscriptDeltaEvent,\n    type ResponseAudioTranscriptDoneEvent as ResponseAudioTranscriptDoneEvent,\n    type ResponseCancelEvent as ResponseCancelEvent,\n    type ResponseContentPartAddedEvent as ResponseContentPartAddedEvent,\n    type ResponseContentPartDoneEvent as ResponseContentPartDoneEvent,\n    type ResponseCreateEvent as ResponseCreateEvent,\n    type ResponseCreatedEvent as ResponseCreatedEvent,\n    type ResponseDoneEvent as ResponseDoneEvent,\n    type ResponseFunctionCallArgumentsDeltaEvent as ResponseFunctionCallArgumentsDeltaEvent,\n    type ResponseFunctionCallArgumentsDoneEvent as ResponseFunctionCallArgumentsDoneEvent,\n    type ResponseOutputItemAddedEvent as ResponseOutputItemAddedEvent,\n    type ResponseOutputItemDoneEvent as ResponseOutputItemDoneEvent,\n    type ResponseTextDeltaEvent as ResponseTextDeltaEvent,\n    type ResponseTextDoneEvent as ResponseTextDoneEvent,\n    type SessionCreatedEvent as SessionCreatedEvent,\n    type SessionUpdateEvent as SessionUpdateEvent,\n    type SessionUpdatedEvent as SessionUpdatedEvent,\n    type TranscriptionSessionUpdate as TranscriptionSessionUpdate,\n    type TranscriptionSessionUpdatedEvent as TranscriptionSessionUpdatedEvent,\n    ChatKit as ChatKit,\n    type ChatKitWorkflow as ChatKitWorkflow,\n  };\n\n  export {\n    Assistants as Assistants,\n    type Assistant as Assistant,\n    type AssistantDeleted as AssistantDeleted,\n    type AssistantStreamEvent as AssistantStreamEvent,\n    type AssistantTool as AssistantTool,\n    type CodeInterpreterTool as CodeInterpreterTool,\n    type FileSearchTool as FileSearchTool,\n    type FunctionTool as FunctionTool,\n    type MessageStreamEvent as MessageStreamEvent,\n    type RunStepStreamEvent as RunStepStreamEvent,\n    type RunStreamEvent as RunStreamEvent,\n    type ThreadStreamEvent as ThreadStreamEvent,\n    type AssistantsPage as AssistantsPage,\n    type AssistantCreateParams as AssistantCreateParams,\n    type AssistantUpdateParams as AssistantUpdateParams,\n    type AssistantListParams as AssistantListParams,\n  };\n\n  export {\n    Threads as Threads,\n    type AssistantResponseFormatOption as AssistantResponseFormatOption,\n    type AssistantToolChoice as AssistantToolChoice,\n    type AssistantToolChoiceFunction as AssistantToolChoiceFunction,\n    type AssistantToolChoiceOption as AssistantToolChoiceOption,\n    type Thread as Thread,\n    type ThreadDeleted as ThreadDeleted,\n    type ThreadCreateParams as ThreadCreateParams,\n    type ThreadUpdateParams as ThreadUpdateParams,\n    type ThreadCreateAndRunParams as ThreadCreateAndRunParams,\n    type ThreadCreateAndRunParamsNonStreaming as ThreadCreateAndRunParamsNonStreaming,\n    type ThreadCreateAndRunParamsStreaming as ThreadCreateAndRunParamsStreaming,\n    type ThreadCreateAndRunPollParams,\n    type ThreadCreateAndRunStreamParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../core/resource';\nimport * as CompletionsAPI from './completions';\nimport * as ChatCompletionsAPI from './chat/completions/completions';\nimport { APIPromise } from '../core/api-promise';\nimport { Stream } from '../core/streaming';\nimport { RequestOptions } from '../internal/request-options';\n\n/**\n * Given a prompt, the model will return one or more predicted completions, and can also return the probabilities of alternative tokens at each position.\n */\nexport class Completions extends APIResource {\n  /**\n   * Creates a completion for the provided prompt and parameters.\n   *\n   * Returns a completion object, or a sequence of completion objects if the request\n   * is streamed.\n   *\n   * @example\n   * ```ts\n   * const completion = await client.completions.create({\n   *   model: 'gpt-3.5-turbo-instruct',\n   *   prompt: 'This is a test.',\n   * });\n   * ```\n   */\n  create(body: CompletionCreateParamsNonStreaming, options?: RequestOptions): APIPromise<Completion>;\n  create(body: CompletionCreateParamsStreaming, options?: RequestOptions): APIPromise<Stream<Completion>>;\n  create(\n    body: CompletionCreateParamsBase,\n    options?: RequestOptions,\n  ): APIPromise<Stream<Completion> | Completion>;\n  create(\n    body: CompletionCreateParams,\n    options?: RequestOptions,\n  ): APIPromise<Completion> | APIPromise<Stream<Completion>> {\n    return this._client.post('/completions', {\n      body,\n      ...options,\n      stream: body.stream ?? false,\n      __security: { bearerAuth: true },\n    }) as APIPromise<Completion> | APIPromise<Stream<Completion>>;\n  }\n}\n\n/**\n * Represents a completion response from the API. Note: both the streamed and\n * non-streamed response objects share the same shape (unlike the chat endpoint).\n */\nexport interface Completion {\n  /**\n   * A unique identifier for the completion.\n   */\n  id: string;\n\n  /**\n   * The list of completion choices the model generated for the input prompt.\n   */\n  choices: Array<CompletionChoice>;\n\n  /**\n   * The Unix timestamp (in seconds) of when the completion was created.\n   */\n  created: number;\n\n  /**\n   * The model used for completion.\n   */\n  model: string;\n\n  /**\n   * The object type, which is always \"text_completion\"\n   */\n  object: 'text_completion';\n\n  /**\n   * This fingerprint represents the backend configuration that the model runs with.\n   *\n   * Can be used in conjunction with the `seed` request parameter to understand when\n   * backend changes have been made that might impact determinism.\n   */\n  system_fingerprint?: string;\n\n  /**\n   * Usage statistics for the completion request.\n   */\n  usage?: CompletionUsage;\n}\n\nexport interface CompletionChoice {\n  /**\n   * The reason the model stopped generating tokens. This will be `stop` if the model\n   * hit a natural stop point or a provided stop sequence, `length` if the maximum\n   * number of tokens specified in the request was reached, or `content_filter` if\n   * content was omitted due to a flag from our content filters.\n   */\n  finish_reason: 'stop' | 'length' | 'content_filter';\n\n  index: number;\n\n  logprobs: CompletionChoice.Logprobs | null;\n\n  text: string;\n}\n\nexport namespace CompletionChoice {\n  export interface Logprobs {\n    text_offset?: Array<number>;\n\n    token_logprobs?: Array<number>;\n\n    tokens?: Array<string>;\n\n    top_logprobs?: Array<{ [key: string]: number }>;\n  }\n}\n\n/**\n * Usage statistics for the completion request.\n */\nexport interface CompletionUsage {\n  /**\n   * Number of tokens in the generated completion.\n   */\n  completion_tokens: number;\n\n  /**\n   * Number of tokens in the prompt.\n   */\n  prompt_tokens: number;\n\n  /**\n   * Total number of tokens used in the request (prompt + completion).\n   */\n  total_tokens: number;\n\n  /**\n   * Breakdown of tokens used in a completion.\n   */\n  completion_tokens_details?: CompletionUsage.CompletionTokensDetails;\n\n  /**\n   * Breakdown of tokens used in the prompt.\n   */\n  prompt_tokens_details?: CompletionUsage.PromptTokensDetails;\n}\n\nexport namespace CompletionUsage {\n  /**\n   * Breakdown of tokens used in a completion.\n   */\n  export interface CompletionTokensDetails {\n    /**\n     * When using Predicted Outputs, the number of tokens in the prediction that\n     * appeared in the completion.\n     */\n    accepted_prediction_tokens?: number;\n\n    /**\n     * Audio input tokens generated by the model.\n     */\n    audio_tokens?: number;\n\n    /**\n     * Tokens generated by the model for reasoning.\n     */\n    reasoning_tokens?: number;\n\n    /**\n     * When using Predicted Outputs, the number of tokens in the prediction that did\n     * not appear in the completion. However, like reasoning tokens, these tokens are\n     * still counted in the total completion tokens for purposes of billing, output,\n     * and context window limits.\n     */\n    rejected_prediction_tokens?: number;\n  }\n\n  /**\n   * Breakdown of tokens used in the prompt.\n   */\n  export interface PromptTokensDetails {\n    /**\n     * Audio input tokens present in the prompt.\n     */\n    audio_tokens?: number;\n\n    /**\n     * Cached tokens present in the prompt.\n     */\n    cached_tokens?: number;\n  }\n}\n\nexport type CompletionCreateParams = CompletionCreateParamsNonStreaming | CompletionCreateParamsStreaming;\n\nexport interface CompletionCreateParamsBase {\n  /**\n   * ID of the model to use. You can use the\n   * [List models](https://platform.openai.com/docs/api-reference/models/list) API to\n   * see all of your available models, or see our\n   * [Model overview](https://platform.openai.com/docs/models) for descriptions of\n   * them.\n   */\n  model: (string & {}) | 'gpt-3.5-turbo-instruct' | 'davinci-002' | 'babbage-002';\n\n  /**\n   * The prompt(s) to generate completions for, encoded as a string, array of\n   * strings, array of tokens, or array of token arrays.\n   *\n   * Note that <|endoftext|> is the document separator that the model sees during\n   * training, so if a prompt is not specified the model will generate as if from the\n   * beginning of a new document.\n   */\n  prompt: string | Array<string> | Array<number> | Array<Array<number>> | null;\n\n  /**\n   * Generates `best_of` completions server-side and returns the \"best\" (the one with\n   * the highest log probability per token). Results cannot be streamed.\n   *\n   * When used with `n`, `best_of` controls the number of candidate completions and\n   * `n` specifies how many to return \u2013 `best_of` must be greater than `n`.\n   *\n   * **Note:** Because this parameter generates many completions, it can quickly\n   * consume your token quota. Use carefully and ensure that you have reasonable\n   * settings for `max_tokens` and `stop`.\n   */\n  best_of?: number | null;\n\n  /**\n   * Echo back the prompt in addition to the completion\n   */\n  echo?: boolean | null;\n\n  /**\n   * Number between -2.0 and 2.0. Positive values penalize new tokens based on their\n   * existing frequency in the text so far, decreasing the model's likelihood to\n   * repeat the same line verbatim.\n   *\n   * [See more information about frequency and presence penalties.](https://platform.openai.com/docs/guides/text-generation)\n   */\n  frequency_penalty?: number | null;\n\n  /**\n   * Modify the likelihood of specified tokens appearing in the completion.\n   *\n   * Accepts a JSON object that maps tokens (specified by their token ID in the GPT\n   * tokenizer) to an associated bias value from -100 to 100. You can use this\n   * [tokenizer tool](/tokenizer?view=bpe) to convert text to token IDs.\n   * Mathematically, the bias is added to the logits generated by the model prior to\n   * sampling. The exact effect will vary per model, but values between -1 and 1\n   * should decrease or increase likelihood of selection; values like -100 or 100\n   * should result in a ban or exclusive selection of the relevant token.\n   *\n   * As an example, you can pass `{\"50256\": -100}` to prevent the <|endoftext|> token\n   * from being generated.\n   */\n  logit_bias?: { [key: string]: number } | null;\n\n  /**\n   * Include the log probabilities on the `logprobs` most likely output tokens, as\n   * well the chosen tokens. For example, if `logprobs` is 5, the API will return a\n   * list of the 5 most likely tokens. The API will always return the `logprob` of\n   * the sampled token, so there may be up to `logprobs+1` elements in the response.\n   *\n   * The maximum value for `logprobs` is 5.\n   */\n  logprobs?: number | null;\n\n  /**\n   * The maximum number of [tokens](/tokenizer) that can be generated in the\n   * completion.\n   *\n   * The token count of your prompt plus `max_tokens` cannot exceed the model's\n   * context length.\n   * [Example Python code](https://cookbook.openai.com/examples/how_to_count_tokens_with_tiktoken)\n   * for counting tokens.\n   */\n  max_tokens?: number | null;\n\n  /**\n   * How many completions to generate for each prompt.\n   *\n   * **Note:** Because this parameter generates many completions, it can quickly\n   * consume your token quota. Use carefully and ensure that you have reasonable\n   * settings for `max_tokens` and `stop`.\n   */\n  n?: number | null;\n\n  /**\n   * Number between -2.0 and 2.0. Positive values penalize new tokens based on\n   * whether they appear in the text so far, increasing the model's likelihood to\n   * talk about new topics.\n   *\n   * [See more information about frequency and presence penalties.](https://platform.openai.com/docs/guides/text-generation)\n   */\n  presence_penalty?: number | null;\n\n  /**\n   * If specified, our system will make a best effort to sample deterministically,\n   * such that repeated requests with the same `seed` and parameters should return\n   * the same result.\n   *\n   * Determinism is not guaranteed, and you should refer to the `system_fingerprint`\n   * response parameter to monitor changes in the backend.\n   */\n  seed?: number | null;\n\n  /**\n   * Not supported with latest reasoning models `o3` and `o4-mini`.\n   *\n   * Up to 4 sequences where the API will stop generating further tokens. The\n   * returned text will not contain the stop sequence.\n   */\n  stop?: string | null | Array<string>;\n\n  /**\n   * Whether to stream back partial progress. If set, tokens will be sent as\n   * data-only\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format)\n   * as they become available, with the stream terminated by a `data: [DONE]`\n   * message.\n   * [Example Python code](https://cookbook.openai.com/examples/how_to_stream_completions).\n   */\n  stream?: boolean | null;\n\n  /**\n   * Options for streaming response. Only set this when you set `stream: true`.\n   */\n  stream_options?: ChatCompletionsAPI.ChatCompletionStreamOptions | null;\n\n  /**\n   * The suffix that comes after a completion of inserted text.\n   *\n   * This parameter is only supported for `gpt-3.5-turbo-instruct`.\n   */\n  suffix?: string | null;\n\n  /**\n   * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will\n   * make the output more random, while lower values like 0.2 will make it more\n   * focused and deterministic.\n   *\n   * We generally recommend altering this or `top_p` but not both.\n   */\n  temperature?: number | null;\n\n  /**\n   * An alternative to sampling with temperature, called nucleus sampling, where the\n   * model considers the results of the tokens with top_p probability mass. So 0.1\n   * means only the tokens comprising the top 10% probability mass are considered.\n   *\n   * We generally recommend altering this or `temperature` but not both.\n   */\n  top_p?: number | null;\n\n  /**\n   * A unique identifier representing your end-user, which can help OpenAI to monitor\n   * and detect abuse.\n   * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids).\n   */\n  user?: string;\n}\n\nexport namespace CompletionCreateParams {\n  export type CompletionCreateParamsNonStreaming = CompletionsAPI.CompletionCreateParamsNonStreaming;\n  export type CompletionCreateParamsStreaming = CompletionsAPI.CompletionCreateParamsStreaming;\n}\n\nexport interface CompletionCreateParamsNonStreaming extends CompletionCreateParamsBase {\n  /**\n   * Whether to stream back partial progress. If set, tokens will be sent as\n   * data-only\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format)\n   * as they become available, with the stream terminated by a `data: [DONE]`\n   * message.\n   * [Example Python code](https://cookbook.openai.com/examples/how_to_stream_completions).\n   */\n  stream?: false | null;\n}\n\nexport interface CompletionCreateParamsStreaming extends CompletionCreateParamsBase {\n  /**\n   * Whether to stream back partial progress. If set, tokens will be sent as\n   * data-only\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format)\n   * as they become available, with the stream terminated by a `data: [DONE]`\n   * message.\n   * [Example Python code](https://cookbook.openai.com/examples/how_to_stream_completions).\n   */\n  stream: true;\n}\n\nexport declare namespace Completions {\n  export {\n    type Completion as Completion,\n    type CompletionChoice as CompletionChoice,\n    type CompletionUsage as CompletionUsage,\n    type CompletionCreateParams as CompletionCreateParams,\n    type CompletionCreateParamsNonStreaming as CompletionCreateParamsNonStreaming,\n    type CompletionCreateParamsStreaming as CompletionCreateParamsStreaming,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport { APIPromise } from '../../../core/api-promise';\nimport { buildHeaders } from '../../../internal/headers';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\nexport class Content extends APIResource {\n  /**\n   * Retrieve Container File Content\n   */\n  retrieve(fileID: string, params: ContentRetrieveParams, options?: RequestOptions): APIPromise<Response> {\n    const { container_id } = params;\n    return this._client.get(path`/containers/${container_id}/files/${fileID}/content`, {\n      ...options,\n      headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n      __security: { bearerAuth: true },\n      __binaryResponse: true,\n    });\n  }\n}\n\nexport interface ContentRetrieveParams {\n  container_id: string;\n}\n\nexport declare namespace Content {\n  export { type ContentRetrieveParams as ContentRetrieveParams };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as ContentAPI from './content';\nimport { Content, ContentRetrieveParams } from './content';\nimport { APIPromise } from '../../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pagination';\nimport { type Uploadable } from '../../../core/uploads';\nimport { buildHeaders } from '../../../internal/headers';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { maybeMultipartFormRequestOptions } from '../../../internal/uploads';\nimport { path } from '../../../internal/utils/path';\n\nexport class Files extends APIResource {\n  content: ContentAPI.Content = new ContentAPI.Content(this._client);\n\n  /**\n   * Create a Container File\n   *\n   * You can send either a multipart/form-data request with the raw file content, or\n   * a JSON request with a file ID.\n   */\n  create(\n    containerID: string,\n    body: FileCreateParams,\n    options?: RequestOptions,\n  ): APIPromise<FileCreateResponse> {\n    return this._client.post(\n      path`/containers/${containerID}/files`,\n      maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client),\n    );\n  }\n\n  /**\n   * Retrieve Container File\n   */\n  retrieve(\n    fileID: string,\n    params: FileRetrieveParams,\n    options?: RequestOptions,\n  ): APIPromise<FileRetrieveResponse> {\n    const { container_id } = params;\n    return this._client.get(path`/containers/${container_id}/files/${fileID}`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * List Container files\n   */\n  list(\n    containerID: string,\n    query: FileListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<FileListResponsesPage, FileListResponse> {\n    return this._client.getAPIList(path`/containers/${containerID}/files`, CursorPage<FileListResponse>, {\n      query,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Delete Container File\n   */\n  delete(fileID: string, params: FileDeleteParams, options?: RequestOptions): APIPromise<void> {\n    const { container_id } = params;\n    return this._client.delete(path`/containers/${container_id}/files/${fileID}`, {\n      ...options,\n      headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\nexport type FileListResponsesPage = CursorPage<FileListResponse>;\n\nexport interface FileCreateResponse {\n  /**\n   * Unique identifier for the file.\n   */\n  id: string;\n\n  /**\n   * Size of the file in bytes.\n   */\n  bytes: number;\n\n  /**\n   * The container this file belongs to.\n   */\n  container_id: string;\n\n  /**\n   * Unix timestamp (in seconds) when the file was created.\n   */\n  created_at: number;\n\n  /**\n   * The type of this object (`container.file`).\n   */\n  object: 'container.file';\n\n  /**\n   * Path of the file in the container.\n   */\n  path: string;\n\n  /**\n   * Source of the file (e.g., `user`, `assistant`).\n   */\n  source: string;\n}\n\nexport interface FileRetrieveResponse {\n  /**\n   * Unique identifier for the file.\n   */\n  id: string;\n\n  /**\n   * Size of the file in bytes.\n   */\n  bytes: number;\n\n  /**\n   * The container this file belongs to.\n   */\n  container_id: string;\n\n  /**\n   * Unix timestamp (in seconds) when the file was created.\n   */\n  created_at: number;\n\n  /**\n   * The type of this object (`container.file`).\n   */\n  object: 'container.file';\n\n  /**\n   * Path of the file in the container.\n   */\n  path: string;\n\n  /**\n   * Source of the file (e.g., `user`, `assistant`).\n   */\n  source: string;\n}\n\nexport interface FileListResponse {\n  /**\n   * Unique identifier for the file.\n   */\n  id: string;\n\n  /**\n   * Size of the file in bytes.\n   */\n  bytes: number;\n\n  /**\n   * The container this file belongs to.\n   */\n  container_id: string;\n\n  /**\n   * Unix timestamp (in seconds) when the file was created.\n   */\n  created_at: number;\n\n  /**\n   * The type of this object (`container.file`).\n   */\n  object: 'container.file';\n\n  /**\n   * Path of the file in the container.\n   */\n  path: string;\n\n  /**\n   * Source of the file (e.g., `user`, `assistant`).\n   */\n  source: string;\n}\n\nexport interface FileCreateParams {\n  /**\n   * The File object (not file name) to be uploaded.\n   */\n  file?: Uploadable;\n\n  /**\n   * Name of the file to create.\n   */\n  file_id?: string;\n}\n\nexport interface FileRetrieveParams {\n  container_id: string;\n}\n\nexport interface FileListParams extends CursorPageParams {\n  /**\n   * Sort order by the `created_at` timestamp of the objects. `asc` for ascending\n   * order and `desc` for descending order.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface FileDeleteParams {\n  container_id: string;\n}\n\nFiles.Content = Content;\n\nexport declare namespace Files {\n  export {\n    type FileCreateResponse as FileCreateResponse,\n    type FileRetrieveResponse as FileRetrieveResponse,\n    type FileListResponse as FileListResponse,\n    type FileListResponsesPage as FileListResponsesPage,\n    type FileCreateParams as FileCreateParams,\n    type FileRetrieveParams as FileRetrieveParams,\n    type FileListParams as FileListParams,\n    type FileDeleteParams as FileDeleteParams,\n  };\n\n  export { Content as Content, type ContentRetrieveParams as ContentRetrieveParams };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as ResponsesAPI from '../responses/responses';\nimport * as FilesAPI from './files/files';\nimport {\n  FileCreateParams,\n  FileCreateResponse,\n  FileDeleteParams,\n  FileListParams,\n  FileListResponse,\n  FileListResponsesPage,\n  FileRetrieveParams,\n  FileRetrieveResponse,\n  Files,\n} from './files/files';\nimport { APIPromise } from '../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../core/pagination';\nimport { buildHeaders } from '../../internal/headers';\nimport { RequestOptions } from '../../internal/request-options';\nimport { path } from '../../internal/utils/path';\n\nexport class Containers extends APIResource {\n  files: FilesAPI.Files = new FilesAPI.Files(this._client);\n\n  /**\n   * Create Container\n   */\n  create(body: ContainerCreateParams, options?: RequestOptions): APIPromise<ContainerCreateResponse> {\n    return this._client.post('/containers', { body, ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * Retrieve Container\n   */\n  retrieve(containerID: string, options?: RequestOptions): APIPromise<ContainerRetrieveResponse> {\n    return this._client.get(path`/containers/${containerID}`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * List Containers\n   */\n  list(\n    query: ContainerListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<ContainerListResponsesPage, ContainerListResponse> {\n    return this._client.getAPIList('/containers', CursorPage<ContainerListResponse>, {\n      query,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Delete Container\n   */\n  delete(containerID: string, options?: RequestOptions): APIPromise<void> {\n    return this._client.delete(path`/containers/${containerID}`, {\n      ...options,\n      headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\nexport type ContainerListResponsesPage = CursorPage<ContainerListResponse>;\n\nexport interface ContainerCreateResponse {\n  /**\n   * Unique identifier for the container.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (in seconds) when the container was created.\n   */\n  created_at: number;\n\n  /**\n   * Name of the container.\n   */\n  name: string;\n\n  /**\n   * The type of this object.\n   */\n  object: string;\n\n  /**\n   * Status of the container (e.g., active, deleted).\n   */\n  status: string;\n\n  /**\n   * The container will expire after this time period. The anchor is the reference\n   * point for the expiration. The minutes is the number of minutes after the anchor\n   * before the container expires.\n   */\n  expires_after?: ContainerCreateResponse.ExpiresAfter;\n\n  /**\n   * Unix timestamp (in seconds) when the container was last active.\n   */\n  last_active_at?: number;\n\n  /**\n   * The memory limit configured for the container.\n   */\n  memory_limit?: '1g' | '4g' | '16g' | '64g';\n\n  /**\n   * Network access policy for the container.\n   */\n  network_policy?: ContainerCreateResponse.NetworkPolicy;\n}\n\nexport namespace ContainerCreateResponse {\n  /**\n   * The container will expire after this time period. The anchor is the reference\n   * point for the expiration. The minutes is the number of minutes after the anchor\n   * before the container expires.\n   */\n  export interface ExpiresAfter {\n    /**\n     * The reference point for the expiration.\n     */\n    anchor?: 'last_active_at';\n\n    /**\n     * The number of minutes after the anchor before the container expires.\n     */\n    minutes?: number;\n  }\n\n  /**\n   * Network access policy for the container.\n   */\n  export interface NetworkPolicy {\n    /**\n     * The network policy mode.\n     */\n    type: 'allowlist' | 'disabled';\n\n    /**\n     * Allowed outbound domains when `type` is `allowlist`.\n     */\n    allowed_domains?: Array<string>;\n  }\n}\n\nexport interface ContainerRetrieveResponse {\n  /**\n   * Unique identifier for the container.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (in seconds) when the container was created.\n   */\n  created_at: number;\n\n  /**\n   * Name of the container.\n   */\n  name: string;\n\n  /**\n   * The type of this object.\n   */\n  object: string;\n\n  /**\n   * Status of the container (e.g., active, deleted).\n   */\n  status: string;\n\n  /**\n   * The container will expire after this time period. The anchor is the reference\n   * point for the expiration. The minutes is the number of minutes after the anchor\n   * before the container expires.\n   */\n  expires_after?: ContainerRetrieveResponse.ExpiresAfter;\n\n  /**\n   * Unix timestamp (in seconds) when the container was last active.\n   */\n  last_active_at?: number;\n\n  /**\n   * The memory limit configured for the container.\n   */\n  memory_limit?: '1g' | '4g' | '16g' | '64g';\n\n  /**\n   * Network access policy for the container.\n   */\n  network_policy?: ContainerRetrieveResponse.NetworkPolicy;\n}\n\nexport namespace ContainerRetrieveResponse {\n  /**\n   * The container will expire after this time period. The anchor is the reference\n   * point for the expiration. The minutes is the number of minutes after the anchor\n   * before the container expires.\n   */\n  export interface ExpiresAfter {\n    /**\n     * The reference point for the expiration.\n     */\n    anchor?: 'last_active_at';\n\n    /**\n     * The number of minutes after the anchor before the container expires.\n     */\n    minutes?: number;\n  }\n\n  /**\n   * Network access policy for the container.\n   */\n  export interface NetworkPolicy {\n    /**\n     * The network policy mode.\n     */\n    type: 'allowlist' | 'disabled';\n\n    /**\n     * Allowed outbound domains when `type` is `allowlist`.\n     */\n    allowed_domains?: Array<string>;\n  }\n}\n\nexport interface ContainerListResponse {\n  /**\n   * Unique identifier for the container.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (in seconds) when the container was created.\n   */\n  created_at: number;\n\n  /**\n   * Name of the container.\n   */\n  name: string;\n\n  /**\n   * The type of this object.\n   */\n  object: string;\n\n  /**\n   * Status of the container (e.g., active, deleted).\n   */\n  status: string;\n\n  /**\n   * The container will expire after this time period. The anchor is the reference\n   * point for the expiration. The minutes is the number of minutes after the anchor\n   * before the container expires.\n   */\n  expires_after?: ContainerListResponse.ExpiresAfter;\n\n  /**\n   * Unix timestamp (in seconds) when the container was last active.\n   */\n  last_active_at?: number;\n\n  /**\n   * The memory limit configured for the container.\n   */\n  memory_limit?: '1g' | '4g' | '16g' | '64g';\n\n  /**\n   * Network access policy for the container.\n   */\n  network_policy?: ContainerListResponse.NetworkPolicy;\n}\n\nexport namespace ContainerListResponse {\n  /**\n   * The container will expire after this time period. The anchor is the reference\n   * point for the expiration. The minutes is the number of minutes after the anchor\n   * before the container expires.\n   */\n  export interface ExpiresAfter {\n    /**\n     * The reference point for the expiration.\n     */\n    anchor?: 'last_active_at';\n\n    /**\n     * The number of minutes after the anchor before the container expires.\n     */\n    minutes?: number;\n  }\n\n  /**\n   * Network access policy for the container.\n   */\n  export interface NetworkPolicy {\n    /**\n     * The network policy mode.\n     */\n    type: 'allowlist' | 'disabled';\n\n    /**\n     * Allowed outbound domains when `type` is `allowlist`.\n     */\n    allowed_domains?: Array<string>;\n  }\n}\n\nexport interface ContainerCreateParams {\n  /**\n   * Name of the container to create.\n   */\n  name: string;\n\n  /**\n   * Container expiration time in seconds relative to the 'anchor' time.\n   */\n  expires_after?: ContainerCreateParams.ExpiresAfter;\n\n  /**\n   * IDs of files to copy to the container.\n   */\n  file_ids?: Array<string>;\n\n  /**\n   * Optional memory limit for the container. Defaults to \"1g\".\n   */\n  memory_limit?: '1g' | '4g' | '16g' | '64g';\n\n  /**\n   * Network access policy for the container.\n   */\n  network_policy?: ResponsesAPI.ContainerNetworkPolicyDisabled | ResponsesAPI.ContainerNetworkPolicyAllowlist;\n\n  /**\n   * An optional list of skills referenced by id or inline data.\n   */\n  skills?: Array<ResponsesAPI.SkillReference | ResponsesAPI.InlineSkill>;\n}\n\nexport namespace ContainerCreateParams {\n  /**\n   * Container expiration time in seconds relative to the 'anchor' time.\n   */\n  export interface ExpiresAfter {\n    /**\n     * Time anchor for the expiration time. Currently only 'last_active_at' is\n     * supported.\n     */\n    anchor: 'last_active_at';\n\n    minutes: number;\n  }\n}\n\nexport interface ContainerListParams extends CursorPageParams {\n  /**\n   * Filter results by container name.\n   */\n  name?: string;\n\n  /**\n   * Sort order by the `created_at` timestamp of the objects. `asc` for ascending\n   * order and `desc` for descending order.\n   */\n  order?: 'asc' | 'desc';\n}\n\nContainers.Files = Files;\n\nexport declare namespace Containers {\n  export {\n    type ContainerCreateResponse as ContainerCreateResponse,\n    type ContainerRetrieveResponse as ContainerRetrieveResponse,\n    type ContainerListResponse as ContainerListResponse,\n    type ContainerListResponsesPage as ContainerListResponsesPage,\n    type ContainerCreateParams as ContainerCreateParams,\n    type ContainerListParams as ContainerListParams,\n  };\n\n  export {\n    Files as Files,\n    type FileCreateResponse as FileCreateResponse,\n    type FileRetrieveResponse as FileRetrieveResponse,\n    type FileListResponse as FileListResponse,\n    type FileListResponsesPage as FileListResponsesPage,\n    type FileCreateParams as FileCreateParams,\n    type FileRetrieveParams as FileRetrieveParams,\n    type FileListParams as FileListParams,\n    type FileDeleteParams as FileDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as ConversationsAPI from './conversations';\nimport * as ResponsesAPI from '../responses/responses';\nimport { APIPromise } from '../../core/api-promise';\nimport {\n  ConversationCursorPage,\n  type ConversationCursorPageParams,\n  PagePromise,\n} from '../../core/pagination';\nimport { RequestOptions } from '../../internal/request-options';\nimport { path } from '../../internal/utils/path';\n\n/**\n * Manage conversations and conversation items.\n */\nexport class Items extends APIResource {\n  /**\n   * Create items in a conversation with the given ID.\n   */\n  create(\n    conversationID: string,\n    params: ItemCreateParams,\n    options?: RequestOptions,\n  ): APIPromise<ConversationItemList> {\n    const { include, ...body } = params;\n    return this._client.post(path`/conversations/${conversationID}/items`, {\n      query: { include },\n      body,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Get a single item from a conversation with the given IDs.\n   */\n  retrieve(\n    itemID: string,\n    params: ItemRetrieveParams,\n    options?: RequestOptions,\n  ): APIPromise<ConversationItem> {\n    const { conversation_id, ...query } = params;\n    return this._client.get(path`/conversations/${conversation_id}/items/${itemID}`, {\n      query,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * List all items for a conversation with the given ID.\n   */\n  list(\n    conversationID: string,\n    query: ItemListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<ConversationItemsPage, ConversationItem> {\n    return this._client.getAPIList(\n      path`/conversations/${conversationID}/items`,\n      ConversationCursorPage<ConversationItem>,\n      { query, ...options, __security: { bearerAuth: true } },\n    );\n  }\n\n  /**\n   * Delete an item from a conversation with the given IDs.\n   */\n  delete(\n    itemID: string,\n    params: ItemDeleteParams,\n    options?: RequestOptions,\n  ): APIPromise<ConversationsAPI.Conversation> {\n    const { conversation_id } = params;\n    return this._client.delete(path`/conversations/${conversation_id}/items/${itemID}`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\nexport type ConversationItemsPage = ConversationCursorPage<ConversationItem>;\n\n/**\n * A single item within a conversation. The set of possible types are the same as\n * the `output` type of a\n * [Response object](https://platform.openai.com/docs/api-reference/responses/object#responses/object-output).\n */\nexport type ConversationItem =\n  | ConversationsAPI.Message\n  | ResponsesAPI.ResponseFunctionToolCallItem\n  | ResponsesAPI.ResponseFunctionToolCallOutputItem\n  | ResponsesAPI.ResponseFileSearchToolCall\n  | ResponsesAPI.ResponseFunctionWebSearch\n  | ConversationItem.ImageGenerationCall\n  | ResponsesAPI.ResponseComputerToolCall\n  | ResponsesAPI.ResponseComputerToolCallOutputItem\n  | ResponsesAPI.ResponseToolSearchCall\n  | ResponsesAPI.ResponseToolSearchOutputItem\n  | ResponsesAPI.ResponseReasoningItem\n  | ResponsesAPI.ResponseCompactionItem\n  | ResponsesAPI.ResponseCodeInterpreterToolCall\n  | ConversationItem.LocalShellCall\n  | ConversationItem.LocalShellCallOutput\n  | ResponsesAPI.ResponseFunctionShellToolCall\n  | ResponsesAPI.ResponseFunctionShellToolCallOutput\n  | ResponsesAPI.ResponseApplyPatchToolCall\n  | ResponsesAPI.ResponseApplyPatchToolCallOutput\n  | ConversationItem.McpListTools\n  | ConversationItem.McpApprovalRequest\n  | ConversationItem.McpApprovalResponse\n  | ConversationItem.McpCall\n  | ResponsesAPI.ResponseCustomToolCall\n  | ResponsesAPI.ResponseCustomToolCallOutput;\n\nexport namespace ConversationItem {\n  /**\n   * An image generation request made by the model.\n   */\n  export interface ImageGenerationCall {\n    /**\n     * The unique ID of the image generation call.\n     */\n    id: string;\n\n    /**\n     * The generated image encoded in base64.\n     */\n    result: string | null;\n\n    /**\n     * The status of the image generation call.\n     */\n    status: 'in_progress' | 'completed' | 'generating' | 'failed';\n\n    /**\n     * The type of the image generation call. Always `image_generation_call`.\n     */\n    type: 'image_generation_call';\n  }\n\n  /**\n   * A tool call to run a command on the local shell.\n   */\n  export interface LocalShellCall {\n    /**\n     * The unique ID of the local shell call.\n     */\n    id: string;\n\n    /**\n     * Execute a shell command on the server.\n     */\n    action: LocalShellCall.Action;\n\n    /**\n     * The unique ID of the local shell tool call generated by the model.\n     */\n    call_id: string;\n\n    /**\n     * The status of the local shell call.\n     */\n    status: 'in_progress' | 'completed' | 'incomplete';\n\n    /**\n     * The type of the local shell call. Always `local_shell_call`.\n     */\n    type: 'local_shell_call';\n  }\n\n  export namespace LocalShellCall {\n    /**\n     * Execute a shell command on the server.\n     */\n    export interface Action {\n      /**\n       * The command to run.\n       */\n      command: Array<string>;\n\n      /**\n       * Environment variables to set for the command.\n       */\n      env: { [key: string]: string };\n\n      /**\n       * The type of the local shell action. Always `exec`.\n       */\n      type: 'exec';\n\n      /**\n       * Optional timeout in milliseconds for the command.\n       */\n      timeout_ms?: number | null;\n\n      /**\n       * Optional user to run the command as.\n       */\n      user?: string | null;\n\n      /**\n       * Optional working directory to run the command in.\n       */\n      working_directory?: string | null;\n    }\n  }\n\n  /**\n   * The output of a local shell tool call.\n   */\n  export interface LocalShellCallOutput {\n    /**\n     * The unique ID of the local shell tool call generated by the model.\n     */\n    id: string;\n\n    /**\n     * A JSON string of the output of the local shell tool call.\n     */\n    output: string;\n\n    /**\n     * The type of the local shell tool call output. Always `local_shell_call_output`.\n     */\n    type: 'local_shell_call_output';\n\n    /**\n     * The status of the item. One of `in_progress`, `completed`, or `incomplete`.\n     */\n    status?: 'in_progress' | 'completed' | 'incomplete' | null;\n  }\n\n  /**\n   * A list of tools available on an MCP server.\n   */\n  export interface McpListTools {\n    /**\n     * The unique ID of the list.\n     */\n    id: string;\n\n    /**\n     * The label of the MCP server.\n     */\n    server_label: string;\n\n    /**\n     * The tools available on the server.\n     */\n    tools: Array<McpListTools.Tool>;\n\n    /**\n     * The type of the item. Always `mcp_list_tools`.\n     */\n    type: 'mcp_list_tools';\n\n    /**\n     * Error message if the server could not list tools.\n     */\n    error?: string | null;\n  }\n\n  export namespace McpListTools {\n    /**\n     * A tool available on an MCP server.\n     */\n    export interface Tool {\n      /**\n       * The JSON schema describing the tool's input.\n       */\n      input_schema: unknown;\n\n      /**\n       * The name of the tool.\n       */\n      name: string;\n\n      /**\n       * Additional annotations about the tool.\n       */\n      annotations?: unknown | null;\n\n      /**\n       * The description of the tool.\n       */\n      description?: string | null;\n    }\n  }\n\n  /**\n   * A request for human approval of a tool invocation.\n   */\n  export interface McpApprovalRequest {\n    /**\n     * The unique ID of the approval request.\n     */\n    id: string;\n\n    /**\n     * A JSON string of arguments for the tool.\n     */\n    arguments: string;\n\n    /**\n     * The name of the tool to run.\n     */\n    name: string;\n\n    /**\n     * The label of the MCP server making the request.\n     */\n    server_label: string;\n\n    /**\n     * The type of the item. Always `mcp_approval_request`.\n     */\n    type: 'mcp_approval_request';\n  }\n\n  /**\n   * A response to an MCP approval request.\n   */\n  export interface McpApprovalResponse {\n    /**\n     * The unique ID of the approval response\n     */\n    id: string;\n\n    /**\n     * The ID of the approval request being answered.\n     */\n    approval_request_id: string;\n\n    /**\n     * Whether the request was approved.\n     */\n    approve: boolean;\n\n    /**\n     * The type of the item. Always `mcp_approval_response`.\n     */\n    type: 'mcp_approval_response';\n\n    /**\n     * Optional reason for the decision.\n     */\n    reason?: string | null;\n  }\n\n  /**\n   * An invocation of a tool on an MCP server.\n   */\n  export interface McpCall {\n    /**\n     * The unique ID of the tool call.\n     */\n    id: string;\n\n    /**\n     * A JSON string of the arguments passed to the tool.\n     */\n    arguments: string;\n\n    /**\n     * The name of the tool that was run.\n     */\n    name: string;\n\n    /**\n     * The label of the MCP server running the tool.\n     */\n    server_label: string;\n\n    /**\n     * The type of the item. Always `mcp_call`.\n     */\n    type: 'mcp_call';\n\n    /**\n     * Unique identifier for the MCP tool call approval request. Include this value in\n     * a subsequent `mcp_approval_response` input to approve or reject the\n     * corresponding tool call.\n     */\n    approval_request_id?: string | null;\n\n    /**\n     * The error from the tool call, if any.\n     */\n    error?: string | null;\n\n    /**\n     * The output from the tool call.\n     */\n    output?: string | null;\n\n    /**\n     * The status of the tool call. One of `in_progress`, `completed`, `incomplete`,\n     * `calling`, or `failed`.\n     */\n    status?: 'in_progress' | 'completed' | 'incomplete' | 'calling' | 'failed';\n  }\n}\n\n/**\n * A list of Conversation items.\n */\nexport interface ConversationItemList {\n  /**\n   * A list of conversation items.\n   */\n  data: Array<ConversationItem>;\n\n  /**\n   * The ID of the first item in the list.\n   */\n  first_id: string;\n\n  /**\n   * Whether there are more items available.\n   */\n  has_more: boolean;\n\n  /**\n   * The ID of the last item in the list.\n   */\n  last_id: string;\n\n  /**\n   * The type of object returned, must be `list`.\n   */\n  object: 'list';\n}\n\nexport interface ItemCreateParams {\n  /**\n   * Body param: The items to add to the conversation. You may add up to 20 items at\n   * a time.\n   */\n  items: Array<ResponsesAPI.ResponseInputItem>;\n\n  /**\n   * Query param: Additional fields to include in the response. See the `include`\n   * parameter for\n   * [listing Conversation items above](https://platform.openai.com/docs/api-reference/conversations/list-items#conversations_list_items-include)\n   * for more information.\n   */\n  include?: Array<ResponsesAPI.ResponseIncludable>;\n}\n\nexport interface ItemRetrieveParams {\n  /**\n   * Path param: The ID of the conversation that contains the item.\n   */\n  conversation_id: string;\n\n  /**\n   * Query param: Additional fields to include in the response. See the `include`\n   * parameter for\n   * [listing Conversation items above](https://platform.openai.com/docs/api-reference/conversations/list-items#conversations_list_items-include)\n   * for more information.\n   */\n  include?: Array<ResponsesAPI.ResponseIncludable>;\n}\n\nexport interface ItemListParams extends ConversationCursorPageParams {\n  /**\n   * Specify additional output data to include in the model response. Currently\n   * supported values are:\n   *\n   * - `web_search_call.action.sources`: Include the sources of the web search tool\n   *   call.\n   * - `code_interpreter_call.outputs`: Includes the outputs of python code execution\n   *   in code interpreter tool call items.\n   * - `computer_call_output.output.image_url`: Include image urls from the computer\n   *   call output.\n   * - `file_search_call.results`: Include the search results of the file search tool\n   *   call.\n   * - `message.input_image.image_url`: Include image urls from the input message.\n   * - `message.output_text.logprobs`: Include logprobs with assistant messages.\n   * - `reasoning.encrypted_content`: Includes an encrypted version of reasoning\n   *   tokens in reasoning item outputs. This enables reasoning items to be used in\n   *   multi-turn conversations when using the Responses API statelessly (like when\n   *   the `store` parameter is set to `false`, or when an organization is enrolled\n   *   in the zero data retention program).\n   */\n  include?: Array<ResponsesAPI.ResponseIncludable>;\n\n  /**\n   * The order to return the input items in. Default is `desc`.\n   *\n   * - `asc`: Return the input items in ascending order.\n   * - `desc`: Return the input items in descending order.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface ItemDeleteParams {\n  /**\n   * The ID of the conversation that contains the item.\n   */\n  conversation_id: string;\n}\n\nexport declare namespace Items {\n  export {\n    type ConversationItem as ConversationItem,\n    type ConversationItemList as ConversationItemList,\n    type ConversationItemsPage as ConversationItemsPage,\n    type ItemCreateParams as ItemCreateParams,\n    type ItemRetrieveParams as ItemRetrieveParams,\n    type ItemListParams as ItemListParams,\n    type ItemDeleteParams as ItemDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as Shared from '../shared';\nimport * as ItemsAPI from './items';\nimport {\n  ConversationItem,\n  ConversationItemList,\n  ConversationItemsPage,\n  ItemCreateParams,\n  ItemDeleteParams,\n  ItemListParams,\n  ItemRetrieveParams,\n  Items,\n} from './items';\nimport * as ResponsesAPI from '../responses/responses';\nimport { APIPromise } from '../../core/api-promise';\nimport { RequestOptions } from '../../internal/request-options';\nimport { path } from '../../internal/utils/path';\n\n/**\n * Manage conversations and conversation items.\n */\nexport class Conversations extends APIResource {\n  items: ItemsAPI.Items = new ItemsAPI.Items(this._client);\n\n  /**\n   * Create a conversation.\n   */\n  create(\n    body: ConversationCreateParams | null | undefined = {},\n    options?: RequestOptions,\n  ): APIPromise<Conversation> {\n    return this._client.post('/conversations', { body, ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * Get a conversation\n   */\n  retrieve(conversationID: string, options?: RequestOptions): APIPromise<Conversation> {\n    return this._client.get(path`/conversations/${conversationID}`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Update a conversation\n   */\n  update(\n    conversationID: string,\n    body: ConversationUpdateParams,\n    options?: RequestOptions,\n  ): APIPromise<Conversation> {\n    return this._client.post(path`/conversations/${conversationID}`, {\n      body,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Delete a conversation. Items in the conversation will not be deleted.\n   */\n  delete(conversationID: string, options?: RequestOptions): APIPromise<ConversationDeletedResource> {\n    return this._client.delete(path`/conversations/${conversationID}`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\n/**\n * A screenshot of a computer.\n */\nexport interface ComputerScreenshotContent {\n  /**\n   * The detail level of the screenshot image to be sent to the model. One of `high`,\n   * `low`, `auto`, or `original`. Defaults to `auto`.\n   */\n  detail: 'low' | 'high' | 'auto' | 'original';\n\n  /**\n   * The identifier of an uploaded file that contains the screenshot.\n   */\n  file_id: string | null;\n\n  /**\n   * The URL of the screenshot image.\n   */\n  image_url: string | null;\n\n  /**\n   * Specifies the event type. For a computer screenshot, this property is always set\n   * to `computer_screenshot`.\n   */\n  type: 'computer_screenshot';\n}\n\nexport interface Conversation {\n  /**\n   * The unique ID of the conversation.\n   */\n  id: string;\n\n  /**\n   * The time at which the conversation was created, measured in seconds since the\n   * Unix epoch.\n   */\n  created_at: number;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard. Keys are strings with a maximum\n   * length of 64 characters. Values are strings with a maximum length of 512\n   * characters.\n   */\n  metadata: unknown;\n\n  /**\n   * The object type, which is always `conversation`.\n   */\n  object: 'conversation';\n}\n\nexport interface ConversationDeleted {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'conversation.deleted';\n}\n\nexport interface ConversationDeletedResource {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'conversation.deleted';\n}\n\n/**\n * A message to or from the model.\n */\nexport interface Message {\n  /**\n   * The unique ID of the message.\n   */\n  id: string;\n\n  /**\n   * The content of the message\n   */\n  content: Array<\n    | ResponsesAPI.ResponseInputText\n    | ResponsesAPI.ResponseOutputText\n    | TextContent\n    | SummaryTextContent\n    | Message.ReasoningText\n    | ResponsesAPI.ResponseOutputRefusal\n    | ResponsesAPI.ResponseInputImage\n    | ComputerScreenshotContent\n    | ResponsesAPI.ResponseInputFile\n  >;\n\n  /**\n   * The role of the message. One of `unknown`, `user`, `assistant`, `system`,\n   * `critic`, `discriminator`, `developer`, or `tool`.\n   */\n  role: 'unknown' | 'user' | 'assistant' | 'system' | 'critic' | 'discriminator' | 'developer' | 'tool';\n\n  /**\n   * The status of item. One of `in_progress`, `completed`, or `incomplete`.\n   * Populated when items are returned via API.\n   */\n  status: 'in_progress' | 'completed' | 'incomplete';\n\n  /**\n   * The type of the message. Always set to `message`.\n   */\n  type: 'message';\n\n  /**\n   * Labels an `assistant` message as intermediate commentary (`commentary`) or the\n   * final answer (`final_answer`). For models like `gpt-5.3-codex` and beyond, when\n   * sending follow-up requests, preserve and resend phase on all assistant messages\n   * \u2014 dropping it can degrade performance. Not used for user messages.\n   */\n  phase?: 'commentary' | 'final_answer' | null;\n}\n\nexport namespace Message {\n  /**\n   * Reasoning text from the model.\n   */\n  export interface ReasoningText {\n    /**\n     * The reasoning text from the model.\n     */\n    text: string;\n\n    /**\n     * The type of the reasoning text. Always `reasoning_text`.\n     */\n    type: 'reasoning_text';\n  }\n}\n\n/**\n * A summary text from the model.\n */\nexport interface SummaryTextContent {\n  /**\n   * A summary of the reasoning output from the model so far.\n   */\n  text: string;\n\n  /**\n   * The type of the object. Always `summary_text`.\n   */\n  type: 'summary_text';\n}\n\n/**\n * A text content.\n */\nexport interface TextContent {\n  text: string;\n\n  type: 'text';\n}\n\nexport type InputTextContent = ResponsesAPI.ResponseInputText;\n\nexport type OutputTextContent = ResponsesAPI.ResponseOutputText;\n\nexport type RefusalContent = ResponsesAPI.ResponseOutputRefusal;\n\nexport type InputImageContent = ResponsesAPI.ResponseInputImage;\n\nexport type InputFileContent = ResponsesAPI.ResponseInputFile;\n\nexport interface ConversationCreateParams {\n  /**\n   * Initial items to include in the conversation context. You may add up to 20 items\n   * at a time.\n   */\n  items?: Array<ResponsesAPI.ResponseInputItem> | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n}\n\nexport interface ConversationUpdateParams {\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n}\n\nConversations.Items = Items;\n\nexport declare namespace Conversations {\n  export {\n    type ComputerScreenshotContent as ComputerScreenshotContent,\n    type Conversation as Conversation,\n    type ConversationDeleted as ConversationDeleted,\n    type ConversationDeletedResource as ConversationDeletedResource,\n    type Message as Message,\n    type SummaryTextContent as SummaryTextContent,\n    type TextContent as TextContent,\n    type InputTextContent as InputTextContent,\n    type OutputTextContent as OutputTextContent,\n    type RefusalContent as RefusalContent,\n    type InputImageContent as InputImageContent,\n    type InputFileContent as InputFileContent,\n    type ConversationCreateParams as ConversationCreateParams,\n    type ConversationUpdateParams as ConversationUpdateParams,\n  };\n\n  export {\n    Items as Items,\n    type ConversationItem as ConversationItem,\n    type ConversationItemList as ConversationItemList,\n    type ConversationItemsPage as ConversationItemsPage,\n    type ItemCreateParams as ItemCreateParams,\n    type ItemRetrieveParams as ItemRetrieveParams,\n    type ItemListParams as ItemListParams,\n    type ItemDeleteParams as ItemDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../core/resource';\nimport { APIPromise } from '../core/api-promise';\nimport { RequestOptions } from '../internal/request-options';\nimport { loggerFor, toFloat32Array } from '../internal/utils';\n\n/**\n * Get a vector representation of a given input that can be easily consumed by machine learning models and algorithms.\n */\nexport class Embeddings extends APIResource {\n  /**\n   * Creates an embedding vector representing the input text.\n   *\n   * @example\n   * ```ts\n   * const createEmbeddingResponse =\n   *   await client.embeddings.create({\n   *     input: 'The quick brown fox jumped over the lazy dog',\n   *     model: 'text-embedding-3-small',\n   *   });\n   * ```\n   */\n  create(body: EmbeddingCreateParams, options?: RequestOptions): APIPromise<CreateEmbeddingResponse> {\n    const hasUserProvidedEncodingFormat = !!body.encoding_format;\n    // No encoding_format specified, defaulting to base64 for performance reasons\n    // See https://github.com/openai/openai-node/pull/1312\n    let encoding_format: EmbeddingCreateParams['encoding_format'] =\n      hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n\n    if (hasUserProvidedEncodingFormat) {\n      loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n    }\n\n    const response: APIPromise<CreateEmbeddingResponse> = this._client.post('/embeddings', {\n      body: {\n        ...body,\n        encoding_format: encoding_format as EmbeddingCreateParams['encoding_format'],\n      },\n      ...options,\n      __security: { bearerAuth: true },\n    });\n\n    // if the user specified an encoding_format, return the response as-is\n    if (hasUserProvidedEncodingFormat) {\n      return response;\n    }\n\n    // in this stage, we are sure the user did not specify an encoding_format\n    // and we defaulted to base64 for performance reasons\n    // we are sure then that the response is base64 encoded, let's decode it\n    // the returned result will be a float32 array since this is OpenAI API's default encoding\n    loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n\n    return (response as APIPromise<CreateEmbeddingResponse>)._thenUnwrap((response) => {\n      if (response && response.data) {\n        response.data.forEach((embeddingBase64Obj) => {\n          const embeddingBase64Str = embeddingBase64Obj.embedding as unknown as string;\n          embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n        });\n      }\n\n      return response;\n    });\n  }\n}\n\nexport interface CreateEmbeddingResponse {\n  /**\n   * The list of embeddings generated by the model.\n   */\n  data: Array<Embedding>;\n\n  /**\n   * The name of the model used to generate the embedding.\n   */\n  model: string;\n\n  /**\n   * The object type, which is always \"list\".\n   */\n  object: 'list';\n\n  /**\n   * The usage information for the request.\n   */\n  usage: CreateEmbeddingResponse.Usage;\n}\n\nexport namespace CreateEmbeddingResponse {\n  /**\n   * The usage information for the request.\n   */\n  export interface Usage {\n    /**\n     * The number of tokens used by the prompt.\n     */\n    prompt_tokens: number;\n\n    /**\n     * The total number of tokens used by the request.\n     */\n    total_tokens: number;\n  }\n}\n\n/**\n * Represents an embedding vector returned by embedding endpoint.\n */\nexport interface Embedding {\n  /**\n   * The embedding vector, which is a list of floats. The length of vector depends on\n   * the model as listed in the\n   * [embedding guide](https://platform.openai.com/docs/guides/embeddings).\n   */\n  embedding: Array<number>;\n\n  /**\n   * The index of the embedding in the list of embeddings.\n   */\n  index: number;\n\n  /**\n   * The object type, which is always \"embedding\".\n   */\n  object: 'embedding';\n}\n\nexport type EmbeddingModel = 'text-embedding-ada-002' | 'text-embedding-3-small' | 'text-embedding-3-large';\n\nexport interface EmbeddingCreateParams {\n  /**\n   * Input text to embed, encoded as a string or array of tokens. To embed multiple\n   * inputs in a single request, pass an array of strings or array of token arrays.\n   * The input must not exceed the max input tokens for the model (8192 tokens for\n   * all embedding models), cannot be an empty string, and any array must be 2048\n   * dimensions or less.\n   * [Example Python code](https://cookbook.openai.com/examples/how_to_count_tokens_with_tiktoken)\n   * for counting tokens. In addition to the per-input token limit, all embedding\n   * models enforce a maximum of 300,000 tokens summed across all inputs in a single\n   * request.\n   */\n  input: string | Array<string> | Array<number> | Array<Array<number>>;\n\n  /**\n   * ID of the model to use. You can use the\n   * [List models](https://platform.openai.com/docs/api-reference/models/list) API to\n   * see all of your available models, or see our\n   * [Model overview](https://platform.openai.com/docs/models) for descriptions of\n   * them.\n   */\n  model: (string & {}) | EmbeddingModel;\n\n  /**\n   * The number of dimensions the resulting output embeddings should have. Only\n   * supported in `text-embedding-3` and later models.\n   */\n  dimensions?: number;\n\n  /**\n   * The format to return the embeddings in. Can be either `float` or\n   * [`base64`](https://pypi.org/project/pybase64/).\n   */\n  encoding_format?: 'float' | 'base64';\n\n  /**\n   * A unique identifier representing your end-user, which can help OpenAI to monitor\n   * and detect abuse.\n   * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids).\n   */\n  user?: string;\n}\n\nexport declare namespace Embeddings {\n  export {\n    type CreateEmbeddingResponse as CreateEmbeddingResponse,\n    type Embedding as Embedding,\n    type EmbeddingModel as EmbeddingModel,\n    type EmbeddingCreateParams as EmbeddingCreateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as RunsAPI from './runs';\nimport { APIPromise } from '../../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pagination';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\n/**\n * Manage and run evals in the OpenAI platform.\n */\nexport class OutputItems extends APIResource {\n  /**\n   * Get an evaluation run output item by ID.\n   */\n  retrieve(\n    outputItemID: string,\n    params: OutputItemRetrieveParams,\n    options?: RequestOptions,\n  ): APIPromise<OutputItemRetrieveResponse> {\n    const { eval_id, run_id } = params;\n    return this._client.get(path`/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Get a list of output items for an evaluation run.\n   */\n  list(\n    runID: string,\n    params: OutputItemListParams,\n    options?: RequestOptions,\n  ): PagePromise<OutputItemListResponsesPage, OutputItemListResponse> {\n    const { eval_id, ...query } = params;\n    return this._client.getAPIList(\n      path`/evals/${eval_id}/runs/${runID}/output_items`,\n      CursorPage<OutputItemListResponse>,\n      { query, ...options, __security: { bearerAuth: true } },\n    );\n  }\n}\n\nexport type OutputItemListResponsesPage = CursorPage<OutputItemListResponse>;\n\n/**\n * A schema representing an evaluation run output item.\n */\nexport interface OutputItemRetrieveResponse {\n  /**\n   * Unique identifier for the evaluation run output item.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (in seconds) when the evaluation run was created.\n   */\n  created_at: number;\n\n  /**\n   * Details of the input data source item.\n   */\n  datasource_item: { [key: string]: unknown };\n\n  /**\n   * The identifier for the data source item.\n   */\n  datasource_item_id: number;\n\n  /**\n   * The identifier of the evaluation group.\n   */\n  eval_id: string;\n\n  /**\n   * The type of the object. Always \"eval.run.output_item\".\n   */\n  object: 'eval.run.output_item';\n\n  /**\n   * A list of grader results for this output item.\n   */\n  results: Array<OutputItemRetrieveResponse.Result>;\n\n  /**\n   * The identifier of the evaluation run associated with this output item.\n   */\n  run_id: string;\n\n  /**\n   * A sample containing the input and output of the evaluation run.\n   */\n  sample: OutputItemRetrieveResponse.Sample;\n\n  /**\n   * The status of the evaluation run.\n   */\n  status: string;\n}\n\nexport namespace OutputItemRetrieveResponse {\n  /**\n   * A single grader result for an evaluation run output item.\n   */\n  export interface Result {\n    /**\n     * The name of the grader.\n     */\n    name: string;\n\n    /**\n     * Whether the grader considered the output a pass.\n     */\n    passed: boolean;\n\n    /**\n     * The numeric score produced by the grader.\n     */\n    score: number;\n\n    /**\n     * Optional sample or intermediate data produced by the grader.\n     */\n    sample?: { [key: string]: unknown } | null;\n\n    /**\n     * The grader type (for example, \"string-check-grader\").\n     */\n    type?: string;\n\n    [k: string]: unknown;\n  }\n\n  /**\n   * A sample containing the input and output of the evaluation run.\n   */\n  export interface Sample {\n    /**\n     * An object representing an error response from the Eval API.\n     */\n    error: RunsAPI.EvalAPIError;\n\n    /**\n     * The reason why the sample generation was finished.\n     */\n    finish_reason: string;\n\n    /**\n     * An array of input messages.\n     */\n    input: Array<Sample.Input>;\n\n    /**\n     * The maximum number of tokens allowed for completion.\n     */\n    max_completion_tokens: number;\n\n    /**\n     * The model used for generating the sample.\n     */\n    model: string;\n\n    /**\n     * An array of output messages.\n     */\n    output: Array<Sample.Output>;\n\n    /**\n     * The seed used for generating the sample.\n     */\n    seed: number;\n\n    /**\n     * The sampling temperature used.\n     */\n    temperature: number;\n\n    /**\n     * The top_p value used for sampling.\n     */\n    top_p: number;\n\n    /**\n     * Token usage details for the sample.\n     */\n    usage: Sample.Usage;\n  }\n\n  export namespace Sample {\n    /**\n     * An input message.\n     */\n    export interface Input {\n      /**\n       * The content of the message.\n       */\n      content: string;\n\n      /**\n       * The role of the message sender (e.g., system, user, developer).\n       */\n      role: string;\n    }\n\n    export interface Output {\n      /**\n       * The content of the message.\n       */\n      content?: string;\n\n      /**\n       * The role of the message (e.g. \"system\", \"assistant\", \"user\").\n       */\n      role?: string;\n    }\n\n    /**\n     * Token usage details for the sample.\n     */\n    export interface Usage {\n      /**\n       * The number of tokens retrieved from cache.\n       */\n      cached_tokens: number;\n\n      /**\n       * The number of completion tokens generated.\n       */\n      completion_tokens: number;\n\n      /**\n       * The number of prompt tokens used.\n       */\n      prompt_tokens: number;\n\n      /**\n       * The total number of tokens used.\n       */\n      total_tokens: number;\n    }\n  }\n}\n\n/**\n * A schema representing an evaluation run output item.\n */\nexport interface OutputItemListResponse {\n  /**\n   * Unique identifier for the evaluation run output item.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (in seconds) when the evaluation run was created.\n   */\n  created_at: number;\n\n  /**\n   * Details of the input data source item.\n   */\n  datasource_item: { [key: string]: unknown };\n\n  /**\n   * The identifier for the data source item.\n   */\n  datasource_item_id: number;\n\n  /**\n   * The identifier of the evaluation group.\n   */\n  eval_id: string;\n\n  /**\n   * The type of the object. Always \"eval.run.output_item\".\n   */\n  object: 'eval.run.output_item';\n\n  /**\n   * A list of grader results for this output item.\n   */\n  results: Array<OutputItemListResponse.Result>;\n\n  /**\n   * The identifier of the evaluation run associated with this output item.\n   */\n  run_id: string;\n\n  /**\n   * A sample containing the input and output of the evaluation run.\n   */\n  sample: OutputItemListResponse.Sample;\n\n  /**\n   * The status of the evaluation run.\n   */\n  status: string;\n}\n\nexport namespace OutputItemListResponse {\n  /**\n   * A single grader result for an evaluation run output item.\n   */\n  export interface Result {\n    /**\n     * The name of the grader.\n     */\n    name: string;\n\n    /**\n     * Whether the grader considered the output a pass.\n     */\n    passed: boolean;\n\n    /**\n     * The numeric score produced by the grader.\n     */\n    score: number;\n\n    /**\n     * Optional sample or intermediate data produced by the grader.\n     */\n    sample?: { [key: string]: unknown } | null;\n\n    /**\n     * The grader type (for example, \"string-check-grader\").\n     */\n    type?: string;\n\n    [k: string]: unknown;\n  }\n\n  /**\n   * A sample containing the input and output of the evaluation run.\n   */\n  export interface Sample {\n    /**\n     * An object representing an error response from the Eval API.\n     */\n    error: RunsAPI.EvalAPIError;\n\n    /**\n     * The reason why the sample generation was finished.\n     */\n    finish_reason: string;\n\n    /**\n     * An array of input messages.\n     */\n    input: Array<Sample.Input>;\n\n    /**\n     * The maximum number of tokens allowed for completion.\n     */\n    max_completion_tokens: number;\n\n    /**\n     * The model used for generating the sample.\n     */\n    model: string;\n\n    /**\n     * An array of output messages.\n     */\n    output: Array<Sample.Output>;\n\n    /**\n     * The seed used for generating the sample.\n     */\n    seed: number;\n\n    /**\n     * The sampling temperature used.\n     */\n    temperature: number;\n\n    /**\n     * The top_p value used for sampling.\n     */\n    top_p: number;\n\n    /**\n     * Token usage details for the sample.\n     */\n    usage: Sample.Usage;\n  }\n\n  export namespace Sample {\n    /**\n     * An input message.\n     */\n    export interface Input {\n      /**\n       * The content of the message.\n       */\n      content: string;\n\n      /**\n       * The role of the message sender (e.g., system, user, developer).\n       */\n      role: string;\n    }\n\n    export interface Output {\n      /**\n       * The content of the message.\n       */\n      content?: string;\n\n      /**\n       * The role of the message (e.g. \"system\", \"assistant\", \"user\").\n       */\n      role?: string;\n    }\n\n    /**\n     * Token usage details for the sample.\n     */\n    export interface Usage {\n      /**\n       * The number of tokens retrieved from cache.\n       */\n      cached_tokens: number;\n\n      /**\n       * The number of completion tokens generated.\n       */\n      completion_tokens: number;\n\n      /**\n       * The number of prompt tokens used.\n       */\n      prompt_tokens: number;\n\n      /**\n       * The total number of tokens used.\n       */\n      total_tokens: number;\n    }\n  }\n}\n\nexport interface OutputItemRetrieveParams {\n  /**\n   * The ID of the evaluation to retrieve runs for.\n   */\n  eval_id: string;\n\n  /**\n   * The ID of the run to retrieve.\n   */\n  run_id: string;\n}\n\nexport interface OutputItemListParams extends CursorPageParams {\n  /**\n   * Path param: The ID of the evaluation to retrieve runs for.\n   */\n  eval_id: string;\n\n  /**\n   * Query param: Sort order for output items by timestamp. Use `asc` for ascending\n   * order or `desc` for descending order. Defaults to `asc`.\n   */\n  order?: 'asc' | 'desc';\n\n  /**\n   * Query param: Filter output items by status. Use `failed` to filter by failed\n   * output items or `pass` to filter by passed output items.\n   */\n  status?: 'fail' | 'pass';\n}\n\nexport declare namespace OutputItems {\n  export {\n    type OutputItemRetrieveResponse as OutputItemRetrieveResponse,\n    type OutputItemListResponse as OutputItemListResponse,\n    type OutputItemListResponsesPage as OutputItemListResponsesPage,\n    type OutputItemRetrieveParams as OutputItemRetrieveParams,\n    type OutputItemListParams as OutputItemListParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as Shared from '../../shared';\nimport * as GraderModelsAPI from '../../graders/grader-models';\nimport * as ResponsesAPI from '../../responses/responses';\nimport * as CompletionsAPI from '../../chat/completions/completions';\nimport * as OutputItemsAPI from './output-items';\nimport {\n  OutputItemListParams,\n  OutputItemListResponse,\n  OutputItemListResponsesPage,\n  OutputItemRetrieveParams,\n  OutputItemRetrieveResponse,\n  OutputItems,\n} from './output-items';\nimport { APIPromise } from '../../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pagination';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\n/**\n * Manage and run evals in the OpenAI platform.\n */\nexport class Runs extends APIResource {\n  outputItems: OutputItemsAPI.OutputItems = new OutputItemsAPI.OutputItems(this._client);\n\n  /**\n   * Kicks off a new run for a given evaluation, specifying the data source, and what\n   * model configuration to use to test. The datasource will be validated against the\n   * schema specified in the config of the evaluation.\n   */\n  create(evalID: string, body: RunCreateParams, options?: RequestOptions): APIPromise<RunCreateResponse> {\n    return this._client.post(path`/evals/${evalID}/runs`, {\n      body,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Get an evaluation run by ID.\n   */\n  retrieve(\n    runID: string,\n    params: RunRetrieveParams,\n    options?: RequestOptions,\n  ): APIPromise<RunRetrieveResponse> {\n    const { eval_id } = params;\n    return this._client.get(path`/evals/${eval_id}/runs/${runID}`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Get a list of runs for an evaluation.\n   */\n  list(\n    evalID: string,\n    query: RunListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<RunListResponsesPage, RunListResponse> {\n    return this._client.getAPIList(path`/evals/${evalID}/runs`, CursorPage<RunListResponse>, {\n      query,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Delete an eval run.\n   */\n  delete(runID: string, params: RunDeleteParams, options?: RequestOptions): APIPromise<RunDeleteResponse> {\n    const { eval_id } = params;\n    return this._client.delete(path`/evals/${eval_id}/runs/${runID}`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Cancel an ongoing evaluation run.\n   */\n  cancel(runID: string, params: RunCancelParams, options?: RequestOptions): APIPromise<RunCancelResponse> {\n    const { eval_id } = params;\n    return this._client.post(path`/evals/${eval_id}/runs/${runID}`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\nexport type RunListResponsesPage = CursorPage<RunListResponse>;\n\n/**\n * A CompletionsRunDataSource object describing a model sampling configuration.\n */\nexport interface CreateEvalCompletionsRunDataSource {\n  /**\n   * Determines what populates the `item` namespace in this run's data source.\n   */\n  source:\n    | CreateEvalCompletionsRunDataSource.FileContent\n    | CreateEvalCompletionsRunDataSource.FileID\n    | CreateEvalCompletionsRunDataSource.StoredCompletions;\n\n  /**\n   * The type of run data source. Always `completions`.\n   */\n  type: 'completions';\n\n  /**\n   * Used when sampling from a model. Dictates the structure of the messages passed\n   * into the model. Can either be a reference to a prebuilt trajectory (ie,\n   * `item.input_trajectory`), or a template with variable references to the `item`\n   * namespace.\n   */\n  input_messages?:\n    | CreateEvalCompletionsRunDataSource.Template\n    | CreateEvalCompletionsRunDataSource.ItemReference;\n\n  /**\n   * The name of the model to use for generating completions (e.g. \"o3-mini\").\n   */\n  model?: string;\n\n  sampling_params?: CreateEvalCompletionsRunDataSource.SamplingParams;\n}\n\nexport namespace CreateEvalCompletionsRunDataSource {\n  export interface FileContent {\n    /**\n     * The content of the jsonl file.\n     */\n    content: Array<FileContent.Content>;\n\n    /**\n     * The type of jsonl source. Always `file_content`.\n     */\n    type: 'file_content';\n  }\n\n  export namespace FileContent {\n    export interface Content {\n      item: { [key: string]: unknown };\n\n      sample?: { [key: string]: unknown };\n    }\n  }\n\n  export interface FileID {\n    /**\n     * The identifier of the file.\n     */\n    id: string;\n\n    /**\n     * The type of jsonl source. Always `file_id`.\n     */\n    type: 'file_id';\n  }\n\n  /**\n   * A StoredCompletionsRunDataSource configuration describing a set of filters\n   */\n  export interface StoredCompletions {\n    /**\n     * The type of source. Always `stored_completions`.\n     */\n    type: 'stored_completions';\n\n    /**\n     * An optional Unix timestamp to filter items created after this time.\n     */\n    created_after?: number | null;\n\n    /**\n     * An optional Unix timestamp to filter items created before this time.\n     */\n    created_before?: number | null;\n\n    /**\n     * An optional maximum number of items to return.\n     */\n    limit?: number | null;\n\n    /**\n     * Set of 16 key-value pairs that can be attached to an object. This can be useful\n     * for storing additional information about the object in a structured format, and\n     * querying for objects via API or the dashboard.\n     *\n     * Keys are strings with a maximum length of 64 characters. Values are strings with\n     * a maximum length of 512 characters.\n     */\n    metadata?: Shared.Metadata | null;\n\n    /**\n     * An optional model to filter by (e.g., 'gpt-4o').\n     */\n    model?: string | null;\n  }\n\n  export interface Template {\n    /**\n     * A list of chat messages forming the prompt or context. May include variable\n     * references to the `item` namespace, ie {{item.name}}.\n     */\n    template: Array<ResponsesAPI.EasyInputMessage | Template.EvalItem>;\n\n    /**\n     * The type of input messages. Always `template`.\n     */\n    type: 'template';\n  }\n\n  export namespace Template {\n    /**\n     * A message input to the model with a role indicating instruction following\n     * hierarchy. Instructions given with the `developer` or `system` role take\n     * precedence over instructions given with the `user` role. Messages with the\n     * `assistant` role are presumed to have been generated by the model in previous\n     * interactions.\n     */\n    export interface EvalItem {\n      /**\n       * Inputs to the model - can contain template strings. Supports text, output text,\n       * input images, and input audio, either as a single item or an array of items.\n       */\n      content:\n        | string\n        | ResponsesAPI.ResponseInputText\n        | EvalItem.OutputText\n        | EvalItem.InputImage\n        | ResponsesAPI.ResponseInputAudio\n        | GraderModelsAPI.GraderInputs;\n\n      /**\n       * The role of the message input. One of `user`, `assistant`, `system`, or\n       * `developer`.\n       */\n      role: 'user' | 'assistant' | 'system' | 'developer';\n\n      /**\n       * The type of the message input. Always `message`.\n       */\n      type?: 'message';\n    }\n\n    export namespace EvalItem {\n      /**\n       * A text output from the model.\n       */\n      export interface OutputText {\n        /**\n         * The text output from the model.\n         */\n        text: string;\n\n        /**\n         * The type of the output text. Always `output_text`.\n         */\n        type: 'output_text';\n      }\n\n      /**\n       * An image input block used within EvalItem content arrays.\n       */\n      export interface InputImage {\n        /**\n         * The URL of the image input.\n         */\n        image_url: string;\n\n        /**\n         * The type of the image input. Always `input_image`.\n         */\n        type: 'input_image';\n\n        /**\n         * The detail level of the image to be sent to the model. One of `high`, `low`, or\n         * `auto`. Defaults to `auto`.\n         */\n        detail?: string;\n      }\n    }\n  }\n\n  export interface ItemReference {\n    /**\n     * A reference to a variable in the `item` namespace. Ie, \"item.input_trajectory\"\n     */\n    item_reference: string;\n\n    /**\n     * The type of input messages. Always `item_reference`.\n     */\n    type: 'item_reference';\n  }\n\n  export interface SamplingParams {\n    /**\n     * The maximum number of tokens in the generated output.\n     */\n    max_completion_tokens?: number;\n\n    /**\n     * Constrains effort on reasoning for\n     * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n     * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n     * Reducing reasoning effort can result in faster responses and fewer tokens used\n     * on reasoning in a response.\n     *\n     * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n     *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n     *   calls are supported for all reasoning values in gpt-5.1.\n     * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n     *   support `none`.\n     * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n     * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n     */\n    reasoning_effort?: Shared.ReasoningEffort | null;\n\n    /**\n     * An object specifying the format that the model must output.\n     *\n     * Setting to `{ \"type\": \"json_schema\", \"json_schema\": {...} }` enables Structured\n     * Outputs which ensures the model will match your supplied JSON schema. Learn more\n     * in the\n     * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n     *\n     * Setting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\n     * ensures the message the model generates is valid JSON. Using `json_schema` is\n     * preferred for models that support it.\n     */\n    response_format?:\n      | Shared.ResponseFormatText\n      | Shared.ResponseFormatJSONSchema\n      | Shared.ResponseFormatJSONObject;\n\n    /**\n     * A seed value to initialize the randomness, during sampling.\n     */\n    seed?: number;\n\n    /**\n     * A higher temperature increases randomness in the outputs.\n     */\n    temperature?: number;\n\n    /**\n     * A list of tools the model may call. Currently, only functions are supported as a\n     * tool. Use this to provide a list of functions the model may generate JSON inputs\n     * for. A max of 128 functions are supported.\n     */\n    tools?: Array<CompletionsAPI.ChatCompletionFunctionTool>;\n\n    /**\n     * An alternative to temperature for nucleus sampling; 1.0 includes all tokens.\n     */\n    top_p?: number;\n  }\n}\n\n/**\n * A JsonlRunDataSource object with that specifies a JSONL file that matches the\n * eval\n */\nexport interface CreateEvalJSONLRunDataSource {\n  /**\n   * Determines what populates the `item` namespace in the data source.\n   */\n  source: CreateEvalJSONLRunDataSource.FileContent | CreateEvalJSONLRunDataSource.FileID;\n\n  /**\n   * The type of data source. Always `jsonl`.\n   */\n  type: 'jsonl';\n}\n\nexport namespace CreateEvalJSONLRunDataSource {\n  export interface FileContent {\n    /**\n     * The content of the jsonl file.\n     */\n    content: Array<FileContent.Content>;\n\n    /**\n     * The type of jsonl source. Always `file_content`.\n     */\n    type: 'file_content';\n  }\n\n  export namespace FileContent {\n    export interface Content {\n      item: { [key: string]: unknown };\n\n      sample?: { [key: string]: unknown };\n    }\n  }\n\n  export interface FileID {\n    /**\n     * The identifier of the file.\n     */\n    id: string;\n\n    /**\n     * The type of jsonl source. Always `file_id`.\n     */\n    type: 'file_id';\n  }\n}\n\n/**\n * An object representing an error response from the Eval API.\n */\nexport interface EvalAPIError {\n  /**\n   * The error code.\n   */\n  code: string;\n\n  /**\n   * The error message.\n   */\n  message: string;\n}\n\n/**\n * A schema representing an evaluation run.\n */\nexport interface RunCreateResponse {\n  /**\n   * Unique identifier for the evaluation run.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (in seconds) when the evaluation run was created.\n   */\n  created_at: number;\n\n  /**\n   * Information about the run's data source.\n   */\n  data_source:\n    | CreateEvalJSONLRunDataSource\n    | CreateEvalCompletionsRunDataSource\n    | RunCreateResponse.Responses;\n\n  /**\n   * An object representing an error response from the Eval API.\n   */\n  error: EvalAPIError;\n\n  /**\n   * The identifier of the associated evaluation.\n   */\n  eval_id: string;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n\n  /**\n   * The model that is evaluated, if applicable.\n   */\n  model: string;\n\n  /**\n   * The name of the evaluation run.\n   */\n  name: string;\n\n  /**\n   * The type of the object. Always \"eval.run\".\n   */\n  object: 'eval.run';\n\n  /**\n   * Usage statistics for each model during the evaluation run.\n   */\n  per_model_usage: Array<RunCreateResponse.PerModelUsage>;\n\n  /**\n   * Results per testing criteria applied during the evaluation run.\n   */\n  per_testing_criteria_results: Array<RunCreateResponse.PerTestingCriteriaResult>;\n\n  /**\n   * The URL to the rendered evaluation run report on the UI dashboard.\n   */\n  report_url: string;\n\n  /**\n   * Counters summarizing the outcomes of the evaluation run.\n   */\n  result_counts: RunCreateResponse.ResultCounts;\n\n  /**\n   * The status of the evaluation run.\n   */\n  status: string;\n}\n\nexport namespace RunCreateResponse {\n  /**\n   * A ResponsesRunDataSource object describing a model sampling configuration.\n   */\n  export interface Responses {\n    /**\n     * Determines what populates the `item` namespace in this run's data source.\n     */\n    source: Responses.FileContent | Responses.FileID | Responses.Responses;\n\n    /**\n     * The type of run data source. Always `responses`.\n     */\n    type: 'responses';\n\n    /**\n     * Used when sampling from a model. Dictates the structure of the messages passed\n     * into the model. Can either be a reference to a prebuilt trajectory (ie,\n     * `item.input_trajectory`), or a template with variable references to the `item`\n     * namespace.\n     */\n    input_messages?: Responses.Template | Responses.ItemReference;\n\n    /**\n     * The name of the model to use for generating completions (e.g. \"o3-mini\").\n     */\n    model?: string;\n\n    sampling_params?: Responses.SamplingParams;\n  }\n\n  export namespace Responses {\n    export interface FileContent {\n      /**\n       * The content of the jsonl file.\n       */\n      content: Array<FileContent.Content>;\n\n      /**\n       * The type of jsonl source. Always `file_content`.\n       */\n      type: 'file_content';\n    }\n\n    export namespace FileContent {\n      export interface Content {\n        item: { [key: string]: unknown };\n\n        sample?: { [key: string]: unknown };\n      }\n    }\n\n    export interface FileID {\n      /**\n       * The identifier of the file.\n       */\n      id: string;\n\n      /**\n       * The type of jsonl source. Always `file_id`.\n       */\n      type: 'file_id';\n    }\n\n    /**\n     * A EvalResponsesSource object describing a run data source configuration.\n     */\n    export interface Responses {\n      /**\n       * The type of run data source. Always `responses`.\n       */\n      type: 'responses';\n\n      /**\n       * Only include items created after this timestamp (inclusive). This is a query\n       * parameter used to select responses.\n       */\n      created_after?: number | null;\n\n      /**\n       * Only include items created before this timestamp (inclusive). This is a query\n       * parameter used to select responses.\n       */\n      created_before?: number | null;\n\n      /**\n       * Optional string to search the 'instructions' field. This is a query parameter\n       * used to select responses.\n       */\n      instructions_search?: string | null;\n\n      /**\n       * Metadata filter for the responses. This is a query parameter used to select\n       * responses.\n       */\n      metadata?: unknown | null;\n\n      /**\n       * The name of the model to find responses for. This is a query parameter used to\n       * select responses.\n       */\n      model?: string | null;\n\n      /**\n       * Constrains effort on reasoning for\n       * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n       * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n       * Reducing reasoning effort can result in faster responses and fewer tokens used\n       * on reasoning in a response.\n       *\n       * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n       *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n       *   calls are supported for all reasoning values in gpt-5.1.\n       * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n       *   support `none`.\n       * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n       * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n       */\n      reasoning_effort?: Shared.ReasoningEffort | null;\n\n      /**\n       * Sampling temperature. This is a query parameter used to select responses.\n       */\n      temperature?: number | null;\n\n      /**\n       * List of tool names. This is a query parameter used to select responses.\n       */\n      tools?: Array<string> | null;\n\n      /**\n       * Nucleus sampling parameter. This is a query parameter used to select responses.\n       */\n      top_p?: number | null;\n\n      /**\n       * List of user identifiers. This is a query parameter used to select responses.\n       */\n      users?: Array<string> | null;\n    }\n\n    export interface Template {\n      /**\n       * A list of chat messages forming the prompt or context. May include variable\n       * references to the `item` namespace, ie {{item.name}}.\n       */\n      template: Array<Template.ChatMessage | Template.EvalItem>;\n\n      /**\n       * The type of input messages. Always `template`.\n       */\n      type: 'template';\n    }\n\n    export namespace Template {\n      export interface ChatMessage {\n        /**\n         * The content of the message.\n         */\n        content: string;\n\n        /**\n         * The role of the message (e.g. \"system\", \"assistant\", \"user\").\n         */\n        role: string;\n      }\n\n      /**\n       * A message input to the model with a role indicating instruction following\n       * hierarchy. Instructions given with the `developer` or `system` role take\n       * precedence over instructions given with the `user` role. Messages with the\n       * `assistant` role are presumed to have been generated by the model in previous\n       * interactions.\n       */\n      export interface EvalItem {\n        /**\n         * Inputs to the model - can contain template strings. Supports text, output text,\n         * input images, and input audio, either as a single item or an array of items.\n         */\n        content:\n          | string\n          | ResponsesAPI.ResponseInputText\n          | EvalItem.OutputText\n          | EvalItem.InputImage\n          | ResponsesAPI.ResponseInputAudio\n          | GraderModelsAPI.GraderInputs;\n\n        /**\n         * The role of the message input. One of `user`, `assistant`, `system`, or\n         * `developer`.\n         */\n        role: 'user' | 'assistant' | 'system' | 'developer';\n\n        /**\n         * The type of the message input. Always `message`.\n         */\n        type?: 'message';\n      }\n\n      export namespace EvalItem {\n        /**\n         * A text output from the model.\n         */\n        export interface OutputText {\n          /**\n           * The text output from the model.\n           */\n          text: string;\n\n          /**\n           * The type of the output text. Always `output_text`.\n           */\n          type: 'output_text';\n        }\n\n        /**\n         * An image input block used within EvalItem content arrays.\n         */\n        export interface InputImage {\n          /**\n           * The URL of the image input.\n           */\n          image_url: string;\n\n          /**\n           * The type of the image input. Always `input_image`.\n           */\n          type: 'input_image';\n\n          /**\n           * The detail level of the image to be sent to the model. One of `high`, `low`, or\n           * `auto`. Defaults to `auto`.\n           */\n          detail?: string;\n        }\n      }\n    }\n\n    export interface ItemReference {\n      /**\n       * A reference to a variable in the `item` namespace. Ie, \"item.name\"\n       */\n      item_reference: string;\n\n      /**\n       * The type of input messages. Always `item_reference`.\n       */\n      type: 'item_reference';\n    }\n\n    export interface SamplingParams {\n      /**\n       * The maximum number of tokens in the generated output.\n       */\n      max_completion_tokens?: number;\n\n      /**\n       * Constrains effort on reasoning for\n       * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n       * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n       * Reducing reasoning effort can result in faster responses and fewer tokens used\n       * on reasoning in a response.\n       *\n       * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n       *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n       *   calls are supported for all reasoning values in gpt-5.1.\n       * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n       *   support `none`.\n       * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n       * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n       */\n      reasoning_effort?: Shared.ReasoningEffort | null;\n\n      /**\n       * A seed value to initialize the randomness, during sampling.\n       */\n      seed?: number;\n\n      /**\n       * A higher temperature increases randomness in the outputs.\n       */\n      temperature?: number;\n\n      /**\n       * Configuration options for a text response from the model. Can be plain text or\n       * structured JSON data. Learn more:\n       *\n       * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n       * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n       */\n      text?: SamplingParams.Text;\n\n      /**\n       * An array of tools the model may call while generating a response. You can\n       * specify which tool to use by setting the `tool_choice` parameter.\n       *\n       * The two categories of tools you can provide the model are:\n       *\n       * - **Built-in tools**: Tools that are provided by OpenAI that extend the model's\n       *   capabilities, like\n       *   [web search](https://platform.openai.com/docs/guides/tools-web-search) or\n       *   [file search](https://platform.openai.com/docs/guides/tools-file-search).\n       *   Learn more about\n       *   [built-in tools](https://platform.openai.com/docs/guides/tools).\n       * - **Function calls (custom tools)**: Functions that are defined by you, enabling\n       *   the model to call your own code. Learn more about\n       *   [function calling](https://platform.openai.com/docs/guides/function-calling).\n       */\n      tools?: Array<ResponsesAPI.Tool>;\n\n      /**\n       * An alternative to temperature for nucleus sampling; 1.0 includes all tokens.\n       */\n      top_p?: number;\n    }\n\n    export namespace SamplingParams {\n      /**\n       * Configuration options for a text response from the model. Can be plain text or\n       * structured JSON data. Learn more:\n       *\n       * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n       * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n       */\n      export interface Text {\n        /**\n         * An object specifying the format that the model must output.\n         *\n         * Configuring `{ \"type\": \"json_schema\" }` enables Structured Outputs, which\n         * ensures the model will match your supplied JSON schema. Learn more in the\n         * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n         *\n         * The default format is `{ \"type\": \"text\" }` with no additional options.\n         *\n         * **Not recommended for gpt-4o and newer models:**\n         *\n         * Setting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\n         * ensures the message the model generates is valid JSON. Using `json_schema` is\n         * preferred for models that support it.\n         */\n        format?: ResponsesAPI.ResponseFormatTextConfig;\n      }\n    }\n  }\n\n  export interface PerModelUsage {\n    /**\n     * The number of tokens retrieved from cache.\n     */\n    cached_tokens: number;\n\n    /**\n     * The number of completion tokens generated.\n     */\n    completion_tokens: number;\n\n    /**\n     * The number of invocations.\n     */\n    invocation_count: number;\n\n    /**\n     * The name of the model.\n     */\n    model_name: string;\n\n    /**\n     * The number of prompt tokens used.\n     */\n    prompt_tokens: number;\n\n    /**\n     * The total number of tokens used.\n     */\n    total_tokens: number;\n  }\n\n  export interface PerTestingCriteriaResult {\n    /**\n     * Number of tests failed for this criteria.\n     */\n    failed: number;\n\n    /**\n     * Number of tests passed for this criteria.\n     */\n    passed: number;\n\n    /**\n     * A description of the testing criteria.\n     */\n    testing_criteria: string;\n  }\n\n  /**\n   * Counters summarizing the outcomes of the evaluation run.\n   */\n  export interface ResultCounts {\n    /**\n     * Number of output items that resulted in an error.\n     */\n    errored: number;\n\n    /**\n     * Number of output items that failed to pass the evaluation.\n     */\n    failed: number;\n\n    /**\n     * Number of output items that passed the evaluation.\n     */\n    passed: number;\n\n    /**\n     * Total number of executed output items.\n     */\n    total: number;\n  }\n}\n\n/**\n * A schema representing an evaluation run.\n */\nexport interface RunRetrieveResponse {\n  /**\n   * Unique identifier for the evaluation run.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (in seconds) when the evaluation run was created.\n   */\n  created_at: number;\n\n  /**\n   * Information about the run's data source.\n   */\n  data_source:\n    | CreateEvalJSONLRunDataSource\n    | CreateEvalCompletionsRunDataSource\n    | RunRetrieveResponse.Responses;\n\n  /**\n   * An object representing an error response from the Eval API.\n   */\n  error: EvalAPIError;\n\n  /**\n   * The identifier of the associated evaluation.\n   */\n  eval_id: string;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n\n  /**\n   * The model that is evaluated, if applicable.\n   */\n  model: string;\n\n  /**\n   * The name of the evaluation run.\n   */\n  name: string;\n\n  /**\n   * The type of the object. Always \"eval.run\".\n   */\n  object: 'eval.run';\n\n  /**\n   * Usage statistics for each model during the evaluation run.\n   */\n  per_model_usage: Array<RunRetrieveResponse.PerModelUsage>;\n\n  /**\n   * Results per testing criteria applied during the evaluation run.\n   */\n  per_testing_criteria_results: Array<RunRetrieveResponse.PerTestingCriteriaResult>;\n\n  /**\n   * The URL to the rendered evaluation run report on the UI dashboard.\n   */\n  report_url: string;\n\n  /**\n   * Counters summarizing the outcomes of the evaluation run.\n   */\n  result_counts: RunRetrieveResponse.ResultCounts;\n\n  /**\n   * The status of the evaluation run.\n   */\n  status: string;\n}\n\nexport namespace RunRetrieveResponse {\n  /**\n   * A ResponsesRunDataSource object describing a model sampling configuration.\n   */\n  export interface Responses {\n    /**\n     * Determines what populates the `item` namespace in this run's data source.\n     */\n    source: Responses.FileContent | Responses.FileID | Responses.Responses;\n\n    /**\n     * The type of run data source. Always `responses`.\n     */\n    type: 'responses';\n\n    /**\n     * Used when sampling from a model. Dictates the structure of the messages passed\n     * into the model. Can either be a reference to a prebuilt trajectory (ie,\n     * `item.input_trajectory`), or a template with variable references to the `item`\n     * namespace.\n     */\n    input_messages?: Responses.Template | Responses.ItemReference;\n\n    /**\n     * The name of the model to use for generating completions (e.g. \"o3-mini\").\n     */\n    model?: string;\n\n    sampling_params?: Responses.SamplingParams;\n  }\n\n  export namespace Responses {\n    export interface FileContent {\n      /**\n       * The content of the jsonl file.\n       */\n      content: Array<FileContent.Content>;\n\n      /**\n       * The type of jsonl source. Always `file_content`.\n       */\n      type: 'file_content';\n    }\n\n    export namespace FileContent {\n      export interface Content {\n        item: { [key: string]: unknown };\n\n        sample?: { [key: string]: unknown };\n      }\n    }\n\n    export interface FileID {\n      /**\n       * The identifier of the file.\n       */\n      id: string;\n\n      /**\n       * The type of jsonl source. Always `file_id`.\n       */\n      type: 'file_id';\n    }\n\n    /**\n     * A EvalResponsesSource object describing a run data source configuration.\n     */\n    export interface Responses {\n      /**\n       * The type of run data source. Always `responses`.\n       */\n      type: 'responses';\n\n      /**\n       * Only include items created after this timestamp (inclusive). This is a query\n       * parameter used to select responses.\n       */\n      created_after?: number | null;\n\n      /**\n       * Only include items created before this timestamp (inclusive). This is a query\n       * parameter used to select responses.\n       */\n      created_before?: number | null;\n\n      /**\n       * Optional string to search the 'instructions' field. This is a query parameter\n       * used to select responses.\n       */\n      instructions_search?: string | null;\n\n      /**\n       * Metadata filter for the responses. This is a query parameter used to select\n       * responses.\n       */\n      metadata?: unknown | null;\n\n      /**\n       * The name of the model to find responses for. This is a query parameter used to\n       * select responses.\n       */\n      model?: string | null;\n\n      /**\n       * Constrains effort on reasoning for\n       * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n       * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n       * Reducing reasoning effort can result in faster responses and fewer tokens used\n       * on reasoning in a response.\n       *\n       * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n       *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n       *   calls are supported for all reasoning values in gpt-5.1.\n       * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n       *   support `none`.\n       * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n       * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n       */\n      reasoning_effort?: Shared.ReasoningEffort | null;\n\n      /**\n       * Sampling temperature. This is a query parameter used to select responses.\n       */\n      temperature?: number | null;\n\n      /**\n       * List of tool names. This is a query parameter used to select responses.\n       */\n      tools?: Array<string> | null;\n\n      /**\n       * Nucleus sampling parameter. This is a query parameter used to select responses.\n       */\n      top_p?: number | null;\n\n      /**\n       * List of user identifiers. This is a query parameter used to select responses.\n       */\n      users?: Array<string> | null;\n    }\n\n    export interface Template {\n      /**\n       * A list of chat messages forming the prompt or context. May include variable\n       * references to the `item` namespace, ie {{item.name}}.\n       */\n      template: Array<Template.ChatMessage | Template.EvalItem>;\n\n      /**\n       * The type of input messages. Always `template`.\n       */\n      type: 'template';\n    }\n\n    export namespace Template {\n      export interface ChatMessage {\n        /**\n         * The content of the message.\n         */\n        content: string;\n\n        /**\n         * The role of the message (e.g. \"system\", \"assistant\", \"user\").\n         */\n        role: string;\n      }\n\n      /**\n       * A message input to the model with a role indicating instruction following\n       * hierarchy. Instructions given with the `developer` or `system` role take\n       * precedence over instructions given with the `user` role. Messages with the\n       * `assistant` role are presumed to have been generated by the model in previous\n       * interactions.\n       */\n      export interface EvalItem {\n        /**\n         * Inputs to the model - can contain template strings. Supports text, output text,\n         * input images, and input audio, either as a single item or an array of items.\n         */\n        content:\n          | string\n          | ResponsesAPI.ResponseInputText\n          | EvalItem.OutputText\n          | EvalItem.InputImage\n          | ResponsesAPI.ResponseInputAudio\n          | GraderModelsAPI.GraderInputs;\n\n        /**\n         * The role of the message input. One of `user`, `assistant`, `system`, or\n         * `developer`.\n         */\n        role: 'user' | 'assistant' | 'system' | 'developer';\n\n        /**\n         * The type of the message input. Always `message`.\n         */\n        type?: 'message';\n      }\n\n      export namespace EvalItem {\n        /**\n         * A text output from the model.\n         */\n        export interface OutputText {\n          /**\n           * The text output from the model.\n           */\n          text: string;\n\n          /**\n           * The type of the output text. Always `output_text`.\n           */\n          type: 'output_text';\n        }\n\n        /**\n         * An image input block used within EvalItem content arrays.\n         */\n        export interface InputImage {\n          /**\n           * The URL of the image input.\n           */\n          image_url: string;\n\n          /**\n           * The type of the image input. Always `input_image`.\n           */\n          type: 'input_image';\n\n          /**\n           * The detail level of the image to be sent to the model. One of `high`, `low`, or\n           * `auto`. Defaults to `auto`.\n           */\n          detail?: string;\n        }\n      }\n    }\n\n    export interface ItemReference {\n      /**\n       * A reference to a variable in the `item` namespace. Ie, \"item.name\"\n       */\n      item_reference: string;\n\n      /**\n       * The type of input messages. Always `item_reference`.\n       */\n      type: 'item_reference';\n    }\n\n    export interface SamplingParams {\n      /**\n       * The maximum number of tokens in the generated output.\n       */\n      max_completion_tokens?: number;\n\n      /**\n       * Constrains effort on reasoning for\n       * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n       * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n       * Reducing reasoning effort can result in faster responses and fewer tokens used\n       * on reasoning in a response.\n       *\n       * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n       *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n       *   calls are supported for all reasoning values in gpt-5.1.\n       * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n       *   support `none`.\n       * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n       * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n       */\n      reasoning_effort?: Shared.ReasoningEffort | null;\n\n      /**\n       * A seed value to initialize the randomness, during sampling.\n       */\n      seed?: number;\n\n      /**\n       * A higher temperature increases randomness in the outputs.\n       */\n      temperature?: number;\n\n      /**\n       * Configuration options for a text response from the model. Can be plain text or\n       * structured JSON data. Learn more:\n       *\n       * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n       * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n       */\n      text?: SamplingParams.Text;\n\n      /**\n       * An array of tools the model may call while generating a response. You can\n       * specify which tool to use by setting the `tool_choice` parameter.\n       *\n       * The two categories of tools you can provide the model are:\n       *\n       * - **Built-in tools**: Tools that are provided by OpenAI that extend the model's\n       *   capabilities, like\n       *   [web search](https://platform.openai.com/docs/guides/tools-web-search) or\n       *   [file search](https://platform.openai.com/docs/guides/tools-file-search).\n       *   Learn more about\n       *   [built-in tools](https://platform.openai.com/docs/guides/tools).\n       * - **Function calls (custom tools)**: Functions that are defined by you, enabling\n       *   the model to call your own code. Learn more about\n       *   [function calling](https://platform.openai.com/docs/guides/function-calling).\n       */\n      tools?: Array<ResponsesAPI.Tool>;\n\n      /**\n       * An alternative to temperature for nucleus sampling; 1.0 includes all tokens.\n       */\n      top_p?: number;\n    }\n\n    export namespace SamplingParams {\n      /**\n       * Configuration options for a text response from the model. Can be plain text or\n       * structured JSON data. Learn more:\n       *\n       * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n       * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n       */\n      export interface Text {\n        /**\n         * An object specifying the format that the model must output.\n         *\n         * Configuring `{ \"type\": \"json_schema\" }` enables Structured Outputs, which\n         * ensures the model will match your supplied JSON schema. Learn more in the\n         * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n         *\n         * The default format is `{ \"type\": \"text\" }` with no additional options.\n         *\n         * **Not recommended for gpt-4o and newer models:**\n         *\n         * Setting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\n         * ensures the message the model generates is valid JSON. Using `json_schema` is\n         * preferred for models that support it.\n         */\n        format?: ResponsesAPI.ResponseFormatTextConfig;\n      }\n    }\n  }\n\n  export interface PerModelUsage {\n    /**\n     * The number of tokens retrieved from cache.\n     */\n    cached_tokens: number;\n\n    /**\n     * The number of completion tokens generated.\n     */\n    completion_tokens: number;\n\n    /**\n     * The number of invocations.\n     */\n    invocation_count: number;\n\n    /**\n     * The name of the model.\n     */\n    model_name: string;\n\n    /**\n     * The number of prompt tokens used.\n     */\n    prompt_tokens: number;\n\n    /**\n     * The total number of tokens used.\n     */\n    total_tokens: number;\n  }\n\n  export interface PerTestingCriteriaResult {\n    /**\n     * Number of tests failed for this criteria.\n     */\n    failed: number;\n\n    /**\n     * Number of tests passed for this criteria.\n     */\n    passed: number;\n\n    /**\n     * A description of the testing criteria.\n     */\n    testing_criteria: string;\n  }\n\n  /**\n   * Counters summarizing the outcomes of the evaluation run.\n   */\n  export interface ResultCounts {\n    /**\n     * Number of output items that resulted in an error.\n     */\n    errored: number;\n\n    /**\n     * Number of output items that failed to pass the evaluation.\n     */\n    failed: number;\n\n    /**\n     * Number of output items that passed the evaluation.\n     */\n    passed: number;\n\n    /**\n     * Total number of executed output items.\n     */\n    total: number;\n  }\n}\n\n/**\n * A schema representing an evaluation run.\n */\nexport interface RunListResponse {\n  /**\n   * Unique identifier for the evaluation run.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (in seconds) when the evaluation run was created.\n   */\n  created_at: number;\n\n  /**\n   * Information about the run's data source.\n   */\n  data_source: CreateEvalJSONLRunDataSource | CreateEvalCompletionsRunDataSource | RunListResponse.Responses;\n\n  /**\n   * An object representing an error response from the Eval API.\n   */\n  error: EvalAPIError;\n\n  /**\n   * The identifier of the associated evaluation.\n   */\n  eval_id: string;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n\n  /**\n   * The model that is evaluated, if applicable.\n   */\n  model: string;\n\n  /**\n   * The name of the evaluation run.\n   */\n  name: string;\n\n  /**\n   * The type of the object. Always \"eval.run\".\n   */\n  object: 'eval.run';\n\n  /**\n   * Usage statistics for each model during the evaluation run.\n   */\n  per_model_usage: Array<RunListResponse.PerModelUsage>;\n\n  /**\n   * Results per testing criteria applied during the evaluation run.\n   */\n  per_testing_criteria_results: Array<RunListResponse.PerTestingCriteriaResult>;\n\n  /**\n   * The URL to the rendered evaluation run report on the UI dashboard.\n   */\n  report_url: string;\n\n  /**\n   * Counters summarizing the outcomes of the evaluation run.\n   */\n  result_counts: RunListResponse.ResultCounts;\n\n  /**\n   * The status of the evaluation run.\n   */\n  status: string;\n}\n\nexport namespace RunListResponse {\n  /**\n   * A ResponsesRunDataSource object describing a model sampling configuration.\n   */\n  export interface Responses {\n    /**\n     * Determines what populates the `item` namespace in this run's data source.\n     */\n    source: Responses.FileContent | Responses.FileID | Responses.Responses;\n\n    /**\n     * The type of run data source. Always `responses`.\n     */\n    type: 'responses';\n\n    /**\n     * Used when sampling from a model. Dictates the structure of the messages passed\n     * into the model. Can either be a reference to a prebuilt trajectory (ie,\n     * `item.input_trajectory`), or a template with variable references to the `item`\n     * namespace.\n     */\n    input_messages?: Responses.Template | Responses.ItemReference;\n\n    /**\n     * The name of the model to use for generating completions (e.g. \"o3-mini\").\n     */\n    model?: string;\n\n    sampling_params?: Responses.SamplingParams;\n  }\n\n  export namespace Responses {\n    export interface FileContent {\n      /**\n       * The content of the jsonl file.\n       */\n      content: Array<FileContent.Content>;\n\n      /**\n       * The type of jsonl source. Always `file_content`.\n       */\n      type: 'file_content';\n    }\n\n    export namespace FileContent {\n      export interface Content {\n        item: { [key: string]: unknown };\n\n        sample?: { [key: string]: unknown };\n      }\n    }\n\n    export interface FileID {\n      /**\n       * The identifier of the file.\n       */\n      id: string;\n\n      /**\n       * The type of jsonl source. Always `file_id`.\n       */\n      type: 'file_id';\n    }\n\n    /**\n     * A EvalResponsesSource object describing a run data source configuration.\n     */\n    export interface Responses {\n      /**\n       * The type of run data source. Always `responses`.\n       */\n      type: 'responses';\n\n      /**\n       * Only include items created after this timestamp (inclusive). This is a query\n       * parameter used to select responses.\n       */\n      created_after?: number | null;\n\n      /**\n       * Only include items created before this timestamp (inclusive). This is a query\n       * parameter used to select responses.\n       */\n      created_before?: number | null;\n\n      /**\n       * Optional string to search the 'instructions' field. This is a query parameter\n       * used to select responses.\n       */\n      instructions_search?: string | null;\n\n      /**\n       * Metadata filter for the responses. This is a query parameter used to select\n       * responses.\n       */\n      metadata?: unknown | null;\n\n      /**\n       * The name of the model to find responses for. This is a query parameter used to\n       * select responses.\n       */\n      model?: string | null;\n\n      /**\n       * Constrains effort on reasoning for\n       * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n       * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n       * Reducing reasoning effort can result in faster responses and fewer tokens used\n       * on reasoning in a response.\n       *\n       * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n       *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n       *   calls are supported for all reasoning values in gpt-5.1.\n       * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n       *   support `none`.\n       * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n       * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n       */\n      reasoning_effort?: Shared.ReasoningEffort | null;\n\n      /**\n       * Sampling temperature. This is a query parameter used to select responses.\n       */\n      temperature?: number | null;\n\n      /**\n       * List of tool names. This is a query parameter used to select responses.\n       */\n      tools?: Array<string> | null;\n\n      /**\n       * Nucleus sampling parameter. This is a query parameter used to select responses.\n       */\n      top_p?: number | null;\n\n      /**\n       * List of user identifiers. This is a query parameter used to select responses.\n       */\n      users?: Array<string> | null;\n    }\n\n    export interface Template {\n      /**\n       * A list of chat messages forming the prompt or context. May include variable\n       * references to the `item` namespace, ie {{item.name}}.\n       */\n      template: Array<Template.ChatMessage | Template.EvalItem>;\n\n      /**\n       * The type of input messages. Always `template`.\n       */\n      type: 'template';\n    }\n\n    export namespace Template {\n      export interface ChatMessage {\n        /**\n         * The content of the message.\n         */\n        content: string;\n\n        /**\n         * The role of the message (e.g. \"system\", \"assistant\", \"user\").\n         */\n        role: string;\n      }\n\n      /**\n       * A message input to the model with a role indicating instruction following\n       * hierarchy. Instructions given with the `developer` or `system` role take\n       * precedence over instructions given with the `user` role. Messages with the\n       * `assistant` role are presumed to have been generated by the model in previous\n       * interactions.\n       */\n      export interface EvalItem {\n        /**\n         * Inputs to the model - can contain template strings. Supports text, output text,\n         * input images, and input audio, either as a single item or an array of items.\n         */\n        content:\n          | string\n          | ResponsesAPI.ResponseInputText\n          | EvalItem.OutputText\n          | EvalItem.InputImage\n          | ResponsesAPI.ResponseInputAudio\n          | GraderModelsAPI.GraderInputs;\n\n        /**\n         * The role of the message input. One of `user`, `assistant`, `system`, or\n         * `developer`.\n         */\n        role: 'user' | 'assistant' | 'system' | 'developer';\n\n        /**\n         * The type of the message input. Always `message`.\n         */\n        type?: 'message';\n      }\n\n      export namespace EvalItem {\n        /**\n         * A text output from the model.\n         */\n        export interface OutputText {\n          /**\n           * The text output from the model.\n           */\n          text: string;\n\n          /**\n           * The type of the output text. Always `output_text`.\n           */\n          type: 'output_text';\n        }\n\n        /**\n         * An image input block used within EvalItem content arrays.\n         */\n        export interface InputImage {\n          /**\n           * The URL of the image input.\n           */\n          image_url: string;\n\n          /**\n           * The type of the image input. Always `input_image`.\n           */\n          type: 'input_image';\n\n          /**\n           * The detail level of the image to be sent to the model. One of `high`, `low`, or\n           * `auto`. Defaults to `auto`.\n           */\n          detail?: string;\n        }\n      }\n    }\n\n    export interface ItemReference {\n      /**\n       * A reference to a variable in the `item` namespace. Ie, \"item.name\"\n       */\n      item_reference: string;\n\n      /**\n       * The type of input messages. Always `item_reference`.\n       */\n      type: 'item_reference';\n    }\n\n    export interface SamplingParams {\n      /**\n       * The maximum number of tokens in the generated output.\n       */\n      max_completion_tokens?: number;\n\n      /**\n       * Constrains effort on reasoning for\n       * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n       * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n       * Reducing reasoning effort can result in faster responses and fewer tokens used\n       * on reasoning in a response.\n       *\n       * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n       *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n       *   calls are supported for all reasoning values in gpt-5.1.\n       * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n       *   support `none`.\n       * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n       * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n       */\n      reasoning_effort?: Shared.ReasoningEffort | null;\n\n      /**\n       * A seed value to initialize the randomness, during sampling.\n       */\n      seed?: number;\n\n      /**\n       * A higher temperature increases randomness in the outputs.\n       */\n      temperature?: number;\n\n      /**\n       * Configuration options for a text response from the model. Can be plain text or\n       * structured JSON data. Learn more:\n       *\n       * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n       * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n       */\n      text?: SamplingParams.Text;\n\n      /**\n       * An array of tools the model may call while generating a response. You can\n       * specify which tool to use by setting the `tool_choice` parameter.\n       *\n       * The two categories of tools you can provide the model are:\n       *\n       * - **Built-in tools**: Tools that are provided by OpenAI that extend the model's\n       *   capabilities, like\n       *   [web search](https://platform.openai.com/docs/guides/tools-web-search) or\n       *   [file search](https://platform.openai.com/docs/guides/tools-file-search).\n       *   Learn more about\n       *   [built-in tools](https://platform.openai.com/docs/guides/tools).\n       * - **Function calls (custom tools)**: Functions that are defined by you, enabling\n       *   the model to call your own code. Learn more about\n       *   [function calling](https://platform.openai.com/docs/guides/function-calling).\n       */\n      tools?: Array<ResponsesAPI.Tool>;\n\n      /**\n       * An alternative to temperature for nucleus sampling; 1.0 includes all tokens.\n       */\n      top_p?: number;\n    }\n\n    export namespace SamplingParams {\n      /**\n       * Configuration options for a text response from the model. Can be plain text or\n       * structured JSON data. Learn more:\n       *\n       * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n       * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n       */\n      export interface Text {\n        /**\n         * An object specifying the format that the model must output.\n         *\n         * Configuring `{ \"type\": \"json_schema\" }` enables Structured Outputs, which\n         * ensures the model will match your supplied JSON schema. Learn more in the\n         * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n         *\n         * The default format is `{ \"type\": \"text\" }` with no additional options.\n         *\n         * **Not recommended for gpt-4o and newer models:**\n         *\n         * Setting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\n         * ensures the message the model generates is valid JSON. Using `json_schema` is\n         * preferred for models that support it.\n         */\n        format?: ResponsesAPI.ResponseFormatTextConfig;\n      }\n    }\n  }\n\n  export interface PerModelUsage {\n    /**\n     * The number of tokens retrieved from cache.\n     */\n    cached_tokens: number;\n\n    /**\n     * The number of completion tokens generated.\n     */\n    completion_tokens: number;\n\n    /**\n     * The number of invocations.\n     */\n    invocation_count: number;\n\n    /**\n     * The name of the model.\n     */\n    model_name: string;\n\n    /**\n     * The number of prompt tokens used.\n     */\n    prompt_tokens: number;\n\n    /**\n     * The total number of tokens used.\n     */\n    total_tokens: number;\n  }\n\n  export interface PerTestingCriteriaResult {\n    /**\n     * Number of tests failed for this criteria.\n     */\n    failed: number;\n\n    /**\n     * Number of tests passed for this criteria.\n     */\n    passed: number;\n\n    /**\n     * A description of the testing criteria.\n     */\n    testing_criteria: string;\n  }\n\n  /**\n   * Counters summarizing the outcomes of the evaluation run.\n   */\n  export interface ResultCounts {\n    /**\n     * Number of output items that resulted in an error.\n     */\n    errored: number;\n\n    /**\n     * Number of output items that failed to pass the evaluation.\n     */\n    failed: number;\n\n    /**\n     * Number of output items that passed the evaluation.\n     */\n    passed: number;\n\n    /**\n     * Total number of executed output items.\n     */\n    total: number;\n  }\n}\n\nexport interface RunDeleteResponse {\n  deleted?: boolean;\n\n  object?: string;\n\n  run_id?: string;\n}\n\n/**\n * A schema representing an evaluation run.\n */\nexport interface RunCancelResponse {\n  /**\n   * Unique identifier for the evaluation run.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (in seconds) when the evaluation run was created.\n   */\n  created_at: number;\n\n  /**\n   * Information about the run's data source.\n   */\n  data_source:\n    | CreateEvalJSONLRunDataSource\n    | CreateEvalCompletionsRunDataSource\n    | RunCancelResponse.Responses;\n\n  /**\n   * An object representing an error response from the Eval API.\n   */\n  error: EvalAPIError;\n\n  /**\n   * The identifier of the associated evaluation.\n   */\n  eval_id: string;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n\n  /**\n   * The model that is evaluated, if applicable.\n   */\n  model: string;\n\n  /**\n   * The name of the evaluation run.\n   */\n  name: string;\n\n  /**\n   * The type of the object. Always \"eval.run\".\n   */\n  object: 'eval.run';\n\n  /**\n   * Usage statistics for each model during the evaluation run.\n   */\n  per_model_usage: Array<RunCancelResponse.PerModelUsage>;\n\n  /**\n   * Results per testing criteria applied during the evaluation run.\n   */\n  per_testing_criteria_results: Array<RunCancelResponse.PerTestingCriteriaResult>;\n\n  /**\n   * The URL to the rendered evaluation run report on the UI dashboard.\n   */\n  report_url: string;\n\n  /**\n   * Counters summarizing the outcomes of the evaluation run.\n   */\n  result_counts: RunCancelResponse.ResultCounts;\n\n  /**\n   * The status of the evaluation run.\n   */\n  status: string;\n}\n\nexport namespace RunCancelResponse {\n  /**\n   * A ResponsesRunDataSource object describing a model sampling configuration.\n   */\n  export interface Responses {\n    /**\n     * Determines what populates the `item` namespace in this run's data source.\n     */\n    source: Responses.FileContent | Responses.FileID | Responses.Responses;\n\n    /**\n     * The type of run data source. Always `responses`.\n     */\n    type: 'responses';\n\n    /**\n     * Used when sampling from a model. Dictates the structure of the messages passed\n     * into the model. Can either be a reference to a prebuilt trajectory (ie,\n     * `item.input_trajectory`), or a template with variable references to the `item`\n     * namespace.\n     */\n    input_messages?: Responses.Template | Responses.ItemReference;\n\n    /**\n     * The name of the model to use for generating completions (e.g. \"o3-mini\").\n     */\n    model?: string;\n\n    sampling_params?: Responses.SamplingParams;\n  }\n\n  export namespace Responses {\n    export interface FileContent {\n      /**\n       * The content of the jsonl file.\n       */\n      content: Array<FileContent.Content>;\n\n      /**\n       * The type of jsonl source. Always `file_content`.\n       */\n      type: 'file_content';\n    }\n\n    export namespace FileContent {\n      export interface Content {\n        item: { [key: string]: unknown };\n\n        sample?: { [key: string]: unknown };\n      }\n    }\n\n    export interface FileID {\n      /**\n       * The identifier of the file.\n       */\n      id: string;\n\n      /**\n       * The type of jsonl source. Always `file_id`.\n       */\n      type: 'file_id';\n    }\n\n    /**\n     * A EvalResponsesSource object describing a run data source configuration.\n     */\n    export interface Responses {\n      /**\n       * The type of run data source. Always `responses`.\n       */\n      type: 'responses';\n\n      /**\n       * Only include items created after this timestamp (inclusive). This is a query\n       * parameter used to select responses.\n       */\n      created_after?: number | null;\n\n      /**\n       * Only include items created before this timestamp (inclusive). This is a query\n       * parameter used to select responses.\n       */\n      created_before?: number | null;\n\n      /**\n       * Optional string to search the 'instructions' field. This is a query parameter\n       * used to select responses.\n       */\n      instructions_search?: string | null;\n\n      /**\n       * Metadata filter for the responses. This is a query parameter used to select\n       * responses.\n       */\n      metadata?: unknown | null;\n\n      /**\n       * The name of the model to find responses for. This is a query parameter used to\n       * select responses.\n       */\n      model?: string | null;\n\n      /**\n       * Constrains effort on reasoning for\n       * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n       * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n       * Reducing reasoning effort can result in faster responses and fewer tokens used\n       * on reasoning in a response.\n       *\n       * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n       *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n       *   calls are supported for all reasoning values in gpt-5.1.\n       * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n       *   support `none`.\n       * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n       * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n       */\n      reasoning_effort?: Shared.ReasoningEffort | null;\n\n      /**\n       * Sampling temperature. This is a query parameter used to select responses.\n       */\n      temperature?: number | null;\n\n      /**\n       * List of tool names. This is a query parameter used to select responses.\n       */\n      tools?: Array<string> | null;\n\n      /**\n       * Nucleus sampling parameter. This is a query parameter used to select responses.\n       */\n      top_p?: number | null;\n\n      /**\n       * List of user identifiers. This is a query parameter used to select responses.\n       */\n      users?: Array<string> | null;\n    }\n\n    export interface Template {\n      /**\n       * A list of chat messages forming the prompt or context. May include variable\n       * references to the `item` namespace, ie {{item.name}}.\n       */\n      template: Array<Template.ChatMessage | Template.EvalItem>;\n\n      /**\n       * The type of input messages. Always `template`.\n       */\n      type: 'template';\n    }\n\n    export namespace Template {\n      export interface ChatMessage {\n        /**\n         * The content of the message.\n         */\n        content: string;\n\n        /**\n         * The role of the message (e.g. \"system\", \"assistant\", \"user\").\n         */\n        role: string;\n      }\n\n      /**\n       * A message input to the model with a role indicating instruction following\n       * hierarchy. Instructions given with the `developer` or `system` role take\n       * precedence over instructions given with the `user` role. Messages with the\n       * `assistant` role are presumed to have been generated by the model in previous\n       * interactions.\n       */\n      export interface EvalItem {\n        /**\n         * Inputs to the model - can contain template strings. Supports text, output text,\n         * input images, and input audio, either as a single item or an array of items.\n         */\n        content:\n          | string\n          | ResponsesAPI.ResponseInputText\n          | EvalItem.OutputText\n          | EvalItem.InputImage\n          | ResponsesAPI.ResponseInputAudio\n          | GraderModelsAPI.GraderInputs;\n\n        /**\n         * The role of the message input. One of `user`, `assistant`, `system`, or\n         * `developer`.\n         */\n        role: 'user' | 'assistant' | 'system' | 'developer';\n\n        /**\n         * The type of the message input. Always `message`.\n         */\n        type?: 'message';\n      }\n\n      export namespace EvalItem {\n        /**\n         * A text output from the model.\n         */\n        export interface OutputText {\n          /**\n           * The text output from the model.\n           */\n          text: string;\n\n          /**\n           * The type of the output text. Always `output_text`.\n           */\n          type: 'output_text';\n        }\n\n        /**\n         * An image input block used within EvalItem content arrays.\n         */\n        export interface InputImage {\n          /**\n           * The URL of the image input.\n           */\n          image_url: string;\n\n          /**\n           * The type of the image input. Always `input_image`.\n           */\n          type: 'input_image';\n\n          /**\n           * The detail level of the image to be sent to the model. One of `high`, `low`, or\n           * `auto`. Defaults to `auto`.\n           */\n          detail?: string;\n        }\n      }\n    }\n\n    export interface ItemReference {\n      /**\n       * A reference to a variable in the `item` namespace. Ie, \"item.name\"\n       */\n      item_reference: string;\n\n      /**\n       * The type of input messages. Always `item_reference`.\n       */\n      type: 'item_reference';\n    }\n\n    export interface SamplingParams {\n      /**\n       * The maximum number of tokens in the generated output.\n       */\n      max_completion_tokens?: number;\n\n      /**\n       * Constrains effort on reasoning for\n       * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n       * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n       * Reducing reasoning effort can result in faster responses and fewer tokens used\n       * on reasoning in a response.\n       *\n       * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n       *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n       *   calls are supported for all reasoning values in gpt-5.1.\n       * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n       *   support `none`.\n       * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n       * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n       */\n      reasoning_effort?: Shared.ReasoningEffort | null;\n\n      /**\n       * A seed value to initialize the randomness, during sampling.\n       */\n      seed?: number;\n\n      /**\n       * A higher temperature increases randomness in the outputs.\n       */\n      temperature?: number;\n\n      /**\n       * Configuration options for a text response from the model. Can be plain text or\n       * structured JSON data. Learn more:\n       *\n       * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n       * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n       */\n      text?: SamplingParams.Text;\n\n      /**\n       * An array of tools the model may call while generating a response. You can\n       * specify which tool to use by setting the `tool_choice` parameter.\n       *\n       * The two categories of tools you can provide the model are:\n       *\n       * - **Built-in tools**: Tools that are provided by OpenAI that extend the model's\n       *   capabilities, like\n       *   [web search](https://platform.openai.com/docs/guides/tools-web-search) or\n       *   [file search](https://platform.openai.com/docs/guides/tools-file-search).\n       *   Learn more about\n       *   [built-in tools](https://platform.openai.com/docs/guides/tools).\n       * - **Function calls (custom tools)**: Functions that are defined by you, enabling\n       *   the model to call your own code. Learn more about\n       *   [function calling](https://platform.openai.com/docs/guides/function-calling).\n       */\n      tools?: Array<ResponsesAPI.Tool>;\n\n      /**\n       * An alternative to temperature for nucleus sampling; 1.0 includes all tokens.\n       */\n      top_p?: number;\n    }\n\n    export namespace SamplingParams {\n      /**\n       * Configuration options for a text response from the model. Can be plain text or\n       * structured JSON data. Learn more:\n       *\n       * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n       * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n       */\n      export interface Text {\n        /**\n         * An object specifying the format that the model must output.\n         *\n         * Configuring `{ \"type\": \"json_schema\" }` enables Structured Outputs, which\n         * ensures the model will match your supplied JSON schema. Learn more in the\n         * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n         *\n         * The default format is `{ \"type\": \"text\" }` with no additional options.\n         *\n         * **Not recommended for gpt-4o and newer models:**\n         *\n         * Setting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\n         * ensures the message the model generates is valid JSON. Using `json_schema` is\n         * preferred for models that support it.\n         */\n        format?: ResponsesAPI.ResponseFormatTextConfig;\n      }\n    }\n  }\n\n  export interface PerModelUsage {\n    /**\n     * The number of tokens retrieved from cache.\n     */\n    cached_tokens: number;\n\n    /**\n     * The number of completion tokens generated.\n     */\n    completion_tokens: number;\n\n    /**\n     * The number of invocations.\n     */\n    invocation_count: number;\n\n    /**\n     * The name of the model.\n     */\n    model_name: string;\n\n    /**\n     * The number of prompt tokens used.\n     */\n    prompt_tokens: number;\n\n    /**\n     * The total number of tokens used.\n     */\n    total_tokens: number;\n  }\n\n  export interface PerTestingCriteriaResult {\n    /**\n     * Number of tests failed for this criteria.\n     */\n    failed: number;\n\n    /**\n     * Number of tests passed for this criteria.\n     */\n    passed: number;\n\n    /**\n     * A description of the testing criteria.\n     */\n    testing_criteria: string;\n  }\n\n  /**\n   * Counters summarizing the outcomes of the evaluation run.\n   */\n  export interface ResultCounts {\n    /**\n     * Number of output items that resulted in an error.\n     */\n    errored: number;\n\n    /**\n     * Number of output items that failed to pass the evaluation.\n     */\n    failed: number;\n\n    /**\n     * Number of output items that passed the evaluation.\n     */\n    passed: number;\n\n    /**\n     * Total number of executed output items.\n     */\n    total: number;\n  }\n}\n\nexport interface RunCreateParams {\n  /**\n   * Details about the run's data source.\n   */\n  data_source:\n    | CreateEvalJSONLRunDataSource\n    | CreateEvalCompletionsRunDataSource\n    | RunCreateParams.CreateEvalResponsesRunDataSource;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * The name of the run.\n   */\n  name?: string;\n}\n\nexport namespace RunCreateParams {\n  /**\n   * A ResponsesRunDataSource object describing a model sampling configuration.\n   */\n  export interface CreateEvalResponsesRunDataSource {\n    /**\n     * Determines what populates the `item` namespace in this run's data source.\n     */\n    source:\n      | CreateEvalResponsesRunDataSource.FileContent\n      | CreateEvalResponsesRunDataSource.FileID\n      | CreateEvalResponsesRunDataSource.Responses;\n\n    /**\n     * The type of run data source. Always `responses`.\n     */\n    type: 'responses';\n\n    /**\n     * Used when sampling from a model. Dictates the structure of the messages passed\n     * into the model. Can either be a reference to a prebuilt trajectory (ie,\n     * `item.input_trajectory`), or a template with variable references to the `item`\n     * namespace.\n     */\n    input_messages?:\n      | CreateEvalResponsesRunDataSource.Template\n      | CreateEvalResponsesRunDataSource.ItemReference;\n\n    /**\n     * The name of the model to use for generating completions (e.g. \"o3-mini\").\n     */\n    model?: string;\n\n    sampling_params?: CreateEvalResponsesRunDataSource.SamplingParams;\n  }\n\n  export namespace CreateEvalResponsesRunDataSource {\n    export interface FileContent {\n      /**\n       * The content of the jsonl file.\n       */\n      content: Array<FileContent.Content>;\n\n      /**\n       * The type of jsonl source. Always `file_content`.\n       */\n      type: 'file_content';\n    }\n\n    export namespace FileContent {\n      export interface Content {\n        item: { [key: string]: unknown };\n\n        sample?: { [key: string]: unknown };\n      }\n    }\n\n    export interface FileID {\n      /**\n       * The identifier of the file.\n       */\n      id: string;\n\n      /**\n       * The type of jsonl source. Always `file_id`.\n       */\n      type: 'file_id';\n    }\n\n    /**\n     * A EvalResponsesSource object describing a run data source configuration.\n     */\n    export interface Responses {\n      /**\n       * The type of run data source. Always `responses`.\n       */\n      type: 'responses';\n\n      /**\n       * Only include items created after this timestamp (inclusive). This is a query\n       * parameter used to select responses.\n       */\n      created_after?: number | null;\n\n      /**\n       * Only include items created before this timestamp (inclusive). This is a query\n       * parameter used to select responses.\n       */\n      created_before?: number | null;\n\n      /**\n       * Optional string to search the 'instructions' field. This is a query parameter\n       * used to select responses.\n       */\n      instructions_search?: string | null;\n\n      /**\n       * Metadata filter for the responses. This is a query parameter used to select\n       * responses.\n       */\n      metadata?: unknown | null;\n\n      /**\n       * The name of the model to find responses for. This is a query parameter used to\n       * select responses.\n       */\n      model?: string | null;\n\n      /**\n       * Constrains effort on reasoning for\n       * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n       * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n       * Reducing reasoning effort can result in faster responses and fewer tokens used\n       * on reasoning in a response.\n       *\n       * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n       *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n       *   calls are supported for all reasoning values in gpt-5.1.\n       * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n       *   support `none`.\n       * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n       * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n       */\n      reasoning_effort?: Shared.ReasoningEffort | null;\n\n      /**\n       * Sampling temperature. This is a query parameter used to select responses.\n       */\n      temperature?: number | null;\n\n      /**\n       * List of tool names. This is a query parameter used to select responses.\n       */\n      tools?: Array<string> | null;\n\n      /**\n       * Nucleus sampling parameter. This is a query parameter used to select responses.\n       */\n      top_p?: number | null;\n\n      /**\n       * List of user identifiers. This is a query parameter used to select responses.\n       */\n      users?: Array<string> | null;\n    }\n\n    export interface Template {\n      /**\n       * A list of chat messages forming the prompt or context. May include variable\n       * references to the `item` namespace, ie {{item.name}}.\n       */\n      template: Array<Template.ChatMessage | Template.EvalItem>;\n\n      /**\n       * The type of input messages. Always `template`.\n       */\n      type: 'template';\n    }\n\n    export namespace Template {\n      export interface ChatMessage {\n        /**\n         * The content of the message.\n         */\n        content: string;\n\n        /**\n         * The role of the message (e.g. \"system\", \"assistant\", \"user\").\n         */\n        role: string;\n      }\n\n      /**\n       * A message input to the model with a role indicating instruction following\n       * hierarchy. Instructions given with the `developer` or `system` role take\n       * precedence over instructions given with the `user` role. Messages with the\n       * `assistant` role are presumed to have been generated by the model in previous\n       * interactions.\n       */\n      export interface EvalItem {\n        /**\n         * Inputs to the model - can contain template strings. Supports text, output text,\n         * input images, and input audio, either as a single item or an array of items.\n         */\n        content:\n          | string\n          | ResponsesAPI.ResponseInputText\n          | EvalItem.OutputText\n          | EvalItem.InputImage\n          | ResponsesAPI.ResponseInputAudio\n          | GraderModelsAPI.GraderInputs;\n\n        /**\n         * The role of the message input. One of `user`, `assistant`, `system`, or\n         * `developer`.\n         */\n        role: 'user' | 'assistant' | 'system' | 'developer';\n\n        /**\n         * The type of the message input. Always `message`.\n         */\n        type?: 'message';\n      }\n\n      export namespace EvalItem {\n        /**\n         * A text output from the model.\n         */\n        export interface OutputText {\n          /**\n           * The text output from the model.\n           */\n          text: string;\n\n          /**\n           * The type of the output text. Always `output_text`.\n           */\n          type: 'output_text';\n        }\n\n        /**\n         * An image input block used within EvalItem content arrays.\n         */\n        export interface InputImage {\n          /**\n           * The URL of the image input.\n           */\n          image_url: string;\n\n          /**\n           * The type of the image input. Always `input_image`.\n           */\n          type: 'input_image';\n\n          /**\n           * The detail level of the image to be sent to the model. One of `high`, `low`, or\n           * `auto`. Defaults to `auto`.\n           */\n          detail?: string;\n        }\n      }\n    }\n\n    export interface ItemReference {\n      /**\n       * A reference to a variable in the `item` namespace. Ie, \"item.name\"\n       */\n      item_reference: string;\n\n      /**\n       * The type of input messages. Always `item_reference`.\n       */\n      type: 'item_reference';\n    }\n\n    export interface SamplingParams {\n      /**\n       * The maximum number of tokens in the generated output.\n       */\n      max_completion_tokens?: number;\n\n      /**\n       * Constrains effort on reasoning for\n       * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n       * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n       * Reducing reasoning effort can result in faster responses and fewer tokens used\n       * on reasoning in a response.\n       *\n       * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n       *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n       *   calls are supported for all reasoning values in gpt-5.1.\n       * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n       *   support `none`.\n       * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n       * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n       */\n      reasoning_effort?: Shared.ReasoningEffort | null;\n\n      /**\n       * A seed value to initialize the randomness, during sampling.\n       */\n      seed?: number;\n\n      /**\n       * A higher temperature increases randomness in the outputs.\n       */\n      temperature?: number;\n\n      /**\n       * Configuration options for a text response from the model. Can be plain text or\n       * structured JSON data. Learn more:\n       *\n       * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n       * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n       */\n      text?: SamplingParams.Text;\n\n      /**\n       * An array of tools the model may call while generating a response. You can\n       * specify which tool to use by setting the `tool_choice` parameter.\n       *\n       * The two categories of tools you can provide the model are:\n       *\n       * - **Built-in tools**: Tools that are provided by OpenAI that extend the model's\n       *   capabilities, like\n       *   [web search](https://platform.openai.com/docs/guides/tools-web-search) or\n       *   [file search](https://platform.openai.com/docs/guides/tools-file-search).\n       *   Learn more about\n       *   [built-in tools](https://platform.openai.com/docs/guides/tools).\n       * - **Function calls (custom tools)**: Functions that are defined by you, enabling\n       *   the model to call your own code. Learn more about\n       *   [function calling](https://platform.openai.com/docs/guides/function-calling).\n       */\n      tools?: Array<ResponsesAPI.Tool>;\n\n      /**\n       * An alternative to temperature for nucleus sampling; 1.0 includes all tokens.\n       */\n      top_p?: number;\n    }\n\n    export namespace SamplingParams {\n      /**\n       * Configuration options for a text response from the model. Can be plain text or\n       * structured JSON data. Learn more:\n       *\n       * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n       * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n       */\n      export interface Text {\n        /**\n         * An object specifying the format that the model must output.\n         *\n         * Configuring `{ \"type\": \"json_schema\" }` enables Structured Outputs, which\n         * ensures the model will match your supplied JSON schema. Learn more in the\n         * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n         *\n         * The default format is `{ \"type\": \"text\" }` with no additional options.\n         *\n         * **Not recommended for gpt-4o and newer models:**\n         *\n         * Setting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\n         * ensures the message the model generates is valid JSON. Using `json_schema` is\n         * preferred for models that support it.\n         */\n        format?: ResponsesAPI.ResponseFormatTextConfig;\n      }\n    }\n  }\n}\n\nexport interface RunRetrieveParams {\n  /**\n   * The ID of the evaluation to retrieve runs for.\n   */\n  eval_id: string;\n}\n\nexport interface RunListParams extends CursorPageParams {\n  /**\n   * Sort order for runs by timestamp. Use `asc` for ascending order or `desc` for\n   * descending order. Defaults to `asc`.\n   */\n  order?: 'asc' | 'desc';\n\n  /**\n   * Filter runs by status. One of `queued` | `in_progress` | `failed` | `completed`\n   * | `canceled`.\n   */\n  status?: 'queued' | 'in_progress' | 'completed' | 'canceled' | 'failed';\n}\n\nexport interface RunDeleteParams {\n  /**\n   * The ID of the evaluation to delete the run from.\n   */\n  eval_id: string;\n}\n\nexport interface RunCancelParams {\n  /**\n   * The ID of the evaluation whose run you want to cancel.\n   */\n  eval_id: string;\n}\n\nRuns.OutputItems = OutputItems;\n\nexport declare namespace Runs {\n  export {\n    type CreateEvalCompletionsRunDataSource as CreateEvalCompletionsRunDataSource,\n    type CreateEvalJSONLRunDataSource as CreateEvalJSONLRunDataSource,\n    type EvalAPIError as EvalAPIError,\n    type RunCreateResponse as RunCreateResponse,\n    type RunRetrieveResponse as RunRetrieveResponse,\n    type RunListResponse as RunListResponse,\n    type RunDeleteResponse as RunDeleteResponse,\n    type RunCancelResponse as RunCancelResponse,\n    type RunListResponsesPage as RunListResponsesPage,\n    type RunCreateParams as RunCreateParams,\n    type RunRetrieveParams as RunRetrieveParams,\n    type RunListParams as RunListParams,\n    type RunDeleteParams as RunDeleteParams,\n    type RunCancelParams as RunCancelParams,\n  };\n\n  export {\n    OutputItems as OutputItems,\n    type OutputItemRetrieveResponse as OutputItemRetrieveResponse,\n    type OutputItemListResponse as OutputItemListResponse,\n    type OutputItemListResponsesPage as OutputItemListResponsesPage,\n    type OutputItemRetrieveParams as OutputItemRetrieveParams,\n    type OutputItemListParams as OutputItemListParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as Shared from '../shared';\nimport * as GraderModelsAPI from '../graders/grader-models';\nimport * as ResponsesAPI from '../responses/responses';\nimport * as RunsAPI from './runs/runs';\nimport {\n  CreateEvalCompletionsRunDataSource,\n  CreateEvalJSONLRunDataSource,\n  EvalAPIError,\n  RunCancelParams,\n  RunCancelResponse,\n  RunCreateParams,\n  RunCreateResponse,\n  RunDeleteParams,\n  RunDeleteResponse,\n  RunListParams,\n  RunListResponse,\n  RunListResponsesPage,\n  RunRetrieveParams,\n  RunRetrieveResponse,\n  Runs,\n} from './runs/runs';\nimport { APIPromise } from '../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../core/pagination';\nimport { RequestOptions } from '../../internal/request-options';\nimport { path } from '../../internal/utils/path';\n\n/**\n * Manage and run evals in the OpenAI platform.\n */\nexport class Evals extends APIResource {\n  runs: RunsAPI.Runs = new RunsAPI.Runs(this._client);\n\n  /**\n   * Create the structure of an evaluation that can be used to test a model's\n   * performance. An evaluation is a set of testing criteria and the config for a\n   * data source, which dictates the schema of the data used in the evaluation. After\n   * creating an evaluation, you can run it on different models and model parameters.\n   * We support several types of graders and datasources. For more information, see\n   * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n   */\n  create(body: EvalCreateParams, options?: RequestOptions): APIPromise<EvalCreateResponse> {\n    return this._client.post('/evals', { body, ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * Get an evaluation by ID.\n   */\n  retrieve(evalID: string, options?: RequestOptions): APIPromise<EvalRetrieveResponse> {\n    return this._client.get(path`/evals/${evalID}`, { ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * Update certain properties of an evaluation.\n   */\n  update(evalID: string, body: EvalUpdateParams, options?: RequestOptions): APIPromise<EvalUpdateResponse> {\n    return this._client.post(path`/evals/${evalID}`, { body, ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * List evaluations for a project.\n   */\n  list(\n    query: EvalListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<EvalListResponsesPage, EvalListResponse> {\n    return this._client.getAPIList('/evals', CursorPage<EvalListResponse>, {\n      query,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Delete an evaluation.\n   */\n  delete(evalID: string, options?: RequestOptions): APIPromise<EvalDeleteResponse> {\n    return this._client.delete(path`/evals/${evalID}`, { ...options, __security: { bearerAuth: true } });\n  }\n}\n\nexport type EvalListResponsesPage = CursorPage<EvalListResponse>;\n\n/**\n * A CustomDataSourceConfig which specifies the schema of your `item` and\n * optionally `sample` namespaces. The response schema defines the shape of the\n * data that will be:\n *\n * - Used to define your testing criteria and\n * - What data is required when creating a run\n */\nexport interface EvalCustomDataSourceConfig {\n  /**\n   * The json schema for the run data source items. Learn how to build JSON schemas\n   * [here](https://json-schema.org/).\n   */\n  schema: { [key: string]: unknown };\n\n  /**\n   * The type of data source. Always `custom`.\n   */\n  type: 'custom';\n}\n\n/**\n * @deprecated Deprecated in favor of LogsDataSourceConfig.\n */\nexport interface EvalStoredCompletionsDataSourceConfig {\n  /**\n   * The json schema for the run data source items. Learn how to build JSON schemas\n   * [here](https://json-schema.org/).\n   */\n  schema: { [key: string]: unknown };\n\n  /**\n   * The type of data source. Always `stored_completions`.\n   */\n  type: 'stored_completions';\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n}\n\n/**\n * An Eval object with a data source config and testing criteria. An Eval\n * represents a task to be done for your LLM integration. Like:\n *\n * - Improve the quality of my chatbot\n * - See how well my chatbot handles customer support\n * - Check if o4-mini is better at my usecase than gpt-4o\n */\nexport interface EvalCreateResponse {\n  /**\n   * Unique identifier for the evaluation.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the eval was created.\n   */\n  created_at: number;\n\n  /**\n   * Configuration of data sources used in runs of the evaluation.\n   */\n  data_source_config:\n    | EvalCustomDataSourceConfig\n    | EvalCreateResponse.Logs\n    | EvalStoredCompletionsDataSourceConfig;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n\n  /**\n   * The name of the evaluation.\n   */\n  name: string;\n\n  /**\n   * The object type.\n   */\n  object: 'eval';\n\n  /**\n   * A list of testing criteria.\n   */\n  testing_criteria: Array<\n    | GraderModelsAPI.LabelModelGrader\n    | GraderModelsAPI.StringCheckGrader\n    | EvalCreateResponse.EvalGraderTextSimilarity\n    | EvalCreateResponse.EvalGraderPython\n    | EvalCreateResponse.EvalGraderScoreModel\n  >;\n}\n\nexport namespace EvalCreateResponse {\n  /**\n   * A LogsDataSourceConfig which specifies the metadata property of your logs query.\n   * This is usually metadata like `usecase=chatbot` or `prompt-version=v2`, etc. The\n   * schema returned by this data source config is used to defined what variables are\n   * available in your evals. `item` and `sample` are both defined when using this\n   * data source config.\n   */\n  export interface Logs {\n    /**\n     * The json schema for the run data source items. Learn how to build JSON schemas\n     * [here](https://json-schema.org/).\n     */\n    schema: { [key: string]: unknown };\n\n    /**\n     * The type of data source. Always `logs`.\n     */\n    type: 'logs';\n\n    /**\n     * Set of 16 key-value pairs that can be attached to an object. This can be useful\n     * for storing additional information about the object in a structured format, and\n     * querying for objects via API or the dashboard.\n     *\n     * Keys are strings with a maximum length of 64 characters. Values are strings with\n     * a maximum length of 512 characters.\n     */\n    metadata?: Shared.Metadata | null;\n  }\n\n  /**\n   * A TextSimilarityGrader object which grades text based on similarity metrics.\n   */\n  export interface EvalGraderTextSimilarity extends GraderModelsAPI.TextSimilarityGrader {\n    /**\n     * The threshold for the score.\n     */\n    pass_threshold: number;\n  }\n\n  /**\n   * A PythonGrader object that runs a python script on the input.\n   */\n  export interface EvalGraderPython extends GraderModelsAPI.PythonGrader {\n    /**\n     * The threshold for the score.\n     */\n    pass_threshold?: number;\n  }\n\n  /**\n   * A ScoreModelGrader object that uses a model to assign a score to the input.\n   */\n  export interface EvalGraderScoreModel extends GraderModelsAPI.ScoreModelGrader {\n    /**\n     * The threshold for the score.\n     */\n    pass_threshold?: number;\n  }\n}\n\n/**\n * An Eval object with a data source config and testing criteria. An Eval\n * represents a task to be done for your LLM integration. Like:\n *\n * - Improve the quality of my chatbot\n * - See how well my chatbot handles customer support\n * - Check if o4-mini is better at my usecase than gpt-4o\n */\nexport interface EvalRetrieveResponse {\n  /**\n   * Unique identifier for the evaluation.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the eval was created.\n   */\n  created_at: number;\n\n  /**\n   * Configuration of data sources used in runs of the evaluation.\n   */\n  data_source_config:\n    | EvalCustomDataSourceConfig\n    | EvalRetrieveResponse.Logs\n    | EvalStoredCompletionsDataSourceConfig;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n\n  /**\n   * The name of the evaluation.\n   */\n  name: string;\n\n  /**\n   * The object type.\n   */\n  object: 'eval';\n\n  /**\n   * A list of testing criteria.\n   */\n  testing_criteria: Array<\n    | GraderModelsAPI.LabelModelGrader\n    | GraderModelsAPI.StringCheckGrader\n    | EvalRetrieveResponse.EvalGraderTextSimilarity\n    | EvalRetrieveResponse.EvalGraderPython\n    | EvalRetrieveResponse.EvalGraderScoreModel\n  >;\n}\n\nexport namespace EvalRetrieveResponse {\n  /**\n   * A LogsDataSourceConfig which specifies the metadata property of your logs query.\n   * This is usually metadata like `usecase=chatbot` or `prompt-version=v2`, etc. The\n   * schema returned by this data source config is used to defined what variables are\n   * available in your evals. `item` and `sample` are both defined when using this\n   * data source config.\n   */\n  export interface Logs {\n    /**\n     * The json schema for the run data source items. Learn how to build JSON schemas\n     * [here](https://json-schema.org/).\n     */\n    schema: { [key: string]: unknown };\n\n    /**\n     * The type of data source. Always `logs`.\n     */\n    type: 'logs';\n\n    /**\n     * Set of 16 key-value pairs that can be attached to an object. This can be useful\n     * for storing additional information about the object in a structured format, and\n     * querying for objects via API or the dashboard.\n     *\n     * Keys are strings with a maximum length of 64 characters. Values are strings with\n     * a maximum length of 512 characters.\n     */\n    metadata?: Shared.Metadata | null;\n  }\n\n  /**\n   * A TextSimilarityGrader object which grades text based on similarity metrics.\n   */\n  export interface EvalGraderTextSimilarity extends GraderModelsAPI.TextSimilarityGrader {\n    /**\n     * The threshold for the score.\n     */\n    pass_threshold: number;\n  }\n\n  /**\n   * A PythonGrader object that runs a python script on the input.\n   */\n  export interface EvalGraderPython extends GraderModelsAPI.PythonGrader {\n    /**\n     * The threshold for the score.\n     */\n    pass_threshold?: number;\n  }\n\n  /**\n   * A ScoreModelGrader object that uses a model to assign a score to the input.\n   */\n  export interface EvalGraderScoreModel extends GraderModelsAPI.ScoreModelGrader {\n    /**\n     * The threshold for the score.\n     */\n    pass_threshold?: number;\n  }\n}\n\n/**\n * An Eval object with a data source config and testing criteria. An Eval\n * represents a task to be done for your LLM integration. Like:\n *\n * - Improve the quality of my chatbot\n * - See how well my chatbot handles customer support\n * - Check if o4-mini is better at my usecase than gpt-4o\n */\nexport interface EvalUpdateResponse {\n  /**\n   * Unique identifier for the evaluation.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the eval was created.\n   */\n  created_at: number;\n\n  /**\n   * Configuration of data sources used in runs of the evaluation.\n   */\n  data_source_config:\n    | EvalCustomDataSourceConfig\n    | EvalUpdateResponse.Logs\n    | EvalStoredCompletionsDataSourceConfig;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n\n  /**\n   * The name of the evaluation.\n   */\n  name: string;\n\n  /**\n   * The object type.\n   */\n  object: 'eval';\n\n  /**\n   * A list of testing criteria.\n   */\n  testing_criteria: Array<\n    | GraderModelsAPI.LabelModelGrader\n    | GraderModelsAPI.StringCheckGrader\n    | EvalUpdateResponse.EvalGraderTextSimilarity\n    | EvalUpdateResponse.EvalGraderPython\n    | EvalUpdateResponse.EvalGraderScoreModel\n  >;\n}\n\nexport namespace EvalUpdateResponse {\n  /**\n   * A LogsDataSourceConfig which specifies the metadata property of your logs query.\n   * This is usually metadata like `usecase=chatbot` or `prompt-version=v2`, etc. The\n   * schema returned by this data source config is used to defined what variables are\n   * available in your evals. `item` and `sample` are both defined when using this\n   * data source config.\n   */\n  export interface Logs {\n    /**\n     * The json schema for the run data source items. Learn how to build JSON schemas\n     * [here](https://json-schema.org/).\n     */\n    schema: { [key: string]: unknown };\n\n    /**\n     * The type of data source. Always `logs`.\n     */\n    type: 'logs';\n\n    /**\n     * Set of 16 key-value pairs that can be attached to an object. This can be useful\n     * for storing additional information about the object in a structured format, and\n     * querying for objects via API or the dashboard.\n     *\n     * Keys are strings with a maximum length of 64 characters. Values are strings with\n     * a maximum length of 512 characters.\n     */\n    metadata?: Shared.Metadata | null;\n  }\n\n  /**\n   * A TextSimilarityGrader object which grades text based on similarity metrics.\n   */\n  export interface EvalGraderTextSimilarity extends GraderModelsAPI.TextSimilarityGrader {\n    /**\n     * The threshold for the score.\n     */\n    pass_threshold: number;\n  }\n\n  /**\n   * A PythonGrader object that runs a python script on the input.\n   */\n  export interface EvalGraderPython extends GraderModelsAPI.PythonGrader {\n    /**\n     * The threshold for the score.\n     */\n    pass_threshold?: number;\n  }\n\n  /**\n   * A ScoreModelGrader object that uses a model to assign a score to the input.\n   */\n  export interface EvalGraderScoreModel extends GraderModelsAPI.ScoreModelGrader {\n    /**\n     * The threshold for the score.\n     */\n    pass_threshold?: number;\n  }\n}\n\n/**\n * An Eval object with a data source config and testing criteria. An Eval\n * represents a task to be done for your LLM integration. Like:\n *\n * - Improve the quality of my chatbot\n * - See how well my chatbot handles customer support\n * - Check if o4-mini is better at my usecase than gpt-4o\n */\nexport interface EvalListResponse {\n  /**\n   * Unique identifier for the evaluation.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the eval was created.\n   */\n  created_at: number;\n\n  /**\n   * Configuration of data sources used in runs of the evaluation.\n   */\n  data_source_config:\n    | EvalCustomDataSourceConfig\n    | EvalListResponse.Logs\n    | EvalStoredCompletionsDataSourceConfig;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n\n  /**\n   * The name of the evaluation.\n   */\n  name: string;\n\n  /**\n   * The object type.\n   */\n  object: 'eval';\n\n  /**\n   * A list of testing criteria.\n   */\n  testing_criteria: Array<\n    | GraderModelsAPI.LabelModelGrader\n    | GraderModelsAPI.StringCheckGrader\n    | EvalListResponse.EvalGraderTextSimilarity\n    | EvalListResponse.EvalGraderPython\n    | EvalListResponse.EvalGraderScoreModel\n  >;\n}\n\nexport namespace EvalListResponse {\n  /**\n   * A LogsDataSourceConfig which specifies the metadata property of your logs query.\n   * This is usually metadata like `usecase=chatbot` or `prompt-version=v2`, etc. The\n   * schema returned by this data source config is used to defined what variables are\n   * available in your evals. `item` and `sample` are both defined when using this\n   * data source config.\n   */\n  export interface Logs {\n    /**\n     * The json schema for the run data source items. Learn how to build JSON schemas\n     * [here](https://json-schema.org/).\n     */\n    schema: { [key: string]: unknown };\n\n    /**\n     * The type of data source. Always `logs`.\n     */\n    type: 'logs';\n\n    /**\n     * Set of 16 key-value pairs that can be attached to an object. This can be useful\n     * for storing additional information about the object in a structured format, and\n     * querying for objects via API or the dashboard.\n     *\n     * Keys are strings with a maximum length of 64 characters. Values are strings with\n     * a maximum length of 512 characters.\n     */\n    metadata?: Shared.Metadata | null;\n  }\n\n  /**\n   * A TextSimilarityGrader object which grades text based on similarity metrics.\n   */\n  export interface EvalGraderTextSimilarity extends GraderModelsAPI.TextSimilarityGrader {\n    /**\n     * The threshold for the score.\n     */\n    pass_threshold: number;\n  }\n\n  /**\n   * A PythonGrader object that runs a python script on the input.\n   */\n  export interface EvalGraderPython extends GraderModelsAPI.PythonGrader {\n    /**\n     * The threshold for the score.\n     */\n    pass_threshold?: number;\n  }\n\n  /**\n   * A ScoreModelGrader object that uses a model to assign a score to the input.\n   */\n  export interface EvalGraderScoreModel extends GraderModelsAPI.ScoreModelGrader {\n    /**\n     * The threshold for the score.\n     */\n    pass_threshold?: number;\n  }\n}\n\nexport interface EvalDeleteResponse {\n  deleted: boolean;\n\n  eval_id: string;\n\n  object: string;\n}\n\nexport interface EvalCreateParams {\n  /**\n   * The configuration for the data source used for the evaluation runs. Dictates the\n   * schema of the data used in the evaluation.\n   */\n  data_source_config: EvalCreateParams.Custom | EvalCreateParams.Logs | EvalCreateParams.StoredCompletions;\n\n  /**\n   * A list of graders for all eval runs in this group. Graders can reference\n   * variables in the data source using double curly braces notation, like\n   * `{{item.variable_name}}`. To reference the model's output, use the `sample`\n   * namespace (ie, `{{sample.output_text}}`).\n   */\n  testing_criteria: Array<\n    | EvalCreateParams.LabelModel\n    | GraderModelsAPI.StringCheckGrader\n    | EvalCreateParams.TextSimilarity\n    | EvalCreateParams.Python\n    | EvalCreateParams.ScoreModel\n  >;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * The name of the evaluation.\n   */\n  name?: string;\n}\n\nexport namespace EvalCreateParams {\n  /**\n   * A CustomDataSourceConfig object that defines the schema for the data source used\n   * for the evaluation runs. This schema is used to define the shape of the data\n   * that will be:\n   *\n   * - Used to define your testing criteria and\n   * - What data is required when creating a run\n   */\n  export interface Custom {\n    /**\n     * The json schema for each row in the data source.\n     */\n    item_schema: { [key: string]: unknown };\n\n    /**\n     * The type of data source. Always `custom`.\n     */\n    type: 'custom';\n\n    /**\n     * Whether the eval should expect you to populate the sample namespace (ie, by\n     * generating responses off of your data source)\n     */\n    include_sample_schema?: boolean;\n  }\n\n  /**\n   * A data source config which specifies the metadata property of your logs query.\n   * This is usually metadata like `usecase=chatbot` or `prompt-version=v2`, etc.\n   */\n  export interface Logs {\n    /**\n     * The type of data source. Always `logs`.\n     */\n    type: 'logs';\n\n    /**\n     * Metadata filters for the logs data source.\n     */\n    metadata?: { [key: string]: unknown };\n  }\n\n  /**\n   * @deprecated Deprecated in favor of LogsDataSourceConfig.\n   */\n  export interface StoredCompletions {\n    /**\n     * The type of data source. Always `stored_completions`.\n     */\n    type: 'stored_completions';\n\n    /**\n     * Metadata filters for the stored completions data source.\n     */\n    metadata?: { [key: string]: unknown };\n  }\n\n  /**\n   * A LabelModelGrader object which uses a model to assign labels to each item in\n   * the evaluation.\n   */\n  export interface LabelModel {\n    /**\n     * A list of chat messages forming the prompt or context. May include variable\n     * references to the `item` namespace, ie {{item.name}}.\n     */\n    input: Array<LabelModel.SimpleInputMessage | LabelModel.EvalItem>;\n\n    /**\n     * The labels to classify to each item in the evaluation.\n     */\n    labels: Array<string>;\n\n    /**\n     * The model to use for the evaluation. Must support structured outputs.\n     */\n    model: string;\n\n    /**\n     * The name of the grader.\n     */\n    name: string;\n\n    /**\n     * The labels that indicate a passing result. Must be a subset of labels.\n     */\n    passing_labels: Array<string>;\n\n    /**\n     * The object type, which is always `label_model`.\n     */\n    type: 'label_model';\n  }\n\n  export namespace LabelModel {\n    export interface SimpleInputMessage {\n      /**\n       * The content of the message.\n       */\n      content: string;\n\n      /**\n       * The role of the message (e.g. \"system\", \"assistant\", \"user\").\n       */\n      role: string;\n    }\n\n    /**\n     * A message input to the model with a role indicating instruction following\n     * hierarchy. Instructions given with the `developer` or `system` role take\n     * precedence over instructions given with the `user` role. Messages with the\n     * `assistant` role are presumed to have been generated by the model in previous\n     * interactions.\n     */\n    export interface EvalItem {\n      /**\n       * Inputs to the model - can contain template strings. Supports text, output text,\n       * input images, and input audio, either as a single item or an array of items.\n       */\n      content:\n        | string\n        | ResponsesAPI.ResponseInputText\n        | EvalItem.OutputText\n        | EvalItem.InputImage\n        | ResponsesAPI.ResponseInputAudio\n        | GraderModelsAPI.GraderInputs;\n\n      /**\n       * The role of the message input. One of `user`, `assistant`, `system`, or\n       * `developer`.\n       */\n      role: 'user' | 'assistant' | 'system' | 'developer';\n\n      /**\n       * The type of the message input. Always `message`.\n       */\n      type?: 'message';\n    }\n\n    export namespace EvalItem {\n      /**\n       * A text output from the model.\n       */\n      export interface OutputText {\n        /**\n         * The text output from the model.\n         */\n        text: string;\n\n        /**\n         * The type of the output text. Always `output_text`.\n         */\n        type: 'output_text';\n      }\n\n      /**\n       * An image input block used within EvalItem content arrays.\n       */\n      export interface InputImage {\n        /**\n         * The URL of the image input.\n         */\n        image_url: string;\n\n        /**\n         * The type of the image input. Always `input_image`.\n         */\n        type: 'input_image';\n\n        /**\n         * The detail level of the image to be sent to the model. One of `high`, `low`, or\n         * `auto`. Defaults to `auto`.\n         */\n        detail?: string;\n      }\n    }\n  }\n\n  /**\n   * A TextSimilarityGrader object which grades text based on similarity metrics.\n   */\n  export interface TextSimilarity extends GraderModelsAPI.TextSimilarityGrader {\n    /**\n     * The threshold for the score.\n     */\n    pass_threshold: number;\n  }\n\n  /**\n   * A PythonGrader object that runs a python script on the input.\n   */\n  export interface Python extends GraderModelsAPI.PythonGrader {\n    /**\n     * The threshold for the score.\n     */\n    pass_threshold?: number;\n  }\n\n  /**\n   * A ScoreModelGrader object that uses a model to assign a score to the input.\n   */\n  export interface ScoreModel extends GraderModelsAPI.ScoreModelGrader {\n    /**\n     * The threshold for the score.\n     */\n    pass_threshold?: number;\n  }\n}\n\nexport interface EvalUpdateParams {\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * Rename the evaluation.\n   */\n  name?: string;\n}\n\nexport interface EvalListParams extends CursorPageParams {\n  /**\n   * Sort order for evals by timestamp. Use `asc` for ascending order or `desc` for\n   * descending order.\n   */\n  order?: 'asc' | 'desc';\n\n  /**\n   * Evals can be ordered by creation time or last updated time. Use `created_at` for\n   * creation time or `updated_at` for last updated time.\n   */\n  order_by?: 'created_at' | 'updated_at';\n}\n\nEvals.Runs = Runs;\n\nexport declare namespace Evals {\n  export {\n    type EvalCustomDataSourceConfig as EvalCustomDataSourceConfig,\n    type EvalStoredCompletionsDataSourceConfig as EvalStoredCompletionsDataSourceConfig,\n    type EvalCreateResponse as EvalCreateResponse,\n    type EvalRetrieveResponse as EvalRetrieveResponse,\n    type EvalUpdateResponse as EvalUpdateResponse,\n    type EvalListResponse as EvalListResponse,\n    type EvalDeleteResponse as EvalDeleteResponse,\n    type EvalListResponsesPage as EvalListResponsesPage,\n    type EvalCreateParams as EvalCreateParams,\n    type EvalUpdateParams as EvalUpdateParams,\n    type EvalListParams as EvalListParams,\n  };\n\n  export {\n    Runs as Runs,\n    type CreateEvalCompletionsRunDataSource as CreateEvalCompletionsRunDataSource,\n    type CreateEvalJSONLRunDataSource as CreateEvalJSONLRunDataSource,\n    type EvalAPIError as EvalAPIError,\n    type RunCreateResponse as RunCreateResponse,\n    type RunRetrieveResponse as RunRetrieveResponse,\n    type RunListResponse as RunListResponse,\n    type RunDeleteResponse as RunDeleteResponse,\n    type RunCancelResponse as RunCancelResponse,\n    type RunListResponsesPage as RunListResponsesPage,\n    type RunCreateParams as RunCreateParams,\n    type RunRetrieveParams as RunRetrieveParams,\n    type RunListParams as RunListParams,\n    type RunDeleteParams as RunDeleteParams,\n    type RunCancelParams as RunCancelParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../core/resource';\nimport { APIPromise } from '../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../core/pagination';\nimport { type Uploadable } from '../core/uploads';\nimport { buildHeaders } from '../internal/headers';\nimport { RequestOptions } from '../internal/request-options';\nimport { sleep } from '../internal/utils/sleep';\nimport { APIConnectionTimeoutError } from '../error';\nimport { multipartFormRequestOptions } from '../internal/uploads';\nimport { path } from '../internal/utils/path';\n\n/**\n * Files are used to upload documents that can be used with features like Assistants and Fine-tuning.\n */\nexport class Files extends APIResource {\n  /**\n   * Upload a file that can be used across various endpoints. Individual files can be\n   * up to 512 MB, and each project can store up to 2.5 TB of files in total. There\n   * is no organization-wide storage limit. Uploads to this endpoint are rate-limited\n   * to 1,000 requests per minute per authenticated user.\n   *\n   * - The Assistants API supports files up to 2 million tokens and of specific file\n   *   types. See the\n   *   [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools)\n   *   for details.\n   * - The Fine-tuning API only supports `.jsonl` files. The input also has certain\n   *   required formats for fine-tuning\n   *   [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input)\n   *   or\n   *   [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n   *   models.\n   * - The Batch API only supports `.jsonl` files up to 200 MB in size. The input\n   *   also has a specific required\n   *   [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n   * - For Retrieval or `file_search` ingestion, upload files here first. If you need\n   *   to attach multiple uploaded files to the same vector store, use\n   *   [`/vector_stores/{vector_store_id}/file_batches`](https://platform.openai.com/docs/api-reference/vector-stores-file-batches/createBatch)\n   *   instead of attaching them one by one. Vector store attachment has separate\n   *   limits from file upload, including 2,000 attached files per minute per\n   *   organization.\n   *\n   * Please [contact us](https://help.openai.com/) if you need to increase these\n   * storage limits.\n   */\n  create(body: FileCreateParams, options?: RequestOptions): APIPromise<FileObject> {\n    return this._client.post(\n      '/files',\n      multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client),\n    );\n  }\n\n  /**\n   * Returns information about a specific file.\n   */\n  retrieve(fileID: string, options?: RequestOptions): APIPromise<FileObject> {\n    return this._client.get(path`/files/${fileID}`, { ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * Returns a list of files.\n   */\n  list(\n    query: FileListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<FileObjectsPage, FileObject> {\n    return this._client.getAPIList('/files', CursorPage<FileObject>, {\n      query,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Delete a file and remove it from all vector stores.\n   */\n  delete(fileID: string, options?: RequestOptions): APIPromise<FileDeleted> {\n    return this._client.delete(path`/files/${fileID}`, { ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * Returns the contents of the specified file.\n   */\n  content(fileID: string, options?: RequestOptions): APIPromise<Response> {\n    return this._client.get(path`/files/${fileID}/content`, {\n      ...options,\n      headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n      __security: { bearerAuth: true },\n      __binaryResponse: true,\n    });\n  }\n\n  /**\n   * Waits for the given file to be processed, default timeout is 30 mins.\n   */\n  async waitForProcessing(\n    id: string,\n    { pollInterval = 5000, maxWait = 30 * 60 * 1000 }: { pollInterval?: number; maxWait?: number } = {},\n  ): Promise<FileObject> {\n    const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n\n    const start = Date.now();\n    let file = await this.retrieve(id);\n\n    while (!file.status || !TERMINAL_STATES.has(file.status)) {\n      await sleep(pollInterval);\n\n      file = await this.retrieve(id);\n      if (Date.now() - start > maxWait) {\n        throw new APIConnectionTimeoutError({\n          message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n        });\n      }\n    }\n\n    return file;\n  }\n}\n\nexport type FileObjectsPage = CursorPage<FileObject>;\n\nexport type FileContent = string;\n\nexport interface FileDeleted {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'file';\n}\n\n/**\n * The `File` object represents a document that has been uploaded to OpenAI.\n */\nexport interface FileObject {\n  /**\n   * The file identifier, which can be referenced in the API endpoints.\n   */\n  id: string;\n\n  /**\n   * The size of the file, in bytes.\n   */\n  bytes: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the file was created.\n   */\n  created_at: number;\n\n  /**\n   * The name of the file.\n   */\n  filename: string;\n\n  /**\n   * The object type, which is always `file`.\n   */\n  object: 'file';\n\n  /**\n   * The intended purpose of the file. Supported values are `assistants`,\n   * `assistants_output`, `batch`, `batch_output`, `fine-tune`, `fine-tune-results`,\n   * `vision`, and `user_data`.\n   */\n  purpose:\n    | 'assistants'\n    | 'assistants_output'\n    | 'batch'\n    | 'batch_output'\n    | 'fine-tune'\n    | 'fine-tune-results'\n    | 'vision'\n    | 'user_data';\n\n  /**\n   * @deprecated Deprecated. The current status of the file, which can be either\n   * `uploaded`, `processed`, or `error`.\n   */\n  status: 'uploaded' | 'processed' | 'error';\n\n  /**\n   * The Unix timestamp (in seconds) for when the file will expire.\n   */\n  expires_at?: number;\n\n  /**\n   * @deprecated Deprecated. For details on why a fine-tuning training file failed\n   * validation, see the `error` field on `fine_tuning.job`.\n   */\n  status_details?: string;\n}\n\n/**\n * The intended purpose of the uploaded file. One of:\n *\n * - `assistants`: Used in the Assistants API\n * - `batch`: Used in the Batch API\n * - `fine-tune`: Used for fine-tuning\n * - `vision`: Images used for vision fine-tuning\n * - `user_data`: Flexible file type for any purpose\n * - `evals`: Used for eval data sets\n */\nexport type FilePurpose = 'assistants' | 'batch' | 'fine-tune' | 'vision' | 'user_data' | 'evals';\n\nexport interface FileCreateParams {\n  /**\n   * The File object (not file name) to be uploaded.\n   */\n  file: Uploadable;\n\n  /**\n   * The intended purpose of the uploaded file. One of:\n   *\n   * - `assistants`: Used in the Assistants API\n   * - `batch`: Used in the Batch API\n   * - `fine-tune`: Used for fine-tuning\n   * - `vision`: Images used for vision fine-tuning\n   * - `user_data`: Flexible file type for any purpose\n   * - `evals`: Used for eval data sets\n   */\n  purpose: FilePurpose;\n\n  /**\n   * The expiration policy for a file. By default, files with `purpose=batch` expire\n   * after 30 days and all other files are persisted until they are manually deleted.\n   */\n  expires_after?: FileCreateParams.ExpiresAfter;\n}\n\nexport namespace FileCreateParams {\n  /**\n   * The expiration policy for a file. By default, files with `purpose=batch` expire\n   * after 30 days and all other files are persisted until they are manually deleted.\n   */\n  export interface ExpiresAfter {\n    /**\n     * Anchor timestamp after which the expiration policy applies. Supported anchors:\n     * `created_at`.\n     */\n    anchor: 'created_at';\n\n    /**\n     * The number of seconds after the anchor time that the file will expire. Must be\n     * between 3600 (1 hour) and 2592000 (30 days).\n     */\n    seconds: number;\n  }\n}\n\nexport interface FileListParams extends CursorPageParams {\n  /**\n   * Sort order by the `created_at` timestamp of the objects. `asc` for ascending\n   * order and `desc` for descending order.\n   */\n  order?: 'asc' | 'desc';\n\n  /**\n   * Only return files with the given purpose.\n   */\n  purpose?: string;\n}\n\nexport declare namespace Files {\n  export {\n    type FileContent as FileContent,\n    type FileDeleted as FileDeleted,\n    type FileObject as FileObject,\n    type FilePurpose as FilePurpose,\n    type FileObjectsPage as FileObjectsPage,\n    type FileCreateParams as FileCreateParams,\n    type FileListParams as FileListParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as GraderModelsAPI from '../graders/grader-models';\n\nexport class Methods extends APIResource {}\n\n/**\n * The hyperparameters used for the DPO fine-tuning job.\n */\nexport interface DpoHyperparameters {\n  /**\n   * Number of examples in each batch. A larger batch size means that model\n   * parameters are updated less frequently, but with lower variance.\n   */\n  batch_size?: 'auto' | number;\n\n  /**\n   * The beta value for the DPO method. A higher beta value will increase the weight\n   * of the penalty between the policy and reference model.\n   */\n  beta?: 'auto' | number;\n\n  /**\n   * Scaling factor for the learning rate. A smaller learning rate may be useful to\n   * avoid overfitting.\n   */\n  learning_rate_multiplier?: 'auto' | number;\n\n  /**\n   * The number of epochs to train the model for. An epoch refers to one full cycle\n   * through the training dataset.\n   */\n  n_epochs?: 'auto' | number;\n}\n\n/**\n * Configuration for the DPO fine-tuning method.\n */\nexport interface DpoMethod {\n  /**\n   * The hyperparameters used for the DPO fine-tuning job.\n   */\n  hyperparameters?: DpoHyperparameters;\n}\n\n/**\n * The hyperparameters used for the reinforcement fine-tuning job.\n */\nexport interface ReinforcementHyperparameters {\n  /**\n   * Number of examples in each batch. A larger batch size means that model\n   * parameters are updated less frequently, but with lower variance.\n   */\n  batch_size?: 'auto' | number;\n\n  /**\n   * Multiplier on amount of compute used for exploring search space during training.\n   */\n  compute_multiplier?: 'auto' | number;\n\n  /**\n   * The number of training steps between evaluation runs.\n   */\n  eval_interval?: 'auto' | number;\n\n  /**\n   * Number of evaluation samples to generate per training step.\n   */\n  eval_samples?: 'auto' | number;\n\n  /**\n   * Scaling factor for the learning rate. A smaller learning rate may be useful to\n   * avoid overfitting.\n   */\n  learning_rate_multiplier?: 'auto' | number;\n\n  /**\n   * The number of epochs to train the model for. An epoch refers to one full cycle\n   * through the training dataset.\n   */\n  n_epochs?: 'auto' | number;\n\n  /**\n   * Level of reasoning effort.\n   */\n  reasoning_effort?: 'default' | 'low' | 'medium' | 'high';\n}\n\n/**\n * Configuration for the reinforcement fine-tuning method.\n */\nexport interface ReinforcementMethod {\n  /**\n   * The grader used for the fine-tuning job.\n   */\n  grader:\n    | GraderModelsAPI.StringCheckGrader\n    | GraderModelsAPI.TextSimilarityGrader\n    | GraderModelsAPI.PythonGrader\n    | GraderModelsAPI.ScoreModelGrader\n    | GraderModelsAPI.MultiGrader;\n\n  /**\n   * The hyperparameters used for the reinforcement fine-tuning job.\n   */\n  hyperparameters?: ReinforcementHyperparameters;\n}\n\n/**\n * The hyperparameters used for the fine-tuning job.\n */\nexport interface SupervisedHyperparameters {\n  /**\n   * Number of examples in each batch. A larger batch size means that model\n   * parameters are updated less frequently, but with lower variance.\n   */\n  batch_size?: 'auto' | number;\n\n  /**\n   * Scaling factor for the learning rate. A smaller learning rate may be useful to\n   * avoid overfitting.\n   */\n  learning_rate_multiplier?: 'auto' | number;\n\n  /**\n   * The number of epochs to train the model for. An epoch refers to one full cycle\n   * through the training dataset.\n   */\n  n_epochs?: 'auto' | number;\n}\n\n/**\n * Configuration for the supervised fine-tuning method.\n */\nexport interface SupervisedMethod {\n  /**\n   * The hyperparameters used for the fine-tuning job.\n   */\n  hyperparameters?: SupervisedHyperparameters;\n}\n\nexport declare namespace Methods {\n  export {\n    type DpoHyperparameters as DpoHyperparameters,\n    type DpoMethod as DpoMethod,\n    type ReinforcementHyperparameters as ReinforcementHyperparameters,\n    type ReinforcementMethod as ReinforcementMethod,\n    type SupervisedHyperparameters as SupervisedHyperparameters,\n    type SupervisedMethod as SupervisedMethod,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as GraderModelsAPI from '../../graders/grader-models';\nimport { APIPromise } from '../../../core/api-promise';\nimport { RequestOptions } from '../../../internal/request-options';\n\n/**\n * Manage fine-tuning jobs to tailor a model to your specific training data.\n */\nexport class Graders extends APIResource {\n  /**\n   * Run a grader.\n   *\n   * @example\n   * ```ts\n   * const response = await client.fineTuning.alpha.graders.run({\n   *   grader: {\n   *     input: 'input',\n   *     name: 'name',\n   *     operation: 'eq',\n   *     reference: 'reference',\n   *     type: 'string_check',\n   *   },\n   *   model_sample: 'model_sample',\n   * });\n   * ```\n   */\n  run(body: GraderRunParams, options?: RequestOptions): APIPromise<GraderRunResponse> {\n    return this._client.post('/fine_tuning/alpha/graders/run', {\n      body,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Validate a grader.\n   *\n   * @example\n   * ```ts\n   * const response =\n   *   await client.fineTuning.alpha.graders.validate({\n   *     grader: {\n   *       input: 'input',\n   *       name: 'name',\n   *       operation: 'eq',\n   *       reference: 'reference',\n   *       type: 'string_check',\n   *     },\n   *   });\n   * ```\n   */\n  validate(body: GraderValidateParams, options?: RequestOptions): APIPromise<GraderValidateResponse> {\n    return this._client.post('/fine_tuning/alpha/graders/validate', {\n      body,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\nexport interface GraderRunResponse {\n  metadata: GraderRunResponse.Metadata;\n\n  model_grader_token_usage_per_model: { [key: string]: unknown };\n\n  reward: number;\n\n  sub_rewards: { [key: string]: unknown };\n}\n\nexport namespace GraderRunResponse {\n  export interface Metadata {\n    errors: Metadata.Errors;\n\n    execution_time: number;\n\n    name: string;\n\n    sampled_model_name: string | null;\n\n    scores: { [key: string]: unknown };\n\n    token_usage: number | null;\n\n    type: string;\n  }\n\n  export namespace Metadata {\n    export interface Errors {\n      formula_parse_error: boolean;\n\n      invalid_variable_error: boolean;\n\n      model_grader_parse_error: boolean;\n\n      model_grader_refusal_error: boolean;\n\n      model_grader_server_error: boolean;\n\n      model_grader_server_error_details: string | null;\n\n      other_error: boolean;\n\n      python_grader_runtime_error: boolean;\n\n      python_grader_runtime_error_details: string | null;\n\n      python_grader_server_error: boolean;\n\n      python_grader_server_error_type: string | null;\n\n      sample_parse_error: boolean;\n\n      truncated_observation_error: boolean;\n\n      unresponsive_reward_error: boolean;\n    }\n  }\n}\n\nexport interface GraderValidateResponse {\n  /**\n   * The grader used for the fine-tuning job.\n   */\n  grader?:\n    | GraderModelsAPI.StringCheckGrader\n    | GraderModelsAPI.TextSimilarityGrader\n    | GraderModelsAPI.PythonGrader\n    | GraderModelsAPI.ScoreModelGrader\n    | GraderModelsAPI.MultiGrader;\n}\n\nexport interface GraderRunParams {\n  /**\n   * The grader used for the fine-tuning job.\n   */\n  grader:\n    | GraderModelsAPI.StringCheckGrader\n    | GraderModelsAPI.TextSimilarityGrader\n    | GraderModelsAPI.PythonGrader\n    | GraderModelsAPI.ScoreModelGrader\n    | GraderModelsAPI.MultiGrader;\n\n  /**\n   * The model sample to be evaluated. This value will be used to populate the\n   * `sample` namespace. See\n   * [the guide](https://platform.openai.com/docs/guides/graders) for more details.\n   * The `output_json` variable will be populated if the model sample is a valid JSON\n   * string.\n   */\n  model_sample: string;\n\n  /**\n   * The dataset item provided to the grader. This will be used to populate the\n   * `item` namespace. See\n   * [the guide](https://platform.openai.com/docs/guides/graders) for more details.\n   */\n  item?: unknown;\n}\n\nexport interface GraderValidateParams {\n  /**\n   * The grader used for the fine-tuning job.\n   */\n  grader:\n    | GraderModelsAPI.StringCheckGrader\n    | GraderModelsAPI.TextSimilarityGrader\n    | GraderModelsAPI.PythonGrader\n    | GraderModelsAPI.ScoreModelGrader\n    | GraderModelsAPI.MultiGrader;\n}\n\nexport declare namespace Graders {\n  export {\n    type GraderRunResponse as GraderRunResponse,\n    type GraderValidateResponse as GraderValidateResponse,\n    type GraderRunParams as GraderRunParams,\n    type GraderValidateParams as GraderValidateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as GradersAPI from './graders';\nimport {\n  GraderRunParams,\n  GraderRunResponse,\n  GraderValidateParams,\n  GraderValidateResponse,\n  Graders,\n} from './graders';\n\nexport class Alpha extends APIResource {\n  graders: GradersAPI.Graders = new GradersAPI.Graders(this._client);\n}\n\nAlpha.Graders = Graders;\n\nexport declare namespace Alpha {\n  export {\n    Graders as Graders,\n    type GraderRunResponse as GraderRunResponse,\n    type GraderValidateResponse as GraderValidateResponse,\n    type GraderRunParams as GraderRunParams,\n    type GraderValidateParams as GraderValidateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport { APIPromise } from '../../../core/api-promise';\nimport {\n  ConversationCursorPage,\n  type ConversationCursorPageParams,\n  Page,\n  PagePromise,\n} from '../../../core/pagination';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\n/**\n * Manage fine-tuning jobs to tailor a model to your specific training data.\n */\nexport class Permissions extends APIResource {\n  /**\n   * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n   *\n   * This enables organization owners to share fine-tuned models with other projects\n   * in their organization.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n   *   'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n   *   { project_ids: ['string'] },\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  create(\n    fineTunedModelCheckpoint: string,\n    body: PermissionCreateParams,\n    options?: RequestOptions,\n  ): PagePromise<PermissionCreateResponsesPage, PermissionCreateResponse> {\n    return this._client.getAPIList(\n      path`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`,\n      Page<PermissionCreateResponse>,\n      { body, method: 'post', ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n   *\n   * Organization owners can use this endpoint to view all permissions for a\n   * fine-tuned model checkpoint.\n   *\n   * @deprecated Retrieve is deprecated. Please swap to the paginated list method instead.\n   */\n  retrieve(\n    fineTunedModelCheckpoint: string,\n    query: PermissionRetrieveParams | null | undefined = {},\n    options?: RequestOptions,\n  ): APIPromise<PermissionRetrieveResponse> {\n    return this._client.get(path`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n      query,\n      ...options,\n      __security: { adminAPIKeyAuth: true },\n    });\n  }\n\n  /**\n   * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n   *\n   * Organization owners can use this endpoint to view all permissions for a\n   * fine-tuned model checkpoint.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const permissionListResponse of client.fineTuning.checkpoints.permissions.list(\n   *   'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    fineTunedModelCheckpoint: string,\n    query: PermissionListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<PermissionListResponsesPage, PermissionListResponse> {\n    return this._client.getAPIList(\n      path`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`,\n      ConversationCursorPage<PermissionListResponse>,\n      { query, ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n\n  /**\n   * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n   *\n   * Organization owners can use this endpoint to delete a permission for a\n   * fine-tuned model checkpoint.\n   *\n   * @example\n   * ```ts\n   * const permission =\n   *   await client.fineTuning.checkpoints.permissions.delete(\n   *     'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n   *     {\n   *       fine_tuned_model_checkpoint:\n   *         'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n   *     },\n   *   );\n   * ```\n   */\n  delete(\n    permissionID: string,\n    params: PermissionDeleteParams,\n    options?: RequestOptions,\n  ): APIPromise<PermissionDeleteResponse> {\n    const { fine_tuned_model_checkpoint } = params;\n    return this._client.delete(\n      path`/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`,\n      { ...options, __security: { adminAPIKeyAuth: true } },\n    );\n  }\n}\n\n// Note: no pagination actually occurs yet, this is for forwards-compatibility.\nexport type PermissionCreateResponsesPage = Page<PermissionCreateResponse>;\n\nexport type PermissionListResponsesPage = ConversationCursorPage<PermissionListResponse>;\n\n/**\n * The `checkpoint.permission` object represents a permission for a fine-tuned\n * model checkpoint.\n */\nexport interface PermissionCreateResponse {\n  /**\n   * The permission identifier, which can be referenced in the API endpoints.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the permission was created.\n   */\n  created_at: number;\n\n  /**\n   * The object type, which is always \"checkpoint.permission\".\n   */\n  object: 'checkpoint.permission';\n\n  /**\n   * The project identifier that the permission is for.\n   */\n  project_id: string;\n}\n\nexport interface PermissionRetrieveResponse {\n  data: Array<PermissionRetrieveResponse.Data>;\n\n  has_more: boolean;\n\n  object: 'list';\n\n  first_id?: string | null;\n\n  last_id?: string | null;\n}\n\nexport namespace PermissionRetrieveResponse {\n  /**\n   * The `checkpoint.permission` object represents a permission for a fine-tuned\n   * model checkpoint.\n   */\n  export interface Data {\n    /**\n     * The permission identifier, which can be referenced in the API endpoints.\n     */\n    id: string;\n\n    /**\n     * The Unix timestamp (in seconds) for when the permission was created.\n     */\n    created_at: number;\n\n    /**\n     * The object type, which is always \"checkpoint.permission\".\n     */\n    object: 'checkpoint.permission';\n\n    /**\n     * The project identifier that the permission is for.\n     */\n    project_id: string;\n  }\n}\n\n/**\n * The `checkpoint.permission` object represents a permission for a fine-tuned\n * model checkpoint.\n */\nexport interface PermissionListResponse {\n  /**\n   * The permission identifier, which can be referenced in the API endpoints.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the permission was created.\n   */\n  created_at: number;\n\n  /**\n   * The object type, which is always \"checkpoint.permission\".\n   */\n  object: 'checkpoint.permission';\n\n  /**\n   * The project identifier that the permission is for.\n   */\n  project_id: string;\n}\n\nexport interface PermissionDeleteResponse {\n  /**\n   * The ID of the fine-tuned model checkpoint permission that was deleted.\n   */\n  id: string;\n\n  /**\n   * Whether the fine-tuned model checkpoint permission was successfully deleted.\n   */\n  deleted: boolean;\n\n  /**\n   * The object type, which is always \"checkpoint.permission\".\n   */\n  object: 'checkpoint.permission';\n}\n\nexport interface PermissionCreateParams {\n  /**\n   * The project identifiers to grant access to.\n   */\n  project_ids: Array<string>;\n}\n\nexport interface PermissionRetrieveParams {\n  /**\n   * Identifier for the last permission ID from the previous pagination request.\n   */\n  after?: string;\n\n  /**\n   * Number of permissions to retrieve.\n   */\n  limit?: number;\n\n  /**\n   * The order in which to retrieve permissions.\n   */\n  order?: 'ascending' | 'descending';\n\n  /**\n   * The ID of the project to get permissions for.\n   */\n  project_id?: string;\n}\n\nexport interface PermissionListParams extends ConversationCursorPageParams {\n  /**\n   * The order in which to retrieve permissions.\n   */\n  order?: 'ascending' | 'descending';\n\n  /**\n   * The ID of the project to get permissions for.\n   */\n  project_id?: string;\n}\n\nexport interface PermissionDeleteParams {\n  /**\n   * The ID of the fine-tuned model checkpoint to delete a permission for.\n   */\n  fine_tuned_model_checkpoint: string;\n}\n\nexport declare namespace Permissions {\n  export {\n    type PermissionCreateResponse as PermissionCreateResponse,\n    type PermissionRetrieveResponse as PermissionRetrieveResponse,\n    type PermissionListResponse as PermissionListResponse,\n    type PermissionDeleteResponse as PermissionDeleteResponse,\n    type PermissionCreateResponsesPage as PermissionCreateResponsesPage,\n    type PermissionListResponsesPage as PermissionListResponsesPage,\n    type PermissionCreateParams as PermissionCreateParams,\n    type PermissionRetrieveParams as PermissionRetrieveParams,\n    type PermissionListParams as PermissionListParams,\n    type PermissionDeleteParams as PermissionDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as PermissionsAPI from './permissions';\nimport {\n  PermissionCreateParams,\n  PermissionCreateResponse,\n  PermissionCreateResponsesPage,\n  PermissionDeleteParams,\n  PermissionDeleteResponse,\n  PermissionListParams,\n  PermissionListResponse,\n  PermissionListResponsesPage,\n  PermissionRetrieveParams,\n  PermissionRetrieveResponse,\n  Permissions,\n} from './permissions';\n\nexport class Checkpoints extends APIResource {\n  permissions: PermissionsAPI.Permissions = new PermissionsAPI.Permissions(this._client);\n}\n\nCheckpoints.Permissions = Permissions;\n\nexport declare namespace Checkpoints {\n  export {\n    Permissions as Permissions,\n    type PermissionCreateResponse as PermissionCreateResponse,\n    type PermissionRetrieveResponse as PermissionRetrieveResponse,\n    type PermissionListResponse as PermissionListResponse,\n    type PermissionDeleteResponse as PermissionDeleteResponse,\n    type PermissionCreateResponsesPage as PermissionCreateResponsesPage,\n    type PermissionListResponsesPage as PermissionListResponsesPage,\n    type PermissionCreateParams as PermissionCreateParams,\n    type PermissionRetrieveParams as PermissionRetrieveParams,\n    type PermissionListParams as PermissionListParams,\n    type PermissionDeleteParams as PermissionDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pagination';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\n/**\n * Manage fine-tuning jobs to tailor a model to your specific training data.\n */\nexport class Checkpoints extends APIResource {\n  /**\n   * List checkpoints for a fine-tuning job.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n   *   'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    fineTuningJobID: string,\n    query: CheckpointListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<FineTuningJobCheckpointsPage, FineTuningJobCheckpoint> {\n    return this._client.getAPIList(\n      path`/fine_tuning/jobs/${fineTuningJobID}/checkpoints`,\n      CursorPage<FineTuningJobCheckpoint>,\n      { query, ...options, __security: { bearerAuth: true } },\n    );\n  }\n}\n\nexport type FineTuningJobCheckpointsPage = CursorPage<FineTuningJobCheckpoint>;\n\n/**\n * The `fine_tuning.job.checkpoint` object represents a model checkpoint for a\n * fine-tuning job that is ready to use.\n */\nexport interface FineTuningJobCheckpoint {\n  /**\n   * The checkpoint identifier, which can be referenced in the API endpoints.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the checkpoint was created.\n   */\n  created_at: number;\n\n  /**\n   * The name of the fine-tuned checkpoint model that is created.\n   */\n  fine_tuned_model_checkpoint: string;\n\n  /**\n   * The name of the fine-tuning job that this checkpoint was created from.\n   */\n  fine_tuning_job_id: string;\n\n  /**\n   * Metrics at the step number during the fine-tuning job.\n   */\n  metrics: FineTuningJobCheckpoint.Metrics;\n\n  /**\n   * The object type, which is always \"fine_tuning.job.checkpoint\".\n   */\n  object: 'fine_tuning.job.checkpoint';\n\n  /**\n   * The step number that the checkpoint was created at.\n   */\n  step_number: number;\n}\n\nexport namespace FineTuningJobCheckpoint {\n  /**\n   * Metrics at the step number during the fine-tuning job.\n   */\n  export interface Metrics {\n    full_valid_loss?: number;\n\n    full_valid_mean_token_accuracy?: number;\n\n    step?: number;\n\n    train_loss?: number;\n\n    train_mean_token_accuracy?: number;\n\n    valid_loss?: number;\n\n    valid_mean_token_accuracy?: number;\n  }\n}\n\nexport interface CheckpointListParams extends CursorPageParams {}\n\nexport declare namespace Checkpoints {\n  export {\n    type FineTuningJobCheckpoint as FineTuningJobCheckpoint,\n    type FineTuningJobCheckpointsPage as FineTuningJobCheckpointsPage,\n    type CheckpointListParams as CheckpointListParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as Shared from '../../shared';\nimport * as MethodsAPI from '../methods';\nimport * as CheckpointsAPI from './checkpoints';\nimport {\n  CheckpointListParams,\n  Checkpoints,\n  FineTuningJobCheckpoint,\n  FineTuningJobCheckpointsPage,\n} from './checkpoints';\nimport { APIPromise } from '../../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pagination';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\n/**\n * Manage fine-tuning jobs to tailor a model to your specific training data.\n */\nexport class Jobs extends APIResource {\n  checkpoints: CheckpointsAPI.Checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n\n  /**\n   * Creates a fine-tuning job which begins the process of creating a new model from\n   * a given dataset.\n   *\n   * Response includes details of the enqueued job including job status and the name\n   * of the fine-tuned models once complete.\n   *\n   * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n   *\n   * @example\n   * ```ts\n   * const fineTuningJob = await client.fineTuning.jobs.create({\n   *   model: 'gpt-4o-mini',\n   *   training_file: 'file-abc123',\n   * });\n   * ```\n   */\n  create(body: JobCreateParams, options?: RequestOptions): APIPromise<FineTuningJob> {\n    return this._client.post('/fine_tuning/jobs', { body, ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * Get info about a fine-tuning job.\n   *\n   * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n   *\n   * @example\n   * ```ts\n   * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n   *   'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n   * );\n   * ```\n   */\n  retrieve(fineTuningJobID: string, options?: RequestOptions): APIPromise<FineTuningJob> {\n    return this._client.get(path`/fine_tuning/jobs/${fineTuningJobID}`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * List your organization's fine-tuning jobs\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    query: JobListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<FineTuningJobsPage, FineTuningJob> {\n    return this._client.getAPIList('/fine_tuning/jobs', CursorPage<FineTuningJob>, {\n      query,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Immediately cancel a fine-tune job.\n   *\n   * @example\n   * ```ts\n   * const fineTuningJob = await client.fineTuning.jobs.cancel(\n   *   'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n   * );\n   * ```\n   */\n  cancel(fineTuningJobID: string, options?: RequestOptions): APIPromise<FineTuningJob> {\n    return this._client.post(path`/fine_tuning/jobs/${fineTuningJobID}/cancel`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Get status updates for a fine-tuning job.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n   *   'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  listEvents(\n    fineTuningJobID: string,\n    query: JobListEventsParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<FineTuningJobEventsPage, FineTuningJobEvent> {\n    return this._client.getAPIList(\n      path`/fine_tuning/jobs/${fineTuningJobID}/events`,\n      CursorPage<FineTuningJobEvent>,\n      { query, ...options, __security: { bearerAuth: true } },\n    );\n  }\n\n  /**\n   * Pause a fine-tune job.\n   *\n   * @example\n   * ```ts\n   * const fineTuningJob = await client.fineTuning.jobs.pause(\n   *   'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n   * );\n   * ```\n   */\n  pause(fineTuningJobID: string, options?: RequestOptions): APIPromise<FineTuningJob> {\n    return this._client.post(path`/fine_tuning/jobs/${fineTuningJobID}/pause`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Resume a fine-tune job.\n   *\n   * @example\n   * ```ts\n   * const fineTuningJob = await client.fineTuning.jobs.resume(\n   *   'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n   * );\n   * ```\n   */\n  resume(fineTuningJobID: string, options?: RequestOptions): APIPromise<FineTuningJob> {\n    return this._client.post(path`/fine_tuning/jobs/${fineTuningJobID}/resume`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\nexport type FineTuningJobsPage = CursorPage<FineTuningJob>;\n\nexport type FineTuningJobEventsPage = CursorPage<FineTuningJobEvent>;\n\n/**\n * The `fine_tuning.job` object represents a fine-tuning job that has been created\n * through the API.\n */\nexport interface FineTuningJob {\n  /**\n   * The object identifier, which can be referenced in the API endpoints.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the fine-tuning job was created.\n   */\n  created_at: number;\n\n  /**\n   * For fine-tuning jobs that have `failed`, this will contain more information on\n   * the cause of the failure.\n   */\n  error: FineTuningJob.Error | null;\n\n  /**\n   * The name of the fine-tuned model that is being created. The value will be null\n   * if the fine-tuning job is still running.\n   */\n  fine_tuned_model: string | null;\n\n  /**\n   * The Unix timestamp (in seconds) for when the fine-tuning job was finished. The\n   * value will be null if the fine-tuning job is still running.\n   */\n  finished_at: number | null;\n\n  /**\n   * The hyperparameters used for the fine-tuning job. This value will only be\n   * returned when running `supervised` jobs.\n   */\n  hyperparameters: FineTuningJob.Hyperparameters;\n\n  /**\n   * The base model that is being fine-tuned.\n   */\n  model: string;\n\n  /**\n   * The object type, which is always \"fine_tuning.job\".\n   */\n  object: 'fine_tuning.job';\n\n  /**\n   * The organization that owns the fine-tuning job.\n   */\n  organization_id: string;\n\n  /**\n   * The compiled results file ID(s) for the fine-tuning job. You can retrieve the\n   * results with the\n   * [Files API](https://platform.openai.com/docs/api-reference/files/retrieve-contents).\n   */\n  result_files: Array<string>;\n\n  /**\n   * The seed used for the fine-tuning job.\n   */\n  seed: number;\n\n  /**\n   * The current status of the fine-tuning job, which can be either\n   * `validating_files`, `queued`, `running`, `succeeded`, `failed`, or `cancelled`.\n   */\n  status: 'validating_files' | 'queued' | 'running' | 'succeeded' | 'failed' | 'cancelled';\n\n  /**\n   * The total number of billable tokens processed by this fine-tuning job. The value\n   * will be null if the fine-tuning job is still running.\n   */\n  trained_tokens: number | null;\n\n  /**\n   * The file ID used for training. You can retrieve the training data with the\n   * [Files API](https://platform.openai.com/docs/api-reference/files/retrieve-contents).\n   */\n  training_file: string;\n\n  /**\n   * The file ID used for validation. You can retrieve the validation results with\n   * the\n   * [Files API](https://platform.openai.com/docs/api-reference/files/retrieve-contents).\n   */\n  validation_file: string | null;\n\n  /**\n   * The Unix timestamp (in seconds) for when the fine-tuning job is estimated to\n   * finish. The value will be null if the fine-tuning job is not running.\n   */\n  estimated_finish?: number | null;\n\n  /**\n   * A list of integrations to enable for this fine-tuning job.\n   */\n  integrations?: Array<FineTuningJobWandbIntegrationObject> | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * The method used for fine-tuning.\n   */\n  method?: FineTuningJob.Method;\n}\n\nexport namespace FineTuningJob {\n  /**\n   * For fine-tuning jobs that have `failed`, this will contain more information on\n   * the cause of the failure.\n   */\n  export interface Error {\n    /**\n     * A machine-readable error code.\n     */\n    code: string;\n\n    /**\n     * A human-readable error message.\n     */\n    message: string;\n\n    /**\n     * The parameter that was invalid, usually `training_file` or `validation_file`.\n     * This field will be null if the failure was not parameter-specific.\n     */\n    param: string | null;\n  }\n\n  /**\n   * The hyperparameters used for the fine-tuning job. This value will only be\n   * returned when running `supervised` jobs.\n   */\n  export interface Hyperparameters {\n    /**\n     * Number of examples in each batch. A larger batch size means that model\n     * parameters are updated less frequently, but with lower variance.\n     */\n    batch_size?: 'auto' | number | null;\n\n    /**\n     * Scaling factor for the learning rate. A smaller learning rate may be useful to\n     * avoid overfitting.\n     */\n    learning_rate_multiplier?: 'auto' | number;\n\n    /**\n     * The number of epochs to train the model for. An epoch refers to one full cycle\n     * through the training dataset.\n     */\n    n_epochs?: 'auto' | number;\n  }\n\n  /**\n   * The method used for fine-tuning.\n   */\n  export interface Method {\n    /**\n     * The type of method. Is either `supervised`, `dpo`, or `reinforcement`.\n     */\n    type: 'supervised' | 'dpo' | 'reinforcement';\n\n    /**\n     * Configuration for the DPO fine-tuning method.\n     */\n    dpo?: MethodsAPI.DpoMethod;\n\n    /**\n     * Configuration for the reinforcement fine-tuning method.\n     */\n    reinforcement?: MethodsAPI.ReinforcementMethod;\n\n    /**\n     * Configuration for the supervised fine-tuning method.\n     */\n    supervised?: MethodsAPI.SupervisedMethod;\n  }\n}\n\n/**\n * Fine-tuning job event object\n */\nexport interface FineTuningJobEvent {\n  /**\n   * The object identifier.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the fine-tuning job was created.\n   */\n  created_at: number;\n\n  /**\n   * The log level of the event.\n   */\n  level: 'info' | 'warn' | 'error';\n\n  /**\n   * The message of the event.\n   */\n  message: string;\n\n  /**\n   * The object type, which is always \"fine_tuning.job.event\".\n   */\n  object: 'fine_tuning.job.event';\n\n  /**\n   * The data associated with the event.\n   */\n  data?: unknown;\n\n  /**\n   * The type of event.\n   */\n  type?: 'message' | 'metrics';\n}\n\n/**\n * The settings for your integration with Weights and Biases. This payload\n * specifies the project that metrics will be sent to. Optionally, you can set an\n * explicit display name for your run, add tags to your run, and set a default\n * entity (team, username, etc) to be associated with your run.\n */\nexport interface FineTuningJobWandbIntegration {\n  /**\n   * The name of the project that the new run will be created under.\n   */\n  project: string;\n\n  /**\n   * The entity to use for the run. This allows you to set the team or username of\n   * the WandB user that you would like associated with the run. If not set, the\n   * default entity for the registered WandB API key is used.\n   */\n  entity?: string | null;\n\n  /**\n   * A display name to set for the run. If not set, we will use the Job ID as the\n   * name.\n   */\n  name?: string | null;\n\n  /**\n   * A list of tags to be attached to the newly created run. These tags are passed\n   * through directly to WandB. Some default tags are generated by OpenAI:\n   * \"openai/finetune\", \"openai/{base-model}\", \"openai/{ftjob-abcdef}\".\n   */\n  tags?: Array<string>;\n}\n\nexport interface FineTuningJobWandbIntegrationObject {\n  /**\n   * The type of the integration being enabled for the fine-tuning job\n   */\n  type: 'wandb';\n\n  /**\n   * The settings for your integration with Weights and Biases. This payload\n   * specifies the project that metrics will be sent to. Optionally, you can set an\n   * explicit display name for your run, add tags to your run, and set a default\n   * entity (team, username, etc) to be associated with your run.\n   */\n  wandb: FineTuningJobWandbIntegration;\n}\n\nexport type FineTuningJobIntegration = FineTuningJobWandbIntegrationObject;\n\nexport interface JobCreateParams {\n  /**\n   * The name of the model to fine-tune. You can select one of the\n   * [supported models](https://platform.openai.com/docs/guides/fine-tuning#which-models-can-be-fine-tuned).\n   */\n  model: (string & {}) | 'babbage-002' | 'davinci-002' | 'gpt-3.5-turbo' | 'gpt-4o-mini';\n\n  /**\n   * The ID of an uploaded file that contains training data.\n   *\n   * See [upload file](https://platform.openai.com/docs/api-reference/files/create)\n   * for how to upload a file.\n   *\n   * Your dataset must be formatted as a JSONL file. Additionally, you must upload\n   * your file with the purpose `fine-tune`.\n   *\n   * The contents of the file should differ depending on if the model uses the\n   * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input),\n   * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n   * format, or if the fine-tuning method uses the\n   * [preference](https://platform.openai.com/docs/api-reference/fine-tuning/preference-input)\n   * format.\n   *\n   * See the\n   * [fine-tuning guide](https://platform.openai.com/docs/guides/model-optimization)\n   * for more details.\n   */\n  training_file: string;\n\n  /**\n   * @deprecated The hyperparameters used for the fine-tuning job. This value is now\n   * deprecated in favor of `method`, and should be passed in under the `method`\n   * parameter.\n   */\n  hyperparameters?: JobCreateParams.Hyperparameters;\n\n  /**\n   * A list of integrations to enable for your fine-tuning job.\n   */\n  integrations?: Array<JobCreateParams.Integration> | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * The method used for fine-tuning.\n   */\n  method?: JobCreateParams.Method;\n\n  /**\n   * The seed controls the reproducibility of the job. Passing in the same seed and\n   * job parameters should produce the same results, but may differ in rare cases. If\n   * a seed is not specified, one will be generated for you.\n   */\n  seed?: number | null;\n\n  /**\n   * A string of up to 64 characters that will be added to your fine-tuned model\n   * name.\n   *\n   * For example, a `suffix` of \"custom-model-name\" would produce a model name like\n   * `ft:gpt-4o-mini:openai:custom-model-name:7p4lURel`.\n   */\n  suffix?: string | null;\n\n  /**\n   * The ID of an uploaded file that contains validation data.\n   *\n   * If you provide this file, the data is used to generate validation metrics\n   * periodically during fine-tuning. These metrics can be viewed in the fine-tuning\n   * results file. The same data should not be present in both train and validation\n   * files.\n   *\n   * Your dataset must be formatted as a JSONL file. You must upload your file with\n   * the purpose `fine-tune`.\n   *\n   * See the\n   * [fine-tuning guide](https://platform.openai.com/docs/guides/model-optimization)\n   * for more details.\n   */\n  validation_file?: string | null;\n}\n\nexport namespace JobCreateParams {\n  /**\n   * @deprecated The hyperparameters used for the fine-tuning job. This value is now\n   * deprecated in favor of `method`, and should be passed in under the `method`\n   * parameter.\n   */\n  export interface Hyperparameters {\n    /**\n     * Number of examples in each batch. A larger batch size means that model\n     * parameters are updated less frequently, but with lower variance.\n     */\n    batch_size?: 'auto' | number;\n\n    /**\n     * Scaling factor for the learning rate. A smaller learning rate may be useful to\n     * avoid overfitting.\n     */\n    learning_rate_multiplier?: 'auto' | number;\n\n    /**\n     * The number of epochs to train the model for. An epoch refers to one full cycle\n     * through the training dataset.\n     */\n    n_epochs?: 'auto' | number;\n  }\n\n  export interface Integration {\n    /**\n     * The type of integration to enable. Currently, only \"wandb\" (Weights and Biases)\n     * is supported.\n     */\n    type: 'wandb';\n\n    /**\n     * The settings for your integration with Weights and Biases. This payload\n     * specifies the project that metrics will be sent to. Optionally, you can set an\n     * explicit display name for your run, add tags to your run, and set a default\n     * entity (team, username, etc) to be associated with your run.\n     */\n    wandb: Integration.Wandb;\n  }\n\n  export namespace Integration {\n    /**\n     * The settings for your integration with Weights and Biases. This payload\n     * specifies the project that metrics will be sent to. Optionally, you can set an\n     * explicit display name for your run, add tags to your run, and set a default\n     * entity (team, username, etc) to be associated with your run.\n     */\n    export interface Wandb {\n      /**\n       * The name of the project that the new run will be created under.\n       */\n      project: string;\n\n      /**\n       * The entity to use for the run. This allows you to set the team or username of\n       * the WandB user that you would like associated with the run. If not set, the\n       * default entity for the registered WandB API key is used.\n       */\n      entity?: string | null;\n\n      /**\n       * A display name to set for the run. If not set, we will use the Job ID as the\n       * name.\n       */\n      name?: string | null;\n\n      /**\n       * A list of tags to be attached to the newly created run. These tags are passed\n       * through directly to WandB. Some default tags are generated by OpenAI:\n       * \"openai/finetune\", \"openai/{base-model}\", \"openai/{ftjob-abcdef}\".\n       */\n      tags?: Array<string>;\n    }\n  }\n\n  /**\n   * The method used for fine-tuning.\n   */\n  export interface Method {\n    /**\n     * The type of method. Is either `supervised`, `dpo`, or `reinforcement`.\n     */\n    type: 'supervised' | 'dpo' | 'reinforcement';\n\n    /**\n     * Configuration for the DPO fine-tuning method.\n     */\n    dpo?: MethodsAPI.DpoMethod;\n\n    /**\n     * Configuration for the reinforcement fine-tuning method.\n     */\n    reinforcement?: MethodsAPI.ReinforcementMethod;\n\n    /**\n     * Configuration for the supervised fine-tuning method.\n     */\n    supervised?: MethodsAPI.SupervisedMethod;\n  }\n}\n\nexport interface JobListParams extends CursorPageParams {\n  /**\n   * Optional metadata filter. To filter, use the syntax `metadata[k]=v`.\n   * Alternatively, set `metadata=null` to indicate no metadata.\n   */\n  metadata?: { [key: string]: string } | null;\n}\n\nexport interface JobListEventsParams extends CursorPageParams {}\n\nJobs.Checkpoints = Checkpoints;\n\nexport declare namespace Jobs {\n  export {\n    type FineTuningJob as FineTuningJob,\n    type FineTuningJobEvent as FineTuningJobEvent,\n    type FineTuningJobWandbIntegration as FineTuningJobWandbIntegration,\n    type FineTuningJobWandbIntegrationObject as FineTuningJobWandbIntegrationObject,\n    type FineTuningJobIntegration as FineTuningJobIntegration,\n    type FineTuningJobsPage as FineTuningJobsPage,\n    type FineTuningJobEventsPage as FineTuningJobEventsPage,\n    type JobCreateParams as JobCreateParams,\n    type JobListParams as JobListParams,\n    type JobListEventsParams as JobListEventsParams,\n  };\n\n  export {\n    Checkpoints as Checkpoints,\n    type FineTuningJobCheckpoint as FineTuningJobCheckpoint,\n    type FineTuningJobCheckpointsPage as FineTuningJobCheckpointsPage,\n    type CheckpointListParams as CheckpointListParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as MethodsAPI from './methods';\nimport {\n  DpoHyperparameters,\n  DpoMethod,\n  Methods,\n  ReinforcementHyperparameters,\n  ReinforcementMethod,\n  SupervisedHyperparameters,\n  SupervisedMethod,\n} from './methods';\nimport * as AlphaAPI from './alpha/alpha';\nimport { Alpha } from './alpha/alpha';\nimport * as CheckpointsAPI from './checkpoints/checkpoints';\nimport { Checkpoints } from './checkpoints/checkpoints';\nimport * as JobsAPI from './jobs/jobs';\nimport {\n  FineTuningJob,\n  FineTuningJobEvent,\n  FineTuningJobEventsPage,\n  FineTuningJobIntegration,\n  FineTuningJobWandbIntegration,\n  FineTuningJobWandbIntegrationObject,\n  FineTuningJobsPage,\n  JobCreateParams,\n  JobListEventsParams,\n  JobListParams,\n  Jobs,\n} from './jobs/jobs';\n\nexport class FineTuning extends APIResource {\n  methods: MethodsAPI.Methods = new MethodsAPI.Methods(this._client);\n  jobs: JobsAPI.Jobs = new JobsAPI.Jobs(this._client);\n  checkpoints: CheckpointsAPI.Checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n  alpha: AlphaAPI.Alpha = new AlphaAPI.Alpha(this._client);\n}\n\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n\nexport declare namespace FineTuning {\n  export {\n    Methods as Methods,\n    type DpoHyperparameters as DpoHyperparameters,\n    type DpoMethod as DpoMethod,\n    type ReinforcementHyperparameters as ReinforcementHyperparameters,\n    type ReinforcementMethod as ReinforcementMethod,\n    type SupervisedHyperparameters as SupervisedHyperparameters,\n    type SupervisedMethod as SupervisedMethod,\n  };\n\n  export {\n    Jobs as Jobs,\n    type FineTuningJob as FineTuningJob,\n    type FineTuningJobEvent as FineTuningJobEvent,\n    type FineTuningJobWandbIntegration as FineTuningJobWandbIntegration,\n    type FineTuningJobWandbIntegrationObject as FineTuningJobWandbIntegrationObject,\n    type FineTuningJobIntegration as FineTuningJobIntegration,\n    type FineTuningJobsPage as FineTuningJobsPage,\n    type FineTuningJobEventsPage as FineTuningJobEventsPage,\n    type JobCreateParams as JobCreateParams,\n    type JobListParams as JobListParams,\n    type JobListEventsParams as JobListEventsParams,\n  };\n\n  export { Checkpoints as Checkpoints };\n\n  export { Alpha as Alpha };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as GraderModelsAPI from './grader-models';\nimport * as Shared from '../shared';\nimport * as ResponsesAPI from '../responses/responses';\n\nexport class GraderModels extends APIResource {}\n\n/**\n * A list of inputs, each of which may be either an input text, output text, input\n * image, or input audio object.\n */\nexport type GraderInputs = Array<\n  | string\n  | ResponsesAPI.ResponseInputText\n  | GraderInputs.OutputText\n  | GraderInputs.InputImage\n  | ResponsesAPI.ResponseInputAudio\n>;\n\nexport namespace GraderInputs {\n  /**\n   * A text output from the model.\n   */\n  export interface OutputText {\n    /**\n     * The text output from the model.\n     */\n    text: string;\n\n    /**\n     * The type of the output text. Always `output_text`.\n     */\n    type: 'output_text';\n  }\n\n  /**\n   * An image input block used within EvalItem content arrays.\n   */\n  export interface InputImage {\n    /**\n     * The URL of the image input.\n     */\n    image_url: string;\n\n    /**\n     * The type of the image input. Always `input_image`.\n     */\n    type: 'input_image';\n\n    /**\n     * The detail level of the image to be sent to the model. One of `high`, `low`, or\n     * `auto`. Defaults to `auto`.\n     */\n    detail?: string;\n  }\n}\n\n/**\n * A LabelModelGrader object which uses a model to assign labels to each item in\n * the evaluation.\n */\nexport interface LabelModelGrader {\n  input: Array<LabelModelGrader.Input>;\n\n  /**\n   * The labels to assign to each item in the evaluation.\n   */\n  labels: Array<string>;\n\n  /**\n   * The model to use for the evaluation. Must support structured outputs.\n   */\n  model: string;\n\n  /**\n   * The name of the grader.\n   */\n  name: string;\n\n  /**\n   * The labels that indicate a passing result. Must be a subset of labels.\n   */\n  passing_labels: Array<string>;\n\n  /**\n   * The object type, which is always `label_model`.\n   */\n  type: 'label_model';\n}\n\nexport namespace LabelModelGrader {\n  /**\n   * A message input to the model with a role indicating instruction following\n   * hierarchy. Instructions given with the `developer` or `system` role take\n   * precedence over instructions given with the `user` role. Messages with the\n   * `assistant` role are presumed to have been generated by the model in previous\n   * interactions.\n   */\n  export interface Input {\n    /**\n     * Inputs to the model - can contain template strings. Supports text, output text,\n     * input images, and input audio, either as a single item or an array of items.\n     */\n    content:\n      | string\n      | ResponsesAPI.ResponseInputText\n      | Input.OutputText\n      | Input.InputImage\n      | ResponsesAPI.ResponseInputAudio\n      | GraderModelsAPI.GraderInputs;\n\n    /**\n     * The role of the message input. One of `user`, `assistant`, `system`, or\n     * `developer`.\n     */\n    role: 'user' | 'assistant' | 'system' | 'developer';\n\n    /**\n     * The type of the message input. Always `message`.\n     */\n    type?: 'message';\n  }\n\n  export namespace Input {\n    /**\n     * A text output from the model.\n     */\n    export interface OutputText {\n      /**\n       * The text output from the model.\n       */\n      text: string;\n\n      /**\n       * The type of the output text. Always `output_text`.\n       */\n      type: 'output_text';\n    }\n\n    /**\n     * An image input block used within EvalItem content arrays.\n     */\n    export interface InputImage {\n      /**\n       * The URL of the image input.\n       */\n      image_url: string;\n\n      /**\n       * The type of the image input. Always `input_image`.\n       */\n      type: 'input_image';\n\n      /**\n       * The detail level of the image to be sent to the model. One of `high`, `low`, or\n       * `auto`. Defaults to `auto`.\n       */\n      detail?: string;\n    }\n  }\n}\n\n/**\n * A MultiGrader object combines the output of multiple graders to produce a single\n * score.\n */\nexport interface MultiGrader {\n  /**\n   * A formula to calculate the output based on grader results.\n   */\n  calculate_output: string;\n\n  /**\n   * A StringCheckGrader object that performs a string comparison between input and\n   * reference using a specified operation.\n   */\n  graders: StringCheckGrader | TextSimilarityGrader | PythonGrader | ScoreModelGrader | LabelModelGrader;\n\n  /**\n   * The name of the grader.\n   */\n  name: string;\n\n  /**\n   * The object type, which is always `multi`.\n   */\n  type: 'multi';\n}\n\n/**\n * A PythonGrader object that runs a python script on the input.\n */\nexport interface PythonGrader {\n  /**\n   * The name of the grader.\n   */\n  name: string;\n\n  /**\n   * The source code of the python script.\n   */\n  source: string;\n\n  /**\n   * The object type, which is always `python`.\n   */\n  type: 'python';\n\n  /**\n   * The image tag to use for the python script.\n   */\n  image_tag?: string;\n}\n\n/**\n * A ScoreModelGrader object that uses a model to assign a score to the input.\n */\nexport interface ScoreModelGrader {\n  /**\n   * The input messages evaluated by the grader. Supports text, output text, input\n   * image, and input audio content blocks, and may include template strings.\n   */\n  input: Array<ScoreModelGrader.Input>;\n\n  /**\n   * The model to use for the evaluation.\n   */\n  model: string;\n\n  /**\n   * The name of the grader.\n   */\n  name: string;\n\n  /**\n   * The object type, which is always `score_model`.\n   */\n  type: 'score_model';\n\n  /**\n   * The range of the score. Defaults to `[0, 1]`.\n   */\n  range?: Array<number>;\n\n  /**\n   * The sampling parameters for the model.\n   */\n  sampling_params?: ScoreModelGrader.SamplingParams;\n}\n\nexport namespace ScoreModelGrader {\n  /**\n   * A message input to the model with a role indicating instruction following\n   * hierarchy. Instructions given with the `developer` or `system` role take\n   * precedence over instructions given with the `user` role. Messages with the\n   * `assistant` role are presumed to have been generated by the model in previous\n   * interactions.\n   */\n  export interface Input {\n    /**\n     * Inputs to the model - can contain template strings. Supports text, output text,\n     * input images, and input audio, either as a single item or an array of items.\n     */\n    content:\n      | string\n      | ResponsesAPI.ResponseInputText\n      | Input.OutputText\n      | Input.InputImage\n      | ResponsesAPI.ResponseInputAudio\n      | GraderModelsAPI.GraderInputs;\n\n    /**\n     * The role of the message input. One of `user`, `assistant`, `system`, or\n     * `developer`.\n     */\n    role: 'user' | 'assistant' | 'system' | 'developer';\n\n    /**\n     * The type of the message input. Always `message`.\n     */\n    type?: 'message';\n  }\n\n  export namespace Input {\n    /**\n     * A text output from the model.\n     */\n    export interface OutputText {\n      /**\n       * The text output from the model.\n       */\n      text: string;\n\n      /**\n       * The type of the output text. Always `output_text`.\n       */\n      type: 'output_text';\n    }\n\n    /**\n     * An image input block used within EvalItem content arrays.\n     */\n    export interface InputImage {\n      /**\n       * The URL of the image input.\n       */\n      image_url: string;\n\n      /**\n       * The type of the image input. Always `input_image`.\n       */\n      type: 'input_image';\n\n      /**\n       * The detail level of the image to be sent to the model. One of `high`, `low`, or\n       * `auto`. Defaults to `auto`.\n       */\n      detail?: string;\n    }\n  }\n\n  /**\n   * The sampling parameters for the model.\n   */\n  export interface SamplingParams {\n    /**\n     * The maximum number of tokens the grader model may generate in its response.\n     */\n    max_completions_tokens?: number | null;\n\n    /**\n     * Constrains effort on reasoning for\n     * [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently\n     * supported values are `none`, `minimal`, `low`, `medium`, `high`, and `xhigh`.\n     * Reducing reasoning effort can result in faster responses and fewer tokens used\n     * on reasoning in a response.\n     *\n     * - `gpt-5.1` defaults to `none`, which does not perform reasoning. The supported\n     *   reasoning values for `gpt-5.1` are `none`, `low`, `medium`, and `high`. Tool\n     *   calls are supported for all reasoning values in gpt-5.1.\n     * - All models before `gpt-5.1` default to `medium` reasoning effort, and do not\n     *   support `none`.\n     * - The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.\n     * - `xhigh` is supported for all models after `gpt-5.1-codex-max`.\n     */\n    reasoning_effort?: Shared.ReasoningEffort | null;\n\n    /**\n     * A seed value to initialize the randomness, during sampling.\n     */\n    seed?: number | null;\n\n    /**\n     * A higher temperature increases randomness in the outputs.\n     */\n    temperature?: number | null;\n\n    /**\n     * An alternative to temperature for nucleus sampling; 1.0 includes all tokens.\n     */\n    top_p?: number | null;\n  }\n}\n\n/**\n * A StringCheckGrader object that performs a string comparison between input and\n * reference using a specified operation.\n */\nexport interface StringCheckGrader {\n  /**\n   * The input text. This may include template strings.\n   */\n  input: string;\n\n  /**\n   * The name of the grader.\n   */\n  name: string;\n\n  /**\n   * The string check operation to perform. One of `eq`, `ne`, `like`, or `ilike`.\n   */\n  operation: 'eq' | 'ne' | 'like' | 'ilike';\n\n  /**\n   * The reference text. This may include template strings.\n   */\n  reference: string;\n\n  /**\n   * The object type, which is always `string_check`.\n   */\n  type: 'string_check';\n}\n\n/**\n * A TextSimilarityGrader object which grades text based on similarity metrics.\n */\nexport interface TextSimilarityGrader {\n  /**\n   * The evaluation metric to use. One of `cosine`, `fuzzy_match`, `bleu`, `gleu`,\n   * `meteor`, `rouge_1`, `rouge_2`, `rouge_3`, `rouge_4`, `rouge_5`, or `rouge_l`.\n   */\n  evaluation_metric:\n    | 'cosine'\n    | 'fuzzy_match'\n    | 'bleu'\n    | 'gleu'\n    | 'meteor'\n    | 'rouge_1'\n    | 'rouge_2'\n    | 'rouge_3'\n    | 'rouge_4'\n    | 'rouge_5'\n    | 'rouge_l';\n\n  /**\n   * The text being graded.\n   */\n  input: string;\n\n  /**\n   * The name of the grader.\n   */\n  name: string;\n\n  /**\n   * The text being graded against.\n   */\n  reference: string;\n\n  /**\n   * The type of grader.\n   */\n  type: 'text_similarity';\n}\n\nexport declare namespace GraderModels {\n  export {\n    type GraderInputs as GraderInputs,\n    type LabelModelGrader as LabelModelGrader,\n    type MultiGrader as MultiGrader,\n    type PythonGrader as PythonGrader,\n    type ScoreModelGrader as ScoreModelGrader,\n    type StringCheckGrader as StringCheckGrader,\n    type TextSimilarityGrader as TextSimilarityGrader,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as GraderModelsAPI from './grader-models';\nimport {\n  GraderInputs,\n  GraderModels,\n  LabelModelGrader,\n  MultiGrader,\n  PythonGrader,\n  ScoreModelGrader,\n  StringCheckGrader,\n  TextSimilarityGrader,\n} from './grader-models';\n\nexport class Graders extends APIResource {\n  graderModels: GraderModelsAPI.GraderModels = new GraderModelsAPI.GraderModels(this._client);\n}\n\nGraders.GraderModels = GraderModels;\n\nexport declare namespace Graders {\n  export {\n    GraderModels as GraderModels,\n    type GraderInputs as GraderInputs,\n    type LabelModelGrader as LabelModelGrader,\n    type MultiGrader as MultiGrader,\n    type PythonGrader as PythonGrader,\n    type ScoreModelGrader as ScoreModelGrader,\n    type StringCheckGrader as StringCheckGrader,\n    type TextSimilarityGrader as TextSimilarityGrader,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../core/resource';\nimport * as ImagesAPI from './images';\nimport { APIPromise } from '../core/api-promise';\nimport { Stream } from '../core/streaming';\nimport { type Uploadable } from '../core/uploads';\nimport { RequestOptions } from '../internal/request-options';\nimport { multipartFormRequestOptions } from '../internal/uploads';\n\n/**\n * Given a prompt and/or an input image, the model will generate a new image.\n */\nexport class Images extends APIResource {\n  /**\n   * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n   *\n   * @example\n   * ```ts\n   * const imagesResponse = await client.images.createVariation({\n   *   image: fs.createReadStream('otter.png'),\n   * });\n   * ```\n   */\n  createVariation(body: ImageCreateVariationParams, options?: RequestOptions): APIPromise<ImagesResponse> {\n    return this._client.post(\n      '/images/variations',\n      multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client),\n    );\n  }\n\n  /**\n   * Creates an edited or extended image given one or more source images and a\n   * prompt. This endpoint supports GPT Image models (`gpt-image-1.5`, `gpt-image-1`,\n   * `gpt-image-1-mini`, and `chatgpt-image-latest`) and `dall-e-2`.\n   *\n   * @example\n   * ```ts\n   * const imagesResponse = await client.images.edit({\n   *   image: fs.createReadStream('path/to/file'),\n   *   prompt: 'A cute baby sea otter wearing a beret',\n   * });\n   * ```\n   */\n  edit(body: ImageEditParamsNonStreaming, options?: RequestOptions): APIPromise<ImagesResponse>;\n  edit(body: ImageEditParamsStreaming, options?: RequestOptions): APIPromise<Stream<ImageEditStreamEvent>>;\n  edit(\n    body: ImageEditParamsBase,\n    options?: RequestOptions,\n  ): APIPromise<Stream<ImageEditStreamEvent> | ImagesResponse>;\n  edit(\n    body: ImageEditParams,\n    options?: RequestOptions,\n  ): APIPromise<ImagesResponse> | APIPromise<Stream<ImageEditStreamEvent>> {\n    return this._client.post(\n      '/images/edits',\n      multipartFormRequestOptions(\n        { body, ...options, stream: body.stream ?? false, __security: { bearerAuth: true } },\n        this._client,\n      ),\n    ) as APIPromise<ImagesResponse> | APIPromise<Stream<ImageEditStreamEvent>>;\n  }\n\n  /**\n   * Creates an image given a prompt.\n   * [Learn more](https://platform.openai.com/docs/guides/images).\n   *\n   * @example\n   * ```ts\n   * const imagesResponse = await client.images.generate({\n   *   prompt: 'A cute baby sea otter',\n   * });\n   * ```\n   */\n  generate(body: ImageGenerateParamsNonStreaming, options?: RequestOptions): APIPromise<ImagesResponse>;\n  generate(\n    body: ImageGenerateParamsStreaming,\n    options?: RequestOptions,\n  ): APIPromise<Stream<ImageGenStreamEvent>>;\n  generate(\n    body: ImageGenerateParamsBase,\n    options?: RequestOptions,\n  ): APIPromise<Stream<ImageGenStreamEvent> | ImagesResponse>;\n  generate(\n    body: ImageGenerateParams,\n    options?: RequestOptions,\n  ): APIPromise<ImagesResponse> | APIPromise<Stream<ImageGenStreamEvent>> {\n    return this._client.post('/images/generations', {\n      body,\n      ...options,\n      stream: body.stream ?? false,\n      __security: { bearerAuth: true },\n    }) as APIPromise<ImagesResponse> | APIPromise<Stream<ImageGenStreamEvent>>;\n  }\n}\n\n/**\n * Represents the content or the URL of an image generated by the OpenAI API.\n */\nexport interface Image {\n  /**\n   * The base64-encoded JSON of the generated image. Returned by default for the GPT\n   * image models, and only present if `response_format` is set to `b64_json` for\n   * `dall-e-2` and `dall-e-3`.\n   */\n  b64_json?: string;\n\n  /**\n   * For `dall-e-3` only, the revised prompt that was used to generate the image.\n   */\n  revised_prompt?: string;\n\n  /**\n   * When using `dall-e-2` or `dall-e-3`, the URL of the generated image if\n   * `response_format` is set to `url` (default value). Unsupported for the GPT image\n   * models.\n   */\n  url?: string;\n}\n\n/**\n * Emitted when image editing has completed and the final image is available.\n */\nexport interface ImageEditCompletedEvent {\n  /**\n   * Base64-encoded final edited image data, suitable for rendering as an image.\n   */\n  b64_json: string;\n\n  /**\n   * The background setting for the edited image.\n   */\n  background: 'transparent' | 'opaque' | 'auto';\n\n  /**\n   * The Unix timestamp when the event was created.\n   */\n  created_at: number;\n\n  /**\n   * The output format for the edited image.\n   */\n  output_format: 'png' | 'webp' | 'jpeg';\n\n  /**\n   * The quality setting for the edited image.\n   */\n  quality: 'low' | 'medium' | 'high' | 'auto';\n\n  /**\n   * The size of the edited image.\n   */\n  size: '1024x1024' | '1024x1536' | '1536x1024' | 'auto';\n\n  /**\n   * The type of the event. Always `image_edit.completed`.\n   */\n  type: 'image_edit.completed';\n\n  /**\n   * For the GPT image models only, the token usage information for the image\n   * generation.\n   */\n  usage: ImageEditCompletedEvent.Usage;\n}\n\nexport namespace ImageEditCompletedEvent {\n  /**\n   * For the GPT image models only, the token usage information for the image\n   * generation.\n   */\n  export interface Usage {\n    /**\n     * The number of tokens (images and text) in the input prompt.\n     */\n    input_tokens: number;\n\n    /**\n     * The input tokens detailed information for the image generation.\n     */\n    input_tokens_details: Usage.InputTokensDetails;\n\n    /**\n     * The number of image tokens in the output image.\n     */\n    output_tokens: number;\n\n    /**\n     * The total number of tokens (images and text) used for the image generation.\n     */\n    total_tokens: number;\n  }\n\n  export namespace Usage {\n    /**\n     * The input tokens detailed information for the image generation.\n     */\n    export interface InputTokensDetails {\n      /**\n       * The number of image tokens in the input prompt.\n       */\n      image_tokens: number;\n\n      /**\n       * The number of text tokens in the input prompt.\n       */\n      text_tokens: number;\n    }\n  }\n}\n\n/**\n * Emitted when a partial image is available during image editing streaming.\n */\nexport interface ImageEditPartialImageEvent {\n  /**\n   * Base64-encoded partial image data, suitable for rendering as an image.\n   */\n  b64_json: string;\n\n  /**\n   * The background setting for the requested edited image.\n   */\n  background: 'transparent' | 'opaque' | 'auto';\n\n  /**\n   * The Unix timestamp when the event was created.\n   */\n  created_at: number;\n\n  /**\n   * The output format for the requested edited image.\n   */\n  output_format: 'png' | 'webp' | 'jpeg';\n\n  /**\n   * 0-based index for the partial image (streaming).\n   */\n  partial_image_index: number;\n\n  /**\n   * The quality setting for the requested edited image.\n   */\n  quality: 'low' | 'medium' | 'high' | 'auto';\n\n  /**\n   * The size of the requested edited image.\n   */\n  size: '1024x1024' | '1024x1536' | '1536x1024' | 'auto';\n\n  /**\n   * The type of the event. Always `image_edit.partial_image`.\n   */\n  type: 'image_edit.partial_image';\n}\n\n/**\n * Emitted when a partial image is available during image editing streaming.\n */\nexport type ImageEditStreamEvent = ImageEditPartialImageEvent | ImageEditCompletedEvent;\n\n/**\n * Emitted when image generation has completed and the final image is available.\n */\nexport interface ImageGenCompletedEvent {\n  /**\n   * Base64-encoded image data, suitable for rendering as an image.\n   */\n  b64_json: string;\n\n  /**\n   * The background setting for the generated image.\n   */\n  background: 'transparent' | 'opaque' | 'auto';\n\n  /**\n   * The Unix timestamp when the event was created.\n   */\n  created_at: number;\n\n  /**\n   * The output format for the generated image.\n   */\n  output_format: 'png' | 'webp' | 'jpeg';\n\n  /**\n   * The quality setting for the generated image.\n   */\n  quality: 'low' | 'medium' | 'high' | 'auto';\n\n  /**\n   * The size of the generated image.\n   */\n  size: '1024x1024' | '1024x1536' | '1536x1024' | 'auto';\n\n  /**\n   * The type of the event. Always `image_generation.completed`.\n   */\n  type: 'image_generation.completed';\n\n  /**\n   * For the GPT image models only, the token usage information for the image\n   * generation.\n   */\n  usage: ImageGenCompletedEvent.Usage;\n}\n\nexport namespace ImageGenCompletedEvent {\n  /**\n   * For the GPT image models only, the token usage information for the image\n   * generation.\n   */\n  export interface Usage {\n    /**\n     * The number of tokens (images and text) in the input prompt.\n     */\n    input_tokens: number;\n\n    /**\n     * The input tokens detailed information for the image generation.\n     */\n    input_tokens_details: Usage.InputTokensDetails;\n\n    /**\n     * The number of image tokens in the output image.\n     */\n    output_tokens: number;\n\n    /**\n     * The total number of tokens (images and text) used for the image generation.\n     */\n    total_tokens: number;\n  }\n\n  export namespace Usage {\n    /**\n     * The input tokens detailed information for the image generation.\n     */\n    export interface InputTokensDetails {\n      /**\n       * The number of image tokens in the input prompt.\n       */\n      image_tokens: number;\n\n      /**\n       * The number of text tokens in the input prompt.\n       */\n      text_tokens: number;\n    }\n  }\n}\n\n/**\n * Emitted when a partial image is available during image generation streaming.\n */\nexport interface ImageGenPartialImageEvent {\n  /**\n   * Base64-encoded partial image data, suitable for rendering as an image.\n   */\n  b64_json: string;\n\n  /**\n   * The background setting for the requested image.\n   */\n  background: 'transparent' | 'opaque' | 'auto';\n\n  /**\n   * The Unix timestamp when the event was created.\n   */\n  created_at: number;\n\n  /**\n   * The output format for the requested image.\n   */\n  output_format: 'png' | 'webp' | 'jpeg';\n\n  /**\n   * 0-based index for the partial image (streaming).\n   */\n  partial_image_index: number;\n\n  /**\n   * The quality setting for the requested image.\n   */\n  quality: 'low' | 'medium' | 'high' | 'auto';\n\n  /**\n   * The size of the requested image.\n   */\n  size: '1024x1024' | '1024x1536' | '1536x1024' | 'auto';\n\n  /**\n   * The type of the event. Always `image_generation.partial_image`.\n   */\n  type: 'image_generation.partial_image';\n}\n\n/**\n * Emitted when a partial image is available during image generation streaming.\n */\nexport type ImageGenStreamEvent = ImageGenPartialImageEvent | ImageGenCompletedEvent;\n\nexport type ImageModel =\n  | 'gpt-image-1'\n  | 'gpt-image-1-mini'\n  | 'gpt-image-2'\n  | 'gpt-image-2-2026-04-21'\n  | 'gpt-image-1.5'\n  | 'chatgpt-image-latest'\n  | 'dall-e-2'\n  | 'dall-e-3';\n\n/**\n * The response from the image generation endpoint.\n */\nexport interface ImagesResponse {\n  /**\n   * The Unix timestamp (in seconds) of when the image was created.\n   */\n  created: number;\n\n  /**\n   * The background parameter used for the image generation. Either `transparent` or\n   * `opaque`.\n   */\n  background?: 'transparent' | 'opaque';\n\n  /**\n   * The list of generated images.\n   */\n  data?: Array<Image>;\n\n  /**\n   * The output format of the image generation. Either `png`, `webp`, or `jpeg`.\n   */\n  output_format?: 'png' | 'webp' | 'jpeg';\n\n  /**\n   * The quality of the image generated. Either `low`, `medium`, or `high`.\n   */\n  quality?: 'low' | 'medium' | 'high';\n\n  /**\n   * The size of the image generated. Either `1024x1024`, `1024x1536`, or\n   * `1536x1024`.\n   */\n  size?: '1024x1024' | '1024x1536' | '1536x1024';\n\n  /**\n   * For `gpt-image-1` only, the token usage information for the image generation.\n   */\n  usage?: ImagesResponse.Usage;\n}\n\nexport namespace ImagesResponse {\n  /**\n   * For `gpt-image-1` only, the token usage information for the image generation.\n   */\n  export interface Usage {\n    /**\n     * The number of tokens (images and text) in the input prompt.\n     */\n    input_tokens: number;\n\n    /**\n     * The input tokens detailed information for the image generation.\n     */\n    input_tokens_details: Usage.InputTokensDetails;\n\n    /**\n     * The number of output tokens generated by the model.\n     */\n    output_tokens: number;\n\n    /**\n     * The total number of tokens (images and text) used for the image generation.\n     */\n    total_tokens: number;\n\n    /**\n     * The output token details for the image generation.\n     */\n    output_tokens_details?: Usage.OutputTokensDetails;\n  }\n\n  export namespace Usage {\n    /**\n     * The input tokens detailed information for the image generation.\n     */\n    export interface InputTokensDetails {\n      /**\n       * The number of image tokens in the input prompt.\n       */\n      image_tokens: number;\n\n      /**\n       * The number of text tokens in the input prompt.\n       */\n      text_tokens: number;\n    }\n\n    /**\n     * The output token details for the image generation.\n     */\n    export interface OutputTokensDetails {\n      /**\n       * The number of image output tokens generated by the model.\n       */\n      image_tokens: number;\n\n      /**\n       * The number of text output tokens generated by the model.\n       */\n      text_tokens: number;\n    }\n  }\n}\n\nexport interface ImageCreateVariationParams {\n  /**\n   * The image to use as the basis for the variation(s). Must be a valid PNG file,\n   * less than 4MB, and square.\n   */\n  image: Uploadable;\n\n  /**\n   * The model to use for image generation. Only `dall-e-2` is supported at this\n   * time.\n   */\n  model?: (string & {}) | ImageModel | null;\n\n  /**\n   * The number of images to generate. Must be between 1 and 10.\n   */\n  n?: number | null;\n\n  /**\n   * The format in which the generated images are returned. Must be one of `url` or\n   * `b64_json`. URLs are only valid for 60 minutes after the image has been\n   * generated.\n   */\n  response_format?: 'url' | 'b64_json' | null;\n\n  /**\n   * The size of the generated images. Must be one of `256x256`, `512x512`, or\n   * `1024x1024`.\n   */\n  size?: '256x256' | '512x512' | '1024x1024' | null;\n\n  /**\n   * A unique identifier representing your end-user, which can help OpenAI to monitor\n   * and detect abuse.\n   * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids).\n   */\n  user?: string;\n}\n\nexport type ImageEditParams = ImageEditParamsNonStreaming | ImageEditParamsStreaming;\n\nexport interface ImageEditParamsBase {\n  /**\n   * The image(s) to edit. Must be a supported image file or an array of images.\n   *\n   * For the GPT image models (`gpt-image-1`, `gpt-image-1-mini`, `gpt-image-1.5`,\n   * `gpt-image-2`, `gpt-image-2-2026-04-21`, and `chatgpt-image-latest`), each image\n   * should be a `png`, `webp`, or `jpg` file less than 50MB. You can provide up to\n   * 16 images.\n   *\n   * For `dall-e-2`, you can only provide one image, and it should be a square `png`\n   * file less than 4MB.\n   */\n  image: Uploadable | Array<Uploadable>;\n\n  /**\n   * A text description of the desired image(s). The maximum length is 1000\n   * characters for `dall-e-2`, and 32000 characters for the GPT image models.\n   */\n  prompt: string;\n\n  /**\n   * Allows to set transparency for the background of the generated image(s). This\n   * parameter is only supported for GPT image models that support transparent\n   * backgrounds. Must be one of `transparent`, `opaque`, or `auto` (default value).\n   * When `auto` is used, the model will automatically determine the best background\n   * for the image.\n   *\n   * `gpt-image-2` and `gpt-image-2-2026-04-21` do not support transparent\n   * backgrounds. Requests with `background` set to `transparent` will return an\n   * error for these models; use `opaque` or `auto` instead.\n   *\n   * If `transparent`, the output format needs to support transparency, so it should\n   * be set to either `png` (default value) or `webp`.\n   */\n  background?: 'transparent' | 'opaque' | 'auto' | null;\n\n  /**\n   * Control how much effort the model will exert to match the style and features,\n   * especially facial features, of input images. This parameter is only supported\n   * for `gpt-image-1` and `gpt-image-1.5` and later models, unsupported for\n   * `gpt-image-1-mini`. Supports `high` and `low`. Defaults to `low`.\n   */\n  input_fidelity?: 'high' | 'low' | null;\n\n  /**\n   * An additional image whose fully transparent areas (e.g. where alpha is zero)\n   * indicate where `image` should be edited. If there are multiple images provided,\n   * the mask will be applied on the first image. Must be a valid PNG file, less than\n   * 4MB, and have the same dimensions as `image`.\n   */\n  mask?: Uploadable;\n\n  /**\n   * The model to use for image generation. One of `dall-e-2` or a GPT image model\n   * (`gpt-image-1`, `gpt-image-1-mini`, `gpt-image-1.5`, `gpt-image-2`,\n   * `gpt-image-2-2026-04-21`, or `chatgpt-image-latest`). Defaults to\n   * `gpt-image-1.5`.\n   */\n  model?: (string & {}) | ImageModel | null;\n\n  /**\n   * The number of images to generate. Must be between 1 and 10.\n   */\n  n?: number | null;\n\n  /**\n   * The compression level (0-100%) for the generated images. This parameter is only\n   * supported for the GPT image models with the `webp` or `jpeg` output formats, and\n   * defaults to 100.\n   */\n  output_compression?: number | null;\n\n  /**\n   * The format in which the generated images are returned. This parameter is only\n   * supported for the GPT image models. Must be one of `png`, `jpeg`, or `webp`. The\n   * default value is `png`.\n   */\n  output_format?: 'png' | 'jpeg' | 'webp' | null;\n\n  /**\n   * The number of partial images to generate. This parameter is used for streaming\n   * responses that return partial images. Value must be between 0 and 3. When set to\n   * 0, the response will be a single image sent in one streaming event.\n   *\n   * Note that the final image may be sent before the full number of partial images\n   * are generated if the full image is generated more quickly.\n   */\n  partial_images?: number | null;\n\n  /**\n   * The quality of the image that will be generated for GPT image models. Defaults\n   * to `auto`.\n   */\n  quality?: 'standard' | 'low' | 'medium' | 'high' | 'auto' | null;\n\n  /**\n   * The format in which the generated images are returned. Must be one of `url` or\n   * `b64_json`. URLs are only valid for 60 minutes after the image has been\n   * generated. This parameter is only supported for `dall-e-2` (default is `url` for\n   * `dall-e-2`), as GPT image models always return base64-encoded images.\n   */\n  response_format?: 'url' | 'b64_json' | null;\n\n  /**\n   * The size of the generated images. For `gpt-image-2` and\n   * `gpt-image-2-2026-04-21`, arbitrary resolutions are supported as `WIDTHxHEIGHT`\n   * strings, for example `1536x864`. Width and height must both be divisible by 16\n   * and the requested aspect ratio must be between 1:3 and 3:1. Resolutions above\n   * `2560x1440` are experimental, and the maximum supported resolution is\n   * `3840x2160`. The requested size must also satisfy the model's current pixel and\n   * edge limits. The standard sizes `1024x1024`, `1536x1024`, and `1024x1536` are\n   * supported by the GPT image models; `auto` is supported for models that allow\n   * automatic sizing. For `dall-e-2`, use one of `256x256`, `512x512`, or\n   * `1024x1024`. For `dall-e-3`, use one of `1024x1024`, `1792x1024`, or\n   * `1024x1792`.\n   */\n  size?: (string & {}) | '256x256' | '512x512' | '1024x1024' | '1536x1024' | '1024x1536' | 'auto' | null;\n\n  /**\n   * Edit the image in streaming mode. Defaults to `false`. See the\n   * [Image generation guide](https://platform.openai.com/docs/guides/image-generation)\n   * for more information.\n   */\n  stream?: boolean | null;\n\n  /**\n   * A unique identifier representing your end-user, which can help OpenAI to monitor\n   * and detect abuse.\n   * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids).\n   */\n  user?: string;\n}\n\nexport namespace ImageEditParams {\n  export type ImageEditParamsNonStreaming = ImagesAPI.ImageEditParamsNonStreaming;\n  export type ImageEditParamsStreaming = ImagesAPI.ImageEditParamsStreaming;\n}\n\nexport interface ImageEditParamsNonStreaming extends ImageEditParamsBase {\n  /**\n   * Edit the image in streaming mode. Defaults to `false`. See the\n   * [Image generation guide](https://platform.openai.com/docs/guides/image-generation)\n   * for more information.\n   */\n  stream?: false | null;\n}\n\nexport interface ImageEditParamsStreaming extends ImageEditParamsBase {\n  /**\n   * Edit the image in streaming mode. Defaults to `false`. See the\n   * [Image generation guide](https://platform.openai.com/docs/guides/image-generation)\n   * for more information.\n   */\n  stream: true;\n}\n\nexport type ImageGenerateParams = ImageGenerateParamsNonStreaming | ImageGenerateParamsStreaming;\n\nexport interface ImageGenerateParamsBase {\n  /**\n   * A text description of the desired image(s). The maximum length is 32000\n   * characters for the GPT image models, 1000 characters for `dall-e-2` and 4000\n   * characters for `dall-e-3`.\n   */\n  prompt: string;\n\n  /**\n   * Allows to set transparency for the background of the generated image(s). This\n   * parameter is only supported for GPT image models that support transparent\n   * backgrounds. Must be one of `transparent`, `opaque`, or `auto` (default value).\n   * When `auto` is used, the model will automatically determine the best background\n   * for the image.\n   *\n   * `gpt-image-2` and `gpt-image-2-2026-04-21` do not support transparent\n   * backgrounds. Requests with `background` set to `transparent` will return an\n   * error for these models; use `opaque` or `auto` instead.\n   *\n   * If `transparent`, the output format needs to support transparency, so it should\n   * be set to either `png` (default value) or `webp`.\n   */\n  background?: 'transparent' | 'opaque' | 'auto' | null;\n\n  /**\n   * The model to use for image generation. One of `dall-e-2`, `dall-e-3`, or a GPT\n   * image model (`gpt-image-1`, `gpt-image-1-mini`, `gpt-image-1.5`, `gpt-image-2`,\n   * or `gpt-image-2-2026-04-21`). Defaults to `dall-e-2` unless a parameter specific\n   * to the GPT image models is used.\n   */\n  model?: (string & {}) | ImageModel | null;\n\n  /**\n   * Control the content-moderation level for images generated by the GPT image\n   * models. Must be either `low` for less restrictive filtering or `auto` (default\n   * value).\n   */\n  moderation?: 'low' | 'auto' | null;\n\n  /**\n   * The number of images to generate. Must be between 1 and 10. For `dall-e-3`, only\n   * `n=1` is supported.\n   */\n  n?: number | null;\n\n  /**\n   * The compression level (0-100%) for the generated images. This parameter is only\n   * supported for the GPT image models with the `webp` or `jpeg` output formats, and\n   * defaults to 100.\n   */\n  output_compression?: number | null;\n\n  /**\n   * The format in which the generated images are returned. This parameter is only\n   * supported for the GPT image models. Must be one of `png`, `jpeg`, or `webp`.\n   */\n  output_format?: 'png' | 'jpeg' | 'webp' | null;\n\n  /**\n   * The number of partial images to generate. This parameter is used for streaming\n   * responses that return partial images. Value must be between 0 and 3. When set to\n   * 0, the response will be a single image sent in one streaming event.\n   *\n   * Note that the final image may be sent before the full number of partial images\n   * are generated if the full image is generated more quickly.\n   */\n  partial_images?: number | null;\n\n  /**\n   * The quality of the image that will be generated.\n   *\n   * - `auto` (default value) will automatically select the best quality for the\n   *   given model.\n   * - `high`, `medium` and `low` are supported for the GPT image models.\n   * - `hd` and `standard` are supported for `dall-e-3`.\n   * - `standard` is the only option for `dall-e-2`.\n   */\n  quality?: 'standard' | 'hd' | 'low' | 'medium' | 'high' | 'auto' | null;\n\n  /**\n   * The format in which generated images with `dall-e-2` and `dall-e-3` are\n   * returned. Must be one of `url` or `b64_json`. URLs are only valid for 60 minutes\n   * after the image has been generated. This parameter isn't supported for the GPT\n   * image models, which always return base64-encoded images.\n   */\n  response_format?: 'url' | 'b64_json' | null;\n\n  /**\n   * The size of the generated images. For `gpt-image-2` and\n   * `gpt-image-2-2026-04-21`, arbitrary resolutions are supported as `WIDTHxHEIGHT`\n   * strings, for example `1536x864`. Width and height must both be divisible by 16\n   * and the requested aspect ratio must be between 1:3 and 3:1. Resolutions above\n   * `2560x1440` are experimental, and the maximum supported resolution is\n   * `3840x2160`. The requested size must also satisfy the model's current pixel and\n   * edge limits. The standard sizes `1024x1024`, `1536x1024`, and `1024x1536` are\n   * supported by the GPT image models; `auto` is supported for models that allow\n   * automatic sizing. For `dall-e-2`, use one of `256x256`, `512x512`, or\n   * `1024x1024`. For `dall-e-3`, use one of `1024x1024`, `1792x1024`, or\n   * `1024x1792`.\n   */\n  size?:\n    | (string & {})\n    | 'auto'\n    | '1024x1024'\n    | '1536x1024'\n    | '1024x1536'\n    | '256x256'\n    | '512x512'\n    | '1792x1024'\n    | '1024x1792'\n    | null;\n\n  /**\n   * Generate the image in streaming mode. Defaults to `false`. See the\n   * [Image generation guide](https://platform.openai.com/docs/guides/image-generation)\n   * for more information. This parameter is only supported for the GPT image models.\n   */\n  stream?: boolean | null;\n\n  /**\n   * The style of the generated images. This parameter is only supported for\n   * `dall-e-3`. Must be one of `vivid` or `natural`. Vivid causes the model to lean\n   * towards generating hyper-real and dramatic images. Natural causes the model to\n   * produce more natural, less hyper-real looking images.\n   */\n  style?: 'vivid' | 'natural' | null;\n\n  /**\n   * A unique identifier representing your end-user, which can help OpenAI to monitor\n   * and detect abuse.\n   * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids).\n   */\n  user?: string;\n}\n\nexport namespace ImageGenerateParams {\n  export type ImageGenerateParamsNonStreaming = ImagesAPI.ImageGenerateParamsNonStreaming;\n  export type ImageGenerateParamsStreaming = ImagesAPI.ImageGenerateParamsStreaming;\n}\n\nexport interface ImageGenerateParamsNonStreaming extends ImageGenerateParamsBase {\n  /**\n   * Generate the image in streaming mode. Defaults to `false`. See the\n   * [Image generation guide](https://platform.openai.com/docs/guides/image-generation)\n   * for more information. This parameter is only supported for the GPT image models.\n   */\n  stream?: false | null;\n}\n\nexport interface ImageGenerateParamsStreaming extends ImageGenerateParamsBase {\n  /**\n   * Generate the image in streaming mode. Defaults to `false`. See the\n   * [Image generation guide](https://platform.openai.com/docs/guides/image-generation)\n   * for more information. This parameter is only supported for the GPT image models.\n   */\n  stream: true;\n}\n\nexport declare namespace Images {\n  export {\n    type Image as Image,\n    type ImageEditCompletedEvent as ImageEditCompletedEvent,\n    type ImageEditPartialImageEvent as ImageEditPartialImageEvent,\n    type ImageEditStreamEvent as ImageEditStreamEvent,\n    type ImageGenCompletedEvent as ImageGenCompletedEvent,\n    type ImageGenPartialImageEvent as ImageGenPartialImageEvent,\n    type ImageGenStreamEvent as ImageGenStreamEvent,\n    type ImageModel as ImageModel,\n    type ImagesResponse as ImagesResponse,\n    type ImageCreateVariationParams as ImageCreateVariationParams,\n    type ImageEditParams as ImageEditParams,\n    type ImageEditParamsNonStreaming as ImageEditParamsNonStreaming,\n    type ImageEditParamsStreaming as ImageEditParamsStreaming,\n    type ImageGenerateParams as ImageGenerateParams,\n    type ImageGenerateParamsNonStreaming as ImageGenerateParamsNonStreaming,\n    type ImageGenerateParamsStreaming as ImageGenerateParamsStreaming,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../core/resource';\nimport { APIPromise } from '../core/api-promise';\nimport { Page, PagePromise } from '../core/pagination';\nimport { RequestOptions } from '../internal/request-options';\nimport { path } from '../internal/utils/path';\n\n/**\n * List and describe the various models available in the API.\n */\nexport class Models extends APIResource {\n  /**\n   * Retrieves a model instance, providing basic information about the model such as\n   * the owner and permissioning.\n   */\n  retrieve(model: string, options?: RequestOptions): APIPromise<Model> {\n    return this._client.get(path`/models/${model}`, { ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * Lists the currently available models, and provides basic information about each\n   * one such as the owner and availability.\n   */\n  list(options?: RequestOptions): PagePromise<ModelsPage, Model> {\n    return this._client.getAPIList('/models', Page<Model>, { ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * Delete a fine-tuned model. You must have the Owner role in your organization to\n   * delete a model.\n   */\n  delete(model: string, options?: RequestOptions): APIPromise<ModelDeleted> {\n    return this._client.delete(path`/models/${model}`, { ...options, __security: { bearerAuth: true } });\n  }\n}\n\n// Note: no pagination actually occurs yet, this is for forwards-compatibility.\nexport type ModelsPage = Page<Model>;\n\n/**\n * Describes an OpenAI model offering that can be used with the API.\n */\nexport interface Model {\n  /**\n   * The model identifier, which can be referenced in the API endpoints.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) when the model was created.\n   */\n  created: number;\n\n  /**\n   * The object type, which is always \"model\".\n   */\n  object: 'model';\n\n  /**\n   * The organization that owns the model.\n   */\n  owned_by: string;\n}\n\nexport interface ModelDeleted {\n  id: string;\n\n  deleted: boolean;\n\n  object: string;\n}\n\nexport declare namespace Models {\n  export { type Model as Model, type ModelDeleted as ModelDeleted, type ModelsPage as ModelsPage };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../core/resource';\nimport { APIPromise } from '../core/api-promise';\nimport { RequestOptions } from '../internal/request-options';\n\n/**\n * Given text and/or image inputs, classifies if those inputs are potentially harmful.\n */\nexport class Moderations extends APIResource {\n  /**\n   * Classifies if text and/or image inputs are potentially harmful. Learn more in\n   * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n   */\n  create(body: ModerationCreateParams, options?: RequestOptions): APIPromise<ModerationCreateResponse> {\n    return this._client.post('/moderations', { body, ...options, __security: { bearerAuth: true } });\n  }\n}\n\nexport interface Moderation {\n  /**\n   * A list of the categories, and whether they are flagged or not.\n   */\n  categories: Moderation.Categories;\n\n  /**\n   * A list of the categories along with the input type(s) that the score applies to.\n   */\n  category_applied_input_types: Moderation.CategoryAppliedInputTypes;\n\n  /**\n   * A list of the categories along with their scores as predicted by model.\n   */\n  category_scores: Moderation.CategoryScores;\n\n  /**\n   * Whether any of the below categories are flagged.\n   */\n  flagged: boolean;\n}\n\nexport namespace Moderation {\n  /**\n   * A list of the categories, and whether they are flagged or not.\n   */\n  export interface Categories {\n    /**\n     * Content that expresses, incites, or promotes harassing language towards any\n     * target.\n     */\n    harassment: boolean;\n\n    /**\n     * Harassment content that also includes violence or serious harm towards any\n     * target.\n     */\n    'harassment/threatening': boolean;\n\n    /**\n     * Content that expresses, incites, or promotes hate based on race, gender,\n     * ethnicity, religion, nationality, sexual orientation, disability status, or\n     * caste. Hateful content aimed at non-protected groups (e.g., chess players) is\n     * harassment.\n     */\n    hate: boolean;\n\n    /**\n     * Hateful content that also includes violence or serious harm towards the targeted\n     * group based on race, gender, ethnicity, religion, nationality, sexual\n     * orientation, disability status, or caste.\n     */\n    'hate/threatening': boolean;\n\n    /**\n     * Content that includes instructions or advice that facilitate the planning or\n     * execution of wrongdoing, or that gives advice or instruction on how to commit\n     * illicit acts. For example, \"how to shoplift\" would fit this category.\n     */\n    illicit: boolean | null;\n\n    /**\n     * Content that includes instructions or advice that facilitate the planning or\n     * execution of wrongdoing that also includes violence, or that gives advice or\n     * instruction on the procurement of any weapon.\n     */\n    'illicit/violent': boolean | null;\n\n    /**\n     * Content that promotes, encourages, or depicts acts of self-harm, such as\n     * suicide, cutting, and eating disorders.\n     */\n    'self-harm': boolean;\n\n    /**\n     * Content that encourages performing acts of self-harm, such as suicide, cutting,\n     * and eating disorders, or that gives instructions or advice on how to commit such\n     * acts.\n     */\n    'self-harm/instructions': boolean;\n\n    /**\n     * Content where the speaker expresses that they are engaging or intend to engage\n     * in acts of self-harm, such as suicide, cutting, and eating disorders.\n     */\n    'self-harm/intent': boolean;\n\n    /**\n     * Content meant to arouse sexual excitement, such as the description of sexual\n     * activity, or that promotes sexual services (excluding sex education and\n     * wellness).\n     */\n    sexual: boolean;\n\n    /**\n     * Sexual content that includes an individual who is under 18 years old.\n     */\n    'sexual/minors': boolean;\n\n    /**\n     * Content that depicts death, violence, or physical injury.\n     */\n    violence: boolean;\n\n    /**\n     * Content that depicts death, violence, or physical injury in graphic detail.\n     */\n    'violence/graphic': boolean;\n  }\n\n  /**\n   * A list of the categories along with the input type(s) that the score applies to.\n   */\n  export interface CategoryAppliedInputTypes {\n    /**\n     * The applied input type(s) for the category 'harassment'.\n     */\n    harassment: Array<'text'>;\n\n    /**\n     * The applied input type(s) for the category 'harassment/threatening'.\n     */\n    'harassment/threatening': Array<'text'>;\n\n    /**\n     * The applied input type(s) for the category 'hate'.\n     */\n    hate: Array<'text'>;\n\n    /**\n     * The applied input type(s) for the category 'hate/threatening'.\n     */\n    'hate/threatening': Array<'text'>;\n\n    /**\n     * The applied input type(s) for the category 'illicit'.\n     */\n    illicit: Array<'text'>;\n\n    /**\n     * The applied input type(s) for the category 'illicit/violent'.\n     */\n    'illicit/violent': Array<'text'>;\n\n    /**\n     * The applied input type(s) for the category 'self-harm'.\n     */\n    'self-harm': Array<'text' | 'image'>;\n\n    /**\n     * The applied input type(s) for the category 'self-harm/instructions'.\n     */\n    'self-harm/instructions': Array<'text' | 'image'>;\n\n    /**\n     * The applied input type(s) for the category 'self-harm/intent'.\n     */\n    'self-harm/intent': Array<'text' | 'image'>;\n\n    /**\n     * The applied input type(s) for the category 'sexual'.\n     */\n    sexual: Array<'text' | 'image'>;\n\n    /**\n     * The applied input type(s) for the category 'sexual/minors'.\n     */\n    'sexual/minors': Array<'text'>;\n\n    /**\n     * The applied input type(s) for the category 'violence'.\n     */\n    violence: Array<'text' | 'image'>;\n\n    /**\n     * The applied input type(s) for the category 'violence/graphic'.\n     */\n    'violence/graphic': Array<'text' | 'image'>;\n  }\n\n  /**\n   * A list of the categories along with their scores as predicted by model.\n   */\n  export interface CategoryScores {\n    /**\n     * The score for the category 'harassment'.\n     */\n    harassment: number;\n\n    /**\n     * The score for the category 'harassment/threatening'.\n     */\n    'harassment/threatening': number;\n\n    /**\n     * The score for the category 'hate'.\n     */\n    hate: number;\n\n    /**\n     * The score for the category 'hate/threatening'.\n     */\n    'hate/threatening': number;\n\n    /**\n     * The score for the category 'illicit'.\n     */\n    illicit: number;\n\n    /**\n     * The score for the category 'illicit/violent'.\n     */\n    'illicit/violent': number;\n\n    /**\n     * The score for the category 'self-harm'.\n     */\n    'self-harm': number;\n\n    /**\n     * The score for the category 'self-harm/instructions'.\n     */\n    'self-harm/instructions': number;\n\n    /**\n     * The score for the category 'self-harm/intent'.\n     */\n    'self-harm/intent': number;\n\n    /**\n     * The score for the category 'sexual'.\n     */\n    sexual: number;\n\n    /**\n     * The score for the category 'sexual/minors'.\n     */\n    'sexual/minors': number;\n\n    /**\n     * The score for the category 'violence'.\n     */\n    violence: number;\n\n    /**\n     * The score for the category 'violence/graphic'.\n     */\n    'violence/graphic': number;\n  }\n}\n\n/**\n * An object describing an image to classify.\n */\nexport interface ModerationImageURLInput {\n  /**\n   * Contains either an image URL or a data URL for a base64 encoded image.\n   */\n  image_url: ModerationImageURLInput.ImageURL;\n\n  /**\n   * Always `image_url`.\n   */\n  type: 'image_url';\n}\n\nexport namespace ModerationImageURLInput {\n  /**\n   * Contains either an image URL or a data URL for a base64 encoded image.\n   */\n  export interface ImageURL {\n    /**\n     * Either a URL of the image or the base64 encoded image data.\n     */\n    url: string;\n  }\n}\n\nexport type ModerationModel =\n  | 'omni-moderation-latest'\n  | 'omni-moderation-2024-09-26'\n  | 'text-moderation-latest'\n  | 'text-moderation-stable';\n\n/**\n * An object describing an image to classify.\n */\nexport type ModerationMultiModalInput = ModerationImageURLInput | ModerationTextInput;\n\n/**\n * An object describing text to classify.\n */\nexport interface ModerationTextInput {\n  /**\n   * A string of text to classify.\n   */\n  text: string;\n\n  /**\n   * Always `text`.\n   */\n  type: 'text';\n}\n\n/**\n * Represents if a given text input is potentially harmful.\n */\nexport interface ModerationCreateResponse {\n  /**\n   * The unique identifier for the moderation request.\n   */\n  id: string;\n\n  /**\n   * The model used to generate the moderation results.\n   */\n  model: string;\n\n  /**\n   * A list of moderation objects.\n   */\n  results: Array<Moderation>;\n}\n\nexport interface ModerationCreateParams {\n  /**\n   * Input (or inputs) to classify. Can be a single string, an array of strings, or\n   * an array of multi-modal input objects similar to other models.\n   */\n  input: string | Array<string> | Array<ModerationMultiModalInput>;\n\n  /**\n   * The content moderation model you would like to use. Learn more in\n   * [the moderation guide](https://platform.openai.com/docs/guides/moderation), and\n   * learn about available models\n   * [here](https://platform.openai.com/docs/models#moderation).\n   */\n  model?: (string & {}) | ModerationModel;\n}\n\nexport declare namespace Moderations {\n  export {\n    type Moderation as Moderation,\n    type ModerationImageURLInput as ModerationImageURLInput,\n    type ModerationModel as ModerationModel,\n    type ModerationMultiModalInput as ModerationMultiModalInput,\n    type ModerationTextInput as ModerationTextInput,\n    type ModerationCreateResponse as ModerationCreateResponse,\n    type ModerationCreateParams as ModerationCreateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as RealtimeAPI from './realtime';\nimport * as ResponsesAPI from '../responses/responses';\nimport { APIPromise } from '../../core/api-promise';\nimport { buildHeaders } from '../../internal/headers';\nimport { RequestOptions } from '../../internal/request-options';\nimport { path } from '../../internal/utils/path';\n\nexport class Calls extends APIResource {\n  /**\n   * Accept an incoming SIP call and configure the realtime session that will handle\n   * it.\n   *\n   * @example\n   * ```ts\n   * await client.realtime.calls.accept('call_id', {\n   *   type: 'realtime',\n   * });\n   * ```\n   */\n  accept(callID: string, body: CallAcceptParams, options?: RequestOptions): APIPromise<void> {\n    return this._client.post(path`/realtime/calls/${callID}/accept`, {\n      body,\n      ...options,\n      headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * End an active Realtime API call, whether it was initiated over SIP or WebRTC.\n   *\n   * @example\n   * ```ts\n   * await client.realtime.calls.hangup('call_id');\n   * ```\n   */\n  hangup(callID: string, options?: RequestOptions): APIPromise<void> {\n    return this._client.post(path`/realtime/calls/${callID}/hangup`, {\n      ...options,\n      headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Transfer an active SIP call to a new destination using the SIP REFER verb.\n   *\n   * @example\n   * ```ts\n   * await client.realtime.calls.refer('call_id', {\n   *   target_uri: 'tel:+14155550123',\n   * });\n   * ```\n   */\n  refer(callID: string, body: CallReferParams, options?: RequestOptions): APIPromise<void> {\n    return this._client.post(path`/realtime/calls/${callID}/refer`, {\n      body,\n      ...options,\n      headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Decline an incoming SIP call by returning a SIP status code to the caller.\n   *\n   * @example\n   * ```ts\n   * await client.realtime.calls.reject('call_id');\n   * ```\n   */\n  reject(\n    callID: string,\n    body: CallRejectParams | null | undefined = {},\n    options?: RequestOptions,\n  ): APIPromise<void> {\n    return this._client.post(path`/realtime/calls/${callID}/reject`, {\n      body,\n      ...options,\n      headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\nexport interface CallAcceptParams {\n  /**\n   * The type of session to create. Always `realtime` for the Realtime API.\n   */\n  type: 'realtime';\n\n  /**\n   * Configuration for input and output audio.\n   */\n  audio?: RealtimeAPI.RealtimeAudioConfig;\n\n  /**\n   * Additional fields to include in server outputs.\n   *\n   * `item.input_audio_transcription.logprobs`: Include logprobs for input audio\n   * transcription.\n   */\n  include?: Array<'item.input_audio_transcription.logprobs'>;\n\n  /**\n   * The default system instructions (i.e. system message) prepended to model calls.\n   * This field allows the client to guide the model on desired responses. The model\n   * can be instructed on response content and format, (e.g. \"be extremely succinct\",\n   * \"act friendly\", \"here are examples of good responses\") and on audio behavior\n   * (e.g. \"talk quickly\", \"inject emotion into your voice\", \"laugh frequently\"). The\n   * instructions are not guaranteed to be followed by the model, but they provide\n   * guidance to the model on the desired behavior.\n   *\n   * Note that the server sets default instructions which will be used if this field\n   * is not set and are visible in the `session.created` event at the start of the\n   * session.\n   */\n  instructions?: string;\n\n  /**\n   * Maximum number of output tokens for a single assistant response, inclusive of\n   * tool calls. Provide an integer between 1 and 4096 to limit output tokens, or\n   * `inf` for the maximum available tokens for a given model. Defaults to `inf`.\n   */\n  max_output_tokens?: number | 'inf';\n\n  /**\n   * The Realtime model used for this session.\n   */\n  model?:\n    | (string & {})\n    | 'gpt-realtime'\n    | 'gpt-realtime-1.5'\n    | 'gpt-realtime-2'\n    | 'gpt-realtime-2025-08-28'\n    | 'gpt-4o-realtime-preview'\n    | 'gpt-4o-realtime-preview-2024-10-01'\n    | 'gpt-4o-realtime-preview-2024-12-17'\n    | 'gpt-4o-realtime-preview-2025-06-03'\n    | 'gpt-4o-mini-realtime-preview'\n    | 'gpt-4o-mini-realtime-preview-2024-12-17'\n    | 'gpt-realtime-mini'\n    | 'gpt-realtime-mini-2025-10-06'\n    | 'gpt-realtime-mini-2025-12-15'\n    | 'gpt-audio-1.5'\n    | 'gpt-audio-mini'\n    | 'gpt-audio-mini-2025-10-06'\n    | 'gpt-audio-mini-2025-12-15';\n\n  /**\n   * The set of modalities the model can respond with. It defaults to `[\"audio\"]`,\n   * indicating that the model will respond with audio plus a transcript. `[\"text\"]`\n   * can be used to make the model respond with text only. It is not possible to\n   * request both `text` and `audio` at the same time.\n   */\n  output_modalities?: Array<'text' | 'audio'>;\n\n  /**\n   * Whether the model may call multiple tools in parallel. Only supported by\n   * reasoning Realtime models such as `gpt-realtime-2`.\n   */\n  parallel_tool_calls?: boolean;\n\n  /**\n   * Reference to a prompt template and its variables.\n   * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts).\n   */\n  prompt?: ResponsesAPI.ResponsePrompt | null;\n\n  /**\n   * Configuration for reasoning-capable Realtime models such as `gpt-realtime-2`.\n   */\n  reasoning?: RealtimeAPI.RealtimeReasoning;\n\n  /**\n   * How the model chooses tools. Provide one of the string modes or force a specific\n   * function/MCP tool.\n   */\n  tool_choice?: RealtimeAPI.RealtimeToolChoiceConfig;\n\n  /**\n   * Tools available to the model.\n   */\n  tools?: RealtimeAPI.RealtimeToolsConfig;\n\n  /**\n   * Realtime API can write session traces to the\n   * [Traces Dashboard](https://platform.openai.com/logs?api=traces). Set to null to\n   * disable tracing. Once tracing is enabled for a session, the configuration cannot\n   * be modified.\n   *\n   * `auto` will create a trace for the session with default values for the workflow\n   * name, group id, and metadata.\n   */\n  tracing?: RealtimeAPI.RealtimeTracingConfig | null;\n\n  /**\n   * When the number of tokens in a conversation exceeds the model's input token\n   * limit, the conversation be truncated, meaning messages (starting from the\n   * oldest) will not be included in the model's context. A 32k context model with\n   * 4,096 max output tokens can only include 28,224 tokens in the context before\n   * truncation occurs.\n   *\n   * Clients can configure truncation behavior to truncate with a lower max token\n   * limit, which is an effective way to control token usage and cost.\n   *\n   * Truncation will reduce the number of cached tokens on the next turn (busting the\n   * cache), since messages are dropped from the beginning of the context. However,\n   * clients can also configure truncation to retain messages up to a fraction of the\n   * maximum context size, which will reduce the need for future truncations and thus\n   * improve the cache rate.\n   *\n   * Truncation can be disabled entirely, which means the server will never truncate\n   * but would instead return an error if the conversation exceeds the model's input\n   * token limit.\n   */\n  truncation?: RealtimeAPI.RealtimeTruncation;\n}\n\nexport interface CallReferParams {\n  /**\n   * URI that should appear in the SIP Refer-To header. Supports values like\n   * `tel:+14155550123` or `sip:agent@example.com`.\n   */\n  target_uri: string;\n}\n\nexport interface CallRejectParams {\n  /**\n   * SIP response code to send back to the caller. Defaults to `603` (Decline) when\n   * omitted.\n   */\n  status_code?: number;\n}\n\nexport declare namespace Calls {\n  export {\n    type CallAcceptParams as CallAcceptParams,\n    type CallReferParams as CallReferParams,\n    type CallRejectParams as CallRejectParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as ClientSecretsAPI from './client-secrets';\nimport * as RealtimeAPI from './realtime';\nimport * as ResponsesAPI from '../responses/responses';\nimport { APIPromise } from '../../core/api-promise';\nimport { RequestOptions } from '../../internal/request-options';\n\nexport class ClientSecrets extends APIResource {\n  /**\n   * Create a Realtime client secret with an associated session configuration.\n   *\n   * Client secrets are short-lived tokens that can be passed to a client app, such\n   * as a web frontend or mobile client, which grants access to the Realtime API\n   * without leaking your main API key. You can configure a custom TTL for each\n   * client secret.\n   *\n   * You can also attach session configuration options to the client secret, which\n   * will be applied to any sessions created using that client secret, but these can\n   * also be overridden by the client connection.\n   *\n   * [Learn more about authentication with client secrets over WebRTC](https://platform.openai.com/docs/guides/realtime-webrtc).\n   *\n   * Returns the created client secret and the effective session object. The client\n   * secret is a string that looks like `ek_1234`.\n   *\n   * @example\n   * ```ts\n   * const clientSecret =\n   *   await client.realtime.clientSecrets.create();\n   * ```\n   */\n  create(body: ClientSecretCreateParams, options?: RequestOptions): APIPromise<ClientSecretCreateResponse> {\n    return this._client.post('/realtime/client_secrets', {\n      body,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\n/**\n * A Realtime session configuration object.\n */\nexport interface RealtimeSessionCreateResponse {\n  /**\n   * Unique identifier for the session that looks like `sess_1234567890abcdef`.\n   */\n  id: string;\n\n  /**\n   * The object type. Always `realtime.session`.\n   */\n  object: 'realtime.session';\n\n  /**\n   * The type of session to create. Always `realtime` for the Realtime API.\n   */\n  type: 'realtime';\n\n  /**\n   * Configuration for input and output audio.\n   */\n  audio?: RealtimeSessionCreateResponse.Audio;\n\n  /**\n   * Expiration timestamp for the session, in seconds since epoch.\n   */\n  expires_at?: number;\n\n  /**\n   * Additional fields to include in server outputs.\n   *\n   * `item.input_audio_transcription.logprobs`: Include logprobs for input audio\n   * transcription.\n   */\n  include?: Array<'item.input_audio_transcription.logprobs'>;\n\n  /**\n   * The default system instructions (i.e. system message) prepended to model calls.\n   * This field allows the client to guide the model on desired responses. The model\n   * can be instructed on response content and format, (e.g. \"be extremely succinct\",\n   * \"act friendly\", \"here are examples of good responses\") and on audio behavior\n   * (e.g. \"talk quickly\", \"inject emotion into your voice\", \"laugh frequently\"). The\n   * instructions are not guaranteed to be followed by the model, but they provide\n   * guidance to the model on the desired behavior.\n   *\n   * Note that the server sets default instructions which will be used if this field\n   * is not set and are visible in the `session.created` event at the start of the\n   * session.\n   */\n  instructions?: string;\n\n  /**\n   * Maximum number of output tokens for a single assistant response, inclusive of\n   * tool calls. Provide an integer between 1 and 4096 to limit output tokens, or\n   * `inf` for the maximum available tokens for a given model. Defaults to `inf`.\n   */\n  max_output_tokens?: number | 'inf';\n\n  /**\n   * The Realtime model used for this session.\n   */\n  model?:\n    | (string & {})\n    | 'gpt-realtime'\n    | 'gpt-realtime-1.5'\n    | 'gpt-realtime-2'\n    | 'gpt-realtime-2025-08-28'\n    | 'gpt-4o-realtime-preview'\n    | 'gpt-4o-realtime-preview-2024-10-01'\n    | 'gpt-4o-realtime-preview-2024-12-17'\n    | 'gpt-4o-realtime-preview-2025-06-03'\n    | 'gpt-4o-mini-realtime-preview'\n    | 'gpt-4o-mini-realtime-preview-2024-12-17'\n    | 'gpt-realtime-mini'\n    | 'gpt-realtime-mini-2025-10-06'\n    | 'gpt-realtime-mini-2025-12-15'\n    | 'gpt-audio-1.5'\n    | 'gpt-audio-mini'\n    | 'gpt-audio-mini-2025-10-06'\n    | 'gpt-audio-mini-2025-12-15';\n\n  /**\n   * The set of modalities the model can respond with. It defaults to `[\"audio\"]`,\n   * indicating that the model will respond with audio plus a transcript. `[\"text\"]`\n   * can be used to make the model respond with text only. It is not possible to\n   * request both `text` and `audio` at the same time.\n   */\n  output_modalities?: Array<'text' | 'audio'>;\n\n  /**\n   * Reference to a prompt template and its variables.\n   * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts).\n   */\n  prompt?: ResponsesAPI.ResponsePrompt | null;\n\n  /**\n   * Configuration for reasoning-capable Realtime models such as `gpt-realtime-2`.\n   */\n  reasoning?: RealtimeAPI.RealtimeReasoning;\n\n  /**\n   * How the model chooses tools. Provide one of the string modes or force a specific\n   * function/MCP tool.\n   */\n  tool_choice?: ResponsesAPI.ToolChoiceOptions | ResponsesAPI.ToolChoiceFunction | ResponsesAPI.ToolChoiceMcp;\n\n  /**\n   * Tools available to the model.\n   */\n  tools?: Array<RealtimeAPI.RealtimeFunctionTool | RealtimeSessionCreateResponse.McpTool>;\n\n  /**\n   * Realtime API can write session traces to the\n   * [Traces Dashboard](https://platform.openai.com/logs?api=traces). Set to null to\n   * disable tracing. Once tracing is enabled for a session, the configuration cannot\n   * be modified.\n   *\n   * `auto` will create a trace for the session with default values for the workflow\n   * name, group id, and metadata.\n   */\n  tracing?: 'auto' | RealtimeSessionCreateResponse.TracingConfiguration | null;\n\n  /**\n   * When the number of tokens in a conversation exceeds the model's input token\n   * limit, the conversation be truncated, meaning messages (starting from the\n   * oldest) will not be included in the model's context. A 32k context model with\n   * 4,096 max output tokens can only include 28,224 tokens in the context before\n   * truncation occurs.\n   *\n   * Clients can configure truncation behavior to truncate with a lower max token\n   * limit, which is an effective way to control token usage and cost.\n   *\n   * Truncation will reduce the number of cached tokens on the next turn (busting the\n   * cache), since messages are dropped from the beginning of the context. However,\n   * clients can also configure truncation to retain messages up to a fraction of the\n   * maximum context size, which will reduce the need for future truncations and thus\n   * improve the cache rate.\n   *\n   * Truncation can be disabled entirely, which means the server will never truncate\n   * but would instead return an error if the conversation exceeds the model's input\n   * token limit.\n   */\n  truncation?: RealtimeAPI.RealtimeTruncation;\n}\n\nexport namespace RealtimeSessionCreateResponse {\n  /**\n   * Configuration for input and output audio.\n   */\n  export interface Audio {\n    input?: Audio.Input;\n\n    output?: Audio.Output;\n  }\n\n  export namespace Audio {\n    export interface Input {\n      /**\n       * The format of the input audio.\n       */\n      format?: RealtimeAPI.RealtimeAudioFormats;\n\n      /**\n       * Configuration for input audio noise reduction. This can be set to `null` to turn\n       * off. Noise reduction filters audio added to the input audio buffer before it is\n       * sent to VAD and the model. Filtering the audio can improve VAD and turn\n       * detection accuracy (reducing false positives) and model performance by improving\n       * perception of the input audio.\n       */\n      noise_reduction?: Input.NoiseReduction;\n\n      transcription?: RealtimeAPI.AudioTranscription;\n\n      /**\n       * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n       * set to `null` to turn off, in which case the client must manually trigger model\n       * response.\n       *\n       * Server VAD means that the model will detect the start and end of speech based on\n       * audio volume and respond at the end of user speech.\n       *\n       * Semantic VAD is more advanced and uses a turn detection model (in conjunction\n       * with VAD) to semantically estimate whether the user has finished speaking, then\n       * dynamically sets a timeout based on this probability. For example, if user audio\n       * trails off with \"uhhm\", the model will score a low probability of turn end and\n       * wait longer for the user to continue speaking. This can be useful for more\n       * natural conversations, but may have a higher latency.\n       *\n       * For `gpt-realtime-whisper` transcription sessions, turn detection must be set to\n       * `null`; VAD is not supported.\n       */\n      turn_detection?: Input.ServerVad | Input.SemanticVad | null;\n    }\n\n    export namespace Input {\n      /**\n       * Configuration for input audio noise reduction. This can be set to `null` to turn\n       * off. Noise reduction filters audio added to the input audio buffer before it is\n       * sent to VAD and the model. Filtering the audio can improve VAD and turn\n       * detection accuracy (reducing false positives) and model performance by improving\n       * perception of the input audio.\n       */\n      export interface NoiseReduction {\n        /**\n         * Type of noise reduction. `near_field` is for close-talking microphones such as\n         * headphones, `far_field` is for far-field microphones such as laptop or\n         * conference room microphones.\n         */\n        type?: RealtimeAPI.NoiseReductionType;\n      }\n\n      /**\n       * Server-side voice activity detection (VAD) which flips on when user speech is\n       * detected and off after a period of silence.\n       */\n      export interface ServerVad {\n        /**\n         * Type of turn detection, `server_vad` to turn on simple Server VAD.\n         */\n        type: 'server_vad';\n\n        /**\n         * Whether or not to automatically generate a response when a VAD stop event\n         * occurs. If `interrupt_response` is set to `false` this may fail to create a\n         * response if the model is already responding.\n         *\n         * If both `create_response` and `interrupt_response` are set to `false`, the model\n         * will never respond automatically but VAD events will still be emitted.\n         */\n        create_response?: boolean;\n\n        /**\n         * Optional timeout after which a model response will be triggered automatically.\n         * This is useful for situations in which a long pause from the user is unexpected,\n         * such as a phone call. The model will effectively prompt the user to continue the\n         * conversation based on the current context.\n         *\n         * The timeout value will be applied after the last model response's audio has\n         * finished playing, i.e. it's set to the `response.done` time plus audio playback\n         * duration.\n         *\n         * An `input_audio_buffer.timeout_triggered` event (plus events associated with the\n         * Response) will be emitted when the timeout is reached. Idle timeout is currently\n         * only supported for `server_vad` mode.\n         */\n        idle_timeout_ms?: number | null;\n\n        /**\n         * Whether or not to automatically interrupt (cancel) any ongoing response with\n         * output to the default conversation (i.e. `conversation` of `auto`) when a VAD\n         * start event occurs. If `true` then the response will be cancelled, otherwise it\n         * will continue until complete.\n         *\n         * If both `create_response` and `interrupt_response` are set to `false`, the model\n         * will never respond automatically but VAD events will still be emitted.\n         */\n        interrupt_response?: boolean;\n\n        /**\n         * Used only for `server_vad` mode. Amount of audio to include before the VAD\n         * detected speech (in milliseconds). Defaults to 300ms.\n         */\n        prefix_padding_ms?: number;\n\n        /**\n         * Used only for `server_vad` mode. Duration of silence to detect speech stop (in\n         * milliseconds). Defaults to 500ms. With shorter values the model will respond\n         * more quickly, but may jump in on short pauses from the user.\n         */\n        silence_duration_ms?: number;\n\n        /**\n         * Used only for `server_vad` mode. Activation threshold for VAD (0.0 to 1.0), this\n         * defaults to 0.5. A higher threshold will require louder audio to activate the\n         * model, and thus might perform better in noisy environments.\n         */\n        threshold?: number;\n      }\n\n      /**\n       * Server-side semantic turn detection which uses a model to determine when the\n       * user has finished speaking.\n       */\n      export interface SemanticVad {\n        /**\n         * Type of turn detection, `semantic_vad` to turn on Semantic VAD.\n         */\n        type: 'semantic_vad';\n\n        /**\n         * Whether or not to automatically generate a response when a VAD stop event\n         * occurs.\n         */\n        create_response?: boolean;\n\n        /**\n         * Used only for `semantic_vad` mode. The eagerness of the model to respond. `low`\n         * will wait longer for the user to continue speaking, `high` will respond more\n         * quickly. `auto` is the default and is equivalent to `medium`. `low`, `medium`,\n         * and `high` have max timeouts of 8s, 4s, and 2s respectively.\n         */\n        eagerness?: 'low' | 'medium' | 'high' | 'auto';\n\n        /**\n         * Whether or not to automatically interrupt any ongoing response with output to\n         * the default conversation (i.e. `conversation` of `auto`) when a VAD start event\n         * occurs.\n         */\n        interrupt_response?: boolean;\n      }\n    }\n\n    export interface Output {\n      /**\n       * The format of the output audio.\n       */\n      format?: RealtimeAPI.RealtimeAudioFormats;\n\n      /**\n       * The speed of the model's spoken response as a multiple of the original speed.\n       * 1.0 is the default speed. 0.25 is the minimum speed. 1.5 is the maximum speed.\n       * This value can only be changed in between model turns, not while a response is\n       * in progress.\n       *\n       * This parameter is a post-processing adjustment to the audio after it is\n       * generated, it's also possible to prompt the model to speak faster or slower.\n       */\n      speed?: number;\n\n      /**\n       * The voice the model uses to respond. Voice cannot be changed during the session\n       * once the model has responded with audio at least once. Current voice options are\n       * `alloy`, `ash`, `ballad`, `coral`, `echo`, `sage`, `shimmer`, `verse`, `marin`,\n       * and `cedar`. We recommend `marin` and `cedar` for best quality.\n       */\n      voice?:\n        | (string & {})\n        | 'alloy'\n        | 'ash'\n        | 'ballad'\n        | 'coral'\n        | 'echo'\n        | 'sage'\n        | 'shimmer'\n        | 'verse'\n        | 'marin'\n        | 'cedar';\n    }\n  }\n\n  /**\n   * Give the model access to additional tools via remote Model Context Protocol\n   * (MCP) servers.\n   * [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp).\n   */\n  export interface McpTool {\n    /**\n     * A label for this MCP server, used to identify it in tool calls.\n     */\n    server_label: string;\n\n    /**\n     * The type of the MCP tool. Always `mcp`.\n     */\n    type: 'mcp';\n\n    /**\n     * List of allowed tool names or a filter object.\n     */\n    allowed_tools?: Array<string> | McpTool.McpToolFilter | null;\n\n    /**\n     * An OAuth access token that can be used with a remote MCP server, either with a\n     * custom MCP server URL or a service connector. Your application must handle the\n     * OAuth authorization flow and provide the token here.\n     */\n    authorization?: string;\n\n    /**\n     * Identifier for service connectors, like those available in ChatGPT. One of\n     * `server_url` or `connector_id` must be provided. Learn more about service\n     * connectors\n     * [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors).\n     *\n     * Currently supported `connector_id` values are:\n     *\n     * - Dropbox: `connector_dropbox`\n     * - Gmail: `connector_gmail`\n     * - Google Calendar: `connector_googlecalendar`\n     * - Google Drive: `connector_googledrive`\n     * - Microsoft Teams: `connector_microsoftteams`\n     * - Outlook Calendar: `connector_outlookcalendar`\n     * - Outlook Email: `connector_outlookemail`\n     * - SharePoint: `connector_sharepoint`\n     */\n    connector_id?:\n      | 'connector_dropbox'\n      | 'connector_gmail'\n      | 'connector_googlecalendar'\n      | 'connector_googledrive'\n      | 'connector_microsoftteams'\n      | 'connector_outlookcalendar'\n      | 'connector_outlookemail'\n      | 'connector_sharepoint';\n\n    /**\n     * Whether this MCP tool is deferred and discovered via tool search.\n     */\n    defer_loading?: boolean;\n\n    /**\n     * Optional HTTP headers to send to the MCP server. Use for authentication or other\n     * purposes.\n     */\n    headers?: { [key: string]: string } | null;\n\n    /**\n     * Specify which of the MCP server's tools require approval.\n     */\n    require_approval?: McpTool.McpToolApprovalFilter | 'always' | 'never' | null;\n\n    /**\n     * Optional description of the MCP server, used to provide more context.\n     */\n    server_description?: string;\n\n    /**\n     * The URL for the MCP server. One of `server_url` or `connector_id` must be\n     * provided.\n     */\n    server_url?: string;\n  }\n\n  export namespace McpTool {\n    /**\n     * A filter object to specify which tools are allowed.\n     */\n    export interface McpToolFilter {\n      /**\n       * Indicates whether or not a tool modifies data or is read-only. If an MCP server\n       * is\n       * [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\n       * it will match this filter.\n       */\n      read_only?: boolean;\n\n      /**\n       * List of allowed tool names.\n       */\n      tool_names?: Array<string>;\n    }\n\n    /**\n     * Specify which of the MCP server's tools require approval. Can be `always`,\n     * `never`, or a filter object associated with tools that require approval.\n     */\n    export interface McpToolApprovalFilter {\n      /**\n       * A filter object to specify which tools are allowed.\n       */\n      always?: McpToolApprovalFilter.Always;\n\n      /**\n       * A filter object to specify which tools are allowed.\n       */\n      never?: McpToolApprovalFilter.Never;\n    }\n\n    export namespace McpToolApprovalFilter {\n      /**\n       * A filter object to specify which tools are allowed.\n       */\n      export interface Always {\n        /**\n         * Indicates whether or not a tool modifies data or is read-only. If an MCP server\n         * is\n         * [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\n         * it will match this filter.\n         */\n        read_only?: boolean;\n\n        /**\n         * List of allowed tool names.\n         */\n        tool_names?: Array<string>;\n      }\n\n      /**\n       * A filter object to specify which tools are allowed.\n       */\n      export interface Never {\n        /**\n         * Indicates whether or not a tool modifies data or is read-only. If an MCP server\n         * is\n         * [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\n         * it will match this filter.\n         */\n        read_only?: boolean;\n\n        /**\n         * List of allowed tool names.\n         */\n        tool_names?: Array<string>;\n      }\n    }\n  }\n\n  /**\n   * Granular configuration for tracing.\n   */\n  export interface TracingConfiguration {\n    /**\n     * The group id to attach to this trace to enable filtering and grouping in the\n     * Traces Dashboard.\n     */\n    group_id?: string;\n\n    /**\n     * The arbitrary metadata to attach to this trace to enable filtering in the Traces\n     * Dashboard.\n     */\n    metadata?: unknown;\n\n    /**\n     * The name of the workflow to attach to this trace. This is used to name the trace\n     * in the Traces Dashboard.\n     */\n    workflow_name?: string;\n  }\n}\n\n/**\n * A Realtime transcription session configuration object.\n */\nexport interface RealtimeTranscriptionSessionCreateResponse {\n  /**\n   * Unique identifier for the session that looks like `sess_1234567890abcdef`.\n   */\n  id: string;\n\n  /**\n   * The object type. Always `realtime.transcription_session`.\n   */\n  object: string;\n\n  /**\n   * The type of session. Always `transcription` for transcription sessions.\n   */\n  type: 'transcription';\n\n  /**\n   * Configuration for input audio for the session.\n   */\n  audio?: RealtimeTranscriptionSessionCreateResponse.Audio;\n\n  /**\n   * Expiration timestamp for the session, in seconds since epoch.\n   */\n  expires_at?: number;\n\n  /**\n   * Additional fields to include in server outputs.\n   *\n   * - `item.input_audio_transcription.logprobs`: Include logprobs for input audio\n   *   transcription.\n   */\n  include?: Array<'item.input_audio_transcription.logprobs'>;\n}\n\nexport namespace RealtimeTranscriptionSessionCreateResponse {\n  /**\n   * Configuration for input audio for the session.\n   */\n  export interface Audio {\n    input?: Audio.Input;\n  }\n\n  export namespace Audio {\n    export interface Input {\n      /**\n       * The PCM audio format. Only a 24kHz sample rate is supported.\n       */\n      format?: RealtimeAPI.RealtimeAudioFormats;\n\n      /**\n       * Configuration for input audio noise reduction.\n       */\n      noise_reduction?: Input.NoiseReduction;\n\n      transcription?: RealtimeAPI.AudioTranscription;\n\n      /**\n       * Configuration for turn detection. Can be set to `null` to turn off. Server VAD\n       * means that the model will detect the start and end of speech based on audio\n       * volume and respond at the end of user speech. For `gpt-realtime-whisper`, this\n       * must be `null`; VAD is not supported.\n       */\n      turn_detection?: ClientSecretsAPI.RealtimeTranscriptionSessionTurnDetection | null;\n    }\n\n    export namespace Input {\n      /**\n       * Configuration for input audio noise reduction.\n       */\n      export interface NoiseReduction {\n        /**\n         * Type of noise reduction. `near_field` is for close-talking microphones such as\n         * headphones, `far_field` is for far-field microphones such as laptop or\n         * conference room microphones.\n         */\n        type?: RealtimeAPI.NoiseReductionType;\n      }\n    }\n  }\n}\n\n/**\n * Configuration for turn detection. Can be set to `null` to turn off. Server VAD\n * means that the model will detect the start and end of speech based on audio\n * volume and respond at the end of user speech. For `gpt-realtime-whisper`, this\n * must be `null`; VAD is not supported.\n */\nexport interface RealtimeTranscriptionSessionTurnDetection {\n  /**\n   * Amount of audio to include before the VAD detected speech (in milliseconds).\n   * Defaults to 300ms.\n   */\n  prefix_padding_ms?: number;\n\n  /**\n   * Duration of silence to detect speech stop (in milliseconds). Defaults to 500ms.\n   * With shorter values the model will respond more quickly, but may jump in on\n   * short pauses from the user.\n   */\n  silence_duration_ms?: number;\n\n  /**\n   * Activation threshold for VAD (0.0 to 1.0), this defaults to 0.5. A higher\n   * threshold will require louder audio to activate the model, and thus might\n   * perform better in noisy environments.\n   */\n  threshold?: number;\n\n  /**\n   * Type of turn detection, only `server_vad` is currently supported.\n   */\n  type?: string;\n}\n\n/**\n * Response from creating a session and client secret for the Realtime API.\n */\nexport interface ClientSecretCreateResponse {\n  /**\n   * Expiration timestamp for the client secret, in seconds since epoch.\n   */\n  expires_at: number;\n\n  /**\n   * The session configuration for either a realtime or transcription session.\n   */\n  session: RealtimeSessionCreateResponse | RealtimeTranscriptionSessionCreateResponse;\n\n  /**\n   * The generated client secret value.\n   */\n  value: string;\n}\n\nexport interface ClientSecretCreateParams {\n  /**\n   * Configuration for the client secret expiration. Expiration refers to the time\n   * after which a client secret will no longer be valid for creating sessions. The\n   * session itself may continue after that time once started. A secret can be used\n   * to create multiple sessions until it expires.\n   */\n  expires_after?: ClientSecretCreateParams.ExpiresAfter;\n\n  /**\n   * Session configuration to use for the client secret. Choose either a realtime\n   * session or a transcription session.\n   */\n  session?: RealtimeAPI.RealtimeSessionCreateRequest | RealtimeAPI.RealtimeTranscriptionSessionCreateRequest;\n}\n\nexport namespace ClientSecretCreateParams {\n  /**\n   * Configuration for the client secret expiration. Expiration refers to the time\n   * after which a client secret will no longer be valid for creating sessions. The\n   * session itself may continue after that time once started. A secret can be used\n   * to create multiple sessions until it expires.\n   */\n  export interface ExpiresAfter {\n    /**\n     * The anchor point for the client secret expiration, meaning that `seconds` will\n     * be added to the `created_at` time of the client secret to produce an expiration\n     * timestamp. Only `created_at` is currently supported.\n     */\n    anchor?: 'created_at';\n\n    /**\n     * The number of seconds from the anchor point to the expiration. Select a value\n     * between `10` and `7200` (2 hours). This default to 600 seconds (10 minutes) if\n     * not specified.\n     */\n    seconds?: number;\n  }\n}\n\nexport declare namespace ClientSecrets {\n  export {\n    type RealtimeSessionCreateResponse as RealtimeSessionCreateResponse,\n    type RealtimeTranscriptionSessionCreateResponse as RealtimeTranscriptionSessionCreateResponse,\n    type RealtimeTranscriptionSessionTurnDetection as RealtimeTranscriptionSessionTurnDetection,\n    type ClientSecretCreateResponse as ClientSecretCreateResponse,\n    type ClientSecretCreateParams as ClientSecretCreateParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as RealtimeAPI from './realtime';\nimport * as Shared from '../shared';\nimport * as CallsAPI from './calls';\nimport { CallAcceptParams, CallReferParams, CallRejectParams, Calls } from './calls';\nimport * as ClientSecretsAPI from './client-secrets';\nimport {\n  ClientSecretCreateParams,\n  ClientSecretCreateResponse,\n  ClientSecrets,\n  RealtimeSessionCreateResponse,\n  RealtimeTranscriptionSessionCreateResponse,\n  RealtimeTranscriptionSessionTurnDetection,\n} from './client-secrets';\nimport * as ResponsesAPI from '../responses/responses';\n\nexport class Realtime extends APIResource {\n  clientSecrets: ClientSecretsAPI.ClientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n  calls: CallsAPI.Calls = new CallsAPI.Calls(this._client);\n}\n\nexport interface AudioTranscription {\n  /**\n   * Controls how long the model waits before emitting transcription text. Higher\n   * values can improve transcription accuracy at the cost of latency. Only supported\n   * with `gpt-realtime-whisper` in GA Realtime sessions.\n   */\n  delay?: 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';\n\n  /**\n   * The language of the input audio. Supplying the input language in\n   * [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) (e.g. `en`)\n   * format will improve accuracy and latency.\n   */\n  language?: string;\n\n  /**\n   * The model to use for transcription. Current options are `whisper-1`,\n   * `gpt-4o-mini-transcribe`, `gpt-4o-mini-transcribe-2025-12-15`,\n   * `gpt-4o-transcribe`, `gpt-4o-transcribe-diarize`, and `gpt-realtime-whisper`.\n   * Use `gpt-4o-transcribe-diarize` when you need diarization with speaker labels.\n   */\n  model?:\n    | (string & {})\n    | 'whisper-1'\n    | 'gpt-4o-mini-transcribe'\n    | 'gpt-4o-mini-transcribe-2025-12-15'\n    | 'gpt-4o-transcribe'\n    | 'gpt-4o-transcribe-diarize'\n    | 'gpt-realtime-whisper';\n\n  /**\n   * An optional text to guide the model's style or continue a previous audio\n   * segment. For `whisper-1`, the\n   * [prompt is a list of keywords](https://platform.openai.com/docs/guides/speech-to-text#prompting).\n   * For `gpt-4o-transcribe` models (excluding `gpt-4o-transcribe-diarize`), the\n   * prompt is a free text string, for example \"expect words related to technology\".\n   * Prompt is not supported with `gpt-realtime-whisper` in GA Realtime sessions.\n   */\n  prompt?: string;\n}\n\n/**\n * Returned when a conversation is created. Emitted right after session creation.\n */\nexport interface ConversationCreatedEvent {\n  /**\n   * The conversation resource.\n   */\n  conversation: ConversationCreatedEvent.Conversation;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The event type, must be `conversation.created`.\n   */\n  type: 'conversation.created';\n}\n\nexport namespace ConversationCreatedEvent {\n  /**\n   * The conversation resource.\n   */\n  export interface Conversation {\n    /**\n     * The unique ID of the conversation.\n     */\n    id?: string;\n\n    /**\n     * The object type, must be `realtime.conversation`.\n     */\n    object?: 'realtime.conversation';\n  }\n}\n\n/**\n * A single item within a Realtime conversation.\n */\nexport type ConversationItem =\n  | RealtimeConversationItemSystemMessage\n  | RealtimeConversationItemUserMessage\n  | RealtimeConversationItemAssistantMessage\n  | RealtimeConversationItemFunctionCall\n  | RealtimeConversationItemFunctionCallOutput\n  | RealtimeMcpApprovalResponse\n  | RealtimeMcpListTools\n  | RealtimeMcpToolCall\n  | RealtimeMcpApprovalRequest;\n\n/**\n * Sent by the server when an Item is added to the default Conversation. This can\n * happen in several cases:\n *\n * - When the client sends a `conversation.item.create` event.\n * - When the input audio buffer is committed. In this case the item will be a user\n *   message containing the audio from the buffer.\n * - When the model is generating a Response. In this case the\n *   `conversation.item.added` event will be sent when the model starts generating\n *   a specific Item, and thus it will not yet have any content (and `status` will\n *   be `in_progress`).\n *\n * The event will include the full content of the Item (except when model is\n * generating a Response) except for audio data, which can be retrieved separately\n * with a `conversation.item.retrieve` event if necessary.\n */\nexport interface ConversationItemAdded {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * A single item within a Realtime conversation.\n   */\n  item: ConversationItem;\n\n  /**\n   * The event type, must be `conversation.item.added`.\n   */\n  type: 'conversation.item.added';\n\n  /**\n   * The ID of the item that precedes this one, if any. This is used to maintain\n   * ordering when items are inserted.\n   */\n  previous_item_id?: string | null;\n}\n\n/**\n * Add a new Item to the Conversation's context, including messages, function\n * calls, and function call responses. This event can be used both to populate a\n * \"history\" of the conversation and to add new items mid-stream, but has the\n * current limitation that it cannot populate assistant audio messages.\n *\n * If successful, the server will respond with a `conversation.item.created` event,\n * otherwise an `error` event will be sent.\n */\nexport interface ConversationItemCreateEvent {\n  /**\n   * A single item within a Realtime conversation.\n   */\n  item: ConversationItem;\n\n  /**\n   * The event type, must be `conversation.item.create`.\n   */\n  type: 'conversation.item.create';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n\n  /**\n   * The ID of the preceding item after which the new item will be inserted. If not\n   * set, the new item will be appended to the end of the conversation.\n   *\n   * If set to `root`, the new item will be added to the beginning of the\n   * conversation.\n   *\n   * If set to an existing ID, it allows an item to be inserted mid-conversation. If\n   * the ID cannot be found, an error will be returned and the item will not be\n   * added.\n   */\n  previous_item_id?: string;\n}\n\n/**\n * Returned when a conversation item is created. There are several scenarios that\n * produce this event:\n *\n * - The server is generating a Response, which if successful will produce either\n *   one or two Items, which will be of type `message` (role `assistant`) or type\n *   `function_call`.\n * - The input audio buffer has been committed, either by the client or the server\n *   (in `server_vad` mode). The server will take the content of the input audio\n *   buffer and add it to a new user message Item.\n * - The client has sent a `conversation.item.create` event to add a new Item to\n *   the Conversation.\n */\nexport interface ConversationItemCreatedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * A single item within a Realtime conversation.\n   */\n  item: ConversationItem;\n\n  /**\n   * The event type, must be `conversation.item.created`.\n   */\n  type: 'conversation.item.created';\n\n  /**\n   * The ID of the preceding item in the Conversation context, allows the client to\n   * understand the order of the conversation. Can be `null` if the item has no\n   * predecessor.\n   */\n  previous_item_id?: string | null;\n}\n\n/**\n * Send this event when you want to remove any item from the conversation history.\n * The server will respond with a `conversation.item.deleted` event, unless the\n * item does not exist in the conversation history, in which case the server will\n * respond with an error.\n */\nexport interface ConversationItemDeleteEvent {\n  /**\n   * The ID of the item to delete.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `conversation.item.delete`.\n   */\n  type: 'conversation.item.delete';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\n/**\n * Returned when an item in the conversation is deleted by the client with a\n * `conversation.item.delete` event. This event is used to synchronize the server's\n * understanding of the conversation history with the client's view.\n */\nexport interface ConversationItemDeletedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item that was deleted.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `conversation.item.deleted`.\n   */\n  type: 'conversation.item.deleted';\n}\n\n/**\n * Returned when a conversation item is finalized.\n *\n * The event will include the full content of the Item except for audio data, which\n * can be retrieved separately with a `conversation.item.retrieve` event if needed.\n */\nexport interface ConversationItemDone {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * A single item within a Realtime conversation.\n   */\n  item: ConversationItem;\n\n  /**\n   * The event type, must be `conversation.item.done`.\n   */\n  type: 'conversation.item.done';\n\n  /**\n   * The ID of the item that precedes this one, if any. This is used to maintain\n   * ordering when items are inserted.\n   */\n  previous_item_id?: string | null;\n}\n\n/**\n * This event is the output of audio transcription for user audio written to the\n * user audio buffer. Transcription begins when the input audio buffer is committed\n * by the client or server (when VAD is enabled). Transcription runs asynchronously\n * with Response creation, so this event may come before or after the Response\n * events.\n *\n * Realtime API models accept audio natively, and thus input transcription is a\n * separate process run on a separate ASR (Automatic Speech Recognition) model. The\n * transcript may diverge somewhat from the model's interpretation, and should be\n * treated as a rough guide.\n */\nexport interface ConversationItemInputAudioTranscriptionCompletedEvent {\n  /**\n   * The index of the content part containing the audio.\n   */\n  content_index: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item containing the audio that is being transcribed.\n   */\n  item_id: string;\n\n  /**\n   * The transcribed text.\n   */\n  transcript: string;\n\n  /**\n   * The event type, must be `conversation.item.input_audio_transcription.completed`.\n   */\n  type: 'conversation.item.input_audio_transcription.completed';\n\n  /**\n   * Usage statistics for the transcription, this is billed according to the ASR\n   * model's pricing rather than the realtime model's pricing.\n   */\n  usage:\n    | ConversationItemInputAudioTranscriptionCompletedEvent.TranscriptTextUsageTokens\n    | ConversationItemInputAudioTranscriptionCompletedEvent.TranscriptTextUsageDuration;\n\n  /**\n   * The log probabilities of the transcription.\n   */\n  logprobs?: Array<LogProbProperties> | null;\n}\n\nexport namespace ConversationItemInputAudioTranscriptionCompletedEvent {\n  /**\n   * Usage statistics for models billed by token usage.\n   */\n  export interface TranscriptTextUsageTokens {\n    /**\n     * Number of input tokens billed for this request.\n     */\n    input_tokens: number;\n\n    /**\n     * Number of output tokens generated.\n     */\n    output_tokens: number;\n\n    /**\n     * Total number of tokens used (input + output).\n     */\n    total_tokens: number;\n\n    /**\n     * The type of the usage object. Always `tokens` for this variant.\n     */\n    type: 'tokens';\n\n    /**\n     * Details about the input tokens billed for this request.\n     */\n    input_token_details?: TranscriptTextUsageTokens.InputTokenDetails;\n  }\n\n  export namespace TranscriptTextUsageTokens {\n    /**\n     * Details about the input tokens billed for this request.\n     */\n    export interface InputTokenDetails {\n      /**\n       * Number of audio tokens billed for this request.\n       */\n      audio_tokens?: number;\n\n      /**\n       * Number of text tokens billed for this request.\n       */\n      text_tokens?: number;\n    }\n  }\n\n  /**\n   * Usage statistics for models billed by audio input duration.\n   */\n  export interface TranscriptTextUsageDuration {\n    /**\n     * Duration of the input audio in seconds.\n     */\n    seconds: number;\n\n    /**\n     * The type of the usage object. Always `duration` for this variant.\n     */\n    type: 'duration';\n  }\n}\n\n/**\n * Returned when the text value of an input audio transcription content part is\n * updated with incremental transcription results.\n */\nexport interface ConversationItemInputAudioTranscriptionDeltaEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item containing the audio that is being transcribed.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `conversation.item.input_audio_transcription.delta`.\n   */\n  type: 'conversation.item.input_audio_transcription.delta';\n\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index?: number;\n\n  /**\n   * The text delta.\n   */\n  delta?: string;\n\n  /**\n   * The log probabilities of the transcription. These can be enabled by\n   * configurating the session with\n   * `\"include\": [\"item.input_audio_transcription.logprobs\"]`. Each entry in the\n   * array corresponds a log probability of which token would be selected for this\n   * chunk of transcription. This can help to identify if it was possible there were\n   * multiple valid options for a given chunk of transcription.\n   */\n  logprobs?: Array<LogProbProperties> | null;\n}\n\n/**\n * Returned when input audio transcription is configured, and a transcription\n * request for a user message failed. These events are separate from other `error`\n * events so that the client can identify the related Item.\n */\nexport interface ConversationItemInputAudioTranscriptionFailedEvent {\n  /**\n   * The index of the content part containing the audio.\n   */\n  content_index: number;\n\n  /**\n   * Details of the transcription error.\n   */\n  error: ConversationItemInputAudioTranscriptionFailedEvent.Error;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the user message item.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `conversation.item.input_audio_transcription.failed`.\n   */\n  type: 'conversation.item.input_audio_transcription.failed';\n}\n\nexport namespace ConversationItemInputAudioTranscriptionFailedEvent {\n  /**\n   * Details of the transcription error.\n   */\n  export interface Error {\n    /**\n     * Error code, if any.\n     */\n    code?: string;\n\n    /**\n     * A human-readable error message.\n     */\n    message?: string;\n\n    /**\n     * Parameter related to the error, if any.\n     */\n    param?: string;\n\n    /**\n     * The type of error.\n     */\n    type?: string;\n  }\n}\n\n/**\n * Returned when an input audio transcription segment is identified for an item.\n */\nexport interface ConversationItemInputAudioTranscriptionSegment {\n  /**\n   * The segment identifier.\n   */\n  id: string;\n\n  /**\n   * The index of the input audio content part within the item.\n   */\n  content_index: number;\n\n  /**\n   * End time of the segment in seconds.\n   */\n  end: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item containing the input audio content.\n   */\n  item_id: string;\n\n  /**\n   * The detected speaker label for this segment.\n   */\n  speaker: string;\n\n  /**\n   * Start time of the segment in seconds.\n   */\n  start: number;\n\n  /**\n   * The text for this segment.\n   */\n  text: string;\n\n  /**\n   * The event type, must be `conversation.item.input_audio_transcription.segment`.\n   */\n  type: 'conversation.item.input_audio_transcription.segment';\n}\n\n/**\n * Send this event when you want to retrieve the server's representation of a\n * specific item in the conversation history. This is useful, for example, to\n * inspect user audio after noise cancellation and VAD. The server will respond\n * with a `conversation.item.retrieved` event, unless the item does not exist in\n * the conversation history, in which case the server will respond with an error.\n */\nexport interface ConversationItemRetrieveEvent {\n  /**\n   * The ID of the item to retrieve.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `conversation.item.retrieve`.\n   */\n  type: 'conversation.item.retrieve';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\n/**\n * Send this event to truncate a previous assistant message\u2019s audio. The server\n * will produce audio faster than realtime, so this event is useful when the user\n * interrupts to truncate audio that has already been sent to the client but not\n * yet played. This will synchronize the server's understanding of the audio with\n * the client's playback.\n *\n * Truncating audio will delete the server-side text transcript to ensure there is\n * not text in the context that hasn't been heard by the user.\n *\n * If successful, the server will respond with a `conversation.item.truncated`\n * event.\n */\nexport interface ConversationItemTruncateEvent {\n  /**\n   * Inclusive duration up to which audio is truncated, in milliseconds. If the\n   * audio_end_ms is greater than the actual audio duration, the server will respond\n   * with an error.\n   */\n  audio_end_ms: number;\n\n  /**\n   * The index of the content part to truncate. Set this to `0`.\n   */\n  content_index: number;\n\n  /**\n   * The ID of the assistant message item to truncate. Only assistant message items\n   * can be truncated.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `conversation.item.truncate`.\n   */\n  type: 'conversation.item.truncate';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\n/**\n * Returned when an earlier assistant audio message item is truncated by the client\n * with a `conversation.item.truncate` event. This event is used to synchronize the\n * server's understanding of the audio with the client's playback.\n *\n * This action will truncate the audio and remove the server-side text transcript\n * to ensure there is no text in the context that hasn't been heard by the user.\n */\nexport interface ConversationItemTruncatedEvent {\n  /**\n   * The duration up to which the audio was truncated, in milliseconds.\n   */\n  audio_end_ms: number;\n\n  /**\n   * The index of the content part that was truncated.\n   */\n  content_index: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the assistant message item that was truncated.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `conversation.item.truncated`.\n   */\n  type: 'conversation.item.truncated';\n}\n\n/**\n * The item to add to the conversation.\n */\nexport interface ConversationItemWithReference {\n  /**\n   * For an item of type (`message` | `function_call` | `function_call_output`) this\n   * field allows the client to assign the unique ID of the item. It is not required\n   * because the server will generate one if not provided.\n   *\n   * For an item of type `item_reference`, this field is required and is a reference\n   * to any item that has previously existed in the conversation.\n   */\n  id?: string;\n\n  /**\n   * The arguments of the function call (for `function_call` items).\n   */\n  arguments?: string;\n\n  /**\n   * The ID of the function call (for `function_call` and `function_call_output`\n   * items). If passed on a `function_call_output` item, the server will check that a\n   * `function_call` item with the same ID exists in the conversation history.\n   */\n  call_id?: string;\n\n  /**\n   * The content of the message, applicable for `message` items.\n   *\n   * - Message items of role `system` support only `input_text` content\n   * - Message items of role `user` support `input_text` and `input_audio` content\n   * - Message items of role `assistant` support `text` content.\n   */\n  content?: Array<ConversationItemWithReference.Content>;\n\n  /**\n   * The name of the function being called (for `function_call` items).\n   */\n  name?: string;\n\n  /**\n   * Identifier for the API object being returned - always `realtime.item`.\n   */\n  object?: 'realtime.item';\n\n  /**\n   * The output of the function call (for `function_call_output` items).\n   */\n  output?: string;\n\n  /**\n   * The role of the message sender (`user`, `assistant`, `system`), only applicable\n   * for `message` items.\n   */\n  role?: 'user' | 'assistant' | 'system';\n\n  /**\n   * The status of the item (`completed`, `incomplete`, `in_progress`). These have no\n   * effect on the conversation, but are accepted for consistency with the\n   * `conversation.item.created` event.\n   */\n  status?: 'completed' | 'incomplete' | 'in_progress';\n\n  /**\n   * The type of the item (`message`, `function_call`, `function_call_output`,\n   * `item_reference`).\n   */\n  type?: 'message' | 'function_call' | 'function_call_output' | 'item_reference';\n}\n\nexport namespace ConversationItemWithReference {\n  export interface Content {\n    /**\n     * ID of a previous conversation item to reference (for `item_reference` content\n     * types in `response.create` events). These can reference both client and server\n     * created items.\n     */\n    id?: string;\n\n    /**\n     * Base64-encoded audio bytes, used for `input_audio` content type.\n     */\n    audio?: string;\n\n    /**\n     * The text content, used for `input_text` and `text` content types.\n     */\n    text?: string;\n\n    /**\n     * The transcript of the audio, used for `input_audio` content type.\n     */\n    transcript?: string;\n\n    /**\n     * The content type (`input_text`, `input_audio`, `item_reference`, `text`).\n     */\n    type?: 'input_text' | 'input_audio' | 'item_reference' | 'text';\n  }\n}\n\n/**\n * Send this event to append audio bytes to the input audio buffer. The audio\n * buffer is temporary storage you can write to and later commit. A \"commit\" will\n * create a new user message item in the conversation history from the buffer\n * content and clear the buffer. Input audio transcription (if enabled) will be\n * generated when the buffer is committed.\n *\n * If VAD is enabled the audio buffer is used to detect speech and the server will\n * decide when to commit. When Server VAD is disabled, you must commit the audio\n * buffer manually. Input audio noise reduction operates on writes to the audio\n * buffer.\n *\n * The client may choose how much audio to place in each event up to a maximum of\n * 15 MiB, for example streaming smaller chunks from the client may allow the VAD\n * to be more responsive. Unlike most other client events, the server will not send\n * a confirmation response to this event.\n */\nexport interface InputAudioBufferAppendEvent {\n  /**\n   * Base64-encoded audio bytes. This must be in the format specified by the\n   * `input_audio_format` field in the session configuration.\n   */\n  audio: string;\n\n  /**\n   * The event type, must be `input_audio_buffer.append`.\n   */\n  type: 'input_audio_buffer.append';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\n/**\n * Send this event to clear the audio bytes in the buffer. The server will respond\n * with an `input_audio_buffer.cleared` event.\n */\nexport interface InputAudioBufferClearEvent {\n  /**\n   * The event type, must be `input_audio_buffer.clear`.\n   */\n  type: 'input_audio_buffer.clear';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\n/**\n * Returned when the input audio buffer is cleared by the client with a\n * `input_audio_buffer.clear` event.\n */\nexport interface InputAudioBufferClearedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The event type, must be `input_audio_buffer.cleared`.\n   */\n  type: 'input_audio_buffer.cleared';\n}\n\n/**\n * Send this event to commit the user input audio buffer, which will create a new\n * user message item in the conversation. This event will produce an error if the\n * input audio buffer is empty. When in Server VAD mode, the client does not need\n * to send this event, the server will commit the audio buffer automatically.\n *\n * Committing the input audio buffer will trigger input audio transcription (if\n * enabled in session configuration), but it will not create a response from the\n * model. The server will respond with an `input_audio_buffer.committed` event.\n */\nexport interface InputAudioBufferCommitEvent {\n  /**\n   * The event type, must be `input_audio_buffer.commit`.\n   */\n  type: 'input_audio_buffer.commit';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\n/**\n * Returned when an input audio buffer is committed, either by the client or\n * automatically in server VAD mode. The `item_id` property is the ID of the user\n * message item that will be created, thus a `conversation.item.created` event will\n * also be sent to the client.\n */\nexport interface InputAudioBufferCommittedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the user message item that will be created.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `input_audio_buffer.committed`.\n   */\n  type: 'input_audio_buffer.committed';\n\n  /**\n   * The ID of the preceding item after which the new item will be inserted. Can be\n   * `null` if the item has no predecessor.\n   */\n  previous_item_id?: string | null;\n}\n\n/**\n * **SIP Only:** Returned when an DTMF event is received. A DTMF event is a message\n * that represents a telephone keypad press (0\u20139, \\*, #, A\u2013D). The `event` property\n * is the keypad that the user press. The `received_at` is the UTC Unix Timestamp\n * that the server received the event.\n */\nexport interface InputAudioBufferDtmfEventReceivedEvent {\n  /**\n   * The telephone keypad that was pressed by the user.\n   */\n  event: string;\n\n  /**\n   * UTC Unix Timestamp when DTMF Event was received by server.\n   */\n  received_at: number;\n\n  /**\n   * The event type, must be `input_audio_buffer.dtmf_event_received`.\n   */\n  type: 'input_audio_buffer.dtmf_event_received';\n}\n\n/**\n * Sent by the server when in `server_vad` mode to indicate that speech has been\n * detected in the audio buffer. This can happen any time audio is added to the\n * buffer (unless speech is already detected). The client may want to use this\n * event to interrupt audio playback or provide visual feedback to the user.\n *\n * The client should expect to receive a `input_audio_buffer.speech_stopped` event\n * when speech stops. The `item_id` property is the ID of the user message item\n * that will be created when speech stops and will also be included in the\n * `input_audio_buffer.speech_stopped` event (unless the client manually commits\n * the audio buffer during VAD activation).\n */\nexport interface InputAudioBufferSpeechStartedEvent {\n  /**\n   * Milliseconds from the start of all audio written to the buffer during the\n   * session when speech was first detected. This will correspond to the beginning of\n   * audio sent to the model, and thus includes the `prefix_padding_ms` configured in\n   * the Session.\n   */\n  audio_start_ms: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the user message item that will be created when speech stops.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `input_audio_buffer.speech_started`.\n   */\n  type: 'input_audio_buffer.speech_started';\n}\n\n/**\n * Returned in `server_vad` mode when the server detects the end of speech in the\n * audio buffer. The server will also send an `conversation.item.created` event\n * with the user message item that is created from the audio buffer.\n */\nexport interface InputAudioBufferSpeechStoppedEvent {\n  /**\n   * Milliseconds since the session started when speech stopped. This will correspond\n   * to the end of audio sent to the model, and thus includes the\n   * `min_silence_duration_ms` configured in the Session.\n   */\n  audio_end_ms: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the user message item that will be created.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `input_audio_buffer.speech_stopped`.\n   */\n  type: 'input_audio_buffer.speech_stopped';\n}\n\n/**\n * Returned when the Server VAD timeout is triggered for the input audio buffer.\n * This is configured with `idle_timeout_ms` in the `turn_detection` settings of\n * the session, and it indicates that there hasn't been any speech detected for the\n * configured duration.\n *\n * The `audio_start_ms` and `audio_end_ms` fields indicate the segment of audio\n * after the last model response up to the triggering time, as an offset from the\n * beginning of audio written to the input audio buffer. This means it demarcates\n * the segment of audio that was silent and the difference between the start and\n * end values will roughly match the configured timeout.\n *\n * The empty audio will be committed to the conversation as an `input_audio` item\n * (there will be a `input_audio_buffer.committed` event) and a model response will\n * be generated. There may be speech that didn't trigger VAD but is still detected\n * by the model, so the model may respond with something relevant to the\n * conversation or a prompt to continue speaking.\n */\nexport interface InputAudioBufferTimeoutTriggered {\n  /**\n   * Millisecond offset of audio written to the input audio buffer at the time the\n   * timeout was triggered.\n   */\n  audio_end_ms: number;\n\n  /**\n   * Millisecond offset of audio written to the input audio buffer that was after the\n   * playback time of the last model response.\n   */\n  audio_start_ms: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item associated with this segment.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `input_audio_buffer.timeout_triggered`.\n   */\n  type: 'input_audio_buffer.timeout_triggered';\n}\n\n/**\n * A log probability object.\n */\nexport interface LogProbProperties {\n  /**\n   * The token that was used to generate the log probability.\n   */\n  token: string;\n\n  /**\n   * The bytes that were used to generate the log probability.\n   */\n  bytes: Array<number>;\n\n  /**\n   * The log probability of the token.\n   */\n  logprob: number;\n}\n\n/**\n * Returned when listing MCP tools has completed for an item.\n */\nexport interface McpListToolsCompleted {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the MCP list tools item.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `mcp_list_tools.completed`.\n   */\n  type: 'mcp_list_tools.completed';\n}\n\n/**\n * Returned when listing MCP tools has failed for an item.\n */\nexport interface McpListToolsFailed {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the MCP list tools item.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `mcp_list_tools.failed`.\n   */\n  type: 'mcp_list_tools.failed';\n}\n\n/**\n * Returned when listing MCP tools is in progress for an item.\n */\nexport interface McpListToolsInProgress {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the MCP list tools item.\n   */\n  item_id: string;\n\n  /**\n   * The event type, must be `mcp_list_tools.in_progress`.\n   */\n  type: 'mcp_list_tools.in_progress';\n}\n\n/**\n * Type of noise reduction. `near_field` is for close-talking microphones such as\n * headphones, `far_field` is for far-field microphones such as laptop or\n * conference room microphones.\n */\nexport type NoiseReductionType = 'near_field' | 'far_field';\n\n/**\n * **WebRTC/SIP Only:** Emit to cut off the current audio response. This will\n * trigger the server to stop generating audio and emit a\n * `output_audio_buffer.cleared` event. This event should be preceded by a\n * `response.cancel` client event to stop the generation of the current response.\n * [Learn more](https://platform.openai.com/docs/guides/realtime-conversations#client-and-server-events-for-audio-in-webrtc).\n */\nexport interface OutputAudioBufferClearEvent {\n  /**\n   * The event type, must be `output_audio_buffer.clear`.\n   */\n  type: 'output_audio_buffer.clear';\n\n  /**\n   * The unique ID of the client event used for error handling.\n   */\n  event_id?: string;\n}\n\n/**\n * Emitted at the beginning of a Response to indicate the updated rate limits. When\n * a Response is created some tokens will be \"reserved\" for the output tokens, the\n * rate limits shown here reflect that reservation, which is then adjusted\n * accordingly once the Response is completed.\n */\nexport interface RateLimitsUpdatedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * List of rate limit information.\n   */\n  rate_limits: Array<RateLimitsUpdatedEvent.RateLimit>;\n\n  /**\n   * The event type, must be `rate_limits.updated`.\n   */\n  type: 'rate_limits.updated';\n}\n\nexport namespace RateLimitsUpdatedEvent {\n  export interface RateLimit {\n    /**\n     * The maximum allowed value for the rate limit.\n     */\n    limit?: number;\n\n    /**\n     * The name of the rate limit (`requests`, `tokens`).\n     */\n    name?: 'requests' | 'tokens';\n\n    /**\n     * The remaining value before the limit is reached.\n     */\n    remaining?: number;\n\n    /**\n     * Seconds until the rate limit resets.\n     */\n    reset_seconds?: number;\n  }\n}\n\n/**\n * Configuration for input and output audio.\n */\nexport interface RealtimeAudioConfig {\n  input?: RealtimeAudioConfigInput;\n\n  output?: RealtimeAudioConfigOutput;\n}\n\nexport interface RealtimeAudioConfigInput {\n  /**\n   * The format of the input audio.\n   */\n  format?: RealtimeAudioFormats;\n\n  /**\n   * Configuration for input audio noise reduction. This can be set to `null` to turn\n   * off. Noise reduction filters audio added to the input audio buffer before it is\n   * sent to VAD and the model. Filtering the audio can improve VAD and turn\n   * detection accuracy (reducing false positives) and model performance by improving\n   * perception of the input audio.\n   */\n  noise_reduction?: RealtimeAudioConfigInput.NoiseReduction;\n\n  /**\n   * Configuration for input audio transcription, defaults to off and can be set to\n   * `null` to turn off once on. Input audio transcription is not native to the\n   * model, since the model consumes audio directly. Transcription runs\n   * asynchronously through\n   * [the /audio/transcriptions endpoint](https://platform.openai.com/docs/api-reference/audio/createTranscription)\n   * and should be treated as guidance of input audio content rather than precisely\n   * what the model heard. The client can optionally set the language and prompt for\n   * transcription, these offer additional guidance to the transcription service.\n   */\n  transcription?: AudioTranscription;\n\n  /**\n   * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n   * set to `null` to turn off, in which case the client must manually trigger model\n   * response.\n   *\n   * Server VAD means that the model will detect the start and end of speech based on\n   * audio volume and respond at the end of user speech.\n   *\n   * Semantic VAD is more advanced and uses a turn detection model (in conjunction\n   * with VAD) to semantically estimate whether the user has finished speaking, then\n   * dynamically sets a timeout based on this probability. For example, if user audio\n   * trails off with \"uhhm\", the model will score a low probability of turn end and\n   * wait longer for the user to continue speaking. This can be useful for more\n   * natural conversations, but may have a higher latency.\n   *\n   * For `gpt-realtime-whisper` transcription sessions, turn detection must be set to\n   * `null`; VAD is not supported.\n   */\n  turn_detection?: RealtimeAudioInputTurnDetection | null;\n}\n\nexport namespace RealtimeAudioConfigInput {\n  /**\n   * Configuration for input audio noise reduction. This can be set to `null` to turn\n   * off. Noise reduction filters audio added to the input audio buffer before it is\n   * sent to VAD and the model. Filtering the audio can improve VAD and turn\n   * detection accuracy (reducing false positives) and model performance by improving\n   * perception of the input audio.\n   */\n  export interface NoiseReduction {\n    /**\n     * Type of noise reduction. `near_field` is for close-talking microphones such as\n     * headphones, `far_field` is for far-field microphones such as laptop or\n     * conference room microphones.\n     */\n    type?: RealtimeAPI.NoiseReductionType;\n  }\n}\n\nexport interface RealtimeAudioConfigOutput {\n  /**\n   * The format of the output audio.\n   */\n  format?: RealtimeAudioFormats;\n\n  /**\n   * The speed of the model's spoken response as a multiple of the original speed.\n   * 1.0 is the default speed. 0.25 is the minimum speed. 1.5 is the maximum speed.\n   * This value can only be changed in between model turns, not while a response is\n   * in progress.\n   *\n   * This parameter is a post-processing adjustment to the audio after it is\n   * generated, it's also possible to prompt the model to speak faster or slower.\n   */\n  speed?: number;\n\n  /**\n   * The voice the model uses to respond. Supported built-in voices are `alloy`,\n   * `ash`, `ballad`, `coral`, `echo`, `sage`, `shimmer`, `verse`, `marin`, and\n   * `cedar`. You may also provide a custom voice object with an `id`, for example\n   * `{ \"id\": \"voice_1234\" }`. Voice cannot be changed during the session once the\n   * model has responded with audio at least once. We recommend `marin` and `cedar`\n   * for best quality.\n   */\n  voice?:\n    | string\n    | 'alloy'\n    | 'ash'\n    | 'ballad'\n    | 'coral'\n    | 'echo'\n    | 'sage'\n    | 'shimmer'\n    | 'verse'\n    | 'marin'\n    | 'cedar'\n    | RealtimeAudioConfigOutput.ID;\n}\n\nexport namespace RealtimeAudioConfigOutput {\n  /**\n   * Custom voice reference.\n   */\n  export interface ID {\n    /**\n     * The custom voice ID, e.g. `voice_1234`.\n     */\n    id: string;\n  }\n}\n\n/**\n * The PCM audio format. Only a 24kHz sample rate is supported.\n */\nexport type RealtimeAudioFormats =\n  | RealtimeAudioFormats.AudioPCM\n  | RealtimeAudioFormats.AudioPCMU\n  | RealtimeAudioFormats.AudioPCMA;\n\nexport namespace RealtimeAudioFormats {\n  /**\n   * The PCM audio format. Only a 24kHz sample rate is supported.\n   */\n  export interface AudioPCM {\n    /**\n     * The sample rate of the audio. Always `24000`.\n     */\n    rate?: 24000;\n\n    /**\n     * The audio format. Always `audio/pcm`.\n     */\n    type?: 'audio/pcm';\n  }\n\n  /**\n   * The G.711 \u03BC-law format.\n   */\n  export interface AudioPCMU {\n    /**\n     * The audio format. Always `audio/pcmu`.\n     */\n    type?: 'audio/pcmu';\n  }\n\n  /**\n   * The G.711 A-law format.\n   */\n  export interface AudioPCMA {\n    /**\n     * The audio format. Always `audio/pcma`.\n     */\n    type?: 'audio/pcma';\n  }\n}\n\n/**\n * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n * set to `null` to turn off, in which case the client must manually trigger model\n * response.\n *\n * Server VAD means that the model will detect the start and end of speech based on\n * audio volume and respond at the end of user speech.\n *\n * Semantic VAD is more advanced and uses a turn detection model (in conjunction\n * with VAD) to semantically estimate whether the user has finished speaking, then\n * dynamically sets a timeout based on this probability. For example, if user audio\n * trails off with \"uhhm\", the model will score a low probability of turn end and\n * wait longer for the user to continue speaking. This can be useful for more\n * natural conversations, but may have a higher latency.\n *\n * For `gpt-realtime-whisper` transcription sessions, turn detection must be set to\n * `null`; VAD is not supported.\n */\nexport type RealtimeAudioInputTurnDetection =\n  | RealtimeAudioInputTurnDetection.ServerVad\n  | RealtimeAudioInputTurnDetection.SemanticVad;\n\nexport namespace RealtimeAudioInputTurnDetection {\n  /**\n   * Server-side voice activity detection (VAD) which flips on when user speech is\n   * detected and off after a period of silence.\n   */\n  export interface ServerVad {\n    /**\n     * Type of turn detection, `server_vad` to turn on simple Server VAD.\n     */\n    type: 'server_vad';\n\n    /**\n     * Whether or not to automatically generate a response when a VAD stop event\n     * occurs. If `interrupt_response` is set to `false` this may fail to create a\n     * response if the model is already responding.\n     *\n     * If both `create_response` and `interrupt_response` are set to `false`, the model\n     * will never respond automatically but VAD events will still be emitted.\n     */\n    create_response?: boolean;\n\n    /**\n     * Optional timeout after which a model response will be triggered automatically.\n     * This is useful for situations in which a long pause from the user is unexpected,\n     * such as a phone call. The model will effectively prompt the user to continue the\n     * conversation based on the current context.\n     *\n     * The timeout value will be applied after the last model response's audio has\n     * finished playing, i.e. it's set to the `response.done` time plus audio playback\n     * duration.\n     *\n     * An `input_audio_buffer.timeout_triggered` event (plus events associated with the\n     * Response) will be emitted when the timeout is reached. Idle timeout is currently\n     * only supported for `server_vad` mode.\n     */\n    idle_timeout_ms?: number | null;\n\n    /**\n     * Whether or not to automatically interrupt (cancel) any ongoing response with\n     * output to the default conversation (i.e. `conversation` of `auto`) when a VAD\n     * start event occurs. If `true` then the response will be cancelled, otherwise it\n     * will continue until complete.\n     *\n     * If both `create_response` and `interrupt_response` are set to `false`, the model\n     * will never respond automatically but VAD events will still be emitted.\n     */\n    interrupt_response?: boolean;\n\n    /**\n     * Used only for `server_vad` mode. Amount of audio to include before the VAD\n     * detected speech (in milliseconds). Defaults to 300ms.\n     */\n    prefix_padding_ms?: number;\n\n    /**\n     * Used only for `server_vad` mode. Duration of silence to detect speech stop (in\n     * milliseconds). Defaults to 500ms. With shorter values the model will respond\n     * more quickly, but may jump in on short pauses from the user.\n     */\n    silence_duration_ms?: number;\n\n    /**\n     * Used only for `server_vad` mode. Activation threshold for VAD (0.0 to 1.0), this\n     * defaults to 0.5. A higher threshold will require louder audio to activate the\n     * model, and thus might perform better in noisy environments.\n     */\n    threshold?: number;\n  }\n\n  /**\n   * Server-side semantic turn detection which uses a model to determine when the\n   * user has finished speaking.\n   */\n  export interface SemanticVad {\n    /**\n     * Type of turn detection, `semantic_vad` to turn on Semantic VAD.\n     */\n    type: 'semantic_vad';\n\n    /**\n     * Whether or not to automatically generate a response when a VAD stop event\n     * occurs.\n     */\n    create_response?: boolean;\n\n    /**\n     * Used only for `semantic_vad` mode. The eagerness of the model to respond. `low`\n     * will wait longer for the user to continue speaking, `high` will respond more\n     * quickly. `auto` is the default and is equivalent to `medium`. `low`, `medium`,\n     * and `high` have max timeouts of 8s, 4s, and 2s respectively.\n     */\n    eagerness?: 'low' | 'medium' | 'high' | 'auto';\n\n    /**\n     * Whether or not to automatically interrupt any ongoing response with output to\n     * the default conversation (i.e. `conversation` of `auto`) when a VAD start event\n     * occurs.\n     */\n    interrupt_response?: boolean;\n  }\n}\n\n/**\n * A realtime client event.\n */\nexport type RealtimeClientEvent =\n  | ConversationItemCreateEvent\n  | ConversationItemDeleteEvent\n  | ConversationItemRetrieveEvent\n  | ConversationItemTruncateEvent\n  | InputAudioBufferAppendEvent\n  | InputAudioBufferClearEvent\n  | OutputAudioBufferClearEvent\n  | InputAudioBufferCommitEvent\n  | ResponseCancelEvent\n  | ResponseCreateEvent\n  | SessionUpdateEvent;\n\n/**\n * An assistant message item in a Realtime conversation.\n */\nexport interface RealtimeConversationItemAssistantMessage {\n  /**\n   * The content of the message.\n   */\n  content: Array<RealtimeConversationItemAssistantMessage.Content>;\n\n  /**\n   * The role of the message sender. Always `assistant`.\n   */\n  role: 'assistant';\n\n  /**\n   * The type of the item. Always `message`.\n   */\n  type: 'message';\n\n  /**\n   * The unique ID of the item. This may be provided by the client or generated by\n   * the server.\n   */\n  id?: string;\n\n  /**\n   * Identifier for the API object being returned - always `realtime.item`. Optional\n   * when creating a new item.\n   */\n  object?: 'realtime.item';\n\n  /**\n   * The status of the item. Has no effect on the conversation.\n   */\n  status?: 'completed' | 'incomplete' | 'in_progress';\n}\n\nexport namespace RealtimeConversationItemAssistantMessage {\n  export interface Content {\n    /**\n     * Base64-encoded audio bytes, these will be parsed as the format specified in the\n     * session output audio type configuration. This defaults to PCM 16-bit 24kHz mono\n     * if not specified.\n     */\n    audio?: string;\n\n    /**\n     * The text content.\n     */\n    text?: string;\n\n    /**\n     * The transcript of the audio content, this will always be present if the output\n     * type is `audio`.\n     */\n    transcript?: string;\n\n    /**\n     * The content type, `output_text` or `output_audio` depending on the session\n     * `output_modalities` configuration.\n     */\n    type?: 'output_text' | 'output_audio';\n  }\n}\n\n/**\n * A function call item in a Realtime conversation.\n */\nexport interface RealtimeConversationItemFunctionCall {\n  /**\n   * The arguments of the function call. This is a JSON-encoded string representing\n   * the arguments passed to the function, for example\n   * `{\"arg1\": \"value1\", \"arg2\": 42}`.\n   */\n  arguments: string;\n\n  /**\n   * The name of the function being called.\n   */\n  name: string;\n\n  /**\n   * The type of the item. Always `function_call`.\n   */\n  type: 'function_call';\n\n  /**\n   * The unique ID of the item. This may be provided by the client or generated by\n   * the server.\n   */\n  id?: string;\n\n  /**\n   * The ID of the function call.\n   */\n  call_id?: string;\n\n  /**\n   * Identifier for the API object being returned - always `realtime.item`. Optional\n   * when creating a new item.\n   */\n  object?: 'realtime.item';\n\n  /**\n   * The status of the item. Has no effect on the conversation.\n   */\n  status?: 'completed' | 'incomplete' | 'in_progress';\n}\n\n/**\n * A function call output item in a Realtime conversation.\n */\nexport interface RealtimeConversationItemFunctionCallOutput {\n  /**\n   * The ID of the function call this output is for.\n   */\n  call_id: string;\n\n  /**\n   * The output of the function call, this is free text and can contain any\n   * information or simply be empty.\n   */\n  output: string;\n\n  /**\n   * The type of the item. Always `function_call_output`.\n   */\n  type: 'function_call_output';\n\n  /**\n   * The unique ID of the item. This may be provided by the client or generated by\n   * the server.\n   */\n  id?: string;\n\n  /**\n   * Identifier for the API object being returned - always `realtime.item`. Optional\n   * when creating a new item.\n   */\n  object?: 'realtime.item';\n\n  /**\n   * The status of the item. Has no effect on the conversation.\n   */\n  status?: 'completed' | 'incomplete' | 'in_progress';\n}\n\n/**\n * A system message in a Realtime conversation can be used to provide additional\n * context or instructions to the model. This is similar but distinct from the\n * instruction prompt provided at the start of a conversation, as system messages\n * can be added at any point in the conversation. For major changes to the\n * conversation's behavior, use instructions, but for smaller updates (e.g. \"the\n * user is now asking about a different topic\"), use system messages.\n */\nexport interface RealtimeConversationItemSystemMessage {\n  /**\n   * The content of the message.\n   */\n  content: Array<RealtimeConversationItemSystemMessage.Content>;\n\n  /**\n   * The role of the message sender. Always `system`.\n   */\n  role: 'system';\n\n  /**\n   * The type of the item. Always `message`.\n   */\n  type: 'message';\n\n  /**\n   * The unique ID of the item. This may be provided by the client or generated by\n   * the server.\n   */\n  id?: string;\n\n  /**\n   * Identifier for the API object being returned - always `realtime.item`. Optional\n   * when creating a new item.\n   */\n  object?: 'realtime.item';\n\n  /**\n   * The status of the item. Has no effect on the conversation.\n   */\n  status?: 'completed' | 'incomplete' | 'in_progress';\n}\n\nexport namespace RealtimeConversationItemSystemMessage {\n  export interface Content {\n    /**\n     * The text content.\n     */\n    text?: string;\n\n    /**\n     * The content type. Always `input_text` for system messages.\n     */\n    type?: 'input_text';\n  }\n}\n\n/**\n * A user message item in a Realtime conversation.\n */\nexport interface RealtimeConversationItemUserMessage {\n  /**\n   * The content of the message.\n   */\n  content: Array<RealtimeConversationItemUserMessage.Content>;\n\n  /**\n   * The role of the message sender. Always `user`.\n   */\n  role: 'user';\n\n  /**\n   * The type of the item. Always `message`.\n   */\n  type: 'message';\n\n  /**\n   * The unique ID of the item. This may be provided by the client or generated by\n   * the server.\n   */\n  id?: string;\n\n  /**\n   * Identifier for the API object being returned - always `realtime.item`. Optional\n   * when creating a new item.\n   */\n  object?: 'realtime.item';\n\n  /**\n   * The status of the item. Has no effect on the conversation.\n   */\n  status?: 'completed' | 'incomplete' | 'in_progress';\n}\n\nexport namespace RealtimeConversationItemUserMessage {\n  export interface Content {\n    /**\n     * Base64-encoded audio bytes (for `input_audio`), these will be parsed as the\n     * format specified in the session input audio type configuration. This defaults to\n     * PCM 16-bit 24kHz mono if not specified.\n     */\n    audio?: string;\n\n    /**\n     * The detail level of the image (for `input_image`). `auto` will default to\n     * `high`.\n     */\n    detail?: 'auto' | 'low' | 'high';\n\n    /**\n     * Base64-encoded image bytes (for `input_image`) as a data URI. For example\n     * `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...`. Supported formats are PNG\n     * and JPEG.\n     */\n    image_url?: string;\n\n    /**\n     * The text content (for `input_text`).\n     */\n    text?: string;\n\n    /**\n     * Transcript of the audio (for `input_audio`). This is not sent to the model, but\n     * will be attached to the message item for reference.\n     */\n    transcript?: string;\n\n    /**\n     * The content type (`input_text`, `input_audio`, or `input_image`).\n     */\n    type?: 'input_text' | 'input_audio' | 'input_image';\n  }\n}\n\n/**\n * Details of the error.\n */\nexport interface RealtimeError {\n  /**\n   * A human-readable error message.\n   */\n  message: string;\n\n  /**\n   * The type of error (e.g., \"invalid_request_error\", \"server_error\").\n   */\n  type: string;\n\n  /**\n   * Error code, if any.\n   */\n  code?: string | null;\n\n  /**\n   * The event_id of the client event that caused the error, if applicable.\n   */\n  event_id?: string | null;\n\n  /**\n   * Parameter related to the error, if any.\n   */\n  param?: string | null;\n}\n\n/**\n * Returned when an error occurs, which could be a client problem or a server\n * problem. Most errors are recoverable and the session will stay open, we\n * recommend to implementors to monitor and log error messages by default.\n */\nexport interface RealtimeErrorEvent {\n  /**\n   * Details of the error.\n   */\n  error: RealtimeError;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The event type, must be `error`.\n   */\n  type: 'error';\n}\n\nexport interface RealtimeFunctionTool {\n  /**\n   * The description of the function, including guidance on when and how to call it,\n   * and guidance about what to tell the user when calling (if anything).\n   */\n  description?: string;\n\n  /**\n   * The name of the function.\n   */\n  name?: string;\n\n  /**\n   * Parameters of the function in JSON Schema.\n   */\n  parameters?: unknown;\n\n  /**\n   * The type of the tool, i.e. `function`.\n   */\n  type?: 'function';\n}\n\n/**\n * A Realtime item requesting human approval of a tool invocation.\n */\nexport interface RealtimeMcpApprovalRequest {\n  /**\n   * The unique ID of the approval request.\n   */\n  id: string;\n\n  /**\n   * A JSON string of arguments for the tool.\n   */\n  arguments: string;\n\n  /**\n   * The name of the tool to run.\n   */\n  name: string;\n\n  /**\n   * The label of the MCP server making the request.\n   */\n  server_label: string;\n\n  /**\n   * The type of the item. Always `mcp_approval_request`.\n   */\n  type: 'mcp_approval_request';\n}\n\n/**\n * A Realtime item responding to an MCP approval request.\n */\nexport interface RealtimeMcpApprovalResponse {\n  /**\n   * The unique ID of the approval response.\n   */\n  id: string;\n\n  /**\n   * The ID of the approval request being answered.\n   */\n  approval_request_id: string;\n\n  /**\n   * Whether the request was approved.\n   */\n  approve: boolean;\n\n  /**\n   * The type of the item. Always `mcp_approval_response`.\n   */\n  type: 'mcp_approval_response';\n\n  /**\n   * Optional reason for the decision.\n   */\n  reason?: string | null;\n}\n\n/**\n * A Realtime item listing tools available on an MCP server.\n */\nexport interface RealtimeMcpListTools {\n  /**\n   * The label of the MCP server.\n   */\n  server_label: string;\n\n  /**\n   * The tools available on the server.\n   */\n  tools: Array<RealtimeMcpListTools.Tool>;\n\n  /**\n   * The type of the item. Always `mcp_list_tools`.\n   */\n  type: 'mcp_list_tools';\n\n  /**\n   * The unique ID of the list.\n   */\n  id?: string;\n}\n\nexport namespace RealtimeMcpListTools {\n  /**\n   * A tool available on an MCP server.\n   */\n  export interface Tool {\n    /**\n     * The JSON schema describing the tool's input.\n     */\n    input_schema: unknown;\n\n    /**\n     * The name of the tool.\n     */\n    name: string;\n\n    /**\n     * Additional annotations about the tool.\n     */\n    annotations?: unknown | null;\n\n    /**\n     * The description of the tool.\n     */\n    description?: string | null;\n  }\n}\n\nexport interface RealtimeMcpProtocolError {\n  code: number;\n\n  message: string;\n\n  type: 'protocol_error';\n}\n\n/**\n * A Realtime item representing an invocation of a tool on an MCP server.\n */\nexport interface RealtimeMcpToolCall {\n  /**\n   * The unique ID of the tool call.\n   */\n  id: string;\n\n  /**\n   * A JSON string of the arguments passed to the tool.\n   */\n  arguments: string;\n\n  /**\n   * The name of the tool that was run.\n   */\n  name: string;\n\n  /**\n   * The label of the MCP server running the tool.\n   */\n  server_label: string;\n\n  /**\n   * The type of the item. Always `mcp_call`.\n   */\n  type: 'mcp_call';\n\n  /**\n   * The ID of an associated approval request, if any.\n   */\n  approval_request_id?: string | null;\n\n  /**\n   * The error from the tool call, if any.\n   */\n  error?: RealtimeMcpProtocolError | RealtimeMcpToolExecutionError | RealtimeMcphttpError | null;\n\n  /**\n   * The output from the tool call.\n   */\n  output?: string | null;\n}\n\nexport interface RealtimeMcpToolExecutionError {\n  message: string;\n\n  type: 'tool_execution_error';\n}\n\nexport interface RealtimeMcphttpError {\n  code: number;\n\n  message: string;\n\n  type: 'http_error';\n}\n\n/**\n * Configuration for reasoning-capable Realtime models such as `gpt-realtime-2`.\n */\nexport interface RealtimeReasoning {\n  /**\n   * Constrains effort on reasoning for reasoning-capable Realtime models such as\n   * `gpt-realtime-2`.\n   */\n  effort?: RealtimeReasoningEffort;\n}\n\n/**\n * Constrains effort on reasoning for reasoning-capable Realtime models such as\n * `gpt-realtime-2`.\n */\nexport type RealtimeReasoningEffort = 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';\n\n/**\n * The response resource.\n */\nexport interface RealtimeResponse {\n  /**\n   * The unique ID of the response, will look like `resp_1234`.\n   */\n  id?: string;\n\n  /**\n   * Configuration for audio output.\n   */\n  audio?: RealtimeResponse.Audio;\n\n  /**\n   * Which conversation the response is added to, determined by the `conversation`\n   * field in the `response.create` event. If `auto`, the response will be added to\n   * the default conversation and the value of `conversation_id` will be an id like\n   * `conv_1234`. If `none`, the response will not be added to any conversation and\n   * the value of `conversation_id` will be `null`. If responses are being triggered\n   * automatically by VAD the response will be added to the default conversation\n   */\n  conversation_id?: string;\n\n  /**\n   * Maximum number of output tokens for a single assistant response, inclusive of\n   * tool calls, that was used in this response.\n   */\n  max_output_tokens?: number | 'inf';\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * The object type, must be `realtime.response`.\n   */\n  object?: 'realtime.response';\n\n  /**\n   * The list of output items generated by the response.\n   */\n  output?: Array<ConversationItem>;\n\n  /**\n   * The set of modalities the model used to respond, currently the only possible\n   * values are `[\\\"audio\\\"]`, `[\\\"text\\\"]`. Audio output always include a text\n   * transcript. Setting the output to mode `text` will disable audio output from the\n   * model.\n   */\n  output_modalities?: Array<'text' | 'audio'>;\n\n  /**\n   * The final status of the response (`completed`, `cancelled`, `failed`, or\n   * `incomplete`, `in_progress`).\n   */\n  status?: 'completed' | 'cancelled' | 'failed' | 'incomplete' | 'in_progress';\n\n  /**\n   * Additional details about the status.\n   */\n  status_details?: RealtimeResponseStatus;\n\n  /**\n   * Usage statistics for the Response, this will correspond to billing. A Realtime\n   * API session will maintain a conversation context and append new Items to the\n   * Conversation, thus output from previous turns (text and audio tokens) will\n   * become the input for later turns.\n   */\n  usage?: RealtimeResponseUsage;\n}\n\nexport namespace RealtimeResponse {\n  /**\n   * Configuration for audio output.\n   */\n  export interface Audio {\n    output?: Audio.Output;\n  }\n\n  export namespace Audio {\n    export interface Output {\n      /**\n       * The format of the output audio.\n       */\n      format?: RealtimeAPI.RealtimeAudioFormats;\n\n      /**\n       * The voice the model uses to respond. Voice cannot be changed during the session\n       * once the model has responded with audio at least once. Current voice options are\n       * `alloy`, `ash`, `ballad`, `coral`, `echo`, `sage`, `shimmer`, `verse`, `marin`,\n       * and `cedar`. We recommend `marin` and `cedar` for best quality.\n       */\n      voice?:\n        | (string & {})\n        | 'alloy'\n        | 'ash'\n        | 'ballad'\n        | 'coral'\n        | 'echo'\n        | 'sage'\n        | 'shimmer'\n        | 'verse'\n        | 'marin'\n        | 'cedar';\n    }\n  }\n}\n\n/**\n * Configuration for audio input and output.\n */\nexport interface RealtimeResponseCreateAudioOutput {\n  output?: RealtimeResponseCreateAudioOutput.Output;\n}\n\nexport namespace RealtimeResponseCreateAudioOutput {\n  export interface Output {\n    /**\n     * The format of the output audio.\n     */\n    format?: RealtimeAPI.RealtimeAudioFormats;\n\n    /**\n     * The voice the model uses to respond. Supported built-in voices are `alloy`,\n     * `ash`, `ballad`, `coral`, `echo`, `sage`, `shimmer`, `verse`, `marin`, and\n     * `cedar`. You may also provide a custom voice object with an `id`, for example\n     * `{ \"id\": \"voice_1234\" }`. Voice cannot be changed during the session once the\n     * model has responded with audio at least once. We recommend `marin` and `cedar`\n     * for best quality.\n     */\n    voice?:\n      | string\n      | 'alloy'\n      | 'ash'\n      | 'ballad'\n      | 'coral'\n      | 'echo'\n      | 'sage'\n      | 'shimmer'\n      | 'verse'\n      | 'marin'\n      | 'cedar'\n      | Output.ID;\n  }\n\n  export namespace Output {\n    /**\n     * Custom voice reference.\n     */\n    export interface ID {\n      /**\n       * The custom voice ID, e.g. `voice_1234`.\n       */\n      id: string;\n    }\n  }\n}\n\n/**\n * Give the model access to additional tools via remote Model Context Protocol\n * (MCP) servers.\n * [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp).\n */\nexport interface RealtimeResponseCreateMcpTool {\n  /**\n   * A label for this MCP server, used to identify it in tool calls.\n   */\n  server_label: string;\n\n  /**\n   * The type of the MCP tool. Always `mcp`.\n   */\n  type: 'mcp';\n\n  /**\n   * List of allowed tool names or a filter object.\n   */\n  allowed_tools?: Array<string> | RealtimeResponseCreateMcpTool.McpToolFilter | null;\n\n  /**\n   * An OAuth access token that can be used with a remote MCP server, either with a\n   * custom MCP server URL or a service connector. Your application must handle the\n   * OAuth authorization flow and provide the token here.\n   */\n  authorization?: string;\n\n  /**\n   * Identifier for service connectors, like those available in ChatGPT. One of\n   * `server_url` or `connector_id` must be provided. Learn more about service\n   * connectors\n   * [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors).\n   *\n   * Currently supported `connector_id` values are:\n   *\n   * - Dropbox: `connector_dropbox`\n   * - Gmail: `connector_gmail`\n   * - Google Calendar: `connector_googlecalendar`\n   * - Google Drive: `connector_googledrive`\n   * - Microsoft Teams: `connector_microsoftteams`\n   * - Outlook Calendar: `connector_outlookcalendar`\n   * - Outlook Email: `connector_outlookemail`\n   * - SharePoint: `connector_sharepoint`\n   */\n  connector_id?:\n    | 'connector_dropbox'\n    | 'connector_gmail'\n    | 'connector_googlecalendar'\n    | 'connector_googledrive'\n    | 'connector_microsoftteams'\n    | 'connector_outlookcalendar'\n    | 'connector_outlookemail'\n    | 'connector_sharepoint';\n\n  /**\n   * Whether this MCP tool is deferred and discovered via tool search.\n   */\n  defer_loading?: boolean;\n\n  /**\n   * Optional HTTP headers to send to the MCP server. Use for authentication or other\n   * purposes.\n   */\n  headers?: { [key: string]: string } | null;\n\n  /**\n   * Specify which of the MCP server's tools require approval.\n   */\n  require_approval?: RealtimeResponseCreateMcpTool.McpToolApprovalFilter | 'always' | 'never' | null;\n\n  /**\n   * Optional description of the MCP server, used to provide more context.\n   */\n  server_description?: string;\n\n  /**\n   * The URL for the MCP server. One of `server_url` or `connector_id` must be\n   * provided.\n   */\n  server_url?: string;\n}\n\nexport namespace RealtimeResponseCreateMcpTool {\n  /**\n   * A filter object to specify which tools are allowed.\n   */\n  export interface McpToolFilter {\n    /**\n     * Indicates whether or not a tool modifies data or is read-only. If an MCP server\n     * is\n     * [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\n     * it will match this filter.\n     */\n    read_only?: boolean;\n\n    /**\n     * List of allowed tool names.\n     */\n    tool_names?: Array<string>;\n  }\n\n  /**\n   * Specify which of the MCP server's tools require approval. Can be `always`,\n   * `never`, or a filter object associated with tools that require approval.\n   */\n  export interface McpToolApprovalFilter {\n    /**\n     * A filter object to specify which tools are allowed.\n     */\n    always?: McpToolApprovalFilter.Always;\n\n    /**\n     * A filter object to specify which tools are allowed.\n     */\n    never?: McpToolApprovalFilter.Never;\n  }\n\n  export namespace McpToolApprovalFilter {\n    /**\n     * A filter object to specify which tools are allowed.\n     */\n    export interface Always {\n      /**\n       * Indicates whether or not a tool modifies data or is read-only. If an MCP server\n       * is\n       * [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\n       * it will match this filter.\n       */\n      read_only?: boolean;\n\n      /**\n       * List of allowed tool names.\n       */\n      tool_names?: Array<string>;\n    }\n\n    /**\n     * A filter object to specify which tools are allowed.\n     */\n    export interface Never {\n      /**\n       * Indicates whether or not a tool modifies data or is read-only. If an MCP server\n       * is\n       * [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\n       * it will match this filter.\n       */\n      read_only?: boolean;\n\n      /**\n       * List of allowed tool names.\n       */\n      tool_names?: Array<string>;\n    }\n  }\n}\n\n/**\n * Create a new Realtime response with these parameters\n */\nexport interface RealtimeResponseCreateParams {\n  /**\n   * Configuration for audio input and output.\n   */\n  audio?: RealtimeResponseCreateAudioOutput;\n\n  /**\n   * Controls which conversation the response is added to. Currently supports `auto`\n   * and `none`, with `auto` as the default value. The `auto` value means that the\n   * contents of the response will be added to the default conversation. Set this to\n   * `none` to create an out-of-band response which will not add items to default\n   * conversation.\n   */\n  conversation?: (string & {}) | 'auto' | 'none';\n\n  /**\n   * Input items to include in the prompt for the model. Using this field creates a\n   * new context for this Response instead of using the default conversation. An\n   * empty array `[]` will clear the context for this Response. Note that this can\n   * include references to items that previously appeared in the session using their\n   * id.\n   */\n  input?: Array<ConversationItem>;\n\n  /**\n   * The default system instructions (i.e. system message) prepended to model calls.\n   * This field allows the client to guide the model on desired responses. The model\n   * can be instructed on response content and format, (e.g. \"be extremely succinct\",\n   * \"act friendly\", \"here are examples of good responses\") and on audio behavior\n   * (e.g. \"talk quickly\", \"inject emotion into your voice\", \"laugh frequently\"). The\n   * instructions are not guaranteed to be followed by the model, but they provide\n   * guidance to the model on the desired behavior. Note that the server sets default\n   * instructions which will be used if this field is not set and are visible in the\n   * `session.created` event at the start of the session.\n   */\n  instructions?: string;\n\n  /**\n   * Maximum number of output tokens for a single assistant response, inclusive of\n   * tool calls. Provide an integer between 1 and 4096 to limit output tokens, or\n   * `inf` for the maximum available tokens for a given model. Defaults to `inf`.\n   */\n  max_output_tokens?: number | 'inf';\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * The set of modalities the model used to respond, currently the only possible\n   * values are `[\\\"audio\\\"]`, `[\\\"text\\\"]`. Audio output always include a text\n   * transcript. Setting the output to mode `text` will disable audio output from the\n   * model.\n   */\n  output_modalities?: Array<'text' | 'audio'>;\n\n  /**\n   * Whether the model may call multiple tools in parallel. Only supported by\n   * reasoning Realtime models such as `gpt-realtime-2`.\n   */\n  parallel_tool_calls?: boolean;\n\n  /**\n   * Reference to a prompt template and its variables.\n   * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts).\n   */\n  prompt?: ResponsesAPI.ResponsePrompt | null;\n\n  /**\n   * Configuration for reasoning-capable Realtime models such as `gpt-realtime-2`.\n   */\n  reasoning?: RealtimeReasoning;\n\n  /**\n   * How the model chooses tools. Provide one of the string modes or force a specific\n   * function/MCP tool.\n   */\n  tool_choice?: ResponsesAPI.ToolChoiceOptions | ResponsesAPI.ToolChoiceFunction | ResponsesAPI.ToolChoiceMcp;\n\n  /**\n   * Tools available to the model.\n   */\n  tools?: Array<RealtimeFunctionTool | RealtimeResponseCreateMcpTool>;\n}\n\n/**\n * Additional details about the status.\n */\nexport interface RealtimeResponseStatus {\n  /**\n   * A description of the error that caused the response to fail, populated when the\n   * `status` is `failed`.\n   */\n  error?: RealtimeResponseStatus.Error;\n\n  /**\n   * The reason the Response did not complete. For a `cancelled` Response, one of\n   * `turn_detected` (the server VAD detected a new start of speech) or\n   * `client_cancelled` (the client sent a cancel event). For an `incomplete`\n   * Response, one of `max_output_tokens` or `content_filter` (the server-side safety\n   * filter activated and cut off the response).\n   */\n  reason?: 'turn_detected' | 'client_cancelled' | 'max_output_tokens' | 'content_filter';\n\n  /**\n   * The type of error that caused the response to fail, corresponding with the\n   * `status` field (`completed`, `cancelled`, `incomplete`, `failed`).\n   */\n  type?: 'completed' | 'cancelled' | 'incomplete' | 'failed';\n}\n\nexport namespace RealtimeResponseStatus {\n  /**\n   * A description of the error that caused the response to fail, populated when the\n   * `status` is `failed`.\n   */\n  export interface Error {\n    /**\n     * Error code, if any.\n     */\n    code?: string;\n\n    /**\n     * The type of error.\n     */\n    type?: string;\n  }\n}\n\n/**\n * Usage statistics for the Response, this will correspond to billing. A Realtime\n * API session will maintain a conversation context and append new Items to the\n * Conversation, thus output from previous turns (text and audio tokens) will\n * become the input for later turns.\n */\nexport interface RealtimeResponseUsage {\n  /**\n   * Details about the input tokens used in the Response. Cached tokens are tokens\n   * from previous turns in the conversation that are included as context for the\n   * current response. Cached tokens here are counted as a subset of input tokens,\n   * meaning input tokens will include cached and uncached tokens.\n   */\n  input_token_details?: RealtimeResponseUsageInputTokenDetails;\n\n  /**\n   * The number of input tokens used in the Response, including text and audio\n   * tokens.\n   */\n  input_tokens?: number;\n\n  /**\n   * Details about the output tokens used in the Response.\n   */\n  output_token_details?: RealtimeResponseUsageOutputTokenDetails;\n\n  /**\n   * The number of output tokens sent in the Response, including text and audio\n   * tokens.\n   */\n  output_tokens?: number;\n\n  /**\n   * The total number of tokens in the Response including input and output text and\n   * audio tokens.\n   */\n  total_tokens?: number;\n}\n\n/**\n * Details about the input tokens used in the Response. Cached tokens are tokens\n * from previous turns in the conversation that are included as context for the\n * current response. Cached tokens here are counted as a subset of input tokens,\n * meaning input tokens will include cached and uncached tokens.\n */\nexport interface RealtimeResponseUsageInputTokenDetails {\n  /**\n   * The number of audio tokens used as input for the Response.\n   */\n  audio_tokens?: number;\n\n  /**\n   * The number of cached tokens used as input for the Response.\n   */\n  cached_tokens?: number;\n\n  /**\n   * Details about the cached tokens used as input for the Response.\n   */\n  cached_tokens_details?: RealtimeResponseUsageInputTokenDetails.CachedTokensDetails;\n\n  /**\n   * The number of image tokens used as input for the Response.\n   */\n  image_tokens?: number;\n\n  /**\n   * The number of text tokens used as input for the Response.\n   */\n  text_tokens?: number;\n}\n\nexport namespace RealtimeResponseUsageInputTokenDetails {\n  /**\n   * Details about the cached tokens used as input for the Response.\n   */\n  export interface CachedTokensDetails {\n    /**\n     * The number of cached audio tokens used as input for the Response.\n     */\n    audio_tokens?: number;\n\n    /**\n     * The number of cached image tokens used as input for the Response.\n     */\n    image_tokens?: number;\n\n    /**\n     * The number of cached text tokens used as input for the Response.\n     */\n    text_tokens?: number;\n  }\n}\n\n/**\n * Details about the output tokens used in the Response.\n */\nexport interface RealtimeResponseUsageOutputTokenDetails {\n  /**\n   * The number of audio tokens used in the Response.\n   */\n  audio_tokens?: number;\n\n  /**\n   * The number of text tokens used in the Response.\n   */\n  text_tokens?: number;\n}\n\n/**\n * A realtime server event.\n */\nexport type RealtimeServerEvent =\n  | ConversationCreatedEvent\n  | ConversationItemCreatedEvent\n  | ConversationItemDeletedEvent\n  | ConversationItemInputAudioTranscriptionCompletedEvent\n  | ConversationItemInputAudioTranscriptionDeltaEvent\n  | ConversationItemInputAudioTranscriptionFailedEvent\n  | RealtimeServerEvent.ConversationItemRetrieved\n  | ConversationItemTruncatedEvent\n  | RealtimeErrorEvent\n  | InputAudioBufferClearedEvent\n  | InputAudioBufferCommittedEvent\n  | InputAudioBufferDtmfEventReceivedEvent\n  | InputAudioBufferSpeechStartedEvent\n  | InputAudioBufferSpeechStoppedEvent\n  | RateLimitsUpdatedEvent\n  | ResponseAudioDeltaEvent\n  | ResponseAudioDoneEvent\n  | ResponseAudioTranscriptDeltaEvent\n  | ResponseAudioTranscriptDoneEvent\n  | ResponseContentPartAddedEvent\n  | ResponseContentPartDoneEvent\n  | ResponseCreatedEvent\n  | ResponseDoneEvent\n  | ResponseFunctionCallArgumentsDeltaEvent\n  | ResponseFunctionCallArgumentsDoneEvent\n  | ResponseOutputItemAddedEvent\n  | ResponseOutputItemDoneEvent\n  | ResponseTextDeltaEvent\n  | ResponseTextDoneEvent\n  | SessionCreatedEvent\n  | SessionUpdatedEvent\n  | RealtimeServerEvent.OutputAudioBufferStarted\n  | RealtimeServerEvent.OutputAudioBufferStopped\n  | RealtimeServerEvent.OutputAudioBufferCleared\n  | ConversationItemAdded\n  | ConversationItemDone\n  | InputAudioBufferTimeoutTriggered\n  | ConversationItemInputAudioTranscriptionSegment\n  | McpListToolsInProgress\n  | McpListToolsCompleted\n  | McpListToolsFailed\n  | ResponseMcpCallArgumentsDelta\n  | ResponseMcpCallArgumentsDone\n  | ResponseMcpCallInProgress\n  | ResponseMcpCallCompleted\n  | ResponseMcpCallFailed;\n\nexport namespace RealtimeServerEvent {\n  /**\n   * Returned when a conversation item is retrieved with\n   * `conversation.item.retrieve`. This is provided as a way to fetch the server's\n   * representation of an item, for example to get access to the post-processed audio\n   * data after noise cancellation and VAD. It includes the full content of the Item,\n   * including audio data.\n   */\n  export interface ConversationItemRetrieved {\n    /**\n     * The unique ID of the server event.\n     */\n    event_id: string;\n\n    /**\n     * A single item within a Realtime conversation.\n     */\n    item: RealtimeAPI.ConversationItem;\n\n    /**\n     * The event type, must be `conversation.item.retrieved`.\n     */\n    type: 'conversation.item.retrieved';\n  }\n\n  /**\n   * **WebRTC/SIP Only:** Emitted when the server begins streaming audio to the\n   * client. This event is emitted after an audio content part has been added\n   * (`response.content_part.added`) to the response.\n   * [Learn more](https://platform.openai.com/docs/guides/realtime-conversations#client-and-server-events-for-audio-in-webrtc).\n   */\n  export interface OutputAudioBufferStarted {\n    /**\n     * The unique ID of the server event.\n     */\n    event_id: string;\n\n    /**\n     * The unique ID of the response that produced the audio.\n     */\n    response_id: string;\n\n    /**\n     * The event type, must be `output_audio_buffer.started`.\n     */\n    type: 'output_audio_buffer.started';\n  }\n\n  /**\n   * **WebRTC/SIP Only:** Emitted when the output audio buffer has been completely\n   * drained on the server, and no more audio is forthcoming. This event is emitted\n   * after the full response data has been sent to the client (`response.done`).\n   * [Learn more](https://platform.openai.com/docs/guides/realtime-conversations#client-and-server-events-for-audio-in-webrtc).\n   */\n  export interface OutputAudioBufferStopped {\n    /**\n     * The unique ID of the server event.\n     */\n    event_id: string;\n\n    /**\n     * The unique ID of the response that produced the audio.\n     */\n    response_id: string;\n\n    /**\n     * The event type, must be `output_audio_buffer.stopped`.\n     */\n    type: 'output_audio_buffer.stopped';\n  }\n\n  /**\n   * **WebRTC/SIP Only:** Emitted when the output audio buffer is cleared. This\n   * happens either in VAD mode when the user has interrupted\n   * (`input_audio_buffer.speech_started`), or when the client has emitted the\n   * `output_audio_buffer.clear` event to manually cut off the current audio\n   * response.\n   * [Learn more](https://platform.openai.com/docs/guides/realtime-conversations#client-and-server-events-for-audio-in-webrtc).\n   */\n  export interface OutputAudioBufferCleared {\n    /**\n     * The unique ID of the server event.\n     */\n    event_id: string;\n\n    /**\n     * The unique ID of the response that produced the audio.\n     */\n    response_id: string;\n\n    /**\n     * The event type, must be `output_audio_buffer.cleared`.\n     */\n    type: 'output_audio_buffer.cleared';\n  }\n}\n\n/**\n * Realtime session object for the beta interface.\n */\nexport interface RealtimeSession {\n  /**\n   * Unique identifier for the session that looks like `sess_1234567890abcdef`.\n   */\n  id?: string;\n\n  /**\n   * Expiration timestamp for the session, in seconds since epoch.\n   */\n  expires_at?: number;\n\n  /**\n   * Additional fields to include in server outputs.\n   *\n   * - `item.input_audio_transcription.logprobs`: Include logprobs for input audio\n   *   transcription.\n   */\n  include?: Array<'item.input_audio_transcription.logprobs'> | null;\n\n  /**\n   * The format of input audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`. For\n   * `pcm16`, input audio must be 16-bit PCM at a 24kHz sample rate, single channel\n   * (mono), and little-endian byte order.\n   */\n  input_audio_format?: 'pcm16' | 'g711_ulaw' | 'g711_alaw';\n\n  /**\n   * Configuration for input audio noise reduction. This can be set to `null` to turn\n   * off. Noise reduction filters audio added to the input audio buffer before it is\n   * sent to VAD and the model. Filtering the audio can improve VAD and turn\n   * detection accuracy (reducing false positives) and model performance by improving\n   * perception of the input audio.\n   */\n  input_audio_noise_reduction?: RealtimeSession.InputAudioNoiseReduction;\n\n  /**\n   * Configuration for input audio transcription, defaults to off and can be set to\n   * `null` to turn off once on. Input audio transcription is not native to the\n   * model, since the model consumes audio directly. Transcription runs\n   * asynchronously through\n   * [the /audio/transcriptions endpoint](https://platform.openai.com/docs/api-reference/audio/createTranscription)\n   * and should be treated as guidance of input audio content rather than precisely\n   * what the model heard. The client can optionally set the language and prompt for\n   * transcription, these offer additional guidance to the transcription service.\n   */\n  input_audio_transcription?: AudioTranscription | null;\n\n  /**\n   * The default system instructions (i.e. system message) prepended to model calls.\n   * This field allows the client to guide the model on desired responses. The model\n   * can be instructed on response content and format, (e.g. \"be extremely succinct\",\n   * \"act friendly\", \"here are examples of good responses\") and on audio behavior\n   * (e.g. \"talk quickly\", \"inject emotion into your voice\", \"laugh frequently\"). The\n   * instructions are not guaranteed to be followed by the model, but they provide\n   * guidance to the model on the desired behavior.\n   *\n   * Note that the server sets default instructions which will be used if this field\n   * is not set and are visible in the `session.created` event at the start of the\n   * session.\n   */\n  instructions?: string;\n\n  /**\n   * Maximum number of output tokens for a single assistant response, inclusive of\n   * tool calls. Provide an integer between 1 and 4096 to limit output tokens, or\n   * `inf` for the maximum available tokens for a given model. Defaults to `inf`.\n   */\n  max_response_output_tokens?: number | 'inf';\n\n  /**\n   * The set of modalities the model can respond with. To disable audio, set this to\n   * [\"text\"].\n   */\n  modalities?: Array<'text' | 'audio'>;\n\n  /**\n   * The Realtime model used for this session.\n   */\n  model?:\n    | (string & {})\n    | 'gpt-realtime'\n    | 'gpt-realtime-1.5'\n    | 'gpt-realtime-2025-08-28'\n    | 'gpt-4o-realtime-preview'\n    | 'gpt-4o-realtime-preview-2024-10-01'\n    | 'gpt-4o-realtime-preview-2024-12-17'\n    | 'gpt-4o-realtime-preview-2025-06-03'\n    | 'gpt-4o-mini-realtime-preview'\n    | 'gpt-4o-mini-realtime-preview-2024-12-17'\n    | 'gpt-realtime-mini'\n    | 'gpt-realtime-mini-2025-10-06'\n    | 'gpt-realtime-mini-2025-12-15'\n    | 'gpt-audio-1.5'\n    | 'gpt-audio-mini'\n    | 'gpt-audio-mini-2025-10-06'\n    | 'gpt-audio-mini-2025-12-15';\n\n  /**\n   * The object type. Always `realtime.session`.\n   */\n  object?: 'realtime.session';\n\n  /**\n   * The format of output audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`.\n   * For `pcm16`, output audio is sampled at a rate of 24kHz.\n   */\n  output_audio_format?: 'pcm16' | 'g711_ulaw' | 'g711_alaw';\n\n  /**\n   * Reference to a prompt template and its variables.\n   * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts).\n   */\n  prompt?: ResponsesAPI.ResponsePrompt | null;\n\n  /**\n   * The speed of the model's spoken response. 1.0 is the default speed. 0.25 is the\n   * minimum speed. 1.5 is the maximum speed. This value can only be changed in\n   * between model turns, not while a response is in progress.\n   */\n  speed?: number;\n\n  /**\n   * Sampling temperature for the model, limited to [0.6, 1.2]. For audio models a\n   * temperature of 0.8 is highly recommended for best performance.\n   */\n  temperature?: number;\n\n  /**\n   * How the model chooses tools. Options are `auto`, `none`, `required`, or specify\n   * a function.\n   */\n  tool_choice?: string;\n\n  /**\n   * Tools (functions) available to the model.\n   */\n  tools?: Array<RealtimeFunctionTool>;\n\n  /**\n   * Configuration options for tracing. Set to null to disable tracing. Once tracing\n   * is enabled for a session, the configuration cannot be modified.\n   *\n   * `auto` will create a trace for the session with default values for the workflow\n   * name, group id, and metadata.\n   */\n  tracing?: 'auto' | RealtimeSession.TracingConfiguration | null;\n\n  /**\n   * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n   * set to `null` to turn off, in which case the client must manually trigger model\n   * response.\n   *\n   * Server VAD means that the model will detect the start and end of speech based on\n   * audio volume and respond at the end of user speech.\n   *\n   * Semantic VAD is more advanced and uses a turn detection model (in conjunction\n   * with VAD) to semantically estimate whether the user has finished speaking, then\n   * dynamically sets a timeout based on this probability. For example, if user audio\n   * trails off with \"uhhm\", the model will score a low probability of turn end and\n   * wait longer for the user to continue speaking. This can be useful for more\n   * natural conversations, but may have a higher latency.\n   *\n   * For `gpt-realtime-whisper` transcription sessions, turn detection must be set to\n   * `null`; VAD is not supported.\n   */\n  turn_detection?: RealtimeSession.ServerVad | RealtimeSession.SemanticVad | null;\n\n  /**\n   * The voice the model uses to respond. Voice cannot be changed during the session\n   * once the model has responded with audio at least once. Current voice options are\n   * `alloy`, `ash`, `ballad`, `coral`, `echo`, `sage`, `shimmer`, and `verse`.\n   */\n  voice?:\n    | (string & {})\n    | 'alloy'\n    | 'ash'\n    | 'ballad'\n    | 'coral'\n    | 'echo'\n    | 'sage'\n    | 'shimmer'\n    | 'verse'\n    | 'marin'\n    | 'cedar';\n}\n\nexport namespace RealtimeSession {\n  /**\n   * Configuration for input audio noise reduction. This can be set to `null` to turn\n   * off. Noise reduction filters audio added to the input audio buffer before it is\n   * sent to VAD and the model. Filtering the audio can improve VAD and turn\n   * detection accuracy (reducing false positives) and model performance by improving\n   * perception of the input audio.\n   */\n  export interface InputAudioNoiseReduction {\n    /**\n     * Type of noise reduction. `near_field` is for close-talking microphones such as\n     * headphones, `far_field` is for far-field microphones such as laptop or\n     * conference room microphones.\n     */\n    type?: RealtimeAPI.NoiseReductionType;\n  }\n\n  /**\n   * Granular configuration for tracing.\n   */\n  export interface TracingConfiguration {\n    /**\n     * The group id to attach to this trace to enable filtering and grouping in the\n     * traces dashboard.\n     */\n    group_id?: string;\n\n    /**\n     * The arbitrary metadata to attach to this trace to enable filtering in the traces\n     * dashboard.\n     */\n    metadata?: unknown;\n\n    /**\n     * The name of the workflow to attach to this trace. This is used to name the trace\n     * in the traces dashboard.\n     */\n    workflow_name?: string;\n  }\n\n  /**\n   * Server-side voice activity detection (VAD) which flips on when user speech is\n   * detected and off after a period of silence.\n   */\n  export interface ServerVad {\n    /**\n     * Type of turn detection, `server_vad` to turn on simple Server VAD.\n     */\n    type: 'server_vad';\n\n    /**\n     * Whether or not to automatically generate a response when a VAD stop event\n     * occurs. If `interrupt_response` is set to `false` this may fail to create a\n     * response if the model is already responding.\n     *\n     * If both `create_response` and `interrupt_response` are set to `false`, the model\n     * will never respond automatically but VAD events will still be emitted.\n     */\n    create_response?: boolean;\n\n    /**\n     * Optional timeout after which a model response will be triggered automatically.\n     * This is useful for situations in which a long pause from the user is unexpected,\n     * such as a phone call. The model will effectively prompt the user to continue the\n     * conversation based on the current context.\n     *\n     * The timeout value will be applied after the last model response's audio has\n     * finished playing, i.e. it's set to the `response.done` time plus audio playback\n     * duration.\n     *\n     * An `input_audio_buffer.timeout_triggered` event (plus events associated with the\n     * Response) will be emitted when the timeout is reached. Idle timeout is currently\n     * only supported for `server_vad` mode.\n     */\n    idle_timeout_ms?: number | null;\n\n    /**\n     * Whether or not to automatically interrupt (cancel) any ongoing response with\n     * output to the default conversation (i.e. `conversation` of `auto`) when a VAD\n     * start event occurs. If `true` then the response will be cancelled, otherwise it\n     * will continue until complete.\n     *\n     * If both `create_response` and `interrupt_response` are set to `false`, the model\n     * will never respond automatically but VAD events will still be emitted.\n     */\n    interrupt_response?: boolean;\n\n    /**\n     * Used only for `server_vad` mode. Amount of audio to include before the VAD\n     * detected speech (in milliseconds). Defaults to 300ms.\n     */\n    prefix_padding_ms?: number;\n\n    /**\n     * Used only for `server_vad` mode. Duration of silence to detect speech stop (in\n     * milliseconds). Defaults to 500ms. With shorter values the model will respond\n     * more quickly, but may jump in on short pauses from the user.\n     */\n    silence_duration_ms?: number;\n\n    /**\n     * Used only for `server_vad` mode. Activation threshold for VAD (0.0 to 1.0), this\n     * defaults to 0.5. A higher threshold will require louder audio to activate the\n     * model, and thus might perform better in noisy environments.\n     */\n    threshold?: number;\n  }\n\n  /**\n   * Server-side semantic turn detection which uses a model to determine when the\n   * user has finished speaking.\n   */\n  export interface SemanticVad {\n    /**\n     * Type of turn detection, `semantic_vad` to turn on Semantic VAD.\n     */\n    type: 'semantic_vad';\n\n    /**\n     * Whether or not to automatically generate a response when a VAD stop event\n     * occurs.\n     */\n    create_response?: boolean;\n\n    /**\n     * Used only for `semantic_vad` mode. The eagerness of the model to respond. `low`\n     * will wait longer for the user to continue speaking, `high` will respond more\n     * quickly. `auto` is the default and is equivalent to `medium`. `low`, `medium`,\n     * and `high` have max timeouts of 8s, 4s, and 2s respectively.\n     */\n    eagerness?: 'low' | 'medium' | 'high' | 'auto';\n\n    /**\n     * Whether or not to automatically interrupt any ongoing response with output to\n     * the default conversation (i.e. `conversation` of `auto`) when a VAD start event\n     * occurs.\n     */\n    interrupt_response?: boolean;\n  }\n}\n\n/**\n * Realtime session object configuration.\n */\nexport interface RealtimeSessionCreateRequest {\n  /**\n   * The type of session to create. Always `realtime` for the Realtime API.\n   */\n  type: 'realtime';\n\n  /**\n   * Configuration for input and output audio.\n   */\n  audio?: RealtimeAudioConfig;\n\n  /**\n   * Additional fields to include in server outputs.\n   *\n   * `item.input_audio_transcription.logprobs`: Include logprobs for input audio\n   * transcription.\n   */\n  include?: Array<'item.input_audio_transcription.logprobs'>;\n\n  /**\n   * The default system instructions (i.e. system message) prepended to model calls.\n   * This field allows the client to guide the model on desired responses. The model\n   * can be instructed on response content and format, (e.g. \"be extremely succinct\",\n   * \"act friendly\", \"here are examples of good responses\") and on audio behavior\n   * (e.g. \"talk quickly\", \"inject emotion into your voice\", \"laugh frequently\"). The\n   * instructions are not guaranteed to be followed by the model, but they provide\n   * guidance to the model on the desired behavior.\n   *\n   * Note that the server sets default instructions which will be used if this field\n   * is not set and are visible in the `session.created` event at the start of the\n   * session.\n   */\n  instructions?: string;\n\n  /**\n   * Maximum number of output tokens for a single assistant response, inclusive of\n   * tool calls. Provide an integer between 1 and 4096 to limit output tokens, or\n   * `inf` for the maximum available tokens for a given model. Defaults to `inf`.\n   */\n  max_output_tokens?: number | 'inf';\n\n  /**\n   * The Realtime model used for this session.\n   */\n  model?:\n    | (string & {})\n    | 'gpt-realtime'\n    | 'gpt-realtime-1.5'\n    | 'gpt-realtime-2'\n    | 'gpt-realtime-2025-08-28'\n    | 'gpt-4o-realtime-preview'\n    | 'gpt-4o-realtime-preview-2024-10-01'\n    | 'gpt-4o-realtime-preview-2024-12-17'\n    | 'gpt-4o-realtime-preview-2025-06-03'\n    | 'gpt-4o-mini-realtime-preview'\n    | 'gpt-4o-mini-realtime-preview-2024-12-17'\n    | 'gpt-realtime-mini'\n    | 'gpt-realtime-mini-2025-10-06'\n    | 'gpt-realtime-mini-2025-12-15'\n    | 'gpt-audio-1.5'\n    | 'gpt-audio-mini'\n    | 'gpt-audio-mini-2025-10-06'\n    | 'gpt-audio-mini-2025-12-15';\n\n  /**\n   * The set of modalities the model can respond with. It defaults to `[\"audio\"]`,\n   * indicating that the model will respond with audio plus a transcript. `[\"text\"]`\n   * can be used to make the model respond with text only. It is not possible to\n   * request both `text` and `audio` at the same time.\n   */\n  output_modalities?: Array<'text' | 'audio'>;\n\n  /**\n   * Whether the model may call multiple tools in parallel. Only supported by\n   * reasoning Realtime models such as `gpt-realtime-2`.\n   */\n  parallel_tool_calls?: boolean;\n\n  /**\n   * Reference to a prompt template and its variables.\n   * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts).\n   */\n  prompt?: ResponsesAPI.ResponsePrompt | null;\n\n  /**\n   * Configuration for reasoning-capable Realtime models such as `gpt-realtime-2`.\n   */\n  reasoning?: RealtimeReasoning;\n\n  /**\n   * How the model chooses tools. Provide one of the string modes or force a specific\n   * function/MCP tool.\n   */\n  tool_choice?: RealtimeToolChoiceConfig;\n\n  /**\n   * Tools available to the model.\n   */\n  tools?: RealtimeToolsConfig;\n\n  /**\n   * Realtime API can write session traces to the\n   * [Traces Dashboard](https://platform.openai.com/logs?api=traces). Set to null to\n   * disable tracing. Once tracing is enabled for a session, the configuration cannot\n   * be modified.\n   *\n   * `auto` will create a trace for the session with default values for the workflow\n   * name, group id, and metadata.\n   */\n  tracing?: RealtimeTracingConfig | null;\n\n  /**\n   * When the number of tokens in a conversation exceeds the model's input token\n   * limit, the conversation be truncated, meaning messages (starting from the\n   * oldest) will not be included in the model's context. A 32k context model with\n   * 4,096 max output tokens can only include 28,224 tokens in the context before\n   * truncation occurs.\n   *\n   * Clients can configure truncation behavior to truncate with a lower max token\n   * limit, which is an effective way to control token usage and cost.\n   *\n   * Truncation will reduce the number of cached tokens on the next turn (busting the\n   * cache), since messages are dropped from the beginning of the context. However,\n   * clients can also configure truncation to retain messages up to a fraction of the\n   * maximum context size, which will reduce the need for future truncations and thus\n   * improve the cache rate.\n   *\n   * Truncation can be disabled entirely, which means the server will never truncate\n   * but would instead return an error if the conversation exceeds the model's input\n   * token limit.\n   */\n  truncation?: RealtimeTruncation;\n}\n\n/**\n * How the model chooses tools. Provide one of the string modes or force a specific\n * function/MCP tool.\n */\nexport type RealtimeToolChoiceConfig =\n  | ResponsesAPI.ToolChoiceOptions\n  | ResponsesAPI.ToolChoiceFunction\n  | ResponsesAPI.ToolChoiceMcp;\n\n/**\n * Tools available to the model.\n */\nexport type RealtimeToolsConfig = Array<RealtimeToolsConfigUnion>;\n\n/**\n * Give the model access to additional tools via remote Model Context Protocol\n * (MCP) servers.\n * [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp).\n */\nexport type RealtimeToolsConfigUnion = RealtimeFunctionTool | RealtimeToolsConfigUnion.Mcp;\n\nexport namespace RealtimeToolsConfigUnion {\n  /**\n   * Give the model access to additional tools via remote Model Context Protocol\n   * (MCP) servers.\n   * [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp).\n   */\n  export interface Mcp {\n    /**\n     * A label for this MCP server, used to identify it in tool calls.\n     */\n    server_label: string;\n\n    /**\n     * The type of the MCP tool. Always `mcp`.\n     */\n    type: 'mcp';\n\n    /**\n     * List of allowed tool names or a filter object.\n     */\n    allowed_tools?: Array<string> | Mcp.McpToolFilter | null;\n\n    /**\n     * An OAuth access token that can be used with a remote MCP server, either with a\n     * custom MCP server URL or a service connector. Your application must handle the\n     * OAuth authorization flow and provide the token here.\n     */\n    authorization?: string;\n\n    /**\n     * Identifier for service connectors, like those available in ChatGPT. One of\n     * `server_url` or `connector_id` must be provided. Learn more about service\n     * connectors\n     * [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors).\n     *\n     * Currently supported `connector_id` values are:\n     *\n     * - Dropbox: `connector_dropbox`\n     * - Gmail: `connector_gmail`\n     * - Google Calendar: `connector_googlecalendar`\n     * - Google Drive: `connector_googledrive`\n     * - Microsoft Teams: `connector_microsoftteams`\n     * - Outlook Calendar: `connector_outlookcalendar`\n     * - Outlook Email: `connector_outlookemail`\n     * - SharePoint: `connector_sharepoint`\n     */\n    connector_id?:\n      | 'connector_dropbox'\n      | 'connector_gmail'\n      | 'connector_googlecalendar'\n      | 'connector_googledrive'\n      | 'connector_microsoftteams'\n      | 'connector_outlookcalendar'\n      | 'connector_outlookemail'\n      | 'connector_sharepoint';\n\n    /**\n     * Whether this MCP tool is deferred and discovered via tool search.\n     */\n    defer_loading?: boolean;\n\n    /**\n     * Optional HTTP headers to send to the MCP server. Use for authentication or other\n     * purposes.\n     */\n    headers?: { [key: string]: string } | null;\n\n    /**\n     * Specify which of the MCP server's tools require approval.\n     */\n    require_approval?: Mcp.McpToolApprovalFilter | 'always' | 'never' | null;\n\n    /**\n     * Optional description of the MCP server, used to provide more context.\n     */\n    server_description?: string;\n\n    /**\n     * The URL for the MCP server. One of `server_url` or `connector_id` must be\n     * provided.\n     */\n    server_url?: string;\n  }\n\n  export namespace Mcp {\n    /**\n     * A filter object to specify which tools are allowed.\n     */\n    export interface McpToolFilter {\n      /**\n       * Indicates whether or not a tool modifies data or is read-only. If an MCP server\n       * is\n       * [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\n       * it will match this filter.\n       */\n      read_only?: boolean;\n\n      /**\n       * List of allowed tool names.\n       */\n      tool_names?: Array<string>;\n    }\n\n    /**\n     * Specify which of the MCP server's tools require approval. Can be `always`,\n     * `never`, or a filter object associated with tools that require approval.\n     */\n    export interface McpToolApprovalFilter {\n      /**\n       * A filter object to specify which tools are allowed.\n       */\n      always?: McpToolApprovalFilter.Always;\n\n      /**\n       * A filter object to specify which tools are allowed.\n       */\n      never?: McpToolApprovalFilter.Never;\n    }\n\n    export namespace McpToolApprovalFilter {\n      /**\n       * A filter object to specify which tools are allowed.\n       */\n      export interface Always {\n        /**\n         * Indicates whether or not a tool modifies data or is read-only. If an MCP server\n         * is\n         * [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\n         * it will match this filter.\n         */\n        read_only?: boolean;\n\n        /**\n         * List of allowed tool names.\n         */\n        tool_names?: Array<string>;\n      }\n\n      /**\n       * A filter object to specify which tools are allowed.\n       */\n      export interface Never {\n        /**\n         * Indicates whether or not a tool modifies data or is read-only. If an MCP server\n         * is\n         * [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\n         * it will match this filter.\n         */\n        read_only?: boolean;\n\n        /**\n         * List of allowed tool names.\n         */\n        tool_names?: Array<string>;\n      }\n    }\n  }\n}\n\n/**\n * Realtime API can write session traces to the\n * [Traces Dashboard](https://platform.openai.com/logs?api=traces). Set to null to\n * disable tracing. Once tracing is enabled for a session, the configuration cannot\n * be modified.\n *\n * `auto` will create a trace for the session with default values for the workflow\n * name, group id, and metadata.\n */\nexport type RealtimeTracingConfig = 'auto' | RealtimeTracingConfig.TracingConfiguration;\n\nexport namespace RealtimeTracingConfig {\n  /**\n   * Granular configuration for tracing.\n   */\n  export interface TracingConfiguration {\n    /**\n     * The group id to attach to this trace to enable filtering and grouping in the\n     * Traces Dashboard.\n     */\n    group_id?: string;\n\n    /**\n     * The arbitrary metadata to attach to this trace to enable filtering in the Traces\n     * Dashboard.\n     */\n    metadata?: unknown;\n\n    /**\n     * The name of the workflow to attach to this trace. This is used to name the trace\n     * in the Traces Dashboard.\n     */\n    workflow_name?: string;\n  }\n}\n\n/**\n * Configuration for input and output audio.\n */\nexport interface RealtimeTranscriptionSessionAudio {\n  input?: RealtimeTranscriptionSessionAudioInput;\n}\n\nexport interface RealtimeTranscriptionSessionAudioInput {\n  /**\n   * The PCM audio format. Only a 24kHz sample rate is supported.\n   */\n  format?: RealtimeAudioFormats;\n\n  /**\n   * Configuration for input audio noise reduction. This can be set to `null` to turn\n   * off. Noise reduction filters audio added to the input audio buffer before it is\n   * sent to VAD and the model. Filtering the audio can improve VAD and turn\n   * detection accuracy (reducing false positives) and model performance by improving\n   * perception of the input audio.\n   */\n  noise_reduction?: RealtimeTranscriptionSessionAudioInput.NoiseReduction;\n\n  /**\n   * Configuration for input audio transcription, defaults to off and can be set to\n   * `null` to turn off once on. Input audio transcription is not native to the\n   * model, since the model consumes audio directly. Transcription runs\n   * asynchronously through\n   * [the /audio/transcriptions endpoint](https://platform.openai.com/docs/api-reference/audio/createTranscription)\n   * and should be treated as guidance of input audio content rather than precisely\n   * what the model heard. The client can optionally set the language and prompt for\n   * transcription, these offer additional guidance to the transcription service.\n   */\n  transcription?: AudioTranscription;\n\n  /**\n   * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n   * set to `null` to turn off, in which case the client must manually trigger model\n   * response.\n   *\n   * Server VAD means that the model will detect the start and end of speech based on\n   * audio volume and respond at the end of user speech.\n   *\n   * Semantic VAD is more advanced and uses a turn detection model (in conjunction\n   * with VAD) to semantically estimate whether the user has finished speaking, then\n   * dynamically sets a timeout based on this probability. For example, if user audio\n   * trails off with \"uhhm\", the model will score a low probability of turn end and\n   * wait longer for the user to continue speaking. This can be useful for more\n   * natural conversations, but may have a higher latency.\n   *\n   * For `gpt-realtime-whisper` transcription sessions, turn detection must be set to\n   * `null`; VAD is not supported.\n   */\n  turn_detection?: RealtimeTranscriptionSessionAudioInputTurnDetection | null;\n}\n\nexport namespace RealtimeTranscriptionSessionAudioInput {\n  /**\n   * Configuration for input audio noise reduction. This can be set to `null` to turn\n   * off. Noise reduction filters audio added to the input audio buffer before it is\n   * sent to VAD and the model. Filtering the audio can improve VAD and turn\n   * detection accuracy (reducing false positives) and model performance by improving\n   * perception of the input audio.\n   */\n  export interface NoiseReduction {\n    /**\n     * Type of noise reduction. `near_field` is for close-talking microphones such as\n     * headphones, `far_field` is for far-field microphones such as laptop or\n     * conference room microphones.\n     */\n    type?: RealtimeAPI.NoiseReductionType;\n  }\n}\n\n/**\n * Configuration for turn detection, ether Server VAD or Semantic VAD. This can be\n * set to `null` to turn off, in which case the client must manually trigger model\n * response.\n *\n * Server VAD means that the model will detect the start and end of speech based on\n * audio volume and respond at the end of user speech.\n *\n * Semantic VAD is more advanced and uses a turn detection model (in conjunction\n * with VAD) to semantically estimate whether the user has finished speaking, then\n * dynamically sets a timeout based on this probability. For example, if user audio\n * trails off with \"uhhm\", the model will score a low probability of turn end and\n * wait longer for the user to continue speaking. This can be useful for more\n * natural conversations, but may have a higher latency.\n *\n * For `gpt-realtime-whisper` transcription sessions, turn detection must be set to\n * `null`; VAD is not supported.\n */\nexport type RealtimeTranscriptionSessionAudioInputTurnDetection =\n  | RealtimeTranscriptionSessionAudioInputTurnDetection.ServerVad\n  | RealtimeTranscriptionSessionAudioInputTurnDetection.SemanticVad;\n\nexport namespace RealtimeTranscriptionSessionAudioInputTurnDetection {\n  /**\n   * Server-side voice activity detection (VAD) which flips on when user speech is\n   * detected and off after a period of silence.\n   */\n  export interface ServerVad {\n    /**\n     * Type of turn detection, `server_vad` to turn on simple Server VAD.\n     */\n    type: 'server_vad';\n\n    /**\n     * Whether or not to automatically generate a response when a VAD stop event\n     * occurs. If `interrupt_response` is set to `false` this may fail to create a\n     * response if the model is already responding.\n     *\n     * If both `create_response` and `interrupt_response` are set to `false`, the model\n     * will never respond automatically but VAD events will still be emitted.\n     */\n    create_response?: boolean;\n\n    /**\n     * Optional timeout after which a model response will be triggered automatically.\n     * This is useful for situations in which a long pause from the user is unexpected,\n     * such as a phone call. The model will effectively prompt the user to continue the\n     * conversation based on the current context.\n     *\n     * The timeout value will be applied after the last model response's audio has\n     * finished playing, i.e. it's set to the `response.done` time plus audio playback\n     * duration.\n     *\n     * An `input_audio_buffer.timeout_triggered` event (plus events associated with the\n     * Response) will be emitted when the timeout is reached. Idle timeout is currently\n     * only supported for `server_vad` mode.\n     */\n    idle_timeout_ms?: number | null;\n\n    /**\n     * Whether or not to automatically interrupt (cancel) any ongoing response with\n     * output to the default conversation (i.e. `conversation` of `auto`) when a VAD\n     * start event occurs. If `true` then the response will be cancelled, otherwise it\n     * will continue until complete.\n     *\n     * If both `create_response` and `interrupt_response` are set to `false`, the model\n     * will never respond automatically but VAD events will still be emitted.\n     */\n    interrupt_response?: boolean;\n\n    /**\n     * Used only for `server_vad` mode. Amount of audio to include before the VAD\n     * detected speech (in milliseconds). Defaults to 300ms.\n     */\n    prefix_padding_ms?: number;\n\n    /**\n     * Used only for `server_vad` mode. Duration of silence to detect speech stop (in\n     * milliseconds). Defaults to 500ms. With shorter values the model will respond\n     * more quickly, but may jump in on short pauses from the user.\n     */\n    silence_duration_ms?: number;\n\n    /**\n     * Used only for `server_vad` mode. Activation threshold for VAD (0.0 to 1.0), this\n     * defaults to 0.5. A higher threshold will require louder audio to activate the\n     * model, and thus might perform better in noisy environments.\n     */\n    threshold?: number;\n  }\n\n  /**\n   * Server-side semantic turn detection which uses a model to determine when the\n   * user has finished speaking.\n   */\n  export interface SemanticVad {\n    /**\n     * Type of turn detection, `semantic_vad` to turn on Semantic VAD.\n     */\n    type: 'semantic_vad';\n\n    /**\n     * Whether or not to automatically generate a response when a VAD stop event\n     * occurs.\n     */\n    create_response?: boolean;\n\n    /**\n     * Used only for `semantic_vad` mode. The eagerness of the model to respond. `low`\n     * will wait longer for the user to continue speaking, `high` will respond more\n     * quickly. `auto` is the default and is equivalent to `medium`. `low`, `medium`,\n     * and `high` have max timeouts of 8s, 4s, and 2s respectively.\n     */\n    eagerness?: 'low' | 'medium' | 'high' | 'auto';\n\n    /**\n     * Whether or not to automatically interrupt any ongoing response with output to\n     * the default conversation (i.e. `conversation` of `auto`) when a VAD start event\n     * occurs.\n     */\n    interrupt_response?: boolean;\n  }\n}\n\n/**\n * Realtime transcription session object configuration.\n */\nexport interface RealtimeTranscriptionSessionCreateRequest {\n  /**\n   * The type of session to create. Always `transcription` for transcription\n   * sessions.\n   */\n  type: 'transcription';\n\n  /**\n   * Configuration for input and output audio.\n   */\n  audio?: RealtimeTranscriptionSessionAudio;\n\n  /**\n   * Additional fields to include in server outputs.\n   *\n   * `item.input_audio_transcription.logprobs`: Include logprobs for input audio\n   * transcription.\n   */\n  include?: Array<'item.input_audio_transcription.logprobs'>;\n}\n\n/**\n * A Realtime translation client event.\n */\nexport type RealtimeTranslationClientEvent =\n  | RealtimeTranslationSessionUpdateEvent\n  | RealtimeTranslationInputAudioBufferAppendEvent\n  | RealtimeTranslationSessionCloseEvent;\n\n/**\n * Create a translation session and client secret for the Realtime API.\n */\nexport interface RealtimeTranslationClientSecretCreateRequest {\n  /**\n   * Realtime translation session configuration. Translation sessions stream source\n   * audio in and translated audio plus transcript deltas out continuously.\n   */\n  session: RealtimeTranslationSessionCreateRequest;\n\n  /**\n   * Configuration for the client secret expiration. Expiration refers to the time\n   * after which a client secret will no longer be valid for creating sessions. The\n   * session itself may continue after that time once started. A secret can be used\n   * to create multiple sessions until it expires.\n   */\n  expires_after?: RealtimeTranslationClientSecretCreateRequest.ExpiresAfter;\n}\n\nexport namespace RealtimeTranslationClientSecretCreateRequest {\n  /**\n   * Configuration for the client secret expiration. Expiration refers to the time\n   * after which a client secret will no longer be valid for creating sessions. The\n   * session itself may continue after that time once started. A secret can be used\n   * to create multiple sessions until it expires.\n   */\n  export interface ExpiresAfter {\n    /**\n     * The anchor point for the client secret expiration, meaning that `seconds` will\n     * be added to the `created_at` time of the client secret to produce an expiration\n     * timestamp. Only `created_at` is currently supported.\n     */\n    anchor?: 'created_at';\n\n    /**\n     * The number of seconds from the anchor point to the expiration. Select a value\n     * between `10` and `7200` (2 hours). This default to 600 seconds (10 minutes) if\n     * not specified.\n     */\n    seconds?: number;\n  }\n}\n\n/**\n * Response from creating a translation session and client secret for the Realtime\n * API.\n */\nexport interface RealtimeTranslationClientSecretCreateResponse {\n  /**\n   * Expiration timestamp for the client secret, in seconds since epoch.\n   */\n  expires_at: number;\n\n  /**\n   * A Realtime translation session. Translation sessions continuously translate\n   * input audio into the configured output language.\n   */\n  session: RealtimeTranslationSession;\n\n  /**\n   * The generated client secret value.\n   */\n  value: string;\n}\n\n/**\n * Send this event to append audio bytes to the translation session input audio\n * buffer.\n *\n * WebSocket translation sessions accept base64-encoded 24 kHz PCM16 mono\n * little-endian raw audio bytes. Unsupported websocket audio formats return a\n * validation error because lower-quality audio materially degrades translation\n * quality.\n *\n * Translation consumes 200 ms engine frames. For best realtime behavior, append\n * audio in 200 ms chunks. If a chunk is shorter, the server buffers it until it\n * has enough audio for one frame. If a chunk is longer, the server splits it into\n * 200 ms frames and enqueues them back-to-back.\n *\n * Keep appending silence while the session is active. If a client stops sending\n * audio and later resumes, model time treats the resumed audio as contiguous with\n * the previous audio rather than as a real-world pause.\n */\nexport interface RealtimeTranslationInputAudioBufferAppendEvent {\n  /**\n   * Base64-encoded 24 kHz PCM16 mono audio bytes.\n   */\n  audio: string;\n\n  /**\n   * The event type, must be `session.input_audio_buffer.append`.\n   */\n  type: 'session.input_audio_buffer.append';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\n/**\n * Returned when optional source-language transcript text is available. This event\n * is emitted only when `audio.input.transcription` is configured.\n *\n * Transcript deltas are append-only text fragments. Clients should not insert\n * unconditional spaces between deltas.\n */\nexport interface RealtimeTranslationInputTranscriptDeltaEvent {\n  /**\n   * Append-only source-language transcript text.\n   */\n  delta: string;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The event type, must be `session.input_transcript.delta`.\n   */\n  type: 'session.input_transcript.delta';\n\n  /**\n   * Timing metadata for stream alignment, derived from the translation frame when\n   * available. It advances in 200 ms increments, but multiple transcript deltas may\n   * share the same `elapsed_ms`. Treat it as alignment metadata, not a unique\n   * transcript-delta identifier.\n   */\n  elapsed_ms?: number | null;\n}\n\n/**\n * Returned when translated output audio is available. Output audio deltas are 200\n * ms frames of PCM16 audio.\n */\nexport interface RealtimeTranslationOutputAudioDeltaEvent {\n  /**\n   * Base64-encoded translated audio data.\n   */\n  delta: string;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The event type, must be `session.output_audio.delta`.\n   */\n  type: 'session.output_audio.delta';\n\n  /**\n   * Number of audio channels.\n   */\n  channels?: number;\n\n  /**\n   * Timing metadata for stream alignment, derived from the translation frame when\n   * available. Treat `elapsed_ms` as alignment metadata, not a unique event\n   * identifier.\n   */\n  elapsed_ms?: number | null;\n\n  /**\n   * Audio encoding for `delta`.\n   */\n  format?: 'pcm16';\n\n  /**\n   * Sample rate of the audio delta.\n   */\n  sample_rate?: number;\n}\n\n/**\n * Returned when translated transcript text is available.\n *\n * Transcript deltas are append-only text fragments. Clients should not insert\n * unconditional spaces between deltas.\n */\nexport interface RealtimeTranslationOutputTranscriptDeltaEvent {\n  /**\n   * Append-only transcript text for the translated output audio.\n   */\n  delta: string;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The event type, must be `session.output_transcript.delta`.\n   */\n  type: 'session.output_transcript.delta';\n\n  /**\n   * Timing metadata for stream alignment, derived from the translation frame when\n   * available. It advances in 200 ms increments, but multiple transcript deltas may\n   * share the same `elapsed_ms`. Treat it as alignment metadata, not a unique\n   * transcript-delta identifier.\n   */\n  elapsed_ms?: number | null;\n}\n\n/**\n * A Realtime translation server event.\n */\nexport type RealtimeTranslationServerEvent =\n  | RealtimeErrorEvent\n  | RealtimeTranslationSessionCreatedEvent\n  | RealtimeTranslationSessionUpdatedEvent\n  | RealtimeTranslationSessionClosedEvent\n  | RealtimeTranslationInputTranscriptDeltaEvent\n  | RealtimeTranslationOutputTranscriptDeltaEvent\n  | RealtimeTranslationOutputAudioDeltaEvent;\n\n/**\n * A Realtime translation session. Translation sessions continuously translate\n * input audio into the configured output language.\n */\nexport interface RealtimeTranslationSession {\n  /**\n   * Unique identifier for the session that looks like `sess_1234567890abcdef`.\n   */\n  id: string;\n\n  /**\n   * Configuration for translation input and output audio.\n   */\n  audio: RealtimeTranslationSession.Audio;\n\n  /**\n   * Expiration timestamp for the session, in seconds since epoch.\n   */\n  expires_at: number;\n\n  /**\n   * The Realtime translation model used for this session. This field is set at\n   * session creation and cannot be changed with `session.update`.\n   */\n  model: string;\n\n  /**\n   * The session type. Always `translation` for Realtime translation sessions.\n   */\n  type: 'translation';\n}\n\nexport namespace RealtimeTranslationSession {\n  /**\n   * Configuration for translation input and output audio.\n   */\n  export interface Audio {\n    input?: Audio.Input;\n\n    output?: Audio.Output;\n  }\n\n  export namespace Audio {\n    export interface Input {\n      /**\n       * Optional input noise reduction.\n       */\n      noise_reduction?: Input.NoiseReduction | null;\n\n      /**\n       * Optional source-language transcription. When configured, the server emits\n       * `session.input_transcript.delta` events. Translation itself still runs from the\n       * input audio stream.\n       */\n      transcription?: Input.Transcription | null;\n    }\n\n    export namespace Input {\n      /**\n       * Optional input noise reduction.\n       */\n      export interface NoiseReduction {\n        /**\n         * Type of noise reduction. `near_field` is for close-talking microphones such as\n         * headphones, `far_field` is for far-field microphones such as laptop or\n         * conference room microphones.\n         */\n        type: RealtimeAPI.NoiseReductionType;\n      }\n\n      /**\n       * Optional source-language transcription. When configured, the server emits\n       * `session.input_transcript.delta` events. Translation itself still runs from the\n       * input audio stream.\n       */\n      export interface Transcription {\n        /**\n         * The transcription model used for source transcript deltas.\n         */\n        model: string;\n      }\n    }\n\n    export interface Output {\n      /**\n       * Target language for translated output audio and transcript deltas.\n       */\n      language?: string;\n    }\n  }\n}\n\n/**\n * Gracefully close the realtime translation session. The server flushes pending\n * input audio and emits any remaining translated output before closing the\n * session.\n */\nexport interface RealtimeTranslationSessionCloseEvent {\n  /**\n   * The event type, must be `session.close`.\n   */\n  type: 'session.close';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\n/**\n * Returned when a realtime translation session is closed.\n */\nexport interface RealtimeTranslationSessionClosedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The event type, must be `session.closed`.\n   */\n  type: 'session.closed';\n}\n\n/**\n * Realtime translation session configuration. Translation sessions stream source\n * audio in and translated audio plus transcript deltas out continuously.\n */\nexport interface RealtimeTranslationSessionCreateRequest {\n  /**\n   * The Realtime translation model used for this session.\n   */\n  model: string;\n\n  /**\n   * Configuration for translation input and output audio.\n   */\n  audio?: RealtimeTranslationSessionCreateRequest.Audio;\n}\n\nexport namespace RealtimeTranslationSessionCreateRequest {\n  /**\n   * Configuration for translation input and output audio.\n   */\n  export interface Audio {\n    input?: Audio.Input;\n\n    output?: Audio.Output;\n  }\n\n  export namespace Audio {\n    export interface Input {\n      /**\n       * Optional input noise reduction. Set to `null` to disable it.\n       */\n      noise_reduction?: Input.NoiseReduction | null;\n\n      /**\n       * Optional source-language transcription. When configured, the server emits\n       * `session.input_transcript.delta` events. Translation itself still runs from the\n       * input audio stream.\n       */\n      transcription?: Input.Transcription | null;\n    }\n\n    export namespace Input {\n      /**\n       * Optional input noise reduction. Set to `null` to disable it.\n       */\n      export interface NoiseReduction {\n        /**\n         * Type of noise reduction. `near_field` is for close-talking microphones such as\n         * headphones, `far_field` is for far-field microphones such as laptop or\n         * conference room microphones.\n         */\n        type: RealtimeAPI.NoiseReductionType;\n      }\n\n      /**\n       * Optional source-language transcription. When configured, the server emits\n       * `session.input_transcript.delta` events. Translation itself still runs from the\n       * input audio stream.\n       */\n      export interface Transcription {\n        /**\n         * The transcription model to use for source transcript deltas.\n         */\n        model: string;\n      }\n    }\n\n    export interface Output {\n      /**\n       * Target language for translated output audio and transcript deltas.\n       */\n      language?: string;\n    }\n  }\n}\n\n/**\n * Returned when a translation session is created. Emitted automatically when a new\n * connection is established as the first server event. This event contains the\n * default translation session configuration.\n */\nexport interface RealtimeTranslationSessionCreatedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The translation session configuration.\n   */\n  session: RealtimeTranslationSession;\n\n  /**\n   * The event type, must be `session.created`.\n   */\n  type: 'session.created';\n}\n\n/**\n * Send this event to update the translation session configuration. Translation\n * sessions support updates to `audio.output.language`,\n * `audio.input.transcription`, and `audio.input.noise_reduction`.\n */\nexport interface RealtimeTranslationSessionUpdateEvent {\n  /**\n   * Translation session fields to update. The session `type` and `model` are set at\n   * creation and cannot be changed with `session.update`.\n   */\n  session: RealtimeTranslationSessionUpdateRequest;\n\n  /**\n   * The event type, must be `session.update`.\n   */\n  type: 'session.update';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\n/**\n * Realtime translation session fields that can be updated with `session.update`.\n */\nexport interface RealtimeTranslationSessionUpdateRequest {\n  /**\n   * Configuration for translation input and output audio.\n   */\n  audio?: RealtimeTranslationSessionUpdateRequest.Audio;\n}\n\nexport namespace RealtimeTranslationSessionUpdateRequest {\n  /**\n   * Configuration for translation input and output audio.\n   */\n  export interface Audio {\n    input?: Audio.Input;\n\n    output?: Audio.Output;\n  }\n\n  export namespace Audio {\n    export interface Input {\n      /**\n       * Optional input noise reduction. Set to `null` to disable it.\n       */\n      noise_reduction?: Input.NoiseReduction | null;\n\n      /**\n       * Optional source-language transcription. When configured, the server emits\n       * `session.input_transcript.delta` events. Translation itself still runs from the\n       * input audio stream.\n       */\n      transcription?: Input.Transcription | null;\n    }\n\n    export namespace Input {\n      /**\n       * Optional input noise reduction. Set to `null` to disable it.\n       */\n      export interface NoiseReduction {\n        /**\n         * Type of noise reduction. `near_field` is for close-talking microphones such as\n         * headphones, `far_field` is for far-field microphones such as laptop or\n         * conference room microphones.\n         */\n        type: RealtimeAPI.NoiseReductionType;\n      }\n\n      /**\n       * Optional source-language transcription. When configured, the server emits\n       * `session.input_transcript.delta` events. Translation itself still runs from the\n       * input audio stream.\n       */\n      export interface Transcription {\n        /**\n         * The transcription model to use for source transcript deltas.\n         */\n        model: string;\n      }\n    }\n\n    export interface Output {\n      /**\n       * Target language for translated output audio and transcript deltas.\n       */\n      language?: string;\n    }\n  }\n}\n\n/**\n * Returned when a translation session is updated with a `session.update` event,\n * unless there is an error.\n */\nexport interface RealtimeTranslationSessionUpdatedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The translation session configuration.\n   */\n  session: RealtimeTranslationSession;\n\n  /**\n   * The event type, must be `session.updated`.\n   */\n  type: 'session.updated';\n}\n\n/**\n * When the number of tokens in a conversation exceeds the model's input token\n * limit, the conversation be truncated, meaning messages (starting from the\n * oldest) will not be included in the model's context. A 32k context model with\n * 4,096 max output tokens can only include 28,224 tokens in the context before\n * truncation occurs.\n *\n * Clients can configure truncation behavior to truncate with a lower max token\n * limit, which is an effective way to control token usage and cost.\n *\n * Truncation will reduce the number of cached tokens on the next turn (busting the\n * cache), since messages are dropped from the beginning of the context. However,\n * clients can also configure truncation to retain messages up to a fraction of the\n * maximum context size, which will reduce the need for future truncations and thus\n * improve the cache rate.\n *\n * Truncation can be disabled entirely, which means the server will never truncate\n * but would instead return an error if the conversation exceeds the model's input\n * token limit.\n */\nexport type RealtimeTruncation = 'auto' | 'disabled' | RealtimeTruncationRetentionRatio;\n\n/**\n * Retain a fraction of the conversation tokens when the conversation exceeds the\n * input token limit. This allows you to amortize truncations across multiple\n * turns, which can help improve cached token usage.\n */\nexport interface RealtimeTruncationRetentionRatio {\n  /**\n   * Fraction of post-instruction conversation tokens to retain (`0.0` - `1.0`) when\n   * the conversation exceeds the input token limit. Setting this to `0.8` means that\n   * messages will be dropped until 80% of the maximum allowed tokens are used. This\n   * helps reduce the frequency of truncations and improve cache rates.\n   */\n  retention_ratio: number;\n\n  /**\n   * Use retention ratio truncation.\n   */\n  type: 'retention_ratio';\n\n  /**\n   * Optional custom token limits for this truncation strategy. If not provided, the\n   * model's default token limits will be used.\n   */\n  token_limits?: RealtimeTruncationRetentionRatio.TokenLimits;\n}\n\nexport namespace RealtimeTruncationRetentionRatio {\n  /**\n   * Optional custom token limits for this truncation strategy. If not provided, the\n   * model's default token limits will be used.\n   */\n  export interface TokenLimits {\n    /**\n     * Maximum tokens allowed in the conversation after instructions (which including\n     * tool definitions). For example, setting this to 5,000 would mean that truncation\n     * would occur when the conversation exceeds 5,000 tokens after instructions. This\n     * cannot be higher than the model's context window size minus the maximum output\n     * tokens.\n     */\n    post_instructions?: number;\n  }\n}\n\n/**\n * Returned when the model-generated audio is updated.\n */\nexport interface ResponseAudioDeltaEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * Base64-encoded audio data delta.\n   */\n  delta: string;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.output_audio.delta`.\n   */\n  type: 'response.output_audio.delta';\n}\n\n/**\n * Returned when the model-generated audio is done. Also emitted when a Response is\n * interrupted, incomplete, or cancelled.\n */\nexport interface ResponseAudioDoneEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.output_audio.done`.\n   */\n  type: 'response.output_audio.done';\n}\n\n/**\n * Returned when the model-generated transcription of audio output is updated.\n */\nexport interface ResponseAudioTranscriptDeltaEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * The transcript delta.\n   */\n  delta: string;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.output_audio_transcript.delta`.\n   */\n  type: 'response.output_audio_transcript.delta';\n}\n\n/**\n * Returned when the model-generated transcription of audio output is done\n * streaming. Also emitted when a Response is interrupted, incomplete, or\n * cancelled.\n */\nexport interface ResponseAudioTranscriptDoneEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The final transcript of the audio.\n   */\n  transcript: string;\n\n  /**\n   * The event type, must be `response.output_audio_transcript.done`.\n   */\n  type: 'response.output_audio_transcript.done';\n}\n\n/**\n * Send this event to cancel an in-progress response. The server will respond with\n * a `response.done` event with a status of `response.status=cancelled`. If there\n * is no response to cancel, the server will respond with an error. It's safe to\n * call `response.cancel` even if no response is in progress, an error will be\n * returned the session will remain unaffected.\n */\nexport interface ResponseCancelEvent {\n  /**\n   * The event type, must be `response.cancel`.\n   */\n  type: 'response.cancel';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n\n  /**\n   * A specific response ID to cancel - if not provided, will cancel an in-progress\n   * response in the default conversation.\n   */\n  response_id?: string;\n}\n\n/**\n * Returned when a new content part is added to an assistant message item during\n * response generation.\n */\nexport interface ResponseContentPartAddedEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item to which the content part was added.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The content part that was added.\n   */\n  part: ResponseContentPartAddedEvent.Part;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.content_part.added`.\n   */\n  type: 'response.content_part.added';\n}\n\nexport namespace ResponseContentPartAddedEvent {\n  /**\n   * The content part that was added.\n   */\n  export interface Part {\n    /**\n     * Base64-encoded audio data (if type is \"audio\").\n     */\n    audio?: string;\n\n    /**\n     * The text content (if type is \"text\").\n     */\n    text?: string;\n\n    /**\n     * The transcript of the audio (if type is \"audio\").\n     */\n    transcript?: string;\n\n    /**\n     * The content type (\"text\", \"audio\").\n     */\n    type?: 'text' | 'audio';\n  }\n}\n\n/**\n * Returned when a content part is done streaming in an assistant message item.\n * Also emitted when a Response is interrupted, incomplete, or cancelled.\n */\nexport interface ResponseContentPartDoneEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The content part that is done.\n   */\n  part: ResponseContentPartDoneEvent.Part;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.content_part.done`.\n   */\n  type: 'response.content_part.done';\n}\n\nexport namespace ResponseContentPartDoneEvent {\n  /**\n   * The content part that is done.\n   */\n  export interface Part {\n    /**\n     * Base64-encoded audio data (if type is \"audio\").\n     */\n    audio?: string;\n\n    /**\n     * The text content (if type is \"text\").\n     */\n    text?: string;\n\n    /**\n     * The transcript of the audio (if type is \"audio\").\n     */\n    transcript?: string;\n\n    /**\n     * The content type (\"text\", \"audio\").\n     */\n    type?: 'text' | 'audio';\n  }\n}\n\n/**\n * This event instructs the server to create a Response, which means triggering\n * model inference. When in Server VAD mode, the server will create Responses\n * automatically.\n *\n * A Response will include at least one Item, and may have two, in which case the\n * second will be a function call. These Items will be appended to the conversation\n * history by default.\n *\n * The server will respond with a `response.created` event, events for Items and\n * content created, and finally a `response.done` event to indicate the Response is\n * complete.\n *\n * The `response.create` event includes inference configuration like `instructions`\n * and `tools`. If these are set, they will override the Session's configuration\n * for this Response only.\n *\n * Responses can be created out-of-band of the default Conversation, meaning that\n * they can have arbitrary input, and it's possible to disable writing the output\n * to the Conversation. Only one Response can write to the default Conversation at\n * a time, but otherwise multiple Responses can be created in parallel. The\n * `metadata` field is a good way to disambiguate multiple simultaneous Responses.\n *\n * Clients can set `conversation` to `none` to create a Response that does not\n * write to the default Conversation. Arbitrary input can be provided with the\n * `input` field, which is an array accepting raw Items and references to existing\n * Items.\n */\nexport interface ResponseCreateEvent {\n  /**\n   * The event type, must be `response.create`.\n   */\n  type: 'response.create';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n\n  /**\n   * Create a new Realtime response with these parameters\n   */\n  response?: RealtimeResponseCreateParams;\n}\n\n/**\n * Returned when a new Response is created. The first event of response creation,\n * where the response is in an initial state of `in_progress`.\n */\nexport interface ResponseCreatedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The response resource.\n   */\n  response: RealtimeResponse;\n\n  /**\n   * The event type, must be `response.created`.\n   */\n  type: 'response.created';\n}\n\n/**\n * Returned when a Response is done streaming. Always emitted, no matter the final\n * state. The Response object included in the `response.done` event will include\n * all output Items in the Response but will omit the raw audio data.\n *\n * Clients should check the `status` field of the Response to determine if it was\n * successful (`completed`) or if there was another outcome: `cancelled`, `failed`,\n * or `incomplete`.\n *\n * A response will contain all output items that were generated during the\n * response, excluding any audio content.\n */\nexport interface ResponseDoneEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The response resource.\n   */\n  response: RealtimeResponse;\n\n  /**\n   * The event type, must be `response.done`.\n   */\n  type: 'response.done';\n}\n\n/**\n * Returned when the model-generated function call arguments are updated.\n */\nexport interface ResponseFunctionCallArgumentsDeltaEvent {\n  /**\n   * The ID of the function call.\n   */\n  call_id: string;\n\n  /**\n   * The arguments delta as a JSON string.\n   */\n  delta: string;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the function call item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.function_call_arguments.delta`.\n   */\n  type: 'response.function_call_arguments.delta';\n}\n\n/**\n * Returned when the model-generated function call arguments are done streaming.\n * Also emitted when a Response is interrupted, incomplete, or cancelled.\n */\nexport interface ResponseFunctionCallArgumentsDoneEvent {\n  /**\n   * The final arguments as a JSON string.\n   */\n  arguments: string;\n\n  /**\n   * The ID of the function call.\n   */\n  call_id: string;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the function call item.\n   */\n  item_id: string;\n\n  /**\n   * The name of the function that was called.\n   */\n  name: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.function_call_arguments.done`.\n   */\n  type: 'response.function_call_arguments.done';\n}\n\n/**\n * Returned when MCP tool call arguments are updated during response generation.\n */\nexport interface ResponseMcpCallArgumentsDelta {\n  /**\n   * The JSON-encoded arguments delta.\n   */\n  delta: string;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the MCP tool call item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.mcp_call_arguments.delta`.\n   */\n  type: 'response.mcp_call_arguments.delta';\n\n  /**\n   * If present, indicates the delta text was obfuscated.\n   */\n  obfuscation?: string | null;\n}\n\n/**\n * Returned when MCP tool call arguments are finalized during response generation.\n */\nexport interface ResponseMcpCallArgumentsDone {\n  /**\n   * The final JSON-encoded arguments string.\n   */\n  arguments: string;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the MCP tool call item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.mcp_call_arguments.done`.\n   */\n  type: 'response.mcp_call_arguments.done';\n}\n\n/**\n * Returned when an MCP tool call has completed successfully.\n */\nexport interface ResponseMcpCallCompleted {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the MCP tool call item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The event type, must be `response.mcp_call.completed`.\n   */\n  type: 'response.mcp_call.completed';\n}\n\n/**\n * Returned when an MCP tool call has failed.\n */\nexport interface ResponseMcpCallFailed {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the MCP tool call item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The event type, must be `response.mcp_call.failed`.\n   */\n  type: 'response.mcp_call.failed';\n}\n\n/**\n * Returned when an MCP tool call has started and is in progress.\n */\nexport interface ResponseMcpCallInProgress {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the MCP tool call item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The event type, must be `response.mcp_call.in_progress`.\n   */\n  type: 'response.mcp_call.in_progress';\n}\n\n/**\n * Returned when a new Item is created during Response generation.\n */\nexport interface ResponseOutputItemAddedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * A single item within a Realtime conversation.\n   */\n  item: ConversationItem;\n\n  /**\n   * The index of the output item in the Response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the Response to which the item belongs.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.output_item.added`.\n   */\n  type: 'response.output_item.added';\n}\n\n/**\n * Returned when an Item is done streaming. Also emitted when a Response is\n * interrupted, incomplete, or cancelled.\n */\nexport interface ResponseOutputItemDoneEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * A single item within a Realtime conversation.\n   */\n  item: ConversationItem;\n\n  /**\n   * The index of the output item in the Response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the Response to which the item belongs.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.output_item.done`.\n   */\n  type: 'response.output_item.done';\n}\n\n/**\n * Returned when the text value of an \"output_text\" content part is updated.\n */\nexport interface ResponseTextDeltaEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * The text delta.\n   */\n  delta: string;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The event type, must be `response.output_text.delta`.\n   */\n  type: 'response.output_text.delta';\n}\n\n/**\n * Returned when the text value of an \"output_text\" content part is done streaming.\n * Also emitted when a Response is interrupted, incomplete, or cancelled.\n */\nexport interface ResponseTextDoneEvent {\n  /**\n   * The index of the content part in the item's content array.\n   */\n  content_index: number;\n\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response.\n   */\n  output_index: number;\n\n  /**\n   * The ID of the response.\n   */\n  response_id: string;\n\n  /**\n   * The final text content.\n   */\n  text: string;\n\n  /**\n   * The event type, must be `response.output_text.done`.\n   */\n  type: 'response.output_text.done';\n}\n\n/**\n * Returned when a Session is created. Emitted automatically when a new connection\n * is established as the first server event. This event will contain the default\n * Session configuration.\n */\nexport interface SessionCreatedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The session configuration.\n   */\n  session: RealtimeSessionCreateRequest | RealtimeTranscriptionSessionCreateRequest;\n\n  /**\n   * The event type, must be `session.created`.\n   */\n  type: 'session.created';\n}\n\n/**\n * Send this event to update the session\u2019s configuration. The client may send this\n * event at any time to update any field except for `voice` and `model`. `voice`\n * can be updated only if there have been no other audio outputs yet.\n *\n * When the server receives a `session.update`, it will respond with a\n * `session.updated` event showing the full, effective configuration. Only the\n * fields that are present in the `session.update` are updated. To clear a field\n * like `instructions`, pass an empty string. To clear a field like `tools`, pass\n * an empty array. To clear a field like `turn_detection`, pass `null`.\n */\nexport interface SessionUpdateEvent {\n  /**\n   * Update the Realtime session. Choose either a realtime session or a transcription\n   * session.\n   */\n  session: RealtimeSessionCreateRequest | RealtimeTranscriptionSessionCreateRequest;\n\n  /**\n   * The event type, must be `session.update`.\n   */\n  type: 'session.update';\n\n  /**\n   * Optional client-generated ID used to identify this event. This is an arbitrary\n   * string that a client may assign. It will be passed back if there is an error\n   * with the event, but the corresponding `session.updated` event will not include\n   * it.\n   */\n  event_id?: string;\n}\n\n/**\n * Returned when a session is updated with a `session.update` event, unless there\n * is an error.\n */\nexport interface SessionUpdatedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * The session configuration.\n   */\n  session: RealtimeSessionCreateRequest | RealtimeTranscriptionSessionCreateRequest;\n\n  /**\n   * The event type, must be `session.updated`.\n   */\n  type: 'session.updated';\n}\n\n/**\n * Send this event to update a transcription session.\n */\nexport interface TranscriptionSessionUpdate {\n  /**\n   * Realtime transcription session object configuration.\n   */\n  session: TranscriptionSessionUpdate.Session;\n\n  /**\n   * The event type, must be `transcription_session.update`.\n   */\n  type: 'transcription_session.update';\n\n  /**\n   * Optional client-generated ID used to identify this event.\n   */\n  event_id?: string;\n}\n\nexport namespace TranscriptionSessionUpdate {\n  /**\n   * Realtime transcription session object configuration.\n   */\n  export interface Session {\n    /**\n     * The set of items to include in the transcription. Current available items are:\n     * `item.input_audio_transcription.logprobs`\n     */\n    include?: Array<'item.input_audio_transcription.logprobs'>;\n\n    /**\n     * The format of input audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`. For\n     * `pcm16`, input audio must be 16-bit PCM at a 24kHz sample rate, single channel\n     * (mono), and little-endian byte order.\n     */\n    input_audio_format?: 'pcm16' | 'g711_ulaw' | 'g711_alaw';\n\n    /**\n     * Configuration for input audio noise reduction. This can be set to `null` to turn\n     * off. Noise reduction filters audio added to the input audio buffer before it is\n     * sent to VAD and the model. Filtering the audio can improve VAD and turn\n     * detection accuracy (reducing false positives) and model performance by improving\n     * perception of the input audio.\n     */\n    input_audio_noise_reduction?: Session.InputAudioNoiseReduction;\n\n    /**\n     * Configuration for input audio transcription. The client can optionally set the\n     * language and prompt for transcription, these offer additional guidance to the\n     * transcription service.\n     */\n    input_audio_transcription?: RealtimeAPI.AudioTranscription;\n\n    /**\n     * Configuration for turn detection. Can be set to `null` to turn off. Server VAD\n     * means that the model will detect the start and end of speech based on audio\n     * volume and respond at the end of user speech.\n     */\n    turn_detection?: Session.TurnDetection;\n  }\n\n  export namespace Session {\n    /**\n     * Configuration for input audio noise reduction. This can be set to `null` to turn\n     * off. Noise reduction filters audio added to the input audio buffer before it is\n     * sent to VAD and the model. Filtering the audio can improve VAD and turn\n     * detection accuracy (reducing false positives) and model performance by improving\n     * perception of the input audio.\n     */\n    export interface InputAudioNoiseReduction {\n      /**\n       * Type of noise reduction. `near_field` is for close-talking microphones such as\n       * headphones, `far_field` is for far-field microphones such as laptop or\n       * conference room microphones.\n       */\n      type?: RealtimeAPI.NoiseReductionType;\n    }\n\n    /**\n     * Configuration for turn detection. Can be set to `null` to turn off. Server VAD\n     * means that the model will detect the start and end of speech based on audio\n     * volume and respond at the end of user speech.\n     */\n    export interface TurnDetection {\n      /**\n       * Amount of audio to include before the VAD detected speech (in milliseconds).\n       * Defaults to 300ms.\n       */\n      prefix_padding_ms?: number;\n\n      /**\n       * Duration of silence to detect speech stop (in milliseconds). Defaults to 500ms.\n       * With shorter values the model will respond more quickly, but may jump in on\n       * short pauses from the user.\n       */\n      silence_duration_ms?: number;\n\n      /**\n       * Activation threshold for VAD (0.0 to 1.0), this defaults to 0.5. A higher\n       * threshold will require louder audio to activate the model, and thus might\n       * perform better in noisy environments.\n       */\n      threshold?: number;\n\n      /**\n       * Type of turn detection. Only `server_vad` is currently supported for\n       * transcription sessions.\n       */\n      type?: 'server_vad';\n    }\n  }\n}\n\n/**\n * Returned when a transcription session is updated with a\n * `transcription_session.update` event, unless there is an error.\n */\nexport interface TranscriptionSessionUpdatedEvent {\n  /**\n   * The unique ID of the server event.\n   */\n  event_id: string;\n\n  /**\n   * A new Realtime transcription session configuration.\n   *\n   * When a session is created on the server via REST API, the session object also\n   * contains an ephemeral key. Default TTL for keys is 10 minutes. This property is\n   * not present when a session is updated via the WebSocket API.\n   */\n  session: TranscriptionSessionUpdatedEvent.Session;\n\n  /**\n   * The event type, must be `transcription_session.updated`.\n   */\n  type: 'transcription_session.updated';\n}\n\nexport namespace TranscriptionSessionUpdatedEvent {\n  /**\n   * A new Realtime transcription session configuration.\n   *\n   * When a session is created on the server via REST API, the session object also\n   * contains an ephemeral key. Default TTL for keys is 10 minutes. This property is\n   * not present when a session is updated via the WebSocket API.\n   */\n  export interface Session {\n    /**\n     * Ephemeral key returned by the API. Only present when the session is created on\n     * the server via REST API.\n     */\n    client_secret: Session.ClientSecret;\n\n    /**\n     * The format of input audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`.\n     */\n    input_audio_format?: string;\n\n    input_audio_transcription?: RealtimeAPI.AudioTranscription;\n\n    /**\n     * The set of modalities the model can respond with. To disable audio, set this to\n     * [\"text\"].\n     */\n    modalities?: Array<'text' | 'audio'>;\n\n    /**\n     * Configuration for turn detection. Can be set to `null` to turn off. Server VAD\n     * means that the model will detect the start and end of speech based on audio\n     * volume and respond at the end of user speech.\n     */\n    turn_detection?: Session.TurnDetection;\n  }\n\n  export namespace Session {\n    /**\n     * Ephemeral key returned by the API. Only present when the session is created on\n     * the server via REST API.\n     */\n    export interface ClientSecret {\n      /**\n       * Timestamp for when the token expires. Currently, all tokens expire after one\n       * minute.\n       */\n      expires_at: number;\n\n      /**\n       * Ephemeral key usable in client environments to authenticate connections to the\n       * Realtime API. Use this in client-side environments rather than a standard API\n       * token, which should only be used server-side.\n       */\n      value: string;\n    }\n\n    /**\n     * Configuration for turn detection. Can be set to `null` to turn off. Server VAD\n     * means that the model will detect the start and end of speech based on audio\n     * volume and respond at the end of user speech.\n     */\n    export interface TurnDetection {\n      /**\n       * Amount of audio to include before the VAD detected speech (in milliseconds).\n       * Defaults to 300ms.\n       */\n      prefix_padding_ms?: number;\n\n      /**\n       * Duration of silence to detect speech stop (in milliseconds). Defaults to 500ms.\n       * With shorter values the model will respond more quickly, but may jump in on\n       * short pauses from the user.\n       */\n      silence_duration_ms?: number;\n\n      /**\n       * Activation threshold for VAD (0.0 to 1.0), this defaults to 0.5. A higher\n       * threshold will require louder audio to activate the model, and thus might\n       * perform better in noisy environments.\n       */\n      threshold?: number;\n\n      /**\n       * Type of turn detection, only `server_vad` is currently supported.\n       */\n      type?: string;\n    }\n  }\n}\n\nRealtime.ClientSecrets = ClientSecrets;\nRealtime.Calls = Calls;\n\nexport declare namespace Realtime {\n  export {\n    type AudioTranscription as AudioTranscription,\n    type ConversationCreatedEvent as ConversationCreatedEvent,\n    type ConversationItem as ConversationItem,\n    type ConversationItemAdded as ConversationItemAdded,\n    type ConversationItemCreateEvent as ConversationItemCreateEvent,\n    type ConversationItemCreatedEvent as ConversationItemCreatedEvent,\n    type ConversationItemDeleteEvent as ConversationItemDeleteEvent,\n    type ConversationItemDeletedEvent as ConversationItemDeletedEvent,\n    type ConversationItemDone as ConversationItemDone,\n    type ConversationItemInputAudioTranscriptionCompletedEvent as ConversationItemInputAudioTranscriptionCompletedEvent,\n    type ConversationItemInputAudioTranscriptionDeltaEvent as ConversationItemInputAudioTranscriptionDeltaEvent,\n    type ConversationItemInputAudioTranscriptionFailedEvent as ConversationItemInputAudioTranscriptionFailedEvent,\n    type ConversationItemInputAudioTranscriptionSegment as ConversationItemInputAudioTranscriptionSegment,\n    type ConversationItemRetrieveEvent as ConversationItemRetrieveEvent,\n    type ConversationItemTruncateEvent as ConversationItemTruncateEvent,\n    type ConversationItemTruncatedEvent as ConversationItemTruncatedEvent,\n    type ConversationItemWithReference as ConversationItemWithReference,\n    type InputAudioBufferAppendEvent as InputAudioBufferAppendEvent,\n    type InputAudioBufferClearEvent as InputAudioBufferClearEvent,\n    type InputAudioBufferClearedEvent as InputAudioBufferClearedEvent,\n    type InputAudioBufferCommitEvent as InputAudioBufferCommitEvent,\n    type InputAudioBufferCommittedEvent as InputAudioBufferCommittedEvent,\n    type InputAudioBufferDtmfEventReceivedEvent as InputAudioBufferDtmfEventReceivedEvent,\n    type InputAudioBufferSpeechStartedEvent as InputAudioBufferSpeechStartedEvent,\n    type InputAudioBufferSpeechStoppedEvent as InputAudioBufferSpeechStoppedEvent,\n    type InputAudioBufferTimeoutTriggered as InputAudioBufferTimeoutTriggered,\n    type LogProbProperties as LogProbProperties,\n    type McpListToolsCompleted as McpListToolsCompleted,\n    type McpListToolsFailed as McpListToolsFailed,\n    type McpListToolsInProgress as McpListToolsInProgress,\n    type NoiseReductionType as NoiseReductionType,\n    type OutputAudioBufferClearEvent as OutputAudioBufferClearEvent,\n    type RateLimitsUpdatedEvent as RateLimitsUpdatedEvent,\n    type RealtimeAudioConfig as RealtimeAudioConfig,\n    type RealtimeAudioConfigInput as RealtimeAudioConfigInput,\n    type RealtimeAudioConfigOutput as RealtimeAudioConfigOutput,\n    type RealtimeAudioFormats as RealtimeAudioFormats,\n    type RealtimeAudioInputTurnDetection as RealtimeAudioInputTurnDetection,\n    type RealtimeClientEvent as RealtimeClientEvent,\n    type RealtimeConversationItemAssistantMessage as RealtimeConversationItemAssistantMessage,\n    type RealtimeConversationItemFunctionCall as RealtimeConversationItemFunctionCall,\n    type RealtimeConversationItemFunctionCallOutput as RealtimeConversationItemFunctionCallOutput,\n    type RealtimeConversationItemSystemMessage as RealtimeConversationItemSystemMessage,\n    type RealtimeConversationItemUserMessage as RealtimeConversationItemUserMessage,\n    type RealtimeError as RealtimeError,\n    type RealtimeErrorEvent as RealtimeErrorEvent,\n    type RealtimeFunctionTool as RealtimeFunctionTool,\n    type RealtimeMcpApprovalRequest as RealtimeMcpApprovalRequest,\n    type RealtimeMcpApprovalResponse as RealtimeMcpApprovalResponse,\n    type RealtimeMcpListTools as RealtimeMcpListTools,\n    type RealtimeMcpProtocolError as RealtimeMcpProtocolError,\n    type RealtimeMcpToolCall as RealtimeMcpToolCall,\n    type RealtimeMcpToolExecutionError as RealtimeMcpToolExecutionError,\n    type RealtimeMcphttpError as RealtimeMcphttpError,\n    type RealtimeReasoning as RealtimeReasoning,\n    type RealtimeReasoningEffort as RealtimeReasoningEffort,\n    type RealtimeResponse as RealtimeResponse,\n    type RealtimeResponseCreateAudioOutput as RealtimeResponseCreateAudioOutput,\n    type RealtimeResponseCreateMcpTool as RealtimeResponseCreateMcpTool,\n    type RealtimeResponseCreateParams as RealtimeResponseCreateParams,\n    type RealtimeResponseStatus as RealtimeResponseStatus,\n    type RealtimeResponseUsage as RealtimeResponseUsage,\n    type RealtimeResponseUsageInputTokenDetails as RealtimeResponseUsageInputTokenDetails,\n    type RealtimeResponseUsageOutputTokenDetails as RealtimeResponseUsageOutputTokenDetails,\n    type RealtimeServerEvent as RealtimeServerEvent,\n    type RealtimeSession as RealtimeSession,\n    type RealtimeSessionCreateRequest as RealtimeSessionCreateRequest,\n    type RealtimeToolChoiceConfig as RealtimeToolChoiceConfig,\n    type RealtimeToolsConfig as RealtimeToolsConfig,\n    type RealtimeToolsConfigUnion as RealtimeToolsConfigUnion,\n    type RealtimeTracingConfig as RealtimeTracingConfig,\n    type RealtimeTranscriptionSessionAudio as RealtimeTranscriptionSessionAudio,\n    type RealtimeTranscriptionSessionAudioInput as RealtimeTranscriptionSessionAudioInput,\n    type RealtimeTranscriptionSessionAudioInputTurnDetection as RealtimeTranscriptionSessionAudioInputTurnDetection,\n    type RealtimeTranscriptionSessionCreateRequest as RealtimeTranscriptionSessionCreateRequest,\n    type RealtimeTranslationClientEvent as RealtimeTranslationClientEvent,\n    type RealtimeTranslationClientSecretCreateRequest as RealtimeTranslationClientSecretCreateRequest,\n    type RealtimeTranslationClientSecretCreateResponse as RealtimeTranslationClientSecretCreateResponse,\n    type RealtimeTranslationInputAudioBufferAppendEvent as RealtimeTranslationInputAudioBufferAppendEvent,\n    type RealtimeTranslationInputTranscriptDeltaEvent as RealtimeTranslationInputTranscriptDeltaEvent,\n    type RealtimeTranslationOutputAudioDeltaEvent as RealtimeTranslationOutputAudioDeltaEvent,\n    type RealtimeTranslationOutputTranscriptDeltaEvent as RealtimeTranslationOutputTranscriptDeltaEvent,\n    type RealtimeTranslationServerEvent as RealtimeTranslationServerEvent,\n    type RealtimeTranslationSession as RealtimeTranslationSession,\n    type RealtimeTranslationSessionCloseEvent as RealtimeTranslationSessionCloseEvent,\n    type RealtimeTranslationSessionClosedEvent as RealtimeTranslationSessionClosedEvent,\n    type RealtimeTranslationSessionCreateRequest as RealtimeTranslationSessionCreateRequest,\n    type RealtimeTranslationSessionCreatedEvent as RealtimeTranslationSessionCreatedEvent,\n    type RealtimeTranslationSessionUpdateEvent as RealtimeTranslationSessionUpdateEvent,\n    type RealtimeTranslationSessionUpdateRequest as RealtimeTranslationSessionUpdateRequest,\n    type RealtimeTranslationSessionUpdatedEvent as RealtimeTranslationSessionUpdatedEvent,\n    type RealtimeTruncation as RealtimeTruncation,\n    type RealtimeTruncationRetentionRatio as RealtimeTruncationRetentionRatio,\n    type ResponseAudioDeltaEvent as ResponseAudioDeltaEvent,\n    type ResponseAudioDoneEvent as ResponseAudioDoneEvent,\n    type ResponseAudioTranscriptDeltaEvent as ResponseAudioTranscriptDeltaEvent,\n    type ResponseAudioTranscriptDoneEvent as ResponseAudioTranscriptDoneEvent,\n    type ResponseCancelEvent as ResponseCancelEvent,\n    type ResponseContentPartAddedEvent as ResponseContentPartAddedEvent,\n    type ResponseContentPartDoneEvent as ResponseContentPartDoneEvent,\n    type ResponseCreateEvent as ResponseCreateEvent,\n    type ResponseCreatedEvent as ResponseCreatedEvent,\n    type ResponseDoneEvent as ResponseDoneEvent,\n    type ResponseFunctionCallArgumentsDeltaEvent as ResponseFunctionCallArgumentsDeltaEvent,\n    type ResponseFunctionCallArgumentsDoneEvent as ResponseFunctionCallArgumentsDoneEvent,\n    type ResponseMcpCallArgumentsDelta as ResponseMcpCallArgumentsDelta,\n    type ResponseMcpCallArgumentsDone as ResponseMcpCallArgumentsDone,\n    type ResponseMcpCallCompleted as ResponseMcpCallCompleted,\n    type ResponseMcpCallFailed as ResponseMcpCallFailed,\n    type ResponseMcpCallInProgress as ResponseMcpCallInProgress,\n    type ResponseOutputItemAddedEvent as ResponseOutputItemAddedEvent,\n    type ResponseOutputItemDoneEvent as ResponseOutputItemDoneEvent,\n    type ResponseTextDeltaEvent as ResponseTextDeltaEvent,\n    type ResponseTextDoneEvent as ResponseTextDoneEvent,\n    type SessionCreatedEvent as SessionCreatedEvent,\n    type SessionUpdateEvent as SessionUpdateEvent,\n    type SessionUpdatedEvent as SessionUpdatedEvent,\n    type TranscriptionSessionUpdate as TranscriptionSessionUpdate,\n    type TranscriptionSessionUpdatedEvent as TranscriptionSessionUpdatedEvent,\n  };\n\n  export {\n    ClientSecrets as ClientSecrets,\n    type RealtimeSessionCreateResponse as RealtimeSessionCreateResponse,\n    type RealtimeTranscriptionSessionCreateResponse as RealtimeTranscriptionSessionCreateResponse,\n    type RealtimeTranscriptionSessionTurnDetection as RealtimeTranscriptionSessionTurnDetection,\n    type ClientSecretCreateResponse as ClientSecretCreateResponse,\n    type ClientSecretCreateParams as ClientSecretCreateParams,\n  };\n\n  export {\n    Calls as Calls,\n    type CallAcceptParams as CallAcceptParams,\n    type CallReferParams as CallReferParams,\n    type CallRejectParams as CallRejectParams,\n  };\n}\n", "import { OpenAIError } from '../error';\nimport type { ChatCompletionTool } from '../resources/chat/completions';\nimport {\n  ResponseTextConfig,\n  type FunctionTool,\n  type ParsedContent,\n  type ParsedResponse,\n  type ParsedResponseFunctionToolCall,\n  type ParsedResponseOutputItem,\n  type Response,\n  type ResponseCreateParamsBase,\n  type ResponseCreateParamsNonStreaming,\n  type ResponseFunctionToolCall,\n  type Tool,\n} from '../resources/responses/responses';\nimport { type AutoParseableTextFormat, isAutoParsableResponseFormat } from '../lib/parser';\n\nexport type ParseableToolsParams = Array<Tool> | ChatCompletionTool | null;\n\nexport type ResponseCreateParamsWithTools = ResponseCreateParamsBase & {\n  tools?: ParseableToolsParams;\n};\n\ntype TextConfigParams = { text?: ResponseTextConfig };\n\nexport type ExtractParsedContentFromParams<Params extends TextConfigParams> =\n  NonNullable<Params['text']>['format'] extends AutoParseableTextFormat<infer P> ? P : null;\n\nexport function maybeParseResponse<\n  Params extends ResponseCreateParamsBase | null,\n  ParsedT = Params extends null ? null : ExtractParsedContentFromParams<NonNullable<Params>>,\n>(response: Response, params: Params): ParsedResponse<ParsedT> {\n  if (!params || !hasAutoParseableInput(params)) {\n    return {\n      ...response,\n      output_parsed: null,\n      output: response.output.map((item) => {\n        if (item.type === 'function_call') {\n          return {\n            ...item,\n            parsed_arguments: null,\n          };\n        }\n\n        if (item.type === 'message') {\n          return {\n            ...item,\n            content: item.content.map((content) => ({\n              ...content,\n              parsed: null,\n            })),\n          };\n        } else {\n          return item;\n        }\n      }),\n    };\n  }\n\n  return parseResponse(response, params);\n}\n\nexport function parseResponse<\n  Params extends ResponseCreateParamsBase,\n  ParsedT = ExtractParsedContentFromParams<Params>,\n>(response: Response, params: Params): ParsedResponse<ParsedT> {\n  const output: Array<ParsedResponseOutputItem<ParsedT>> = response.output.map(\n    (item): ParsedResponseOutputItem<ParsedT> => {\n      if (item.type === 'function_call') {\n        return {\n          ...item,\n          parsed_arguments: parseToolCall(params, item),\n        };\n      }\n      if (item.type === 'message') {\n        const content: Array<ParsedContent<ParsedT>> = item.content.map((content) => {\n          if (content.type === 'output_text') {\n            return {\n              ...content,\n              parsed: parseTextFormat(params, content.text),\n            };\n          }\n\n          return content;\n        });\n\n        return {\n          ...item,\n          content,\n        };\n      }\n\n      return item;\n    },\n  );\n\n  const parsed: Omit<ParsedResponse<ParsedT>, 'output_parsed'> = Object.assign({}, response, { output });\n  if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n    addOutputText(parsed);\n  }\n\n  Object.defineProperty(parsed, 'output_parsed', {\n    enumerable: true,\n    get() {\n      for (const output of parsed.output) {\n        if (output.type !== 'message') {\n          continue;\n        }\n\n        for (const content of output.content) {\n          if (content.type === 'output_text' && content.parsed !== null) {\n            return content.parsed;\n          }\n        }\n      }\n\n      return null;\n    },\n  });\n\n  return parsed as ParsedResponse<ParsedT>;\n}\n\nfunction parseTextFormat<\n  Params extends ResponseCreateParamsBase,\n  ParsedT = ExtractParsedContentFromParams<Params>,\n>(params: Params, content: string): ParsedT | null {\n  if (params.text?.format?.type !== 'json_schema') {\n    return null;\n  }\n\n  if ('$parseRaw' in params.text?.format) {\n    const text_format = params.text?.format as unknown as AutoParseableTextFormat<ParsedT>;\n    return text_format.$parseRaw(content);\n  }\n\n  return JSON.parse(content);\n}\n\nexport function hasAutoParseableInput(params: ResponseCreateParamsWithTools): boolean {\n  if (isAutoParsableResponseFormat(params.text?.format)) {\n    return true;\n  }\n\n  return false;\n}\n\ntype ToolOptions = {\n  name: string;\n  arguments: any;\n  function?: ((args: any) => any) | undefined;\n};\n\nexport type AutoParseableResponseTool<\n  OptionsT extends ToolOptions,\n  HasFunction = OptionsT['function'] extends Function ? true : false,\n> = FunctionTool & {\n  __arguments: OptionsT['arguments']; // type-level only\n  __name: OptionsT['name']; // type-level only\n\n  $brand: 'auto-parseable-tool';\n  $callback: ((args: OptionsT['arguments']) => any) | undefined;\n  $parseRaw(args: string): OptionsT['arguments'];\n};\n\nexport function makeParseableResponseTool<OptionsT extends ToolOptions>(\n  tool: FunctionTool,\n  {\n    parser,\n    callback,\n  }: {\n    parser: (content: string) => OptionsT['arguments'];\n    callback: ((args: any) => any) | undefined;\n  },\n): AutoParseableResponseTool<OptionsT['arguments']> {\n  const obj = { ...tool };\n\n  Object.defineProperties(obj, {\n    $brand: {\n      value: 'auto-parseable-tool',\n      enumerable: false,\n    },\n    $parseRaw: {\n      value: parser,\n      enumerable: false,\n    },\n    $callback: {\n      value: callback,\n      enumerable: false,\n    },\n  });\n\n  return obj as AutoParseableResponseTool<OptionsT['arguments']>;\n}\n\nexport function isAutoParsableTool(tool: any): tool is AutoParseableResponseTool<any> {\n  return tool?.['$brand'] === 'auto-parseable-tool';\n}\n\nfunction getInputToolByName(input_tools: Array<Tool>, name: string): FunctionTool | undefined {\n  return input_tools.find((tool) => tool.type === 'function' && tool.name === name) as\n    | FunctionTool\n    | undefined;\n}\n\nfunction parseToolCall<Params extends ResponseCreateParamsBase>(\n  params: Params,\n  toolCall: ResponseFunctionToolCall,\n): ParsedResponseFunctionToolCall {\n  const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n\n  return {\n    ...toolCall,\n    ...toolCall,\n    parsed_arguments:\n      isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n      : inputTool?.strict ? JSON.parse(toolCall.arguments)\n      : null,\n  };\n}\n\nexport function shouldParseToolCall(\n  params: ResponseCreateParamsNonStreaming | null | undefined,\n  toolCall: ResponseFunctionToolCall,\n): boolean {\n  if (!params) {\n    return false;\n  }\n\n  const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n  return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\n\nexport function validateInputTools(tools: ChatCompletionTool[] | undefined) {\n  for (const tool of tools ?? []) {\n    if (tool.type !== 'function') {\n      throw new OpenAIError(\n        `Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``,\n      );\n    }\n\n    if (tool.function.strict !== true) {\n      throw new OpenAIError(\n        `The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`,\n      );\n    }\n  }\n}\n\nexport function addOutputText(rsp: Response): void {\n  const texts: string[] = [];\n  for (const output of rsp.output) {\n    if (output.type !== 'message') {\n      continue;\n    }\n\n    for (const content of output.content) {\n      if (content.type === 'output_text') {\n        texts.push(content.text);\n      }\n    }\n  }\n\n  rsp.output_text = texts.join('');\n}\n", "import {\n  ResponseTextConfig,\n  type ParsedResponse,\n  type Response,\n  type ResponseCreateParamsBase,\n  type ResponseCreateParamsStreaming,\n  type ResponseStreamEvent,\n} from '../../resources/responses/responses';\nimport { RequestOptions } from '../../internal/request-options';\nimport { APIUserAbortError, OpenAIError } from '../../error';\nimport OpenAI from '../../index';\nimport { type BaseEvents, EventStream } from '../EventStream';\nimport { type ResponseFunctionCallArgumentsDeltaEvent, type ResponseTextDeltaEvent } from './EventTypes';\nimport { maybeParseResponse, ParseableToolsParams } from '../ResponsesParser';\nimport { Stream } from '../../streaming';\n\nexport type ResponseStreamParams = ResponseCreateAndStreamParams | ResponseStreamByIdParams;\n\nexport type ResponseCreateAndStreamParams = Omit<ResponseCreateParamsBase, 'stream'> & {\n  stream?: true;\n};\n\nexport type ResponseStreamByIdParams = {\n  /**\n   * The ID of the response to stream.\n   */\n  response_id: string;\n  /**\n   * If provided, the stream will start after the event with the given sequence number.\n   */\n  starting_after?: number;\n  /**\n   * Configuration options for a text response from the model. Can be plain text or\n   * structured JSON data. Learn more:\n   *\n   * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n   * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n   */\n  text?: ResponseTextConfig;\n\n  /**\n   * An array of tools the model may call while generating a response. When continuing a stream, provide\n   * the same tools as the original request.\n   */\n  tools?: ParseableToolsParams;\n};\n\ntype ResponseEvents = BaseEvents &\n  Omit<\n    {\n      [K in ResponseStreamEvent['type']]: (event: Extract<ResponseStreamEvent, { type: K }>) => void;\n    },\n    'response.output_text.delta' | 'response.function_call_arguments.delta'\n  > & {\n    event: (event: ResponseStreamEvent) => void;\n    'response.output_text.delta': (event: ResponseTextDeltaEvent) => void;\n    'response.function_call_arguments.delta': (event: ResponseFunctionCallArgumentsDeltaEvent) => void;\n  };\n\nexport type ResponseStreamingParams = Omit<ResponseCreateParamsBase, 'stream'> & {\n  stream?: true;\n};\n\nexport class ResponseStream<ParsedT = null>\n  extends EventStream<ResponseEvents>\n  implements AsyncIterable<ResponseStreamEvent>\n{\n  #params: ResponseStreamingParams | null;\n  #currentResponseSnapshot: Response | undefined;\n  #finalResponse: ParsedResponse<ParsedT> | undefined;\n\n  constructor(params: ResponseStreamingParams | null) {\n    super();\n    this.#params = params;\n  }\n\n  static createResponse<ParsedT>(\n    client: OpenAI,\n    params: ResponseStreamParams,\n    options?: RequestOptions,\n  ): ResponseStream<ParsedT> {\n    const runner = new ResponseStream<ParsedT>(params as ResponseCreateParamsStreaming);\n    runner._run(() =>\n      runner._createOrRetrieveResponse(client, params, {\n        ...options,\n        headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n      }),\n    );\n    return runner;\n  }\n\n  #beginRequest() {\n    if (this.ended) return;\n    this.#currentResponseSnapshot = undefined;\n  }\n\n  #addEvent(this: ResponseStream<ParsedT>, event: ResponseStreamEvent, starting_after: number | null) {\n    if (this.ended) return;\n\n    const maybeEmit = (name: string, event: ResponseStreamEvent & { snapshot?: string }) => {\n      if (starting_after == null || event.sequence_number > starting_after) {\n        this._emit(name as any, event);\n      }\n    };\n\n    const response = this.#accumulateResponse(event);\n    maybeEmit('event', event);\n\n    switch (event.type) {\n      case 'response.output_text.delta': {\n        const output = response.output[event.output_index];\n        if (!output) {\n          throw new OpenAIError(`missing output at index ${event.output_index}`);\n        }\n        if (output.type === 'message') {\n          const content = output.content[event.content_index];\n          if (!content) {\n            throw new OpenAIError(`missing content at index ${event.content_index}`);\n          }\n          if (content.type !== 'output_text') {\n            throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n          }\n\n          maybeEmit('response.output_text.delta', {\n            ...event,\n            snapshot: content.text,\n          });\n        }\n        break;\n      }\n      case 'response.function_call_arguments.delta': {\n        const output = response.output[event.output_index];\n        if (!output) {\n          throw new OpenAIError(`missing output at index ${event.output_index}`);\n        }\n        if (output.type === 'function_call') {\n          maybeEmit('response.function_call_arguments.delta', {\n            ...event,\n            snapshot: output.arguments,\n          });\n        }\n        break;\n      }\n      default:\n        maybeEmit(event.type, event);\n        break;\n    }\n  }\n\n  #endRequest(): ParsedResponse<ParsedT> {\n    if (this.ended) {\n      throw new OpenAIError(`stream has ended, this shouldn't happen`);\n    }\n    const snapshot = this.#currentResponseSnapshot;\n    if (!snapshot) {\n      throw new OpenAIError(`request ended without sending any events`);\n    }\n    this.#currentResponseSnapshot = undefined;\n    const parsedResponse = finalizeResponse<ParsedT>(snapshot, this.#params);\n    this.#finalResponse = parsedResponse;\n\n    return parsedResponse;\n  }\n\n  protected async _createOrRetrieveResponse(\n    client: OpenAI,\n    params: ResponseStreamParams,\n    options?: RequestOptions,\n  ): Promise<ParsedResponse<ParsedT>> {\n    const signal = options?.signal;\n    if (signal) {\n      if (signal.aborted) this.controller.abort();\n      signal.addEventListener('abort', () => this.controller.abort());\n    }\n    this.#beginRequest();\n\n    let stream: Stream<ResponseStreamEvent> | undefined;\n    let starting_after: number | null = null;\n    if ('response_id' in params) {\n      stream = await client.responses.retrieve(\n        params.response_id,\n        { stream: true },\n        { ...options, signal: this.controller.signal, stream: true },\n      );\n      starting_after = params.starting_after ?? null;\n    } else {\n      stream = await client.responses.create(\n        { ...params, stream: true },\n        { ...options, signal: this.controller.signal },\n      );\n    }\n\n    this._connected();\n    for await (const event of stream) {\n      this.#addEvent(event, starting_after);\n    }\n    if (stream.controller.signal?.aborted) {\n      throw new APIUserAbortError();\n    }\n    return this.#endRequest();\n  }\n\n  #accumulateResponse(event: ResponseStreamEvent): Response {\n    let snapshot = this.#currentResponseSnapshot;\n    if (!snapshot) {\n      if (event.type !== 'response.created') {\n        throw new OpenAIError(\n          `When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`,\n        );\n      }\n      snapshot = this.#currentResponseSnapshot = event.response;\n      return snapshot;\n    }\n\n    switch (event.type) {\n      case 'response.output_item.added': {\n        snapshot.output.push(event.item);\n        break;\n      }\n      case 'response.content_part.added': {\n        const output = snapshot.output[event.output_index];\n        if (!output) {\n          throw new OpenAIError(`missing output at index ${event.output_index}`);\n        }\n        const type = output.type;\n        const part = event.part;\n        if (type === 'message' && part.type !== 'reasoning_text') {\n          output.content.push(part);\n        } else if (type === 'reasoning' && part.type === 'reasoning_text') {\n          if (!output.content) {\n            output.content = [];\n          }\n          output.content.push(part);\n        }\n        break;\n      }\n      case 'response.output_text.delta': {\n        const output = snapshot.output[event.output_index];\n        if (!output) {\n          throw new OpenAIError(`missing output at index ${event.output_index}`);\n        }\n        if (output.type === 'message') {\n          const content = output.content[event.content_index];\n          if (!content) {\n            throw new OpenAIError(`missing content at index ${event.content_index}`);\n          }\n          if (content.type !== 'output_text') {\n            throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n          }\n          content.text += event.delta;\n        }\n        break;\n      }\n      case 'response.function_call_arguments.delta': {\n        const output = snapshot.output[event.output_index];\n        if (!output) {\n          throw new OpenAIError(`missing output at index ${event.output_index}`);\n        }\n        if (output.type === 'function_call') {\n          output.arguments += event.delta;\n        }\n        break;\n      }\n      case 'response.reasoning_text.delta': {\n        const output = snapshot.output[event.output_index];\n        if (!output) {\n          throw new OpenAIError(`missing output at index ${event.output_index}`);\n        }\n        if (output.type === 'reasoning') {\n          const content = output.content?.[event.content_index];\n          if (!content) {\n            throw new OpenAIError(`missing content at index ${event.content_index}`);\n          }\n          if (content.type !== 'reasoning_text') {\n            throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n          }\n          content.text += event.delta;\n        }\n        break;\n      }\n      case 'response.completed': {\n        this.#currentResponseSnapshot = event.response;\n        break;\n      }\n    }\n\n    return snapshot;\n  }\n\n  [Symbol.asyncIterator](this: ResponseStream<ParsedT>): AsyncIterator<ResponseStreamEvent> {\n    const pushQueue: ResponseStreamEvent[] = [];\n    const readQueue: {\n      resolve: (event: ResponseStreamEvent | undefined) => void;\n      reject: (err: unknown) => void;\n    }[] = [];\n    let done = false;\n\n    this.on('event', (event) => {\n      const reader = readQueue.shift();\n      if (reader) {\n        reader.resolve(event);\n      } else {\n        pushQueue.push(event);\n      }\n    });\n\n    this.on('end', () => {\n      done = true;\n      for (const reader of readQueue) {\n        reader.resolve(undefined);\n      }\n      readQueue.length = 0;\n    });\n\n    this.on('abort', (err) => {\n      done = true;\n      for (const reader of readQueue) {\n        reader.reject(err);\n      }\n      readQueue.length = 0;\n    });\n\n    this.on('error', (err) => {\n      done = true;\n      for (const reader of readQueue) {\n        reader.reject(err);\n      }\n      readQueue.length = 0;\n    });\n\n    return {\n      next: async (): Promise<IteratorResult<ResponseStreamEvent>> => {\n        if (!pushQueue.length) {\n          if (done) {\n            return { value: undefined, done: true };\n          }\n          return new Promise<ResponseStreamEvent | undefined>((resolve, reject) =>\n            readQueue.push({ resolve, reject }),\n          ).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n        }\n        const event = pushQueue.shift()!;\n        return { value: event, done: false };\n      },\n      return: async () => {\n        this.abort();\n        return { value: undefined, done: true };\n      },\n    };\n  }\n\n  /**\n   * @returns a promise that resolves with the final Response, or rejects\n   * if an error occurred or the stream ended prematurely without producing a REsponse.\n   */\n  async finalResponse(): Promise<ParsedResponse<ParsedT>> {\n    await this.done();\n    const response = this.#finalResponse;\n    if (!response) throw new OpenAIError('stream ended without producing a ChatCompletion');\n    return response;\n  }\n}\n\nfunction finalizeResponse<ParsedT>(\n  snapshot: Response,\n  params: ResponseStreamingParams | null,\n): ParsedResponse<ParsedT> {\n  return maybeParseResponse(snapshot, params);\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as ResponsesAPI from './responses';\nimport { ResponseItemsPage } from './responses';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../core/pagination';\nimport { RequestOptions } from '../../internal/request-options';\nimport { path } from '../../internal/utils/path';\n\nexport class InputItems extends APIResource {\n  /**\n   * Returns a list of input items for a given response.\n   *\n   * @example\n   * ```ts\n   * // Automatically fetches more pages as needed.\n   * for await (const responseItem of client.responses.inputItems.list(\n   *   'response_id',\n   * )) {\n   *   // ...\n   * }\n   * ```\n   */\n  list(\n    responseID: string,\n    query: InputItemListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<ResponseItemsPage, ResponsesAPI.ResponseItem> {\n    return this._client.getAPIList(\n      path`/responses/${responseID}/input_items`,\n      CursorPage<ResponsesAPI.ResponseItem>,\n      { query, ...options, __security: { bearerAuth: true } },\n    );\n  }\n}\n\n/**\n * A list of Response items.\n */\nexport interface ResponseItemList {\n  /**\n   * A list of items used to generate this response.\n   */\n  data: Array<ResponsesAPI.ResponseItem>;\n\n  /**\n   * The ID of the first item in the list.\n   */\n  first_id: string;\n\n  /**\n   * Whether there are more items available.\n   */\n  has_more: boolean;\n\n  /**\n   * The ID of the last item in the list.\n   */\n  last_id: string;\n\n  /**\n   * The type of object returned, must be `list`.\n   */\n  object: 'list';\n}\n\nexport interface InputItemListParams extends CursorPageParams {\n  /**\n   * Additional fields to include in the response. See the `include` parameter for\n   * Response creation above for more information.\n   */\n  include?: Array<ResponsesAPI.ResponseIncludable>;\n\n  /**\n   * The order to return the input items in. Default is `desc`.\n   *\n   * - `asc`: Return the input items in ascending order.\n   * - `desc`: Return the input items in descending order.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport declare namespace InputItems {\n  export { type ResponseItemList as ResponseItemList, type InputItemListParams as InputItemListParams };\n}\n\nexport { type ResponseItemsPage };\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as Shared from '../shared';\nimport * as ResponsesAPI from './responses';\nimport { APIPromise } from '../../core/api-promise';\nimport { RequestOptions } from '../../internal/request-options';\n\nexport class InputTokens extends APIResource {\n  /**\n   * Returns input token counts of the request.\n   *\n   * Returns an object with `object` set to `response.input_tokens` and an\n   * `input_tokens` count.\n   *\n   * @example\n   * ```ts\n   * const response = await client.responses.inputTokens.count();\n   * ```\n   */\n  count(\n    body: InputTokenCountParams | null | undefined = {},\n    options?: RequestOptions,\n  ): APIPromise<InputTokenCountResponse> {\n    return this._client.post('/responses/input_tokens', {\n      body,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\nexport interface InputTokenCountResponse {\n  input_tokens: number;\n\n  object: 'response.input_tokens';\n}\n\nexport interface InputTokenCountParams {\n  /**\n   * The conversation that this response belongs to. Items from this conversation are\n   * prepended to `input_items` for this response request. Input items and output\n   * items from this response are automatically added to this conversation after this\n   * response completes.\n   */\n  conversation?: string | ResponsesAPI.ResponseConversationParam | null;\n\n  /**\n   * Text, image, or file inputs to the model, used to generate a response\n   */\n  input?: string | Array<ResponsesAPI.ResponseInputItem> | null;\n\n  /**\n   * A system (or developer) message inserted into the model's context. When used\n   * along with `previous_response_id`, the instructions from a previous response\n   * will not be carried over to the next response. This makes it simple to swap out\n   * system (or developer) messages in new responses.\n   */\n  instructions?: string | null;\n\n  /**\n   * Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a\n   * wide range of models with different capabilities, performance characteristics,\n   * and price points. Refer to the\n   * [model guide](https://platform.openai.com/docs/models) to browse and compare\n   * available models.\n   */\n  model?: string | null;\n\n  /**\n   * Whether to allow the model to run tool calls in parallel.\n   */\n  parallel_tool_calls?: boolean | null;\n\n  /**\n   * The unique ID of the previous response to the model. Use this to create\n   * multi-turn conversations. Learn more about\n   * [conversation state](https://platform.openai.com/docs/guides/conversation-state).\n   * Cannot be used in conjunction with `conversation`.\n   */\n  previous_response_id?: string | null;\n\n  /**\n   * **gpt-5 and o-series models only** Configuration options for\n   * [reasoning models](https://platform.openai.com/docs/guides/reasoning).\n   */\n  reasoning?: Shared.Reasoning | null;\n\n  /**\n   * Configuration options for a text response from the model. Can be plain text or\n   * structured JSON data. Learn more:\n   *\n   * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n   * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n   */\n  text?: InputTokenCountParams.Text | null;\n\n  /**\n   * Controls which tool the model should use, if any.\n   */\n  tool_choice?:\n    | ResponsesAPI.ToolChoiceOptions\n    | ResponsesAPI.ToolChoiceAllowed\n    | ResponsesAPI.ToolChoiceTypes\n    | ResponsesAPI.ToolChoiceFunction\n    | ResponsesAPI.ToolChoiceMcp\n    | ResponsesAPI.ToolChoiceCustom\n    | ResponsesAPI.ToolChoiceApplyPatch\n    | ResponsesAPI.ToolChoiceShell\n    | null;\n\n  /**\n   * An array of tools the model may call while generating a response. You can\n   * specify which tool to use by setting the `tool_choice` parameter.\n   */\n  tools?: Array<ResponsesAPI.Tool> | null;\n\n  /**\n   * The truncation strategy to use for the model response. - `auto`: If the input to\n   * this Response exceeds the model's context window size, the model will truncate\n   * the response to fit the context window by dropping items from the beginning of\n   * the conversation. - `disabled` (default): If the input size will exceed the\n   * context window size for a model, the request will fail with a 400 error.\n   */\n  truncation?: 'auto' | 'disabled';\n}\n\nexport namespace InputTokenCountParams {\n  /**\n   * Configuration options for a text response from the model. Can be plain text or\n   * structured JSON data. Learn more:\n   *\n   * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n   * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n   */\n  export interface Text {\n    /**\n     * An object specifying the format that the model must output.\n     *\n     * Configuring `{ \"type\": \"json_schema\" }` enables Structured Outputs, which\n     * ensures the model will match your supplied JSON schema. Learn more in the\n     * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n     *\n     * The default format is `{ \"type\": \"text\" }` with no additional options.\n     *\n     * **Not recommended for gpt-4o and newer models:**\n     *\n     * Setting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\n     * ensures the message the model generates is valid JSON. Using `json_schema` is\n     * preferred for models that support it.\n     */\n    format?: ResponsesAPI.ResponseFormatTextConfig;\n\n    /**\n     * Constrains the verbosity of the model's response. Lower values will result in\n     * more concise responses, while higher values will result in more verbose\n     * responses. Currently supported values are `low`, `medium`, and `high`.\n     */\n    verbosity?: 'low' | 'medium' | 'high' | null;\n  }\n}\n\nexport declare namespace InputTokens {\n  export {\n    type InputTokenCountResponse as InputTokenCountResponse,\n    type InputTokenCountParams as InputTokenCountParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport {\n  type ExtractParsedContentFromParams,\n  parseResponse,\n  type ResponseCreateParamsWithTools,\n  addOutputText,\n} from '../../lib/ResponsesParser';\nimport { ResponseStream, ResponseStreamParams } from '../../lib/responses/ResponseStream';\nimport { APIResource } from '../../core/resource';\nimport * as ResponsesAPI from './responses';\nimport * as Shared from '../shared';\nimport * as InputItemsAPI from './input-items';\nimport { InputItemListParams, InputItems, ResponseItemList } from './input-items';\nimport * as InputTokensAPI from './input-tokens';\nimport { InputTokenCountParams, InputTokenCountResponse, InputTokens } from './input-tokens';\nimport { APIPromise } from '../../core/api-promise';\nimport { CursorPage } from '../../core/pagination';\nimport { Stream } from '../../core/streaming';\nimport { buildHeaders } from '../../internal/headers';\nimport { RequestOptions } from '../../internal/request-options';\nimport { path } from '../../internal/utils/path';\n\nexport interface ParsedResponseOutputText<ParsedT> extends ResponseOutputText {\n  parsed: ParsedT | null;\n}\n\nexport type ParsedContent<ParsedT> = ParsedResponseOutputText<ParsedT> | ResponseOutputRefusal;\n\nexport interface ParsedResponseOutputMessage<ParsedT> extends ResponseOutputMessage {\n  content: ParsedContent<ParsedT>[];\n}\n\nexport interface ParsedResponseFunctionToolCall extends ResponseFunctionToolCall {\n  parsed_arguments: any;\n}\n\nexport type ParsedResponseOutputItem<ParsedT> =\n  | ParsedResponseOutputMessage<ParsedT>\n  | ParsedResponseFunctionToolCall\n  | ResponseFileSearchToolCall\n  | ResponseFunctionToolCallOutputItem\n  | ResponseFunctionWebSearch\n  | ResponseComputerToolCall\n  | ResponseComputerToolCallOutputItem\n  | ResponseToolSearchCall\n  | ResponseToolSearchOutputItem\n  | ResponseReasoningItem\n  | ResponseCompactionItem\n  | ResponseOutputItem.ImageGenerationCall\n  | ResponseCodeInterpreterToolCall\n  | ResponseOutputItem.LocalShellCall\n  | ResponseOutputItem.LocalShellCallOutput\n  | ResponseFunctionShellToolCall\n  | ResponseFunctionShellToolCallOutput\n  | ResponseApplyPatchToolCall\n  | ResponseApplyPatchToolCallOutput\n  | ResponseOutputItem.McpCall\n  | ResponseOutputItem.McpListTools\n  | ResponseOutputItem.McpApprovalRequest\n  | ResponseOutputItem.McpApprovalResponse\n  | ResponseCustomToolCall\n  | ResponseCustomToolCallOutputItem;\n\nexport interface ParsedResponse<ParsedT> extends Response {\n  output: Array<ParsedResponseOutputItem<ParsedT>>;\n\n  output_parsed: ParsedT | null;\n}\n\nexport type ResponseParseParams = ResponseCreateParamsNonStreaming;\n\nexport class Responses extends APIResource {\n  inputItems: InputItemsAPI.InputItems = new InputItemsAPI.InputItems(this._client);\n  inputTokens: InputTokensAPI.InputTokens = new InputTokensAPI.InputTokens(this._client);\n\n  /**\n   * Creates a model response. Provide\n   * [text](https://platform.openai.com/docs/guides/text) or\n   * [image](https://platform.openai.com/docs/guides/images) inputs to generate\n   * [text](https://platform.openai.com/docs/guides/text) or\n   * [JSON](https://platform.openai.com/docs/guides/structured-outputs) outputs. Have\n   * the model call your own\n   * [custom code](https://platform.openai.com/docs/guides/function-calling) or use\n   * built-in [tools](https://platform.openai.com/docs/guides/tools) like\n   * [web search](https://platform.openai.com/docs/guides/tools-web-search) or\n   * [file search](https://platform.openai.com/docs/guides/tools-file-search) to use\n   * your own data as input for the model's response.\n   *\n   * @example\n   * ```ts\n   * const response = await client.responses.create();\n   * ```\n   */\n  create(body: ResponseCreateParamsNonStreaming, options?: RequestOptions): APIPromise<Response>;\n  create(\n    body: ResponseCreateParamsStreaming,\n    options?: RequestOptions,\n  ): APIPromise<Stream<ResponseStreamEvent>>;\n  create(\n    body: ResponseCreateParamsBase,\n    options?: RequestOptions,\n  ): APIPromise<Stream<ResponseStreamEvent> | Response>;\n  create(\n    body: ResponseCreateParams,\n    options?: RequestOptions,\n  ): APIPromise<Response> | APIPromise<Stream<ResponseStreamEvent>> {\n    return (\n      this._client.post('/responses', {\n        body,\n        ...options,\n        stream: body.stream ?? false,\n        __security: { bearerAuth: true },\n      }) as APIPromise<Response> | APIPromise<Stream<ResponseStreamEvent>>\n    )._thenUnwrap((rsp) => {\n      if ('object' in rsp && rsp.object === 'response') {\n        addOutputText(rsp as Response);\n      }\n\n      return rsp;\n    }) as APIPromise<Response> | APIPromise<Stream<ResponseStreamEvent>>;\n  }\n\n  /**\n   * Retrieves a model response with the given ID.\n   *\n   * @example\n   * ```ts\n   * const response = await client.responses.retrieve(\n   *   'resp_677efb5139a88190b512bc3fef8e535d',\n   * );\n   * ```\n   */\n  retrieve(\n    responseID: string,\n    query?: ResponseRetrieveParamsNonStreaming,\n    options?: RequestOptions,\n  ): APIPromise<Response>;\n  retrieve(\n    responseID: string,\n    query: ResponseRetrieveParamsStreaming,\n    options?: RequestOptions,\n  ): APIPromise<Stream<ResponseStreamEvent>>;\n  retrieve(\n    responseID: string,\n    query?: ResponseRetrieveParamsBase | undefined,\n    options?: RequestOptions,\n  ): APIPromise<Stream<ResponseStreamEvent> | Response>;\n  retrieve(\n    responseID: string,\n    query: ResponseRetrieveParams | undefined = {},\n    options?: RequestOptions,\n  ): APIPromise<Response> | APIPromise<Stream<ResponseStreamEvent>> {\n    return (\n      this._client.get(path`/responses/${responseID}`, {\n        query,\n        ...options,\n        stream: query?.stream ?? false,\n        __security: { bearerAuth: true },\n      }) as APIPromise<Response> | APIPromise<Stream<ResponseStreamEvent>>\n    )._thenUnwrap((rsp) => {\n      if ('object' in rsp && rsp.object === 'response') {\n        addOutputText(rsp as Response);\n      }\n\n      return rsp;\n    }) as APIPromise<Response> | APIPromise<Stream<ResponseStreamEvent>>;\n  }\n\n  /**\n   * Deletes a model response with the given ID.\n   *\n   * @example\n   * ```ts\n   * await client.responses.delete(\n   *   'resp_677efb5139a88190b512bc3fef8e535d',\n   * );\n   * ```\n   */\n  delete(responseID: string, options?: RequestOptions): APIPromise<void> {\n    return this._client.delete(path`/responses/${responseID}`, {\n      ...options,\n      headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  parse<Params extends ResponseCreateParamsWithTools, ParsedT = ExtractParsedContentFromParams<Params>>(\n    body: Params,\n    options?: RequestOptions,\n  ): APIPromise<ParsedResponse<ParsedT>> {\n    return this._client.responses\n      .create(body, options)\n      ._thenUnwrap((response) => parseResponse(response as Response, body));\n  }\n\n  /**\n   * Creates a model response stream\n   */\n  stream<Params extends ResponseStreamParams, ParsedT = ExtractParsedContentFromParams<Params>>(\n    body: Params,\n    options?: RequestOptions,\n  ): ResponseStream<ParsedT> {\n    return ResponseStream.createResponse<ParsedT>(this._client, body, options);\n  }\n\n  /**\n   * Cancels a model response with the given ID. Only responses created with the\n   * `background` parameter set to `true` can be cancelled.\n   * [Learn more](https://platform.openai.com/docs/guides/background).\n   *\n   * @example\n   * ```ts\n   * const response = await client.responses.cancel(\n   *   'resp_677efb5139a88190b512bc3fef8e535d',\n   * );\n   * ```\n   */\n  cancel(responseID: string, options?: RequestOptions): APIPromise<Response> {\n    return this._client.post(path`/responses/${responseID}/cancel`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Compact a conversation. Returns a compacted response object.\n   *\n   * Learn when and how to compact long-running conversations in the\n   * [conversation state guide](https://platform.openai.com/docs/guides/conversation-state#managing-the-context-window).\n   * For ZDR-compatible compaction details, see\n   * [Compaction (advanced)](https://platform.openai.com/docs/guides/conversation-state#compaction-advanced).\n   *\n   * @example\n   * ```ts\n   * const compactedResponse = await client.responses.compact({\n   *   model: 'gpt-5.4',\n   * });\n   * ```\n   */\n  compact(body: ResponseCompactParams, options?: RequestOptions): APIPromise<CompactedResponse> {\n    return this._client.post('/responses/compact', { body, ...options, __security: { bearerAuth: true } });\n  }\n}\n\nexport type ResponseItemsPage = CursorPage<ResponseItem>;\n\n/**\n * Allows the assistant to create, delete, or update files using unified diffs.\n */\nexport interface ApplyPatchTool {\n  /**\n   * The type of the tool. Always `apply_patch`.\n   */\n  type: 'apply_patch';\n}\n\nexport interface CompactedResponse {\n  /**\n   * The unique identifier for the compacted response.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (in seconds) when the compacted conversation was created.\n   */\n  created_at: number;\n\n  /**\n   * The object type. Always `response.compaction`.\n   */\n  object: 'response.compaction';\n\n  /**\n   * The compacted list of output items. This is a list of all user messages,\n   * followed by a single compaction item.\n   */\n  output: Array<ResponseOutputItem>;\n\n  /**\n   * Token accounting for the compaction pass, including cached, reasoning, and total\n   * tokens.\n   */\n  usage: ResponseUsage;\n}\n\n/**\n * A click action.\n */\nexport type ComputerAction =\n  | ComputerAction.Click\n  | ComputerAction.DoubleClick\n  | ComputerAction.Drag\n  | ComputerAction.Keypress\n  | ComputerAction.Move\n  | ComputerAction.Screenshot\n  | ComputerAction.Scroll\n  | ComputerAction.Type\n  | ComputerAction.Wait;\n\nexport namespace ComputerAction {\n  /**\n   * A click action.\n   */\n  export interface Click {\n    /**\n     * Indicates which mouse button was pressed during the click. One of `left`,\n     * `right`, `wheel`, `back`, or `forward`.\n     */\n    button: 'left' | 'right' | 'wheel' | 'back' | 'forward';\n\n    /**\n     * Specifies the event type. For a click action, this property is always `click`.\n     */\n    type: 'click';\n\n    /**\n     * The x-coordinate where the click occurred.\n     */\n    x: number;\n\n    /**\n     * The y-coordinate where the click occurred.\n     */\n    y: number;\n\n    /**\n     * The keys being held while clicking.\n     */\n    keys?: Array<string> | null;\n  }\n\n  /**\n   * A double click action.\n   */\n  export interface DoubleClick {\n    /**\n     * The keys being held while double-clicking.\n     */\n    keys: Array<string> | null;\n\n    /**\n     * Specifies the event type. For a double click action, this property is always set\n     * to `double_click`.\n     */\n    type: 'double_click';\n\n    /**\n     * The x-coordinate where the double click occurred.\n     */\n    x: number;\n\n    /**\n     * The y-coordinate where the double click occurred.\n     */\n    y: number;\n  }\n\n  /**\n   * A drag action.\n   */\n  export interface Drag {\n    /**\n     * An array of coordinates representing the path of the drag action. Coordinates\n     * will appear as an array of objects, eg\n     *\n     * ```\n     * [\n     *   { x: 100, y: 200 },\n     *   { x: 200, y: 300 }\n     * ]\n     * ```\n     */\n    path: Array<Drag.Path>;\n\n    /**\n     * Specifies the event type. For a drag action, this property is always set to\n     * `drag`.\n     */\n    type: 'drag';\n\n    /**\n     * The keys being held while dragging the mouse.\n     */\n    keys?: Array<string> | null;\n  }\n\n  export namespace Drag {\n    /**\n     * An x/y coordinate pair, e.g. `{ x: 100, y: 200 }`.\n     */\n    export interface Path {\n      /**\n       * The x-coordinate.\n       */\n      x: number;\n\n      /**\n       * The y-coordinate.\n       */\n      y: number;\n    }\n  }\n\n  /**\n   * A collection of keypresses the model would like to perform.\n   */\n  export interface Keypress {\n    /**\n     * The combination of keys the model is requesting to be pressed. This is an array\n     * of strings, each representing a key.\n     */\n    keys: Array<string>;\n\n    /**\n     * Specifies the event type. For a keypress action, this property is always set to\n     * `keypress`.\n     */\n    type: 'keypress';\n  }\n\n  /**\n   * A mouse move action.\n   */\n  export interface Move {\n    /**\n     * Specifies the event type. For a move action, this property is always set to\n     * `move`.\n     */\n    type: 'move';\n\n    /**\n     * The x-coordinate to move to.\n     */\n    x: number;\n\n    /**\n     * The y-coordinate to move to.\n     */\n    y: number;\n\n    /**\n     * The keys being held while moving the mouse.\n     */\n    keys?: Array<string> | null;\n  }\n\n  /**\n   * A screenshot action.\n   */\n  export interface Screenshot {\n    /**\n     * Specifies the event type. For a screenshot action, this property is always set\n     * to `screenshot`.\n     */\n    type: 'screenshot';\n  }\n\n  /**\n   * A scroll action.\n   */\n  export interface Scroll {\n    /**\n     * The horizontal scroll distance.\n     */\n    scroll_x: number;\n\n    /**\n     * The vertical scroll distance.\n     */\n    scroll_y: number;\n\n    /**\n     * Specifies the event type. For a scroll action, this property is always set to\n     * `scroll`.\n     */\n    type: 'scroll';\n\n    /**\n     * The x-coordinate where the scroll occurred.\n     */\n    x: number;\n\n    /**\n     * The y-coordinate where the scroll occurred.\n     */\n    y: number;\n\n    /**\n     * The keys being held while scrolling.\n     */\n    keys?: Array<string> | null;\n  }\n\n  /**\n   * An action to type in text.\n   */\n  export interface Type {\n    /**\n     * The text to type.\n     */\n    text: string;\n\n    /**\n     * Specifies the event type. For a type action, this property is always set to\n     * `type`.\n     */\n    type: 'type';\n  }\n\n  /**\n   * A wait action.\n   */\n  export interface Wait {\n    /**\n     * Specifies the event type. For a wait action, this property is always set to\n     * `wait`.\n     */\n    type: 'wait';\n  }\n}\n\n/**\n * Flattened batched actions for `computer_use`. Each action includes an `type`\n * discriminator and action-specific fields.\n */\nexport type ComputerActionList = Array<ComputerAction>;\n\n/**\n * A tool that controls a virtual computer. Learn more about the\n * [computer tool](https://platform.openai.com/docs/guides/tools-computer-use).\n */\nexport interface ComputerTool {\n  /**\n   * The type of the computer tool. Always `computer`.\n   */\n  type: 'computer';\n}\n\n/**\n * A tool that controls a virtual computer. Learn more about the\n * [computer tool](https://platform.openai.com/docs/guides/tools-computer-use).\n */\nexport interface ComputerUsePreviewTool {\n  /**\n   * The height of the computer display.\n   */\n  display_height: number;\n\n  /**\n   * The width of the computer display.\n   */\n  display_width: number;\n\n  /**\n   * The type of computer environment to control.\n   */\n  environment: 'windows' | 'mac' | 'linux' | 'ubuntu' | 'browser';\n\n  /**\n   * The type of the computer use tool. Always `computer_use_preview`.\n   */\n  type: 'computer_use_preview';\n}\n\nexport interface ContainerAuto {\n  /**\n   * Automatically creates a container for this request\n   */\n  type: 'container_auto';\n\n  /**\n   * An optional list of uploaded files to make available to your code.\n   */\n  file_ids?: Array<string>;\n\n  /**\n   * The memory limit for the container.\n   */\n  memory_limit?: '1g' | '4g' | '16g' | '64g' | null;\n\n  /**\n   * Network access policy for the container.\n   */\n  network_policy?: ContainerNetworkPolicyDisabled | ContainerNetworkPolicyAllowlist;\n\n  /**\n   * An optional list of skills referenced by id or inline data.\n   */\n  skills?: Array<SkillReference | InlineSkill>;\n}\n\nexport interface ContainerNetworkPolicyAllowlist {\n  /**\n   * A list of allowed domains when type is `allowlist`.\n   */\n  allowed_domains: Array<string>;\n\n  /**\n   * Allow outbound network access only to specified domains. Always `allowlist`.\n   */\n  type: 'allowlist';\n\n  /**\n   * Optional domain-scoped secrets for allowlisted domains.\n   */\n  domain_secrets?: Array<ContainerNetworkPolicyDomainSecret>;\n}\n\nexport interface ContainerNetworkPolicyDisabled {\n  /**\n   * Disable outbound network access. Always `disabled`.\n   */\n  type: 'disabled';\n}\n\nexport interface ContainerNetworkPolicyDomainSecret {\n  /**\n   * The domain associated with the secret.\n   */\n  domain: string;\n\n  /**\n   * The name of the secret to inject for the domain.\n   */\n  name: string;\n\n  /**\n   * The secret value to inject for the domain.\n   */\n  value: string;\n}\n\nexport interface ContainerReference {\n  /**\n   * The ID of the referenced container.\n   */\n  container_id: string;\n\n  /**\n   * References a container created with the /v1/containers endpoint\n   */\n  type: 'container_reference';\n}\n\n/**\n * A custom tool that processes input using a specified format. Learn more about\n * [custom tools](https://platform.openai.com/docs/guides/function-calling#custom-tools)\n */\nexport interface CustomTool {\n  /**\n   * The name of the custom tool, used to identify it in tool calls.\n   */\n  name: string;\n\n  /**\n   * The type of the custom tool. Always `custom`.\n   */\n  type: 'custom';\n\n  /**\n   * Whether this tool should be deferred and discovered via tool search.\n   */\n  defer_loading?: boolean;\n\n  /**\n   * Optional description of the custom tool, used to provide more context.\n   */\n  description?: string;\n\n  /**\n   * The input format for the custom tool. Default is unconstrained text.\n   */\n  format?: Shared.CustomToolInputFormat;\n}\n\n/**\n * A message input to the model with a role indicating instruction following\n * hierarchy. Instructions given with the `developer` or `system` role take\n * precedence over instructions given with the `user` role. Messages with the\n * `assistant` role are presumed to have been generated by the model in previous\n * interactions.\n */\nexport interface EasyInputMessage {\n  /**\n   * Text, image, or audio input to the model, used to generate a response. Can also\n   * contain previous assistant responses.\n   */\n  content: string | ResponseInputMessageContentList;\n\n  /**\n   * The role of the message input. One of `user`, `assistant`, `system`, or\n   * `developer`.\n   */\n  role: 'user' | 'assistant' | 'system' | 'developer';\n\n  /**\n   * Labels an `assistant` message as intermediate commentary (`commentary`) or the\n   * final answer (`final_answer`). For models like `gpt-5.3-codex` and beyond, when\n   * sending follow-up requests, preserve and resend phase on all assistant messages\n   * \u2014 dropping it can degrade performance. Not used for user messages.\n   */\n  phase?: 'commentary' | 'final_answer' | null;\n\n  /**\n   * The type of the message input. Always `message`.\n   */\n  type?: 'message';\n}\n\n/**\n * A tool that searches for relevant content from uploaded files. Learn more about\n * the\n * [file search tool](https://platform.openai.com/docs/guides/tools-file-search).\n */\nexport interface FileSearchTool {\n  /**\n   * The type of the file search tool. Always `file_search`.\n   */\n  type: 'file_search';\n\n  /**\n   * The IDs of the vector stores to search.\n   */\n  vector_store_ids: Array<string>;\n\n  /**\n   * A filter to apply.\n   */\n  filters?: Shared.ComparisonFilter | Shared.CompoundFilter | null;\n\n  /**\n   * The maximum number of results to return. This number should be between 1 and 50\n   * inclusive.\n   */\n  max_num_results?: number;\n\n  /**\n   * Ranking options for search.\n   */\n  ranking_options?: FileSearchTool.RankingOptions;\n}\n\nexport namespace FileSearchTool {\n  /**\n   * Ranking options for search.\n   */\n  export interface RankingOptions {\n    /**\n     * Weights that control how reciprocal rank fusion balances semantic embedding\n     * matches versus sparse keyword matches when hybrid search is enabled.\n     */\n    hybrid_search?: RankingOptions.HybridSearch;\n\n    /**\n     * The ranker to use for the file search.\n     */\n    ranker?: 'auto' | 'default-2024-11-15';\n\n    /**\n     * The score threshold for the file search, a number between 0 and 1. Numbers\n     * closer to 1 will attempt to return only the most relevant results, but may\n     * return fewer results.\n     */\n    score_threshold?: number;\n  }\n\n  export namespace RankingOptions {\n    /**\n     * Weights that control how reciprocal rank fusion balances semantic embedding\n     * matches versus sparse keyword matches when hybrid search is enabled.\n     */\n    export interface HybridSearch {\n      /**\n       * The weight of the embedding in the reciprocal ranking fusion.\n       */\n      embedding_weight: number;\n\n      /**\n       * The weight of the text in the reciprocal ranking fusion.\n       */\n      text_weight: number;\n    }\n  }\n}\n\n/**\n * A tool that allows the model to execute shell commands.\n */\nexport interface FunctionShellTool {\n  /**\n   * The type of the shell tool. Always `shell`.\n   */\n  type: 'shell';\n\n  environment?: ContainerAuto | LocalEnvironment | ContainerReference | null;\n}\n\n/**\n * Defines a function in your own code the model can choose to call. Learn more\n * about\n * [function calling](https://platform.openai.com/docs/guides/function-calling).\n */\nexport interface FunctionTool {\n  /**\n   * The name of the function to call.\n   */\n  name: string;\n\n  /**\n   * A JSON schema object describing the parameters of the function.\n   */\n  parameters: { [key: string]: unknown } | null;\n\n  /**\n   * Whether to enforce strict parameter validation. Default `true`.\n   */\n  strict: boolean | null;\n\n  /**\n   * The type of the function tool. Always `function`.\n   */\n  type: 'function';\n\n  /**\n   * Whether this function is deferred and loaded via tool search.\n   */\n  defer_loading?: boolean;\n\n  /**\n   * A description of the function. Used by the model to determine whether or not to\n   * call the function.\n   */\n  description?: string | null;\n}\n\nexport interface InlineSkill {\n  /**\n   * The description of the skill.\n   */\n  description: string;\n\n  /**\n   * The name of the skill.\n   */\n  name: string;\n\n  /**\n   * Inline skill payload\n   */\n  source: InlineSkillSource;\n\n  /**\n   * Defines an inline skill for this request.\n   */\n  type: 'inline';\n}\n\n/**\n * Inline skill payload\n */\nexport interface InlineSkillSource {\n  /**\n   * Base64-encoded skill zip bundle.\n   */\n  data: string;\n\n  /**\n   * The media type of the inline skill payload. Must be `application/zip`.\n   */\n  media_type: 'application/zip';\n\n  /**\n   * The type of the inline skill source. Must be `base64`.\n   */\n  type: 'base64';\n}\n\nexport interface LocalEnvironment {\n  /**\n   * Use a local computer environment.\n   */\n  type: 'local';\n\n  /**\n   * An optional list of skills.\n   */\n  skills?: Array<LocalSkill>;\n}\n\nexport interface LocalSkill {\n  /**\n   * The description of the skill.\n   */\n  description: string;\n\n  /**\n   * The name of the skill.\n   */\n  name: string;\n\n  /**\n   * The path to the directory containing the skill.\n   */\n  path: string;\n}\n\n/**\n * Groups function/custom tools under a shared namespace.\n */\nexport interface NamespaceTool {\n  /**\n   * A description of the namespace shown to the model.\n   */\n  description: string;\n\n  /**\n   * The namespace name used in tool calls (for example, `crm`).\n   */\n  name: string;\n\n  /**\n   * The function/custom tools available inside this namespace.\n   */\n  tools: Array<NamespaceTool.Function | CustomTool>;\n\n  /**\n   * The type of the tool. Always `namespace`.\n   */\n  type: 'namespace';\n}\n\nexport namespace NamespaceTool {\n  export interface Function {\n    name: string;\n\n    type: 'function';\n\n    /**\n     * Whether this function should be deferred and discovered via tool search.\n     */\n    defer_loading?: boolean;\n\n    description?: string | null;\n\n    parameters?: unknown | null;\n\n    strict?: boolean | null;\n  }\n}\n\nexport interface Response {\n  /**\n   * Unique identifier for this Response.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (in seconds) of when this Response was created.\n   */\n  created_at: number;\n\n  output_text: string;\n\n  /**\n   * An error object returned when the model fails to generate a Response.\n   */\n  error: ResponseError | null;\n\n  /**\n   * Details about why the response is incomplete.\n   */\n  incomplete_details: Response.IncompleteDetails | null;\n\n  /**\n   * A system (or developer) message inserted into the model's context.\n   *\n   * When using along with `previous_response_id`, the instructions from a previous\n   * response will not be carried over to the next response. This makes it simple to\n   * swap out system (or developer) messages in new responses.\n   */\n  instructions: string | Array<ResponseInputItem> | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n\n  /**\n   * Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a\n   * wide range of models with different capabilities, performance characteristics,\n   * and price points. Refer to the\n   * [model guide](https://platform.openai.com/docs/models) to browse and compare\n   * available models.\n   */\n  model: Shared.ResponsesModel;\n\n  /**\n   * The object type of this resource - always set to `response`.\n   */\n  object: 'response';\n\n  /**\n   * An array of content items generated by the model.\n   *\n   * - The length and order of items in the `output` array is dependent on the\n   *   model's response.\n   * - Rather than accessing the first item in the `output` array and assuming it's\n   *   an `assistant` message with the content generated by the model, you might\n   *   consider using the `output_text` property where supported in SDKs.\n   */\n  output: Array<ResponseOutputItem>;\n\n  /**\n   * Whether to allow the model to run tool calls in parallel.\n   */\n  parallel_tool_calls: boolean;\n\n  /**\n   * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will\n   * make the output more random, while lower values like 0.2 will make it more\n   * focused and deterministic. We generally recommend altering this or `top_p` but\n   * not both.\n   */\n  temperature: number | null;\n\n  /**\n   * How the model should select which tool (or tools) to use when generating a\n   * response. See the `tools` parameter to see how to specify which tools the model\n   * can call.\n   */\n  tool_choice:\n    | ToolChoiceOptions\n    | ToolChoiceAllowed\n    | ToolChoiceTypes\n    | ToolChoiceFunction\n    | ToolChoiceMcp\n    | ToolChoiceCustom\n    | ToolChoiceApplyPatch\n    | ToolChoiceShell;\n\n  /**\n   * An array of tools the model may call while generating a response. You can\n   * specify which tool to use by setting the `tool_choice` parameter.\n   *\n   * We support the following categories of tools:\n   *\n   * - **Built-in tools**: Tools that are provided by OpenAI that extend the model's\n   *   capabilities, like\n   *   [web search](https://platform.openai.com/docs/guides/tools-web-search) or\n   *   [file search](https://platform.openai.com/docs/guides/tools-file-search).\n   *   Learn more about\n   *   [built-in tools](https://platform.openai.com/docs/guides/tools).\n   * - **MCP Tools**: Integrations with third-party systems via custom MCP servers or\n   *   predefined connectors such as Google Drive and SharePoint. Learn more about\n   *   [MCP Tools](https://platform.openai.com/docs/guides/tools-connectors-mcp).\n   * - **Function calls (custom tools)**: Functions that are defined by you, enabling\n   *   the model to call your own code with strongly typed arguments and outputs.\n   *   Learn more about\n   *   [function calling](https://platform.openai.com/docs/guides/function-calling).\n   *   You can also use custom tools to call your own code.\n   */\n  tools: Array<Tool>;\n\n  /**\n   * An alternative to sampling with temperature, called nucleus sampling, where the\n   * model considers the results of the tokens with top_p probability mass. So 0.1\n   * means only the tokens comprising the top 10% probability mass are considered.\n   *\n   * We generally recommend altering this or `temperature` but not both.\n   */\n  top_p: number | null;\n\n  /**\n   * Whether to run the model response in the background.\n   * [Learn more](https://platform.openai.com/docs/guides/background).\n   */\n  background?: boolean | null;\n\n  /**\n   * Unix timestamp (in seconds) of when this Response was completed. Only present\n   * when the status is `completed`.\n   */\n  completed_at?: number | null;\n\n  /**\n   * The conversation that this response belonged to. Input items and output items\n   * from this response were automatically added to this conversation.\n   */\n  conversation?: Response.Conversation | null;\n\n  /**\n   * An upper bound for the number of tokens that can be generated for a response,\n   * including visible output tokens and\n   * [reasoning tokens](https://platform.openai.com/docs/guides/reasoning).\n   */\n  max_output_tokens?: number | null;\n\n  /**\n   * The unique ID of the previous response to the model. Use this to create\n   * multi-turn conversations. Learn more about\n   * [conversation state](https://platform.openai.com/docs/guides/conversation-state).\n   * Cannot be used in conjunction with `conversation`.\n   */\n  previous_response_id?: string | null;\n\n  /**\n   * Reference to a prompt template and its variables.\n   * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts).\n   */\n  prompt?: ResponsePrompt | null;\n\n  /**\n   * Used by OpenAI to cache responses for similar requests to optimize your cache\n   * hit rates. Replaces the `user` field.\n   * [Learn more](https://platform.openai.com/docs/guides/prompt-caching).\n   */\n  prompt_cache_key?: string;\n\n  /**\n   * The retention policy for the prompt cache. Set to `24h` to enable extended\n   * prompt caching, which keeps cached prefixes active for longer, up to a maximum\n   * of 24 hours.\n   * [Learn more](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention).\n   */\n  prompt_cache_retention?: 'in_memory' | '24h' | null;\n\n  /**\n   * **gpt-5 and o-series models only**\n   *\n   * Configuration options for\n   * [reasoning models](https://platform.openai.com/docs/guides/reasoning).\n   */\n  reasoning?: Shared.Reasoning | null;\n\n  /**\n   * A stable identifier used to help detect users of your application that may be\n   * violating OpenAI's usage policies. The IDs should be a string that uniquely\n   * identifies each user, with a maximum length of 64 characters. We recommend\n   * hashing their username or email address, in order to avoid sending us any\n   * identifying information.\n   * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers).\n   */\n  safety_identifier?: string;\n\n  /**\n   * Specifies the latency tier to use for processing the request. This parameter is\n   * relevant for customers subscribed to the scale tier service:\n   *\n   * - If set to 'auto', then the request will be processed with the service tier\n   *   configured in the Project settings. Unless otherwise configured, the Project\n   *   will use 'default'.\n   * - If set to 'default', then the request will be processed with the standard\n   *   pricing and performance for the selected model.\n   * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or\n   *   '[priority](https://openai.com/api-priority-processing/)', then the request\n   *   will be processed with the corresponding service tier.\n   * - When not set, the default behavior is 'auto'.\n   *\n   * When this parameter is set, the response body will include the `service_tier`\n   * utilized.\n   */\n  service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | null;\n\n  /**\n   * The status of the response generation. One of `completed`, `failed`,\n   * `in_progress`, `cancelled`, `queued`, or `incomplete`.\n   */\n  status?: ResponseStatus;\n\n  /**\n   * Configuration options for a text response from the model. Can be plain text or\n   * structured JSON data. Learn more:\n   *\n   * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n   * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n   */\n  text?: ResponseTextConfig;\n\n  /**\n   * An integer between 0 and 20 specifying the maximum number of most likely tokens\n   * to return at each token position, each with an associated log probability. In\n   * some cases, the number of returned tokens may be fewer than requested.\n   */\n  top_logprobs?: number | null;\n\n  /**\n   * The truncation strategy to use for the model response.\n   *\n   * - `auto`: If the input to this Response exceeds the model's context window size,\n   *   the model will truncate the response to fit the context window by dropping\n   *   items from the beginning of the conversation.\n   * - `disabled` (default): If the input size will exceed the context window size\n   *   for a model, the request will fail with a 400 error.\n   */\n  truncation?: 'auto' | 'disabled' | null;\n\n  /**\n   * Represents token usage details including input tokens, output tokens, a\n   * breakdown of output tokens, and the total tokens used.\n   */\n  usage?: ResponseUsage;\n\n  /**\n   * @deprecated This field is being replaced by `safety_identifier` and\n   * `prompt_cache_key`. Use `prompt_cache_key` instead to maintain caching\n   * optimizations. A stable identifier for your end-users. Used to boost cache hit\n   * rates by better bucketing similar requests and to help OpenAI detect and prevent\n   * abuse.\n   * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers).\n   */\n  user?: string;\n}\n\nexport namespace Response {\n  /**\n   * Details about why the response is incomplete.\n   */\n  export interface IncompleteDetails {\n    /**\n     * The reason why the response is incomplete.\n     */\n    reason?: 'max_output_tokens' | 'content_filter';\n  }\n\n  /**\n   * The conversation that this response belonged to. Input items and output items\n   * from this response were automatically added to this conversation.\n   */\n  export interface Conversation {\n    /**\n     * The unique ID of the conversation that this response was associated with.\n     */\n    id: string;\n  }\n}\n\n/**\n * A tool call that applies file diffs by creating, deleting, or updating files.\n */\nexport interface ResponseApplyPatchToolCall {\n  /**\n   * The unique ID of the apply patch tool call. Populated when this item is returned\n   * via API.\n   */\n  id: string;\n\n  /**\n   * The unique ID of the apply patch tool call generated by the model.\n   */\n  call_id: string;\n\n  /**\n   * One of the create_file, delete_file, or update_file operations applied via\n   * apply_patch.\n   */\n  operation:\n    | ResponseApplyPatchToolCall.CreateFile\n    | ResponseApplyPatchToolCall.DeleteFile\n    | ResponseApplyPatchToolCall.UpdateFile;\n\n  /**\n   * The status of the apply patch tool call. One of `in_progress` or `completed`.\n   */\n  status: 'in_progress' | 'completed';\n\n  /**\n   * The type of the item. Always `apply_patch_call`.\n   */\n  type: 'apply_patch_call';\n\n  /**\n   * The ID of the entity that created this tool call.\n   */\n  created_by?: string;\n}\n\nexport namespace ResponseApplyPatchToolCall {\n  /**\n   * Instruction describing how to create a file via the apply_patch tool.\n   */\n  export interface CreateFile {\n    /**\n     * Diff to apply.\n     */\n    diff: string;\n\n    /**\n     * Path of the file to create.\n     */\n    path: string;\n\n    /**\n     * Create a new file with the provided diff.\n     */\n    type: 'create_file';\n  }\n\n  /**\n   * Instruction describing how to delete a file via the apply_patch tool.\n   */\n  export interface DeleteFile {\n    /**\n     * Path of the file to delete.\n     */\n    path: string;\n\n    /**\n     * Delete the specified file.\n     */\n    type: 'delete_file';\n  }\n\n  /**\n   * Instruction describing how to update a file via the apply_patch tool.\n   */\n  export interface UpdateFile {\n    /**\n     * Diff to apply.\n     */\n    diff: string;\n\n    /**\n     * Path of the file to update.\n     */\n    path: string;\n\n    /**\n     * Update an existing file with the provided diff.\n     */\n    type: 'update_file';\n  }\n}\n\n/**\n * The output emitted by an apply patch tool call.\n */\nexport interface ResponseApplyPatchToolCallOutput {\n  /**\n   * The unique ID of the apply patch tool call output. Populated when this item is\n   * returned via API.\n   */\n  id: string;\n\n  /**\n   * The unique ID of the apply patch tool call generated by the model.\n   */\n  call_id: string;\n\n  /**\n   * The status of the apply patch tool call output. One of `completed` or `failed`.\n   */\n  status: 'completed' | 'failed';\n\n  /**\n   * The type of the item. Always `apply_patch_call_output`.\n   */\n  type: 'apply_patch_call_output';\n\n  /**\n   * The ID of the entity that created this tool call output.\n   */\n  created_by?: string;\n\n  /**\n   * Optional textual output returned by the apply patch tool.\n   */\n  output?: string | null;\n}\n\n/**\n * Emitted when there is a partial audio response.\n */\nexport interface ResponseAudioDeltaEvent {\n  /**\n   * A chunk of Base64 encoded response audio bytes.\n   */\n  delta: string;\n\n  /**\n   * A sequence number for this chunk of the stream response.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.audio.delta`.\n   */\n  type: 'response.audio.delta';\n}\n\n/**\n * Emitted when the audio response is complete.\n */\nexport interface ResponseAudioDoneEvent {\n  /**\n   * The sequence number of the delta.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.audio.done`.\n   */\n  type: 'response.audio.done';\n}\n\n/**\n * Emitted when there is a partial transcript of audio.\n */\nexport interface ResponseAudioTranscriptDeltaEvent {\n  /**\n   * The partial transcript of the audio response.\n   */\n  delta: string;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.audio.transcript.delta`.\n   */\n  type: 'response.audio.transcript.delta';\n}\n\n/**\n * Emitted when the full audio transcript is completed.\n */\nexport interface ResponseAudioTranscriptDoneEvent {\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.audio.transcript.done`.\n   */\n  type: 'response.audio.transcript.done';\n}\n\n/**\n * Emitted when a partial code snippet is streamed by the code interpreter.\n */\nexport interface ResponseCodeInterpreterCallCodeDeltaEvent {\n  /**\n   * The partial code snippet being streamed by the code interpreter.\n   */\n  delta: string;\n\n  /**\n   * The unique identifier of the code interpreter tool call item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response for which the code is being\n   * streamed.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event, used to order streaming events.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.code_interpreter_call_code.delta`.\n   */\n  type: 'response.code_interpreter_call_code.delta';\n}\n\n/**\n * Emitted when the code snippet is finalized by the code interpreter.\n */\nexport interface ResponseCodeInterpreterCallCodeDoneEvent {\n  /**\n   * The final code snippet output by the code interpreter.\n   */\n  code: string;\n\n  /**\n   * The unique identifier of the code interpreter tool call item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response for which the code is finalized.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event, used to order streaming events.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.code_interpreter_call_code.done`.\n   */\n  type: 'response.code_interpreter_call_code.done';\n}\n\n/**\n * Emitted when the code interpreter call is completed.\n */\nexport interface ResponseCodeInterpreterCallCompletedEvent {\n  /**\n   * The unique identifier of the code interpreter tool call item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response for which the code interpreter call\n   * is completed.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event, used to order streaming events.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.code_interpreter_call.completed`.\n   */\n  type: 'response.code_interpreter_call.completed';\n}\n\n/**\n * Emitted when a code interpreter call is in progress.\n */\nexport interface ResponseCodeInterpreterCallInProgressEvent {\n  /**\n   * The unique identifier of the code interpreter tool call item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response for which the code interpreter call\n   * is in progress.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event, used to order streaming events.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.code_interpreter_call.in_progress`.\n   */\n  type: 'response.code_interpreter_call.in_progress';\n}\n\n/**\n * Emitted when the code interpreter is actively interpreting the code snippet.\n */\nexport interface ResponseCodeInterpreterCallInterpretingEvent {\n  /**\n   * The unique identifier of the code interpreter tool call item.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response for which the code interpreter is\n   * interpreting code.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event, used to order streaming events.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.code_interpreter_call.interpreting`.\n   */\n  type: 'response.code_interpreter_call.interpreting';\n}\n\n/**\n * A tool call to run code.\n */\nexport interface ResponseCodeInterpreterToolCall {\n  /**\n   * The unique ID of the code interpreter tool call.\n   */\n  id: string;\n\n  /**\n   * The code to run, or null if not available.\n   */\n  code: string | null;\n\n  /**\n   * The ID of the container used to run the code.\n   */\n  container_id: string;\n\n  /**\n   * The outputs generated by the code interpreter, such as logs or images. Can be\n   * null if no outputs are available.\n   */\n  outputs: Array<ResponseCodeInterpreterToolCall.Logs | ResponseCodeInterpreterToolCall.Image> | null;\n\n  /**\n   * The status of the code interpreter tool call. Valid values are `in_progress`,\n   * `completed`, `incomplete`, `interpreting`, and `failed`.\n   */\n  status: 'in_progress' | 'completed' | 'incomplete' | 'interpreting' | 'failed';\n\n  /**\n   * The type of the code interpreter tool call. Always `code_interpreter_call`.\n   */\n  type: 'code_interpreter_call';\n}\n\nexport namespace ResponseCodeInterpreterToolCall {\n  /**\n   * The logs output from the code interpreter.\n   */\n  export interface Logs {\n    /**\n     * The logs output from the code interpreter.\n     */\n    logs: string;\n\n    /**\n     * The type of the output. Always `logs`.\n     */\n    type: 'logs';\n  }\n\n  /**\n   * The image output from the code interpreter.\n   */\n  export interface Image {\n    /**\n     * The type of the output. Always `image`.\n     */\n    type: 'image';\n\n    /**\n     * The URL of the image output from the code interpreter.\n     */\n    url: string;\n  }\n}\n\n/**\n * A compaction item generated by the\n * [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact).\n */\nexport interface ResponseCompactionItem {\n  /**\n   * The unique ID of the compaction item.\n   */\n  id: string;\n\n  /**\n   * The encrypted content that was produced by compaction.\n   */\n  encrypted_content: string;\n\n  /**\n   * The type of the item. Always `compaction`.\n   */\n  type: 'compaction';\n\n  /**\n   * The identifier of the actor that created the item.\n   */\n  created_by?: string;\n}\n\n/**\n * A compaction item generated by the\n * [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact).\n */\nexport interface ResponseCompactionItemParam {\n  /**\n   * The encrypted content of the compaction summary.\n   */\n  encrypted_content: string;\n\n  /**\n   * The type of the item. Always `compaction`.\n   */\n  type: 'compaction';\n\n  /**\n   * The ID of the compaction item.\n   */\n  id?: string | null;\n}\n\n/**\n * Emitted when the model response is complete.\n */\nexport interface ResponseCompletedEvent {\n  /**\n   * Properties of the completed response.\n   */\n  response: Response;\n\n  /**\n   * The sequence number for this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.completed`.\n   */\n  type: 'response.completed';\n}\n\n/**\n * A tool call to a computer use tool. See the\n * [computer use guide](https://platform.openai.com/docs/guides/tools-computer-use)\n * for more information.\n */\nexport interface ResponseComputerToolCall {\n  /**\n   * The unique ID of the computer call.\n   */\n  id: string;\n\n  /**\n   * An identifier used when responding to the tool call with output.\n   */\n  call_id: string;\n\n  /**\n   * The pending safety checks for the computer call.\n   */\n  pending_safety_checks: Array<ResponseComputerToolCall.PendingSafetyCheck>;\n\n  /**\n   * The status of the item. One of `in_progress`, `completed`, or `incomplete`.\n   * Populated when items are returned via API.\n   */\n  status: 'in_progress' | 'completed' | 'incomplete';\n\n  /**\n   * The type of the computer call. Always `computer_call`.\n   */\n  type: 'computer_call';\n\n  /**\n   * A click action.\n   */\n  action?:\n    | ResponseComputerToolCall.Click\n    | ResponseComputerToolCall.DoubleClick\n    | ResponseComputerToolCall.Drag\n    | ResponseComputerToolCall.Keypress\n    | ResponseComputerToolCall.Move\n    | ResponseComputerToolCall.Screenshot\n    | ResponseComputerToolCall.Scroll\n    | ResponseComputerToolCall.Type\n    | ResponseComputerToolCall.Wait;\n\n  /**\n   * Flattened batched actions for `computer_use`. Each action includes an `type`\n   * discriminator and action-specific fields.\n   */\n  actions?: ComputerActionList;\n}\n\nexport namespace ResponseComputerToolCall {\n  /**\n   * A pending safety check for the computer call.\n   */\n  export interface PendingSafetyCheck {\n    /**\n     * The ID of the pending safety check.\n     */\n    id: string;\n\n    /**\n     * The type of the pending safety check.\n     */\n    code?: string | null;\n\n    /**\n     * Details about the pending safety check.\n     */\n    message?: string | null;\n  }\n\n  /**\n   * A click action.\n   */\n  export interface Click {\n    /**\n     * Indicates which mouse button was pressed during the click. One of `left`,\n     * `right`, `wheel`, `back`, or `forward`.\n     */\n    button: 'left' | 'right' | 'wheel' | 'back' | 'forward';\n\n    /**\n     * Specifies the event type. For a click action, this property is always `click`.\n     */\n    type: 'click';\n\n    /**\n     * The x-coordinate where the click occurred.\n     */\n    x: number;\n\n    /**\n     * The y-coordinate where the click occurred.\n     */\n    y: number;\n\n    /**\n     * The keys being held while clicking.\n     */\n    keys?: Array<string> | null;\n  }\n\n  /**\n   * A double click action.\n   */\n  export interface DoubleClick {\n    /**\n     * The keys being held while double-clicking.\n     */\n    keys: Array<string> | null;\n\n    /**\n     * Specifies the event type. For a double click action, this property is always set\n     * to `double_click`.\n     */\n    type: 'double_click';\n\n    /**\n     * The x-coordinate where the double click occurred.\n     */\n    x: number;\n\n    /**\n     * The y-coordinate where the double click occurred.\n     */\n    y: number;\n  }\n\n  /**\n   * A drag action.\n   */\n  export interface Drag {\n    /**\n     * An array of coordinates representing the path of the drag action. Coordinates\n     * will appear as an array of objects, eg\n     *\n     * ```\n     * [\n     *   { x: 100, y: 200 },\n     *   { x: 200, y: 300 }\n     * ]\n     * ```\n     */\n    path: Array<Drag.Path>;\n\n    /**\n     * Specifies the event type. For a drag action, this property is always set to\n     * `drag`.\n     */\n    type: 'drag';\n\n    /**\n     * The keys being held while dragging the mouse.\n     */\n    keys?: Array<string> | null;\n  }\n\n  export namespace Drag {\n    /**\n     * An x/y coordinate pair, e.g. `{ x: 100, y: 200 }`.\n     */\n    export interface Path {\n      /**\n       * The x-coordinate.\n       */\n      x: number;\n\n      /**\n       * The y-coordinate.\n       */\n      y: number;\n    }\n  }\n\n  /**\n   * A collection of keypresses the model would like to perform.\n   */\n  export interface Keypress {\n    /**\n     * The combination of keys the model is requesting to be pressed. This is an array\n     * of strings, each representing a key.\n     */\n    keys: Array<string>;\n\n    /**\n     * Specifies the event type. For a keypress action, this property is always set to\n     * `keypress`.\n     */\n    type: 'keypress';\n  }\n\n  /**\n   * A mouse move action.\n   */\n  export interface Move {\n    /**\n     * Specifies the event type. For a move action, this property is always set to\n     * `move`.\n     */\n    type: 'move';\n\n    /**\n     * The x-coordinate to move to.\n     */\n    x: number;\n\n    /**\n     * The y-coordinate to move to.\n     */\n    y: number;\n\n    /**\n     * The keys being held while moving the mouse.\n     */\n    keys?: Array<string> | null;\n  }\n\n  /**\n   * A screenshot action.\n   */\n  export interface Screenshot {\n    /**\n     * Specifies the event type. For a screenshot action, this property is always set\n     * to `screenshot`.\n     */\n    type: 'screenshot';\n  }\n\n  /**\n   * A scroll action.\n   */\n  export interface Scroll {\n    /**\n     * The horizontal scroll distance.\n     */\n    scroll_x: number;\n\n    /**\n     * The vertical scroll distance.\n     */\n    scroll_y: number;\n\n    /**\n     * Specifies the event type. For a scroll action, this property is always set to\n     * `scroll`.\n     */\n    type: 'scroll';\n\n    /**\n     * The x-coordinate where the scroll occurred.\n     */\n    x: number;\n\n    /**\n     * The y-coordinate where the scroll occurred.\n     */\n    y: number;\n\n    /**\n     * The keys being held while scrolling.\n     */\n    keys?: Array<string> | null;\n  }\n\n  /**\n   * An action to type in text.\n   */\n  export interface Type {\n    /**\n     * The text to type.\n     */\n    text: string;\n\n    /**\n     * Specifies the event type. For a type action, this property is always set to\n     * `type`.\n     */\n    type: 'type';\n  }\n\n  /**\n   * A wait action.\n   */\n  export interface Wait {\n    /**\n     * Specifies the event type. For a wait action, this property is always set to\n     * `wait`.\n     */\n    type: 'wait';\n  }\n}\n\nexport interface ResponseComputerToolCallOutputItem {\n  /**\n   * The unique ID of the computer call tool output.\n   */\n  id: string;\n\n  /**\n   * The ID of the computer tool call that produced the output.\n   */\n  call_id: string;\n\n  /**\n   * A computer screenshot image used with the computer use tool.\n   */\n  output: ResponseComputerToolCallOutputScreenshot;\n\n  /**\n   * The status of the message input. One of `in_progress`, `completed`, or\n   * `incomplete`. Populated when input items are returned via API.\n   */\n  status: 'completed' | 'incomplete' | 'failed' | 'in_progress';\n\n  /**\n   * The type of the computer tool call output. Always `computer_call_output`.\n   */\n  type: 'computer_call_output';\n\n  /**\n   * The safety checks reported by the API that have been acknowledged by the\n   * developer.\n   */\n  acknowledged_safety_checks?: Array<ResponseComputerToolCallOutputItem.AcknowledgedSafetyCheck>;\n\n  /**\n   * The identifier of the actor that created the item.\n   */\n  created_by?: string;\n}\n\nexport namespace ResponseComputerToolCallOutputItem {\n  /**\n   * A pending safety check for the computer call.\n   */\n  export interface AcknowledgedSafetyCheck {\n    /**\n     * The ID of the pending safety check.\n     */\n    id: string;\n\n    /**\n     * The type of the pending safety check.\n     */\n    code?: string | null;\n\n    /**\n     * Details about the pending safety check.\n     */\n    message?: string | null;\n  }\n}\n\n/**\n * A computer screenshot image used with the computer use tool.\n */\nexport interface ResponseComputerToolCallOutputScreenshot {\n  /**\n   * Specifies the event type. For a computer screenshot, this property is always set\n   * to `computer_screenshot`.\n   */\n  type: 'computer_screenshot';\n\n  /**\n   * The identifier of an uploaded file that contains the screenshot.\n   */\n  file_id?: string;\n\n  /**\n   * The URL of the screenshot image.\n   */\n  image_url?: string;\n}\n\n/**\n * Represents a container created with /v1/containers.\n */\nexport interface ResponseContainerReference {\n  container_id: string;\n\n  /**\n   * The environment type. Always `container_reference`.\n   */\n  type: 'container_reference';\n}\n\n/**\n * Multi-modal input and output contents.\n */\nexport type ResponseContent =\n  | ResponseInputText\n  | ResponseInputImage\n  | ResponseInputFile\n  | ResponseOutputText\n  | ResponseOutputRefusal\n  | ResponseContent.ReasoningTextContent;\n\nexport namespace ResponseContent {\n  /**\n   * Reasoning text from the model.\n   */\n  export interface ReasoningTextContent {\n    /**\n     * The reasoning text from the model.\n     */\n    text: string;\n\n    /**\n     * The type of the reasoning text. Always `reasoning_text`.\n     */\n    type: 'reasoning_text';\n  }\n}\n\n/**\n * Emitted when a new content part is added.\n */\nexport interface ResponseContentPartAddedEvent {\n  /**\n   * The index of the content part that was added.\n   */\n  content_index: number;\n\n  /**\n   * The ID of the output item that the content part was added to.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that the content part was added to.\n   */\n  output_index: number;\n\n  /**\n   * The content part that was added.\n   */\n  part: ResponseOutputText | ResponseOutputRefusal | ResponseContentPartAddedEvent.ReasoningText;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.content_part.added`.\n   */\n  type: 'response.content_part.added';\n}\n\nexport namespace ResponseContentPartAddedEvent {\n  /**\n   * Reasoning text from the model.\n   */\n  export interface ReasoningText {\n    /**\n     * The reasoning text from the model.\n     */\n    text: string;\n\n    /**\n     * The type of the reasoning text. Always `reasoning_text`.\n     */\n    type: 'reasoning_text';\n  }\n}\n\n/**\n * Emitted when a content part is done.\n */\nexport interface ResponseContentPartDoneEvent {\n  /**\n   * The index of the content part that is done.\n   */\n  content_index: number;\n\n  /**\n   * The ID of the output item that the content part was added to.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that the content part was added to.\n   */\n  output_index: number;\n\n  /**\n   * The content part that is done.\n   */\n  part: ResponseOutputText | ResponseOutputRefusal | ResponseContentPartDoneEvent.ReasoningText;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.content_part.done`.\n   */\n  type: 'response.content_part.done';\n}\n\nexport namespace ResponseContentPartDoneEvent {\n  /**\n   * Reasoning text from the model.\n   */\n  export interface ReasoningText {\n    /**\n     * The reasoning text from the model.\n     */\n    text: string;\n\n    /**\n     * The type of the reasoning text. Always `reasoning_text`.\n     */\n    type: 'reasoning_text';\n  }\n}\n\n/**\n * The conversation that this response belongs to.\n */\nexport interface ResponseConversationParam {\n  /**\n   * The unique ID of the conversation.\n   */\n  id: string;\n}\n\n/**\n * An event that is emitted when a response is created.\n */\nexport interface ResponseCreatedEvent {\n  /**\n   * The response that was created.\n   */\n  response: Response;\n\n  /**\n   * The sequence number for this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.created`.\n   */\n  type: 'response.created';\n}\n\n/**\n * A call to a custom tool created by the model.\n */\nexport interface ResponseCustomToolCall {\n  /**\n   * An identifier used to map this custom tool call to a tool call output.\n   */\n  call_id: string;\n\n  /**\n   * The input for the custom tool call generated by the model.\n   */\n  input: string;\n\n  /**\n   * The name of the custom tool being called.\n   */\n  name: string;\n\n  /**\n   * The type of the custom tool call. Always `custom_tool_call`.\n   */\n  type: 'custom_tool_call';\n\n  /**\n   * The unique ID of the custom tool call in the OpenAI platform.\n   */\n  id?: string;\n\n  /**\n   * The namespace of the custom tool being called.\n   */\n  namespace?: string;\n}\n\n/**\n * Event representing a delta (partial update) to the input of a custom tool call.\n */\nexport interface ResponseCustomToolCallInputDeltaEvent {\n  /**\n   * The incremental input data (delta) for the custom tool call.\n   */\n  delta: string;\n\n  /**\n   * Unique identifier for the API item associated with this event.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output this delta applies to.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The event type identifier.\n   */\n  type: 'response.custom_tool_call_input.delta';\n}\n\n/**\n * Event indicating that input for a custom tool call is complete.\n */\nexport interface ResponseCustomToolCallInputDoneEvent {\n  /**\n   * The complete input data for the custom tool call.\n   */\n  input: string;\n\n  /**\n   * Unique identifier for the API item associated with this event.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output this event applies to.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The event type identifier.\n   */\n  type: 'response.custom_tool_call_input.done';\n}\n\n/**\n * A call to a custom tool created by the model.\n */\nexport interface ResponseCustomToolCallItem extends ResponseCustomToolCall {\n  /**\n   * The unique ID of the custom tool call item.\n   */\n  id: string;\n\n  /**\n   * The status of the item. One of `in_progress`, `completed`, or `incomplete`.\n   * Populated when items are returned via API.\n   */\n  status: 'in_progress' | 'completed' | 'incomplete';\n\n  /**\n   * The identifier of the actor that created the item.\n   */\n  created_by?: string;\n}\n\n/**\n * The output of a custom tool call from your code, being sent back to the model.\n */\nexport interface ResponseCustomToolCallOutput {\n  /**\n   * The call ID, used to map this custom tool call output to a custom tool call.\n   */\n  call_id: string;\n\n  /**\n   * The output from the custom tool call generated by your code. Can be a string or\n   * an list of output content.\n   */\n  output: string | Array<ResponseInputText | ResponseInputImage | ResponseInputFile>;\n\n  /**\n   * The type of the custom tool call output. Always `custom_tool_call_output`.\n   */\n  type: 'custom_tool_call_output';\n\n  /**\n   * The unique ID of the custom tool call output in the OpenAI platform.\n   */\n  id?: string;\n}\n\n/**\n * The output of a custom tool call from your code, being sent back to the model.\n */\nexport interface ResponseCustomToolCallOutputItem extends ResponseCustomToolCallOutput {\n  /**\n   * The unique ID of the custom tool call output item.\n   */\n  id: string;\n\n  /**\n   * The status of the item. One of `in_progress`, `completed`, or `incomplete`.\n   * Populated when items are returned via API.\n   */\n  status: 'in_progress' | 'completed' | 'incomplete';\n\n  /**\n   * The identifier of the actor that created the item.\n   */\n  created_by?: string;\n}\n\n/**\n * An error object returned when the model fails to generate a Response.\n */\nexport interface ResponseError {\n  /**\n   * The error code for the response.\n   */\n  code:\n    | 'server_error'\n    | 'rate_limit_exceeded'\n    | 'invalid_prompt'\n    | 'vector_store_timeout'\n    | 'invalid_image'\n    | 'invalid_image_format'\n    | 'invalid_base64_image'\n    | 'invalid_image_url'\n    | 'image_too_large'\n    | 'image_too_small'\n    | 'image_parse_error'\n    | 'image_content_policy_violation'\n    | 'invalid_image_mode'\n    | 'image_file_too_large'\n    | 'unsupported_image_media_type'\n    | 'empty_image_file'\n    | 'failed_to_download_image'\n    | 'image_file_not_found';\n\n  /**\n   * A human-readable description of the error.\n   */\n  message: string;\n}\n\n/**\n * Emitted when an error occurs.\n */\nexport interface ResponseErrorEvent {\n  /**\n   * The error code.\n   */\n  code: string | null;\n\n  /**\n   * The error message.\n   */\n  message: string;\n\n  /**\n   * The error parameter.\n   */\n  param: string | null;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `error`.\n   */\n  type: 'error';\n}\n\n/**\n * An event that is emitted when a response fails.\n */\nexport interface ResponseFailedEvent {\n  /**\n   * The response that failed.\n   */\n  response: Response;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.failed`.\n   */\n  type: 'response.failed';\n}\n\n/**\n * Emitted when a file search call is completed (results found).\n */\nexport interface ResponseFileSearchCallCompletedEvent {\n  /**\n   * The ID of the output item that the file search call is initiated.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that the file search call is initiated.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.file_search_call.completed`.\n   */\n  type: 'response.file_search_call.completed';\n}\n\n/**\n * Emitted when a file search call is initiated.\n */\nexport interface ResponseFileSearchCallInProgressEvent {\n  /**\n   * The ID of the output item that the file search call is initiated.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that the file search call is initiated.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.file_search_call.in_progress`.\n   */\n  type: 'response.file_search_call.in_progress';\n}\n\n/**\n * Emitted when a file search is currently searching.\n */\nexport interface ResponseFileSearchCallSearchingEvent {\n  /**\n   * The ID of the output item that the file search call is initiated.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that the file search call is searching.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.file_search_call.searching`.\n   */\n  type: 'response.file_search_call.searching';\n}\n\n/**\n * The results of a file search tool call. See the\n * [file search guide](https://platform.openai.com/docs/guides/tools-file-search)\n * for more information.\n */\nexport interface ResponseFileSearchToolCall {\n  /**\n   * The unique ID of the file search tool call.\n   */\n  id: string;\n\n  /**\n   * The queries used to search for files.\n   */\n  queries: Array<string>;\n\n  /**\n   * The status of the file search tool call. One of `in_progress`, `searching`,\n   * `incomplete` or `failed`,\n   */\n  status: 'in_progress' | 'searching' | 'completed' | 'incomplete' | 'failed';\n\n  /**\n   * The type of the file search tool call. Always `file_search_call`.\n   */\n  type: 'file_search_call';\n\n  /**\n   * The results of the file search tool call.\n   */\n  results?: Array<ResponseFileSearchToolCall.Result> | null;\n}\n\nexport namespace ResponseFileSearchToolCall {\n  export interface Result {\n    /**\n     * Set of 16 key-value pairs that can be attached to an object. This can be useful\n     * for storing additional information about the object in a structured format, and\n     * querying for objects via API or the dashboard. Keys are strings with a maximum\n     * length of 64 characters. Values are strings with a maximum length of 512\n     * characters, booleans, or numbers.\n     */\n    attributes?: { [key: string]: string | number | boolean } | null;\n\n    /**\n     * The unique ID of the file.\n     */\n    file_id?: string;\n\n    /**\n     * The name of the file.\n     */\n    filename?: string;\n\n    /**\n     * The relevance score of the file - a value between 0 and 1.\n     */\n    score?: number;\n\n    /**\n     * The text that was retrieved from the file.\n     */\n    text?: string;\n  }\n}\n\n/**\n * An object specifying the format that the model must output.\n *\n * Configuring `{ \"type\": \"json_schema\" }` enables Structured Outputs, which\n * ensures the model will match your supplied JSON schema. Learn more in the\n * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n *\n * The default format is `{ \"type\": \"text\" }` with no additional options.\n *\n * **Not recommended for gpt-4o and newer models:**\n *\n * Setting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\n * ensures the message the model generates is valid JSON. Using `json_schema` is\n * preferred for models that support it.\n */\nexport type ResponseFormatTextConfig =\n  | Shared.ResponseFormatText\n  | ResponseFormatTextJSONSchemaConfig\n  | Shared.ResponseFormatJSONObject;\n\n/**\n * JSON Schema response format. Used to generate structured JSON responses. Learn\n * more about\n * [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs).\n */\nexport interface ResponseFormatTextJSONSchemaConfig {\n  /**\n   * The name of the response format. Must be a-z, A-Z, 0-9, or contain underscores\n   * and dashes, with a maximum length of 64.\n   */\n  name: string;\n\n  /**\n   * The schema for the response format, described as a JSON Schema object. Learn how\n   * to build JSON schemas [here](https://json-schema.org/).\n   */\n  schema: { [key: string]: unknown };\n\n  /**\n   * The type of response format being defined. Always `json_schema`.\n   */\n  type: 'json_schema';\n\n  /**\n   * A description of what the response format is for, used by the model to determine\n   * how to respond in the format.\n   */\n  description?: string;\n\n  /**\n   * Whether to enable strict schema adherence when generating the output. If set to\n   * true, the model will always follow the exact schema defined in the `schema`\n   * field. Only a subset of JSON Schema is supported when `strict` is `true`. To\n   * learn more, read the\n   * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n   */\n  strict?: boolean | null;\n}\n\n/**\n * Emitted when there is a partial function-call arguments delta.\n */\nexport interface ResponseFunctionCallArgumentsDeltaEvent {\n  /**\n   * The function-call arguments delta that is added.\n   */\n  delta: string;\n\n  /**\n   * The ID of the output item that the function-call arguments delta is added to.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that the function-call arguments delta is added to.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.function_call_arguments.delta`.\n   */\n  type: 'response.function_call_arguments.delta';\n}\n\n/**\n * Emitted when function-call arguments are finalized.\n */\nexport interface ResponseFunctionCallArgumentsDoneEvent {\n  /**\n   * The function-call arguments.\n   */\n  arguments: string;\n\n  /**\n   * The ID of the item.\n   */\n  item_id: string;\n\n  /**\n   * The name of the function that was called.\n   */\n  name: string;\n\n  /**\n   * The index of the output item.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  type: 'response.function_call_arguments.done';\n}\n\n/**\n * A piece of message content, such as text, an image, or a file.\n */\nexport type ResponseFunctionCallOutputItem =\n  | ResponseInputTextContent\n  | ResponseInputImageContent\n  | ResponseInputFileContent;\n\n/**\n * An array of content outputs (text, image, file) for the function tool call.\n */\nexport type ResponseFunctionCallOutputItemList = Array<ResponseFunctionCallOutputItem>;\n\n/**\n * Captured stdout and stderr for a portion of a shell tool call output.\n */\nexport interface ResponseFunctionShellCallOutputContent {\n  /**\n   * The exit or timeout outcome associated with this shell call.\n   */\n  outcome: ResponseFunctionShellCallOutputContent.Timeout | ResponseFunctionShellCallOutputContent.Exit;\n\n  /**\n   * Captured stderr output for the shell call.\n   */\n  stderr: string;\n\n  /**\n   * Captured stdout output for the shell call.\n   */\n  stdout: string;\n}\n\nexport namespace ResponseFunctionShellCallOutputContent {\n  /**\n   * Indicates that the shell call exceeded its configured time limit.\n   */\n  export interface Timeout {\n    /**\n     * The outcome type. Always `timeout`.\n     */\n    type: 'timeout';\n  }\n\n  /**\n   * Indicates that the shell commands finished and returned an exit code.\n   */\n  export interface Exit {\n    /**\n     * The exit code returned by the shell process.\n     */\n    exit_code: number;\n\n    /**\n     * The outcome type. Always `exit`.\n     */\n    type: 'exit';\n  }\n}\n\n/**\n * A tool call that executes one or more shell commands in a managed environment.\n */\nexport interface ResponseFunctionShellToolCall {\n  /**\n   * The unique ID of the shell tool call. Populated when this item is returned via\n   * API.\n   */\n  id: string;\n\n  /**\n   * The shell commands and limits that describe how to run the tool call.\n   */\n  action: ResponseFunctionShellToolCall.Action;\n\n  /**\n   * The unique ID of the shell tool call generated by the model.\n   */\n  call_id: string;\n\n  /**\n   * Represents the use of a local environment to perform shell actions.\n   */\n  environment: ResponseLocalEnvironment | ResponseContainerReference | null;\n\n  /**\n   * The status of the shell call. One of `in_progress`, `completed`, or\n   * `incomplete`.\n   */\n  status: 'in_progress' | 'completed' | 'incomplete';\n\n  /**\n   * The type of the item. Always `shell_call`.\n   */\n  type: 'shell_call';\n\n  /**\n   * The ID of the entity that created this tool call.\n   */\n  created_by?: string;\n}\n\nexport namespace ResponseFunctionShellToolCall {\n  /**\n   * The shell commands and limits that describe how to run the tool call.\n   */\n  export interface Action {\n    commands: Array<string>;\n\n    /**\n     * Optional maximum number of characters to return from each command.\n     */\n    max_output_length: number | null;\n\n    /**\n     * Optional timeout in milliseconds for the commands.\n     */\n    timeout_ms: number | null;\n  }\n}\n\n/**\n * The output of a shell tool call that was emitted.\n */\nexport interface ResponseFunctionShellToolCallOutput {\n  /**\n   * The unique ID of the shell call output. Populated when this item is returned via\n   * API.\n   */\n  id: string;\n\n  /**\n   * The unique ID of the shell tool call generated by the model.\n   */\n  call_id: string;\n\n  /**\n   * The maximum length of the shell command output. This is generated by the model\n   * and should be passed back with the raw output.\n   */\n  max_output_length: number | null;\n\n  /**\n   * An array of shell call output contents\n   */\n  output: Array<ResponseFunctionShellToolCallOutput.Output>;\n\n  /**\n   * The status of the shell call output. One of `in_progress`, `completed`, or\n   * `incomplete`.\n   */\n  status: 'in_progress' | 'completed' | 'incomplete';\n\n  /**\n   * The type of the shell call output. Always `shell_call_output`.\n   */\n  type: 'shell_call_output';\n\n  /**\n   * The identifier of the actor that created the item.\n   */\n  created_by?: string;\n}\n\nexport namespace ResponseFunctionShellToolCallOutput {\n  /**\n   * The content of a shell tool call output that was emitted.\n   */\n  export interface Output {\n    /**\n     * Represents either an exit outcome (with an exit code) or a timeout outcome for a\n     * shell call output chunk.\n     */\n    outcome: Output.Timeout | Output.Exit;\n\n    /**\n     * The standard error output that was captured.\n     */\n    stderr: string;\n\n    /**\n     * The standard output that was captured.\n     */\n    stdout: string;\n\n    /**\n     * The identifier of the actor that created the item.\n     */\n    created_by?: string;\n  }\n\n  export namespace Output {\n    /**\n     * Indicates that the shell call exceeded its configured time limit.\n     */\n    export interface Timeout {\n      /**\n       * The outcome type. Always `timeout`.\n       */\n      type: 'timeout';\n    }\n\n    /**\n     * Indicates that the shell commands finished and returned an exit code.\n     */\n    export interface Exit {\n      /**\n       * Exit code from the shell process.\n       */\n      exit_code: number;\n\n      /**\n       * The outcome type. Always `exit`.\n       */\n      type: 'exit';\n    }\n  }\n}\n\n/**\n * A tool call to run a function. See the\n * [function calling guide](https://platform.openai.com/docs/guides/function-calling)\n * for more information.\n */\nexport interface ResponseFunctionToolCall {\n  /**\n   * A JSON string of the arguments to pass to the function.\n   */\n  arguments: string;\n\n  /**\n   * The unique ID of the function tool call generated by the model.\n   */\n  call_id: string;\n\n  /**\n   * The name of the function to run.\n   */\n  name: string;\n\n  /**\n   * The type of the function tool call. Always `function_call`.\n   */\n  type: 'function_call';\n\n  /**\n   * The unique ID of the function tool call.\n   */\n  id?: string;\n\n  /**\n   * The namespace of the function to run.\n   */\n  namespace?: string;\n\n  /**\n   * The status of the item. One of `in_progress`, `completed`, or `incomplete`.\n   * Populated when items are returned via API.\n   */\n  status?: 'in_progress' | 'completed' | 'incomplete';\n}\n\n/**\n * A tool call to run a function. See the\n * [function calling guide](https://platform.openai.com/docs/guides/function-calling)\n * for more information.\n */\nexport interface ResponseFunctionToolCallItem extends ResponseFunctionToolCall {\n  /**\n   * The unique ID of the function tool call.\n   */\n  id: string;\n\n  /**\n   * The status of the item. One of `in_progress`, `completed`, or `incomplete`.\n   * Populated when items are returned via API.\n   */\n  status: 'in_progress' | 'completed' | 'incomplete';\n\n  /**\n   * The identifier of the actor that created the item.\n   */\n  created_by?: string;\n}\n\nexport interface ResponseFunctionToolCallOutputItem {\n  /**\n   * The unique ID of the function call tool output.\n   */\n  id: string;\n\n  /**\n   * The unique ID of the function tool call generated by the model.\n   */\n  call_id: string;\n\n  /**\n   * The output from the function call generated by your code. Can be a string or an\n   * list of output content.\n   */\n  output: string | Array<ResponseInputText | ResponseInputImage | ResponseInputFile>;\n\n  /**\n   * The status of the item. One of `in_progress`, `completed`, or `incomplete`.\n   * Populated when items are returned via API.\n   */\n  status: 'in_progress' | 'completed' | 'incomplete';\n\n  /**\n   * The type of the function tool call output. Always `function_call_output`.\n   */\n  type: 'function_call_output';\n\n  /**\n   * The identifier of the actor that created the item.\n   */\n  created_by?: string;\n}\n\n/**\n * The results of a web search tool call. See the\n * [web search guide](https://platform.openai.com/docs/guides/tools-web-search) for\n * more information.\n */\nexport interface ResponseFunctionWebSearch {\n  /**\n   * The unique ID of the web search tool call.\n   */\n  id: string;\n\n  /**\n   * An object describing the specific action taken in this web search call. Includes\n   * details on how the model used the web (search, open_page, find_in_page).\n   */\n  action:\n    | ResponseFunctionWebSearch.Search\n    | ResponseFunctionWebSearch.OpenPage\n    | ResponseFunctionWebSearch.Find;\n\n  /**\n   * The status of the web search tool call.\n   */\n  status: 'in_progress' | 'searching' | 'completed' | 'failed';\n\n  /**\n   * The type of the web search tool call. Always `web_search_call`.\n   */\n  type: 'web_search_call';\n}\n\nexport namespace ResponseFunctionWebSearch {\n  /**\n   * Action type \"search\" - Performs a web search query.\n   */\n  export interface Search {\n    /**\n     * [DEPRECATED] The search query.\n     */\n    query: string;\n\n    /**\n     * The action type.\n     */\n    type: 'search';\n\n    /**\n     * The search queries.\n     */\n    queries?: Array<string>;\n\n    /**\n     * The sources used in the search.\n     */\n    sources?: Array<Search.Source>;\n  }\n\n  export namespace Search {\n    /**\n     * A source used in the search.\n     */\n    export interface Source {\n      /**\n       * The type of source. Always `url`.\n       */\n      type: 'url';\n\n      /**\n       * The URL of the source.\n       */\n      url: string;\n    }\n  }\n\n  /**\n   * Action type \"open_page\" - Opens a specific URL from search results.\n   */\n  export interface OpenPage {\n    /**\n     * The action type.\n     */\n    type: 'open_page';\n\n    /**\n     * The URL opened by the model.\n     */\n    url?: string | null;\n  }\n\n  /**\n   * Action type \"find_in_page\": Searches for a pattern within a loaded page.\n   */\n  export interface Find {\n    /**\n     * The pattern or text to search for within the page.\n     */\n    pattern: string;\n\n    /**\n     * The action type.\n     */\n    type: 'find_in_page';\n\n    /**\n     * The URL of the page searched for the pattern.\n     */\n    url: string;\n  }\n}\n\n/**\n * Emitted when an image generation tool call has completed and the final image is\n * available.\n */\nexport interface ResponseImageGenCallCompletedEvent {\n  /**\n   * The unique identifier of the image generation item being processed.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response's output array.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always 'response.image_generation_call.completed'.\n   */\n  type: 'response.image_generation_call.completed';\n}\n\n/**\n * Emitted when an image generation tool call is actively generating an image\n * (intermediate state).\n */\nexport interface ResponseImageGenCallGeneratingEvent {\n  /**\n   * The unique identifier of the image generation item being processed.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response's output array.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of the image generation item being processed.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always 'response.image_generation_call.generating'.\n   */\n  type: 'response.image_generation_call.generating';\n}\n\n/**\n * Emitted when an image generation tool call is in progress.\n */\nexport interface ResponseImageGenCallInProgressEvent {\n  /**\n   * The unique identifier of the image generation item being processed.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response's output array.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of the image generation item being processed.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always 'response.image_generation_call.in_progress'.\n   */\n  type: 'response.image_generation_call.in_progress';\n}\n\n/**\n * Emitted when a partial image is available during image generation streaming.\n */\nexport interface ResponseImageGenCallPartialImageEvent {\n  /**\n   * The unique identifier of the image generation item being processed.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response's output array.\n   */\n  output_index: number;\n\n  /**\n   * Base64-encoded partial image data, suitable for rendering as an image.\n   */\n  partial_image_b64: string;\n\n  /**\n   * 0-based index for the partial image (backend is 1-based, but this is 0-based for\n   * the user).\n   */\n  partial_image_index: number;\n\n  /**\n   * The sequence number of the image generation item being processed.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always 'response.image_generation_call.partial_image'.\n   */\n  type: 'response.image_generation_call.partial_image';\n}\n\n/**\n * Emitted when the response is in progress.\n */\nexport interface ResponseInProgressEvent {\n  /**\n   * The response that is in progress.\n   */\n  response: Response;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.in_progress`.\n   */\n  type: 'response.in_progress';\n}\n\n/**\n * Specify additional output data to include in the model response. Currently\n * supported values are:\n *\n * - `web_search_call.results`: Include the search results of the web search tool\n *   call.\n * - `web_search_call.action.sources`: Include the sources of the web search tool\n *   call.\n * - `code_interpreter_call.outputs`: Includes the outputs of python code execution\n *   in code interpreter tool call items.\n * - `computer_call_output.output.image_url`: Include image urls from the computer\n *   call output.\n * - `file_search_call.results`: Include the search results of the file search tool\n *   call.\n * - `message.input_image.image_url`: Include image urls from the input message.\n * - `computer_call_output.output.image_url`: Include image urls from the computer\n *   call output.\n * - `reasoning.encrypted_content`: Includes an encrypted version of reasoning\n *   tokens in reasoning item outputs. This enables reasoning items to be used in\n *   multi-turn conversations when using the Responses API statelessly (like when\n *   the `store` parameter is set to `false`, or when an organization is enrolled\n *   in the zero data retention program).\n * - `code_interpreter_call.outputs`: Includes the outputs of python code execution\n *   in code interpreter tool call items.\n */\nexport type ResponseIncludable =\n  | 'file_search_call.results'\n  | 'web_search_call.results'\n  | 'web_search_call.action.sources'\n  | 'message.input_image.image_url'\n  | 'computer_call_output.output.image_url'\n  | 'code_interpreter_call.outputs'\n  | 'reasoning.encrypted_content'\n  | 'message.output_text.logprobs';\n\n/**\n * An event that is emitted when a response finishes as incomplete.\n */\nexport interface ResponseIncompleteEvent {\n  /**\n   * The response that was incomplete.\n   */\n  response: Response;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.incomplete`.\n   */\n  type: 'response.incomplete';\n}\n\n/**\n * A list of one or many input items to the model, containing different content\n * types.\n */\nexport type ResponseInput = Array<ResponseInputItem>;\n\n/**\n * An audio input to the model.\n */\nexport interface ResponseInputAudio {\n  input_audio: ResponseInputAudio.InputAudio;\n\n  /**\n   * The type of the input item. Always `input_audio`.\n   */\n  type: 'input_audio';\n}\n\nexport namespace ResponseInputAudio {\n  export interface InputAudio {\n    /**\n     * Base64-encoded audio data.\n     */\n    data: string;\n\n    /**\n     * The format of the audio data. Currently supported formats are `mp3` and `wav`.\n     */\n    format: 'mp3' | 'wav';\n  }\n}\n\n/**\n * A text input to the model.\n */\nexport type ResponseInputContent = ResponseInputText | ResponseInputImage | ResponseInputFile;\n\n/**\n * A file input to the model.\n */\nexport interface ResponseInputFile {\n  /**\n   * The type of the input item. Always `input_file`.\n   */\n  type: 'input_file';\n\n  /**\n   * The detail level of the file to be sent to the model. Use `low` for the default\n   * rendering behavior, or `high` to render the file at higher quality. Defaults to\n   * `low`.\n   */\n  detail?: 'low' | 'high';\n\n  /**\n   * The content of the file to be sent to the model.\n   */\n  file_data?: string;\n\n  /**\n   * The ID of the file to be sent to the model.\n   */\n  file_id?: string | null;\n\n  /**\n   * The URL of the file to be sent to the model.\n   */\n  file_url?: string;\n\n  /**\n   * The name of the file to be sent to the model.\n   */\n  filename?: string;\n}\n\n/**\n * A file input to the model.\n */\nexport interface ResponseInputFileContent {\n  /**\n   * The type of the input item. Always `input_file`.\n   */\n  type: 'input_file';\n\n  /**\n   * The detail level of the file to be sent to the model. Use `low` for the default\n   * rendering behavior, or `high` to render the file at higher quality. Defaults to\n   * `low`.\n   */\n  detail?: 'low' | 'high';\n\n  /**\n   * The base64-encoded data of the file to be sent to the model.\n   */\n  file_data?: string | null;\n\n  /**\n   * The ID of the file to be sent to the model.\n   */\n  file_id?: string | null;\n\n  /**\n   * The URL of the file to be sent to the model.\n   */\n  file_url?: string | null;\n\n  /**\n   * The name of the file to be sent to the model.\n   */\n  filename?: string | null;\n}\n\n/**\n * An image input to the model. Learn about\n * [image inputs](https://platform.openai.com/docs/guides/vision).\n */\nexport interface ResponseInputImage {\n  /**\n   * The detail level of the image to be sent to the model. One of `high`, `low`,\n   * `auto`, or `original`. Defaults to `auto`.\n   */\n  detail: 'low' | 'high' | 'auto' | 'original';\n\n  /**\n   * The type of the input item. Always `input_image`.\n   */\n  type: 'input_image';\n\n  /**\n   * The ID of the file to be sent to the model.\n   */\n  file_id?: string | null;\n\n  /**\n   * The URL of the image to be sent to the model. A fully qualified URL or base64\n   * encoded image in a data URL.\n   */\n  image_url?: string | null;\n}\n\n/**\n * An image input to the model. Learn about\n * [image inputs](https://platform.openai.com/docs/guides/vision)\n */\nexport interface ResponseInputImageContent {\n  /**\n   * The type of the input item. Always `input_image`.\n   */\n  type: 'input_image';\n\n  /**\n   * The detail level of the image to be sent to the model. One of `high`, `low`,\n   * `auto`, or `original`. Defaults to `auto`.\n   */\n  detail?: 'low' | 'high' | 'auto' | 'original' | null;\n\n  /**\n   * The ID of the file to be sent to the model.\n   */\n  file_id?: string | null;\n\n  /**\n   * The URL of the image to be sent to the model. A fully qualified URL or base64\n   * encoded image in a data URL.\n   */\n  image_url?: string | null;\n}\n\n/**\n * A message input to the model with a role indicating instruction following\n * hierarchy. Instructions given with the `developer` or `system` role take\n * precedence over instructions given with the `user` role. Messages with the\n * `assistant` role are presumed to have been generated by the model in previous\n * interactions.\n */\nexport type ResponseInputItem =\n  | EasyInputMessage\n  | ResponseInputItem.Message\n  | ResponseOutputMessage\n  | ResponseFileSearchToolCall\n  | ResponseComputerToolCall\n  | ResponseInputItem.ComputerCallOutput\n  | ResponseFunctionWebSearch\n  | ResponseFunctionToolCall\n  | ResponseInputItem.FunctionCallOutput\n  | ResponseInputItem.ToolSearchCall\n  | ResponseToolSearchOutputItemParam\n  | ResponseReasoningItem\n  | ResponseCompactionItemParam\n  | ResponseInputItem.ImageGenerationCall\n  | ResponseCodeInterpreterToolCall\n  | ResponseInputItem.LocalShellCall\n  | ResponseInputItem.LocalShellCallOutput\n  | ResponseInputItem.ShellCall\n  | ResponseInputItem.ShellCallOutput\n  | ResponseInputItem.ApplyPatchCall\n  | ResponseInputItem.ApplyPatchCallOutput\n  | ResponseInputItem.McpListTools\n  | ResponseInputItem.McpApprovalRequest\n  | ResponseInputItem.McpApprovalResponse\n  | ResponseInputItem.McpCall\n  | ResponseCustomToolCallOutput\n  | ResponseCustomToolCall\n  | ResponseInputItem.CompactionTrigger\n  | ResponseInputItem.ItemReference;\n\nexport namespace ResponseInputItem {\n  /**\n   * A message input to the model with a role indicating instruction following\n   * hierarchy. Instructions given with the `developer` or `system` role take\n   * precedence over instructions given with the `user` role.\n   */\n  export interface Message {\n    /**\n     * A list of one or many input items to the model, containing different content\n     * types.\n     */\n    content: ResponsesAPI.ResponseInputMessageContentList;\n\n    /**\n     * The role of the message input. One of `user`, `system`, or `developer`.\n     */\n    role: 'user' | 'system' | 'developer';\n\n    /**\n     * The status of item. One of `in_progress`, `completed`, or `incomplete`.\n     * Populated when items are returned via API.\n     */\n    status?: 'in_progress' | 'completed' | 'incomplete';\n\n    /**\n     * The type of the message input. Always set to `message`.\n     */\n    type?: 'message';\n  }\n\n  /**\n   * The output of a computer tool call.\n   */\n  export interface ComputerCallOutput {\n    /**\n     * The ID of the computer tool call that produced the output.\n     */\n    call_id: string;\n\n    /**\n     * A computer screenshot image used with the computer use tool.\n     */\n    output: ResponsesAPI.ResponseComputerToolCallOutputScreenshot;\n\n    /**\n     * The type of the computer tool call output. Always `computer_call_output`.\n     */\n    type: 'computer_call_output';\n\n    /**\n     * The ID of the computer tool call output.\n     */\n    id?: string | null;\n\n    /**\n     * The safety checks reported by the API that have been acknowledged by the\n     * developer.\n     */\n    acknowledged_safety_checks?: Array<ComputerCallOutput.AcknowledgedSafetyCheck> | null;\n\n    /**\n     * The status of the message input. One of `in_progress`, `completed`, or\n     * `incomplete`. Populated when input items are returned via API.\n     */\n    status?: 'in_progress' | 'completed' | 'incomplete' | null;\n  }\n\n  export namespace ComputerCallOutput {\n    /**\n     * A pending safety check for the computer call.\n     */\n    export interface AcknowledgedSafetyCheck {\n      /**\n       * The ID of the pending safety check.\n       */\n      id: string;\n\n      /**\n       * The type of the pending safety check.\n       */\n      code?: string | null;\n\n      /**\n       * Details about the pending safety check.\n       */\n      message?: string | null;\n    }\n  }\n\n  /**\n   * The output of a function tool call.\n   */\n  export interface FunctionCallOutput {\n    /**\n     * The unique ID of the function tool call generated by the model.\n     */\n    call_id: string;\n\n    /**\n     * Text, image, or file output of the function tool call.\n     */\n    output: string | ResponsesAPI.ResponseFunctionCallOutputItemList;\n\n    /**\n     * The type of the function tool call output. Always `function_call_output`.\n     */\n    type: 'function_call_output';\n\n    /**\n     * The unique ID of the function tool call output. Populated when this item is\n     * returned via API.\n     */\n    id?: string | null;\n\n    /**\n     * The status of the item. One of `in_progress`, `completed`, or `incomplete`.\n     * Populated when items are returned via API.\n     */\n    status?: 'in_progress' | 'completed' | 'incomplete' | null;\n  }\n\n  export interface ToolSearchCall {\n    /**\n     * The arguments supplied to the tool search call.\n     */\n    arguments: unknown;\n\n    /**\n     * The item type. Always `tool_search_call`.\n     */\n    type: 'tool_search_call';\n\n    /**\n     * The unique ID of this tool search call.\n     */\n    id?: string | null;\n\n    /**\n     * The unique ID of the tool search call generated by the model.\n     */\n    call_id?: string | null;\n\n    /**\n     * Whether tool search was executed by the server or by the client.\n     */\n    execution?: 'server' | 'client';\n\n    /**\n     * The status of the tool search call.\n     */\n    status?: 'in_progress' | 'completed' | 'incomplete' | null;\n  }\n\n  /**\n   * An image generation request made by the model.\n   */\n  export interface ImageGenerationCall {\n    /**\n     * The unique ID of the image generation call.\n     */\n    id: string;\n\n    /**\n     * The generated image encoded in base64.\n     */\n    result: string | null;\n\n    /**\n     * The status of the image generation call.\n     */\n    status: 'in_progress' | 'completed' | 'generating' | 'failed';\n\n    /**\n     * The type of the image generation call. Always `image_generation_call`.\n     */\n    type: 'image_generation_call';\n  }\n\n  /**\n   * A tool call to run a command on the local shell.\n   */\n  export interface LocalShellCall {\n    /**\n     * The unique ID of the local shell call.\n     */\n    id: string;\n\n    /**\n     * Execute a shell command on the server.\n     */\n    action: LocalShellCall.Action;\n\n    /**\n     * The unique ID of the local shell tool call generated by the model.\n     */\n    call_id: string;\n\n    /**\n     * The status of the local shell call.\n     */\n    status: 'in_progress' | 'completed' | 'incomplete';\n\n    /**\n     * The type of the local shell call. Always `local_shell_call`.\n     */\n    type: 'local_shell_call';\n  }\n\n  export namespace LocalShellCall {\n    /**\n     * Execute a shell command on the server.\n     */\n    export interface Action {\n      /**\n       * The command to run.\n       */\n      command: Array<string>;\n\n      /**\n       * Environment variables to set for the command.\n       */\n      env: { [key: string]: string };\n\n      /**\n       * The type of the local shell action. Always `exec`.\n       */\n      type: 'exec';\n\n      /**\n       * Optional timeout in milliseconds for the command.\n       */\n      timeout_ms?: number | null;\n\n      /**\n       * Optional user to run the command as.\n       */\n      user?: string | null;\n\n      /**\n       * Optional working directory to run the command in.\n       */\n      working_directory?: string | null;\n    }\n  }\n\n  /**\n   * The output of a local shell tool call.\n   */\n  export interface LocalShellCallOutput {\n    /**\n     * The unique ID of the local shell tool call generated by the model.\n     */\n    id: string;\n\n    /**\n     * A JSON string of the output of the local shell tool call.\n     */\n    output: string;\n\n    /**\n     * The type of the local shell tool call output. Always `local_shell_call_output`.\n     */\n    type: 'local_shell_call_output';\n\n    /**\n     * The status of the item. One of `in_progress`, `completed`, or `incomplete`.\n     */\n    status?: 'in_progress' | 'completed' | 'incomplete' | null;\n  }\n\n  /**\n   * A tool representing a request to execute one or more shell commands.\n   */\n  export interface ShellCall {\n    /**\n     * The shell commands and limits that describe how to run the tool call.\n     */\n    action: ShellCall.Action;\n\n    /**\n     * The unique ID of the shell tool call generated by the model.\n     */\n    call_id: string;\n\n    /**\n     * The type of the item. Always `shell_call`.\n     */\n    type: 'shell_call';\n\n    /**\n     * The unique ID of the shell tool call. Populated when this item is returned via\n     * API.\n     */\n    id?: string | null;\n\n    /**\n     * The environment to execute the shell commands in.\n     */\n    environment?: ResponsesAPI.LocalEnvironment | ResponsesAPI.ContainerReference | null;\n\n    /**\n     * The status of the shell call. One of `in_progress`, `completed`, or\n     * `incomplete`.\n     */\n    status?: 'in_progress' | 'completed' | 'incomplete' | null;\n  }\n\n  export namespace ShellCall {\n    /**\n     * The shell commands and limits that describe how to run the tool call.\n     */\n    export interface Action {\n      /**\n       * Ordered shell commands for the execution environment to run.\n       */\n      commands: Array<string>;\n\n      /**\n       * Maximum number of UTF-8 characters to capture from combined stdout and stderr\n       * output.\n       */\n      max_output_length?: number | null;\n\n      /**\n       * Maximum wall-clock time in milliseconds to allow the shell commands to run.\n       */\n      timeout_ms?: number | null;\n    }\n  }\n\n  /**\n   * The streamed output items emitted by a shell tool call.\n   */\n  export interface ShellCallOutput {\n    /**\n     * The unique ID of the shell tool call generated by the model.\n     */\n    call_id: string;\n\n    /**\n     * Captured chunks of stdout and stderr output, along with their associated\n     * outcomes.\n     */\n    output: Array<ResponsesAPI.ResponseFunctionShellCallOutputContent>;\n\n    /**\n     * The type of the item. Always `shell_call_output`.\n     */\n    type: 'shell_call_output';\n\n    /**\n     * The unique ID of the shell tool call output. Populated when this item is\n     * returned via API.\n     */\n    id?: string | null;\n\n    /**\n     * The maximum number of UTF-8 characters captured for this shell call's combined\n     * output.\n     */\n    max_output_length?: number | null;\n\n    /**\n     * The status of the shell call output.\n     */\n    status?: 'in_progress' | 'completed' | 'incomplete' | null;\n  }\n\n  /**\n   * A tool call representing a request to create, delete, or update files using diff\n   * patches.\n   */\n  export interface ApplyPatchCall {\n    /**\n     * The unique ID of the apply patch tool call generated by the model.\n     */\n    call_id: string;\n\n    /**\n     * The specific create, delete, or update instruction for the apply_patch tool\n     * call.\n     */\n    operation: ApplyPatchCall.CreateFile | ApplyPatchCall.DeleteFile | ApplyPatchCall.UpdateFile;\n\n    /**\n     * The status of the apply patch tool call. One of `in_progress` or `completed`.\n     */\n    status: 'in_progress' | 'completed';\n\n    /**\n     * The type of the item. Always `apply_patch_call`.\n     */\n    type: 'apply_patch_call';\n\n    /**\n     * The unique ID of the apply patch tool call. Populated when this item is returned\n     * via API.\n     */\n    id?: string | null;\n  }\n\n  export namespace ApplyPatchCall {\n    /**\n     * Instruction for creating a new file via the apply_patch tool.\n     */\n    export interface CreateFile {\n      /**\n       * Unified diff content to apply when creating the file.\n       */\n      diff: string;\n\n      /**\n       * Path of the file to create relative to the workspace root.\n       */\n      path: string;\n\n      /**\n       * The operation type. Always `create_file`.\n       */\n      type: 'create_file';\n    }\n\n    /**\n     * Instruction for deleting an existing file via the apply_patch tool.\n     */\n    export interface DeleteFile {\n      /**\n       * Path of the file to delete relative to the workspace root.\n       */\n      path: string;\n\n      /**\n       * The operation type. Always `delete_file`.\n       */\n      type: 'delete_file';\n    }\n\n    /**\n     * Instruction for updating an existing file via the apply_patch tool.\n     */\n    export interface UpdateFile {\n      /**\n       * Unified diff content to apply to the existing file.\n       */\n      diff: string;\n\n      /**\n       * Path of the file to update relative to the workspace root.\n       */\n      path: string;\n\n      /**\n       * The operation type. Always `update_file`.\n       */\n      type: 'update_file';\n    }\n  }\n\n  /**\n   * The streamed output emitted by an apply patch tool call.\n   */\n  export interface ApplyPatchCallOutput {\n    /**\n     * The unique ID of the apply patch tool call generated by the model.\n     */\n    call_id: string;\n\n    /**\n     * The status of the apply patch tool call output. One of `completed` or `failed`.\n     */\n    status: 'completed' | 'failed';\n\n    /**\n     * The type of the item. Always `apply_patch_call_output`.\n     */\n    type: 'apply_patch_call_output';\n\n    /**\n     * The unique ID of the apply patch tool call output. Populated when this item is\n     * returned via API.\n     */\n    id?: string | null;\n\n    /**\n     * Optional human-readable log text from the apply patch tool (e.g., patch results\n     * or errors).\n     */\n    output?: string | null;\n  }\n\n  /**\n   * A list of tools available on an MCP server.\n   */\n  export interface McpListTools {\n    /**\n     * The unique ID of the list.\n     */\n    id: string;\n\n    /**\n     * The label of the MCP server.\n     */\n    server_label: string;\n\n    /**\n     * The tools available on the server.\n     */\n    tools: Array<McpListTools.Tool>;\n\n    /**\n     * The type of the item. Always `mcp_list_tools`.\n     */\n    type: 'mcp_list_tools';\n\n    /**\n     * Error message if the server could not list tools.\n     */\n    error?: string | null;\n  }\n\n  export namespace McpListTools {\n    /**\n     * A tool available on an MCP server.\n     */\n    export interface Tool {\n      /**\n       * The JSON schema describing the tool's input.\n       */\n      input_schema: unknown;\n\n      /**\n       * The name of the tool.\n       */\n      name: string;\n\n      /**\n       * Additional annotations about the tool.\n       */\n      annotations?: unknown | null;\n\n      /**\n       * The description of the tool.\n       */\n      description?: string | null;\n    }\n  }\n\n  /**\n   * A request for human approval of a tool invocation.\n   */\n  export interface McpApprovalRequest {\n    /**\n     * The unique ID of the approval request.\n     */\n    id: string;\n\n    /**\n     * A JSON string of arguments for the tool.\n     */\n    arguments: string;\n\n    /**\n     * The name of the tool to run.\n     */\n    name: string;\n\n    /**\n     * The label of the MCP server making the request.\n     */\n    server_label: string;\n\n    /**\n     * The type of the item. Always `mcp_approval_request`.\n     */\n    type: 'mcp_approval_request';\n  }\n\n  /**\n   * A response to an MCP approval request.\n   */\n  export interface McpApprovalResponse {\n    /**\n     * The ID of the approval request being answered.\n     */\n    approval_request_id: string;\n\n    /**\n     * Whether the request was approved.\n     */\n    approve: boolean;\n\n    /**\n     * The type of the item. Always `mcp_approval_response`.\n     */\n    type: 'mcp_approval_response';\n\n    /**\n     * The unique ID of the approval response\n     */\n    id?: string | null;\n\n    /**\n     * Optional reason for the decision.\n     */\n    reason?: string | null;\n  }\n\n  /**\n   * An invocation of a tool on an MCP server.\n   */\n  export interface McpCall {\n    /**\n     * The unique ID of the tool call.\n     */\n    id: string;\n\n    /**\n     * A JSON string of the arguments passed to the tool.\n     */\n    arguments: string;\n\n    /**\n     * The name of the tool that was run.\n     */\n    name: string;\n\n    /**\n     * The label of the MCP server running the tool.\n     */\n    server_label: string;\n\n    /**\n     * The type of the item. Always `mcp_call`.\n     */\n    type: 'mcp_call';\n\n    /**\n     * Unique identifier for the MCP tool call approval request. Include this value in\n     * a subsequent `mcp_approval_response` input to approve or reject the\n     * corresponding tool call.\n     */\n    approval_request_id?: string | null;\n\n    /**\n     * The error from the tool call, if any.\n     */\n    error?: string | null;\n\n    /**\n     * The output from the tool call.\n     */\n    output?: string | null;\n\n    /**\n     * The status of the tool call. One of `in_progress`, `completed`, `incomplete`,\n     * `calling`, or `failed`.\n     */\n    status?: 'in_progress' | 'completed' | 'incomplete' | 'calling' | 'failed';\n  }\n\n  /**\n   * Compacts the current context. Must be the final input item.\n   */\n  export interface CompactionTrigger {\n    /**\n     * The type of the item. Always `compaction_trigger`.\n     */\n    type: 'compaction_trigger';\n  }\n\n  /**\n   * An internal identifier for an item to reference.\n   */\n  export interface ItemReference {\n    /**\n     * The ID of the item to reference.\n     */\n    id: string;\n\n    /**\n     * The type of item to reference. Always `item_reference`.\n     */\n    type?: 'item_reference' | null;\n  }\n}\n\n/**\n * A list of one or many input items to the model, containing different content\n * types.\n */\nexport type ResponseInputMessageContentList = Array<ResponseInputContent>;\n\nexport interface ResponseInputMessageItem {\n  /**\n   * The unique ID of the message input.\n   */\n  id: string;\n\n  /**\n   * A list of one or many input items to the model, containing different content\n   * types.\n   */\n  content: ResponseInputMessageContentList;\n\n  /**\n   * The role of the message input. One of `user`, `system`, or `developer`.\n   */\n  role: 'user' | 'system' | 'developer';\n\n  /**\n   * The type of the message input. Always set to `message`.\n   */\n  type: 'message';\n\n  /**\n   * The status of item. One of `in_progress`, `completed`, or `incomplete`.\n   * Populated when items are returned via API.\n   */\n  status?: 'in_progress' | 'completed' | 'incomplete';\n}\n\n/**\n * A text input to the model.\n */\nexport interface ResponseInputText {\n  /**\n   * The text input to the model.\n   */\n  text: string;\n\n  /**\n   * The type of the input item. Always `input_text`.\n   */\n  type: 'input_text';\n}\n\n/**\n * A text input to the model.\n */\nexport interface ResponseInputTextContent {\n  /**\n   * The text input to the model.\n   */\n  text: string;\n\n  /**\n   * The type of the input item. Always `input_text`.\n   */\n  type: 'input_text';\n}\n\n/**\n * Content item used to generate a response.\n */\nexport type ResponseItem =\n  | ResponseInputMessageItem\n  | ResponseOutputMessage\n  | ResponseFileSearchToolCall\n  | ResponseComputerToolCall\n  | ResponseComputerToolCallOutputItem\n  | ResponseFunctionWebSearch\n  | ResponseFunctionToolCallItem\n  | ResponseFunctionToolCallOutputItem\n  | ResponseToolSearchCall\n  | ResponseToolSearchOutputItem\n  | ResponseReasoningItem\n  | ResponseCompactionItem\n  | ResponseItem.ImageGenerationCall\n  | ResponseCodeInterpreterToolCall\n  | ResponseItem.LocalShellCall\n  | ResponseItem.LocalShellCallOutput\n  | ResponseFunctionShellToolCall\n  | ResponseFunctionShellToolCallOutput\n  | ResponseApplyPatchToolCall\n  | ResponseApplyPatchToolCallOutput\n  | ResponseItem.McpListTools\n  | ResponseItem.McpApprovalRequest\n  | ResponseItem.McpApprovalResponse\n  | ResponseItem.McpCall\n  | ResponseCustomToolCallItem\n  | ResponseCustomToolCallOutputItem;\n\nexport namespace ResponseItem {\n  /**\n   * An image generation request made by the model.\n   */\n  export interface ImageGenerationCall {\n    /**\n     * The unique ID of the image generation call.\n     */\n    id: string;\n\n    /**\n     * The generated image encoded in base64.\n     */\n    result: string | null;\n\n    /**\n     * The status of the image generation call.\n     */\n    status: 'in_progress' | 'completed' | 'generating' | 'failed';\n\n    /**\n     * The type of the image generation call. Always `image_generation_call`.\n     */\n    type: 'image_generation_call';\n  }\n\n  /**\n   * A tool call to run a command on the local shell.\n   */\n  export interface LocalShellCall {\n    /**\n     * The unique ID of the local shell call.\n     */\n    id: string;\n\n    /**\n     * Execute a shell command on the server.\n     */\n    action: LocalShellCall.Action;\n\n    /**\n     * The unique ID of the local shell tool call generated by the model.\n     */\n    call_id: string;\n\n    /**\n     * The status of the local shell call.\n     */\n    status: 'in_progress' | 'completed' | 'incomplete';\n\n    /**\n     * The type of the local shell call. Always `local_shell_call`.\n     */\n    type: 'local_shell_call';\n  }\n\n  export namespace LocalShellCall {\n    /**\n     * Execute a shell command on the server.\n     */\n    export interface Action {\n      /**\n       * The command to run.\n       */\n      command: Array<string>;\n\n      /**\n       * Environment variables to set for the command.\n       */\n      env: { [key: string]: string };\n\n      /**\n       * The type of the local shell action. Always `exec`.\n       */\n      type: 'exec';\n\n      /**\n       * Optional timeout in milliseconds for the command.\n       */\n      timeout_ms?: number | null;\n\n      /**\n       * Optional user to run the command as.\n       */\n      user?: string | null;\n\n      /**\n       * Optional working directory to run the command in.\n       */\n      working_directory?: string | null;\n    }\n  }\n\n  /**\n   * The output of a local shell tool call.\n   */\n  export interface LocalShellCallOutput {\n    /**\n     * The unique ID of the local shell tool call generated by the model.\n     */\n    id: string;\n\n    /**\n     * A JSON string of the output of the local shell tool call.\n     */\n    output: string;\n\n    /**\n     * The type of the local shell tool call output. Always `local_shell_call_output`.\n     */\n    type: 'local_shell_call_output';\n\n    /**\n     * The status of the item. One of `in_progress`, `completed`, or `incomplete`.\n     */\n    status?: 'in_progress' | 'completed' | 'incomplete' | null;\n  }\n\n  /**\n   * A list of tools available on an MCP server.\n   */\n  export interface McpListTools {\n    /**\n     * The unique ID of the list.\n     */\n    id: string;\n\n    /**\n     * The label of the MCP server.\n     */\n    server_label: string;\n\n    /**\n     * The tools available on the server.\n     */\n    tools: Array<McpListTools.Tool>;\n\n    /**\n     * The type of the item. Always `mcp_list_tools`.\n     */\n    type: 'mcp_list_tools';\n\n    /**\n     * Error message if the server could not list tools.\n     */\n    error?: string | null;\n  }\n\n  export namespace McpListTools {\n    /**\n     * A tool available on an MCP server.\n     */\n    export interface Tool {\n      /**\n       * The JSON schema describing the tool's input.\n       */\n      input_schema: unknown;\n\n      /**\n       * The name of the tool.\n       */\n      name: string;\n\n      /**\n       * Additional annotations about the tool.\n       */\n      annotations?: unknown | null;\n\n      /**\n       * The description of the tool.\n       */\n      description?: string | null;\n    }\n  }\n\n  /**\n   * A request for human approval of a tool invocation.\n   */\n  export interface McpApprovalRequest {\n    /**\n     * The unique ID of the approval request.\n     */\n    id: string;\n\n    /**\n     * A JSON string of arguments for the tool.\n     */\n    arguments: string;\n\n    /**\n     * The name of the tool to run.\n     */\n    name: string;\n\n    /**\n     * The label of the MCP server making the request.\n     */\n    server_label: string;\n\n    /**\n     * The type of the item. Always `mcp_approval_request`.\n     */\n    type: 'mcp_approval_request';\n  }\n\n  /**\n   * A response to an MCP approval request.\n   */\n  export interface McpApprovalResponse {\n    /**\n     * The unique ID of the approval response\n     */\n    id: string;\n\n    /**\n     * The ID of the approval request being answered.\n     */\n    approval_request_id: string;\n\n    /**\n     * Whether the request was approved.\n     */\n    approve: boolean;\n\n    /**\n     * The type of the item. Always `mcp_approval_response`.\n     */\n    type: 'mcp_approval_response';\n\n    /**\n     * Optional reason for the decision.\n     */\n    reason?: string | null;\n  }\n\n  /**\n   * An invocation of a tool on an MCP server.\n   */\n  export interface McpCall {\n    /**\n     * The unique ID of the tool call.\n     */\n    id: string;\n\n    /**\n     * A JSON string of the arguments passed to the tool.\n     */\n    arguments: string;\n\n    /**\n     * The name of the tool that was run.\n     */\n    name: string;\n\n    /**\n     * The label of the MCP server running the tool.\n     */\n    server_label: string;\n\n    /**\n     * The type of the item. Always `mcp_call`.\n     */\n    type: 'mcp_call';\n\n    /**\n     * Unique identifier for the MCP tool call approval request. Include this value in\n     * a subsequent `mcp_approval_response` input to approve or reject the\n     * corresponding tool call.\n     */\n    approval_request_id?: string | null;\n\n    /**\n     * The error from the tool call, if any.\n     */\n    error?: string | null;\n\n    /**\n     * The output from the tool call.\n     */\n    output?: string | null;\n\n    /**\n     * The status of the tool call. One of `in_progress`, `completed`, `incomplete`,\n     * `calling`, or `failed`.\n     */\n    status?: 'in_progress' | 'completed' | 'incomplete' | 'calling' | 'failed';\n  }\n}\n\n/**\n * Represents the use of a local environment to perform shell actions.\n */\nexport interface ResponseLocalEnvironment {\n  /**\n   * The environment type. Always `local`.\n   */\n  type: 'local';\n}\n\n/**\n * Emitted when there is a delta (partial update) to the arguments of an MCP tool\n * call.\n */\nexport interface ResponseMcpCallArgumentsDeltaEvent {\n  /**\n   * A JSON string containing the partial update to the arguments for the MCP tool\n   * call.\n   */\n  delta: string;\n\n  /**\n   * The unique identifier of the MCP tool call item being processed.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response's output array.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always 'response.mcp_call_arguments.delta'.\n   */\n  type: 'response.mcp_call_arguments.delta';\n}\n\n/**\n * Emitted when the arguments for an MCP tool call are finalized.\n */\nexport interface ResponseMcpCallArgumentsDoneEvent {\n  /**\n   * A JSON string containing the finalized arguments for the MCP tool call.\n   */\n  arguments: string;\n\n  /**\n   * The unique identifier of the MCP tool call item being processed.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response's output array.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always 'response.mcp_call_arguments.done'.\n   */\n  type: 'response.mcp_call_arguments.done';\n}\n\n/**\n * Emitted when an MCP tool call has completed successfully.\n */\nexport interface ResponseMcpCallCompletedEvent {\n  /**\n   * The ID of the MCP tool call item that completed.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that completed.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always 'response.mcp_call.completed'.\n   */\n  type: 'response.mcp_call.completed';\n}\n\n/**\n * Emitted when an MCP tool call has failed.\n */\nexport interface ResponseMcpCallFailedEvent {\n  /**\n   * The ID of the MCP tool call item that failed.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that failed.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always 'response.mcp_call.failed'.\n   */\n  type: 'response.mcp_call.failed';\n}\n\n/**\n * Emitted when an MCP tool call is in progress.\n */\nexport interface ResponseMcpCallInProgressEvent {\n  /**\n   * The unique identifier of the MCP tool call item being processed.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response's output array.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always 'response.mcp_call.in_progress'.\n   */\n  type: 'response.mcp_call.in_progress';\n}\n\n/**\n * Emitted when the list of available MCP tools has been successfully retrieved.\n */\nexport interface ResponseMcpListToolsCompletedEvent {\n  /**\n   * The ID of the MCP tool call item that produced this output.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that was processed.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always 'response.mcp_list_tools.completed'.\n   */\n  type: 'response.mcp_list_tools.completed';\n}\n\n/**\n * Emitted when the attempt to list available MCP tools has failed.\n */\nexport interface ResponseMcpListToolsFailedEvent {\n  /**\n   * The ID of the MCP tool call item that failed.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that failed.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always 'response.mcp_list_tools.failed'.\n   */\n  type: 'response.mcp_list_tools.failed';\n}\n\n/**\n * Emitted when the system is in the process of retrieving the list of available\n * MCP tools.\n */\nexport interface ResponseMcpListToolsInProgressEvent {\n  /**\n   * The ID of the MCP tool call item that is being processed.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that is being processed.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always 'response.mcp_list_tools.in_progress'.\n   */\n  type: 'response.mcp_list_tools.in_progress';\n}\n\n/**\n * An audio output from the model.\n */\nexport interface ResponseOutputAudio {\n  /**\n   * Base64-encoded audio data from the model.\n   */\n  data: string;\n\n  /**\n   * The transcript of the audio data from the model.\n   */\n  transcript: string;\n\n  /**\n   * The type of the output audio. Always `output_audio`.\n   */\n  type: 'output_audio';\n}\n\n/**\n * An output message from the model.\n */\nexport type ResponseOutputItem =\n  | ResponseOutputMessage\n  | ResponseFileSearchToolCall\n  | ResponseFunctionToolCall\n  | ResponseFunctionToolCallOutputItem\n  | ResponseFunctionWebSearch\n  | ResponseComputerToolCall\n  | ResponseComputerToolCallOutputItem\n  | ResponseReasoningItem\n  | ResponseToolSearchCall\n  | ResponseToolSearchOutputItem\n  | ResponseCompactionItem\n  | ResponseOutputItem.ImageGenerationCall\n  | ResponseCodeInterpreterToolCall\n  | ResponseOutputItem.LocalShellCall\n  | ResponseOutputItem.LocalShellCallOutput\n  | ResponseFunctionShellToolCall\n  | ResponseFunctionShellToolCallOutput\n  | ResponseApplyPatchToolCall\n  | ResponseApplyPatchToolCallOutput\n  | ResponseOutputItem.McpCall\n  | ResponseOutputItem.McpListTools\n  | ResponseOutputItem.McpApprovalRequest\n  | ResponseOutputItem.McpApprovalResponse\n  | ResponseCustomToolCall\n  | ResponseCustomToolCallOutputItem;\n\nexport namespace ResponseOutputItem {\n  /**\n   * An image generation request made by the model.\n   */\n  export interface ImageGenerationCall {\n    /**\n     * The unique ID of the image generation call.\n     */\n    id: string;\n\n    /**\n     * The generated image encoded in base64.\n     */\n    result: string | null;\n\n    /**\n     * The status of the image generation call.\n     */\n    status: 'in_progress' | 'completed' | 'generating' | 'failed';\n\n    /**\n     * The type of the image generation call. Always `image_generation_call`.\n     */\n    type: 'image_generation_call';\n  }\n\n  /**\n   * A tool call to run a command on the local shell.\n   */\n  export interface LocalShellCall {\n    /**\n     * The unique ID of the local shell call.\n     */\n    id: string;\n\n    /**\n     * Execute a shell command on the server.\n     */\n    action: LocalShellCall.Action;\n\n    /**\n     * The unique ID of the local shell tool call generated by the model.\n     */\n    call_id: string;\n\n    /**\n     * The status of the local shell call.\n     */\n    status: 'in_progress' | 'completed' | 'incomplete';\n\n    /**\n     * The type of the local shell call. Always `local_shell_call`.\n     */\n    type: 'local_shell_call';\n  }\n\n  export namespace LocalShellCall {\n    /**\n     * Execute a shell command on the server.\n     */\n    export interface Action {\n      /**\n       * The command to run.\n       */\n      command: Array<string>;\n\n      /**\n       * Environment variables to set for the command.\n       */\n      env: { [key: string]: string };\n\n      /**\n       * The type of the local shell action. Always `exec`.\n       */\n      type: 'exec';\n\n      /**\n       * Optional timeout in milliseconds for the command.\n       */\n      timeout_ms?: number | null;\n\n      /**\n       * Optional user to run the command as.\n       */\n      user?: string | null;\n\n      /**\n       * Optional working directory to run the command in.\n       */\n      working_directory?: string | null;\n    }\n  }\n\n  /**\n   * The output of a local shell tool call.\n   */\n  export interface LocalShellCallOutput {\n    /**\n     * The unique ID of the local shell tool call generated by the model.\n     */\n    id: string;\n\n    /**\n     * A JSON string of the output of the local shell tool call.\n     */\n    output: string;\n\n    /**\n     * The type of the local shell tool call output. Always `local_shell_call_output`.\n     */\n    type: 'local_shell_call_output';\n\n    /**\n     * The status of the item. One of `in_progress`, `completed`, or `incomplete`.\n     */\n    status?: 'in_progress' | 'completed' | 'incomplete' | null;\n  }\n\n  /**\n   * An invocation of a tool on an MCP server.\n   */\n  export interface McpCall {\n    /**\n     * The unique ID of the tool call.\n     */\n    id: string;\n\n    /**\n     * A JSON string of the arguments passed to the tool.\n     */\n    arguments: string;\n\n    /**\n     * The name of the tool that was run.\n     */\n    name: string;\n\n    /**\n     * The label of the MCP server running the tool.\n     */\n    server_label: string;\n\n    /**\n     * The type of the item. Always `mcp_call`.\n     */\n    type: 'mcp_call';\n\n    /**\n     * Unique identifier for the MCP tool call approval request. Include this value in\n     * a subsequent `mcp_approval_response` input to approve or reject the\n     * corresponding tool call.\n     */\n    approval_request_id?: string | null;\n\n    /**\n     * The error from the tool call, if any.\n     */\n    error?: string | null;\n\n    /**\n     * The output from the tool call.\n     */\n    output?: string | null;\n\n    /**\n     * The status of the tool call. One of `in_progress`, `completed`, `incomplete`,\n     * `calling`, or `failed`.\n     */\n    status?: 'in_progress' | 'completed' | 'incomplete' | 'calling' | 'failed';\n  }\n\n  /**\n   * A list of tools available on an MCP server.\n   */\n  export interface McpListTools {\n    /**\n     * The unique ID of the list.\n     */\n    id: string;\n\n    /**\n     * The label of the MCP server.\n     */\n    server_label: string;\n\n    /**\n     * The tools available on the server.\n     */\n    tools: Array<McpListTools.Tool>;\n\n    /**\n     * The type of the item. Always `mcp_list_tools`.\n     */\n    type: 'mcp_list_tools';\n\n    /**\n     * Error message if the server could not list tools.\n     */\n    error?: string | null;\n  }\n\n  export namespace McpListTools {\n    /**\n     * A tool available on an MCP server.\n     */\n    export interface Tool {\n      /**\n       * The JSON schema describing the tool's input.\n       */\n      input_schema: unknown;\n\n      /**\n       * The name of the tool.\n       */\n      name: string;\n\n      /**\n       * Additional annotations about the tool.\n       */\n      annotations?: unknown | null;\n\n      /**\n       * The description of the tool.\n       */\n      description?: string | null;\n    }\n  }\n\n  /**\n   * A request for human approval of a tool invocation.\n   */\n  export interface McpApprovalRequest {\n    /**\n     * The unique ID of the approval request.\n     */\n    id: string;\n\n    /**\n     * A JSON string of arguments for the tool.\n     */\n    arguments: string;\n\n    /**\n     * The name of the tool to run.\n     */\n    name: string;\n\n    /**\n     * The label of the MCP server making the request.\n     */\n    server_label: string;\n\n    /**\n     * The type of the item. Always `mcp_approval_request`.\n     */\n    type: 'mcp_approval_request';\n  }\n\n  /**\n   * A response to an MCP approval request.\n   */\n  export interface McpApprovalResponse {\n    /**\n     * The unique ID of the approval response\n     */\n    id: string;\n\n    /**\n     * The ID of the approval request being answered.\n     */\n    approval_request_id: string;\n\n    /**\n     * Whether the request was approved.\n     */\n    approve: boolean;\n\n    /**\n     * The type of the item. Always `mcp_approval_response`.\n     */\n    type: 'mcp_approval_response';\n\n    /**\n     * Optional reason for the decision.\n     */\n    reason?: string | null;\n  }\n}\n\n/**\n * Emitted when a new output item is added.\n */\nexport interface ResponseOutputItemAddedEvent {\n  /**\n   * The output item that was added.\n   */\n  item: ResponseOutputItem;\n\n  /**\n   * The index of the output item that was added.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.output_item.added`.\n   */\n  type: 'response.output_item.added';\n}\n\n/**\n * Emitted when an output item is marked done.\n */\nexport interface ResponseOutputItemDoneEvent {\n  /**\n   * The output item that was marked done.\n   */\n  item: ResponseOutputItem;\n\n  /**\n   * The index of the output item that was marked done.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.output_item.done`.\n   */\n  type: 'response.output_item.done';\n}\n\n/**\n * An output message from the model.\n */\nexport interface ResponseOutputMessage {\n  /**\n   * The unique ID of the output message.\n   */\n  id: string;\n\n  /**\n   * The content of the output message.\n   */\n  content: Array<ResponseOutputText | ResponseOutputRefusal>;\n\n  /**\n   * The role of the output message. Always `assistant`.\n   */\n  role: 'assistant';\n\n  /**\n   * The status of the message input. One of `in_progress`, `completed`, or\n   * `incomplete`. Populated when input items are returned via API.\n   */\n  status: 'in_progress' | 'completed' | 'incomplete';\n\n  /**\n   * The type of the output message. Always `message`.\n   */\n  type: 'message';\n\n  /**\n   * Labels an `assistant` message as intermediate commentary (`commentary`) or the\n   * final answer (`final_answer`). For models like `gpt-5.3-codex` and beyond, when\n   * sending follow-up requests, preserve and resend phase on all assistant messages\n   * \u2014 dropping it can degrade performance. Not used for user messages.\n   */\n  phase?: 'commentary' | 'final_answer' | null;\n}\n\n/**\n * A refusal from the model.\n */\nexport interface ResponseOutputRefusal {\n  /**\n   * The refusal explanation from the model.\n   */\n  refusal: string;\n\n  /**\n   * The type of the refusal. Always `refusal`.\n   */\n  type: 'refusal';\n}\n\n/**\n * A text output from the model.\n */\nexport interface ResponseOutputText {\n  /**\n   * The annotations of the text output.\n   */\n  annotations: Array<\n    | ResponseOutputText.FileCitation\n    | ResponseOutputText.URLCitation\n    | ResponseOutputText.ContainerFileCitation\n    | ResponseOutputText.FilePath\n  >;\n\n  /**\n   * The text output from the model.\n   */\n  text: string;\n\n  /**\n   * The type of the output text. Always `output_text`.\n   */\n  type: 'output_text';\n\n  logprobs?: Array<ResponseOutputText.Logprob>;\n}\n\nexport namespace ResponseOutputText {\n  /**\n   * A citation to a file.\n   */\n  export interface FileCitation {\n    /**\n     * The ID of the file.\n     */\n    file_id: string;\n\n    /**\n     * The filename of the file cited.\n     */\n    filename: string;\n\n    /**\n     * The index of the file in the list of files.\n     */\n    index: number;\n\n    /**\n     * The type of the file citation. Always `file_citation`.\n     */\n    type: 'file_citation';\n  }\n\n  /**\n   * A citation for a web resource used to generate a model response.\n   */\n  export interface URLCitation {\n    /**\n     * The index of the last character of the URL citation in the message.\n     */\n    end_index: number;\n\n    /**\n     * The index of the first character of the URL citation in the message.\n     */\n    start_index: number;\n\n    /**\n     * The title of the web resource.\n     */\n    title: string;\n\n    /**\n     * The type of the URL citation. Always `url_citation`.\n     */\n    type: 'url_citation';\n\n    /**\n     * The URL of the web resource.\n     */\n    url: string;\n  }\n\n  /**\n   * A citation for a container file used to generate a model response.\n   */\n  export interface ContainerFileCitation {\n    /**\n     * The ID of the container file.\n     */\n    container_id: string;\n\n    /**\n     * The index of the last character of the container file citation in the message.\n     */\n    end_index: number;\n\n    /**\n     * The ID of the file.\n     */\n    file_id: string;\n\n    /**\n     * The filename of the container file cited.\n     */\n    filename: string;\n\n    /**\n     * The index of the first character of the container file citation in the message.\n     */\n    start_index: number;\n\n    /**\n     * The type of the container file citation. Always `container_file_citation`.\n     */\n    type: 'container_file_citation';\n  }\n\n  /**\n   * A path to a file.\n   */\n  export interface FilePath {\n    /**\n     * The ID of the file.\n     */\n    file_id: string;\n\n    /**\n     * The index of the file in the list of files.\n     */\n    index: number;\n\n    /**\n     * The type of the file path. Always `file_path`.\n     */\n    type: 'file_path';\n  }\n\n  /**\n   * The log probability of a token.\n   */\n  export interface Logprob {\n    token: string;\n\n    bytes: Array<number>;\n\n    logprob: number;\n\n    top_logprobs: Array<Logprob.TopLogprob>;\n  }\n\n  export namespace Logprob {\n    /**\n     * The top log probability of a token.\n     */\n    export interface TopLogprob {\n      token: string;\n\n      bytes: Array<number>;\n\n      logprob: number;\n    }\n  }\n}\n\n/**\n * Emitted when an annotation is added to output text content.\n */\nexport interface ResponseOutputTextAnnotationAddedEvent {\n  /**\n   * The annotation object being added. (See annotation schema for details.)\n   */\n  annotation: unknown;\n\n  /**\n   * The index of the annotation within the content part.\n   */\n  annotation_index: number;\n\n  /**\n   * The index of the content part within the output item.\n   */\n  content_index: number;\n\n  /**\n   * The unique identifier of the item to which the annotation is being added.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item in the response's output array.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always 'response.output_text.annotation.added'.\n   */\n  type: 'response.output_text.annotation.added';\n}\n\n/**\n * Reference to a prompt template and its variables.\n * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts).\n */\nexport interface ResponsePrompt {\n  /**\n   * The unique identifier of the prompt template to use.\n   */\n  id: string;\n\n  /**\n   * Optional map of values to substitute in for variables in your prompt. The\n   * substitution values can either be strings, or other Response input types like\n   * images or files.\n   */\n  variables?: { [key: string]: string | ResponseInputText | ResponseInputImage | ResponseInputFile } | null;\n\n  /**\n   * Optional version of the prompt template.\n   */\n  version?: string | null;\n}\n\n/**\n * Emitted when a response is queued and waiting to be processed.\n */\nexport interface ResponseQueuedEvent {\n  /**\n   * The full response object that is queued.\n   */\n  response: Response;\n\n  /**\n   * The sequence number for this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always 'response.queued'.\n   */\n  type: 'response.queued';\n}\n\n/**\n * A description of the chain of thought used by a reasoning model while generating\n * a response. Be sure to include these items in your `input` to the Responses API\n * for subsequent turns of a conversation if you are manually\n * [managing context](https://platform.openai.com/docs/guides/conversation-state).\n */\nexport interface ResponseReasoningItem {\n  /**\n   * The unique identifier of the reasoning content.\n   */\n  id: string;\n\n  /**\n   * Reasoning summary content.\n   */\n  summary: Array<ResponseReasoningItem.Summary>;\n\n  /**\n   * The type of the object. Always `reasoning`.\n   */\n  type: 'reasoning';\n\n  /**\n   * Reasoning text content.\n   */\n  content?: Array<ResponseReasoningItem.Content>;\n\n  /**\n   * The encrypted content of the reasoning item - populated when a response is\n   * generated with `reasoning.encrypted_content` in the `include` parameter.\n   */\n  encrypted_content?: string | null;\n\n  /**\n   * The status of the item. One of `in_progress`, `completed`, or `incomplete`.\n   * Populated when items are returned via API.\n   */\n  status?: 'in_progress' | 'completed' | 'incomplete';\n}\n\nexport namespace ResponseReasoningItem {\n  /**\n   * A summary text from the model.\n   */\n  export interface Summary {\n    /**\n     * A summary of the reasoning output from the model so far.\n     */\n    text: string;\n\n    /**\n     * The type of the object. Always `summary_text`.\n     */\n    type: 'summary_text';\n  }\n\n  /**\n   * Reasoning text from the model.\n   */\n  export interface Content {\n    /**\n     * The reasoning text from the model.\n     */\n    text: string;\n\n    /**\n     * The type of the reasoning text. Always `reasoning_text`.\n     */\n    type: 'reasoning_text';\n  }\n}\n\n/**\n * Emitted when a new reasoning summary part is added.\n */\nexport interface ResponseReasoningSummaryPartAddedEvent {\n  /**\n   * The ID of the item this summary part is associated with.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item this summary part is associated with.\n   */\n  output_index: number;\n\n  /**\n   * The summary part that was added.\n   */\n  part: ResponseReasoningSummaryPartAddedEvent.Part;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The index of the summary part within the reasoning summary.\n   */\n  summary_index: number;\n\n  /**\n   * The type of the event. Always `response.reasoning_summary_part.added`.\n   */\n  type: 'response.reasoning_summary_part.added';\n}\n\nexport namespace ResponseReasoningSummaryPartAddedEvent {\n  /**\n   * The summary part that was added.\n   */\n  export interface Part {\n    /**\n     * The text of the summary part.\n     */\n    text: string;\n\n    /**\n     * The type of the summary part. Always `summary_text`.\n     */\n    type: 'summary_text';\n  }\n}\n\n/**\n * Emitted when a reasoning summary part is completed.\n */\nexport interface ResponseReasoningSummaryPartDoneEvent {\n  /**\n   * The ID of the item this summary part is associated with.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item this summary part is associated with.\n   */\n  output_index: number;\n\n  /**\n   * The completed summary part.\n   */\n  part: ResponseReasoningSummaryPartDoneEvent.Part;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The index of the summary part within the reasoning summary.\n   */\n  summary_index: number;\n\n  /**\n   * The type of the event. Always `response.reasoning_summary_part.done`.\n   */\n  type: 'response.reasoning_summary_part.done';\n}\n\nexport namespace ResponseReasoningSummaryPartDoneEvent {\n  /**\n   * The completed summary part.\n   */\n  export interface Part {\n    /**\n     * The text of the summary part.\n     */\n    text: string;\n\n    /**\n     * The type of the summary part. Always `summary_text`.\n     */\n    type: 'summary_text';\n  }\n}\n\n/**\n * Emitted when a delta is added to a reasoning summary text.\n */\nexport interface ResponseReasoningSummaryTextDeltaEvent {\n  /**\n   * The text delta that was added to the summary.\n   */\n  delta: string;\n\n  /**\n   * The ID of the item this summary text delta is associated with.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item this summary text delta is associated with.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The index of the summary part within the reasoning summary.\n   */\n  summary_index: number;\n\n  /**\n   * The type of the event. Always `response.reasoning_summary_text.delta`.\n   */\n  type: 'response.reasoning_summary_text.delta';\n}\n\n/**\n * Emitted when a reasoning summary text is completed.\n */\nexport interface ResponseReasoningSummaryTextDoneEvent {\n  /**\n   * The ID of the item this summary text is associated with.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item this summary text is associated with.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The index of the summary part within the reasoning summary.\n   */\n  summary_index: number;\n\n  /**\n   * The full text of the completed reasoning summary.\n   */\n  text: string;\n\n  /**\n   * The type of the event. Always `response.reasoning_summary_text.done`.\n   */\n  type: 'response.reasoning_summary_text.done';\n}\n\n/**\n * Emitted when a delta is added to a reasoning text.\n */\nexport interface ResponseReasoningTextDeltaEvent {\n  /**\n   * The index of the reasoning content part this delta is associated with.\n   */\n  content_index: number;\n\n  /**\n   * The text delta that was added to the reasoning content.\n   */\n  delta: string;\n\n  /**\n   * The ID of the item this reasoning text delta is associated with.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item this reasoning text delta is associated with.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.reasoning_text.delta`.\n   */\n  type: 'response.reasoning_text.delta';\n}\n\n/**\n * Emitted when a reasoning text is completed.\n */\nexport interface ResponseReasoningTextDoneEvent {\n  /**\n   * The index of the reasoning content part.\n   */\n  content_index: number;\n\n  /**\n   * The ID of the item this reasoning text is associated with.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item this reasoning text is associated with.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The full text of the completed reasoning content.\n   */\n  text: string;\n\n  /**\n   * The type of the event. Always `response.reasoning_text.done`.\n   */\n  type: 'response.reasoning_text.done';\n}\n\n/**\n * Emitted when there is a partial refusal text.\n */\nexport interface ResponseRefusalDeltaEvent {\n  /**\n   * The index of the content part that the refusal text is added to.\n   */\n  content_index: number;\n\n  /**\n   * The refusal text that is added.\n   */\n  delta: string;\n\n  /**\n   * The ID of the output item that the refusal text is added to.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that the refusal text is added to.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.refusal.delta`.\n   */\n  type: 'response.refusal.delta';\n}\n\n/**\n * Emitted when refusal text is finalized.\n */\nexport interface ResponseRefusalDoneEvent {\n  /**\n   * The index of the content part that the refusal text is finalized.\n   */\n  content_index: number;\n\n  /**\n   * The ID of the output item that the refusal text is finalized.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that the refusal text is finalized.\n   */\n  output_index: number;\n\n  /**\n   * The refusal text that is finalized.\n   */\n  refusal: string;\n\n  /**\n   * The sequence number of this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.refusal.done`.\n   */\n  type: 'response.refusal.done';\n}\n\n/**\n * The status of the response generation. One of `completed`, `failed`,\n * `in_progress`, `cancelled`, `queued`, or `incomplete`.\n */\nexport type ResponseStatus = 'completed' | 'failed' | 'in_progress' | 'cancelled' | 'queued' | 'incomplete';\n\n/**\n * Emitted when there is a partial audio response.\n */\nexport type ResponseStreamEvent =\n  | ResponseAudioDeltaEvent\n  | ResponseAudioDoneEvent\n  | ResponseAudioTranscriptDeltaEvent\n  | ResponseAudioTranscriptDoneEvent\n  | ResponseCodeInterpreterCallCodeDeltaEvent\n  | ResponseCodeInterpreterCallCodeDoneEvent\n  | ResponseCodeInterpreterCallCompletedEvent\n  | ResponseCodeInterpreterCallInProgressEvent\n  | ResponseCodeInterpreterCallInterpretingEvent\n  | ResponseCompletedEvent\n  | ResponseContentPartAddedEvent\n  | ResponseContentPartDoneEvent\n  | ResponseCreatedEvent\n  | ResponseErrorEvent\n  | ResponseFileSearchCallCompletedEvent\n  | ResponseFileSearchCallInProgressEvent\n  | ResponseFileSearchCallSearchingEvent\n  | ResponseFunctionCallArgumentsDeltaEvent\n  | ResponseFunctionCallArgumentsDoneEvent\n  | ResponseInProgressEvent\n  | ResponseFailedEvent\n  | ResponseIncompleteEvent\n  | ResponseOutputItemAddedEvent\n  | ResponseOutputItemDoneEvent\n  | ResponseReasoningSummaryPartAddedEvent\n  | ResponseReasoningSummaryPartDoneEvent\n  | ResponseReasoningSummaryTextDeltaEvent\n  | ResponseReasoningSummaryTextDoneEvent\n  | ResponseReasoningTextDeltaEvent\n  | ResponseReasoningTextDoneEvent\n  | ResponseRefusalDeltaEvent\n  | ResponseRefusalDoneEvent\n  | ResponseTextDeltaEvent\n  | ResponseTextDoneEvent\n  | ResponseWebSearchCallCompletedEvent\n  | ResponseWebSearchCallInProgressEvent\n  | ResponseWebSearchCallSearchingEvent\n  | ResponseImageGenCallCompletedEvent\n  | ResponseImageGenCallGeneratingEvent\n  | ResponseImageGenCallInProgressEvent\n  | ResponseImageGenCallPartialImageEvent\n  | ResponseMcpCallArgumentsDeltaEvent\n  | ResponseMcpCallArgumentsDoneEvent\n  | ResponseMcpCallCompletedEvent\n  | ResponseMcpCallFailedEvent\n  | ResponseMcpCallInProgressEvent\n  | ResponseMcpListToolsCompletedEvent\n  | ResponseMcpListToolsFailedEvent\n  | ResponseMcpListToolsInProgressEvent\n  | ResponseOutputTextAnnotationAddedEvent\n  | ResponseQueuedEvent\n  | ResponseCustomToolCallInputDeltaEvent\n  | ResponseCustomToolCallInputDoneEvent;\n\n/**\n * Configuration options for a text response from the model. Can be plain text or\n * structured JSON data. Learn more:\n *\n * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n */\nexport interface ResponseTextConfig {\n  /**\n   * An object specifying the format that the model must output.\n   *\n   * Configuring `{ \"type\": \"json_schema\" }` enables Structured Outputs, which\n   * ensures the model will match your supplied JSON schema. Learn more in the\n   * [Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n   *\n   * The default format is `{ \"type\": \"text\" }` with no additional options.\n   *\n   * **Not recommended for gpt-4o and newer models:**\n   *\n   * Setting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\n   * ensures the message the model generates is valid JSON. Using `json_schema` is\n   * preferred for models that support it.\n   */\n  format?: ResponseFormatTextConfig;\n\n  /**\n   * Constrains the verbosity of the model's response. Lower values will result in\n   * more concise responses, while higher values will result in more verbose\n   * responses. Currently supported values are `low`, `medium`, and `high`.\n   */\n  verbosity?: 'low' | 'medium' | 'high' | null;\n}\n\n/**\n * Emitted when there is an additional text delta.\n */\nexport interface ResponseTextDeltaEvent {\n  /**\n   * The index of the content part that the text delta was added to.\n   */\n  content_index: number;\n\n  /**\n   * The text delta that was added.\n   */\n  delta: string;\n\n  /**\n   * The ID of the output item that the text delta was added to.\n   */\n  item_id: string;\n\n  /**\n   * The log probabilities of the tokens in the delta.\n   */\n  logprobs: Array<ResponseTextDeltaEvent.Logprob>;\n\n  /**\n   * The index of the output item that the text delta was added to.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number for this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.output_text.delta`.\n   */\n  type: 'response.output_text.delta';\n}\n\nexport namespace ResponseTextDeltaEvent {\n  /**\n   * A logprob is the logarithmic probability that the model assigns to producing a\n   * particular token at a given position in the sequence. Less-negative (higher)\n   * logprob values indicate greater model confidence in that token choice.\n   */\n  export interface Logprob {\n    /**\n     * A possible text token.\n     */\n    token: string;\n\n    /**\n     * The log probability of this token.\n     */\n    logprob: number;\n\n    /**\n     * The log probabilities of up to 20 of the most likely tokens.\n     */\n    top_logprobs?: Array<Logprob.TopLogprob>;\n  }\n\n  export namespace Logprob {\n    export interface TopLogprob {\n      /**\n       * A possible text token.\n       */\n      token?: string;\n\n      /**\n       * The log probability of this token.\n       */\n      logprob?: number;\n    }\n  }\n}\n\n/**\n * Emitted when text content is finalized.\n */\nexport interface ResponseTextDoneEvent {\n  /**\n   * The index of the content part that the text content is finalized.\n   */\n  content_index: number;\n\n  /**\n   * The ID of the output item that the text content is finalized.\n   */\n  item_id: string;\n\n  /**\n   * The log probabilities of the tokens in the delta.\n   */\n  logprobs: Array<ResponseTextDoneEvent.Logprob>;\n\n  /**\n   * The index of the output item that the text content is finalized.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number for this event.\n   */\n  sequence_number: number;\n\n  /**\n   * The text content that is finalized.\n   */\n  text: string;\n\n  /**\n   * The type of the event. Always `response.output_text.done`.\n   */\n  type: 'response.output_text.done';\n}\n\nexport namespace ResponseTextDoneEvent {\n  /**\n   * A logprob is the logarithmic probability that the model assigns to producing a\n   * particular token at a given position in the sequence. Less-negative (higher)\n   * logprob values indicate greater model confidence in that token choice.\n   */\n  export interface Logprob {\n    /**\n     * A possible text token.\n     */\n    token: string;\n\n    /**\n     * The log probability of this token.\n     */\n    logprob: number;\n\n    /**\n     * The log probabilities of up to 20 of the most likely tokens.\n     */\n    top_logprobs?: Array<Logprob.TopLogprob>;\n  }\n\n  export namespace Logprob {\n    export interface TopLogprob {\n      /**\n       * A possible text token.\n       */\n      token?: string;\n\n      /**\n       * The log probability of this token.\n       */\n      logprob?: number;\n    }\n  }\n}\n\nexport interface ResponseToolSearchCall {\n  /**\n   * The unique ID of the tool search call item.\n   */\n  id: string;\n\n  /**\n   * Arguments used for the tool search call.\n   */\n  arguments: unknown;\n\n  /**\n   * The unique ID of the tool search call generated by the model.\n   */\n  call_id: string | null;\n\n  /**\n   * Whether tool search was executed by the server or by the client.\n   */\n  execution: 'server' | 'client';\n\n  /**\n   * The status of the tool search call item that was recorded.\n   */\n  status: 'in_progress' | 'completed' | 'incomplete';\n\n  /**\n   * The type of the item. Always `tool_search_call`.\n   */\n  type: 'tool_search_call';\n\n  /**\n   * The identifier of the actor that created the item.\n   */\n  created_by?: string;\n}\n\nexport interface ResponseToolSearchOutputItem {\n  /**\n   * The unique ID of the tool search output item.\n   */\n  id: string;\n\n  /**\n   * The unique ID of the tool search call generated by the model.\n   */\n  call_id: string | null;\n\n  /**\n   * Whether tool search was executed by the server or by the client.\n   */\n  execution: 'server' | 'client';\n\n  /**\n   * The status of the tool search output item that was recorded.\n   */\n  status: 'in_progress' | 'completed' | 'incomplete';\n\n  /**\n   * The loaded tool definitions returned by tool search.\n   */\n  tools: Array<Tool>;\n\n  /**\n   * The type of the item. Always `tool_search_output`.\n   */\n  type: 'tool_search_output';\n\n  /**\n   * The identifier of the actor that created the item.\n   */\n  created_by?: string;\n}\n\nexport interface ResponseToolSearchOutputItemParam {\n  /**\n   * The loaded tool definitions returned by the tool search output.\n   */\n  tools: Array<Tool>;\n\n  /**\n   * The item type. Always `tool_search_output`.\n   */\n  type: 'tool_search_output';\n\n  /**\n   * The unique ID of this tool search output.\n   */\n  id?: string | null;\n\n  /**\n   * The unique ID of the tool search call generated by the model.\n   */\n  call_id?: string | null;\n\n  /**\n   * Whether tool search was executed by the server or by the client.\n   */\n  execution?: 'server' | 'client';\n\n  /**\n   * The status of the tool search output.\n   */\n  status?: 'in_progress' | 'completed' | 'incomplete' | null;\n}\n\n/**\n * Represents token usage details including input tokens, output tokens, a\n * breakdown of output tokens, and the total tokens used.\n */\nexport interface ResponseUsage {\n  /**\n   * The number of input tokens.\n   */\n  input_tokens: number;\n\n  /**\n   * A detailed breakdown of the input tokens.\n   */\n  input_tokens_details: ResponseUsage.InputTokensDetails;\n\n  /**\n   * The number of output tokens.\n   */\n  output_tokens: number;\n\n  /**\n   * A detailed breakdown of the output tokens.\n   */\n  output_tokens_details: ResponseUsage.OutputTokensDetails;\n\n  /**\n   * The total number of tokens used.\n   */\n  total_tokens: number;\n}\n\nexport namespace ResponseUsage {\n  /**\n   * A detailed breakdown of the input tokens.\n   */\n  export interface InputTokensDetails {\n    /**\n     * The number of tokens that were retrieved from the cache.\n     * [More on prompt caching](https://platform.openai.com/docs/guides/prompt-caching).\n     */\n    cached_tokens: number;\n  }\n\n  /**\n   * A detailed breakdown of the output tokens.\n   */\n  export interface OutputTokensDetails {\n    /**\n     * The number of reasoning tokens.\n     */\n    reasoning_tokens: number;\n  }\n}\n\n/**\n * Emitted when a web search call is completed.\n */\nexport interface ResponseWebSearchCallCompletedEvent {\n  /**\n   * Unique ID for the output item associated with the web search call.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that the web search call is associated with.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of the web search call being processed.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.web_search_call.completed`.\n   */\n  type: 'response.web_search_call.completed';\n}\n\n/**\n * Emitted when a web search call is initiated.\n */\nexport interface ResponseWebSearchCallInProgressEvent {\n  /**\n   * Unique ID for the output item associated with the web search call.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that the web search call is associated with.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of the web search call being processed.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.web_search_call.in_progress`.\n   */\n  type: 'response.web_search_call.in_progress';\n}\n\n/**\n * Emitted when a web search call is executing.\n */\nexport interface ResponseWebSearchCallSearchingEvent {\n  /**\n   * Unique ID for the output item associated with the web search call.\n   */\n  item_id: string;\n\n  /**\n   * The index of the output item that the web search call is associated with.\n   */\n  output_index: number;\n\n  /**\n   * The sequence number of the web search call being processed.\n   */\n  sequence_number: number;\n\n  /**\n   * The type of the event. Always `response.web_search_call.searching`.\n   */\n  type: 'response.web_search_call.searching';\n}\n\nexport interface ResponsesClientEvent {\n  /**\n   * The type of the client event. Always `response.create`.\n   */\n  type: 'response.create';\n\n  /**\n   * Whether to run the model response in the background.\n   * [Learn more](https://platform.openai.com/docs/guides/background).\n   */\n  background?: boolean | null;\n\n  /**\n   * Context management configuration for this request.\n   */\n  context_management?: Array<ResponsesClientEvent.ContextManagement> | null;\n\n  /**\n   * The conversation that this response belongs to. Items from this conversation are\n   * prepended to `input_items` for this response request. Input items and output\n   * items from this response are automatically added to this conversation after this\n   * response completes.\n   */\n  conversation?: string | ResponseConversationParam | null;\n\n  /**\n   * Specify additional output data to include in the model response. Currently\n   * supported values are:\n   *\n   * - `web_search_call.action.sources`: Include the sources of the web search tool\n   *   call.\n   * - `code_interpreter_call.outputs`: Includes the outputs of python code execution\n   *   in code interpreter tool call items.\n   * - `computer_call_output.output.image_url`: Include image urls from the computer\n   *   call output.\n   * - `file_search_call.results`: Include the search results of the file search tool\n   *   call.\n   * - `message.input_image.image_url`: Include image urls from the input message.\n   * - `message.output_text.logprobs`: Include logprobs with assistant messages.\n   * - `reasoning.encrypted_content`: Includes an encrypted version of reasoning\n   *   tokens in reasoning item outputs. This enables reasoning items to be used in\n   *   multi-turn conversations when using the Responses API statelessly (like when\n   *   the `store` parameter is set to `false`, or when an organization is enrolled\n   *   in the zero data retention program).\n   */\n  include?: Array<ResponseIncludable> | null;\n\n  /**\n   * Text, image, or file inputs to the model, used to generate a response.\n   *\n   * Learn more:\n   *\n   * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n   * - [Image inputs](https://platform.openai.com/docs/guides/images)\n   * - [File inputs](https://platform.openai.com/docs/guides/pdf-files)\n   * - [Conversation state](https://platform.openai.com/docs/guides/conversation-state)\n   * - [Function calling](https://platform.openai.com/docs/guides/function-calling)\n   */\n  input?: string | ResponseInput;\n\n  /**\n   * A system (or developer) message inserted into the model's context.\n   *\n   * When using along with `previous_response_id`, the instructions from a previous\n   * response will not be carried over to the next response. This makes it simple to\n   * swap out system (or developer) messages in new responses.\n   */\n  instructions?: string | null;\n\n  /**\n   * An upper bound for the number of tokens that can be generated for a response,\n   * including visible output tokens and\n   * [reasoning tokens](https://platform.openai.com/docs/guides/reasoning).\n   */\n  max_output_tokens?: number | null;\n\n  /**\n   * The maximum number of total calls to built-in tools that can be processed in a\n   * response. This maximum number applies across all built-in tool calls, not per\n   * individual tool. Any further attempts to call a tool by the model will be\n   * ignored.\n   */\n  max_tool_calls?: number | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a\n   * wide range of models with different capabilities, performance characteristics,\n   * and price points. Refer to the\n   * [model guide](https://platform.openai.com/docs/models) to browse and compare\n   * available models.\n   */\n  model?: Shared.ResponsesModel;\n\n  /**\n   * Whether to allow the model to run tool calls in parallel.\n   */\n  parallel_tool_calls?: boolean | null;\n\n  /**\n   * The unique ID of the previous response to the model. Use this to create\n   * multi-turn conversations. Learn more about\n   * [conversation state](https://platform.openai.com/docs/guides/conversation-state).\n   * Cannot be used in conjunction with `conversation`.\n   */\n  previous_response_id?: string | null;\n\n  /**\n   * Reference to a prompt template and its variables.\n   * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts).\n   */\n  prompt?: ResponsePrompt | null;\n\n  /**\n   * Used by OpenAI to cache responses for similar requests to optimize your cache\n   * hit rates. Replaces the `user` field.\n   * [Learn more](https://platform.openai.com/docs/guides/prompt-caching).\n   */\n  prompt_cache_key?: string;\n\n  /**\n   * The retention policy for the prompt cache. Set to `24h` to enable extended\n   * prompt caching, which keeps cached prefixes active for longer, up to a maximum\n   * of 24 hours.\n   * [Learn more](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention).\n   */\n  prompt_cache_retention?: 'in_memory' | '24h' | null;\n\n  /**\n   * **gpt-5 and o-series models only**\n   *\n   * Configuration options for\n   * [reasoning models](https://platform.openai.com/docs/guides/reasoning).\n   */\n  reasoning?: Shared.Reasoning | null;\n\n  /**\n   * A stable identifier used to help detect users of your application that may be\n   * violating OpenAI's usage policies. The IDs should be a string that uniquely\n   * identifies each user, with a maximum length of 64 characters. We recommend\n   * hashing their username or email address, in order to avoid sending us any\n   * identifying information.\n   * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers).\n   */\n  safety_identifier?: string;\n\n  /**\n   * Specifies the processing type used for serving the request.\n   *\n   * - If set to 'auto', then the request will be processed with the service tier\n   *   configured in the Project settings. Unless otherwise configured, the Project\n   *   will use 'default'.\n   * - If set to 'default', then the request will be processed with the standard\n   *   pricing and performance for the selected model.\n   * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or\n   *   '[priority](https://openai.com/api-priority-processing/)', then the request\n   *   will be processed with the corresponding service tier.\n   * - When not set, the default behavior is 'auto'.\n   *\n   * When the `service_tier` parameter is set, the response body will include the\n   * `service_tier` value based on the processing mode actually used to serve the\n   * request. This response value may be different from the value set in the\n   * parameter.\n   */\n  service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | null;\n\n  /**\n   * Whether to store the generated model response for later retrieval via API.\n   */\n  store?: boolean | null;\n\n  /**\n   * If set to true, the model response data will be streamed to the client as it is\n   * generated using\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\n   * See the\n   * [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming)\n   * for more information.\n   */\n  stream?: boolean | null;\n\n  /**\n   * Options for streaming responses. Only set this when you set `stream: true`.\n   */\n  stream_options?: ResponsesClientEvent.StreamOptions | null;\n\n  /**\n   * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will\n   * make the output more random, while lower values like 0.2 will make it more\n   * focused and deterministic. We generally recommend altering this or `top_p` but\n   * not both.\n   */\n  temperature?: number | null;\n\n  /**\n   * Configuration options for a text response from the model. Can be plain text or\n   * structured JSON data. Learn more:\n   *\n   * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n   * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n   */\n  text?: ResponseTextConfig;\n\n  /**\n   * How the model should select which tool (or tools) to use when generating a\n   * response. See the `tools` parameter to see how to specify which tools the model\n   * can call.\n   */\n  tool_choice?:\n    | ToolChoiceOptions\n    | ToolChoiceAllowed\n    | ToolChoiceTypes\n    | ToolChoiceFunction\n    | ToolChoiceMcp\n    | ToolChoiceCustom\n    | ToolChoiceApplyPatch\n    | ToolChoiceShell;\n\n  /**\n   * An array of tools the model may call while generating a response. You can\n   * specify which tool to use by setting the `tool_choice` parameter.\n   *\n   * We support the following categories of tools:\n   *\n   * - **Built-in tools**: Tools that are provided by OpenAI that extend the model's\n   *   capabilities, like\n   *   [web search](https://platform.openai.com/docs/guides/tools-web-search) or\n   *   [file search](https://platform.openai.com/docs/guides/tools-file-search).\n   *   Learn more about\n   *   [built-in tools](https://platform.openai.com/docs/guides/tools).\n   * - **MCP Tools**: Integrations with third-party systems via custom MCP servers or\n   *   predefined connectors such as Google Drive and SharePoint. Learn more about\n   *   [MCP Tools](https://platform.openai.com/docs/guides/tools-connectors-mcp).\n   * - **Function calls (custom tools)**: Functions that are defined by you, enabling\n   *   the model to call your own code with strongly typed arguments and outputs.\n   *   Learn more about\n   *   [function calling](https://platform.openai.com/docs/guides/function-calling).\n   *   You can also use custom tools to call your own code.\n   */\n  tools?: Array<Tool>;\n\n  /**\n   * An integer between 0 and 20 specifying the maximum number of most likely tokens\n   * to return at each token position, each with an associated log probability. In\n   * some cases, the number of returned tokens may be fewer than requested.\n   */\n  top_logprobs?: number | null;\n\n  /**\n   * An alternative to sampling with temperature, called nucleus sampling, where the\n   * model considers the results of the tokens with top_p probability mass. So 0.1\n   * means only the tokens comprising the top 10% probability mass are considered.\n   *\n   * We generally recommend altering this or `temperature` but not both.\n   */\n  top_p?: number | null;\n\n  /**\n   * The truncation strategy to use for the model response.\n   *\n   * - `auto`: If the input to this Response exceeds the model's context window size,\n   *   the model will truncate the response to fit the context window by dropping\n   *   items from the beginning of the conversation.\n   * - `disabled` (default): If the input size will exceed the context window size\n   *   for a model, the request will fail with a 400 error.\n   */\n  truncation?: 'auto' | 'disabled' | null;\n\n  /**\n   * @deprecated This field is being replaced by `safety_identifier` and\n   * `prompt_cache_key`. Use `prompt_cache_key` instead to maintain caching\n   * optimizations. A stable identifier for your end-users. Used to boost cache hit\n   * rates by better bucketing similar requests and to help OpenAI detect and prevent\n   * abuse.\n   * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers).\n   */\n  user?: string;\n}\n\nexport namespace ResponsesClientEvent {\n  export interface ContextManagement {\n    /**\n     * The context management entry type. Currently only 'compaction' is supported.\n     */\n    type: string;\n\n    /**\n     * Token threshold at which compaction should be triggered for this entry.\n     */\n    compact_threshold?: number | null;\n  }\n\n  /**\n   * Options for streaming responses. Only set this when you set `stream: true`.\n   */\n  export interface StreamOptions {\n    /**\n     * When true, stream obfuscation will be enabled. Stream obfuscation adds random\n     * characters to an `obfuscation` field on streaming delta events to normalize\n     * payload sizes as a mitigation to certain side-channel attacks. These obfuscation\n     * fields are included by default, but add a small amount of overhead to the data\n     * stream. You can set `include_obfuscation` to false to optimize for bandwidth if\n     * you trust the network links between your application and the OpenAI API.\n     */\n    include_obfuscation?: boolean;\n  }\n}\n\n/**\n * Server events emitted by the Responses WebSocket server.\n */\nexport type ResponsesServerEvent =\n  | ResponseAudioDeltaEvent\n  | ResponseAudioDoneEvent\n  | ResponseAudioTranscriptDeltaEvent\n  | ResponseAudioTranscriptDoneEvent\n  | ResponseCodeInterpreterCallCodeDeltaEvent\n  | ResponseCodeInterpreterCallCodeDoneEvent\n  | ResponseCodeInterpreterCallCompletedEvent\n  | ResponseCodeInterpreterCallInProgressEvent\n  | ResponseCodeInterpreterCallInterpretingEvent\n  | ResponseCompletedEvent\n  | ResponseContentPartAddedEvent\n  | ResponseContentPartDoneEvent\n  | ResponseCreatedEvent\n  | ResponseErrorEvent\n  | ResponseFileSearchCallCompletedEvent\n  | ResponseFileSearchCallInProgressEvent\n  | ResponseFileSearchCallSearchingEvent\n  | ResponseFunctionCallArgumentsDeltaEvent\n  | ResponseFunctionCallArgumentsDoneEvent\n  | ResponseInProgressEvent\n  | ResponseFailedEvent\n  | ResponseIncompleteEvent\n  | ResponseOutputItemAddedEvent\n  | ResponseOutputItemDoneEvent\n  | ResponseReasoningSummaryPartAddedEvent\n  | ResponseReasoningSummaryPartDoneEvent\n  | ResponseReasoningSummaryTextDeltaEvent\n  | ResponseReasoningSummaryTextDoneEvent\n  | ResponseReasoningTextDeltaEvent\n  | ResponseReasoningTextDoneEvent\n  | ResponseRefusalDeltaEvent\n  | ResponseRefusalDoneEvent\n  | ResponseTextDeltaEvent\n  | ResponseTextDoneEvent\n  | ResponseWebSearchCallCompletedEvent\n  | ResponseWebSearchCallInProgressEvent\n  | ResponseWebSearchCallSearchingEvent\n  | ResponseImageGenCallCompletedEvent\n  | ResponseImageGenCallGeneratingEvent\n  | ResponseImageGenCallInProgressEvent\n  | ResponseImageGenCallPartialImageEvent\n  | ResponseMcpCallArgumentsDeltaEvent\n  | ResponseMcpCallArgumentsDoneEvent\n  | ResponseMcpCallCompletedEvent\n  | ResponseMcpCallFailedEvent\n  | ResponseMcpCallInProgressEvent\n  | ResponseMcpListToolsCompletedEvent\n  | ResponseMcpListToolsFailedEvent\n  | ResponseMcpListToolsInProgressEvent\n  | ResponseOutputTextAnnotationAddedEvent\n  | ResponseQueuedEvent\n  | ResponseCustomToolCallInputDeltaEvent\n  | ResponseCustomToolCallInputDoneEvent;\n\nexport interface SkillReference {\n  /**\n   * The ID of the referenced skill.\n   */\n  skill_id: string;\n\n  /**\n   * References a skill created with the /v1/skills endpoint.\n   */\n  type: 'skill_reference';\n\n  /**\n   * Optional skill version. Use a positive integer or 'latest'. Omit for default.\n   */\n  version?: string;\n}\n\n/**\n * A tool that can be used to generate a response.\n */\nexport type Tool =\n  | FunctionTool\n  | FileSearchTool\n  | ComputerTool\n  | ComputerUsePreviewTool\n  | WebSearchTool\n  | Tool.Mcp\n  | Tool.CodeInterpreter\n  | Tool.ImageGeneration\n  | Tool.LocalShell\n  | FunctionShellTool\n  | CustomTool\n  | NamespaceTool\n  | ToolSearchTool\n  | WebSearchPreviewTool\n  | ApplyPatchTool;\n\nexport namespace Tool {\n  /**\n   * Give the model access to additional tools via remote Model Context Protocol\n   * (MCP) servers.\n   * [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp).\n   */\n  export interface Mcp {\n    /**\n     * A label for this MCP server, used to identify it in tool calls.\n     */\n    server_label: string;\n\n    /**\n     * The type of the MCP tool. Always `mcp`.\n     */\n    type: 'mcp';\n\n    /**\n     * List of allowed tool names or a filter object.\n     */\n    allowed_tools?: Array<string> | Mcp.McpToolFilter | null;\n\n    /**\n     * An OAuth access token that can be used with a remote MCP server, either with a\n     * custom MCP server URL or a service connector. Your application must handle the\n     * OAuth authorization flow and provide the token here.\n     */\n    authorization?: string;\n\n    /**\n     * Identifier for service connectors, like those available in ChatGPT. One of\n     * `server_url` or `connector_id` must be provided. Learn more about service\n     * connectors\n     * [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors).\n     *\n     * Currently supported `connector_id` values are:\n     *\n     * - Dropbox: `connector_dropbox`\n     * - Gmail: `connector_gmail`\n     * - Google Calendar: `connector_googlecalendar`\n     * - Google Drive: `connector_googledrive`\n     * - Microsoft Teams: `connector_microsoftteams`\n     * - Outlook Calendar: `connector_outlookcalendar`\n     * - Outlook Email: `connector_outlookemail`\n     * - SharePoint: `connector_sharepoint`\n     */\n    connector_id?:\n      | 'connector_dropbox'\n      | 'connector_gmail'\n      | 'connector_googlecalendar'\n      | 'connector_googledrive'\n      | 'connector_microsoftteams'\n      | 'connector_outlookcalendar'\n      | 'connector_outlookemail'\n      | 'connector_sharepoint';\n\n    /**\n     * Whether this MCP tool is deferred and discovered via tool search.\n     */\n    defer_loading?: boolean;\n\n    /**\n     * Optional HTTP headers to send to the MCP server. Use for authentication or other\n     * purposes.\n     */\n    headers?: { [key: string]: string } | null;\n\n    /**\n     * Specify which of the MCP server's tools require approval.\n     */\n    require_approval?: Mcp.McpToolApprovalFilter | 'always' | 'never' | null;\n\n    /**\n     * Optional description of the MCP server, used to provide more context.\n     */\n    server_description?: string;\n\n    /**\n     * The URL for the MCP server. One of `server_url` or `connector_id` must be\n     * provided.\n     */\n    server_url?: string;\n  }\n\n  export namespace Mcp {\n    /**\n     * A filter object to specify which tools are allowed.\n     */\n    export interface McpToolFilter {\n      /**\n       * Indicates whether or not a tool modifies data or is read-only. If an MCP server\n       * is\n       * [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\n       * it will match this filter.\n       */\n      read_only?: boolean;\n\n      /**\n       * List of allowed tool names.\n       */\n      tool_names?: Array<string>;\n    }\n\n    /**\n     * Specify which of the MCP server's tools require approval. Can be `always`,\n     * `never`, or a filter object associated with tools that require approval.\n     */\n    export interface McpToolApprovalFilter {\n      /**\n       * A filter object to specify which tools are allowed.\n       */\n      always?: McpToolApprovalFilter.Always;\n\n      /**\n       * A filter object to specify which tools are allowed.\n       */\n      never?: McpToolApprovalFilter.Never;\n    }\n\n    export namespace McpToolApprovalFilter {\n      /**\n       * A filter object to specify which tools are allowed.\n       */\n      export interface Always {\n        /**\n         * Indicates whether or not a tool modifies data or is read-only. If an MCP server\n         * is\n         * [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\n         * it will match this filter.\n         */\n        read_only?: boolean;\n\n        /**\n         * List of allowed tool names.\n         */\n        tool_names?: Array<string>;\n      }\n\n      /**\n       * A filter object to specify which tools are allowed.\n       */\n      export interface Never {\n        /**\n         * Indicates whether or not a tool modifies data or is read-only. If an MCP server\n         * is\n         * [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\n         * it will match this filter.\n         */\n        read_only?: boolean;\n\n        /**\n         * List of allowed tool names.\n         */\n        tool_names?: Array<string>;\n      }\n    }\n  }\n\n  /**\n   * A tool that runs Python code to help generate a response to a prompt.\n   */\n  export interface CodeInterpreter {\n    /**\n     * The code interpreter container. Can be a container ID or an object that\n     * specifies uploaded file IDs to make available to your code, along with an\n     * optional `memory_limit` setting.\n     */\n    container: string | CodeInterpreter.CodeInterpreterToolAuto;\n\n    /**\n     * The type of the code interpreter tool. Always `code_interpreter`.\n     */\n    type: 'code_interpreter';\n  }\n\n  export namespace CodeInterpreter {\n    /**\n     * Configuration for a code interpreter container. Optionally specify the IDs of\n     * the files to run the code on.\n     */\n    export interface CodeInterpreterToolAuto {\n      /**\n       * Always `auto`.\n       */\n      type: 'auto';\n\n      /**\n       * An optional list of uploaded files to make available to your code.\n       */\n      file_ids?: Array<string>;\n\n      /**\n       * The memory limit for the code interpreter container.\n       */\n      memory_limit?: '1g' | '4g' | '16g' | '64g' | null;\n\n      /**\n       * Network access policy for the container.\n       */\n      network_policy?:\n        | ResponsesAPI.ContainerNetworkPolicyDisabled\n        | ResponsesAPI.ContainerNetworkPolicyAllowlist;\n    }\n  }\n\n  /**\n   * A tool that generates images using the GPT image models.\n   */\n  export interface ImageGeneration {\n    /**\n     * The type of the image generation tool. Always `image_generation`.\n     */\n    type: 'image_generation';\n\n    /**\n     * Whether to generate a new image or edit an existing image. Default: `auto`.\n     */\n    action?: 'generate' | 'edit' | 'auto';\n\n    /**\n     * Allows to set transparency for the background of the generated image(s). This\n     * parameter is only supported for GPT image models that support transparent\n     * backgrounds. Must be one of `transparent`, `opaque`, or `auto` (default value).\n     * When `auto` is used, the model will automatically determine the best background\n     * for the image.\n     *\n     * `gpt-image-2` and `gpt-image-2-2026-04-21` do not support transparent\n     * backgrounds. Requests with `background` set to `transparent` will return an\n     * error for these models; use `opaque` or `auto` instead.\n     *\n     * If `transparent`, the output format needs to support transparency, so it should\n     * be set to either `png` (default value) or `webp`.\n     */\n    background?: 'transparent' | 'opaque' | 'auto';\n\n    /**\n     * Control how much effort the model will exert to match the style and features,\n     * especially facial features, of input images. This parameter is only supported\n     * for `gpt-image-1` and `gpt-image-1.5` and later models, unsupported for\n     * `gpt-image-1-mini`. Supports `high` and `low`. Defaults to `low`.\n     */\n    input_fidelity?: 'high' | 'low' | null;\n\n    /**\n     * Optional mask for inpainting. Contains `image_url` (string, optional) and\n     * `file_id` (string, optional).\n     */\n    input_image_mask?: ImageGeneration.InputImageMask;\n\n    /**\n     * The image generation model to use. Default: `gpt-image-1`.\n     */\n    model?:\n      | (string & {})\n      | 'gpt-image-1'\n      | 'gpt-image-1-mini'\n      | 'gpt-image-2'\n      | 'gpt-image-2-2026-04-21'\n      | 'gpt-image-1.5'\n      | 'chatgpt-image-latest';\n\n    /**\n     * Moderation level for the generated image. Default: `auto`.\n     */\n    moderation?: 'auto' | 'low';\n\n    /**\n     * Compression level for the output image. Default: 100.\n     */\n    output_compression?: number;\n\n    /**\n     * The output format of the generated image. One of `png`, `webp`, or `jpeg`.\n     * Default: `png`.\n     */\n    output_format?: 'png' | 'webp' | 'jpeg';\n\n    /**\n     * Number of partial images to generate in streaming mode, from 0 (default value)\n     * to 3.\n     */\n    partial_images?: number;\n\n    /**\n     * The quality of the generated image. One of `low`, `medium`, `high`, or `auto`.\n     * Default: `auto`.\n     */\n    quality?: 'low' | 'medium' | 'high' | 'auto';\n\n    /**\n     * The size of the generated images. For `gpt-image-2` and\n     * `gpt-image-2-2026-04-21`, arbitrary resolutions are supported as `WIDTHxHEIGHT`\n     * strings, for example `1536x864`. Width and height must both be divisible by 16\n     * and the requested aspect ratio must be between 1:3 and 3:1. Resolutions above\n     * `2560x1440` are experimental, and the maximum supported resolution is\n     * `3840x2160`. The requested size must also satisfy the model's current pixel and\n     * edge limits. The standard sizes `1024x1024`, `1536x1024`, and `1024x1536` are\n     * supported by the GPT image models; `auto` is supported for models that allow\n     * automatic sizing. For `dall-e-2`, use one of `256x256`, `512x512`, or\n     * `1024x1024`. For `dall-e-3`, use one of `1024x1024`, `1792x1024`, or\n     * `1024x1792`.\n     */\n    size?: (string & {}) | '1024x1024' | '1024x1536' | '1536x1024' | 'auto';\n  }\n\n  export namespace ImageGeneration {\n    /**\n     * Optional mask for inpainting. Contains `image_url` (string, optional) and\n     * `file_id` (string, optional).\n     */\n    export interface InputImageMask {\n      /**\n       * File ID for the mask image.\n       */\n      file_id?: string;\n\n      /**\n       * Base64-encoded mask image.\n       */\n      image_url?: string;\n    }\n  }\n\n  /**\n   * A tool that allows the model to execute shell commands in a local environment.\n   */\n  export interface LocalShell {\n    /**\n     * The type of the local shell tool. Always `local_shell`.\n     */\n    type: 'local_shell';\n  }\n}\n\n/**\n * Constrains the tools available to the model to a pre-defined set.\n */\nexport interface ToolChoiceAllowed {\n  /**\n   * Constrains the tools available to the model to a pre-defined set.\n   *\n   * `auto` allows the model to pick from among the allowed tools and generate a\n   * message.\n   *\n   * `required` requires the model to call one or more of the allowed tools.\n   */\n  mode: 'auto' | 'required';\n\n  /**\n   * A list of tool definitions that the model should be allowed to call.\n   *\n   * For the Responses API, the list of tool definitions might look like:\n   *\n   * ```json\n   * [\n   *   { \"type\": \"function\", \"name\": \"get_weather\" },\n   *   { \"type\": \"mcp\", \"server_label\": \"deepwiki\" },\n   *   { \"type\": \"image_generation\" }\n   * ]\n   * ```\n   */\n  tools: Array<{ [key: string]: unknown }>;\n\n  /**\n   * Allowed tool configuration type. Always `allowed_tools`.\n   */\n  type: 'allowed_tools';\n}\n\n/**\n * Forces the model to call the apply_patch tool when executing a tool call.\n */\nexport interface ToolChoiceApplyPatch {\n  /**\n   * The tool to call. Always `apply_patch`.\n   */\n  type: 'apply_patch';\n}\n\n/**\n * Use this option to force the model to call a specific custom tool.\n */\nexport interface ToolChoiceCustom {\n  /**\n   * The name of the custom tool to call.\n   */\n  name: string;\n\n  /**\n   * For custom tool calling, the type is always `custom`.\n   */\n  type: 'custom';\n}\n\n/**\n * Use this option to force the model to call a specific function.\n */\nexport interface ToolChoiceFunction {\n  /**\n   * The name of the function to call.\n   */\n  name: string;\n\n  /**\n   * For function calling, the type is always `function`.\n   */\n  type: 'function';\n}\n\n/**\n * Use this option to force the model to call a specific tool on a remote MCP\n * server.\n */\nexport interface ToolChoiceMcp {\n  /**\n   * The label of the MCP server to use.\n   */\n  server_label: string;\n\n  /**\n   * For MCP tools, the type is always `mcp`.\n   */\n  type: 'mcp';\n\n  /**\n   * The name of the tool to call on the server.\n   */\n  name?: string | null;\n}\n\n/**\n * Controls which (if any) tool is called by the model.\n *\n * `none` means the model will not call any tool and instead generates a message.\n *\n * `auto` means the model can pick between generating a message or calling one or\n * more tools.\n *\n * `required` means the model must call one or more tools.\n */\nexport type ToolChoiceOptions = 'none' | 'auto' | 'required';\n\n/**\n * Forces the model to call the shell tool when a tool call is required.\n */\nexport interface ToolChoiceShell {\n  /**\n   * The tool to call. Always `shell`.\n   */\n  type: 'shell';\n}\n\n/**\n * Indicates that the model should use a built-in tool to generate a response.\n * [Learn more about built-in tools](https://platform.openai.com/docs/guides/tools).\n */\nexport interface ToolChoiceTypes {\n  /**\n   * The type of hosted tool the model should to use. Learn more about\n   * [built-in tools](https://platform.openai.com/docs/guides/tools).\n   *\n   * Allowed values are:\n   *\n   * - `file_search`\n   * - `web_search_preview`\n   * - `computer`\n   * - `computer_use_preview`\n   * - `computer_use`\n   * - `code_interpreter`\n   * - `mcp`\n   * - `image_generation`\n   */\n  type:\n    | 'file_search'\n    | 'web_search_preview'\n    | 'computer'\n    | 'computer_use_preview'\n    | 'computer_use'\n    | 'web_search_preview_2025_03_11'\n    | 'image_generation'\n    | 'code_interpreter'\n    | 'mcp';\n}\n\n/**\n * Hosted or BYOT tool search configuration for deferred tools.\n */\nexport interface ToolSearchTool {\n  /**\n   * The type of the tool. Always `tool_search`.\n   */\n  type: 'tool_search';\n\n  /**\n   * Description shown to the model for a client-executed tool search tool.\n   */\n  description?: string | null;\n\n  /**\n   * Whether tool search is executed by the server or by the client.\n   */\n  execution?: 'server' | 'client';\n\n  /**\n   * Parameter schema for a client-executed tool search tool.\n   */\n  parameters?: unknown | null;\n}\n\n/**\n * This tool searches the web for relevant results to use in a response. Learn more\n * about the\n * [web search tool](https://platform.openai.com/docs/guides/tools-web-search).\n */\nexport interface WebSearchPreviewTool {\n  /**\n   * The type of the web search tool. One of `web_search_preview` or\n   * `web_search_preview_2025_03_11`.\n   */\n  type: 'web_search_preview' | 'web_search_preview_2025_03_11';\n\n  search_content_types?: Array<'text' | 'image'>;\n\n  /**\n   * High level guidance for the amount of context window space to use for the\n   * search. One of `low`, `medium`, or `high`. `medium` is the default.\n   */\n  search_context_size?: 'low' | 'medium' | 'high';\n\n  /**\n   * The user's location.\n   */\n  user_location?: WebSearchPreviewTool.UserLocation | null;\n}\n\nexport namespace WebSearchPreviewTool {\n  /**\n   * The user's location.\n   */\n  export interface UserLocation {\n    /**\n     * The type of location approximation. Always `approximate`.\n     */\n    type: 'approximate';\n\n    /**\n     * Free text input for the city of the user, e.g. `San Francisco`.\n     */\n    city?: string | null;\n\n    /**\n     * The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of\n     * the user, e.g. `US`.\n     */\n    country?: string | null;\n\n    /**\n     * Free text input for the region of the user, e.g. `California`.\n     */\n    region?: string | null;\n\n    /**\n     * The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the\n     * user, e.g. `America/Los_Angeles`.\n     */\n    timezone?: string | null;\n  }\n}\n\n/**\n * Search the Internet for sources related to the prompt. Learn more about the\n * [web search tool](https://platform.openai.com/docs/guides/tools-web-search).\n */\nexport interface WebSearchTool {\n  /**\n   * The type of the web search tool. One of `web_search` or `web_search_2025_08_26`.\n   */\n  type: 'web_search' | 'web_search_2025_08_26';\n\n  /**\n   * Filters for the search.\n   */\n  filters?: WebSearchTool.Filters | null;\n\n  /**\n   * High level guidance for the amount of context window space to use for the\n   * search. One of `low`, `medium`, or `high`. `medium` is the default.\n   */\n  search_context_size?: 'low' | 'medium' | 'high';\n\n  /**\n   * The approximate location of the user.\n   */\n  user_location?: WebSearchTool.UserLocation | null;\n}\n\nexport namespace WebSearchTool {\n  /**\n   * Filters for the search.\n   */\n  export interface Filters {\n    /**\n     * Allowed domains for the search. If not provided, all domains are allowed.\n     * Subdomains of the provided domains are allowed as well.\n     *\n     * Example: `[\"pubmed.ncbi.nlm.nih.gov\"]`\n     */\n    allowed_domains?: Array<string> | null;\n  }\n\n  /**\n   * The approximate location of the user.\n   */\n  export interface UserLocation {\n    /**\n     * Free text input for the city of the user, e.g. `San Francisco`.\n     */\n    city?: string | null;\n\n    /**\n     * The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of\n     * the user, e.g. `US`.\n     */\n    country?: string | null;\n\n    /**\n     * Free text input for the region of the user, e.g. `California`.\n     */\n    region?: string | null;\n\n    /**\n     * The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the\n     * user, e.g. `America/Los_Angeles`.\n     */\n    timezone?: string | null;\n\n    /**\n     * The type of location approximation. Always `approximate`.\n     */\n    type?: 'approximate';\n  }\n}\n\nexport type ResponseCreateParams = ResponseCreateParamsNonStreaming | ResponseCreateParamsStreaming;\n\nexport interface ResponseCreateParamsBase {\n  /**\n   * Whether to run the model response in the background.\n   * [Learn more](https://platform.openai.com/docs/guides/background).\n   */\n  background?: boolean | null;\n\n  /**\n   * Context management configuration for this request.\n   */\n  context_management?: Array<ResponseCreateParams.ContextManagement> | null;\n\n  /**\n   * The conversation that this response belongs to. Items from this conversation are\n   * prepended to `input_items` for this response request. Input items and output\n   * items from this response are automatically added to this conversation after this\n   * response completes.\n   */\n  conversation?: string | ResponseConversationParam | null;\n\n  /**\n   * Specify additional output data to include in the model response. Currently\n   * supported values are:\n   *\n   * - `web_search_call.action.sources`: Include the sources of the web search tool\n   *   call.\n   * - `code_interpreter_call.outputs`: Includes the outputs of python code execution\n   *   in code interpreter tool call items.\n   * - `computer_call_output.output.image_url`: Include image urls from the computer\n   *   call output.\n   * - `file_search_call.results`: Include the search results of the file search tool\n   *   call.\n   * - `message.input_image.image_url`: Include image urls from the input message.\n   * - `computer_call_output.output.image_url`: Include image urls from the computer\n   *   call output.\n   * - `reasoning.encrypted_content`: Includes an encrypted version of reasoning\n   *   tokens in reasoning item outputs. This enables reasoning items to be used in\n   *   multi-turn conversations when using the Responses API statelessly (like when\n   *   the `store` parameter is set to `false`, or when an organization is enrolled\n   *   in the zero data retention program).\n   * - `code_interpreter_call.outputs`: Includes the outputs of python code execution\n   *   in code interpreter tool call items.\n   */\n  include?: Array<ResponseIncludable> | null;\n\n  /**\n   * Text, image, or file inputs to the model, used to generate a response.\n   *\n   * Learn more:\n   *\n   * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n   * - [Image inputs](https://platform.openai.com/docs/guides/images)\n   * - [File inputs](https://platform.openai.com/docs/guides/pdf-files)\n   * - [Conversation state](https://platform.openai.com/docs/guides/conversation-state)\n   * - [Function calling](https://platform.openai.com/docs/guides/function-calling)\n   */\n  input?: string | ResponseInput;\n\n  /**\n   * A system (or developer) message inserted into the model's context.\n   *\n   * When using along with `previous_response_id`, the instructions from a previous\n   * response will not be carried over to the next response. This makes it simple to\n   * swap out system (or developer) messages in new responses.\n   */\n  instructions?: string | null;\n\n  /**\n   * An upper bound for the number of tokens that can be generated for a response,\n   * including visible output tokens and\n   * [reasoning tokens](https://platform.openai.com/docs/guides/reasoning).\n   */\n  max_output_tokens?: number | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a\n   * wide range of models with different capabilities, performance characteristics,\n   * and price points. Refer to the\n   * [model guide](https://platform.openai.com/docs/models) to browse and compare\n   * available models.\n   */\n  model?: Shared.ResponsesModel;\n\n  /**\n   * Whether to allow the model to run tool calls in parallel.\n   */\n  parallel_tool_calls?: boolean | null;\n\n  /**\n   * The unique ID of the previous response to the model. Use this to create\n   * multi-turn conversations. Learn more about\n   * [conversation state](https://platform.openai.com/docs/guides/conversation-state).\n   * Cannot be used in conjunction with `conversation`.\n   */\n  previous_response_id?: string | null;\n\n  /**\n   * Reference to a prompt template and its variables.\n   * [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts).\n   */\n  prompt?: ResponsePrompt | null;\n\n  /**\n   * Used by OpenAI to cache responses for similar requests to optimize your cache\n   * hit rates. Replaces the `user` field.\n   * [Learn more](https://platform.openai.com/docs/guides/prompt-caching).\n   */\n  prompt_cache_key?: string;\n\n  /**\n   * The retention policy for the prompt cache. Set to `24h` to enable extended\n   * prompt caching, which keeps cached prefixes active for longer, up to a maximum\n   * of 24 hours.\n   * [Learn more](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention).\n   */\n  prompt_cache_retention?: 'in_memory' | '24h' | null;\n\n  /**\n   * **gpt-5 and o-series models only**\n   *\n   * Configuration options for\n   * [reasoning models](https://platform.openai.com/docs/guides/reasoning).\n   */\n  reasoning?: Shared.Reasoning | null;\n\n  /**\n   * A stable identifier used to help detect users of your application that may be\n   * violating OpenAI's usage policies. The IDs should be a string that uniquely\n   * identifies each user, with a maximum length of 64 characters. We recommend\n   * hashing their username or email address, in order to avoid sending us any\n   * identifying information.\n   * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers).\n   */\n  safety_identifier?: string;\n\n  /**\n   * Specifies the latency tier to use for processing the request. This parameter is\n   * relevant for customers subscribed to the scale tier service:\n   *\n   * - If set to 'auto', then the request will be processed with the service tier\n   *   configured in the Project settings. Unless otherwise configured, the Project\n   *   will use 'default'.\n   * - If set to 'default', then the request will be processed with the standard\n   *   pricing and performance for the selected model.\n   * - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or\n   *   '[priority](https://openai.com/api-priority-processing/)', then the request\n   *   will be processed with the corresponding service tier.\n   * - When not set, the default behavior is 'auto'.\n   *\n   * When this parameter is set, the response body will include the `service_tier`\n   * utilized.\n   */\n  service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | null;\n\n  /**\n   * Whether to store the generated model response for later retrieval via API.\n   */\n  store?: boolean | null;\n\n  /**\n   * If set to true, the model response data will be streamed to the client as it is\n   * generated using\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\n   * See the\n   * [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming)\n   * for more information.\n   */\n  stream?: boolean | null;\n\n  /**\n   * Options for streaming responses. Only set this when you set `stream: true`.\n   */\n  stream_options?: ResponseCreateParams.StreamOptions | null;\n\n  /**\n   * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will\n   * make the output more random, while lower values like 0.2 will make it more\n   * focused and deterministic. We generally recommend altering this or `top_p` but\n   * not both.\n   */\n  temperature?: number | null;\n\n  /**\n   * Configuration options for a text response from the model. Can be plain text or\n   * structured JSON data. Learn more:\n   *\n   * - [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n   * - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)\n   */\n  text?: ResponseTextConfig;\n\n  /**\n   * How the model should select which tool (or tools) to use when generating a\n   * response. See the `tools` parameter to see how to specify which tools the model\n   * can call.\n   */\n  tool_choice?:\n    | ToolChoiceOptions\n    | ToolChoiceAllowed\n    | ToolChoiceTypes\n    | ToolChoiceFunction\n    | ToolChoiceMcp\n    | ToolChoiceCustom\n    | ToolChoiceApplyPatch\n    | ToolChoiceShell;\n\n  /**\n   * An array of tools the model may call while generating a response. You can\n   * specify which tool to use by setting the `tool_choice` parameter.\n   *\n   * We support the following categories of tools:\n   *\n   * - **Built-in tools**: Tools that are provided by OpenAI that extend the model's\n   *   capabilities, like\n   *   [web search](https://platform.openai.com/docs/guides/tools-web-search) or\n   *   [file search](https://platform.openai.com/docs/guides/tools-file-search).\n   *   Learn more about\n   *   [built-in tools](https://platform.openai.com/docs/guides/tools).\n   * - **MCP Tools**: Integrations with third-party systems via custom MCP servers or\n   *   predefined connectors such as Google Drive and SharePoint. Learn more about\n   *   [MCP Tools](https://platform.openai.com/docs/guides/tools-connectors-mcp).\n   * - **Function calls (custom tools)**: Functions that are defined by you, enabling\n   *   the model to call your own code with strongly typed arguments and outputs.\n   *   Learn more about\n   *   [function calling](https://platform.openai.com/docs/guides/function-calling).\n   *   You can also use custom tools to call your own code.\n   */\n  tools?: Array<Tool>;\n\n  /**\n   * An integer between 0 and 20 specifying the maximum number of most likely tokens\n   * to return at each token position, each with an associated log probability. In\n   * some cases, the number of returned tokens may be fewer than requested.\n   */\n  top_logprobs?: number | null;\n\n  /**\n   * An alternative to sampling with temperature, called nucleus sampling, where the\n   * model considers the results of the tokens with top_p probability mass. So 0.1\n   * means only the tokens comprising the top 10% probability mass are considered.\n   *\n   * We generally recommend altering this or `temperature` but not both.\n   */\n  top_p?: number | null;\n\n  /**\n   * The truncation strategy to use for the model response.\n   *\n   * - `auto`: If the input to this Response exceeds the model's context window size,\n   *   the model will truncate the response to fit the context window by dropping\n   *   items from the beginning of the conversation.\n   * - `disabled` (default): If the input size will exceed the context window size\n   *   for a model, the request will fail with a 400 error.\n   */\n  truncation?: 'auto' | 'disabled' | null;\n\n  /**\n   * @deprecated This field is being replaced by `safety_identifier` and\n   * `prompt_cache_key`. Use `prompt_cache_key` instead to maintain caching\n   * optimizations. A stable identifier for your end-users. Used to boost cache hit\n   * rates by better bucketing similar requests and to help OpenAI detect and prevent\n   * abuse.\n   * [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers).\n   */\n  user?: string;\n}\n\nexport namespace ResponseCreateParams {\n  export interface ContextManagement {\n    /**\n     * The context management entry type. Currently only 'compaction' is supported.\n     */\n    type: string;\n\n    /**\n     * Token threshold at which compaction should be triggered for this entry.\n     */\n    compact_threshold?: number | null;\n  }\n\n  /**\n   * Options for streaming responses. Only set this when you set `stream: true`.\n   */\n  export interface StreamOptions {\n    /**\n     * When true, stream obfuscation will be enabled. Stream obfuscation adds random\n     * characters to an `obfuscation` field on streaming delta events to normalize\n     * payload sizes as a mitigation to certain side-channel attacks. These obfuscation\n     * fields are included by default, but add a small amount of overhead to the data\n     * stream. You can set `include_obfuscation` to false to optimize for bandwidth if\n     * you trust the network links between your application and the OpenAI API.\n     */\n    include_obfuscation?: boolean;\n  }\n\n  export type ResponseCreateParamsNonStreaming = ResponsesAPI.ResponseCreateParamsNonStreaming;\n  export type ResponseCreateParamsStreaming = ResponsesAPI.ResponseCreateParamsStreaming;\n}\n\nexport interface ResponseCreateParamsNonStreaming extends ResponseCreateParamsBase {\n  /**\n   * If set to true, the model response data will be streamed to the client as it is\n   * generated using\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\n   * See the\n   * [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming)\n   * for more information.\n   */\n  stream?: false | null;\n}\n\nexport interface ResponseCreateParamsStreaming extends ResponseCreateParamsBase {\n  /**\n   * If set to true, the model response data will be streamed to the client as it is\n   * generated using\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\n   * See the\n   * [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming)\n   * for more information.\n   */\n  stream: true;\n}\n\nexport type ResponseRetrieveParams = ResponseRetrieveParamsNonStreaming | ResponseRetrieveParamsStreaming;\n\nexport interface ResponseRetrieveParamsBase {\n  /**\n   * Additional fields to include in the response. See the `include` parameter for\n   * Response creation above for more information.\n   */\n  include?: Array<ResponseIncludable>;\n\n  /**\n   * When true, stream obfuscation will be enabled. Stream obfuscation adds random\n   * characters to an `obfuscation` field on streaming delta events to normalize\n   * payload sizes as a mitigation to certain side-channel attacks. These obfuscation\n   * fields are included by default, but add a small amount of overhead to the data\n   * stream. You can set `include_obfuscation` to false to optimize for bandwidth if\n   * you trust the network links between your application and the OpenAI API.\n   */\n  include_obfuscation?: boolean;\n\n  /**\n   * The sequence number of the event after which to start streaming.\n   */\n  starting_after?: number;\n\n  /**\n   * If set to true, the model response data will be streamed to the client as it is\n   * generated using\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\n   * See the\n   * [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming)\n   * for more information.\n   */\n  stream?: boolean;\n}\n\nexport namespace ResponseRetrieveParams {\n  export type ResponseRetrieveParamsNonStreaming = ResponsesAPI.ResponseRetrieveParamsNonStreaming;\n  export type ResponseRetrieveParamsStreaming = ResponsesAPI.ResponseRetrieveParamsStreaming;\n}\n\nexport interface ResponseRetrieveParamsNonStreaming extends ResponseRetrieveParamsBase {\n  /**\n   * If set to true, the model response data will be streamed to the client as it is\n   * generated using\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\n   * See the\n   * [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming)\n   * for more information.\n   */\n  stream?: false;\n}\n\nexport interface ResponseRetrieveParamsStreaming extends ResponseRetrieveParamsBase {\n  /**\n   * If set to true, the model response data will be streamed to the client as it is\n   * generated using\n   * [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\n   * See the\n   * [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming)\n   * for more information.\n   */\n  stream: true;\n}\n\nexport interface ResponseCompactParams {\n  /**\n   * Model ID used to generate the response, like `gpt-5` or `o3`. OpenAI offers a\n   * wide range of models with different capabilities, performance characteristics,\n   * and price points. Refer to the\n   * [model guide](https://platform.openai.com/docs/models) to browse and compare\n   * available models.\n   */\n  model:\n    | 'gpt-5.4'\n    | 'gpt-5.4-mini'\n    | 'gpt-5.4-nano'\n    | 'gpt-5.4-mini-2026-03-17'\n    | 'gpt-5.4-nano-2026-03-17'\n    | 'gpt-5.3-chat-latest'\n    | 'gpt-5.2'\n    | 'gpt-5.2-2025-12-11'\n    | 'gpt-5.2-chat-latest'\n    | 'gpt-5.2-pro'\n    | 'gpt-5.2-pro-2025-12-11'\n    | 'gpt-5.1'\n    | 'gpt-5.1-2025-11-13'\n    | 'gpt-5.1-codex'\n    | 'gpt-5.1-mini'\n    | 'gpt-5.1-chat-latest'\n    | 'gpt-5'\n    | 'gpt-5-mini'\n    | 'gpt-5-nano'\n    | 'gpt-5-2025-08-07'\n    | 'gpt-5-mini-2025-08-07'\n    | 'gpt-5-nano-2025-08-07'\n    | 'gpt-5-chat-latest'\n    | 'gpt-4.1'\n    | 'gpt-4.1-mini'\n    | 'gpt-4.1-nano'\n    | 'gpt-4.1-2025-04-14'\n    | 'gpt-4.1-mini-2025-04-14'\n    | 'gpt-4.1-nano-2025-04-14'\n    | 'o4-mini'\n    | 'o4-mini-2025-04-16'\n    | 'o3'\n    | 'o3-2025-04-16'\n    | 'o3-mini'\n    | 'o3-mini-2025-01-31'\n    | 'o1'\n    | 'o1-2024-12-17'\n    | 'o1-preview'\n    | 'o1-preview-2024-09-12'\n    | 'o1-mini'\n    | 'o1-mini-2024-09-12'\n    | 'gpt-4o'\n    | 'gpt-4o-2024-11-20'\n    | 'gpt-4o-2024-08-06'\n    | 'gpt-4o-2024-05-13'\n    | 'gpt-4o-audio-preview'\n    | 'gpt-4o-audio-preview-2024-10-01'\n    | 'gpt-4o-audio-preview-2024-12-17'\n    | 'gpt-4o-audio-preview-2025-06-03'\n    | 'gpt-4o-mini-audio-preview'\n    | 'gpt-4o-mini-audio-preview-2024-12-17'\n    | 'gpt-4o-search-preview'\n    | 'gpt-4o-mini-search-preview'\n    | 'gpt-4o-search-preview-2025-03-11'\n    | 'gpt-4o-mini-search-preview-2025-03-11'\n    | 'chatgpt-4o-latest'\n    | 'codex-mini-latest'\n    | 'gpt-4o-mini'\n    | 'gpt-4o-mini-2024-07-18'\n    | 'gpt-4-turbo'\n    | 'gpt-4-turbo-2024-04-09'\n    | 'gpt-4-0125-preview'\n    | 'gpt-4-turbo-preview'\n    | 'gpt-4-1106-preview'\n    | 'gpt-4-vision-preview'\n    | 'gpt-4'\n    | 'gpt-4-0314'\n    | 'gpt-4-0613'\n    | 'gpt-4-32k'\n    | 'gpt-4-32k-0314'\n    | 'gpt-4-32k-0613'\n    | 'gpt-3.5-turbo'\n    | 'gpt-3.5-turbo-16k'\n    | 'gpt-3.5-turbo-0301'\n    | 'gpt-3.5-turbo-0613'\n    | 'gpt-3.5-turbo-1106'\n    | 'gpt-3.5-turbo-0125'\n    | 'gpt-3.5-turbo-16k-0613'\n    | 'o1-pro'\n    | 'o1-pro-2025-03-19'\n    | 'o3-pro'\n    | 'o3-pro-2025-06-10'\n    | 'o3-deep-research'\n    | 'o3-deep-research-2025-06-26'\n    | 'o4-mini-deep-research'\n    | 'o4-mini-deep-research-2025-06-26'\n    | 'computer-use-preview'\n    | 'computer-use-preview-2025-03-11'\n    | 'gpt-5-codex'\n    | 'gpt-5-pro'\n    | 'gpt-5-pro-2025-10-06'\n    | 'gpt-5.1-codex-max'\n    | (string & {})\n    | null;\n\n  /**\n   * Text, image, or file inputs to the model, used to generate a response\n   */\n  input?: string | Array<ResponseInputItem> | null;\n\n  /**\n   * A system (or developer) message inserted into the model's context. When used\n   * along with `previous_response_id`, the instructions from a previous response\n   * will not be carried over to the next response. This makes it simple to swap out\n   * system (or developer) messages in new responses.\n   */\n  instructions?: string | null;\n\n  /**\n   * The unique ID of the previous response to the model. Use this to create\n   * multi-turn conversations. Learn more about\n   * [conversation state](https://platform.openai.com/docs/guides/conversation-state).\n   * Cannot be used in conjunction with `conversation`.\n   */\n  previous_response_id?: string | null;\n\n  /**\n   * A key to use when reading from or writing to the prompt cache.\n   */\n  prompt_cache_key?: string | null;\n\n  /**\n   * How long to retain a prompt cache entry created by this request.\n   */\n  prompt_cache_retention?: 'in_memory' | '24h' | null;\n\n  /**\n   * The service tier to use for this request.\n   */\n  service_tier?: 'auto' | 'default' | 'flex' | 'priority' | null;\n}\n\nResponses.InputItems = InputItems;\nResponses.InputTokens = InputTokens;\n\nexport declare namespace Responses {\n  export {\n    type ApplyPatchTool as ApplyPatchTool,\n    type CompactedResponse as CompactedResponse,\n    type ComputerAction as ComputerAction,\n    type ComputerActionList as ComputerActionList,\n    type ComputerTool as ComputerTool,\n    type ComputerUsePreviewTool as ComputerUsePreviewTool,\n    type ContainerAuto as ContainerAuto,\n    type ContainerNetworkPolicyAllowlist as ContainerNetworkPolicyAllowlist,\n    type ContainerNetworkPolicyDisabled as ContainerNetworkPolicyDisabled,\n    type ContainerNetworkPolicyDomainSecret as ContainerNetworkPolicyDomainSecret,\n    type ContainerReference as ContainerReference,\n    type CustomTool as CustomTool,\n    type EasyInputMessage as EasyInputMessage,\n    type FileSearchTool as FileSearchTool,\n    type FunctionShellTool as FunctionShellTool,\n    type FunctionTool as FunctionTool,\n    type InlineSkill as InlineSkill,\n    type InlineSkillSource as InlineSkillSource,\n    type LocalEnvironment as LocalEnvironment,\n    type LocalSkill as LocalSkill,\n    type NamespaceTool as NamespaceTool,\n    type Response as Response,\n    type ResponseApplyPatchToolCall as ResponseApplyPatchToolCall,\n    type ResponseApplyPatchToolCallOutput as ResponseApplyPatchToolCallOutput,\n    type ResponseAudioDeltaEvent as ResponseAudioDeltaEvent,\n    type ResponseAudioDoneEvent as ResponseAudioDoneEvent,\n    type ResponseAudioTranscriptDeltaEvent as ResponseAudioTranscriptDeltaEvent,\n    type ResponseAudioTranscriptDoneEvent as ResponseAudioTranscriptDoneEvent,\n    type ResponseCodeInterpreterCallCodeDeltaEvent as ResponseCodeInterpreterCallCodeDeltaEvent,\n    type ResponseCodeInterpreterCallCodeDoneEvent as ResponseCodeInterpreterCallCodeDoneEvent,\n    type ResponseCodeInterpreterCallCompletedEvent as ResponseCodeInterpreterCallCompletedEvent,\n    type ResponseCodeInterpreterCallInProgressEvent as ResponseCodeInterpreterCallInProgressEvent,\n    type ResponseCodeInterpreterCallInterpretingEvent as ResponseCodeInterpreterCallInterpretingEvent,\n    type ResponseCodeInterpreterToolCall as ResponseCodeInterpreterToolCall,\n    type ResponseCompactionItem as ResponseCompactionItem,\n    type ResponseCompactionItemParam as ResponseCompactionItemParam,\n    type ResponseCompletedEvent as ResponseCompletedEvent,\n    type ResponseComputerToolCall as ResponseComputerToolCall,\n    type ResponseComputerToolCallOutputItem as ResponseComputerToolCallOutputItem,\n    type ResponseComputerToolCallOutputScreenshot as ResponseComputerToolCallOutputScreenshot,\n    type ResponseContainerReference as ResponseContainerReference,\n    type ResponseContent as ResponseContent,\n    type ResponseContentPartAddedEvent as ResponseContentPartAddedEvent,\n    type ResponseContentPartDoneEvent as ResponseContentPartDoneEvent,\n    type ResponseConversationParam as ResponseConversationParam,\n    type ResponseCreatedEvent as ResponseCreatedEvent,\n    type ResponseCustomToolCall as ResponseCustomToolCall,\n    type ResponseCustomToolCallInputDeltaEvent as ResponseCustomToolCallInputDeltaEvent,\n    type ResponseCustomToolCallInputDoneEvent as ResponseCustomToolCallInputDoneEvent,\n    type ResponseCustomToolCallItem as ResponseCustomToolCallItem,\n    type ResponseCustomToolCallOutput as ResponseCustomToolCallOutput,\n    type ResponseCustomToolCallOutputItem as ResponseCustomToolCallOutputItem,\n    type ResponseError as ResponseError,\n    type ResponseErrorEvent as ResponseErrorEvent,\n    type ResponseFailedEvent as ResponseFailedEvent,\n    type ResponseFileSearchCallCompletedEvent as ResponseFileSearchCallCompletedEvent,\n    type ResponseFileSearchCallInProgressEvent as ResponseFileSearchCallInProgressEvent,\n    type ResponseFileSearchCallSearchingEvent as ResponseFileSearchCallSearchingEvent,\n    type ResponseFileSearchToolCall as ResponseFileSearchToolCall,\n    type ResponseFormatTextConfig as ResponseFormatTextConfig,\n    type ResponseFormatTextJSONSchemaConfig as ResponseFormatTextJSONSchemaConfig,\n    type ResponseFunctionCallArgumentsDeltaEvent as ResponseFunctionCallArgumentsDeltaEvent,\n    type ResponseFunctionCallArgumentsDoneEvent as ResponseFunctionCallArgumentsDoneEvent,\n    type ResponseFunctionCallOutputItem as ResponseFunctionCallOutputItem,\n    type ResponseFunctionCallOutputItemList as ResponseFunctionCallOutputItemList,\n    type ResponseFunctionShellCallOutputContent as ResponseFunctionShellCallOutputContent,\n    type ResponseFunctionShellToolCall as ResponseFunctionShellToolCall,\n    type ResponseFunctionShellToolCallOutput as ResponseFunctionShellToolCallOutput,\n    type ResponseFunctionToolCall as ResponseFunctionToolCall,\n    type ResponseFunctionToolCallItem as ResponseFunctionToolCallItem,\n    type ResponseFunctionToolCallOutputItem as ResponseFunctionToolCallOutputItem,\n    type ResponseFunctionWebSearch as ResponseFunctionWebSearch,\n    type ResponseImageGenCallCompletedEvent as ResponseImageGenCallCompletedEvent,\n    type ResponseImageGenCallGeneratingEvent as ResponseImageGenCallGeneratingEvent,\n    type ResponseImageGenCallInProgressEvent as ResponseImageGenCallInProgressEvent,\n    type ResponseImageGenCallPartialImageEvent as ResponseImageGenCallPartialImageEvent,\n    type ResponseInProgressEvent as ResponseInProgressEvent,\n    type ResponseIncludable as ResponseIncludable,\n    type ResponseIncompleteEvent as ResponseIncompleteEvent,\n    type ResponseInput as ResponseInput,\n    type ResponseInputAudio as ResponseInputAudio,\n    type ResponseInputContent as ResponseInputContent,\n    type ResponseInputFile as ResponseInputFile,\n    type ResponseInputFileContent as ResponseInputFileContent,\n    type ResponseInputImage as ResponseInputImage,\n    type ResponseInputImageContent as ResponseInputImageContent,\n    type ResponseInputItem as ResponseInputItem,\n    type ResponseInputMessageContentList as ResponseInputMessageContentList,\n    type ResponseInputMessageItem as ResponseInputMessageItem,\n    type ResponseInputText as ResponseInputText,\n    type ResponseInputTextContent as ResponseInputTextContent,\n    type ResponseItem as ResponseItem,\n    type ResponseLocalEnvironment as ResponseLocalEnvironment,\n    type ResponseMcpCallArgumentsDeltaEvent as ResponseMcpCallArgumentsDeltaEvent,\n    type ResponseMcpCallArgumentsDoneEvent as ResponseMcpCallArgumentsDoneEvent,\n    type ResponseMcpCallCompletedEvent as ResponseMcpCallCompletedEvent,\n    type ResponseMcpCallFailedEvent as ResponseMcpCallFailedEvent,\n    type ResponseMcpCallInProgressEvent as ResponseMcpCallInProgressEvent,\n    type ResponseMcpListToolsCompletedEvent as ResponseMcpListToolsCompletedEvent,\n    type ResponseMcpListToolsFailedEvent as ResponseMcpListToolsFailedEvent,\n    type ResponseMcpListToolsInProgressEvent as ResponseMcpListToolsInProgressEvent,\n    type ResponseOutputAudio as ResponseOutputAudio,\n    type ResponseOutputItem as ResponseOutputItem,\n    type ResponseOutputItemAddedEvent as ResponseOutputItemAddedEvent,\n    type ResponseOutputItemDoneEvent as ResponseOutputItemDoneEvent,\n    type ResponseOutputMessage as ResponseOutputMessage,\n    type ResponseOutputRefusal as ResponseOutputRefusal,\n    type ResponseOutputText as ResponseOutputText,\n    type ResponseOutputTextAnnotationAddedEvent as ResponseOutputTextAnnotationAddedEvent,\n    type ResponsePrompt as ResponsePrompt,\n    type ResponseQueuedEvent as ResponseQueuedEvent,\n    type ResponseReasoningItem as ResponseReasoningItem,\n    type ResponseReasoningSummaryPartAddedEvent as ResponseReasoningSummaryPartAddedEvent,\n    type ResponseReasoningSummaryPartDoneEvent as ResponseReasoningSummaryPartDoneEvent,\n    type ResponseReasoningSummaryTextDeltaEvent as ResponseReasoningSummaryTextDeltaEvent,\n    type ResponseReasoningSummaryTextDoneEvent as ResponseReasoningSummaryTextDoneEvent,\n    type ResponseReasoningTextDeltaEvent as ResponseReasoningTextDeltaEvent,\n    type ResponseReasoningTextDoneEvent as ResponseReasoningTextDoneEvent,\n    type ResponseRefusalDeltaEvent as ResponseRefusalDeltaEvent,\n    type ResponseRefusalDoneEvent as ResponseRefusalDoneEvent,\n    type ResponseStatus as ResponseStatus,\n    type ResponseStreamEvent as ResponseStreamEvent,\n    type ResponseTextConfig as ResponseTextConfig,\n    type ResponseTextDeltaEvent as ResponseTextDeltaEvent,\n    type ResponseTextDoneEvent as ResponseTextDoneEvent,\n    type ResponseToolSearchCall as ResponseToolSearchCall,\n    type ResponseToolSearchOutputItem as ResponseToolSearchOutputItem,\n    type ResponseToolSearchOutputItemParam as ResponseToolSearchOutputItemParam,\n    type ResponseUsage as ResponseUsage,\n    type ResponseWebSearchCallCompletedEvent as ResponseWebSearchCallCompletedEvent,\n    type ResponseWebSearchCallInProgressEvent as ResponseWebSearchCallInProgressEvent,\n    type ResponseWebSearchCallSearchingEvent as ResponseWebSearchCallSearchingEvent,\n    type ResponsesClientEvent as ResponsesClientEvent,\n    type ResponsesServerEvent as ResponsesServerEvent,\n    type SkillReference as SkillReference,\n    type Tool as Tool,\n    type ToolChoiceAllowed as ToolChoiceAllowed,\n    type ToolChoiceApplyPatch as ToolChoiceApplyPatch,\n    type ToolChoiceCustom as ToolChoiceCustom,\n    type ToolChoiceFunction as ToolChoiceFunction,\n    type ToolChoiceMcp as ToolChoiceMcp,\n    type ToolChoiceOptions as ToolChoiceOptions,\n    type ToolChoiceShell as ToolChoiceShell,\n    type ToolChoiceTypes as ToolChoiceTypes,\n    type ToolSearchTool as ToolSearchTool,\n    type WebSearchPreviewTool as WebSearchPreviewTool,\n    type WebSearchTool as WebSearchTool,\n    type ResponseCreateParams as ResponseCreateParams,\n    type ResponseCreateParamsNonStreaming as ResponseCreateParamsNonStreaming,\n    type ResponseCreateParamsStreaming as ResponseCreateParamsStreaming,\n    type ResponseRetrieveParams as ResponseRetrieveParams,\n    type ResponseRetrieveParamsNonStreaming as ResponseRetrieveParamsNonStreaming,\n    type ResponseRetrieveParamsStreaming as ResponseRetrieveParamsStreaming,\n    type ResponseCompactParams as ResponseCompactParams,\n  };\n\n  export {\n    InputItems as InputItems,\n    type ResponseItemList as ResponseItemList,\n    type InputItemListParams as InputItemListParams,\n  };\n\n  export {\n    InputTokens as InputTokens,\n    type InputTokenCountResponse as InputTokenCountResponse,\n    type InputTokenCountParams as InputTokenCountParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport { APIPromise } from '../../core/api-promise';\nimport { buildHeaders } from '../../internal/headers';\nimport { RequestOptions } from '../../internal/request-options';\nimport { path } from '../../internal/utils/path';\n\nexport class Content extends APIResource {\n  /**\n   * Download a skill zip bundle by its ID.\n   */\n  retrieve(skillID: string, options?: RequestOptions): APIPromise<Response> {\n    return this._client.get(path`/skills/${skillID}/content`, {\n      ...options,\n      headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n      __security: { bearerAuth: true },\n      __binaryResponse: true,\n    });\n  }\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport { APIPromise } from '../../../core/api-promise';\nimport { buildHeaders } from '../../../internal/headers';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { path } from '../../../internal/utils/path';\n\nexport class Content extends APIResource {\n  /**\n   * Download a skill version zip bundle.\n   */\n  retrieve(version: string, params: ContentRetrieveParams, options?: RequestOptions): APIPromise<Response> {\n    const { skill_id } = params;\n    return this._client.get(path`/skills/${skill_id}/versions/${version}/content`, {\n      ...options,\n      headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n      __security: { bearerAuth: true },\n      __binaryResponse: true,\n    });\n  }\n}\n\nexport interface ContentRetrieveParams {\n  /**\n   * The identifier of the skill.\n   */\n  skill_id: string;\n}\n\nexport declare namespace Content {\n  export { type ContentRetrieveParams as ContentRetrieveParams };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../../core/resource';\nimport * as ContentAPI from './content';\nimport { Content, ContentRetrieveParams } from './content';\nimport { APIPromise } from '../../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pagination';\nimport { type Uploadable } from '../../../core/uploads';\nimport { RequestOptions } from '../../../internal/request-options';\nimport { maybeMultipartFormRequestOptions } from '../../../internal/uploads';\nimport { path } from '../../../internal/utils/path';\n\nexport class Versions extends APIResource {\n  content: ContentAPI.Content = new ContentAPI.Content(this._client);\n\n  /**\n   * Create a new immutable skill version.\n   */\n  create(\n    skillID: string,\n    body: VersionCreateParams | null | undefined = {},\n    options?: RequestOptions,\n  ): APIPromise<SkillVersion> {\n    return this._client.post(\n      path`/skills/${skillID}/versions`,\n      maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client),\n    );\n  }\n\n  /**\n   * Get a specific skill version.\n   */\n  retrieve(\n    version: string,\n    params: VersionRetrieveParams,\n    options?: RequestOptions,\n  ): APIPromise<SkillVersion> {\n    const { skill_id } = params;\n    return this._client.get(path`/skills/${skill_id}/versions/${version}`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * List skill versions for a skill.\n   */\n  list(\n    skillID: string,\n    query: VersionListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<SkillVersionsPage, SkillVersion> {\n    return this._client.getAPIList(path`/skills/${skillID}/versions`, CursorPage<SkillVersion>, {\n      query,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Delete a skill version.\n   */\n  delete(\n    version: string,\n    params: VersionDeleteParams,\n    options?: RequestOptions,\n  ): APIPromise<DeletedSkillVersion> {\n    const { skill_id } = params;\n    return this._client.delete(path`/skills/${skill_id}/versions/${version}`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\nexport type SkillVersionsPage = CursorPage<SkillVersion>;\n\nexport interface DeletedSkillVersion {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'skill.version.deleted';\n\n  /**\n   * The deleted skill version.\n   */\n  version: string;\n}\n\nexport interface SkillVersion {\n  /**\n   * Unique identifier for the skill version.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (seconds) for when the version was created.\n   */\n  created_at: number;\n\n  /**\n   * Description of the skill version.\n   */\n  description: string;\n\n  /**\n   * Name of the skill version.\n   */\n  name: string;\n\n  /**\n   * The object type, which is `skill.version`.\n   */\n  object: 'skill.version';\n\n  /**\n   * Identifier of the skill for this version.\n   */\n  skill_id: string;\n\n  /**\n   * Version number for this skill.\n   */\n  version: string;\n}\n\nexport interface SkillVersionList {\n  /**\n   * A list of items\n   */\n  data: Array<SkillVersion>;\n\n  /**\n   * The ID of the first item in the list.\n   */\n  first_id: string | null;\n\n  /**\n   * Whether there are more items available.\n   */\n  has_more: boolean;\n\n  /**\n   * The ID of the last item in the list.\n   */\n  last_id: string | null;\n\n  /**\n   * The type of object returned, must be `list`.\n   */\n  object: 'list';\n}\n\nexport interface VersionCreateParams {\n  /**\n   * Whether to set this version as the default.\n   */\n  default?: boolean;\n\n  /**\n   * Skill files to upload (directory upload) or a single zip file.\n   */\n  files?: Array<Uploadable> | Uploadable;\n}\n\nexport interface VersionRetrieveParams {\n  /**\n   * The identifier of the skill.\n   */\n  skill_id: string;\n}\n\nexport interface VersionListParams extends CursorPageParams {\n  /**\n   * Sort order of results by version number.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface VersionDeleteParams {\n  /**\n   * The identifier of the skill.\n   */\n  skill_id: string;\n}\n\nVersions.Content = Content;\n\nexport declare namespace Versions {\n  export {\n    type DeletedSkillVersion as DeletedSkillVersion,\n    type SkillVersion as SkillVersion,\n    type SkillVersionList as SkillVersionList,\n    type SkillVersionsPage as SkillVersionsPage,\n    type VersionCreateParams as VersionCreateParams,\n    type VersionRetrieveParams as VersionRetrieveParams,\n    type VersionListParams as VersionListParams,\n    type VersionDeleteParams as VersionDeleteParams,\n  };\n\n  export { Content as Content, type ContentRetrieveParams as ContentRetrieveParams };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as ContentAPI from './content';\nimport { Content } from './content';\nimport * as VersionsAPI from './versions/versions';\nimport {\n  DeletedSkillVersion,\n  SkillVersion,\n  SkillVersionList,\n  SkillVersionsPage,\n  VersionCreateParams,\n  VersionDeleteParams,\n  VersionListParams,\n  VersionRetrieveParams,\n  Versions,\n} from './versions/versions';\nimport { APIPromise } from '../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../core/pagination';\nimport { type Uploadable } from '../../core/uploads';\nimport { RequestOptions } from '../../internal/request-options';\nimport { maybeMultipartFormRequestOptions } from '../../internal/uploads';\nimport { path } from '../../internal/utils/path';\n\nexport class Skills extends APIResource {\n  content: ContentAPI.Content = new ContentAPI.Content(this._client);\n  versions: VersionsAPI.Versions = new VersionsAPI.Versions(this._client);\n\n  /**\n   * Create a new skill.\n   */\n  create(body: SkillCreateParams | null | undefined = {}, options?: RequestOptions): APIPromise<Skill> {\n    return this._client.post(\n      '/skills',\n      maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client),\n    );\n  }\n\n  /**\n   * Get a skill by its ID.\n   */\n  retrieve(skillID: string, options?: RequestOptions): APIPromise<Skill> {\n    return this._client.get(path`/skills/${skillID}`, { ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * Update the default version pointer for a skill.\n   */\n  update(skillID: string, body: SkillUpdateParams, options?: RequestOptions): APIPromise<Skill> {\n    return this._client.post(path`/skills/${skillID}`, {\n      body,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * List all skills for the current project.\n   */\n  list(\n    query: SkillListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<SkillsPage, Skill> {\n    return this._client.getAPIList('/skills', CursorPage<Skill>, {\n      query,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Delete a skill by its ID.\n   */\n  delete(skillID: string, options?: RequestOptions): APIPromise<DeletedSkill> {\n    return this._client.delete(path`/skills/${skillID}`, { ...options, __security: { bearerAuth: true } });\n  }\n}\n\nexport type SkillsPage = CursorPage<Skill>;\n\nexport interface DeletedSkill {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'skill.deleted';\n}\n\nexport interface Skill {\n  /**\n   * Unique identifier for the skill.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (seconds) for when the skill was created.\n   */\n  created_at: number;\n\n  /**\n   * Default version for the skill.\n   */\n  default_version: string;\n\n  /**\n   * Description of the skill.\n   */\n  description: string;\n\n  /**\n   * Latest version for the skill.\n   */\n  latest_version: string;\n\n  /**\n   * Name of the skill.\n   */\n  name: string;\n\n  /**\n   * The object type, which is `skill`.\n   */\n  object: 'skill';\n}\n\nexport interface SkillList {\n  /**\n   * A list of items\n   */\n  data: Array<Skill>;\n\n  /**\n   * The ID of the first item in the list.\n   */\n  first_id: string | null;\n\n  /**\n   * Whether there are more items available.\n   */\n  has_more: boolean;\n\n  /**\n   * The ID of the last item in the list.\n   */\n  last_id: string | null;\n\n  /**\n   * The type of object returned, must be `list`.\n   */\n  object: 'list';\n}\n\nexport interface SkillCreateParams {\n  /**\n   * Skill files to upload (directory upload) or a single zip file.\n   */\n  files?: Array<Uploadable> | Uploadable;\n}\n\nexport interface SkillUpdateParams {\n  /**\n   * The skill version number to set as default.\n   */\n  default_version: string;\n}\n\nexport interface SkillListParams extends CursorPageParams {\n  /**\n   * Sort order of results by timestamp. Use `asc` for ascending order or `desc` for\n   * descending order.\n   */\n  order?: 'asc' | 'desc';\n}\n\nSkills.Content = Content;\nSkills.Versions = Versions;\n\nexport declare namespace Skills {\n  export {\n    type DeletedSkill as DeletedSkill,\n    type Skill as Skill,\n    type SkillList as SkillList,\n    type SkillsPage as SkillsPage,\n    type SkillCreateParams as SkillCreateParams,\n    type SkillUpdateParams as SkillUpdateParams,\n    type SkillListParams as SkillListParams,\n  };\n\n  export { Content as Content };\n\n  export {\n    Versions as Versions,\n    type DeletedSkillVersion as DeletedSkillVersion,\n    type SkillVersion as SkillVersion,\n    type SkillVersionList as SkillVersionList,\n    type SkillVersionsPage as SkillVersionsPage,\n    type VersionCreateParams as VersionCreateParams,\n    type VersionRetrieveParams as VersionRetrieveParams,\n    type VersionListParams as VersionListParams,\n    type VersionDeleteParams as VersionDeleteParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport { APIPromise } from '../../core/api-promise';\nimport { type Uploadable } from '../../core/uploads';\nimport { RequestOptions } from '../../internal/request-options';\nimport { multipartFormRequestOptions } from '../../internal/uploads';\nimport { path } from '../../internal/utils/path';\n\n/**\n * Use Uploads to upload large files in multiple parts.\n */\nexport class Parts extends APIResource {\n  /**\n   * Adds a\n   * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n   * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n   * A Part represents a chunk of bytes from the file you are trying to upload.\n   *\n   * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n   * maximum of 8 GB.\n   *\n   * It is possible to add multiple Parts in parallel. You can decide the intended\n   * order of the Parts when you\n   * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n   */\n  create(uploadID: string, body: PartCreateParams, options?: RequestOptions): APIPromise<UploadPart> {\n    return this._client.post(\n      path`/uploads/${uploadID}/parts`,\n      multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client),\n    );\n  }\n}\n\n/**\n * The upload Part represents a chunk of bytes we can add to an Upload object.\n */\nexport interface UploadPart {\n  /**\n   * The upload Part unique identifier, which can be referenced in API endpoints.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the Part was created.\n   */\n  created_at: number;\n\n  /**\n   * The object type, which is always `upload.part`.\n   */\n  object: 'upload.part';\n\n  /**\n   * The ID of the Upload object that this Part was added to.\n   */\n  upload_id: string;\n}\n\nexport interface PartCreateParams {\n  /**\n   * The chunk of bytes for this Part.\n   */\n  data: Uploadable;\n}\n\nexport declare namespace Parts {\n  export { type UploadPart as UploadPart, type PartCreateParams as PartCreateParams };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as FilesAPI from '../files';\nimport * as PartsAPI from './parts';\nimport { PartCreateParams, Parts, UploadPart } from './parts';\nimport { APIPromise } from '../../core/api-promise';\nimport { RequestOptions } from '../../internal/request-options';\nimport { path } from '../../internal/utils/path';\n\n/**\n * Use Uploads to upload large files in multiple parts.\n */\nexport class Uploads extends APIResource {\n  parts: PartsAPI.Parts = new PartsAPI.Parts(this._client);\n\n  /**\n   * Creates an intermediate\n   * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n   * that you can add\n   * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n   * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n   * after you create it.\n   *\n   * Once you complete the Upload, we will create a\n   * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n   * contains all the parts you uploaded. This File is usable in the rest of our\n   * platform as a regular File object.\n   *\n   * For certain `purpose` values, the correct `mime_type` must be specified. Please\n   * refer to documentation for the\n   * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n   *\n   * For guidance on the proper filename extensions for each purpose, please follow\n   * the documentation on\n   * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n   *\n   * Returns the Upload object with status `pending`.\n   */\n  create(body: UploadCreateParams, options?: RequestOptions): APIPromise<Upload> {\n    return this._client.post('/uploads', { body, ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n   *\n   * Returns the Upload object with status `cancelled`.\n   */\n  cancel(uploadID: string, options?: RequestOptions): APIPromise<Upload> {\n    return this._client.post(path`/uploads/${uploadID}/cancel`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Completes the\n   * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n   *\n   * Within the returned Upload object, there is a nested\n   * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n   * is ready to use in the rest of the platform.\n   *\n   * You can specify the order of the Parts by passing in an ordered list of the Part\n   * IDs.\n   *\n   * The number of bytes uploaded upon completion must match the number of bytes\n   * initially specified when creating the Upload object. No Parts may be added after\n   * an Upload is completed. Returns the Upload object with status `completed`,\n   * including an additional `file` property containing the created usable File\n   * object.\n   */\n  complete(uploadID: string, body: UploadCompleteParams, options?: RequestOptions): APIPromise<Upload> {\n    return this._client.post(path`/uploads/${uploadID}/complete`, {\n      body,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n}\n\n/**\n * The Upload object can accept byte chunks in the form of Parts.\n */\nexport interface Upload {\n  /**\n   * The Upload unique identifier, which can be referenced in API endpoints.\n   */\n  id: string;\n\n  /**\n   * The intended number of bytes to be uploaded.\n   */\n  bytes: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the Upload was created.\n   */\n  created_at: number;\n\n  /**\n   * The Unix timestamp (in seconds) for when the Upload will expire.\n   */\n  expires_at: number;\n\n  /**\n   * The name of the file to be uploaded.\n   */\n  filename: string;\n\n  /**\n   * The object type, which is always \"upload\".\n   */\n  object: 'upload';\n\n  /**\n   * The intended purpose of the file.\n   * [Please refer here](https://platform.openai.com/docs/api-reference/files/object#files/object-purpose)\n   * for acceptable values.\n   */\n  purpose: string;\n\n  /**\n   * The status of the Upload.\n   */\n  status: 'pending' | 'completed' | 'cancelled' | 'expired';\n\n  /**\n   * The `File` object represents a document that has been uploaded to OpenAI.\n   */\n  file?: FilesAPI.FileObject | null;\n}\n\nexport interface UploadCreateParams {\n  /**\n   * The number of bytes in the file you are uploading.\n   */\n  bytes: number;\n\n  /**\n   * The name of the file to upload.\n   */\n  filename: string;\n\n  /**\n   * The MIME type of the file.\n   *\n   * This must fall within the supported MIME types for your file purpose. See the\n   * supported MIME types for assistants and vision.\n   */\n  mime_type: string;\n\n  /**\n   * The intended purpose of the uploaded file.\n   *\n   * See the\n   * [documentation on File purposes](https://platform.openai.com/docs/api-reference/files/create#files-create-purpose).\n   */\n  purpose: FilesAPI.FilePurpose;\n\n  /**\n   * The expiration policy for a file. By default, files with `purpose=batch` expire\n   * after 30 days and all other files are persisted until they are manually deleted.\n   */\n  expires_after?: UploadCreateParams.ExpiresAfter;\n}\n\nexport namespace UploadCreateParams {\n  /**\n   * The expiration policy for a file. By default, files with `purpose=batch` expire\n   * after 30 days and all other files are persisted until they are manually deleted.\n   */\n  export interface ExpiresAfter {\n    /**\n     * Anchor timestamp after which the expiration policy applies. Supported anchors:\n     * `created_at`.\n     */\n    anchor: 'created_at';\n\n    /**\n     * The number of seconds after the anchor time that the file will expire. Must be\n     * between 3600 (1 hour) and 2592000 (30 days).\n     */\n    seconds: number;\n  }\n}\n\nexport interface UploadCompleteParams {\n  /**\n   * The ordered list of Part IDs.\n   */\n  part_ids: Array<string>;\n\n  /**\n   * The optional md5 checksum for the file contents to verify if the bytes uploaded\n   * matches what you expect.\n   */\n  md5?: string;\n}\n\nUploads.Parts = Parts;\n\nexport declare namespace Uploads {\n  export {\n    type Upload as Upload,\n    type UploadCreateParams as UploadCreateParams,\n    type UploadCompleteParams as UploadCompleteParams,\n  };\n\n  export { Parts as Parts, type UploadPart as UploadPart, type PartCreateParams as PartCreateParams };\n}\n", "/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async <R>(promises: Promise<R>[]): Promise<R[]> => {\n  const results = await Promise.allSettled(promises);\n  const rejected = results.filter((result): result is PromiseRejectedResult => result.status === 'rejected');\n  if (rejected.length) {\n    for (const result of rejected) {\n      console.error(result.reason);\n    }\n\n    throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n  }\n\n  // Note: TS was complaining about using `.filter().map()` here for some reason\n  const values: R[] = [];\n  for (const result of results) {\n    if (result.status === 'fulfilled') {\n      values.push(result.value);\n    }\n  }\n  return values;\n};\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as FilesAPI from './files';\nimport { VectorStoreFilesPage } from './files';\nimport * as VectorStoresAPI from './vector-stores';\nimport { APIPromise } from '../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise } from '../../core/pagination';\nimport { buildHeaders } from '../../internal/headers';\nimport { RequestOptions } from '../../internal/request-options';\nimport { sleep } from '../../internal/utils/sleep';\nimport { type Uploadable } from '../../uploads';\nimport { allSettledWithThrow } from '../../lib/Util';\nimport { path } from '../../internal/utils/path';\n\nexport class FileBatches extends APIResource {\n  /**\n   * Create a vector store file batch.\n   */\n  create(\n    vectorStoreID: string,\n    body: FileBatchCreateParams,\n    options?: RequestOptions,\n  ): APIPromise<VectorStoreFileBatch> {\n    return this._client.post(path`/vector_stores/${vectorStoreID}/file_batches`, {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves a vector store file batch.\n   */\n  retrieve(\n    batchID: string,\n    params: FileBatchRetrieveParams,\n    options?: RequestOptions,\n  ): APIPromise<VectorStoreFileBatch> {\n    const { vector_store_id } = params;\n    return this._client.get(path`/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Cancel a vector store file batch. This attempts to cancel the processing of\n   * files in this batch as soon as possible.\n   */\n  cancel(\n    batchID: string,\n    params: FileBatchCancelParams,\n    options?: RequestOptions,\n  ): APIPromise<VectorStoreFileBatch> {\n    const { vector_store_id } = params;\n    return this._client.post(path`/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Create a vector store batch and poll until all files have been processed.\n   */\n  async createAndPoll(\n    vectorStoreId: string,\n    body: FileBatchCreateParams,\n    options?: RequestOptions & { pollIntervalMs?: number },\n  ): Promise<VectorStoreFileBatch> {\n    const batch = await this.create(vectorStoreId, body);\n    return await this.poll(vectorStoreId, batch.id, options);\n  }\n\n  /**\n   * Returns a list of vector store files in a batch.\n   */\n  listFiles(\n    batchID: string,\n    params: FileBatchListFilesParams,\n    options?: RequestOptions,\n  ): PagePromise<VectorStoreFilesPage, FilesAPI.VectorStoreFile> {\n    const { vector_store_id, ...query } = params;\n    return this._client.getAPIList(\n      path`/vector_stores/${vector_store_id}/file_batches/${batchID}/files`,\n      CursorPage<FilesAPI.VectorStoreFile>,\n      {\n        query,\n        ...options,\n        headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n        __security: { bearerAuth: true },\n      },\n    );\n  }\n\n  /**\n   * Wait for the given file batch to be processed.\n   *\n   * Note: this will return even if one of the files failed to process, you need to\n   * check batch.file_counts.failed_count to handle this case.\n   */\n  async poll(\n    vectorStoreID: string,\n    batchID: string,\n    options?: RequestOptions & { pollIntervalMs?: number },\n  ): Promise<VectorStoreFileBatch> {\n    const headers = buildHeaders([\n      options?.headers,\n      {\n        'X-Stainless-Poll-Helper': 'true',\n        'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n      },\n    ]);\n\n    while (true) {\n      const { data: batch, response } = await this.retrieve(\n        batchID,\n        { vector_store_id: vectorStoreID },\n        {\n          ...options,\n          headers,\n        },\n      ).withResponse();\n\n      switch (batch.status) {\n        case 'in_progress':\n          let sleepInterval = 5000;\n\n          if (options?.pollIntervalMs) {\n            sleepInterval = options.pollIntervalMs;\n          } else {\n            const headerInterval = response.headers.get('openai-poll-after-ms');\n            if (headerInterval) {\n              const headerIntervalMs = parseInt(headerInterval);\n              if (!isNaN(headerIntervalMs)) {\n                sleepInterval = headerIntervalMs;\n              }\n            }\n          }\n          await sleep(sleepInterval);\n          break;\n        case 'failed':\n        case 'cancelled':\n        case 'completed':\n          return batch;\n      }\n    }\n  }\n\n  /**\n   * Uploads the given files concurrently and then creates a vector store file batch.\n   *\n   * The concurrency limit is configurable using the `maxConcurrency` parameter.\n   */\n  async uploadAndPoll(\n    vectorStoreId: string,\n    { files, fileIds = [] }: { files: Uploadable[]; fileIds?: string[] },\n    options?: RequestOptions & { pollIntervalMs?: number; maxConcurrency?: number },\n  ): Promise<VectorStoreFileBatch> {\n    if (files == null || files.length == 0) {\n      throw new Error(\n        `No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`,\n      );\n    }\n\n    const configuredConcurrency = options?.maxConcurrency ?? 5;\n\n    // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n    const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n\n    const client = this._client;\n    const fileIterator = files.values();\n    const allFileIds: string[] = [...fileIds];\n\n    // This code is based on this design. The libraries don't accommodate our environment limits.\n    // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n    async function processFiles(iterator: IterableIterator<Uploadable>) {\n      for (let item of iterator) {\n        const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n        allFileIds.push(fileObj.id);\n      }\n    }\n\n    // Start workers to process results\n    const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n\n    // Wait for all processing to complete.\n    await allSettledWithThrow(workers);\n\n    return await this.createAndPoll(vectorStoreId, {\n      file_ids: allFileIds,\n    });\n  }\n}\n\n/**\n * A batch of files attached to a vector store.\n */\nexport interface VectorStoreFileBatch {\n  /**\n   * The identifier, which can be referenced in API endpoints.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the vector store files batch was\n   * created.\n   */\n  created_at: number;\n\n  file_counts: VectorStoreFileBatch.FileCounts;\n\n  /**\n   * The object type, which is always `vector_store.file_batch`.\n   */\n  object: 'vector_store.files_batch';\n\n  /**\n   * The status of the vector store files batch, which can be either `in_progress`,\n   * `completed`, `cancelled` or `failed`.\n   */\n  status: 'in_progress' | 'completed' | 'cancelled' | 'failed';\n\n  /**\n   * The ID of the\n   * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n   * that the [File](https://platform.openai.com/docs/api-reference/files) is\n   * attached to.\n   */\n  vector_store_id: string;\n}\n\nexport namespace VectorStoreFileBatch {\n  export interface FileCounts {\n    /**\n     * The number of files that where cancelled.\n     */\n    cancelled: number;\n\n    /**\n     * The number of files that have been processed.\n     */\n    completed: number;\n\n    /**\n     * The number of files that have failed to process.\n     */\n    failed: number;\n\n    /**\n     * The number of files that are currently being processed.\n     */\n    in_progress: number;\n\n    /**\n     * The total number of files.\n     */\n    total: number;\n  }\n}\n\nexport interface FileBatchCreateParams {\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard. Keys are strings with a maximum\n   * length of 64 characters. Values are strings with a maximum length of 512\n   * characters, booleans, or numbers.\n   */\n  attributes?: { [key: string]: string | number | boolean } | null;\n\n  /**\n   * The chunking strategy used to chunk the file(s). If not set, will use the `auto`\n   * strategy. Only applicable if `file_ids` is non-empty.\n   */\n  chunking_strategy?: VectorStoresAPI.FileChunkingStrategyParam;\n\n  /**\n   * A list of [File](https://platform.openai.com/docs/api-reference/files) IDs that\n   * the vector store should use. Useful for tools like `file_search` that can access\n   * files. If `attributes` or `chunking_strategy` are provided, they will be applied\n   * to all files in the batch. The maximum batch size is 2000 files. This endpoint\n   * is recommended for multi-file ingestion and helps reduce per-vector-store write\n   * request pressure. Mutually exclusive with `files`.\n   */\n  file_ids?: Array<string>;\n\n  /**\n   * A list of objects that each include a `file_id` plus optional `attributes` or\n   * `chunking_strategy`. Use this when you need to override metadata for specific\n   * files. The global `attributes` or `chunking_strategy` will be ignored and must\n   * be specified for each file. The maximum batch size is 2000 files. This endpoint\n   * is recommended for multi-file ingestion and helps reduce per-vector-store write\n   * request pressure. Mutually exclusive with `file_ids`.\n   */\n  files?: Array<FileBatchCreateParams.File>;\n}\n\nexport namespace FileBatchCreateParams {\n  export interface File {\n    /**\n     * A [File](https://platform.openai.com/docs/api-reference/files) ID that the\n     * vector store should use. Useful for tools like `file_search` that can access\n     * files. For multi-file ingestion, we recommend\n     * [`file_batches`](https://platform.openai.com/docs/api-reference/vector-stores-file-batches/createBatch)\n     * to minimize per-vector-store write requests.\n     */\n    file_id: string;\n\n    /**\n     * Set of 16 key-value pairs that can be attached to an object. This can be useful\n     * for storing additional information about the object in a structured format, and\n     * querying for objects via API or the dashboard. Keys are strings with a maximum\n     * length of 64 characters. Values are strings with a maximum length of 512\n     * characters, booleans, or numbers.\n     */\n    attributes?: { [key: string]: string | number | boolean } | null;\n\n    /**\n     * The chunking strategy used to chunk the file(s). If not set, will use the `auto`\n     * strategy. Only applicable if `file_ids` is non-empty.\n     */\n    chunking_strategy?: VectorStoresAPI.FileChunkingStrategyParam;\n  }\n}\n\nexport interface FileBatchRetrieveParams {\n  /**\n   * The ID of the vector store that the file batch belongs to.\n   */\n  vector_store_id: string;\n}\n\nexport interface FileBatchCancelParams {\n  /**\n   * The ID of the vector store that the file batch belongs to.\n   */\n  vector_store_id: string;\n}\n\nexport interface FileBatchListFilesParams extends CursorPageParams {\n  /**\n   * Path param: The ID of the vector store that the files belong to.\n   */\n  vector_store_id: string;\n\n  /**\n   * Query param: A cursor for use in pagination. `before` is an object ID that\n   * defines your place in the list. For instance, if you make a list request and\n   * receive 100 objects, starting with obj_foo, your subsequent call can include\n   * before=obj_foo in order to fetch the previous page of the list.\n   */\n  before?: string;\n\n  /**\n   * Query param: Filter by file status. One of `in_progress`, `completed`, `failed`,\n   * `cancelled`.\n   */\n  filter?: 'in_progress' | 'completed' | 'failed' | 'cancelled';\n\n  /**\n   * Query param: Sort order by the `created_at` timestamp of the objects. `asc` for\n   * ascending order and `desc` for descending order.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport declare namespace FileBatches {\n  export {\n    type VectorStoreFileBatch as VectorStoreFileBatch,\n    type FileBatchCreateParams as FileBatchCreateParams,\n    type FileBatchRetrieveParams as FileBatchRetrieveParams,\n    type FileBatchCancelParams as FileBatchCancelParams,\n    type FileBatchListFilesParams as FileBatchListFilesParams,\n  };\n}\n\nexport { type VectorStoreFilesPage };\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as VectorStoresAPI from './vector-stores';\nimport { APIPromise } from '../../core/api-promise';\nimport { CursorPage, type CursorPageParams, PagePromise, Page } from '../../core/pagination';\nimport { buildHeaders } from '../../internal/headers';\nimport { RequestOptions } from '../../internal/request-options';\nimport { sleep } from '../../internal/utils';\nimport { Uploadable } from '../../uploads';\nimport { path } from '../../internal/utils/path';\n\nexport class Files extends APIResource {\n  /**\n   * Create a vector store file by attaching a\n   * [File](https://platform.openai.com/docs/api-reference/files) to a\n   * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n   */\n  create(\n    vectorStoreID: string,\n    body: FileCreateParams,\n    options?: RequestOptions,\n  ): APIPromise<VectorStoreFile> {\n    return this._client.post(path`/vector_stores/${vectorStoreID}/files`, {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves a vector store file.\n   */\n  retrieve(\n    fileID: string,\n    params: FileRetrieveParams,\n    options?: RequestOptions,\n  ): APIPromise<VectorStoreFile> {\n    const { vector_store_id } = params;\n    return this._client.get(path`/vector_stores/${vector_store_id}/files/${fileID}`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Update attributes on a vector store file.\n   */\n  update(fileID: string, params: FileUpdateParams, options?: RequestOptions): APIPromise<VectorStoreFile> {\n    const { vector_store_id, ...body } = params;\n    return this._client.post(path`/vector_stores/${vector_store_id}/files/${fileID}`, {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Returns a list of vector store files.\n   */\n  list(\n    vectorStoreID: string,\n    query: FileListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<VectorStoreFilesPage, VectorStoreFile> {\n    return this._client.getAPIList(path`/vector_stores/${vectorStoreID}/files`, CursorPage<VectorStoreFile>, {\n      query,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Delete a vector store file. This will remove the file from the vector store but\n   * the file itself will not be deleted. To delete the file, use the\n   * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n   * endpoint.\n   */\n  delete(\n    fileID: string,\n    params: FileDeleteParams,\n    options?: RequestOptions,\n  ): APIPromise<VectorStoreFileDeleted> {\n    const { vector_store_id } = params;\n    return this._client.delete(path`/vector_stores/${vector_store_id}/files/${fileID}`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Attach a file to the given vector store and wait for it to be processed.\n   */\n  async createAndPoll(\n    vectorStoreId: string,\n    body: FileCreateParams,\n    options?: RequestOptions & { pollIntervalMs?: number },\n  ): Promise<VectorStoreFile> {\n    const file = await this.create(vectorStoreId, body, options);\n    return await this.poll(vectorStoreId, file.id, options);\n  }\n  /**\n   * Wait for the vector store file to finish processing.\n   *\n   * Note: this will return even if the file failed to process, you need to check\n   * file.last_error and file.status to handle these cases\n   */\n  async poll(\n    vectorStoreID: string,\n    fileID: string,\n    options?: RequestOptions & { pollIntervalMs?: number },\n  ): Promise<VectorStoreFile> {\n    const headers = buildHeaders([\n      options?.headers,\n      {\n        'X-Stainless-Poll-Helper': 'true',\n        'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n      },\n    ]);\n\n    while (true) {\n      const fileResponse = await this.retrieve(\n        fileID,\n        {\n          vector_store_id: vectorStoreID,\n        },\n        { ...options, headers },\n      ).withResponse();\n\n      const file = fileResponse.data;\n\n      switch (file.status) {\n        case 'in_progress':\n          let sleepInterval = 5000;\n\n          if (options?.pollIntervalMs) {\n            sleepInterval = options.pollIntervalMs;\n          } else {\n            const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n            if (headerInterval) {\n              const headerIntervalMs = parseInt(headerInterval);\n              if (!isNaN(headerIntervalMs)) {\n                sleepInterval = headerIntervalMs;\n              }\n            }\n          }\n          await sleep(sleepInterval);\n          break;\n        case 'failed':\n        case 'completed':\n          return file;\n      }\n    }\n  }\n  /**\n   * Upload a file to the `files` API and then attach it to the given vector store.\n   *\n   * Note the file will be asynchronously processed (you can use the alternative\n   * polling helper method to wait for processing to complete).\n   */\n  async upload(vectorStoreId: string, file: Uploadable, options?: RequestOptions): Promise<VectorStoreFile> {\n    const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n    return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n  }\n  /**\n   * Add a file to a vector store and poll until processing is complete.\n   */\n  async uploadAndPoll(\n    vectorStoreId: string,\n    file: Uploadable,\n    options?: RequestOptions & { pollIntervalMs?: number },\n  ): Promise<VectorStoreFile> {\n    const fileInfo = await this.upload(vectorStoreId, file, options);\n    return await this.poll(vectorStoreId, fileInfo.id, options);\n  }\n\n  /**\n   * Retrieve the parsed contents of a vector store file.\n   */\n  content(\n    fileID: string,\n    params: FileContentParams,\n    options?: RequestOptions,\n  ): PagePromise<FileContentResponsesPage, FileContentResponse> {\n    const { vector_store_id } = params;\n    return this._client.getAPIList(\n      path`/vector_stores/${vector_store_id}/files/${fileID}/content`,\n      Page<FileContentResponse>,\n      {\n        ...options,\n        headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n        __security: { bearerAuth: true },\n      },\n    );\n  }\n}\n\nexport type VectorStoreFilesPage = CursorPage<VectorStoreFile>;\n\n// Note: no pagination actually occurs yet, this is for forwards-compatibility.\nexport type FileContentResponsesPage = Page<FileContentResponse>;\n\n/**\n * A list of files attached to a vector store.\n */\nexport interface VectorStoreFile {\n  /**\n   * The identifier, which can be referenced in API endpoints.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the vector store file was created.\n   */\n  created_at: number;\n\n  /**\n   * The last error associated with this vector store file. Will be `null` if there\n   * are no errors.\n   */\n  last_error: VectorStoreFile.LastError | null;\n\n  /**\n   * The object type, which is always `vector_store.file`.\n   */\n  object: 'vector_store.file';\n\n  /**\n   * The status of the vector store file, which can be either `in_progress`,\n   * `completed`, `cancelled`, or `failed`. The status `completed` indicates that the\n   * vector store file is ready for use.\n   */\n  status: 'in_progress' | 'completed' | 'cancelled' | 'failed';\n\n  /**\n   * The total vector store usage in bytes. Note that this may be different from the\n   * original file size.\n   */\n  usage_bytes: number;\n\n  /**\n   * The ID of the\n   * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n   * that the [File](https://platform.openai.com/docs/api-reference/files) is\n   * attached to.\n   */\n  vector_store_id: string;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard. Keys are strings with a maximum\n   * length of 64 characters. Values are strings with a maximum length of 512\n   * characters, booleans, or numbers.\n   */\n  attributes?: { [key: string]: string | number | boolean } | null;\n\n  /**\n   * The strategy used to chunk the file.\n   */\n  chunking_strategy?: VectorStoresAPI.FileChunkingStrategy;\n}\n\nexport namespace VectorStoreFile {\n  /**\n   * The last error associated with this vector store file. Will be `null` if there\n   * are no errors.\n   */\n  export interface LastError {\n    /**\n     * One of `server_error`, `unsupported_file`, or `invalid_file`.\n     */\n    code: 'server_error' | 'unsupported_file' | 'invalid_file';\n\n    /**\n     * A human-readable description of the error.\n     */\n    message: string;\n  }\n}\n\nexport interface VectorStoreFileDeleted {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'vector_store.file.deleted';\n}\n\nexport interface FileContentResponse {\n  /**\n   * The text content\n   */\n  text?: string;\n\n  /**\n   * The content type (currently only `\"text\"`)\n   */\n  type?: string;\n}\n\nexport interface FileCreateParams {\n  /**\n   * A [File](https://platform.openai.com/docs/api-reference/files) ID that the\n   * vector store should use. Useful for tools like `file_search` that can access\n   * files. For multi-file ingestion, we recommend\n   * [`file_batches`](https://platform.openai.com/docs/api-reference/vector-stores-file-batches/createBatch)\n   * to minimize per-vector-store write requests.\n   */\n  file_id: string;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard. Keys are strings with a maximum\n   * length of 64 characters. Values are strings with a maximum length of 512\n   * characters, booleans, or numbers.\n   */\n  attributes?: { [key: string]: string | number | boolean } | null;\n\n  /**\n   * The chunking strategy used to chunk the file(s). If not set, will use the `auto`\n   * strategy. Only applicable if `file_ids` is non-empty.\n   */\n  chunking_strategy?: VectorStoresAPI.FileChunkingStrategyParam;\n}\n\nexport interface FileRetrieveParams {\n  /**\n   * The ID of the vector store that the file belongs to.\n   */\n  vector_store_id: string;\n}\n\nexport interface FileUpdateParams {\n  /**\n   * Path param: The ID of the vector store the file belongs to.\n   */\n  vector_store_id: string;\n\n  /**\n   * Body param: Set of 16 key-value pairs that can be attached to an object. This\n   * can be useful for storing additional information about the object in a\n   * structured format, and querying for objects via API or the dashboard. Keys are\n   * strings with a maximum length of 64 characters. Values are strings with a\n   * maximum length of 512 characters, booleans, or numbers.\n   */\n  attributes: { [key: string]: string | number | boolean } | null;\n}\n\nexport interface FileListParams extends CursorPageParams {\n  /**\n   * A cursor for use in pagination. `before` is an object ID that defines your place\n   * in the list. For instance, if you make a list request and receive 100 objects,\n   * starting with obj_foo, your subsequent call can include before=obj_foo in order\n   * to fetch the previous page of the list.\n   */\n  before?: string;\n\n  /**\n   * Filter by file status. One of `in_progress`, `completed`, `failed`, `cancelled`.\n   */\n  filter?: 'in_progress' | 'completed' | 'failed' | 'cancelled';\n\n  /**\n   * Sort order by the `created_at` timestamp of the objects. `asc` for ascending\n   * order and `desc` for descending order.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface FileDeleteParams {\n  /**\n   * The ID of the vector store that the file belongs to.\n   */\n  vector_store_id: string;\n}\n\nexport interface FileContentParams {\n  /**\n   * The ID of the vector store.\n   */\n  vector_store_id: string;\n}\n\nexport declare namespace Files {\n  export {\n    type VectorStoreFile as VectorStoreFile,\n    type VectorStoreFileDeleted as VectorStoreFileDeleted,\n    type FileContentResponse as FileContentResponse,\n    type VectorStoreFilesPage as VectorStoreFilesPage,\n    type FileContentResponsesPage as FileContentResponsesPage,\n    type FileCreateParams as FileCreateParams,\n    type FileRetrieveParams as FileRetrieveParams,\n    type FileUpdateParams as FileUpdateParams,\n    type FileListParams as FileListParams,\n    type FileDeleteParams as FileDeleteParams,\n    type FileContentParams as FileContentParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../../core/resource';\nimport * as Shared from '../shared';\nimport * as FileBatchesAPI from './file-batches';\nimport {\n  FileBatchCancelParams,\n  FileBatchCreateParams,\n  FileBatchListFilesParams,\n  FileBatchRetrieveParams,\n  FileBatches,\n  VectorStoreFileBatch,\n} from './file-batches';\nimport * as FilesAPI from './files';\nimport {\n  FileContentParams,\n  FileContentResponse,\n  FileContentResponsesPage,\n  FileCreateParams,\n  FileDeleteParams,\n  FileListParams,\n  FileRetrieveParams,\n  FileUpdateParams,\n  Files,\n  VectorStoreFile,\n  VectorStoreFileDeleted,\n  VectorStoreFilesPage,\n} from './files';\nimport { APIPromise } from '../../core/api-promise';\nimport { CursorPage, type CursorPageParams, Page, PagePromise } from '../../core/pagination';\nimport { buildHeaders } from '../../internal/headers';\nimport { RequestOptions } from '../../internal/request-options';\nimport { path } from '../../internal/utils/path';\n\nexport class VectorStores extends APIResource {\n  files: FilesAPI.Files = new FilesAPI.Files(this._client);\n  fileBatches: FileBatchesAPI.FileBatches = new FileBatchesAPI.FileBatches(this._client);\n\n  /**\n   * Create a vector store.\n   */\n  create(body: VectorStoreCreateParams, options?: RequestOptions): APIPromise<VectorStore> {\n    return this._client.post('/vector_stores', {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Retrieves a vector store.\n   */\n  retrieve(vectorStoreID: string, options?: RequestOptions): APIPromise<VectorStore> {\n    return this._client.get(path`/vector_stores/${vectorStoreID}`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Modifies a vector store.\n   */\n  update(\n    vectorStoreID: string,\n    body: VectorStoreUpdateParams,\n    options?: RequestOptions,\n  ): APIPromise<VectorStore> {\n    return this._client.post(path`/vector_stores/${vectorStoreID}`, {\n      body,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Returns a list of vector stores.\n   */\n  list(\n    query: VectorStoreListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<VectorStoresPage, VectorStore> {\n    return this._client.getAPIList('/vector_stores', CursorPage<VectorStore>, {\n      query,\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Delete a vector store.\n   */\n  delete(vectorStoreID: string, options?: RequestOptions): APIPromise<VectorStoreDeleted> {\n    return this._client.delete(path`/vector_stores/${vectorStoreID}`, {\n      ...options,\n      headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Search a vector store for relevant chunks based on a query and file attributes\n   * filter.\n   */\n  search(\n    vectorStoreID: string,\n    body: VectorStoreSearchParams,\n    options?: RequestOptions,\n  ): PagePromise<VectorStoreSearchResponsesPage, VectorStoreSearchResponse> {\n    return this._client.getAPIList(\n      path`/vector_stores/${vectorStoreID}/search`,\n      Page<VectorStoreSearchResponse>,\n      {\n        body,\n        method: 'post',\n        ...options,\n        headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n        __security: { bearerAuth: true },\n      },\n    );\n  }\n}\n\nexport type VectorStoresPage = CursorPage<VectorStore>;\n\n// Note: no pagination actually occurs yet, this is for forwards-compatibility.\nexport type VectorStoreSearchResponsesPage = Page<VectorStoreSearchResponse>;\n\n/**\n * The default strategy. This strategy currently uses a `max_chunk_size_tokens` of\n * `800` and `chunk_overlap_tokens` of `400`.\n */\nexport interface AutoFileChunkingStrategyParam {\n  /**\n   * Always `auto`.\n   */\n  type: 'auto';\n}\n\n/**\n * The strategy used to chunk the file.\n */\nexport type FileChunkingStrategy = StaticFileChunkingStrategyObject | OtherFileChunkingStrategyObject;\n\n/**\n * The chunking strategy used to chunk the file(s). If not set, will use the `auto`\n * strategy. Only applicable if `file_ids` is non-empty.\n */\nexport type FileChunkingStrategyParam = AutoFileChunkingStrategyParam | StaticFileChunkingStrategyObjectParam;\n\n/**\n * This is returned when the chunking strategy is unknown. Typically, this is\n * because the file was indexed before the `chunking_strategy` concept was\n * introduced in the API.\n */\nexport interface OtherFileChunkingStrategyObject {\n  /**\n   * Always `other`.\n   */\n  type: 'other';\n}\n\nexport interface StaticFileChunkingStrategy {\n  /**\n   * The number of tokens that overlap between chunks. The default value is `400`.\n   *\n   * Note that the overlap must not exceed half of `max_chunk_size_tokens`.\n   */\n  chunk_overlap_tokens: number;\n\n  /**\n   * The maximum number of tokens in each chunk. The default value is `800`. The\n   * minimum value is `100` and the maximum value is `4096`.\n   */\n  max_chunk_size_tokens: number;\n}\n\nexport interface StaticFileChunkingStrategyObject {\n  static: StaticFileChunkingStrategy;\n\n  /**\n   * Always `static`.\n   */\n  type: 'static';\n}\n\n/**\n * Customize your own chunking strategy by setting chunk size and chunk overlap.\n */\nexport interface StaticFileChunkingStrategyObjectParam {\n  static: StaticFileChunkingStrategy;\n\n  /**\n   * Always `static`.\n   */\n  type: 'static';\n}\n\n/**\n * A vector store is a collection of processed files can be used by the\n * `file_search` tool.\n */\nexport interface VectorStore {\n  /**\n   * The identifier, which can be referenced in API endpoints.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) for when the vector store was created.\n   */\n  created_at: number;\n\n  file_counts: VectorStore.FileCounts;\n\n  /**\n   * The Unix timestamp (in seconds) for when the vector store was last active.\n   */\n  last_active_at: number | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata: Shared.Metadata | null;\n\n  /**\n   * The name of the vector store.\n   */\n  name: string;\n\n  /**\n   * The object type, which is always `vector_store`.\n   */\n  object: 'vector_store';\n\n  /**\n   * The status of the vector store, which can be either `expired`, `in_progress`, or\n   * `completed`. A status of `completed` indicates that the vector store is ready\n   * for use.\n   */\n  status: 'expired' | 'in_progress' | 'completed';\n\n  /**\n   * The total number of bytes used by the files in the vector store.\n   */\n  usage_bytes: number;\n\n  /**\n   * The expiration policy for a vector store.\n   */\n  expires_after?: VectorStore.ExpiresAfter;\n\n  /**\n   * The Unix timestamp (in seconds) for when the vector store will expire.\n   */\n  expires_at?: number | null;\n}\n\nexport namespace VectorStore {\n  export interface FileCounts {\n    /**\n     * The number of files that were cancelled.\n     */\n    cancelled: number;\n\n    /**\n     * The number of files that have been successfully processed.\n     */\n    completed: number;\n\n    /**\n     * The number of files that have failed to process.\n     */\n    failed: number;\n\n    /**\n     * The number of files that are currently being processed.\n     */\n    in_progress: number;\n\n    /**\n     * The total number of files.\n     */\n    total: number;\n  }\n\n  /**\n   * The expiration policy for a vector store.\n   */\n  export interface ExpiresAfter {\n    /**\n     * Anchor timestamp after which the expiration policy applies. Supported anchors:\n     * `last_active_at`.\n     */\n    anchor: 'last_active_at';\n\n    /**\n     * The number of days after the anchor time that the vector store will expire.\n     */\n    days: number;\n  }\n}\n\nexport interface VectorStoreDeleted {\n  id: string;\n\n  deleted: boolean;\n\n  object: 'vector_store.deleted';\n}\n\nexport interface VectorStoreSearchResponse {\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard. Keys are strings with a maximum\n   * length of 64 characters. Values are strings with a maximum length of 512\n   * characters, booleans, or numbers.\n   */\n  attributes: { [key: string]: string | number | boolean } | null;\n\n  /**\n   * Content chunks from the file.\n   */\n  content: Array<VectorStoreSearchResponse.Content>;\n\n  /**\n   * The ID of the vector store file.\n   */\n  file_id: string;\n\n  /**\n   * The name of the vector store file.\n   */\n  filename: string;\n\n  /**\n   * The similarity score for the result.\n   */\n  score: number;\n}\n\nexport namespace VectorStoreSearchResponse {\n  export interface Content {\n    /**\n     * The text content returned from search.\n     */\n    text: string;\n\n    /**\n     * The type of content.\n     */\n    type: 'text';\n  }\n}\n\nexport interface VectorStoreCreateParams {\n  /**\n   * The chunking strategy used to chunk the file(s). If not set, will use the `auto`\n   * strategy. Only applicable if `file_ids` is non-empty.\n   */\n  chunking_strategy?: FileChunkingStrategyParam;\n\n  /**\n   * A description for the vector store. Can be used to describe the vector store's\n   * purpose.\n   */\n  description?: string;\n\n  /**\n   * The expiration policy for a vector store.\n   */\n  expires_after?: VectorStoreCreateParams.ExpiresAfter;\n\n  /**\n   * A list of [File](https://platform.openai.com/docs/api-reference/files) IDs that\n   * the vector store should use. Useful for tools like `file_search` that can access\n   * files.\n   */\n  file_ids?: Array<string>;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * The name of the vector store.\n   */\n  name?: string;\n}\n\nexport namespace VectorStoreCreateParams {\n  /**\n   * The expiration policy for a vector store.\n   */\n  export interface ExpiresAfter {\n    /**\n     * Anchor timestamp after which the expiration policy applies. Supported anchors:\n     * `last_active_at`.\n     */\n    anchor: 'last_active_at';\n\n    /**\n     * The number of days after the anchor time that the vector store will expire.\n     */\n    days: number;\n  }\n}\n\nexport interface VectorStoreUpdateParams {\n  /**\n   * The expiration policy for a vector store.\n   */\n  expires_after?: VectorStoreUpdateParams.ExpiresAfter | null;\n\n  /**\n   * Set of 16 key-value pairs that can be attached to an object. This can be useful\n   * for storing additional information about the object in a structured format, and\n   * querying for objects via API or the dashboard.\n   *\n   * Keys are strings with a maximum length of 64 characters. Values are strings with\n   * a maximum length of 512 characters.\n   */\n  metadata?: Shared.Metadata | null;\n\n  /**\n   * The name of the vector store.\n   */\n  name?: string | null;\n}\n\nexport namespace VectorStoreUpdateParams {\n  /**\n   * The expiration policy for a vector store.\n   */\n  export interface ExpiresAfter {\n    /**\n     * Anchor timestamp after which the expiration policy applies. Supported anchors:\n     * `last_active_at`.\n     */\n    anchor: 'last_active_at';\n\n    /**\n     * The number of days after the anchor time that the vector store will expire.\n     */\n    days: number;\n  }\n}\n\nexport interface VectorStoreListParams extends CursorPageParams {\n  /**\n   * A cursor for use in pagination. `before` is an object ID that defines your place\n   * in the list. For instance, if you make a list request and receive 100 objects,\n   * starting with obj_foo, your subsequent call can include before=obj_foo in order\n   * to fetch the previous page of the list.\n   */\n  before?: string;\n\n  /**\n   * Sort order by the `created_at` timestamp of the objects. `asc` for ascending\n   * order and `desc` for descending order.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface VectorStoreSearchParams {\n  /**\n   * A query string for a search\n   */\n  query: string | Array<string>;\n\n  /**\n   * A filter to apply based on file attributes.\n   */\n  filters?: Shared.ComparisonFilter | Shared.CompoundFilter;\n\n  /**\n   * The maximum number of results to return. This number should be between 1 and 50\n   * inclusive.\n   */\n  max_num_results?: number;\n\n  /**\n   * Ranking options for search.\n   */\n  ranking_options?: VectorStoreSearchParams.RankingOptions;\n\n  /**\n   * Whether to rewrite the natural language query for vector search.\n   */\n  rewrite_query?: boolean;\n}\n\nexport namespace VectorStoreSearchParams {\n  /**\n   * Ranking options for search.\n   */\n  export interface RankingOptions {\n    /**\n     * Enable re-ranking; set to `none` to disable, which can help reduce latency.\n     */\n    ranker?: 'none' | 'auto' | 'default-2024-11-15';\n\n    score_threshold?: number;\n  }\n}\n\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n\nexport declare namespace VectorStores {\n  export {\n    type AutoFileChunkingStrategyParam as AutoFileChunkingStrategyParam,\n    type FileChunkingStrategy as FileChunkingStrategy,\n    type FileChunkingStrategyParam as FileChunkingStrategyParam,\n    type OtherFileChunkingStrategyObject as OtherFileChunkingStrategyObject,\n    type StaticFileChunkingStrategy as StaticFileChunkingStrategy,\n    type StaticFileChunkingStrategyObject as StaticFileChunkingStrategyObject,\n    type StaticFileChunkingStrategyObjectParam as StaticFileChunkingStrategyObjectParam,\n    type VectorStore as VectorStore,\n    type VectorStoreDeleted as VectorStoreDeleted,\n    type VectorStoreSearchResponse as VectorStoreSearchResponse,\n    type VectorStoresPage as VectorStoresPage,\n    type VectorStoreSearchResponsesPage as VectorStoreSearchResponsesPage,\n    type VectorStoreCreateParams as VectorStoreCreateParams,\n    type VectorStoreUpdateParams as VectorStoreUpdateParams,\n    type VectorStoreListParams as VectorStoreListParams,\n    type VectorStoreSearchParams as VectorStoreSearchParams,\n  };\n\n  export {\n    Files as Files,\n    type VectorStoreFile as VectorStoreFile,\n    type VectorStoreFileDeleted as VectorStoreFileDeleted,\n    type FileContentResponse as FileContentResponse,\n    type VectorStoreFilesPage as VectorStoreFilesPage,\n    type FileContentResponsesPage as FileContentResponsesPage,\n    type FileCreateParams as FileCreateParams,\n    type FileRetrieveParams as FileRetrieveParams,\n    type FileUpdateParams as FileUpdateParams,\n    type FileListParams as FileListParams,\n    type FileDeleteParams as FileDeleteParams,\n    type FileContentParams as FileContentParams,\n  };\n\n  export {\n    FileBatches as FileBatches,\n    type VectorStoreFileBatch as VectorStoreFileBatch,\n    type FileBatchCreateParams as FileBatchCreateParams,\n    type FileBatchRetrieveParams as FileBatchRetrieveParams,\n    type FileBatchCancelParams as FileBatchCancelParams,\n    type FileBatchListFilesParams as FileBatchListFilesParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { APIResource } from '../core/resource';\nimport { APIPromise } from '../core/api-promise';\nimport { ConversationCursorPage, type ConversationCursorPageParams, PagePromise } from '../core/pagination';\nimport { type Uploadable } from '../core/uploads';\nimport { buildHeaders } from '../internal/headers';\nimport { RequestOptions } from '../internal/request-options';\nimport { maybeMultipartFormRequestOptions, multipartFormRequestOptions } from '../internal/uploads';\nimport { path } from '../internal/utils/path';\n\nexport class Videos extends APIResource {\n  /**\n   * Create a new video generation job from a prompt and optional reference assets.\n   */\n  create(body: VideoCreateParams, options?: RequestOptions): APIPromise<Video> {\n    return this._client.post(\n      '/videos',\n      multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client),\n    );\n  }\n\n  /**\n   * Fetch the latest metadata for a generated video.\n   */\n  retrieve(videoID: string, options?: RequestOptions): APIPromise<Video> {\n    return this._client.get(path`/videos/${videoID}`, { ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * List recently generated videos for the current project.\n   */\n  list(\n    query: VideoListParams | null | undefined = {},\n    options?: RequestOptions,\n  ): PagePromise<VideosPage, Video> {\n    return this._client.getAPIList('/videos', ConversationCursorPage<Video>, {\n      query,\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Permanently delete a completed or failed video and its stored assets.\n   */\n  delete(videoID: string, options?: RequestOptions): APIPromise<VideoDeleteResponse> {\n    return this._client.delete(path`/videos/${videoID}`, { ...options, __security: { bearerAuth: true } });\n  }\n\n  /**\n   * Create a character from an uploaded video.\n   */\n  createCharacter(\n    body: VideoCreateCharacterParams,\n    options?: RequestOptions,\n  ): APIPromise<VideoCreateCharacterResponse> {\n    return this._client.post(\n      '/videos/characters',\n      multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client),\n    );\n  }\n\n  /**\n   * Download the generated video bytes or a derived preview asset.\n   *\n   * Streams the rendered video content for the specified video job.\n   */\n  downloadContent(\n    videoID: string,\n    query: VideoDownloadContentParams | null | undefined = {},\n    options?: RequestOptions,\n  ): APIPromise<Response> {\n    return this._client.get(path`/videos/${videoID}/content`, {\n      query,\n      ...options,\n      headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n      __security: { bearerAuth: true },\n      __binaryResponse: true,\n    });\n  }\n\n  /**\n   * Create a new video generation job by editing a source video or existing\n   * generated video.\n   */\n  edit(body: VideoEditParams, options?: RequestOptions): APIPromise<Video> {\n    return this._client.post(\n      '/videos/edits',\n      multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client),\n    );\n  }\n\n  /**\n   * Create an extension of a completed video.\n   */\n  extend(body: VideoExtendParams, options?: RequestOptions): APIPromise<Video> {\n    return this._client.post(\n      '/videos/extensions',\n      multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client),\n    );\n  }\n\n  /**\n   * Fetch a character.\n   */\n  getCharacter(characterID: string, options?: RequestOptions): APIPromise<VideoGetCharacterResponse> {\n    return this._client.get(path`/videos/characters/${characterID}`, {\n      ...options,\n      __security: { bearerAuth: true },\n    });\n  }\n\n  /**\n   * Create a remix of a completed video using a refreshed prompt.\n   */\n  remix(videoID: string, body: VideoRemixParams, options?: RequestOptions): APIPromise<Video> {\n    return this._client.post(\n      path`/videos/${videoID}/remix`,\n      maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client),\n    );\n  }\n}\n\nexport type VideosPage = ConversationCursorPage<Video>;\n\nexport interface ImageInputReferenceParam {\n  file_id?: string;\n\n  /**\n   * A fully qualified URL or base64-encoded data URL.\n   */\n  image_url?: string;\n}\n\n/**\n * Structured information describing a generated video job.\n */\nexport interface Video {\n  /**\n   * Unique identifier for the video job.\n   */\n  id: string;\n\n  /**\n   * Unix timestamp (seconds) for when the job completed, if finished.\n   */\n  completed_at: number | null;\n\n  /**\n   * Unix timestamp (seconds) for when the job was created.\n   */\n  created_at: number;\n\n  /**\n   * Error payload that explains why generation failed, if applicable.\n   */\n  error: VideoCreateError | null;\n\n  /**\n   * Unix timestamp (seconds) for when the downloadable assets expire, if set.\n   */\n  expires_at: number | null;\n\n  /**\n   * The video generation model that produced the job.\n   */\n  model: VideoModel;\n\n  /**\n   * The object type, which is always `video`.\n   */\n  object: 'video';\n\n  /**\n   * Approximate completion percentage for the generation task.\n   */\n  progress: number;\n\n  /**\n   * The prompt that was used to generate the video.\n   */\n  prompt: string | null;\n\n  /**\n   * Identifier of the source video if this video is a remix.\n   */\n  remixed_from_video_id: string | null;\n\n  /**\n   * Duration of the generated clip in seconds. For extensions, this is the stitched\n   * total duration.\n   */\n  seconds: (string & {}) | VideoSeconds;\n\n  /**\n   * The resolution of the generated video.\n   */\n  size: VideoSize;\n\n  /**\n   * Current lifecycle status of the video job.\n   */\n  status: 'queued' | 'in_progress' | 'completed' | 'failed';\n}\n\n/**\n * An error that occurred while generating the response.\n */\nexport interface VideoCreateError {\n  /**\n   * A machine-readable error code that was returned.\n   */\n  code: string;\n\n  /**\n   * A human-readable description of the error that was returned.\n   */\n  message: string;\n}\n\nexport type VideoModel =\n  | (string & {})\n  | 'sora-2'\n  | 'sora-2-pro'\n  | 'sora-2-2025-10-06'\n  | 'sora-2-pro-2025-10-06'\n  | 'sora-2-2025-12-08';\n\nexport type VideoSeconds = '4' | '8' | '12';\n\nexport type VideoSize = '720x1280' | '1280x720' | '1024x1792' | '1792x1024';\n\n/**\n * Confirmation payload returned after deleting a video.\n */\nexport interface VideoDeleteResponse {\n  /**\n   * Identifier of the deleted video.\n   */\n  id: string;\n\n  /**\n   * Indicates that the video resource was deleted.\n   */\n  deleted: boolean;\n\n  /**\n   * The object type that signals the deletion response.\n   */\n  object: 'video.deleted';\n}\n\nexport interface VideoCreateCharacterResponse {\n  /**\n   * Identifier for the character creation cameo.\n   */\n  id: string | null;\n\n  /**\n   * Unix timestamp (in seconds) when the character was created.\n   */\n  created_at: number;\n\n  /**\n   * Display name for the character.\n   */\n  name: string | null;\n}\n\nexport interface VideoGetCharacterResponse {\n  /**\n   * Identifier for the character creation cameo.\n   */\n  id: string | null;\n\n  /**\n   * Unix timestamp (in seconds) when the character was created.\n   */\n  created_at: number;\n\n  /**\n   * Display name for the character.\n   */\n  name: string | null;\n}\n\nexport interface VideoCreateParams {\n  /**\n   * Text prompt that describes the video to generate.\n   */\n  prompt: string;\n\n  /**\n   * Optional reference asset upload or reference object that guides generation.\n   */\n  input_reference?: Uploadable | ImageInputReferenceParam;\n\n  /**\n   * The video generation model to use (allowed values: sora-2, sora-2-pro). Defaults\n   * to `sora-2`.\n   */\n  model?: VideoModel;\n\n  /**\n   * Clip duration in seconds (allowed values: 4, 8, 12). Defaults to 4 seconds.\n   */\n  seconds?: VideoSeconds;\n\n  /**\n   * Output resolution formatted as width x height (allowed values: 720x1280,\n   * 1280x720, 1024x1792, 1792x1024). Defaults to 720x1280.\n   */\n  size?: VideoSize;\n}\n\nexport interface VideoListParams extends ConversationCursorPageParams {\n  /**\n   * Sort order of results by timestamp. Use `asc` for ascending order or `desc` for\n   * descending order.\n   */\n  order?: 'asc' | 'desc';\n}\n\nexport interface VideoCreateCharacterParams {\n  /**\n   * Display name for this API character.\n   */\n  name: string;\n\n  /**\n   * Video file used to create a character.\n   */\n  video: Uploadable;\n}\n\nexport interface VideoDownloadContentParams {\n  /**\n   * Which downloadable asset to return. Defaults to the MP4 video.\n   */\n  variant?: 'video' | 'thumbnail' | 'spritesheet';\n}\n\nexport interface VideoEditParams {\n  /**\n   * Text prompt that describes how to edit the source video.\n   */\n  prompt: string;\n\n  /**\n   * Reference to the completed video to edit.\n   */\n  video: Uploadable | VideoEditParams.VideoReferenceInputParam;\n}\n\nexport namespace VideoEditParams {\n  /**\n   * Reference to the completed video.\n   */\n  export interface VideoReferenceInputParam {\n    /**\n     * The identifier of the completed video.\n     */\n    id: string;\n  }\n}\n\nexport interface VideoExtendParams {\n  /**\n   * Updated text prompt that directs the extension generation.\n   */\n  prompt: string;\n\n  /**\n   * Length of the newly generated extension segment in seconds (allowed values: 4,\n   * 8, 12, 16, 20).\n   */\n  seconds: VideoSeconds;\n\n  /**\n   * Reference to the completed video to extend.\n   */\n  video: Uploadable | VideoExtendParams.VideoReferenceInputParam;\n}\n\nexport namespace VideoExtendParams {\n  /**\n   * Reference to the completed video.\n   */\n  export interface VideoReferenceInputParam {\n    /**\n     * The identifier of the completed video.\n     */\n    id: string;\n  }\n}\n\nexport interface VideoRemixParams {\n  /**\n   * Updated text prompt that directs the remix generation.\n   */\n  prompt: string;\n}\n\nexport declare namespace Videos {\n  export {\n    type ImageInputReferenceParam as ImageInputReferenceParam,\n    type Video as Video,\n    type VideoCreateError as VideoCreateError,\n    type VideoModel as VideoModel,\n    type VideoSeconds as VideoSeconds,\n    type VideoSize as VideoSize,\n    type VideoDeleteResponse as VideoDeleteResponse,\n    type VideoCreateCharacterResponse as VideoCreateCharacterResponse,\n    type VideoGetCharacterResponse as VideoGetCharacterResponse,\n    type VideosPage as VideosPage,\n    type VideoCreateParams as VideoCreateParams,\n    type VideoListParams as VideoListParams,\n    type VideoCreateCharacterParams as VideoCreateCharacterParams,\n    type VideoDownloadContentParams as VideoDownloadContentParams,\n    type VideoEditParams as VideoEditParams,\n    type VideoExtendParams as VideoExtendParams,\n    type VideoRemixParams as VideoRemixParams,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport { InvalidWebhookSignatureError } from '../../error';\nimport { APIResource } from '../../core/resource';\nimport { buildHeaders, HeadersLike } from '../../internal/headers';\n\nexport class Webhooks extends APIResource {\n  /**\n   * Validates that the given payload was sent by OpenAI and parses the payload.\n   */\n  async unwrap(\n    payload: string,\n    headers: HeadersLike,\n    secret: string | undefined | null = this._client.webhookSecret,\n    tolerance: number = 300,\n  ): Promise<UnwrapWebhookEvent> {\n    await this.verifySignature(payload, headers, secret, tolerance);\n\n    return JSON.parse(payload) as UnwrapWebhookEvent;\n  }\n\n  /**\n   * Validates whether or not the webhook payload was sent by OpenAI.\n   *\n   * An error will be raised if the webhook payload was not sent by OpenAI.\n   *\n   * @param payload - The webhook payload\n   * @param headers - The webhook headers\n   * @param secret - The webhook secret (optional, will use client secret if not provided)\n   * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n   */\n  async verifySignature(\n    payload: string,\n    headers: HeadersLike,\n    secret: string | undefined | null = this._client.webhookSecret,\n    tolerance: number = 300,\n  ): Promise<void> {\n    if (\n      typeof crypto === 'undefined' ||\n      typeof crypto.subtle.importKey !== 'function' ||\n      typeof crypto.subtle.verify !== 'function'\n    ) {\n      throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n    }\n\n    this.#validateSecret(secret);\n\n    const headersObj = buildHeaders([headers]).values;\n    const signatureHeader = this.#getRequiredHeader(headersObj, 'webhook-signature');\n    const timestamp = this.#getRequiredHeader(headersObj, 'webhook-timestamp');\n    const webhookId = this.#getRequiredHeader(headersObj, 'webhook-id');\n\n    // Validate timestamp to prevent replay attacks\n    const timestampSeconds = parseInt(timestamp, 10);\n    if (isNaN(timestampSeconds)) {\n      throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n    }\n\n    const nowSeconds = Math.floor(Date.now() / 1000);\n\n    if (nowSeconds - timestampSeconds > tolerance) {\n      throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n    }\n\n    if (timestampSeconds > nowSeconds + tolerance) {\n      throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n    }\n\n    // Extract signatures from v1,<base64> format\n    // The signature header can have multiple values, separated by spaces.\n    // Each value is in the format v1,<base64>. We should accept if any match.\n    const signatures = signatureHeader\n      .split(' ')\n      .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n\n    // Decode the secret if it starts with whsec_\n    const decodedSecret =\n      secret.startsWith('whsec_') ?\n        Buffer.from(secret.replace('whsec_', ''), 'base64')\n      : Buffer.from(secret, 'utf-8');\n\n    // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n    const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n\n    // Import the secret as a cryptographic key for HMAC\n    const key = await crypto.subtle.importKey(\n      'raw',\n      decodedSecret,\n      { name: 'HMAC', hash: 'SHA-256' },\n      false,\n      ['verify'],\n    );\n\n    // Check if any signature matches using timing-safe WebCrypto verify\n    for (const signature of signatures) {\n      try {\n        const signatureBytes = Buffer.from(signature, 'base64');\n        const isValid = await crypto.subtle.verify(\n          'HMAC',\n          key,\n          signatureBytes,\n          new TextEncoder().encode(signedPayload),\n        );\n\n        if (isValid) {\n          return; // Valid signature found\n        }\n      } catch {\n        // Invalid base64 or signature format, continue to next signature\n        continue;\n      }\n    }\n\n    throw new InvalidWebhookSignatureError(\n      'The given webhook signature does not match the expected signature',\n    );\n  }\n\n  #validateSecret(secret: string | null | undefined): asserts secret is string {\n    if (typeof secret !== 'string' || secret.length === 0) {\n      throw new Error(\n        `The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`,\n      );\n    }\n  }\n\n  #getRequiredHeader(headers: Headers, name: string): string {\n    if (!headers) {\n      throw new Error(`Headers are required`);\n    }\n\n    const value = headers.get(name);\n\n    if (value === null || value === undefined) {\n      throw new Error(`Missing required header: ${name}`);\n    }\n\n    return value;\n  }\n}\n\n/**\n * Sent when a batch API request has been cancelled.\n */\nexport interface BatchCancelledWebhookEvent {\n  /**\n   * The unique ID of the event.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the batch API request was cancelled.\n   */\n  created_at: number;\n\n  /**\n   * Event data payload.\n   */\n  data: BatchCancelledWebhookEvent.Data;\n\n  /**\n   * The type of the event. Always `batch.cancelled`.\n   */\n  type: 'batch.cancelled';\n\n  /**\n   * The object of the event. Always `event`.\n   */\n  object?: 'event';\n}\n\nexport namespace BatchCancelledWebhookEvent {\n  /**\n   * Event data payload.\n   */\n  export interface Data {\n    /**\n     * The unique ID of the batch API request.\n     */\n    id: string;\n  }\n}\n\n/**\n * Sent when a batch API request has been completed.\n */\nexport interface BatchCompletedWebhookEvent {\n  /**\n   * The unique ID of the event.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the batch API request was completed.\n   */\n  created_at: number;\n\n  /**\n   * Event data payload.\n   */\n  data: BatchCompletedWebhookEvent.Data;\n\n  /**\n   * The type of the event. Always `batch.completed`.\n   */\n  type: 'batch.completed';\n\n  /**\n   * The object of the event. Always `event`.\n   */\n  object?: 'event';\n}\n\nexport namespace BatchCompletedWebhookEvent {\n  /**\n   * Event data payload.\n   */\n  export interface Data {\n    /**\n     * The unique ID of the batch API request.\n     */\n    id: string;\n  }\n}\n\n/**\n * Sent when a batch API request has expired.\n */\nexport interface BatchExpiredWebhookEvent {\n  /**\n   * The unique ID of the event.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the batch API request expired.\n   */\n  created_at: number;\n\n  /**\n   * Event data payload.\n   */\n  data: BatchExpiredWebhookEvent.Data;\n\n  /**\n   * The type of the event. Always `batch.expired`.\n   */\n  type: 'batch.expired';\n\n  /**\n   * The object of the event. Always `event`.\n   */\n  object?: 'event';\n}\n\nexport namespace BatchExpiredWebhookEvent {\n  /**\n   * Event data payload.\n   */\n  export interface Data {\n    /**\n     * The unique ID of the batch API request.\n     */\n    id: string;\n  }\n}\n\n/**\n * Sent when a batch API request has failed.\n */\nexport interface BatchFailedWebhookEvent {\n  /**\n   * The unique ID of the event.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the batch API request failed.\n   */\n  created_at: number;\n\n  /**\n   * Event data payload.\n   */\n  data: BatchFailedWebhookEvent.Data;\n\n  /**\n   * The type of the event. Always `batch.failed`.\n   */\n  type: 'batch.failed';\n\n  /**\n   * The object of the event. Always `event`.\n   */\n  object?: 'event';\n}\n\nexport namespace BatchFailedWebhookEvent {\n  /**\n   * Event data payload.\n   */\n  export interface Data {\n    /**\n     * The unique ID of the batch API request.\n     */\n    id: string;\n  }\n}\n\n/**\n * Sent when an eval run has been canceled.\n */\nexport interface EvalRunCanceledWebhookEvent {\n  /**\n   * The unique ID of the event.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the eval run was canceled.\n   */\n  created_at: number;\n\n  /**\n   * Event data payload.\n   */\n  data: EvalRunCanceledWebhookEvent.Data;\n\n  /**\n   * The type of the event. Always `eval.run.canceled`.\n   */\n  type: 'eval.run.canceled';\n\n  /**\n   * The object of the event. Always `event`.\n   */\n  object?: 'event';\n}\n\nexport namespace EvalRunCanceledWebhookEvent {\n  /**\n   * Event data payload.\n   */\n  export interface Data {\n    /**\n     * The unique ID of the eval run.\n     */\n    id: string;\n  }\n}\n\n/**\n * Sent when an eval run has failed.\n */\nexport interface EvalRunFailedWebhookEvent {\n  /**\n   * The unique ID of the event.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the eval run failed.\n   */\n  created_at: number;\n\n  /**\n   * Event data payload.\n   */\n  data: EvalRunFailedWebhookEvent.Data;\n\n  /**\n   * The type of the event. Always `eval.run.failed`.\n   */\n  type: 'eval.run.failed';\n\n  /**\n   * The object of the event. Always `event`.\n   */\n  object?: 'event';\n}\n\nexport namespace EvalRunFailedWebhookEvent {\n  /**\n   * Event data payload.\n   */\n  export interface Data {\n    /**\n     * The unique ID of the eval run.\n     */\n    id: string;\n  }\n}\n\n/**\n * Sent when an eval run has succeeded.\n */\nexport interface EvalRunSucceededWebhookEvent {\n  /**\n   * The unique ID of the event.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the eval run succeeded.\n   */\n  created_at: number;\n\n  /**\n   * Event data payload.\n   */\n  data: EvalRunSucceededWebhookEvent.Data;\n\n  /**\n   * The type of the event. Always `eval.run.succeeded`.\n   */\n  type: 'eval.run.succeeded';\n\n  /**\n   * The object of the event. Always `event`.\n   */\n  object?: 'event';\n}\n\nexport namespace EvalRunSucceededWebhookEvent {\n  /**\n   * Event data payload.\n   */\n  export interface Data {\n    /**\n     * The unique ID of the eval run.\n     */\n    id: string;\n  }\n}\n\n/**\n * Sent when a fine-tuning job has been cancelled.\n */\nexport interface FineTuningJobCancelledWebhookEvent {\n  /**\n   * The unique ID of the event.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the fine-tuning job was cancelled.\n   */\n  created_at: number;\n\n  /**\n   * Event data payload.\n   */\n  data: FineTuningJobCancelledWebhookEvent.Data;\n\n  /**\n   * The type of the event. Always `fine_tuning.job.cancelled`.\n   */\n  type: 'fine_tuning.job.cancelled';\n\n  /**\n   * The object of the event. Always `event`.\n   */\n  object?: 'event';\n}\n\nexport namespace FineTuningJobCancelledWebhookEvent {\n  /**\n   * Event data payload.\n   */\n  export interface Data {\n    /**\n     * The unique ID of the fine-tuning job.\n     */\n    id: string;\n  }\n}\n\n/**\n * Sent when a fine-tuning job has failed.\n */\nexport interface FineTuningJobFailedWebhookEvent {\n  /**\n   * The unique ID of the event.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the fine-tuning job failed.\n   */\n  created_at: number;\n\n  /**\n   * Event data payload.\n   */\n  data: FineTuningJobFailedWebhookEvent.Data;\n\n  /**\n   * The type of the event. Always `fine_tuning.job.failed`.\n   */\n  type: 'fine_tuning.job.failed';\n\n  /**\n   * The object of the event. Always `event`.\n   */\n  object?: 'event';\n}\n\nexport namespace FineTuningJobFailedWebhookEvent {\n  /**\n   * Event data payload.\n   */\n  export interface Data {\n    /**\n     * The unique ID of the fine-tuning job.\n     */\n    id: string;\n  }\n}\n\n/**\n * Sent when a fine-tuning job has succeeded.\n */\nexport interface FineTuningJobSucceededWebhookEvent {\n  /**\n   * The unique ID of the event.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the fine-tuning job succeeded.\n   */\n  created_at: number;\n\n  /**\n   * Event data payload.\n   */\n  data: FineTuningJobSucceededWebhookEvent.Data;\n\n  /**\n   * The type of the event. Always `fine_tuning.job.succeeded`.\n   */\n  type: 'fine_tuning.job.succeeded';\n\n  /**\n   * The object of the event. Always `event`.\n   */\n  object?: 'event';\n}\n\nexport namespace FineTuningJobSucceededWebhookEvent {\n  /**\n   * Event data payload.\n   */\n  export interface Data {\n    /**\n     * The unique ID of the fine-tuning job.\n     */\n    id: string;\n  }\n}\n\n/**\n * Sent when Realtime API Receives a incoming SIP call.\n */\nexport interface RealtimeCallIncomingWebhookEvent {\n  /**\n   * The unique ID of the event.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the model response was completed.\n   */\n  created_at: number;\n\n  /**\n   * Event data payload.\n   */\n  data: RealtimeCallIncomingWebhookEvent.Data;\n\n  /**\n   * The type of the event. Always `realtime.call.incoming`.\n   */\n  type: 'realtime.call.incoming';\n\n  /**\n   * The object of the event. Always `event`.\n   */\n  object?: 'event';\n}\n\nexport namespace RealtimeCallIncomingWebhookEvent {\n  /**\n   * Event data payload.\n   */\n  export interface Data {\n    /**\n     * The unique ID of this call.\n     */\n    call_id: string;\n\n    /**\n     * Headers from the SIP Invite.\n     */\n    sip_headers: Array<Data.SipHeader>;\n  }\n\n  export namespace Data {\n    /**\n     * A header from the SIP Invite.\n     */\n    export interface SipHeader {\n      /**\n       * Name of the SIP Header.\n       */\n      name: string;\n\n      /**\n       * Value of the SIP Header.\n       */\n      value: string;\n    }\n  }\n}\n\n/**\n * Sent when a background response has been cancelled.\n */\nexport interface ResponseCancelledWebhookEvent {\n  /**\n   * The unique ID of the event.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the model response was cancelled.\n   */\n  created_at: number;\n\n  /**\n   * Event data payload.\n   */\n  data: ResponseCancelledWebhookEvent.Data;\n\n  /**\n   * The type of the event. Always `response.cancelled`.\n   */\n  type: 'response.cancelled';\n\n  /**\n   * The object of the event. Always `event`.\n   */\n  object?: 'event';\n}\n\nexport namespace ResponseCancelledWebhookEvent {\n  /**\n   * Event data payload.\n   */\n  export interface Data {\n    /**\n     * The unique ID of the model response.\n     */\n    id: string;\n  }\n}\n\n/**\n * Sent when a background response has been completed.\n */\nexport interface ResponseCompletedWebhookEvent {\n  /**\n   * The unique ID of the event.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the model response was completed.\n   */\n  created_at: number;\n\n  /**\n   * Event data payload.\n   */\n  data: ResponseCompletedWebhookEvent.Data;\n\n  /**\n   * The type of the event. Always `response.completed`.\n   */\n  type: 'response.completed';\n\n  /**\n   * The object of the event. Always `event`.\n   */\n  object?: 'event';\n}\n\nexport namespace ResponseCompletedWebhookEvent {\n  /**\n   * Event data payload.\n   */\n  export interface Data {\n    /**\n     * The unique ID of the model response.\n     */\n    id: string;\n  }\n}\n\n/**\n * Sent when a background response has failed.\n */\nexport interface ResponseFailedWebhookEvent {\n  /**\n   * The unique ID of the event.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the model response failed.\n   */\n  created_at: number;\n\n  /**\n   * Event data payload.\n   */\n  data: ResponseFailedWebhookEvent.Data;\n\n  /**\n   * The type of the event. Always `response.failed`.\n   */\n  type: 'response.failed';\n\n  /**\n   * The object of the event. Always `event`.\n   */\n  object?: 'event';\n}\n\nexport namespace ResponseFailedWebhookEvent {\n  /**\n   * Event data payload.\n   */\n  export interface Data {\n    /**\n     * The unique ID of the model response.\n     */\n    id: string;\n  }\n}\n\n/**\n * Sent when a background response has been interrupted.\n */\nexport interface ResponseIncompleteWebhookEvent {\n  /**\n   * The unique ID of the event.\n   */\n  id: string;\n\n  /**\n   * The Unix timestamp (in seconds) of when the model response was interrupted.\n   */\n  created_at: number;\n\n  /**\n   * Event data payload.\n   */\n  data: ResponseIncompleteWebhookEvent.Data;\n\n  /**\n   * The type of the event. Always `response.incomplete`.\n   */\n  type: 'response.incomplete';\n\n  /**\n   * The object of the event. Always `event`.\n   */\n  object?: 'event';\n}\n\nexport namespace ResponseIncompleteWebhookEvent {\n  /**\n   * Event data payload.\n   */\n  export interface Data {\n    /**\n     * The unique ID of the model response.\n     */\n    id: string;\n  }\n}\n\n/**\n * Sent when a batch API request has been cancelled.\n */\nexport type UnwrapWebhookEvent =\n  | BatchCancelledWebhookEvent\n  | BatchCompletedWebhookEvent\n  | BatchExpiredWebhookEvent\n  | BatchFailedWebhookEvent\n  | EvalRunCanceledWebhookEvent\n  | EvalRunFailedWebhookEvent\n  | EvalRunSucceededWebhookEvent\n  | FineTuningJobCancelledWebhookEvent\n  | FineTuningJobFailedWebhookEvent\n  | FineTuningJobSucceededWebhookEvent\n  | RealtimeCallIncomingWebhookEvent\n  | ResponseCancelledWebhookEvent\n  | ResponseCompletedWebhookEvent\n  | ResponseFailedWebhookEvent\n  | ResponseIncompleteWebhookEvent;\n\nexport declare namespace Webhooks {\n  export {\n    type BatchCancelledWebhookEvent as BatchCancelledWebhookEvent,\n    type BatchCompletedWebhookEvent as BatchCompletedWebhookEvent,\n    type BatchExpiredWebhookEvent as BatchExpiredWebhookEvent,\n    type BatchFailedWebhookEvent as BatchFailedWebhookEvent,\n    type EvalRunCanceledWebhookEvent as EvalRunCanceledWebhookEvent,\n    type EvalRunFailedWebhookEvent as EvalRunFailedWebhookEvent,\n    type EvalRunSucceededWebhookEvent as EvalRunSucceededWebhookEvent,\n    type FineTuningJobCancelledWebhookEvent as FineTuningJobCancelledWebhookEvent,\n    type FineTuningJobFailedWebhookEvent as FineTuningJobFailedWebhookEvent,\n    type FineTuningJobSucceededWebhookEvent as FineTuningJobSucceededWebhookEvent,\n    type RealtimeCallIncomingWebhookEvent as RealtimeCallIncomingWebhookEvent,\n    type ResponseCancelledWebhookEvent as ResponseCancelledWebhookEvent,\n    type ResponseCompletedWebhookEvent as ResponseCompletedWebhookEvent,\n    type ResponseFailedWebhookEvent as ResponseFailedWebhookEvent,\n    type ResponseIncompleteWebhookEvent as ResponseIncompleteWebhookEvent,\n    type UnwrapWebhookEvent as UnwrapWebhookEvent,\n  };\n}\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nexport * from './webhooks';\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nexport * from './webhooks/index';\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nexport * from './chat/index';\nexport * from './shared';\nexport { Admin } from './admin/admin';\nexport { Audio, type AudioModel, type AudioResponseFormat } from './audio/audio';\nexport {\n  Batches,\n  type Batch,\n  type BatchError,\n  type BatchRequestCounts,\n  type BatchUsage,\n  type BatchCreateParams,\n  type BatchListParams,\n  type BatchesPage,\n} from './batches';\nexport { Beta } from './beta/beta';\nexport {\n  Completions,\n  type Completion,\n  type CompletionChoice,\n  type CompletionUsage,\n  type CompletionCreateParams,\n  type CompletionCreateParamsNonStreaming,\n  type CompletionCreateParamsStreaming,\n} from './completions';\nexport {\n  Containers,\n  type ContainerCreateResponse,\n  type ContainerRetrieveResponse,\n  type ContainerListResponse,\n  type ContainerCreateParams,\n  type ContainerListParams,\n  type ContainerListResponsesPage,\n} from './containers/containers';\nexport { Conversations } from './conversations/conversations';\nexport {\n  Embeddings,\n  type CreateEmbeddingResponse,\n  type Embedding,\n  type EmbeddingModel,\n  type EmbeddingCreateParams,\n} from './embeddings';\nexport {\n  Evals,\n  type EvalCustomDataSourceConfig,\n  type EvalStoredCompletionsDataSourceConfig,\n  type EvalCreateResponse,\n  type EvalRetrieveResponse,\n  type EvalUpdateResponse,\n  type EvalListResponse,\n  type EvalDeleteResponse,\n  type EvalCreateParams,\n  type EvalUpdateParams,\n  type EvalListParams,\n  type EvalListResponsesPage,\n} from './evals/evals';\nexport {\n  Files,\n  type FileContent,\n  type FileDeleted,\n  type FileObject,\n  type FilePurpose,\n  type FileCreateParams,\n  type FileListParams,\n  type FileObjectsPage,\n} from './files';\nexport { FineTuning } from './fine-tuning/fine-tuning';\nexport { Graders } from './graders/graders';\nexport {\n  Images,\n  type Image,\n  type ImageEditCompletedEvent,\n  type ImageEditPartialImageEvent,\n  type ImageEditStreamEvent,\n  type ImageGenCompletedEvent,\n  type ImageGenPartialImageEvent,\n  type ImageGenStreamEvent,\n  type ImageModel,\n  type ImagesResponse,\n  type ImageCreateVariationParams,\n  type ImageEditParams,\n  type ImageEditParamsNonStreaming,\n  type ImageEditParamsStreaming,\n  type ImageGenerateParams,\n  type ImageGenerateParamsNonStreaming,\n  type ImageGenerateParamsStreaming,\n} from './images';\nexport { Models, type Model, type ModelDeleted, type ModelsPage } from './models';\nexport {\n  Moderations,\n  type Moderation,\n  type ModerationImageURLInput,\n  type ModerationModel,\n  type ModerationMultiModalInput,\n  type ModerationTextInput,\n  type ModerationCreateResponse,\n  type ModerationCreateParams,\n} from './moderations';\nexport { Realtime } from './realtime/realtime';\nexport { Responses } from './responses/responses';\nexport {\n  Skills,\n  type DeletedSkill,\n  type Skill,\n  type SkillList,\n  type SkillCreateParams,\n  type SkillUpdateParams,\n  type SkillListParams,\n  type SkillsPage,\n} from './skills/skills';\nexport { Uploads, type Upload, type UploadCreateParams, type UploadCompleteParams } from './uploads/uploads';\nexport {\n  VectorStores,\n  type AutoFileChunkingStrategyParam,\n  type FileChunkingStrategy,\n  type FileChunkingStrategyParam,\n  type OtherFileChunkingStrategyObject,\n  type StaticFileChunkingStrategy,\n  type StaticFileChunkingStrategyObject,\n  type StaticFileChunkingStrategyObjectParam,\n  type VectorStore,\n  type VectorStoreDeleted,\n  type VectorStoreSearchResponse,\n  type VectorStoreCreateParams,\n  type VectorStoreUpdateParams,\n  type VectorStoreListParams,\n  type VectorStoreSearchParams,\n  type VectorStoresPage,\n  type VectorStoreSearchResponsesPage,\n} from './vector-stores/vector-stores';\nexport {\n  Videos,\n  type ImageInputReferenceParam,\n  type Video,\n  type VideoCreateError,\n  type VideoModel,\n  type VideoSeconds,\n  type VideoSize,\n  type VideoDeleteResponse,\n  type VideoCreateCharacterResponse,\n  type VideoGetCharacterResponse,\n  type VideoCreateParams,\n  type VideoListParams,\n  type VideoCreateCharacterParams,\n  type VideoDownloadContentParams,\n  type VideoEditParams,\n  type VideoExtendParams,\n  type VideoRemixParams,\n  type VideosPage,\n} from './videos';\nexport { Webhooks } from './webhooks';\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nimport type { RequestInit, RequestInfo, BodyInit } from './internal/builtin-types';\nimport type { HTTPMethod, PromiseOrValue, MergedRequestInit, FinalizedRequestInit } from './internal/types';\nimport { uuid4 } from './internal/utils/uuid';\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from './internal/utils/values';\nimport { sleep } from './internal/utils/sleep';\nexport type { Logger, LogLevel } from './internal/utils/log';\nimport { castToError, isAbortError } from './internal/errors';\nimport type { APIResponseProps } from './internal/parse';\nimport { getPlatformHeaders } from './internal/detect-platform';\nimport * as Shims from './internal/shims';\nimport * as Opts from './internal/request-options';\nimport { stringifyQuery } from './internal/utils/query';\nimport { VERSION } from './version';\nimport * as Errors from './core/error';\nimport * as Pagination from './core/pagination';\nimport type { WorkloadIdentity } from './auth/types';\nimport { WorkloadIdentityAuth } from './auth/workload-identity-auth';\nimport { OAuthError, SubjectTokenProviderError } from './core/error';\nimport {\n  AbstractPage,\n  type ConversationCursorPageParams,\n  ConversationCursorPageResponse,\n  type CursorPageParams,\n  CursorPageResponse,\n  type NextCursorPageParams,\n  NextCursorPageResponse,\n  PageResponse,\n} from './core/pagination';\nimport * as Uploads from './core/uploads';\nimport * as API from './resources/index';\nimport { APIPromise } from './core/api-promise';\nimport {\n  Batch,\n  BatchCreateParams,\n  BatchError,\n  BatchListParams,\n  BatchRequestCounts,\n  BatchUsage,\n  Batches,\n  BatchesPage,\n} from './resources/batches';\nimport {\n  Completion,\n  CompletionChoice,\n  CompletionCreateParams,\n  CompletionCreateParamsNonStreaming,\n  CompletionCreateParamsStreaming,\n  CompletionUsage,\n  Completions,\n} from './resources/completions';\nimport {\n  CreateEmbeddingResponse,\n  Embedding,\n  EmbeddingCreateParams,\n  EmbeddingModel,\n  Embeddings,\n} from './resources/embeddings';\nimport {\n  FileContent,\n  FileCreateParams,\n  FileDeleted,\n  FileListParams,\n  FileObject,\n  FileObjectsPage,\n  FilePurpose,\n  Files,\n} from './resources/files';\nimport {\n  Image,\n  ImageCreateVariationParams,\n  ImageEditCompletedEvent,\n  ImageEditParams,\n  ImageEditParamsNonStreaming,\n  ImageEditParamsStreaming,\n  ImageEditPartialImageEvent,\n  ImageEditStreamEvent,\n  ImageGenCompletedEvent,\n  ImageGenPartialImageEvent,\n  ImageGenStreamEvent,\n  ImageGenerateParams,\n  ImageGenerateParamsNonStreaming,\n  ImageGenerateParamsStreaming,\n  ImageModel,\n  Images,\n  ImagesResponse,\n} from './resources/images';\nimport { Model, ModelDeleted, Models, ModelsPage } from './resources/models';\nimport {\n  Moderation,\n  ModerationCreateParams,\n  ModerationCreateResponse,\n  ModerationImageURLInput,\n  ModerationModel,\n  ModerationMultiModalInput,\n  ModerationTextInput,\n  Moderations,\n} from './resources/moderations';\nimport {\n  ImageInputReferenceParam,\n  Video,\n  VideoCreateCharacterParams,\n  VideoCreateCharacterResponse,\n  VideoCreateError,\n  VideoCreateParams,\n  VideoDeleteResponse,\n  VideoDownloadContentParams,\n  VideoEditParams,\n  VideoExtendParams,\n  VideoGetCharacterResponse,\n  VideoListParams,\n  VideoModel,\n  VideoRemixParams,\n  VideoSeconds,\n  VideoSize,\n  Videos,\n  VideosPage,\n} from './resources/videos';\nimport { Admin } from './resources/admin/admin';\nimport { Audio, AudioModel, AudioResponseFormat } from './resources/audio/audio';\nimport { Beta } from './resources/beta/beta';\nimport { Chat } from './resources/chat/chat';\nimport {\n  ContainerCreateParams,\n  ContainerCreateResponse,\n  ContainerListParams,\n  ContainerListResponse,\n  ContainerListResponsesPage,\n  ContainerRetrieveResponse,\n  Containers,\n} from './resources/containers/containers';\nimport { Conversations } from './resources/conversations/conversations';\nimport {\n  EvalCreateParams,\n  EvalCreateResponse,\n  EvalCustomDataSourceConfig,\n  EvalDeleteResponse,\n  EvalListParams,\n  EvalListResponse,\n  EvalListResponsesPage,\n  EvalRetrieveResponse,\n  EvalStoredCompletionsDataSourceConfig,\n  EvalUpdateParams,\n  EvalUpdateResponse,\n  Evals,\n} from './resources/evals/evals';\nimport { FineTuning } from './resources/fine-tuning/fine-tuning';\nimport { Graders } from './resources/graders/graders';\nimport { Realtime } from './resources/realtime/realtime';\nimport { Responses } from './resources/responses/responses';\nimport {\n  DeletedSkill,\n  Skill,\n  SkillCreateParams,\n  SkillList,\n  SkillListParams,\n  SkillUpdateParams,\n  Skills,\n  SkillsPage,\n} from './resources/skills/skills';\nimport {\n  Upload,\n  UploadCompleteParams,\n  UploadCreateParams,\n  Uploads as UploadsAPIUploads,\n} from './resources/uploads/uploads';\nimport {\n  AutoFileChunkingStrategyParam,\n  FileChunkingStrategy,\n  FileChunkingStrategyParam,\n  OtherFileChunkingStrategyObject,\n  StaticFileChunkingStrategy,\n  StaticFileChunkingStrategyObject,\n  StaticFileChunkingStrategyObjectParam,\n  VectorStore,\n  VectorStoreCreateParams,\n  VectorStoreDeleted,\n  VectorStoreListParams,\n  VectorStoreSearchParams,\n  VectorStoreSearchResponse,\n  VectorStoreSearchResponsesPage,\n  VectorStoreUpdateParams,\n  VectorStores,\n  VectorStoresPage,\n} from './resources/vector-stores/vector-stores';\nimport { Webhooks } from './resources/webhooks/webhooks';\nimport {\n  ChatCompletion,\n  ChatCompletionAllowedToolChoice,\n  ChatCompletionAllowedTools,\n  ChatCompletionAssistantMessageParam,\n  ChatCompletionAudio,\n  ChatCompletionAudioParam,\n  ChatCompletionChunk,\n  ChatCompletionContentPart,\n  ChatCompletionContentPartImage,\n  ChatCompletionContentPartInputAudio,\n  ChatCompletionContentPartRefusal,\n  ChatCompletionContentPartText,\n  ChatCompletionCreateParams,\n  ChatCompletionCreateParamsNonStreaming,\n  ChatCompletionCreateParamsStreaming,\n  ChatCompletionCustomTool,\n  ChatCompletionDeleted,\n  ChatCompletionDeveloperMessageParam,\n  ChatCompletionFunctionCallOption,\n  ChatCompletionFunctionMessageParam,\n  ChatCompletionFunctionTool,\n  ChatCompletionListParams,\n  ChatCompletionMessage,\n  ChatCompletionMessageCustomToolCall,\n  ChatCompletionMessageFunctionToolCall,\n  ChatCompletionMessageParam,\n  ChatCompletionMessageToolCall,\n  ChatCompletionModality,\n  ChatCompletionNamedToolChoice,\n  ChatCompletionNamedToolChoiceCustom,\n  ChatCompletionPredictionContent,\n  ChatCompletionReasoningEffort,\n  ChatCompletionRole,\n  ChatCompletionStoreMessage,\n  ChatCompletionStreamOptions,\n  ChatCompletionSystemMessageParam,\n  ChatCompletionTokenLogprob,\n  ChatCompletionTool,\n  ChatCompletionToolChoiceOption,\n  ChatCompletionToolMessageParam,\n  ChatCompletionUpdateParams,\n  ChatCompletionUserMessageParam,\n  ChatCompletionsPage,\n} from './resources/chat/completions/completions';\nimport { type Fetch } from './internal/builtin-types';\nimport { isRunningInBrowser } from './internal/detect-platform';\nimport { HeadersLike, NullableHeaders, buildHeaders } from './internal/headers';\nimport { FinalRequestOptions, RequestOptions } from './internal/request-options';\nimport { readEnv } from './internal/utils/env';\nimport {\n  type LogLevel,\n  type Logger,\n  formatRequestDetails,\n  loggerFor,\n  parseLogLevel,\n} from './internal/utils/log';\nimport { isEmptyObj } from './internal/utils/values';\n\nconst WORKLOAD_IDENTITY_API_KEY_PLACEHOLDER = 'workload-identity-auth';\n\nexport type ApiKeySetter = () => Promise<string>;\n\nexport interface ClientOptions {\n  /**\n   * API key used for authentication.\n   *\n   * - Accepts either a static string or an async function that resolves to a string.\n   * - Defaults to process.env['OPENAI_API_KEY'].\n   * - When a function is provided, it is invoked before each request so you can rotate\n   *   or refresh credentials at runtime.\n   * - The function must return a non-empty string; otherwise an OpenAIError is thrown.\n   * - If the function throws, the error is wrapped in an OpenAIError with the original\n   *   error available as `cause`.\n   * - Mutually exclusive with `workloadIdentity`.\n   */\n  apiKey?: string | ApiKeySetter | null | undefined;\n\n  /**\n   * Defaults to process.env['OPENAI_ADMIN_KEY'].\n   */\n  adminAPIKey?: string | null | undefined;\n\n  /**\n   * Defaults to process.env['OPENAI_ORG_ID'].\n   */\n  organization?: string | null | undefined;\n\n  /**\n   * Defaults to process.env['OPENAI_PROJECT_ID'].\n   */\n  project?: string | null | undefined;\n\n  /**\n   * Defaults to process.env['OPENAI_WEBHOOK_SECRET'].\n   */\n  webhookSecret?: string | null | undefined;\n\n  /**\n   * Override the default base URL for the API, e.g., \"https://api.example.com/v2/\"\n   *\n   * Defaults to process.env['OPENAI_BASE_URL'].\n   */\n  baseURL?: string | null | undefined;\n\n  /**\n   * The maximum amount of time (in milliseconds) that the client should wait for a response\n   * from the server before timing out a single request.\n   *\n   * Note that request timeouts are retried by default, so in a worst-case scenario you may wait\n   * much longer than this timeout before the promise succeeds or fails.\n   *\n   * @unit milliseconds\n   */\n  timeout?: number | undefined;\n\n  /**\n   * Additional `RequestInit` options to be passed to `fetch` calls.\n   * Properties will be overridden by per-request `fetchOptions`.\n   */\n  fetchOptions?: MergedRequestInit | undefined;\n\n  /**\n   * Specify a custom `fetch` function implementation.\n   *\n   * If not provided, we expect that `fetch` is defined globally.\n   */\n  fetch?: Fetch | undefined;\n\n  /**\n   * The maximum number of times that the client will retry a request in case of a\n   * temporary failure, like a network error or a 5XX error from the server.\n   *\n   * @default 2\n   */\n  maxRetries?: number | undefined;\n\n  /**\n   * Default headers to include with every request to the API.\n   *\n   * These can be removed in individual requests by explicitly setting the\n   * header to `null` in request options.\n   */\n  defaultHeaders?: HeadersLike | undefined;\n\n  /**\n   * Default query parameters to include with every request to the API.\n   *\n   * These can be removed in individual requests by explicitly setting the\n   * param to `undefined` in request options.\n   */\n  defaultQuery?: Record<string, string | undefined> | undefined;\n\n  /**\n   * By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n   * Only set this option to `true` if you understand the risks and have appropriate mitigations in place.\n   */\n  dangerouslyAllowBrowser?: boolean | undefined;\n\n  /**\n   * Set the log level.\n   *\n   * Defaults to process.env['OPENAI_LOG'] or 'warn' if it isn't set.\n   */\n  logLevel?: LogLevel | undefined;\n\n  /**\n   * Set the logger.\n   *\n   * Defaults to globalThis.console.\n   */\n  logger?: Logger | undefined;\n\n  /**\n   * Workload identity configuration for OAuth2 token exchange authentication.\n   * Mutually exclusive with `apiKey`.\n   */\n  workloadIdentity?: WorkloadIdentity | undefined;\n}\n\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n  apiKey: string | null;\n  adminAPIKey: string | null;\n  organization: string | null;\n  project: string | null;\n  webhookSecret: string | null;\n\n  baseURL: string;\n  maxRetries: number;\n  timeout: number;\n  logger: Logger;\n  logLevel: LogLevel | undefined;\n  fetchOptions: MergedRequestInit | undefined;\n\n  private fetch: Fetch;\n  #encoder: Opts.RequestEncoder;\n  protected idempotencyHeader?: string;\n  protected _options: ClientOptions;\n  private _workloadIdentityAuth?: WorkloadIdentityAuth;\n\n  /**\n   * API Client for interfacing with the OpenAI API.\n   *\n   * @param {string | null | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? null]\n   * @param {string | null | undefined} [opts.adminAPIKey=process.env['OPENAI_ADMIN_KEY'] ?? null]\n   * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n   * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n   * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n   * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n   * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n   * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n   * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n   * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n   * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n   * @param {Record<string, string | undefined>} opts.defaultQuery - Default query parameters to include with every request to the API.\n   * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n   */\n  constructor({\n    baseURL = readEnv('OPENAI_BASE_URL'),\n    apiKey = readEnv('OPENAI_API_KEY') ?? null,\n    adminAPIKey = readEnv('OPENAI_ADMIN_KEY') ?? null,\n    organization = readEnv('OPENAI_ORG_ID') ?? null,\n    project = readEnv('OPENAI_PROJECT_ID') ?? null,\n    webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null,\n    workloadIdentity,\n    ...opts\n  }: ClientOptions = {}) {\n    const options: ClientOptions = {\n      apiKey,\n      adminAPIKey,\n      organization,\n      project,\n      webhookSecret,\n      workloadIdentity,\n      ...opts,\n      baseURL: baseURL || `https://api.openai.com/v1`,\n    };\n\n    if (apiKey && workloadIdentity) {\n      throw new Errors.OpenAIError('The `apiKey` and `workloadIdentity` options are mutually exclusive');\n    }\n\n    if (!apiKey && !adminAPIKey && !workloadIdentity) {\n      throw new Errors.OpenAIError(\n        'Missing credentials. Please pass an `apiKey`, `workloadIdentity`, `adminAPIKey`, or set the `OPENAI_API_KEY` or `OPENAI_ADMIN_KEY` environment variable.',\n      );\n    }\n\n    if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n      throw new Errors.OpenAIError(\n        \"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\",\n      );\n    }\n\n    this.baseURL = options.baseURL!;\n    this.timeout = options.timeout ?? OpenAI.DEFAULT_TIMEOUT /* 10 minutes */;\n    this.logger = options.logger ?? console;\n    const defaultLogLevel = 'warn';\n    // Set default logLevel early so that we can log a warning in parseLogLevel.\n    this.logLevel = defaultLogLevel;\n    this.logLevel =\n      parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n      parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n      defaultLogLevel;\n    this.fetchOptions = options.fetchOptions;\n    this.maxRetries = options.maxRetries ?? 2;\n    this.fetch = options.fetch ?? Shims.getDefaultFetch();\n    this.#encoder = Opts.FallbackEncoder;\n\n    const customHeadersEnv = readEnv('OPENAI_CUSTOM_HEADERS');\n    if (customHeadersEnv) {\n      const parsed: Record<string, string> = {};\n      for (const line of customHeadersEnv.split('\\n')) {\n        const colon = line.indexOf(':');\n        if (colon >= 0) {\n          parsed[line.substring(0, colon).trim()] = line.substring(colon + 1).trim();\n        }\n      }\n      options.defaultHeaders = buildHeaders([parsed, options.defaultHeaders]);\n    }\n\n    this._options = options;\n\n    if (workloadIdentity) {\n      this._workloadIdentityAuth = new WorkloadIdentityAuth(workloadIdentity, this.fetch);\n    }\n\n    this.apiKey = typeof apiKey === 'string' ? apiKey : null;\n    this.adminAPIKey = adminAPIKey;\n    this.organization = organization;\n    this.project = project;\n    this.webhookSecret = webhookSecret;\n  }\n\n  /**\n   * Create a new client instance re-using the same options given to the current client with optional overriding.\n   */\n  withOptions(options: Partial<ClientOptions>): this {\n    const client = new (this.constructor as any as new (props: ClientOptions) => typeof this)({\n      ...this._options,\n      baseURL: this.baseURL,\n      maxRetries: this.maxRetries,\n      timeout: this.timeout,\n      logger: this.logger,\n      logLevel: this.logLevel,\n      fetch: this.fetch,\n      fetchOptions: this.fetchOptions,\n      apiKey: this._options.apiKey,\n      adminAPIKey: this.adminAPIKey,\n      workloadIdentity: this._options.workloadIdentity,\n      organization: this.organization,\n      project: this.project,\n      webhookSecret: this.webhookSecret,\n      ...options,\n    });\n    return client;\n  }\n\n  /**\n   * Check whether the base URL is set to its default.\n   */\n  #baseURLOverridden(): boolean {\n    return this.baseURL !== 'https://api.openai.com/v1';\n  }\n\n  protected defaultQuery(): Record<string, string | undefined> | undefined {\n    return this._options.defaultQuery;\n  }\n\n  protected validateHeaders(\n    { values, nulls }: NullableHeaders,\n    schemes: { bearerAuth?: boolean; adminAPIKeyAuth?: boolean } = {\n      bearerAuth: true,\n      adminAPIKeyAuth: true,\n    },\n  ) {\n    if (values.get('authorization') || values.get('api-key')) {\n      return;\n    }\n    if (nulls.has('authorization') || nulls.has('api-key')) {\n      return;\n    }\n\n    if (this._workloadIdentityAuth && schemes.bearerAuth) {\n      return;\n    }\n\n    throw new Error(\n      'Could not resolve authentication method. Expected either apiKey or adminAPIKey to be set. Or for one of the \"Authorization\" or \"api-key\" headers to be explicitly omitted',\n    );\n  }\n\n  protected async authHeaders(\n    opts: FinalRequestOptions,\n    schemes: { bearerAuth?: boolean; adminAPIKeyAuth?: boolean } = {\n      bearerAuth: true,\n      adminAPIKeyAuth: true,\n    },\n  ): Promise<NullableHeaders | undefined> {\n    return buildHeaders([\n      schemes.bearerAuth ? await this.bearerAuth(opts) : null,\n      schemes.adminAPIKeyAuth ? await this.adminAPIKeyAuth(opts) : null,\n    ]);\n  }\n\n  protected async bearerAuth(opts: FinalRequestOptions): Promise<NullableHeaders | undefined> {\n    if (this._workloadIdentityAuth) {\n      return buildHeaders([{ Authorization: `Bearer ${await this._workloadIdentityAuth.getToken()}` }]);\n    }\n    if (this.apiKey == null) {\n      return undefined;\n    }\n    return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n  }\n\n  protected async adminAPIKeyAuth(opts: FinalRequestOptions): Promise<NullableHeaders | undefined> {\n    if (this.adminAPIKey == null) {\n      return undefined;\n    }\n    return buildHeaders([{ Authorization: `Bearer ${this.adminAPIKey}` }]);\n  }\n\n  protected stringifyQuery(query: object | Record<string, unknown>): string {\n    return stringifyQuery(query);\n  }\n\n  private getUserAgent(): string {\n    return `${this.constructor.name}/JS ${VERSION}`;\n  }\n\n  protected defaultIdempotencyKey(): string {\n    return `stainless-node-retry-${uuid4()}`;\n  }\n\n  protected makeStatusError(\n    status: number,\n    error: Object,\n    message: string | undefined,\n    headers: Headers,\n  ): Errors.APIError {\n    return Errors.APIError.generate(status, error, message, headers);\n  }\n\n  async _callApiKey(): Promise<boolean> {\n    const apiKey = this._options.apiKey;\n    if (typeof apiKey !== 'function') return false;\n\n    let token: unknown;\n    try {\n      token = await apiKey();\n    } catch (err: any) {\n      if (err instanceof Errors.OpenAIError) throw err;\n      throw new Errors.OpenAIError(\n        `Failed to get token from 'apiKey' function: ${err.message}`,\n        // @ts-ignore\n        { cause: err },\n      );\n    }\n\n    if (typeof token !== 'string' || !token) {\n      throw new Errors.OpenAIError(\n        `Expected 'apiKey' function argument to return a string but it returned ${token}`,\n      );\n    }\n    this.apiKey = token;\n    return true;\n  }\n\n  buildURL(\n    path: string,\n    query: Record<string, unknown> | null | undefined,\n    defaultBaseURL?: string | undefined,\n  ): string {\n    const baseURL = (!this.#baseURLOverridden() && defaultBaseURL) || this.baseURL;\n    const url =\n      isAbsoluteURL(path) ?\n        new URL(path)\n      : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n\n    const defaultQuery = this.defaultQuery();\n    const pathQuery = Object.fromEntries(url.searchParams);\n    if (!isEmptyObj(defaultQuery) || !isEmptyObj(pathQuery)) {\n      query = { ...pathQuery, ...defaultQuery, ...query };\n    }\n\n    if (typeof query === 'object' && query && !Array.isArray(query)) {\n      url.search = this.stringifyQuery(query);\n    }\n\n    return url.toString();\n  }\n\n  /**\n   * Used as a callback for mutating the given `FinalRequestOptions` object.\n   */\n  protected async prepareOptions(options: FinalRequestOptions): Promise<void> {\n    const security = options.__security ?? { bearerAuth: true };\n    if (security.bearerAuth) {\n      await this._callApiKey();\n    }\n  }\n\n  /**\n   * Used as a callback for mutating the given `RequestInit` object.\n   *\n   * This is useful for cases where you want to add certain headers based off of\n   * the request properties, e.g. `method` or `url`.\n   */\n  protected async prepareRequest(\n    request: RequestInit,\n    { url, options }: { url: string; options: FinalRequestOptions },\n  ): Promise<void> {}\n\n  get<Rsp>(path: string, opts?: PromiseOrValue<RequestOptions>): APIPromise<Rsp> {\n    return this.methodRequest('get', path, opts);\n  }\n\n  post<Rsp>(path: string, opts?: PromiseOrValue<RequestOptions>): APIPromise<Rsp> {\n    return this.methodRequest('post', path, opts);\n  }\n\n  patch<Rsp>(path: string, opts?: PromiseOrValue<RequestOptions>): APIPromise<Rsp> {\n    return this.methodRequest('patch', path, opts);\n  }\n\n  put<Rsp>(path: string, opts?: PromiseOrValue<RequestOptions>): APIPromise<Rsp> {\n    return this.methodRequest('put', path, opts);\n  }\n\n  delete<Rsp>(path: string, opts?: PromiseOrValue<RequestOptions>): APIPromise<Rsp> {\n    return this.methodRequest('delete', path, opts);\n  }\n\n  private methodRequest<Rsp>(\n    method: HTTPMethod,\n    path: string,\n    opts?: PromiseOrValue<RequestOptions>,\n  ): APIPromise<Rsp> {\n    return this.request(\n      Promise.resolve(opts).then((opts) => {\n        return { method, path, ...opts };\n      }),\n    );\n  }\n\n  request<Rsp>(\n    options: PromiseOrValue<FinalRequestOptions>,\n    remainingRetries: number | null = null,\n  ): APIPromise<Rsp> {\n    return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n  }\n\n  private async makeRequest(\n    optionsInput: PromiseOrValue<FinalRequestOptions>,\n    retriesRemaining: number | null,\n    retryOfRequestLogID: string | undefined,\n  ): Promise<APIResponseProps> {\n    const options = await optionsInput;\n    const maxRetries = options.maxRetries ?? this.maxRetries;\n    if (retriesRemaining == null) {\n      retriesRemaining = maxRetries;\n    }\n\n    await this.prepareOptions(options);\n\n    const { req, url, timeout } = await this.buildRequest(options, {\n      retryCount: maxRetries - retriesRemaining,\n    });\n\n    await this.prepareRequest(req, { url, options });\n\n    /** Not an API request ID, just for correlating local log entries. */\n    const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n    const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n    const startTime = Date.now();\n\n    loggerFor(this).debug(\n      `[${requestLogID}] sending request`,\n      formatRequestDetails({\n        retryOfRequestLogID,\n        method: options.method,\n        url,\n        options,\n        headers: req.headers,\n      }),\n    );\n\n    if (options.signal?.aborted) {\n      throw new Errors.APIUserAbortError();\n    }\n\n    const security = options.__security ?? { bearerAuth: true };\n    const controller = new AbortController();\n    const response = await this.fetchWithAuth(url, req, timeout, controller, security).catch(castToError);\n    const headersTime = Date.now();\n\n    if (response instanceof globalThis.Error) {\n      const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n      if (options.signal?.aborted) {\n        throw new Errors.APIUserAbortError();\n      }\n      // detect native connection timeout errors\n      // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n      // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n      // others do not provide enough information to distinguish timeouts from other connection errors\n      const isTimeout =\n        isAbortError(response) ||\n        /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n      if (retriesRemaining) {\n        loggerFor(this).info(\n          `[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`,\n        );\n        loggerFor(this).debug(\n          `[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`,\n          formatRequestDetails({\n            retryOfRequestLogID,\n            url,\n            durationMs: headersTime - startTime,\n            message: response.message,\n          }),\n        );\n        return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n      }\n      loggerFor(this).info(\n        `[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`,\n      );\n      loggerFor(this).debug(\n        `[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`,\n        formatRequestDetails({\n          retryOfRequestLogID,\n          url,\n          durationMs: headersTime - startTime,\n          message: response.message,\n        }),\n      );\n      if (response instanceof OAuthError || response instanceof SubjectTokenProviderError) {\n        throw response;\n      }\n      if (isTimeout) {\n        throw new Errors.APIConnectionTimeoutError();\n      }\n      throw new Errors.APIConnectionError({ cause: response });\n    }\n\n    const specialHeaders = [...response.headers.entries()]\n      .filter(([name]) => name === 'x-request-id')\n      .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n      .join('');\n    const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${\n      response.ok ? 'succeeded' : 'failed'\n    } with status ${response.status} in ${headersTime - startTime}ms`;\n\n    if (!response.ok) {\n      if (\n        response.status === 401 &&\n        this._workloadIdentityAuth &&\n        security.bearerAuth &&\n        !options.__metadata?.['hasStreamingBody'] &&\n        !options.__metadata?.['workloadIdentityTokenRefreshed']\n      ) {\n        await Shims.CancelReadableStream(response.body);\n        this._workloadIdentityAuth.invalidateToken();\n\n        return this.makeRequest(\n          {\n            ...options,\n            __metadata: {\n              ...options.__metadata,\n              workloadIdentityTokenRefreshed: true,\n            },\n          },\n          retriesRemaining,\n          retryOfRequestLogID ?? requestLogID,\n        );\n      }\n\n      const shouldRetry = await this.shouldRetry(response);\n      if (retriesRemaining && shouldRetry) {\n        const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n\n        // We don't need the body of this response.\n        await Shims.CancelReadableStream(response.body);\n        loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n        loggerFor(this).debug(\n          `[${requestLogID}] response error (${retryMessage})`,\n          formatRequestDetails({\n            retryOfRequestLogID,\n            url: response.url,\n            status: response.status,\n            headers: response.headers,\n            durationMs: headersTime - startTime,\n          }),\n        );\n        return this.retryRequest(\n          options,\n          retriesRemaining,\n          retryOfRequestLogID ?? requestLogID,\n          response.headers,\n        );\n      }\n\n      const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n\n      loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n\n      const errText = await response.text().catch((err: any) => castToError(err).message);\n      const errJSON = safeJSON(errText) as any;\n      const errMessage = errJSON ? undefined : errText;\n\n      loggerFor(this).debug(\n        `[${requestLogID}] response error (${retryMessage})`,\n        formatRequestDetails({\n          retryOfRequestLogID,\n          url: response.url,\n          status: response.status,\n          headers: response.headers,\n          message: errMessage,\n          durationMs: Date.now() - startTime,\n        }),\n      );\n\n      const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n      throw err;\n    }\n\n    loggerFor(this).info(responseInfo);\n    loggerFor(this).debug(\n      `[${requestLogID}] response start`,\n      formatRequestDetails({\n        retryOfRequestLogID,\n        url: response.url,\n        status: response.status,\n        headers: response.headers,\n        durationMs: headersTime - startTime,\n      }),\n    );\n\n    return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n  }\n\n  getAPIList<Item, PageClass extends Pagination.AbstractPage<Item> = Pagination.AbstractPage<Item>>(\n    path: string,\n    Page: new (...args: any[]) => PageClass,\n    opts?: PromiseOrValue<RequestOptions>,\n  ): Pagination.PagePromise<PageClass, Item> {\n    return this.requestAPIList(\n      Page,\n      opts && 'then' in opts ?\n        opts.then((opts) => ({ method: 'get', path, ...opts }))\n      : { method: 'get', path, ...opts },\n    );\n  }\n\n  requestAPIList<\n    Item = unknown,\n    PageClass extends Pagination.AbstractPage<Item> = Pagination.AbstractPage<Item>,\n  >(\n    Page: new (...args: ConstructorParameters<typeof Pagination.AbstractPage>) => PageClass,\n    options: PromiseOrValue<FinalRequestOptions>,\n  ): Pagination.PagePromise<PageClass, Item> {\n    const request = this.makeRequest(options, null, undefined);\n    return new Pagination.PagePromise<PageClass, Item>(this as any as OpenAI, request, Page);\n  }\n\n  protected async fetchWithAuth(\n    url: RequestInfo,\n    init: RequestInit,\n    timeout: number,\n    controller: AbortController,\n    schemes: { bearerAuth?: boolean; adminAPIKeyAuth?: boolean } = {\n      bearerAuth: true,\n      adminAPIKeyAuth: true,\n    },\n  ): Promise<Response> {\n    if (this._workloadIdentityAuth && schemes.bearerAuth) {\n      const headers = init.headers as Headers;\n      const authHeader = headers.get('Authorization');\n      if (!authHeader || authHeader === `Bearer ${WORKLOAD_IDENTITY_API_KEY_PLACEHOLDER}`) {\n        const token = await this._workloadIdentityAuth.getToken();\n        headers.set('Authorization', `Bearer ${token}`);\n      }\n    }\n\n    const response = await this.fetchWithTimeout(url, init, timeout, controller);\n\n    return response;\n  }\n\n  async fetchWithTimeout(\n    url: RequestInfo,\n    init: RequestInit | undefined,\n    ms: number,\n    controller: AbortController,\n  ): Promise<Response> {\n    const { signal, method, ...options } = init || {};\n    const abort = this._makeAbort(controller);\n    if (signal) signal.addEventListener('abort', abort, { once: true });\n\n    const timeout = setTimeout(abort, ms);\n\n    const isReadableBody =\n      ((globalThis as any).ReadableStream && options.body instanceof (globalThis as any).ReadableStream) ||\n      (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n\n    const fetchOptions: RequestInit = {\n      signal: controller.signal as any,\n      ...(isReadableBody ? { duplex: 'half' } : {}),\n      method: 'GET',\n      ...options,\n    };\n    if (method) {\n      // Custom methods like 'patch' need to be uppercased\n      // See https://github.com/nodejs/undici/issues/2294\n      fetchOptions.method = method.toUpperCase();\n    }\n\n    try {\n      // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n      return await this.fetch.call(undefined, url, fetchOptions);\n    } finally {\n      clearTimeout(timeout);\n    }\n  }\n\n  private async shouldRetry(response: Response): Promise<boolean> {\n    // Note this is not a standard header.\n    const shouldRetryHeader = response.headers.get('x-should-retry');\n\n    // If the server explicitly says whether or not to retry, obey.\n    if (shouldRetryHeader === 'true') return true;\n    if (shouldRetryHeader === 'false') return false;\n\n    // Retry on request timeouts.\n    if (response.status === 408) return true;\n\n    // Retry on lock timeouts.\n    if (response.status === 409) return true;\n\n    // Retry on rate limits.\n    if (response.status === 429) return true;\n\n    // Retry internal errors.\n    if (response.status >= 500) return true;\n\n    return false;\n  }\n\n  private async retryRequest(\n    options: FinalRequestOptions,\n    retriesRemaining: number,\n    requestLogID: string,\n    responseHeaders?: Headers | undefined,\n  ): Promise<APIResponseProps> {\n    let timeoutMillis: number | undefined;\n\n    // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n    const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n    if (retryAfterMillisHeader) {\n      const timeoutMs = parseFloat(retryAfterMillisHeader);\n      if (!Number.isNaN(timeoutMs)) {\n        timeoutMillis = timeoutMs;\n      }\n    }\n\n    // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n    const retryAfterHeader = responseHeaders?.get('retry-after');\n    if (retryAfterHeader && !timeoutMillis) {\n      const timeoutSeconds = parseFloat(retryAfterHeader);\n      if (!Number.isNaN(timeoutSeconds)) {\n        timeoutMillis = timeoutSeconds * 1000;\n      } else {\n        timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n      }\n    }\n\n    // If the API asks us to wait a certain amount of time, just do what it\n    // says, but otherwise calculate a default\n    if (timeoutMillis === undefined) {\n      const maxRetries = options.maxRetries ?? this.maxRetries;\n      timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n    }\n    await sleep(timeoutMillis);\n\n    return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n  }\n\n  private calculateDefaultRetryTimeoutMillis(retriesRemaining: number, maxRetries: number): number {\n    const initialRetryDelay = 0.5;\n    const maxRetryDelay = 8.0;\n\n    const numRetries = maxRetries - retriesRemaining;\n\n    // Apply exponential backoff, but not more than the max.\n    const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n\n    // Apply some jitter, take up to at most 25 percent of the retry time.\n    const jitter = 1 - Math.random() * 0.25;\n\n    return sleepSeconds * jitter * 1000;\n  }\n\n  async buildRequest(\n    inputOptions: FinalRequestOptions,\n    { retryCount = 0 }: { retryCount?: number } = {},\n  ): Promise<{ req: FinalizedRequestInit; url: string; timeout: number }> {\n    const options = { ...inputOptions };\n    const { method, path, query, defaultBaseURL } = options;\n\n    const url = this.buildURL(path!, query as Record<string, unknown>, defaultBaseURL);\n    if ('timeout' in options) validatePositiveInteger('timeout', options.timeout);\n    options.timeout = options.timeout ?? this.timeout;\n    const { bodyHeaders, body, isStreamingBody } = this.buildBody({ options });\n\n    if (isStreamingBody) {\n      inputOptions.__metadata = {\n        ...inputOptions.__metadata,\n        hasStreamingBody: true,\n      };\n    }\n\n    const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n\n    const req: FinalizedRequestInit = {\n      method,\n      headers: reqHeaders,\n      ...(options.signal && { signal: options.signal }),\n      ...((globalThis as any).ReadableStream &&\n        body instanceof (globalThis as any).ReadableStream && { duplex: 'half' }),\n      ...(body && { body }),\n      ...((this.fetchOptions as any) ?? {}),\n      ...((options.fetchOptions as any) ?? {}),\n    };\n\n    return { req, url, timeout: options.timeout };\n  }\n\n  private async buildHeaders({\n    options,\n    method,\n    bodyHeaders,\n    retryCount,\n  }: {\n    options: FinalRequestOptions;\n    method: HTTPMethod;\n    bodyHeaders: HeadersLike;\n    retryCount: number;\n  }): Promise<Headers> {\n    let idempotencyHeaders: HeadersLike = {};\n    if (this.idempotencyHeader && method !== 'get') {\n      if (!options.idempotencyKey) options.idempotencyKey = this.defaultIdempotencyKey();\n      idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n    }\n\n    const headers = buildHeaders([\n      idempotencyHeaders,\n      {\n        Accept: 'application/json',\n        'User-Agent': this.getUserAgent(),\n        'X-Stainless-Retry-Count': String(retryCount),\n        ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n        ...getPlatformHeaders(),\n        'OpenAI-Organization': this.organization,\n        'OpenAI-Project': this.project,\n      },\n      await this.authHeaders(options, options.__security ?? { bearerAuth: true }),\n      this._options.defaultHeaders,\n      bodyHeaders,\n      options.headers,\n    ]);\n\n    this.validateHeaders(headers, options.__security ?? { bearerAuth: true });\n\n    return headers.values;\n  }\n\n  private _makeAbort(controller: AbortController) {\n    // note: we can't just inline this method inside `fetchWithTimeout()` because then the closure\n    //       would capture all request options, and cause a memory leak.\n    return () => controller.abort();\n  }\n\n  private buildBody({ options: { body, headers: rawHeaders } }: { options: FinalRequestOptions }): {\n    bodyHeaders: HeadersLike;\n    body: BodyInit | undefined;\n    isStreamingBody: boolean;\n  } {\n    if (!body) {\n      return { bodyHeaders: undefined, body: undefined, isStreamingBody: false };\n    }\n    const headers = buildHeaders([rawHeaders]);\n\n    const isReadableStream =\n      typeof (globalThis as any).ReadableStream !== 'undefined' &&\n      body instanceof (globalThis as any).ReadableStream;\n\n    const isRetryableBody =\n      !isReadableStream &&\n      (typeof body === 'string' ||\n        body instanceof ArrayBuffer ||\n        ArrayBuffer.isView(body) ||\n        (typeof (globalThis as any).Blob !== 'undefined' && body instanceof (globalThis as any).Blob) ||\n        body instanceof URLSearchParams ||\n        body instanceof FormData);\n\n    if (\n      // Pass raw type verbatim\n      ArrayBuffer.isView(body) ||\n      body instanceof ArrayBuffer ||\n      body instanceof DataView ||\n      (typeof body === 'string' &&\n        // Preserve legacy string encoding behavior for now\n        headers.values.has('content-type')) ||\n      // `Blob` is superset of `File`\n      ((globalThis as any).Blob && body instanceof (globalThis as any).Blob) ||\n      // `FormData` -> `multipart/form-data`\n      body instanceof FormData ||\n      // `URLSearchParams` -> `application/x-www-form-urlencoded`\n      body instanceof URLSearchParams ||\n      // Send chunked stream (each chunk has own `length`)\n      isReadableStream\n    ) {\n      return { bodyHeaders: undefined, body: body as BodyInit, isStreamingBody: !isRetryableBody };\n    } else if (\n      typeof body === 'object' &&\n      (Symbol.asyncIterator in body ||\n        (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))\n    ) {\n      return {\n        bodyHeaders: undefined,\n        body: Shims.ReadableStreamFrom(body as AsyncIterable<Uint8Array>),\n        isStreamingBody: true,\n      };\n    } else if (\n      typeof body === 'object' &&\n      headers.values.get('content-type') === 'application/x-www-form-urlencoded'\n    ) {\n      return {\n        bodyHeaders: { 'content-type': 'application/x-www-form-urlencoded' },\n        body: this.stringifyQuery(body),\n        isStreamingBody: false,\n      };\n    } else {\n      return { ...this.#encoder({ body, headers }), isStreamingBody: false };\n    }\n  }\n\n  static OpenAI = this;\n  static DEFAULT_TIMEOUT = 600000; // 10 minutes\n\n  static OpenAIError = Errors.OpenAIError;\n  static APIError = Errors.APIError;\n  static APIConnectionError = Errors.APIConnectionError;\n  static APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\n  static APIUserAbortError = Errors.APIUserAbortError;\n  static NotFoundError = Errors.NotFoundError;\n  static ConflictError = Errors.ConflictError;\n  static RateLimitError = Errors.RateLimitError;\n  static BadRequestError = Errors.BadRequestError;\n  static AuthenticationError = Errors.AuthenticationError;\n  static InternalServerError = Errors.InternalServerError;\n  static PermissionDeniedError = Errors.PermissionDeniedError;\n  static UnprocessableEntityError = Errors.UnprocessableEntityError;\n  static InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\n\n  static toFile = Uploads.toFile;\n\n  /**\n   * Given a prompt, the model will return one or more predicted completions, and can also return the probabilities of alternative tokens at each position.\n   */\n  completions: API.Completions = new API.Completions(this);\n  chat: API.Chat = new API.Chat(this);\n  /**\n   * Get a vector representation of a given input that can be easily consumed by machine learning models and algorithms.\n   */\n  embeddings: API.Embeddings = new API.Embeddings(this);\n  /**\n   * Files are used to upload documents that can be used with features like Assistants and Fine-tuning.\n   */\n  files: API.Files = new API.Files(this);\n  /**\n   * Given a prompt and/or an input image, the model will generate a new image.\n   */\n  images: API.Images = new API.Images(this);\n  audio: API.Audio = new API.Audio(this);\n  /**\n   * Given text and/or image inputs, classifies if those inputs are potentially harmful.\n   */\n  moderations: API.Moderations = new API.Moderations(this);\n  /**\n   * List and describe the various models available in the API.\n   */\n  models: API.Models = new API.Models(this);\n  fineTuning: API.FineTuning = new API.FineTuning(this);\n  graders: API.Graders = new API.Graders(this);\n  vectorStores: API.VectorStores = new API.VectorStores(this);\n  webhooks: API.Webhooks = new API.Webhooks(this);\n  beta: API.Beta = new API.Beta(this);\n  /**\n   * Create large batches of API requests to run asynchronously.\n   */\n  batches: API.Batches = new API.Batches(this);\n  /**\n   * Use Uploads to upload large files in multiple parts.\n   */\n  uploads: API.Uploads = new API.Uploads(this);\n  admin: API.Admin = new API.Admin(this);\n  responses: API.Responses = new API.Responses(this);\n  realtime: API.Realtime = new API.Realtime(this);\n  /**\n   * Manage conversations and conversation items.\n   */\n  conversations: API.Conversations = new API.Conversations(this);\n  /**\n   * Manage and run evals in the OpenAI platform.\n   */\n  evals: API.Evals = new API.Evals(this);\n  containers: API.Containers = new API.Containers(this);\n  skills: API.Skills = new API.Skills(this);\n  videos: API.Videos = new API.Videos(this);\n}\n\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Admin = Admin;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\nOpenAI.Skills = Skills;\nOpenAI.Videos = Videos;\n\nexport declare namespace OpenAI {\n  export type RequestOptions = Opts.RequestOptions;\n\n  export import Page = Pagination.Page;\n  export { type PageResponse as PageResponse };\n\n  export import CursorPage = Pagination.CursorPage;\n  export { type CursorPageParams as CursorPageParams, type CursorPageResponse as CursorPageResponse };\n\n  export import ConversationCursorPage = Pagination.ConversationCursorPage;\n  export {\n    type ConversationCursorPageParams as ConversationCursorPageParams,\n    type ConversationCursorPageResponse as ConversationCursorPageResponse,\n  };\n\n  export import NextCursorPage = Pagination.NextCursorPage;\n  export {\n    type NextCursorPageParams as NextCursorPageParams,\n    type NextCursorPageResponse as NextCursorPageResponse,\n  };\n\n  export {\n    Completions as Completions,\n    type Completion as Completion,\n    type CompletionChoice as CompletionChoice,\n    type CompletionUsage as CompletionUsage,\n    type CompletionCreateParams as CompletionCreateParams,\n    type CompletionCreateParamsNonStreaming as CompletionCreateParamsNonStreaming,\n    type CompletionCreateParamsStreaming as CompletionCreateParamsStreaming,\n  };\n\n  export {\n    Chat as Chat,\n    type ChatCompletion as ChatCompletion,\n    type ChatCompletionAllowedToolChoice as ChatCompletionAllowedToolChoice,\n    type ChatCompletionAssistantMessageParam as ChatCompletionAssistantMessageParam,\n    type ChatCompletionAudio as ChatCompletionAudio,\n    type ChatCompletionAudioParam as ChatCompletionAudioParam,\n    type ChatCompletionChunk as ChatCompletionChunk,\n    type ChatCompletionContentPart as ChatCompletionContentPart,\n    type ChatCompletionContentPartImage as ChatCompletionContentPartImage,\n    type ChatCompletionContentPartInputAudio as ChatCompletionContentPartInputAudio,\n    type ChatCompletionContentPartRefusal as ChatCompletionContentPartRefusal,\n    type ChatCompletionContentPartText as ChatCompletionContentPartText,\n    type ChatCompletionCustomTool as ChatCompletionCustomTool,\n    type ChatCompletionDeleted as ChatCompletionDeleted,\n    type ChatCompletionDeveloperMessageParam as ChatCompletionDeveloperMessageParam,\n    type ChatCompletionFunctionCallOption as ChatCompletionFunctionCallOption,\n    type ChatCompletionFunctionMessageParam as ChatCompletionFunctionMessageParam,\n    type ChatCompletionFunctionTool as ChatCompletionFunctionTool,\n    type ChatCompletionMessage as ChatCompletionMessage,\n    type ChatCompletionMessageCustomToolCall as ChatCompletionMessageCustomToolCall,\n    type ChatCompletionMessageFunctionToolCall as ChatCompletionMessageFunctionToolCall,\n    type ChatCompletionMessageParam as ChatCompletionMessageParam,\n    type ChatCompletionMessageToolCall as ChatCompletionMessageToolCall,\n    type ChatCompletionModality as ChatCompletionModality,\n    type ChatCompletionNamedToolChoice as ChatCompletionNamedToolChoice,\n    type ChatCompletionNamedToolChoiceCustom as ChatCompletionNamedToolChoiceCustom,\n    type ChatCompletionPredictionContent as ChatCompletionPredictionContent,\n    type ChatCompletionRole as ChatCompletionRole,\n    type ChatCompletionStoreMessage as ChatCompletionStoreMessage,\n    type ChatCompletionStreamOptions as ChatCompletionStreamOptions,\n    type ChatCompletionSystemMessageParam as ChatCompletionSystemMessageParam,\n    type ChatCompletionTokenLogprob as ChatCompletionTokenLogprob,\n    type ChatCompletionTool as ChatCompletionTool,\n    type ChatCompletionToolChoiceOption as ChatCompletionToolChoiceOption,\n    type ChatCompletionToolMessageParam as ChatCompletionToolMessageParam,\n    type ChatCompletionUserMessageParam as ChatCompletionUserMessageParam,\n    type ChatCompletionAllowedTools as ChatCompletionAllowedTools,\n    type ChatCompletionReasoningEffort as ChatCompletionReasoningEffort,\n    type ChatCompletionsPage as ChatCompletionsPage,\n    type ChatCompletionCreateParams as ChatCompletionCreateParams,\n    type ChatCompletionCreateParamsNonStreaming as ChatCompletionCreateParamsNonStreaming,\n    type ChatCompletionCreateParamsStreaming as ChatCompletionCreateParamsStreaming,\n    type ChatCompletionUpdateParams as ChatCompletionUpdateParams,\n    type ChatCompletionListParams as ChatCompletionListParams,\n  };\n\n  export {\n    Embeddings as Embeddings,\n    type CreateEmbeddingResponse as CreateEmbeddingResponse,\n    type Embedding as Embedding,\n    type EmbeddingModel as EmbeddingModel,\n    type EmbeddingCreateParams as EmbeddingCreateParams,\n  };\n\n  export {\n    Files as Files,\n    type FileContent as FileContent,\n    type FileDeleted as FileDeleted,\n    type FileObject as FileObject,\n    type FilePurpose as FilePurpose,\n    type FileObjectsPage as FileObjectsPage,\n    type FileCreateParams as FileCreateParams,\n    type FileListParams as FileListParams,\n  };\n\n  export {\n    Images as Images,\n    type Image as Image,\n    type ImageEditCompletedEvent as ImageEditCompletedEvent,\n    type ImageEditPartialImageEvent as ImageEditPartialImageEvent,\n    type ImageEditStreamEvent as ImageEditStreamEvent,\n    type ImageGenCompletedEvent as ImageGenCompletedEvent,\n    type ImageGenPartialImageEvent as ImageGenPartialImageEvent,\n    type ImageGenStreamEvent as ImageGenStreamEvent,\n    type ImageModel as ImageModel,\n    type ImagesResponse as ImagesResponse,\n    type ImageCreateVariationParams as ImageCreateVariationParams,\n    type ImageEditParams as ImageEditParams,\n    type ImageEditParamsNonStreaming as ImageEditParamsNonStreaming,\n    type ImageEditParamsStreaming as ImageEditParamsStreaming,\n    type ImageGenerateParams as ImageGenerateParams,\n    type ImageGenerateParamsNonStreaming as ImageGenerateParamsNonStreaming,\n    type ImageGenerateParamsStreaming as ImageGenerateParamsStreaming,\n  };\n\n  export { Audio as Audio, type AudioModel as AudioModel, type AudioResponseFormat as AudioResponseFormat };\n\n  export {\n    Moderations as Moderations,\n    type Moderation as Moderation,\n    type ModerationImageURLInput as ModerationImageURLInput,\n    type ModerationModel as ModerationModel,\n    type ModerationMultiModalInput as ModerationMultiModalInput,\n    type ModerationTextInput as ModerationTextInput,\n    type ModerationCreateResponse as ModerationCreateResponse,\n    type ModerationCreateParams as ModerationCreateParams,\n  };\n\n  export {\n    Models as Models,\n    type Model as Model,\n    type ModelDeleted as ModelDeleted,\n    type ModelsPage as ModelsPage,\n  };\n\n  export { FineTuning as FineTuning };\n\n  export { Graders as Graders };\n\n  export {\n    VectorStores as VectorStores,\n    type AutoFileChunkingStrategyParam as AutoFileChunkingStrategyParam,\n    type FileChunkingStrategy as FileChunkingStrategy,\n    type FileChunkingStrategyParam as FileChunkingStrategyParam,\n    type OtherFileChunkingStrategyObject as OtherFileChunkingStrategyObject,\n    type StaticFileChunkingStrategy as StaticFileChunkingStrategy,\n    type StaticFileChunkingStrategyObject as StaticFileChunkingStrategyObject,\n    type StaticFileChunkingStrategyObjectParam as StaticFileChunkingStrategyObjectParam,\n    type VectorStore as VectorStore,\n    type VectorStoreDeleted as VectorStoreDeleted,\n    type VectorStoreSearchResponse as VectorStoreSearchResponse,\n    type VectorStoresPage as VectorStoresPage,\n    type VectorStoreSearchResponsesPage as VectorStoreSearchResponsesPage,\n    type VectorStoreCreateParams as VectorStoreCreateParams,\n    type VectorStoreUpdateParams as VectorStoreUpdateParams,\n    type VectorStoreListParams as VectorStoreListParams,\n    type VectorStoreSearchParams as VectorStoreSearchParams,\n  };\n\n  export { Webhooks as Webhooks };\n\n  export { Beta as Beta };\n\n  export {\n    Batches as Batches,\n    type Batch as Batch,\n    type BatchError as BatchError,\n    type BatchRequestCounts as BatchRequestCounts,\n    type BatchUsage as BatchUsage,\n    type BatchesPage as BatchesPage,\n    type BatchCreateParams as BatchCreateParams,\n    type BatchListParams as BatchListParams,\n  };\n\n  export {\n    UploadsAPIUploads as Uploads,\n    type Upload as Upload,\n    type UploadCreateParams as UploadCreateParams,\n    type UploadCompleteParams as UploadCompleteParams,\n  };\n\n  export { Admin as Admin };\n\n  export { Responses as Responses };\n\n  export { Realtime as Realtime };\n\n  export { Conversations as Conversations };\n\n  export {\n    Evals as Evals,\n    type EvalCustomDataSourceConfig as EvalCustomDataSourceConfig,\n    type EvalStoredCompletionsDataSourceConfig as EvalStoredCompletionsDataSourceConfig,\n    type EvalCreateResponse as EvalCreateResponse,\n    type EvalRetrieveResponse as EvalRetrieveResponse,\n    type EvalUpdateResponse as EvalUpdateResponse,\n    type EvalListResponse as EvalListResponse,\n    type EvalDeleteResponse as EvalDeleteResponse,\n    type EvalListResponsesPage as EvalListResponsesPage,\n    type EvalCreateParams as EvalCreateParams,\n    type EvalUpdateParams as EvalUpdateParams,\n    type EvalListParams as EvalListParams,\n  };\n\n  export {\n    Containers as Containers,\n    type ContainerCreateResponse as ContainerCreateResponse,\n    type ContainerRetrieveResponse as ContainerRetrieveResponse,\n    type ContainerListResponse as ContainerListResponse,\n    type ContainerListResponsesPage as ContainerListResponsesPage,\n    type ContainerCreateParams as ContainerCreateParams,\n    type ContainerListParams as ContainerListParams,\n  };\n\n  export {\n    Skills as Skills,\n    type DeletedSkill as DeletedSkill,\n    type Skill as Skill,\n    type SkillList as SkillList,\n    type SkillsPage as SkillsPage,\n    type SkillCreateParams as SkillCreateParams,\n    type SkillUpdateParams as SkillUpdateParams,\n    type SkillListParams as SkillListParams,\n  };\n\n  export {\n    Videos as Videos,\n    type ImageInputReferenceParam as ImageInputReferenceParam,\n    type Video as Video,\n    type VideoCreateError as VideoCreateError,\n    type VideoModel as VideoModel,\n    type VideoSeconds as VideoSeconds,\n    type VideoSize as VideoSize,\n    type VideoDeleteResponse as VideoDeleteResponse,\n    type VideoCreateCharacterResponse as VideoCreateCharacterResponse,\n    type VideoGetCharacterResponse as VideoGetCharacterResponse,\n    type VideosPage as VideosPage,\n    type VideoCreateParams as VideoCreateParams,\n    type VideoListParams as VideoListParams,\n    type VideoCreateCharacterParams as VideoCreateCharacterParams,\n    type VideoDownloadContentParams as VideoDownloadContentParams,\n    type VideoEditParams as VideoEditParams,\n    type VideoExtendParams as VideoExtendParams,\n    type VideoRemixParams as VideoRemixParams,\n  };\n\n  export type AllModels = API.AllModels;\n  export type ChatModel = API.ChatModel;\n  export type ComparisonFilter = API.ComparisonFilter;\n  export type CompoundFilter = API.CompoundFilter;\n  export type CustomToolInputFormat = API.CustomToolInputFormat;\n  export type ErrorObject = API.ErrorObject;\n  export type FunctionDefinition = API.FunctionDefinition;\n  export type FunctionParameters = API.FunctionParameters;\n  export type Metadata = API.Metadata;\n  export type OAuthErrorCode = API.OAuthErrorCode;\n  export type Reasoning = API.Reasoning;\n  export type ReasoningEffort = API.ReasoningEffort;\n  export type ResponseFormatJSONObject = API.ResponseFormatJSONObject;\n  export type ResponseFormatJSONSchema = API.ResponseFormatJSONSchema;\n  export type ResponseFormatText = API.ResponseFormatText;\n  export type ResponseFormatTextGrammar = API.ResponseFormatTextGrammar;\n  export type ResponseFormatTextPython = API.ResponseFormatTextPython;\n  export type ResponsesModel = API.ResponsesModel;\n}\n", "import type { RequestInit } from './internal/builtin-types';\nimport type { NullableHeaders } from './internal/headers';\nimport { buildHeaders } from './internal/headers';\nimport * as Errors from './error';\nimport { FinalRequestOptions } from './internal/request-options';\nimport { isObj, readEnv } from './internal/utils';\nimport { OpenAI } from './client';\nimport type { ClientOptions } from './client';\n\n/** API Client for interfacing with the Azure OpenAI API. */\nexport interface AzureClientOptions extends ClientOptions {\n  /**\n   * Defaults to process.env['OPENAI_API_VERSION'].\n   */\n  apiVersion?: string | undefined;\n\n  /**\n   * Your Azure endpoint, including the resource, e.g. `https://example-resource.azure.openai.com/`\n   */\n  endpoint?: string | undefined;\n\n  /**\n   * A model deployment, if given, sets the base client URL to include `/deployments/{deployment}`.\n   * Note: this means you won't be able to use non-deployment endpoints. Not supported with Assistants APIs.\n   */\n  deployment?: string | undefined;\n\n  /**\n   * Defaults to process.env['AZURE_OPENAI_API_KEY'].\n   */\n  apiKey?: string | undefined;\n\n  /**\n   * A function that returns an access token for Microsoft Entra (formerly known as Azure Active Directory),\n   * which will be invoked on every request.\n   */\n  azureADTokenProvider?: (() => Promise<string>) | undefined;\n}\n\n/** API Client for interfacing with the Azure OpenAI API. */\nexport class AzureOpenAI extends OpenAI {\n  deploymentName: string | undefined;\n  apiVersion: string = '';\n\n  /**\n   * API Client for interfacing with the Azure OpenAI API.\n   *\n   * @param {string | undefined} [opts.apiVersion=process.env['OPENAI_API_VERSION'] ?? undefined]\n   * @param {string | undefined} [opts.endpoint=process.env['AZURE_OPENAI_ENDPOINT'] ?? undefined] - Your Azure endpoint, including the resource, e.g. `https://example-resource.azure.openai.com/`\n   * @param {string | undefined} [opts.apiKey=process.env['AZURE_OPENAI_API_KEY'] ?? undefined]\n   * @param {string | undefined} opts.deployment - A model deployment, if given, sets the base client URL to include `/deployments/{deployment}`.\n   * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n   * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL']] - Sets the base URL for the API, e.g. `https://example-resource.azure.openai.com/openai/`.\n   * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n   * @param {number} [opts.httpAgent] - An HTTP agent used to manage HTTP(s) connections.\n   * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n   * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n   * @param {Headers} opts.defaultHeaders - Default headers to include with every request to the API.\n   * @param {DefaultQuery} opts.defaultQuery - Default query parameters to include with every request to the API.\n   * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n   */\n  constructor({\n    baseURL = readEnv('OPENAI_BASE_URL'),\n    apiKey = readEnv('AZURE_OPENAI_API_KEY'),\n    apiVersion = readEnv('OPENAI_API_VERSION'),\n    endpoint,\n    deployment,\n    azureADTokenProvider,\n    dangerouslyAllowBrowser,\n    ...opts\n  }: AzureClientOptions = {}) {\n    if (!apiVersion) {\n      throw new Errors.OpenAIError(\n        \"The OPENAI_API_VERSION environment variable is missing or empty; either provide it, or instantiate the AzureOpenAI client with an apiVersion option, like new AzureOpenAI({ apiVersion: 'My API Version' }).\",\n      );\n    }\n\n    if (typeof azureADTokenProvider === 'function') {\n      dangerouslyAllowBrowser = true;\n    }\n\n    if (!azureADTokenProvider && !apiKey) {\n      throw new Errors.OpenAIError(\n        'Missing credentials. Please pass one of `apiKey` and `azureADTokenProvider`, or set the `AZURE_OPENAI_API_KEY` environment variable.',\n      );\n    }\n\n    if (azureADTokenProvider && apiKey) {\n      throw new Errors.OpenAIError(\n        'The `apiKey` and `azureADTokenProvider` arguments are mutually exclusive; only one can be passed at a time.',\n      );\n    }\n\n    opts.defaultQuery = { ...opts.defaultQuery, 'api-version': apiVersion };\n\n    if (!baseURL) {\n      if (!endpoint) {\n        endpoint = process.env['AZURE_OPENAI_ENDPOINT'];\n      }\n\n      if (!endpoint) {\n        throw new Errors.OpenAIError(\n          'Must provide one of the `baseURL` or `endpoint` arguments, or the `AZURE_OPENAI_ENDPOINT` environment variable',\n        );\n      }\n\n      baseURL = `${endpoint}/openai`;\n    } else {\n      if (endpoint) {\n        throw new Errors.OpenAIError('baseURL and endpoint are mutually exclusive');\n      }\n    }\n\n    super({\n      apiKey: azureADTokenProvider ?? apiKey,\n      baseURL,\n      ...opts,\n      ...(dangerouslyAllowBrowser !== undefined ? { dangerouslyAllowBrowser } : {}),\n    });\n\n    this.apiVersion = apiVersion;\n    this.deploymentName = deployment;\n  }\n\n  override async buildRequest(\n    options: FinalRequestOptions,\n    props: { retryCount?: number } = {},\n  ): Promise<{ req: RequestInit & { headers: Headers }; url: string; timeout: number }> {\n    if (_deployments_endpoints.has(options.path) && options.method === 'post' && options.body !== undefined) {\n      if (!isObj(options.body)) {\n        throw new Error('Expected request body to be an object');\n      }\n      const model = this.deploymentName || options.body['model'] || options.__metadata?.['model'];\n      if (model !== undefined && !this.baseURL.includes('/deployments')) {\n        options.path = `/deployments/${model}${options.path}`;\n      }\n    }\n    return super.buildRequest(options, props);\n  }\n\n  protected override async authHeaders(\n    opts: FinalRequestOptions,\n    schemes?: { bearerAuth?: boolean; adminAPIKeyAuth?: boolean },\n  ): Promise<NullableHeaders | undefined> {\n    const security = schemes ?? { bearerAuth: true, adminAPIKeyAuth: true };\n    if (security.bearerAuth && typeof this._options.apiKey === 'string') {\n      return buildHeaders([{ 'api-key': this.apiKey }]);\n    }\n    return super.authHeaders(opts, security);\n  }\n}\n\nconst _deployments_endpoints = new Set([\n  '/completions',\n  '/chat/completions',\n  '/embeddings',\n  '/audio/transcriptions',\n  '/audio/translations',\n  '/audio/speech',\n  '/images/generations',\n  '/batches',\n  '/images/edits',\n]);\n", "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n\nexport { OpenAI as default } from './client';\n\nexport { type Uploadable, toFile } from './core/uploads';\nexport { APIPromise } from './core/api-promise';\nexport { OpenAI, type ClientOptions } from './client';\nexport { PagePromise } from './core/pagination';\nexport {\n  OpenAIError,\n  APIError,\n  APIConnectionError,\n  APIConnectionTimeoutError,\n  APIUserAbortError,\n  NotFoundError,\n  ConflictError,\n  RateLimitError,\n  BadRequestError,\n  AuthenticationError,\n  InternalServerError,\n  PermissionDeniedError,\n  UnprocessableEntityError,\n  InvalidWebhookSignatureError,\n  OAuthError,\n  SubjectTokenProviderError,\n} from './core/error';\n\nexport { AzureOpenAI } from './azure';\n", "/**\n * Cost-aware OpenRouter model routing.\n * Cheapest capable tier first; escalate only on failure or explicit task class.\n */\n\nimport type OpenAI from \"openai\";\nimport { getOpenRouter, isOpenRouterReady } from \"./ai.js\";\n\nexport type OpenRouterTaskClass =\n  | \"extract\"\n  | \"classify\"\n  | \"format\"\n  | \"summarize\"\n  | \"validate\"\n  | \"analyze\"\n  | \"reason\"\n  | \"research\"\n  | \"debug\";\n\nexport type OpenRouterTier = \"nano\" | \"fast\" | \"reason\" | \"premium\";\n\nexport type OpenRouterTierModels = Record<OpenRouterTier, string>;\n\nconst DEFAULT_TIERS: OpenRouterTierModels = {\n  nano: \"google/gemini-2.0-flash-lite-001\",\n  fast: \"google/gemini-2.5-flash-lite\",\n  reason: \"anthropic/claude-sonnet-4\",\n  premium: \"anthropic/claude-opus-4.6\",\n};\n\nexport function loadOpenRouterTierModels(): OpenRouterTierModels {\n  return {\n    nano:\n      process.env.OPENROUTER_NANO_MODEL?.trim() ||\n      process.env.OPENROUTER_CLASSIFY_MODEL?.trim() ||\n      DEFAULT_TIERS.nano,\n    fast: process.env.OPENROUTER_CLASSIFY_MODEL?.trim() || DEFAULT_TIERS.fast,\n    reason: process.env.OPENROUTER_REASON_MODEL?.trim() || DEFAULT_TIERS.reason,\n    premium:\n      process.env.OPENROUTER_PREMIUM_MODEL?.trim() ||\n      process.env.OPENROUTER_ESCALATION_MODEL?.trim() ||\n      DEFAULT_TIERS.premium,\n  };\n}\n\n/** Map task complexity \u2192 starting tier (escalates on failure). */\nexport function tierForTask(task: OpenRouterTaskClass): OpenRouterTier {\n  switch (task) {\n    case \"extract\":\n    case \"classify\":\n    case \"format\":\n    case \"summarize\":\n      return \"nano\";\n    case \"validate\":\n    case \"analyze\":\n      return \"fast\";\n    case \"reason\":\n      return \"reason\";\n    case \"research\":\n    case \"debug\":\n      return \"premium\";\n    default:\n      return \"fast\";\n  }\n}\n\nexport function escalationChain(start: OpenRouterTier): OpenRouterTier[] {\n  const order: OpenRouterTier[] = [\"nano\", \"fast\", \"reason\", \"premium\"];\n  const idx = order.indexOf(start);\n  return order.slice(idx >= 0 ? idx : 0);\n}\n\nexport type OpenRouterChatOptions = {\n  task?: OpenRouterTaskClass;\n  /** Override starting tier (still escalates upward on failure). */\n  startTier?: OpenRouterTier;\n  /** Stop escalating at this tier (default: premium). */\n  maxTier?: OpenRouterTier;\n  messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[];\n  maxTokens?: number;\n  temperature?: number;\n  responseFormat?: OpenAI.Chat.Completions.ChatCompletionCreateParams[\"response_format\"];\n  /** When true, skip nano/fast and start at reason. */\n  forceEscalated?: boolean;\n};\n\nfunction tierIndex(tier: OpenRouterTier): number {\n  return [\"nano\", \"fast\", \"reason\", \"premium\"].indexOf(tier);\n}\n\n/** OpenRouter chat with automatic tier escalation on empty/invalid responses. */\nexport async function openRouterChat(options: OpenRouterChatOptions): Promise<{\n  text: string;\n  model: string;\n  tier: OpenRouterTier;\n  usage?: OpenAI.Completions.CompletionUsage;\n}> {\n  if (!isOpenRouterReady()) {\n    throw new Error(\"OPENROUTER_API_KEY is not set\");\n  }\n\n  const tiers = loadOpenRouterTierModels();\n  const start = options.forceEscalated\n    ? (\"reason\" as OpenRouterTier)\n    : (options.startTier ?? tierForTask(options.task ?? \"analyze\"));\n  const maxTier = options.maxTier ?? \"premium\";\n  const chain = escalationChain(start).filter((t) => tierIndex(t) <= tierIndex(maxTier));\n\n  const client = getOpenRouter();\n  let lastErr: unknown;\n\n  for (const tier of chain) {\n    const model = tiers[tier];\n    try {\n      const completion = await client.chat.completions.create({\n        model,\n        messages: options.messages,\n        max_tokens: options.maxTokens ?? 512,\n        temperature: options.temperature ?? 0.2,\n        response_format: options.responseFormat,\n      });\n      const text = completion.choices[0]?.message?.content?.trim() ?? \"\";\n      if (text) {\n        return { text, model, tier, usage: completion.usage ?? undefined };\n      }\n      lastErr = new Error(`Empty response from ${model}`);\n    } catch (err) {\n      lastErr = err;\n    }\n  }\n\n  throw lastErr instanceof Error ? lastErr : new Error(\"OpenRouter chat failed after escalation\");\n}\n", "/**\n * Unified AI gateway \u2014 routes text/JSON requests through OpenRouter (preferred)\n * or OpenAI direct. Keeps provider details swappable behind one interface.\n */\nimport type OpenAI from \"openai\";\nimport { getOpenRouter, isOpenRouterReady } from \"./ai.js\";\nimport { openRouterChat, type OpenRouterTaskClass } from \"./openRouterRouting.js\";\n\nlet _openai: OpenAI | null = null;\n\nfunction isOpenAiDirectReady(): boolean {\n  return Boolean(process.env.OPENAI_API_KEY?.trim());\n}\n\nasync function getOpenAiDirect(): Promise<OpenAI> {\n  if (_openai) return _openai;\n  const key = process.env.OPENAI_API_KEY?.trim();\n  if (!key) throw new Error(\"OPENAI_API_KEY is not set\");\n  const mod = await import(\"openai\");\n  _openai = new mod.default({ apiKey: key });\n  return _openai;\n}\n\nexport type AiGatewayOptions = {\n  systemInstruction: string;\n  userText: string;\n  task?: OpenRouterTaskClass;\n  maxTokens?: number;\n  temperature?: number;\n  json?: boolean;\n  endpoint?: string;\n  userId?: string;\n};\n\nexport type AiGatewayResult = {\n  text: string;\n  provider: \"openrouter\" | \"openai\";\n  model: string;\n};\n\n/** Route a text or JSON completion through OpenRouter \u2192 OpenAI direct. */\nexport async function aiGatewayComplete(options: AiGatewayOptions): Promise<AiGatewayResult> {\n  const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [\n    { role: \"system\", content: options.systemInstruction },\n    { role: \"user\", content: options.userText },\n  ];\n\n  if (isOpenRouterReady()) {\n    const { text, model } = await openRouterChat({\n      task: options.task ?? (options.json ? \"format\" : \"analyze\"),\n      messages,\n      maxTokens: options.maxTokens ?? (options.json ? 1024 : 512),\n      temperature: options.temperature ?? (options.json ? 0.2 : 0.5),\n      responseFormat: options.json ? { type: \"json_object\" } : undefined,\n    });\n    return { text, provider: \"openrouter\", model };\n  }\n\n  if (isOpenAiDirectReady()) {\n    const client = await getOpenAiDirect();\n    const model = process.env.OPENAI_MODEL?.trim() || \"gpt-4o-mini\";\n    const completion = await client.chat.completions.create({\n      model,\n      messages,\n      max_tokens: options.maxTokens ?? (options.json ? 1024 : 512),\n      temperature: options.temperature ?? (options.json ? 0.2 : 0.5),\n      response_format: options.json ? { type: \"json_object\" } : undefined,\n    });\n    const text = completion.choices[0]?.message?.content?.trim() ?? \"\";\n    return { text, provider: \"openai\", model };\n  }\n\n  throw new Error(\"No AI gateway configured \u2014 set OPENROUTER_API_KEY or OPENAI_API_KEY\");\n}\n\nexport function isAiGatewayReady(): boolean {\n  return isOpenRouterReady() || isOpenAiDirectReady();\n}\n", "import { randomUUID } from \"node:crypto\";\nimport { db } from \"@workspace/db\";\nimport { analyticsApiUsageTable } from \"@workspace/db/schema\";\n\n/** Rough USD cost estimates per 1M tokens (input / output). */\nconst COST_PER_MILLION: Record<string, { in: number; out: number }> = {\n  \"gemini-flash-latest\": { in: 0.075, out: 0.3 },\n  \"gemini-2.5-flash\": { in: 0.075, out: 0.3 },\n  \"gemini-2.0-flash\": { in: 0.1, out: 0.4 },\n  groq: { in: 0.05, out: 0.08 },\n  deepseek: { in: 0.14, out: 0.28 },\n  openai: { in: 0.15, out: 0.6 },\n};\n\nfunction estimateCostUsd(provider: string, model: string | undefined, tokensIn: number, tokensOut: number): number {\n  const key = model?.includes(\"gemini\") ? model : provider;\n  const rates = COST_PER_MILLION[key] ?? COST_PER_MILLION[provider] ?? { in: 0.1, out: 0.4 };\n  return (tokensIn / 1_000_000) * rates.in + (tokensOut / 1_000_000) * rates.out;\n}\n\nexport interface LogApiUsageInput {\n  provider: string;\n  model?: string;\n  endpoint: string;\n  tokensIn?: number;\n  tokensOut?: number;\n  latencyMs?: number;\n  userId?: string;\n  metadata?: Record<string, unknown>;\n}\n\nexport async function logApiUsage(input: LogApiUsageInput): Promise<void> {\n  const tokensIn = input.tokensIn ?? 0;\n  const tokensOut = input.tokensOut ?? 0;\n  const costUsd = estimateCostUsd(input.provider, input.model, tokensIn, tokensOut);\n\n  try {\n    await db.insert(analyticsApiUsageTable).values({\n      id: randomUUID(),\n      provider: input.provider,\n      model: input.model ?? null,\n      endpoint: input.endpoint,\n      tokensIn,\n      tokensOut,\n      latencyMs: input.latencyMs ?? null,\n      costUsd,\n      userId: input.userId ?? null,\n      metadata: input.metadata ?? null,\n    });\n  } catch (err) {\n    console.warn(\"[analytics] failed to log API usage:\", err);\n  }\n}\n", "// Phase 5 \u2014 AI providers. Vision/long-context \u2192 Gemini, fast chat \u2192 Groq,\n// cheap reasoning fallback \u2192 DeepSeek (via the OpenAI SDK at deepseek.com/v1).\n// Clients are lazy so a missing key for one provider doesn't break the others.\n\nimport { GoogleGenerativeAI } from \"@google/generative-ai\";\nimport Groq from \"groq-sdk\";\nimport OpenAI from \"openai\";\n\nlet _gemini: GoogleGenerativeAI | null = null;\nlet _groq: Groq | null = null;\nlet _deepseek: OpenAI | null = null;\nlet _openrouter: OpenAI | null = null;\n\nexport function getGemini(): GoogleGenerativeAI {\n  if (_gemini) return _gemini;\n  const key = process.env.GEMINI_API_KEY;\n  if (!key) throw new Error(\"GEMINI_API_KEY is not set\");\n  _gemini = new GoogleGenerativeAI(key);\n  return _gemini;\n}\n\nexport function getGroq(): Groq {\n  if (_groq) return _groq;\n  const key = process.env.GROQ_API_KEY;\n  if (!key) throw new Error(\"GROQ_API_KEY is not set\");\n  _groq = new Groq({ apiKey: key });\n  return _groq;\n}\n\nexport function getDeepSeek(): OpenAI {\n  if (_deepseek) return _deepseek;\n  const key = process.env.DEEPSEEK_API_KEY;\n  if (!key) throw new Error(\"DEEPSEEK_API_KEY is not set\");\n  _deepseek = new OpenAI({ apiKey: key, baseURL: \"https://api.deepseek.com/v1\" });\n  return _deepseek;\n}\n\n// OpenRouter \u2014 unified OpenAI-compatible gateway for Meta Llama, Gemini, Claude,\n// etc. Meta's Llama models are reached here WITHOUT any Meta/Facebook developer\n// account; OpenRouter brokers the request. See docs/OPENROUTER_VIDEO_DISCOVERY.md.\nexport const OPENROUTER_LLAMA_MODEL =\n  process.env.OPENROUTER_LLAMA_MODEL?.trim() || \"meta-llama/llama-3.3-70b-instruct\";\n\n/** Escalation target when cheaper tiers fail (debug / hard problems). */\nexport const OPENROUTER_PREMIUM_MODEL =\n  process.env.OPENROUTER_PREMIUM_MODEL?.trim() ||\n  process.env.OPENROUTER_ESCALATION_MODEL?.trim() ||\n  \"anthropic/claude-opus-4.6\";\n\nexport function isOpenRouterReady(): boolean {\n  return Boolean(process.env.OPENROUTER_API_KEY?.trim());\n}\n\nexport function getOpenRouter(): OpenAI {\n  if (_openrouter) return _openrouter;\n  const key = process.env.OPENROUTER_API_KEY?.trim();\n  if (!key) throw new Error(\"OPENROUTER_API_KEY is not set\");\n  _openrouter = new OpenAI({\n    apiKey: key,\n    baseURL: \"https://openrouter.ai/api/v1\",\n    // Optional attribution headers used by OpenRouter for app rankings.\n    defaultHeaders: {\n      \"HTTP-Referer\": process.env.SITE_ORIGIN?.trim() || \"https://hooknbone.com\",\n      \"X-Title\": \"Hook N Bone\",\n    },\n  });\n  return _openrouter;\n}\n\nexport const GEMINI_VISION_MODEL = \"gemini-flash-latest\";\nexport const GEMINI_TEXT_MODEL = \"gemini-2.5-flash\";\n\nexport async function geminiText(args: {\n  systemInstruction: string;\n  userText: string;\n  maxOutputTokens?: number;\n  temperature?: number;\n  endpoint?: string;\n  userId?: string;\n}): Promise<string> {\n  const { isAiGatewayReady, aiGatewayComplete } = await import(\"./aiGateway.js\");\n  if (isAiGatewayReady()) {\n    const { text } = await aiGatewayComplete({\n      systemInstruction: args.systemInstruction,\n      userText: args.userText,\n      maxTokens: args.maxOutputTokens,\n      temperature: args.temperature,\n      endpoint: args.endpoint,\n      userId: args.userId,\n      task: \"summarize\",\n    });\n    return text;\n  }\n\n  const started = Date.now();\n  const model = getGemini().getGenerativeModel({\n    model: GEMINI_TEXT_MODEL,\n    systemInstruction: args.systemInstruction,\n    generationConfig: {\n      maxOutputTokens: args.maxOutputTokens ?? 512,\n      temperature: args.temperature ?? 0.5,\n    },\n  });\n\n  const result = await model.generateContent([{ text: args.userText }]);\n  const usage = result.response.usageMetadata;\n  const { logApiUsage } = await import(\"./analyticsUsageLogger\");\n  void logApiUsage({\n    provider: \"gemini\",\n    model: GEMINI_TEXT_MODEL,\n    endpoint: args.endpoint ?? \"/gemini/text\",\n    tokensIn: usage?.promptTokenCount ?? 0,\n    tokensOut: usage?.candidatesTokenCount ?? 0,\n    latencyMs: Date.now() - started,\n    userId: args.userId,\n  });\n\n  return result.response.text().trim();\n}\n\nexport async function geminiTextJson(args: {\n  systemInstruction: string;\n  userText: string;\n  maxOutputTokens?: number;\n  endpoint?: string;\n  userId?: string;\n}): Promise<string> {\n  const { isAiGatewayReady, aiGatewayComplete } = await import(\"./aiGateway.js\");\n  if (isAiGatewayReady()) {\n    const { text } = await aiGatewayComplete({\n      systemInstruction: args.systemInstruction,\n      userText: args.userText,\n      maxTokens: args.maxOutputTokens,\n      endpoint: args.endpoint,\n      userId: args.userId,\n      json: true,\n      task: \"format\",\n    });\n    return text;\n  }\n\n  const started = Date.now();\n  const model = getGemini().getGenerativeModel({\n    model: GEMINI_TEXT_MODEL,\n    systemInstruction: args.systemInstruction,\n    generationConfig: {\n      responseMimeType: \"application/json\",\n      maxOutputTokens: args.maxOutputTokens ?? 1024,\n      temperature: 0.3,\n    },\n  });\n\n  const result = await model.generateContent([{ text: args.userText }]);\n  const usage = result.response.usageMetadata;\n  const { logApiUsage } = await import(\"./analyticsUsageLogger\");\n  void logApiUsage({\n    provider: \"gemini\",\n    model: GEMINI_TEXT_MODEL,\n    endpoint: args.endpoint ?? \"/gemini/text-json\",\n    tokensIn: usage?.promptTokenCount ?? 0,\n    tokensOut: usage?.candidatesTokenCount ?? 0,\n    latencyMs: Date.now() - started,\n    userId: args.userId,\n  });\n\n  return result.response.text();\n}\n\nexport async function geminiVisionText(args: {\n  systemInstruction: string;\n  userText: string;\n  imageBase64: string;\n  mimeType: string;\n  maxOutputTokens?: number;\n  endpoint?: string;\n  userId?: string;\n}): Promise<string> {\n  const started = Date.now();\n  const model = getGemini().getGenerativeModel({\n    model: GEMINI_VISION_MODEL,\n    systemInstruction: args.systemInstruction,\n    generationConfig: {\n      maxOutputTokens: args.maxOutputTokens ?? 512,\n      temperature: 0.3,\n    },\n  });\n\n  const result = await model.generateContent([\n    { text: args.userText },\n    { inlineData: { mimeType: args.mimeType, data: args.imageBase64 } },\n  ]);\n\n  const usage = result.response.usageMetadata;\n  const { logApiUsage } = await import(\"./analyticsUsageLogger\");\n  void logApiUsage({\n    provider: \"gemini\",\n    model: GEMINI_VISION_MODEL,\n    endpoint: args.endpoint ?? \"/gemini/vision-text\",\n    tokensIn: usage?.promptTokenCount ?? 0,\n    tokensOut: usage?.candidatesTokenCount ?? 0,\n    latencyMs: Date.now() - started,\n    userId: args.userId,\n  });\n\n  return result.response.text().trim();\n}\n\n// Run a JSON-only vision prompt and return the raw response text (caller parses).\nexport async function geminiVisionJson(args: {\n  systemInstruction: string;\n  userText: string;\n  imageBase64: string;\n  mimeType: string;\n  maxOutputTokens?: number;\n  endpoint?: string;\n  userId?: string;\n}): Promise<string> {\n  const started = Date.now();\n  const model = getGemini().getGenerativeModel({\n    model: GEMINI_VISION_MODEL,\n    systemInstruction: args.systemInstruction,\n    generationConfig: {\n      responseMimeType: \"application/json\",\n      maxOutputTokens: args.maxOutputTokens ?? 1024,\n    },\n  });\n\n  const result = await model.generateContent([\n    { text: args.userText },\n    { inlineData: { mimeType: args.mimeType, data: args.imageBase64 } },\n  ]);\n\n  const usage = result.response.usageMetadata;\n  const { logApiUsage } = await import(\"./analyticsUsageLogger\");\n  void logApiUsage({\n    provider: \"gemini\",\n    model: GEMINI_VISION_MODEL,\n    endpoint: args.endpoint ?? \"/gemini/vision\",\n    tokensIn: usage?.promptTokenCount ?? 0,\n    tokensOut: usage?.candidatesTokenCount ?? 0,\n    latencyMs: Date.now() - started,\n    userId: args.userId,\n  });\n\n  return result.response.text();\n}\n", "import type { UserVideo } from \"@workspace/db\";\n\nexport type NormalizedAttribution = {\n  platform: string | null;\n  creatorName: string;\n  creatorHandle: string;\n  creatorUrl: string | null;\n  sourceUrl: string | null;\n  originalUrl: string | null;\n  originalTitle: string;\n  license: string | null;\n  playbackMethod: string | null;\n  embeddable: boolean | null;\n  retrievedAt: string;\n  publishedAt: string | null;\n  ingestionSource: string | null;\n  rightsMetadata: Record<string, unknown>;\n};\n\nfunction platformWatchUrl(platform: string | null | undefined, sourceVideoId: string | null | undefined): string | null {\n  if (!platform || !sourceVideoId) return null;\n  if (platform === \"youtube\") return `https://www.youtube.com/watch?v=${sourceVideoId}`;\n  if (platform === \"tiktok\") return `https://www.tiktok.com/@_/video/${sourceVideoId}`;\n  if (platform === \"instagram\") return `https://www.instagram.com/reel/${sourceVideoId}/`;\n  return null;\n}\n\nfunction platformCreatorUrl(\n  platform: string | null | undefined,\n  handle: string | null | undefined,\n): string | null {\n  const h = handle?.replace(/^@+/, \"\").trim();\n  if (!platform || !h) return null;\n  if (platform === \"youtube\") return `https://www.youtube.com/@${h}`;\n  if (platform === \"tiktok\") return `https://www.tiktok.com/@${h}`;\n  if (platform === \"instagram\") return `https://www.instagram.com/${h}/`;\n  return null;\n}\n\n/** Build compliant attribution block \u2014 never strips ownership fields. */\nexport function buildVideoAttribution(row: UserVideo): NormalizedAttribution {\n  const rights = (row.rightsMetadata ?? {}) as Record<string, unknown>;\n  const platform = row.sourcePlatform ?? (rights.platform as string | undefined) ?? null;\n  const sourceUrl =\n    row.sourceUrl ??\n    platformWatchUrl(platform, row.sourceVideoId) ??\n    (row.embedUrl || row.videoUrl || null);\n  const creatorUrl =\n    row.creatorUrl ??\n    platformCreatorUrl(platform, row.creatorHandle) ??\n    (typeof rights.creatorUrl === \"string\" ? rights.creatorUrl : null);\n\n  return {\n    platform,\n    creatorName: row.creator,\n    creatorHandle: row.creatorHandle,\n    creatorUrl,\n    sourceUrl,\n    originalUrl: sourceUrl,\n    originalTitle: row.title,\n    license: typeof rights.license === \"string\" ? rights.license : null,\n    playbackMethod: typeof rights.playbackMethod === \"string\" ? rights.playbackMethod : null,\n    embeddable: typeof rights.embeddable === \"boolean\" ? rights.embeddable : null,\n    retrievedAt: (row.retrievedAt ?? row.createdAt ?? new Date()).toISOString(),\n    publishedAt: row.publishedAt?.toISOString() ?? null,\n    ingestionSource: row.ingestionSource ?? null,\n    rightsMetadata: rights,\n  };\n}\n\nexport function attributionFieldsFromCatalogCandidate(candidate: {\n  sourcePlatform: string;\n  sourceVideoId: string;\n  videoUrl: string;\n  creatorHandle: string;\n}) {\n  return {\n    sourceUrl: platformWatchUrl(candidate.sourcePlatform, candidate.sourceVideoId) ?? candidate.videoUrl,\n    creatorUrl: platformCreatorUrl(candidate.sourcePlatform, candidate.creatorHandle),\n  };\n}\n\nexport function attributionForFeed(attribution: NormalizedAttribution) {\n  return {\n    platform: attribution.platform,\n    creatorName: attribution.creatorName,\n    creatorHandle: attribution.creatorHandle,\n    creatorUrl: attribution.creatorUrl,\n    sourceUrl: attribution.sourceUrl,\n    license: attribution.license,\n    playbackMethod: attribution.playbackMethod,\n    publishedAt: attribution.publishedAt,\n  };\n}\n", "import crypto from \"crypto\";\nimport {\n  isOpenRouterReady,\n} from \"../ai\";\nimport { openRouterChat } from \"../openRouterRouting.js\";\nimport type { DetectedProductInput } from \"./types\";\n\nconst ANALYSIS_PROMPT = (title: string, description: string, tags: string[]) =>\n  `Analyze this outdoor hunting/fishing video for discovery and commerce intelligence.\nReturn ONLY valid JSON:\n{\n  \"topics\": string[],\n  \"activities\": string[],\n  \"locations\": string[],\n  \"outfitterHints\": string[],\n  \"commerceTags\": string[],\n  \"gearKeywords\": string[],\n  \"summary\": string\n}\n\nTitle: ${title}\nDescription: ${description || \"(none)\"}\nTags: ${tags.length ? tags.join(\", \") : \"(none)\"}`;\n\nexport type ContentAnalysisResult = {\n  topics: string[];\n  activities: string[];\n  locations: string[];\n  outfitterHints: string[];\n  commerceTags: string[];\n  gearKeywords: string[];\n  summary: string | null;\n};\n\nfunction parseJsonBlob(raw: string): ContentAnalysisResult | null {\n  try {\n    const cleaned = raw.replace(/^```json\\s*/i, \"\").replace(/```\\s*$/i, \"\").trim();\n    const parsed = JSON.parse(cleaned) as Partial<ContentAnalysisResult>;\n    return {\n      topics: Array.isArray(parsed.topics) ? parsed.topics.map(String).slice(0, 12) : [],\n      activities: Array.isArray(parsed.activities) ? parsed.activities.map(String).slice(0, 12) : [],\n      locations: Array.isArray(parsed.locations) ? parsed.locations.map(String).slice(0, 8) : [],\n      outfitterHints: Array.isArray(parsed.outfitterHints) ? parsed.outfitterHints.map(String).slice(0, 6) : [],\n      commerceTags: Array.isArray(parsed.commerceTags) ? parsed.commerceTags.map(String).slice(0, 12) : [],\n      gearKeywords: Array.isArray(parsed.gearKeywords) ? parsed.gearKeywords.map(String).slice(0, 8) : [],\n      summary: typeof parsed.summary === \"string\" ? parsed.summary : null,\n    };\n  } catch {\n    return null;\n  }\n}\n\nexport async function analyzeVideoContent(\n  title: string,\n  description: string | null | undefined,\n  tags: string[] = [],\n): Promise<ContentAnalysisResult> {\n  const prompt = ANALYSIS_PROMPT(title, description ?? \"\", tags);\n\n  if (isOpenRouterReady()) {\n    try {\n      const { text } = await openRouterChat({\n        task: \"analyze\",\n        messages: [{ role: \"user\", content: prompt }],\n        maxTokens: 512,\n        temperature: 0.2,\n      });\n      const parsed = text ? parseJsonBlob(text) : null;\n      if (parsed) return parsed;\n    } catch {\n      /* fall through */\n    }\n  }\n\n  return {\n    topics: [],\n    activities: [],\n    locations: [],\n    outfitterHints: [],\n    commerceTags: [],\n    gearKeywords: [],\n    summary: null,\n  };\n}\n\nexport function keywordsToDetectedProducts(keywords: string[]): DetectedProductInput[] {\n  return keywords.slice(0, 6).map((keyword) => ({\n    brand: \"\",\n    name: keyword,\n    category: \"Other\",\n    confidence: 55,\n    searchQuery: keyword,\n    evidence: { source: \"text_analysis\" },\n    detectionSource: \"text\" as const,\n  }));\n}\n\nexport function newDetectedProductId(): string {\n  return crypto.randomUUID();\n}\n", "import { geminiVisionJson } from \"../ai\";\nimport type { DetectedProductInput } from \"./types\";\n\nconst MAX_BYTES = 4_000_000;\n\nasync function fetchThumbnailBase64(url: string): Promise<{ base64: string; mimeType: string } | null> {\n  try {\n    const parsed = new URL(url);\n    if (parsed.protocol !== \"https:\") return null;\n    const res = await fetch(url, { signal: AbortSignal.timeout(12_000) });\n    if (!res.ok) return null;\n    const mimeType = (res.headers.get(\"content-type\") ?? \"image/jpeg\").split(\";\")[0]?.trim() || \"image/jpeg\";\n    if (!mimeType.startsWith(\"image/\")) return null;\n    const buf = Buffer.from(await res.arrayBuffer());\n    if (buf.byteLength > MAX_BYTES) return null;\n    return { base64: buf.toString(\"base64\"), mimeType };\n  } catch {\n    return null;\n  }\n}\n\nconst GEAR_VISION_PROMPT = `You are an expert hunting and fishing gear identification specialist. Analyze the image and identify every piece of gear, equipment, clothing, and accessories visible.\n\nReturn ONLY JSON:\n{\n  \"imageAnalyzed\": boolean,\n  \"summary\": string,\n  \"gear\": [\n    {\n      \"category\": string,\n      \"brand\": string,\n      \"name\": string,\n      \"model\": string | null,\n      \"confidence\": number,\n      \"description\": string,\n      \"searchQuery\": string\n    }\n  ]\n}\n\nOnly include items with confidence >= 30. Do not fabricate items.`;\n\ntype VisionGearItem = {\n  category?: string;\n  brand?: string;\n  name?: string;\n  model?: string | null;\n  confidence?: number;\n  description?: string;\n  searchQuery?: string;\n};\n\ntype VisionResponse = {\n  imageAnalyzed?: boolean;\n  summary?: string;\n  gear?: VisionGearItem[];\n};\n\nexport async function detectGearFromThumbnail(\n  thumbnailUrl: string | null | undefined,\n): Promise<{ summary: string | null; products: DetectedProductInput[] }> {\n  if (!thumbnailUrl?.trim() || !process.env.GEMINI_API_KEY) {\n    return { summary: null, products: [] };\n  }\n\n  try {\n    const image = await fetchThumbnailBase64(thumbnailUrl);\n    if (!image) return { summary: null, products: [] };\n\n    const rawText = await geminiVisionJson({\n      systemInstruction: GEAR_VISION_PROMPT,\n      userText: \"Identify all hunting and fishing gear visible. Return strict JSON only.\",\n      imageBase64: image.base64,\n      mimeType: image.mimeType,\n    });\n    const raw = JSON.parse(rawText) as VisionResponse;\n\n    if (!raw?.imageAnalyzed || !Array.isArray(raw.gear)) {\n      return { summary: raw?.summary ?? null, products: [] };\n    }\n\n    const products = raw.gear\n      .filter((g) => (g.confidence ?? 0) >= 30)\n      .map(\n        (g): DetectedProductInput => ({\n          brand: g.brand?.trim() || \"Unknown\",\n          name: g.name?.trim() || g.category?.trim() || \"Gear item\",\n          model: g.model ?? null,\n          category: g.category?.trim() || \"Other\",\n          confidence: Math.min(100, Math.max(0, Math.round(g.confidence ?? 0))),\n          searchQuery: g.searchQuery?.trim() || `${g.brand ?? \"\"} ${g.name ?? \"\"}`.trim(),\n          evidence: { description: g.description ?? \"\", source: \"vision\" },\n          detectionSource: \"vision\",\n        }),\n      )\n      .filter((p) => p.searchQuery.length > 2);\n\n    return { summary: raw.summary ?? null, products };\n  } catch {\n    return { summary: null, products: [] };\n  }\n}\n", "import crypto from \"crypto\";\nimport { db, gearCatalogTable, videoDetectedProductsTable, videoGearLinksTable } from \"@workspace/db\";\nimport { and, desc, eq, ilike, inArray, or, sql } from \"drizzle-orm\";\nimport type { DetectedProductInput } from \"./types\";\nimport { newDetectedProductId } from \"./contentAnalysis\";\n\nexport type CatalogMatch = {\n  gearId: string;\n  score: number;\n  keyword: string;\n};\n\nexport async function findCatalogMatches(\n  searchQuery: string,\n  limit = 1,\n): Promise<CatalogMatch[]> {\n  const keyword = searchQuery.trim();\n  if (keyword.length < 2) return [];\n\n  const pattern = `%${keyword}%`;\n  const rows = await db\n    .select({\n      id: gearCatalogTable.id,\n      name: gearCatalogTable.name,\n      subcategory: gearCatalogTable.subcategory,\n      brand: gearCatalogTable.brand,\n    })\n    .from(gearCatalogTable)\n    .where(\n      and(\n        eq(gearCatalogTable.status, \"published\"),\n        or(\n          ilike(gearCatalogTable.name, pattern),\n          ilike(gearCatalogTable.subcategory, pattern),\n          ilike(gearCatalogTable.description, pattern),\n          ilike(gearCatalogTable.brand, pattern),\n          sql`${gearCatalogTable.specs}::text ILIKE ${pattern}`,\n        )!,\n      ),\n    )\n    .orderBy(desc(gearCatalogTable.clickCount))\n    .limit(limit * 4);\n\n  return rows\n    .map((r) => {\n      const hay = `${r.name} ${r.subcategory} ${r.brand}`.toLowerCase();\n      const kw = keyword.toLowerCase();\n      let score = hay.includes(kw) ? 12 : 0;\n      for (const part of kw.split(/\\s+/)) {\n        if (part.length > 2 && hay.includes(part)) score += 2;\n      }\n      return { gearId: r.id, score, keyword };\n    })\n    .filter((m) => m.score > 0)\n    .sort((a, b) => b.score - a.score)\n    .slice(0, limit);\n}\n\nexport async function persistDetectedProducts(\n  videoId: number,\n  products: DetectedProductInput[],\n): Promise<{ detected: number; matched: number; linkedGearIds: string[] }> {\n  await db.delete(videoDetectedProductsTable).where(eq(videoDetectedProductsTable.videoId, videoId));\n\n  const linkedGearIds: string[] = [];\n  const seenGear = new Set<string>();\n  let matched = 0;\n\n  for (const product of products.slice(0, 12)) {\n    const matches = await findCatalogMatches(product.searchQuery || product.name, 1);\n    const catalogGearId = matches[0]?.gearId ?? null;\n    const status = catalogGearId ? \"matched\" : \"detected\";\n    if (catalogGearId) matched++;\n\n    await db.insert(videoDetectedProductsTable).values({\n      id: newDetectedProductId(),\n      videoId,\n      brand: product.brand,\n      name: product.name,\n      model: product.model ?? null,\n      category: product.category,\n      confidence: product.confidence,\n      searchQuery: product.searchQuery,\n      evidence: product.evidence ?? {},\n      detectionSource: product.detectionSource,\n      catalogGearId,\n      status,\n    });\n\n    if (catalogGearId && !seenGear.has(catalogGearId) && linkedGearIds.length < 8) {\n      seenGear.add(catalogGearId);\n      linkedGearIds.push(catalogGearId);\n    }\n  }\n\n  return { detected: Math.min(products.length, 12), matched, linkedGearIds };\n}\n\n/** Replace auto-generated gear links; preserve manual links. */\nexport async function syncVideoGearLinks(\n  videoId: number,\n  linkedGearIds: string[],\n  products: DetectedProductInput[],\n): Promise<number> {\n  await db\n    .delete(videoGearLinksTable)\n    .where(and(eq(videoGearLinksTable.videoId, videoId), eq(videoGearLinksTable.source, \"auto\")));\n\n  if (!linkedGearIds.length) return 0;\n\n  await db.insert(videoGearLinksTable).values(\n    linkedGearIds.map((gearId, index) => {\n      const product = products[index] ?? products[0];\n      return {\n        id: crypto.randomUUID(),\n        videoId,\n        gearId,\n        source: \"auto\" as const,\n        matchKeyword: product?.searchQuery ?? product?.name ?? \"\",\n        confidence: product?.confidence ?? 0,\n        detectionMethod: product?.detectionSource ?? \"text\",\n        evidence: product?.evidence ?? {},\n        position: index,\n      };\n    }),\n  );\n\n  return linkedGearIds.length;\n}\n\nexport async function loadVideoLoadout(videoIds: number[]) {\n  if (!videoIds.length) return new Map<number, Array<Record<string, unknown>>>();\n\n  const rows = await db\n    .select({\n      videoId: videoGearLinksTable.videoId,\n      gearId: gearCatalogTable.id,\n      name: gearCatalogTable.name,\n      brand: gearCatalogTable.brand,\n      category: gearCatalogTable.category,\n      subcategory: gearCatalogTable.subcategory,\n      price: gearCatalogTable.price,\n      thumbnailUrl: gearCatalogTable.thumbnailUrl,\n      affiliateUrl: gearCatalogTable.affiliateUrl,\n      confidence: videoGearLinksTable.confidence,\n      position: videoGearLinksTable.position,\n    })\n    .from(videoGearLinksTable)\n    .innerJoin(gearCatalogTable, eq(videoGearLinksTable.gearId, gearCatalogTable.id))\n    .where(inArray(videoGearLinksTable.videoId, videoIds))\n    .orderBy(videoGearLinksTable.position);\n\n  const map = new Map<number, Array<Record<string, unknown>>>();\n  for (const row of rows) {\n    const list = map.get(row.videoId) ?? [];\n    list.push({\n      id: row.gearId,\n      name: row.name,\n      brand: row.brand,\n      category: row.category,\n      subcategory: row.subcategory,\n      price: row.price,\n      imageUrl: row.thumbnailUrl,\n      affiliateLink: row.affiliateUrl,\n      confidence: row.confidence,\n    });\n    map.set(row.videoId, list);\n  }\n  return map;\n}\n", "export const POST_PROCESS_VERSION = 1;\n\nexport type PostProcessStatus = \"pending\" | \"processing\" | \"completed\" | \"failed\";\n\nexport type DetectedProductInput = {\n  brand: string;\n  name: string;\n  model?: string | null;\n  category: string;\n  confidence: number;\n  searchQuery: string;\n  evidence?: Record<string, unknown>;\n  detectionSource: \"text\" | \"vision\" | \"manual\";\n};\n\nexport type VideoPostProcessResult = {\n  videoId: number;\n  status: PostProcessStatus;\n  attribution: Record<string, unknown>;\n  detectedProducts: number;\n  catalogLinks: number;\n  topics: string[];\n  errors: string[];\n};\n\nexport type PostProcessWorkerOptions = {\n  limit?: number;\n  videoIds?: number[];\n  force?: boolean;\n};\n\nexport type PostProcessWorkerReport = {\n  processed: number;\n  completed: number;\n  failed: number;\n  skipped: number;\n  results: VideoPostProcessResult[];\n};\n", "/** Shared Instagram playback URL helpers (ingestion + feed). */\n\nexport function isInstagramCdnMp4(url: string | null | undefined): boolean {\n  if (!url?.trim()) return false;\n  return /cdninstagram\\.com/i.test(url) && /\\.mp4(\\?|#|$)/i.test(url);\n}\n\nexport function isInstagramEmbedUrl(url: string | null | undefined): boolean {\n  if (!url?.trim()) return false;\n  return /instagram\\.com\\/reel\\/[^/?#]+/i.test(url) && !isInstagramCdnMp4(url);\n}\n\n/** Prefer CDN MP4 for in-feed playback; fall back to stored video_url. */\nexport function resolveInstagramPlaybackUrl(\n  videoUrl: string,\n  rightsMetadata?: Record<string, unknown> | null,\n): string {\n  if (isInstagramCdnMp4(videoUrl)) return videoUrl;\n\n  const cdn = rightsMetadata?.cdnFallbackUrl;\n  if (typeof cdn === \"string\" && isInstagramCdnMp4(cdn)) return cdn;\n\n  return videoUrl;\n}\n", "'use strict';\n\nconst match = (array, value) =>\n\tarray.some(x => (x instanceof RegExp ? x.test(value) : x === value));\n\nconst dargs = (object, options) => {\n\tconst arguments_ = [];\n\tlet extraArguments = [];\n\tlet separatedArguments = [];\n\n\toptions = {\n\t\tuseEquals: true,\n\t\tshortFlag: true,\n\t\t...options\n\t};\n\n\tconst makeArguments = (key, value) => {\n\t\tconst prefix = options.shortFlag && key.length === 1 ? '-' : '--';\n\t\tconst theKey = (options.allowCamelCase ?\n\t\t\tkey :\n\t\t\tkey.replace(/[A-Z]/g, '-$&').toLowerCase());\n\n\t\tkey = prefix + theKey;\n\n\t\tif (options.useEquals) {\n\t\t\targuments_.push(key + (value ? `=${value}` : ''));\n\t\t} else {\n\t\t\targuments_.push(key);\n\n\t\t\tif (value) {\n\t\t\t\targuments_.push(value);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst makeAliasArg = (key, value) => {\n\t\targuments_.push(`-${key}`);\n\n\t\tif (value) {\n\t\t\targuments_.push(value);\n\t\t}\n\t};\n\n\tfor (let [key, value] of Object.entries(object)) {\n\t\tlet pushArguments = makeArguments;\n\n\t\tif (Array.isArray(options.excludes) && match(options.excludes, key)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (Array.isArray(options.includes) && !match(options.includes, key)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (typeof options.aliases === 'object' && options.aliases[key]) {\n\t\t\tkey = options.aliases[key];\n\t\t\tpushArguments = makeAliasArg;\n\t\t}\n\n\t\tif (key === '--') {\n\t\t\tif (!Array.isArray(value)) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`Expected key \\`--\\` to be Array, got ${typeof value}`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tseparatedArguments = value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === '_') {\n\t\t\tif (!Array.isArray(value)) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`Expected key \\`_\\` to be Array, got ${typeof value}`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\textraArguments = value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (value === true) {\n\t\t\tpushArguments(key, '');\n\t\t}\n\n\t\tif (value === false && !options.ignoreFalse) {\n\t\t\tpushArguments(`no-${key}`);\n\t\t}\n\n\t\tif (typeof value === 'string') {\n\t\t\tpushArguments(key, value);\n\t\t}\n\n\t\tif (typeof value === 'number' && !Number.isNaN(value)) {\n\t\t\tpushArguments(key, String(value));\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (const arrayValue of value) {\n\t\t\t\tpushArguments(key, arrayValue);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const argument of extraArguments) {\n\t\targuments_.push(String(argument));\n\t}\n\n\tif (separatedArguments.length > 0) {\n\t\targuments_.push('--');\n\t}\n\n\tfor (const argument of separatedArguments) {\n\t\targuments_.push(String(argument));\n\t}\n\n\treturn arguments_;\n};\n\nmodule.exports = dargs;\n", "'use strict'\n\nconst { spawn } = require('child_process')\nconst { EOL } = require('os')\n\nconst EE_PROPS = Object.getOwnPropertyNames(require('events').EventEmitter.prototype)\n  .filter(name => !name.startsWith('_'))\n  .concat(['kill', 'ref', 'unref'])\n\nconst eos = (stream, listener, buffer = []) =>\n  stream[listener] ? stream[listener].on('data', data => buffer.push(data)) && buffer : buffer\n\nconst createChildProcessError = ({ cmd, cmdArgs, childProcess }) => {\n  const command = `${cmd} ${cmdArgs.join(' ')}`\n  let message = `The command spawned as:${EOL}${EOL}`\n  message += `  \\`${command}\\`${EOL}${EOL}`\n  message += `exited with:${EOL}${EOL}`\n  message += `  \\`{ signal: '${childProcess.signalCode}', code: ${childProcess.exitCode} }\\` ${EOL}${EOL}`\n  message += `with the following trace:${EOL}`\n  const error = new Error(message)\n  error.command = command\n  error.name = 'ChildProcessError'\n\n  Object.keys(childProcess)\n    .filter(key => !key.startsWith('_') && !['stdio', 'stdin'].includes(key))\n    .forEach(key => {\n      error[key] = childProcess[key]\n    })\n\n  return error\n}\n\nconst clean = str => str.trim().replace(/\\n$/, '')\n\nconst parse =\n  (buffer, { json } = {}) =>\n    (encoding, start, end) => {\n      const data = clean(Buffer.concat(buffer).toString(encoding, start, end))\n      return json ? JSON.parse(data) : data\n    }\n\nconst extend = defaults => (input, args, options) => {\n  if (!(args instanceof Array)) {\n    options = args\n    args = []\n  }\n  const [cmd, ...cmdArgs] = input.split(' ').concat(args).filter(Boolean)\n  let childProcess\n\n  const promise = new Promise((resolve, reject) => {\n    const opts = { ...defaults, ...options }\n    childProcess = spawn(cmd, cmdArgs, opts)\n    const stdout = eos(childProcess, 'stdout')\n    const stderr = eos(childProcess, 'stderr')\n\n    childProcess.on('error', reject).on('exit', exitCode => {\n      Object.defineProperty(childProcess, 'stdout', {\n        get: parse(stdout, opts)\n      })\n      Object.defineProperty(childProcess, 'stderr', { get: parse(stderr) })\n      if (exitCode !== 0) {\n        const error = createChildProcessError({ cmd, cmdArgs, childProcess })\n        if (opts.reject !== false) return reject(error)\n        childProcess.error = error\n      }\n      return resolve(childProcess)\n    })\n  })\n\n  const subprocess = Object.assign(promise, childProcess)\n  if (childProcess) {\n    EE_PROPS.forEach(name => (subprocess[name] = childProcess[name].bind(childProcess)))\n  }\n  return subprocess\n}\n\nconst $ = extend()\n$.extend = extend\n$.json = $.extend({ json: true })\n\nmodule.exports = $\n", "'use strict'\n\nmodule.exports = (platform = '') => {\n  platform = platform.toLowerCase()\n  return (\n    [\n      'aix',\n      'android',\n      'darwin',\n      'freebsd',\n      'linux',\n      'openbsd',\n      'sunos'\n    ].indexOf(platform) !== -1\n  )\n}\n", "'use strict'\n\nconst isUnix = require('is-unix')\nconst path = require('path')\n\nconst PLATFORM_WIN = 'win32'\nconst PLATFORM_UNIX = 'unix'\n\nconst YOUTUBE_DL_HOST =\n  process.env.YOUTUBE_DL_HOST ??\n  'https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest'\n\nconst YOUTUBE_DL_DIR =\n  process.env.YOUTUBE_DL_DIR ?? path.join(__dirname, '..', 'bin')\n\nconst YOUTUBE_DL_PLATFORM =\n  process.env.YOUTUBE_DL_PLATFORM ?? isUnix(process.platform)\n    ? PLATFORM_UNIX\n    : PLATFORM_WIN\n\nconst YOUTUBE_DL_FILENAME = process.env.YOUTUBE_DL_FILENAME || 'yt-dlp'\n\nconst YOUTUBE_DL_FILE =\n  !YOUTUBE_DL_FILENAME.endsWith('.exe') && YOUTUBE_DL_PLATFORM === 'win32'\n    ? `${YOUTUBE_DL_FILENAME}.exe`\n    : YOUTUBE_DL_FILENAME\n\nconst YOUTUBE_DL_PATH = path.join(YOUTUBE_DL_DIR, YOUTUBE_DL_FILE)\n\nconst YOUTUBE_DL_SKIP_DOWNLOAD = process.env.YOUTUBE_DL_SKIP_DOWNLOAD\n\nconst GITHUB_TOKEN = process.env.GITHUB_TOKEN || process.env.GH_TOKEN\n\nmodule.exports = {\n  GITHUB_TOKEN,\n  YOUTUBE_DL_DIR,\n  YOUTUBE_DL_FILE,\n  YOUTUBE_DL_FILENAME,\n  YOUTUBE_DL_HOST,\n  YOUTUBE_DL_PATH,\n  YOUTUBE_DL_PLATFORM,\n  YOUTUBE_DL_SKIP_DOWNLOAD\n}\n", "'use strict'\n\nconst dargs = require('dargs')\nconst $ = require('tinyspawn')\n\nconst constants = require('./constants')\n\nconst args = (flags = {}) => dargs(flags, { useEquals: false }).filter(Boolean)\n\nconst isJSON = (str = '') => str.startsWith('{')\n\nconst parse = ({ stdout, stderr, ...details }) => {\n  if (details.exitCode === 0) {\n    return isJSON(stdout) ? JSON.parse(stdout) : stdout\n  }\n  throw Object.assign(new Error(stderr), { stderr, stdout }, details)\n}\n\nconst create = binaryPath => {\n  const needsQuoting = process.platform === 'win32' && /\\s/.test(binaryPath)\n  const safeBinaryPath = needsQuoting ? `\"${binaryPath}\"` : binaryPath\n  const fn = (...args) =>\n    fn\n      .exec(...args)\n      .then(parse)\n      .catch(parse)\n  fn.exec = (url, flags, opts = {}) => {\n    const fullArgs = [url].concat(args(flags))\n    if (needsQuoting) opts.shell = true\n    return $(safeBinaryPath, fullArgs, opts)\n  }\n  return fn\n}\n\nconst update = (binaryPath = constants.YOUTUBE_DL_PATH) => $(binaryPath, ['-U'])\n\nconst defaultInstance = create(constants.YOUTUBE_DL_PATH)\n\nmodule.exports = defaultInstance\nmodule.exports.youtubeDl = defaultInstance\nmodule.exports.create = create\nmodule.exports.update = update\nmodule.exports.args = args\nmodule.exports.isJSON = isJSON\nmodule.exports.constants = constants\n", "/**\n * Resolves social video page URLs to a direct MP4/stream URL via yt-dlp.\n * Requires `yt-dlp` on PATH (local dev / dedicated worker). Returns null when unavailable.\n */\n\nconst INGEST_HOSTS = new Set([\n  \"youtube.com\",\n  \"www.youtube.com\",\n  \"youtu.be\",\n  \"m.youtube.com\",\n  \"tiktok.com\",\n  \"www.tiktok.com\",\n  \"vm.tiktok.com\",\n  \"vt.tiktok.com\",\n  \"vimeo.com\",\n  \"www.vimeo.com\",\n  \"player.vimeo.com\",\n  \"rumble.com\",\n  \"www.rumble.com\",\n]);\n\nexport function isIngestSupportedUrl(url: string): boolean {\n  try {\n    const host = new URL(url).hostname.toLowerCase().replace(/^www\\./, \"\");\n    return [...INGEST_HOSTS].some((h) => host === h || host.endsWith(`.${h}`));\n  } catch {\n    return false;\n  }\n}\n\nexport type IngestResult = {\n  streamUrl: string;\n  sourcePlatform: string;\n  sourceVideoId: string;\n  contentType: string;\n};\n\nexport async function ingestFromUrl(pageUrl: string): Promise<IngestResult | null> {\n  if (!isIngestSupportedUrl(pageUrl)) return null;\n\n  try {\n    const youtubedl = (await import(\"youtube-dl-exec\")).default;\n    const raw = await youtubedl(pageUrl, {\n      dumpSingleJson: true,\n      noPlaylist: true,\n      format: \"best[ext=mp4]/best[height<=1080]/best\",\n      noWarnings: true,\n    });\n    const info = (typeof raw === \"string\" ? JSON.parse(raw) : raw) as {\n      url?: string;\n      ext?: string;\n      id?: string;\n      extractor_key?: string;\n      webpage_url?: string;\n      requested_downloads?: Array<{ url?: string; ext?: string }>;\n    };\n\n    const streamUrl =\n      info.url ??\n      info.requested_downloads?.find((d) => d.url)?.url ??\n      null;\n    if (!streamUrl) return null;\n\n    const platform = normalizePlatform(info.extractor_key ?? \"\");\n    const sourceVideoId = info.id ?? pageUrl;\n\n    return {\n      streamUrl,\n      sourcePlatform: platform,\n      sourceVideoId,\n      contentType: info.ext === \"mp4\" ? \"video/mp4\" : \"application/octet-stream\",\n    };\n  } catch {\n    return null;\n  }\n}\n\nfunction normalizePlatform(extractorKey: string): string {\n  const k = extractorKey.toLowerCase();\n  if (k.includes(\"youtube\")) return \"youtube\";\n  if (k.includes(\"tiktok\")) return \"tiktok\";\n  if (k.includes(\"vimeo\")) return \"vimeo\";\n  if (k.includes(\"rumble\")) return \"rumble\";\n  return \"unknown\";\n}\n", "/**\n * Shared RapidAPI HTTP client \u2014 retries, rate limits, auth from env.\n */\nexport class RapidApiError extends Error {\n  constructor(\n    message: string,\n    readonly statusCode: number = 502,\n    readonly retryAfterSec?: number,\n  ) {\n    super(message);\n    this.name = \"RapidApiError\";\n  }\n}\n\nexport type RapidApiRequestOptions = {\n  host: string;\n  path: string;\n  params?: Record<string, string | number | undefined | null>;\n  method?: \"GET\" | \"POST\";\n  body?: unknown;\n  maxRetries?: number;\n  timeoutMs?: number;\n};\n\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function rapidApiKey(): string {\n  const key = process.env.RAPIDAPI_KEY?.trim();\n  if (!key) {\n    throw new RapidApiError(\"RAPIDAPI_KEY is not configured.\", 503);\n  }\n  return key;\n}\n\nexport function isRapidApiConfigured(): boolean {\n  return Boolean(process.env.RAPIDAPI_KEY?.trim());\n}\n\nexport async function rapidApiRequest<T = Record<string, unknown>>(\n  options: RapidApiRequestOptions,\n): Promise<T> {\n  const {\n    host,\n    path,\n    params,\n    method = \"GET\",\n    body,\n    maxRetries = 2,\n    timeoutMs = 20_000,\n  } = options;\n\n  const search = new URLSearchParams();\n  for (const [key, value] of Object.entries(params ?? {})) {\n    if (value == null) continue;\n    const str = String(value).trim();\n    if (str) search.set(key, str);\n  }\n\n  const qs = search.toString();\n  const url = `https://${host}${path}${qs ? `?${qs}` : \"\"}`;\n\n  let attempt = 0;\n  while (true) {\n    const ctrl = new AbortController();\n    const timer = setTimeout(() => ctrl.abort(), timeoutMs);\n    try {\n      const res = await fetch(url, {\n        method,\n        signal: ctrl.signal,\n        headers: {\n          \"x-rapidapi-key\": rapidApiKey(),\n          \"x-rapidapi-host\": host,\n          \"Content-Type\": \"application/json\",\n          Accept: \"application/json\",\n        },\n        body: body != null ? JSON.stringify(body) : undefined,\n      });\n\n      if (res.status === 429 && attempt < maxRetries) {\n        const retryAfter = parseInt(res.headers.get(\"retry-after\") ?? \"8\", 10);\n        await sleep(Math.min(retryAfter, 30) * 1000);\n        attempt++;\n        continue;\n      }\n\n      const bodyText = await res.text();\n      if (!res.ok) {\n        if (res.status === 403 && /not subscribed/i.test(bodyText)) {\n          throw new RapidApiError(`RapidAPI not subscribed for ${host}`, 403);\n        }\n        throw new RapidApiError(\n          `RapidAPI ${host} ${path} failed (${res.status}): ${bodyText.slice(0, 200)}`,\n          res.status >= 500 ? 502 : res.status,\n        );\n      }\n\n      if (!bodyText.trim()) return {} as T;\n      return JSON.parse(bodyText) as T;\n    } catch (err) {\n      if (err instanceof RapidApiError) throw err;\n      if (attempt < maxRetries) {\n        attempt++;\n        await sleep(1500 * attempt);\n        continue;\n      }\n      const detail = err instanceof Error ? err.message : String(err);\n      throw new RapidApiError(`RapidAPI request failed: ${detail}`, 502);\n    } finally {\n      clearTimeout(timer);\n    }\n  }\n}\n", "import { ingestFromUrl } from \"../videoIngest.js\";\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n  return value && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : null;\n}\n\nfunction pickString(...values: unknown[]): string | null {\n  for (const value of values) {\n    if (typeof value === \"string\" && value.trim()) return value.trim();\n  }\n  return null;\n}\n\nfunction unescapeJsonUrl(value: string): string {\n  return value.replace(/\\\\u002F/g, \"/\").replace(/\\\\\\//g, \"/\");\n}\n\nexport function isTikTokCdnUrl(url: string | null | undefined): boolean {\n  if (!url?.trim()) return false;\n  const lower = url.toLowerCase();\n  if (!lower.startsWith(\"http\")) return false;\n\n  // Webapp CDN from RapidAPI API23: v16-webapp-prime.us.tiktok.com/video/...\n  if (/\\.tiktok\\.com\\/video\\//.test(lower)) return true;\n\n  // Regional mirrors: v16m.tiktokcdn-us.com, v19.tiktokcdn-eu.com, etc.\n  if (/(?:tiktokcdn|tiktokv|muscdn)(?:[-.][\\w-]+)?\\.com/i.test(lower)) {\n    return (\n      /\\.mp4(\\?|#|$)/i.test(lower) ||\n      lower.includes(\"/video/\") ||\n      lower.includes(\"mime_type=video\")\n    );\n  }\n\n  return false;\n}\n\nfunction pickPlayUrlFromVideo(video: Record<string, unknown> | undefined): string | null {\n  if (!video) return null;\n\n  const direct = pickString(video.playAddr, video.downloadAddr, video.play_addr, video.download_addr);\n  if (direct?.startsWith(\"http\")) return unescapeJsonUrl(direct);\n\n  const playAddr = asRecord(video.PlayAddrStruct) ?? asRecord(video.play_addr);\n  const urlList = playAddr?.UrlList ?? playAddr?.url_list;\n  if (Array.isArray(urlList)) {\n    for (const entry of urlList) {\n      if (typeof entry === \"string\" && entry.startsWith(\"http\")) return unescapeJsonUrl(entry);\n    }\n  }\n\n  const bitrateInfo = video.bitrateInfo ?? video.BitrateInfo;\n  if (Array.isArray(bitrateInfo)) {\n    for (const item of bitrateInfo) {\n      const record = asRecord(item);\n      const playStruct = asRecord(record?.PlayAddr) ?? asRecord(record?.play_addr);\n      const list = playStruct?.UrlList ?? playStruct?.url_list;\n      if (Array.isArray(list) && typeof list[0] === \"string\") {\n        return unescapeJsonUrl(list[0]);\n      }\n    }\n  }\n\n  return null;\n}\n\n/** Extract a direct play URL from TikTok watch-page HTML. */\nexport function extractTikTokPlayUrlFromHtml(html: string, videoId?: string | null): string | null {\n  const sigi = html.match(/<script id=\"SIGI_STATE\"[^>]*>([\\s\\S]*?)<\\/script>/);\n  if (sigi?.[1]) {\n    try {\n      const state = JSON.parse(sigi[1]) as Record<string, unknown>;\n      const itemModule = asRecord(state.ItemModule);\n      if (itemModule) {\n        const entry =\n          (videoId && itemModule[videoId]) || Object.values(itemModule).find((item) => asRecord(item)?.video);\n        const entryRecord = asRecord(entry);\n        const url = pickPlayUrlFromVideo(asRecord(entryRecord?.video) ?? undefined);\n        if (url) return url;\n      }\n    } catch {\n      /* fall through */\n    }\n  }\n\n  const universal = html.match(\n    /<script id=\"__UNIVERSAL_DATA_FOR_REHYDRATION__\"[^>]*>([\\s\\S]*?)<\\/script>/,\n  );\n  if (universal?.[1]) {\n    try {\n      const data = JSON.parse(universal[1]) as Record<string, unknown>;\n      const scope = asRecord(data.__DEFAULT_SCOPE__);\n      const detail = asRecord(scope?.[\"webapp.video-detail\"]);\n      const itemInfo = asRecord(detail?.itemInfo);\n      const itemStruct = asRecord(itemInfo?.itemStruct) ?? asRecord(detail?.itemStruct);\n      const url = pickPlayUrlFromVideo(asRecord(itemStruct?.video) ?? undefined);\n      if (url) return url;\n    } catch {\n      /* fall through */\n    }\n  }\n\n  const loose =\n    html.match(/\"playAddr\":\"(https:[^\"]+)\"/)?.[1] ??\n    html.match(/\"downloadAddr\":\"(https:[^\"]+)\"/)?.[1];\n  if (loose) return unescapeJsonUrl(loose);\n\n  return null;\n}\n\n/** Extract play URL from TikTok RapidAPI / scraper JSON nodes. */\nexport function extractTikTokVideoUrlFromPayload(payload: Record<string, unknown>): string | null {\n  const videoNode = asRecord(payload.video);\n  const direct = pickString(payload.play, payload.play_url, payload.video_url, payload.videoUrl);\n  if (direct?.startsWith(\"http\")) return direct;\n\n  const fromVideo = pickPlayUrlFromVideo(videoNode ?? undefined);\n  if (fromVideo) return fromVideo;\n\n  // TikTok API23: { itemInfo: { itemStruct: { video: { playAddr } } } }\n  const itemInfo = asRecord(payload.itemInfo);\n  const itemStruct = asRecord(itemInfo?.itemStruct) ?? asRecord(payload.itemStruct);\n  const fromItem = pickPlayUrlFromVideo(asRecord(itemStruct?.video) ?? undefined);\n  if (fromItem) return fromItem;\n\n  const data = asRecord(payload.data);\n  if (data) {\n    const nested = extractTikTokVideoUrlFromPayload(data);\n    if (nested) return nested;\n  }\n\n  return null;\n}\n\nexport function resolveTikTokPlaybackUrl(\n  videoUrl: string,\n  rightsMetadata?: Record<string, unknown> | null,\n): string {\n  if (isTikTokCdnUrl(videoUrl)) return videoUrl;\n\n  const cdn = rightsMetadata?.cdnFallbackUrl;\n  if (typeof cdn === \"string\" && isTikTokCdnUrl(cdn)) return cdn;\n\n  return videoUrl;\n}\n\nconst TIKTOK_FETCH_HEADERS = {\n  \"User-Agent\":\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36\",\n  Accept: \"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\",\n  \"Accept-Language\": \"en-US,en;q=0.9\",\n};\n\nfunction isServerlessRuntime(): boolean {\n  return Boolean(process.env.VERCEL || process.env.AWS_LAMBDA_FUNCTION_NAME);\n}\n\nasync function fetchTikTokWatchPageHtml(watchUrl: string): Promise<string | null> {\n  const scraperKey = process.env.SCRAPER_API_KEY?.trim();\n  if (scraperKey) {\n    const proxyUrl = `https://api.scraperapi.com?api_key=${encodeURIComponent(scraperKey)}&url=${encodeURIComponent(watchUrl)}&render=true`;\n    const ctrl = new AbortController();\n    const timer = setTimeout(() => ctrl.abort(), 25_000);\n    try {\n      const res = await fetch(proxyUrl, { signal: ctrl.signal });\n      if (res.ok) return res.text();\n    } catch {\n      /* fall through */\n    } finally {\n      clearTimeout(timer);\n    }\n  }\n\n  const ctrl = new AbortController();\n  const timer = setTimeout(() => ctrl.abort(), 12_000);\n  try {\n    const res = await fetch(watchUrl, {\n      method: \"GET\",\n      redirect: \"follow\",\n      signal: ctrl.signal,\n      headers: TIKTOK_FETCH_HEADERS,\n    });\n    if (!res.ok) return null;\n    return res.text();\n  } catch {\n    return null;\n  } finally {\n    clearTimeout(timer);\n  }\n}\n\n/** Resolve a TikTok watch URL to a signed CDN MP4 (yt-dlp \u2192 tikwm \u2192 RapidAPI \u2192 HTML parse). */\nexport async function fetchFreshTikTokCdnUrl(\n  watchUrl: string,\n  videoId?: string | null,\n): Promise<string | null> {\n  if (!isServerlessRuntime()) {\n    const ingested = await ingestFromUrl(watchUrl).catch(() => null);\n    if (ingested?.streamUrl && (isTikTokCdnUrl(ingested.streamUrl) || /\\.mp4/i.test(ingested.streamUrl))) {\n      return ingested.streamUrl;\n    }\n  }\n\n  // On Vercel, prefer RapidAPI \u2014 tikwm often blocks datacenter IPs.\n  if (isServerlessRuntime()) {\n    const rapidFirst = await fetchFreshTikTokCdnViaRapidApi(watchUrl, videoId).catch(() => null);\n    if (rapidFirst) return rapidFirst;\n  }\n\n  const tikwm = await fetchFreshTikTokCdnViaTikwm(watchUrl).catch(() => null);\n  if (tikwm) return tikwm;\n\n  if (!isServerlessRuntime()) {\n    const rapid = await fetchFreshTikTokCdnViaRapidApi(watchUrl, videoId).catch(() => null);\n    if (rapid) return rapid;\n  }\n\n  const html = await fetchTikTokWatchPageHtml(watchUrl);\n  if (html) {\n    const url = extractTikTokPlayUrlFromHtml(html, videoId);\n    if (url?.startsWith(\"http\")) return url;\n  }\n\n  return null;\n}\n\nasync function fetchFreshTikTokCdnViaRapidApi(\n  watchUrl: string,\n  videoId?: string | null,\n): Promise<string | null> {\n  const { isRapidApiConfigured, rapidApiRequest } = await import(\"../rapidapi/client.js\");\n  if (!isRapidApiConfigured()) return null;\n\n  const id = videoId?.trim() || null;\n  if (id) {\n    const api23Host =\n      process.env.RAPIDAPI_TIKTOK_API23_HOST?.trim() || \"tiktok-api23.p.rapidapi.com\";\n    const detailPaths = [\n      process.env.RAPIDAPI_TIKTOK_API23_DETAIL_PATH?.trim(),\n      \"/api/post/detail\",\n      \"/api/video/detail\",\n    ].filter((value, index, arr): value is string => Boolean(value) && arr.indexOf(value) === index);\n\n    for (const path of detailPaths) {\n      try {\n        const payload = await rapidApiRequest<Record<string, unknown>>({\n          host: api23Host,\n          path,\n          params: { videoId: id, url: watchUrl },\n        });\n        const url = extractTikTokVideoUrlFromPayload(payload);\n        if (url?.startsWith(\"http\")) return url;\n      } catch {\n        /* try next path */\n      }\n    }\n\n    const fastHost =\n      process.env.RAPIDAPI_TIKTOK_FAST_HOST?.trim() ||\n      \"tiktok-api-fast-reliable-data-scraper.p.rapidapi.com\";\n    const fastPaths = [`/video/${encodeURIComponent(id)}`, \"/video/info\", \"/post/detail\"];\n    for (const path of fastPaths) {\n      try {\n        const payload = await rapidApiRequest<Record<string, unknown>>({\n          host: fastHost,\n          path,\n          params: { url: watchUrl, video_id: id, videoId: id },\n        });\n        const url = extractTikTokVideoUrlFromPayload(payload);\n        if (url?.startsWith(\"http\")) return url;\n      } catch {\n        /* try next path */\n      }\n    }\n  }\n\n  const host = process.env.RAPIDAPI_TIKTOK_HOST?.trim() || \"tiktok-scraper7.p.rapidapi.com\";\n  const paths = [\n    process.env.RAPIDAPI_TIKTOK_VIDEO_PATH?.trim(),\n    \"/\",\n    \"/video/info\",\n    \"/getVideo\",\n  ].filter((value, index, arr): value is string => Boolean(value) && arr.indexOf(value) === index);\n\n  for (const path of paths) {\n    try {\n      const payload = await rapidApiRequest<Record<string, unknown>>({\n        host,\n        path,\n        params: { url: watchUrl, video_url: watchUrl },\n      });\n      const url = extractTikTokVideoUrlFromPayload(payload);\n      if (url?.startsWith(\"http\")) return url;\n    } catch {\n      /* try next path */\n    }\n  }\n\n  return null;\n}\n\nfunction parseTikwmPayload(payload: Record<string, unknown>): string | null {\n  if (payload.code !== 0 && payload.code !== \"0\") return null;\n  const data = asRecord(payload.data);\n  const play = pickString(data?.play, data?.hdplay, data?.wmplay);\n  return play?.startsWith(\"http\") ? play : null;\n}\n\nasync function fetchFreshTikTokCdnViaTikwm(watchUrl: string): Promise<string | null> {\n  const attempts: Array<() => Promise<string | null>> = [\n    async () => {\n      const ctrl = new AbortController();\n      const timer = setTimeout(() => ctrl.abort(), 15_000);\n      try {\n        const getUrl = `https://www.tikwm.com/api/?url=${encodeURIComponent(watchUrl)}`;\n        const res = await fetch(getUrl, {\n          signal: ctrl.signal,\n          headers: {\n            Accept: \"application/json\",\n            \"User-Agent\": TIKTOK_FETCH_HEADERS[\"User-Agent\"],\n          },\n        });\n        if (!res.ok) return null;\n        return parseTikwmPayload((await res.json()) as Record<string, unknown>);\n      } catch {\n        return null;\n      } finally {\n        clearTimeout(timer);\n      }\n    },\n    async () => {\n      const ctrl = new AbortController();\n      const timer = setTimeout(() => ctrl.abort(), 15_000);\n      try {\n        const res = await fetch(\"https://www.tikwm.com/api/\", {\n          method: \"POST\",\n          signal: ctrl.signal,\n          headers: {\n            Accept: \"application/json\",\n            \"Content-Type\": \"application/x-www-form-urlencoded\",\n            \"User-Agent\": TIKTOK_FETCH_HEADERS[\"User-Agent\"],\n          },\n          body: new URLSearchParams({ url: watchUrl }).toString(),\n        });\n        if (!res.ok) return null;\n        return parseTikwmPayload((await res.json()) as Record<string, unknown>);\n      } catch {\n        return null;\n      } finally {\n        clearTimeout(timer);\n      }\n    },\n  ];\n\n  for (const attempt of attempts) {\n    const url = await attempt();\n    if (url) return url;\n  }\n  return null;\n}\n", "import { isInstagramCdnMp4 } from \"../ingestion/instagramPlayback.js\";\nimport { isTikTokCdnUrl } from \"./tiktokPlayback.js\";\n\nconst NATIVE_VIDEO_EXT = /\\.(mp4|mov|webm|m4v|ogg|ogv|m3u8)(\\?|#|$)/i;\nconst IMAGE_EXT = /\\.(jpe?g|png|webp|gif|bmp|svg|avif|heic|heif)(\\?|#|$)/i;\n\nexport function isImageMediaUrl(url: string | null | undefined): boolean {\n  if (!url?.trim()) return false;\n  const u = url.trim();\n  if (/^data:image\\//i.test(u)) return true;\n  return IMAGE_EXT.test(u);\n}\n\nexport type FeedVideoRecord = {\n  videoUrl: string;\n  sourcePlatform?: string | null;\n  embedUrl?: string | null;\n  sourceVideoId?: string | null;\n  rightsMetadata?: Record<string, unknown> | null;\n  durationSeconds?: number | null;\n};\n\nfunction readDuration(row: FeedVideoRecord): number | null {\n  if (typeof row.durationSeconds === \"number\" && row.durationSeconds > 0) {\n    return row.durationSeconds;\n  }\n  const rights = row.rightsMetadata ?? {};\n  const fromRights = rights.durationSec ?? rights.durationSeconds;\n  if (typeof fromRights === \"number\" && fromRights > 0) return fromRights;\n  return null;\n}\n\nfunction hasInstagramMp4(row: FeedVideoRecord): boolean {\n  const url = row.videoUrl?.trim() ?? \"\";\n  if (isInstagramCdnMp4(url)) return true;\n  const cdn = row.rightsMetadata?.cdnFallbackUrl;\n  return typeof cdn === \"string\" && isInstagramCdnMp4(cdn);\n}\n\nfunction hasTikTokNative(row: FeedVideoRecord): boolean {\n  const url = row.videoUrl?.trim() ?? \"\";\n  if (isTikTokCdnUrl(url)) return true;\n  if (url.startsWith(\"/objects/catalog/tiktok/\")) return true;\n  if (row.rightsMetadata?.mirrored === true) return true;\n  const cdn = row.rightsMetadata?.cdnFallbackUrl;\n  return typeof cdn === \"string\" && isTikTokCdnUrl(cdn);\n}\n\n/**\n * True when the record represents confirmed video media (not a photo, thumbnail, or screenshot).\n * Used by feed APIs and ingestion guards.\n */\nexport function isConfirmedFeedVideo(row: FeedVideoRecord): boolean {\n  const url = row.videoUrl?.trim();\n  if (!url || isImageMediaUrl(url)) return false;\n\n  const platform = row.sourcePlatform?.toLowerCase() ?? null;\n  const rights = row.rightsMetadata ?? {};\n\n  // Block Instagram/TikTok page links unless we have a mirrored native MP4.\n  if (/instagram\\.com/i.test(url) && !hasInstagramMp4(row)) return false;\n  if (/tiktok\\.com/i.test(url) && !hasTikTokNative(row) && platform !== \"tiktok\") {\n    // TikTok page URLs without native mirror are never in-site playable.\n    if (!row.sourceVideoId?.trim() || !row.embedUrl?.trim()) return false;\n  }\n\n  // Uploaded files and same-origin proxy paths\n  if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) return true;\n  if (url.startsWith(\"/objects/\") || url.includes(\"/api/feed/playback/\")) return true;\n\n  if (/youtube\\.com|youtu\\.be/i.test(url)) return true;\n  if (/vimeo\\.com/i.test(url)) return true;\n\n  if (NATIVE_VIDEO_EXT.test(url) && !isImageMediaUrl(url)) return true;\n  if (isInstagramCdnMp4(url) || isTikTokCdnUrl(url)) return true;\n\n  if (platform === \"instagram\") {\n    // Allow if we have a CDN MP4, OR if we have a shortcode (playback proxy can refresh expired CDN URLs).\n    // The /api/feed/playback/db-{id} endpoint will call refreshInstagramVideoPlayback() on demand.\n    if (hasInstagramMp4(row)) return true;\n    return Boolean(row.sourceVideoId?.trim()); // Allow shortcodes for refresh-on-demand\n  }\n\n  if (platform === \"tiktok\") {\n    if (hasTikTokNative(row)) return true;\n    if (\n      /tiktok\\.com/i.test(url) &&\n      row.sourceVideoId?.trim() &&\n      (row.embedUrl?.trim() || rights.playbackMethod === \"embed\")\n    ) {\n      return true;\n    }\n    return false;\n  }\n\n  if (rights.confirmedVideo === true && readDuration(row) != null) {\n    // confirmedVideo alone must not bypass Instagram/TikTok page-link checks above.\n    if (/instagram\\.com|tiktok\\.com/i.test(url)) return false;\n    return true;\n  }\n\n  return false;\n}\n\n/** Reject image URLs and non-video social page links at upload time. */\nexport function isUploadableVideoUrl(videoUrl: string): boolean {\n  const url = videoUrl?.trim();\n  if (!url) return false;\n  if (isImageMediaUrl(url)) return false;\n\n  if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) return true;\n  if (/youtube\\.com|youtu\\.be|vimeo\\.com/i.test(url)) return true;\n  if (NATIVE_VIDEO_EXT.test(url)) return true;\n  if (isInstagramCdnMp4(url) || isTikTokCdnUrl(url)) return true;\n\n  if (/instagram\\.com\\/p\\//i.test(url)) return false;\n  if (/instagram\\.com\\/reel\\//i.test(url)) return false;\n  if (/instagram\\.com/i.test(url)) return false;\n\n  return NATIVE_VIDEO_EXT.test(url) || url.includes(\"/objects/\");\n}\n", "import type { UserVideo } from \"@workspace/db\";\nimport { isConfirmedFeedVideo, isImageMediaUrl } from \"../playback/videoMediaValidation.js\";\n\nexport type ValidationIssue = { field: string; message: string; severity: \"error\" | \"warning\" };\n\nexport function validateVideoRecord(row: UserVideo): ValidationIssue[] {\n  const issues: ValidationIssue[] = [];\n\n  if (!row.title?.trim()) issues.push({ field: \"title\", message: \"Missing title\", severity: \"error\" });\n  if (!row.videoUrl?.trim()) issues.push({ field: \"videoUrl\", message: \"Missing video URL\", severity: \"error\" });\n  if (isImageMediaUrl(row.videoUrl)) {\n    issues.push({ field: \"videoUrl\", message: \"URL points to an image, not a video\", severity: \"error\" });\n  }\n  if (\n    row.videoUrl?.trim() &&\n    !isConfirmedFeedVideo({\n      videoUrl: row.videoUrl,\n      sourcePlatform: row.sourcePlatform,\n      embedUrl: row.embedUrl,\n      sourceVideoId: row.sourceVideoId,\n      rightsMetadata: (row.rightsMetadata as Record<string, unknown> | null) ?? null,\n      durationSeconds: row.durationSeconds,\n    })\n  ) {\n    issues.push({ field: \"videoUrl\", message: \"Not a confirmed playable video source\", severity: \"error\" });\n  }\n  if (!row.creator?.trim()) issues.push({ field: \"creator\", message: \"Missing creator name\", severity: \"warning\" });\n  if (!row.creatorHandle?.trim()) {\n    issues.push({ field: \"creatorHandle\", message: \"Missing creator handle\", severity: \"warning\" });\n  }\n  if (row.sourcePlatform && !row.sourceVideoId) {\n    issues.push({ field: \"sourceVideoId\", message: \"Platform set without source video id\", severity: \"warning\" });\n  }\n  if (!row.thumbnailUrl?.trim()) {\n    issues.push({ field: \"thumbnailUrl\", message: \"Missing thumbnail\", severity: \"warning\" });\n  }\n\n  return issues;\n}\n\nexport function hasBlockingValidationErrors(issues: ValidationIssue[]): boolean {\n  return issues.some((i) => i.severity === \"error\");\n}\n", "import crypto from \"crypto\";\nimport {\n  db,\n  userVideosTable,\n  videoPostProcessLogsTable,\n  type UserVideo,\n} from \"@workspace/db\";\nimport { eq } from \"drizzle-orm\";\nimport { buildVideoAttribution } from \"./attribution\";\nimport {\n  analyzeVideoContent,\n  keywordsToDetectedProducts,\n} from \"./contentAnalysis\";\nimport { detectGearFromThumbnail } from \"./gearVision\";\nimport {\n  persistDetectedProducts,\n  syncVideoGearLinks,\n} from \"./productMatching\";\nimport {\n  POST_PROCESS_VERSION,\n  type DetectedProductInput,\n  type VideoPostProcessResult,\n} from \"./types\";\nimport {\n  hasBlockingValidationErrors,\n  validateVideoRecord,\n} from \"./validateVideoRecord\";\n\nasync function logStage(\n  videoId: number,\n  stage: string,\n  status: \"ok\" | \"warn\" | \"error\",\n  message: string,\n  details: Record<string, unknown> = {},\n) {\n  await db.insert(videoPostProcessLogsTable).values({\n    id: crypto.randomUUID(),\n    videoId,\n    stage,\n    status,\n    message,\n    details,\n  });\n}\n\nfunction dedupeProducts(products: DetectedProductInput[]): DetectedProductInput[] {\n  const seen = new Set<string>();\n  const out: DetectedProductInput[] = [];\n  for (const p of products) {\n    const key = `${p.detectionSource}:${p.searchQuery.toLowerCase()}:${p.name.toLowerCase()}`;\n    if (seen.has(key)) continue;\n    seen.add(key);\n    out.push(p);\n  }\n  return out;\n}\n\nexport async function enrichVideoRecord(videoId: number): Promise<VideoPostProcessResult> {\n  const errors: string[] = [];\n\n  const [row] = await db.select().from(userVideosTable).where(eq(userVideosTable.id, videoId)).limit(1);\n  if (!row) {\n    return {\n      videoId,\n      status: \"failed\",\n      attribution: {},\n      detectedProducts: 0,\n      catalogLinks: 0,\n      topics: [],\n      errors: [\"Video not found\"],\n    };\n  }\n\n  await db\n    .update(userVideosTable)\n    .set({ postProcessStatus: \"processing\" })\n    .where(eq(userVideosTable.id, videoId));\n\n  const validationIssues = validateVideoRecord(row);\n  if (hasBlockingValidationErrors(validationIssues)) {\n    const msg = validationIssues.map((i) => i.message).join(\"; \");\n    errors.push(msg);\n    await logStage(videoId, \"validate\", \"error\", msg, { validationIssues });\n    await db\n      .update(userVideosTable)\n      .set({ postProcessStatus: \"failed\", enrichmentMetadata: { processingErrors: errors } })\n      .where(eq(userVideosTable.id, videoId));\n    return {\n      videoId,\n      status: \"failed\",\n      attribution: {},\n      detectedProducts: 0,\n      catalogLinks: 0,\n      topics: [],\n      errors,\n    };\n  }\n\n  const attribution = buildVideoAttribution(row);\n  const tags = Array.isArray(row.tags) ? row.tags : [];\n\n  let contentAnalysis;\n  try {\n    contentAnalysis = await analyzeVideoContent(row.title, row.description, tags);\n    await logStage(videoId, \"content_analysis\", \"ok\", \"Content analysis complete\", {\n      topicCount: contentAnalysis.topics.length,\n    });\n  } catch (err) {\n    const msg = err instanceof Error ? err.message : \"Content analysis failed\";\n    errors.push(msg);\n    contentAnalysis = {\n      topics: [],\n      activities: [],\n      locations: [],\n      outfitterHints: [],\n      commerceTags: [],\n      gearKeywords: [],\n      summary: null,\n    };\n    await logStage(videoId, \"content_analysis\", \"warn\", msg);\n  }\n\n  const textProducts = keywordsToDetectedProducts(contentAnalysis.gearKeywords);\n\n  let visionSummary: string | null = null;\n  let visionProducts: DetectedProductInput[] = [];\n  try {\n    const vision = await detectGearFromThumbnail(row.thumbnailUrl);\n    visionSummary = vision.summary;\n    visionProducts = vision.products;\n    await logStage(videoId, \"gear_vision\", \"ok\", \"Vision gear scan complete\", {\n      itemCount: visionProducts.length,\n    });\n  } catch (err) {\n    const msg = err instanceof Error ? err.message : \"Vision gear detection failed\";\n    errors.push(msg);\n    await logStage(videoId, \"gear_vision\", \"warn\", msg);\n  }\n\n  const allProducts = dedupeProducts([...visionProducts, ...textProducts]);\n\n  let detected = 0;\n  let catalogLinks = 0;\n  let linkedGearIds: string[] = [];\n  try {\n    const productResult = await persistDetectedProducts(videoId, allProducts);\n    detected = productResult.detected;\n    catalogLinks = await syncVideoGearLinks(videoId, productResult.linkedGearIds, allProducts);\n    linkedGearIds = productResult.linkedGearIds;\n    await logStage(videoId, \"product_matching\", \"ok\", \"Product matching complete\", {\n      detected,\n      catalogLinks,\n    });\n  } catch (err) {\n    const msg = err instanceof Error ? err.message : \"Product matching failed\";\n    errors.push(msg);\n    await logStage(videoId, \"product_matching\", \"error\", msg);\n  }\n\n  const enrichmentMetadata = {\n    attribution,\n    topics: contentAnalysis.topics,\n    activities: contentAnalysis.activities,\n    locations: contentAnalysis.locations,\n    outfitterHints: contentAnalysis.outfitterHints,\n    commerceTags: contentAnalysis.commerceTags,\n    aiSummary: contentAnalysis.summary ?? visionSummary,\n    processingErrors: errors,\n    gearDetection: {\n      textKeywords: contentAnalysis.gearKeywords,\n      visionItemCount: visionProducts.length,\n      catalogMatchCount: linkedGearIds.length,\n    },\n  };\n\n  await db\n    .update(userVideosTable)\n    .set({\n      postProcessStatus: errors.length && catalogLinks === 0 && detected === 0 ? \"failed\" : \"completed\",\n      postProcessedAt: new Date(),\n      postProcessVersion: POST_PROCESS_VERSION,\n      enrichmentMetadata,\n      sourceUrl: attribution.sourceUrl,\n      creatorUrl: attribution.creatorUrl,\n      retrievedAt: row.retrievedAt ?? row.createdAt ?? new Date(),\n      tags: [...new Set([...tags, ...contentAnalysis.commerceTags.slice(0, 8)])],\n    })\n    .where(eq(userVideosTable.id, videoId));\n\n  await logStage(videoId, \"complete\", errors.length ? \"warn\" : \"ok\", \"Post-process finished\", {\n    detectedProducts: detected,\n    catalogLinks,\n    errorCount: errors.length,\n  });\n\n  return {\n    videoId,\n    status: errors.length && catalogLinks === 0 && detected === 0 ? \"failed\" : \"completed\",\n    attribution,\n    detectedProducts: detected,\n    catalogLinks,\n    topics: contentAnalysis.topics,\n    errors,\n  };\n}\n\nexport async function markVideosPendingPostProcess(videoIds: number[]): Promise<void> {\n  if (!videoIds.length) return;\n  for (const id of videoIds) {\n    await db\n      .update(userVideosTable)\n      .set({ postProcessStatus: \"pending\" })\n      .where(eq(userVideosTable.id, id));\n  }\n}\n\nexport type { UserVideo };\n", "import { db, userVideosTable } from \"@workspace/db\";\nimport { and, asc, eq, inArray, or } from \"drizzle-orm\";\nimport { enrichVideoRecord } from \"./enrichVideo\";\nimport type { PostProcessWorkerOptions, PostProcessWorkerReport } from \"./types\";\n\nconst DEFAULT_BATCH = 25;\n\nexport async function runPostProcessWorker(\n  options: PostProcessWorkerOptions = {},\n): Promise<PostProcessWorkerReport> {\n  const limit = Math.min(Math.max(options.limit ?? DEFAULT_BATCH, 1), 100);\n  const report: PostProcessWorkerReport = {\n    processed: 0,\n    completed: 0,\n    failed: 0,\n    skipped: 0,\n    results: [],\n  };\n\n  let rows;\n  if (options.videoIds?.length) {\n    rows = await db\n      .select({ id: userVideosTable.id, postProcessStatus: userVideosTable.postProcessStatus })\n      .from(userVideosTable)\n      .where(inArray(userVideosTable.id, options.videoIds))\n      .orderBy(asc(userVideosTable.createdAt))\n      .limit(limit);\n  } else {\n    rows = await db\n      .select({ id: userVideosTable.id, postProcessStatus: userVideosTable.postProcessStatus })\n      .from(userVideosTable)\n      .where(\n        options.force\n          ? or(\n              eq(userVideosTable.postProcessStatus, \"pending\"),\n              eq(userVideosTable.postProcessStatus, \"failed\"),\n              eq(userVideosTable.postProcessStatus, \"completed\"),\n            )\n          : or(\n              eq(userVideosTable.postProcessStatus, \"pending\"),\n              eq(userVideosTable.postProcessStatus, \"failed\"),\n            ),\n      )\n      .orderBy(asc(userVideosTable.createdAt))\n      .limit(limit);\n  }\n\n  for (const row of rows) {\n    if (!options.force && row.postProcessStatus === \"completed\") {\n      report.skipped++;\n      continue;\n    }\n\n    report.processed++;\n    const result = await enrichVideoRecord(row.id);\n    report.results.push(result);\n    if (result.status === \"completed\") report.completed++;\n    else report.failed++;\n  }\n\n  return report;\n}\n\nexport async function getPostProcessStatusSummary() {\n  const rows = await db\n    .select({\n      postProcessStatus: userVideosTable.postProcessStatus,\n    })\n    .from(userVideosTable);\n\n  const counts: Record<string, number> = {\n    pending: 0,\n    processing: 0,\n    completed: 0,\n    failed: 0,\n  };\n  for (const row of rows) {\n    const key = row.postProcessStatus ?? \"pending\";\n    counts[key] = (counts[key] ?? 0) + 1;\n  }\n\n  return {\n    generatedAt: new Date().toISOString(),\n    totals: counts,\n    totalVideos: rows.length,\n  };\n}\n", "import type { SpeciesData } from './species';\n\nexport const SPECIES_EXTRA: SpeciesData[] = [\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// ADDITIONAL HUNTING \u2014 BIG GAME: NORTH AMERICA\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"american-bison\",\n  name: \"American Bison\",\n  scientificName: \"Bison bison\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/11478901/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The great thundering symbol of the American West. Bison herds once numbered 60 million; today, managed hunts on tribal lands and private ranches offer one of the most historically significant hunting experiences in North America.\",\n  habitat: \"Open grasslands, river valleys, rolling prairies. Highly adaptable but prefer open terrain.\",\n  range: \"Great Plains, Montana, South Dakota, Oklahoma, Native American tribal lands\",\n  locations: [\"South Dakota\", \"Montana\", \"Oklahoma\", \"Wyoming\", \"Colorado\", \"Utah\", \"Kansas\"],\n  season: \"Year-round on private/tribal lands; public land tags extremely limited\",\n  bestTimes: \"Fall when bulls are fat and in rut. Winter when coats are at prime.\",\n  behavior: \"Travel in herds; bulls are territorial during rut (July\u2013September). Dangerous when approached \u2014 can charge at 35 mph.\",\n  bestBait: [\"Spot-and-stalk \u2014 no bait applicable\", \"Locate herd from distance with optics\"],\n  techniques: [\"Spot-and-stalk\", \"Still hunting from downwind\", \"Guided tribal hunt\"],\n  feedingSchedule: \"Graze continuously throughout daylight hours on open grasslands\",\n  sizeRange: \"800\u20132,000 lbs (bulls); 700\u20131,100 lbs (cows)\",\n  recordWeight: \"2,800 lbs (historical)\",\n  tags: [\"hunting\", \"big-game\", \"north-america\", \"historic\", \"tribal-land\"],\n},\n{\n  id: \"barren-ground-caribou\",\n  name: \"Barren-Ground Caribou\",\n  scientificName: \"Rangifer tarandus groenlandicus\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/189524200/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"One of the most epic wilderness hunting experiences on earth. Caribou migrate hundreds of miles across the Arctic tundra. Intercepting a massive bull with a full velvet rack during the fall migration is bucket-list hunting.\",\n  habitat: \"Arctic tundra, boreal forest edges, river crossings during migration\",\n  range: \"Alaska, northern Canada, Northwest Territories, Nunavut\",\n  locations: [\"Alaska\", \"Northwest Territories\", \"Nunavut\", \"Manitoba\", \"Quebec\"],\n  season: \"Late August \u2013 September (coincides with migration and velvet shed)\",\n  bestTimes: \"Early September when bulls shed velvet and are most visible on open tundra.\",\n  behavior: \"Migrate in massive herds; bulls have enormous antlers reaching 60 inches. Travel 10\u201320 miles daily.\",\n  bestBait: [\"No bait \u2014 spot and intercept migration routes\"],\n  techniques: [\"Float plane access to remote rivers\", \"Intercept migration crossing\", \"Spot-and-stalk open tundra\"],\n  feedingSchedule: \"Graze lichen, sedge, and willow constantly during migration\",\n  sizeRange: \"250\u2013600 lbs (bulls); 150\u2013250 lbs (cows)\",\n  recordWeight: \"700+ lbs (Alaska)\",\n  tags: [\"hunting\", \"big-game\", \"alaska\", \"arctic\", \"migration\", \"wilderness\"],\n},\n{\n  id: \"mountain-lion\",\n  name: \"Mountain Lion / Cougar\",\n  scientificName: \"Puma concolor\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/9834553/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The ghost of the mountains. Mountain lions are the largest wild cat in North America and the ultimate predator calling challenge. Tracking with hounds through snow is the traditional method \u2014 a pursuing pack of hounds and a treed lion is North American hunting at its most primal.\",\n  habitat: \"Rocky terrain, rimrock, canyon country, dense timber \u2014 anywhere deer are abundant\",\n  range: \"Western US, Florida (panther subspecies), western Canada, Central/South America\",\n  locations: [\"Colorado\", \"Montana\", \"Idaho\", \"Wyoming\", \"Oregon\", \"California\", \"Utah\", \"Nevada\", \"Arizona\", \"New Mexico\", \"Texas\"],\n  season: \"Varies by state; most states require draw tags; hound hunting regulated\",\n  bestTimes: \"Winter snow for tracking; after fresh snowfall to locate fresh tracks.\",\n  behavior: \"Solitary ambush predators. Stalk prey from above, often from rimrock. Home ranges of 50\u2013150 square miles. Rarely seen.\",\n  bestBait: [\"No bait \u2014 hound hunting is the primary method\"],\n  techniques: [\"Hound hunting with trained dogs\", \"Tracking fresh snow\", \"Spot-and-stalk in rimrock\"],\n  feedingSchedule: \"Nocturnal and crepuscular predator; kills every 7\u201310 days\",\n  sizeRange: \"75\u2013200 lbs (males); 75\u2013130 lbs (females)\",\n  recordWeight: \"276 lbs (Arizona)\",\n  tags: [\"hunting\", \"big-game\", \"predator\", \"hound-hunting\", \"western\"],\n},\n{\n  id: \"grizzly-bear\",\n  name: \"Grizzly / Brown Bear\",\n  scientificName: \"Ursus arctos horribilis\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/39083590/medium.jpeg\",\n  difficulty: \"expert\",\n  description: \"The apex predator of North America and one of the world's most dangerous game animals. Alaska coastal brown bears can exceed 1,500 lbs. A mature boar in fall \u2014 fat and massive \u2014 is the most formidable big game animal a hunter can pursue.\",\n  habitat: \"Alaska coastal meadows, river drainages, mountain tundra, boreal forest, salmon streams\",\n  range: \"Alaska, British Columbia, Yukon, Montana (limited), Wyoming (limited)\",\n  locations: [\"Alaska\", \"British Columbia\", \"Yukon\", \"Northwest Territories\", \"Montana\"],\n  season: \"Spring (May\u2013Jun) and Fall (Aug\u2013Oct); tags required; very limited\",\n  bestTimes: \"Late September coastal bears at salmon streams. Spring bears on green-up slopes.\",\n  behavior: \"Dominant omnivores; gather at salmon streams in fall to pack on fat. Extremely dangerous when surprised or with cubs.\",\n  bestBait: [\"Spot-and-stalk over salmon streams\", \"Baited stands (where legal in Canada)\", \"Green-up hillside glassing\"],\n  techniques: [\"Float plane access to remote drainages\", \"Guided coastal hunt over salmon\", \"Mountain tundra spot-and-stalk\"],\n  feedingSchedule: \"Hyperphagia feeding September\u2013October to prepare for hibernation; salmon streams peak feeding\",\n  sizeRange: \"300\u2013800 lbs interior; coastal bears 400\u20131,500 lbs\",\n  recordWeight: \"1,500+ lbs (coastal Alaska)\",\n  tags: [\"hunting\", \"big-game\", \"dangerous-game\", \"alaska\", \"bear\", \"once-in-a-lifetime\"],\n},\n{\n  id: \"mountain-goat\",\n  name: \"Rocky Mountain Goat\",\n  scientificName: \"Oreamnos americanus\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/18929544/medium.jpeg\",\n  difficulty: \"expert\",\n  description: \"A mountain goat tag is among the most physically demanding hunts in North America. Living on near-vertical cliffs above treeline, billies are virtually inaccessible without extreme physical fitness and technical mountain skills.\",\n  habitat: \"Alpine cliff faces, rocky ledges above treeline, steep talus slopes \u2014 the most vertical habitat of any big game\",\n  range: \"Cascades, Rockies, coastal ranges of Alaska and British Columbia\",\n  locations: [\"Montana\", \"Idaho\", \"Wyoming\", \"Washington\", \"Colorado\", \"Alaska\", \"British Columbia\"],\n  season: \"August\u2013November; all units require limited draw tags\",\n  bestTimes: \"Late September through October; billies are most accessible before winter snowfall closes high country.\",\n  behavior: \"Non-migratory. Live in the most extreme terrain imaginable. Billies are solitary except during rut.\",\n  bestBait: [\"Spot white animals on cliff faces from long distance\"],\n  techniques: [\"Extreme alpine spot-and-stalk\", \"Cliff glassing with spotting scope\", \"Technical climbing approach\"],\n  feedingSchedule: \"Graze alpine grasses and lichens; feed during any daylight hours on cliff edges\",\n  sizeRange: \"125\u2013300 lbs (billies); 100\u2013200 lbs (nannies)\",\n  recordWeight: \"300 lbs\",\n  tags: [\"hunting\", \"big-game\", \"mountain\", \"extreme-terrain\", \"draw-tag\", \"physical-fitness\"],\n},\n{\n  id: \"dall-sheep\",\n  name: \"Dall Sheep\",\n  scientificName: \"Ovis dalli\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/338936681/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The pure white ghost of the Alaska ranges. A full-curl Dall ram is one of the most beautiful and difficult trophies in all of hunting. The Dall sheep hunt is a true wilderness expedition \u2014 no roads, no guides required, no motor vehicles.\",\n  habitat: \"Above treeline alpine ridges, rocky mountains, talus fields throughout Alaska\",\n  range: \"Alaska, Yukon, Northwest Territories\",\n  locations: [\"Alaska\", \"Yukon\", \"Northwest Territories\"],\n  season: \"August 10 \u2013 September 20 (Alaska); varies in Canada\",\n  bestTimes: \"Late August when summer heat breaks and rams are on open ridges before rut.\",\n  behavior: \"Rams live in bachelor groups most of year. Legal rams must have a full curl or broomed to match. Feeding on alpine sedges and grasses.\",\n  bestBait: [\"No bait \u2014 spot white sheep on ridgelines from below\"],\n  techniques: [\"DIY backpack hunt \u2014 no guide required in Alaska\", \"Alpine glassing and long stalk\", \"Ridge-to-ridge travel for 7\u201314 days\"],\n  feedingSchedule: \"Feed on alpine plants during daylight; rest on rocky ledges with commanding views\",\n  sizeRange: \"150\u2013300 lbs (rams); 100\u2013150 lbs (ewes)\",\n  recordWeight: \"340 lbs\",\n  tags: [\"hunting\", \"big-game\", \"alaska\", \"sheep\", \"diy-wilderness\", \"once-in-a-lifetime\"],\n},\n{\n  id: \"stone-sheep\",\n  name: \"Stone Sheep\",\n  scientificName: \"Ovis dalli stonei\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/20433355/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The dark-colored sheep of British Columbia and Yukon. Stone sheep are the southernmost subspecies of thinhorn sheep, darker than Dall and considered by many to be the most handsome of the four North American sheep species.\",\n  habitat: \"Remote BC and Yukon mountain ranges; steep alpine terrain above treeline\",\n  range: \"Northern British Columbia, Yukon\",\n  locations: [\"British Columbia\", \"Yukon\"],\n  season: \"August\u2013September; requires outfitter guide for non-residents\",\n  bestTimes: \"Late August on open alpine ridges before rut crowds rams together.\",\n  behavior: \"Similar to Dall but darker coloration. Legal rams judged by full curl or brooming.\",\n  bestBait: [\"Long-range glassing of open ridgelines\"],\n  techniques: [\"Guided wilderness camp hunt\", \"Alpine pack horse trip\", \"Backcountry spot-and-stalk\"],\n  feedingSchedule: \"Alpine grazer \u2014 sedges, grasses, willows\",\n  sizeRange: \"150\u2013290 lbs (rams)\",\n  recordWeight: \"300+ lbs\",\n  tags: [\"hunting\", \"big-game\", \"canada\", \"sheep\", \"grand-slam\", \"wilderness\"],\n},\n{\n  id: \"coues-whitetail\",\n  name: \"Coues Whitetail Deer\",\n  scientificName: \"Odocoileus virginianus couesi\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://static.inaturalist.org/photos/23599795/medium.jpeg\",\n  difficulty: \"expert\",\n  description: \"The 'Grey Ghost' of the desert Southwest. Coues deer are a small subspecies of whitetail in Arizona, New Mexico, and Sonora Mexico. Their small size and extreme wariness in rocky desert terrain make them pound-for-pound the hardest deer to hunt.\",\n  habitat: \"Rocky desert canyons, oak brush hillsides, desert mountain ranges above 3,500 feet\",\n  range: \"Arizona, New Mexico, Sonora Mexico\",\n  locations: [\"Arizona\", \"New Mexico\"],\n  season: \"Archery August\u2013September; rifle December\u2013January (OTC and draw depending on zone)\",\n  bestTimes: \"December rut when bucks chase does through rocky canyons.\",\n  behavior: \"Extremely spooky \u2014 detect movement at 400+ yards. Bucks have small antlers but score well in Boone & Crockett due to mass and tine length.\",\n  bestBait: [\"Water tanks in desert (archery)\", \"Mesquite pods\", \"Scrape licking\"],\n  techniques: [\"Extreme long-range glassing from high vantage\", \"Desert spot-and-stalk\", \"Water tank ambush (archery)\"],\n  feedingSchedule: \"Feed on oak mast, desert grasses, cactus fruit; crepuscular feeding patterns\",\n  sizeRange: \"60\u2013110 lbs (bucks); 50\u201380 lbs (does)\",\n  recordWeight: \"143 lbs\",\n  tags: [\"hunting\", \"big-game\", \"arizona\", \"desert\", \"grey-ghost\", \"bowhunting\"],\n},\n{\n  id: \"sitka-blacktail\",\n  name: \"Sitka Blacktail Deer\",\n  scientificName: \"Odocoileus hemionus sitkensis\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/81551934/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"Alaska's most accessible big game animal. Sitka blacktails inhabit coastal rainforest islands from Kodiak to Southeast Alaska. High deer densities and liberal bag limits (often 4 deer) make this an extraordinary hunting destination.\",\n  habitat: \"Dense coastal temperate rainforest, alpine meadows, beach edges, clear-cut regeneration\",\n  range: \"Coastal Alaska, British Columbia, Kodiak Island\",\n  locations: [\"Alaska (Southeast)\", \"Kodiak Island\", \"British Columbia coast\"],\n  season: \"August 1 \u2013 December 31 (SE Alaska); liberal limits\",\n  bestTimes: \"Rut (November) when bucks are active. Alpine glassing in August and September.\",\n  behavior: \"Less wary than other deer due to low hunting pressure. Often approach hunters out of curiosity.\",\n  bestBait: [\"No calls needed \u2014 deer are relatively trusting\", \"Rattling antlers during November rut\"],\n  techniques: [\"Beach hunting at low tide\", \"Alpine meadow glassing\", \"Still hunting rainforest\"],\n  feedingSchedule: \"Feed on beach vegetation, forbs, ferns, and Sitka spruce needles throughout day\",\n  sizeRange: \"60\u2013120 lbs (bucks); 45\u201390 lbs (does)\",\n  recordWeight: \"185 lbs\",\n  tags: [\"hunting\", \"big-game\", \"alaska\", \"coastal\", \"high-limits\", \"accessible\"],\n},\n{\n  id: \"columbia-blacktail\",\n  name: \"Columbia Blacktail Deer\",\n  scientificName: \"Odocoileus hemionus columbianus\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://static.inaturalist.org/photos/26270120/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The deer of the Pacific Coast. Columbia blacktails inhabit the foggy coastal mountains from California to British Columbia. Hunting them in thick Douglas fir and salal brush is challenging hunting that rewards stillness and patience.\",\n  habitat: \"Pacific coastal mountains, Douglas fir and hemlock forests, clear-cut brush fields, river bottoms\",\n  range: \"Pacific Coast \u2014 Northern California to British Columbia\",\n  locations: [\"California (north coast)\", \"Oregon\", \"Washington\", \"British Columbia\"],\n  season: \"Archery August; rifle October\u2013November (varies by zone)\",\n  bestTimes: \"November rut (coastal areas) when bucks leave dense cover. Clear-cut edge glassing in early season.\",\n  behavior: \"Extremely secretive \u2014 stick to dense cover. Bucks follow does into openings briefly during rut.\",\n  bestBait: [\"Doe-in-heat scent during rut\", \"Mock scrape near clear-cut edges\"],\n  techniques: [\"Still hunting dense brush\", \"Sitting above clear-cuts for glassing\", \"Rut stand hunting on trails\"],\n  feedingSchedule: \"Feed in clear-cuts and field edges at dawn and dusk; bed in dense timber\",\n  sizeRange: \"80\u2013160 lbs (bucks); 65\u2013100 lbs (does)\",\n  recordWeight: \"197 lbs\",\n  tags: [\"hunting\", \"big-game\", \"pacific-coast\", \"rainforest\", \"archery\"],\n},\n{\n  id: \"roosevelt-elk\",\n  name: \"Roosevelt Elk\",\n  scientificName: \"Cervus canadensis roosevelti\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://static.inaturalist.org/photos/1566564/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The largest elk subspecies in North America. Roosevelt elk inhabit the dense old-growth rainforests of the Pacific Coast. Their massive bodies (bulls over 1,100 lbs) and remote habitat make them one of the most challenging elk to hunt.\",\n  habitat: \"Old-growth coastal rainforest, logged areas, river bottoms, coastal meadows\",\n  range: \"Olympic Peninsula (WA), Coast Range (OR/CA), Vancouver Island (BC)\",\n  locations: [\"Washington (Olympic Peninsula)\", \"Oregon (coast)\", \"California (north)\", \"British Columbia\"],\n  season: \"Archery August\u2013September; rifle October\u2013November (most require draw)\",\n  bestTimes: \"Rut September on Olympic Peninsula. Early season before logging road hunting pressure.\",\n  behavior: \"Massive bulls bugle in September but dense rainforest makes calling difficult. Less visible than Rocky Mountain elk.\",\n  bestBait: [\"Cow calls in dense timber\", \"Bull bugles to locate\"],\n  techniques: [\"Still hunting logging roads\", \"Calling in old-growth pockets\", \"River bottom ambush\"],\n  feedingSchedule: \"Graze open meadows and clear-cuts; bed in old-growth during midday\",\n  sizeRange: \"700\u20131,100 lbs (bulls); 500\u2013700 lbs (cows)\",\n  recordWeight: \"1,100 lbs\",\n  tags: [\"hunting\", \"big-game\", \"pacific-northwest\", \"elk\", \"rainforest\", \"largest-elk\"],\n},\n{\n  id: \"tule-elk\",\n  name: \"Tule Elk\",\n  scientificName: \"Cervus canadensis nannodes\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/241435633/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"California's endemic elk, once nearly extinct. Tule elk are managed in herds across California. The annual draw hunts are among the most sought-after tags in the state, especially at prime locations like the Cache Creek and Grizzly Island herds.\",\n  habitat: \"Coastal prairie, inland valleys, tule marshes, grasslands\",\n  range: \"California only\",\n  locations: [\"California (Grizzly Island, Cache Creek, Owens Valley, Point Reyes)\"],\n  season: \"September\u2013October; all tags via draw lottery\",\n  bestTimes: \"Rut peak late September \u2013 early October. Bulls are vocal and less wary.\",\n  behavior: \"California's smallest elk subspecies but dramatic rut. Bulls bugle and gather harems on open grasslands.\",\n  bestBait: [\"Cow calls during rut\", \"Decoys on open terrain\"],\n  techniques: [\"Open grassland spot-and-stalk\", \"Rut calling to herd bulls\", \"Field edge blinds\"],\n  feedingSchedule: \"Graze grasslands morning and evening; bed in brush midday\",\n  sizeRange: \"400\u2013700 lbs (bulls); 300\u2013450 lbs (cows)\",\n  recordWeight: \"750 lbs\",\n  tags: [\"hunting\", \"big-game\", \"california\", \"endemic\", \"draw-tag\", \"elk\"],\n},\n{\n  id: \"javelina\",\n  name: \"Javelina / Collared Peccary\",\n  scientificName: \"Pecari tajacu\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/336070139/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The desert pig of the Southwest. Javelina are not actually pigs but are closely related. They travel in tight family groups (herds of 6\u201315) and have an excellent sense of smell. January\u2013February hunts in Arizona desert are a rite of passage for new hunters.\",\n  habitat: \"Sonoran desert, prickly pear cactus flats, desert washes, thorny brush\",\n  range: \"Arizona, New Mexico, Texas (south)\",\n  locations: [\"Arizona\", \"New Mexico\", \"Texas\"],\n  season: \"January\u2013March (AZ Jan\u2013Feb collared); some areas year-round\",\n  bestTimes: \"Morning and late afternoon when herds feed on prickly pear. Cold winter mornings find them sunning on rocky hillsides.\",\n  behavior: \"Rely heavily on smell \u2014 approach from downwind. Alert whistle warning bark. Musk gland on back emits strong odor.\",\n  bestBait: [\"Prickly pear cactus pads\", \"Cattle water tanks\"],\n  techniques: [\"Spot-and-stalk desert washes\", \"Water tank ambush\", \"Predator call (works occasionally)\"],\n  feedingSchedule: \"Feed on prickly pear, roots, bulbs, and cactus; most active morning and evening\",\n  sizeRange: \"35\u201365 lbs\",\n  recordWeight: \"75 lbs\",\n  tags: [\"hunting\", \"big-game\", \"desert\", \"arizona\", \"beginner\", \"over-the-counter\"],\n},\n{\n  id: \"gray-wolf\",\n  name: \"Gray Wolf\",\n  scientificName: \"Canis lupus\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/43410580/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The most challenging calling pursuit in North America. When wolf seasons are open, calling in a pack requires exceptional patience and skill. Idaho, Montana, and Wyoming offer wolf hunting when populations support harvest.\",\n  habitat: \"Wilderness forests, river drainages, anywhere elk and deer are present\",\n  range: \"Montana, Idaho, Wyoming, Minnesota, Wisconsin, Michigan (when seasons open)\",\n  locations: [\"Montana\", \"Idaho\", \"Wyoming\"],\n  season: \"Varies by state and year; check current regulations \u2014 seasons open and close based on population\",\n  bestTimes: \"Winter when wolves are more visible and packs are active on snow.\",\n  behavior: \"Travel in packs of 4\u201312 animals. Extraordinarily intelligent and wary. Respond to howls and prey distress calls.\",\n  bestBait: [\"Prey distress calls (elk, moose calf)\", \"Wolf howls\", \"Bait carcass (where legal)\"],\n  techniques: [\"Electronic calling setup\", \"Snowmobile/snow access to remote areas\", \"Calling from elevated terrain\"],\n  feedingSchedule: \"Hunt cooperatively in packs; kill every 3\u20137 days as pack\",\n  sizeRange: \"70\u2013130 lbs; largest males to 175 lbs\",\n  recordWeight: \"175 lbs (Alaska)\",\n  tags: [\"hunting\", \"big-game\", \"predator\", \"calling\", \"wilderness\", \"rare\"],\n},\n{\n  id: \"american-alligator\",\n  name: \"American Alligator\",\n  scientificName: \"Alligator mississippiensis\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/446571555/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The prehistoric apex predator of the southeastern United States. Alligator hunting is one of the most unique hunting experiences in North America \u2014 typically done at night by spotlight from a boat, with a bang stick or bow.\",\n  habitat: \"Freshwater lakes, rivers, swamps, bayous, brackish marshes\",\n  range: \"Florida, Louisiana, Georgia, Alabama, Mississippi, South Carolina, Texas\",\n  locations: [\"Florida\", \"Louisiana\", \"Georgia\", \"Texas\", \"Alabama\", \"Mississippi\", \"South Carolina\"],\n  season: \"Late August \u2013 October (varies by state); tag lottery systems\",\n  bestTimes: \"Night hunting by spotlight \u2014 gators' eyes reflect red/orange. First night of season tags large animals.\",\n  behavior: \"Territorial males grow enormous over decades. Bellow during mating season. Most active at night.\",\n  bestBait: [\"Hanging bait (chicken, fish) 18 inches above water\", \"Spotlight reflection eyes\"],\n  techniques: [\"Spotlight boat hunting at night\", \"Set line with treble hook bait\", \"Bow and arrow then dispatch with bang stick\"],\n  feedingSchedule: \"Most active at night; dawn feeding common; digest prey slowly between large meals\",\n  sizeRange: \"8\u201314 feet; 200\u2013800 lbs for legal-sized animals\",\n  recordWeight: \"1,011.5 lbs (Louisiana)\",\n  tags: [\"hunting\", \"big-game\", \"nocturnal\", \"southeastern-us\", \"prehistoric\", \"unique\"],\n},\n{\n  id: \"nilgai-texas\",\n  name: \"Nilgai (Texas)\",\n  scientificName: \"Boselaphus tragocamelus\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/489655167/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"Asia's blue bull \u2014 now wild in Texas. Nilgai were released on the King Ranch in the 1920s and now number over 30,000 wild animals in South Texas. The largest antelope species in Asia, their exotic origin and athletic size make for exceptional South Texas hunting.\",\n  habitat: \"Thorn scrub, mesquite brush, South Texas ranches, coastal plains\",\n  range: \"South Texas (wild population); King Ranch and surrounding counties\",\n  locations: [\"Texas (Kenedy, Brooks, Hidalgo, Cameron counties)\"],\n  season: \"Year-round; no bag limit on most private land\",\n  bestTimes: \"November\u2013February rut when blue bulls are most visible and active on brush edges.\",\n  behavior: \"Extremely tough animals requiring precise shot placement. Bulls turn steel-blue at maturity.\",\n  bestBait: [\"South Texas brush clearing at feeders\", \"Sendero (shooting lane) ambushes\"],\n  techniques: [\"Sendero stand hunting\", \"Spot-and-stalk brush country\", \"Tower blind over feeder\"],\n  feedingSchedule: \"Graze and browse throughout day in scrub brush; come to feeders predictably\",\n  sizeRange: \"250\u2013700 lbs (bulls); 200\u2013450 lbs (cows)\",\n  recordWeight: \"750 lbs\",\n  tags: [\"hunting\", \"big-game\", \"texas\", \"exotic\", \"south-texas\", \"asia-origin\"],\n},\n{\n  id: \"axis-deer-texas\",\n  name: \"Axis Deer (Chital)\",\n  scientificName: \"Axis axis\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/261197112/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"India's most beautiful deer, now thriving wild in Texas. Axis deer are considered by many the most stunning deer in the world \u2014 spotted coats and lyre-shaped antlers in velvet year-round. They drop antlers on an individual schedule, meaning hard-antlered bucks can be found any month.\",\n  habitat: \"Hill Country cedar and live oak, river bottom brush, Texas ranch country\",\n  range: \"Texas Hill Country (free-ranging), Hawaii (limited)\",\n  locations: [\"Texas (Kerr, Kimble, Llano, Mason, Edwards counties)\"],\n  season: \"Year-round on most Texas private land; no season restriction for exotic\",\n  bestTimes: \"June\u2013July rut when bucks are vocal and aggressive. Early morning feeders year-round.\",\n  behavior: \"Rut at any time of year; rutting stags bark loudly. Live in herds. Very social \u2014 large groups common.\",\n  bestBait: [\"Corn feeders\", \"Food plots\", \"Water sources\"],\n  techniques: [\"Feeder stand hunting\", \"Hill Country spot-and-stalk\", \"Morning glassing from high ground\"],\n  feedingSchedule: \"Feed morning and evening; predictable feeder visits\",\n  sizeRange: \"130\u2013250 lbs (stags); 90\u2013130 lbs (does)\",\n  recordWeight: \"270 lbs\",\n  tags: [\"hunting\", \"big-game\", \"texas\", \"exotic\", \"year-round\", \"spotted\"],\n},\n{\n  id: \"sika-deer-texas\",\n  name: \"Sika Deer\",\n  scientificName: \"Cervus nippon\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/186070135/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"A miniature elk from Japan and China, now wild in Texas and Maryland. Sika stags produce a haunting, elk-like bugle during the rut that is unmistakable. Maryland's Eastern Shore has the only US population that inhabits dense marshes.\",\n  habitat: \"Texas Hill Country cedar, Maryland coastal marshes and woodlands\",\n  range: \"Texas Hill Country (exotic ranches), Maryland Eastern Shore (wild)\",\n  locations: [\"Texas\", \"Maryland (Assateague Island and Eastern Shore)\"],\n  season: \"Maryland: Sept\u2013Jan; Texas: year-round on private land\",\n  bestTimes: \"September\u2013October rut when stags bugle. Maryland swamp hunting at dawn.\",\n  behavior: \"Stags bugle like small elk during September\u2013October rut. Herd with multiple does. Maryland sika live in dense marsh.\",\n  bestBait: [\"Cow elk calls\", \"Sika bugle calls\", \"Corn feeder (Texas)\"],\n  techniques: [\"Calling during rut\", \"Maryland marshland stand\", \"Texas Hill Country glassing\"],\n  feedingSchedule: \"Graze forest openings and field edges at dawn and dusk\",\n  sizeRange: \"90\u2013175 lbs (stags); 60\u2013100 lbs (does)\",\n  recordWeight: \"200 lbs\",\n  tags: [\"hunting\", \"big-game\", \"exotic\", \"texas\", \"maryland\", \"bugling\"],\n},\n{\n  id: \"blackbuck-antelope\",\n  name: \"Blackbuck Antelope\",\n  scientificName: \"Antilope cervicapra\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/321065501/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"One of the fastest antelopes in the world \u2014 can sustain speeds over 50 mph. Native to India, blackbucks are now wild in South Texas. The dramatic black and white coloring of mature bucks and impossibly long spiral horns make them prized trophies.\",\n  habitat: \"Open Texas Hill Country grasslands, dry creek drainages, open brush\",\n  range: \"Texas (Hill Country, south Texas coastal grasslands)\",\n  locations: [\"Texas (Kerr, Gillespie, Bexar counties)\"],\n  season: \"Year-round (exotic, no regulations on private Texas land)\",\n  bestTimes: \"March\u2013April rut when bucks mark territories and challenge rivals.\",\n  behavior: \"Open-country herd animal. Bucks fight with spiraling horns. Extremely fast \u2014 require rifle shots under 300 yards.\",\n  bestBait: [\"No bait \u2014 open-country stalking\"],\n  techniques: [\"Long-range open country stalk\", \"High-fence trophy hunt\", \"Shooting from blind over grassland\"],\n  feedingSchedule: \"Graze open grasslands during daylight hours\",\n  sizeRange: \"55\u201395 lbs (bucks); 40\u201365 lbs (does)\",\n  recordWeight: \"100+ lbs\",\n  tags: [\"hunting\", \"big-game\", \"texas\", \"exotic\", \"india-origin\", \"fast\"],\n},\n{\n  id: \"aoudad-barbary-sheep\",\n  name: \"Aoudad / Barbary Sheep\",\n  scientificName: \"Ammotragus lervia\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/110535403/medium.jpeg\",\n  difficulty: \"intermediate\",\n  description: \"The wild sheep of North Africa \u2014 now wild in West Texas, New Mexico, and the Florida Panhandle. Aoudad are superb wild sheep hunts that provide a taste of dangerous-ground African hunting without leaving the US. Rocky canyon country hunting is technical and demanding.\",\n  habitat: \"Rocky canyon country, desert mountains, rimrock escarpments \u2014 exactly like their native Atlas Mountains\",\n  range: \"Trans-Pecos Texas, New Mexico, Florida Panhandle (introduced)\",\n  locations: [\"Texas (Trans-Pecos)\", \"New Mexico\", \"California (Monterey)\"],\n  season: \"Year-round on private land; public land seasons vary\",\n  bestTimes: \"November\u2013January rut when rams are more active and visible on rocky ridges.\",\n  behavior: \"Extremely agile on rocky terrain. Fleshy fringe mane on chest and legs. Live in bands of 5\u201320 animals.\",\n  bestBait: [\"Long-range glassing of rimrock cliffs\"],\n  techniques: [\"Canyon rimrock glassing\", \"Technical spot-and-stalk on rocky terrain\", \"High desert canyon hunting\"],\n  feedingSchedule: \"Graze grasses and browse desert shrubs; feed morning and evening\",\n  sizeRange: \"100\u2013310 lbs (rams); 70\u2013175 lbs (ewes)\",\n  recordWeight: \"320+ lbs\",\n  tags: [\"hunting\", \"big-game\", \"texas\", \"exotic\", \"rocky-terrain\", \"africa-origin\"],\n},\n{\n  id: \"fallow-deer\",\n  name: \"Fallow Deer\",\n  scientificName: \"Dama dama\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/128386918/medium.jpeg\",\n  difficulty: \"beginner\",\n  description: \"One of the world's most widely distributed deer. Fallow deer's distinctive palmate antlers and spotted coat make them instantly recognizable. Found on every continent except Antarctica, they are a popular hunting target in Texas, New Zealand, Australia, Europe and beyond.\",\n  habitat: \"Mixed woodland and grassland; parkland estates; Texas brush country; New Zealand hill country\",\n  range: \"Texas (exotic ranches), New Zealand, Australia, Europe, South Africa\",\n  locations: [\"Texas\", \"New Zealand\", \"Australia\", \"United Kingdom\", \"South Africa\"],\n  season: \"Year-round (Texas); varies by country\",\n  bestTimes: \"October rut ('the rut roar') when bucks engage in dramatic bellowing contests.\",\n  behavior: \"Rut is characterized by groaning/belching vocalizations. Bucks create 'leks' where they display for does.\",\n  bestBait: [\"Fallow buck grunt call\", \"Corn feeders (Texas)\"],\n  techniques: [\"Stand hunting over scrape\", \"Open country stalk\", \"Spot-and-stalk in New Zealand hill country\"],\n  feedingSchedule: \"Graze morning and evening; predictable on agricultural fields\",\n  sizeRange: \"90\u2013220 lbs (bucks); 60\u2013110 lbs (does)\",\n  recordWeight: \"260 lbs\",\n  tags: [\"hunting\", \"big-game\", \"worldwide\", \"exotic\", \"palmate-antlers\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// UPLAND / SMALL GAME \u2014 ADDITIONAL\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"ruffed-grouse\",\n  name: \"Ruffed Grouse\",\n  scientificName: \"Bonasa umbellus\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://static.inaturalist.org/photos/440496544/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The king of upland game birds in the Northeast and Great Lakes. Ruffed grouse flush explosively from dense aspen cover and require lightning-quick instinctive shooting. Hunting them over a pointing or flushing dog in colorful autumn aspen forests is a celebrated tradition.\",\n  habitat: \"Young aspen groves, alder thickets, apple orchards, mixed hardwood edges\",\n  range: \"Northern US (Appalachians, Great Lakes, New England), Canada\",\n  locations: [\"Maine\", \"Minnesota\", \"Wisconsin\", \"Michigan\", \"Vermont\", \"New Hampshire\", \"Pennsylvania\", \"New York\"],\n  season: \"September\u2013December (varies by state)\",\n  bestTimes: \"Peak aspen leaf drop (October) when birds concentrate near buds. Cold mornings after frost.\",\n  behavior: \"Drum on logs to establish territory. Roost in snow burrows in winter. Explosive flush from dense brush.\",\n  bestBait: [\"Pointing dog in aspen cover\", \"Flushing dog in alder thickets\"],\n  techniques: [\"Slow still hunting with dog\", \"Walk aspen corridors and flush\", \"Following grouse drumming logs\"],\n  feedingSchedule: \"Feed on aspen buds, berries, insects; most active mid-morning and mid-afternoon\",\n  sizeRange: \"1\u20131.5 lbs\",\n  recordWeight: \"2.3 lbs\",\n  tags: [\"hunting\", \"small-game\", \"upland\", \"northeast\", \"dog-hunting\", \"aspen\"],\n},\n{\n  id: \"sharp-tailed-grouse\",\n  name: \"Sharp-tailed Grouse\",\n  scientificName: \"Tympanuchus phasianellus\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://static.inaturalist.org/photos/16142680/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The classic grouse of the northern prairies. Sharp-tails gather on leks in spring to perform elaborate courtship dances. Fall hunters walk them up in native prairie grasslands and brushy draws from Montana to Manitoba.\",\n  habitat: \"Native prairie grassland, brushy draws, rose bush patches, agricultural edges\",\n  range: \"Northern Great Plains, Canadian prairies\",\n  locations: [\"Montana\", \"North Dakota\", \"South Dakota\", \"Wyoming\", \"Colorado\", \"Alaska\", \"Manitoba\", \"Saskatchewan\"],\n  season: \"September\u2013December (varies by state)\",\n  bestTimes: \"Cool early October mornings. Follow birds from food sources in grain fields to brush cover.\",\n  behavior: \"Hold well for pointing dogs. Flock together in winter. Spectacular lek dancing in April.\",\n  bestBait: [\"Pointing dog in prairie grass\", \"Walk-up along brushy draws\"],\n  techniques: [\"Pointing dog in native grass\", \"Walk-up flushing with dogs\", \"Prairie edge hunting\"],\n  feedingSchedule: \"Feed in grain fields morning and evening; loaf in brush midday\",\n  sizeRange: \"1.5\u20132 lbs\",\n  recordWeight: \"3 lbs\",\n  tags: [\"hunting\", \"small-game\", \"prairie\", \"dog-hunting\", \"lek\", \"plains\"],\n},\n{\n  id: \"greater-sage-grouse\",\n  name: \"Greater Sage-Grouse\",\n  scientificName: \"Centrocercus urophasianus\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/35202960/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"North America's largest grouse species, named for their dependence on sagebrush. The spring lek strutting display of males \u2014 inflating yellow air sacs on their chest \u2014 is one of North America's most spectacular wildlife spectacles. Sage grouse populations are declining.\",\n  habitat: \"Big sagebrush country \u2014 Wyoming and Great Basin; intermittent open grassland\",\n  range: \"Wyoming, Montana, Idaho, Nevada, Colorado, Oregon, Washington\",\n  locations: [\"Wyoming\", \"Montana\", \"Idaho\", \"Nevada\", \"Colorado\", \"Oregon\"],\n  season: \"September\u2013October; conservative limits due to population concerns\",\n  bestTimes: \"Early morning in September when birds concentrate in sagebrush draws and creek bottoms.\",\n  behavior: \"Dependent on sagebrush \u2014 eat almost exclusively sage in winter. Lek gathering in spring is spectacular.\",\n  bestBait: [\"Dog work in sagebrush draws\"],\n  techniques: [\"Pointing dog in big sagebrush\", \"Slow walk-up hunting\", \"Creek bottom concentrate searches\"],\n  feedingSchedule: \"Feed on sagebrush tips and leaves; move to water morning and evening\",\n  sizeRange: \"3\u20138 lbs (males largest, up to 7 lbs)\",\n  recordWeight: \"8.5 lbs\",\n  tags: [\"hunting\", \"small-game\", \"sagebrush\", \"western\", \"lek\", \"largest-grouse\"],\n},\n{\n  id: \"dusky-grouse\",\n  name: \"Dusky Grouse / Blue Grouse\",\n  scientificName: \"Dendragapus obscurus\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://static.inaturalist.org/photos/42903993/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The grouse of the Rocky Mountain high country. Often called 'fool hens,' blue grouse are famous for their tameness and allow very close approach. Elk hunters commonly encounter them in September and can bag a limit for camp meat with a .22 pistol.\",\n  habitat: \"Subalpine conifer forest, mountain ridges, alpine meadow edges, logged burns\",\n  range: \"Rocky Mountains from New Mexico to British Columbia\",\n  locations: [\"Colorado\", \"Wyoming\", \"Montana\", \"Idaho\", \"Utah\", \"New Mexico\", \"British Columbia\"],\n  season: \"September\u2013November\",\n  bestTimes: \"September during elk season when birds are abundant in mountain conifer. Alpine morning feeding.\",\n  behavior: \"Extremely tame \u2014 will sit in a tree while you approach. Perform a low-pitched hooting display in spring.\",\n  bestBait: [\"No bait needed \u2014 walk-up hunting\"],\n  techniques: [\"Walk-up along mountain ridges\", \"Incidental hunting during elk/deer season\", \"Dog work not required\"],\n  feedingSchedule: \"Feed on Douglas fir and pine needles in winter; conifer berries and insects in summer\",\n  sizeRange: \"2\u20133.5 lbs\",\n  recordWeight: \"4 lbs\",\n  tags: [\"hunting\", \"small-game\", \"mountain\", \"fool-hen\", \"easy\", \"camp-meat\"],\n},\n{\n  id: \"spruce-grouse\",\n  name: \"Spruce Grouse\",\n  scientificName: \"Falcipennis canadensis\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/129917066/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The 'fool hen' of the boreal forest. Spruce grouse are notorious for their tameness \u2014 a hunter can walk within arm's reach of one and it may simply look at them curiously. Found throughout the boreal forest of Canada and northern states.\",\n  habitat: \"Dense spruce, fir and pine forest; boreal muskeg edges; logging roads\",\n  range: \"Alaska, Canada, northern Maine, Minnesota, Michigan\",\n  locations: [\"Alaska\", \"Maine\", \"Minnesota\", \"Michigan\", \"Canada (all provinces)\"],\n  season: \"September\u2013December\",\n  bestTimes: \"September and October when birds are foraging on conifer berries along logging roads.\",\n  behavior: \"Extraordinarily tame \u2014 will not flush even when approached closely. Roost in conifers.\",\n  bestBait: [\"Walk-up hunting \u2014 no attractants needed\"],\n  techniques: [\"Walk-up hunting in spruce forest\", \"Road hunting (spotting from vehicle)\", \"No dog required\"],\n  feedingSchedule: \"Feed on spruce and fir needles in fall/winter; insects and berries in summer\",\n  sizeRange: \"0.8\u20131.3 lbs\",\n  recordWeight: \"1.8 lbs\",\n  tags: [\"hunting\", \"small-game\", \"boreal\", \"canada\", \"fool-hen\", \"beginner\"],\n},\n{\n  id: \"willow-ptarmigan\",\n  name: \"Willow Ptarmigan\",\n  scientificName: \"Lagopus lagopus\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/590999108/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"Alaska's state bird and premier upland game target. Ptarmigan turn completely white in winter and live in some of the most remote Arctic terrain on the planet. Summer tundra hunting for ptarmigan is an unforgettable experience.\",\n  habitat: \"Arctic and subarctic tundra, alpine willow, alder drainages, mountainous terrain\",\n  range: \"Alaska, Canada, Greenland, northern Europe\",\n  locations: [\"Alaska\", \"Yukon\", \"Northwest Territories\", \"Nunavut\"],\n  season: \"August 10 \u2013 April 30 (Alaska); very liberal limits (10/day, 20 in possession)\",\n  bestTimes: \"August\u2013September when birds are in mixed summer/winter plumage and concentrated on berry patches.\",\n  behavior: \"Flock together in winter. Turn white for camouflage on snow. Run ahead of hunters before flushing.\",\n  bestBait: [\"Dog work in willow thickets\", \"Walk-up along tundra streams\"],\n  techniques: [\"Pointing dog in willow\", \"Walk-up hunting\", \"ATV or float plane access\"],\n  feedingSchedule: \"Feed on willow buds, berries, tundra sedges throughout day in short Arctic daylight\",\n  sizeRange: \"14\u201318 oz\",\n  recordWeight: \"1.5 lbs\",\n  tags: [\"hunting\", \"small-game\", \"alaska\", \"arctic\", \"tundra\", \"state-bird\"],\n},\n{\n  id: \"greater-prairie-chicken\",\n  name: \"Greater Prairie Chicken\",\n  scientificName: \"Tympanuchus cupido\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://static.inaturalist.org/photos/4375568/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"A once-abundant prairie bird now a conservation priority. Greater prairie chickens perform spectacular booming lek dances in spring. Limited hunting opportunities in Kansas and Nebraska are managed carefully to protect this iconic Great Plains species.\",\n  habitat: \"Tall-grass prairie, native grassland remnants, CRP fields, prairie sand hills\",\n  range: \"Kansas, Nebraska, South Dakota, Oklahoma (limited populations)\",\n  locations: [\"Kansas\", \"Nebraska\", \"South Dakota\", \"Oklahoma\"],\n  season: \"November\u2013December (very limited); check Kansas and Nebraska regulations carefully\",\n  bestTimes: \"Cold November days concentrating birds near food sources and woody cover.\",\n  behavior: \"Flock in winter. Spring booming leks are spectacular. Flush explosively but fly far.\",\n  bestBait: [\"Pointing dog in native prairie\"],\n  techniques: [\"Pointing dog in tall grass\", \"Walk-up hunting prairie edges\", \"Liberal walking required \u2014 birds run\"],\n  feedingSchedule: \"Feed on waste grain, seeds, berries; morning and evening most active\",\n  sizeRange: \"2\u20132.5 lbs\",\n  recordWeight: \"3 lbs\",\n  tags: [\"hunting\", \"small-game\", \"prairie\", \"conservation\", \"limited\", \"tall-grass\"],\n},\n{\n  id: \"chukar-partridge\",\n  name: \"Chukar Partridge\",\n  scientificName: \"Alectoris chukar\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://static.inaturalist.org/photos/657374254/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The bird that punishes hunters. Chukar live on brutal, near-vertical rocky hillsides in the arid West. They run uphill and fly downhill, forcing hunters to hunt above them. A conditioned hunter and fit dog will find exceptional shooting but will earn every bird with burning legs.\",\n  habitat: \"Rocky steep slopes, rimrock, sagebrush/cheatgrass hillsides, canyon walls\",\n  range: \"Idaho, Nevada, Oregon, Washington, Montana, Utah \u2014 introduced from Asia\",\n  locations: [\"Idaho\", \"Nevada\", \"Oregon\", \"Washington\", \"Montana\", \"Utah\"],\n  season: \"September\u2013January (varies by state)\",\n  bestTimes: \"Cold late-October through December when birds concentrate on rocky south-facing slopes with water nearby.\",\n  behavior: \"Run uphill relentlessly before flushing. Must hunt ABOVE birds \u2014 they always fly downhill. Contact call is distinctive 'chuck-chuck-chukar.'\",\n  bestBait: [\"Dog work on rimrock slopes\"],\n  techniques: [\"Hunt above birds on steep slopes\", \"Pointing dog in rocky terrain\", \"Aggressive physical fitness required\"],\n  feedingSchedule: \"Morning and evening feeding on cheatgrass seeds, grains near water\",\n  sizeRange: \"0.8\u20131.3 lbs\",\n  recordWeight: \"1.8 lbs\",\n  tags: [\"hunting\", \"small-game\", \"western\", \"steep-terrain\", \"physical\", \"import\"],\n},\n{\n  id: \"gray-partridge\",\n  name: \"Hungarian Partridge (Gray Partridge)\",\n  scientificName: \"Perdix perdix\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/344182442/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The 'Hun' \u2014 a European game bird naturalized in the northern Great Plains. Hungarian partridge hold well for dogs and coveys explode in multiple directions when flushed. Some of the best hunting occurs in Montana's golden grain fields after harvest.\",\n  habitat: \"Grain fields, native prairie edges, shelterbelts, CRP grassland \u2014 needs diverse cover\",\n  range: \"Montana, North Dakota, South Dakota, Wyoming, Alberta, Saskatchewan\",\n  locations: [\"Montana\", \"North Dakota\", \"South Dakota\", \"Wyoming\", \"Alberta\"],\n  season: \"September\u2013December\",\n  bestTimes: \"Late September into October when grass seeds are ripe and coveys are foraging.\",\n  behavior: \"Coveys flush explosively and scatter. Reconvene with soft calling. Hold well for pointing dogs.\",\n  bestBait: [\"Pointing dog in grain stubble\"],\n  techniques: [\"Pointing dog in grain stubble\", \"Walk-up shelterbelt edges\", \"Hunt into wind for dog scenting\"],\n  feedingSchedule: \"Feed morning and late afternoon on grain stubble and native seeds\",\n  sizeRange: \"0.7\u20131.1 lbs\",\n  recordWeight: \"1.3 lbs\",\n  tags: [\"hunting\", \"small-game\", \"plains\", \"dog-hunting\", \"european-import\", \"covey\"],\n},\n{\n  id: \"scaled-quail\",\n  name: \"Scaled Quail (Blue Quail)\",\n  scientificName: \"Callipepla squamata\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/179165998/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The long-distance runner of quail hunting. Scaled quail are notorious for running ahead of dogs and hunters through sparse desert scrub. Unlike bobwhite they rarely hold tight. But when a covey finally flushes in the desert grasslands of Texas or New Mexico, the shooting is explosive.\",\n  habitat: \"Arid desert grassland, yucca flats, mesquite grassland, desert scrub below 6,000 feet\",\n  range: \"Texas (west), New Mexico, Colorado, Arizona, Oklahoma (panhandle)\",\n  locations: [\"Texas\", \"New Mexico\", \"Colorado\", \"Arizona\"],\n  season: \"October\u2013February\",\n  bestTimes: \"Late season (January) when cold weather concentrates birds near water and food sources.\",\n  behavior: \"Run ahead of hunters for hundreds of yards. Massive coveys of 40\u2013100 birds in good years.\",\n  bestBait: [\"Water development (cattle tanks)\"],\n  techniques: [\"Dog work in desert grass \u2014 expect lots of running\", \"Ambushing running birds ahead\", \"Walk-up hunting in milo fields\"],\n  feedingSchedule: \"Morning and afternoon feeding on seeds, insects; water essential in arid country\",\n  sizeRange: \"5\u20136 oz\",\n  recordWeight: \"8 oz\",\n  tags: [\"hunting\", \"small-game\", \"desert\", \"quail\", \"runner\", \"southwest\"],\n},\n{\n  id: \"gambels-quail\",\n  name: \"Gambel's Quail\",\n  scientificName: \"Callipepla gambelii\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://static.inaturalist.org/photos/166080190/medium.jpeg\",\n  difficulty: \"beginner\",\n  description: \"The plumed desert quail of the Sonoran Desert. Gambel's quail with their distinctive topknot plumes are a symbol of the American Southwest. They concentrate around desert washes and riparian areas, making hunting enjoyable and productive on good water years.\",\n  habitat: \"Sonoran desert washes, saguaro cactus hillsides, desert riparian corridors\",\n  range: \"Arizona, New Mexico, Nevada, Utah, California (Mojave), Baja Mexico\",\n  locations: [\"Arizona\", \"New Mexico\", \"Nevada\", \"Utah\", \"California\"],\n  season: \"October\u2013February\",\n  bestTimes: \"November\u2013December when birds concentrate on desert washes near water.\",\n  behavior: \"Coveys of 15\u201340 birds. Run readily but flush when pressed. Respond to assembly calls.\",\n  bestBait: [\"Water development\", \"Grain near desert washes\"],\n  techniques: [\"Pointing dog in desert wash\", \"Walk-up hunting washes\", \"Sunflower field ambush\"],\n  feedingSchedule: \"Feed on cactus seeds, forbs, prickly pear; water-dependent\",\n  sizeRange: \"5\u20137 oz\",\n  recordWeight: \"9 oz\",\n  tags: [\"hunting\", \"small-game\", \"desert\", \"quail\", \"topknot\", \"arizona\"],\n},\n{\n  id: \"california-quail\",\n  name: \"California Quail\",\n  scientificName: \"Callipepla californica\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/443842323/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"California's state bird and a prized upland game bird of the Pacific Coast. Valley quail inhabit California's oak woodlands and chaparral. They run and fly in large coveys and offer fast shooting in beautiful terrain.\",\n  habitat: \"Oak chaparral, coastal sage scrub, agricultural edges, brushy hillsides\",\n  range: \"California, Oregon, Washington, Nevada, Idaho, British Columbia\",\n  locations: [\"California\", \"Oregon\", \"Washington\", \"Nevada\", \"Idaho\"],\n  season: \"October\u2013January (California)\",\n  bestTimes: \"Fog-free October and November mornings. Birds concentrate near water in dry years.\",\n  behavior: \"Large coveys of 30\u201375 birds. Perching on fence posts and wires. Topknot plume distinguishes males.\",\n  bestBait: [\"Grain near brush\", \"Water sources\"],\n  techniques: [\"Dog hunting in oak woodlands\", \"Walk-up hunting chaparral edges\", \"Pointing in brushy draws\"],\n  feedingSchedule: \"Feed morning and afternoon on seeds, forbs, clover\",\n  sizeRange: \"5\u20137 oz\",\n  recordWeight: \"9 oz\",\n  tags: [\"hunting\", \"small-game\", \"california\", \"state-bird\", \"chaparral\"],\n},\n{\n  id: \"mearns-quail\",\n  name: \"Mearns' / Montezuma Quail\",\n  scientificName: \"Cyrtonyx montezumae\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/294405452/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The most unique quail in North America. Mearns' quail have a striking harlequin face pattern and round body. They freeze and 'squat' when approached, making them exceptional for pointing dogs. Hunting them in Arizona's mountain oak grasslands is an extraordinary and rare experience.\",\n  habitat: \"Arizona sky island mountain grasslands, Chihuahuan desert grassland, bunch grass savannas\",\n  range: \"Arizona (sky islands), New Mexico (Chihuahuan), south Texas (sparse)\",\n  locations: [\"Arizona\", \"New Mexico\"],\n  season: \"December\u2013February\",\n  bestTimes: \"After good summer monsoon rains when grass and bulb production is high.\",\n  behavior: \"Freeze and crouch when approached \u2014 will not run like other quail. Excellent for pointing dogs.\",\n  bestBait: [\"Pointing dog in mountain grassland\"],\n  techniques: [\"Pointing dog in bunch grass\", \"Walk-up hunting\", \"Sky island mountain hunting\"],\n  feedingSchedule: \"Dig bulbs and tubers with strong curved toenails; insects and seeds\",\n  sizeRange: \"6\u20138 oz\",\n  recordWeight: \"9 oz\",\n  tags: [\"hunting\", \"small-game\", \"arizona\", \"unique\", \"pointing-dog\", \"sky-island\"],\n},\n{\n  id: \"american-woodcock\",\n  name: \"American Woodcock\",\n  scientificName: \"Scolopax minor\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://static.inaturalist.org/photos/12565675/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The timberdoodle. American woodcock are migratory shorebirds that live in alder thickets and wet woodlands. Hunting them over a pointing dog in October alder runs is a cerebral pursuit \u2014 a bird-in-the-hand is a miniature work of art with its long bill and big brown eyes.\",\n  habitat: \"Young alder thickets, wet woodland openings, river bottom poplar, dense brushy cover near moist soil\",\n  range: \"Eastern US and Canada during migration; breeds in northern states and Canada\",\n  locations: [\"Maine\", \"Wisconsin\", \"Michigan\", \"Minnesota\", \"Vermont\", \"Pennsylvania\", \"Virginia\", \"Louisiana\", \"Mississippi\"],\n  season: \"October\u2013November (most states); migration hunting in South\",\n  bestTimes: \"October migration pushes birds into alders after cold fronts. Evening sky dancing displays in spring.\",\n  behavior: \"Probe moist soil with long flexible bill to catch earthworms. Explode from dense cover and flutter on buzzing wings.\",\n  bestBait: [\"Pointing dog in wet alder runs\"],\n  techniques: [\"Pointing dog in young alder\", \"Walk-up hunting wet openings\", \"Cover ground quickly to find migrating birds\"],\n  feedingSchedule: \"Probe soil primarily at dawn and dusk when earthworms are near surface\",\n  sizeRange: \"5\u20138 oz\",\n  recordWeight: \"11 oz\",\n  tags: [\"hunting\", \"small-game\", \"migratory\", \"timberdoodle\", \"pointing-dog\", \"northeast\"],\n},\n{\n  id: \"wilsons-snipe\",\n  name: \"Wilson's Snipe\",\n  scientificName: \"Gallinago delicata\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://static.inaturalist.org/photos/105697371/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"Origin of the word 'sniper.' Wilson's snipe are fast, erratic fliers that require exceptional shooting skill. Found in wet marshes and meadows, they flush wildly and zig-zag away, making them one of the most challenging game birds to hit consistently.\",\n  habitat: \"Wet marshes, flooded meadows, prairie potholes, boggy creek edges\",\n  range: \"Throughout North America during migration; breeds in northern US and Canada\",\n  locations: [\"Louisiana\", \"Texas\", \"Florida\", \"California\", \"Minnesota\", \"North Dakota\", \"Kansas\"],\n  season: \"September\u2013February (varies by flyway)\",\n  bestTimes: \"Flooded prairie potholes after early rains. Louisiana marsh snipe are legendary.\",\n  behavior: \"Flush with rasping 'scaipe' call and zig-zag away at high speed. Drop back into grass 200 yards away.\",\n  bestBait: [\"Walk-up hunting wet meadows\"],\n  techniques: [\"Walk-up hunting flooded meadows\", \"Dog hunting edges\", \"Jump shooting flooded creek banks\"],\n  feedingSchedule: \"Probe mud with bill for invertebrates; feed mostly at dawn, dusk, and night\",\n  sizeRange: \"3\u20135 oz\",\n  recordWeight: \"7 oz\",\n  tags: [\"hunting\", \"small-game\", \"snipe\", \"difficult\", \"marsh\", \"migratory\"],\n},\n{\n  id: \"band-tailed-pigeon\",\n  name: \"Band-tailed Pigeon\",\n  scientificName: \"Patagioenas fasciata\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/4610902/medium.jpeg\",\n  difficulty: \"beginner\",\n  description: \"The largest pigeon in North America and arguably the finest table bird. Band-tailed pigeons roost in mountain conifer forests and fly to acorn-producing oaks to feed. Pass shooting them on their morning and evening flight routes provides fast wing shooting.\",\n  habitat: \"Pacific mountain conifer forest, acorn-producing oak woodlands, Pacific Coast ranges\",\n  range: \"Pacific Coast \u2014 California, Oregon, Washington, Baja Mexico\",\n  locations: [\"California\", \"Oregon\", \"Washington\", \"Arizona\", \"New Mexico\"],\n  season: \"September\u2013October (Pacific Zone); extremely limited season\",\n  bestTimes: \"Morning and evening flights between roost and food source. Post-monsoon Arizona flights (September).\",\n  behavior: \"Highly gregarious \u2014 flock in large numbers at favored acorn oaks. Fast fliers requiring long leads.\",\n  bestBait: [\"Water sources near oak groves\", \"Salt licks (pigeons crave mineral salts)\"],\n  techniques: [\"Pass shooting on flight routes\", \"Stand hunting near water and salt\", \"Decoys near feeding oaks\"],\n  feedingSchedule: \"Morning and evening feeding flights to acorn oaks and grain fields\",\n  sizeRange: \"9\u201313 oz\",\n  recordWeight: \"16 oz\",\n  tags: [\"hunting\", \"small-game\", \"pigeon\", \"pacific-coast\", \"pass-shooting\"],\n},\n{\n  id: \"white-winged-dove\",\n  name: \"White-winged Dove\",\n  scientificName: \"Zenaida asiatica\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://static.inaturalist.org/photos/57871916/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The sunflower and saguaro dove of the Southwest. White-winged doves are a prized early-season target in Texas and Arizona. Their distinctive white wing patches flash brilliantly in flight. Arizona's desert dove opener on September 1 is a beloved tradition.\",\n  habitat: \"Desert washes, mesquite grassland, sunflower and grain fields, saguaro cactus stands\",\n  range: \"Texas, Arizona, New Mexico, Florida; expanding range northward\",\n  locations: [\"Texas\", \"Arizona\", \"New Mexico\", \"Florida\"],\n  season: \"September 1 \u2013 November 15 (varies by zone)\",\n  bestTimes: \"Opening week of September before birds migrate. Water sources during desert heat.\",\n  behavior: \"Flock in large numbers near water and grain during migration. Strong fast fliers.\",\n  bestBait: [\"Sunflower fields\", \"Grain fields\", \"Water tanks\"],\n  techniques: [\"Stand near water in desert heat\", \"Grain field shooting\", \"Pass shooting on flight paths\"],\n  feedingSchedule: \"Morning grain feeding; midday water; evening feeding flight\",\n  sizeRange: \"4.5\u20136 oz\",\n  recordWeight: \"7 oz\",\n  tags: [\"hunting\", \"small-game\", \"dove\", \"desert\", \"southwest\", \"september-opener\"],\n},\n{\n  id: \"sandhill-crane\",\n  name: \"Sandhill Crane\",\n  scientificName: \"Antigone canadensis\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://static.inaturalist.org/photos/269274277/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The ribeye of the sky. Sandhill cranes are enormous birds \u2014 some standing 4 feet tall \u2014 and are widely regarded as the finest table bird in North America. Their size and call make them unmistakable. Decoying them into shotgun range requires specialized calling.\",\n  habitat: \"Shallow wetlands, grain fields, playa lakes, marshes and agricultural edges\",\n  range: \"Central flyway during migration \u2014 Nebraska, Kansas, New Mexico; Texas coast; Florida\",\n  locations: [\"Texas\", \"New Mexico\", \"Kansas\", \"Nebraska\", \"Florida\", \"Arizona\", \"Oklahoma\"],\n  season: \"Mid-October \u2013 January (varies by flyway zone)\",\n  bestTimes: \"Migration through central Texas October\u2013December. New Mexico November migration.\",\n  behavior: \"Travel in large flocks of 100\u201310,000. Use rolling purring calls. Will circle decoys for extended time.\",\n  bestBait: [\"Life-size full-body crane decoys\", \"Spinning-wing crane decoys\", \"Crane flagging\"],\n  techniques: [\"Large full-body decoy spread in harvested grain\", \"Layout blind\", \"Crane calling with specialized call\"],\n  feedingSchedule: \"Morning and evening feeding flights to waste grain fields from wetland roosts\",\n  sizeRange: \"6\u201314 lbs; 3.5\u20134.5 feet tall\",\n  recordWeight: \"14+ lbs\",\n  tags: [\"hunting\", \"waterfowl\", \"crane\", \"ribeye-sky\", \"migration\", \"calling\"],\n},\n{\n  id: \"eurasian-collared-dove\",\n  name: \"Eurasian Collared-Dove\",\n  scientificName: \"Streptopelia decaocto\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://static.inaturalist.org/photos/61919353/medium.jpeg\",\n  difficulty: \"beginner\",\n  description: \"An invasive species creating a year-round hunting opportunity across the entire United States. Eurasian collared-doves have spread from Florida to every state since their 1980s arrival. Year-round seasons, no bag limits in many states, and willingness to decoy make them ideal for beginners.\",\n  habitat: \"Urban/suburban areas, grain elevators, feedlots, agricultural communities\",\n  range: \"Entire United States, especially grain-producing regions\",\n  locations: [\"All 48 contiguous states\"],\n  season: \"Year-round in most states; no bag limit\",\n  bestTimes: \"Year-round, any time of day near grain. Heavily concentrated near grain elevators and feedlots.\",\n  behavior: \"Form large roosts near food sources. Will decoy readily to dove calls and other birds.\",\n  bestBait: [\"Grain fields\", \"Feedlot roosting trees\"],\n  techniques: [\"Pass shooting near grain elevator\", \"Decoy setup in field\", \"Still hunting roosting trees\"],\n  feedingSchedule: \"Feed throughout day on grain and seeds\",\n  sizeRange: \"5\u20137 oz\",\n  recordWeight: \"8 oz\",\n  tags: [\"hunting\", \"small-game\", \"invasive\", \"year-round\", \"no-limit\", \"beginner\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// ADDITIONAL WATERFOWL\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"blue-winged-teal\",\n  name: \"Blue-winged Teal\",\n  scientificName: \"Spatula discors\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/286292345/medium.jpeg\",\n  difficulty: \"intermediate\",\n  description: \"The first duck of fall. Blue-winged teal are early migrants, arriving in the South in August before other ducks. Special early teal seasons allow hunters to pursue them in summer weather. Their small size and fast, erratic flight make them challenging shooting.\",\n  habitat: \"Shallow freshwater marshes, prairie potholes, flooded rice fields, moist soil management areas\",\n  range: \"Breeds in prairie potholes; migrates throughout US; winters in South America\",\n  locations: [\"Texas\", \"Louisiana\", \"Arkansas\", \"Kansas\", \"Nebraska\", \"Minnesota\", \"North Dakota\"],\n  season: \"Early teal season September 1\u201315 (varies); regular season Oct\u2013Jan\",\n  bestTimes: \"Opening morning of early teal season September 1. Cool fronts push birds south quickly.\",\n  behavior: \"Travel in tight flocks at high speed. Respond well to decoys early in season before hunting pressure.\",\n  bestBait: [\"Small teal decoys\", \"Teal calls (soft peeping)\"],\n  techniques: [\"Small decoy spread in shallow marsh\", \"Jump shooting pothole edges\", \"Layout in flooded rice\"],\n  feedingSchedule: \"Feed throughout day in shallow water; morning and evening most active\",\n  sizeRange: \"8\u201312 oz\",\n  recordWeight: \"1.1 lbs\",\n  tags: [\"waterfowl\", \"teal\", \"early-season\", \"september\", \"small-duck\"],\n},\n{\n  id: \"green-winged-teal\",\n  name: \"Green-winged Teal\",\n  scientificName: \"Anas crecca\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://static.inaturalist.org/photos/112626129/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"North America's smallest dabbling duck and the fastest in level flight \u2014 clocking over 50 mph. Green-wings decoy beautifully and flock in large, tight groups that perform aerobatic maneuvers. Late-season green-wings in shallow tidal marsh are a treasured experience.\",\n  habitat: \"Shallow freshwater marshes, tidal flats, shallow creek edges, moist soil units\",\n  range: \"Breeds in northern Canada; winters across southern US\",\n  locations: [\"Louisiana\", \"Texas\", \"Arkansas\", \"California\", \"Georgia\", \"Florida\"],\n  season: \"October\u2013January (varies by flyway)\",\n  bestTimes: \"Late January cold fronts push massive flights. Tidal areas at high water concentrations.\",\n  behavior: \"Flock in tight balls performing synchronized aerial maneuvers. Decoy exceptionally well.\",\n  bestBait: [\"Small teal decoys in shallow water\"],\n  techniques: [\"Moist soil unit hunting\", \"Layout in shallow marsh\", \"Tidal flat ambush\"],\n  feedingSchedule: \"Feed on seeds in shallow water; dabble in inches of water\",\n  sizeRange: \"7\u201311 oz\",\n  recordWeight: \"1 lb\",\n  tags: [\"waterfowl\", \"teal\", \"fastest-duck\", \"shallow-water\", \"late-season\"],\n},\n{\n  id: \"northern-pintail\",\n  name: \"Northern Pintail\",\n  scientificName: \"Anas acuta\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/353707196/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The greyhound of the skies. The pintail's long elegant neck and flowing tail pin make it one of the most beautiful ducks in the world. Highly coveted by waterfowlers, pintails decoy gracefully and are the first large ducks to arrive in fall.\",\n  habitat: \"Flooded agriculture, rice fields, shallow marsh, open water edges\",\n  range: \"Breeds across Alaska and northern Canada; winters across entire southern US\",\n  locations: [\"California (Sacramento Valley)\", \"Texas\", \"Louisiana\", \"Arkansas\", \"Kansas\"],\n  season: \"October\u2013January; bag limits often restricted due to population concerns\",\n  bestTimes: \"Early October before other ducks arrive. Sacramento Valley flooded rice is legendary for pintail.\",\n  behavior: \"Decoy in with other ducks \u2014 often the first to commit. Graceful landing posture unmistakable.\",\n  bestBait: [\"Flooded rice fields\", \"Hen pintail call (soft whistle)\", \"Pintail blocks in spread\"],\n  techniques: [\"Flooded rice field blind\", \"Large decoy spread with pintail blocks\", \"Open water layout\"],\n  feedingSchedule: \"Morning and evening feeding in flooded agriculture; dabble for rice and grain\",\n  sizeRange: \"1.5\u20133 lbs\",\n  recordWeight: \"3.5 lbs\",\n  tags: [\"waterfowl\", \"duck\", \"pintail\", \"elegant\", \"coveted\", \"flooded-rice\"],\n},\n{\n  id: \"canvasback\",\n  name: \"Canvasback\",\n  scientificName: \"Aythya valisineria\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/1549/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The King Can \u2014 the most prized duck in North American waterfowling. Canvasbacks fly at 72 mph and require extreme decoy setups on open water. Known as the finest eating duck, 'can' hunting on Chesapeake Bay was once so celebrated it inspired the development of the Chesapeake Bay Retriever.\",\n  habitat: \"Large open water \u2014 Great Lakes, Chesapeake Bay, large reservoirs; dive for aquatic vegetation\",\n  range: \"Breeds in prairie potholes; winters on Great Lakes, Chesapeake, Gulf Coast\",\n  locations: [\"Maryland (Chesapeake)\", \"Michigan\", \"Wisconsin\", \"Minnesota\", \"Louisiana\", \"California\"],\n  season: \"October\u2013January; bag limit often 1/day due to population concerns\",\n  bestTimes: \"Cold January bluebird days when cans raft up in open water. Chesapeake Bay December\u2013January.\",\n  behavior: \"Dive to 30 feet for aquatic vegetation. Fly extremely fast in tight formations. Wary of small or poorly set decoys.\",\n  bestBait: [\"Large open-water can decoy rigs (60\u2013100 blocks)\"],\n  techniques: [\"Layout boat on open water\", \"Large diver decoy spread\", \"Sneak boat on calm water\"],\n  feedingSchedule: \"Daytime diving for wild celery, pondweed, and aquatic invertebrates\",\n  sizeRange: \"2\u20133.5 lbs\",\n  recordWeight: \"4 lbs\",\n  tags: [\"waterfowl\", \"diver-duck\", \"chesapeake\", \"king-can\", \"open-water\", \"prized\"],\n},\n{\n  id: \"redhead-duck\",\n  name: \"Redhead Duck\",\n  scientificName: \"Aythya americana\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://static.inaturalist.org/photos/31458727/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The gregarious diver of Laguna Madre. Redheads winter in enormous concentrations on the Laguna Madre of Texas \u2014 sometimes in flocks exceeding a million birds. Texas hunters on the Laguna have some of the most spectacular diver hunting anywhere in the world.\",\n  habitat: \"Large shallow bays, reservoirs, prairie potholes; winters heavily on Gulf Coast bays\",\n  range: \"Breeds in prairie pothole region; winters Gulf Coast, especially Laguna Madre Texas\",\n  locations: [\"Texas (Laguna Madre)\", \"Louisiana\", \"Minnesota\", \"North Dakota\", \"California\"],\n  season: \"October\u2013January\",\n  bestTimes: \"Laguna Madre December\u2013January when massive flocks are concentrated.\",\n  behavior: \"Highly gregarious \u2014 raft in massive flocks. Respond well to decoys when actively feeding.\",\n  bestBait: [\"Diver duck decoys in open bay water\"],\n  techniques: [\"Open water layout on Laguna Madre\", \"Large diver decoy spread\", \"Boat blind in bay grass\"],\n  feedingSchedule: \"Dive for aquatic vegetation, mollusks, and invertebrates during daylight\",\n  sizeRange: \"1.5\u20132.5 lbs\",\n  recordWeight: \"3 lbs\",\n  tags: [\"waterfowl\", \"diver-duck\", \"texas\", \"laguna-madre\", \"massive-concentrations\"],\n},\n{\n  id: \"lesser-scaup\",\n  name: \"Lesser Scaup (Bluebill)\",\n  scientificName: \"Aythya affinis\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/251848544/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The abundant diver of the Mississippi Flyway. Lesser scaup (bluebills) are the most numerous diving duck in North America. They decoy readily and make excellent table fare. A large 'bill flock' working a spread of offshore decoys is exciting waterfowling.\",\n  habitat: \"Open water lakes, reservoirs, bays, rivers \u2014 tolerates brackish and saltwater\",\n  range: \"Entire North America; breeds in boreal forest and tundra\",\n  locations: [\"Louisiana\", \"Texas\", \"Minnesota\", \"Wisconsin\", \"Florida\", \"California\"],\n  season: \"October\u2013January\",\n  bestTimes: \"Cold fronts pushing migration. Large flocks concentrate on open reservoirs.\",\n  behavior: \"Flock in large groups on open water. Respond well to large diver decoy spreads.\",\n  bestBait: [\"Offshore diver decoy rigs on open water\"],\n  techniques: [\"Large offshore diver spread\", \"Layout boat\", \"Boat blind on reservoir dam face\"],\n  feedingSchedule: \"Dive for invertebrates and aquatic plants in open water\",\n  sizeRange: \"1\u20132 lbs\",\n  recordWeight: \"2.2 lbs\",\n  tags: [\"waterfowl\", \"diver\", \"bluebill\", \"mississippi-flyway\", \"abundant\"],\n},\n{\n  id: \"ring-necked-duck\",\n  name: \"Ring-necked Duck\",\n  scientificName: \"Aythya collaris\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://static.inaturalist.org/photos/19393073/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The diver that hunts like a puddle duck. Ring-necks (often called 'ringbills' because their ring is on their bill, not neck) are adaptable divers that will work into small ponds and cypress swamps \u2014 unlike most divers. They come readily to decoys and provide consistent hunting.\",\n  habitat: \"Small ponds, cypress swamps, flooded timber, small lakes and reservoirs\",\n  range: \"Eastern and central North America; breeds in boreal zone\",\n  locations: [\"Louisiana\", \"Arkansas\", \"Mississippi\", \"Florida\", \"Tennessee\", \"Minnesota\"],\n  season: \"October\u2013January\",\n  bestTimes: \"Small cypress swamp potholes hold ringbills when other ducks have vacated.\",\n  behavior: \"Less wary than canvasbacks; work readily into small water decoy spreads.\",\n  bestBait: [\"Small decoy spread on swamp pocket\"],\n  techniques: [\"Small decoy spread in cypress swamp\", \"Wooded pothole hunting\", \"Mixed puddle/diver spread\"],\n  feedingSchedule: \"Dive for aquatic vegetation and invertebrates; active throughout day\",\n  sizeRange: \"1.3\u20131.8 lbs\",\n  recordWeight: \"2 lbs\",\n  tags: [\"waterfowl\", \"diver\", \"cypress-swamp\", \"adaptable\", \"consistent\"],\n},\n{\n  id: \"bufflehead\",\n  name: \"Bufflehead\",\n  scientificName: \"Bucephala albeola\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://static.inaturalist.org/photos/159782700/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"North America's smallest diving duck with an iridescent head that flashes green, purple, and white. Buffleheads are fast, acrobatic divers that are notoriously difficult to decoy. A mature drake bufflehead is a stunning bird that rewards patient hunters.\",\n  habitat: \"Open freshwater lakes and ponds; coastal bays and harbors; prefers clear water\",\n  range: \"Breeds in boreal Canada; winters across US coasts and interior\",\n  locations: [\"California\", \"Oregon\", \"Washington\", \"Maryland\", \"Virginia\", \"Louisiana\"],\n  season: \"October\u2013January\",\n  bestTimes: \"Cold bluebird days on coastal bays when concentrations form.\",\n  behavior: \"Extremely wary and fast \u2014 dive repeatedly when alarmed. Fly fast with rapid wingbeats.\",\n  bestBait: [\"Small decoys on clear-water ponds\"],\n  techniques: [\"Small spread on coastal bay\", \"Jump shooting coastal ponds\", \"Pass shooting from shoreline\"],\n  feedingSchedule: \"Dive for aquatic invertebrates and insects; active throughout day\",\n  sizeRange: \"9\u201316 oz\",\n  recordWeight: \"1.2 lbs\",\n  tags: [\"waterfowl\", \"diver\", \"smallest-diver\", \"iridescent\", \"coastal\"],\n},\n{\n  id: \"gadwall\",\n  name: \"Gadwall\",\n  scientificName: \"Mareca strepera\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/175540266/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The grey ghost \u2014 understated but excellent. Gadwalls lack the flashy plumage of mallards but make superb table fare and decoy consistently well. Their subtle gray plumage and white speculum make them identifiable in the air. Extremely adaptable and widespread.\",\n  habitat: \"Shallow freshwater marshes, open water ponds, prairie potholes, flooded agriculture\",\n  range: \"Breeds in prairie pothole region; winters across southern US\",\n  locations: [\"Louisiana\", \"Texas\", \"Arkansas\", \"Kansas\", \"California\", \"Florida\"],\n  season: \"October\u2013January\",\n  bestTimes: \"Consistent producer throughout the season; not dependent on cold weather migration.\",\n  behavior: \"Often associates with diving ducks, stealing food brought to surface. Decoys readily.\",\n  bestBait: [\"Mixed spread with mallard and diving duck decoys\"],\n  techniques: [\"Mixed decoy spread\", \"Shallow marsh hunting\", \"Open water blind\"],\n  feedingSchedule: \"Feed on aquatic vegetation; dabble and kleptoparasitize from divers\",\n  sizeRange: \"1.5\u20132.5 lbs\",\n  recordWeight: \"3 lbs\",\n  tags: [\"waterfowl\", \"dabbler\", \"underrated\", \"consistent\", \"grey-ghost\"],\n},\n{\n  id: \"american-wigeon\",\n  name: \"American Wigeon\",\n  scientificName: \"Mareca americana\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://static.inaturalist.org/photos/39823348/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The whip-cracker of the marsh. American wigeon males make a distinctive three-note whistling call that waterfowlers imitate with specialized wigeon whistles. They flock in large numbers and decoy well. The green headpatch and cream forehead are distinctive.\",\n  habitat: \"Shallow freshwater marshes, open water edges, grass flats, flooded agricultural fields\",\n  range: \"Breeds in western Canada; winters across southern US and both coasts\",\n  locations: [\"California\", \"Louisiana\", \"Texas\", \"Oregon\", \"Washington\", \"Florida\"],\n  season: \"October\u2013January\",\n  bestTimes: \"Large concentrations form on coastal bays and flooded fields during migration.\",\n  behavior: \"Flock with other ducks; steal food from diving ducks. Males whistle constantly.\",\n  bestBait: [\"Wigeon whistle calls\", \"Mixed decoy spread\"],\n  techniques: [\"Field hunting with mallard spread\", \"Coastal marsh hunting\", \"Mixed decoy spread\"],\n  feedingSchedule: \"Graze on grass and clover; steal aquatic vegetation from diving ducks\",\n  sizeRange: \"1.3\u20132.5 lbs\",\n  recordWeight: \"3 lbs\",\n  tags: [\"waterfowl\", \"wigeon\", \"whistling\", \"field-hunting\", \"widespread\"],\n},\n{\n  id: \"northern-shoveler\",\n  name: \"Northern Shoveler\",\n  scientificName: \"Spatula clypeata\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/336986640/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The spoonbill. Northern shovelers have a comically large spatula-shaped bill used to filter plankton and invertebrates from shallow water. While not the most glamorous bird, they decoy readily and their population is robust, offering consistent hunting across their range.\",\n  habitat: \"Shallow marshes, sewage ponds, flooded fields \u2014 anywhere with muddy filtered water\",\n  range: \"Breeds in prairie potholes; winters across southern US\",\n  locations: [\"Louisiana\", \"Texas\", \"California\", \"Arkansas\", \"Kansas\"],\n  season: \"October\u2013January\",\n  bestTimes: \"Consistent producer in shallow marsh habitat throughout season.\",\n  behavior: \"Often spin in circles to create a vortex that brings food to surface. Very abundant, docile.\",\n  bestBait: [\"Puddle duck decoys in shallow water\"],\n  techniques: [\"Shallow marsh hunting\", \"Mixed decoy spread\", \"Flooded field hunting\"],\n  feedingSchedule: \"Filter feed continuously in shallow water\",\n  sizeRange: \"1\u20131.5 lbs\",\n  recordWeight: \"2.3 lbs\",\n  tags: [\"waterfowl\", \"shoveler\", \"spoonbill\", \"shallow-marsh\", \"abundant\"],\n},\n{\n  id: \"american-black-duck\",\n  name: \"American Black Duck\",\n  scientificName: \"Anas rubripes\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/340374896/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The wariest and most pressured duck in the East. Black ducks are the malards of the Atlantic Flyway \u2014 the primary large dabbling duck of the Northeast. Decades of hunting pressure have made them extremely call-shy and wary of decoys. A trophy black duck is earned.\",\n  habitat: \"Coastal salt marshes, tidal creeks, freshwater swamps, boreal forest ponds\",\n  range: \"Eastern North America \u2014 breeds in boreal Canada and Maine; winters on Atlantic Coast\",\n  locations: [\"Maine\", \"New England\", \"New York\", \"New Jersey\", \"Maryland\", \"Virginia\", \"North Carolina\"],\n  season: \"October\u2013January\",\n  bestTimes: \"Cold weather freezeup pushes birds to tidal creeks. Dawn flights in salt marshes.\",\n  behavior: \"Extremely wary \u2014 land far from decoys to inspect. Respond poorly to calling on pressured marshes.\",\n  bestBait: [\"Excellent motion decoys\", \"Minimal calling\"],\n  techniques: [\"Tidal creek marsh hunting\", \"Minimal calling approach\", \"Layout in salt marsh grass\"],\n  feedingSchedule: \"Feed on tidal flats at low water; morning and evening activity peaks\",\n  sizeRange: \"2\u20133.5 lbs\",\n  recordWeight: \"4.2 lbs\",\n  tags: [\"waterfowl\", \"dabbler\", \"atlantic-flyway\", \"wary\", \"northeast\", \"salt-marsh\"],\n},\n{\n  id: \"greater-white-fronted-goose\",\n  name: \"Greater White-fronted Goose\",\n  scientificName: \"Anser albifrons\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/393841552/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The speckle-belly \u2014 arguably the finest tasting goose in North America. Greater white-fronted geese decoy readily and are prized for their exceptional table quality. Hunting them in Texas rice fields and Louisiana marshes during migration is a cherished experience.\",\n  habitat: \"Rice fields, freshwater marshes, flooded grain, prairie wetlands\",\n  range: \"Central flyway migration \u2014 Alaska breeding; Texas/Louisiana/California wintering\",\n  locations: [\"Texas\", \"Louisiana\", \"Oklahoma\", \"Kansas\", \"California\"],\n  season: \"October\u2013January (central flyway)\",\n  bestTimes: \"November migration into Texas rice fields. Louisiana marshes December\u2013January.\",\n  behavior: \"Respond to speckle-belly calls (a high-pitched double-note call different from Canada calls). Travel in small to medium flocks.\",\n  bestBait: [\"Speckle-belly goose call\", \"Full-body or shell decoys\"],\n  techniques: [\"Field blind in rice stubble\", \"Mixed spread with Canada and speck decoys\", \"Aggressive calling\"],\n  feedingSchedule: \"Morning and evening feeding flights from marsh roosts to grain fields\",\n  sizeRange: \"4\u20138 lbs\",\n  recordWeight: \"10 lbs\",\n  tags: [\"waterfowl\", \"goose\", \"speckle-belly\", \"texas\", \"table-quality\", \"calling\"],\n},\n{\n  id: \"brant-goose\",\n  name: \"Brant Goose\",\n  scientificName: \"Branta bernicla\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://static.inaturalist.org/photos/197982544/medium.jpeg\",\n  difficulty: \"expert\",\n  description: \"The sea goose of the Atlantic and Pacific coasts. Brant are small, sea-going geese that depend almost entirely on eelgrass for food. Hunting them from layout boats and blinds in coastal bays and estuaries is specialized and demanding coastal waterfowling.\",\n  habitat: \"Coastal bays, tidal estuaries, eelgrass beds, barrier island shorelines\",\n  range: \"Atlantic Coast \u2014 Long Island south to North Carolina; Pacific Coast \u2014 California to Washington\",\n  locations: [\"New Jersey\", \"New York\", \"Maryland\", \"Virginia\", \"North Carolina\", \"California\", \"Oregon\"],\n  season: \"November\u2013January (Atlantic); October\u2013January (Pacific)\",\n  bestTimes: \"High tide when brant concentrate on eelgrass beds near shore.\",\n  behavior: \"Low-flying sea goose that follows coastline closely. Responsive to layout boat hunting.\",\n  bestBait: [\"Brant decoys in tidal bay\"],\n  techniques: [\"Layout boat in tidal estuary\", \"Shoreline blind near eelgrass\", \"Tolling brant with decoys\"],\n  feedingSchedule: \"Feed on eelgrass in tidal areas; dependent on tide cycles\",\n  sizeRange: \"2.5\u20134 lbs\",\n  recordWeight: \"5 lbs\",\n  tags: [\"waterfowl\", \"sea-goose\", \"coastal\", \"eelgrass\", \"atlantic\", \"specialized\"],\n},\n{\n  id: \"ross-goose\",\n  name: \"Ross's Goose\",\n  scientificName: \"Chen rossii\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/2716452/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"A miniature snow goose with rapidly expanding populations. Ross's geese nest in the central Canadian Arctic and migrate through the central flyway. Their small size and white plumage mirror snow geese, often mixing in massive flocks. Spring conservation order hunting targets both species.\",\n  habitat: \"Arctic tundra breeding; agricultural grain fields and marshes during migration\",\n  range: \"Central flyway \u2014 Arctic Canada to Texas, Louisiana, California\",\n  locations: [\"Texas\", \"Louisiana\", \"California\", \"Kansas\", \"Nebraska\"],\n  season: \"Fall season October\u2013January; Spring Conservation Order February\u2013April\",\n  bestTimes: \"Spring conservation order hunting February\u2013April with large spreads.\",\n  behavior: \"Mixes with snow geese in large flocks. Smaller and faster than snows.\",\n  bestBait: [\"White rag/silhouette decoy spread\", \"Electronic calls (spring)\"],\n  techniques: [\"Large mixed spread with snow geese\", \"Layout blind\", \"Electronic call setup (spring season)\"],\n  feedingSchedule: \"Grain field feeding during migration; constant feeding\",\n  sizeRange: \"2.5\u20133.5 lbs\",\n  recordWeight: \"4 lbs\",\n  tags: [\"waterfowl\", \"goose\", \"mini-snow\", \"conservation-order\", \"central-flyway\"],\n},\n{\n  id: \"black-bellied-whistling-duck\",\n  name: \"Black-bellied Whistling Duck\",\n  scientificName: \"Dendrocygna autumnalis\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/411123026/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The exotic-looking whistling duck of South Texas. Black-bellied whistling ducks have expanded dramatically northward and are now common in Texas, Louisiana, and Florida. They roost in trees and fly in tight flocks while emitting a distinctive whistling call.\",\n  habitat: \"Shallow ponds, flooded agricultural land, stock tanks, tropical and subtropical wetlands\",\n  range: \"South Texas, Louisiana, Florida \u2014 expanding northward\",\n  locations: [\"Texas\", \"Louisiana\", \"Florida\", \"Arizona\"],\n  season: \"July 1 \u2013 August 25 (special season Texas/Louisiana); regular season October\u2013January\",\n  bestTimes: \"Evening roost flights. Special early season in Texas around stock tanks.\",\n  behavior: \"Roost in trees \u2014 unusual for ducks. Travel in tight bunched flocks and whistle loudly.\",\n  bestBait: [\"Whistling duck decoys near stock tanks\"],\n  techniques: [\"Stock tank hunting in South Texas\", \"Walk-up shooting at roost\", \"Shotgun at evening flight\"],\n  feedingSchedule: \"Feed in grain and flooded fields at night; roost in trees during day\",\n  sizeRange: \"1.3\u20132 lbs\",\n  recordWeight: \"2.5 lbs\",\n  tags: [\"waterfowl\", \"whistling-duck\", \"south-texas\", \"tree-roosting\", \"expanding-range\"],\n},\n{\n  id: \"hooded-merganser\",\n  name: \"Hooded Merganser\",\n  scientificName: \"Lophodytes cucullatus\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/338791340/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The most stunning duck in North America. A drake hooded merganser in full plumage with his crest raised is breathtaking \u2014 black-and-white fan crest, chestnut flanks, yellow eye. They inhabit clear wooded streams and beaver ponds and provide a distinctly aesthetic hunting experience.\",\n  habitat: \"Clear wooded streams, beaver ponds, flooded timber, swampy woodland pools\",\n  range: \"Eastern North America, Pacific Northwest\",\n  locations: [\"Arkansas\", \"Louisiana\", \"Mississippi\", \"Tennessee\", \"South Carolina\", \"Oregon\", \"Washington\"],\n  season: \"October\u2013January\",\n  bestTimes: \"Early season on beaver ponds before water freezes. Timber hole hunting at first light.\",\n  behavior: \"Dive for fish and crayfish in clear water. Nest in tree cavities. Often found with wood ducks.\",\n  bestBait: [\"Decoys near flooded timber\"],\n  techniques: [\"Flooded timber hole hunting\", \"Beaver pond ambush\", \"Walk-up on small wooded ponds\"],\n  feedingSchedule: \"Feed on fish and aquatic invertebrates \u2014 active diver throughout day\",\n  sizeRange: \"1\u20131.5 lbs\",\n  recordWeight: \"2 lbs\",\n  tags: [\"waterfowl\", \"merganser\", \"stunning-plumage\", \"wooded-streams\", \"diver\"],\n},\n{\n  id: \"tundra-swan\",\n  name: \"Tundra Swan\",\n  scientificName: \"Cygnus columbianus\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/183205026/medium.jpeg\",\n  difficulty: \"expert\",\n  description: \"The white giant of fall migration. Tundra swans weigh up to 18 lbs and their powerful trumpet calls fill the sky during migration. A few states offer very limited swan hunting permits. Drawing a swan tag and calling one in is a bucket-list waterfowl experience.\",\n  habitat: \"Large lakes, flooded fields, coastal bays, river deltas during migration\",\n  range: \"Pacific flyway (eastern Oregon, Nevada, North Carolina) \u2014 limited permits\",\n  locations: [\"Nevada\", \"Montana\", \"Alaska\", \"North Carolina\", \"Virginia\"],\n  season: \"November\u2013December; draw tags only; extremely limited\",\n  bestTimes: \"November migration when birds stop on feeding areas. Dawn and dusk flights.\",\n  behavior: \"Travel in family groups. Powerful fliers \u2014 hold up to 60 mph. Respond to goose decoys and swan decoys.\",\n  bestBait: [\"Large swan decoys in open water\", \"Goose decoys\"],\n  techniques: [\"Open water layout\", \"Shoreline blind near feeding area\", \"Calling with low goose-like calls\"],\n  feedingSchedule: \"Feed on subaquatic vegetation and waste grain; continuous feeding on migration stopovers\",\n  sizeRange: \"12\u201320 lbs\",\n  recordWeight: \"24 lbs\",\n  tags: [\"waterfowl\", \"swan\", \"draw-tag\", \"bucket-list\", \"migration\", \"giant\"],\n},\n{\n  id: \"mottled-duck\",\n  name: \"Mottled Duck\",\n  scientificName: \"Anas fulvigula\",\n  category: \"waterfowl\",\n  imageKey: \"duck\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/174399837/medium.jpeg\",\n  difficulty: \"intermediate\",\n  description: \"The resident duck of the Gulf Coast marshes. Unlike most waterfowl, mottled ducks do not migrate \u2014 they live year-round in the coastal marshes of Texas, Louisiana, and Florida. They are the primary local species for coastal marsh hunters and are excellent table fare.\",\n  habitat: \"Coastal freshwater and brackish marshes, rice fields, Gulf Coast tidal areas\",\n  range: \"Texas Gulf Coast, Louisiana, Florida (year-round resident)\",\n  locations: [\"Texas\", \"Louisiana\", \"Florida\"],\n  season: \"October\u2013January\",\n  bestTimes: \"High tidal marsh flooding concentrates birds. Cold front birds move to fresh marsh.\",\n  behavior: \"Resident species \u2014 do not migrate. Respond to mallard-style calls and decoys.\",\n  bestBait: [\"Mallard-style decoys in coastal marsh\"],\n  techniques: [\"Coastal marsh pit blind\", \"Pirogue and walk-in marsh hunting\", \"Poling skiff hunting\"],\n  feedingSchedule: \"Feed on rice, aquatic seeds, and invertebrates in tidal marshes\",\n  sizeRange: \"1.5\u20133 lbs\",\n  recordWeight: \"3.5 lbs\",\n  tags: [\"waterfowl\", \"resident-duck\", \"gulf-coast\", \"coastal-marsh\", \"non-migratory\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// SMALL GAME / FURBEARERS\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"bobcat\",\n  name: \"Bobcat\",\n  scientificName: \"Lynx rufus\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/60028871/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"North America's most widespread wildcat. Bobcats are secretive, adaptable predators found in 48 states. Calling them in with prey distress sounds is an exciting winter challenge. A mature male bobcat at close range is a thrilling encounter.\",\n  habitat: \"Adaptable \u2014 deserts, swamps, hardwood forest, mountain terrain, brushy farmland\",\n  range: \"All 48 contiguous US states; southern Canada; Mexico\",\n  locations: [\"Texas\", \"Arizona\", \"Montana\", \"Idaho\", \"Nevada\", \"California\", \"Colorado\"],\n  season: \"November\u2013March (varies by state; some year-round)\",\n  bestTimes: \"January\u2013February breeding season when cats are more active. Cold overcast days with light wind.\",\n  behavior: \"Solitary and secretive. Respond to rabbit and bird distress calls. Approach cautiously from downwind.\",\n  bestBait: [\"Electronic prey distress calls\", \"Bird distress sounds\", \"Jackrabbit distress\"],\n  techniques: [\"Stand calling with electronic caller\", \"Decoy with feathered lure\", \"Ambush with hounds\"],\n  feedingSchedule: \"Crepuscular and nocturnal hunter; feeds on rabbits, rodents, birds, and deer fawns\",\n  sizeRange: \"15\u201340 lbs\",\n  recordWeight: \"49 lbs\",\n  tags: [\"hunting\", \"predator\", \"calling\", \"trapping\", \"wildcat\"],\n},\n{\n  id: \"red-fox\",\n  name: \"Red Fox\",\n  scientificName: \"Vulpes vulpes\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://static.inaturalist.org/photos/265916780/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The clever orange predator of open country. Red foxes are pursued by callers, trappers, and hound hunters across North America. Calling in a red fox on a cold January morning is a satisfying challenge that requires precise stand selection and careful scent control.\",\n  habitat: \"Agricultural land, forest edges, open fields, suburban areas, mixed terrain\",\n  range: \"North America, Europe, Asia, Australia (introduced)\",\n  locations: [\"All 48 states\", \"Most of Canada\"],\n  season: \"December\u2013February (prime fur/calling); year-round as pest in many states\",\n  bestTimes: \"January\u2013February breeding season when foxes are active in daylight. Cold still mornings.\",\n  behavior: \"Respond to rabbit distress and mouse squeaks. Approach cautiously and stop frequently. Intelligent and wary.\",\n  bestBait: [\"Rabbit distress calls\", \"Rodent squeaks\", \"Fox pup distress\"],\n  techniques: [\"Stand calling (15\u201320 min stands)\", \"Trap line with dirt hole sets\", \"Snare wire\"],\n  feedingSchedule: \"Crepuscular and nocturnal; hunts at dawn and dusk for rodents and birds\",\n  sizeRange: \"8\u201315 lbs\",\n  recordWeight: \"26 lbs\",\n  tags: [\"hunting\", \"trapping\", \"predator\", \"calling\", \"fur-bearer\"],\n},\n{\n  id: \"gray-fox\",\n  name: \"Gray Fox\",\n  scientificName: \"Urocyon cinereoargenteus\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://static.inaturalist.org/photos/32504964/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"North America's only tree-climbing canid. Gray foxes can actually climb trees to escape predators and find food \u2014 an unusual skill among dog family members. More of a forest fox than red fox, gray foxes respond well to rabbit distress calls in timber and brush habitat.\",\n  habitat: \"Dense brush, forest, chaparral, forest-agricultural edge \u2014 more secretive than red fox\",\n  range: \"Eastern US, Southwest, Central America\",\n  locations: [\"Texas\", \"Florida\", \"Georgia\", \"Virginia\", \"Oklahoma\", \"California\"],\n  season: \"December\u2013February; year-round as pest in some states\",\n  bestTimes: \"Cold winter mornings in brushy terrain. Dawn stands near brush piles.\",\n  behavior: \"More brush-oriented and secretive than red fox. Climb trees. Respond to distress calls.\",\n  bestBait: [\"Rabbit distress calls\", \"Quail distress\", \"Mouse squeaks\"],\n  techniques: [\"Tight brush stand calling\", \"Spotlight/thermal hunting at night\", \"Trap line with flat sets\"],\n  feedingSchedule: \"Primarily nocturnal; hunts brush edges and forest floors for small mammals and birds\",\n  sizeRange: \"7\u201314 lbs\",\n  recordWeight: \"19 lbs\",\n  tags: [\"hunting\", \"trapping\", \"tree-climbing\", \"brush-country\", \"nocturnal\"],\n},\n{\n  id: \"raccoon\",\n  name: \"Raccoon\",\n  scientificName: \"Procyon lotor\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/290431922/medium.jpeg\",\n  difficulty: \"beginner\",\n  description: \"The masked bandit and a cornerstone of American small game hunting tradition. Coon hunting with hounds at night is a deep American tradition \u2014 the baying of hounds on a coon track, the tree dog's chop bark, and the headlamp beam finding masked eyes in the treetop.\",\n  habitat: \"Hardwood forest near water, river bottoms, corn fields, suburban areas\",\n  range: \"All 48 contiguous US states; southern Canada; Central America\",\n  locations: [\"Tennessee\", \"Kentucky\", \"Ohio\", \"Indiana\", \"Illinois\", \"Missouri\", \"Alabama\"],\n  season: \"October\u2013February (fur season); year-round in many states\",\n  bestTimes: \"Night hunting with hounds after acorn drop. Corn fields after harvest. Mild nights (50\u201360\u00B0F).\",\n  behavior: \"Highly intelligent and adaptable. Travel creek bottoms and den in hollow trees. Communicate with various calls.\",\n  bestBait: [\"Hound hunting \u2014 treeing walkers, blueticks, black-and-tan\", \"Electronic coon call\"],\n  techniques: [\"Hound hunting at night\", \"Spotlight tree hunting\", \"Trap line near water\"],\n  feedingSchedule: \"Primarily nocturnal forager \u2014 corn, crayfish, berries, frogs, eggs\",\n  sizeRange: \"8\u201325 lbs\",\n  recordWeight: \"62 lbs (obese captive animal; wild: 28+ lbs)\",\n  tags: [\"hunting\", \"trapping\", \"hound-hunting\", \"nocturnal\", \"tradition\", \"tree\"],\n},\n{\n  id: \"gray-squirrel\",\n  name: \"Eastern Gray Squirrel\",\n  scientificName: \"Sciurus carolinensis\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/22144449/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The introduction to hunting for generations of American hunters. Squirrel hunting teaches woodsmanship, patience, and marksmanship in a forgiving setting. A first-generation squirrel hunt in a hardwood hollow, waiting for the telltale sound of acorn cutting \u2014 this is where many hunters begin.\",\n  habitat: \"Mature hardwood forest \u2014 oak, hickory, beech, walnut. Creek bottoms and woodlots.\",\n  range: \"Eastern US, introduced across western states\",\n  locations: [\"Kentucky\", \"Tennessee\", \"Alabama\", \"Mississippi\", \"Ohio\", \"Indiana\", \"Illinois\", \"Missouri\"],\n  season: \"August 15 \u2013 February 28 (varies by state)\",\n  bestTimes: \"Early morning acorn and hickory nut season (October). Sit under a producing oak tree and wait.\",\n  behavior: \"Cache nuts for winter; highly vocal when alarmed \u2014 bark and flick tail repeatedly. Cut nuts from treetops.\",\n  bestBait: [\"Corn/grain near hardwood trees\", \"No bait \u2014 still hunting and sitting\"],\n  techniques: [\"Sit-still under mast-producing oak\", \".22 rifle or shotgun hunting\", \"Fox squirrel seeking in large oaks\"],\n  feedingSchedule: \"Active at dawn and mid-morning; midday rest; afternoon feeding before dusk\",\n  sizeRange: \"14\u201321 oz\",\n  recordWeight: \"2 lbs\",\n  tags: [\"hunting\", \"small-game\", \"beginner\", \"hardwood\", \"tradition\", \"family\"],\n},\n{\n  id: \"eastern-cottontail\",\n  name: \"Eastern Cottontail Rabbit\",\n  scientificName: \"Sylvilagus floridanus\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/93582532/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"America's most pursued small game animal. Cottontail rabbit hunting with beagles is a beloved tradition, especially in the Midwest and South. The music of a beagle pack pushing a rabbit through briars, followed by the cottontail circling back to the hunter, is pure American small game hunting.\",\n  habitat: \"Brushy field edges, briar patches, hedgerows, CRP grass, brush piles \u2014 abundant in suburban areas\",\n  range: \"Eastern US and Canada; some western states\",\n  locations: [\"Missouri\", \"Kansas\", \"Ohio\", \"Kentucky\", \"Tennessee\", \"Indiana\", \"Iowa\", \"Illinois\"],\n  season: \"October\u2013February (most states)\",\n  bestTimes: \"After fresh snowfall when rabbits are visible. Morning and evening feeding in brush edges.\",\n  behavior: \"Circle when pushed by dogs \u2014 classic beagle behavior. Freeze in brush when threatened. Active at dawn, dusk, and night.\",\n  bestBait: [\"Beagle dogs (traditional)\", \"Rabbit squeaker call\"],\n  techniques: [\"Beagle hunting (push rabbits in circles)\", \"Walk-up hunting brush piles\", \"Jump shooting field edges\"],\n  feedingSchedule: \"Dawn, dusk, and nighttime feeding on clover, grasses, and garden plants\",\n  sizeRange: \"2\u20134 lbs\",\n  recordWeight: \"4.5 lbs\",\n  tags: [\"hunting\", \"small-game\", \"beagle\", \"beginner\", \"tradition\", \"cottontail\"],\n},\n{\n  id: \"snowshoe-hare\",\n  name: \"Snowshoe Hare\",\n  scientificName: \"Lepus americanus\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/4361135/medium.jpeg\",\n  difficulty: \"beginner\",\n  description: \"The hare that turns white. Snowshoe hares transform from brown to pure white each winter, providing exceptional camouflage on snow. Populations cycle dramatically every 9\u201311 years from boom to bust. Beagle hunting snowshoes in a northern spruce forest after fresh snow is a classic cold-weather pursuit.\",\n  habitat: \"Dense boreal forest, alder and willow thickets, spruce regeneration, northern hardwoods\",\n  range: \"Northern US, Canada, Alaska\",\n  locations: [\"Maine\", \"Minnesota\", \"Wisconsin\", \"Michigan\", \"Montana\", \"Alaska\", \"Canada\"],\n  season: \"October\u2013February (varies by state)\",\n  bestTimes: \"Cyclical boom years when hare numbers are at peak. Morning after fresh snow.\",\n  behavior: \"Live in dense cover; run circles when pushed by beagles. Dramatic 9\u201311 year population cycles.\",\n  bestBait: [\"Beagle dogs in spruce thickets\"],\n  techniques: [\"Beagle hunting in dense cover\", \"Walk-up shooting in alder runs\", \"Snowshoe hunting after storm\"],\n  feedingSchedule: \"Feed on willows, alder, and woody vegetation at night; rest in snow forms during day\",\n  sizeRange: \"2.5\u20134 lbs\",\n  recordWeight: \"4.5 lbs\",\n  tags: [\"hunting\", \"small-game\", \"hare\", \"beagle\", \"north\", \"white-camouflage\"],\n},\n{\n  id: \"black-tailed-jackrabbit\",\n  name: \"Black-tailed Jackrabbit\",\n  scientificName: \"Lepus californicus\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://static.inaturalist.org/photos/22549628/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The varmint of the western plains. Jackrabbits can sprint at 40 mph and leap 10 feet, making them challenging targets for rifle and shotgun hunters. Desert evening jack shooting is a fun, no-limit activity that serves as excellent rifle practice and predator bait source.\",\n  habitat: \"Open desert, sagebrush flats, grasslands, agricultural fields\",\n  range: \"Western US, Great Plains, southwest\",\n  locations: [\"Texas\", \"New Mexico\", \"Arizona\", \"Kansas\", \"Nebraska\", \"Colorado\", \"Nevada\"],\n  season: \"Year-round; no limits in most states\",\n  bestTimes: \"Evening in open desert. Night hunting with light permitted in some states.\",\n  behavior: \"Rely on speed and camouflage \u2014 hold tight then explode in fast zigzag sprint. Giant ears regulate body temperature.\",\n  bestBait: [\"No bait needed \u2014 open plain spotting\"],\n  techniques: [\"Walk-up shooting in open terrain\", \"Drive shooting in agricultural fields\", \"Night spotlight hunting\"],\n  feedingSchedule: \"Feed at dusk and dawn on grasses and desert plants; nocturnal in summer heat\",\n  sizeRange: \"4\u20137 lbs\",\n  recordWeight: \"8 lbs\",\n  tags: [\"hunting\", \"varmint\", \"small-game\", \"western\", \"no-limit\", \"beginner\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// INTERNATIONAL BIG GAME \u2014 AFRICA\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"cape-buffalo\",\n  name: \"Cape Buffalo\",\n  scientificName: \"Syncerus caffer\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/97834194/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The Black Death. Cape buffalo are considered the most dangerous of Africa's Big Five \u2014 they have killed more African hunters than any other animal. Massive, unpredictable, and vindictive, they will ambush hunters in thick brush. A genuine trophy and one of the world's great hunting challenges.\",\n  habitat: \"Sub-Saharan savanna, dense thornbush, river drainages, floodplains, montane forest\",\n  range: \"Sub-Saharan Africa \u2014 Zimbabwe, Tanzania, Zambia, South Africa, Mozambique, Ethiopia\",\n  locations: [\"Zimbabwe\", \"Tanzania\", \"Zambia\", \"South Africa\", \"Mozambique\", \"Botswana\"],\n  season: \"April\u2013October (African winter/dry season)\",\n  bestTimes: \"July\u2013September during peak dry season when buffalo concentrate near water holes.\",\n  behavior: \"Bull dagga boys live in small bachelor groups. Extremely intelligent and vindictive when wounded. Never follow a wounded buffalo into thick cover without great care.\",\n  bestBait: [\"Waterhole ambush (bow hunting)\", \"Stalking cattle-track roads\"],\n  techniques: [\"Track and stalk in thornbush\", \"Waterhole approach on foot\", \"Large caliber rifle (.375 H&H minimum)\"],\n  feedingSchedule: \"Graze from dusk to dawn on open floodplains; rest in dense cover during heat of day\",\n  sizeRange: \"1,100\u20132,000 lbs (bulls)\",\n  recordWeight: \"2,200 lbs\",\n  tags: [\"hunting\", \"big-game\", \"africa\", \"dangerous-game\", \"big-five\", \"once-in-a-lifetime\"],\n},\n{\n  id: \"greater-kudu\",\n  name: \"Greater Kudu\",\n  scientificName: \"Tragelaphus strepsiceros\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/22442121/medium.jpeg\",\n  difficulty: \"intermediate\",\n  description: \"The grey ghost of the African thornbush. Greater kudu bulls carry massive spiraling horns that can exceed 60 inches. They are extraordinarily secretive, blending invisibly into dappled light under mopane trees. Stalking a trophy bull in Zimbabwe or South Africa is a demanding puzzle.\",\n  habitat: \"Mopane thornbush, rocky hills, dense riverine bush, semi-arid woodland\",\n  range: \"Eastern and Southern Africa \u2014 Zimbabwe, Zambia, Tanzania, Namibia, South Africa\",\n  locations: [\"Zimbabwe\", \"South Africa\", \"Namibia\", \"Zambia\", \"Tanzania\", \"Botswana\"],\n  season: \"April\u2013October\",\n  bestTimes: \"June\u2013August rut when bulls respond to cow calls and are more active.\",\n  behavior: \"Extremely wary \u2014 freeze motionless in shadow and can be overlooked from 20 yards. Bark alarm like a dog when alarmed.\",\n  bestBait: [\"Waterhole camera reconnaissance\", \"Bush road stalk in early morning\"],\n  techniques: [\"Early morning stalk in mopane woodland\", \"Waterhole approach\", \"Still hunting thick bush\"],\n  feedingSchedule: \"Browse on leaves and pods; feed morning and evening near water\",\n  sizeRange: \"400\u2013700 lbs (bulls)\",\n  recordWeight: \"750 lbs\",\n  tags: [\"hunting\", \"big-game\", \"africa\", \"spiral-horns\", \"secretive\", \"trophy\"],\n},\n{\n  id: \"gemsbok-oryx\",\n  name: \"Gemsbok / Oryx\",\n  scientificName: \"Oryx gazella\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://static.inaturalist.org/photos/221946717/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The sword-horned antelope of the Kalahari. Gemsbok are built for desert survival \u2014 they can tolerate body temperatures lethal to other animals. Their bold black-and-white face markings and near-vertical rapier horns make them instantly recognizable. They also roam New Mexico's White Sands freely.\",\n  habitat: \"Kalahari desert, arid semi-desert, sparse grassland, White Sands New Mexico (introduced)\",\n  range: \"Southern Africa (Botswana, Namibia, South Africa); New Mexico USA (introduced population)\",\n  locations: [\"Namibia\", \"Botswana\", \"South Africa\", \"New Mexico (White Sands Missile Range area)\"],\n  season: \"Year-round (South Africa); April\u2013October (Namibia/Botswana); New Mexico seasons vary\",\n  bestTimes: \"Dawn and dusk when temperatures are coolest in desert. Waterhole approach.\",\n  behavior: \"Territorial bulls defend large home ranges. Formidable \u2014 can impale lions with horns. Walk slowly with eyes forward for danger.\",\n  bestBait: [\"Waterhole camera setup\"],\n  techniques: [\"Kalahari open plain spot-and-stalk\", \"Waterhole hunting from blind\", \"New Mexico OTC hunt\"],\n  feedingSchedule: \"Graze and browse morning and evening; rest in shade during midday desert heat\",\n  sizeRange: \"400\u2013530 lbs (bulls)\",\n  recordWeight: \"550 lbs\",\n  tags: [\"hunting\", \"big-game\", \"africa\", \"desert\", \"rapier-horns\", \"new-mexico\"],\n},\n{\n  id: \"impala\",\n  name: \"Impala\",\n  scientificName: \"Aepyceros melampus\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/64268875/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The McDonald's of the African bush \u2014 found everywhere. Impala are the most abundant plains game antelope and an excellent first African trophy. Their lyre-shaped horns are beautiful and they are superb eating. A perfect introductory Africa species that sharpens shooting in the field.\",\n  habitat: \"Open woodland, light thornbush, forest edges near water \u2014 extremely adaptable\",\n  range: \"Throughout eastern and southern Africa\",\n  locations: [\"South Africa\", \"Zimbabwe\", \"Tanzania\", \"Kenya\", \"Zambia\", \"Botswana\"],\n  season: \"April\u2013October\",\n  bestTimes: \"November\u2013December rut when rams are vocal and gregarious.\",\n  behavior: \"Live in herds of up to 100. Jump incredible distances when startled (10 feet high, 30 feet long). Males roar and snort during rut.\",\n  bestBait: [\"No bait \u2014 open bush stalking\"],\n  techniques: [\"Open bush spot-and-stalk\", \"Road hunting from game vehicle\", \"Waterhole ambush\"],\n  feedingSchedule: \"Mix grazer and browser; feed morning and evening near water\",\n  sizeRange: \"110\u2013165 lbs (rams)\",\n  recordWeight: \"185 lbs\",\n  tags: [\"hunting\", \"big-game\", \"africa\", \"plains-game\", \"beginner-africa\", \"first-hunt\"],\n},\n{\n  id: \"warthog\",\n  name: \"Warthog\",\n  scientificName: \"Phacochoerus africanus\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://static.inaturalist.org/photos/264074428/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"Pumba in real life \u2014 and much more exciting. Warthogs run tail-erect in a comical trot and kneel to drink. Old boars with magnificent curved tusks and warty faces are African icons. Stalking them through the savanna on a hot afternoon is genuine African hunting at the introductory level.\",\n  habitat: \"Open grassland, savanna, agricultural edges, floodplains with burrows\",\n  range: \"Sub-Saharan Africa\",\n  locations: [\"South Africa\", \"Zimbabwe\", \"Namibia\", \"Tanzania\", \"Kenya\", \"Zambia\"],\n  season: \"Year-round (South Africa); April\u2013October (East Africa)\",\n  bestTimes: \"Morning when warthogs are feeding in open areas near burrows.\",\n  behavior: \"Kneel to feed and drink. Back into burrows tail-first. Boars have four tusks \u2014 upper and lower. Highly dangerous when wounded.\",\n  bestBait: [\"Waterhole / pan approach\"],\n  techniques: [\"Open plain stalking\", \"Waterhole approach\", \"Walk-up hunting near burrow clusters\"],\n  feedingSchedule: \"Graze and root in morning; rest in burrows during heat\",\n  sizeRange: \"130\u2013330 lbs (boars)\",\n  recordWeight: \"330 lbs\",\n  tags: [\"hunting\", \"big-game\", \"africa\", \"tusks\", \"plains-game\", \"beginner-africa\"],\n},\n{\n  id: \"springbok\",\n  name: \"Springbok\",\n  scientificName: \"Antidorcas marsupialis\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/188718198/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"South Africa's national animal and one of the most beautiful plains game antelope. The springbok's pronking display \u2014 leaping high with arched back and flared dorsal crest \u2014 is one of Africa's great spectacles. Open Karoo and Kalahari plains hunting requires precise long-range shooting.\",\n  habitat: \"Open Karoo semi-desert, Kalahari savanna, dry open grassland\",\n  range: \"South Africa, Namibia, Botswana (primary range)\",\n  locations: [\"South Africa (Karoo)\", \"Namibia\", \"Botswana\"],\n  season: \"April\u2013September (southern Africa winter)\",\n  bestTimes: \"Early morning and late afternoon feeding on open plains. Winter months when hunting conditions are best.\",\n  behavior: \"Pronk when alarmed (high bounding with raised dorsal stripe). Herd animals in open country.\",\n  bestBait: [\"No bait \u2014 long-range open country stalking\"],\n  techniques: [\"Long-range shot from prone (200\u2013400 yards)\", \"Stalking behind low cover\", \"Vehicle approach in open terrain\"],\n  feedingSchedule: \"Graze and browse morning and evening on dry scrubland vegetation\",\n  sizeRange: \"65\u2013100 lbs (rams)\",\n  recordWeight: \"110 lbs\",\n  tags: [\"hunting\", \"big-game\", \"africa\", \"south-africa\", \"long-range\", \"national-symbol\"],\n},\n{\n  id: \"eland\",\n  name: \"Common Eland\",\n  scientificName: \"Taurotragus oryx\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/311295610/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"Africa's largest antelope and the world's largest antelope. A bull eland can reach 2,100 lbs \u2014 bigger than a Cape buffalo. They are prized for exceptional meat quality (often ranked the finest beef-like meat in Africa) and spectacular mass-and-twist spiral horns. They make clicking sounds as they walk.\",\n  habitat: \"Open woodland, grassland, semi-arid bushveld \u2014 wide range of habitats\",\n  range: \"Eastern and Southern Africa\",\n  locations: [\"South Africa\", \"Zimbabwe\", \"Zambia\", \"Tanzania\", \"Kenya\"],\n  season: \"April\u2013October\",\n  bestTimes: \"Early morning when large bulls are moving between feeding areas.\",\n  behavior: \"Walk long distances daily. Bull's large dewlap clicks when walking \u2014 an unusual audible indicator. Relatively slow for their size.\",\n  bestBait: [\"Track fresh spoor (footprints) in sand\"],\n  techniques: [\"Follow fresh spoor in sandy soil\", \"Open woodland stalk\", \"Long-range shot on open plains\"],\n  feedingSchedule: \"Feed on browse and grass morning and evening; rest during midday heat\",\n  sizeRange: \"770\u20132,100 lbs (bulls)\",\n  recordWeight: \"2,100 lbs\",\n  tags: [\"hunting\", \"big-game\", \"africa\", \"largest-antelope\", \"meat-quality\", \"trophy\"],\n},\n{\n  id: \"sable-antelope\",\n  name: \"Sable Antelope\",\n  scientificName: \"Hippotragus niger\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/92248778/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The crown jewel of African plains game. A mature sable bull \u2014 jet black with a white belly, magnificent curved horns reaching 50 inches, and a regal bearing \u2014 is considered by many hunters the most beautiful animal in Africa. Sable are expensive, difficult, and absolutely stunning.\",\n  habitat: \"Brachystegia (miombo) woodland, savanna woodland, areas with water and grass\",\n  range: \"Zimbabwe (prime range), Tanzania, Zambia, Mozambique\",\n  locations: [\"Zimbabwe\", \"Tanzania\", \"Zambia\", \"Mozambique\", \"South Africa\"],\n  season: \"April\u2013October\",\n  bestTimes: \"Early morning when bulls visit water and feeding areas.\",\n  behavior: \"Bulls are solitary except during rut \u2014 extremely territorial and aggressive toward other bulls. Difficult to approach \u2014 highly alert animals.\",\n  bestBait: [\"Waterhole camera pre-scout\"],\n  techniques: [\"Waterhole approach from blind\", \"Open woodland stalk\", \"Early morning feeding area approach\"],\n  feedingSchedule: \"Graze on medium-length grass; water daily; most active morning and evening\",\n  sizeRange: \"400\u2013600 lbs (bulls)\",\n  recordWeight: \"660 lbs\",\n  tags: [\"hunting\", \"big-game\", \"africa\", \"magnificent\", \"crown-jewel\", \"expensive\"],\n},\n{\n  id: \"blue-wildebeest\",\n  name: \"Blue Wildebeest\",\n  scientificName: \"Connochaetes taurinus\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://static.inaturalist.org/photos/248838951/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The GNU of the great migration. Blue wildebeest are the most numerous large mammal in Africa \u2014 1.5 million migrate across the Serengeti annually. Their bizarre appearance (bull with buffalo head, deer body, horse tail) belies excellent table fare and exciting hunting. An affordable first Africa species.\",\n  habitat: \"Open grassland, savanna, floodplains \u2014 follows rainfall and grass growth\",\n  range: \"Eastern and Southern Africa\",\n  locations: [\"South Africa\", \"Tanzania\", \"Kenya\", \"Namibia\", \"Botswana\", \"Zimbabwe\"],\n  season: \"Year-round (South Africa); June\u2013October (East Africa)\",\n  bestTimes: \"Morning feeding in open grassland. Rut (February\u2013March in South Africa) is exciting.\",\n  behavior: \"Highly gregarious \u2014 thousands in mixed herds on migration. Territorial bulls dig up ground with horns.\",\n  bestBait: [\"No bait \u2014 open plain hunting\"],\n  techniques: [\"Open grassland stalk\", \"Vehicle approach to within range\", \"Water hole ambush\"],\n  feedingSchedule: \"Continuous grazer \u2014 feed primarily on short grass throughout daylight hours\",\n  sizeRange: \"260\u2013600 lbs (bulls)\",\n  recordWeight: \"640 lbs\",\n  tags: [\"hunting\", \"big-game\", \"africa\", \"migration\", \"gnu\", \"beginner-africa\"],\n},\n{\n  id: \"waterbuck\",\n  name: \"Waterbuck\",\n  scientificName: \"Kobus ellipsiprymnus\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/72428489/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The antelope with the toilet seat on its rump. Waterbuck have a distinctive white ring on the rump and long, ringed horns on males. They are always found near water and emit a strong musky oil that some claim makes the meat unpalatable (it doesn't if handled well). A solid trophy from any African hunt.\",\n  habitat: \"Always near water \u2014 river valleys, floodplains, lakeshores, permanent water sources\",\n  range: \"Sub-Saharan Africa\",\n  locations: [\"South Africa\", \"Zimbabwe\", \"Tanzania\", \"Kenya\", \"Zambia\"],\n  season: \"April\u2013October\",\n  bestTimes: \"Morning at waterholes and river areas where bulls patrol territories.\",\n  behavior: \"Enter water when threatened by predators (and hunters). Strong musky secretion from skin. Bulls are territorial and magnificent.\",\n  bestBait: [\"River or waterhole approach\"],\n  techniques: [\"Riverine woodland stalk\", \"Waterhole approach from blind\", \"Early morning territory patrol\"],\n  feedingSchedule: \"Feed morning and evening in riverine grass and browse near water\",\n  sizeRange: \"330\u2013600 lbs (bulls)\",\n  recordWeight: \"660 lbs\",\n  tags: [\"hunting\", \"big-game\", \"africa\", \"riverine\", \"water-dependent\", \"ringed-horns\"],\n},\n{\n  id: \"red-hartebeest\",\n  name: \"Red Hartebeest\",\n  scientificName: \"Alcelaphus buselaphus caama\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/9884519/medium.jpeg\",\n  difficulty: \"intermediate\",\n  description: \"One of Africa's fastest plains game animals \u2014 can sustain 40 mph for miles. Red hartebeest have elongated horse-like faces and distinctive bracket-shaped horns. They are herd animals on open grassland and are excellent eating. A staple of the South African plains game safari.\",\n  habitat: \"Open grassland, dry savanna, Karoo scrubland\",\n  range: \"Southern Africa \u2014 South Africa, Namibia, Botswana\",\n  locations: [\"South Africa\", \"Namibia\", \"Botswana\"],\n  season: \"Year-round (South Africa); April\u2013October (preferred)\",\n  bestTimes: \"Early morning when herds are active on open plains.\",\n  behavior: \"Alert herd animals; always have a sentinel looking for danger. Run in large herds across open terrain.\",\n  bestBait: [\"No bait \u2014 open plain approach\"],\n  techniques: [\"Long-range open plain stalk\", \"Vehicle approach\", \"Dawn hunting before heat\"],\n  feedingSchedule: \"Primarily a grazer; feed morning and late afternoon on open plains\",\n  sizeRange: \"260\u2013400 lbs (bulls)\",\n  recordWeight: \"450 lbs\",\n  tags: [\"hunting\", \"big-game\", \"africa\", \"plains-game\", \"fast\", \"herd-animal\"],\n},\n{\n  id: \"nyala\",\n  name: \"Nyala\",\n  scientificName: \"Tragelaphus angasii\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/1413848/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"One of Africa's most handsome spiral-horned antelope. The nyala bull \u2014 dark gray-brown with white stripes, yellow-orange legs, and lyre-shaped horns \u2014 is a prized and beautiful trophy. Found in dense riverine bush in KwaZulu-Natal, hunting nyala demands patience in thick cover.\",\n  habitat: \"Dense riverine bush, thicket, low altitude woodland with water, KwaZulu-Natal terrain\",\n  range: \"South Africa (KwaZulu-Natal, Limpopo), Zimbabwe (eastern highlands), Mozambique\",\n  locations: [\"South Africa (KwaZulu-Natal)\", \"Zimbabwe\", \"Mozambique\"],\n  season: \"April\u2013October\",\n  bestTimes: \"Early morning when bulls emerge from dense cover to feed near water.\",\n  behavior: \"Secretive in dense bush \u2014 heard before seen. Bulls display by raising white dorsal crest.\",\n  bestBait: [\"Waterhole reconnaissance camera\"],\n  techniques: [\"Dense bush stalk in riverine thicket\", \"Waterhole approach from blind\", \"Early morning ambush\"],\n  feedingSchedule: \"Browse dense thicket vegetation; come to water morning and evening\",\n  sizeRange: \"240\u2013290 lbs (bulls)\",\n  recordWeight: \"310 lbs\",\n  tags: [\"hunting\", \"big-game\", \"africa\", \"spiral-horns\", \"beautiful\", \"thicket\"],\n},\n{\n  id: \"roan-antelope\",\n  name: \"Roan Antelope\",\n  scientificName: \"Hippotragus equinus\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/251101426/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"Africa's second largest antelope and one of the most coveted trophies. Roan are powerful, aggressive animals with scimitar-shaped horns reaching 40 inches. Their populations are declining and hunting them requires expensive safaris to their remaining strongholds in Zambia and Zimbabwe.\",\n  habitat: \"Woodland savanna, Brachystegia woodland, open bush with good grass cover\",\n  range: \"West, Central, and East Africa \u2014 Zambia, Zimbabwe, Tanzania, Cameroon\",\n  locations: [\"Zambia\", \"Zimbabwe\", \"Tanzania\", \"Cameroon\", \"South Africa (limited)\"],\n  season: \"April\u2013October\",\n  bestTimes: \"Morning when small herds visit waterholes in dry season.\",\n  behavior: \"Live in small herds with a dominant bull. Fierce fighters \u2014 can defeat lions. Highly territorial dominant bulls.\",\n  bestBait: [\"Waterhole tracking and camera work\"],\n  techniques: [\"Deep wilderness waterhole approach\", \"Track fresh spoor\", \"Dawn ambush near water\"],\n  feedingSchedule: \"Graze medium to long grass; water daily in dry season\",\n  sizeRange: \"460\u2013660 lbs (bulls)\",\n  recordWeight: \"700 lbs\",\n  tags: [\"hunting\", \"big-game\", \"africa\", \"declining\", \"expensive\", \"coveted\"],\n},\n{\n  id: \"plains-zebra\",\n  name: \"Plains Zebra\",\n  scientificName: \"Equus quagga\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/335469754/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"Africa's striped horse. Zebra hunting provides one of Africa's most unusual trophies \u2014 no two zebras have identical stripe patterns. The meat is exceptional \u2014 'Africa's finest table fare' according to many PH's. Hunting zebra in open plains requires patience and long shooting.\",\n  habitat: \"Open grassland, savanna, light woodland \u2014 often in large herds\",\n  range: \"Eastern and Southern Africa\",\n  locations: [\"South Africa\", \"Zimbabwe\", \"Namibia\", \"Tanzania\", \"Kenya\"],\n  season: \"April\u2013October\",\n  bestTimes: \"Dawn when herds concentrate at water before heat of day.\",\n  behavior: \"Live in family groups dominated by a stallion. Extremely alert \u2014 the whole herd watches for danger simultaneously.\",\n  bestBait: [\"No bait \u2014 spot-and-stalk approach\"],\n  techniques: [\"Open plain stalk in early morning\", \"Vehicle approach\", \"Waterhole dawn ambush\"],\n  feedingSchedule: \"Continuous grazer on open grassland; water daily\",\n  sizeRange: \"660\u2013990 lbs\",\n  recordWeight: \"1,000+ lbs\",\n  tags: [\"hunting\", \"big-game\", \"africa\", \"stripes\", \"table-fare\", \"unique\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// INTERNATIONAL BIG GAME \u2014 EUROPE\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"european-red-deer\",\n  name: \"European Red Deer (Red Stag)\",\n  scientificName: \"Cervus elaphus\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/25186445/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The most prized game animal in Europe. The European red deer's roar (bellow) during the October rut is one of the most thrilling sounds in all of hunting. From Scottish highland stalking to Spanish monter\u00EDa drives, red deer hunting is central to European hunting culture.\",\n  habitat: \"Highland moors (Scotland), alpine forest (Central Europe), Mediterranean scrub (Spain)\",\n  range: \"Throughout Europe \u2014 Scotland, Scandinavia, Germany, Austria, Hungary, Spain, New Zealand\",\n  locations: [\"Scotland\", \"Germany\", \"Austria\", \"Hungary\", \"Spain\", \"New Zealand\"],\n  season: \"September\u2013November (rut); winter cull hunts; varies by country\",\n  bestTimes: \"October rut ('the rut') when stags bellow and move in daylight to challenge rivals.\",\n  behavior: \"Roar/bellow during rut. Stags gather harems and fight rivals. Scottish stalking requires getting within 150 yards on open moorland.\",\n  bestBait: [\"No bait in Scotland (strict rules)\", \"Feed sites (mainland Europe)\"],\n  techniques: [\"Scottish highland stalking with ghillie\", \"European driven hunt (monter\u00EDa)\", \"Tower blind over feed site\"],\n  feedingSchedule: \"Graze highlands and browse woodland edges; rut males almost stop eating\",\n  sizeRange: \"330\u2013700 lbs (stags)\",\n  recordWeight: \"770 lbs\",\n  tags: [\"hunting\", \"big-game\", \"europe\", \"scotland\", \"rut\", \"highland-stalking\"],\n},\n{\n  id: \"roe-deer\",\n  name: \"Roe Deer\",\n  scientificName: \"Capreolus capreolus\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://static.inaturalist.org/photos/180450991/medium.jpeg\",\n  difficulty: \"beginner\",\n  description: \"Europe's most widely hunted deer. Roe deer are small, shy woodland deer found across the continent from Britain to Siberia. The European tradition of stalking them at dawn in summer and from hochsitz (elevated stands) in winter produces millions of hunting hours annually.\",\n  habitat: \"Deciduous woodland, forest edges, agricultural margins, hedgerows\",\n  range: \"Entire Europe, western Siberia\",\n  locations: [\"Germany\", \"France\", \"Poland\", \"Sweden\", \"United Kingdom\", \"Czech Republic\"],\n  season: \"May\u2013January (varies by country); summer rut June\u2013August\",\n  bestTimes: \"Early morning stalks during summer rut (July) when bucks are responsive to calls.\",\n  behavior: \"Bark alarm call sounds like a dog. Summer rut called 'false rut' \u2014 bucks pursue does aggressively.\",\n  bestBait: [\"Roe buck call (high pitched pipe)\", \"Mineral licks\"],\n  techniques: [\"Dawn forest edge stalking\", \"German-style hochsitz stand\", \"Calling during summer rut\"],\n  feedingSchedule: \"Browse forest and agricultural edges at dawn and dusk; highly crepuscular\",\n  sizeRange: \"30\u201365 lbs (bucks)\",\n  recordWeight: \"80 lbs\",\n  tags: [\"hunting\", \"big-game\", \"europe\", \"dawn-stalking\", \"small-deer\", \"widespread\"],\n},\n{\n  id: \"chamois\",\n  name: \"Chamois\",\n  scientificName: \"Rupicapra rupicapra\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/456684191/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The European mountain goat. Chamois inhabit the steep rocky terrain of the Alps, Carpathians, and Balkans. Alpine chamois stalking \u2014 working through high mountain terrain at 8,000+ feet \u2014 is one of Europe's most demanding and rewarding hunting challenges.\",\n  habitat: \"Alpine rocky terrain above treeline; steep cliffs and scree slopes; conifer forest in winter\",\n  range: \"Alps (Austria, Switzerland, Italy), Carpathians, Balkans, New Zealand (introduced)\",\n  locations: [\"Austria\", \"Slovenia\", \"Germany\", \"Switzerland\", \"Italy\", \"France\", \"New Zealand\"],\n  season: \"October\u2013December (rut); varies by country\",\n  bestTimes: \"November rut when chamois bucks pursue does on open ridgelines.\",\n  behavior: \"Incredibly agile on vertical terrain. Bucks have distinctive hooked backward horns. Move to lower elevations in heavy snow.\",\n  bestBait: [\"Glass from above \u2014 no bait applicable\"],\n  techniques: [\"Alpine spot-and-stalk above 6,000 feet\", \"Guided European mountain hunt\", \"Driven hunt (central Europe)\"],\n  feedingSchedule: \"Graze alpine herbs and lichens; feed on open terrain morning and evening\",\n  sizeRange: \"55\u2013110 lbs (bucks)\",\n  recordWeight: \"130 lbs\",\n  tags: [\"hunting\", \"big-game\", \"europe\", \"alpine\", \"mountain\", \"strenuous\"],\n},\n{\n  id: \"alpine-ibex\",\n  name: \"Alpine Ibex\",\n  scientificName: \"Capra ibex\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://static.inaturalist.org/photos/373820446/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"Nearly driven to extinction and brought back through conservation. The alpine ibex was saved from extinction in Switzerland in the 19th century. Today, limited permits for mature trophy males are issued. A massive ibex bull balancing on a near-vertical cliff face above a Swiss glacier is an unforgettable sight.\",\n  habitat: \"High alpine terrain above 8,000 feet; rocky cliffs, snowfields, alpine meadows\",\n  range: \"Swiss, Italian, French, and German Alps; reintroduced across former range\",\n  locations: [\"Switzerland\", \"Italy\", \"Austria\", \"France\", \"Slovenia\"],\n  season: \"August\u2013November; strictly limited permits only\",\n  bestTimes: \"September when bulls are on open terrain before the winter rut descent.\",\n  behavior: \"Bulls live in bachelor groups high on cliffs. Spectacular fighting between males. Extraordinarily sure-footed on vertical terrain.\",\n  bestBait: [\"No bait \u2014 long-distance glassing from across valley\"],\n  techniques: [\"Alpine wilderness glassing across valley\", \"Long-range shot at waiting bull\", \"Technical alpine ascent\"],\n  feedingSchedule: \"Graze alpine grass and herbs in morning; rest on rocky ledges midday\",\n  sizeRange: \"130\u2013260 lbs (bulls)\",\n  recordWeight: \"280 lbs\",\n  tags: [\"hunting\", \"big-game\", \"europe\", \"alpine\", \"conservation-success\", \"limited-permits\"],\n},\n{\n  id: \"mouflon\",\n  name: \"Mouflon\",\n  scientificName: \"Ovis gmelini musimon\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/132857303/medium.jpeg\",\n  difficulty: \"intermediate\",\n  description: \"The wild sheep of Europe \u2014 the ancestor of domestic sheep. Mouflon rams have tightly curled amber-colored horns and live in rocky Mediterranean terrain. Hunting them in Sardinia, Corsica, or on introduced European populations provides a sheep hunt in spectacular Mediterranean scenery.\",\n  habitat: \"Rocky Mediterranean scrub (maquis), open hillside, rocky montane terrain\",\n  range: \"Sardinia, Corsica (native); introduced across Europe, Canary Islands\",\n  locations: [\"Sardinia (Italy)\", \"Corsica (France)\", \"Germany\", \"Hungary\", \"Czech Republic\"],\n  season: \"October\u2013January; varies by country\",\n  bestTimes: \"November\u2013December rut when rams are active and visible.\",\n  behavior: \"Alert and agile on rocky terrain. Flock together with a dominant ram. Move to higher ground when alarmed.\",\n  bestBait: [\"Salt licks (introduced populations)\"],\n  techniques: [\"Rocky terrain stalk\", \"European driven hunt\", \"Tower blind on introduced ranges\"],\n  feedingSchedule: \"Graze rocky scrub and alpine grasses morning and evening\",\n  sizeRange: \"55\u2013175 lbs (rams)\",\n  recordWeight: \"200 lbs\",\n  tags: [\"hunting\", \"big-game\", \"europe\", \"sheep\", \"mediterranean\", \"ancestor\"],\n},\n{\n  id: \"eurasian-wild-boar\",\n  name: \"Eurasian Wild Boar\",\n  scientificName: \"Sus scrofa\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/414500081/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"Europe's most popular big game animal. Hundreds of thousands are harvested annually across Europe. The German and Czech traditions of driven boar hunts with dog packs, the French battue, and the Spanish monter\u00EDa are the pillars of continental European hunting culture. A mature tusked boar is a genuine trophy.\",\n  habitat: \"Oak and beech forest, agricultural margins, riverine thicket, anywhere food is available\",\n  range: \"Throughout Europe, Central Asia, widespread\",\n  locations: [\"Germany\", \"Poland\", \"France\", \"Spain\", \"Czech Republic\", \"Hungary\", \"Slovakia\"],\n  season: \"Year-round in most European countries; driven hunts October\u2013January\",\n  bestTimes: \"October\u2013January during acorn mast. Night baiting near feeding areas.\",\n  behavior: \"Travel in sounders (family groups). Old boars are solitary. Extremely dangerous when wounded.\",\n  bestBait: [\"Corn/grain at forest feeding sites\", \"Bait stations (Kirrung) in Germany\"],\n  techniques: [\"German-style driven hunt (Dr\u00FCckjagd)\", \"Tower blind over bait site at night\", \"Spanish monter\u00EDa\"],\n  feedingSchedule: \"Primarily nocturnal; feed at set baiting stations predictably\",\n  sizeRange: \"100\u2013400 lbs; European boars typically larger than Texas feral hogs\",\n  recordWeight: \"661 lbs (Germany)\",\n  tags: [\"hunting\", \"big-game\", \"europe\", \"driven-hunt\", \"tradition\", \"nocturnal\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// INTERNATIONAL BIG GAME \u2014 ASIA / OCEANIA\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"sambar-deer\",\n  name: \"Sambar Deer\",\n  scientificName: \"Rusa unicolor\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/366789669/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"Asia's largest and most prized deer. Sambar stags carry massive three-tined antlers and can approach the size of elk. They inhabit dense subtropical forest across South and Southeast Asia. Victoria, Australia has an introduced population hunted on the Victorian Alps.\",\n  habitat: \"Dense subtropical forest, montane woodland, river valleys in India and Southeast Asia\",\n  range: \"India, Sri Lanka, Southeast Asia, southern China; Victoria Australia (introduced)\",\n  locations: [\"India\", \"Sri Lanka\", \"Thailand\", \"Australia (Victoria)\", \"New Zealand (introduced)\"],\n  season: \"March\u2013October (India); year-round (Australia)\",\n  bestTimes: \"November\u2013January rut in India when stags wallow and become vocal.\",\n  behavior: \"Alarm call (sambar bell) echoes through forest. Stags wallow in mud. Sensitive nose like elk.\",\n  bestBait: [\"Waterhole/wallow approach\", \"Sambar stag call\"],\n  techniques: [\"Walk-up stalking dense forest\", \"Wallow ambush\", \"Victorian alpine hunting (Australia)\"],\n  feedingSchedule: \"Browse forest edges and grassy clearings at dawn and dusk\",\n  sizeRange: \"330\u2013770 lbs (stags)\",\n  recordWeight: \"800+ lbs\",\n  tags: [\"hunting\", \"big-game\", \"asia\", \"australia\", \"large-deer\", \"dense-forest\"],\n},\n{\n  id: \"chital-axis-deer\",\n  name: \"Chital / Spotted Deer\",\n  scientificName: \"Axis axis\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/261197112/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"India's most beautiful deer. The spotted deer of India's forests is the preferred prey of tigers and leopards. Chital live in large herds and stags carry elegant three-tined antlers. On the Deccan plateau, watching chital interact with langur monkeys (who warn each other of predators) is extraordinary.\",\n  habitat: \"Deciduous forest, grassland edges, river valleys in India, Sri Lanka\",\n  range: \"India, Sri Lanka; introduced in Texas, Hawaii, New Zealand, Australia\",\n  locations: [\"India\", \"Sri Lanka\", \"Texas (exotic ranches)\", \"Hawaii\", \"Australia\"],\n  season: \"Year-round (Texas/Australia); winter (India)\",\n  bestTimes: \"March\u2013May rut in India when stags are vocal and competitive.\",\n  behavior: \"Live in large mixed herds. Alert to predators \u2014 used as alarm system by other wildlife.\",\n  bestBait: [\"No bait needed \u2014 herds are visible in forest clearings\"],\n  techniques: [\"Walk-up hunting in forest clearings\", \"Feeder hunt (Texas)\", \"Tower blind on Indian reserve\"],\n  feedingSchedule: \"Graze and browse throughout day in clearings and forest edges\",\n  sizeRange: \"130\u2013200 lbs (stags)\",\n  recordWeight: \"220 lbs\",\n  tags: [\"hunting\", \"big-game\", \"india\", \"spotted\", \"beautiful\", \"tiger-prey\"],\n},\n{\n  id: \"himalayan-tahr\",\n  name: \"Himalayan Tahr\",\n  scientificName: \"Hemitragus jemlahicus\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/267072483/medium.jpeg\",\n  difficulty: \"expert\",\n  description: \"The maned mountain goat of the Himalayas. Male tahrs develop a magnificent golden-orange lion's mane during breeding season. New Zealand is home to a premier tahr population (introduced from Nepal in 1904) and provides some of the world's most spectacular mountain hunting.\",\n  habitat: \"Rocky alpine terrain of Himalayas and New Zealand's Southern Alps above treeline\",\n  range: \"Himalayas (Nepal, India); Southern Alps New Zealand (introduced)\",\n  locations: [\"New Zealand (Southern Alps)\", \"Nepal\", \"India\"],\n  season: \"March\u2013July (NZ winter for prime coats); June\u2013August (Nepal)\",\n  bestTimes: \"June\u2013July in New Zealand when bulls are in prime winter coat and concentrated on alpine faces.\",\n  behavior: \"Bulls develop lion-like mane in winter. Live on steep cliff faces. Extremely agile in terrain.\",\n  bestBait: [\"Spot from opposite ridgeline with optics\"],\n  techniques: [\"New Zealand helicopter access and stalk\", \"Long-range alpine spot-and-stalk\", \"Nepal mountain hunting\"],\n  feedingSchedule: \"Graze alpine tussock grass and herbs; feed morning and evening on rocky faces\",\n  sizeRange: \"220\u2013400 lbs (bulls)\",\n  recordWeight: \"450 lbs\",\n  tags: [\"hunting\", \"big-game\", \"new-zealand\", \"alpine\", \"himalayan\", \"mane\"],\n},\n{\n  id: \"new-zealand-red-stag\",\n  name: \"New Zealand Red Stag\",\n  scientificName: \"Cervus elaphus\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/25186445/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"World-class free-range red stag hunting in spectacular New Zealand scenery. Introduced European red deer thrived in the NZ South Island and now produce some of the world's largest antlered stags \u2014 routinely exceeding Scottish and European trophies. Helicopter access opens spectacular remote terrain.\",\n  habitat: \"New Zealand South Island beech forest, alpine tussock, river flats\",\n  range: \"New Zealand South Island (North Canterbury, Otago, Fiordland)\",\n  locations: [\"New Zealand (South Island)\"],\n  season: \"March\u2013May (roar/rut season), year-round on private estates\",\n  bestTimes: \"April 'roar' season when stags are bugling and most active during rut.\",\n  behavior: \"'Roar' \u2014 New Zealand term for the red deer rut. Stags bellow deep roaring calls to attract hinds.\",\n  bestBait: [\"No bait \u2014 spot-and-stalk in mountain terrain\"],\n  techniques: [\"Helicopter access to remote wilderness\", \"Roar (rut) calling with red deer calls\", \"High-country estate hunting\"],\n  feedingSchedule: \"Graze alpine grass and browse beech forest; active morning and evening\",\n  sizeRange: \"330\u2013550 lbs (stags)\",\n  recordWeight: \"660+ lbs\",\n  tags: [\"hunting\", \"big-game\", \"new-zealand\", \"red-stag\", \"helicopter\", \"world-class\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// MORE EUROPEAN UPLAND & SPECIALTY HUNTING\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"red-legged-partridge\",\n  name: \"Red-legged Partridge\",\n  scientificName: \"Alectoris rufa\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/200447159/medium.jpeg\",\n  difficulty: \"expert\",\n  description: \"The king of driven game shooting. The Spanish perdiz roja is considered the ultimate driven bird in the world. Thousands of cartridges are fired at driven partridges on a single Spanish estate day. The steep angles, speed, and volume of a Spanish perdiz drive challenge the world's best shots.\",\n  habitat: \"Spanish dry hillsides, olive groves, cereal fields, Mediterranean scrubland\",\n  range: \"Spain (primary), Portugal, France, United Kingdom (introduced)\",\n  locations: [\"Spain\", \"Portugal\", \"France\", \"United Kingdom\"],\n  season: \"October\u2013February (Spain)\",\n  bestTimes: \"November\u2013December driven days on major Spanish estates.\",\n  behavior: \"Covey birds that hold and run. Flushed by beaters at high altitude, birds drop like rockets toward guns.\",\n  bestBait: [\"Feed drives to concentrate birds\"],\n  techniques: [\"Driven shooting from puestos (butts)\", \"Walked-up hunting with pointers\", \"Spanish estate driven day\"],\n  feedingSchedule: \"Feed morning and afternoon on cereal and olive scraps; roost in rock cover\",\n  sizeRange: \"10\u201314 oz\",\n  recordWeight: \"1.2 lbs\",\n  tags: [\"hunting\", \"small-game\", \"spain\", \"driven-shooting\", \"partridge\", \"world-class\"],\n},\n{\n  id: \"capercaillie\",\n  name: \"Capercaillie\",\n  scientificName: \"Tetrao urogallus\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/92441326/medium.jpeg\",\n  difficulty: \"expert\",\n  description: \"Europe's largest grouse species and among its rarest hunting opportunities. The capercaillie's lek \u2014 where males display with bizarre mechanical calls and spread fan tails \u2014 is one of Europe's most extraordinary wildlife spectacles. Strictly regulated hunting occurs in Scandinavia, Scotland, and central Europe.\",\n  habitat: \"Old-growth boreal forest, Scots pine woodland, mountain forest with open clearings\",\n  range: \"Scandinavia, Scotland, Central Europe mountain forests\",\n  locations: [\"Sweden\", \"Norway\", \"Finland\", \"Scotland\", \"Russia\"],\n  season: \"September\u2013October; strictly limited quotas\",\n  bestTimes: \"Lek season (April) for watching, September\u2013October for hunting.\",\n  behavior: \"Males perform extraordinary lek displays before dawn, producing unique popping and glugging calls. Cannot hear danger during calling.\",\n  bestBait: [\"Lek location knowledge\"],\n  techniques: [\"Dawn stalking to lek\", \"Forest road walking in Scandinavia\", \"Strict quota management\"],\n  feedingSchedule: \"Pine needles in winter; berries, shoots, insects in summer\",\n  sizeRange: \"4.5\u201311 lbs (males \u2014 very large grouse)\",\n  recordWeight: \"13 lbs\",\n  tags: [\"hunting\", \"small-game\", \"europe\", \"scandinavia\", \"lek\", \"rare\"],\n},\n{\n  id: \"red-grouse\",\n  name: \"Red Grouse\",\n  scientificName: \"Lagopus lagopus scotica\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/7383575/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The quintessential British game bird. Driven red grouse shooting on Scottish and English moorland is one of the world's most prestigious and expensive shooting sports. Grouse explode from heather at extreme speed, presenting fast crossing shots that challenge even the finest shots in the world.\",\n  habitat: \"Heather moorland of Scotland, northern England, and Wales; managed for grouse via rotational burning\",\n  range: \"Scotland, northern England, Wales \u2014 endemic UK subspecies\",\n  locations: [\"Scotland\", \"England (Yorkshire, Lancashire)\", \"Wales\"],\n  season: \"August 12 (Glorious Twelfth) \u2013 December 10\",\n  bestTimes: \"August\u2013September before birds become wary. The 'Glorious Twelfth' opening day is legendary.\",\n  behavior: \"Fly fast and low over heather, presenting challenging targets. Flock in large packs in autumn.\",\n  bestBait: [\"Heather management and keepering\"],\n  techniques: [\"Driven shooting from shooting butts\", \"Walked-up shooting over pointers\", \"Dogging (pointing dogs)\"],\n  feedingSchedule: \"Feed almost exclusively on heather shoots and berries throughout year\",\n  sizeRange: \"14\u201322 oz\",\n  recordWeight: \"1.7 lbs\",\n  tags: [\"hunting\", \"small-game\", \"scotland\", \"driven-shooting\", \"moorland\", \"prestigious\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// MORE INTERNATIONAL HUNTING\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"argali-marco-polo\",\n  name: \"Marco Polo Sheep (Argali)\",\n  scientificName: \"Ovis ammon polii\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/124168515/medium.jpeg\",\n  difficulty: \"expert\",\n  description: \"The largest wild sheep in the world. Marco Polo argali have incredible spiraling horns that can span over 6 feet tip-to-tip. The hunt takes place at 14,000\u201316,000 feet on the Pamir Plateau of Tajikistan, Kyrgyzstan, and Afghanistan \u2014 among the world's most remote and challenging hunting terrain.\",\n  habitat: \"High altitude Pamir Plateau, 12,000\u201316,000 feet; open rolling tundra above all vegetation\",\n  range: \"Tajikistan, Kyrgyzstan, Afghanistan Wakhan Corridor, China\",\n  locations: [\"Tajikistan\", \"Kyrgyzstan\", \"Afghanistan (Wakhan)\"],\n  season: \"October\u2013November\",\n  bestTimes: \"Late October when rams concentrate before rutting season and snow makes them more visible.\",\n  behavior: \"Live in bachelor groups; enormous old rams are solitary. Extremely long-range shots required (400\u2013600 yards).\",\n  bestBait: [\"No bait \u2014 spot from high ridgelines across vast alpine basins\"],\n  techniques: [\"Horseback access to Pamir high country\", \"Extreme long-range rifle shot (400\u2013600 yards)\", \"Week-long wilderness expedition\"],\n  feedingSchedule: \"Graze sparse high-altitude herbs and grasses; constantly moving across vast terrain\",\n  sizeRange: \"220\u2013400 lbs (rams)\",\n  recordWeight: \"430 lbs\",\n  tags: [\"hunting\", \"big-game\", \"central-asia\", \"largest-sheep\", \"extreme-altitude\", \"bucket-list\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// FISHING \u2014 FRESHWATER NORTH AMERICA (ADDITIONAL)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"spotted-bass\",\n  name: \"Spotted Bass\",\n  scientificName: \"Micropterus punctulatus\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/85721569/medium.jpeg\",\n  difficulty: \"intermediate\",\n  description: \"The bass of the highland reservoirs. Spotted bass (spots) dominate deep, clear Tennessee Valley Authority reservoirs and Appalachian impoundments. They school offshore on main lake points in summer and provide exceptional finesse and drop-shot fishing when largemouth retreat.\",\n  habitat: \"Rocky highland reservoirs, clear river impoundments, deep main lake structure\",\n  range: \"Tennessee Valley reservoirs, Appalachian river systems, expanding westward\",\n  locations: [\"Tennessee\", \"Georgia\", \"Alabama\", \"Virginia\", \"Kentucky\", \"West Virginia\", \"California (Shasta)\"],\n  season: \"Year-round; spawn April\u2013May (60\u00B0F water)\",\n  bestTimes: \"Summer when schools suspend over deep main lake humps. Fall shad schools draw surface feeds.\",\n  behavior: \"School in large groups offshore \u2014 find a school and catch limits quickly. More aggressive than largemouth on finesse presentations.\",\n  bestBait: [\"Finesse worm (drop shot)\", \"Hair jig\", \"Small crankbait\", \"Ned rig\"],\n  techniques: [\"Drop shot on main lake points\", \"Ned rig on rocky bottom\", \"Jigging spoon over suspended schools\"],\n  feedingSchedule: \"Suspend in schools mid-depth over structure; feed aggressively at dawn and dusk surface\",\n  sizeRange: \"0.5\u20133 lbs average; 5+ lbs trophy\",\n  recordWeight: \"11 lbs 4 oz (California, 2017)\",\n  tags: [\"fishing\", \"freshwater\", \"bass\", \"highland-reservoirs\", \"finesse\", \"schools\"],\n},\n{\n  id: \"yellow-perch\",\n  name: \"Yellow Perch\",\n  scientificName: \"Perca flavescens\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/441018034/medium.jpeg\",\n  difficulty: \"beginner\",\n  description: \"The tastiest panfish in North America. Yellow perch are legendary table fare \u2014 the 'perch fry' tradition of Great Lakes communities rivals any fish tradition in the country. Jigging for perch through the ice of Lake Erie in January or trolling Lake Michigan in spring are quintessential Great Lakes experiences.\",\n  habitat: \"Clear lakes and reservoirs, Great Lakes shallows, sandy-bottom weedy lakes\",\n  range: \"Great Lakes basin, northern states, Canada \u2014 widely introduced\",\n  locations: [\"Michigan\", \"Wisconsin\", \"Minnesota\", \"Ohio\", \"Indiana\", \"Pennsylvania\", \"New York\"],\n  season: \"Year-round; ice fishing December\u2013March\",\n  bestTimes: \"Spring spawning run (April) in Great Lakes tributaries. Ice fishing midwinter concentrations.\",\n  behavior: \"School in large groups over sandy or weedy bottom. Active all day when feeding.\",\n  bestBait: [\"Small minnows (emerald shiner)\", \"Small jig + minnow\", \"Perch eyes (ice fishing)\"],\n  techniques: [\"Vertical jigging with small minnow\", \"Ice fishing tip-up with small bait\", \"Trolling small rigs in Great Lakes\"],\n  feedingSchedule: \"Most active morning and afternoon; schools move throughout day\",\n  sizeRange: \"6\u201312 inches; 0.25\u20131 lb\",\n  recordWeight: \"4 lbs 3 oz (New Jersey, 1865)\",\n  tags: [\"fishing\", \"freshwater\", \"perch\", \"great-lakes\", \"ice-fishing\", \"table-fare\"],\n},\n{\n  id: \"bluegill\",\n  name: \"Bluegill\",\n  scientificName: \"Lepomis macrochirus\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://static.inaturalist.org/photos/561891940/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The gateway fish. Bluegill are the first fish caught by most American anglers. They fight far above their weight class on light tackle, are incredibly abundant, and are excellent table fare. Spawning colonies in shallow water offer fast, visual fishing that rivals any species in pure fun.\",\n  habitat: \"Ponds, lakes, reservoirs, slow rivers \u2014 virtually any warm, shallow freshwater body\",\n  range: \"Native to eastern US; introduced nationwide\",\n  locations: [\"All 48 contiguous states\"],\n  season: \"Year-round; spawn May\u2013August on full moons\",\n  bestTimes: \"Spawn (May\u2013June) when males fan visible circular nests in 1\u20134 feet of water.\",\n  behavior: \"Spawn in colonial beds \u2014 dozens of saucer-shaped nests visible from above. Bluegill defend beds aggressively.\",\n  bestBait: [\"Worms on small hook\", \"Small jigs (1/32 oz)\", \"Cricket\", \"Small poppers\"],\n  techniques: [\"Light tackle or fly fishing around spawning beds\", \"Small bobber and worm\", \"Ultra-light spinning\"],\n  feedingSchedule: \"Feed throughout the day; most active morning and evening\",\n  sizeRange: \"4\u201310 inches; 0.1\u20131 lb\",\n  recordWeight: \"4 lbs 12 oz (Alabama, 1950)\",\n  tags: [\"fishing\", \"freshwater\", \"panfish\", \"beginner\", \"gateway-fish\", \"family\"],\n},\n{\n  id: \"flathead-catfish\",\n  name: \"Flathead Catfish\",\n  scientificName: \"Pylodictis olivaris\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/469085060/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The aggressive predator catfish. Unlike channel cats that scavenge, flatheads are live-bait specialists \u2014 feeding almost exclusively on live fish. Trophy flatheads over 50 lbs are realistic in prime rivers. Jug fishing with live bluegill on a hot Texas river night is flathead fishing at its best.\",\n  habitat: \"Large rivers with deep holes, log jams, undercut banks; reservoirs with deep timber\",\n  range: \"Central and southern US \u2014 Mississippi River system\",\n  locations: [\"Texas\", \"Oklahoma\", \"Kansas\", \"Missouri\", \"Arkansas\", \"Louisiana\", \"Kentucky\", \"Tennessee\"],\n  season: \"Year-round; peak spawning season May\u2013July\",\n  bestTimes: \"Night fishing in summer near large log jams or undercut banks. Post-spawn July\u2013August.\",\n  behavior: \"Lie in woody structure during day; hunt actively at night. Ambush prey in current seams.\",\n  bestBait: [\"Live large bluegill\", \"Live perch\", \"Live suckers\", \"Live carp chunks\"],\n  techniques: [\"Jug fishing with live bluegill\", \"Rod and reel tight-lining into structure\", \"Noodling (hand fishing) in holes\"],\n  feedingSchedule: \"Nocturnal hunter \u2014 feeds from dark to midnight; inactive during bright daylight\",\n  sizeRange: \"5\u201350 lbs common; 100+ lbs possible\",\n  recordWeight: \"123 lbs (Kansas, 1998)\",\n  tags: [\"fishing\", \"freshwater\", \"catfish\", \"live-bait\", \"night-fishing\", \"trophy\"],\n},\n{\n  id: \"blue-catfish\",\n  name: \"Blue Catfish\",\n  scientificName: \"Ictalurus furcatus\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/13010379/medium.jpeg\",\n  difficulty: \"beginner\",\n  description: \"North America's largest catfish. The Santee Cooper lakes of South Carolina and the James River of Virginia produce blue cats exceeding 100 lbs regularly. The Potomac River near DC has become famous for giant blues on cut shad. Drift fishing cut shad in tidal rivers produces monster fish for all skill levels.\",\n  habitat: \"Large rivers, tidal rivers, reservoirs \u2014 prefer moving water with current\",\n  range: \"Mississippi River system, Atlantic tidal rivers (introduced)\",\n  locations: [\"Virginia (James, Potomac)\", \"South Carolina\", \"Missouri\", \"Texas\", \"Tennessee\", \"Illinois\"],\n  season: \"Year-round; fall through winter peak for large fish\",\n  bestTimes: \"Fall and winter when large fish feed actively before cold fronts.\",\n  behavior: \"School-feeding fish \u2014 where one is, many are. Cut shad is the premier bait. Feed throughout water column.\",\n  bestBait: [\"Cut shad (fresh)\", \"Cut carp\", \"Fresh skipjack herring\", \"Live bream\"],\n  techniques: [\"Drift fishing cut shad\", \"Anchored rod and reel in current\", \"Slip rig on river bottom\"],\n  feedingSchedule: \"Opportunistic feeder \u2014 active both day and night; most active at current seams\",\n  sizeRange: \"5\u201350 lbs typical; 100+ lbs possible\",\n  recordWeight: \"143 lbs (Mississippi, 2001)\",\n  tags: [\"fishing\", \"freshwater\", \"catfish\", \"trophy\", \"cut-shad\", \"tidal-rivers\"],\n},\n{\n  id: \"lake-trout\",\n  name: \"Lake Trout\",\n  scientificName: \"Salvelinus namaycush\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/427764/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The cold-water giant of the Great Lakes and northern Canadian wilderness. Lake trout inhabit the coldest, deepest, cleanest lakes on the continent. Ice fishing tip-ups for big lakers in January on Lake Superior, or trolling them 100 feet deep in July, are quintessential northern fishing experiences.\",\n  habitat: \"Deep cold clear lakes \u2014 Great Lakes, Canadian Shield lakes, deep Alaskan lakes\",\n  range: \"Great Lakes, Canada, Alaska, northern US\",\n  locations: [\"Michigan\", \"Wisconsin\", \"Minnesota\", \"Alaska\", \"Canada (all northern provinces)\"],\n  season: \"Year-round; ice fishing December\u2013March; summer trolling\",\n  bestTimes: \"Fall spawning (October\u2013November) when lakers cruise shallows. Ice fishing January\u2013February.\",\n  behavior: \"Suspend at thermocline (temperature break) in summer. Spawn on rocky shoals in fall.\",\n  bestBait: [\"Large spoons (jigging)\", \"Tube jigs\", \"Live smelt (ice fishing)\", \"Dipsy diver + spoon (trolling)\"],\n  techniques: [\"Deep trolling with downrigger\", \"Ice fishing with tip-ups\", \"Jigging spoons over deep structure\"],\n  feedingSchedule: \"Feed on cisco, smelt, and sculpin; most active at low light periods\",\n  sizeRange: \"2\u201320 lbs typical; 40+ lbs possible\",\n  recordWeight: \"102 lbs (Saskatchewan, 1995 \u2014 netted; rod: 72 lbs)\",\n  tags: [\"fishing\", \"freshwater\", \"trout\", \"great-lakes\", \"ice-fishing\", \"cold-water\"],\n},\n{\n  id: \"coho-salmon\",\n  name: \"Coho Salmon (Silver)\",\n  scientificName: \"Oncorhynchus kisutch\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/728795606/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The silver rocket of Pacific and Great Lakes salmon fishing. Coho are the most acrobatic Pacific salmon \u2014 they leap repeatedly when hooked, dogging runs alternating with jumps. The fall Great Lakes coho run, when fish push into tributary streams, provides spectacular action for every skill level.\",\n  habitat: \"Pacific Coast rivers, Great Lakes tributaries, offshore deep water\",\n  range: \"Pacific Coast (California to Alaska), Great Lakes\",\n  locations: [\"Michigan\", \"Wisconsin\", \"New York\", \"Ohio\", \"Oregon\", \"Washington\", \"Alaska\"],\n  season: \"Great Lakes: August\u2013October lake trolling, September\u2013November river; Pacific: varies by river\",\n  bestTimes: \"September\u2013October when coho push into rivers during the Lake Michigan run.\",\n  behavior: \"School offshore; enter rivers on fall rains. Jump multiple times when hooked. Aggressive to egg flies.\",\n  bestBait: [\"Egg sacs (river)\", \"Spoons\", \"Pink/orange streamer flies\", \"Small spinners\"],\n  techniques: [\"River drift fishing with floats\", \"Spey fly fishing\", \"Great Lakes trolling with spoons\", \"Pier fishing during run\"],\n  feedingSchedule: \"Aggressive strikes in rivers (territorial/instinctual); feed actively in open water\",\n  sizeRange: \"6\u201320 lbs typical\",\n  recordWeight: \"33 lbs 4 oz (Salmon River, NY)\",\n  tags: [\"fishing\", \"freshwater\", \"salmon\", \"great-lakes\", \"acrobatic\", \"fall-run\"],\n},\n{\n  id: \"cutthroat-trout\",\n  name: \"Cutthroat Trout\",\n  scientificName: \"Oncorhynchus clarkii\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/81804399/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The native trout of the Rocky Mountain West. Named for the distinctive red slash marks on their jaw, cutthroat are found in high mountain streams and lakes throughout the Rockies. Yellowstone's famous cutthroat fishery \u2014 where fish rise freely to dry flies \u2014 is one of the world's great trout experiences.\",\n  habitat: \"Cold mountain streams and alpine lakes; Yellowstone Lake and tributary streams\",\n  range: \"Rocky Mountains from New Mexico to Alaska; coastal subspecies in Pacific rivers\",\n  locations: [\"Wyoming (Yellowstone)\", \"Montana\", \"Idaho\", \"Colorado\", \"Utah\", \"New Mexico\"],\n  season: \"June 15 \u2013 November (most public waters); catch-and-release after September\",\n  bestTimes: \"July through September dry fly fishing in Yellowstone backcountry.\",\n  behavior: \"Less selective than brown trout \u2014 eager to rise to properly drifted dry flies. Yellowstone fish are remarkably abundant and cooperative.\",\n  bestBait: [\"Elk Hair Caddis dry fly\", \"Royal Wulff\", \"Parachute Adams\", \"Stimulator\"],\n  techniques: [\"Dry fly fishing upstream\", \"Nymph fishing in riffles\", \"Streamer in large pools\"],\n  feedingSchedule: \"Rise to adult insects during hatches; feed throughout day on subsurface insects\",\n  sizeRange: \"8\u201320 inches; 0.5\u20134 lbs\",\n  recordWeight: \"41 lbs (Pyramid Lake, Nevada)\",\n  tags: [\"fishing\", \"freshwater\", \"trout\", \"rocky-mountain\", \"fly-fishing\", \"yellowstone\"],\n},\n{\n  id: \"arctic-char\",\n  name: \"Arctic Char\",\n  scientificName: \"Salvelinus alpinus\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/570698345/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The jewel of the Arctic. No freshwater fish in the world rivals the spawning male Arctic char for beauty \u2014 brilliant orange-red flanks with pale pink spots on black. Found in remote Arctic rivers and lakes, fly fishing for char is a bucket-list northern wilderness experience.\",\n  habitat: \"Arctic and subarctic lakes and rivers; some anadromous populations in sea-run char\",\n  range: \"Alaska, Canadian Arctic, Greenland, Iceland, Scandinavia, Russia\",\n  locations: [\"Alaska\", \"Northwest Territories\", \"Nunavut\", \"Yukon\", \"Iceland\"],\n  season: \"June\u2013September (ice-free season)\",\n  bestTimes: \"July\u2013August when char stack in river mouths feeding aggressively on salmon eggs and small fish.\",\n  behavior: \"Aggressive predators in clear Arctic water \u2014 attack bright lures readily. Sea-run char are especially strong fighters.\",\n  bestBait: [\"Bright orange or pink streamer flies\", \"Small spoons (red/orange)\", \"Egg imitation flies\"],\n  techniques: [\"Streamer fly fishing in river mouths\", \"Light spinning with small spoons\", \"Trophy lake char on deep jigging spoon\"],\n  feedingSchedule: \"Feed aggressively in short Arctic summer; active throughout daylight (20+ hours Arctic summer).\",\n  sizeRange: \"1\u20138 lbs typical; 15+ lbs in trophy lakes\",\n  recordWeight: \"32 lbs (Canada)\",\n  tags: [\"fishing\", \"freshwater\", \"arctic\", \"fly-fishing\", \"wilderness\", \"beautiful\"],\n},\n{\n  id: \"alligator-gar\",\n  name: \"Alligator Gar\",\n  scientificName: \"Atractosteus spatula\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/221540478/medium.jpeg\",\n  difficulty: \"expert\",\n  description: \"A living fossil and North America's largest freshwater fish. Alligator gar can reach 8 feet and exceed 300 lbs \u2014 their massive armored scales and alligator-like snout are prehistoric in appearance. Sight-casting to rolling gar on a Texas river or trolling in Louisiana bayous is uniquely thrilling.\",\n  habitat: \"Large rivers, bayous, reservoirs, brackish tidal areas \u2014 southern US\",\n  range: \"Mississippi River drainage, Texas rivers, Louisiana, Oklahoma\",\n  locations: [\"Texas\", \"Louisiana\", \"Oklahoma\", \"Arkansas\", \"Mississippi\", \"Alabama\", \"Florida\"],\n  season: \"Year-round; spawn April\u2013June when large fish are accessible in shallows\",\n  bestTimes: \"Spring spawn when large fish are in shallow water. Summer night fishing.\",\n  behavior: \"Gulp air \u2014 roll at surface to breathe. Feed on fish and waterfowl. Prehistoric survivors unchanged for 100 million years.\",\n  bestBait: [\"Whole carp (dead bait)\", \"Live large fish on float\", \"Nylon rope lure (wraps around gar teeth)\"],\n  techniques: [\"Sight-casting to rolling gar\", \"Dead bait on float in bayou\", \"Bowfishing at night (legal in many states)\"],\n  feedingSchedule: \"Ambush predator; feed at dawn and dusk near surface\",\n  sizeRange: \"20\u2013200 lbs; trophy over 150 lbs\",\n  recordWeight: \"327 lbs (Texas, 1951 \u2014 unverified); rod: 283 lbs\",\n  tags: [\"fishing\", \"freshwater\", \"gar\", \"trophy\", \"prehistoric\", \"texas\"],\n},\n{\n  id: \"striped-bass-freshwater\",\n  name: \"Striped Bass (Landlocked)\",\n  scientificName: \"Morone saxatilis\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/175377771/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The hardest-fighting freshwater fish in the South. Landlocked striped bass and hybrid stripers are stocked throughout the Southeast and Midwest, growing to 40+ lbs in nutrient-rich impoundments. When schooling stripers push shad to the surface in fall, anglers experience topwater mayhem.\",\n  habitat: \"Deep reservoirs, main lake channels, tailwaters below dams; follow shad schools\",\n  range: \"Stocked across southern and midwestern US; many major reservoirs\",\n  locations: [\"Tennessee\", \"Georgia\", \"South Carolina\", \"Oklahoma\", \"Arkansas\", \"Virginia\", \"California\"],\n  season: \"Year-round; peak fall surface feeding and spring post-spawn\",\n  bestTimes: \"Fall 'schooling' action when stripers trap shad on points. Early morning surface explosions.\",\n  behavior: \"School over open water following shad. Explosive surface feeding when shad are trapped.\",\n  bestBait: [\"Live gizzard shad (trophy fish)\", \"Big swimbaits\", \"Large topwater lures\", \"Umbrella rigs\"],\n  techniques: [\"Live shad fishing\", \"Trolling large spoons\", \"Cast to surface schooling fish\", \"Night fishing below dam lights\"],\n  feedingSchedule: \"Surface feed dawn and dusk; deep following shad schools midday\",\n  sizeRange: \"5\u201340 lbs; trophy over 50 lbs\",\n  recordWeight: \"67 lbs 8 oz (landlocked, Texas)\",\n  tags: [\"fishing\", \"freshwater\", \"striped-bass\", \"landlocked\", \"shad\", \"schooling\"],\n},\n{\n  id: \"white-bass\",\n  name: \"White Bass\",\n  scientificName: \"Morone chrysops\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/181905998/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The schooling bass of midwest rivers and reservoirs. White bass (sand bass) provide some of the most action-packed fishing in freshwater \u2014 when they school up in the spring spawning run, anglers can catch 50\u2013100 fish in an afternoon. Oklahoma's Grand Lake and Arkansas's Greers Ferry are famous for white bass.\",\n  habitat: \"Large rivers and reservoirs with clear to slightly turbid water\",\n  range: \"Midwest and South \u2014 Missouri River, Mississippi, major tributaries\",\n  locations: [\"Oklahoma\", \"Arkansas\", \"Texas\", \"Tennessee\", \"Ohio\", \"Indiana\", \"Kansas\"],\n  season: \"Year-round; spring spawning run (March\u2013April) is peak\",\n  bestTimes: \"Spring spawning run in rivers (April) when fish stack below dams.\",\n  behavior: \"School in huge numbers below dams during spring run. Chase shad to surface in summer feeding blitzes.\",\n  bestBait: [\"White curly tail jig\", \"Small white spinnerbait\", \"Small crankbait\", \"Live minnow\"],\n  techniques: [\"Jig below dam during spawn\", \"Surface cast to blitzing fish\", \"Drift fishing rivers\"],\n  feedingSchedule: \"Active throughout day when schooling; surface blitzes at dawn and dusk\",\n  sizeRange: \"0.5\u20133 lbs\",\n  recordWeight: \"6 lbs 13 oz (Louisiana, 1989)\",\n  tags: [\"fishing\", \"freshwater\", \"bass\", \"schooling\", \"spring-run\", \"action\"],\n},\n{\n  id: \"sauger\",\n  name: \"Sauger\",\n  scientificName: \"Sander canadensis\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://static.inaturalist.org/photos/214492783/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The river walleye. Sauger are smaller than walleye but equally prized for their table quality and sporting characteristics. They inhabit large turbid rivers and are often overlooked by anglers targeting their cousin. The Missouri River in the Dakotas produces excellent sauger fishing in fall and winter.\",\n  habitat: \"Large turbid rivers, river reservoirs, backwater areas \u2014 prefers more current than walleye\",\n  range: \"Upper Midwest, Great Plains \u2014 Missouri River, Cumberland, Tennessee systems\",\n  locations: [\"North Dakota\", \"South Dakota\", \"Nebraska\", \"Tennessee\", \"Kentucky\", \"Illinois\"],\n  season: \"Year-round; fall river run and winter below dams\",\n  bestTimes: \"Fall and winter when sauger migrate below dams on large rivers.\",\n  behavior: \"Schooling fish in current; feed low in water column. Extremely similar to walleye but darker with spotted dorsal.\",\n  bestBait: [\"Jig + minnow\", \"Jigging spoon\", \"Blade bait\"],\n  techniques: [\"Vertical jigging in river current\", \"Below dam fishing\", \"Drift fishing jigs\"],\n  feedingSchedule: \"Feed in current during low light periods; active all night below dam lights\",\n  sizeRange: \"0.5\u20133 lbs\",\n  recordWeight: \"8 lbs 12 oz (North Dakota, 1971)\",\n  tags: [\"fishing\", \"freshwater\", \"walleye\", \"river\", \"night-fishing\", \"table-fare\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// FISHING \u2014 FRESHWATER WORLDWIDE\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"wels-catfish\",\n  name: \"Wels Catfish\",\n  scientificName: \"Silurus glanis\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://static.inaturalist.org/photos/110555314/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"Europe's largest freshwater fish and one of the most powerful freshwater predators on Earth. Wels can exceed 9 feet and approach 300 lbs in large European rivers. They attack waterfowl, small mammals, and large fish. Trophy wels fishing in Spain's Ebro River is bucket-list fishing.\",\n  habitat: \"Deep river holes, large impoundments, warm slow-flowing rivers\",\n  range: \"Europe \u2014 Ebro River Spain, Danube, Dnieper, Rhine, Po River Italy\",\n  locations: [\"Spain (Ebro River)\", \"Italy\", \"Hungary\", \"Germany\", \"Romania\"],\n  season: \"April\u2013October; peak summer\",\n  bestTimes: \"Warm summer nights when wels hunt aggressively near surface.\",\n  behavior: \"Ambush predator in deep holes. Attack with incredible force. Can strand themselves on shallow banks chasing prey (beaching behavior).\",\n  bestBait: [\"Large live carp or bream\", \"Worm bunches\", \"Dead bait carp sections\", \"Large rubber lures at night\"],\n  techniques: [\"Live bait ledgered in deep holes\", \"Night surface fishing\", \"Trophy specialist guided trips on Ebro\"],\n  feedingSchedule: \"Primarily nocturnal; most active warm summer nights\",\n  sizeRange: \"20\u2013200+ lbs\",\n  recordWeight: \"297 lbs (Italy, 2010)\",\n  tags: [\"fishing\", \"freshwater\", \"europe\", \"giant-catfish\", \"trophy\", \"ebro-river\"],\n},\n{\n  id: \"atlantic-salmon\",\n  name: \"Atlantic Salmon\",\n  scientificName: \"Salmo salar\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://static.inaturalist.org/photos/60703307/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The king of fish. The Atlantic salmon's return to natal rivers to spawn has inspired literature, tradition, and obsession for centuries. Fly fishing for sea-run Atlantic salmon in Scottish highland rivers, Norwegian fjord rivers, or Canadian Gasp\u00E9 rivers is the pinnacle of the fly fishing art.\",\n  habitat: \"Cold Atlantic rivers \u2014 Scotland, Norway, Iceland, Ireland, New Brunswick, Quebec\",\n  range: \"Northern Atlantic rivers \u2014 Scotland, Norway, Iceland, Russia, Eastern Canada, Maine\",\n  locations: [\"Scotland\", \"Norway\", \"Iceland\", \"Ireland\", \"Russia\", \"New Brunswick\", \"Quebec\", \"Maine\"],\n  season: \"April\u2013October (varies by river and country)\",\n  bestTimes: \"Fresh-run fish in June\u2013July after high water. Norwegian rivers peak mid-July.\",\n  behavior: \"Run rivers to spawn; do not eat but can be provoked to strike. Extremely wary. Best taken on swung wet flies in strong current.\",\n  bestBait: [\"Classic salmon flies (Jock Scott, Thunder & Lightning)\", \"Tube flies\", \"Single hook deerhair flies\", \"Shrimp patterns\"],\n  techniques: [\"Swung wet fly across current\", \"Dead drift dry fly on low summer water\", \"Spey casting\", \"Norwegian long-line techniques\"],\n  feedingSchedule: \"Do not feed in rivers \u2014 strike out of aggression, memory, or curiosity\",\n  sizeRange: \"5\u201330 lbs typical; 60+ lbs possible in Russia\",\n  recordWeight: \"79 lbs (Norway, 1928)\",\n  tags: [\"fishing\", \"freshwater\", \"salmon\", \"fly-fishing\", \"scotland\", \"king-of-fish\"],\n},\n{\n  id: \"taimen\",\n  name: \"Taimen (Siberian Tiger Trout)\",\n  scientificName: \"Hucho taimen\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/81905063/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The world's largest salmonid. Taimen can reach 6 feet in length and 220 lbs in Siberian rivers, and the Mongolian Eg-Uur River system produces legitimate monster fish. Dry fly fishing for taimen \u2014 watching a bus-sized fish crash a mouse pattern from the bank \u2014 is the most dramatic surface strike in freshwater fishing.\",\n  habitat: \"Cold, clear Siberian and Mongolian river systems \u2014 pristine wilderness\",\n  range: \"Mongolia (Eg-Uur, Delger), Siberia (Russia), northern China\",\n  locations: [\"Mongolia\", \"Russia (Siberia)\"],\n  season: \"June\u2013September (ice-free season)\",\n  bestTimes: \"August when fish are most aggressive before preparing for winter.\",\n  behavior: \"Aggressive surface striker \u2014 crash mouse and large fly patterns. Territorial and solitary in wilderness rivers.\",\n  bestBait: [\"Large dry fly mouse patterns\", \"Big streamer flies\", \"Large spoons\"],\n  techniques: [\"Mouse fly swung on surface\", \"Large streamer strip\", \"Overnight wilderness float trips\"],\n  feedingSchedule: \"Feed opportunistically in morning and evening; attack large surface prey at any time\",\n  sizeRange: \"10\u201380 lbs; 100+ lbs in Russia\",\n  recordWeight: \"230+ lbs (Siberia, unverified rod catch)\",\n  tags: [\"fishing\", \"freshwater\", \"salmonid\", \"world-record\", \"mongolia\", \"mouse-fly\"],\n},\n{\n  id: \"european-zander\",\n  name: \"Zander (European Pike-Perch)\",\n  scientificName: \"Sander lucioperca\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://static.inaturalist.org/photos/60903772/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"Europe's premier freshwater predator and the finest table fish on the continent. Zander have the glassy tapetum lucidum eyes of a walleye and hunt at night. The Netherlands, Sweden, Germany, and the UK's rivers and canals produce exceptional zander to 20+ lbs.\",\n  habitat: \"Large rivers, canals, reservoirs, slow flowing water with depth\",\n  range: \"Central and Eastern Europe, Scandinavia, United Kingdom (introduced)\",\n  locations: [\"Germany\", \"Netherlands\", \"Sweden\", \"Poland\", \"Hungary\", \"UK\"],\n  season: \"Year-round; most productive fall through winter\",\n  bestTimes: \"Night fishing in rivers and canals from September\u2013March.\",\n  behavior: \"Schooling predator, like walleye. Hunt by sight at night. Prefer turbid water over clear.\",\n  bestBait: [\"Small live ruffe or perch\", \"Blade bait (rubber shad)\", \"Vertical jig + shad tail\"],\n  techniques: [\"Vertical jigging in rivers\", \"Night fishing with dead bait\", \"Boat drifting with jigs\"],\n  feedingSchedule: \"Primarily nocturnal; active during low light; feed at depth\",\n  sizeRange: \"1\u201315 lbs; 20+ lbs possible\",\n  recordWeight: \"26 lbs 7 oz (Netherlands)\",\n  tags: [\"fishing\", \"freshwater\", \"europe\", \"zander\", \"night-fishing\", \"table-fare\"],\n},\n{\n  id: \"nile-perch\",\n  name: \"Nile Perch\",\n  scientificName: \"Lates niloticus\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/31621005/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The apex freshwater predator of Africa. Nile perch in Lake Victoria can exceed 200 lbs and are one of Africa's most powerful sport fish. Introduced to Lake Victoria in the 1950s, they devastated the native cichlid population but created world-class sport fishing.\",\n  habitat: \"Lake Victoria (East Africa), Lake Nasser (Egypt), Nile River system\",\n  range: \"Lake Victoria (Kenya, Uganda, Tanzania), Lake Nasser (Egypt/Sudan), Nile River\",\n  locations: [\"Uganda\", \"Kenya\", \"Tanzania\", \"Egypt (Lake Nasser)\"],\n  season: \"Year-round; May\u2013August best fishing around Lake Victoria\",\n  bestTimes: \"Early morning and evening when nile perch feed aggressively near rocky shoals.\",\n  behavior: \"Ambush predator on rocky structure. Feed on smaller fish. Reach enormous sizes in Lake Victoria.\",\n  bestBait: [\"Large swimbaits\", \"Live fish\", \"Large spoons\", \"Rapala-style trolling lures\"],\n  techniques: [\"Trolling deep crankbaits\", \"Live bait fishing rocky reefs\", \"Jigging near deep rocky structure\"],\n  feedingSchedule: \"Feed throughout day on rocky structure; most aggressive at dawn\",\n  sizeRange: \"20\u2013150 lbs; 200+ lbs possible\",\n  recordWeight: \"230 lbs (Lake Victoria)\",\n  tags: [\"fishing\", \"freshwater\", \"africa\", \"giant\", \"victoria\", \"nasser\"],\n},\n{\n  id: \"goliath-tigerfish\",\n  name: \"Goliath Tigerfish\",\n  scientificName: \"Hydrocynus goliath\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/451019791/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"Africa's most fearsome freshwater predator. The goliath tigerfish has huge dagger-like interlocking teeth, attacks prey of its own size, and has reportedly attacked humans. The Congo River system harbors this spectacular and savage fish. Catching one over 50 lbs is the most extreme freshwater experience on Earth.\",\n  habitat: \"Congo River system \u2014 fast-flowing sections and deep pools, Lake Tanganyika\",\n  range: \"Democratic Republic of Congo, Congo River and tributaries\",\n  locations: [\"Democratic Republic of Congo (Congo River)\", \"Republic of Congo\"],\n  season: \"June\u2013September (dry season \u2014 lowest river levels)\",\n  bestTimes: \"July\u2013August when river is at its lowest and fish concentrate.\",\n  behavior: \"Ambush and pursuit predator with razor teeth. Attack prey larger than themselves. Powerful runs when hooked.\",\n  bestBait: [\"Large silver lures\", \"Live fish bait\", \"Metal spoons\"],\n  techniques: [\"Boat fishing with live bait\", \"Casting metal lures to rocky rapids\", \"Guided Congo River expedition\"],\n  feedingSchedule: \"Active predator throughout day in current\",\n  sizeRange: \"20\u2013100 lbs\",\n  recordWeight: \"154 lbs\",\n  tags: [\"fishing\", \"freshwater\", \"africa\", \"congo\", \"dangerous\", \"extreme\"],\n},\n{\n  id: \"murray-cod\",\n  name: \"Murray Cod\",\n  scientificName: \"Maccullochella peelii\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://static.inaturalist.org/photos/60742218/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"Australia's largest freshwater fish and a national icon. Murray cod can live 50+ years and exceed 250 lbs in large rivers. The Murray-Darling river system is the heart of Australian freshwater fishing culture. Trolling large lures near fallen timber on the Murray River is quintessential Australian fishing.\",\n  habitat: \"Murray-Darling river system \u2014 slow deep pools, fallen timber, rock ledges\",\n  range: \"Murray-Darling river basin, New South Wales, Victoria, Queensland (Australia)\",\n  locations: [\"New South Wales (Murray River)\", \"Victoria\", \"South Australia\"],\n  season: \"October\u2013June (closed June\u2013August spawning season in NSW)\",\n  bestTimes: \"Spring spawning run (October\u2013November) when large fish are accessible near banks.\",\n  behavior: \"Ambush predator in woody snags. Attack large lures dramatically. Prized catch-and-release fish.\",\n  bestBait: [\"Large wooden lures (Yabbie lures)\", \"Large soft plastics\", \"Fresh bait (carp fillet)\", \"Trolling deep divers\"],\n  techniques: [\"Trolling large diving lures near timber\", \"Cast large surface lures to snags\", \"Bait fishing deep holes\"],\n  feedingSchedule: \"Feed on snags at dusk and at night; most active at low light\",\n  sizeRange: \"5\u201350 lbs typical; 100+ lbs possible\",\n  recordWeight: \"259 lbs (historical); rod: ~113 lbs\",\n  tags: [\"fishing\", \"freshwater\", \"australia\", \"murray-cod\", \"national-icon\", \"trolling\"],\n},\n{\n  id: \"barramundi\",\n  name: \"Barramundi\",\n  scientificName: \"Lates calcarifer\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/256218238/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The target species of Australian and Southeast Asian anglers. Barramundi are powerful, spectacular fish that inhabit tropical freshwater and estuarine environments. Their dramatic gill-rattling jumps when hooked are unforgettable. Australian Top End barra fishing in billabongs is world class.\",\n  habitat: \"Tropical freshwater billabongs, estuaries, mangroves, tidal rivers\",\n  range: \"Northern Australia (Top End, Queensland), Southeast Asia, Papua New Guinea\",\n  locations: [\"Northern Territory (Australia)\", \"Queensland (Australia)\", \"Thailand\", \"Papua New Guinea\"],\n  season: \"October\u2013April (wet season Top End); year-round in Thailand\",\n  bestTimes: \"Wet season (December\u2013March) when barra are in flooded billabongs. Evening lure fishing.\",\n  behavior: \"Powerful fish that jump repeatedly \u2014 'barra rattle.' Ambush predator near snags and mangroves.\",\n  bestBait: [\"Large surface lures\", \"Large soft plastic swimbaits\", \"Live baitfish\", \"Metal vibes\"],\n  techniques: [\"Surface lure casting near structure\", \"Trolling rivers\", \"Fly fishing in clear billabongs\"],\n  feedingSchedule: \"Most active at dawn, dusk, and incoming tide in tidal areas\",\n  sizeRange: \"5\u201330 lbs; 50+ lbs in prime areas\",\n  recordWeight: \"91 lbs (Australia)\",\n  tags: [\"fishing\", \"freshwater\", \"australia\", \"tropical\", \"barramundi\", \"jumping\"],\n},\n{\n  id: \"golden-dorado\",\n  name: \"Golden Dorado\",\n  scientificName: \"Salminus brasiliensis\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/128962485/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"South America's golden predator and fly fishing's finest moment. The golden dorado of Argentina and Bolivia is considered by many the world's best freshwater fly fishing quarry \u2014 electric gold in color, built like a linebacker, and as difficult to land as a tarpon. Buenos Aires's Ibera wetlands produce world-class fish.\",\n  habitat: \"Fast-flowing rivers, Paran\u00E1 River, Uruguay River, Ibera wetlands (Argentina)\",\n  range: \"Argentina, Bolivia, Paraguay, southern Brazil, Uruguay\",\n  locations: [\"Argentina (Ibera, Paran\u00E1)\", \"Bolivia\", \"Paraguay\"],\n  season: \"July\u2013November (Argentina dry season) peak\",\n  bestTimes: \"August\u2013October when clear dry season water allows sight fishing and maximum aggression.\",\n  behavior: \"Explosive ambush strikes on large fly patterns. Jump repeatedly and run upstream powerfully. Extremely aggressive during peak season.\",\n  bestBait: [\"Large predator fly patterns (streamers)\", \"Large spoons\", \"Hard body lures\"],\n  techniques: [\"Blind casting large streamers in current\", \"Sight fishing visible fish in clear shallows\", \"Boat-based river fishing\"],\n  feedingSchedule: \"Feed aggressively throughout day in fast current; most active morning and evening\",\n  sizeRange: \"5\u201330 lbs; 40+ lbs in prime rivers\",\n  recordWeight: \"70 lbs 8 oz\",\n  tags: [\"fishing\", \"freshwater\", \"south-america\", \"argentina\", \"fly-fishing\", \"golden\"],\n},\n{\n  id: \"peacock-bass\",\n  name: \"Peacock Bass\",\n  scientificName: \"Cichla spp.\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/385276548/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The most aggressive freshwater fish in the world. The peacock bass of the Amazon and Orinoco river basins hits lures with explosive violence, runs powerful, and fights with relentless energy. The giant speckled peacock (tucunar\u00E9 a\u00E7u) of Brazil's Amazon can exceed 30 lbs.\",\n  habitat: \"Amazon tributaries, clear-water rivers, v\u00E1rzea lakes, river channels\",\n  range: \"Amazon Basin \u2014 Brazil, Venezuela, Colombia; introduced to South Florida\",\n  locations: [\"Brazil (Amazon)\", \"Venezuela\", \"Colombia\", \"Florida (Miami canals \u2014 introduced)\"],\n  season: \"August\u2013November (dry season); Florida: year-round\",\n  bestTimes: \"Amazon dry season August\u2013November when fish concentrate in receding river channels.\",\n  behavior: \"Explosive surface strikes on topwater lures. Extremely aggressive \u2014 will hit the same lure repeatedly.\",\n  bestBait: [\"Large topwater popper\", \"Large crankbait\", \"Surface walking lure\", \"Large streamer flies\"],\n  techniques: [\"Topwater casting near structure\", \"Surface lure retrieve\", \"Fly fishing in Amazon tributaries\"],\n  feedingSchedule: \"Most active at dawn and dusk surface feeding; attack throughout day\",\n  sizeRange: \"2\u201320 lbs; 30+ lbs for trophy fish\",\n  recordWeight: \"29 lbs 11 oz (Brazil)\",\n  tags: [\"fishing\", \"freshwater\", \"amazon\", \"topwater\", \"aggressive\", \"tropical\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// FISHING \u2014 SALTWATER INSHORE NORTH AMERICA\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"spotted-seatrout\",\n  name: \"Spotted Seatrout\",\n  scientificName: \"Cynoscion nebulosus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/743848224/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The bread-and-butter inshore fish of the Gulf and South Atlantic. Spotted seatrout are the most targeted inshore species in the Gulf Coast. They are beautiful, delicious, and abundant. A large 'gator trout' over 6 lbs on a topwater in a shallow grass flat is the quintessential Gulf Coast inshore experience.\",\n  habitat: \"Seagrass beds, oyster bars, shallow flats, surf zone, estuaries\",\n  range: \"Gulf Coast and South Atlantic \u2014 Texas through Virginia\",\n  locations: [\"Texas\", \"Louisiana\", \"Florida\", \"Alabama\", \"Mississippi\", \"Georgia\", \"South Carolina\"],\n  season: \"Year-round; winter trout (November\u2013February) are largest and most prized\",\n  bestTimes: \"Early morning topwater in fall and winter. Cold fronts concentrate fish in deep tidal holes.\",\n  behavior: \"Spawn in grass flats spring and fall. 'Gator trout' (females over 5 lbs) are wary. Winter fishing in deep holes extremely productive.\",\n  bestBait: [\"Gulp! shrimp under popping cork\", \"Soft plastic paddle tail\", \"Gold spoon\", \"Live shrimp\"],\n  techniques: [\"Popping cork + artificial shrimp\", \"Wading shallow grass flats\", \"Kayak fishing flats\", \"Winter deep dock/pier fishing\"],\n  feedingSchedule: \"Feed in grass flats on rising tide; dawn topwater bite; winter deep holes at midday\",\n  sizeRange: \"1\u20135 lbs typical; gator trout 6\u201312 lbs\",\n  recordWeight: \"17 lbs 7 oz (Louisiana, 1995)\",\n  tags: [\"fishing\", \"saltwater\", \"inshore\", \"gulf-coast\", \"flats\", \"beginner\"],\n},\n{\n  id: \"black-drum\",\n  name: \"Black Drum\",\n  scientificName: \"Pogonias cromis\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/728576687/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The heavyweight of the inshore world. Black drum can exceed 100 lbs and are commonly caught in 20\u201350 lb range on oyster bars and jetties. The sound of a black drum 'drumming' on the bottom is audible from a boat. Puppy drum under 15 lbs are excellent table fare.\",\n  habitat: \"Oyster bars, jetties, bay channels, surf zone, near shell bottom\",\n  range: \"Gulf Coast and South Atlantic\",\n  locations: [\"Texas\", \"Louisiana\", \"Florida\", \"Georgia\", \"South Carolina\", \"Virginia\"],\n  season: \"Year-round; spring spawning run (March\u2013May) is peak\",\n  bestTimes: \"Spring spawning run when large fish concentrate in passes and jetties. Incoming tides over oyster bars.\",\n  behavior: \"Feed on oysters, crabs, and shrimp. Mouth barbels help locate food on bottom. Large drum are tough fighters.\",\n  bestBait: [\"Live blue crab (large drum)\", \"Peeled shrimp (puppy drum)\", \"Cut mullet\", \"Fiddler crabs\"],\n  techniques: [\"Oyster bar bait fishing\", \"Jetty fishing with crab\", \"Surf fishing with crab bait\"],\n  feedingSchedule: \"Feed throughout tidal cycle over oyster bars; most active on incoming tide\",\n  sizeRange: \"Puppy drum under 15 lbs (best eating); large drum 20\u201360+ lbs\",\n  recordWeight: \"113 lbs 1 oz (Delaware, 1975)\",\n  tags: [\"fishing\", \"saltwater\", \"inshore\", \"gulf-coast\", \"oyster-bars\", \"big\"],\n},\n{\n  id: \"cobia\",\n  name: \"Cobia\",\n  scientificName: \"Rachycentron canadum\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/19249056/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The fish of a thousand names \u2014 ling, lemon fish, black salmon. Cobia are powerful, acrobatic fish that follow rays, sharks, and sea turtles along the coast. Sight-casting to cobia from elevated tower boats in the Gulf is incredibly exciting \u2014 you see the fish before you cast to it.\",\n  habitat: \"Open water coastal and offshore, around buoys and rigs, reef edges, inlets during migration\",\n  range: \"Gulf Coast, Atlantic Coast to Virginia, worldwide in warm waters\",\n  locations: [\"Virginia\", \"North Carolina\", \"Florida\", \"Alabama\", \"Texas\", \"Louisiana\"],\n  season: \"Spring migration (April\u2013June) along Gulf and Atlantic coasts\",\n  bestTimes: \"April\u2013June migration along Atlantic Coast. Gulf: May\u2013October around rigs and buoys.\",\n  behavior: \"Follow rays and sharks along coastal areas. Respond to chum aggressively. Very curious \u2014 approach boats.\",\n  bestBait: [\"Live eel\", \"Live pinfish\", \"Large jigs\", \"Chum slick\"],\n  techniques: [\"Sight-casting from tower boat\", \"Floating grass lines offshore\", \"Rig and buoy fishing\"],\n  feedingSchedule: \"Follow rays and sharks throughout day; feed aggressively when chum is present\",\n  sizeRange: \"10\u201350 lbs; trophy over 80 lbs\",\n  recordWeight: \"135 lbs 9 oz (Australia)\",\n  tags: [\"fishing\", \"saltwater\", \"inshore\", \"sight-casting\", \"migration\", \"powerful\"],\n},\n{\n  id: \"king-mackerel\",\n  name: \"King Mackerel (Kingfish)\",\n  scientificName: \"Scomberomorus cavalla\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/253653518/medium.jpeg\",\n  difficulty: \"beginner\",\n  description: \"The high-speed terrorizer of the Gulf and Atlantic Coast. King mackerel are fast, toothy, and take any bait moving at speed. The 'smoker kings' (large fish over 30 lbs) that appear offshore in fall are prized targets in Gulf Coast tournaments. The 'jump biting' behavior of kings is spectacular.\",\n  habitat: \"Nearshore and offshore coastal waters \u2014 reefs, rips, bunker pods, temperature breaks\",\n  range: \"Gulf Coast, Atlantic Coast from Florida to North Carolina\",\n  locations: [\"Florida\", \"North Carolina\", \"South Carolina\", \"Texas\", \"Louisiana\", \"Alabama\"],\n  season: \"Spring\u2013fall migration; Gulf: summer; Atlantic: spring and fall\",\n  bestTimes: \"Fall migration (September\u2013November) on North Carolina Outer Banks. Tournament season.\",\n  behavior: \"Attack from below at high speed \u2014 wire leader essential. Feed on live bait aggressively in schools.\",\n  bestBait: [\"Live menhaden (pogies)\", \"Live bluefish\", \"Hardtail (blue runner)\", \"Silver spoon\"],\n  techniques: [\"Slow trolling live bait\", \"High-speed trolling spoons\", \"Floating live bait behind boat\"],\n  feedingSchedule: \"Feed aggressively on bait schools at any time of day; most active near bait concentrations\",\n  sizeRange: \"5\u201340 lbs; smoker kings over 50 lbs\",\n  recordWeight: \"93 lbs (Puerto Rico, 1999)\",\n  tags: [\"fishing\", \"saltwater\", \"nearshore\", \"mackerel\", \"tournament\", \"smoker-king\"],\n},\n{\n  id: \"permit\",\n  name: \"Permit\",\n  scientificName: \"Trachinotus falcatus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/229031488/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The most difficult fish to catch on a fly in shallow water. Permit are the ultimate challenge of the saltwater flats \u2014 they inspect flies with intense suspicion, spook at the slightest error, and reject crab flies that aren't perfect. Landing a permit on fly is considered the greatest achievement in saltwater fly fishing.\",\n  habitat: \"Shallow sand and grass flats, tide-exposed sandy areas, deep inlet edges\",\n  range: \"Florida Keys, Yucatan (Mexico), Caribbean, Gulf Coast\",\n  locations: [\"Florida (Keys, West coast)\", \"Mexico (Yucatan)\", \"Belize\", \"Bahamas\"],\n  season: \"Year-round in Keys; peak spring and fall\",\n  bestTimes: \"Incoming tide on sandy flats in early morning. Tailing fish on grass flats.\",\n  behavior: \"Feed head-down on crabs \u2014 tail conspicuously when feeding. Extremely wary \u2014 spook at shadows and casting noise.\",\n  bestBait: [\"Live blue crab\", \"Crab fly (Merkin, Del Brown)\", \"Spawning shrimp fly\"],\n  techniques: [\"Sight-casting from poled skiff\", \"Wading flats\", \"Dedicated fly fishing pursuit only\"],\n  feedingSchedule: \"Feed on incoming tidal flats for crabs and invertebrates\",\n  sizeRange: \"5\u201330 lbs; trophy over 40 lbs\",\n  recordWeight: \"60 lbs (Brazil, 2002)\",\n  tags: [\"fishing\", \"saltwater\", \"flats\", \"fly-fishing\", \"most-difficult\", \"crab\"],\n},\n{\n  id: \"bluefish\",\n  name: \"Bluefish\",\n  scientificName: \"Pomatomus saltatrix\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/437666426/medium.jpeg\",\n  difficulty: \"beginner\",\n  description: \"The savage chopper of the Atlantic. Bluefish are relentless, ferocious feeders with razor teeth that will cut through wire leaders and bite through braided line. When a school of bluefish attacks a bunker pod, the water boils red. Popping plugs and metal lures on a bluefish blitz off New Jersey is pure chaos.\",\n  habitat: \"Nearshore coastal waters, surf zone, estuaries, offshore rips\",\n  range: \"Atlantic Coast from Maine to Florida; Gulf Coast (limited)\",\n  locations: [\"New Jersey\", \"New York\", \"Massachusetts\", \"Rhode Island\", \"Connecticut\", \"North Carolina\", \"Virginia\"],\n  season: \"May\u2013November (Atlantic Coast migration)\",\n  bestTimes: \"October blitz season on the Jersey Shore. Morning surf fishing in September.\",\n  behavior: \"Attack bait in frenzy, killing far more than they eat. Razor teeth cut through monofilament. Wire leader essential.\",\n  bestBait: [\"Metal spoons\", \"Topwater poppers\", \"Cut fish\", \"Bucktail jig\"],\n  techniques: [\"Surf casting metal lures\", \"Popping plug on blitz\", \"Chunking cut bait from boat\"],\n  feedingSchedule: \"Blitz feeding at any time; most intense at dawn and dusk\",\n  sizeRange: \"1\u201315 lbs; chopper blues over 10 lbs\",\n  recordWeight: \"31 lbs 12 oz (North Carolina, 1972)\",\n  tags: [\"fishing\", \"saltwater\", \"inshore\", \"atlantic\", \"blitz\", \"aggressive\"],\n},\n{\n  id: \"mangrove-snapper\",\n  name: \"Mangrove Snapper (Gray Snapper)\",\n  scientificName: \"Lutjanus griseus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/413518733/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The most plentiful and challenging snapper in Florida and Gulf waters. Mangrove snapper are notoriously finicky and smart \u2014 they require light line, small hooks, and fresh bait. They inhabit every dock, mangrove, and bridge in Florida, making them accessible to all anglers while remaining genuinely challenging to catch consistently.\",\n  habitat: \"Mangrove shorelines, docks, bridges, nearshore reefs, oyster bars\",\n  range: \"Florida, Gulf Coast, Caribbean\",\n  locations: [\"Florida\", \"Texas\", \"Louisiana\", \"Alabama\", \"Mississippi\"],\n  season: \"Year-round; larger fish offshore in summer\",\n  bestTimes: \"Night fishing under dock lights. Outgoing tides around mangrove points.\",\n  behavior: \"Extremely wary \u2014 detect line and leaders. Dart in to grab bait and retreat to cover immediately.\",\n  bestBait: [\"Live shrimp on small hook\", \"Small live pilchards\", \"Cut squid\", \"Live pinfish\"],\n  techniques: [\"Light fluorocarbon leader \u2014 15\u201320 lb max\", \"Free-lined live shrimp under dock\", \"Night fishing under lights\", \"Small hook presentation\"],\n  feedingSchedule: \"Most active at night under dock lights and in tidal current; feeding throughout day\",\n  sizeRange: \"0.5\u20135 lbs; offshore fish 10+ lbs\",\n  recordWeight: \"17 lbs (Everglades)\",\n  tags: [\"fishing\", \"saltwater\", \"inshore\", \"florida\", \"snapper\", \"finicky\"],\n},\n{\n  id: \"red-snapper\",\n  name: \"Red Snapper\",\n  scientificName: \"Lutjanus campechanus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/477289574/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The most popular offshore reef fish in the Gulf of Mexico. Red snapper are famous for their quality \u2014 firm, white, sweet flesh \u2014 and the ferocious competition to keep them within strict bag limits. When Gulf federal seasons open for a brief few days, millions of fishermen race offshore simultaneously.\",\n  habitat: \"Offshore natural reefs, artificial reefs, oil rigs, hard bottom in 30\u2013300 feet\",\n  range: \"Gulf of Mexico, Atlantic South Atlantic\",\n  locations: [\"Florida\", \"Alabama\", \"Mississippi\", \"Louisiana\", \"Texas\"],\n  season: \"Federal offshore season: brief June\u2013July opening; state waters vary\",\n  bestTimes: \"Opening day of federal season. Deep winter snapper on oil rigs 120+ ft.\",\n  behavior: \"Highly aggressive \u2014 attack jigs and bait dropped vertically. Stack up on structure.\",\n  bestBait: [\"Cigar minnow on chicken rig\", \"Squid\", \"Vertical jig\", \"Live bait on single hook\"],\n  techniques: [\"Vertical chicken rig at bottom\", \"Circle hook live bait\", \"Trolling reefs\"],\n  feedingSchedule: \"Active throughout day on structure; vertical position over structure\",\n  sizeRange: \"2\u201315 lbs; trophy over 25 lbs\",\n  recordWeight: \"50 lbs 4 oz (Louisiana, 1996)\",\n  tags: [\"fishing\", \"saltwater\", \"offshore\", \"gulf-mexico\", \"reef\", \"table-fare\"],\n},\n{\n  id: \"greater-amberjack\",\n  name: \"Greater Amberjack\",\n  scientificName: \"Seriola dumerili\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/300897123/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The reef donkey. Greater amberjack are one of the hardest-fighting fish in the ocean relative to their size. They inhabit deep reef structure and fight all the way to the boat \u2014 no coasting in. A 60-lb amberjack on light tackle off an oil rig platform is a back-breaking battle.\",\n  habitat: \"Deep reef structure, oil rigs, wrecks, buoy lines \u2014 60\u2013200 feet depth\",\n  range: \"Gulf of Mexico, Atlantic, worldwide warm saltwater reefs\",\n  locations: [\"Florida\", \"Texas\", \"Louisiana\", \"Alabama\", \"Georgia\", \"North Carolina\"],\n  season: \"Year-round; summer peak when fish are most abundant on shallow rigs\",\n  bestTimes: \"Summer morning on offshore oil rigs when fish are active near the surface.\",\n  behavior: \"Circle the drill string on oil rigs in massive schools. Extremely aggressive toward large jigs and live bait.\",\n  bestBait: [\"Live blue runner\", \"Large vertical jig (200\u2013300g)\", \"Popper on surface\", \"Live cigar minnow\"],\n  techniques: [\"Vertical jigging on oil rig\", \"Live bait on stand-up tackle\", \"Popping surface presentations\", \"Deep drop live bait\"],\n  feedingSchedule: \"Active throughout day; most aggressive morning on structure\",\n  sizeRange: \"15\u201360 lbs common; trophy over 100 lbs\",\n  recordWeight: \"162 lbs 10 oz (Canary Islands, 2014)\",\n  tags: [\"fishing\", \"saltwater\", \"offshore\", \"reef\", \"reef-donkey\", \"hard-fighting\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// FISHING \u2014 SALTWATER OFFSHORE\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"blue-marlin\",\n  name: \"Blue Marlin\",\n  scientificName: \"Makaira nigricans\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/161629363/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The apex of offshore big game fishing. A 1,000-lb 'grander' blue marlin is the holy grail of sportfishing. Blue marlin are majestic, powerful, and capable of taking 500 yards of line in a single run. The Azores, Madeira, Kona Hawaii, and the Bahamas are premier destinations for giant blues.\",\n  habitat: \"Deep blue water \u2014 beyond the 100-fathom curve; follows warm current edges and bait concentrations\",\n  range: \"All tropical and subtropical ocean worldwide \u2014 Atlantic, Pacific, Indian Ocean\",\n  locations: [\"Hawaii (Kona)\", \"Azores\", \"Madeira\", \"Bahamas\", \"Panama\", \"Australia\", \"Cape Verde\"],\n  season: \"April\u2013September (Atlantic); July\u2013March (Pacific Kona, Hawaii)\",\n  bestTimes: \"Kona August\u2013September, Azores July\u2013September for trophy fish over 500 lbs.\",\n  behavior: \"Feed on tuna, mahi, and squid. Lit-up electric blue when feeding. Leap dramatically when hooked. A 'grander' (1,000+ lbs) is the most coveted big game trophy.\",\n  bestBait: [\"Large skirted trolling lures\", \"Rigged horse ballyhoo\", \"Live skipjack tuna\"],\n  techniques: [\"High-speed trolling 7\u20139 mph\", \"Pitch bait to raised fish\", \"Kite fishing live tuna\"],\n  feedingSchedule: \"Active in blue water throughout day; most aggressive at dawn and temp breaks\",\n  sizeRange: \"200\u2013800 lbs; granders (1,000+ lbs) rare\",\n  recordWeight: \"1,402 lbs (Hawaii, 1982)\",\n  tags: [\"fishing\", \"saltwater\", \"offshore\", \"billfish\", \"grander\", \"hawaii\", \"bucket-list\"],\n},\n{\n  id: \"bluefin-tuna\",\n  name: \"Atlantic Bluefin Tuna\",\n  scientificName: \"Thunnus thynnus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/161933338/medium.jpeg\",\n  difficulty: \"expert\",\n  description: \"The most valuable fish in the sea \u2014 a single giant bluefin sold for $3 million at Tokyo's Tsukiji market. Atlantic bluefin are the largest tuna, reaching 1,500 lbs and swimming at 40+ mph. Chunking for school fish off Gloucester MA, or harpooning giants off Cape Cod, is legendary New England fishing.\",\n  habitat: \"Deep Atlantic open water; Gulf of Maine, Cape Hatteras, Mediterranean; follows bait migrations\",\n  range: \"North Atlantic, Gulf of Mexico spawning grounds, Mediterranean\",\n  locations: [\"Massachusetts (Gloucester)\", \"North Carolina (Cape Hatteras)\", \"Prince Edward Island\", \"Maine\"],\n  season: \"September\u2013November (school fish); July\u2013October (giant class)\",\n  bestTimes: \"September school fish off New England. October\u2013November giant bluefin off the Outer Banks.\",\n  behavior: \"Travel in large schools following herring and mackerel. Feed explosively at surface on small baitfish.\",\n  bestBait: [\"Live herring (chunking)\", \"Live mackerel\", \"Large poppers on schooling fish\", \"Jigs in current\"],\n  techniques: [\"Chunking at anchor in bluefin grounds\", \"Jigging through feeding schools\", \"Surface popping to feeding fish\"],\n  feedingSchedule: \"Feed aggressively on herring and mackerel schools; surface feeds at dawn\",\n  sizeRange: \"School fish 30\u201370 lbs; medium 70\u2013200 lbs; giant over 300 lbs\",\n  recordWeight: \"1,496 lbs (Nova Scotia, 1979)\",\n  tags: [\"fishing\", \"saltwater\", \"offshore\", \"tuna\", \"giant\", \"new-england\", \"most-valuable\"],\n},\n{\n  id: \"swordfish\",\n  name: \"Swordfish (Broadbill)\",\n  scientificName: \"Xiphias gladius\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/11989857/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The broadbill \u2014 a sword-wielding gladiator of the deep. Swordfish descend to 2,000 feet during the day to feed on squid and rise at night. Daytime deep-dropping with electric reels in 1,500 feet has revolutionized swordfish fishing. A 400-lb sword on stand-up tackle is the ultimate pelagic challenge.\",\n  habitat: \"Deep offshore water 1,000\u20133,000 feet; temperature breaks and submarine canyons\",\n  range: \"Atlantic, Pacific, Mediterranean \u2014 worldwide warm and temperate oceans\",\n  locations: [\"Florida (Miami, Key West)\", \"North Carolina (Gulf Stream canyons)\", \"New England (canyons)\", \"Hawaii\"],\n  season: \"Year-round (Florida/Hawaii); summer (New England canyons)\",\n  bestTimes: \"Nighttime swordfishing on the surface. Day-dropping in 1,200\u20131,800 feet.\",\n  behavior: \"Feed on giant squid at depth. Rise at night to near surface near temperature breaks. A deep-drop fish by day.\",\n  bestBait: [\"Large squid (night surface)\", \"Spanish mackerel (deep drop)\", \"Eel rigged with light sticks\"],\n  techniques: [\"Night surface fishing with lightstick-rigged bait\", \"Daytime deep-drop with electric reel\", \"Drift fishing in current\"],\n  feedingSchedule: \"Feed at depth during day; rise to 200\u2013400 feet at night\",\n  sizeRange: \"100\u2013300 lbs; trophy over 500 lbs\",\n  recordWeight: \"1,182 lbs (Chile, 1953)\",\n  tags: [\"fishing\", \"saltwater\", \"offshore\", \"deep-drop\", \"night-fishing\", \"gladiator\"],\n},\n{\n  id: \"roosterfish\",\n  name: \"Roosterfish\",\n  scientificName: \"Nematistius pectoralis\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://static.inaturalist.org/photos/378756334/medium.jpeg\",\n  difficulty: \"expert\",\n  description: \"The Pacific Coast's most dramatic inshore fish. The roosterfish's enormous comb-like dorsal fin erects during feeding, creating an unmistakable silhouette. Found only in the Eastern Pacific, roosters are notoriously selective and their dramatic surface chases of bait make them one of saltwater's most exciting targets.\",\n  habitat: \"Sandy beaches, rocky points, nearshore Pacific coast structure\",\n  range: \"Eastern Pacific only \u2014 Mexico (Baja, Sea of Cortez), Costa Rica, Panama, Ecuador\",\n  locations: [\"Mexico (Baja California)\", \"Costa Rica (Guanacaste)\", \"Panama\", \"Ecuador\"],\n  season: \"Year-round in tropical areas; May\u2013October preferred\",\n  bestTimes: \"Early morning on Pacific beaches when roosters chase bait in the surge.\",\n  behavior: \"Distinctive rooster comb erects when excited. Chase bait in surf zone. Difficult to hook due to selective feeding.\",\n  bestBait: [\"Live baitfish (live liner fishing)\", \"Large surface lures\", \"Fly fishing with large sardine patterns\"],\n  techniques: [\"Live bait presentation in surf zone\", \"Surface lure casting on Pacific beaches\", \"Sight-casting in clear water\"],\n  feedingSchedule: \"Hunt surf zone for baitfish at dawn and dusk; active throughout day\",\n  sizeRange: \"10\u201350 lbs; 100+ lbs possible\",\n  recordWeight: \"114 lbs 10 oz (Baja, 1960)\",\n  tags: [\"fishing\", \"saltwater\", \"pacific\", \"roosterfish\", \"eastern-pacific-only\", \"dramatic\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// FISHING \u2014 SALTWATER WORLDWIDE / INDO-PACIFIC\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"giant-trevally\",\n  name: \"Giant Trevally (GT)\",\n  scientificName: \"Caranx ignobilis\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/11911542/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The apex predator of the Indo-Pacific flats. The giant trevally is the most powerful shallow-water fish per pound \u2014 a 60-lb GT will strip 100 yards of backing before you can react. Sight-casting surface poppers to GTs on remote Indian Ocean atolls is the pinnacle of saltwater fly and lure fishing.\",\n  habitat: \"Tropical Indo-Pacific \u2014 reef edges, passes, atolls, tidal flats, open surf zone\",\n  range: \"Indo-Pacific \u2014 Seychelles, Christmas Island, Andaman Islands, Great Barrier Reef, Hawaii\",\n  locations: [\"Seychelles (Alphonse, Providence)\", \"Christmas Island\", \"Andaman Islands\", \"Hawaii\", \"Fiji\"],\n  season: \"Year-round in tropical areas; February\u2013May for Indian Ocean atolls\",\n  bestTimes: \"Tidal surges through reef passes. Morning patrol on open flats.\",\n  behavior: \"Extremely aggressive pack hunters. Chase birds and bait fish in open surf. Strike topwater lures in daylight.\",\n  bestBait: [\"Large popper (100\u2013180g)\", \"Large streamer fly (GT fly)\", \"Large stickbait\"],\n  techniques: [\"Giant popper on spinning gear\", \"Fly fishing with 12\u201314 wt rod and large GT fly\", \"Sight-casting on tropical atolls\"],\n  feedingSchedule: \"Most aggressive on tidal surges through passes; active throughout day\",\n  sizeRange: \"10\u201360 lbs; 100+ lbs possible\",\n  recordWeight: \"160 lbs (South Africa)\",\n  tags: [\"fishing\", \"saltwater\", \"indo-pacific\", \"flats\", \"popper\", \"fly-fishing\", \"apex\"],\n},\n{\n  id: \"dogtooth-tuna\",\n  name: \"Dogtooth Tuna\",\n  scientificName: \"Gymnosarda unicolor\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/511341324/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The deep-reef predator of the Indian and Pacific Oceans. Dogtooth tuna are not true tunas but are among the most powerful fish in the Indo-Pacific. They inhabit deep drop-offs on remote atolls. A 100-lb dogtooth on a vertical jig will test every piece of tackle and every arm muscle.\",\n  habitat: \"Deep reef walls and drop-offs, 50\u2013200 feet, remote tropical atolls\",\n  range: \"Indian Ocean, Pacific Ocean \u2014 Maldives, Seychelles, Papua New Guinea, Coral Sea\",\n  locations: [\"Maldives\", \"Seychelles\", \"Papua New Guinea\", \"Coral Sea (Australia)\", \"Chagos\"],\n  season: \"Year-round in tropics\",\n  bestTimes: \"Early morning vertical jigging over deep reef walls.\",\n  behavior: \"Hunt in packs over deep reef walls. Ambush prey from depth. Extremely powerful short runs.\",\n  bestBait: [\"Heavy vertical jig (300\u2013500g)\", \"Large assist hook configuration\"],\n  techniques: [\"High-speed vertical jigging on deep reef walls\", \"Heavy jigging from skiff\"],\n  feedingSchedule: \"Feed actively at deep reef edges during current changes\",\n  sizeRange: \"20\u201380 lbs; 100+ lbs in prime locations\",\n  recordWeight: \"230 lbs\",\n  tags: [\"fishing\", \"saltwater\", \"indo-pacific\", \"deep-reef\", \"jigging\", \"powerful\"],\n},\n{\n  id: \"barracuda\",\n  name: \"Great Barracuda\",\n  scientificName: \"Sphyraena barracuda\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://static.inaturalist.org/photos/64376618/medium.jpeg\",\n  difficulty: \"beginner\",\n  description: \"The silver torpedo of tropical reefs. Great barracudas are found on every tropical reef worldwide, reaching 6 feet and striking with explosive speed. They follow anglers' lures out of curiosity and attack with ferocious commitment. An excellent light-tackle target on tropical reef systems.\",\n  habitat: \"Coral reefs, reef edges, open water over shoals, tropical passes\",\n  range: \"Worldwide tropical and subtropical saltwater \u2014 Atlantic, Pacific, Indian Ocean\",\n  locations: [\"Florida\", \"Bahamas\", \"Caribbean\", \"Hawaii\", \"Maldives\", \"Great Barrier Reef\"],\n  season: \"Year-round in tropical areas\",\n  bestTimes: \"Morning trolling along reef edges. School barracuda over sand flats in shallow water.\",\n  behavior: \"Follow lures and approach divers out of curiosity. Attack silver/chrome lures. Wire leader essential.\",\n  bestBait: [\"Chrome Rapala (trolling)\", \"Large silver spoon\", \"Large tube lure\"],\n  techniques: [\"Reef trolling\", \"Sight-casting to school barracuda on flats\", \"Wire leader required on all rigs\"],\n  feedingSchedule: \"Ambush feeders active throughout day; most aggressive on tidal movement\",\n  sizeRange: \"5\u201340 lbs; trophy over 60 lbs\",\n  recordWeight: \"85 lbs (Christmas Island)\",\n  tags: [\"fishing\", \"saltwater\", \"tropical\", \"reef\", \"silver-torpedo\", \"worldwide\"],\n},\n{\n  id: \"grouper-gag\",\n  name: \"Gag Grouper\",\n  scientificName: \"Mycteroperca microlepis\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/423220135/medium.jpeg\",\n  difficulty: \"intermediate\",\n  description: \"The most important reef species in the Gulf of Mexico. Gag grouper are prized for their excellent eating and the drag-burning power of a large fish pulling into rocky structure. Offshore reef fishing for gag grouper is a cornerstone of Gulf of Mexico charter fishing.\",\n  habitat: \"Offshore rocky reefs, ledges, and live bottom in 40\u2013200 feet\",\n  range: \"Gulf of Mexico, South Atlantic\",\n  locations: [\"Florida\", \"Alabama\", \"Mississippi\", \"Louisiana\", \"Texas\", \"Georgia\", \"North Carolina\"],\n  season: \"January\u2013December; regulated seasons \u2014 check NMFS regulations\",\n  bestTimes: \"Winter when large gag move shallow (60\u201380 ft). Summer early morning deep structure.\",\n  behavior: \"Ambush predator on structure \u2014 strikes hard and heads immediately for the rocks. Must be pulled away from structure instantly.\",\n  bestBait: [\"Live pinfish\", \"Live grunts\", \"Squid on bottom rig\", \"Large vertical jig\"],\n  techniques: [\"Bottom fishing live bait on reef\", \"Vertical jigging structure\", \"Trolling live baits over ledges\"],\n  feedingSchedule: \"Feed on structure throughout day; most active at dawn and dusk\",\n  sizeRange: \"5\u201330 lbs typical; 50+ lbs possible\",\n  recordWeight: \"80 lbs 6 oz (North Carolina, 1997)\",\n  tags: [\"fishing\", \"saltwater\", \"offshore\", \"reef\", \"gulf-mexico\", \"table-fare\"],\n},\n{\n  id: \"yellowtail-snapper\",\n  name: \"Yellowtail Snapper\",\n  scientificName: \"Ocyurus chrysurus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/151931476/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The most fun snapper in the Florida Keys. Yellowtail snappers are aggressive, colorful, and exceptional eating. When chum slick is working over a Key Largo reef, yellowtails boil near the surface and take small baits with abandon. The Keys 'snapper derby' atmosphere makes yellowtail fishing a party.\",\n  habitat: \"Coral reefs, rocky bottom, reef edges in 20\u2013120 feet, near wrecks\",\n  range: \"Florida Keys, Bahamas, Caribbean\",\n  locations: [\"Florida (Keys, Dry Tortugas)\", \"Bahamas\", \"Caribbean\"],\n  season: \"Year-round in Florida; peak March\u2013September\",\n  bestTimes: \"Chum slick fishing on reef afternoon to evening. Nighttime around anchored boats.\",\n  behavior: \"Respond eagerly to chum. School in large numbers. Fight hard for their size.\",\n  bestBait: [\"Small shrimp on size 1 hook\", \"Squid\", \"Small pinfish\", \"Pieces of cut bait in chum slick\"],\n  techniques: [\"Free-lined bait in chum slick\", \"Sabiki rig\", \"Light tackle reef fishing\", \"Night fishing anchored in channel\"],\n  feedingSchedule: \"Chum slick fishing most effective; active throughout day and night on reefs\",\n  sizeRange: \"0.5\u20133 lbs; trophy over 5 lbs\",\n  recordWeight: \"11 lbs (Florida)\",\n  tags: [\"fishing\", \"saltwater\", \"florida-keys\", \"reef\", \"chum\", \"party-fish\"],\n},\n{\n  id: \"pacific-halibut\",\n  name: \"Pacific Halibut\",\n  scientificName: \"Hippoglossus stenolepis\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/11335315/medium.jpeg\",\n  difficulty: \"intermediate\",\n  description: \"Alaska's most prized sport fish and the world's largest flatfish. Pacific halibut can exceed 500 lbs and are the target of Alaska's most popular sport charter fishery. A 200-lb 'barn door' halibut is a genuine physical challenge to haul from 300 feet. Their exceptional meat quality drives enormous demand.\",\n  habitat: \"Sandy and muddy bottom, 60\u2013400 feet; feed over underwater humps and seamounts\",\n  range: \"Pacific Coast from California to Alaska; Bering Sea; Japan\",\n  locations: [\"Alaska (Homer, Seward, Kodiak)\", \"Washington\", \"Oregon\", \"British Columbia\"],\n  season: \"March\u2013November (Alaska and Pacific Coast; varies by area)\",\n  bestTimes: \"May\u2013July peak season in Alaska. Homer Spit fleet runs daily through summer.\",\n  behavior: \"Bottom ambush predators. Feed actively on pollock, octopus, and other flatfish. Fight with bulldogging power.\",\n  bestBait: [\"Large herring (whole)\", \"Salmon bellies\", \"Octopus\", \"Large lead-head jig + herring\"],\n  techniques: [\"Deep-water bottom fishing (200\u2013300 ft)\", \"Jigging heavy jigs\", \"Charter boat directed fishing\"],\n  feedingSchedule: \"Bottom feeders active throughout day with tide; most active on current\",\n  sizeRange: \"20\u2013100 lbs typical; barn doors over 200 lbs\",\n  recordWeight: \"459 lbs (Alaska, 1996)\",\n  tags: [\"fishing\", \"saltwater\", \"alaska\", \"flatfish\", \"deep-water\", \"barn-door\"],\n},\n{\n  id: \"atlantic-halibut\",\n  name: \"Atlantic Halibut\",\n  scientificName: \"Hippoglossus hippoglossus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/109037533/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The world's largest flatfish and a ghost of the North Atlantic. Atlantic halibut can reach 15 feet and 700 lbs, though fish of this size are extremely rare due to historical overfishing. Norway and Iceland still provide opportunities for trophy halibut in deep fjords where populations have partially recovered.\",\n  habitat: \"Deep cold water 200\u20132,000 feet; fjords, open ocean floor, rocky bottom\",\n  range: \"North Atlantic \u2014 Norway, Iceland, Greenland, Canada (limited), Maine\",\n  locations: [\"Norway\", \"Iceland\", \"Greenland\", \"Maine (rare)\"],\n  season: \"April\u2013September (Norwegian fjords)\",\n  bestTimes: \"Spring and early summer when halibut move shallower in Norwegian fjords.\",\n  behavior: \"Ambush from bottom; attack large baits and jigs. Ancient fish \u2014 live 50+ years.\",\n  bestBait: [\"Large mackerel or coalfish bait\", \"Heavy vertical jig (500g+)\", \"Whole herring\"],\n  techniques: [\"Deep-water vertical jigging in fjords\", \"Heavy tackle live bait\", \"Norwegian guided fjord fishing\"],\n  feedingSchedule: \"Feed on bottom opportunistically; active during tidal movement\",\n  sizeRange: \"50\u2013200 lbs typically; 300+ lbs in Norway\",\n  recordWeight: \"700+ lbs (Norway)\",\n  tags: [\"fishing\", \"saltwater\", \"norway\", \"deep-water\", \"giant-flatfish\", \"rare\"],\n},\n{\n  id: \"striped-marlin\",\n  name: \"Striped Marlin\",\n  scientificName: \"Kajikia audax\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/33570742/medium.jpeg\",\n  difficulty: \"expert\",\n  description: \"The acrobatic billfish of the Pacific. Striped marlin are slimmer and more acrobatic than blue marlin, leaping spectacularly when hooked. The Baja Peninsula (Mexico) hosts some of the most abundant striped marlin populations in the world \u2014 multiple fish per day is realistic.\",\n  habitat: \"Eastern Pacific open water; near-surface in 100\u2013300 foot depths, kelp lines\",\n  range: \"Pacific Ocean \u2014 Baja Mexico, New Zealand, Australia, Peru, Chile\",\n  locations: [\"Baja Mexico (Cabo San Lucas)\", \"New Zealand\", \"Ecuador\", \"Peru\"],\n  season: \"October\u2013March (Cabo); year-round (New Zealand)\",\n  bestTimes: \"Cabo November\u2013January when fish are abundant near shore.\",\n  behavior: \"Feed with dorsal fin cutting surface \u2014 'finning.' Leap repeatedly when hooked.\",\n  bestBait: [\"Rigged ballyhoo\", \"Small lure on teaser spread\", \"Live mackerel\"],\n  techniques: [\"Slow trolling rigged baits\", \"Casting live bait to finning fish\", \"Kayak sailfishing\"],\n  feedingSchedule: \"Surface feeding fish visible finning in morning sun; active throughout day\",\n  sizeRange: \"100\u2013250 lbs\",\n  recordWeight: \"494 lbs (New Zealand, 1986)\",\n  tags: [\"fishing\", \"saltwater\", \"pacific\", \"billfish\", \"acrobatic\", \"baja\"],\n},\n{\n  id: \"cubera-snapper\",\n  name: \"Cubera Snapper\",\n  scientificName: \"Lutjanus cyanopterus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://static.inaturalist.org/photos/401065219/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The most powerful snapper in the Western Atlantic. Cubera snapper can exceed 100 lbs and are pure muscle \u2014 a large cubera on the reef is unstoppable in its first run to structure. Night fishing with live crab on the rocky bottom of the Gulf and Caribbean is the specialized technique.\",\n  habitat: \"Rocky reef, cave overhangs, deep inshore passes, structure at 30\u2013100 feet\",\n  range: \"Florida, Gulf Coast, Caribbean, Central America\",\n  locations: [\"Florida (Keys, south coast)\", \"Caribbean islands\", \"Panama\", \"Costa Rica\"],\n  season: \"Year-round; summer spawning aggregations\",\n  bestTimes: \"Summer spawning (June\u2013August) when fish concentrate on aggregation sites.\",\n  behavior: \"Nocturnal bottom feeders. Feed heavily on crabs at night. Fight into structure immediately when hooked.\",\n  bestBait: [\"Live blue crab\", \"Live lobster (where legal)\", \"Large live fish\"],\n  techniques: [\"Night fishing live crab on bottom\", \"Heavy tackle required \u2014 80\u2013130 lb class\", \"Structure ledge fishing\"],\n  feedingSchedule: \"Primarily nocturnal \u2014 most active after dark on rocky structure\",\n  sizeRange: \"10\u201360 lbs common; 100+ lbs possible\",\n  recordWeight: \"121 lbs 8 oz (Florida, 2007 \u2014 actually Louisiana)\",\n  tags: [\"fishing\", \"saltwater\", \"reef\", \"night-fishing\", \"powerful\", \"snapper\"],\n},\n{\n  id: \"wahoo-pacific\",\n  name: \"Wahoo (Pacific)\",\n  scientificName: \"Acanthocybium solandri\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/206402044/medium.jpeg\",\n  difficulty: \"intermediate\",\n  description: \"Hawaii's favorite offshore fish. Pacific wahoo are a highly prized sport fish throughout the Pacific. Hawaii's Maui and Oahu offshore waters produce world-class wahoo. On Christmas Island and Midway Atoll, wahoo are among the most targeted species for visiting anglers.\",\n  habitat: \"Open Pacific offshore, underwater humps and seamounts, steep drop-offs\",\n  range: \"Pacific Ocean \u2014 Hawaii, Micronesia, Fiji, Tonga, Tahiti, Christmas Island\",\n  locations: [\"Hawaii\", \"Fiji\", \"Micronesia\", \"Christmas Island\", \"Tahiti\"],\n  season: \"Year-round in Hawaii; peak fall\u2013winter\",\n  bestTimes: \"Early morning trolling over deep underwater humps and seamounts.\",\n  behavior: \"Ambush from depth on high-speed lures. Single, powerful first run.\",\n  bestBait: [\"High-speed Hawaiian-style lures\", \"Rigged mackerel at speed\", \"Bullet head lures at 12+ mph\"],\n  techniques: [\"High-speed trolling (12\u201314 mph)\", \"Wire leader required\", \"Underwater hump targeting\"],\n  feedingSchedule: \"Opportunistic predator; active throughout day on current edges\",\n  sizeRange: \"20\u201360 lbs common\",\n  recordWeight: \"158 lbs 8 oz (Baja, 2005)\",\n  tags: [\"fishing\", \"saltwater\", \"pacific\", \"hawaii\", \"high-speed\", \"offshore\"],\n},\n{\n  id: \"mako-shark\",\n  name: \"Shortfin Mako Shark\",\n  scientificName: \"Isurus oxyrinchus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://static.inaturalist.org/photos/359534618/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The greyhound of the sea. Shortfin mako sharks are the fastest shark in the ocean \u2014 accelerating to 40+ mph and leaping 20 feet out of the water when hooked. Offshore shark fishing in the Atlantic Canyon system or Gulf Stream provides one of the ocean's most spectacular shows.\",\n  habitat: \"Open ocean, offshore blue water, seamount edges, temperature breaks\",\n  range: \"Worldwide offshore warm to temperate water \u2014 Atlantic, Pacific, Mediterranean\",\n  locations: [\"New Jersey\", \"New York\", \"North Carolina\", \"Florida\", \"California\", \"Hawaii\"],\n  season: \"June\u2013September (Atlantic offshore); year-round (Pacific)\",\n  bestTimes: \"Summer in Atlantic canyons and Gulf Stream. Drifting chum slick offshore.\",\n  behavior: \"Attracted to chum slicks. Leap repeatedly and spectacularly when hooked. One of few sharks dangerous to boat.\",\n  bestBait: [\"Bluefish (whole)\", \"Bonito (whole)\", \"Mackerel (chunk or whole)\"],\n  techniques: [\"Deep chum slick drift\", \"Heavy spin casting to visible fish\", \"Kite fishing for acrobatic action\"],\n  feedingSchedule: \"Active predator throughout day; attracted to chum immediately\",\n  sizeRange: \"100\u2013300 lbs; trophy over 500 lbs\",\n  recordWeight: \"1,221 lbs (Massachusetts, 2001)\",\n  tags: [\"fishing\", \"saltwater\", \"shark\", \"offshore\", \"leaping\", \"fastest-shark\"],\n},\n{\n  id: \"tuna-bigeye\",\n  name: \"Bigeye Tuna\",\n  scientificName: \"Thunnus obesus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/302883489/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The deepwater tuna with the most prized sushi flesh. Bigeye tuna are prized by commercial and sport fishermen for their blood-red, fatty flesh that commands premium sashimi prices. They inhabit deeper water than yellowfin and are targeted with deep-dropped baits and deep diving trolling rigs.\",\n  habitat: \"Deep offshore tropical and subtropical water \u2014 100\u20131,000 feet at day; surface at night\",\n  range: \"All tropical Atlantic and Pacific oceans\",\n  locations: [\"Hawaii\", \"Florida (offshore)\", \"Bahamas\", \"Gulf of Mexico (deep water)\"],\n  season: \"Year-round in tropics; summer in Gulf and Atlantic offshore\",\n  bestTimes: \"Night fishing near surface with lights. Daytime deep-drop trolling.\",\n  behavior: \"Descend to 1,000 feet during day; rise to surface at night to feed under lights.\",\n  bestBait: [\"Deep-trolled large lures on downrigger\", \"Night drifting live bait\", \"Chunk fishing with squid\"],\n  techniques: [\"Deep water trolling at 100+ feet\", \"Night surface fishing under boat lights\", \"Stand-up heavy tackle\"],\n  feedingSchedule: \"Deep during day; surface at night under lights\",\n  sizeRange: \"30\u2013150 lbs; trophy over 250 lbs\",\n  recordWeight: \"435 lbs (Korea, 1982)\",\n  tags: [\"fishing\", \"saltwater\", \"offshore\", \"tuna\", \"deep-water\", \"sashimi\"],\n},\n{\n  id: \"yellowtail-kingfish\",\n  name: \"Yellowtail Kingfish (Pacific Amberjack)\",\n  scientificName: \"Seriola lalandi\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/5853956/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The Pacific Coast's most important sport fish. The California yellowtail around Catalina Island and Baja Mexico is an iconic target. New Zealand and Australia's yellowtail kingfish are world class \u2014 grown large on clean cool water. Popping and jigging for yellow king is one of the Pacific's premier experiences.\",\n  habitat: \"Rocky kelp beds (California), offshore rocky reef (Australia, NZ), open water\",\n  range: \"California (Catalina, San Clemente), Baja Mexico, Australia, New Zealand, Japan\",\n  locations: [\"California (Catalina, San Diego)\", \"Baja Mexico\", \"New Zealand\", \"Australia (NSW)\"],\n  season: \"June\u2013October (California); year-round (Baja); September\u2013March (New Zealand)\",\n  bestTimes: \"Summer kelp bed fishing (California). New Zealand winter for prime fish.\",\n  behavior: \"Schooling fish attracted to kelp paddies and floating objects offshore.\",\n  bestBait: [\"Live sardine\", \"Large metal jig (150g)\", \"Popper\", \"Rubber tail jig\"],\n  techniques: [\"Fly-lining live sardine into school\", \"Vertical metal jigging\", \"Popping on surface school\"],\n  feedingSchedule: \"Schooling surface feeds at dawn; mid-water feeding throughout day\",\n  sizeRange: \"10\u201340 lbs (California); 40\u2013100 lbs (New Zealand/Australia)\",\n  recordWeight: \"114 lbs (Japan)\",\n  tags: [\"fishing\", \"saltwater\", \"pacific\", \"california\", \"yellowtail\", \"new-zealand\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// MORE FRESHWATER NA \u2014 SPECIALTY\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"tiger-muskie\",\n  name: \"Tiger Muskie\",\n  scientificName: \"Esox masquinongy \u00D7 Esox lucius\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/55205913/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The sterile hybrid between muskellunge and northern pike. Tiger muskies grow extremely fast (faster than either parent) and have spectacular tiger-stripe markings. They are stocked in many western reservoirs and some Midwest lakes as a trophy predator fish.\",\n  habitat: \"Stocked reservoirs and lakes; weedy shallows in summer; basin flats in winter\",\n  range: \"Stocked throughout US \u2014 prominent in Wyoming, Colorado, Utah, Washington\",\n  locations: [\"Wyoming\", \"Colorado\", \"Utah\", \"Washington\", \"Montana\"],\n  season: \"Year-round; fall (September\u2013November) is peak season\",\n  bestTimes: \"Fall cooling water when tigers feed aggressively before winter.\",\n  behavior: \"Highly aggressive hybrid \u2014 more willing to strike than pure muskie. Faster growing; spectacular markings.\",\n  bestBait: [\"Large bucktail spinners\", \"Glide baits\", \"Jerkbaits\", \"Large swimbaits\"],\n  techniques: [\"Cast-and-retrieve large bucktail\", \"Slow-burn glide bait\", \"Figure-8 retrieve at boat\"],\n  feedingSchedule: \"Ambush feeder; feeding windows 1\u20132 times per day typically\",\n  sizeRange: \"10\u201340 lbs\",\n  recordWeight: \"51 lbs 3 oz (Wisconsin \u2014 some debate)\",\n  tags: [\"fishing\", \"freshwater\", \"hybrid\", \"trophy\", \"western-reservoirs\", \"tiger\"],\n},\n{\n  id: \"bowfin\",\n  name: \"Bowfin (Mudfish)\",\n  scientificName: \"Amia calva\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/71576108/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"A living fossil \u2014 unchanged for 100 million years. Bowfin inhabit dark swampy backwaters and can breathe air with their modified swim bladder. They fight with savage tenacity and will hit almost any lure. Night bowfin fishing in southern swamps is an underrated adventure.\",\n  habitat: \"Swampy backwaters, shallow weedy lakes, dark tannic southern waters, bayous\",\n  range: \"Eastern US \u2014 Great Lakes, Mississippi drainage, southeast swamps\",\n  locations: [\"Louisiana\", \"Mississippi\", \"Alabama\", \"Georgia\", \"Florida\", \"Arkansas\", \"Tennessee\"],\n  season: \"Year-round; spawn April\u2013June\",\n  bestTimes: \"Spring spawning when males guard nests in shallow water. Night fishing in summer.\",\n  behavior: \"Breathe air at surface \u2014 visible from boat. Extremely aggressive when guarding spawn nest.\",\n  bestBait: [\"Live minnows\", \"Topwater frogs\", \"Plastic worms\", \"Flashy spinnerbaits\"],\n  techniques: [\"Cast topwater near swampy vegetation\", \"Night fishing in bayous\", \"Spawn nest targeting in spring\"],\n  feedingSchedule: \"Opportunistic day and night predator in warm water\",\n  sizeRange: \"1\u201310 lbs\",\n  recordWeight: \"21 lbs 8 oz (South Carolina, 1980)\",\n  tags: [\"fishing\", \"freshwater\", \"prehistoric\", \"swamp\", \"bowfin\", \"underrated\"],\n},\n{\n  id: \"longnose-gar\",\n  name: \"Longnose Gar\",\n  scientificName: \"Lepisosteus osseus\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/9828456/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"A prehistoric predator in freshwater. Longnose gar have remained unchanged for 100 million years and inhabit slow rivers and lakes throughout the eastern US. They can be caught on nylon rope lures that tangle in their teeth, or on conventional lures. Bowfishing for gar is extremely popular.\",\n  habitat: \"Slow rivers, backwater lakes, reservoirs, quiet weedy areas\",\n  range: \"Eastern US, Mississippi drainage, Great Lakes\",\n  locations: [\"Texas\", \"Oklahoma\", \"Louisiana\", \"Mississippi\", \"Tennessee\", \"Florida\"],\n  season: \"Year-round; spawn April\u2013June in shallow areas\",\n  bestTimes: \"Summer when gar roll at the surface in shallow areas.\",\n  behavior: \"Roll at surface to gulp air. Ambush small fish with quick sideways strike.\",\n  bestBait: [\"Nylon rope lure (tangles in teeth)\", \"Live baitfish\", \"Soft plastic swimbait\"],\n  techniques: [\"Nylon rope casting near rolling gar\", \"Bowfishing at night with light\", \"Cast-and-retrieve swimbaits\"],\n  feedingSchedule: \"Ambush predator active throughout day near structure\",\n  sizeRange: \"2\u201315 lbs common\",\n  recordWeight: \"50 lbs 5 oz (Trinity River, Texas)\",\n  tags: [\"fishing\", \"freshwater\", \"prehistoric\", \"bowfishing\", \"gar\", \"nylon-rope\"],\n},\n{\n  id: \"burbot\",\n  name: \"Burbot (Eelpout / Lawyer)\",\n  scientificName: \"Lota lota\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/189028180/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The freshwater cod \u2014 North America's only freshwater member of the cod family. Burbot are bizarre, snake-like fish that thrive in the coldest, darkest conditions. They spawn under ice in February and are best caught through the ice in January and February when they move to shallows.\",\n  habitat: \"Cold, deep, clear northern lakes and rivers \u2014 Lake Superior, Lake of the Woods, Canadian lakes\",\n  range: \"Northern US and Canada \u2014 Great Lakes, boreal Canada, Alaska, Siberia\",\n  locations: [\"Minnesota\", \"Wisconsin\", \"Montana\", \"Alaska\", \"Canada (Great Slave Lake, Lake Winnipeg)\"],\n  season: \"Ice fishing December\u2013March (peak); open water spring\",\n  bestTimes: \"February spawning run under ice. Night ice fishing near rocky bottom.\",\n  behavior: \"Bottom-hugging, nocturnal. Spawn in large aggregations under ice in late January\u2013February.\",\n  bestBait: [\"Dead smelt on hook\", \"Minnow on jigging spoon\", \"Tip-up with dead bait\"],\n  techniques: [\"Ice fishing tip-up with dead sucker\", \"Night jigging through ice\", \"Open water dead-bait on bottom\"],\n  feedingSchedule: \"Primarily nocturnal; feed in near-freezing water under ice\",\n  sizeRange: \"1\u20135 lbs; trophy over 10 lbs\",\n  recordWeight: \"25 lbs (Alaska)\",\n  tags: [\"fishing\", \"freshwater\", \"ice-fishing\", \"freshwater-cod\", \"nocturnal\", \"bizarre\"],\n},\n{\n  id: \"sockeye-salmon\",\n  name: \"Sockeye Salmon (Red Salmon)\",\n  scientificName: \"Oncorhynchus nerka\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://static.inaturalist.org/photos/63131203/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The most abundant and commercially valuable Pacific salmon. Sockeye turn brilliant crimson red with green heads during spawning \u2014 one of nature's most spectacular color transformations. Alaska's Kenai River sockeye run is legendary \u2014 red-to-red combat fishing produces hundreds of fish per day for skilled anglers.\",\n  habitat: \"Pacific rivers and tributary lakes; Kenai, Copper, Naknek rivers (Alaska)\",\n  range: \"Pacific Coast \u2014 Alaska, British Columbia, Washington, Oregon, Idaho\",\n  locations: [\"Alaska (Kenai River, Russian River)\", \"British Columbia\", \"Washington\", \"Oregon\"],\n  season: \"June\u2013August (varies by river); multiple runs\",\n  bestTimes: \"July peak run on Kenai River. Russian River confluence is famous for combat fishing.\",\n  behavior: \"Do not feed on spawning run but strike aggressively out of reflex. 'Flossing' technique required on Kenai.\",\n  bestBait: [\"Fly \u2014 comet fly (copper)\", \"Spin-n-glo\", \"No real 'bait' \u2014 timing mouth approach\"],\n  techniques: [\"Kenai 'flossing' technique\", \"Fly fishing Russian River combat style\", \"Drift fishing comet flies\"],\n  feedingSchedule: \"Not feeding in rivers; strike triggers based on irritation and reflex\",\n  sizeRange: \"5\u201312 lbs\",\n  recordWeight: \"15 lbs 3 oz (Kenai River, Alaska)\",\n  tags: [\"fishing\", \"freshwater\", \"salmon\", \"alaska\", \"kenai\", \"crimson-red\"],\n},\n{\n  id: \"pink-salmon\",\n  name: \"Pink Salmon (Humpy)\",\n  scientificName: \"Oncorhynchus gorbuscha\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://static.inaturalist.org/photos/231239083/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The most abundant Pacific salmon and the fastest light tackle action in Alaska. Pink salmon run every two years in staggering numbers \u2014 millions per river. Males develop a distinctive dorsal hump, earning the nickname 'humpback' or 'humpy.' Spinning for pinks on ultra-light tackle is pure fun.\",\n  habitat: \"Pacific Coast rivers \u2014 streams within a few miles of ocean, salt water near mouths\",\n  range: \"Pacific Coast from California to Alaska; Puget Sound to Prudhoe Bay\",\n  locations: [\"Alaska\", \"Washington (Puget Sound)\", \"British Columbia\"],\n  season: \"July\u2013September (odd years in most areas)\",\n  bestTimes: \"Odd years (2025, 2027) for odd-year runs. July\u2013August peak runs.\",\n  behavior: \"Extremely abundant in even and odd year cycles. Males develop humped back and hooked jaw.\",\n  bestBait: [\"Pink/chartreuse spoons\", \"Pink streamers on fly rod\", \"Salmon eggs\"],\n  techniques: [\"Ultra-light spinning with pink lures\", \"Fly rod casting near river mouth\", \"Puget Sound saltwater fishing\"],\n  feedingSchedule: \"Strike out of aggression in rivers; feed in salt water on small baitfish\",\n  sizeRange: \"3\u20138 lbs\",\n  recordWeight: \"14 lbs 13 oz (Kenai River)\",\n  tags: [\"fishing\", \"freshwater\", \"salmon\", \"alaska\", \"abundant\", \"beginner\"],\n},\n{\n  id: \"cisco-tullibee\",\n  name: \"Cisco (Tullibee / Lake Herring)\",\n  scientificName: \"Coregonus artedi\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/196279735/medium.jpeg\",\n  difficulty: \"intermediate\",\n  description: \"The premier ice fishing target of the northern states and Canada. Cisco (lake herring) congregate in large schools under the ice during their November\u2013December spawning run, providing extraordinary ice fishing when anglers can find the school. They are also the preferred bait for trophy walleye and northern pike.\",\n  habitat: \"Cold, clear northern lakes \u2014 Lake Erie, Lake of the Woods, Minnesota lakes\",\n  range: \"Great Lakes, northern Minnesota, Wisconsin, Canada\",\n  locations: [\"Minnesota\", \"Wisconsin\", \"Michigan\", \"North Dakota\", \"Canada\"],\n  season: \"November\u2013December ice fishing during spawn; year-round by boat\",\n  bestTimes: \"November\u2013December spawning run under ice. Schools visible on sonar.\",\n  behavior: \"Spawn in November under ice \u2014 school massively in shallows. Dart at small lures.\",\n  bestBait: [\"Tiny jigging spoon (gold/silver)\", \"Waxworm on small hook\", \"Small jigging lure\"],\n  techniques: [\"Ice fishing with tiny spoon over school\", \"Find school on depth finder\", \"Jigging continuously near school\"],\n  feedingSchedule: \"Active feeders during spawning; school feeding during daylight\",\n  sizeRange: \"0.5\u20132 lbs\",\n  recordWeight: \"4 lbs 14 oz\",\n  tags: [\"fishing\", \"freshwater\", \"ice-fishing\", \"northern-lakes\", \"spawn\", \"herring\"],\n},\n{\n  id: \"lake-whitefish\",\n  name: \"Lake Whitefish\",\n  scientificName: \"Coregonus clupeaformis\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/185273414/medium.jpeg\",\n  difficulty: \"beginner\",\n  description: \"The supreme ice fishing target and finest eating freshwater fish in the Great Lakes. Lake whitefish are the most commercially important freshwater fish in Canada. Ice fishing for whitefish in Manitoba, Ontario, or Minnesota produces excellent sport on light tackle with delicate presentations.\",\n  habitat: \"Deep cold lakes \u2014 Great Lakes, Canadian Shield lakes, northern impoundments\",\n  range: \"Great Lakes, Canada, Alaska, Siberia\",\n  locations: [\"Michigan\", \"Wisconsin\", \"Minnesota\", \"Canada (Manitoba, Ontario)\"],\n  season: \"Ice fishing December\u2013March; open water spring and fall\",\n  bestTimes: \"December\u2013February ice fishing. Pre-spawn (October) in shallows.\",\n  behavior: \"School over sand and gravel bottom. Pick up tiny baits delicately \u2014 light bite detection required.\",\n  bestBait: [\"Small tungsten jig with maggots\", \"Tiny wax worm\", \"Small spoon with maggot\"],\n  techniques: [\"Light ice fishing with ultra-sensitive rod\", \"Very light 2\u20134 lb line\", \"Jigging tiny spoons at bottom\"],\n  feedingSchedule: \"Feed on zooplankton and bottom invertebrates continuously; active all day under ice\",\n  sizeRange: \"1\u20135 lbs; trophy over 8 lbs\",\n  recordWeight: \"15 lbs 6 oz (Ontario, 1984)\",\n  tags: [\"fishing\", \"freshwater\", \"ice-fishing\", \"great-lakes\", \"table-fare\", \"delicate\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// MORE EUROPEAN / WORLD FRESHWATER\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"carp-european\",\n  name: \"Common Carp\",\n  scientificName: \"Cyprinus carpio\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/2754663/medium.JPG\",\n  difficulty: \"intermediate\",\n  description: \"Europe's most popular and sophisticated coarse fish. Carp fishing in Europe is a serious discipline \u2014 anglers camp lakeside for days with high-tech bite alarms, boilies, and specialist tackle. In the US, carp are an underutilized but powerful sport fish that readily takes fly presentations. Trophy carp over 40 lbs are regularly caught in Europe.\",\n  habitat: \"Slow rivers, lakes, reservoirs, ponds, canals \u2014 highly adaptable\",\n  range: \"Worldwide \u2014 Europe, Asia (native), introduced to every continent\",\n  locations: [\"Europe (everywhere)\", \"UK (trophy fisheries)\", \"Netherlands\", \"France (big carp)\", \"US (all states)\"],\n  season: \"Year-round; peak spring and summer\",\n  bestTimes: \"Summer feeding on surface and margins. European big carp season spring\u2013fall.\",\n  behavior: \"Intelligent, cautious, and powerful. Learn patterns quickly. European carp fishing is highly technical.\",\n  bestBait: [\"Boilies (European method)\", \"Corn kernels\", \"Bread (surface fishing)\", \"Pellets\"],\n  techniques: [\"European carp tactics \u2014 hair rig + boilie\", \"Fly fishing for US carp in rivers\", \"Surface bread fishing\"],\n  feedingSchedule: \"Feed throughout day; most active at dawn and dusk; surface feeding on hot days\",\n  sizeRange: \"5\u201330 lbs typical; 60+ lbs in trophy European waters\",\n  recordWeight: \"112 lbs (Hungary, 2012)\",\n  tags: [\"fishing\", \"freshwater\", \"europe\", \"carp\", \"specialist\", \"fly-fishing\"],\n},\n{\n  id: \"mahseer\",\n  name: \"Golden Mahseer\",\n  scientificName: \"Tor putitora\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/9757563/medium.jpeg\",\n  difficulty: \"expert\",\n  description: \"The mightiest freshwater fish of the Himalayas. Golden mahseer are revered in India as the 'Himalayan snow leopard' of sport fish \u2014 powerful, rare, and found in the most pristine mountain rivers. Their spectacular golden scales and unstoppable power have made them legendary among anglers worldwide.\",\n  habitat: \"Swift, cold, clear Himalayan rivers \u2014 Ganges tributaries, Ramganga, Cauvery River\",\n  range: \"Himalayas \u2014 Nepal, northern India, Bhutan, Pakistan\",\n  locations: [\"India (Uttarakhand, Jim Corbett area)\", \"Nepal\", \"Bhutan\"],\n  season: \"October\u2013February (ideal water conditions)\",\n  bestTimes: \"November\u2013January when rivers are clear and low. Catch-and-release only at most locations.\",\n  behavior: \"Use river current against anglers. Powerful runs downstream. Fight with incredible endurance.\",\n  bestBait: [\"Large spoons\", \"Spinning lures\", \"Fly fishing with large patterns\"],\n  techniques: [\"Spinning with large metal lures\", \"Fly fishing with streamer flies\", \"Guided specialist river trips\"],\n  feedingSchedule: \"Feed in rapids and runs \u2014 most active in morning and evening\",\n  sizeRange: \"10\u201360 lbs; 100+ lbs historically reported\",\n  recordWeight: \"119 lbs (historical reports)\",\n  tags: [\"fishing\", \"freshwater\", \"india\", \"himalayan\", \"golden\", \"rare\"],\n},\n{\n  id: \"tigerfish-africa\",\n  name: \"African Tigerfish\",\n  scientificName: \"Hydrocynus vittatus\",\n  category: \"freshwater\",\n  imageKey: \"bass\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/5887192/medium.jpeg\",\n  difficulty: \"intermediate\",\n  description: \"The most exciting freshwater fish in Africa. African tigerfish have spectacular silvery scales with black stripes, razor-sharp interlocking teeth, and attack with vicious aggression. The Okavango Delta and Zambezi River produce excellent tigerfish. The fish are also famous for leaping out of the water to catch birds.\",\n  habitat: \"Large African rivers and delta systems \u2014 Zambezi, Okavango, Kafue\",\n  range: \"Southern and Eastern Africa \u2014 Zambia, Botswana, Zimbabwe, Tanzania\",\n  locations: [\"Zambia (Kafue, Zambezi)\", \"Botswana (Okavango)\", \"Zimbabwe (Lake Kariba)\"],\n  season: \"April\u2013October (dry season)\",\n  bestTimes: \"August\u2013September when water is clearest and fish concentrate.\",\n  behavior: \"Aggressive pack hunters. Jump repeatedly when hooked. Attack surface lures and sub-surface presentations.\",\n  bestBait: [\"Surface poppers\", \"Metal spoons\", \"Soft plastic swimbaits\", \"Fly fishing streamers\"],\n  techniques: [\"Surface lure casting from boat\", \"Fly fishing in channels\", \"Guided Okavango Delta fishing\"],\n  feedingSchedule: \"Highly aggressive feeders throughout day; ambush in channel currents\",\n  sizeRange: \"2\u201315 lbs; 20+ lbs in prime areas\",\n  recordWeight: \"35 lbs\",\n  tags: [\"fishing\", \"freshwater\", \"africa\", \"tigerfish\", \"aggressive\", \"teeth\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// ADDITIONAL SALTWATER \u2014 INSHORE AND NEARSHORE\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"pompano\",\n  name: \"Florida Pompano\",\n  scientificName: \"Trachinotus carolinus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/94619954/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The finest eating fish in the ocean. Florida pompano is universally considered the best-tasting inshore fish \u2014 firm, sweet, buttery white meat. They run the beaches and surf zone throughout the Gulf and South Atlantic, providing outstanding surf fishing. Small, fast fighters that provide excellent sport on light tackle.\",\n  habitat: \"Surf zone, sandy beaches, tidal inlets, grass flat edges\",\n  range: \"Gulf Coast, Atlantic Coast from Florida to Virginia\",\n  locations: [\"Florida\", \"Georgia\", \"South Carolina\", \"North Carolina\", \"Virginia\", \"Alabama\", \"Texas\"],\n  season: \"Spring (March\u2013May) and fall (September\u2013November) migration runs\",\n  bestTimes: \"Early spring run in Florida surf and inlets. Fall migration on Outer Banks.\",\n  behavior: \"Travel in schools along beaches. Feed on sand fleas (mole crabs) and small crustaceans.\",\n  bestBait: [\"Sand flea (mole crab)\", \"Small jig + sand flea combo\", \"Shrimp\"],\n  techniques: [\"Surf fishing with sand flea\", \"Small jig along beach\", \"Wading Florida grass flats\"],\n  feedingSchedule: \"Feed in surf zone on tidal movement; most active incoming tide\",\n  sizeRange: \"0.5\u20133 lbs; trophy over 4 lbs\",\n  recordWeight: \"8 lbs 4 oz (Florida, 1999)\",\n  tags: [\"fishing\", \"saltwater\", \"inshore\", \"surf\", \"finest-eating\", \"florida\"],\n},\n{\n  id: \"jack-crevalle\",\n  name: \"Jack Crevalle\",\n  scientificName: \"Caranx hippos\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/1800499/medium.JPG\",\n  difficulty: \"beginner\",\n  description: \"Pound-for-pound, the hardest fighting inshore fish. Jack crevalle are brutal, relentless fighters that will completely exhaust an angler on light tackle. They school in large pods and attack bait with explosive surface feeding. Not great table fare but exceptional sport fishing.\",\n  habitat: \"Bays, inlets, passes, nearshore ocean, bridges, any coastal structure\",\n  range: \"Gulf Coast, Atlantic Coast \u2014 Florida to Virginia\",\n  locations: [\"Florida\", \"Louisiana\", \"Texas\", \"Georgia\", \"South Carolina\"],\n  season: \"Year-round; summer schools most abundant\",\n  bestTimes: \"Anytime a surface school is spotted busting bait. Morning passes and bridges.\",\n  behavior: \"Chase schools of baitfish to surface, attacking in rolling boils. One of the strongest fighters per pound in saltwater.\",\n  bestBait: [\"Topwater plug\", \"Surface popper\", \"Large jig\", \"Anything in the water during a feeding frenzy\"],\n  techniques: [\"Cast to busting schools\", \"Surface lure retrieve\", \"Pier and bridge fishing\"],\n  feedingSchedule: \"School feeding frenzies at any time; most common morning and evening\",\n  sizeRange: \"5\u201320 lbs; 40+ lbs possible\",\n  recordWeight: \"58 lbs 8 oz (Angola, 2000)\",\n  tags: [\"fishing\", \"saltwater\", \"inshore\", \"hard-fighting\", \"surface-feeding\", \"jack\"],\n},\n{\n  id: \"spanish-mackerel\",\n  name: \"Spanish Mackerel\",\n  scientificName: \"Scomberomorus maculatus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/716362968/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The most accessible schooling pelagic fish on the Atlantic and Gulf Coast. Spanish mackerel migrate in massive schools from Florida to the Carolinas in spring and fall. They attack metal lures and small jigs aggressively, making them ideal for beginner saltwater anglers and providing outstanding fast action.\",\n  habitat: \"Nearshore coastal water 20\u201360 feet; follows baitfish schools; grass flats edges\",\n  range: \"Atlantic Coast Florida to New England; Gulf Coast\",\n  locations: [\"North Carolina\", \"Virginia\", \"Georgia\", \"Florida\", \"Alabama\", \"Texas\", \"Louisiana\"],\n  season: \"Spring (April\u2013June) and fall (September\u2013November) migration runs\",\n  bestTimes: \"Spring Outer Banks migration April\u2013May. Fall return run in September.\",\n  behavior: \"School in large numbers following menhaden. Attack metal lures at high speed. Razor teeth.\",\n  bestBait: [\"Small silver metal jig (3/4 oz)\", \"Gotcha plug\", \"Pink bucktail jig\"],\n  techniques: [\"Pier and jetty jigging\", \"Trolling small spoons at 5\u20137 mph\", \"Cast metal from boat into school\"],\n  feedingSchedule: \"Morning surface feeding on baitfish schools; aggressive throughout day\",\n  sizeRange: \"0.5\u20135 lbs\",\n  recordWeight: \"13 lbs (North Carolina)\",\n  tags: [\"fishing\", \"saltwater\", \"inshore\", \"migrating\", \"easy\", \"beginner\"],\n},\n{\n  id: \"tripletail\",\n  name: \"Tripletail\",\n  scientificName: \"Lobotes surinamensis\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/9645532/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The floater. Tripletail are bizarre-looking fish that float on their sides near the surface, mimicking leaves and debris around buoys, crab trap floats, and any floating object. Sight-casting to floating tripletail around buoys is unique and highly entertaining saltwater fishing.\",\n  habitat: \"Float near buoys, crab trap markers, floating debris, offshore weed lines\",\n  range: \"Gulf Coast, Atlantic Coast from Florida to New York, Caribbean\",\n  locations: [\"Florida\", \"Alabama\", \"Mississippi\", \"Louisiana\", \"Texas\", \"Georgia\"],\n  season: \"May\u2013October; peak summer\",\n  bestTimes: \"Summer around crab trap floats in Gulf Coast bays. Offshore buoys in clear water.\",\n  behavior: \"Float near surface objects mimicking debris. React aggressively when properly presented shrimp.\",\n  bestBait: [\"Live shrimp cast within inches of fish\", \"Artificial shrimp\", \"Small jig\"],\n  techniques: [\"Sight-fishing from elevated bow\", \"Cast shrimp within 6 inches of fish\", \"Shallow Gulf Coast buoy hopping\"],\n  feedingSchedule: \"Ambush predator near surface objects; active throughout day\",\n  sizeRange: \"2\u201315 lbs\",\n  recordWeight: \"42 lbs 5 oz (South Africa, 1989)\",\n  tags: [\"fishing\", \"saltwater\", \"sight-fishing\", \"buoy\", \"unique\", \"tripletail\"],\n},\n{\n  id: \"ladyfish\",\n  name: \"Ladyfish (Tenpounder)\",\n  scientificName: \"Elops saurus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/458673791/medium.jpeg\",\n  difficulty: \"beginner\",\n  description: \"A mini tarpon experience. Ladyfish are related to tarpon and provide similar aerial acrobatics on light tackle. They school in large numbers in coastal areas and attack lures aggressively. Not great table fare but exceptional fun on light spinning gear \u2014 a ladyfish on an ultralight rod is pure entertainment.\",\n  habitat: \"Shallow coastal bays, estuaries, beaches, pier edges\",\n  range: \"Gulf Coast, South Atlantic Coast\",\n  locations: [\"Florida\", \"Texas\", \"Louisiana\", \"Georgia\"],\n  season: \"Year-round in Florida; spring\u2013fall elsewhere\",\n  bestTimes: \"Dawn surface action in shallow bays. Evening tidal incoming schooling activity.\",\n  behavior: \"School aggressively in bays. Jump repeatedly when hooked \u2014 acrobatic fights.\",\n  bestBait: [\"Small spoons\", \"Small jigs\", \"Live shrimp\"],\n  techniques: [\"Light spinning tackle near surface\", \"Small jig cast into school\", \"Evening bay shore casting\"],\n  feedingSchedule: \"Schooling surface feeds at dawn and dusk; active throughout day\",\n  sizeRange: \"0.5\u20133 lbs\",\n  recordWeight: \"6 lbs 8 oz (Canary Islands)\",\n  tags: [\"fishing\", \"saltwater\", \"inshore\", \"acrobatic\", \"mini-tarpon\", \"beginner\"],\n},\n{\n  id: \"weakfish\",\n  name: \"Weakfish (Squeteague / Sea Trout)\",\n  scientificName: \"Cynoscion regalis\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://static.inaturalist.org/photos/536835341/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The original inshore fish of the mid-Atlantic. Weakfish were once the most important sport fish on the Atlantic Coast from New Jersey to the Carolinas. Their populations have declined significantly, making each catch a treasure. Named 'weakfish' for their tender mouths that allow hooks to tear free.\",\n  habitat: \"Bay grasses, sandy bottom, tidal creeks, coastal surf zone\",\n  range: \"Atlantic Coast \u2014 Maine to Florida; primarily New Jersey to Virginia\",\n  locations: [\"New Jersey\", \"Delaware\", \"Maryland\", \"Virginia\", \"New York\", \"North Carolina\"],\n  season: \"April\u2013October (mid-Atlantic migration)\",\n  bestTimes: \"Spring spawning run (May) in Delaware Bay. Night fishing in back bays in summer.\",\n  behavior: \"Night feeders in estuaries. Weak mouth \u2014 use light drag to avoid tear-offs. School in bays.\",\n  bestBait: [\"Live shrimp\", \"Bucktail jig + curly tail\", \"Gulp! swimming mullet\"],\n  techniques: [\"Night fishing in back bays\", \"Light tackle trolling grass beds\", \"Drift fishing with shrimp\"],\n  feedingSchedule: \"Most active at night in summer; dawn and dusk tidal feeding\",\n  sizeRange: \"1\u20135 lbs; trophy over 10 lbs\",\n  recordWeight: \"19 lbs 2 oz (Trinidad, 1962)\",\n  tags: [\"fishing\", \"saltwater\", \"atlantic\", \"night-fishing\", \"bay\", \"declined\"],\n},\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// MORE WORLDWIDE SALTWATER\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n{\n  id: \"trevally-bluefin\",\n  name: \"Bluefin Trevally\",\n  scientificName: \"Caranx melampygus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/20989833/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The electric blue trevally of tropical Pacific and Indian Ocean flats. Bluefin trevally are among the most striking fish in the ocean \u2014 iridescent blue-green flanks with electric blue fins. They inhabit shallow tropical flats and respond aggressively to flies and surface lures.\",\n  habitat: \"Tropical coral reef flats, shallow atolls, sandy passes, Indian/Pacific Ocean shallows\",\n  range: \"Indo-Pacific \u2014 Hawaii, Maldives, Seychelles, Great Barrier Reef, Micronesia\",\n  locations: [\"Hawaii\", \"Maldives\", \"Seychelles\", \"Guam\", \"Fiji\"],\n  season: \"Year-round in tropical areas\",\n  bestTimes: \"Incoming tidal flats on remote atolls. Morning coral reef hunting.\",\n  behavior: \"Aggressive hunters on flats and reef edges. Flash brilliantly when excited. Faster than GT but smaller.\",\n  bestBait: [\"Small surface popper\", \"Bonefish-style fly\", \"Small jig\"],\n  techniques: [\"Sight-casting on tropical flats\", \"Fly fishing with intermediate fly line\", \"Small popper near reef edges\"],\n  feedingSchedule: \"Active throughout day on flats and reef edges\",\n  sizeRange: \"1\u201315 lbs\",\n  recordWeight: \"21 lbs (Hawaii)\",\n  tags: [\"fishing\", \"saltwater\", \"indo-pacific\", \"flats\", \"electric-blue\", \"tropical\"],\n},\n{\n  id: \"dorado-pacific\",\n  name: \"Pacific Dorado (Mahi-Mahi)\",\n  scientificName: \"Coryphaena hippurus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/361046671/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The Pacific Coast's most spectacular offshore target. Pacific dorado (called mahi-mahi in Hawaii) are identical to Atlantic dolphinfish but are found from Baja through Central America to Ecuador. Cabo San Lucas pelagic fishing \u2014 green and gold dorado exploding on a short pitch bait \u2014 is an iconic experience.\",\n  habitat: \"Pacific blue water weed lines, floating debris, warm current edges\",\n  range: \"Pacific Coast \u2014 Baja Mexico, Costa Rica, Panama, Ecuador, Hawaii\",\n  locations: [\"Baja Mexico\", \"Costa Rica\", \"Panama\", \"Ecuador\", \"Hawaii\"],\n  season: \"Year-round; peak spring and summer\",\n  bestTimes: \"May\u2013October offshore Baja. Costa Rica late dry season March\u2013April.\",\n  behavior: \"School around floating objects. Hold school with hooked fish. Light up brilliantly when fighting.\",\n  bestBait: [\"Pitch bait (live goggle eye)\", \"Rigged ballyhoo\", \"Bright feather jig\"],\n  techniques: [\"Trolling weed lines\", \"Pitch bait to visible fish\", \"Kite fishing with multiple baits\"],\n  feedingSchedule: \"Active throughout day; attracted to floating debris at any time\",\n  sizeRange: \"5\u201330 lbs; 60+ lbs possible\",\n  recordWeight: \"87 lbs (Costa Rica, 1976)\",\n  tags: [\"fishing\", \"saltwater\", \"pacific\", \"offshore\", \"colorful\", \"mahi-mahi\"],\n},\n{\n  id: \"giant-queenfish\",\n  name: \"Giant Queenfish\",\n  scientificName: \"Scomberoides commersonnianus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://static.inaturalist.org/photos/341981629/medium.jpeg\",\n  difficulty: \"intermediate\",\n  description: \"The leaping acrobat of the Indo-Pacific coastline. Giant queenfish are spectacular sport fish in Australia, the Persian Gulf, and throughout Southeast Asia. They are famous for making enormous leaps \u2014 sometimes 10 feet out of the water \u2014 when hooked on surface lures.\",\n  habitat: \"Coastal Indo-Pacific waters, estuaries, near-shore open water, rocky headlands\",\n  range: \"Australia, India, Southeast Asia, Persian Gulf\",\n  locations: [\"Australia (NT, Queensland)\", \"India\", \"UAE\", \"Thailand\", \"Sri Lanka\"],\n  season: \"Year-round in tropical Australia\",\n  bestTimes: \"Early morning incoming tides near rocky headlands.\",\n  behavior: \"Leap spectacularly when hooked \u2014 can reach 10+ feet. Feed in schools near surface.\",\n  bestBait: [\"Surface lures\", \"Medium metal jig\", \"Soft plastic swimbaits\"],\n  techniques: [\"Surface lure casting\", \"Metal jig\", \"Shore-based casting from headlands\"],\n  feedingSchedule: \"Surface feeding active at dawn and dusk; follow baitfish\",\n  sizeRange: \"5\u201320 lbs\",\n  recordWeight: \"29 lbs\",\n  tags: [\"fishing\", \"saltwater\", \"australia\", \"leaping\", \"surface-lure\", \"acrobatic\"],\n},\n{\n  id: \"amberjack-almaco\",\n  name: \"Almaco Jack\",\n  scientificName: \"Seriola rivoliana\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/130330796/medium.jpeg\",\n  difficulty: \"intermediate\",\n  description: \"The deepwater amberjack of the world's tropical oceans. Almaco jacks inhabit deeper structure than greater amberjack and are found on seamounts, volcanic ridges, and offshore pinnacles worldwide. In Hawaii, almaco jack (kahala) are caught on deep vertical jigs.\",\n  habitat: \"Offshore pinnacles, seamounts, deep reef structure 60\u2013300 feet\",\n  range: \"Worldwide tropical and subtropical offshore \u2014 Atlantic, Pacific, Indian Ocean\",\n  locations: [\"Hawaii\", \"Florida (offshore)\", \"Azores\", \"Canary Islands\", \"Gulf of Mexico\"],\n  season: \"Year-round\",\n  bestTimes: \"Morning over seamounts and pinnacles.\",\n  behavior: \"School on deep structure. Aggressive toward vertical jigs and heavy lures.\",\n  bestBait: [\"Heavy vertical jig (200\u2013400g)\", \"Large swimbaits\", \"Live bait on deep drop\"],\n  techniques: [\"Heavy vertical jigging on seamount\", \"Deep live bait\", \"Offshore trip-rod fishing\"],\n  feedingSchedule: \"Feed on structure throughout day; most active at dawn\",\n  sizeRange: \"10\u201350 lbs; 70+ lbs possible\",\n  recordWeight: \"132 lbs (Canary Islands, 2000)\",\n  tags: [\"fishing\", \"saltwater\", \"offshore\", \"seamount\", \"jigging\", \"deep-reef\"],\n},\n{\n  id: \"permit-pacific\",\n  name: \"Pompano (Pacific)\",\n  scientificName: \"Trachinotus paitensis\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/56929911/medium.jpeg\",\n  difficulty: \"intermediate\",\n  description: \"The Pacific counterpart to Florida pompano. Pacific pompano inhabit the surf zones and sandy beaches from Baja Mexico through Central America. Similar in habit to Florida pompano \u2014 feeding on sand crabs in the surf \u2014 they provide excellent light tackle surf fishing along the Pacific coast.\",\n  habitat: \"Sandy beaches and surf zones, Pacific Coast from Mexico to Peru\",\n  range: \"Eastern Pacific \u2014 Baja Mexico, Guatemala, Costa Rica, Ecuador\",\n  locations: [\"Baja Mexico\", \"Guatemala\", \"El Salvador\", \"Costa Rica\", \"Ecuador\"],\n  season: \"Year-round in tropical areas\",\n  bestTimes: \"Early morning incoming tide on sandy Pacific beaches.\",\n  behavior: \"School in surf feeding on sand crabs. Similar to Florida pompano behavior.\",\n  bestBait: [\"Sand crabs\", \"Small jig\", \"Shrimp\"],\n  techniques: [\"Surf fishing with sand crabs\", \"Light tackle jig along beach\", \"Wading surf zone\"],\n  feedingSchedule: \"Feed in surf zone on tidal movement\",\n  sizeRange: \"0.5\u20134 lbs\",\n  recordWeight: \"5 lbs\",\n  tags: [\"fishing\", \"saltwater\", \"pacific-coast\", \"surf\", \"pompano\", \"central-america\"],\n},\n{\n  id: \"black-sea-bass\",\n  name: \"Black Sea Bass\",\n  scientificName: \"Centropristis striata\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/11662926/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The party boat favorite of the Northeast. Black sea bass are robust, colorful reef fish that stack up on artificial reefs and rocky structure from New England to the Carolinas. They provide excellent light tackle bottom fishing for all skill levels from charter boats and party boats.\",\n  habitat: \"Rocky reef, artificial reefs, wrecks, hard bottom in 20\u2013120 feet\",\n  range: \"Atlantic Coast from Maine to Georgia; most abundant from NJ to NC\",\n  locations: [\"New Jersey\", \"New York\", \"Rhode Island\", \"Connecticut\", \"Maryland\", \"Virginia\"],\n  season: \"May\u2013December; regulated seasons and size limits apply\",\n  bestTimes: \"Late summer and fall when fish concentrate on offshore structure.\",\n  behavior: \"Aggressive bite on cut squid. Stack on structure in large numbers. Hermaphrodites \u2014 larger females can change to males.\",\n  bestBait: [\"Squid strips\", \"Clam\", \"Crab pieces\"],\n  techniques: [\"Bottom fishing with hi-lo rig\", \"Drift fishing over reef\", \"Party boat reef fishing\"],\n  feedingSchedule: \"Feed aggressively throughout day on structure\",\n  sizeRange: \"0.5\u20133 lbs; trophy over 5 lbs\",\n  recordWeight: \"10 lbs 4 oz (Virginia, 2000)\",\n  tags: [\"fishing\", \"saltwater\", \"northeast\", \"reef\", \"party-boat\", \"beginner\"],\n},\n{\n  id: \"tautog\",\n  name: \"Tautog (Blackfish)\",\n  scientificName: \"Tautoga onitis\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/180768523/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The green teeth of the Northeast rockpile. Tautog are rugged, powerful, and smarter than they look \u2014 they'll peel the crab off a hook and spit the shell. Their crab-crushing teeth and habit of locking down on structure make them one of the most challenging bottom fish in the Northeast.\",\n  habitat: \"Rocky structure, boulder fields, jetties, bridge pilings, mussel beds \u2014 any hard structure\",\n  range: \"Atlantic Coast from Maine to South Carolina\",\n  locations: [\"New York\", \"New Jersey\", \"Rhode Island\", \"Connecticut\", \"Massachusetts\", \"Maryland\"],\n  season: \"April\u2013November; winter hibernation in mud\",\n  bestTimes: \"Fall (October\u2013November) when largest fish are at shallow structure. Spring post-winter feed.\",\n  behavior: \"Bite crab very gently \u2014 barely distinguishable from rockpicking. Lock down in structure when hooked.\",\n  bestBait: [\"Green crab (small)\", \"Fiddler crab\", \"Hermit crab\", \"Asian shore crab\"],\n  techniques: [\"Bottom rock fishing \u2014 short sensitive rod\", \"Natural crab bait on bare hook\", \"Precise structure fishing\"],\n  feedingSchedule: \"Feed on crabs and mussels throughout day; most active mid-morning\",\n  sizeRange: \"1\u201310 lbs; trophy over 20 lbs\",\n  recordWeight: \"28 lbs 8 oz (Virginia, 1987)\",\n  tags: [\"fishing\", \"saltwater\", \"northeast\", \"blackfish\", \"crab\", \"rocky-structure\"],\n},\n{\n  id: \"kelp-bass\",\n  name: \"Kelp Bass (Calico Bass)\",\n  scientificName: \"Paralabrax clathratus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://static.inaturalist.org/photos/37051188/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"Southern California's most important inshore sport fish. Kelp bass (calicos) inhabit the vast kelp forests of the California coast and are targeted by millions of anglers annually. They are aggressive lure biters that respond to surface iron, swimbaits, and live squid. Catalina Island and the kelp beds of San Diego are legendary.\",\n  habitat: \"Offshore kelp beds, Rocky reefs, nearshore kelp forests, pier pilings\",\n  range: \"Southern California, Baja Mexico\",\n  locations: [\"California (San Diego, Catalina, Malibu)\", \"Baja California\"],\n  season: \"Year-round; peak summer spawning aggregations\",\n  bestTimes: \"Summer surface iron fishing at dawn in kelp beds. Catalina summer nights.\",\n  behavior: \"Aggressively attack surface iron lures at kelp canopy. Feed on squid and anchovies.\",\n  bestBait: [\"Live squid\", \"Surface iron lure\", \"Swimbait\", \"Live anchovies\"],\n  techniques: [\"Surface iron cast on kelp edge\", \"Live squid at kelp canopy\", \"Swimbait in kelp forest\"],\n  feedingSchedule: \"Surface iron bite best at dawn; feed throughout day at kelp edges\",\n  sizeRange: \"1\u20136 lbs; trophy 'toad' over 10 lbs\",\n  recordWeight: \"14 lbs 7 oz (California, 1993)\",\n  tags: [\"fishing\", \"saltwater\", \"california\", \"kelp-bass\", \"surface-iron\", \"kelp-forest\"],\n},\n{\n  id: \"lingcod\",\n  name: \"Lingcod\",\n  scientificName: \"Ophiodon elongatus\",\n  category: \"saltwater\",\n  imageKey: \"redfish\",\n  photoUrl: \"https://static.inaturalist.org/photos/121620546/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"The dragon of the Pacific. Lingcod are ambush predators of the deep rocky reefs of the Pacific Coast. Their enormous heads, fearsome teeth, and stunning bluish-green flesh make them unique. They will attack fish half their own size and engulf a large rockfish or jig with savage force.\",\n  habitat: \"Deep rocky reefs and kelp beds 30\u2013200 feet, Pacific Coast\",\n  range: \"Pacific Coast \u2014 California to Alaska\",\n  locations: [\"Alaska\", \"Oregon\", \"Washington\", \"California\", \"British Columbia\"],\n  season: \"May\u2013December (varies by state); rock cod season\",\n  bestTimes: \"Spring when lingcod are shallow on spawning grounds. October before season closes.\",\n  behavior: \"Ambush predators on rocky structure. Will engulf other hooked fish ('lipping'). Guard nests of eggs.\",\n  bestBait: [\"Large live rockfish\", \"Large swimbaits (3\u20134 oz)\", \"Large jigs\"],\n  techniques: [\"Live rockfish on jig\", \"Heavy jig on deep rocky reef\", \"Drift fishing over pinnacles\"],\n  feedingSchedule: \"Ambush predator on structure; active throughout day\",\n  sizeRange: \"5\u201330 lbs; trophy over 50 lbs\",\n  recordWeight: \"82 lbs (Washington, 1994)\",\n  tags: [\"fishing\", \"saltwater\", \"pacific\", \"deep-reef\", \"lingcod\", \"dragon\"],\n},\n\n// More hunting to reach 150 total\n{\n  id: \"wood-pigeon-eu\",\n  name: \"Common Wood Pigeon (European)\",\n  scientificName: \"Columba palumbus\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/108521205/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"Europe's most abundant and popular game bird, offering year-round decoying possibilities. The wood pigeon shooting tradition in the UK involves elaborate decoy spreads in harvested grain fields and peas. Shooting pigeons over a decoy spread on a still morning with a well-trained dog is considered by many British sportsmen the ideal day's sport.\",\n  habitat: \"Agricultural fields, woodland edges, beech and oak mast areas\",\n  range: \"Entire Europe, Middle East, Central Asia\",\n  locations: [\"United Kingdom\", \"France\", \"Spain\", \"Germany\", \"Sweden\", \"Netherlands\"],\n  season: \"Year-round in UK; certain seasonal restrictions in other countries\",\n  bestTimes: \"Pea and rape field shooting in summer and fall. Beech wood roost shooting in winter.\",\n  behavior: \"Decoy readily over fields. Come to flight lines predictably between roost and feed. Flock in huge numbers in winter.\",\n  bestBait: [\"Dead pigeon decoys\", \"Shell decoys\", \"Bouncing decoys\"],\n  techniques: [\"Decoying over fields with magnet decoy\", \"Hide in hedge or pit blind\", \"Roost shooting in timber\"],\n  feedingSchedule: \"Morning and afternoon feeding flights between roost and crops\",\n  sizeRange: \"10\u201317 oz\",\n  recordWeight: \"1.5 lbs\",\n  tags: [\"hunting\", \"small-game\", \"europe\", \"uk\", \"decoying\", \"abundant\"],\n},\n{\n  id: \"iberian-ibex\",\n  name: \"Spanish Ibex (Iberian Ibex)\",\n  scientificName: \"Capra pyrenaica\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/176370768/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"Spain's prized mountain trophy. Four subspecies of Spanish ibex inhabit different mountain ranges across the Iberian Peninsula. The beceite, ronda, southeastern, and Gredos ibex all provide spectacular mountain hunting in spectacular Mediterranean terrain. Hunting all four is the Spanish ibex 'Grand Slam.'\",\n  habitat: \"Rocky Mediterranean mountain terrain \u2014 Sierra Nevada, Gredos, Cazorla ranges\",\n  range: \"Spain \u2014 Sierra Nevada, Gredos, Beceite, Murcia mountain ranges\",\n  locations: [\"Spain (Andalusia, Aragon, Extremadura, Castilla)\"],\n  season: \"October\u2013March (varies by subspecies and region)\",\n  bestTimes: \"December\u2013January rut when bucks are active and visible on rocky ridges.\",\n  behavior: \"Four subspecies across different Spanish mountain ranges. Extremely agile on steep rocky terrain.\",\n  bestBait: [\"Spot from across valley with optics\"],\n  techniques: [\"Mountain spot-and-stalk\", \"Guided Spanish mountain hunt\", \"High-seat approaches in some areas\"],\n  feedingSchedule: \"Graze rocky mountain herbs and scrub; morning and evening\",\n  sizeRange: \"55\u2013165 lbs (bucks vary by subspecies)\",\n  recordWeight: \"200 lbs\",\n  tags: [\"hunting\", \"big-game\", \"spain\", \"mountain\", \"four-subspecies\", \"ibex-slam\"],\n},\n\n// Remaining hunting entries to reach 150\n{\n  id: \"muskox\",\n  name: \"Musk Ox\",\n  scientificName: \"Ovibos moschatus\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/348194143/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"A relic of the Pleistocene ice age. Musk oxen have inhabited the Arctic tundra for hundreds of thousands of years. Their wool (qiviut) is eight times warmer than sheep wool. An Arctic musk ox hunt in the Northwest Territories or Greenland is a unique wilderness expedition.\",\n  habitat: \"Arctic and subarctic tundra, open barren lands, rocky hillsides\",\n  range: \"Arctic Canada (NWT, Nunavut), Greenland, Alaska, Norway (introduced)\",\n  locations: [\"Northwest Territories\", \"Nunavut\", \"Greenland\", \"Alaska (limited)\"],\n  season: \"August\u2013September\",\n  bestTimes: \"August when herds are on open tundra before fall weather arrives.\",\n  behavior: \"Form defensive circles when threatened. Bulls fight with dramatic head-to-head clashes during August rut.\",\n  bestBait: [\"No bait \u2014 spot herds on open tundra\"],\n  techniques: [\"Snowmobile/ATV access to Arctic\", \"Approach downwind to herd\", \"Open tundra stalk\"],\n  feedingSchedule: \"Graze continuously on Arctic sedges, grasses, and willows\",\n  sizeRange: \"400\u2013900 lbs (bulls)\",\n  recordWeight: \"900 lbs\",\n  tags: [\"hunting\", \"big-game\", \"arctic\", \"prehistoric\", \"once-in-a-lifetime\", \"relic\"],\n},\n{\n  id: \"nutria\",\n  name: \"Nutria (Coypu)\",\n  scientificName: \"Myocastor coypus\",\n  category: \"small-game\",\n  imageKey: \"turkey\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/349974188/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The invasive marsh rodent of the Gulf Coast. Nutria (from South America) have devastated Louisiana's coastal marshes, eating the roots of marsh grass and causing enormous erosion. Louisiana has launched 'Nutria for Food' campaigns to control them. Night hunting with spotlight and rifle is the primary method.\",\n  habitat: \"Louisiana coastal marsh, freshwater wetlands, irrigation canals\",\n  range: \"Louisiana (primary), Maryland, Oregon, Pacific Northwest \u2014 invasive\",\n  locations: [\"Louisiana\", \"Maryland (Chesapeake)\", \"Oregon\"],\n  season: \"Year-round; encouraged hunting \u2014 no limit in Louisiana\",\n  bestTimes: \"Night hunting from airboat or flat-bottom on Louisiana marsh.\",\n  behavior: \"Travel along marsh channels at night. Feed on plant roots \u2014 destructive to marsh.\",\n  bestBait: [\"No bait \u2014 night spotlight hunting\"],\n  techniques: [\"Spotlight hunting from airboat\", \".22 rifle or shotgun night hunting\", \"Trap line in marsh\"],\n  feedingSchedule: \"Crepuscular and nocturnal forager in marsh vegetation\",\n  sizeRange: \"10\u201320 lbs\",\n  recordWeight: \"25+ lbs\",\n  tags: [\"hunting\", \"small-game\", \"invasive\", \"louisiana\", \"night-hunting\", \"conservation\"],\n},\n{\n  id: \"eurasian-lynx\",\n  name: \"Eurasian Lynx\",\n  scientificName: \"Lynx lynx\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://static.inaturalist.org/photos/56302453/medium.jpeg\",\n  difficulty: \"expert\",\n  description: \"Northern Europe's stealthy wildcat. The Eurasian lynx is the largest wild cat in Europe and one of Scandinavia's most prized hunting trophies. Norway and Sweden manage sustainable hunts based on population quotas. Hunting lynx with hounds on snow in Norwegian forests is a prestigious and demanding winter hunt.\",\n  habitat: \"Dense boreal forest, taiga, mountain woodland with prey availability\",\n  range: \"Scandinavia, Eastern Europe, Russia, Central Asia\",\n  locations: [\"Norway\", \"Sweden\", \"Finland\", \"Russia\", \"Romania\"],\n  season: \"February\u2013March (Scandinavia); strictly quota-controlled\",\n  bestTimes: \"Fresh snow for tracking. February when cats are most active.\",\n  behavior: \"Solitary and secretive. Track and ambush prey (roe deer, reindeer). Strictly quota-limited hunting.\",\n  bestBait: [\"Dog hunting on snow tracking\", \"Predator call\"],\n  techniques: [\"Hound hunting on snow track\", \"Snow tracking on foot\", \"Norwegian mountain forest hunting\"],\n  feedingSchedule: \"Ambush predator; kill every 3\u20135 days; primarily nocturnal\",\n  sizeRange: \"40\u201385 lbs\",\n  recordWeight: \"95 lbs\",\n  tags: [\"hunting\", \"big-game\", \"scandinavia\", \"wildcat\", \"quota-controlled\", \"boreal\"],\n},\n{\n  id: \"pronghorn-does\",\n  name: \"Pronghorn (Desert Subspecies)\",\n  scientificName: \"Antilocapra americana sonoriensis\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/243730068/medium.jpg\",\n  difficulty: \"expert\",\n  description: \"The rarest and most restricted pronghorn subspecies. The Sonoran pronghorn inhabits the harshest desert terrain in North America \u2014 Arizona's Sonoran Desert and the Mexican state of Sonora. Fewer than 200 animals remain in the US. Any opportunity to hunt this animal legally is extraordinarily rare.\",\n  habitat: \"Sonoran desert flats, open desert plains, Arizona upland desert\",\n  range: \"Arizona (extremely limited), Sonora Mexico\",\n  locations: [\"Arizona (Barry Goldwater Range area)\"],\n  season: \"Extremely limited draw tags \u2014 possibly once per decade opportunity\",\n  bestTimes: \"Fall when temperatures are tolerable in desert\",\n  behavior: \"Speed and vision on open desert terrain \u2014 identical to standard pronghorn but desert-adapted.\",\n  bestBait: [\"Desert water tanks\", \"Long-range optics for spotting\"],\n  techniques: [\"Open desert spot-and-stalk\", \"Water source approach\"],\n  feedingSchedule: \"Feed early morning and late afternoon in desert heat\",\n  sizeRange: \"90\u2013120 lbs\",\n  recordWeight: \"130 lbs\",\n  tags: [\"hunting\", \"big-game\", \"rare\", \"arizona\", \"desert\", \"endangered-subspecies\"],\n},\n{\n  id: \"muntjac-uk\",\n  name: \"Reeve's Muntjac\",\n  scientificName: \"Muntiacus reevesi\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/130968788/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"The barking deer of English woodland. Introduced from China, Reeve's muntjac have spread across England and are now the most numerous deer in many southern counties. They are small, year-round breeders that cause significant woodland damage. Year-round open season makes them one of the most accessible deer in Britain.\",\n  habitat: \"English woodland, bramble thickets, garden edges, scrub woodland\",\n  range: \"England (widespread south of Yorkshire), some populations in Belgium\",\n  locations: [\"England (Suffolk, Hertfordshire, Bedfordshire, Oxfordshire)\"],\n  season: \"Year-round (no closed season in England)\",\n  bestTimes: \"Dawn and dusk in woodland clearings. Any time of year.\",\n  behavior: \"Bark repeatedly when alarmed \u2014 'barking deer' nickname. Year-round breeding \u2014 no rut. Solitary.\",\n  bestBait: [\"Highseat ambush over woodland ride\", \"Woodland stalking\"],\n  techniques: [\"Woodland highseat\", \"Still-stalking at dawn\", \"Woodland ride ambush at dusk\"],\n  feedingSchedule: \"Feed at dawn and dusk on woodland rides and clearings\",\n  sizeRange: \"20\u201335 lbs\",\n  recordWeight: \"40 lbs\",\n  tags: [\"hunting\", \"big-game\", \"uk-england\", \"year-round\", \"woodland\", \"invasive\"],\n},\n{\n  id: \"feral-pig-australia\",\n  name: \"Feral Pig (Australia)\",\n  scientificName: \"Sus scrofa\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/414500081/medium.jpg\",\n  difficulty: \"beginner\",\n  description: \"One of Australia's most destructive invasive species \u2014 and a premier hunting target. Feral pigs inhabit every mainland state in Australia in enormous numbers. Helicopter pig shooting and four-wheel-drive hunts across vast outback stations provide unlimited hunting for no cost with landowner permission.\",\n  habitat: \"Australian outback grassland, wetland margins, sugar cane fields, tropical savanna\",\n  range: \"Australia \u2014 every mainland state in pest quantities\",\n  locations: [\"Queensland\", \"New South Wales\", \"Victoria\", \"South Australia\", \"Northern Territory\", \"Western Australia\"],\n  season: \"Year-round; encouraged hunting \u2014 major pest\",\n  bestTimes: \"Dry season (May\u2013October) in tropics when animals concentrate near water.\",\n  behavior: \"Travel in mobs at night. Hunt water sources in dry season. Highly destructive to agriculture.\",\n  bestBait: [\"Water source ambush\", \"Grain over corn feeder\"],\n  techniques: [\"Helicopter pig shooting\", \"Night spotlight hunting\", \"Dog hunting (Australian tradition)\", \"Stalking water sources\"],\n  feedingSchedule: \"Nocturnal feeders; early morning and evening water visits\",\n  sizeRange: \"50\u2013200 lbs; boars up to 330 lbs\",\n  recordWeight: \"330+ lbs in Australia\",\n  tags: [\"hunting\", \"big-game\", \"australia\", \"invasive\", \"year-round\", \"no-limit\"],\n},\n{\n  id: \"water-buffalo-australia\",\n  name: \"Water Buffalo (Feral, Australia)\",\n  scientificName: \"Bubalus bubalis\",\n  category: \"big-game\",\n  imageKey: \"deer\",\n  photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/4666378/medium.jpg\",\n  difficulty: \"intermediate\",\n  description: \"Australia's Arnhem Land water buffalo are massive feral animals descended from domestics released in the 1800s. Northern Territory buffalo are legitimately large game animals \u2014 bulls can exceed 2,000 lbs. Helicopter mustering and spot-and-stalk hunting in the Top End is uniquely Australian big game.\",\n  habitat: \"Northern Territory floodplains, paperbark swamps, tropical savanna\",\n  range: \"Northern Territory Australia (primary)\", \n  locations: [\"Northern Territory, Australia\"],\n  season: \"Year-round with landowner permission; commercial harvest\",\n  bestTimes: \"Dry season May\u2013October when buffalo concentrate near permanent water.\",\n  behavior: \"Form herds on floodplains. Extremely dangerous when wounded \u2014 similar to African buffalo.\",\n  bestBait: [\"Water source approach\"],\n  techniques: [\"Helicopter-assisted stalking\", \"Spot-and-stalk on NT floodplain\", \"Guided Top End big game hunt\"],\n  feedingSchedule: \"Graze floodplain grasses; water daily in dry season\",\n  sizeRange: \"1,000\u20132,200 lbs (bulls)\",\n  recordWeight: \"2,200+ lbs\",\n  tags: [\"hunting\", \"big-game\", \"australia\", \"feral\", \"dangerous\", \"northern-territory\"],\n},\n];\n", "import { SPECIES_EXTRA } from './species-extra';\n\nexport interface SpeciesData {\n  id: string;\n  name: string;\n  scientificName: string;\n  category: \"big-game\" | \"waterfowl\" | \"freshwater\" | \"saltwater\" | \"small-game\";\n  imageKey: string;\n  photoUrl: string;\n  difficulty: \"beginner\" | \"intermediate\" | \"expert\";\n  description: string;\n  habitat: string;\n  range: string;\n  locations: string[];\n  season: string;\n  bestTimes: string;\n  behavior: string;\n  bestBait: string[];\n  techniques: string[];\n  feedingSchedule: string;\n  sizeRange: string;\n  recordWeight: string;\n  tags: string[];\n}\n\nexport const SPECIES_DATABASE: SpeciesData[] = [\n  // \u2500\u2500\u2500 BIG GAME \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  {\n    id: \"whitetail-deer\",\n    name: \"Whitetail Deer\",\n    scientificName: \"Odocoileus virginianus\",\n    category: \"big-game\",\n    imageKey: \"deer\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/110157765/medium.jpg\",\n    difficulty: \"intermediate\",\n    description:\n      \"North America's most pursued big game animal. Highly adaptable and distributed across 48 states, the whitetail's cunning and explosive speed make every encounter memorable.\",\n    habitat:\n      \"Edge habitat \u2014 forest borders, agricultural fields, river bottoms, brushy creek drainages. Thrives where hardwood forest meets open land.\",\n    range: \"48 contiguous US states, southern Canada, Central America\",\n    locations: [\n      \"Texas\",\"Illinois\",\"Iowa\",\"Wisconsin\",\"Kansas\",\"Missouri\",\"Ohio\",\"Michigan\",\n      \"Pennsylvania\",\"Minnesota\",\"Indiana\",\"Georgia\",\"Alabama\",\"Mississippi\",\n      \"Tennessee\",\"Kentucky\",\"Virginia\",\"North Carolina\",\"South Carolina\",\n      \"New York\",\"Oklahoma\",\"Arkansas\",\"Louisiana\",\"Maryland\",\"West Virginia\",\n    ],\n    season: \"Sep 1 \u2013 Feb 15 (varies by state/weapon)\",\n    bestTimes:\n      \"Golden hour \u2014 30 min before sunrise and after sunset. November rut (Nov 1\u201315) bucks move all day. Cold fronts trigger exceptional movement within 24 hours.\",\n    behavior:\n      \"Crepuscular; beds in heavy cover midday. Bucks leave scrapes and rubs during pre-rut (Oct). Rut peaks early November \u2014 bucks chase does relentlessly and abandon caution.\",\n    bestBait: [\"Corn\", \"Acorns\", \"Apples\", \"Mineral Licks\", \"Mock Scrapes\", \"Estrus Doe Urine\"],\n    techniques: [\n      \"Treestand over food source or funnel\",\n      \"Ground blind near field edge\",\n      \"Still hunting hardwood ridges\",\n      \"Rattling antlers during pre-rut\",\n      \"Grunt calls to stop or attract bucks\",\n      \"Doe bleats during rut\",\n    ],\n    feedingSchedule: \"Dawn & dusk primary feeding; bucks abandon patterns during November rut\",\n    sizeRange: \"90\u2013300 lbs (mature bucks); 50\u2013150 lbs (does)\",\n    recordWeight: \"511 lbs live weight (Minnesota) / 333 lbs dressed\",\n    tags: [\"hunting\", \"big-game\", \"north-america\", \"archery\", \"rifle\", \"rut\"],\n  },\n  {\n    id: \"mule-deer\",\n    name: \"Mule Deer\",\n    scientificName: \"Odocoileus hemionus\",\n    category: \"big-game\",\n    imageKey: \"deer\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/5207830/medium.jpg\",\n    difficulty: \"intermediate\",\n    description:\n      \"The western deer. Mule deer inhabit rugged mountain terrain from Baja to the Yukon. Their stott-jump gait and massive mule-like ears are unmistakable. Spot-and-stalk hunting in open country is the quintessential western challenge.\",\n    habitat:\n      \"Semi-arid shrublands, mountain foothills, sagebrush flats, pinyon-juniper zones, alpine meadows. Migrate vertically with seasons.\",\n    range: \"Western United States, western Canada, Baja Mexico\",\n    locations: [\n      \"Colorado\",\"Wyoming\",\"Montana\",\"Idaho\",\"Utah\",\"Nevada\",\"Oregon\",\"Washington\",\n      \"California\",\"New Mexico\",\"Arizona\",\"South Dakota\",\"North Dakota\",\"Nebraska\",\n    ],\n    season: \"Oct 1 \u2013 Dec 15 (archery Sep; rifle varies by unit)\",\n    bestTimes:\n      \"Pre-rut (late Oct\u2013early Nov). Spot bucks feeding on south-facing slopes in morning; glass all day from high vantage points.\",\n    behavior:\n      \"Less nocturnal than whitetail \u2014 bucks feed in open country at all hours during rut. Relies on eyesight over nose. Prefers to watch potential danger rather than flee immediately.\",\n    bestBait: [\"Alfalfa fields (glassing)\", \"Water sources in arid terrain\", \"Wallows\"],\n    techniques: [\n      \"Spot-and-stalk with binoculars + spotting scope\",\n      \"Archery spot-and-stalk under 60 yards\",\n      \"Saddle ambush on migration routes\",\n      \"Call with doe bleats or buck grunts\",\n    ],\n    feedingSchedule: \"Morning feeding on open slopes; beds on rocky high points midday; evening return to feed\",\n    sizeRange: \"125\u2013280 lbs (bucks); 95\u2013160 lbs (does)\",\n    recordWeight: \"460 lbs live (Colorado)\",\n    tags: [\"hunting\", \"big-game\", \"western\", \"spot-and-stalk\", \"archery\"],\n  },\n  {\n    id: \"rocky-mountain-elk\",\n    name: \"Rocky Mountain Elk\",\n    scientificName: \"Cervus canadensis nelsoni\",\n    category: \"big-game\",\n    imageKey: \"elk\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/581404691/medium.jpg\",\n    difficulty: \"expert\",\n    description:\n      \"The holy grail of North American big game. A bugling 6x6 bull in September timber is the pinnacle of backcountry hunting. Demanding terrain, high elevation, and intelligent elk make this pursuit a true test of woodsmanship.\",\n    habitat:\n      \"Subalpine forests, mountain meadows, aspen groves, dense timber. Summer in alpine; winter in river valleys.\",\n    range: \"Rocky Mountain states, Pacific Northwest, some reintroduced populations in eastern US\",\n    locations: [\n      \"Colorado\",\"Wyoming\",\"Montana\",\"Idaho\",\"Oregon\",\"Washington\",\"New Mexico\",\n      \"Arizona\",\"Utah\",\"Nevada\",\"California\",\"South Dakota\",\n    ],\n    season: \"Sep 1 \u2013 Nov 15 (archery Sep; rifle varies by unit; draw tags required in most states)\",\n    bestTimes:\n      \"Rut peak Sep 10\u201330. Pre-dawn bugling sequences; cows-in-estrus windows mid-September. Evening timber movements. Cold nights concentrate elk in valley pockets at dawn.\",\n    behavior:\n      \"Bull elk bugle to establish dominance and attract cows. Herd bulls constantly herd cows. Satellite bulls lurk on edges \u2014 calling a satellite into range is often easier than pulling a herd bull.\",\n    bestBait: [\"Cow calls\", \"Bugles\", \"Estrus cow scents\", \"Water holes (archery)\"],\n    techniques: [\n      \"Aggressive calling \u2014 bugle to locate, cow call to close\",\n      \"Spot-and-stalk alpine bowls\",\n      \"Water hole setups with trail cameras\",\n      \"Still hunting dark timber wallows\",\n      \"Horseback access to backcountry\",\n    ],\n    feedingSchedule: \"Early morning meadow grazing; bedding in timber 9am\u20134pm; evening meadow return\",\n    sizeRange: \"500\u2013900 lbs (bulls); 400\u2013600 lbs (cows)\",\n    recordWeight: \"1,100 lbs (Roosevelt Elk subspecies)\",\n    tags: [\"hunting\", \"big-game\", \"backcountry\", \"archery\", \"bugling\", \"rut\"],\n  },\n  {\n    id: \"moose\",\n    name: \"Moose\",\n    scientificName: \"Alces alces\",\n    category: \"big-game\",\n    imageKey: \"elk\",\n    photoUrl: \"https://static.inaturalist.org/photos/335160686/medium.jpg\",\n    difficulty: \"intermediate\",\n    description:\n      \"The largest member of the deer family. Standing up to 7 feet at the shoulder, a bull moose in velvet is an awe-inspiring sight. Calling in a rutting bull is one of hunting's great thrills.\",\n    habitat: \"Boreal forest, northern lakes and wetlands, willow flats, river corridors\",\n    range: \"Canada, Alaska, northern New England, Rocky Mountain states\",\n    locations: [\"Alaska\", \"Maine\", \"Minnesota\", \"Wyoming\", \"Colorado\", \"Idaho\", \"Montana\", \"New Hampshire\", \"Vermont\"],\n    season: \"Sep 15 \u2013 Oct 31 (varies; draw tags required)\",\n    bestTimes: \"Rut peak mid-October. Dawn and dusk moose calling. Bulls actively seeking cows.\",\n    behavior:\n      \"Bulls slash willows and wallow in mud during rut. Respond aggressively to cow calls and antler raking. Semi-aquatic; wade lakes and rivers to feed on aquatic vegetation.\",\n    bestBait: [\"Cow moose calls\", \"Bull grunts\", \"Antler raking\", \"Willow browse areas\"],\n    techniques: [\n      \"Calling from canoe or boat\",\n      \"Ground blind near water/willows\",\n      \"Spot-and-stalk boreal muskegs\",\n    ],\n    feedingSchedule: \"Aquatic vegetation mid-summer; willow browse fall and winter; early morning and evening\",\n    sizeRange: \"800\u20131,600 lbs (bulls); 600\u2013900 lbs (cows)\",\n    recordWeight: \"1,808 lbs (Alaska)\",\n    tags: [\"hunting\", \"big-game\", \"canada\", \"alaska\", \"wilderness\"],\n  },\n  {\n    id: \"american-black-bear\",\n    name: \"American Black Bear\",\n    scientificName: \"Ursus americanus\",\n    category: \"big-game\",\n    imageKey: \"deer\",\n    photoUrl: \"https://static.inaturalist.org/photos/307636014/medium.jpg\",\n    difficulty: \"intermediate\",\n    description:\n      \"North America's most widespread bear species. Color varies from jet black to cinnamon to blonde. Spring hunting over bait and fall spot-and-stalk in berry patches are the primary methods.\",\n    habitat: \"Forested mountains, berry patches, river drainages, swamps. Highly adaptable.\",\n    range: \"Canada, Alaska, Appalachians, Rocky Mountains, Pacific Coast, Southeast swamps\",\n    locations: [\"Maine\",\"Michigan\",\"Minnesota\",\"Wisconsin\",\"Pennsylvania\",\"North Carolina\",\"Virginia\",\"Colorado\",\"Montana\",\"Idaho\",\"Oregon\",\"Washington\",\"California\",\"Florida\",\"Louisiana\"],\n    season: \"Spring (Apr\u2013Jun) and Fall (Aug\u2013Nov) varies by state\",\n    bestTimes: \"Evening over bait; morning berry patch glassing. June pre-denning feeding frenzy.\",\n    behavior:\n      \"Omnivorous opportunists \u2014 follow berry crops and mast. Excellent climbers. Sows with cubs are predictable near food sources. Boars are solitary and wide-ranging.\",\n    bestBait: [\"Sweets/pastries over bait\", \"Anise oil\", \"Fryer grease\", \"Berry patches (fall)\"],\n    techniques: [\"Elevated bait station stand\", \"Spot-and-stalk berry fields\", \"Hound hunting\"],\n    feedingSchedule: \"Feeding intensively (hyperphagia) in fall to pack on fat for hibernation\",\n    sizeRange: \"125\u2013800 lbs (varies by region; males larger)\",\n    recordWeight: \"880 lbs (North Carolina)\",\n    tags: [\"hunting\", \"big-game\", \"bear\", \"bait\", \"spring-fall\"],\n  },\n  {\n    id: \"feral-hog\",\n    name: \"Feral Hog / Wild Boar\",\n    scientificName: \"Sus scrofa\",\n    category: \"big-game\",\n    imageKey: \"deer\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/414500081/medium.jpg\",\n    difficulty: \"beginner\",\n    description:\n      \"America's most invasive big game animal \u2014 and one of the most exciting. No license required in most states. They can be hunted year-round, day and night. A sounder of hogs can destroy a field overnight.\",\n    habitat: \"Agricultural land, river bottoms, oak bottoms, swamps, brushy cover near water\",\n    range: \"30+ US states; heaviest populations in Texas, Florida, Georgia, California, Oklahoma\",\n    locations: [\"Texas\",\"Florida\",\"Georgia\",\"California\",\"Oklahoma\",\"Arkansas\",\"Louisiana\",\"Mississippi\",\"Alabama\",\"South Carolina\",\"Tennessee\",\"Missouri\",\"Kansas\"],\n    season: \"Year-round in most states; no bag limit\",\n    bestTimes: \"Night hunting with thermal/night vision extremely effective. Early morning water sources.\",\n    behavior:\n      \"Travel in sounders (family groups). Excellent sense of smell \u2014 work into the wind. Boars are solitary and territorial. Root and wallow in wet areas.\",\n    bestBait: [\"Corn feeders (automatic)\", \"Soured grain\", \"Diesel fuel + corn mix (legal?)\", \"Water sources\"],\n    techniques: [\"Feeder stand\", \"Night hunting with thermal optics\", \"Dog hunting\", \"Spot-and-stalk\"],\n    feedingSchedule: \"Primarily nocturnal; early morning and late evening over agricultural fields\",\n    sizeRange: \"75\u2013400 lbs; monster boars can exceed 500 lbs\",\n    recordWeight: \"1,051 lbs (Georgia, 2007)\",\n    tags: [\"hunting\", \"big-game\", \"year-round\", \"no-license\", \"night-hunting\"],\n  },\n  {\n    id: \"pronghorn\",\n    name: \"Pronghorn Antelope\",\n    scientificName: \"Antilocapra americana\",\n    category: \"big-game\",\n    imageKey: \"deer\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/250039273/medium.jpg\",\n    difficulty: \"intermediate\",\n    description:\n      \"The fastest land animal in the Western Hemisphere at 55 mph. Pronghorn have 8x magnification vision and live in wide-open country \u2014 spot-and-stalk archery on 'speed goats' is genuinely difficult.\",\n    habitat: \"Open prairies, sagebrush flats, grasslands. Requires open terrain to see predators.\",\n    range: \"Great Plains, Wyoming Basin, high desert Southwest\",\n    locations: [\"Wyoming\",\"Montana\",\"Colorado\",\"New Mexico\",\"Arizona\",\"Nevada\",\"Idaho\",\"Utah\",\"South Dakota\",\"North Dakota\",\"California\",\"Kansas\",\"Nebraska\"],\n    season: \"Archery Aug\u2013Sep; rifle Oct; draw tags in most states\",\n    bestTimes: \"Rut mid-October. Bucks tend does on open terrain all day.\",\n    behavior:\n      \"Highly curious \u2014 flag-waving to bring them in can work. Rutting bucks herd does and fight rivals. Travel vast distances daily.\",\n    bestBait: [\"Antelope decoys\", \"Flag waving\", \"Doe calls\"],\n    techniques: [\"Crawl-and-stalk with terrain\", \"Water hole ambush\", \"Decoying\"],\n    feedingSchedule: \"Grazes continuously during daylight; bedding in open terrain for security\",\n    sizeRange: \"90\u2013130 lbs (bucks); 75\u2013105 lbs (does)\",\n    recordWeight: \"140 lbs\",\n    tags: [\"hunting\", \"big-game\", \"western\", \"spot-and-stalk\", \"archery\", \"speed-goat\"],\n  },\n  {\n    id: \"coyote\",\n    name: \"Coyote\",\n    scientificName: \"Canis latrans\",\n    category: \"big-game\",\n    imageKey: \"deer\",\n    photoUrl: \"https://static.inaturalist.org/photos/10963085/medium.jpg\",\n    difficulty: \"intermediate\",\n    description:\n      \"The ultimate predator caller challenge. Coyotes are everywhere \u2014 every state except Hawaii. Calling them into close range with distress calls or howls is an addictive winter sport.\",\n    habitat: \"Extremely adaptable \u2014 deserts, prairies, forests, farmland, suburbs\",\n    range: \"All 49 continental US states, Canada, Central America\",\n    locations: [\"All US States (most abundant: Texas, Kansas, Colorado, Wyoming, Montana, Nebraska)\"],\n    season: \"Year-round in most states; no bag limit in most\",\n    bestTimes: \"January\u2013February breeding season; overcast cold days; full moon nights\",\n    behavior: \"Territorial and vocal. Responds to prey distress, challenge howls, female invitation howls.\",\n    bestBait: [\"Electronic caller \u2014 jackrabbit distress\", \"Cottontail distress\", \"Howls + coyote pup distress\"],\n    techniques: [\"Electronic call setup downwind\", \"Stand hunting with decoy\", \"Running dogs\"],\n    feedingSchedule: \"Opportunistic \u2014 hunts day and night; most active at dawn and dusk\",\n    sizeRange: \"20\u201350 lbs\",\n    recordWeight: \"74.75 lbs (Utah)\",\n    tags: [\"hunting\", \"predator\", \"calling\", \"year-round\", \"no-limit\"],\n  },\n  {\n    id: \"wild-boar-europe\",\n    name: \"Bighorn Sheep\",\n    scientificName: \"Ovis canadensis\",\n    category: \"big-game\",\n    imageKey: \"deer\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/61523007/medium.jpg\",\n    difficulty: \"expert\",\n    description:\n      \"The most coveted draw tag in North America. A mature ram with a full curl is a once-in-a-lifetime trophy. Tags are extremely limited and often take 10\u201320 years to draw.\",\n    habitat: \"Alpine rocky terrain above treeline; steep cliffs for escape cover\",\n    range: \"Rocky Mountains, desert Southwest, Pacific Coast ranges\",\n    locations: [\"Wyoming\",\"Montana\",\"Colorado\",\"Idaho\",\"Nevada\",\"New Mexico\",\"Arizona\",\"California\",\"Utah\",\"North Dakota\",\"South Dakota\",\"Washington\"],\n    season: \"Varies by state/unit; all require draw or limited entry tags\",\n    bestTimes: \"Rut November\u2013December when rams are actively seeking ewes and visible on open terrain\",\n    behavior: \"Rams live in bachelor groups most of year; join ewe herds during rut. Clashes between rams are dramatic.\",\n    bestBait: [\"Spot sheep from long distance \u2014 no bait applicable\"],\n    techniques: [\"Spot-and-stalk with spotting scope\", \"High-country glassing\"],\n    feedingSchedule: \"Grazes on sparse alpine vegetation; highly visible feeding on open slopes\",\n    sizeRange: \"125\u2013300 lbs (rams); 75\u2013150 lbs (ewes)\",\n    recordWeight: \"344 lbs\",\n    tags: [\"hunting\", \"big-game\", \"once-in-a-lifetime\", \"draw-tag\", \"backcountry\"],\n  },\n\n  // \u2500\u2500\u2500 WATERFOWL \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  {\n    id: \"mallard\",\n    name: \"Mallard Duck\",\n    scientificName: \"Anas platyrhynchos\",\n    category: \"waterfowl\",\n    imageKey: \"duck\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/95268822/medium.jpg\",\n    difficulty: \"beginner\",\n    description:\n      \"The iconic green-head. Mallards are the most recognized and widely hunted duck in North America. Decoying a flock of greenheads cupping wings into a hole is pure waterfowl hunting.\",\n    habitat: \"Potholes, rivers, flooded agriculture, marshes, reservoirs \u2014 extremely adaptable\",\n    range: \"Entire North America; breeds across Canada and northern US\",\n    locations: [\"Arkansas\",\"Missouri\",\"Louisiana\",\"Mississippi\",\"Illinois\",\"Iowa\",\"Minnesota\",\"Wisconsin\",\"Kansas\",\"Nebraska\",\"Texas\",\"California\",\"Oregon\",\"Washington\"],\n    season: \"Late Oct \u2013 Jan (varies by flyway); early teal season Sep\",\n    bestTimes:\n      \"Calm, overcast mornings with light southerly winds. First frost pushes northern mallards south. Flooded corn fields after harvest are magnets.\",\n    behavior:\n      \"Feed primarily on agricultural grain and aquatic vegetation. Roost on large open water; fly to feed. Respond well to decoys and calling.\",\n    bestBait: [\"Flooded corn fields\", \"Rice fields (south)\", \"Decoys + calls\"],\n    techniques: [\n      \"Layout blind in flooded field\",\n      \"Pit blind on food source\",\n      \"Timber hole hunting in flooded timber\",\n      \"Aggressive calling \u2014 quacks, feeding chuckles, hail calls\",\n    ],\n    feedingSchedule: \"Early morning feed flight from roost; midday loafing on water; evening return to roost\",\n    sizeRange: \"2\u20133 lbs\",\n    recordWeight: \"4.1 lbs\",\n    tags: [\"waterfowl\", \"duck\", \"decoys\", \"calling\", \"flooded-timber\"],\n  },\n  {\n    id: \"canada-goose\",\n    name: \"Canada Goose\",\n    scientificName: \"Branta canadensis\",\n    category: \"waterfowl\",\n    imageKey: \"duck\",\n    photoUrl: \"https://static.inaturalist.org/photos/181719420/medium.jpg\",\n    difficulty: \"beginner\",\n    description:\n      \"The most pursued goose in North America. Giant Canada geese (a large subspecies) are now year-round residents in many areas. Fall migrating birds offer classic field hunting.\",\n    habitat: \"Grain fields, golf courses, parks, lakes, rivers \u2014 extremely adaptable\",\n    range: \"All of North America during migration; year-round in many areas\",\n    locations: [\"Illinois\",\"Iowa\",\"Minnesota\",\"Wisconsin\",\"Kansas\",\"Nebraska\",\"Missouri\",\"Ohio\",\"Indiana\",\"Michigan\",\"Pennsylvania\",\"New York\",\"Maryland\",\"Virginia\",\"North Carolina\",\"Texas\",\"California\"],\n    season: \"Sep\u2013Jan (varies by state and subspecies)\",\n    bestTimes:\n      \"Overcast cold mornings with north winds push migrating birds. Resident birds predictable on daily routes between roost and feed.\",\n    behavior: \"Highly gregarious \u2014 feeds and travels in large flocks. Suspicious of decoys if not realistic.\",\n    bestBait: [\"Feeder fields \u2014 corn, wheat, soybeans\", \"Large full-body decoy spread\", \"Flags/motion decoys\"],\n    techniques: [\n      \"Layout blind in harvested grain field\",\n      \"Flag to attract attention\",\n      \"Cluck and moan calls \u2014 less aggressive than most think\",\n    ],\n    feedingSchedule: \"Morning and evening feed flights from water roost; land to feed on grain fields\",\n    sizeRange: \"6\u201314 lbs\",\n    recordWeight: \"24 lbs\",\n    tags: [\"waterfowl\", \"goose\", \"field-hunting\", \"decoys\", \"migration\"],\n  },\n  {\n    id: \"snow-goose\",\n    name: \"Snow Goose\",\n    scientificName: \"Chen caerulescens\",\n    category: \"waterfowl\",\n    imageKey: \"duck\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/467051457/medium.jpg\",\n    difficulty: \"expert\",\n    description:\n      \"The toughest goose to decoy. Snow geese travel in massive flocks of thousands to millions during spring migration. Conservation order hunting allows electronic calls and unplugged guns.\",\n    habitat: \"Agricultural grain fields along flyways; arctic tundra breeding grounds\",\n    range: \"Central flyway; Pacific flyway during spring migration\",\n    locations: [\"Missouri\",\"Arkansas\",\"Kansas\",\"Nebraska\",\"Iowa\",\"Illinois\",\"North Dakota\",\"South Dakota\",\"Minnesota\",\"Texas\",\"Louisiana\",\"Mississippi\"],\n    season: \"Spring Conservation Order (Feb\u2013Apr); traditional season Sep\u2013Jan\",\n    bestTimes:\n      \"Spring migration March\u2013April. Decoy spreads of 400\u20131,000+ decoys. Electronic calls mimic flock sounds.\",\n    behavior: \"Extremely wary \u2014 learns hunting pressure quickly. Massive flocks provide safety in numbers.\",\n    bestBait: [\"Silhouette decoys by the hundreds\", \"Electronic goose calls (spring conservation order)\"],\n    techniques: [\n      \"Massive 400-1,000 silhouette spread\",\n      \"Electronic calls (spring season)\",\n      \"Layout blinds \u2014 blend with field perfectly\",\n    ],\n    feedingSchedule: \"Grain fields during migration; constant feeding to fuel long migrations\",\n    sizeRange: \"4\u20137 lbs\",\n    recordWeight: \"9.9 lbs\",\n    tags: [\"waterfowl\", \"goose\", \"conservation-order\", \"spring-hunting\", \"massive-spreads\"],\n  },\n  {\n    id: \"wood-duck\",\n    name: \"Wood Duck\",\n    scientificName: \"Aix sponsa\",\n    category: \"waterfowl\",\n    imageKey: \"duck\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/171626985/medium.jpg\",\n    difficulty: \"intermediate\",\n    description:\n      \"North America's most stunning waterfowl. The wood duck's iridescent plumage and swamp-timber habitat make it a special target. Jump shooting timber holes at first light is a pure experience.\",\n    habitat: \"Flooded timber, swamps, beaver ponds, woodland streams, bottomland hardwoods\",\n    range: \"Eastern US, Pacific Coast, southern Canada\",\n    locations: [\"Arkansas\",\"Louisiana\",\"Mississippi\",\"Alabama\",\"Georgia\",\"South Carolina\",\"Tennessee\",\"Missouri\",\"Illinois\",\"Wisconsin\",\"Minnesota\",\"Florida\",\"North Carolina\",\"Virginia\",\"Maryland\"],\n    season: \"Oct\u2013Jan (varies by state)\",\n    bestTimes: \"First 30 minutes of legal shooting light \u2014 woodies fly early and fast.\",\n    behavior: \"Fly through timber at top speed. Nest in tree cavities \u2014 nest boxes greatly increase populations.\",\n    bestBait: [\"Decoys near flooded timber\", \"Wood duck squealer calls\"],\n    techniques: [\n      \"Flooded timber hole hunting\",\n      \"Jump shooting beaver ponds\",\n      \"Decoy spread near nest boxes\",\n    ],\n    feedingSchedule: \"Early morning \u2014 one of the first ducks to fly at dawn\",\n    sizeRange: \"1\u20132 lbs\",\n    recordWeight: \"2.4 lbs\",\n    tags: [\"waterfowl\", \"duck\", \"flooded-timber\", \"swamp\", \"beautiful\"],\n  },\n\n  // \u2500\u2500\u2500 UPLAND GAME / SMALL GAME \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  {\n    id: \"wild-turkey\",\n    name: \"Wild Turkey\",\n    scientificName: \"Meleagris gallopavo\",\n    category: \"small-game\",\n    imageKey: \"turkey\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/31353610/medium.jpg\",\n    difficulty: \"intermediate\",\n    description:\n      \"America's ultimate spring challenge. Working a fired-up tom into shotgun range is a chess match that combines woodsmanship, calling, and patience. The thunder of a distant gobble in April timber sends an electric charge through every turkey hunter.\",\n    habitat: \"Mixed hardwood-open land edge; river bottoms; pine ridges; agricultural borders\",\n    range: \"49 states (not Alaska); reintroduced across all original range\",\n    locations: [\"Texas\",\"Pennsylvania\",\"Missouri\",\"Wisconsin\",\"Michigan\",\"Minnesota\",\"Georgia\",\"Alabama\",\"Mississippi\",\"Tennessee\",\"Kentucky\",\"Virginia\",\"North Carolina\",\"Ohio\",\"Iowa\",\"Kansas\",\"Oklahoma\",\"Alabama\",\"Florida\"],\n    season: \"Spring: April 1 \u2013 May 15 (varies by state); Fall season available in many states\",\n    bestTimes:\n      \"Fly-down time (first light) is prime \u2014 gobblers sound off and move toward hens. After 9am on hot mornings, sit tight and wait for birds to come to you.\",\n    behavior:\n      \"Toms gobble on the roost before flying down. They want hens to come to them \u2014 the hunter plays the role of a hen, calling the tom in. Dominant toms drive off subordinates.\",\n    bestBait: [\"Hen yelps\", \"Cuts and cackles (excited hen)\", \"Purrs (close range)\", \"Decoys (hen + jake)\"],\n    techniques: [\n      \"Set up 100 yards from roost before light\",\n      \"Owl hoot to shock-gobble and locate\",\n      \"Sit against wide tree trunk at call-in point\",\n      \"Box call / slate for distance; mouth call hands-free for close work\",\n      \"Fall fan decoy for aggressive response\",\n    ],\n    feedingSchedule: \"Morning feeding after fly-down; afternoon dust bathing and strutting; evening roost\",\n    sizeRange: \"8\u201324 lbs (toms); 5\u201312 lbs (hens)\",\n    recordWeight: \"38 lbs\",\n    tags: [\"hunting\", \"small-game\", \"spring\", \"calling\", \"gobbler\", \"archery\", \"shotgun\"],\n  },\n  {\n    id: \"ring-necked-pheasant\",\n    name: \"Ring-necked Pheasant\",\n    scientificName: \"Phasianus colchicus\",\n    category: \"small-game\",\n    imageKey: \"turkey\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/176733796/medium.jpg\",\n    difficulty: \"beginner\",\n    description:\n      \"The king of upland game birds. Introduced from Asia, the rooster pheasant's cackling flush and brilliant plumage make it a beloved bird for hunters and dogs alike.\",\n    habitat: \"Grain fields, CRP grass, wetland edges, brushy draws, cattail sloughs\",\n    range: \"Great Plains, Midwest grain belt\",\n    locations: [\"South Dakota\",\"Kansas\",\"Nebraska\",\"Iowa\",\"Minnesota\",\"North Dakota\",\"Montana\",\"Colorado\",\"Wisconsin\",\"Illinois\",\"Michigan\",\"Ohio\",\"Pennsylvania\"],\n    season: \"Oct\u2013Jan (varies by state)\",\n    bestTimes: \"Cold snowy days concentrate birds in cattails and heavy cover. Afternoon hunts after birds have moved. Dogs are essential.\",\n    behavior: \"Roost in heavy grass; feed in grain fields; run ahead of hunters before flushing \u2014 dogs prevent escape\",\n    bestBait: [\"Dog hunting \u2014 flushing or pointing breeds\", \"Walk-up hunting dense cover\"],\n    techniques: [\"Pointing dog \u2014 stop, flush, shoot\", \"Flushing dog drives\", \"Block and drive with multiple hunters\"],\n    feedingSchedule: \"Morning feeding in grain fields; midday in cattails; afternoon refeeding\",\n    sizeRange: \"2.5\u20133.5 lbs (roosters)\",\n    recordWeight: \"5.4 lbs\",\n    tags: [\"hunting\", \"small-game\", \"upland\", \"dog-hunting\", \"pheasant\"],\n  },\n  {\n    id: \"bobwhite-quail\",\n    name: \"Bobwhite Quail\",\n    scientificName: \"Colinus virginianus\",\n    category: \"small-game\",\n    imageKey: \"turkey\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/188718574/medium.jpg\",\n    difficulty: \"intermediate\",\n    description:\n      \"The quintessential southern upland bird. Bobwhite quail point-hunting with a dog is a gentlemen's sport steeped in southern tradition. Populations have declined dramatically \u2014 quality wild bird hunting is rare.\",\n    habitat: \"Native grasslands, pine savannas, brushy agricultural edges, CRP fields\",\n    range: \"Eastern US, Southeast, Texas \u2014 populations declining\",\n    locations: [\"Texas\",\"Georgia\",\"Florida\",\"Alabama\",\"Mississippi\",\"South Carolina\",\"North Carolina\",\"Virginia\",\"Kansas\",\"Oklahoma\",\"Tennessee\",\"Arkansas\",\"Louisiana\"],\n    season: \"Nov 15 \u2013 Feb 15 (varies by state)\",\n    bestTimes: \"10am\u20133pm when birds have dispersed from roost and feeding in singles/pairs\",\n    behavior: \"Coveys of 10\u201330 birds roost in grass circles facing out. Covey flushes explosively. Singles hold tighter for dogs.\",\n    bestBait: [\"Pointing dogs essential\", \"Whistling covey calls in fall\"],\n    techniques: [\"Walk-up with pointing dog\", \"Horse hunting with wagon\", \"Wild bird preserve hunting\"],\n    feedingSchedule: \"Morning dew feeding on insects; afternoon grain and weed seed feeding\",\n    sizeRange: \"4\u20136 oz\",\n    recordWeight: \"8 oz\",\n    tags: [\"hunting\", \"small-game\", \"quail\", \"dog-hunting\", \"southern-tradition\"],\n  },\n  {\n    id: \"mourning-dove\",\n    name: \"Mourning Dove\",\n    scientificName: \"Zenaida macroura\",\n    category: \"small-game\",\n    imageKey: \"turkey\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/14015355/medium.jpg\",\n    difficulty: \"beginner\",\n    description:\n      \"The most popular migratory game bird in North America. Dove season opening day (September 1) is a social tradition in many states. Fast fliers make for challenging shooting.\",\n    habitat: \"Agricultural fields, open country, power lines, grain stubble\",\n    range: \"All 48 contiguous states during migration\",\n    locations: [\"Texas\",\"Georgia\",\"Alabama\",\"Mississippi\",\"Arkansas\",\"Kansas\",\"Oklahoma\",\"Missouri\",\"Tennessee\",\"North Carolina\",\"South Carolina\",\"Florida\",\"Louisiana\",\"Colorado\",\"California\"],\n    season: \"Sep 1 \u2013 Nov 30 (varies by zone)\",\n    bestTimes: \"Evening flight to water and grain after 4pm. Opening day of season before pressure.\",\n    behavior: \"Fly fast and erratically \u2014 lead by 2\u20133 feet. Land on power lines before coming to feed. Water sources attract birds in afternoon heat.\",\n    bestBait: [\"Sunflower fields\", \"Harvested grain fields\", \"Water holes in hot weather\"],\n    techniques: [\"Stationary blind near water/feed\", \"Shooting flight lanes between trees\", \"Decoys on fence posts\"],\n    feedingSchedule: \"Morning grain feeding; evening water/roost flight\",\n    sizeRange: \"4\u20136 oz\",\n    recordWeight: \"7 oz\",\n    tags: [\"hunting\", \"small-game\", \"dove\", \"september\", \"social-hunt\"],\n  },\n\n  // \u2500\u2500\u2500 FRESHWATER FISH \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  {\n    id: \"largemouth-bass\",\n    name: \"Largemouth Bass\",\n    scientificName: \"Micropterus salmoides\",\n    category: \"freshwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://static.inaturalist.org/photos/126577823/medium.jpg\",\n    difficulty: \"beginner\",\n    description:\n      \"America's gamefish. The explosive surface strike of a largemouth on a topwater lure is one of fishing's greatest moments. Found in 48 states, largemouth are accessible to every angler.\",\n    habitat: \"Vegetation edges, lay-downs, docks, bridge pilings, ledges, hydrilla beds\",\n    range: \"Native to eastern US; introduced across 48 states\",\n    locations: [\"Florida\",\"Texas\",\"California\",\"Georgia\",\"Alabama\",\"Mississippi\",\"Tennessee\",\"Ohio\",\"Michigan\",\"North Carolina\",\"Virginia\",\"South Carolina\",\"Louisiana\",\"Arkansas\"],\n    season: \"Year-round; spawn March\u2013May (water temp 58\u201365\u00B0F)\",\n    bestTimes:\n      \"Early morning topwater (May\u2013Sep); pre-spawn (March); evening summer frog fishing. Cold fronts slow activity 12\u201324 hours; post-front fishing often exceptional on second day.\",\n    behavior:\n      \"Ambush predator hiding in cover. Spawn in 2\u20136 feet of water near hard bottom. Bedding males guard eggs and will strike anything. Summer: go deep (15\u201325 ft) during midday heat.\",\n    bestBait: [\"Plastic worm (Texas rig)\", \"Jig + trailer\", \"Crankbait\", \"Swimbait\", \"Frog (heavy cover)\", \"Topwater popper\"],\n    techniques: [\n      \"Texas rig plastic worm in heavy cover\",\n      \"Flipping/pitching jig to laydowns\",\n      \"Crankbait on ledges and points\",\n      \"Frog on matted hydrilla\",\n      \"Dropshot on deep finesse\",\n    ],\n    feedingSchedule: \"Low-light morning/evening; cloudy days active throughout; spawn: male on bed 24/7\",\n    sizeRange: \"1\u20135 lbs average; 10+ lbs is trophy\",\n    recordWeight: \"22 lbs 4 oz (Georgia, 1932)\",\n    tags: [\"fishing\", \"freshwater\", \"bass\", \"tournament\", \"topwater\", \"bedding\"],\n  },\n  {\n    id: \"smallmouth-bass\",\n    name: \"Smallmouth Bass\",\n    scientificName: \"Micropterus dolomieu\",\n    category: \"freshwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/156646600/medium.jpg\",\n    difficulty: \"intermediate\",\n    description:\n      \"Pound-for-pound the hardest fighting freshwater fish. A 4-lb smallmouth will outfight a 6-lb largemouth every time. Crystal-clear rivers and rocky lakes are their domain.\",\n    habitat: \"Clear rivers with gravel/rock bottoms, rocky highland reservoirs, Great Lakes shallows\",\n    range: \"Eastern US, Great Lakes basin, introduced widely\",\n    locations: [\"Tennessee\",\"Kentucky\",\"Ohio\",\"Michigan\",\"New York\",\"Pennsylvania\",\"West Virginia\",\"Virginia\",\"Wisconsin\",\"Minnesota\",\"Maine\",\"Vermont\",\"New Hampshire\",\"Missouri\",\"Arkansas\"],\n    season: \"Year-round; spawn May\u2013June (water temp 60\u201368\u00B0F)\",\n    bestTimes: \"Current edges in rivers during low light. Rocky points in lakes spring and fall. Pre-spawn April on south-facing banks.\",\n    behavior: \"Feeds on crayfish, sculpin, hellgrammites. Jumps spectacularly when hooked. Prefers current and rock structure.\",\n    bestBait: [\"Crayfish (live or soft plastic)\", \"Tube jig\", \"Drop shot\", \"Hair jig\", \"Streamers (fly fishing)\"],\n    techniques: [\n      \"Tube jig around boulders\",\n      \"Ned rig on rocky bottom\",\n      \"Fly fishing streamers in rivers\",\n      \"Drop shot near rock piles\",\n    ],\n    feedingSchedule: \"Most active in currents; feeding on crayfish during summer; shad in fall\",\n    sizeRange: \"0.5\u20134 lbs average; 6+ lbs is exceptional\",\n    recordWeight: \"11 lbs 15 oz (Tennessee, 1955)\",\n    tags: [\"fishing\", \"freshwater\", \"bass\", \"river\", \"fighting-fish\"],\n  },\n  {\n    id: \"walleye\",\n    name: \"Walleye\",\n    scientificName: \"Sander vitreus\",\n    category: \"freshwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/234424567/medium.jpg\",\n    difficulty: \"intermediate\",\n    description:\n      \"The finest table fare in freshwater. Their tapetum lucidum (reflective eyes) let them see in darkness \u2014 walleye feed at night while prey cannot see them. Find the structure, find the walleye.\",\n    habitat: \"Clear to moderately turbid lakes, rivers, large reservoirs. Rocky points, humps, weed edges\",\n    range: \"Northern US, Canada \u2014 Great Lakes states and prairie lakes\",\n    locations: [\"Minnesota\",\"North Dakota\",\"South Dakota\",\"Nebraska\",\"Iowa\",\"Wisconsin\",\"Michigan\",\"Ohio\",\"Pennsylvania\",\"New York\",\"Montana\",\"Wyoming\",\"North Dakota\",\"Manitoba (Canada)\"],\n    season: \"Year-round; ice fishing December\u2013March in north\",\n    bestTimes:\n      \"Low light \u2014 first and last hour of day, overcast days, night under bridge lights. Post-cold-front: fish suspend in midwater over structure. Spring walleye on rocky shoals during spawn (April/May).\",\n    behavior:\n      \"Schooling fish \u2014 find one, find many. Move to rocky shoals at night to feed. Suspend over deep structure during bright conditions.\",\n    bestBait: [\"Jig + nightcrawler or minnow\", \"Jigging spoon\", \"Live bait rig (lindy rig)\", \"Trolling crankbaits\"],\n    techniques: [\n      \"Vertical jigging at boat on structure\",\n      \"Lindy rig with live nightcrawler\",\n      \"Trolling worm harness at 1.5 mph\",\n      \"Casting jigs on rocky points\",\n      \"Ice fishing with tungsten jig + waxworm\",\n    ],\n    feedingSchedule: \"Primarily crepuscular/nocturnal \u2014 peak feeding at dawn, dusk, and night\",\n    sizeRange: \"1\u20134 lbs average; 10+ lbs trophy\",\n    recordWeight: \"25 lbs (Tennessee, 1960)\",\n    tags: [\"fishing\", \"freshwater\", \"walleye\", \"night-fishing\", \"ice-fishing\", \"table-fare\"],\n  },\n  {\n    id: \"northern-pike\",\n    name: \"Northern Pike\",\n    scientificName: \"Esox lucius\",\n    category: \"freshwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://static.inaturalist.org/photos/147901078/medium.jpg\",\n    difficulty: \"intermediate\",\n    description:\n      \"The apex predator of northern lakes. Pike are aggressive, toothy, and can smash lures twice their size. A 20-lb 'gator' is a legitimate trophy. Ice fishing for pike is a winter staple across the North.\",\n    habitat: \"Shallow bays with vegetation, river backwaters, reed beds, reservoir coves\",\n    range: \"Northern US, Canada \u2014 Great Lakes, Minnesota lakes, prairie reservoirs\",\n    locations: [\"Minnesota\",\"Wisconsin\",\"Michigan\",\"North Dakota\",\"South Dakota\",\"Nebraska\",\"Iowa\",\"New York\",\"Vermont\",\"Maine\",\"Montana\",\"Wyoming\"],\n    season: \"Year-round; ice fishing December\u2013March\",\n    bestTimes: \"Spring post-spawn (late April\u2013May) when pike are aggressive in shallows. Overcast fall days.\",\n    behavior: \"Lie motionless in weeds, ambush prey. Extremely aggressive during feeding periods.\",\n    bestBait: [\"Large spinnerbaits\", \"Suckers (live)\", \"Large swimbaits\", \"Spoons\", \"Jerkbaits\"],\n    techniques: [\"Cast-and-retrieve spinnerbait\", \"Dead sucker on tip-up (ice)\", \"Trolling large spoons\", \"Fly fishing with pike streamers\"],\n    feedingSchedule: \"Ambush feeding \u2014 can go days between large meals; active post-spawn and in fall\",\n    sizeRange: \"3\u201320 lbs; 40+ lbs possible in Canada\",\n    recordWeight: \"55 lbs 1 oz (Germany); 46 lbs 2 oz (NY, USA record)\",\n    tags: [\"fishing\", \"freshwater\", \"pike\", \"ice-fishing\", \"predator\", \"big-lure\"],\n  },\n  {\n    id: \"muskellunge\",\n    name: \"Muskellunge\",\n    scientificName: \"Esox masquinongy\",\n    category: \"freshwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/55205913/medium.jpg\",\n    difficulty: \"expert\",\n    description:\n      \"The fish of 10,000 casts. Muskie hunting is an obsession \u2014 a legitimate 50-inch fish is a once-in-a-lifetime catch. They are the largest member of the pike family and legendarily difficult to hook.\",\n    habitat: \"Clear deep lakes with healthy weed growth; major river systems in the upper Midwest\",\n    range: \"Upper Midwest, Great Lakes, St. Lawrence River drainage\",\n    locations: [\"Wisconsin\",\"Minnesota\",\"Michigan\",\"Ohio\",\"Pennsylvania\",\"New York\",\"West Virginia\",\"Virginia\",\"Tennessee\",\"Kentucky\"],\n    season: \"Varies by state; most open May\u2013Dec; catch-and-release strongly encouraged\",\n    bestTimes: \"Figure-eight retrieve at boat often triggers follows into strikes. Fall (Sep\u2013Oct) in 55\u201365\u00B0F water.\",\n    behavior: \"Apex predator. Will follow lure to boat without striking (a 'follow'). The figure-8 maneuver at boat is essential.\",\n    bestBait: [\"Large bucktail spinners\", \"Jerkbaits (Grandma, Suick)\", \"Large swimbaits\", \"Topwater walk-the-dog\"],\n    techniques: [\n      \"Figure-8 at boat on every cast\",\n      \"Cast-and-retrieve large bucktail\",\n      \"Trolling large crankbaits\",\n      \"Live sucker suspended under bobber\",\n    ],\n    feedingSchedule: \"Ambush feeder \u2014 eats large meals infrequently; feeding windows narrow\",\n    sizeRange: \"10\u201330 lbs average; 50+ lbs possible\",\n    recordWeight: \"67 lbs 8 oz (Wisconsin, 1949)\",\n    tags: [\"fishing\", \"freshwater\", \"muskie\", \"trophy\", \"10000-casts\", \"obsession\"],\n  },\n  {\n    id: \"rainbow-trout\",\n    name: \"Rainbow Trout\",\n    scientificName: \"Oncorhynchus mykiss\",\n    category: \"freshwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://static.inaturalist.org/photos/60921460/medium.jpg\",\n    difficulty: \"beginner\",\n    description:\n      \"The most widely stocked and popular trout in the world. Steelhead (sea-run rainbows) are among the most prized fish in North America. Their aerial acrobatics when hooked are legendary.\",\n    habitat: \"Cold, clear, well-oxygenated streams and lakes. Prefer riffles, pools, tail-outs.\",\n    range: \"Native to Pacific Coast; stocked across 48 states and worldwide\",\n    locations: [\"Colorado\",\"Montana\",\"Idaho\",\"Washington\",\"Oregon\",\"California\",\"Wyoming\",\"Pennsylvania\",\"New York\",\"Michigan\",\"Wisconsin\",\"Minnesota\",\"North Carolina\",\"Tennessee\"],\n    season: \"Year-round (stocked waters); wild fish: varies by regulation\",\n    bestTimes: \"Morning and evening hatch activity (May\u2013Sep). Cold winter mornings on tailwaters. Steelhead: Nov\u2013Mar (Great Lakes), Oct\u2013Apr (Pacific Coast).\",\n    behavior: \"Rises to surface for hatching insects. Holds in current behind structure. Steelhead run rivers to spawn \u2014 aggressive to egg patterns and streamers.\",\n    bestBait: [\"Dry flies during hatch\", \"Nymphs\", \"Egg patterns\", \"PowerBait (stocked fish)\", \"Small spinners\"],\n    techniques: [\n      \"Fly fishing \u2014 nymphing, dry fly, streamer\",\n      \"Light spinning tackle with micro jigs\",\n      \"Float fishing egg patterns (steelhead)\",\n      \"PowerBait dough bait (stocked ponds)\",\n    ],\n    feedingSchedule: \"Morning and evening hatches; feeding all day in overcast conditions\",\n    sizeRange: \"8\u201320 inches average; steelhead 4\u201315 lbs\",\n    recordWeight: \"48 lbs (Canada, 2009)\",\n    tags: [\"fishing\", \"freshwater\", \"trout\", \"fly-fishing\", \"steelhead\", \"hatch\"],\n  },\n  {\n    id: \"brown-trout\",\n    name: \"Brown Trout\",\n    scientificName: \"Salmo trutta\",\n    category: \"freshwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/34847723/medium.jpg\",\n    difficulty: \"expert\",\n    description:\n      \"The most challenging and wary of trout. European in origin, brown trout have been introduced across North America and reach enormous sizes in tailwater rivers. A 30-inch brown on a dry fly is trophy fishing.\",\n    habitat: \"Cold, clear streams with deep pools and undercut banks; tailwater rivers below dams\",\n    range: \"Widely introduced across North America; strongest populations in northern states and Appalachians\",\n    locations: [\"Montana\",\"Wyoming\",\"Colorado\",\"Pennsylvania\",\"New York\",\"Virginia\",\"North Carolina\",\"Tennessee\",\"Wisconsin\",\"Michigan\",\"Minnesota\",\"Arkansas\",\"Missouri\"],\n    season: \"Year-round on most waters; fall spawning run (Oct\u2013Dec) limits harvest in many areas\",\n    bestTimes: \"Late evening \u2014 brown trout are most active at last light and after dark. Spawning run October\u2013December.\",\n    behavior: \"Most nocturnal and wary of all trout. Large specimens feed primarily on other fish. Rarely rises to surface except at night or during major hatches.\",\n    bestBait: [\"Large streamers (night)\", \"Sculpin imitations\", \"Live minnows\", \"Big dry flies on calm evenings\"],\n    techniques: [\"Large streamer fishing at night\", \"Finesse dry fly presentations\", \"Nymphing deep pools\"],\n    feedingSchedule: \"Primarily nocturnal and crepuscular; feeds on other fish as it grows larger\",\n    sizeRange: \"10\u201324 inches average; 20+ lbs in tailwaters\",\n    recordWeight: \"40 lbs 4 oz (New Zealand)\",\n    tags: [\"fishing\", \"freshwater\", \"trout\", \"fly-fishing\", \"technical\", \"night-fishing\"],\n  },\n  {\n    id: \"brook-trout\",\n    name: \"Brook Trout\",\n    scientificName: \"Salvelinus fontinalis\",\n    category: \"freshwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/244460087/medium.jpg\",\n    difficulty: \"beginner\",\n    description:\n      \"The native trout of eastern North America. Brook trout are a symbol of wild, cold, clean water. Backcountry brook trout fishing in remote mountain streams is a pure and spiritual pursuit.\",\n    habitat: \"Cold, pristine headwater streams; mountain beaver ponds; remote backcountry lakes\",\n    range: \"Appalachians, upper Midwest, northern Canada, Rocky Mountain backcountry\",\n    locations: [\"Maine\",\"Vermont\",\"New Hampshire\",\"New York\",\"Pennsylvania\",\"Virginia\",\"North Carolina\",\"West Virginia\",\"Wisconsin\",\"Minnesota\",\"Michigan\",\"Colorado\",\"Wyoming\",\"Idaho\"],\n    season: \"Year-round; spawns October\u2013November\",\n    bestTimes: \"Morning dry fly action; summer mountain streams; fall spawning colors are spectacular\",\n    behavior: \"Aggressive and eager \u2014 will strike almost anything. Smallest targets can be caught on tiny dry flies. Responds to noise and disturbance poorly.\",\n    bestBait: [\"Worms\", \"Small spinners\", \"Dry flies\", \"Small nymphs\", \"Live grasshoppers\"],\n    techniques: [\"Tiny dry fly upstream presentation\", \"Small spinner cast-and-retrieve\", \"Worm drifting\"],\n    feedingSchedule: \"Active during morning insect activity; feeds throughout day in cold mountain streams\",\n    sizeRange: \"4\u201312 inches (most waters); 5+ lbs possible in large lakes\",\n    recordWeight: \"14 lbs 8 oz (Ontario, 1915)\",\n    tags: [\"fishing\", \"freshwater\", \"trout\", \"backcountry\", \"native\", \"pure-water\"],\n  },\n  {\n    id: \"channel-catfish\",\n    name: \"Channel Catfish\",\n    scientificName: \"Ictalurus punctatus\",\n    category: \"freshwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/455557089/medium.jpeg\",\n    difficulty: \"beginner\",\n    description:\n      \"The most popular catfish species. Channel cats are found in almost every warm water body in the US. Night fishing with stink baits under a bridge is an American summer tradition.\",\n    habitat: \"Rivers, reservoirs, ponds, lakes \u2014 prefers current seams, deep holes, undercut banks\",\n    range: \"Throughout central and eastern US; widely introduced\",\n    locations: [\"Texas\",\"Kansas\",\"Nebraska\",\"Iowa\",\"Missouri\",\"Illinois\",\"Mississippi\",\"Alabama\",\"Tennessee\",\"Kentucky\",\"Ohio\",\"Indiana\",\"Louisiana\",\"Arkansas\",\"Oklahoma\"],\n    season: \"Year-round; peak activity summer when water is 75\u201385\u00B0F\",\n    bestTimes: \"Night fishing from dusk to midnight. Summer after warm rains. Current seams in rivers.\",\n    behavior: \"Bottom feeder using chemoreceptors in barbels to locate food. Schooling in rivers. Spawns May\u2013July in hollow logs and undercuts.\",\n    bestBait: [\"Chicken liver\", \"Cut shad\", \"Prepared stink baits\", \"Night crawlers\", \"Punch baits\", \"Dipbaits\"],\n    techniques: [\"Bottom rig with weight on river bottom\", \"Jug fishing\", \"Float rig under bridge lights at night\", \"Drift fishing cut bait\"],\n    feedingSchedule: \"Nocturnal \u2014 most active from dark to midnight; active all day in turbid water\",\n    sizeRange: \"1\u201310 lbs common; trophy 20\u201330 lbs\",\n    recordWeight: \"58 lbs (S. Carolina, 1964)\",\n    tags: [\"fishing\", \"freshwater\", \"catfish\", \"night-fishing\", \"beginner\", \"summer\"],\n  },\n  {\n    id: \"crappie\",\n    name: \"Crappie\",\n    scientificName: \"Pomoxis spp.\",\n    category: \"freshwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/408499569/medium.jpeg\",\n    difficulty: \"beginner\",\n    description:\n      \"The most popular panfish in America. Crappie are excellent table fare and accessible to all ages. Spring spawning aggregations in flooded timber create extraordinary fishing.\",\n    habitat: \"Standing timber, brush piles, docks, deep weed edges, bridge pilings\",\n    range: \"Eastern US, widely introduced throughout\",\n    locations: [\"Arkansas\",\"Missouri\",\"Tennessee\",\"Kentucky\",\"Ohio\",\"Illinois\",\"Indiana\",\"Michigan\",\"Wisconsin\",\"Minnesota\",\"Alabama\",\"Mississippi\",\"Texas\",\"Louisiana\",\"Georgia\"],\n    season: \"Year-round; spawn April\u2013May when water hits 58\u201368\u00B0F\",\n    bestTimes: \"Pre-spawn (March\u2013April) and spawn (May) \u2014 fish concentrate in shallow timber. Winter vertical jigging near brush piles in 15\u201320 feet.\",\n    behavior: \"Schooling fish \u2014 in timber during day, suspend in open water at night near lights.\",\n    bestBait: [\"Small jigs (1/32\u20131/8 oz) with soft plastic tube\", \"Live minnows under bobber\", \"Crappie nibbles\"],\n    techniques: [\"Dock shooting with jig\", \"Spider rigging (multiple poles trolling slowly)\", \"Vertical jigging brush piles\", \"Bobber/minnow under dock\"],\n    feedingSchedule: \"Dawn/dusk most active; nighttime under dock/bridge lights extremely productive\",\n    sizeRange: \"6\u201314 inches; 1\u20133 lbs\",\n    recordWeight: \"5 lbs 3 oz (Mississippi, 2018)\",\n    tags: [\"fishing\", \"freshwater\", \"panfish\", \"crappie\", \"family-fishing\", \"table-fare\"],\n  },\n  {\n    id: \"chinook-salmon\",\n    name: \"Chinook Salmon\",\n    scientificName: \"Oncorhynchus tshawytscha\",\n    category: \"freshwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://static.inaturalist.org/photos/243843533/medium.jpeg\",\n    difficulty: \"intermediate\",\n    description:\n      \"The king of Pacific salmon. Chinook (King) salmon are the largest Pacific salmon \u2014 a 50-lb king is a legitimate trophy. The Great Lakes run giant kings that rival ocean fish.\",\n    habitat: \"Pacific Coast rivers; Great Lakes tributaries; deep offshore ocean/lake waters\",\n    range: \"Pacific Coast (California to Alaska); introduced Great Lakes\",\n    locations: [\"Alaska\",\"Washington\",\"Oregon\",\"California\",\"Michigan\",\"Wisconsin\",\"New York\",\"Ohio\",\"Indiana\",\"Pennsylvania\"],\n    season: \"Pacific Coast: Aug\u2013Dec river runs; Great Lakes: Aug\u2013Oct lake trolling, Sep\u2013Oct river\",\n    bestTimes: \"River: dawn and dusk on incoming tides; Great Lakes: morning trolling in 50\u2013100 ft\",\n    behavior: \"Anadromous \u2014 spend years at sea/lake, return to natal river to spawn once and die. Stop feeding in rivers but still strike aggressively.\",\n    bestBait: [\"Egg sacs (river)\", \"Jigs (river)\", \"Spoons (trolling lake)\", \"Dipsey diver + body bait\"],\n    techniques: [\"River drift with roe bag\", \"Back-trolling plugs\", \"Great Lakes downrigger trolling\", \"Fly fishing streamers in river\"],\n    feedingSchedule: \"Aggressive strikes in rivers (instinctual); lake trolling mimics feeding on alewife\",\n    sizeRange: \"15\u201340 lbs typical; 70+ lbs possible in Alaska\",\n    recordWeight: \"97 lbs 4 oz (Alaska, 1985)\",\n    tags: [\"fishing\", \"freshwater\", \"salmon\", \"great-lakes\", \"pacific\", \"king\"],\n  },\n\n  // \u2500\u2500\u2500 SALTWATER FISH \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  {\n    id: \"redfish\",\n    name: \"Redfish / Red Drum\",\n    scientificName: \"Sciaenops ocellatus\",\n    category: \"saltwater\",\n    imageKey: \"redfish\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/66376342/medium.jpg\",\n    difficulty: \"intermediate\",\n    description:\n      \"The copper-colored ghost of the flats. Sight-casting to tailing reds in skinny water is a religious experience. The 'bull' red drum of the fall are the prized target for big fish.\",\n    habitat: \"Shallow grass flats, oyster bars, estuaries, surf zone, mangrove creeks\",\n    range: \"Gulf Coast (Texas to Florida), Atlantic Coast (Virginia to Florida)\",\n    locations: [\"Texas\",\"Louisiana\",\"Mississippi\",\"Alabama\",\"Florida\",\"Georgia\",\"South Carolina\",\"North Carolina\",\"Virginia\"],\n    season: \"Year-round; fall bull red run (Sep\u2013Nov) is peak\",\n    bestTimes: \"Rising tidal flat \u2014 reds tail as water floods grass flats. Overcast days. Full and new moon tides.\",\n    behavior: \"Feed by rooting on oyster bars and grass flats, tailing like bonefish. Form large schools in fall (bull reds). Single 'black drum' lookalike \u2014 check for black spot near tail.\",\n    bestBait: [\"Live shrimp under popping cork\", \"Gold spoon\", \"Soft plastic paddle tail\", \"Live crab\", \"Cut mullet\"],\n    techniques: [\"Sight-casting to tailers on fly or light tackle\", \"Popping cork + shrimp\", \"Wading grass flats\", \"Kayak fishing shallow water\"],\n    feedingSchedule: \"Flood tide feeding \u2014 actively tail and push water on rising tides\",\n    sizeRange: \"18\u201340 inches; 5\u201330 lbs; 'bull reds' over 27 inches must be released in most states\",\n    recordWeight: \"94 lbs 2 oz (N. Carolina, 1984)\",\n    tags: [\"fishing\", \"saltwater\", \"redfish\", \"sight-casting\", \"flats\", \"inshore\"],\n  },\n  {\n    id: \"snook\",\n    name: \"Common Snook\",\n    scientificName: \"Centropomus undecimalis\",\n    category: \"saltwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/101681567/medium.jpg\",\n    difficulty: \"expert\",\n    description:\n      \"Florida's most prized inshore species. Snook are cunning, powerful, and selective. Dock light fishing at night and surf zone snook in fall migration are pinnacle experiences.\",\n    habitat: \"Mangrove shorelines, river mouths, dock lights, inlets, surf zone\",\n    range: \"Florida coasts, Gulf Coast to Texas (rare), Central America\",\n    locations: [\"Florida (primary)\", \"Texas (rare)\"],\n    season: \"Closed in Florida during spawning (June\u2013Aug and Dec\u2013Jan); check regulations\",\n    bestTimes: \"Night fishing under dock lights on falling tide. Surf zone snook Oct\u2013Nov. Early morning inlet points.\",\n    behavior: \"Current-oriented ambush predator. Faces into current at structure edges waiting for baitfish. Extremely sensitive to cold \u2014 die when water drops below 60\u00B0F.\",\n    bestBait: [\"Live pilchards\", \"Live pinfish\", \"Soft plastic jerkbaits\", \"Gold Johnson spoon\", \"Large topwater\"],\n    techniques: [\"Dock light presentation at night\", \"Live bait cast upcurrent of snook\", \"Surf zone walk-the-dog topwater\", \"Fly fishing mangroves\"],\n    feedingSchedule: \"Strongest bite at night under lights; tidal movement essential \u2014 outgoing tide concentrates baitfish\",\n    sizeRange: \"20\u201340 inches; 5\u201325 lbs\",\n    recordWeight: \"53 lbs 10 oz (Costa Rica)\",\n    tags: [\"fishing\", \"saltwater\", \"snook\", \"florida\", \"dock-lights\", \"inshore\"],\n  },\n  {\n    id: \"tarpon\",\n    name: \"Tarpon\",\n    scientificName: \"Megalops atlanticus\",\n    category: \"saltwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/54532250/medium.jpeg\",\n    difficulty: \"expert\",\n    description:\n      \"The Silver King. Tarpon are one of the world's most prized sport fish \u2014 up to 200 lbs, acrobatic jumps, and permit-level difficulty. The Florida Keys migration May\u2013July is legendary.\",\n    habitat: \"Coastal bays, inlets, backcountry passes, beachfronts, rivers (tolerates fresh water)\",\n    range: \"Florida, Gulf Coast, Caribbean, Central America, West Africa\",\n    locations: [\"Florida (Keys, Tampa Bay, Homosassa, Boca Grande)\", \"Texas\", \"Louisiana\"],\n    season: \"May\u2013July peak (Florida Keys and Gulf migration); year-round in some areas\",\n    bestTimes: \"May\u2013June morning migration push through Florida Keys passes. Incoming tides.\",\n    behavior: \"Migrate in massive schools along beaches and through passes. Roll at surface to gulp air. Extremely spooky \u2014 require long, accurate casts and delicate presentations.\",\n    bestBait: [\"Live crabs (Florida Keys)\", \"Live mullet\", \"Swim shad soft plastic\", \"Large fly (tarpon fly)\"],\n    techniques: [\"Sight-casting from poled skiff\", \"Bridge fishing at night with live bait\", \"Fly fishing incoming passes\"],\n    feedingSchedule: \"Active on tidal movement; rolling fish are feeding fish\",\n    sizeRange: \"30\u2013200 lbs\",\n    recordWeight: \"286 lbs 9 oz (Guinea-Bissau, 2003)\",\n    tags: [\"fishing\", \"saltwater\", \"tarpon\", \"silver-king\", \"keys\", \"fly-fishing\"],\n  },\n  {\n    id: \"striped-bass\",\n    name: \"Striped Bass\",\n    scientificName: \"Morone saxatilis\",\n    category: \"saltwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/175377771/medium.jpg\",\n    difficulty: \"intermediate\",\n    description:\n      \"The rockfish of the Atlantic Coast. Striped bass migrate from Maine to the Chesapeake Bay each season. Night surf fishing for trophy stripers is a storied tradition of the Northeast Coast.\",\n    habitat: \"Rocky surf, jetties, inlets, estuaries, river mouths; spawn in freshwater rivers\",\n    range: \"Atlantic Coast (Maine to North Carolina); Pacific Coast (introduced); Chesapeake Bay (primary spawning)\",\n    locations: [\"Maine\",\"New Hampshire\",\"Massachusetts\",\"Rhode Island\",\"Connecticut\",\"New York\",\"New Jersey\",\"Maryland\",\"Virginia\",\"North Carolina\",\"Delaware\"],\n    season: \"Spring run (April\u2013June) and fall run (Sep\u2013Dec); strict size limits\",\n    bestTimes: \"Night surf fishing in October and November. Spring tide during striper run. Dawn/dusk on rocky points.\",\n    behavior: \"Follow bunker (menhaden) schools. Bust bait on surface ('blitzes'). Night surf feeding on sand eels and crabs.\",\n    bestBait: [\"Live bunker (menhaden)\", \"Large bucktail jig + teaser\", \"Surf needlefish\", \"Bunker chunk\", \"Eels (night surfcasting)\"],\n    techniques: [\"Chunking live bunker from boat\", \"Surf casting 4\u20135 oz plugs at night\", \"Jigging bunker schools\", \"Fly fishing blitzes\"],\n    feedingSchedule: \"Blitz activity during bunker migrations; surf feeding at night; dawn/dusk point fishing\",\n    sizeRange: \"24\u201350 inches; 5\u201350+ lbs\",\n    recordWeight: \"81 lbs 14 oz (Connecticut, 2011)\",\n    tags: [\"fishing\", \"saltwater\", \"striper\", \"surf-casting\", \"atlantic\", \"night-fishing\"],\n  },\n  {\n    id: \"mahi-mahi\",\n    name: \"Mahi-Mahi / Dolphin Fish\",\n    scientificName: \"Coryphaena hippurus\",\n    category: \"saltwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/361046671/medium.jpg\",\n    difficulty: \"beginner\",\n    description:\n      \"The most colorful fish in the ocean. Mahi light up in electric green, blue, and yellow when excited or dying. Fast, acrobatic, and delicious \u2014 mahi are the perfect offshore target.\",\n    habitat: \"Open ocean surface; weed lines, floating debris, buoy edges; warm blue water 72\u201385\u00B0F\",\n    range: \"All tropical and subtropical offshore waters\",\n    locations: [\"Florida\",\"North Carolina\",\"South Carolina\",\"Georgia\",\"Virginia\",\"Hawaii\",\"California\",\"Texas\",\"Louisiana\",\"Mississippi\",\"Alabama\"],\n    season: \"Year-round in warm water; peak spring and summer (April\u2013Sep) along East Coast\",\n    bestTimes: \"Morning trolling sargassum weed lines. Floating debris is gold. When you catch one, slow down \u2014 the whole school is usually there.\",\n    behavior: \"School around floating objects (weed lines, boards, pallets). One hooked fish keeps the school nearby \u2014 use pitch baits to hook others.\",\n    bestBait: [\"Ballyhoo rigged under skirt\", \"Small live baitfish\", \"Gaudy feather jigs\", \"Pitch baits when fish visible\"],\n    techniques: [\"Trolling weed line at 7\u20139 mph\", \"Pitch casting to surfacing fish\", \"Kite fishing live bait\"],\n    feedingSchedule: \"Actively feeding during daylight; schools under weed lines and debris all day\",\n    sizeRange: \"5\u201330 lbs; 50+ lbs possible\",\n    recordWeight: \"87 lbs (Costa Rica, 1976)\",\n    tags: [\"fishing\", \"saltwater\", \"offshore\", \"mahi\", \"weed-line\", \"trolling\", \"colorful\"],\n  },\n  {\n    id: \"yellowfin-tuna\",\n    name: \"Yellowfin Tuna\",\n    scientificName: \"Thunnus albacares\",\n    category: \"saltwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/207078977/medium.jpg\",\n    difficulty: \"expert\",\n    description:\n      \"One of the ocean's apex predators. Yellowfin tuna are powerful, fast, and can weigh over 300 lbs. Fishing a massive school of 'finners' on light tackle is the ultimate offshore experience.\",\n    habitat: \"Open ocean; depth 100\u2013400 feet; follow bait schools, rip lines, underwater structure\",\n    range: \"Gulf of Mexico, Atlantic, Pacific \u2014 all warm, deep offshore waters\",\n    locations: [\"Florida\",\"Texas\",\"Louisiana\",\"North Carolina\",\"Virginia\",\"Hawaii\",\"California\"],\n    season: \"Year-round offshore; peak fall\u2013winter in Gulf of Mexico; summer offshore Atlantic\",\n    bestTimes: \"Early morning around buoys and rigs. 'Porpoise fishing' \u2014 yellowfin herd bait under dolphin pods.\",\n    behavior: \"School beneath porpoise/dolphin pods. Feed on sardines, flying fish, squid. Can strip line at 40+ mph.\",\n    bestBait: [\"Small cedar plugs (trolling)\", \"Chunked butterfish\", \"Live goggle-eyes\", \"Poppers on surface schools\"],\n    techniques: [\"High-speed trolling 8\u201310 mph\", \"Chunking at anchor over oil rig\", \"Casting poppers to surface schools\", \"Butterfly jigging\"],\n    feedingSchedule: \"Most aggressive at dawn and dusk; school activity indicates feeding\",\n    sizeRange: \"20\u2013200 lbs; most common 30\u201380 lbs\",\n    recordWeight: \"427 lbs (Cabo San Lucas, 2012)\",\n    tags: [\"fishing\", \"saltwater\", \"offshore\", \"tuna\", \"deep-sea\", \"big-game\"],\n  },\n  {\n    id: \"sailfish\",\n    name: \"Sailfish\",\n    scientificName: \"Istiophorus platypterus\",\n    category: \"saltwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/152543/medium.jpg\",\n    difficulty: \"expert\",\n    description:\n      \"The acrobatic billfish. Sailfish jump repeatedly when hooked, putting on a spectacular aerial show. Found in warm offshore waters, they are the most commonly caught billfish.\",\n    habitat: \"Open ocean, near-surface; follows bait in 100\u2013300 foot water depths\",\n    range: \"Atlantic and Pacific tropical/subtropical offshore waters\",\n    locations: [\"Florida (Palm Beach, Stuart)\", \"Texas\", \"Hawaii\", \"California\"],\n    season: \"Winter (Oct\u2013Apr) in south Florida; summer offshore\",\n    bestTimes: \"Morning kite fishing during winter Florida sailfish season. Bait schools triggering surface activity.\",\n    behavior: \"Hunt in groups, using sail fin to herd bait balls. Slash at bait with bill. Can be released alive without significant harm.\",\n    bestBait: [\"Live bait under kite\", \"Ballyhoo\", \"Rigged mullet\", \"Live pilchards\"],\n    techniques: [\"Kite fishing live bait at surface\", \"Slow trolling\", \"Light tackle spinning to surface fish\"],\n    feedingSchedule: \"Dawn and morning most productive; cooperative hunting in groups near bait schools\",\n    sizeRange: \"40\u2013120 lbs\",\n    recordWeight: \"221 lbs 5 oz (Ecuador, 1947)\",\n    tags: [\"fishing\", \"saltwater\", \"offshore\", \"billfish\", \"kite-fishing\", \"florida\"],\n  },\n  {\n    id: \"wahoo\",\n    name: \"Wahoo\",\n    scientificName: \"Acanthocybium solandri\",\n    category: \"saltwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/206402044/medium.jpeg\",\n    difficulty: \"intermediate\",\n    description:\n      \"The fastest fish in the ocean \u2014 bursts to 60 mph. Wahoo are a surprise catch that tests drag and line strength. When a wahoo strikes a trolled bait at full speed, the reel screams.\",\n    habitat: \"Offshore clear blue water over bottom structure; 100\u2013400 foot depth\",\n    range: \"Tropical and subtropical Atlantic and Pacific\",\n    locations: [\"Florida\",\"Hawaii\",\"Bahamas\",\"Gulf of Mexico\",\"North Carolina offshore\"],\n    season: \"Fall and winter peak in Atlantic and Gulf; year-round in Pacific/Hawaii\",\n    bestTimes: \"High-speed trolling at 10\u201314 mph over underwater humps and ridges at dawn.\",\n    behavior: \"Solitary or small groups. Ambush predator. Will hit high-speed baits that other species ignore.\",\n    bestBait: [\"High-speed wahoo trolling lures\", \"Rigged ballyhoo on wire leader\", \"Cedar plugs at 12 mph\"],\n    techniques: [\"High-speed trolling (10\u201314 mph) with wire leader\", \"Jigging underwater structure\"],\n    feedingSchedule: \"Opportunistic \u2014 strikes moving prey at any time of day\",\n    sizeRange: \"20\u201370 lbs; trophy over 100 lbs\",\n    recordWeight: \"158 lbs 8 oz (Baja, 2005)\",\n    tags: [\"fishing\", \"saltwater\", \"offshore\", \"wahoo\", \"high-speed\", \"fastest-fish\"],\n  },\n  {\n    id: \"bonefish\",\n    name: \"Bonefish\",\n    scientificName: \"Albula vulpes\",\n    category: \"saltwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://inaturalist-open-data.s3.amazonaws.com/photos/601558048/medium.jpg\",\n    difficulty: \"expert\",\n    description:\n      \"The ghost of the flats. Bonefish are incredibly skittish, fast as a freight train, and will test your casting and presentation skills to the limit. The holy grail of shallow water fishing.\",\n    habitat: \"Shallow tropical sand/grass flats; Bahamas, Florida Keys, Caribbean\",\n    range: \"Florida Keys, Bahamas, Caribbean, Pacific flats\",\n    locations: [\"Florida (Keys)\", \"Hawaii (rare)\", \"Bahamas (non-US destination)\"],\n    season: \"Year-round in Florida Keys; spring (March\u2013May) peak\",\n    bestTimes: \"Incoming tide flood flat on sunny mornings \u2014 spot tailing or muddying fish.\",\n    behavior: \"Feeds head-down on crustaceans in 6 inches \u2013 3 feet of water. Tails when feeding. Spooks at shadows, splashes, and poor casts.\",\n    bestBait: [\"Live shrimp\", \"Crab fly\", \"Gotcha plug\", \"Crazy Charlie fly\"],\n    techniques: [\"Sight-casting from poled skiff\", \"Wading flats\", \"Fly fishing size 6\u20138 bonefish flies\"],\n    feedingSchedule: \"Flood tide feeding; most active on incoming tides across warm flats\",\n    sizeRange: \"3\u201312 lbs; 10+ lbs is trophy\",\n    recordWeight: \"23 lbs (Zululand, S. Africa)\",\n    tags: [\"fishing\", \"saltwater\", \"flats\", \"fly-fishing\", \"sight-casting\", \"keys\"],\n  },\n  {\n    id: \"flounder\",\n    name: \"Southern Flounder\",\n    scientificName: \"Paralichthys lethostigma\",\n    category: \"saltwater\",\n    imageKey: \"bass\",\n    photoUrl: \"https://static.inaturalist.org/photos/52235866/medium.jpg\",\n    difficulty: \"intermediate\",\n    description:\n      \"The ambush master. Flounder lie flat and camouflaged on the bottom, waiting for prey to pass. Gigging flounder at night in the shallows is a beloved coastal tradition.\",\n    habitat: \"Shallow estuaries, grass flats, sandy creek mouths, jetty bases\",\n    range: \"Atlantic and Gulf Coast from Virginia to Texas\",\n    locations: [\"North Carolina\",\"South Carolina\",\"Georgia\",\"Florida\",\"Alabama\",\"Mississippi\",\"Louisiana\",\"Texas\",\"Virginia\"],\n    season: \"Year-round; fall migration Sep\u2013Nov as flounder move to deeper water to spawn\",\n    bestTimes: \"Fall migration (Oct\u2013Nov) \u2014 fish stack at inlet mouths. Night gigging in 1\u20132 feet on flats.\",\n    behavior: \"Lie half-buried in sand bottom facing current. Strike anything moving past their ambush position.\",\n    bestBait: [\"Live mud minnows\", \"Live finger mullet\", \"Soft plastic fluke\", \"Gulp! paddle tail\"],\n    techniques: [\"Drift fishing with live bait near bottom\", \"Night gigging with spotlight\", \"Bouncing jig head near structure\"],\n    feedingSchedule: \"Feeding with current movement; most aggressive on outgoing tidal flow\",\n    sizeRange: \"12\u201324 inches; 1\u20138 lbs\",\n    recordWeight: \"20 lbs 9 oz (N. Carolina, 1971)\",\n    tags: [\"fishing\", \"saltwater\", \"inshore\", \"flounder\", \"gigging\", \"fall-migration\"],\n  },\n  ...SPECIES_EXTRA,\n];\n\nexport function searchSpecies(query: string): SpeciesData[] {\n  const q = query.toLowerCase();\n  return SPECIES_DATABASE.filter(\n    (s) =>\n      s.name.toLowerCase().includes(q) ||\n      s.scientificName.toLowerCase().includes(q) ||\n      s.tags.some((t) => t.includes(q)) ||\n      s.locations.some((l) => l.toLowerCase().includes(q)) ||\n      s.description.toLowerCase().includes(q),\n  );\n}\n\nexport function filterSpeciesByCategory(\n  category: SpeciesData[\"category\"] | \"all\",\n): SpeciesData[] {\n  if (category === \"all\") return SPECIES_DATABASE;\n  return SPECIES_DATABASE.filter((s) => s.category === category);\n}\n", "import { SPECIES_DATABASE, type SpeciesData } from \"../data/species\";\n\nexport type SpeciesMatch = {\n  /** Canonical display name from the field guide. */\n  species: string;\n  imageKey: string;\n  category: SpeciesData[\"category\"];\n};\n\ntype IndexedTerm = { term: string; match: SpeciesMatch };\n\nconst speciesByName = new Map<string, SpeciesData>(\n  SPECIES_DATABASE.map((s) => [s.name.toLowerCase(), s]),\n);\n\n/** Extra aliases not covered by species DB names/tags (longest match wins). */\nconst EXTRA_SPECIES_ALIASES: Array<{ term: string; canonicalName: string }> = [\n  { term: \"largemouth bass\", canonicalName: \"Largemouth Bass\" },\n  { term: \"smallmouth bass\", canonicalName: \"Smallmouth Bass\" },\n  { term: \"striped bass\", canonicalName: \"Striped Bass\" },\n  { term: \"spotted bass\", canonicalName: \"Spotted Bass\" },\n  { term: \"red drum\", canonicalName: \"Redfish\" },\n  { term: \"mahi-mahi\", canonicalName: \"Mahi-Mahi\" },\n  { term: \"yellowfin tuna\", canonicalName: \"Yellowfin Tuna\" },\n  { term: \"bluefin tuna\", canonicalName: \"Bluefin Tuna\" },\n  { term: \"blue marlin\", canonicalName: \"Blue Marlin\" },\n  { term: \"white marlin\", canonicalName: \"White Marlin\" },\n  { term: \"wild boar\", canonicalName: \"Wild Boar\" },\n  { term: \"feral hog\", canonicalName: \"Wild Boar\" },\n  { term: \"mountain goat\", canonicalName: \"Mountain Goat\" },\n  { term: \"bighorn sheep\", canonicalName: \"Bighorn Sheep\" },\n  { term: \"dall sheep\", canonicalName: \"Dall Sheep\" },\n  { term: \"rio grande turkey\", canonicalName: \"Rio Grande Turkey\" },\n  { term: \"canada goose\", canonicalName: \"Canada Goose\" },\n  { term: \"snow goose\", canonicalName: \"Snow Goose\" },\n  { term: \"wood duck\", canonicalName: \"Wood Duck\" },\n  { term: \"mourning dove\", canonicalName: \"Mourning Dove\" },\n  { term: \"northern pike\", canonicalName: \"Northern Pike\" },\n  { term: \"brown trout\", canonicalName: \"Brown Trout\" },\n  { term: \"rainbow trout\", canonicalName: \"Rainbow Trout\" },\n  { term: \"brook trout\", canonicalName: \"Brook Trout\" },\n  { term: \"lake trout\", canonicalName: \"Lake Trout\" },\n  { term: \"cutthroat trout\", canonicalName: \"Cutthroat Trout\" },\n  { term: \"king salmon\", canonicalName: \"King Salmon\" },\n  { term: \"coho salmon\", canonicalName: \"Coho Salmon\" },\n  { term: \"sockeye salmon\", canonicalName: \"Sockeye Salmon\" },\n  { term: \"atlantic salmon\", canonicalName: \"Atlantic Salmon\" },\n  { term: \"grizzly bear\", canonicalName: \"Grizzly Bear\" },\n  { term: \"brown bear\", canonicalName: \"Brown Bear\" },\n  { term: \"black bear\", canonicalName: \"Black Bear\" },\n  { term: \"mountain lion\", canonicalName: \"Mountain Lion\" },\n  { term: \"mule deer\", canonicalName: \"Mule Deer\" },\n  { term: \"whitetail deer\", canonicalName: \"Whitetail Deer\" },\n  { term: \"wild turkey\", canonicalName: \"Wild Turkey\" },\n  { term: \"whitetail\", canonicalName: \"Whitetail Deer\" },\n  { term: \"mule\", canonicalName: \"Mule Deer\" },\n  { term: \"chinook\", canonicalName: \"King Salmon\" },\n  { term: \"muskellunge\", canonicalName: \"Muskie\" },\n  { term: \"specklebelly\", canonicalName: \"Specklebelly Goose\" },\n];\n\nfunction buildSpeciesIndex(): IndexedTerm[] {\n  const entries: IndexedTerm[] = [];\n\n  for (const s of SPECIES_DATABASE) {\n    const match: SpeciesMatch = {\n      species: s.name,\n      imageKey: s.imageKey,\n      category: s.category,\n    };\n    entries.push({ term: s.name, match });\n    entries.push({ term: s.scientificName, match });\n    for (const tag of s.tags) {\n      if (tag.length >= 3) entries.push({ term: tag, match });\n    }\n    const slugPhrase = s.id.replace(/-/g, \" \");\n    if (slugPhrase.length >= 4) entries.push({ term: slugPhrase, match });\n  }\n\n  for (const { term, canonicalName } of EXTRA_SPECIES_ALIASES) {\n    const row = speciesByName.get(canonicalName.toLowerCase());\n    if (!row) continue;\n    entries.push({\n      term,\n      match: { species: row.name, imageKey: row.imageKey, category: row.category },\n    });\n  }\n\n  const seen = new Set<string>();\n  return entries\n    .filter((e) => {\n      const key = e.term.toLowerCase();\n      if (seen.has(key)) return false;\n      seen.add(key);\n      return true;\n    })\n    .sort((a, b) => b.term.length - a.term.length);\n}\n\nconst SPECIES_INDEX = buildSpeciesIndex();\n\n/** Match species from free text using field-guide names, tags, and aliases. */\nexport function matchSpeciesInText(text: string): SpeciesMatch | null {\n  const lower = text.toLowerCase();\n  for (const { term, match } of SPECIES_INDEX) {\n    if (lower.includes(term.toLowerCase())) return match;\n  }\n  return null;\n}\n\nconst CATEGORY_THUMBNAIL: Record<SpeciesData[\"category\"], string> = {\n  \"big-game\": \"deer\",\n  waterfowl: \"duck\",\n  freshwater: \"bass\",\n  saltwater: \"bass\",\n  \"small-game\": \"quail\",\n};\n\nconst ALLOWED_THUMBNAIL_KEYS = new Set([\n  \"deer\",\n  \"elk\",\n  \"moose\",\n  \"bear\",\n  \"duck\",\n  \"turkey\",\n  \"bass\",\n  \"trout\",\n  \"salmon\",\n  \"redfish\",\n  \"tarpon\",\n  \"snook\",\n  \"grouper\",\n  \"quail\",\n  \"pheasant\",\n  \"muledeer\",\n]);\n\n/** Resolve thumbnail_key for ingested catalog videos. */\nexport function thumbnailKeyForIngestion(\n  species: string | null | undefined,\n  categoryHint?: string,\n): string {\n  if (species) {\n    const row = speciesByName.get(species.toLowerCase());\n    if (row?.imageKey && ALLOWED_THUMBNAIL_KEYS.has(row.imageKey)) {\n      return row.imageKey;\n    }\n    const matched = matchSpeciesInText(species);\n    if (matched?.imageKey && ALLOWED_THUMBNAIL_KEYS.has(matched.imageKey)) {\n      return matched.imageKey;\n    }\n  }\n\n  const cat = categoryHint?.toLowerCase();\n  if (cat === \"hooks\") return \"bass\";\n  if (cat === \"shots\") return \"deer\";\n\n  return \"deer\";\n}\n", "/**\n * Server-side outdoor content gatekeeper for ingestion, scrapers, and feed surfacing.\n *\n * ## Classification rules\n * 1. **Block list** \u2014 Any match on gaming, pranks, toys/weapons, beauty, crypto, EDM, etc. \u2192 reject.\n * 2. **Allow list** \u2014 At least one hunting/fishing/outdoor keyword must match \u2192 accept.\n * 3. **Generic hashtags** \u2014 #fyp / #foryou alone do not qualify; outdoor hashtag required when only generic tags present.\n * 4. **Creator blocklist** \u2014 Known off-topic accounts are always rejected.\n * 5. **YouTube categories** \u2014 Gaming (20), Music (10), etc. are always rejected; How-to (26)\n *    and Education (27) require outdoor action keywords.\n *\n * ## Categories after pass\n * - `hooks` \u2014 fishing-heavy\n * - `shots` \u2014 hunting-heavy\n * - `both` \u2014 mixed or unclear\n *\n * Used by: YouTube ingestion, Instagram scraper queue, feed clip filtering, admin approve.\n */\n\nconst NEGATIVE_KEYWORDS = [\n  // Gaming\n  \"nintendo\", \"playstation\", \"xbox\", \"gameplay\", \"gaming\", \"gta\", \"minecraft\", \"roblox\",\n  \"fortnite\", \"call of duty\", \"cod\", \"twitch\", \"speedrun\", \"let's play\", \"ps5\", \"esports\",\n  \"valorant\", \"league of legends\", \"pokemon\", \"zelda\", \"gamer\", \"gaming setup\",\n  // Entertainment / lifestyle\n  \"dance\", \"tiktok dance\", \"makeup\", \"beauty\", \"haul\", \"vlog\", \"reacts\", \"unboxing\", \"prank\",\n  \"challenge\", \"grwm\", \"storytime\", \"podcast\", \"lip sync\", \"crypto\", \"bitcoin\", \"nft\",\n  \"trading\", \"investing\", \"movie review\", \"trailer\", \"celebrity\", \"gossip\", \"music video\",\n  \"kpop\", \"wwe\", \"nba\", \"nfl\", \"soccer\", \"asmr\", \"oddly satisfying\",\n  \"family vlog\", \"mom life\", \"dad joke\", \"baby announcement\", \"gender reveal\",\n  \"influencer\", \"brand deal\", \"sponsored post\", \"affiliate link\",\n  // Music / EDM\n  \"edm\", \"dj set\", \"rave\", \"nightclub\", \"festival lineup\", \"bass drop\", \"remix\",\n  \"house music\", \"techno\", \"dubstep\", \"trap music\", \"phonk\",\n  // Memes / viral junk\n  \"meme\", \"memes\", \"comedy skit\", \"funny moments\", \"fail compilation\",\n  \"street interview\", \"social experiment\", \"mukbang\", \"fast food review\",\n  // Toys / non-outdoor weapons\n  \"water gun\", \"squirt gun\", \"toy gun\", \"toy weapon\", \"nerf\", \"gel blaster\", \"water blaster\",\n  \"cap gun\", \"fake gun\", \"laser tag\", \"airsoft\", \"bb gun war\", \"orby gun\", \"splatter ball\",\n  // General entertainment\n  \"viral trend\", \"influencer drama\", \"reality tv\", \"true crime podcast\",\n  // Classroom / generic education (not outdoor action)\n  \"classroom\", \"elementary school\", \"middle school\", \"high school\", \"lesson plan\",\n  \"lesson plans\", \"teacher\", \"students\", \"student\", \"curriculum\", \"homeschool\",\n  \"science class\", \"for kids\", \"kids learn\", \"educational video\", \"lecture hall\",\n  \"university lecture\", \"pbs kids\", \"national geographic kids\", \"school project\",\n  \"grade school\", \"kindergarten\", \"preschool\", \"worksheet\", \"textbook\",\n  // Standalone animal-call / sound-effect content (not hunt/fish field action)\n  \"animal call compilation\", \"game call compilation\", \"wildlife sounds for sleep\",\n  \"nature sounds for relaxation\", \"bird sounds for sleep\", \"forest sounds asmr\",\n  \"sound effects library\", \"free sound effects\",\n] as const;\n\n/** Calling/sound-centric signals \u2014 reject unless hunt/fish field action is also present. */\nconst CALLING_CENTRIC_KEYWORDS = [\n  \"game call\", \"animal call\", \"predator call\", \"e-caller\", \"e caller\", \"foxpro\",\n  \"electronic caller\", \"call sound\", \"calling sound\", \"calling tutorial\", \"how to call\",\n  \"call review\", \"distress call\", \"wildlife sound\", \"animal sound\", \"bird sound\",\n  \"coon call\", \"raccoon call\", \"duck call sound\", \"goose call sound\", \"turkey call sound\",\n  \"coyote call sound\", \"predator calling only\",\n] as const;\n\n/** Required when calling-centric keywords appear \u2014 proves real hunt/fish content. */\nconst HUNT_FISH_FIELD_SIGNALS = [\n  \"hunt\", \"hunting\", \"harvest\", \"catch\", \"caught\", \"fishing\", \"fish\", \"angler\",\n  \"field\", \"trip\", \"limit\", \"trophy\", \"documentary\", \"adventure\", \"weigh in\",\n  \"tournament\", \"charter\", \"bowhunt\", \"bowhunting\", \"rifle\", \"shot\", \"bag limit\",\n  \"gobbler\", \"decoy spread\", \"tree stand\", \"treestand\", \"offshore\", \"inshore\",\n] as const;\n\nconst POSITIVE_KEYWORDS = [\n  // Hunting\n  \"hunt\", \"hunting\", \"bowhunting\", \"bow\", \"rifle\", \"shotgun\", \"buck\", \"deer\", \"whitetail\",\n  \"elk\", \"moose\", \"bear\", \"turkey\", \"waterfowl\", \"duck\", \"goose\", \"blind\", \"treestand\",\n  \"harvest\", \"camo\", \"stalk\", \"tracker\", \"archery\", \"broadhead\", \"rut\", \"shed hunting\",\n  \"predator\", \"coyote\", \"hog hunting\", \"wild boar\", \"pheasant\", \"upland\", \"quail\",\n  // Fishing\n  \"fish\", \"fishing\", \"bass\", \"largemouth\", \"smallmouth\", \"trout\", \"fly fishing\", \"offshore\",\n  \"deep sea\", \"saltwater\", \"freshwater\", \"marlin\", \"tuna\", \"mahi\", \"reel\", \"rod\", \"bait\",\n  \"lure\", \"catch\", \"angler\", \"hook\", \"kayak fishing\", \"ice fishing\", \"tackle\", \"trolling\",\n  \"jigging\", \"spearfishing\", \"charter\", \"trophy fish\", \"crappie\", \"walleye\", \"redfish\",\n  \"snook\", \"tarpon\", \"salmon\", \"steelhead\", \"catfish\", \"bluegill\", \"perch\",\n  // Outdoor lifestyle\n  \"wild game\", \"field to table\", \"conservation\", \"wildlife\", \"habitat\", \"outfitter\",\n  \"public land\", \"trophy\", \"camping\", \"campsite\", \"backpacking\", \"hiking\", \"trail\",\n  \"national park\", \"outdoor\", \"outdoors\", \"nature\", \"wilderness\", \"campfire\",\n  \"boating\", \"boat\", \"kayak\", \"canoe\", \"paddle\", \"paddleboard\", \"marina\", \"dock\",\n  \"hunting season\", \"fishing trip\", \"deer camp\", \"duck blind\", \"tree stand\",\n  // Survival / off-road / recreation\n  \"survival\", \"bushcraft\", \"foraging\", \"trapping\", \"off road\", \"offroad\", \"atv\", \"utv\",\n  \"overlanding\", \"4x4\", \"jeep trail\", \"rock crawling\", \"snowmobile\", \"skiing backcountry\",\n  \"mountaineering\", \"climbing\", \"rappelling\", \"shooting range\", \"target practice\",\n  \"gun review\", \"optics review\", \"tackle box\", \"fly tying\", \"taxidermy\", \"butchering\",\n] as const;\n\n/** Must match for acceptance \u2014 habitat/conservation alone is not enough. */\nconst ACTION_KEYWORDS = [\n  \"hunt\", \"hunting\", \"bowhunting\", \"bow\", \"rifle\", \"shotgun\", \"buck\", \"deer\", \"whitetail\",\n  \"elk\", \"moose\", \"bear\", \"turkey\", \"waterfowl\", \"duck\", \"goose\", \"blind\", \"treestand\",\n  \"harvest\", \"stalk\", \"archery\", \"broadhead\", \"rut\", \"shed hunting\", \"predator\", \"coyote\",\n  \"hog hunting\", \"wild boar\", \"pheasant\", \"upland\", \"quail\", \"fish\", \"fishing\", \"bass\",\n  \"largemouth\", \"smallmouth\", \"trout\", \"fly fishing\", \"offshore\", \"deep sea\", \"saltwater\",\n  \"freshwater\", \"marlin\", \"tuna\", \"mahi\", \"reel\", \"rod\", \"bait\", \"lure\", \"catch\", \"caught\",\n  \"angler\", \"hook\", \"kayak fishing\", \"ice fishing\", \"tackle\", \"trolling\", \"jigging\",\n  \"spearfishing\", \"charter\", \"trophy fish\", \"crappie\", \"walleye\", \"redfish\", \"snook\",\n  \"tarpon\", \"salmon\", \"steelhead\", \"catfish\", \"bluegill\", \"perch\", \"wild game\",\n  \"field to table\", \"decoy\", \"taxidermy\", \"butchering\",\n] as const;\n\nfunction isCallingCentricWithoutHuntFish(text: string): boolean {\n  const hasCalling = CALLING_CENTRIC_KEYWORDS.some((k) => containsKeyword(text, k));\n  if (!hasCalling) return false;\n  return !HUNT_FISH_FIELD_SIGNALS.some((k) => containsKeyword(text, k));\n}\n\n/** Outdoor recreation that can stand alone without explicit hunt/fish verbs. */\nconst STANDALONE_OUTDOOR_KEYWORDS = [\n  \"camping\", \"backpacking\", \"bushcraft\", \"survival\", \"overlanding\", \"off road\", \"offroad\",\n  \"atv\", \"utv\", \"4x4\", \"jeep trail\", \"rock crawling\", \"snowmobile\", \"shooting range\",\n  \"target practice\", \"fly tying\",\n] as const;\n\n/** Weak context signals \u2014 require action/standalone keywords to accept. */\nconst WEAK_CONTEXT_ONLY_KEYWORDS = new Set<string>([\n  \"conservation\", \"wildlife\", \"habitat\", \"outfitter\", \"public land\", \"trophy\", \"camping\",\n  \"campsite\", \"hiking\", \"trail\", \"national park\", \"outdoor\", \"outdoors\", \"nature\",\n  \"wilderness\", \"campfire\", \"boating\", \"boat\", \"kayak\", \"canoe\", \"paddle\", \"paddleboard\",\n  \"marina\", \"dock\", \"hunting season\", \"fishing trip\", \"deer camp\", \"duck blind\",\n  \"tree stand\", \"skiing backcountry\", \"mountaineering\", \"climbing\", \"rappelling\",\n  \"gun review\", \"optics review\", \"tackle box\",\n]);\n\n/** Hashtags that indicate generic viral content \u2014 not sufficient alone for acceptance. */\nconst GENERIC_HASHTAGS = new Set([\n  \"fyp\", \"foryou\", \"foryoupage\", \"viral\", \"trending\", \"xyzbca\", \"tiktok\",\n  \"explore\", \"explorepage\", \"reels\", \"reelsinstagram\", \"instagood\", \"love\",\n  \"follow\", \"followme\", \"like\", \"share\", \"duet\", \"stitch\", \"capcut\",\n  \"funny\", \"comedy\", \"relatable\", \"pov\", \"ootd\", \"grwm\", \"aesthetic\",\n]);\n\n/** Outdoor hashtags that can qualify content when present in hashtag list. */\nconst OUTDOOR_HASHTAGS = new Set([\n  ...POSITIVE_KEYWORDS.map((k) => k.replace(/\\s+/g, \"\")),\n  \"bowhunting\", \"deerhunting\", \"whitetail\", \"bassfishing\", \"flyfishing\",\n  \"waterfowl\", \"duckhunting\", \"turkeyhunting\", \"elkhunting\", \"bearhunting\",\n  \"offshorefishing\", \"saltwaterfishing\", \"freshwaterfishing\", \"kayakfishing\",\n  \"icefishing\", \"campinglife\", \"hikingadventures\", \"wildlife\", \"outdoors\",\n  \"huntinglife\", \"fishinglife\", \"gohunting\", \"gofishing\", \"meateater\",\n  \"publicland\", \"conservation\", \"fieldtotable\", \"wildgame\", \"trophybuck\",\n]);\n\n/** Known off-topic creator handles \u2014 always reject content from these accounts. */\nexport const BLOCKED_CREATOR_HANDLES = new Set([\n  // Generic entertainment / meme accounts (patterns)\n  \"mrbeast\", \"charlidamelio\", \"khaby.lame\", \"bellapoarch\", \"addisonre\",\n  \"zachking\", \"spencerx\", \"babyariel\", \"lorengray\", \"riyaz.14\",\n]);\n\nconst YOUTUBE_ALWAYS_REJECT_CATEGORIES = new Set([\"10\", \"20\", \"23\", \"24\"]);\nconst YOUTUBE_CONDITIONAL_REJECT_CATEGORIES = new Set([\"26\", \"27\"]);\n\nfunction escapeRegex(value: string): string {\n  return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction containsKeyword(text: string, keyword: string): boolean {\n  const normalizedKeyword = keyword.toLowerCase();\n  if (normalizedKeyword.includes(\" \")) return text.includes(normalizedKeyword);\n  return new RegExp(`\\\\b${escapeRegex(normalizedKeyword)}\\\\b`, \"i\").test(text);\n}\n\nexport type GatekeeperResult = {\n  valid: boolean;\n  reason: string;\n  positiveMatches: string[];\n  negativeMatches: string[];\n};\n\n/** Build audit text from title, caption, hashtags, etc. */\nexport function buildIngestionAuditText(\n  parts: Array<string | null | undefined>,\n): string {\n  return parts\n    .filter((p): p is string => Boolean(p && String(p).trim()))\n    .join(\" \");\n}\n\nexport function isBlockedCreator(handle: string | null | undefined): boolean {\n  if (!handle) return false;\n  const normalized = handle.replace(/^@/, \"\").toLowerCase().trim();\n  return BLOCKED_CREATOR_HANDLES.has(normalized);\n}\n\n/**\n * Reject when hashtags are only generic viral tags with no outdoor signal.\n * Returns null if hashtags are not the deciding factor (caption text may still pass).\n */\nexport function auditHashtagRelevance(hashtags: string[]): { valid: boolean; reason: string } | null {\n  if (hashtags.length === 0) return null;\n\n  const normalized = hashtags.map((h) => h.replace(/^#/, \"\").toLowerCase());\n  const hasOutdoorTag = normalized.some(\n    (tag) => OUTDOOR_HASHTAGS.has(tag) || POSITIVE_KEYWORDS.some((k) => tag.includes(k.replace(/\\s+/g, \"\"))),\n  );\n  if (hasOutdoorTag) return { valid: true, reason: \"outdoor hashtag present\" };\n\n  const onlyGeneric = normalized.every((tag) => GENERIC_HASHTAGS.has(tag) || tag.length <= 3);\n  if (onlyGeneric && normalized.length > 0) {\n    return { valid: false, reason: \"Only generic viral hashtags \u2014 no outdoor relevance\" };\n  }\n\n  return null;\n}\n\nexport function auditIngestionContent(\n  text: string,\n  youtubeCategoryId?: string | null,\n  options?: { creatorHandle?: string | null; hashtags?: string[] },\n): GatekeeperResult {\n  const normalized = text.toLowerCase().replace(/\\s+/g, \" \").trim();\n  const negativeMatches = NEGATIVE_KEYWORDS.filter((k) => containsKeyword(normalized, k));\n  const positiveMatches = POSITIVE_KEYWORDS.filter((k) => containsKeyword(normalized, k));\n\n  if (options?.creatorHandle && isBlockedCreator(options.creatorHandle)) {\n    return {\n      valid: false,\n      reason: `Blocked creator: ${options.creatorHandle}`,\n      positiveMatches,\n      negativeMatches,\n    };\n  }\n\n  if (!normalized && (!options?.hashtags || options.hashtags.length === 0)) {\n    return {\n      valid: false,\n      reason: \"Empty content text\",\n      positiveMatches,\n      negativeMatches,\n    };\n  }\n\n  if (youtubeCategoryId && YOUTUBE_ALWAYS_REJECT_CATEGORIES.has(youtubeCategoryId)) {\n    return {\n      valid: false,\n      reason: `YouTube category ${youtubeCategoryId} is not allowed`,\n      positiveMatches,\n      negativeMatches,\n    };\n  }\n\n  if (youtubeCategoryId && YOUTUBE_CONDITIONAL_REJECT_CATEGORIES.has(youtubeCategoryId) && positiveMatches.length === 0) {\n    return {\n      valid: false,\n      reason: `YouTube category ${youtubeCategoryId} requires outdoor action keywords`,\n      positiveMatches,\n      negativeMatches,\n    };\n  }\n\n  if (negativeMatches.length > 0) {\n    return {\n      valid: false,\n      reason: `Blocked keywords: ${negativeMatches.slice(0, 3).join(\", \")}`,\n      positiveMatches,\n      negativeMatches,\n    };\n  }\n\n  if (isCallingCentricWithoutHuntFish(normalized)) {\n    return {\n      valid: false,\n      reason: \"Calling/sound-effect content without hunt or fishing field action\",\n      positiveMatches,\n      negativeMatches,\n    };\n  }\n\n  if (positiveMatches.length > 0) {\n    const actionMatches = ACTION_KEYWORDS.filter((k) => containsKeyword(normalized, k));\n    const standaloneMatches = STANDALONE_OUTDOOR_KEYWORDS.filter((k) => containsKeyword(normalized, k));\n    if (actionMatches.length > 0 || standaloneMatches.length > 0) {\n      return { valid: true, reason: \"ok\", positiveMatches, negativeMatches };\n    }\n    const onlyWeakContext = positiveMatches.every((k) => WEAK_CONTEXT_ONLY_KEYWORDS.has(k));\n    if (onlyWeakContext) {\n      return {\n        valid: false,\n        reason: \"Habitat/conservation content without hunt/fish/catch activity\",\n        positiveMatches,\n        negativeMatches,\n      };\n    }\n    return { valid: true, reason: \"ok\", positiveMatches, negativeMatches };\n  }\n\n  // No positive keywords in text \u2014 check hashtags as fallback\n  if (options?.hashtags && options.hashtags.length > 0) {\n    const hashtagAudit = auditHashtagRelevance(options.hashtags);\n    if (hashtagAudit?.valid) {\n      return { valid: true, reason: \"outdoor hashtags\", positiveMatches, negativeMatches };\n    }\n    if (hashtagAudit && !hashtagAudit.valid) {\n      return {\n        valid: false,\n        reason: hashtagAudit.reason,\n        positiveMatches,\n        negativeMatches,\n      };\n    }\n  }\n\n  if (!normalized) {\n    return {\n      valid: false,\n      reason: \"No outdoor/hunting/fishing relevance detected\",\n      positiveMatches,\n      negativeMatches,\n    };\n  }\n\n  return {\n    valid: false,\n    reason: \"No outdoor/hunting/fishing relevance detected\",\n    positiveMatches,\n    negativeMatches,\n  };\n}\n\n/**\n * Validate a creator account from bio + sample post captions.\n * Majority of samples must pass gatekeeper for account to be accepted.\n */\nexport function auditCreatorProfile(input: {\n  handle: string;\n  bio?: string | null;\n  sampleCaptions?: string[];\n  niche?: string | null;\n}): { valid: boolean; reason: string; passRate: number } {\n  const handle = input.handle.replace(/^@/, \"\").toLowerCase();\n\n  if (isBlockedCreator(handle)) {\n    return { valid: false, reason: `Blocked creator: ${handle}`, passRate: 0 };\n  }\n\n  const bioText = input.bio?.trim() ?? \"\";\n  if (bioText) {\n    const bioAudit = auditIngestionContent(bioText, null, { creatorHandle: handle });\n    if (!bioAudit.valid && bioAudit.negativeMatches.length > 0) {\n      return { valid: false, reason: `Bio rejected: ${bioAudit.reason}`, passRate: 0 };\n    }\n  }\n\n  const samples = input.sampleCaptions?.filter((s) => s?.trim()) ?? [];\n  if (samples.length === 0) {\n    // No samples \u2014 rely on bio or allowlist trust (caller decides)\n    if (bioText) {\n      const bioAudit = auditIngestionContent(bioText, null, { creatorHandle: handle });\n      return {\n        valid: bioAudit.valid,\n        reason: bioAudit.valid ? \"Bio passes gatekeeper\" : bioAudit.reason,\n        passRate: bioAudit.valid ? 1 : 0,\n      };\n    }\n    return { valid: false, reason: \"No bio or sample posts to validate\", passRate: 0 };\n  }\n\n  let passed = 0;\n  for (const caption of samples) {\n    const audit = auditIngestionContent(caption, null, { creatorHandle: handle });\n    if (audit.valid) passed++;\n  }\n\n  const passRate = passed / samples.length;\n  const minPassRate = 0.6; // majority must be outdoor-relevant\n\n  if (passRate < minPassRate) {\n    return {\n      valid: false,\n      reason: `Only ${passed}/${samples.length} sample posts pass gatekeeper (${Math.round(passRate * 100)}% < ${minPassRate * 100}% required)`,\n      passRate,\n    };\n  }\n\n  return {\n    valid: true,\n    reason: `${passed}/${samples.length} sample posts pass gatekeeper`,\n    passRate,\n  };\n}\n\nexport function classifyIngestionCategory(text: string): \"hooks\" | \"shots\" | \"both\" {\n  const normalized = text.toLowerCase();\n  const fishing = [\n    \"fish\", \"fishing\", \"bass\", \"trout\", \"angler\", \"offshore\", \"saltwater\", \"reel\", \"lure\",\n    \"kayak fishing\", \"ice fishing\", \"charter\", \"boating\", \"boat\",\n  ];\n  const hunting = [\n    \"hunt\", \"hunting\", \"deer\", \"elk\", \"bow\", \"rifle\", \"turkey\", \"waterfowl\", \"buck\", \"camping\",\n  ];\n\n  const fishScore = fishing.filter((k) => containsKeyword(normalized, k)).length;\n  const huntScore = hunting.filter((k) => containsKeyword(normalized, k)).length;\n\n  if (fishScore > 0 && huntScore > 0) return \"both\";\n  if (fishScore > huntScore) return \"hooks\";\n  if (huntScore > fishScore) return \"shots\";\n  return \"both\";\n}\n", "import {\n  isInstagramCdnMp4,\n  isInstagramEmbedUrl,\n  resolveInstagramPlaybackUrl,\n} from \"../ingestion/instagramPlayback.js\";\nimport { isTikTokCdnUrl, resolveTikTokPlaybackUrl } from \"./tiktokPlayback.js\";\n\nconst NATIVE_EXT = /\\.(mp4|mov|webm|m4v|ogg|ogv|m3u8)(\\?|#|$)/i;\n\nexport function isNativePlaybackUrl(url: string): boolean {\n  if (!url?.trim()) return false;\n  if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) return true;\n  if (isInstagramCdnMp4(url)) return true;\n  if (isTikTokCdnUrl(url)) return true;\n  return NATIVE_EXT.test(url);\n}\n\nexport function isPlayableFeedUrl(\n  videoUrl: string,\n  options?: {\n    sourcePlatform?: string | null;\n    embedUrl?: string | null;\n    sourceVideoId?: string | null;\n    rightsMetadata?: Record<string, unknown> | null;\n    durationSeconds?: number | null;\n  },\n): boolean {\n  const url = videoUrl?.trim();\n  if (!url) return false;\n\n  if (isNativePlaybackUrl(url)) return true;\n  if (/youtube\\.com|youtu\\.be/i.test(url)) return true;\n  if (/vimeo\\.com/i.test(url)) return true;\n  if (isInstagramEmbedUrl(url) || /instagram\\.com\\/reel/i.test(url)) {\n    return Boolean(options?.sourceVideoId?.trim());\n  }\n  if (/tiktok\\.com/i.test(url)) {\n    return Boolean(options?.sourceVideoId?.trim());\n  }\n  if (options?.embedUrl?.trim() && options?.sourceVideoId?.trim()) return true;\n  if (options?.sourcePlatform === \"instagram\" && options?.sourceVideoId?.trim()) return true;\n  if (options?.sourcePlatform === \"tiktok\" && options?.sourceVideoId?.trim()) return true;\n\n  return false;\n}\n\nexport function resolveFeedPlaybackUrl(row: {\n  videoUrl: string;\n  sourcePlatform?: string | null;\n  rightsMetadata?: Record<string, unknown> | null;\n  embedUrl?: string | null;\n}): string {\n  if (row.sourcePlatform === \"instagram\") {\n    return resolveInstagramPlaybackUrl(\n      row.videoUrl,\n      row.rightsMetadata ?? null,\n    );\n  }\n  if (row.sourcePlatform === \"tiktok\") {\n    return resolveTikTokPlaybackUrl(row.videoUrl, row.rightsMetadata ?? null);\n  }\n  return row.videoUrl;\n}\n\n/** Same-origin proxy path for Instagram CDN MP4 (referrer + refresh). */\nexport function feedPlaybackProxyPath(dbVideoId: number): string {\n  return `/api/feed/playback/db-${dbVideoId}`;\n}\n\nexport function isFeedPlaybackProxyPath(url: string): boolean {\n  return /\\/api\\/feed\\/playback\\/db-\\d+(\\?|#|$)/.test(url);\n}\n\nexport type FeedVideoRow = {\n  id: number;\n  videoUrl: string;\n  sourcePlatform?: string | null;\n  sourceVideoId?: string | null;\n  rightsMetadata?: Record<string, unknown> | null;\n  embedUrl?: string | null;\n};\n\nfunction isFreshSocialNativePlayback(\n  rightsMetadata: Record<string, unknown> | null | undefined,\n): boolean {\n  if (rightsMetadata?.playbackMethod !== \"native\") return false;\n  const retrieved = rightsMetadata.retrievedAt;\n  if (!retrieved) return false;\n  const ageMs = Date.now() - new Date(String(retrieved)).getTime();\n  // TikTok/Instagram signed CDN URLs typically expire within hours.\n  return ageMs >= 0 && ageMs < 4 * 60 * 60 * 1000;\n}\n\nfunction hasResolvableNativeUpstream(\n  upstream: string,\n  sourcePlatform?: string | null,\n  rightsMetadata?: Record<string, unknown> | null,\n): boolean {\n  if (sourcePlatform === \"instagram\") {\n    return isInstagramCdnMp4(upstream);\n  }\n  if (sourcePlatform === \"tiktok\") {\n    return isTikTokCdnUrl(upstream) && isFreshSocialNativePlayback(rightsMetadata);\n  }\n  return isNativePlaybackUrl(upstream);\n}\n\n/** URL returned to browsers \u2014 proxies social CDN through our API when a native URL exists. */\nexport function resolveClientFeedVideoUrl(row: FeedVideoRow): string {\n  const upstream = resolveFeedPlaybackUrl(row);\n\n  if (row.sourcePlatform === \"youtube\" || row.sourcePlatform === \"vimeo\") {\n    return upstream;\n  }\n\n  // Instagram/TikTok: ALWAYS use the proxy when we have a source id (even if the\n  // stored CDN URL is expired). The /api/feed/playback/db-{id} endpoint adds the\n  // platform Referer (required by the CDN) and calls the on-demand refresh. This\n  // gives every clip with a fresh/refreshable CDN its best chance at full-bleed\n  // native playback; VideoPlayer only falls back to the embed card after the\n  // proxy genuinely fails.\n  if (\n    (row.sourcePlatform === \"instagram\" || row.sourcePlatform === \"tiktok\") &&\n    row.sourceVideoId?.trim()\n  ) {\n    return feedPlaybackProxyPath(row.id);\n  }\n\n  if (hasResolvableNativeUpstream(upstream, row.sourcePlatform, row.rightsMetadata)) {\n    return feedPlaybackProxyPath(row.id);\n  }\n\n  if (row.sourcePlatform === \"instagram\") {\n    if (row.embedUrl?.trim()) return row.embedUrl.trim();\n    const code = row.sourceVideoId?.trim();\n    if (code) return `https://www.instagram.com/reel/${code}/embed`;\n  }\n\n  if (row.sourcePlatform === \"tiktok\") {\n    if (row.embedUrl?.trim()) {\n      const embed = row.embedUrl.trim();\n      return embed.includes(\"?\") ? embed : `${embed}?autoplay=1`;\n    }\n    const id = row.sourceVideoId?.trim();\n    if (id) return `https://www.tiktok.com/embed/v2/${id}?autoplay=1`;\n  }\n\n  return upstream;\n}\n\nexport type PublicFeedVideoPayload = {\n  id: number;\n  title: string;\n  creator: string | null;\n  creatorHandle: string | null;\n  videoUrl: string;\n  thumbnailUrl: string | null;\n  species: string | null;\n  locationState: string | null;\n  weightSize: string | null;\n  category: string | null;\n  description: string | null;\n  sourcePlatform: string | null;\n  videoFormat: string | null;\n  embedUrl: string | null;\n  sourceVideoId: string | null;\n  rightsMetadata?: Record<string, unknown> | null;\n  durationSeconds?: number | null;\n  createdAt: Date;\n};\n\nexport function serializePublicFeedVideo(\n  row: PublicFeedVideoPayload,\n  videoFormat: string,\n): {\n  id: number;\n  title: string;\n  creator: string | null;\n  creatorHandle: string | null;\n  videoUrl: string;\n  thumbnailUrl: string | null;\n  species: string | null;\n  locationState: string | null;\n  weightSize: string | null;\n  category: string | null;\n  description: string | null;\n  sourcePlatform: string | null;\n  videoFormat: string;\n  embedUrl: string | null;\n  sourceVideoId: string | null;\n  createdAt: Date;\n  clerkDisplayName: null;\n  clerkAvatarUrl: null;\n} | null {\n  if (\n    !isPlayableFeedUrl(row.videoUrl, {\n      sourcePlatform: row.sourcePlatform,\n      embedUrl: row.embedUrl,\n      sourceVideoId: row.sourceVideoId,\n    })\n  ) {\n    return null;\n  }\n\n  const playbackUrl = resolveClientFeedVideoUrl({\n    id: row.id,\n    videoUrl: row.videoUrl,\n    sourcePlatform: row.sourcePlatform,\n    sourceVideoId: row.sourceVideoId,\n    rightsMetadata: row.rightsMetadata ?? null,\n    embedUrl: row.embedUrl,\n  });\n\n  return {\n    id: row.id,\n    title: row.title,\n    creator: row.creator,\n    creatorHandle: row.creatorHandle,\n    videoUrl: playbackUrl,\n    thumbnailUrl: row.thumbnailUrl,\n    species: row.species,\n    locationState: row.locationState,\n    weightSize: row.weightSize,\n    category: row.category,\n    description: row.description,\n    sourcePlatform: row.sourcePlatform,\n    videoFormat,\n    embedUrl: row.embedUrl,\n    sourceVideoId: row.sourceVideoId,\n    createdAt: row.createdAt,\n    clerkDisplayName: null,\n    clerkAvatarUrl: null,\n  };\n}\n", "/**\n * Deer-first content priority \u2014 shared keyword tiers, scoring, and scope classification\n * for ingestion, relevance ranking, and feed surfacing.\n */\nimport type { DiscoveryScope } from \"./types.js\";\n\n/** Target share of newly ingested catalog videos that should be deer-focused. */\nexport const DEER_INSERT_SHARE_TARGET = 0.55;\n\n/** Alert when library deer share falls below this (catalog-wide). */\nexport const DEER_LIBRARY_SHARE_FLOOR = 0.35;\n\nexport const WHITETAIL_DEER_KEYWORDS = [\n  \"white-tailed deer\",\n  \"whitetail deer\",\n  \"whitetail\",\n  \"white tail deer\",\n  \"whitetails\",\n  \"trophy buck\",\n  \"giant buck\",\n  \"monster buck\",\n  \"rut hunt\",\n  \"pre rut\",\n  \"post rut\",\n  \"tree stand\",\n  \"treestand\",\n  \"ground blind\",\n  \"deer hunt\",\n  \"deer hunting\",\n  \"bowhunting deer\",\n  \"bow hunt deer\",\n  \"rifle deer hunt\",\n  \"gun deer hunt\",\n  \"guided deer hunt\",\n  \"deer camp\",\n  \"hunting cabin\",\n  \"deer lease\",\n  \"outfitter deer\",\n  \"deer harvest\",\n  \"buck down\",\n  \"public land deer\",\n  \"food plot deer\",\n  \"trail camera buck\",\n] as const;\n\nexport const DEER_GENERAL_KEYWORDS = [\n  \"deer\",\n  \"buck\",\n  \"doe\",\n  \"rut\",\n  \"antlers\",\n  \"field dress deer\",\n] as const;\n\nexport const BIG_GAME_SECONDARY_KEYWORDS = [\n  \"elk hunt\",\n  \"elk hunting\",\n  \"moose hunt\",\n  \"moose hunting\",\n  \"bear hunt\",\n  \"bear hunting\",\n  \"mule deer\",\n  \"blacktail deer\",\n  \"caribou\",\n  \"bighorn\",\n  \"mountain goat\",\n  \"big game hunt\",\n  \"spot and stalk\",\n] as const;\n\nexport const ANTELOPE_KEYWORDS = [\n  \"pronghorn\",\n  \"antelope hunt\",\n  \"antelope hunting\",\n  \"speed goat\",\n] as const;\n\nexport const HUNT_CONTEXT_KEYWORDS = [\n  \"hunting cabin\",\n  \"deer camp\",\n  \"guided hunt\",\n  \"guided deer\",\n  \"outfitter\",\n  \"charter hunt\",\n  \"field hunt\",\n  \"all day hunt\",\n  \"full hunt\",\n  \"hunt footage\",\n  \"hunt compilation\",\n  \"multiple bucks\",\n  \"successful hunts\",\n  \"stand hunt\",\n  \"blind hunt\",\n  \"public land hunt\",\n  \"backcountry hunt\",\n] as const;\n\nexport const LONG_FORM_KEYWORDS = [\n  \"full hunt\",\n  \"full episode\",\n  \"documentary\",\n  \"compilation\",\n  \"all day\",\n  \"day long\",\n  \"uncut\",\n  \"complete hunt\",\n  \"hunt film\",\n] as const;\n\nexport const NON_DEER_DOWNRANK_KEYWORDS = [\n  \"bass fishing\",\n  \"fly fishing\",\n  \"offshore fishing\",\n  \"kayak fishing\",\n  \"ice fishing\",\n  \"saltwater fishing\",\n  \"trout fishing\",\n  \"waterfowl only\",\n  \"duck hunting only\",\n] as const;\n\nexport type ContentTopicTier = \"whitetail\" | \"deer\" | \"big_game\" | \"antelope\" | \"fishing\" | \"other\";\n\nfunction normalize(text: string): string {\n  return text.toLowerCase().replace(/\\s+/g, \" \").trim();\n}\n\nfunction countMatches(text: string, keywords: readonly string[]): number {\n  let n = 0;\n  for (const kw of keywords) {\n    if (text.includes(kw)) n += 1;\n  }\n  return n;\n}\n\nexport function classifyContentTopicTier(text: string): ContentTopicTier {\n  const t = normalize(text);\n  if (countMatches(t, WHITETAIL_DEER_KEYWORDS) > 0) return \"whitetail\";\n  if (countMatches(t, ANTELOPE_KEYWORDS) > 0) return \"antelope\";\n  if (countMatches(t, BIG_GAME_SECONDARY_KEYWORDS) > 0) return \"big_game\";\n  if (countMatches(t, DEER_GENERAL_KEYWORDS) > 0) return \"deer\";\n  if (/\\bfish(ing)?\\b|\\bcatch\\b|\\bangler\\b|\\boffshore\\b|\\bbass\\b/.test(t)) return \"fishing\";\n  return \"other\";\n}\n\n/** True when metadata clearly describes deer hunting (not generic outdoors). */\nexport function isDeerHuntingContent(text: string): boolean {\n  const t = normalize(text);\n  const tier = classifyContentTopicTier(t);\n  if (tier === \"whitetail\" || tier === \"deer\") {\n    return /\\bhunt(ing|s|ed)?\\b|\\bharvest\\b|\\bbuck\\b|\\brut\\b|\\bstand\\b|\\bblind\\b|\\bbowhunt/.test(t);\n  }\n  return false;\n}\n\nexport type DeerMetadataScoreInput = {\n  title: string;\n  description?: string;\n  tags?: string[];\n  species?: string | null;\n  durationSeconds?: number | null;\n};\n\n/** Additional relevance points from deer / hunt-context signals (0\u201345). */\nexport function scoreDeerContentMetadata(input: DeerMetadataScoreInput): number {\n  const text = normalize(\n    [input.title, input.description ?? \"\", ...(input.tags ?? []), input.species ?? \"\"].join(\" \"),\n  );\n  let score = 0;\n\n  const whitetailHits = countMatches(text, WHITETAIL_DEER_KEYWORDS);\n  const deerHits = countMatches(text, DEER_GENERAL_KEYWORDS);\n  const bigGameHits = countMatches(text, BIG_GAME_SECONDARY_KEYWORDS);\n  const antelopeHits = countMatches(text, ANTELOPE_KEYWORDS);\n  const contextHits = countMatches(text, HUNT_CONTEXT_KEYWORDS);\n  const longFormHits = countMatches(text, LONG_FORM_KEYWORDS);\n\n  score += Math.min(20, whitetailHits * 5);\n  score += Math.min(10, deerHits * 3);\n  score += Math.min(8, bigGameHits * 2);\n  score += Math.min(6, antelopeHits * 3);\n  score += Math.min(10, contextHits * 2);\n  score += Math.min(8, longFormHits * 3);\n\n  const duration = input.durationSeconds ?? 0;\n  if (duration > 0 && duration <= 60) score += 10;\n  else if (duration > 60 && duration <= 180) score += 6;\n  else if (duration >= 600) score += 4;\n  else if (duration >= 240) score += 3;\n\n  if (countMatches(text, NON_DEER_DOWNRANK_KEYWORDS) > 0 && whitetailHits + deerHits === 0) {\n    score -= 12;\n  }\n\n  if (/species.*whitetail|whitetail deer/i.test(input.species ?? \"\")) score += 6;\n\n  return score;\n}\n\nexport function deerFeedRankingBoost(input: DeerMetadataScoreInput): number {\n  const tier = classifyContentTopicTier(\n    [input.title, input.description ?? \"\", input.species ?? \"\"].join(\" \"),\n  );\n  const meta = scoreDeerContentMetadata(input);\n  switch (tier) {\n    case \"whitetail\":\n      return 2.2 + meta / 40;\n    case \"deer\":\n      return 1.8 + meta / 50;\n    case \"big_game\":\n      return 1.25 + meta / 80;\n    case \"antelope\":\n      return 1.2 + meta / 80;\n    case \"fishing\":\n      return 0.65;\n    default:\n      return 0.85;\n  }\n}\n\nexport function isDeerDiscoveryScope(scope: DiscoveryScope): boolean {\n  const blob = `${scope.scopeKey} ${scope.query}`.toLowerCase();\n  return (\n    scope.scopeKey.startsWith(\"deer_\") ||\n    scope.scopeKey.startsWith(\"priority_deer\") ||\n    /whitetail|white-tailed|deer hunt|deer hunting|\\bbuck\\b|\\brut\\b|treestand|tree stand|ground blind|deer camp|guided deer|bowhunting deer|rifle deer/.test(\n      blob,\n    )\n  );\n}\n\nexport function isBigGameDiscoveryScope(scope: DiscoveryScope): boolean {\n  if (isDeerDiscoveryScope(scope)) return false;\n  const blob = `${scope.scopeKey} ${scope.query}`.toLowerCase();\n  return /big.game|elk|moose|bear|mule deer|backcountry|antelope|pronghorn/.test(blob);\n}\n\nexport function deerPriorityEnabled(): boolean {\n  return process.env.INGESTION_DEER_PRIORITY !== \"false\";\n}\n\n/** Pick scopes for a cycle \u2014 deer scopes get weighted repetition when deer priority is on. */\nexport function selectScopesForIngestionCycle(\n  allScopes: DiscoveryScope[],\n  startIndex: number,\n  count: number,\n): { scopes: DiscoveryScope[]; nextIndex: number } {\n  if (allScopes.length === 0 || count <= 0) {\n    return { scopes: [], nextIndex: startIndex };\n  }\n\n  if (!deerPriorityEnabled()) {\n    const scopes: DiscoveryScope[] = [];\n    let idx = startIndex % allScopes.length;\n    for (let i = 0; i < count; i++) {\n      scopes.push(allScopes[idx]!);\n      idx = (idx + 1) % allScopes.length;\n    }\n    return { scopes, nextIndex: idx };\n  }\n\n  const deer = allScopes.filter(isDeerDiscoveryScope);\n  const bigGame = allScopes.filter(isBigGameDiscoveryScope);\n  const rest = allScopes.filter((s) => !isDeerDiscoveryScope(s) && !isBigGameDiscoveryScope(s));\n\n  const deerSlots = Math.max(1, Math.ceil(count * 0.7));\n  const bigGameSlots = Math.min(1, count - deerSlots);\n  const restSlots = count - deerSlots - bigGameSlots;\n\n  const pickRotating = (pool: DiscoveryScope[], slots: number, idx: number) => {\n    const picked: DiscoveryScope[] = [];\n    if (pool.length === 0 || slots <= 0) return { picked, idx };\n    let i = idx;\n    for (let n = 0; n < slots; n++) {\n      picked.push(pool[i % pool.length]!);\n      i += 1;\n    }\n    return { picked, idx: i % pool.length };\n  };\n\n  let deerIdx = startIndex % Math.max(deer.length, 1);\n  let bigIdx = startIndex % Math.max(bigGame.length, 1);\n  let restIdx = startIndex % Math.max(rest.length, 1);\n\n  const deerPick = pickRotating(deer.length > 0 ? deer : allScopes, deerSlots, deerIdx);\n  deerIdx = deerPick.idx;\n  const bgPick = pickRotating(bigGame, bigGameSlots, bigIdx);\n  bigIdx = bgPick.idx;\n  const restPick = pickRotating(rest, restSlots, restIdx);\n  restIdx = restPick.idx;\n\n  const scopes = [...deerPick.picked, ...bgPick.picked, ...restPick.picked];\n  const nextIndex = (startIndex + count) % allScopes.length;\n\n  return { scopes, nextIndex };\n}\n\n/** Dedicated deer-first discovery scopes (rotated before all other catalog entries). */\nexport const DEER_DISCOVERY_SCOPES: DiscoveryScope[] = [\n  { scopeKey: \"deer_whitetail_documentary\", query: \"white-tailed deer hunting harvest field #shorts\", category: \"shots\", relevanceBoost: 6, searchOrder: \"relevance\" },\n  { scopeKey: \"deer_whitetail_rut_buck\", query: \"whitetail deer rut trophy buck hunt harvest shorts\", category: \"shots\", relevanceBoost: 6 },\n  { scopeKey: \"deer_bowhunting_buck\", query: \"bowhunting whitetail buck deer hunt tree stand harvest #shorts\", category: \"shots\", relevanceBoost: 6 },\n  { scopeKey: \"deer_rifle_hunt\", query: \"rifle deer hunt whitetail buck harvest field shorts\", category: \"shots\", relevanceBoost: 6 },\n  { scopeKey: \"deer_ground_blind\", query: \"ground blind whitetail deer hunt buck harvest shorts\", category: \"shots\", relevanceBoost: 5 },\n  { scopeKey: \"deer_tree_stand\", query: \"tree stand whitetail deer hunt rut buck down shorts\", category: \"shots\", relevanceBoost: 5 },\n  { scopeKey: \"deer_guided_outfitter\", query: \"guided deer hunt outfitter whitetail buck harvest #shorts\", category: \"shots\", relevanceBoost: 5 },\n  { scopeKey: \"deer_hunting_cabin\", query: \"deer hunting cabin camp whitetail buck hunt footage shorts\", category: \"shots\", relevanceBoost: 5 },\n  { scopeKey: \"deer_public_land\", query: \"public land whitetail deer hunt buck harvest DIY shorts\", category: \"shots\", relevanceBoost: 5 },\n  { scopeKey: \"deer_day_long_footage\", query: \"whitetail deer hunt harvest successful buck shorts\", category: \"shots\", relevanceBoost: 5, searchOrder: \"relevance\" },\n  { scopeKey: \"deer_hunt_compilation\", query: \"whitetail deer hunt compilation bucks harvest shorts\", category: \"shots\", relevanceBoost: 5 },\n  { scopeKey: \"deer_food_plot_stand\", query: \"food plot tree stand whitetail deer hunt buck shorts\", category: \"shots\", relevanceBoost: 4 },\n  { scopeKey: \"deer_trail_cam_buck\", query: \"trail camera giant whitetail buck hunt harvest shorts\", category: \"shots\", relevanceBoost: 4 },\n  { scopeKey: \"deer_shed_to_harvest\", query: \"whitetail deer scouting rut stand hunt harvest shorts\", category: \"shots\", relevanceBoost: 4 },\n  { scopeKey: \"deer_mule_secondary\", query: \"mule deer hunt spot stalk harvest field shorts\", category: \"shots\", relevanceBoost: 4 },\n  { scopeKey: \"deer_lease_hunt\", query: \"deer lease hunting whitetail buck rifle bow harvest shorts\", category: \"shots\", relevanceBoost: 4 },\n  { scopeKey: \"biggame_elk_documentary\", query: \"elk hunting backcountry harvest adventure shorts\", category: \"shots\", relevanceBoost: 4 },\n  { scopeKey: \"biggame_moose_bear\", query: \"moose bear big game hunting harvest field shorts\", category: \"shots\", relevanceBoost: 3 },\n  { scopeKey: \"antelope_pronghorn_hunt\", query: \"pronghorn antelope hunting spot stalk harvest shorts\", category: \"shots\", relevanceBoost: 3 },\n];\n", "import type { GatekeeperResult } from \"./contentGatekeeper\";\nimport {\n  classifyContentTopicTier,\n  isDeerHuntingContent,\n  scoreDeerContentMetadata,\n} from \"./deerContentPriority\";\n\nexport type RelevanceInput = {\n  title: string;\n  description: string;\n  tags?: string[];\n  species?: string | null;\n  durationSeconds?: number | null;\n  viewCount?: number;\n  likeCount?: number;\n  gatekeeper: GatekeeperResult;\n  scopeBoost?: number;\n};\n\nconst DOCUMENTARY_QUALITY_KEYWORDS = [\n  \"documentary\", \"cinematic\", \"full film\", \"full episode\", \"story\", \"adventure\",\n  \"field journal\", \"expedition\", \"chronicle\", \"journey\",\n] as const;\n\nconst HUNT_FISH_CORE_KEYWORDS = [\n  \"harvest\", \"catch\", \"caught\", \"trophy\", \"weigh in\", \"limit\", \"field hunt\",\n  \"bowhunt\", \"bowhunting\", \"offshore\", \"inshore\", \"tournament\", \"charter\",\n] as const;\n\nconst CALLING_CENTRIC_KEYWORDS = [\n  \"game call\", \"animal call\", \"predator call\", \"e-caller\", \"electronic caller\",\n  \"calling tutorial\", \"call sound\", \"distress call\", \"wildlife sound\",\n  \"coon call\", \"raccoon call\", \"duck call sound\", \"turkey call sound\",\n] as const;\n\nfunction textIncludes(text: string, keyword: string): boolean {\n  return text.includes(keyword);\n}\n\n/** Score 0\u2013100 for ranking auto-approved catalog entries. */\nexport function scoreRelevance(input: RelevanceInput): number {\n  let score = 20;\n\n  score += Math.min(25, input.gatekeeper.positiveMatches.length * 4);\n  score -= Math.min(15, input.gatekeeper.negativeMatches.length * 5);\n  if (input.scopeBoost) score += input.scopeBoost;\n\n  const text = `${input.title} ${input.description} ${(input.tags ?? []).join(\" \")}`.toLowerCase();\n\n  score += scoreDeerContentMetadata({\n    title: input.title,\n    description: input.description,\n    tags: input.tags,\n    species: input.species,\n    durationSeconds: input.durationSeconds,\n  });\n\n  const tier = classifyContentTopicTier(text);\n  if (tier === \"whitetail\") score += 12;\n  else if (tier === \"deer\") score += 8;\n  else if (tier === \"big_game\" || tier === \"antelope\") score += 4;\n  else if (tier === \"fishing\") score -= 8;\n\n  if (isDeerHuntingContent(text)) score += 6;\n\n  for (const keyword of DOCUMENTARY_QUALITY_KEYWORDS) {\n    if (textIncludes(text, keyword)) score += 6;\n  }\n  for (const keyword of HUNT_FISH_CORE_KEYWORDS) {\n    if (textIncludes(text, keyword)) score += 3;\n  }\n  for (const keyword of CALLING_CENTRIC_KEYWORDS) {\n    if (textIncludes(text, keyword)) score -= 15;\n  }\n\n  const views = input.viewCount ?? 0;\n  if (views >= 1_000_000) score += 25;\n  else if (views >= 100_000) score += 18;\n  else if (views >= 10_000) score += 12;\n  else if (views >= 1_000) score += 6;\n\n  const likes = input.likeCount ?? 0;\n  if (likes >= 10_000) score += 10;\n  else if (likes >= 1_000) score += 6;\n  else if (likes >= 100) score += 3;\n\n  const textLen = text.trim().length;\n  if (textLen >= 80) score += 5;\n\n  return Math.max(0, Math.min(100, Math.round(score)));\n}\n\nexport function minRelevanceThreshold(): number {\n  const raw = parseInt(process.env.INGESTION_MIN_RELEVANCE_SCORE ?? \"45\", 10);\n  return Number.isFinite(raw) ? Math.min(90, Math.max(20, raw)) : 45;\n}\n\n/** Slightly lower bar for deer scopes so authentic hunt footage clears more often. */\nexport function minRelevanceThresholdForScope(scopeKey: string): number {\n  const base = minRelevanceThreshold();\n  if (/deer|whitetail|priority_deer|biggame|antelope/i.test(scopeKey)) {\n    return Math.max(20, base - 5);\n  }\n  if (/fish|offshore|bass|fly_fishing|kayak|saltwater/i.test(scopeKey)) {\n    return Math.min(90, base + 5);\n  }\n  return base;\n}\n", "import { runHeuristics } from \"../../routes/feed\";\nimport {\n  auditIngestionContent,\n  buildIngestionAuditText,\n  classifyIngestionCategory,\n} from \"./contentGatekeeper\";\nimport { scoreRelevance, minRelevanceThreshold } from \"./relevanceScorer\";\nimport type { CatalogVideoCandidate } from \"./types\";\nimport type { ScrapedInstagramVideo } from \"../instagramScraper\";\nimport { isInstagramCdnMp4 } from \"./instagramPlayback\";\n\nexport function buildInstagramReelWatchUrl(shortcode: string): string {\n  return `https://www.instagram.com/reel/${shortcode}/`;\n}\n\nexport function buildInstagramReelEmbedUrl(shortcode: string): string {\n  return `https://www.instagram.com/reel/${shortcode}/embed`;\n}\n\nfunction extractHashtags(text: string): string[] {\n  const tags = new Set<string>([\"instagram\"]);\n  for (const match of text.matchAll(/#([a-zA-Z0-9_]+)/g)) {\n    if (match[1]) tags.add(match[1].toLowerCase());\n  }\n  return [...tags].slice(0, 20);\n}\n\n/** Convert scraped Instagram reel into a feed-ready catalog candidate. */\nexport function buildInstagramCatalogCandidate(\n  item: ScrapedInstagramVideo,\n  hashtag: string,\n  ingestionSource: string,\n  options?: { scopeBoost?: number },\n): CatalogVideoCandidate | null {\n  const auditText = buildIngestionAuditText([item.caption, `#${hashtag}`, hashtag]);\n  const gatekeeper = auditIngestionContent(auditText);\n  if (!gatekeeper.valid) return null;\n\n  const title = (item.caption?.trim() || `Instagram reel ${item.shortcode ?? item.sourceVideoId}`).slice(0, 200);\n  const description = (item.caption?.trim() || title).slice(0, 1000);\n  const relevanceScore = scoreRelevance({\n    title,\n    description,\n    gatekeeper,\n    scopeBoost: options?.scopeBoost,\n  });\n  if (relevanceScore < minRelevanceThreshold()) return null;\n\n  const handle = item.creatorUsername\n    ? item.creatorUsername.startsWith(\"@\")\n      ? item.creatorUsername\n      : `@${item.creatorUsername}`\n    : \"@instagram\";\n  const creator = handle.replace(/^@/, \"\") || \"Instagram\";\n  const h = runHeuristics(auditText);\n\n  const shortcode = item.shortcode?.trim() || null;\n  const cdnUrl = isInstagramCdnMp4(item.videoUrl) ? item.videoUrl : null;\n  const watchUrl = shortcode ? buildInstagramReelWatchUrl(shortcode) : item.videoUrl;\n  const embedUrl = shortcode ? buildInstagramReelEmbedUrl(shortcode) : null;\n  const playbackMethod = cdnUrl ? \"native\" : shortcode ? \"embed\" : \"native\";\n\n  return {\n    sourcePlatform: \"instagram\",\n    sourceVideoId: shortcode ?? item.sourceVideoId,\n    title,\n    description,\n    videoUrl: cdnUrl ?? watchUrl,\n    embedUrl: embedUrl ?? watchUrl,\n    thumbnailUrl: item.thumbnailUrl,\n    creator,\n    creatorHandle: handle,\n    publishedAt: null,\n    tags: extractHashtags(auditText),\n    category: classifyIngestionCategory(auditText),\n    viewCount: null,\n    externalLikeCount: null,\n    relevanceScore,\n    ingestionSource,\n    rightsMetadata: {\n      playbackMethod,\n      platform: \"instagram\",\n      attribution: creator,\n      embeddable: Boolean(shortcode),\n      license: \"platform_terms\",\n      cdnFallbackUrl: cdnUrl,\n      watchUrl: shortcode ? watchUrl : null,\n    },\n    species: h.species ?? null,\n    locationState: h.locationState ?? null,\n    weightSize: h.weight ?? null,\n  };\n}\n", "function pickString(...values: unknown[]): string | null {\n  for (const value of values) {\n    if (typeof value === \"string\" && value.trim()) return value.trim();\n  }\n  return null;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n  return value && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : null;\n}\n\n/** Extract MP4/watch URL from Instagram RapidAPI JSON payloads. */\nexport function extractInstagramVideoUrlFromPayload(\n  payload: Record<string, unknown>,\n): string | null {\n  const direct = pickString(payload.video_url, payload.videoUrl);\n  if (direct?.startsWith(\"http\")) return direct;\n\n  const versions = payload.video_versions;\n  if (Array.isArray(versions) && versions.length > 0) {\n    const first = asRecord(versions[0]);\n    const url = pickString(first?.url);\n    if (url) return url;\n  }\n\n  const data = asRecord(payload.data);\n  if (data) {\n    const nested = extractInstagramVideoUrlFromPayload(data);\n    if (nested) return nested;\n  }\n\n  return null;\n}\n", "import { db, userVideosTable } from \"@workspace/db\";\nimport { eq } from \"drizzle-orm\";\nimport { rapidApiKey, rapidApiRequest } from \"../rapidapi/client.js\";\nimport { buildInstagramReelEmbedUrl, buildInstagramReelWatchUrl } from \"../ingestion/instagramProvider.js\";\nimport { isInstagramCdnMp4 } from \"../ingestion/instagramPlayback.js\";\nimport { extractInstagramVideoUrlFromPayload } from \"./instagramMediaPayload.js\";\n\nfunction stableInstagramHost(): string {\n  return process.env.RAPIDAPI_INSTAGRAM_HOST?.trim() || \"instagram-scraper-stable-api.p.rapidapi.com\";\n}\n\n/** Fetch a fresh signed CDN MP4 for an Instagram shortcode via RapidAPI stable scraper. */\nexport async function fetchFreshInstagramCdnUrl(shortcode: string): Promise<string | null> {\n  const code = shortcode.trim();\n  if (!code) return null;\n\n  const host = stableInstagramHost();\n  const params = new URLSearchParams({\n    reel_post_code_or_url: buildInstagramReelWatchUrl(code),\n    type: \"reel\",\n  });\n\n  try {\n    rapidApiKey();\n  } catch {\n    return null;\n  }\n\n  const res = await fetch(`https://${host}/get_media_data.php?${params}`, {\n    headers: {\n      \"x-rapidapi-key\": process.env.RAPIDAPI_KEY!.trim(),\n      \"x-rapidapi-host\": host,\n    },\n  });\n\n  if (!res.ok) return null;\n\n  const data = (await res.json()) as Record<string, unknown>;\n  const url = extractInstagramVideoUrlFromPayload(data);\n  return url && isInstagramCdnMp4(url) ? url : null;\n}\n\n/** Fast API fallback when stable host fails \u2014 requires numeric media pk. */\nexport async function fetchFreshInstagramCdnByMediaId(mediaId: string): Promise<string | null> {\n  try {\n    const data = await rapidApiRequest<Record<string, unknown>>({\n      host:\n        process.env.RAPIDAPI_INSTAGRAM_FAST_HOST?.trim() ||\n        \"instagram-api-fast-reliable-data-scraper.p.rapidapi.com\",\n      path: \"/media\",\n      params: { id: mediaId },\n    });\n    const url = extractInstagramVideoUrlFromPayload(data);\n    return url && isInstagramCdnMp4(url) ? url : null;\n  } catch {\n    return null;\n  }\n}\n\nexport type RefreshInstagramResult =\n  | { ok: true; videoUrl: string; refreshed: boolean }\n  | { ok: false; reason: string };\n\n/** Refresh stored Instagram playback URL when CDN signature may have expired. */\nexport async function refreshInstagramVideoPlayback(videoId: number): Promise<RefreshInstagramResult> {\n  const [row] = await db\n    .select({\n      id: userVideosTable.id,\n      videoUrl: userVideosTable.videoUrl,\n      sourceVideoId: userVideosTable.sourceVideoId,\n      embedUrl: userVideosTable.embedUrl,\n      rightsMetadata: userVideosTable.rightsMetadata,\n    })\n    .from(userVideosTable)\n    .where(eq(userVideosTable.id, videoId))\n    .limit(1);\n\n  if (!row?.sourceVideoId) {\n    return { ok: false, reason: \"missing_shortcode\" };\n  }\n\n  const shortcode = row.sourceVideoId;\n  const meta = (row.rightsMetadata as Record<string, unknown> | null) ?? {};\n  const mediaPk = typeof meta.mediaPk === \"string\" ? meta.mediaPk : null;\n\n  let fresh =\n    (await fetchFreshInstagramCdnUrl(shortcode)) ??\n    (mediaPk ? await fetchFreshInstagramCdnByMediaId(mediaPk) : null);\n\n  if (!fresh) {\n    const existing = row.videoUrl?.trim() ?? \"\";\n    const cdnFallback =\n      typeof meta.cdnFallbackUrl === \"string\" ? meta.cdnFallbackUrl.trim() : \"\";\n    const fallback = isInstagramCdnMp4(existing)\n      ? existing\n      : isInstagramCdnMp4(cdnFallback)\n        ? cdnFallback\n        : null;\n    if (fallback) {\n      return { ok: true, videoUrl: fallback, refreshed: false };\n    }\n    return { ok: false, reason: \"cdn_refresh_failed\" };\n  }\n\n  const rightsMetadata = {\n    ...meta,\n    cdnFallbackUrl: fresh,\n    playbackMethod: \"native\",\n    watchUrl: buildInstagramReelWatchUrl(shortcode),\n  };\n\n  await db\n    .update(userVideosTable)\n    .set({\n      videoUrl: fresh,\n      embedUrl: row.embedUrl || buildInstagramReelEmbedUrl(shortcode),\n      rightsMetadata,\n      retrievedAt: new Date(),\n    })\n    .where(eq(userVideosTable.id, videoId));\n\n  return { ok: true, videoUrl: fresh, refreshed: true };\n}\n", "const TIKTOK_HOSTS = new Set([\"tiktok.com\", \"www.tiktok.com\", \"m.tiktok.com\", \"vm.tiktok.com\"]);\n\nexport function extractTikTokVideoId(url: string): string | null {\n  const trimmed = url.trim();\n  if (!trimmed) return null;\n\n  const videoMatch =\n    trimmed.match(/tiktok\\.com\\/@[^/]+\\/video\\/(\\d+)/i) ??\n    trimmed.match(/tiktok\\.com\\/embed\\/v2\\/(\\d+)/i);\n  if (videoMatch?.[1]) return videoMatch[1];\n\n  try {\n    const parsed = new URL(trimmed.startsWith(\"http\") ? trimmed : `https://${trimmed}`);\n    const host = parsed.hostname.toLowerCase().replace(/^www\\./, \"\");\n    if (host === \"vm.tiktok.com\") {\n      const shortCode = parsed.pathname.replace(/^\\//, \"\").split(\"/\")[0];\n      return shortCode && /^\\d+$/.test(shortCode) ? shortCode : null;\n    }\n    if (!TIKTOK_HOSTS.has(parsed.hostname.toLowerCase())) return null;\n    const embedMatch = parsed.pathname.match(/\\/embed\\/v2\\/(\\d+)/);\n    if (embedMatch?.[1]) return embedMatch[1];\n  } catch {\n    return null;\n  }\n\n  return null;\n}\n\nexport function buildTikTokWatchUrl(videoId: string, authorHandle?: string | null): string {\n  const handle = authorHandle?.replace(/^@/, \"\") ?? \"user\";\n  return `https://www.tiktok.com/@${handle}/video/${videoId}`;\n}\n\nexport function buildTikTokEmbedUrl(videoId: string): string {\n  return `https://www.tiktok.com/embed/v2/${videoId}`;\n}\n\n/** Resolve vm.tiktok.com and other redirects to a canonical watch URL. */\nexport async function resolveTikTokCanonicalUrl(rawUrl: string): Promise<string> {\n  const trimmed = rawUrl.trim();\n  if (!trimmed) return trimmed;\n\n  let url = trimmed.startsWith(\"http\") ? trimmed : `https://${trimmed}`;\n  const directId = extractTikTokVideoId(url);\n  if (directId && url.includes(\"/video/\")) return url;\n\n  try {\n    const ctrl = new AbortController();\n    const timer = setTimeout(() => ctrl.abort(), 10_000);\n    try {\n      const res = await fetch(url, {\n        method: \"GET\",\n        redirect: \"follow\",\n        signal: ctrl.signal,\n        headers: {\n          \"User-Agent\":\n            \"Mozilla/5.0 (compatible; HookNBoneBot/1.0; +https://hooknbone.com)\",\n          Accept: \"text/html,application/xhtml+xml\",\n        },\n      });\n      const finalUrl = res.url || url;\n      if (extractTikTokVideoId(finalUrl)) return finalUrl;\n\n      const html = await res.text().catch(() => \"\");\n      const canonical = html.match(/<link[^>]+rel=[\"']canonical[\"'][^>]+href=[\"']([^\"']+)[\"']/i)?.[1];\n      if (canonical && extractTikTokVideoId(canonical)) return canonical;\n\n      const ogUrl = html.match(/property=[\"']og:url[\"'][^>]+content=[\"']([^\"']+)[\"']/i)?.[1];\n      if (ogUrl && extractTikTokVideoId(ogUrl)) return ogUrl;\n    } finally {\n      clearTimeout(timer);\n    }\n  } catch {\n    /* fall through */\n  }\n\n  return url;\n}\n\nexport function isTikTokUrl(url: string): boolean {\n  const lower = url.toLowerCase();\n  return lower.includes(\"tiktok.com\") || lower.includes(\"vm.tiktok.com\");\n}\n\n/** True for www.tiktok.com watch/embed pages \u2014 not CDN MP4 hosts (v16-webapp-prime.us.tiktok.com). */\nexport function isTikTokWatchPageUrl(url: string): boolean {\n  try {\n    const parsed = new URL(url.trim());\n    if (!TIKTOK_HOSTS.has(parsed.hostname.toLowerCase())) return false;\n    return Boolean(extractTikTokVideoId(url));\n  } catch {\n    return false;\n  }\n}\n", "import {\n  CopyObjectCommand,\n  DeleteObjectCommand,\n  GetObjectCommand,\n  HeadObjectCommand,\n  PutObjectCommand,\n  S3Client,\n} from \"@aws-sdk/client-s3\";\nimport { getSignedUrl } from \"@aws-sdk/s3-request-presigner\";\nimport { Readable } from \"stream\";\n\nlet r2Client: S3Client | null = null;\n\nexport function getR2Client(): S3Client {\n  if (!r2Client) {\n    const endpoint = process.env.R2_ENDPOINT;\n    const accessKeyId = process.env.R2_ACCESS_KEY_ID;\n    const secretAccessKey = process.env.R2_SECRET_ACCESS_KEY;\n    if (!endpoint || !accessKeyId || !secretAccessKey) {\n      throw new Error(\n        \"R2_ENDPOINT, R2_ACCESS_KEY_ID, and R2_SECRET_ACCESS_KEY must be set\",\n      );\n    }\n    r2Client = new S3Client({\n      region: \"auto\",\n      endpoint,\n      credentials: { accessKeyId, secretAccessKey },\n    });\n  }\n  return r2Client;\n}\n\nexport function getR2Bucket(): string {\n  const bucket = process.env.R2_BUCKET?.trim();\n  if (!bucket) throw new Error(\"R2_BUCKET must be set\");\n  return bucket;\n}\n\n/** Prefix inside the bucket for private uploads/exports (legacy GCS dir supported). */\nexport function getPrivatePrefix(): string {\n  const dir = process.env.PRIVATE_OBJECT_DIR?.trim();\n  if (!dir) return \"private\";\n  if (dir.startsWith(\"/\")) {\n    const parts = dir.split(\"/\").filter(Boolean);\n    if (parts.length >= 2) return parts.slice(1).join(\"/\");\n    return parts[0] ?? \"private\";\n  }\n  return dir.replace(/\\/$/, \"\");\n}\n\nexport function getPublicPrefixes(): string[] {\n  const pathsStr = process.env.PUBLIC_OBJECT_SEARCH_PATHS || \"public\";\n  return [\n    ...new Set(\n      pathsStr\n        .split(\",\")\n        .map((p) => p.trim())\n        .filter((p) => p.length > 0),\n    ),\n  ];\n}\n\nexport function privateObjectKey(relativePath: string): string {\n  const rel = relativePath.replace(/^\\/+/, \"\");\n  return `${getPrivatePrefix()}/${rel}`;\n}\n\nexport function publicObjectKey(prefix: string, filePath: string): string {\n  const rel = filePath.replace(/^\\/+/, \"\");\n  const base = prefix.replace(/\\/$/, \"\");\n  return `${base}/${rel}`;\n}\n\nexport interface StorageObjectHandle {\n  bucket: string;\n  key: string;\n  /** Alias for `key` (GCS File.name compatibility). */\n  name: string;\n}\n\nexport function toHandle(key: string): StorageObjectHandle {\n  return { bucket: getR2Bucket(), key, name: key };\n}\n\nexport async function r2ObjectExists(key: string): Promise<boolean> {\n  try {\n    await getR2Client().send(\n      new HeadObjectCommand({ Bucket: getR2Bucket(), Key: key }),\n    );\n    return true;\n  } catch (err: unknown) {\n    const code = (err as { name?: string })?.name;\n    if (code === \"NotFound\" || code === \"NoSuchKey\") return false;\n    throw err;\n  }\n}\n\nexport async function r2PutObject(\n  key: string,\n  body: Buffer,\n  contentType: string,\n  metadata?: Record<string, string>,\n): Promise<void> {\n  await getR2Client().send(\n    new PutObjectCommand({\n      Bucket: getR2Bucket(),\n      Key: key,\n      Body: body,\n      ContentType: contentType,\n      Metadata: metadata,\n    }),\n  );\n}\n\nexport async function r2GetObjectStream(\n  key: string,\n  options?: { range?: string },\n): Promise<{\n  stream: NodeJS.ReadableStream;\n  contentLength: number | null;\n  contentType: string;\n  metadata: Record<string, string> | undefined;\n  contentRange?: string;\n  statusCode: number;\n}> {\n  const out = await getR2Client().send(\n    new GetObjectCommand({\n      Bucket: getR2Bucket(),\n      Key: key,\n      ...(options?.range ? { Range: options.range } : {}),\n    }),\n  );\n  if (!out.Body) throw new Error(`Empty object body for key ${key}`);\n  const stream =\n    out.Body instanceof Readable\n      ? out.Body\n      : Readable.fromWeb(out.Body as ReadableStream);\n  return {\n    stream,\n    contentLength: out.ContentLength ?? null,\n    contentType: out.ContentType ?? \"application/octet-stream\",\n    metadata: out.Metadata,\n    contentRange: out.ContentRange,\n    statusCode: options?.range ? 206 : 200,\n  };\n}\n\nexport async function r2DeleteObject(key: string): Promise<void> {\n  await getR2Client().send(\n    new DeleteObjectCommand({ Bucket: getR2Bucket(), Key: key }),\n  );\n}\n\nexport async function r2HeadMetadata(key: string): Promise<Record<string, string>> {\n  const out = await getR2Client().send(\n    new HeadObjectCommand({ Bucket: getR2Bucket(), Key: key }),\n  );\n  return out.Metadata ?? {};\n}\n\nexport async function r2ReplaceMetadata(\n  key: string,\n  metadata: Record<string, string>,\n): Promise<void> {\n  const bucket = getR2Bucket();\n  await getR2Client().send(\n    new CopyObjectCommand({\n      Bucket: bucket,\n      Key: key,\n      CopySource: `${bucket}/${encodeURIComponent(key).replace(/%2F/g, \"/\")}`,\n      Metadata: metadata,\n      MetadataDirective: \"REPLACE\",\n    }),\n  );\n}\n\nexport async function r2PresignUrl(\n  key: string,\n  method: \"GET\" | \"PUT\",\n  ttlSec: number,\n  contentType?: string,\n): Promise<string> {\n  const command =\n    method === \"PUT\"\n      ? new PutObjectCommand({\n          Bucket: getR2Bucket(),\n          Key: key,\n          ...(contentType ? { ContentType: contentType } : {}),\n        })\n      : new GetObjectCommand({ Bucket: getR2Bucket(), Key: key });\n  return getSignedUrl(getR2Client(), command, { expiresIn: ttlSec });\n}\n\nexport function r2PublicUrl(key: string): string | null {\n  const base = process.env.R2_PUBLIC_BASE_URL?.trim().replace(/\\/$/, \"\");\n  if (!base) return null;\n  return `${base}/${key}`;\n}\n", "import { isNativePlaybackUrl } from \"./feedPlayback.js\";\nimport { isTikTokCdnUrl } from \"./tiktokPlayback.js\";\n\nexport type UrlValidationResult = {\n  ok: boolean;\n  status?: number;\n  contentType?: string | null;\n  reason?: string;\n};\n\n/** True when buffer bytes look like MP4/MOV/WebM \u2014 not JPEG/PNG/HTML. */\nexport function isLikelyVideoBytes(buf: Uint8Array | Buffer): boolean {\n  if (buf.byteLength < 12) return false;\n  if (buf[0] === 0xff && buf[1] === 0xd8) return false;\n  if (buf[0] === 0x89 && buf[1] === 0x50 && buf[2] === 0x4e && buf[3] === 0x47) return false;\n  if (buf[0] === 0x3c) return false;\n  const box = buf.slice(4, 8).toString();\n  if (box === \"ftyp\" || box === \"moov\" || box === \"mdat\") return true;\n  if (buf[0] === 0x1a && buf[1] === 0x45 && buf[2] === 0xdf && buf[3] === 0xa3) return true;\n  return false;\n}\n\nfunction upstreamHeadersForValidation(url: string): Record<string, string> {\n  const base = {\n    \"User-Agent\":\n      \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36\",\n    Range: \"bytes=0-1023\",\n  };\n  if (isTikTokCdnUrl(url) || url.includes(\"tiktok\")) {\n    return { ...base, Referer: \"https://www.tiktok.com/\" };\n  }\n  if (url.includes(\"instagram\") || url.includes(\"cdninstagram\")) {\n    return { ...base, Referer: \"https://www.instagram.com/\" };\n  }\n  return base;\n}\n\n/** Lightweight reachability check for direct media URLs (CDN MP4, uploads). */\nexport async function validateDirectVideoUrl(\n  url: string,\n  timeoutMs = 12_000,\n): Promise<UrlValidationResult> {\n  if (!url?.trim()) return { ok: false, reason: \"empty_url\" };\n  if (!isNativePlaybackUrl(url)) {\n    return { ok: true, reason: \"not_direct_media\" };\n  }\n\n  const ctrl = new AbortController();\n  const timer = setTimeout(() => ctrl.abort(), timeoutMs);\n\n  try {\n    const res = await fetch(url, {\n      method: \"GET\",\n      headers: upstreamHeadersForValidation(url),\n      redirect: \"follow\",\n      signal: ctrl.signal,\n    });\n\n    const contentType = res.headers.get(\"content-type\");\n    if (contentType?.startsWith(\"image/\") || contentType?.includes(\"text/html\")) {\n      return { ok: false, status: res.status, contentType, reason: \"image_content_type\" };\n    }\n\n    const buf = Buffer.from(await res.arrayBuffer());\n    if (!isLikelyVideoBytes(buf)) {\n      return {\n        ok: false,\n        status: res.status,\n        contentType,\n        reason: buf[0] === 0x3c ? \"html_response\" : \"not_video_bytes\",\n      };\n    }\n\n    const ok = res.ok || res.status === 206;\n\n    return {\n      ok,\n      status: res.status,\n      contentType,\n      reason: ok ? undefined : `http_${res.status}`,\n    };\n  } catch (err) {\n    const message = err instanceof Error ? err.message : \"fetch_failed\";\n    return { ok: false, reason: message };\n  } finally {\n    clearTimeout(timer);\n  }\n}\n", "import { privateObjectKey, r2ObjectExists, r2PutObject } from \"../r2.js\";\nimport { isLikelyVideoBytes } from \"./validateVideoUrl.js\";\n\nconst MAX_MIRROR_BYTES = 100 * 1024 * 1024;\n\nfunction catalogRelativePath(platform: \"tiktok\" | \"instagram\", sourceVideoId: string): string {\n  const safeId = sourceVideoId.replace(/[^a-zA-Z0-9_-]/g, \"_\").slice(0, 80);\n  return `catalog/${platform}/${safeId}.mp4`;\n}\n\nexport function catalogObjectPath(platform: \"tiktok\" | \"instagram\", sourceVideoId: string): string {\n  return `/objects/${catalogRelativePath(platform, sourceVideoId)}`;\n}\n\nfunction upstreamHeaders(sourceUrl: string): Record<string, string> {\n  const base = {\n    \"User-Agent\":\n      \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36\",\n    Accept: \"video/mp4,video/*;q=0.9,*/*;q=0.8\",\n  };\n  if (sourceUrl.includes(\"tiktok\")) {\n    return { ...base, Referer: \"https://www.tiktok.com/\" };\n  }\n  if (sourceUrl.includes(\"instagram\")) {\n    return { ...base, Referer: \"https://www.instagram.com/\" };\n  }\n  return base;\n}\n\n/** Persist a remote social CDN MP4 in R2 for stable in-feed playback. */\nexport async function mirrorRemoteVideoToCatalog(input: {\n  sourceUrl: string;\n  platform: \"tiktok\" | \"instagram\";\n  sourceVideoId: string;\n}): Promise<string | null> {\n  const relative = catalogRelativePath(input.platform, input.sourceVideoId);\n  const key = privateObjectKey(relative);\n  const objectPath = `/objects/${relative}`;\n\n  try {\n    if (await r2ObjectExists(key)) return objectPath;\n\n    const ctrl = new AbortController();\n    const timer = setTimeout(() => ctrl.abort(), 45_000);\n    try {\n      const res = await fetch(input.sourceUrl, {\n        signal: ctrl.signal,\n        redirect: \"follow\",\n        headers: upstreamHeaders(input.sourceUrl),\n      });\n      if (!res.ok || !res.body) return null;\n\n      const buf = Buffer.from(await res.arrayBuffer());\n      if (buf.byteLength < 1024 || buf.byteLength > MAX_MIRROR_BYTES) return null;\n\n      const contentType = res.headers.get(\"content-type\") ?? \"\";\n      if (contentType.startsWith(\"image/\") || contentType.includes(\"text/html\")) return null;\n      if (!isLikelyVideoBytes(buf)) return null;\n\n      await r2PutObject(key, buf, \"video/mp4\", {\n        source: input.platform,\n        sourceVideoId: input.sourceVideoId,\n      });\n      return objectPath;\n    } finally {\n      clearTimeout(timer);\n    }\n  } catch {\n    return null;\n  }\n}\n", "import { db, userVideosTable } from \"@workspace/db\";\nimport { eq } from \"drizzle-orm\";\nimport { buildTikTokEmbedUrl, buildTikTokWatchUrl, isTikTokWatchPageUrl } from \"../ingestion/tiktokUrls.js\";\nimport { catalogObjectPath, mirrorRemoteVideoToCatalog } from \"./mirrorCatalogVideo.js\";\nimport {\n  fetchFreshTikTokCdnUrl,\n  isTikTokCdnUrl,\n  resolveTikTokPlaybackUrl,\n} from \"./tiktokPlayback.js\";\nimport { validateDirectVideoUrl } from \"./validateVideoUrl.js\";\n\nexport type RefreshTikTokResult =\n  | { ok: true; videoUrl: string; refreshed: boolean }\n  | { ok: false; reason: string };\n\nfunction isMirroredCatalogPath(url: string): boolean {\n  return url.startsWith(\"/objects/catalog/tiktok/\");\n}\n\nfunction isFreshTikTokNativePlayback(meta: Record<string, unknown>): boolean {\n  if (meta.playbackMethod !== \"native\") return false;\n  const retrieved = meta.retrievedAt;\n  if (!retrieved) return false;\n  const ageMs = Date.now() - new Date(String(retrieved)).getTime();\n  return ageMs >= 0 && ageMs < 4 * 60 * 60 * 1000;\n}\n\nasync function acceptPlayableCdnUrl(url: string): Promise<boolean> {\n  if (!isTikTokCdnUrl(url)) return false;\n  const validation = await validateDirectVideoUrl(url);\n  return validation.ok;\n}\n\n/** Refresh stored TikTok playback URL to a direct CDN MP4 when possible. */\nexport async function refreshTikTokVideoPlayback(\n  videoId: number,\n  options?: { force?: boolean },\n): Promise<RefreshTikTokResult> {\n  const [row] = await db\n    .select({\n      id: userVideosTable.id,\n      videoUrl: userVideosTable.videoUrl,\n      sourceVideoId: userVideosTable.sourceVideoId,\n      embedUrl: userVideosTable.embedUrl,\n      creatorHandle: userVideosTable.creatorHandle,\n      rightsMetadata: userVideosTable.rightsMetadata,\n    })\n    .from(userVideosTable)\n    .where(eq(userVideosTable.id, videoId))\n    .limit(1);\n\n  if (!row?.sourceVideoId) {\n    return { ok: false, reason: \"missing_video_id\" };\n  }\n\n  const meta = (row.rightsMetadata as Record<string, unknown> | null) ?? {};\n  const sourceVideoId = row.sourceVideoId.trim();\n\n  if (isMirroredCatalogPath(row.videoUrl)) {\n    return { ok: true, videoUrl: row.videoUrl, refreshed: false };\n  }\n\n  const expectedMirror = catalogObjectPath(\"tiktok\", sourceVideoId);\n  if (row.videoUrl === expectedMirror) {\n    return { ok: true, videoUrl: row.videoUrl, refreshed: false };\n  }\n\n  const current = resolveTikTokPlaybackUrl(row.videoUrl, meta);\n  if (\n    !options?.force &&\n    isTikTokCdnUrl(current) &&\n    isFreshTikTokNativePlayback(meta) &&\n    (await acceptPlayableCdnUrl(current))\n  ) {\n    return { ok: true, videoUrl: current, refreshed: false };\n  }\n\n  const watchUrl = resolveTikTokWatchUrl(meta, {\n    sourceVideoId,\n    creatorHandle: row.creatorHandle,\n  });\n\n  const fresh = await fetchFreshTikTokCdnUrl(watchUrl, sourceVideoId);\n  if (!fresh || !isTikTokCdnUrl(fresh) || !(await acceptPlayableCdnUrl(fresh))) {\n    return { ok: false, reason: \"cdn_refresh_failed\" };\n  }\n\n  const rightsMetadata = {\n    ...meta,\n    cdnFallbackUrl: fresh,\n    playbackMethod: \"native\",\n    mirrored: false,\n    watchUrl,\n    retrievedAt: new Date().toISOString(),\n  };\n\n  await db\n    .update(userVideosTable)\n    .set({\n      videoUrl: fresh,\n      embedUrl: row.embedUrl || buildTikTokEmbedUrl(sourceVideoId),\n      rightsMetadata,\n      retrievedAt: new Date(),\n    })\n    .where(eq(userVideosTable.id, videoId));\n\n  // Mirror to R2 in the background \u2014 don't block playback refresh on a full download.\n  void mirrorRemoteVideoToCatalog({\n    sourceUrl: fresh,\n    platform: \"tiktok\",\n    sourceVideoId,\n  })\n    .then(async (mirrored) => {\n      if (!mirrored) return;\n      await db\n        .update(userVideosTable)\n        .set({\n          videoUrl: mirrored,\n          rightsMetadata: { ...rightsMetadata, mirrored: true },\n          retrievedAt: new Date(),\n        })\n        .where(eq(userVideosTable.id, videoId));\n    })\n    .catch(() => undefined);\n\n  return { ok: true, videoUrl: fresh, refreshed: true };\n}\n\nfunction resolveTikTokWatchUrl(\n  meta: Record<string, unknown>,\n  row: { sourceVideoId: string; creatorHandle: string | null },\n): string {\n  const fromMeta = typeof meta.watchUrl === \"string\" ? meta.watchUrl.trim() : \"\";\n  if (fromMeta && isTikTokWatchPageUrl(fromMeta)) return fromMeta;\n  return buildTikTokWatchUrl(row.sourceVideoId, row.creatorHandle);\n}\n", "import type { StorageObjectHandle } from \"./r2\";\nimport { r2HeadMetadata, r2ObjectExists, r2ReplaceMetadata } from \"./r2\";\n\nconst ACL_POLICY_METADATA_KEY = \"custom-aclpolicy\";\n\nexport enum ObjectPermission {\n  READ = \"read\",\n  WRITE = \"write\",\n}\n\nexport interface ObjectAclPolicy {\n  owner: string;\n  visibility: \"public\" | \"private\";\n}\n\nexport async function setObjectAclPolicy(\n  objectFile: StorageObjectHandle,\n  aclPolicy: ObjectAclPolicy,\n): Promise<void> {\n  if (!(await r2ObjectExists(objectFile.key))) {\n    throw new Error(`Object not found: ${objectFile.key}`);\n  }\n  const existing = await r2HeadMetadata(objectFile.key);\n  await r2ReplaceMetadata(objectFile.key, {\n    ...existing,\n    [ACL_POLICY_METADATA_KEY]: JSON.stringify(aclPolicy),\n  });\n}\n\nexport async function getObjectAclPolicy(\n  objectFile: StorageObjectHandle,\n): Promise<ObjectAclPolicy | null> {\n  const metadata = await r2HeadMetadata(objectFile.key);\n  const raw = metadata[ACL_POLICY_METADATA_KEY];\n  if (!raw) return null;\n  return JSON.parse(raw) as ObjectAclPolicy;\n}\n\nexport async function canAccessObject({\n  userId,\n  objectFile,\n  requestedPermission,\n}: {\n  userId?: string;\n  objectFile: StorageObjectHandle;\n  requestedPermission: ObjectPermission;\n}): Promise<boolean> {\n  const aclPolicy = await getObjectAclPolicy(objectFile);\n  if (!aclPolicy) return false;\n  if (aclPolicy.visibility === \"public\" && requestedPermission === ObjectPermission.READ) {\n    return true;\n  }\n  if (!userId) return false;\n  return aclPolicy.owner === userId;\n}\n", "import { Readable } from \"stream\";\nimport { randomUUID } from \"crypto\";\nimport {\n  ObjectAclPolicy,\n  ObjectPermission,\n  canAccessObject,\n  getObjectAclPolicy,\n  setObjectAclPolicy,\n} from \"./objectAcl\";\nimport type { StorageObjectHandle } from \"./r2\";\nimport {\n  getPublicPrefixes,\n  getPrivatePrefix,\n  privateObjectKey,\n  publicObjectKey,\n  r2DeleteObject,\n  r2GetObjectStream,\n  r2ObjectExists,\n  r2PresignUrl,\n  r2PublicUrl,\n  r2PutObject,\n  toHandle,\n} from \"./r2\";\n\nexport type { StorageObjectHandle };\n\n/** @deprecated Use R2 via `./r2` \u2014 kept so legacy imports compile. */\nexport const objectStorageClient = {\n  bucket: () => getPrivatePrefix(),\n};\n\nexport class ObjectNotFoundError extends Error {\n  constructor() {\n    super(\"Object not found\");\n    this.name = \"ObjectNotFoundError\";\n    Object.setPrototypeOf(this, ObjectNotFoundError.prototype);\n  }\n}\n\nexport class ObjectStorageService {\n  getPublicObjectSearchPaths(): Array<string> {\n    return getPublicPrefixes();\n  }\n\n  getPrivateObjectDir(): string {\n    return getPrivatePrefix();\n  }\n\n  async searchPublicObject(filePath: string): Promise<StorageObjectHandle | null> {\n    for (const searchPath of this.getPublicObjectSearchPaths()) {\n      const key = publicObjectKey(searchPath, filePath);\n      if (await r2ObjectExists(key)) return toHandle(key);\n    }\n    return null;\n  }\n\n  async downloadObject(\n    file: StorageObjectHandle,\n    cacheTtlSec: number = 3600,\n  ): Promise<Response> {\n    const aclPolicy = await getObjectAclPolicy(file);\n    const isPublic = aclPolicy?.visibility === \"public\";\n    const { stream, contentLength, contentType } = await r2GetObjectStream(file.key);\n    const webStream = Readable.toWeb(stream as Readable) as ReadableStream;\n\n    const headers: Record<string, string> = {\n      \"Content-Type\": contentType,\n      \"Cache-Control\": `${isPublic ? \"public\" : \"private\"}, max-age=${cacheTtlSec}`,\n    };\n    if (contentLength != null) {\n      headers[\"Content-Length\"] = String(contentLength);\n    }\n\n    return new Response(webStream, { headers });\n  }\n\n  async getObjectEntityUploadURL(): Promise<string> {\n    const objectId = randomUUID();\n    const key = privateObjectKey(`uploads/${objectId}`);\n    return r2PresignUrl(key, \"PUT\", 900);\n  }\n\n  async getObjectEntityFile(objectPath: string): Promise<StorageObjectHandle> {\n    if (!objectPath.startsWith(\"/objects/\")) {\n      throw new ObjectNotFoundError();\n    }\n\n    const parts = objectPath.slice(1).split(\"/\");\n    if (parts.length < 2) {\n      throw new ObjectNotFoundError();\n    }\n\n    const entityId = parts.slice(1).join(\"/\");\n    const key = privateObjectKey(entityId);\n    if (!(await r2ObjectExists(key))) {\n      throw new ObjectNotFoundError();\n    }\n    return toHandle(key);\n  }\n\n  normalizeObjectEntityPath(rawPath: string): string {\n    const publicBase = process.env.R2_PUBLIC_BASE_URL?.trim().replace(/\\/$/, \"\");\n    if (publicBase && rawPath.startsWith(`${publicBase}/`)) {\n      const key = rawPath.slice(publicBase.length + 1);\n      const privatePrefix = `${getPrivatePrefix()}/`;\n      if (key.startsWith(privatePrefix)) {\n        return `/objects/${key.slice(privatePrefix.length)}`;\n      }\n    }\n\n    if (!rawPath.startsWith(\"https://storage.googleapis.com/\")) {\n      return rawPath;\n    }\n\n    const url = new URL(rawPath);\n    const rawObjectPath = url.pathname;\n    const objectEntityDir = `${getPrivatePrefix()}/`;\n    if (!rawObjectPath.startsWith(`/${objectEntityDir}`)) {\n      return rawObjectPath;\n    }\n    const entityId = rawObjectPath.slice(`/${objectEntityDir}`.length);\n    return `/objects/${entityId}`;\n  }\n\n  async trySetObjectEntityAclPolicy(\n    rawPath: string,\n    aclPolicy: ObjectAclPolicy,\n  ): Promise<string> {\n    const normalizedPath = this.normalizeObjectEntityPath(rawPath);\n    if (!normalizedPath.startsWith(\"/\")) {\n      return normalizedPath;\n    }\n\n    const objectFile = await this.getObjectEntityFile(normalizedPath);\n    await setObjectAclPolicy(objectFile, aclPolicy);\n    return normalizedPath;\n  }\n\n  async canAccessObjectEntity({\n    userId,\n    objectFile,\n    requestedPermission,\n  }: {\n    userId?: string;\n    objectFile: StorageObjectHandle;\n    requestedPermission?: ObjectPermission;\n  }): Promise<boolean> {\n    return canAccessObject({\n      userId,\n      objectFile,\n      requestedPermission: requestedPermission ?? ObjectPermission.READ,\n    });\n  }\n\n  async getObjectEntityDownloadURL(objectPath: string, ttlSec = 3600): Promise<string> {\n    const objectFile = await this.getObjectEntityFile(objectPath);\n    const publicUrl = r2PublicUrl(objectFile.key);\n    if (publicUrl) return publicUrl;\n    return r2PresignUrl(objectFile.key, \"GET\", ttlSec);\n  }\n\n  async uploadServerFile(\n    objectPath: string,\n    fileBuffer: Buffer,\n    contentType: string,\n  ): Promise<void> {\n    const key = privateObjectKey(objectPath);\n    await r2PutObject(key, fileBuffer, contentType);\n  }\n\n  getStorageObjectPath(subPath: string): string {\n    return `/objects/${subPath}`;\n  }\n\n  async deleteObjectEntity(objectPath: string): Promise<void> {\n    const objectFile = await this.getObjectEntityFile(objectPath);\n    await r2DeleteObject(objectFile.key);\n  }\n}\n", "import type { Request, Response } from \"express\";\nimport { getSessionUser } from \"./authMiddleware.js\";\nimport { ObjectNotFoundError, ObjectStorageService } from \"./objectStorage.js\";\nimport { r2GetObjectStream } from \"./r2.js\";\n\n/** Mirrored social catalog clips are safe to serve without per-user ACL. */\nexport function isPublicCatalogObjectPath(objectPath: string): boolean {\n  return objectPath.startsWith(\"/objects/catalog/\");\n}\n\nexport async function pipeObjectEntityToResponse(\n  objectPath: string,\n  req: Request,\n  res: Response,\n  options?: { cacheControl?: string },\n): Promise<void> {\n  const storage = new ObjectStorageService();\n  let objectFile;\n  try {\n    objectFile = await storage.getObjectEntityFile(objectPath);\n  } catch (err) {\n    if (err instanceof ObjectNotFoundError) {\n      res.status(404).json({ error: \"Object not found\" });\n      return;\n    }\n    throw err;\n  }\n\n  if (!isPublicCatalogObjectPath(objectPath)) {\n    const userId = getSessionUser(req)?.userId;\n    const allowed = await storage.canAccessObjectEntity({\n      userId,\n      objectFile,\n    });\n    if (!allowed) {\n      res.status(403).json({ error: \"Forbidden\" });\n      return;\n    }\n  }\n\n  const rangeHeader =\n    typeof req.headers.range === \"string\" ? req.headers.range : undefined;\n  const { stream, contentLength, contentType, contentRange, statusCode } =\n    await r2GetObjectStream(objectFile.key, rangeHeader ? { range: rangeHeader } : undefined);\n\n  res.status(statusCode);\n  const resolvedType =\n    contentType && contentType !== \"application/octet-stream\"\n      ? contentType\n      : objectPath.endsWith(\".mp4\")\n        ? \"video/mp4\"\n        : contentType;\n  res.setHeader(\"Content-Type\", resolvedType);\n  if (contentLength != null) res.setHeader(\"Content-Length\", String(contentLength));\n  if (contentRange) res.setHeader(\"Content-Range\", contentRange);\n  res.setHeader(\"Accept-Ranges\", \"bytes\");\n  res.setHeader(\"Cache-Control\", options?.cacheControl ?? \"public, max-age=3600\");\n  res.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n  res.setHeader(\"Cross-Origin-Resource-Policy\", \"cross-origin\");\n\n  stream.on(\"error\", (err) => {\n    req.log?.warn({ err, objectPath }, \"Object entity stream error\");\n    if (!res.headersSent) res.status(502).end();\n    else res.destroy(err as Error);\n  });\n  stream.pipe(res);\n}\n", "import { Readable } from \"node:stream\";\nimport type { Request, Response } from \"express\";\nimport { db, userVideosTable } from \"@workspace/db\";\nimport { eq } from \"drizzle-orm\";\nimport {\n  isNativePlaybackUrl,\n  resolveFeedPlaybackUrl,\n} from \"./feedPlayback.js\";\nimport { refreshInstagramVideoPlayback } from \"./refreshInstagramCdn.js\";\nimport { refreshTikTokVideoPlayback } from \"./refreshTikTokCdn.js\";\nimport { isTikTokCdnUrl } from \"./tiktokPlayback.js\";\nimport { isInstagramCdnMp4 } from \"../ingestion/instagramPlayback.js\";\nimport { pipeObjectEntityToResponse } from \"../streamObjectEntity.js\";\n\nfunction upstreamHeadersForUrl(upstream: string): Record<string, string> {\n  const base = {\n    \"User-Agent\":\n      \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36\",\n    Accept: \"video/mp4,video/*;q=0.9,application/vnd.apple.mpegurl,*/*;q=0.8\",\n  };\n\n  if (isTikTokCdnUrl(upstream) || upstream.includes(\"tiktok\")) {\n    return { ...base, Referer: \"https://www.tiktok.com/\" };\n  }\n  if (isInstagramCdnMp4(upstream) || upstream.includes(\"instagram\")) {\n    return { ...base, Referer: \"https://www.instagram.com/\" };\n  }\n  return base;\n}\n\nfunction parseDbClipId(raw: string): number | null {\n  const match = /^db-(\\d+)$/.exec(raw.trim());\n  if (!match?.[1]) return null;\n  const id = Number.parseInt(match[1], 10);\n  return Number.isFinite(id) && id > 0 ? id : null;\n}\n\ntype PlaybackRow = {\n  id: number;\n  videoUrl: string;\n  sourcePlatform: string | null;\n  rightsMetadata: Record<string, unknown> | null;\n  embedUrl: string | null;\n};\n\nasync function loadPlaybackRow(videoId: number): Promise<PlaybackRow | null> {\n  const [row] = await db\n    .select({\n      id: userVideosTable.id,\n      videoUrl: userVideosTable.videoUrl,\n      sourcePlatform: userVideosTable.sourcePlatform,\n      rightsMetadata: userVideosTable.rightsMetadata,\n      embedUrl: userVideosTable.embedUrl,\n    })\n    .from(userVideosTable)\n    .where(eq(userVideosTable.id, videoId))\n    .limit(1);\n\n  if (!row) return null;\n\n  return {\n    id: row.id,\n    videoUrl: row.videoUrl,\n    sourcePlatform: row.sourcePlatform,\n    rightsMetadata: (row.rightsMetadata as Record<string, unknown> | null) ?? null,\n    embedUrl: row.embedUrl,\n  };\n}\n\nasync function ensureNativeUpstream(row: PlaybackRow): Promise<string | null> {\n  if (row.videoUrl.startsWith(\"/objects/\")) {\n    return row.videoUrl;\n  }\n\n  let upstream = resolveFeedPlaybackUrl({\n    videoUrl: row.videoUrl,\n    sourcePlatform: row.sourcePlatform,\n    rightsMetadata: row.rightsMetadata,\n    embedUrl: row.embedUrl,\n  });\n\n  if (isNativePlaybackUrl(upstream)) return upstream;\n\n  if (row.sourcePlatform === \"instagram\") {\n    const refreshed = await refreshInstagramVideoPlayback(row.id);\n    if (refreshed.ok && isNativePlaybackUrl(refreshed.videoUrl)) {\n      return refreshed.videoUrl;\n    }\n    return null;\n  }\n\n  if (row.sourcePlatform === \"tiktok\") {\n    const refreshed = await refreshTikTokVideoPlayback(row.id, { force: true });\n    if (refreshed.ok && isNativePlaybackUrl(refreshed.videoUrl)) {\n      return refreshed.videoUrl;\n    }\n    return null;\n  }\n\n  return isNativePlaybackUrl(upstream) ? upstream : null;\n}\n\nasync function fetchUpstream(\n  upstream: string,\n  rangeHeader: string | undefined,\n): Promise<globalThis.Response> {\n  const headers: Record<string, string> = { ...upstreamHeadersForUrl(upstream) };\n  if (rangeHeader) headers.Range = rangeHeader;\n  return fetch(upstream, { headers, redirect: \"follow\" });\n}\n\n/** Stream catalog video bytes through the API (social CDN referrer + refresh). */\nexport async function streamFeedPlayback(\n  req: Request,\n  res: Response,\n  clipIdRaw: string,\n): Promise<void> {\n  const videoId = parseDbClipId(clipIdRaw);\n  if (!videoId) {\n    res.status(400).json({ error: \"Invalid clip id\" });\n    return;\n  }\n\n  const row = await loadPlaybackRow(videoId);\n  if (!row) {\n    res.status(404).json({ error: \"Clip not found\" });\n    return;\n  }\n\n  let upstream = await ensureNativeUpstream(row);\n  if (!upstream) {\n    res.status(404).json({ error: \"No native playback for clip\" });\n    return;\n  }\n\n  if (upstream.startsWith(\"/objects/\")) {\n    await pipeObjectEntityToResponse(upstream, req, res, {\n      cacheControl: \"private, max-age=3600\",\n    });\n    return;\n  }\n\n  const rangeHeader = req.headers.range;\n  let upstreamRes = await fetchUpstream(upstream, rangeHeader);\n\n  if (!upstreamRes.ok && (upstreamRes.status === 403 || upstreamRes.status === 404)) {\n    if (row.sourcePlatform === \"instagram\") {\n      const refreshed = await refreshInstagramVideoPlayback(videoId);\n      if (refreshed.ok && isNativePlaybackUrl(refreshed.videoUrl)) {\n        upstream = refreshed.videoUrl;\n        upstreamRes = await fetchUpstream(upstream, rangeHeader);\n      }\n    } else if (row.sourcePlatform === \"tiktok\") {\n      const refreshed = await refreshTikTokVideoPlayback(videoId, { force: true });\n      if (refreshed.ok && isNativePlaybackUrl(refreshed.videoUrl)) {\n        upstream = refreshed.videoUrl;\n        upstreamRes = await fetchUpstream(upstream, rangeHeader);\n      }\n    }\n  }\n\n  if (!upstreamRes.ok || !upstreamRes.body) {\n    res.status(upstreamRes.status === 200 ? 502 : upstreamRes.status).json({\n      error: \"Upstream playback unavailable\",\n    });\n    return;\n  }\n\n  res.status(upstreamRes.status);\n  const forward = [\"content-type\", \"content-length\", \"content-range\", \"accept-ranges\"] as const;\n  for (const key of forward) {\n    const value = upstreamRes.headers.get(key);\n    if (value) res.setHeader(key, value);\n  }\n  if (!res.getHeader(\"content-type\")) {\n    res.setHeader(\"Content-Type\", \"video/mp4\");\n  }\n  res.setHeader(\"Cache-Control\", \"private, max-age=120\");\n  res.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n  res.setHeader(\"Cross-Origin-Resource-Policy\", \"cross-origin\");\n\n  const nodeStream = Readable.fromWeb(upstreamRes.body as import(\"stream/web\").ReadableStream);\n  nodeStream.on(\"error\", (err) => {\n    req.log?.warn({ err, videoId }, \"Feed playback stream error\");\n    if (!res.headersSent) res.status(502).end();\n    else res.destroy(err);\n  });\n  nodeStream.pipe(res);\n}\n", "/** Normalize URLs and detect library duplicates (YouTube ID or canonical URL). */\n\nconst YT_HOSTS = new Set([\"youtube.com\", \"www.youtube.com\", \"m.youtube.com\", \"youtu.be\"]);\n\nexport function normalizeVideoUrl(url: string): string {\n  try {\n    const parsed = new URL(url.trim());\n    parsed.hash = \"\";\n    [\"utm_source\", \"utm_medium\", \"utm_campaign\", \"si\", \"feature\", \"t\"].forEach((param) =>\n      parsed.searchParams.delete(param),\n    );\n    parsed.hostname = parsed.hostname.toLowerCase().replace(/^www\\./, \"\");\n    return parsed.toString().toLowerCase();\n  } catch {\n    return url.trim().toLowerCase();\n  }\n}\n\nexport function extractYouTubeId(url: string): string | null {\n  let parsed: URL;\n  try {\n    parsed = new URL(url);\n  } catch {\n    return null;\n  }\n  const host = parsed.hostname.toLowerCase();\n  if (!YT_HOSTS.has(host)) return null;\n\n  if (host === \"youtu.be\") {\n    const id = parsed.pathname.slice(1, 12);\n    return id.length === 11 ? id : null;\n  }\n  const embedM = parsed.pathname.match(/\\/embed\\/([a-zA-Z0-9_-]{11})/);\n  if (embedM?.[1]) return embedM[1];\n  const shortsM = parsed.pathname.match(/\\/shorts\\/([a-zA-Z0-9_-]{11})/);\n  if (shortsM?.[1]) return shortsM[1];\n  const v = parsed.searchParams.get(\"v\");\n  if (v && /^[a-zA-Z0-9_-]{11}$/.test(v)) return v;\n  return null;\n}\n\nexport function duplicateKeyForUrl(url: string): string {\n  const ytId = extractYouTubeId(url);\n  if (ytId) return `yt:${ytId}`;\n  return `url:${normalizeVideoUrl(url)}`;\n}\n\nexport interface SkippedDuplicateUrl {\n  url: string;\n  existingId: number | null;\n  reason: \"already_in_library\" | \"duplicate_in_batch\";\n}\n\nexport interface FilterDuplicateUrlsResult {\n  newUrls: string[];\n  skipped: SkippedDuplicateUrl[];\n}\n\n/** Split incoming URLs into new vs duplicates against existing library keys. */\nexport function filterDuplicateUrls(\n  urls: string[],\n  existingKeys: Map<string, number>,\n): FilterDuplicateUrlsResult {\n  const newUrls: string[] = [];\n  const skipped: SkippedDuplicateUrl[] = [];\n  const batchKeys = new Set<string>();\n\n  for (const raw of urls) {\n    const url = raw.trim();\n    if (!url) continue;\n    const key = duplicateKeyForUrl(url);\n\n    if (batchKeys.has(key)) {\n      skipped.push({ url, existingId: null, reason: \"duplicate_in_batch\" });\n      continue;\n    }\n    batchKeys.add(key);\n\n    const existingId = existingKeys.get(key);\n    if (existingId != null) {\n      skipped.push({ url, existingId, reason: \"already_in_library\" });\n      continue;\n    }\n\n    newUrls.push(url);\n    existingKeys.set(key, -1);\n  }\n\n  return { newUrls, skipped };\n}\n\nexport function buildExistingUrlKeyMap(\n  rows: Array<{ id: number; videoUrl: string }>,\n): Map<string, number> {\n  const map = new Map<string, number>();\n  for (const row of rows) {\n    map.set(duplicateKeyForUrl(row.videoUrl), row.id);\n  }\n  return map;\n}\n\nexport function findExistingVideoByUrl(\n  videoUrl: string,\n  rows: Array<{ id: number; videoUrl: string }>,\n): { id: number; videoUrl: string } | null {\n  const key = duplicateKeyForUrl(videoUrl);\n  for (const row of rows) {\n    if (duplicateKeyForUrl(row.videoUrl) === key) return row;\n  }\n  return null;\n}\n", "/**\n * Per-platform feed visibility \u2014 data stays in user_videos; disabled platforms\n * are hidden from the public feed only.\n */\n\nimport { adminCacheTable, db, userVideosTable } from \"@workspace/db\";\nimport { eq, sql } from \"drizzle-orm\";\n\nexport const FEED_PLATFORM_SETTINGS_KEY = \"feed_platform_visibility\";\n\nexport type FeedPlatformKey =\n  | \"youtube\"\n  | \"tiktok\"\n  | \"instagram\"\n  | \"vimeo\"\n  | \"upload\"\n  | \"other\";\n\nexport type FeedPlatformSetting = {\n  enabled: boolean;\n  updatedAt?: string;\n  updatedBy?: string;\n};\n\nexport type FeedPlatformSettingsMap = Record<FeedPlatformKey, FeedPlatformSetting>;\n\nfunction envBool(name: string, fallback: boolean): boolean {\n  const raw = process.env[name]?.trim().toLowerCase();\n  if (raw === \"true\" || raw === \"1\") return true;\n  if (raw === \"false\" || raw === \"0\") return false;\n  return fallback;\n}\n\n/** Env defaults \u2014 TikTok/Instagram off until native playback is reliable. */\nexport function defaultFeedPlatformSettings(): FeedPlatformSettingsMap {\n  return {\n    youtube: { enabled: envBool(\"FEED_PLATFORM_YOUTUBE_ENABLED\", true) },\n    tiktok: { enabled: envBool(\"FEED_PLATFORM_TIKTOK_ENABLED\", false) },\n    instagram: { enabled: envBool(\"FEED_PLATFORM_INSTAGRAM_ENABLED\", false) },\n    vimeo: { enabled: envBool(\"FEED_PLATFORM_VIMEO_ENABLED\", true) },\n    upload: { enabled: envBool(\"FEED_PLATFORM_UPLOAD_ENABLED\", true) },\n    other: { enabled: envBool(\"FEED_PLATFORM_OTHER_ENABLED\", true) },\n  };\n}\n\nexport function normalizeFeedPlatform(sourcePlatform: string | null | undefined): FeedPlatformKey {\n  const p = sourcePlatform?.trim().toLowerCase();\n  if (p === \"youtube\" || p === \"yt\") return \"youtube\";\n  if (p === \"tiktok\") return \"tiktok\";\n  if (p === \"instagram\" || p === \"ig\") return \"instagram\";\n  if (p === \"vimeo\") return \"vimeo\";\n  if (!p || p === \"native\" || p === \"upload\" || p === \"direct\" || p === \"r2\" || p === \"supabase\") {\n    return \"upload\";\n  }\n  return \"other\";\n}\n\nasync function readCache(): Promise<FeedPlatformSettingsMap | null> {\n  const [row] = await db\n    .select({ dataJson: adminCacheTable.dataJson })\n    .from(adminCacheTable)\n    .where(eq(adminCacheTable.key, FEED_PLATFORM_SETTINGS_KEY))\n    .limit(1);\n  if (!row?.dataJson) return null;\n  try {\n    return JSON.parse(row.dataJson) as FeedPlatformSettingsMap;\n  } catch {\n    return null;\n  }\n}\n\nexport async function getFeedPlatformSettings(): Promise<FeedPlatformSettingsMap> {\n  const cached = await readCache();\n  const defaults = defaultFeedPlatformSettings();\n  if (!cached) return defaults;\n  return { ...defaults, ...cached };\n}\n\nexport function isPlatformEnabledInSettings(\n  sourcePlatform: string | null | undefined,\n  settings: FeedPlatformSettingsMap,\n): boolean {\n  const key = normalizeFeedPlatform(sourcePlatform);\n  return settings[key]?.enabled ?? true;\n}\n\nexport async function isFeedPlatformEnabled(sourcePlatform: string | null | undefined): Promise<boolean> {\n  const settings = await getFeedPlatformSettings();\n  return isPlatformEnabledInSettings(sourcePlatform, settings);\n}\n\n/** When true, reels feed uses only DB catalog \u2014 no live YouTube Data API search merge. */\nexport function feedUsesDbCatalogOnly(): boolean {\n  const raw = process.env.FEED_DB_CATALOG_ONLY?.trim().toLowerCase();\n  if (raw === \"false\" || raw === \"0\") return false;\n  if (raw === \"true\" || raw === \"1\") return true;\n  const catalog = process.env.INGESTION_YOUTUBE_CATALOG_MODE?.trim().toLowerCase();\n  return catalog !== \"false\" && catalog !== \"0\";\n}\n\nexport async function saveFeedPlatformSettings(\n  patch: Partial<Record<FeedPlatformKey, { enabled: boolean }>>,\n  updatedBy?: string,\n): Promise<FeedPlatformSettingsMap> {\n  const current = await getFeedPlatformSettings();\n  const now = new Date().toISOString();\n  const next: FeedPlatformSettingsMap = { ...current };\n\n  for (const [key, value] of Object.entries(patch) as [FeedPlatformKey, { enabled: boolean }][]) {\n    if (!value || typeof value.enabled !== \"boolean\") continue;\n    next[key] = { enabled: value.enabled, updatedAt: now, updatedBy };\n  }\n\n  await db\n    .insert(adminCacheTable)\n    .values({\n      key: FEED_PLATFORM_SETTINGS_KEY,\n      dataJson: JSON.stringify(next),\n      fetchedAt: new Date(),\n      ttlMs: 0,\n    })\n    .onConflictDoUpdate({\n      target: adminCacheTable.key,\n      set: {\n        dataJson: JSON.stringify(next),\n        fetchedAt: new Date(),\n      },\n    });\n\n  return next;\n}\n\n/** Count preserved videos per platform (for admin dashboard). */\nexport async function countVideosByPlatform(): Promise<Record<string, number>> {\n  const rows = await db\n    .select({\n      platform: userVideosTable.sourcePlatform,\n      count: sql<number>`count(*)::int`,\n    })\n    .from(userVideosTable)\n    .groupBy(userVideosTable.sourcePlatform);\n\n  const out: Record<string, number> = {};\n  for (const row of rows) {\n    const key = normalizeFeedPlatform(row.platform);\n    out[key] = (out[key] ?? 0) + (row.count ?? 0);\n  }\n  return out;\n}\n", "/** Shared video format / orientation detection for feeds and admin. */\n\nexport type VideoFormat = \"hook\" | \"shot\" | \"video\";\nexport type VideoOrientation = \"vertical\" | \"horizontal\";\n\nexport interface VideoLayoutInput {\n  videoUrl?: string | null;\n  sourcePlatform?: string | null;\n  /** Persisted or editor-selected format (hook/shot = 9:16, video = 16:9). */\n  videoFormat?: VideoFormat | null;\n  width?: number | null;\n  height?: number | null;\n  category?: string | null;\n  /** Feed/API title \u2014 used to detect YouTube Shorts from watch URLs. */\n  title?: string | null;\n}\n\nexport interface VideoLayout {\n  format: VideoFormat;\n  orientation: VideoOrientation;\n  /** Width divided by height (e.g. 16/9 \u2248 1.78, 9/16 \u2248 0.5625). */\n  aspectRatio: number;\n  label: \"Hook\" | \"Shot\" | \"Reel\" | \"Landscape\";\n}\n\nconst FORMAT_ASPECT: Record<VideoFormat, number> = {\n  hook: 9 / 16,\n  shot: 9 / 16,\n  video: 16 / 9,\n};\n\nconst VERTICAL_URL = [\n  /youtube\\.com\\/shorts\\//i,\n  /tiktok\\.com\\//i,\n  /instagram\\.com\\/reel\\//i,\n  /vm\\.tiktok\\.com\\//i,\n];\n\nconst HORIZONTAL_URL = [\n  /youtube\\.com\\/watch\\?/i,\n  /youtu\\.be\\/[a-zA-Z0-9_-]{11}(?:\\?|$)/i,\n  /youtube\\.com\\/embed\\/[a-zA-Z0-9_-]{11}(?:\\?|$)/i,\n  /vimeo\\.com\\/(?:video\\/)?\\d+/i,\n  /facebook\\.com\\/.*\\/videos\\//i,\n];\n\nfunction isVerticalUrl(url: string): boolean {\n  return VERTICAL_URL.some((re) => re.test(url));\n}\n\nfunction isHorizontalUrl(url: string): boolean {\n  if (isVerticalUrl(url)) return false;\n  return HORIZONTAL_URL.some((re) => re.test(url));\n}\n\nfunction normalizeFormat(value: unknown): VideoFormat | null {\n  if (value === \"hook\" || value === \"shot\" || value === \"video\") return value;\n  return null;\n}\n\nfunction layoutFromFormat(format: VideoFormat): VideoLayout {\n  const orientation: VideoOrientation = format === \"video\" ? \"horizontal\" : \"vertical\";\n  const label =\n    format === \"hook\" ? \"Hook\" : format === \"shot\" ? \"Shot\" : \"Landscape\";\n  return {\n    format,\n    orientation,\n    aspectRatio: FORMAT_ASPECT[format],\n    label,\n  };\n}\n\nfunction layoutFromDimensions(width: number, height: number): VideoLayout {\n  if (width > height * 1.08) {\n    return layoutFromFormat(\"video\");\n  }\n  if (height > width * 1.08) {\n    return {\n      format: \"hook\",\n      orientation: \"vertical\",\n      aspectRatio: width / height,\n      label: \"Reel\",\n    };\n  }\n  return layoutFromFormat(\"shot\");\n}\n\nfunction titleSuggestsShorts(title: string | null | undefined): boolean {\n  if (!title?.trim()) return false;\n  return /#shorts\\b/i.test(title);\n}\n\nfunction isFeedPlaybackProxyPath(url: string): boolean {\n  return /\\/api\\/feed\\/playback\\/db-\\d+(\\?|#|$)/.test(url);\n}\n\n/** Infer display layout from stored format, probe dimensions, and URL heuristics. */\nexport function inferVideoLayout(input: VideoLayoutInput): VideoLayout {\n  const stored = normalizeFormat(input.videoFormat);\n  // YouTube watch URLs tagged #shorts are vertical even when DB says \"video\" (16:9).\n  if (stored && !(stored === \"video\" && titleSuggestsShorts(input.title))) {\n    return layoutFromFormat(stored);\n  }\n\n  const w = input.width ?? 0;\n  const h = input.height ?? 0;\n  if (w > 0 && h > 0) return layoutFromDimensions(w, h);\n\n  const url = input.videoUrl?.trim() ?? \"\";\n  const platform = input.sourcePlatform?.trim().toLowerCase() ?? \"\";\n\n  if (url && isFeedPlaybackProxyPath(url)) {\n    if (platform === \"tiktok\" || platform === \"instagram\") {\n      return layoutFromFormat(stored ?? \"shot\");\n    }\n  }\n\n  if (url) {\n    if (isVerticalUrl(url) || titleSuggestsShorts(input.title)) {\n      return {\n        format: \"hook\",\n        orientation: \"vertical\",\n        aspectRatio: 9 / 16,\n        label: \"Reel\",\n      };\n    }\n    if (isHorizontalUrl(url)) {\n      return layoutFromFormat(\"video\");\n    }\n  }\n\n  // Default: vertical reel-style (legacy uploads and unknown URLs)\n  return layoutFromFormat(\"shot\");\n}\n\nexport function isHorizontalLayout(layout: VideoLayout): boolean {\n  return layout.orientation === \"horizontal\";\n}\n\nexport function formatBadgeLabel(layout: VideoLayout): string {\n  return layout.label;\n}\n\nexport interface FeedStageOptions {\n  /** Viewport width \u2265 ~900px (desktop feed). */\n  isWideViewport?: boolean;\n  /** Pixels reserved for fixed feed chrome (tabs, filters, search). */\n  reservedTopPx?: number;\n  /** Web feed: stage fills the entire snap slot (100% width/height). */\n  fullBleed?: boolean;\n}\n\n/**\n * Compute media stage size for a feed snap slot.\n * Mobile app uses centered stages; web feed uses `fullBleed: true` to fill the viewport.\n */\nexport function getFeedStageDimensions(\n  slotW: number,\n  slotH: number,\n  layout: VideoLayout,\n  options?: FeedStageOptions,\n): { stageW: number; stageH: number } {\n  if (slotW <= 0 || slotH <= 0) {\n    return { stageW: 0, stageH: 0 };\n  }\n\n  if (options?.fullBleed) {\n    return { stageW: Math.floor(slotW), stageH: Math.floor(slotH) };\n  }\n\n  const isWide = options?.isWideViewport ?? slotW >= 900;\n  const topReserve = options?.reservedTopPx ?? (isWide ? 72 : 112);\n  const usableH = Math.max(0, slotH - topReserve);\n  const usableW = slotW;\n\n  if (layout.orientation === \"horizontal\") {\n    const maxW = usableW * (isWide ? 0.94 : 0.98);\n    const maxH = usableH * 0.9;\n    let stageW = maxW;\n    let stageH = stageW / layout.aspectRatio;\n    if (stageH > maxH) {\n      stageH = maxH;\n      stageW = stageH * layout.aspectRatio;\n    }\n    return {\n      stageW: Math.floor(stageW),\n      stageH: Math.floor(stageH),\n    };\n  }\n\n  if (isWide) {\n    const maxH = usableH * 0.96;\n    let stageH = maxH;\n    let stageW = stageH * layout.aspectRatio;\n    const maxW = Math.min(Math.floor(usableW * 0.72), 720);\n    if (stageW > maxW) {\n      stageW = maxW;\n      stageH = stageW / layout.aspectRatio;\n    }\n    return {\n      stageW: Math.floor(stageW),\n      stageH: Math.floor(stageH),\n    };\n  }\n\n  if (usableW > usableH) {\n    const stageH = usableH;\n    const stageW = Math.min(usableW, Math.floor(stageH * layout.aspectRatio));\n    return { stageW, stageH };\n  }\n\n  return { stageW: Math.floor(usableW), stageH: Math.floor(usableH) };\n}\n\n/**\n * Tailwind fallback when JS slot measurement is unavailable (SSR / first paint).\n * Prefer `getFeedStageDimensions` with `useFeedSlotSize` for responsive feed cards.\n */\nexport function getWebReelFrameClasses(layout: VideoLayout): string {\n  if (layout.orientation === \"horizontal\") {\n    return \"aspect-video w-full max-w-[min(96vw,100%)] h-auto max-h-[90dvh]\";\n  }\n  return \"aspect-[9/16] w-full max-w-[min(72vw,720px)] h-auto max-h-[96dvh]\";\n}\n\n/** Thumbnail frame classes for admin library rows. */\nexport function getAdminThumbnailClasses(layout: VideoLayout): string {\n  if (layout.orientation === \"horizontal\") {\n    return \"h-14 w-24 rounded-md border border-white/10 object-cover\";\n  }\n  return \"h-14 w-10 rounded-md border border-white/10 object-cover\";\n}\n\n/** Resolve format on upload when the client did not send one explicitly. */\nexport function inferVideoFormatForUpload(videoUrl: string): VideoFormat {\n  return inferVideoLayout({ videoUrl }).format;\n}\n", "/** Smart feed search \u2014 hashtags, species, category, format, and platform aliases. */\n\nexport interface FeedSearchable {\n  title?: string | null;\n  description?: string | null;\n  category?: string | null;\n  species?: string | null;\n  locationState?: string | null;\n  locationCountry?: string | null;\n  weightSize?: string | null;\n  creator?: string | null;\n  creatorHandle?: string | null;\n  videoFormat?: string | null;\n  sourcePlatform?: string | null;\n  videoUrl?: string | null;\n}\n\nconst TOKEN_ALIASES: Record<string, readonly string[]> = {\n  hooks: [\n    \"hook\",\n    \"hooks\",\n    \"fishing\",\n    \"fish\",\n    \"angling\",\n    \"bass\",\n    \"walleye\",\n    \"trout\",\n    \"crappie\",\n    \"salmon\",\n    \"steelhead\",\n    \"musky\",\n    \"pike\",\n    \"catfish\",\n    \"panfish\",\n  ],\n  shots: [\n    \"shot\",\n    \"shots\",\n    \"hunting\",\n    \"hunt\",\n    \"deer\",\n    \"elk\",\n    \"turkey\",\n    \"bear\",\n    \"moose\",\n    \"whitetail\",\n    \"buck\",\n    \"doe\",\n    \"predator\",\n    \"coyote\",\n    \"waterfowl\",\n    \"duck\",\n  ],\n  reel: [\"reel\", \"reels\", \"vertical\", \"short\", \"shorts\", \"portrait\", \"9x16\", \"916\"],\n  landscape: [\"landscape\", \"horizontal\", \"wide\", \"widescreen\", \"16x9\", \"169\"],\n  youtube: [\"youtube\", \"yt\"],\n  tiktok: [\"tiktok\", \"tt\"],\n  instagram: [\"instagram\", \"ig\", \"insta\"],\n};\n\nexport function normalizeFeedSearchQuery(raw: string): string {\n  return raw.trim().replace(/\\s+/g, \" \");\n}\n\n/** Tokenize a query \u2014 supports `#elk`, comma lists, and plain words. */\nexport function parseFeedSearchTokens(query: string): string[] {\n  const normalized = normalizeFeedSearchQuery(query).toLowerCase();\n  if (!normalized) return [];\n\n  const tokens: string[] = [];\n  for (const match of normalized.matchAll(/#([\\w-]+)/g)) {\n    if (match[1]) tokens.push(match[1]);\n  }\n\n  const rest = normalized\n    .replace(/#[\\w-]+/g, \" \")\n    .split(/[\\s,;]+/)\n    .map((t) => t.replace(/^@/, \"\"))\n    .filter((t) => t.length >= 2);\n\n  tokens.push(...rest);\n  return [...new Set(tokens)];\n}\n\nfunction expandToken(token: string): string[] {\n  const expanded = new Set<string>([token]);\n  for (const [canonical, aliases] of Object.entries(TOKEN_ALIASES)) {\n    if (token === canonical || aliases.includes(token)) {\n      expanded.add(canonical);\n      for (const alias of aliases) expanded.add(alias);\n    }\n  }\n  return [...expanded];\n}\n\nfunction buildHaystack(item: FeedSearchable): string {\n  const formatHint =\n    item.videoFormat === \"hook\"\n      ? \"hook reel vertical fishing\"\n      : item.videoFormat === \"shot\"\n        ? \"shot reel vertical hunting\"\n        : item.videoFormat === \"video\"\n          ? \"landscape horizontal widescreen\"\n          : \"\";\n\n  const parts: string[] = [\n    item.title ?? \"\",\n    item.description ?? \"\",\n    item.category ?? \"\",\n    item.species ?? \"\",\n    item.locationState ?? \"\",\n    item.locationCountry ?? \"\",\n    item.weightSize ?? \"\",\n    item.creator ?? \"\",\n    item.creatorHandle?.replace(/^@/, \"\") ?? \"\",\n    item.videoFormat ?? \"\",\n    item.sourcePlatform ?? \"\",\n    item.videoUrl ?? \"\",\n    formatHint,\n  ];\n\n  const desc = item.description ?? \"\";\n  for (const match of desc.matchAll(/#([\\w-]+)/g)) {\n    if (match[1]) parts.push(match[1]);\n  }\n\n  return parts.join(\" \").toLowerCase();\n}\n\nfunction tokenMatches(token: string, haystack: string, item: FeedSearchable): boolean {\n  const variants = expandToken(token);\n  if (variants.some((v) => haystack.includes(v))) return true;\n\n  if (\n    variants.some((v) => v === \"hooks\" || v === \"hook\") &&\n    (item.category === \"hooks\" || item.category === \"both\")\n  ) {\n    return true;\n  }\n  if (\n    variants.some((v) => v === \"shots\" || v === \"shot\") &&\n    (item.category === \"shots\" || item.category === \"both\")\n  ) {\n    return true;\n  }\n  if (\n    variants.some((v) => [\"reel\", \"vertical\", \"short\", \"shorts\", \"portrait\"].includes(v)) &&\n    (item.videoFormat === \"hook\" || item.videoFormat === \"shot\")\n  ) {\n    return true;\n  }\n  if (\n    variants.some((v) => [\"landscape\", \"horizontal\", \"wide\", \"widescreen\"].includes(v)) &&\n    item.videoFormat === \"video\"\n  ) {\n    return true;\n  }\n\n  const url = (item.videoUrl ?? \"\").toLowerCase();\n  if (variants.some((v) => v === \"youtube\" || v === \"yt\") && url.includes(\"youtube\")) return true;\n  if (variants.some((v) => v === \"tiktok\" || v === \"tt\") && url.includes(\"tiktok\")) return true;\n  if (variants.some((v) => [\"instagram\", \"ig\", \"insta\"].includes(v)) && url.includes(\"instagram\")) {\n    return true;\n  }\n\n  return false;\n}\n\nexport function matchesFeedSearch(item: FeedSearchable, query: string): boolean {\n  const tokens = parseFeedSearchTokens(query);\n  if (tokens.length === 0) return true;\n  const haystack = buildHaystack(item);\n  return tokens.every((token) => tokenMatches(token, haystack, item));\n}\n\nexport function filterFeedSearch<T extends FeedSearchable>(items: T[], query: string): T[] {\n  if (!normalizeFeedSearchQuery(query)) return items;\n  return items.filter((item) => matchesFeedSearch(item, query));\n}\n", "/**\n * Feed ranking and personalization \u2014 shared helpers for /api/feed and /api/feed/discover.\n * Uses engagement signals from client headers and (when authenticated) DB likes/comments.\n */\nimport { deerFeedRankingBoost } from \"./ingestion/deerContentPriority\";\n\nexport interface RankableClip {\n  id: string;\n  category: \"hooks\" | \"shots\" | \"both\";\n  likes: number;\n  comments: number;\n  shares: number;\n  /** True when clip originates from user_videos (ingestion / uploads). */\n  isFresh?: boolean;\n  title?: string;\n  description?: string;\n  species?: string;\n  relevanceScore?: number;\n}\n\nexport interface CategoryAffinity {\n  hooks: number;\n  shots: number;\n}\n\nexport interface PersonalizationContext {\n  /** Stable per-session seed for deterministic variety. */\n  sessionSeed: string;\n  /** Clip IDs to deprioritize (recent views). High-affinity rewatches stay eligible. */\n  excludeIds: Set<string>;\n  /** Category weights from anonymous or inferred signals (0\u20131). */\n  affinity: CategoryAffinity;\n  /** Boost categories the signed-in user engages with. */\n  userAffinity?: CategoryAffinity;\n}\n\nconst DEFAULT_AFFINITY: CategoryAffinity = { hooks: 0.5, shots: 0.5 };\n\n/** FNV-1a hash \u2014 fast, deterministic seed for shuffling. */\nexport function hashSeed(input: string): number {\n  let h = 2166136261;\n  for (let i = 0; i < input.length; i++) {\n    h ^= input.charCodeAt(i);\n    h = Math.imul(h, 16777619);\n  }\n  return h >>> 0;\n}\n\n/** Mulberry32 PRNG from a numeric seed. */\nfunction mulberry32(seed: number): () => number {\n  return () => {\n    seed |= 0;\n    seed = (seed + 0x6d2b79f5) | 0;\n    let t = Math.imul(seed ^ (seed >>> 15), 1 | seed);\n    t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n  };\n}\n\nexport function parseCommaSeparatedIds(raw: string | undefined): Set<string> {\n  if (!raw?.trim()) return new Set();\n  return new Set(\n    raw\n      .split(\",\")\n      .map((s) => s.trim())\n      .filter(Boolean),\n  );\n}\n\nexport function parseCategoryAffinity(raw: string | undefined): CategoryAffinity {\n  if (!raw?.trim()) return DEFAULT_AFFINITY;\n  try {\n    const parsed = JSON.parse(raw) as Partial<CategoryAffinity>;\n    const hooks = Number(parsed.hooks);\n    const shots = Number(parsed.shots);\n    if (!Number.isFinite(hooks) || !Number.isFinite(shots)) return DEFAULT_AFFINITY;\n    const sum = hooks + shots;\n    if (sum <= 0) return DEFAULT_AFFINITY;\n    return { hooks: hooks / sum, shots: shots / sum };\n  } catch {\n    return DEFAULT_AFFINITY;\n  }\n}\n\nexport function clipCategoryWeight(\n  category: RankableClip[\"category\"],\n  affinity: CategoryAffinity,\n): number {\n  if (category === \"both\") return (affinity.hooks + affinity.shots) / 2;\n  return category === \"hooks\" ? affinity.hooks : affinity.shots;\n}\n\nexport function scoreClip(clip: RankableClip, ctx: PersonalizationContext): number {\n  const combined: CategoryAffinity = {\n    hooks: (ctx.affinity.hooks + (ctx.userAffinity?.hooks ?? 0.5)) / 2,\n    shots: (ctx.affinity.shots + (ctx.userAffinity?.shots ?? 0.5)) / 2,\n  };\n\n  const catBoost = clipCategoryWeight(clip.category, combined);\n  const engagement = Math.log1p(clip.likes) * 0.35 + Math.log1p(clip.comments) * 0.5 + Math.log1p(clip.shares) * 0.2;\n  const freshBoost = clip.isFresh ? 1.4 : 1;\n  const excludePenalty = ctx.excludeIds.has(clip.id ?? \"\") ? 0.08 : 1;\n  const demoPenalty = clip.id?.startsWith(\"demo-\") ? 0.05 : 1;\n  const catalogQuality = clip.relevanceScore ? 0.75 + clip.relevanceScore / 200 : 1;\n  const deerBoost = clip.title\n    ? deerFeedRankingBoost({\n        title: clip.title,\n        description: clip.description,\n        species: clip.species,\n      })\n    : 1;\n\n  return (catBoost * 2 + engagement) * freshBoost * excludePenalty * demoPenalty * catalogQuality * deerBoost;\n}\n\n/** Rank pool with seeded tie-breaking so order varies per session but stays stable within a session. */\nexport function rankFeedPool<T extends RankableClip>(clips: T[], ctx: PersonalizationContext): T[] {\n  if (clips.length <= 1) return [...clips];\n\n  const rng = mulberry32(hashSeed(ctx.sessionSeed));\n  const scored = clips.map((clip) => ({\n    clip,\n    score: scoreClip(clip, ctx) + rng() * 0.15,\n  }));\n\n  scored.sort((a, b) => b.score - a.score);\n  return scored.map((s) => s.clip);\n}\n\n/** Trending: engagement-heavy with slight fresh-content boost. */\nexport function selectTrending<T extends RankableClip>(clips: T[], limit: number): T[] {\n  const ranked = [...clips].sort((a, b) => {\n    const scoreA = (a.likes + a.comments * 2) * (a.isFresh ? 1.2 : 1);\n    const scoreB = (b.likes + b.comments * 2) * (b.isFresh ? 1.2 : 1);\n    return scoreB - scoreA;\n  });\n  return ranked.slice(0, limit);\n}\n\nexport function filterByCategory<T extends RankableClip>(\n  clips: T[],\n  category: \"hooks\" | \"shots\" | \"all\",\n): T[] {\n  if (category === \"all\") return clips;\n  return clips.filter((c) => c.category === category || c.category === \"both\");\n}\n\n/** Hunter / angler (fisherman) audience \u2014 drives hero personalization. */\nexport type AudienceType = \"hunter\" | \"angler\" | \"fisherman\" | \"both\";\n\nexport interface HeroRankableClip extends RankableClip {\n  title?: string;\n  videoUrl?: string;\n  viewCount?: number;\n  externalLikeCount?: number;\n  relevanceScore?: number;\n  publishedAt?: string | Date | null;\n}\n\nconst HERO_MIN_VIEW_COUNT = 10_000;\nconst HERO_MIN_ENGAGEMENT = 15;\nconst HERO_MIN_RELEVANCE = 55;\n\n/** Gimmick, promo, or low-signal titles unsuitable for hero placement. */\nconst HERO_TITLE_BLOCKLIST =\n  /#shorts\\b|paid promotion|includes paid|sponsored|#ad\\b|\\b(giant|fake|giant)\\s+lure\\b|\\bprank\\b|\\breaction\\b|!!!{2,}/i;\n\nfunction isHeroLowQualityTitle(title: string | undefined): boolean {\n  if (!title?.trim()) return true;\n  const t = title.trim();\n  if (HERO_TITLE_BLOCKLIST.test(t)) return true;\n  const letters = t.replace(/[^a-zA-Z]/g, \"\");\n  if (letters.length >= 8) {\n    const upper = letters.replace(/[^A-Z]/g, \"\").length;\n    if (upper / letters.length > 0.75) return true;\n  }\n  return false;\n}\n\nexport function normalizeAudienceType(raw: string | undefined | null): AudienceType {\n  const v = raw?.trim().toLowerCase();\n  if (v === \"hunter\") return \"hunter\";\n  if (v === \"angler\" || v === \"fisherman\" || v === \"fishing\") return \"angler\";\n  if (v === \"both\") return \"both\";\n  return \"both\";\n}\n\nexport function audienceMatchesCategory(\n  audience: AudienceType,\n  category: RankableClip[\"category\"],\n): boolean {\n  if (audience === \"both\") return true;\n  if (audience === \"hunter\") return category === \"shots\" || category === \"both\";\n  return category === \"hooks\" || category === \"both\";\n}\n\n/** Reject demos, empty URLs, promo spam, and clips with no meaningful engagement signal. */\nexport function isHeroEligible(clip: HeroRankableClip): boolean {\n  if (!clip.id || clip.id.startsWith(\"demo-\")) return false;\n  if (!clip.videoUrl?.trim()) return false;\n  if (isHeroLowQualityTitle(clip.title)) return false;\n\n  const views = clip.viewCount ?? 0;\n  const likes = (clip.likes ?? 0) + (clip.externalLikeCount ?? 0);\n  const comments = clip.comments ?? 0;\n  const shares = clip.shares ?? 0;\n  const relevance = clip.relevanceScore ?? 0;\n  const engagement = likes + comments * 2 + shares;\n\n  if (engagement === 0 && views === 0) return false;\n\n  if (relevance >= HERO_MIN_RELEVANCE) return true;\n  if (views >= HERO_MIN_VIEW_COUNT && engagement >= HERO_MIN_ENGAGEMENT) return true;\n  if (views >= HERO_MIN_VIEW_COUNT * 3) return true;\n\n  return false;\n}\n\nfunction heroRecencyBoost(publishedAt?: string | Date | null): number {\n  if (!publishedAt) return 0.45;\n  const ts = typeof publishedAt === \"string\" ? Date.parse(publishedAt) : publishedAt.getTime();\n  if (!Number.isFinite(ts)) return 0.45;\n  const ageDays = (Date.now() - ts) / 86_400_000;\n  return Math.exp(-ageDays / 45);\n}\n\n/** Combines popularity (views/likes/comments), catalog relevance, and recency. */\nexport function scoreHeroClip(clip: HeroRankableClip): number {\n  const views = clip.viewCount ?? 0;\n  const likes = (clip.likes ?? 0) + (clip.externalLikeCount ?? 0);\n  const comments = clip.comments ?? 0;\n  const shares = clip.shares ?? 0;\n  const relevance = clip.relevanceScore ?? 0;\n\n  const popularity =\n    Math.log1p(views) * 1.2 +\n    Math.log1p(likes) * 0.9 +\n    Math.log1p(comments) * 0.6 +\n    Math.log1p(shares) * 0.3;\n  const quality = relevance / 100;\n  const recency = heroRecencyBoost(clip.publishedAt) * 1.5;\n  const titlePenalty = isHeroLowQualityTitle(clip.title) ? -999 : 0;\n\n  return popularity + quality + recency + titlePenalty;\n}\n\n/** How many of the top popularity-ranked clips are eligible for hero rotation. */\nconst HERO_ROTATION_POOL_SIZE = 6;\n\nexport interface HeroSelectionOptions {\n  /**\n   * Deterministic rotation seed. When provided, the hero is chosen from the top\n   * popularity-ranked eligible clips using this seed rather than always\n   * returning the single top clip. Callers should mix a time bucket (so the\n   * hero refreshes on a cadence) with a session seed (so concurrent visitors\n   * see some variety) \u2014 see the /discover route.\n   */\n  rotationSeed?: string;\n  /** Number of top popularity-ranked clips that rotate into the hero slot. */\n  rotationPoolSize?: number;\n}\n\n/**\n * Weighted pick favoring the highest-ranked clips: the top clip is most likely,\n * but lower-ranked (still popular) clips rotate in so the hero never stays fixed.\n */\nfunction weightedRotationPick<T>(ranked: T[], seed: string): T | null {\n  if (ranked.length === 0) return null;\n  if (ranked.length === 1) return ranked[0] ?? null;\n\n  const weights = ranked.map((_, i) => ranked.length - i);\n  const total = weights.reduce((sum, w) => sum + w, 0);\n  const rng = mulberry32(hashSeed(seed));\n  let r = rng() * total;\n  for (let i = 0; i < ranked.length; i++) {\n    r -= weights[i] ?? 0;\n    if (r < 0) return ranked[i] ?? null;\n  }\n  return ranked[ranked.length - 1] ?? null;\n}\n\n/**\n * Pick the hero clip for the user's audience segment.\n *\n * Clips are ranked by real engagement (views/likes/comments/shares) plus catalog\n * relevance and recency via {@link scoreHeroClip}. Without a `rotationSeed` the\n * single top clip is returned (deterministic). With a `rotationSeed`, the hero is\n * drawn from the top {@link HERO_ROTATION_POOL_SIZE} performers using a weighted\n * pick \u2014 this keeps the featured slot on genuinely popular content while\n * refreshing it over time and as rankings shift, so it never stays static.\n */\nexport function selectHeroFeaturedClip<T extends HeroRankableClip>(\n  clips: T[],\n  audience: AudienceType,\n  options: HeroSelectionOptions = {},\n): T | null {\n  const audienceNorm = normalizeAudienceType(audience);\n  const eligible = clips.filter(\n    (c) => isHeroEligible(c) && audienceMatchesCategory(audienceNorm, c.category),\n  );\n\n  const pool = eligible.length > 0 ? eligible : clips.filter(isHeroEligible);\n  if (pool.length === 0) return null;\n\n  const ranked = [...pool].sort((a, b) => scoreHeroClip(b) - scoreHeroClip(a));\n\n  if (!options.rotationSeed) {\n    return ranked[0] ?? null;\n  }\n\n  const poolSize = Math.max(\n    1,\n    Math.min(options.rotationPoolSize ?? HERO_ROTATION_POOL_SIZE, ranked.length),\n  );\n  const topPool = ranked.slice(0, poolSize);\n  return weightedRotationPick(topPool, options.rotationSeed) ?? ranked[0] ?? null;\n}\n\nexport function parseAudienceFromRequest(req: {\n  headers: Record<string, string | string[] | undefined>;\n}): AudienceType {\n  const header = req.headers[\"x-hnb-audience-type\"];\n  const raw = typeof header === \"string\" ? header : Array.isArray(header) ? header[0] : undefined;\n  return normalizeAudienceType(raw);\n}\n\nexport function buildPersonalizationContext(req: {\n  query: Record<string, unknown>;\n  headers: Record<string, string | string[] | undefined>;\n}): PersonalizationContext {\n  const sessionSeed =\n    (typeof req.query[\"seed\"] === \"string\" && req.query[\"seed\"].trim()) ||\n    (typeof req.headers[\"x-hnb-session-seed\"] === \"string\" && req.headers[\"x-hnb-session-seed\"]) ||\n    \"default\";\n\n  const excludeRaw =\n    (typeof req.query[\"exclude\"] === \"string\" ? req.query[\"exclude\"] : undefined) ??\n    (typeof req.headers[\"x-hnb-exclude-ids\"] === \"string\" ? req.headers[\"x-hnb-exclude-ids\"] : undefined);\n\n  const affinityRaw =\n    (typeof req.query[\"affinity\"] === \"string\" ? req.query[\"affinity\"] : undefined) ??\n    (typeof req.headers[\"x-hnb-category-affinity\"] === \"string\"\n      ? req.headers[\"x-hnb-category-affinity\"]\n      : undefined);\n\n  return {\n    sessionSeed,\n    excludeIds: parseCommaSeparatedIds(excludeRaw),\n    affinity: parseCategoryAffinity(affinityRaw),\n  };\n}", "/** Server-side poster hydration for feed clips (cache + API responses). */\n\nconst YT_ID = /^[a-zA-Z0-9_-]{11}$/;\n\nconst PUBLIC_SITE = process.env.PUBLIC_SITE_URL?.trim() || \"https://www.hooknbone.com\";\n\n/** Stable demo posters hosted on the marketing site (Unsplash + GCS sample URLs rot). */\nexport const DEMO_CLIP_POSTERS: Record<string, string> = {\n  \"demo-1\": `${PUBLIC_SITE}/images/deer.png`,\n  \"demo-2\": `${PUBLIC_SITE}/images/bass.png`,\n  \"demo-3\": `${PUBLIC_SITE}/images/bow.png`,\n};\n\nconst BROKEN_DIRECT_VIDEO_PREFIX = \"https://commondatastorage.googleapis.com/gtv-videos-bucket/\";\n\nexport function youtubePosterUrl(videoId: string): string {\n  return `https://i.ytimg.com/vi/${videoId}/hqdefault.jpg`;\n}\n\nexport function hydrateClipPoster<T extends { id: string; poster?: string; platform?: string; videoUrl?: string }>(\n  clip: T,\n): T {\n  const demoPoster = DEMO_CLIP_POSTERS[clip.id];\n  if (demoPoster) {\n    const videoUrl =\n      clip.videoUrl?.startsWith(BROKEN_DIRECT_VIDEO_PREFIX) ? \"\" : (clip.videoUrl ?? \"\");\n    return { ...clip, poster: demoPoster, videoUrl };\n  }\n\n  if (clip.poster?.trim()) return clip;\n  if (clip.platform === \"youtube\" || YT_ID.test(clip.id)) {\n    return { ...clip, poster: youtubePosterUrl(clip.id) };\n  }\n  return clip;\n}\n\nexport function hydrateClipPosters<T extends { id: string; poster?: string; platform?: string; videoUrl?: string }>(\n  clips: T[],\n): T[] {\n  return clips.map(hydrateClipPoster);\n}\n", "// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// GET  /api/feed          \u2014 paginated clip feed (YouTube + DB cache + seed fallback)\n// POST /api/feed          \u2014 persist a user-uploaded video (auth-gated)\n// GET  /api/feed/user     \u2014 fetch authenticated user's own videos\n// POST /api/feed/:id/like \u2014 auth-gated; toggle like on a clip\n// GET    /api/feed/:id/comments                   \u2014 list comments for a clip (public)\n// POST   /api/feed/:id/comments                   \u2014 auth-gated; post a comment on a clip\n// DELETE /api/feed/:id/comments/:commentId         \u2014 auth-gated; delete own comment only\n//\n// Results are cached per category in PostgreSQL for 1 hour so repeat loads\n// and server restarts cost zero additional YouTube quota. Stale rows are\n// pruned automatically on each write. Falls back to SEED data when no\n// YOUTUBE_API_KEY is set. DB engagement counts (likes/comments) are merged\n// on top of the YouTube baseline on every response.\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nimport { Router, type IRouter, type Request, type Response } from \"express\";\nimport crypto from \"crypto\";\nimport { getSessionUser } from \"../lib/authMiddleware\";\nimport { db, feedCacheTable, userVideosTable, youtubeImportsTable, videoDetectedProductsTable } from \"@workspace/db\";\nimport {\n  contentVisibilityTable,\n  feedLikesTable,\n  feedCommentsTable,\n  userAgreementsTable,\n} from \"@workspace/db/schema\";\nimport { and, eq, inArray, lt, ne, desc, count, sql, or, ilike } from \"drizzle-orm\";\nimport type { Column } from \"drizzle-orm\";\nimport { runPostProcessWorker } from \"../lib/postProcess/worker\";\nimport { attributionForFeed } from \"../lib/postProcess/attribution\";\nimport { loadVideoLoadout } from \"../lib/postProcess/productMatching\";\nimport type { VideoEnrichmentMetadata } from \"@workspace/db\";\nimport { matchSpeciesInText } from \"../lib/speciesHeuristics\";\nimport { auditIngestionContent } from \"../lib/ingestion/contentGatekeeper\";\nimport {\n  feedPlaybackProxyPath,\n  isPlayableFeedUrl,\n  resolveFeedPlaybackUrl,\n  resolveClientFeedVideoUrl,\n  serializePublicFeedVideo,\n  isNativePlaybackUrl,\n} from \"../lib/playback/feedPlayback\";\nimport { isUploadableVideoUrl } from \"../lib/playback/videoMediaValidation.js\";\nimport { isInstagramEmbedUrl } from \"../lib/ingestion/instagramPlayback.js\";\nimport { refreshInstagramVideoPlayback } from \"../lib/playback/refreshInstagramCdn\";\nimport { refreshTikTokVideoPlayback } from \"../lib/playback/refreshTikTokCdn\";\nimport { streamFeedPlayback } from \"../lib/playback/feedPlaybackStream\";\nimport { duplicateKeyForUrl, findExistingVideoByUrl } from \"../lib/videoDuplicateGuard\";\nimport {\n  getFeedPlatformSettings,\n  isPlatformEnabledInSettings,\n  feedUsesDbCatalogOnly,\n  normalizeFeedPlatform,\n} from \"../lib/feedPlatformSettings.js\";\nimport {\n  inferVideoFormatForUpload,\n  inferVideoLayout,\n  type VideoFormat,\n} from \"@workspace/video-layout\";\nimport {\n  matchesFeedSearch,\n  normalizeFeedSearchQuery,\n  type FeedSearchable,\n} from \"@workspace/feed-search\";\nimport {\n  buildPersonalizationContext,\n  filterByCategory,\n  normalizeAudienceType,\n  parseAudienceFromRequest,\n  rankFeedPool,\n  selectHeroFeaturedClip,\n  selectTrending,\n  type AudienceType,\n  type CategoryAffinity,\n  type PersonalizationContext,\n} from \"../lib/feedRecommendations\";\nimport { hydrateClipPoster, hydrateClipPosters, DEMO_CLIP_POSTERS } from \"../lib/clipThumbnails\";\n\nconst router: IRouter = Router();\n\nconst YT_API_BASE = \"https://www.googleapis.com/youtube/v3\";\nconst CACHE_TTL_MS = 60 * 60 * 1000;\n\n// \u2500\u2500 Category definitions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst CATEGORIES = [\n  { key: \"hunting\",    query: \"hunting whitetail elk deer hunt harvest\",   clipCategory: \"shots\" as const },\n  { key: \"fishing\",    query: \"bass fishing catch tournament largemouth\",  clipCategory: \"hooks\" as const },\n  { key: \"bowhunting\", query: \"bowhunting compound bow arrow buck kill\",   clipCategory: \"shots\" as const },\n  { key: \"waterfowl\",  query: \"duck hunting waterfowl mallard limit\",      clipCategory: \"shots\" as const },\n  { key: \"saltwater\",  query: \"saltwater fishing offshore tuna redfish\",   clipCategory: \"hooks\" as const },\n  { key: \"trophy\",     query: \"trophy buck deer hunt public land giant\",   clipCategory: \"shots\" as const },\n] as const;\n\n// \u2500\u2500 Heuristic data (location/weight; species via speciesHeuristics) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst US_STATES = [\n  \"Alabama\",\"Alaska\",\"Arizona\",\"Arkansas\",\"California\",\"Colorado\",\"Connecticut\",\n  \"Delaware\",\"Florida\",\"Georgia\",\"Hawaii\",\"Idaho\",\"Illinois\",\"Indiana\",\"Iowa\",\n  \"Kansas\",\"Kentucky\",\"Louisiana\",\"Maine\",\"Maryland\",\"Massachusetts\",\"Michigan\",\n  \"Minnesota\",\"Mississippi\",\"Missouri\",\"Montana\",\"Nebraska\",\"Nevada\",\n  \"New Hampshire\",\"New Jersey\",\"New Mexico\",\"New York\",\"North Carolina\",\n  \"North Dakota\",\"Ohio\",\"Oklahoma\",\"Oregon\",\"Pennsylvania\",\"Rhode Island\",\n  \"South Carolina\",\"South Dakota\",\"Tennessee\",\"Texas\",\"Utah\",\"Vermont\",\n  \"Virginia\",\"Washington\",\"West Virginia\",\"Wisconsin\",\"Wyoming\",\n];\n\nconst CA_PROVINCES = [\n  \"Alberta\",\"British Columbia\",\"Manitoba\",\"New Brunswick\",\n  \"Newfoundland\",\"Nova Scotia\",\"Ontario\",\"Prince Edward Island\",\n  \"Quebec\",\"Saskatchewan\",\"Northwest Territories\",\"Nunavut\",\"Yukon\",\n];\n\ninterface HeuristicResult {\n  species?: string;\n  weight?: string;\n  locationState?: string;\n}\n\nexport function runHeuristics(text: string): HeuristicResult {\n  const result: HeuristicResult = {};\n\n  const speciesMatch = matchSpeciesInText(text);\n  if (speciesMatch) result.species = speciesMatch.species;\n\n  const wm = text.match(/(\\d{1,4}(?:\\.\\d{1,2})?)\\s?(?:lbs?|pounds?)\\b/i);\n  if (wm) {\n    result.weight = `${wm[1]} lbs`;\n  } else {\n    const km = text.match(/(\\d{1,4}(?:\\.\\d{1,2})?)\\s?(?:kg|kilos?)\\b/i);\n    if (km) result.weight = `${km[1]} kg`;\n    else {\n      const im = text.match(/(\\d{1,3}(?:\\.\\d{1,2})?)\\s?(?:inch(?:es)?|in|\")\\b/i);\n      if (im) result.weight = `${im[1]} inch`;\n    }\n  }\n\n  for (const st of US_STATES) {\n    if (new RegExp(`\\\\b${st}\\\\b`, \"i\").test(text)) {\n      result.locationState = st;\n      break;\n    }\n  }\n\n  if (!result.locationState) {\n    for (const prov of CA_PROVINCES) {\n      if (new RegExp(`\\\\b${prov}\\\\b`, \"i\").test(text)) {\n        result.locationState = prov;\n        break;\n      }\n    }\n  }\n\n  return result;\n}\n\n// \u2500\u2500 FeedClip type \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface FeedClip {\n  id: string;\n  title: string;\n  creator: string;\n  creatorHandle: string;\n  description: string;\n  category: \"hooks\" | \"shots\" | \"both\";\n  videoUrl: string;\n  embedUrl?: string | null;\n  sourceVideoId?: string | null;\n  platform: \"youtube\" | \"direct\";\n  sourcePlatform?: string | null;\n  sourceUrl?: string | null;\n  poster?: string;\n  videoFormat?: VideoFormat | null;\n  metadata: { species: string; locationState: string; weightSize: string };\n  likes: number;\n  comments: number;\n  shares: number;\n  viewCount?: number;\n  externalLikeCount?: number;\n  relevanceScore?: number;\n  publishedAt?: string | null;\n  attribution?: {\n    platform: string | null;\n    creatorName: string;\n    creatorHandle: string;\n    creatorUrl: string | null;\n    sourceUrl: string | null;\n    license: string | null;\n    playbackMethod: string | null;\n    publishedAt: string | null;\n  };\n  loadout?: Array<{\n    id: string;\n    name: string;\n    brand: string;\n    category: string;\n    subcategory: string;\n    price: number | null;\n    imageUrl: string | null;\n    affiliateLink: string | null;\n    confidence: number;\n  }>;\n  topics?: string[];\n}\n\nfunction feedClipToSearchable(clip: FeedClip): FeedSearchable {\n  return {\n    title: clip.title,\n    description: clip.description,\n    category: clip.category,\n    species: clip.metadata.species,\n    locationState: clip.metadata.locationState,\n    weightSize: clip.metadata.weightSize,\n    creator: clip.creator,\n    creatorHandle: clip.creatorHandle,\n    videoFormat: clip.videoFormat,\n    sourcePlatform: clip.sourcePlatform,\n    videoUrl: clip.videoUrl,\n  };\n}\n\nfunction filterFeedClipsBySearch(clips: FeedClip[], query: string): FeedClip[] {\n  const q = normalizeFeedSearchQuery(query);\n  if (!q) return clips;\n  return clips.filter((clip) => matchesFeedSearch(feedClipToSearchable(clip), q));\n}\n\n// \u2500\u2500 Seed fallback (shown when no YouTube API key is configured) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst SEED_CLIPS: FeedClip[] = [\n  {\n    id: \"demo-1\",\n    title: \"Kentucky Strut\",\n    creator: \"Dakota Wells\",\n    creatorHandle: \"@dakota_wells\",\n    description: \"Spring opener. 24-step shot \u2014 hammered him.\",\n    category: \"shots\",\n    videoUrl: \"\",\n    platform: \"direct\",\n    videoFormat: \"video\",\n    metadata: { species: \"Wild Turkey\", locationState: \"Kentucky\", weightSize: \"21 lbs \u00B7 11\\\" beard\" },\n    poster: DEMO_CLIP_POSTERS[\"demo-1\"],\n    likes: 241, comments: 18, shares: 6,\n  },\n  {\n    id: \"demo-2\",\n    title: \"Smallmouth Sunset\",\n    creator: \"Reed McCaffrey\",\n    creatorHandle: \"@reed_fishes\",\n    description: \"Topwater bite turned ON. 4 lb river smallie.\",\n    category: \"hooks\",\n    videoUrl: \"\",\n    platform: \"direct\",\n    videoFormat: \"video\",\n    metadata: { species: \"Smallmouth Bass\", locationState: \"Ohio\", weightSize: \"4.1 lbs\" },\n    poster: DEMO_CLIP_POSTERS[\"demo-2\"],\n    likes: 179, comments: 14, shares: 3,\n  },\n  {\n    id: \"demo-3\",\n    title: \"Public Land Pope & Young\",\n    creator: \"Marcus Vail\",\n    creatorHandle: \"@vailbow\",\n    description: \"Eight-hour sit, 23-yard shot. Public land grail.\",\n    category: \"shots\",\n    videoUrl: \"\",\n    platform: \"direct\",\n    videoFormat: \"video\",\n    metadata: { species: \"Whitetail Deer\", locationState: \"Iowa\", weightSize: \"168 lbs \u00B7 142\\\"\" },\n    poster: DEMO_CLIP_POSTERS[\"demo-3\"],\n    likes: 561, comments: 41, shares: 21,\n  },\n];\n\n// \u2500\u2500 YouTube fetch helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ninterface YTRawItem {\n  videoId: string;\n  title: string;\n  description: string;\n  channelTitle: string;\n  thumbnail: string;\n  likeCount: number;\n  viewCount: number;\n}\n\n// \u2500\u2500 DB cache helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function getCachedClips(\n  key: string,\n  log?: { warn: (...a: unknown[]) => void },\n): Promise<FeedClip[] | null> {\n  try {\n    const rows = await db\n      .select()\n      .from(feedCacheTable)\n      .where(eq(feedCacheTable.key, key))\n      .limit(1);\n    const row = rows[0];\n    if (!row) return null;\n    if (new Date(row.expiresAt) <= new Date()) return null;\n    return hydrateClipPosters(JSON.parse(row.clipsJson) as FeedClip[]);\n  } catch (err) {\n    log?.warn({ err, key }, \"Feed DB cache read failed (non-fatal)\");\n    return null;\n  }\n}\n\nasync function setCachedClips(\n  key: string,\n  clips: FeedClip[],\n  log?: { warn: (...a: unknown[]) => void },\n): Promise<void> {\n  const now = new Date();\n  const expiresAt = new Date(now.getTime() + CACHE_TTL_MS);\n\n  try {\n    await db\n      .insert(feedCacheTable)\n      .values({\n        key,\n        clipsJson: JSON.stringify(clips),\n        fetchedAt: now,\n        expiresAt,\n      })\n      .onConflictDoUpdate({\n        target: feedCacheTable.key,\n        set: {\n          clipsJson: JSON.stringify(clips),\n          fetchedAt: now,\n          expiresAt,\n        },\n      });\n\n    // Prune all stale rows on every write (table is tiny; no separate cron needed)\n    await db.delete(feedCacheTable).where(lt(feedCacheTable.expiresAt, now));\n  } catch (err) {\n    log?.warn({ err, key }, \"Feed DB cache write failed (non-fatal)\");\n  }\n}\n\nexport { CATEGORIES, fetchCategoryClips, setCachedClips };\n\n/** When false, public feed uses cached YouTube clips + catalog only (no live YouTube Search API). */\nfunction feedYouTubeLiveSearchEnabled(): boolean {\n  return process.env.FEED_YOUTUBE_LIVE_SEARCH !== \"false\";\n}\n\nfunction passesFeedGatekeeper(clip: Pick<FeedClip, \"title\" | \"description\">): boolean {\n  return auditIngestionContent(`${clip.title} ${clip.description ?? \"\"}`).valid;\n}\n\nasync function fetchCategoryClips(\n  apiKey: string,\n  cat: (typeof CATEGORIES)[number],\n  log?: { warn: (...a: unknown[]) => void },\n  forceRefresh = false,\n): Promise<FeedClip[]> {\n  // 1. Check DB cache first (skip when force-refreshing from background job)\n  if (!forceRefresh) {\n    const cached = await getCachedClips(cat.key, log);\n    if (cached) return cached.filter(passesFeedGatekeeper);\n  }\n\n  if (!feedYouTubeLiveSearchEnabled()) {\n    return [];\n  }\n\n  const makeRequest = async (url: string): Promise<globalThis.Response> => {\n    const ctrl = new AbortController();\n    const timer = setTimeout(() => ctrl.abort(), 9000);\n    try {\n      return await fetch(url, { signal: ctrl.signal });\n    } finally {\n      clearTimeout(timer);\n    }\n  };\n\n  try {\n    const searchParams = new URLSearchParams({\n      part: \"snippet\",\n      type: \"video\",\n      maxResults: \"12\",\n      order: \"viewCount\",\n      q: cat.query,\n      key: apiKey,\n      safeSearch: \"moderate\",\n      videoEmbeddable: \"true\",\n    });\n\n    const searchResp = await makeRequest(`${YT_API_BASE}/search?${searchParams}`);\n    if (!searchResp.ok) {\n      log?.warn({ status: searchResp.status, cat: cat.key }, \"YouTube search failed for feed category\");\n      return [];\n    }\n\n    const searchData = (await searchResp.json()) as {\n      items?: Array<{\n        id: { videoId?: string };\n        snippet: {\n          title: string;\n          description: string;\n          channelTitle: string;\n          thumbnails?: { high?: { url: string }; medium?: { url: string }; default?: { url: string } };\n        };\n      }>;\n    };\n\n    const rawItems: YTRawItem[] = (searchData.items ?? [])\n      .filter((it) => it.id.videoId)\n      .map((it) => ({\n        videoId: it.id.videoId as string,\n        title: it.snippet.title,\n        description: it.snippet.description,\n        channelTitle: it.snippet.channelTitle,\n        thumbnail:\n          it.snippet.thumbnails?.high?.url ??\n          it.snippet.thumbnails?.medium?.url ??\n          it.snippet.thumbnails?.default?.url ??\n          \"\",\n        likeCount: 0,\n        viewCount: 0,\n      }));\n\n    if (rawItems.length > 0) {\n      try {\n        const vParams = new URLSearchParams({\n          part: \"statistics\",\n          id: rawItems.map((i) => i.videoId).join(\",\"),\n          key: apiKey,\n        });\n        const vResp = await makeRequest(`${YT_API_BASE}/videos?${vParams}`);\n        if (vResp.ok) {\n          const vData = (await vResp.json()) as {\n            items?: Array<{ id: string; statistics?: { likeCount?: string; viewCount?: string } }>;\n          };\n          const byId = new Map((vData.items ?? []).map((v) => [v.id, v]));\n          for (const item of rawItems) {\n            const v = byId.get(item.videoId);\n            if (v?.statistics?.likeCount) {\n              item.likeCount = Number(v.statistics.likeCount);\n            }\n            if (v?.statistics?.viewCount) {\n              item.viewCount = Number(v.statistics.viewCount);\n            }\n          }\n        }\n      } catch (err) {\n        log?.warn({ err }, \"YouTube videos.list hydration failed for feed (non-fatal)\");\n      }\n    }\n\n    const clips: FeedClip[] = rawItems\n      .map((item) => {\n      const h = runHeuristics(`${item.title} ${item.description}`);\n      const handle = `@${item.channelTitle\n        .toLowerCase()\n        .replace(/\\s+/g, \"_\")\n        .replace(/[^a-z0-9_]/g, \"\")\n        .slice(0, 30)}`;\n\n      return {\n        id: item.videoId,\n        title: item.title,\n        creator: item.channelTitle,\n        creatorHandle: handle,\n        description: item.description.slice(0, 160).trim(),\n        category: cat.clipCategory,\n        videoUrl: `https://www.youtube.com/embed/${item.videoId}`,\n        platform: \"youtube\" as const,\n        videoFormat: inferVideoLayout({\n          videoUrl: `https://www.youtube.com/watch?v=${item.videoId}`,\n          sourcePlatform: \"youtube\",\n        }).format,\n        poster:\n          item.thumbnail ||\n          `https://i.ytimg.com/vi/${item.videoId}/hqdefault.jpg`,\n        metadata: {\n          species: h.species ?? \"Unknown\",\n          locationState: h.locationState ?? \"Unknown\",\n          weightSize: h.weight ?? \"\u2014\",\n        },\n        likes: item.likeCount,\n        comments: 0,\n        shares: 0,\n        viewCount: item.viewCount > 0 ? item.viewCount : undefined,\n      };\n    })\n      .filter(passesFeedGatekeeper);\n\n    // 2. Persist to DB cache (non-blocking write; failures are logged, not thrown)\n    await setCachedClips(cat.key, clips, log);\n    return clips;\n  } catch (err) {\n    log?.warn({ err, cat: cat.key }, \"Feed category fetch threw\");\n    return [];\n  }\n}\n\n// \u2500\u2500 Visibility filter \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Queries content_visibility for any clip IDs that have been auto-hidden or\n// removed by moderators. On DB error we fail open (log + return empty set) so\n// the feed stays alive.\n\nasync function getHiddenIds(\n  clipIds: string[],\n  log?: { warn: (...a: unknown[]) => void },\n): Promise<Set<string>> {\n  if (clipIds.length === 0) return new Set();\n  try {\n    const suppressedRows = await db\n      .select({ contentId: contentVisibilityTable.contentId })\n      .from(contentVisibilityTable)\n      .where(\n        and(\n          inArray(contentVisibilityTable.contentId, clipIds),\n          eq(contentVisibilityTable.contentType, \"video\"),\n          ne(contentVisibilityTable.visibility, \"visible\"),\n        ),\n      );\n    return new Set(suppressedRows.map((r) => r.contentId));\n  } catch (err) {\n    log?.warn({ err }, \"Feed: visibility filter DB query failed, serving unfiltered\");\n    return new Set();\n  }\n}\n\n// Kept for backward-compat with any callers outside this file.\nasync function filterHiddenClips(\n  clips: FeedClip[],\n  log?: { warn: (...a: unknown[]) => void },\n): Promise<FeedClip[]> {\n  const hidden = await getHiddenIds(clips.map((c) => c.id), log);\n  if (hidden.size === 0) return clips;\n  return clips.filter((c) => !hidden.has(c.id));\n}\n\n// \u2500\u2500 Dense pagination helper \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Scans `rawPool` starting at `cursor` (an index into the RAW unfiltered pool),\n// skips any clip whose id is in `hiddenIds`, and collects up to `limit` visible\n// clips. Returns the slice, the next raw-pool cursor (or null if exhausted), and\n// an approximate visible total so callers can set response metadata.\n//\n// Keeping the cursor in raw-pool space means that even when many items are\n// hidden, each page is always dense (full `limit` items) unless the pool is\n// genuinely exhausted, and the cursor arithmetic is stable across requests even\n// if the set of hidden clips changes between pages.\n\ninterface PaginationResult {\n  slice: FeedClip[];\n  nextCursor: number | null;\n  total: number;\n}\n\nfunction paginateWithSkip(\n  rawPool: FeedClip[],\n  hiddenIds: Set<string>,\n  cursor: number,\n  limit: number,\n): PaginationResult {\n  const slice: FeedClip[] = [];\n  let pos = cursor;\n\n  while (pos < rawPool.length && slice.length < limit) {\n    const clip = rawPool[pos];\n    if (clip && !hiddenIds.has(clip.id)) {\n      slice.push({ ...clip });\n    }\n    pos++;\n  }\n\n  // Advance cursor past any trailing hidden clips so the next page doesn't\n  // re-scan an already-exhausted tail.\n  while (pos < rawPool.length && hiddenIds.has(rawPool[pos]!.id)) {\n    pos++;\n  }\n\n  const nextCursor = pos < rawPool.length ? pos : null;\n\n  // Approximate count of visible clips from the full raw pool (cheap linear scan\n  // already done; no extra DB round-trip needed).\n  const total = rawPool.filter((c) => !hiddenIds.has(c.id)).length;\n\n  return { slice, nextCursor, total };\n}\n\n// \u2500\u2500 YouTube video ID extraction \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst YT_HOSTS = new Set([\"youtube.com\", \"www.youtube.com\", \"m.youtube.com\", \"youtu.be\"]);\n\nfunction extractYouTubeVideoId(url: string): string | null {\n  let parsed: URL;\n  try {\n    parsed = new URL(url);\n  } catch {\n    return null;\n  }\n  const host = parsed.hostname.toLowerCase();\n  if (!YT_HOSTS.has(host)) return null;\n\n  if (host === \"youtu.be\") {\n    const id = parsed.pathname.slice(1, 12);\n    return id.length === 11 ? id : null;\n  }\n\n  // /embed/{videoId}\n  const embedMatch = parsed.pathname.match(/\\/embed\\/([a-zA-Z0-9_-]{11})/);\n  if (embedMatch?.[1]) return embedMatch[1];\n\n  // /shorts/{videoId}\n  const shortsMatch = parsed.pathname.match(/\\/shorts\\/([a-zA-Z0-9_-]{11})/);\n  if (shortsMatch?.[1]) return shortsMatch[1];\n\n  // ?v={videoId}\n  const v = parsed.searchParams.get(\"v\");\n  if (v && /^[a-zA-Z0-9_-]{11}$/.test(v)) return v;\n\n  return null;\n}\n\n// \u2500\u2500 User-uploaded / AI-seeded videos from DB \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// Upper bound on how many DB videos enter the feed candidate pool. The pool is\n// paginated client-side via cursor, so this must cover the WHOLE catalog \u2014\n// otherwise videos beyond the newest N are excluded from the feed entirely and\n// never appear no matter how many are added. Sized well above the current\n// catalog (and the live-YouTube fetch in the same request dominates cost, so a\n// larger DB read here is negligible). If the catalog ever approaches this, move\n// to DB-level keyset pagination instead of raising it further.\nconst USER_VIDEO_FEED_POOL_LIMIT = 10000;\n\nasync function fetchUserVideoClips(\n  categoryFilter: \"hooks\" | \"shots\" | \"all\",\n  log?: { warn: (...a: unknown[]) => void },\n): Promise<FeedClip[]> {\n  try {\n    const baseQuery = db\n      .select({\n        id: userVideosTable.id,\n        title: userVideosTable.title,\n        creator: userVideosTable.creator,\n        creatorHandle: userVideosTable.creatorHandle,\n        videoUrl: userVideosTable.videoUrl,\n        thumbnailUrl: userVideosTable.thumbnailUrl,\n        species: userVideosTable.species,\n        locationState: userVideosTable.locationState,\n        weightSize: userVideosTable.weightSize,\n        category: userVideosTable.category,\n        description: userVideosTable.description,\n        sourcePlatform: userVideosTable.sourcePlatform,\n        sourceVideoId: userVideosTable.sourceVideoId,\n        sourceUrl: userVideosTable.sourceUrl,\n        creatorUrl: userVideosTable.creatorUrl,\n        embedUrl: userVideosTable.embedUrl,\n        ingestionSource: userVideosTable.ingestionSource,\n        rightsMetadata: userVideosTable.rightsMetadata,\n        retrievedAt: userVideosTable.retrievedAt,\n        createdAt: userVideosTable.createdAt,\n        enrichmentMetadata: userVideosTable.enrichmentMetadata,\n        videoFormat: userVideosTable.videoFormat,\n        durationSeconds: userVideosTable.durationSeconds,\n        viewCount: userVideosTable.viewCount,\n        externalLikeCount: userVideosTable.externalLikeCount,\n        relevanceScore: userVideosTable.relevanceScore,\n        publishedAt: userVideosTable.publishedAt,\n      })\n      .from(userVideosTable);\n\n    const rows = await (\n      categoryFilter === \"all\"\n        ? baseQuery.orderBy(desc(userVideosTable.createdAt)).limit(USER_VIDEO_FEED_POOL_LIMIT)\n        : baseQuery\n            .where(\n              or(\n                eq(userVideosTable.category, categoryFilter),\n                eq(userVideosTable.category, \"both\"),\n              ),\n            )\n            .orderBy(desc(userVideosTable.createdAt))\n            .limit(USER_VIDEO_FEED_POOL_LIMIT)\n    );\n\n    const dbIds = rows.map((v) => `db-${v.id}`);\n    let suppressedIds = new Set<string>();\n    if (dbIds.length > 0) {\n      try {\n        const suppressedRows = await db\n          .select({ contentId: contentVisibilityTable.contentId })\n          .from(contentVisibilityTable)\n          .where(\n            and(\n              inArray(contentVisibilityTable.contentId, dbIds),\n              eq(contentVisibilityTable.contentType, \"video\"),\n              ne(contentVisibilityTable.visibility, \"visible\"),\n            ),\n          );\n        suppressedIds = new Set(suppressedRows.map((r) => r.contentId));\n      } catch (err) {\n        log?.warn({ err }, \"Feed: user video visibility filter failed (non-fatal)\");\n      }\n    }\n\n    const videoIds = rows.map((v) => v.id);\n    const loadoutMap = await loadVideoLoadout(videoIds);\n\n    const platformSettings = await getFeedPlatformSettings();\n\n    return rows\n      .filter((v) => !suppressedIds.has(`db-${v.id}`))\n      .filter((row) => {\n        const key = normalizeFeedPlatform(row.sourcePlatform);\n        return platformSettings[key]?.enabled ?? true;\n      })\n      .filter((row) =>\n        isPlayableFeedUrl(row.videoUrl, {\n          sourcePlatform: row.sourcePlatform,\n          embedUrl: row.embedUrl,\n          sourceVideoId: row.sourceVideoId,\n          rightsMetadata: (row.rightsMetadata as Record<string, unknown> | null) ?? null,\n          durationSeconds: row.durationSeconds,\n        }),\n      )\n      .flatMap((row): FeedClip[] => {\n        const ytId = extractYouTubeVideoId(row.videoUrl);\n        const platform: \"youtube\" | \"direct\" = ytId ? \"youtube\" : \"direct\";\n        const cat =\n          row.category === \"hooks\" || row.category === \"shots\" || row.category === \"both\"\n            ? row.category\n            : \"both\";\n\n        const storedFormat =\n          row.videoFormat === \"hook\" || row.videoFormat === \"shot\" || row.videoFormat === \"video\"\n            ? row.videoFormat\n            : null;\n        const layout = inferVideoLayout({\n          videoUrl: row.videoUrl,\n          sourcePlatform: row.sourcePlatform,\n          videoFormat: storedFormat,\n          category: cat,\n        });\n\n        const enrichment = (row.enrichmentMetadata ?? {}) as VideoEnrichmentMetadata;\n        const attribution = enrichment.attribution\n          ? attributionForFeed({\n              platform: enrichment.attribution.platform ?? row.sourcePlatform,\n              creatorName: enrichment.attribution.creatorName ?? row.creator,\n              creatorHandle: enrichment.attribution.creatorHandle ?? row.creatorHandle,\n              creatorUrl: enrichment.attribution.creatorUrl ?? row.creatorUrl,\n              sourceUrl: enrichment.attribution.sourceUrl ?? row.sourceUrl,\n              originalUrl: enrichment.attribution.sourceUrl ?? row.sourceUrl,\n              originalTitle: enrichment.attribution.originalTitle ?? row.title,\n              license: enrichment.attribution.license ?? null,\n              playbackMethod: enrichment.attribution.playbackMethod ?? null,\n              embeddable: enrichment.attribution.embeddable ?? null,\n              retrievedAt:\n                enrichment.attribution.retrievedAt ??\n                row.retrievedAt?.toISOString() ??\n                row.createdAt?.toISOString() ??\n                new Date().toISOString(),\n              publishedAt: enrichment.attribution.publishedAt ?? row.publishedAt?.toISOString() ?? null,\n              ingestionSource: row.ingestionSource ?? null,\n              rightsMetadata: (row.rightsMetadata ?? {}) as Record<string, unknown>,\n            })\n          : {\n              platform: row.sourcePlatform ?? null,\n              creatorName: row.creator,\n              creatorHandle: row.creatorHandle,\n              creatorUrl: row.creatorUrl ?? null,\n              sourceUrl: row.sourceUrl ?? row.videoUrl,\n              license: null,\n              playbackMethod: null,\n              publishedAt: row.publishedAt?.toISOString() ?? null,\n            };\n\n        const rawLoadout = loadoutMap.get(row.id) ?? [];\n\n        const playbackUrl = resolveClientFeedVideoUrl({\n          id: row.id,\n          videoUrl: row.videoUrl,\n          sourcePlatform: row.sourcePlatform,\n          sourceVideoId: row.sourceVideoId,\n          rightsMetadata: (row.rightsMetadata as Record<string, unknown> | null) ?? null,\n          embedUrl: row.embedUrl,\n        });\n\n        if (!playbackUrl) return [];\n\n        return [{\n          id: `db-${row.id}`,\n          title: row.title,\n          creator: row.creator,\n          creatorHandle: row.creatorHandle,\n          description: row.description ?? \"\",\n          category: cat,\n          videoUrl: playbackUrl,\n          embedUrl: row.embedUrl,\n          sourceVideoId: row.sourceVideoId,\n          platform,\n          sourcePlatform: row.sourcePlatform,\n          sourceUrl: row.sourceUrl ?? attribution.sourceUrl,\n          videoFormat: layout.format,\n          poster: row.thumbnailUrl ?? undefined,\n          metadata: {\n            species: row.species ?? \"Unknown\",\n            locationState: row.locationState ?? \"Unknown\",\n            weightSize: row.weightSize ?? \"\u2014\",\n          },\n          likes: row.externalLikeCount ?? 0,\n          comments: 0,\n          shares: 0,\n          viewCount: row.viewCount ?? undefined,\n          externalLikeCount: row.externalLikeCount ?? undefined,\n          relevanceScore: row.relevanceScore ?? undefined,\n          publishedAt: row.publishedAt?.toISOString() ?? null,\n          attribution,\n          loadout: rawLoadout.map((item) => ({\n            id: String(item.id),\n            name: String(item.name),\n            brand: String(item.brand),\n            category: String(item.category),\n            subcategory: String(item.subcategory),\n            price: typeof item.price === \"number\" ? item.price : null,\n            imageUrl: typeof item.imageUrl === \"string\" ? item.imageUrl : null,\n            affiliateLink: typeof item.affiliateLink === \"string\" ? item.affiliateLink : null,\n            confidence: typeof item.confidence === \"number\" ? item.confidence : 0,\n          })),\n          topics: enrichment.topics ?? [],\n        }];\n      })\n      .filter(passesFeedGatekeeper);\n  } catch (err) {\n    log?.warn({ err }, \"Feed: failed to fetch user videos (non-fatal)\");\n    return [];\n  }\n}\n\nfunction mergeFeedPools(primary: FeedClip[], secondary: FeedClip[]): FeedClip[] {\n  const seen = new Set(primary.map((c) => c.id));\n  const merged = [...primary];\n  const skipDemoSeed = primary.length >= 5;\n  for (const clip of secondary) {\n    if (!clip.videoUrl?.trim()) continue;\n    if (skipDemoSeed && clip.id.startsWith(\"demo-\")) continue;\n    if (!seen.has(clip.id)) {\n      seen.add(clip.id);\n      merged.push(clip);\n    }\n  }\n  return merged;\n}\n\n// \u2500\u2500 Engagement helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction getClientIp(req: Request): string {\n  const xff = req.headers[\"x-forwarded-for\"];\n  if (xff) {\n    const first = Array.isArray(xff) ? xff[0] : xff.split(\",\")[0];\n    return (first ?? \"\").trim();\n  }\n  return req.socket?.remoteAddress ?? \"unknown\";\n}\n\nfunction buildInClause(col: Column, ids: string[]) {\n  if (ids.length === 1) return eq(col, ids[0]!);\n  return inArray(col, ids);\n}\n\nconst commentRateMap = new Map<string, number[]>();\nconst COMMENT_RATE_LIMIT = 20;\nconst COMMENT_RATE_WINDOW_MS = 3_600_000;\n\nfunction isCommentRateLimited(key: string): boolean {\n  const now = Date.now();\n  const hits = (commentRateMap.get(key) ?? []).filter((t) => now - t < COMMENT_RATE_WINDOW_MS);\n  hits.push(now);\n  commentRateMap.set(key, hits);\n  return hits.length > COMMENT_RATE_LIMIT;\n}\n\nconst likeRateMap = new Map<string, number[]>();\nconst LIKE_RATE_LIMIT = 60;\nconst LIKE_RATE_WINDOW_MS = 3_600_000;\n\nfunction isLikeRateLimited(key: string): boolean {\n  const now = Date.now();\n  const hits = (likeRateMap.get(key) ?? []).filter((t) => now - t < LIKE_RATE_WINDOW_MS);\n  hits.push(now);\n  likeRateMap.set(key, hits);\n  return hits.length > LIKE_RATE_LIMIT;\n}\n\nfunction clipIdStartsFresh(id: string): boolean {\n  return id.startsWith(\"db-\");\n}\n\nfunction toRankableClips(clips: FeedClip[]): (FeedClip & { isFresh?: boolean })[] {\n  return clips.map((c) => ({\n    ...c,\n    isFresh: clipIdStartsFresh(c.id),\n    species: c.metadata?.species,\n    description: c.description,\n  }));\n}\n\nasync function fetchUserCategoryAffinity(\n  userId: string,\n  categoryByClipId: Map<string, FeedClip[\"category\"]>,\n  log?: { warn: (...a: unknown[]) => void },\n): Promise<CategoryAffinity | undefined> {\n  try {\n    const [likes, comments] = await Promise.all([\n      db.select({ clipId: feedLikesTable.clipId }).from(feedLikesTable).where(eq(feedLikesTable.userId, userId)),\n      db.select({ clipId: feedCommentsTable.clipId }).from(feedCommentsTable).where(eq(feedCommentsTable.userId, userId)),\n    ]);\n\n    let hooks = 0;\n    let shots = 0;\n    for (const row of [...likes, ...comments]) {\n      const cat = categoryByClipId.get(row.clipId);\n      if (cat === \"hooks\" || cat === \"both\") hooks += 1;\n      if (cat === \"shots\" || cat === \"both\") shots += 1;\n    }\n\n    const sum = hooks + shots;\n    if (sum <= 0) return undefined;\n    return { hooks: hooks / sum, shots: shots / sum };\n  } catch (err) {\n    log?.warn({ err }, \"Feed: user affinity lookup failed (non-fatal)\");\n    return undefined;\n  }\n}\n\nasync function fetchUserProfileType(\n  userId: string,\n  log?: { warn: (...a: unknown[]) => void },\n): Promise<AudienceType | null> {\n  try {\n    const rows = await db\n      .select({ profileType: userAgreementsTable.profileType })\n      .from(userAgreementsTable)\n      .where(eq(userAgreementsTable.userId, userId))\n      .orderBy(desc(userAgreementsTable.acceptedAt))\n      .limit(1);\n    const raw = rows[0]?.profileType;\n    return raw ? normalizeAudienceType(raw) : null;\n  } catch (err) {\n    log?.warn({ err }, \"Feed: user profile type lookup failed (non-fatal)\");\n    return null;\n  }\n}\n\nasync function resolveHeroAudience(\n  req: Request,\n  userId: string | undefined,\n  log?: { warn: (...a: unknown[]) => void },\n): Promise<AudienceType> {\n  if (userId) {\n    const profileType = await fetchUserProfileType(userId, log);\n    if (profileType) return profileType;\n  }\n  return parseAudienceFromRequest(req);\n}\n\ninterface LoadedFeedPool {\n  mergedClips: FeedClip[];\n  source: \"youtube\" | \"seed\";\n  hiddenIds: Set<string>;\n  categoryCounts: { all: number; hooks: number; shots: number };\n}\n\nasync function loadMergedFeedPool(\n  _categoryFilter: \"hooks\" | \"shots\" | \"all\",\n  log?: { warn: (...a: unknown[]) => void },\n): Promise<LoadedFeedPool> {\n  // Always load the full catalog \u2014 category pill counts must not depend on the active filter.\n  const userClips = await fetchUserVideoClips(\"all\", log);\n  const hiddenIds = await getHiddenIds(userClips.map((c) => c.id), log);\n  const allVisible = userClips.filter((c) => !hiddenIds.has(c.id));\n\n  const countVisible = (pool: FeedClip[]) => ({\n    all: pool.length,\n    hooks: pool.filter((c) => c.category === \"hooks\" || c.category === \"both\").length,\n    shots: pool.filter((c) => c.category === \"shots\" || c.category === \"both\").length,\n  });\n\n  // YouTube catalog mode: serve only ingested DB videos \u2014 no live API search merge.\n  if (feedUsesDbCatalogOnly()) {\n    return {\n      mergedClips: userClips,\n      source: userClips.length > 0 ? \"youtube\" : \"seed\",\n      hiddenIds,\n      categoryCounts: countVisible(allVisible),\n    };\n  }\n\n  const apiKey = process.env[\"YOUTUBE_API_KEY\"];\n\n  if (!apiKey) {\n    const seedPool = mergeFeedPools(userClips, SEED_CLIPS);\n    const seedHidden = await getHiddenIds(seedPool.map((c) => c.id), log);\n    const seedVisible = seedPool.filter((c) => !seedHidden.has(c.id));\n    return {\n      mergedClips: seedPool,\n      source: userClips.length > 0 ? \"youtube\" : \"seed\",\n      hiddenIds: seedHidden,\n      categoryCounts: countVisible(seedVisible),\n    };\n  }\n\n  try {\n    const allByCategory = await Promise.all(\n      CATEGORIES.map((cat) => fetchCategoryClips(apiKey, cat, log)),\n    );\n\n    const seen = new Set<string>();\n    const interleaved: FeedClip[] = [];\n    const maxLen = Math.max(...allByCategory.map((c) => c.length), 0);\n    for (let i = 0; i < maxLen; i++) {\n      for (const catClips of allByCategory) {\n        if (i < catClips.length) {\n          const clip = catClips[i];\n          if (clip && !seen.has(clip.id)) {\n            seen.add(clip.id);\n            interleaved.push({ ...clip });\n          }\n        }\n      }\n    }\n\n    const allClips = interleaved.length > 0 ? interleaved : SEED_CLIPS;\n    const mergedClips = mergeFeedPools(userClips, allClips);\n    const mergedHidden = await getHiddenIds(mergedClips.map((c) => c.id), log);\n    const mergedVisible = mergedClips.filter((c) => !mergedHidden.has(c.id));\n\n    return {\n      mergedClips,\n      source: interleaved.length > 0 ? \"youtube\" : \"seed\",\n      hiddenIds: mergedHidden,\n      categoryCounts: countVisible(mergedVisible),\n    };\n  } catch (err) {\n    log?.warn({ err }, \"Feed pool load failed \u2014 DB catalog fallback\");\n    const seedPool = mergeFeedPools(userClips, SEED_CLIPS);\n    const seedHidden = await getHiddenIds(seedPool.map((c) => c.id), log);\n    const seedVisible = seedPool.filter((c) => !seedHidden.has(c.id));\n    return {\n      mergedClips: seedPool,\n      source: userClips.length > 0 ? \"youtube\" : \"seed\",\n      hiddenIds: seedHidden,\n      categoryCounts: countVisible(seedVisible),\n    };\n  }\n}\n\nfunction applyPersonalizedOrder(\n  pool: FeedClip[],\n  ctx: PersonalizationContext,\n  hiddenIds: Set<string>,\n): FeedClip[] {\n  const visible = pool.filter((c) => !hiddenIds.has(c.id));\n  return rankFeedPool(toRankableClips(visible), ctx);\n}\n\nasync function mergeEngagementCounts(clips: FeedClip[]): Promise<void> {\n  if (clips.length === 0) return;\n  const clipIds = clips.map((c) => c.id);\n\n  const [likeCountRows, commentCountRows] = await Promise.all([\n    db\n      .select({ clipId: feedLikesTable.clipId, cnt: count(feedLikesTable.id) })\n      .from(feedLikesTable)\n      .where(buildInClause(feedLikesTable.clipId, clipIds))\n      .groupBy(feedLikesTable.clipId),\n    db\n      .select({ clipId: feedCommentsTable.clipId, cnt: count(feedCommentsTable.id) })\n      .from(feedCommentsTable)\n      .where(buildInClause(feedCommentsTable.clipId, clipIds))\n      .groupBy(feedCommentsTable.clipId),\n  ]);\n\n  const likeMap = new Map(likeCountRows.map((r) => [r.clipId, Number(r.cnt)]));\n  const commentMap = new Map(commentCountRows.map((r) => [r.clipId, Number(r.cnt)]));\n\n  for (const clip of clips) {\n    clip.likes = clip.likes + (likeMap.get(clip.id) ?? 0);\n    clip.comments = clip.comments + (commentMap.get(clip.id) ?? 0);\n  }\n}\n\n// \u2500\u2500 GET /api/feed \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/\", async (req: Request, res: Response) => {\n  const cursorRaw = parseInt((req.query[\"cursor\"] as string | undefined) ?? \"0\", 10);\n  const cursor = Number.isFinite(cursorRaw) && cursorRaw >= 0 ? cursorRaw : 0;\n  const limitRaw = parseInt((req.query[\"limit\"] as string | undefined) ?? \"8\", 10);\n  const limit = Number.isFinite(limitRaw) ? Math.min(20, Math.max(1, limitRaw)) : 8;\n\n  const categoryParam = (req.query[\"category\"] as string | undefined)?.toLowerCase();\n  const categoryFilter: \"hooks\" | \"shots\" | \"all\" =\n    categoryParam === \"hooks\" || categoryParam === \"shots\" ? categoryParam : \"all\";\n\n  const searchQuery = normalizeFeedSearchQuery((req.query[\"q\"] as string | undefined) ?? \"\");\n  const personalize = req.query[\"personalize\"] === \"1\" || req.query[\"personalize\"] === \"true\";\n\n  const log = req.log as { warn: (...a: unknown[]) => void } | undefined;\n\n  try {\n    const { mergedClips, source, hiddenIds, categoryCounts } = await loadMergedFeedPool(\n      categoryFilter,\n      log,\n    );\n\n    let searchPool = filterFeedClipsBySearch(\n      categoryFilter === \"all\"\n        ? mergedClips\n        : mergedClips.filter((c) => c.category === categoryFilter || c.category === \"both\"),\n      searchQuery,\n    );\n\n    if (personalize && !searchQuery) {\n      const ctx = buildPersonalizationContext({ query: req.query, headers: req.headers });\n      const userId = getSessionUser(req)?.userId;\n      if (userId) {\n        const categoryByClipId = new Map(mergedClips.map((c) => [c.id, c.category]));\n        ctx.userAffinity = await fetchUserCategoryAffinity(userId, categoryByClipId, log);\n      }\n      searchPool = applyPersonalizedOrder(searchPool, ctx, hiddenIds);\n    }\n\n    const { slice, nextCursor, total } = paginateWithSkip(searchPool, hiddenIds, cursor, limit);\n\n    try {\n      await mergeEngagementCounts(slice);\n    } catch (err) {\n      req.log?.warn({ err }, \"Feed: failed to merge engagement counts (non-fatal)\");\n    }\n\n    res.json({ clips: slice, nextCursor, total, source, categoryCounts });\n  } catch (err) {\n    req.log?.error({ err }, \"Feed route threw\");\n    res.status(500).json({ error: \"Failed to load feed\" });\n  }\n});\n\nfunction toDiscoverClip(clip: FeedClip) {\n  const hydrated = hydrateClipPoster(clip);\n  return {\n    ...hydrated,\n    thumbnailUrl: hydrated.poster ?? null,\n  };\n}\n\n// \u2500\u2500 GET /api/feed/discover \u2014 curated rows for the Discover hub \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/discover\", async (req: Request, res: Response) => {\n  const log = req.log as { warn: (...a: unknown[]) => void } | undefined;\n\n  try {\n    const { mergedClips, source, hiddenIds, categoryCounts } = await loadMergedFeedPool(\"all\", log);\n    const visible = mergedClips.filter((c) => !hiddenIds.has(c.id));\n\n    const ctx = buildPersonalizationContext({ query: req.query, headers: req.headers });\n    const userId = getSessionUser(req)?.userId;\n    if (userId) {\n      const categoryByClipId = new Map(mergedClips.map((c) => [c.id, c.category]));\n      ctx.userAffinity = await fetchUserCategoryAffinity(userId, categoryByClipId, log);\n    }\n\n    const rankable = toRankableClips(visible);\n    const forYou = rankFeedPool(rankable, ctx).slice(0, 12);\n    const trending = selectTrending(rankable, 12);\n    const hooks = rankFeedPool(toRankableClips(filterByCategory(visible, \"hooks\")), ctx).slice(0, 10);\n    const shots = rankFeedPool(toRankableClips(filterByCategory(visible, \"shots\")), ctx).slice(0, 10);\n\n    const allRows = [...forYou, ...trending, ...hooks, ...shots];\n    const engagementById = new Map<string, FeedClip>();\n    for (const clip of [...allRows, ...visible]) {\n      engagementById.set(clip.id, clip);\n    }\n    try {\n      await mergeEngagementCounts([...engagementById.values()]);\n    } catch (err) {\n      req.log?.warn({ err }, \"Discover: engagement merge failed (non-fatal)\");\n    }\n\n    const audience = await resolveHeroAudience(req, userId, log);\n    // Rotate the hero on a time cadence so it refreshes instead of staying fixed,\n    // while still surfacing the most popular (real-engagement) clips. Mixing the\n    // per-session seed keeps some variety across concurrent visitors; the time\n    // bucket guarantees the slot turns over even for a single viewer.\n    const HERO_ROTATION_WINDOW_MS = 6 * 60 * 60 * 1000; // 6 hours\n    const heroTimeBucket = Math.floor(Date.now() / HERO_ROTATION_WINDOW_MS);\n    const heroRotationSeed = `${ctx.sessionSeed}:${heroTimeBucket}`;\n    const featuredClip = selectHeroFeaturedClip(toRankableClips(visible), audience, {\n      rotationSeed: heroRotationSeed,\n    });\n\n    res.json({\n      forYou: forYou.map(toDiscoverClip),\n      trending: trending.map(toDiscoverClip),\n      hooks: hooks.map(toDiscoverClip),\n      shots: shots.map(toDiscoverClip),\n      featured: featuredClip ? toDiscoverClip(featuredClip) : null,\n      audience,\n      categoryCounts,\n      source,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Discover route threw\");\n    res.status(500).json({ error: \"Failed to load discover feed\" });\n  }\n});\n\n// \u2500\u2500 POST /api/feed \u2014 persist a user-uploaded video (auth-gated) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ntype PostFeedBody = {\n  title?: unknown;\n  creator?: unknown;\n  creatorHandle?: unknown;\n  videoUrl?: unknown;\n  thumbnailUrl?: unknown;\n  thumbnailKey?: unknown;\n  species?: unknown;\n  locationState?: unknown;\n  locationCountry?: unknown;\n  weightSize?: unknown;\n  category?: unknown;\n  description?: unknown;\n  uploadSessionId?: unknown;\n  videoFormat?: unknown;\n};\n\nfunction isStr(v: unknown, max: number): v is string {\n  return typeof v === \"string\" && v.length > 0 && v.length <= max;\n}\nfunction isOptStr(v: unknown, max: number): v is string | null | undefined {\n  return v == null || (typeof v === \"string\" && v.length <= max);\n}\n\n\nrouter.post(\"/\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const body = req.body as PostFeedBody;\n  if (!isStr(body.title, 200) || !isStr(body.creator, 100) || !isStr(body.creatorHandle, 100) || !isStr(body.videoUrl, 2000)) {\n    res.status(400).json({ error: \"title, creator, creatorHandle, and videoUrl are required strings\" });\n    return;\n  }\n  if (!isOptStr(body.thumbnailUrl, 2000) || !isOptStr(body.thumbnailKey, 50) || !isOptStr(body.species, 100) || !isOptStr(body.locationState, 100) || !isOptStr(body.locationCountry, 100) || !isOptStr(body.weightSize, 100) || !isOptStr(body.description, 1000) || !isOptStr(body.uploadSessionId, 100)) {\n    res.status(400).json({ error: \"Invalid optional fields\" });\n    return;\n  }\n  const allowedCategories = [\"hooks\", \"shots\", \"both\", \"unassigned\"];\n  const category = body.category == null ? \"both\" : (typeof body.category === \"string\" && allowedCategories.includes(body.category) ? body.category : null);\n  if (category === null) {\n    res.status(400).json({ error: \"category must be 'hooks', 'shots', 'both', or 'unassigned'\" });\n    return;\n  }\n\n  if (!isUploadableVideoUrl(body.videoUrl as string)) {\n    res.status(400).json({\n      error: \"invalid_video_url\",\n      message: \"videoUrl must point to a playable video file or supported video platform link \u2014 images and photo posts are not allowed\",\n    });\n    return;\n  }\n\n  const allowedFormats = [\"hook\", \"shot\", \"video\"] as const;\n  const bodyFormat =\n    typeof body.videoFormat === \"string\" && allowedFormats.includes(body.videoFormat as (typeof allowedFormats)[number])\n      ? (body.videoFormat as (typeof allowedFormats)[number])\n      : null;\n\n  const data = {\n    title: body.title as string,\n    creator: body.creator as string,\n    creatorHandle: body.creatorHandle as string,\n    videoUrl: body.videoUrl as string,\n    thumbnailUrl: (body.thumbnailUrl as string | null | undefined) ?? null,\n    thumbnailKey: (body.thumbnailKey as string | undefined) ?? \"deer\",\n    species: (body.species as string | null | undefined) ?? null,\n    locationState: (body.locationState as string | null | undefined) ?? null,\n    locationCountry: (body.locationCountry as string | null | undefined) ?? null,\n    weightSize: (body.weightSize as string | null | undefined) ?? null,\n    category,\n    description: (body.description as string | null | undefined) ?? null,\n    uploadSessionId: (body.uploadSessionId as string | null | undefined) ?? null,\n    videoFormat: bodyFormat ?? inferVideoFormatForUpload(body.videoUrl as string),\n  };\n\n  try {\n    const existingRows = await db\n      .select({ id: userVideosTable.id, videoUrl: userVideosTable.videoUrl })\n      .from(userVideosTable);\n    const duplicate = findExistingVideoByUrl(data.videoUrl, existingRows);\n    if (duplicate) {\n      res.status(409).json({\n        error: \"duplicate_video\",\n        message: \"This video is already in the library\",\n        existingId: duplicate.id,\n        videoId: `db-${duplicate.id}`,\n        duplicateKey: duplicateKeyForUrl(data.videoUrl),\n      });\n      return;\n    }\n\n    const rows = await db\n      .insert(userVideosTable)\n      .values({\n        userId: userId,\n        title: data.title,\n        creator: data.creator,\n        creatorHandle: data.creatorHandle,\n        videoUrl: data.videoUrl,\n        thumbnailUrl: data.thumbnailUrl ?? null,\n        thumbnailKey: data.thumbnailKey ?? \"deer\",\n        species: data.species ?? null,\n        locationState: data.locationState ?? null,\n        locationCountry: data.locationCountry ?? null,\n        weightSize: data.weightSize ?? null,\n        category: data.category ?? \"both\",\n        description: data.description ?? null,\n        uploadSessionId: data.uploadSessionId ?? null,\n        videoFormat: data.videoFormat,\n        postProcessStatus: \"pending\",\n        sourceUrl: data.videoUrl,\n        retrievedAt: new Date(),\n      })\n      .returning({ id: userVideosTable.id });\n\n    const id = rows[0]?.id;\n    if (id) {\n      void runPostProcessWorker({ videoIds: [id], limit: 1 }).catch((ppErr) => {\n        req.log?.warn({ err: ppErr, videoId: id }, \"Video post-process enqueue failed\");\n      });\n    }\n    res.status(201).json({ id, videoId: `db-${id}` });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to persist user video\");\n    res.status(500).json({ error: \"Failed to save video\" });\n  }\n});\n\n// \u2500\u2500 GET/PATCH/POST /api/feed/:id/detected-products \u2014 UGC gear review \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/:id/detected-products\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const videoId = parseInt(String(req.params.id ?? \"\"), 10);\n  if (!Number.isFinite(videoId) || videoId <= 0) {\n    res.status(400).json({ error: \"Invalid video id\" });\n    return;\n  }\n\n  try {\n    const [video] = await db\n      .select({\n        id: userVideosTable.id,\n        userId: userVideosTable.userId,\n        enrichmentMetadata: userVideosTable.enrichmentMetadata,\n      })\n      .from(userVideosTable)\n      .where(eq(userVideosTable.id, videoId))\n      .limit(1);\n\n    if (!video) {\n      res.status(404).json({ error: \"Video not found\" });\n      return;\n    }\n    if (video.userId !== userId) {\n      res.status(403).json({ error: \"Forbidden\" });\n      return;\n    }\n\n    const products = await db\n      .select()\n      .from(videoDetectedProductsTable)\n      .where(eq(videoDetectedProductsTable.videoId, videoId))\n      .orderBy(desc(videoDetectedProductsTable.confidence));\n\n    const meta = (video.enrichmentMetadata ?? {}) as VideoEnrichmentMetadata;\n    res.json({\n      videoId,\n      postProcessTopics: meta.topics ?? [],\n      products,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to load detected products\");\n    res.status(500).json({ error: \"Failed to load detected products\" });\n  }\n});\n\nrouter.patch(\"/:id/detected-products/:productId\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const videoId = parseInt(String(req.params.id ?? \"\"), 10);\n  const productId = String(req.params.productId ?? \"\");\n  if (!Number.isFinite(videoId) || videoId <= 0 || !productId) {\n    res.status(400).json({ error: \"Invalid video or product id\" });\n    return;\n  }\n\n  const body = (req.body ?? {}) as {\n    status?: \"confirmed\" | \"rejected\" | \"detected\";\n    name?: string;\n    brand?: string;\n    category?: string;\n  };\n\n  try {\n    const [video] = await db\n      .select({ userId: userVideosTable.userId })\n      .from(userVideosTable)\n      .where(eq(userVideosTable.id, videoId))\n      .limit(1);\n\n    if (!video) {\n      res.status(404).json({ error: \"Video not found\" });\n      return;\n    }\n    if (video.userId !== userId) {\n      res.status(403).json({ error: \"Forbidden\" });\n      return;\n    }\n\n    const updates: Record<string, unknown> = { updatedAt: new Date() };\n    if (body.status === \"confirmed\" || body.status === \"rejected\" || body.status === \"detected\") {\n      updates.status = body.status;\n    }\n    if (typeof body.name === \"string\" && body.name.trim()) updates.name = body.name.trim();\n    if (typeof body.brand === \"string\") updates.brand = body.brand.trim();\n    if (typeof body.category === \"string\" && body.category.trim()) updates.category = body.category.trim();\n\n    const [updated] = await db\n      .update(videoDetectedProductsTable)\n      .set(updates)\n      .where(\n        and(\n          eq(videoDetectedProductsTable.videoId, videoId),\n          eq(videoDetectedProductsTable.id, productId),\n        ),\n      )\n      .returning();\n\n    if (!updated) {\n      res.status(404).json({ error: \"Product not found\" });\n      return;\n    }\n\n    res.json({ ok: true, product: updated });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to update detected product\");\n    res.status(500).json({ error: \"Failed to update detected product\" });\n  }\n});\n\nrouter.post(\"/:id/detected-products\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const videoId = parseInt(String(req.params.id ?? \"\"), 10);\n  if (!Number.isFinite(videoId) || videoId <= 0) {\n    res.status(400).json({ error: \"Invalid video id\" });\n    return;\n  }\n\n  const body = (req.body ?? {}) as { name?: string; brand?: string; category?: string };\n  if (!body.name?.trim()) {\n    res.status(400).json({ error: \"name is required\" });\n    return;\n  }\n\n  try {\n    const [video] = await db\n      .select({ userId: userVideosTable.userId })\n      .from(userVideosTable)\n      .where(eq(userVideosTable.id, videoId))\n      .limit(1);\n\n    if (!video) {\n      res.status(404).json({ error: \"Video not found\" });\n      return;\n    }\n    if (video.userId !== userId) {\n      res.status(403).json({ error: \"Forbidden\" });\n      return;\n    }\n\n    const [product] = await db\n      .insert(videoDetectedProductsTable)\n      .values({\n        id: crypto.randomUUID(),\n        videoId,\n        name: body.name.trim(),\n        brand: body.brand?.trim() ?? \"\",\n        category: body.category?.trim() ?? \"Other\",\n        confidence: 100,\n        searchQuery: body.name.trim(),\n        detectionSource: \"manual\",\n        status: \"confirmed\",\n        evidence: { source: \"user_tag\" },\n      })\n      .returning();\n\n    res.status(201).json({ ok: true, product });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to add detected product\");\n    res.status(500).json({ error: \"Failed to add detected product\" });\n  }\n});\n\n// \u2500\u2500 DELETE /api/feed/:id \u2014 remove a video (owner-only, auth-gated) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.delete(\"/:id\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const idRaw = parseInt(String(req.params[\"id\"] ?? \"\"), 10);\n  if (!Number.isFinite(idRaw) || idRaw <= 0) {\n    res.status(400).json({ error: \"Invalid video id\" });\n    return;\n  }\n\n  try {\n    const rows = await db\n      .select({ id: userVideosTable.id, userId: userVideosTable.userId })\n      .from(userVideosTable)\n      .where(eq(userVideosTable.id, idRaw))\n      .limit(1);\n\n    const row = rows[0];\n    if (!row) {\n      res.status(404).json({ error: \"Video not found\" });\n      return;\n    }\n    if (row.userId !== userId) {\n      res.status(403).json({ error: \"You do not own this video\" });\n      return;\n    }\n\n    await db.delete(userVideosTable).where(eq(userVideosTable.id, idRaw));\n    res.status(200).json({ deleted: true, id: idRaw });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to delete user video\");\n    res.status(500).json({ error: \"Failed to delete video\" });\n  }\n});\n\n// \u2500\u2500 PATCH /api/feed/:id \u2014 edit title/species/description/category/location/weight (owner-only) \u2500\n\ntype PatchFeedBody = {\n  title?: unknown;\n  species?: unknown;\n  description?: unknown;\n  category?: unknown;\n  pinned?: unknown;\n  locationState?: unknown;\n  weightSize?: unknown;\n};\n\nrouter.patch(\"/:id\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const idRaw = parseInt(String(req.params[\"id\"] ?? \"\"), 10);\n  if (!Number.isFinite(idRaw) || idRaw <= 0) {\n    res.status(400).json({ error: \"Invalid video id\" });\n    return;\n  }\n\n  const body = req.body as PatchFeedBody;\n\n  const allowedCategories = [\"hooks\", \"shots\", \"both\", \"unassigned\"];\n  const updates: Partial<{\n    title: string;\n    species: string | null;\n    description: string | null;\n    category: string;\n    pinnedAt: Date | null;\n    locationState: string | null;\n    weightSize: string | null;\n  }> = {};\n\n  if (body.title !== undefined) {\n    if (!isStr(body.title, 200)) {\n      res.status(400).json({ error: \"title must be a non-empty string \u2264 200 chars\" });\n      return;\n    }\n    updates.title = body.title as string;\n  }\n  if (body.species !== undefined) {\n    if (!isOptStr(body.species, 100)) {\n      res.status(400).json({ error: \"species must be a string \u2264 100 chars or null\" });\n      return;\n    }\n    updates.species = (body.species as string | null | undefined) ?? null;\n  }\n  if (body.description !== undefined) {\n    if (!isOptStr(body.description, 1000)) {\n      res.status(400).json({ error: \"description must be a string \u2264 1000 chars or null\" });\n      return;\n    }\n    updates.description = (body.description as string | null | undefined) ?? null;\n  }\n  if (body.category !== undefined) {\n    if (typeof body.category !== \"string\" || !allowedCategories.includes(body.category)) {\n      res.status(400).json({ error: \"category must be 'hooks', 'shots', 'both', or 'unassigned'\" });\n      return;\n    }\n    updates.category = body.category as string;\n  }\n  if (body.pinned !== undefined) {\n    if (typeof body.pinned !== \"boolean\") {\n      res.status(400).json({ error: \"pinned must be a boolean\" });\n      return;\n    }\n    updates.pinnedAt = body.pinned ? new Date() : null;\n  }\n  if (body.locationState !== undefined) {\n    if (!isOptStr(body.locationState, 100)) {\n      res.status(400).json({ error: \"locationState must be a string \u2264 100 chars or null\" });\n      return;\n    }\n    updates.locationState = (body.locationState as string | null | undefined) ?? null;\n  }\n  if (body.weightSize !== undefined) {\n    if (!isOptStr(body.weightSize, 100)) {\n      res.status(400).json({ error: \"weightSize must be a string \u2264 100 chars or null\" });\n      return;\n    }\n    updates.weightSize = (body.weightSize as string | null | undefined) ?? null;\n  }\n\n  if (Object.keys(updates).length === 0) {\n    res.status(400).json({ error: \"No updatable fields provided (title, species, description, category, pinned, locationState, weightSize)\" });\n    return;\n  }\n\n  try {\n    const rows = await db\n      .select({ id: userVideosTable.id, userId: userVideosTable.userId })\n      .from(userVideosTable)\n      .where(eq(userVideosTable.id, idRaw))\n      .limit(1);\n\n    const row = rows[0];\n    if (!row) {\n      res.status(404).json({ error: \"Video not found\" });\n      return;\n    }\n    if (row.userId !== userId) {\n      res.status(403).json({ error: \"You do not own this video\" });\n      return;\n    }\n\n    const updated = await db\n      .update(userVideosTable)\n      .set(updates)\n      .where(eq(userVideosTable.id, idRaw))\n      .returning();\n\n    res.status(200).json({ video: updated[0] });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to update user video\");\n    res.status(500).json({ error: \"Failed to update video\" });\n  }\n});\n\nasync function computePublicCategoryCounts(\n  log?: { warn: (...a: unknown[]) => void },\n): Promise<{ all: number; hooks: number; shots: number }> {\n  try {\n    const platformSettings = await getFeedPlatformSettings();\n    const rows = await db\n      .select({\n        id: userVideosTable.id,\n        category: userVideosTable.category,\n        sourcePlatform: userVideosTable.sourcePlatform,\n        videoUrl: userVideosTable.videoUrl,\n        embedUrl: userVideosTable.embedUrl,\n        sourceVideoId: userVideosTable.sourceVideoId,\n        rightsMetadata: userVideosTable.rightsMetadata,\n        durationSeconds: userVideosTable.durationSeconds,\n      })\n      .from(userVideosTable);\n\n    if (rows.length === 0) {\n      return { all: 0, hooks: 0, shots: 0 };\n    }\n\n    const hiddenIds = await getHiddenIdsInChunks(rows.map((r) => `db-${r.id}`), log);\n    const visible = rows.filter(\n      (r) =>\n        !hiddenIds.has(`db-${r.id}`) &&\n        isPlatformEnabledInSettings(r.sourcePlatform, platformSettings) &&\n        isPlayableFeedUrl(r.videoUrl, {\n          sourcePlatform: r.sourcePlatform,\n          embedUrl: r.embedUrl,\n          sourceVideoId: r.sourceVideoId,\n          rightsMetadata: (r.rightsMetadata as Record<string, unknown> | null) ?? null,\n          durationSeconds: r.durationSeconds,\n        }),\n    );\n    return {\n      all: visible.length,\n      hooks: visible.filter((c) => c.category === \"hooks\" || c.category === \"both\").length,\n      shots: visible.filter((c) => c.category === \"shots\" || c.category === \"both\").length,\n    };\n  } catch (err) {\n    log?.warn({ err }, \"Public feed: category count query failed\");\n    return { all: 0, hooks: 0, shots: 0 };\n  }\n}\n\nfunction publicRowIsVisible(\n  row: {\n    sourcePlatform: string | null;\n    videoUrl: string;\n    embedUrl: string | null;\n    sourceVideoId: string | null;\n    rightsMetadata: unknown;\n    durationSeconds: number | null;\n  },\n  platformSettings: Awaited<ReturnType<typeof getFeedPlatformSettings>>,\n): boolean {\n  if (!isPlatformEnabledInSettings(row.sourcePlatform, platformSettings)) return false;\n  return isPlayableFeedUrl(row.videoUrl, {\n    sourcePlatform: row.sourcePlatform,\n    embedUrl: row.embedUrl,\n    sourceVideoId: row.sourceVideoId,\n    rightsMetadata: (row.rightsMetadata as Record<string, unknown> | null) ?? null,\n    durationSeconds: row.durationSeconds,\n  });\n}\n\n/** Query hidden IDs in batches so large libraries do not blow inArray limits. */\nasync function getHiddenIdsInChunks(\n  clipIds: string[],\n  log?: { warn: (...a: unknown[]) => void },\n  chunkSize = 500,\n): Promise<Set<string>> {\n  const hidden = new Set<string>();\n  if (clipIds.length === 0) return hidden;\n  for (let i = 0; i < clipIds.length; i += chunkSize) {\n    const chunk = clipIds.slice(i, i + chunkSize);\n    const chunkHidden = await getHiddenIds(chunk, log);\n    chunkHidden.forEach((id) => hidden.add(id));\n  }\n  return hidden;\n}\n\n// \u2500\u2500 GET /api/feed/public \u2014 all users' videos, newest first, paginated \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// No authentication required \u2014 anyone can browse the community feed.\n\nrouter.get(\"/public\", async (req: Request, res: Response) => {\n  const cursorRaw = parseInt((req.query[\"cursor\"] as string | undefined) ?? \"0\", 10);\n  const cursor = Number.isFinite(cursorRaw) && cursorRaw >= 0 ? cursorRaw : 0;\n  const limitRaw = parseInt((req.query[\"limit\"] as string | undefined) ?? \"20\", 10);\n  const limit = Number.isFinite(limitRaw) ? Math.min(50, Math.max(1, limitRaw)) : 20;\n\n  const categoryParam = (req.query[\"category\"] as string | undefined)?.toLowerCase();\n  const categoryFilter: \"hooks\" | \"shots\" | \"all\" =\n    categoryParam === \"hooks\" || categoryParam === \"shots\" ? categoryParam : \"all\";\n\n  const searchQuery = normalizeFeedSearchQuery((req.query[\"q\"] as string | undefined) ?? \"\");\n  const speciesFilter = (req.query[\"species\"] as string | undefined)?.trim() ?? \"\";\n  const creatorFilter = (req.query[\"creator\"] as string | undefined)\n    ?.trim()\n    .replace(/^@/, \"\")\n    .toLowerCase() ?? \"\";\n  const sortParam = (req.query[\"sort\"] as string | undefined)?.toLowerCase() ?? \"recent\";\n\n  const publicOrderBy =\n    sortParam === \"trending\"\n      ? [desc(userVideosTable.viewCount), desc(userVideosTable.createdAt)]\n      : sortParam === \"relevance\"\n        ? [desc(userVideosTable.relevanceScore), desc(userVideosTable.createdAt)]\n        : sortParam === \"published\"\n          ? [desc(userVideosTable.publishedAt), desc(userVideosTable.createdAt)]\n          : [desc(userVideosTable.createdAt)];\n\n  const log = req.log as { warn: (...a: unknown[]) => void } | undefined;\n  const platformSettings = await getFeedPlatformSettings();\n\n  type PublicRow = {\n    id: number;\n    userId: string;\n    title: string;\n    creator: string | null;\n    creatorHandle: string | null;\n    videoUrl: string;\n    thumbnailUrl: string | null;\n    thumbnailKey: string | null;\n    species: string | null;\n    locationState: string | null;\n    locationCountry: string | null;\n    weightSize: string | null;\n    category: string | null;\n    description: string | null;\n    sourcePlatform: string | null;\n    videoFormat: string | null;\n    embedUrl: string | null;\n    sourceVideoId: string | null;\n    rightsMetadata: unknown;\n    durationSeconds: number | null;\n    createdAt: Date;\n  };\n\n  const selectFields = {\n    id: userVideosTable.id,\n    userId: userVideosTable.userId,\n    title: userVideosTable.title,\n    creator: userVideosTable.creator,\n    creatorHandle: userVideosTable.creatorHandle,\n    videoUrl: userVideosTable.videoUrl,\n    thumbnailUrl: userVideosTable.thumbnailUrl,\n    thumbnailKey: userVideosTable.thumbnailKey,\n    species: userVideosTable.species,\n    locationState: userVideosTable.locationState,\n    locationCountry: userVideosTable.locationCountry,\n    weightSize: userVideosTable.weightSize,\n    category: userVideosTable.category,\n    description: userVideosTable.description,\n    sourcePlatform: userVideosTable.sourcePlatform,\n    videoFormat: userVideosTable.videoFormat,\n    embedUrl: userVideosTable.embedUrl,\n    sourceVideoId: userVideosTable.sourceVideoId,\n    rightsMetadata: userVideosTable.rightsMetadata,\n    durationSeconds: userVideosTable.durationSeconds,\n    createdAt: userVideosTable.createdAt,\n  };\n\n  const mapPublicVideo = (row: PublicRow) => {\n    const { userId: _uid, videoFormat, rightsMetadata, ...v } = row;\n    const format = inferVideoLayout({\n      videoUrl: v.videoUrl,\n      sourcePlatform: v.sourcePlatform,\n      videoFormat:\n        videoFormat === \"hook\" || videoFormat === \"shot\" || videoFormat === \"video\"\n          ? videoFormat\n          : null,\n      category: v.category,\n    }).format;\n\n    return serializePublicFeedVideo(\n      {\n        ...v,\n        videoFormat: format,\n        rightsMetadata: (rightsMetadata as Record<string, unknown> | null) ?? null,\n        durationSeconds: row.durationSeconds,\n      },\n      format,\n    );\n  };\n\n  const rowMatchesSearch = (row: PublicRow): boolean =>\n    matchesFeedSearch(\n      {\n        title: row.title,\n        description: row.description,\n        category: row.category,\n        species: row.species,\n        locationState: row.locationState,\n        locationCountry: row.locationCountry,\n        weightSize: row.weightSize,\n        creator: row.creator,\n        creatorHandle: row.creatorHandle,\n        videoFormat: row.videoFormat,\n        sourcePlatform: row.sourcePlatform,\n        videoUrl: row.videoUrl,\n      },\n      searchQuery,\n    );\n\n  const rowMatchesFilters = (row: PublicRow): boolean => {\n    if (speciesFilter && !(row.species ?? \"\").toLowerCase().includes(speciesFilter.toLowerCase())) {\n      return false;\n    }\n    if (creatorFilter) {\n      const handle = (row.creatorHandle ?? \"\").replace(/^@/, \"\").toLowerCase();\n      const name = (row.creator ?? \"\").toLowerCase();\n      if (handle !== creatorFilter && !handle.includes(creatorFilter) && !name.includes(creatorFilter)) {\n        return false;\n      }\n    }\n    return true;\n  };\n\n  const publicFilterConditions = [\n    ...(speciesFilter ? [ilike(userVideosTable.species, `%${speciesFilter}%`)] : []),\n    ...(creatorFilter\n      ? [\n          or(\n            ilike(userVideosTable.creatorHandle, `%${creatorFilter}%`),\n            ilike(userVideosTable.creator, `%${creatorFilter}%`),\n          ),\n        ]\n      : []),\n  ];\n\n  try {\n    let page: PublicRow[] = [];\n    let nextCursor: number | null = null;\n    let searchTotal: number | undefined;\n\n    if (searchQuery) {\n      const allRows: PublicRow[] =\n        categoryFilter === \"all\"\n          ? await db\n              .select(selectFields)\n              .from(userVideosTable)\n              .orderBy(desc(userVideosTable.createdAt))\n              .limit(500)\n          : await db\n              .select(selectFields)\n              .from(userVideosTable)\n              .where(\n                or(\n                  eq(userVideosTable.category, categoryFilter),\n                  eq(userVideosTable.category, \"both\"),\n                ),\n              )\n              .orderBy(desc(userVideosTable.createdAt))\n              .limit(500);\n\n      const hiddenIds = await getHiddenIdsInChunks(\n        allRows.map((v) => `db-${v.id}`),\n        log,\n      );\n      const matched = allRows.filter(\n        (row) =>\n          !hiddenIds.has(`db-${row.id}`) &&\n          publicRowIsVisible(row, platformSettings) &&\n          rowMatchesSearch(row) &&\n          rowMatchesFilters(row),\n      );\n      page = matched.slice(cursor, cursor + limit);\n      nextCursor = cursor + limit < matched.length ? cursor + limit : null;\n      searchTotal = matched.length;\n    } else {\n      const categoryWhere =\n        categoryFilter === \"all\"\n          ? undefined\n          : or(\n              eq(userVideosTable.category, categoryFilter),\n              eq(userVideosTable.category, \"both\"),\n            );\n      const combinedWhere =\n        categoryWhere && publicFilterConditions.length > 0\n          ? and(categoryWhere, ...publicFilterConditions)\n          : categoryWhere ?? (publicFilterConditions.length > 0 ? and(...publicFilterConditions) : undefined);\n\n      // Scan forward until we have enough playable rows (hidden / non-video rows are skipped).\n      const scanBatch = Math.max(limit * 3, 48);\n      let scanOffset = cursor;\n      let dbExhausted = false;\n      page = [];\n\n      while (page.length < limit + 1 && !dbExhausted) {\n        const batch: PublicRow[] = combinedWhere\n          ? await db\n              .select(selectFields)\n              .from(userVideosTable)\n              .where(combinedWhere)\n              .orderBy(...publicOrderBy)\n              .offset(scanOffset)\n              .limit(scanBatch)\n          : await db\n              .select(selectFields)\n              .from(userVideosTable)\n              .orderBy(...publicOrderBy)\n              .offset(scanOffset)\n              .limit(scanBatch);\n\n        if (batch.length === 0) {\n          dbExhausted = true;\n          break;\n        }\n\n        const batchIds = batch.map((v) => `db-${v.id}`);\n        let batchHidden = new Set<string>();\n        if (batchIds.length > 0) {\n          try {\n            batchHidden = await getHiddenIdsInChunks(batchIds, log);\n          } catch (err) {\n            log?.warn({ err }, \"Public feed: visibility filter failed during scan\");\n          }\n        }\n\n        for (const row of batch) {\n          if (batchHidden.has(`db-${row.id}`)) continue;\n          if (!publicRowIsVisible(row, platformSettings)) continue;\n          try {\n            if (mapPublicVideo(row)) page.push(row);\n          } catch (err) {\n            log?.warn({ err, videoId: row.id }, \"Public feed: skipping malformed video row\");\n          }\n          if (page.length >= limit + 1) break;\n        }\n\n        scanOffset += batch.length;\n        if (batch.length < scanBatch) dbExhausted = true;\n      }\n\n      const hasMore = page.length > limit || !dbExhausted;\n      page = hasMore ? page.slice(0, limit) : page;\n      nextCursor = hasMore ? scanOffset : null;\n    }\n\n    const dbIds = page.map((v) => `db-${v.id}`);\n    let suppressedIds = new Set<string>();\n    if (dbIds.length > 0) {\n      try {\n        const suppressedRows = await db\n          .select({ contentId: contentVisibilityTable.contentId })\n          .from(contentVisibilityTable)\n          .where(\n            and(\n              inArray(contentVisibilityTable.contentId, dbIds),\n              eq(contentVisibilityTable.contentType, \"video\"),\n              ne(contentVisibilityTable.visibility, \"visible\"),\n            ),\n          );\n        suppressedIds = new Set(suppressedRows.map((r) => r.contentId));\n      } catch (err) {\n        log?.warn({ err }, \"Public feed: visibility filter failed, serving unfiltered\");\n      }\n    }\n\n    const visible = page.filter((v) => !suppressedIds.has(`db-${v.id}`));\n\n    const videos = visible.flatMap((row) => {\n      try {\n        const mapped = mapPublicVideo(row);\n        return mapped ? [mapped] : [];\n      } catch (err) {\n        log?.warn({ err, videoId: row.id }, \"Public feed: skipping malformed video row\");\n        return [];\n      }\n    });\n\n    let categoryCounts: { all: number; hooks: number; shots: number } | undefined;\n    if (cursor === 0 && !searchQuery) {\n      try {\n        categoryCounts = await computePublicCategoryCounts(log);\n      } catch (err) {\n        log?.warn({ err }, \"Public feed: categoryCounts failed (non-fatal)\");\n      }\n    }\n    res.json({\n      videos,\n      nextCursor,\n      sort: sortParam,\n      ...(searchQuery && searchTotal !== undefined ? { searchTotal } : {}),\n      ...(categoryCounts ? { categoryCounts } : {}),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to fetch public feed\");\n    res.status(500).json({ error: \"Failed to fetch public feed\" });\n  }\n});\n\n// \u2500\u2500 GET /api/feed/public/video/:id \u2014 single public community video \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/public/video/:id\", async (req: Request, res: Response) => {\n  const idParam = req.params.id;\n  const idRaw = parseInt(Array.isArray(idParam) ? idParam[0] ?? \"\" : idParam, 10);\n  if (!Number.isFinite(idRaw) || idRaw <= 0) {\n    res.status(400).json({ error: \"Invalid video id\" });\n    return;\n  }\n\n  const log = req.log as { warn: (...a: unknown[]) => void } | undefined;\n\n  try {\n    const [row] = await db\n      .select()\n      .from(userVideosTable)\n      .where(eq(userVideosTable.id, idRaw))\n      .limit(1);\n\n    if (!row) {\n      res.status(404).json({ error: \"Video not found\" });\n      return;\n    }\n\n    const contentId = `db-${row.id}`;\n    try {\n      const [hidden] = await db\n        .select({ contentId: contentVisibilityTable.contentId })\n        .from(contentVisibilityTable)\n        .where(\n          and(\n            eq(contentVisibilityTable.contentId, contentId),\n            eq(contentVisibilityTable.contentType, \"video\"),\n            ne(contentVisibilityTable.visibility, \"visible\"),\n          ),\n        )\n        .limit(1);\n\n      if (hidden) {\n        res.status(404).json({ error: \"Video not found\" });\n        return;\n      }\n    } catch {\n      // visibility table optional\n    }\n\n    const format = inferVideoLayout({\n      videoUrl: row.videoUrl,\n      sourcePlatform: row.sourcePlatform,\n      videoFormat:\n        row.videoFormat === \"hook\" || row.videoFormat === \"shot\" || row.videoFormat === \"video\"\n          ? row.videoFormat\n          : null,\n      category: row.category,\n    }).format;\n\n    const serialized = serializePublicFeedVideo(\n      {\n        id: row.id,\n        title: row.title,\n        creator: row.creator,\n        creatorHandle: row.creatorHandle,\n        videoUrl: row.videoUrl,\n        thumbnailUrl: row.thumbnailUrl,\n        species: row.species,\n        locationState: row.locationState,\n        weightSize: row.weightSize,\n        category: row.category,\n        description: row.description,\n        sourcePlatform: row.sourcePlatform,\n        videoFormat: format,\n        embedUrl: row.embedUrl,\n        sourceVideoId: row.sourceVideoId,\n        rightsMetadata: (row.rightsMetadata as Record<string, unknown> | null) ?? null,\n        durationSeconds: row.durationSeconds,\n        createdAt: row.createdAt,\n      },\n      format,\n    );\n\n    if (!serialized) {\n      res.status(404).json({ error: \"Video is not playable\" });\n      return;\n    }\n\n    res.json(serialized);\n  } catch (err) {\n    log?.warn({ err }, \"Failed to fetch public video\");\n    res.status(500).json({ error: \"Failed to fetch video\" });\n  }\n});\n\n// \u2500\u2500 GET /api/feed/likes \u2014 fetch clip IDs the authenticated user has liked \u2500\u2500\u2500\u2500\u2500\n// auth-gated. Returns { likedClipIds: string[] }.\n// Optional ?clipIds=id1,id2,...  (comma-separated, max 100) to filter to a\n// specific set \u2014 useful when a client already knows which IDs are on-screen.\n// Without the filter, returns up to 500 of the user's liked clip IDs (enough\n// to cover any realistic session).\n\nrouter.get(\"/likes\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Sign in to view your liked clips\" });\n    return;\n  }\n\n  const clipIdsParam = (req.query[\"clipIds\"] as string | undefined)?.trim();\n  let clipIdFilter: string[] | null = null;\n  if (clipIdsParam) {\n    const ids = clipIdsParam.split(\",\").map((s) => s.trim()).filter(Boolean);\n    if (ids.length > 100) {\n      res.status(400).json({ error: \"clipIds may contain at most 100 IDs\" });\n      return;\n    }\n    clipIdFilter = ids;\n  }\n\n  try {\n    const rows = clipIdFilter && clipIdFilter.length > 0\n      ? await db\n          .select({ clipId: feedLikesTable.clipId })\n          .from(feedLikesTable)\n          .where(and(eq(feedLikesTable.userId, userId), inArray(feedLikesTable.clipId, clipIdFilter)))\n      : await db\n          .select({ clipId: feedLikesTable.clipId })\n          .from(feedLikesTable)\n          .where(eq(feedLikesTable.userId, userId))\n          .limit(500);\n\n    res.json({ likedClipIds: rows.map((r) => r.clipId) });\n  } catch (err) {\n    req.log?.error({ err }, \"Feed: failed to fetch user liked clips\");\n    res.status(500).json({ error: \"Failed to fetch liked clips\" });\n  }\n});\n\n// \u2500\u2500 GET /api/feed/user \u2014 fetch authenticated user's own videos \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/user\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  try {\n    const videos = await db\n      .select()\n      .from(userVideosTable)\n      .where(eq(userVideosTable.userId, userId))\n      .orderBy(\n        sql`${userVideosTable.pinnedAt} DESC NULLS LAST`,\n        desc(userVideosTable.createdAt),\n      )\n      .limit(100);\n\n    // Enrich YouTube-linked videos with community import counts\n    const ytIdByRowIndex = new Map<number, string>();\n    const ytVideoIdSet = new Set<string>();\n    for (let i = 0; i < videos.length; i++) {\n      const vid = videos[i];\n      if (vid?.videoUrl) {\n        const ytId = extractYouTubeVideoId(vid.videoUrl);\n        if (ytId) {\n          ytIdByRowIndex.set(i, ytId);\n          ytVideoIdSet.add(ytId);\n        }\n      }\n    }\n    const ytVideoIds = [...ytVideoIdSet];\n\n    const importCountMap = new Map<string, number>();\n    if (ytVideoIds.length > 0) {\n      try {\n        // Count only OTHER users' imports (exclude the current user) so the\n        // badge text \"X others imported this\" is accurate.\n        const importRows = await db\n          .select({ videoId: youtubeImportsTable.videoId, cnt: count(youtubeImportsTable.id) })\n          .from(youtubeImportsTable)\n          .where(\n            and(\n              inArray(youtubeImportsTable.videoId, ytVideoIds),\n              ne(youtubeImportsTable.userId, userId),\n            ),\n          )\n          .groupBy(youtubeImportsTable.videoId);\n        for (const row of importRows) {\n          importCountMap.set(row.videoId, Number(row.cnt));\n        }\n      } catch (err) {\n        req.log?.warn({ err }, \"feed/user: import count enrichment failed (non-fatal)\");\n      }\n    }\n\n    const enriched = videos.map((v, i) => {\n      const ytId = ytIdByRowIndex.get(i);\n      const importCount = ytId ? (importCountMap.get(ytId) ?? 0) : 0;\n      return { ...v, importCount };\n    });\n\n    res.json({ videos: enriched });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to fetch user videos\");\n    res.status(500).json({ error: \"Failed to fetch videos\" });\n  }\n});\n\n// \u2500\u2500 GET /api/feed/:id/engagement \u2014 public like/comment counts + optional liked \u2500\n\nrouter.get(\"/:id/engagement\", async (req: Request, res: Response) => {\n  const clipId = (req.params as { id: string }).id;\n  if (!clipId?.trim() || clipId.length > 120) {\n    res.status(400).json({ error: \"Invalid clip ID\" });\n    return;\n  }\n\n  const userId = getSessionUser(req)?.userId;\n\n  try {\n    const [likeRow] = await db\n      .select({ cnt: count(feedLikesTable.id) })\n      .from(feedLikesTable)\n      .where(eq(feedLikesTable.clipId, clipId));\n\n    const [commentRow] = await db\n      .select({ cnt: count(feedCommentsTable.id) })\n      .from(feedCommentsTable)\n      .where(eq(feedCommentsTable.clipId, clipId));\n\n    let liked = false;\n    if (userId) {\n      const existing = await db\n        .select({ id: feedLikesTable.id })\n        .from(feedLikesTable)\n        .where(and(eq(feedLikesTable.clipId, clipId), eq(feedLikesTable.userId, userId)))\n        .limit(1);\n      liked = existing.length > 0;\n    }\n\n    res.json({\n      likes: Number(likeRow?.cnt ?? 0),\n      comments: Number(commentRow?.cnt ?? 0),\n      liked,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Feed: failed to fetch engagement\");\n    res.status(500).json({ error: \"Failed to fetch engagement\" });\n  }\n});\n\n// \u2500\u2500 POST /api/feed/:id/like \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// auth-gated. Toggles like on/off. Returns { liked, dbLikes }.\n\nrouter.post(\"/:id/like\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Sign in to like clips\" });\n    return;\n  }\n\n  if (isLikeRateLimited(userId)) {\n    res.status(429).json({ error: \"Too many likes. Try again later.\" });\n    return;\n  }\n\n  const clipId = (req.params as { id: string }).id;\n  if (!clipId?.trim() || clipId.length > 120) {\n    res.status(400).json({ error: \"Invalid clip ID\" });\n    return;\n  }\n\n  try {\n    const existing = await db\n      .select({ id: feedLikesTable.id })\n      .from(feedLikesTable)\n      .where(and(eq(feedLikesTable.clipId, clipId), eq(feedLikesTable.userId, userId)))\n      .limit(1);\n\n    let liked: boolean;\n    if (existing.length > 0) {\n      await db\n        .delete(feedLikesTable)\n        .where(and(eq(feedLikesTable.clipId, clipId), eq(feedLikesTable.userId, userId)));\n      liked = false;\n    } else {\n      await db.insert(feedLikesTable).values({ clipId, userId });\n      liked = true;\n    }\n\n    const [countRow] = await db\n      .select({ cnt: count(feedLikesTable.id) })\n      .from(feedLikesTable)\n      .where(eq(feedLikesTable.clipId, clipId));\n\n    res.json({ liked, dbLikes: Number(countRow?.cnt ?? 0) });\n  } catch (err) {\n    req.log?.error({ err }, \"Feed: failed to toggle like\");\n    res.status(500).json({ error: \"Failed to toggle like\" });\n  }\n});\n\n// \u2500\u2500 GET /api/feed/:id/comments \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Public. Returns latest 50 comments for a clip.\n\nrouter.get(\"/:id/comments\", async (req: Request, res: Response) => {\n  const clipId = (req.params as { id: string }).id;\n  if (!clipId?.trim() || clipId.length > 120) {\n    res.status(400).json({ error: \"Invalid clip ID\" });\n    return;\n  }\n\n  try {\n    const rows = await db\n      .select()\n      .from(feedCommentsTable)\n      .where(eq(feedCommentsTable.clipId, clipId))\n      .orderBy(desc(feedCommentsTable.createdAt))\n      .limit(50);\n\n    res.json({ comments: rows });\n  } catch (err) {\n    req.log?.error({ err }, \"Feed: failed to load comments\");\n    res.status(500).json({ error: \"Failed to load comments\" });\n  }\n});\n\n// \u2500\u2500 DELETE /api/feed/:id/comments/:commentId \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// auth-gated. Only the original author may delete their own comment.\n\nrouter.delete(\"/:id/comments/:commentId\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const { id: clipId, commentId: commentIdRaw } = req.params as { id: string; commentId: string };\n  if (!clipId?.trim() || clipId.length > 120) {\n    res.status(400).json({ error: \"Invalid clip ID\" });\n    return;\n  }\n  const commentId = parseInt(commentIdRaw, 10);\n  if (!Number.isFinite(commentId) || commentId <= 0) {\n    res.status(400).json({ error: \"Invalid comment ID\" });\n    return;\n  }\n\n  try {\n    const [deleted] = await db\n      .delete(feedCommentsTable)\n      .where(\n        and(\n          eq(feedCommentsTable.id, commentId),\n          eq(feedCommentsTable.clipId, clipId),\n          eq(feedCommentsTable.userId, userId),\n        ),\n      )\n      .returning({ id: feedCommentsTable.id });\n\n    if (!deleted) {\n      res.status(404).json({ error: \"Comment not found or not yours\" });\n      return;\n    }\n\n    res.json({ deleted: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Feed: failed to delete comment\");\n    res.status(500).json({ error: \"Failed to delete comment\" });\n  }\n});\n\n// \u2500\u2500 POST /api/feed/:id/comments \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// auth-gated. Post a comment (max 280 chars).\n\nrouter.post(\"/:id/comments\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Sign in to comment\" });\n    return;\n  }\n\n  const rateKey = userId ?? getClientIp(req);\n  if (isCommentRateLimited(rateKey)) {\n    res.status(429).json({ error: \"Too many comments. Try again later.\" });\n    return;\n  }\n\n  const clipId = (req.params as { id: string }).id;\n  if (!clipId?.trim() || clipId.length > 120) {\n    res.status(400).json({ error: \"Invalid clip ID\" });\n    return;\n  }\n\n  const ct = req.headers[\"content-type\"] ?? \"\";\n  if (!ct.includes(\"application/json\")) {\n    res.status(415).json({ error: \"Content-Type must be application/json\" });\n    return;\n  }\n\n  const body = req.body as { text?: string; userDisplay?: string };\n  const text = body?.text?.trim() ?? \"\";\n  const userDisplay = (body?.userDisplay ?? \"Hunter\").trim().slice(0, 50);\n\n  if (!text) {\n    res.status(400).json({ error: \"Comment text is required\" });\n    return;\n  }\n  if (text.length > 280) {\n    res.status(400).json({ error: \"Comment must be 280 characters or fewer\" });\n    return;\n  }\n\n  try {\n    const [row] = await db\n      .insert(feedCommentsTable)\n      .values({ clipId, userId, userDisplay, text })\n      .returning();\n\n    res.status(201).json({ comment: row });\n  } catch (err) {\n    req.log?.error({ err }, \"Feed: failed to insert comment\");\n    res.status(500).json({ error: \"Failed to post comment\" });\n  }\n});\n\nrouter.get(\"/playback/:clipId\", async (req: Request, res: Response) => {\n  const clipIdParam = req.params.clipId;\n  const clipId = Array.isArray(clipIdParam) ? clipIdParam[0] ?? \"\" : clipIdParam ?? \"\";\n  try {\n    await streamFeedPlayback(req, res, clipId);\n  } catch (err) {\n    req.log?.error({ err, clipId }, \"Feed: playback stream failed\");\n    if (!res.headersSent) res.status(500).json({ error: \"Playback stream failed\" });\n  }\n});\n\nrouter.post(\"/:id/refresh-playback\", async (req: Request, res: Response) => {\n  const clipId = (req.params as { id: string }).id;\n  const dbMatch = /^db-(\\d+)$/.exec(clipId);\n  if (!dbMatch) {\n    res.status(400).json({ error: \"Only catalog clips (db-*) support playback refresh\" });\n    return;\n  }\n\n  const videoId = Number.parseInt(dbMatch[1]!, 10);\n  if (!Number.isFinite(videoId)) {\n    res.status(400).json({ error: \"Invalid clip ID\" });\n    return;\n  }\n\n  try {\n    const [row] = await db\n      .select({\n        sourcePlatform: userVideosTable.sourcePlatform,\n        sourceVideoId: userVideosTable.sourceVideoId,\n        embedUrl: userVideosTable.embedUrl,\n      })\n      .from(userVideosTable)\n      .where(eq(userVideosTable.id, videoId))\n      .limit(1);\n\n    const platform = row?.sourcePlatform ?? null;\n    const result =\n      platform === \"tiktok\"\n        ? await refreshTikTokVideoPlayback(videoId, { force: true })\n        : await refreshInstagramVideoPlayback(videoId);\n\n    if (!result.ok) {\n      res.status(502).json(result);\n      return;\n    }\n\n    // The refresh just stored a fresh native CDN URL. Re-read the persisted\n    // rightsMetadata so resolveClientFeedVideoUrl's freshness check passes and\n    // we hand the browser the playable proxy path (not the embed-card fallback).\n    const [refreshed] = await db\n      .select({ rightsMetadata: userVideosTable.rightsMetadata })\n      .from(userVideosTable)\n      .where(eq(userVideosTable.id, videoId))\n      .limit(1);\n\n    const clientUrl =\n      row?.sourceVideoId?.trim() &&\n      (platform === \"tiktok\" || platform === \"instagram\")\n        ? feedPlaybackProxyPath(videoId)\n        : result.videoUrl && isNativePlaybackUrl(result.videoUrl)\n          ? resolveClientFeedVideoUrl({\n              id: videoId,\n              videoUrl: result.videoUrl,\n              sourcePlatform: platform,\n              sourceVideoId: row?.sourceVideoId,\n              rightsMetadata: (refreshed?.rightsMetadata as Record<string, unknown> | null) ?? null,\n              embedUrl: row?.embedUrl,\n            })\n          : null;\n    res.json({ ...result, videoUrl: clientUrl ?? undefined });\n  } catch (err) {\n    req.log?.error({ err, videoId }, \"Feed: playback refresh failed\");\n    res.status(500).json({ error: \"Playback refresh failed\" });\n  }\n});\n\nexport default router;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AttributeAction = exports.IgnoreCaseMode = exports.SelectorType = void 0;\nvar SelectorType;\n(function (SelectorType) {\n    SelectorType[\"Attribute\"] = \"attribute\";\n    SelectorType[\"Pseudo\"] = \"pseudo\";\n    SelectorType[\"PseudoElement\"] = \"pseudo-element\";\n    SelectorType[\"Tag\"] = \"tag\";\n    SelectorType[\"Universal\"] = \"universal\";\n    // Traversals\n    SelectorType[\"Adjacent\"] = \"adjacent\";\n    SelectorType[\"Child\"] = \"child\";\n    SelectorType[\"Descendant\"] = \"descendant\";\n    SelectorType[\"Parent\"] = \"parent\";\n    SelectorType[\"Sibling\"] = \"sibling\";\n    SelectorType[\"ColumnCombinator\"] = \"column-combinator\";\n})(SelectorType = exports.SelectorType || (exports.SelectorType = {}));\n/**\n * Modes for ignore case.\n *\n * This could be updated to an enum, and the object is\n * the current stand-in that will allow code to be updated\n * without big changes.\n */\nexports.IgnoreCaseMode = {\n    Unknown: null,\n    QuirksMode: \"quirks\",\n    IgnoreCase: true,\n    CaseSensitive: false,\n};\nvar AttributeAction;\n(function (AttributeAction) {\n    AttributeAction[\"Any\"] = \"any\";\n    AttributeAction[\"Element\"] = \"element\";\n    AttributeAction[\"End\"] = \"end\";\n    AttributeAction[\"Equals\"] = \"equals\";\n    AttributeAction[\"Exists\"] = \"exists\";\n    AttributeAction[\"Hyphen\"] = \"hyphen\";\n    AttributeAction[\"Not\"] = \"not\";\n    AttributeAction[\"Start\"] = \"start\";\n})(AttributeAction = exports.AttributeAction || (exports.AttributeAction = {}));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = exports.isTraversal = void 0;\nvar types_1 = require(\"./types\");\nvar reName = /^[^\\\\#]?(?:\\\\(?:[\\da-f]{1,6}\\s?|.)|[\\w\\-\\u00b0-\\uFFFF])+/;\nvar reEscape = /\\\\([\\da-f]{1,6}\\s?|(\\s)|.)/gi;\nvar actionTypes = new Map([\n    [126 /* Tilde */, types_1.AttributeAction.Element],\n    [94 /* Circumflex */, types_1.AttributeAction.Start],\n    [36 /* Dollar */, types_1.AttributeAction.End],\n    [42 /* Asterisk */, types_1.AttributeAction.Any],\n    [33 /* ExclamationMark */, types_1.AttributeAction.Not],\n    [124 /* Pipe */, types_1.AttributeAction.Hyphen],\n]);\n// Pseudos, whose data property is parsed as well.\nvar unpackPseudos = new Set([\n    \"has\",\n    \"not\",\n    \"matches\",\n    \"is\",\n    \"where\",\n    \"host\",\n    \"host-context\",\n]);\n/**\n * Checks whether a specific selector is a traversal.\n * This is useful eg. in swapping the order of elements that\n * are not traversals.\n *\n * @param selector Selector to check.\n */\nfunction isTraversal(selector) {\n    switch (selector.type) {\n        case types_1.SelectorType.Adjacent:\n        case types_1.SelectorType.Child:\n        case types_1.SelectorType.Descendant:\n        case types_1.SelectorType.Parent:\n        case types_1.SelectorType.Sibling:\n        case types_1.SelectorType.ColumnCombinator:\n            return true;\n        default:\n            return false;\n    }\n}\nexports.isTraversal = isTraversal;\nvar stripQuotesFromPseudos = new Set([\"contains\", \"icontains\"]);\n// Unescape function taken from https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L152\nfunction funescape(_, escaped, escapedWhitespace) {\n    var high = parseInt(escaped, 16) - 0x10000;\n    // NaN means non-codepoint\n    return high !== high || escapedWhitespace\n        ? escaped\n        : high < 0\n            ? // BMP codepoint\n                String.fromCharCode(high + 0x10000)\n            : // Supplemental Plane codepoint (surrogate pair)\n                String.fromCharCode((high >> 10) | 0xd800, (high & 0x3ff) | 0xdc00);\n}\nfunction unescapeCSS(str) {\n    return str.replace(reEscape, funescape);\n}\nfunction isQuote(c) {\n    return c === 39 /* SingleQuote */ || c === 34 /* DoubleQuote */;\n}\nfunction isWhitespace(c) {\n    return (c === 32 /* Space */ ||\n        c === 9 /* Tab */ ||\n        c === 10 /* NewLine */ ||\n        c === 12 /* FormFeed */ ||\n        c === 13 /* CarriageReturn */);\n}\n/**\n * Parses `selector`, optionally with the passed `options`.\n *\n * @param selector Selector to parse.\n * @param options Options for parsing.\n * @returns Returns a two-dimensional array.\n * The first dimension represents selectors separated by commas (eg. `sub1, sub2`),\n * the second contains the relevant tokens for that selector.\n */\nfunction parse(selector) {\n    var subselects = [];\n    var endIndex = parseSelector(subselects, \"\".concat(selector), 0);\n    if (endIndex < selector.length) {\n        throw new Error(\"Unmatched selector: \".concat(selector.slice(endIndex)));\n    }\n    return subselects;\n}\nexports.parse = parse;\nfunction parseSelector(subselects, selector, selectorIndex) {\n    var tokens = [];\n    function getName(offset) {\n        var match = selector.slice(selectorIndex + offset).match(reName);\n        if (!match) {\n            throw new Error(\"Expected name, found \".concat(selector.slice(selectorIndex)));\n        }\n        var name = match[0];\n        selectorIndex += offset + name.length;\n        return unescapeCSS(name);\n    }\n    function stripWhitespace(offset) {\n        selectorIndex += offset;\n        while (selectorIndex < selector.length &&\n            isWhitespace(selector.charCodeAt(selectorIndex))) {\n            selectorIndex++;\n        }\n    }\n    function readValueWithParenthesis() {\n        selectorIndex += 1;\n        var start = selectorIndex;\n        var counter = 1;\n        for (; counter > 0 && selectorIndex < selector.length; selectorIndex++) {\n            if (selector.charCodeAt(selectorIndex) ===\n                40 /* LeftParenthesis */ &&\n                !isEscaped(selectorIndex)) {\n                counter++;\n            }\n            else if (selector.charCodeAt(selectorIndex) ===\n                41 /* RightParenthesis */ &&\n                !isEscaped(selectorIndex)) {\n                counter--;\n            }\n        }\n        if (counter) {\n            throw new Error(\"Parenthesis not matched\");\n        }\n        return unescapeCSS(selector.slice(start, selectorIndex - 1));\n    }\n    function isEscaped(pos) {\n        var slashCount = 0;\n        while (selector.charCodeAt(--pos) === 92 /* BackSlash */)\n            slashCount++;\n        return (slashCount & 1) === 1;\n    }\n    function ensureNotTraversal() {\n        if (tokens.length > 0 && isTraversal(tokens[tokens.length - 1])) {\n            throw new Error(\"Did not expect successive traversals.\");\n        }\n    }\n    function addTraversal(type) {\n        if (tokens.length > 0 &&\n            tokens[tokens.length - 1].type === types_1.SelectorType.Descendant) {\n            tokens[tokens.length - 1].type = type;\n            return;\n        }\n        ensureNotTraversal();\n        tokens.push({ type: type });\n    }\n    function addSpecialAttribute(name, action) {\n        tokens.push({\n            type: types_1.SelectorType.Attribute,\n            name: name,\n            action: action,\n            value: getName(1),\n            namespace: null,\n            ignoreCase: \"quirks\",\n        });\n    }\n    /**\n     * We have finished parsing the current part of the selector.\n     *\n     * Remove descendant tokens at the end if they exist,\n     * and return the last index, so that parsing can be\n     * picked up from here.\n     */\n    function finalizeSubselector() {\n        if (tokens.length &&\n            tokens[tokens.length - 1].type === types_1.SelectorType.Descendant) {\n            tokens.pop();\n        }\n        if (tokens.length === 0) {\n            throw new Error(\"Empty sub-selector\");\n        }\n        subselects.push(tokens);\n    }\n    stripWhitespace(0);\n    if (selector.length === selectorIndex) {\n        return selectorIndex;\n    }\n    loop: while (selectorIndex < selector.length) {\n        var firstChar = selector.charCodeAt(selectorIndex);\n        switch (firstChar) {\n            // Whitespace\n            case 32 /* Space */:\n            case 9 /* Tab */:\n            case 10 /* NewLine */:\n            case 12 /* FormFeed */:\n            case 13 /* CarriageReturn */: {\n                if (tokens.length === 0 ||\n                    tokens[0].type !== types_1.SelectorType.Descendant) {\n                    ensureNotTraversal();\n                    tokens.push({ type: types_1.SelectorType.Descendant });\n                }\n                stripWhitespace(1);\n                break;\n            }\n            // Traversals\n            case 62 /* GreaterThan */: {\n                addTraversal(types_1.SelectorType.Child);\n                stripWhitespace(1);\n                break;\n            }\n            case 60 /* LessThan */: {\n                addTraversal(types_1.SelectorType.Parent);\n                stripWhitespace(1);\n                break;\n            }\n            case 126 /* Tilde */: {\n                addTraversal(types_1.SelectorType.Sibling);\n                stripWhitespace(1);\n                break;\n            }\n            case 43 /* Plus */: {\n                addTraversal(types_1.SelectorType.Adjacent);\n                stripWhitespace(1);\n                break;\n            }\n            // Special attribute selectors: .class, #id\n            case 46 /* Period */: {\n                addSpecialAttribute(\"class\", types_1.AttributeAction.Element);\n                break;\n            }\n            case 35 /* Hash */: {\n                addSpecialAttribute(\"id\", types_1.AttributeAction.Equals);\n                break;\n            }\n            case 91 /* LeftSquareBracket */: {\n                stripWhitespace(1);\n                // Determine attribute name and namespace\n                var name_1 = void 0;\n                var namespace = null;\n                if (selector.charCodeAt(selectorIndex) === 124 /* Pipe */) {\n                    // Equivalent to no namespace\n                    name_1 = getName(1);\n                }\n                else if (selector.startsWith(\"*|\", selectorIndex)) {\n                    namespace = \"*\";\n                    name_1 = getName(2);\n                }\n                else {\n                    name_1 = getName(0);\n                    if (selector.charCodeAt(selectorIndex) === 124 /* Pipe */ &&\n                        selector.charCodeAt(selectorIndex + 1) !==\n                            61 /* Equal */) {\n                        namespace = name_1;\n                        name_1 = getName(1);\n                    }\n                }\n                stripWhitespace(0);\n                // Determine comparison operation\n                var action = types_1.AttributeAction.Exists;\n                var possibleAction = actionTypes.get(selector.charCodeAt(selectorIndex));\n                if (possibleAction) {\n                    action = possibleAction;\n                    if (selector.charCodeAt(selectorIndex + 1) !==\n                        61 /* Equal */) {\n                        throw new Error(\"Expected `=`\");\n                    }\n                    stripWhitespace(2);\n                }\n                else if (selector.charCodeAt(selectorIndex) === 61 /* Equal */) {\n                    action = types_1.AttributeAction.Equals;\n                    stripWhitespace(1);\n                }\n                // Determine value\n                var value = \"\";\n                var ignoreCase = null;\n                if (action !== \"exists\") {\n                    if (isQuote(selector.charCodeAt(selectorIndex))) {\n                        var quote = selector.charCodeAt(selectorIndex);\n                        var sectionEnd = selectorIndex + 1;\n                        while (sectionEnd < selector.length &&\n                            (selector.charCodeAt(sectionEnd) !== quote ||\n                                isEscaped(sectionEnd))) {\n                            sectionEnd += 1;\n                        }\n                        if (selector.charCodeAt(sectionEnd) !== quote) {\n                            throw new Error(\"Attribute value didn't end\");\n                        }\n                        value = unescapeCSS(selector.slice(selectorIndex + 1, sectionEnd));\n                        selectorIndex = sectionEnd + 1;\n                    }\n                    else {\n                        var valueStart = selectorIndex;\n                        while (selectorIndex < selector.length &&\n                            ((!isWhitespace(selector.charCodeAt(selectorIndex)) &&\n                                selector.charCodeAt(selectorIndex) !==\n                                    93 /* RightSquareBracket */) ||\n                                isEscaped(selectorIndex))) {\n                            selectorIndex += 1;\n                        }\n                        value = unescapeCSS(selector.slice(valueStart, selectorIndex));\n                    }\n                    stripWhitespace(0);\n                    // See if we have a force ignore flag\n                    var forceIgnore = selector.charCodeAt(selectorIndex) | 0x20;\n                    // If the forceIgnore flag is set (either `i` or `s`), use that value\n                    if (forceIgnore === 115 /* LowerS */) {\n                        ignoreCase = false;\n                        stripWhitespace(1);\n                    }\n                    else if (forceIgnore === 105 /* LowerI */) {\n                        ignoreCase = true;\n                        stripWhitespace(1);\n                    }\n                }\n                if (selector.charCodeAt(selectorIndex) !==\n                    93 /* RightSquareBracket */) {\n                    throw new Error(\"Attribute selector didn't terminate\");\n                }\n                selectorIndex += 1;\n                var attributeSelector = {\n                    type: types_1.SelectorType.Attribute,\n                    name: name_1,\n                    action: action,\n                    value: value,\n                    namespace: namespace,\n                    ignoreCase: ignoreCase,\n                };\n                tokens.push(attributeSelector);\n                break;\n            }\n            case 58 /* Colon */: {\n                if (selector.charCodeAt(selectorIndex + 1) === 58 /* Colon */) {\n                    tokens.push({\n                        type: types_1.SelectorType.PseudoElement,\n                        name: getName(2).toLowerCase(),\n                        data: selector.charCodeAt(selectorIndex) ===\n                            40 /* LeftParenthesis */\n                            ? readValueWithParenthesis()\n                            : null,\n                    });\n                    continue;\n                }\n                var name_2 = getName(1).toLowerCase();\n                var data = null;\n                if (selector.charCodeAt(selectorIndex) ===\n                    40 /* LeftParenthesis */) {\n                    if (unpackPseudos.has(name_2)) {\n                        if (isQuote(selector.charCodeAt(selectorIndex + 1))) {\n                            throw new Error(\"Pseudo-selector \".concat(name_2, \" cannot be quoted\"));\n                        }\n                        data = [];\n                        selectorIndex = parseSelector(data, selector, selectorIndex + 1);\n                        if (selector.charCodeAt(selectorIndex) !==\n                            41 /* RightParenthesis */) {\n                            throw new Error(\"Missing closing parenthesis in :\".concat(name_2, \" (\").concat(selector, \")\"));\n                        }\n                        selectorIndex += 1;\n                    }\n                    else {\n                        data = readValueWithParenthesis();\n                        if (stripQuotesFromPseudos.has(name_2)) {\n                            var quot = data.charCodeAt(0);\n                            if (quot === data.charCodeAt(data.length - 1) &&\n                                isQuote(quot)) {\n                                data = data.slice(1, -1);\n                            }\n                        }\n                        data = unescapeCSS(data);\n                    }\n                }\n                tokens.push({ type: types_1.SelectorType.Pseudo, name: name_2, data: data });\n                break;\n            }\n            case 44 /* Comma */: {\n                finalizeSubselector();\n                tokens = [];\n                stripWhitespace(1);\n                break;\n            }\n            default: {\n                if (selector.startsWith(\"/*\", selectorIndex)) {\n                    var endIndex = selector.indexOf(\"*/\", selectorIndex + 2);\n                    if (endIndex < 0) {\n                        throw new Error(\"Comment was not terminated\");\n                    }\n                    selectorIndex = endIndex + 2;\n                    // Remove leading whitespace\n                    if (tokens.length === 0) {\n                        stripWhitespace(0);\n                    }\n                    break;\n                }\n                var namespace = null;\n                var name_3 = void 0;\n                if (firstChar === 42 /* Asterisk */) {\n                    selectorIndex += 1;\n                    name_3 = \"*\";\n                }\n                else if (firstChar === 124 /* Pipe */) {\n                    name_3 = \"\";\n                    if (selector.charCodeAt(selectorIndex + 1) === 124 /* Pipe */) {\n                        addTraversal(types_1.SelectorType.ColumnCombinator);\n                        stripWhitespace(2);\n                        break;\n                    }\n                }\n                else if (reName.test(selector.slice(selectorIndex))) {\n                    name_3 = getName(0);\n                }\n                else {\n                    break loop;\n                }\n                if (selector.charCodeAt(selectorIndex) === 124 /* Pipe */ &&\n                    selector.charCodeAt(selectorIndex + 1) !== 124 /* Pipe */) {\n                    namespace = name_3;\n                    if (selector.charCodeAt(selectorIndex + 1) ===\n                        42 /* Asterisk */) {\n                        name_3 = \"*\";\n                        selectorIndex += 2;\n                    }\n                    else {\n                        name_3 = getName(1);\n                    }\n                }\n                tokens.push(name_3 === \"*\"\n                    ? { type: types_1.SelectorType.Universal, namespace: namespace }\n                    : { type: types_1.SelectorType.Tag, name: name_3, namespace: namespace });\n            }\n        }\n    }\n    finalizeSubselector();\n    return selectorIndex;\n}\n", "\"use strict\";\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stringify = void 0;\nvar types_1 = require(\"./types\");\nvar attribValChars = [\"\\\\\", '\"'];\nvar pseudoValChars = __spreadArray(__spreadArray([], attribValChars, true), [\"(\", \")\"], false);\nvar charsToEscapeInAttributeValue = new Set(attribValChars.map(function (c) { return c.charCodeAt(0); }));\nvar charsToEscapeInPseudoValue = new Set(pseudoValChars.map(function (c) { return c.charCodeAt(0); }));\nvar charsToEscapeInName = new Set(__spreadArray(__spreadArray([], pseudoValChars, true), [\n    \"~\",\n    \"^\",\n    \"$\",\n    \"*\",\n    \"+\",\n    \"!\",\n    \"|\",\n    \":\",\n    \"[\",\n    \"]\",\n    \" \",\n    \".\",\n], false).map(function (c) { return c.charCodeAt(0); }));\n/**\n * Turns `selector` back into a string.\n *\n * @param selector Selector to stringify.\n */\nfunction stringify(selector) {\n    return selector\n        .map(function (token) { return token.map(stringifyToken).join(\"\"); })\n        .join(\", \");\n}\nexports.stringify = stringify;\nfunction stringifyToken(token, index, arr) {\n    switch (token.type) {\n        // Simple types\n        case types_1.SelectorType.Child:\n            return index === 0 ? \"> \" : \" > \";\n        case types_1.SelectorType.Parent:\n            return index === 0 ? \"< \" : \" < \";\n        case types_1.SelectorType.Sibling:\n            return index === 0 ? \"~ \" : \" ~ \";\n        case types_1.SelectorType.Adjacent:\n            return index === 0 ? \"+ \" : \" + \";\n        case types_1.SelectorType.Descendant:\n            return \" \";\n        case types_1.SelectorType.ColumnCombinator:\n            return index === 0 ? \"|| \" : \" || \";\n        case types_1.SelectorType.Universal:\n            // Return an empty string if the selector isn't needed.\n            return token.namespace === \"*\" &&\n                index + 1 < arr.length &&\n                \"name\" in arr[index + 1]\n                ? \"\"\n                : \"\".concat(getNamespace(token.namespace), \"*\");\n        case types_1.SelectorType.Tag:\n            return getNamespacedName(token);\n        case types_1.SelectorType.PseudoElement:\n            return \"::\".concat(escapeName(token.name, charsToEscapeInName)).concat(token.data === null\n                ? \"\"\n                : \"(\".concat(escapeName(token.data, charsToEscapeInPseudoValue), \")\"));\n        case types_1.SelectorType.Pseudo:\n            return \":\".concat(escapeName(token.name, charsToEscapeInName)).concat(token.data === null\n                ? \"\"\n                : \"(\".concat(typeof token.data === \"string\"\n                    ? escapeName(token.data, charsToEscapeInPseudoValue)\n                    : stringify(token.data), \")\"));\n        case types_1.SelectorType.Attribute: {\n            if (token.name === \"id\" &&\n                token.action === types_1.AttributeAction.Equals &&\n                token.ignoreCase === \"quirks\" &&\n                !token.namespace) {\n                return \"#\".concat(escapeName(token.value, charsToEscapeInName));\n            }\n            if (token.name === \"class\" &&\n                token.action === types_1.AttributeAction.Element &&\n                token.ignoreCase === \"quirks\" &&\n                !token.namespace) {\n                return \".\".concat(escapeName(token.value, charsToEscapeInName));\n            }\n            var name_1 = getNamespacedName(token);\n            if (token.action === types_1.AttributeAction.Exists) {\n                return \"[\".concat(name_1, \"]\");\n            }\n            return \"[\".concat(name_1).concat(getActionValue(token.action), \"=\\\"\").concat(escapeName(token.value, charsToEscapeInAttributeValue), \"\\\"\").concat(token.ignoreCase === null ? \"\" : token.ignoreCase ? \" i\" : \" s\", \"]\");\n        }\n    }\n}\nfunction getActionValue(action) {\n    switch (action) {\n        case types_1.AttributeAction.Equals:\n            return \"\";\n        case types_1.AttributeAction.Element:\n            return \"~\";\n        case types_1.AttributeAction.Start:\n            return \"^\";\n        case types_1.AttributeAction.End:\n            return \"$\";\n        case types_1.AttributeAction.Any:\n            return \"*\";\n        case types_1.AttributeAction.Not:\n            return \"!\";\n        case types_1.AttributeAction.Hyphen:\n            return \"|\";\n        case types_1.AttributeAction.Exists:\n            throw new Error(\"Shouldn't be here\");\n    }\n}\nfunction getNamespacedName(token) {\n    return \"\".concat(getNamespace(token.namespace)).concat(escapeName(token.name, charsToEscapeInName));\n}\nfunction getNamespace(namespace) {\n    return namespace !== null\n        ? \"\".concat(namespace === \"*\"\n            ? \"*\"\n            : escapeName(namespace, charsToEscapeInName), \"|\")\n        : \"\";\n}\nfunction escapeName(str, charsToEscape) {\n    var lastIdx = 0;\n    var ret = \"\";\n    for (var i = 0; i < str.length; i++) {\n        if (charsToEscape.has(str.charCodeAt(i))) {\n            ret += \"\".concat(str.slice(lastIdx, i), \"\\\\\").concat(str.charAt(i));\n            lastIdx = i + 1;\n        }\n    }\n    return ret.length > 0 ? ret + str.slice(lastIdx) : str;\n}\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stringify = exports.parse = exports.isTraversal = void 0;\n__exportStar(require(\"./types\"), exports);\nvar parse_1 = require(\"./parse\");\nObject.defineProperty(exports, \"isTraversal\", { enumerable: true, get: function () { return parse_1.isTraversal; } });\nObject.defineProperty(exports, \"parse\", { enumerable: true, get: function () { return parse_1.parse; } });\nvar stringify_1 = require(\"./stringify\");\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return stringify_1.stringify; } });\n", "module.exports = {\n\ttrueFunc: function trueFunc(){\n\t\treturn true;\n\t},\n\tfalseFunc: function falseFunc(){\n\t\treturn false;\n\t}\n};", "\"use strict\";\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n    this.encoder = encoder;\n    this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n    if (this.addBOM) {\n        str = BOMChar + str;\n        this.addBOM = false;\n    }\n\n    return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n    this.decoder = decoder;\n    this.pass = false;\n    this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n    var res = this.decoder.write(buf);\n    if (this.pass || !res)\n        return res;\n\n    if (res[0] === BOMChar) {\n        res = res.slice(1);\n        if (typeof this.options.stripBOM === 'function')\n            this.options.stripBOM();\n    }\n\n    this.pass = true;\n    return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n    return this.decoder.end();\n}\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n    // Encodings\n    utf8:   { type: \"_internal\", bomAware: true},\n    cesu8:  { type: \"_internal\", bomAware: true},\n    unicode11utf8: \"utf8\",\n\n    ucs2:   { type: \"_internal\", bomAware: true},\n    utf16le: \"ucs2\",\n\n    binary: { type: \"_internal\" },\n    base64: { type: \"_internal\" },\n    hex:    { type: \"_internal\" },\n\n    // Codec.\n    _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n    this.enc = codecOptions.encodingName;\n    this.bomAware = codecOptions.bomAware;\n\n    if (this.enc === \"base64\")\n        this.encoder = InternalEncoderBase64;\n    else if (this.enc === \"cesu8\") {\n        this.enc = \"utf8\"; // Use utf8 for decoding.\n        this.encoder = InternalEncoderCesu8;\n\n        // Add decoder for versions of Node not supporting CESU-8\n        if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '\uD83D\uDCA9') {\n            this.decoder = InternalDecoderCesu8;\n            this.defaultCharUnicode = iconv.defaultCharUnicode;\n        }\n    }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n    StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n    this.decoder = new StringDecoder(codec.enc);\n}\n\nInternalDecoder.prototype.write = function(buf) {\n    if (!Buffer.isBuffer(buf)) {\n        buf = Buffer.from(buf);\n    }\n\n    return this.decoder.write(buf);\n}\n\nInternalDecoder.prototype.end = function() {\n    return this.decoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n    this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n    return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n    this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n    str = this.prevStr + str;\n    var completeQuads = str.length - (str.length % 4);\n    this.prevStr = str.slice(completeQuads);\n    str = str.slice(0, completeQuads);\n\n    return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n    return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n    for (var i = 0; i < str.length; i++) {\n        var charCode = str.charCodeAt(i);\n        // Naive implementation, but it works because CESU-8 is especially easy\n        // to convert from UTF-16 (which all JS strings are encoded in).\n        if (charCode < 0x80)\n            buf[bufIdx++] = charCode;\n        else if (charCode < 0x800) {\n            buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n        else { // charCode will always be < 0x10000 in javascript.\n            buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n            buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n    }\n    return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n    this.acc = 0;\n    this.contBytes = 0;\n    this.accBytes = 0;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n    var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n        res = '';\n    for (var i = 0; i < buf.length; i++) {\n        var curByte = buf[i];\n        if ((curByte & 0xC0) !== 0x80) { // Leading byte\n            if (contBytes > 0) { // Previous code is invalid\n                res += this.defaultCharUnicode;\n                contBytes = 0;\n            }\n\n            if (curByte < 0x80) { // Single-byte code\n                res += String.fromCharCode(curByte);\n            } else if (curByte < 0xE0) { // Two-byte code\n                acc = curByte & 0x1F;\n                contBytes = 1; accBytes = 1;\n            } else if (curByte < 0xF0) { // Three-byte code\n                acc = curByte & 0x0F;\n                contBytes = 2; accBytes = 1;\n            } else { // Four or more are not supported for CESU-8.\n                res += this.defaultCharUnicode;\n            }\n        } else { // Continuation byte\n            if (contBytes > 0) { // We're waiting for it.\n                acc = (acc << 6) | (curByte & 0x3f);\n                contBytes--; accBytes++;\n                if (contBytes === 0) {\n                    // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n                    if (accBytes === 2 && acc < 0x80 && acc > 0)\n                        res += this.defaultCharUnicode;\n                    else if (accBytes === 3 && acc < 0x800)\n                        res += this.defaultCharUnicode;\n                    else\n                        // Actually add character.\n                        res += String.fromCharCode(acc);\n                }\n            } else { // Unexpected continuation byte\n                res += this.defaultCharUnicode;\n            }\n        }\n    }\n    this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n    return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n    var res = 0;\n    if (this.contBytes > 0)\n        res += this.defaultCharUnicode;\n    return res;\n}\n", "'use strict';\n\nvar Buffer = require('safer-buffer').Buffer;\n\n// == UTF32-LE/BE codec. ==========================================================\n\nexports._utf32 = Utf32Codec;\n\nfunction Utf32Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n    this.bomAware = true;\n    this.isLE = codecOptions.isLE;\n}\n\nexports.utf32le = { type: '_utf32', isLE: true };\nexports.utf32be = { type: '_utf32', isLE: false };\n\n// Aliases\nexports.ucs4le = 'utf32le';\nexports.ucs4be = 'utf32be';\n\nUtf32Codec.prototype.encoder = Utf32Encoder;\nUtf32Codec.prototype.decoder = Utf32Decoder;\n\n// -- Encoding\n\nfunction Utf32Encoder(options, codec) {\n    this.isLE = codec.isLE;\n    this.highSurrogate = 0;\n}\n\nUtf32Encoder.prototype.write = function(str) {\n    var src = Buffer.from(str, 'ucs2');\n    var dst = Buffer.alloc(src.length * 2);\n    var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE;\n    var offset = 0;\n\n    for (var i = 0; i < src.length; i += 2) {\n        var code = src.readUInt16LE(i);\n        var isHighSurrogate = (0xD800 <= code && code < 0xDC00);\n        var isLowSurrogate = (0xDC00 <= code && code < 0xE000);\n\n        if (this.highSurrogate) {\n            if (isHighSurrogate || !isLowSurrogate) {\n                // There shouldn't be two high surrogates in a row, nor a high surrogate which isn't followed by a low\n                // surrogate. If this happens, keep the pending high surrogate as a stand-alone semi-invalid character\n                // (technically wrong, but expected by some applications, like Windows file names).\n                write32.call(dst, this.highSurrogate, offset);\n                offset += 4;\n            }\n            else {\n                // Create 32-bit value from high and low surrogates;\n                var codepoint = (((this.highSurrogate - 0xD800) << 10) | (code - 0xDC00)) + 0x10000;\n\n                write32.call(dst, codepoint, offset);\n                offset += 4;\n                this.highSurrogate = 0;\n\n                continue;\n            }\n        }\n\n        if (isHighSurrogate)\n            this.highSurrogate = code;\n        else {\n            // Even if the current character is a low surrogate, with no previous high surrogate, we'll\n            // encode it as a semi-invalid stand-alone character for the same reasons expressed above for\n            // unpaired high surrogates.\n            write32.call(dst, code, offset);\n            offset += 4;\n            this.highSurrogate = 0;\n        }\n    }\n\n    if (offset < dst.length)\n        dst = dst.slice(0, offset);\n\n    return dst;\n};\n\nUtf32Encoder.prototype.end = function() {\n    // Treat any leftover high surrogate as a semi-valid independent character.\n    if (!this.highSurrogate)\n        return;\n\n    var buf = Buffer.alloc(4);\n\n    if (this.isLE)\n        buf.writeUInt32LE(this.highSurrogate, 0);\n    else\n        buf.writeUInt32BE(this.highSurrogate, 0);\n\n    this.highSurrogate = 0;\n\n    return buf;\n};\n\n// -- Decoding\n\nfunction Utf32Decoder(options, codec) {\n    this.isLE = codec.isLE;\n    this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0);\n    this.overflow = [];\n}\n\nUtf32Decoder.prototype.write = function(src) {\n    if (src.length === 0)\n        return '';\n\n    var i = 0;\n    var codepoint = 0;\n    var dst = Buffer.alloc(src.length + 4);\n    var offset = 0;\n    var isLE = this.isLE;\n    var overflow = this.overflow;\n    var badChar = this.badChar;\n\n    if (overflow.length > 0) {\n        for (; i < src.length && overflow.length < 4; i++)\n            overflow.push(src[i]);\n        \n        if (overflow.length === 4) {\n            // NOTE: codepoint is a signed int32 and can be negative.\n            // NOTE: We copied this block from below to help V8 optimize it (it works with array, not buffer).\n            if (isLE) {\n                codepoint = overflow[i] | (overflow[i+1] << 8) | (overflow[i+2] << 16) | (overflow[i+3] << 24);\n            } else {\n                codepoint = overflow[i+3] | (overflow[i+2] << 8) | (overflow[i+1] << 16) | (overflow[i] << 24);\n            }\n            overflow.length = 0;\n\n            offset = _writeCodepoint(dst, offset, codepoint, badChar);\n        }\n    }\n\n    // Main loop. Should be as optimized as possible.\n    for (; i < src.length - 3; i += 4) {\n        // NOTE: codepoint is a signed int32 and can be negative.\n        if (isLE) {\n            codepoint = src[i] | (src[i+1] << 8) | (src[i+2] << 16) | (src[i+3] << 24);\n        } else {\n            codepoint = src[i+3] | (src[i+2] << 8) | (src[i+1] << 16) | (src[i] << 24);\n        }\n        offset = _writeCodepoint(dst, offset, codepoint, badChar);\n    }\n\n    // Keep overflowing bytes.\n    for (; i < src.length; i++) {\n        overflow.push(src[i]);\n    }\n\n    return dst.slice(0, offset).toString('ucs2');\n};\n\nfunction _writeCodepoint(dst, offset, codepoint, badChar) {\n    // NOTE: codepoint is signed int32 and can be negative. We keep it that way to help V8 with optimizations.\n    if (codepoint < 0 || codepoint > 0x10FFFF) {\n        // Not a valid Unicode codepoint\n        codepoint = badChar;\n    } \n\n    // Ephemeral Planes: Write high surrogate.\n    if (codepoint >= 0x10000) {\n        codepoint -= 0x10000;\n\n        var high = 0xD800 | (codepoint >> 10);\n        dst[offset++] = high & 0xff;\n        dst[offset++] = high >> 8;\n\n        // Low surrogate is written below.\n        var codepoint = 0xDC00 | (codepoint & 0x3FF);\n    }\n\n    // Write BMP char or low surrogate.\n    dst[offset++] = codepoint & 0xff;\n    dst[offset++] = codepoint >> 8;\n\n    return offset;\n};\n\nUtf32Decoder.prototype.end = function() {\n    this.overflow.length = 0;\n};\n\n// == UTF-32 Auto codec =============================================================\n// Decoder chooses automatically from UTF-32LE and UTF-32BE using BOM and space-based heuristic.\n// Defaults to UTF-32LE. http://en.wikipedia.org/wiki/UTF-32\n// Encoder/decoder default can be changed: iconv.decode(buf, 'utf32', {defaultEncoding: 'utf-32be'});\n\n// Encoder prepends BOM (which can be overridden with (addBOM: false}).\n\nexports.utf32 = Utf32AutoCodec;\nexports.ucs4 = 'utf32';\n\nfunction Utf32AutoCodec(options, iconv) {\n    this.iconv = iconv;\n}\n\nUtf32AutoCodec.prototype.encoder = Utf32AutoEncoder;\nUtf32AutoCodec.prototype.decoder = Utf32AutoDecoder;\n\n// -- Encoding\n\nfunction Utf32AutoEncoder(options, codec) {\n    options = options || {};\n\n    if (options.addBOM === undefined)\n        options.addBOM = true;\n\n    this.encoder = codec.iconv.getEncoder(options.defaultEncoding || 'utf-32le', options);\n}\n\nUtf32AutoEncoder.prototype.write = function(str) {\n    return this.encoder.write(str);\n};\n\nUtf32AutoEncoder.prototype.end = function() {\n    return this.encoder.end();\n};\n\n// -- Decoding\n\nfunction Utf32AutoDecoder(options, codec) {\n    this.decoder = null;\n    this.initialBufs = [];\n    this.initialBufsLen = 0;\n    this.options = options || {};\n    this.iconv = codec.iconv;\n}\n\nUtf32AutoDecoder.prototype.write = function(buf) {\n    if (!this.decoder) { \n        // Codec is not chosen yet. Accumulate initial bytes.\n        this.initialBufs.push(buf);\n        this.initialBufsLen += buf.length;\n\n        if (this.initialBufsLen < 32) // We need more bytes to use space heuristic (see below)\n            return '';\n\n        // We have enough bytes -> detect endianness.\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n\n    return this.decoder.write(buf);\n};\n\nUtf32AutoDecoder.prototype.end = function() {\n    if (!this.decoder) {\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        var trail = this.decoder.end();\n        if (trail)\n            resStr += trail;\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n\n    return this.decoder.end();\n};\n\nfunction detectEncoding(bufs, defaultEncoding) {\n    var b = [];\n    var charsProcessed = 0;\n    var invalidLE = 0, invalidBE = 0;   // Number of invalid chars when decoded as LE or BE.\n    var bmpCharsLE = 0, bmpCharsBE = 0; // Number of BMP chars when decoded as LE or BE.\n\n    outer_loop:\n    for (var i = 0; i < bufs.length; i++) {\n        var buf = bufs[i];\n        for (var j = 0; j < buf.length; j++) {\n            b.push(buf[j]);\n            if (b.length === 4) {\n                if (charsProcessed === 0) {\n                    // Check BOM first.\n                    if (b[0] === 0xFF && b[1] === 0xFE && b[2] === 0 && b[3] === 0) {\n                        return 'utf-32le';\n                    }\n                    if (b[0] === 0 && b[1] === 0 && b[2] === 0xFE && b[3] === 0xFF) {\n                        return 'utf-32be';\n                    }\n                }\n\n                if (b[0] !== 0 || b[1] > 0x10) invalidBE++;\n                if (b[3] !== 0 || b[2] > 0x10) invalidLE++;\n\n                if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++;\n                if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++;\n\n                b.length = 0;\n                charsProcessed++;\n\n                if (charsProcessed >= 100) {\n                    break outer_loop;\n                }\n            }\n        }\n    }\n\n    // Make decisions.\n    if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE)  return 'utf-32be';\n    if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE)  return 'utf-32le';\n\n    // Couldn't decide (likely all zeros or not enough data).\n    return defaultEncoding || 'utf-32le';\n}\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n    var buf = Buffer.from(str, 'ucs2');\n    for (var i = 0; i < buf.length; i += 2) {\n        var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n    }\n    return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n    this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n    if (buf.length == 0)\n        return '';\n\n    var buf2 = Buffer.alloc(buf.length + 1),\n        i = 0, j = 0;\n\n    if (this.overflowByte !== -1) {\n        buf2[0] = buf[0];\n        buf2[1] = this.overflowByte;\n        i = 1; j = 2;\n    }\n\n    for (; i < buf.length-1; i += 2, j+= 2) {\n        buf2[j] = buf[i+1];\n        buf2[j+1] = buf[i];\n    }\n\n    this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n    return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n    this.overflowByte = -1;\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n    options = options || {};\n    if (options.addBOM === undefined)\n        options.addBOM = true;\n    this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n    return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n    this.decoder = null;\n    this.initialBufs = [];\n    this.initialBufsLen = 0;\n\n    this.options = options || {};\n    this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n    if (!this.decoder) {\n        // Codec is not chosen yet. Accumulate initial bytes.\n        this.initialBufs.push(buf);\n        this.initialBufsLen += buf.length;\n        \n        if (this.initialBufsLen < 16) // We need more bytes to use space heuristic (see below)\n            return '';\n\n        // We have enough bytes -> detect endianness.\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n\n    return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n    if (!this.decoder) {\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        var trail = this.decoder.end();\n        if (trail)\n            resStr += trail;\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n    return this.decoder.end();\n}\n\nfunction detectEncoding(bufs, defaultEncoding) {\n    var b = [];\n    var charsProcessed = 0;\n    var asciiCharsLE = 0, asciiCharsBE = 0; // Number of ASCII chars when decoded as LE or BE.\n\n    outer_loop:\n    for (var i = 0; i < bufs.length; i++) {\n        var buf = bufs[i];\n        for (var j = 0; j < buf.length; j++) {\n            b.push(buf[j]);\n            if (b.length === 2) {\n                if (charsProcessed === 0) {\n                    // Check BOM first.\n                    if (b[0] === 0xFF && b[1] === 0xFE) return 'utf-16le';\n                    if (b[0] === 0xFE && b[1] === 0xFF) return 'utf-16be';\n                }\n\n                if (b[0] === 0 && b[1] !== 0) asciiCharsBE++;\n                if (b[0] !== 0 && b[1] === 0) asciiCharsLE++;\n\n                b.length = 0;\n                charsProcessed++;\n\n                if (charsProcessed >= 100) {\n                    break outer_loop;\n                }\n            }\n        }\n    }\n\n    // Make decisions.\n    // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n    // So, we count ASCII as if it was LE or BE, and decide from that.\n    if (asciiCharsBE > asciiCharsLE) return 'utf-16be';\n    if (asciiCharsBE < asciiCharsLE) return 'utf-16le';\n\n    // Couldn't decide (likely all zeros or not enough data).\n    return defaultEncoding || 'utf-16le';\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n    this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n    // Naive implementation.\n    // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n    return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n        return \"+\" + (chunk === '+' ? '' : \n            this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n            + \"-\";\n    }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n    base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n    minusChar = '-'.charCodeAt(0),\n    andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '+'\n            if (buf[i] == plusChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64Chars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n                    res += \"+\";\n                } else {\n                    var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\");\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus is absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\");\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n//  * Base64 part is started by \"&\" instead of \"+\"\n//  * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n//  * In Base64, \",\" is used instead of \"/\"\n//  * Base64 must not be used to represent direct characters.\n//  * No implicit shift back from Base64 (should always end with '-')\n//  * String must end in non-shifted position.\n//  * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = Buffer.alloc(6);\n    this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n    var inBase64 = this.inBase64,\n        base64Accum = this.base64Accum,\n        base64AccumIdx = this.base64AccumIdx,\n        buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n    for (var i = 0; i < str.length; i++) {\n        var uChar = str.charCodeAt(i);\n        if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n            if (inBase64) {\n                if (base64AccumIdx > 0) {\n                    bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n                    base64AccumIdx = 0;\n                }\n\n                buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n                inBase64 = false;\n            }\n\n            if (!inBase64) {\n                buf[bufIdx++] = uChar; // Write direct character\n\n                if (uChar === andChar)  // Ampersand -> '&-'\n                    buf[bufIdx++] = minusChar;\n            }\n\n        } else { // Non-direct character\n            if (!inBase64) {\n                buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n                inBase64 = true;\n            }\n            if (inBase64) {\n                base64Accum[base64AccumIdx++] = uChar >> 8;\n                base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n                if (base64AccumIdx == base64Accum.length) {\n                    bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n                    base64AccumIdx = 0;\n                }\n            }\n        }\n    }\n\n    this.inBase64 = inBase64;\n    this.base64AccumIdx = base64AccumIdx;\n\n    return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n    var buf = Buffer.alloc(10), bufIdx = 0;\n    if (this.inBase64) {\n        if (this.base64AccumIdx > 0) {\n            bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n            this.base64AccumIdx = 0;\n        }\n\n        buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n        this.inBase64 = false;\n    }\n\n    return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n    // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '&'\n            if (buf[i] == andChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n                    res += \"&\";\n                } else {\n                    var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\").replace(/,/g, '/');\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus may be absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\").replace(/,/g, '/');\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n    if (!codecOptions)\n        throw new Error(\"SBCS codec is called without the data.\")\n    \n    // Prepare char buffer for decoding.\n    if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n        throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n    \n    if (codecOptions.chars.length === 128) {\n        var asciiString = \"\";\n        for (var i = 0; i < 128; i++)\n            asciiString += String.fromCharCode(i);\n        codecOptions.chars = asciiString + codecOptions.chars;\n    }\n\n    this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n    \n    // Encoding buffer.\n    var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n    for (var i = 0; i < codecOptions.chars.length; i++)\n        encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n    this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n    this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length);\n    for (var i = 0; i < str.length; i++)\n        buf[i] = this.encodeBuf[str.charCodeAt(i)];\n    \n    return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n    this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n    // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n    var decodeBuf = this.decodeBuf;\n    var newBuf = Buffer.alloc(buf.length*2);\n    var idx1 = 0, idx2 = 0;\n    for (var i = 0; i < buf.length; i++) {\n        idx1 = buf[i]*2; idx2 = i*2;\n        newBuf[idx2] = decodeBuf[idx1];\n        newBuf[idx2+1] = decodeBuf[idx1+1];\n    }\n    return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n", "\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n    // Not supported by iconv, not sure why.\n    \"10029\": \"maccenteuro\",\n    \"maccenteuro\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\u00C4\u0100\u0101\u00C9\u0104\u00D6\u00DC\u00E1\u0105\u010C\u00E4\u010D\u0106\u0107\u00E9\u0179\u017A\u010E\u00ED\u010F\u0112\u0113\u0116\u00F3\u0117\u00F4\u00F6\u00F5\u00FA\u011A\u011B\u00FC\u2020\u00B0\u0118\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u0119\u00A8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\u00AC\u221A\u0144\u0147\u2206\u00AB\u00BB\u2026\u00A0\u0148\u0150\u00D5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\u00C1\u0164\u0165\u00CD\u017D\u017E\u016A\u00D3\u00D4\u016B\u016E\u00DA\u016F\u0170\u0171\u0172\u0173\u00DD\u00FD\u0137\u017B\u0141\u017C\u0122\u02C7\"\n    },\n\n    \"808\": \"cp808\",\n    \"ibm808\": \"cp808\",\n    \"cp808\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u20AC\u25A0\u00A0\"\n    },\n\n    \"mik\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2514\u2534\u252C\u251C\u2500\u253C\u2563\u2551\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2510\u2591\u2592\u2593\u2502\u2524\u2116\u00A7\u2557\u255D\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n    },\n\n    \"cp720\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\\x80\\x81\u00E9\u00E2\\x84\u00E0\\x86\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\\x8d\\x8e\\x8f\\x90\\u0651\\u0652\u00F4\u00A4\u0640\u00FB\u00F9\u0621\u0622\u0623\u0624\u00A3\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0636\u0637\u0638\u0639\u063A\u0641\u00B5\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u2261\\u064b\\u064c\\u064d\\u064e\\u064f\\u0650\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\\u00a0\"\n    },\n\n    // Aliases of generated encodings.\n    \"ascii8bit\": \"ascii\",\n    \"usascii\": \"ascii\",\n    \"ansix34\": \"ascii\",\n    \"ansix341968\": \"ascii\",\n    \"ansix341986\": \"ascii\",\n    \"csascii\": \"ascii\",\n    \"cp367\": \"ascii\",\n    \"ibm367\": \"ascii\",\n    \"isoir6\": \"ascii\",\n    \"iso646us\": \"ascii\",\n    \"iso646irv\": \"ascii\",\n    \"us\": \"ascii\",\n\n    \"latin1\": \"iso88591\",\n    \"latin2\": \"iso88592\",\n    \"latin3\": \"iso88593\",\n    \"latin4\": \"iso88594\",\n    \"latin5\": \"iso88599\",\n    \"latin6\": \"iso885910\",\n    \"latin7\": \"iso885913\",\n    \"latin8\": \"iso885914\",\n    \"latin9\": \"iso885915\",\n    \"latin10\": \"iso885916\",\n\n    \"csisolatin1\": \"iso88591\",\n    \"csisolatin2\": \"iso88592\",\n    \"csisolatin3\": \"iso88593\",\n    \"csisolatin4\": \"iso88594\",\n    \"csisolatincyrillic\": \"iso88595\",\n    \"csisolatinarabic\": \"iso88596\",\n    \"csisolatingreek\" : \"iso88597\",\n    \"csisolatinhebrew\": \"iso88598\",\n    \"csisolatin5\": \"iso88599\",\n    \"csisolatin6\": \"iso885910\",\n\n    \"l1\": \"iso88591\",\n    \"l2\": \"iso88592\",\n    \"l3\": \"iso88593\",\n    \"l4\": \"iso88594\",\n    \"l5\": \"iso88599\",\n    \"l6\": \"iso885910\",\n    \"l7\": \"iso885913\",\n    \"l8\": \"iso885914\",\n    \"l9\": \"iso885915\",\n    \"l10\": \"iso885916\",\n\n    \"isoir14\": \"iso646jp\",\n    \"isoir57\": \"iso646cn\",\n    \"isoir100\": \"iso88591\",\n    \"isoir101\": \"iso88592\",\n    \"isoir109\": \"iso88593\",\n    \"isoir110\": \"iso88594\",\n    \"isoir144\": \"iso88595\",\n    \"isoir127\": \"iso88596\",\n    \"isoir126\": \"iso88597\",\n    \"isoir138\": \"iso88598\",\n    \"isoir148\": \"iso88599\",\n    \"isoir157\": \"iso885910\",\n    \"isoir166\": \"tis620\",\n    \"isoir179\": \"iso885913\",\n    \"isoir199\": \"iso885914\",\n    \"isoir203\": \"iso885915\",\n    \"isoir226\": \"iso885916\",\n\n    \"cp819\": \"iso88591\",\n    \"ibm819\": \"iso88591\",\n\n    \"cyrillic\": \"iso88595\",\n\n    \"arabic\": \"iso88596\",\n    \"arabic8\": \"iso88596\",\n    \"ecma114\": \"iso88596\",\n    \"asmo708\": \"iso88596\",\n\n    \"greek\" : \"iso88597\",\n    \"greek8\" : \"iso88597\",\n    \"ecma118\" : \"iso88597\",\n    \"elot928\" : \"iso88597\",\n\n    \"hebrew\": \"iso88598\",\n    \"hebrew8\": \"iso88598\",\n\n    \"turkish\": \"iso88599\",\n    \"turkish8\": \"iso88599\",\n\n    \"thai\": \"iso885911\",\n    \"thai8\": \"iso885911\",\n\n    \"celtic\": \"iso885914\",\n    \"celtic8\": \"iso885914\",\n    \"isoceltic\": \"iso885914\",\n\n    \"tis6200\": \"tis620\",\n    \"tis62025291\": \"tis620\",\n    \"tis62025330\": \"tis620\",\n\n    \"10000\": \"macroman\",\n    \"10006\": \"macgreek\",\n    \"10007\": \"maccyrillic\",\n    \"10079\": \"maciceland\",\n    \"10081\": \"macturkish\",\n\n    \"cspc8codepage437\": \"cp437\",\n    \"cspc775baltic\": \"cp775\",\n    \"cspc850multilingual\": \"cp850\",\n    \"cspcp852\": \"cp852\",\n    \"cspc862latinhebrew\": \"cp862\",\n    \"cpgr\": \"cp869\",\n\n    \"msee\": \"cp1250\",\n    \"mscyrl\": \"cp1251\",\n    \"msansi\": \"cp1252\",\n    \"msgreek\": \"cp1253\",\n    \"msturk\": \"cp1254\",\n    \"mshebr\": \"cp1255\",\n    \"msarab\": \"cp1256\",\n    \"winbaltrim\": \"cp1257\",\n\n    \"cp20866\": \"koi8r\",\n    \"20866\": \"koi8r\",\n    \"ibm878\": \"koi8r\",\n    \"cskoi8r\": \"koi8r\",\n\n    \"cp21866\": \"koi8u\",\n    \"21866\": \"koi8u\",\n    \"ibm1168\": \"koi8u\",\n\n    \"strk10482002\": \"rk1048\",\n\n    \"tcvn5712\": \"tcvn\",\n    \"tcvn57121\": \"tcvn\",\n\n    \"gb198880\": \"iso646cn\",\n    \"cn\": \"iso646cn\",\n\n    \"csiso14jisc6220ro\": \"iso646jp\",\n    \"jisc62201969ro\": \"iso646jp\",\n    \"jp\": \"iso646jp\",\n\n    \"cshproman8\": \"hproman8\",\n    \"r8\": \"hproman8\",\n    \"roman8\": \"hproman8\",\n    \"xroman8\": \"hproman8\",\n    \"ibm1051\": \"hproman8\",\n\n    \"mac\": \"macintosh\",\n    \"csmacintosh\": \"macintosh\",\n};\n\n", "\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n  \"437\": \"cp437\",\n  \"737\": \"cp737\",\n  \"775\": \"cp775\",\n  \"850\": \"cp850\",\n  \"852\": \"cp852\",\n  \"855\": \"cp855\",\n  \"856\": \"cp856\",\n  \"857\": \"cp857\",\n  \"858\": \"cp858\",\n  \"860\": \"cp860\",\n  \"861\": \"cp861\",\n  \"862\": \"cp862\",\n  \"863\": \"cp863\",\n  \"864\": \"cp864\",\n  \"865\": \"cp865\",\n  \"866\": \"cp866\",\n  \"869\": \"cp869\",\n  \"874\": \"windows874\",\n  \"922\": \"cp922\",\n  \"1046\": \"cp1046\",\n  \"1124\": \"cp1124\",\n  \"1125\": \"cp1125\",\n  \"1129\": \"cp1129\",\n  \"1133\": \"cp1133\",\n  \"1161\": \"cp1161\",\n  \"1162\": \"cp1162\",\n  \"1163\": \"cp1163\",\n  \"1250\": \"windows1250\",\n  \"1251\": \"windows1251\",\n  \"1252\": \"windows1252\",\n  \"1253\": \"windows1253\",\n  \"1254\": \"windows1254\",\n  \"1255\": \"windows1255\",\n  \"1256\": \"windows1256\",\n  \"1257\": \"windows1257\",\n  \"1258\": \"windows1258\",\n  \"28591\": \"iso88591\",\n  \"28592\": \"iso88592\",\n  \"28593\": \"iso88593\",\n  \"28594\": \"iso88594\",\n  \"28595\": \"iso88595\",\n  \"28596\": \"iso88596\",\n  \"28597\": \"iso88597\",\n  \"28598\": \"iso88598\",\n  \"28599\": \"iso88599\",\n  \"28600\": \"iso885910\",\n  \"28601\": \"iso885911\",\n  \"28603\": \"iso885913\",\n  \"28604\": \"iso885914\",\n  \"28605\": \"iso885915\",\n  \"28606\": \"iso885916\",\n  \"windows874\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"win874\": \"windows874\",\n  \"cp874\": \"windows874\",\n  \"windows1250\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\u00A0\u02C7\u02D8\u0141\u00A4\u0104\u00A6\u00A7\u00A8\u00A9\u015E\u00AB\u00AC\u00AD\u00AE\u017B\u00B0\u00B1\u02DB\u0142\u00B4\u00B5\u00B6\u00B7\u00B8\u0105\u015F\u00BB\u013D\u02DD\u013E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n  },\n  \"win1250\": \"windows1250\",\n  \"cp1250\": \"windows1250\",\n  \"windows1251\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\u00A0\u040E\u045E\u0408\u00A4\u0490\u00A6\u00A7\u0401\u00A9\u0404\u00AB\u00AC\u00AD\u00AE\u0407\u00B0\u00B1\u0406\u0456\u0491\u00B5\u00B6\u00B7\u0451\u2116\u0454\u00BB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n  },\n  \"win1251\": \"windows1251\",\n  \"cp1251\": \"windows1251\",\n  \"windows1252\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"win1252\": \"windows1252\",\n  \"cp1252\": \"windows1252\",\n  \"windows1253\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0385\u0386\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\uFFFD\u00AB\u00AC\u00AD\u00AE\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u00B5\u00B6\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n  },\n  \"win1253\": \"windows1253\",\n  \"cp1253\": \"windows1253\",\n  \"windows1254\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n  },\n  \"win1254\": \"windows1254\",\n  \"cp1254\": \"windows1254\",\n  \"windows1255\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u00A1\u00A2\u00A3\u20AA\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\u00BF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n  },\n  \"win1255\": \"windows1255\",\n  \"cp1255\": \"windows1255\",\n  \"windows1256\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\u00A0\u060C\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u06BE\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u061B\u00BB\u00BC\u00BD\u00BE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u00D7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\u00E0\u0644\u00E2\u0645\u0646\u0647\u0648\u00E7\u00E8\u00E9\u00EA\u00EB\u0649\u064A\u00EE\u00EF\u064B\u064C\u064D\u064E\u00F4\u064F\u0650\u00F7\u0651\u00F9\u0652\u00FB\u00FC\u200E\u200F\u06D2\"\n  },\n  \"win1256\": \"windows1256\",\n  \"cp1256\": \"windows1256\",\n  \"windows1257\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\u00A8\u02C7\u00B8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\u00AF\u02DB\uFFFD\u00A0\uFFFD\u00A2\u00A3\u00A4\uFFFD\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u02D9\"\n  },\n  \"win1257\": \"windows1257\",\n  \"cp1257\": \"windows1257\",\n  \"windows1258\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n  },\n  \"win1258\": \"windows1258\",\n  \"cp1258\": \"windows1258\",\n  \"iso88591\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"cp28591\": \"iso88591\",\n  \"iso88592\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u02D8\u0141\u00A4\u013D\u015A\u00A7\u00A8\u0160\u015E\u0164\u0179\u00AD\u017D\u017B\u00B0\u0105\u02DB\u0142\u00B4\u013E\u015B\u02C7\u00B8\u0161\u015F\u0165\u017A\u02DD\u017E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n  },\n  \"cp28592\": \"iso88592\",\n  \"iso88593\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0126\u02D8\u00A3\u00A4\uFFFD\u0124\u00A7\u00A8\u0130\u015E\u011E\u0134\u00AD\uFFFD\u017B\u00B0\u0127\u00B2\u00B3\u00B4\u00B5\u0125\u00B7\u00B8\u0131\u015F\u011F\u0135\u00BD\uFFFD\u017C\u00C0\u00C1\u00C2\uFFFD\u00C4\u010A\u0108\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\uFFFD\u00D1\u00D2\u00D3\u00D4\u0120\u00D6\u00D7\u011C\u00D9\u00DA\u00DB\u00DC\u016C\u015C\u00DF\u00E0\u00E1\u00E2\uFFFD\u00E4\u010B\u0109\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\uFFFD\u00F1\u00F2\u00F3\u00F4\u0121\u00F6\u00F7\u011D\u00F9\u00FA\u00FB\u00FC\u016D\u015D\u02D9\"\n  },\n  \"cp28593\": \"iso88593\",\n  \"iso88594\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0138\u0156\u00A4\u0128\u013B\u00A7\u00A8\u0160\u0112\u0122\u0166\u00AD\u017D\u00AF\u00B0\u0105\u02DB\u0157\u00B4\u0129\u013C\u02C7\u00B8\u0161\u0113\u0123\u0167\u014A\u017E\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u012A\u0110\u0145\u014C\u0136\u00D4\u00D5\u00D6\u00D7\u00D8\u0172\u00DA\u00DB\u00DC\u0168\u016A\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u012B\u0111\u0146\u014D\u0137\u00F4\u00F5\u00F6\u00F7\u00F8\u0173\u00FA\u00FB\u00FC\u0169\u016B\u02D9\"\n  },\n  \"cp28594\": \"iso88594\",\n  \"iso88595\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n  },\n  \"cp28595\": \"iso88595\",\n  \"iso88596\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\uFFFD\uFFFD\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u060C\u00AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u061B\uFFFD\uFFFD\uFFFD\u061F\uFFFD\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"cp28596\": \"iso88596\",\n  \"iso88597\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u2018\u2019\u00A3\u20AC\u20AF\u00A6\u00A7\u00A8\u00A9\u037A\u00AB\u00AC\u00AD\uFFFD\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u0385\u0386\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n  },\n  \"cp28597\": \"iso88597\",\n  \"iso88598\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2017\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n  },\n  \"cp28598\": \"iso88598\",\n  \"iso88599\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n  },\n  \"cp28599\": \"iso88599\",\n  \"iso885910\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0112\u0122\u012A\u0128\u0136\u00A7\u013B\u0110\u0160\u0166\u017D\u00AD\u016A\u014A\u00B0\u0105\u0113\u0123\u012B\u0129\u0137\u00B7\u013C\u0111\u0161\u0167\u017E\u2015\u016B\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u00CF\u00D0\u0145\u014C\u00D3\u00D4\u00D5\u00D6\u0168\u00D8\u0172\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u00EF\u00F0\u0146\u014D\u00F3\u00F4\u00F5\u00F6\u0169\u00F8\u0173\u00FA\u00FB\u00FC\u00FD\u00FE\u0138\"\n  },\n  \"cp28600\": \"iso885910\",\n  \"iso885911\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"cp28601\": \"iso885911\",\n  \"iso885913\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u201D\u00A2\u00A3\u00A4\u201E\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u201C\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u2019\"\n  },\n  \"cp28603\": \"iso885913\",\n  \"iso885914\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u1E02\u1E03\u00A3\u010A\u010B\u1E0A\u00A7\u1E80\u00A9\u1E82\u1E0B\u1EF2\u00AD\u00AE\u0178\u1E1E\u1E1F\u0120\u0121\u1E40\u1E41\u00B6\u1E56\u1E81\u1E57\u1E83\u1E60\u1EF3\u1E84\u1E85\u1E61\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0174\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u1E6A\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u0176\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0175\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u1E6B\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u0177\u00FF\"\n  },\n  \"cp28604\": \"iso885914\",\n  \"iso885915\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u0160\u00A7\u0161\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u017D\u00B5\u00B6\u00B7\u017E\u00B9\u00BA\u00BB\u0152\u0153\u0178\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"cp28605\": \"iso885915\",\n  \"iso885916\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0105\u0141\u20AC\u201E\u0160\u00A7\u0161\u00A9\u0218\u00AB\u0179\u00AD\u017A\u017B\u00B0\u00B1\u010C\u0142\u017D\u201D\u00B6\u00B7\u017E\u010D\u0219\u00BB\u0152\u0153\u0178\u017C\u00C0\u00C1\u00C2\u0102\u00C4\u0106\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0110\u0143\u00D2\u00D3\u00D4\u0150\u00D6\u015A\u0170\u00D9\u00DA\u00DB\u00DC\u0118\u021A\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u0107\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0111\u0144\u00F2\u00F3\u00F4\u0151\u00F6\u015B\u0171\u00F9\u00FA\u00FB\u00FC\u0119\u021B\u00FF\"\n  },\n  \"cp28606\": \"iso885916\",\n  \"cp437\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm437\": \"cp437\",\n  \"csibm437\": \"cp437\",\n  \"cp737\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\u00B1\u2265\u2264\u03AA\u03AB\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm737\": \"cp737\",\n  \"csibm737\": \"cp737\",\n  \"cp775\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0106\u00FC\u00E9\u0101\u00E4\u0123\u00E5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\u00C4\u00C5\u00C9\u00E6\u00C6\u014D\u00F6\u0122\u00A2\u015A\u015B\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u00A4\u0100\u012A\u00F3\u017B\u017C\u017A\u201D\u00A6\u00A9\u00AE\u00AC\u00BD\u00BC\u0141\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u00D3\u00DF\u014C\u0143\u00F5\u00D5\u00B5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\u00AD\u00B1\u201C\u00BE\u00B6\u00A7\u00F7\u201E\u00B0\u2219\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm775\": \"cp775\",\n  \"csibm775\": \"cp775\",\n  \"cp850\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u0131\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm850\": \"cp850\",\n  \"csibm850\": \"cp850\",\n  \"cp852\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u016F\u0107\u00E7\u0142\u00EB\u0150\u0151\u00EE\u0179\u00C4\u0106\u00C9\u0139\u013A\u00F4\u00F6\u013D\u013E\u015A\u015B\u00D6\u00DC\u0164\u0165\u0141\u00D7\u010D\u00E1\u00ED\u00F3\u00FA\u0104\u0105\u017D\u017E\u0118\u0119\u00AC\u017A\u010C\u015F\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u0111\u0110\u010E\u00CB\u010F\u0147\u00CD\u00CE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\u00D3\u00DF\u00D4\u0143\u0144\u0148\u0160\u0161\u0154\u00DA\u0155\u0170\u00FD\u00DD\u0163\u00B4\u00AD\u02DD\u02DB\u02C7\u02D8\u00A7\u00F7\u00B8\u00B0\u00A8\u02D9\u0171\u0158\u0159\u25A0\u00A0\"\n  },\n  \"ibm852\": \"cp852\",\n  \"csibm852\": \"cp852\",\n  \"cp855\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\u00AD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\u00A7\u25A0\u00A0\"\n  },\n  \"ibm855\": \"cp855\",\n  \"csibm855\": \"cp855\",\n  \"cp856\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\u00A3\uFFFD\u00D7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AE\u00AC\u00BD\u00BC\uFFFD\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\uFFFD\uFFFD\uFFFD\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\uFFFD\uFFFD\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2518\u250C\u2588\u2584\u00A6\uFFFD\u2580\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00B5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm856\": \"cp856\",\n  \"csibm856\": \"cp856\",\n  \"cp857\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u0131\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u0130\u00D6\u00DC\u00F8\u00A3\u00D8\u015E\u015F\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u011E\u011F\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00BA\u00AA\u00CA\u00CB\u00C8\uFFFD\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\uFFFD\u00D7\u00DA\u00DB\u00D9\u00EC\u00FF\u00AF\u00B4\u00AD\u00B1\uFFFD\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm857\": \"cp857\",\n  \"csibm857\": \"cp857\",\n  \"cp858\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u20AC\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm858\": \"cp858\",\n  \"csibm858\": \"cp858\",\n  \"cp860\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E3\u00E0\u00C1\u00E7\u00EA\u00CA\u00E8\u00CD\u00D4\u00EC\u00C3\u00C2\u00C9\u00C0\u00C8\u00F4\u00F5\u00F2\u00DA\u00F9\u00CC\u00D5\u00DC\u00A2\u00A3\u00D9\u20A7\u00D3\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00D2\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm860\": \"cp860\",\n  \"csibm860\": \"cp860\",\n  \"cp861\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00D0\u00F0\u00DE\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00FE\u00FB\u00DD\u00FD\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00C1\u00CD\u00D3\u00DA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm861\": \"cp861\",\n  \"csibm861\": \"cp861\",\n  \"cp862\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm862\": \"cp862\",\n  \"csibm862\": \"cp862\",\n  \"cp863\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00C2\u00E0\u00B6\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u2017\u00C0\u00A7\u00C9\u00C8\u00CA\u00F4\u00CB\u00CF\u00FB\u00F9\u00A4\u00D4\u00DC\u00A2\u00A3\u00D9\u00DB\u0192\u00A6\u00B4\u00F3\u00FA\u00A8\u00B8\u00B3\u00AF\u00CE\u2310\u00AC\u00BD\u00BC\u00BE\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm863\": \"cp863\",\n  \"csibm863\": \"cp863\",\n  \"cp864\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$\u066A&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00B0\u00B7\u2219\u221A\u2592\u2500\u2502\u253C\u2524\u252C\u251C\u2534\u2510\u250C\u2514\u2518\u03B2\u221E\u03C6\u00B1\u00BD\u00BC\u2248\u00AB\u00BB\uFEF7\uFEF8\uFFFD\uFFFD\uFEFB\uFEFC\uFFFD\u00A0\u00AD\uFE82\u00A3\u00A4\uFE84\uFFFD\uFFFD\uFE8E\uFE8F\uFE95\uFE99\u060C\uFE9D\uFEA1\uFEA5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFED1\u061B\uFEB1\uFEB5\uFEB9\u061F\u00A2\uFE80\uFE81\uFE83\uFE85\uFECA\uFE8B\uFE8D\uFE91\uFE93\uFE97\uFE9B\uFE9F\uFEA3\uFEA7\uFEA9\uFEAB\uFEAD\uFEAF\uFEB3\uFEB7\uFEBB\uFEBF\uFEC1\uFEC5\uFECB\uFECF\u00A6\u00AC\u00F7\u00D7\uFEC9\u0640\uFED3\uFED7\uFEDB\uFEDF\uFEE3\uFEE7\uFEEB\uFEED\uFEEF\uFEF3\uFEBD\uFECC\uFECE\uFECD\uFEE1\uFE7D\u0651\uFEE5\uFEE9\uFEEC\uFEF0\uFEF2\uFED0\uFED5\uFEF5\uFEF6\uFEDD\uFED9\uFEF1\u25A0\uFFFD\"\n  },\n  \"ibm864\": \"cp864\",\n  \"csibm864\": \"cp864\",\n  \"cp865\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00A4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm865\": \"cp865\",\n  \"csibm865\": \"cp865\",\n  \"cp866\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n  },\n  \"ibm866\": \"cp866\",\n  \"csibm866\": \"cp866\",\n  \"cp869\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0386\uFFFD\u00B7\u00AC\u00A6\u2018\u2019\u0388\u2015\u0389\u038A\u03AA\u038C\uFFFD\uFFFD\u038E\u03AB\u00A9\u038F\u00B2\u00B3\u03AC\u00A3\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03CD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u00BD\u0398\u0399\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u039A\u039B\u039C\u039D\u2563\u2551\u2557\u255D\u039E\u039F\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u03A0\u03A1\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u2518\u250C\u2588\u2584\u03B4\u03B5\u2580\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u0384\u00AD\u00B1\u03C5\u03C6\u03C7\u00A7\u03C8\u0385\u00B0\u00A8\u03C9\u03CB\u03B0\u03CE\u25A0\u00A0\"\n  },\n  \"ibm869\": \"cp869\",\n  \"csibm869\": \"cp869\",\n  \"cp922\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u203E\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0160\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u017D\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0161\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u017E\u00FF\"\n  },\n  \"ibm922\": \"cp922\",\n  \"csibm922\": \"cp922\",\n  \"cp1046\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFE88\u00D7\u00F7\uF8F6\uF8F5\uF8F4\uF8F7\uFE71\u0088\u25A0\u2502\u2500\u2510\u250C\u2514\u2518\uFE79\uFE7B\uFE7D\uFE7F\uFE77\uFE8A\uFEF0\uFEF3\uFEF2\uFECE\uFECF\uFED0\uFEF6\uFEF8\uFEFA\uFEFC\u00A0\uF8FA\uF8F9\uF8F8\u00A4\uF8FB\uFE8B\uFE91\uFE97\uFE9B\uFE9F\uFEA3\u060C\u00AD\uFEA7\uFEB3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFEB7\u061B\uFEBB\uFEBF\uFECA\u061F\uFECB\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\uFEC7\u0639\u063A\uFECC\uFE82\uFE84\uFE8E\uFED3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFED7\uFEDB\uFEDF\uF8FC\uFEF5\uFEF7\uFEF9\uFEFB\uFEE3\uFEE7\uFEEC\uFEE9\uFFFD\"\n  },\n  \"ibm1046\": \"cp1046\",\n  \"csibm1046\": \"cp1046\",\n  \"cp1124\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n  },\n  \"ibm1124\": \"cp1124\",\n  \"csibm1124\": \"cp1124\",\n  \"cp1125\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n  },\n  \"ibm1125\": \"cp1125\",\n  \"csibm1125\": \"cp1125\",\n  \"cp1129\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n  },\n  \"ibm1129\": \"cp1129\",\n  \"csibm1129\": \"cp1129\",\n  \"cp1133\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E81\u0E82\u0E84\u0E87\u0E88\u0EAA\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAB\u0EAD\u0EAE\uFFFD\uFFFD\uFFFD\u0EAF\u0EB0\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBC\u0EB1\u0EBB\u0EBD\uFFFD\uFFFD\uFFFD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0EC6\uFFFD\u0EDC\u0EDD\u20AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\uFFFD\uFFFD\u00A2\u00AC\u00A6\uFFFD\"\n  },\n  \"ibm1133\": \"cp1133\",\n  \"csibm1133\": \"cp1133\",\n  \"cp1161\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E48\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E49\u0E4A\u0E4B\u20AC\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\u00A2\u00AC\u00A6\u00A0\"\n  },\n  \"ibm1161\": \"cp1161\",\n  \"csibm1161\": \"cp1161\",\n  \"cp1162\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\u0081\u0082\u0083\u0084\u2026\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"ibm1162\": \"cp1162\",\n  \"csibm1162\": \"cp1162\",\n  \"cp1163\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n  },\n  \"ibm1163\": \"cp1163\",\n  \"csibm1163\": \"cp1163\",\n  \"maccroatian\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u0160\u2122\u00B4\u00A8\u2260\u017D\u00D8\u221E\u00B1\u2264\u2265\u2206\u00B5\u2202\u2211\u220F\u0161\u222B\u00AA\u00BA\u2126\u017E\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u0106\u00AB\u010C\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\uFFFD\u00A9\u2044\u00A4\u2039\u203A\u00C6\u00BB\u2013\u00B7\u201A\u201E\u2030\u00C2\u0107\u00C1\u010D\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\u0111\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u03C0\u00CB\u02DA\u00B8\u00CA\u00E6\u02C7\"\n  },\n  \"maccyrillic\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n  },\n  \"macgreek\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00B9\u00B2\u00C9\u00B3\u00D6\u00DC\u0385\u00E0\u00E2\u00E4\u0384\u00A8\u00E7\u00E9\u00E8\u00EA\u00EB\u00A3\u2122\u00EE\u00EF\u2022\u00BD\u2030\u00F4\u00F6\u00A6\u00AD\u00F9\u00FB\u00FC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\u00DF\u00AE\u00A9\u03A3\u03AA\u00A7\u2260\u00B0\u0387\u0391\u00B1\u2264\u2265\u00A5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\u00AC\u039F\u03A1\u2248\u03A4\u00AB\u00BB\u2026\u00A0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\u00F7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD\"\n  },\n  \"maciceland\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u00DD\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u00D0\u00F0\u00DE\u00FE\u00FD\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macroman\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macromania\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u0102\u015E\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u0103\u015F\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\u0162\u0163\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macthai\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00AB\u00BB\u2026\uF88C\uF88F\uF892\uF895\uF898\uF88B\uF88E\uF891\uF894\uF897\u201C\u201D\uF899\uFFFD\u2022\uF884\uF889\uF885\uF886\uF887\uF888\uF88A\uF88D\uF890\uF893\uF896\u2018\u2019\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFEFF\u200B\u2013\u2014\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u2122\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u00AE\u00A9\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"macturkish\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\uFFFD\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macukraine\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u0490\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n  },\n  \"koi8r\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"koi8u\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u255D\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"koi8ru\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u045E\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u040E\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"koi8t\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u049B\u0493\u201A\u0492\u201E\u2026\u2020\u2021\uFFFD\u2030\u04B3\u2039\u04B2\u04B7\u04B6\uFFFD\u049A\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04EF\u04EE\u0451\u00A4\u04E3\u00A6\u00A7\uFFFD\uFFFD\uFFFD\u00AB\u00AC\u00AD\u00AE\uFFFD\u00B0\u00B1\u00B2\u0401\uFFFD\u04E2\u00B6\u00B7\uFFFD\u2116\uFFFD\u00BB\uFFFD\uFFFD\uFFFD\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"armscii8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u0587\u0589)(\u00BB\u00AB\u2014.\u055D,-\u058A\u2026\u055C\u055B\u055E\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053A\u056A\u053B\u056B\u053C\u056C\u053D\u056D\u053E\u056E\u053F\u056F\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054A\u057A\u054B\u057B\u054C\u057C\u054D\u057D\u054E\u057E\u054F\u057F\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055A\uFFFD\"\n  },\n  \"rk1048\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u049A\u04BA\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u049B\u04BB\u045F\u00A0\u04B0\u04B1\u04D8\u00A4\u04E8\u00A6\u00A7\u0401\u00A9\u0492\u00AB\u00AC\u00AD\u00AE\u04AE\u00B0\u00B1\u0406\u0456\u04E9\u00B5\u00B6\u00B7\u0451\u2116\u0493\u00BB\u04D9\u04A2\u04A3\u04AF\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n  },\n  \"tcvn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\u00DA\u1EE4\\u0003\u1EEA\u1EEC\u1EEE\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\u1EE8\u1EF0\u1EF2\u1EF6\u1EF8\u00DD\u1EF4\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00C0\u1EA2\u00C3\u00C1\u1EA0\u1EB6\u1EAC\u00C8\u1EBA\u1EBC\u00C9\u1EB8\u1EC6\u00CC\u1EC8\u0128\u00CD\u1ECA\u00D2\u1ECE\u00D5\u00D3\u1ECC\u1ED8\u1EDC\u1EDE\u1EE0\u1EDA\u1EE2\u00D9\u1EE6\u0168\u00A0\u0102\u00C2\u00CA\u00D4\u01A0\u01AF\u0110\u0103\u00E2\u00EA\u00F4\u01A1\u01B0\u0111\u1EB0\u0300\u0309\u0303\u0301\u0323\u00E0\u1EA3\u00E3\u00E1\u1EA1\u1EB2\u1EB1\u1EB3\u1EB5\u1EAF\u1EB4\u1EAE\u1EA6\u1EA8\u1EAA\u1EA4\u1EC0\u1EB7\u1EA7\u1EA9\u1EAB\u1EA5\u1EAD\u00E8\u1EC2\u1EBB\u1EBD\u00E9\u1EB9\u1EC1\u1EC3\u1EC5\u1EBF\u1EC7\u00EC\u1EC9\u1EC4\u1EBE\u1ED2\u0129\u00ED\u1ECB\u00F2\u1ED4\u1ECF\u00F5\u00F3\u1ECD\u1ED3\u1ED5\u1ED7\u1ED1\u1ED9\u1EDD\u1EDF\u1EE1\u1EDB\u1EE3\u00F9\u1ED6\u1EE7\u0169\u00FA\u1EE5\u1EEB\u1EED\u1EEF\u1EE9\u1EF1\u1EF3\u1EF7\u1EF9\u00FD\u1EF5\u1ED0\"\n  },\n  \"georgianacademy\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"georgianps\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10F1\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10F2\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10F3\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10F4\u10EF\u10F0\u10F5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"pt154\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0496\u0492\u04EE\u0493\u201E\u2026\u04B6\u04AE\u04B2\u04AF\u04A0\u04E2\u04A2\u049A\u04BA\u04B8\u0497\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u04B3\u04B7\u04A1\u04E3\u04A3\u049B\u04BB\u04B9\u00A0\u040E\u045E\u0408\u04E8\u0498\u04B0\u00A7\u0401\u00A9\u04D8\u00AB\u00AC\u04EF\u00AE\u049C\u00B0\u04B1\u0406\u0456\u0499\u04E9\u00B6\u00B7\u0451\u2116\u04D9\u00BB\u0458\u04AA\u04AB\u049D\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n  },\n  \"viscii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\u1EB2\\u0003\\u0004\u1EB4\u1EAA\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\u1EF6\\u0015\\u0016\\u0017\\u0018\u1EF8\\u001a\\u001b\\u001c\\u001d\u1EF4\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\u00D5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\u00C0\u00C1\u00C2\u00C3\u1EA2\u0102\u1EB3\u1EB5\u00C8\u00C9\u00CA\u1EBA\u00CC\u00CD\u0128\u1EF3\u0110\u1EE9\u00D2\u00D3\u00D4\u1EA1\u1EF7\u1EEB\u1EED\u00D9\u00DA\u1EF9\u1EF5\u00DD\u1EE1\u01B0\u00E0\u00E1\u00E2\u00E3\u1EA3\u0103\u1EEF\u1EAB\u00E8\u00E9\u00EA\u1EBB\u00EC\u00ED\u0129\u1EC9\u0111\u1EF1\u00F2\u00F3\u00F4\u00F5\u1ECF\u1ECD\u1EE5\u00F9\u00FA\u0169\u1EE7\u00FD\u1EE3\u1EEE\"\n  },\n  \"iso646cn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#\u00A5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"iso646jp\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\u00A5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"hproman8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00C0\u00C2\u00C8\u00CA\u00CB\u00CE\u00CF\u00B4\u02CB\u02C6\u00A8\u02DC\u00D9\u00DB\u20A4\u00AF\u00DD\u00FD\u00B0\u00C7\u00E7\u00D1\u00F1\u00A1\u00BF\u00A4\u00A3\u00A5\u00A7\u0192\u00A2\u00E2\u00EA\u00F4\u00FB\u00E1\u00E9\u00F3\u00FA\u00E0\u00E8\u00F2\u00F9\u00E4\u00EB\u00F6\u00FC\u00C5\u00EE\u00D8\u00C6\u00E5\u00ED\u00F8\u00E6\u00C4\u00EC\u00D6\u00DC\u00C9\u00EF\u00DF\u00D4\u00C1\u00C3\u00E3\u00D0\u00F0\u00CD\u00CC\u00D3\u00D2\u00D5\u00F5\u0160\u0161\u00DA\u0178\u00FF\u00DE\u00FE\u00B7\u00B5\u00B6\u00BE\u2014\u00BC\u00BD\u00AA\u00BA\u00AB\u25A0\u00BB\u00B1\uFFFD\"\n  },\n  \"macintosh\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"ascii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"tis620\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  }\n}", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n    GB18030_CODE = -2,\n    SEQ_START  = -10,\n    NODE_START = -1000,\n    UNASSIGNED_NODE = new Array(0x100),\n    DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n    UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n    this.encodingName = codecOptions.encodingName;\n    if (!codecOptions)\n        throw new Error(\"DBCS codec is called without the data.\")\n    if (!codecOptions.table)\n        throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n    // Load tables.\n    var mappingTable = codecOptions.table();\n\n\n    // Decode tables: MBCS -> Unicode.\n\n    // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n    // Trie root is decodeTables[0].\n    // Values: >=  0 -> unicode character code. can be > 0xFFFF\n    //         == UNASSIGNED -> unknown/unassigned sequence.\n    //         == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n    //         <= NODE_START -> index of the next node in our trie to process next byte.\n    //         <= SEQ_START  -> index of the start of a character code sequence, in decodeTableSeq.\n    this.decodeTables = [];\n    this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n    // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n    this.decodeTableSeq = [];\n\n    // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n    for (var i = 0; i < mappingTable.length; i++)\n        this._addDecodeChunk(mappingTable[i]);\n\n    // Load & create GB18030 tables when needed.\n    if (typeof codecOptions.gb18030 === 'function') {\n        this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n        // Add GB18030 common decode nodes.\n        var commonThirdByteNodeIdx = this.decodeTables.length;\n        this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n        var commonFourthByteNodeIdx = this.decodeTables.length;\n        this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n        // Fill out the tree\n        var firstByteNode = this.decodeTables[0];\n        for (var i = 0x81; i <= 0xFE; i++) {\n            var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i]];\n            for (var j = 0x30; j <= 0x39; j++) {\n                if (secondByteNode[j] === UNASSIGNED) {\n                    secondByteNode[j] = NODE_START - commonThirdByteNodeIdx;\n                } else if (secondByteNode[j] > NODE_START) {\n                    throw new Error(\"gb18030 decode tables conflict at byte 2\");\n                }\n\n                var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]];\n                for (var k = 0x81; k <= 0xFE; k++) {\n                    if (thirdByteNode[k] === UNASSIGNED) {\n                        thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx;\n                    } else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) {\n                        continue;\n                    } else if (thirdByteNode[k] > NODE_START) {\n                        throw new Error(\"gb18030 decode tables conflict at byte 3\");\n                    }\n\n                    var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]];\n                    for (var l = 0x30; l <= 0x39; l++) {\n                        if (fourthByteNode[l] === UNASSIGNED)\n                            fourthByteNode[l] = GB18030_CODE;\n                    }\n                }\n            }\n        }\n    }\n\n    this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n    \n    // Encode tables: Unicode -> DBCS.\n\n    // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n    // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n    // Values: >=  0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n    //         == UNASSIGNED -> no conversion found. Output a default char.\n    //         <= SEQ_START  -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n    this.encodeTable = [];\n    \n    // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n    // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n    // means end of sequence (needed when one sequence is a strict subsequence of another).\n    // Objects are kept separately from encodeTable to increase performance.\n    this.encodeTableSeq = [];\n\n    // Some chars can be decoded, but need not be encoded.\n    var skipEncodeChars = {};\n    if (codecOptions.encodeSkipVals)\n        for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n            var val = codecOptions.encodeSkipVals[i];\n            if (typeof val === 'number')\n                skipEncodeChars[val] = true;\n            else\n                for (var j = val.from; j <= val.to; j++)\n                    skipEncodeChars[j] = true;\n        }\n        \n    // Use decode trie to recursively fill out encode tables.\n    this._fillEncodeTable(0, 0, skipEncodeChars);\n\n    // Add more encoding pairs when needed.\n    if (codecOptions.encodeAdd) {\n        for (var uChar in codecOptions.encodeAdd)\n            if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n                this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n    }\n\n    this.defCharSB  = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n    var bytes = [];\n    for (; addr > 0; addr >>>= 8)\n        bytes.push(addr & 0xFF);\n    if (bytes.length == 0)\n        bytes.push(0);\n\n    var node = this.decodeTables[0];\n    for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n        var val = node[bytes[i]];\n\n        if (val == UNASSIGNED) { // Create new node.\n            node[bytes[i]] = NODE_START - this.decodeTables.length;\n            this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n        }\n        else if (val <= NODE_START) { // Existing node.\n            node = this.decodeTables[NODE_START - val];\n        }\n        else\n            throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n    }\n    return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n    // First element of chunk is the hex mbcs code where we start.\n    var curAddr = parseInt(chunk[0], 16);\n\n    // Choose the decoding node where we'll write our chars.\n    var writeTable = this._getDecodeTrieNode(curAddr);\n    curAddr = curAddr & 0xFF;\n\n    // Write all other elements of the chunk to the table.\n    for (var k = 1; k < chunk.length; k++) {\n        var part = chunk[k];\n        if (typeof part === \"string\") { // String, write as-is.\n            for (var l = 0; l < part.length;) {\n                var code = part.charCodeAt(l++);\n                if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n                    var codeTrail = part.charCodeAt(l++);\n                    if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n                        writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n                    else\n                        throw new Error(\"Incorrect surrogate pair in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n                }\n                else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n                    var len = 0xFFF - code + 2;\n                    var seq = [];\n                    for (var m = 0; m < len; m++)\n                        seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n                    writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n                    this.decodeTableSeq.push(seq);\n                }\n                else\n                    writeTable[curAddr++] = code; // Basic char\n            }\n        } \n        else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n            var charCode = writeTable[curAddr - 1] + 1;\n            for (var l = 0; l < part; l++)\n                writeTable[curAddr++] = charCode++;\n        }\n        else\n            throw new Error(\"Incorrect type '\" + typeof part + \"' given in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n    }\n    if (curAddr > 0xFF)\n        throw new Error(\"Incorrect chunk in \"  + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n    var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n    if (this.encodeTable[high] === undefined)\n        this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n    return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n    if (bucket[low] <= SEQ_START)\n        this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n    else if (bucket[low] == UNASSIGNED)\n        bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n    \n    // Get the root of character tree according to first character of the sequence.\n    var uCode = seq[0];\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n\n    var node;\n    if (bucket[low] <= SEQ_START) {\n        // There's already a sequence with  - use it.\n        node = this.encodeTableSeq[SEQ_START-bucket[low]];\n    }\n    else {\n        // There was no sequence object - allocate a new one.\n        node = {};\n        if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n        bucket[low] = SEQ_START - this.encodeTableSeq.length;\n        this.encodeTableSeq.push(node);\n    }\n\n    // Traverse the character tree, allocating new nodes as needed.\n    for (var j = 1; j < seq.length-1; j++) {\n        var oldVal = node[uCode];\n        if (typeof oldVal === 'object')\n            node = oldVal;\n        else {\n            node = node[uCode] = {}\n            if (oldVal !== undefined)\n                node[DEF_CHAR] = oldVal\n        }\n    }\n\n    // Set the leaf to given dbcsCode.\n    uCode = seq[seq.length-1];\n    node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n    var node = this.decodeTables[nodeIdx];\n    var hasValues = false;\n    var subNodeEmpty = {};\n    for (var i = 0; i < 0x100; i++) {\n        var uCode = node[i];\n        var mbCode = prefix + i;\n        if (skipEncodeChars[mbCode])\n            continue;\n\n        if (uCode >= 0) {\n            this._setEncodeChar(uCode, mbCode);\n            hasValues = true;\n        } else if (uCode <= NODE_START) {\n            var subNodeIdx = NODE_START - uCode;\n            if (!subNodeEmpty[subNodeIdx]) {  // Skip empty subtrees (they are too large in gb18030).\n                var newPrefix = (mbCode << 8) >>> 0;  // NOTE: '>>> 0' keeps 32-bit num positive.\n                if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars))\n                    hasValues = true;\n                else\n                    subNodeEmpty[subNodeIdx] = true;\n            }\n        } else if (uCode <= SEQ_START) {\n            this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n            hasValues = true;\n        }\n    }\n    return hasValues;\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n    // Encoder state\n    this.leadSurrogate = -1;\n    this.seqObj = undefined;\n    \n    // Static data\n    this.encodeTable = codec.encodeTable;\n    this.encodeTableSeq = codec.encodeTableSeq;\n    this.defaultCharSingleByte = codec.defCharSB;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n    var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n        leadSurrogate = this.leadSurrogate,\n        seqObj = this.seqObj, nextChar = -1,\n        i = 0, j = 0;\n\n    while (true) {\n        // 0. Get next character.\n        if (nextChar === -1) {\n            if (i == str.length) break;\n            var uCode = str.charCodeAt(i++);\n        }\n        else {\n            var uCode = nextChar;\n            nextChar = -1;    \n        }\n\n        // 1. Handle surrogates.\n        if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n            if (uCode < 0xDC00) { // We've got lead surrogate.\n                if (leadSurrogate === -1) {\n                    leadSurrogate = uCode;\n                    continue;\n                } else {\n                    leadSurrogate = uCode;\n                    // Double lead surrogate found.\n                    uCode = UNASSIGNED;\n                }\n            } else { // We've got trail surrogate.\n                if (leadSurrogate !== -1) {\n                    uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n                    leadSurrogate = -1;\n                } else {\n                    // Incomplete surrogate pair - only trail surrogate found.\n                    uCode = UNASSIGNED;\n                }\n                \n            }\n        }\n        else if (leadSurrogate !== -1) {\n            // Incomplete surrogate pair - only lead surrogate found.\n            nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n            leadSurrogate = -1;\n        }\n\n        // 2. Convert uCode character.\n        var dbcsCode = UNASSIGNED;\n        if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n            var resCode = seqObj[uCode];\n            if (typeof resCode === 'object') { // Sequence continues.\n                seqObj = resCode;\n                continue;\n\n            } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n                dbcsCode = resCode;\n\n            } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n                // Try default character for this sequence\n                resCode = seqObj[DEF_CHAR];\n                if (resCode !== undefined) {\n                    dbcsCode = resCode; // Found. Write it.\n                    nextChar = uCode; // Current character will be written too in the next iteration.\n\n                } else {\n                    // TODO: What if we have no default? (resCode == undefined)\n                    // Then, we should write first char of the sequence as-is and try the rest recursively.\n                    // Didn't do it for now because no encoding has this situation yet.\n                    // Currently, just skip the sequence and write current char.\n                }\n            }\n            seqObj = undefined;\n        }\n        else if (uCode >= 0) {  // Regular character\n            var subtable = this.encodeTable[uCode >> 8];\n            if (subtable !== undefined)\n                dbcsCode = subtable[uCode & 0xFF];\n            \n            if (dbcsCode <= SEQ_START) { // Sequence start\n                seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n                continue;\n            }\n\n            if (dbcsCode == UNASSIGNED && this.gb18030) {\n                // Use GB18030 algorithm to find character(s) to write.\n                var idx = findIdx(this.gb18030.uChars, uCode);\n                if (idx != -1) {\n                    var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n                    newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n                    newBuf[j++] = 0x30 + dbcsCode;\n                    continue;\n                }\n            }\n        }\n\n        // 3. Write dbcsCode character.\n        if (dbcsCode === UNASSIGNED)\n            dbcsCode = this.defaultCharSingleByte;\n        \n        if (dbcsCode < 0x100) {\n            newBuf[j++] = dbcsCode;\n        }\n        else if (dbcsCode < 0x10000) {\n            newBuf[j++] = dbcsCode >> 8;   // high byte\n            newBuf[j++] = dbcsCode & 0xFF; // low byte\n        }\n        else if (dbcsCode < 0x1000000) {\n            newBuf[j++] = dbcsCode >> 16;\n            newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n            newBuf[j++] = dbcsCode & 0xFF;\n        } else {\n            newBuf[j++] = dbcsCode >>> 24;\n            newBuf[j++] = (dbcsCode >>> 16) & 0xFF;\n            newBuf[j++] = (dbcsCode >>> 8) & 0xFF;\n            newBuf[j++] = dbcsCode & 0xFF;\n        }\n    }\n\n    this.seqObj = seqObj;\n    this.leadSurrogate = leadSurrogate;\n    return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n    if (this.leadSurrogate === -1 && this.seqObj === undefined)\n        return; // All clean. Most often case.\n\n    var newBuf = Buffer.alloc(10), j = 0;\n\n    if (this.seqObj) { // We're in the sequence.\n        var dbcsCode = this.seqObj[DEF_CHAR];\n        if (dbcsCode !== undefined) { // Write beginning of the sequence.\n            if (dbcsCode < 0x100) {\n                newBuf[j++] = dbcsCode;\n            }\n            else {\n                newBuf[j++] = dbcsCode >> 8;   // high byte\n                newBuf[j++] = dbcsCode & 0xFF; // low byte\n            }\n        } else {\n            // See todo above.\n        }\n        this.seqObj = undefined;\n    }\n\n    if (this.leadSurrogate !== -1) {\n        // Incomplete surrogate pair - only lead surrogate found.\n        newBuf[j++] = this.defaultCharSingleByte;\n        this.leadSurrogate = -1;\n    }\n    \n    return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n    // Decoder state\n    this.nodeIdx = 0;\n    this.prevBytes = [];\n\n    // Static data\n    this.decodeTables = codec.decodeTables;\n    this.decodeTableSeq = codec.decodeTableSeq;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n    var newBuf = Buffer.alloc(buf.length*2),\n        nodeIdx = this.nodeIdx, \n        prevBytes = this.prevBytes, prevOffset = this.prevBytes.length,\n        seqStart = -this.prevBytes.length, // idx of the start of current parsed sequence.\n        uCode;\n\n    for (var i = 0, j = 0; i < buf.length; i++) {\n        var curByte = (i >= 0) ? buf[i] : prevBytes[i + prevOffset];\n\n        // Lookup in current trie node.\n        var uCode = this.decodeTables[nodeIdx][curByte];\n\n        if (uCode >= 0) { \n            // Normal character, just use it.\n        }\n        else if (uCode === UNASSIGNED) { // Unknown char.\n            // TODO: Callback with seq.\n            uCode = this.defaultCharUnicode.charCodeAt(0);\n            i = seqStart; // Skip one byte ('i' will be incremented by the for loop) and try to parse again.\n        }\n        else if (uCode === GB18030_CODE) {\n            if (i >= 3) {\n                var ptr = (buf[i-3]-0x81)*12600 + (buf[i-2]-0x30)*1260 + (buf[i-1]-0x81)*10 + (curByte-0x30);\n            } else {\n                var ptr = (prevBytes[i-3+prevOffset]-0x81)*12600 + \n                          (((i-2 >= 0) ? buf[i-2] : prevBytes[i-2+prevOffset])-0x30)*1260 + \n                          (((i-1 >= 0) ? buf[i-1] : prevBytes[i-1+prevOffset])-0x81)*10 + \n                          (curByte-0x30);\n            }\n            var idx = findIdx(this.gb18030.gbChars, ptr);\n            uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n        }\n        else if (uCode <= NODE_START) { // Go to next trie node.\n            nodeIdx = NODE_START - uCode;\n            continue;\n        }\n        else if (uCode <= SEQ_START) { // Output a sequence of chars.\n            var seq = this.decodeTableSeq[SEQ_START - uCode];\n            for (var k = 0; k < seq.length - 1; k++) {\n                uCode = seq[k];\n                newBuf[j++] = uCode & 0xFF;\n                newBuf[j++] = uCode >> 8;\n            }\n            uCode = seq[seq.length-1];\n        }\n        else\n            throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n        // Write the character to buffer, handling higher planes using surrogate pair.\n        if (uCode >= 0x10000) { \n            uCode -= 0x10000;\n            var uCodeLead = 0xD800 | (uCode >> 10);\n            newBuf[j++] = uCodeLead & 0xFF;\n            newBuf[j++] = uCodeLead >> 8;\n\n            uCode = 0xDC00 | (uCode & 0x3FF);\n        }\n        newBuf[j++] = uCode & 0xFF;\n        newBuf[j++] = uCode >> 8;\n\n        // Reset trie node.\n        nodeIdx = 0; seqStart = i+1;\n    }\n\n    this.nodeIdx = nodeIdx;\n    this.prevBytes = (seqStart >= 0)\n        ? Array.prototype.slice.call(buf, seqStart)\n        : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf));\n\n    return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n    var ret = '';\n\n    // Try to parse all remaining chars.\n    while (this.prevBytes.length > 0) {\n        // Skip 1 character in the buffer.\n        ret += this.defaultCharUnicode;\n        var bytesArr = this.prevBytes.slice(1);\n\n        // Parse remaining as usual.\n        this.prevBytes = [];\n        this.nodeIdx = 0;\n        if (bytesArr.length > 0)\n            ret += this.write(bytesArr);\n    }\n\n    this.prevBytes = [];\n    this.nodeIdx = 0;\n    return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n    if (table[0] > val)\n        return -1;\n\n    var l = 0, r = table.length;\n    while (l < r-1) { // always table[l] <= val < table[r]\n        var mid = l + ((r-l+1) >> 1);\n        if (table[mid] <= val)\n            l = mid;\n        else\n            r = mid;\n    }\n    return l;\n}\n\n", "[\n[\"0\",\"\\u0000\",128],\n[\"a1\",\"\uFF61\",62],\n[\"8140\",\"\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008\",9,\"\uFF0B\uFF0D\u00B1\u00D7\"],\n[\"8180\",\"\u00F7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013\"],\n[\"81b8\",\"\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\"],\n[\"81c8\",\"\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203\"],\n[\"81da\",\"\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\"],\n[\"81f0\",\"\u212B\u2030\u266F\u266D\u266A\u2020\u2021\u00B6\"],\n[\"81fc\",\"\u25EF\"],\n[\"824f\",\"\uFF10\",9],\n[\"8260\",\"\uFF21\",25],\n[\"8281\",\"\uFF41\",25],\n[\"829f\",\"\u3041\",82],\n[\"8340\",\"\u30A1\",62],\n[\"8380\",\"\u30E0\",22],\n[\"839f\",\"\u0391\",16,\"\u03A3\",6],\n[\"83bf\",\"\u03B1\",16,\"\u03C3\",6],\n[\"8440\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"8470\",\"\u0430\",5,\"\u0451\u0436\",7],\n[\"8480\",\"\u043E\",17],\n[\"849f\",\"\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\"],\n[\"8740\",\"\u2460\",19,\"\u2160\",9],\n[\"875f\",\"\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1\"],\n[\"877e\",\"\u337B\"],\n[\"8780\",\"\u301D\u301F\u2116\u33CD\u2121\u32A4\",4,\"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A\"],\n[\"889f\",\"\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D\"],\n[\"8940\",\"\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\"],\n[\"8980\",\"\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539\"],\n[\"8a40\",\"\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\"],\n[\"8a80\",\"\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4\"],\n[\"8b40\",\"\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\"],\n[\"8b80\",\"\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\"],\n[\"8c40\",\"\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\"],\n[\"8c80\",\"\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411\"],\n[\"8d40\",\"\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\"],\n[\"8d80\",\"\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237\"],\n[\"8e40\",\"\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\"],\n[\"8e80\",\"\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468\"],\n[\"8f40\",\"\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\"],\n[\"8f80\",\"\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE\"],\n[\"9040\",\"\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\"],\n[\"9080\",\"\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA\"],\n[\"9140\",\"\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\"],\n[\"9180\",\"\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\"],\n[\"9240\",\"\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\"],\n[\"9280\",\"\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013\"],\n[\"9340\",\"\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\"],\n[\"9380\",\"\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165\"],\n[\"9440\",\"\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\"],\n[\"9480\",\"\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E\"],\n[\"9540\",\"\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\"],\n[\"9580\",\"\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B\"],\n[\"9640\",\"\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\"],\n[\"9680\",\"\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652\"],\n[\"9740\",\"\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\"],\n[\"9780\",\"\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\"],\n[\"9840\",\"\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155\"],\n[\"989f\",\"\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2\"],\n[\"9940\",\"\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\"],\n[\"9980\",\"\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\"],\n[\"9a40\",\"\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\"],\n[\"9a80\",\"\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969\"],\n[\"9b40\",\"\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\"],\n[\"9b80\",\"\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\"],\n[\"9c40\",\"\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\"],\n[\"9c80\",\"\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B\"],\n[\"9d40\",\"\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\"],\n[\"9d80\",\"\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\"],\n[\"9e40\",\"\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\"],\n[\"9e80\",\"\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3\"],\n[\"9f40\",\"\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\"],\n[\"9f80\",\"\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\"],\n[\"e040\",\"\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\"],\n[\"e080\",\"\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1\"],\n[\"e140\",\"\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\"],\n[\"e180\",\"\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\"],\n[\"e240\",\"\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\"],\n[\"e280\",\"\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06\"],\n[\"e340\",\"\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\"],\n[\"e380\",\"\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B\"],\n[\"e440\",\"\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\"],\n[\"e480\",\"\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548\"],\n[\"e540\",\"\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\"],\n[\"e580\",\"\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E\"],\n[\"e640\",\"\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\"],\n[\"e680\",\"\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A\"],\n[\"e740\",\"\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\"],\n[\"e780\",\"\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E\"],\n[\"e840\",\"\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\"],\n[\"e880\",\"\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870\"],\n[\"e940\",\"\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\"],\n[\"e980\",\"\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\"],\n[\"ea40\",\"\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\"],\n[\"ea80\",\"\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464\u51DC\u7199\"],\n[\"ed40\",\"\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\"],\n[\"ed80\",\"\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\"],\n[\"ee40\",\"\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\"],\n[\"ee80\",\"\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"],\n[\"eeef\",\"\u2170\",9,\"\uFFE2\uFFE4\uFF07\uFF02\"],\n[\"f040\",\"\uE000\",62],\n[\"f080\",\"\uE03F\",124],\n[\"f140\",\"\uE0BC\",62],\n[\"f180\",\"\uE0FB\",124],\n[\"f240\",\"\uE178\",62],\n[\"f280\",\"\uE1B7\",124],\n[\"f340\",\"\uE234\",62],\n[\"f380\",\"\uE273\",124],\n[\"f440\",\"\uE2F0\",62],\n[\"f480\",\"\uE32F\",124],\n[\"f540\",\"\uE3AC\",62],\n[\"f580\",\"\uE3EB\",124],\n[\"f640\",\"\uE468\",62],\n[\"f680\",\"\uE4A7\",124],\n[\"f740\",\"\uE524\",62],\n[\"f780\",\"\uE563\",124],\n[\"f840\",\"\uE5E0\",62],\n[\"f880\",\"\uE61F\",124],\n[\"f940\",\"\uE69C\"],\n[\"fa40\",\"\u2170\",9,\"\u2160\",9,\"\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u2235\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\"],\n[\"fa80\",\"\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\"],\n[\"fb40\",\"\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\"],\n[\"fb80\",\"\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\"],\n[\"fc40\",\"\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"]\n]\n", "[\n[\"0\",\"\\u0000\",127],\n[\"8ea1\",\"\uFF61\",62],\n[\"a1a1\",\"\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008\",9,\"\uFF0B\uFF0D\u00B1\u00D7\u00F7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\"],\n[\"a2a1\",\"\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013\"],\n[\"a2ba\",\"\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\"],\n[\"a2ca\",\"\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203\"],\n[\"a2dc\",\"\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\"],\n[\"a2f2\",\"\u212B\u2030\u266F\u266D\u266A\u2020\u2021\u00B6\"],\n[\"a2fe\",\"\u25EF\"],\n[\"a3b0\",\"\uFF10\",9],\n[\"a3c1\",\"\uFF21\",25],\n[\"a3e1\",\"\uFF41\",25],\n[\"a4a1\",\"\u3041\",82],\n[\"a5a1\",\"\u30A1\",85],\n[\"a6a1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a6c1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a7a1\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"a7d1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"a8a1\",\"\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\"],\n[\"ada1\",\"\u2460\",19,\"\u2160\",9],\n[\"adc0\",\"\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1\"],\n[\"addf\",\"\u337B\u301D\u301F\u2116\u33CD\u2121\u32A4\",4,\"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A\"],\n[\"b0a1\",\"\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D\"],\n[\"b1a1\",\"\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\"],\n[\"b2a1\",\"\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539\"],\n[\"b3a1\",\"\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\"],\n[\"b4a1\",\"\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4\"],\n[\"b5a1\",\"\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\"],\n[\"b6a1\",\"\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\"],\n[\"b7a1\",\"\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\"],\n[\"b8a1\",\"\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411\"],\n[\"b9a1\",\"\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\"],\n[\"baa1\",\"\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237\"],\n[\"bba1\",\"\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\"],\n[\"bca1\",\"\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468\"],\n[\"bda1\",\"\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\"],\n[\"bea1\",\"\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE\"],\n[\"bfa1\",\"\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\"],\n[\"c0a1\",\"\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA\"],\n[\"c1a1\",\"\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\"],\n[\"c2a1\",\"\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\"],\n[\"c3a1\",\"\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\"],\n[\"c4a1\",\"\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013\"],\n[\"c5a1\",\"\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\"],\n[\"c6a1\",\"\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165\"],\n[\"c7a1\",\"\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\"],\n[\"c8a1\",\"\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E\"],\n[\"c9a1\",\"\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\"],\n[\"caa1\",\"\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B\"],\n[\"cba1\",\"\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\"],\n[\"cca1\",\"\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652\"],\n[\"cda1\",\"\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\"],\n[\"cea1\",\"\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\"],\n[\"cfa1\",\"\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155\"],\n[\"d0a1\",\"\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2\"],\n[\"d1a1\",\"\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\"],\n[\"d2a1\",\"\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\"],\n[\"d3a1\",\"\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\"],\n[\"d4a1\",\"\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969\"],\n[\"d5a1\",\"\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\"],\n[\"d6a1\",\"\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\"],\n[\"d7a1\",\"\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\"],\n[\"d8a1\",\"\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B\"],\n[\"d9a1\",\"\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\"],\n[\"daa1\",\"\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\"],\n[\"dba1\",\"\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\"],\n[\"dca1\",\"\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3\"],\n[\"dda1\",\"\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\"],\n[\"dea1\",\"\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\"],\n[\"dfa1\",\"\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\"],\n[\"e0a1\",\"\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1\"],\n[\"e1a1\",\"\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\"],\n[\"e2a1\",\"\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\"],\n[\"e3a1\",\"\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\"],\n[\"e4a1\",\"\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06\"],\n[\"e5a1\",\"\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\"],\n[\"e6a1\",\"\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B\"],\n[\"e7a1\",\"\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\"],\n[\"e8a1\",\"\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548\"],\n[\"e9a1\",\"\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\"],\n[\"eaa1\",\"\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E\"],\n[\"eba1\",\"\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\"],\n[\"eca1\",\"\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A\"],\n[\"eda1\",\"\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\"],\n[\"eea1\",\"\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E\"],\n[\"efa1\",\"\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\"],\n[\"f0a1\",\"\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870\"],\n[\"f1a1\",\"\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\"],\n[\"f2a1\",\"\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\"],\n[\"f3a1\",\"\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\"],\n[\"f4a1\",\"\u582F\u69C7\u9059\u7464\u51DC\u7199\"],\n[\"f9a1\",\"\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\"],\n[\"faa1\",\"\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\"],\n[\"fba1\",\"\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\"],\n[\"fca1\",\"\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"],\n[\"fcf1\",\"\u2170\",9,\"\uFFE2\uFFE4\uFF07\uFF02\"],\n[\"8fa2af\",\"\u02D8\u02C7\u00B8\u02D9\u02DD\u00AF\u02DB\u02DA\uFF5E\u0384\u0385\"],\n[\"8fa2c2\",\"\u00A1\u00A6\u00BF\"],\n[\"8fa2eb\",\"\u00BA\u00AA\u00A9\u00AE\u2122\u00A4\u2116\"],\n[\"8fa6e1\",\"\u0386\u0388\u0389\u038A\u03AA\"],\n[\"8fa6e7\",\"\u038C\"],\n[\"8fa6e9\",\"\u038E\u03AB\"],\n[\"8fa6ec\",\"\u038F\"],\n[\"8fa6f1\",\"\u03AC\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE\"],\n[\"8fa7c2\",\"\u0402\",10,\"\u040E\u040F\"],\n[\"8fa7f2\",\"\u0452\",10,\"\u045E\u045F\"],\n[\"8fa9a1\",\"\u00C6\u0110\"],\n[\"8fa9a4\",\"\u0126\"],\n[\"8fa9a6\",\"\u0132\"],\n[\"8fa9a8\",\"\u0141\u013F\"],\n[\"8fa9ab\",\"\u014A\u00D8\u0152\"],\n[\"8fa9af\",\"\u0166\u00DE\"],\n[\"8fa9c1\",\"\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0142\u0140\u0149\u014B\u00F8\u0153\u00DF\u0167\u00FE\"],\n[\"8faaa1\",\"\u00C1\u00C0\u00C4\u00C2\u0102\u01CD\u0100\u0104\u00C5\u00C3\u0106\u0108\u010C\u00C7\u010A\u010E\u00C9\u00C8\u00CB\u00CA\u011A\u0116\u0112\u0118\"],\n[\"8faaba\",\"\u011C\u011E\u0122\u0120\u0124\u00CD\u00CC\u00CF\u00CE\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139\u013D\u013B\u0143\u0147\u0145\u00D1\u00D3\u00D2\u00D6\u00D4\u01D1\u0150\u014C\u00D5\u0154\u0158\u0156\u015A\u015C\u0160\u015E\u0164\u0162\u00DA\u00D9\u00DC\u00DB\u016C\u01D3\u0170\u016A\u0172\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\u00DD\u0178\u0176\u0179\u017D\u017B\"],\n[\"8faba1\",\"\u00E1\u00E0\u00E4\u00E2\u0103\u01CE\u0101\u0105\u00E5\u00E3\u0107\u0109\u010D\u00E7\u010B\u010F\u00E9\u00E8\u00EB\u00EA\u011B\u0117\u0113\u0119\u01F5\u011D\u011F\"],\n[\"8fabbd\",\"\u0121\u0125\u00ED\u00EC\u00EF\u00EE\u01D0\"],\n[\"8fabc5\",\"\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C\u0144\u0148\u0146\u00F1\u00F3\u00F2\u00F6\u00F4\u01D2\u0151\u014D\u00F5\u0155\u0159\u0157\u015B\u015D\u0161\u015F\u0165\u0163\u00FA\u00F9\u00FC\u00FB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169\u01D8\u01DC\u01DA\u01D6\u0175\u00FD\u00FF\u0177\u017A\u017E\u017C\"],\n[\"8fb0a1\",\"\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84\"],\n[\"8fb1a1\",\"\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083\u5084\u5086\u508A\u508E\u508F\u5090\"],\n[\"8fb2a1\",\"\u5092\u5093\u5094\u5096\u509B\u509C\u509E\",4,\"\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA\u51BC\u51BE\u51BF\u51C2\"],\n[\"8fb3a1\",\"\u51C8\u51CF\u51D1\u51D2\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303\u530A\u530B\"],\n[\"8fb4a1\",\"\u530C\u5311\u5313\u5318\u531B\u531C\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F\"],\n[\"8fb5a1\",\"\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2\"],\n[\"8fb6a1\",\"\u55D3\u55D7\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605\u5608\u560A\u560D\",5,\"\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9\u56DC\u56DD\u56DF\u56E1\u56E4\",4,\"\u56F1\u56EB\u56ED\"],\n[\"8fb7a1\",\"\u56F6\u56F7\u5701\u5702\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768\u576B\u576D\",4,\"\u5773\u5774\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808\u5809\u57E1\"],\n[\"8fb8a1\",\"\u580C\u580D\u581B\u581E\u581F\u5820\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D\"],\n[\"8fb9a1\",\"\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF\"],\n[\"8fbaa1\",\"\u5AC4\u5AC6\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6\",4,\"\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62\u5C63\u5C67\u5C68\u5C69\"],\n[\"8fbba1\",\"\u5C6D\u5C70\u5C74\u5C75\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9\u5DE0\u5DE4\"],\n[\"8fbca1\",\"\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A\",4,\"\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67\"],\n[\"8fbda1\",\"\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0\",4,\"\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7\"],\n[\"8fbea1\",\"\u60BB\u60BE\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A\u610C\u6110\",4,\"\u6116\u6117\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1\u61E2\u61E7\u61E9\u61E5\"],\n[\"8fbfa1\",\"\u61EC\u61ED\u61EF\u6201\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371\u6374\u6375\"],\n[\"8fc0a1\",\"\u6378\u637C\u637D\u637F\u6382\u6384\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF\"],\n[\"8fc1a1\",\"\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609\u660D\u6611\u6612\u6615\u6616\u661D\"],\n[\"8fc2a1\",\"\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748\u674C\u6754\u6755\u675D\"],\n[\"8fc3a1\",\"\u6766\u676C\u676E\u6774\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855\u6857\u6858\u685B\u686B\u686E\",4,\"\u6875\u6879\u687A\u687B\u687C\u6882\u6884\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8\u68CC\u68CF\"],\n[\"8fc4a1\",\"\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32\"],\n[\"8fc5a1\",\"\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D\"],\n[\"8fc6a1\",\"\u6B7E\u6B82\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0\u6CD1\u6CD2\u6CD4\u6CD6\"],\n[\"8fc7a1\",\"\u6CDA\u6CDC\u6CE0\u6CE7\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C\u6E5D\u6E5E\"],\n[\"8fc8a1\",\"\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA\"],\n[\"8fc9a1\",\"\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E\u7081\u7085\u7086\u7094\",4,\"\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4\u70FA\u7103\",4,\"\u710B\u710C\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150\u7152\u7157\u715A\u715C\u715E\u7160\"],\n[\"8fcaa1\",\"\u7168\u7179\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5\u72F3\u72F4\u72FA\u72FB\"],\n[\"8fcba1\",\"\u72FE\u7302\u7304\u7305\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA\u73FB\u73FD\"],\n[\"8fcca1\",\"\u73FF\u7400\u7401\u7404\u7407\u740A\u7411\u741A\u741B\u7424\u7426\u7428\",9,\"\u7439\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506\"],\n[\"8fcda1\",\"\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E\u755F\u7561\u756F\u7571\u7579\",5,\"\u7581\u7585\u7590\u7592\u7593\u7595\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629\u762D\u7632\u7633\u7635\u7638\u7639\"],\n[\"8fcea1\",\"\u763A\u763C\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B\u769C\u769D\u769F\u76A0\u76A2\",6,\"\u76AA\u76AD\u76BD\u76C1\u76C5\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C\u775E\u775F\u7760\u7762\"],\n[\"8fcfa1\",\"\u7764\u7767\u776A\u776C\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1\u78B2\u78B3\"],\n[\"8fd0a1\",\"\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE\"],\n[\"8fd1a1\",\"\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30\"],\n[\"8fd2a1\",\"\u7B31\u7B34\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59\",5],\n[\"8fd3a1\",\"\u7C61\u7C63\u7C67\u7C69\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96\u7D97\u7D9D\"],\n[\"8fd4a1\",\"\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6\u7DB7\u7DB9\u7DC2\",4,\"\u7DCC\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D\"],\n[\"8fd5a1\",\"\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE\"],\n[\"8fd6a1\",\"\u80F0\u80F2\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A\u8243\u8244\u8245\u8246\"],\n[\"8fd7a1\",\"\u824B\u824E\u824F\u8251\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357\u8370\u8378\"],\n[\"8fd8a1\",\"\u837D\u837F\u8380\u8382\u8384\u8386\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3\"],\n[\"8fd9a1\",\"\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F\u8546\u854F\",4,\"\u8556\u8559\u855C\",6,\"\u8564\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC\"],\n[\"8fdaa1\",\"\u85FF\u8600\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653\u8656\u8657\u8658\u8659\u865D\u8660\",4,\"\u8669\u866C\u866F\u8675\u8676\u8677\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719\u871E\u871F\u8721\u8723\"],\n[\"8fdba1\",\"\u8728\u872E\u872F\u8731\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F\u8771\u8772\u877B\u8783\",6,\"\u878B\u878C\u8790\u8793\u8795\u8797\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830\u8832\u8835\"],\n[\"8fdca1\",\"\u883A\u883C\u8841\u8843\u8845\u8848\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA\",4,\"\u88D1\u88D2\u88D3\u88DB\u88DE\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A\"],\n[\"8fdda1\",\"\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5\u89B6\u89B7\u89BC\u89D4\",4,\"\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3\"],\n[\"8fdea1\",\"\u8AB6\u8AB7\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37\u8B3C\u8B42\",4,\"\u8B48\u8B52\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75\u8C76\u8C7B\u8C7E\u8C86\"],\n[\"8fdfa1\",\"\u8C87\u8C8B\u8C90\u8C92\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20\u8E21\u8E22\"],\n[\"8fe0a1\",\"\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41\"],\n[\"8fe1a1\",\"\u8F43\u8F47\u8F4F\u8F51\",4,\"\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3\"],\n[\"8fe2a1\",\"\u90C4\u90C5\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6\u91BB\u91BC\u91BD\u91BF\"],\n[\"8fe3a1\",\"\u91C2\u91C3\u91C5\u91D3\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9\u91EA\u91EC\",5,\"\u91F7\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E\u926F\u9270\u9275\",4,\"\u927B\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E\u9292\u9297\"],\n[\"8fe4a1\",\"\u9299\u929F\u92A0\u92A4\u92A5\u92A7\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB\u92BC\u92BD\u92BF\",4,\"\u92C5\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376\"],\n[\"8fe5a1\",\"\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7\u93C9\",4,\"\u93D3\u93D9\u93DC\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F\u9471\u9472\u9484\u9483\u9578\u9579\"],\n[\"8fe6a1\",\"\u957E\u9584\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9\u96EF\u96F1\u96FA\u9702\"],\n[\"8fe7a1\",\"\u9703\u9705\u9709\u971A\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820\u9823\u9826\"],\n[\"8fe8a1\",\"\u982B\u982E\u982F\u9830\u9832\u9833\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B\u9931\",4,\"\u9939\u993A\u993B\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5\"],\n[\"8fe9a1\",\"\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA\u9AFD\u9AFF\",4],\n[\"8feaa1\",\"\u9B04\u9B05\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61\u9B63\u9B65\u9B66\u9B68\u9B6A\",4,\"\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB\u9BEF\u9BF3\u9BF7\u9BF8\"],\n[\"8feba1\",\"\u9BF9\u9BFA\u9BFD\u9BFF\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26\",4,\"\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76\u9D77\u9D7B\"],\n[\"8feca1\",\"\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5\"],\n[\"8feda1\",\"\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43\",4,\"\u9F53\u9F55\u9F56\u9F57\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D\",4,\"\u9F73\u9F75\u9F7A\u9F7D\u9F8F\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1\u9FA2\u9FA3\u9FA5\"]\n]\n", "[\n[\"0\",\"\\u0000\",127,\"\u20AC\"],\n[\"8140\",\"\u4E02\u4E04\u4E05\u4E06\u4E0F\u4E12\u4E17\u4E1F\u4E20\u4E21\u4E23\u4E26\u4E29\u4E2E\u4E2F\u4E31\u4E33\u4E35\u4E37\u4E3C\u4E40\u4E41\u4E42\u4E44\u4E46\u4E4A\u4E51\u4E55\u4E57\u4E5A\u4E5B\u4E62\u4E63\u4E64\u4E65\u4E67\u4E68\u4E6A\",5,\"\u4E72\u4E74\",9,\"\u4E7F\",6,\"\u4E87\u4E8A\"],\n[\"8180\",\"\u4E90\u4E96\u4E97\u4E99\u4E9C\u4E9D\u4E9E\u4EA3\u4EAA\u4EAF\u4EB0\u4EB1\u4EB4\u4EB6\u4EB7\u4EB8\u4EB9\u4EBC\u4EBD\u4EBE\u4EC8\u4ECC\u4ECF\u4ED0\u4ED2\u4EDA\u4EDB\u4EDC\u4EE0\u4EE2\u4EE6\u4EE7\u4EE9\u4EED\u4EEE\u4EEF\u4EF1\u4EF4\u4EF8\u4EF9\u4EFA\u4EFC\u4EFE\u4F00\u4F02\",6,\"\u4F0B\u4F0C\u4F12\",4,\"\u4F1C\u4F1D\u4F21\u4F23\u4F28\u4F29\u4F2C\u4F2D\u4F2E\u4F31\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\",4,\"\u4F44\u4F45\u4F47\",5,\"\u4F52\u4F54\u4F56\u4F61\u4F62\u4F66\u4F68\u4F6A\u4F6B\u4F6D\u4F6E\u4F71\u4F72\u4F75\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F80\u4F81\u4F82\u4F85\u4F86\u4F87\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F95\u4F96\u4F98\u4F99\u4F9A\u4F9C\u4F9E\u4F9F\u4FA1\u4FA2\"],\n[\"8240\",\"\u4FA4\u4FAB\u4FAD\u4FB0\",4,\"\u4FB6\",8,\"\u4FC0\u4FC1\u4FC2\u4FC6\u4FC7\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FD2\",4,\"\u4FD9\u4FDB\u4FE0\u4FE2\u4FE4\u4FE5\u4FE7\u4FEB\u4FEC\u4FF0\u4FF2\u4FF4\u4FF5\u4FF6\u4FF7\u4FF9\u4FFB\u4FFC\u4FFD\u4FFF\",11],\n[\"8280\",\"\u500B\u500E\u5010\u5011\u5013\u5015\u5016\u5017\u501B\u501D\u501E\u5020\u5022\u5023\u5024\u5027\u502B\u502F\",10,\"\u503B\u503D\u503F\u5040\u5041\u5042\u5044\u5045\u5046\u5049\u504A\u504B\u504D\u5050\",4,\"\u5056\u5057\u5058\u5059\u505B\u505D\",7,\"\u5066\",5,\"\u506D\",8,\"\u5078\u5079\u507A\u507C\u507D\u5081\u5082\u5083\u5084\u5086\u5087\u5089\u508A\u508B\u508C\u508E\",20,\"\u50A4\u50A6\u50AA\u50AB\u50AD\",4,\"\u50B3\",6,\"\u50BC\"],\n[\"8340\",\"\u50BD\",17,\"\u50D0\",5,\"\u50D7\u50D8\u50D9\u50DB\",10,\"\u50E8\u50E9\u50EA\u50EB\u50EF\u50F0\u50F1\u50F2\u50F4\u50F6\",4,\"\u50FC\",9,\"\u5108\"],\n[\"8380\",\"\u5109\u510A\u510C\",5,\"\u5113\",13,\"\u5122\",28,\"\u5142\u5147\u514A\u514C\u514E\u514F\u5150\u5152\u5153\u5157\u5158\u5159\u515B\u515D\",4,\"\u5163\u5164\u5166\u5167\u5169\u516A\u516F\u5172\u517A\u517E\u517F\u5183\u5184\u5186\u5187\u518A\u518B\u518E\u518F\u5190\u5191\u5193\u5194\u5198\u519A\u519D\u519E\u519F\u51A1\u51A3\u51A6\",4,\"\u51AD\u51AE\u51B4\u51B8\u51B9\u51BA\u51BE\u51BF\u51C1\u51C2\u51C3\u51C5\u51C8\u51CA\u51CD\u51CE\u51D0\u51D2\",5],\n[\"8440\",\"\u51D8\u51D9\u51DA\u51DC\u51DE\u51DF\u51E2\u51E3\u51E5\",5,\"\u51EC\u51EE\u51F1\u51F2\u51F4\u51F7\u51FE\u5204\u5205\u5209\u520B\u520C\u520F\u5210\u5213\u5214\u5215\u521C\u521E\u521F\u5221\u5222\u5223\u5225\u5226\u5227\u522A\u522C\u522F\u5231\u5232\u5234\u5235\u523C\u523E\u5244\",5,\"\u524B\u524E\u524F\u5252\u5253\u5255\u5257\u5258\"],\n[\"8480\",\"\u5259\u525A\u525B\u525D\u525F\u5260\u5262\u5263\u5264\u5266\u5268\u526B\u526C\u526D\u526E\u5270\u5271\u5273\",9,\"\u527E\u5280\u5283\",4,\"\u5289\",6,\"\u5291\u5292\u5294\",6,\"\u529C\u52A4\u52A5\u52A6\u52A7\u52AE\u52AF\u52B0\u52B4\",9,\"\u52C0\u52C1\u52C2\u52C4\u52C5\u52C6\u52C8\u52CA\u52CC\u52CD\u52CE\u52CF\u52D1\u52D3\u52D4\u52D5\u52D7\u52D9\",5,\"\u52E0\u52E1\u52E2\u52E3\u52E5\",10,\"\u52F1\",7,\"\u52FB\u52FC\u52FD\u5301\u5302\u5303\u5304\u5307\u5309\u530A\u530B\u530C\u530E\"],\n[\"8540\",\"\u5311\u5312\u5313\u5314\u5318\u531B\u531C\u531E\u531F\u5322\u5324\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u532F\",9,\"\u533C\u533D\u5340\u5342\u5344\u5346\u534B\u534C\u534D\u5350\u5354\u5358\u5359\u535B\u535D\u5365\u5368\u536A\u536C\u536D\u5372\u5376\u5379\u537B\u537C\u537D\u537E\u5380\u5381\u5383\u5387\u5388\u538A\u538E\u538F\"],\n[\"8580\",\"\u5390\",4,\"\u5396\u5397\u5399\u539B\u539C\u539E\u53A0\u53A1\u53A4\u53A7\u53AA\u53AB\u53AC\u53AD\u53AF\",6,\"\u53B7\u53B8\u53B9\u53BA\u53BC\u53BD\u53BE\u53C0\u53C3\",4,\"\u53CE\u53CF\u53D0\u53D2\u53D3\u53D5\u53DA\u53DC\u53DD\u53DE\u53E1\u53E2\u53E7\u53F4\u53FA\u53FE\u53FF\u5400\u5402\u5405\u5407\u540B\u5414\u5418\u5419\u541A\u541C\u5422\u5424\u5425\u542A\u5430\u5433\u5436\u5437\u543A\u543D\u543F\u5441\u5442\u5444\u5445\u5447\u5449\u544C\u544D\u544E\u544F\u5451\u545A\u545D\",4,\"\u5463\u5465\u5467\u5469\",7,\"\u5474\u5479\u547A\u547E\u547F\u5481\u5483\u5485\u5487\u5488\u5489\u548A\u548D\u5491\u5493\u5497\u5498\u549C\u549E\u549F\u54A0\u54A1\"],\n[\"8640\",\"\u54A2\u54A5\u54AE\u54B0\u54B2\u54B5\u54B6\u54B7\u54B9\u54BA\u54BC\u54BE\u54C3\u54C5\u54CA\u54CB\u54D6\u54D8\u54DB\u54E0\",4,\"\u54EB\u54EC\u54EF\u54F0\u54F1\u54F4\",5,\"\u54FB\u54FE\u5500\u5502\u5503\u5504\u5505\u5508\u550A\",4,\"\u5512\u5513\u5515\",5,\"\u551C\u551D\u551E\u551F\u5521\u5525\u5526\"],\n[\"8680\",\"\u5528\u5529\u552B\u552D\u5532\u5534\u5535\u5536\u5538\u5539\u553A\u553B\u553D\u5540\u5542\u5545\u5547\u5548\u554B\",4,\"\u5551\u5552\u5553\u5554\u5557\",4,\"\u555D\u555E\u555F\u5560\u5562\u5563\u5568\u5569\u556B\u556F\",5,\"\u5579\u557A\u557D\u557F\u5585\u5586\u558C\u558D\u558E\u5590\u5592\u5593\u5595\u5596\u5597\u559A\u559B\u559E\u55A0\",6,\"\u55A8\",8,\"\u55B2\u55B4\u55B6\u55B8\u55BA\u55BC\u55BF\",4,\"\u55C6\u55C7\u55C8\u55CA\u55CB\u55CE\u55CF\u55D0\u55D5\u55D7\",4,\"\u55DE\u55E0\u55E2\u55E7\u55E9\u55ED\u55EE\u55F0\u55F1\u55F4\u55F6\u55F8\",4,\"\u55FF\u5602\u5603\u5604\u5605\"],\n[\"8740\",\"\u5606\u5607\u560A\u560B\u560D\u5610\",7,\"\u5619\u561A\u561C\u561D\u5620\u5621\u5622\u5625\u5626\u5628\u5629\u562A\u562B\u562E\u562F\u5630\u5633\u5635\u5637\u5638\u563A\u563C\u563D\u563E\u5640\",11,\"\u564F\",4,\"\u5655\u5656\u565A\u565B\u565D\",4],\n[\"8780\",\"\u5663\u5665\u5666\u5667\u566D\u566E\u566F\u5670\u5672\u5673\u5674\u5675\u5677\u5678\u5679\u567A\u567D\",7,\"\u5687\",6,\"\u5690\u5691\u5692\u5694\",14,\"\u56A4\",10,\"\u56B0\",6,\"\u56B8\u56B9\u56BA\u56BB\u56BD\",12,\"\u56CB\",8,\"\u56D5\u56D6\u56D8\u56D9\u56DC\u56E3\u56E5\",5,\"\u56EC\u56EE\u56EF\u56F2\u56F3\u56F6\u56F7\u56F8\u56FB\u56FC\u5700\u5701\u5702\u5705\u5707\u570B\",6],\n[\"8840\",\"\u5712\",9,\"\u571D\u571E\u5720\u5721\u5722\u5724\u5725\u5726\u5727\u572B\u5731\u5732\u5734\",4,\"\u573C\u573D\u573F\u5741\u5743\u5744\u5745\u5746\u5748\u5749\u574B\u5752\",4,\"\u5758\u5759\u5762\u5763\u5765\u5767\u576C\u576E\u5770\u5771\u5772\u5774\u5775\u5778\u5779\u577A\u577D\u577E\u577F\u5780\"],\n[\"8880\",\"\u5781\u5787\u5788\u5789\u578A\u578D\",4,\"\u5794\",6,\"\u579C\u579D\u579E\u579F\u57A5\u57A8\u57AA\u57AC\u57AF\u57B0\u57B1\u57B3\u57B5\u57B6\u57B7\u57B9\",8,\"\u57C4\",6,\"\u57CC\u57CD\u57D0\u57D1\u57D3\u57D6\u57D7\u57DB\u57DC\u57DE\u57E1\u57E2\u57E3\u57E5\",7,\"\u57EE\u57F0\u57F1\u57F2\u57F3\u57F5\u57F6\u57F7\u57FB\u57FC\u57FE\u57FF\u5801\u5803\u5804\u5805\u5808\u5809\u580A\u580C\u580E\u580F\u5810\u5812\u5813\u5814\u5816\u5817\u5818\u581A\u581B\u581C\u581D\u581F\u5822\u5823\u5825\",4,\"\u582B\",4,\"\u5831\u5832\u5833\u5834\u5836\",7],\n[\"8940\",\"\u583E\",5,\"\u5845\",6,\"\u584E\u584F\u5850\u5852\u5853\u5855\u5856\u5857\u5859\",4,\"\u585F\",5,\"\u5866\",4,\"\u586D\",16,\"\u587F\u5882\u5884\u5886\u5887\u5888\u588A\u588B\u588C\"],\n[\"8980\",\"\u588D\",4,\"\u5894\",4,\"\u589B\u589C\u589D\u58A0\",7,\"\u58AA\",17,\"\u58BD\u58BE\u58BF\u58C0\u58C2\u58C3\u58C4\u58C6\",10,\"\u58D2\u58D3\u58D4\u58D6\",13,\"\u58E5\",5,\"\u58ED\u58EF\u58F1\u58F2\u58F4\u58F5\u58F7\u58F8\u58FA\",7,\"\u5903\u5905\u5906\u5908\",4,\"\u590E\u5910\u5911\u5912\u5913\u5917\u5918\u591B\u591D\u591E\u5920\u5921\u5922\u5923\u5926\u5928\u592C\u5930\u5932\u5933\u5935\u5936\u593B\"],\n[\"8a40\",\"\u593D\u593E\u593F\u5940\u5943\u5945\u5946\u594A\u594C\u594D\u5950\u5952\u5953\u5959\u595B\",4,\"\u5961\u5963\u5964\u5966\",12,\"\u5975\u5977\u597A\u597B\u597C\u597E\u597F\u5980\u5985\u5989\u598B\u598C\u598E\u598F\u5990\u5991\u5994\u5995\u5998\u599A\u599B\u599C\u599D\u599F\u59A0\u59A1\u59A2\u59A6\"],\n[\"8a80\",\"\u59A7\u59AC\u59AD\u59B0\u59B1\u59B3\",5,\"\u59BA\u59BC\u59BD\u59BF\",6,\"\u59C7\u59C8\u59C9\u59CC\u59CD\u59CE\u59CF\u59D5\u59D6\u59D9\u59DB\u59DE\",4,\"\u59E4\u59E6\u59E7\u59E9\u59EA\u59EB\u59ED\",11,\"\u59FA\u59FC\u59FD\u59FE\u5A00\u5A02\u5A0A\u5A0B\u5A0D\u5A0E\u5A0F\u5A10\u5A12\u5A14\u5A15\u5A16\u5A17\u5A19\u5A1A\u5A1B\u5A1D\u5A1E\u5A21\u5A22\u5A24\u5A26\u5A27\u5A28\u5A2A\",6,\"\u5A33\u5A35\u5A37\",4,\"\u5A3D\u5A3E\u5A3F\u5A41\",4,\"\u5A47\u5A48\u5A4B\",9,\"\u5A56\u5A57\u5A58\u5A59\u5A5B\",5],\n[\"8b40\",\"\u5A61\u5A63\u5A64\u5A65\u5A66\u5A68\u5A69\u5A6B\",8,\"\u5A78\u5A79\u5A7B\u5A7C\u5A7D\u5A7E\u5A80\",17,\"\u5A93\",6,\"\u5A9C\",13,\"\u5AAB\u5AAC\"],\n[\"8b80\",\"\u5AAD\",4,\"\u5AB4\u5AB6\u5AB7\u5AB9\",4,\"\u5ABF\u5AC0\u5AC3\",5,\"\u5ACA\u5ACB\u5ACD\",4,\"\u5AD3\u5AD5\u5AD7\u5AD9\u5ADA\u5ADB\u5ADD\u5ADE\u5ADF\u5AE2\u5AE4\u5AE5\u5AE7\u5AE8\u5AEA\u5AEC\",4,\"\u5AF2\",22,\"\u5B0A\",11,\"\u5B18\",25,\"\u5B33\u5B35\u5B36\u5B38\",7,\"\u5B41\",6],\n[\"8c40\",\"\u5B48\",7,\"\u5B52\u5B56\u5B5E\u5B60\u5B61\u5B67\u5B68\u5B6B\u5B6D\u5B6E\u5B6F\u5B72\u5B74\u5B76\u5B77\u5B78\u5B79\u5B7B\u5B7C\u5B7E\u5B7F\u5B82\u5B86\u5B8A\u5B8D\u5B8E\u5B90\u5B91\u5B92\u5B94\u5B96\u5B9F\u5BA7\u5BA8\u5BA9\u5BAC\u5BAD\u5BAE\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBB\u5BBC\u5BC0\u5BC1\u5BC3\u5BC8\u5BC9\u5BCA\u5BCB\u5BCD\u5BCE\u5BCF\"],\n[\"8c80\",\"\u5BD1\u5BD4\",8,\"\u5BE0\u5BE2\u5BE3\u5BE6\u5BE7\u5BE9\",4,\"\u5BEF\u5BF1\",6,\"\u5BFD\u5BFE\u5C00\u5C02\u5C03\u5C05\u5C07\u5C08\u5C0B\u5C0C\u5C0D\u5C0E\u5C10\u5C12\u5C13\u5C17\u5C19\u5C1B\u5C1E\u5C1F\u5C20\u5C21\u5C23\u5C26\u5C28\u5C29\u5C2A\u5C2B\u5C2D\u5C2E\u5C2F\u5C30\u5C32\u5C33\u5C35\u5C36\u5C37\u5C43\u5C44\u5C46\u5C47\u5C4C\u5C4D\u5C52\u5C53\u5C54\u5C56\u5C57\u5C58\u5C5A\u5C5B\u5C5C\u5C5D\u5C5F\u5C62\u5C64\u5C67\",6,\"\u5C70\u5C72\",6,\"\u5C7B\u5C7C\u5C7D\u5C7E\u5C80\u5C83\",4,\"\u5C89\u5C8A\u5C8B\u5C8E\u5C8F\u5C92\u5C93\u5C95\u5C9D\",4,\"\u5CA4\",4],\n[\"8d40\",\"\u5CAA\u5CAE\u5CAF\u5CB0\u5CB2\u5CB4\u5CB6\u5CB9\u5CBA\u5CBB\u5CBC\u5CBE\u5CC0\u5CC2\u5CC3\u5CC5\",5,\"\u5CCC\",5,\"\u5CD3\",5,\"\u5CDA\",6,\"\u5CE2\u5CE3\u5CE7\u5CE9\u5CEB\u5CEC\u5CEE\u5CEF\u5CF1\",9,\"\u5CFC\",4],\n[\"8d80\",\"\u5D01\u5D04\u5D05\u5D08\",5,\"\u5D0F\",4,\"\u5D15\u5D17\u5D18\u5D19\u5D1A\u5D1C\u5D1D\u5D1F\",4,\"\u5D25\u5D28\u5D2A\u5D2B\u5D2C\u5D2F\",4,\"\u5D35\",7,\"\u5D3F\",7,\"\u5D48\u5D49\u5D4D\",10,\"\u5D59\u5D5A\u5D5C\u5D5E\",10,\"\u5D6A\u5D6D\u5D6E\u5D70\u5D71\u5D72\u5D73\u5D75\",12,\"\u5D83\",21,\"\u5D9A\u5D9B\u5D9C\u5D9E\u5D9F\u5DA0\"],\n[\"8e40\",\"\u5DA1\",21,\"\u5DB8\",12,\"\u5DC6\",6,\"\u5DCE\",12,\"\u5DDC\u5DDF\u5DE0\u5DE3\u5DE4\u5DEA\u5DEC\u5DED\"],\n[\"8e80\",\"\u5DF0\u5DF5\u5DF6\u5DF8\",4,\"\u5DFF\u5E00\u5E04\u5E07\u5E09\u5E0A\u5E0B\u5E0D\u5E0E\u5E12\u5E13\u5E17\u5E1E\",7,\"\u5E28\",4,\"\u5E2F\u5E30\u5E32\",4,\"\u5E39\u5E3A\u5E3E\u5E3F\u5E40\u5E41\u5E43\u5E46\",5,\"\u5E4D\",6,\"\u5E56\",4,\"\u5E5C\u5E5D\u5E5F\u5E60\u5E63\",14,\"\u5E75\u5E77\u5E79\u5E7E\u5E81\u5E82\u5E83\u5E85\u5E88\u5E89\u5E8C\u5E8D\u5E8E\u5E92\u5E98\u5E9B\u5E9D\u5EA1\u5EA2\u5EA3\u5EA4\u5EA8\",4,\"\u5EAE\",4,\"\u5EB4\u5EBA\u5EBB\u5EBC\u5EBD\u5EBF\",6],\n[\"8f40\",\"\u5EC6\u5EC7\u5EC8\u5ECB\",5,\"\u5ED4\u5ED5\u5ED7\u5ED8\u5ED9\u5EDA\u5EDC\",11,\"\u5EE9\u5EEB\",8,\"\u5EF5\u5EF8\u5EF9\u5EFB\u5EFC\u5EFD\u5F05\u5F06\u5F07\u5F09\u5F0C\u5F0D\u5F0E\u5F10\u5F12\u5F14\u5F16\u5F19\u5F1A\u5F1C\u5F1D\u5F1E\u5F21\u5F22\u5F23\u5F24\"],\n[\"8f80\",\"\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F32\",6,\"\u5F3B\u5F3D\u5F3E\u5F3F\u5F41\",14,\"\u5F51\u5F54\u5F59\u5F5A\u5F5B\u5F5C\u5F5E\u5F5F\u5F60\u5F63\u5F65\u5F67\u5F68\u5F6B\u5F6E\u5F6F\u5F72\u5F74\u5F75\u5F76\u5F78\u5F7A\u5F7D\u5F7E\u5F7F\u5F83\u5F86\u5F8D\u5F8E\u5F8F\u5F91\u5F93\u5F94\u5F96\u5F9A\u5F9B\u5F9D\u5F9E\u5F9F\u5FA0\u5FA2\",5,\"\u5FA9\u5FAB\u5FAC\u5FAF\",5,\"\u5FB6\u5FB8\u5FB9\u5FBA\u5FBB\u5FBE\",4,\"\u5FC7\u5FC8\u5FCA\u5FCB\u5FCE\u5FD3\u5FD4\u5FD5\u5FDA\u5FDB\u5FDC\u5FDE\u5FDF\u5FE2\u5FE3\u5FE5\u5FE6\u5FE8\u5FE9\u5FEC\u5FEF\u5FF0\u5FF2\u5FF3\u5FF4\u5FF6\u5FF7\u5FF9\u5FFA\u5FFC\u6007\"],\n[\"9040\",\"\u6008\u6009\u600B\u600C\u6010\u6011\u6013\u6017\u6018\u601A\u601E\u601F\u6022\u6023\u6024\u602C\u602D\u602E\u6030\",4,\"\u6036\",4,\"\u603D\u603E\u6040\u6044\",6,\"\u604C\u604E\u604F\u6051\u6053\u6054\u6056\u6057\u6058\u605B\u605C\u605E\u605F\u6060\u6061\u6065\u6066\u606E\u6071\u6072\u6074\u6075\u6077\u607E\u6080\"],\n[\"9080\",\"\u6081\u6082\u6085\u6086\u6087\u6088\u608A\u608B\u608E\u608F\u6090\u6091\u6093\u6095\u6097\u6098\u6099\u609C\u609E\u60A1\u60A2\u60A4\u60A5\u60A7\u60A9\u60AA\u60AE\u60B0\u60B3\u60B5\u60B6\u60B7\u60B9\u60BA\u60BD\",7,\"\u60C7\u60C8\u60C9\u60CC\",4,\"\u60D2\u60D3\u60D4\u60D6\u60D7\u60D9\u60DB\u60DE\u60E1\",4,\"\u60EA\u60F1\u60F2\u60F5\u60F7\u60F8\u60FB\",4,\"\u6102\u6103\u6104\u6105\u6107\u610A\u610B\u610C\u6110\",4,\"\u6116\u6117\u6118\u6119\u611B\u611C\u611D\u611E\u6121\u6122\u6125\u6128\u6129\u612A\u612C\",18,\"\u6140\",6],\n[\"9140\",\"\u6147\u6149\u614B\u614D\u614F\u6150\u6152\u6153\u6154\u6156\",6,\"\u615E\u615F\u6160\u6161\u6163\u6164\u6165\u6166\u6169\",6,\"\u6171\u6172\u6173\u6174\u6176\u6178\",18,\"\u618C\u618D\u618F\",4,\"\u6195\"],\n[\"9180\",\"\u6196\",6,\"\u619E\",8,\"\u61AA\u61AB\u61AD\",9,\"\u61B8\",5,\"\u61BF\u61C0\u61C1\u61C3\",4,\"\u61C9\u61CC\",4,\"\u61D3\u61D5\",16,\"\u61E7\",13,\"\u61F6\",8,\"\u6200\",5,\"\u6207\u6209\u6213\u6214\u6219\u621C\u621D\u621E\u6220\u6223\u6226\u6227\u6228\u6229\u622B\u622D\u622F\u6230\u6231\u6232\u6235\u6236\u6238\",4,\"\u6242\u6244\u6245\u6246\u624A\"],\n[\"9240\",\"\u624F\u6250\u6255\u6256\u6257\u6259\u625A\u625C\",6,\"\u6264\u6265\u6268\u6271\u6272\u6274\u6275\u6277\u6278\u627A\u627B\u627D\u6281\u6282\u6283\u6285\u6286\u6287\u6288\u628B\",5,\"\u6294\u6299\u629C\u629D\u629E\u62A3\u62A6\u62A7\u62A9\u62AA\u62AD\u62AE\u62AF\u62B0\u62B2\u62B3\u62B4\u62B6\u62B7\u62B8\u62BA\u62BE\u62C0\u62C1\"],\n[\"9280\",\"\u62C3\u62CB\u62CF\u62D1\u62D5\u62DD\u62DE\u62E0\u62E1\u62E4\u62EA\u62EB\u62F0\u62F2\u62F5\u62F8\u62F9\u62FA\u62FB\u6300\u6303\u6304\u6305\u6306\u630A\u630B\u630C\u630D\u630F\u6310\u6312\u6313\u6314\u6315\u6317\u6318\u6319\u631C\u6326\u6327\u6329\u632C\u632D\u632E\u6330\u6331\u6333\",5,\"\u633B\u633C\u633E\u633F\u6340\u6341\u6344\u6347\u6348\u634A\u6351\u6352\u6353\u6354\u6356\",7,\"\u6360\u6364\u6365\u6366\u6368\u636A\u636B\u636C\u636F\u6370\u6372\u6373\u6374\u6375\u6378\u6379\u637C\u637D\u637E\u637F\u6381\u6383\u6384\u6385\u6386\u638B\u638D\u6391\u6393\u6394\u6395\u6397\u6399\",6,\"\u63A1\u63A4\u63A6\u63AB\u63AF\u63B1\u63B2\u63B5\u63B6\u63B9\u63BB\u63BD\u63BF\u63C0\"],\n[\"9340\",\"\u63C1\u63C2\u63C3\u63C5\u63C7\u63C8\u63CA\u63CB\u63CC\u63D1\u63D3\u63D4\u63D5\u63D7\",6,\"\u63DF\u63E2\u63E4\",4,\"\u63EB\u63EC\u63EE\u63EF\u63F0\u63F1\u63F3\u63F5\u63F7\u63F9\u63FA\u63FB\u63FC\u63FE\u6403\u6404\u6406\",4,\"\u640D\u640E\u6411\u6412\u6415\",5,\"\u641D\u641F\u6422\u6423\u6424\"],\n[\"9380\",\"\u6425\u6427\u6428\u6429\u642B\u642E\",5,\"\u6435\",4,\"\u643B\u643C\u643E\u6440\u6442\u6443\u6449\u644B\",6,\"\u6453\u6455\u6456\u6457\u6459\",4,\"\u645F\",7,\"\u6468\u646A\u646B\u646C\u646E\",9,\"\u647B\",6,\"\u6483\u6486\u6488\",8,\"\u6493\u6494\u6497\u6498\u649A\u649B\u649C\u649D\u649F\",4,\"\u64A5\u64A6\u64A7\u64A8\u64AA\u64AB\u64AF\u64B1\u64B2\u64B3\u64B4\u64B6\u64B9\u64BB\u64BD\u64BE\u64BF\u64C1\u64C3\u64C4\u64C6\",6,\"\u64CF\u64D1\u64D3\u64D4\u64D5\u64D6\u64D9\u64DA\"],\n[\"9440\",\"\u64DB\u64DC\u64DD\u64DF\u64E0\u64E1\u64E3\u64E5\u64E7\",24,\"\u6501\",7,\"\u650A\",7,\"\u6513\",4,\"\u6519\",8],\n[\"9480\",\"\u6522\u6523\u6524\u6526\",4,\"\u652C\u652D\u6530\u6531\u6532\u6533\u6537\u653A\u653C\u653D\u6540\",4,\"\u6546\u6547\u654A\u654B\u654D\u654E\u6550\u6552\u6553\u6554\u6557\u6558\u655A\u655C\u655F\u6560\u6561\u6564\u6565\u6567\u6568\u6569\u656A\u656D\u656E\u656F\u6571\u6573\u6575\u6576\u6578\",14,\"\u6588\u6589\u658A\u658D\u658E\u658F\u6592\u6594\u6595\u6596\u6598\u659A\u659D\u659E\u65A0\u65A2\u65A3\u65A6\u65A8\u65AA\u65AC\u65AE\u65B1\",7,\"\u65BA\u65BB\u65BE\u65BF\u65C0\u65C2\u65C7\u65C8\u65C9\u65CA\u65CD\u65D0\u65D1\u65D3\u65D4\u65D5\u65D8\",7,\"\u65E1\u65E3\u65E4\u65EA\u65EB\"],\n[\"9540\",\"\u65F2\u65F3\u65F4\u65F5\u65F8\u65F9\u65FB\",4,\"\u6601\u6604\u6605\u6607\u6608\u6609\u660B\u660D\u6610\u6611\u6612\u6616\u6617\u6618\u661A\u661B\u661C\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6632\u6633\u6637\",4,\"\u663D\u663F\u6640\u6642\u6644\",6,\"\u664D\u664E\u6650\u6651\u6658\"],\n[\"9580\",\"\u6659\u665B\u665C\u665D\u665E\u6660\u6662\u6663\u6665\u6667\u6669\",4,\"\u6671\u6672\u6673\u6675\u6678\u6679\u667B\u667C\u667D\u667F\u6680\u6681\u6683\u6685\u6686\u6688\u6689\u668A\u668B\u668D\u668E\u668F\u6690\u6692\u6693\u6694\u6695\u6698\",4,\"\u669E\",8,\"\u66A9\",4,\"\u66AF\",4,\"\u66B5\u66B6\u66B7\u66B8\u66BA\u66BB\u66BC\u66BD\u66BF\",25,\"\u66DA\u66DE\",7,\"\u66E7\u66E8\u66EA\",5,\"\u66F1\u66F5\u66F6\u66F8\u66FA\u66FB\u66FD\u6701\u6702\u6703\"],\n[\"9640\",\"\u6704\u6705\u6706\u6707\u670C\u670E\u670F\u6711\u6712\u6713\u6716\u6718\u6719\u671A\u671C\u671E\u6720\",5,\"\u6727\u6729\u672E\u6730\u6732\u6733\u6736\u6737\u6738\u6739\u673B\u673C\u673E\u673F\u6741\u6744\u6745\u6747\u674A\u674B\u674D\u6752\u6754\u6755\u6757\",4,\"\u675D\u6762\u6763\u6764\u6766\u6767\u676B\u676C\u676E\u6771\u6774\u6776\"],\n[\"9680\",\"\u6778\u6779\u677A\u677B\u677D\u6780\u6782\u6783\u6785\u6786\u6788\u678A\u678C\u678D\u678E\u678F\u6791\u6792\u6793\u6794\u6796\u6799\u679B\u679F\u67A0\u67A1\u67A4\u67A6\u67A9\u67AC\u67AE\u67B1\u67B2\u67B4\u67B9\",7,\"\u67C2\u67C5\",9,\"\u67D5\u67D6\u67D7\u67DB\u67DF\u67E1\u67E3\u67E4\u67E6\u67E7\u67E8\u67EA\u67EB\u67ED\u67EE\u67F2\u67F5\",7,\"\u67FE\u6801\u6802\u6803\u6804\u6806\u680D\u6810\u6812\u6814\u6815\u6818\",4,\"\u681E\u681F\u6820\u6822\",6,\"\u682B\",6,\"\u6834\u6835\u6836\u683A\u683B\u683F\u6847\u684B\u684D\u684F\u6852\u6856\",5],\n[\"9740\",\"\u685C\u685D\u685E\u685F\u686A\u686C\",7,\"\u6875\u6878\",8,\"\u6882\u6884\u6887\",7,\"\u6890\u6891\u6892\u6894\u6895\u6896\u6898\",9,\"\u68A3\u68A4\u68A5\u68A9\u68AA\u68AB\u68AC\u68AE\u68B1\u68B2\u68B4\u68B6\u68B7\u68B8\"],\n[\"9780\",\"\u68B9\",6,\"\u68C1\u68C3\",5,\"\u68CA\u68CC\u68CE\u68CF\u68D0\u68D1\u68D3\u68D4\u68D6\u68D7\u68D9\u68DB\",4,\"\u68E1\u68E2\u68E4\",9,\"\u68EF\u68F2\u68F3\u68F4\u68F6\u68F7\u68F8\u68FB\u68FD\u68FE\u68FF\u6900\u6902\u6903\u6904\u6906\",4,\"\u690C\u690F\u6911\u6913\",11,\"\u6921\u6922\u6923\u6925\",7,\"\u692E\u692F\u6931\u6932\u6933\u6935\u6936\u6937\u6938\u693A\u693B\u693C\u693E\u6940\u6941\u6943\",16,\"\u6955\u6956\u6958\u6959\u695B\u695C\u695F\"],\n[\"9840\",\"\u6961\u6962\u6964\u6965\u6967\u6968\u6969\u696A\u696C\u696D\u696F\u6970\u6972\",4,\"\u697A\u697B\u697D\u697E\u697F\u6981\u6983\u6985\u698A\u698B\u698C\u698E\",5,\"\u6996\u6997\u6999\u699A\u699D\",9,\"\u69A9\u69AA\u69AC\u69AE\u69AF\u69B0\u69B2\u69B3\u69B5\u69B6\u69B8\u69B9\u69BA\u69BC\u69BD\"],\n[\"9880\",\"\u69BE\u69BF\u69C0\u69C2\",7,\"\u69CB\u69CD\u69CF\u69D1\u69D2\u69D3\u69D5\",5,\"\u69DC\u69DD\u69DE\u69E1\",11,\"\u69EE\u69EF\u69F0\u69F1\u69F3\",9,\"\u69FE\u6A00\",9,\"\u6A0B\",11,\"\u6A19\",5,\"\u6A20\u6A22\",5,\"\u6A29\u6A2B\u6A2C\u6A2D\u6A2E\u6A30\u6A32\u6A33\u6A34\u6A36\",6,\"\u6A3F\",4,\"\u6A45\u6A46\u6A48\",7,\"\u6A51\",6,\"\u6A5A\"],\n[\"9940\",\"\u6A5C\",4,\"\u6A62\u6A63\u6A64\u6A66\",10,\"\u6A72\",6,\"\u6A7A\u6A7B\u6A7D\u6A7E\u6A7F\u6A81\u6A82\u6A83\u6A85\",8,\"\u6A8F\u6A92\",4,\"\u6A98\",7,\"\u6AA1\",5],\n[\"9980\",\"\u6AA7\u6AA8\u6AAA\u6AAD\",114,\"\u6B25\u6B26\u6B28\",6],\n[\"9a40\",\"\u6B2F\u6B30\u6B31\u6B33\u6B34\u6B35\u6B36\u6B38\u6B3B\u6B3C\u6B3D\u6B3F\u6B40\u6B41\u6B42\u6B44\u6B45\u6B48\u6B4A\u6B4B\u6B4D\",11,\"\u6B5A\",7,\"\u6B68\u6B69\u6B6B\",13,\"\u6B7A\u6B7D\u6B7E\u6B7F\u6B80\u6B85\u6B88\"],\n[\"9a80\",\"\u6B8C\u6B8E\u6B8F\u6B90\u6B91\u6B94\u6B95\u6B97\u6B98\u6B99\u6B9C\",4,\"\u6BA2\",7,\"\u6BAB\",7,\"\u6BB6\u6BB8\",6,\"\u6BC0\u6BC3\u6BC4\u6BC6\",4,\"\u6BCC\u6BCE\u6BD0\u6BD1\u6BD8\u6BDA\u6BDC\",4,\"\u6BE2\",7,\"\u6BEC\u6BED\u6BEE\u6BF0\u6BF1\u6BF2\u6BF4\u6BF6\u6BF7\u6BF8\u6BFA\u6BFB\u6BFC\u6BFE\",6,\"\u6C08\",4,\"\u6C0E\u6C12\u6C17\u6C1C\u6C1D\u6C1E\u6C20\u6C23\u6C25\u6C2B\u6C2C\u6C2D\u6C31\u6C33\u6C36\u6C37\u6C39\u6C3A\u6C3B\u6C3C\u6C3E\u6C3F\u6C43\u6C44\u6C45\u6C48\u6C4B\",4,\"\u6C51\u6C52\u6C53\u6C56\u6C58\"],\n[\"9b40\",\"\u6C59\u6C5A\u6C62\u6C63\u6C65\u6C66\u6C67\u6C6B\",4,\"\u6C71\u6C73\u6C75\u6C77\u6C78\u6C7A\u6C7B\u6C7C\u6C7F\u6C80\u6C84\u6C87\u6C8A\u6C8B\u6C8D\u6C8E\u6C91\u6C92\u6C95\u6C96\u6C97\u6C98\u6C9A\u6C9C\u6C9D\u6C9E\u6CA0\u6CA2\u6CA8\u6CAC\u6CAF\u6CB0\u6CB4\u6CB5\u6CB6\u6CB7\u6CBA\u6CC0\u6CC1\u6CC2\u6CC3\u6CC6\u6CC7\u6CC8\u6CCB\u6CCD\u6CCE\u6CCF\u6CD1\u6CD2\u6CD8\"],\n[\"9b80\",\"\u6CD9\u6CDA\u6CDC\u6CDD\u6CDF\u6CE4\u6CE6\u6CE7\u6CE9\u6CEC\u6CED\u6CF2\u6CF4\u6CF9\u6CFF\u6D00\u6D02\u6D03\u6D05\u6D06\u6D08\u6D09\u6D0A\u6D0D\u6D0F\u6D10\u6D11\u6D13\u6D14\u6D15\u6D16\u6D18\u6D1C\u6D1D\u6D1F\",5,\"\u6D26\u6D28\u6D29\u6D2C\u6D2D\u6D2F\u6D30\u6D34\u6D36\u6D37\u6D38\u6D3A\u6D3F\u6D40\u6D42\u6D44\u6D49\u6D4C\u6D50\u6D55\u6D56\u6D57\u6D58\u6D5B\u6D5D\u6D5F\u6D61\u6D62\u6D64\u6D65\u6D67\u6D68\u6D6B\u6D6C\u6D6D\u6D70\u6D71\u6D72\u6D73\u6D75\u6D76\u6D79\u6D7A\u6D7B\u6D7D\",4,\"\u6D83\u6D84\u6D86\u6D87\u6D8A\u6D8B\u6D8D\u6D8F\u6D90\u6D92\u6D96\",4,\"\u6D9C\u6DA2\u6DA5\u6DAC\u6DAD\u6DB0\u6DB1\u6DB3\u6DB4\u6DB6\u6DB7\u6DB9\",5,\"\u6DC1\u6DC2\u6DC3\u6DC8\u6DC9\u6DCA\"],\n[\"9c40\",\"\u6DCD\u6DCE\u6DCF\u6DD0\u6DD2\u6DD3\u6DD4\u6DD5\u6DD7\u6DDA\u6DDB\u6DDC\u6DDF\u6DE2\u6DE3\u6DE5\u6DE7\u6DE8\u6DE9\u6DEA\u6DED\u6DEF\u6DF0\u6DF2\u6DF4\u6DF5\u6DF6\u6DF8\u6DFA\u6DFD\",7,\"\u6E06\u6E07\u6E08\u6E09\u6E0B\u6E0F\u6E12\u6E13\u6E15\u6E18\u6E19\u6E1B\u6E1C\u6E1E\u6E1F\u6E22\u6E26\u6E27\u6E28\u6E2A\u6E2C\u6E2E\u6E30\u6E31\u6E33\u6E35\"],\n[\"9c80\",\"\u6E36\u6E37\u6E39\u6E3B\",7,\"\u6E45\",7,\"\u6E4F\u6E50\u6E51\u6E52\u6E55\u6E57\u6E59\u6E5A\u6E5C\u6E5D\u6E5E\u6E60\",10,\"\u6E6C\u6E6D\u6E6F\",14,\"\u6E80\u6E81\u6E82\u6E84\u6E87\u6E88\u6E8A\",4,\"\u6E91\",6,\"\u6E99\u6E9A\u6E9B\u6E9D\u6E9E\u6EA0\u6EA1\u6EA3\u6EA4\u6EA6\u6EA8\u6EA9\u6EAB\u6EAC\u6EAD\u6EAE\u6EB0\u6EB3\u6EB5\u6EB8\u6EB9\u6EBC\u6EBE\u6EBF\u6EC0\u6EC3\u6EC4\u6EC5\u6EC6\u6EC8\u6EC9\u6ECA\u6ECC\u6ECD\u6ECE\u6ED0\u6ED2\u6ED6\u6ED8\u6ED9\u6EDB\u6EDC\u6EDD\u6EE3\u6EE7\u6EEA\",5],\n[\"9d40\",\"\u6EF0\u6EF1\u6EF2\u6EF3\u6EF5\u6EF6\u6EF7\u6EF8\u6EFA\",7,\"\u6F03\u6F04\u6F05\u6F07\u6F08\u6F0A\",4,\"\u6F10\u6F11\u6F12\u6F16\",9,\"\u6F21\u6F22\u6F23\u6F25\u6F26\u6F27\u6F28\u6F2C\u6F2E\u6F30\u6F32\u6F34\u6F35\u6F37\",6,\"\u6F3F\u6F40\u6F41\u6F42\"],\n[\"9d80\",\"\u6F43\u6F44\u6F45\u6F48\u6F49\u6F4A\u6F4C\u6F4E\",9,\"\u6F59\u6F5A\u6F5B\u6F5D\u6F5F\u6F60\u6F61\u6F63\u6F64\u6F65\u6F67\",5,\"\u6F6F\u6F70\u6F71\u6F73\u6F75\u6F76\u6F77\u6F79\u6F7B\u6F7D\",6,\"\u6F85\u6F86\u6F87\u6F8A\u6F8B\u6F8F\",12,\"\u6F9D\u6F9E\u6F9F\u6FA0\u6FA2\",4,\"\u6FA8\",10,\"\u6FB4\u6FB5\u6FB7\u6FB8\u6FBA\",5,\"\u6FC1\u6FC3\",5,\"\u6FCA\",6,\"\u6FD3\",10,\"\u6FDF\u6FE2\u6FE3\u6FE4\u6FE5\"],\n[\"9e40\",\"\u6FE6\",7,\"\u6FF0\",32,\"\u7012\",7,\"\u701C\",6,\"\u7024\",6],\n[\"9e80\",\"\u702B\",9,\"\u7036\u7037\u7038\u703A\",17,\"\u704D\u704E\u7050\",13,\"\u705F\",11,\"\u706E\u7071\u7072\u7073\u7074\u7077\u7079\u707A\u707B\u707D\u7081\u7082\u7083\u7084\u7086\u7087\u7088\u708B\u708C\u708D\u708F\u7090\u7091\u7093\u7097\u7098\u709A\u709B\u709E\",12,\"\u70B0\u70B2\u70B4\u70B5\u70B6\u70BA\u70BE\u70BF\u70C4\u70C5\u70C6\u70C7\u70C9\u70CB\",12,\"\u70DA\"],\n[\"9f40\",\"\u70DC\u70DD\u70DE\u70E0\u70E1\u70E2\u70E3\u70E5\u70EA\u70EE\u70F0\",6,\"\u70F8\u70FA\u70FB\u70FC\u70FE\",10,\"\u710B\",4,\"\u7111\u7112\u7114\u7117\u711B\",10,\"\u7127\",7,\"\u7132\u7133\u7134\"],\n[\"9f80\",\"\u7135\u7137\",13,\"\u7146\u7147\u7148\u7149\u714B\u714D\u714F\",12,\"\u715D\u715F\",4,\"\u7165\u7169\",4,\"\u716F\u7170\u7171\u7174\u7175\u7176\u7177\u7179\u717B\u717C\u717E\",5,\"\u7185\",4,\"\u718B\u718C\u718D\u718E\u7190\u7191\u7192\u7193\u7195\u7196\u7197\u719A\",4,\"\u71A1\",6,\"\u71A9\u71AA\u71AB\u71AD\",5,\"\u71B4\u71B6\u71B7\u71B8\u71BA\",8,\"\u71C4\",9,\"\u71CF\",4],\n[\"a040\",\"\u71D6\",9,\"\u71E1\u71E2\u71E3\u71E4\u71E6\u71E8\",5,\"\u71EF\",9,\"\u71FA\",11,\"\u7207\",19],\n[\"a080\",\"\u721B\u721C\u721E\",9,\"\u7229\u722B\u722D\u722E\u722F\u7232\u7233\u7234\u723A\u723C\u723E\u7240\",6,\"\u7249\u724A\u724B\u724E\u724F\u7250\u7251\u7253\u7254\u7255\u7257\u7258\u725A\u725C\u725E\u7260\u7263\u7264\u7265\u7268\u726A\u726B\u726C\u726D\u7270\u7271\u7273\u7274\u7276\u7277\u7278\u727B\u727C\u727D\u7282\u7283\u7285\",4,\"\u728C\u728E\u7290\u7291\u7293\",11,\"\u72A0\",11,\"\u72AE\u72B1\u72B2\u72B3\u72B5\u72BA\",6,\"\u72C5\u72C6\u72C7\u72C9\u72CA\u72CB\u72CC\u72CF\u72D1\u72D3\u72D4\u72D5\u72D6\u72D8\u72DA\u72DB\"],\n[\"a1a1\",\"\u3000\u3001\u3002\u00B7\u02C9\u02C7\u00A8\u3003\u3005\u2014\uFF5E\u2016\u2026\u2018\u2019\u201C\u201D\u3014\u3015\u3008\",7,\"\u3016\u3017\u3010\u3011\u00B1\u00D7\u00F7\u2236\u2227\u2228\u2211\u220F\u222A\u2229\u2208\u2237\u221A\u22A5\u2225\u2220\u2312\u2299\u222B\u222E\u2261\u224C\u2248\u223D\u221D\u2260\u226E\u226F\u2264\u2265\u221E\u2235\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFF04\u00A4\uFFE0\uFFE1\u2030\u00A7\u2116\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u203B\u2192\u2190\u2191\u2193\u3013\"],\n[\"a2a1\",\"\u2170\",9],\n[\"a2b1\",\"\u2488\",19,\"\u2474\",19,\"\u2460\",9],\n[\"a2e5\",\"\u3220\",9],\n[\"a2f1\",\"\u2160\",11],\n[\"a3a1\",\"\uFF01\uFF02\uFF03\uFFE5\uFF05\",88,\"\uFFE3\"],\n[\"a4a1\",\"\u3041\",82],\n[\"a5a1\",\"\u30A1\",85],\n[\"a6a1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a6c1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a6e0\",\"\uFE35\uFE36\uFE39\uFE3A\uFE3F\uFE40\uFE3D\uFE3E\uFE41\uFE42\uFE43\uFE44\"],\n[\"a6ee\",\"\uFE3B\uFE3C\uFE37\uFE38\uFE31\"],\n[\"a6f4\",\"\uFE33\uFE34\"],\n[\"a7a1\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"a7d1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"a840\",\"\u02CA\u02CB\u02D9\u2013\u2015\u2025\u2035\u2105\u2109\u2196\u2197\u2198\u2199\u2215\u221F\u2223\u2252\u2266\u2267\u22BF\u2550\",35,\"\u2581\",6],\n[\"a880\",\"\u2588\",7,\"\u2593\u2594\u2595\u25BC\u25BD\u25E2\u25E3\u25E4\u25E5\u2609\u2295\u3012\u301D\u301E\"],\n[\"a8a1\",\"\u0101\u00E1\u01CE\u00E0\u0113\u00E9\u011B\u00E8\u012B\u00ED\u01D0\u00EC\u014D\u00F3\u01D2\u00F2\u016B\u00FA\u01D4\u00F9\u01D6\u01D8\u01DA\u01DC\u00FC\u00EA\u0251\"],\n[\"a8bd\",\"\u0144\u0148\"],\n[\"a8c0\",\"\u0261\"],\n[\"a8c5\",\"\u3105\",36],\n[\"a940\",\"\u3021\",8,\"\u32A3\u338E\u338F\u339C\u339D\u339E\u33A1\u33C4\u33CE\u33D1\u33D2\u33D5\uFE30\uFFE2\uFFE4\"],\n[\"a959\",\"\u2121\u3231\"],\n[\"a95c\",\"\u2010\"],\n[\"a960\",\"\u30FC\u309B\u309C\u30FD\u30FE\u3006\u309D\u309E\uFE49\",9,\"\uFE54\uFE55\uFE56\uFE57\uFE59\",8],\n[\"a980\",\"\uFE62\",4,\"\uFE68\uFE69\uFE6A\uFE6B\"],\n[\"a996\",\"\u3007\"],\n[\"a9a4\",\"\u2500\",75],\n[\"aa40\",\"\u72DC\u72DD\u72DF\u72E2\",5,\"\u72EA\u72EB\u72F5\u72F6\u72F9\u72FD\u72FE\u72FF\u7300\u7302\u7304\",5,\"\u730B\u730C\u730D\u730F\u7310\u7311\u7312\u7314\u7318\u7319\u731A\u731F\u7320\u7323\u7324\u7326\u7327\u7328\u732D\u732F\u7330\u7332\u7333\u7335\u7336\u733A\u733B\u733C\u733D\u7340\",8],\n[\"aa80\",\"\u7349\u734A\u734B\u734C\u734E\u734F\u7351\u7353\u7354\u7355\u7356\u7358\",7,\"\u7361\",10,\"\u736E\u7370\u7371\"],\n[\"ab40\",\"\u7372\",11,\"\u737F\",4,\"\u7385\u7386\u7388\u738A\u738C\u738D\u738F\u7390\u7392\u7393\u7394\u7395\u7397\u7398\u7399\u739A\u739C\u739D\u739E\u73A0\u73A1\u73A3\",5,\"\u73AA\u73AC\u73AD\u73B1\u73B4\u73B5\u73B6\u73B8\u73B9\u73BC\u73BD\u73BE\u73BF\u73C1\u73C3\",4],\n[\"ab80\",\"\u73CB\u73CC\u73CE\u73D2\",6,\"\u73DA\u73DB\u73DC\u73DD\u73DF\u73E1\u73E2\u73E3\u73E4\u73E6\u73E8\u73EA\u73EB\u73EC\u73EE\u73EF\u73F0\u73F1\u73F3\",4],\n[\"ac40\",\"\u73F8\",10,\"\u7404\u7407\u7408\u740B\u740C\u740D\u740E\u7411\",8,\"\u741C\",5,\"\u7423\u7424\u7427\u7429\u742B\u742D\u742F\u7431\u7432\u7437\",4,\"\u743D\u743E\u743F\u7440\u7442\",11],\n[\"ac80\",\"\u744E\",6,\"\u7456\u7458\u745D\u7460\",12,\"\u746E\u746F\u7471\",4,\"\u7478\u7479\u747A\"],\n[\"ad40\",\"\u747B\u747C\u747D\u747F\u7482\u7484\u7485\u7486\u7488\u7489\u748A\u748C\u748D\u748F\u7491\",10,\"\u749D\u749F\",7,\"\u74AA\",15,\"\u74BB\",12],\n[\"ad80\",\"\u74C8\",9,\"\u74D3\",8,\"\u74DD\u74DF\u74E1\u74E5\u74E7\",6,\"\u74F0\u74F1\u74F2\"],\n[\"ae40\",\"\u74F3\u74F5\u74F8\",6,\"\u7500\u7501\u7502\u7503\u7505\",7,\"\u750E\u7510\u7512\u7514\u7515\u7516\u7517\u751B\u751D\u751E\u7520\",4,\"\u7526\u7527\u752A\u752E\u7534\u7536\u7539\u753C\u753D\u753F\u7541\u7542\u7543\u7544\u7546\u7547\u7549\u754A\u754D\u7550\u7551\u7552\u7553\u7555\u7556\u7557\u7558\"],\n[\"ae80\",\"\u755D\",7,\"\u7567\u7568\u7569\u756B\",6,\"\u7573\u7575\u7576\u7577\u757A\",4,\"\u7580\u7581\u7582\u7584\u7585\u7587\"],\n[\"af40\",\"\u7588\u7589\u758A\u758C\u758D\u758E\u7590\u7593\u7595\u7598\u759B\u759C\u759E\u75A2\u75A6\",4,\"\u75AD\u75B6\u75B7\u75BA\u75BB\u75BF\u75C0\u75C1\u75C6\u75CB\u75CC\u75CE\u75CF\u75D0\u75D1\u75D3\u75D7\u75D9\u75DA\u75DC\u75DD\u75DF\u75E0\u75E1\u75E5\u75E9\u75EC\u75ED\u75EE\u75EF\u75F2\u75F3\u75F5\u75F6\u75F7\u75F8\u75FA\u75FB\u75FD\u75FE\u7602\u7604\u7606\u7607\"],\n[\"af80\",\"\u7608\u7609\u760B\u760D\u760E\u760F\u7611\u7612\u7613\u7614\u7616\u761A\u761C\u761D\u761E\u7621\u7623\u7627\u7628\u762C\u762E\u762F\u7631\u7632\u7636\u7637\u7639\u763A\u763B\u763D\u7641\u7642\u7644\"],\n[\"b040\",\"\u7645\",6,\"\u764E\",5,\"\u7655\u7657\",4,\"\u765D\u765F\u7660\u7661\u7662\u7664\",6,\"\u766C\u766D\u766E\u7670\",7,\"\u7679\u767A\u767C\u767F\u7680\u7681\u7683\u7685\u7689\u768A\u768C\u768D\u768F\u7690\u7692\u7694\u7695\u7697\u7698\u769A\u769B\"],\n[\"b080\",\"\u769C\",7,\"\u76A5\",8,\"\u76AF\u76B0\u76B3\u76B5\",9,\"\u76C0\u76C1\u76C3\u554A\u963F\u57C3\u6328\u54CE\u5509\u54C0\u7691\u764C\u853C\u77EE\u827E\u788D\u7231\u9698\u978D\u6C28\u5B89\u4FFA\u6309\u6697\u5CB8\u80FA\u6848\u80AE\u6602\u76CE\u51F9\u6556\u71AC\u7FF1\u8884\u50B2\u5965\u61CA\u6FB3\u82AD\u634C\u6252\u53ED\u5427\u7B06\u516B\u75A4\u5DF4\u62D4\u8DCB\u9776\u628A\u8019\u575D\u9738\u7F62\u7238\u767D\u67CF\u767E\u6446\u4F70\u8D25\u62DC\u7A17\u6591\u73ED\u642C\u6273\u822C\u9881\u677F\u7248\u626E\u62CC\u4F34\u74E3\u534A\u529E\u7ECA\u90A6\u5E2E\u6886\u699C\u8180\u7ED1\u68D2\u78C5\u868C\u9551\u508D\u8C24\u82DE\u80DE\u5305\u8912\u5265\"],\n[\"b140\",\"\u76C4\u76C7\u76C9\u76CB\u76CC\u76D3\u76D5\u76D9\u76DA\u76DC\u76DD\u76DE\u76E0\",4,\"\u76E6\",7,\"\u76F0\u76F3\u76F5\u76F6\u76F7\u76FA\u76FB\u76FD\u76FF\u7700\u7702\u7703\u7705\u7706\u770A\u770C\u770E\",10,\"\u771B\u771C\u771D\u771E\u7721\u7723\u7724\u7725\u7727\u772A\u772B\"],\n[\"b180\",\"\u772C\u772E\u7730\",4,\"\u7739\u773B\u773D\u773E\u773F\u7742\u7744\u7745\u7746\u7748\",7,\"\u7752\",7,\"\u775C\u8584\u96F9\u4FDD\u5821\u9971\u5B9D\u62B1\u62A5\u66B4\u8C79\u9C8D\u7206\u676F\u7891\u60B2\u5351\u5317\u8F88\u80CC\u8D1D\u94A1\u500D\u72C8\u5907\u60EB\u7119\u88AB\u5954\u82EF\u672C\u7B28\u5D29\u7EF7\u752D\u6CF5\u8E66\u8FF8\u903C\u9F3B\u6BD4\u9119\u7B14\u5F7C\u78A7\u84D6\u853D\u6BD5\u6BD9\u6BD6\u5E01\u5E87\u75F9\u95ED\u655D\u5F0A\u5FC5\u8F9F\u58C1\u81C2\u907F\u965B\u97AD\u8FB9\u7F16\u8D2C\u6241\u4FBF\u53D8\u535E\u8FA8\u8FA9\u8FAB\u904D\u6807\u5F6A\u8198\u8868\u9CD6\u618B\u522B\u762A\u5F6C\u658C\u6FD2\u6EE8\u5BBE\u6448\u5175\u51B0\u67C4\u4E19\u79C9\u997C\u70B3\"],\n[\"b240\",\"\u775D\u775E\u775F\u7760\u7764\u7767\u7769\u776A\u776D\",11,\"\u777A\u777B\u777C\u7781\u7782\u7783\u7786\",5,\"\u778F\u7790\u7793\",11,\"\u77A1\u77A3\u77A4\u77A6\u77A8\u77AB\u77AD\u77AE\u77AF\u77B1\u77B2\u77B4\u77B6\",4],\n[\"b280\",\"\u77BC\u77BE\u77C0\",12,\"\u77CE\",8,\"\u77D8\u77D9\u77DA\u77DD\",4,\"\u77E4\u75C5\u5E76\u73BB\u83E0\u64AD\u62E8\u94B5\u6CE2\u535A\u52C3\u640F\u94C2\u7B94\u4F2F\u5E1B\u8236\u8116\u818A\u6E24\u6CCA\u9A73\u6355\u535C\u54FA\u8865\u57E0\u4E0D\u5E03\u6B65\u7C3F\u90E8\u6016\u64E6\u731C\u88C1\u6750\u624D\u8D22\u776C\u8E29\u91C7\u5F69\u83DC\u8521\u9910\u53C2\u8695\u6B8B\u60ED\u60E8\u707F\u82CD\u8231\u4ED3\u6CA7\u85CF\u64CD\u7CD9\u69FD\u66F9\u8349\u5395\u7B56\u4FA7\u518C\u6D4B\u5C42\u8E6D\u63D2\u53C9\u832C\u8336\u67E5\u78B4\u643D\u5BDF\u5C94\u5DEE\u8BE7\u62C6\u67F4\u8C7A\u6400\u63BA\u8749\u998B\u8C17\u7F20\u94F2\u4EA7\u9610\u98A4\u660C\u7316\"],\n[\"b340\",\"\u77E6\u77E8\u77EA\u77EF\u77F0\u77F1\u77F2\u77F4\u77F5\u77F7\u77F9\u77FA\u77FB\u77FC\u7803\",5,\"\u780A\u780B\u780E\u780F\u7810\u7813\u7815\u7819\u781B\u781E\u7820\u7821\u7822\u7824\u7828\u782A\u782B\u782E\u782F\u7831\u7832\u7833\u7835\u7836\u783D\u783F\u7841\u7842\u7843\u7844\u7846\u7848\u7849\u784A\u784B\u784D\u784F\u7851\u7853\u7854\u7858\u7859\u785A\"],\n[\"b380\",\"\u785B\u785C\u785E\",11,\"\u786F\",7,\"\u7878\u7879\u787A\u787B\u787D\",6,\"\u573A\u5C1D\u5E38\u957F\u507F\u80A0\u5382\u655E\u7545\u5531\u5021\u8D85\u6284\u949E\u671D\u5632\u6F6E\u5DE2\u5435\u7092\u8F66\u626F\u64A4\u63A3\u5F7B\u6F88\u90F4\u81E3\u8FB0\u5C18\u6668\u5FF1\u6C89\u9648\u8D81\u886C\u6491\u79F0\u57CE\u6A59\u6210\u5448\u4E58\u7A0B\u60E9\u6F84\u8BDA\u627F\u901E\u9A8B\u79E4\u5403\u75F4\u6301\u5319\u6C60\u8FDF\u5F1B\u9A70\u803B\u9F7F\u4F88\u5C3A\u8D64\u7FC5\u65A5\u70BD\u5145\u51B2\u866B\u5D07\u5BA0\u62BD\u916C\u7574\u8E0C\u7A20\u6101\u7B79\u4EC7\u7EF8\u7785\u4E11\u81ED\u521D\u51FA\u6A71\u53A8\u8E87\u9504\u96CF\u6EC1\u9664\u695A\"],\n[\"b440\",\"\u7884\u7885\u7886\u7888\u788A\u788B\u788F\u7890\u7892\u7894\u7895\u7896\u7899\u789D\u789E\u78A0\u78A2\u78A4\u78A6\u78A8\",7,\"\u78B5\u78B6\u78B7\u78B8\u78BA\u78BB\u78BC\u78BD\u78BF\u78C0\u78C2\u78C3\u78C4\u78C6\u78C7\u78C8\u78CC\u78CD\u78CE\u78CF\u78D1\u78D2\u78D3\u78D6\u78D7\u78D8\u78DA\",9],\n[\"b480\",\"\u78E4\u78E5\u78E6\u78E7\u78E9\u78EA\u78EB\u78ED\",4,\"\u78F3\u78F5\u78F6\u78F8\u78F9\u78FB\",5,\"\u7902\u7903\u7904\u7906\",6,\"\u7840\u50A8\u77D7\u6410\u89E6\u5904\u63E3\u5DDD\u7A7F\u693D\u4F20\u8239\u5598\u4E32\u75AE\u7A97\u5E62\u5E8A\u95EF\u521B\u5439\u708A\u6376\u9524\u5782\u6625\u693F\u9187\u5507\u6DF3\u7EAF\u8822\u6233\u7EF0\u75B5\u8328\u78C1\u96CC\u8F9E\u6148\u74F7\u8BCD\u6B64\u523A\u8D50\u6B21\u806A\u8471\u56F1\u5306\u4ECE\u4E1B\u51D1\u7C97\u918B\u7C07\u4FC3\u8E7F\u7BE1\u7A9C\u6467\u5D14\u50AC\u8106\u7601\u7CB9\u6DEC\u7FE0\u6751\u5B58\u5BF8\u78CB\u64AE\u6413\u63AA\u632B\u9519\u642D\u8FBE\u7B54\u7629\u6253\u5927\u5446\u6B79\u50A3\u6234\u5E26\u6B86\u4EE3\u8D37\u888B\u5F85\u902E\"],\n[\"b540\",\"\u790D\",5,\"\u7914\",9,\"\u791F\",4,\"\u7925\",14,\"\u7935\",4,\"\u793D\u793F\u7942\u7943\u7944\u7945\u7947\u794A\",8,\"\u7954\u7955\u7958\u7959\u7961\u7963\"],\n[\"b580\",\"\u7964\u7966\u7969\u796A\u796B\u796C\u796E\u7970\",6,\"\u7979\u797B\",4,\"\u7982\u7983\u7986\u7987\u7988\u7989\u798B\u798C\u798D\u798E\u7990\u7991\u7992\u6020\u803D\u62C5\u4E39\u5355\u90F8\u63B8\u80C6\u65E6\u6C2E\u4F46\u60EE\u6DE1\u8BDE\u5F39\u86CB\u5F53\u6321\u515A\u8361\u6863\u5200\u6363\u8E48\u5012\u5C9B\u7977\u5BFC\u5230\u7A3B\u60BC\u9053\u76D7\u5FB7\u5F97\u7684\u8E6C\u706F\u767B\u7B49\u77AA\u51F3\u9093\u5824\u4F4E\u6EF4\u8FEA\u654C\u7B1B\u72C4\u6DA4\u7FDF\u5AE1\u62B5\u5E95\u5730\u8482\u7B2C\u5E1D\u5F1F\u9012\u7F14\u98A0\u6382\u6EC7\u7898\u70B9\u5178\u975B\u57AB\u7535\u4F43\u7538\u5E97\u60E6\u5960\u6DC0\u6BBF\u7889\u53FC\u96D5\u51CB\u5201\u6389\u540A\u9493\u8C03\u8DCC\u7239\u789F\u8776\u8FED\u8C0D\u53E0\"],\n[\"b640\",\"\u7993\",6,\"\u799B\",11,\"\u79A8\",10,\"\u79B4\",4,\"\u79BC\u79BF\u79C2\u79C4\u79C5\u79C7\u79C8\u79CA\u79CC\u79CE\u79CF\u79D0\u79D3\u79D4\u79D6\u79D7\u79D9\",5,\"\u79E0\u79E1\u79E2\u79E5\u79E8\u79EA\"],\n[\"b680\",\"\u79EC\u79EE\u79F1\",6,\"\u79F9\u79FA\u79FC\u79FE\u79FF\u7A01\u7A04\u7A05\u7A07\u7A08\u7A09\u7A0A\u7A0C\u7A0F\",4,\"\u7A15\u7A16\u7A18\u7A19\u7A1B\u7A1C\u4E01\u76EF\u53EE\u9489\u9876\u9F0E\u952D\u5B9A\u8BA2\u4E22\u4E1C\u51AC\u8463\u61C2\u52A8\u680B\u4F97\u606B\u51BB\u6D1E\u515C\u6296\u6597\u9661\u8C46\u9017\u75D8\u90FD\u7763\u6BD2\u728A\u72EC\u8BFB\u5835\u7779\u8D4C\u675C\u9540\u809A\u5EA6\u6E21\u5992\u7AEF\u77ED\u953B\u6BB5\u65AD\u7F0E\u5806\u5151\u961F\u5BF9\u58A9\u5428\u8E72\u6566\u987F\u56E4\u949D\u76FE\u9041\u6387\u54C6\u591A\u593A\u579B\u8EB2\u6735\u8DFA\u8235\u5241\u60F0\u5815\u86FE\u5CE8\u9E45\u4FC4\u989D\u8BB9\u5A25\u6076\u5384\u627C\u904F\u9102\u997F\u6069\u800C\u513F\u8033\u5C14\u9975\u6D31\u4E8C\"],\n[\"b740\",\"\u7A1D\u7A1F\u7A21\u7A22\u7A24\",14,\"\u7A34\u7A35\u7A36\u7A38\u7A3A\u7A3E\u7A40\",5,\"\u7A47\",9,\"\u7A52\",4,\"\u7A58\",16],\n[\"b780\",\"\u7A69\",6,\"\u7A71\u7A72\u7A73\u7A75\u7A7B\u7A7C\u7A7D\u7A7E\u7A82\u7A85\u7A87\u7A89\u7A8A\u7A8B\u7A8C\u7A8E\u7A8F\u7A90\u7A93\u7A94\u7A99\u7A9A\u7A9B\u7A9E\u7AA1\u7AA2\u8D30\u53D1\u7F5A\u7B4F\u4F10\u4E4F\u9600\u6CD5\u73D0\u85E9\u5E06\u756A\u7FFB\u6A0A\u77FE\u9492\u7E41\u51E1\u70E6\u53CD\u8FD4\u8303\u8D29\u72AF\u996D\u6CDB\u574A\u82B3\u65B9\u80AA\u623F\u9632\u59A8\u4EFF\u8BBF\u7EBA\u653E\u83F2\u975E\u5561\u98DE\u80A5\u532A\u8BFD\u5420\u80BA\u5E9F\u6CB8\u8D39\u82AC\u915A\u5429\u6C1B\u5206\u7EB7\u575F\u711A\u6C7E\u7C89\u594B\u4EFD\u5FFF\u6124\u7CAA\u4E30\u5C01\u67AB\u8702\u5CF0\u950B\u98CE\u75AF\u70FD\u9022\u51AF\u7F1D\u8BBD\u5949\u51E4\u4F5B\u5426\u592B\u6577\u80A4\u5B75\u6276\u62C2\u8F90\u5E45\u6C1F\u7B26\u4F0F\u4FD8\u670D\"],\n[\"b840\",\"\u7AA3\u7AA4\u7AA7\u7AA9\u7AAA\u7AAB\u7AAE\",4,\"\u7AB4\",10,\"\u7AC0\",10,\"\u7ACC\",9,\"\u7AD7\u7AD8\u7ADA\u7ADB\u7ADC\u7ADD\u7AE1\u7AE2\u7AE4\u7AE7\",5,\"\u7AEE\u7AF0\u7AF1\u7AF2\u7AF3\"],\n[\"b880\",\"\u7AF4\",4,\"\u7AFB\u7AFC\u7AFE\u7B00\u7B01\u7B02\u7B05\u7B07\u7B09\u7B0C\u7B0D\u7B0E\u7B10\u7B12\u7B13\u7B16\u7B17\u7B18\u7B1A\u7B1C\u7B1D\u7B1F\u7B21\u7B22\u7B23\u7B27\u7B29\u7B2D\u6D6E\u6DAA\u798F\u88B1\u5F17\u752B\u629A\u8F85\u4FEF\u91DC\u65A7\u812F\u8151\u5E9C\u8150\u8D74\u526F\u8986\u8D4B\u590D\u5085\u4ED8\u961C\u7236\u8179\u8D1F\u5BCC\u8BA3\u9644\u5987\u7F1A\u5490\u5676\u560E\u8BE5\u6539\u6982\u9499\u76D6\u6E89\u5E72\u7518\u6746\u67D1\u7AFF\u809D\u8D76\u611F\u79C6\u6562\u8D63\u5188\u521A\u94A2\u7F38\u809B\u7EB2\u5C97\u6E2F\u6760\u7BD9\u768B\u9AD8\u818F\u7F94\u7CD5\u641E\u9550\u7A3F\u544A\u54E5\u6B4C\u6401\u6208\u9E3D\u80F3\u7599\u5272\u9769\u845B\u683C\u86E4\u9601\u9694\u94EC\u4E2A\u5404\u7ED9\u6839\u8DDF\u8015\u66F4\u5E9A\u7FB9\"],\n[\"b940\",\"\u7B2F\u7B30\u7B32\u7B34\u7B35\u7B36\u7B37\u7B39\u7B3B\u7B3D\u7B3F\",5,\"\u7B46\u7B48\u7B4A\u7B4D\u7B4E\u7B53\u7B55\u7B57\u7B59\u7B5C\u7B5E\u7B5F\u7B61\u7B63\",10,\"\u7B6F\u7B70\u7B73\u7B74\u7B76\u7B78\u7B7A\u7B7C\u7B7D\u7B7F\u7B81\u7B82\u7B83\u7B84\u7B86\",6,\"\u7B8E\u7B8F\"],\n[\"b980\",\"\u7B91\u7B92\u7B93\u7B96\u7B98\u7B99\u7B9A\u7B9B\u7B9E\u7B9F\u7BA0\u7BA3\u7BA4\u7BA5\u7BAE\u7BAF\u7BB0\u7BB2\u7BB3\u7BB5\u7BB6\u7BB7\u7BB9\",7,\"\u7BC2\u7BC3\u7BC4\u57C2\u803F\u6897\u5DE5\u653B\u529F\u606D\u9F9A\u4F9B\u8EAC\u516C\u5BAB\u5F13\u5DE9\u6C5E\u62F1\u8D21\u5171\u94A9\u52FE\u6C9F\u82DF\u72D7\u57A2\u6784\u8D2D\u591F\u8F9C\u83C7\u5495\u7B8D\u4F30\u6CBD\u5B64\u59D1\u9F13\u53E4\u86CA\u9AA8\u8C37\u80A1\u6545\u987E\u56FA\u96C7\u522E\u74DC\u5250\u5BE1\u6302\u8902\u4E56\u62D0\u602A\u68FA\u5173\u5B98\u51A0\u89C2\u7BA1\u9986\u7F50\u60EF\u704C\u8D2F\u5149\u5E7F\u901B\u7470\u89C4\u572D\u7845\u5F52\u9F9F\u95FA\u8F68\u9B3C\u8BE1\u7678\u6842\u67DC\u8DEA\u8D35\u523D\u8F8A\u6EDA\u68CD\u9505\u90ED\u56FD\u679C\u88F9\u8FC7\u54C8\"],\n[\"ba40\",\"\u7BC5\u7BC8\u7BC9\u7BCA\u7BCB\u7BCD\u7BCE\u7BCF\u7BD0\u7BD2\u7BD4\",4,\"\u7BDB\u7BDC\u7BDE\u7BDF\u7BE0\u7BE2\u7BE3\u7BE4\u7BE7\u7BE8\u7BE9\u7BEB\u7BEC\u7BED\u7BEF\u7BF0\u7BF2\",4,\"\u7BF8\u7BF9\u7BFA\u7BFB\u7BFD\u7BFF\",7,\"\u7C08\u7C09\u7C0A\u7C0D\u7C0E\u7C10\",5,\"\u7C17\u7C18\u7C19\"],\n[\"ba80\",\"\u7C1A\",4,\"\u7C20\",5,\"\u7C28\u7C29\u7C2B\",12,\"\u7C39\",5,\"\u7C42\u9AB8\u5B69\u6D77\u6C26\u4EA5\u5BB3\u9A87\u9163\u61A8\u90AF\u97E9\u542B\u6DB5\u5BD2\u51FD\u558A\u7F55\u7FF0\u64BC\u634D\u65F1\u61BE\u608D\u710A\u6C57\u6C49\u592F\u676D\u822A\u58D5\u568E\u8C6A\u6BEB\u90DD\u597D\u8017\u53F7\u6D69\u5475\u559D\u8377\u83CF\u6838\u79BE\u548C\u4F55\u5408\u76D2\u8C89\u9602\u6CB3\u6DB8\u8D6B\u8910\u9E64\u8D3A\u563F\u9ED1\u75D5\u5F88\u72E0\u6068\u54FC\u4EA8\u6A2A\u8861\u6052\u8F70\u54C4\u70D8\u8679\u9E3F\u6D2A\u5B8F\u5F18\u7EA2\u5589\u4FAF\u7334\u543C\u539A\u5019\u540E\u547C\u4E4E\u5FFD\u745A\u58F6\u846B\u80E1\u8774\u72D0\u7CCA\u6E56\"],\n[\"bb40\",\"\u7C43\",9,\"\u7C4E\",36,\"\u7C75\",5,\"\u7C7E\",9],\n[\"bb80\",\"\u7C88\u7C8A\",6,\"\u7C93\u7C94\u7C96\u7C99\u7C9A\u7C9B\u7CA0\u7CA1\u7CA3\u7CA6\u7CA7\u7CA8\u7CA9\u7CAB\u7CAC\u7CAD\u7CAF\u7CB0\u7CB4\",4,\"\u7CBA\u7CBB\u5F27\u864E\u552C\u62A4\u4E92\u6CAA\u6237\u82B1\u54D7\u534E\u733E\u6ED1\u753B\u5212\u5316\u8BDD\u69D0\u5F8A\u6000\u6DEE\u574F\u6B22\u73AF\u6853\u8FD8\u7F13\u6362\u60A3\u5524\u75EA\u8C62\u7115\u6DA3\u5BA6\u5E7B\u8352\u614C\u9EC4\u78FA\u8757\u7C27\u7687\u51F0\u60F6\u714C\u6643\u5E4C\u604D\u8C0E\u7070\u6325\u8F89\u5FBD\u6062\u86D4\u56DE\u6BC1\u6094\u6167\u5349\u60E0\u6666\u8D3F\u79FD\u4F1A\u70E9\u6C47\u8BB3\u8BF2\u7ED8\u8364\u660F\u5A5A\u9B42\u6D51\u6DF7\u8C41\u6D3B\u4F19\u706B\u83B7\u6216\u60D1\u970D\u8D27\u7978\u51FB\u573E\u57FA\u673A\u7578\u7A3D\u79EF\u7B95\"],\n[\"bc40\",\"\u7CBF\u7CC0\u7CC2\u7CC3\u7CC4\u7CC6\u7CC9\u7CCB\u7CCE\",6,\"\u7CD8\u7CDA\u7CDB\u7CDD\u7CDE\u7CE1\",6,\"\u7CE9\",5,\"\u7CF0\",7,\"\u7CF9\u7CFA\u7CFC\",13,\"\u7D0B\",5],\n[\"bc80\",\"\u7D11\",14,\"\u7D21\u7D23\u7D24\u7D25\u7D26\u7D28\u7D29\u7D2A\u7D2C\u7D2D\u7D2E\u7D30\",6,\"\u808C\u9965\u8FF9\u6FC0\u8BA5\u9E21\u59EC\u7EE9\u7F09\u5409\u6781\u68D8\u8F91\u7C4D\u96C6\u53CA\u6025\u75BE\u6C72\u5373\u5AC9\u7EA7\u6324\u51E0\u810A\u5DF1\u84DF\u6280\u5180\u5B63\u4F0E\u796D\u5242\u60B8\u6D4E\u5BC4\u5BC2\u8BA1\u8BB0\u65E2\u5FCC\u9645\u5993\u7EE7\u7EAA\u5609\u67B7\u5939\u4F73\u5BB6\u52A0\u835A\u988A\u8D3E\u7532\u94BE\u5047\u7A3C\u4EF7\u67B6\u9A7E\u5AC1\u6B7C\u76D1\u575A\u5C16\u7B3A\u95F4\u714E\u517C\u80A9\u8270\u5978\u7F04\u8327\u68C0\u67EC\u78B1\u7877\u62E3\u6361\u7B80\u4FED\u526A\u51CF\u8350\u69DB\u9274\u8DF5\u8D31\u89C1\u952E\u7BAD\u4EF6\"],\n[\"bd40\",\"\u7D37\",54,\"\u7D6F\",7],\n[\"bd80\",\"\u7D78\",32,\"\u5065\u8230\u5251\u996F\u6E10\u6E85\u6DA7\u5EFA\u50F5\u59DC\u5C06\u6D46\u6C5F\u7586\u848B\u6868\u5956\u8BB2\u5320\u9171\u964D\u8549\u6912\u7901\u7126\u80F6\u4EA4\u90CA\u6D47\u9A84\u5A07\u56BC\u6405\u94F0\u77EB\u4FA5\u811A\u72E1\u89D2\u997A\u7F34\u7EDE\u527F\u6559\u9175\u8F7F\u8F83\u53EB\u7A96\u63ED\u63A5\u7686\u79F8\u8857\u9636\u622A\u52AB\u8282\u6854\u6770\u6377\u776B\u7AED\u6D01\u7ED3\u89E3\u59D0\u6212\u85C9\u82A5\u754C\u501F\u4ECB\u75A5\u8BEB\u5C4A\u5DFE\u7B4B\u65A4\u91D1\u4ECA\u6D25\u895F\u7D27\u9526\u4EC5\u8C28\u8FDB\u9773\u664B\u7981\u8FD1\u70EC\u6D78\"],\n[\"be40\",\"\u7D99\",12,\"\u7DA7\",6,\"\u7DAF\",42],\n[\"be80\",\"\u7DDA\",32,\"\u5C3D\u52B2\u8346\u5162\u830E\u775B\u6676\u9CB8\u4EAC\u60CA\u7CBE\u7CB3\u7ECF\u4E95\u8B66\u666F\u9888\u9759\u5883\u656C\u955C\u5F84\u75C9\u9756\u7ADF\u7ADE\u51C0\u70AF\u7A98\u63EA\u7A76\u7EA0\u7396\u97ED\u4E45\u7078\u4E5D\u9152\u53A9\u6551\u65E7\u81FC\u8205\u548E\u5C31\u759A\u97A0\u62D8\u72D9\u75BD\u5C45\u9A79\u83CA\u5C40\u5480\u77E9\u4E3E\u6CAE\u805A\u62D2\u636E\u5DE8\u5177\u8DDD\u8E1E\u952F\u4FF1\u53E5\u60E7\u70AC\u5267\u6350\u9E43\u5A1F\u5026\u7737\u5377\u7EE2\u6485\u652B\u6289\u6398\u5014\u7235\u89C9\u51B3\u8BC0\u7EDD\u5747\u83CC\u94A7\u519B\u541B\u5CFB\"],\n[\"bf40\",\"\u7DFB\",62],\n[\"bf80\",\"\u7E3A\u7E3C\",4,\"\u7E42\",4,\"\u7E48\",21,\"\u4FCA\u7AE3\u6D5A\u90E1\u9A8F\u5580\u5496\u5361\u54AF\u5F00\u63E9\u6977\u51EF\u6168\u520A\u582A\u52D8\u574E\u780D\u770B\u5EB7\u6177\u7CE0\u625B\u6297\u4EA2\u7095\u8003\u62F7\u70E4\u9760\u5777\u82DB\u67EF\u68F5\u78D5\u9897\u79D1\u58F3\u54B3\u53EF\u6E34\u514B\u523B\u5BA2\u8BFE\u80AF\u5543\u57A6\u6073\u5751\u542D\u7A7A\u6050\u5B54\u63A7\u62A0\u53E3\u6263\u5BC7\u67AF\u54ED\u7A9F\u82E6\u9177\u5E93\u88E4\u5938\u57AE\u630E\u8DE8\u80EF\u5757\u7B77\u4FA9\u5FEB\u5BBD\u6B3E\u5321\u7B50\u72C2\u6846\u77FF\u7736\u65F7\u51B5\u4E8F\u76D4\u5CBF\u7AA5\u8475\u594E\u9B41\u5080\"],\n[\"c040\",\"\u7E5E\",35,\"\u7E83\",23,\"\u7E9C\u7E9D\u7E9E\"],\n[\"c080\",\"\u7EAE\u7EB4\u7EBB\u7EBC\u7ED6\u7EE4\u7EEC\u7EF9\u7F0A\u7F10\u7F1E\u7F37\u7F39\u7F3B\",6,\"\u7F43\u7F46\",9,\"\u7F52\u7F53\u9988\u6127\u6E83\u5764\u6606\u6346\u56F0\u62EC\u6269\u5ED3\u9614\u5783\u62C9\u5587\u8721\u814A\u8FA3\u5566\u83B1\u6765\u8D56\u84DD\u5A6A\u680F\u62E6\u7BEE\u9611\u5170\u6F9C\u8C30\u63FD\u89C8\u61D2\u7F06\u70C2\u6EE5\u7405\u6994\u72FC\u5ECA\u90CE\u6717\u6D6A\u635E\u52B3\u7262\u8001\u4F6C\u59E5\u916A\u70D9\u6D9D\u52D2\u4E50\u96F7\u956D\u857E\u78CA\u7D2F\u5121\u5792\u64C2\u808B\u7C7B\u6CEA\u68F1\u695E\u51B7\u5398\u68A8\u7281\u9ECE\u7BF1\u72F8\u79BB\u6F13\u7406\u674E\u91CC\u9CA4\u793C\u8389\u8354\u540F\u6817\u4E3D\u5389\u52B1\u783E\u5386\u5229\u5088\u4F8B\u4FD0\"],\n[\"c140\",\"\u7F56\u7F59\u7F5B\u7F5C\u7F5D\u7F5E\u7F60\u7F63\",4,\"\u7F6B\u7F6C\u7F6D\u7F6F\u7F70\u7F73\u7F75\u7F76\u7F77\u7F78\u7F7A\u7F7B\u7F7C\u7F7D\u7F7F\u7F80\u7F82\",7,\"\u7F8B\u7F8D\u7F8F\",4,\"\u7F95\",4,\"\u7F9B\u7F9C\u7FA0\u7FA2\u7FA3\u7FA5\u7FA6\u7FA8\",6,\"\u7FB1\"],\n[\"c180\",\"\u7FB3\",4,\"\u7FBA\u7FBB\u7FBE\u7FC0\u7FC2\u7FC3\u7FC4\u7FC6\u7FC7\u7FC8\u7FC9\u7FCB\u7FCD\u7FCF\",4,\"\u7FD6\u7FD7\u7FD9\",5,\"\u7FE2\u7FE3\u75E2\u7ACB\u7C92\u6CA5\u96B6\u529B\u7483\u54E9\u4FE9\u8054\u83B2\u8FDE\u9570\u5EC9\u601C\u6D9F\u5E18\u655B\u8138\u94FE\u604B\u70BC\u7EC3\u7CAE\u51C9\u6881\u7CB1\u826F\u4E24\u8F86\u91CF\u667E\u4EAE\u8C05\u64A9\u804A\u50DA\u7597\u71CE\u5BE5\u8FBD\u6F66\u4E86\u6482\u9563\u5ED6\u6599\u5217\u88C2\u70C8\u52A3\u730E\u7433\u6797\u78F7\u9716\u4E34\u90BB\u9CDE\u6DCB\u51DB\u8D41\u541D\u62CE\u73B2\u83F1\u96F6\u9F84\u94C3\u4F36\u7F9A\u51CC\u7075\u9675\u5CAD\u9886\u53E6\u4EE4\u6E9C\u7409\u69B4\u786B\u998F\u7559\u5218\u7624\u6D41\u67F3\u516D\u9F99\u804B\u5499\u7B3C\u7ABF\"],\n[\"c240\",\"\u7FE4\u7FE7\u7FE8\u7FEA\u7FEB\u7FEC\u7FED\u7FEF\u7FF2\u7FF4\",6,\"\u7FFD\u7FFE\u7FFF\u8002\u8007\u8008\u8009\u800A\u800E\u800F\u8011\u8013\u801A\u801B\u801D\u801E\u801F\u8021\u8023\u8024\u802B\",5,\"\u8032\u8034\u8039\u803A\u803C\u803E\u8040\u8041\u8044\u8045\u8047\u8048\u8049\u804E\u804F\u8050\u8051\u8053\u8055\u8056\u8057\"],\n[\"c280\",\"\u8059\u805B\",13,\"\u806B\",5,\"\u8072\",11,\"\u9686\u5784\u62E2\u9647\u697C\u5A04\u6402\u7BD3\u6F0F\u964B\u82A6\u5362\u9885\u5E90\u7089\u63B3\u5364\u864F\u9C81\u9E93\u788C\u9732\u8DEF\u8D42\u9E7F\u6F5E\u7984\u5F55\u9646\u622E\u9A74\u5415\u94DD\u4FA3\u65C5\u5C65\u5C61\u7F15\u8651\u6C2F\u5F8B\u7387\u6EE4\u7EFF\u5CE6\u631B\u5B6A\u6EE6\u5375\u4E71\u63A0\u7565\u62A1\u8F6E\u4F26\u4ED1\u6CA6\u7EB6\u8BBA\u841D\u87BA\u7F57\u903B\u9523\u7BA9\u9AA1\u88F8\u843D\u6D1B\u9A86\u7EDC\u5988\u9EBB\u739B\u7801\u8682\u9A6C\u9A82\u561B\u5417\u57CB\u4E70\u9EA6\u5356\u8FC8\u8109\u7792\u9992\u86EE\u6EE1\u8513\u66FC\u6162\u6F2B\"],\n[\"c340\",\"\u807E\u8081\u8082\u8085\u8088\u808A\u808D\",5,\"\u8094\u8095\u8097\u8099\u809E\u80A3\u80A6\u80A7\u80A8\u80AC\u80B0\u80B3\u80B5\u80B6\u80B8\u80B9\u80BB\u80C5\u80C7\",4,\"\u80CF\",6,\"\u80D8\u80DF\u80E0\u80E2\u80E3\u80E6\u80EE\u80F5\u80F7\u80F9\u80FB\u80FE\u80FF\u8100\u8101\u8103\u8104\u8105\u8107\u8108\u810B\"],\n[\"c380\",\"\u810C\u8115\u8117\u8119\u811B\u811C\u811D\u811F\",12,\"\u812D\u812E\u8130\u8133\u8134\u8135\u8137\u8139\",4,\"\u813F\u8C29\u8292\u832B\u76F2\u6C13\u5FD9\u83BD\u732B\u8305\u951A\u6BDB\u77DB\u94C6\u536F\u8302\u5192\u5E3D\u8C8C\u8D38\u4E48\u73AB\u679A\u6885\u9176\u9709\u7164\u6CA1\u7709\u5A92\u9541\u6BCF\u7F8E\u6627\u5BD0\u59B9\u5A9A\u95E8\u95F7\u4EEC\u840C\u8499\u6AAC\u76DF\u9530\u731B\u68A6\u5B5F\u772F\u919A\u9761\u7CDC\u8FF7\u8C1C\u5F25\u7C73\u79D8\u89C5\u6CCC\u871C\u5BC6\u5E42\u68C9\u7720\u7EF5\u5195\u514D\u52C9\u5A29\u7F05\u9762\u82D7\u63CF\u7784\u85D0\u79D2\u6E3A\u5E99\u5999\u8511\u706D\u6C11\u62BF\u76BF\u654F\u60AF\u95FD\u660E\u879F\u9E23\u94ED\u540D\u547D\u8C2C\u6478\"],\n[\"c440\",\"\u8140\",5,\"\u8147\u8149\u814D\u814E\u814F\u8152\u8156\u8157\u8158\u815B\",4,\"\u8161\u8162\u8163\u8164\u8166\u8168\u816A\u816B\u816C\u816F\u8172\u8173\u8175\u8176\u8177\u8178\u8181\u8183\",4,\"\u8189\u818B\u818C\u818D\u818E\u8190\u8192\",5,\"\u8199\u819A\u819E\",4,\"\u81A4\u81A5\"],\n[\"c480\",\"\u81A7\u81A9\u81AB\",7,\"\u81B4\",5,\"\u81BC\u81BD\u81BE\u81BF\u81C4\u81C5\u81C7\u81C8\u81C9\u81CB\u81CD\",6,\"\u6479\u8611\u6A21\u819C\u78E8\u6469\u9B54\u62B9\u672B\u83AB\u58A8\u9ED8\u6CAB\u6F20\u5BDE\u964C\u8C0B\u725F\u67D0\u62C7\u7261\u4EA9\u59C6\u6BCD\u5893\u66AE\u5E55\u52DF\u6155\u6728\u76EE\u7766\u7267\u7A46\u62FF\u54EA\u5450\u94A0\u90A3\u5A1C\u7EB3\u6C16\u4E43\u5976\u8010\u5948\u5357\u7537\u96BE\u56CA\u6320\u8111\u607C\u95F9\u6DD6\u5462\u9981\u5185\u5AE9\u80FD\u59AE\u9713\u502A\u6CE5\u5C3C\u62DF\u4F60\u533F\u817B\u9006\u6EBA\u852B\u62C8\u5E74\u78BE\u64B5\u637B\u5FF5\u5A18\u917F\u9E1F\u5C3F\u634F\u8042\u5B7D\u556E\u954A\u954D\u6D85\u60A8\u67E0\u72DE\u51DD\u5B81\"],\n[\"c540\",\"\u81D4\",14,\"\u81E4\u81E5\u81E6\u81E8\u81E9\u81EB\u81EE\",4,\"\u81F5\",5,\"\u81FD\u81FF\u8203\u8207\",4,\"\u820E\u820F\u8211\u8213\u8215\",5,\"\u821D\u8220\u8224\u8225\u8226\u8227\u8229\u822E\u8232\u823A\u823C\u823D\u823F\"],\n[\"c580\",\"\u8240\u8241\u8242\u8243\u8245\u8246\u8248\u824A\u824C\u824D\u824E\u8250\",7,\"\u8259\u825B\u825C\u825D\u825E\u8260\",7,\"\u8269\u62E7\u6CDE\u725B\u626D\u94AE\u7EBD\u8113\u6D53\u519C\u5F04\u5974\u52AA\u6012\u5973\u6696\u8650\u759F\u632A\u61E6\u7CEF\u8BFA\u54E6\u6B27\u9E25\u6BB4\u85D5\u5455\u5076\u6CA4\u556A\u8DB4\u722C\u5E15\u6015\u7436\u62CD\u6392\u724C\u5F98\u6E43\u6D3E\u6500\u6F58\u76D8\u78D0\u76FC\u7554\u5224\u53DB\u4E53\u5E9E\u65C1\u802A\u80D6\u629B\u5486\u5228\u70AE\u888D\u8DD1\u6CE1\u5478\u80DA\u57F9\u88F4\u8D54\u966A\u914D\u4F69\u6C9B\u55B7\u76C6\u7830\u62A8\u70F9\u6F8E\u5F6D\u84EC\u68DA\u787C\u7BF7\u81A8\u670B\u9E4F\u6367\u78B0\u576F\u7812\u9739\u6279\u62AB\u5288\u7435\u6BD7\"],\n[\"c640\",\"\u826A\u826B\u826C\u826D\u8271\u8275\u8276\u8277\u8278\u827B\u827C\u8280\u8281\u8283\u8285\u8286\u8287\u8289\u828C\u8290\u8293\u8294\u8295\u8296\u829A\u829B\u829E\u82A0\u82A2\u82A3\u82A7\u82B2\u82B5\u82B6\u82BA\u82BB\u82BC\u82BF\u82C0\u82C2\u82C3\u82C5\u82C6\u82C9\u82D0\u82D6\u82D9\u82DA\u82DD\u82E2\u82E7\u82E8\u82E9\u82EA\u82EC\u82ED\u82EE\u82F0\u82F2\u82F3\u82F5\u82F6\u82F8\"],\n[\"c680\",\"\u82FA\u82FC\",4,\"\u830A\u830B\u830D\u8310\u8312\u8313\u8316\u8318\u8319\u831D\",9,\"\u8329\u832A\u832E\u8330\u8332\u8337\u833B\u833D\u5564\u813E\u75B2\u76AE\u5339\u75DE\u50FB\u5C41\u8B6C\u7BC7\u504F\u7247\u9A97\u98D8\u6F02\u74E2\u7968\u6487\u77A5\u62FC\u9891\u8D2B\u54C1\u8058\u4E52\u576A\u82F9\u840D\u5E73\u51ED\u74F6\u8BC4\u5C4F\u5761\u6CFC\u9887\u5A46\u7834\u9B44\u8FEB\u7C95\u5256\u6251\u94FA\u4EC6\u8386\u8461\u83E9\u84B2\u57D4\u6734\u5703\u666E\u6D66\u8C31\u66DD\u7011\u671F\u6B3A\u6816\u621A\u59BB\u4E03\u51C4\u6F06\u67D2\u6C8F\u5176\u68CB\u5947\u6B67\u7566\u5D0E\u8110\u9F50\u65D7\u7948\u7941\u9A91\u8D77\u5C82\u4E5E\u4F01\u542F\u5951\u780C\u5668\u6C14\u8FC4\u5F03\u6C7D\u6CE3\u8BAB\u6390\"],\n[\"c740\",\"\u833E\u833F\u8341\u8342\u8344\u8345\u8348\u834A\",4,\"\u8353\u8355\",4,\"\u835D\u8362\u8370\",6,\"\u8379\u837A\u837E\",6,\"\u8387\u8388\u838A\u838B\u838C\u838D\u838F\u8390\u8391\u8394\u8395\u8396\u8397\u8399\u839A\u839D\u839F\u83A1\",6,\"\u83AC\u83AD\u83AE\"],\n[\"c780\",\"\u83AF\u83B5\u83BB\u83BE\u83BF\u83C2\u83C3\u83C4\u83C6\u83C8\u83C9\u83CB\u83CD\u83CE\u83D0\u83D1\u83D2\u83D3\u83D5\u83D7\u83D9\u83DA\u83DB\u83DE\u83E2\u83E3\u83E4\u83E6\u83E7\u83E8\u83EB\u83EC\u83ED\u6070\u6D3D\u7275\u6266\u948E\u94C5\u5343\u8FC1\u7B7E\u4EDF\u8C26\u4E7E\u9ED4\u94B1\u94B3\u524D\u6F5C\u9063\u6D45\u8C34\u5811\u5D4C\u6B20\u6B49\u67AA\u545B\u8154\u7F8C\u5899\u8537\u5F3A\u62A2\u6A47\u9539\u6572\u6084\u6865\u77A7\u4E54\u4FA8\u5DE7\u9798\u64AC\u7FD8\u5CED\u4FCF\u7A8D\u5207\u8304\u4E14\u602F\u7A83\u94A6\u4FB5\u4EB2\u79E6\u7434\u52E4\u82B9\u64D2\u79BD\u5BDD\u6C81\u9752\u8F7B\u6C22\u503E\u537F\u6E05\u64CE\u6674\u6C30\u60C5\u9877\u8BF7\u5E86\u743C\u7A77\u79CB\u4E18\u90B1\u7403\u6C42\u56DA\u914B\u6CC5\u8D8B\u533A\u86C6\u66F2\u8EAF\u5C48\u9A71\u6E20\"],\n[\"c840\",\"\u83EE\u83EF\u83F3\",4,\"\u83FA\u83FB\u83FC\u83FE\u83FF\u8400\u8402\u8405\u8407\u8408\u8409\u840A\u8410\u8412\",5,\"\u8419\u841A\u841B\u841E\",5,\"\u8429\",7,\"\u8432\",5,\"\u8439\u843A\u843B\u843E\",7,\"\u8447\u8448\u8449\"],\n[\"c880\",\"\u844A\",6,\"\u8452\",4,\"\u8458\u845D\u845E\u845F\u8460\u8462\u8464\",4,\"\u846A\u846E\u846F\u8470\u8472\u8474\u8477\u8479\u847B\u847C\u53D6\u5A36\u9F8B\u8DA3\u53BB\u5708\u98A7\u6743\u919B\u6CC9\u5168\u75CA\u62F3\u72AC\u5238\u529D\u7F3A\u7094\u7638\u5374\u9E4A\u69B7\u786E\u96C0\u88D9\u7FA4\u7136\u71C3\u5189\u67D3\u74E4\u58E4\u6518\u56B7\u8BA9\u9976\u6270\u7ED5\u60F9\u70ED\u58EC\u4EC1\u4EBA\u5FCD\u97E7\u4EFB\u8BA4\u5203\u598A\u7EAB\u6254\u4ECD\u65E5\u620E\u8338\u84C9\u8363\u878D\u7194\u6EB6\u5BB9\u7ED2\u5197\u63C9\u67D4\u8089\u8339\u8815\u5112\u5B7A\u5982\u8FB1\u4E73\u6C5D\u5165\u8925\u8F6F\u962E\u854A\u745E\u9510\u95F0\u6DA6\u82E5\u5F31\u6492\u6D12\u8428\u816E\u9CC3\u585E\u8D5B\u4E09\u53C1\"],\n[\"c940\",\"\u847D\",4,\"\u8483\u8484\u8485\u8486\u848A\u848D\u848F\",7,\"\u8498\u849A\u849B\u849D\u849E\u849F\u84A0\u84A2\",12,\"\u84B0\u84B1\u84B3\u84B5\u84B6\u84B7\u84BB\u84BC\u84BE\u84C0\u84C2\u84C3\u84C5\u84C6\u84C7\u84C8\u84CB\u84CC\u84CE\u84CF\u84D2\u84D4\u84D5\u84D7\"],\n[\"c980\",\"\u84D8\",4,\"\u84DE\u84E1\u84E2\u84E4\u84E7\",4,\"\u84ED\u84EE\u84EF\u84F1\",10,\"\u84FD\u84FE\u8500\u8501\u8502\u4F1E\u6563\u6851\u55D3\u4E27\u6414\u9A9A\u626B\u5AC2\u745F\u8272\u6DA9\u68EE\u50E7\u838E\u7802\u6740\u5239\u6C99\u7EB1\u50BB\u5565\u715E\u7B5B\u6652\u73CA\u82EB\u6749\u5C71\u5220\u717D\u886B\u95EA\u9655\u64C5\u8D61\u81B3\u5584\u6C55\u6247\u7F2E\u5892\u4F24\u5546\u8D4F\u664C\u4E0A\u5C1A\u88F3\u68A2\u634E\u7A0D\u70E7\u828D\u52FA\u97F6\u5C11\u54E8\u90B5\u7ECD\u5962\u8D4A\u86C7\u820C\u820D\u8D66\u6444\u5C04\u6151\u6D89\u793E\u8BBE\u7837\u7533\u547B\u4F38\u8EAB\u6DF1\u5A20\u7EC5\u795E\u6C88\u5BA1\u5A76\u751A\u80BE\u614E\u6E17\u58F0\u751F\u7525\u7272\u5347\u7EF3\"],\n[\"ca40\",\"\u8503\",8,\"\u850D\u850E\u850F\u8510\u8512\u8514\u8515\u8516\u8518\u8519\u851B\u851C\u851D\u851E\u8520\u8522\",8,\"\u852D\",9,\"\u853E\",4,\"\u8544\u8545\u8546\u8547\u854B\",10],\n[\"ca80\",\"\u8557\u8558\u855A\u855B\u855C\u855D\u855F\",4,\"\u8565\u8566\u8567\u8569\",8,\"\u8573\u8575\u8576\u8577\u8578\u857C\u857D\u857F\u8580\u8581\u7701\u76DB\u5269\u80DC\u5723\u5E08\u5931\u72EE\u65BD\u6E7F\u8BD7\u5C38\u8671\u5341\u77F3\u62FE\u65F6\u4EC0\u98DF\u8680\u5B9E\u8BC6\u53F2\u77E2\u4F7F\u5C4E\u9A76\u59CB\u5F0F\u793A\u58EB\u4E16\u67FF\u4E8B\u62ED\u8A93\u901D\u52BF\u662F\u55DC\u566C\u9002\u4ED5\u4F8D\u91CA\u9970\u6C0F\u5E02\u6043\u5BA4\u89C6\u8BD5\u6536\u624B\u9996\u5B88\u5BFF\u6388\u552E\u53D7\u7626\u517D\u852C\u67A2\u68B3\u6B8A\u6292\u8F93\u53D4\u8212\u6DD1\u758F\u4E66\u8D4E\u5B70\u719F\u85AF\u6691\u66D9\u7F72\u8700\u9ECD\u9F20\u5C5E\u672F\u8FF0\u6811\u675F\u620D\u7AD6\u5885\u5EB6\u6570\u6F31\"],\n[\"cb40\",\"\u8582\u8583\u8586\u8588\",6,\"\u8590\",10,\"\u859D\",6,\"\u85A5\u85A6\u85A7\u85A9\u85AB\u85AC\u85AD\u85B1\",5,\"\u85B8\u85BA\",6,\"\u85C2\",6,\"\u85CA\",4,\"\u85D1\u85D2\"],\n[\"cb80\",\"\u85D4\u85D6\",5,\"\u85DD\",6,\"\u85E5\u85E6\u85E7\u85E8\u85EA\",14,\"\u6055\u5237\u800D\u6454\u8870\u7529\u5E05\u6813\u62F4\u971C\u53CC\u723D\u8C01\u6C34\u7761\u7A0E\u542E\u77AC\u987A\u821C\u8BF4\u7855\u6714\u70C1\u65AF\u6495\u5636\u601D\u79C1\u53F8\u4E1D\u6B7B\u8086\u5BFA\u55E3\u56DB\u4F3A\u4F3C\u9972\u5DF3\u677E\u8038\u6002\u9882\u9001\u5B8B\u8BBC\u8BF5\u641C\u8258\u64DE\u55FD\u82CF\u9165\u4FD7\u7D20\u901F\u7C9F\u50F3\u5851\u6EAF\u5BBF\u8BC9\u8083\u9178\u849C\u7B97\u867D\u968B\u968F\u7EE5\u9AD3\u788E\u5C81\u7A57\u9042\u96A7\u795F\u5B59\u635F\u7B0B\u84D1\u68AD\u5506\u7F29\u7410\u7D22\u9501\u6240\u584C\u4ED6\u5B83\u5979\u5854\"],\n[\"cc40\",\"\u85F9\u85FA\u85FC\u85FD\u85FE\u8600\",4,\"\u8606\",10,\"\u8612\u8613\u8614\u8615\u8617\",15,\"\u8628\u862A\",13,\"\u8639\u863A\u863B\u863D\u863E\u863F\u8640\"],\n[\"cc80\",\"\u8641\",11,\"\u8652\u8653\u8655\",4,\"\u865B\u865C\u865D\u865F\u8660\u8661\u8663\",7,\"\u736D\u631E\u8E4B\u8E0F\u80CE\u82D4\u62AC\u53F0\u6CF0\u915E\u592A\u6001\u6C70\u574D\u644A\u8D2A\u762B\u6EE9\u575B\u6A80\u75F0\u6F6D\u8C2D\u8C08\u5766\u6BEF\u8892\u78B3\u63A2\u53F9\u70AD\u6C64\u5858\u642A\u5802\u68E0\u819B\u5510\u7CD6\u5018\u8EBA\u6DCC\u8D9F\u70EB\u638F\u6D9B\u6ED4\u7EE6\u8404\u6843\u9003\u6DD8\u9676\u8BA8\u5957\u7279\u85E4\u817E\u75BC\u8A8A\u68AF\u5254\u8E22\u9511\u63D0\u9898\u8E44\u557C\u4F53\u66FF\u568F\u60D5\u6D95\u5243\u5C49\u5929\u6DFB\u586B\u7530\u751C\u606C\u8214\u8146\u6311\u6761\u8FE2\u773A\u8DF3\u8D34\u94C1\u5E16\u5385\u542C\u70C3\"],\n[\"cd40\",\"\u866D\u866F\u8670\u8672\",6,\"\u8683\",6,\"\u868E\",4,\"\u8694\u8696\",5,\"\u869E\",4,\"\u86A5\u86A6\u86AB\u86AD\u86AE\u86B2\u86B3\u86B7\u86B8\u86B9\u86BB\",4,\"\u86C1\u86C2\u86C3\u86C5\u86C8\u86CC\u86CD\u86D2\u86D3\u86D5\u86D6\u86D7\u86DA\u86DC\"],\n[\"cd80\",\"\u86DD\u86E0\u86E1\u86E2\u86E3\u86E5\u86E6\u86E7\u86E8\u86EA\u86EB\u86EC\u86EF\u86F5\u86F6\u86F7\u86FA\u86FB\u86FC\u86FD\u86FF\u8701\u8704\u8705\u8706\u870B\u870C\u870E\u870F\u8710\u8711\u8714\u8716\u6C40\u5EF7\u505C\u4EAD\u5EAD\u633A\u8247\u901A\u6850\u916E\u77B3\u540C\u94DC\u5F64\u7AE5\u6876\u6345\u7B52\u7EDF\u75DB\u5077\u6295\u5934\u900F\u51F8\u79C3\u7A81\u56FE\u5F92\u9014\u6D82\u5C60\u571F\u5410\u5154\u6E4D\u56E2\u63A8\u9893\u817F\u8715\u892A\u9000\u541E\u5C6F\u81C0\u62D6\u6258\u8131\u9E35\u9640\u9A6E\u9A7C\u692D\u59A5\u62D3\u553E\u6316\u54C7\u86D9\u6D3C\u5A03\u74E6\u889C\u6B6A\u5916\u8C4C\u5F2F\u6E7E\u73A9\u987D\u4E38\u70F7\u5B8C\u7897\u633D\u665A\u7696\u60CB\u5B9B\u5A49\u4E07\u8155\u6C6A\u738B\u4EA1\u6789\u7F51\u5F80\u65FA\u671B\u5FD8\u5984\u5A01\"],\n[\"ce40\",\"\u8719\u871B\u871D\u871F\u8720\u8724\u8726\u8727\u8728\u872A\u872B\u872C\u872D\u872F\u8730\u8732\u8733\u8735\u8736\u8738\u8739\u873A\u873C\u873D\u8740\",6,\"\u874A\u874B\u874D\u874F\u8750\u8751\u8752\u8754\u8755\u8756\u8758\u875A\",5,\"\u8761\u8762\u8766\",7,\"\u876F\u8771\u8772\u8773\u8775\"],\n[\"ce80\",\"\u8777\u8778\u8779\u877A\u877F\u8780\u8781\u8784\u8786\u8787\u8789\u878A\u878C\u878E\",4,\"\u8794\u8795\u8796\u8798\",6,\"\u87A0\",4,\"\u5DCD\u5FAE\u5371\u97E6\u8FDD\u6845\u56F4\u552F\u60DF\u4E3A\u6F4D\u7EF4\u82C7\u840E\u59D4\u4F1F\u4F2A\u5C3E\u7EAC\u672A\u851A\u5473\u754F\u80C3\u5582\u9B4F\u4F4D\u6E2D\u8C13\u5C09\u6170\u536B\u761F\u6E29\u868A\u6587\u95FB\u7EB9\u543B\u7A33\u7D0A\u95EE\u55E1\u7FC1\u74EE\u631D\u8717\u6DA1\u7A9D\u6211\u65A1\u5367\u63E1\u6C83\u5DEB\u545C\u94A8\u4E4C\u6C61\u8BEC\u5C4B\u65E0\u829C\u68A7\u543E\u5434\u6BCB\u6B66\u4E94\u6342\u5348\u821E\u4F0D\u4FAE\u575E\u620A\u96FE\u6664\u7269\u52FF\u52A1\u609F\u8BEF\u6614\u7199\u6790\u897F\u7852\u77FD\u6670\u563B\u5438\u9521\u727A\"],\n[\"cf40\",\"\u87A5\u87A6\u87A7\u87A9\u87AA\u87AE\u87B0\u87B1\u87B2\u87B4\u87B6\u87B7\u87B8\u87B9\u87BB\u87BC\u87BE\u87BF\u87C1\",4,\"\u87C7\u87C8\u87C9\u87CC\",4,\"\u87D4\",6,\"\u87DC\u87DD\u87DE\u87DF\u87E1\u87E2\u87E3\u87E4\u87E6\u87E7\u87E8\u87E9\u87EB\u87EC\u87ED\u87EF\",9],\n[\"cf80\",\"\u87FA\u87FB\u87FC\u87FD\u87FF\u8800\u8801\u8802\u8804\",5,\"\u880B\",7,\"\u8814\u8817\u8818\u8819\u881A\u881C\",4,\"\u8823\u7A00\u606F\u5E0C\u6089\u819D\u5915\u60DC\u7184\u70EF\u6EAA\u6C50\u7280\u6A84\u88AD\u5E2D\u4E60\u5AB3\u559C\u94E3\u6D17\u7CFB\u9699\u620F\u7EC6\u778E\u867E\u5323\u971E\u8F96\u6687\u5CE1\u4FA0\u72ED\u4E0B\u53A6\u590F\u5413\u6380\u9528\u5148\u4ED9\u9C9C\u7EA4\u54B8\u8D24\u8854\u8237\u95F2\u6D8E\u5F26\u5ACC\u663E\u9669\u73B0\u732E\u53BF\u817A\u9985\u7FA1\u5BAA\u9677\u9650\u7EBF\u76F8\u53A2\u9576\u9999\u7BB1\u8944\u6E58\u4E61\u7FD4\u7965\u8BE6\u60F3\u54CD\u4EAB\u9879\u5DF7\u6A61\u50CF\u5411\u8C61\u8427\u785D\u9704\u524A\u54EE\u56A3\u9500\u6D88\u5BB5\u6DC6\u6653\"],\n[\"d040\",\"\u8824\",13,\"\u8833\",5,\"\u883A\u883B\u883D\u883E\u883F\u8841\u8842\u8843\u8846\",5,\"\u884E\",5,\"\u8855\u8856\u8858\u885A\",6,\"\u8866\u8867\u886A\u886D\u886F\u8871\u8873\u8874\u8875\u8876\u8878\u8879\u887A\"],\n[\"d080\",\"\u887B\u887C\u8880\u8883\u8886\u8887\u8889\u888A\u888C\u888E\u888F\u8890\u8891\u8893\u8894\u8895\u8897\",4,\"\u889D\",4,\"\u88A3\u88A5\",5,\"\u5C0F\u5B5D\u6821\u8096\u5578\u7B11\u6548\u6954\u4E9B\u6B47\u874E\u978B\u534F\u631F\u643A\u90AA\u659C\u80C1\u8C10\u5199\u68B0\u5378\u87F9\u61C8\u6CC4\u6CFB\u8C22\u5C51\u85AA\u82AF\u950C\u6B23\u8F9B\u65B0\u5FFB\u5FC3\u4FE1\u8845\u661F\u8165\u7329\u60FA\u5174\u5211\u578B\u5F62\u90A2\u884C\u9192\u5E78\u674F\u6027\u59D3\u5144\u51F6\u80F8\u5308\u6C79\u96C4\u718A\u4F11\u4FEE\u7F9E\u673D\u55C5\u9508\u79C0\u8896\u7EE3\u589F\u620C\u9700\u865A\u5618\u987B\u5F90\u8BB8\u84C4\u9157\u53D9\u65ED\u5E8F\u755C\u6064\u7D6E\u5A7F\u7EEA\u7EED\u8F69\u55A7\u5BA3\u60AC\u65CB\u7384\"],\n[\"d140\",\"\u88AC\u88AE\u88AF\u88B0\u88B2\",4,\"\u88B8\u88B9\u88BA\u88BB\u88BD\u88BE\u88BF\u88C0\u88C3\u88C4\u88C7\u88C8\u88CA\u88CB\u88CC\u88CD\u88CF\u88D0\u88D1\u88D3\u88D6\u88D7\u88DA\",4,\"\u88E0\u88E1\u88E6\u88E7\u88E9\",6,\"\u88F2\u88F5\u88F6\u88F7\u88FA\u88FB\u88FD\u88FF\u8900\u8901\u8903\",5],\n[\"d180\",\"\u8909\u890B\",4,\"\u8911\u8914\",4,\"\u891C\",4,\"\u8922\u8923\u8924\u8926\u8927\u8928\u8929\u892C\u892D\u892E\u892F\u8931\u8932\u8933\u8935\u8937\u9009\u7663\u7729\u7EDA\u9774\u859B\u5B66\u7A74\u96EA\u8840\u52CB\u718F\u5FAA\u65EC\u8BE2\u5BFB\u9A6F\u5DE1\u6B89\u6C5B\u8BAD\u8BAF\u900A\u8FC5\u538B\u62BC\u9E26\u9E2D\u5440\u4E2B\u82BD\u7259\u869C\u5D16\u8859\u6DAF\u96C5\u54D1\u4E9A\u8BB6\u7109\u54BD\u9609\u70DF\u6DF9\u76D0\u4E25\u7814\u8712\u5CA9\u5EF6\u8A00\u989C\u960E\u708E\u6CBF\u5944\u63A9\u773C\u884D\u6F14\u8273\u5830\u71D5\u538C\u781A\u96C1\u5501\u5F66\u7130\u5BB4\u8C1A\u9A8C\u6B83\u592E\u9E2F\u79E7\u6768\u626C\u4F6F\u75A1\u7F8A\u6D0B\u9633\u6C27\u4EF0\u75D2\u517B\u6837\u6F3E\u9080\u8170\u5996\u7476\"],\n[\"d240\",\"\u8938\",8,\"\u8942\u8943\u8945\",24,\"\u8960\",5,\"\u8967\",19,\"\u897C\"],\n[\"d280\",\"\u897D\u897E\u8980\u8982\u8984\u8985\u8987\",26,\"\u6447\u5C27\u9065\u7A91\u8C23\u59DA\u54AC\u8200\u836F\u8981\u8000\u6930\u564E\u8036\u7237\u91CE\u51B6\u4E5F\u9875\u6396\u4E1A\u53F6\u66F3\u814B\u591C\u6DB2\u4E00\u58F9\u533B\u63D6\u94F1\u4F9D\u4F0A\u8863\u9890\u5937\u9057\u79FB\u4EEA\u80F0\u7591\u6C82\u5B9C\u59E8\u5F5D\u6905\u8681\u501A\u5DF2\u4E59\u77E3\u4EE5\u827A\u6291\u6613\u9091\u5C79\u4EBF\u5F79\u81C6\u9038\u8084\u75AB\u4EA6\u88D4\u610F\u6BC5\u5FC6\u4E49\u76CA\u6EA2\u8BE3\u8BAE\u8C0A\u8BD1\u5F02\u7FFC\u7FCC\u7ECE\u8335\u836B\u56E0\u6BB7\u97F3\u9634\u59FB\u541F\u94F6\u6DEB\u5BC5\u996E\u5C39\u5F15\u9690\"],\n[\"d340\",\"\u89A2\",30,\"\u89C3\u89CD\u89D3\u89D4\u89D5\u89D7\u89D8\u89D9\u89DB\u89DD\u89DF\u89E0\u89E1\u89E2\u89E4\u89E7\u89E8\u89E9\u89EA\u89EC\u89ED\u89EE\u89F0\u89F1\u89F2\u89F4\",6],\n[\"d380\",\"\u89FB\",4,\"\u8A01\",5,\"\u8A08\",21,\"\u5370\u82F1\u6A31\u5A74\u9E70\u5E94\u7F28\u83B9\u8424\u8425\u8367\u8747\u8FCE\u8D62\u76C8\u5F71\u9896\u786C\u6620\u54DF\u62E5\u4F63\u81C3\u75C8\u5EB8\u96CD\u8E0A\u86F9\u548F\u6CF3\u6D8C\u6C38\u607F\u52C7\u7528\u5E7D\u4F18\u60A0\u5FE7\u5C24\u7531\u90AE\u94C0\u72B9\u6CB9\u6E38\u9149\u6709\u53CB\u53F3\u4F51\u91C9\u8BF1\u53C8\u5E7C\u8FC2\u6DE4\u4E8E\u76C2\u6986\u865E\u611A\u8206\u4F59\u4FDE\u903E\u9C7C\u6109\u6E1D\u6E14\u9685\u4E88\u5A31\u96E8\u4E0E\u5C7F\u79B9\u5B87\u8BED\u7FBD\u7389\u57DF\u828B\u90C1\u5401\u9047\u55BB\u5CEA\u5FA1\u6108\u6B32\u72F1\u80B2\u8A89\"],\n[\"d440\",\"\u8A1E\",31,\"\u8A3F\",8,\"\u8A49\",21],\n[\"d480\",\"\u8A5F\",25,\"\u8A7A\",6,\"\u6D74\u5BD3\u88D5\u9884\u8C6B\u9A6D\u9E33\u6E0A\u51A4\u5143\u57A3\u8881\u539F\u63F4\u8F95\u56ED\u5458\u5706\u733F\u6E90\u7F18\u8FDC\u82D1\u613F\u6028\u9662\u66F0\u7EA6\u8D8A\u8DC3\u94A5\u5CB3\u7CA4\u6708\u60A6\u9605\u8018\u4E91\u90E7\u5300\u9668\u5141\u8FD0\u8574\u915D\u6655\u97F5\u5B55\u531D\u7838\u6742\u683D\u54C9\u707E\u5BB0\u8F7D\u518D\u5728\u54B1\u6512\u6682\u8D5E\u8D43\u810F\u846C\u906D\u7CDF\u51FF\u85FB\u67A3\u65E9\u6FA1\u86A4\u8E81\u566A\u9020\u7682\u7076\u71E5\u8D23\u62E9\u5219\u6CFD\u8D3C\u600E\u589E\u618E\u66FE\u8D60\u624E\u55B3\u6E23\u672D\u8F67\"],\n[\"d540\",\"\u8A81\",7,\"\u8A8B\",7,\"\u8A94\",46],\n[\"d580\",\"\u8AC3\",32,\"\u94E1\u95F8\u7728\u6805\u69A8\u548B\u4E4D\u70B8\u8BC8\u6458\u658B\u5B85\u7A84\u503A\u5BE8\u77BB\u6BE1\u8A79\u7C98\u6CBE\u76CF\u65A9\u8F97\u5D2D\u5C55\u8638\u6808\u5360\u6218\u7AD9\u6E5B\u7EFD\u6A1F\u7AE0\u5F70\u6F33\u5F20\u638C\u6DA8\u6756\u4E08\u5E10\u8D26\u4ED7\u80C0\u7634\u969C\u62DB\u662D\u627E\u6CBC\u8D75\u7167\u7F69\u5146\u8087\u53EC\u906E\u6298\u54F2\u86F0\u8F99\u8005\u9517\u8517\u8FD9\u6D59\u73CD\u659F\u771F\u7504\u7827\u81FB\u8D1E\u9488\u4FA6\u6795\u75B9\u8BCA\u9707\u632F\u9547\u9635\u84B8\u6323\u7741\u5F81\u72F0\u4E89\u6014\u6574\u62EF\u6B63\u653F\"],\n[\"d640\",\"\u8AE4\",34,\"\u8B08\",27],\n[\"d680\",\"\u8B24\u8B25\u8B27\",30,\"\u5E27\u75C7\u90D1\u8BC1\u829D\u679D\u652F\u5431\u8718\u77E5\u80A2\u8102\u6C41\u4E4B\u7EC7\u804C\u76F4\u690D\u6B96\u6267\u503C\u4F84\u5740\u6307\u6B62\u8DBE\u53EA\u65E8\u7EB8\u5FD7\u631A\u63B7\u81F3\u81F4\u7F6E\u5E1C\u5CD9\u5236\u667A\u79E9\u7A1A\u8D28\u7099\u75D4\u6EDE\u6CBB\u7A92\u4E2D\u76C5\u5FE0\u949F\u8877\u7EC8\u79CD\u80BF\u91CD\u4EF2\u4F17\u821F\u5468\u5DDE\u6D32\u8BCC\u7CA5\u8F74\u8098\u5E1A\u5492\u76B1\u5B99\u663C\u9AA4\u73E0\u682A\u86DB\u6731\u732A\u8BF8\u8BDB\u9010\u7AF9\u70DB\u716E\u62C4\u77A9\u5631\u4E3B\u8457\u67F1\u52A9\u86C0\u8D2E\u94F8\u7B51\"],\n[\"d740\",\"\u8B46\",31,\"\u8B67\",4,\"\u8B6D\",25],\n[\"d780\",\"\u8B87\",24,\"\u8BAC\u8BB1\u8BBB\u8BC7\u8BD0\u8BEA\u8C09\u8C1E\u4F4F\u6CE8\u795D\u9A7B\u6293\u722A\u62FD\u4E13\u7816\u8F6C\u64B0\u8D5A\u7BC6\u6869\u5E84\u88C5\u5986\u649E\u58EE\u72B6\u690E\u9525\u8FFD\u8D58\u5760\u7F00\u8C06\u51C6\u6349\u62D9\u5353\u684C\u7422\u8301\u914C\u5544\u7740\u707C\u6D4A\u5179\u54A8\u8D44\u59FF\u6ECB\u6DC4\u5B5C\u7D2B\u4ED4\u7C7D\u6ED3\u5B50\u81EA\u6E0D\u5B57\u9B03\u68D5\u8E2A\u5B97\u7EFC\u603B\u7EB5\u90B9\u8D70\u594F\u63CD\u79DF\u8DB3\u5352\u65CF\u7956\u8BC5\u963B\u7EC4\u94BB\u7E82\u5634\u9189\u6700\u7F6A\u5C0A\u9075\u6628\u5DE6\u4F50\u67DE\u505A\u4F5C\u5750\u5EA7\"],\n[\"d840\",\"\u8C38\",8,\"\u8C42\u8C43\u8C44\u8C45\u8C48\u8C4A\u8C4B\u8C4D\",7,\"\u8C56\u8C57\u8C58\u8C59\u8C5B\",5,\"\u8C63\",6,\"\u8C6C\",6,\"\u8C74\u8C75\u8C76\u8C77\u8C7B\",6,\"\u8C83\u8C84\u8C86\u8C87\"],\n[\"d880\",\"\u8C88\u8C8B\u8C8D\",6,\"\u8C95\u8C96\u8C97\u8C99\",20,\"\u4E8D\u4E0C\u5140\u4E10\u5EFF\u5345\u4E15\u4E98\u4E1E\u9B32\u5B6C\u5669\u4E28\u79BA\u4E3F\u5315\u4E47\u592D\u723B\u536E\u6C10\u56DF\u80E4\u9997\u6BD3\u777E\u9F17\u4E36\u4E9F\u9F10\u4E5C\u4E69\u4E93\u8288\u5B5B\u556C\u560F\u4EC4\u538D\u539D\u53A3\u53A5\u53AE\u9765\u8D5D\u531A\u53F5\u5326\u532E\u533E\u8D5C\u5366\u5363\u5202\u5208\u520E\u522D\u5233\u523F\u5240\u524C\u525E\u5261\u525C\u84AF\u527D\u5282\u5281\u5290\u5293\u5182\u7F54\u4EBB\u4EC3\u4EC9\u4EC2\u4EE8\u4EE1\u4EEB\u4EDE\u4F1B\u4EF3\u4F22\u4F64\u4EF5\u4F25\u4F27\u4F09\u4F2B\u4F5E\u4F67\u6538\u4F5A\u4F5D\"],\n[\"d940\",\"\u8CAE\",62],\n[\"d980\",\"\u8CED\",32,\"\u4F5F\u4F57\u4F32\u4F3D\u4F76\u4F74\u4F91\u4F89\u4F83\u4F8F\u4F7E\u4F7B\u4FAA\u4F7C\u4FAC\u4F94\u4FE6\u4FE8\u4FEA\u4FC5\u4FDA\u4FE3\u4FDC\u4FD1\u4FDF\u4FF8\u5029\u504C\u4FF3\u502C\u500F\u502E\u502D\u4FFE\u501C\u500C\u5025\u5028\u507E\u5043\u5055\u5048\u504E\u506C\u507B\u50A5\u50A7\u50A9\u50BA\u50D6\u5106\u50ED\u50EC\u50E6\u50EE\u5107\u510B\u4EDD\u6C3D\u4F58\u4F65\u4FCE\u9FA0\u6C46\u7C74\u516E\u5DFD\u9EC9\u9998\u5181\u5914\u52F9\u530D\u8A07\u5310\u51EB\u5919\u5155\u4EA0\u5156\u4EB3\u886E\u88A4\u4EB5\u8114\u88D2\u7980\u5B34\u8803\u7FB8\u51AB\u51B1\u51BD\u51BC\"],\n[\"da40\",\"\u8D0E\",14,\"\u8D20\u8D51\u8D52\u8D57\u8D5F\u8D65\u8D68\u8D69\u8D6A\u8D6C\u8D6E\u8D6F\u8D71\u8D72\u8D78\",8,\"\u8D82\u8D83\u8D86\u8D87\u8D88\u8D89\u8D8C\",4,\"\u8D92\u8D93\u8D95\",9,\"\u8DA0\u8DA1\"],\n[\"da80\",\"\u8DA2\u8DA4\",12,\"\u8DB2\u8DB6\u8DB7\u8DB9\u8DBB\u8DBD\u8DC0\u8DC1\u8DC2\u8DC5\u8DC7\u8DC8\u8DC9\u8DCA\u8DCD\u8DD0\u8DD2\u8DD3\u8DD4\u51C7\u5196\u51A2\u51A5\u8BA0\u8BA6\u8BA7\u8BAA\u8BB4\u8BB5\u8BB7\u8BC2\u8BC3\u8BCB\u8BCF\u8BCE\u8BD2\u8BD3\u8BD4\u8BD6\u8BD8\u8BD9\u8BDC\u8BDF\u8BE0\u8BE4\u8BE8\u8BE9\u8BEE\u8BF0\u8BF3\u8BF6\u8BF9\u8BFC\u8BFF\u8C00\u8C02\u8C04\u8C07\u8C0C\u8C0F\u8C11\u8C12\u8C14\u8C15\u8C16\u8C19\u8C1B\u8C18\u8C1D\u8C1F\u8C20\u8C21\u8C25\u8C27\u8C2A\u8C2B\u8C2E\u8C2F\u8C32\u8C33\u8C35\u8C36\u5369\u537A\u961D\u9622\u9621\u9631\u962A\u963D\u963C\u9642\u9649\u9654\u965F\u9667\u966C\u9672\u9674\u9688\u968D\u9697\u96B0\u9097\u909B\u909D\u9099\u90AC\u90A1\u90B4\u90B3\u90B6\u90BA\"],\n[\"db40\",\"\u8DD5\u8DD8\u8DD9\u8DDC\u8DE0\u8DE1\u8DE2\u8DE5\u8DE6\u8DE7\u8DE9\u8DED\u8DEE\u8DF0\u8DF1\u8DF2\u8DF4\u8DF6\u8DFC\u8DFE\",6,\"\u8E06\u8E07\u8E08\u8E0B\u8E0D\u8E0E\u8E10\u8E11\u8E12\u8E13\u8E15\",7,\"\u8E20\u8E21\u8E24\",4,\"\u8E2B\u8E2D\u8E30\u8E32\u8E33\u8E34\u8E36\u8E37\u8E38\u8E3B\u8E3C\u8E3E\"],\n[\"db80\",\"\u8E3F\u8E43\u8E45\u8E46\u8E4C\",4,\"\u8E53\",5,\"\u8E5A\",11,\"\u8E67\u8E68\u8E6A\u8E6B\u8E6E\u8E71\u90B8\u90B0\u90CF\u90C5\u90BE\u90D0\u90C4\u90C7\u90D3\u90E6\u90E2\u90DC\u90D7\u90DB\u90EB\u90EF\u90FE\u9104\u9122\u911E\u9123\u9131\u912F\u9139\u9143\u9146\u520D\u5942\u52A2\u52AC\u52AD\u52BE\u54FF\u52D0\u52D6\u52F0\u53DF\u71EE\u77CD\u5EF4\u51F5\u51FC\u9B2F\u53B6\u5F01\u755A\u5DEF\u574C\u57A9\u57A1\u587E\u58BC\u58C5\u58D1\u5729\u572C\u572A\u5733\u5739\u572E\u572F\u575C\u573B\u5742\u5769\u5785\u576B\u5786\u577C\u577B\u5768\u576D\u5776\u5773\u57AD\u57A4\u578C\u57B2\u57CF\u57A7\u57B4\u5793\u57A0\u57D5\u57D8\u57DA\u57D9\u57D2\u57B8\u57F4\u57EF\u57F8\u57E4\u57DD\"],\n[\"dc40\",\"\u8E73\u8E75\u8E77\",4,\"\u8E7D\u8E7E\u8E80\u8E82\u8E83\u8E84\u8E86\u8E88\",6,\"\u8E91\u8E92\u8E93\u8E95\",6,\"\u8E9D\u8E9F\",11,\"\u8EAD\u8EAE\u8EB0\u8EB1\u8EB3\",6,\"\u8EBB\",7],\n[\"dc80\",\"\u8EC3\",10,\"\u8ECF\",21,\"\u580B\u580D\u57FD\u57ED\u5800\u581E\u5819\u5844\u5820\u5865\u586C\u5881\u5889\u589A\u5880\u99A8\u9F19\u61FF\u8279\u827D\u827F\u828F\u828A\u82A8\u8284\u828E\u8291\u8297\u8299\u82AB\u82B8\u82BE\u82B0\u82C8\u82CA\u82E3\u8298\u82B7\u82AE\u82CB\u82CC\u82C1\u82A9\u82B4\u82A1\u82AA\u829F\u82C4\u82CE\u82A4\u82E1\u8309\u82F7\u82E4\u830F\u8307\u82DC\u82F4\u82D2\u82D8\u830C\u82FB\u82D3\u8311\u831A\u8306\u8314\u8315\u82E0\u82D5\u831C\u8351\u835B\u835C\u8308\u8392\u833C\u8334\u8331\u839B\u835E\u832F\u834F\u8347\u8343\u835F\u8340\u8317\u8360\u832D\u833A\u8333\u8366\u8365\"],\n[\"dd40\",\"\u8EE5\",62],\n[\"dd80\",\"\u8F24\",32,\"\u8368\u831B\u8369\u836C\u836A\u836D\u836E\u83B0\u8378\u83B3\u83B4\u83A0\u83AA\u8393\u839C\u8385\u837C\u83B6\u83A9\u837D\u83B8\u837B\u8398\u839E\u83A8\u83BA\u83BC\u83C1\u8401\u83E5\u83D8\u5807\u8418\u840B\u83DD\u83FD\u83D6\u841C\u8438\u8411\u8406\u83D4\u83DF\u840F\u8403\u83F8\u83F9\u83EA\u83C5\u83C0\u8426\u83F0\u83E1\u845C\u8451\u845A\u8459\u8473\u8487\u8488\u847A\u8489\u8478\u843C\u8446\u8469\u8476\u848C\u848E\u8431\u846D\u84C1\u84CD\u84D0\u84E6\u84BD\u84D3\u84CA\u84BF\u84BA\u84E0\u84A1\u84B9\u84B4\u8497\u84E5\u84E3\u850C\u750D\u8538\u84F0\u8539\u851F\u853A\"],\n[\"de40\",\"\u8F45\",32,\"\u8F6A\u8F80\u8F8C\u8F92\u8F9D\u8FA0\u8FA1\u8FA2\u8FA4\u8FA5\u8FA6\u8FA7\u8FAA\u8FAC\u8FAD\u8FAE\u8FAF\u8FB2\u8FB3\u8FB4\u8FB5\u8FB7\u8FB8\u8FBA\u8FBB\u8FBC\u8FBF\u8FC0\u8FC3\u8FC6\"],\n[\"de80\",\"\u8FC9\",4,\"\u8FCF\u8FD2\u8FD6\u8FD7\u8FDA\u8FE0\u8FE1\u8FE3\u8FE7\u8FEC\u8FEF\u8FF1\u8FF2\u8FF4\u8FF5\u8FF6\u8FFA\u8FFB\u8FFC\u8FFE\u8FFF\u9007\u9008\u900C\u900E\u9013\u9015\u9018\u8556\u853B\u84FF\u84FC\u8559\u8548\u8568\u8564\u855E\u857A\u77A2\u8543\u8572\u857B\u85A4\u85A8\u8587\u858F\u8579\u85AE\u859C\u8585\u85B9\u85B7\u85B0\u85D3\u85C1\u85DC\u85FF\u8627\u8605\u8629\u8616\u863C\u5EFE\u5F08\u593C\u5941\u8037\u5955\u595A\u5958\u530F\u5C22\u5C25\u5C2C\u5C34\u624C\u626A\u629F\u62BB\u62CA\u62DA\u62D7\u62EE\u6322\u62F6\u6339\u634B\u6343\u63AD\u63F6\u6371\u637A\u638E\u63B4\u636D\u63AC\u638A\u6369\u63AE\u63BC\u63F2\u63F8\u63E0\u63FF\u63C4\u63DE\u63CE\u6452\u63C6\u63BE\u6445\u6441\u640B\u641B\u6420\u640C\u6426\u6421\u645E\u6484\u646D\u6496\"],\n[\"df40\",\"\u9019\u901C\u9023\u9024\u9025\u9027\",5,\"\u9030\",4,\"\u9037\u9039\u903A\u903D\u903F\u9040\u9043\u9045\u9046\u9048\",4,\"\u904E\u9054\u9055\u9056\u9059\u905A\u905C\",5,\"\u9064\u9066\u9067\u9069\u906A\u906B\u906C\u906F\",4,\"\u9076\",6,\"\u907E\u9081\"],\n[\"df80\",\"\u9084\u9085\u9086\u9087\u9089\u908A\u908C\",4,\"\u9092\u9094\u9096\u9098\u909A\u909C\u909E\u909F\u90A0\u90A4\u90A5\u90A7\u90A8\u90A9\u90AB\u90AD\u90B2\u90B7\u90BC\u90BD\u90BF\u90C0\u647A\u64B7\u64B8\u6499\u64BA\u64C0\u64D0\u64D7\u64E4\u64E2\u6509\u6525\u652E\u5F0B\u5FD2\u7519\u5F11\u535F\u53F1\u53FD\u53E9\u53E8\u53FB\u5412\u5416\u5406\u544B\u5452\u5453\u5454\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482\u5494\u5477\u5471\u5464\u549A\u549B\u5484\u5476\u5466\u549D\u54D0\u54AD\u54C2\u54B4\u54D2\u54A7\u54A6\u54D3\u54D4\u5472\u54A3\u54D5\u54BB\u54BF\u54CC\u54D9\u54DA\u54DC\u54A9\u54AA\u54A4\u54DD\u54CF\u54DE\u551B\u54E7\u5520\u54FD\u5514\u54F3\u5522\u5523\u550F\u5511\u5527\u552A\u5567\u558F\u55B5\u5549\u556D\u5541\u5555\u553F\u5550\u553C\"],\n[\"e040\",\"\u90C2\u90C3\u90C6\u90C8\u90C9\u90CB\u90CC\u90CD\u90D2\u90D4\u90D5\u90D6\u90D8\u90D9\u90DA\u90DE\u90DF\u90E0\u90E3\u90E4\u90E5\u90E9\u90EA\u90EC\u90EE\u90F0\u90F1\u90F2\u90F3\u90F5\u90F6\u90F7\u90F9\u90FA\u90FB\u90FC\u90FF\u9100\u9101\u9103\u9105\",19,\"\u911A\u911B\u911C\"],\n[\"e080\",\"\u911D\u911F\u9120\u9121\u9124\",10,\"\u9130\u9132\",6,\"\u913A\",8,\"\u9144\u5537\u5556\u5575\u5576\u5577\u5533\u5530\u555C\u558B\u55D2\u5583\u55B1\u55B9\u5588\u5581\u559F\u557E\u55D6\u5591\u557B\u55DF\u55BD\u55BE\u5594\u5599\u55EA\u55F7\u55C9\u561F\u55D1\u55EB\u55EC\u55D4\u55E6\u55DD\u55C4\u55EF\u55E5\u55F2\u55F3\u55CC\u55CD\u55E8\u55F5\u55E4\u8F94\u561E\u5608\u560C\u5601\u5624\u5623\u55FE\u5600\u5627\u562D\u5658\u5639\u5657\u562C\u564D\u5662\u5659\u565C\u564C\u5654\u5686\u5664\u5671\u566B\u567B\u567C\u5685\u5693\u56AF\u56D4\u56D7\u56DD\u56E1\u56F5\u56EB\u56F9\u56FF\u5704\u570A\u5709\u571C\u5E0F\u5E19\u5E14\u5E11\u5E31\u5E3B\u5E3C\"],\n[\"e140\",\"\u9145\u9147\u9148\u9151\u9153\u9154\u9155\u9156\u9158\u9159\u915B\u915C\u915F\u9160\u9166\u9167\u9168\u916B\u916D\u9173\u917A\u917B\u917C\u9180\",4,\"\u9186\u9188\u918A\u918E\u918F\u9193\",6,\"\u919C\",5,\"\u91A4\",5,\"\u91AB\u91AC\u91B0\u91B1\u91B2\u91B3\u91B6\u91B7\u91B8\u91B9\u91BB\"],\n[\"e180\",\"\u91BC\",10,\"\u91C8\u91CB\u91D0\u91D2\",9,\"\u91DD\",8,\"\u5E37\u5E44\u5E54\u5E5B\u5E5E\u5E61\u5C8C\u5C7A\u5C8D\u5C90\u5C96\u5C88\u5C98\u5C99\u5C91\u5C9A\u5C9C\u5CB5\u5CA2\u5CBD\u5CAC\u5CAB\u5CB1\u5CA3\u5CC1\u5CB7\u5CC4\u5CD2\u5CE4\u5CCB\u5CE5\u5D02\u5D03\u5D27\u5D26\u5D2E\u5D24\u5D1E\u5D06\u5D1B\u5D58\u5D3E\u5D34\u5D3D\u5D6C\u5D5B\u5D6F\u5D5D\u5D6B\u5D4B\u5D4A\u5D69\u5D74\u5D82\u5D99\u5D9D\u8C73\u5DB7\u5DC5\u5F73\u5F77\u5F82\u5F87\u5F89\u5F8C\u5F95\u5F99\u5F9C\u5FA8\u5FAD\u5FB5\u5FBC\u8862\u5F61\u72AD\u72B0\u72B4\u72B7\u72B8\u72C3\u72C1\u72CE\u72CD\u72D2\u72E8\u72EF\u72E9\u72F2\u72F4\u72F7\u7301\u72F3\u7303\u72FA\"],\n[\"e240\",\"\u91E6\",62],\n[\"e280\",\"\u9225\",32,\"\u72FB\u7317\u7313\u7321\u730A\u731E\u731D\u7315\u7322\u7339\u7325\u732C\u7338\u7331\u7350\u734D\u7357\u7360\u736C\u736F\u737E\u821B\u5925\u98E7\u5924\u5902\u9963\u9967\",5,\"\u9974\u9977\u997D\u9980\u9984\u9987\u998A\u998D\u9990\u9991\u9993\u9994\u9995\u5E80\u5E91\u5E8B\u5E96\u5EA5\u5EA0\u5EB9\u5EB5\u5EBE\u5EB3\u8D53\u5ED2\u5ED1\u5EDB\u5EE8\u5EEA\u81BA\u5FC4\u5FC9\u5FD6\u5FCF\u6003\u5FEE\u6004\u5FE1\u5FE4\u5FFE\u6005\u6006\u5FEA\u5FED\u5FF8\u6019\u6035\u6026\u601B\u600F\u600D\u6029\u602B\u600A\u603F\u6021\u6078\u6079\u607B\u607A\u6042\"],\n[\"e340\",\"\u9246\",45,\"\u9275\",16],\n[\"e380\",\"\u9286\",7,\"\u928F\",24,\"\u606A\u607D\u6096\u609A\u60AD\u609D\u6083\u6092\u608C\u609B\u60EC\u60BB\u60B1\u60DD\u60D8\u60C6\u60DA\u60B4\u6120\u6126\u6115\u6123\u60F4\u6100\u610E\u612B\u614A\u6175\u61AC\u6194\u61A7\u61B7\u61D4\u61F5\u5FDD\u96B3\u95E9\u95EB\u95F1\u95F3\u95F5\u95F6\u95FC\u95FE\u9603\u9604\u9606\u9608\u960A\u960B\u960C\u960D\u960F\u9612\u9615\u9616\u9617\u9619\u961A\u4E2C\u723F\u6215\u6C35\u6C54\u6C5C\u6C4A\u6CA3\u6C85\u6C90\u6C94\u6C8C\u6C68\u6C69\u6C74\u6C76\u6C86\u6CA9\u6CD0\u6CD4\u6CAD\u6CF7\u6CF8\u6CF1\u6CD7\u6CB2\u6CE0\u6CD6\u6CFA\u6CEB\u6CEE\u6CB1\u6CD3\u6CEF\u6CFE\"],\n[\"e440\",\"\u92A8\",5,\"\u92AF\",24,\"\u92C9\",31],\n[\"e480\",\"\u92E9\",32,\"\u6D39\u6D27\u6D0C\u6D43\u6D48\u6D07\u6D04\u6D19\u6D0E\u6D2B\u6D4D\u6D2E\u6D35\u6D1A\u6D4F\u6D52\u6D54\u6D33\u6D91\u6D6F\u6D9E\u6DA0\u6D5E\u6D93\u6D94\u6D5C\u6D60\u6D7C\u6D63\u6E1A\u6DC7\u6DC5\u6DDE\u6E0E\u6DBF\u6DE0\u6E11\u6DE6\u6DDD\u6DD9\u6E16\u6DAB\u6E0C\u6DAE\u6E2B\u6E6E\u6E4E\u6E6B\u6EB2\u6E5F\u6E86\u6E53\u6E54\u6E32\u6E25\u6E44\u6EDF\u6EB1\u6E98\u6EE0\u6F2D\u6EE2\u6EA5\u6EA7\u6EBD\u6EBB\u6EB7\u6ED7\u6EB4\u6ECF\u6E8F\u6EC2\u6E9F\u6F62\u6F46\u6F47\u6F24\u6F15\u6EF9\u6F2F\u6F36\u6F4B\u6F74\u6F2A\u6F09\u6F29\u6F89\u6F8D\u6F8C\u6F78\u6F72\u6F7C\u6F7A\u6FD1\"],\n[\"e540\",\"\u930A\",51,\"\u933F\",10],\n[\"e580\",\"\u934A\",31,\"\u936B\u6FC9\u6FA7\u6FB9\u6FB6\u6FC2\u6FE1\u6FEE\u6FDE\u6FE0\u6FEF\u701A\u7023\u701B\u7039\u7035\u704F\u705E\u5B80\u5B84\u5B95\u5B93\u5BA5\u5BB8\u752F\u9A9E\u6434\u5BE4\u5BEE\u8930\u5BF0\u8E47\u8B07\u8FB6\u8FD3\u8FD5\u8FE5\u8FEE\u8FE4\u8FE9\u8FE6\u8FF3\u8FE8\u9005\u9004\u900B\u9026\u9011\u900D\u9016\u9021\u9035\u9036\u902D\u902F\u9044\u9051\u9052\u9050\u9068\u9058\u9062\u905B\u66B9\u9074\u907D\u9082\u9088\u9083\u908B\u5F50\u5F57\u5F56\u5F58\u5C3B\u54AB\u5C50\u5C59\u5B71\u5C63\u5C66\u7FBC\u5F2A\u5F29\u5F2D\u8274\u5F3C\u9B3B\u5C6E\u5981\u5983\u598D\u59A9\u59AA\u59A3\"],\n[\"e640\",\"\u936C\",34,\"\u9390\",27],\n[\"e680\",\"\u93AC\",29,\"\u93CB\u93CC\u93CD\u5997\u59CA\u59AB\u599E\u59A4\u59D2\u59B2\u59AF\u59D7\u59BE\u5A05\u5A06\u59DD\u5A08\u59E3\u59D8\u59F9\u5A0C\u5A09\u5A32\u5A34\u5A11\u5A23\u5A13\u5A40\u5A67\u5A4A\u5A55\u5A3C\u5A62\u5A75\u80EC\u5AAA\u5A9B\u5A77\u5A7A\u5ABE\u5AEB\u5AB2\u5AD2\u5AD4\u5AB8\u5AE0\u5AE3\u5AF1\u5AD6\u5AE6\u5AD8\u5ADC\u5B09\u5B17\u5B16\u5B32\u5B37\u5B40\u5C15\u5C1C\u5B5A\u5B65\u5B73\u5B51\u5B53\u5B62\u9A75\u9A77\u9A78\u9A7A\u9A7F\u9A7D\u9A80\u9A81\u9A85\u9A88\u9A8A\u9A90\u9A92\u9A93\u9A96\u9A98\u9A9B\u9A9C\u9A9D\u9A9F\u9AA0\u9AA2\u9AA3\u9AA5\u9AA7\u7E9F\u7EA1\u7EA3\u7EA5\u7EA8\u7EA9\"],\n[\"e740\",\"\u93CE\",7,\"\u93D7\",54],\n[\"e780\",\"\u940E\",32,\"\u7EAD\u7EB0\u7EBE\u7EC0\u7EC1\u7EC2\u7EC9\u7ECB\u7ECC\u7ED0\u7ED4\u7ED7\u7EDB\u7EE0\u7EE1\u7EE8\u7EEB\u7EEE\u7EEF\u7EF1\u7EF2\u7F0D\u7EF6\u7EFA\u7EFB\u7EFE\u7F01\u7F02\u7F03\u7F07\u7F08\u7F0B\u7F0C\u7F0F\u7F11\u7F12\u7F17\u7F19\u7F1C\u7F1B\u7F1F\u7F21\",6,\"\u7F2A\u7F2B\u7F2C\u7F2D\u7F2F\",4,\"\u7F35\u5E7A\u757F\u5DDB\u753E\u9095\u738E\u7391\u73AE\u73A2\u739F\u73CF\u73C2\u73D1\u73B7\u73B3\u73C0\u73C9\u73C8\u73E5\u73D9\u987C\u740A\u73E9\u73E7\u73DE\u73BA\u73F2\u740F\u742A\u745B\u7426\u7425\u7428\u7430\u742E\u742C\"],\n[\"e840\",\"\u942F\",14,\"\u943F\",43,\"\u946C\u946D\u946E\u946F\"],\n[\"e880\",\"\u9470\",20,\"\u9491\u9496\u9498\u94C7\u94CF\u94D3\u94D4\u94DA\u94E6\u94FB\u951C\u9520\u741B\u741A\u7441\u745C\u7457\u7455\u7459\u7477\u746D\u747E\u749C\u748E\u7480\u7481\u7487\u748B\u749E\u74A8\u74A9\u7490\u74A7\u74D2\u74BA\u97EA\u97EB\u97EC\u674C\u6753\u675E\u6748\u6769\u67A5\u6787\u676A\u6773\u6798\u67A7\u6775\u67A8\u679E\u67AD\u678B\u6777\u677C\u67F0\u6809\u67D8\u680A\u67E9\u67B0\u680C\u67D9\u67B5\u67DA\u67B3\u67DD\u6800\u67C3\u67B8\u67E2\u680E\u67C1\u67FD\u6832\u6833\u6860\u6861\u684E\u6862\u6844\u6864\u6883\u681D\u6855\u6866\u6841\u6867\u6840\u683E\u684A\u6849\u6829\u68B5\u688F\u6874\u6877\u6893\u686B\u68C2\u696E\u68FC\u691F\u6920\u68F9\"],\n[\"e940\",\"\u9527\u9533\u953D\u9543\u9548\u954B\u9555\u955A\u9560\u956E\u9574\u9575\u9577\",7,\"\u9580\",42],\n[\"e980\",\"\u95AB\",32,\"\u6924\u68F0\u690B\u6901\u6957\u68E3\u6910\u6971\u6939\u6960\u6942\u695D\u6984\u696B\u6980\u6998\u6978\u6934\u69CC\u6987\u6988\u69CE\u6989\u6966\u6963\u6979\u699B\u69A7\u69BB\u69AB\u69AD\u69D4\u69B1\u69C1\u69CA\u69DF\u6995\u69E0\u698D\u69FF\u6A2F\u69ED\u6A17\u6A18\u6A65\u69F2\u6A44\u6A3E\u6AA0\u6A50\u6A5B\u6A35\u6A8E\u6A79\u6A3D\u6A28\u6A58\u6A7C\u6A91\u6A90\u6AA9\u6A97\u6AAB\u7337\u7352\u6B81\u6B82\u6B87\u6B84\u6B92\u6B93\u6B8D\u6B9A\u6B9B\u6BA1\u6BAA\u8F6B\u8F6D\u8F71\u8F72\u8F73\u8F75\u8F76\u8F78\u8F77\u8F79\u8F7A\u8F7C\u8F7E\u8F81\u8F82\u8F84\u8F87\u8F8B\"],\n[\"ea40\",\"\u95CC\",27,\"\u95EC\u95FF\u9607\u9613\u9618\u961B\u961E\u9620\u9623\",6,\"\u962B\u962C\u962D\u962F\u9630\u9637\u9638\u9639\u963A\u963E\u9641\u9643\u964A\u964E\u964F\u9651\u9652\u9653\u9656\u9657\"],\n[\"ea80\",\"\u9658\u9659\u965A\u965C\u965D\u965E\u9660\u9663\u9665\u9666\u966B\u966D\",4,\"\u9673\u9678\",12,\"\u9687\u9689\u968A\u8F8D\u8F8E\u8F8F\u8F98\u8F9A\u8ECE\u620B\u6217\u621B\u621F\u6222\u6221\u6225\u6224\u622C\u81E7\u74EF\u74F4\u74FF\u750F\u7511\u7513\u6534\u65EE\u65EF\u65F0\u660A\u6619\u6772\u6603\u6615\u6600\u7085\u66F7\u661D\u6634\u6631\u6636\u6635\u8006\u665F\u6654\u6641\u664F\u6656\u6661\u6657\u6677\u6684\u668C\u66A7\u669D\u66BE\u66DB\u66DC\u66E6\u66E9\u8D32\u8D33\u8D36\u8D3B\u8D3D\u8D40\u8D45\u8D46\u8D48\u8D49\u8D47\u8D4D\u8D55\u8D59\u89C7\u89CA\u89CB\u89CC\u89CE\u89CF\u89D0\u89D1\u726E\u729F\u725D\u7266\u726F\u727E\u727F\u7284\u728B\u728D\u728F\u7292\u6308\u6332\u63B0\"],\n[\"eb40\",\"\u968C\u968E\u9691\u9692\u9693\u9695\u9696\u969A\u969B\u969D\",9,\"\u96A8\",7,\"\u96B1\u96B2\u96B4\u96B5\u96B7\u96B8\u96BA\u96BB\u96BF\u96C2\u96C3\u96C8\u96CA\u96CB\u96D0\u96D1\u96D3\u96D4\u96D6\",9,\"\u96E1\",6,\"\u96EB\"],\n[\"eb80\",\"\u96EC\u96ED\u96EE\u96F0\u96F1\u96F2\u96F4\u96F5\u96F8\u96FA\u96FB\u96FC\u96FD\u96FF\u9702\u9703\u9705\u970A\u970B\u970C\u9710\u9711\u9712\u9714\u9715\u9717\",4,\"\u971D\u971F\u9720\u643F\u64D8\u8004\u6BEA\u6BF3\u6BFD\u6BF5\u6BF9\u6C05\u6C07\u6C06\u6C0D\u6C15\u6C18\u6C19\u6C1A\u6C21\u6C29\u6C24\u6C2A\u6C32\u6535\u6555\u656B\u724D\u7252\u7256\u7230\u8662\u5216\u809F\u809C\u8093\u80BC\u670A\u80BD\u80B1\u80AB\u80AD\u80B4\u80B7\u80E7\u80E8\u80E9\u80EA\u80DB\u80C2\u80C4\u80D9\u80CD\u80D7\u6710\u80DD\u80EB\u80F1\u80F4\u80ED\u810D\u810E\u80F2\u80FC\u6715\u8112\u8C5A\u8136\u811E\u812C\u8118\u8132\u8148\u814C\u8153\u8174\u8159\u815A\u8171\u8160\u8169\u817C\u817D\u816D\u8167\u584D\u5AB5\u8188\u8182\u8191\u6ED5\u81A3\u81AA\u81CC\u6726\u81CA\u81BB\"],\n[\"ec40\",\"\u9721\",8,\"\u972B\u972C\u972E\u972F\u9731\u9733\",4,\"\u973A\u973B\u973C\u973D\u973F\",18,\"\u9754\u9755\u9757\u9758\u975A\u975C\u975D\u975F\u9763\u9764\u9766\u9767\u9768\u976A\",7],\n[\"ec80\",\"\u9772\u9775\u9777\",4,\"\u977D\",7,\"\u9786\",4,\"\u978C\u978E\u978F\u9790\u9793\u9795\u9796\u9797\u9799\",4,\"\u81C1\u81A6\u6B24\u6B37\u6B39\u6B43\u6B46\u6B59\u98D1\u98D2\u98D3\u98D5\u98D9\u98DA\u6BB3\u5F40\u6BC2\u89F3\u6590\u9F51\u6593\u65BC\u65C6\u65C4\u65C3\u65CC\u65CE\u65D2\u65D6\u7080\u709C\u7096\u709D\u70BB\u70C0\u70B7\u70AB\u70B1\u70E8\u70CA\u7110\u7113\u7116\u712F\u7131\u7173\u715C\u7168\u7145\u7172\u714A\u7178\u717A\u7198\u71B3\u71B5\u71A8\u71A0\u71E0\u71D4\u71E7\u71F9\u721D\u7228\u706C\u7118\u7166\u71B9\u623E\u623D\u6243\u6248\u6249\u793B\u7940\u7946\u7949\u795B\u795C\u7953\u795A\u7962\u7957\u7960\u796F\u7967\u797A\u7985\u798A\u799A\u79A7\u79B3\u5FD1\u5FD0\"],\n[\"ed40\",\"\u979E\u979F\u97A1\u97A2\u97A4\",6,\"\u97AC\u97AE\u97B0\u97B1\u97B3\u97B5\",46],\n[\"ed80\",\"\u97E4\u97E5\u97E8\u97EE\",4,\"\u97F4\u97F7\",23,\"\u603C\u605D\u605A\u6067\u6041\u6059\u6063\u60AB\u6106\u610D\u615D\u61A9\u619D\u61CB\u61D1\u6206\u8080\u807F\u6C93\u6CF6\u6DFC\u77F6\u77F8\u7800\u7809\u7817\u7818\u7811\u65AB\u782D\u781C\u781D\u7839\u783A\u783B\u781F\u783C\u7825\u782C\u7823\u7829\u784E\u786D\u7856\u7857\u7826\u7850\u7847\u784C\u786A\u789B\u7893\u789A\u7887\u789C\u78A1\u78A3\u78B2\u78B9\u78A5\u78D4\u78D9\u78C9\u78EC\u78F2\u7905\u78F4\u7913\u7924\u791E\u7934\u9F9B\u9EF9\u9EFB\u9EFC\u76F1\u7704\u770D\u76F9\u7707\u7708\u771A\u7722\u7719\u772D\u7726\u7735\u7738\u7750\u7751\u7747\u7743\u775A\u7768\"],\n[\"ee40\",\"\u980F\",62],\n[\"ee80\",\"\u984E\",32,\"\u7762\u7765\u777F\u778D\u777D\u7780\u778C\u7791\u779F\u77A0\u77B0\u77B5\u77BD\u753A\u7540\u754E\u754B\u7548\u755B\u7572\u7579\u7583\u7F58\u7F61\u7F5F\u8A48\u7F68\u7F74\u7F71\u7F79\u7F81\u7F7E\u76CD\u76E5\u8832\u9485\u9486\u9487\u948B\u948A\u948C\u948D\u948F\u9490\u9494\u9497\u9495\u949A\u949B\u949C\u94A3\u94A4\u94AB\u94AA\u94AD\u94AC\u94AF\u94B0\u94B2\u94B4\u94B6\",4,\"\u94BC\u94BD\u94BF\u94C4\u94C8\",6,\"\u94D0\u94D1\u94D2\u94D5\u94D6\u94D7\u94D9\u94D8\u94DB\u94DE\u94DF\u94E0\u94E2\u94E4\u94E5\u94E7\u94E8\u94EA\"],\n[\"ef40\",\"\u986F\",5,\"\u988B\u988E\u9892\u9895\u9899\u98A3\u98A8\",37,\"\u98CF\u98D0\u98D4\u98D6\u98D7\u98DB\u98DC\u98DD\u98E0\",4],\n[\"ef80\",\"\u98E5\u98E6\u98E9\",30,\"\u94E9\u94EB\u94EE\u94EF\u94F3\u94F4\u94F5\u94F7\u94F9\u94FC\u94FD\u94FF\u9503\u9502\u9506\u9507\u9509\u950A\u950D\u950E\u950F\u9512\",4,\"\u9518\u951B\u951D\u951E\u951F\u9522\u952A\u952B\u9529\u952C\u9531\u9532\u9534\u9536\u9537\u9538\u953C\u953E\u953F\u9542\u9535\u9544\u9545\u9546\u9549\u954C\u954E\u954F\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955B\u955E\u955F\u955D\u9561\u9562\u9564\",8,\"\u956F\u9571\u9572\u9573\u953A\u77E7\u77EC\u96C9\u79D5\u79ED\u79E3\u79EB\u7A06\u5D47\u7A03\u7A02\u7A1E\u7A14\"],\n[\"f040\",\"\u9908\",4,\"\u990E\u990F\u9911\",28,\"\u992F\",26],\n[\"f080\",\"\u994A\",9,\"\u9956\",12,\"\u9964\u9966\u9973\u9978\u9979\u997B\u997E\u9982\u9983\u9989\u7A39\u7A37\u7A51\u9ECF\u99A5\u7A70\u7688\u768E\u7693\u7699\u76A4\u74DE\u74E0\u752C\u9E20\u9E22\u9E28\",4,\"\u9E32\u9E31\u9E36\u9E38\u9E37\u9E39\u9E3A\u9E3E\u9E41\u9E42\u9E44\u9E46\u9E47\u9E48\u9E49\u9E4B\u9E4C\u9E4E\u9E51\u9E55\u9E57\u9E5A\u9E5B\u9E5C\u9E5E\u9E63\u9E66\",6,\"\u9E71\u9E6D\u9E73\u7592\u7594\u7596\u75A0\u759D\u75AC\u75A3\u75B3\u75B4\u75B8\u75C4\u75B1\u75B0\u75C3\u75C2\u75D6\u75CD\u75E3\u75E8\u75E6\u75E4\u75EB\u75E7\u7603\u75F1\u75FC\u75FF\u7610\u7600\u7605\u760C\u7617\u760A\u7625\u7618\u7615\u7619\"],\n[\"f140\",\"\u998C\u998E\u999A\",10,\"\u99A6\u99A7\u99A9\",47],\n[\"f180\",\"\u99D9\",32,\"\u761B\u763C\u7622\u7620\u7640\u762D\u7630\u763F\u7635\u7643\u763E\u7633\u764D\u765E\u7654\u765C\u7656\u766B\u766F\u7FCA\u7AE6\u7A78\u7A79\u7A80\u7A86\u7A88\u7A95\u7AA6\u7AA0\u7AAC\u7AA8\u7AAD\u7AB3\u8864\u8869\u8872\u887D\u887F\u8882\u88A2\u88C6\u88B7\u88BC\u88C9\u88E2\u88CE\u88E3\u88E5\u88F1\u891A\u88FC\u88E8\u88FE\u88F0\u8921\u8919\u8913\u891B\u890A\u8934\u892B\u8936\u8941\u8966\u897B\u758B\u80E5\u76B2\u76B4\u77DC\u8012\u8014\u8016\u801C\u8020\u8022\u8025\u8026\u8027\u8029\u8028\u8031\u800B\u8035\u8043\u8046\u804D\u8052\u8069\u8071\u8983\u9878\u9880\u9883\"],\n[\"f240\",\"\u99FA\",62],\n[\"f280\",\"\u9A39\",32,\"\u9889\u988C\u988D\u988F\u9894\u989A\u989B\u989E\u989F\u98A1\u98A2\u98A5\u98A6\u864D\u8654\u866C\u866E\u867F\u867A\u867C\u867B\u86A8\u868D\u868B\u86AC\u869D\u86A7\u86A3\u86AA\u8693\u86A9\u86B6\u86C4\u86B5\u86CE\u86B0\u86BA\u86B1\u86AF\u86C9\u86CF\u86B4\u86E9\u86F1\u86F2\u86ED\u86F3\u86D0\u8713\u86DE\u86F4\u86DF\u86D8\u86D1\u8703\u8707\u86F8\u8708\u870A\u870D\u8709\u8723\u873B\u871E\u8725\u872E\u871A\u873E\u8748\u8734\u8731\u8729\u8737\u873F\u8782\u8722\u877D\u877E\u877B\u8760\u8770\u874C\u876E\u878B\u8753\u8763\u877C\u8764\u8759\u8765\u8793\u87AF\u87A8\u87D2\"],\n[\"f340\",\"\u9A5A\",17,\"\u9A72\u9A83\u9A89\u9A8D\u9A8E\u9A94\u9A95\u9A99\u9AA6\u9AA9\",6,\"\u9AB2\u9AB3\u9AB4\u9AB5\u9AB9\u9ABB\u9ABD\u9ABE\u9ABF\u9AC3\u9AC4\u9AC6\",4,\"\u9ACD\u9ACE\u9ACF\u9AD0\u9AD2\u9AD4\u9AD5\u9AD6\u9AD7\u9AD9\u9ADA\u9ADB\u9ADC\"],\n[\"f380\",\"\u9ADD\u9ADE\u9AE0\u9AE2\u9AE3\u9AE4\u9AE5\u9AE7\u9AE8\u9AE9\u9AEA\u9AEC\u9AEE\u9AF0\",8,\"\u9AFA\u9AFC\",6,\"\u9B04\u9B05\u9B06\u87C6\u8788\u8785\u87AD\u8797\u8783\u87AB\u87E5\u87AC\u87B5\u87B3\u87CB\u87D3\u87BD\u87D1\u87C0\u87CA\u87DB\u87EA\u87E0\u87EE\u8816\u8813\u87FE\u880A\u881B\u8821\u8839\u883C\u7F36\u7F42\u7F44\u7F45\u8210\u7AFA\u7AFD\u7B08\u7B03\u7B04\u7B15\u7B0A\u7B2B\u7B0F\u7B47\u7B38\u7B2A\u7B19\u7B2E\u7B31\u7B20\u7B25\u7B24\u7B33\u7B3E\u7B1E\u7B58\u7B5A\u7B45\u7B75\u7B4C\u7B5D\u7B60\u7B6E\u7B7B\u7B62\u7B72\u7B71\u7B90\u7BA6\u7BA7\u7BB8\u7BAC\u7B9D\u7BA8\u7B85\u7BAA\u7B9C\u7BA2\u7BAB\u7BB4\u7BD1\u7BC1\u7BCC\u7BDD\u7BDA\u7BE5\u7BE6\u7BEA\u7C0C\u7BFE\u7BFC\u7C0F\u7C16\u7C0B\"],\n[\"f440\",\"\u9B07\u9B09\",5,\"\u9B10\u9B11\u9B12\u9B14\",10,\"\u9B20\u9B21\u9B22\u9B24\",10,\"\u9B30\u9B31\u9B33\",7,\"\u9B3D\u9B3E\u9B3F\u9B40\u9B46\u9B4A\u9B4B\u9B4C\u9B4E\u9B50\u9B52\u9B53\u9B55\",5],\n[\"f480\",\"\u9B5B\",32,\"\u7C1F\u7C2A\u7C26\u7C38\u7C41\u7C40\u81FE\u8201\u8202\u8204\u81EC\u8844\u8221\u8222\u8223\u822D\u822F\u8228\u822B\u8238\u823B\u8233\u8234\u823E\u8244\u8249\u824B\u824F\u825A\u825F\u8268\u887E\u8885\u8888\u88D8\u88DF\u895E\u7F9D\u7F9F\u7FA7\u7FAF\u7FB0\u7FB2\u7C7C\u6549\u7C91\u7C9D\u7C9C\u7C9E\u7CA2\u7CB2\u7CBC\u7CBD\u7CC1\u7CC7\u7CCC\u7CCD\u7CC8\u7CC5\u7CD7\u7CE8\u826E\u66A8\u7FBF\u7FCE\u7FD5\u7FE5\u7FE1\u7FE6\u7FE9\u7FEE\u7FF3\u7CF8\u7D77\u7DA6\u7DAE\u7E47\u7E9B\u9EB8\u9EB4\u8D73\u8D84\u8D94\u8D91\u8DB1\u8D67\u8D6D\u8C47\u8C49\u914A\u9150\u914E\u914F\u9164\"],\n[\"f540\",\"\u9B7C\",62],\n[\"f580\",\"\u9BBB\",32,\"\u9162\u9161\u9170\u9169\u916F\u917D\u917E\u9172\u9174\u9179\u918C\u9185\u9190\u918D\u9191\u91A2\u91A3\u91AA\u91AD\u91AE\u91AF\u91B5\u91B4\u91BA\u8C55\u9E7E\u8DB8\u8DEB\u8E05\u8E59\u8E69\u8DB5\u8DBF\u8DBC\u8DBA\u8DC4\u8DD6\u8DD7\u8DDA\u8DDE\u8DCE\u8DCF\u8DDB\u8DC6\u8DEC\u8DF7\u8DF8\u8DE3\u8DF9\u8DFB\u8DE4\u8E09\u8DFD\u8E14\u8E1D\u8E1F\u8E2C\u8E2E\u8E23\u8E2F\u8E3A\u8E40\u8E39\u8E35\u8E3D\u8E31\u8E49\u8E41\u8E42\u8E51\u8E52\u8E4A\u8E70\u8E76\u8E7C\u8E6F\u8E74\u8E85\u8E8F\u8E94\u8E90\u8E9C\u8E9E\u8C78\u8C82\u8C8A\u8C85\u8C98\u8C94\u659B\u89D6\u89DE\u89DA\u89DC\"],\n[\"f640\",\"\u9BDC\",62],\n[\"f680\",\"\u9C1B\",32,\"\u89E5\u89EB\u89EF\u8A3E\u8B26\u9753\u96E9\u96F3\u96EF\u9706\u9701\u9708\u970F\u970E\u972A\u972D\u9730\u973E\u9F80\u9F83\u9F85\",5,\"\u9F8C\u9EFE\u9F0B\u9F0D\u96B9\u96BC\u96BD\u96CE\u96D2\u77BF\u96E0\u928E\u92AE\u92C8\u933E\u936A\u93CA\u938F\u943E\u946B\u9C7F\u9C82\u9C85\u9C86\u9C87\u9C88\u7A23\u9C8B\u9C8E\u9C90\u9C91\u9C92\u9C94\u9C95\u9C9A\u9C9B\u9C9E\",5,\"\u9CA5\",4,\"\u9CAB\u9CAD\u9CAE\u9CB0\",7,\"\u9CBA\u9CBB\u9CBC\u9CBD\u9CC4\u9CC5\u9CC6\u9CC7\u9CCA\u9CCB\"],\n[\"f740\",\"\u9C3C\",62],\n[\"f780\",\"\u9C7B\u9C7D\u9C7E\u9C80\u9C83\u9C84\u9C89\u9C8A\u9C8C\u9C8F\u9C93\u9C96\u9C97\u9C98\u9C99\u9C9D\u9CAA\u9CAC\u9CAF\u9CB9\u9CBE\",4,\"\u9CC8\u9CC9\u9CD1\u9CD2\u9CDA\u9CDB\u9CE0\u9CE1\u9CCC\",4,\"\u9CD3\u9CD4\u9CD5\u9CD7\u9CD8\u9CD9\u9CDC\u9CDD\u9CDF\u9CE2\u977C\u9785\u9791\u9792\u9794\u97AF\u97AB\u97A3\u97B2\u97B4\u9AB1\u9AB0\u9AB7\u9E58\u9AB6\u9ABA\u9ABC\u9AC1\u9AC0\u9AC5\u9AC2\u9ACB\u9ACC\u9AD1\u9B45\u9B43\u9B47\u9B49\u9B48\u9B4D\u9B51\u98E8\u990D\u992E\u9955\u9954\u9ADF\u9AE1\u9AE6\u9AEF\u9AEB\u9AFB\u9AED\u9AF9\u9B08\u9B0F\u9B13\u9B1F\u9B23\u9EBD\u9EBE\u7E3B\u9E82\u9E87\u9E88\u9E8B\u9E92\u93D6\u9E9D\u9E9F\u9EDB\u9EDC\u9EDD\u9EE0\u9EDF\u9EE2\u9EE9\u9EE7\u9EE5\u9EEA\u9EEF\u9F22\u9F2C\u9F2F\u9F39\u9F37\u9F3D\u9F3E\u9F44\"],\n[\"f840\",\"\u9CE3\",62],\n[\"f880\",\"\u9D22\",32],\n[\"f940\",\"\u9D43\",62],\n[\"f980\",\"\u9D82\",32],\n[\"fa40\",\"\u9DA3\",62],\n[\"fa80\",\"\u9DE2\",32],\n[\"fb40\",\"\u9E03\",27,\"\u9E24\u9E27\u9E2E\u9E30\u9E34\u9E3B\u9E3C\u9E40\u9E4D\u9E50\u9E52\u9E53\u9E54\u9E56\u9E59\u9E5D\u9E5F\u9E60\u9E61\u9E62\u9E65\u9E6E\u9E6F\u9E72\u9E74\",9,\"\u9E80\"],\n[\"fb80\",\"\u9E81\u9E83\u9E84\u9E85\u9E86\u9E89\u9E8A\u9E8C\",5,\"\u9E94\",8,\"\u9E9E\u9EA0\",5,\"\u9EA7\u9EA8\u9EA9\u9EAA\"],\n[\"fc40\",\"\u9EAB\",8,\"\u9EB5\u9EB6\u9EB7\u9EB9\u9EBA\u9EBC\u9EBF\",4,\"\u9EC5\u9EC6\u9EC7\u9EC8\u9ECA\u9ECB\u9ECC\u9ED0\u9ED2\u9ED3\u9ED5\u9ED6\u9ED7\u9ED9\u9EDA\u9EDE\u9EE1\u9EE3\u9EE4\u9EE6\u9EE8\u9EEB\u9EEC\u9EED\u9EEE\u9EF0\",8,\"\u9EFA\u9EFD\u9EFF\",6],\n[\"fc80\",\"\u9F06\",4,\"\u9F0C\u9F0F\u9F11\u9F12\u9F14\u9F15\u9F16\u9F18\u9F1A\",5,\"\u9F21\u9F23\",8,\"\u9F2D\u9F2E\u9F30\u9F31\"],\n[\"fd40\",\"\u9F32\",4,\"\u9F38\u9F3A\u9F3C\u9F3F\",4,\"\u9F45\",10,\"\u9F52\",38],\n[\"fd80\",\"\u9F79\",5,\"\u9F81\u9F82\u9F8D\",11,\"\u9F9C\u9F9D\u9F9E\u9FA1\",4,\"\uF92C\uF979\uF995\uF9E7\uF9F1\"],\n[\"fe40\",\"\uFA0C\uFA0D\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA18\uFA1F\uFA20\uFA21\uFA23\uFA24\uFA27\uFA28\uFA29\"]\n]\n", "[\n[\"a140\",\"\uE4C6\",62],\n[\"a180\",\"\uE505\",32],\n[\"a240\",\"\uE526\",62],\n[\"a280\",\"\uE565\",32],\n[\"a2ab\",\"\uE766\",5],\n[\"a2e3\",\"\u20AC\uE76D\"],\n[\"a2ef\",\"\uE76E\uE76F\"],\n[\"a2fd\",\"\uE770\uE771\"],\n[\"a340\",\"\uE586\",62],\n[\"a380\",\"\uE5C5\",31,\"\u3000\"],\n[\"a440\",\"\uE5E6\",62],\n[\"a480\",\"\uE625\",32],\n[\"a4f4\",\"\uE772\",10],\n[\"a540\",\"\uE646\",62],\n[\"a580\",\"\uE685\",32],\n[\"a5f7\",\"\uE77D\",7],\n[\"a640\",\"\uE6A6\",62],\n[\"a680\",\"\uE6E5\",32],\n[\"a6b9\",\"\uE785\",7],\n[\"a6d9\",\"\uE78D\",6],\n[\"a6ec\",\"\uE794\uE795\"],\n[\"a6f3\",\"\uE796\"],\n[\"a6f6\",\"\uE797\",8],\n[\"a740\",\"\uE706\",62],\n[\"a780\",\"\uE745\",32],\n[\"a7c2\",\"\uE7A0\",14],\n[\"a7f2\",\"\uE7AF\",12],\n[\"a896\",\"\uE7BC\",10],\n[\"a8bc\",\"\u1E3F\"],\n[\"a8bf\",\"\u01F9\"],\n[\"a8c1\",\"\uE7C9\uE7CA\uE7CB\uE7CC\"],\n[\"a8ea\",\"\uE7CD\",20],\n[\"a958\",\"\uE7E2\"],\n[\"a95b\",\"\uE7E3\"],\n[\"a95d\",\"\uE7E4\uE7E5\uE7E6\"],\n[\"a989\",\"\u303E\u2FF0\",11],\n[\"a997\",\"\uE7F4\",12],\n[\"a9f0\",\"\uE801\",14],\n[\"aaa1\",\"\uE000\",93],\n[\"aba1\",\"\uE05E\",93],\n[\"aca1\",\"\uE0BC\",93],\n[\"ada1\",\"\uE11A\",93],\n[\"aea1\",\"\uE178\",93],\n[\"afa1\",\"\uE1D6\",93],\n[\"d7fa\",\"\uE810\",4],\n[\"f8a1\",\"\uE234\",93],\n[\"f9a1\",\"\uE292\",93],\n[\"faa1\",\"\uE2F0\",93],\n[\"fba1\",\"\uE34E\",93],\n[\"fca1\",\"\uE3AC\",93],\n[\"fda1\",\"\uE40A\",93],\n[\"fe50\",\"\u2E81\uE816\uE817\uE818\u2E84\u3473\u3447\u2E88\u2E8B\uE81E\u359E\u361A\u360E\u2E8C\u2E97\u396E\u3918\uE826\u39CF\u39DF\u3A73\u39D0\uE82B\uE82C\u3B4E\u3C6E\u3CE0\u2EA7\uE831\uE832\u2EAA\u4056\u415F\u2EAE\u4337\u2EB3\u2EB6\u2EB7\uE83B\u43B1\u43AC\u2EBB\u43DD\u44D6\u4661\u464C\uE843\"],\n[\"fe80\",\"\u4723\u4729\u477C\u478D\u2ECA\u4947\u497A\u497D\u4982\u4983\u4985\u4986\u499F\u499B\u49B7\u49B6\uE854\uE855\u4CA3\u4C9F\u4CA0\u4CA1\u4C77\u4CA2\u4D13\",6,\"\u4DAE\uE864\uE468\",93],\n[\"8135f437\",\"\uE7C7\"]\n]\n", "{\"uChars\":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],\"gbChars\":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}", "[\n[\"0\",\"\\u0000\",127],\n[\"8141\",\"\uAC02\uAC03\uAC05\uAC06\uAC0B\",4,\"\uAC18\uAC1E\uAC1F\uAC21\uAC22\uAC23\uAC25\",6,\"\uAC2E\uAC32\uAC33\uAC34\"],\n[\"8161\",\"\uAC35\uAC36\uAC37\uAC3A\uAC3B\uAC3D\uAC3E\uAC3F\uAC41\",9,\"\uAC4C\uAC4E\",5,\"\uAC55\"],\n[\"8181\",\"\uAC56\uAC57\uAC59\uAC5A\uAC5B\uAC5D\",18,\"\uAC72\uAC73\uAC75\uAC76\uAC79\uAC7B\",4,\"\uAC82\uAC87\uAC88\uAC8D\uAC8E\uAC8F\uAC91\uAC92\uAC93\uAC95\",6,\"\uAC9E\uACA2\",5,\"\uACAB\uACAD\uACAE\uACB1\",6,\"\uACBA\uACBE\uACBF\uACC0\uACC2\uACC3\uACC5\uACC6\uACC7\uACC9\uACCA\uACCB\uACCD\",7,\"\uACD6\uACD8\",7,\"\uACE2\uACE3\uACE5\uACE6\uACE9\uACEB\uACED\uACEE\uACF2\uACF4\uACF7\",4,\"\uACFE\uACFF\uAD01\uAD02\uAD03\uAD05\uAD07\",4,\"\uAD0E\uAD10\uAD12\uAD13\"],\n[\"8241\",\"\uAD14\uAD15\uAD16\uAD17\uAD19\uAD1A\uAD1B\uAD1D\uAD1E\uAD1F\uAD21\",7,\"\uAD2A\uAD2B\uAD2E\",5],\n[\"8261\",\"\uAD36\uAD37\uAD39\uAD3A\uAD3B\uAD3D\",6,\"\uAD46\uAD48\uAD4A\",5,\"\uAD51\uAD52\uAD53\uAD55\uAD56\uAD57\"],\n[\"8281\",\"\uAD59\",7,\"\uAD62\uAD64\",7,\"\uAD6E\uAD6F\uAD71\uAD72\uAD77\uAD78\uAD79\uAD7A\uAD7E\uAD80\uAD83\",4,\"\uAD8A\uAD8B\uAD8D\uAD8E\uAD8F\uAD91\",10,\"\uAD9E\",5,\"\uADA5\",17,\"\uADB8\",7,\"\uADC2\uADC3\uADC5\uADC6\uADC7\uADC9\",6,\"\uADD2\uADD4\",7,\"\uADDD\uADDE\uADDF\uADE1\uADE2\uADE3\uADE5\",18],\n[\"8341\",\"\uADFA\uADFB\uADFD\uADFE\uAE02\",5,\"\uAE0A\uAE0C\uAE0E\",5,\"\uAE15\",7],\n[\"8361\",\"\uAE1D\",18,\"\uAE32\uAE33\uAE35\uAE36\uAE39\uAE3B\uAE3C\"],\n[\"8381\",\"\uAE3D\uAE3E\uAE3F\uAE42\uAE44\uAE47\uAE48\uAE49\uAE4B\uAE4F\uAE51\uAE52\uAE53\uAE55\uAE57\",4,\"\uAE5E\uAE62\uAE63\uAE64\uAE66\uAE67\uAE6A\uAE6B\uAE6D\uAE6E\uAE6F\uAE71\",6,\"\uAE7A\uAE7E\",5,\"\uAE86\",5,\"\uAE8D\",46,\"\uAEBF\uAEC1\uAEC2\uAEC3\uAEC5\",6,\"\uAECE\uAED2\",5,\"\uAEDA\uAEDB\uAEDD\",8],\n[\"8441\",\"\uAEE6\uAEE7\uAEE9\uAEEA\uAEEC\uAEEE\",5,\"\uAEF5\uAEF6\uAEF7\uAEF9\uAEFA\uAEFB\uAEFD\",8],\n[\"8461\",\"\uAF06\uAF09\uAF0A\uAF0B\uAF0C\uAF0E\uAF0F\uAF11\",18],\n[\"8481\",\"\uAF24\",7,\"\uAF2E\uAF2F\uAF31\uAF33\uAF35\",6,\"\uAF3E\uAF40\uAF44\uAF45\uAF46\uAF47\uAF4A\",5,\"\uAF51\",10,\"\uAF5E\",5,\"\uAF66\",18,\"\uAF7A\",5,\"\uAF81\uAF82\uAF83\uAF85\uAF86\uAF87\uAF89\",6,\"\uAF92\uAF93\uAF94\uAF96\",5,\"\uAF9D\",26,\"\uAFBA\uAFBB\uAFBD\uAFBE\"],\n[\"8541\",\"\uAFBF\uAFC1\",5,\"\uAFCA\uAFCC\uAFCF\",4,\"\uAFD5\",6,\"\uAFDD\",4],\n[\"8561\",\"\uAFE2\",5,\"\uAFEA\",5,\"\uAFF2\uAFF3\uAFF5\uAFF6\uAFF7\uAFF9\",6,\"\uB002\uB003\"],\n[\"8581\",\"\uB005\",6,\"\uB00D\uB00E\uB00F\uB011\uB012\uB013\uB015\",6,\"\uB01E\",9,\"\uB029\",26,\"\uB046\uB047\uB049\uB04B\uB04D\uB04F\uB050\uB051\uB052\uB056\uB058\uB05A\uB05B\uB05C\uB05E\",29,\"\uB07E\uB07F\uB081\uB082\uB083\uB085\",6,\"\uB08E\uB090\uB092\",5,\"\uB09B\uB09D\uB09E\uB0A3\uB0A4\"],\n[\"8641\",\"\uB0A5\uB0A6\uB0A7\uB0AA\uB0B0\uB0B2\uB0B6\uB0B7\uB0B9\uB0BA\uB0BB\uB0BD\",6,\"\uB0C6\uB0CA\",5,\"\uB0D2\"],\n[\"8661\",\"\uB0D3\uB0D5\uB0D6\uB0D7\uB0D9\",6,\"\uB0E1\uB0E2\uB0E3\uB0E4\uB0E6\",10],\n[\"8681\",\"\uB0F1\",22,\"\uB10A\uB10D\uB10E\uB10F\uB111\uB114\uB115\uB116\uB117\uB11A\uB11E\",4,\"\uB126\uB127\uB129\uB12A\uB12B\uB12D\",6,\"\uB136\uB13A\",5,\"\uB142\uB143\uB145\uB146\uB147\uB149\",6,\"\uB152\uB153\uB156\uB157\uB159\uB15A\uB15B\uB15D\uB15E\uB15F\uB161\",22,\"\uB17A\uB17B\uB17D\uB17E\uB17F\uB181\uB183\",4,\"\uB18A\uB18C\uB18E\uB18F\uB190\uB191\uB195\uB196\uB197\uB199\uB19A\uB19B\uB19D\"],\n[\"8741\",\"\uB19E\",9,\"\uB1A9\",15],\n[\"8761\",\"\uB1B9\",18,\"\uB1CD\uB1CE\uB1CF\uB1D1\uB1D2\uB1D3\uB1D5\"],\n[\"8781\",\"\uB1D6\",5,\"\uB1DE\uB1E0\",7,\"\uB1EA\uB1EB\uB1ED\uB1EE\uB1EF\uB1F1\",7,\"\uB1FA\uB1FC\uB1FE\",5,\"\uB206\uB207\uB209\uB20A\uB20D\",6,\"\uB216\uB218\uB21A\",5,\"\uB221\",18,\"\uB235\",6,\"\uB23D\",26,\"\uB259\uB25A\uB25B\uB25D\uB25E\uB25F\uB261\",6,\"\uB26A\",4],\n[\"8841\",\"\uB26F\",4,\"\uB276\",5,\"\uB27D\",6,\"\uB286\uB287\uB288\uB28A\",4],\n[\"8861\",\"\uB28F\uB292\uB293\uB295\uB296\uB297\uB29B\",4,\"\uB2A2\uB2A4\uB2A7\uB2A8\uB2A9\uB2AB\uB2AD\uB2AE\uB2AF\uB2B1\uB2B2\uB2B3\uB2B5\uB2B6\uB2B7\"],\n[\"8881\",\"\uB2B8\",15,\"\uB2CA\uB2CB\uB2CD\uB2CE\uB2CF\uB2D1\uB2D3\",4,\"\uB2DA\uB2DC\uB2DE\uB2DF\uB2E0\uB2E1\uB2E3\uB2E7\uB2E9\uB2EA\uB2F0\uB2F1\uB2F2\uB2F6\uB2FC\uB2FD\uB2FE\uB302\uB303\uB305\uB306\uB307\uB309\",6,\"\uB312\uB316\",5,\"\uB31D\",54,\"\uB357\uB359\uB35A\uB35D\uB360\uB361\uB362\uB363\"],\n[\"8941\",\"\uB366\uB368\uB36A\uB36C\uB36D\uB36F\uB372\uB373\uB375\uB376\uB377\uB379\",6,\"\uB382\uB386\",5,\"\uB38D\"],\n[\"8961\",\"\uB38E\uB38F\uB391\uB392\uB393\uB395\",10,\"\uB3A2\",5,\"\uB3A9\uB3AA\uB3AB\uB3AD\"],\n[\"8981\",\"\uB3AE\",21,\"\uB3C6\uB3C7\uB3C9\uB3CA\uB3CD\uB3CF\uB3D1\uB3D2\uB3D3\uB3D6\uB3D8\uB3DA\uB3DC\uB3DE\uB3DF\uB3E1\uB3E2\uB3E3\uB3E5\uB3E6\uB3E7\uB3E9\",18,\"\uB3FD\",18,\"\uB411\",6,\"\uB419\uB41A\uB41B\uB41D\uB41E\uB41F\uB421\",6,\"\uB42A\uB42C\",7,\"\uB435\",15],\n[\"8a41\",\"\uB445\",10,\"\uB452\uB453\uB455\uB456\uB457\uB459\",6,\"\uB462\uB464\uB466\"],\n[\"8a61\",\"\uB467\",4,\"\uB46D\",18,\"\uB481\uB482\"],\n[\"8a81\",\"\uB483\",4,\"\uB489\",19,\"\uB49E\",5,\"\uB4A5\uB4A6\uB4A7\uB4A9\uB4AA\uB4AB\uB4AD\",7,\"\uB4B6\uB4B8\uB4BA\",5,\"\uB4C1\uB4C2\uB4C3\uB4C5\uB4C6\uB4C7\uB4C9\",6,\"\uB4D1\uB4D2\uB4D3\uB4D4\uB4D6\",5,\"\uB4DE\uB4DF\uB4E1\uB4E2\uB4E5\uB4E7\",4,\"\uB4EE\uB4F0\uB4F2\",5,\"\uB4F9\",26,\"\uB516\uB517\uB519\uB51A\uB51D\"],\n[\"8b41\",\"\uB51E\",5,\"\uB526\uB52B\",4,\"\uB532\uB533\uB535\uB536\uB537\uB539\",6,\"\uB542\uB546\"],\n[\"8b61\",\"\uB547\uB548\uB549\uB54A\uB54E\uB54F\uB551\uB552\uB553\uB555\",6,\"\uB55E\uB562\",8],\n[\"8b81\",\"\uB56B\",52,\"\uB5A2\uB5A3\uB5A5\uB5A6\uB5A7\uB5A9\uB5AC\uB5AD\uB5AE\uB5AF\uB5B2\uB5B6\",4,\"\uB5BE\uB5BF\uB5C1\uB5C2\uB5C3\uB5C5\",6,\"\uB5CE\uB5D2\",5,\"\uB5D9\",18,\"\uB5ED\",18],\n[\"8c41\",\"\uB600\",15,\"\uB612\uB613\uB615\uB616\uB617\uB619\",4],\n[\"8c61\",\"\uB61E\",6,\"\uB626\",5,\"\uB62D\",6,\"\uB635\",5],\n[\"8c81\",\"\uB63B\",12,\"\uB649\",26,\"\uB665\uB666\uB667\uB669\",50,\"\uB69E\uB69F\uB6A1\uB6A2\uB6A3\uB6A5\",5,\"\uB6AD\uB6AE\uB6AF\uB6B0\uB6B2\",16],\n[\"8d41\",\"\uB6C3\",16,\"\uB6D5\",8],\n[\"8d61\",\"\uB6DE\",17,\"\uB6F1\uB6F2\uB6F3\uB6F5\uB6F6\uB6F7\uB6F9\uB6FA\"],\n[\"8d81\",\"\uB6FB\",4,\"\uB702\uB703\uB704\uB706\",33,\"\uB72A\uB72B\uB72D\uB72E\uB731\",6,\"\uB73A\uB73C\",7,\"\uB745\uB746\uB747\uB749\uB74A\uB74B\uB74D\",6,\"\uB756\",9,\"\uB761\uB762\uB763\uB765\uB766\uB767\uB769\",6,\"\uB772\uB774\uB776\",5,\"\uB77E\uB77F\uB781\uB782\uB783\uB785\",6,\"\uB78E\uB793\uB794\uB795\uB79A\uB79B\uB79D\uB79E\"],\n[\"8e41\",\"\uB79F\uB7A1\",6,\"\uB7AA\uB7AE\",5,\"\uB7B6\uB7B7\uB7B9\",8],\n[\"8e61\",\"\uB7C2\",4,\"\uB7C8\uB7CA\",19],\n[\"8e81\",\"\uB7DE\",13,\"\uB7EE\uB7EF\uB7F1\uB7F2\uB7F3\uB7F5\",6,\"\uB7FE\uB802\",4,\"\uB80A\uB80B\uB80D\uB80E\uB80F\uB811\",6,\"\uB81A\uB81C\uB81E\",5,\"\uB826\uB827\uB829\uB82A\uB82B\uB82D\",6,\"\uB836\uB83A\",5,\"\uB841\uB842\uB843\uB845\",11,\"\uB852\uB854\",7,\"\uB85E\uB85F\uB861\uB862\uB863\uB865\",6,\"\uB86E\uB870\uB872\",5,\"\uB879\uB87A\uB87B\uB87D\",7],\n[\"8f41\",\"\uB885\",7,\"\uB88E\",17],\n[\"8f61\",\"\uB8A0\",7,\"\uB8A9\",6,\"\uB8B1\uB8B2\uB8B3\uB8B5\uB8B6\uB8B7\uB8B9\",4],\n[\"8f81\",\"\uB8BE\uB8BF\uB8C2\uB8C4\uB8C6\",5,\"\uB8CD\uB8CE\uB8CF\uB8D1\uB8D2\uB8D3\uB8D5\",7,\"\uB8DE\uB8E0\uB8E2\",5,\"\uB8EA\uB8EB\uB8ED\uB8EE\uB8EF\uB8F1\",6,\"\uB8FA\uB8FC\uB8FE\",5,\"\uB905\",18,\"\uB919\",6,\"\uB921\",26,\"\uB93E\uB93F\uB941\uB942\uB943\uB945\",6,\"\uB94D\uB94E\uB950\uB952\",5],\n[\"9041\",\"\uB95A\uB95B\uB95D\uB95E\uB95F\uB961\",6,\"\uB96A\uB96C\uB96E\",5,\"\uB976\uB977\uB979\uB97A\uB97B\uB97D\"],\n[\"9061\",\"\uB97E\",5,\"\uB986\uB988\uB98B\uB98C\uB98F\",15],\n[\"9081\",\"\uB99F\",12,\"\uB9AE\uB9AF\uB9B1\uB9B2\uB9B3\uB9B5\",6,\"\uB9BE\uB9C0\uB9C2\",5,\"\uB9CA\uB9CB\uB9CD\uB9D3\",4,\"\uB9DA\uB9DC\uB9DF\uB9E0\uB9E2\uB9E6\uB9E7\uB9E9\uB9EA\uB9EB\uB9ED\",6,\"\uB9F6\uB9FB\",4,\"\uBA02\",5,\"\uBA09\",11,\"\uBA16\",33,\"\uBA3A\uBA3B\uBA3D\uBA3E\uBA3F\uBA41\uBA43\uBA44\uBA45\uBA46\"],\n[\"9141\",\"\uBA47\uBA4A\uBA4C\uBA4F\uBA50\uBA51\uBA52\uBA56\uBA57\uBA59\uBA5A\uBA5B\uBA5D\",6,\"\uBA66\uBA6A\",5],\n[\"9161\",\"\uBA72\uBA73\uBA75\uBA76\uBA77\uBA79\",9,\"\uBA86\uBA88\uBA89\uBA8A\uBA8B\uBA8D\",5],\n[\"9181\",\"\uBA93\",20,\"\uBAAA\uBAAD\uBAAE\uBAAF\uBAB1\uBAB3\",4,\"\uBABA\uBABC\uBABE\",5,\"\uBAC5\uBAC6\uBAC7\uBAC9\",14,\"\uBADA\",33,\"\uBAFD\uBAFE\uBAFF\uBB01\uBB02\uBB03\uBB05\",7,\"\uBB0E\uBB10\uBB12\",5,\"\uBB19\uBB1A\uBB1B\uBB1D\uBB1E\uBB1F\uBB21\",6],\n[\"9241\",\"\uBB28\uBB2A\uBB2C\",7,\"\uBB37\uBB39\uBB3A\uBB3F\",4,\"\uBB46\uBB48\uBB4A\uBB4B\uBB4C\uBB4E\uBB51\uBB52\"],\n[\"9261\",\"\uBB53\uBB55\uBB56\uBB57\uBB59\",7,\"\uBB62\uBB64\",7,\"\uBB6D\",4],\n[\"9281\",\"\uBB72\",21,\"\uBB89\uBB8A\uBB8B\uBB8D\uBB8E\uBB8F\uBB91\",18,\"\uBBA5\uBBA6\uBBA7\uBBA9\uBBAA\uBBAB\uBBAD\",6,\"\uBBB5\uBBB6\uBBB8\",7,\"\uBBC1\uBBC2\uBBC3\uBBC5\uBBC6\uBBC7\uBBC9\",6,\"\uBBD1\uBBD2\uBBD4\",35,\"\uBBFA\uBBFB\uBBFD\uBBFE\uBC01\"],\n[\"9341\",\"\uBC03\",4,\"\uBC0A\uBC0E\uBC10\uBC12\uBC13\uBC19\uBC1A\uBC20\uBC21\uBC22\uBC23\uBC26\uBC28\uBC2A\uBC2B\uBC2C\uBC2E\uBC2F\uBC32\uBC33\uBC35\"],\n[\"9361\",\"\uBC36\uBC37\uBC39\",6,\"\uBC42\uBC46\uBC47\uBC48\uBC4A\uBC4B\uBC4E\uBC4F\uBC51\",8],\n[\"9381\",\"\uBC5A\uBC5B\uBC5C\uBC5E\",37,\"\uBC86\uBC87\uBC89\uBC8A\uBC8D\uBC8F\",4,\"\uBC96\uBC98\uBC9B\",4,\"\uBCA2\uBCA3\uBCA5\uBCA6\uBCA9\",6,\"\uBCB2\uBCB6\",5,\"\uBCBE\uBCBF\uBCC1\uBCC2\uBCC3\uBCC5\",7,\"\uBCCE\uBCD2\uBCD3\uBCD4\uBCD6\uBCD7\uBCD9\uBCDA\uBCDB\uBCDD\",22,\"\uBCF7\uBCF9\uBCFA\uBCFB\uBCFD\"],\n[\"9441\",\"\uBCFE\",5,\"\uBD06\uBD08\uBD0A\",5,\"\uBD11\uBD12\uBD13\uBD15\",8],\n[\"9461\",\"\uBD1E\",5,\"\uBD25\",6,\"\uBD2D\",12],\n[\"9481\",\"\uBD3A\",5,\"\uBD41\",6,\"\uBD4A\uBD4B\uBD4D\uBD4E\uBD4F\uBD51\",6,\"\uBD5A\",9,\"\uBD65\uBD66\uBD67\uBD69\",22,\"\uBD82\uBD83\uBD85\uBD86\uBD8B\",4,\"\uBD92\uBD94\uBD96\uBD97\uBD98\uBD9B\uBD9D\",6,\"\uBDA5\",10,\"\uBDB1\",6,\"\uBDB9\",24],\n[\"9541\",\"\uBDD2\uBDD3\uBDD6\uBDD7\uBDD9\uBDDA\uBDDB\uBDDD\",11,\"\uBDEA\",5,\"\uBDF1\"],\n[\"9561\",\"\uBDF2\uBDF3\uBDF5\uBDF6\uBDF7\uBDF9\",6,\"\uBE01\uBE02\uBE04\uBE06\",5,\"\uBE0E\uBE0F\uBE11\uBE12\uBE13\"],\n[\"9581\",\"\uBE15\",6,\"\uBE1E\uBE20\",35,\"\uBE46\uBE47\uBE49\uBE4A\uBE4B\uBE4D\uBE4F\",4,\"\uBE56\uBE58\uBE5C\uBE5D\uBE5E\uBE5F\uBE62\uBE63\uBE65\uBE66\uBE67\uBE69\uBE6B\",4,\"\uBE72\uBE76\",4,\"\uBE7E\uBE7F\uBE81\uBE82\uBE83\uBE85\",6,\"\uBE8E\uBE92\",5,\"\uBE9A\",13,\"\uBEA9\",14],\n[\"9641\",\"\uBEB8\",23,\"\uBED2\uBED3\"],\n[\"9661\",\"\uBED5\uBED6\uBED9\",6,\"\uBEE1\uBEE2\uBEE6\",5,\"\uBEED\",8],\n[\"9681\",\"\uBEF6\",10,\"\uBF02\",5,\"\uBF0A\",13,\"\uBF1A\uBF1E\",33,\"\uBF42\uBF43\uBF45\uBF46\uBF47\uBF49\",6,\"\uBF52\uBF53\uBF54\uBF56\",44],\n[\"9741\",\"\uBF83\",16,\"\uBF95\",8],\n[\"9761\",\"\uBF9E\",17,\"\uBFB1\",7],\n[\"9781\",\"\uBFB9\",11,\"\uBFC6\",5,\"\uBFCE\uBFCF\uBFD1\uBFD2\uBFD3\uBFD5\",6,\"\uBFDD\uBFDE\uBFE0\uBFE2\",89,\"\uC03D\uC03E\uC03F\"],\n[\"9841\",\"\uC040\",16,\"\uC052\",5,\"\uC059\uC05A\uC05B\"],\n[\"9861\",\"\uC05D\uC05E\uC05F\uC061\",6,\"\uC06A\",15],\n[\"9881\",\"\uC07A\",21,\"\uC092\uC093\uC095\uC096\uC097\uC099\",6,\"\uC0A2\uC0A4\uC0A6\",5,\"\uC0AE\uC0B1\uC0B2\uC0B7\",4,\"\uC0BE\uC0C2\uC0C3\uC0C4\uC0C6\uC0C7\uC0CA\uC0CB\uC0CD\uC0CE\uC0CF\uC0D1\",6,\"\uC0DA\uC0DE\",5,\"\uC0E6\uC0E7\uC0E9\uC0EA\uC0EB\uC0ED\",6,\"\uC0F6\uC0F8\uC0FA\",5,\"\uC101\uC102\uC103\uC105\uC106\uC107\uC109\",6,\"\uC111\uC112\uC113\uC114\uC116\",5,\"\uC121\uC122\uC125\uC128\uC129\uC12A\uC12B\uC12E\"],\n[\"9941\",\"\uC132\uC133\uC134\uC135\uC137\uC13A\uC13B\uC13D\uC13E\uC13F\uC141\",6,\"\uC14A\uC14E\",5,\"\uC156\uC157\"],\n[\"9961\",\"\uC159\uC15A\uC15B\uC15D\",6,\"\uC166\uC16A\",5,\"\uC171\uC172\uC173\uC175\uC176\uC177\uC179\uC17A\uC17B\"],\n[\"9981\",\"\uC17C\",8,\"\uC186\",5,\"\uC18F\uC191\uC192\uC193\uC195\uC197\",4,\"\uC19E\uC1A0\uC1A2\uC1A3\uC1A4\uC1A6\uC1A7\uC1AA\uC1AB\uC1AD\uC1AE\uC1AF\uC1B1\",11,\"\uC1BE\",5,\"\uC1C5\uC1C6\uC1C7\uC1C9\uC1CA\uC1CB\uC1CD\",6,\"\uC1D5\uC1D6\uC1D9\",6,\"\uC1E1\uC1E2\uC1E3\uC1E5\uC1E6\uC1E7\uC1E9\",6,\"\uC1F2\uC1F4\",7,\"\uC1FE\uC1FF\uC201\uC202\uC203\uC205\",6,\"\uC20E\uC210\uC212\",5,\"\uC21A\uC21B\uC21D\uC21E\uC221\uC222\uC223\"],\n[\"9a41\",\"\uC224\uC225\uC226\uC227\uC22A\uC22C\uC22E\uC230\uC233\uC235\",16],\n[\"9a61\",\"\uC246\uC247\uC249\",6,\"\uC252\uC253\uC255\uC256\uC257\uC259\",6,\"\uC261\uC262\uC263\uC264\uC266\"],\n[\"9a81\",\"\uC267\",4,\"\uC26E\uC26F\uC271\uC272\uC273\uC275\",6,\"\uC27E\uC280\uC282\",5,\"\uC28A\",5,\"\uC291\",6,\"\uC299\uC29A\uC29C\uC29E\",5,\"\uC2A6\uC2A7\uC2A9\uC2AA\uC2AB\uC2AE\",5,\"\uC2B6\uC2B8\uC2BA\",33,\"\uC2DE\uC2DF\uC2E1\uC2E2\uC2E5\",5,\"\uC2EE\uC2F0\uC2F2\uC2F3\uC2F4\uC2F5\uC2F7\uC2FA\uC2FD\uC2FE\uC2FF\uC301\",6,\"\uC30A\uC30B\uC30E\uC30F\"],\n[\"9b41\",\"\uC310\uC311\uC312\uC316\uC317\uC319\uC31A\uC31B\uC31D\",6,\"\uC326\uC327\uC32A\",8],\n[\"9b61\",\"\uC333\",17,\"\uC346\",7],\n[\"9b81\",\"\uC34E\",25,\"\uC36A\uC36B\uC36D\uC36E\uC36F\uC371\uC373\",4,\"\uC37A\uC37B\uC37E\",5,\"\uC385\uC386\uC387\uC389\uC38A\uC38B\uC38D\",50,\"\uC3C1\",22,\"\uC3DA\"],\n[\"9c41\",\"\uC3DB\uC3DD\uC3DE\uC3E1\uC3E3\",4,\"\uC3EA\uC3EB\uC3EC\uC3EE\",5,\"\uC3F6\uC3F7\uC3F9\",5],\n[\"9c61\",\"\uC3FF\",8,\"\uC409\",6,\"\uC411\",9],\n[\"9c81\",\"\uC41B\",8,\"\uC425\",6,\"\uC42D\uC42E\uC42F\uC431\uC432\uC433\uC435\",6,\"\uC43E\",9,\"\uC449\",26,\"\uC466\uC467\uC469\uC46A\uC46B\uC46D\",6,\"\uC476\uC477\uC478\uC47A\",5,\"\uC481\",18,\"\uC495\",6,\"\uC49D\",12],\n[\"9d41\",\"\uC4AA\",13,\"\uC4B9\uC4BA\uC4BB\uC4BD\",8],\n[\"9d61\",\"\uC4C6\",25],\n[\"9d81\",\"\uC4E0\",8,\"\uC4EA\",5,\"\uC4F2\uC4F3\uC4F5\uC4F6\uC4F7\uC4F9\uC4FB\uC4FC\uC4FD\uC4FE\uC502\",9,\"\uC50D\uC50E\uC50F\uC511\uC512\uC513\uC515\",6,\"\uC51D\",10,\"\uC52A\uC52B\uC52D\uC52E\uC52F\uC531\",6,\"\uC53A\uC53C\uC53E\",5,\"\uC546\uC547\uC54B\uC54F\uC550\uC551\uC552\uC556\uC55A\uC55B\uC55C\uC55F\uC562\uC563\uC565\uC566\uC567\uC569\",6,\"\uC572\uC576\",5,\"\uC57E\uC57F\uC581\uC582\uC583\uC585\uC586\uC588\uC589\uC58A\uC58B\uC58E\uC590\uC592\uC593\uC594\"],\n[\"9e41\",\"\uC596\uC599\uC59A\uC59B\uC59D\uC59E\uC59F\uC5A1\",7,\"\uC5AA\",9,\"\uC5B6\"],\n[\"9e61\",\"\uC5B7\uC5BA\uC5BF\",4,\"\uC5CB\uC5CD\uC5CF\uC5D2\uC5D3\uC5D5\uC5D6\uC5D7\uC5D9\",6,\"\uC5E2\uC5E4\uC5E6\uC5E7\"],\n[\"9e81\",\"\uC5E8\uC5E9\uC5EA\uC5EB\uC5EF\uC5F1\uC5F2\uC5F3\uC5F5\uC5F8\uC5F9\uC5FA\uC5FB\uC602\uC603\uC604\uC609\uC60A\uC60B\uC60D\uC60E\uC60F\uC611\",6,\"\uC61A\uC61D\",6,\"\uC626\uC627\uC629\uC62A\uC62B\uC62F\uC631\uC632\uC636\uC638\uC63A\uC63C\uC63D\uC63E\uC63F\uC642\uC643\uC645\uC646\uC647\uC649\",6,\"\uC652\uC656\",5,\"\uC65E\uC65F\uC661\",10,\"\uC66D\uC66E\uC670\uC672\",5,\"\uC67A\uC67B\uC67D\uC67E\uC67F\uC681\",6,\"\uC68A\uC68C\uC68E\",5,\"\uC696\uC697\uC699\uC69A\uC69B\uC69D\",6,\"\uC6A6\"],\n[\"9f41\",\"\uC6A8\uC6AA\",5,\"\uC6B2\uC6B3\uC6B5\uC6B6\uC6B7\uC6BB\",4,\"\uC6C2\uC6C4\uC6C6\",5,\"\uC6CE\"],\n[\"9f61\",\"\uC6CF\uC6D1\uC6D2\uC6D3\uC6D5\",6,\"\uC6DE\uC6DF\uC6E2\",5,\"\uC6EA\uC6EB\uC6ED\uC6EE\uC6EF\uC6F1\uC6F2\"],\n[\"9f81\",\"\uC6F3\",4,\"\uC6FA\uC6FB\uC6FC\uC6FE\",5,\"\uC706\uC707\uC709\uC70A\uC70B\uC70D\",6,\"\uC716\uC718\uC71A\",5,\"\uC722\uC723\uC725\uC726\uC727\uC729\",6,\"\uC732\uC734\uC736\uC738\uC739\uC73A\uC73B\uC73E\uC73F\uC741\uC742\uC743\uC745\",4,\"\uC74B\uC74E\uC750\uC759\uC75A\uC75B\uC75D\uC75E\uC75F\uC761\",6,\"\uC769\uC76A\uC76C\",7,\"\uC776\uC777\uC779\uC77A\uC77B\uC77F\uC780\uC781\uC782\uC786\uC78B\uC78C\uC78D\uC78F\uC792\uC793\uC795\uC799\uC79B\",4,\"\uC7A2\uC7A7\",4,\"\uC7AE\uC7AF\uC7B1\uC7B2\uC7B3\uC7B5\uC7B6\uC7B7\"],\n[\"a041\",\"\uC7B8\uC7B9\uC7BA\uC7BB\uC7BE\uC7C2\",5,\"\uC7CA\uC7CB\uC7CD\uC7CF\uC7D1\",6,\"\uC7D9\uC7DA\uC7DB\uC7DC\"],\n[\"a061\",\"\uC7DE\",5,\"\uC7E5\uC7E6\uC7E7\uC7E9\uC7EA\uC7EB\uC7ED\",13],\n[\"a081\",\"\uC7FB\",4,\"\uC802\uC803\uC805\uC806\uC807\uC809\uC80B\",4,\"\uC812\uC814\uC817\",4,\"\uC81E\uC81F\uC821\uC822\uC823\uC825\",6,\"\uC82E\uC830\uC832\",5,\"\uC839\uC83A\uC83B\uC83D\uC83E\uC83F\uC841\",6,\"\uC84A\uC84B\uC84E\",5,\"\uC855\",26,\"\uC872\uC873\uC875\uC876\uC877\uC879\uC87B\",4,\"\uC882\uC884\uC888\uC889\uC88A\uC88E\",5,\"\uC895\",7,\"\uC89E\uC8A0\uC8A2\uC8A3\uC8A4\"],\n[\"a141\",\"\uC8A5\uC8A6\uC8A7\uC8A9\",18,\"\uC8BE\uC8BF\uC8C0\uC8C1\"],\n[\"a161\",\"\uC8C2\uC8C3\uC8C5\uC8C6\uC8C7\uC8C9\uC8CA\uC8CB\uC8CD\",6,\"\uC8D6\uC8D8\uC8DA\",5,\"\uC8E2\uC8E3\uC8E5\"],\n[\"a181\",\"\uC8E6\",14,\"\uC8F6\",5,\"\uC8FE\uC8FF\uC901\uC902\uC903\uC907\",4,\"\uC90E\u3000\u3001\u3002\u00B7\u2025\u2026\u00A8\u3003\u00AD\u2015\u2225\uFF3C\u223C\u2018\u2019\u201C\u201D\u3014\u3015\u3008\",9,\"\u00B1\u00D7\u00F7\u2260\u2264\u2265\u221E\u2234\u00B0\u2032\u2033\u2103\u212B\uFFE0\uFFE1\uFFE5\u2642\u2640\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u00A7\u203B\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u2192\u2190\u2191\u2193\u2194\u3013\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\u2227\u2228\uFFE2\"],\n[\"a241\",\"\uC910\uC912\",5,\"\uC919\",18],\n[\"a261\",\"\uC92D\",6,\"\uC935\",18],\n[\"a281\",\"\uC948\",7,\"\uC952\uC953\uC955\uC956\uC957\uC959\",6,\"\uC962\uC964\",7,\"\uC96D\uC96E\uC96F\u21D2\u21D4\u2200\u2203\u00B4\uFF5E\u02C7\u02D8\u02DD\u02DA\u02D9\u00B8\u02DB\u00A1\u00BF\u02D0\u222E\u2211\u220F\u00A4\u2109\u2030\u25C1\u25C0\u25B7\u25B6\u2664\u2660\u2661\u2665\u2667\u2663\u2299\u25C8\u25A3\u25D0\u25D1\u2592\u25A4\u25A5\u25A8\u25A7\u25A6\u25A9\u2668\u260F\u260E\u261C\u261E\u00B6\u2020\u2021\u2195\u2197\u2199\u2196\u2198\u266D\u2669\u266A\u266C\u327F\u321C\u2116\u33C7\u2122\u33C2\u33D8\u2121\u20AC\u00AE\"],\n[\"a341\",\"\uC971\uC972\uC973\uC975\",6,\"\uC97D\",10,\"\uC98A\uC98B\uC98D\uC98E\uC98F\"],\n[\"a361\",\"\uC991\",6,\"\uC99A\uC99C\uC99E\",16],\n[\"a381\",\"\uC9AF\",16,\"\uC9C2\uC9C3\uC9C5\uC9C6\uC9C9\uC9CB\",4,\"\uC9D2\uC9D4\uC9D7\uC9D8\uC9DB\uFF01\",58,\"\uFFE6\uFF3D\",32,\"\uFFE3\"],\n[\"a441\",\"\uC9DE\uC9DF\uC9E1\uC9E3\uC9E5\uC9E6\uC9E8\uC9E9\uC9EA\uC9EB\uC9EE\uC9F2\",5,\"\uC9FA\uC9FB\uC9FD\uC9FE\uC9FF\uCA01\uCA02\uCA03\uCA04\"],\n[\"a461\",\"\uCA05\uCA06\uCA07\uCA0A\uCA0E\",5,\"\uCA15\uCA16\uCA17\uCA19\",12],\n[\"a481\",\"\uCA26\uCA27\uCA28\uCA2A\",28,\"\u3131\",93],\n[\"a541\",\"\uCA47\",4,\"\uCA4E\uCA4F\uCA51\uCA52\uCA53\uCA55\",6,\"\uCA5E\uCA62\",5,\"\uCA69\uCA6A\"],\n[\"a561\",\"\uCA6B\",17,\"\uCA7E\",5,\"\uCA85\uCA86\"],\n[\"a581\",\"\uCA87\",16,\"\uCA99\",14,\"\u2170\",9],\n[\"a5b0\",\"\u2160\",9],\n[\"a5c1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a5e1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a641\",\"\uCAA8\",19,\"\uCABE\uCABF\uCAC1\uCAC2\uCAC3\uCAC5\"],\n[\"a661\",\"\uCAC6\",5,\"\uCACE\uCAD0\uCAD2\uCAD4\uCAD5\uCAD6\uCAD7\uCADA\",5,\"\uCAE1\",6],\n[\"a681\",\"\uCAE8\uCAE9\uCAEA\uCAEB\uCAED\",6,\"\uCAF5\",18,\"\uCB09\uCB0A\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\u2512\u2511\u251A\u2519\u2516\u2515\u250E\u250D\u251E\u251F\u2521\u2522\u2526\u2527\u2529\u252A\u252D\u252E\u2531\u2532\u2535\u2536\u2539\u253A\u253D\u253E\u2540\u2541\u2543\",7],\n[\"a741\",\"\uCB0B\",4,\"\uCB11\uCB12\uCB13\uCB15\uCB16\uCB17\uCB19\",6,\"\uCB22\",7],\n[\"a761\",\"\uCB2A\",22,\"\uCB42\uCB43\uCB44\"],\n[\"a781\",\"\uCB45\uCB46\uCB47\uCB4A\uCB4B\uCB4D\uCB4E\uCB4F\uCB51\",6,\"\uCB5A\uCB5B\uCB5C\uCB5E\",5,\"\uCB65\",7,\"\u3395\u3396\u3397\u2113\u3398\u33C4\u33A3\u33A4\u33A5\u33A6\u3399\",9,\"\u33CA\u338D\u338E\u338F\u33CF\u3388\u3389\u33C8\u33A7\u33A8\u33B0\",9,\"\u3380\",4,\"\u33BA\",5,\"\u3390\",4,\"\u2126\u33C0\u33C1\u338A\u338B\u338C\u33D6\u33C5\u33AD\u33AE\u33AF\u33DB\u33A9\u33AA\u33AB\u33AC\u33DD\u33D0\u33D3\u33C3\u33C9\u33DC\u33C6\"],\n[\"a841\",\"\uCB6D\",10,\"\uCB7A\",14],\n[\"a861\",\"\uCB89\",18,\"\uCB9D\",6],\n[\"a881\",\"\uCBA4\",19,\"\uCBB9\",11,\"\u00C6\u00D0\u00AA\u0126\"],\n[\"a8a6\",\"\u0132\"],\n[\"a8a8\",\"\u013F\u0141\u00D8\u0152\u00BA\u00DE\u0166\u014A\"],\n[\"a8b1\",\"\u3260\",27,\"\u24D0\",25,\"\u2460\",14,\"\u00BD\u2153\u2154\u00BC\u00BE\u215B\u215C\u215D\u215E\"],\n[\"a941\",\"\uCBC5\",14,\"\uCBD5\",10],\n[\"a961\",\"\uCBE0\uCBE1\uCBE2\uCBE3\uCBE5\uCBE6\uCBE8\uCBEA\",18],\n[\"a981\",\"\uCBFD\",14,\"\uCC0E\uCC0F\uCC11\uCC12\uCC13\uCC15\",6,\"\uCC1E\uCC1F\uCC20\uCC23\uCC24\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0140\u0142\u00F8\u0153\u00DF\u00FE\u0167\u014B\u0149\u3200\",27,\"\u249C\",25,\"\u2474\",14,\"\u00B9\u00B2\u00B3\u2074\u207F\u2081\u2082\u2083\u2084\"],\n[\"aa41\",\"\uCC25\uCC26\uCC2A\uCC2B\uCC2D\uCC2F\uCC31\",6,\"\uCC3A\uCC3F\",4,\"\uCC46\uCC47\uCC49\uCC4A\uCC4B\uCC4D\uCC4E\"],\n[\"aa61\",\"\uCC4F\",4,\"\uCC56\uCC5A\",5,\"\uCC61\uCC62\uCC63\uCC65\uCC67\uCC69\",6,\"\uCC71\uCC72\"],\n[\"aa81\",\"\uCC73\uCC74\uCC76\",29,\"\u3041\",82],\n[\"ab41\",\"\uCC94\uCC95\uCC96\uCC97\uCC9A\uCC9B\uCC9D\uCC9E\uCC9F\uCCA1\",6,\"\uCCAA\uCCAE\",5,\"\uCCB6\uCCB7\uCCB9\"],\n[\"ab61\",\"\uCCBA\uCCBB\uCCBD\",6,\"\uCCC6\uCCC8\uCCCA\",5,\"\uCCD1\uCCD2\uCCD3\uCCD5\",5],\n[\"ab81\",\"\uCCDB\",8,\"\uCCE5\",6,\"\uCCED\uCCEE\uCCEF\uCCF1\",12,\"\u30A1\",85],\n[\"ac41\",\"\uCCFE\uCCFF\uCD00\uCD02\",5,\"\uCD0A\uCD0B\uCD0D\uCD0E\uCD0F\uCD11\",6,\"\uCD1A\uCD1C\uCD1E\uCD1F\uCD20\"],\n[\"ac61\",\"\uCD21\uCD22\uCD23\uCD25\uCD26\uCD27\uCD29\uCD2A\uCD2B\uCD2D\",11,\"\uCD3A\",4],\n[\"ac81\",\"\uCD3F\",28,\"\uCD5D\uCD5E\uCD5F\u0410\",5,\"\u0401\u0416\",25],\n[\"acd1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"ad41\",\"\uCD61\uCD62\uCD63\uCD65\",6,\"\uCD6E\uCD70\uCD72\",5,\"\uCD79\",7],\n[\"ad61\",\"\uCD81\",6,\"\uCD89\",10,\"\uCD96\uCD97\uCD99\uCD9A\uCD9B\uCD9D\uCD9E\uCD9F\"],\n[\"ad81\",\"\uCDA0\uCDA1\uCDA2\uCDA3\uCDA6\uCDA8\uCDAA\",5,\"\uCDB1\",18,\"\uCDC5\"],\n[\"ae41\",\"\uCDC6\",5,\"\uCDCD\uCDCE\uCDCF\uCDD1\",16],\n[\"ae61\",\"\uCDE2\",5,\"\uCDE9\uCDEA\uCDEB\uCDED\uCDEE\uCDEF\uCDF1\",6,\"\uCDFA\uCDFC\uCDFE\",4],\n[\"ae81\",\"\uCE03\uCE05\uCE06\uCE07\uCE09\uCE0A\uCE0B\uCE0D\",6,\"\uCE15\uCE16\uCE17\uCE18\uCE1A\",5,\"\uCE22\uCE23\uCE25\uCE26\uCE27\uCE29\uCE2A\uCE2B\"],\n[\"af41\",\"\uCE2C\uCE2D\uCE2E\uCE2F\uCE32\uCE34\uCE36\",19],\n[\"af61\",\"\uCE4A\",13,\"\uCE5A\uCE5B\uCE5D\uCE5E\uCE62\",5,\"\uCE6A\uCE6C\"],\n[\"af81\",\"\uCE6E\",5,\"\uCE76\uCE77\uCE79\uCE7A\uCE7B\uCE7D\",6,\"\uCE86\uCE88\uCE8A\",5,\"\uCE92\uCE93\uCE95\uCE96\uCE97\uCE99\"],\n[\"b041\",\"\uCE9A\",5,\"\uCEA2\uCEA6\",5,\"\uCEAE\",12],\n[\"b061\",\"\uCEBB\",5,\"\uCEC2\",19],\n[\"b081\",\"\uCED6\",13,\"\uCEE6\uCEE7\uCEE9\uCEEA\uCEED\",6,\"\uCEF6\uCEFA\",5,\"\uAC00\uAC01\uAC04\uAC07\uAC08\uAC09\uAC0A\uAC10\",7,\"\uAC19\",4,\"\uAC20\uAC24\uAC2C\uAC2D\uAC2F\uAC30\uAC31\uAC38\uAC39\uAC3C\uAC40\uAC4B\uAC4D\uAC54\uAC58\uAC5C\uAC70\uAC71\uAC74\uAC77\uAC78\uAC7A\uAC80\uAC81\uAC83\uAC84\uAC85\uAC86\uAC89\uAC8A\uAC8B\uAC8C\uAC90\uAC94\uAC9C\uAC9D\uAC9F\uACA0\uACA1\uACA8\uACA9\uACAA\uACAC\uACAF\uACB0\uACB8\uACB9\uACBB\uACBC\uACBD\uACC1\uACC4\uACC8\uACCC\uACD5\uACD7\uACE0\uACE1\uACE4\uACE7\uACE8\uACEA\uACEC\uACEF\uACF0\uACF1\uACF3\uACF5\uACF6\uACFC\uACFD\uAD00\uAD04\uAD06\"],\n[\"b141\",\"\uCF02\uCF03\uCF05\uCF06\uCF07\uCF09\",6,\"\uCF12\uCF14\uCF16\",5,\"\uCF1D\uCF1E\uCF1F\uCF21\uCF22\uCF23\"],\n[\"b161\",\"\uCF25\",6,\"\uCF2E\uCF32\",5,\"\uCF39\",11],\n[\"b181\",\"\uCF45\",14,\"\uCF56\uCF57\uCF59\uCF5A\uCF5B\uCF5D\",6,\"\uCF66\uCF68\uCF6A\uCF6B\uCF6C\uAD0C\uAD0D\uAD0F\uAD11\uAD18\uAD1C\uAD20\uAD29\uAD2C\uAD2D\uAD34\uAD35\uAD38\uAD3C\uAD44\uAD45\uAD47\uAD49\uAD50\uAD54\uAD58\uAD61\uAD63\uAD6C\uAD6D\uAD70\uAD73\uAD74\uAD75\uAD76\uAD7B\uAD7C\uAD7D\uAD7F\uAD81\uAD82\uAD88\uAD89\uAD8C\uAD90\uAD9C\uAD9D\uADA4\uADB7\uADC0\uADC1\uADC4\uADC8\uADD0\uADD1\uADD3\uADDC\uADE0\uADE4\uADF8\uADF9\uADFC\uADFF\uAE00\uAE01\uAE08\uAE09\uAE0B\uAE0D\uAE14\uAE30\uAE31\uAE34\uAE37\uAE38\uAE3A\uAE40\uAE41\uAE43\uAE45\uAE46\uAE4A\uAE4C\uAE4D\uAE4E\uAE50\uAE54\uAE56\uAE5C\uAE5D\uAE5F\uAE60\uAE61\uAE65\uAE68\uAE69\uAE6C\uAE70\uAE78\"],\n[\"b241\",\"\uCF6D\uCF6E\uCF6F\uCF72\uCF73\uCF75\uCF76\uCF77\uCF79\",6,\"\uCF81\uCF82\uCF83\uCF84\uCF86\",5,\"\uCF8D\"],\n[\"b261\",\"\uCF8E\",18,\"\uCFA2\",5,\"\uCFA9\"],\n[\"b281\",\"\uCFAA\",5,\"\uCFB1\",18,\"\uCFC5\",6,\"\uAE79\uAE7B\uAE7C\uAE7D\uAE84\uAE85\uAE8C\uAEBC\uAEBD\uAEBE\uAEC0\uAEC4\uAECC\uAECD\uAECF\uAED0\uAED1\uAED8\uAED9\uAEDC\uAEE8\uAEEB\uAEED\uAEF4\uAEF8\uAEFC\uAF07\uAF08\uAF0D\uAF10\uAF2C\uAF2D\uAF30\uAF32\uAF34\uAF3C\uAF3D\uAF3F\uAF41\uAF42\uAF43\uAF48\uAF49\uAF50\uAF5C\uAF5D\uAF64\uAF65\uAF79\uAF80\uAF84\uAF88\uAF90\uAF91\uAF95\uAF9C\uAFB8\uAFB9\uAFBC\uAFC0\uAFC7\uAFC8\uAFC9\uAFCB\uAFCD\uAFCE\uAFD4\uAFDC\uAFE8\uAFE9\uAFF0\uAFF1\uAFF4\uAFF8\uB000\uB001\uB004\uB00C\uB010\uB014\uB01C\uB01D\uB028\uB044\uB045\uB048\uB04A\uB04C\uB04E\uB053\uB054\uB055\uB057\uB059\"],\n[\"b341\",\"\uCFCC\",19,\"\uCFE2\uCFE3\uCFE5\uCFE6\uCFE7\uCFE9\"],\n[\"b361\",\"\uCFEA\",5,\"\uCFF2\uCFF4\uCFF6\",5,\"\uCFFD\uCFFE\uCFFF\uD001\uD002\uD003\uD005\",5],\n[\"b381\",\"\uD00B\",5,\"\uD012\",5,\"\uD019\",19,\"\uB05D\uB07C\uB07D\uB080\uB084\uB08C\uB08D\uB08F\uB091\uB098\uB099\uB09A\uB09C\uB09F\uB0A0\uB0A1\uB0A2\uB0A8\uB0A9\uB0AB\",4,\"\uB0B1\uB0B3\uB0B4\uB0B5\uB0B8\uB0BC\uB0C4\uB0C5\uB0C7\uB0C8\uB0C9\uB0D0\uB0D1\uB0D4\uB0D8\uB0E0\uB0E5\uB108\uB109\uB10B\uB10C\uB110\uB112\uB113\uB118\uB119\uB11B\uB11C\uB11D\uB123\uB124\uB125\uB128\uB12C\uB134\uB135\uB137\uB138\uB139\uB140\uB141\uB144\uB148\uB150\uB151\uB154\uB155\uB158\uB15C\uB160\uB178\uB179\uB17C\uB180\uB182\uB188\uB189\uB18B\uB18D\uB192\uB193\uB194\uB198\uB19C\uB1A8\uB1CC\uB1D0\uB1D4\uB1DC\uB1DD\"],\n[\"b441\",\"\uD02E\",5,\"\uD036\uD037\uD039\uD03A\uD03B\uD03D\",6,\"\uD046\uD048\uD04A\",5],\n[\"b461\",\"\uD051\uD052\uD053\uD055\uD056\uD057\uD059\",6,\"\uD061\",10,\"\uD06E\uD06F\"],\n[\"b481\",\"\uD071\uD072\uD073\uD075\",6,\"\uD07E\uD07F\uD080\uD082\",18,\"\uB1DF\uB1E8\uB1E9\uB1EC\uB1F0\uB1F9\uB1FB\uB1FD\uB204\uB205\uB208\uB20B\uB20C\uB214\uB215\uB217\uB219\uB220\uB234\uB23C\uB258\uB25C\uB260\uB268\uB269\uB274\uB275\uB27C\uB284\uB285\uB289\uB290\uB291\uB294\uB298\uB299\uB29A\uB2A0\uB2A1\uB2A3\uB2A5\uB2A6\uB2AA\uB2AC\uB2B0\uB2B4\uB2C8\uB2C9\uB2CC\uB2D0\uB2D2\uB2D8\uB2D9\uB2DB\uB2DD\uB2E2\uB2E4\uB2E5\uB2E6\uB2E8\uB2EB\",4,\"\uB2F3\uB2F4\uB2F5\uB2F7\",4,\"\uB2FF\uB300\uB301\uB304\uB308\uB310\uB311\uB313\uB314\uB315\uB31C\uB354\uB355\uB356\uB358\uB35B\uB35C\uB35E\uB35F\uB364\uB365\"],\n[\"b541\",\"\uD095\",14,\"\uD0A6\uD0A7\uD0A9\uD0AA\uD0AB\uD0AD\",5],\n[\"b561\",\"\uD0B3\uD0B6\uD0B8\uD0BA\",5,\"\uD0C2\uD0C3\uD0C5\uD0C6\uD0C7\uD0CA\",5,\"\uD0D2\uD0D6\",4],\n[\"b581\",\"\uD0DB\uD0DE\uD0DF\uD0E1\uD0E2\uD0E3\uD0E5\",6,\"\uD0EE\uD0F2\",5,\"\uD0F9\",11,\"\uB367\uB369\uB36B\uB36E\uB370\uB371\uB374\uB378\uB380\uB381\uB383\uB384\uB385\uB38C\uB390\uB394\uB3A0\uB3A1\uB3A8\uB3AC\uB3C4\uB3C5\uB3C8\uB3CB\uB3CC\uB3CE\uB3D0\uB3D4\uB3D5\uB3D7\uB3D9\uB3DB\uB3DD\uB3E0\uB3E4\uB3E8\uB3FC\uB410\uB418\uB41C\uB420\uB428\uB429\uB42B\uB434\uB450\uB451\uB454\uB458\uB460\uB461\uB463\uB465\uB46C\uB480\uB488\uB49D\uB4A4\uB4A8\uB4AC\uB4B5\uB4B7\uB4B9\uB4C0\uB4C4\uB4C8\uB4D0\uB4D5\uB4DC\uB4DD\uB4E0\uB4E3\uB4E4\uB4E6\uB4EC\uB4ED\uB4EF\uB4F1\uB4F8\uB514\uB515\uB518\uB51B\uB51C\uB524\uB525\uB527\uB528\uB529\uB52A\uB530\uB531\uB534\uB538\"],\n[\"b641\",\"\uD105\",7,\"\uD10E\",17],\n[\"b661\",\"\uD120\",15,\"\uD132\uD133\uD135\uD136\uD137\uD139\uD13B\uD13C\uD13D\uD13E\"],\n[\"b681\",\"\uD13F\uD142\uD146\",5,\"\uD14E\uD14F\uD151\uD152\uD153\uD155\",6,\"\uD15E\uD160\uD162\",5,\"\uD169\uD16A\uD16B\uD16D\uB540\uB541\uB543\uB544\uB545\uB54B\uB54C\uB54D\uB550\uB554\uB55C\uB55D\uB55F\uB560\uB561\uB5A0\uB5A1\uB5A4\uB5A8\uB5AA\uB5AB\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5\uB5BB\uB5BC\uB5BD\uB5C0\uB5C4\uB5CC\uB5CD\uB5CF\uB5D0\uB5D1\uB5D8\uB5EC\uB610\uB611\uB614\uB618\uB625\uB62C\uB634\uB648\uB664\uB668\uB69C\uB69D\uB6A0\uB6A4\uB6AB\uB6AC\uB6B1\uB6D4\uB6F0\uB6F4\uB6F8\uB700\uB701\uB705\uB728\uB729\uB72C\uB72F\uB730\uB738\uB739\uB73B\uB744\uB748\uB74C\uB754\uB755\uB760\uB764\uB768\uB770\uB771\uB773\uB775\uB77C\uB77D\uB780\uB784\uB78C\uB78D\uB78F\uB790\uB791\uB792\uB796\uB797\"],\n[\"b741\",\"\uD16E\",13,\"\uD17D\",6,\"\uD185\uD186\uD187\uD189\uD18A\"],\n[\"b761\",\"\uD18B\",20,\"\uD1A2\uD1A3\uD1A5\uD1A6\uD1A7\"],\n[\"b781\",\"\uD1A9\",6,\"\uD1B2\uD1B4\uD1B6\uD1B7\uD1B8\uD1B9\uD1BB\uD1BD\uD1BE\uD1BF\uD1C1\",14,\"\uB798\uB799\uB79C\uB7A0\uB7A8\uB7A9\uB7AB\uB7AC\uB7AD\uB7B4\uB7B5\uB7B8\uB7C7\uB7C9\uB7EC\uB7ED\uB7F0\uB7F4\uB7FC\uB7FD\uB7FF\uB800\uB801\uB807\uB808\uB809\uB80C\uB810\uB818\uB819\uB81B\uB81D\uB824\uB825\uB828\uB82C\uB834\uB835\uB837\uB838\uB839\uB840\uB844\uB851\uB853\uB85C\uB85D\uB860\uB864\uB86C\uB86D\uB86F\uB871\uB878\uB87C\uB88D\uB8A8\uB8B0\uB8B4\uB8B8\uB8C0\uB8C1\uB8C3\uB8C5\uB8CC\uB8D0\uB8D4\uB8DD\uB8DF\uB8E1\uB8E8\uB8E9\uB8EC\uB8F0\uB8F8\uB8F9\uB8FB\uB8FD\uB904\uB918\uB920\uB93C\uB93D\uB940\uB944\uB94C\uB94F\uB951\uB958\uB959\uB95C\uB960\uB968\uB969\"],\n[\"b841\",\"\uD1D0\",7,\"\uD1D9\",17],\n[\"b861\",\"\uD1EB\",8,\"\uD1F5\uD1F6\uD1F7\uD1F9\",13],\n[\"b881\",\"\uD208\uD20A\",5,\"\uD211\",24,\"\uB96B\uB96D\uB974\uB975\uB978\uB97C\uB984\uB985\uB987\uB989\uB98A\uB98D\uB98E\uB9AC\uB9AD\uB9B0\uB9B4\uB9BC\uB9BD\uB9BF\uB9C1\uB9C8\uB9C9\uB9CC\uB9CE\",4,\"\uB9D8\uB9D9\uB9DB\uB9DD\uB9DE\uB9E1\uB9E3\uB9E4\uB9E5\uB9E8\uB9EC\uB9F4\uB9F5\uB9F7\uB9F8\uB9F9\uB9FA\uBA00\uBA01\uBA08\uBA15\uBA38\uBA39\uBA3C\uBA40\uBA42\uBA48\uBA49\uBA4B\uBA4D\uBA4E\uBA53\uBA54\uBA55\uBA58\uBA5C\uBA64\uBA65\uBA67\uBA68\uBA69\uBA70\uBA71\uBA74\uBA78\uBA83\uBA84\uBA85\uBA87\uBA8C\uBAA8\uBAA9\uBAAB\uBAAC\uBAB0\uBAB2\uBAB8\uBAB9\uBABB\uBABD\uBAC4\uBAC8\uBAD8\uBAD9\uBAFC\"],\n[\"b941\",\"\uD22A\uD22B\uD22E\uD22F\uD231\uD232\uD233\uD235\",6,\"\uD23E\uD240\uD242\",5,\"\uD249\uD24A\uD24B\uD24C\"],\n[\"b961\",\"\uD24D\",14,\"\uD25D\",6,\"\uD265\uD266\uD267\uD268\"],\n[\"b981\",\"\uD269\",22,\"\uD282\uD283\uD285\uD286\uD287\uD289\uD28A\uD28B\uD28C\uBB00\uBB04\uBB0D\uBB0F\uBB11\uBB18\uBB1C\uBB20\uBB29\uBB2B\uBB34\uBB35\uBB36\uBB38\uBB3B\uBB3C\uBB3D\uBB3E\uBB44\uBB45\uBB47\uBB49\uBB4D\uBB4F\uBB50\uBB54\uBB58\uBB61\uBB63\uBB6C\uBB88\uBB8C\uBB90\uBBA4\uBBA8\uBBAC\uBBB4\uBBB7\uBBC0\uBBC4\uBBC8\uBBD0\uBBD3\uBBF8\uBBF9\uBBFC\uBBFF\uBC00\uBC02\uBC08\uBC09\uBC0B\uBC0C\uBC0D\uBC0F\uBC11\uBC14\",4,\"\uBC1B\",4,\"\uBC24\uBC25\uBC27\uBC29\uBC2D\uBC30\uBC31\uBC34\uBC38\uBC40\uBC41\uBC43\uBC44\uBC45\uBC49\uBC4C\uBC4D\uBC50\uBC5D\uBC84\uBC85\uBC88\uBC8B\uBC8C\uBC8E\uBC94\uBC95\uBC97\"],\n[\"ba41\",\"\uD28D\uD28E\uD28F\uD292\uD293\uD294\uD296\",5,\"\uD29D\uD29E\uD29F\uD2A1\uD2A2\uD2A3\uD2A5\",6,\"\uD2AD\"],\n[\"ba61\",\"\uD2AE\uD2AF\uD2B0\uD2B2\",5,\"\uD2BA\uD2BB\uD2BD\uD2BE\uD2C1\uD2C3\",4,\"\uD2CA\uD2CC\",5],\n[\"ba81\",\"\uD2D2\uD2D3\uD2D5\uD2D6\uD2D7\uD2D9\uD2DA\uD2DB\uD2DD\",6,\"\uD2E6\",9,\"\uD2F2\uD2F3\uD2F5\uD2F6\uD2F7\uD2F9\uD2FA\uBC99\uBC9A\uBCA0\uBCA1\uBCA4\uBCA7\uBCA8\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5\uBCBC\uBCBD\uBCC0\uBCC4\uBCCD\uBCCF\uBCD0\uBCD1\uBCD5\uBCD8\uBCDC\uBCF4\uBCF5\uBCF6\uBCF8\uBCFC\uBD04\uBD05\uBD07\uBD09\uBD10\uBD14\uBD24\uBD2C\uBD40\uBD48\uBD49\uBD4C\uBD50\uBD58\uBD59\uBD64\uBD68\uBD80\uBD81\uBD84\uBD87\uBD88\uBD89\uBD8A\uBD90\uBD91\uBD93\uBD95\uBD99\uBD9A\uBD9C\uBDA4\uBDB0\uBDB8\uBDD4\uBDD5\uBDD8\uBDDC\uBDE9\uBDF0\uBDF4\uBDF8\uBE00\uBE03\uBE05\uBE0C\uBE0D\uBE10\uBE14\uBE1C\uBE1D\uBE1F\uBE44\uBE45\uBE48\uBE4C\uBE4E\uBE54\uBE55\uBE57\uBE59\uBE5A\uBE5B\uBE60\uBE61\uBE64\"],\n[\"bb41\",\"\uD2FB\",4,\"\uD302\uD304\uD306\",5,\"\uD30F\uD311\uD312\uD313\uD315\uD317\",4,\"\uD31E\uD322\uD323\"],\n[\"bb61\",\"\uD324\uD326\uD327\uD32A\uD32B\uD32D\uD32E\uD32F\uD331\",6,\"\uD33A\uD33E\",5,\"\uD346\uD347\uD348\uD349\"],\n[\"bb81\",\"\uD34A\",31,\"\uBE68\uBE6A\uBE70\uBE71\uBE73\uBE74\uBE75\uBE7B\uBE7C\uBE7D\uBE80\uBE84\uBE8C\uBE8D\uBE8F\uBE90\uBE91\uBE98\uBE99\uBEA8\uBED0\uBED1\uBED4\uBED7\uBED8\uBEE0\uBEE3\uBEE4\uBEE5\uBEEC\uBF01\uBF08\uBF09\uBF18\uBF19\uBF1B\uBF1C\uBF1D\uBF40\uBF41\uBF44\uBF48\uBF50\uBF51\uBF55\uBF94\uBFB0\uBFC5\uBFCC\uBFCD\uBFD0\uBFD4\uBFDC\uBFDF\uBFE1\uC03C\uC051\uC058\uC05C\uC060\uC068\uC069\uC090\uC091\uC094\uC098\uC0A0\uC0A1\uC0A3\uC0A5\uC0AC\uC0AD\uC0AF\uC0B0\uC0B3\uC0B4\uC0B5\uC0B6\uC0BC\uC0BD\uC0BF\uC0C0\uC0C1\uC0C5\uC0C8\uC0C9\uC0CC\uC0D0\uC0D8\uC0D9\uC0DB\uC0DC\uC0DD\uC0E4\"],\n[\"bc41\",\"\uD36A\",17,\"\uD37E\uD37F\uD381\uD382\uD383\uD385\uD386\uD387\"],\n[\"bc61\",\"\uD388\uD389\uD38A\uD38B\uD38E\uD392\",5,\"\uD39A\uD39B\uD39D\uD39E\uD39F\uD3A1\",6,\"\uD3AA\uD3AC\uD3AE\"],\n[\"bc81\",\"\uD3AF\",4,\"\uD3B5\uD3B6\uD3B7\uD3B9\uD3BA\uD3BB\uD3BD\",6,\"\uD3C6\uD3C7\uD3CA\",5,\"\uD3D1\",5,\"\uC0E5\uC0E8\uC0EC\uC0F4\uC0F5\uC0F7\uC0F9\uC100\uC104\uC108\uC110\uC115\uC11C\",4,\"\uC123\uC124\uC126\uC127\uC12C\uC12D\uC12F\uC130\uC131\uC136\uC138\uC139\uC13C\uC140\uC148\uC149\uC14B\uC14C\uC14D\uC154\uC155\uC158\uC15C\uC164\uC165\uC167\uC168\uC169\uC170\uC174\uC178\uC185\uC18C\uC18D\uC18E\uC190\uC194\uC196\uC19C\uC19D\uC19F\uC1A1\uC1A5\uC1A8\uC1A9\uC1AC\uC1B0\uC1BD\uC1C4\uC1C8\uC1CC\uC1D4\uC1D7\uC1D8\uC1E0\uC1E4\uC1E8\uC1F0\uC1F1\uC1F3\uC1FC\uC1FD\uC200\uC204\uC20C\uC20D\uC20F\uC211\uC218\uC219\uC21C\uC21F\uC220\uC228\uC229\uC22B\uC22D\"],\n[\"bd41\",\"\uD3D7\uD3D9\",7,\"\uD3E2\uD3E4\",7,\"\uD3EE\uD3EF\uD3F1\uD3F2\uD3F3\uD3F5\uD3F6\uD3F7\"],\n[\"bd61\",\"\uD3F8\uD3F9\uD3FA\uD3FB\uD3FE\uD400\uD402\",5,\"\uD409\",13],\n[\"bd81\",\"\uD417\",5,\"\uD41E\",25,\"\uC22F\uC231\uC232\uC234\uC248\uC250\uC251\uC254\uC258\uC260\uC265\uC26C\uC26D\uC270\uC274\uC27C\uC27D\uC27F\uC281\uC288\uC289\uC290\uC298\uC29B\uC29D\uC2A4\uC2A5\uC2A8\uC2AC\uC2AD\uC2B4\uC2B5\uC2B7\uC2B9\uC2DC\uC2DD\uC2E0\uC2E3\uC2E4\uC2EB\uC2EC\uC2ED\uC2EF\uC2F1\uC2F6\uC2F8\uC2F9\uC2FB\uC2FC\uC300\uC308\uC309\uC30C\uC30D\uC313\uC314\uC315\uC318\uC31C\uC324\uC325\uC328\uC329\uC345\uC368\uC369\uC36C\uC370\uC372\uC378\uC379\uC37C\uC37D\uC384\uC388\uC38C\uC3C0\uC3D8\uC3D9\uC3DC\uC3DF\uC3E0\uC3E2\uC3E8\uC3E9\uC3ED\uC3F4\uC3F5\uC3F8\uC408\uC410\uC424\uC42C\uC430\"],\n[\"be41\",\"\uD438\",7,\"\uD441\uD442\uD443\uD445\",14],\n[\"be61\",\"\uD454\",7,\"\uD45D\uD45E\uD45F\uD461\uD462\uD463\uD465\",7,\"\uD46E\uD470\uD471\uD472\"],\n[\"be81\",\"\uD473\",4,\"\uD47A\uD47B\uD47D\uD47E\uD481\uD483\",4,\"\uD48A\uD48C\uD48E\",5,\"\uD495\",8,\"\uC434\uC43C\uC43D\uC448\uC464\uC465\uC468\uC46C\uC474\uC475\uC479\uC480\uC494\uC49C\uC4B8\uC4BC\uC4E9\uC4F0\uC4F1\uC4F4\uC4F8\uC4FA\uC4FF\uC500\uC501\uC50C\uC510\uC514\uC51C\uC528\uC529\uC52C\uC530\uC538\uC539\uC53B\uC53D\uC544\uC545\uC548\uC549\uC54A\uC54C\uC54D\uC54E\uC553\uC554\uC555\uC557\uC558\uC559\uC55D\uC55E\uC560\uC561\uC564\uC568\uC570\uC571\uC573\uC574\uC575\uC57C\uC57D\uC580\uC584\uC587\uC58C\uC58D\uC58F\uC591\uC595\uC597\uC598\uC59C\uC5A0\uC5A9\uC5B4\uC5B5\uC5B8\uC5B9\uC5BB\uC5BC\uC5BD\uC5BE\uC5C4\",6,\"\uC5CC\uC5CE\"],\n[\"bf41\",\"\uD49E\",10,\"\uD4AA\",14],\n[\"bf61\",\"\uD4B9\",18,\"\uD4CD\uD4CE\uD4CF\uD4D1\uD4D2\uD4D3\uD4D5\"],\n[\"bf81\",\"\uD4D6\",5,\"\uD4DD\uD4DE\uD4E0\",7,\"\uD4E9\uD4EA\uD4EB\uD4ED\uD4EE\uD4EF\uD4F1\",6,\"\uD4F9\uD4FA\uD4FC\uC5D0\uC5D1\uC5D4\uC5D8\uC5E0\uC5E1\uC5E3\uC5E5\uC5EC\uC5ED\uC5EE\uC5F0\uC5F4\uC5F6\uC5F7\uC5FC\",5,\"\uC605\uC606\uC607\uC608\uC60C\uC610\uC618\uC619\uC61B\uC61C\uC624\uC625\uC628\uC62C\uC62D\uC62E\uC630\uC633\uC634\uC635\uC637\uC639\uC63B\uC640\uC641\uC644\uC648\uC650\uC651\uC653\uC654\uC655\uC65C\uC65D\uC660\uC66C\uC66F\uC671\uC678\uC679\uC67C\uC680\uC688\uC689\uC68B\uC68D\uC694\uC695\uC698\uC69C\uC6A4\uC6A5\uC6A7\uC6A9\uC6B0\uC6B1\uC6B4\uC6B8\uC6B9\uC6BA\uC6C0\uC6C1\uC6C3\uC6C5\uC6CC\uC6CD\uC6D0\uC6D4\uC6DC\uC6DD\uC6E0\uC6E1\uC6E8\"],\n[\"c041\",\"\uD4FE\",5,\"\uD505\uD506\uD507\uD509\uD50A\uD50B\uD50D\",6,\"\uD516\uD518\",5],\n[\"c061\",\"\uD51E\",25],\n[\"c081\",\"\uD538\uD539\uD53A\uD53B\uD53E\uD53F\uD541\uD542\uD543\uD545\",6,\"\uD54E\uD550\uD552\",5,\"\uD55A\uD55B\uD55D\uD55E\uD55F\uD561\uD562\uD563\uC6E9\uC6EC\uC6F0\uC6F8\uC6F9\uC6FD\uC704\uC705\uC708\uC70C\uC714\uC715\uC717\uC719\uC720\uC721\uC724\uC728\uC730\uC731\uC733\uC735\uC737\uC73C\uC73D\uC740\uC744\uC74A\uC74C\uC74D\uC74F\uC751\",7,\"\uC75C\uC760\uC768\uC76B\uC774\uC775\uC778\uC77C\uC77D\uC77E\uC783\uC784\uC785\uC787\uC788\uC789\uC78A\uC78E\uC790\uC791\uC794\uC796\uC797\uC798\uC79A\uC7A0\uC7A1\uC7A3\uC7A4\uC7A5\uC7A6\uC7AC\uC7AD\uC7B0\uC7B4\uC7BC\uC7BD\uC7BF\uC7C0\uC7C1\uC7C8\uC7C9\uC7CC\uC7CE\uC7D0\uC7D8\uC7DD\uC7E4\uC7E8\uC7EC\uC800\uC801\uC804\uC808\uC80A\"],\n[\"c141\",\"\uD564\uD566\uD567\uD56A\uD56C\uD56E\",5,\"\uD576\uD577\uD579\uD57A\uD57B\uD57D\",6,\"\uD586\uD58A\uD58B\"],\n[\"c161\",\"\uD58C\uD58D\uD58E\uD58F\uD591\",19,\"\uD5A6\uD5A7\"],\n[\"c181\",\"\uD5A8\",31,\"\uC810\uC811\uC813\uC815\uC816\uC81C\uC81D\uC820\uC824\uC82C\uC82D\uC82F\uC831\uC838\uC83C\uC840\uC848\uC849\uC84C\uC84D\uC854\uC870\uC871\uC874\uC878\uC87A\uC880\uC881\uC883\uC885\uC886\uC887\uC88B\uC88C\uC88D\uC894\uC89D\uC89F\uC8A1\uC8A8\uC8BC\uC8BD\uC8C4\uC8C8\uC8CC\uC8D4\uC8D5\uC8D7\uC8D9\uC8E0\uC8E1\uC8E4\uC8F5\uC8FC\uC8FD\uC900\uC904\uC905\uC906\uC90C\uC90D\uC90F\uC911\uC918\uC92C\uC934\uC950\uC951\uC954\uC958\uC960\uC961\uC963\uC96C\uC970\uC974\uC97C\uC988\uC989\uC98C\uC990\uC998\uC999\uC99B\uC99D\uC9C0\uC9C1\uC9C4\uC9C7\uC9C8\uC9CA\uC9D0\uC9D1\uC9D3\"],\n[\"c241\",\"\uD5CA\uD5CB\uD5CD\uD5CE\uD5CF\uD5D1\uD5D3\",4,\"\uD5DA\uD5DC\uD5DE\",5,\"\uD5E6\uD5E7\uD5E9\uD5EA\uD5EB\uD5ED\uD5EE\"],\n[\"c261\",\"\uD5EF\",4,\"\uD5F6\uD5F8\uD5FA\",5,\"\uD602\uD603\uD605\uD606\uD607\uD609\",6,\"\uD612\"],\n[\"c281\",\"\uD616\",5,\"\uD61D\uD61E\uD61F\uD621\uD622\uD623\uD625\",7,\"\uD62E\",9,\"\uD63A\uD63B\uC9D5\uC9D6\uC9D9\uC9DA\uC9DC\uC9DD\uC9E0\uC9E2\uC9E4\uC9E7\uC9EC\uC9ED\uC9EF\uC9F0\uC9F1\uC9F8\uC9F9\uC9FC\uCA00\uCA08\uCA09\uCA0B\uCA0C\uCA0D\uCA14\uCA18\uCA29\uCA4C\uCA4D\uCA50\uCA54\uCA5C\uCA5D\uCA5F\uCA60\uCA61\uCA68\uCA7D\uCA84\uCA98\uCABC\uCABD\uCAC0\uCAC4\uCACC\uCACD\uCACF\uCAD1\uCAD3\uCAD8\uCAD9\uCAE0\uCAEC\uCAF4\uCB08\uCB10\uCB14\uCB18\uCB20\uCB21\uCB41\uCB48\uCB49\uCB4C\uCB50\uCB58\uCB59\uCB5D\uCB64\uCB78\uCB79\uCB9C\uCBB8\uCBD4\uCBE4\uCBE7\uCBE9\uCC0C\uCC0D\uCC10\uCC14\uCC1C\uCC1D\uCC21\uCC22\uCC27\uCC28\uCC29\uCC2C\uCC2E\uCC30\uCC38\uCC39\uCC3B\"],\n[\"c341\",\"\uD63D\uD63E\uD63F\uD641\uD642\uD643\uD644\uD646\uD647\uD64A\uD64C\uD64E\uD64F\uD650\uD652\uD653\uD656\uD657\uD659\uD65A\uD65B\uD65D\",4],\n[\"c361\",\"\uD662\",4,\"\uD668\uD66A\",5,\"\uD672\uD673\uD675\",11],\n[\"c381\",\"\uD681\uD682\uD684\uD686\",5,\"\uD68E\uD68F\uD691\uD692\uD693\uD695\",7,\"\uD69E\uD6A0\uD6A2\",5,\"\uD6A9\uD6AA\uCC3C\uCC3D\uCC3E\uCC44\uCC45\uCC48\uCC4C\uCC54\uCC55\uCC57\uCC58\uCC59\uCC60\uCC64\uCC66\uCC68\uCC70\uCC75\uCC98\uCC99\uCC9C\uCCA0\uCCA8\uCCA9\uCCAB\uCCAC\uCCAD\uCCB4\uCCB5\uCCB8\uCCBC\uCCC4\uCCC5\uCCC7\uCCC9\uCCD0\uCCD4\uCCE4\uCCEC\uCCF0\uCD01\uCD08\uCD09\uCD0C\uCD10\uCD18\uCD19\uCD1B\uCD1D\uCD24\uCD28\uCD2C\uCD39\uCD5C\uCD60\uCD64\uCD6C\uCD6D\uCD6F\uCD71\uCD78\uCD88\uCD94\uCD95\uCD98\uCD9C\uCDA4\uCDA5\uCDA7\uCDA9\uCDB0\uCDC4\uCDCC\uCDD0\uCDE8\uCDEC\uCDF0\uCDF8\uCDF9\uCDFB\uCDFD\uCE04\uCE08\uCE0C\uCE14\uCE19\uCE20\uCE21\uCE24\uCE28\uCE30\uCE31\uCE33\uCE35\"],\n[\"c441\",\"\uD6AB\uD6AD\uD6AE\uD6AF\uD6B1\",7,\"\uD6BA\uD6BC\",7,\"\uD6C6\uD6C7\uD6C9\uD6CA\uD6CB\"],\n[\"c461\",\"\uD6CD\uD6CE\uD6CF\uD6D0\uD6D2\uD6D3\uD6D5\uD6D6\uD6D8\uD6DA\",5,\"\uD6E1\uD6E2\uD6E3\uD6E5\uD6E6\uD6E7\uD6E9\",4],\n[\"c481\",\"\uD6EE\uD6EF\uD6F1\uD6F2\uD6F3\uD6F4\uD6F6\",5,\"\uD6FE\uD6FF\uD701\uD702\uD703\uD705\",11,\"\uD712\uD713\uD714\uCE58\uCE59\uCE5C\uCE5F\uCE60\uCE61\uCE68\uCE69\uCE6B\uCE6D\uCE74\uCE75\uCE78\uCE7C\uCE84\uCE85\uCE87\uCE89\uCE90\uCE91\uCE94\uCE98\uCEA0\uCEA1\uCEA3\uCEA4\uCEA5\uCEAC\uCEAD\uCEC1\uCEE4\uCEE5\uCEE8\uCEEB\uCEEC\uCEF4\uCEF5\uCEF7\uCEF8\uCEF9\uCF00\uCF01\uCF04\uCF08\uCF10\uCF11\uCF13\uCF15\uCF1C\uCF20\uCF24\uCF2C\uCF2D\uCF2F\uCF30\uCF31\uCF38\uCF54\uCF55\uCF58\uCF5C\uCF64\uCF65\uCF67\uCF69\uCF70\uCF71\uCF74\uCF78\uCF80\uCF85\uCF8C\uCFA1\uCFA8\uCFB0\uCFC4\uCFE0\uCFE1\uCFE4\uCFE8\uCFF0\uCFF1\uCFF3\uCFF5\uCFFC\uD000\uD004\uD011\uD018\uD02D\uD034\uD035\uD038\uD03C\"],\n[\"c541\",\"\uD715\uD716\uD717\uD71A\uD71B\uD71D\uD71E\uD71F\uD721\",6,\"\uD72A\uD72C\uD72E\",5,\"\uD736\uD737\uD739\"],\n[\"c561\",\"\uD73A\uD73B\uD73D\",6,\"\uD745\uD746\uD748\uD74A\",5,\"\uD752\uD753\uD755\uD75A\",4],\n[\"c581\",\"\uD75F\uD762\uD764\uD766\uD767\uD768\uD76A\uD76B\uD76D\uD76E\uD76F\uD771\uD772\uD773\uD775\",6,\"\uD77E\uD77F\uD780\uD782\",5,\"\uD78A\uD78B\uD044\uD045\uD047\uD049\uD050\uD054\uD058\uD060\uD06C\uD06D\uD070\uD074\uD07C\uD07D\uD081\uD0A4\uD0A5\uD0A8\uD0AC\uD0B4\uD0B5\uD0B7\uD0B9\uD0C0\uD0C1\uD0C4\uD0C8\uD0C9\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5\uD0DC\uD0DD\uD0E0\uD0E4\uD0EC\uD0ED\uD0EF\uD0F0\uD0F1\uD0F8\uD10D\uD130\uD131\uD134\uD138\uD13A\uD140\uD141\uD143\uD144\uD145\uD14C\uD14D\uD150\uD154\uD15C\uD15D\uD15F\uD161\uD168\uD16C\uD17C\uD184\uD188\uD1A0\uD1A1\uD1A4\uD1A8\uD1B0\uD1B1\uD1B3\uD1B5\uD1BA\uD1BC\uD1C0\uD1D8\uD1F4\uD1F8\uD207\uD209\uD210\uD22C\uD22D\uD230\uD234\uD23C\uD23D\uD23F\uD241\uD248\uD25C\"],\n[\"c641\",\"\uD78D\uD78E\uD78F\uD791\",6,\"\uD79A\uD79C\uD79E\",5],\n[\"c6a1\",\"\uD264\uD280\uD281\uD284\uD288\uD290\uD291\uD295\uD29C\uD2A0\uD2A4\uD2AC\uD2B1\uD2B8\uD2B9\uD2BC\uD2BF\uD2C0\uD2C2\uD2C8\uD2C9\uD2CB\uD2D4\uD2D8\uD2DC\uD2E4\uD2E5\uD2F0\uD2F1\uD2F4\uD2F8\uD300\uD301\uD303\uD305\uD30C\uD30D\uD30E\uD310\uD314\uD316\uD31C\uD31D\uD31F\uD320\uD321\uD325\uD328\uD329\uD32C\uD330\uD338\uD339\uD33B\uD33C\uD33D\uD344\uD345\uD37C\uD37D\uD380\uD384\uD38C\uD38D\uD38F\uD390\uD391\uD398\uD399\uD39C\uD3A0\uD3A8\uD3A9\uD3AB\uD3AD\uD3B4\uD3B8\uD3BC\uD3C4\uD3C5\uD3C8\uD3C9\uD3D0\uD3D8\uD3E1\uD3E3\uD3EC\uD3ED\uD3F0\uD3F4\uD3FC\uD3FD\uD3FF\uD401\"],\n[\"c7a1\",\"\uD408\uD41D\uD440\uD444\uD45C\uD460\uD464\uD46D\uD46F\uD478\uD479\uD47C\uD47F\uD480\uD482\uD488\uD489\uD48B\uD48D\uD494\uD4A9\uD4CC\uD4D0\uD4D4\uD4DC\uD4DF\uD4E8\uD4EC\uD4F0\uD4F8\uD4FB\uD4FD\uD504\uD508\uD50C\uD514\uD515\uD517\uD53C\uD53D\uD540\uD544\uD54C\uD54D\uD54F\uD551\uD558\uD559\uD55C\uD560\uD565\uD568\uD569\uD56B\uD56D\uD574\uD575\uD578\uD57C\uD584\uD585\uD587\uD588\uD589\uD590\uD5A5\uD5C8\uD5C9\uD5CC\uD5D0\uD5D2\uD5D8\uD5D9\uD5DB\uD5DD\uD5E4\uD5E5\uD5E8\uD5EC\uD5F4\uD5F5\uD5F7\uD5F9\uD600\uD601\uD604\uD608\uD610\uD611\uD613\uD614\uD615\uD61C\uD620\"],\n[\"c8a1\",\"\uD624\uD62D\uD638\uD639\uD63C\uD640\uD645\uD648\uD649\uD64B\uD64D\uD651\uD654\uD655\uD658\uD65C\uD667\uD669\uD670\uD671\uD674\uD683\uD685\uD68C\uD68D\uD690\uD694\uD69D\uD69F\uD6A1\uD6A8\uD6AC\uD6B0\uD6B9\uD6BB\uD6C4\uD6C5\uD6C8\uD6CC\uD6D1\uD6D4\uD6D7\uD6D9\uD6E0\uD6E4\uD6E8\uD6F0\uD6F5\uD6FC\uD6FD\uD700\uD704\uD711\uD718\uD719\uD71C\uD720\uD728\uD729\uD72B\uD72D\uD734\uD735\uD738\uD73C\uD744\uD747\uD749\uD750\uD751\uD754\uD756\uD757\uD758\uD759\uD760\uD761\uD763\uD765\uD769\uD76C\uD770\uD774\uD77C\uD77D\uD781\uD788\uD789\uD78C\uD790\uD798\uD799\uD79B\uD79D\"],\n[\"caa1\",\"\u4F3D\u4F73\u5047\u50F9\u52A0\u53EF\u5475\u54E5\u5609\u5AC1\u5BB6\u6687\u67B6\u67B7\u67EF\u6B4C\u73C2\u75C2\u7A3C\u82DB\u8304\u8857\u8888\u8A36\u8CC8\u8DCF\u8EFB\u8FE6\u99D5\u523B\u5374\u5404\u606A\u6164\u6BBC\u73CF\u811A\u89BA\u89D2\u95A3\u4F83\u520A\u58BE\u5978\u59E6\u5E72\u5E79\u61C7\u63C0\u6746\u67EC\u687F\u6F97\u764E\u770B\u78F5\u7A08\u7AFF\u7C21\u809D\u826E\u8271\u8AEB\u9593\u4E6B\u559D\u66F7\u6E34\u78A3\u7AED\u845B\u8910\u874E\u97A8\u52D8\u574E\u582A\u5D4C\u611F\u61BE\u6221\u6562\u67D1\u6A44\u6E1B\u7518\u75B3\u76E3\u77B0\u7D3A\u90AF\u9451\u9452\u9F95\"],\n[\"cba1\",\"\u5323\u5CAC\u7532\u80DB\u9240\u9598\u525B\u5808\u59DC\u5CA1\u5D17\u5EB7\u5F3A\u5F4A\u6177\u6C5F\u757A\u7586\u7CE0\u7D73\u7DB1\u7F8C\u8154\u8221\u8591\u8941\u8B1B\u92FC\u964D\u9C47\u4ECB\u4EF7\u500B\u51F1\u584F\u6137\u613E\u6168\u6539\u69EA\u6F11\u75A5\u7686\u76D6\u7B87\u82A5\u84CB\uF900\u93A7\u958B\u5580\u5BA2\u5751\uF901\u7CB3\u7FB9\u91B5\u5028\u53BB\u5C45\u5DE8\u62D2\u636E\u64DA\u64E7\u6E20\u70AC\u795B\u8DDD\u8E1E\uF902\u907D\u9245\u92F8\u4E7E\u4EF6\u5065\u5DFE\u5EFA\u6106\u6957\u8171\u8654\u8E47\u9375\u9A2B\u4E5E\u5091\u6770\u6840\u5109\u528D\u5292\u6AA2\"],\n[\"cca1\",\"\u77BC\u9210\u9ED4\u52AB\u602F\u8FF2\u5048\u61A9\u63ED\u64CA\u683C\u6A84\u6FC0\u8188\u89A1\u9694\u5805\u727D\u72AC\u7504\u7D79\u7E6D\u80A9\u898B\u8B74\u9063\u9D51\u6289\u6C7A\u6F54\u7D50\u7F3A\u8A23\u517C\u614A\u7B9D\u8B19\u9257\u938C\u4EAC\u4FD3\u501E\u50BE\u5106\u52C1\u52CD\u537F\u5770\u5883\u5E9A\u5F91\u6176\u61AC\u64CE\u656C\u666F\u66BB\u66F4\u6897\u6D87\u7085\u70F1\u749F\u74A5\u74CA\u75D9\u786C\u78EC\u7ADF\u7AF6\u7D45\u7D93\u8015\u803F\u811B\u8396\u8B66\u8F15\u9015\u93E1\u9803\u9838\u9A5A\u9BE8\u4FC2\u5553\u583A\u5951\u5B63\u5C46\u60B8\u6212\u6842\u68B0\"],\n[\"cda1\",\"\u68E8\u6EAA\u754C\u7678\u78CE\u7A3D\u7CFB\u7E6B\u7E7C\u8A08\u8AA1\u8C3F\u968E\u9DC4\u53E4\u53E9\u544A\u5471\u56FA\u59D1\u5B64\u5C3B\u5EAB\u62F7\u6537\u6545\u6572\u66A0\u67AF\u69C1\u6CBD\u75FC\u7690\u777E\u7A3F\u7F94\u8003\u80A1\u818F\u82E6\u82FD\u83F0\u85C1\u8831\u88B4\u8AA5\uF903\u8F9C\u932E\u96C7\u9867\u9AD8\u9F13\u54ED\u659B\u66F2\u688F\u7A40\u8C37\u9D60\u56F0\u5764\u5D11\u6606\u68B1\u68CD\u6EFE\u7428\u889E\u9BE4\u6C68\uF904\u9AA8\u4F9B\u516C\u5171\u529F\u5B54\u5DE5\u6050\u606D\u62F1\u63A7\u653B\u73D9\u7A7A\u86A3\u8CA2\u978F\u4E32\u5BE1\u6208\u679C\u74DC\"],\n[\"cea1\",\"\u79D1\u83D3\u8A87\u8AB2\u8DE8\u904E\u934B\u9846\u5ED3\u69E8\u85FF\u90ED\uF905\u51A0\u5B98\u5BEC\u6163\u68FA\u6B3E\u704C\u742F\u74D8\u7BA1\u7F50\u83C5\u89C0\u8CAB\u95DC\u9928\u522E\u605D\u62EC\u9002\u4F8A\u5149\u5321\u58D9\u5EE3\u66E0\u6D38\u709A\u72C2\u73D6\u7B50\u80F1\u945B\u5366\u639B\u7F6B\u4E56\u5080\u584A\u58DE\u602A\u6127\u62D0\u69D0\u9B41\u5B8F\u7D18\u80B1\u8F5F\u4EA4\u50D1\u54AC\u55AC\u5B0C\u5DA0\u5DE7\u652A\u654E\u6821\u6A4B\u72E1\u768E\u77EF\u7D5E\u7FF9\u81A0\u854E\u86DF\u8F03\u8F4E\u90CA\u9903\u9A55\u9BAB\u4E18\u4E45\u4E5D\u4EC7\u4FF1\u5177\u52FE\"],\n[\"cfa1\",\"\u5340\u53E3\u53E5\u548E\u5614\u5775\u57A2\u5BC7\u5D87\u5ED0\u61FC\u62D8\u6551\u67B8\u67E9\u69CB\u6B50\u6BC6\u6BEC\u6C42\u6E9D\u7078\u72D7\u7396\u7403\u77BF\u77E9\u7A76\u7D7F\u8009\u81FC\u8205\u820A\u82DF\u8862\u8B33\u8CFC\u8EC0\u9011\u90B1\u9264\u92B6\u99D2\u9A45\u9CE9\u9DD7\u9F9C\u570B\u5C40\u83CA\u97A0\u97AB\u9EB4\u541B\u7A98\u7FA4\u88D9\u8ECD\u90E1\u5800\u5C48\u6398\u7A9F\u5BAE\u5F13\u7A79\u7AAE\u828E\u8EAC\u5026\u5238\u52F8\u5377\u5708\u62F3\u6372\u6B0A\u6DC3\u7737\u53A5\u7357\u8568\u8E76\u95D5\u673A\u6AC3\u6F70\u8A6D\u8ECC\u994B\uF906\u6677\u6B78\u8CB4\"],\n[\"d0a1\",\"\u9B3C\uF907\u53EB\u572D\u594E\u63C6\u69FB\u73EA\u7845\u7ABA\u7AC5\u7CFE\u8475\u898F\u8D73\u9035\u95A8\u52FB\u5747\u7547\u7B60\u83CC\u921E\uF908\u6A58\u514B\u524B\u5287\u621F\u68D8\u6975\u9699\u50C5\u52A4\u52E4\u61C3\u65A4\u6839\u69FF\u747E\u7B4B\u82B9\u83EB\u89B2\u8B39\u8FD1\u9949\uF909\u4ECA\u5997\u64D2\u6611\u6A8E\u7434\u7981\u79BD\u82A9\u887E\u887F\u895F\uF90A\u9326\u4F0B\u53CA\u6025\u6271\u6C72\u7D1A\u7D66\u4E98\u5162\u77DC\u80AF\u4F01\u4F0E\u5176\u5180\u55DC\u5668\u573B\u57FA\u57FC\u5914\u5947\u5993\u5BC4\u5C90\u5D0E\u5DF1\u5E7E\u5FCC\u6280\u65D7\u65E3\"],\n[\"d1a1\",\"\u671E\u671F\u675E\u68CB\u68C4\u6A5F\u6B3A\u6C23\u6C7D\u6C82\u6DC7\u7398\u7426\u742A\u7482\u74A3\u7578\u757F\u7881\u78EF\u7941\u7947\u7948\u797A\u7B95\u7D00\u7DBA\u7F88\u8006\u802D\u808C\u8A18\u8B4F\u8C48\u8D77\u9321\u9324\u98E2\u9951\u9A0E\u9A0F\u9A65\u9E92\u7DCA\u4F76\u5409\u62EE\u6854\u91D1\u55AB\u513A\uF90B\uF90C\u5A1C\u61E6\uF90D\u62CF\u62FF\uF90E\",5,\"\u90A3\uF914\",4,\"\u8AFE\uF919\uF91A\uF91B\uF91C\u6696\uF91D\u7156\uF91E\uF91F\u96E3\uF920\u634F\u637A\u5357\uF921\u678F\u6960\u6E73\uF922\u7537\uF923\uF924\uF925\"],\n[\"d2a1\",\"\u7D0D\uF926\uF927\u8872\u56CA\u5A18\uF928\",4,\"\u4E43\uF92D\u5167\u5948\u67F0\u8010\uF92E\u5973\u5E74\u649A\u79CA\u5FF5\u606C\u62C8\u637B\u5BE7\u5BD7\u52AA\uF92F\u5974\u5F29\u6012\uF930\uF931\uF932\u7459\uF933\",5,\"\u99D1\uF939\",10,\"\u6FC3\uF944\uF945\u81BF\u8FB2\u60F1\uF946\uF947\u8166\uF948\uF949\u5C3F\uF94A\",7,\"\u5AE9\u8A25\u677B\u7D10\uF952\",5,\"\u80FD\uF958\uF959\u5C3C\u6CE5\u533F\u6EBA\u591A\u8336\"],\n[\"d3a1\",\"\u4E39\u4EB6\u4F46\u55AE\u5718\u58C7\u5F56\u65B7\u65E6\u6A80\u6BB5\u6E4D\u77ED\u7AEF\u7C1E\u7DDE\u86CB\u8892\u9132\u935B\u64BB\u6FBE\u737A\u75B8\u9054\u5556\u574D\u61BA\u64D4\u66C7\u6DE1\u6E5B\u6F6D\u6FB9\u75F0\u8043\u81BD\u8541\u8983\u8AC7\u8B5A\u931F\u6C93\u7553\u7B54\u8E0F\u905D\u5510\u5802\u5858\u5E62\u6207\u649E\u68E0\u7576\u7CD6\u87B3\u9EE8\u4EE3\u5788\u576E\u5927\u5C0D\u5CB1\u5E36\u5F85\u6234\u64E1\u73B3\u81FA\u888B\u8CB8\u968A\u9EDB\u5B85\u5FB7\u60B3\u5012\u5200\u5230\u5716\u5835\u5857\u5C0E\u5C60\u5CF6\u5D8B\u5EA6\u5F92\u60BC\u6311\u6389\u6417\u6843\"],\n[\"d4a1\",\"\u68F9\u6AC2\u6DD8\u6E21\u6ED4\u6FE4\u71FE\u76DC\u7779\u79B1\u7A3B\u8404\u89A9\u8CED\u8DF3\u8E48\u9003\u9014\u9053\u90FD\u934D\u9676\u97DC\u6BD2\u7006\u7258\u72A2\u7368\u7763\u79BF\u7BE4\u7E9B\u8B80\u58A9\u60C7\u6566\u65FD\u66BE\u6C8C\u711E\u71C9\u8C5A\u9813\u4E6D\u7A81\u4EDD\u51AC\u51CD\u52D5\u540C\u61A7\u6771\u6850\u68DF\u6D1E\u6F7C\u75BC\u77B3\u7AE5\u80F4\u8463\u9285\u515C\u6597\u675C\u6793\u75D8\u7AC7\u8373\uF95A\u8C46\u9017\u982D\u5C6F\u81C0\u829A\u9041\u906F\u920D\u5F97\u5D9D\u6A59\u71C8\u767B\u7B49\u85E4\u8B04\u9127\u9A30\u5587\u61F6\uF95B\u7669\u7F85\"],\n[\"d5a1\",\"\u863F\u87BA\u88F8\u908F\uF95C\u6D1B\u70D9\u73DE\u7D61\u843D\uF95D\u916A\u99F1\uF95E\u4E82\u5375\u6B04\u6B12\u703E\u721B\u862D\u9E1E\u524C\u8FA3\u5D50\u64E5\u652C\u6B16\u6FEB\u7C43\u7E9C\u85CD\u8964\u89BD\u62C9\u81D8\u881F\u5ECA\u6717\u6D6A\u72FC\u7405\u746F\u8782\u90DE\u4F86\u5D0D\u5FA0\u840A\u51B7\u63A0\u7565\u4EAE\u5006\u5169\u51C9\u6881\u6A11\u7CAE\u7CB1\u7CE7\u826F\u8AD2\u8F1B\u91CF\u4FB6\u5137\u52F5\u5442\u5EEC\u616E\u623E\u65C5\u6ADA\u6FFE\u792A\u85DC\u8823\u95AD\u9A62\u9A6A\u9E97\u9ECE\u529B\u66C6\u6B77\u701D\u792B\u8F62\u9742\u6190\u6200\u6523\u6F23\"],\n[\"d6a1\",\"\u7149\u7489\u7DF4\u806F\u84EE\u8F26\u9023\u934A\u51BD\u5217\u52A3\u6D0C\u70C8\u88C2\u5EC9\u6582\u6BAE\u6FC2\u7C3E\u7375\u4EE4\u4F36\u56F9\uF95F\u5CBA\u5DBA\u601C\u73B2\u7B2D\u7F9A\u7FCE\u8046\u901E\u9234\u96F6\u9748\u9818\u9F61\u4F8B\u6FA7\u79AE\u91B4\u96B7\u52DE\uF960\u6488\u64C4\u6AD3\u6F5E\u7018\u7210\u76E7\u8001\u8606\u865C\u8DEF\u8F05\u9732\u9B6F\u9DFA\u9E75\u788C\u797F\u7DA0\u83C9\u9304\u9E7F\u9E93\u8AD6\u58DF\u5F04\u6727\u7027\u74CF\u7C60\u807E\u5121\u7028\u7262\u78CA\u8CC2\u8CDA\u8CF4\u96F7\u4E86\u50DA\u5BEE\u5ED6\u6599\u71CE\u7642\u77AD\u804A\u84FC\"],\n[\"d7a1\",\"\u907C\u9B27\u9F8D\u58D8\u5A41\u5C62\u6A13\u6DDA\u6F0F\u763B\u7D2F\u7E37\u851E\u8938\u93E4\u964B\u5289\u65D2\u67F3\u69B4\u6D41\u6E9C\u700F\u7409\u7460\u7559\u7624\u786B\u8B2C\u985E\u516D\u622E\u9678\u4F96\u502B\u5D19\u6DEA\u7DB8\u8F2A\u5F8B\u6144\u6817\uF961\u9686\u52D2\u808B\u51DC\u51CC\u695E\u7A1C\u7DBE\u83F1\u9675\u4FDA\u5229\u5398\u540F\u550E\u5C65\u60A7\u674E\u68A8\u6D6C\u7281\u72F8\u7406\u7483\uF962\u75E2\u7C6C\u7F79\u7FB8\u8389\u88CF\u88E1\u91CC\u91D0\u96E2\u9BC9\u541D\u6F7E\u71D0\u7498\u85FA\u8EAA\u96A3\u9C57\u9E9F\u6797\u6DCB\u7433\u81E8\u9716\u782C\"],\n[\"d8a1\",\"\u7ACB\u7B20\u7C92\u6469\u746A\u75F2\u78BC\u78E8\u99AC\u9B54\u9EBB\u5BDE\u5E55\u6F20\u819C\u83AB\u9088\u4E07\u534D\u5A29\u5DD2\u5F4E\u6162\u633D\u6669\u66FC\u6EFF\u6F2B\u7063\u779E\u842C\u8513\u883B\u8F13\u9945\u9C3B\u551C\u62B9\u672B\u6CAB\u8309\u896A\u977A\u4EA1\u5984\u5FD8\u5FD9\u671B\u7DB2\u7F54\u8292\u832B\u83BD\u8F1E\u9099\u57CB\u59B9\u5A92\u5BD0\u6627\u679A\u6885\u6BCF\u7164\u7F75\u8CB7\u8CE3\u9081\u9B45\u8108\u8C8A\u964C\u9A40\u9EA5\u5B5F\u6C13\u731B\u76F2\u76DF\u840C\u51AA\u8993\u514D\u5195\u52C9\u68C9\u6C94\u7704\u7720\u7DBF\u7DEC\u9762\u9EB5\u6EC5\"],\n[\"d9a1\",\"\u8511\u51A5\u540D\u547D\u660E\u669D\u6927\u6E9F\u76BF\u7791\u8317\u84C2\u879F\u9169\u9298\u9CF4\u8882\u4FAE\u5192\u52DF\u59C6\u5E3D\u6155\u6478\u6479\u66AE\u67D0\u6A21\u6BCD\u6BDB\u725F\u7261\u7441\u7738\u77DB\u8017\u82BC\u8305\u8B00\u8B28\u8C8C\u6728\u6C90\u7267\u76EE\u7766\u7A46\u9DA9\u6B7F\u6C92\u5922\u6726\u8499\u536F\u5893\u5999\u5EDF\u63CF\u6634\u6773\u6E3A\u732B\u7AD7\u82D7\u9328\u52D9\u5DEB\u61AE\u61CB\u620A\u62C7\u64AB\u65E0\u6959\u6B66\u6BCB\u7121\u73F7\u755D\u7E46\u821E\u8302\u856A\u8AA3\u8CBF\u9727\u9D61\u58A8\u9ED8\u5011\u520E\u543B\u554F\u6587\"],\n[\"daa1\",\"\u6C76\u7D0A\u7D0B\u805E\u868A\u9580\u96EF\u52FF\u6C95\u7269\u5473\u5A9A\u5C3E\u5D4B\u5F4C\u5FAE\u672A\u68B6\u6963\u6E3C\u6E44\u7709\u7C73\u7F8E\u8587\u8B0E\u8FF7\u9761\u9EF4\u5CB7\u60B6\u610D\u61AB\u654F\u65FB\u65FC\u6C11\u6CEF\u739F\u73C9\u7DE1\u9594\u5BC6\u871C\u8B10\u525D\u535A\u62CD\u640F\u64B2\u6734\u6A38\u6CCA\u73C0\u749E\u7B94\u7C95\u7E1B\u818A\u8236\u8584\u8FEB\u96F9\u99C1\u4F34\u534A\u53CD\u53DB\u62CC\u642C\u6500\u6591\u69C3\u6CEE\u6F58\u73ED\u7554\u7622\u76E4\u76FC\u78D0\u78FB\u792C\u7D46\u822C\u87E0\u8FD4\u9812\u98EF\u52C3\u62D4\u64A5\u6E24\u6F51\"],\n[\"dba1\",\"\u767C\u8DCB\u91B1\u9262\u9AEE\u9B43\u5023\u508D\u574A\u59A8\u5C28\u5E47\u5F77\u623F\u653E\u65B9\u65C1\u6609\u678B\u699C\u6EC2\u78C5\u7D21\u80AA\u8180\u822B\u82B3\u84A1\u868C\u8A2A\u8B17\u90A6\u9632\u9F90\u500D\u4FF3\uF963\u57F9\u5F98\u62DC\u6392\u676F\u6E43\u7119\u76C3\u80CC\u80DA\u88F4\u88F5\u8919\u8CE0\u8F29\u914D\u966A\u4F2F\u4F70\u5E1B\u67CF\u6822\u767D\u767E\u9B44\u5E61\u6A0A\u7169\u71D4\u756A\uF964\u7E41\u8543\u85E9\u98DC\u4F10\u7B4F\u7F70\u95A5\u51E1\u5E06\u68B5\u6C3E\u6C4E\u6CDB\u72AF\u7BC4\u8303\u6CD5\u743A\u50FB\u5288\u58C1\u64D8\u6A97\u74A7\u7656\"],\n[\"dca1\",\"\u78A7\u8617\u95E2\u9739\uF965\u535E\u5F01\u8B8A\u8FA8\u8FAF\u908A\u5225\u77A5\u9C49\u9F08\u4E19\u5002\u5175\u5C5B\u5E77\u661E\u663A\u67C4\u68C5\u70B3\u7501\u75C5\u79C9\u7ADD\u8F27\u9920\u9A08\u4FDD\u5821\u5831\u5BF6\u666E\u6B65\u6D11\u6E7A\u6F7D\u73E4\u752B\u83E9\u88DC\u8913\u8B5C\u8F14\u4F0F\u50D5\u5310\u535C\u5B93\u5FA9\u670D\u798F\u8179\u832F\u8514\u8907\u8986\u8F39\u8F3B\u99A5\u9C12\u672C\u4E76\u4FF8\u5949\u5C01\u5CEF\u5CF0\u6367\u68D2\u70FD\u71A2\u742B\u7E2B\u84EC\u8702\u9022\u92D2\u9CF3\u4E0D\u4ED8\u4FEF\u5085\u5256\u526F\u5426\u5490\u57E0\u592B\u5A66\"],\n[\"dda1\",\"\u5B5A\u5B75\u5BCC\u5E9C\uF966\u6276\u6577\u65A7\u6D6E\u6EA5\u7236\u7B26\u7C3F\u7F36\u8150\u8151\u819A\u8240\u8299\u83A9\u8A03\u8CA0\u8CE6\u8CFB\u8D74\u8DBA\u90E8\u91DC\u961C\u9644\u99D9\u9CE7\u5317\u5206\u5429\u5674\u58B3\u5954\u596E\u5FFF\u61A4\u626E\u6610\u6C7E\u711A\u76C6\u7C89\u7CDE\u7D1B\u82AC\u8CC1\u96F0\uF967\u4F5B\u5F17\u5F7F\u62C2\u5D29\u670B\u68DA\u787C\u7E43\u9D6C\u4E15\u5099\u5315\u532A\u5351\u5983\u5A62\u5E87\u60B2\u618A\u6249\u6279\u6590\u6787\u69A7\u6BD4\u6BD6\u6BD7\u6BD8\u6CB8\uF968\u7435\u75FA\u7812\u7891\u79D5\u79D8\u7C83\u7DCB\u7FE1\u80A5\"],\n[\"dea1\",\"\u813E\u81C2\u83F2\u871A\u88E8\u8AB9\u8B6C\u8CBB\u9119\u975E\u98DB\u9F3B\u56AC\u5B2A\u5F6C\u658C\u6AB3\u6BAF\u6D5C\u6FF1\u7015\u725D\u73AD\u8CA7\u8CD3\u983B\u6191\u6C37\u8058\u9A01\u4E4D\u4E8B\u4E9B\u4ED5\u4F3A\u4F3C\u4F7F\u4FDF\u50FF\u53F2\u53F8\u5506\u55E3\u56DB\u58EB\u5962\u5A11\u5BEB\u5BFA\u5C04\u5DF3\u5E2B\u5F99\u601D\u6368\u659C\u65AF\u67F6\u67FB\u68AD\u6B7B\u6C99\u6CD7\u6E23\u7009\u7345\u7802\u793E\u7940\u7960\u79C1\u7BE9\u7D17\u7D72\u8086\u820D\u838E\u84D1\u86C7\u88DF\u8A50\u8A5E\u8B1D\u8CDC\u8D66\u8FAD\u90AA\u98FC\u99DF\u9E9D\u524A\uF969\u6714\uF96A\"],\n[\"dfa1\",\"\u5098\u522A\u5C71\u6563\u6C55\u73CA\u7523\u759D\u7B97\u849C\u9178\u9730\u4E77\u6492\u6BBA\u715E\u85A9\u4E09\uF96B\u6749\u68EE\u6E17\u829F\u8518\u886B\u63F7\u6F81\u9212\u98AF\u4E0A\u50B7\u50CF\u511F\u5546\u55AA\u5617\u5B40\u5C19\u5CE0\u5E38\u5E8A\u5EA0\u5EC2\u60F3\u6851\u6A61\u6E58\u723D\u7240\u72C0\u76F8\u7965\u7BB1\u7FD4\u88F3\u89F4\u8A73\u8C61\u8CDE\u971C\u585E\u74BD\u8CFD\u55C7\uF96C\u7A61\u7D22\u8272\u7272\u751F\u7525\uF96D\u7B19\u5885\u58FB\u5DBC\u5E8F\u5EB6\u5F90\u6055\u6292\u637F\u654D\u6691\u66D9\u66F8\u6816\u68F2\u7280\u745E\u7B6E\u7D6E\u7DD6\u7F72\"],\n[\"e0a1\",\"\u80E5\u8212\u85AF\u897F\u8A93\u901D\u92E4\u9ECD\u9F20\u5915\u596D\u5E2D\u60DC\u6614\u6673\u6790\u6C50\u6DC5\u6F5F\u77F3\u78A9\u84C6\u91CB\u932B\u4ED9\u50CA\u5148\u5584\u5B0B\u5BA3\u6247\u657E\u65CB\u6E32\u717D\u7401\u7444\u7487\u74BF\u766C\u79AA\u7DDA\u7E55\u7FA8\u817A\u81B3\u8239\u861A\u87EC\u8A75\u8DE3\u9078\u9291\u9425\u994D\u9BAE\u5368\u5C51\u6954\u6CC4\u6D29\u6E2B\u820C\u859B\u893B\u8A2D\u8AAA\u96EA\u9F67\u5261\u66B9\u6BB2\u7E96\u87FE\u8D0D\u9583\u965D\u651D\u6D89\u71EE\uF96E\u57CE\u59D3\u5BAC\u6027\u60FA\u6210\u661F\u665F\u7329\u73F9\u76DB\u7701\u7B6C\"],\n[\"e1a1\",\"\u8056\u8072\u8165\u8AA0\u9192\u4E16\u52E2\u6B72\u6D17\u7A05\u7B39\u7D30\uF96F\u8CB0\u53EC\u562F\u5851\u5BB5\u5C0F\u5C11\u5DE2\u6240\u6383\u6414\u662D\u68B3\u6CBC\u6D88\u6EAF\u701F\u70A4\u71D2\u7526\u758F\u758E\u7619\u7B11\u7BE0\u7C2B\u7D20\u7D39\u852C\u856D\u8607\u8A34\u900D\u9061\u90B5\u92B7\u97F6\u9A37\u4FD7\u5C6C\u675F\u6D91\u7C9F\u7E8C\u8B16\u8D16\u901F\u5B6B\u5DFD\u640D\u84C0\u905C\u98E1\u7387\u5B8B\u609A\u677E\u6DDE\u8A1F\u8AA6\u9001\u980C\u5237\uF970\u7051\u788E\u9396\u8870\u91D7\u4FEE\u53D7\u55FD\u56DA\u5782\u58FD\u5AC2\u5B88\u5CAB\u5CC0\u5E25\u6101\"],\n[\"e2a1\",\"\u620D\u624B\u6388\u641C\u6536\u6578\u6A39\u6B8A\u6C34\u6D19\u6F31\u71E7\u72E9\u7378\u7407\u74B2\u7626\u7761\u79C0\u7A57\u7AEA\u7CB9\u7D8F\u7DAC\u7E61\u7F9E\u8129\u8331\u8490\u84DA\u85EA\u8896\u8AB0\u8B90\u8F38\u9042\u9083\u916C\u9296\u92B9\u968B\u96A7\u96A8\u96D6\u9700\u9808\u9996\u9AD3\u9B1A\u53D4\u587E\u5919\u5B70\u5BBF\u6DD1\u6F5A\u719F\u7421\u74B9\u8085\u83FD\u5DE1\u5F87\u5FAA\u6042\u65EC\u6812\u696F\u6A53\u6B89\u6D35\u6DF3\u73E3\u76FE\u77AC\u7B4D\u7D14\u8123\u821C\u8340\u84F4\u8563\u8A62\u8AC4\u9187\u931E\u9806\u99B4\u620C\u8853\u8FF0\u9265\u5D07\u5D27\"],\n[\"e3a1\",\"\u5D69\u745F\u819D\u8768\u6FD5\u62FE\u7FD2\u8936\u8972\u4E1E\u4E58\u50E7\u52DD\u5347\u627F\u6607\u7E69\u8805\u965E\u4F8D\u5319\u5636\u59CB\u5AA4\u5C38\u5C4E\u5C4D\u5E02\u5F11\u6043\u65BD\u662F\u6642\u67BE\u67F4\u731C\u77E2\u793A\u7FC5\u8494\u84CD\u8996\u8A66\u8A69\u8AE1\u8C55\u8C7A\u57F4\u5BD4\u5F0F\u606F\u62ED\u690D\u6B96\u6E5C\u7184\u7BD2\u8755\u8B58\u8EFE\u98DF\u98FE\u4F38\u4F81\u4FE1\u547B\u5A20\u5BB8\u613C\u65B0\u6668\u71FC\u7533\u795E\u7D33\u814E\u81E3\u8398\u85AA\u85CE\u8703\u8A0A\u8EAB\u8F9B\uF971\u8FC5\u5931\u5BA4\u5BE6\u6089\u5BE9\u5C0B\u5FC3\u6C81\"],\n[\"e4a1\",\"\uF972\u6DF1\u700B\u751A\u82AF\u8AF6\u4EC0\u5341\uF973\u96D9\u6C0F\u4E9E\u4FC4\u5152\u555E\u5A25\u5CE8\u6211\u7259\u82BD\u83AA\u86FE\u8859\u8A1D\u963F\u96C5\u9913\u9D09\u9D5D\u580A\u5CB3\u5DBD\u5E44\u60E1\u6115\u63E1\u6A02\u6E25\u9102\u9354\u984E\u9C10\u9F77\u5B89\u5CB8\u6309\u664F\u6848\u773C\u96C1\u978D\u9854\u9B9F\u65A1\u8B01\u8ECB\u95BC\u5535\u5CA9\u5DD6\u5EB5\u6697\u764C\u83F4\u95C7\u58D3\u62BC\u72CE\u9D28\u4EF0\u592E\u600F\u663B\u6B83\u79E7\u9D26\u5393\u54C0\u57C3\u5D16\u611B\u66D6\u6DAF\u788D\u827E\u9698\u9744\u5384\u627C\u6396\u6DB2\u7E0A\u814B\u984D\"],\n[\"e5a1\",\"\u6AFB\u7F4C\u9DAF\u9E1A\u4E5F\u503B\u51B6\u591C\u60F9\u63F6\u6930\u723A\u8036\uF974\u91CE\u5F31\uF975\uF976\u7D04\u82E5\u846F\u84BB\u85E5\u8E8D\uF977\u4F6F\uF978\uF979\u58E4\u5B43\u6059\u63DA\u6518\u656D\u6698\uF97A\u694A\u6A23\u6D0B\u7001\u716C\u75D2\u760D\u79B3\u7A70\uF97B\u7F8A\uF97C\u8944\uF97D\u8B93\u91C0\u967D\uF97E\u990A\u5704\u5FA1\u65BC\u6F01\u7600\u79A6\u8A9E\u99AD\u9B5A\u9F6C\u5104\u61B6\u6291\u6A8D\u81C6\u5043\u5830\u5F66\u7109\u8A00\u8AFA\u5B7C\u8616\u4FFA\u513C\u56B4\u5944\u63A9\u6DF9\u5DAA\u696D\u5186\u4E88\u4F59\uF97F\uF980\uF981\u5982\uF982\"],\n[\"e6a1\",\"\uF983\u6B5F\u6C5D\uF984\u74B5\u7916\uF985\u8207\u8245\u8339\u8F3F\u8F5D\uF986\u9918\uF987\uF988\uF989\u4EA6\uF98A\u57DF\u5F79\u6613\uF98B\uF98C\u75AB\u7E79\u8B6F\uF98D\u9006\u9A5B\u56A5\u5827\u59F8\u5A1F\u5BB4\uF98E\u5EF6\uF98F\uF990\u6350\u633B\uF991\u693D\u6C87\u6CBF\u6D8E\u6D93\u6DF5\u6F14\uF992\u70DF\u7136\u7159\uF993\u71C3\u71D5\uF994\u784F\u786F\uF995\u7B75\u7DE3\uF996\u7E2F\uF997\u884D\u8EDF\uF998\uF999\uF99A\u925B\uF99B\u9CF6\uF99C\uF99D\uF99E\u6085\u6D85\uF99F\u71B1\uF9A0\uF9A1\u95B1\u53AD\uF9A2\uF9A3\uF9A4\u67D3\uF9A5\u708E\u7130\u7430\u8276\u82D2\"],\n[\"e7a1\",\"\uF9A6\u95BB\u9AE5\u9E7D\u66C4\uF9A7\u71C1\u8449\uF9A8\uF9A9\u584B\uF9AA\uF9AB\u5DB8\u5F71\uF9AC\u6620\u668E\u6979\u69AE\u6C38\u6CF3\u6E36\u6F41\u6FDA\u701B\u702F\u7150\u71DF\u7370\uF9AD\u745B\uF9AE\u74D4\u76C8\u7A4E\u7E93\uF9AF\uF9B0\u82F1\u8A60\u8FCE\uF9B1\u9348\uF9B2\u9719\uF9B3\uF9B4\u4E42\u502A\uF9B5\u5208\u53E1\u66F3\u6C6D\u6FCA\u730A\u777F\u7A62\u82AE\u85DD\u8602\uF9B6\u88D4\u8A63\u8B7D\u8C6B\uF9B7\u92B3\uF9B8\u9713\u9810\u4E94\u4F0D\u4FC9\u50B2\u5348\u543E\u5433\u55DA\u5862\u58BA\u5967\u5A1B\u5BE4\u609F\uF9B9\u61CA\u6556\u65FF\u6664\u68A7\u6C5A\u6FB3\"],\n[\"e8a1\",\"\u70CF\u71AC\u7352\u7B7D\u8708\u8AA4\u9C32\u9F07\u5C4B\u6C83\u7344\u7389\u923A\u6EAB\u7465\u761F\u7A69\u7E15\u860A\u5140\u58C5\u64C1\u74EE\u7515\u7670\u7FC1\u9095\u96CD\u9954\u6E26\u74E6\u7AA9\u7AAA\u81E5\u86D9\u8778\u8A1B\u5A49\u5B8C\u5B9B\u68A1\u6900\u6D63\u73A9\u7413\u742C\u7897\u7DE9\u7FEB\u8118\u8155\u839E\u8C4C\u962E\u9811\u66F0\u5F80\u65FA\u6789\u6C6A\u738B\u502D\u5A03\u6B6A\u77EE\u5916\u5D6C\u5DCD\u7325\u754F\uF9BA\uF9BB\u50E5\u51F9\u582F\u592D\u5996\u59DA\u5BE5\uF9BC\uF9BD\u5DA2\u62D7\u6416\u6493\u64FE\uF9BE\u66DC\uF9BF\u6A48\uF9C0\u71FF\u7464\uF9C1\"],\n[\"e9a1\",\"\u7A88\u7AAF\u7E47\u7E5E\u8000\u8170\uF9C2\u87EF\u8981\u8B20\u9059\uF9C3\u9080\u9952\u617E\u6B32\u6D74\u7E1F\u8925\u8FB1\u4FD1\u50AD\u5197\u52C7\u57C7\u5889\u5BB9\u5EB8\u6142\u6995\u6D8C\u6E67\u6EB6\u7194\u7462\u7528\u752C\u8073\u8338\u84C9\u8E0A\u9394\u93DE\uF9C4\u4E8E\u4F51\u5076\u512A\u53C8\u53CB\u53F3\u5B87\u5BD3\u5C24\u611A\u6182\u65F4\u725B\u7397\u7440\u76C2\u7950\u7991\u79B9\u7D06\u7FBD\u828B\u85D5\u865E\u8FC2\u9047\u90F5\u91EA\u9685\u96E8\u96E9\u52D6\u5F67\u65ED\u6631\u682F\u715C\u7A36\u90C1\u980A\u4E91\uF9C5\u6A52\u6B9E\u6F90\u7189\u8018\u82B8\u8553\"],\n[\"eaa1\",\"\u904B\u9695\u96F2\u97FB\u851A\u9B31\u4E90\u718A\u96C4\u5143\u539F\u54E1\u5713\u5712\u57A3\u5A9B\u5AC4\u5BC3\u6028\u613F\u63F4\u6C85\u6D39\u6E72\u6E90\u7230\u733F\u7457\u82D1\u8881\u8F45\u9060\uF9C6\u9662\u9858\u9D1B\u6708\u8D8A\u925E\u4F4D\u5049\u50DE\u5371\u570D\u59D4\u5A01\u5C09\u6170\u6690\u6E2D\u7232\u744B\u7DEF\u80C3\u840E\u8466\u853F\u875F\u885B\u8918\u8B02\u9055\u97CB\u9B4F\u4E73\u4F91\u5112\u516A\uF9C7\u552F\u55A9\u5B7A\u5BA5\u5E7C\u5E7D\u5EBE\u60A0\u60DF\u6108\u6109\u63C4\u6538\u6709\uF9C8\u67D4\u67DA\uF9C9\u6961\u6962\u6CB9\u6D27\uF9CA\u6E38\uF9CB\"],\n[\"eba1\",\"\u6FE1\u7336\u7337\uF9CC\u745C\u7531\uF9CD\u7652\uF9CE\uF9CF\u7DAD\u81FE\u8438\u88D5\u8A98\u8ADB\u8AED\u8E30\u8E42\u904A\u903E\u907A\u9149\u91C9\u936E\uF9D0\uF9D1\u5809\uF9D2\u6BD3\u8089\u80B2\uF9D3\uF9D4\u5141\u596B\u5C39\uF9D5\uF9D6\u6F64\u73A7\u80E4\u8D07\uF9D7\u9217\u958F\uF9D8\uF9D9\uF9DA\uF9DB\u807F\u620E\u701C\u7D68\u878D\uF9DC\u57A0\u6069\u6147\u6BB7\u8ABE\u9280\u96B1\u4E59\u541F\u6DEB\u852D\u9670\u97F3\u98EE\u63D6\u6CE3\u9091\u51DD\u61C9\u81BA\u9DF9\u4F9D\u501A\u5100\u5B9C\u610F\u61FF\u64EC\u6905\u6BC5\u7591\u77E3\u7FA9\u8264\u858F\u87FB\u8863\u8ABC\"],\n[\"eca1\",\"\u8B70\u91AB\u4E8C\u4EE5\u4F0A\uF9DD\uF9DE\u5937\u59E8\uF9DF\u5DF2\u5F1B\u5F5B\u6021\uF9E0\uF9E1\uF9E2\uF9E3\u723E\u73E5\uF9E4\u7570\u75CD\uF9E5\u79FB\uF9E6\u800C\u8033\u8084\u82E1\u8351\uF9E7\uF9E8\u8CBD\u8CB3\u9087\uF9E9\uF9EA\u98F4\u990C\uF9EB\uF9EC\u7037\u76CA\u7FCA\u7FCC\u7FFC\u8B1A\u4EBA\u4EC1\u5203\u5370\uF9ED\u54BD\u56E0\u59FB\u5BC5\u5F15\u5FCD\u6E6E\uF9EE\uF9EF\u7D6A\u8335\uF9F0\u8693\u8A8D\uF9F1\u976D\u9777\uF9F2\uF9F3\u4E00\u4F5A\u4F7E\u58F9\u65E5\u6EA2\u9038\u93B0\u99B9\u4EFB\u58EC\u598A\u59D9\u6041\uF9F4\uF9F5\u7A14\uF9F6\u834F\u8CC3\u5165\u5344\"],\n[\"eda1\",\"\uF9F7\uF9F8\uF9F9\u4ECD\u5269\u5B55\u82BF\u4ED4\u523A\u54A8\u59C9\u59FF\u5B50\u5B57\u5B5C\u6063\u6148\u6ECB\u7099\u716E\u7386\u74F7\u75B5\u78C1\u7D2B\u8005\u81EA\u8328\u8517\u85C9\u8AEE\u8CC7\u96CC\u4F5C\u52FA\u56BC\u65AB\u6628\u707C\u70B8\u7235\u7DBD\u828D\u914C\u96C0\u9D72\u5B71\u68E7\u6B98\u6F7A\u76DE\u5C91\u66AB\u6F5B\u7BB4\u7C2A\u8836\u96DC\u4E08\u4ED7\u5320\u5834\u58BB\u58EF\u596C\u5C07\u5E33\u5E84\u5F35\u638C\u66B2\u6756\u6A1F\u6AA3\u6B0C\u6F3F\u7246\uF9FA\u7350\u748B\u7AE0\u7CA7\u8178\u81DF\u81E7\u838A\u846C\u8523\u8594\u85CF\u88DD\u8D13\u91AC\u9577\"],\n[\"eea1\",\"\u969C\u518D\u54C9\u5728\u5BB0\u624D\u6750\u683D\u6893\u6E3D\u6ED3\u707D\u7E21\u88C1\u8CA1\u8F09\u9F4B\u9F4E\u722D\u7B8F\u8ACD\u931A\u4F47\u4F4E\u5132\u5480\u59D0\u5E95\u62B5\u6775\u696E\u6A17\u6CAE\u6E1A\u72D9\u732A\u75BD\u7BB8\u7D35\u82E7\u83F9\u8457\u85F7\u8A5B\u8CAF\u8E87\u9019\u90B8\u96CE\u9F5F\u52E3\u540A\u5AE1\u5BC2\u6458\u6575\u6EF4\u72C4\uF9FB\u7684\u7A4D\u7B1B\u7C4D\u7E3E\u7FDF\u837B\u8B2B\u8CCA\u8D64\u8DE1\u8E5F\u8FEA\u8FF9\u9069\u93D1\u4F43\u4F7A\u50B3\u5168\u5178\u524D\u526A\u5861\u587C\u5960\u5C08\u5C55\u5EDB\u609B\u6230\u6813\u6BBF\u6C08\u6FB1\"],\n[\"efa1\",\"\u714E\u7420\u7530\u7538\u7551\u7672\u7B4C\u7B8B\u7BAD\u7BC6\u7E8F\u8A6E\u8F3E\u8F49\u923F\u9293\u9322\u942B\u96FB\u985A\u986B\u991E\u5207\u622A\u6298\u6D59\u7664\u7ACA\u7BC0\u7D76\u5360\u5CBE\u5E97\u6F38\u70B9\u7C98\u9711\u9B8E\u9EDE\u63A5\u647A\u8776\u4E01\u4E95\u4EAD\u505C\u5075\u5448\u59C3\u5B9A\u5E40\u5EAD\u5EF7\u5F81\u60C5\u633A\u653F\u6574\u65CC\u6676\u6678\u67FE\u6968\u6A89\u6B63\u6C40\u6DC0\u6DE8\u6E1F\u6E5E\u701E\u70A1\u738E\u73FD\u753A\u775B\u7887\u798E\u7A0B\u7A7D\u7CBE\u7D8E\u8247\u8A02\u8AEA\u8C9E\u912D\u914A\u91D8\u9266\u92CC\u9320\u9706\u9756\"],\n[\"f0a1\",\"\u975C\u9802\u9F0E\u5236\u5291\u557C\u5824\u5E1D\u5F1F\u608C\u63D0\u68AF\u6FDF\u796D\u7B2C\u81CD\u85BA\u88FD\u8AF8\u8E44\u918D\u9664\u969B\u973D\u984C\u9F4A\u4FCE\u5146\u51CB\u52A9\u5632\u5F14\u5F6B\u63AA\u64CD\u65E9\u6641\u66FA\u66F9\u671D\u689D\u68D7\u69FD\u6F15\u6F6E\u7167\u71E5\u722A\u74AA\u773A\u7956\u795A\u79DF\u7A20\u7A95\u7C97\u7CDF\u7D44\u7E70\u8087\u85FB\u86A4\u8A54\u8ABF\u8D99\u8E81\u9020\u906D\u91E3\u963B\u96D5\u9CE5\u65CF\u7C07\u8DB3\u93C3\u5B58\u5C0A\u5352\u62D9\u731D\u5027\u5B97\u5F9E\u60B0\u616B\u68D5\u6DD9\u742E\u7A2E\u7D42\u7D9C\u7E31\u816B\"],\n[\"f1a1\",\"\u8E2A\u8E35\u937E\u9418\u4F50\u5750\u5DE6\u5EA7\u632B\u7F6A\u4E3B\u4F4F\u4F8F\u505A\u59DD\u80C4\u546A\u5468\u55FE\u594F\u5B99\u5DDE\u5EDA\u665D\u6731\u67F1\u682A\u6CE8\u6D32\u6E4A\u6F8D\u70B7\u73E0\u7587\u7C4C\u7D02\u7D2C\u7DA2\u821F\u86DB\u8A3B\u8A85\u8D70\u8E8A\u8F33\u9031\u914E\u9152\u9444\u99D0\u7AF9\u7CA5\u4FCA\u5101\u51C6\u57C8\u5BEF\u5CFB\u6659\u6A3D\u6D5A\u6E96\u6FEC\u710C\u756F\u7AE3\u8822\u9021\u9075\u96CB\u99FF\u8301\u4E2D\u4EF2\u8846\u91CD\u537D\u6ADB\u696B\u6C41\u847A\u589E\u618E\u66FE\u62EF\u70DD\u7511\u75C7\u7E52\u84B8\u8B49\u8D08\u4E4B\u53EA\"],\n[\"f2a1\",\"\u54AB\u5730\u5740\u5FD7\u6301\u6307\u646F\u652F\u65E8\u667A\u679D\u67B3\u6B62\u6C60\u6C9A\u6F2C\u77E5\u7825\u7949\u7957\u7D19\u80A2\u8102\u81F3\u829D\u82B7\u8718\u8A8C\uF9FC\u8D04\u8DBE\u9072\u76F4\u7A19\u7A37\u7E54\u8077\u5507\u55D4\u5875\u632F\u6422\u6649\u664B\u686D\u699B\u6B84\u6D25\u6EB1\u73CD\u7468\u74A1\u755B\u75B9\u76E1\u771E\u778B\u79E6\u7E09\u7E1D\u81FB\u852F\u8897\u8A3A\u8CD1\u8EEB\u8FB0\u9032\u93AD\u9663\u9673\u9707\u4F84\u53F1\u59EA\u5AC9\u5E19\u684E\u74C6\u75BE\u79E9\u7A92\u81A3\u86ED\u8CEA\u8DCC\u8FED\u659F\u6715\uF9FD\u57F7\u6F57\u7DDD\u8F2F\"],\n[\"f3a1\",\"\u93F6\u96C6\u5FB5\u61F2\u6F84\u4E14\u4F98\u501F\u53C9\u55DF\u5D6F\u5DEE\u6B21\u6B64\u78CB\u7B9A\uF9FE\u8E49\u8ECA\u906E\u6349\u643E\u7740\u7A84\u932F\u947F\u9F6A\u64B0\u6FAF\u71E6\u74A8\u74DA\u7AC4\u7C12\u7E82\u7CB2\u7E98\u8B9A\u8D0A\u947D\u9910\u994C\u5239\u5BDF\u64E6\u672D\u7D2E\u50ED\u53C3\u5879\u6158\u6159\u61FA\u65AC\u7AD9\u8B92\u8B96\u5009\u5021\u5275\u5531\u5A3C\u5EE0\u5F70\u6134\u655E\u660C\u6636\u66A2\u69CD\u6EC4\u6F32\u7316\u7621\u7A93\u8139\u8259\u83D6\u84BC\u50B5\u57F0\u5BC0\u5BE8\u5F69\u63A1\u7826\u7DB5\u83DC\u8521\u91C7\u91F5\u518A\u67F5\u7B56\"],\n[\"f4a1\",\"\u8CAC\u51C4\u59BB\u60BD\u8655\u501C\uF9FF\u5254\u5C3A\u617D\u621A\u62D3\u64F2\u65A5\u6ECC\u7620\u810A\u8E60\u965F\u96BB\u4EDF\u5343\u5598\u5929\u5DDD\u64C5\u6CC9\u6DFA\u7394\u7A7F\u821B\u85A6\u8CE4\u8E10\u9077\u91E7\u95E1\u9621\u97C6\u51F8\u54F2\u5586\u5FB9\u64A4\u6F88\u7DB4\u8F1F\u8F4D\u9435\u50C9\u5C16\u6CBE\u6DFB\u751B\u77BB\u7C3D\u7C64\u8A79\u8AC2\u581E\u59BE\u5E16\u6377\u7252\u758A\u776B\u8ADC\u8CBC\u8F12\u5EF3\u6674\u6DF8\u807D\u83C1\u8ACB\u9751\u9BD6\uFA00\u5243\u66FF\u6D95\u6EEF\u7DE0\u8AE6\u902E\u905E\u9AD4\u521D\u527F\u54E8\u6194\u6284\u62DB\u68A2\"],\n[\"f5a1\",\"\u6912\u695A\u6A35\u7092\u7126\u785D\u7901\u790E\u79D2\u7A0D\u8096\u8278\u82D5\u8349\u8549\u8C82\u8D85\u9162\u918B\u91AE\u4FC3\u56D1\u71ED\u77D7\u8700\u89F8\u5BF8\u5FD6\u6751\u90A8\u53E2\u585A\u5BF5\u60A4\u6181\u6460\u7E3D\u8070\u8525\u9283\u64AE\u50AC\u5D14\u6700\u589C\u62BD\u63A8\u690E\u6978\u6A1E\u6E6B\u76BA\u79CB\u82BB\u8429\u8ACF\u8DA8\u8FFD\u9112\u914B\u919C\u9310\u9318\u939A\u96DB\u9A36\u9C0D\u4E11\u755C\u795D\u7AFA\u7B51\u7BC9\u7E2E\u84C4\u8E59\u8E74\u8EF8\u9010\u6625\u693F\u7443\u51FA\u672E\u9EDC\u5145\u5FE0\u6C96\u87F2\u885D\u8877\u60B4\u81B5\u8403\"],\n[\"f6a1\",\"\u8D05\u53D6\u5439\u5634\u5A36\u5C31\u708A\u7FE0\u805A\u8106\u81ED\u8DA3\u9189\u9A5F\u9DF2\u5074\u4EC4\u53A0\u60FB\u6E2C\u5C64\u4F88\u5024\u55E4\u5CD9\u5E5F\u6065\u6894\u6CBB\u6DC4\u71BE\u75D4\u75F4\u7661\u7A1A\u7A49\u7DC7\u7DFB\u7F6E\u81F4\u86A9\u8F1C\u96C9\u99B3\u9F52\u5247\u52C5\u98ED\u89AA\u4E03\u67D2\u6F06\u4FB5\u5BE2\u6795\u6C88\u6D78\u741B\u7827\u91DD\u937C\u87C4\u79E4\u7A31\u5FEB\u4ED6\u54A4\u553E\u58AE\u59A5\u60F0\u6253\u62D6\u6736\u6955\u8235\u9640\u99B1\u99DD\u502C\u5353\u5544\u577C\uFA01\u6258\uFA02\u64E2\u666B\u67DD\u6FC1\u6FEF\u7422\u7438\u8A17\"],\n[\"f7a1\",\"\u9438\u5451\u5606\u5766\u5F48\u619A\u6B4E\u7058\u70AD\u7DBB\u8A95\u596A\u812B\u63A2\u7708\u803D\u8CAA\u5854\u642D\u69BB\u5B95\u5E11\u6E6F\uFA03\u8569\u514C\u53F0\u592A\u6020\u614B\u6B86\u6C70\u6CF0\u7B1E\u80CE\u82D4\u8DC6\u90B0\u98B1\uFA04\u64C7\u6FA4\u6491\u6504\u514E\u5410\u571F\u8A0E\u615F\u6876\uFA05\u75DB\u7B52\u7D71\u901A\u5806\u69CC\u817F\u892A\u9000\u9839\u5078\u5957\u59AC\u6295\u900F\u9B2A\u615D\u7279\u95D6\u5761\u5A46\u5DF4\u628A\u64AD\u64FA\u6777\u6CE2\u6D3E\u722C\u7436\u7834\u7F77\u82AD\u8DDB\u9817\u5224\u5742\u677F\u7248\u74E3\u8CA9\u8FA6\u9211\"],\n[\"f8a1\",\"\u962A\u516B\u53ED\u634C\u4F69\u5504\u6096\u6557\u6C9B\u6D7F\u724C\u72FD\u7A17\u8987\u8C9D\u5F6D\u6F8E\u70F9\u81A8\u610E\u4FBF\u504F\u6241\u7247\u7BC7\u7DE8\u7FE9\u904D\u97AD\u9A19\u8CB6\u576A\u5E73\u67B0\u840D\u8A55\u5420\u5B16\u5E63\u5EE2\u5F0A\u6583\u80BA\u853D\u9589\u965B\u4F48\u5305\u530D\u530F\u5486\u54FA\u5703\u5E03\u6016\u629B\u62B1\u6355\uFA06\u6CE1\u6D66\u75B1\u7832\u80DE\u812F\u82DE\u8461\u84B2\u888D\u8912\u900B\u92EA\u98FD\u9B91\u5E45\u66B4\u66DD\u7011\u7206\uFA07\u4FF5\u527D\u5F6A\u6153\u6753\u6A19\u6F02\u74E2\u7968\u8868\u8C79\u98C7\u98C4\u9A43\"],\n[\"f9a1\",\"\u54C1\u7A1F\u6953\u8AF7\u8C4A\u98A8\u99AE\u5F7C\u62AB\u75B2\u76AE\u88AB\u907F\u9642\u5339\u5F3C\u5FC5\u6CCC\u73CC\u7562\u758B\u7B46\u82FE\u999D\u4E4F\u903C\u4E0B\u4F55\u53A6\u590F\u5EC8\u6630\u6CB3\u7455\u8377\u8766\u8CC0\u9050\u971E\u9C15\u58D1\u5B78\u8650\u8B14\u9DB4\u5BD2\u6068\u608D\u65F1\u6C57\u6F22\u6FA3\u701A\u7F55\u7FF0\u9591\u9592\u9650\u97D3\u5272\u8F44\u51FD\u542B\u54B8\u5563\u558A\u6ABB\u6DB5\u7DD8\u8266\u929C\u9677\u9E79\u5408\u54C8\u76D2\u86E4\u95A4\u95D4\u965C\u4EA2\u4F09\u59EE\u5AE6\u5DF7\u6052\u6297\u676D\u6841\u6C86\u6E2F\u7F38\u809B\u822A\"],\n[\"faa1\",\"\uFA08\uFA09\u9805\u4EA5\u5055\u54B3\u5793\u595A\u5B69\u5BB3\u61C8\u6977\u6D77\u7023\u87F9\u89E3\u8A72\u8AE7\u9082\u99ED\u9AB8\u52BE\u6838\u5016\u5E78\u674F\u8347\u884C\u4EAB\u5411\u56AE\u73E6\u9115\u97FF\u9909\u9957\u9999\u5653\u589F\u865B\u8A31\u61B2\u6AF6\u737B\u8ED2\u6B47\u96AA\u9A57\u5955\u7200\u8D6B\u9769\u4FD4\u5CF4\u5F26\u61F8\u665B\u6CEB\u70AB\u7384\u73B9\u73FE\u7729\u774D\u7D43\u7D62\u7E23\u8237\u8852\uFA0A\u8CE2\u9249\u986F\u5B51\u7A74\u8840\u9801\u5ACC\u4FE0\u5354\u593E\u5CFD\u633E\u6D79\u72F9\u8105\u8107\u83A2\u92CF\u9830\u4EA8\u5144\u5211\u578B\"],\n[\"fba1\",\"\u5F62\u6CC2\u6ECE\u7005\u7050\u70AF\u7192\u73E9\u7469\u834A\u87A2\u8861\u9008\u90A2\u93A3\u99A8\u516E\u5F57\u60E0\u6167\u66B3\u8559\u8E4A\u91AF\u978B\u4E4E\u4E92\u547C\u58D5\u58FA\u597D\u5CB5\u5F27\u6236\u6248\u660A\u6667\u6BEB\u6D69\u6DCF\u6E56\u6EF8\u6F94\u6FE0\u6FE9\u705D\u72D0\u7425\u745A\u74E0\u7693\u795C\u7CCA\u7E1E\u80E1\u82A6\u846B\u84BF\u864E\u865F\u8774\u8B77\u8C6A\u93AC\u9800\u9865\u60D1\u6216\u9177\u5A5A\u660F\u6DF7\u6E3E\u743F\u9B42\u5FFD\u60DA\u7B0F\u54C4\u5F18\u6C5E\u6CD3\u6D2A\u70D8\u7D05\u8679\u8A0C\u9D3B\u5316\u548C\u5B05\u6A3A\u706B\u7575\"],\n[\"fca1\",\"\u798D\u79BE\u82B1\u83EF\u8A71\u8B41\u8CA8\u9774\uFA0B\u64F4\u652B\u78BA\u78BB\u7A6B\u4E38\u559A\u5950\u5BA6\u5E7B\u60A3\u63DB\u6B61\u6665\u6853\u6E19\u7165\u74B0\u7D08\u9084\u9A69\u9C25\u6D3B\u6ED1\u733E\u8C41\u95CA\u51F0\u5E4C\u5FA8\u604D\u60F6\u6130\u614C\u6643\u6644\u69A5\u6CC1\u6E5F\u6EC9\u6F62\u714C\u749C\u7687\u7BC1\u7C27\u8352\u8757\u9051\u968D\u9EC3\u532F\u56DE\u5EFB\u5F8A\u6062\u6094\u61F7\u6666\u6703\u6A9C\u6DEE\u6FAE\u7070\u736A\u7E6A\u81BE\u8334\u86D4\u8AA8\u8CC4\u5283\u7372\u5B96\u6A6B\u9404\u54EE\u5686\u5B5D\u6548\u6585\u66C9\u689F\u6D8D\u6DC6\"],\n[\"fda1\",\"\u723B\u80B4\u9175\u9A4D\u4FAF\u5019\u539A\u540E\u543C\u5589\u55C5\u5E3F\u5F8C\u673D\u7166\u73DD\u9005\u52DB\u52F3\u5864\u58CE\u7104\u718F\u71FB\u85B0\u8A13\u6688\u85A8\u55A7\u6684\u714A\u8431\u5349\u5599\u6BC1\u5F59\u5FBD\u63EE\u6689\u7147\u8AF1\u8F1D\u9EBE\u4F11\u643A\u70CB\u7566\u8667\u6064\u8B4E\u9DF8\u5147\u51F6\u5308\u6D36\u80F8\u9ED1\u6615\u6B23\u7098\u75D5\u5403\u5C79\u7D07\u8A16\u6B20\u6B3D\u6B46\u5438\u6070\u6D3D\u7FD5\u8208\u50D6\u51DE\u559C\u566B\u56CD\u59EC\u5B09\u5E0C\u6199\u6198\u6231\u665E\u66E6\u7199\u71B9\u71BA\u72A7\u79A7\u7A00\u7FB2\u8A70\"]\n]\n", "[\n[\"0\",\"\\u0000\",127],\n[\"a140\",\"\u3000\uFF0C\u3001\u3002\uFF0E\u2027\uFF1B\uFF1A\uFF1F\uFF01\uFE30\u2026\u2025\uFE50\uFE51\uFE52\u00B7\uFE54\uFE55\uFE56\uFE57\uFF5C\u2013\uFE31\u2014\uFE33\u2574\uFE34\uFE4F\uFF08\uFF09\uFE35\uFE36\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39\uFE3A\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D\uFE3E\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41\uFE42\u300E\u300F\uFE43\uFE44\uFE59\uFE5A\"],\n[\"a1a1\",\"\uFE5B\uFE5C\uFE5D\uFE5E\u2018\u2019\u201C\u201D\u301D\u301E\u2035\u2032\uFF03\uFF06\uFF0A\u203B\u00A7\u3003\u25CB\u25CF\u25B3\u25B2\u25CE\u2606\u2605\u25C7\u25C6\u25A1\u25A0\u25BD\u25BC\u32A3\u2105\u00AF\uFFE3\uFF3F\u02CD\uFE49\uFE4A\uFE4D\uFE4E\uFE4B\uFE4C\uFE5F\uFE60\uFE61\uFF0B\uFF0D\u00D7\u00F7\u00B1\u221A\uFF1C\uFF1E\uFF1D\u2266\u2267\u2260\u221E\u2252\u2261\uFE62\",4,\"\uFF5E\u2229\u222A\u22A5\u2220\u221F\u22BF\u33D2\u33D1\u222B\u222E\u2235\u2234\u2640\u2642\u2295\u2299\u2191\u2193\u2190\u2192\u2196\u2197\u2199\u2198\u2225\u2223\uFF0F\"],\n[\"a240\",\"\uFF3C\u2215\uFE68\uFF04\uFFE5\u3012\uFFE0\uFFE1\uFF05\uFF20\u2103\u2109\uFE69\uFE6A\uFE6B\u33D5\u339C\u339D\u339E\u33CE\u33A1\u338E\u338F\u33C4\u00B0\u5159\u515B\u515E\u515D\u5161\u5163\u55E7\u74E9\u7CCE\u2581\",7,\"\u258F\u258E\u258D\u258C\u258B\u258A\u2589\u253C\u2534\u252C\u2524\u251C\u2594\u2500\u2502\u2595\u250C\u2510\u2514\u2518\u256D\"],\n[\"a2a1\",\"\u256E\u2570\u256F\u2550\u255E\u256A\u2561\u25E2\u25E3\u25E5\u25E4\u2571\u2572\u2573\uFF10\",9,\"\u2160\",9,\"\u3021\",8,\"\u5341\u5344\u5345\uFF21\",25,\"\uFF41\",21],\n[\"a340\",\"\uFF57\uFF58\uFF59\uFF5A\u0391\",16,\"\u03A3\",6,\"\u03B1\",16,\"\u03C3\",6,\"\u3105\",10],\n[\"a3a1\",\"\u3110\",25,\"\u02D9\u02C9\u02CA\u02C7\u02CB\"],\n[\"a3e1\",\"\u20AC\"],\n[\"a440\",\"\u4E00\u4E59\u4E01\u4E03\u4E43\u4E5D\u4E86\u4E8C\u4EBA\u513F\u5165\u516B\u51E0\u5200\u5201\u529B\u5315\u5341\u535C\u53C8\u4E09\u4E0B\u4E08\u4E0A\u4E2B\u4E38\u51E1\u4E45\u4E48\u4E5F\u4E5E\u4E8E\u4EA1\u5140\u5203\u52FA\u5343\u53C9\u53E3\u571F\u58EB\u5915\u5927\u5973\u5B50\u5B51\u5B53\u5BF8\u5C0F\u5C22\u5C38\u5C71\u5DDD\u5DE5\u5DF1\u5DF2\u5DF3\u5DFE\u5E72\u5EFE\u5F0B\u5F13\u624D\"],\n[\"a4a1\",\"\u4E11\u4E10\u4E0D\u4E2D\u4E30\u4E39\u4E4B\u5C39\u4E88\u4E91\u4E95\u4E92\u4E94\u4EA2\u4EC1\u4EC0\u4EC3\u4EC6\u4EC7\u4ECD\u4ECA\u4ECB\u4EC4\u5143\u5141\u5167\u516D\u516E\u516C\u5197\u51F6\u5206\u5207\u5208\u52FB\u52FE\u52FF\u5316\u5339\u5348\u5347\u5345\u535E\u5384\u53CB\u53CA\u53CD\u58EC\u5929\u592B\u592A\u592D\u5B54\u5C11\u5C24\u5C3A\u5C6F\u5DF4\u5E7B\u5EFF\u5F14\u5F15\u5FC3\u6208\u6236\u624B\u624E\u652F\u6587\u6597\u65A4\u65B9\u65E5\u66F0\u6708\u6728\u6B20\u6B62\u6B79\u6BCB\u6BD4\u6BDB\u6C0F\u6C34\u706B\u722A\u7236\u723B\u7247\u7259\u725B\u72AC\u738B\u4E19\"],\n[\"a540\",\"\u4E16\u4E15\u4E14\u4E18\u4E3B\u4E4D\u4E4F\u4E4E\u4EE5\u4ED8\u4ED4\u4ED5\u4ED6\u4ED7\u4EE3\u4EE4\u4ED9\u4EDE\u5145\u5144\u5189\u518A\u51AC\u51F9\u51FA\u51F8\u520A\u52A0\u529F\u5305\u5306\u5317\u531D\u4EDF\u534A\u5349\u5361\u5360\u536F\u536E\u53BB\u53EF\u53E4\u53F3\u53EC\u53EE\u53E9\u53E8\u53FC\u53F8\u53F5\u53EB\u53E6\u53EA\u53F2\u53F1\u53F0\u53E5\u53ED\u53FB\u56DB\u56DA\u5916\"],\n[\"a5a1\",\"\u592E\u5931\u5974\u5976\u5B55\u5B83\u5C3C\u5DE8\u5DE7\u5DE6\u5E02\u5E03\u5E73\u5E7C\u5F01\u5F18\u5F17\u5FC5\u620A\u6253\u6254\u6252\u6251\u65A5\u65E6\u672E\u672C\u672A\u672B\u672D\u6B63\u6BCD\u6C11\u6C10\u6C38\u6C41\u6C40\u6C3E\u72AF\u7384\u7389\u74DC\u74E6\u7518\u751F\u7528\u7529\u7530\u7531\u7532\u7533\u758B\u767D\u76AE\u76BF\u76EE\u77DB\u77E2\u77F3\u793A\u79BE\u7A74\u7ACB\u4E1E\u4E1F\u4E52\u4E53\u4E69\u4E99\u4EA4\u4EA6\u4EA5\u4EFF\u4F09\u4F19\u4F0A\u4F15\u4F0D\u4F10\u4F11\u4F0F\u4EF2\u4EF6\u4EFB\u4EF0\u4EF3\u4EFD\u4F01\u4F0B\u5149\u5147\u5146\u5148\u5168\"],\n[\"a640\",\"\u5171\u518D\u51B0\u5217\u5211\u5212\u520E\u5216\u52A3\u5308\u5321\u5320\u5370\u5371\u5409\u540F\u540C\u540A\u5410\u5401\u540B\u5404\u5411\u540D\u5408\u5403\u540E\u5406\u5412\u56E0\u56DE\u56DD\u5733\u5730\u5728\u572D\u572C\u572F\u5729\u5919\u591A\u5937\u5938\u5984\u5978\u5983\u597D\u5979\u5982\u5981\u5B57\u5B58\u5B87\u5B88\u5B85\u5B89\u5BFA\u5C16\u5C79\u5DDE\u5E06\u5E76\u5E74\"],\n[\"a6a1\",\"\u5F0F\u5F1B\u5FD9\u5FD6\u620E\u620C\u620D\u6210\u6263\u625B\u6258\u6536\u65E9\u65E8\u65EC\u65ED\u66F2\u66F3\u6709\u673D\u6734\u6731\u6735\u6B21\u6B64\u6B7B\u6C16\u6C5D\u6C57\u6C59\u6C5F\u6C60\u6C50\u6C55\u6C61\u6C5B\u6C4D\u6C4E\u7070\u725F\u725D\u767E\u7AF9\u7C73\u7CF8\u7F36\u7F8A\u7FBD\u8001\u8003\u800C\u8012\u8033\u807F\u8089\u808B\u808C\u81E3\u81EA\u81F3\u81FC\u820C\u821B\u821F\u826E\u8272\u827E\u866B\u8840\u884C\u8863\u897F\u9621\u4E32\u4EA8\u4F4D\u4F4F\u4F47\u4F57\u4F5E\u4F34\u4F5B\u4F55\u4F30\u4F50\u4F51\u4F3D\u4F3A\u4F38\u4F43\u4F54\u4F3C\u4F46\u4F63\"],\n[\"a740\",\"\u4F5C\u4F60\u4F2F\u4F4E\u4F36\u4F59\u4F5D\u4F48\u4F5A\u514C\u514B\u514D\u5175\u51B6\u51B7\u5225\u5224\u5229\u522A\u5228\u52AB\u52A9\u52AA\u52AC\u5323\u5373\u5375\u541D\u542D\u541E\u543E\u5426\u544E\u5427\u5446\u5443\u5433\u5448\u5442\u541B\u5429\u544A\u5439\u543B\u5438\u542E\u5435\u5436\u5420\u543C\u5440\u5431\u542B\u541F\u542C\u56EA\u56F0\u56E4\u56EB\u574A\u5751\u5740\u574D\"],\n[\"a7a1\",\"\u5747\u574E\u573E\u5750\u574F\u573B\u58EF\u593E\u599D\u5992\u59A8\u599E\u59A3\u5999\u5996\u598D\u59A4\u5993\u598A\u59A5\u5B5D\u5B5C\u5B5A\u5B5B\u5B8C\u5B8B\u5B8F\u5C2C\u5C40\u5C41\u5C3F\u5C3E\u5C90\u5C91\u5C94\u5C8C\u5DEB\u5E0C\u5E8F\u5E87\u5E8A\u5EF7\u5F04\u5F1F\u5F64\u5F62\u5F77\u5F79\u5FD8\u5FCC\u5FD7\u5FCD\u5FF1\u5FEB\u5FF8\u5FEA\u6212\u6211\u6284\u6297\u6296\u6280\u6276\u6289\u626D\u628A\u627C\u627E\u6279\u6273\u6292\u626F\u6298\u626E\u6295\u6293\u6291\u6286\u6539\u653B\u6538\u65F1\u66F4\u675F\u674E\u674F\u6750\u6751\u675C\u6756\u675E\u6749\u6746\u6760\"],\n[\"a840\",\"\u6753\u6757\u6B65\u6BCF\u6C42\u6C5E\u6C99\u6C81\u6C88\u6C89\u6C85\u6C9B\u6C6A\u6C7A\u6C90\u6C70\u6C8C\u6C68\u6C96\u6C92\u6C7D\u6C83\u6C72\u6C7E\u6C74\u6C86\u6C76\u6C8D\u6C94\u6C98\u6C82\u7076\u707C\u707D\u7078\u7262\u7261\u7260\u72C4\u72C2\u7396\u752C\u752B\u7537\u7538\u7682\u76EF\u77E3\u79C1\u79C0\u79BF\u7A76\u7CFB\u7F55\u8096\u8093\u809D\u8098\u809B\u809A\u80B2\u826F\u8292\"],\n[\"a8a1\",\"\u828B\u828D\u898B\u89D2\u8A00\u8C37\u8C46\u8C55\u8C9D\u8D64\u8D70\u8DB3\u8EAB\u8ECA\u8F9B\u8FB0\u8FC2\u8FC6\u8FC5\u8FC4\u5DE1\u9091\u90A2\u90AA\u90A6\u90A3\u9149\u91C6\u91CC\u9632\u962E\u9631\u962A\u962C\u4E26\u4E56\u4E73\u4E8B\u4E9B\u4E9E\u4EAB\u4EAC\u4F6F\u4F9D\u4F8D\u4F73\u4F7F\u4F6C\u4F9B\u4F8B\u4F86\u4F83\u4F70\u4F75\u4F88\u4F69\u4F7B\u4F96\u4F7E\u4F8F\u4F91\u4F7A\u5154\u5152\u5155\u5169\u5177\u5176\u5178\u51BD\u51FD\u523B\u5238\u5237\u523A\u5230\u522E\u5236\u5241\u52BE\u52BB\u5352\u5354\u5353\u5351\u5366\u5377\u5378\u5379\u53D6\u53D4\u53D7\u5473\u5475\"],\n[\"a940\",\"\u5496\u5478\u5495\u5480\u547B\u5477\u5484\u5492\u5486\u547C\u5490\u5471\u5476\u548C\u549A\u5462\u5468\u548B\u547D\u548E\u56FA\u5783\u5777\u576A\u5769\u5761\u5766\u5764\u577C\u591C\u5949\u5947\u5948\u5944\u5954\u59BE\u59BB\u59D4\u59B9\u59AE\u59D1\u59C6\u59D0\u59CD\u59CB\u59D3\u59CA\u59AF\u59B3\u59D2\u59C5\u5B5F\u5B64\u5B63\u5B97\u5B9A\u5B98\u5B9C\u5B99\u5B9B\u5C1A\u5C48\u5C45\"],\n[\"a9a1\",\"\u5C46\u5CB7\u5CA1\u5CB8\u5CA9\u5CAB\u5CB1\u5CB3\u5E18\u5E1A\u5E16\u5E15\u5E1B\u5E11\u5E78\u5E9A\u5E97\u5E9C\u5E95\u5E96\u5EF6\u5F26\u5F27\u5F29\u5F80\u5F81\u5F7F\u5F7C\u5FDD\u5FE0\u5FFD\u5FF5\u5FFF\u600F\u6014\u602F\u6035\u6016\u602A\u6015\u6021\u6027\u6029\u602B\u601B\u6216\u6215\u623F\u623E\u6240\u627F\u62C9\u62CC\u62C4\u62BF\u62C2\u62B9\u62D2\u62DB\u62AB\u62D3\u62D4\u62CB\u62C8\u62A8\u62BD\u62BC\u62D0\u62D9\u62C7\u62CD\u62B5\u62DA\u62B1\u62D8\u62D6\u62D7\u62C6\u62AC\u62CE\u653E\u65A7\u65BC\u65FA\u6614\u6613\u660C\u6606\u6602\u660E\u6600\u660F\u6615\u660A\"],\n[\"aa40\",\"\u6607\u670D\u670B\u676D\u678B\u6795\u6771\u679C\u6773\u6777\u6787\u679D\u6797\u676F\u6770\u677F\u6789\u677E\u6790\u6775\u679A\u6793\u677C\u676A\u6772\u6B23\u6B66\u6B67\u6B7F\u6C13\u6C1B\u6CE3\u6CE8\u6CF3\u6CB1\u6CCC\u6CE5\u6CB3\u6CBD\u6CBE\u6CBC\u6CE2\u6CAB\u6CD5\u6CD3\u6CB8\u6CC4\u6CB9\u6CC1\u6CAE\u6CD7\u6CC5\u6CF1\u6CBF\u6CBB\u6CE1\u6CDB\u6CCA\u6CAC\u6CEF\u6CDC\u6CD6\u6CE0\"],\n[\"aaa1\",\"\u7095\u708E\u7092\u708A\u7099\u722C\u722D\u7238\u7248\u7267\u7269\u72C0\u72CE\u72D9\u72D7\u72D0\u73A9\u73A8\u739F\u73AB\u73A5\u753D\u759D\u7599\u759A\u7684\u76C2\u76F2\u76F4\u77E5\u77FD\u793E\u7940\u7941\u79C9\u79C8\u7A7A\u7A79\u7AFA\u7CFE\u7F54\u7F8C\u7F8B\u8005\u80BA\u80A5\u80A2\u80B1\u80A1\u80AB\u80A9\u80B4\u80AA\u80AF\u81E5\u81FE\u820D\u82B3\u829D\u8299\u82AD\u82BD\u829F\u82B9\u82B1\u82AC\u82A5\u82AF\u82B8\u82A3\u82B0\u82BE\u82B7\u864E\u8671\u521D\u8868\u8ECB\u8FCE\u8FD4\u8FD1\u90B5\u90B8\u90B1\u90B6\u91C7\u91D1\u9577\u9580\u961C\u9640\u963F\u963B\u9644\"],\n[\"ab40\",\"\u9642\u96B9\u96E8\u9752\u975E\u4E9F\u4EAD\u4EAE\u4FE1\u4FB5\u4FAF\u4FBF\u4FE0\u4FD1\u4FCF\u4FDD\u4FC3\u4FB6\u4FD8\u4FDF\u4FCA\u4FD7\u4FAE\u4FD0\u4FC4\u4FC2\u4FDA\u4FCE\u4FDE\u4FB7\u5157\u5192\u5191\u51A0\u524E\u5243\u524A\u524D\u524C\u524B\u5247\u52C7\u52C9\u52C3\u52C1\u530D\u5357\u537B\u539A\u53DB\u54AC\u54C0\u54A8\u54CE\u54C9\u54B8\u54A6\u54B3\u54C7\u54C2\u54BD\u54AA\u54C1\"],\n[\"aba1\",\"\u54C4\u54C8\u54AF\u54AB\u54B1\u54BB\u54A9\u54A7\u54BF\u56FF\u5782\u578B\u57A0\u57A3\u57A2\u57CE\u57AE\u5793\u5955\u5951\u594F\u594E\u5950\u59DC\u59D8\u59FF\u59E3\u59E8\u5A03\u59E5\u59EA\u59DA\u59E6\u5A01\u59FB\u5B69\u5BA3\u5BA6\u5BA4\u5BA2\u5BA5\u5C01\u5C4E\u5C4F\u5C4D\u5C4B\u5CD9\u5CD2\u5DF7\u5E1D\u5E25\u5E1F\u5E7D\u5EA0\u5EA6\u5EFA\u5F08\u5F2D\u5F65\u5F88\u5F85\u5F8A\u5F8B\u5F87\u5F8C\u5F89\u6012\u601D\u6020\u6025\u600E\u6028\u604D\u6070\u6068\u6062\u6046\u6043\u606C\u606B\u606A\u6064\u6241\u62DC\u6316\u6309\u62FC\u62ED\u6301\u62EE\u62FD\u6307\u62F1\u62F7\"],\n[\"ac40\",\"\u62EF\u62EC\u62FE\u62F4\u6311\u6302\u653F\u6545\u65AB\u65BD\u65E2\u6625\u662D\u6620\u6627\u662F\u661F\u6628\u6631\u6624\u66F7\u67FF\u67D3\u67F1\u67D4\u67D0\u67EC\u67B6\u67AF\u67F5\u67E9\u67EF\u67C4\u67D1\u67B4\u67DA\u67E5\u67B8\u67CF\u67DE\u67F3\u67B0\u67D9\u67E2\u67DD\u67D2\u6B6A\u6B83\u6B86\u6BB5\u6BD2\u6BD7\u6C1F\u6CC9\u6D0B\u6D32\u6D2A\u6D41\u6D25\u6D0C\u6D31\u6D1E\u6D17\"],\n[\"aca1\",\"\u6D3B\u6D3D\u6D3E\u6D36\u6D1B\u6CF5\u6D39\u6D27\u6D38\u6D29\u6D2E\u6D35\u6D0E\u6D2B\u70AB\u70BA\u70B3\u70AC\u70AF\u70AD\u70B8\u70AE\u70A4\u7230\u7272\u726F\u7274\u72E9\u72E0\u72E1\u73B7\u73CA\u73BB\u73B2\u73CD\u73C0\u73B3\u751A\u752D\u754F\u754C\u754E\u754B\u75AB\u75A4\u75A5\u75A2\u75A3\u7678\u7686\u7687\u7688\u76C8\u76C6\u76C3\u76C5\u7701\u76F9\u76F8\u7709\u770B\u76FE\u76FC\u7707\u77DC\u7802\u7814\u780C\u780D\u7946\u7949\u7948\u7947\u79B9\u79BA\u79D1\u79D2\u79CB\u7A7F\u7A81\u7AFF\u7AFD\u7C7D\u7D02\u7D05\u7D00\u7D09\u7D07\u7D04\u7D06\u7F38\u7F8E\u7FBF\u8004\"],\n[\"ad40\",\"\u8010\u800D\u8011\u8036\u80D6\u80E5\u80DA\u80C3\u80C4\u80CC\u80E1\u80DB\u80CE\u80DE\u80E4\u80DD\u81F4\u8222\u82E7\u8303\u8305\u82E3\u82DB\u82E6\u8304\u82E5\u8302\u8309\u82D2\u82D7\u82F1\u8301\u82DC\u82D4\u82D1\u82DE\u82D3\u82DF\u82EF\u8306\u8650\u8679\u867B\u867A\u884D\u886B\u8981\u89D4\u8A08\u8A02\u8A03\u8C9E\u8CA0\u8D74\u8D73\u8DB4\u8ECD\u8ECC\u8FF0\u8FE6\u8FE2\u8FEA\u8FE5\"],\n[\"ada1\",\"\u8FED\u8FEB\u8FE4\u8FE8\u90CA\u90CE\u90C1\u90C3\u914B\u914A\u91CD\u9582\u9650\u964B\u964C\u964D\u9762\u9769\u97CB\u97ED\u97F3\u9801\u98A8\u98DB\u98DF\u9996\u9999\u4E58\u4EB3\u500C\u500D\u5023\u4FEF\u5026\u5025\u4FF8\u5029\u5016\u5006\u503C\u501F\u501A\u5012\u5011\u4FFA\u5000\u5014\u5028\u4FF1\u5021\u500B\u5019\u5018\u4FF3\u4FEE\u502D\u502A\u4FFE\u502B\u5009\u517C\u51A4\u51A5\u51A2\u51CD\u51CC\u51C6\u51CB\u5256\u525C\u5254\u525B\u525D\u532A\u537F\u539F\u539D\u53DF\u54E8\u5510\u5501\u5537\u54FC\u54E5\u54F2\u5506\u54FA\u5514\u54E9\u54ED\u54E1\u5509\u54EE\u54EA\"],\n[\"ae40\",\"\u54E6\u5527\u5507\u54FD\u550F\u5703\u5704\u57C2\u57D4\u57CB\u57C3\u5809\u590F\u5957\u5958\u595A\u5A11\u5A18\u5A1C\u5A1F\u5A1B\u5A13\u59EC\u5A20\u5A23\u5A29\u5A25\u5A0C\u5A09\u5B6B\u5C58\u5BB0\u5BB3\u5BB6\u5BB4\u5BAE\u5BB5\u5BB9\u5BB8\u5C04\u5C51\u5C55\u5C50\u5CED\u5CFD\u5CFB\u5CEA\u5CE8\u5CF0\u5CF6\u5D01\u5CF4\u5DEE\u5E2D\u5E2B\u5EAB\u5EAD\u5EA7\u5F31\u5F92\u5F91\u5F90\u6059\"],\n[\"aea1\",\"\u6063\u6065\u6050\u6055\u606D\u6069\u606F\u6084\u609F\u609A\u608D\u6094\u608C\u6085\u6096\u6247\u62F3\u6308\u62FF\u634E\u633E\u632F\u6355\u6342\u6346\u634F\u6349\u633A\u6350\u633D\u632A\u632B\u6328\u634D\u634C\u6548\u6549\u6599\u65C1\u65C5\u6642\u6649\u664F\u6643\u6652\u664C\u6645\u6641\u66F8\u6714\u6715\u6717\u6821\u6838\u6848\u6846\u6853\u6839\u6842\u6854\u6829\u68B3\u6817\u684C\u6851\u683D\u67F4\u6850\u6840\u683C\u6843\u682A\u6845\u6813\u6818\u6841\u6B8A\u6B89\u6BB7\u6C23\u6C27\u6C28\u6C26\u6C24\u6CF0\u6D6A\u6D95\u6D88\u6D87\u6D66\u6D78\u6D77\u6D59\u6D93\"],\n[\"af40\",\"\u6D6C\u6D89\u6D6E\u6D5A\u6D74\u6D69\u6D8C\u6D8A\u6D79\u6D85\u6D65\u6D94\u70CA\u70D8\u70E4\u70D9\u70C8\u70CF\u7239\u7279\u72FC\u72F9\u72FD\u72F8\u72F7\u7386\u73ED\u7409\u73EE\u73E0\u73EA\u73DE\u7554\u755D\u755C\u755A\u7559\u75BE\u75C5\u75C7\u75B2\u75B3\u75BD\u75BC\u75B9\u75C2\u75B8\u768B\u76B0\u76CA\u76CD\u76CE\u7729\u771F\u7720\u7728\u77E9\u7830\u7827\u7838\u781D\u7834\u7837\"],\n[\"afa1\",\"\u7825\u782D\u7820\u781F\u7832\u7955\u7950\u7960\u795F\u7956\u795E\u795D\u7957\u795A\u79E4\u79E3\u79E7\u79DF\u79E6\u79E9\u79D8\u7A84\u7A88\u7AD9\u7B06\u7B11\u7C89\u7D21\u7D17\u7D0B\u7D0A\u7D20\u7D22\u7D14\u7D10\u7D15\u7D1A\u7D1C\u7D0D\u7D19\u7D1B\u7F3A\u7F5F\u7F94\u7FC5\u7FC1\u8006\u8018\u8015\u8019\u8017\u803D\u803F\u80F1\u8102\u80F0\u8105\u80ED\u80F4\u8106\u80F8\u80F3\u8108\u80FD\u810A\u80FC\u80EF\u81ED\u81EC\u8200\u8210\u822A\u822B\u8228\u822C\u82BB\u832B\u8352\u8354\u834A\u8338\u8350\u8349\u8335\u8334\u834F\u8332\u8339\u8336\u8317\u8340\u8331\u8328\u8343\"],\n[\"b040\",\"\u8654\u868A\u86AA\u8693\u86A4\u86A9\u868C\u86A3\u869C\u8870\u8877\u8881\u8882\u887D\u8879\u8A18\u8A10\u8A0E\u8A0C\u8A15\u8A0A\u8A17\u8A13\u8A16\u8A0F\u8A11\u8C48\u8C7A\u8C79\u8CA1\u8CA2\u8D77\u8EAC\u8ED2\u8ED4\u8ECF\u8FB1\u9001\u9006\u8FF7\u9000\u8FFA\u8FF4\u9003\u8FFD\u9005\u8FF8\u9095\u90E1\u90DD\u90E2\u9152\u914D\u914C\u91D8\u91DD\u91D7\u91DC\u91D9\u9583\u9662\u9663\u9661\"],\n[\"b0a1\",\"\u965B\u965D\u9664\u9658\u965E\u96BB\u98E2\u99AC\u9AA8\u9AD8\u9B25\u9B32\u9B3C\u4E7E\u507A\u507D\u505C\u5047\u5043\u504C\u505A\u5049\u5065\u5076\u504E\u5055\u5075\u5074\u5077\u504F\u500F\u506F\u506D\u515C\u5195\u51F0\u526A\u526F\u52D2\u52D9\u52D8\u52D5\u5310\u530F\u5319\u533F\u5340\u533E\u53C3\u66FC\u5546\u556A\u5566\u5544\u555E\u5561\u5543\u554A\u5531\u5556\u554F\u5555\u552F\u5564\u5538\u552E\u555C\u552C\u5563\u5533\u5541\u5557\u5708\u570B\u5709\u57DF\u5805\u580A\u5806\u57E0\u57E4\u57FA\u5802\u5835\u57F7\u57F9\u5920\u5962\u5A36\u5A41\u5A49\u5A66\u5A6A\u5A40\"],\n[\"b140\",\"\u5A3C\u5A62\u5A5A\u5A46\u5A4A\u5B70\u5BC7\u5BC5\u5BC4\u5BC2\u5BBF\u5BC6\u5C09\u5C08\u5C07\u5C60\u5C5C\u5C5D\u5D07\u5D06\u5D0E\u5D1B\u5D16\u5D22\u5D11\u5D29\u5D14\u5D19\u5D24\u5D27\u5D17\u5DE2\u5E38\u5E36\u5E33\u5E37\u5EB7\u5EB8\u5EB6\u5EB5\u5EBE\u5F35\u5F37\u5F57\u5F6C\u5F69\u5F6B\u5F97\u5F99\u5F9E\u5F98\u5FA1\u5FA0\u5F9C\u607F\u60A3\u6089\u60A0\u60A8\u60CB\u60B4\u60E6\u60BD\"],\n[\"b1a1\",\"\u60C5\u60BB\u60B5\u60DC\u60BC\u60D8\u60D5\u60C6\u60DF\u60B8\u60DA\u60C7\u621A\u621B\u6248\u63A0\u63A7\u6372\u6396\u63A2\u63A5\u6377\u6367\u6398\u63AA\u6371\u63A9\u6389\u6383\u639B\u636B\u63A8\u6384\u6388\u6399\u63A1\u63AC\u6392\u638F\u6380\u637B\u6369\u6368\u637A\u655D\u6556\u6551\u6559\u6557\u555F\u654F\u6558\u6555\u6554\u659C\u659B\u65AC\u65CF\u65CB\u65CC\u65CE\u665D\u665A\u6664\u6668\u6666\u665E\u66F9\u52D7\u671B\u6881\u68AF\u68A2\u6893\u68B5\u687F\u6876\u68B1\u68A7\u6897\u68B0\u6883\u68C4\u68AD\u6886\u6885\u6894\u689D\u68A8\u689F\u68A1\u6882\u6B32\u6BBA\"],\n[\"b240\",\"\u6BEB\u6BEC\u6C2B\u6D8E\u6DBC\u6DF3\u6DD9\u6DB2\u6DE1\u6DCC\u6DE4\u6DFB\u6DFA\u6E05\u6DC7\u6DCB\u6DAF\u6DD1\u6DAE\u6DDE\u6DF9\u6DB8\u6DF7\u6DF5\u6DC5\u6DD2\u6E1A\u6DB5\u6DDA\u6DEB\u6DD8\u6DEA\u6DF1\u6DEE\u6DE8\u6DC6\u6DC4\u6DAA\u6DEC\u6DBF\u6DE6\u70F9\u7109\u710A\u70FD\u70EF\u723D\u727D\u7281\u731C\u731B\u7316\u7313\u7319\u7387\u7405\u740A\u7403\u7406\u73FE\u740D\u74E0\u74F6\"],\n[\"b2a1\",\"\u74F7\u751C\u7522\u7565\u7566\u7562\u7570\u758F\u75D4\u75D5\u75B5\u75CA\u75CD\u768E\u76D4\u76D2\u76DB\u7737\u773E\u773C\u7736\u7738\u773A\u786B\u7843\u784E\u7965\u7968\u796D\u79FB\u7A92\u7A95\u7B20\u7B28\u7B1B\u7B2C\u7B26\u7B19\u7B1E\u7B2E\u7C92\u7C97\u7C95\u7D46\u7D43\u7D71\u7D2E\u7D39\u7D3C\u7D40\u7D30\u7D33\u7D44\u7D2F\u7D42\u7D32\u7D31\u7F3D\u7F9E\u7F9A\u7FCC\u7FCE\u7FD2\u801C\u804A\u8046\u812F\u8116\u8123\u812B\u8129\u8130\u8124\u8202\u8235\u8237\u8236\u8239\u838E\u839E\u8398\u8378\u83A2\u8396\u83BD\u83AB\u8392\u838A\u8393\u8389\u83A0\u8377\u837B\u837C\"],\n[\"b340\",\"\u8386\u83A7\u8655\u5F6A\u86C7\u86C0\u86B6\u86C4\u86B5\u86C6\u86CB\u86B1\u86AF\u86C9\u8853\u889E\u8888\u88AB\u8892\u8896\u888D\u888B\u8993\u898F\u8A2A\u8A1D\u8A23\u8A25\u8A31\u8A2D\u8A1F\u8A1B\u8A22\u8C49\u8C5A\u8CA9\u8CAC\u8CAB\u8CA8\u8CAA\u8CA7\u8D67\u8D66\u8DBE\u8DBA\u8EDB\u8EDF\u9019\u900D\u901A\u9017\u9023\u901F\u901D\u9010\u9015\u901E\u9020\u900F\u9022\u9016\u901B\u9014\"],\n[\"b3a1\",\"\u90E8\u90ED\u90FD\u9157\u91CE\u91F5\u91E6\u91E3\u91E7\u91ED\u91E9\u9589\u966A\u9675\u9673\u9678\u9670\u9674\u9676\u9677\u966C\u96C0\u96EA\u96E9\u7AE0\u7ADF\u9802\u9803\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB\u50A2\u508D\u5085\u5099\u5091\u5080\u5096\u5098\u509A\u6700\u51F1\u5272\u5274\u5275\u5269\u52DE\u52DD\u52DB\u535A\u53A5\u557B\u5580\u55A7\u557C\u558A\u559D\u5598\u5582\u559C\u55AA\u5594\u5587\u558B\u5583\u55B3\u55AE\u559F\u553E\u55B2\u559A\u55BB\u55AC\u55B1\u557E\u5589\u55AB\u5599\u570D\u582F\u582A\u5834\u5824\u5830\u5831\u5821\u581D\u5820\u58F9\u58FA\u5960\"],\n[\"b440\",\"\u5A77\u5A9A\u5A7F\u5A92\u5A9B\u5AA7\u5B73\u5B71\u5BD2\u5BCC\u5BD3\u5BD0\u5C0A\u5C0B\u5C31\u5D4C\u5D50\u5D34\u5D47\u5DFD\u5E45\u5E3D\u5E40\u5E43\u5E7E\u5ECA\u5EC1\u5EC2\u5EC4\u5F3C\u5F6D\u5FA9\u5FAA\u5FA8\u60D1\u60E1\u60B2\u60B6\u60E0\u611C\u6123\u60FA\u6115\u60F0\u60FB\u60F4\u6168\u60F1\u610E\u60F6\u6109\u6100\u6112\u621F\u6249\u63A3\u638C\u63CF\u63C0\u63E9\u63C9\u63C6\u63CD\"],\n[\"b4a1\",\"\u63D2\u63E3\u63D0\u63E1\u63D6\u63ED\u63EE\u6376\u63F4\u63EA\u63DB\u6452\u63DA\u63F9\u655E\u6566\u6562\u6563\u6591\u6590\u65AF\u666E\u6670\u6674\u6676\u666F\u6691\u667A\u667E\u6677\u66FE\u66FF\u671F\u671D\u68FA\u68D5\u68E0\u68D8\u68D7\u6905\u68DF\u68F5\u68EE\u68E7\u68F9\u68D2\u68F2\u68E3\u68CB\u68CD\u690D\u6912\u690E\u68C9\u68DA\u696E\u68FB\u6B3E\u6B3A\u6B3D\u6B98\u6B96\u6BBC\u6BEF\u6C2E\u6C2F\u6C2C\u6E2F\u6E38\u6E54\u6E21\u6E32\u6E67\u6E4A\u6E20\u6E25\u6E23\u6E1B\u6E5B\u6E58\u6E24\u6E56\u6E6E\u6E2D\u6E26\u6E6F\u6E34\u6E4D\u6E3A\u6E2C\u6E43\u6E1D\u6E3E\u6ECB\"],\n[\"b540\",\"\u6E89\u6E19\u6E4E\u6E63\u6E44\u6E72\u6E69\u6E5F\u7119\u711A\u7126\u7130\u7121\u7136\u716E\u711C\u724C\u7284\u7280\u7336\u7325\u7334\u7329\u743A\u742A\u7433\u7422\u7425\u7435\u7436\u7434\u742F\u741B\u7426\u7428\u7525\u7526\u756B\u756A\u75E2\u75DB\u75E3\u75D9\u75D8\u75DE\u75E0\u767B\u767C\u7696\u7693\u76B4\u76DC\u774F\u77ED\u785D\u786C\u786F\u7A0D\u7A08\u7A0B\u7A05\u7A00\u7A98\"],\n[\"b5a1\",\"\u7A97\u7A96\u7AE5\u7AE3\u7B49\u7B56\u7B46\u7B50\u7B52\u7B54\u7B4D\u7B4B\u7B4F\u7B51\u7C9F\u7CA5\u7D5E\u7D50\u7D68\u7D55\u7D2B\u7D6E\u7D72\u7D61\u7D66\u7D62\u7D70\u7D73\u5584\u7FD4\u7FD5\u800B\u8052\u8085\u8155\u8154\u814B\u8151\u814E\u8139\u8146\u813E\u814C\u8153\u8174\u8212\u821C\u83E9\u8403\u83F8\u840D\u83E0\u83C5\u840B\u83C1\u83EF\u83F1\u83F4\u8457\u840A\u83F0\u840C\u83CC\u83FD\u83F2\u83CA\u8438\u840E\u8404\u83DC\u8407\u83D4\u83DF\u865B\u86DF\u86D9\u86ED\u86D4\u86DB\u86E4\u86D0\u86DE\u8857\u88C1\u88C2\u88B1\u8983\u8996\u8A3B\u8A60\u8A55\u8A5E\u8A3C\u8A41\"],\n[\"b640\",\"\u8A54\u8A5B\u8A50\u8A46\u8A34\u8A3A\u8A36\u8A56\u8C61\u8C82\u8CAF\u8CBC\u8CB3\u8CBD\u8CC1\u8CBB\u8CC0\u8CB4\u8CB7\u8CB6\u8CBF\u8CB8\u8D8A\u8D85\u8D81\u8DCE\u8DDD\u8DCB\u8DDA\u8DD1\u8DCC\u8DDB\u8DC6\u8EFB\u8EF8\u8EFC\u8F9C\u902E\u9035\u9031\u9038\u9032\u9036\u9102\u90F5\u9109\u90FE\u9163\u9165\u91CF\u9214\u9215\u9223\u9209\u921E\u920D\u9210\u9207\u9211\u9594\u958F\u958B\u9591\"],\n[\"b6a1\",\"\u9593\u9592\u958E\u968A\u968E\u968B\u967D\u9685\u9686\u968D\u9672\u9684\u96C1\u96C5\u96C4\u96C6\u96C7\u96EF\u96F2\u97CC\u9805\u9806\u9808\u98E7\u98EA\u98EF\u98E9\u98F2\u98ED\u99AE\u99AD\u9EC3\u9ECD\u9ED1\u4E82\u50AD\u50B5\u50B2\u50B3\u50C5\u50BE\u50AC\u50B7\u50BB\u50AF\u50C7\u527F\u5277\u527D\u52DF\u52E6\u52E4\u52E2\u52E3\u532F\u55DF\u55E8\u55D3\u55E6\u55CE\u55DC\u55C7\u55D1\u55E3\u55E4\u55EF\u55DA\u55E1\u55C5\u55C6\u55E5\u55C9\u5712\u5713\u585E\u5851\u5858\u5857\u585A\u5854\u586B\u584C\u586D\u584A\u5862\u5852\u584B\u5967\u5AC1\u5AC9\u5ACC\u5ABE\u5ABD\u5ABC\"],\n[\"b740\",\"\u5AB3\u5AC2\u5AB2\u5D69\u5D6F\u5E4C\u5E79\u5EC9\u5EC8\u5F12\u5F59\u5FAC\u5FAE\u611A\u610F\u6148\u611F\u60F3\u611B\u60F9\u6101\u6108\u614E\u614C\u6144\u614D\u613E\u6134\u6127\u610D\u6106\u6137\u6221\u6222\u6413\u643E\u641E\u642A\u642D\u643D\u642C\u640F\u641C\u6414\u640D\u6436\u6416\u6417\u6406\u656C\u659F\u65B0\u6697\u6689\u6687\u6688\u6696\u6684\u6698\u668D\u6703\u6994\u696D\"],\n[\"b7a1\",\"\u695A\u6977\u6960\u6954\u6975\u6930\u6982\u694A\u6968\u696B\u695E\u6953\u6979\u6986\u695D\u6963\u695B\u6B47\u6B72\u6BC0\u6BBF\u6BD3\u6BFD\u6EA2\u6EAF\u6ED3\u6EB6\u6EC2\u6E90\u6E9D\u6EC7\u6EC5\u6EA5\u6E98\u6EBC\u6EBA\u6EAB\u6ED1\u6E96\u6E9C\u6EC4\u6ED4\u6EAA\u6EA7\u6EB4\u714E\u7159\u7169\u7164\u7149\u7167\u715C\u716C\u7166\u714C\u7165\u715E\u7146\u7168\u7156\u723A\u7252\u7337\u7345\u733F\u733E\u746F\u745A\u7455\u745F\u745E\u7441\u743F\u7459\u745B\u745C\u7576\u7578\u7600\u75F0\u7601\u75F2\u75F1\u75FA\u75FF\u75F4\u75F3\u76DE\u76DF\u775B\u776B\u7766\u775E\u7763\"],\n[\"b840\",\"\u7779\u776A\u776C\u775C\u7765\u7768\u7762\u77EE\u788E\u78B0\u7897\u7898\u788C\u7889\u787C\u7891\u7893\u787F\u797A\u797F\u7981\u842C\u79BD\u7A1C\u7A1A\u7A20\u7A14\u7A1F\u7A1E\u7A9F\u7AA0\u7B77\u7BC0\u7B60\u7B6E\u7B67\u7CB1\u7CB3\u7CB5\u7D93\u7D79\u7D91\u7D81\u7D8F\u7D5B\u7F6E\u7F69\u7F6A\u7F72\u7FA9\u7FA8\u7FA4\u8056\u8058\u8086\u8084\u8171\u8170\u8178\u8165\u816E\u8173\u816B\"],\n[\"b8a1\",\"\u8179\u817A\u8166\u8205\u8247\u8482\u8477\u843D\u8431\u8475\u8466\u846B\u8449\u846C\u845B\u843C\u8435\u8461\u8463\u8469\u846D\u8446\u865E\u865C\u865F\u86F9\u8713\u8708\u8707\u8700\u86FE\u86FB\u8702\u8703\u8706\u870A\u8859\u88DF\u88D4\u88D9\u88DC\u88D8\u88DD\u88E1\u88CA\u88D5\u88D2\u899C\u89E3\u8A6B\u8A72\u8A73\u8A66\u8A69\u8A70\u8A87\u8A7C\u8A63\u8AA0\u8A71\u8A85\u8A6D\u8A62\u8A6E\u8A6C\u8A79\u8A7B\u8A3E\u8A68\u8C62\u8C8A\u8C89\u8CCA\u8CC7\u8CC8\u8CC4\u8CB2\u8CC3\u8CC2\u8CC5\u8DE1\u8DDF\u8DE8\u8DEF\u8DF3\u8DFA\u8DEA\u8DE4\u8DE6\u8EB2\u8F03\u8F09\u8EFE\u8F0A\"],\n[\"b940\",\"\u8F9F\u8FB2\u904B\u904A\u9053\u9042\u9054\u903C\u9055\u9050\u9047\u904F\u904E\u904D\u9051\u903E\u9041\u9112\u9117\u916C\u916A\u9169\u91C9\u9237\u9257\u9238\u923D\u9240\u923E\u925B\u924B\u9264\u9251\u9234\u9249\u924D\u9245\u9239\u923F\u925A\u9598\u9698\u9694\u9695\u96CD\u96CB\u96C9\u96CA\u96F7\u96FB\u96F9\u96F6\u9756\u9774\u9776\u9810\u9811\u9813\u980A\u9812\u980C\u98FC\u98F4\"],\n[\"b9a1\",\"\u98FD\u98FE\u99B3\u99B1\u99B4\u9AE1\u9CE9\u9E82\u9F0E\u9F13\u9F20\u50E7\u50EE\u50E5\u50D6\u50ED\u50DA\u50D5\u50CF\u50D1\u50F1\u50CE\u50E9\u5162\u51F3\u5283\u5282\u5331\u53AD\u55FE\u5600\u561B\u5617\u55FD\u5614\u5606\u5609\u560D\u560E\u55F7\u5616\u561F\u5608\u5610\u55F6\u5718\u5716\u5875\u587E\u5883\u5893\u588A\u5879\u5885\u587D\u58FD\u5925\u5922\u5924\u596A\u5969\u5AE1\u5AE6\u5AE9\u5AD7\u5AD6\u5AD8\u5AE3\u5B75\u5BDE\u5BE7\u5BE1\u5BE5\u5BE6\u5BE8\u5BE2\u5BE4\u5BDF\u5C0D\u5C62\u5D84\u5D87\u5E5B\u5E63\u5E55\u5E57\u5E54\u5ED3\u5ED6\u5F0A\u5F46\u5F70\u5FB9\u6147\"],\n[\"ba40\",\"\u613F\u614B\u6177\u6162\u6163\u615F\u615A\u6158\u6175\u622A\u6487\u6458\u6454\u64A4\u6478\u645F\u647A\u6451\u6467\u6434\u646D\u647B\u6572\u65A1\u65D7\u65D6\u66A2\u66A8\u669D\u699C\u69A8\u6995\u69C1\u69AE\u69D3\u69CB\u699B\u69B7\u69BB\u69AB\u69B4\u69D0\u69CD\u69AD\u69CC\u69A6\u69C3\u69A3\u6B49\u6B4C\u6C33\u6F33\u6F14\u6EFE\u6F13\u6EF4\u6F29\u6F3E\u6F20\u6F2C\u6F0F\u6F02\u6F22\"],\n[\"baa1\",\"\u6EFF\u6EEF\u6F06\u6F31\u6F38\u6F32\u6F23\u6F15\u6F2B\u6F2F\u6F88\u6F2A\u6EEC\u6F01\u6EF2\u6ECC\u6EF7\u7194\u7199\u717D\u718A\u7184\u7192\u723E\u7292\u7296\u7344\u7350\u7464\u7463\u746A\u7470\u746D\u7504\u7591\u7627\u760D\u760B\u7609\u7613\u76E1\u76E3\u7784\u777D\u777F\u7761\u78C1\u789F\u78A7\u78B3\u78A9\u78A3\u798E\u798F\u798D\u7A2E\u7A31\u7AAA\u7AA9\u7AED\u7AEF\u7BA1\u7B95\u7B8B\u7B75\u7B97\u7B9D\u7B94\u7B8F\u7BB8\u7B87\u7B84\u7CB9\u7CBD\u7CBE\u7DBB\u7DB0\u7D9C\u7DBD\u7DBE\u7DA0\u7DCA\u7DB4\u7DB2\u7DB1\u7DBA\u7DA2\u7DBF\u7DB5\u7DB8\u7DAD\u7DD2\u7DC7\u7DAC\"],\n[\"bb40\",\"\u7F70\u7FE0\u7FE1\u7FDF\u805E\u805A\u8087\u8150\u8180\u818F\u8188\u818A\u817F\u8182\u81E7\u81FA\u8207\u8214\u821E\u824B\u84C9\u84BF\u84C6\u84C4\u8499\u849E\u84B2\u849C\u84CB\u84B8\u84C0\u84D3\u8490\u84BC\u84D1\u84CA\u873F\u871C\u873B\u8722\u8725\u8734\u8718\u8755\u8737\u8729\u88F3\u8902\u88F4\u88F9\u88F8\u88FD\u88E8\u891A\u88EF\u8AA6\u8A8C\u8A9E\u8AA3\u8A8D\u8AA1\u8A93\u8AA4\"],\n[\"bba1\",\"\u8AAA\u8AA5\u8AA8\u8A98\u8A91\u8A9A\u8AA7\u8C6A\u8C8D\u8C8C\u8CD3\u8CD1\u8CD2\u8D6B\u8D99\u8D95\u8DFC\u8F14\u8F12\u8F15\u8F13\u8FA3\u9060\u9058\u905C\u9063\u9059\u905E\u9062\u905D\u905B\u9119\u9118\u911E\u9175\u9178\u9177\u9174\u9278\u9280\u9285\u9298\u9296\u927B\u9293\u929C\u92A8\u927C\u9291\u95A1\u95A8\u95A9\u95A3\u95A5\u95A4\u9699\u969C\u969B\u96CC\u96D2\u9700\u977C\u9785\u97F6\u9817\u9818\u98AF\u98B1\u9903\u9905\u990C\u9909\u99C1\u9AAF\u9AB0\u9AE6\u9B41\u9B42\u9CF4\u9CF6\u9CF3\u9EBC\u9F3B\u9F4A\u5104\u5100\u50FB\u50F5\u50F9\u5102\u5108\u5109\u5105\u51DC\"],\n[\"bc40\",\"\u5287\u5288\u5289\u528D\u528A\u52F0\u53B2\u562E\u563B\u5639\u5632\u563F\u5634\u5629\u5653\u564E\u5657\u5674\u5636\u562F\u5630\u5880\u589F\u589E\u58B3\u589C\u58AE\u58A9\u58A6\u596D\u5B09\u5AFB\u5B0B\u5AF5\u5B0C\u5B08\u5BEE\u5BEC\u5BE9\u5BEB\u5C64\u5C65\u5D9D\u5D94\u5E62\u5E5F\u5E61\u5EE2\u5EDA\u5EDF\u5EDD\u5EE3\u5EE0\u5F48\u5F71\u5FB7\u5FB5\u6176\u6167\u616E\u615D\u6155\u6182\"],\n[\"bca1\",\"\u617C\u6170\u616B\u617E\u61A7\u6190\u61AB\u618E\u61AC\u619A\u61A4\u6194\u61AE\u622E\u6469\u646F\u6479\u649E\u64B2\u6488\u6490\u64B0\u64A5\u6493\u6495\u64A9\u6492\u64AE\u64AD\u64AB\u649A\u64AC\u6499\u64A2\u64B3\u6575\u6577\u6578\u66AE\u66AB\u66B4\u66B1\u6A23\u6A1F\u69E8\u6A01\u6A1E\u6A19\u69FD\u6A21\u6A13\u6A0A\u69F3\u6A02\u6A05\u69ED\u6A11\u6B50\u6B4E\u6BA4\u6BC5\u6BC6\u6F3F\u6F7C\u6F84\u6F51\u6F66\u6F54\u6F86\u6F6D\u6F5B\u6F78\u6F6E\u6F8E\u6F7A\u6F70\u6F64\u6F97\u6F58\u6ED5\u6F6F\u6F60\u6F5F\u719F\u71AC\u71B1\u71A8\u7256\u729B\u734E\u7357\u7469\u748B\u7483\"],\n[\"bd40\",\"\u747E\u7480\u757F\u7620\u7629\u761F\u7624\u7626\u7621\u7622\u769A\u76BA\u76E4\u778E\u7787\u778C\u7791\u778B\u78CB\u78C5\u78BA\u78CA\u78BE\u78D5\u78BC\u78D0\u7A3F\u7A3C\u7A40\u7A3D\u7A37\u7A3B\u7AAF\u7AAE\u7BAD\u7BB1\u7BC4\u7BB4\u7BC6\u7BC7\u7BC1\u7BA0\u7BCC\u7CCA\u7DE0\u7DF4\u7DEF\u7DFB\u7DD8\u7DEC\u7DDD\u7DE8\u7DE3\u7DDA\u7DDE\u7DE9\u7D9E\u7DD9\u7DF2\u7DF9\u7F75\u7F77\u7FAF\"],\n[\"bda1\",\"\u7FE9\u8026\u819B\u819C\u819D\u81A0\u819A\u8198\u8517\u853D\u851A\u84EE\u852C\u852D\u8513\u8511\u8523\u8521\u8514\u84EC\u8525\u84FF\u8506\u8782\u8774\u8776\u8760\u8766\u8778\u8768\u8759\u8757\u874C\u8753\u885B\u885D\u8910\u8907\u8912\u8913\u8915\u890A\u8ABC\u8AD2\u8AC7\u8AC4\u8A95\u8ACB\u8AF8\u8AB2\u8AC9\u8AC2\u8ABF\u8AB0\u8AD6\u8ACD\u8AB6\u8AB9\u8ADB\u8C4C\u8C4E\u8C6C\u8CE0\u8CDE\u8CE6\u8CE4\u8CEC\u8CED\u8CE2\u8CE3\u8CDC\u8CEA\u8CE1\u8D6D\u8D9F\u8DA3\u8E2B\u8E10\u8E1D\u8E22\u8E0F\u8E29\u8E1F\u8E21\u8E1E\u8EBA\u8F1D\u8F1B\u8F1F\u8F29\u8F26\u8F2A\u8F1C\u8F1E\"],\n[\"be40\",\"\u8F25\u9069\u906E\u9068\u906D\u9077\u9130\u912D\u9127\u9131\u9187\u9189\u918B\u9183\u92C5\u92BB\u92B7\u92EA\u92AC\u92E4\u92C1\u92B3\u92BC\u92D2\u92C7\u92F0\u92B2\u95AD\u95B1\u9704\u9706\u9707\u9709\u9760\u978D\u978B\u978F\u9821\u982B\u981C\u98B3\u990A\u9913\u9912\u9918\u99DD\u99D0\u99DF\u99DB\u99D1\u99D5\u99D2\u99D9\u9AB7\u9AEE\u9AEF\u9B27\u9B45\u9B44\u9B77\u9B6F\u9D06\u9D09\"],\n[\"bea1\",\"\u9D03\u9EA9\u9EBE\u9ECE\u58A8\u9F52\u5112\u5118\u5114\u5110\u5115\u5180\u51AA\u51DD\u5291\u5293\u52F3\u5659\u566B\u5679\u5669\u5664\u5678\u566A\u5668\u5665\u5671\u566F\u566C\u5662\u5676\u58C1\u58BE\u58C7\u58C5\u596E\u5B1D\u5B34\u5B78\u5BF0\u5C0E\u5F4A\u61B2\u6191\u61A9\u618A\u61CD\u61B6\u61BE\u61CA\u61C8\u6230\u64C5\u64C1\u64CB\u64BB\u64BC\u64DA\u64C4\u64C7\u64C2\u64CD\u64BF\u64D2\u64D4\u64BE\u6574\u66C6\u66C9\u66B9\u66C4\u66C7\u66B8\u6A3D\u6A38\u6A3A\u6A59\u6A6B\u6A58\u6A39\u6A44\u6A62\u6A61\u6A4B\u6A47\u6A35\u6A5F\u6A48\u6B59\u6B77\u6C05\u6FC2\u6FB1\u6FA1\"],\n[\"bf40\",\"\u6FC3\u6FA4\u6FC1\u6FA7\u6FB3\u6FC0\u6FB9\u6FB6\u6FA6\u6FA0\u6FB4\u71BE\u71C9\u71D0\u71D2\u71C8\u71D5\u71B9\u71CE\u71D9\u71DC\u71C3\u71C4\u7368\u749C\u74A3\u7498\u749F\u749E\u74E2\u750C\u750D\u7634\u7638\u763A\u76E7\u76E5\u77A0\u779E\u779F\u77A5\u78E8\u78DA\u78EC\u78E7\u79A6\u7A4D\u7A4E\u7A46\u7A4C\u7A4B\u7ABA\u7BD9\u7C11\u7BC9\u7BE4\u7BDB\u7BE1\u7BE9\u7BE6\u7CD5\u7CD6\u7E0A\"],\n[\"bfa1\",\"\u7E11\u7E08\u7E1B\u7E23\u7E1E\u7E1D\u7E09\u7E10\u7F79\u7FB2\u7FF0\u7FF1\u7FEE\u8028\u81B3\u81A9\u81A8\u81FB\u8208\u8258\u8259\u854A\u8559\u8548\u8568\u8569\u8543\u8549\u856D\u856A\u855E\u8783\u879F\u879E\u87A2\u878D\u8861\u892A\u8932\u8925\u892B\u8921\u89AA\u89A6\u8AE6\u8AFA\u8AEB\u8AF1\u8B00\u8ADC\u8AE7\u8AEE\u8AFE\u8B01\u8B02\u8AF7\u8AED\u8AF3\u8AF6\u8AFC\u8C6B\u8C6D\u8C93\u8CF4\u8E44\u8E31\u8E34\u8E42\u8E39\u8E35\u8F3B\u8F2F\u8F38\u8F33\u8FA8\u8FA6\u9075\u9074\u9078\u9072\u907C\u907A\u9134\u9192\u9320\u9336\u92F8\u9333\u932F\u9322\u92FC\u932B\u9304\u931A\"],\n[\"c040\",\"\u9310\u9326\u9321\u9315\u932E\u9319\u95BB\u96A7\u96A8\u96AA\u96D5\u970E\u9711\u9716\u970D\u9713\u970F\u975B\u975C\u9766\u9798\u9830\u9838\u983B\u9837\u982D\u9839\u9824\u9910\u9928\u991E\u991B\u9921\u991A\u99ED\u99E2\u99F1\u9AB8\u9ABC\u9AFB\u9AED\u9B28\u9B91\u9D15\u9D23\u9D26\u9D28\u9D12\u9D1B\u9ED8\u9ED4\u9F8D\u9F9C\u512A\u511F\u5121\u5132\u52F5\u568E\u5680\u5690\u5685\u5687\"],\n[\"c0a1\",\"\u568F\u58D5\u58D3\u58D1\u58CE\u5B30\u5B2A\u5B24\u5B7A\u5C37\u5C68\u5DBC\u5DBA\u5DBD\u5DB8\u5E6B\u5F4C\u5FBD\u61C9\u61C2\u61C7\u61E6\u61CB\u6232\u6234\u64CE\u64CA\u64D8\u64E0\u64F0\u64E6\u64EC\u64F1\u64E2\u64ED\u6582\u6583\u66D9\u66D6\u6A80\u6A94\u6A84\u6AA2\u6A9C\u6ADB\u6AA3\u6A7E\u6A97\u6A90\u6AA0\u6B5C\u6BAE\u6BDA\u6C08\u6FD8\u6FF1\u6FDF\u6FE0\u6FDB\u6FE4\u6FEB\u6FEF\u6F80\u6FEC\u6FE1\u6FE9\u6FD5\u6FEE\u6FF0\u71E7\u71DF\u71EE\u71E6\u71E5\u71ED\u71EC\u71F4\u71E0\u7235\u7246\u7370\u7372\u74A9\u74B0\u74A6\u74A8\u7646\u7642\u764C\u76EA\u77B3\u77AA\u77B0\u77AC\"],\n[\"c140\",\"\u77A7\u77AD\u77EF\u78F7\u78FA\u78F4\u78EF\u7901\u79A7\u79AA\u7A57\u7ABF\u7C07\u7C0D\u7BFE\u7BF7\u7C0C\u7BE0\u7CE0\u7CDC\u7CDE\u7CE2\u7CDF\u7CD9\u7CDD\u7E2E\u7E3E\u7E46\u7E37\u7E32\u7E43\u7E2B\u7E3D\u7E31\u7E45\u7E41\u7E34\u7E39\u7E48\u7E35\u7E3F\u7E2F\u7F44\u7FF3\u7FFC\u8071\u8072\u8070\u806F\u8073\u81C6\u81C3\u81BA\u81C2\u81C0\u81BF\u81BD\u81C9\u81BE\u81E8\u8209\u8271\u85AA\"],\n[\"c1a1\",\"\u8584\u857E\u859C\u8591\u8594\u85AF\u859B\u8587\u85A8\u858A\u8667\u87C0\u87D1\u87B3\u87D2\u87C6\u87AB\u87BB\u87BA\u87C8\u87CB\u893B\u8936\u8944\u8938\u893D\u89AC\u8B0E\u8B17\u8B19\u8B1B\u8B0A\u8B20\u8B1D\u8B04\u8B10\u8C41\u8C3F\u8C73\u8CFA\u8CFD\u8CFC\u8CF8\u8CFB\u8DA8\u8E49\u8E4B\u8E48\u8E4A\u8F44\u8F3E\u8F42\u8F45\u8F3F\u907F\u907D\u9084\u9081\u9082\u9080\u9139\u91A3\u919E\u919C\u934D\u9382\u9328\u9375\u934A\u9365\u934B\u9318\u937E\u936C\u935B\u9370\u935A\u9354\u95CA\u95CB\u95CC\u95C8\u95C6\u96B1\u96B8\u96D6\u971C\u971E\u97A0\u97D3\u9846\u98B6\u9935\u9A01\"],\n[\"c240\",\"\u99FF\u9BAE\u9BAB\u9BAA\u9BAD\u9D3B\u9D3F\u9E8B\u9ECF\u9EDE\u9EDC\u9EDD\u9EDB\u9F3E\u9F4B\u53E2\u5695\u56AE\u58D9\u58D8\u5B38\u5F5D\u61E3\u6233\u64F4\u64F2\u64FE\u6506\u64FA\u64FB\u64F7\u65B7\u66DC\u6726\u6AB3\u6AAC\u6AC3\u6ABB\u6AB8\u6AC2\u6AAE\u6AAF\u6B5F\u6B78\u6BAF\u7009\u700B\u6FFE\u7006\u6FFA\u7011\u700F\u71FB\u71FC\u71FE\u71F8\u7377\u7375\u74A7\u74BF\u7515\u7656\u7658\"],\n[\"c2a1\",\"\u7652\u77BD\u77BF\u77BB\u77BC\u790E\u79AE\u7A61\u7A62\u7A60\u7AC4\u7AC5\u7C2B\u7C27\u7C2A\u7C1E\u7C23\u7C21\u7CE7\u7E54\u7E55\u7E5E\u7E5A\u7E61\u7E52\u7E59\u7F48\u7FF9\u7FFB\u8077\u8076\u81CD\u81CF\u820A\u85CF\u85A9\u85CD\u85D0\u85C9\u85B0\u85BA\u85B9\u85A6\u87EF\u87EC\u87F2\u87E0\u8986\u89B2\u89F4\u8B28\u8B39\u8B2C\u8B2B\u8C50\u8D05\u8E59\u8E63\u8E66\u8E64\u8E5F\u8E55\u8EC0\u8F49\u8F4D\u9087\u9083\u9088\u91AB\u91AC\u91D0\u9394\u938A\u9396\u93A2\u93B3\u93AE\u93AC\u93B0\u9398\u939A\u9397\u95D4\u95D6\u95D0\u95D5\u96E2\u96DC\u96D9\u96DB\u96DE\u9724\u97A3\u97A6\"],\n[\"c340\",\"\u97AD\u97F9\u984D\u984F\u984C\u984E\u9853\u98BA\u993E\u993F\u993D\u992E\u99A5\u9A0E\u9AC1\u9B03\u9B06\u9B4F\u9B4E\u9B4D\u9BCA\u9BC9\u9BFD\u9BC8\u9BC0\u9D51\u9D5D\u9D60\u9EE0\u9F15\u9F2C\u5133\u56A5\u58DE\u58DF\u58E2\u5BF5\u9F90\u5EEC\u61F2\u61F7\u61F6\u61F5\u6500\u650F\u66E0\u66DD\u6AE5\u6ADD\u6ADA\u6AD3\u701B\u701F\u7028\u701A\u701D\u7015\u7018\u7206\u720D\u7258\u72A2\u7378\"],\n[\"c3a1\",\"\u737A\u74BD\u74CA\u74E3\u7587\u7586\u765F\u7661\u77C7\u7919\u79B1\u7A6B\u7A69\u7C3E\u7C3F\u7C38\u7C3D\u7C37\u7C40\u7E6B\u7E6D\u7E79\u7E69\u7E6A\u7F85\u7E73\u7FB6\u7FB9\u7FB8\u81D8\u85E9\u85DD\u85EA\u85D5\u85E4\u85E5\u85F7\u87FB\u8805\u880D\u87F9\u87FE\u8960\u895F\u8956\u895E\u8B41\u8B5C\u8B58\u8B49\u8B5A\u8B4E\u8B4F\u8B46\u8B59\u8D08\u8D0A\u8E7C\u8E72\u8E87\u8E76\u8E6C\u8E7A\u8E74\u8F54\u8F4E\u8FAD\u908A\u908B\u91B1\u91AE\u93E1\u93D1\u93DF\u93C3\u93C8\u93DC\u93DD\u93D6\u93E2\u93CD\u93D8\u93E4\u93D7\u93E8\u95DC\u96B4\u96E3\u972A\u9727\u9761\u97DC\u97FB\u985E\"],\n[\"c440\",\"\u9858\u985B\u98BC\u9945\u9949\u9A16\u9A19\u9B0D\u9BE8\u9BE7\u9BD6\u9BDB\u9D89\u9D61\u9D72\u9D6A\u9D6C\u9E92\u9E97\u9E93\u9EB4\u52F8\u56A8\u56B7\u56B6\u56B4\u56BC\u58E4\u5B40\u5B43\u5B7D\u5BF6\u5DC9\u61F8\u61FA\u6518\u6514\u6519\u66E6\u6727\u6AEC\u703E\u7030\u7032\u7210\u737B\u74CF\u7662\u7665\u7926\u792A\u792C\u792B\u7AC7\u7AF6\u7C4C\u7C43\u7C4D\u7CEF\u7CF0\u8FAE\u7E7D\u7E7C\"],\n[\"c4a1\",\"\u7E82\u7F4C\u8000\u81DA\u8266\u85FB\u85F9\u8611\u85FA\u8606\u860B\u8607\u860A\u8814\u8815\u8964\u89BA\u89F8\u8B70\u8B6C\u8B66\u8B6F\u8B5F\u8B6B\u8D0F\u8D0D\u8E89\u8E81\u8E85\u8E82\u91B4\u91CB\u9418\u9403\u93FD\u95E1\u9730\u98C4\u9952\u9951\u99A8\u9A2B\u9A30\u9A37\u9A35\u9C13\u9C0D\u9E79\u9EB5\u9EE8\u9F2F\u9F5F\u9F63\u9F61\u5137\u5138\u56C1\u56C0\u56C2\u5914\u5C6C\u5DCD\u61FC\u61FE\u651D\u651C\u6595\u66E9\u6AFB\u6B04\u6AFA\u6BB2\u704C\u721B\u72A7\u74D6\u74D4\u7669\u77D3\u7C50\u7E8F\u7E8C\u7FBC\u8617\u862D\u861A\u8823\u8822\u8821\u881F\u896A\u896C\u89BD\u8B74\"],\n[\"c540\",\"\u8B77\u8B7D\u8D13\u8E8A\u8E8D\u8E8B\u8F5F\u8FAF\u91BA\u942E\u9433\u9435\u943A\u9438\u9432\u942B\u95E2\u9738\u9739\u9732\u97FF\u9867\u9865\u9957\u9A45\u9A43\u9A40\u9A3E\u9ACF\u9B54\u9B51\u9C2D\u9C25\u9DAF\u9DB4\u9DC2\u9DB8\u9E9D\u9EEF\u9F19\u9F5C\u9F66\u9F67\u513C\u513B\u56C8\u56CA\u56C9\u5B7F\u5DD4\u5DD2\u5F4E\u61FF\u6524\u6B0A\u6B61\u7051\u7058\u7380\u74E4\u758A\u766E\u766C\"],\n[\"c5a1\",\"\u79B3\u7C60\u7C5F\u807E\u807D\u81DF\u8972\u896F\u89FC\u8B80\u8D16\u8D17\u8E91\u8E93\u8F61\u9148\u9444\u9451\u9452\u973D\u973E\u97C3\u97C1\u986B\u9955\u9A55\u9A4D\u9AD2\u9B1A\u9C49\u9C31\u9C3E\u9C3B\u9DD3\u9DD7\u9F34\u9F6C\u9F6A\u9F94\u56CC\u5DD6\u6200\u6523\u652B\u652A\u66EC\u6B10\u74DA\u7ACA\u7C64\u7C63\u7C65\u7E93\u7E96\u7E94\u81E2\u8638\u863F\u8831\u8B8A\u9090\u908F\u9463\u9460\u9464\u9768\u986F\u995C\u9A5A\u9A5B\u9A57\u9AD3\u9AD4\u9AD1\u9C54\u9C57\u9C56\u9DE5\u9E9F\u9EF4\u56D1\u58E9\u652C\u705E\u7671\u7672\u77D7\u7F50\u7F88\u8836\u8839\u8862\u8B93\u8B92\"],\n[\"c640\",\"\u8B96\u8277\u8D1B\u91C0\u946A\u9742\u9748\u9744\u97C6\u9870\u9A5F\u9B22\u9B58\u9C5F\u9DF9\u9DFA\u9E7C\u9E7D\u9F07\u9F77\u9F72\u5EF3\u6B16\u7063\u7C6C\u7C6E\u883B\u89C0\u8EA1\u91C1\u9472\u9470\u9871\u995E\u9AD6\u9B23\u9ECC\u7064\u77DA\u8B9A\u9477\u97C9\u9A62\u9A65\u7E9C\u8B9C\u8EAA\u91C5\u947D\u947E\u947C\u9C77\u9C78\u9EF7\u8C54\u947F\u9E1A\u7228\u9A6A\u9B31\u9E1B\u9E1E\u7C72\"],\n[\"c940\",\"\u4E42\u4E5C\u51F5\u531A\u5382\u4E07\u4E0C\u4E47\u4E8D\u56D7\uFA0C\u5C6E\u5F73\u4E0F\u5187\u4E0E\u4E2E\u4E93\u4EC2\u4EC9\u4EC8\u5198\u52FC\u536C\u53B9\u5720\u5903\u592C\u5C10\u5DFF\u65E1\u6BB3\u6BCC\u6C14\u723F\u4E31\u4E3C\u4EE8\u4EDC\u4EE9\u4EE1\u4EDD\u4EDA\u520C\u531C\u534C\u5722\u5723\u5917\u592F\u5B81\u5B84\u5C12\u5C3B\u5C74\u5C73\u5E04\u5E80\u5E82\u5FC9\u6209\u6250\u6C15\"],\n[\"c9a1\",\"\u6C36\u6C43\u6C3F\u6C3B\u72AE\u72B0\u738A\u79B8\u808A\u961E\u4F0E\u4F18\u4F2C\u4EF5\u4F14\u4EF1\u4F00\u4EF7\u4F08\u4F1D\u4F02\u4F05\u4F22\u4F13\u4F04\u4EF4\u4F12\u51B1\u5213\u5209\u5210\u52A6\u5322\u531F\u534D\u538A\u5407\u56E1\u56DF\u572E\u572A\u5734\u593C\u5980\u597C\u5985\u597B\u597E\u5977\u597F\u5B56\u5C15\u5C25\u5C7C\u5C7A\u5C7B\u5C7E\u5DDF\u5E75\u5E84\u5F02\u5F1A\u5F74\u5FD5\u5FD4\u5FCF\u625C\u625E\u6264\u6261\u6266\u6262\u6259\u6260\u625A\u6265\u65EF\u65EE\u673E\u6739\u6738\u673B\u673A\u673F\u673C\u6733\u6C18\u6C46\u6C52\u6C5C\u6C4F\u6C4A\u6C54\u6C4B\"],\n[\"ca40\",\"\u6C4C\u7071\u725E\u72B4\u72B5\u738E\u752A\u767F\u7A75\u7F51\u8278\u827C\u8280\u827D\u827F\u864D\u897E\u9099\u9097\u9098\u909B\u9094\u9622\u9624\u9620\u9623\u4F56\u4F3B\u4F62\u4F49\u4F53\u4F64\u4F3E\u4F67\u4F52\u4F5F\u4F41\u4F58\u4F2D\u4F33\u4F3F\u4F61\u518F\u51B9\u521C\u521E\u5221\u52AD\u52AE\u5309\u5363\u5372\u538E\u538F\u5430\u5437\u542A\u5454\u5445\u5419\u541C\u5425\u5418\"],\n[\"caa1\",\"\u543D\u544F\u5441\u5428\u5424\u5447\u56EE\u56E7\u56E5\u5741\u5745\u574C\u5749\u574B\u5752\u5906\u5940\u59A6\u5998\u59A0\u5997\u598E\u59A2\u5990\u598F\u59A7\u59A1\u5B8E\u5B92\u5C28\u5C2A\u5C8D\u5C8F\u5C88\u5C8B\u5C89\u5C92\u5C8A\u5C86\u5C93\u5C95\u5DE0\u5E0A\u5E0E\u5E8B\u5E89\u5E8C\u5E88\u5E8D\u5F05\u5F1D\u5F78\u5F76\u5FD2\u5FD1\u5FD0\u5FED\u5FE8\u5FEE\u5FF3\u5FE1\u5FE4\u5FE3\u5FFA\u5FEF\u5FF7\u5FFB\u6000\u5FF4\u623A\u6283\u628C\u628E\u628F\u6294\u6287\u6271\u627B\u627A\u6270\u6281\u6288\u6277\u627D\u6272\u6274\u6537\u65F0\u65F4\u65F3\u65F2\u65F5\u6745\u6747\"],\n[\"cb40\",\"\u6759\u6755\u674C\u6748\u675D\u674D\u675A\u674B\u6BD0\u6C19\u6C1A\u6C78\u6C67\u6C6B\u6C84\u6C8B\u6C8F\u6C71\u6C6F\u6C69\u6C9A\u6C6D\u6C87\u6C95\u6C9C\u6C66\u6C73\u6C65\u6C7B\u6C8E\u7074\u707A\u7263\u72BF\u72BD\u72C3\u72C6\u72C1\u72BA\u72C5\u7395\u7397\u7393\u7394\u7392\u753A\u7539\u7594\u7595\u7681\u793D\u8034\u8095\u8099\u8090\u8092\u809C\u8290\u828F\u8285\u828E\u8291\u8293\"],\n[\"cba1\",\"\u828A\u8283\u8284\u8C78\u8FC9\u8FBF\u909F\u90A1\u90A5\u909E\u90A7\u90A0\u9630\u9628\u962F\u962D\u4E33\u4F98\u4F7C\u4F85\u4F7D\u4F80\u4F87\u4F76\u4F74\u4F89\u4F84\u4F77\u4F4C\u4F97\u4F6A\u4F9A\u4F79\u4F81\u4F78\u4F90\u4F9C\u4F94\u4F9E\u4F92\u4F82\u4F95\u4F6B\u4F6E\u519E\u51BC\u51BE\u5235\u5232\u5233\u5246\u5231\u52BC\u530A\u530B\u533C\u5392\u5394\u5487\u547F\u5481\u5491\u5482\u5488\u546B\u547A\u547E\u5465\u546C\u5474\u5466\u548D\u546F\u5461\u5460\u5498\u5463\u5467\u5464\u56F7\u56F9\u576F\u5772\u576D\u576B\u5771\u5770\u5776\u5780\u5775\u577B\u5773\u5774\u5762\"],\n[\"cc40\",\"\u5768\u577D\u590C\u5945\u59B5\u59BA\u59CF\u59CE\u59B2\u59CC\u59C1\u59B6\u59BC\u59C3\u59D6\u59B1\u59BD\u59C0\u59C8\u59B4\u59C7\u5B62\u5B65\u5B93\u5B95\u5C44\u5C47\u5CAE\u5CA4\u5CA0\u5CB5\u5CAF\u5CA8\u5CAC\u5C9F\u5CA3\u5CAD\u5CA2\u5CAA\u5CA7\u5C9D\u5CA5\u5CB6\u5CB0\u5CA6\u5E17\u5E14\u5E19\u5F28\u5F22\u5F23\u5F24\u5F54\u5F82\u5F7E\u5F7D\u5FDE\u5FE5\u602D\u6026\u6019\u6032\u600B\"],\n[\"cca1\",\"\u6034\u600A\u6017\u6033\u601A\u601E\u602C\u6022\u600D\u6010\u602E\u6013\u6011\u600C\u6009\u601C\u6214\u623D\u62AD\u62B4\u62D1\u62BE\u62AA\u62B6\u62CA\u62AE\u62B3\u62AF\u62BB\u62A9\u62B0\u62B8\u653D\u65A8\u65BB\u6609\u65FC\u6604\u6612\u6608\u65FB\u6603\u660B\u660D\u6605\u65FD\u6611\u6610\u66F6\u670A\u6785\u676C\u678E\u6792\u6776\u677B\u6798\u6786\u6784\u6774\u678D\u678C\u677A\u679F\u6791\u6799\u6783\u677D\u6781\u6778\u6779\u6794\u6B25\u6B80\u6B7E\u6BDE\u6C1D\u6C93\u6CEC\u6CEB\u6CEE\u6CD9\u6CB6\u6CD4\u6CAD\u6CE7\u6CB7\u6CD0\u6CC2\u6CBA\u6CC3\u6CC6\u6CED\u6CF2\"],\n[\"cd40\",\"\u6CD2\u6CDD\u6CB4\u6C8A\u6C9D\u6C80\u6CDE\u6CC0\u6D30\u6CCD\u6CC7\u6CB0\u6CF9\u6CCF\u6CE9\u6CD1\u7094\u7098\u7085\u7093\u7086\u7084\u7091\u7096\u7082\u709A\u7083\u726A\u72D6\u72CB\u72D8\u72C9\u72DC\u72D2\u72D4\u72DA\u72CC\u72D1\u73A4\u73A1\u73AD\u73A6\u73A2\u73A0\u73AC\u739D\u74DD\u74E8\u753F\u7540\u753E\u758C\u7598\u76AF\u76F3\u76F1\u76F0\u76F5\u77F8\u77FC\u77F9\u77FB\u77FA\"],\n[\"cda1\",\"\u77F7\u7942\u793F\u79C5\u7A78\u7A7B\u7AFB\u7C75\u7CFD\u8035\u808F\u80AE\u80A3\u80B8\u80B5\u80AD\u8220\u82A0\u82C0\u82AB\u829A\u8298\u829B\u82B5\u82A7\u82AE\u82BC\u829E\u82BA\u82B4\u82A8\u82A1\u82A9\u82C2\u82A4\u82C3\u82B6\u82A2\u8670\u866F\u866D\u866E\u8C56\u8FD2\u8FCB\u8FD3\u8FCD\u8FD6\u8FD5\u8FD7\u90B2\u90B4\u90AF\u90B3\u90B0\u9639\u963D\u963C\u963A\u9643\u4FCD\u4FC5\u4FD3\u4FB2\u4FC9\u4FCB\u4FC1\u4FD4\u4FDC\u4FD9\u4FBB\u4FB3\u4FDB\u4FC7\u4FD6\u4FBA\u4FC0\u4FB9\u4FEC\u5244\u5249\u52C0\u52C2\u533D\u537C\u5397\u5396\u5399\u5398\u54BA\u54A1\u54AD\u54A5\u54CF\"],\n[\"ce40\",\"\u54C3\u830D\u54B7\u54AE\u54D6\u54B6\u54C5\u54C6\u54A0\u5470\u54BC\u54A2\u54BE\u5472\u54DE\u54B0\u57B5\u579E\u579F\u57A4\u578C\u5797\u579D\u579B\u5794\u5798\u578F\u5799\u57A5\u579A\u5795\u58F4\u590D\u5953\u59E1\u59DE\u59EE\u5A00\u59F1\u59DD\u59FA\u59FD\u59FC\u59F6\u59E4\u59F2\u59F7\u59DB\u59E9\u59F3\u59F5\u59E0\u59FE\u59F4\u59ED\u5BA8\u5C4C\u5CD0\u5CD8\u5CCC\u5CD7\u5CCB\u5CDB\"],\n[\"cea1\",\"\u5CDE\u5CDA\u5CC9\u5CC7\u5CCA\u5CD6\u5CD3\u5CD4\u5CCF\u5CC8\u5CC6\u5CCE\u5CDF\u5CF8\u5DF9\u5E21\u5E22\u5E23\u5E20\u5E24\u5EB0\u5EA4\u5EA2\u5E9B\u5EA3\u5EA5\u5F07\u5F2E\u5F56\u5F86\u6037\u6039\u6054\u6072\u605E\u6045\u6053\u6047\u6049\u605B\u604C\u6040\u6042\u605F\u6024\u6044\u6058\u6066\u606E\u6242\u6243\u62CF\u630D\u630B\u62F5\u630E\u6303\u62EB\u62F9\u630F\u630C\u62F8\u62F6\u6300\u6313\u6314\u62FA\u6315\u62FB\u62F0\u6541\u6543\u65AA\u65BF\u6636\u6621\u6632\u6635\u661C\u6626\u6622\u6633\u662B\u663A\u661D\u6634\u6639\u662E\u670F\u6710\u67C1\u67F2\u67C8\u67BA\"],\n[\"cf40\",\"\u67DC\u67BB\u67F8\u67D8\u67C0\u67B7\u67C5\u67EB\u67E4\u67DF\u67B5\u67CD\u67B3\u67F7\u67F6\u67EE\u67E3\u67C2\u67B9\u67CE\u67E7\u67F0\u67B2\u67FC\u67C6\u67ED\u67CC\u67AE\u67E6\u67DB\u67FA\u67C9\u67CA\u67C3\u67EA\u67CB\u6B28\u6B82\u6B84\u6BB6\u6BD6\u6BD8\u6BE0\u6C20\u6C21\u6D28\u6D34\u6D2D\u6D1F\u6D3C\u6D3F\u6D12\u6D0A\u6CDA\u6D33\u6D04\u6D19\u6D3A\u6D1A\u6D11\u6D00\u6D1D\u6D42\"],\n[\"cfa1\",\"\u6D01\u6D18\u6D37\u6D03\u6D0F\u6D40\u6D07\u6D20\u6D2C\u6D08\u6D22\u6D09\u6D10\u70B7\u709F\u70BE\u70B1\u70B0\u70A1\u70B4\u70B5\u70A9\u7241\u7249\u724A\u726C\u7270\u7273\u726E\u72CA\u72E4\u72E8\u72EB\u72DF\u72EA\u72E6\u72E3\u7385\u73CC\u73C2\u73C8\u73C5\u73B9\u73B6\u73B5\u73B4\u73EB\u73BF\u73C7\u73BE\u73C3\u73C6\u73B8\u73CB\u74EC\u74EE\u752E\u7547\u7548\u75A7\u75AA\u7679\u76C4\u7708\u7703\u7704\u7705\u770A\u76F7\u76FB\u76FA\u77E7\u77E8\u7806\u7811\u7812\u7805\u7810\u780F\u780E\u7809\u7803\u7813\u794A\u794C\u794B\u7945\u7944\u79D5\u79CD\u79CF\u79D6\u79CE\u7A80\"],\n[\"d040\",\"\u7A7E\u7AD1\u7B00\u7B01\u7C7A\u7C78\u7C79\u7C7F\u7C80\u7C81\u7D03\u7D08\u7D01\u7F58\u7F91\u7F8D\u7FBE\u8007\u800E\u800F\u8014\u8037\u80D8\u80C7\u80E0\u80D1\u80C8\u80C2\u80D0\u80C5\u80E3\u80D9\u80DC\u80CA\u80D5\u80C9\u80CF\u80D7\u80E6\u80CD\u81FF\u8221\u8294\u82D9\u82FE\u82F9\u8307\u82E8\u8300\u82D5\u833A\u82EB\u82D6\u82F4\u82EC\u82E1\u82F2\u82F5\u830C\u82FB\u82F6\u82F0\u82EA\"],\n[\"d0a1\",\"\u82E4\u82E0\u82FA\u82F3\u82ED\u8677\u8674\u867C\u8673\u8841\u884E\u8867\u886A\u8869\u89D3\u8A04\u8A07\u8D72\u8FE3\u8FE1\u8FEE\u8FE0\u90F1\u90BD\u90BF\u90D5\u90C5\u90BE\u90C7\u90CB\u90C8\u91D4\u91D3\u9654\u964F\u9651\u9653\u964A\u964E\u501E\u5005\u5007\u5013\u5022\u5030\u501B\u4FF5\u4FF4\u5033\u5037\u502C\u4FF6\u4FF7\u5017\u501C\u5020\u5027\u5035\u502F\u5031\u500E\u515A\u5194\u5193\u51CA\u51C4\u51C5\u51C8\u51CE\u5261\u525A\u5252\u525E\u525F\u5255\u5262\u52CD\u530E\u539E\u5526\u54E2\u5517\u5512\u54E7\u54F3\u54E4\u551A\u54FF\u5504\u5508\u54EB\u5511\u5505\u54F1\"],\n[\"d140\",\"\u550A\u54FB\u54F7\u54F8\u54E0\u550E\u5503\u550B\u5701\u5702\u57CC\u5832\u57D5\u57D2\u57BA\u57C6\u57BD\u57BC\u57B8\u57B6\u57BF\u57C7\u57D0\u57B9\u57C1\u590E\u594A\u5A19\u5A16\u5A2D\u5A2E\u5A15\u5A0F\u5A17\u5A0A\u5A1E\u5A33\u5B6C\u5BA7\u5BAD\u5BAC\u5C03\u5C56\u5C54\u5CEC\u5CFF\u5CEE\u5CF1\u5CF7\u5D00\u5CF9\u5E29\u5E28\u5EA8\u5EAE\u5EAA\u5EAC\u5F33\u5F30\u5F67\u605D\u605A\u6067\"],\n[\"d1a1\",\"\u6041\u60A2\u6088\u6080\u6092\u6081\u609D\u6083\u6095\u609B\u6097\u6087\u609C\u608E\u6219\u6246\u62F2\u6310\u6356\u632C\u6344\u6345\u6336\u6343\u63E4\u6339\u634B\u634A\u633C\u6329\u6341\u6334\u6358\u6354\u6359\u632D\u6347\u6333\u635A\u6351\u6338\u6357\u6340\u6348\u654A\u6546\u65C6\u65C3\u65C4\u65C2\u664A\u665F\u6647\u6651\u6712\u6713\u681F\u681A\u6849\u6832\u6833\u683B\u684B\u684F\u6816\u6831\u681C\u6835\u682B\u682D\u682F\u684E\u6844\u6834\u681D\u6812\u6814\u6826\u6828\u682E\u684D\u683A\u6825\u6820\u6B2C\u6B2F\u6B2D\u6B31\u6B34\u6B6D\u8082\u6B88\u6BE6\u6BE4\"],\n[\"d240\",\"\u6BE8\u6BE3\u6BE2\u6BE7\u6C25\u6D7A\u6D63\u6D64\u6D76\u6D0D\u6D61\u6D92\u6D58\u6D62\u6D6D\u6D6F\u6D91\u6D8D\u6DEF\u6D7F\u6D86\u6D5E\u6D67\u6D60\u6D97\u6D70\u6D7C\u6D5F\u6D82\u6D98\u6D2F\u6D68\u6D8B\u6D7E\u6D80\u6D84\u6D16\u6D83\u6D7B\u6D7D\u6D75\u6D90\u70DC\u70D3\u70D1\u70DD\u70CB\u7F39\u70E2\u70D7\u70D2\u70DE\u70E0\u70D4\u70CD\u70C5\u70C6\u70C7\u70DA\u70CE\u70E1\u7242\u7278\"],\n[\"d2a1\",\"\u7277\u7276\u7300\u72FA\u72F4\u72FE\u72F6\u72F3\u72FB\u7301\u73D3\u73D9\u73E5\u73D6\u73BC\u73E7\u73E3\u73E9\u73DC\u73D2\u73DB\u73D4\u73DD\u73DA\u73D7\u73D8\u73E8\u74DE\u74DF\u74F4\u74F5\u7521\u755B\u755F\u75B0\u75C1\u75BB\u75C4\u75C0\u75BF\u75B6\u75BA\u768A\u76C9\u771D\u771B\u7710\u7713\u7712\u7723\u7711\u7715\u7719\u771A\u7722\u7727\u7823\u782C\u7822\u7835\u782F\u7828\u782E\u782B\u7821\u7829\u7833\u782A\u7831\u7954\u795B\u794F\u795C\u7953\u7952\u7951\u79EB\u79EC\u79E0\u79EE\u79ED\u79EA\u79DC\u79DE\u79DD\u7A86\u7A89\u7A85\u7A8B\u7A8C\u7A8A\u7A87\u7AD8\u7B10\"],\n[\"d340\",\"\u7B04\u7B13\u7B05\u7B0F\u7B08\u7B0A\u7B0E\u7B09\u7B12\u7C84\u7C91\u7C8A\u7C8C\u7C88\u7C8D\u7C85\u7D1E\u7D1D\u7D11\u7D0E\u7D18\u7D16\u7D13\u7D1F\u7D12\u7D0F\u7D0C\u7F5C\u7F61\u7F5E\u7F60\u7F5D\u7F5B\u7F96\u7F92\u7FC3\u7FC2\u7FC0\u8016\u803E\u8039\u80FA\u80F2\u80F9\u80F5\u8101\u80FB\u8100\u8201\u822F\u8225\u8333\u832D\u8344\u8319\u8351\u8325\u8356\u833F\u8341\u8326\u831C\u8322\"],\n[\"d3a1\",\"\u8342\u834E\u831B\u832A\u8308\u833C\u834D\u8316\u8324\u8320\u8337\u832F\u8329\u8347\u8345\u834C\u8353\u831E\u832C\u834B\u8327\u8348\u8653\u8652\u86A2\u86A8\u8696\u868D\u8691\u869E\u8687\u8697\u8686\u868B\u869A\u8685\u86A5\u8699\u86A1\u86A7\u8695\u8698\u868E\u869D\u8690\u8694\u8843\u8844\u886D\u8875\u8876\u8872\u8880\u8871\u887F\u886F\u8883\u887E\u8874\u887C\u8A12\u8C47\u8C57\u8C7B\u8CA4\u8CA3\u8D76\u8D78\u8DB5\u8DB7\u8DB6\u8ED1\u8ED3\u8FFE\u8FF5\u9002\u8FFF\u8FFB\u9004\u8FFC\u8FF6\u90D6\u90E0\u90D9\u90DA\u90E3\u90DF\u90E5\u90D8\u90DB\u90D7\u90DC\u90E4\u9150\"],\n[\"d440\",\"\u914E\u914F\u91D5\u91E2\u91DA\u965C\u965F\u96BC\u98E3\u9ADF\u9B2F\u4E7F\u5070\u506A\u5061\u505E\u5060\u5053\u504B\u505D\u5072\u5048\u504D\u5041\u505B\u504A\u5062\u5015\u5045\u505F\u5069\u506B\u5063\u5064\u5046\u5040\u506E\u5073\u5057\u5051\u51D0\u526B\u526D\u526C\u526E\u52D6\u52D3\u532D\u539C\u5575\u5576\u553C\u554D\u5550\u5534\u552A\u5551\u5562\u5536\u5535\u5530\u5552\u5545\"],\n[\"d4a1\",\"\u550C\u5532\u5565\u554E\u5539\u5548\u552D\u553B\u5540\u554B\u570A\u5707\u57FB\u5814\u57E2\u57F6\u57DC\u57F4\u5800\u57ED\u57FD\u5808\u57F8\u580B\u57F3\u57CF\u5807\u57EE\u57E3\u57F2\u57E5\u57EC\u57E1\u580E\u57FC\u5810\u57E7\u5801\u580C\u57F1\u57E9\u57F0\u580D\u5804\u595C\u5A60\u5A58\u5A55\u5A67\u5A5E\u5A38\u5A35\u5A6D\u5A50\u5A5F\u5A65\u5A6C\u5A53\u5A64\u5A57\u5A43\u5A5D\u5A52\u5A44\u5A5B\u5A48\u5A8E\u5A3E\u5A4D\u5A39\u5A4C\u5A70\u5A69\u5A47\u5A51\u5A56\u5A42\u5A5C\u5B72\u5B6E\u5BC1\u5BC0\u5C59\u5D1E\u5D0B\u5D1D\u5D1A\u5D20\u5D0C\u5D28\u5D0D\u5D26\u5D25\u5D0F\"],\n[\"d540\",\"\u5D30\u5D12\u5D23\u5D1F\u5D2E\u5E3E\u5E34\u5EB1\u5EB4\u5EB9\u5EB2\u5EB3\u5F36\u5F38\u5F9B\u5F96\u5F9F\u608A\u6090\u6086\u60BE\u60B0\u60BA\u60D3\u60D4\u60CF\u60E4\u60D9\u60DD\u60C8\u60B1\u60DB\u60B7\u60CA\u60BF\u60C3\u60CD\u60C0\u6332\u6365\u638A\u6382\u637D\u63BD\u639E\u63AD\u639D\u6397\u63AB\u638E\u636F\u6387\u6390\u636E\u63AF\u6375\u639C\u636D\u63AE\u637C\u63A4\u633B\u639F\"],\n[\"d5a1\",\"\u6378\u6385\u6381\u6391\u638D\u6370\u6553\u65CD\u6665\u6661\u665B\u6659\u665C\u6662\u6718\u6879\u6887\u6890\u689C\u686D\u686E\u68AE\u68AB\u6956\u686F\u68A3\u68AC\u68A9\u6875\u6874\u68B2\u688F\u6877\u6892\u687C\u686B\u6872\u68AA\u6880\u6871\u687E\u689B\u6896\u688B\u68A0\u6889\u68A4\u6878\u687B\u6891\u688C\u688A\u687D\u6B36\u6B33\u6B37\u6B38\u6B91\u6B8F\u6B8D\u6B8E\u6B8C\u6C2A\u6DC0\u6DAB\u6DB4\u6DB3\u6E74\u6DAC\u6DE9\u6DE2\u6DB7\u6DF6\u6DD4\u6E00\u6DC8\u6DE0\u6DDF\u6DD6\u6DBE\u6DE5\u6DDC\u6DDD\u6DDB\u6DF4\u6DCA\u6DBD\u6DED\u6DF0\u6DBA\u6DD5\u6DC2\u6DCF\u6DC9\"],\n[\"d640\",\"\u6DD0\u6DF2\u6DD3\u6DFD\u6DD7\u6DCD\u6DE3\u6DBB\u70FA\u710D\u70F7\u7117\u70F4\u710C\u70F0\u7104\u70F3\u7110\u70FC\u70FF\u7106\u7113\u7100\u70F8\u70F6\u710B\u7102\u710E\u727E\u727B\u727C\u727F\u731D\u7317\u7307\u7311\u7318\u730A\u7308\u72FF\u730F\u731E\u7388\u73F6\u73F8\u73F5\u7404\u7401\u73FD\u7407\u7400\u73FA\u73FC\u73FF\u740C\u740B\u73F4\u7408\u7564\u7563\u75CE\u75D2\u75CF\"],\n[\"d6a1\",\"\u75CB\u75CC\u75D1\u75D0\u768F\u7689\u76D3\u7739\u772F\u772D\u7731\u7732\u7734\u7733\u773D\u7725\u773B\u7735\u7848\u7852\u7849\u784D\u784A\u784C\u7826\u7845\u7850\u7964\u7967\u7969\u796A\u7963\u796B\u7961\u79BB\u79FA\u79F8\u79F6\u79F7\u7A8F\u7A94\u7A90\u7B35\u7B47\u7B34\u7B25\u7B30\u7B22\u7B24\u7B33\u7B18\u7B2A\u7B1D\u7B31\u7B2B\u7B2D\u7B2F\u7B32\u7B38\u7B1A\u7B23\u7C94\u7C98\u7C96\u7CA3\u7D35\u7D3D\u7D38\u7D36\u7D3A\u7D45\u7D2C\u7D29\u7D41\u7D47\u7D3E\u7D3F\u7D4A\u7D3B\u7D28\u7F63\u7F95\u7F9C\u7F9D\u7F9B\u7FCA\u7FCB\u7FCD\u7FD0\u7FD1\u7FC7\u7FCF\u7FC9\u801F\"],\n[\"d740\",\"\u801E\u801B\u8047\u8043\u8048\u8118\u8125\u8119\u811B\u812D\u811F\u812C\u811E\u8121\u8115\u8127\u811D\u8122\u8211\u8238\u8233\u823A\u8234\u8232\u8274\u8390\u83A3\u83A8\u838D\u837A\u8373\u83A4\u8374\u838F\u8381\u8395\u8399\u8375\u8394\u83A9\u837D\u8383\u838C\u839D\u839B\u83AA\u838B\u837E\u83A5\u83AF\u8388\u8397\u83B0\u837F\u83A6\u8387\u83AE\u8376\u839A\u8659\u8656\u86BF\u86B7\"],\n[\"d7a1\",\"\u86C2\u86C1\u86C5\u86BA\u86B0\u86C8\u86B9\u86B3\u86B8\u86CC\u86B4\u86BB\u86BC\u86C3\u86BD\u86BE\u8852\u8889\u8895\u88A8\u88A2\u88AA\u889A\u8891\u88A1\u889F\u8898\u88A7\u8899\u889B\u8897\u88A4\u88AC\u888C\u8893\u888E\u8982\u89D6\u89D9\u89D5\u8A30\u8A27\u8A2C\u8A1E\u8C39\u8C3B\u8C5C\u8C5D\u8C7D\u8CA5\u8D7D\u8D7B\u8D79\u8DBC\u8DC2\u8DB9\u8DBF\u8DC1\u8ED8\u8EDE\u8EDD\u8EDC\u8ED7\u8EE0\u8EE1\u9024\u900B\u9011\u901C\u900C\u9021\u90EF\u90EA\u90F0\u90F4\u90F2\u90F3\u90D4\u90EB\u90EC\u90E9\u9156\u9158\u915A\u9153\u9155\u91EC\u91F4\u91F1\u91F3\u91F8\u91E4\u91F9\u91EA\"],\n[\"d840\",\"\u91EB\u91F7\u91E8\u91EE\u957A\u9586\u9588\u967C\u966D\u966B\u9671\u966F\u96BF\u976A\u9804\u98E5\u9997\u509B\u5095\u5094\u509E\u508B\u50A3\u5083\u508C\u508E\u509D\u5068\u509C\u5092\u5082\u5087\u515F\u51D4\u5312\u5311\u53A4\u53A7\u5591\u55A8\u55A5\u55AD\u5577\u5645\u55A2\u5593\u5588\u558F\u55B5\u5581\u55A3\u5592\u55A4\u557D\u558C\u55A6\u557F\u5595\u55A1\u558E\u570C\u5829\u5837\"],\n[\"d8a1\",\"\u5819\u581E\u5827\u5823\u5828\u57F5\u5848\u5825\u581C\u581B\u5833\u583F\u5836\u582E\u5839\u5838\u582D\u582C\u583B\u5961\u5AAF\u5A94\u5A9F\u5A7A\u5AA2\u5A9E\u5A78\u5AA6\u5A7C\u5AA5\u5AAC\u5A95\u5AAE\u5A37\u5A84\u5A8A\u5A97\u5A83\u5A8B\u5AA9\u5A7B\u5A7D\u5A8C\u5A9C\u5A8F\u5A93\u5A9D\u5BEA\u5BCD\u5BCB\u5BD4\u5BD1\u5BCA\u5BCE\u5C0C\u5C30\u5D37\u5D43\u5D6B\u5D41\u5D4B\u5D3F\u5D35\u5D51\u5D4E\u5D55\u5D33\u5D3A\u5D52\u5D3D\u5D31\u5D59\u5D42\u5D39\u5D49\u5D38\u5D3C\u5D32\u5D36\u5D40\u5D45\u5E44\u5E41\u5F58\u5FA6\u5FA5\u5FAB\u60C9\u60B9\u60CC\u60E2\u60CE\u60C4\u6114\"],\n[\"d940\",\"\u60F2\u610A\u6116\u6105\u60F5\u6113\u60F8\u60FC\u60FE\u60C1\u6103\u6118\u611D\u6110\u60FF\u6104\u610B\u624A\u6394\u63B1\u63B0\u63CE\u63E5\u63E8\u63EF\u63C3\u649D\u63F3\u63CA\u63E0\u63F6\u63D5\u63F2\u63F5\u6461\u63DF\u63BE\u63DD\u63DC\u63C4\u63D8\u63D3\u63C2\u63C7\u63CC\u63CB\u63C8\u63F0\u63D7\u63D9\u6532\u6567\u656A\u6564\u655C\u6568\u6565\u658C\u659D\u659E\u65AE\u65D0\u65D2\"],\n[\"d9a1\",\"\u667C\u666C\u667B\u6680\u6671\u6679\u666A\u6672\u6701\u690C\u68D3\u6904\u68DC\u692A\u68EC\u68EA\u68F1\u690F\u68D6\u68F7\u68EB\u68E4\u68F6\u6913\u6910\u68F3\u68E1\u6907\u68CC\u6908\u6970\u68B4\u6911\u68EF\u68C6\u6914\u68F8\u68D0\u68FD\u68FC\u68E8\u690B\u690A\u6917\u68CE\u68C8\u68DD\u68DE\u68E6\u68F4\u68D1\u6906\u68D4\u68E9\u6915\u6925\u68C7\u6B39\u6B3B\u6B3F\u6B3C\u6B94\u6B97\u6B99\u6B95\u6BBD\u6BF0\u6BF2\u6BF3\u6C30\u6DFC\u6E46\u6E47\u6E1F\u6E49\u6E88\u6E3C\u6E3D\u6E45\u6E62\u6E2B\u6E3F\u6E41\u6E5D\u6E73\u6E1C\u6E33\u6E4B\u6E40\u6E51\u6E3B\u6E03\u6E2E\u6E5E\"],\n[\"da40\",\"\u6E68\u6E5C\u6E61\u6E31\u6E28\u6E60\u6E71\u6E6B\u6E39\u6E22\u6E30\u6E53\u6E65\u6E27\u6E78\u6E64\u6E77\u6E55\u6E79\u6E52\u6E66\u6E35\u6E36\u6E5A\u7120\u711E\u712F\u70FB\u712E\u7131\u7123\u7125\u7122\u7132\u711F\u7128\u713A\u711B\u724B\u725A\u7288\u7289\u7286\u7285\u728B\u7312\u730B\u7330\u7322\u7331\u7333\u7327\u7332\u732D\u7326\u7323\u7335\u730C\u742E\u742C\u7430\u742B\u7416\"],\n[\"daa1\",\"\u741A\u7421\u742D\u7431\u7424\u7423\u741D\u7429\u7420\u7432\u74FB\u752F\u756F\u756C\u75E7\u75DA\u75E1\u75E6\u75DD\u75DF\u75E4\u75D7\u7695\u7692\u76DA\u7746\u7747\u7744\u774D\u7745\u774A\u774E\u774B\u774C\u77DE\u77EC\u7860\u7864\u7865\u785C\u786D\u7871\u786A\u786E\u7870\u7869\u7868\u785E\u7862\u7974\u7973\u7972\u7970\u7A02\u7A0A\u7A03\u7A0C\u7A04\u7A99\u7AE6\u7AE4\u7B4A\u7B3B\u7B44\u7B48\u7B4C\u7B4E\u7B40\u7B58\u7B45\u7CA2\u7C9E\u7CA8\u7CA1\u7D58\u7D6F\u7D63\u7D53\u7D56\u7D67\u7D6A\u7D4F\u7D6D\u7D5C\u7D6B\u7D52\u7D54\u7D69\u7D51\u7D5F\u7D4E\u7F3E\u7F3F\u7F65\"],\n[\"db40\",\"\u7F66\u7FA2\u7FA0\u7FA1\u7FD7\u8051\u804F\u8050\u80FE\u80D4\u8143\u814A\u8152\u814F\u8147\u813D\u814D\u813A\u81E6\u81EE\u81F7\u81F8\u81F9\u8204\u823C\u823D\u823F\u8275\u833B\u83CF\u83F9\u8423\u83C0\u83E8\u8412\u83E7\u83E4\u83FC\u83F6\u8410\u83C6\u83C8\u83EB\u83E3\u83BF\u8401\u83DD\u83E5\u83D8\u83FF\u83E1\u83CB\u83CE\u83D6\u83F5\u83C9\u8409\u840F\u83DE\u8411\u8406\u83C2\u83F3\"],\n[\"dba1\",\"\u83D5\u83FA\u83C7\u83D1\u83EA\u8413\u83C3\u83EC\u83EE\u83C4\u83FB\u83D7\u83E2\u841B\u83DB\u83FE\u86D8\u86E2\u86E6\u86D3\u86E3\u86DA\u86EA\u86DD\u86EB\u86DC\u86EC\u86E9\u86D7\u86E8\u86D1\u8848\u8856\u8855\u88BA\u88D7\u88B9\u88B8\u88C0\u88BE\u88B6\u88BC\u88B7\u88BD\u88B2\u8901\u88C9\u8995\u8998\u8997\u89DD\u89DA\u89DB\u8A4E\u8A4D\u8A39\u8A59\u8A40\u8A57\u8A58\u8A44\u8A45\u8A52\u8A48\u8A51\u8A4A\u8A4C\u8A4F\u8C5F\u8C81\u8C80\u8CBA\u8CBE\u8CB0\u8CB9\u8CB5\u8D84\u8D80\u8D89\u8DD8\u8DD3\u8DCD\u8DC7\u8DD6\u8DDC\u8DCF\u8DD5\u8DD9\u8DC8\u8DD7\u8DC5\u8EEF\u8EF7\u8EFA\"],\n[\"dc40\",\"\u8EF9\u8EE6\u8EEE\u8EE5\u8EF5\u8EE7\u8EE8\u8EF6\u8EEB\u8EF1\u8EEC\u8EF4\u8EE9\u902D\u9034\u902F\u9106\u912C\u9104\u90FF\u90FC\u9108\u90F9\u90FB\u9101\u9100\u9107\u9105\u9103\u9161\u9164\u915F\u9162\u9160\u9201\u920A\u9225\u9203\u921A\u9226\u920F\u920C\u9200\u9212\u91FF\u91FD\u9206\u9204\u9227\u9202\u921C\u9224\u9219\u9217\u9205\u9216\u957B\u958D\u958C\u9590\u9687\u967E\u9688\"],\n[\"dca1\",\"\u9689\u9683\u9680\u96C2\u96C8\u96C3\u96F1\u96F0\u976C\u9770\u976E\u9807\u98A9\u98EB\u9CE6\u9EF9\u4E83\u4E84\u4EB6\u50BD\u50BF\u50C6\u50AE\u50C4\u50CA\u50B4\u50C8\u50C2\u50B0\u50C1\u50BA\u50B1\u50CB\u50C9\u50B6\u50B8\u51D7\u527A\u5278\u527B\u527C\u55C3\u55DB\u55CC\u55D0\u55CB\u55CA\u55DD\u55C0\u55D4\u55C4\u55E9\u55BF\u55D2\u558D\u55CF\u55D5\u55E2\u55D6\u55C8\u55F2\u55CD\u55D9\u55C2\u5714\u5853\u5868\u5864\u584F\u584D\u5849\u586F\u5855\u584E\u585D\u5859\u5865\u585B\u583D\u5863\u5871\u58FC\u5AC7\u5AC4\u5ACB\u5ABA\u5AB8\u5AB1\u5AB5\u5AB0\u5ABF\u5AC8\u5ABB\u5AC6\"],\n[\"dd40\",\"\u5AB7\u5AC0\u5ACA\u5AB4\u5AB6\u5ACD\u5AB9\u5A90\u5BD6\u5BD8\u5BD9\u5C1F\u5C33\u5D71\u5D63\u5D4A\u5D65\u5D72\u5D6C\u5D5E\u5D68\u5D67\u5D62\u5DF0\u5E4F\u5E4E\u5E4A\u5E4D\u5E4B\u5EC5\u5ECC\u5EC6\u5ECB\u5EC7\u5F40\u5FAF\u5FAD\u60F7\u6149\u614A\u612B\u6145\u6136\u6132\u612E\u6146\u612F\u614F\u6129\u6140\u6220\u9168\u6223\u6225\u6224\u63C5\u63F1\u63EB\u6410\u6412\u6409\u6420\u6424\"],\n[\"dda1\",\"\u6433\u6443\u641F\u6415\u6418\u6439\u6437\u6422\u6423\u640C\u6426\u6430\u6428\u6441\u6435\u642F\u640A\u641A\u6440\u6425\u6427\u640B\u63E7\u641B\u642E\u6421\u640E\u656F\u6592\u65D3\u6686\u668C\u6695\u6690\u668B\u668A\u6699\u6694\u6678\u6720\u6966\u695F\u6938\u694E\u6962\u6971\u693F\u6945\u696A\u6939\u6942\u6957\u6959\u697A\u6948\u6949\u6935\u696C\u6933\u693D\u6965\u68F0\u6978\u6934\u6969\u6940\u696F\u6944\u6976\u6958\u6941\u6974\u694C\u693B\u694B\u6937\u695C\u694F\u6951\u6932\u6952\u692F\u697B\u693C\u6B46\u6B45\u6B43\u6B42\u6B48\u6B41\u6B9B\uFA0D\u6BFB\u6BFC\"],\n[\"de40\",\"\u6BF9\u6BF7\u6BF8\u6E9B\u6ED6\u6EC8\u6E8F\u6EC0\u6E9F\u6E93\u6E94\u6EA0\u6EB1\u6EB9\u6EC6\u6ED2\u6EBD\u6EC1\u6E9E\u6EC9\u6EB7\u6EB0\u6ECD\u6EA6\u6ECF\u6EB2\u6EBE\u6EC3\u6EDC\u6ED8\u6E99\u6E92\u6E8E\u6E8D\u6EA4\u6EA1\u6EBF\u6EB3\u6ED0\u6ECA\u6E97\u6EAE\u6EA3\u7147\u7154\u7152\u7163\u7160\u7141\u715D\u7162\u7172\u7178\u716A\u7161\u7142\u7158\u7143\u714B\u7170\u715F\u7150\u7153\"],\n[\"dea1\",\"\u7144\u714D\u715A\u724F\u728D\u728C\u7291\u7290\u728E\u733C\u7342\u733B\u733A\u7340\u734A\u7349\u7444\u744A\u744B\u7452\u7451\u7457\u7440\u744F\u7450\u744E\u7442\u7446\u744D\u7454\u74E1\u74FF\u74FE\u74FD\u751D\u7579\u7577\u6983\u75EF\u760F\u7603\u75F7\u75FE\u75FC\u75F9\u75F8\u7610\u75FB\u75F6\u75ED\u75F5\u75FD\u7699\u76B5\u76DD\u7755\u775F\u7760\u7752\u7756\u775A\u7769\u7767\u7754\u7759\u776D\u77E0\u7887\u789A\u7894\u788F\u7884\u7895\u7885\u7886\u78A1\u7883\u7879\u7899\u7880\u7896\u787B\u797C\u7982\u797D\u7979\u7A11\u7A18\u7A19\u7A12\u7A17\u7A15\u7A22\u7A13\"],\n[\"df40\",\"\u7A1B\u7A10\u7AA3\u7AA2\u7A9E\u7AEB\u7B66\u7B64\u7B6D\u7B74\u7B69\u7B72\u7B65\u7B73\u7B71\u7B70\u7B61\u7B78\u7B76\u7B63\u7CB2\u7CB4\u7CAF\u7D88\u7D86\u7D80\u7D8D\u7D7F\u7D85\u7D7A\u7D8E\u7D7B\u7D83\u7D7C\u7D8C\u7D94\u7D84\u7D7D\u7D92\u7F6D\u7F6B\u7F67\u7F68\u7F6C\u7FA6\u7FA5\u7FA7\u7FDB\u7FDC\u8021\u8164\u8160\u8177\u815C\u8169\u815B\u8162\u8172\u6721\u815E\u8176\u8167\u816F\"],\n[\"dfa1\",\"\u8144\u8161\u821D\u8249\u8244\u8240\u8242\u8245\u84F1\u843F\u8456\u8476\u8479\u848F\u848D\u8465\u8451\u8440\u8486\u8467\u8430\u844D\u847D\u845A\u8459\u8474\u8473\u845D\u8507\u845E\u8437\u843A\u8434\u847A\u8443\u8478\u8432\u8445\u8429\u83D9\u844B\u842F\u8442\u842D\u845F\u8470\u8439\u844E\u844C\u8452\u846F\u84C5\u848E\u843B\u8447\u8436\u8433\u8468\u847E\u8444\u842B\u8460\u8454\u846E\u8450\u870B\u8704\u86F7\u870C\u86FA\u86D6\u86F5\u874D\u86F8\u870E\u8709\u8701\u86F6\u870D\u8705\u88D6\u88CB\u88CD\u88CE\u88DE\u88DB\u88DA\u88CC\u88D0\u8985\u899B\u89DF\u89E5\u89E4\"],\n[\"e040\",\"\u89E1\u89E0\u89E2\u89DC\u89E6\u8A76\u8A86\u8A7F\u8A61\u8A3F\u8A77\u8A82\u8A84\u8A75\u8A83\u8A81\u8A74\u8A7A\u8C3C\u8C4B\u8C4A\u8C65\u8C64\u8C66\u8C86\u8C84\u8C85\u8CCC\u8D68\u8D69\u8D91\u8D8C\u8D8E\u8D8F\u8D8D\u8D93\u8D94\u8D90\u8D92\u8DF0\u8DE0\u8DEC\u8DF1\u8DEE\u8DD0\u8DE9\u8DE3\u8DE2\u8DE7\u8DF2\u8DEB\u8DF4\u8F06\u8EFF\u8F01\u8F00\u8F05\u8F07\u8F08\u8F02\u8F0B\u9052\u903F\"],\n[\"e0a1\",\"\u9044\u9049\u903D\u9110\u910D\u910F\u9111\u9116\u9114\u910B\u910E\u916E\u916F\u9248\u9252\u9230\u923A\u9266\u9233\u9265\u925E\u9283\u922E\u924A\u9246\u926D\u926C\u924F\u9260\u9267\u926F\u9236\u9261\u9270\u9231\u9254\u9263\u9250\u9272\u924E\u9253\u924C\u9256\u9232\u959F\u959C\u959E\u959B\u9692\u9693\u9691\u9697\u96CE\u96FA\u96FD\u96F8\u96F5\u9773\u9777\u9778\u9772\u980F\u980D\u980E\u98AC\u98F6\u98F9\u99AF\u99B2\u99B0\u99B5\u9AAD\u9AAB\u9B5B\u9CEA\u9CED\u9CE7\u9E80\u9EFD\u50E6\u50D4\u50D7\u50E8\u50F3\u50DB\u50EA\u50DD\u50E4\u50D3\u50EC\u50F0\u50EF\u50E3\u50E0\"],\n[\"e140\",\"\u51D8\u5280\u5281\u52E9\u52EB\u5330\u53AC\u5627\u5615\u560C\u5612\u55FC\u560F\u561C\u5601\u5613\u5602\u55FA\u561D\u5604\u55FF\u55F9\u5889\u587C\u5890\u5898\u5886\u5881\u587F\u5874\u588B\u587A\u5887\u5891\u588E\u5876\u5882\u5888\u587B\u5894\u588F\u58FE\u596B\u5ADC\u5AEE\u5AE5\u5AD5\u5AEA\u5ADA\u5AED\u5AEB\u5AF3\u5AE2\u5AE0\u5ADB\u5AEC\u5ADE\u5ADD\u5AD9\u5AE8\u5ADF\u5B77\u5BE0\"],\n[\"e1a1\",\"\u5BE3\u5C63\u5D82\u5D80\u5D7D\u5D86\u5D7A\u5D81\u5D77\u5D8A\u5D89\u5D88\u5D7E\u5D7C\u5D8D\u5D79\u5D7F\u5E58\u5E59\u5E53\u5ED8\u5ED1\u5ED7\u5ECE\u5EDC\u5ED5\u5ED9\u5ED2\u5ED4\u5F44\u5F43\u5F6F\u5FB6\u612C\u6128\u6141\u615E\u6171\u6173\u6152\u6153\u6172\u616C\u6180\u6174\u6154\u617A\u615B\u6165\u613B\u616A\u6161\u6156\u6229\u6227\u622B\u642B\u644D\u645B\u645D\u6474\u6476\u6472\u6473\u647D\u6475\u6466\u64A6\u644E\u6482\u645E\u645C\u644B\u6453\u6460\u6450\u647F\u643F\u646C\u646B\u6459\u6465\u6477\u6573\u65A0\u66A1\u66A0\u669F\u6705\u6704\u6722\u69B1\u69B6\u69C9\"],\n[\"e240\",\"\u69A0\u69CE\u6996\u69B0\u69AC\u69BC\u6991\u6999\u698E\u69A7\u698D\u69A9\u69BE\u69AF\u69BF\u69C4\u69BD\u69A4\u69D4\u69B9\u69CA\u699A\u69CF\u69B3\u6993\u69AA\u69A1\u699E\u69D9\u6997\u6990\u69C2\u69B5\u69A5\u69C6\u6B4A\u6B4D\u6B4B\u6B9E\u6B9F\u6BA0\u6BC3\u6BC4\u6BFE\u6ECE\u6EF5\u6EF1\u6F03\u6F25\u6EF8\u6F37\u6EFB\u6F2E\u6F09\u6F4E\u6F19\u6F1A\u6F27\u6F18\u6F3B\u6F12\u6EED\u6F0A\"],\n[\"e2a1\",\"\u6F36\u6F73\u6EF9\u6EEE\u6F2D\u6F40\u6F30\u6F3C\u6F35\u6EEB\u6F07\u6F0E\u6F43\u6F05\u6EFD\u6EF6\u6F39\u6F1C\u6EFC\u6F3A\u6F1F\u6F0D\u6F1E\u6F08\u6F21\u7187\u7190\u7189\u7180\u7185\u7182\u718F\u717B\u7186\u7181\u7197\u7244\u7253\u7297\u7295\u7293\u7343\u734D\u7351\u734C\u7462\u7473\u7471\u7475\u7472\u7467\u746E\u7500\u7502\u7503\u757D\u7590\u7616\u7608\u760C\u7615\u7611\u760A\u7614\u76B8\u7781\u777C\u7785\u7782\u776E\u7780\u776F\u777E\u7783\u78B2\u78AA\u78B4\u78AD\u78A8\u787E\u78AB\u789E\u78A5\u78A0\u78AC\u78A2\u78A4\u7998\u798A\u798B\u7996\u7995\u7994\u7993\"],\n[\"e340\",\"\u7997\u7988\u7992\u7990\u7A2B\u7A4A\u7A30\u7A2F\u7A28\u7A26\u7AA8\u7AAB\u7AAC\u7AEE\u7B88\u7B9C\u7B8A\u7B91\u7B90\u7B96\u7B8D\u7B8C\u7B9B\u7B8E\u7B85\u7B98\u5284\u7B99\u7BA4\u7B82\u7CBB\u7CBF\u7CBC\u7CBA\u7DA7\u7DB7\u7DC2\u7DA3\u7DAA\u7DC1\u7DC0\u7DC5\u7D9D\u7DCE\u7DC4\u7DC6\u7DCB\u7DCC\u7DAF\u7DB9\u7D96\u7DBC\u7D9F\u7DA6\u7DAE\u7DA9\u7DA1\u7DC9\u7F73\u7FE2\u7FE3\u7FE5\u7FDE\"],\n[\"e3a1\",\"\u8024\u805D\u805C\u8189\u8186\u8183\u8187\u818D\u818C\u818B\u8215\u8497\u84A4\u84A1\u849F\u84BA\u84CE\u84C2\u84AC\u84AE\u84AB\u84B9\u84B4\u84C1\u84CD\u84AA\u849A\u84B1\u84D0\u849D\u84A7\u84BB\u84A2\u8494\u84C7\u84CC\u849B\u84A9\u84AF\u84A8\u84D6\u8498\u84B6\u84CF\u84A0\u84D7\u84D4\u84D2\u84DB\u84B0\u8491\u8661\u8733\u8723\u8728\u876B\u8740\u872E\u871E\u8721\u8719\u871B\u8743\u872C\u8741\u873E\u8746\u8720\u8732\u872A\u872D\u873C\u8712\u873A\u8731\u8735\u8742\u8726\u8727\u8738\u8724\u871A\u8730\u8711\u88F7\u88E7\u88F1\u88F2\u88FA\u88FE\u88EE\u88FC\u88F6\u88FB\"],\n[\"e440\",\"\u88F0\u88EC\u88EB\u899D\u89A1\u899F\u899E\u89E9\u89EB\u89E8\u8AAB\u8A99\u8A8B\u8A92\u8A8F\u8A96\u8C3D\u8C68\u8C69\u8CD5\u8CCF\u8CD7\u8D96\u8E09\u8E02\u8DFF\u8E0D\u8DFD\u8E0A\u8E03\u8E07\u8E06\u8E05\u8DFE\u8E00\u8E04\u8F10\u8F11\u8F0E\u8F0D\u9123\u911C\u9120\u9122\u911F\u911D\u911A\u9124\u9121\u911B\u917A\u9172\u9179\u9173\u92A5\u92A4\u9276\u929B\u927A\u92A0\u9294\u92AA\u928D\"],\n[\"e4a1\",\"\u92A6\u929A\u92AB\u9279\u9297\u927F\u92A3\u92EE\u928E\u9282\u9295\u92A2\u927D\u9288\u92A1\u928A\u9286\u928C\u9299\u92A7\u927E\u9287\u92A9\u929D\u928B\u922D\u969E\u96A1\u96FF\u9758\u977D\u977A\u977E\u9783\u9780\u9782\u977B\u9784\u9781\u977F\u97CE\u97CD\u9816\u98AD\u98AE\u9902\u9900\u9907\u999D\u999C\u99C3\u99B9\u99BB\u99BA\u99C2\u99BD\u99C7\u9AB1\u9AE3\u9AE7\u9B3E\u9B3F\u9B60\u9B61\u9B5F\u9CF1\u9CF2\u9CF5\u9EA7\u50FF\u5103\u5130\u50F8\u5106\u5107\u50F6\u50FE\u510B\u510C\u50FD\u510A\u528B\u528C\u52F1\u52EF\u5648\u5642\u564C\u5635\u5641\u564A\u5649\u5646\u5658\"],\n[\"e540\",\"\u565A\u5640\u5633\u563D\u562C\u563E\u5638\u562A\u563A\u571A\u58AB\u589D\u58B1\u58A0\u58A3\u58AF\u58AC\u58A5\u58A1\u58FF\u5AFF\u5AF4\u5AFD\u5AF7\u5AF6\u5B03\u5AF8\u5B02\u5AF9\u5B01\u5B07\u5B05\u5B0F\u5C67\u5D99\u5D97\u5D9F\u5D92\u5DA2\u5D93\u5D95\u5DA0\u5D9C\u5DA1\u5D9A\u5D9E\u5E69\u5E5D\u5E60\u5E5C\u7DF3\u5EDB\u5EDE\u5EE1\u5F49\u5FB2\u618B\u6183\u6179\u61B1\u61B0\u61A2\u6189\"],\n[\"e5a1\",\"\u619B\u6193\u61AF\u61AD\u619F\u6192\u61AA\u61A1\u618D\u6166\u61B3\u622D\u646E\u6470\u6496\u64A0\u6485\u6497\u649C\u648F\u648B\u648A\u648C\u64A3\u649F\u6468\u64B1\u6498\u6576\u657A\u6579\u657B\u65B2\u65B3\u66B5\u66B0\u66A9\u66B2\u66B7\u66AA\u66AF\u6A00\u6A06\u6A17\u69E5\u69F8\u6A15\u69F1\u69E4\u6A20\u69FF\u69EC\u69E2\u6A1B\u6A1D\u69FE\u6A27\u69F2\u69EE\u6A14\u69F7\u69E7\u6A40\u6A08\u69E6\u69FB\u6A0D\u69FC\u69EB\u6A09\u6A04\u6A18\u6A25\u6A0F\u69F6\u6A26\u6A07\u69F4\u6A16\u6B51\u6BA5\u6BA3\u6BA2\u6BA6\u6C01\u6C00\u6BFF\u6C02\u6F41\u6F26\u6F7E\u6F87\u6FC6\u6F92\"],\n[\"e640\",\"\u6F8D\u6F89\u6F8C\u6F62\u6F4F\u6F85\u6F5A\u6F96\u6F76\u6F6C\u6F82\u6F55\u6F72\u6F52\u6F50\u6F57\u6F94\u6F93\u6F5D\u6F00\u6F61\u6F6B\u6F7D\u6F67\u6F90\u6F53\u6F8B\u6F69\u6F7F\u6F95\u6F63\u6F77\u6F6A\u6F7B\u71B2\u71AF\u719B\u71B0\u71A0\u719A\u71A9\u71B5\u719D\u71A5\u719E\u71A4\u71A1\u71AA\u719C\u71A7\u71B3\u7298\u729A\u7358\u7352\u735E\u735F\u7360\u735D\u735B\u7361\u735A\u7359\"],\n[\"e6a1\",\"\u7362\u7487\u7489\u748A\u7486\u7481\u747D\u7485\u7488\u747C\u7479\u7508\u7507\u757E\u7625\u761E\u7619\u761D\u761C\u7623\u761A\u7628\u761B\u769C\u769D\u769E\u769B\u778D\u778F\u7789\u7788\u78CD\u78BB\u78CF\u78CC\u78D1\u78CE\u78D4\u78C8\u78C3\u78C4\u78C9\u799A\u79A1\u79A0\u799C\u79A2\u799B\u6B76\u7A39\u7AB2\u7AB4\u7AB3\u7BB7\u7BCB\u7BBE\u7BAC\u7BCE\u7BAF\u7BB9\u7BCA\u7BB5\u7CC5\u7CC8\u7CCC\u7CCB\u7DF7\u7DDB\u7DEA\u7DE7\u7DD7\u7DE1\u7E03\u7DFA\u7DE6\u7DF6\u7DF1\u7DF0\u7DEE\u7DDF\u7F76\u7FAC\u7FB0\u7FAD\u7FED\u7FEB\u7FEA\u7FEC\u7FE6\u7FE8\u8064\u8067\u81A3\u819F\"],\n[\"e740\",\"\u819E\u8195\u81A2\u8199\u8197\u8216\u824F\u8253\u8252\u8250\u824E\u8251\u8524\u853B\u850F\u8500\u8529\u850E\u8509\u850D\u851F\u850A\u8527\u851C\u84FB\u852B\u84FA\u8508\u850C\u84F4\u852A\u84F2\u8515\u84F7\u84EB\u84F3\u84FC\u8512\u84EA\u84E9\u8516\u84FE\u8528\u851D\u852E\u8502\u84FD\u851E\u84F6\u8531\u8526\u84E7\u84E8\u84F0\u84EF\u84F9\u8518\u8520\u8530\u850B\u8519\u852F\u8662\"],\n[\"e7a1\",\"\u8756\u8763\u8764\u8777\u87E1\u8773\u8758\u8754\u875B\u8752\u8761\u875A\u8751\u875E\u876D\u876A\u8750\u874E\u875F\u875D\u876F\u876C\u877A\u876E\u875C\u8765\u874F\u877B\u8775\u8762\u8767\u8769\u885A\u8905\u890C\u8914\u890B\u8917\u8918\u8919\u8906\u8916\u8911\u890E\u8909\u89A2\u89A4\u89A3\u89ED\u89F0\u89EC\u8ACF\u8AC6\u8AB8\u8AD3\u8AD1\u8AD4\u8AD5\u8ABB\u8AD7\u8ABE\u8AC0\u8AC5\u8AD8\u8AC3\u8ABA\u8ABD\u8AD9\u8C3E\u8C4D\u8C8F\u8CE5\u8CDF\u8CD9\u8CE8\u8CDA\u8CDD\u8CE7\u8DA0\u8D9C\u8DA1\u8D9B\u8E20\u8E23\u8E25\u8E24\u8E2E\u8E15\u8E1B\u8E16\u8E11\u8E19\u8E26\u8E27\"],\n[\"e840\",\"\u8E14\u8E12\u8E18\u8E13\u8E1C\u8E17\u8E1A\u8F2C\u8F24\u8F18\u8F1A\u8F20\u8F23\u8F16\u8F17\u9073\u9070\u906F\u9067\u906B\u912F\u912B\u9129\u912A\u9132\u9126\u912E\u9185\u9186\u918A\u9181\u9182\u9184\u9180\u92D0\u92C3\u92C4\u92C0\u92D9\u92B6\u92CF\u92F1\u92DF\u92D8\u92E9\u92D7\u92DD\u92CC\u92EF\u92C2\u92E8\u92CA\u92C8\u92CE\u92E6\u92CD\u92D5\u92C9\u92E0\u92DE\u92E7\u92D1\u92D3\"],\n[\"e8a1\",\"\u92B5\u92E1\u92C6\u92B4\u957C\u95AC\u95AB\u95AE\u95B0\u96A4\u96A2\u96D3\u9705\u9708\u9702\u975A\u978A\u978E\u9788\u97D0\u97CF\u981E\u981D\u9826\u9829\u9828\u9820\u981B\u9827\u98B2\u9908\u98FA\u9911\u9914\u9916\u9917\u9915\u99DC\u99CD\u99CF\u99D3\u99D4\u99CE\u99C9\u99D6\u99D8\u99CB\u99D7\u99CC\u9AB3\u9AEC\u9AEB\u9AF3\u9AF2\u9AF1\u9B46\u9B43\u9B67\u9B74\u9B71\u9B66\u9B76\u9B75\u9B70\u9B68\u9B64\u9B6C\u9CFC\u9CFA\u9CFD\u9CFF\u9CF7\u9D07\u9D00\u9CF9\u9CFB\u9D08\u9D05\u9D04\u9E83\u9ED3\u9F0F\u9F10\u511C\u5113\u5117\u511A\u5111\u51DE\u5334\u53E1\u5670\u5660\u566E\"],\n[\"e940\",\"\u5673\u5666\u5663\u566D\u5672\u565E\u5677\u571C\u571B\u58C8\u58BD\u58C9\u58BF\u58BA\u58C2\u58BC\u58C6\u5B17\u5B19\u5B1B\u5B21\u5B14\u5B13\u5B10\u5B16\u5B28\u5B1A\u5B20\u5B1E\u5BEF\u5DAC\u5DB1\u5DA9\u5DA7\u5DB5\u5DB0\u5DAE\u5DAA\u5DA8\u5DB2\u5DAD\u5DAF\u5DB4\u5E67\u5E68\u5E66\u5E6F\u5EE9\u5EE7\u5EE6\u5EE8\u5EE5\u5F4B\u5FBC\u619D\u61A8\u6196\u61C5\u61B4\u61C6\u61C1\u61CC\u61BA\"],\n[\"e9a1\",\"\u61BF\u61B8\u618C\u64D7\u64D6\u64D0\u64CF\u64C9\u64BD\u6489\u64C3\u64DB\u64F3\u64D9\u6533\u657F\u657C\u65A2\u66C8\u66BE\u66C0\u66CA\u66CB\u66CF\u66BD\u66BB\u66BA\u66CC\u6723\u6A34\u6A66\u6A49\u6A67\u6A32\u6A68\u6A3E\u6A5D\u6A6D\u6A76\u6A5B\u6A51\u6A28\u6A5A\u6A3B\u6A3F\u6A41\u6A6A\u6A64\u6A50\u6A4F\u6A54\u6A6F\u6A69\u6A60\u6A3C\u6A5E\u6A56\u6A55\u6A4D\u6A4E\u6A46\u6B55\u6B54\u6B56\u6BA7\u6BAA\u6BAB\u6BC8\u6BC7\u6C04\u6C03\u6C06\u6FAD\u6FCB\u6FA3\u6FC7\u6FBC\u6FCE\u6FC8\u6F5E\u6FC4\u6FBD\u6F9E\u6FCA\u6FA8\u7004\u6FA5\u6FAE\u6FBA\u6FAC\u6FAA\u6FCF\u6FBF\u6FB8\"],\n[\"ea40\",\"\u6FA2\u6FC9\u6FAB\u6FCD\u6FAF\u6FB2\u6FB0\u71C5\u71C2\u71BF\u71B8\u71D6\u71C0\u71C1\u71CB\u71D4\u71CA\u71C7\u71CF\u71BD\u71D8\u71BC\u71C6\u71DA\u71DB\u729D\u729E\u7369\u7366\u7367\u736C\u7365\u736B\u736A\u747F\u749A\u74A0\u7494\u7492\u7495\u74A1\u750B\u7580\u762F\u762D\u7631\u763D\u7633\u763C\u7635\u7632\u7630\u76BB\u76E6\u779A\u779D\u77A1\u779C\u779B\u77A2\u77A3\u7795\u7799\"],\n[\"eaa1\",\"\u7797\u78DD\u78E9\u78E5\u78EA\u78DE\u78E3\u78DB\u78E1\u78E2\u78ED\u78DF\u78E0\u79A4\u7A44\u7A48\u7A47\u7AB6\u7AB8\u7AB5\u7AB1\u7AB7\u7BDE\u7BE3\u7BE7\u7BDD\u7BD5\u7BE5\u7BDA\u7BE8\u7BF9\u7BD4\u7BEA\u7BE2\u7BDC\u7BEB\u7BD8\u7BDF\u7CD2\u7CD4\u7CD7\u7CD0\u7CD1\u7E12\u7E21\u7E17\u7E0C\u7E1F\u7E20\u7E13\u7E0E\u7E1C\u7E15\u7E1A\u7E22\u7E0B\u7E0F\u7E16\u7E0D\u7E14\u7E25\u7E24\u7F43\u7F7B\u7F7C\u7F7A\u7FB1\u7FEF\u802A\u8029\u806C\u81B1\u81A6\u81AE\u81B9\u81B5\u81AB\u81B0\u81AC\u81B4\u81B2\u81B7\u81A7\u81F2\u8255\u8256\u8257\u8556\u8545\u856B\u854D\u8553\u8561\u8558\"],\n[\"eb40\",\"\u8540\u8546\u8564\u8541\u8562\u8544\u8551\u8547\u8563\u853E\u855B\u8571\u854E\u856E\u8575\u8555\u8567\u8560\u858C\u8566\u855D\u8554\u8565\u856C\u8663\u8665\u8664\u879B\u878F\u8797\u8793\u8792\u8788\u8781\u8796\u8798\u8779\u8787\u87A3\u8785\u8790\u8791\u879D\u8784\u8794\u879C\u879A\u8789\u891E\u8926\u8930\u892D\u892E\u8927\u8931\u8922\u8929\u8923\u892F\u892C\u891F\u89F1\u8AE0\"],\n[\"eba1\",\"\u8AE2\u8AF2\u8AF4\u8AF5\u8ADD\u8B14\u8AE4\u8ADF\u8AF0\u8AC8\u8ADE\u8AE1\u8AE8\u8AFF\u8AEF\u8AFB\u8C91\u8C92\u8C90\u8CF5\u8CEE\u8CF1\u8CF0\u8CF3\u8D6C\u8D6E\u8DA5\u8DA7\u8E33\u8E3E\u8E38\u8E40\u8E45\u8E36\u8E3C\u8E3D\u8E41\u8E30\u8E3F\u8EBD\u8F36\u8F2E\u8F35\u8F32\u8F39\u8F37\u8F34\u9076\u9079\u907B\u9086\u90FA\u9133\u9135\u9136\u9193\u9190\u9191\u918D\u918F\u9327\u931E\u9308\u931F\u9306\u930F\u937A\u9338\u933C\u931B\u9323\u9312\u9301\u9346\u932D\u930E\u930D\u92CB\u931D\u92FA\u9325\u9313\u92F9\u92F7\u9334\u9302\u9324\u92FF\u9329\u9339\u9335\u932A\u9314\u930C\"],\n[\"ec40\",\"\u930B\u92FE\u9309\u9300\u92FB\u9316\u95BC\u95CD\u95BE\u95B9\u95BA\u95B6\u95BF\u95B5\u95BD\u96A9\u96D4\u970B\u9712\u9710\u9799\u9797\u9794\u97F0\u97F8\u9835\u982F\u9832\u9924\u991F\u9927\u9929\u999E\u99EE\u99EC\u99E5\u99E4\u99F0\u99E3\u99EA\u99E9\u99E7\u9AB9\u9ABF\u9AB4\u9ABB\u9AF6\u9AFA\u9AF9\u9AF7\u9B33\u9B80\u9B85\u9B87\u9B7C\u9B7E\u9B7B\u9B82\u9B93\u9B92\u9B90\u9B7A\u9B95\"],\n[\"eca1\",\"\u9B7D\u9B88\u9D25\u9D17\u9D20\u9D1E\u9D14\u9D29\u9D1D\u9D18\u9D22\u9D10\u9D19\u9D1F\u9E88\u9E86\u9E87\u9EAE\u9EAD\u9ED5\u9ED6\u9EFA\u9F12\u9F3D\u5126\u5125\u5122\u5124\u5120\u5129\u52F4\u5693\u568C\u568D\u5686\u5684\u5683\u567E\u5682\u567F\u5681\u58D6\u58D4\u58CF\u58D2\u5B2D\u5B25\u5B32\u5B23\u5B2C\u5B27\u5B26\u5B2F\u5B2E\u5B7B\u5BF1\u5BF2\u5DB7\u5E6C\u5E6A\u5FBE\u5FBB\u61C3\u61B5\u61BC\u61E7\u61E0\u61E5\u61E4\u61E8\u61DE\u64EF\u64E9\u64E3\u64EB\u64E4\u64E8\u6581\u6580\u65B6\u65DA\u66D2\u6A8D\u6A96\u6A81\u6AA5\u6A89\u6A9F\u6A9B\u6AA1\u6A9E\u6A87\u6A93\u6A8E\"],\n[\"ed40\",\"\u6A95\u6A83\u6AA8\u6AA4\u6A91\u6A7F\u6AA6\u6A9A\u6A85\u6A8C\u6A92\u6B5B\u6BAD\u6C09\u6FCC\u6FA9\u6FF4\u6FD4\u6FE3\u6FDC\u6FED\u6FE7\u6FE6\u6FDE\u6FF2\u6FDD\u6FE2\u6FE8\u71E1\u71F1\u71E8\u71F2\u71E4\u71F0\u71E2\u7373\u736E\u736F\u7497\u74B2\u74AB\u7490\u74AA\u74AD\u74B1\u74A5\u74AF\u7510\u7511\u7512\u750F\u7584\u7643\u7648\u7649\u7647\u76A4\u76E9\u77B5\u77AB\u77B2\u77B7\u77B6\"],\n[\"eda1\",\"\u77B4\u77B1\u77A8\u77F0\u78F3\u78FD\u7902\u78FB\u78FC\u78F2\u7905\u78F9\u78FE\u7904\u79AB\u79A8\u7A5C\u7A5B\u7A56\u7A58\u7A54\u7A5A\u7ABE\u7AC0\u7AC1\u7C05\u7C0F\u7BF2\u7C00\u7BFF\u7BFB\u7C0E\u7BF4\u7C0B\u7BF3\u7C02\u7C09\u7C03\u7C01\u7BF8\u7BFD\u7C06\u7BF0\u7BF1\u7C10\u7C0A\u7CE8\u7E2D\u7E3C\u7E42\u7E33\u9848\u7E38\u7E2A\u7E49\u7E40\u7E47\u7E29\u7E4C\u7E30\u7E3B\u7E36\u7E44\u7E3A\u7F45\u7F7F\u7F7E\u7F7D\u7FF4\u7FF2\u802C\u81BB\u81C4\u81CC\u81CA\u81C5\u81C7\u81BC\u81E9\u825B\u825A\u825C\u8583\u8580\u858F\u85A7\u8595\u85A0\u858B\u85A3\u857B\u85A4\u859A\u859E\"],\n[\"ee40\",\"\u8577\u857C\u8589\u85A1\u857A\u8578\u8557\u858E\u8596\u8586\u858D\u8599\u859D\u8581\u85A2\u8582\u8588\u8585\u8579\u8576\u8598\u8590\u859F\u8668\u87BE\u87AA\u87AD\u87C5\u87B0\u87AC\u87B9\u87B5\u87BC\u87AE\u87C9\u87C3\u87C2\u87CC\u87B7\u87AF\u87C4\u87CA\u87B4\u87B6\u87BF\u87B8\u87BD\u87DE\u87B2\u8935\u8933\u893C\u893E\u8941\u8952\u8937\u8942\u89AD\u89AF\u89AE\u89F2\u89F3\u8B1E\"],\n[\"eea1\",\"\u8B18\u8B16\u8B11\u8B05\u8B0B\u8B22\u8B0F\u8B12\u8B15\u8B07\u8B0D\u8B08\u8B06\u8B1C\u8B13\u8B1A\u8C4F\u8C70\u8C72\u8C71\u8C6F\u8C95\u8C94\u8CF9\u8D6F\u8E4E\u8E4D\u8E53\u8E50\u8E4C\u8E47\u8F43\u8F40\u9085\u907E\u9138\u919A\u91A2\u919B\u9199\u919F\u91A1\u919D\u91A0\u93A1\u9383\u93AF\u9364\u9356\u9347\u937C\u9358\u935C\u9376\u9349\u9350\u9351\u9360\u936D\u938F\u934C\u936A\u9379\u9357\u9355\u9352\u934F\u9371\u9377\u937B\u9361\u935E\u9363\u9367\u9380\u934E\u9359\u95C7\u95C0\u95C9\u95C3\u95C5\u95B7\u96AE\u96B0\u96AC\u9720\u971F\u9718\u971D\u9719\u979A\u97A1\u979C\"],\n[\"ef40\",\"\u979E\u979D\u97D5\u97D4\u97F1\u9841\u9844\u984A\u9849\u9845\u9843\u9925\u992B\u992C\u992A\u9933\u9932\u992F\u992D\u9931\u9930\u9998\u99A3\u99A1\u9A02\u99FA\u99F4\u99F7\u99F9\u99F8\u99F6\u99FB\u99FD\u99FE\u99FC\u9A03\u9ABE\u9AFE\u9AFD\u9B01\u9AFC\u9B48\u9B9A\u9BA8\u9B9E\u9B9B\u9BA6\u9BA1\u9BA5\u9BA4\u9B86\u9BA2\u9BA0\u9BAF\u9D33\u9D41\u9D67\u9D36\u9D2E\u9D2F\u9D31\u9D38\u9D30\"],\n[\"efa1\",\"\u9D45\u9D42\u9D43\u9D3E\u9D37\u9D40\u9D3D\u7FF5\u9D2D\u9E8A\u9E89\u9E8D\u9EB0\u9EC8\u9EDA\u9EFB\u9EFF\u9F24\u9F23\u9F22\u9F54\u9FA0\u5131\u512D\u512E\u5698\u569C\u5697\u569A\u569D\u5699\u5970\u5B3C\u5C69\u5C6A\u5DC0\u5E6D\u5E6E\u61D8\u61DF\u61ED\u61EE\u61F1\u61EA\u61F0\u61EB\u61D6\u61E9\u64FF\u6504\u64FD\u64F8\u6501\u6503\u64FC\u6594\u65DB\u66DA\u66DB\u66D8\u6AC5\u6AB9\u6ABD\u6AE1\u6AC6\u6ABA\u6AB6\u6AB7\u6AC7\u6AB4\u6AAD\u6B5E\u6BC9\u6C0B\u7007\u700C\u700D\u7001\u7005\u7014\u700E\u6FFF\u7000\u6FFB\u7026\u6FFC\u6FF7\u700A\u7201\u71FF\u71F9\u7203\u71FD\u7376\"],\n[\"f040\",\"\u74B8\u74C0\u74B5\u74C1\u74BE\u74B6\u74BB\u74C2\u7514\u7513\u765C\u7664\u7659\u7650\u7653\u7657\u765A\u76A6\u76BD\u76EC\u77C2\u77BA\u78FF\u790C\u7913\u7914\u7909\u7910\u7912\u7911\u79AD\u79AC\u7A5F\u7C1C\u7C29\u7C19\u7C20\u7C1F\u7C2D\u7C1D\u7C26\u7C28\u7C22\u7C25\u7C30\u7E5C\u7E50\u7E56\u7E63\u7E58\u7E62\u7E5F\u7E51\u7E60\u7E57\u7E53\u7FB5\u7FB3\u7FF7\u7FF8\u8075\u81D1\u81D2\"],\n[\"f0a1\",\"\u81D0\u825F\u825E\u85B4\u85C6\u85C0\u85C3\u85C2\u85B3\u85B5\u85BD\u85C7\u85C4\u85BF\u85CB\u85CE\u85C8\u85C5\u85B1\u85B6\u85D2\u8624\u85B8\u85B7\u85BE\u8669\u87E7\u87E6\u87E2\u87DB\u87EB\u87EA\u87E5\u87DF\u87F3\u87E4\u87D4\u87DC\u87D3\u87ED\u87D8\u87E3\u87A4\u87D7\u87D9\u8801\u87F4\u87E8\u87DD\u8953\u894B\u894F\u894C\u8946\u8950\u8951\u8949\u8B2A\u8B27\u8B23\u8B33\u8B30\u8B35\u8B47\u8B2F\u8B3C\u8B3E\u8B31\u8B25\u8B37\u8B26\u8B36\u8B2E\u8B24\u8B3B\u8B3D\u8B3A\u8C42\u8C75\u8C99\u8C98\u8C97\u8CFE\u8D04\u8D02\u8D00\u8E5C\u8E62\u8E60\u8E57\u8E56\u8E5E\u8E65\u8E67\"],\n[\"f140\",\"\u8E5B\u8E5A\u8E61\u8E5D\u8E69\u8E54\u8F46\u8F47\u8F48\u8F4B\u9128\u913A\u913B\u913E\u91A8\u91A5\u91A7\u91AF\u91AA\u93B5\u938C\u9392\u93B7\u939B\u939D\u9389\u93A7\u938E\u93AA\u939E\u93A6\u9395\u9388\u9399\u939F\u938D\u93B1\u9391\u93B2\u93A4\u93A8\u93B4\u93A3\u93A5\u95D2\u95D3\u95D1\u96B3\u96D7\u96DA\u5DC2\u96DF\u96D8\u96DD\u9723\u9722\u9725\u97AC\u97AE\u97A8\u97AB\u97A4\u97AA\"],\n[\"f1a1\",\"\u97A2\u97A5\u97D7\u97D9\u97D6\u97D8\u97FA\u9850\u9851\u9852\u98B8\u9941\u993C\u993A\u9A0F\u9A0B\u9A09\u9A0D\u9A04\u9A11\u9A0A\u9A05\u9A07\u9A06\u9AC0\u9ADC\u9B08\u9B04\u9B05\u9B29\u9B35\u9B4A\u9B4C\u9B4B\u9BC7\u9BC6\u9BC3\u9BBF\u9BC1\u9BB5\u9BB8\u9BD3\u9BB6\u9BC4\u9BB9\u9BBD\u9D5C\u9D53\u9D4F\u9D4A\u9D5B\u9D4B\u9D59\u9D56\u9D4C\u9D57\u9D52\u9D54\u9D5F\u9D58\u9D5A\u9E8E\u9E8C\u9EDF\u9F01\u9F00\u9F16\u9F25\u9F2B\u9F2A\u9F29\u9F28\u9F4C\u9F55\u5134\u5135\u5296\u52F7\u53B4\u56AB\u56AD\u56A6\u56A7\u56AA\u56AC\u58DA\u58DD\u58DB\u5912\u5B3D\u5B3E\u5B3F\u5DC3\u5E70\"],\n[\"f240\",\"\u5FBF\u61FB\u6507\u6510\u650D\u6509\u650C\u650E\u6584\u65DE\u65DD\u66DE\u6AE7\u6AE0\u6ACC\u6AD1\u6AD9\u6ACB\u6ADF\u6ADC\u6AD0\u6AEB\u6ACF\u6ACD\u6ADE\u6B60\u6BB0\u6C0C\u7019\u7027\u7020\u7016\u702B\u7021\u7022\u7023\u7029\u7017\u7024\u701C\u702A\u720C\u720A\u7207\u7202\u7205\u72A5\u72A6\u72A4\u72A3\u72A1\u74CB\u74C5\u74B7\u74C3\u7516\u7660\u77C9\u77CA\u77C4\u77F1\u791D\u791B\"],\n[\"f2a1\",\"\u7921\u791C\u7917\u791E\u79B0\u7A67\u7A68\u7C33\u7C3C\u7C39\u7C2C\u7C3B\u7CEC\u7CEA\u7E76\u7E75\u7E78\u7E70\u7E77\u7E6F\u7E7A\u7E72\u7E74\u7E68\u7F4B\u7F4A\u7F83\u7F86\u7FB7\u7FFD\u7FFE\u8078\u81D7\u81D5\u8264\u8261\u8263\u85EB\u85F1\u85ED\u85D9\u85E1\u85E8\u85DA\u85D7\u85EC\u85F2\u85F8\u85D8\u85DF\u85E3\u85DC\u85D1\u85F0\u85E6\u85EF\u85DE\u85E2\u8800\u87FA\u8803\u87F6\u87F7\u8809\u880C\u880B\u8806\u87FC\u8808\u87FF\u880A\u8802\u8962\u895A\u895B\u8957\u8961\u895C\u8958\u895D\u8959\u8988\u89B7\u89B6\u89F6\u8B50\u8B48\u8B4A\u8B40\u8B53\u8B56\u8B54\u8B4B\u8B55\"],\n[\"f340\",\"\u8B51\u8B42\u8B52\u8B57\u8C43\u8C77\u8C76\u8C9A\u8D06\u8D07\u8D09\u8DAC\u8DAA\u8DAD\u8DAB\u8E6D\u8E78\u8E73\u8E6A\u8E6F\u8E7B\u8EC2\u8F52\u8F51\u8F4F\u8F50\u8F53\u8FB4\u9140\u913F\u91B0\u91AD\u93DE\u93C7\u93CF\u93C2\u93DA\u93D0\u93F9\u93EC\u93CC\u93D9\u93A9\u93E6\u93CA\u93D4\u93EE\u93E3\u93D5\u93C4\u93CE\u93C0\u93D2\u93E7\u957D\u95DA\u95DB\u96E1\u9729\u972B\u972C\u9728\u9726\"],\n[\"f3a1\",\"\u97B3\u97B7\u97B6\u97DD\u97DE\u97DF\u985C\u9859\u985D\u9857\u98BF\u98BD\u98BB\u98BE\u9948\u9947\u9943\u99A6\u99A7\u9A1A\u9A15\u9A25\u9A1D\u9A24\u9A1B\u9A22\u9A20\u9A27\u9A23\u9A1E\u9A1C\u9A14\u9AC2\u9B0B\u9B0A\u9B0E\u9B0C\u9B37\u9BEA\u9BEB\u9BE0\u9BDE\u9BE4\u9BE6\u9BE2\u9BF0\u9BD4\u9BD7\u9BEC\u9BDC\u9BD9\u9BE5\u9BD5\u9BE1\u9BDA\u9D77\u9D81\u9D8A\u9D84\u9D88\u9D71\u9D80\u9D78\u9D86\u9D8B\u9D8C\u9D7D\u9D6B\u9D74\u9D75\u9D70\u9D69\u9D85\u9D73\u9D7B\u9D82\u9D6F\u9D79\u9D7F\u9D87\u9D68\u9E94\u9E91\u9EC0\u9EFC\u9F2D\u9F40\u9F41\u9F4D\u9F56\u9F57\u9F58\u5337\u56B2\"],\n[\"f440\",\"\u56B5\u56B3\u58E3\u5B45\u5DC6\u5DC7\u5EEE\u5EEF\u5FC0\u5FC1\u61F9\u6517\u6516\u6515\u6513\u65DF\u66E8\u66E3\u66E4\u6AF3\u6AF0\u6AEA\u6AE8\u6AF9\u6AF1\u6AEE\u6AEF\u703C\u7035\u702F\u7037\u7034\u7031\u7042\u7038\u703F\u703A\u7039\u7040\u703B\u7033\u7041\u7213\u7214\u72A8\u737D\u737C\u74BA\u76AB\u76AA\u76BE\u76ED\u77CC\u77CE\u77CF\u77CD\u77F2\u7925\u7923\u7927\u7928\u7924\u7929\"],\n[\"f4a1\",\"\u79B2\u7A6E\u7A6C\u7A6D\u7AF7\u7C49\u7C48\u7C4A\u7C47\u7C45\u7CEE\u7E7B\u7E7E\u7E81\u7E80\u7FBA\u7FFF\u8079\u81DB\u81D9\u820B\u8268\u8269\u8622\u85FF\u8601\u85FE\u861B\u8600\u85F6\u8604\u8609\u8605\u860C\u85FD\u8819\u8810\u8811\u8817\u8813\u8816\u8963\u8966\u89B9\u89F7\u8B60\u8B6A\u8B5D\u8B68\u8B63\u8B65\u8B67\u8B6D\u8DAE\u8E86\u8E88\u8E84\u8F59\u8F56\u8F57\u8F55\u8F58\u8F5A\u908D\u9143\u9141\u91B7\u91B5\u91B2\u91B3\u940B\u9413\u93FB\u9420\u940F\u9414\u93FE\u9415\u9410\u9428\u9419\u940D\u93F5\u9400\u93F7\u9407\u940E\u9416\u9412\u93FA\u9409\u93F8\u940A\u93FF\"],\n[\"f540\",\"\u93FC\u940C\u93F6\u9411\u9406\u95DE\u95E0\u95DF\u972E\u972F\u97B9\u97BB\u97FD\u97FE\u9860\u9862\u9863\u985F\u98C1\u98C2\u9950\u994E\u9959\u994C\u994B\u9953\u9A32\u9A34\u9A31\u9A2C\u9A2A\u9A36\u9A29\u9A2E\u9A38\u9A2D\u9AC7\u9ACA\u9AC6\u9B10\u9B12\u9B11\u9C0B\u9C08\u9BF7\u9C05\u9C12\u9BF8\u9C40\u9C07\u9C0E\u9C06\u9C17\u9C14\u9C09\u9D9F\u9D99\u9DA4\u9D9D\u9D92\u9D98\u9D90\u9D9B\"],\n[\"f5a1\",\"\u9DA0\u9D94\u9D9C\u9DAA\u9D97\u9DA1\u9D9A\u9DA2\u9DA8\u9D9E\u9DA3\u9DBF\u9DA9\u9D96\u9DA6\u9DA7\u9E99\u9E9B\u9E9A\u9EE5\u9EE4\u9EE7\u9EE6\u9F30\u9F2E\u9F5B\u9F60\u9F5E\u9F5D\u9F59\u9F91\u513A\u5139\u5298\u5297\u56C3\u56BD\u56BE\u5B48\u5B47\u5DCB\u5DCF\u5EF1\u61FD\u651B\u6B02\u6AFC\u6B03\u6AF8\u6B00\u7043\u7044\u704A\u7048\u7049\u7045\u7046\u721D\u721A\u7219\u737E\u7517\u766A\u77D0\u792D\u7931\u792F\u7C54\u7C53\u7CF2\u7E8A\u7E87\u7E88\u7E8B\u7E86\u7E8D\u7F4D\u7FBB\u8030\u81DD\u8618\u862A\u8626\u861F\u8623\u861C\u8619\u8627\u862E\u8621\u8620\u8629\u861E\u8625\"],\n[\"f640\",\"\u8829\u881D\u881B\u8820\u8824\u881C\u882B\u884A\u896D\u8969\u896E\u896B\u89FA\u8B79\u8B78\u8B45\u8B7A\u8B7B\u8D10\u8D14\u8DAF\u8E8E\u8E8C\u8F5E\u8F5B\u8F5D\u9146\u9144\u9145\u91B9\u943F\u943B\u9436\u9429\u943D\u943C\u9430\u9439\u942A\u9437\u942C\u9440\u9431\u95E5\u95E4\u95E3\u9735\u973A\u97BF\u97E1\u9864\u98C9\u98C6\u98C0\u9958\u9956\u9A39\u9A3D\u9A46\u9A44\u9A42\u9A41\u9A3A\"],\n[\"f6a1\",\"\u9A3F\u9ACD\u9B15\u9B17\u9B18\u9B16\u9B3A\u9B52\u9C2B\u9C1D\u9C1C\u9C2C\u9C23\u9C28\u9C29\u9C24\u9C21\u9DB7\u9DB6\u9DBC\u9DC1\u9DC7\u9DCA\u9DCF\u9DBE\u9DC5\u9DC3\u9DBB\u9DB5\u9DCE\u9DB9\u9DBA\u9DAC\u9DC8\u9DB1\u9DAD\u9DCC\u9DB3\u9DCD\u9DB2\u9E7A\u9E9C\u9EEB\u9EEE\u9EED\u9F1B\u9F18\u9F1A\u9F31\u9F4E\u9F65\u9F64\u9F92\u4EB9\u56C6\u56C5\u56CB\u5971\u5B4B\u5B4C\u5DD5\u5DD1\u5EF2\u6521\u6520\u6526\u6522\u6B0B\u6B08\u6B09\u6C0D\u7055\u7056\u7057\u7052\u721E\u721F\u72A9\u737F\u74D8\u74D5\u74D9\u74D7\u766D\u76AD\u7935\u79B4\u7A70\u7A71\u7C57\u7C5C\u7C59\u7C5B\u7C5A\"],\n[\"f740\",\"\u7CF4\u7CF1\u7E91\u7F4F\u7F87\u81DE\u826B\u8634\u8635\u8633\u862C\u8632\u8636\u882C\u8828\u8826\u882A\u8825\u8971\u89BF\u89BE\u89FB\u8B7E\u8B84\u8B82\u8B86\u8B85\u8B7F\u8D15\u8E95\u8E94\u8E9A\u8E92\u8E90\u8E96\u8E97\u8F60\u8F62\u9147\u944C\u9450\u944A\u944B\u944F\u9447\u9445\u9448\u9449\u9446\u973F\u97E3\u986A\u9869\u98CB\u9954\u995B\u9A4E\u9A53\u9A54\u9A4C\u9A4F\u9A48\u9A4A\"],\n[\"f7a1\",\"\u9A49\u9A52\u9A50\u9AD0\u9B19\u9B2B\u9B3B\u9B56\u9B55\u9C46\u9C48\u9C3F\u9C44\u9C39\u9C33\u9C41\u9C3C\u9C37\u9C34\u9C32\u9C3D\u9C36\u9DDB\u9DD2\u9DDE\u9DDA\u9DCB\u9DD0\u9DDC\u9DD1\u9DDF\u9DE9\u9DD9\u9DD8\u9DD6\u9DF5\u9DD5\u9DDD\u9EB6\u9EF0\u9F35\u9F33\u9F32\u9F42\u9F6B\u9F95\u9FA2\u513D\u5299\u58E8\u58E7\u5972\u5B4D\u5DD8\u882F\u5F4F\u6201\u6203\u6204\u6529\u6525\u6596\u66EB\u6B11\u6B12\u6B0F\u6BCA\u705B\u705A\u7222\u7382\u7381\u7383\u7670\u77D4\u7C67\u7C66\u7E95\u826C\u863A\u8640\u8639\u863C\u8631\u863B\u863E\u8830\u8832\u882E\u8833\u8976\u8974\u8973\u89FE\"],\n[\"f840\",\"\u8B8C\u8B8E\u8B8B\u8B88\u8C45\u8D19\u8E98\u8F64\u8F63\u91BC\u9462\u9455\u945D\u9457\u945E\u97C4\u97C5\u9800\u9A56\u9A59\u9B1E\u9B1F\u9B20\u9C52\u9C58\u9C50\u9C4A\u9C4D\u9C4B\u9C55\u9C59\u9C4C\u9C4E\u9DFB\u9DF7\u9DEF\u9DE3\u9DEB\u9DF8\u9DE4\u9DF6\u9DE1\u9DEE\u9DE6\u9DF2\u9DF0\u9DE2\u9DEC\u9DF4\u9DF3\u9DE8\u9DED\u9EC2\u9ED0\u9EF2\u9EF3\u9F06\u9F1C\u9F38\u9F37\u9F36\u9F43\u9F4F\"],\n[\"f8a1\",\"\u9F71\u9F70\u9F6E\u9F6F\u56D3\u56CD\u5B4E\u5C6D\u652D\u66ED\u66EE\u6B13\u705F\u7061\u705D\u7060\u7223\u74DB\u74E5\u77D5\u7938\u79B7\u79B6\u7C6A\u7E97\u7F89\u826D\u8643\u8838\u8837\u8835\u884B\u8B94\u8B95\u8E9E\u8E9F\u8EA0\u8E9D\u91BE\u91BD\u91C2\u946B\u9468\u9469\u96E5\u9746\u9743\u9747\u97C7\u97E5\u9A5E\u9AD5\u9B59\u9C63\u9C67\u9C66\u9C62\u9C5E\u9C60\u9E02\u9DFE\u9E07\u9E03\u9E06\u9E05\u9E00\u9E01\u9E09\u9DFF\u9DFD\u9E04\u9EA0\u9F1E\u9F46\u9F74\u9F75\u9F76\u56D4\u652E\u65B8\u6B18\u6B19\u6B17\u6B1A\u7062\u7226\u72AA\u77D8\u77D9\u7939\u7C69\u7C6B\u7CF6\u7E9A\"],\n[\"f940\",\"\u7E98\u7E9B\u7E99\u81E0\u81E1\u8646\u8647\u8648\u8979\u897A\u897C\u897B\u89FF\u8B98\u8B99\u8EA5\u8EA4\u8EA3\u946E\u946D\u946F\u9471\u9473\u9749\u9872\u995F\u9C68\u9C6E\u9C6D\u9E0B\u9E0D\u9E10\u9E0F\u9E12\u9E11\u9EA1\u9EF5\u9F09\u9F47\u9F78\u9F7B\u9F7A\u9F79\u571E\u7066\u7C6F\u883C\u8DB2\u8EA6\u91C3\u9474\u9478\u9476\u9475\u9A60\u9C74\u9C73\u9C71\u9C75\u9E14\u9E13\u9EF6\u9F0A\"],\n[\"f9a1\",\"\u9FA4\u7068\u7065\u7CF7\u866A\u883E\u883D\u883F\u8B9E\u8C9C\u8EA9\u8EC9\u974B\u9873\u9874\u98CC\u9961\u99AB\u9A64\u9A66\u9A67\u9B24\u9E15\u9E17\u9F48\u6207\u6B1E\u7227\u864C\u8EA8\u9482\u9480\u9481\u9A69\u9A68\u9B2E\u9E19\u7229\u864B\u8B9F\u9483\u9C79\u9EB7\u7675\u9A6B\u9C7A\u9E1D\u7069\u706A\u9EA4\u9F7E\u9F49\u9F98\u7881\u92B9\u88CF\u58BB\u6052\u7CA7\u5AFA\u2554\u2566\u2557\u2560\u256C\u2563\u255A\u2569\u255D\u2552\u2564\u2555\u255E\u256A\u2561\u2558\u2567\u255B\u2553\u2565\u2556\u255F\u256B\u2562\u2559\u2568\u255C\u2551\u2550\u256D\u256E\u2570\u256F\u2593\"]\n]\n", "[\n[\"8740\",\"\u43F0\u4C32\u4603\u45A6\u4578\uD85C\uDE67\u4D77\u45B3\uD85F\uDCB1\u4CE2\uD85F\uDCC5\u3B95\u4736\u4744\u4C47\u4C40\uD850\uDEBF\uD84D\uDE17\uD85C\uDF52\uD85B\uDE8B\uD85C\uDCD2\u4C57\uD868\uDF51\u474F\u45DA\u4C85\uD85F\uDC6C\u4D07\u4AA4\u46A1\uD85A\uDF23\u7225\uD856\uDE54\uD846\uDE63\uD84F\uDE06\uD84F\uDF61\u664D\u56FB\"],\n[\"8767\",\"\u7D95\u591D\uD862\uDFB9\u3DF4\u9734\uD85E\uDFEF\u5BDB\uD847\uDD5E\u5AA4\u3625\uD867\uDEB0\u5AD1\u5BB7\u5CFC\u676E\u8593\uD866\uDD45\u7461\u749D\u3875\uD847\uDD53\uD84D\uDE9E\uD858\uDC21\u3EEC\"],\n[\"87a1\",\"\uD856\uDCDE\u3AF5\u7AFC\u9F97\uD850\uDD61\uD862\uDD0D\uD84C\uDDEA\uD842\uDE8A\uD84C\uDE5E\u430A\u8484\u9F96\u942F\u4930\u8613\u5896\u974A\u9218\u79D0\u7A32\u6660\u6A29\u889D\u744C\u7BC5\u6782\u7A2C\u524F\u9046\u34E6\u73C4\uD857\uDDB9\u74C6\u9FC7\u57B3\u492F\u544C\u4131\uD84D\uDE8E\u5818\u7A72\uD85E\uDF65\u8B8F\u46AE\uD85B\uDE88\u4181\uD857\uDD99\u7BAE\uD849\uDCBC\u9FC8\uD849\uDCC1\uD849\uDCC9\uD849\uDCCC\u9FC9\u8504\uD84D\uDDBB\u40B4\u9FCA\u44E1\uD86B\uDDFF\u62C1\u706E\u9FCB\"],\n[\"8840\",\"\u31C0\",4,\"\uD840\uDD0C\u31C5\uD840\uDCD1\uD840\uDCCD\u31C6\u31C7\uD840\uDCCB\uD847\uDFE8\u31C8\uD840\uDCCA\u31C9\u31CA\u31CB\u31CC\uD840\uDD0E\u31CD\u31CE\u0100\u00C1\u01CD\u00C0\u0112\u00C9\u011A\u00C8\u014C\u00D3\u01D1\u00D2\u0FFF\u00CA\u0304\u1EBE\u0FFF\u00CA\u030C\u1EC0\u00CA\u0101\u00E1\u01CE\u00E0\u0251\u0113\u00E9\u011B\u00E8\u012B\u00ED\u01D0\u00EC\u014D\u00F3\u01D2\u00F2\u016B\u00FA\u01D4\u00F9\u01D6\u01D8\u01DA\"],\n[\"88a1\",\"\u01DC\u00FC\u0FFF\u00EA\u0304\u1EBF\u0FFF\u00EA\u030C\u1EC1\u00EA\u0261\u23DA\u23DB\"],\n[\"8940\",\"\uD868\uDFA9\uD844\uDD45\"],\n[\"8943\",\"\u650A\"],\n[\"8946\",\"\u4E3D\u6EDD\u9D4E\u91DF\"],\n[\"894c\",\"\uD85D\uDF35\u6491\u4F1A\u4F28\u4FA8\u5156\u5174\u519C\u51E4\u52A1\u52A8\u533B\u534E\u53D1\u53D8\u56E2\u58F0\u5904\u5907\u5932\u5934\u5B66\u5B9E\u5B9F\u5C9A\u5E86\u603B\u6589\u67FE\u6804\u6865\u6D4E\u70BC\u7535\u7EA4\u7EAC\u7EBA\u7EC7\u7ECF\u7EDF\u7F06\u7F37\u827A\u82CF\u836F\u89C6\u8BBE\u8BE2\u8F66\u8F67\u8F6E\"],\n[\"89a1\",\"\u7411\u7CFC\u7DCD\u6946\u7AC9\u5227\"],\n[\"89ab\",\"\u918C\u78B8\u915E\u80BC\"],\n[\"89b0\",\"\u8D0B\u80F6\uD842\uDDE7\"],\n[\"89b5\",\"\u809F\u9EC7\u4CCD\u9DC9\u9E0C\u4C3E\uD867\uDDF6\uD85C\uDC0E\u9E0A\uD868\uDD33\u35C1\"],\n[\"89c1\",\"\u6E9A\u823E\u7519\"],\n[\"89c5\",\"\u4911\u9A6C\u9A8F\u9F99\u7987\uD861\uDC6C\uD847\uDDCA\uD841\uDDD0\uD84A\uDEE6\u4E24\u4E81\u4E80\u4E87\u4EBF\u4EEB\u4F37\u344C\u4FBD\u3E48\u5003\u5088\u347D\u3493\u34A5\u5186\u5905\u51DB\u51FC\u5205\u4E89\u5279\u5290\u5327\u35C7\u53A9\u3551\u53B0\u3553\u53C2\u5423\u356D\u3572\u3681\u5493\u54A3\u54B4\u54B9\u54D0\u54EF\u5518\u5523\u5528\u3598\u553F\u35A5\u35BF\u55D7\u35C5\"],\n[\"8a40\",\"\uD85F\uDD84\u5525\"],\n[\"8a43\",\"\uD843\uDC42\uD843\uDD15\uD854\uDD2B\u5590\uD84B\uDCC6\u39EC\uD840\uDF41\u8E46\uD853\uDDB8\uD865\uDCE5\u4053\uD860\uDCBE\u777A\uD84B\uDC38\u3A34\u47D5\uD860\uDD5D\uD85A\uDDF2\uD853\uDDEA\u64DD\uD843\uDD7C\uD843\uDFB4\uD843\uDCD5\uD844\uDCF4\u648D\u8E7E\uD843\uDE96\uD843\uDC0B\uD843\uDF64\uD84B\uDCA9\uD860\uDE56\uD851\uDCD3\"],\n[\"8a64\",\"\uD843\uDD46\uD866\uDE4D\uD860\uDCE9\u47F4\uD853\uDEA7\uD84B\uDCC2\u9AB2\u3A67\uD865\uDDF4\u3FED\u3506\uD854\uDEC7\uD865\uDFD4\uD85E\uDCC8\uD84B\uDD44\u9D6E\u9815\"],\n[\"8a76\",\"\u43D9\uD858\uDCA5\u64B4\u54E3\uD84B\uDD4C\uD84A\uDFCA\uD844\uDC77\u39FB\uD844\uDC6F\"],\n[\"8aa1\",\"\uD859\uDEDA\uD859\uDF16\uD85E\uDDA0\u64EA\uD854\uDC52\uD843\uDC43\u8E68\uD848\uDDA1\uD862\uDF4C\uD841\uDF31\"],\n[\"8aac\",\"\u480B\uD840\uDDA9\u3FFA\u5873\uD84B\uDD8D\"],\n[\"8ab2\",\"\uD851\uDDC8\uD841\uDCFC\uD858\uDC97\uD843\uDF4C\uD843\uDD96\u5579\u40BB\u43BA\"],\n[\"8abb\",\"\u4AB4\uD84A\uDE66\uD844\uDC9D\u81AA\u98F5\uD843\uDD9C\u6379\u39FE\uD849\uDF75\u8DC0\u56A1\u647C\u3E43\"],\n[\"8ac9\",\"\uD869\uDE01\uD843\uDE09\uD84A\uDECF\uD84B\uDCC9\"],\n[\"8ace\",\"\uD844\uDCC8\uD84E\uDDC2\u3992\u3A06\uD860\uDE9B\u3578\uD857\uDE49\uD848\uDCC7\u5652\uD843\uDF31\uD84B\uDCB2\uD865\uDF20\u34BC\u6C3D\uD853\uDE3B\"],\n[\"8adf\",\"\uD85D\uDD74\uD84B\uDE8B\uD848\uDE08\uD869\uDE5B\uD863\uDCCD\uD843\uDE7A\uD843\uDC34\uD85A\uDC1C\u7F93\uD844\uDCCF\uD84A\uDC03\uD84A\uDD39\u35FB\uD854\uDDE3\uD843\uDE8C\uD843\uDF8D\uD843\uDEAA\u3F93\uD843\uDF30\uD843\uDD47\uD844\uDD4F\uD843\uDE4C\"],\n[\"8af6\",\"\uD843\uDEAB\uD842\uDFA9\uD843\uDD48\uD844\uDCC0\uD844\uDD3D\u3FF9\uD849\uDE96\u6432\uD843\uDFAD\"],\n[\"8b40\",\"\uD84C\uDFF4\uD85D\uDE39\uD84A\uDFCE\uD843\uDD7E\uD843\uDD7F\uD84B\uDC51\uD84B\uDC55\u3A18\uD843\uDE98\uD844\uDCC7\uD843\uDF2E\uD869\uDE32\uD85A\uDF50\uD863\uDCD2\uD863\uDD99\uD863\uDCCA\u95AA\u54CC\u82C4\u55B9\"],\n[\"8b55\",\"\uD867\uDEC3\u9C26\u9AB6\uD85D\uDF5E\uD84B\uDDEE\u7140\u816D\u80EC\u5C1C\uD859\uDD72\u8134\u3797\u535F\uD860\uDCBD\u91B6\uD843\uDEFA\uD843\uDE0F\uD843\uDE77\uD843\uDEFB\u35DD\uD853\uDDEB\u3609\uD843\uDCD6\u56AF\uD849\uDFB5\uD844\uDCC9\uD843\uDE10\uD843\uDE78\uD844\uDC78\uD844\uDD48\uD860\uDE07\uD845\uDC55\uD843\uDE79\uD853\uDE50\uD84B\uDDA4\u5A54\uD844\uDC1D\uD844\uDC1E\uD844\uDCF5\uD844\uDCF6\u579C\uD843\uDE11\"],\n[\"8ba1\",\"\uD85D\uDE94\uD860\uDECD\uD843\uDFB5\uD843\uDE7B\uD854\uDD7E\u3703\uD843\uDFB6\uD844\uDD80\uD854\uDED8\uD868\uDEBD\uD852\uDDDA\uD846\uDC3A\uD850\uDD77\uD860\uDE7C\u5899\u5268\u361A\uD855\uDF3D\u7BB2\u5B68\u4800\u4B2C\u9F27\u49E7\u9C1F\u9B8D\uD856\uDF74\uD84C\uDD3D\u55FB\u35F2\u5689\u4E28\u5902\uD846\uDFC1\uD87E\uDC78\u9751\uD840\uDC86\u4E5B\u4EBB\u353E\u5C23\u5F51\u5FC4\u38FA\u624C\u6535\u6B7A\u6C35\u6C3A\u706C\u722B\u4E2C\u72AD\uD852\uDCE9\u7F52\u793B\u7CF9\u7F53\uD858\uDE6A\u34C1\"],\n[\"8bde\",\"\uD858\uDF4B\u8002\u8080\uD859\uDE12\uD85A\uDD51\u535D\u8864\u89C1\uD85E\uDCB2\u8BA0\u8D1D\u9485\u9578\u957F\u95E8\uD863\uDE0F\u97E6\u9875\u98CE\u98DE\u9963\uD866\uDC10\u9C7C\u9E1F\u9EC4\u6B6F\uF907\u4E37\uD840\uDC87\u961D\u6237\u94A2\"],\n[\"8c40\",\"\u503B\u6DFE\uD867\uDC73\u9FA6\u3DC9\u888F\uD850\uDD4E\u7077\u5CF5\u4B20\uD854\uDDCD\u3559\uD857\uDD30\u6122\uD862\uDE32\u8FA7\u91F6\u7191\u6719\u73BA\uD84C\uDE81\uD868\uDD07\u3C8B\uD846\uDD80\u4B10\u78E4\u7402\u51AE\uD861\uDF0F\u4009\u6A63\uD868\uDEBA\u4223\u860F\uD842\uDE6F\u7A2A\uD866\uDD47\uD862\uDEEA\u9755\u704D\u5324\uD848\uDC7E\u93F4\u76D9\uD862\uDDE3\u9FA7\u77DD\u4EA3\u4FF0\u50BC\u4E2F\u4F17\u9FA8\u5434\u7D8B\u5892\u58D0\uD847\uDDB6\u5E92\u5E99\u5FC2\uD849\uDF12\u658B\"],\n[\"8ca1\",\"\uD84C\uDFF9\u6919\u6A43\uD84F\uDC63\u6CFF\"],\n[\"8ca7\",\"\u7200\uD851\uDD05\u738C\u3EDB\uD852\uDE13\u5B15\u74B9\u8B83\uD857\uDCA4\uD855\uDE95\u7A93\u7BEC\u7CC3\u7E6C\u82F8\u8597\u9FA9\u8890\u9FAA\u8EB9\u9FAB\u8FCF\u855F\u99E0\u9221\u9FAC\uD863\uDDB9\uD845\uDC3F\u4071\u42A2\u5A1A\"],\n[\"8cc9\",\"\u9868\u676B\u4276\u573D\"],\n[\"8cce\",\"\u85D6\uD852\uDD7B\u82BF\uD85C\uDD0D\u4C81\uD85B\uDD74\u5D7B\uD85A\uDF15\uD85B\uDFBE\u9FAD\u9FAE\u5B96\u9FAF\u66E7\u7E5B\u6E57\u79CA\u3D88\u44C3\uD84C\uDE56\uD849\uDF96\u439A\u4536\"],\n[\"8ce6\",\"\u5CD5\uD84E\uDF1A\u8AF9\u5C78\u3D12\uD84D\uDD51\u5D78\u9FB2\u7157\u4558\uD850\uDCEC\uD847\uDE23\u4C77\u3978\u344A\uD840\uDDA4\uD85B\uDC41\u8ACC\u4FB4\uD840\uDE39\u59BF\u816C\u9856\uD866\uDCFA\u5F3B\"],\n[\"8d40\",\"\uD842\uDF9F\"],\n[\"8d42\",\"\uD848\uDDC1\uD862\uDD6D\u4102\u46BB\uD864\uDC79\u3F07\u9FB3\uD868\uDDB5\u40F8\u37D6\u46F7\uD85B\uDC46\u417C\uD861\uDEB2\uD85C\uDFFF\u456D\u38D4\uD855\uDC9A\u4561\u451B\u4D89\u4C7B\u4D76\u45EA\u3FC8\uD852\uDF0F\u3661\u44DE\u44BD\u41ED\u5D3E\u5D48\u5D56\u3DFC\u380F\u5DA4\u5DB9\u3820\u3838\u5E42\u5EBD\u5F25\u5F83\u3908\u3914\u393F\u394D\u60D7\u613D\u5CE5\u3989\u61B7\u61B9\u61CF\u39B8\u622C\u6290\u62E5\u6318\u39F8\u56B1\"],\n[\"8da1\",\"\u3A03\u63E2\u63FB\u6407\u645A\u3A4B\u64C0\u5D15\u5621\u9F9F\u3A97\u6586\u3ABD\u65FF\u6653\u3AF2\u6692\u3B22\u6716\u3B42\u67A4\u6800\u3B58\u684A\u6884\u3B72\u3B71\u3B7B\u6909\u6943\u725C\u6964\u699F\u6985\u3BBC\u69D6\u3BDD\u6A65\u6A74\u6A71\u6A82\u3BEC\u6A99\u3BF2\u6AAB\u6AB5\u6AD4\u6AF6\u6B81\u6BC1\u6BEA\u6C75\u6CAA\u3CCB\u6D02\u6D06\u6D26\u6D81\u3CEF\u6DA4\u6DB1\u6E15\u6E18\u6E29\u6E86\uD862\uDDC0\u6EBB\u6EE2\u6EDA\u9F7F\u6EE8\u6EE9\u6F24\u6F34\u3D46\uD84F\uDF41\u6F81\u6FBE\u3D6A\u3D75\u71B7\u5C99\u3D8A\u702C\u3D91\u7050\u7054\u706F\u707F\u7089\uD840\uDF25\u43C1\u35F1\uD843\uDED8\"],\n[\"8e40\",\"\uD84F\uDED7\u57BE\uD85B\uDED3\u713E\uD855\uDFE0\u364E\u69A2\uD862\uDFE9\u5B74\u7A49\uD856\uDCE1\uD865\uDCD9\u7A65\u7A7D\uD856\uDDAC\u7ABB\u7AB0\u7AC2\u7AC3\u71D1\uD859\uDC8D\u41CA\u7ADA\u7ADD\u7AEA\u41EF\u54B2\uD857\uDC01\u7B0B\u7B55\u7B29\uD854\uDF0E\uD857\uDCFE\u7BA2\u7B6F\u839C\uD856\uDFB4\uD85B\uDC7F\u7BD0\u8421\u7B92\u7BB8\uD857\uDD20\u3DAD\uD857\uDC65\u8492\u7BFA\u7C06\u7C35\uD857\uDCC1\u7C44\u7C83\uD852\uDC82\u7CA6\u667D\uD851\uDD78\u7CC9\u7CC7\u7CE6\u7C74\u7CF3\u7CF5\u7CCE\"],\n[\"8ea1\",\"\u7E67\u451D\uD85B\uDE44\u7D5D\uD85B\uDED6\u748D\u7D89\u7DAB\u7135\u7DB3\u7DD2\uD850\uDC57\uD858\uDC29\u7DE4\u3D13\u7DF5\uD845\uDFF9\u7DE5\uD860\uDF6D\u7E1D\uD858\uDD21\uD858\uDD5A\u7E6E\u7E92\u432B\u946C\u7E27\u7F40\u7F41\u7F47\u7936\uD858\uDED0\u99E1\u7F97\uD858\uDF51\u7FA3\uD845\uDE61\uD840\uDC68\u455C\uD84D\uDF66\u4503\uD860\uDF3A\u7FFA\uD859\uDC89\u8005\u8008\u801D\u8028\u802F\uD868\uDC87\uD85B\uDCC3\u803B\u803C\u8061\uD849\uDF14\u4989\uD859\uDE26\uD84F\uDDE3\uD859\uDEE8\u6725\u80A7\uD862\uDE48\u8107\u811A\u58B0\uD849\uDEF6\u6C7F\uD859\uDC98\uD853\uDFB8\u64E7\uD845\uDC8A\u8218\uD846\uDC5E\u6A53\uD852\uDE65\uD852\uDE95\u447A\u8229\uD842\uDF0D\uD85A\uDE52\uD84F\uDD7E\u4FF9\uD845\uDCFD\u84E2\u8362\uD85A\uDF0A\uD852\uDDA7\uD84D\uDD30\uD845\uDF73\uD84F\uDDF8\u82AA\u691B\uD87E\uDD94\u41DB\"],\n[\"8f40\",\"\u854B\u82D0\u831A\uD843\uDE16\uD845\uDFB4\u36C1\uD84C\uDD7D\uD84D\uDD5A\u827B\u82E2\u8318\uD84F\uDE8B\uD85B\uDDA3\uD85A\uDF05\uD85A\uDF97\uD84D\uDDCE\u3DBF\u831D\u55EC\u8385\u450B\uD85B\uDDA5\u83AC\u83C1\u83D3\u347E\uD85B\uDED4\u6A57\u855A\u3496\uD85B\uDE42\uD84B\uDEEF\u8458\uD856\uDFE4\u8471\u3DD3\u44E4\u6AA7\u844A\uD84F\uDCB5\u7958\u84A8\uD85A\uDF96\uD85B\uDE77\uD85B\uDE43\u84DE\u840F\u8391\u44A0\u8493\u84E4\uD857\uDC91\u4240\uD857\uDCC0\u4543\u8534\u5AF2\uD85B\uDE99\u4527\u8573\u4516\u67BF\u8616\"],\n[\"8fa1\",\"\uD861\uDE25\uD861\uDE3B\u85C1\uD85C\uDC88\u8602\uD845\uDD82\uD85C\uDCCD\uD87E\uDDB2\u456A\u8628\u3648\uD846\uDCA2\u53F7\uD85C\uDF9A\u867E\u8771\uD868\uDCF8\u87EE\uD84B\uDC27\u87B1\u87DA\u880F\u5661\u866C\u6856\u460F\u8845\u8846\uD85D\uDDE0\uD84F\uDDB9\uD85D\uDDE4\u885E\u889C\u465B\u88B4\u88B5\u63C1\u88C5\u7777\uD85D\uDF0F\u8987\u898A\u89A6\u89A9\u89A7\u89BC\uD862\uDE25\u89E7\uD85E\uDD24\uD85E\uDEBD\u8A9C\u7793\u91FE\u8A90\uD85E\uDE59\u7AE9\uD85E\uDF3A\uD84F\uDF8F\u4713\uD85E\uDF38\u717C\u8B0C\u8B1F\uD855\uDC30\uD855\uDD65\u8B3F\u8B4C\u8B4D\u8AA9\uD852\uDE7A\u8B90\u8B9B\u8AAF\uD845\uDEDF\u4615\u884F\u8C9B\uD85F\uDD54\uD85F\uDD8F\uD87E\uDDD4\u3725\uD85F\uDD53\u8CD6\uD85F\uDD98\uD85F\uDDBD\u8D12\u8D03\uD846\uDD10\u8CDB\u705C\u8D11\uD853\uDCC9\u3ED0\u8D77\"],\n[\"9040\",\"\u8DA9\uD860\uDC02\uD844\uDC14\uD852\uDD8A\u3B7C\uD860\uDDBC\uD85C\uDD0C\u7AE7\u8EAD\u8EB6\u8EC3\u92D4\u8F19\u8F2D\uD860\uDF65\uD861\uDC12\u8FA5\u9303\uD868\uDE9F\uD842\uDE50\u8FB3\u492A\uD862\uDDDE\uD861\uDD3D\uD84F\uDDBB\u5EF8\uD84C\uDE62\u8FF9\uD868\uDC14\uD861\uDEBC\uD861\uDD01\uD848\uDF25\u3980\uD85B\uDED7\u9037\uD861\uDD3C\uD85E\uDEBE\u9061\uD861\uDD6C\uD861\uDE0B\u90A8\uD861\uDF13\u90C4\uD861\uDEE6\u90AE\u90FD\u9167\u3AF0\u91A9\u91C4\u7CAC\uD862\uDD33\uD847\uDE89\u920E\u6C9F\u9241\u9262\uD855\uDDB9\u92B9\uD862\uDEC6\uD84F\uDC9B\uD862\uDF0C\uD855\uDDDB\"],\n[\"90a1\",\"\uD843\uDD31\u932C\u936B\uD862\uDEE1\uD862\uDFEB\u708F\u5AC3\uD862\uDEE2\uD862\uDEE5\u4965\u9244\uD862\uDFEC\uD863\uDC39\uD862\uDFFF\u9373\u945B\u8EBC\u9585\u95A6\u9426\u95A0\u6FF6\u42B9\uD849\uDE7A\uD861\uDED8\uD844\uDE7C\uD84F\uDE2E\u49DF\u6C1C\u967B\u9696\u416C\u96A3\uD85B\uDED5\u61DA\u96B6\u78F5\uD862\uDEE0\u96BD\u53CC\u49A1\uD85B\uDCB8\uD840\uDE74\uD859\uDC10\uD864\uDCAF\uD864\uDCE5\uD852\uDED1\uD846\uDD15\uD84C\uDF0A\u9731\u8642\u9736\u4A0F\u453D\u4585\uD852\uDEE9\u7075\u5B41\u971B\u975C\uD864\uDDD5\u9757\u5B4A\uD864\uDDEB\u975F\u9425\u50D0\uD84C\uDCB7\uD84C\uDCBC\u9789\u979F\u97B1\u97BE\u97C0\u97D2\u97E0\uD855\uDC6C\u97EE\u741C\uD865\uDC33\u97FF\u97F5\uD865\uDC1D\uD85E\uDD7A\u4AD1\u9834\u9833\u984B\u9866\u3B0E\uD85C\uDD75\u3D51\uD841\uDE30\uD850\uDD5C\"],\n[\"9140\",\"\uD855\uDF06\u98CA\u98B7\u98C8\u98C7\u4AFF\uD85B\uDD27\uD845\uDED3\u55B0\u98E1\u98E6\u98EC\u9378\u9939\uD852\uDE29\u4B72\uD866\uDC57\uD866\uDD05\u99F5\u9A0C\u9A3B\u9A10\u9A58\uD855\uDF25\u36C4\uD864\uDCB1\uD866\uDFD5\u9AE0\u9AE2\uD866\uDF05\u9AF4\u4C0E\u9B14\u9B2D\uD861\uDE00\u5034\u9B34\uD85A\uDDA8\u38C3\uD84C\uDC7D\u9B50\u9B40\uD867\uDD3E\u5A45\uD846\uDC63\u9B8E\uD850\uDE4B\u9C02\u9BFF\u9C0C\uD867\uDE68\u9DD4\uD867\uDFB7\uD868\uDD92\uD868\uDDAB\uD868\uDCE1\uD868\uDD23\uD868\uDDDF\u9D7E\u9D83\uD868\uDD34\u9E0E\u6888\"],\n[\"91a1\",\"\u9DC4\uD848\uDD5B\uD868\uDD93\uD868\uDE20\uD846\uDD3B\uD868\uDE33\u9D39\uD868\uDCB9\uD868\uDEB4\u9E90\u9E95\u9E9E\u9EA2\u4D34\u9EAA\u9EAF\uD850\uDF64\u9EC1\u3B60\u39E5\u3D1D\u4F32\u37BE\uD863\uDC2B\u9F02\u9F08\u4B96\u9424\uD85B\uDDA2\u9F17\u9F16\u9F39\u569F\u568A\u9F45\u99B8\uD864\uDC8B\u97F2\u847F\u9F62\u9F69\u7ADC\u9F8E\u7216\u4BBE\uD852\uDD75\uD852\uDDBB\u7177\uD852\uDDF8\uD850\uDF48\uD852\uDE51\u739E\uD862\uDFDA\uD846\uDCFA\u799F\uD862\uDD7E\uD863\uDE36\u9369\u93F3\uD862\uDE44\u92EC\u9381\u93CB\uD862\uDD6C\uD851\uDCB9\u7217\u3EEB\u7772\u7A43\u70D0\uD851\uDC73\uD850\uDFF8\u717E\uD845\uDFEF\u70A3\uD846\uDCBE\uD84D\uDD99\u3EC7\uD846\uDC85\uD855\uDC2F\uD845\uDFF8\u3722\uD845\uDEFB\uD846\uDC39\u36E1\uD845\uDF74\uD846\uDCD1\uD857\uDF4B\u3723\uD845\uDEC0\u575B\uD852\uDE25\uD844\uDFFE\uD844\uDEA8\"],\n[\"9240\",\"\uD844\uDFC6\uD845\uDCB6\u8503\uD84D\uDEA6\u8503\u8455\uD852\uDD94\uD85C\uDD65\uD84F\uDE31\uD855\uDD5C\uD84F\uDEFB\uD85C\uDC52\u44F4\uD84D\uDEEE\uD866\uDD9D\uD85B\uDF26\u67F9\u3733\u3C15\u3DE7\u586C\uD846\uDD22\u6810\u4057\uD84D\uDF3F\uD850\uDCE1\uD850\uDC8B\uD850\uDD0F\uD85B\uDC21\u54CB\u569E\uD859\uDEB1\u5692\uD843\uDFDF\uD842\uDFA8\uD843\uDE0D\u93C6\uD862\uDF13\u939C\u4EF8\u512B\u3819\uD851\uDC36\u4EBC\uD841\uDC65\uD840\uDF7F\u4F4B\u4F8A\uD855\uDE51\u5A68\uD840\uDDAB\uD840\uDFCB\u3999\uD840\uDF0A\uD841\uDC14\u3435\u4F29\uD840\uDEC0\uD863\uDEB3\uD840\uDE75\u8ADA\uD840\uDE0C\u4E98\"],\n[\"92a1\",\"\u50CD\u510D\u4FA2\u4F03\uD852\uDE0E\uD84F\uDE8A\u4F42\u502E\u506C\u5081\u4FCC\u4FE5\u5058\u50FC\u5159\u515B\u515D\u515E\u6E76\uD84D\uDD95\uD84F\uDE39\uD84F\uDEBF\u6D72\uD846\uDC84\uD84F\uDE89\u51A8\u51C3\uD841\uDDE0\u44DD\uD841\uDCA3\uD841\uDC92\uD841\uDC91\u8D7A\uD862\uDE9C\uD841\uDF0E\u5259\u52A4\uD842\uDC73\u52E1\u936E\u467A\u718C\uD850\uDF8C\uD843\uDC20\uD852\uDDAC\uD844\uDCE4\u69D1\uD843\uDE1D\u7479\u3EDE\u7499\u7414\u7456\u7398\u4B8E\uD852\uDEBC\uD850\uDC8D\u53D0\u3584\u720F\uD850\uDCC9\u55B4\uD840\uDF45\u54CD\uD842\uDFC6\u571D\u925D\u96F4\u9366\u57DD\u578D\u577F\u363E\u58CB\u5A99\uD862\uDE46\uD845\uDEFA\uD845\uDF6F\uD845\uDF10\u5A2C\u59B8\u928F\u5A7E\u5ACF\u5A12\uD856\uDD46\uD846\uDDF3\uD846\uDC61\uD850\uDE95\u36F5\u6D05\u7443\u5A21\uD857\uDE83\"],\n[\"9340\",\"\u5A81\uD862\uDFD7\uD841\uDC13\u93E0\u748C\uD844\uDF03\u7105\u4972\u9408\uD862\uDDFB\u93BD\u37A0\u5C1E\u5C9E\u5E5E\u5E48\uD846\uDD96\uD846\uDD7C\uD84E\uDEEE\u5ECD\u5B4F\uD846\uDD03\uD846\uDD04\u3701\uD846\uDCA0\u36DD\uD845\uDEFE\u36D3\u812A\uD862\uDE47\uD847\uDDBA\uD84D\uDC72\uD862\uDDA8\u5F0C\u5F0E\uD846\uDD27\uD845\uDFAB\u5A6B\uD845\uDF3B\u5B44\u8614\uD85D\uDDFD\u8860\u607E\uD84A\uDC60\uD849\uDE2B\u5FDB\u3EB8\uD849\uDDAF\uD849\uDDBE\uD864\uDC88\uD85B\uDF73\u61C0\uD840\uDC3E\uD840\uDC46\uD849\uDE1B\u6199\u6198\u6075\uD84B\uDC9B\uD84B\uDD07\uD851\uDED4\uD864\uDD4D\"],\n[\"93a1\",\"\u6471\uD851\uDE65\uD84A\uDF6A\u3A29\uD84A\uDF22\uD84D\uDC50\uD866\uDCEA\uD84B\uDE78\u6337\uD869\uDC5B\u64B6\u6331\u63D1\uD852\uDDE3\uD84B\uDD67\u62A4\uD84B\uDCA1\u643B\u656B\u6972\u3BF4\uD84C\uDC8E\uD84C\uDEAD\uD852\uDD89\uD84C\uDEAB\u550D\uD84C\uDEE0\uD846\uDCD9\uD865\uDC3F\u66CE\uD84C\uDE89\uD84C\uDDB3\u3AE0\u4190\uD855\uDD84\uD862\uDF22\uD855\uDD8F\uD845\uDEFC\uD855\uDD5B\uD855\uDC25\u78EE\uD84C\uDD03\uD846\uDC2A\uD84C\uDE34\u3464\uD84C\uDE0F\uD84C\uDD82\uD850\uDEC9\u668E\uD85B\uDD24\u666B\u4B93\u6630\uD85E\uDC70\uD847\uDDEB\u6663\uD84C\uDED2\uD84C\uDEE1\u661E\uD856\uDC72\u38D1\uD84E\uDC3A\uD84D\uDFBC\u3B99\uD84D\uDFA2\uD84C\uDFFE\u74D0\u3B96\u678F\uD851\uDE2A\u68B6\u681E\u3BC4\u6ABE\u3863\uD84D\uDFD5\uD851\uDC87\u6A33\u6A52\u6AC9\u6B05\uD846\uDD12\u6511\u6898\u6A4C\u3BD7\u6A7A\u6B57\uD84F\uDFC0\uD84F\uDC9A\u93A0\u92F2\uD862\uDFEA\uD862\uDECB\"],\n[\"9440\",\"\u9289\uD860\uDC1E\uD862\uDDDC\u9467\u6DA5\u6F0B\uD852\uDDEC\u6D67\uD84F\uDF7F\u3D8F\u6E04\uD850\uDC3C\u5A3D\u6E0A\u5847\u6D24\u7842\u713B\uD850\uDF1A\uD850\uDE76\u70F1\u7250\u7287\u7294\uD851\uDF8F\uD851\uDF25\u5179\uD852\uDEA4\uD841\uDDEB\u747A\uD84F\uDEF8\uD84D\uDE5F\uD852\uDE4A\uD852\uDD17\uD857\uDFE1\u3F06\u3EB1\uD852\uDEDF\uD863\uDC23\uD84F\uDF35\u60A7\u3EF3\u74CC\u743C\u9387\u7437\u449F\uD85B\uDDEA\u4551\u7583\u3F63\uD853\uDCD9\uD853\uDD06\u3F58\u7555\u7673\uD869\uDDC6\u3B19\u7468\uD862\uDECC\uD852\uDDAB\uD852\uDD8E\u3AFB\"],\n[\"94a1\",\"\u3DCD\uD852\uDE4E\u3EFF\uD852\uDDC5\uD852\uDCF3\u91FA\u5732\u9342\uD862\uDEE3\uD846\uDC64\u50DF\uD854\uDE21\uD854\uDDE7\u7778\uD84C\uDE32\u770E\u770F\u777B\uD851\uDE97\uD84D\uDF81\u3A5E\uD852\uDCF0\u7438\u749B\u3EBF\uD852\uDEBA\uD852\uDEC7\u40C8\uD852\uDE96\uD858\uDDAE\u9307\uD855\uDD81\u781E\u788D\u7888\u78D2\u73D0\u7959\uD85D\uDF41\uD855\uDEE3\u410E\u799B\u8496\u79A5\u6A2D\uD84F\uDEFA\u7A3A\u79F4\u416E\uD845\uDEE6\u4132\u9235\u79F1\uD843\uDD4C\uD852\uDD8C\uD840\uDE99\uD84F\uDDBA\uD845\uDF6E\u3597\u556B\u3570\u36AA\uD840\uDDD4\uD843\uDC0D\u7AE2\u5A59\uD849\uDEF5\uD856\uDEAF\uD856\uDE9C\u5A0D\uD840\uDE5B\u78F0\u5A2A\uD856\uDFC6\u7AFE\u41F9\u7C5D\u7C6D\u4211\uD856\uDFB3\uD857\uDEBC\uD857\uDEA6\u7CCD\uD852\uDDF9\uD845\uDFB0\u7C8E\u7C7C\u7CAE\u6AB2\u7DDC\u7E07\u7DD3\u7F4E\uD858\uDE61\"],\n[\"9540\",\"\uD858\uDD5C\uD85E\uDF48\u7D97\uD857\uDE82\u426A\uD85A\uDF75\uD842\uDD16\u67D6\uD840\uDC4E\uD84D\uDDCF\u57C4\uD859\uDC12\uD858\uDFF8\uD852\uDD62\u7FDD\u7B27\uD842\uDC2C\uD856\uDEE9\uD857\uDD43\u7B0C\uD857\uDE0E\u99E6\u8645\u9A63\u6A1C\uD84D\uDC3F\u39E2\uD852\uDDF7\uD859\uDDAD\u9A1F\uD859\uDDA0\u8480\uD85C\uDD27\uD85B\uDCD1\u44EA\u8137\u4402\u80C6\u8109\u8142\uD859\uDFB4\u98C3\uD85A\uDE42\u8262\u8265\uD85A\uDE51\u8453\uD85B\uDDA7\u8610\uD85C\uDE1B\u5A86\u417F\uD846\uDC40\u5B2B\uD846\uDCA1\u5AE4\uD846\uDCD8\u86A0\uD87E\uDDBC\uD84F\uDD8F\u882D\uD85D\uDC22\u5A02\"],\n[\"95a1\",\"\u886E\u4F45\u8887\u88BF\u88E6\u8965\u894D\uD855\uDE83\u8954\uD85D\uDF85\uD85D\uDF84\uD862\uDFF5\uD862\uDFD9\uD862\uDF9C\uD862\uDDF9\u3EAD\u84A3\u46F5\u46CF\u37F2\u8A3D\u8A1C\uD865\uDC48\u5F4D\u922B\uD850\uDE84\u65D4\u7129\u70C4\uD846\uDC45\u9D6D\u8C9F\u8CE9\uD85F\uDDDC\u599A\u77C3\u59F0\u436E\u36D4\u8E2A\u8EA7\uD853\uDC09\u8F30\u8F4A\u42F4\u6C58\u6FBB\uD848\uDF21\u489B\u6F79\u6E8B\uD845\uDFDA\u9BE9\u36B5\uD852\uDD2F\u90BB\u9097\u5571\u4906\u91BB\u9404\uD862\uDE4B\u4062\uD862\uDEFC\u9427\uD863\uDC1D\uD863\uDC3B\u84E5\u8A2B\u9599\u95A7\u9597\u9596\uD863\uDD34\u7445\u3EC2\uD852\uDCFF\uD852\uDE42\uD850\uDFEA\u3EE7\uD84C\uDE25\u968F\uD863\uDEE7\uD863\uDE66\uD863\uDE65\u3ECC\uD852\uDDED\uD852\uDE78\uD84F\uDFEE\u7412\u746B\u3EFC\u9741\uD864\uDCB0\"],\n[\"9640\",\"\u6847\u4A1D\uD864\uDC93\uD855\uDFDF\u975D\u9368\uD862\uDD89\uD863\uDC26\uD862\uDF2F\uD858\uDFBE\u92BA\u5B11\u8B69\u493C\u73F9\uD850\uDE1B\u979B\u9771\u9938\uD843\uDF26\u5DC1\uD862\uDFC5\uD852\uDEB2\u981F\uD865\uDCDA\u92F6\uD865\uDDD7\u91E5\u44C0\uD862\uDF50\uD852\uDE67\uD862\uDF64\u98DC\uD862\uDE45\u3F00\u922A\u4925\u8414\u993B\u994D\uD85E\uDF06\u3DFD\u999B\u4B6F\u99AA\u9A5C\uD862\uDF65\uD856\uDCC8\u6A8F\u9A21\u5AFE\u9A2F\uD866\uDCF1\u4B90\uD866\uDD48\u99BC\u4BBD\u4B97\u937D\u5872\uD844\uDF02\u5822\uD852\uDDB8\"],\n[\"96a1\",\"\uD845\uDCE8\u7844\uD849\uDF1F\uD84F\uDDB8\u68C5\u3D7D\u9458\u3927\u6150\uD849\uDF81\uD84A\uDD6B\u6107\u9C4F\u9C53\u9C7B\u9C35\u9C10\u9B7F\u9BCF\uD867\uDE2D\u9B9F\uD868\uDDF5\uD868\uDCFE\u9D21\u4CAE\uD850\uDD04\u9E18\u4CB0\u9D0C\uD868\uDDB4\uD868\uDCED\uD868\uDCF3\uD866\uDD2F\u9DA5\u84BD\uD85B\uDE12\uD85B\uDFDF\uD85A\uDF82\u85FC\u4533\uD85B\uDDA4\uD85B\uDE84\uD85B\uDDF0\u8420\u85EE\uD85B\uDE00\uD84D\uDFD7\uD858\uDC64\u79E2\uD84D\uDD9C\uD84D\uDE40\u492D\uD852\uDDDE\u3D62\u93DB\u92BE\u9348\uD840\uDEBF\u78B9\u9277\u944D\u4FE4\u3440\u9064\uD855\uDD5D\u783D\u7854\u78B6\u784B\uD845\uDF57\uD84C\uDDC9\uD852\uDD41\u369A\u4F72\u6FDA\u6FD9\u701E\u701E\u5414\uD850\uDDB5\u57BB\u58F3\u578A\u9D16\u57D7\u7134\u34AF\uD850\uDDAC\u71EB\uD85B\uDC40\uD853\uDF97\u5B28\uD845\uDFB5\uD862\uDE49\"],\n[\"9740\",\"\u610C\u5ACE\u5A0B\u42BC\uD851\uDC88\u372C\u4B7B\uD862\uDDFC\u93BB\u93B8\uD846\uDCD6\uD843\uDF1D\u8472\uD85B\uDCC0\uD845\uDC13\uD850\uDEFA\uD84B\uDC26\uD850\uDFC1\u5994\uD84F\uDDB7\uD859\uDF41\u7DA8\uD858\uDD5B\uD858\uDCA4\uD852\uDDB9\uD852\uDD8B\uD862\uDDFA\u92E5\u73E2\u3EE9\u74B4\uD862\uDF63\uD846\uDC9F\u3EE1\uD852\uDEB3\u6AD8\u73F3\u73FB\u3ED6\uD852\uDE3E\uD852\uDE94\uD845\uDFD9\uD852\uDE66\uD840\uDFA7\uD845\uDC24\uD852\uDDE5\u7448\uD852\uDD16\u70A5\uD852\uDD76\u9284\u73E6\u935F\uD841\uDCFE\u9331\uD862\uDECE\uD862\uDE16\u9386\uD862\uDFE7\uD855\uDDD5\u4935\uD862\uDE82\u716B\"],\n[\"97a1\",\"\uD852\uDD43\uD843\uDCFF\u56A4\uD841\uDE1A\uD842\uDFEB\uD843\uDCB8\u5502\u79C4\uD845\uDFFA\u7DFE\uD845\uDEC2\uD852\uDE50\uD846\uDC52\u452E\u9401\u370A\uD862\uDEC0\uD852\uDDAD\u59B0\uD846\uDCBF\uD846\uDC83\uD85D\uDC84\u5AA1\u36E2\uD84F\uDD5B\u36B0\u925F\u5A79\uD862\uDE81\uD846\uDC62\u9374\u3CCD\uD842\uDEB4\u4A96\u398A\u50F4\u3D69\u3D4C\uD844\uDF9C\u7175\u42FB\uD860\uDE18\u6E0F\uD864\uDCE4\u44EB\u6D57\uD85F\uDE4F\u7067\u6CAF\u3CD6\uD84F\uDFED\uD84F\uDE2D\u6E02\u6F0C\u3D6F\uD840\uDFF5\u7551\u36BC\u34C8\u4680\u3EDA\u4871\u59C4\u926E\u493E\u8F41\uD863\uDC1C\uD85A\uDFC0\u5812\u57C8\u36D6\uD845\uDC52\u70FE\uD850\uDF62\uD852\uDE71\uD84B\uDFE3\uD844\uDEB0\uD848\uDFBD\u68B9\u6967\uD844\uDF98\uD84D\uDCE5\uD85E\uDFF4\uD84D\uDEDF\uD862\uDE83\uD84D\uDFD6\uD84C\uDFFA\uD853\uDC9F\u6A1A\uD84D\uDEAD\uD85B\uDCB7\u843E\u44DF\u44CE\"],\n[\"9840\",\"\uD85B\uDD26\uD85B\uDD51\uD85B\uDC82\uD85B\uDFDE\u6F17\uD85C\uDD09\u833D\uD845\uDF3A\u83ED\uD85B\uDC80\uD85C\uDC53\uD845\uDFDB\u5989\u5A82\uD845\uDFB3\u5A61\u5A71\uD846\uDD05\uD850\uDDFC\u372D\u59EF\uD845\uDF3C\u36C7\u718E\u9390\u669A\uD850\uDEA5\u5A6E\u5A2B\uD850\uDE93\u6A2B\uD84F\uDEF9\uD85D\uDF36\uD851\uDC5B\uD850\uDECA\u711D\uD850\uDE59\uD862\uDDE1\u4FB0\uD85B\uDD28\u5CC2\uD851\uDCCE\uD85F\uDE4D\uD850\uDFBD\u6A0C\uD850\uDE56\uD844\uDF04\u70A6\u7133\uD850\uDFE9\u3DA5\u6CDF\uD87E\uDC25\uD852\uDE4F\u7E65\u59EB\u5D2F\u3DF3\u5F5C\uD852\uDE5D\uD845\uDFDF\u7DA4\u8426\"],\n[\"98a1\",\"\u5485\uD84E\uDEFA\uD84C\uDF00\uD840\uDE14\u577E\uD842\uDCD5\uD841\uDE19\u3FE5\uD847\uDF9E\uD868\uDEB6\u7003\uD864\uDD5B\u5D70\u738F\u7CD3\uD862\uDE59\uD865\uDC20\u4FC8\u7FE7\u72CD\u7310\uD85E\uDEF4\u7338\u7339\uD855\uDEF6\u7341\u7348\u3EA9\uD85E\uDF18\u906C\u71F5\uD852\uDCF2\u73E1\u81F6\u3ECA\u770C\u3ED1\u6CA2\u56FD\u7419\u741E\u741F\u3EE2\u3EF0\u3EF4\u3EFA\u74D3\u3F0E\u3F53\u7542\u756D\u7572\u758D\u3F7C\u75C8\u75DC\u3FC0\u764D\u3FD7\u7674\u3FDC\u767A\uD853\uDF5C\u7188\u5623\u8980\u5869\u401D\u7743\u4039\u6761\u4045\u35DB\u7798\u406A\u406F\u5C5E\u77BE\u77CB\u58F2\u7818\u70B9\u781C\u40A8\u7839\u7847\u7851\u7866\u8448\uD855\uDD35\u7933\u6803\u7932\u4103\"],\n[\"9940\",\"\u4109\u7991\u7999\u8FBB\u7A06\u8FBC\u4167\u7A91\u41B2\u7ABC\u8279\u41C4\u7ACF\u7ADB\u41CF\u4E21\u7B62\u7B6C\u7B7B\u7C12\u7C1B\u4260\u427A\u7C7B\u7C9C\u428C\u7CB8\u4294\u7CED\u8F93\u70C0\uD843\uDCCF\u7DCF\u7DD4\u7DD0\u7DFD\u7FAE\u7FB4\u729F\u4397\u8020\u8025\u7B39\u802E\u8031\u8054\u3DCC\u57B4\u70A0\u80B7\u80E9\u43ED\u810C\u732A\u810E\u8112\u7560\u8114\u4401\u3B39\u8156\u8159\u815A\"],\n[\"99a1\",\"\u4413\u583A\u817C\u8184\u4425\u8193\u442D\u81A5\u57EF\u81C1\u81E4\u8254\u448F\u82A6\u8276\u82CA\u82D8\u82FF\u44B0\u8357\u9669\u698A\u8405\u70F5\u8464\u60E3\u8488\u4504\u84BE\u84E1\u84F8\u8510\u8538\u8552\u453B\u856F\u8570\u85E0\u4577\u8672\u8692\u86B2\u86EF\u9645\u878B\u4606\u4617\u88AE\u88FF\u8924\u8947\u8991\uD85E\uDD67\u8A29\u8A38\u8A94\u8AB4\u8C51\u8CD4\u8CF2\u8D1C\u4798\u585F\u8DC3\u47ED\u4EEE\u8E3A\u55D8\u5754\u8E71\u55F5\u8EB0\u4837\u8ECE\u8EE2\u8EE4\u8EED\u8EF2\u8FB7\u8FC1\u8FCA\u8FCC\u9033\u99C4\u48AD\u98E0\u9213\u491E\u9228\u9258\u926B\u92B1\u92AE\u92BF\"],\n[\"9a40\",\"\u92E3\u92EB\u92F3\u92F4\u92FD\u9343\u9384\u93AD\u4945\u4951\u9EBF\u9417\u5301\u941D\u942D\u943E\u496A\u9454\u9479\u952D\u95A2\u49A7\u95F4\u9633\u49E5\u67A0\u4A24\u9740\u4A35\u97B2\u97C2\u5654\u4AE4\u60E8\u98B9\u4B19\u98F1\u5844\u990E\u9919\u51B4\u991C\u9937\u9942\u995D\u9962\u4B70\u99C5\u4B9D\u9A3C\u9B0F\u7A83\u9B69\u9B81\u9BDD\u9BF1\u9BF4\u4C6D\u9C20\u376F\uD846\uDFC2\u9D49\u9C3A\"],\n[\"9aa1\",\"\u9EFE\u5650\u9D93\u9DBD\u9DC0\u9DFC\u94F6\u8FB6\u9E7B\u9EAC\u9EB1\u9EBD\u9EC6\u94DC\u9EE2\u9EF1\u9EF8\u7AC8\u9F44\uD840\uDC94\uD840\uDEB7\uD840\uDFA0\u691A\u94C3\u59AC\uD841\uDCD7\u5840\u94C1\u37B9\uD841\uDDD5\uD841\uDE15\uD841\uDE76\uD845\uDEBA\u5757\u7173\uD842\uDEC2\uD842\uDECD\uD842\uDFBF\u546A\uD87E\uDC3B\uD842\uDFCB\u549E\uD842\uDFFB\uD843\uDC3B\uD843\uDC53\uD843\uDC65\uD843\uDC7C\u60E7\uD843\uDC8D\u567A\uD843\uDCB5\uD843\uDCDD\uD843\uDCED\uD843\uDD6F\uD843\uDDB2\uD843\uDDC8\u6955\u9C2F\u87A5\uD843\uDE04\uD843\uDE0E\uD843\uDED7\uD843\uDF90\uD843\uDF2D\uD843\uDE73\u5C20\uD843\uDFBC\u5E0B\uD844\uDC5C\uD844\uDC4F\uD844\uDC76\u671E\uD844\uDC7B\uD844\uDC88\uD844\uDC96\u3647\uD844\uDCBF\uD844\uDCD3\uD844\uDD2F\uD844\uDD3B\u5364\u84AD\uD844\uDEE3\uD844\uDF75\uD844\uDF36\u8B81\uD845\uDD77\uD845\uDE19\uD845\uDFC3\uD845\uDFC7\u4E78\u70BB\uD846\uDC2D\uD846\uDD6A\"],\n[\"9b40\",\"\uD846\uDE2D\uD846\uDE45\uD847\uDC2A\uD847\uDC70\uD847\uDCAC\uD847\uDEC8\u62C3\uD847\uDED5\uD847\uDF15\u7198\u6855\uD848\uDC45\u69E9\u36C8\uD848\uDE7C\uD848\uDFD7\uD848\uDFFA\uD849\uDF2A\uD84A\uDC71\uD84A\uDD4F\u82FD\uD84A\uDD67\uD84A\uDD93\uD84A\uDED5\u89A5\uD84A\uDEE8\u8FA0\uD84A\uDF0E\u97B8\uD84A\uDF3F\u9847\u9ABD\uD84B\uDC4C\"],\n[\"9b62\",\"\uD84B\uDC88\uD84B\uDCB7\uD856\uDFE8\uD84B\uDD08\uD84B\uDD12\uD84B\uDDB7\uD84B\uDD95\uD84B\uDE42\uD84B\uDF74\uD84B\uDFCC\uD84C\uDC33\uD84C\uDC66\uD84C\uDF1F\uD84C\uDFDE\u5FB1\u6648\u66BF\uD85E\uDE79\uD84D\uDD67\uD84D\uDDF3\u7201\uD852\uDDBA\u77D7\uD84D\uDE1A\uD84D\uDF16\u7E87\uD840\uDF46\u58B5\u670E\"],\n[\"9ba1\",\"\u6918\uD84E\uDEA7\uD85D\uDE57\uD857\uDFE2\uD84F\uDE11\uD84F\uDEB9\uD85D\uDDFE\uD848\uDC9A\u48D0\u4AB8\uD850\uDD19\uD862\uDE9A\uD850\uDEEE\uD850\uDF0D\uD850\uDC3B\uD850\uDF34\uD850\uDF96\uD852\uDE45\uD841\uDDCA\u51D2\uD841\uDE11\u599F\uD847\uDEA8\u3BBE\uD84F\uDCFF\uD851\uDC04\uD851\uDCD6\u5788\uD851\uDE74\u399B\uD851\uDF2F\uD861\uDDE8\uD866\uDDC9\u3762\uD848\uDDC3\u8B5E\uD862\uDF4E\u99D6\uD852\uDC12\uD852\uDCFB\uD852\uDE15\u7209\uD852\uDEC0\uD843\uDC78\u5965\uD853\uDEA5\uD853\uDF86\uD841\uDF79\u8EDA\uD854\uDC2C\u528F\u573F\u7171\uD854\uDE99\uD855\uDC19\uD84F\uDF4A\uD852\uDEA7\u55BC\uD855\uDC46\uD855\uDC6E\uD85A\uDF52\u91D4\u3473\uD855\uDD3F\uD85D\uDE32\uD855\uDD5E\u4718\uD855\uDD62\uD855\uDD66\uD855\uDFC7\uD852\uDD3F\uD856\uDC5D\u5066\u34FB\uD84C\uDFCC\u60DE\uD856\uDD03\u477C\uD862\uDD48\uD856\uDEAE\uD856\uDF89\uD857\uDC06\uD847\uDD90\u57A1\u7151\u6FB6\uD858\uDD02\uD85F\uDC12\u9056\uD858\uDDB2\uD853\uDF9A\u8B62\uD859\uDC02\uD859\uDC4A\"],\n[\"9c40\",\"\u5D5B\uD85A\uDFF7\u8F36\uD859\uDC84\uD846\uDD1C\u8AEA\uD852\uDDF6\uD859\uDC88\uD84F\uDFEF\uD859\uDD12\u4BC0\uD859\uDDBF\uD859\uDEB5\uD849\uDF1B\u9465\uD855\uDFE1\u6195\u5A27\uD87E\uDCCD\u4FBB\u56B9\uD851\uDD21\uD859\uDEFC\u4E6A\uD852\uDD34\u9656\u6D8F\uD85B\uDCBD\u3618\u8977\uD859\uDF99\uD85A\uDC6E\uD859\uDC11\uD85A\uDC5E\u71DF\uD85A\uDCC7\u7B42\uD864\uDCC0\uD842\uDE11\uD85A\uDD26\u9104\uD85A\uDD39\u7A45\u9DF0\uD85A\uDDFA\u9A26\uD85A\uDE2D\u365F\uD859\uDC69\uD840\uDC21\u7983\uD85A\uDE34\uD85A\uDF5B\u5D2C\uD84D\uDD19\u83CF\uD85A\uDF9D\u46D0\uD85B\uDCA4\u753B\u8865\uD85B\uDDAE\u58B6\"],\n[\"9ca1\",\"\u371C\uD849\uDD8D\uD85C\uDC4B\uD85C\uDDCD\u3C54\uD85C\uDE80\uD85C\uDE85\u9281\uD848\uDD7A\uD85C\uDE8B\u9330\uD85C\uDEE6\uD852\uDDD0\u6C39\u949F\uD85D\uDC50\uD843\uDEF8\u8827\u88F5\uD84A\uDD26\uD861\uDC73\uD845\uDFB1\u6EB8\uD852\uDE2A\uD846\uDC20\u39A4\u36B9\u5C10\u79E3\u453F\u66B6\uD867\uDCAD\uD866\uDCA4\u8943\uD85D\uDFCC\uD85E\uDC58\u56D6\u40DF\uD845\uDE0A\u39A1\uD84D\uDF2F\uD860\uDCE8\uD844\uDFC5\u71AD\u8366\uD85E\uDDDD\uD864\uDDA8\u5A67\u4CB7\uD85C\uDCAF\uD862\uDDAB\uD85E\uDDFD\uD85E\uDE0A\uD85E\uDF0B\uD85F\uDD66\uD850\uDD7A\u7B43\u797E\uD860\uDC09\u6FB5\uD868\uDEDF\u6A03\uD860\uDF18\u53A2\uD85B\uDE07\u93BF\u6836\u975D\uD860\uDD6F\uD860\uDC23\uD85A\uDDB5\uD844\uDFED\uD84C\uDE2F\uD860\uDC48\u5D85\uD863\uDC30\uD860\uDC83\u5715\u9823\uD862\uDD49\u5DAB\uD852\uDD88\u65BE\u69D5\u53D2\uD852\uDEA5\uD84F\uDF81\u3C11\u6736\uD860\uDC90\uD860\uDCF4\uD860\uDD2E\uD847\uDFA1\uD860\uDD4F\"],\n[\"9d40\",\"\uD860\uDD89\uD860\uDDAF\uD860\uDE1A\uD860\uDF06\uD860\uDF2F\uD860\uDF8A\u35CA\uD861\uDC68\uD861\uDEAA\u48FA\u63E6\uD862\uDD56\u7808\u9255\uD862\uDDB8\u43F2\uD862\uDDE7\u43DF\uD862\uDDE8\uD862\uDF46\uD862\uDFD4\u59F8\uD863\uDC09\u8F0B\uD863\uDFC5\uD864\uDCEC\u7B51\uD864\uDD10\uD864\uDD3C\u3DF7\uD864\uDD5E\uD852\uDECA\u8FD0\u728F\u568B\uD865\uDCE7\uD865\uDDE9\uD865\uDDB0\uD865\uDDB8\uD865\uDF32\uD866\uDCD1\uD866\uDD49\uD866\uDD6A\uD866\uDDC3\uD866\uDE28\uD866\uDF0E\uD867\uDD5A\uD867\uDD9B\u7E9F\uD867\uDEF8\uD867\uDF23\u4CA4\u9547\uD868\uDE93\u71A2\uD868\uDEFF\u4D91\u9012\uD869\uDDCB\u4D9C\uD843\uDC9C\u8FBE\u55C1\"],\n[\"9da1\",\"\u8FBA\uD849\uDCB0\u8FB9\uD852\uDE93\u4509\u7E7F\u6F56\u6AB1\u4EEA\u34E4\uD862\uDF2C\uD85E\uDC9D\u373A\u8E80\uD845\uDFF5\uD860\uDC24\uD862\uDF6C\uD862\uDF99\uD85E\uDE3E\uD859\uDEAF\u3DEB\uD85D\uDE55\uD84F\uDCB7\uD855\uDE35\uD856\uDD56\u4E9A\uD857\uDE81\uD858\uDE58\u56BF\uD843\uDE6D\u8E0E\u5B6D\uD84F\uDE88\uD853\uDC9E\u63DE\u62D0\uD845\uDFF6\uD846\uDC7B\u6530\u562D\uD857\uDC4A\u541A\uD854\uDF11\u3DC6\uD867\uDD98\u4C7D\u5622\u561E\u7F49\uD857\uDED8\u5975\uD84F\uDD40\u8770\u4E1C\uD843\uDFEA\uD843\uDD49\uD84D\uDEBA\u8117\u9D5E\u8D18\u763B\u9C45\u764E\u77B9\u9345\u5432\u8148\u82F7\u5625\u8132\u8418\u80BD\u55EA\u7962\u5643\u5416\uD843\uDE9D\u35CE\u5605\u55F1\u66F1\uD860\uDEE2\u362D\u7534\u55F0\u55BA\u5497\u5572\uD843\uDC41\uD843\uDC96\u5ED0\uD854\uDD48\uD843\uDE76\uD84B\uDC62\"],\n[\"9e40\",\"\uD843\uDEA2\u9EAB\u7D5A\u55DE\uD844\uDC75\u629D\u976D\u5494\u8CCD\u71F6\u9176\u63FC\u63B9\u63FE\u5569\uD84A\uDF43\u9C72\uD84B\uDEB3\u519A\u34DF\uD843\uDDA7\u51A7\u544D\u551E\u5513\u7666\u8E2D\uD85A\uDC8A\u75B1\u80B6\u8804\u8786\u88C7\u81B6\u841C\uD844\uDCC1\u44EC\u7304\uD851\uDF06\u5B90\u830B\uD85A\uDC93\u567B\uD849\uDEF4\uD85F\uDD2F\uD850\uDDA3\uD85F\uDD73\uD85B\uDED0\uD85C\uDEB6\u9170\uD844\uDDD9\u9208\uD84F\uDCFC\uD869\uDEA9\uD843\uDEAC\uD843\uDEF9\u7266\uD847\uDCA2\u474E\uD853\uDFC2\uD85F\uDFF9\uD843\uDFEB\u40FA\"],\n[\"9ea1\",\"\u9C5D\u651F\uD84B\uDDA0\u48F3\uD851\uDFE0\uD867\uDD7C\uD843\uDFEC\uD843\uDE0A\u6062\uD85D\uDDA3\uD843\uDFED\"],\n[\"9ead\",\"\uD858\uDC48\uD844\uDD87\u71A3\u7E8E\u9D50\u4E1A\u4E04\u3577\u5B0D\u6CB2\u5367\u36AC\u39DC\u537D\u36A5\uD851\uDE18\u589A\uD852\uDF6E\u822D\u544B\u57AA\uD856\uDE95\uD842\uDD79\"],\n[\"9ec5\",\"\u3A52\uD849\uDC65\u7374\uD867\uDEAC\u4D09\u9BED\uD84F\uDCFE\uD867\uDF30\u4C5B\uD853\uDFA9\uD865\uDD9E\uD867\uDFDE\u845C\uD84F\uDDB6\uD85C\uDEB2\uD859\uDFB3\uD84D\uDF20\u632E\u7D25\uD84F\uDEF7\uD84F\uDE2C\u3A2A\u9008\u52CC\u3E74\u367A\u45E9\uD841\uDC8E\u7640\u5AF0\uD843\uDEB6\u787A\uD85F\uDF2E\u58A7\u40BF\u567C\u9B8B\u5D74\u7654\uD869\uDC34\u9E85\u4CE1\u75F9\u37FB\u6119\uD84C\uDCDA\uD850\uDFF2\"],\n[\"9ef5\",\"\u565D\uD844\uDEA9\u57A7\uD852\uDD63\uD867\uDE06\u5234\uD85C\uDCAE\u35AD\u6C4A\u9D7C\"],\n[\"9f40\",\"\u7C56\u9B39\u57DE\uD845\uDF6C\u5C53\u64D3\uD865\uDCD0\uD858\uDF35\uD85C\uDD64\u86AD\uD843\uDD28\uD85B\uDD22\uD852\uDEE2\uD843\uDD71\"],\n[\"9f4f\",\"\u51FE\uD847\uDF0F\u5D8E\u9703\uD847\uDDD1\u9E81\u904C\u7B1F\u9B02\u5CD1\u7BA3\u6268\u6335\u9AFF\u7BCF\u9B2A\u7C7E\u9B2E\u7C42\u7C86\u9C15\u7BFC\u9B09\u9F17\u9C1B\uD852\uDD3E\u9F5A\u5573\u5BC3\u4FFD\u9E98\u4FF2\u5260\u3E06\u52D1\u5767\u5056\u59B7\u5E12\u97C8\u9DAB\u8F5C\u5469\u97B4\u9940\u97BA\u532C\u6130\"],\n[\"9fa1\",\"\u692C\u53DA\u9C0A\u9D02\u4C3B\u9641\u6980\u50A6\u7546\uD845\uDF6D\u99DA\u5273\"],\n[\"9fae\",\"\u9159\u9681\u915C\"],\n[\"9fb2\",\"\u9151\uD863\uDE97\u637F\uD85B\uDD23\u6ACA\u5611\u918E\u757A\u6285\uD840\uDFFC\u734F\u7C70\uD857\uDC21\uD84F\uDCFD\"],\n[\"9fc1\",\"\uD852\uDD19\u76D6\u9B9D\u4E2A\uD843\uDCD4\u83BE\u8842\"],\n[\"9fc9\",\"\u5C4A\u69C0\u50ED\u577A\u521F\u5DF5\u4ECE\u6C31\uD840\uDDF2\u4F39\u549C\u54DA\u529A\u8D82\u35FE\u5F0C\u35F3\"],\n[\"9fdb\",\"\u6B52\u917C\u9FA5\u9B97\u982E\u98B4\u9ABA\u9EA8\u9E84\u717A\u7B14\"],\n[\"9fe7\",\"\u6BFA\u8818\u7F78\"],\n[\"9feb\",\"\u5620\uD869\uDE4A\u8E77\u9F53\"],\n[\"9ff0\",\"\u8DD4\u8E4F\u9E1C\u8E01\u6282\uD860\uDF7D\u8E28\u8E75\u7AD3\uD852\uDE77\u7A3E\u78D8\u6CEA\u8A67\u7607\"],\n[\"a040\",\"\uD862\uDE5A\u9F26\u6CCE\u87D6\u75C3\uD868\uDEB2\u7853\uD87E\uDC40\u8D0C\u72E2\u7371\u8B2D\u7302\u74F1\u8CEB\uD852\uDEBB\u862F\u5FBA\u88A0\u44B7\"],\n[\"a055\",\"\uD846\uDC3B\uD85B\uDE05\"],\n[\"a058\",\"\u8A7E\uD849\uDD1B\"],\n[\"a05b\",\"\u60FD\u7667\u9AD7\u9D44\u936E\u9B8F\u87F5\"],\n[\"a063\",\"\u880F\u8CF7\u732C\u9721\u9BB0\u35D6\u72B2\u4C07\u7C51\u994A\uD858\uDD59\u6159\u4C04\u9E96\u617D\"],\n[\"a073\",\"\u575F\u616F\u62A6\u6239\u62CE\u3A5C\u61E2\u53AA\uD84C\uDFF5\u6364\u6802\u35D2\"],\n[\"a0a1\",\"\u5D57\uD862\uDFC2\u8FDA\uD863\uDE39\"],\n[\"a0a6\",\"\u50D9\uD847\uDD46\u7906\u5332\u9638\uD843\uDF3B\u4065\"],\n[\"a0ae\",\"\u77FE\"],\n[\"a0b0\",\"\u7CC2\uD857\uDF1A\u7CDA\u7A2D\u8066\u8063\u7D4D\u7505\u74F2\u8994\u821A\u670C\u8062\uD85D\uDC86\u805B\u74F0\u8103\u7724\u8989\uD859\uDFCC\u7553\uD85B\uDED1\u87A9\u87CE\u81C8\u878C\u8A49\u8CAD\u8B43\u772B\u74F8\u84DA\u3635\u69B2\u8DA6\"],\n[\"a0d4\",\"\u89A9\u7468\u6DB9\u87C1\uD850\uDC11\u74E7\u3DDB\u7176\u60A4\u619C\u3CD1\u7162\u6077\"],\n[\"a0e2\",\"\u7F71\uD862\uDF2D\u7250\u60E9\u4B7E\u5220\u3C18\uD84F\uDCC7\uD857\uDED7\uD85D\uDE56\uD855\uDD31\uD846\uDD44\uD844\uDEFE\uD866\uDD03\uD85B\uDDDC\uD85C\uDCAD\u5CC1\uD858\uDDAD\uD862\uDE0F\uD84D\uDE77\uD840\uDCEE\uD85A\uDC46\uD853\uDF0E\u4562\u5B1F\uD858\uDF4C\u9F50\u9EA6\uD858\uDE6B\"],\n[\"a3c0\",\"\u2400\",31,\"\u2421\"],\n[\"c6a1\",\"\u2460\",9,\"\u2474\",9,\"\u2170\",9,\"\u4E36\u4E3F\u4E85\u4EA0\u5182\u5196\u51AB\u52F9\u5338\u5369\u53B6\u590A\u5B80\u5DDB\u2F33\u5E7F\u5EF4\u5F50\u5F61\u6534\u65E0\u7592\u7676\u8FB5\u96B6\u00A8\u02C6\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\uFF3B\uFF3D\u273D\u3041\",23],\n[\"c740\",\"\u3059\",58,\"\u30A1\u30A2\u30A3\u30A4\"],\n[\"c7a1\",\"\u30A5\",81,\"\u0410\",5,\"\u0401\u0416\",4],\n[\"c840\",\"\u041B\",26,\"\u0451\u0436\",25,\"\u21E7\u21B8\u21B9\u31CF\uD840\uDCCC\u4E5A\uD840\uDC8A\u5202\u4491\"],\n[\"c8a1\",\"\u9FB0\u5188\u9FB1\uD85D\uDE07\"],\n[\"c8cd\",\"\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u309B\u309C\u2E80\u2E84\u2E86\u2E87\u2E88\u2E8A\u2E8C\u2E8D\u2E95\u2E9C\u2E9D\u2EA5\u2EA7\u2EAA\u2EAC\u2EAE\u2EB6\u2EBC\u2EBE\u2EC6\u2ECA\u2ECC\u2ECD\u2ECF\u2ED6\u2ED7\u2EDE\u2EE3\"],\n[\"c8f5\",\"\u0283\u0250\u025B\u0254\u0275\u0153\u00F8\u014B\u028A\u026A\"],\n[\"f9fe\",\"\uFFED\"],\n[\"fa40\",\"\uD841\uDD47\u92DB\uD841\uDDDF\uD84F\uDFC5\u854C\u42B5\u73EF\u51B5\u3649\uD852\uDD42\uD862\uDDE4\u9344\uD846\uDDDB\u82EE\uD84F\uDCC8\u783C\u6744\u62DF\uD852\uDD33\uD862\uDDAA\uD840\uDEA0\uD85A\uDFB3\uD844\uDF05\u4FAB\uD849\uDCED\u5008\uD85B\uDD29\uD85E\uDE84\uD84D\uDE00\uD852\uDEB1\uD849\uDD13\u5029\uD840\uDF7E\u5FA4\uD840\uDF80\uD840\uDF47\u6EDB\uD841\uDC1F\u507D\u5101\u347A\u510E\u986C\u3743\u8416\uD852\uDDA4\uD841\uDC87\u5160\uD84C\uDFB4\u516A\uD842\uDFFF\uD848\uDCFC\uD840\uDEE5\uD849\uDD30\uD841\uDD8E\uD84C\uDE33\uD846\uDD83\u5B82\u877D\uD841\uDDB3\uD84F\uDC99\u51B2\u51B8\"],\n[\"faa1\",\"\u9D34\u51C9\u51CF\u51D1\u3CDC\u51D3\uD852\uDEA6\u51B3\u51E2\u5342\u51ED\u83CD\u693E\uD84D\uDF2D\u5F7B\u520B\u5226\u523C\u52B5\u5257\u5294\u52B9\u52C5\u7C15\u8542\u52E0\u860D\uD85A\uDF13\u5305\uD862\uDEDE\u5549\u6ED9\uD84F\uDF80\uD842\uDD54\uD84F\uDFEC\u5333\u5344\uD842\uDFE2\u6CCB\uD845\uDF26\u681B\u73D5\u604A\u3EAA\u38CC\uD845\uDEE8\u71DD\u44A2\u536D\u5374\uD861\uDEAB\u537E\u537F\uD845\uDD96\uD845\uDE13\u77E6\u5393\uD862\uDE9B\u53A0\u53AB\u53AE\u73A7\uD855\uDF72\u3F59\u739C\u53C1\u53C5\u6C49\u4E49\u57FE\u53D9\u3AAB\uD842\uDF8F\u53E0\uD84F\uDFEB\uD84B\uDDA3\u53F6\uD843\uDC77\u5413\u7079\u552B\u6657\u6D5B\u546D\uD85A\uDF53\uD843\uDD74\u555D\u548F\u54A4\u47A6\uD845\uDF0D\uD843\uDEDD\u3DB4\uD843\uDD4D\"],\n[\"fb40\",\"\uD862\uDDBC\uD849\uDE98\u5547\u4CED\u542F\u7417\u5586\u55A9\u5605\uD846\uDCD7\uD850\uDC3A\u4552\uD851\uDC35\u66B3\uD844\uDCB4\u5637\u66CD\uD84C\uDE8A\u66A4\u66AD\u564D\u564F\u78F1\u56F1\u9787\u53FE\u5700\u56EF\u56ED\uD862\uDF66\u3623\uD844\uDE4F\u5746\uD850\uDDA5\u6C6E\u708B\u5742\u36B1\uD85B\uDC7E\u57E6\uD845\uDC16\u5803\uD845\uDC54\uD850\uDF63\u5826\uD852\uDFF5\u585C\u58AA\u3561\u58E0\u58DC\uD844\uDE3C\u58FB\u5BFF\u5743\uD868\uDD50\uD850\uDE78\u93D3\u35A1\u591F\u68A6\u36C3\u6E59\"],\n[\"fba1\",\"\uD845\uDE3E\u5A24\u5553\uD845\uDE92\u8505\u59C9\uD843\uDD4E\uD85B\uDC81\uD85B\uDD2A\uD845\uDFDC\u59D9\uD845\uDFFB\uD845\uDFB2\uD85B\uDDA6\u6D71\uD846\uDC28\uD845\uDED5\u59F9\uD85B\uDE45\u5AAB\u5A63\u36E6\uD852\uDDA9\u5A77\u3708\u5A96\u7465\u5AD3\uD85B\uDFA1\uD849\uDD54\u3D85\uD846\uDD11\u3732\uD845\uDEB8\u5E83\u52D0\u5B76\u6588\u5B7C\uD85E\uDE0E\u4004\u485D\uD840\uDE04\u5BD5\u6160\uD846\uDE34\uD856\uDDCC\uD841\uDDA5\u5BF3\u5B9D\u4D10\u5C05\uD846\uDF44\u5C13\u73CE\u5C14\uD847\uDCA5\uD85A\uDF28\u5C49\u48DD\u5C85\u5CE9\u5CEF\u5D8B\uD847\uDDF9\uD847\uDE37\u5D10\u5D18\u5D46\uD847\uDEA4\u5CBA\u5DD7\u82FC\u382D\uD852\uDD01\uD848\uDC49\uD848\uDD73\u8287\u3836\u3BC2\u5E2E\u6A8A\u5E75\u5E7A\uD851\uDCBC\uD843\uDCD3\u53A6\u4EB7\u5ED0\u53A8\uD845\uDF71\u5E09\u5EF4\uD861\uDC82\"],\n[\"fc40\",\"\u5EF9\u5EFB\u38A0\u5EFC\u683E\u941B\u5F0D\uD840\uDDC1\uD87E\uDC94\u3ADE\u48AE\uD844\uDF3A\u5F3A\uD85A\uDC88\uD848\uDFD0\u5F58\uD849\uDC71\u5F63\u97BD\uD85B\uDE6E\u5F72\u9340\uD862\uDE36\u5FA7\u5DB6\u3D5F\uD854\uDE50\uD847\uDF6A\uD85C\uDCF8\uD849\uDE68\u91D6\uD840\uDE9E\uD862\uDE29\u6031\u6685\uD846\uDC77\u3963\u3DC7\u3639\u5790\uD849\uDFB4\u7971\u3E40\u609E\u60A4\u60B3\uD852\uDD82\uD852\uDD8F\uD85E\uDE53\u74A4\u50E1\u5AA0\u6164\u8424\u6142\uD87E\uDCA6\uD85B\uDED2\u6181\u51F4\uD841\uDE56\u6187\u5BAA\uD84F\uDFB7\"],\n[\"fca1\",\"\uD84A\uDC5F\u61D3\uD862\uDF9D\uD866\uDD5D\u61D0\u3932\uD84A\uDD80\uD84A\uDCC1\u6023\u615C\u651E\u638B\uD840\uDD18\u62C5\uD845\uDF70\u62D5\uD84B\uDE0D\u636C\uD852\uDDDF\u3A17\u6438\u63F8\uD844\uDF8E\uD845\uDFFC\u6490\u6F8A\uD84B\uDE36\u9814\uD850\uDC8C\uD855\uDF1D\u64E1\u64E5\u947B\u3A66\u643A\u3A57\u654D\u6F16\uD852\uDE28\uD852\uDE23\u6585\u656D\u655F\uD84C\uDC7E\u65B5\uD852\uDD40\u4B37\u65D1\u40D8\uD846\uDC29\u65E0\u65E3\u5FDF\uD84D\uDC00\u6618\uD84C\uDDF7\uD84C\uDDF8\u6644\uD84C\uDDA4\uD84C\uDDA5\u664B\uD843\uDE75\u6667\uD854\uDDE6\u6673\u6674\uD847\uDE3D\uD84C\uDE31\uD861\uDDF4\uD84C\uDDC8\uD854\uDF13\u77C5\uD84A\uDCF7\u99A4\u6702\uD850\uDF9C\uD852\uDE21\u3B2B\u69FA\uD84D\uDFC2\u675E\u6767\u6762\uD850\uDDCD\uD864\uDCED\u67D7\u44E9\u6822\u6E50\u923C\u6801\uD84C\uDFE6\uD85B\uDDA0\u685D\"],\n[\"fd40\",\"\uD84D\uDC6F\u69E1\u6A0B\uD862\uDEDF\u6973\u68C3\uD84D\uDDCD\u6901\u6900\u3D32\u3A01\uD84D\uDE3C\u3B80\u67AC\u6961\uD862\uDE4A\u42FC\u6936\u6998\u3BA1\uD840\uDFC9\u8363\u5090\u69F9\uD84D\uDE59\uD848\uDD2A\u6A45\uD84D\uDF03\u6A9D\u3BF3\u67B1\u6AC8\uD864\uDD9C\u3C0D\u6B1D\uD842\uDD23\u60DE\u6B35\u6B74\uD849\uDFCD\u6EB5\uD84E\uDEDB\uD840\uDFB5\uD846\uDD58\u3740\u5421\uD84E\uDF5A\u6BE1\uD84F\uDEFC\u6BDC\u6C37\uD849\uDC8B\uD852\uDCF1\uD85A\uDF51\u6C5A\u8226\u6C79\uD84F\uDDBC\u44C5\uD84F\uDDBD\uD850\uDDA4\uD852\uDD0C\uD852\uDD00\"],\n[\"fda1\",\"\uD84F\uDCC9\u36E5\u3CEB\uD843\uDD32\u9B83\uD84C\uDDF9\uD849\uDC91\u7F8F\u6837\uD85B\uDD25\uD85B\uDDA1\uD85B\uDDEB\u6D96\u6D5C\u6E7C\u6F04\uD852\uDD7F\uD850\uDC85\uD85B\uDE72\u8533\uD85B\uDF74\u51C7\u6C9C\u6E1D\u842E\uD862\uDF21\u6E2F\uD84F\uDE2F\u7453\uD84F\uDF82\u79CC\u6E4F\u5A91\uD84C\uDC4B\u6FF8\u370D\u6F9D\uD84F\uDE30\u6EFA\uD845\uDC97\uD850\uDC3D\u4555\u93F0\u6F44\u6F5C\u3D4E\u6F74\uD864\uDD70\u3D3B\u6F9F\uD850\uDD44\u6FD3\uD850\uDC91\uD850\uDD55\uD850\uDC39\uD84F\uDFF0\uD84F\uDFB4\uD850\uDD3F\u51DF\uD850\uDD56\uD850\uDD57\uD850\uDD40\uD858\uDDDD\u704B\u707E\u70A7\u7081\u70CC\u70D5\u70D6\u70DF\u4104\u3DE8\u71B4\u7196\uD850\uDE77\u712B\u7145\u5A88\u714A\u716E\u5C9C\uD850\uDF65\u714F\u9362\uD850\uDEC1\u712C\uD851\uDC5A\uD852\uDE27\uD852\uDE22\u71BA\uD862\uDFE8\u70BD\u720E\"],\n[\"fe40\",\"\u9442\u7215\u5911\u9443\u7224\u9341\uD855\uDE05\u722E\u7240\uD852\uDD74\u68BD\u7255\u7257\u3E55\uD84C\uDC44\u680D\u6F3D\u7282\u732A\u732B\uD852\uDC23\uD862\uDC2B\u48ED\uD862\uDC04\u7328\u732E\u73CF\u73AA\uD843\uDC3A\uD85A\uDE2E\u73C9\u7449\uD850\uDDE2\uD845\uDEE7\uD852\uDE24\u6623\u36C5\uD852\uDDB7\uD852\uDD8D\uD852\uDDFB\u73F7\u7415\u6903\uD852\uDE26\u7439\uD841\uDDC3\u3ED7\u745C\uD84A\uDCAD\u7460\uD863\uDEB2\u7447\u73E4\u7476\u83B9\u746C\u3730\u7474\u93F1\u6A2C\u7482\u4953\uD852\uDE8C\"],\n[\"fea1\",\"\uD850\uDD5F\uD852\uDE79\uD862\uDF8F\u5B46\uD863\uDC03\uD846\uDC9E\u74C8\uD846\uDD88\u750E\u74E9\u751E\uD863\uDED9\uD846\uDE4B\u5BD7\uD863\uDEAC\u9385\u754D\u754A\u7567\u756E\uD853\uDF82\u3F04\uD853\uDD13\u758E\u745D\u759E\u75B4\u7602\u762C\u7651\u764F\u766F\u7676\uD858\uDFF5\u7690\u81EF\u37F8\uD85A\uDD11\uD85A\uDD0E\u76A1\u76A5\u76B7\u76CC\uD85B\uDF9F\u8462\uD854\uDC9D\uD854\uDD7D\uD847\uDE1C\u771E\u7726\u7740\u64AF\uD854\uDE20\u7758\uD84C\uDEAC\u77AF\uD862\uDD64\uD862\uDD68\uD845\uDEC1\u77F4\u7809\uD844\uDF76\uD852\uDE12\u68CA\u78AF\u78C7\u78D3\u96A5\u792E\uD855\uDDE0\u78D7\u7934\u78B1\uD85D\uDE0C\u8FB8\u8884\uD862\uDF2B\uD858\uDC83\uD849\uDE1C\u7986\u8900\u6902\u7980\uD856\uDC57\u799D\uD85E\uDF39\u793C\u79A9\u6E2A\uD85C\uDD26\u3EA8\u79C6\uD864\uDD0D\u79D4\"]\n]\n", "\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n    \n    // == Japanese/ShiftJIS ====================================================\n    // All japanese encodings are based on JIS X set of standards:\n    // JIS X 0201 - Single-byte encoding of ASCII + \u00A5 + Kana chars at 0xA1-0xDF.\n    // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n    //              Has several variations in 1978, 1983, 1990 and 1997.\n    // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n    // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n    //              2 planes, first is superset of 0208, second - revised 0212.\n    //              Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n    // Byte encodings are:\n    //  * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n    //               encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n    //               Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n    //  * EUC-JP:    Up to 3 bytes per character. Used mostly on *nixes.\n    //               0x00-0x7F       - lower part of 0201\n    //               0x8E, 0xA1-0xDF - upper part of 0201\n    //               (0xA1-0xFE)x2   - 0208 plane (94x94).\n    //               0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n    //  * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n    //               Used as-is in ISO2022 family.\n    //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n    //                0201-1976 Roman, 0208-1978, 0208-1983.\n    //  * ISO2022-JP-1: Adds esc seq for 0212-1990.\n    //  * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n    //  * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n    //  * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n    //\n    // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n    //\n    // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n    'shiftjis': {\n        type: '_dbcs',\n        table: function() { return require('./tables/shiftjis.json') },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n        encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n    },\n    'csshiftjis': 'shiftjis',\n    'mskanji': 'shiftjis',\n    'sjis': 'shiftjis',\n    'windows31j': 'shiftjis',\n    'ms31j': 'shiftjis',\n    'xsjis': 'shiftjis',\n    'windows932': 'shiftjis',\n    'ms932': 'shiftjis',\n    '932': 'shiftjis',\n    'cp932': 'shiftjis',\n\n    'eucjp': {\n        type: '_dbcs',\n        table: function() { return require('./tables/eucjp.json') },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n    },\n\n    // TODO: KDDI extension to Shift_JIS\n    // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n    // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n    // == Chinese/GBK ==========================================================\n    // http://en.wikipedia.org/wiki/GBK\n    // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n    // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n    'gb2312': 'cp936',\n    'gb231280': 'cp936',\n    'gb23121980': 'cp936',\n    'csgb2312': 'cp936',\n    'csiso58gb231280': 'cp936',\n    'euccn': 'cp936',\n\n    // Microsoft's CP936 is a subset and approximation of GBK.\n    'windows936': 'cp936',\n    'ms936': 'cp936',\n    '936': 'cp936',\n    'cp936': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json') },\n    },\n\n    // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n    'gbk': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n    },\n    'xgbk': 'gbk',\n    'isoir58': 'gbk',\n\n    // GB18030 is an algorithmic extension of GBK.\n    // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n    // http://icu-project.org/docs/papers/gb18030.html\n    // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n    // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n    'gb18030': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n        gb18030: function() { return require('./tables/gb18030-ranges.json') },\n        encodeSkipVals: [0x80],\n        encodeAdd: {'\u20AC': 0xA2E3},\n    },\n\n    'chinese': 'gb18030',\n\n\n    // == Korean ===============================================================\n    // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n    'windows949': 'cp949',\n    'ms949': 'cp949',\n    '949': 'cp949',\n    'cp949': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp949.json') },\n    },\n\n    'cseuckr': 'cp949',\n    'csksc56011987': 'cp949',\n    'euckr': 'cp949',\n    'isoir149': 'cp949',\n    'korean': 'cp949',\n    'ksc56011987': 'cp949',\n    'ksc56011989': 'cp949',\n    'ksc5601': 'cp949',\n\n\n    // == Big5/Taiwan/Hong Kong ================================================\n    // There are lots of tables for Big5 and cp950. Please see the following links for history:\n    // http://moztw.org/docs/big5/  http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n    // Variations, in roughly number of defined chars:\n    //  * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n    //  * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n    //  * Big5-2003 (Taiwan standard) almost superset of cp950.\n    //  * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n    //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n    //    many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n    //    Plus, it has 4 combining sequences.\n    //    Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n    //    because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n    //    Implementations are not consistent within browsers; sometimes labeled as just big5.\n    //    MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n    //    Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n    //    In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n    //    Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n    //                   http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n    // \n    // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n    // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n    'windows950': 'cp950',\n    'ms950': 'cp950',\n    '950': 'cp950',\n    'cp950': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp950.json') },\n    },\n\n    // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n    'big5': 'big5hkscs',\n    'big5hkscs': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) },\n        encodeSkipVals: [\n            // Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of\n            // https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU.\n            // But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter.\n            0x8e69, 0x8e6f, 0x8e7e, 0x8eab, 0x8eb4, 0x8ecd, 0x8ed0, 0x8f57, 0x8f69, 0x8f6e, 0x8fcb, 0x8ffe,\n            0x906d, 0x907a, 0x90c4, 0x90dc, 0x90f1, 0x91bf, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92d1, 0x9447, 0x94ca,\n            0x95d9, 0x96fc, 0x9975, 0x9b76, 0x9b78, 0x9b7b, 0x9bc6, 0x9bde, 0x9bec, 0x9bf6, 0x9c42, 0x9c53, 0x9c62,\n            0x9c68, 0x9c6b, 0x9c77, 0x9cbc, 0x9cbd, 0x9cd0, 0x9d57, 0x9d5a, 0x9dc4, 0x9def, 0x9dfb, 0x9ea9, 0x9eef,\n            0x9efd, 0x9f60, 0x9fcb, 0xa077, 0xa0dc, 0xa0df, 0x8fcc, 0x92c8, 0x9644, 0x96ed,\n\n            // Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345\n            0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa2cc, 0xa2ce,\n        ],\n    },\n\n    'cnbig5': 'big5hkscs',\n    'csbig5': 'big5hkscs',\n    'xxbig5': 'big5hkscs',\n};\n", "\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n    require(\"./internal\"),\n    require(\"./utf32\"),\n    require(\"./utf16\"),\n    require(\"./utf7\"),\n    require(\"./sbcs-codec\"),\n    require(\"./sbcs-data\"),\n    require(\"./sbcs-data-generated\"),\n    require(\"./dbcs-codec\"),\n    require(\"./dbcs-data\"),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it.\nfor (var i = 0; i < modules.length; i++) {\n    var module = modules[i];\n    for (var enc in module)\n        if (Object.prototype.hasOwnProperty.call(module, enc))\n            exports[enc] = module[enc];\n}\n", "\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments), \n// we opt to dependency-inject it instead of creating a hard dependency.\nmodule.exports = function(stream_module) {\n    var Transform = stream_module.Transform;\n\n    // == Encoder stream =======================================================\n\n    function IconvLiteEncoderStream(conv, options) {\n        this.conv = conv;\n        options = options || {};\n        options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n        Transform.call(this, options);\n    }\n\n    IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n        constructor: { value: IconvLiteEncoderStream }\n    });\n\n    IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n        if (typeof chunk != 'string')\n            return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n        try {\n            var res = this.conv.write(chunk);\n            if (res && res.length) this.push(res);\n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteEncoderStream.prototype._flush = function(done) {\n        try {\n            var res = this.conv.end();\n            if (res && res.length) this.push(res);\n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteEncoderStream.prototype.collect = function(cb) {\n        var chunks = [];\n        this.on('error', cb);\n        this.on('data', function(chunk) { chunks.push(chunk); });\n        this.on('end', function() {\n            cb(null, Buffer.concat(chunks));\n        });\n        return this;\n    }\n\n\n    // == Decoder stream =======================================================\n\n    function IconvLiteDecoderStream(conv, options) {\n        this.conv = conv;\n        options = options || {};\n        options.encoding = this.encoding = 'utf8'; // We output strings.\n        Transform.call(this, options);\n    }\n\n    IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n        constructor: { value: IconvLiteDecoderStream }\n    });\n\n    IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n        if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array))\n            return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n        try {\n            var res = this.conv.write(chunk);\n            if (res && res.length) this.push(res, this.encoding);\n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteDecoderStream.prototype._flush = function(done) {\n        try {\n            var res = this.conv.end();\n            if (res && res.length) this.push(res, this.encoding);                \n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteDecoderStream.prototype.collect = function(cb) {\n        var res = '';\n        this.on('error', cb);\n        this.on('data', function(chunk) { res += chunk; });\n        this.on('end', function() {\n            cb(null, res);\n        });\n        return this;\n    }\n\n    return {\n        IconvLiteEncoderStream: IconvLiteEncoderStream,\n        IconvLiteDecoderStream: IconvLiteDecoderStream,\n    };\n};\n", "\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\nvar bomHandling = require(\"./bom-handling\"),\n    iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '\uFFFD';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n    str = \"\" + (str || \"\"); // Ensure string.\n\n    var encoder = iconv.getEncoder(encoding, options);\n\n    var res = encoder.write(str);\n    var trail = encoder.end();\n    \n    return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n    if (typeof buf === 'string') {\n        if (!iconv.skipDecodeWarning) {\n            console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n            iconv.skipDecodeWarning = true;\n        }\n\n        buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n    }\n\n    var decoder = iconv.getDecoder(encoding, options);\n\n    var res = decoder.write(buf);\n    var trail = decoder.end();\n\n    return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n    try {\n        iconv.getCodec(enc);\n        return true;\n    } catch (e) {\n        return false;\n    }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n    if (!iconv.encodings)\n        iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n    \n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    var enc = iconv._canonicalizeEncoding(encoding);\n\n    // Traverse iconv.encodings to find actual codec.\n    var codecOptions = {};\n    while (true) {\n        var codec = iconv._codecDataCache[enc];\n        if (codec)\n            return codec;\n\n        var codecDef = iconv.encodings[enc];\n\n        switch (typeof codecDef) {\n            case \"string\": // Direct alias to other encoding.\n                enc = codecDef;\n                break;\n\n            case \"object\": // Alias with options. Can be layered.\n                for (var key in codecDef)\n                    codecOptions[key] = codecDef[key];\n\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n                \n                enc = codecDef.type;\n                break;\n\n            case \"function\": // Codec itself.\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n\n                // The codec function must load all tables and return object with .encoder and .decoder methods.\n                // It'll be called only once (for each different options object).\n                codec = new codecDef(codecOptions, iconv);\n\n                iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n                return codec;\n\n            default:\n                throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n        }\n    }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        encoder = new codec.encoder(options, codec);\n\n    if (codec.bomAware && options && options.addBOM)\n        encoder = new bomHandling.PrependBOM(encoder, options);\n\n    return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        decoder = new codec.decoder(options, codec);\n\n    if (codec.bomAware && !(options && options.stripBOM === false))\n        decoder = new bomHandling.StripBOM(decoder, options);\n\n    return decoder;\n}\n\n// Streaming API\n// NOTE: Streaming API naturally depends on 'stream' module from Node.js. Unfortunately in browser environments this module can add\n// up to 100Kb to the output bundle. To avoid unnecessary code bloat, we don't enable Streaming API in browser by default.\n// If you would like to enable it explicitly, please add the following code to your app:\n// > iconv.enableStreamingAPI(require('stream'));\niconv.enableStreamingAPI = function enableStreamingAPI(stream_module) {\n    if (iconv.supportsStreams)\n        return;\n\n    // Dependency-inject stream module to create IconvLite stream classes.\n    var streams = require(\"./streams\")(stream_module);\n\n    // Not public API yet, but expose the stream classes.\n    iconv.IconvLiteEncoderStream = streams.IconvLiteEncoderStream;\n    iconv.IconvLiteDecoderStream = streams.IconvLiteDecoderStream;\n\n    // Streaming API.\n    iconv.encodeStream = function encodeStream(encoding, options) {\n        return new iconv.IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n    }\n\n    iconv.decodeStream = function decodeStream(encoding, options) {\n        return new iconv.IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n    }\n\n    iconv.supportsStreams = true;\n}\n\n// Enable Streaming API automatically if 'stream' module is available and non-empty (the majority of environments).\nvar stream_module;\ntry {\n    stream_module = require(\"stream\");\n} catch (e) {}\n\nif (stream_module && stream_module.Transform) {\n    iconv.enableStreamingAPI(stream_module);\n\n} else {\n    // In rare cases where 'stream' module is not available by default, throw a helpful exception.\n    iconv.encodeStream = iconv.decodeStream = function() {\n        throw new Error(\"iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.\");\n    };\n}\n\nif (\"\u0100\" != \"\\u0100\") {\n    console.error(\"iconv-lite warning: js files use non-utf8 encoding. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\n}\n", "[\n  \"UTF-8\",\n  \"IBM866\",\n  \"ISO-8859-2\",\n  \"ISO-8859-3\",\n  \"ISO-8859-4\",\n  \"ISO-8859-5\",\n  \"ISO-8859-6\",\n  \"ISO-8859-7\",\n  \"ISO-8859-8\",\n  \"ISO-8859-10\",\n  \"ISO-8859-13\",\n  \"ISO-8859-14\",\n  \"ISO-8859-15\",\n  \"ISO-8859-16\",\n  \"KOI8-R\",\n  \"KOI8-U\",\n  \"macintosh\",\n  \"windows-874\",\n  \"windows-1250\",\n  \"windows-1251\",\n  \"windows-1252\",\n  \"windows-1253\",\n  \"windows-1254\",\n  \"windows-1255\",\n  \"windows-1256\",\n  \"windows-1257\",\n  \"windows-1258\",\n  \"GBK\",\n  \"gb18030\",\n  \"Big5\",\n  \"EUC-JP\",\n  \"Shift_JIS\",\n  \"EUC-KR\",\n  \"UTF-16BE\",\n  \"UTF-16LE\",\n  \"x-user-defined\"\n]", "{\n  \"866\": \"IBM866\",\n  \"unicode-1-1-utf-8\": \"UTF-8\",\n  \"unicode11utf8\": \"UTF-8\",\n  \"unicode20utf8\": \"UTF-8\",\n  \"utf-8\": \"UTF-8\",\n  \"utf8\": \"UTF-8\",\n  \"x-unicode20utf8\": \"UTF-8\",\n  \"cp866\": \"IBM866\",\n  \"csibm866\": \"IBM866\",\n  \"ibm866\": \"IBM866\",\n  \"csisolatin2\": \"ISO-8859-2\",\n  \"iso-8859-2\": \"ISO-8859-2\",\n  \"iso-ir-101\": \"ISO-8859-2\",\n  \"iso8859-2\": \"ISO-8859-2\",\n  \"iso88592\": \"ISO-8859-2\",\n  \"iso_8859-2\": \"ISO-8859-2\",\n  \"iso_8859-2:1987\": \"ISO-8859-2\",\n  \"l2\": \"ISO-8859-2\",\n  \"latin2\": \"ISO-8859-2\",\n  \"csisolatin3\": \"ISO-8859-3\",\n  \"iso-8859-3\": \"ISO-8859-3\",\n  \"iso-ir-109\": \"ISO-8859-3\",\n  \"iso8859-3\": \"ISO-8859-3\",\n  \"iso88593\": \"ISO-8859-3\",\n  \"iso_8859-3\": \"ISO-8859-3\",\n  \"iso_8859-3:1988\": \"ISO-8859-3\",\n  \"l3\": \"ISO-8859-3\",\n  \"latin3\": \"ISO-8859-3\",\n  \"csisolatin4\": \"ISO-8859-4\",\n  \"iso-8859-4\": \"ISO-8859-4\",\n  \"iso-ir-110\": \"ISO-8859-4\",\n  \"iso8859-4\": \"ISO-8859-4\",\n  \"iso88594\": \"ISO-8859-4\",\n  \"iso_8859-4\": \"ISO-8859-4\",\n  \"iso_8859-4:1988\": \"ISO-8859-4\",\n  \"l4\": \"ISO-8859-4\",\n  \"latin4\": \"ISO-8859-4\",\n  \"csisolatincyrillic\": \"ISO-8859-5\",\n  \"cyrillic\": \"ISO-8859-5\",\n  \"iso-8859-5\": \"ISO-8859-5\",\n  \"iso-ir-144\": \"ISO-8859-5\",\n  \"iso8859-5\": \"ISO-8859-5\",\n  \"iso88595\": \"ISO-8859-5\",\n  \"iso_8859-5\": \"ISO-8859-5\",\n  \"iso_8859-5:1988\": \"ISO-8859-5\",\n  \"arabic\": \"ISO-8859-6\",\n  \"asmo-708\": \"ISO-8859-6\",\n  \"csiso88596e\": \"ISO-8859-6\",\n  \"csiso88596i\": \"ISO-8859-6\",\n  \"csisolatinarabic\": \"ISO-8859-6\",\n  \"ecma-114\": \"ISO-8859-6\",\n  \"iso-8859-6\": \"ISO-8859-6\",\n  \"iso-8859-6-e\": \"ISO-8859-6\",\n  \"iso-8859-6-i\": \"ISO-8859-6\",\n  \"iso-ir-127\": \"ISO-8859-6\",\n  \"iso8859-6\": \"ISO-8859-6\",\n  \"iso88596\": \"ISO-8859-6\",\n  \"iso_8859-6\": \"ISO-8859-6\",\n  \"iso_8859-6:1987\": \"ISO-8859-6\",\n  \"csisolatingreek\": \"ISO-8859-7\",\n  \"ecma-118\": \"ISO-8859-7\",\n  \"elot_928\": \"ISO-8859-7\",\n  \"greek\": \"ISO-8859-7\",\n  \"greek8\": \"ISO-8859-7\",\n  \"iso-8859-7\": \"ISO-8859-7\",\n  \"iso-ir-126\": \"ISO-8859-7\",\n  \"iso8859-7\": \"ISO-8859-7\",\n  \"iso88597\": \"ISO-8859-7\",\n  \"iso_8859-7\": \"ISO-8859-7\",\n  \"iso_8859-7:1987\": \"ISO-8859-7\",\n  \"sun_eu_greek\": \"ISO-8859-7\",\n  \"csiso88598e\": \"ISO-8859-8\",\n  \"csisolatinhebrew\": \"ISO-8859-8\",\n  \"hebrew\": \"ISO-8859-8\",\n  \"iso-8859-8\": \"ISO-8859-8\",\n  \"iso-8859-8-e\": \"ISO-8859-8\",\n  \"iso-ir-138\": \"ISO-8859-8\",\n  \"iso8859-8\": \"ISO-8859-8\",\n  \"iso88598\": \"ISO-8859-8\",\n  \"iso_8859-8\": \"ISO-8859-8\",\n  \"iso_8859-8:1988\": \"ISO-8859-8\",\n  \"visual\": \"ISO-8859-8\",\n  \"csisolatin6\": \"ISO-8859-10\",\n  \"iso-8859-10\": \"ISO-8859-10\",\n  \"iso-ir-157\": \"ISO-8859-10\",\n  \"iso8859-10\": \"ISO-8859-10\",\n  \"iso885910\": \"ISO-8859-10\",\n  \"l6\": \"ISO-8859-10\",\n  \"latin6\": \"ISO-8859-10\",\n  \"iso-8859-13\": \"ISO-8859-13\",\n  \"iso8859-13\": \"ISO-8859-13\",\n  \"iso885913\": \"ISO-8859-13\",\n  \"iso-8859-14\": \"ISO-8859-14\",\n  \"iso8859-14\": \"ISO-8859-14\",\n  \"iso885914\": \"ISO-8859-14\",\n  \"csisolatin9\": \"ISO-8859-15\",\n  \"iso-8859-15\": \"ISO-8859-15\",\n  \"iso8859-15\": \"ISO-8859-15\",\n  \"iso885915\": \"ISO-8859-15\",\n  \"iso_8859-15\": \"ISO-8859-15\",\n  \"l9\": \"ISO-8859-15\",\n  \"iso-8859-16\": \"ISO-8859-16\",\n  \"cskoi8r\": \"KOI8-R\",\n  \"koi\": \"KOI8-R\",\n  \"koi8\": \"KOI8-R\",\n  \"koi8-r\": \"KOI8-R\",\n  \"koi8_r\": \"KOI8-R\",\n  \"koi8-ru\": \"KOI8-U\",\n  \"koi8-u\": \"KOI8-U\",\n  \"csmacintosh\": \"macintosh\",\n  \"mac\": \"macintosh\",\n  \"macintosh\": \"macintosh\",\n  \"x-mac-roman\": \"macintosh\",\n  \"dos-874\": \"windows-874\",\n  \"iso-8859-11\": \"windows-874\",\n  \"iso8859-11\": \"windows-874\",\n  \"iso885911\": \"windows-874\",\n  \"tis-620\": \"windows-874\",\n  \"windows-874\": \"windows-874\",\n  \"cp1250\": \"windows-1250\",\n  \"windows-1250\": \"windows-1250\",\n  \"x-cp1250\": \"windows-1250\",\n  \"cp1251\": \"windows-1251\",\n  \"windows-1251\": \"windows-1251\",\n  \"x-cp1251\": \"windows-1251\",\n  \"ansi_x3.4-1968\": \"windows-1252\",\n  \"ascii\": \"windows-1252\",\n  \"cp1252\": \"windows-1252\",\n  \"cp819\": \"windows-1252\",\n  \"csisolatin1\": \"windows-1252\",\n  \"ibm819\": \"windows-1252\",\n  \"iso-8859-1\": \"windows-1252\",\n  \"iso-ir-100\": \"windows-1252\",\n  \"iso8859-1\": \"windows-1252\",\n  \"iso88591\": \"windows-1252\",\n  \"iso_8859-1\": \"windows-1252\",\n  \"iso_8859-1:1987\": \"windows-1252\",\n  \"l1\": \"windows-1252\",\n  \"latin1\": \"windows-1252\",\n  \"us-ascii\": \"windows-1252\",\n  \"windows-1252\": \"windows-1252\",\n  \"x-cp1252\": \"windows-1252\",\n  \"cp1253\": \"windows-1253\",\n  \"windows-1253\": \"windows-1253\",\n  \"x-cp1253\": \"windows-1253\",\n  \"cp1254\": \"windows-1254\",\n  \"csisolatin5\": \"windows-1254\",\n  \"iso-8859-9\": \"windows-1254\",\n  \"iso-ir-148\": \"windows-1254\",\n  \"iso8859-9\": \"windows-1254\",\n  \"iso88599\": \"windows-1254\",\n  \"iso_8859-9\": \"windows-1254\",\n  \"iso_8859-9:1989\": \"windows-1254\",\n  \"l5\": \"windows-1254\",\n  \"latin5\": \"windows-1254\",\n  \"windows-1254\": \"windows-1254\",\n  \"x-cp1254\": \"windows-1254\",\n  \"cp1255\": \"windows-1255\",\n  \"windows-1255\": \"windows-1255\",\n  \"x-cp1255\": \"windows-1255\",\n  \"cp1256\": \"windows-1256\",\n  \"windows-1256\": \"windows-1256\",\n  \"x-cp1256\": \"windows-1256\",\n  \"cp1257\": \"windows-1257\",\n  \"windows-1257\": \"windows-1257\",\n  \"x-cp1257\": \"windows-1257\",\n  \"cp1258\": \"windows-1258\",\n  \"windows-1258\": \"windows-1258\",\n  \"x-cp1258\": \"windows-1258\",\n  \"chinese\": \"GBK\",\n  \"csgb2312\": \"GBK\",\n  \"csiso58gb231280\": \"GBK\",\n  \"gb2312\": \"GBK\",\n  \"gb_2312\": \"GBK\",\n  \"gb_2312-80\": \"GBK\",\n  \"gbk\": \"GBK\",\n  \"iso-ir-58\": \"GBK\",\n  \"x-gbk\": \"GBK\",\n  \"gb18030\": \"gb18030\",\n  \"big5\": \"Big5\",\n  \"big5-hkscs\": \"Big5\",\n  \"cn-big5\": \"Big5\",\n  \"csbig5\": \"Big5\",\n  \"x-x-big5\": \"Big5\",\n  \"cseucpkdfmtjapanese\": \"EUC-JP\",\n  \"euc-jp\": \"EUC-JP\",\n  \"x-euc-jp\": \"EUC-JP\",\n  \"csshiftjis\": \"Shift_JIS\",\n  \"ms932\": \"Shift_JIS\",\n  \"ms_kanji\": \"Shift_JIS\",\n  \"shift-jis\": \"Shift_JIS\",\n  \"shift_jis\": \"Shift_JIS\",\n  \"sjis\": \"Shift_JIS\",\n  \"windows-31j\": \"Shift_JIS\",\n  \"x-sjis\": \"Shift_JIS\",\n  \"cseuckr\": \"EUC-KR\",\n  \"csksc56011987\": \"EUC-KR\",\n  \"euc-kr\": \"EUC-KR\",\n  \"iso-ir-149\": \"EUC-KR\",\n  \"korean\": \"EUC-KR\",\n  \"ks_c_5601-1987\": \"EUC-KR\",\n  \"ks_c_5601-1989\": \"EUC-KR\",\n  \"ksc5601\": \"EUC-KR\",\n  \"ksc_5601\": \"EUC-KR\",\n  \"windows-949\": \"EUC-KR\",\n  \"unicodefffe\": \"UTF-16BE\",\n  \"utf-16be\": \"UTF-16BE\",\n  \"csunicode\": \"UTF-16LE\",\n  \"iso-10646-ucs-2\": \"UTF-16LE\",\n  \"ucs-2\": \"UTF-16LE\",\n  \"unicode\": \"UTF-16LE\",\n  \"unicodefeff\": \"UTF-16LE\",\n  \"utf-16\": \"UTF-16LE\",\n  \"utf-16le\": \"UTF-16LE\",\n  \"x-user-defined\": \"x-user-defined\"\n}", "\"use strict\";\nconst iconvLite = require(\"iconv-lite\");\nconst supportedNames = require(\"./supported-names.json\");\nconst labelsToNames = require(\"./labels-to-names.json\");\n\nconst supportedNamesSet = new Set(supportedNames);\n\n// https://encoding.spec.whatwg.org/#concept-encoding-get\nexports.labelToName = label => {\n  label = String(label).trim().toLowerCase();\n\n  return labelsToNames[label] || null;\n};\n\n// https://encoding.spec.whatwg.org/#decode\nexports.decode = (uint8Array, fallbackEncodingName) => {\n  let encoding = fallbackEncodingName;\n  if (!exports.isSupported(encoding)) {\n    throw new RangeError(`\"${encoding}\" is not a supported encoding name`);\n  }\n\n  const bomEncoding = exports.getBOMEncoding(uint8Array);\n  if (bomEncoding !== null) {\n    encoding = bomEncoding;\n    // iconv-lite will strip BOMs for us, so no need to do the extra byte removal that the spec does.\n    // Note that we won't end up in the x-user-defined case when there's a bomEncoding.\n  }\n\n  if (encoding === \"x-user-defined\") {\n    // https://encoding.spec.whatwg.org/#x-user-defined-decoder\n    let result = \"\";\n    for (const byte of uint8Array) {\n      if (byte <= 0x7F) {\n        result += String.fromCodePoint(byte);\n      } else {\n        result += String.fromCodePoint(0xF780 + byte - 0x80);\n      }\n    }\n    return result;\n  }\n\n  return iconvLite.decode(uint8Array, encoding);\n};\n\n// https://github.com/whatwg/html/issues/1910#issuecomment-254017369\nexports.getBOMEncoding = uint8Array => {\n  if (uint8Array[0] === 0xFE && uint8Array[1] === 0xFF) {\n    return \"UTF-16BE\";\n  } else if (uint8Array[0] === 0xFF && uint8Array[1] === 0xFE) {\n    return \"UTF-16LE\";\n  } else if (uint8Array[0] === 0xEF && uint8Array[1] === 0xBB && uint8Array[2] === 0xBF) {\n    return \"UTF-8\";\n  }\n\n  return null;\n};\n\nexports.isSupported = name => {\n  return supportedNamesSet.has(String(name));\n};\n", "'use strict'\n\nmodule.exports = {\n  kClose: Symbol('close'),\n  kDestroy: Symbol('destroy'),\n  kDispatch: Symbol('dispatch'),\n  kUrl: Symbol('url'),\n  kWriting: Symbol('writing'),\n  kResuming: Symbol('resuming'),\n  kQueue: Symbol('queue'),\n  kConnect: Symbol('connect'),\n  kConnecting: Symbol('connecting'),\n  kKeepAliveDefaultTimeout: Symbol('default keep alive timeout'),\n  kKeepAliveMaxTimeout: Symbol('max keep alive timeout'),\n  kKeepAliveTimeoutThreshold: Symbol('keep alive timeout threshold'),\n  kKeepAliveTimeoutValue: Symbol('keep alive timeout'),\n  kKeepAlive: Symbol('keep alive'),\n  kHeadersTimeout: Symbol('headers timeout'),\n  kBodyTimeout: Symbol('body timeout'),\n  kServerName: Symbol('server name'),\n  kLocalAddress: Symbol('local address'),\n  kHost: Symbol('host'),\n  kNoRef: Symbol('no ref'),\n  kBodyUsed: Symbol('used'),\n  kBody: Symbol('abstracted request body'),\n  kRunning: Symbol('running'),\n  kBlocking: Symbol('blocking'),\n  kPending: Symbol('pending'),\n  kSize: Symbol('size'),\n  kBusy: Symbol('busy'),\n  kQueued: Symbol('queued'),\n  kFree: Symbol('free'),\n  kConnected: Symbol('connected'),\n  kClosed: Symbol('closed'),\n  kNeedDrain: Symbol('need drain'),\n  kReset: Symbol('reset'),\n  kDestroyed: Symbol.for('nodejs.stream.destroyed'),\n  kResume: Symbol('resume'),\n  kOnError: Symbol('on error'),\n  kMaxHeadersSize: Symbol('max headers size'),\n  kRunningIdx: Symbol('running index'),\n  kPendingIdx: Symbol('pending index'),\n  kError: Symbol('error'),\n  kClients: Symbol('clients'),\n  kClient: Symbol('client'),\n  kParser: Symbol('parser'),\n  kOnDestroyed: Symbol('destroy callbacks'),\n  kPipelining: Symbol('pipelining'),\n  kSocket: Symbol('socket'),\n  kHostHeader: Symbol('host header'),\n  kConnector: Symbol('connector'),\n  kStrictContentLength: Symbol('strict content length'),\n  kMaxRedirections: Symbol('maxRedirections'),\n  kMaxRequests: Symbol('maxRequestsPerClient'),\n  kProxy: Symbol('proxy agent options'),\n  kCounter: Symbol('socket request counter'),\n  kMaxResponseSize: Symbol('max response size'),\n  kHTTP2Session: Symbol('http2Session'),\n  kHTTP2SessionState: Symbol('http2Session state'),\n  kRetryHandlerDefaultRetry: Symbol('retry agent default retry'),\n  kConstruct: Symbol('constructable'),\n  kListeners: Symbol('listeners'),\n  kHTTPContext: Symbol('http context'),\n  kMaxConcurrentStreams: Symbol('max concurrent streams'),\n  kHTTP2InitialWindowSize: Symbol('http2 initial window size'),\n  kHTTP2ConnectionWindowSize: Symbol('http2 connection window size'),\n  kEnableConnectProtocol: Symbol('http2session connect protocol'),\n  kRemoteSettings: Symbol('http2session remote settings'),\n  kHTTP2Stream: Symbol('http2session client stream'),\n  kPingInterval: Symbol('ping interval'),\n  kNoProxyAgent: Symbol('no proxy agent'),\n  kHttpProxyAgent: Symbol('http proxy agent'),\n  kHttpsProxyAgent: Symbol('https proxy agent'),\n  kSocks5ProxyAgent: Symbol('socks5 proxy agent')\n}\n", "'use strict'\n\n/**\n * This module offers an optimized timer implementation designed for scenarios\n * where high precision is not critical.\n *\n * The timer achieves faster performance by using a low-resolution approach,\n * with an accuracy target of within 500ms. This makes it particularly useful\n * for timers with delays of 1 second or more, where exact timing is less\n * crucial.\n *\n * It's important to note that Node.js timers are inherently imprecise, as\n * delays can occur due to the event loop being blocked by other operations.\n * Consequently, timers may trigger later than their scheduled time.\n */\n\n/**\n * The fastNow variable contains the internal fast timer clock value.\n *\n * @type {number}\n */\nlet fastNow = 0\n\n/**\n * RESOLUTION_MS represents the target resolution time in milliseconds.\n *\n * @type {number}\n * @default 1000\n */\nconst RESOLUTION_MS = 1e3\n\n/**\n * TICK_MS defines the desired interval in milliseconds between each tick.\n * The target value is set to half the resolution time, minus 1 ms, to account\n * for potential event loop overhead.\n *\n * @type {number}\n * @default 499\n */\nconst TICK_MS = (RESOLUTION_MS >> 1) - 1\n\n/**\n * fastNowTimeout is a Node.js timer used to manage and process\n * the FastTimers stored in the `fastTimers` array.\n *\n * @type {NodeJS.Timeout}\n */\nlet fastNowTimeout\n\n/**\n * The kFastTimer symbol is used to identify FastTimer instances.\n *\n * @type {Symbol}\n */\nconst kFastTimer = Symbol('kFastTimer')\n\n/**\n * The fastTimers array contains all active FastTimers.\n *\n * @type {FastTimer[]}\n */\nconst fastTimers = []\n\n/**\n * These constants represent the various states of a FastTimer.\n */\n\n/**\n * The `NOT_IN_LIST` constant indicates that the FastTimer is not included\n * in the `fastTimers` array. Timers with this status will not be processed\n * during the next tick by the `onTick` function.\n *\n * A FastTimer can be re-added to the `fastTimers` array by invoking the\n * `refresh` method on the FastTimer instance.\n *\n * @type {-2}\n */\nconst NOT_IN_LIST = -2\n\n/**\n * The `TO_BE_CLEARED` constant indicates that the FastTimer is scheduled\n * for removal from the `fastTimers` array. A FastTimer in this state will\n * be removed in the next tick by the `onTick` function and will no longer\n * be processed.\n *\n * This status is also set when the `clear` method is called on the FastTimer instance.\n *\n * @type {-1}\n */\nconst TO_BE_CLEARED = -1\n\n/**\n * The `PENDING` constant signifies that the FastTimer is awaiting processing\n * in the next tick by the `onTick` function. Timers with this status will have\n * their `_idleStart` value set and their status updated to `ACTIVE` in the next tick.\n *\n * @type {0}\n */\nconst PENDING = 0\n\n/**\n * The `ACTIVE` constant indicates that the FastTimer is active and waiting\n * for its timer to expire. During the next tick, the `onTick` function will\n * check if the timer has expired, and if so, it will execute the associated callback.\n *\n * @type {1}\n */\nconst ACTIVE = 1\n\n/**\n * The onTick function processes the fastTimers array.\n *\n * @returns {void}\n */\nfunction onTick () {\n  /**\n   * Increment the fastNow value by the TICK_MS value, despite the actual time\n   * that has passed since the last tick. This approach ensures independence\n   * from the system clock and delays caused by a blocked event loop.\n   *\n   * @type {number}\n   */\n  fastNow += TICK_MS\n\n  /**\n   * The `idx` variable is used to iterate over the `fastTimers` array.\n   * Expired timers are removed by replacing them with the last element in the array.\n   * Consequently, `idx` is only incremented when the current element is not removed.\n   *\n   * @type {number}\n   */\n  let idx = 0\n\n  /**\n   * The len variable will contain the length of the fastTimers array\n   * and will be decremented when a FastTimer should be removed from the\n   * fastTimers array.\n   *\n   * @type {number}\n   */\n  let len = fastTimers.length\n\n  while (idx < len) {\n    /**\n     * @type {FastTimer}\n     */\n    const timer = fastTimers[idx]\n\n    // If the timer is in the ACTIVE state and the timer has expired, it will\n    // be processed in the next tick.\n    if (timer._state === PENDING) {\n      // Set the _idleStart value to the fastNow value minus the TICK_MS value\n      // to account for the time the timer was in the PENDING state.\n      timer._idleStart = fastNow - TICK_MS\n      timer._state = ACTIVE\n    } else if (\n      timer._state === ACTIVE &&\n      fastNow >= timer._idleStart + timer._idleTimeout\n    ) {\n      timer._state = TO_BE_CLEARED\n      timer._idleStart = -1\n      timer._onTimeout(timer._timerArg)\n    }\n\n    if (timer._state === TO_BE_CLEARED) {\n      timer._state = NOT_IN_LIST\n\n      // Move the last element to the current index and decrement len if it is\n      // not the only element in the array.\n      if (--len !== 0) {\n        fastTimers[idx] = fastTimers[len]\n      }\n    } else {\n      ++idx\n    }\n  }\n\n  // Set the length of the fastTimers array to the new length and thus\n  // removing the excess FastTimers elements from the array.\n  fastTimers.length = len\n\n  // If there are still active FastTimers in the array, refresh the Timer.\n  // If there are no active FastTimers, the timer will be refreshed again\n  // when a new FastTimer is instantiated.\n  if (fastTimers.length !== 0) {\n    refreshTimeout()\n  }\n}\n\nfunction refreshTimeout () {\n  // If the fastNowTimeout is already set and the Timer has the refresh()-\n  // method available, call it to refresh the timer.\n  // Some timer objects returned by setTimeout may not have a .refresh()\n  // method (e.g. mocked timers in tests).\n  if (fastNowTimeout?.refresh) {\n    fastNowTimeout.refresh()\n    // fastNowTimeout is not instantiated yet or refresh is not availabe,\n    // create a new Timer.\n  } else {\n    clearTimeout(fastNowTimeout)\n    fastNowTimeout = setTimeout(onTick, TICK_MS)\n    // If the Timer has an unref method, call it to allow the process to exit,\n    // if there are no other active handles. When using fake timers or mocked\n    // environments (like Jest), .unref() may not be defined,\n    fastNowTimeout?.unref()\n  }\n}\n\n/**\n * The `FastTimer` class is a data structure designed to store and manage\n * timer information.\n */\nclass FastTimer {\n  [kFastTimer] = true\n\n  /**\n   * The state of the timer, which can be one of the following:\n   * - NOT_IN_LIST (-2)\n   * - TO_BE_CLEARED (-1)\n   * - PENDING (0)\n   * - ACTIVE (1)\n   *\n   * @type {-2|-1|0|1}\n   * @private\n   */\n  _state = NOT_IN_LIST\n\n  /**\n   * The number of milliseconds to wait before calling the callback.\n   *\n   * @type {number}\n   * @private\n   */\n  _idleTimeout = -1\n\n  /**\n   * The time in milliseconds when the timer was started. This value is used to\n   * calculate when the timer should expire.\n   *\n   * @type {number}\n   * @default -1\n   * @private\n   */\n  _idleStart = -1\n\n  /**\n   * The function to be executed when the timer expires.\n   * @type {Function}\n   * @private\n   */\n  _onTimeout\n\n  /**\n   * The argument to be passed to the callback when the timer expires.\n   *\n   * @type {*}\n   * @private\n   */\n  _timerArg\n\n  /**\n   * @constructor\n   * @param {Function} callback A function to be executed after the timer\n   * expires.\n   * @param {number} delay The time, in milliseconds that the timer should wait\n   * before the specified function or code is executed.\n   * @param {*} arg\n   */\n  constructor (callback, delay, arg) {\n    this._onTimeout = callback\n    this._idleTimeout = delay\n    this._timerArg = arg\n\n    this.refresh()\n  }\n\n  /**\n   * Sets the timer's start time to the current time, and reschedules the timer\n   * to call its callback at the previously specified duration adjusted to the\n   * current time.\n   * Using this on a timer that has already called its callback will reactivate\n   * the timer.\n   *\n   * @returns {void}\n   */\n  refresh () {\n    // In the special case that the timer is not in the list of active timers,\n    // add it back to the array to be processed in the next tick by the onTick\n    // function.\n    if (this._state === NOT_IN_LIST) {\n      fastTimers.push(this)\n    }\n\n    // If the timer is the only active timer, refresh the fastNowTimeout for\n    // better resolution.\n    if (!fastNowTimeout || fastTimers.length === 1) {\n      refreshTimeout()\n    }\n\n    // Setting the state to PENDING will cause the timer to be reset in the\n    // next tick by the onTick function.\n    this._state = PENDING\n  }\n\n  /**\n   * The `clear` method cancels the timer, preventing it from executing.\n   *\n   * @returns {void}\n   * @private\n   */\n  clear () {\n    // Set the state to TO_BE_CLEARED to mark the timer for removal in the next\n    // tick by the onTick function.\n    this._state = TO_BE_CLEARED\n\n    // Reset the _idleStart value to -1 to indicate that the timer is no longer\n    // active.\n    this._idleStart = -1\n  }\n}\n\n/**\n * This module exports a setTimeout and clearTimeout function that can be\n * used as a drop-in replacement for the native functions.\n */\nmodule.exports = {\n  /**\n   * The setTimeout() method sets a timer which executes a function once the\n   * timer expires.\n   * @param {Function} callback A function to be executed after the timer\n   * expires.\n   * @param {number} delay The time, in milliseconds that the timer should\n   * wait before the specified function or code is executed.\n   * @param {*} [arg] An optional argument to be passed to the callback function\n   * when the timer expires.\n   * @returns {NodeJS.Timeout|FastTimer}\n   */\n  setTimeout (callback, delay, arg) {\n    // If the delay is less than or equal to the RESOLUTION_MS value return a\n    // native Node.js Timer instance.\n    return delay <= RESOLUTION_MS\n      ? setTimeout(callback, delay, arg)\n      : new FastTimer(callback, delay, arg)\n  },\n  /**\n   * The clearTimeout method cancels an instantiated Timer previously created\n   * by calling setTimeout.\n   *\n   * @param {NodeJS.Timeout|FastTimer} timeout\n   */\n  clearTimeout (timeout) {\n    // If the timeout is a FastTimer, call its own clear method.\n    if (timeout[kFastTimer]) {\n      /**\n       * @type {FastTimer}\n       */\n      timeout.clear()\n      // Otherwise it is an instance of a native NodeJS.Timeout, so call the\n      // Node.js native clearTimeout function.\n    } else {\n      clearTimeout(timeout)\n    }\n  },\n  /**\n   * The setFastTimeout() method sets a fastTimer which executes a function once\n   * the timer expires.\n   * @param {Function} callback A function to be executed after the timer\n   * expires.\n   * @param {number} delay The time, in milliseconds that the timer should\n   * wait before the specified function or code is executed.\n   * @param {*} [arg] An optional argument to be passed to the callback function\n   * when the timer expires.\n   * @returns {FastTimer}\n   */\n  setFastTimeout (callback, delay, arg) {\n    return new FastTimer(callback, delay, arg)\n  },\n  /**\n   * The clearTimeout method cancels an instantiated FastTimer previously\n   * created by calling setFastTimeout.\n   *\n   * @param {FastTimer} timeout\n   */\n  clearFastTimeout (timeout) {\n    timeout.clear()\n  },\n  /**\n   * The now method returns the value of the internal fast timer clock.\n   *\n   * @returns {number}\n   */\n  now () {\n    return fastNow\n  },\n  /**\n   * Trigger the onTick function to process the fastTimers array.\n   * Exported for testing purposes only.\n   * Marking as deprecated to discourage any use outside of testing.\n   * @deprecated\n   * @param {number} [delay=0] The delay in milliseconds to add to the now value.\n   */\n  tick (delay = 0) {\n    fastNow += delay - RESOLUTION_MS + 1\n    onTick()\n    onTick()\n  },\n  /**\n   * Reset FastTimers.\n   * Exported for testing purposes only.\n   * Marking as deprecated to discourage any use outside of testing.\n   * @deprecated\n   */\n  reset () {\n    fastNow = 0\n    fastTimers.length = 0\n    clearTimeout(fastNowTimeout)\n    fastNowTimeout = null\n  },\n  /**\n   * Exporting for testing purposes only.\n   * Marking as deprecated to discourage any use outside of testing.\n   * @deprecated\n   */\n  kFastTimer\n}\n", "'use strict'\n\nconst kUndiciError = Symbol.for('undici.error.UND_ERR')\nclass UndiciError extends Error {\n  constructor (message, options) {\n    super(message, options)\n    this.name = 'UndiciError'\n    this.code = 'UND_ERR'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kUndiciError] === true\n  }\n\n  get [kUndiciError] () {\n    return true\n  }\n}\n\nconst kConnectTimeoutError = Symbol.for('undici.error.UND_ERR_CONNECT_TIMEOUT')\nclass ConnectTimeoutError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ConnectTimeoutError'\n    this.message = message || 'Connect Timeout Error'\n    this.code = 'UND_ERR_CONNECT_TIMEOUT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kConnectTimeoutError] === true\n  }\n\n  get [kConnectTimeoutError] () {\n    return true\n  }\n}\n\nconst kHeadersTimeoutError = Symbol.for('undici.error.UND_ERR_HEADERS_TIMEOUT')\nclass HeadersTimeoutError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'HeadersTimeoutError'\n    this.message = message || 'Headers Timeout Error'\n    this.code = 'UND_ERR_HEADERS_TIMEOUT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kHeadersTimeoutError] === true\n  }\n\n  get [kHeadersTimeoutError] () {\n    return true\n  }\n}\n\nconst kHeadersOverflowError = Symbol.for('undici.error.UND_ERR_HEADERS_OVERFLOW')\nclass HeadersOverflowError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'HeadersOverflowError'\n    this.message = message || 'Headers Overflow Error'\n    this.code = 'UND_ERR_HEADERS_OVERFLOW'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kHeadersOverflowError] === true\n  }\n\n  get [kHeadersOverflowError] () {\n    return true\n  }\n}\n\nconst kBodyTimeoutError = Symbol.for('undici.error.UND_ERR_BODY_TIMEOUT')\nclass BodyTimeoutError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'BodyTimeoutError'\n    this.message = message || 'Body Timeout Error'\n    this.code = 'UND_ERR_BODY_TIMEOUT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kBodyTimeoutError] === true\n  }\n\n  get [kBodyTimeoutError] () {\n    return true\n  }\n}\n\nconst kInvalidArgumentError = Symbol.for('undici.error.UND_ERR_INVALID_ARG')\nclass InvalidArgumentError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'InvalidArgumentError'\n    this.message = message || 'Invalid Argument Error'\n    this.code = 'UND_ERR_INVALID_ARG'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kInvalidArgumentError] === true\n  }\n\n  get [kInvalidArgumentError] () {\n    return true\n  }\n}\n\nconst kInvalidReturnValueError = Symbol.for('undici.error.UND_ERR_INVALID_RETURN_VALUE')\nclass InvalidReturnValueError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'InvalidReturnValueError'\n    this.message = message || 'Invalid Return Value Error'\n    this.code = 'UND_ERR_INVALID_RETURN_VALUE'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kInvalidReturnValueError] === true\n  }\n\n  get [kInvalidReturnValueError] () {\n    return true\n  }\n}\n\nconst kAbortError = Symbol.for('undici.error.UND_ERR_ABORT')\nclass AbortError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'AbortError'\n    this.message = message || 'The operation was aborted'\n    this.code = 'UND_ERR_ABORT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kAbortError] === true\n  }\n\n  get [kAbortError] () {\n    return true\n  }\n}\n\nconst kRequestAbortedError = Symbol.for('undici.error.UND_ERR_ABORTED')\nclass RequestAbortedError extends AbortError {\n  constructor (message) {\n    super(message)\n    this.name = 'AbortError'\n    this.message = message || 'Request aborted'\n    this.code = 'UND_ERR_ABORTED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kRequestAbortedError] === true\n  }\n\n  get [kRequestAbortedError] () {\n    return true\n  }\n}\n\nconst kInformationalError = Symbol.for('undici.error.UND_ERR_INFO')\nclass InformationalError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'InformationalError'\n    this.message = message || 'Request information'\n    this.code = 'UND_ERR_INFO'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kInformationalError] === true\n  }\n\n  get [kInformationalError] () {\n    return true\n  }\n}\n\nconst kRequestContentLengthMismatchError = Symbol.for('undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH')\nclass RequestContentLengthMismatchError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'RequestContentLengthMismatchError'\n    this.message = message || 'Request body length does not match content-length header'\n    this.code = 'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kRequestContentLengthMismatchError] === true\n  }\n\n  get [kRequestContentLengthMismatchError] () {\n    return true\n  }\n}\n\nconst kResponseContentLengthMismatchError = Symbol.for('undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH')\nclass ResponseContentLengthMismatchError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ResponseContentLengthMismatchError'\n    this.message = message || 'Response body length does not match content-length header'\n    this.code = 'UND_ERR_RES_CONTENT_LENGTH_MISMATCH'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kResponseContentLengthMismatchError] === true\n  }\n\n  get [kResponseContentLengthMismatchError] () {\n    return true\n  }\n}\n\nconst kClientDestroyedError = Symbol.for('undici.error.UND_ERR_DESTROYED')\nclass ClientDestroyedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ClientDestroyedError'\n    this.message = message || 'The client is destroyed'\n    this.code = 'UND_ERR_DESTROYED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kClientDestroyedError] === true\n  }\n\n  get [kClientDestroyedError] () {\n    return true\n  }\n}\n\nconst kClientClosedError = Symbol.for('undici.error.UND_ERR_CLOSED')\nclass ClientClosedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ClientClosedError'\n    this.message = message || 'The client is closed'\n    this.code = 'UND_ERR_CLOSED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kClientClosedError] === true\n  }\n\n  get [kClientClosedError] () {\n    return true\n  }\n}\n\nconst kSocketError = Symbol.for('undici.error.UND_ERR_SOCKET')\nclass SocketError extends UndiciError {\n  constructor (message, socket) {\n    super(message)\n    this.name = 'SocketError'\n    this.message = message || 'Socket error'\n    this.code = 'UND_ERR_SOCKET'\n    this.socket = socket\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kSocketError] === true\n  }\n\n  get [kSocketError] () {\n    return true\n  }\n}\n\nconst kNotSupportedError = Symbol.for('undici.error.UND_ERR_NOT_SUPPORTED')\nclass NotSupportedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'NotSupportedError'\n    this.message = message || 'Not supported error'\n    this.code = 'UND_ERR_NOT_SUPPORTED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kNotSupportedError] === true\n  }\n\n  get [kNotSupportedError] () {\n    return true\n  }\n}\n\nconst kBalancedPoolMissingUpstreamError = Symbol.for('undici.error.UND_ERR_BPL_MISSING_UPSTREAM')\nclass BalancedPoolMissingUpstreamError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MissingUpstreamError'\n    this.message = message || 'No upstream has been added to the BalancedPool'\n    this.code = 'UND_ERR_BPL_MISSING_UPSTREAM'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kBalancedPoolMissingUpstreamError] === true\n  }\n\n  get [kBalancedPoolMissingUpstreamError] () {\n    return true\n  }\n}\n\nconst kHTTPParserError = Symbol.for('undici.error.UND_ERR_HTTP_PARSER')\nclass HTTPParserError extends Error {\n  constructor (message, code, data) {\n    super(message)\n    this.name = 'HTTPParserError'\n    this.code = code ? `HPE_${code}` : undefined\n    this.data = data ? data.toString() : undefined\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kHTTPParserError] === true\n  }\n\n  get [kHTTPParserError] () {\n    return true\n  }\n}\n\nconst kResponseExceededMaxSizeError = Symbol.for('undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE')\nclass ResponseExceededMaxSizeError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ResponseExceededMaxSizeError'\n    this.message = message || 'Response content exceeded max size'\n    this.code = 'UND_ERR_RES_EXCEEDED_MAX_SIZE'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kResponseExceededMaxSizeError] === true\n  }\n\n  get [kResponseExceededMaxSizeError] () {\n    return true\n  }\n}\n\nconst kRequestRetryError = Symbol.for('undici.error.UND_ERR_REQ_RETRY')\nclass RequestRetryError extends UndiciError {\n  constructor (message, code, { headers, data }) {\n    super(message)\n    this.name = 'RequestRetryError'\n    this.message = message || 'Request retry error'\n    this.code = 'UND_ERR_REQ_RETRY'\n    this.statusCode = code\n    this.data = data\n    this.headers = headers\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kRequestRetryError] === true\n  }\n\n  get [kRequestRetryError] () {\n    return true\n  }\n}\n\nconst kResponseError = Symbol.for('undici.error.UND_ERR_RESPONSE')\nclass ResponseError extends UndiciError {\n  constructor (message, code, { headers, body }) {\n    super(message)\n    this.name = 'ResponseError'\n    this.message = message || 'Response error'\n    this.code = 'UND_ERR_RESPONSE'\n    this.statusCode = code\n    this.body = body\n    this.headers = headers\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kResponseError] === true\n  }\n\n  get [kResponseError] () {\n    return true\n  }\n}\n\nconst kSecureProxyConnectionError = Symbol.for('undici.error.UND_ERR_PRX_TLS')\nclass SecureProxyConnectionError extends UndiciError {\n  constructor (cause, message, options = {}) {\n    super(message, { cause, ...options })\n    this.name = 'SecureProxyConnectionError'\n    this.message = message || 'Secure Proxy Connection failed'\n    this.code = 'UND_ERR_PRX_TLS'\n    this.cause = cause\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kSecureProxyConnectionError] === true\n  }\n\n  get [kSecureProxyConnectionError] () {\n    return true\n  }\n}\n\nconst kMaxOriginsReachedError = Symbol.for('undici.error.UND_ERR_MAX_ORIGINS_REACHED')\nclass MaxOriginsReachedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MaxOriginsReachedError'\n    this.message = message || 'Maximum allowed origins reached'\n    this.code = 'UND_ERR_MAX_ORIGINS_REACHED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kMaxOriginsReachedError] === true\n  }\n\n  get [kMaxOriginsReachedError] () {\n    return true\n  }\n}\n\nclass Socks5ProxyError extends UndiciError {\n  constructor (message, code) {\n    super(message)\n    this.name = 'Socks5ProxyError'\n    this.message = message || 'SOCKS5 proxy error'\n    this.code = code || 'UND_ERR_SOCKS5'\n  }\n}\n\nconst kMessageSizeExceededError = Symbol.for('undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED')\nclass MessageSizeExceededError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MessageSizeExceededError'\n    this.message = message || 'Max decompressed message size exceeded'\n    this.code = 'UND_ERR_WS_MESSAGE_SIZE_EXCEEDED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kMessageSizeExceededError] === true\n  }\n\n  get [kMessageSizeExceededError] () {\n    return true\n  }\n}\n\nmodule.exports = {\n  AbortError,\n  HTTPParserError,\n  UndiciError,\n  HeadersTimeoutError,\n  HeadersOverflowError,\n  BodyTimeoutError,\n  RequestContentLengthMismatchError,\n  ConnectTimeoutError,\n  InvalidArgumentError,\n  InvalidReturnValueError,\n  RequestAbortedError,\n  ClientDestroyedError,\n  ClientClosedError,\n  InformationalError,\n  SocketError,\n  NotSupportedError,\n  ResponseContentLengthMismatchError,\n  BalancedPoolMissingUpstreamError,\n  ResponseExceededMaxSizeError,\n  RequestRetryError,\n  ResponseError,\n  SecureProxyConnectionError,\n  MaxOriginsReachedError,\n  Socks5ProxyError,\n  MessageSizeExceededError\n}\n", "'use strict'\n\n/**\n * @see https://developer.mozilla.org/docs/Web/HTTP/Headers\n */\nconst wellknownHeaderNames = /** @type {const} */ ([\n  'Accept',\n  'Accept-Encoding',\n  'Accept-Language',\n  'Accept-Ranges',\n  'Access-Control-Allow-Credentials',\n  'Access-Control-Allow-Headers',\n  'Access-Control-Allow-Methods',\n  'Access-Control-Allow-Origin',\n  'Access-Control-Expose-Headers',\n  'Access-Control-Max-Age',\n  'Access-Control-Request-Headers',\n  'Access-Control-Request-Method',\n  'Age',\n  'Allow',\n  'Alt-Svc',\n  'Alt-Used',\n  'Authorization',\n  'Cache-Control',\n  'Clear-Site-Data',\n  'Connection',\n  'Content-Disposition',\n  'Content-Encoding',\n  'Content-Language',\n  'Content-Length',\n  'Content-Location',\n  'Content-Range',\n  'Content-Security-Policy',\n  'Content-Security-Policy-Report-Only',\n  'Content-Type',\n  'Cookie',\n  'Cross-Origin-Embedder-Policy',\n  'Cross-Origin-Opener-Policy',\n  'Cross-Origin-Resource-Policy',\n  'Date',\n  'Device-Memory',\n  'Downlink',\n  'ECT',\n  'ETag',\n  'Expect',\n  'Expect-CT',\n  'Expires',\n  'Forwarded',\n  'From',\n  'Host',\n  'If-Match',\n  'If-Modified-Since',\n  'If-None-Match',\n  'If-Range',\n  'If-Unmodified-Since',\n  'Keep-Alive',\n  'Last-Modified',\n  'Link',\n  'Location',\n  'Max-Forwards',\n  'Origin',\n  'Permissions-Policy',\n  'Pragma',\n  'Proxy-Authenticate',\n  'Proxy-Authorization',\n  'RTT',\n  'Range',\n  'Referer',\n  'Referrer-Policy',\n  'Refresh',\n  'Retry-After',\n  'Sec-WebSocket-Accept',\n  'Sec-WebSocket-Extensions',\n  'Sec-WebSocket-Key',\n  'Sec-WebSocket-Protocol',\n  'Sec-WebSocket-Version',\n  'Server',\n  'Server-Timing',\n  'Service-Worker-Allowed',\n  'Service-Worker-Navigation-Preload',\n  'Set-Cookie',\n  'SourceMap',\n  'Strict-Transport-Security',\n  'Supports-Loading-Mode',\n  'TE',\n  'Timing-Allow-Origin',\n  'Trailer',\n  'Transfer-Encoding',\n  'Upgrade',\n  'Upgrade-Insecure-Requests',\n  'User-Agent',\n  'Vary',\n  'Via',\n  'WWW-Authenticate',\n  'X-Content-Type-Options',\n  'X-DNS-Prefetch-Control',\n  'X-Frame-Options',\n  'X-Permitted-Cross-Domain-Policies',\n  'X-Powered-By',\n  'X-Requested-With',\n  'X-XSS-Protection'\n])\n\n/** @type {Record<typeof wellknownHeaderNames[number]|Lowercase<typeof wellknownHeaderNames[number]>, string>} */\nconst headerNameLowerCasedRecord = {}\n\n// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.\nObject.setPrototypeOf(headerNameLowerCasedRecord, null)\n\n/**\n * @type {Record<Lowercase<typeof wellknownHeaderNames[number]>, Buffer>}\n */\nconst wellknownHeaderNameBuffers = {}\n\n// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.\nObject.setPrototypeOf(wellknownHeaderNameBuffers, null)\n\n/**\n * @param {string} header Lowercased header\n * @returns {Buffer}\n */\nfunction getHeaderNameAsBuffer (header) {\n  let buffer = wellknownHeaderNameBuffers[header]\n\n  if (buffer === undefined) {\n    buffer = Buffer.from(header)\n  }\n\n  return buffer\n}\n\nfor (let i = 0; i < wellknownHeaderNames.length; ++i) {\n  const key = wellknownHeaderNames[i]\n  const lowerCasedKey = key.toLowerCase()\n  headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] =\n    lowerCasedKey\n}\n\nmodule.exports = {\n  wellknownHeaderNames,\n  headerNameLowerCasedRecord,\n  getHeaderNameAsBuffer\n}\n", "'use strict'\n\nconst {\n  wellknownHeaderNames,\n  headerNameLowerCasedRecord\n} = require('./constants')\n\nclass TstNode {\n  /** @type {any} */\n  value = null\n  /** @type {null | TstNode} */\n  left = null\n  /** @type {null | TstNode} */\n  middle = null\n  /** @type {null | TstNode} */\n  right = null\n  /** @type {number} */\n  code\n  /**\n   * @param {string} key\n   * @param {any} value\n   * @param {number} index\n   */\n  constructor (key, value, index) {\n    if (index === undefined || index >= key.length) {\n      throw new TypeError('Unreachable')\n    }\n    const code = this.code = key.charCodeAt(index)\n    // check code is ascii string\n    if (code > 0x7F) {\n      throw new TypeError('key must be ascii string')\n    }\n    if (key.length !== ++index) {\n      this.middle = new TstNode(key, value, index)\n    } else {\n      this.value = value\n    }\n  }\n\n  /**\n   * @param {string} key\n   * @param {any} value\n   * @returns {void}\n   */\n  add (key, value) {\n    const length = key.length\n    if (length === 0) {\n      throw new TypeError('Unreachable')\n    }\n    let index = 0\n    /**\n     * @type {TstNode}\n     */\n    let node = this\n    while (true) {\n      const code = key.charCodeAt(index)\n      // check code is ascii string\n      if (code > 0x7F) {\n        throw new TypeError('key must be ascii string')\n      }\n      if (node.code === code) {\n        if (length === ++index) {\n          node.value = value\n          break\n        } else if (node.middle !== null) {\n          node = node.middle\n        } else {\n          node.middle = new TstNode(key, value, index)\n          break\n        }\n      } else if (node.code < code) {\n        if (node.left !== null) {\n          node = node.left\n        } else {\n          node.left = new TstNode(key, value, index)\n          break\n        }\n      } else if (node.right !== null) {\n        node = node.right\n      } else {\n        node.right = new TstNode(key, value, index)\n        break\n      }\n    }\n  }\n\n  /**\n   * @param {Uint8Array} key\n   * @returns {TstNode | null}\n   */\n  search (key) {\n    const keylength = key.length\n    let index = 0\n    /**\n     * @type {TstNode|null}\n     */\n    let node = this\n    while (node !== null && index < keylength) {\n      let code = key[index]\n      // A-Z\n      // First check if it is bigger than 0x5a.\n      // Lowercase letters have higher char codes than uppercase ones.\n      // Also we assume that headers will mostly contain lowercase characters.\n      if (code <= 0x5a && code >= 0x41) {\n        // Lowercase for uppercase.\n        code |= 32\n      }\n      while (node !== null) {\n        if (code === node.code) {\n          if (keylength === ++index) {\n            // Returns Node since it is the last key.\n            return node\n          }\n          node = node.middle\n          break\n        }\n        node = node.code < code ? node.left : node.right\n      }\n    }\n    return null\n  }\n}\n\nclass TernarySearchTree {\n  /** @type {TstNode | null} */\n  node = null\n\n  /**\n   * @param {string} key\n   * @param {any} value\n   * @returns {void}\n   * */\n  insert (key, value) {\n    if (this.node === null) {\n      this.node = new TstNode(key, value, 0)\n    } else {\n      this.node.add(key, value)\n    }\n  }\n\n  /**\n   * @param {Uint8Array} key\n   * @returns {any}\n   */\n  lookup (key) {\n    return this.node?.search(key)?.value ?? null\n  }\n}\n\nconst tree = new TernarySearchTree()\n\nfor (let i = 0; i < wellknownHeaderNames.length; ++i) {\n  const key = headerNameLowerCasedRecord[wellknownHeaderNames[i]]\n  tree.insert(key, key)\n}\n\nmodule.exports = {\n  TernarySearchTree,\n  tree\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { kDestroyed, kBodyUsed, kListeners, kBody } = require('./symbols')\nconst { IncomingMessage } = require('node:http')\nconst stream = require('node:stream')\nconst net = require('node:net')\nconst { stringify } = require('node:querystring')\nconst { EventEmitter: EE } = require('node:events')\nconst timers = require('../util/timers')\nconst { InvalidArgumentError, ConnectTimeoutError } = require('./errors')\nconst { headerNameLowerCasedRecord } = require('./constants')\nconst { tree } = require('./tree')\n\nconst [nodeMajor, nodeMinor] = process.versions.node.split('.', 2).map(v => Number(v))\n\nclass BodyAsyncIterable {\n  constructor (body) {\n    this[kBody] = body\n    this[kBodyUsed] = false\n  }\n\n  async * [Symbol.asyncIterator] () {\n    assert(!this[kBodyUsed], 'disturbed')\n    this[kBodyUsed] = true\n    yield * this[kBody]\n  }\n}\n\nfunction noop () {}\n\n/**\n * @param {*} body\n * @returns {*}\n */\nfunction wrapRequestBody (body) {\n  if (isStream(body)) {\n    // TODO (fix): Provide some way for the user to cache the file to e.g. /tmp\n    // so that it can be dispatched again?\n    // TODO (fix): Do we need 100-expect support to provide a way to do this properly?\n    if (bodyLength(body) === 0) {\n      body\n        .on('data', function () {\n          assert(false)\n        })\n    }\n\n    if (typeof body.readableDidRead !== 'boolean') {\n      body[kBodyUsed] = false\n      EE.prototype.on.call(body, 'data', function () {\n        this[kBodyUsed] = true\n      })\n    }\n\n    return body\n  } else if (body && typeof body.pipeTo === 'function') {\n    // TODO (fix): We can't access ReadableStream internal state\n    // to determine whether or not it has been disturbed. This is just\n    // a workaround.\n    return new BodyAsyncIterable(body)\n  } else if (body && isFormDataLike(body)) {\n    return body\n  } else if (\n    body &&\n    typeof body !== 'string' &&\n    !ArrayBuffer.isView(body) &&\n    isIterable(body)\n  ) {\n    // TODO: Should we allow re-using iterable if !this.opts.idempotent\n    // or through some other flag?\n    return new BodyAsyncIterable(body)\n  } else {\n    return body\n  }\n}\n\n/**\n * @param {*} obj\n * @returns {obj is import('node:stream').Stream}\n */\nfunction isStream (obj) {\n  return obj && typeof obj === 'object' && typeof obj.pipe === 'function' && typeof obj.on === 'function'\n}\n\n/**\n * @param {*} object\n * @returns {object is Blob}\n * based on https://github.com/node-fetch/fetch-blob/blob/8ab587d34080de94140b54f07168451e7d0b655e/index.js#L229-L241 (MIT License)\n */\nfunction isBlobLike (object) {\n  if (object === null) {\n    return false\n  } else if (object instanceof Blob) {\n    return true\n  } else if (typeof object !== 'object') {\n    return false\n  } else {\n    const sTag = object[Symbol.toStringTag]\n\n    return (sTag === 'Blob' || sTag === 'File') && (\n      ('stream' in object && typeof object.stream === 'function') ||\n      ('arrayBuffer' in object && typeof object.arrayBuffer === 'function')\n    )\n  }\n}\n\n/**\n * @param {string} url The path to check for query strings or fragments.\n * @returns {boolean} Returns true if the path contains a query string or fragment.\n */\nfunction pathHasQueryOrFragment (url) {\n  return (\n    url.includes('?') ||\n    url.includes('#')\n  )\n}\n\n/**\n * @param {string} url The URL to add the query params to\n * @param {import('node:querystring').ParsedUrlQueryInput} queryParams The object to serialize into a URL query string\n * @returns {string} The URL with the query params added\n */\nfunction serializePathWithQuery (url, queryParams) {\n  if (pathHasQueryOrFragment(url)) {\n    throw new Error('Query params cannot be passed when url already contains \"?\" or \"#\".')\n  }\n\n  const stringified = stringify(queryParams)\n\n  if (stringified) {\n    url += '?' + stringified\n  }\n\n  return url\n}\n\n/**\n * @param {number|string|undefined} port\n * @returns {boolean}\n */\nfunction isValidPort (port) {\n  const value = parseInt(port, 10)\n  return (\n    value === Number(port) &&\n    value >= 0 &&\n    value <= 65535\n  )\n}\n\n/**\n * Check if the value is a valid http or https prefixed string.\n *\n * @param {string} value\n * @returns {boolean}\n */\nfunction isHttpOrHttpsPrefixed (value) {\n  return (\n    value != null &&\n    value[0] === 'h' &&\n    value[1] === 't' &&\n    value[2] === 't' &&\n    value[3] === 'p' &&\n    (\n      value[4] === ':' ||\n      (\n        value[4] === 's' &&\n        value[5] === ':'\n      )\n    )\n  )\n}\n\n/**\n * @param {string|URL|Record<string,string>} url\n * @returns {URL}\n */\nfunction parseURL (url) {\n  if (typeof url === 'string') {\n    /**\n     * @type {URL}\n     */\n    url = new URL(url)\n\n    if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {\n      throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')\n    }\n\n    return url\n  }\n\n  if (!url || typeof url !== 'object') {\n    throw new InvalidArgumentError('Invalid URL: The URL argument must be a non-null object.')\n  }\n\n  if (!(url instanceof URL)) {\n    if (url.port != null && url.port !== '' && isValidPort(url.port) === false) {\n      throw new InvalidArgumentError('Invalid URL: port must be a valid integer or a string representation of an integer.')\n    }\n\n    if (url.path != null && typeof url.path !== 'string') {\n      throw new InvalidArgumentError('Invalid URL path: the path must be a string or null/undefined.')\n    }\n\n    if (url.pathname != null && typeof url.pathname !== 'string') {\n      throw new InvalidArgumentError('Invalid URL pathname: the pathname must be a string or null/undefined.')\n    }\n\n    if (url.hostname != null && typeof url.hostname !== 'string') {\n      throw new InvalidArgumentError('Invalid URL hostname: the hostname must be a string or null/undefined.')\n    }\n\n    if (url.origin != null && typeof url.origin !== 'string') {\n      throw new InvalidArgumentError('Invalid URL origin: the origin must be a string or null/undefined.')\n    }\n\n    if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {\n      throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')\n    }\n\n    const port = url.port != null\n      ? url.port\n      : (url.protocol === 'https:' ? 443 : 80)\n    let origin = url.origin != null\n      ? url.origin\n      : `${url.protocol || ''}//${url.hostname || ''}:${port}`\n    let path = url.path != null\n      ? url.path\n      : `${url.pathname || ''}${url.search || ''}`\n\n    if (origin[origin.length - 1] === '/') {\n      origin = origin.slice(0, origin.length - 1)\n    }\n\n    if (path && path[0] !== '/') {\n      path = `/${path}`\n    }\n    // new URL(path, origin) is unsafe when `path` contains an absolute URL\n    // From https://developer.mozilla.org/en-US/docs/Web/API/URL/URL:\n    // If first parameter is a relative URL, second param is required, and will be used as the base URL.\n    // If first parameter is an absolute URL, a given second param will be ignored.\n    return new URL(`${origin}${path}`)\n  }\n\n  if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {\n    throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')\n  }\n\n  return url\n}\n\n/**\n * @param {string|URL|Record<string, string>} url\n * @returns {URL}\n */\nfunction parseOrigin (url) {\n  url = parseURL(url)\n\n  if (url.pathname !== '/' || url.search || url.hash) {\n    throw new InvalidArgumentError('invalid url')\n  }\n\n  return url\n}\n\n/**\n * @param {string} host\n * @returns {string}\n */\nfunction getHostname (host) {\n  if (host[0] === '[') {\n    const idx = host.indexOf(']')\n\n    assert(idx !== -1)\n    return host.substring(1, idx)\n  }\n\n  const idx = host.indexOf(':')\n  if (idx === -1) return host\n\n  return host.substring(0, idx)\n}\n\n/**\n * IP addresses are not valid server names per RFC6066\n * Currently, the only server names supported are DNS hostnames\n * @param {string|null} host\n * @returns {string|null}\n */\nfunction getServerName (host) {\n  if (!host) {\n    return null\n  }\n\n  assert(typeof host === 'string')\n\n  const servername = getHostname(host)\n  if (net.isIP(servername)) {\n    return ''\n  }\n\n  return servername\n}\n\n/**\n * @function\n * @template T\n * @param {T} obj\n * @returns {T}\n */\nfunction deepClone (obj) {\n  return JSON.parse(JSON.stringify(obj))\n}\n\n/**\n * @param {*} obj\n * @returns {obj is AsyncIterable}\n */\nfunction isAsyncIterable (obj) {\n  return !!(obj != null && typeof obj[Symbol.asyncIterator] === 'function')\n}\n\n/**\n * @param {*} obj\n * @returns {obj is Iterable}\n */\nfunction isIterable (obj) {\n  return !!(obj != null && (typeof obj[Symbol.iterator] === 'function' || typeof obj[Symbol.asyncIterator] === 'function'))\n}\n\n/**\n * Checks whether an object has a safe Symbol.iterator \u2014 i.e. one that is\n * either own or inherited from a non-Object.prototype chain.  This prevents\n * prototype-pollution attacks from injecting a fake iterator on\n * Object.prototype.\n * @param {object} obj\n * @returns {boolean}\n */\nfunction hasSafeIterator (obj) {\n  const prototype = Object.getPrototypeOf(obj)\n  const ownIterator = Object.prototype.hasOwnProperty.call(obj, Symbol.iterator)\n  return ownIterator || (prototype != null && prototype !== Object.prototype && typeof obj[Symbol.iterator] === 'function')\n}\n\n/**\n * @param {Blob|Buffer|import ('stream').Stream} body\n * @returns {number|null}\n */\nfunction bodyLength (body) {\n  if (body == null) {\n    return 0\n  } else if (isStream(body)) {\n    const state = body._readableState\n    return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length)\n      ? state.length\n      : null\n  } else if (isBlobLike(body)) {\n    return body.size != null ? body.size : null\n  } else if (isBuffer(body)) {\n    return body.byteLength\n  }\n\n  return null\n}\n\n/**\n * @param {import ('stream').Stream} body\n * @returns {boolean}\n */\nfunction isDestroyed (body) {\n  return body && !!(body.destroyed || body[kDestroyed] || (stream.isDestroyed?.(body)))\n}\n\n/**\n * @param {import ('stream').Stream} stream\n * @param {Error} [err]\n * @returns {void}\n */\nfunction destroy (stream, err) {\n  if (stream == null || !isStream(stream) || isDestroyed(stream)) {\n    return\n  }\n\n  if (typeof stream.destroy === 'function') {\n    if (Object.getPrototypeOf(stream).constructor === IncomingMessage) {\n      // See: https://github.com/nodejs/node/pull/38505/files\n      stream.socket = null\n    }\n\n    stream.destroy(err)\n  } else if (err) {\n    queueMicrotask(() => {\n      stream.emit('error', err)\n    })\n  }\n\n  if (stream.destroyed !== true) {\n    stream[kDestroyed] = true\n  }\n}\n\nconst KEEPALIVE_TIMEOUT_EXPR = /timeout=(\\d+)/\n/**\n * @param {string} val\n * @returns {number | null}\n */\nfunction parseKeepAliveTimeout (val) {\n  const m = val.match(KEEPALIVE_TIMEOUT_EXPR)\n  return m ? parseInt(m[1], 10) * 1000 : null\n}\n\n/**\n * Retrieves a header name and returns its lowercase value.\n * @param {string | Buffer} value Header name\n * @returns {string}\n */\nfunction headerNameToString (value) {\n  return typeof value === 'string'\n    ? headerNameLowerCasedRecord[value] ?? value.toLowerCase()\n    : tree.lookup(value) ?? value.toString('latin1').toLowerCase()\n}\n\n/**\n * Receive the buffer as a string and return its lowercase value.\n * @param {Buffer} value Header name\n * @returns {string}\n */\nfunction bufferToLowerCasedHeaderName (value) {\n  return tree.lookup(value) ?? value.toString('latin1').toLowerCase()\n}\n\n/**\n * @param {(Buffer | string)[]} headers\n * @param {Record<string, string | string[]>} [obj]\n * @returns {Record<string, string | string[]>}\n */\nfunction parseHeaders (headers, obj) {\n  if (obj === undefined) obj = {}\n\n  for (let i = 0; i < headers.length; i += 2) {\n    const key = headerNameToString(headers[i])\n    let val = obj[key]\n\n    if (val !== undefined) {\n      if (!Object.hasOwn(obj, key)) {\n        const headersValue = typeof headers[i + 1] === 'string'\n          ? headers[i + 1]\n          : Array.isArray(headers[i + 1])\n            ? headers[i + 1].map(x => x.toString('latin1'))\n            : headers[i + 1].toString('latin1')\n\n        if (key === '__proto__') {\n          Object.defineProperty(obj, key, {\n            value: headersValue,\n            enumerable: true,\n            configurable: true,\n            writable: true\n          })\n        } else {\n          obj[key] = headersValue\n        }\n      } else {\n        if (typeof val === 'string') {\n          val = [val]\n          obj[key] = val\n        }\n        val.push(headers[i + 1].toString('latin1'))\n      }\n    } else {\n      const headersValue = typeof headers[i + 1] === 'string'\n        ? headers[i + 1]\n        : Array.isArray(headers[i + 1])\n          ? headers[i + 1].map(x => x.toString('latin1'))\n          : headers[i + 1].toString('latin1')\n\n      obj[key] = headersValue\n    }\n  }\n\n  return obj\n}\n\n/**\n * @param {Buffer[]} headers\n * @returns {string[]}\n */\nfunction parseRawHeaders (headers) {\n  const headersLength = headers.length\n  /**\n   * @type {string[]}\n   */\n  const ret = new Array(headersLength)\n\n  let key\n  let val\n\n  for (let n = 0; n < headersLength; n += 2) {\n    key = headers[n]\n    val = headers[n + 1]\n\n    typeof key !== 'string' && (key = key.toString())\n    typeof val !== 'string' && (val = val.toString('latin1'))\n\n    ret[n] = key\n    ret[n + 1] = val\n  }\n\n  return ret\n}\n\n/**\n * @param {string[]} headers\n * @param {Buffer[]} headers\n */\nfunction encodeRawHeaders (headers) {\n  if (!Array.isArray(headers)) {\n    throw new TypeError('expected headers to be an array')\n  }\n  return headers.map(x => Buffer.from(x))\n}\n\n/**\n * @param {*} buffer\n * @returns {buffer is Buffer}\n */\nfunction isBuffer (buffer) {\n  // See, https://github.com/mcollina/undici/pull/319\n  return buffer instanceof Uint8Array || Buffer.isBuffer(buffer)\n}\n\n/**\n * Asserts that the handler object is a request handler.\n *\n * @param {object} handler\n * @param {string} method\n * @param {string} [upgrade]\n * @returns {asserts handler is import('../api/api-request').RequestHandler}\n */\nfunction assertRequestHandler (handler, method, upgrade) {\n  if (!handler || typeof handler !== 'object') {\n    throw new InvalidArgumentError('handler must be an object')\n  }\n\n  if (typeof handler.onRequestStart === 'function') {\n    // TODO (fix): More checks...\n    return\n  }\n\n  if (typeof handler.onConnect !== 'function') {\n    throw new InvalidArgumentError('invalid onConnect method')\n  }\n\n  if (typeof handler.onError !== 'function') {\n    throw new InvalidArgumentError('invalid onError method')\n  }\n\n  if (typeof handler.onBodySent !== 'function' && handler.onBodySent !== undefined) {\n    throw new InvalidArgumentError('invalid onBodySent method')\n  }\n\n  if (upgrade || method === 'CONNECT') {\n    if (typeof handler.onUpgrade !== 'function') {\n      throw new InvalidArgumentError('invalid onUpgrade method')\n    }\n  } else {\n    if (typeof handler.onHeaders !== 'function') {\n      throw new InvalidArgumentError('invalid onHeaders method')\n    }\n\n    if (typeof handler.onData !== 'function') {\n      throw new InvalidArgumentError('invalid onData method')\n    }\n\n    if (typeof handler.onComplete !== 'function') {\n      throw new InvalidArgumentError('invalid onComplete method')\n    }\n  }\n}\n\n/**\n * A body is disturbed if it has been read from and it cannot be re-used without\n * losing state or data.\n * @param {import('node:stream').Readable} body\n * @returns {boolean}\n */\nfunction isDisturbed (body) {\n  // TODO (fix): Why is body[kBodyUsed] needed?\n  return !!(body && (stream.isDisturbed(body) || body[kBodyUsed]))\n}\n\n/**\n * @typedef {object} SocketInfo\n * @property {string} [localAddress]\n * @property {number} [localPort]\n * @property {string} [remoteAddress]\n * @property {number} [remotePort]\n * @property {string} [remoteFamily]\n * @property {number} [timeout]\n * @property {number} bytesWritten\n * @property {number} bytesRead\n */\n\n/**\n * @param {import('net').Socket} socket\n * @returns {SocketInfo}\n */\nfunction getSocketInfo (socket) {\n  return {\n    localAddress: socket.localAddress,\n    localPort: socket.localPort,\n    remoteAddress: socket.remoteAddress,\n    remotePort: socket.remotePort,\n    remoteFamily: socket.remoteFamily,\n    timeout: socket.timeout,\n    bytesWritten: socket.bytesWritten,\n    bytesRead: socket.bytesRead\n  }\n}\n\n/**\n * @param {Iterable} iterable\n * @returns {ReadableStream}\n */\nfunction ReadableStreamFrom (iterable) {\n  // We cannot use ReadableStream.from here because it does not return a byte stream.\n\n  let iterator\n  return new ReadableStream(\n    {\n      start () {\n        iterator = iterable[Symbol.asyncIterator]()\n      },\n      pull (controller) {\n        return iterator.next().then(({ done, value }) => {\n          if (done) {\n            return queueMicrotask(() => {\n              controller.close()\n              controller.byobRequest?.respond(0)\n            })\n          } else {\n            const buf = Buffer.isBuffer(value) ? value : Buffer.from(value)\n            if (buf.byteLength) {\n              return controller.enqueue(new Uint8Array(buf))\n            } else {\n              return this.pull(controller)\n            }\n          }\n        })\n      },\n      cancel () {\n        return iterator.return()\n      },\n      type: 'bytes'\n    }\n  )\n}\n\n/**\n * The object should be a FormData instance and contains all the required\n * methods.\n * @param {*} object\n * @returns {object is FormData}\n */\nfunction isFormDataLike (object) {\n  return (\n    object &&\n    typeof object === 'object' &&\n    typeof object.append === 'function' &&\n    typeof object.delete === 'function' &&\n    typeof object.get === 'function' &&\n    typeof object.getAll === 'function' &&\n    typeof object.has === 'function' &&\n    typeof object.set === 'function' &&\n    object[Symbol.toStringTag] === 'FormData'\n  )\n}\n\nfunction addAbortListener (signal, listener) {\n  if ('addEventListener' in signal) {\n    signal.addEventListener('abort', listener, { once: true })\n    return () => signal.removeEventListener('abort', listener)\n  }\n  signal.once('abort', listener)\n  return () => signal.removeListener('abort', listener)\n}\n\nconst validTokenChars = new Uint8Array([\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0-15\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16-31\n  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32-47 (!\"#$%&'()*+,-./)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48-63 (0-9:;<=>?)\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64-79 (@A-O)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80-95 (P-Z[\\]^_)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96-111 (`a-o)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, // 112-127 (p-z{|}~)\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 128-143\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 144-159\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 160-175\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 176-191\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 192-207\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 208-223\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 224-239\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0  // 240-255\n])\n\n/**\n * @see https://tools.ietf.org/html/rfc7230#section-3.2.6\n * @param {number} c\n * @returns {boolean}\n */\nfunction isTokenCharCode (c) {\n  return (validTokenChars[c] === 1)\n}\n\nconst tokenRegExp = /^[\\^_`a-zA-Z\\-0-9!#$%&'*+.|~]+$/\n\n/**\n * @param {string} characters\n * @returns {boolean}\n */\nfunction isValidHTTPToken (characters) {\n  if (characters.length >= 12) return tokenRegExp.test(characters)\n  if (characters.length === 0) return false\n\n  for (let i = 0; i < characters.length; i++) {\n    if (validTokenChars[characters.charCodeAt(i)] !== 1) {\n      return false\n    }\n  }\n  return true\n}\n\n// headerCharRegex have been lifted from\n// https://github.com/nodejs/node/blob/main/lib/_http_common.js\n\n/**\n * Matches if val contains an invalid field-vchar\n *  field-value    = *( field-content / obs-fold )\n *  field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n *  field-vchar    = VCHAR / obs-text\n */\nconst headerCharRegex = /[^\\t\\x20-\\x7e\\x80-\\xff]/\n\n/**\n * @param {string} characters\n * @returns {boolean}\n */\nfunction isValidHeaderValue (characters) {\n  return !headerCharRegex.test(characters)\n}\n\nconst rangeHeaderRegex = /^bytes (\\d+)-(\\d+)\\/(\\d+)?$/\n\n/**\n * @typedef {object} RangeHeader\n * @property {number} start\n * @property {number | null} end\n * @property {number | null} size\n */\n\n/**\n * Parse accordingly to RFC 9110\n * @see https://www.rfc-editor.org/rfc/rfc9110#field.content-range\n * @param {string} [range]\n * @returns {RangeHeader|null}\n */\nfunction parseRangeHeader (range) {\n  if (range == null || range === '') return { start: 0, end: null, size: null }\n\n  const m = range ? range.match(rangeHeaderRegex) : null\n  return m\n    ? {\n        start: parseInt(m[1]),\n        end: m[2] ? parseInt(m[2]) : null,\n        size: m[3] ? parseInt(m[3]) : null\n      }\n    : null\n}\n\n/**\n * @template {import(\"events\").EventEmitter} T\n * @param {T} obj\n * @param {string} name\n * @param {(...args: any[]) => void} listener\n * @returns {T}\n */\nfunction addListener (obj, name, listener) {\n  const listeners = (obj[kListeners] ??= [])\n  listeners.push([name, listener])\n  obj.on(name, listener)\n  return obj\n}\n\n/**\n * @template {import(\"events\").EventEmitter} T\n * @param {T} obj\n * @returns {T}\n */\nfunction removeAllListeners (obj) {\n  if (obj[kListeners] != null) {\n    for (const [name, listener] of obj[kListeners]) {\n      obj.removeListener(name, listener)\n    }\n    obj[kListeners] = null\n  }\n  return obj\n}\n\n/**\n * @param {import ('../dispatcher/client')} client\n * @param {import ('../core/request')} request\n * @param {Error} err\n */\nfunction errorRequest (client, request, err) {\n  try {\n    request.onError(err)\n    assert(request.aborted)\n  } catch (err) {\n    client.emit('error', err)\n  }\n}\n\n/**\n * @param {WeakRef<net.Socket>} socketWeakRef\n * @param {object} opts\n * @param {number} opts.timeout\n * @param {string} opts.hostname\n * @param {number} opts.port\n * @returns {() => void}\n */\nconst setupConnectTimeout = process.platform === 'win32'\n  ? (socketWeakRef, opts) => {\n      if (!opts.timeout) {\n        return noop\n      }\n\n      let s1 = null\n      let s2 = null\n      const fastTimer = timers.setFastTimeout(() => {\n      // setImmediate is added to make sure that we prioritize socket error events over timeouts\n        s1 = setImmediate(() => {\n        // Windows needs an extra setImmediate probably due to implementation differences in the socket logic\n          s2 = setImmediate(() => onConnectTimeout(socketWeakRef.deref(), opts))\n        })\n      }, opts.timeout)\n      return () => {\n        timers.clearFastTimeout(fastTimer)\n        clearImmediate(s1)\n        clearImmediate(s2)\n      }\n    }\n  : (socketWeakRef, opts) => {\n      if (!opts.timeout) {\n        return noop\n      }\n\n      let s1 = null\n      const fastTimer = timers.setFastTimeout(() => {\n      // setImmediate is added to make sure that we prioritize socket error events over timeouts\n        s1 = setImmediate(() => {\n          onConnectTimeout(socketWeakRef.deref(), opts)\n        })\n      }, opts.timeout)\n      return () => {\n        timers.clearFastTimeout(fastTimer)\n        clearImmediate(s1)\n      }\n    }\n\n/**\n * @param {net.Socket} socket\n * @param {object} opts\n * @param {number} opts.timeout\n * @param {string} opts.hostname\n * @param {number} opts.port\n */\nfunction onConnectTimeout (socket, opts) {\n  // The socket could be already garbage collected\n  if (socket == null) {\n    return\n  }\n\n  let message = 'Connect Timeout Error'\n  if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) {\n    message += ` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(', ')},`\n  } else {\n    message += ` (attempted address: ${opts.hostname}:${opts.port},`\n  }\n\n  message += ` timeout: ${opts.timeout}ms)`\n\n  destroy(socket, new ConnectTimeoutError(message))\n}\n\n/**\n * @param {string} urlString\n * @returns {string}\n */\nfunction getProtocolFromUrlString (urlString) {\n  if (\n    urlString[0] === 'h' &&\n    urlString[1] === 't' &&\n    urlString[2] === 't' &&\n    urlString[3] === 'p'\n  ) {\n    switch (urlString[4]) {\n      case ':':\n        return 'http:'\n      case 's':\n        if (urlString[5] === ':') {\n          return 'https:'\n        }\n    }\n  }\n  // fallback if none of the usual suspects\n  return urlString.slice(0, urlString.indexOf(':') + 1)\n}\n\nconst kEnumerableProperty = Object.create(null)\nkEnumerableProperty.enumerable = true\n\nconst normalizedMethodRecordsBase = {\n  delete: 'DELETE',\n  DELETE: 'DELETE',\n  get: 'GET',\n  GET: 'GET',\n  head: 'HEAD',\n  HEAD: 'HEAD',\n  options: 'OPTIONS',\n  OPTIONS: 'OPTIONS',\n  post: 'POST',\n  POST: 'POST',\n  put: 'PUT',\n  PUT: 'PUT'\n}\n\nconst normalizedMethodRecords = {\n  ...normalizedMethodRecordsBase,\n  patch: 'patch',\n  PATCH: 'PATCH'\n}\n\n// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.\nObject.setPrototypeOf(normalizedMethodRecordsBase, null)\nObject.setPrototypeOf(normalizedMethodRecords, null)\n\nmodule.exports = {\n  kEnumerableProperty,\n  isDisturbed,\n  isBlobLike,\n  parseOrigin,\n  parseURL,\n  getServerName,\n  isStream,\n  isIterable,\n  hasSafeIterator,\n  isAsyncIterable,\n  isDestroyed,\n  headerNameToString,\n  bufferToLowerCasedHeaderName,\n  addListener,\n  removeAllListeners,\n  errorRequest,\n  parseRawHeaders,\n  encodeRawHeaders,\n  parseHeaders,\n  parseKeepAliveTimeout,\n  destroy,\n  bodyLength,\n  deepClone,\n  ReadableStreamFrom,\n  isBuffer,\n  assertRequestHandler,\n  getSocketInfo,\n  isFormDataLike,\n  pathHasQueryOrFragment,\n  serializePathWithQuery,\n  addAbortListener,\n  isValidHTTPToken,\n  isValidHeaderValue,\n  isTokenCharCode,\n  parseRangeHeader,\n  normalizedMethodRecordsBase,\n  normalizedMethodRecords,\n  isValidPort,\n  isHttpOrHttpsPrefixed,\n  nodeMajor,\n  nodeMinor,\n  safeHTTPMethods: Object.freeze(['GET', 'HEAD', 'OPTIONS', 'TRACE']),\n  wrapRequestBody,\n  setupConnectTimeout,\n  getProtocolFromUrlString\n}\n", "'use strict'\n\nconst {\n  kConnected,\n  kPending,\n  kRunning,\n  kSize,\n  kFree,\n  kQueued\n} = require('../core/symbols')\n\nclass ClientStats {\n  constructor (client) {\n    this.connected = client[kConnected]\n    this.pending = client[kPending]\n    this.running = client[kRunning]\n    this.size = client[kSize]\n  }\n}\n\nclass PoolStats {\n  constructor (pool) {\n    this.connected = pool[kConnected]\n    this.free = pool[kFree]\n    this.pending = pool[kPending]\n    this.queued = pool[kQueued]\n    this.running = pool[kRunning]\n    this.size = pool[kSize]\n  }\n}\n\nmodule.exports = { ClientStats, PoolStats }\n", "'use strict'\n\nconst diagnosticsChannel = require('node:diagnostics_channel')\nconst util = require('node:util')\n\nconst undiciDebugLog = util.debuglog('undici')\nconst fetchDebuglog = util.debuglog('fetch')\nconst websocketDebuglog = util.debuglog('websocket')\n\nconst channels = {\n  // Client\n  beforeConnect: diagnosticsChannel.channel('undici:client:beforeConnect'),\n  connected: diagnosticsChannel.channel('undici:client:connected'),\n  connectError: diagnosticsChannel.channel('undici:client:connectError'),\n  sendHeaders: diagnosticsChannel.channel('undici:client:sendHeaders'),\n  // Request\n  create: diagnosticsChannel.channel('undici:request:create'),\n  bodySent: diagnosticsChannel.channel('undici:request:bodySent'),\n  bodyChunkSent: diagnosticsChannel.channel('undici:request:bodyChunkSent'),\n  bodyChunkReceived: diagnosticsChannel.channel('undici:request:bodyChunkReceived'),\n  headers: diagnosticsChannel.channel('undici:request:headers'),\n  trailers: diagnosticsChannel.channel('undici:request:trailers'),\n  error: diagnosticsChannel.channel('undici:request:error'),\n  // WebSocket\n  open: diagnosticsChannel.channel('undici:websocket:open'),\n  close: diagnosticsChannel.channel('undici:websocket:close'),\n  socketError: diagnosticsChannel.channel('undici:websocket:socket_error'),\n  ping: diagnosticsChannel.channel('undici:websocket:ping'),\n  pong: diagnosticsChannel.channel('undici:websocket:pong'),\n  // ProxyAgent\n  proxyConnected: diagnosticsChannel.channel('undici:proxy:connected')\n}\n\nlet isTrackingClientEvents = false\n\nfunction trackClientEvents (debugLog = undiciDebugLog) {\n  if (isTrackingClientEvents) {\n    return\n  }\n\n  // Check if any of the channels already have subscribers to prevent duplicate subscriptions\n  // This can happen when both Node.js built-in undici and undici as a dependency are present\n  if (channels.beforeConnect.hasSubscribers || channels.connected.hasSubscribers ||\n      channels.connectError.hasSubscribers || channels.sendHeaders.hasSubscribers) {\n    isTrackingClientEvents = true\n    return\n  }\n\n  isTrackingClientEvents = true\n\n  diagnosticsChannel.subscribe('undici:client:beforeConnect',\n    evt => {\n      const {\n        connectParams: { version, protocol, port, host }\n      } = evt\n      debugLog(\n        'connecting to %s%s using %s%s',\n        host,\n        port ? `:${port}` : '',\n        protocol,\n        version\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:client:connected',\n    evt => {\n      const {\n        connectParams: { version, protocol, port, host }\n      } = evt\n      debugLog(\n        'connected to %s%s using %s%s',\n        host,\n        port ? `:${port}` : '',\n        protocol,\n        version\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:client:connectError',\n    evt => {\n      const {\n        connectParams: { version, protocol, port, host },\n        error\n      } = evt\n      debugLog(\n        'connection to %s%s using %s%s errored - %s',\n        host,\n        port ? `:${port}` : '',\n        protocol,\n        version,\n        error.message\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:client:sendHeaders',\n    evt => {\n      const {\n        request: { method, path, origin }\n      } = evt\n      debugLog('sending request to %s %s%s', method, origin, path)\n    })\n}\n\nlet isTrackingRequestEvents = false\n\nfunction trackRequestEvents (debugLog = undiciDebugLog) {\n  if (isTrackingRequestEvents) {\n    return\n  }\n\n  // Check if any of the channels already have subscribers to prevent duplicate subscriptions\n  // This can happen when both Node.js built-in undici and undici as a dependency are present\n  if (channels.headers.hasSubscribers || channels.trailers.hasSubscribers ||\n      channels.error.hasSubscribers) {\n    isTrackingRequestEvents = true\n    return\n  }\n\n  isTrackingRequestEvents = true\n\n  diagnosticsChannel.subscribe('undici:request:headers',\n    evt => {\n      const {\n        request: { method, path, origin },\n        response: { statusCode }\n      } = evt\n      debugLog(\n        'received response to %s %s%s - HTTP %d',\n        method,\n        origin,\n        path,\n        statusCode\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:request:trailers',\n    evt => {\n      const {\n        request: { method, path, origin }\n      } = evt\n      debugLog('trailers received from %s %s%s', method, origin, path)\n    })\n\n  diagnosticsChannel.subscribe('undici:request:error',\n    evt => {\n      const {\n        request: { method, path, origin },\n        error\n      } = evt\n      debugLog(\n        'request to %s %s%s errored - %s',\n        method,\n        origin,\n        path,\n        error.message\n      )\n    })\n}\n\nlet isTrackingWebSocketEvents = false\n\nfunction trackWebSocketEvents (debugLog = websocketDebuglog) {\n  if (isTrackingWebSocketEvents) {\n    return\n  }\n\n  // Check if any of the channels already have subscribers to prevent duplicate subscriptions\n  // This can happen when both Node.js built-in undici and undici as a dependency are present\n  if (channels.open.hasSubscribers || channels.close.hasSubscribers ||\n      channels.socketError.hasSubscribers || channels.ping.hasSubscribers ||\n      channels.pong.hasSubscribers) {\n    isTrackingWebSocketEvents = true\n    return\n  }\n\n  isTrackingWebSocketEvents = true\n\n  diagnosticsChannel.subscribe('undici:websocket:open',\n    evt => {\n      if (evt.address != null) {\n        const { address, port } = evt.address\n        debugLog('connection opened %s%s', address, port ? `:${port}` : '')\n      } else {\n        debugLog('connection opened')\n      }\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:close',\n    evt => {\n      const { websocket, code, reason } = evt\n      debugLog(\n        'closed connection to %s - %s %s',\n        websocket.url,\n        code,\n        reason\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:socket_error',\n    err => {\n      debugLog('connection errored - %s', err.message)\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:ping',\n    evt => {\n      debugLog('ping received')\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:pong',\n    evt => {\n      debugLog('pong received')\n    })\n}\n\nif (undiciDebugLog.enabled || fetchDebuglog.enabled) {\n  trackClientEvents(fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog)\n  trackRequestEvents(fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog)\n}\n\nif (websocketDebuglog.enabled) {\n  trackClientEvents(undiciDebugLog.enabled ? undiciDebugLog : websocketDebuglog)\n  trackWebSocketEvents(websocketDebuglog)\n}\n\nmodule.exports = {\n  channels\n}\n", "'use strict'\n\nconst {\n  InvalidArgumentError,\n  NotSupportedError\n} = require('./errors')\nconst assert = require('node:assert')\nconst {\n  isValidHTTPToken,\n  isValidHeaderValue,\n  isStream,\n  destroy,\n  isBuffer,\n  isFormDataLike,\n  isIterable,\n  hasSafeIterator,\n  isBlobLike,\n  serializePathWithQuery,\n  assertRequestHandler,\n  getServerName,\n  normalizedMethodRecords,\n  getProtocolFromUrlString\n} = require('./util')\nconst { channels } = require('./diagnostics.js')\nconst { headerNameLowerCasedRecord } = require('./constants')\n\n// Verifies that a given path is valid does not contain control chars \\x00 to \\x20\nconst invalidPathRegex = /[^\\u0021-\\u00ff]/\n\nconst kHandler = Symbol('handler')\n\nclass Request {\n  constructor (origin, {\n    path,\n    method,\n    body,\n    headers,\n    query,\n    idempotent,\n    blocking,\n    upgrade,\n    headersTimeout,\n    bodyTimeout,\n    reset,\n    expectContinue,\n    servername,\n    throwOnError,\n    maxRedirections,\n    typeOfService\n  }, handler) {\n    if (typeof path !== 'string') {\n      throw new InvalidArgumentError('path must be a string')\n    } else if (\n      path[0] !== '/' &&\n      !(path.startsWith('http://') || path.startsWith('https://')) &&\n      method !== 'CONNECT'\n    ) {\n      throw new InvalidArgumentError('path must be an absolute URL or start with a slash')\n    } else if (invalidPathRegex.test(path)) {\n      throw new InvalidArgumentError('invalid request path')\n    }\n\n    if (typeof method !== 'string') {\n      throw new InvalidArgumentError('method must be a string')\n    } else if (normalizedMethodRecords[method] === undefined && !isValidHTTPToken(method)) {\n      throw new InvalidArgumentError('invalid request method')\n    }\n\n    if (upgrade && typeof upgrade !== 'string') {\n      throw new InvalidArgumentError('upgrade must be a string')\n    }\n\n    if (upgrade && !isValidHeaderValue(upgrade)) {\n      throw new InvalidArgumentError('invalid upgrade header')\n    }\n\n    if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) {\n      throw new InvalidArgumentError('invalid headersTimeout')\n    }\n\n    if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) {\n      throw new InvalidArgumentError('invalid bodyTimeout')\n    }\n\n    if (reset != null && typeof reset !== 'boolean') {\n      throw new InvalidArgumentError('invalid reset')\n    }\n\n    if (expectContinue != null && typeof expectContinue !== 'boolean') {\n      throw new InvalidArgumentError('invalid expectContinue')\n    }\n\n    if (throwOnError != null) {\n      throw new InvalidArgumentError('invalid throwOnError')\n    }\n\n    if (maxRedirections != null && maxRedirections !== 0) {\n      throw new InvalidArgumentError('maxRedirections is not supported, use the redirect interceptor')\n    }\n\n    if (typeOfService != null && (!Number.isInteger(typeOfService) || typeOfService < 0 || typeOfService > 255)) {\n      throw new InvalidArgumentError('typeOfService must be an integer between 0 and 255')\n    }\n\n    this.headersTimeout = headersTimeout\n\n    this.bodyTimeout = bodyTimeout\n\n    this.method = method\n\n    this.typeOfService = typeOfService ?? 0\n\n    this.abort = null\n\n    if (body == null) {\n      this.body = null\n    } else if (isStream(body)) {\n      this.body = body\n\n      const rState = this.body._readableState\n      if (!rState || !rState.autoDestroy) {\n        this.endHandler = function autoDestroy () {\n          destroy(this)\n        }\n        this.body.on('end', this.endHandler)\n      }\n\n      this.errorHandler = err => {\n        if (this.abort) {\n          this.abort(err)\n        } else {\n          this.error = err\n        }\n      }\n      this.body.on('error', this.errorHandler)\n    } else if (isBuffer(body)) {\n      this.body = body.byteLength ? body : null\n    } else if (ArrayBuffer.isView(body)) {\n      this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null\n    } else if (body instanceof ArrayBuffer) {\n      this.body = body.byteLength ? Buffer.from(body) : null\n    } else if (typeof body === 'string') {\n      this.body = body.length ? Buffer.from(body) : null\n    } else if (isFormDataLike(body) || isIterable(body) || isBlobLike(body)) {\n      this.body = body\n    } else {\n      throw new InvalidArgumentError('body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable')\n    }\n\n    this.completed = false\n    this.aborted = false\n\n    this.upgrade = upgrade || null\n\n    this.path = query ? serializePathWithQuery(path, query) : path\n\n    // TODO: shall we maybe standardize it to an URL object?\n    this.origin = origin\n\n    this.protocol = getProtocolFromUrlString(origin)\n\n    this.idempotent = idempotent == null\n      ? method === 'HEAD' || method === 'GET'\n      : idempotent\n\n    this.blocking = blocking ?? this.method !== 'HEAD'\n\n    this.reset = reset == null ? null : reset\n\n    this.host = null\n\n    this.contentLength = null\n\n    this.contentType = null\n\n    this.headers = []\n\n    // Only for H2\n    this.expectContinue = expectContinue != null ? expectContinue : false\n\n    if (Array.isArray(headers)) {\n      if (headers.length % 2 !== 0) {\n        throw new InvalidArgumentError('headers array must be even')\n      }\n      for (let i = 0; i < headers.length; i += 2) {\n        processHeader(this, headers[i], headers[i + 1])\n      }\n    } else if (headers && typeof headers === 'object') {\n      if (hasSafeIterator(headers)) {\n        for (const header of headers) {\n          if (!Array.isArray(header) || header.length !== 2) {\n            throw new InvalidArgumentError('headers must be in key-value pair format')\n          }\n          processHeader(this, header[0], header[1])\n        }\n      } else {\n        const keys = Object.keys(headers)\n        for (let i = 0; i < keys.length; ++i) {\n          processHeader(this, keys[i], headers[keys[i]])\n        }\n      }\n    } else if (headers != null) {\n      throw new InvalidArgumentError('headers must be an object or an array')\n    }\n\n    assertRequestHandler(handler, method, upgrade)\n\n    this.servername = servername || getServerName(this.host) || null\n\n    this[kHandler] = handler\n\n    if (channels.create.hasSubscribers) {\n      channels.create.publish({ request: this })\n    }\n  }\n\n  onBodySent (chunk) {\n    if (channels.bodyChunkSent.hasSubscribers) {\n      channels.bodyChunkSent.publish({ request: this, chunk })\n    }\n    if (this[kHandler].onBodySent) {\n      try {\n        return this[kHandler].onBodySent(chunk)\n      } catch (err) {\n        this.abort(err)\n      }\n    }\n  }\n\n  onRequestSent () {\n    if (channels.bodySent.hasSubscribers) {\n      channels.bodySent.publish({ request: this })\n    }\n\n    if (this[kHandler].onRequestSent) {\n      try {\n        return this[kHandler].onRequestSent()\n      } catch (err) {\n        this.abort(err)\n      }\n    }\n  }\n\n  onConnect (abort) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    if (this.error) {\n      abort(this.error)\n    } else {\n      this.abort = abort\n      return this[kHandler].onConnect(abort)\n    }\n  }\n\n  onResponseStarted () {\n    return this[kHandler].onResponseStarted?.()\n  }\n\n  onHeaders (statusCode, headers, resume, statusText) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    if (channels.headers.hasSubscribers) {\n      channels.headers.publish({ request: this, response: { statusCode, headers, statusText } })\n    }\n\n    try {\n      return this[kHandler].onHeaders(statusCode, headers, resume, statusText)\n    } catch (err) {\n      this.abort(err)\n    }\n  }\n\n  onData (chunk) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    if (channels.bodyChunkReceived.hasSubscribers) {\n      channels.bodyChunkReceived.publish({ request: this, chunk })\n    }\n    try {\n      return this[kHandler].onData(chunk)\n    } catch (err) {\n      this.abort(err)\n      return false\n    }\n  }\n\n  onUpgrade (statusCode, headers, socket) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    return this[kHandler].onUpgrade(statusCode, headers, socket)\n  }\n\n  onComplete (trailers) {\n    this.onFinally()\n\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    this.completed = true\n    if (channels.trailers.hasSubscribers) {\n      channels.trailers.publish({ request: this, trailers })\n    }\n\n    try {\n      return this[kHandler].onComplete(trailers)\n    } catch (err) {\n      // TODO (fix): This might be a bad idea?\n      this.onError(err)\n    }\n  }\n\n  onError (error) {\n    this.onFinally()\n\n    if (channels.error.hasSubscribers) {\n      channels.error.publish({ request: this, error })\n    }\n\n    if (this.aborted) {\n      return\n    }\n    this.aborted = true\n\n    return this[kHandler].onError(error)\n  }\n\n  onFinally () {\n    if (this.errorHandler) {\n      this.body.off('error', this.errorHandler)\n      this.errorHandler = null\n    }\n\n    if (this.endHandler) {\n      this.body.off('end', this.endHandler)\n      this.endHandler = null\n    }\n  }\n\n  addHeader (key, value) {\n    processHeader(this, key, value)\n    return this\n  }\n}\n\nfunction processHeader (request, key, val) {\n  if (val && (typeof val === 'object' && !Array.isArray(val))) {\n    throw new InvalidArgumentError(`invalid ${key} header`)\n  } else if (val === undefined) {\n    return\n  }\n\n  let headerName = headerNameLowerCasedRecord[key]\n\n  if (headerName === undefined) {\n    headerName = key.toLowerCase()\n    if (headerNameLowerCasedRecord[headerName] === undefined && !isValidHTTPToken(headerName)) {\n      throw new InvalidArgumentError('invalid header key')\n    }\n  }\n\n  if (Array.isArray(val)) {\n    const arr = []\n    for (let i = 0; i < val.length; i++) {\n      if (typeof val[i] === 'string') {\n        if (!isValidHeaderValue(val[i])) {\n          throw new InvalidArgumentError(`invalid ${key} header`)\n        }\n        arr.push(val[i])\n      } else if (val[i] === null) {\n        arr.push('')\n      } else if (typeof val[i] === 'object') {\n        throw new InvalidArgumentError(`invalid ${key} header`)\n      } else {\n        arr.push(`${val[i]}`)\n      }\n    }\n    val = arr\n  } else if (typeof val === 'string') {\n    if (!isValidHeaderValue(val)) {\n      throw new InvalidArgumentError(`invalid ${key} header`)\n    }\n  } else if (val === null) {\n    val = ''\n  } else {\n    val = `${val}`\n  }\n\n  if (headerName === 'host') {\n    if (request.host !== null) {\n      throw new InvalidArgumentError('duplicate host header')\n    }\n    if (typeof val !== 'string') {\n      throw new InvalidArgumentError('invalid host header')\n    }\n    // Consumed by Client\n    request.host = val\n  } else if (headerName === 'content-length') {\n    if (request.contentLength !== null) {\n      throw new InvalidArgumentError('duplicate content-length header')\n    }\n    request.contentLength = parseInt(val, 10)\n    if (!Number.isFinite(request.contentLength)) {\n      throw new InvalidArgumentError('invalid content-length header')\n    }\n  } else if (request.contentType === null && headerName === 'content-type') {\n    request.contentType = val\n    request.headers.push(key, val)\n  } else if (headerName === 'transfer-encoding' || headerName === 'keep-alive' || headerName === 'upgrade') {\n    throw new InvalidArgumentError(`invalid ${headerName} header`)\n  } else if (headerName === 'connection') {\n    // Per RFC 7230 Section 6.1, Connection header can contain\n    // a comma-separated list of connection option tokens (header names)\n    const value = typeof val === 'string' ? val : null\n    if (value === null) {\n      throw new InvalidArgumentError('invalid connection header')\n    }\n\n    for (const token of value.toLowerCase().split(',')) {\n      const trimmed = token.trim()\n      if (!isValidHTTPToken(trimmed)) {\n        throw new InvalidArgumentError('invalid connection header')\n      }\n      if (trimmed === 'close') {\n        request.reset = true\n      }\n    }\n  } else if (headerName === 'expect') {\n    throw new NotSupportedError('expect header not supported')\n  } else {\n    request.headers.push(key, val)\n  }\n}\n\nmodule.exports = Request\n", "'use strict'\n\nconst { InvalidArgumentError } = require('../core/errors')\n\nmodule.exports = class WrapHandler {\n  #handler\n\n  constructor (handler) {\n    this.#handler = handler\n  }\n\n  static wrap (handler) {\n    // TODO (fix): More checks...\n    return handler.onRequestStart ? handler : new WrapHandler(handler)\n  }\n\n  // Unwrap Interface\n\n  onConnect (abort, context) {\n    return this.#handler.onConnect?.(abort, context)\n  }\n\n  onResponseStarted () {\n    return this.#handler.onResponseStarted?.()\n  }\n\n  onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n    return this.#handler.onHeaders?.(statusCode, rawHeaders, resume, statusMessage)\n  }\n\n  onUpgrade (statusCode, rawHeaders, socket) {\n    return this.#handler.onUpgrade?.(statusCode, rawHeaders, socket)\n  }\n\n  onData (data) {\n    return this.#handler.onData?.(data)\n  }\n\n  onComplete (trailers) {\n    return this.#handler.onComplete?.(trailers)\n  }\n\n  onError (err) {\n    if (!this.#handler.onError) {\n      throw err\n    }\n\n    return this.#handler.onError?.(err)\n  }\n\n  // Wrap Interface\n\n  onRequestStart (controller, context) {\n    this.#handler.onConnect?.((reason) => controller.abort(reason), context)\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    const rawHeaders = []\n    for (const [key, val] of Object.entries(headers)) {\n      rawHeaders.push(Buffer.from(key, 'latin1'), toRawHeaderValue(val))\n    }\n\n    this.#handler.onUpgrade?.(statusCode, rawHeaders, socket)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    const rawHeaders = []\n    for (const [key, val] of Object.entries(headers)) {\n      rawHeaders.push(Buffer.from(key, 'latin1'), toRawHeaderValue(val))\n    }\n\n    if (this.#handler.onHeaders?.(statusCode, rawHeaders, () => controller.resume(), statusMessage) === false) {\n      controller.pause()\n    }\n  }\n\n  onResponseData (controller, data) {\n    if (this.#handler.onData?.(data) === false) {\n      controller.pause()\n    }\n  }\n\n  onResponseEnd (controller, trailers) {\n    const rawTrailers = []\n    for (const [key, val] of Object.entries(trailers)) {\n      rawTrailers.push(Buffer.from(key, 'latin1'), toRawHeaderValue(val))\n    }\n\n    this.#handler.onComplete?.(rawTrailers)\n  }\n\n  onResponseError (controller, err) {\n    if (!this.#handler.onError) {\n      throw new InvalidArgumentError('invalid onError method')\n    }\n\n    this.#handler.onError?.(err)\n  }\n}\n\nfunction toRawHeaderValue (value) {\n  return Array.isArray(value)\n    ? value.map((item) => Buffer.from(item, 'latin1'))\n    : Buffer.from(value, 'latin1')\n}\n", "'use strict'\nconst EventEmitter = require('node:events')\nconst WrapHandler = require('../handler/wrap-handler')\n\nconst wrapInterceptor = (dispatch) => (opts, handler) => dispatch(opts, WrapHandler.wrap(handler))\n\nclass Dispatcher extends EventEmitter {\n  dispatch () {\n    throw new Error('not implemented')\n  }\n\n  close () {\n    throw new Error('not implemented')\n  }\n\n  destroy () {\n    throw new Error('not implemented')\n  }\n\n  compose (...args) {\n    // So we handle [interceptor1, interceptor2] or interceptor1, interceptor2, ...\n    const interceptors = Array.isArray(args[0]) ? args[0] : args\n    let dispatch = this.dispatch.bind(this)\n\n    for (const interceptor of interceptors) {\n      if (interceptor == null) {\n        continue\n      }\n\n      if (typeof interceptor !== 'function') {\n        throw new TypeError(`invalid interceptor, expected function received ${typeof interceptor}`)\n      }\n\n      dispatch = interceptor(dispatch)\n      dispatch = wrapInterceptor(dispatch)\n\n      if (dispatch == null || typeof dispatch !== 'function' || dispatch.length !== 2) {\n        throw new TypeError('invalid interceptor')\n      }\n    }\n\n    return new Proxy(this, {\n      get: (target, key) => key === 'dispatch' ? dispatch : target[key]\n    })\n  }\n}\n\nmodule.exports = Dispatcher\n", "'use strict'\n\nconst { parseHeaders } = require('../core/util')\nconst { InvalidArgumentError } = require('../core/errors')\n\nconst kResume = Symbol('resume')\n\nclass UnwrapController {\n  #paused = false\n  #reason = null\n  #aborted = false\n  #abort\n\n  [kResume] = null\n\n  constructor (abort) {\n    this.#abort = abort\n  }\n\n  pause () {\n    this.#paused = true\n  }\n\n  resume () {\n    if (this.#paused) {\n      this.#paused = false\n      this[kResume]?.()\n    }\n  }\n\n  abort (reason) {\n    if (!this.#aborted) {\n      this.#aborted = true\n      this.#reason = reason\n      this.#abort(reason)\n    }\n  }\n\n  get aborted () {\n    return this.#aborted\n  }\n\n  get reason () {\n    return this.#reason\n  }\n\n  get paused () {\n    return this.#paused\n  }\n}\n\nmodule.exports = class UnwrapHandler {\n  #handler\n  #controller\n\n  constructor (handler) {\n    this.#handler = handler\n  }\n\n  static unwrap (handler) {\n    // TODO (fix): More checks...\n    return !handler.onRequestStart ? handler : new UnwrapHandler(handler)\n  }\n\n  onConnect (abort, context) {\n    this.#controller = new UnwrapController(abort)\n    this.#handler.onRequestStart?.(this.#controller, context)\n  }\n\n  onResponseStarted () {\n    return this.#handler.onResponseStarted?.()\n  }\n\n  onUpgrade (statusCode, rawHeaders, socket) {\n    this.#handler.onRequestUpgrade?.(this.#controller, statusCode, parseHeaders(rawHeaders), socket)\n  }\n\n  onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n    this.#controller[kResume] = resume\n    this.#handler.onResponseStart?.(this.#controller, statusCode, parseHeaders(rawHeaders), statusMessage)\n    return !this.#controller.paused\n  }\n\n  onData (data) {\n    this.#handler.onResponseData?.(this.#controller, data)\n    return !this.#controller.paused\n  }\n\n  onComplete (rawTrailers) {\n    this.#handler.onResponseEnd?.(this.#controller, parseHeaders(rawTrailers))\n  }\n\n  onError (err) {\n    if (!this.#handler.onResponseError) {\n      throw new InvalidArgumentError('invalid onError method')\n    }\n\n    this.#handler.onResponseError?.(this.#controller, err)\n  }\n}\n", "'use strict'\n\nconst Dispatcher = require('./dispatcher')\nconst UnwrapHandler = require('../handler/unwrap-handler')\nconst {\n  ClientDestroyedError,\n  ClientClosedError,\n  InvalidArgumentError\n} = require('../core/errors')\nconst { kDestroy, kClose, kClosed, kDestroyed, kDispatch } = require('../core/symbols')\n\nconst kOnDestroyed = Symbol('onDestroyed')\nconst kOnClosed = Symbol('onClosed')\n\nclass DispatcherBase extends Dispatcher {\n  /** @type {boolean} */\n  [kDestroyed] = false;\n\n  /** @type {Array<Function|null} */\n  [kOnDestroyed] = null;\n\n  /** @type {boolean} */\n  [kClosed] = false;\n\n  /** @type {Array<Function>|null} */\n  [kOnClosed] = null\n\n  /** @returns {boolean} */\n  get destroyed () {\n    return this[kDestroyed]\n  }\n\n  /** @returns {boolean} */\n  get closed () {\n    return this[kClosed]\n  }\n\n  close (callback) {\n    if (callback === undefined) {\n      return new Promise((resolve, reject) => {\n        this.close((err, data) => {\n          return err ? reject(err) : resolve(data)\n        })\n      })\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    if (this[kDestroyed]) {\n      const err = new ClientDestroyedError()\n      queueMicrotask(() => callback(err, null))\n      return\n    }\n\n    if (this[kClosed]) {\n      if (this[kOnClosed]) {\n        this[kOnClosed].push(callback)\n      } else {\n        queueMicrotask(() => callback(null, null))\n      }\n      return\n    }\n\n    this[kClosed] = true\n    this[kOnClosed] ??= []\n    this[kOnClosed].push(callback)\n\n    const onClosed = () => {\n      const callbacks = this[kOnClosed]\n      this[kOnClosed] = null\n      for (let i = 0; i < callbacks.length; i++) {\n        callbacks[i](null, null)\n      }\n    }\n\n    // Should not error.\n    this[kClose]()\n      .then(() => this.destroy())\n      .then(() => queueMicrotask(onClosed))\n  }\n\n  destroy (err, callback) {\n    if (typeof err === 'function') {\n      callback = err\n      err = null\n    }\n\n    if (callback === undefined) {\n      return new Promise((resolve, reject) => {\n        this.destroy(err, (err, data) => {\n          return err ? reject(err) : resolve(data)\n        })\n      })\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    if (this[kDestroyed]) {\n      if (this[kOnDestroyed]) {\n        this[kOnDestroyed].push(callback)\n      } else {\n        queueMicrotask(() => callback(null, null))\n      }\n      return\n    }\n\n    if (!err) {\n      err = new ClientDestroyedError()\n    }\n\n    this[kDestroyed] = true\n    this[kOnDestroyed] ??= []\n    this[kOnDestroyed].push(callback)\n\n    const onDestroyed = () => {\n      const callbacks = this[kOnDestroyed]\n      this[kOnDestroyed] = null\n      for (let i = 0; i < callbacks.length; i++) {\n        callbacks[i](null, null)\n      }\n    }\n\n    // Should not error.\n    this[kDestroy](err)\n      .then(() => queueMicrotask(onDestroyed))\n  }\n\n  dispatch (opts, handler) {\n    if (!handler || typeof handler !== 'object') {\n      throw new InvalidArgumentError('handler must be an object')\n    }\n\n    handler = UnwrapHandler.unwrap(handler)\n\n    try {\n      if (!opts || typeof opts !== 'object') {\n        throw new InvalidArgumentError('opts must be an object.')\n      }\n\n      if (this[kDestroyed] || this[kOnDestroyed]) {\n        throw new ClientDestroyedError()\n      }\n\n      if (this[kClosed]) {\n        throw new ClientClosedError()\n      }\n\n      return this[kDispatch](opts, handler)\n    } catch (err) {\n      if (typeof handler.onError !== 'function') {\n        throw err\n      }\n\n      handler.onError(err)\n\n      return false\n    }\n  }\n}\n\nmodule.exports = DispatcherBase\n", "'use strict'\n\nconst net = require('node:net')\nconst assert = require('node:assert')\nconst util = require('./util')\nconst { InvalidArgumentError } = require('./errors')\n\nlet tls // include tls conditionally since it is not always available\n\n// TODO: session re-use does not wait for the first\n// connection to resolve the session and might therefore\n// resolve the same servername multiple times even when\n// re-use is enabled.\n\nconst SessionCache = class WeakSessionCache {\n  constructor (maxCachedSessions) {\n    this._maxCachedSessions = maxCachedSessions\n    this._sessionCache = new Map()\n    this._sessionRegistry = new FinalizationRegistry((key) => {\n      if (this._sessionCache.size < this._maxCachedSessions) {\n        return\n      }\n\n      const ref = this._sessionCache.get(key)\n      if (ref !== undefined && ref.deref() === undefined) {\n        this._sessionCache.delete(key)\n      }\n    })\n  }\n\n  get (sessionKey) {\n    const ref = this._sessionCache.get(sessionKey)\n    return ref ? ref.deref() : null\n  }\n\n  set (sessionKey, session) {\n    if (this._maxCachedSessions === 0) {\n      return\n    }\n\n    this._sessionCache.set(sessionKey, new WeakRef(session))\n    this._sessionRegistry.register(session, sessionKey)\n  }\n}\n\nfunction buildConnector ({ allowH2, useH2c, maxCachedSessions, socketPath, timeout, session: customSession, ...opts }) {\n  if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) {\n    throw new InvalidArgumentError('maxCachedSessions must be a positive integer or zero')\n  }\n\n  const options = { path: socketPath, ...opts }\n  const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions)\n  timeout = timeout == null ? 10e3 : timeout\n  allowH2 = allowH2 != null ? allowH2 : false\n  return function connect ({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) {\n    let socket\n    if (protocol === 'https:') {\n      if (!tls) {\n        tls = require('node:tls')\n      }\n      servername = servername || options.servername || util.getServerName(host) || null\n\n      const sessionKey = servername || hostname\n      assert(sessionKey)\n\n      const session = customSession || sessionCache.get(sessionKey) || null\n\n      port = port || 443\n\n      socket = tls.connect({\n        highWaterMark: 16384, // TLS in node can't have bigger HWM anyway...\n        ...options,\n        servername,\n        session,\n        localAddress,\n        ALPNProtocols: allowH2 ? ['http/1.1', 'h2'] : ['http/1.1'],\n        socket: httpSocket, // upgrade socket connection\n        port,\n        host: hostname\n      })\n\n      socket\n        .on('session', function (session) {\n          // TODO (fix): Can a session become invalid once established? Don't think so?\n          sessionCache.set(sessionKey, session)\n        })\n    } else {\n      assert(!httpSocket, 'httpSocket can only be sent on TLS update')\n\n      port = port || 80\n\n      socket = net.connect({\n        highWaterMark: 64 * 1024, // Same as nodejs fs streams.\n        ...options,\n        localAddress,\n        port,\n        host: hostname\n      })\n      if (useH2c === true) {\n        socket.alpnProtocol = 'h2'\n      }\n    }\n\n    // Set TCP keep alive options on the socket here instead of in connect() for the case of assigning the socket\n    if (options.keepAlive == null || options.keepAlive) {\n      const keepAliveInitialDelay = options.keepAliveInitialDelay === undefined ? 60e3 : options.keepAliveInitialDelay\n      socket.setKeepAlive(true, keepAliveInitialDelay)\n    }\n\n    const clearConnectTimeout = util.setupConnectTimeout(new WeakRef(socket), { timeout, hostname, port })\n\n    socket\n      .setNoDelay(true)\n      .once(protocol === 'https:' ? 'secureConnect' : 'connect', function () {\n        queueMicrotask(clearConnectTimeout)\n\n        if (callback) {\n          const cb = callback\n          callback = null\n          cb(null, this)\n        }\n      })\n      .on('error', function (err) {\n        queueMicrotask(clearConnectTimeout)\n\n        if (callback) {\n          const cb = callback\n          callback = null\n          cb(err)\n        }\n      })\n\n    return socket\n  }\n}\n\nmodule.exports = buildConnector\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.enumToMap = enumToMap;\nfunction enumToMap(obj, filter = [], exceptions = []) {\n    const emptyFilter = (filter?.length ?? 0) === 0;\n    const emptyExceptions = (exceptions?.length ?? 0) === 0;\n    return Object.fromEntries(Object.entries(obj).filter(([, value]) => {\n        return (typeof value === 'number' &&\n            (emptyFilter || filter.includes(value)) &&\n            (emptyExceptions || !exceptions.includes(value)));\n    }));\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SPECIAL_HEADERS = exports.MINOR = exports.MAJOR = exports.HTAB_SP_VCHAR_OBS_TEXT = exports.QUOTED_STRING = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.HEX = exports.URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.STATUSES_HTTP = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.HEADER_STATE = exports.FINISH = exports.STATUSES = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0;\nconst utils_1 = require(\"./utils\");\n// Emums\nexports.ERROR = {\n    OK: 0,\n    INTERNAL: 1,\n    STRICT: 2,\n    CR_EXPECTED: 25,\n    LF_EXPECTED: 3,\n    UNEXPECTED_CONTENT_LENGTH: 4,\n    UNEXPECTED_SPACE: 30,\n    CLOSED_CONNECTION: 5,\n    INVALID_METHOD: 6,\n    INVALID_URL: 7,\n    INVALID_CONSTANT: 8,\n    INVALID_VERSION: 9,\n    INVALID_HEADER_TOKEN: 10,\n    INVALID_CONTENT_LENGTH: 11,\n    INVALID_CHUNK_SIZE: 12,\n    INVALID_STATUS: 13,\n    INVALID_EOF_STATE: 14,\n    INVALID_TRANSFER_ENCODING: 15,\n    CB_MESSAGE_BEGIN: 16,\n    CB_HEADERS_COMPLETE: 17,\n    CB_MESSAGE_COMPLETE: 18,\n    CB_CHUNK_HEADER: 19,\n    CB_CHUNK_COMPLETE: 20,\n    PAUSED: 21,\n    PAUSED_UPGRADE: 22,\n    PAUSED_H2_UPGRADE: 23,\n    USER: 24,\n    CB_URL_COMPLETE: 26,\n    CB_STATUS_COMPLETE: 27,\n    CB_METHOD_COMPLETE: 32,\n    CB_VERSION_COMPLETE: 33,\n    CB_HEADER_FIELD_COMPLETE: 28,\n    CB_HEADER_VALUE_COMPLETE: 29,\n    CB_CHUNK_EXTENSION_NAME_COMPLETE: 34,\n    CB_CHUNK_EXTENSION_VALUE_COMPLETE: 35,\n    CB_RESET: 31,\n    CB_PROTOCOL_COMPLETE: 38,\n};\nexports.TYPE = {\n    BOTH: 0, // default\n    REQUEST: 1,\n    RESPONSE: 2,\n};\nexports.FLAGS = {\n    CONNECTION_KEEP_ALIVE: 1 << 0,\n    CONNECTION_CLOSE: 1 << 1,\n    CONNECTION_UPGRADE: 1 << 2,\n    CHUNKED: 1 << 3,\n    UPGRADE: 1 << 4,\n    CONTENT_LENGTH: 1 << 5,\n    SKIPBODY: 1 << 6,\n    TRAILING: 1 << 7,\n    // 1 << 8 is unused\n    TRANSFER_ENCODING: 1 << 9,\n};\nexports.LENIENT_FLAGS = {\n    HEADERS: 1 << 0,\n    CHUNKED_LENGTH: 1 << 1,\n    KEEP_ALIVE: 1 << 2,\n    TRANSFER_ENCODING: 1 << 3,\n    VERSION: 1 << 4,\n    DATA_AFTER_CLOSE: 1 << 5,\n    OPTIONAL_LF_AFTER_CR: 1 << 6,\n    OPTIONAL_CRLF_AFTER_CHUNK: 1 << 7,\n    OPTIONAL_CR_BEFORE_LF: 1 << 8,\n    SPACES_AFTER_CHUNK_SIZE: 1 << 9,\n};\nexports.METHODS = {\n    'DELETE': 0,\n    'GET': 1,\n    'HEAD': 2,\n    'POST': 3,\n    'PUT': 4,\n    /* pathological */\n    'CONNECT': 5,\n    'OPTIONS': 6,\n    'TRACE': 7,\n    /* WebDAV */\n    'COPY': 8,\n    'LOCK': 9,\n    'MKCOL': 10,\n    'MOVE': 11,\n    'PROPFIND': 12,\n    'PROPPATCH': 13,\n    'SEARCH': 14,\n    'UNLOCK': 15,\n    'BIND': 16,\n    'REBIND': 17,\n    'UNBIND': 18,\n    'ACL': 19,\n    /* subversion */\n    'REPORT': 20,\n    'MKACTIVITY': 21,\n    'CHECKOUT': 22,\n    'MERGE': 23,\n    /* upnp */\n    'M-SEARCH': 24,\n    'NOTIFY': 25,\n    'SUBSCRIBE': 26,\n    'UNSUBSCRIBE': 27,\n    /* RFC-5789 */\n    'PATCH': 28,\n    'PURGE': 29,\n    /* CalDAV */\n    'MKCALENDAR': 30,\n    /* RFC-2068, section 19.6.1.2 */\n    'LINK': 31,\n    'UNLINK': 32,\n    /* icecast */\n    'SOURCE': 33,\n    /* RFC-7540, section 11.6 */\n    'PRI': 34,\n    /* RFC-2326 RTSP */\n    'DESCRIBE': 35,\n    'ANNOUNCE': 36,\n    'SETUP': 37,\n    'PLAY': 38,\n    'PAUSE': 39,\n    'TEARDOWN': 40,\n    'GET_PARAMETER': 41,\n    'SET_PARAMETER': 42,\n    'REDIRECT': 43,\n    'RECORD': 44,\n    /* RAOP */\n    'FLUSH': 45,\n    /* DRAFT https://www.ietf.org/archive/id/draft-ietf-httpbis-safe-method-w-body-02.html */\n    'QUERY': 46,\n};\nexports.STATUSES = {\n    CONTINUE: 100,\n    SWITCHING_PROTOCOLS: 101,\n    PROCESSING: 102,\n    EARLY_HINTS: 103,\n    RESPONSE_IS_STALE: 110, // Unofficial\n    REVALIDATION_FAILED: 111, // Unofficial\n    DISCONNECTED_OPERATION: 112, // Unofficial\n    HEURISTIC_EXPIRATION: 113, // Unofficial\n    MISCELLANEOUS_WARNING: 199, // Unofficial\n    OK: 200,\n    CREATED: 201,\n    ACCEPTED: 202,\n    NON_AUTHORITATIVE_INFORMATION: 203,\n    NO_CONTENT: 204,\n    RESET_CONTENT: 205,\n    PARTIAL_CONTENT: 206,\n    MULTI_STATUS: 207,\n    ALREADY_REPORTED: 208,\n    TRANSFORMATION_APPLIED: 214, // Unofficial\n    IM_USED: 226,\n    MISCELLANEOUS_PERSISTENT_WARNING: 299, // Unofficial\n    MULTIPLE_CHOICES: 300,\n    MOVED_PERMANENTLY: 301,\n    FOUND: 302,\n    SEE_OTHER: 303,\n    NOT_MODIFIED: 304,\n    USE_PROXY: 305,\n    SWITCH_PROXY: 306, // No longer used\n    TEMPORARY_REDIRECT: 307,\n    PERMANENT_REDIRECT: 308,\n    BAD_REQUEST: 400,\n    UNAUTHORIZED: 401,\n    PAYMENT_REQUIRED: 402,\n    FORBIDDEN: 403,\n    NOT_FOUND: 404,\n    METHOD_NOT_ALLOWED: 405,\n    NOT_ACCEPTABLE: 406,\n    PROXY_AUTHENTICATION_REQUIRED: 407,\n    REQUEST_TIMEOUT: 408,\n    CONFLICT: 409,\n    GONE: 410,\n    LENGTH_REQUIRED: 411,\n    PRECONDITION_FAILED: 412,\n    PAYLOAD_TOO_LARGE: 413,\n    URI_TOO_LONG: 414,\n    UNSUPPORTED_MEDIA_TYPE: 415,\n    RANGE_NOT_SATISFIABLE: 416,\n    EXPECTATION_FAILED: 417,\n    IM_A_TEAPOT: 418,\n    PAGE_EXPIRED: 419, // Unofficial\n    ENHANCE_YOUR_CALM: 420, // Unofficial\n    MISDIRECTED_REQUEST: 421,\n    UNPROCESSABLE_ENTITY: 422,\n    LOCKED: 423,\n    FAILED_DEPENDENCY: 424,\n    TOO_EARLY: 425,\n    UPGRADE_REQUIRED: 426,\n    PRECONDITION_REQUIRED: 428,\n    TOO_MANY_REQUESTS: 429,\n    REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL: 430, // Unofficial\n    REQUEST_HEADER_FIELDS_TOO_LARGE: 431,\n    LOGIN_TIMEOUT: 440, // Unofficial\n    NO_RESPONSE: 444, // Unofficial\n    RETRY_WITH: 449, // Unofficial\n    BLOCKED_BY_PARENTAL_CONTROL: 450, // Unofficial\n    UNAVAILABLE_FOR_LEGAL_REASONS: 451,\n    CLIENT_CLOSED_LOAD_BALANCED_REQUEST: 460, // Unofficial\n    INVALID_X_FORWARDED_FOR: 463, // Unofficial\n    REQUEST_HEADER_TOO_LARGE: 494, // Unofficial\n    SSL_CERTIFICATE_ERROR: 495, // Unofficial\n    SSL_CERTIFICATE_REQUIRED: 496, // Unofficial\n    HTTP_REQUEST_SENT_TO_HTTPS_PORT: 497, // Unofficial\n    INVALID_TOKEN: 498, // Unofficial\n    CLIENT_CLOSED_REQUEST: 499, // Unofficial\n    INTERNAL_SERVER_ERROR: 500,\n    NOT_IMPLEMENTED: 501,\n    BAD_GATEWAY: 502,\n    SERVICE_UNAVAILABLE: 503,\n    GATEWAY_TIMEOUT: 504,\n    HTTP_VERSION_NOT_SUPPORTED: 505,\n    VARIANT_ALSO_NEGOTIATES: 506,\n    INSUFFICIENT_STORAGE: 507,\n    LOOP_DETECTED: 508,\n    BANDWIDTH_LIMIT_EXCEEDED: 509,\n    NOT_EXTENDED: 510,\n    NETWORK_AUTHENTICATION_REQUIRED: 511,\n    WEB_SERVER_UNKNOWN_ERROR: 520, // Unofficial\n    WEB_SERVER_IS_DOWN: 521, // Unofficial\n    CONNECTION_TIMEOUT: 522, // Unofficial\n    ORIGIN_IS_UNREACHABLE: 523, // Unofficial\n    TIMEOUT_OCCURED: 524, // Unofficial\n    SSL_HANDSHAKE_FAILED: 525, // Unofficial\n    INVALID_SSL_CERTIFICATE: 526, // Unofficial\n    RAILGUN_ERROR: 527, // Unofficial\n    SITE_IS_OVERLOADED: 529, // Unofficial\n    SITE_IS_FROZEN: 530, // Unofficial\n    IDENTITY_PROVIDER_AUTHENTICATION_ERROR: 561, // Unofficial\n    NETWORK_READ_TIMEOUT: 598, // Unofficial\n    NETWORK_CONNECT_TIMEOUT: 599, // Unofficial\n};\nexports.FINISH = {\n    SAFE: 0,\n    SAFE_WITH_CB: 1,\n    UNSAFE: 2,\n};\nexports.HEADER_STATE = {\n    GENERAL: 0,\n    CONNECTION: 1,\n    CONTENT_LENGTH: 2,\n    TRANSFER_ENCODING: 3,\n    UPGRADE: 4,\n    CONNECTION_KEEP_ALIVE: 5,\n    CONNECTION_CLOSE: 6,\n    CONNECTION_UPGRADE: 7,\n    TRANSFER_ENCODING_CHUNKED: 8,\n};\n// C headers\nexports.METHODS_HTTP = [\n    exports.METHODS.DELETE,\n    exports.METHODS.GET,\n    exports.METHODS.HEAD,\n    exports.METHODS.POST,\n    exports.METHODS.PUT,\n    exports.METHODS.CONNECT,\n    exports.METHODS.OPTIONS,\n    exports.METHODS.TRACE,\n    exports.METHODS.COPY,\n    exports.METHODS.LOCK,\n    exports.METHODS.MKCOL,\n    exports.METHODS.MOVE,\n    exports.METHODS.PROPFIND,\n    exports.METHODS.PROPPATCH,\n    exports.METHODS.SEARCH,\n    exports.METHODS.UNLOCK,\n    exports.METHODS.BIND,\n    exports.METHODS.REBIND,\n    exports.METHODS.UNBIND,\n    exports.METHODS.ACL,\n    exports.METHODS.REPORT,\n    exports.METHODS.MKACTIVITY,\n    exports.METHODS.CHECKOUT,\n    exports.METHODS.MERGE,\n    exports.METHODS['M-SEARCH'],\n    exports.METHODS.NOTIFY,\n    exports.METHODS.SUBSCRIBE,\n    exports.METHODS.UNSUBSCRIBE,\n    exports.METHODS.PATCH,\n    exports.METHODS.PURGE,\n    exports.METHODS.MKCALENDAR,\n    exports.METHODS.LINK,\n    exports.METHODS.UNLINK,\n    exports.METHODS.PRI,\n    // TODO(indutny): should we allow it with HTTP?\n    exports.METHODS.SOURCE,\n    exports.METHODS.QUERY,\n];\nexports.METHODS_ICE = [\n    exports.METHODS.SOURCE,\n];\nexports.METHODS_RTSP = [\n    exports.METHODS.OPTIONS,\n    exports.METHODS.DESCRIBE,\n    exports.METHODS.ANNOUNCE,\n    exports.METHODS.SETUP,\n    exports.METHODS.PLAY,\n    exports.METHODS.PAUSE,\n    exports.METHODS.TEARDOWN,\n    exports.METHODS.GET_PARAMETER,\n    exports.METHODS.SET_PARAMETER,\n    exports.METHODS.REDIRECT,\n    exports.METHODS.RECORD,\n    exports.METHODS.FLUSH,\n    // For AirPlay\n    exports.METHODS.GET,\n    exports.METHODS.POST,\n];\nexports.METHOD_MAP = (0, utils_1.enumToMap)(exports.METHODS);\nexports.H_METHOD_MAP = Object.fromEntries(Object.entries(exports.METHODS).filter(([k]) => k.startsWith('H')));\nexports.STATUSES_HTTP = [\n    exports.STATUSES.CONTINUE,\n    exports.STATUSES.SWITCHING_PROTOCOLS,\n    exports.STATUSES.PROCESSING,\n    exports.STATUSES.EARLY_HINTS,\n    exports.STATUSES.RESPONSE_IS_STALE,\n    exports.STATUSES.REVALIDATION_FAILED,\n    exports.STATUSES.DISCONNECTED_OPERATION,\n    exports.STATUSES.HEURISTIC_EXPIRATION,\n    exports.STATUSES.MISCELLANEOUS_WARNING,\n    exports.STATUSES.OK,\n    exports.STATUSES.CREATED,\n    exports.STATUSES.ACCEPTED,\n    exports.STATUSES.NON_AUTHORITATIVE_INFORMATION,\n    exports.STATUSES.NO_CONTENT,\n    exports.STATUSES.RESET_CONTENT,\n    exports.STATUSES.PARTIAL_CONTENT,\n    exports.STATUSES.MULTI_STATUS,\n    exports.STATUSES.ALREADY_REPORTED,\n    exports.STATUSES.TRANSFORMATION_APPLIED,\n    exports.STATUSES.IM_USED,\n    exports.STATUSES.MISCELLANEOUS_PERSISTENT_WARNING,\n    exports.STATUSES.MULTIPLE_CHOICES,\n    exports.STATUSES.MOVED_PERMANENTLY,\n    exports.STATUSES.FOUND,\n    exports.STATUSES.SEE_OTHER,\n    exports.STATUSES.NOT_MODIFIED,\n    exports.STATUSES.USE_PROXY,\n    exports.STATUSES.SWITCH_PROXY,\n    exports.STATUSES.TEMPORARY_REDIRECT,\n    exports.STATUSES.PERMANENT_REDIRECT,\n    exports.STATUSES.BAD_REQUEST,\n    exports.STATUSES.UNAUTHORIZED,\n    exports.STATUSES.PAYMENT_REQUIRED,\n    exports.STATUSES.FORBIDDEN,\n    exports.STATUSES.NOT_FOUND,\n    exports.STATUSES.METHOD_NOT_ALLOWED,\n    exports.STATUSES.NOT_ACCEPTABLE,\n    exports.STATUSES.PROXY_AUTHENTICATION_REQUIRED,\n    exports.STATUSES.REQUEST_TIMEOUT,\n    exports.STATUSES.CONFLICT,\n    exports.STATUSES.GONE,\n    exports.STATUSES.LENGTH_REQUIRED,\n    exports.STATUSES.PRECONDITION_FAILED,\n    exports.STATUSES.PAYLOAD_TOO_LARGE,\n    exports.STATUSES.URI_TOO_LONG,\n    exports.STATUSES.UNSUPPORTED_MEDIA_TYPE,\n    exports.STATUSES.RANGE_NOT_SATISFIABLE,\n    exports.STATUSES.EXPECTATION_FAILED,\n    exports.STATUSES.IM_A_TEAPOT,\n    exports.STATUSES.PAGE_EXPIRED,\n    exports.STATUSES.ENHANCE_YOUR_CALM,\n    exports.STATUSES.MISDIRECTED_REQUEST,\n    exports.STATUSES.UNPROCESSABLE_ENTITY,\n    exports.STATUSES.LOCKED,\n    exports.STATUSES.FAILED_DEPENDENCY,\n    exports.STATUSES.TOO_EARLY,\n    exports.STATUSES.UPGRADE_REQUIRED,\n    exports.STATUSES.PRECONDITION_REQUIRED,\n    exports.STATUSES.TOO_MANY_REQUESTS,\n    exports.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL,\n    exports.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE,\n    exports.STATUSES.LOGIN_TIMEOUT,\n    exports.STATUSES.NO_RESPONSE,\n    exports.STATUSES.RETRY_WITH,\n    exports.STATUSES.BLOCKED_BY_PARENTAL_CONTROL,\n    exports.STATUSES.UNAVAILABLE_FOR_LEGAL_REASONS,\n    exports.STATUSES.CLIENT_CLOSED_LOAD_BALANCED_REQUEST,\n    exports.STATUSES.INVALID_X_FORWARDED_FOR,\n    exports.STATUSES.REQUEST_HEADER_TOO_LARGE,\n    exports.STATUSES.SSL_CERTIFICATE_ERROR,\n    exports.STATUSES.SSL_CERTIFICATE_REQUIRED,\n    exports.STATUSES.HTTP_REQUEST_SENT_TO_HTTPS_PORT,\n    exports.STATUSES.INVALID_TOKEN,\n    exports.STATUSES.CLIENT_CLOSED_REQUEST,\n    exports.STATUSES.INTERNAL_SERVER_ERROR,\n    exports.STATUSES.NOT_IMPLEMENTED,\n    exports.STATUSES.BAD_GATEWAY,\n    exports.STATUSES.SERVICE_UNAVAILABLE,\n    exports.STATUSES.GATEWAY_TIMEOUT,\n    exports.STATUSES.HTTP_VERSION_NOT_SUPPORTED,\n    exports.STATUSES.VARIANT_ALSO_NEGOTIATES,\n    exports.STATUSES.INSUFFICIENT_STORAGE,\n    exports.STATUSES.LOOP_DETECTED,\n    exports.STATUSES.BANDWIDTH_LIMIT_EXCEEDED,\n    exports.STATUSES.NOT_EXTENDED,\n    exports.STATUSES.NETWORK_AUTHENTICATION_REQUIRED,\n    exports.STATUSES.WEB_SERVER_UNKNOWN_ERROR,\n    exports.STATUSES.WEB_SERVER_IS_DOWN,\n    exports.STATUSES.CONNECTION_TIMEOUT,\n    exports.STATUSES.ORIGIN_IS_UNREACHABLE,\n    exports.STATUSES.TIMEOUT_OCCURED,\n    exports.STATUSES.SSL_HANDSHAKE_FAILED,\n    exports.STATUSES.INVALID_SSL_CERTIFICATE,\n    exports.STATUSES.RAILGUN_ERROR,\n    exports.STATUSES.SITE_IS_OVERLOADED,\n    exports.STATUSES.SITE_IS_FROZEN,\n    exports.STATUSES.IDENTITY_PROVIDER_AUTHENTICATION_ERROR,\n    exports.STATUSES.NETWORK_READ_TIMEOUT,\n    exports.STATUSES.NETWORK_CONNECT_TIMEOUT,\n];\nexports.ALPHA = [];\nfor (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) {\n    // Upper case\n    exports.ALPHA.push(String.fromCharCode(i));\n    // Lower case\n    exports.ALPHA.push(String.fromCharCode(i + 0x20));\n}\nexports.NUM_MAP = {\n    0: 0, 1: 1, 2: 2, 3: 3, 4: 4,\n    5: 5, 6: 6, 7: 7, 8: 8, 9: 9,\n};\nexports.HEX_MAP = {\n    0: 0, 1: 1, 2: 2, 3: 3, 4: 4,\n    5: 5, 6: 6, 7: 7, 8: 8, 9: 9,\n    A: 0XA, B: 0XB, C: 0XC, D: 0XD, E: 0XE, F: 0XF,\n    a: 0xa, b: 0xb, c: 0xc, d: 0xd, e: 0xe, f: 0xf,\n};\nexports.NUM = [\n    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n];\nexports.ALPHANUM = exports.ALPHA.concat(exports.NUM);\nexports.MARK = ['-', '_', '.', '!', '~', '*', '\\'', '(', ')'];\nexports.USERINFO_CHARS = exports.ALPHANUM\n    .concat(exports.MARK)\n    .concat(['%', ';', ':', '&', '=', '+', '$', ',']);\n// TODO(indutny): use RFC\nexports.URL_CHAR = [\n    '!', '\"', '$', '%', '&', '\\'',\n    '(', ')', '*', '+', ',', '-', '.', '/',\n    ':', ';', '<', '=', '>',\n    '@', '[', '\\\\', ']', '^', '_',\n    '`',\n    '{', '|', '}', '~',\n].concat(exports.ALPHANUM);\nexports.HEX = exports.NUM.concat(['a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F']);\n/* Tokens as defined by rfc 2616. Also lowercases them.\n *        token       = 1*<any CHAR except CTLs or separators>\n *     separators     = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *                    | \",\" | \";\" | \":\" | \"\\\" | <\">\n *                    | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *                    | \"{\" | \"}\" | SP | HT\n */\nexports.TOKEN = [\n    '!', '#', '$', '%', '&', '\\'',\n    '*', '+', '-', '.',\n    '^', '_', '`',\n    '|', '~',\n].concat(exports.ALPHANUM);\n/*\n * Verify that a char is a valid visible (printable) US-ASCII\n * character or %x80-FF\n */\nexports.HEADER_CHARS = ['\\t'];\nfor (let i = 32; i <= 255; i++) {\n    if (i !== 127) {\n        exports.HEADER_CHARS.push(i);\n    }\n}\n// ',' = \\x44\nexports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS.filter((c) => c !== 44);\nexports.QUOTED_STRING = ['\\t', ' '];\nfor (let i = 0x21; i <= 0xff; i++) {\n    if (i !== 0x22 && i !== 0x5c) { // All characters in ASCII except \\ and \"\n        exports.QUOTED_STRING.push(i);\n    }\n}\nexports.HTAB_SP_VCHAR_OBS_TEXT = ['\\t', ' '];\n// VCHAR: https://tools.ietf.org/html/rfc5234#appendix-B.1\nfor (let i = 0x21; i <= 0x7E; i++) {\n    exports.HTAB_SP_VCHAR_OBS_TEXT.push(i);\n}\n// OBS_TEXT: https://datatracker.ietf.org/doc/html/rfc9110#name-collected-abnf\nfor (let i = 0x80; i <= 0xff; i++) {\n    exports.HTAB_SP_VCHAR_OBS_TEXT.push(i);\n}\nexports.MAJOR = exports.NUM_MAP;\nexports.MINOR = exports.MAJOR;\nexports.SPECIAL_HEADERS = {\n    'connection': exports.HEADER_STATE.CONNECTION,\n    'content-length': exports.HEADER_STATE.CONTENT_LENGTH,\n    'proxy-connection': exports.HEADER_STATE.CONNECTION,\n    'transfer-encoding': exports.HEADER_STATE.TRANSFER_ENCODING,\n    'upgrade': exports.HEADER_STATE.UPGRADE,\n};\nexports.default = {\n    ERROR: exports.ERROR,\n    TYPE: exports.TYPE,\n    FLAGS: exports.FLAGS,\n    LENIENT_FLAGS: exports.LENIENT_FLAGS,\n    METHODS: exports.METHODS,\n    STATUSES: exports.STATUSES,\n    FINISH: exports.FINISH,\n    HEADER_STATE: exports.HEADER_STATE,\n    ALPHA: exports.ALPHA,\n    NUM_MAP: exports.NUM_MAP,\n    HEX_MAP: exports.HEX_MAP,\n    NUM: exports.NUM,\n    ALPHANUM: exports.ALPHANUM,\n    MARK: exports.MARK,\n    USERINFO_CHARS: exports.USERINFO_CHARS,\n    URL_CHAR: exports.URL_CHAR,\n    HEX: exports.HEX,\n    TOKEN: exports.TOKEN,\n    HEADER_CHARS: exports.HEADER_CHARS,\n    CONNECTION_TOKEN_CHARS: exports.CONNECTION_TOKEN_CHARS,\n    QUOTED_STRING: exports.QUOTED_STRING,\n    HTAB_SP_VCHAR_OBS_TEXT: exports.HTAB_SP_VCHAR_OBS_TEXT,\n    MAJOR: exports.MAJOR,\n    MINOR: exports.MINOR,\n    SPECIAL_HEADERS: exports.SPECIAL_HEADERS,\n    METHODS_HTTP: exports.METHODS_HTTP,\n    METHODS_ICE: exports.METHODS_ICE,\n    METHODS_RTSP: exports.METHODS_RTSP,\n    METHOD_MAP: exports.METHOD_MAP,\n    H_METHOD_MAP: exports.H_METHOD_MAP,\n    STATUSES_HTTP: exports.STATUSES_HTTP,\n};\n", "'use strict'\n\nconst { Buffer } = require('node:buffer')\n\nconst wasmBase64 = 'AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgL5YUCAgd/A34gASACaiEEAkAgACIDKAIMIgANACADKAIEBEAgAyABNgIECyMAQRBrIgkkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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C0HjAQwHC0HXAQwGC0HYAQwFC0HZAQwEC0HaAQwDC0HbAQwCC0HdAQwBC0HcAQshAgNAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJ/AkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAg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ogKiAqICogKiAqICogKiAqICogKiAqICogIAogILIAQgAUEBaiIBRw0AC0HJACECDOwCCyABQQFqIQEgA0Evai0AAEEBcQ2lAiADQQA2AhwgAyABNgIUIANBlxA2AhAgA0EKNgIMQQAhAgzrAgsgASAERwRAA0AgAS0AAEEgRw0VIAQgAUEBaiIBRw0AC0H4ACECDOsCC0H4ACECDOoCCyADQQI6ACgMOAtBACECIANBADYCHCADQb8LNgIQIANBAjYCDCADIAFBAWo2AhQM6AILQQAhAgzOAgtBDSECDM0CC0ETIQIMzAILQRUhAgzLAgtBFiECDMoCC0EYIQIMyQILQRkhAgzIAgtBGiECDMcCC0EbIQIMxgILQRwhAgzFAgtBHSECDMQCC0EeIQIMwwILQR8hAgzCAgtBICECDMECC0EiIQIMwAILQSMhAgy/AgtBJSECDL4CC0HlACECDL0CCyADQT02AhwgAyABNgIUIAMgADYCDEEAIQIM1QILIANBGzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDNQCCyADQSA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzTAgsgA0ETNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0gILIANBCzYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNECCyADQRA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzQAgsgA0EgNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzwILIANBCzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM4CCyADQQw2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzNAgtBACECIANBADYCHCADIAE2AhQgA0HdDjYCECADQRI2AgwMzAILAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB/QEhAgzMAgsCQAJAIAMtADZBAUcNAEEAIQACQCADKAI4IgJFDQAgAigCYCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUcNASADQfwBNgIcIAMgATYCFCADQdwZNgIQIANBFTYCDEEAIQIMzQILQdwBIQIMswILIANBADYCHCADIAE2AhQgA0H5CzYCECADQR82AgxBACECDMsCCwJAAkAgAy0AKEEBaw4CBAEAC0HbASECDLICC0HUASECDLECCyADQQI6ADFBACEAAkAgAygCOCICRQ0AIAIoAgAiAkUNACADIAIRAAAhAAsgAEUEQEHdASECDLECCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQbQMNgIQIANBEDYCDEEAIQIMygILIANB+wE2AhwgAyABNgIUIANBgRo2AhAgA0EVNgIMQQAhAgzJAgsgASAERgRAQfoBIQIMyQILIAEtAABByABGDQEgA0EBOgAoC0HAASECDK4CC0HaASECDK0CCyABIARHBEAgA0EMNgIIIAMgATYCBEHZASECDK0CC0H5ASECDMUCCyABIARGBEBB+AEhAgzFAgsgAS0AAEHIAEcNBCABQQFqIQFB2AEhAgyrAgsgASAERgRAQfcBIQIMxAILAkACQCABLQAAQcUAaw4QAAUFBQUFBQUFBQUFBQUFAQULIAFBAWohAUHWASECDKsCCyABQQFqIQFB1wEhAgyqAgtB9gEhAiABIARGDcICIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbrVAGotAABHDQMgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMMCCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIARQRAQeMBIQIMqgILIANB9QE2AhwgAyABNgIUIAMgADYCDEEAIQIMwgILQfQBIQIgASAERg3BAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEG41QBqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzCAgsgA0GBBDsBKCADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIADQMMAgsgA0EANgIAC0EAIQIgA0EANgIcIAMgATYCFCADQeUfNgIQIANBCDYCDAy/AgtB1QEhAgylAgsgA0HzATYCHCADIAE2AhQgAyAANgIMQQAhAgy9AgtBACEAAkAgAygCOCICRQ0AIAIoAkAiAkUNACADIAIRAAAhAAsgAEUNbiAAQRVHBEAgA0EANgIcIAMgATYCFCADQYIPNgIQIANBIDYCDEEAIQIMvQILIANBjwE2AhwgAyABNgIUIANB7Bs2AhAgA0EVNgIMQQAhAgy8AgsgASAERwRAIANBDTYCCCADIAE2AgRB0wEhAgyjAgtB8gEhAgy7AgsgASAERgRAQfEBIQIMuwILAkACQAJAIAEtAABByABrDgsAAQgICAgICAgIAggLIAFBAWohAUHQASECDKMCCyABQQFqIQFB0QEhAgyiAgsgAUEBaiEBQdIBIQIMoQILQfABIQIgASAERg25AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBtdUAai0AAEcNBCAAQQJGDQMgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuQILQe8BIQIgASAERg24AiADKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABBs9UAai0AAEcNAyAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuAILQe4BIQIgASAERg23AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMtwILIAMoAgQhACADQgA3AwAgAyAAIAVBAWoiARArIgBFDQIgA0HsATYCHCADIAE2AhQgAyAANgIMQQAhAgy2AgsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNnAIgA0HtATYCHCADIAE2AhQgAyAANgIMQQAhAgy0AgtBzwEhAgyaAgtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDLQCC0HOASECDJoCCyADQesBNgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMsgILIAEgBEYEQEHrASECDLICCyABLQAAQS9GBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GyODYCECADQQg2AgxBACECDLECC0HNASECDJcCCyABIARHBEAgA0EONgIIIAMgATYCBEHMASECDJcCC0HqASECDK8CCyABIARGBEBB6QEhAgyvAgsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFBywEhAgyWAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZcCIANB6AE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAEgBEYEQEHnASECDK4CCwJAIAEtAABBLkYEQCABQQFqIQEMAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5gE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILQcoBIQIMlAILIAEgBEYEQEHlASECDK0CC0EAIQBBASEFQQEhB0EAIQICQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQCABLQAAQTBrDgoKCQABAgMEBQYICwtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshAkEAIQVBACEHDAILQQkhAkEBIQBBACEFQQAhBwwBC0EAIQVBASECCyADIAI6ACsgAUEBaiEBAkACQCADLQAuQRBxDQACQAJAAkAgAy0AKg4DAQACBAsgB0UNAwwCCyAADQEMAgsgBUUNAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDQIgA0HiATYCHCADIAE2AhQgAyAANgIMQQAhAgyvAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZoCIANB4wE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ2YAiADQeQBNgIcIAMgATYCFCADIAA2AgwMrQILQckBIQIMkwILQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANBpA02AhAgA0EhNgIMQQAhAgytAgtByAEhAgyTAgsgA0HhATYCHCADIAE2AhQgA0HQGjYCECADQRU2AgxBACECDKsCCyABIARGBEBB4QEhAgyrAgsCQCABLQAAQSBGBEAgA0EAOwE0IAFBAWohAQwBCyADQQA2AhwgAyABNgIUIANBmRE2AhAgA0EJNgIMQQAhAgyrAgtBxwEhAgyRAgsgASAERgRAQeABIQIMqgILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyrAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqgILQcYBIQIMkAILIAEgBEYEQEHfASECDKkCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqgILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKkCC0HFASECDI8CCyABIARGBEBB3gEhAgyoAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKkCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyoAgtBxAEhAgyOAgsgASAERgRAQd0BIQIMpwILAkACQAJAAkAgAS0AAEEKaw4XAgMDAAMDAwMDAwMDAwMDAwMDAwMDAwEDCyABQQFqDAULIAFBAWohAUHDASECDI8CCyABQQFqIQEgA0Evai0AAEEBcQ0IIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKcCCyADQQA2AhwgAyABNgIUIANBjQs2AhAgA0ENNgIMQQAhAgymAgsgASAERwRAIANBDzYCCCADIAE2AgRBASECDI0CC0HcASECDKUCCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtB2wEhAgymAgsgAygCBCEAIANBADYCBCADIAAgARAtIgBFBEAgAUEBaiEBDAQLIANB2gE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMpQILIAMoAgQhACADQQA2AgQgAyAAIAEQLSIADQEgAUEBagshAUHBASECDIoCCyADQdkBNgIcIAMgADYCDCADIAFBAWo2AhRBACECDKICC0HCASECDIgCCyADQS9qLQAAQQFxDQEgA0EANgIcIAMgATYCFCADQeQcNgIQIANBGTYCDEEAIQIMoAILIAEgBEYEQEHZASEC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IAFBAWohAUGeASECDOQBCyABQQFqIQFBnwEhAgzjAQtBtwEhAiABIARGDfsBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQezUAGotAABHDSggAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPwBCyADQQA2AgAgBkEBaiEBQQ0MKAtBtgEhAiABIARGDfoBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDScgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPsBCyADQQA2AgAgBkEBaiEBQQwMJwtBtQEhAiABIARGDfkBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQerUAGotAABHDSYgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPoBCyADQQA2AgAgBkEBaiEBQQMMJgtBtAEhAiABIARGDfgBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQejUAGotAABHDSUgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPkBCyADQQA2AgAgBkEBaiEBQSYMJQsgASAERgRAQbMBIQIM+AELAkACQCABLQAAQdQAaw4CAAEnCyABQQFqIQFBmQEhAgzfAQsgAUEBaiEBQZoBIQIM3gELQbIBIQIgASAERg32ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHm1ABqLQAARw0jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz3AQsgA0EANgIAIAZBAWohAUEnDCMLQbEBIQIgASAERg31ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHk1ABqLQAARw0iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz2AQsgA0EANgIAIAZBAWohAUEcDCILQbABIQIgASAERg30ASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHe1ABqLQAARw0hIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz1AQsgA0EANgIAIAZBAWohAUEGDCELQa8BIQIgASAERg3zASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHZ1ABqLQAARw0gIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz0AQsgA0EANgIAIAZBAWohAUEZDCALIAEgBEYEQEGuASECDPMBCwJAAkACQAJAIAEtAABBLWsOIwAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAEkJCQkJAIkJCQDJAsgAUEBaiEBQY4BIQIM3AELIAFBAWohAUGPASECDNsBCyABQQFqIQFBlAEhAgzaAQsgAUEBaiEBQZUBIQIM2QELQa0BIQIgASAERg3xASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHX1ABqLQAARw0eIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzyAQsgA0EANgIAIAZBAWohAUELDB4LIAEgBEYEQEGsASECDPEBCwJAAkAgAS0AAEHBAGsOAwAgASALIAFBAWohAUGQASECDNgBCyABQQFqIQFBkwEhAgzXAQsgASAERgRAQasBIQIM8AELAkACQCABLQAAQcEAaw4PAB8fHx8fHx8fHx8fHx8BHwsgAUEBaiEBQZEBIQIM1wELIAFBAWohAUGSASECDNYBCyABIARGBEBBqgEhAgzvAQsgAS0AAEHMAEcNHCABQQFqIQFBCgwbC0GpASECIAEgBEYN7QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABB0dQAai0AAEcNGiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7gELIANBADYCACAGQQFqIQFBHgwaC0GoASECIAEgBEYN7AEgAygCACIAIAQgAWtqIQUgASAAa0EGaiEGAkADQCABLQAAIABBytQAai0AAEcNGSAAQQZGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7QELIANBADYCACAGQQFqIQFBFQwZC0GnASECIAEgBEYN6wEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBx9QAai0AAEcNGCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7AELIANBADYCACAGQQFqIQFBFwwYC0GmASECIAEgBEYN6gEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBwdQAai0AAEcNFyAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6wELIANBADYCACAGQQFqIQFBGAwXCyABIARGBEBBpQEhAgzqAQsCQAJAIAEtAABByQBrDgcAGRkZGRkBGQsgAUEBaiEBQYsBIQIM0QELIAFBAWohAUGMASECDNABC0GkASECIAEgBEYN6AEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBptUAai0AAEcNFSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6QELIANBADYCACAGQQFqIQFBCQwVC0GjASECIAEgBEYN5wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBpNUAai0AAEcNFCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6AELIANBADYCACAGQQFqIQFBHwwUC0GiASECIAEgBEYN5gEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBvtQAai0AAEcNEyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5wELIANBADYCACAGQQFqIQFBAgwTC0GhASECIAEgBEYN5QEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGA0AgAS0AACAAQbzUAGotAABHDREgAEEBRg0CIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADOUBCyABIARGBEBBoAEhAgzlAQtBASABLQAAQd8ARw0RGiABQQFqIQFBhwEhAgzLAQsgA0EANgIAIAZBAWohAUGIASECDMoBC0GfASECIAEgBEYN4gEgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBhNUAai0AAEcNDyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4wELIANBADYCACAGQQFqIQFBKQwPC0GeASECIAEgBEYN4QEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBuNQAai0AAEcNDiAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4gELIANBADYCACAGQQFqIQFBLQwOCyABIARGBEBBnQEhAgzhAQsgAS0AAEHFAEcNDiABQQFqIQFBhAEhAgzHAQsgASAERgRAQZwBIQIM4AELAkACQCABLQAAQcwAaw4IAA8PDw8PDwEPCyABQQFqIQFBggEhAgzHAQsgAUEBaiEBQYMBIQIMxgELQZsBIQIgASAERg3eASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEGz1ABqLQAARw0LIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzfAQsgA0EANgIAIAZBAWohAUEjDAsLQZoBIQIgASAERg3dASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGw1ABqLQAARw0KIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzeAQsgA0EANgIAIAZBAWohAUEADAoLIAEgBEYEQEGZASECDN0BCwJAAkAgAS0AAEHIAGsOCAAMDAwMDAwBDAsgAUEBaiEBQf0AIQIMxAELIAFBAWohAUGAASECDMMBCyABIARGBEBBmAEhAgzcAQsCQAJAIAEtAABBzgBrDgMACwELCyABQQFqIQFB/gAhAgzDAQsgAUEBaiEBQf8AIQIMwgELIAEgBEYEQEGXASECDNsBCyABLQAAQdkARw0IIAFBAWohAUEIDAcLQZYBIQIgASAERg3ZASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEGs1ABqLQAARw0GIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzaAQsgA0EANgIAIAZBAWohAUEFDAYLQZUBIQIgASAERg3YASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGm1ABqLQAARw0FIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzZAQsgA0EANgIAIAZBAWohAUEWDAULQZQBIQIgASAERg3XASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGh1QBqLQAARw0EIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzYAQsgA0EANgIAIAZBAWohAUEQDAQLIAEgBEYEQEGTASECDNcBCwJAAkAgAS0AAEHDAGsODAAGBgYGBgYGBgYGAQYLIAFBAWohAUH5ACECDL4BCyABQQFqIQFB+gAhAgy9AQtBkgEhAiABIARGDdUBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQaDUAGotAABHDQIgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNYBCyADQQA2AgAgBkEBaiEBQSQMAgsgA0EANgIADAILIAEgBEYEQEGRASECDNQBCyABLQAAQcwARw0BIAFBAWohAUETCzoAKSADKAIEIQAgA0EANgIEIAMgACABEC4iAA0CDAELQQAhAiADQQA2AhwgAyABNgIUIANB/h82AhAgA0EGNgIMDNEBC0H4ACECDLcBCyADQZABNgIcIAMgATYCFCADIAA2AgxBACECDM8BC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUYNASADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgzOAQtB9wAhAgy0AQsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDMwBCyABIARGBEBBjwEhAgzMAQsCQCABLQAAQSBGBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GbHzYCECADQQY2AgxBACECDMwBC0ECIQIMsgELA0AgAS0AAEEgRw0CIAQgAUEBaiIBRw0AC0GOASECDMoBCyABIARGBEBBjQEhAgzKAQsCQCABLQAAQQlrDgRKAABKAAtB9QAhAgywAQsgAy0AKUEFRgRAQfYAIQIMsAELQfQAIQIMrwELIAEgBEYEQEGMASECDMgBCyADQRA2AgggAyABNgIEDAoLIAEgBEYEQEGLASECDMcBCwJAIAEtAABBCWsOBEcAAEcAC0HzACECDK0BCyABIARHBEAgA0EQNgIIIAMgATYCBEHxACECDK0BC0GKASECDMUBCwJAIAEgBEcEQANAIAEtAABBoNAAai0AACIAQQNHBEACQCAAQQFrDgJJAAQLQfAAIQIMrwELIAQgAUEBaiIBRw0AC0GIASEC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BCABQQFqIgFHDQALQfsAIQIMpwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMpgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMpQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMpAELIANBADYCHCADIAE2AhQgA0G8CjYCECADQQc2AgxBACECDKMBC0HPACECDIkBC0HRACECDIgBC0HnACECDIcBCyABIARGBEBB+gAhAgygAQsCQCABLQAAQQlrDgQgAAAgAAsgAUEBaiEBQeYAIQIMhgELIAEgBEYEQEH5ACECDJ8BCwJAIAEtAABBCWsOBB8AAB8AC0EAIQACQCADKAI4IgJFDQAgAigCOCICRQ0AIAMgAhEAACEACyAARQRAQeIBIQIMhgELIABBFUcEQCADQQA2AhwgAyABNgIUIANByQ02AhAgA0EaNgIMQQAhAgyfAQsgA0H4ADYCHCADIAE2AhQgA0HqGjYCECADQRU2AgxBACECDJ4BCyABIARHBEAgA0ENNgIIIAMgATYCBEHkACECDIUBC0H3ACECDJ0BCyABIARGBEBB9gAhAgydAQsCQAJAAkAgAS0AAEHIAGsOCwABCwsLCwsLCwsCCwsgAUEBaiEBQd0AIQIMhQELIAFBAWohAUHgACECDIQBCyABQQFqIQFB4wAhAgyDAQtB9QAhAiABIARGDZsBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbXVAGotAABHDQggAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJwBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIABEAgA0H0ADYCHCADIAE2AhQgAyAANgIMQQAhAgycAQtB4gAhAgyCAQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJwBC0HhACECDIIBCyADQfMANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMmgELIAMtACkiAEEja0ELSQ0JAkAgAEEGSw0AQQEgAHRBygBxRQ0ADAoLQQAhAiADQQA2AhwgAyABNgIUIANB7Qk2AhAgA0EINgIMDJkBC0HyACECIAEgBEYNmAEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBs9UAai0AAEcNBSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMmQELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfEANgIcIAMgATYCFCADIAA2AgxBACECDJkBC0HfACECDH8LQQAhAAJAIAMoAjgiAkUNACACKAI0IgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANB6g02AhAgA0EmNgIMQQAhAgyZAQtB3gAhAgx/CyADQfAANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMlwELIAMtAClBIUYNBiADQQA2AhwgAyABNgIUIANBkQo2AhAgA0EINgIMQQAhAgyWAQtB7wAhAiABIARGDZUBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDVAGotAABHDQIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJYBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIARQ0CIANB7QA2AhwgAyABNgIUIAMgADYCDEEAIQIMlQELIANBADYCAAsgAygCBCEAIANBADYCBCADIAAgARArIgBFDYABIANB7gA2AhwgAyABNgIUIAMgADYCDEEAIQIMkwELQdwAIQIMeQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJMBC0HbACECDHkLIANB7AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyRAQsgAy0AKSIAQSNJDQAgAEEuRg0AIANBADYCHCADIAE2AhQgA0HJCTYCECADQQg2AgxBACECDJABC0HaACECDHYLIAEgBEYEQEHrACECDI8BCwJAIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMjwELQdkAIQIMdQsgASAERwRAIANBDjYCCCADIAE2AgRB2AAhAgx1C0HqACECDI0BCyABIARGBEBB6QAhAgyNAQsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFB1wAhAgx0CyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeiADQegANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyABIARGBEBB5wAhAgyMAQsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ17IANB5gA2AhwgAyABNgIUIAMgADYCDEEAIQIMjAELQdYAIQIMcgsgASAERgRAQeUAIQIMiwELQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIANgIcIAMgATYCFCADIAA2AgxBACECDI0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNfSADQeMANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeyADQeQANgIcIAMgATYCFCADIAA2AgwMiwELQdQAIQIMcQsgAy0AKUEiRg2GAUHTACECDHALQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALIABFBEBB1QAhAgxwCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQaQNNgIQIANBITYCDEEAIQIMiQELIANB4QA2AhwgAyABNgIUIANB0Bo2AhAgA0EVNgIMQQAhAgyIAQsgASAERgRAQeAAIQIMiAELAkACQAJAAkACQCABLQAAQQprDgQBBAQABAsgAUEBaiEBDAELIAFBAWohASADQS9qLQAAQQFxRQ0BC0HSACECDHALIANBADYCHCADIAE2AhQgA0G2ETYCECADQQk2AgxBACECDIgBCyADQQA2AhwgAyABNgIUIANBthE2AhAgA0EJNgIMQQAhAgyHAQsgASAERgRAQd8AIQIMhwELIAEtAABBCkYEQCABQQFqIQEMCQsgAy0ALkHAAHENCCADQQA2AhwgAyABNgIUIANBthE2AhAgA0ECNgIMQQAhAgyGAQsgASAERgRAQd0AIQIMhgELIAEtAAAiAkENRgRAIAFBAWohAUHQACECDG0LIAEhACACQQlrDgQFAQEFAQsgBCABIgBGBEBB3AAhAgyFAQsgAC0AAEEKRw0AIABBAWoMAgtBACECIANBADYCHCADIAA2AhQgA0HKLTYCECADQQc2AgwMgwELIAEgBEYEQEHbACECDIMBCwJAIAEtAABBCWsOBAMAAAMACyABQQFqCyEBQc4AIQIMaAsgASAERgRAQdoAIQIMgQELIAEtAABBCWsOBAABAQABC0EAIQIgA0EANgIcIANBmhI2AhAgA0EHNgIMIAMgAUEBajYCFAx/CyADQYASOwEqQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB2QA2AhwgAyABNgIUIANB6ho2AhAgA0EVNgIMQQAhAgx+C0HNACECDGQLIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDHwLIAEgBEYEQEHZACECDHwLIAEtAABBIEcNPSABQQFqIQEgAy0ALkEBcQ09IANBADYCHCADIAE2AhQgA0HCHDYCECADQR42AgxBACECDHsLIAEgBEYEQEHYACECDHsLAkACQAJAAkACQCABLQAAIgBBCmsOBAIDAwABCyABQQFqIQFBLCECDGULIABBOkcNASADQQA2AhwgAyABNgIUIANB5xE2AhAgA0EKNgIMQQAhAgx9CyABQQFqIQEgA0Evai0AAEEBcUUNcyADLQAyQYABcUUEQCADQTJqIQIgAxA1QQAhAAJAIAMoAjgiBkUNACAGKAIoIgZFDQAgAyAGEQAAIQALAkACQCAADhZNTEsBAQEBAQEBAQEBAQEBAQEBAQEAAQsgA0EpNgIcIAMgATYCFCADQawZNgIQIANBFTYCDEEAIQIMfgsg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c3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw=='\n\nlet wasmBuffer\n\nObject.defineProperty(module, 'exports', {\n  get: () => {\n    return wasmBuffer\n      ? wasmBuffer\n      : (wasmBuffer = Buffer.from(wasmBase64, 'base64'))\n  }\n})\n", "'use strict'\n\nconst { Buffer } = require('node:buffer')\n\nconst wasmBase64 = 'AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgLhocCAwd/A34BeyABIAJqIQQCQCAAIgMoAgwiAA0AIAMoAgQEQCADIAE2AgQLIwBBEGsiCSQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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DAgLQeMBDAcLQdcBDAYLQdgBDAULQdkBDAQLQdoBDAMLQdsBDAILQd0BDAELQdwBCyECA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAn8CQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAwJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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A0EXNgIcIAMgADYCDCADIAFBAWo2AhQM+AILIABBFUYNI0EAIQIgA0EANgIcIAMgATYCFCADQdYMNgIQIANBIzYCDAz3AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQwdCyADQRk2AhwgAyAANgIMIAMgAUEBajYCFAz2AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQzvAgsgA0EaNgIcIAMgADYCDCADIAFBAWo2AhQM9QILIABBFUYNH0EAIQIgA0EANgIcIAMgATYCFCADQdAPNgIQIANBIjYCDAz0AgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDBsLIANBHDYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgzzAgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDOsCCyADQR02AhwgAyAANgIMIAMgAUEBajYCFEEAIQIM8gILIABBO0cNASABQQFqIQELQSYhAgzXAgtBACECIANBADYCHCADIAE2AhQgA0GfFTYCECADQQw2AgwM7wILIAEgBEcEQANAIAEtAABBIEcNhAIgBCABQQFqIgFHDQALQSwhAgzvAgtBLCECDO4CCyABIARGBEBBNCECDO4CCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtBNCECDO8CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUNnwIgA0EyNgIcIAMgATYCFCADIAA2AgxBACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUEQCABQQFqIQEMnwILIANBMjYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgztAgsgASAERwRAAkADQCABLQAAQTBrIgBB/wFxQQpPBEBBOiECDNcCCyADKQMgIgtCmbPmzJmz5swZVg0BIAMgC0IKfiIKNwMgIAogAK1C/wGDIgtCf4VWDQEgAyAKIAt8NwMgIAQgAUEBaiIBRw0AC0HAACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABQQFqIgEQMSIADRcM4gILQcAAIQIM7AILIAEgBEYEQEHJACECDOwCCwJAA0ACQCABLQAAQQlrDhgAAqICogKpAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAgCiAgsgBCABQQFqIgFHDQALQckAIQIM7AILIAFBAWohASADQS9qLQAAQQFxDaUCIANBADYCHCADIAE2AhQgA0GXEDYCECADQQo2AgxBACECDOsCCyABIARHBEADQCABLQAAQSBHDRUgBCABQQFqIgFHDQALQfgAIQIM6wILQfgAIQIM6gILIANBAjoAKAw4C0EAIQIgA0EANgIcIANBvws2AhAgA0ECNgIMIAMgAUEBajYCFAzoAgtBACECDM4CC0ENIQIMzQILQRMhAgzMAgtBFSECDMsCC0EWIQIMygILQRghAgzJAgtBGSECDMgCC0EaIQIMxwILQRshAgzGAgtBHCECDMUCC0EdIQIMxAILQR4hAgzDAgtBHyECDMICC0EgIQIMwQILQSIhAgzAAgtBIyECDL8CC0ElIQIMvgILQeUAIQIMvQILIANBPTYCHCADIAE2AhQgAyAANgIMQQAhAgzVAgsgA0EbNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIM1AILIANBIDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNMCCyADQRM2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzSAgsgA0ELNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0QILIANBEDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNACCyADQSA2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzPAgsgA0ELNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzgILIANBDDYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM0CC0EAIQIgA0EANgIcIAMgATYCFCADQd0ONgIQIANBEjYCDAzMAgsCQANAAkAgAS0AAEEKaw4EAAICAAILIAQgAUEBaiIBRw0AC0H9ASECDMwCCwJAAkAgAy0ANkEBRw0AQQAhAAJAIAMoAjgiAkUNACACKAJgIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB/AE2AhwgAyABNgIUIANB3Bk2AhAgA0EVNgIMQQAhAgzNAgtB3AEhAgyzAgsgA0EANgIcIAMgATYCFCADQfkLNgIQIANBHzYCDEEAIQIMywILAkACQCADLQAoQQFrDgIEAQALQdsBIQIMsgILQdQBIQIMsQILIANBAjoAMUEAIQACQCADKAI4IgJFDQAgAigCACICRQ0AIAMgAhEAACEACyAARQRAQd0BIQIMsQILIABBFUcEQCADQQA2AhwgAyABNgIUIANBtAw2AhAgA0EQNgIMQQAhAgzKAgsgA0H7ATYCHCADIAE2AhQgA0GBGjYCECADQRU2AgxBACECDMkCCyABIARGBEBB+gEhAgzJAgsgAS0AAEHIAEYNASADQQE6ACgLQcABIQIMrgILQdoBIQIMrQILIAEgBEcEQCADQQw2AgggAyABNgIEQdkBIQIMrQILQfkBIQIMxQILIAEgBEYEQEH4ASECDMUCCyABLQAAQcgARw0EIAFBAWohAUHYASECDKsCCyABIARGBEBB9wEhAgzEAgsCQAJAIAEtAABBxQBrDhAABQUFBQUFBQUFBQUFBQUBBQsgAUEBaiEBQdYBIQIMqwILIAFBAWohAUHXASECDKoCC0H2ASECIAEgBEYNwgIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABButUAai0AAEcNAyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMwwILIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgBFBEBB4wEhAgyqAgsgA0H1ATYCHCADIAE2AhQgAyAANgIMQQAhAgzCAgtB9AEhAiABIARGDcECIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjVAGotAABHDQIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMICCyADQYEEOwEoIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgANAwwCCyADQQA2AgALQQAhAiADQQA2AhwgAyABNgIUIANB5R82AhAgA0EINgIMDL8CC0HVASECDKUCCyADQfMBNgIcIAMgATYCFCADIAA2AgxBACECDL0CC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ1uIABBFUcEQCADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgy9AgsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDLwCCyABIARHBEAgA0ENNgIIIAMgATYCBEHTASECDKMCC0HyASECDLsCCyABIARGBEBB8QEhAgy7AgsCQAJAAkAgAS0AAEHIAGsOCwABCAgICAgICAgCCAsgAUEBaiEBQdABIQIMowILIAFBAWohAUHRASECDKICCyABQQFqIQFB0gEhAgyhAgtB8AEhAiABIARGDbkCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEG11QBqLQAARw0EIABBAkYNAyAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy5AgtB7wEhAiABIARGDbgCIAMoAgAiACAEIAFraiEGIAEgAGtBAWohBQNAIAEtAAAgAEGz1QBqLQAARw0DIABBAUYNAiAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy4AgtB7gEhAiABIARGDbcCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEGw1QBqLQAARw0CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy3AgsgAygCBCEAIANCADcDACADIAAgBUEBaiIBECsiAEUNAiADQewBNgIcIAMgATYCFCADIAA2AgxBACECDLYCCyADQQA2AgALIAMoAgQhACADQQA2AgQgAyAAIAEQKyIARQ2cAiADQe0BNgIcIAMgATYCFCADIAA2AgxBACECDLQCC0HPASECDJoCC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMtAILQc4BIQIMmgILIANB6wE2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyyAgsgASAERgRAQesBIQIMsgILIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMsQILQc0BIQIMlwILIAEgBEcEQCADQQ42AgggAyABNgIEQcwBIQIMlwILQeoBIQIMrwILIAEgBEYEQEHpASECDK8CCyABLQAAQTBrIgBB/wFxQQpJBEAgAyAAOgAqIAFBAWohAUHLASECDJYCCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNlwIgA0HoATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgASAERgRAQecBIQIMrgILAkAgAS0AAEEuRgRAIAFBAWohAQwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmAIgA0HmATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgtBygEhAgyUAgsgASAERgRAQeUBIQIMrQILQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIBNgIcIAMgATYCFCADIAA2AgxBACECDK8CCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmgIgA0HjATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5AE2AhwgAyABNgIUIAMgADYCDAytAgtByQEhAgyTAgtBACEAAkAgAygCOCICRQ0AIAIoAkQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GkDTYCECADQSE2AgxBACECDK0CC0HIASECDJMCCyADQeEBNgIcIAMgATYCFCADQdAaNgIQIANBFTYCDEEAIQIMqwILIAEgBEYEQEHhASECDKsCCwJAIAEtAABBIEYEQCADQQA7ATQgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GZETYCECADQQk2AgxBACECDKsCC0HHASECDJECCyABIARGBEBB4AEhAgyqAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKsCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyqAgtBxgEhAgyQAgsgASAERgRAQd8BIQIMqQILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyqAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqQILQcUBIQIMjwILIAEgBEYEQEHeASECDKgCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqQILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKgCC0HEASECDI4CCyABIARGBEBB3QEhAgynAgsCQAJAAkACQCABLQAAQQprDhcCAwMAAwMDAwMDAwMDAwMDAwMDAwMDAQMLIAFBAWoMBQsgAUEBaiEBQcMBIQIMjwILIAFBAWohASADQS9qLQAAQQFxDQggA0EANgIcIAMgATYCFCADQY0LNgIQIANBDTYCDEEAIQIMpwILIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKYCCyABIARHBEAgA0EPNgIIIAMgATYCBEEBIQIMjQILQdwBIQIMpQILAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0HbASECDKYCCyADKAIEIQAgA0EANgIEIAMgACABEC0iAEUEQCABQQFqIQEMBAsgA0HaATYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgylAgsgAygCBCEAIANBADYCBCADIAAgARAtIgANASABQQFqCyEBQcEBIQIMigILIANB2QE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMogILQcIBIQIMiAILIANBL2otAABBAXENASADQQA2AhwgAyABNgIUIANB5Bw2AhAgA0EZNgIMQQAhAgygAgsgASAERgRAQdkB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CyADIAU2AgAMkAILIANBADYCACAGQQFqIQFBGgw8C0HKASECIAEgBEYNjgIgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBjdUAai0AAEcNOyAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMjwILIANBADYCACAGQQFqIQFBIQw7CyABIARGBEBByQEhAgyOAgsCQAJAIAEtAABBwQBrDhQAPT09PT09PT09PT09PT09PT09AT0LIAFBAWohAUGtASECDPUBCyABQQFqIQFBsAEhAgz0AQsgASAERgRAQcgBIQIMjQILAkACQCABLQAAQdUAaw4LADw8PDw8PDw8PAE8CyABQQFqIQFBrgEhAgz0AQsgAUEBaiEBQa8BIQIM8wELQccBIQIgASAERg2LAiADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw04IABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyMAgsgA0EANgIAIAZBAWohAUEqDDgLIAEgBEYEQEHGASECDIsCCyABLQAAQdAARw04IAFBAWohAUElDDcLQcUBIQIgASAERg2JAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGB1QBqLQAARw02IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyKAgsgA0EANgIAIAZBAWohAUEODDYLIAEgBEYEQEHEASECDIkCCyABLQAAQcUARw02IAFBAWohAUGrASECDO8BCyABIARGBEBBwwEhAgyIAgsCQAJAAkACQCABLQAAQcIAaw4PAAECOTk5OTk5OTk5OTkDOQsgAUEBaiEBQacBIQIM8QELIAFBAWohAUGoASECDPABCyABQQFqIQFBqQEhAgzvAQsgAUEBaiEBQaoBIQIM7gELQcIBIQIgASAERg2GAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEH+1ABqLQAARw0zIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyHAgsgA0EANgIAIAZBAWohAUEUDDMLQcEBIQIgASAERg2FAiADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANA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BTYCAAzsAQsgA0EANgIAIAZBAWohAUEXDBgLQaYBIQIgASAERg3qASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHB1ABqLQAARw0XIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzrAQsgA0EANgIAIAZBAWohAUEYDBcLIAEgBEYEQEGlASECDOoBCwJAAkAgAS0AAEHJAGsOBwAZGRkZGQEZCyABQQFqIQFBiwEhAgzRAQsgAUEBaiEBQYwBIQIM0AELQaQBIQIgASAERg3oASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGm1QBqLQAARw0VIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzpAQsgA0EANgIAIAZBAWohAUEJDBULQaMBIQIgASAERg3nASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGk1QBqLQAARw0UIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzoAQsgA0EANgIAIAZBAWohAUEfDBQLQaIBIQIgASAERg3mASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEG+1ABqLQAARw0TIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAznAQsgA0EANgIAIAZBAWohAUECDBMLQaEBIQIgASAERg3lASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYDQCABLQAAIABBvNQAai0AAEcNESAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5QELIAEgBEYEQEGgASECDOUBC0EBIAEtAABB3wBHDREaIAFBAWohAUGHASECDMsBCyADQQA2AgAgBkEBaiEBQYgBIQIMygELQZ8BIQIgASAERg3iASADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw0PIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzjAQsgA0EANgIAIAZBAWohAUEpDA8LQZ4BIQIgASAERg3hASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEG41ABqLQAARw0OIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAziAQsgA0EANgIAIAZBAWohAUEtDA4LIAEgBEYEQEGdASECDOEBCyABLQAAQcUARw0OIAFBAWohAUGEASECDMcBCyABIARGBEBBnAEhAgzgAQsCQAJAIAEtAABBzABrDggADw8PDw8PAQ8LIAFBAWohAUGCASECDMcBCyABQQFqIQFBgwEhAgzGAQtBmwEhAiABIARGDd4BIAMoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQbPUAGotAABHDQsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN8BCyADQQA2AgAgBkEBaiEBQSMMCwtBmgEhAiABIARGDd0BIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDUAGotAABHDQogAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN4BCyADQQA2AgAgBkEBaiEBQQAMCgsgASAERgRAQZkBIQIM3QELAkACQCABLQAAQcgAaw4IAAwMDAwMDAEMCyABQQFqIQFB/QAhAgzEAQsgAUEBaiEBQYABIQIMwwELIAEgBEYEQEGYASECDNwBCwJAAkAgAS0AAEHOAGsOAwALAQsLIAFBAWohAUH+ACECDMMBCyABQQFqIQFB/wAhAgzCAQsgASAERgRAQZcBIQIM2wELIAEtAABB2QBHDQggAUEBaiEBQQgMBwtBlgEhAiABIARGDdkBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQazUAGotAABHDQYgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNoBCyADQQA2AgAgBkEBaiEBQQUMBgtBlQEhAiABIARGDdgBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQabUAGotAABHDQUgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNkBCyADQQA2AgAgBkEBaiEBQRYMBQtBlAEhAiABIARGDdcBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDQQgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNgBCyADQQA2AgAgBkEBaiEBQRAMBAsgASAERgRAQZMBIQIM1wELAkACQCABLQAAQcMAaw4MAAYGBgYGBgYGBgYBBgsgAUEBaiEBQfkAIQIMvgELIAFBAWohAUH6ACECDL0BC0GSASECIAEgBEYN1QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBoNQAai0AAEcNAiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM1gELIANBADYCACAGQQFqIQFBJAwCCyADQQA2AgAMAgsgASAERgRAQZEBIQIM1AELIAEtAABBzABHDQEgAUEBaiEBQRMLOgApIAMoAgQhACADQQA2AgQgAyAAIAEQLiIADQIMAQtBACECIANBADYCHCADIAE2AhQgA0H+HzYCECADQQY2AgwM0QELQfgAIQIMtwELIANBkAE2AhwgAyABNgIUIAMgADYCDEEAIQIMzwELQQAhAAJAIAMoAjgiAkUNACACKAJAIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GCDzYCECADQSA2AgxBACECDM4BC0H3ACECDLQBCyADQY8BNgIcIAMgATYCFCADQewbNgIQIANBFTYCDEEAIQIMzAELIAEgBEYEQEGPASECDMwBCwJAIAEtAABBIEYEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQZsfNgIQIANBBjYCDEEAIQIMzAELQQIhAgyyAQsDQCABLQAAQSBHDQIgBCABQQFqIgFHDQALQY4BIQIMygELIAEgBEYEQEGNASECDMoBCwJAIAEtAABBCWsOBEoAAEoAC0H1ACECDLABCyADLQApQQVGBEBB9gAhAgywAQtB9AAhAgyvAQsgASAERgRAQYwBIQIMyAELIANBEDYCCCADIAE2AgQMCgsgASAERgRAQYsBIQIMxwELAkAgAS0AAEEJaw4ERwAARwALQfMAIQIMrQELIAEgBEcEQCADQRA2AgggAyABNgIEQfEAIQIMrQELQYoBIQIMxQELAkAgASAERwRAA0AgAS0AAEGg0ABqLQAAIgBBA0cEQAJAIABBAWsOAkkABAtB8AAhAgyvAQsgBCABQQFqIgFHDQALQYgBIQIMxgELQYgBIQIMxQELIANBADYCHCADIAE2AhQgA0HbIDYCECADQQc2AgxBACECDMQBCyABIARGBEBBiQEhAgzEAQsCQAJAAkAgAS0AAEGg0gBqLQAAQQFrDgNGAgABC0HyACECDKwBCyADQQA2AhwgAyABNgIUIANBtBI2AhAgA0EHNgIMQQAhAgzEAQtB6gAhAgyqAQsgASAERwRAIAFBAWohAUHvACECDKoBC0GHASECDMIBCyAEIAEiAEYEQEGGASECDMIBCyAALQAAIgFBL0YEQCAAQQFqIQFB7gAhAgypAQsgAUEJayICQRdLDQEgACEBQQEgAnRBm4CABHENQQwBCyAEIAEiAEYEQEGFASECDMEBCyAALQAAQS9HDQAgAEEBaiEBDAMLQQAhAiADQQA2AhwgAyAANgIUIANB2yA2AhAgA0EHNgIMDL8BCwJAAkACQAJAAkADQCABLQAAQaDOAGotAAAiAEEFRwRAAkACQCAAQQFrDghHBQYHCAAEAQgLQesAIQIMrQELIAFBAWohAUHtACECDKwBCyAEIAFBAWoiAUcNAAtBhAEhAgzDAQsgAUEBagwUCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDMEBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDMABCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDL8BCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy+AQsgASAERgRAQYMBIQIMvgELAkAgAS0AAEGgzgBqLQAAQQFrDgg+BAUGAAgCAwcLIAFBAWohAQtBAyECDKMBCyABQQFqDA0LQQAhAiADQQA2AhwgA0HREjYCECADQQc2AgwgAyABQQFqNgIUDLoBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDLkBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDLgBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDLcBCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy2AQtB7AAhAgycAQsgASAERgRAQYIBIQIMtQELIAFBAWoMAgsgASAERgRAQYEBIQIMtAELIAFBAWoMAQsgASAERg0BIAFBAWoLIQFBBCECDJgBC0GAASECDLABCwNAIAEtAABBoMwAai0AACIAQQJHBEAgAEEBRwRAQekAIQIMmQELDDELIAQgAUEBaiIBRw0AC0H/ACECDK8BCyABIARGBEBB/gAhAgyvAQsCQCABLQAAQQlrDjcvAwYvBAYGBgYGBgYGBgYGBgYGBgYGBgUGBgIGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYABgsgAUEBagshAUEFIQIMlAELIAFBAWoMBgsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgyrAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgyqAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgypAQsgA0EANgIcIAMgATYCFCADQY0UNgIQIANBBzYCDEEAIQIMqAELAkACQAJAAkADQCABLQAAQaDKAGotAAAiAEEFRwRAAkAgAEEBaw4GLgMEBQYABgtB6AAhAgyUAQsgBCABQQFqIgFHDQALQf0AIQIMqwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMqgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMqQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMqAELIANBADYCHCADIAE2AhQgA0HkCDYCECADQQc2AgxBACECDKcBCyABIARGDQEgAUEBagshAUEGIQIMjAELQfwAIQIMpAELAkACQAJAAkADQCABLQAAQaDIAGotAAAiAEEFRwRAIABBAWsOBCkCAwQFCyAEIAFBAWoiAUcNAAtB+wAhAgynAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgymAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgylAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgykAQsgA0EANgIcIAMgATYCFCADQbwKNgIQIANBBzYCDEEAIQIMowELQc8AIQIMiQELQdEAIQIMiAELQecAIQIMhwELIAEgBEYEQEH6ACECDKABCwJAIAEtAABBCWsOBCAAACAACyABQQFqIQFB5gAhAgyGAQsgASAERgRAQfkAIQIMnwELAkAgAS0AAEEJaw4EHwAAHwALQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFBEBB4gEhAgyGAQsgAEEVRwRAIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDJ8BCyADQfgANgIcIAMgATYCFCADQeoaNgIQIANBFTYCDEEAIQIMngELIAEgBEcEQCADQQ02AgggAyABNgIEQeQAIQIMhQELQfcAIQIMnQELIAEgBEYEQEH2ACECDJ0BCwJAAkACQCABLQAAQcgAaw4LAAELCwsLCwsLCwILCyABQQFqIQFB3QAhAgyFAQsgAUEBaiEBQeAAIQIMhAELIAFBAWohAUHjACECDIMBC0H1ACECIAEgBEYNmwEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBtdUAai0AAEcNCCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMnAELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfQANgIcIAMgATYCFCADIAA2AgxBACECDJwBC0HiACECDIIBC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMnAELQeEAIQIMggELIANB8wA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyaAQsgAy0AKSIAQSNrQQtJDQkCQCAAQQZLDQBBASAAdEHKAHFFDQAMCgtBACECIANBADYCHCADIAE2AhQgA0HtCTYCECADQQg2AgwMmQELQfIAIQIgASAERg2YASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGz1QBqLQAARw0FIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyZAQsgAygCBCEAIANCADcDACADIAAgBkEBaiIBECsiAARAIANB8QA2AhwgAyABNgIUIAMgADYCDEEAIQIMmQELQd8AIQIMfwtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJkBC0HeACECDH8LIANB8AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyXAQsgAy0AKUEhRg0GIANBADYCHCADIAE2AhQgA0GRCjYCECADQQg2AgxBACECDJYBC0HvACECIAEgBEYNlQEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMlgELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgBFDQIgA0HtADYCHCADIAE2AhQgAyAANgIMQQAhAgyVAQsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNgAEgA0HuADYCHCADIAE2AhQgAyAANgIMQQAhAgyTAQtB3AAhAgx5C0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMkwELQdsAIQIMeQsgA0HsADYCHCADIAE2AhQgA0GAGzYCECADQRU2AgxBACECDJEBCyADLQApIgBBI0kNACAAQS5GDQAgA0EANgIcIAMgATYCFCADQckJNgIQIANBCDYCDEEAIQIMkAELQdoAIQIMdgsgASAERgRAQesAIQIMjwELAkAgAS0AAEEvRgRAIAFBAWohAQwBCyAD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ciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw=='\n\nlet wasmBuffer\n\nObject.defineProperty(module, 'exports', {\n  get: () => {\n    return wasmBuffer\n      ? wasmBuffer\n      : (wasmBuffer = Buffer.from(wasmBase64, 'base64'))\n  }\n})\n", "'use strict'\n\nconst corsSafeListedMethods = /** @type {const} */ (['GET', 'HEAD', 'POST'])\nconst corsSafeListedMethodsSet = new Set(corsSafeListedMethods)\n\nconst nullBodyStatus = /** @type {const} */ ([101, 204, 205, 304])\n\nconst redirectStatus = /** @type {const} */ ([301, 302, 303, 307, 308])\nconst redirectStatusSet = new Set(redirectStatus)\n\n/**\n * @see https://fetch.spec.whatwg.org/#block-bad-port\n */\nconst badPorts = /** @type {const} */ ([\n  '1', '7', '9', '11', '13', '15', '17', '19', '20', '21', '22', '23', '25', '37', '42', '43', '53', '69', '77', '79',\n  '87', '95', '101', '102', '103', '104', '109', '110', '111', '113', '115', '117', '119', '123', '135', '137',\n  '139', '143', '161', '179', '389', '427', '465', '512', '513', '514', '515', '526', '530', '531', '532',\n  '540', '548', '554', '556', '563', '587', '601', '636', '989', '990', '993', '995', '1719', '1720', '1723',\n  '2049', '3659', '4045', '4190', '5060', '5061', '6000', '6566', '6665', '6666', '6667', '6668', '6669', '6679',\n  '6697', '10080'\n])\nconst badPortsSet = new Set(badPorts)\n\n/**\n * @see https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-header\n */\nconst referrerPolicyTokens = /** @type {const} */ ([\n  'no-referrer',\n  'no-referrer-when-downgrade',\n  'same-origin',\n  'origin',\n  'strict-origin',\n  'origin-when-cross-origin',\n  'strict-origin-when-cross-origin',\n  'unsafe-url'\n])\n\n/**\n * @see https://w3c.github.io/webappsec-referrer-policy/#referrer-policies\n */\nconst referrerPolicy = /** @type {const} */ ([\n  '',\n  ...referrerPolicyTokens\n])\nconst referrerPolicyTokensSet = new Set(referrerPolicyTokens)\n\nconst requestRedirect = /** @type {const} */ (['follow', 'manual', 'error'])\n\nconst safeMethods = /** @type {const} */ (['GET', 'HEAD', 'OPTIONS', 'TRACE'])\nconst safeMethodsSet = new Set(safeMethods)\n\nconst requestMode = /** @type {const} */ (['navigate', 'same-origin', 'no-cors', 'cors'])\n\nconst requestCredentials = /** @type {const} */ (['omit', 'same-origin', 'include'])\n\nconst requestCache = /** @type {const} */ ([\n  'default',\n  'no-store',\n  'reload',\n  'no-cache',\n  'force-cache',\n  'only-if-cached'\n])\n\n/**\n * @see https://fetch.spec.whatwg.org/#request-body-header-name\n */\nconst requestBodyHeader = /** @type {const} */ ([\n  'content-encoding',\n  'content-language',\n  'content-location',\n  'content-type',\n  // See https://github.com/nodejs/undici/issues/2021\n  // 'Content-Length' is a forbidden header name, which is typically\n  // removed in the Headers implementation. However, undici doesn't\n  // filter out headers, so we add it here.\n  'content-length'\n])\n\n/**\n * @see https://fetch.spec.whatwg.org/#enumdef-requestduplex\n */\nconst requestDuplex = /** @type {const} */ ([\n  'half'\n])\n\n/**\n * @see http://fetch.spec.whatwg.org/#forbidden-method\n */\nconst forbiddenMethods = /** @type {const} */ (['CONNECT', 'TRACE', 'TRACK'])\nconst forbiddenMethodsSet = new Set(forbiddenMethods)\n\nconst subresource = /** @type {const} */ ([\n  'audio',\n  'audioworklet',\n  'font',\n  'image',\n  'manifest',\n  'paintworklet',\n  'script',\n  'style',\n  'track',\n  'video',\n  'xslt',\n  ''\n])\nconst subresourceSet = new Set(subresource)\n\nmodule.exports = {\n  subresource,\n  forbiddenMethods,\n  requestBodyHeader,\n  referrerPolicy,\n  requestRedirect,\n  requestMode,\n  requestCredentials,\n  requestCache,\n  redirectStatus,\n  corsSafeListedMethods,\n  nullBodyStatus,\n  safeMethods,\n  badPorts,\n  requestDuplex,\n  subresourceSet,\n  badPortsSet,\n  redirectStatusSet,\n  corsSafeListedMethodsSet,\n  safeMethodsSet,\n  forbiddenMethodsSet,\n  referrerPolicyTokens: referrerPolicyTokensSet\n}\n", "'use strict'\n\n// In case of breaking changes, increase the version\n// number to avoid conflicts.\nconst globalOrigin = Symbol.for('undici.globalOrigin.1')\n\nfunction getGlobalOrigin () {\n  return globalThis[globalOrigin]\n}\n\nfunction setGlobalOrigin (newOrigin) {\n  if (newOrigin === undefined) {\n    Object.defineProperty(globalThis, globalOrigin, {\n      value: undefined,\n      writable: true,\n      enumerable: false,\n      configurable: false\n    })\n\n    return\n  }\n\n  const parsedURL = new URL(newOrigin)\n\n  if (parsedURL.protocol !== 'http:' && parsedURL.protocol !== 'https:') {\n    throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`)\n  }\n\n  Object.defineProperty(globalThis, globalOrigin, {\n    value: parsedURL,\n    writable: true,\n    enumerable: false,\n    configurable: false\n  })\n}\n\nmodule.exports = {\n  getGlobalOrigin,\n  setGlobalOrigin\n}\n", "'use strict'\n\nconst textDecoder = new TextDecoder()\n\n/**\n * @see https://encoding.spec.whatwg.org/#utf-8-decode\n * @param {Uint8Array} buffer\n */\nfunction utf8DecodeBytes (buffer) {\n  if (buffer.length === 0) {\n    return ''\n  }\n\n  // 1. Let buffer be the result of peeking three bytes from\n  //    ioQueue, converted to a byte sequence.\n\n  // 2. If buffer is 0xEF 0xBB 0xBF, then read three\n  //    bytes from ioQueue. (Do nothing with those bytes.)\n  if (buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) {\n    buffer = buffer.subarray(3)\n  }\n\n  // 3. Process a queue with an instance of UTF-8\u2019s\n  //    decoder, ioQueue, output, and \"replacement\".\n  const output = textDecoder.decode(buffer)\n\n  // 4. Return output.\n  return output\n}\n\nmodule.exports = {\n  utf8DecodeBytes\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { utf8DecodeBytes } = require('../../encoding')\n\n/**\n * @param {(char: string) => boolean} condition\n * @param {string} input\n * @param {{ position: number }} position\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#collect-a-sequence-of-code-points\n */\nfunction collectASequenceOfCodePoints (condition, input, position) {\n  // 1. Let result be the empty string.\n  let result = ''\n\n  // 2. While position doesn\u2019t point past the end of input and the\n  // code point at position within input meets the condition condition:\n  while (position.position < input.length && condition(input[position.position])) {\n    // 1. Append that code point to the end of result.\n    result += input[position.position]\n\n    // 2. Advance position by 1.\n    position.position++\n  }\n\n  // 3. Return result.\n  return result\n}\n\n/**\n * A faster collectASequenceOfCodePoints that only works when comparing a single character.\n * @param {string} char\n * @param {string} input\n * @param {{ position: number }} position\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#collect-a-sequence-of-code-points\n */\nfunction collectASequenceOfCodePointsFast (char, input, position) {\n  const idx = input.indexOf(char, position.position)\n  const start = position.position\n\n  if (idx === -1) {\n    position.position = input.length\n    return input.slice(start)\n  }\n\n  position.position = idx\n  return input.slice(start, position.position)\n}\n\nconst ASCII_WHITESPACE_REPLACE_REGEX = /[\\u0009\\u000A\\u000C\\u000D\\u0020]/g // eslint-disable-line no-control-regex\n\n/**\n * @param {string} data\n * @returns {Uint8Array | 'failure'}\n *\n * @see https://infra.spec.whatwg.org/#forgiving-base64-decode\n */\nfunction forgivingBase64 (data) {\n  // 1. Remove all ASCII whitespace from data.\n  data = data.replace(ASCII_WHITESPACE_REPLACE_REGEX, '')\n\n  let dataLength = data.length\n  // 2. If data\u2019s code point length divides by 4 leaving\n  // no remainder, then:\n  if (dataLength % 4 === 0) {\n    // 1. If data ends with one or two U+003D (=) code points,\n    // then remove them from data.\n    if (data.charCodeAt(dataLength - 1) === 0x003D) {\n      --dataLength\n      if (data.charCodeAt(dataLength - 1) === 0x003D) {\n        --dataLength\n      }\n    }\n  }\n\n  // 3. If data\u2019s code point length divides by 4 leaving\n  // a remainder of 1, then return failure.\n  if (dataLength % 4 === 1) {\n    return 'failure'\n  }\n\n  // 4. If data contains a code point that is not one of\n  //  U+002B (+)\n  //  U+002F (/)\n  //  ASCII alphanumeric\n  // then return failure.\n  if (/[^+/0-9A-Za-z]/.test(data.length === dataLength ? data : data.substring(0, dataLength))) {\n    return 'failure'\n  }\n\n  const buffer = Buffer.from(data, 'base64')\n  return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n}\n\n/**\n * @param {number} char\n * @returns {boolean}\n *\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n */\nfunction isASCIIWhitespace (char) {\n  return (\n    char === 0x09 || // \\t\n    char === 0x0a || // \\n\n    char === 0x0c || // \\f\n    char === 0x0d || // \\r\n    char === 0x20    // space\n  )\n}\n\n/**\n * @param {Uint8Array} input\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#isomorphic-decode\n */\nfunction isomorphicDecode (input) {\n  // 1. To isomorphic decode a byte sequence input, return a string whose code point\n  //    length is equal to input\u2019s length and whose code points have the same values\n  //    as the values of input\u2019s bytes, in the same order.\n  const length = input.length\n  if ((2 << 15) - 1 > length) {\n    return String.fromCharCode.apply(null, input)\n  }\n  let result = ''\n  let i = 0\n  let addition = (2 << 15) - 1\n  while (i < length) {\n    if (i + addition > length) {\n      addition = length - i\n    }\n    result += String.fromCharCode.apply(null, input.subarray(i, i += addition))\n  }\n  return result\n}\n\nconst invalidIsomorphicEncodeValueRegex = /[^\\x00-\\xFF]/ // eslint-disable-line no-control-regex\n\n/**\n * @param {string} input\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#isomorphic-encode\n */\nfunction isomorphicEncode (input) {\n  // 1. Assert: input contains no code points greater than U+00FF.\n  assert(!invalidIsomorphicEncodeValueRegex.test(input))\n\n  // 2. Return a byte sequence whose length is equal to input\u2019s code\n  //    point length and whose bytes have the same values as the\n  //    values of input\u2019s code points, in the same order\n  return input\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#parse-json-bytes-to-a-javascript-value\n * @param {Uint8Array} bytes\n */\nfunction parseJSONFromBytes (bytes) {\n  return JSON.parse(utf8DecodeBytes(bytes))\n}\n\n/**\n * @param {string} str\n * @param {boolean} [leading=true]\n * @param {boolean} [trailing=true]\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#strip-leading-and-trailing-ascii-whitespace\n */\nfunction removeASCIIWhitespace (str, leading = true, trailing = true) {\n  return removeChars(str, leading, trailing, isASCIIWhitespace)\n}\n\n/**\n * @param {string} str\n * @param {boolean} leading\n * @param {boolean} trailing\n * @param {(charCode: number) => boolean} predicate\n * @returns {string}\n */\nfunction removeChars (str, leading, trailing, predicate) {\n  let lead = 0\n  let trail = str.length - 1\n\n  if (leading) {\n    while (lead < str.length && predicate(str.charCodeAt(lead))) lead++\n  }\n\n  if (trailing) {\n    while (trail > 0 && predicate(str.charCodeAt(trail))) trail--\n  }\n\n  return lead === 0 && trail === str.length - 1 ? str : str.slice(lead, trail + 1)\n}\n\n// https://infra.spec.whatwg.org/#serialize-a-javascript-value-to-a-json-string\nfunction serializeJavascriptValueToJSONString (value) {\n  // 1. Let result be ? Call(%JSON.stringify%, undefined, \u00AB value \u00BB).\n  const result = JSON.stringify(value)\n\n  // 2. If result is undefined, then throw a TypeError.\n  if (result === undefined) {\n    throw new TypeError('Value is not JSON serializable')\n  }\n\n  // 3. Assert: result is a string.\n  assert(typeof result === 'string')\n\n  // 4. Return result.\n  return result\n}\n\nmodule.exports = {\n  collectASequenceOfCodePoints,\n  collectASequenceOfCodePointsFast,\n  forgivingBase64,\n  isASCIIWhitespace,\n  isomorphicDecode,\n  isomorphicEncode,\n  parseJSONFromBytes,\n  removeASCIIWhitespace,\n  removeChars,\n  serializeJavascriptValueToJSONString\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { forgivingBase64, collectASequenceOfCodePoints, collectASequenceOfCodePointsFast, isomorphicDecode, removeASCIIWhitespace, removeChars } = require('../infra')\n\nconst encoder = new TextEncoder()\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#http-token-code-point\n */\nconst HTTP_TOKEN_CODEPOINTS = /^[-!#$%&'*+.^_|~A-Za-z0-9]+$/u\nconst HTTP_WHITESPACE_REGEX = /[\\u000A\\u000D\\u0009\\u0020]/u // eslint-disable-line\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#http-quoted-string-token-code-point\n */\nconst HTTP_QUOTED_STRING_TOKENS = /^[\\u0009\\u0020-\\u007E\\u0080-\\u00FF]+$/u // eslint-disable-line\n\n// https://fetch.spec.whatwg.org/#data-url-processor\n/** @param {URL} dataURL */\nfunction dataURLProcessor (dataURL) {\n  // 1. Assert: dataURL\u2019s scheme is \"data\".\n  assert(dataURL.protocol === 'data:')\n\n  // 2. Let input be the result of running the URL\n  // serializer on dataURL with exclude fragment\n  // set to true.\n  let input = URLSerializer(dataURL, true)\n\n  // 3. Remove the leading \"data:\" string from input.\n  input = input.slice(5)\n\n  // 4. Let position point at the start of input.\n  const position = { position: 0 }\n\n  // 5. Let mimeType be the result of collecting a\n  // sequence of code points that are not equal\n  // to U+002C (,), given position.\n  let mimeType = collectASequenceOfCodePointsFast(\n    ',',\n    input,\n    position\n  )\n\n  // 6. Strip leading and trailing ASCII whitespace\n  // from mimeType.\n  // Undici implementation note: we need to store the\n  // length because if the mimetype has spaces removed,\n  // the wrong amount will be sliced from the input in\n  // step #9\n  const mimeTypeLength = mimeType.length\n  mimeType = removeASCIIWhitespace(mimeType, true, true)\n\n  // 7. If position is past the end of input, then\n  // return failure\n  if (position.position >= input.length) {\n    return 'failure'\n  }\n\n  // 8. Advance position by 1.\n  position.position++\n\n  // 9. Let encodedBody be the remainder of input.\n  const encodedBody = input.slice(mimeTypeLength + 1)\n\n  // 10. Let body be the percent-decoding of encodedBody.\n  let body = stringPercentDecode(encodedBody)\n\n  // 11. If mimeType ends with U+003B (;), followed by\n  // zero or more U+0020 SPACE, followed by an ASCII\n  // case-insensitive match for \"base64\", then:\n  if (/;(?:\\u0020*)base64$/ui.test(mimeType)) {\n    // 1. Let stringBody be the isomorphic decode of body.\n    const stringBody = isomorphicDecode(body)\n\n    // 2. Set body to the forgiving-base64 decode of\n    // stringBody.\n    body = forgivingBase64(stringBody)\n\n    // 3. If body is failure, then return failure.\n    if (body === 'failure') {\n      return 'failure'\n    }\n\n    // 4. Remove the last 6 code points from mimeType.\n    mimeType = mimeType.slice(0, -6)\n\n    // 5. Remove trailing U+0020 SPACE code points from mimeType,\n    // if any.\n    mimeType = mimeType.replace(/(\\u0020+)$/u, '')\n\n    // 6. Remove the last U+003B (;) code point from mimeType.\n    mimeType = mimeType.slice(0, -1)\n  }\n\n  // 12. If mimeType starts with U+003B (;), then prepend\n  // \"text/plain\" to mimeType.\n  if (mimeType.startsWith(';')) {\n    mimeType = 'text/plain' + mimeType\n  }\n\n  // 13. Let mimeTypeRecord be the result of parsing\n  // mimeType.\n  let mimeTypeRecord = parseMIMEType(mimeType)\n\n  // 14. If mimeTypeRecord is failure, then set\n  // mimeTypeRecord to text/plain;charset=US-ASCII.\n  if (mimeTypeRecord === 'failure') {\n    mimeTypeRecord = parseMIMEType('text/plain;charset=US-ASCII')\n  }\n\n  // 15. Return a new data: URL struct whose MIME\n  // type is mimeTypeRecord and body is body.\n  // https://fetch.spec.whatwg.org/#data-url-struct\n  return { mimeType: mimeTypeRecord, body }\n}\n\n// https://url.spec.whatwg.org/#concept-url-serializer\n/**\n * @param {URL} url\n * @param {boolean} excludeFragment\n */\nfunction URLSerializer (url, excludeFragment = false) {\n  if (!excludeFragment) {\n    return url.href\n  }\n\n  const href = url.href\n  const hashLength = url.hash.length\n\n  const serialized = hashLength === 0 ? href : href.substring(0, href.length - hashLength)\n\n  if (!hashLength && href.endsWith('#')) {\n    return serialized.slice(0, -1)\n  }\n\n  return serialized\n}\n\n// https://url.spec.whatwg.org/#string-percent-decode\n/** @param {string} input */\nfunction stringPercentDecode (input) {\n  // 1. Let bytes be the UTF-8 encoding of input.\n  const bytes = encoder.encode(input)\n\n  // 2. Return the percent-decoding of bytes.\n  return percentDecode(bytes)\n}\n\n/**\n * @param {number} byte\n */\nfunction isHexCharByte (byte) {\n  // 0-9 A-F a-f\n  return (byte >= 0x30 && byte <= 0x39) || (byte >= 0x41 && byte <= 0x46) || (byte >= 0x61 && byte <= 0x66)\n}\n\n/**\n * @param {number} byte\n */\nfunction hexByteToNumber (byte) {\n  return (\n    // 0-9\n    byte >= 0x30 && byte <= 0x39\n      ? (byte - 48)\n    // Convert to uppercase\n    // ((byte & 0xDF) - 65) + 10\n      : ((byte & 0xDF) - 55)\n  )\n}\n\n// https://url.spec.whatwg.org/#percent-decode\n/** @param {Uint8Array} input */\nfunction percentDecode (input) {\n  const length = input.length\n  // 1. Let output be an empty byte sequence.\n  /** @type {Uint8Array} */\n  const output = new Uint8Array(length)\n  let j = 0\n  let i = 0\n  // 2. For each byte byte in input:\n  while (i < length) {\n    const byte = input[i]\n\n    // 1. If byte is not 0x25 (%), then append byte to output.\n    if (byte !== 0x25) {\n      output[j++] = byte\n\n    // 2. Otherwise, if byte is 0x25 (%) and the next two bytes\n    // after byte in input are not in the ranges\n    // 0x30 (0) to 0x39 (9), 0x41 (A) to 0x46 (F),\n    // and 0x61 (a) to 0x66 (f), all inclusive, append byte\n    // to output.\n    } else if (\n      byte === 0x25 &&\n      !(isHexCharByte(input[i + 1]) && isHexCharByte(input[i + 2]))\n    ) {\n      output[j++] = 0x25\n\n    // 3. Otherwise:\n    } else {\n      // 1. Let bytePoint be the two bytes after byte in input,\n      // decoded, and then interpreted as hexadecimal number.\n      // 2. Append a byte whose value is bytePoint to output.\n      output[j++] = (hexByteToNumber(input[i + 1]) << 4) | hexByteToNumber(input[i + 2])\n\n      // 3. Skip the next two bytes in input.\n      i += 2\n    }\n    ++i\n  }\n\n  // 3. Return output.\n  return length === j ? output : output.subarray(0, j)\n}\n\n// https://mimesniff.spec.whatwg.org/#parse-a-mime-type\n/** @param {string} input */\nfunction parseMIMEType (input) {\n  // 1. Remove any leading and trailing HTTP whitespace\n  // from input.\n  input = removeHTTPWhitespace(input, true, true)\n\n  // 2. Let position be a position variable for input,\n  // initially pointing at the start of input.\n  const position = { position: 0 }\n\n  // 3. Let type be the result of collecting a sequence\n  // of code points that are not U+002F (/) from\n  // input, given position.\n  const type = collectASequenceOfCodePointsFast(\n    '/',\n    input,\n    position\n  )\n\n  // 4. If type is the empty string or does not solely\n  // contain HTTP token code points, then return failure.\n  // https://mimesniff.spec.whatwg.org/#http-token-code-point\n  if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) {\n    return 'failure'\n  }\n\n  // 5. If position is past the end of input, then return\n  // failure\n  if (position.position >= input.length) {\n    return 'failure'\n  }\n\n  // 6. Advance position by 1. (This skips past U+002F (/).)\n  position.position++\n\n  // 7. Let subtype be the result of collecting a sequence of\n  // code points that are not U+003B (;) from input, given\n  // position.\n  let subtype = collectASequenceOfCodePointsFast(\n    ';',\n    input,\n    position\n  )\n\n  // 8. Remove any trailing HTTP whitespace from subtype.\n  subtype = removeHTTPWhitespace(subtype, false, true)\n\n  // 9. If subtype is the empty string or does not solely\n  // contain HTTP token code points, then return failure.\n  if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) {\n    return 'failure'\n  }\n\n  const typeLowercase = type.toLowerCase()\n  const subtypeLowercase = subtype.toLowerCase()\n\n  // 10. Let mimeType be a new MIME type record whose type\n  // is type, in ASCII lowercase, and subtype is subtype,\n  // in ASCII lowercase.\n  // https://mimesniff.spec.whatwg.org/#mime-type\n  const mimeType = {\n    type: typeLowercase,\n    subtype: subtypeLowercase,\n    /** @type {Map<string, string>} */\n    parameters: new Map(),\n    // https://mimesniff.spec.whatwg.org/#mime-type-essence\n    essence: `${typeLowercase}/${subtypeLowercase}`\n  }\n\n  // 11. While position is not past the end of input:\n  while (position.position < input.length) {\n    // 1. Advance position by 1. (This skips past U+003B (;).)\n    position.position++\n\n    // 2. Collect a sequence of code points that are HTTP\n    // whitespace from input given position.\n    collectASequenceOfCodePoints(\n      // https://fetch.spec.whatwg.org/#http-whitespace\n      char => HTTP_WHITESPACE_REGEX.test(char),\n      input,\n      position\n    )\n\n    // 3. Let parameterName be the result of collecting a\n    // sequence of code points that are not U+003B (;)\n    // or U+003D (=) from input, given position.\n    let parameterName = collectASequenceOfCodePoints(\n      (char) => char !== ';' && char !== '=',\n      input,\n      position\n    )\n\n    // 4. Set parameterName to parameterName, in ASCII\n    // lowercase.\n    parameterName = parameterName.toLowerCase()\n\n    // 5. If position is not past the end of input, then:\n    if (position.position < input.length) {\n      // 1. If the code point at position within input is\n      // U+003B (;), then continue.\n      if (input[position.position] === ';') {\n        continue\n      }\n\n      // 2. Advance position by 1. (This skips past U+003D (=).)\n      position.position++\n    }\n\n    // 6. If position is past the end of input, then break.\n    if (position.position >= input.length) {\n      break\n    }\n\n    // 7. Let parameterValue be null.\n    let parameterValue = null\n\n    // 8. If the code point at position within input is\n    // U+0022 (\"), then:\n    if (input[position.position] === '\"') {\n      // 1. Set parameterValue to the result of collecting\n      // an HTTP quoted string from input, given position\n      // and the extract-value flag.\n      parameterValue = collectAnHTTPQuotedString(input, position, true)\n\n      // 2. Collect a sequence of code points that are not\n      // U+003B (;) from input, given position.\n      collectASequenceOfCodePointsFast(\n        ';',\n        input,\n        position\n      )\n\n    // 9. Otherwise:\n    } else {\n      // 1. Set parameterValue to the result of collecting\n      // a sequence of code points that are not U+003B (;)\n      // from input, given position.\n      parameterValue = collectASequenceOfCodePointsFast(\n        ';',\n        input,\n        position\n      )\n\n      // 2. Remove any trailing HTTP whitespace from parameterValue.\n      parameterValue = removeHTTPWhitespace(parameterValue, false, true)\n\n      // 3. If parameterValue is the empty string, then continue.\n      if (parameterValue.length === 0) {\n        continue\n      }\n    }\n\n    // 10. If all of the following are true\n    // - parameterName is not the empty string\n    // - parameterName solely contains HTTP token code points\n    // - parameterValue solely contains HTTP quoted-string token code points\n    // - mimeType\u2019s parameters[parameterName] does not exist\n    // then set mimeType\u2019s parameters[parameterName] to parameterValue.\n    if (\n      parameterName.length !== 0 &&\n      HTTP_TOKEN_CODEPOINTS.test(parameterName) &&\n      (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) &&\n      !mimeType.parameters.has(parameterName)\n    ) {\n      mimeType.parameters.set(parameterName, parameterValue)\n    }\n  }\n\n  // 12. Return mimeType.\n  return mimeType\n}\n\n// https://fetch.spec.whatwg.org/#collect-an-http-quoted-string\n// tests: https://fetch.spec.whatwg.org/#example-http-quoted-string\n/**\n * @param {string} input\n * @param {{ position: number }} position\n * @param {boolean} [extractValue=false]\n */\nfunction collectAnHTTPQuotedString (input, position, extractValue = false) {\n  // 1. Let positionStart be position.\n  const positionStart = position.position\n\n  // 2. Let value be the empty string.\n  let value = ''\n\n  // 3. Assert: the code point at position within input\n  // is U+0022 (\").\n  assert(input[position.position] === '\"')\n\n  // 4. Advance position by 1.\n  position.position++\n\n  // 5. While true:\n  while (true) {\n    // 1. Append the result of collecting a sequence of code points\n    // that are not U+0022 (\") or U+005C (\\) from input, given\n    // position, to value.\n    value += collectASequenceOfCodePoints(\n      (char) => char !== '\"' && char !== '\\\\',\n      input,\n      position\n    )\n\n    // 2. If position is past the end of input, then break.\n    if (position.position >= input.length) {\n      break\n    }\n\n    // 3. Let quoteOrBackslash be the code point at position within\n    // input.\n    const quoteOrBackslash = input[position.position]\n\n    // 4. Advance position by 1.\n    position.position++\n\n    // 5. If quoteOrBackslash is U+005C (\\), then:\n    if (quoteOrBackslash === '\\\\') {\n      // 1. If position is past the end of input, then append\n      // U+005C (\\) to value and break.\n      if (position.position >= input.length) {\n        value += '\\\\'\n        break\n      }\n\n      // 2. Append the code point at position within input to value.\n      value += input[position.position]\n\n      // 3. Advance position by 1.\n      position.position++\n\n    // 6. Otherwise:\n    } else {\n      // 1. Assert: quoteOrBackslash is U+0022 (\").\n      assert(quoteOrBackslash === '\"')\n\n      // 2. Break.\n      break\n    }\n  }\n\n  // 6. If the extract-value flag is set, then return value.\n  if (extractValue) {\n    return value\n  }\n\n  // 7. Return the code points from positionStart to position,\n  // inclusive, within input.\n  return input.slice(positionStart, position.position)\n}\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#serialize-a-mime-type\n */\nfunction serializeAMimeType (mimeType) {\n  assert(mimeType !== 'failure')\n  const { parameters, essence } = mimeType\n\n  // 1. Let serialization be the concatenation of mimeType\u2019s\n  //    type, U+002F (/), and mimeType\u2019s subtype.\n  let serialization = essence\n\n  // 2. For each name \u2192 value of mimeType\u2019s parameters:\n  for (let [name, value] of parameters.entries()) {\n    // 1. Append U+003B (;) to serialization.\n    serialization += ';'\n\n    // 2. Append name to serialization.\n    serialization += name\n\n    // 3. Append U+003D (=) to serialization.\n    serialization += '='\n\n    // 4. If value does not solely contain HTTP token code\n    //    points or value is the empty string, then:\n    if (!HTTP_TOKEN_CODEPOINTS.test(value)) {\n      // 1. Precede each occurrence of U+0022 (\") or\n      //    U+005C (\\) in value with U+005C (\\).\n      value = value.replace(/[\\\\\"]/ug, '\\\\$&')\n\n      // 2. Prepend U+0022 (\") to value.\n      value = '\"' + value\n\n      // 3. Append U+0022 (\") to value.\n      value += '\"'\n    }\n\n    // 5. Append value to serialization.\n    serialization += value\n  }\n\n  // 3. Return serialization.\n  return serialization\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#http-whitespace\n * @param {number} char\n */\nfunction isHTTPWhiteSpace (char) {\n  // \"\\r\\n\\t \"\n  return char === 0x00d || char === 0x00a || char === 0x009 || char === 0x020\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#http-whitespace\n * @param {string} str\n * @param {boolean} [leading=true]\n * @param {boolean} [trailing=true]\n */\nfunction removeHTTPWhitespace (str, leading = true, trailing = true) {\n  return removeChars(str, leading, trailing, isHTTPWhiteSpace)\n}\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#minimize-a-supported-mime-type\n * @param {Exclude<ReturnType<typeof parseMIMEType>, 'failure'>} mimeType\n */\nfunction minimizeSupportedMimeType (mimeType) {\n  switch (mimeType.essence) {\n    case 'application/ecmascript':\n    case 'application/javascript':\n    case 'application/x-ecmascript':\n    case 'application/x-javascript':\n    case 'text/ecmascript':\n    case 'text/javascript':\n    case 'text/javascript1.0':\n    case 'text/javascript1.1':\n    case 'text/javascript1.2':\n    case 'text/javascript1.3':\n    case 'text/javascript1.4':\n    case 'text/javascript1.5':\n    case 'text/jscript':\n    case 'text/livescript':\n    case 'text/x-ecmascript':\n    case 'text/x-javascript':\n      // 1. If mimeType is a JavaScript MIME type, then return \"text/javascript\".\n      return 'text/javascript'\n    case 'application/json':\n    case 'text/json':\n      // 2. If mimeType is a JSON MIME type, then return \"application/json\".\n      return 'application/json'\n    case 'image/svg+xml':\n      // 3. If mimeType\u2019s essence is \"image/svg+xml\", then return \"image/svg+xml\".\n      return 'image/svg+xml'\n    case 'text/xml':\n    case 'application/xml':\n      // 4. If mimeType is an XML MIME type, then return \"application/xml\".\n      return 'application/xml'\n  }\n\n  // 2. If mimeType is a JSON MIME type, then return \"application/json\".\n  if (mimeType.subtype.endsWith('+json')) {\n    return 'application/json'\n  }\n\n  // 4. If mimeType is an XML MIME type, then return \"application/xml\".\n  if (mimeType.subtype.endsWith('+xml')) {\n    return 'application/xml'\n  }\n\n  // 5. If mimeType is supported by the user agent, then return mimeType\u2019s essence.\n  // Technically, node doesn't support any mimetypes.\n\n  // 6. Return the empty string.\n  return ''\n}\n\nmodule.exports = {\n  dataURLProcessor,\n  URLSerializer,\n  stringPercentDecode,\n  parseMIMEType,\n  collectAnHTTPQuotedString,\n  serializeAMimeType,\n  removeHTTPWhitespace,\n  minimizeSupportedMimeType,\n  HTTP_TOKEN_CODEPOINTS\n}\n", "'use strict'\n\n/** @typedef {`node:${string}`} NodeModuleName */\n\n/** @type {Record<NodeModuleName, () => any>} */\nconst lazyLoaders = {\n  __proto__: null,\n  'node:crypto': () => require('node:crypto'),\n  'node:sqlite': () => require('node:sqlite'),\n  'node:worker_threads': () => require('node:worker_threads'),\n  'node:zlib': () => require('node:zlib')\n}\n\n/**\n * @param {NodeModuleName} moduleName\n * @returns {boolean}\n */\nfunction detectRuntimeFeatureByNodeModule (moduleName) {\n  try {\n    lazyLoaders[moduleName]()\n    return true\n  } catch (err) {\n    if (err.code !== 'ERR_UNKNOWN_BUILTIN_MODULE' && err.code !== 'ERR_NO_CRYPTO') {\n      throw err\n    }\n    return false\n  }\n}\n\n/**\n * @param {NodeModuleName} moduleName\n * @param {string} property\n * @returns {boolean}\n */\nfunction detectRuntimeFeatureByExportedProperty (moduleName, property) {\n  const module = lazyLoaders[moduleName]()\n  return typeof module[property] !== 'undefined'\n}\n\nconst runtimeFeaturesByExportedProperty = /** @type {const} */ (['markAsUncloneable', 'zstd'])\n\n/** @type {Record<RuntimeFeatureByExportedProperty, [NodeModuleName, string]>} */\nconst exportedPropertyLookup = {\n  markAsUncloneable: ['node:worker_threads', 'markAsUncloneable'],\n  zstd: ['node:zlib', 'createZstdDecompress']\n}\n\n/** @typedef {typeof runtimeFeaturesByExportedProperty[number]} RuntimeFeatureByExportedProperty */\n\nconst runtimeFeaturesAsNodeModule = /** @type {const} */ (['crypto', 'sqlite'])\n/** @typedef {typeof runtimeFeaturesAsNodeModule[number]} RuntimeFeatureByNodeModule */\n\nconst features = /** @type {const} */ ([\n  ...runtimeFeaturesAsNodeModule,\n  ...runtimeFeaturesByExportedProperty\n])\n\n/** @typedef {typeof features[number]} Feature */\n\n/**\n * @param {Feature} feature\n * @returns {boolean}\n */\nfunction detectRuntimeFeature (feature) {\n  if (runtimeFeaturesAsNodeModule.includes(/** @type {RuntimeFeatureByNodeModule} */ (feature))) {\n    return detectRuntimeFeatureByNodeModule(`node:${feature}`)\n  } else if (runtimeFeaturesByExportedProperty.includes(/** @type {RuntimeFeatureByExportedProperty} */ (feature))) {\n    const [moduleName, property] = exportedPropertyLookup[feature]\n    return detectRuntimeFeatureByExportedProperty(moduleName, property)\n  }\n  throw new TypeError(`unknown feature: ${feature}`)\n}\n\n/**\n * @class\n * @name RuntimeFeatures\n */\nclass RuntimeFeatures {\n  /** @type {Map<Feature, boolean>} */\n  #map = new Map()\n\n  /**\n   * Clears all cached feature detections.\n   */\n  clear () {\n    this.#map.clear()\n  }\n\n  /**\n   * @param {Feature} feature\n   * @returns {boolean}\n   */\n  has (feature) {\n    return (\n      this.#map.get(feature) ?? this.#detectRuntimeFeature(feature)\n    )\n  }\n\n  /**\n   * @param {Feature} feature\n   * @param {boolean} value\n   */\n  set (feature, value) {\n    if (features.includes(feature) === false) {\n      throw new TypeError(`unknown feature: ${feature}`)\n    }\n    this.#map.set(feature, value)\n  }\n\n  /**\n   * @param {Feature} feature\n   * @returns {boolean}\n   */\n  #detectRuntimeFeature (feature) {\n    const result = detectRuntimeFeature(feature)\n    this.#map.set(feature, result)\n    return result\n  }\n}\n\nconst instance = new RuntimeFeatures()\n\nmodule.exports.runtimeFeatures = instance\nmodule.exports.default = instance\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { types, inspect } = require('node:util')\nconst { runtimeFeatures } = require('../../util/runtime-features')\n\nconst UNDEFINED = 1\nconst BOOLEAN = 2\nconst STRING = 3\nconst SYMBOL = 4\nconst NUMBER = 5\nconst BIGINT = 6\nconst NULL = 7\nconst OBJECT = 8 // function and object\n\nconst FunctionPrototypeSymbolHasInstance = Function.call.bind(Function.prototype[Symbol.hasInstance])\n\n/** @type {import('../../../types/webidl').Webidl} */\nconst webidl = {\n  converters: {},\n  util: {},\n  errors: {},\n  is: {}\n}\n\n/**\n * @description Instantiate an error.\n *\n * @param {Object} opts\n * @param {string} opts.header\n * @param {string} opts.message\n * @returns {TypeError}\n */\nwebidl.errors.exception = function (message) {\n  return new TypeError(`${message.header}: ${message.message}`)\n}\n\n/**\n * @description Instantiate an error when conversion from one type to another has failed.\n *\n * @param {Object} opts\n * @param {string} opts.prefix\n * @param {string} opts.argument\n * @param {string[]} opts.types\n * @returns {TypeError}\n */\nwebidl.errors.conversionFailed = function (opts) {\n  const plural = opts.types.length === 1 ? '' : ' one of'\n  const message =\n    `${opts.argument} could not be converted to` +\n    `${plural}: ${opts.types.join(', ')}.`\n\n  return webidl.errors.exception({\n    header: opts.prefix,\n    message\n  })\n}\n\n/**\n * @description Instantiate an error when an invalid argument is provided\n *\n * @param {Object} context\n * @param {string} context.prefix\n * @param {string} context.value\n * @param {string} context.type\n * @returns {TypeError}\n */\nwebidl.errors.invalidArgument = function (context) {\n  return webidl.errors.exception({\n    header: context.prefix,\n    message: `\"${context.value}\" is an invalid ${context.type}.`\n  })\n}\n\n// https://webidl.spec.whatwg.org/#implements\nwebidl.brandCheck = function (V, I) {\n  if (!FunctionPrototypeSymbolHasInstance(I, V)) {\n    const err = new TypeError('Illegal invocation')\n    err.code = 'ERR_INVALID_THIS' // node compat.\n    throw err\n  }\n}\n\nwebidl.brandCheckMultiple = function (List) {\n  const prototypes = List.map((c) => webidl.util.MakeTypeAssertion(c))\n\n  return (V) => {\n    if (prototypes.every(typeCheck => !typeCheck(V))) {\n      const err = new TypeError('Illegal invocation')\n      err.code = 'ERR_INVALID_THIS' // node compat.\n      throw err\n    }\n  }\n}\n\nwebidl.argumentLengthCheck = function ({ length }, min, ctx) {\n  if (length < min) {\n    throw webidl.errors.exception({\n      message: `${min} argument${min !== 1 ? 's' : ''} required, ` +\n               `but${length ? ' only' : ''} ${length} found.`,\n      header: ctx\n    })\n  }\n}\n\nwebidl.illegalConstructor = function () {\n  throw webidl.errors.exception({\n    header: 'TypeError',\n    message: 'Illegal constructor'\n  })\n}\n\nwebidl.util.MakeTypeAssertion = function (I) {\n  return (O) => FunctionPrototypeSymbolHasInstance(I, O)\n}\n\n// https://tc39.es/ecma262/#sec-ecmascript-data-types-and-values\nwebidl.util.Type = function (V) {\n  switch (typeof V) {\n    case 'undefined': return UNDEFINED\n    case 'boolean': return BOOLEAN\n    case 'string': return STRING\n    case 'symbol': return SYMBOL\n    case 'number': return NUMBER\n    case 'bigint': return BIGINT\n    case 'function':\n    case 'object': {\n      if (V === null) {\n        return NULL\n      }\n\n      return OBJECT\n    }\n  }\n}\n\nwebidl.util.Types = {\n  UNDEFINED,\n  BOOLEAN,\n  STRING,\n  SYMBOL,\n  NUMBER,\n  BIGINT,\n  NULL,\n  OBJECT\n}\n\nwebidl.util.TypeValueToString = function (o) {\n  switch (webidl.util.Type(o)) {\n    case UNDEFINED: return 'Undefined'\n    case BOOLEAN: return 'Boolean'\n    case STRING: return 'String'\n    case SYMBOL: return 'Symbol'\n    case NUMBER: return 'Number'\n    case BIGINT: return 'BigInt'\n    case NULL: return 'Null'\n    case OBJECT: return 'Object'\n  }\n}\n\nwebidl.util.markAsUncloneable = runtimeFeatures.has('markAsUncloneable')\n  ? require('node:worker_threads').markAsUncloneable\n  : () => {}\n\n// https://webidl.spec.whatwg.org/#abstract-opdef-converttoint\nwebidl.util.ConvertToInt = function (V, bitLength, signedness, flags) {\n  let upperBound\n  let lowerBound\n\n  // 1. If bitLength is 64, then:\n  if (bitLength === 64) {\n    // 1. Let upperBound be 2^53 \u2212 1.\n    upperBound = Math.pow(2, 53) - 1\n\n    // 2. If signedness is \"unsigned\", then let lowerBound be 0.\n    if (signedness === 'unsigned') {\n      lowerBound = 0\n    } else {\n      // 3. Otherwise let lowerBound be \u22122^53 + 1.\n      lowerBound = Math.pow(-2, 53) + 1\n    }\n  } else if (signedness === 'unsigned') {\n    // 2. Otherwise, if signedness is \"unsigned\", then:\n\n    // 1. Let lowerBound be 0.\n    lowerBound = 0\n\n    // 2. Let upperBound be 2^bitLength \u2212 1.\n    upperBound = Math.pow(2, bitLength) - 1\n  } else {\n    // 3. Otherwise:\n\n    // 1. Let lowerBound be -2^bitLength \u2212 1.\n    lowerBound = Math.pow(-2, bitLength) - 1\n\n    // 2. Let upperBound be 2^bitLength \u2212 1 \u2212 1.\n    upperBound = Math.pow(2, bitLength - 1) - 1\n  }\n\n  // 4. Let x be ? ToNumber(V).\n  let x = Number(V)\n\n  // 5. If x is \u22120, then set x to +0.\n  if (x === 0) {\n    x = 0\n  }\n\n  // 6. If the conversion is to an IDL type associated\n  //    with the [EnforceRange] extended attribute, then:\n  if (webidl.util.HasFlag(flags, webidl.attributes.EnforceRange)) {\n    // 1. If x is NaN, +\u221E, or \u2212\u221E, then throw a TypeError.\n    if (\n      Number.isNaN(x) ||\n      x === Number.POSITIVE_INFINITY ||\n      x === Number.NEGATIVE_INFINITY\n    ) {\n      throw webidl.errors.exception({\n        header: 'Integer conversion',\n        message: `Could not convert ${webidl.util.Stringify(V)} to an integer.`\n      })\n    }\n\n    // 2. Set x to IntegerPart(x).\n    x = webidl.util.IntegerPart(x)\n\n    // 3. If x < lowerBound or x > upperBound, then\n    //    throw a TypeError.\n    if (x < lowerBound || x > upperBound) {\n      throw webidl.errors.exception({\n        header: 'Integer conversion',\n        message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.`\n      })\n    }\n\n    // 4. Return x.\n    return x\n  }\n\n  // 7. If x is not NaN and the conversion is to an IDL\n  //    type associated with the [Clamp] extended\n  //    attribute, then:\n  if (!Number.isNaN(x) && webidl.util.HasFlag(flags, webidl.attributes.Clamp)) {\n    // 1. Set x to min(max(x, lowerBound), upperBound).\n    x = Math.min(Math.max(x, lowerBound), upperBound)\n\n    // 2. Round x to the nearest integer, choosing the\n    //    even integer if it lies halfway between two,\n    //    and choosing +0 rather than \u22120.\n    if (Math.floor(x) % 2 === 0) {\n      x = Math.floor(x)\n    } else {\n      x = Math.ceil(x)\n    }\n\n    // 3. Return x.\n    return x\n  }\n\n  // 8. If x is NaN, +0, +\u221E, or \u2212\u221E, then return +0.\n  if (\n    Number.isNaN(x) ||\n    (x === 0 && Object.is(0, x)) ||\n    x === Number.POSITIVE_INFINITY ||\n    x === Number.NEGATIVE_INFINITY\n  ) {\n    return 0\n  }\n\n  // 9. Set x to IntegerPart(x).\n  x = webidl.util.IntegerPart(x)\n\n  // 10. Set x to x modulo 2^bitLength.\n  x = x % Math.pow(2, bitLength)\n\n  // 11. If signedness is \"signed\" and x \u2265 2^bitLength \u2212 1,\n  //    then return x \u2212 2^bitLength.\n  if (signedness === 'signed' && x >= Math.pow(2, bitLength) - 1) {\n    return x - Math.pow(2, bitLength)\n  }\n\n  // 12. Otherwise, return x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#abstract-opdef-integerpart\nwebidl.util.IntegerPart = function (n) {\n  // 1. Let r be floor(abs(n)).\n  const r = Math.floor(Math.abs(n))\n\n  // 2. If n < 0, then return -1 \u00D7 r.\n  if (n < 0) {\n    return -1 * r\n  }\n\n  // 3. Otherwise, return r.\n  return r\n}\n\nwebidl.util.Stringify = function (V) {\n  const type = webidl.util.Type(V)\n\n  switch (type) {\n    case SYMBOL:\n      return `Symbol(${V.description})`\n    case OBJECT:\n      return inspect(V)\n    case STRING:\n      return `\"${V}\"`\n    case BIGINT:\n      return `${V}n`\n    default:\n      return `${V}`\n  }\n}\n\nwebidl.util.IsResizableArrayBuffer = function (V) {\n  if (types.isArrayBuffer(V)) {\n    return V.resizable\n  }\n\n  if (types.isSharedArrayBuffer(V)) {\n    return V.growable\n  }\n\n  throw webidl.errors.exception({\n    header: 'IsResizableArrayBuffer',\n    message: `\"${webidl.util.Stringify(V)}\" is not an array buffer.`\n  })\n}\n\nwebidl.util.HasFlag = function (flags, attributes) {\n  return typeof flags === 'number' && (flags & attributes) === attributes\n}\n\n// https://webidl.spec.whatwg.org/#es-sequence\nwebidl.sequenceConverter = function (converter) {\n  return (V, prefix, argument, Iterable) => {\n    // 1. If Type(V) is not Object, throw a TypeError.\n    if (webidl.util.Type(V) !== OBJECT) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `${argument} (${webidl.util.Stringify(V)}) is not iterable.`\n      })\n    }\n\n    // 2. Let method be ? GetMethod(V, @@iterator).\n    /** @type {Generator} */\n    const method = typeof Iterable === 'function' ? Iterable() : V?.[Symbol.iterator]?.()\n    const seq = []\n    let index = 0\n\n    // 3. If method is undefined, throw a TypeError.\n    if (\n      method === undefined ||\n      typeof method.next !== 'function'\n    ) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `${argument} is not iterable.`\n      })\n    }\n\n    // https://webidl.spec.whatwg.org/#create-sequence-from-iterable\n    while (true) {\n      const { done, value } = method.next()\n\n      if (done) {\n        break\n      }\n\n      seq.push(converter(value, prefix, `${argument}[${index++}]`))\n    }\n\n    return seq\n  }\n}\n\n// https://webidl.spec.whatwg.org/#es-to-record\nwebidl.recordConverter = function (keyConverter, valueConverter) {\n  return (O, prefix, argument) => {\n    // 1. If Type(O) is not Object, throw a TypeError.\n    if (webidl.util.Type(O) !== OBJECT) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `${argument} (\"${webidl.util.TypeValueToString(O)}\") is not an Object.`\n      })\n    }\n\n    // 2. Let result be a new empty instance of record<K, V>.\n    const result = {}\n\n    if (!types.isProxy(O)) {\n      // 1. Let desc be ? O.[[GetOwnProperty]](key).\n      const keys = [...Object.getOwnPropertyNames(O), ...Object.getOwnPropertySymbols(O)]\n\n      for (const key of keys) {\n        const keyName = webidl.util.Stringify(key)\n\n        // 1. Let typedKey be key converted to an IDL value of type K.\n        const typedKey = keyConverter(key, prefix, `Key ${keyName} in ${argument}`)\n\n        // 2. Let value be ? Get(O, key).\n        // 3. Let typedValue be value converted to an IDL value of type V.\n        const typedValue = valueConverter(O[key], prefix, `${argument}[${keyName}]`)\n\n        // 4. Set result[typedKey] to typedValue.\n        result[typedKey] = typedValue\n      }\n\n      // 5. Return result.\n      return result\n    }\n\n    // 3. Let keys be ? O.[[OwnPropertyKeys]]().\n    const keys = Reflect.ownKeys(O)\n\n    // 4. For each key of keys.\n    for (const key of keys) {\n      // 1. Let desc be ? O.[[GetOwnProperty]](key).\n      const desc = Reflect.getOwnPropertyDescriptor(O, key)\n\n      // 2. If desc is not undefined and desc.[[Enumerable]] is true:\n      if (desc?.enumerable) {\n        // 1. Let typedKey be key converted to an IDL value of type K.\n        const typedKey = keyConverter(key, prefix, argument)\n\n        // 2. Let value be ? Get(O, key).\n        // 3. Let typedValue be value converted to an IDL value of type V.\n        const typedValue = valueConverter(O[key], prefix, argument)\n\n        // 4. Set result[typedKey] to typedValue.\n        result[typedKey] = typedValue\n      }\n    }\n\n    // 5. Return result.\n    return result\n  }\n}\n\nwebidl.interfaceConverter = function (TypeCheck, name) {\n  return (V, prefix, argument) => {\n    if (!TypeCheck(V)) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `Expected ${argument} (\"${webidl.util.Stringify(V)}\") to be an instance of ${name}.`\n      })\n    }\n\n    return V\n  }\n}\n\nwebidl.dictionaryConverter = function (converters) {\n  // \"For each dictionary member member declared on dictionary, in lexicographical order:\"\n  converters.sort((a, b) => (a.key > b.key) - (a.key < b.key))\n\n  return (dictionary, prefix, argument) => {\n    const dict = {}\n\n    if (dictionary != null && webidl.util.Type(dictionary) !== OBJECT) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `Expected ${dictionary} to be one of: Null, Undefined, Object.`\n      })\n    }\n\n    for (const options of converters) {\n      const { key, defaultValue, required, converter } = options\n\n      if (required === true) {\n        if (dictionary == null || !Object.hasOwn(dictionary, key)) {\n          throw webidl.errors.exception({\n            header: prefix,\n            message: `Missing required key \"${key}\".`\n          })\n        }\n      }\n\n      let value = dictionary?.[key]\n      const hasDefault = defaultValue !== undefined\n\n      // Only use defaultValue if value is undefined and\n      // a defaultValue options was provided.\n      if (hasDefault && value === undefined) {\n        value = defaultValue()\n      }\n\n      // A key can be optional and have no default value.\n      // When this happens, do not perform a conversion,\n      // and do not assign the key a value.\n      if (required || hasDefault || value !== undefined) {\n        value = converter(value, prefix, `${argument}.${key}`)\n\n        if (\n          options.allowedValues &&\n          !options.allowedValues.includes(value)\n        ) {\n          throw webidl.errors.exception({\n            header: prefix,\n            message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(', ')}.`\n          })\n        }\n\n        dict[key] = value\n      }\n    }\n\n    return dict\n  }\n}\n\nwebidl.nullableConverter = function (converter) {\n  return (V, prefix, argument) => {\n    if (V === null) {\n      return V\n    }\n\n    return converter(V, prefix, argument)\n  }\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nwebidl.is.USVString = function (value) {\n  return (\n    typeof value === 'string' &&\n    value.isWellFormed()\n  )\n}\n\nwebidl.is.ReadableStream = webidl.util.MakeTypeAssertion(ReadableStream)\nwebidl.is.Blob = webidl.util.MakeTypeAssertion(Blob)\nwebidl.is.URLSearchParams = webidl.util.MakeTypeAssertion(URLSearchParams)\nwebidl.is.File = webidl.util.MakeTypeAssertion(File)\nwebidl.is.URL = webidl.util.MakeTypeAssertion(URL)\nwebidl.is.AbortSignal = webidl.util.MakeTypeAssertion(AbortSignal)\nwebidl.is.MessagePort = webidl.util.MakeTypeAssertion(MessagePort)\n\nwebidl.is.BufferSource = function (V) {\n  return types.isArrayBuffer(V) || (\n    ArrayBuffer.isView(V) &&\n    types.isArrayBuffer(V.buffer)\n  )\n}\n\n// https://webidl.spec.whatwg.org/#dfn-get-buffer-source-copy\nwebidl.util.getCopyOfBytesHeldByBufferSource = function (bufferSource) {\n  // 1. Let jsBufferSource be the result of converting bufferSource to a JavaScript value.\n  const jsBufferSource = bufferSource\n\n  // 2. Let jsArrayBuffer be jsBufferSource.\n  let jsArrayBuffer = jsBufferSource\n\n  // 3. Let offset be 0.\n  let offset = 0\n\n  // 4. Let length be 0.\n  let length = 0\n\n  // 5. If jsBufferSource has a [[ViewedArrayBuffer]] internal slot, then:\n  if (types.isTypedArray(jsBufferSource) || types.isDataView(jsBufferSource)) {\n    // 5.1. Set jsArrayBuffer to jsBufferSource.[[ViewedArrayBuffer]].\n    jsArrayBuffer = jsBufferSource.buffer\n\n    // 5.2. Set offset to jsBufferSource.[[ByteOffset]].\n    offset = jsBufferSource.byteOffset\n\n    // 5.3. Set length to jsBufferSource.[[ByteLength]].\n    length = jsBufferSource.byteLength\n  } else {\n    // 6. Otherwise:\n\n    // 6.1. Assert: jsBufferSource is an ArrayBuffer or SharedArrayBuffer object.\n    assert(types.isAnyArrayBuffer(jsBufferSource))\n\n    // 6.2. Set length to jsBufferSource.[[ArrayBufferByteLength]].\n    length = jsBufferSource.byteLength\n  }\n\n  // 7. If IsDetachedBuffer(jsArrayBuffer) is true, then return the empty byte sequence.\n  if (jsArrayBuffer.detached) {\n    return new Uint8Array(0)\n  }\n\n  // 8. Let bytes be a new byte sequence of length equal to length.\n  const bytes = new Uint8Array(length)\n\n  // 9. For i in the range offset to offset + length \u2212 1, inclusive,\n  //    set bytes[i \u2212 offset] to GetValueFromBuffer(jsArrayBuffer, i, Uint8, true, Unordered).\n  const view = new Uint8Array(jsArrayBuffer, offset, length)\n  bytes.set(view)\n\n  // 10. Return bytes.\n  return bytes\n}\n\n// https://webidl.spec.whatwg.org/#es-DOMString\nwebidl.converters.DOMString = function (V, prefix, argument, flags) {\n  // 1. If V is null and the conversion is to an IDL type\n  //    associated with the [LegacyNullToEmptyString]\n  //    extended attribute, then return the DOMString value\n  //    that represents the empty string.\n  if (V === null && webidl.util.HasFlag(flags, webidl.attributes.LegacyNullToEmptyString)) {\n    return ''\n  }\n\n  // 2. Let x be ? ToString(V).\n  if (typeof V === 'symbol') {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} is a symbol, which cannot be converted to a DOMString.`\n    })\n  }\n\n  // 3. Return the IDL DOMString value that represents the\n  //    same sequence of code units as the one the\n  //    ECMAScript String value x represents.\n  return String(V)\n}\n\n// https://webidl.spec.whatwg.org/#es-ByteString\nwebidl.converters.ByteString = function (V, prefix, argument) {\n  // 1. Let x be ? ToString(V).\n  if (typeof V === 'symbol') {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} is a symbol, which cannot be converted to a ByteString.`\n    })\n  }\n\n  const x = String(V)\n\n  // 2. If the value of any element of x is greater than\n  //    255, then throw a TypeError.\n  for (let index = 0; index < x.length; index++) {\n    if (x.charCodeAt(index) > 255) {\n      throw new TypeError(\n        'Cannot convert argument to a ByteString because the character at ' +\n        `index ${index} has a value of ${x.charCodeAt(index)} which is greater than 255.`\n      )\n    }\n  }\n\n  // 3. Return an IDL ByteString value whose length is the\n  //    length of x, and where the value of each element is\n  //    the value of the corresponding element of x.\n  return x\n}\n\n/**\n * @param {unknown} value\n * @returns {string}\n * @see https://webidl.spec.whatwg.org/#es-USVString\n */\nwebidl.converters.USVString = function (value) {\n  // TODO: rewrite this so we can control the errors thrown\n  if (typeof value === 'string') {\n    return value.toWellFormed()\n  }\n  return `${value}`.toWellFormed()\n}\n\n// https://webidl.spec.whatwg.org/#es-boolean\nwebidl.converters.boolean = function (V) {\n  // 1. Let x be the result of computing ToBoolean(V).\n  // https://262.ecma-international.org/10.0/index.html#table-10\n  const x = Boolean(V)\n\n  // 2. Return the IDL boolean value that is the one that represents\n  //    the same truth value as the ECMAScript Boolean value x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-any\nwebidl.converters.any = function (V) {\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#es-long-long\nwebidl.converters['long long'] = function (V, prefix, argument) {\n  // 1. Let x be ? ConvertToInt(V, 64, \"signed\").\n  const x = webidl.util.ConvertToInt(V, 64, 'signed', 0, prefix, argument)\n\n  // 2. Return the IDL long long value that represents\n  //    the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-unsigned-long-long\nwebidl.converters['unsigned long long'] = function (V, prefix, argument) {\n  // 1. Let x be ? ConvertToInt(V, 64, \"unsigned\").\n  const x = webidl.util.ConvertToInt(V, 64, 'unsigned', 0, prefix, argument)\n\n  // 2. Return the IDL unsigned long long value that\n  //    represents the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-unsigned-long\nwebidl.converters['unsigned long'] = function (V, prefix, argument) {\n  // 1. Let x be ? ConvertToInt(V, 32, \"unsigned\").\n  const x = webidl.util.ConvertToInt(V, 32, 'unsigned', 0, prefix, argument)\n\n  // 2. Return the IDL unsigned long value that\n  //    represents the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-unsigned-short\nwebidl.converters['unsigned short'] = function (V, prefix, argument, flags) {\n  // 1. Let x be ? ConvertToInt(V, 16, \"unsigned\").\n  const x = webidl.util.ConvertToInt(V, 16, 'unsigned', flags, prefix, argument)\n\n  // 2. Return the IDL unsigned short value that represents\n  //    the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#idl-ArrayBuffer\nwebidl.converters.ArrayBuffer = function (V, prefix, argument, flags) {\n  // 1. If V is not an Object, or V does not have an\n  //    [[ArrayBufferData]] internal slot, then throw a\n  //    TypeError.\n  // 2. If IsSharedArrayBuffer(V) is true, then throw a\n  //    TypeError.\n  // see: https://tc39.es/ecma262/#sec-properties-of-the-arraybuffer-instances\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isArrayBuffer(V)\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['ArrayBuffer']\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V) is true, then throw a\n  //    TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a resizable ArrayBuffer.`\n    })\n  }\n\n  // 4. Return the IDL ArrayBuffer value that is a\n  //    reference to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#idl-SharedArrayBuffer\nwebidl.converters.SharedArrayBuffer = function (V, prefix, argument, flags) {\n  // 1. If V is not an Object, or V does not have an\n  //    [[ArrayBufferData]] internal slot, then throw a\n  //    TypeError.\n  // 2. If IsSharedArrayBuffer(V) is false, then throw a\n  //    TypeError.\n  // see: https://tc39.es/ecma262/#sec-properties-of-the-sharedarraybuffer-instances\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isSharedArrayBuffer(V)\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['SharedArrayBuffer']\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V) is true, then throw a\n  //    TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a resizable SharedArrayBuffer.`\n    })\n  }\n\n  // 4. Return the IDL SharedArrayBuffer value that is a\n  //    reference to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#dfn-typed-array-type\nwebidl.converters.TypedArray = function (V, T, prefix, argument, flags) {\n  // 1. Let T be the IDL type V is being converted to.\n\n  // 2. If Type(V) is not Object, or V does not have a\n  //    [[TypedArrayName]] internal slot with a value\n  //    equal to T\u2019s name, then throw a TypeError.\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isTypedArray(V) ||\n    V.constructor.name !== T.name\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: [T.name]\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowShared] extended attribute, and\n  //    IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is\n  //    true, then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowShared) && types.isSharedArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a shared array buffer.`\n    })\n  }\n\n  // 4. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is\n  //    true, then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a resizable array buffer.`\n    })\n  }\n\n  // 5. Return the IDL value of type T that is a reference\n  //    to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#idl-DataView\nwebidl.converters.DataView = function (V, prefix, argument, flags) {\n  // 1. If Type(V) is not Object, or V does not have a\n  //    [[DataView]] internal slot, then throw a TypeError.\n  if (webidl.util.Type(V) !== OBJECT || !types.isDataView(V)) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['DataView']\n    })\n  }\n\n  // 2. If the conversion is not to an IDL type associated\n  //    with the [AllowShared] extended attribute, and\n  //    IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is true,\n  //    then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowShared) && types.isSharedArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a shared array buffer.`\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is\n  //    true, then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a resizable array buffer.`\n    })\n  }\n\n  // 4. Return the IDL DataView value that is a reference\n  //    to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#ArrayBufferView\nwebidl.converters.ArrayBufferView = function (V, prefix, argument, flags) {\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isArrayBufferView(V)\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['ArrayBufferView']\n    })\n  }\n\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowShared) && types.isSharedArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a shared array buffer.`\n    })\n  }\n\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a resizable array buffer.`\n    })\n  }\n\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#BufferSource\nwebidl.converters.BufferSource = function (V, prefix, argument, flags) {\n  if (types.isArrayBuffer(V)) {\n    return webidl.converters.ArrayBuffer(V, prefix, argument, flags)\n  }\n\n  if (types.isArrayBufferView(V)) {\n    flags &= ~webidl.attributes.AllowShared\n\n    return webidl.converters.ArrayBufferView(V, prefix, argument, flags)\n  }\n\n  // Make this explicit for easier debugging\n  if (types.isSharedArrayBuffer(V)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a SharedArrayBuffer.`\n    })\n  }\n\n  throw webidl.errors.conversionFailed({\n    prefix,\n    argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n    types: ['ArrayBuffer', 'ArrayBufferView']\n  })\n}\n\n// https://webidl.spec.whatwg.org/#AllowSharedBufferSource\nwebidl.converters.AllowSharedBufferSource = function (V, prefix, argument, flags) {\n  if (types.isArrayBuffer(V)) {\n    return webidl.converters.ArrayBuffer(V, prefix, argument, flags)\n  }\n\n  if (types.isSharedArrayBuffer(V)) {\n    return webidl.converters.SharedArrayBuffer(V, prefix, argument, flags)\n  }\n\n  if (types.isArrayBufferView(V)) {\n    flags |= webidl.attributes.AllowShared\n    return webidl.converters.ArrayBufferView(V, prefix, argument, flags)\n  }\n\n  throw webidl.errors.conversionFailed({\n    prefix,\n    argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n    types: ['ArrayBuffer', 'SharedArrayBuffer', 'ArrayBufferView']\n  })\n}\n\nwebidl.converters['sequence<ByteString>'] = webidl.sequenceConverter(\n  webidl.converters.ByteString\n)\n\nwebidl.converters['sequence<sequence<ByteString>>'] = webidl.sequenceConverter(\n  webidl.converters['sequence<ByteString>']\n)\n\nwebidl.converters['record<ByteString, ByteString>'] = webidl.recordConverter(\n  webidl.converters.ByteString,\n  webidl.converters.ByteString\n)\n\nwebidl.converters.Blob = webidl.interfaceConverter(webidl.is.Blob, 'Blob')\n\nwebidl.converters.AbortSignal = webidl.interfaceConverter(\n  webidl.is.AbortSignal,\n  'AbortSignal'\n)\n\n/**\n * [LegacyTreatNonObjectAsNull]\n * callback EventHandlerNonNull = any (Event event);\n * typedef EventHandlerNonNull? EventHandler;\n * @param {*} V\n */\nwebidl.converters.EventHandlerNonNull = function (V) {\n  if (webidl.util.Type(V) !== OBJECT) {\n    return null\n  }\n\n  // [I]f the value is not an object, it will be converted to null, and if the value is not callable,\n  // it will be converted to a callback function value that does nothing when called.\n  if (typeof V === 'function') {\n    return V\n  }\n\n  return () => {}\n}\n\nwebidl.attributes = {\n  Clamp: 1 << 0,\n  EnforceRange: 1 << 1,\n  AllowShared: 1 << 2,\n  AllowResizable: 1 << 3,\n  LegacyNullToEmptyString: 1 << 4\n}\n\nmodule.exports = {\n  webidl\n}\n", "'use strict'\n\nconst { Transform } = require('node:stream')\nconst zlib = require('node:zlib')\nconst { redirectStatusSet, referrerPolicyTokens, badPortsSet } = require('./constants')\nconst { getGlobalOrigin } = require('./global')\nconst { collectAnHTTPQuotedString, parseMIMEType } = require('./data-url')\nconst { performance } = require('node:perf_hooks')\nconst { ReadableStreamFrom, isValidHTTPToken, normalizedMethodRecordsBase } = require('../../core/util')\nconst assert = require('node:assert')\nconst { isUint8Array } = require('node:util/types')\nconst { webidl } = require('../webidl')\nconst { isomorphicEncode, collectASequenceOfCodePoints, removeChars } = require('../infra')\n\nfunction responseURL (response) {\n  // https://fetch.spec.whatwg.org/#responses\n  // A response has an associated URL. It is a pointer to the last URL\n  // in response\u2019s URL list and null if response\u2019s URL list is empty.\n  const urlList = response.urlList\n  const length = urlList.length\n  return length === 0 ? null : urlList[length - 1].toString()\n}\n\n// https://fetch.spec.whatwg.org/#concept-response-location-url\nfunction responseLocationURL (response, requestFragment) {\n  // 1. If response\u2019s status is not a redirect status, then return null.\n  if (!redirectStatusSet.has(response.status)) {\n    return null\n  }\n\n  // 2. Let location be the result of extracting header list values given\n  // `Location` and response\u2019s header list.\n  let location = response.headersList.get('location', true)\n\n  // 3. If location is a header value, then set location to the result of\n  //    parsing location with response\u2019s URL.\n  if (location !== null && isValidHeaderValue(location)) {\n    if (!isValidEncodedURL(location)) {\n      // Some websites respond location header in UTF-8 form without encoding them as ASCII\n      // and major browsers redirect them to correctly UTF-8 encoded addresses.\n      // Here, we handle that behavior in the same way.\n      location = normalizeBinaryStringToUtf8(location)\n    }\n    location = new URL(location, responseURL(response))\n  }\n\n  // 4. If location is a URL whose fragment is null, then set location\u2019s\n  // fragment to requestFragment.\n  if (location && !location.hash) {\n    location.hash = requestFragment\n  }\n\n  // 5. Return location.\n  return location\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc1738#section-2.2\n * @param {string} url\n * @returns {boolean}\n */\nfunction isValidEncodedURL (url) {\n  for (let i = 0; i < url.length; ++i) {\n    const code = url.charCodeAt(i)\n\n    if (\n      code > 0x7E || // Non-US-ASCII + DEL\n      code < 0x20 // Control characters NUL - US\n    ) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * If string contains non-ASCII characters, assumes it's UTF-8 encoded and decodes it.\n * Since UTF-8 is a superset of ASCII, this will work for ASCII strings as well.\n * @param {string} value\n * @returns {string}\n */\nfunction normalizeBinaryStringToUtf8 (value) {\n  return Buffer.from(value, 'binary').toString('utf8')\n}\n\n/** @returns {URL} */\nfunction requestCurrentURL (request) {\n  return request.urlList[request.urlList.length - 1]\n}\n\nfunction requestBadPort (request) {\n  // 1. Let url be request\u2019s current URL.\n  const url = requestCurrentURL(request)\n\n  // 2. If url\u2019s scheme is an HTTP(S) scheme and url\u2019s port is a bad port,\n  // then return blocked.\n  if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) {\n    return 'blocked'\n  }\n\n  // 3. Return allowed.\n  return 'allowed'\n}\n\nfunction isErrorLike (object) {\n  return object instanceof Error || (\n    object?.constructor?.name === 'Error' ||\n    object?.constructor?.name === 'DOMException'\n  )\n}\n\n// Check whether |statusText| is a ByteString and\n// matches the Reason-Phrase token production.\n// RFC 2616: https://tools.ietf.org/html/rfc2616\n// RFC 7230: https://tools.ietf.org/html/rfc7230\n// \"reason-phrase = *( HTAB / SP / VCHAR / obs-text )\"\n// https://github.com/chromium/chromium/blob/94.0.4604.1/third_party/blink/renderer/core/fetch/response.cc#L116\nfunction isValidReasonPhrase (statusText) {\n  for (let i = 0; i < statusText.length; ++i) {\n    const c = statusText.charCodeAt(i)\n    if (\n      !(\n        (\n          c === 0x09 || // HTAB\n          (c >= 0x20 && c <= 0x7e) || // SP / VCHAR\n          (c >= 0x80 && c <= 0xff)\n        ) // obs-text\n      )\n    ) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#header-name\n * @param {string} potentialValue\n */\nconst isValidHeaderName = isValidHTTPToken\n\n/**\n * @see https://fetch.spec.whatwg.org/#header-value\n * @param {string} potentialValue\n */\nfunction isValidHeaderValue (potentialValue) {\n  // - Has no leading or trailing HTTP tab or space bytes.\n  // - Contains no 0x00 (NUL) or HTTP newline bytes.\n  return (\n    potentialValue[0] === '\\t' ||\n    potentialValue[0] === ' ' ||\n    potentialValue[potentialValue.length - 1] === '\\t' ||\n    potentialValue[potentialValue.length - 1] === ' ' ||\n    potentialValue.includes('\\n') ||\n    potentialValue.includes('\\r') ||\n    potentialValue.includes('\\0')\n  ) === false\n}\n\n/**\n * Parse a referrer policy from a Referrer-Policy header\n * @see https://w3c.github.io/webappsec-referrer-policy/#parse-referrer-policy-from-header\n */\nfunction parseReferrerPolicy (actualResponse) {\n  // 1. Let policy-tokens be the result of extracting header list values given `Referrer-Policy` and response\u2019s header list.\n  const policyHeader = (actualResponse.headersList.get('referrer-policy', true) ?? '').split(',')\n\n  // 2. Let policy be the empty string.\n  let policy = ''\n\n  // 3. For each token in policy-tokens, if token is a referrer policy and token is not the empty string, then set policy to token.\n\n  // Note: As the referrer-policy can contain multiple policies\n  // separated by comma, we need to loop through all of them\n  // and pick the first valid one.\n  // Ref: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy#specify_a_fallback_policy\n  if (policyHeader.length) {\n    // The right-most policy takes precedence.\n    // The left-most policy is the fallback.\n    for (let i = policyHeader.length; i !== 0; i--) {\n      const token = policyHeader[i - 1].trim()\n      if (referrerPolicyTokens.has(token)) {\n        policy = token\n        break\n      }\n    }\n  }\n\n  // 4. Return policy.\n  return policy\n}\n\n/**\n * Given a request request and a response actualResponse, this algorithm\n * updates request\u2019s referrer policy according to the Referrer-Policy\n * header (if any) in actualResponse.\n * @see https://w3c.github.io/webappsec-referrer-policy/#set-requests-referrer-policy-on-redirect\n * @param {import('./request').Request} request\n * @param {import('./response').Response} actualResponse\n */\nfunction setRequestReferrerPolicyOnRedirect (request, actualResponse) {\n  // 1. Let policy be the result of executing \u00A7 8.1 Parse a referrer policy\n  // from a Referrer-Policy header on actualResponse.\n  const policy = parseReferrerPolicy(actualResponse)\n\n  // 2. If policy is not the empty string, then set request\u2019s referrer policy to policy.\n  if (policy !== '') {\n    request.referrerPolicy = policy\n  }\n}\n\n// https://fetch.spec.whatwg.org/#cross-origin-resource-policy-check\nfunction crossOriginResourcePolicyCheck () {\n  // TODO\n  return 'allowed'\n}\n\n// https://fetch.spec.whatwg.org/#concept-cors-check\nfunction corsCheck () {\n  // TODO\n  return 'success'\n}\n\n// https://fetch.spec.whatwg.org/#concept-tao-check\nfunction TAOCheck () {\n  // TODO\n  return 'success'\n}\n\nfunction appendFetchMetadata (httpRequest) {\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-dest-header\n  //  TODO\n\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-mode-header\n\n  //  1. Assert: r\u2019s url is a potentially trustworthy URL.\n  //  TODO\n\n  //  2. Let header be a Structured Header whose value is a token.\n  let header = null\n\n  //  3. Set header\u2019s value to r\u2019s mode.\n  header = httpRequest.mode\n\n  //  4. Set a structured field value `Sec-Fetch-Mode`/header in r\u2019s header list.\n  httpRequest.headersList.set('sec-fetch-mode', header, true)\n\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-site-header\n  //  TODO\n\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-user-header\n  //  TODO\n}\n\n// https://fetch.spec.whatwg.org/#append-a-request-origin-header\nfunction appendRequestOriginHeader (request) {\n  // 1. Let serializedOrigin be the result of byte-serializing a request origin\n  //    with request.\n  // TODO: implement \"byte-serializing a request origin\"\n  let serializedOrigin = request.origin\n\n  // - \"'client' is changed to an origin during fetching.\"\n  //   This doesn't happen in undici (in most cases) because undici, by default,\n  //   has no concept of origin.\n  // - request.origin can also be set to request.client.origin (client being\n  //   an environment settings object), which is undefined without using\n  //   setGlobalOrigin.\n  if (serializedOrigin === 'client' || serializedOrigin === undefined) {\n    return\n  }\n\n  // 2. If request\u2019s response tainting is \"cors\" or request\u2019s mode is \"websocket\",\n  //    then append (`Origin`, serializedOrigin) to request\u2019s header list.\n  // 3. Otherwise, if request\u2019s method is neither `GET` nor `HEAD`, then:\n  if (request.responseTainting === 'cors' || request.mode === 'websocket') {\n    request.headersList.append('origin', serializedOrigin, true)\n  } else if (request.method !== 'GET' && request.method !== 'HEAD') {\n    // 1. Switch on request\u2019s referrer policy:\n    switch (request.referrerPolicy) {\n      case 'no-referrer':\n        // Set serializedOrigin to `null`.\n        serializedOrigin = null\n        break\n      case 'no-referrer-when-downgrade':\n      case 'strict-origin':\n      case 'strict-origin-when-cross-origin':\n        // If request\u2019s origin is a tuple origin, its scheme is \"https\", and\n        // request\u2019s current URL\u2019s scheme is not \"https\", then set\n        // serializedOrigin to `null`.\n        if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) {\n          serializedOrigin = null\n        }\n        break\n      case 'same-origin':\n        // If request\u2019s origin is not same origin with request\u2019s current URL\u2019s\n        // origin, then set serializedOrigin to `null`.\n        if (!sameOrigin(request, requestCurrentURL(request))) {\n          serializedOrigin = null\n        }\n        break\n      default:\n        // Do nothing.\n    }\n\n    // 2. Append (`Origin`, serializedOrigin) to request\u2019s header list.\n    request.headersList.append('origin', serializedOrigin, true)\n  }\n}\n\n// https://w3c.github.io/hr-time/#dfn-coarsen-time\nfunction coarsenTime (timestamp, crossOriginIsolatedCapability) {\n  // TODO\n  return timestamp\n}\n\n// https://fetch.spec.whatwg.org/#clamp-and-coarsen-connection-timing-info\nfunction clampAndCoarsenConnectionTimingInfo (connectionTimingInfo, defaultStartTime, crossOriginIsolatedCapability) {\n  if (!connectionTimingInfo?.startTime || connectionTimingInfo.startTime < defaultStartTime) {\n    return {\n      domainLookupStartTime: defaultStartTime,\n      domainLookupEndTime: defaultStartTime,\n      connectionStartTime: defaultStartTime,\n      connectionEndTime: defaultStartTime,\n      secureConnectionStartTime: defaultStartTime,\n      ALPNNegotiatedProtocol: connectionTimingInfo?.ALPNNegotiatedProtocol\n    }\n  }\n\n  return {\n    domainLookupStartTime: coarsenTime(connectionTimingInfo.domainLookupStartTime, crossOriginIsolatedCapability),\n    domainLookupEndTime: coarsenTime(connectionTimingInfo.domainLookupEndTime, crossOriginIsolatedCapability),\n    connectionStartTime: coarsenTime(connectionTimingInfo.connectionStartTime, crossOriginIsolatedCapability),\n    connectionEndTime: coarsenTime(connectionTimingInfo.connectionEndTime, crossOriginIsolatedCapability),\n    secureConnectionStartTime: coarsenTime(connectionTimingInfo.secureConnectionStartTime, crossOriginIsolatedCapability),\n    ALPNNegotiatedProtocol: connectionTimingInfo.ALPNNegotiatedProtocol\n  }\n}\n\n// https://w3c.github.io/hr-time/#dfn-coarsened-shared-current-time\nfunction coarsenedSharedCurrentTime (crossOriginIsolatedCapability) {\n  return coarsenTime(performance.now(), crossOriginIsolatedCapability)\n}\n\n// https://fetch.spec.whatwg.org/#create-an-opaque-timing-info\nfunction createOpaqueTimingInfo (timingInfo) {\n  return {\n    startTime: timingInfo.startTime ?? 0,\n    redirectStartTime: 0,\n    redirectEndTime: 0,\n    postRedirectStartTime: timingInfo.startTime ?? 0,\n    finalServiceWorkerStartTime: 0,\n    finalNetworkResponseStartTime: 0,\n    finalNetworkRequestStartTime: 0,\n    endTime: 0,\n    encodedBodySize: 0,\n    decodedBodySize: 0,\n    finalConnectionTimingInfo: null\n  }\n}\n\n// https://html.spec.whatwg.org/multipage/origin.html#policy-container\nfunction makePolicyContainer () {\n  // Note: the fetch spec doesn't make use of embedder policy or CSP list\n  return {\n    referrerPolicy: 'strict-origin-when-cross-origin'\n  }\n}\n\n// https://html.spec.whatwg.org/multipage/origin.html#clone-a-policy-container\nfunction clonePolicyContainer (policyContainer) {\n  return {\n    referrerPolicy: policyContainer.referrerPolicy\n  }\n}\n\n/**\n * Determine request\u2019s Referrer\n *\n * @see https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer\n */\nfunction determineRequestsReferrer (request) {\n  // Given a request request, we can determine the correct referrer information\n  // to send by examining its referrer policy as detailed in the following\n  // steps, which return either no referrer or a URL:\n\n  // 1. Let policy be request's referrer policy.\n  const policy = request.referrerPolicy\n\n  // Note: policy cannot (shouldn't) be null or an empty string.\n  assert(policy)\n\n  // 2. Let environment be request\u2019s client.\n\n  let referrerSource = null\n\n  // 3. Switch on request\u2019s referrer:\n\n  // \"client\"\n  if (request.referrer === 'client') {\n    // Note: node isn't a browser and doesn't implement document/iframes,\n    // so we bypass this step and replace it with our own.\n\n    const globalOrigin = getGlobalOrigin()\n\n    if (!globalOrigin || globalOrigin.origin === 'null') {\n      return 'no-referrer'\n    }\n\n    // Note: we need to clone it as it's mutated\n    referrerSource = new URL(globalOrigin)\n  // a URL\n  } else if (webidl.is.URL(request.referrer)) {\n    // Let referrerSource be request\u2019s referrer.\n    referrerSource = request.referrer\n  }\n\n  // 4. Let request\u2019s referrerURL be the result of stripping referrerSource for\n  //    use as a referrer.\n  let referrerURL = stripURLForReferrer(referrerSource)\n\n  // 5. Let referrerOrigin be the result of stripping referrerSource for use as\n  //    a referrer, with the origin-only flag set to true.\n  const referrerOrigin = stripURLForReferrer(referrerSource, true)\n\n  // 6. If the result of serializing referrerURL is a string whose length is\n  //    greater than 4096, set referrerURL to referrerOrigin.\n  if (referrerURL.toString().length > 4096) {\n    referrerURL = referrerOrigin\n  }\n\n  // 7. The user agent MAY alter referrerURL or referrerOrigin at this point\n  // to enforce arbitrary policy considerations in the interests of minimizing\n  // data leakage. For example, the user agent could strip the URL down to an\n  // origin, modify its host, replace it with an empty string, etc.\n\n  // 8. Execute the switch statements corresponding to the value of policy:\n  switch (policy) {\n    case 'no-referrer':\n      // Return no referrer\n      return 'no-referrer'\n    case 'origin':\n      // Return referrerOrigin\n      if (referrerOrigin != null) {\n        return referrerOrigin\n      }\n      return stripURLForReferrer(referrerSource, true)\n    case 'unsafe-url':\n      // Return referrerURL.\n      return referrerURL\n    case 'strict-origin': {\n      const currentURL = requestCurrentURL(request)\n\n      // 1. If referrerURL is a potentially trustworthy URL and request\u2019s\n      //    current URL is not a potentially trustworthy URL, then return no\n      //    referrer.\n      if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {\n        return 'no-referrer'\n      }\n      // 2. Return referrerOrigin\n      return referrerOrigin\n    }\n    case 'strict-origin-when-cross-origin': {\n      const currentURL = requestCurrentURL(request)\n\n      // 1. If the origin of referrerURL and the origin of request\u2019s current\n      //    URL are the same, then return referrerURL.\n      if (sameOrigin(referrerURL, currentURL)) {\n        return referrerURL\n      }\n\n      // 2. If referrerURL is a potentially trustworthy URL and request\u2019s\n      //    current URL is not a potentially trustworthy URL, then return no\n      //    referrer.\n      if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {\n        return 'no-referrer'\n      }\n\n      // 3. Return referrerOrigin.\n      return referrerOrigin\n    }\n    case 'same-origin':\n      // 1. If the origin of referrerURL and the origin of request\u2019s current\n      // URL are the same, then return referrerURL.\n      if (sameOrigin(request, referrerURL)) {\n        return referrerURL\n      }\n      // 2. Return no referrer.\n      return 'no-referrer'\n    case 'origin-when-cross-origin':\n      // 1. If the origin of referrerURL and the origin of request\u2019s current\n      // URL are the same, then return referrerURL.\n      if (sameOrigin(request, referrerURL)) {\n        return referrerURL\n      }\n      // 2. Return referrerOrigin.\n      return referrerOrigin\n    case 'no-referrer-when-downgrade': {\n      const currentURL = requestCurrentURL(request)\n\n      // 1. If referrerURL is a potentially trustworthy URL and request\u2019s\n      //    current URL is not a potentially trustworthy URL, then return no\n      //    referrer.\n      if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {\n        return 'no-referrer'\n      }\n      // 2. Return referrerURL.\n      return referrerURL\n    }\n  }\n}\n\n/**\n * Certain portions of URLs must not be included when sending a URL as the\n * value of a `Referer` header: a URLs fragment, username, and password\n * components must be stripped from the URL before it\u2019s sent out. This\n * algorithm accepts a origin-only flag, which defaults to false. If set to\n * true, the algorithm will additionally remove the URL\u2019s path and query\n * components, leaving only the scheme, host, and port.\n *\n * @see https://w3c.github.io/webappsec-referrer-policy/#strip-url\n * @param {URL} url\n * @param {boolean} [originOnly=false]\n */\nfunction stripURLForReferrer (url, originOnly = false) {\n  // 1. Assert: url is a URL.\n  assert(webidl.is.URL(url))\n\n  // Note: Create a new URL instance to avoid mutating the original URL.\n  url = new URL(url)\n\n  // 2. If url\u2019s scheme is a local scheme, then return no referrer.\n  if (urlIsLocal(url)) {\n    return 'no-referrer'\n  }\n\n  // 3. Set url\u2019s username to the empty string.\n  url.username = ''\n\n  // 4. Set url\u2019s password to the empty string.\n  url.password = ''\n\n  // 5. Set url\u2019s fragment to null.\n  url.hash = ''\n\n  // 6. If the origin-only flag is true, then:\n  if (originOnly === true) {\n    // 1. Set url\u2019s path to \u00AB the empty string \u00BB.\n    url.pathname = ''\n\n    // 2. Set url\u2019s query to null.\n    url.search = ''\n  }\n\n  // 7. Return url.\n  return url\n}\n\nconst isPotentialleTrustworthyIPv4 = RegExp.prototype.test\n  .bind(/^127\\.(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)\\.){2}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)$/)\n\nconst isPotentiallyTrustworthyIPv6 = RegExp.prototype.test\n  .bind(/^(?:(?:0{1,4}:){7}|(?:0{1,4}:){1,6}:|::)0{0,3}1$/)\n\n/**\n * Check if host matches one of the CIDR notations 127.0.0.0/8 or ::1/128.\n *\n * @param {string} origin\n * @returns {boolean}\n */\nfunction isOriginIPPotentiallyTrustworthy (origin) {\n  // IPv6\n  if (origin.includes(':')) {\n    // Remove brackets from IPv6 addresses\n    if (origin[0] === '[' && origin[origin.length - 1] === ']') {\n      origin = origin.slice(1, -1)\n    }\n    return isPotentiallyTrustworthyIPv6(origin)\n  }\n\n  // IPv4\n  return isPotentialleTrustworthyIPv4(origin)\n}\n\n/**\n * A potentially trustworthy origin is one which a user agent can generally\n * trust as delivering data securely.\n *\n * Return value `true` means `Potentially Trustworthy`.\n * Return value `false` means `Not Trustworthy`.\n *\n * @see https://w3c.github.io/webappsec-secure-contexts/#is-origin-trustworthy\n * @param {string} origin\n * @returns {boolean}\n */\nfunction isOriginPotentiallyTrustworthy (origin) {\n  // 1. If origin is an opaque origin, return \"Not Trustworthy\".\n  if (origin == null || origin === 'null') {\n    return false\n  }\n\n  // 2. Assert: origin is a tuple origin.\n  origin = new URL(origin)\n\n  // 3. If origin\u2019s scheme is either \"https\" or \"wss\",\n  //    return \"Potentially Trustworthy\".\n  if (origin.protocol === 'https:' || origin.protocol === 'wss:') {\n    return true\n  }\n\n  // 4. If origin\u2019s host matches one of the CIDR notations 127.0.0.0/8 or\n  // ::1/128 [RFC4632], return \"Potentially Trustworthy\".\n  if (isOriginIPPotentiallyTrustworthy(origin.hostname)) {\n    return true\n  }\n\n  // 5. If the user agent conforms to the name resolution rules in\n  //    [let-localhost-be-localhost] and one of the following is true:\n\n  //    origin\u2019s host is \"localhost\" or \"localhost.\"\n  if (origin.hostname === 'localhost' || origin.hostname === 'localhost.') {\n    return true\n  }\n\n  //    origin\u2019s host ends with \".localhost\" or \".localhost.\"\n  if (origin.hostname.endsWith('.localhost') || origin.hostname.endsWith('.localhost.')) {\n    return true\n  }\n\n  // 6. If origin\u2019s scheme is \"file\", return \"Potentially Trustworthy\".\n  if (origin.protocol === 'file:') {\n    return true\n  }\n\n  // 7. If origin\u2019s scheme component is one which the user agent considers to\n  // be authenticated, return \"Potentially Trustworthy\".\n\n  // 8. If origin has been configured as a trustworthy origin, return\n  //    \"Potentially Trustworthy\".\n\n  // 9. Return \"Not Trustworthy\".\n  return false\n}\n\n/**\n * A potentially trustworthy URL is one which either inherits context from its\n * creator (about:blank, about:srcdoc, data) or one whose origin is a\n * potentially trustworthy origin.\n *\n * Return value `true` means `Potentially Trustworthy`.\n * Return value `false` means `Not Trustworthy`.\n *\n * @see https://www.w3.org/TR/secure-contexts/#is-url-trustworthy\n * @param {URL} url\n * @returns {boolean}\n */\nfunction isURLPotentiallyTrustworthy (url) {\n  // Given a URL record (url), the following algorithm returns \"Potentially\n  // Trustworthy\" or \"Not Trustworthy\" as appropriate:\n  if (!webidl.is.URL(url)) {\n    return false\n  }\n\n  // 1. If url is \"about:blank\" or \"about:srcdoc\",\n  //    return \"Potentially Trustworthy\".\n  if (url.href === 'about:blank' || url.href === 'about:srcdoc') {\n    return true\n  }\n\n  // 2. If url\u2019s scheme is \"data\", return \"Potentially Trustworthy\".\n  if (url.protocol === 'data:') return true\n\n  // Note: The origin of blob: URLs is the origin of the context in which they\n  // were created. Therefore, blobs created in a trustworthy origin will\n  // themselves be potentially trustworthy.\n  if (url.protocol === 'blob:') return true\n\n  // 3. Return the result of executing \u00A7 3.1 Is origin potentially trustworthy?\n  // on url\u2019s origin.\n  return isOriginPotentiallyTrustworthy(url.origin)\n}\n\n// https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-request\nfunction tryUpgradeRequestToAPotentiallyTrustworthyURL (request) {\n  // TODO\n}\n\n/**\n * @link {https://html.spec.whatwg.org/multipage/origin.html#same-origin}\n * @param {URL} A\n * @param {URL} B\n */\nfunction sameOrigin (A, B) {\n  // 1. If A and B are the same opaque origin, then return true.\n  if (A.origin === B.origin && A.origin === 'null') {\n    return true\n  }\n\n  // 2. If A and B are both tuple origins and their schemes,\n  //    hosts, and port are identical, then return true.\n  if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) {\n    return true\n  }\n\n  // 3. Return false.\n  return false\n}\n\nfunction isAborted (fetchParams) {\n  return fetchParams.controller.state === 'aborted'\n}\n\nfunction isCancelled (fetchParams) {\n  return fetchParams.controller.state === 'aborted' ||\n    fetchParams.controller.state === 'terminated'\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-method-normalize\n * @param {string} method\n */\nfunction normalizeMethod (method) {\n  return normalizedMethodRecordsBase[method.toLowerCase()] ?? method\n}\n\n// https://tc39.es/ecma262/#sec-%25iteratorprototype%25-object\nconst esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))\n\n/**\n * @see https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object\n * @param {string} name name of the instance\n * @param {((target: any) => any)} kInternalIterator\n * @param {string | number} [keyIndex]\n * @param {string | number} [valueIndex]\n */\nfunction createIterator (name, kInternalIterator, keyIndex = 0, valueIndex = 1) {\n  class FastIterableIterator {\n    /** @type {any} */\n    #target\n    /** @type {'key' | 'value' | 'key+value'} */\n    #kind\n    /** @type {number} */\n    #index\n\n    /**\n     * @see https://webidl.spec.whatwg.org/#dfn-default-iterator-object\n     * @param {unknown} target\n     * @param {'key' | 'value' | 'key+value'} kind\n     */\n    constructor (target, kind) {\n      this.#target = target\n      this.#kind = kind\n      this.#index = 0\n    }\n\n    next () {\n      // 1. Let interface be the interface for which the iterator prototype object exists.\n      // 2. Let thisValue be the this value.\n      // 3. Let object be ? ToObject(thisValue).\n      // 4. If object is a platform object, then perform a security\n      //    check, passing:\n      // 5. If object is not a default iterator object for interface,\n      //    then throw a TypeError.\n      if (typeof this !== 'object' || this === null || !(#target in this)) {\n        throw new TypeError(\n          `'next' called on an object that does not implement interface ${name} Iterator.`\n        )\n      }\n\n      // 6. Let index be object\u2019s index.\n      // 7. Let kind be object\u2019s kind.\n      // 8. Let values be object\u2019s target's value pairs to iterate over.\n      const index = this.#index\n      const values = kInternalIterator(this.#target)\n\n      // 9. Let len be the length of values.\n      const len = values.length\n\n      // 10. If index is greater than or equal to len, then return\n      //     CreateIterResultObject(undefined, true).\n      if (index >= len) {\n        return {\n          value: undefined,\n          done: true\n        }\n      }\n\n      // 11. Let pair be the entry in values at index index.\n      const { [keyIndex]: key, [valueIndex]: value } = values[index]\n\n      // 12. Set object\u2019s index to index + 1.\n      this.#index = index + 1\n\n      // 13. Return the iterator result for pair and kind.\n\n      // https://webidl.spec.whatwg.org/#iterator-result\n\n      // 1. Let result be a value determined by the value of kind:\n      let result\n      switch (this.#kind) {\n        case 'key':\n          // 1. Let idlKey be pair\u2019s key.\n          // 2. Let key be the result of converting idlKey to an\n          //    ECMAScript value.\n          // 3. result is key.\n          result = key\n          break\n        case 'value':\n          // 1. Let idlValue be pair\u2019s value.\n          // 2. Let value be the result of converting idlValue to\n          //    an ECMAScript value.\n          // 3. result is value.\n          result = value\n          break\n        case 'key+value':\n          // 1. Let idlKey be pair\u2019s key.\n          // 2. Let idlValue be pair\u2019s value.\n          // 3. Let key be the result of converting idlKey to an\n          //    ECMAScript value.\n          // 4. Let value be the result of converting idlValue to\n          //    an ECMAScript value.\n          // 5. Let array be ! ArrayCreate(2).\n          // 6. Call ! CreateDataProperty(array, \"0\", key).\n          // 7. Call ! CreateDataProperty(array, \"1\", value).\n          // 8. result is array.\n          result = [key, value]\n          break\n      }\n\n      // 2. Return CreateIterResultObject(result, false).\n      return {\n        value: result,\n        done: false\n      }\n    }\n  }\n\n  // https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object\n  // @ts-ignore\n  delete FastIterableIterator.prototype.constructor\n\n  Object.setPrototypeOf(FastIterableIterator.prototype, esIteratorPrototype)\n\n  Object.defineProperties(FastIterableIterator.prototype, {\n    [Symbol.toStringTag]: {\n      writable: false,\n      enumerable: false,\n      configurable: true,\n      value: `${name} Iterator`\n    },\n    next: { writable: true, enumerable: true, configurable: true }\n  })\n\n  /**\n   * @param {unknown} target\n   * @param {'key' | 'value' | 'key+value'} kind\n   * @returns {IterableIterator<any>}\n   */\n  return function (target, kind) {\n    return new FastIterableIterator(target, kind)\n  }\n}\n\n/**\n * @see https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object\n * @param {string} name name of the instance\n * @param {any} object class\n * @param {(target: any) => any} kInternalIterator\n * @param {string | number} [keyIndex]\n * @param {string | number} [valueIndex]\n */\nfunction iteratorMixin (name, object, kInternalIterator, keyIndex = 0, valueIndex = 1) {\n  const makeIterator = createIterator(name, kInternalIterator, keyIndex, valueIndex)\n\n  const properties = {\n    keys: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function keys () {\n        webidl.brandCheck(this, object)\n        return makeIterator(this, 'key')\n      }\n    },\n    values: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function values () {\n        webidl.brandCheck(this, object)\n        return makeIterator(this, 'value')\n      }\n    },\n    entries: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function entries () {\n        webidl.brandCheck(this, object)\n        return makeIterator(this, 'key+value')\n      }\n    },\n    forEach: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function forEach (callbackfn, thisArg = globalThis) {\n        webidl.brandCheck(this, object)\n        webidl.argumentLengthCheck(arguments, 1, `${name}.forEach`)\n        if (typeof callbackfn !== 'function') {\n          throw new TypeError(\n            `Failed to execute 'forEach' on '${name}': parameter 1 is not of type 'Function'.`\n          )\n        }\n        for (const { 0: key, 1: value } of makeIterator(this, 'key+value')) {\n          callbackfn.call(thisArg, value, key, this)\n        }\n      }\n    }\n  }\n\n  return Object.defineProperties(object.prototype, {\n    ...properties,\n    [Symbol.iterator]: {\n      writable: true,\n      enumerable: false,\n      configurable: true,\n      value: properties.entries.value\n    }\n  })\n}\n\n/**\n * @param {import('./body').ExtractBodyResult} body\n * @param {(bytes: Uint8Array) => void} processBody\n * @param {(error: Error) => void} processBodyError\n * @returns {void}\n *\n * @see https://fetch.spec.whatwg.org/#body-fully-read\n */\nfunction fullyReadBody (body, processBody, processBodyError) {\n  // 1. If taskDestination is null, then set taskDestination to\n  //    the result of starting a new parallel queue.\n\n  // 2. Let successSteps given a byte sequence bytes be to queue a\n  //    fetch task to run processBody given bytes, with taskDestination.\n  const successSteps = processBody\n\n  // 3. Let errorSteps be to queue a fetch task to run processBodyError,\n  //    with taskDestination.\n  const errorSteps = processBodyError\n\n  try {\n  // 4. Let reader be the result of getting a reader for body\u2019s stream.\n  //    If that threw an exception, then run errorSteps with that\n  //    exception and return.\n    const reader = body.stream.getReader()\n\n    // 5. Read all bytes from reader, given successSteps and errorSteps.\n    readAllBytes(reader, successSteps, errorSteps)\n  } catch (e) {\n    errorSteps(e)\n  }\n}\n\n/**\n * @param {ReadableStreamController<Uint8Array>} controller\n */\nfunction readableStreamClose (controller) {\n  try {\n    controller.close()\n    controller.byobRequest?.respond(0)\n  } catch (err) {\n    // TODO: add comment explaining why this error occurs.\n    if (!err.message.includes('Controller is already closed') && !err.message.includes('ReadableStream is already closed')) {\n      throw err\n    }\n  }\n}\n\n/**\n * @see https://streams.spec.whatwg.org/#readablestreamdefaultreader-read-all-bytes\n * @see https://streams.spec.whatwg.org/#read-loop\n * @param {ReadableStream<Uint8Array<ArrayBuffer>>} reader\n * @param {(bytes: Uint8Array) => void} successSteps\n * @param {(error: Error) => void} failureSteps\n * @returns {Promise<void>}\n */\nasync function readAllBytes (reader, successSteps, failureSteps) {\n  try {\n    const bytes = []\n    let byteLength = 0\n\n    do {\n      const { done, value: chunk } = await reader.read()\n\n      if (done) {\n        // 1. Call successSteps with bytes.\n        successSteps(Buffer.concat(bytes, byteLength))\n        return\n      }\n\n      // 1. If chunk is not a Uint8Array object, call failureSteps\n      //    with a TypeError and abort these steps.\n      if (!isUint8Array(chunk)) {\n        failureSteps(new TypeError('Received non-Uint8Array chunk'))\n        return\n      }\n\n      // 2. Append the bytes represented by chunk to bytes.\n      bytes.push(chunk)\n      byteLength += chunk.length\n\n    // 3. Read-loop given reader, bytes, successSteps, and failureSteps.\n    } while (true)\n  } catch (e) {\n    // 1. Call failureSteps with e.\n    failureSteps(e)\n  }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#is-local\n * @param {URL} url\n * @returns {boolean}\n */\nfunction urlIsLocal (url) {\n  assert('protocol' in url) // ensure it's a url object\n\n  const protocol = url.protocol\n\n  // A URL is local if its scheme is a local scheme.\n  // A local scheme is \"about\", \"blob\", or \"data\".\n  return protocol === 'about:' || protocol === 'blob:' || protocol === 'data:'\n}\n\n/**\n * @param {string|URL} url\n * @returns {boolean}\n */\nfunction urlHasHttpsScheme (url) {\n  return (\n    (\n      typeof url === 'string' &&\n      url[5] === ':' &&\n      url[0] === 'h' &&\n      url[1] === 't' &&\n      url[2] === 't' &&\n      url[3] === 'p' &&\n      url[4] === 's'\n    ) ||\n    url.protocol === 'https:'\n  )\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#http-scheme\n * @param {URL} url\n */\nfunction urlIsHttpHttpsScheme (url) {\n  assert('protocol' in url) // ensure it's a url object\n\n  const protocol = url.protocol\n\n  return protocol === 'http:' || protocol === 'https:'\n}\n\n/**\n * @typedef {Object} RangeHeaderValue\n * @property {number|null} rangeStartValue\n * @property {number|null} rangeEndValue\n */\n\n/**\n * @see https://fetch.spec.whatwg.org/#simple-range-header-value\n * @param {string} value\n * @param {boolean} allowWhitespace\n * @return {RangeHeaderValue|'failure'}\n */\nfunction simpleRangeHeaderValue (value, allowWhitespace) {\n  // 1. Let data be the isomorphic decoding of value.\n  // Note: isomorphic decoding takes a sequence of bytes (ie. a Uint8Array) and turns it into a string,\n  // nothing more. We obviously don't need to do that if value is a string already.\n  const data = value\n\n  // 2. If data does not start with \"bytes\", then return failure.\n  if (!data.startsWith('bytes')) {\n    return 'failure'\n  }\n\n  // 3. Let position be a position variable for data, initially pointing at the 5th code point of data.\n  const position = { position: 5 }\n\n  // 4. If allowWhitespace is true, collect a sequence of code points that are HTTP tab or space,\n  //    from data given position.\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 5. If the code point at position within data is not U+003D (=), then return failure.\n  if (data.charCodeAt(position.position) !== 0x3D) {\n    return 'failure'\n  }\n\n  // 6. Advance position by 1.\n  position.position++\n\n  // 7. If allowWhitespace is true, collect a sequence of code points that are HTTP tab or space, from\n  //    data given position.\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 8. Let rangeStart be the result of collecting a sequence of code points that are ASCII digits,\n  //    from data given position.\n  const rangeStart = collectASequenceOfCodePoints(\n    (char) => {\n      const code = char.charCodeAt(0)\n\n      return code >= 0x30 && code <= 0x39\n    },\n    data,\n    position\n  )\n\n  // 9. Let rangeStartValue be rangeStart, interpreted as decimal number, if rangeStart is not the\n  //    empty string; otherwise null.\n  const rangeStartValue = rangeStart.length ? Number(rangeStart) : null\n\n  // 10. If allowWhitespace is true, collect a sequence of code points that are HTTP tab or space,\n  //     from data given position.\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 11. If the code point at position within data is not U+002D (-), then return failure.\n  if (data.charCodeAt(position.position) !== 0x2D) {\n    return 'failure'\n  }\n\n  // 12. Advance position by 1.\n  position.position++\n\n  // 13. If allowWhitespace is true, collect a sequence of code points that are HTTP tab\n  //     or space, from data given position.\n  // Note from Khafra: its the same step as in #8 again lol\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 14. Let rangeEnd be the result of collecting a sequence of code points that are\n  //     ASCII digits, from data given position.\n  // Note from Khafra: you wouldn't guess it, but this is also the same step as #8\n  const rangeEnd = collectASequenceOfCodePoints(\n    (char) => {\n      const code = char.charCodeAt(0)\n\n      return code >= 0x30 && code <= 0x39\n    },\n    data,\n    position\n  )\n\n  // 15. Let rangeEndValue be rangeEnd, interpreted as decimal number, if rangeEnd\n  //     is not the empty string; otherwise null.\n  // Note from Khafra: THE SAME STEP, AGAIN!!!\n  // Note: why interpret as a decimal if we only collect ascii digits?\n  const rangeEndValue = rangeEnd.length ? Number(rangeEnd) : null\n\n  // 16. If position is not past the end of data, then return failure.\n  if (position.position < data.length) {\n    return 'failure'\n  }\n\n  // 17. If rangeEndValue and rangeStartValue are null, then return failure.\n  if (rangeEndValue === null && rangeStartValue === null) {\n    return 'failure'\n  }\n\n  // 18. If rangeStartValue and rangeEndValue are numbers, and rangeStartValue is\n  //     greater than rangeEndValue, then return failure.\n  // Note: ... when can they not be numbers?\n  if (rangeStartValue > rangeEndValue) {\n    return 'failure'\n  }\n\n  // 19. Return (rangeStartValue, rangeEndValue).\n  return { rangeStartValue, rangeEndValue }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#build-a-content-range\n * @param {number} rangeStart\n * @param {number} rangeEnd\n * @param {number} fullLength\n */\nfunction buildContentRange (rangeStart, rangeEnd, fullLength) {\n  // 1. Let contentRange be `bytes `.\n  let contentRange = 'bytes '\n\n  // 2. Append rangeStart, serialized and isomorphic encoded, to contentRange.\n  contentRange += isomorphicEncode(`${rangeStart}`)\n\n  // 3. Append 0x2D (-) to contentRange.\n  contentRange += '-'\n\n  // 4. Append rangeEnd, serialized and isomorphic encoded to contentRange.\n  contentRange += isomorphicEncode(`${rangeEnd}`)\n\n  // 5. Append 0x2F (/) to contentRange.\n  contentRange += '/'\n\n  // 6. Append fullLength, serialized and isomorphic encoded to contentRange.\n  contentRange += isomorphicEncode(`${fullLength}`)\n\n  // 7. Return contentRange.\n  return contentRange\n}\n\n// A Stream, which pipes the response to zlib.createInflate() or\n// zlib.createInflateRaw() depending on the first byte of the Buffer.\n// If the lower byte of the first byte is 0x08, then the stream is\n// interpreted as a zlib stream, otherwise it's interpreted as a\n// raw deflate stream.\nclass InflateStream extends Transform {\n  #zlibOptions\n\n  /** @param {zlib.ZlibOptions} [zlibOptions] */\n  constructor (zlibOptions) {\n    super()\n    this.#zlibOptions = zlibOptions\n  }\n\n  _transform (chunk, encoding, callback) {\n    if (!this._inflateStream) {\n      if (chunk.length === 0) {\n        callback()\n        return\n      }\n      this._inflateStream = (chunk[0] & 0x0F) === 0x08\n        ? zlib.createInflate(this.#zlibOptions)\n        : zlib.createInflateRaw(this.#zlibOptions)\n\n      this._inflateStream.on('data', this.push.bind(this))\n      this._inflateStream.on('end', () => this.push(null))\n      this._inflateStream.on('error', (err) => this.destroy(err))\n    }\n\n    this._inflateStream.write(chunk, encoding, callback)\n  }\n\n  _final (callback) {\n    if (this._inflateStream) {\n      this._inflateStream.end()\n      this._inflateStream = null\n    }\n    callback()\n  }\n}\n\n/**\n * @param {zlib.ZlibOptions} [zlibOptions]\n * @returns {InflateStream}\n */\nfunction createInflate (zlibOptions) {\n  return new InflateStream(zlibOptions)\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-header-extract-mime-type\n * @param {import('./headers').HeadersList} headers\n */\nfunction extractMimeType (headers) {\n  // 1. Let charset be null.\n  let charset = null\n\n  // 2. Let essence be null.\n  let essence = null\n\n  // 3. Let mimeType be null.\n  let mimeType = null\n\n  // 4. Let values be the result of getting, decoding, and splitting `Content-Type` from headers.\n  const values = getDecodeSplit('content-type', headers)\n\n  // 5. If values is null, then return failure.\n  if (values === null) {\n    return 'failure'\n  }\n\n  // 6. For each value of values:\n  for (const value of values) {\n    // 6.1. Let temporaryMimeType be the result of parsing value.\n    const temporaryMimeType = parseMIMEType(value)\n\n    // 6.2. If temporaryMimeType is failure or its essence is \"*/*\", then continue.\n    if (temporaryMimeType === 'failure' || temporaryMimeType.essence === '*/*') {\n      continue\n    }\n\n    // 6.3. Set mimeType to temporaryMimeType.\n    mimeType = temporaryMimeType\n\n    // 6.4. If mimeType\u2019s essence is not essence, then:\n    if (mimeType.essence !== essence) {\n      // 6.4.1. Set charset to null.\n      charset = null\n\n      // 6.4.2. If mimeType\u2019s parameters[\"charset\"] exists, then set charset to\n      //        mimeType\u2019s parameters[\"charset\"].\n      if (mimeType.parameters.has('charset')) {\n        charset = mimeType.parameters.get('charset')\n      }\n\n      // 6.4.3. Set essence to mimeType\u2019s essence.\n      essence = mimeType.essence\n    } else if (!mimeType.parameters.has('charset') && charset !== null) {\n      // 6.5. Otherwise, if mimeType\u2019s parameters[\"charset\"] does not exist, and\n      //      charset is non-null, set mimeType\u2019s parameters[\"charset\"] to charset.\n      mimeType.parameters.set('charset', charset)\n    }\n  }\n\n  // 7. If mimeType is null, then return failure.\n  if (mimeType == null) {\n    return 'failure'\n  }\n\n  // 8. Return mimeType.\n  return mimeType\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#header-value-get-decode-and-split\n * @param {string|null} value\n */\nfunction gettingDecodingSplitting (value) {\n  // 1. Let input be the result of isomorphic decoding value.\n  const input = value\n\n  // 2. Let position be a position variable for input, initially pointing at the start of input.\n  const position = { position: 0 }\n\n  // 3. Let values be a list of strings, initially empty.\n  const values = []\n\n  // 4. Let temporaryValue be the empty string.\n  let temporaryValue = ''\n\n  // 5. While position is not past the end of input:\n  while (position.position < input.length) {\n    // 5.1. Append the result of collecting a sequence of code points that are not U+0022 (\")\n    //      or U+002C (,) from input, given position, to temporaryValue.\n    temporaryValue += collectASequenceOfCodePoints(\n      (char) => char !== '\"' && char !== ',',\n      input,\n      position\n    )\n\n    // 5.2. If position is not past the end of input, then:\n    if (position.position < input.length) {\n      // 5.2.1. If the code point at position within input is U+0022 (\"), then:\n      if (input.charCodeAt(position.position) === 0x22) {\n        // 5.2.1.1. Append the result of collecting an HTTP quoted string from input, given position, to temporaryValue.\n        temporaryValue += collectAnHTTPQuotedString(\n          input,\n          position\n        )\n\n        // 5.2.1.2. If position is not past the end of input, then continue.\n        if (position.position < input.length) {\n          continue\n        }\n      } else {\n        // 5.2.2. Otherwise:\n\n        // 5.2.2.1. Assert: the code point at position within input is U+002C (,).\n        assert(input.charCodeAt(position.position) === 0x2C)\n\n        // 5.2.2.2. Advance position by 1.\n        position.position++\n      }\n    }\n\n    // 5.3. Remove all HTTP tab or space from the start and end of temporaryValue.\n    temporaryValue = removeChars(temporaryValue, true, true, (char) => char === 0x9 || char === 0x20)\n\n    // 5.4. Append temporaryValue to values.\n    values.push(temporaryValue)\n\n    // 5.6. Set temporaryValue to the empty string.\n    temporaryValue = ''\n  }\n\n  // 6. Return values.\n  return values\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-header-list-get-decode-split\n * @param {string} name lowercase header name\n * @param {import('./headers').HeadersList} list\n */\nfunction getDecodeSplit (name, list) {\n  // 1. Let value be the result of getting name from list.\n  const value = list.get(name, true)\n\n  // 2. If value is null, then return null.\n  if (value === null) {\n    return null\n  }\n\n  // 3. Return the result of getting, decoding, and splitting value.\n  return gettingDecodingSplitting(value)\n}\n\nfunction hasAuthenticationEntry (request) {\n  return false\n}\n\n/**\n * @see https://url.spec.whatwg.org/#include-credentials\n * @param {URL} url\n */\nfunction includesCredentials (url) {\n  // A URL includes credentials if its username or password is not the empty string.\n  return !!(url.username || url.password)\n}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/document-sequences.html#traversable-navigable\n * @param {object|string} navigable\n */\nfunction isTraversableNavigable (navigable) {\n  // Returns true only if we have an actual traversable navigable object\n  // that can prompt the user for credentials. In Node.js, this will always\n  // be false since there's no Window object or navigable.\n  return navigable != null && navigable !== 'client' && navigable !== 'no-traversable'\n}\n\nclass EnvironmentSettingsObjectBase {\n  get baseUrl () {\n    return getGlobalOrigin()\n  }\n\n  get origin () {\n    return this.baseUrl?.origin\n  }\n\n  policyContainer = makePolicyContainer()\n}\n\nclass EnvironmentSettingsObject {\n  settingsObject = new EnvironmentSettingsObjectBase()\n}\n\nconst environmentSettingsObject = new EnvironmentSettingsObject()\n\nmodule.exports = {\n  isAborted,\n  isCancelled,\n  isValidEncodedURL,\n  ReadableStreamFrom,\n  tryUpgradeRequestToAPotentiallyTrustworthyURL,\n  clampAndCoarsenConnectionTimingInfo,\n  coarsenedSharedCurrentTime,\n  determineRequestsReferrer,\n  makePolicyContainer,\n  clonePolicyContainer,\n  appendFetchMetadata,\n  appendRequestOriginHeader,\n  TAOCheck,\n  corsCheck,\n  crossOriginResourcePolicyCheck,\n  createOpaqueTimingInfo,\n  setRequestReferrerPolicyOnRedirect,\n  isValidHTTPToken,\n  requestBadPort,\n  requestCurrentURL,\n  responseURL,\n  responseLocationURL,\n  isURLPotentiallyTrustworthy,\n  isValidReasonPhrase,\n  sameOrigin,\n  normalizeMethod,\n  iteratorMixin,\n  createIterator,\n  isValidHeaderName,\n  isValidHeaderValue,\n  isErrorLike,\n  fullyReadBody,\n  readableStreamClose,\n  urlIsLocal,\n  urlHasHttpsScheme,\n  urlIsHttpHttpsScheme,\n  readAllBytes,\n  simpleRangeHeaderValue,\n  buildContentRange,\n  createInflate,\n  extractMimeType,\n  getDecodeSplit,\n  environmentSettingsObject,\n  isOriginIPPotentiallyTrustworthy,\n  hasAuthenticationEntry,\n  includesCredentials,\n  isTraversableNavigable\n}\n", "'use strict'\n\nconst { iteratorMixin } = require('./util')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { webidl } = require('../webidl')\nconst nodeUtil = require('node:util')\n\n// https://xhr.spec.whatwg.org/#formdata\nclass FormData {\n  #state = []\n\n  constructor (form = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (form !== undefined) {\n      throw webidl.errors.conversionFailed({\n        prefix: 'FormData constructor',\n        argument: 'Argument 1',\n        types: ['undefined']\n      })\n    }\n  }\n\n  append (name, value, filename = undefined) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.append'\n    webidl.argumentLengthCheck(arguments, 2, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    if (arguments.length === 3 || webidl.is.Blob(value)) {\n      value = webidl.converters.Blob(value, prefix, 'value')\n\n      if (filename !== undefined) {\n        filename = webidl.converters.USVString(filename)\n      }\n    } else {\n      value = webidl.converters.USVString(value)\n    }\n\n    // 1. Let value be value if given; otherwise blobValue.\n\n    // 2. Let entry be the result of creating an entry with\n    // name, value, and filename if given.\n    const entry = makeEntry(name, value, filename)\n\n    // 3. Append entry to this\u2019s entry list.\n    this.#state.push(entry)\n  }\n\n  delete (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.delete'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // The delete(name) method steps are to remove all entries whose name\n    // is name from this\u2019s entry list.\n    this.#state = this.#state.filter(entry => entry.name !== name)\n  }\n\n  get (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.get'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // 1. If there is no entry whose name is name in this\u2019s entry list,\n    // then return null.\n    const idx = this.#state.findIndex((entry) => entry.name === name)\n    if (idx === -1) {\n      return null\n    }\n\n    // 2. Return the value of the first entry whose name is name from\n    // this\u2019s entry list.\n    return this.#state[idx].value\n  }\n\n  getAll (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.getAll'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // 1. If there is no entry whose name is name in this\u2019s entry list,\n    // then return the empty list.\n    // 2. Return the values of all entries whose name is name, in order,\n    // from this\u2019s entry list.\n    return this.#state\n      .filter((entry) => entry.name === name)\n      .map((entry) => entry.value)\n  }\n\n  has (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.has'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // The has(name) method steps are to return true if there is an entry\n    // whose name is name in this\u2019s entry list; otherwise false.\n    return this.#state.findIndex((entry) => entry.name === name) !== -1\n  }\n\n  set (name, value, filename = undefined) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.set'\n    webidl.argumentLengthCheck(arguments, 2, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    if (arguments.length === 3 || webidl.is.Blob(value)) {\n      value = webidl.converters.Blob(value, prefix, 'value')\n\n      if (filename !== undefined) {\n        filename = webidl.converters.USVString(filename)\n      }\n    } else {\n      value = webidl.converters.USVString(value)\n    }\n\n    // The set(name, value) and set(name, blobValue, filename) method steps\n    // are:\n\n    // 1. Let value be value if given; otherwise blobValue.\n\n    // 2. Let entry be the result of creating an entry with name, value, and\n    // filename if given.\n    const entry = makeEntry(name, value, filename)\n\n    // 3. If there are entries in this\u2019s entry list whose name is name, then\n    // replace the first such entry with entry and remove the others.\n    const idx = this.#state.findIndex((entry) => entry.name === name)\n    if (idx !== -1) {\n      this.#state = [\n        ...this.#state.slice(0, idx),\n        entry,\n        ...this.#state.slice(idx + 1).filter((entry) => entry.name !== name)\n      ]\n    } else {\n      // 4. Otherwise, append entry to this\u2019s entry list.\n      this.#state.push(entry)\n    }\n  }\n\n  [nodeUtil.inspect.custom] (depth, options) {\n    const state = this.#state.reduce((a, b) => {\n      if (a[b.name]) {\n        if (Array.isArray(a[b.name])) {\n          a[b.name].push(b.value)\n        } else {\n          a[b.name] = [a[b.name], b.value]\n        }\n      } else {\n        a[b.name] = b.value\n      }\n\n      return a\n    }, { __proto__: null })\n\n    options.depth ??= depth\n    options.colors ??= true\n\n    const output = nodeUtil.formatWithOptions(options, state)\n\n    // remove [Object null prototype]\n    return `FormData ${output.slice(output.indexOf(']') + 2)}`\n  }\n\n  /**\n   * @param {FormData} formData\n   */\n  static getFormDataState (formData) {\n    return formData.#state\n  }\n\n  /**\n   * @param {FormData} formData\n   * @param {any[]} newState\n   */\n  static setFormDataState (formData, newState) {\n    formData.#state = newState\n  }\n}\n\nconst { getFormDataState, setFormDataState } = FormData\nReflect.deleteProperty(FormData, 'getFormDataState')\nReflect.deleteProperty(FormData, 'setFormDataState')\n\niteratorMixin('FormData', FormData, getFormDataState, 'name', 'value')\n\nObject.defineProperties(FormData.prototype, {\n  append: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  get: kEnumerableProperty,\n  getAll: kEnumerableProperty,\n  has: kEnumerableProperty,\n  set: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'FormData',\n    configurable: true\n  }\n})\n\n/**\n * @see https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#create-an-entry\n * @param {string} name\n * @param {string|Blob} value\n * @param {?string} filename\n * @returns\n */\nfunction makeEntry (name, value, filename) {\n  // 1. Set name to the result of converting name into a scalar value string.\n  // Note: This operation was done by the webidl converter USVString.\n\n  // 2. If value is a string, then set value to the result of converting\n  //    value into a scalar value string.\n  if (typeof value === 'string') {\n    // Note: This operation was done by the webidl converter USVString.\n  } else {\n    // 3. Otherwise:\n\n    // 1. If value is not a File object, then set value to a new File object,\n    //    representing the same bytes, whose name attribute value is \"blob\"\n    if (!webidl.is.File(value)) {\n      value = new File([value], 'blob', { type: value.type })\n    }\n\n    // 2. If filename is given, then set value to a new File object,\n    //    representing the same bytes, whose name attribute is filename.\n    if (filename !== undefined) {\n      /** @type {FilePropertyBag} */\n      const options = {\n        type: value.type,\n        lastModified: value.lastModified\n      }\n\n      value = new File([value], filename, options)\n    }\n  }\n\n  // 4. Return an entry whose name is name and whose value is value.\n  return { name, value }\n}\n\nwebidl.is.FormData = webidl.util.MakeTypeAssertion(FormData)\n\nmodule.exports = { FormData, makeEntry, setFormDataState }\n", "'use strict'\n\nconst { bufferToLowerCasedHeaderName } = require('../../core/util')\nconst { HTTP_TOKEN_CODEPOINTS } = require('./data-url')\nconst { makeEntry } = require('./formdata')\nconst { webidl } = require('../webidl')\nconst assert = require('node:assert')\nconst { isomorphicDecode } = require('../infra')\n\nconst dd = Buffer.from('--')\nconst decoder = new TextDecoder()\nconst decoderIgnoreBOM = new TextDecoder('utf-8', { ignoreBOM: true })\n\n/**\n * @param {string} chars\n */\nfunction isAsciiString (chars) {\n  for (let i = 0; i < chars.length; ++i) {\n    if ((chars.charCodeAt(i) & ~0x7F) !== 0) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#multipart-form-data-boundary\n * @param {string} boundary\n */\nfunction validateBoundary (boundary) {\n  const length = boundary.length\n\n  // - its length is greater or equal to 27 and lesser or equal to 70, and\n  if (length < 27 || length > 70) {\n    return false\n  }\n\n  // - it is composed by bytes in the ranges 0x30 to 0x39, 0x41 to 0x5A, or\n  //   0x61 to 0x7A, inclusive (ASCII alphanumeric), or which are 0x27 ('),\n  //   0x2D (-) or 0x5F (_).\n  for (let i = 0; i < length; ++i) {\n    const cp = boundary.charCodeAt(i)\n\n    if (!(\n      (cp >= 0x30 && cp <= 0x39) ||\n      (cp >= 0x41 && cp <= 0x5a) ||\n      (cp >= 0x61 && cp <= 0x7a) ||\n      cp === 0x27 ||\n      cp === 0x2d ||\n      cp === 0x5f\n    )) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#multipart-form-data-parser\n * @param {Buffer} input\n * @param {ReturnType<import('./data-url')['parseMIMEType']>} mimeType\n */\nfunction multipartFormDataParser (input, mimeType) {\n  // 1. Assert: mimeType\u2019s essence is \"multipart/form-data\".\n  assert(mimeType !== 'failure' && mimeType.essence === 'multipart/form-data')\n\n  const boundaryString = mimeType.parameters.get('boundary')\n\n  // 2. If mimeType\u2019s parameters[\"boundary\"] does not exist, return failure.\n  //    Otherwise, let boundary be the result of UTF-8 decoding mimeType\u2019s\n  //    parameters[\"boundary\"].\n  if (boundaryString === undefined) {\n    throw parsingError('missing boundary in content-type header')\n  }\n\n  const boundary = Buffer.from(`--${boundaryString}`, 'utf8')\n\n  // 3. Let entry list be an empty entry list.\n  const entryList = []\n\n  // 4. Let position be a pointer to a byte in input, initially pointing at\n  //    the first byte.\n  const position = { position: 0 }\n\n  // Note: Per RFC 2046 Section 5.1.1, we must ignore anything before the\n  // first boundary delimiter line (preamble). Search for the first boundary.\n  const firstBoundaryIndex = input.indexOf(boundary)\n\n  if (firstBoundaryIndex === -1) {\n    throw parsingError('no boundary found in multipart body')\n  }\n\n  // Start parsing from the first boundary, ignoring any preamble\n  position.position = firstBoundaryIndex\n\n  // 5. While true:\n  while (true) {\n    // 5.1. If position points to a sequence of bytes starting with 0x2D 0x2D\n    //      (`--`) followed by boundary, advance position by 2 + the length of\n    //      boundary. Otherwise, return failure.\n    // Note: boundary is padded with 2 dashes already, no need to add 2.\n    if (input.subarray(position.position, position.position + boundary.length).equals(boundary)) {\n      position.position += boundary.length\n    } else {\n      throw parsingError('expected a value starting with -- and the boundary')\n    }\n\n    // 5.2. If position points to the sequence of bytes 0x2D 0x2D 0x0D 0x0A\n    //      (`--` followed by CR LF) followed by the end of input, return entry list.\n    // Note: Per RFC 2046 Section 5.1.1, we must ignore anything after the\n    // final boundary delimiter (epilogue). Check for -- or --CRLF and return\n    // regardless of what follows.\n    if (bufferStartsWith(input, dd, position)) {\n      // Found closing boundary delimiter (--), ignore any epilogue\n      return entryList\n    }\n\n    // 5.3. If position does not point to a sequence of bytes starting with 0x0D\n    //      0x0A (CR LF), return failure.\n    if (input[position.position] !== 0x0d || input[position.position + 1] !== 0x0a) {\n      throw parsingError('expected CRLF')\n    }\n\n    // 5.4. Advance position by 2. (This skips past the newline.)\n    position.position += 2\n\n    // 5.5. Let name, filename and contentType be the result of parsing\n    //      multipart/form-data headers on input and position, if the result\n    //      is not failure. Otherwise, return failure.\n    const result = parseMultipartFormDataHeaders(input, position)\n\n    let { name, filename, contentType, encoding } = result\n\n    // 5.6. Advance position by 2. (This skips past the empty line that marks\n    //      the end of the headers.)\n    position.position += 2\n\n    // 5.7. Let body be the empty byte sequence.\n    let body\n\n    // 5.8. Body loop: While position is not past the end of input:\n    // TODO: the steps here are completely wrong\n    {\n      const boundaryIndex = input.indexOf(boundary.subarray(2), position.position)\n\n      if (boundaryIndex === -1) {\n        throw parsingError('expected boundary after body')\n      }\n\n      body = input.subarray(position.position, boundaryIndex - 4)\n\n      position.position += body.length\n\n      // Note: position must be advanced by the body's length before being\n      // decoded, otherwise the parsing will fail.\n      if (encoding === 'base64') {\n        body = Buffer.from(body.toString(), 'base64')\n      }\n    }\n\n    // 5.9. If position does not point to a sequence of bytes starting with\n    //      0x0D 0x0A (CR LF), return failure. Otherwise, advance position by 2.\n    if (input[position.position] !== 0x0d || input[position.position + 1] !== 0x0a) {\n      throw parsingError('expected CRLF')\n    } else {\n      position.position += 2\n    }\n\n    // 5.10. If filename is not null:\n    let value\n\n    if (filename !== null) {\n      // 5.10.1. If contentType is null, set contentType to \"text/plain\".\n      contentType ??= 'text/plain'\n\n      // 5.10.2. If contentType is not an ASCII string, set contentType to the empty string.\n\n      // Note: `buffer.isAscii` can be used at zero-cost, but converting a string to a buffer is a high overhead.\n      // Content-Type is a relatively small string, so it is faster to use `String#charCodeAt`.\n      if (!isAsciiString(contentType)) {\n        contentType = ''\n      }\n\n      // 5.10.3. Let value be a new File object with name filename, type contentType, and body body.\n      value = new File([body], filename, { type: contentType })\n    } else {\n      // 5.11. Otherwise:\n\n      // 5.11.1. Let value be the UTF-8 decoding without BOM of body.\n      value = decoderIgnoreBOM.decode(Buffer.from(body))\n    }\n\n    // 5.12. Assert: name is a scalar value string and value is either a scalar value string or a File object.\n    assert(webidl.is.USVString(name))\n    assert((typeof value === 'string' && webidl.is.USVString(value)) || webidl.is.File(value))\n\n    // 5.13. Create an entry with name and value, and append it to entry list.\n    entryList.push(makeEntry(name, value, filename))\n  }\n}\n\n/**\n * Parses content-disposition attributes (e.g., name=\"value\" or filename*=utf-8''encoded)\n * @param {Buffer} input\n * @param {{ position: number }} position\n * @returns {{ name: string, value: string }}\n */\nfunction parseContentDispositionAttribute (input, position) {\n  // Skip leading semicolon and whitespace\n  if (input[position.position] === 0x3b /* ; */) {\n    position.position++\n  }\n\n  // Skip whitespace\n  collectASequenceOfBytes(\n    (char) => char === 0x20 || char === 0x09,\n    input,\n    position\n  )\n\n  // Collect attribute name (token characters)\n  const attributeName = collectASequenceOfBytes(\n    (char) => isToken(char) && char !== 0x3d && char !== 0x2a, // not = or *\n    input,\n    position\n  )\n\n  if (attributeName.length === 0) {\n    return null\n  }\n\n  const attrNameStr = attributeName.toString('ascii').toLowerCase()\n\n  // Check for extended notation (attribute*)\n  const isExtended = input[position.position] === 0x2a /* * */\n  if (isExtended) {\n    position.position++ // skip *\n  }\n\n  // Expect = sign\n  if (input[position.position] !== 0x3d /* = */) {\n    return null\n  }\n  position.position++ // skip =\n\n  // Skip whitespace\n  collectASequenceOfBytes(\n    (char) => char === 0x20 || char === 0x09,\n    input,\n    position\n  )\n\n  let value\n\n  if (isExtended) {\n    // Extended attribute format: charset'language'encoded-value\n    const headerValue = collectASequenceOfBytes(\n      (char) => char !== 0x20 && char !== 0x0d && char !== 0x0a && char !== 0x3b, // not space, CRLF, or ;\n      input,\n      position\n    )\n\n    // Check for utf-8'' prefix (case insensitive)\n    if (\n      (headerValue[0] !== 0x75 && headerValue[0] !== 0x55) || // u or U\n      (headerValue[1] !== 0x74 && headerValue[1] !== 0x54) || // t or T\n      (headerValue[2] !== 0x66 && headerValue[2] !== 0x46) || // f or F\n      headerValue[3] !== 0x2d || // -\n      headerValue[4] !== 0x38 // 8\n    ) {\n      throw parsingError('unknown encoding, expected utf-8\\'\\'')\n    }\n\n    // Skip utf-8'' and decode the rest\n    value = decodeURIComponent(decoder.decode(headerValue.subarray(7)))\n  } else if (input[position.position] === 0x22 /* \" */) {\n    // Quoted string\n    position.position++ // skip opening quote\n\n    const quotedValue = collectASequenceOfBytes(\n      (char) => char !== 0x0a && char !== 0x0d && char !== 0x22, // not LF, CR, or \"\n      input,\n      position\n    )\n\n    if (input[position.position] !== 0x22) {\n      throw parsingError('Closing quote not found')\n    }\n    position.position++ // skip closing quote\n\n    value = decoder.decode(quotedValue)\n      .replace(/%0A/ig, '\\n')\n      .replace(/%0D/ig, '\\r')\n      .replace(/%22/g, '\"')\n  } else {\n    // Token value (no quotes)\n    const tokenValue = collectASequenceOfBytes(\n      (char) => isToken(char) && char !== 0x3b, // not ;\n      input,\n      position\n    )\n\n    value = decoder.decode(tokenValue)\n  }\n\n  return { name: attrNameStr, value }\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#parse-multipart-form-data-headers\n * @param {Buffer} input\n * @param {{ position: number }} position\n */\nfunction parseMultipartFormDataHeaders (input, position) {\n  // 1. Let name, filename and contentType be null.\n  let name = null\n  let filename = null\n  let contentType = null\n  let encoding = null\n\n  // 2. While true:\n  while (true) {\n    // 2.1. If position points to a sequence of bytes starting with 0x0D 0x0A (CR LF):\n    if (input[position.position] === 0x0d && input[position.position + 1] === 0x0a) {\n      // 2.1.1. If name is null, return failure.\n      if (name === null) {\n        throw parsingError('header name is null')\n      }\n\n      // 2.1.2. Return name, filename and contentType.\n      return { name, filename, contentType, encoding }\n    }\n\n    // 2.2. Let header name be the result of collecting a sequence of bytes that are\n    //      not 0x0A (LF), 0x0D (CR) or 0x3A (:), given position.\n    let headerName = collectASequenceOfBytes(\n      (char) => char !== 0x0a && char !== 0x0d && char !== 0x3a,\n      input,\n      position\n    )\n\n    // 2.3. Remove any HTTP tab or space bytes from the start or end of header name.\n    headerName = removeChars(headerName, true, true, (char) => char === 0x9 || char === 0x20)\n\n    // 2.4. If header name does not match the field-name token production, return failure.\n    if (!HTTP_TOKEN_CODEPOINTS.test(headerName.toString())) {\n      throw parsingError('header name does not match the field-name token production')\n    }\n\n    // 2.5. If the byte at position is not 0x3A (:), return failure.\n    if (input[position.position] !== 0x3a) {\n      throw parsingError('expected :')\n    }\n\n    // 2.6. Advance position by 1.\n    position.position++\n\n    // 2.7. Collect a sequence of bytes that are HTTP tab or space bytes given position.\n    //      (Do nothing with those bytes.)\n    collectASequenceOfBytes(\n      (char) => char === 0x20 || char === 0x09,\n      input,\n      position\n    )\n\n    // 2.8. Byte-lowercase header name and switch on the result:\n    switch (bufferToLowerCasedHeaderName(headerName)) {\n      case 'content-disposition': {\n        name = filename = null\n\n        // Collect the disposition type (should be \"form-data\")\n        const dispositionType = collectASequenceOfBytes(\n          (char) => isToken(char),\n          input,\n          position\n        )\n\n        if (dispositionType.toString('ascii').toLowerCase() !== 'form-data') {\n          throw parsingError('expected form-data for content-disposition header')\n        }\n\n        // Parse attributes recursively until CRLF\n        while (\n          position.position < input.length &&\n          input[position.position] !== 0x0d &&\n          input[position.position + 1] !== 0x0a\n        ) {\n          const attribute = parseContentDispositionAttribute(input, position)\n\n          if (!attribute) {\n            break\n          }\n\n          if (attribute.name === 'name') {\n            name = attribute.value\n          } else if (attribute.name === 'filename') {\n            filename = attribute.value\n          }\n        }\n\n        if (name === null) {\n          throw parsingError('name attribute is required in content-disposition header')\n        }\n\n        break\n      }\n      case 'content-type': {\n        // 1. Let header value be the result of collecting a sequence of bytes that are\n        //    not 0x0A (LF) or 0x0D (CR), given position.\n        let headerValue = collectASequenceOfBytes(\n          (char) => char !== 0x0a && char !== 0x0d,\n          input,\n          position\n        )\n\n        // 2. Remove any HTTP tab or space bytes from the end of header value.\n        headerValue = removeChars(headerValue, false, true, (char) => char === 0x9 || char === 0x20)\n\n        // 3. Set contentType to the isomorphic decoding of header value.\n        contentType = isomorphicDecode(headerValue)\n\n        break\n      }\n      case 'content-transfer-encoding': {\n        let headerValue = collectASequenceOfBytes(\n          (char) => char !== 0x0a && char !== 0x0d,\n          input,\n          position\n        )\n\n        headerValue = removeChars(headerValue, false, true, (char) => char === 0x9 || char === 0x20)\n\n        encoding = isomorphicDecode(headerValue)\n\n        break\n      }\n      default: {\n        // Collect a sequence of bytes that are not 0x0A (LF) or 0x0D (CR), given position.\n        // (Do nothing with those bytes.)\n        collectASequenceOfBytes(\n          (char) => char !== 0x0a && char !== 0x0d,\n          input,\n          position\n        )\n      }\n    }\n\n    // 2.9. If position does not point to a sequence of bytes starting with 0x0D 0x0A\n    //      (CR LF), return failure. Otherwise, advance position by 2 (past the newline).\n    if (input[position.position] !== 0x0d && input[position.position + 1] !== 0x0a) {\n      throw parsingError('expected CRLF')\n    } else {\n      position.position += 2\n    }\n  }\n}\n\n/**\n * @param {(char: number) => boolean} condition\n * @param {Buffer} input\n * @param {{ position: number }} position\n */\nfunction collectASequenceOfBytes (condition, input, position) {\n  let start = position.position\n\n  while (start < input.length && condition(input[start])) {\n    ++start\n  }\n\n  return input.subarray(position.position, (position.position = start))\n}\n\n/**\n * @param {Buffer} buf\n * @param {boolean} leading\n * @param {boolean} trailing\n * @param {(charCode: number) => boolean} predicate\n * @returns {Buffer}\n */\nfunction removeChars (buf, leading, trailing, predicate) {\n  let lead = 0\n  let trail = buf.length - 1\n\n  if (leading) {\n    while (lead < buf.length && predicate(buf[lead])) lead++\n  }\n\n  if (trailing) {\n    while (trail > 0 && predicate(buf[trail])) trail--\n  }\n\n  return lead === 0 && trail === buf.length - 1 ? buf : buf.subarray(lead, trail + 1)\n}\n\n/**\n * Checks if {@param buffer} starts with {@param start}\n * @param {Buffer} buffer\n * @param {Buffer} start\n * @param {{ position: number }} position\n */\nfunction bufferStartsWith (buffer, start, position) {\n  if (buffer.length < start.length) {\n    return false\n  }\n\n  for (let i = 0; i < start.length; i++) {\n    if (start[i] !== buffer[position.position + i]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction parsingError (cause) {\n  return new TypeError('Failed to parse body as FormData.', { cause: new TypeError(cause) })\n}\n\n/**\n * CTL            = <any US-ASCII control character\n *                  (octets 0 - 31) and DEL (127)>\n * @param {number} char\n */\nfunction isCTL (char) {\n  return char <= 0x1f || char === 0x7f\n}\n\n/**\n * tspecials :=  \"(\" / \")\" / \"<\" / \">\" / \"@\" /\n *                \",\" / \";\" / \":\" / \"\\\" / <\">\n *                \"/\" / \"[\" / \"]\" / \"?\" / \"=\"\n *                ; Must be in quoted-string,\n *                ; to use within parameter values\n * @param {number} char\n */\nfunction isTSpecial (char) {\n  return (\n    char === 0x28 || // (\n    char === 0x29 || // )\n    char === 0x3c || // <\n    char === 0x3e || // >\n    char === 0x40 || // @\n    char === 0x2c || // ,\n    char === 0x3b || // ;\n    char === 0x3a || // :\n    char === 0x5c || // \\\n    char === 0x22 || // \"\n    char === 0x2f || // /\n    char === 0x5b || // [\n    char === 0x5d || // ]\n    char === 0x3f || // ?\n    char === 0x3d    // +\n  )\n}\n\n/**\n * token := 1*<any (US-ASCII) CHAR except SPACE, CTLs,\n *          or tspecials>\n * @param {number} char\n */\nfunction isToken (char) {\n  return (\n    char <= 0x7f &&  // ascii\n    char !== 0x20 && // space\n    char !== 0x09 &&\n    !isCTL(char) &&\n    !isTSpecial(char)\n  )\n}\n\nmodule.exports = {\n  multipartFormDataParser,\n  validateBoundary\n}\n", "'use strict'\n\n/**\n * @template {*} T\n * @typedef {Object} DeferredPromise\n * @property {Promise<T>} promise\n * @property {(value?: T) => void} resolve\n * @property {(reason?: any) => void} reject\n */\n\n/**\n * @template {*} T\n * @returns {DeferredPromise<T>} An object containing a promise and its resolve/reject methods.\n */\nfunction createDeferredPromise () {\n  let res\n  let rej\n  const promise = new Promise((resolve, reject) => {\n    res = resolve\n    rej = reject\n  })\n\n  return { promise, resolve: res, reject: rej }\n}\n\nmodule.exports = {\n  createDeferredPromise\n}\n", "'use strict'\n\nconst util = require('../../core/util')\nconst {\n  ReadableStreamFrom,\n  readableStreamClose,\n  fullyReadBody,\n  extractMimeType\n} = require('./util')\nconst { FormData, setFormDataState } = require('./formdata')\nconst { webidl } = require('../webidl')\nconst assert = require('node:assert')\nconst { isErrored, isDisturbed } = require('node:stream')\nconst { isUint8Array } = require('node:util/types')\nconst { serializeAMimeType } = require('./data-url')\nconst { multipartFormDataParser } = require('./formdata-parser')\nconst { createDeferredPromise } = require('../../util/promise')\nconst { parseJSONFromBytes } = require('../infra')\nconst { utf8DecodeBytes } = require('../../encoding')\nconst { runtimeFeatures } = require('../../util/runtime-features.js')\n\nconst random = runtimeFeatures.has('crypto')\n  ? require('node:crypto').randomInt\n  : (max) => Math.floor(Math.random() * max)\n\nconst textEncoder = new TextEncoder()\nfunction noop () {}\n\nconst streamRegistry = new FinalizationRegistry((weakRef) => {\n  const stream = weakRef.deref()\n  if (stream && !stream.locked && !isDisturbed(stream) && !isErrored(stream)) {\n    stream.cancel('Response object has been garbage collected').catch(noop)\n  }\n})\n\n/**\n * Extract a body with type from a byte sequence or BodyInit object\n *\n * @param {import('../../../types').BodyInit} object - The BodyInit object to extract from\n * @param {boolean} [keepalive=false] - If true, indicates that the body\n * @returns {[{stream: ReadableStream, source: any, length: number | null}, string | null]} - Returns a tuple containing the body and its type\n *\n * @see https://fetch.spec.whatwg.org/#concept-bodyinit-extract\n */\nfunction extractBody (object, keepalive = false) {\n  // 1. Let stream be null.\n  let stream = null\n  let controller = null\n\n  // 2. If object is a ReadableStream object, then set stream to object.\n  if (webidl.is.ReadableStream(object)) {\n    stream = object\n  } else if (webidl.is.Blob(object)) {\n    // 3. Otherwise, if object is a Blob object, set stream to the\n    //    result of running object\u2019s get stream.\n    stream = object.stream()\n  } else {\n    // 4. Otherwise, set stream to a new ReadableStream object, and set\n    //    up stream with byte reading support.\n    stream = new ReadableStream({\n      pull () {},\n      start (c) {\n        controller = c\n      },\n      cancel () {},\n      type: 'bytes'\n    })\n  }\n\n  // 5. Assert: stream is a ReadableStream object.\n  assert(webidl.is.ReadableStream(stream))\n\n  // 6. Let action be null.\n  let action = null\n\n  // 7. Let source be null.\n  let source = null\n\n  // 8. Let length be null.\n  let length = null\n\n  // 9. Let type be null.\n  let type = null\n\n  // 10. Switch on object:\n  if (typeof object === 'string') {\n    // Set source to the UTF-8 encoding of object.\n    // Note: setting source to a Uint8Array here breaks some mocking assumptions.\n    source = object\n\n    // Set type to `text/plain;charset=UTF-8`.\n    type = 'text/plain;charset=UTF-8'\n  } else if (webidl.is.URLSearchParams(object)) {\n    // URLSearchParams\n\n    // spec says to run application/x-www-form-urlencoded on body.list\n    // this is implemented in Node.js as apart of an URLSearchParams instance toString method\n    // See: https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L490\n    // and https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L1100\n\n    // Set source to the result of running the application/x-www-form-urlencoded serializer with object\u2019s list.\n    source = object.toString()\n\n    // Set type to `application/x-www-form-urlencoded;charset=UTF-8`.\n    type = 'application/x-www-form-urlencoded;charset=UTF-8'\n  } else if (webidl.is.BufferSource(object)) {\n    // Set source to a copy of the bytes held by object.\n    source = webidl.util.getCopyOfBytesHeldByBufferSource(object)\n  } else if (webidl.is.FormData(object)) {\n    const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}`\n    const prefix = `--${boundary}\\r\\nContent-Disposition: form-data`\n\n    /*! formdata-polyfill. MIT License. Jimmy W\u00E4rting <https://jimmy.warting.se/opensource> */\n    const formdataEscape = (str) =>\n      str.replace(/\\n/g, '%0A').replace(/\\r/g, '%0D').replace(/\"/g, '%22')\n    const normalizeLinefeeds = (value) => value.replace(/\\r?\\n|\\r/g, '\\r\\n')\n\n    // Set action to this step: run the multipart/form-data\n    // encoding algorithm, with object\u2019s entry list and UTF-8.\n    // - This ensures that the body is immutable and can't be changed afterwords\n    // - That the content-length is calculated in advance.\n    // - And that all parts are pre-encoded and ready to be sent.\n\n    const blobParts = []\n    const rn = new Uint8Array([13, 10]) // '\\r\\n'\n    length = 0\n    let hasUnknownSizeValue = false\n\n    for (const [name, value] of object) {\n      if (typeof value === 'string') {\n        const chunk = textEncoder.encode(prefix +\n          `; name=\"${formdataEscape(normalizeLinefeeds(name))}\"` +\n          `\\r\\n\\r\\n${normalizeLinefeeds(value)}\\r\\n`)\n        blobParts.push(chunk)\n        length += chunk.byteLength\n      } else {\n        const chunk = textEncoder.encode(`${prefix}; name=\"${formdataEscape(normalizeLinefeeds(name))}\"` +\n          (value.name ? `; filename=\"${formdataEscape(value.name)}\"` : '') + '\\r\\n' +\n          `Content-Type: ${\n            value.type || 'application/octet-stream'\n          }\\r\\n\\r\\n`)\n        blobParts.push(chunk, value, rn)\n        if (typeof value.size === 'number') {\n          length += chunk.byteLength + value.size + rn.byteLength\n        } else {\n          hasUnknownSizeValue = true\n        }\n      }\n    }\n\n    // CRLF is appended to the body to function with legacy servers and match other implementations.\n    // https://github.com/curl/curl/blob/3434c6b46e682452973972e8313613dfa58cd690/lib/mime.c#L1029-L1030\n    // https://github.com/form-data/form-data/issues/63\n    const chunk = textEncoder.encode(`--${boundary}--\\r\\n`)\n    blobParts.push(chunk)\n    length += chunk.byteLength\n    if (hasUnknownSizeValue) {\n      length = null\n    }\n\n    // Set source to object.\n    source = object\n\n    action = async function * () {\n      for (const part of blobParts) {\n        if (part.stream) {\n          yield * part.stream()\n        } else {\n          yield part\n        }\n      }\n    }\n\n    // Set type to `multipart/form-data; boundary=`,\n    // followed by the multipart/form-data boundary string generated\n    // by the multipart/form-data encoding algorithm.\n    type = `multipart/form-data; boundary=${boundary}`\n  } else if (webidl.is.Blob(object)) {\n    // Blob\n\n    // Set source to object.\n    source = object\n\n    // Set length to object\u2019s size.\n    length = object.size\n\n    // If object\u2019s type attribute is not the empty byte sequence, set\n    // type to its value.\n    if (object.type) {\n      type = object.type\n    }\n  } else if (typeof object[Symbol.asyncIterator] === 'function') {\n    // If keepalive is true, then throw a TypeError.\n    if (keepalive) {\n      throw new TypeError('keepalive')\n    }\n\n    // If object is disturbed or locked, then throw a TypeError.\n    if (util.isDisturbed(object) || object.locked) {\n      throw new TypeError(\n        'Response body object should not be disturbed or locked'\n      )\n    }\n\n    stream =\n      webidl.is.ReadableStream(object) ? object : ReadableStreamFrom(object)\n  }\n\n  // 11. If source is a byte sequence, then set action to a\n  // step that returns source and length to source\u2019s length.\n  if (typeof source === 'string' || isUint8Array(source)) {\n    action = () => {\n      length = typeof source === 'string' ? Buffer.byteLength(source) : source.length\n      return source\n    }\n  }\n\n  // 12. If action is non-null, then run these steps in parallel:\n  if (action != null) {\n    ;(async () => {\n      // 1. Run action.\n      const result = action()\n\n      // 2. Whenever one or more bytes are available and stream is not errored,\n      //    enqueue the result of creating a Uint8Array from the available bytes into stream.\n      const iterator = result?.[Symbol.asyncIterator]?.()\n      if (iterator) {\n        for await (const bytes of iterator) {\n          if (isErrored(stream)) break\n          if (bytes.length) {\n            controller.enqueue(new Uint8Array(bytes))\n          }\n        }\n      } else if (result?.length && !isErrored(stream)) {\n        controller.enqueue(typeof result === 'string' ? textEncoder.encode(result) : new Uint8Array(result))\n      }\n\n      // 3. When running action is done, close stream.\n      queueMicrotask(() => readableStreamClose(controller))\n    })()\n  }\n\n  // 13. Let body be a body whose stream is stream, source is source,\n  // and length is length.\n  const body = { stream, source, length }\n\n  // 14. Return (body, type).\n  return [body, type]\n}\n\n/**\n * @typedef {object} ExtractBodyResult\n * @property {ReadableStream<Uint8Array<ArrayBuffer>>} stream - The ReadableStream containing the body data\n * @property {any} source - The original source of the body data\n * @property {number | null} length - The length of the body data, or null\n */\n\n/**\n * Safely extract a body with type from a byte sequence or BodyInit object.\n *\n * @param {import('../../../types').BodyInit} object - The BodyInit object to extract from\n * @param {boolean} [keepalive=false] - If true, indicates that the body\n * @returns {[ExtractBodyResult, string | null]} - Returns a tuple containing the body and its type\n *\n * @see https://fetch.spec.whatwg.org/#bodyinit-safely-extract\n */\nfunction safelyExtractBody (object, keepalive = false) {\n  // To safely extract a body and a `Content-Type` value from\n  // a byte sequence or BodyInit object object, run these steps:\n\n  // 1. If object is a ReadableStream object, then:\n  if (webidl.is.ReadableStream(object)) {\n    // Assert: object is neither disturbed nor locked.\n    assert(!util.isDisturbed(object), 'The body has already been consumed.')\n    assert(!object.locked, 'The stream is locked.')\n  }\n\n  // 2. Return the results of extracting object.\n  return extractBody(object, keepalive)\n}\n\nfunction cloneBody (body) {\n  // To clone a body body, run these steps:\n\n  // https://fetch.spec.whatwg.org/#concept-body-clone\n\n  // 1. Let \u00AB out1, out2 \u00BB be the result of teeing body\u2019s stream.\n  const { 0: out1, 1: out2 } = body.stream.tee()\n\n  // 2. Set body\u2019s stream to out1.\n  body.stream = out1\n\n  // 3. Return a body whose stream is out2 and other members are copied from body.\n  return {\n    stream: out2,\n    length: body.length,\n    source: body.source\n  }\n}\n\nfunction bodyMixinMethods (instance, getInternalState) {\n  const methods = {\n    blob () {\n      // The blob() method steps are to return the result of\n      // running consume body with this and the following step\n      // given a byte sequence bytes: return a Blob whose\n      // contents are bytes and whose type attribute is this\u2019s\n      // MIME type.\n      return consumeBody(this, (bytes) => {\n        let mimeType = bodyMimeType(getInternalState(this))\n\n        if (mimeType === null) {\n          mimeType = ''\n        } else if (mimeType) {\n          mimeType = serializeAMimeType(mimeType)\n        }\n\n        // Return a Blob whose contents are bytes and type attribute\n        // is mimeType.\n        return new Blob([bytes], { type: mimeType })\n      }, instance, getInternalState)\n    },\n\n    arrayBuffer () {\n      // The arrayBuffer() method steps are to return the result\n      // of running consume body with this and the following step\n      // given a byte sequence bytes: return a new ArrayBuffer\n      // whose contents are bytes.\n      return consumeBody(this, (bytes) => {\n        return new Uint8Array(bytes).buffer\n      }, instance, getInternalState)\n    },\n\n    text () {\n      // The text() method steps are to return the result of running\n      // consume body with this and UTF-8 decode.\n      return consumeBody(this, utf8DecodeBytes, instance, getInternalState)\n    },\n\n    json () {\n      // The json() method steps are to return the result of running\n      // consume body with this and parse JSON from bytes.\n      return consumeBody(this, parseJSONFromBytes, instance, getInternalState)\n    },\n\n    formData () {\n      // The formData() method steps are to return the result of running\n      // consume body with this and the following step given a byte sequence bytes:\n      return consumeBody(this, (value) => {\n        // 1. Let mimeType be the result of get the MIME type with this.\n        const mimeType = bodyMimeType(getInternalState(this))\n\n        // 2. If mimeType is non-null, then switch on mimeType\u2019s essence and run\n        //    the corresponding steps:\n        if (mimeType !== null) {\n          switch (mimeType.essence) {\n            case 'multipart/form-data': {\n              // 1. ... [long step]\n              // 2. If that fails for some reason, then throw a TypeError.\n              const parsed = multipartFormDataParser(value, mimeType)\n\n              // 3. Return a new FormData object, appending each entry,\n              //    resulting from the parsing operation, to its entry list.\n              const fd = new FormData()\n              setFormDataState(fd, parsed)\n\n              return fd\n            }\n            case 'application/x-www-form-urlencoded': {\n              // 1. Let entries be the result of parsing bytes.\n              const entries = new URLSearchParams(value.toString())\n\n              // 2. If entries is failure, then throw a TypeError.\n\n              // 3. Return a new FormData object whose entry list is entries.\n              const fd = new FormData()\n\n              for (const [name, value] of entries) {\n                fd.append(name, value)\n              }\n\n              return fd\n            }\n          }\n        }\n\n        // 3. Throw a TypeError.\n        throw new TypeError(\n          'Content-Type was not one of \"multipart/form-data\" or \"application/x-www-form-urlencoded\".'\n        )\n      }, instance, getInternalState)\n    },\n\n    bytes () {\n      // The bytes() method steps are to return the result of running consume body\n      // with this and the following step given a byte sequence bytes: return the\n      // result of creating a Uint8Array from bytes in this\u2019s relevant realm.\n      return consumeBody(this, (bytes) => {\n        return new Uint8Array(bytes)\n      }, instance, getInternalState)\n    }\n  }\n\n  return methods\n}\n\nfunction mixinBody (prototype, getInternalState) {\n  Object.assign(prototype.prototype, bodyMixinMethods(prototype, getInternalState))\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-body-consume-body\n * @param {any} object internal state\n * @param {(value: unknown) => unknown} convertBytesToJSValue\n * @param {any} instance\n * @param {(target: any) => any} getInternalState\n */\nfunction consumeBody (object, convertBytesToJSValue, instance, getInternalState) {\n  try {\n    webidl.brandCheck(object, instance)\n  } catch (e) {\n    return Promise.reject(e)\n  }\n\n  object = getInternalState(object)\n\n  // 1. If object is unusable, then return a promise rejected\n  //    with a TypeError.\n  if (bodyUnusable(object)) {\n    return Promise.reject(new TypeError('Body is unusable: Body has already been read'))\n  }\n\n  // 2. Let promise be a new promise.\n  const promise = createDeferredPromise()\n\n  // 3. Let errorSteps given error be to reject promise with error.\n  const errorSteps = promise.reject\n\n  // 4. Let successSteps given a byte sequence data be to resolve\n  //    promise with the result of running convertBytesToJSValue\n  //    with data. If that threw an exception, then run errorSteps\n  //    with that exception.\n  const successSteps = (data) => {\n    try {\n      promise.resolve(convertBytesToJSValue(data))\n    } catch (e) {\n      errorSteps(e)\n    }\n  }\n\n  // 5. If object\u2019s body is null, then run successSteps with an\n  //    empty byte sequence.\n  if (object.body == null) {\n    successSteps(Buffer.allocUnsafe(0))\n    return promise.promise\n  }\n\n  // 6. Otherwise, fully read object\u2019s body given successSteps,\n  //    errorSteps, and object\u2019s relevant global object.\n  fullyReadBody(object.body, successSteps, errorSteps)\n\n  // 7. Return promise.\n  return promise.promise\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#body-unusable\n * @param {any} object internal state\n */\nfunction bodyUnusable (object) {\n  const body = object.body\n\n  // An object including the Body interface mixin is\n  // said to be unusable if its body is non-null and\n  // its body\u2019s stream is disturbed or locked.\n  return body != null && (body.stream.locked || util.isDisturbed(body.stream))\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-body-mime-type\n * @param {any} requestOrResponse internal state\n */\nfunction bodyMimeType (requestOrResponse) {\n  // 1. Let headers be null.\n  // 2. If requestOrResponse is a Request object, then set headers to requestOrResponse\u2019s request\u2019s header list.\n  // 3. Otherwise, set headers to requestOrResponse\u2019s response\u2019s header list.\n  /** @type {import('./headers').HeadersList} */\n  const headers = requestOrResponse.headersList\n\n  // 4. Let mimeType be the result of extracting a MIME type from headers.\n  const mimeType = extractMimeType(headers)\n\n  // 5. If mimeType is failure, then return null.\n  if (mimeType === 'failure') {\n    return null\n  }\n\n  // 6. Return mimeType.\n  return mimeType\n}\n\nmodule.exports = {\n  extractBody,\n  safelyExtractBody,\n  cloneBody,\n  mixinBody,\n  streamRegistry,\n  bodyUnusable\n}\n", "'use strict'\n\n/* global WebAssembly */\n\nconst assert = require('node:assert')\nconst util = require('../core/util.js')\nconst { channels } = require('../core/diagnostics.js')\nconst timers = require('../util/timers.js')\nconst {\n  RequestContentLengthMismatchError,\n  ResponseContentLengthMismatchError,\n  RequestAbortedError,\n  HeadersTimeoutError,\n  HeadersOverflowError,\n  SocketError,\n  InformationalError,\n  BodyTimeoutError,\n  HTTPParserError,\n  ResponseExceededMaxSizeError\n} = require('../core/errors.js')\nconst {\n  kUrl,\n  kReset,\n  kClient,\n  kParser,\n  kBlocking,\n  kRunning,\n  kPending,\n  kSize,\n  kWriting,\n  kQueue,\n  kNoRef,\n  kKeepAliveDefaultTimeout,\n  kHostHeader,\n  kPendingIdx,\n  kRunningIdx,\n  kError,\n  kPipelining,\n  kSocket,\n  kKeepAliveTimeoutValue,\n  kMaxHeadersSize,\n  kKeepAliveMaxTimeout,\n  kKeepAliveTimeoutThreshold,\n  kHeadersTimeout,\n  kBodyTimeout,\n  kStrictContentLength,\n  kMaxRequests,\n  kCounter,\n  kMaxResponseSize,\n  kOnError,\n  kResume,\n  kHTTPContext,\n  kClosed\n} = require('../core/symbols.js')\n\nconst constants = require('../llhttp/constants.js')\nconst EMPTY_BUF = Buffer.alloc(0)\nconst FastBuffer = Buffer[Symbol.species]\nconst removeAllListeners = util.removeAllListeners\n\nlet extractBody\n\nfunction lazyllhttp () {\n  const llhttpWasmData = process.env.JEST_WORKER_ID ? require('../llhttp/llhttp-wasm.js') : undefined\n\n  let mod\n\n  // We disable wasm SIMD on ppc64 as it seems to be broken on Power 9 architectures.\n  let useWasmSIMD = process.arch !== 'ppc64'\n  // The Env Variable UNDICI_NO_WASM_SIMD allows explicitly overriding the default behavior\n  if (process.env.UNDICI_NO_WASM_SIMD === '1') {\n    useWasmSIMD = true\n  } else if (process.env.UNDICI_NO_WASM_SIMD === '0') {\n    useWasmSIMD = false\n  }\n\n  if (useWasmSIMD) {\n    try {\n      mod = new WebAssembly.Module(require('../llhttp/llhttp_simd-wasm.js'))\n    } catch {\n    }\n  }\n\n  if (!mod) {\n    // We could check if the error was caused by the simd option not\n    // being enabled, but the occurring of this other error\n    // * https://github.com/emscripten-core/emscripten/issues/11495\n    // got me to remove that check to avoid breaking Node 12.\n    mod = new WebAssembly.Module(llhttpWasmData || require('../llhttp/llhttp-wasm.js'))\n  }\n\n  return new WebAssembly.Instance(mod, {\n    env: {\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_url: (p, at, len) => {\n        return 0\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_status: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @returns {number}\n       */\n      wasm_on_message_begin: (p) => {\n        assert(currentParser.ptr === p)\n        return currentParser.onMessageBegin()\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_header_field: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_header_value: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @param {number} statusCode\n       * @param {0|1} upgrade\n       * @param {0|1} shouldKeepAlive\n       * @returns {number}\n       */\n      wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => {\n        assert(currentParser.ptr === p)\n        return currentParser.onHeadersComplete(statusCode, upgrade === 1, shouldKeepAlive === 1)\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_body: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @returns {number}\n       */\n      wasm_on_message_complete: (p) => {\n        assert(currentParser.ptr === p)\n        return currentParser.onMessageComplete()\n      }\n\n    }\n  })\n}\n\nlet llhttpInstance = null\n\n/**\n * @type {Parser|null}\n */\nlet currentParser = null\nlet currentBufferRef = null\n/**\n * @type {number}\n */\nlet currentBufferSize = 0\nlet currentBufferPtr = null\n\nconst USE_NATIVE_TIMER = 0\nconst USE_FAST_TIMER = 1\n\n// Use fast timers for headers and body to take eventual event loop\n// latency into account.\nconst TIMEOUT_HEADERS = 2 | USE_FAST_TIMER\nconst TIMEOUT_BODY = 4 | USE_FAST_TIMER\n\n// Use native timers to ignore event loop latency for keep-alive\n// handling.\nconst TIMEOUT_KEEP_ALIVE = 8 | USE_NATIVE_TIMER\n\nclass Parser {\n  /**\n     * @param {import('./client.js')} client\n     * @param {import('net').Socket} socket\n     * @param {*} llhttp\n     */\n  constructor (client, socket, { exports }) {\n    this.llhttp = exports\n    this.ptr = this.llhttp.llhttp_alloc(constants.TYPE.RESPONSE)\n    this.client = client\n    /**\n     * @type {import('net').Socket}\n     */\n    this.socket = socket\n    this.timeout = null\n    this.timeoutValue = null\n    this.timeoutType = null\n    this.statusCode = 0\n    this.statusText = ''\n    this.upgrade = false\n    this.headers = []\n    this.headersSize = 0\n    this.headersMaxSize = client[kMaxHeadersSize]\n    this.shouldKeepAlive = false\n    this.paused = false\n    this.resume = this.resume.bind(this)\n\n    this.bytesRead = 0\n\n    this.keepAlive = ''\n    this.contentLength = ''\n    this.connection = ''\n    this.maxResponseSize = client[kMaxResponseSize]\n  }\n\n  setTimeout (delay, type) {\n    // If the existing timer and the new timer are of different timer type\n    // (fast or native) or have different delay, we need to clear the existing\n    // timer and set a new one.\n    if (\n      delay !== this.timeoutValue ||\n      (type & USE_FAST_TIMER) ^ (this.timeoutType & USE_FAST_TIMER)\n    ) {\n      // If a timeout is already set, clear it with clearTimeout of the fast\n      // timer implementation, as it can clear fast and native timers.\n      if (this.timeout) {\n        timers.clearTimeout(this.timeout)\n        this.timeout = null\n      }\n\n      if (delay) {\n        if (type & USE_FAST_TIMER) {\n          this.timeout = timers.setFastTimeout(onParserTimeout, delay, new WeakRef(this))\n        } else {\n          this.timeout = setTimeout(onParserTimeout, delay, new WeakRef(this))\n          this.timeout?.unref()\n        }\n      }\n\n      this.timeoutValue = delay\n    } else if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    this.timeoutType = type\n  }\n\n  resume () {\n    if (this.socket.destroyed || !this.paused) {\n      return\n    }\n\n    assert(this.ptr != null)\n    assert(currentParser === null)\n\n    this.llhttp.llhttp_resume(this.ptr)\n\n    assert(this.timeoutType === TIMEOUT_BODY)\n    if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    this.paused = false\n    this.execute(this.socket.read() || EMPTY_BUF) // Flush parser.\n    this.readMore()\n  }\n\n  readMore () {\n    while (!this.paused && this.ptr) {\n      const chunk = this.socket.read()\n      if (chunk === null) {\n        break\n      }\n      this.execute(chunk)\n    }\n  }\n\n  /**\n   * @param {Buffer} chunk\n   */\n  execute (chunk) {\n    assert(currentParser === null)\n    assert(this.ptr != null)\n    assert(!this.paused)\n\n    const { socket, llhttp } = this\n\n    // Allocate a new buffer if the current buffer is too small.\n    if (chunk.length > currentBufferSize) {\n      if (currentBufferPtr) {\n        llhttp.free(currentBufferPtr)\n      }\n      // Allocate a buffer that is a multiple of 4096 bytes.\n      currentBufferSize = Math.ceil(chunk.length / 4096) * 4096\n      currentBufferPtr = llhttp.malloc(currentBufferSize)\n    }\n\n    new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(chunk)\n\n    // Call `execute` on the wasm parser.\n    // We pass the `llhttp_parser` pointer address, the pointer address of buffer view data,\n    // and finally the length of bytes to parse.\n    // The return value is an error code or `constants.ERROR.OK`.\n    try {\n      let ret\n\n      try {\n        currentBufferRef = chunk\n        currentParser = this\n        ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, chunk.length)\n      } finally {\n        currentParser = null\n        currentBufferRef = null\n      }\n\n      if (ret !== constants.ERROR.OK) {\n        const data = chunk.subarray(llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr)\n\n        if (ret === constants.ERROR.PAUSED_UPGRADE) {\n          this.onUpgrade(data)\n        } else if (ret === constants.ERROR.PAUSED) {\n          this.paused = true\n          socket.unshift(data)\n        } else {\n          const ptr = llhttp.llhttp_get_error_reason(this.ptr)\n          let message = ''\n          if (ptr) {\n            const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0)\n            message =\n              'Response does not match the HTTP/1.1 protocol (' +\n              Buffer.from(llhttp.memory.buffer, ptr, len).toString() +\n              ')'\n          }\n          throw new HTTPParserError(message, constants.ERROR[ret], data)\n        }\n      }\n    } catch (err) {\n      util.destroy(socket, err)\n    }\n  }\n\n  destroy () {\n    assert(currentParser === null)\n    assert(this.ptr != null)\n\n    this.llhttp.llhttp_free(this.ptr)\n    this.ptr = null\n\n    this.timeout && timers.clearTimeout(this.timeout)\n    this.timeout = null\n    this.timeoutValue = null\n    this.timeoutType = null\n\n    this.paused = false\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {0}\n   */\n  onStatus (buf) {\n    this.statusText = buf.toString()\n    return 0\n  }\n\n  /**\n   * @returns {0|-1}\n   */\n  onMessageBegin () {\n    const { socket, client } = this\n\n    if (socket.destroyed) {\n      return -1\n    }\n\n    const request = client[kQueue][client[kRunningIdx]]\n    if (!request) {\n      return -1\n    }\n    request.onResponseStarted()\n\n    return 0\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {number}\n   */\n  onHeaderField (buf) {\n    const len = this.headers.length\n\n    if ((len & 1) === 0) {\n      this.headers.push(buf)\n    } else {\n      this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf])\n    }\n\n    this.trackHeader(buf.length)\n\n    return 0\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {number}\n   */\n  onHeaderValue (buf) {\n    let len = this.headers.length\n\n    if ((len & 1) === 1) {\n      this.headers.push(buf)\n      len += 1\n    } else {\n      this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf])\n    }\n\n    const key = this.headers[len - 2]\n    if (key.length === 10) {\n      const headerName = util.bufferToLowerCasedHeaderName(key)\n      if (headerName === 'keep-alive') {\n        this.keepAlive += buf.toString()\n      } else if (headerName === 'connection') {\n        this.connection += buf.toString()\n      }\n    } else if (key.length === 14 && util.bufferToLowerCasedHeaderName(key) === 'content-length') {\n      this.contentLength += buf.toString()\n    }\n\n    this.trackHeader(buf.length)\n\n    return 0\n  }\n\n  /**\n   * @param {number} len\n   */\n  trackHeader (len) {\n    this.headersSize += len\n    if (this.headersSize >= this.headersMaxSize) {\n      util.destroy(this.socket, new HeadersOverflowError())\n    }\n  }\n\n  /**\n   * @param {Buffer} head\n   */\n  onUpgrade (head) {\n    const { upgrade, client, socket, headers, statusCode } = this\n\n    assert(upgrade)\n    assert(client[kSocket] === socket)\n    assert(!socket.destroyed)\n    assert(!this.paused)\n    assert((headers.length & 1) === 0)\n\n    const request = client[kQueue][client[kRunningIdx]]\n    assert(request)\n    assert(request.upgrade || request.method === 'CONNECT')\n\n    this.statusCode = 0\n    this.statusText = ''\n    this.shouldKeepAlive = false\n\n    this.headers = []\n    this.headersSize = 0\n\n    socket.unshift(head)\n\n    socket[kParser].destroy()\n    socket[kParser] = null\n\n    socket[kClient] = null\n    socket[kError] = null\n\n    removeAllListeners(socket)\n\n    client[kSocket] = null\n    client[kHTTPContext] = null // TODO (fix): This is hacky...\n    client[kQueue][client[kRunningIdx]++] = null\n    client.emit('disconnect', client[kUrl], [client], new InformationalError('upgrade'))\n\n    try {\n      request.onUpgrade(statusCode, headers, socket)\n    } catch (err) {\n      util.destroy(socket, err)\n    }\n\n    client[kResume]()\n  }\n\n  /**\n   * @param {number} statusCode\n   * @param {boolean} upgrade\n   * @param {boolean} shouldKeepAlive\n   * @returns {number}\n   */\n  onHeadersComplete (statusCode, upgrade, shouldKeepAlive) {\n    const { client, socket, headers, statusText } = this\n\n    if (socket.destroyed) {\n      return -1\n    }\n\n    const request = client[kQueue][client[kRunningIdx]]\n\n    if (!request) {\n      return -1\n    }\n\n    assert(!this.upgrade)\n    assert(this.statusCode < 200)\n\n    if (statusCode === 100) {\n      util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket)))\n      return -1\n    }\n\n    /* this can only happen if server is misbehaving */\n    if (upgrade && !request.upgrade) {\n      util.destroy(socket, new SocketError('bad upgrade', util.getSocketInfo(socket)))\n      return -1\n    }\n\n    assert(this.timeoutType === TIMEOUT_HEADERS)\n\n    this.statusCode = statusCode\n    this.shouldKeepAlive = (\n      shouldKeepAlive ||\n      // Override llhttp value which does not allow keepAlive for HEAD.\n      (request.method === 'HEAD' && !socket[kReset] && this.connection.toLowerCase() === 'keep-alive')\n    )\n\n    if (this.statusCode >= 200) {\n      const bodyTimeout = request.bodyTimeout != null\n        ? request.bodyTimeout\n        : client[kBodyTimeout]\n      this.setTimeout(bodyTimeout, TIMEOUT_BODY)\n    } else if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    if (request.method === 'CONNECT') {\n      assert(client[kRunning] === 1)\n      this.upgrade = true\n      return 2\n    }\n\n    if (upgrade) {\n      assert(client[kRunning] === 1)\n      this.upgrade = true\n      return 2\n    }\n\n    assert((this.headers.length & 1) === 0)\n    this.headers = []\n    this.headersSize = 0\n\n    if (this.shouldKeepAlive && client[kPipelining]) {\n      const keepAliveTimeout = this.keepAlive ? util.parseKeepAliveTimeout(this.keepAlive) : null\n\n      if (keepAliveTimeout != null) {\n        const timeout = Math.min(\n          keepAliveTimeout - client[kKeepAliveTimeoutThreshold],\n          client[kKeepAliveMaxTimeout]\n        )\n        if (timeout <= 0) {\n          socket[kReset] = true\n        } else {\n          client[kKeepAliveTimeoutValue] = timeout\n        }\n      } else {\n        client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout]\n      }\n    } else {\n      // Stop more requests from being dispatched.\n      socket[kReset] = true\n    }\n\n    const pause = request.onHeaders(statusCode, headers, this.resume, statusText) === false\n\n    if (request.aborted) {\n      return -1\n    }\n\n    if (request.method === 'HEAD') {\n      return 1\n    }\n\n    if (statusCode < 200) {\n      return 1\n    }\n\n    if (socket[kBlocking]) {\n      socket[kBlocking] = false\n      client[kResume]()\n    }\n\n    return pause ? constants.ERROR.PAUSED : 0\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {number}\n   */\n  onBody (buf) {\n    const { client, socket, statusCode, maxResponseSize } = this\n\n    if (socket.destroyed) {\n      return -1\n    }\n\n    const request = client[kQueue][client[kRunningIdx]]\n    assert(request)\n\n    assert(this.timeoutType === TIMEOUT_BODY)\n    if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    assert(statusCode >= 200)\n\n    if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) {\n      util.destroy(socket, new ResponseExceededMaxSizeError())\n      return -1\n    }\n\n    this.bytesRead += buf.length\n\n    if (request.onData(buf) === false) {\n      return constants.ERROR.PAUSED\n    }\n\n    return 0\n  }\n\n  /**\n   * @returns {number}\n   */\n  onMessageComplete () {\n    const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this\n\n    if (socket.destroyed && (!statusCode || shouldKeepAlive)) {\n      return -1\n    }\n\n    if (upgrade) {\n      return 0\n    }\n\n    assert(statusCode >= 100)\n    assert((this.headers.length & 1) === 0)\n\n    const request = client[kQueue][client[kRunningIdx]]\n    assert(request)\n\n    this.statusCode = 0\n    this.statusText = ''\n    this.bytesRead = 0\n    this.contentLength = ''\n    this.keepAlive = ''\n    this.connection = ''\n\n    this.headers = []\n    this.headersSize = 0\n\n    if (statusCode < 200) {\n      return 0\n    }\n\n    if (request.method !== 'HEAD' && contentLength && bytesRead !== parseInt(contentLength, 10)) {\n      util.destroy(socket, new ResponseContentLengthMismatchError())\n      return -1\n    }\n\n    request.onComplete(headers)\n\n    client[kQueue][client[kRunningIdx]++] = null\n\n    if (socket[kWriting]) {\n      assert(client[kRunning] === 0)\n      // Response completed before request.\n      util.destroy(socket, new InformationalError('reset'))\n      return constants.ERROR.PAUSED\n    } else if (!shouldKeepAlive) {\n      util.destroy(socket, new InformationalError('reset'))\n      return constants.ERROR.PAUSED\n    } else if (socket[kReset] && client[kRunning] === 0) {\n      // Destroy socket once all requests have completed.\n      // The request at the tail of the pipeline is the one\n      // that requested reset and no further requests should\n      // have been queued since then.\n      util.destroy(socket, new InformationalError('reset'))\n      return constants.ERROR.PAUSED\n    } else if (client[kPipelining] == null || client[kPipelining] === 1) {\n      // We must wait a full event loop cycle to reuse this socket to make sure\n      // that non-spec compliant servers are not closing the connection even if they\n      // said they won't.\n      setImmediate(client[kResume])\n    } else {\n      client[kResume]()\n    }\n\n    return 0\n  }\n}\n\nfunction onParserTimeout (parserWeakRef) {\n  const parser = parserWeakRef.deref()\n  if (!parser) {\n    return\n  }\n\n  const { socket, timeoutType, client, paused } = parser\n\n  if (timeoutType === TIMEOUT_HEADERS) {\n    if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) {\n      assert(!paused, 'cannot be paused while waiting for headers')\n      util.destroy(socket, new HeadersTimeoutError())\n    }\n  } else if (timeoutType === TIMEOUT_BODY) {\n    if (!paused) {\n      util.destroy(socket, new BodyTimeoutError())\n    }\n  } else if (timeoutType === TIMEOUT_KEEP_ALIVE) {\n    assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue])\n    util.destroy(socket, new InformationalError('socket idle timeout'))\n  }\n}\n\n/**\n * @param {import ('./client.js')} client\n * @param {import('net').Socket} socket\n * @returns\n */\nfunction connectH1 (client, socket) {\n  client[kSocket] = socket\n\n  if (!llhttpInstance) {\n    llhttpInstance = lazyllhttp()\n  }\n\n  if (socket.errored) {\n    throw socket.errored\n  }\n\n  if (socket.destroyed) {\n    throw new SocketError('destroyed')\n  }\n\n  socket[kNoRef] = false\n  socket[kWriting] = false\n  socket[kReset] = false\n  socket[kBlocking] = false\n  socket[kParser] = new Parser(client, socket, llhttpInstance)\n\n  util.addListener(socket, 'error', onHttpSocketError)\n  util.addListener(socket, 'readable', onHttpSocketReadable)\n  util.addListener(socket, 'end', onHttpSocketEnd)\n  util.addListener(socket, 'close', onHttpSocketClose)\n\n  socket[kClosed] = false\n  socket.on('close', onSocketClose)\n\n  return {\n    version: 'h1',\n    defaultPipelining: 1,\n    write (request) {\n      return writeH1(client, request)\n    },\n    resume () {\n      resumeH1(client)\n    },\n    /**\n     * @param {Error|undefined} err\n     * @param {() => void} callback\n     */\n    destroy (err, callback) {\n      if (socket[kClosed]) {\n        queueMicrotask(callback)\n      } else {\n        socket.on('close', callback)\n        socket.destroy(err)\n      }\n    },\n    /**\n     * @returns {boolean}\n     */\n    get destroyed () {\n      return socket.destroyed\n    },\n    /**\n     * @param {import('../core/request.js')} request\n     * @returns {boolean}\n     */\n    busy (request) {\n      if (socket[kWriting] || socket[kReset] || socket[kBlocking]) {\n        return true\n      }\n\n      if (request) {\n        if (client[kRunning] > 0 && !request.idempotent) {\n          // Non-idempotent request cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          return true\n        }\n\n        if (client[kRunning] > 0 && (request.upgrade || request.method === 'CONNECT')) {\n          // Don't dispatch an upgrade until all preceding requests have completed.\n          // A misbehaving server might upgrade the connection before all pipelined\n          // request has completed.\n          return true\n        }\n\n        if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 &&\n          (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) {\n          // Request with stream or iterator body can error while other requests\n          // are inflight and indirectly error those as well.\n          // Ensure this doesn't happen by waiting for inflight\n          // to complete before dispatching.\n\n          // Request with stream or iterator body cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          return true\n        }\n      }\n\n      return false\n    }\n  }\n}\n\nfunction onHttpSocketError (err) {\n  assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')\n\n  const parser = this[kParser]\n\n  // On Mac OS, we get an ECONNRESET even if there is a full body to be forwarded\n  // to the user.\n  if (err.code === 'ECONNRESET' && parser.statusCode && !parser.shouldKeepAlive) {\n    // We treat all incoming data so for as a valid response.\n    parser.onMessageComplete()\n    return\n  }\n\n  this[kError] = err\n\n  this[kClient][kOnError](err)\n}\n\nfunction onHttpSocketReadable () {\n  this[kParser]?.readMore()\n}\n\nfunction onHttpSocketEnd () {\n  const parser = this[kParser]\n\n  if (parser.statusCode && !parser.shouldKeepAlive) {\n    // We treat all incoming data so far as a valid response.\n    parser.onMessageComplete()\n    return\n  }\n\n  util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))\n}\n\nfunction onHttpSocketClose () {\n  const parser = this[kParser]\n\n  if (parser) {\n    if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {\n      // We treat all incoming data so far as a valid response.\n      parser.onMessageComplete()\n    }\n\n    this[kParser].destroy()\n    this[kParser] = null\n  }\n\n  const err = this[kError] || new SocketError('closed', util.getSocketInfo(this))\n\n  const client = this[kClient]\n\n  client[kSocket] = null\n  client[kHTTPContext] = null // TODO (fix): This is hacky...\n\n  if (client.destroyed) {\n    assert(client[kPending] === 0)\n\n    // Fail entire queue.\n    const requests = client[kQueue].splice(client[kRunningIdx])\n    for (let i = 0; i < requests.length; i++) {\n      const request = requests[i]\n      util.errorRequest(client, request, err)\n    }\n  } else if (client[kRunning] > 0 && err.code !== 'UND_ERR_INFO') {\n    // Fail head of pipeline.\n    const request = client[kQueue][client[kRunningIdx]]\n    client[kQueue][client[kRunningIdx]++] = null\n\n    util.errorRequest(client, request, err)\n  }\n\n  client[kPendingIdx] = client[kRunningIdx]\n\n  assert(client[kRunning] === 0)\n\n  client.emit('disconnect', client[kUrl], [client], err)\n\n  client[kResume]()\n}\n\nfunction onSocketClose () {\n  this[kClosed] = true\n}\n\n/**\n * @param {import('./client.js')} client\n */\nfunction resumeH1 (client) {\n  const socket = client[kSocket]\n\n  if (socket && !socket.destroyed) {\n    if (client[kSize] === 0) {\n      if (!socket[kNoRef] && socket.unref) {\n        socket.unref()\n        socket[kNoRef] = true\n      }\n    } else if (socket[kNoRef] && socket.ref) {\n      socket.ref()\n      socket[kNoRef] = false\n    }\n\n    if (client[kSize] === 0) {\n      if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) {\n        socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE)\n      }\n    } else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) {\n      if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) {\n        const request = client[kQueue][client[kRunningIdx]]\n        const headersTimeout = request.headersTimeout != null\n          ? request.headersTimeout\n          : client[kHeadersTimeout]\n        socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS)\n      }\n    }\n  }\n}\n\n// https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2\nfunction shouldSendContentLength (method) {\n  return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT'\n}\n\n/**\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @returns\n */\nfunction writeH1 (client, request) {\n  const { method, path, host, upgrade, blocking, reset } = request\n\n  let { body, headers, contentLength } = request\n\n  // https://tools.ietf.org/html/rfc7231#section-4.3.1\n  // https://tools.ietf.org/html/rfc7231#section-4.3.2\n  // https://tools.ietf.org/html/rfc7231#section-4.3.5\n\n  // Sending a payload body on a request that does not\n  // expect it can cause undefined behavior on some\n  // servers and corrupt connection state. Do not\n  // re-use the connection for further requests.\n\n  const expectsPayload = (\n    method === 'PUT' ||\n    method === 'POST' ||\n    method === 'PATCH' ||\n    method === 'QUERY' ||\n    method === 'PROPFIND' ||\n    method === 'PROPPATCH'\n  )\n\n  if (util.isFormDataLike(body)) {\n    if (!extractBody) {\n      extractBody = require('../web/fetch/body.js').extractBody\n    }\n\n    const [bodyStream, contentType] = extractBody(body)\n    if (request.contentType == null) {\n      headers.push('content-type', contentType)\n    }\n    body = bodyStream.stream\n    contentLength = bodyStream.length\n  } else if (util.isBlobLike(body) && request.contentType == null && body.type) {\n    headers.push('content-type', body.type)\n  }\n\n  if (body && typeof body.read === 'function') {\n    // Try to read EOF in order to get length.\n    body.read(0)\n  }\n\n  const bodyLength = util.bodyLength(body)\n\n  contentLength = bodyLength ?? contentLength\n\n  if (contentLength === null) {\n    contentLength = request.contentLength\n  }\n\n  if (contentLength === 0 && !expectsPayload) {\n    // https://tools.ietf.org/html/rfc7230#section-3.3.2\n    // A user agent SHOULD NOT send a Content-Length header field when\n    // the request message does not contain a payload body and the method\n    // semantics do not anticipate such a body.\n\n    contentLength = null\n  }\n\n  // https://github.com/nodejs/undici/issues/2046\n  // A user agent may send a Content-Length header with 0 value, this should be allowed.\n  if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) {\n    if (client[kStrictContentLength]) {\n      util.errorRequest(client, request, new RequestContentLengthMismatchError())\n      return false\n    }\n\n    process.emitWarning(new RequestContentLengthMismatchError())\n  }\n\n  const socket = client[kSocket]\n\n  /**\n   * @param {Error} [err]\n   * @returns {void}\n   */\n  const abort = (err) => {\n    if (request.aborted || request.completed) {\n      return\n    }\n\n    util.errorRequest(client, request, err || new RequestAbortedError())\n\n    util.destroy(body)\n    util.destroy(socket, new InformationalError('aborted'))\n  }\n\n  try {\n    request.onConnect(abort)\n  } catch (err) {\n    util.errorRequest(client, request, err)\n  }\n\n  if (request.aborted) {\n    return false\n  }\n\n  if (method === 'HEAD') {\n    // https://github.com/mcollina/undici/issues/258\n    // Close after a HEAD request to interop with misbehaving servers\n    // that may send a body in the response.\n\n    socket[kReset] = true\n  }\n\n  if (upgrade || method === 'CONNECT') {\n    // On CONNECT or upgrade, block pipeline from dispatching further\n    // requests on this connection.\n\n    socket[kReset] = true\n  }\n\n  if (reset != null) {\n    socket[kReset] = reset\n  }\n\n  if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) {\n    socket[kReset] = true\n  }\n\n  if (blocking) {\n    socket[kBlocking] = true\n  }\n\n  if (socket.setTypeOfService) {\n    socket.setTypeOfService(request.typeOfService)\n  }\n\n  let header = `${method} ${path} HTTP/1.1\\r\\n`\n\n  if (typeof host === 'string') {\n    header += `host: ${host}\\r\\n`\n  } else {\n    header += client[kHostHeader]\n  }\n\n  if (upgrade) {\n    header += `connection: upgrade\\r\\nupgrade: ${upgrade}\\r\\n`\n  } else if (client[kPipelining] && !socket[kReset]) {\n    header += 'connection: keep-alive\\r\\n'\n  } else {\n    header += 'connection: close\\r\\n'\n  }\n\n  if (Array.isArray(headers)) {\n    for (let n = 0; n < headers.length; n += 2) {\n      const key = headers[n + 0]\n      const val = headers[n + 1]\n\n      if (Array.isArray(val)) {\n        for (let i = 0; i < val.length; i++) {\n          header += `${key}: ${val[i]}\\r\\n`\n        }\n      } else {\n        header += `${key}: ${val}\\r\\n`\n      }\n    }\n  }\n\n  if (channels.sendHeaders.hasSubscribers) {\n    channels.sendHeaders.publish({ request, headers: header, socket })\n  }\n\n  if (!body || bodyLength === 0) {\n    writeBuffer(abort, null, client, request, socket, contentLength, header, expectsPayload)\n  } else if (util.isBuffer(body)) {\n    writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload)\n  } else if (util.isBlobLike(body)) {\n    if (typeof body.stream === 'function') {\n      writeIterable(abort, body.stream(), client, request, socket, contentLength, header, expectsPayload)\n    } else {\n      writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload)\n    }\n  } else if (util.isStream(body)) {\n    writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload)\n  } else if (util.isIterable(body)) {\n    writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload)\n  } else {\n    assert(false)\n  }\n\n  return true\n}\n\n/**\n * @param {AbortCallback} abort\n * @param {import('stream').Stream} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n */\nfunction writeStream (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined')\n\n  let finished = false\n\n  const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header })\n\n  /**\n   * @param {Buffer} chunk\n   * @returns {void}\n   */\n  const onData = function (chunk) {\n    if (finished) {\n      return\n    }\n\n    try {\n      if (!writer.write(chunk) && this.pause) {\n        this.pause()\n      }\n    } catch (err) {\n      util.destroy(this, err)\n    }\n  }\n\n  /**\n   * @returns {void}\n   */\n  const onDrain = function () {\n    if (finished) {\n      return\n    }\n\n    if (body.resume) {\n      body.resume()\n    }\n  }\n\n  /**\n   * @returns {void}\n   */\n  const onClose = function () {\n    // 'close' might be emitted *before* 'error' for\n    // broken streams. Wait a tick to avoid this case.\n    queueMicrotask(() => {\n      // It's only safe to remove 'error' listener after\n      // 'close'.\n      body.removeListener('error', onFinished)\n    })\n\n    if (!finished) {\n      const err = new RequestAbortedError()\n      queueMicrotask(() => onFinished(err))\n    }\n  }\n\n  /**\n   * @param {Error} [err]\n   * @returns\n   */\n  const onFinished = function (err) {\n    if (finished) {\n      return\n    }\n\n    finished = true\n\n    assert(socket.destroyed || (socket[kWriting] && client[kRunning] <= 1))\n\n    socket\n      .off('drain', onDrain)\n      .off('error', onFinished)\n\n    body\n      .removeListener('data', onData)\n      .removeListener('end', onFinished)\n      .removeListener('close', onClose)\n\n    if (!err) {\n      try {\n        writer.end()\n      } catch (er) {\n        err = er\n      }\n    }\n\n    writer.destroy(err)\n\n    if (err && (err.code !== 'UND_ERR_INFO' || err.message !== 'reset')) {\n      util.destroy(body, err)\n    } else {\n      util.destroy(body)\n    }\n  }\n\n  body\n    .on('data', onData)\n    .on('end', onFinished)\n    .on('error', onFinished)\n    .on('close', onClose)\n\n  if (body.resume) {\n    body.resume()\n  }\n\n  socket\n    .on('drain', onDrain)\n    .on('error', onFinished)\n\n  if (body.errorEmitted ?? body.errored) {\n    setImmediate(onFinished, body.errored)\n  } else if (body.endEmitted ?? body.readableEnded) {\n    setImmediate(onFinished, null)\n  }\n\n  if (body.closeEmitted ?? body.closed) {\n    setImmediate(onClose)\n  }\n}\n\n/**\n * @typedef AbortCallback\n * @type {Function}\n * @param {Error} [err]\n * @returns {void}\n */\n\n/**\n * @param {AbortCallback} abort\n * @param {Uint8Array|null} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n * @returns {void}\n */\nfunction writeBuffer (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  try {\n    if (!body) {\n      if (contentLength === 0) {\n        socket.write(`${header}content-length: 0\\r\\n\\r\\n`, 'latin1')\n      } else {\n        assert(contentLength === null, 'no body must not have content length')\n        socket.write(`${header}\\r\\n`, 'latin1')\n      }\n    } else if (util.isBuffer(body)) {\n      assert(contentLength === body.byteLength, 'buffer body must have content length')\n\n      socket.cork()\n      socket.write(`${header}content-length: ${contentLength}\\r\\n\\r\\n`, 'latin1')\n      socket.write(body)\n      socket.uncork()\n      request.onBodySent(body)\n\n      if (!expectsPayload && request.reset !== false) {\n        socket[kReset] = true\n      }\n    }\n    request.onRequestSent()\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  }\n}\n\n/**\n * @param {AbortCallback} abort\n * @param {Blob} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n * @returns {Promise<void>}\n */\nasync function writeBlob (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  assert(contentLength === body.size, 'blob body must have content length')\n\n  try {\n    if (contentLength != null && contentLength !== body.size) {\n      throw new RequestContentLengthMismatchError()\n    }\n\n    const buffer = Buffer.from(await body.arrayBuffer())\n\n    socket.cork()\n    socket.write(`${header}content-length: ${contentLength}\\r\\n\\r\\n`, 'latin1')\n    socket.write(buffer)\n    socket.uncork()\n\n    request.onBodySent(buffer)\n    request.onRequestSent()\n\n    if (!expectsPayload && request.reset !== false) {\n      socket[kReset] = true\n    }\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  }\n}\n\n/**\n * @param {AbortCallback} abort\n * @param {Iterable} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n * @returns {Promise<void>}\n */\nasync function writeIterable (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined')\n\n  let callback = null\n  function onDrain () {\n    if (callback) {\n      const cb = callback\n      callback = null\n      cb()\n    }\n  }\n\n  const waitForDrain = () => new Promise((resolve, reject) => {\n    assert(callback === null)\n\n    if (socket[kError]) {\n      reject(socket[kError])\n    } else {\n      callback = resolve\n    }\n  })\n\n  socket\n    .on('close', onDrain)\n    .on('drain', onDrain)\n\n  const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header })\n  try {\n    // It's up to the user to somehow abort the async iterable.\n    for await (const chunk of body) {\n      if (socket[kError]) {\n        throw socket[kError]\n      }\n\n      if (!writer.write(chunk)) {\n        await waitForDrain()\n      }\n    }\n\n    writer.end()\n  } catch (err) {\n    writer.destroy(err)\n  } finally {\n    socket\n      .off('close', onDrain)\n      .off('drain', onDrain)\n  }\n}\n\nclass AsyncWriter {\n  /**\n   *\n   * @param {object} arg\n   * @param {AbortCallback} arg.abort\n   * @param {import('net').Socket} arg.socket\n   * @param {import('../core/request.js')} arg.request\n   * @param {number} arg.contentLength\n   * @param {import('./client.js')} arg.client\n   * @param {boolean} arg.expectsPayload\n   * @param {string} arg.header\n   */\n  constructor ({ abort, socket, request, contentLength, client, expectsPayload, header }) {\n    this.socket = socket\n    this.request = request\n    this.contentLength = contentLength\n    this.client = client\n    this.bytesWritten = 0\n    this.expectsPayload = expectsPayload\n    this.header = header\n    this.abort = abort\n\n    socket[kWriting] = true\n  }\n\n  /**\n   * @param {Buffer} chunk\n   * @returns\n   */\n  write (chunk) {\n    const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this\n\n    if (socket[kError]) {\n      throw socket[kError]\n    }\n\n    if (socket.destroyed) {\n      return false\n    }\n\n    const len = Buffer.byteLength(chunk)\n    if (!len) {\n      return true\n    }\n\n    // We should defer writing chunks.\n    if (contentLength !== null && bytesWritten + len > contentLength) {\n      if (client[kStrictContentLength]) {\n        throw new RequestContentLengthMismatchError()\n      }\n\n      process.emitWarning(new RequestContentLengthMismatchError())\n    }\n\n    socket.cork()\n\n    if (bytesWritten === 0) {\n      if (!expectsPayload && request.reset !== false) {\n        socket[kReset] = true\n      }\n\n      if (contentLength === null) {\n        socket.write(`${header}transfer-encoding: chunked\\r\\n`, 'latin1')\n      } else {\n        socket.write(`${header}content-length: ${contentLength}\\r\\n\\r\\n`, 'latin1')\n      }\n    }\n\n    if (contentLength === null) {\n      socket.write(`\\r\\n${len.toString(16)}\\r\\n`, 'latin1')\n    }\n\n    this.bytesWritten += len\n\n    const ret = socket.write(chunk)\n\n    socket.uncork()\n\n    request.onBodySent(chunk)\n\n    if (!ret) {\n      if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {\n        if (socket[kParser].timeout.refresh) {\n          socket[kParser].timeout.refresh()\n        }\n      }\n    }\n\n    return ret\n  }\n\n  /**\n   * @returns {void}\n   */\n  end () {\n    const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this\n    request.onRequestSent()\n\n    socket[kWriting] = false\n\n    if (socket[kError]) {\n      throw socket[kError]\n    }\n\n    if (socket.destroyed) {\n      return\n    }\n\n    if (bytesWritten === 0) {\n      if (expectsPayload) {\n        // https://tools.ietf.org/html/rfc7230#section-3.3.2\n        // A user agent SHOULD send a Content-Length in a request message when\n        // no Transfer-Encoding is sent and the request method defines a meaning\n        // for an enclosed payload body.\n\n        socket.write(`${header}content-length: 0\\r\\n\\r\\n`, 'latin1')\n      } else {\n        socket.write(`${header}\\r\\n`, 'latin1')\n      }\n    } else if (contentLength === null) {\n      socket.write('\\r\\n0\\r\\n\\r\\n', 'latin1')\n    }\n\n    if (contentLength !== null && bytesWritten !== contentLength) {\n      if (client[kStrictContentLength]) {\n        throw new RequestContentLengthMismatchError()\n      } else {\n        process.emitWarning(new RequestContentLengthMismatchError())\n      }\n    }\n\n    if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {\n      if (socket[kParser].timeout.refresh) {\n        socket[kParser].timeout.refresh()\n      }\n    }\n\n    client[kResume]()\n  }\n\n  /**\n   * @param {Error} [err]\n   * @returns {void}\n   */\n  destroy (err) {\n    const { socket, client, abort } = this\n\n    socket[kWriting] = false\n\n    if (err) {\n      assert(client[kRunning] <= 1, 'pipeline should only contain this request')\n      abort(err)\n    }\n  }\n}\n\nmodule.exports = connectH1\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { pipeline } = require('node:stream')\nconst util = require('../core/util.js')\nconst {\n  RequestContentLengthMismatchError,\n  RequestAbortedError,\n  SocketError,\n  InformationalError,\n  InvalidArgumentError\n} = require('../core/errors.js')\nconst {\n  kUrl,\n  kReset,\n  kClient,\n  kRunning,\n  kPending,\n  kQueue,\n  kPendingIdx,\n  kRunningIdx,\n  kError,\n  kSocket,\n  kStrictContentLength,\n  kOnError,\n  kMaxConcurrentStreams,\n  kPingInterval,\n  kHTTP2Session,\n  kHTTP2InitialWindowSize,\n  kHTTP2ConnectionWindowSize,\n  kResume,\n  kSize,\n  kHTTPContext,\n  kClosed,\n  kBodyTimeout,\n  kEnableConnectProtocol,\n  kRemoteSettings,\n  kHTTP2Stream,\n  kHTTP2SessionState\n} = require('../core/symbols.js')\nconst { channels } = require('../core/diagnostics.js')\n\nconst kOpenStreams = Symbol('open streams')\n\nlet extractBody\n\n/** @type {import('http2')} */\nlet http2\ntry {\n  http2 = require('node:http2')\n} catch {\n  // @ts-ignore\n  http2 = { constants: {} }\n}\n\nconst {\n  constants: {\n    HTTP2_HEADER_AUTHORITY,\n    HTTP2_HEADER_METHOD,\n    HTTP2_HEADER_PATH,\n    HTTP2_HEADER_SCHEME,\n    HTTP2_HEADER_CONTENT_LENGTH,\n    HTTP2_HEADER_EXPECT,\n    HTTP2_HEADER_STATUS,\n    HTTP2_HEADER_PROTOCOL,\n    NGHTTP2_REFUSED_STREAM,\n    NGHTTP2_CANCEL\n  }\n} = http2\n\nfunction parseH2Headers (headers) {\n  const result = []\n\n  for (const [name, value] of Object.entries(headers)) {\n    // h2 may concat the header value by array\n    // e.g. Set-Cookie\n    if (Array.isArray(value)) {\n      for (const subvalue of value) {\n        // we need to provide each header value of header name\n        // because the headers handler expect name-value pair\n        result.push(Buffer.from(name), Buffer.from(subvalue))\n      }\n    } else {\n      result.push(Buffer.from(name), Buffer.from(value))\n    }\n  }\n\n  return result\n}\n\nfunction connectH2 (client, socket) {\n  client[kSocket] = socket\n\n  const http2InitialWindowSize = client[kHTTP2InitialWindowSize]\n  const http2ConnectionWindowSize = client[kHTTP2ConnectionWindowSize]\n\n  const session = http2.connect(client[kUrl], {\n    createConnection: () => socket,\n    peerMaxConcurrentStreams: client[kMaxConcurrentStreams],\n    settings: {\n      // TODO(metcoder95): add support for PUSH\n      enablePush: false,\n      ...(http2InitialWindowSize != null ? { initialWindowSize: http2InitialWindowSize } : null)\n    }\n  })\n\n  client[kSocket] = socket\n  session[kOpenStreams] = 0\n  session[kClient] = client\n  session[kSocket] = socket\n  session[kHTTP2SessionState] = {\n    ping: {\n      interval: client[kPingInterval] === 0 ? null : setInterval(onHttp2SendPing, client[kPingInterval], session).unref()\n    }\n  }\n  // We set it to true by default in a best-effort; however once connected to an H2 server\n  // we will check if extended CONNECT protocol is supported or not\n  // and set this value accordingly.\n  session[kEnableConnectProtocol] = false\n  // States whether or not we have received the remote settings from the server\n  session[kRemoteSettings] = false\n\n  // Apply connection-level flow control once connected (if supported).\n  if (http2ConnectionWindowSize) {\n    util.addListener(session, 'connect', applyConnectionWindowSize.bind(session, http2ConnectionWindowSize))\n  }\n\n  util.addListener(session, 'error', onHttp2SessionError)\n  util.addListener(session, 'frameError', onHttp2FrameError)\n  util.addListener(session, 'end', onHttp2SessionEnd)\n  util.addListener(session, 'goaway', onHttp2SessionGoAway)\n  util.addListener(session, 'close', onHttp2SessionClose)\n  util.addListener(session, 'remoteSettings', onHttp2RemoteSettings)\n  // TODO (@metcoder95): implement SETTINGS support\n  // util.addListener(session, 'localSettings', onHttp2RemoteSettings)\n\n  session.unref()\n\n  client[kHTTP2Session] = session\n  socket[kHTTP2Session] = session\n\n  util.addListener(socket, 'error', onHttp2SocketError)\n  util.addListener(socket, 'end', onHttp2SocketEnd)\n  util.addListener(socket, 'close', onHttp2SocketClose)\n\n  socket[kClosed] = false\n  socket.on('close', onSocketClose)\n\n  return {\n    version: 'h2',\n    defaultPipelining: Infinity,\n    /**\n     * @param {import('../core/request.js')} request\n     * @returns {boolean}\n    */\n    write (request) {\n      return writeH2(client, request)\n    },\n    /**\n     * @returns {void}\n     */\n    resume () {\n      resumeH2(client)\n    },\n    /**\n     * @param {Error | null} err\n     * @param {() => void} callback\n     */\n    destroy (err, callback) {\n      if (socket[kClosed]) {\n        queueMicrotask(callback)\n      } else {\n        socket.destroy(err).on('close', callback)\n      }\n    },\n    /**\n     * @type {boolean}\n     */\n    get destroyed () {\n      return socket.destroyed\n    },\n    /**\n     * @param {import('../core/request.js')} request\n     * @returns {boolean}\n    */\n    busy (request) {\n      if (request != null) {\n        if (client[kRunning] > 0) {\n          // We are already processing requests\n\n          // Non-idempotent request cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          if (request.idempotent === false) return true\n          // Don't dispatch an upgrade until all preceding requests have completed.\n          // Possibly, we do not have remote settings confirmed yet.\n          if ((request.upgrade === 'websocket' || request.method === 'CONNECT') && session[kRemoteSettings] === false) return true\n          // Request with stream or iterator body can error while other requests\n          // are inflight and indirectly error those as well.\n          // Ensure this doesn't happen by waiting for inflight\n          // to complete before dispatching.\n\n          // Request with stream or iterator body cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          if (util.bodyLength(request.body) !== 0 &&\n            (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) return true\n        } else {\n          return (request.upgrade === 'websocket' || request.method === 'CONNECT') && session[kRemoteSettings] === false\n        }\n      }\n\n      return false\n    }\n  }\n}\n\nfunction resumeH2 (client) {\n  const socket = client[kSocket]\n\n  if (socket?.destroyed === false) {\n    if (client[kSize] === 0 || client[kMaxConcurrentStreams] === 0) {\n      socket.unref()\n      client[kHTTP2Session].unref()\n    } else {\n      socket.ref()\n      client[kHTTP2Session].ref()\n    }\n  }\n}\n\nfunction applyConnectionWindowSize (connectionWindowSize) {\n  try {\n    if (typeof this.setLocalWindowSize === 'function') {\n      this.setLocalWindowSize(connectionWindowSize)\n    }\n  } catch {\n    // Best-effort only.\n  }\n}\n\nfunction onHttp2RemoteSettings (settings) {\n  // Fallbacks are a safe bet, remote setting will always override\n  this[kClient][kMaxConcurrentStreams] = settings.maxConcurrentStreams ?? this[kClient][kMaxConcurrentStreams]\n  /**\n   * From RFC-8441\n   * A sender MUST NOT send a SETTINGS_ENABLE_CONNECT_PROTOCOL parameter\n   * with the value of 0 after previously sending a value of 1.\n   */\n  // Note: Cannot be tested in Node, it does not supports disabling the extended CONNECT protocol once enabled\n  if (this[kRemoteSettings] === true && this[kEnableConnectProtocol] === true && settings.enableConnectProtocol === false) {\n    const err = new InformationalError('HTTP/2: Server disabled extended CONNECT protocol against RFC-8441')\n    this[kSocket][kError] = err\n    this[kClient][kOnError](err)\n    return\n  }\n\n  this[kEnableConnectProtocol] = settings.enableConnectProtocol ?? this[kEnableConnectProtocol]\n  this[kRemoteSettings] = true\n  this[kClient][kResume]()\n}\n\nfunction onHttp2SendPing (session) {\n  const state = session[kHTTP2SessionState]\n  if ((session.closed || session.destroyed) && state.ping.interval != null) {\n    clearInterval(state.ping.interval)\n    state.ping.interval = null\n    return\n  }\n\n  // If no ping sent, do nothing\n  session.ping(onPing.bind(session))\n\n  function onPing (err, duration) {\n    const client = this[kClient]\n    const socket = this[kClient]\n\n    if (err != null) {\n      const error = new InformationalError(`HTTP/2: \"PING\" errored - type ${err.message}`)\n      socket[kError] = error\n      client[kOnError](error)\n    } else {\n      client.emit('ping', duration)\n    }\n  }\n}\n\nfunction onHttp2SessionError (err) {\n  assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')\n\n  this[kSocket][kError] = err\n  this[kClient][kOnError](err)\n}\n\nfunction onHttp2FrameError (type, code, id) {\n  if (id === 0) {\n    const err = new InformationalError(`HTTP/2: \"frameError\" received - type ${type}, code ${code}`)\n    this[kSocket][kError] = err\n    this[kClient][kOnError](err)\n  }\n}\n\nfunction onHttp2SessionEnd () {\n  const err = new SocketError('other side closed', util.getSocketInfo(this[kSocket]))\n  this.destroy(err)\n  util.destroy(this[kSocket], err)\n}\n\n/**\n * This is the root cause of #3011\n * We need to handle GOAWAY frames properly, and trigger the session close\n * along with the socket right away\n *\n * @this {import('http2').ClientHttp2Session}\n * @param {number} errorCode\n */\nfunction onHttp2SessionGoAway (errorCode) {\n  // TODO(mcollina): Verify if GOAWAY implements the spec correctly:\n  // https://datatracker.ietf.org/doc/html/rfc7540#section-6.8\n  // Specifically, we do not verify the \"valid\" stream id.\n\n  const err = this[kError] || new SocketError(`HTTP/2: \"GOAWAY\" frame received with code ${errorCode}`, util.getSocketInfo(this[kSocket]))\n  const client = this[kClient]\n\n  client[kSocket] = null\n  client[kHTTPContext] = null\n\n  // this is an HTTP2 session\n  this.close()\n  this[kHTTP2Session] = null\n\n  util.destroy(this[kSocket], err)\n\n  // Fail head of pipeline.\n  if (client[kRunningIdx] < client[kQueue].length) {\n    const request = client[kQueue][client[kRunningIdx]]\n    client[kQueue][client[kRunningIdx]++] = null\n    util.errorRequest(client, request, err)\n    client[kPendingIdx] = client[kRunningIdx]\n  }\n\n  assert(client[kRunning] === 0)\n\n  client.emit('disconnect', client[kUrl], [client], err)\n  client.emit('connectionError', client[kUrl], [client], err)\n\n  client[kResume]()\n}\n\nfunction onHttp2SessionClose () {\n  const { [kClient]: client, [kHTTP2SessionState]: state } = this\n  const { [kSocket]: socket } = client\n\n  const err = this[kSocket][kError] || this[kError] || new SocketError('closed', util.getSocketInfo(socket))\n\n  client[kSocket] = null\n  client[kHTTPContext] = null\n\n  if (state.ping.interval != null) {\n    clearInterval(state.ping.interval)\n    state.ping.interval = null\n  }\n\n  if (client.destroyed) {\n    assert(client[kPending] === 0)\n\n    // Fail entire queue.\n    const requests = client[kQueue].splice(client[kRunningIdx])\n    for (let i = 0; i < requests.length; i++) {\n      const request = requests[i]\n      util.errorRequest(client, request, err)\n    }\n  }\n}\n\nfunction onHttp2SocketClose () {\n  const err = this[kError] || new SocketError('closed', util.getSocketInfo(this))\n\n  const client = this[kHTTP2Session][kClient]\n\n  client[kSocket] = null\n  client[kHTTPContext] = null\n\n  if (this[kHTTP2Session] !== null) {\n    this[kHTTP2Session].destroy(err)\n  }\n\n  client[kPendingIdx] = client[kRunningIdx]\n\n  assert(client[kRunning] === 0)\n\n  client.emit('disconnect', client[kUrl], [client], err)\n\n  client[kResume]()\n}\n\nfunction onHttp2SocketError (err) {\n  assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')\n\n  this[kError] = err\n\n  this[kClient][kOnError](err)\n}\n\nfunction onHttp2SocketEnd () {\n  util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))\n}\n\nfunction onSocketClose () {\n  this[kClosed] = true\n}\n\n// https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2\nfunction shouldSendContentLength (method) {\n  return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT'\n}\n\nfunction writeH2 (client, request) {\n  const requestTimeout = request.bodyTimeout ?? client[kBodyTimeout]\n  const session = client[kHTTP2Session]\n  const { method, path, host, upgrade, expectContinue, signal, protocol, headers: reqHeaders } = request\n  let { body } = request\n\n  if (upgrade != null && upgrade !== 'websocket') {\n    util.errorRequest(client, request, new InvalidArgumentError(`Custom upgrade \"${upgrade}\" not supported over HTTP/2`))\n    return false\n  }\n\n  const headers = {}\n  for (let n = 0; n < reqHeaders.length; n += 2) {\n    const key = reqHeaders[n + 0]\n    const val = reqHeaders[n + 1]\n\n    if (key === 'cookie') {\n      if (headers[key] != null) {\n        headers[key] = Array.isArray(headers[key]) ? (headers[key].push(val), headers[key]) : [headers[key], val]\n      } else {\n        headers[key] = val\n      }\n\n      continue\n    }\n\n    if (Array.isArray(val)) {\n      for (let i = 0; i < val.length; i++) {\n        if (headers[key]) {\n          headers[key] += `, ${val[i]}`\n        } else {\n          headers[key] = val[i]\n        }\n      }\n    } else if (headers[key]) {\n      headers[key] += `, ${val}`\n    } else {\n      headers[key] = val\n    }\n  }\n\n  /** @type {import('node:http2').ClientHttp2Stream} */\n  let stream = null\n\n  const { hostname, port } = client[kUrl]\n\n  headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname}${port ? `:${port}` : ''}`\n  headers[HTTP2_HEADER_METHOD] = method\n\n  const abort = (err) => {\n    if (request.aborted || request.completed) {\n      return\n    }\n\n    err = err || new RequestAbortedError()\n\n    util.errorRequest(client, request, err)\n\n    if (stream != null) {\n      // Some chunks might still come after abort,\n      // let's ignore them\n      stream.removeAllListeners('data')\n\n      // On Abort, we close the stream to send RST_STREAM frame\n      stream.close()\n\n      // We move the running index to the next request\n      client[kOnError](err)\n      client[kResume]()\n    }\n\n    // We do not destroy the socket as we can continue using the session\n    // the stream gets destroyed and the session remains to create new streams\n    util.destroy(body, err)\n  }\n\n  try {\n    // We are already connected, streams are pending.\n    // We can call on connect, and wait for abort\n    request.onConnect(abort)\n  } catch (err) {\n    util.errorRequest(client, request, err)\n  }\n\n  if (request.aborted) {\n    return false\n  }\n\n  if (upgrade || method === 'CONNECT') {\n    session.ref()\n\n    if (upgrade === 'websocket') {\n      // We cannot upgrade to websocket if extended CONNECT protocol is not supported\n      if (session[kEnableConnectProtocol] === false) {\n        util.errorRequest(client, request, new InformationalError('HTTP/2: Extended CONNECT protocol not supported by server'))\n        session.unref()\n        return false\n      }\n\n      // We force the method to CONNECT\n      // as per RFC-8441\n      // https://datatracker.ietf.org/doc/html/rfc8441#section-4\n      headers[HTTP2_HEADER_METHOD] = 'CONNECT'\n      headers[HTTP2_HEADER_PROTOCOL] = 'websocket'\n      // :path and :scheme headers must be omitted when sending CONNECT but set if extended-CONNECT\n      headers[HTTP2_HEADER_PATH] = path\n\n      if (protocol === 'ws:' || protocol === 'wss:') {\n        headers[HTTP2_HEADER_SCHEME] = protocol === 'ws:' ? 'http' : 'https'\n      } else {\n        headers[HTTP2_HEADER_SCHEME] = protocol === 'http:' ? 'http' : 'https'\n      }\n\n      stream = session.request(headers, { endStream: false, signal })\n      stream[kHTTP2Stream] = true\n\n      stream.once('response', (headers, _flags) => {\n        const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers\n\n        request.onUpgrade(statusCode, parseH2Headers(realHeaders), stream)\n\n        ++session[kOpenStreams]\n        client[kQueue][client[kRunningIdx]++] = null\n      })\n\n      stream.on('error', () => {\n        if (stream.rstCode === NGHTTP2_REFUSED_STREAM || stream.rstCode === NGHTTP2_CANCEL) {\n          // NGHTTP2_REFUSED_STREAM (7) or NGHTTP2_CANCEL (8)\n          // We do not treat those as errors as the server might\n          // not support websockets and refuse the stream\n          abort(new InformationalError(`HTTP/2: \"stream error\" received - code ${stream.rstCode}`))\n        }\n      })\n\n      stream.once('close', () => {\n        session[kOpenStreams] -= 1\n        if (session[kOpenStreams] === 0) session.unref()\n      })\n\n      stream.setTimeout(requestTimeout)\n      return true\n    }\n\n    // TODO: consolidate once we support CONNECT properly\n    // NOTE: We are already connected, streams are pending, first request\n    // will create a new stream. We trigger a request to create the stream and wait until\n    // `ready` event is triggered\n    // We disabled endStream to allow the user to write to the stream\n    stream = session.request(headers, { endStream: false, signal })\n    stream[kHTTP2Stream] = true\n    stream.on('response', headers => {\n      const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers\n\n      request.onUpgrade(statusCode, parseH2Headers(realHeaders), stream)\n      ++session[kOpenStreams]\n      client[kQueue][client[kRunningIdx]++] = null\n    })\n    stream.once('close', () => {\n      session[kOpenStreams] -= 1\n      if (session[kOpenStreams] === 0) session.unref()\n    })\n    stream.setTimeout(requestTimeout)\n\n    return true\n  }\n\n  // https://tools.ietf.org/html/rfc7540#section-8.3\n  // :path and :scheme headers must be omitted when sending CONNECT\n  headers[HTTP2_HEADER_PATH] = path\n  headers[HTTP2_HEADER_SCHEME] = protocol === 'http:' ? 'http' : 'https'\n\n  // https://tools.ietf.org/html/rfc7231#section-4.3.1\n  // https://tools.ietf.org/html/rfc7231#section-4.3.2\n  // https://tools.ietf.org/html/rfc7231#section-4.3.5\n\n  // Sending a payload body on a request that does not\n  // expect it can cause undefined behavior on some\n  // servers and corrupt connection state. Do not\n  // re-use the connection for further requests.\n\n  const expectsPayload = (\n    method === 'PUT' ||\n    method === 'POST' ||\n    method === 'PATCH'\n  )\n\n  if (body && typeof body.read === 'function') {\n    // Try to read EOF in order to get length.\n    body.read(0)\n  }\n\n  let contentLength = util.bodyLength(body)\n\n  if (util.isFormDataLike(body)) {\n    extractBody ??= require('../web/fetch/body.js').extractBody\n\n    const [bodyStream, contentType] = extractBody(body)\n    headers['content-type'] = contentType\n\n    body = bodyStream.stream\n    contentLength = bodyStream.length\n  }\n\n  if (contentLength == null) {\n    contentLength = request.contentLength\n  }\n\n  if (!expectsPayload) {\n    // https://tools.ietf.org/html/rfc7230#section-3.3.2\n    // A user agent SHOULD NOT send a Content-Length header field when\n    // the request message does not contain a payload body and the method\n    // semantics do not anticipate such a body.\n    // And for methods that don't expect a payload, omit Content-Length.\n    contentLength = null\n  }\n\n  // https://github.com/nodejs/undici/issues/2046\n  // A user agent may send a Content-Length header with 0 value, this should be allowed.\n  if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) {\n    if (client[kStrictContentLength]) {\n      util.errorRequest(client, request, new RequestContentLengthMismatchError())\n      return false\n    }\n\n    process.emitWarning(new RequestContentLengthMismatchError())\n  }\n\n  if (contentLength != null) {\n    assert(body || contentLength === 0, 'no body must not have content length')\n    headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`\n  }\n\n  session.ref()\n\n  if (channels.sendHeaders.hasSubscribers) {\n    let header = ''\n    for (const key in headers) {\n      header += `${key}: ${headers[key]}\\r\\n`\n    }\n    channels.sendHeaders.publish({ request, headers: header, socket: session[kSocket] })\n  }\n\n  // TODO(metcoder95): add support for sending trailers\n  const shouldEndStream = method === 'GET' || method === 'HEAD' || body === null\n  if (expectContinue) {\n    headers[HTTP2_HEADER_EXPECT] = '100-continue'\n    stream = session.request(headers, { endStream: shouldEndStream, signal })\n    stream[kHTTP2Stream] = true\n\n    stream.once('continue', writeBodyH2)\n  } else {\n    stream = session.request(headers, {\n      endStream: shouldEndStream,\n      signal\n    })\n    stream[kHTTP2Stream] = true\n\n    writeBodyH2()\n  }\n\n  // Increment counter as we have new streams open\n  ++session[kOpenStreams]\n  stream.setTimeout(requestTimeout)\n\n  // Track whether we received a response (headers)\n  let responseReceived = false\n\n  stream.once('response', headers => {\n    const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers\n    request.onResponseStarted()\n    responseReceived = true\n\n    // Due to the stream nature, it is possible we face a race condition\n    // where the stream has been assigned, but the request has been aborted\n    // the request remains in-flight and headers hasn't been received yet\n    // for those scenarios, best effort is to destroy the stream immediately\n    // as there's no value to keep it open.\n    if (request.aborted) {\n      stream.removeAllListeners('data')\n      return\n    }\n\n    if (request.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), '') === false) {\n      stream.pause()\n    }\n\n    stream.on('data', (chunk) => {\n      if (request.aborted || request.completed) {\n        return\n      }\n\n      if (request.onData(chunk) === false) {\n        stream.pause()\n      }\n    })\n  })\n\n  stream.once('end', () => {\n    stream.removeAllListeners('data')\n    // If we received a response, this is a normal completion\n    if (responseReceived) {\n      if (!request.aborted && !request.completed) {\n        request.onComplete({})\n      }\n\n      client[kQueue][client[kRunningIdx]++] = null\n      client[kResume]()\n    } else {\n      // Stream ended without receiving a response - this is an error\n      // (e.g., server destroyed the stream before sending headers)\n      abort(new InformationalError('HTTP/2: stream half-closed (remote)'))\n      client[kQueue][client[kRunningIdx]++] = null\n      client[kPendingIdx] = client[kRunningIdx]\n      client[kResume]()\n    }\n  })\n\n  stream.once('close', () => {\n    stream.removeAllListeners('data')\n    session[kOpenStreams] -= 1\n    if (session[kOpenStreams] === 0) {\n      session.unref()\n    }\n  })\n\n  stream.once('error', function (err) {\n    stream.removeAllListeners('data')\n    abort(err)\n  })\n\n  stream.once('frameError', (type, code) => {\n    stream.removeAllListeners('data')\n    abort(new InformationalError(`HTTP/2: \"frameError\" received - type ${type}, code ${code}`))\n  })\n\n  stream.on('aborted', () => {\n    stream.removeAllListeners('data')\n  })\n\n  stream.on('timeout', () => {\n    const err = new InformationalError(`HTTP/2: \"stream timeout after ${requestTimeout}\"`)\n    stream.removeAllListeners('data')\n    session[kOpenStreams] -= 1\n\n    if (session[kOpenStreams] === 0) {\n      session.unref()\n    }\n\n    abort(err)\n  })\n\n  stream.once('trailers', trailers => {\n    if (request.aborted || request.completed) {\n      return\n    }\n\n    stream.removeAllListeners('data')\n    request.onComplete(trailers)\n  })\n\n  return true\n\n  function writeBodyH2 () {\n    if (!body || contentLength === 0) {\n      writeBuffer(\n        abort,\n        stream,\n        null,\n        client,\n        request,\n        client[kSocket],\n        contentLength,\n        expectsPayload\n      )\n    } else if (util.isBuffer(body)) {\n      writeBuffer(\n        abort,\n        stream,\n        body,\n        client,\n        request,\n        client[kSocket],\n        contentLength,\n        expectsPayload\n      )\n    } else if (util.isBlobLike(body)) {\n      if (typeof body.stream === 'function') {\n        writeIterable(\n          abort,\n          stream,\n          body.stream(),\n          client,\n          request,\n          client[kSocket],\n          contentLength,\n          expectsPayload\n        )\n      } else {\n        writeBlob(\n          abort,\n          stream,\n          body,\n          client,\n          request,\n          client[kSocket],\n          contentLength,\n          expectsPayload\n        )\n      }\n    } else if (util.isStream(body)) {\n      writeStream(\n        abort,\n        client[kSocket],\n        expectsPayload,\n        stream,\n        body,\n        client,\n        request,\n        contentLength\n      )\n    } else if (util.isIterable(body)) {\n      writeIterable(\n        abort,\n        stream,\n        body,\n        client,\n        request,\n        client[kSocket],\n        contentLength,\n        expectsPayload\n      )\n    } else {\n      assert(false)\n    }\n  }\n}\n\nfunction writeBuffer (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {\n  try {\n    if (body != null && util.isBuffer(body)) {\n      assert(contentLength === body.byteLength, 'buffer body must have content length')\n      h2stream.cork()\n      h2stream.write(body)\n      h2stream.uncork()\n      h2stream.end()\n\n      request.onBodySent(body)\n    }\n\n    if (!expectsPayload) {\n      socket[kReset] = true\n    }\n\n    request.onRequestSent()\n    client[kResume]()\n  } catch (error) {\n    abort(error)\n  }\n}\n\nfunction writeStream (abort, socket, expectsPayload, h2stream, body, client, request, contentLength) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined')\n\n  // For HTTP/2, is enough to pipe the stream\n  const pipe = pipeline(\n    body,\n    h2stream,\n    (err) => {\n      if (err) {\n        util.destroy(pipe, err)\n        abort(err)\n      } else {\n        util.removeAllListeners(pipe)\n        request.onRequestSent()\n\n        if (!expectsPayload) {\n          socket[kReset] = true\n        }\n\n        client[kResume]()\n      }\n    }\n  )\n\n  util.addListener(pipe, 'data', onPipeData)\n\n  function onPipeData (chunk) {\n    request.onBodySent(chunk)\n  }\n}\n\nasync function writeBlob (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {\n  assert(contentLength === body.size, 'blob body must have content length')\n\n  try {\n    if (contentLength != null && contentLength !== body.size) {\n      throw new RequestContentLengthMismatchError()\n    }\n\n    const buffer = Buffer.from(await body.arrayBuffer())\n\n    h2stream.cork()\n    h2stream.write(buffer)\n    h2stream.uncork()\n    h2stream.end()\n\n    request.onBodySent(buffer)\n    request.onRequestSent()\n\n    if (!expectsPayload) {\n      socket[kReset] = true\n    }\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  }\n}\n\nasync function writeIterable (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined')\n\n  let callback = null\n  function onDrain () {\n    if (callback) {\n      const cb = callback\n      callback = null\n      cb()\n    }\n  }\n\n  const waitForDrain = () => new Promise((resolve, reject) => {\n    assert(callback === null)\n\n    if (socket[kError]) {\n      reject(socket[kError])\n    } else {\n      callback = resolve\n    }\n  })\n\n  h2stream\n    .on('close', onDrain)\n    .on('drain', onDrain)\n\n  try {\n    // It's up to the user to somehow abort the async iterable.\n    for await (const chunk of body) {\n      if (socket[kError]) {\n        throw socket[kError]\n      }\n\n      const res = h2stream.write(chunk)\n      request.onBodySent(chunk)\n      if (!res) {\n        await waitForDrain()\n      }\n    }\n\n    h2stream.end()\n\n    request.onRequestSent()\n\n    if (!expectsPayload) {\n      socket[kReset] = true\n    }\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  } finally {\n    h2stream\n      .off('close', onDrain)\n      .off('drain', onDrain)\n  }\n}\n\nmodule.exports = connectH2\n", "'use strict'\n\nconst assert = require('node:assert')\nconst net = require('node:net')\nconst http = require('node:http')\nconst util = require('../core/util.js')\nconst { ClientStats } = require('../util/stats.js')\nconst { channels } = require('../core/diagnostics.js')\nconst Request = require('../core/request.js')\nconst DispatcherBase = require('./dispatcher-base')\nconst {\n  InvalidArgumentError,\n  InformationalError,\n  ClientDestroyedError\n} = require('../core/errors.js')\nconst buildConnector = require('../core/connect.js')\nconst {\n  kUrl,\n  kServerName,\n  kClient,\n  kBusy,\n  kConnect,\n  kResuming,\n  kRunning,\n  kPending,\n  kSize,\n  kQueue,\n  kConnected,\n  kConnecting,\n  kNeedDrain,\n  kKeepAliveDefaultTimeout,\n  kHostHeader,\n  kPendingIdx,\n  kRunningIdx,\n  kError,\n  kPipelining,\n  kKeepAliveTimeoutValue,\n  kMaxHeadersSize,\n  kKeepAliveMaxTimeout,\n  kKeepAliveTimeoutThreshold,\n  kHeadersTimeout,\n  kBodyTimeout,\n  kStrictContentLength,\n  kConnector,\n  kMaxRequests,\n  kCounter,\n  kClose,\n  kDestroy,\n  kDispatch,\n  kLocalAddress,\n  kMaxResponseSize,\n  kOnError,\n  kHTTPContext,\n  kMaxConcurrentStreams,\n  kHTTP2InitialWindowSize,\n  kHTTP2ConnectionWindowSize,\n  kResume,\n  kPingInterval\n} = require('../core/symbols.js')\nconst connectH1 = require('./client-h1.js')\nconst connectH2 = require('./client-h2.js')\n\nconst kClosedResolve = Symbol('kClosedResolve')\n\nconst getDefaultNodeMaxHeaderSize = http &&\n  http.maxHeaderSize &&\n  Number.isInteger(http.maxHeaderSize) &&\n  http.maxHeaderSize > 0\n  ? () => http.maxHeaderSize\n  : () => { throw new InvalidArgumentError('http module not available or http.maxHeaderSize invalid') }\n\nconst noop = () => { }\n\nfunction getPipelining (client) {\n  return client[kPipelining] ?? client[kHTTPContext]?.defaultPipelining ?? 1\n}\n\n/**\n * @type {import('../../types/client.js').default}\n */\nclass Client extends DispatcherBase {\n  /**\n   *\n   * @param {string|URL} url\n   * @param {import('../../types/client.js').Client.Options} options\n   */\n  constructor (url, {\n    maxHeaderSize,\n    headersTimeout,\n    socketTimeout,\n    requestTimeout,\n    connectTimeout,\n    bodyTimeout,\n    idleTimeout,\n    keepAlive,\n    keepAliveTimeout,\n    maxKeepAliveTimeout,\n    keepAliveMaxTimeout,\n    keepAliveTimeoutThreshold,\n    socketPath,\n    pipelining,\n    tls,\n    strictContentLength,\n    maxCachedSessions,\n    connect,\n    maxRequestsPerClient,\n    localAddress,\n    maxResponseSize,\n    autoSelectFamily,\n    autoSelectFamilyAttemptTimeout,\n    // h2\n    maxConcurrentStreams,\n    allowH2,\n    useH2c,\n    initialWindowSize,\n    connectionWindowSize,\n    pingInterval\n  } = {}) {\n    if (keepAlive !== undefined) {\n      throw new InvalidArgumentError('unsupported keepAlive, use pipelining=0 instead')\n    }\n\n    if (socketTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported socketTimeout, use headersTimeout & bodyTimeout instead')\n    }\n\n    if (requestTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported requestTimeout, use headersTimeout & bodyTimeout instead')\n    }\n\n    if (idleTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported idleTimeout, use keepAliveTimeout instead')\n    }\n\n    if (maxKeepAliveTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead')\n    }\n\n    if (maxHeaderSize != null) {\n      if (!Number.isInteger(maxHeaderSize) || maxHeaderSize < 1) {\n        throw new InvalidArgumentError('invalid maxHeaderSize')\n      }\n    } else {\n      // If maxHeaderSize is not provided, use the default value from the http module\n      // or if that is not available, throw an error.\n      maxHeaderSize = getDefaultNodeMaxHeaderSize()\n    }\n\n    if (socketPath != null && typeof socketPath !== 'string') {\n      throw new InvalidArgumentError('invalid socketPath')\n    }\n\n    if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) {\n      throw new InvalidArgumentError('invalid connectTimeout')\n    }\n\n    if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) {\n      throw new InvalidArgumentError('invalid keepAliveTimeout')\n    }\n\n    if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) {\n      throw new InvalidArgumentError('invalid keepAliveMaxTimeout')\n    }\n\n    if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) {\n      throw new InvalidArgumentError('invalid keepAliveTimeoutThreshold')\n    }\n\n    if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) {\n      throw new InvalidArgumentError('headersTimeout must be a positive integer or zero')\n    }\n\n    if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) {\n      throw new InvalidArgumentError('bodyTimeout must be a positive integer or zero')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) {\n      throw new InvalidArgumentError('maxRequestsPerClient must be a positive number')\n    }\n\n    if (localAddress != null && (typeof localAddress !== 'string' || net.isIP(localAddress) === 0)) {\n      throw new InvalidArgumentError('localAddress must be valid string IP address')\n    }\n\n    if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) {\n      throw new InvalidArgumentError('maxResponseSize must be a positive number')\n    }\n\n    if (\n      autoSelectFamilyAttemptTimeout != null &&\n      (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1)\n    ) {\n      throw new InvalidArgumentError('autoSelectFamilyAttemptTimeout must be a positive number')\n    }\n\n    // h2\n    if (allowH2 != null && typeof allowH2 !== 'boolean') {\n      throw new InvalidArgumentError('allowH2 must be a valid boolean value')\n    }\n\n    if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== 'number' || maxConcurrentStreams < 1)) {\n      throw new InvalidArgumentError('maxConcurrentStreams must be a positive integer, greater than 0')\n    }\n\n    if (useH2c != null && typeof useH2c !== 'boolean') {\n      throw new InvalidArgumentError('useH2c must be a valid boolean value')\n    }\n\n    if (initialWindowSize != null && (!Number.isInteger(initialWindowSize) || initialWindowSize < 1)) {\n      throw new InvalidArgumentError('initialWindowSize must be a positive integer, greater than 0')\n    }\n\n    if (connectionWindowSize != null && (!Number.isInteger(connectionWindowSize) || connectionWindowSize < 1)) {\n      throw new InvalidArgumentError('connectionWindowSize must be a positive integer, greater than 0')\n    }\n\n    if (pingInterval != null && (typeof pingInterval !== 'number' || !Number.isInteger(pingInterval) || pingInterval < 0)) {\n      throw new InvalidArgumentError('pingInterval must be a positive integer, greater or equal to 0')\n    }\n\n    super()\n\n    if (typeof connect !== 'function') {\n      connect = buildConnector({\n        ...tls,\n        maxCachedSessions,\n        allowH2,\n        useH2c,\n        socketPath,\n        timeout: connectTimeout,\n        ...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),\n        ...connect\n      })\n    } else if (socketPath != null) {\n      const customConnect = connect\n      connect = (opts, callback) => customConnect({ ...opts, socketPath }, callback)\n    }\n\n    this[kUrl] = util.parseOrigin(url)\n    this[kConnector] = connect\n    this[kPipelining] = pipelining != null ? pipelining : 1\n    this[kMaxHeadersSize] = maxHeaderSize\n    this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout\n    this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 600e3 : keepAliveMaxTimeout\n    this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 2e3 : keepAliveTimeoutThreshold\n    this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout]\n    this[kServerName] = null\n    this[kLocalAddress] = localAddress != null ? localAddress : null\n    this[kResuming] = 0 // 0, idle, 1, scheduled, 2 resuming\n    this[kNeedDrain] = 0 // 0, idle, 1, scheduled, 2 resuming\n    this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ''}\\r\\n`\n    this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 300e3\n    this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 300e3\n    this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength\n    this[kMaxRequests] = maxRequestsPerClient\n    this[kClosedResolve] = null\n    this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1\n    this[kHTTPContext] = null\n    // h2\n    this[kMaxConcurrentStreams] = maxConcurrentStreams != null ? maxConcurrentStreams : 100 // Max peerConcurrentStreams for a Node h2 server\n    // HTTP/2 window sizes are set to higher defaults than Node.js core for better performance:\n    // - initialWindowSize: 262144 (256KB) vs Node.js default 65535 (64KB - 1)\n    //   Allows more data to be sent before requiring acknowledgment, improving throughput\n    //   especially on high-latency networks. This matches common production HTTP/2 servers.\n    // - connectionWindowSize: 524288 (512KB) vs Node.js default (none set)\n    //   Provides better flow control for the entire connection across multiple streams.\n    this[kHTTP2InitialWindowSize] = initialWindowSize != null ? initialWindowSize : 262144\n    this[kHTTP2ConnectionWindowSize] = connectionWindowSize != null ? connectionWindowSize : 524288\n    this[kPingInterval] = pingInterval != null ? pingInterval : 60e3 // Default ping interval for h2 - 1 minute\n\n    // kQueue is built up of 3 sections separated by\n    // the kRunningIdx and kPendingIdx indices.\n    // |   complete   |   running   |   pending   |\n    //                ^ kRunningIdx ^ kPendingIdx ^ kQueue.length\n    // kRunningIdx points to the first running element.\n    // kPendingIdx points to the first pending element.\n    // This implements a fast queue with an amortized\n    // time of O(1).\n\n    this[kQueue] = []\n    this[kRunningIdx] = 0\n    this[kPendingIdx] = 0\n\n    this[kResume] = (sync) => resume(this, sync)\n    this[kOnError] = (err) => onError(this, err)\n  }\n\n  get pipelining () {\n    return this[kPipelining]\n  }\n\n  set pipelining (value) {\n    this[kPipelining] = value\n    this[kResume](true)\n  }\n\n  get stats () {\n    return new ClientStats(this)\n  }\n\n  get [kPending] () {\n    return this[kQueue].length - this[kPendingIdx]\n  }\n\n  get [kRunning] () {\n    return this[kPendingIdx] - this[kRunningIdx]\n  }\n\n  get [kSize] () {\n    return this[kQueue].length - this[kRunningIdx]\n  }\n\n  get [kConnected] () {\n    return !!this[kHTTPContext] && !this[kConnecting] && !this[kHTTPContext].destroyed\n  }\n\n  get [kBusy] () {\n    return Boolean(\n      this[kHTTPContext]?.busy(null) ||\n      (this[kSize] >= (getPipelining(this) || 1)) ||\n      this[kPending] > 0\n    )\n  }\n\n  [kConnect] (cb) {\n    connect(this)\n    this.once('connect', cb)\n  }\n\n  [kDispatch] (opts, handler) {\n    const request = new Request(this[kUrl].origin, opts, handler)\n\n    this[kQueue].push(request)\n    if (this[kResuming]) {\n      // Do nothing.\n    } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) {\n      // Wait a tick in case stream/iterator is ended in the same tick.\n      this[kResuming] = 1\n      queueMicrotask(() => resume(this))\n    } else {\n      this[kResume](true)\n    }\n\n    if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) {\n      this[kNeedDrain] = 2\n    }\n\n    return this[kNeedDrain] < 2\n  }\n\n  [kClose] () {\n    // TODO: for H2 we need to gracefully flush the remaining enqueued\n    // request and close each stream.\n    return new Promise((resolve) => {\n      if (this[kSize]) {\n        this[kClosedResolve] = resolve\n      } else {\n        resolve(null)\n      }\n    })\n  }\n\n  [kDestroy] (err) {\n    return new Promise((resolve) => {\n      const requests = this[kQueue].splice(this[kPendingIdx])\n      for (let i = 0; i < requests.length; i++) {\n        const request = requests[i]\n        util.errorRequest(this, request, err)\n      }\n\n      const callback = () => {\n        if (this[kClosedResolve]) {\n          // TODO (fix): Should we error here with ClientDestroyedError?\n          this[kClosedResolve]()\n          this[kClosedResolve] = null\n        }\n        resolve(null)\n      }\n\n      if (this[kHTTPContext]) {\n        this[kHTTPContext].destroy(err, callback)\n        this[kHTTPContext] = null\n      } else {\n        queueMicrotask(callback)\n      }\n\n      this[kResume]()\n    })\n  }\n}\n\nfunction onError (client, err) {\n  if (\n    client[kRunning] === 0 &&\n    err.code !== 'UND_ERR_INFO' &&\n    err.code !== 'UND_ERR_SOCKET'\n  ) {\n    // Error is not caused by running request and not a recoverable\n    // socket error.\n\n    assert(client[kPendingIdx] === client[kRunningIdx])\n\n    const requests = client[kQueue].splice(client[kRunningIdx])\n\n    for (let i = 0; i < requests.length; i++) {\n      const request = requests[i]\n      util.errorRequest(client, request, err)\n    }\n    assert(client[kSize] === 0)\n  }\n}\n\n/**\n * @param {Client} client\n * @returns {void}\n */\nfunction connect (client) {\n  assert(!client[kConnecting])\n  assert(!client[kHTTPContext])\n\n  let { host, hostname, protocol, port } = client[kUrl]\n\n  // Resolve ipv6\n  if (hostname[0] === '[') {\n    const idx = hostname.indexOf(']')\n\n    assert(idx !== -1)\n    const ip = hostname.substring(1, idx)\n\n    assert(net.isIPv6(ip))\n    hostname = ip\n  }\n\n  client[kConnecting] = true\n\n  if (channels.beforeConnect.hasSubscribers) {\n    channels.beforeConnect.publish({\n      connectParams: {\n        host,\n        hostname,\n        protocol,\n        port,\n        version: client[kHTTPContext]?.version,\n        servername: client[kServerName],\n        localAddress: client[kLocalAddress]\n      },\n      connector: client[kConnector]\n    })\n  }\n\n  try {\n    client[kConnector]({\n      host,\n      hostname,\n      protocol,\n      port,\n      servername: client[kServerName],\n      localAddress: client[kLocalAddress]\n    }, (err, socket) => {\n      if (err) {\n        handleConnectError(client, err, { host, hostname, protocol, port })\n        client[kResume]()\n        return\n      }\n\n      if (client.destroyed) {\n        util.destroy(socket.on('error', noop), new ClientDestroyedError())\n        client[kResume]()\n        return\n      }\n\n      assert(socket)\n\n      try {\n        client[kHTTPContext] = socket.alpnProtocol === 'h2'\n          ? connectH2(client, socket)\n          : connectH1(client, socket)\n      } catch (err) {\n        socket.destroy().on('error', noop)\n        handleConnectError(client, err, { host, hostname, protocol, port })\n        client[kResume]()\n        return\n      }\n\n      client[kConnecting] = false\n\n      socket[kCounter] = 0\n      socket[kMaxRequests] = client[kMaxRequests]\n      socket[kClient] = client\n      socket[kError] = null\n\n      if (channels.connected.hasSubscribers) {\n        channels.connected.publish({\n          connectParams: {\n            host,\n            hostname,\n            protocol,\n            port,\n            version: client[kHTTPContext]?.version,\n            servername: client[kServerName],\n            localAddress: client[kLocalAddress]\n          },\n          connector: client[kConnector],\n          socket\n        })\n      }\n\n      client.emit('connect', client[kUrl], [client])\n      client[kResume]()\n    })\n  } catch (err) {\n    handleConnectError(client, err, { host, hostname, protocol, port })\n    client[kResume]()\n  }\n}\n\nfunction handleConnectError (client, err, { host, hostname, protocol, port }) {\n  if (client.destroyed) {\n    return\n  }\n\n  client[kConnecting] = false\n\n  if (channels.connectError.hasSubscribers) {\n    channels.connectError.publish({\n      connectParams: {\n        host,\n        hostname,\n        protocol,\n        port,\n        version: client[kHTTPContext]?.version,\n        servername: client[kServerName],\n        localAddress: client[kLocalAddress]\n      },\n      connector: client[kConnector],\n      error: err\n    })\n  }\n\n  if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') {\n    assert(client[kRunning] === 0)\n    while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) {\n      const request = client[kQueue][client[kPendingIdx]++]\n      util.errorRequest(client, request, err)\n    }\n  } else {\n    onError(client, err)\n  }\n\n  client.emit('connectionError', client[kUrl], [client], err)\n}\n\nfunction emitDrain (client) {\n  client[kNeedDrain] = 0\n  client.emit('drain', client[kUrl], [client])\n}\n\nfunction resume (client, sync) {\n  if (client[kResuming] === 2) {\n    return\n  }\n\n  client[kResuming] = 2\n\n  _resume(client, sync)\n  client[kResuming] = 0\n\n  if (client[kRunningIdx] > 256) {\n    client[kQueue].splice(0, client[kRunningIdx])\n    client[kPendingIdx] -= client[kRunningIdx]\n    client[kRunningIdx] = 0\n  }\n}\n\nfunction _resume (client, sync) {\n  while (true) {\n    if (client.destroyed) {\n      assert(client[kPending] === 0)\n      return\n    }\n\n    if (client[kClosedResolve] && !client[kSize]) {\n      client[kClosedResolve]()\n      client[kClosedResolve] = null\n      return\n    }\n\n    if (client[kHTTPContext]) {\n      client[kHTTPContext].resume()\n    }\n\n    if (client[kBusy]) {\n      client[kNeedDrain] = 2\n    } else if (client[kNeedDrain] === 2) {\n      if (sync) {\n        client[kNeedDrain] = 1\n        queueMicrotask(() => emitDrain(client))\n      } else {\n        emitDrain(client)\n      }\n      continue\n    }\n\n    if (client[kPending] === 0) {\n      return\n    }\n\n    if (client[kRunning] >= (getPipelining(client) || 1)) {\n      return\n    }\n\n    const request = client[kQueue][client[kPendingIdx]]\n\n    if (request === null) {\n      return\n    }\n\n    if (client[kUrl].protocol === 'https:' && client[kServerName] !== request.servername) {\n      if (client[kRunning] > 0) {\n        return\n      }\n\n      client[kServerName] = request.servername\n      client[kHTTPContext]?.destroy(new InformationalError('servername changed'), () => {\n        client[kHTTPContext] = null\n        resume(client)\n      })\n    }\n\n    if (client[kConnecting]) {\n      return\n    }\n\n    if (!client[kHTTPContext]) {\n      connect(client)\n      return\n    }\n\n    if (client[kHTTPContext].destroyed) {\n      return\n    }\n\n    if (client[kHTTPContext].busy(request)) {\n      return\n    }\n\n    if (!request.aborted && client[kHTTPContext].write(request)) {\n      client[kPendingIdx]++\n    } else {\n      client[kQueue].splice(client[kPendingIdx], 1)\n    }\n  }\n}\n\nmodule.exports = Client\n", "'use strict'\n\n// Extracted from node/lib/internal/fixed_queue.js\n\n// Currently optimal queue size, tested on V8 6.0 - 6.6. Must be power of two.\nconst kSize = 2048\nconst kMask = kSize - 1\n\n// The FixedQueue is implemented as a singly-linked list of fixed-size\n// circular buffers. It looks something like this:\n//\n//  head                                                       tail\n//    |                                                          |\n//    v                                                          v\n// +-----------+ <-----\\       +-----------+ <------\\         +-----------+\n// |  [null]   |        \\----- |   next    |         \\------- |   next    |\n// +-----------+               +-----------+                  +-----------+\n// |   item    | <-- bottom    |   item    | <-- bottom       | undefined |\n// |   item    |               |   item    |                  | undefined |\n// |   item    |               |   item    |                  | undefined |\n// |   item    |               |   item    |                  | undefined |\n// |   item    |               |   item    |       bottom --> |   item    |\n// |   item    |               |   item    |                  |   item    |\n// |    ...    |               |    ...    |                  |    ...    |\n// |   item    |               |   item    |                  |   item    |\n// |   item    |               |   item    |                  |   item    |\n// | undefined | <-- top       |   item    |                  |   item    |\n// | undefined |               |   item    |                  |   item    |\n// | undefined |               | undefined | <-- top  top --> | undefined |\n// +-----------+               +-----------+                  +-----------+\n//\n// Or, if there is only one circular buffer, it looks something\n// like either of these:\n//\n//  head   tail                                 head   tail\n//    |     |                                     |     |\n//    v     v                                     v     v\n// +-----------+                               +-----------+\n// |  [null]   |                               |  [null]   |\n// +-----------+                               +-----------+\n// | undefined |                               |   item    |\n// | undefined |                               |   item    |\n// |   item    | <-- bottom            top --> | undefined |\n// |   item    |                               | undefined |\n// | undefined | <-- top            bottom --> |   item    |\n// | undefined |                               |   item    |\n// +-----------+                               +-----------+\n//\n// Adding a value means moving `top` forward by one, removing means\n// moving `bottom` forward by one. After reaching the end, the queue\n// wraps around.\n//\n// When `top === bottom` the current queue is empty and when\n// `top + 1 === bottom` it's full. This wastes a single space of storage\n// but allows much quicker checks.\n\n/**\n * @type {FixedCircularBuffer}\n * @template T\n */\nclass FixedCircularBuffer {\n  /** @type {number} */\n  bottom = 0\n  /** @type {number} */\n  top = 0\n  /** @type {Array<T|undefined>} */\n  list = new Array(kSize).fill(undefined)\n  /** @type {T|null} */\n  next = null\n\n  /** @returns {boolean} */\n  isEmpty () {\n    return this.top === this.bottom\n  }\n\n  /** @returns {boolean} */\n  isFull () {\n    return ((this.top + 1) & kMask) === this.bottom\n  }\n\n  /**\n   * @param {T} data\n   * @returns {void}\n   */\n  push (data) {\n    this.list[this.top] = data\n    this.top = (this.top + 1) & kMask\n  }\n\n  /** @returns {T|null} */\n  shift () {\n    const nextItem = this.list[this.bottom]\n    if (nextItem === undefined) { return null }\n    this.list[this.bottom] = undefined\n    this.bottom = (this.bottom + 1) & kMask\n    return nextItem\n  }\n}\n\n/**\n * @template T\n */\nmodule.exports = class FixedQueue {\n  constructor () {\n    /** @type {FixedCircularBuffer<T>} */\n    this.head = this.tail = new FixedCircularBuffer()\n  }\n\n  /** @returns {boolean} */\n  isEmpty () {\n    return this.head.isEmpty()\n  }\n\n  /** @param {T} data */\n  push (data) {\n    if (this.head.isFull()) {\n      // Head is full: Creates a new queue, sets the old queue's `.next` to it,\n      // and sets it as the new main queue.\n      this.head = this.head.next = new FixedCircularBuffer()\n    }\n    this.head.push(data)\n  }\n\n  /** @returns {T|null} */\n  shift () {\n    const tail = this.tail\n    const next = tail.shift()\n    if (tail.isEmpty() && tail.next !== null) {\n      // If there is another queue, it forms the new tail.\n      this.tail = tail.next\n      tail.next = null\n    }\n    return next\n  }\n}\n", "'use strict'\n\nconst { PoolStats } = require('../util/stats.js')\nconst DispatcherBase = require('./dispatcher-base')\nconst FixedQueue = require('./fixed-queue')\nconst { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require('../core/symbols')\n\nconst kClients = Symbol('clients')\nconst kNeedDrain = Symbol('needDrain')\nconst kQueue = Symbol('queue')\nconst kClosedResolve = Symbol('closed resolve')\nconst kOnDrain = Symbol('onDrain')\nconst kOnConnect = Symbol('onConnect')\nconst kOnDisconnect = Symbol('onDisconnect')\nconst kOnConnectionError = Symbol('onConnectionError')\nconst kGetDispatcher = Symbol('get dispatcher')\nconst kAddClient = Symbol('add client')\nconst kRemoveClient = Symbol('remove client')\n\nclass PoolBase extends DispatcherBase {\n  [kQueue] = new FixedQueue();\n\n  [kQueued] = 0;\n\n  [kClients] = [];\n\n  [kNeedDrain] = false;\n\n  [kOnDrain] (client, origin, targets) {\n    const queue = this[kQueue]\n\n    let needDrain = false\n\n    while (!needDrain) {\n      const item = queue.shift()\n      if (!item) {\n        break\n      }\n      this[kQueued]--\n      needDrain = !client.dispatch(item.opts, item.handler)\n    }\n\n    client[kNeedDrain] = needDrain\n\n    if (!needDrain && this[kNeedDrain]) {\n      this[kNeedDrain] = false\n      this.emit('drain', origin, [this, ...targets])\n    }\n\n    if (this[kClosedResolve] && queue.isEmpty()) {\n      const closeAll = []\n      for (let i = 0; i < this[kClients].length; i++) {\n        const client = this[kClients][i]\n        if (!client.destroyed) {\n          closeAll.push(client.close())\n        }\n      }\n      return Promise.all(closeAll)\n        .then(this[kClosedResolve])\n    }\n  }\n\n  [kOnConnect] = (origin, targets) => {\n    this.emit('connect', origin, [this, ...targets])\n  };\n\n  [kOnDisconnect] = (origin, targets, err) => {\n    this.emit('disconnect', origin, [this, ...targets], err)\n  };\n\n  [kOnConnectionError] = (origin, targets, err) => {\n    this.emit('connectionError', origin, [this, ...targets], err)\n  }\n\n  get [kBusy] () {\n    return this[kNeedDrain]\n  }\n\n  get [kConnected] () {\n    let ret = 0\n    for (const { [kConnected]: connected } of this[kClients]) {\n      ret += connected\n    }\n    return ret\n  }\n\n  get [kFree] () {\n    let ret = 0\n    for (const { [kConnected]: connected, [kNeedDrain]: needDrain } of this[kClients]) {\n      ret += connected && !needDrain\n    }\n    return ret\n  }\n\n  get [kPending] () {\n    let ret = this[kQueued]\n    for (const { [kPending]: pending } of this[kClients]) {\n      ret += pending\n    }\n    return ret\n  }\n\n  get [kRunning] () {\n    let ret = 0\n    for (const { [kRunning]: running } of this[kClients]) {\n      ret += running\n    }\n    return ret\n  }\n\n  get [kSize] () {\n    let ret = this[kQueued]\n    for (const { [kSize]: size } of this[kClients]) {\n      ret += size\n    }\n    return ret\n  }\n\n  get stats () {\n    return new PoolStats(this)\n  }\n\n  [kClose] () {\n    if (this[kQueue].isEmpty()) {\n      const closeAll = []\n      for (let i = 0; i < this[kClients].length; i++) {\n        const client = this[kClients][i]\n        if (!client.destroyed) {\n          closeAll.push(client.close())\n        }\n      }\n      return Promise.all(closeAll)\n    } else {\n      return new Promise((resolve) => {\n        this[kClosedResolve] = resolve\n      })\n    }\n  }\n\n  [kDestroy] (err) {\n    while (true) {\n      const item = this[kQueue].shift()\n      if (!item) {\n        break\n      }\n      item.handler.onError(err)\n    }\n\n    const destroyAll = new Array(this[kClients].length)\n    for (let i = 0; i < this[kClients].length; i++) {\n      destroyAll[i] = this[kClients][i].destroy(err)\n    }\n    return Promise.all(destroyAll)\n  }\n\n  [kDispatch] (opts, handler) {\n    const dispatcher = this[kGetDispatcher]()\n\n    if (!dispatcher) {\n      this[kNeedDrain] = true\n      this[kQueue].push({ opts, handler })\n      this[kQueued]++\n    } else if (!dispatcher.dispatch(opts, handler)) {\n      dispatcher[kNeedDrain] = true\n      this[kNeedDrain] = !this[kGetDispatcher]()\n    }\n\n    return !this[kNeedDrain]\n  }\n\n  [kAddClient] (client) {\n    client\n      .on('drain', this[kOnDrain].bind(this, client))\n      .on('connect', this[kOnConnect])\n      .on('disconnect', this[kOnDisconnect])\n      .on('connectionError', this[kOnConnectionError])\n\n    this[kClients].push(client)\n\n    if (this[kNeedDrain]) {\n      queueMicrotask(() => {\n        if (this[kNeedDrain]) {\n          this[kOnDrain](client, client[kUrl], [client, this])\n        }\n      })\n    }\n\n    return this\n  }\n\n  [kRemoveClient] (client) {\n    client.close(() => {\n      const idx = this[kClients].indexOf(client)\n      if (idx !== -1) {\n        this[kClients].splice(idx, 1)\n      }\n    })\n\n    this[kNeedDrain] = this[kClients].some(dispatcher => (\n      !dispatcher[kNeedDrain] &&\n      dispatcher.closed !== true &&\n      dispatcher.destroyed !== true\n    ))\n  }\n}\n\nmodule.exports = {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kRemoveClient,\n  kGetDispatcher\n}\n", "'use strict'\n\nconst {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kGetDispatcher,\n  kRemoveClient\n} = require('./pool-base')\nconst Client = require('./client')\nconst {\n  InvalidArgumentError\n} = require('../core/errors')\nconst util = require('../core/util')\nconst { kUrl } = require('../core/symbols')\nconst buildConnector = require('../core/connect')\n\nconst kOptions = Symbol('options')\nconst kConnections = Symbol('connections')\nconst kFactory = Symbol('factory')\n\nfunction defaultFactory (origin, opts) {\n  return new Client(origin, opts)\n}\n\nclass Pool extends PoolBase {\n  constructor (origin, {\n    connections,\n    factory = defaultFactory,\n    connect,\n    connectTimeout,\n    tls,\n    maxCachedSessions,\n    socketPath,\n    autoSelectFamily,\n    autoSelectFamilyAttemptTimeout,\n    allowH2,\n    clientTtl,\n    ...options\n  } = {}) {\n    if (connections != null && (!Number.isFinite(connections) || connections < 0)) {\n      throw new InvalidArgumentError('invalid connections')\n    }\n\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (typeof connect !== 'function') {\n      connect = buildConnector({\n        ...tls,\n        maxCachedSessions,\n        allowH2,\n        socketPath,\n        timeout: connectTimeout,\n        ...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),\n        ...connect\n      })\n    }\n\n    super()\n\n    this[kConnections] = connections || null\n    this[kUrl] = util.parseOrigin(origin)\n    this[kOptions] = { ...util.deepClone(options), connect, allowH2, clientTtl, socketPath }\n    this[kOptions].interceptors = options.interceptors\n      ? { ...options.interceptors }\n      : undefined\n    this[kFactory] = factory\n\n    this.on('connect', (origin, targets) => {\n      if (clientTtl != null && clientTtl > 0) {\n        for (const target of targets) {\n          Object.assign(target, { ttl: Date.now() })\n        }\n      }\n    })\n\n    this.on('connectionError', (origin, targets, error) => {\n      // If a connection error occurs, we remove the client from the pool,\n      // and emit a connectionError event. They will not be re-used.\n      // Fixes https://github.com/nodejs/undici/issues/3895\n      for (const target of targets) {\n        // Do not use kRemoveClient here, as it will close the client,\n        // but the client cannot be closed in this state.\n        const idx = this[kClients].indexOf(target)\n        if (idx !== -1) {\n          this[kClients].splice(idx, 1)\n        }\n      }\n    })\n  }\n\n  [kGetDispatcher] () {\n    const clientTtlOption = this[kOptions].clientTtl\n    for (const client of this[kClients]) {\n      // check ttl of client and if it's stale, remove it from the pool\n      if (clientTtlOption != null && clientTtlOption > 0 && client.ttl && ((Date.now() - client.ttl) > clientTtlOption)) {\n        this[kRemoveClient](client)\n      } else if (!client[kNeedDrain]) {\n        return client\n      }\n    }\n\n    if (!this[kConnections] || this[kClients].length < this[kConnections]) {\n      const dispatcher = this[kFactory](this[kUrl], this[kOptions])\n      this[kAddClient](dispatcher)\n      return dispatcher\n    }\n  }\n}\n\nmodule.exports = Pool\n", "'use strict'\n\nconst {\n  BalancedPoolMissingUpstreamError,\n  InvalidArgumentError\n} = require('../core/errors')\nconst {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kRemoveClient,\n  kGetDispatcher\n} = require('./pool-base')\nconst Pool = require('./pool')\nconst { kUrl } = require('../core/symbols')\nconst util = require('../core/util')\nconst kFactory = Symbol('factory')\n\nconst kOptions = Symbol('options')\nconst kGreatestCommonDivisor = Symbol('kGreatestCommonDivisor')\nconst kCurrentWeight = Symbol('kCurrentWeight')\nconst kIndex = Symbol('kIndex')\nconst kWeight = Symbol('kWeight')\nconst kMaxWeightPerServer = Symbol('kMaxWeightPerServer')\nconst kErrorPenalty = Symbol('kErrorPenalty')\n\n/**\n * Calculate the greatest common divisor of two numbers by\n * using the Euclidean algorithm.\n *\n * @param {number} a\n * @param {number} b\n * @returns {number}\n */\nfunction getGreatestCommonDivisor (a, b) {\n  if (a === 0) return b\n\n  while (b !== 0) {\n    const t = b\n    b = a % b\n    a = t\n  }\n  return a\n}\n\nfunction defaultFactory (origin, opts) {\n  return new Pool(origin, opts)\n}\n\nclass BalancedPool extends PoolBase {\n  constructor (upstreams = [], { factory = defaultFactory, ...opts } = {}) {\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    super()\n\n    this[kOptions] = { ...util.deepClone(opts) }\n    this[kOptions].interceptors = opts.interceptors\n      ? { ...opts.interceptors }\n      : undefined\n    this[kIndex] = -1\n    this[kCurrentWeight] = 0\n\n    this[kMaxWeightPerServer] = this[kOptions].maxWeightPerServer || 100\n    this[kErrorPenalty] = this[kOptions].errorPenalty || 15\n\n    if (!Array.isArray(upstreams)) {\n      upstreams = [upstreams]\n    }\n\n    this[kFactory] = factory\n\n    for (const upstream of upstreams) {\n      this.addUpstream(upstream)\n    }\n    this._updateBalancedPoolStats()\n  }\n\n  addUpstream (upstream) {\n    const upstreamOrigin = util.parseOrigin(upstream).origin\n\n    if (this[kClients].find((pool) => (\n      pool[kUrl].origin === upstreamOrigin &&\n      pool.closed !== true &&\n      pool.destroyed !== true\n    ))) {\n      return this\n    }\n    const pool = this[kFactory](upstreamOrigin, this[kOptions])\n\n    this[kAddClient](pool)\n    pool.on('connect', () => {\n      pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty])\n    })\n\n    pool.on('connectionError', () => {\n      pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty])\n      this._updateBalancedPoolStats()\n    })\n\n    pool.on('disconnect', (...args) => {\n      const err = args[2]\n      if (err && err.code === 'UND_ERR_SOCKET') {\n        // decrease the weight of the pool.\n        pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty])\n        this._updateBalancedPoolStats()\n      }\n    })\n\n    for (const client of this[kClients]) {\n      client[kWeight] = this[kMaxWeightPerServer]\n    }\n\n    this._updateBalancedPoolStats()\n\n    return this\n  }\n\n  _updateBalancedPoolStats () {\n    let result = 0\n    for (let i = 0; i < this[kClients].length; i++) {\n      result = getGreatestCommonDivisor(this[kClients][i][kWeight], result)\n    }\n\n    this[kGreatestCommonDivisor] = result\n  }\n\n  removeUpstream (upstream) {\n    const upstreamOrigin = util.parseOrigin(upstream).origin\n\n    const pool = this[kClients].find((pool) => (\n      pool[kUrl].origin === upstreamOrigin &&\n      pool.closed !== true &&\n      pool.destroyed !== true\n    ))\n\n    if (pool) {\n      this[kRemoveClient](pool)\n    }\n\n    return this\n  }\n\n  getUpstream (upstream) {\n    const upstreamOrigin = util.parseOrigin(upstream).origin\n\n    return this[kClients].find((pool) => (\n      pool[kUrl].origin === upstreamOrigin &&\n      pool.closed !== true &&\n      pool.destroyed !== true\n    ))\n  }\n\n  get upstreams () {\n    return this[kClients]\n      .filter(dispatcher => dispatcher.closed !== true && dispatcher.destroyed !== true)\n      .map((p) => p[kUrl].origin)\n  }\n\n  [kGetDispatcher] () {\n    // We validate that pools is greater than 0,\n    // otherwise we would have to wait until an upstream\n    // is added, which might never happen.\n    if (this[kClients].length === 0) {\n      throw new BalancedPoolMissingUpstreamError()\n    }\n\n    const dispatcher = this[kClients].find(dispatcher => (\n      !dispatcher[kNeedDrain] &&\n      dispatcher.closed !== true &&\n      dispatcher.destroyed !== true\n    ))\n\n    if (!dispatcher) {\n      return\n    }\n\n    const allClientsBusy = this[kClients].map(pool => pool[kNeedDrain]).reduce((a, b) => a && b, true)\n\n    if (allClientsBusy) {\n      return\n    }\n\n    let counter = 0\n\n    let maxWeightIndex = this[kClients].findIndex(pool => !pool[kNeedDrain])\n\n    while (counter++ < this[kClients].length) {\n      this[kIndex] = (this[kIndex] + 1) % this[kClients].length\n      const pool = this[kClients][this[kIndex]]\n\n      // find pool index with the largest weight\n      if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) {\n        maxWeightIndex = this[kIndex]\n      }\n\n      // decrease the current weight every `this[kClients].length`.\n      if (this[kIndex] === 0) {\n        // Set the current weight to the next lower weight.\n        this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor]\n\n        if (this[kCurrentWeight] <= 0) {\n          this[kCurrentWeight] = this[kMaxWeightPerServer]\n        }\n      }\n      if (pool[kWeight] >= this[kCurrentWeight] && (!pool[kNeedDrain])) {\n        return pool\n      }\n    }\n\n    this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight]\n    this[kIndex] = maxWeightIndex\n    return this[kClients][maxWeightIndex]\n  }\n}\n\nmodule.exports = BalancedPool\n", "'use strict'\n\nconst {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kGetDispatcher,\n  kRemoveClient\n} = require('./pool-base')\nconst Client = require('./client')\nconst {\n  InvalidArgumentError\n} = require('../core/errors')\nconst util = require('../core/util')\nconst { kUrl } = require('../core/symbols')\nconst buildConnector = require('../core/connect')\n\nconst kOptions = Symbol('options')\nconst kConnections = Symbol('connections')\nconst kFactory = Symbol('factory')\nconst kIndex = Symbol('index')\n\nfunction defaultFactory (origin, opts) {\n  return new Client(origin, opts)\n}\n\nclass RoundRobinPool extends PoolBase {\n  constructor (origin, {\n    connections,\n    factory = defaultFactory,\n    connect,\n    connectTimeout,\n    tls,\n    maxCachedSessions,\n    socketPath,\n    autoSelectFamily,\n    autoSelectFamilyAttemptTimeout,\n    allowH2,\n    clientTtl,\n    ...options\n  } = {}) {\n    if (connections != null && (!Number.isFinite(connections) || connections < 0)) {\n      throw new InvalidArgumentError('invalid connections')\n    }\n\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (typeof connect !== 'function') {\n      connect = buildConnector({\n        ...tls,\n        maxCachedSessions,\n        allowH2,\n        socketPath,\n        timeout: connectTimeout,\n        ...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),\n        ...connect\n      })\n    }\n\n    super()\n\n    this[kConnections] = connections || null\n    this[kUrl] = util.parseOrigin(origin)\n    this[kOptions] = { ...util.deepClone(options), connect, allowH2, clientTtl, socketPath }\n    this[kOptions].interceptors = options.interceptors\n      ? { ...options.interceptors }\n      : undefined\n    this[kFactory] = factory\n    this[kIndex] = -1\n\n    this.on('connect', (origin, targets) => {\n      if (clientTtl != null && clientTtl > 0) {\n        for (const target of targets) {\n          Object.assign(target, { ttl: Date.now() })\n        }\n      }\n    })\n\n    this.on('connectionError', (origin, targets, error) => {\n      for (const target of targets) {\n        const idx = this[kClients].indexOf(target)\n        if (idx !== -1) {\n          this[kClients].splice(idx, 1)\n        }\n      }\n    })\n  }\n\n  [kGetDispatcher] () {\n    const clientTtlOption = this[kOptions].clientTtl\n    const clientsLength = this[kClients].length\n\n    // If we have no clients yet, create one\n    if (clientsLength === 0) {\n      const dispatcher = this[kFactory](this[kUrl], this[kOptions])\n      this[kAddClient](dispatcher)\n      return dispatcher\n    }\n\n    // Round-robin through existing clients\n    let checked = 0\n    while (checked < clientsLength) {\n      this[kIndex] = (this[kIndex] + 1) % clientsLength\n      const client = this[kClients][this[kIndex]]\n\n      // Check if client is stale (TTL expired)\n      if (clientTtlOption != null && clientTtlOption > 0 && client.ttl && ((Date.now() - client.ttl) > clientTtlOption)) {\n        this[kRemoveClient](client)\n        checked++\n        continue\n      }\n\n      // Return client if it's not draining\n      if (!client[kNeedDrain]) {\n        return client\n      }\n\n      checked++\n    }\n\n    // All clients are busy, create a new one if we haven't reached the limit\n    if (!this[kConnections] || clientsLength < this[kConnections]) {\n      const dispatcher = this[kFactory](this[kUrl], this[kOptions])\n      this[kAddClient](dispatcher)\n      return dispatcher\n    }\n  }\n}\n\nmodule.exports = RoundRobinPool\n", "'use strict'\n\nconst { InvalidArgumentError, MaxOriginsReachedError } = require('../core/errors')\nconst { kClients, kRunning, kClose, kDestroy, kDispatch, kUrl } = require('../core/symbols')\nconst DispatcherBase = require('./dispatcher-base')\nconst Pool = require('./pool')\nconst Client = require('./client')\nconst util = require('../core/util')\n\nconst kOnConnect = Symbol('onConnect')\nconst kOnDisconnect = Symbol('onDisconnect')\nconst kOnConnectionError = Symbol('onConnectionError')\nconst kOnDrain = Symbol('onDrain')\nconst kFactory = Symbol('factory')\nconst kOptions = Symbol('options')\nconst kOrigins = Symbol('origins')\n\nfunction defaultFactory (origin, opts) {\n  return opts && opts.connections === 1\n    ? new Client(origin, opts)\n    : new Pool(origin, opts)\n}\n\nclass Agent extends DispatcherBase {\n  constructor ({ factory = defaultFactory, maxOrigins = Infinity, connect, ...options } = {}) {\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (typeof maxOrigins !== 'number' || Number.isNaN(maxOrigins) || maxOrigins <= 0) {\n      throw new InvalidArgumentError('maxOrigins must be a number greater than 0')\n    }\n\n    super()\n\n    if (connect && typeof connect !== 'function') {\n      connect = { ...connect }\n    }\n\n    this[kOptions] = { ...util.deepClone(options), maxOrigins, connect }\n    this[kFactory] = factory\n    this[kClients] = new Map()\n    this[kOrigins] = new Set()\n\n    this[kOnDrain] = (origin, targets) => {\n      this.emit('drain', origin, [this, ...targets])\n    }\n\n    this[kOnConnect] = (origin, targets) => {\n      this.emit('connect', origin, [this, ...targets])\n    }\n\n    this[kOnDisconnect] = (origin, targets, err) => {\n      this.emit('disconnect', origin, [this, ...targets], err)\n    }\n\n    this[kOnConnectionError] = (origin, targets, err) => {\n      this.emit('connectionError', origin, [this, ...targets], err)\n    }\n  }\n\n  get [kRunning] () {\n    let ret = 0\n    for (const { dispatcher } of this[kClients].values()) {\n      ret += dispatcher[kRunning]\n    }\n    return ret\n  }\n\n  [kDispatch] (opts, handler) {\n    let key\n    if (opts.origin && (typeof opts.origin === 'string' || opts.origin instanceof URL)) {\n      key = String(opts.origin)\n    } else {\n      throw new InvalidArgumentError('opts.origin must be a non-empty string or URL.')\n    }\n\n    if (this[kOrigins].size >= this[kOptions].maxOrigins && !this[kOrigins].has(key)) {\n      throw new MaxOriginsReachedError()\n    }\n\n    const result = this[kClients].get(key)\n    let dispatcher = result && result.dispatcher\n    if (!dispatcher) {\n      const closeClientIfUnused = (connected) => {\n        const result = this[kClients].get(key)\n        if (result) {\n          if (connected) result.count -= 1\n          if (result.count <= 0) {\n            this[kClients].delete(key)\n            if (!result.dispatcher.destroyed) {\n              result.dispatcher.close()\n            }\n          }\n          this[kOrigins].delete(key)\n        }\n      }\n      dispatcher = this[kFactory](opts.origin, this[kOptions])\n        .on('drain', this[kOnDrain])\n        .on('connect', (origin, targets) => {\n          const result = this[kClients].get(key)\n          if (result) {\n            result.count += 1\n          }\n          this[kOnConnect](origin, targets)\n        })\n        .on('disconnect', (origin, targets, err) => {\n          closeClientIfUnused(true)\n          this[kOnDisconnect](origin, targets, err)\n        })\n        .on('connectionError', (origin, targets, err) => {\n          closeClientIfUnused(false)\n          this[kOnConnectionError](origin, targets, err)\n        })\n\n      this[kClients].set(key, { count: 0, dispatcher })\n      this[kOrigins].add(key)\n    }\n\n    return dispatcher.dispatch(opts, handler)\n  }\n\n  [kClose] () {\n    const closePromises = []\n    for (const { dispatcher } of this[kClients].values()) {\n      closePromises.push(dispatcher.close())\n    }\n    this[kClients].clear()\n\n    return Promise.all(closePromises)\n  }\n\n  [kDestroy] (err) {\n    const destroyPromises = []\n    for (const { dispatcher } of this[kClients].values()) {\n      destroyPromises.push(dispatcher.destroy(err))\n    }\n    this[kClients].clear()\n\n    return Promise.all(destroyPromises)\n  }\n\n  get stats () {\n    const allClientStats = {}\n    for (const { dispatcher } of this[kClients].values()) {\n      if (dispatcher.stats) {\n        allClientStats[dispatcher[kUrl].origin] = dispatcher.stats\n      }\n    }\n    return allClientStats\n  }\n}\n\nmodule.exports = Agent\n", "'use strict'\n\nconst { Buffer } = require('node:buffer')\nconst net = require('node:net')\nconst { InvalidArgumentError } = require('./errors')\n\n/**\n * Parse an address and determine its type\n * @param {string} address - The address to parse\n * @returns {{type: number, buffer: Buffer}} Address type and buffer\n */\nfunction parseAddress (address) {\n  // Check if it's an IPv4 address\n  if (net.isIPv4(address)) {\n    const parts = address.split('.').map(Number)\n    return {\n      type: 0x01, // IPv4\n      buffer: Buffer.from(parts)\n    }\n  }\n\n  // Check if it's an IPv6 address\n  if (net.isIPv6(address)) {\n    return {\n      type: 0x04, // IPv6\n      buffer: parseIPv6(address)\n    }\n  }\n\n  // Otherwise, treat as domain name\n  const domainBuffer = Buffer.from(address, 'utf8')\n  if (domainBuffer.length > 255) {\n    throw new InvalidArgumentError('Domain name too long (max 255 bytes)')\n  }\n\n  return {\n    type: 0x03, // Domain\n    buffer: Buffer.concat([Buffer.from([domainBuffer.length]), domainBuffer])\n  }\n}\n\n/**\n * Parse IPv6 address to buffer\n * @param {string} address - IPv6 address string\n * @returns {Buffer} 16-byte buffer\n */\nfunction parseIPv6 (address) {\n  const buffer = Buffer.alloc(16)\n  const parts = address.split(':')\n  let partIndex = 0\n  let bufferIndex = 0\n\n  // Handle compressed notation (::)\n  const doubleColonIndex = address.indexOf('::')\n  if (doubleColonIndex !== -1) {\n    // Count non-empty parts\n    const nonEmptyParts = parts.filter(p => p.length > 0).length\n    const skipParts = 8 - nonEmptyParts\n\n    for (let i = 0; i < parts.length; i++) {\n      if (parts[i] === '' && i === doubleColonIndex / 3) {\n        // Skip empty parts for ::\n        bufferIndex += skipParts * 2\n      } else if (parts[i] !== '') {\n        const value = parseInt(parts[i], 16)\n        buffer.writeUInt16BE(value, bufferIndex)\n        bufferIndex += 2\n      }\n    }\n  } else {\n    // No compression, parse normally\n    for (const part of parts) {\n      if (part === '') continue\n      const value = parseInt(part, 16)\n      buffer.writeUInt16BE(value, partIndex * 2)\n      partIndex++\n    }\n  }\n\n  return buffer\n}\n\n/**\n * Build a SOCKS5 address buffer\n * @param {number} type - Address type (1=IPv4, 3=Domain, 4=IPv6)\n * @param {Buffer} addressBuffer - The address data\n * @param {number} port - Port number\n * @returns {Buffer} Complete address buffer including type, address, and port\n */\nfunction buildAddressBuffer (type, addressBuffer, port) {\n  const portBuffer = Buffer.allocUnsafe(2)\n  portBuffer.writeUInt16BE(port, 0)\n\n  return Buffer.concat([\n    Buffer.from([type]),\n    addressBuffer,\n    portBuffer\n  ])\n}\n\n/**\n * Parse address from SOCKS5 response\n * @param {Buffer} buffer - Buffer containing the address\n * @param {number} offset - Starting offset in buffer\n * @returns {{address: string, port: number, bytesRead: number}}\n */\nfunction parseResponseAddress (buffer, offset = 0) {\n  if (buffer.length < offset + 1) {\n    throw new InvalidArgumentError('Buffer too small to contain address type')\n  }\n\n  const addressType = buffer[offset]\n  let address\n  let currentOffset = offset + 1\n\n  switch (addressType) {\n    case 0x01: { // IPv4\n      if (buffer.length < currentOffset + 6) {\n        throw new InvalidArgumentError('Buffer too small for IPv4 address')\n      }\n      address = Array.from(buffer.subarray(currentOffset, currentOffset + 4)).join('.')\n      currentOffset += 4\n      break\n    }\n\n    case 0x03: { // Domain\n      if (buffer.length < currentOffset + 1) {\n        throw new InvalidArgumentError('Buffer too small for domain length')\n      }\n      const domainLength = buffer[currentOffset]\n      currentOffset += 1\n\n      if (buffer.length < currentOffset + domainLength + 2) {\n        throw new InvalidArgumentError('Buffer too small for domain address')\n      }\n      address = buffer.subarray(currentOffset, currentOffset + domainLength).toString('utf8')\n      currentOffset += domainLength\n      break\n    }\n\n    case 0x04: { // IPv6\n      if (buffer.length < currentOffset + 18) {\n        throw new InvalidArgumentError('Buffer too small for IPv6 address')\n      }\n      // Convert buffer to IPv6 string\n      const parts = []\n      for (let i = 0; i < 8; i++) {\n        const value = buffer.readUInt16BE(currentOffset + i * 2)\n        parts.push(value.toString(16))\n      }\n      address = parts.join(':')\n      currentOffset += 16\n      break\n    }\n\n    default:\n      throw new InvalidArgumentError(`Invalid address type: ${addressType}`)\n  }\n\n  // Parse port\n  if (buffer.length < currentOffset + 2) {\n    throw new InvalidArgumentError('Buffer too small for port')\n  }\n  const port = buffer.readUInt16BE(currentOffset)\n  currentOffset += 2\n\n  return {\n    address,\n    port,\n    bytesRead: currentOffset - offset\n  }\n}\n\n/**\n * Create error for SOCKS5 reply code\n * @param {number} replyCode - SOCKS5 reply code\n * @returns {Error} Appropriate error object\n */\nfunction createReplyError (replyCode) {\n  const messages = {\n    0x01: 'General SOCKS server failure',\n    0x02: 'Connection not allowed by ruleset',\n    0x03: 'Network unreachable',\n    0x04: 'Host unreachable',\n    0x05: 'Connection refused',\n    0x06: 'TTL expired',\n    0x07: 'Command not supported',\n    0x08: 'Address type not supported'\n  }\n\n  const message = messages[replyCode] || `Unknown SOCKS5 error code: ${replyCode}`\n  const error = new Error(message)\n  error.code = `SOCKS5_${replyCode}`\n  return error\n}\n\nmodule.exports = {\n  parseAddress,\n  parseIPv6,\n  buildAddressBuffer,\n  parseResponseAddress,\n  createReplyError\n}\n", "'use strict'\n\nconst { EventEmitter } = require('node:events')\nconst { Buffer } = require('node:buffer')\nconst { InvalidArgumentError, Socks5ProxyError } = require('./errors')\nconst { debuglog } = require('node:util')\nconst { parseAddress } = require('./socks5-utils')\n\nconst debug = debuglog('undici:socks5')\n\n// SOCKS5 constants\nconst SOCKS_VERSION = 0x05\n\n// Authentication methods\nconst AUTH_METHODS = {\n  NO_AUTH: 0x00,\n  GSSAPI: 0x01,\n  USERNAME_PASSWORD: 0x02,\n  NO_ACCEPTABLE: 0xFF\n}\n\n// SOCKS5 commands\nconst COMMANDS = {\n  CONNECT: 0x01,\n  BIND: 0x02,\n  UDP_ASSOCIATE: 0x03\n}\n\n// Address types\nconst ADDRESS_TYPES = {\n  IPV4: 0x01,\n  DOMAIN: 0x03,\n  IPV6: 0x04\n}\n\n// Reply codes\nconst REPLY_CODES = {\n  SUCCEEDED: 0x00,\n  GENERAL_FAILURE: 0x01,\n  CONNECTION_NOT_ALLOWED: 0x02,\n  NETWORK_UNREACHABLE: 0x03,\n  HOST_UNREACHABLE: 0x04,\n  CONNECTION_REFUSED: 0x05,\n  TTL_EXPIRED: 0x06,\n  COMMAND_NOT_SUPPORTED: 0x07,\n  ADDRESS_TYPE_NOT_SUPPORTED: 0x08\n}\n\n// State machine states\nconst STATES = {\n  INITIAL: 'initial',\n  HANDSHAKING: 'handshaking',\n  AUTHENTICATING: 'authenticating',\n  CONNECTING: 'connecting',\n  CONNECTED: 'connected',\n  ERROR: 'error',\n  CLOSED: 'closed'\n}\n\n/**\n * SOCKS5 client implementation\n * Handles SOCKS5 protocol negotiation and connection establishment\n */\nclass Socks5Client extends EventEmitter {\n  constructor (socket, options = {}) {\n    super()\n\n    if (!socket) {\n      throw new InvalidArgumentError('socket is required')\n    }\n\n    this.socket = socket\n    this.options = options\n    this.state = STATES.INITIAL\n    this.buffer = Buffer.alloc(0)\n\n    // Authentication settings\n    this.authMethods = []\n    if (options.username && options.password) {\n      this.authMethods.push(AUTH_METHODS.USERNAME_PASSWORD)\n    }\n    this.authMethods.push(AUTH_METHODS.NO_AUTH)\n\n    // Socket event handlers\n    this.socket.on('data', this.onData.bind(this))\n    this.socket.on('error', this.onError.bind(this))\n    this.socket.on('close', this.onClose.bind(this))\n  }\n\n  /**\n   * Handle incoming data from the socket\n   */\n  onData (data) {\n    debug('received data', data.length, 'bytes in state', this.state)\n    this.buffer = Buffer.concat([this.buffer, data])\n\n    try {\n      switch (this.state) {\n        case STATES.HANDSHAKING:\n          this.handleHandshakeResponse()\n          break\n        case STATES.AUTHENTICATING:\n          this.handleAuthResponse()\n          break\n        case STATES.CONNECTING:\n          this.handleConnectResponse()\n          break\n      }\n    } catch (err) {\n      this.onError(err)\n    }\n  }\n\n  /**\n   * Handle socket errors\n   */\n  onError (err) {\n    debug('socket error', err)\n    this.state = STATES.ERROR\n    this.emit('error', err)\n    this.destroy()\n  }\n\n  /**\n   * Handle socket close\n   */\n  onClose () {\n    debug('socket closed')\n    this.state = STATES.CLOSED\n    this.emit('close')\n  }\n\n  /**\n   * Destroy the client and underlying socket\n   */\n  destroy () {\n    if (this.socket && !this.socket.destroyed) {\n      this.socket.destroy()\n    }\n  }\n\n  /**\n   * Start the SOCKS5 handshake\n   */\n  handshake () {\n    if (this.state !== STATES.INITIAL) {\n      throw new InvalidArgumentError('Handshake already started')\n    }\n\n    debug('starting handshake with', this.authMethods.length, 'auth methods')\n    this.state = STATES.HANDSHAKING\n\n    // Build handshake request\n    // +----+----------+----------+\n    // |VER | NMETHODS | METHODS  |\n    // +----+----------+----------+\n    // | 1  |    1     | 1 to 255 |\n    // +----+----------+----------+\n    const request = Buffer.alloc(2 + this.authMethods.length)\n    request[0] = SOCKS_VERSION\n    request[1] = this.authMethods.length\n    this.authMethods.forEach((method, i) => {\n      request[2 + i] = method\n    })\n\n    this.socket.write(request)\n  }\n\n  /**\n   * Handle handshake response from server\n   */\n  handleHandshakeResponse () {\n    if (this.buffer.length < 2) {\n      return // Not enough data yet\n    }\n\n    const version = this.buffer[0]\n    const method = this.buffer[1]\n\n    if (version !== SOCKS_VERSION) {\n      throw new Socks5ProxyError(`Invalid SOCKS version: ${version}`, 'UND_ERR_SOCKS5_VERSION')\n    }\n\n    if (method === AUTH_METHODS.NO_ACCEPTABLE) {\n      throw new Socks5ProxyError('No acceptable authentication method', 'UND_ERR_SOCKS5_AUTH_REJECTED')\n    }\n\n    this.buffer = this.buffer.subarray(2)\n    debug('server selected auth method', method)\n\n    if (method === AUTH_METHODS.NO_AUTH) {\n      this.emit('authenticated')\n    } else if (method === AUTH_METHODS.USERNAME_PASSWORD) {\n      this.state = STATES.AUTHENTICATING\n      this.sendAuthRequest()\n    } else {\n      throw new Socks5ProxyError(`Unsupported authentication method: ${method}`, 'UND_ERR_SOCKS5_AUTH_METHOD')\n    }\n  }\n\n  /**\n   * Send username/password authentication request\n   */\n  sendAuthRequest () {\n    const { username, password } = this.options\n\n    if (!username || !password) {\n      throw new InvalidArgumentError('Username and password required for authentication')\n    }\n\n    debug('sending username/password auth')\n\n    // Username/Password authentication request (RFC 1929)\n    // +----+------+----------+------+----------+\n    // |VER | ULEN |  UNAME   | PLEN |  PASSWD  |\n    // +----+------+----------+------+----------+\n    // | 1  |  1   | 1 to 255 |  1   | 1 to 255 |\n    // +----+------+----------+------+----------+\n    const usernameBuffer = Buffer.from(username)\n    const passwordBuffer = Buffer.from(password)\n\n    if (usernameBuffer.length > 255 || passwordBuffer.length > 255) {\n      throw new InvalidArgumentError('Username or password too long')\n    }\n\n    const request = Buffer.alloc(3 + usernameBuffer.length + passwordBuffer.length)\n    request[0] = 0x01 // Sub-negotiation version\n    request[1] = usernameBuffer.length\n    usernameBuffer.copy(request, 2)\n    request[2 + usernameBuffer.length] = passwordBuffer.length\n    passwordBuffer.copy(request, 3 + usernameBuffer.length)\n\n    this.socket.write(request)\n  }\n\n  /**\n   * Handle authentication response\n   */\n  handleAuthResponse () {\n    if (this.buffer.length < 2) {\n      return // Not enough data yet\n    }\n\n    const version = this.buffer[0]\n    const status = this.buffer[1]\n\n    if (version !== 0x01) {\n      throw new Socks5ProxyError(`Invalid auth sub-negotiation version: ${version}`, 'UND_ERR_SOCKS5_AUTH_VERSION')\n    }\n\n    if (status !== 0x00) {\n      throw new Socks5ProxyError('Authentication failed', 'UND_ERR_SOCKS5_AUTH_FAILED')\n    }\n\n    this.buffer = this.buffer.subarray(2)\n    debug('authentication successful')\n    this.emit('authenticated')\n  }\n\n  /**\n   * Send CONNECT command\n   * @param {string} address - Target address (IP or domain)\n   * @param {number} port - Target port\n   */\n  connect (address, port) {\n    if (this.state === STATES.CONNECTED) {\n      throw new InvalidArgumentError('Already connected')\n    }\n\n    debug('connecting to', address, port)\n    this.state = STATES.CONNECTING\n\n    const request = this.buildConnectRequest(COMMANDS.CONNECT, address, port)\n    this.socket.write(request)\n  }\n\n  /**\n   * Build a SOCKS5 request\n   */\n  buildConnectRequest (command, address, port) {\n    // Parse address to determine type and buffer\n    const { type: addressType, buffer: addressBuffer } = parseAddress(address)\n\n    // Build request\n    // +----+-----+-------+------+----------+----------+\n    // |VER | CMD |  RSV  | ATYP | DST.ADDR | DST.PORT |\n    // +----+-----+-------+------+----------+----------+\n    // | 1  |  1  | X'00' |  1   | Variable |    2     |\n    // +----+-----+-------+------+----------+----------+\n    const request = Buffer.alloc(4 + addressBuffer.length + 2)\n    request[0] = SOCKS_VERSION\n    request[1] = command\n    request[2] = 0x00 // Reserved\n    request[3] = addressType\n    addressBuffer.copy(request, 4)\n    request.writeUInt16BE(port, 4 + addressBuffer.length)\n\n    return request\n  }\n\n  /**\n   * Handle CONNECT response\n   */\n  handleConnectResponse () {\n    if (this.buffer.length < 4) {\n      return // Not enough data for header\n    }\n\n    const version = this.buffer[0]\n    const reply = this.buffer[1]\n    const addressType = this.buffer[3]\n\n    if (version !== SOCKS_VERSION) {\n      throw new Socks5ProxyError(`Invalid SOCKS version in reply: ${version}`, 'UND_ERR_SOCKS5_REPLY_VERSION')\n    }\n\n    // Calculate the expected response length\n    let responseLength = 4 // VER + REP + RSV + ATYP\n    if (addressType === ADDRESS_TYPES.IPV4) {\n      responseLength += 4 + 2 // IPv4 + port\n    } else if (addressType === ADDRESS_TYPES.DOMAIN) {\n      if (this.buffer.length < 5) {\n        return // Need domain length byte\n      }\n      responseLength += 1 + this.buffer[4] + 2 // length byte + domain + port\n    } else if (addressType === ADDRESS_TYPES.IPV6) {\n      responseLength += 16 + 2 // IPv6 + port\n    } else {\n      throw new Socks5ProxyError(`Invalid address type in reply: ${addressType}`, 'UND_ERR_SOCKS5_ADDR_TYPE')\n    }\n\n    if (this.buffer.length < responseLength) {\n      return // Not enough data for full response\n    }\n\n    if (reply !== REPLY_CODES.SUCCEEDED) {\n      const errorMessage = this.getReplyErrorMessage(reply)\n      throw new Socks5ProxyError(`SOCKS5 connection failed: ${errorMessage}`, `UND_ERR_SOCKS5_REPLY_${reply}`)\n    }\n\n    // Parse bound address and port\n    let boundAddress\n    let offset = 4\n\n    if (addressType === ADDRESS_TYPES.IPV4) {\n      boundAddress = Array.from(this.buffer.subarray(offset, offset + 4)).join('.')\n      offset += 4\n    } else if (addressType === ADDRESS_TYPES.DOMAIN) {\n      const domainLength = this.buffer[offset]\n      offset += 1\n      boundAddress = this.buffer.subarray(offset, offset + domainLength).toString()\n      offset += domainLength\n    } else if (addressType === ADDRESS_TYPES.IPV6) {\n      // Parse IPv6 address from 16-byte buffer\n      const parts = []\n      for (let i = 0; i < 8; i++) {\n        const value = this.buffer.readUInt16BE(offset + i * 2)\n        parts.push(value.toString(16))\n      }\n      boundAddress = parts.join(':')\n      offset += 16\n    }\n\n    const boundPort = this.buffer.readUInt16BE(offset)\n\n    this.buffer = this.buffer.subarray(responseLength)\n    this.state = STATES.CONNECTED\n\n    debug('connected, bound address:', boundAddress, 'port:', boundPort)\n    this.emit('connected', { address: boundAddress, port: boundPort })\n  }\n\n  /**\n   * Get human-readable error message for reply code\n   */\n  getReplyErrorMessage (reply) {\n    switch (reply) {\n      case REPLY_CODES.GENERAL_FAILURE:\n        return 'General SOCKS server failure'\n      case REPLY_CODES.CONNECTION_NOT_ALLOWED:\n        return 'Connection not allowed by ruleset'\n      case REPLY_CODES.NETWORK_UNREACHABLE:\n        return 'Network unreachable'\n      case REPLY_CODES.HOST_UNREACHABLE:\n        return 'Host unreachable'\n      case REPLY_CODES.CONNECTION_REFUSED:\n        return 'Connection refused'\n      case REPLY_CODES.TTL_EXPIRED:\n        return 'TTL expired'\n      case REPLY_CODES.COMMAND_NOT_SUPPORTED:\n        return 'Command not supported'\n      case REPLY_CODES.ADDRESS_TYPE_NOT_SUPPORTED:\n        return 'Address type not supported'\n      default:\n        return `Unknown error code: ${reply}`\n    }\n  }\n}\n\nmodule.exports = {\n  Socks5Client,\n  AUTH_METHODS,\n  COMMANDS,\n  ADDRESS_TYPES,\n  REPLY_CODES,\n  STATES\n}\n", "'use strict'\n\nconst net = require('node:net')\nconst { URL } = require('node:url')\n\nlet tls // include tls conditionally since it is not always available\nconst DispatcherBase = require('./dispatcher-base')\nconst { InvalidArgumentError } = require('../core/errors')\nconst { Socks5Client } = require('../core/socks5-client')\nconst { kDispatch, kClose, kDestroy } = require('../core/symbols')\nconst Pool = require('./pool')\nconst buildConnector = require('../core/connect')\nconst { debuglog } = require('node:util')\n\nconst debug = debuglog('undici:socks5-proxy')\n\nconst kProxyUrl = Symbol('proxy url')\nconst kProxyHeaders = Symbol('proxy headers')\nconst kProxyAuth = Symbol('proxy auth')\nconst kPool = Symbol('pool')\nconst kConnector = Symbol('connector')\n\n// Static flag to ensure warning is only emitted once per process\nlet experimentalWarningEmitted = false\n\n/**\n * SOCKS5 proxy agent for dispatching requests through a SOCKS5 proxy\n */\nclass Socks5ProxyAgent extends DispatcherBase {\n  constructor (proxyUrl, options = {}) {\n    super()\n\n    // Emit experimental warning only once\n    if (!experimentalWarningEmitted) {\n      process.emitWarning(\n        'SOCKS5 proxy support is experimental and subject to change',\n        'ExperimentalWarning'\n      )\n      experimentalWarningEmitted = true\n    }\n\n    if (!proxyUrl) {\n      throw new InvalidArgumentError('Proxy URL is mandatory')\n    }\n\n    // Parse proxy URL\n    const url = typeof proxyUrl === 'string' ? new URL(proxyUrl) : proxyUrl\n\n    if (url.protocol !== 'socks5:' && url.protocol !== 'socks:') {\n      throw new InvalidArgumentError('Proxy URL must use socks5:// or socks:// protocol')\n    }\n\n    this[kProxyUrl] = url\n    this[kProxyHeaders] = options.headers || {}\n\n    // Extract auth from URL or options\n    this[kProxyAuth] = {\n      username: options.username || (url.username ? decodeURIComponent(url.username) : null),\n      password: options.password || (url.password ? decodeURIComponent(url.password) : null)\n    }\n\n    // Create connector for proxy connection\n    this[kConnector] = options.connect || buildConnector({\n      ...options.proxyTls,\n      servername: options.proxyTls?.servername || url.hostname\n    })\n\n    // Pool for the actual HTTP connections (with SOCKS5 tunnel connect function)\n    this[kPool] = null\n  }\n\n  /**\n   * Create a SOCKS5 connection to the proxy\n   */\n  async createSocks5Connection (targetHost, targetPort) {\n    const proxyHost = this[kProxyUrl].hostname\n    const proxyPort = parseInt(this[kProxyUrl].port) || 1080\n\n    debug('creating SOCKS5 connection to', proxyHost, proxyPort)\n\n    // Connect to the SOCKS5 proxy\n    const socket = await new Promise((resolve, reject) => {\n      const onConnect = () => {\n        socket.removeListener('error', onError)\n        resolve(socket)\n      }\n\n      const onError = (err) => {\n        socket.removeListener('connect', onConnect)\n        reject(err)\n      }\n\n      const socket = net.connect({\n        host: proxyHost,\n        port: proxyPort\n      })\n\n      socket.once('connect', onConnect)\n      socket.once('error', onError)\n    })\n\n    // Create SOCKS5 client\n    const socks5Client = new Socks5Client(socket, this[kProxyAuth])\n\n    // Handle SOCKS5 errors\n    socks5Client.on('error', (err) => {\n      debug('SOCKS5 error:', err)\n      socket.destroy()\n    })\n\n    // Perform SOCKS5 handshake\n    await socks5Client.handshake()\n\n    // Wait for authentication (if required)\n    await new Promise((resolve, reject) => {\n      const timeout = setTimeout(() => {\n        reject(new Error('SOCKS5 authentication timeout'))\n      }, 5000)\n\n      const onAuthenticated = () => {\n        clearTimeout(timeout)\n        socks5Client.removeListener('error', onError)\n        resolve()\n      }\n\n      const onError = (err) => {\n        clearTimeout(timeout)\n        socks5Client.removeListener('authenticated', onAuthenticated)\n        reject(err)\n      }\n\n      // Check if already authenticated (for NO_AUTH method)\n      if (socks5Client.state === 'authenticated') {\n        clearTimeout(timeout)\n        resolve()\n      } else {\n        socks5Client.once('authenticated', onAuthenticated)\n        socks5Client.once('error', onError)\n      }\n    })\n\n    // Send CONNECT command\n    await socks5Client.connect(targetHost, targetPort)\n\n    // Wait for connection\n    await new Promise((resolve, reject) => {\n      const timeout = setTimeout(() => {\n        reject(new Error('SOCKS5 connection timeout'))\n      }, 5000)\n\n      const onConnected = (info) => {\n        debug('SOCKS5 tunnel established to', targetHost, targetPort, 'via', info)\n        clearTimeout(timeout)\n        socks5Client.removeListener('error', onError)\n        resolve()\n      }\n\n      const onError = (err) => {\n        clearTimeout(timeout)\n        socks5Client.removeListener('connected', onConnected)\n        reject(err)\n      }\n\n      socks5Client.once('connected', onConnected)\n      socks5Client.once('error', onError)\n    })\n\n    return socket\n  }\n\n  /**\n   * Dispatch a request through the SOCKS5 proxy\n   */\n  async [kDispatch] (opts, handler) {\n    const { origin } = opts\n\n    debug('dispatching request to', origin, 'via SOCKS5')\n\n    try {\n      // Create Pool with custom connect function if we don't have one yet\n      if (!this[kPool] || this[kPool].destroyed || this[kPool].closed) {\n        this[kPool] = new Pool(origin, {\n          pipelining: opts.pipelining,\n          connections: opts.connections,\n          connect: async (connectOpts, callback) => {\n            try {\n              const url = new URL(origin)\n              const targetHost = url.hostname\n              const targetPort = parseInt(url.port) || (url.protocol === 'https:' ? 443 : 80)\n\n              debug('establishing SOCKS5 connection to', targetHost, targetPort)\n\n              // Create SOCKS5 tunnel\n              const socket = await this.createSocks5Connection(targetHost, targetPort)\n\n              // Handle TLS if needed\n              let finalSocket = socket\n              if (url.protocol === 'https:') {\n                if (!tls) {\n                  tls = require('node:tls')\n                }\n                debug('upgrading to TLS')\n                finalSocket = tls.connect({\n                  socket,\n                  servername: targetHost,\n                  ...connectOpts.tls || {}\n                })\n\n                await new Promise((resolve, reject) => {\n                  finalSocket.once('secureConnect', resolve)\n                  finalSocket.once('error', reject)\n                })\n              }\n\n              callback(null, finalSocket)\n            } catch (err) {\n              debug('SOCKS5 connection error:', err)\n              callback(err)\n            }\n          }\n        })\n      }\n\n      // Dispatch the request through the pool\n      return this[kPool][kDispatch](opts, handler)\n    } catch (err) {\n      debug('dispatch error:', err)\n      if (typeof handler.onError === 'function') {\n        handler.onError(err)\n      } else {\n        throw err\n      }\n    }\n  }\n\n  async [kClose] () {\n    if (this[kPool]) {\n      await this[kPool].close()\n    }\n  }\n\n  async [kDestroy] (err) {\n    if (this[kPool]) {\n      await this[kPool].destroy(err)\n    }\n  }\n}\n\nmodule.exports = Socks5ProxyAgent\n", "'use strict'\n\nconst { kProxy, kClose, kDestroy, kDispatch } = require('../core/symbols')\nconst Agent = require('./agent')\nconst Pool = require('./pool')\nconst DispatcherBase = require('./dispatcher-base')\nconst { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require('../core/errors')\nconst buildConnector = require('../core/connect')\nconst Client = require('./client')\nconst { channels } = require('../core/diagnostics')\nconst Socks5ProxyAgent = require('./socks5-proxy-agent')\n\nconst kAgent = Symbol('proxy agent')\nconst kClient = Symbol('proxy client')\nconst kProxyHeaders = Symbol('proxy headers')\nconst kRequestTls = Symbol('request tls settings')\nconst kProxyTls = Symbol('proxy tls settings')\nconst kConnectEndpoint = Symbol('connect endpoint function')\nconst kTunnelProxy = Symbol('tunnel proxy')\n\nfunction defaultProtocolPort (protocol) {\n  return protocol === 'https:' ? 443 : 80\n}\n\nfunction defaultFactory (origin, opts) {\n  return new Pool(origin, opts)\n}\n\nconst noop = () => {}\n\nfunction defaultAgentFactory (origin, opts) {\n  if (opts.connections === 1) {\n    return new Client(origin, opts)\n  }\n  return new Pool(origin, opts)\n}\n\nclass Http1ProxyWrapper extends DispatcherBase {\n  #client\n\n  constructor (proxyUrl, { headers = {}, connect, factory }) {\n    if (!proxyUrl) {\n      throw new InvalidArgumentError('Proxy URL is mandatory')\n    }\n\n    super()\n\n    this[kProxyHeaders] = headers\n    if (factory) {\n      this.#client = factory(proxyUrl, { connect })\n    } else {\n      this.#client = new Client(proxyUrl, { connect })\n    }\n  }\n\n  [kDispatch] (opts, handler) {\n    const onHeaders = handler.onHeaders\n    handler.onHeaders = function (statusCode, data, resume) {\n      if (statusCode === 407) {\n        if (typeof handler.onError === 'function') {\n          handler.onError(new InvalidArgumentError('Proxy Authentication Required (407)'))\n        }\n        return\n      }\n      if (onHeaders) onHeaders.call(this, statusCode, data, resume)\n    }\n\n    // Rewrite request as an HTTP1 Proxy request, without tunneling.\n    const {\n      origin,\n      path = '/',\n      headers = {}\n    } = opts\n\n    opts.path = origin + path\n\n    if (!('host' in headers) && !('Host' in headers)) {\n      const { host } = new URL(origin)\n      headers.host = host\n    }\n    opts.headers = { ...this[kProxyHeaders], ...headers }\n\n    return this.#client[kDispatch](opts, handler)\n  }\n\n  [kClose] () {\n    return this.#client.close()\n  }\n\n  [kDestroy] (err) {\n    return this.#client.destroy(err)\n  }\n}\n\nclass ProxyAgent extends DispatcherBase {\n  constructor (opts) {\n    if (!opts || (typeof opts === 'object' && !(opts instanceof URL) && !opts.uri)) {\n      throw new InvalidArgumentError('Proxy uri is mandatory')\n    }\n\n    const { clientFactory = defaultFactory } = opts\n    if (typeof clientFactory !== 'function') {\n      throw new InvalidArgumentError('Proxy opts.clientFactory must be a function.')\n    }\n\n    const { proxyTunnel = true } = opts\n\n    super()\n\n    const url = this.#getUrl(opts)\n    const { href, origin, port, protocol, username, password, hostname: proxyHostname } = url\n\n    this[kProxy] = { uri: href, protocol }\n    this[kRequestTls] = opts.requestTls\n    this[kProxyTls] = opts.proxyTls\n    this[kProxyHeaders] = opts.headers || {}\n    this[kTunnelProxy] = proxyTunnel\n\n    if (opts.auth && opts.token) {\n      throw new InvalidArgumentError('opts.auth cannot be used in combination with opts.token')\n    } else if (opts.auth) {\n      /* @deprecated in favour of opts.token */\n      this[kProxyHeaders]['proxy-authorization'] = `Basic ${opts.auth}`\n    } else if (opts.token) {\n      this[kProxyHeaders]['proxy-authorization'] = opts.token\n    } else if (username && password) {\n      this[kProxyHeaders]['proxy-authorization'] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString('base64')}`\n    }\n\n    const connect = buildConnector({ ...opts.proxyTls })\n    this[kConnectEndpoint] = buildConnector({ ...opts.requestTls })\n\n    const agentFactory = opts.factory || defaultAgentFactory\n    const factory = (origin, options) => {\n      const { protocol } = new URL(origin)\n\n      // Handle SOCKS5 proxy\n      if (this[kProxy].protocol === 'socks5:' || this[kProxy].protocol === 'socks:') {\n        return new Socks5ProxyAgent(this[kProxy].uri, {\n          headers: this[kProxyHeaders],\n          connect,\n          factory: agentFactory,\n          username: opts.username || username,\n          password: opts.password || password,\n          proxyTls: opts.proxyTls\n        })\n      }\n\n      if (!this[kTunnelProxy] && protocol === 'http:' && this[kProxy].protocol === 'http:') {\n        return new Http1ProxyWrapper(this[kProxy].uri, {\n          headers: this[kProxyHeaders],\n          connect,\n          factory: agentFactory\n        })\n      }\n      return agentFactory(origin, options)\n    }\n\n    // For SOCKS5 proxies, we don't need a client to the proxy itself\n    // The SOCKS5 connection is handled within Socks5ProxyAgent\n    if (protocol === 'socks5:' || protocol === 'socks:') {\n      this[kClient] = null\n    } else {\n      this[kClient] = clientFactory(url, { connect })\n    }\n\n    this[kAgent] = new Agent({\n      ...opts,\n      factory,\n      connect: async (opts, callback) => {\n        // SOCKS5 proxies handle their own connections via Socks5ProxyAgent,\n        // so this connect function should never be called for them.\n        if (!this[kClient]) {\n          callback(new InvalidArgumentError('Cannot establish tunnel connection without a proxy client'))\n          return\n        }\n\n        let requestedPath = opts.host\n        if (!opts.port) {\n          requestedPath += `:${defaultProtocolPort(opts.protocol)}`\n        }\n        try {\n          const connectParams = {\n            origin,\n            port,\n            path: requestedPath,\n            signal: opts.signal,\n            headers: {\n              ...this[kProxyHeaders],\n              host: opts.host,\n              ...(opts.connections == null || opts.connections > 0 ? { 'proxy-connection': 'keep-alive' } : {})\n            },\n            servername: this[kProxyTls]?.servername || proxyHostname\n          }\n          const { socket, statusCode } = await this[kClient].connect(connectParams)\n          if (statusCode !== 200) {\n            socket.on('error', noop).destroy()\n            callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`))\n            return\n          }\n\n          if (channels.proxyConnected.hasSubscribers) {\n            channels.proxyConnected.publish({\n              socket,\n              connectParams\n            })\n          }\n\n          if (opts.protocol !== 'https:') {\n            callback(null, socket)\n            return\n          }\n          let servername\n          if (this[kRequestTls]) {\n            servername = this[kRequestTls].servername\n          } else {\n            servername = opts.servername\n          }\n          this[kConnectEndpoint]({ ...opts, servername, httpSocket: socket }, callback)\n        } catch (err) {\n          if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') {\n            // Throw a custom error to avoid loop in client.js#connect\n            callback(new SecureProxyConnectionError(err))\n          } else {\n            callback(err)\n          }\n        }\n      }\n    })\n  }\n\n  dispatch (opts, handler) {\n    const headers = buildHeaders(opts.headers)\n    throwIfProxyAuthIsSent(headers)\n\n    if (headers && !('host' in headers) && !('Host' in headers)) {\n      const { host } = new URL(opts.origin)\n      headers.host = host\n    }\n\n    return this[kAgent].dispatch(\n      {\n        ...opts,\n        headers\n      },\n      handler\n    )\n  }\n\n  /**\n   * @param {import('../../types/proxy-agent').ProxyAgent.Options | string | URL} opts\n   * @returns {URL}\n   */\n  #getUrl (opts) {\n    if (typeof opts === 'string') {\n      return new URL(opts)\n    } else if (opts instanceof URL) {\n      return opts\n    } else {\n      return new URL(opts.uri)\n    }\n  }\n\n  [kClose] () {\n    const promises = [this[kAgent].close()]\n    if (this[kClient]) {\n      promises.push(this[kClient].close())\n    }\n    return Promise.all(promises)\n  }\n\n  [kDestroy] () {\n    const promises = [this[kAgent].destroy()]\n    if (this[kClient]) {\n      promises.push(this[kClient].destroy())\n    }\n    return Promise.all(promises)\n  }\n}\n\n/**\n * @param {string[] | Record<string, string>} headers\n * @returns {Record<string, string>}\n */\nfunction buildHeaders (headers) {\n  // When using undici.fetch, the headers list is stored\n  // as an array.\n  if (Array.isArray(headers)) {\n    /** @type {Record<string, string>} */\n    const headersPair = {}\n\n    for (let i = 0; i < headers.length; i += 2) {\n      headersPair[headers[i]] = headers[i + 1]\n    }\n\n    return headersPair\n  }\n\n  return headers\n}\n\n/**\n * @param {Record<string, string>} headers\n *\n * Previous versions of ProxyAgent suggests the Proxy-Authorization in request headers\n * Nevertheless, it was changed and to avoid a security vulnerability by end users\n * this check was created.\n * It should be removed in the next major version for performance reasons\n */\nfunction throwIfProxyAuthIsSent (headers) {\n  const existProxyAuth = headers && Object.keys(headers)\n    .find((key) => key.toLowerCase() === 'proxy-authorization')\n  if (existProxyAuth) {\n    throw new InvalidArgumentError('Proxy-Authorization should be sent in ProxyAgent constructor')\n  }\n}\n\nmodule.exports = ProxyAgent\n", "'use strict'\n\nconst DispatcherBase = require('./dispatcher-base')\nconst { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require('../core/symbols')\nconst ProxyAgent = require('./proxy-agent')\nconst Agent = require('./agent')\n\nconst DEFAULT_PORTS = {\n  'http:': 80,\n  'https:': 443\n}\n\nclass EnvHttpProxyAgent extends DispatcherBase {\n  #noProxyValue = null\n  #noProxyEntries = null\n  #opts = null\n\n  constructor (opts = {}) {\n    super()\n    this.#opts = opts\n\n    const { httpProxy, httpsProxy, noProxy, ...agentOpts } = opts\n\n    this[kNoProxyAgent] = new Agent(agentOpts)\n\n    const HTTP_PROXY = httpProxy ?? process.env.http_proxy ?? process.env.HTTP_PROXY\n    if (HTTP_PROXY) {\n      this[kHttpProxyAgent] = new ProxyAgent({ ...agentOpts, uri: HTTP_PROXY })\n    } else {\n      this[kHttpProxyAgent] = this[kNoProxyAgent]\n    }\n\n    const HTTPS_PROXY = httpsProxy ?? process.env.https_proxy ?? process.env.HTTPS_PROXY\n    if (HTTPS_PROXY) {\n      this[kHttpsProxyAgent] = new ProxyAgent({ ...agentOpts, uri: HTTPS_PROXY })\n    } else {\n      this[kHttpsProxyAgent] = this[kHttpProxyAgent]\n    }\n\n    this.#parseNoProxy()\n  }\n\n  [kDispatch] (opts, handler) {\n    const url = new URL(opts.origin)\n    const agent = this.#getProxyAgentForUrl(url)\n    return agent.dispatch(opts, handler)\n  }\n\n  [kClose] () {\n    return Promise.all([\n      this[kNoProxyAgent].close(),\n      !this[kHttpProxyAgent][kClosed] && this[kHttpProxyAgent].close(),\n      !this[kHttpsProxyAgent][kClosed] && this[kHttpsProxyAgent].close()\n    ])\n  }\n\n  [kDestroy] (err) {\n    return Promise.all([\n      this[kNoProxyAgent].destroy(err),\n      !this[kHttpProxyAgent][kDestroyed] && this[kHttpProxyAgent].destroy(err),\n      !this[kHttpsProxyAgent][kDestroyed] && this[kHttpsProxyAgent].destroy(err)\n    ])\n  }\n\n  #getProxyAgentForUrl (url) {\n    let { protocol, host: hostname, port } = url\n\n    // Stripping ports in this way instead of using parsedUrl.hostname to make\n    // sure that the brackets around IPv6 addresses are kept.\n    hostname = hostname.replace(/:\\d*$/, '').toLowerCase()\n    port = Number.parseInt(port, 10) || DEFAULT_PORTS[protocol] || 0\n    if (!this.#shouldProxy(hostname, port)) {\n      return this[kNoProxyAgent]\n    }\n    if (protocol === 'https:') {\n      return this[kHttpsProxyAgent]\n    }\n    return this[kHttpProxyAgent]\n  }\n\n  #shouldProxy (hostname, port) {\n    if (this.#noProxyChanged) {\n      this.#parseNoProxy()\n    }\n\n    if (this.#noProxyEntries.length === 0) {\n      return true // Always proxy if NO_PROXY is not set or empty.\n    }\n    if (this.#noProxyValue === '*') {\n      return false // Never proxy if wildcard is set.\n    }\n\n    for (let i = 0; i < this.#noProxyEntries.length; i++) {\n      const entry = this.#noProxyEntries[i]\n      if (entry.port && entry.port !== port) {\n        continue // Skip if ports don't match.\n      }\n      // Don't proxy if the hostname is equal with the no_proxy host.\n      if (hostname === entry.hostname) {\n        return false\n      }\n      // Don't proxy if the hostname is the subdomain of the no_proxy host.\n      // Reference - https://github.com/denoland/deno/blob/6fbce91e40cc07fc6da74068e5cc56fdd40f7b4c/ext/fetch/proxy.rs#L485\n      if (hostname.slice(-(entry.hostname.length + 1)) === `.${entry.hostname}`) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  #parseNoProxy () {\n    const noProxyValue = this.#opts.noProxy ?? this.#noProxyEnv\n    const noProxySplit = noProxyValue.split(/[,\\s]/)\n    const noProxyEntries = []\n\n    for (let i = 0; i < noProxySplit.length; i++) {\n      const entry = noProxySplit[i]\n      if (!entry) {\n        continue\n      }\n      const parsed = entry.match(/^(.+):(\\d+)$/)\n      noProxyEntries.push({\n        // strip leading dot or asterisk with dot\n        hostname: (parsed ? parsed[1] : entry).replace(/^\\*?\\./, '').toLowerCase(),\n        port: parsed ? Number.parseInt(parsed[2], 10) : 0\n      })\n    }\n\n    this.#noProxyValue = noProxyValue\n    this.#noProxyEntries = noProxyEntries\n  }\n\n  get #noProxyChanged () {\n    if (this.#opts.noProxy !== undefined) {\n      return false\n    }\n    return this.#noProxyValue !== this.#noProxyEnv\n  }\n\n  get #noProxyEnv () {\n    return process.env.no_proxy ?? process.env.NO_PROXY ?? ''\n  }\n}\n\nmodule.exports = EnvHttpProxyAgent\n", "'use strict'\nconst assert = require('node:assert')\n\nconst { kRetryHandlerDefaultRetry } = require('../core/symbols')\nconst { RequestRetryError } = require('../core/errors')\nconst WrapHandler = require('./wrap-handler')\nconst {\n  isDisturbed,\n  parseRangeHeader,\n  wrapRequestBody\n} = require('../core/util')\n\nfunction calculateRetryAfterHeader (retryAfter) {\n  const retryTime = new Date(retryAfter).getTime()\n  return isNaN(retryTime) ? 0 : retryTime - Date.now()\n}\n\nclass RetryHandler {\n  constructor (opts, { dispatch, handler }) {\n    const { retryOptions, ...dispatchOpts } = opts\n    const {\n      // Retry scoped\n      retry: retryFn,\n      maxRetries,\n      maxTimeout,\n      minTimeout,\n      timeoutFactor,\n      // Response scoped\n      methods,\n      errorCodes,\n      retryAfter,\n      statusCodes,\n      throwOnError\n    } = retryOptions ?? {}\n\n    this.error = null\n    this.dispatch = dispatch\n    this.handler = WrapHandler.wrap(handler)\n    this.opts = { ...dispatchOpts, body: wrapRequestBody(opts.body) }\n    this.retryOpts = {\n      throwOnError: throwOnError ?? true,\n      retry: retryFn ?? RetryHandler[kRetryHandlerDefaultRetry],\n      retryAfter: retryAfter ?? true,\n      maxTimeout: maxTimeout ?? 30 * 1000, // 30s,\n      minTimeout: minTimeout ?? 500, // .5s\n      timeoutFactor: timeoutFactor ?? 2,\n      maxRetries: maxRetries ?? 5,\n      // What errors we should retry\n      methods: methods ?? ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE', 'TRACE'],\n      // Indicates which errors to retry\n      statusCodes: statusCodes ?? [500, 502, 503, 504, 429],\n      // List of errors to retry\n      errorCodes: errorCodes ?? [\n        'ECONNRESET',\n        'ECONNREFUSED',\n        'ENOTFOUND',\n        'ENETDOWN',\n        'ENETUNREACH',\n        'EHOSTDOWN',\n        'EHOSTUNREACH',\n        'EPIPE',\n        'UND_ERR_SOCKET'\n      ]\n    }\n\n    this.retryCount = 0\n    this.retryCountCheckpoint = 0\n    this.headersSent = false\n    this.start = 0\n    this.end = null\n    this.etag = null\n  }\n\n  onResponseStartWithRetry (controller, statusCode, headers, statusMessage, err) {\n    if (this.retryOpts.throwOnError) {\n      // Preserve old behavior for status codes that are not eligible for retry\n      if (this.retryOpts.statusCodes.includes(statusCode) === false) {\n        this.headersSent = true\n        this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n      } else {\n        this.error = err\n      }\n\n      return\n    }\n\n    if (isDisturbed(this.opts.body)) {\n      this.headersSent = true\n      this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n      return\n    }\n\n    function shouldRetry (passedErr) {\n      if (passedErr) {\n        this.headersSent = true\n        this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n        controller.resume()\n        return\n      }\n\n      this.error = err\n      controller.resume()\n    }\n\n    controller.pause()\n    this.retryOpts.retry(\n      err,\n      {\n        state: { counter: this.retryCount },\n        opts: { retryOptions: this.retryOpts, ...this.opts }\n      },\n      shouldRetry.bind(this)\n    )\n  }\n\n  onRequestStart (controller, context) {\n    if (!this.headersSent) {\n      this.handler.onRequestStart?.(controller, context)\n    }\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  static [kRetryHandlerDefaultRetry] (err, { state, opts }, cb) {\n    const { statusCode, code, headers } = err\n    const { method, retryOptions } = opts\n    const {\n      maxRetries,\n      minTimeout,\n      maxTimeout,\n      timeoutFactor,\n      statusCodes,\n      errorCodes,\n      methods\n    } = retryOptions\n    const { counter } = state\n\n    // Any code that is not a Undici's originated and allowed to retry\n    if (code && code !== 'UND_ERR_REQ_RETRY' && !errorCodes.includes(code)) {\n      cb(err)\n      return\n    }\n\n    // If a set of method are provided and the current method is not in the list\n    if (Array.isArray(methods) && !methods.includes(method)) {\n      cb(err)\n      return\n    }\n\n    // If a set of status code are provided and the current status code is not in the list\n    if (\n      statusCode != null &&\n      Array.isArray(statusCodes) &&\n      !statusCodes.includes(statusCode)\n    ) {\n      cb(err)\n      return\n    }\n\n    // If we reached the max number of retries\n    if (counter > maxRetries) {\n      cb(err)\n      return\n    }\n\n    let retryAfterHeader = headers?.['retry-after']\n    if (retryAfterHeader) {\n      retryAfterHeader = Number(retryAfterHeader)\n      retryAfterHeader = Number.isNaN(retryAfterHeader)\n        ? calculateRetryAfterHeader(headers['retry-after'])\n        : retryAfterHeader * 1e3 // Retry-After is in seconds\n    }\n\n    const retryTimeout =\n      retryAfterHeader > 0\n        ? Math.min(retryAfterHeader, maxTimeout)\n        : Math.min(minTimeout * timeoutFactor ** (counter - 1), maxTimeout)\n\n    setTimeout(() => cb(null), retryTimeout)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    this.error = null\n    this.retryCount += 1\n\n    if (statusCode >= 300) {\n      const err = new RequestRetryError('Request failed', statusCode, {\n        headers,\n        data: {\n          count: this.retryCount\n        }\n      })\n\n      this.onResponseStartWithRetry(controller, statusCode, headers, statusMessage, err)\n      return\n    }\n\n    // Checkpoint for resume from where we left it\n    if (this.headersSent) {\n      // Only Partial Content 206 supposed to provide Content-Range,\n      // any other status code that partially consumed the payload\n      // should not be retried because it would result in downstream\n      // wrongly concatenate multiple responses.\n      if (statusCode !== 206 && (this.start > 0 || statusCode !== 200)) {\n        throw new RequestRetryError('server does not support the range header and the payload was partially consumed', statusCode, {\n          headers,\n          data: { count: this.retryCount }\n        })\n      }\n\n      const contentRange = parseRangeHeader(headers['content-range'])\n      // If no content range\n      if (!contentRange) {\n        // We always throw here as we want to indicate that we entred unexpected path\n        throw new RequestRetryError('Content-Range mismatch', statusCode, {\n          headers,\n          data: { count: this.retryCount }\n        })\n      }\n\n      // Let's start with a weak etag check\n      if (this.etag != null && this.etag !== headers.etag) {\n        // We always throw here as we want to indicate that we entred unexpected path\n        throw new RequestRetryError('ETag mismatch', statusCode, {\n          headers,\n          data: { count: this.retryCount }\n        })\n      }\n\n      const { start, size, end = size ? size - 1 : null } = contentRange\n\n      assert(this.start === start, 'content-range mismatch')\n      assert(this.end == null || this.end === end, 'content-range mismatch')\n\n      return\n    }\n\n    if (this.end == null) {\n      if (statusCode === 206) {\n        // First time we receive 206\n        const range = parseRangeHeader(headers['content-range'])\n\n        if (range == null) {\n          this.headersSent = true\n          this.handler.onResponseStart?.(\n            controller,\n            statusCode,\n            headers,\n            statusMessage\n          )\n          return\n        }\n\n        const { start, size, end = size ? size - 1 : null } = range\n        assert(\n          start != null && Number.isFinite(start),\n          'content-range mismatch'\n        )\n        assert(end != null && Number.isFinite(end), 'invalid content-length')\n\n        this.start = start\n        this.end = end\n      }\n\n      // We make our best to checkpoint the body for further range headers\n      if (this.end == null) {\n        const contentLength = headers['content-length']\n        this.end = contentLength != null ? Number(contentLength) - 1 : null\n      }\n\n      assert(Number.isFinite(this.start))\n      assert(\n        this.end == null || Number.isFinite(this.end),\n        'invalid content-length'\n      )\n\n      this.resume = true\n      this.etag = headers.etag != null ? headers.etag : null\n\n      // Weak etags are not useful for comparison nor cache\n      // for instance not safe to assume if the response is byte-per-byte\n      // equal\n      if (\n        this.etag != null &&\n        this.etag[0] === 'W' &&\n        this.etag[1] === '/'\n      ) {\n        this.etag = null\n      }\n\n      this.headersSent = true\n      this.handler.onResponseStart?.(\n        controller,\n        statusCode,\n        headers,\n        statusMessage\n      )\n    } else {\n      throw new RequestRetryError('Request failed', statusCode, {\n        headers,\n        data: { count: this.retryCount }\n      })\n    }\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.error) {\n      return\n    }\n\n    this.start += chunk.length\n\n    this.handler.onResponseData?.(controller, chunk)\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.error && this.retryOpts.throwOnError) {\n      throw this.error\n    }\n\n    if (!this.error) {\n      this.retryCount = 0\n      return this.handler.onResponseEnd?.(controller, trailers)\n    }\n\n    this.retry(controller)\n  }\n\n  retry (controller) {\n    if (this.start !== 0) {\n      const headers = { range: `bytes=${this.start}-${this.end ?? ''}` }\n\n      // Weak etag check - weak etags will make comparison algorithms never match\n      if (this.etag != null) {\n        headers['if-match'] = this.etag\n      }\n\n      this.opts = {\n        ...this.opts,\n        headers: {\n          ...this.opts.headers,\n          ...headers\n        }\n      }\n    }\n\n    try {\n      this.retryCountCheckpoint = this.retryCount\n      this.dispatch(this.opts, this)\n    } catch (err) {\n      this.handler.onResponseError?.(controller, err)\n    }\n  }\n\n  onResponseError (controller, err) {\n    if (controller?.aborted || isDisturbed(this.opts.body)) {\n      this.handler.onResponseError?.(controller, err)\n      return\n    }\n\n    function shouldRetry (returnedErr) {\n      if (!returnedErr) {\n        this.retry(controller)\n        return\n      }\n\n      this.handler?.onResponseError?.(controller, returnedErr)\n    }\n\n    // We reconcile in case of a mix between network errors\n    // and server error response\n    if (this.retryCount - this.retryCountCheckpoint > 0) {\n      // We count the difference between the last checkpoint and the current retry count\n      this.retryCount =\n        this.retryCountCheckpoint +\n        (this.retryCount - this.retryCountCheckpoint)\n    } else {\n      this.retryCount += 1\n    }\n\n    this.retryOpts.retry(\n      err,\n      {\n        state: { counter: this.retryCount },\n        opts: { retryOptions: this.retryOpts, ...this.opts }\n      },\n      shouldRetry.bind(this)\n    )\n  }\n}\n\nmodule.exports = RetryHandler\n", "'use strict'\n\nconst Dispatcher = require('./dispatcher')\nconst RetryHandler = require('../handler/retry-handler')\n\nclass RetryAgent extends Dispatcher {\n  #agent = null\n  #options = null\n  constructor (agent, options = {}) {\n    super(options)\n    this.#agent = agent\n    this.#options = options\n  }\n\n  dispatch (opts, handler) {\n    const retry = new RetryHandler({\n      ...opts,\n      retryOptions: this.#options\n    }, {\n      dispatch: this.#agent.dispatch.bind(this.#agent),\n      handler\n    })\n    return this.#agent.dispatch(opts, retry)\n  }\n\n  close () {\n    return this.#agent.close()\n  }\n\n  destroy () {\n    return this.#agent.destroy()\n  }\n}\n\nmodule.exports = RetryAgent\n", "'use strict'\n\nconst { InvalidArgumentError } = require('../core/errors')\nconst Client = require('./client')\n\nclass H2CClient extends Client {\n  constructor (origin, clientOpts) {\n    if (typeof origin === 'string') {\n      origin = new URL(origin)\n    }\n\n    if (origin.protocol !== 'http:') {\n      throw new InvalidArgumentError(\n        'h2c-client: Only h2c protocol is supported'\n      )\n    }\n\n    const { connect, maxConcurrentStreams, pipelining, ...opts } =\n            clientOpts ?? {}\n    let defaultMaxConcurrentStreams = 100\n    let defaultPipelining = 100\n\n    if (\n      maxConcurrentStreams != null &&\n            Number.isInteger(maxConcurrentStreams) &&\n            maxConcurrentStreams > 0\n    ) {\n      defaultMaxConcurrentStreams = maxConcurrentStreams\n    }\n\n    if (pipelining != null && Number.isInteger(pipelining) && pipelining > 0) {\n      defaultPipelining = pipelining\n    }\n\n    if (defaultPipelining > defaultMaxConcurrentStreams) {\n      throw new InvalidArgumentError(\n        'h2c-client: pipelining cannot be greater than maxConcurrentStreams'\n      )\n    }\n\n    super(origin, {\n      ...opts,\n      maxConcurrentStreams: defaultMaxConcurrentStreams,\n      pipelining: defaultPipelining,\n      allowH2: true,\n      useH2c: true\n    })\n  }\n}\n\nmodule.exports = H2CClient\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { Readable } = require('node:stream')\nconst { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require('../core/errors')\nconst util = require('../core/util')\nconst { ReadableStreamFrom } = require('../core/util')\n\nconst kConsume = Symbol('kConsume')\nconst kReading = Symbol('kReading')\nconst kBody = Symbol('kBody')\nconst kAbort = Symbol('kAbort')\nconst kContentType = Symbol('kContentType')\nconst kContentLength = Symbol('kContentLength')\nconst kUsed = Symbol('kUsed')\nconst kBytesRead = Symbol('kBytesRead')\n\nconst noop = () => {}\n\n/**\n * @class\n * @extends {Readable}\n * @see https://fetch.spec.whatwg.org/#body\n */\nclass BodyReadable extends Readable {\n  /**\n   * @param {object} opts\n   * @param {(this: Readable, size: number) => void} opts.resume\n   * @param {() => (void | null)} opts.abort\n   * @param {string} [opts.contentType = '']\n   * @param {number} [opts.contentLength]\n   * @param {number} [opts.highWaterMark = 64 * 1024]\n   */\n  constructor ({\n    resume,\n    abort,\n    contentType = '',\n    contentLength,\n    highWaterMark = 64 * 1024 // Same as nodejs fs streams.\n  }) {\n    super({\n      autoDestroy: true,\n      read: resume,\n      highWaterMark\n    })\n\n    this._readableState.dataEmitted = false\n\n    this[kAbort] = abort\n\n    /** @type {Consume | null} */\n    this[kConsume] = null\n\n    /** @type {number} */\n    this[kBytesRead] = 0\n\n    /** @type {ReadableStream|null} */\n    this[kBody] = null\n\n    /** @type {boolean} */\n    this[kUsed] = false\n\n    /** @type {string} */\n    this[kContentType] = contentType\n\n    /** @type {number|null} */\n    this[kContentLength] = Number.isFinite(contentLength) ? contentLength : null\n\n    /**\n     * Is stream being consumed through Readable API?\n     * This is an optimization so that we avoid checking\n     * for 'data' and 'readable' listeners in the hot path\n     * inside push().\n     *\n     * @type {boolean}\n     */\n    this[kReading] = false\n  }\n\n  /**\n   * @param {Error|null} err\n   * @param {(error:(Error|null)) => void} callback\n   * @returns {void}\n   */\n  _destroy (err, callback) {\n    if (!err && !this._readableState.endEmitted) {\n      err = new RequestAbortedError()\n    }\n\n    if (err) {\n      this[kAbort]()\n    }\n\n    // Workaround for Node \"bug\". If the stream is destroyed in same\n    // tick as it is created, then a user who is waiting for a\n    // promise (i.e micro tick) for installing an 'error' listener will\n    // never get a chance and will always encounter an unhandled exception.\n    if (!this[kUsed]) {\n      setImmediate(callback, err)\n    } else {\n      callback(err)\n    }\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  on (event, listener) {\n    if (event === 'data' || event === 'readable') {\n      this[kReading] = true\n      this[kUsed] = true\n    }\n    return super.on(event, listener)\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  addListener (event, listener) {\n    return this.on(event, listener)\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  off (event, listener) {\n    const ret = super.off(event, listener)\n    if (event === 'data' || event === 'readable') {\n      this[kReading] = (\n        this.listenerCount('data') > 0 ||\n        this.listenerCount('readable') > 0\n      )\n    }\n    return ret\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  removeListener (event, listener) {\n    return this.off(event, listener)\n  }\n\n  /**\n   * @param {Buffer|null} chunk\n   * @returns {boolean}\n   */\n  push (chunk) {\n    if (chunk) {\n      this[kBytesRead] += chunk.length\n      if (this[kConsume]) {\n        consumePush(this[kConsume], chunk)\n        return this[kReading] ? super.push(chunk) : true\n      }\n    }\n\n    return super.push(chunk)\n  }\n\n  /**\n   * Consumes and returns the body as a string.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-text\n   * @returns {Promise<string>}\n   */\n  text () {\n    return consume(this, 'text')\n  }\n\n  /**\n   * Consumes and returns the body as a JavaScript Object.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-json\n   * @returns {Promise<unknown>}\n   */\n  json () {\n    return consume(this, 'json')\n  }\n\n  /**\n   * Consumes and returns the body as a Blob\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-blob\n   * @returns {Promise<Blob>}\n   */\n  blob () {\n    return consume(this, 'blob')\n  }\n\n  /**\n   * Consumes and returns the body as an Uint8Array.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-bytes\n   * @returns {Promise<Uint8Array>}\n   */\n  bytes () {\n    return consume(this, 'bytes')\n  }\n\n  /**\n   * Consumes and returns the body as an ArrayBuffer.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-arraybuffer\n   * @returns {Promise<ArrayBuffer>}\n   */\n  arrayBuffer () {\n    return consume(this, 'arrayBuffer')\n  }\n\n  /**\n   * Not implemented\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-formdata\n   * @throws {NotSupportedError}\n   */\n  async formData () {\n    // TODO: Implement.\n    throw new NotSupportedError()\n  }\n\n  /**\n   * Returns true if the body is not null and the body has been consumed.\n   * Otherwise, returns false.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-bodyused\n   * @readonly\n   * @returns {boolean}\n   */\n  get bodyUsed () {\n    return util.isDisturbed(this)\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#dom-body-body\n   * @readonly\n   * @returns {ReadableStream}\n   */\n  get body () {\n    if (!this[kBody]) {\n      this[kBody] = ReadableStreamFrom(this)\n      if (this[kConsume]) {\n        // TODO: Is this the best way to force a lock?\n        this[kBody].getReader() // Ensure stream is locked.\n        assert(this[kBody].locked)\n      }\n    }\n    return this[kBody]\n  }\n\n  /**\n   * Dumps the response body by reading `limit` number of bytes.\n   * @param {object} opts\n   * @param {number} [opts.limit = 131072] Number of bytes to read.\n   * @param {AbortSignal} [opts.signal] An AbortSignal to cancel the dump.\n   * @returns {Promise<null>}\n   */\n  dump (opts) {\n    const signal = opts?.signal\n\n    if (signal != null && (typeof signal !== 'object' || !('aborted' in signal))) {\n      return Promise.reject(new InvalidArgumentError('signal must be an AbortSignal'))\n    }\n\n    const limit = opts?.limit && Number.isFinite(opts.limit)\n      ? opts.limit\n      : 128 * 1024\n\n    if (signal?.aborted) {\n      return Promise.reject(signal.reason ?? new AbortError())\n    }\n\n    if (this._readableState.closeEmitted) {\n      return Promise.resolve(null)\n    }\n\n    return new Promise((resolve, reject) => {\n      if (\n        (this[kContentLength] && (this[kContentLength] > limit)) ||\n        this[kBytesRead] > limit\n      ) {\n        this.destroy(new AbortError())\n      }\n\n      if (signal) {\n        const onAbort = () => {\n          this.destroy(signal.reason ?? new AbortError())\n        }\n        signal.addEventListener('abort', onAbort)\n        this\n          .on('close', function () {\n            signal.removeEventListener('abort', onAbort)\n            if (signal.aborted) {\n              reject(signal.reason ?? new AbortError())\n            } else {\n              resolve(null)\n            }\n          })\n      } else {\n        this.on('close', resolve)\n      }\n\n      this\n        .on('error', noop)\n        .on('data', () => {\n          if (this[kBytesRead] > limit) {\n            this.destroy()\n          }\n        })\n        .resume()\n    })\n  }\n\n  /**\n   * @param {BufferEncoding} encoding\n   * @returns {this}\n   */\n  setEncoding (encoding) {\n    if (Buffer.isEncoding(encoding)) {\n      this._readableState.encoding = encoding\n    }\n    return this\n  }\n}\n\n/**\n * @see https://streams.spec.whatwg.org/#readablestream-locked\n * @param {BodyReadable} bodyReadable\n * @returns {boolean}\n */\nfunction isLocked (bodyReadable) {\n  // Consume is an implicit lock.\n  return bodyReadable[kBody]?.locked === true || bodyReadable[kConsume] !== null\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#body-unusable\n * @param {BodyReadable} bodyReadable\n * @returns {boolean}\n */\nfunction isUnusable (bodyReadable) {\n  return util.isDisturbed(bodyReadable) || isLocked(bodyReadable)\n}\n\n/**\n * @typedef {'text' | 'json' | 'blob' | 'bytes' | 'arrayBuffer'} ConsumeType\n */\n\n/**\n * @template {ConsumeType} T\n * @typedef {T extends 'text' ? string :\n *           T extends 'json' ? unknown :\n *           T extends 'blob' ? Blob :\n *           T extends 'arrayBuffer' ? ArrayBuffer :\n *           T extends 'bytes' ? Uint8Array :\n *           never\n * } ConsumeReturnType\n */\n/**\n * @typedef {object} Consume\n * @property {ConsumeType} type\n * @property {BodyReadable} stream\n * @property {((value?: any) => void)} resolve\n * @property {((err: Error) => void)} reject\n * @property {number} length\n * @property {Buffer[]} body\n */\n\n/**\n * @template {ConsumeType} T\n * @param {BodyReadable} stream\n * @param {T} type\n * @returns {Promise<ConsumeReturnType<T>>}\n */\nfunction consume (stream, type) {\n  assert(!stream[kConsume])\n\n  return new Promise((resolve, reject) => {\n    if (isUnusable(stream)) {\n      const rState = stream._readableState\n      if (rState.destroyed && rState.closeEmitted === false) {\n        stream\n          .on('error', reject)\n          .on('close', () => {\n            reject(new TypeError('unusable'))\n          })\n      } else {\n        reject(rState.errored ?? new TypeError('unusable'))\n      }\n    } else {\n      queueMicrotask(() => {\n        stream[kConsume] = {\n          type,\n          stream,\n          resolve,\n          reject,\n          length: 0,\n          body: []\n        }\n\n        stream\n          .on('error', function (err) {\n            consumeFinish(this[kConsume], err)\n          })\n          .on('close', function () {\n            if (this[kConsume].body !== null) {\n              consumeFinish(this[kConsume], new RequestAbortedError())\n            }\n          })\n\n        consumeStart(stream[kConsume])\n      })\n    }\n  })\n}\n\n/**\n * @param {Consume} consume\n * @returns {void}\n */\nfunction consumeStart (consume) {\n  if (consume.body === null) {\n    return\n  }\n\n  const { _readableState: state } = consume.stream\n\n  if (state.bufferIndex) {\n    const start = state.bufferIndex\n    const end = state.buffer.length\n    for (let n = start; n < end; n++) {\n      consumePush(consume, state.buffer[n])\n    }\n  } else {\n    for (const chunk of state.buffer) {\n      consumePush(consume, chunk)\n    }\n  }\n\n  if (state.endEmitted) {\n    consumeEnd(this[kConsume], this._readableState.encoding)\n  } else {\n    consume.stream.on('end', function () {\n      consumeEnd(this[kConsume], this._readableState.encoding)\n    })\n  }\n\n  consume.stream.resume()\n\n  while (consume.stream.read() != null) {\n    // Loop\n  }\n}\n\n/**\n * @param {Buffer[]} chunks\n * @param {number} length\n * @param {BufferEncoding} [encoding='utf8']\n * @returns {string}\n */\nfunction chunksDecode (chunks, length, encoding) {\n  if (chunks.length === 0 || length === 0) {\n    return ''\n  }\n  const buffer = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks, length)\n  const bufferLength = buffer.length\n\n  // Skip BOM.\n  const start =\n    bufferLength > 2 &&\n    buffer[0] === 0xef &&\n    buffer[1] === 0xbb &&\n    buffer[2] === 0xbf\n      ? 3\n      : 0\n  if (!encoding || encoding === 'utf8' || encoding === 'utf-8') {\n    return buffer.utf8Slice(start, bufferLength)\n  } else {\n    return buffer.subarray(start, bufferLength).toString(encoding)\n  }\n}\n\n/**\n * @param {Buffer[]} chunks\n * @param {number} length\n * @returns {Uint8Array}\n */\nfunction chunksConcat (chunks, length) {\n  if (chunks.length === 0 || length === 0) {\n    return new Uint8Array(0)\n  }\n  if (chunks.length === 1) {\n    // fast-path\n    return new Uint8Array(chunks[0])\n  }\n  const buffer = new Uint8Array(Buffer.allocUnsafeSlow(length).buffer)\n\n  let offset = 0\n  for (let i = 0; i < chunks.length; ++i) {\n    const chunk = chunks[i]\n    buffer.set(chunk, offset)\n    offset += chunk.length\n  }\n\n  return buffer\n}\n\n/**\n * @param {Consume} consume\n * @param {BufferEncoding} encoding\n * @returns {void}\n */\nfunction consumeEnd (consume, encoding) {\n  const { type, body, resolve, stream, length } = consume\n\n  try {\n    if (type === 'text') {\n      resolve(chunksDecode(body, length, encoding))\n    } else if (type === 'json') {\n      resolve(JSON.parse(chunksDecode(body, length, encoding)))\n    } else if (type === 'arrayBuffer') {\n      resolve(chunksConcat(body, length).buffer)\n    } else if (type === 'blob') {\n      resolve(new Blob(body, { type: stream[kContentType] }))\n    } else if (type === 'bytes') {\n      resolve(chunksConcat(body, length))\n    }\n\n    consumeFinish(consume)\n  } catch (err) {\n    stream.destroy(err)\n  }\n}\n\n/**\n * @param {Consume} consume\n * @param {Buffer} chunk\n * @returns {void}\n */\nfunction consumePush (consume, chunk) {\n  consume.length += chunk.length\n  consume.body.push(chunk)\n}\n\n/**\n * @param {Consume} consume\n * @param {Error} [err]\n * @returns {void}\n */\nfunction consumeFinish (consume, err) {\n  if (consume.body === null) {\n    return\n  }\n\n  if (err) {\n    consume.reject(err)\n  } else {\n    consume.resolve()\n  }\n\n  // Reset the consume object to allow for garbage collection.\n  consume.type = null\n  consume.stream = null\n  consume.resolve = null\n  consume.reject = null\n  consume.length = 0\n  consume.body = null\n}\n\nmodule.exports = {\n  Readable: BodyReadable,\n  chunksDecode\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { AsyncResource } = require('node:async_hooks')\nconst { Readable } = require('./readable')\nconst { InvalidArgumentError, RequestAbortedError } = require('../core/errors')\nconst util = require('../core/util')\n\nfunction noop () {}\n\nclass RequestHandler extends AsyncResource {\n  constructor (opts, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    const { signal, method, opaque, body, onInfo, responseHeaders, highWaterMark } = opts\n\n    try {\n      if (typeof callback !== 'function') {\n        throw new InvalidArgumentError('invalid callback')\n      }\n\n      if (highWaterMark && (typeof highWaterMark !== 'number' || highWaterMark < 0)) {\n        throw new InvalidArgumentError('invalid highWaterMark')\n      }\n\n      if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n        throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n      }\n\n      if (method === 'CONNECT') {\n        throw new InvalidArgumentError('invalid method')\n      }\n\n      if (onInfo && typeof onInfo !== 'function') {\n        throw new InvalidArgumentError('invalid onInfo callback')\n      }\n\n      super('UNDICI_REQUEST')\n    } catch (err) {\n      if (util.isStream(body)) {\n        util.destroy(body.on('error', noop), err)\n      }\n      throw err\n    }\n\n    this.method = method\n    this.responseHeaders = responseHeaders || null\n    this.opaque = opaque || null\n    this.callback = callback\n    this.res = null\n    this.abort = null\n    this.body = body\n    this.trailers = {}\n    this.context = null\n    this.onInfo = onInfo || null\n    this.highWaterMark = highWaterMark\n    this.reason = null\n    this.removeAbortListener = null\n\n    if (signal?.aborted) {\n      this.reason = signal.reason ?? new RequestAbortedError()\n    } else if (signal) {\n      this.removeAbortListener = util.addAbortListener(signal, () => {\n        this.reason = signal.reason ?? new RequestAbortedError()\n        if (this.res) {\n          util.destroy(this.res.on('error', noop), this.reason)\n        } else if (this.abort) {\n          this.abort(this.reason)\n        }\n      })\n    }\n  }\n\n  onConnect (abort, context) {\n    if (this.reason) {\n      abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.abort = abort\n    this.context = context\n  }\n\n  onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n    const { callback, opaque, abort, context, responseHeaders, highWaterMark } = this\n\n    const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n\n    if (statusCode < 200) {\n      if (this.onInfo) {\n        this.onInfo({ statusCode, headers })\n      }\n      return\n    }\n\n    const parsedHeaders = responseHeaders === 'raw' ? util.parseHeaders(rawHeaders) : headers\n    const contentType = parsedHeaders['content-type']\n    const contentLength = parsedHeaders['content-length']\n    const res = new Readable({\n      resume,\n      abort,\n      contentType,\n      contentLength: this.method !== 'HEAD' && contentLength\n        ? Number(contentLength)\n        : null,\n      highWaterMark\n    })\n\n    if (this.removeAbortListener) {\n      res.on('close', this.removeAbortListener)\n      this.removeAbortListener = null\n    }\n\n    this.callback = null\n    this.res = res\n    if (callback !== null) {\n      try {\n        this.runInAsyncScope(callback, null, null, {\n          statusCode,\n          statusText: statusMessage,\n          headers,\n          trailers: this.trailers,\n          opaque,\n          body: res,\n          context\n        })\n      } catch (err) {\n        // If the callback throws synchronously, we need to handle it\n        // Remove reference to res to allow res being garbage collected\n        this.res = null\n\n        // Destroy the response stream\n        util.destroy(res.on('error', noop), err)\n\n        // Use queueMicrotask to re-throw the error so it reaches uncaughtException\n        queueMicrotask(() => {\n          throw err\n        })\n      }\n    }\n  }\n\n  onData (chunk) {\n    return this.res.push(chunk)\n  }\n\n  onComplete (trailers) {\n    util.parseHeaders(trailers, this.trailers)\n    this.res.push(null)\n  }\n\n  onError (err) {\n    const { res, callback, body, opaque } = this\n\n    if (callback) {\n      // TODO: Does this need queueMicrotask?\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n\n    if (res) {\n      this.res = null\n      // Ensure all queued handlers are invoked before destroying res.\n      queueMicrotask(() => {\n        util.destroy(res.on('error', noop), err)\n      })\n    }\n\n    if (body) {\n      this.body = null\n\n      if (util.isStream(body)) {\n        body.on('error', noop)\n        util.destroy(body, err)\n      }\n    }\n\n    if (this.removeAbortListener) {\n      this.removeAbortListener()\n      this.removeAbortListener = null\n    }\n  }\n}\n\nfunction request (opts, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      request.call(this, opts, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const handler = new RequestHandler(opts, callback)\n\n    this.dispatch(opts, handler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = request\nmodule.exports.RequestHandler = RequestHandler\n", "'use strict'\n\nconst { addAbortListener } = require('../core/util')\nconst { RequestAbortedError } = require('../core/errors')\n\nconst kListener = Symbol('kListener')\nconst kSignal = Symbol('kSignal')\n\nfunction abort (self) {\n  if (self.abort) {\n    self.abort(self[kSignal]?.reason)\n  } else {\n    self.reason = self[kSignal]?.reason ?? new RequestAbortedError()\n  }\n  removeSignal(self)\n}\n\nfunction addSignal (self, signal) {\n  self.reason = null\n\n  self[kSignal] = null\n  self[kListener] = null\n\n  if (!signal) {\n    return\n  }\n\n  if (signal.aborted) {\n    abort(self)\n    return\n  }\n\n  self[kSignal] = signal\n  self[kListener] = () => {\n    abort(self)\n  }\n\n  addAbortListener(self[kSignal], self[kListener])\n}\n\nfunction removeSignal (self) {\n  if (!self[kSignal]) {\n    return\n  }\n\n  if ('removeEventListener' in self[kSignal]) {\n    self[kSignal].removeEventListener('abort', self[kListener])\n  } else {\n    self[kSignal].removeListener('abort', self[kListener])\n  }\n\n  self[kSignal] = null\n  self[kListener] = null\n}\n\nmodule.exports = {\n  addSignal,\n  removeSignal\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { finished } = require('node:stream')\nconst { AsyncResource } = require('node:async_hooks')\nconst { InvalidArgumentError, InvalidReturnValueError } = require('../core/errors')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nfunction noop () {}\n\nclass StreamHandler extends AsyncResource {\n  constructor (opts, factory, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    const { signal, method, opaque, body, onInfo, responseHeaders } = opts\n\n    try {\n      if (typeof callback !== 'function') {\n        throw new InvalidArgumentError('invalid callback')\n      }\n\n      if (typeof factory !== 'function') {\n        throw new InvalidArgumentError('invalid factory')\n      }\n\n      if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n        throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n      }\n\n      if (method === 'CONNECT') {\n        throw new InvalidArgumentError('invalid method')\n      }\n\n      if (onInfo && typeof onInfo !== 'function') {\n        throw new InvalidArgumentError('invalid onInfo callback')\n      }\n\n      super('UNDICI_STREAM')\n    } catch (err) {\n      if (util.isStream(body)) {\n        util.destroy(body.on('error', noop), err)\n      }\n      throw err\n    }\n\n    this.responseHeaders = responseHeaders || null\n    this.opaque = opaque || null\n    this.factory = factory\n    this.callback = callback\n    this.res = null\n    this.abort = null\n    this.context = null\n    this.trailers = null\n    this.body = body\n    this.onInfo = onInfo || null\n\n    if (util.isStream(body)) {\n      body.on('error', (err) => {\n        this.onError(err)\n      })\n    }\n\n    addSignal(this, signal)\n  }\n\n  onConnect (abort, context) {\n    if (this.reason) {\n      abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.abort = abort\n    this.context = context\n  }\n\n  onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n    const { factory, opaque, context, responseHeaders } = this\n\n    const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n\n    if (statusCode < 200) {\n      if (this.onInfo) {\n        this.onInfo({ statusCode, headers })\n      }\n      return\n    }\n\n    this.factory = null\n\n    if (factory === null) {\n      return\n    }\n\n    const res = this.runInAsyncScope(factory, null, {\n      statusCode,\n      headers,\n      opaque,\n      context\n    })\n\n    if (\n      !res ||\n      typeof res.write !== 'function' ||\n      typeof res.end !== 'function' ||\n      typeof res.on !== 'function'\n    ) {\n      throw new InvalidReturnValueError('expected Writable')\n    }\n\n    // TODO: Avoid finished. It registers an unnecessary amount of listeners.\n    finished(res, { readable: false }, (err) => {\n      const { callback, res, opaque, trailers, abort } = this\n\n      this.res = null\n      if (err || !res?.readable) {\n        util.destroy(res, err)\n      }\n\n      this.callback = null\n      this.runInAsyncScope(callback, null, err || null, { opaque, trailers })\n\n      if (err) {\n        abort()\n      }\n    })\n\n    res.on('drain', resume)\n\n    this.res = res\n\n    const needDrain = res.writableNeedDrain !== undefined\n      ? res.writableNeedDrain\n      : res._writableState?.needDrain\n\n    return needDrain !== true\n  }\n\n  onData (chunk) {\n    const { res } = this\n\n    return res ? res.write(chunk) : true\n  }\n\n  onComplete (trailers) {\n    const { res } = this\n\n    removeSignal(this)\n\n    if (!res) {\n      return\n    }\n\n    this.trailers = util.parseHeaders(trailers)\n\n    res.end()\n  }\n\n  onError (err) {\n    const { res, callback, opaque, body } = this\n\n    removeSignal(this)\n\n    this.factory = null\n\n    if (res) {\n      this.res = null\n      util.destroy(res, err)\n    } else if (callback) {\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n\n    if (body) {\n      this.body = null\n      util.destroy(body, err)\n    }\n  }\n}\n\nfunction stream (opts, factory, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      stream.call(this, opts, factory, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const handler = new StreamHandler(opts, factory, callback)\n\n    this.dispatch(opts, handler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = stream\n", "'use strict'\n\nconst {\n  Readable,\n  Duplex,\n  PassThrough\n} = require('node:stream')\nconst assert = require('node:assert')\nconst { AsyncResource } = require('node:async_hooks')\nconst {\n  InvalidArgumentError,\n  InvalidReturnValueError,\n  RequestAbortedError\n} = require('../core/errors')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nfunction noop () {}\n\nconst kResume = Symbol('resume')\n\nclass PipelineRequest extends Readable {\n  constructor () {\n    super({ autoDestroy: true })\n\n    this[kResume] = null\n  }\n\n  _read () {\n    const { [kResume]: resume } = this\n\n    if (resume) {\n      this[kResume] = null\n      resume()\n    }\n  }\n\n  _destroy (err, callback) {\n    this._read()\n\n    callback(err)\n  }\n}\n\nclass PipelineResponse extends Readable {\n  constructor (resume) {\n    super({ autoDestroy: true })\n    this[kResume] = resume\n  }\n\n  _read () {\n    this[kResume]()\n  }\n\n  _destroy (err, callback) {\n    if (!err && !this._readableState.endEmitted) {\n      err = new RequestAbortedError()\n    }\n\n    callback(err)\n  }\n}\n\nclass PipelineHandler extends AsyncResource {\n  constructor (opts, handler) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (typeof handler !== 'function') {\n      throw new InvalidArgumentError('invalid handler')\n    }\n\n    const { signal, method, opaque, onInfo, responseHeaders } = opts\n\n    if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n      throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n    }\n\n    if (method === 'CONNECT') {\n      throw new InvalidArgumentError('invalid method')\n    }\n\n    if (onInfo && typeof onInfo !== 'function') {\n      throw new InvalidArgumentError('invalid onInfo callback')\n    }\n\n    super('UNDICI_PIPELINE')\n\n    this.opaque = opaque || null\n    this.responseHeaders = responseHeaders || null\n    this.handler = handler\n    this.abort = null\n    this.context = null\n    this.onInfo = onInfo || null\n\n    this.req = new PipelineRequest().on('error', noop)\n\n    this.ret = new Duplex({\n      readableObjectMode: opts.objectMode,\n      autoDestroy: true,\n      read: () => {\n        const { body } = this\n\n        if (body?.resume) {\n          body.resume()\n        }\n      },\n      write: (chunk, encoding, callback) => {\n        const { req } = this\n\n        if (req.push(chunk, encoding) || req._readableState.destroyed) {\n          callback()\n        } else {\n          req[kResume] = callback\n        }\n      },\n      destroy: (err, callback) => {\n        const { body, req, res, ret, abort } = this\n\n        if (!err && !ret._readableState.endEmitted) {\n          err = new RequestAbortedError()\n        }\n\n        if (abort && err) {\n          abort()\n        }\n\n        util.destroy(body, err)\n        util.destroy(req, err)\n        util.destroy(res, err)\n\n        removeSignal(this)\n\n        callback(err)\n      }\n    }).on('prefinish', () => {\n      const { req } = this\n\n      // Node < 15 does not call _final in same tick.\n      req.push(null)\n    })\n\n    this.res = null\n\n    addSignal(this, signal)\n  }\n\n  onConnect (abort, context) {\n    const { res } = this\n\n    if (this.reason) {\n      abort(this.reason)\n      return\n    }\n\n    assert(!res, 'pipeline cannot be retried')\n\n    this.abort = abort\n    this.context = context\n  }\n\n  onHeaders (statusCode, rawHeaders, resume) {\n    const { opaque, handler, context } = this\n\n    if (statusCode < 200) {\n      if (this.onInfo) {\n        const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n        this.onInfo({ statusCode, headers })\n      }\n      return\n    }\n\n    this.res = new PipelineResponse(resume)\n\n    let body\n    try {\n      this.handler = null\n      const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n      body = this.runInAsyncScope(handler, null, {\n        statusCode,\n        headers,\n        opaque,\n        body: this.res,\n        context\n      })\n    } catch (err) {\n      this.res.on('error', noop)\n      throw err\n    }\n\n    if (!body || typeof body.on !== 'function') {\n      throw new InvalidReturnValueError('expected Readable')\n    }\n\n    body\n      .on('data', (chunk) => {\n        const { ret, body } = this\n\n        if (!ret.push(chunk) && body.pause) {\n          body.pause()\n        }\n      })\n      .on('error', (err) => {\n        const { ret } = this\n\n        util.destroy(ret, err)\n      })\n      .on('end', () => {\n        const { ret } = this\n\n        ret.push(null)\n      })\n      .on('close', () => {\n        const { ret } = this\n\n        if (!ret._readableState.ended) {\n          util.destroy(ret, new RequestAbortedError())\n        }\n      })\n\n    this.body = body\n  }\n\n  onData (chunk) {\n    const { res } = this\n    return res.push(chunk)\n  }\n\n  onComplete (trailers) {\n    const { res } = this\n    res.push(null)\n  }\n\n  onError (err) {\n    const { ret } = this\n    this.handler = null\n    util.destroy(ret, err)\n  }\n}\n\nfunction pipeline (opts, handler) {\n  try {\n    const pipelineHandler = new PipelineHandler(opts, handler)\n    this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler)\n    return pipelineHandler.ret\n  } catch (err) {\n    return new PassThrough().destroy(err)\n  }\n}\n\nmodule.exports = pipeline\n", "'use strict'\n\nconst { InvalidArgumentError, SocketError } = require('../core/errors')\nconst { AsyncResource } = require('node:async_hooks')\nconst assert = require('node:assert')\nconst util = require('../core/util')\nconst { kHTTP2Stream } = require('../core/symbols')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nclass UpgradeHandler extends AsyncResource {\n  constructor (opts, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    const { signal, opaque, responseHeaders } = opts\n\n    if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n      throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n    }\n\n    super('UNDICI_UPGRADE')\n\n    this.responseHeaders = responseHeaders || null\n    this.opaque = opaque || null\n    this.callback = callback\n    this.abort = null\n    this.context = null\n\n    addSignal(this, signal)\n  }\n\n  onConnect (abort, context) {\n    if (this.reason) {\n      abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.abort = abort\n    this.context = null\n  }\n\n  onHeaders () {\n    throw new SocketError('bad upgrade', null)\n  }\n\n  onUpgrade (statusCode, rawHeaders, socket) {\n    assert(socket[kHTTP2Stream] === true ? statusCode === 200 : statusCode === 101)\n\n    const { callback, opaque, context } = this\n\n    removeSignal(this)\n\n    this.callback = null\n    const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n    this.runInAsyncScope(callback, null, null, {\n      headers,\n      socket,\n      opaque,\n      context\n    })\n  }\n\n  onError (err) {\n    const { callback, opaque } = this\n\n    removeSignal(this)\n\n    if (callback) {\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n  }\n}\n\nfunction upgrade (opts, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      upgrade.call(this, opts, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const upgradeHandler = new UpgradeHandler(opts, callback)\n    const upgradeOpts = {\n      ...opts,\n      method: opts.method || 'GET',\n      upgrade: opts.protocol || 'Websocket'\n    }\n\n    this.dispatch(upgradeOpts, upgradeHandler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = upgrade\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { AsyncResource } = require('node:async_hooks')\nconst { InvalidArgumentError, SocketError } = require('../core/errors')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nclass ConnectHandler extends AsyncResource {\n  constructor (opts, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    const { signal, opaque, responseHeaders } = opts\n\n    if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n      throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n    }\n\n    super('UNDICI_CONNECT')\n\n    this.opaque = opaque || null\n    this.responseHeaders = responseHeaders || null\n    this.callback = callback\n    this.abort = null\n\n    addSignal(this, signal)\n  }\n\n  onConnect (abort, context) {\n    if (this.reason) {\n      abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.abort = abort\n    this.context = context\n  }\n\n  onHeaders () {\n    throw new SocketError('bad connect', null)\n  }\n\n  onUpgrade (statusCode, rawHeaders, socket) {\n    const { callback, opaque, context } = this\n\n    removeSignal(this)\n\n    this.callback = null\n\n    let headers = rawHeaders\n    // Indicates is an HTTP2Session\n    if (headers != null) {\n      headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n    }\n\n    this.runInAsyncScope(callback, null, null, {\n      statusCode,\n      headers,\n      socket,\n      opaque,\n      context\n    })\n  }\n\n  onError (err) {\n    const { callback, opaque } = this\n\n    removeSignal(this)\n\n    if (callback) {\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n  }\n}\n\nfunction connect (opts, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      connect.call(this, opts, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const connectHandler = new ConnectHandler(opts, callback)\n    const connectOptions = { ...opts, method: 'CONNECT' }\n\n    this.dispatch(connectOptions, connectHandler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = connect\n", "'use strict'\n\nmodule.exports.request = require('./api-request')\nmodule.exports.stream = require('./api-stream')\nmodule.exports.pipeline = require('./api-pipeline')\nmodule.exports.upgrade = require('./api-upgrade')\nmodule.exports.connect = require('./api-connect')\n", "'use strict'\n\nconst { UndiciError } = require('../core/errors')\n\nconst kMockNotMatchedError = Symbol.for('undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED')\n\n/**\n * The request does not match any registered mock dispatches.\n */\nclass MockNotMatchedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MockNotMatchedError'\n    this.message = message || 'The request does not match any registered mock dispatches'\n    this.code = 'UND_MOCK_ERR_MOCK_NOT_MATCHED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kMockNotMatchedError] === true\n  }\n\n  get [kMockNotMatchedError] () {\n    return true\n  }\n}\n\nmodule.exports = {\n  MockNotMatchedError\n}\n", "'use strict'\n\nmodule.exports = {\n  kAgent: Symbol('agent'),\n  kOptions: Symbol('options'),\n  kFactory: Symbol('factory'),\n  kDispatches: Symbol('dispatches'),\n  kDispatchKey: Symbol('dispatch key'),\n  kDefaultHeaders: Symbol('default headers'),\n  kDefaultTrailers: Symbol('default trailers'),\n  kContentLength: Symbol('content length'),\n  kMockAgent: Symbol('mock agent'),\n  kMockAgentSet: Symbol('mock agent set'),\n  kMockAgentGet: Symbol('mock agent get'),\n  kMockDispatch: Symbol('mock dispatch'),\n  kClose: Symbol('close'),\n  kOriginalClose: Symbol('original agent close'),\n  kOriginalDispatch: Symbol('original dispatch'),\n  kOrigin: Symbol('origin'),\n  kIsMockActive: Symbol('is mock active'),\n  kNetConnect: Symbol('net connect'),\n  kGetNetConnect: Symbol('get net connect'),\n  kConnected: Symbol('connected'),\n  kIgnoreTrailingSlash: Symbol('ignore trailing slash'),\n  kMockAgentMockCallHistoryInstance: Symbol('mock agent mock call history name'),\n  kMockAgentRegisterCallHistory: Symbol('mock agent register mock call history'),\n  kMockAgentAddCallHistoryLog: Symbol('mock agent add call history log'),\n  kMockAgentIsCallHistoryEnabled: Symbol('mock agent is call history enabled'),\n  kMockAgentAcceptsNonStandardSearchParameters: Symbol('mock agent accepts non standard search parameters'),\n  kMockCallHistoryAddLog: Symbol('mock call history add log'),\n  kTotalDispatchCount: Symbol('total dispatch count')\n}\n", "'use strict'\n\nconst { MockNotMatchedError } = require('./mock-errors')\nconst {\n  kDispatches,\n  kMockAgent,\n  kOriginalDispatch,\n  kOrigin,\n  kGetNetConnect,\n  kTotalDispatchCount\n} = require('./mock-symbols')\nconst { serializePathWithQuery } = require('../core/util')\nconst { STATUS_CODES } = require('node:http')\nconst {\n  types: {\n    isPromise\n  }\n} = require('node:util')\nconst { InvalidArgumentError } = require('../core/errors')\n\nfunction matchValue (match, value) {\n  if (typeof match === 'string') {\n    return match === value\n  }\n  if (match instanceof RegExp) {\n    return match.test(value)\n  }\n  if (typeof match === 'function') {\n    return match(value) === true\n  }\n  return false\n}\n\nfunction lowerCaseEntries (headers) {\n  return Object.fromEntries(\n    Object.entries(headers).map(([headerName, headerValue]) => {\n      return [headerName.toLocaleLowerCase(), headerValue]\n    })\n  )\n}\n\n/**\n * @param {import('../../index').Headers|string[]|Record<string, string>} headers\n * @param {string} key\n */\nfunction getHeaderByName (headers, key) {\n  if (Array.isArray(headers)) {\n    for (let i = 0; i < headers.length; i += 2) {\n      if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) {\n        return headers[i + 1]\n      }\n    }\n\n    return undefined\n  } else if (typeof headers.get === 'function') {\n    return headers.get(key)\n  } else {\n    return lowerCaseEntries(headers)[key.toLocaleLowerCase()]\n  }\n}\n\n/** @param {string[]} headers */\nfunction buildHeadersFromArray (headers) { // fetch HeadersList\n  const clone = headers.slice()\n  const entries = []\n  for (let index = 0; index < clone.length; index += 2) {\n    entries.push([clone[index], clone[index + 1]])\n  }\n  return Object.fromEntries(entries)\n}\n\nfunction matchHeaders (mockDispatch, headers) {\n  if (typeof mockDispatch.headers === 'function') {\n    if (Array.isArray(headers)) { // fetch HeadersList\n      headers = buildHeadersFromArray(headers)\n    }\n    return mockDispatch.headers(headers ? lowerCaseEntries(headers) : {})\n  }\n  if (typeof mockDispatch.headers === 'undefined') {\n    return true\n  }\n  if (typeof headers !== 'object' || typeof mockDispatch.headers !== 'object') {\n    return false\n  }\n\n  for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch.headers)) {\n    const headerValue = getHeaderByName(headers, matchHeaderName)\n\n    if (!matchValue(matchHeaderValue, headerValue)) {\n      return false\n    }\n  }\n  return true\n}\n\nfunction normalizeSearchParams (query) {\n  if (typeof query !== 'string') {\n    return query\n  }\n\n  const originalQp = new URLSearchParams(query)\n  const normalizedQp = new URLSearchParams()\n\n  for (let [key, value] of originalQp.entries()) {\n    key = key.replace('[]', '')\n\n    const valueRepresentsString = /^(['\"]).*\\1$/.test(value)\n    if (valueRepresentsString) {\n      normalizedQp.append(key, value)\n      continue\n    }\n\n    if (value.includes(',')) {\n      const values = value.split(',')\n      for (const v of values) {\n        normalizedQp.append(key, v)\n      }\n      continue\n    }\n\n    normalizedQp.append(key, value)\n  }\n\n  return normalizedQp\n}\n\nfunction safeUrl (path) {\n  if (typeof path !== 'string') {\n    return path\n  }\n  const pathSegments = path.split('?', 3)\n  if (pathSegments.length !== 2) {\n    return path\n  }\n\n  const qp = new URLSearchParams(pathSegments.pop())\n  qp.sort()\n  return [...pathSegments, qp.toString()].join('?')\n}\n\nfunction matchKey (mockDispatch, { path, method, body, headers }) {\n  const pathMatch = matchValue(mockDispatch.path, path)\n  const methodMatch = matchValue(mockDispatch.method, method)\n  const bodyMatch = typeof mockDispatch.body !== 'undefined' ? matchValue(mockDispatch.body, body) : true\n  const headersMatch = matchHeaders(mockDispatch, headers)\n  return pathMatch && methodMatch && bodyMatch && headersMatch\n}\n\nfunction getResponseData (data) {\n  if (Buffer.isBuffer(data)) {\n    return data\n  } else if (data instanceof Uint8Array) {\n    return data\n  } else if (data instanceof ArrayBuffer) {\n    return data\n  } else if (typeof data === 'object') {\n    return JSON.stringify(data)\n  } else if (data) {\n    return data.toString()\n  } else {\n    return ''\n  }\n}\n\nfunction getMockDispatch (mockDispatches, key) {\n  const basePath = key.query ? serializePathWithQuery(key.path, key.query) : key.path\n  const resolvedPath = typeof basePath === 'string' ? safeUrl(basePath) : basePath\n\n  const resolvedPathWithoutTrailingSlash = removeTrailingSlash(resolvedPath)\n\n  // Match path\n  let matchedMockDispatches = mockDispatches\n    .filter(({ consumed }) => !consumed)\n    .filter(({ path, ignoreTrailingSlash }) => {\n      return ignoreTrailingSlash\n        ? matchValue(removeTrailingSlash(safeUrl(path)), resolvedPathWithoutTrailingSlash)\n        : matchValue(safeUrl(path), resolvedPath)\n    })\n  if (matchedMockDispatches.length === 0) {\n    throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`)\n  }\n\n  // Match method\n  matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method))\n  if (matchedMockDispatches.length === 0) {\n    throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}' on path '${resolvedPath}'`)\n  }\n\n  // Match body\n  matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== 'undefined' ? matchValue(body, key.body) : true)\n  if (matchedMockDispatches.length === 0) {\n    throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}' on path '${resolvedPath}'`)\n  }\n\n  // Match headers\n  matchedMockDispatches = matchedMockDispatches.filter((mockDispatch) => matchHeaders(mockDispatch, key.headers))\n  if (matchedMockDispatches.length === 0) {\n    const headers = typeof key.headers === 'object' ? JSON.stringify(key.headers) : key.headers\n    throw new MockNotMatchedError(`Mock dispatch not matched for headers '${headers}' on path '${resolvedPath}'`)\n  }\n\n  return matchedMockDispatches[0]\n}\n\nfunction addMockDispatch (mockDispatches, key, data, opts) {\n  const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false, ...opts }\n  const replyData = typeof data === 'function' ? { callback: data } : { ...data }\n  const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } }\n  mockDispatches.push(newMockDispatch)\n  // Track total number of intercepts ever registered for better error messages\n  mockDispatches[kTotalDispatchCount] = (mockDispatches[kTotalDispatchCount] || 0) + 1\n  return newMockDispatch\n}\n\nfunction deleteMockDispatch (mockDispatches, key) {\n  const index = mockDispatches.findIndex(dispatch => {\n    if (!dispatch.consumed) {\n      return false\n    }\n    return matchKey(dispatch, key)\n  })\n  if (index !== -1) {\n    mockDispatches.splice(index, 1)\n  }\n}\n\n/**\n * @param {string} path Path to remove trailing slash from\n */\nfunction removeTrailingSlash (path) {\n  while (path.endsWith('/')) {\n    path = path.slice(0, -1)\n  }\n\n  if (path.length === 0) {\n    path = '/'\n  }\n\n  return path\n}\n\nfunction buildKey (opts) {\n  const { path, method, body, headers, query } = opts\n\n  return {\n    path,\n    method,\n    body,\n    headers,\n    query\n  }\n}\n\nfunction generateKeyValues (data) {\n  const keys = Object.keys(data)\n  const result = []\n  for (let i = 0; i < keys.length; ++i) {\n    const key = keys[i]\n    const value = data[key]\n    const name = Buffer.from(`${key}`)\n    if (Array.isArray(value)) {\n      for (let j = 0; j < value.length; ++j) {\n        result.push(name, Buffer.from(`${value[j]}`))\n      }\n    } else {\n      result.push(name, Buffer.from(`${value}`))\n    }\n  }\n  return result\n}\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status\n * @param {number} statusCode\n */\nfunction getStatusText (statusCode) {\n  return STATUS_CODES[statusCode] || 'unknown'\n}\n\nasync function getResponse (body) {\n  const buffers = []\n  for await (const data of body) {\n    buffers.push(data)\n  }\n  return Buffer.concat(buffers).toString('utf8')\n}\n\n/**\n * Mock dispatch function used to simulate undici dispatches\n */\nfunction mockDispatch (opts, handler) {\n  // Get mock dispatch from built key\n  const key = buildKey(opts)\n  const mockDispatch = getMockDispatch(this[kDispatches], key)\n\n  mockDispatch.timesInvoked++\n\n  // Here's where we resolve a callback if a callback is present for the dispatch data.\n  if (mockDispatch.data.callback) {\n    mockDispatch.data = { ...mockDispatch.data, ...mockDispatch.data.callback(opts) }\n  }\n\n  // Parse mockDispatch data\n  const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch\n  const { timesInvoked, times } = mockDispatch\n\n  // If it's used up and not persistent, mark as consumed\n  mockDispatch.consumed = !persist && timesInvoked >= times\n  mockDispatch.pending = timesInvoked < times\n\n  // If specified, trigger dispatch error\n  if (error !== null) {\n    deleteMockDispatch(this[kDispatches], key)\n    handler.onError(error)\n    return true\n  }\n\n  // Track whether the request has been aborted\n  let aborted = false\n  let timer = null\n\n  function abort (err) {\n    if (aborted) {\n      return\n    }\n    aborted = true\n\n    // Clear the pending delayed response if any\n    if (timer !== null) {\n      clearTimeout(timer)\n      timer = null\n    }\n\n    // Notify the handler of the abort\n    handler.onError(err)\n  }\n\n  // Call onConnect to allow the handler to register the abort callback\n  handler.onConnect?.(abort, null)\n\n  // Handle the request with a delay if necessary\n  if (typeof delay === 'number' && delay > 0) {\n    timer = setTimeout(() => {\n      timer = null\n      handleReply(this[kDispatches])\n    }, delay)\n  } else {\n    handleReply(this[kDispatches])\n  }\n\n  function handleReply (mockDispatches, _data = data) {\n    // Don't send response if the request was aborted\n    if (aborted) {\n      return\n    }\n\n    // fetch's HeadersList is a 1D string array\n    const optsHeaders = Array.isArray(opts.headers)\n      ? buildHeadersFromArray(opts.headers)\n      : opts.headers\n    const body = typeof _data === 'function'\n      ? _data({ ...opts, headers: optsHeaders })\n      : _data\n\n    // util.types.isPromise is likely needed for jest.\n    if (isPromise(body)) {\n      // If handleReply is asynchronous, throwing an error\n      // in the callback will reject the promise, rather than\n      // synchronously throw the error, which breaks some tests.\n      // Rather, we wait for the callback to resolve if it is a\n      // promise, and then re-run handleReply with the new body.\n      return body.then((newData) => handleReply(mockDispatches, newData))\n    }\n\n    // Check again if aborted after async body resolution\n    if (aborted) {\n      return\n    }\n\n    const responseData = getResponseData(body)\n    const responseHeaders = generateKeyValues(headers)\n    const responseTrailers = generateKeyValues(trailers)\n\n    handler.onHeaders?.(statusCode, responseHeaders, resume, getStatusText(statusCode))\n    handler.onData?.(Buffer.from(responseData))\n    handler.onComplete?.(responseTrailers)\n    deleteMockDispatch(mockDispatches, key)\n  }\n\n  function resume () {}\n\n  return true\n}\n\nfunction buildMockDispatch () {\n  const agent = this[kMockAgent]\n  const origin = this[kOrigin]\n  const originalDispatch = this[kOriginalDispatch]\n\n  return function dispatch (opts, handler) {\n    if (agent.isMockActive) {\n      try {\n        mockDispatch.call(this, opts, handler)\n      } catch (error) {\n        if (error.code === 'UND_MOCK_ERR_MOCK_NOT_MATCHED') {\n          const netConnect = agent[kGetNetConnect]()\n          const totalInterceptsCount = this[kDispatches][kTotalDispatchCount] || this[kDispatches].length\n          const pendingInterceptsCount = this[kDispatches].filter(({ consumed }) => !consumed).length\n          const interceptsMessage = `, ${pendingInterceptsCount} interceptor(s) remaining out of ${totalInterceptsCount} defined`\n          if (netConnect === false) {\n            throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)${interceptsMessage}`)\n          }\n          if (checkNetConnect(netConnect, origin)) {\n            originalDispatch.call(this, opts, handler)\n          } else {\n            throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)${interceptsMessage}`)\n          }\n        } else {\n          throw error\n        }\n      }\n    } else {\n      originalDispatch.call(this, opts, handler)\n    }\n  }\n}\n\nfunction checkNetConnect (netConnect, origin) {\n  const url = new URL(origin)\n  if (netConnect === true) {\n    return true\n  } else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url.host))) {\n    return true\n  }\n  return false\n}\n\nfunction normalizeOrigin (origin) {\n  if (typeof origin !== 'string' && !(origin instanceof URL)) {\n    return origin\n  }\n\n  if (origin instanceof URL) {\n    return origin.origin\n  }\n\n  return origin.toLowerCase()\n}\n\nfunction buildAndValidateMockOptions (opts) {\n  const { agent, ...mockOptions } = opts\n\n  if ('enableCallHistory' in mockOptions && typeof mockOptions.enableCallHistory !== 'boolean') {\n    throw new InvalidArgumentError('options.enableCallHistory must to be a boolean')\n  }\n\n  if ('acceptNonStandardSearchParameters' in mockOptions && typeof mockOptions.acceptNonStandardSearchParameters !== 'boolean') {\n    throw new InvalidArgumentError('options.acceptNonStandardSearchParameters must to be a boolean')\n  }\n\n  if ('ignoreTrailingSlash' in mockOptions && typeof mockOptions.ignoreTrailingSlash !== 'boolean') {\n    throw new InvalidArgumentError('options.ignoreTrailingSlash must to be a boolean')\n  }\n\n  return mockOptions\n}\n\nmodule.exports = {\n  getResponseData,\n  getMockDispatch,\n  addMockDispatch,\n  deleteMockDispatch,\n  buildKey,\n  generateKeyValues,\n  matchValue,\n  getResponse,\n  getStatusText,\n  mockDispatch,\n  buildMockDispatch,\n  checkNetConnect,\n  buildAndValidateMockOptions,\n  getHeaderByName,\n  buildHeadersFromArray,\n  normalizeSearchParams,\n  normalizeOrigin\n}\n", "'use strict'\n\nconst { getResponseData, buildKey, addMockDispatch } = require('./mock-utils')\nconst {\n  kDispatches,\n  kDispatchKey,\n  kDefaultHeaders,\n  kDefaultTrailers,\n  kContentLength,\n  kMockDispatch,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst { InvalidArgumentError } = require('../core/errors')\nconst { serializePathWithQuery } = require('../core/util')\n\n/**\n * Defines the scope API for an interceptor reply\n */\nclass MockScope {\n  constructor (mockDispatch) {\n    this[kMockDispatch] = mockDispatch\n  }\n\n  /**\n   * Delay a reply by a set amount in ms.\n   */\n  delay (waitInMs) {\n    if (typeof waitInMs !== 'number' || !Number.isInteger(waitInMs) || waitInMs <= 0) {\n      throw new InvalidArgumentError('waitInMs must be a valid integer > 0')\n    }\n\n    this[kMockDispatch].delay = waitInMs\n    return this\n  }\n\n  /**\n   * For a defined reply, never mark as consumed.\n   */\n  persist () {\n    this[kMockDispatch].persist = true\n    return this\n  }\n\n  /**\n   * Allow one to define a reply for a set amount of matching requests.\n   */\n  times (repeatTimes) {\n    if (typeof repeatTimes !== 'number' || !Number.isInteger(repeatTimes) || repeatTimes <= 0) {\n      throw new InvalidArgumentError('repeatTimes must be a valid integer > 0')\n    }\n\n    this[kMockDispatch].times = repeatTimes\n    return this\n  }\n}\n\n/**\n * Defines an interceptor for a Mock\n */\nclass MockInterceptor {\n  constructor (opts, mockDispatches) {\n    if (typeof opts !== 'object') {\n      throw new InvalidArgumentError('opts must be an object')\n    }\n    if (typeof opts.path === 'undefined') {\n      throw new InvalidArgumentError('opts.path must be defined')\n    }\n    if (typeof opts.method === 'undefined') {\n      opts.method = 'GET'\n    }\n    // See https://github.com/nodejs/undici/issues/1245\n    // As per RFC 3986, clients are not supposed to send URI\n    // fragments to servers when they retrieve a document,\n    if (typeof opts.path === 'string') {\n      if (opts.query) {\n        opts.path = serializePathWithQuery(opts.path, opts.query)\n      } else {\n        // Matches https://github.com/nodejs/undici/blob/main/lib/web/fetch/index.js#L1811\n        const parsedURL = new URL(opts.path, 'data://')\n        opts.path = parsedURL.pathname + parsedURL.search\n      }\n    }\n    if (typeof opts.method === 'string') {\n      opts.method = opts.method.toUpperCase()\n    }\n\n    this[kDispatchKey] = buildKey(opts)\n    this[kDispatches] = mockDispatches\n    this[kIgnoreTrailingSlash] = opts.ignoreTrailingSlash ?? false\n    this[kDefaultHeaders] = {}\n    this[kDefaultTrailers] = {}\n    this[kContentLength] = false\n  }\n\n  createMockScopeDispatchData ({ statusCode, data, responseOptions }) {\n    const responseData = getResponseData(data)\n    const contentLength = this[kContentLength] ? { 'content-length': responseData.length } : {}\n    const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers }\n    const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers }\n\n    return { statusCode, data, headers, trailers }\n  }\n\n  validateReplyParameters (replyParameters) {\n    if (typeof replyParameters.statusCode === 'undefined') {\n      throw new InvalidArgumentError('statusCode must be defined')\n    }\n    if (typeof replyParameters.responseOptions !== 'object' || replyParameters.responseOptions === null) {\n      throw new InvalidArgumentError('responseOptions must be an object')\n    }\n  }\n\n  /**\n   * Mock an undici request with a defined reply.\n   */\n  reply (replyOptionsCallbackOrStatusCode) {\n    // Values of reply aren't available right now as they\n    // can only be available when the reply callback is invoked.\n    if (typeof replyOptionsCallbackOrStatusCode === 'function') {\n      // We'll first wrap the provided callback in another function,\n      // this function will properly resolve the data from the callback\n      // when invoked.\n      const wrappedDefaultsCallback = (opts) => {\n        // Our reply options callback contains the parameter for statusCode, data and options.\n        const resolvedData = replyOptionsCallbackOrStatusCode(opts)\n\n        // Check if it is in the right format\n        if (typeof resolvedData !== 'object' || resolvedData === null) {\n          throw new InvalidArgumentError('reply options callback must return an object')\n        }\n\n        const replyParameters = { data: '', responseOptions: {}, ...resolvedData }\n        this.validateReplyParameters(replyParameters)\n        // Since the values can be obtained immediately we return them\n        // from this higher order function that will be resolved later.\n        return {\n          ...this.createMockScopeDispatchData(replyParameters)\n        }\n      }\n\n      // Add usual dispatch data, but this time set the data parameter to function that will eventually provide data.\n      const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })\n      return new MockScope(newMockDispatch)\n    }\n\n    // We can have either one or three parameters, if we get here,\n    // we should have 1-3 parameters. So we spread the arguments of\n    // this function to obtain the parameters, since replyData will always\n    // just be the statusCode.\n    const replyParameters = {\n      statusCode: replyOptionsCallbackOrStatusCode,\n      data: arguments[1] === undefined ? '' : arguments[1],\n      responseOptions: arguments[2] === undefined ? {} : arguments[2]\n    }\n    this.validateReplyParameters(replyParameters)\n\n    // Send in-already provided data like usual\n    const dispatchData = this.createMockScopeDispatchData(replyParameters)\n    const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })\n    return new MockScope(newMockDispatch)\n  }\n\n  /**\n   * Mock an undici request with a defined error.\n   */\n  replyWithError (error) {\n    if (typeof error === 'undefined') {\n      throw new InvalidArgumentError('error must be defined')\n    }\n\n    const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error }, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })\n    return new MockScope(newMockDispatch)\n  }\n\n  /**\n   * Set default reply headers on the interceptor for subsequent replies\n   */\n  defaultReplyHeaders (headers) {\n    if (typeof headers === 'undefined') {\n      throw new InvalidArgumentError('headers must be defined')\n    }\n\n    this[kDefaultHeaders] = headers\n    return this\n  }\n\n  /**\n   * Set default reply trailers on the interceptor for subsequent replies\n   */\n  defaultReplyTrailers (trailers) {\n    if (typeof trailers === 'undefined') {\n      throw new InvalidArgumentError('trailers must be defined')\n    }\n\n    this[kDefaultTrailers] = trailers\n    return this\n  }\n\n  /**\n   * Set reply content length header for replies on the interceptor\n   */\n  replyContentLength () {\n    this[kContentLength] = true\n    return this\n  }\n}\n\nmodule.exports.MockInterceptor = MockInterceptor\nmodule.exports.MockScope = MockScope\n", "'use strict'\n\nconst { promisify } = require('node:util')\nconst Client = require('../dispatcher/client')\nconst { buildMockDispatch } = require('./mock-utils')\nconst {\n  kDispatches,\n  kMockAgent,\n  kClose,\n  kOriginalClose,\n  kOrigin,\n  kOriginalDispatch,\n  kConnected,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst { MockInterceptor } = require('./mock-interceptor')\nconst Symbols = require('../core/symbols')\nconst { InvalidArgumentError } = require('../core/errors')\n\n/**\n * MockClient provides an API that extends the Client to influence the mockDispatches.\n */\nclass MockClient extends Client {\n  constructor (origin, opts) {\n    if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') {\n      throw new InvalidArgumentError('Argument opts.agent must implement Agent')\n    }\n\n    super(origin, opts)\n\n    this[kMockAgent] = opts.agent\n    this[kOrigin] = origin\n    this[kIgnoreTrailingSlash] = opts.ignoreTrailingSlash ?? false\n    this[kDispatches] = []\n    this[kConnected] = 1\n    this[kOriginalDispatch] = this.dispatch\n    this[kOriginalClose] = this.close.bind(this)\n\n    this.dispatch = buildMockDispatch.call(this)\n    this.close = this[kClose]\n  }\n\n  get [Symbols.kConnected] () {\n    return this[kConnected]\n  }\n\n  /**\n   * Sets up the base interceptor for mocking replies from undici.\n   */\n  intercept (opts) {\n    return new MockInterceptor(\n      opts && { ignoreTrailingSlash: this[kIgnoreTrailingSlash], ...opts },\n      this[kDispatches]\n    )\n  }\n\n  cleanMocks () {\n    this[kDispatches] = []\n  }\n\n  async [kClose] () {\n    await promisify(this[kOriginalClose])()\n    this[kConnected] = 0\n    this[kMockAgent][Symbols.kClients].delete(this[kOrigin])\n  }\n}\n\nmodule.exports = MockClient\n", "'use strict'\n\nconst { kMockCallHistoryAddLog } = require('./mock-symbols')\nconst { InvalidArgumentError } = require('../core/errors')\n\nfunction handleFilterCallsWithOptions (criteria, options, handler, store) {\n  switch (options.operator) {\n    case 'OR':\n      store.push(...handler(criteria))\n\n      return store\n    case 'AND':\n      return handler.call({ logs: store }, criteria)\n    default:\n      // guard -- should never happens because buildAndValidateFilterCallsOptions is called before\n      throw new InvalidArgumentError('options.operator must to be a case insensitive string equal to \\'OR\\' or \\'AND\\'')\n  }\n}\n\nfunction buildAndValidateFilterCallsOptions (options = {}) {\n  const finalOptions = {}\n\n  if ('operator' in options) {\n    if (typeof options.operator !== 'string' || (options.operator.toUpperCase() !== 'OR' && options.operator.toUpperCase() !== 'AND')) {\n      throw new InvalidArgumentError('options.operator must to be a case insensitive string equal to \\'OR\\' or \\'AND\\'')\n    }\n\n    return {\n      ...finalOptions,\n      operator: options.operator.toUpperCase()\n    }\n  }\n\n  return finalOptions\n}\n\nfunction makeFilterCalls (parameterName) {\n  return (parameterValue) => {\n    if (typeof parameterValue === 'string' || parameterValue == null) {\n      return this.logs.filter((log) => {\n        return log[parameterName] === parameterValue\n      })\n    }\n    if (parameterValue instanceof RegExp) {\n      return this.logs.filter((log) => {\n        return parameterValue.test(log[parameterName])\n      })\n    }\n\n    throw new InvalidArgumentError(`${parameterName} parameter should be one of string, regexp, undefined or null`)\n  }\n}\nfunction computeUrlWithMaybeSearchParameters (requestInit) {\n  // path can contains query url parameters\n  // or query can contains query url parameters\n  try {\n    const url = new URL(requestInit.path, requestInit.origin)\n\n    // requestInit.path contains query url parameters\n    // requestInit.query is then undefined\n    if (url.search.length !== 0) {\n      return url\n    }\n\n    // requestInit.query can be populated here\n    url.search = new URLSearchParams(requestInit.query).toString()\n\n    return url\n  } catch (error) {\n    throw new InvalidArgumentError('An error occurred when computing MockCallHistoryLog.url', { cause: error })\n  }\n}\n\nclass MockCallHistoryLog {\n  constructor (requestInit = {}) {\n    this.body = requestInit.body\n    this.headers = requestInit.headers\n    this.method = requestInit.method\n\n    const url = computeUrlWithMaybeSearchParameters(requestInit)\n\n    this.fullUrl = url.toString()\n    this.origin = url.origin\n    this.path = url.pathname\n    this.searchParams = Object.fromEntries(url.searchParams)\n    this.protocol = url.protocol\n    this.host = url.host\n    this.port = url.port\n    this.hash = url.hash\n  }\n\n  toMap () {\n    return new Map([\n      ['protocol', this.protocol],\n      ['host', this.host],\n      ['port', this.port],\n      ['origin', this.origin],\n      ['path', this.path],\n      ['hash', this.hash],\n      ['searchParams', this.searchParams],\n      ['fullUrl', this.fullUrl],\n      ['method', this.method],\n      ['body', this.body],\n      ['headers', this.headers]]\n    )\n  }\n\n  toString () {\n    const options = { betweenKeyValueSeparator: '->', betweenPairSeparator: '|' }\n    let result = ''\n\n    this.toMap().forEach((value, key) => {\n      if (typeof value === 'string' || value === undefined || value === null) {\n        result = `${result}${key}${options.betweenKeyValueSeparator}${value}${options.betweenPairSeparator}`\n      }\n      if ((typeof value === 'object' && value !== null) || Array.isArray(value)) {\n        result = `${result}${key}${options.betweenKeyValueSeparator}${JSON.stringify(value)}${options.betweenPairSeparator}`\n      }\n      // maybe miss something for non Record / Array headers and searchParams here\n    })\n\n    // delete last betweenPairSeparator\n    return result.slice(0, -1)\n  }\n}\n\nclass MockCallHistory {\n  logs = []\n\n  calls () {\n    return this.logs\n  }\n\n  firstCall () {\n    return this.logs.at(0)\n  }\n\n  lastCall () {\n    return this.logs.at(-1)\n  }\n\n  nthCall (number) {\n    if (typeof number !== 'number') {\n      throw new InvalidArgumentError('nthCall must be called with a number')\n    }\n    if (!Number.isInteger(number)) {\n      throw new InvalidArgumentError('nthCall must be called with an integer')\n    }\n    if (Math.sign(number) !== 1) {\n      throw new InvalidArgumentError('nthCall must be called with a positive value. use firstCall or lastCall instead')\n    }\n\n    // non zero based index. this is more human readable\n    return this.logs.at(number - 1)\n  }\n\n  filterCalls (criteria, options) {\n    // perf\n    if (this.logs.length === 0) {\n      return this.logs\n    }\n    if (typeof criteria === 'function') {\n      return this.logs.filter(criteria)\n    }\n    if (criteria instanceof RegExp) {\n      return this.logs.filter((log) => {\n        return criteria.test(log.toString())\n      })\n    }\n    if (typeof criteria === 'object' && criteria !== null) {\n      // no criteria - returning all logs\n      if (Object.keys(criteria).length === 0) {\n        return this.logs\n      }\n\n      const finalOptions = { operator: 'OR', ...buildAndValidateFilterCallsOptions(options) }\n\n      let maybeDuplicatedLogsFiltered = []\n      if ('protocol' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.protocol, finalOptions, this.filterCallsByProtocol, maybeDuplicatedLogsFiltered)\n      }\n      if ('host' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.host, finalOptions, this.filterCallsByHost, maybeDuplicatedLogsFiltered)\n      }\n      if ('port' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.port, finalOptions, this.filterCallsByPort, maybeDuplicatedLogsFiltered)\n      }\n      if ('origin' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.origin, finalOptions, this.filterCallsByOrigin, maybeDuplicatedLogsFiltered)\n      }\n      if ('path' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.path, finalOptions, this.filterCallsByPath, maybeDuplicatedLogsFiltered)\n      }\n      if ('hash' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.hash, finalOptions, this.filterCallsByHash, maybeDuplicatedLogsFiltered)\n      }\n      if ('fullUrl' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.fullUrl, finalOptions, this.filterCallsByFullUrl, maybeDuplicatedLogsFiltered)\n      }\n      if ('method' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.method, finalOptions, this.filterCallsByMethod, maybeDuplicatedLogsFiltered)\n      }\n\n      const uniqLogsFiltered = [...new Set(maybeDuplicatedLogsFiltered)]\n\n      return uniqLogsFiltered\n    }\n\n    throw new InvalidArgumentError('criteria parameter should be one of function, regexp, or object')\n  }\n\n  filterCallsByProtocol = makeFilterCalls.call(this, 'protocol')\n\n  filterCallsByHost = makeFilterCalls.call(this, 'host')\n\n  filterCallsByPort = makeFilterCalls.call(this, 'port')\n\n  filterCallsByOrigin = makeFilterCalls.call(this, 'origin')\n\n  filterCallsByPath = makeFilterCalls.call(this, 'path')\n\n  filterCallsByHash = makeFilterCalls.call(this, 'hash')\n\n  filterCallsByFullUrl = makeFilterCalls.call(this, 'fullUrl')\n\n  filterCallsByMethod = makeFilterCalls.call(this, 'method')\n\n  clear () {\n    this.logs = []\n  }\n\n  [kMockCallHistoryAddLog] (requestInit) {\n    const log = new MockCallHistoryLog(requestInit)\n\n    this.logs.push(log)\n\n    return log\n  }\n\n  * [Symbol.iterator] () {\n    for (const log of this.calls()) {\n      yield log\n    }\n  }\n}\n\nmodule.exports.MockCallHistory = MockCallHistory\nmodule.exports.MockCallHistoryLog = MockCallHistoryLog\n", "'use strict'\n\nconst { promisify } = require('node:util')\nconst Pool = require('../dispatcher/pool')\nconst { buildMockDispatch } = require('./mock-utils')\nconst {\n  kDispatches,\n  kMockAgent,\n  kClose,\n  kOriginalClose,\n  kOrigin,\n  kOriginalDispatch,\n  kConnected,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst { MockInterceptor } = require('./mock-interceptor')\nconst Symbols = require('../core/symbols')\nconst { InvalidArgumentError } = require('../core/errors')\n\n/**\n * MockPool provides an API that extends the Pool to influence the mockDispatches.\n */\nclass MockPool extends Pool {\n  constructor (origin, opts) {\n    if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') {\n      throw new InvalidArgumentError('Argument opts.agent must implement Agent')\n    }\n\n    super(origin, opts)\n\n    this[kMockAgent] = opts.agent\n    this[kOrigin] = origin\n    this[kIgnoreTrailingSlash] = opts.ignoreTrailingSlash ?? false\n    this[kDispatches] = []\n    this[kConnected] = 1\n    this[kOriginalDispatch] = this.dispatch\n    this[kOriginalClose] = this.close.bind(this)\n\n    this.dispatch = buildMockDispatch.call(this)\n    this.close = this[kClose]\n  }\n\n  get [Symbols.kConnected] () {\n    return this[kConnected]\n  }\n\n  /**\n   * Sets up the base interceptor for mocking replies from undici.\n   */\n  intercept (opts) {\n    return new MockInterceptor(\n      opts && { ignoreTrailingSlash: this[kIgnoreTrailingSlash], ...opts },\n      this[kDispatches]\n    )\n  }\n\n  cleanMocks () {\n    this[kDispatches] = []\n  }\n\n  async [kClose] () {\n    await promisify(this[kOriginalClose])()\n    this[kConnected] = 0\n    this[kMockAgent][Symbols.kClients].delete(this[kOrigin])\n  }\n}\n\nmodule.exports = MockPool\n", "'use strict'\n\nconst { Transform } = require('node:stream')\nconst { Console } = require('node:console')\n\nconst PERSISTENT = process.versions.icu ? '\u2705' : 'Y '\nconst NOT_PERSISTENT = process.versions.icu ? '\u274C' : 'N '\n\n/**\n * Gets the output of `console.table(\u2026)` as a string.\n */\nmodule.exports = class PendingInterceptorsFormatter {\n  constructor ({ disableColors } = {}) {\n    this.transform = new Transform({\n      transform (chunk, _enc, cb) {\n        cb(null, chunk)\n      }\n    })\n\n    this.logger = new Console({\n      stdout: this.transform,\n      inspectOptions: {\n        colors: !disableColors && !process.env.CI\n      }\n    })\n  }\n\n  format (pendingInterceptors) {\n    const withPrettyHeaders = pendingInterceptors.map(\n      ({ method, path, data: { statusCode }, persist, times, timesInvoked, origin }) => ({\n        Method: method,\n        Origin: origin,\n        Path: path,\n        'Status code': statusCode,\n        Persistent: persist ? PERSISTENT : NOT_PERSISTENT,\n        Invocations: timesInvoked,\n        Remaining: persist ? Infinity : times - timesInvoked\n      }))\n\n    this.logger.table(withPrettyHeaders)\n    return this.transform.read().toString()\n  }\n}\n", "'use strict'\n\nconst { kClients } = require('../core/symbols')\nconst Agent = require('../dispatcher/agent')\nconst {\n  kAgent,\n  kMockAgentSet,\n  kMockAgentGet,\n  kDispatches,\n  kIsMockActive,\n  kNetConnect,\n  kGetNetConnect,\n  kOptions,\n  kFactory,\n  kMockAgentRegisterCallHistory,\n  kMockAgentIsCallHistoryEnabled,\n  kMockAgentAddCallHistoryLog,\n  kMockAgentMockCallHistoryInstance,\n  kMockAgentAcceptsNonStandardSearchParameters,\n  kMockCallHistoryAddLog,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst MockClient = require('./mock-client')\nconst MockPool = require('./mock-pool')\nconst { matchValue, normalizeSearchParams, buildAndValidateMockOptions, normalizeOrigin } = require('./mock-utils')\nconst { InvalidArgumentError, UndiciError } = require('../core/errors')\nconst Dispatcher = require('../dispatcher/dispatcher')\nconst PendingInterceptorsFormatter = require('./pending-interceptors-formatter')\nconst { MockCallHistory } = require('./mock-call-history')\n\nclass MockAgent extends Dispatcher {\n  constructor (opts = {}) {\n    super(opts)\n\n    const mockOptions = buildAndValidateMockOptions(opts)\n\n    this[kNetConnect] = true\n    this[kIsMockActive] = true\n    this[kMockAgentIsCallHistoryEnabled] = mockOptions.enableCallHistory ?? false\n    this[kMockAgentAcceptsNonStandardSearchParameters] = mockOptions.acceptNonStandardSearchParameters ?? false\n    this[kIgnoreTrailingSlash] = mockOptions.ignoreTrailingSlash ?? false\n\n    // Instantiate Agent and encapsulate\n    if (opts?.agent && typeof opts.agent.dispatch !== 'function') {\n      throw new InvalidArgumentError('Argument opts.agent must implement Agent')\n    }\n    const agent = opts?.agent ? opts.agent : new Agent(opts)\n    this[kAgent] = agent\n\n    this[kClients] = agent[kClients]\n    this[kOptions] = mockOptions\n\n    if (this[kMockAgentIsCallHistoryEnabled]) {\n      this[kMockAgentRegisterCallHistory]()\n    }\n  }\n\n  get (origin) {\n    // Normalize origin to handle URL objects and case-insensitive hostnames\n    const normalizedOrigin = normalizeOrigin(origin)\n    const originKey = this[kIgnoreTrailingSlash] ? normalizedOrigin.replace(/\\/$/, '') : normalizedOrigin\n\n    let dispatcher = this[kMockAgentGet](originKey)\n\n    if (!dispatcher) {\n      dispatcher = this[kFactory](originKey)\n      this[kMockAgentSet](originKey, dispatcher)\n    }\n    return dispatcher\n  }\n\n  dispatch (opts, handler) {\n    opts.origin = normalizeOrigin(opts.origin)\n\n    // Call MockAgent.get to perform additional setup before dispatching as normal\n    this.get(opts.origin)\n\n    this[kMockAgentAddCallHistoryLog](opts)\n\n    const acceptNonStandardSearchParameters = this[kMockAgentAcceptsNonStandardSearchParameters]\n\n    const dispatchOpts = { ...opts }\n\n    if (acceptNonStandardSearchParameters && dispatchOpts.path) {\n      const [path, searchParams] = dispatchOpts.path.split('?')\n      const normalizedSearchParams = normalizeSearchParams(searchParams, acceptNonStandardSearchParameters)\n      dispatchOpts.path = `${path}?${normalizedSearchParams}`\n    }\n\n    return this[kAgent].dispatch(dispatchOpts, handler)\n  }\n\n  async close () {\n    this.clearCallHistory()\n    await this[kAgent].close()\n    this[kClients].clear()\n  }\n\n  deactivate () {\n    this[kIsMockActive] = false\n  }\n\n  activate () {\n    this[kIsMockActive] = true\n  }\n\n  enableNetConnect (matcher) {\n    if (typeof matcher === 'string' || typeof matcher === 'function' || matcher instanceof RegExp) {\n      if (Array.isArray(this[kNetConnect])) {\n        this[kNetConnect].push(matcher)\n      } else {\n        this[kNetConnect] = [matcher]\n      }\n    } else if (typeof matcher === 'undefined') {\n      this[kNetConnect] = true\n    } else {\n      throw new InvalidArgumentError('Unsupported matcher. Must be one of String|Function|RegExp.')\n    }\n  }\n\n  disableNetConnect () {\n    this[kNetConnect] = false\n  }\n\n  enableCallHistory () {\n    this[kMockAgentIsCallHistoryEnabled] = true\n\n    return this\n  }\n\n  disableCallHistory () {\n    this[kMockAgentIsCallHistoryEnabled] = false\n\n    return this\n  }\n\n  getCallHistory () {\n    return this[kMockAgentMockCallHistoryInstance]\n  }\n\n  clearCallHistory () {\n    if (this[kMockAgentMockCallHistoryInstance] !== undefined) {\n      this[kMockAgentMockCallHistoryInstance].clear()\n    }\n  }\n\n  // This is required to bypass issues caused by using global symbols - see:\n  // https://github.com/nodejs/undici/issues/1447\n  get isMockActive () {\n    return this[kIsMockActive]\n  }\n\n  [kMockAgentRegisterCallHistory] () {\n    if (this[kMockAgentMockCallHistoryInstance] === undefined) {\n      this[kMockAgentMockCallHistoryInstance] = new MockCallHistory()\n    }\n  }\n\n  [kMockAgentAddCallHistoryLog] (opts) {\n    if (this[kMockAgentIsCallHistoryEnabled]) {\n      // additional setup when enableCallHistory class method is used after mockAgent instantiation\n      this[kMockAgentRegisterCallHistory]()\n\n      // add call history log on every call (intercepted or not)\n      this[kMockAgentMockCallHistoryInstance][kMockCallHistoryAddLog](opts)\n    }\n  }\n\n  [kMockAgentSet] (origin, dispatcher) {\n    this[kClients].set(origin, { count: 0, dispatcher })\n  }\n\n  [kFactory] (origin) {\n    const mockOptions = Object.assign({ agent: this }, this[kOptions])\n    return this[kOptions] && this[kOptions].connections === 1\n      ? new MockClient(origin, mockOptions)\n      : new MockPool(origin, mockOptions)\n  }\n\n  [kMockAgentGet] (origin) {\n    // First check if we can immediately find it\n    const result = this[kClients].get(origin)\n    if (result?.dispatcher) {\n      return result.dispatcher\n    }\n\n    // If the origin is not a string create a dummy parent pool and return to user\n    if (typeof origin !== 'string') {\n      const dispatcher = this[kFactory]('http://localhost:9999')\n      this[kMockAgentSet](origin, dispatcher)\n      return dispatcher\n    }\n\n    // If we match, create a pool and assign the same dispatches\n    for (const [keyMatcher, result] of Array.from(this[kClients])) {\n      if (result && typeof keyMatcher !== 'string' && matchValue(keyMatcher, origin)) {\n        const dispatcher = this[kFactory](origin)\n        this[kMockAgentSet](origin, dispatcher)\n        dispatcher[kDispatches] = result.dispatcher[kDispatches]\n        return dispatcher\n      }\n    }\n  }\n\n  [kGetNetConnect] () {\n    return this[kNetConnect]\n  }\n\n  pendingInterceptors () {\n    const mockAgentClients = this[kClients]\n\n    return Array.from(mockAgentClients.entries())\n      .flatMap(([origin, result]) => result.dispatcher[kDispatches].map(dispatch => ({ ...dispatch, origin })))\n      .filter(({ pending }) => pending)\n  }\n\n  assertNoPendingInterceptors ({ pendingInterceptorsFormatter = new PendingInterceptorsFormatter() } = {}) {\n    const pending = this.pendingInterceptors()\n\n    if (pending.length === 0) {\n      return\n    }\n\n    throw new UndiciError(\n      pending.length === 1\n        ? `1 interceptor is pending:\\n\\n${pendingInterceptorsFormatter.format(pending)}`.trim()\n        : `${pending.length} interceptors are pending:\\n\\n${pendingInterceptorsFormatter.format(pending)}`.trim()\n    )\n  }\n}\n\nmodule.exports = MockAgent\n", "'use strict'\n\nconst { InvalidArgumentError } = require('../core/errors')\nconst { runtimeFeatures } = require('../util/runtime-features.js')\n\n/**\n * @typedef {Object} HeaderFilters\n * @property {Set<string>} ignore - Set of headers to ignore for matching\n * @property {Set<string>} exclude - Set of headers to exclude from matching\n * @property {Set<string>} match - Set of headers to match (empty means match\n */\n\n/**\n * Creates cached header sets for performance\n *\n * @param {import('./snapshot-recorder').SnapshotRecorderMatchOptions} matchOptions - Matching options for headers\n * @returns {HeaderFilters} - Cached sets for ignore, exclude, and match headers\n */\nfunction createHeaderFilters (matchOptions = {}) {\n  const { ignoreHeaders = [], excludeHeaders = [], matchHeaders = [], caseSensitive = false } = matchOptions\n\n  return {\n    ignore: new Set(ignoreHeaders.map(header => caseSensitive ? header : header.toLowerCase())),\n    exclude: new Set(excludeHeaders.map(header => caseSensitive ? header : header.toLowerCase())),\n    match: new Set(matchHeaders.map(header => caseSensitive ? header : header.toLowerCase()))\n  }\n}\n\nconst crypto = runtimeFeatures.has('crypto')\n  ? require('node:crypto')\n  : null\n\n/**\n * @callback HashIdFunction\n * @param {string} value - The value to hash\n * @returns {string} - The base64url encoded hash of the value\n */\n\n/**\n * Generates a hash for a given value\n * @type {HashIdFunction}\n */\nconst hashId = crypto?.hash\n  ? (value) => crypto.hash('sha256', value, 'base64url')\n  : (value) => Buffer.from(value).toString('base64url')\n\n/**\n * @typedef {(url: string) => boolean} IsUrlExcluded Checks if a URL matches any of the exclude patterns\n */\n\n/** @typedef {{[key: Lowercase<string>]: string}} NormalizedHeaders */\n/** @typedef {Array<string>} UndiciHeaders */\n/** @typedef {Record<string, string|string[]>} Headers */\n\n/**\n * @param {*} headers\n * @returns {headers is UndiciHeaders}\n */\nfunction isUndiciHeaders (headers) {\n  return Array.isArray(headers) && (headers.length & 1) === 0\n}\n\n/**\n * Factory function to create a URL exclusion checker\n * @param {Array<string| RegExp>} [excludePatterns=[]] - Array of patterns to exclude\n * @returns {IsUrlExcluded} - A function that checks if a URL matches any of the exclude patterns\n */\nfunction isUrlExcludedFactory (excludePatterns = []) {\n  if (excludePatterns.length === 0) {\n    return () => false\n  }\n\n  return function isUrlExcluded (url) {\n    let urlLowerCased\n\n    for (const pattern of excludePatterns) {\n      if (typeof pattern === 'string') {\n        if (!urlLowerCased) {\n          // Convert URL to lowercase only once\n          urlLowerCased = url.toLowerCase()\n        }\n        // Simple string match (case-insensitive)\n        if (urlLowerCased.includes(pattern.toLowerCase())) {\n          return true\n        }\n      } else if (pattern instanceof RegExp) {\n        // Regex pattern match\n        if (pattern.test(url)) {\n          return true\n        }\n      }\n    }\n\n    return false\n  }\n}\n\n/**\n * Normalizes headers for consistent comparison\n *\n * @param {Object|UndiciHeaders} headers - Headers to normalize\n * @returns {NormalizedHeaders} - Normalized headers as a lowercase object\n */\nfunction normalizeHeaders (headers) {\n  /** @type {NormalizedHeaders} */\n  const normalizedHeaders = {}\n\n  if (!headers) return normalizedHeaders\n\n  // Handle array format (undici internal format: [name, value, name, value, ...])\n  if (isUndiciHeaders(headers)) {\n    for (let i = 0; i < headers.length; i += 2) {\n      const key = headers[i]\n      const value = headers[i + 1]\n      if (key && value !== undefined) {\n        // Convert Buffers to strings if needed\n        const keyStr = Buffer.isBuffer(key) ? key.toString() : key\n        const valueStr = Buffer.isBuffer(value) ? value.toString() : value\n        normalizedHeaders[keyStr.toLowerCase()] = valueStr\n      }\n    }\n    return normalizedHeaders\n  }\n\n  // Handle object format\n  if (headers && typeof headers === 'object') {\n    for (const [key, value] of Object.entries(headers)) {\n      if (key && typeof key === 'string') {\n        normalizedHeaders[key.toLowerCase()] = Array.isArray(value) ? value.join(', ') : String(value)\n      }\n    }\n  }\n\n  return normalizedHeaders\n}\n\nconst validSnapshotModes = /** @type {const} */ (['record', 'playback', 'update'])\n\n/** @typedef {typeof validSnapshotModes[number]} SnapshotMode */\n\n/**\n * @param {*} mode - The snapshot mode to validate\n * @returns {asserts mode is SnapshotMode}\n */\nfunction validateSnapshotMode (mode) {\n  if (!validSnapshotModes.includes(mode)) {\n    throw new InvalidArgumentError(`Invalid snapshot mode: ${mode}. Must be one of: ${validSnapshotModes.join(', ')}`)\n  }\n}\n\nmodule.exports = {\n  createHeaderFilters,\n  hashId,\n  isUndiciHeaders,\n  normalizeHeaders,\n  isUrlExcludedFactory,\n  validateSnapshotMode\n}\n", "'use strict'\n\nconst { writeFile, readFile, mkdir } = require('node:fs/promises')\nconst { dirname, resolve } = require('node:path')\nconst { setTimeout, clearTimeout } = require('node:timers')\nconst { InvalidArgumentError, UndiciError } = require('../core/errors')\nconst { hashId, isUrlExcludedFactory, normalizeHeaders, createHeaderFilters } = require('./snapshot-utils')\n\n/**\n * @typedef {Object} SnapshotRequestOptions\n * @property {string} method - HTTP method (e.g. 'GET', 'POST', etc.)\n * @property {string} path - Request path\n * @property {string} origin - Request origin (base URL)\n * @property {import('./snapshot-utils').Headers|import('./snapshot-utils').UndiciHeaders} headers - Request headers\n * @property {import('./snapshot-utils').NormalizedHeaders} _normalizedHeaders - Request headers as a lowercase object\n * @property {string|Buffer} [body] - Request body (optional)\n */\n\n/**\n * @typedef {Object} SnapshotEntryRequest\n * @property {string} method - HTTP method (e.g. 'GET', 'POST', etc.)\n * @property {string} url - Full URL of the request\n * @property {import('./snapshot-utils').NormalizedHeaders} headers - Normalized headers as a lowercase object\n * @property {string|Buffer} [body] - Request body (optional)\n */\n\n/**\n * @typedef {Object} SnapshotEntryResponse\n * @property {number} statusCode - HTTP status code of the response\n * @property {import('./snapshot-utils').NormalizedHeaders} headers - Normalized response headers as a lowercase object\n * @property {string} body - Response body as a base64url encoded string\n * @property {Object} [trailers] - Optional response trailers\n */\n\n/**\n * @typedef {Object} SnapshotEntry\n * @property {SnapshotEntryRequest} request - The request object\n * @property {Array<SnapshotEntryResponse>} responses - Array of response objects\n * @property {number} callCount - Number of times this snapshot has been called\n * @property {string} timestamp - ISO timestamp of when the snapshot was created\n */\n\n/**\n * @typedef {Object} SnapshotRecorderMatchOptions\n * @property {Array<string>} [matchHeaders=[]] - Headers to match (empty array means match all headers)\n * @property {Array<string>} [ignoreHeaders=[]] - Headers to ignore for matching\n * @property {Array<string>} [excludeHeaders=[]] - Headers to exclude from matching\n * @property {boolean} [matchBody=true] - Whether to match request body\n * @property {boolean} [matchQuery=true] - Whether to match query properties\n * @property {boolean} [caseSensitive=false] - Whether header matching is case-sensitive\n */\n\n/**\n * @typedef {Object} SnapshotRecorderOptions\n * @property {string} [snapshotPath] - Path to save/load snapshots\n * @property {import('./snapshot-utils').SnapshotMode} [mode='record'] - Mode: 'record' or 'playback'\n * @property {number} [maxSnapshots=Infinity] - Maximum number of snapshots to keep\n * @property {boolean} [autoFlush=false] - Whether to automatically flush snapshots to disk\n * @property {number} [flushInterval=30000] - Auto-flush interval in milliseconds (default: 30 seconds)\n * @property {Array<string|RegExp>} [excludeUrls=[]] - URLs to exclude from recording\n * @property {function} [shouldRecord=null] - Function to filter requests for recording\n * @property {function} [shouldPlayback=null] - Function to filter requests\n */\n\n/**\n * @typedef {Object} SnapshotFormattedRequest\n * @property {string} method - HTTP method (e.g. 'GET', 'POST', etc.)\n * @property {string} url - Full URL of the request (with query parameters if matchQuery is true)\n * @property {import('./snapshot-utils').NormalizedHeaders} headers - Normalized headers as a lowercase object\n * @property {string} body - Request body (optional, only if matchBody is true)\n */\n\n/**\n * @typedef {Object} SnapshotInfo\n * @property {string} hash - Hash key for the snapshot\n * @property {SnapshotEntryRequest} request - The request object\n * @property {number} responseCount - Number of responses recorded for this request\n * @property {number} callCount - Number of times this snapshot has been called\n * @property {string} timestamp - ISO timestamp of when the snapshot was created\n */\n\n/**\n * Formats a request for consistent snapshot storage\n * Caches normalized headers to avoid repeated processing\n *\n * @param {SnapshotRequestOptions} opts - Request options\n * @param {import('./snapshot-utils').HeaderFilters} headerFilters - Cached header sets for performance\n * @param {SnapshotRecorderMatchOptions} [matchOptions] - Matching options for headers and body\n * @returns {SnapshotFormattedRequest} - Formatted request object\n */\nfunction formatRequestKey (opts, headerFilters, matchOptions = {}) {\n  const url = new URL(opts.path, opts.origin)\n\n  // Cache normalized headers if not already done\n  const normalized = opts._normalizedHeaders || normalizeHeaders(opts.headers)\n  if (!opts._normalizedHeaders) {\n    opts._normalizedHeaders = normalized\n  }\n\n  return {\n    method: opts.method || 'GET',\n    url: matchOptions.matchQuery !== false ? url.toString() : `${url.origin}${url.pathname}`,\n    headers: filterHeadersForMatching(normalized, headerFilters, matchOptions),\n    body: matchOptions.matchBody !== false && opts.body ? String(opts.body) : ''\n  }\n}\n\n/**\n * Filters headers based on matching configuration\n *\n * @param {import('./snapshot-utils').Headers} headers - Headers to filter\n * @param {import('./snapshot-utils').HeaderFilters} headerFilters - Cached sets for ignore, exclude, and match headers\n * @param {SnapshotRecorderMatchOptions} [matchOptions] - Matching options for headers\n */\nfunction filterHeadersForMatching (headers, headerFilters, matchOptions = {}) {\n  if (!headers || typeof headers !== 'object') return {}\n\n  const {\n    caseSensitive = false\n  } = matchOptions\n\n  const filtered = {}\n  const { ignore, exclude, match } = headerFilters\n\n  for (const [key, value] of Object.entries(headers)) {\n    const headerKey = caseSensitive ? key : key.toLowerCase()\n\n    // Skip if in exclude list (for security)\n    if (exclude.has(headerKey)) continue\n\n    // Skip if in ignore list (for matching)\n    if (ignore.has(headerKey)) continue\n\n    // If matchHeaders is specified, only include those headers\n    if (match.size !== 0) {\n      if (!match.has(headerKey)) continue\n    }\n\n    filtered[headerKey] = value\n  }\n\n  return filtered\n}\n\n/**\n * Filters headers for storage (only excludes sensitive headers)\n *\n * @param {import('./snapshot-utils').Headers} headers - Headers to filter\n * @param {import('./snapshot-utils').HeaderFilters} headerFilters - Cached sets for ignore, exclude, and match headers\n * @param {SnapshotRecorderMatchOptions} [matchOptions] - Matching options for headers\n */\nfunction filterHeadersForStorage (headers, headerFilters, matchOptions = {}) {\n  if (!headers || typeof headers !== 'object') return {}\n\n  const {\n    caseSensitive = false\n  } = matchOptions\n\n  const filtered = {}\n  const { exclude: excludeSet } = headerFilters\n\n  for (const [key, value] of Object.entries(headers)) {\n    const headerKey = caseSensitive ? key : key.toLowerCase()\n\n    // Skip if in exclude list (for security)\n    if (excludeSet.has(headerKey)) continue\n\n    filtered[headerKey] = value\n  }\n\n  return filtered\n}\n\n/**\n * Creates a hash key for request matching\n * Properly orders headers to avoid conflicts and uses crypto hashing when available\n *\n * @param {SnapshotFormattedRequest} formattedRequest - Request object\n * @returns {string} - Base64url encoded hash of the request\n */\nfunction createRequestHash (formattedRequest) {\n  const parts = [\n    formattedRequest.method,\n    formattedRequest.url\n  ]\n\n  // Process headers in a deterministic way to avoid conflicts\n  if (formattedRequest.headers && typeof formattedRequest.headers === 'object') {\n    const headerKeys = Object.keys(formattedRequest.headers).sort()\n    for (const key of headerKeys) {\n      const values = Array.isArray(formattedRequest.headers[key])\n        ? formattedRequest.headers[key]\n        : [formattedRequest.headers[key]]\n\n      // Add header name\n      parts.push(key)\n\n      // Add all values for this header, sorted for consistency\n      for (const value of values.sort()) {\n        parts.push(String(value))\n      }\n    }\n  }\n\n  // Add body\n  parts.push(formattedRequest.body)\n\n  const content = parts.join('|')\n\n  return hashId(content)\n}\n\nclass SnapshotRecorder {\n  /** @type {NodeJS.Timeout | null} */\n  #flushTimeout\n\n  /** @type {import('./snapshot-utils').IsUrlExcluded} */\n  #isUrlExcluded\n\n  /** @type {Map<string, SnapshotEntry>} */\n  #snapshots = new Map()\n\n  /** @type {string|undefined} */\n  #snapshotPath\n\n  /** @type {number} */\n  #maxSnapshots = Infinity\n\n  /** @type {boolean} */\n  #autoFlush = false\n\n  /** @type {import('./snapshot-utils').HeaderFilters} */\n  #headerFilters\n\n  /**\n   * Creates a new SnapshotRecorder instance\n   * @param {SnapshotRecorderOptions&SnapshotRecorderMatchOptions} [options={}] - Configuration options for the recorder\n   */\n  constructor (options = {}) {\n    this.#snapshotPath = options.snapshotPath\n    this.#maxSnapshots = options.maxSnapshots || Infinity\n    this.#autoFlush = options.autoFlush || false\n    this.flushInterval = options.flushInterval || 30000 // 30 seconds default\n    this._flushTimer = null\n\n    // Matching configuration\n    /** @type {Required<SnapshotRecorderMatchOptions>} */\n    this.matchOptions = {\n      matchHeaders: options.matchHeaders || [], // empty means match all headers\n      ignoreHeaders: options.ignoreHeaders || [],\n      excludeHeaders: options.excludeHeaders || [],\n      matchBody: options.matchBody !== false, // default: true\n      matchQuery: options.matchQuery !== false, // default: true\n      caseSensitive: options.caseSensitive || false\n    }\n\n    // Cache processed header sets to avoid recreating them on every request\n    this.#headerFilters = createHeaderFilters(this.matchOptions)\n\n    // Request filtering callbacks\n    this.shouldRecord = options.shouldRecord || (() => true) // function(requestOpts) -> boolean\n    this.shouldPlayback = options.shouldPlayback || (() => true) // function(requestOpts) -> boolean\n\n    // URL pattern filtering\n    this.#isUrlExcluded = isUrlExcludedFactory(options.excludeUrls) // Array of regex patterns or strings\n\n    // Start auto-flush timer if enabled\n    if (this.#autoFlush && this.#snapshotPath) {\n      this.#startAutoFlush()\n    }\n  }\n\n  /**\n   * Records a request-response interaction\n   * @param {SnapshotRequestOptions} requestOpts - Request options\n   * @param {SnapshotEntryResponse} response - Response data to record\n   * @return {Promise<void>} - Resolves when the recording is complete\n   */\n  async record (requestOpts, response) {\n    // Check if recording should be filtered out\n    if (!this.shouldRecord(requestOpts)) {\n      return // Skip recording\n    }\n\n    // Check URL exclusion patterns\n    if (this.isUrlExcluded(requestOpts)) {\n      return // Skip recording\n    }\n\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n\n    // Extract response data - always store body as base64\n    const normalizedHeaders = normalizeHeaders(response.headers)\n\n    /** @type {SnapshotEntryResponse} */\n    const responseData = {\n      statusCode: response.statusCode,\n      headers: filterHeadersForStorage(normalizedHeaders, this.#headerFilters, this.matchOptions),\n      body: Buffer.isBuffer(response.body)\n        ? response.body.toString('base64')\n        : Buffer.from(String(response.body || '')).toString('base64'),\n      trailers: response.trailers\n    }\n\n    // Remove oldest snapshot if we exceed maxSnapshots limit\n    if (this.#snapshots.size >= this.#maxSnapshots && !this.#snapshots.has(hash)) {\n      const oldestKey = this.#snapshots.keys().next().value\n      this.#snapshots.delete(oldestKey)\n    }\n\n    // Support sequential responses - if snapshot exists, add to responses array\n    const existingSnapshot = this.#snapshots.get(hash)\n    if (existingSnapshot && existingSnapshot.responses) {\n      existingSnapshot.responses.push(responseData)\n      existingSnapshot.timestamp = new Date().toISOString()\n    } else {\n      this.#snapshots.set(hash, {\n        request,\n        responses: [responseData], // Always store as array for consistency\n        callCount: 0,\n        timestamp: new Date().toISOString()\n      })\n    }\n\n    // Auto-flush if enabled\n    if (this.#autoFlush && this.#snapshotPath) {\n      this.#scheduleFlush()\n    }\n  }\n\n  /**\n   * Checks if a URL should be excluded from recording/playback\n   * @param {SnapshotRequestOptions} requestOpts - Request options to check\n   * @returns {boolean} - True if URL is excluded\n   */\n  isUrlExcluded (requestOpts) {\n    const url = new URL(requestOpts.path, requestOpts.origin).toString()\n    return this.#isUrlExcluded(url)\n  }\n\n  /**\n   * Finds a matching snapshot for the given request\n   * Returns the appropriate response based on call count for sequential responses\n   *\n   * @param {SnapshotRequestOptions} requestOpts - Request options to match\n   * @returns {SnapshotEntry&Record<'response', SnapshotEntryResponse>|undefined} - Matching snapshot response or undefined if not found\n   */\n  findSnapshot (requestOpts) {\n    // Check if playback should be filtered out\n    if (!this.shouldPlayback(requestOpts)) {\n      return undefined // Skip playback\n    }\n\n    // Check URL exclusion patterns\n    if (this.isUrlExcluded(requestOpts)) {\n      return undefined // Skip playback\n    }\n\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n    const snapshot = this.#snapshots.get(hash)\n\n    if (!snapshot) return undefined\n\n    // Handle sequential responses\n    const currentCallCount = snapshot.callCount || 0\n    const responseIndex = Math.min(currentCallCount, snapshot.responses.length - 1)\n    snapshot.callCount = currentCallCount + 1\n\n    return {\n      ...snapshot,\n      response: snapshot.responses[responseIndex]\n    }\n  }\n\n  /**\n   * Loads snapshots from file\n   * @param {string} [filePath] - Optional file path to load snapshots from\n   * @return {Promise<void>} - Resolves when snapshots are loaded\n   */\n  async loadSnapshots (filePath) {\n    const path = filePath || this.#snapshotPath\n    if (!path) {\n      throw new InvalidArgumentError('Snapshot path is required')\n    }\n\n    try {\n      const data = await readFile(resolve(path), 'utf8')\n      const parsed = JSON.parse(data)\n\n      // Convert array format back to Map\n      if (Array.isArray(parsed)) {\n        this.#snapshots.clear()\n        for (const { hash, snapshot } of parsed) {\n          this.#snapshots.set(hash, snapshot)\n        }\n      } else {\n        // Legacy object format\n        this.#snapshots = new Map(Object.entries(parsed))\n      }\n    } catch (error) {\n      if (error.code === 'ENOENT') {\n        // File doesn't exist yet - that's ok for recording mode\n        this.#snapshots.clear()\n      } else {\n        throw new UndiciError(`Failed to load snapshots from ${path}`, { cause: error })\n      }\n    }\n  }\n\n  /**\n   * Saves snapshots to file\n   *\n   * @param {string} [filePath] - Optional file path to save snapshots\n   * @returns {Promise<void>} - Resolves when snapshots are saved\n   */\n  async saveSnapshots (filePath) {\n    const path = filePath || this.#snapshotPath\n    if (!path) {\n      throw new InvalidArgumentError('Snapshot path is required')\n    }\n\n    const resolvedPath = resolve(path)\n\n    // Ensure directory exists\n    await mkdir(dirname(resolvedPath), { recursive: true })\n\n    // Convert Map to serializable format\n    const data = Array.from(this.#snapshots.entries()).map(([hash, snapshot]) => ({\n      hash,\n      snapshot\n    }))\n\n    await writeFile(resolvedPath, JSON.stringify(data, null, 2), { flush: true })\n  }\n\n  /**\n   * Clears all recorded snapshots\n   * @returns {void}\n   */\n  clear () {\n    this.#snapshots.clear()\n  }\n\n  /**\n   * Gets all recorded snapshots\n   * @return {Array<SnapshotEntry>} - Array of all recorded snapshots\n   */\n  getSnapshots () {\n    return Array.from(this.#snapshots.values())\n  }\n\n  /**\n   * Gets snapshot count\n   * @return {number} - Number of recorded snapshots\n   */\n  size () {\n    return this.#snapshots.size\n  }\n\n  /**\n   * Resets call counts for all snapshots (useful for test cleanup)\n   * @returns {void}\n   */\n  resetCallCounts () {\n    for (const snapshot of this.#snapshots.values()) {\n      snapshot.callCount = 0\n    }\n  }\n\n  /**\n   * Deletes a specific snapshot by request options\n   * @param {SnapshotRequestOptions} requestOpts - Request options to match\n   * @returns {boolean} - True if snapshot was deleted, false if not found\n   */\n  deleteSnapshot (requestOpts) {\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n    return this.#snapshots.delete(hash)\n  }\n\n  /**\n   * Gets information about a specific snapshot\n   * @param {SnapshotRequestOptions} requestOpts - Request options to match\n   * @returns {SnapshotInfo|null} - Snapshot information or null if not found\n   */\n  getSnapshotInfo (requestOpts) {\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n    const snapshot = this.#snapshots.get(hash)\n\n    if (!snapshot) return null\n\n    return {\n      hash,\n      request: snapshot.request,\n      responseCount: snapshot.responses ? snapshot.responses.length : (snapshot.response ? 1 : 0), // .response for legacy snapshots\n      callCount: snapshot.callCount || 0,\n      timestamp: snapshot.timestamp\n    }\n  }\n\n  /**\n   * Replaces all snapshots with new data (full replacement)\n   * @param {Array<{hash: string; snapshot: SnapshotEntry}>|Record<string, SnapshotEntry>} snapshotData - New snapshot data to replace existing ones\n   * @returns {void}\n   */\n  replaceSnapshots (snapshotData) {\n    this.#snapshots.clear()\n\n    if (Array.isArray(snapshotData)) {\n      for (const { hash, snapshot } of snapshotData) {\n        this.#snapshots.set(hash, snapshot)\n      }\n    } else if (snapshotData && typeof snapshotData === 'object') {\n      // Legacy object format\n      this.#snapshots = new Map(Object.entries(snapshotData))\n    }\n  }\n\n  /**\n   * Starts the auto-flush timer\n   * @returns {void}\n   */\n  #startAutoFlush () {\n    return this.#scheduleFlush()\n  }\n\n  /**\n   * Stops the auto-flush timer\n   * @returns {void}\n   */\n  #stopAutoFlush () {\n    if (this.#flushTimeout) {\n      clearTimeout(this.#flushTimeout)\n      // Ensure any pending flush is completed\n      this.saveSnapshots().catch(() => {\n      // Ignore flush errors\n      })\n      this.#flushTimeout = null\n    }\n  }\n\n  /**\n   * Schedules a flush (debounced to avoid excessive writes)\n   */\n  #scheduleFlush () {\n    this.#flushTimeout = setTimeout(() => {\n      this.saveSnapshots().catch(() => {\n        // Ignore flush errors\n      })\n      if (this.#autoFlush) {\n        this.#flushTimeout?.refresh()\n      } else {\n        this.#flushTimeout = null\n      }\n    }, 1000) // 1 second debounce\n  }\n\n  /**\n   * Cleanup method to stop timers\n   * @returns {void}\n   */\n  destroy () {\n    this.#stopAutoFlush()\n    if (this.#flushTimeout) {\n      clearTimeout(this.#flushTimeout)\n      this.#flushTimeout = null\n    }\n  }\n\n  /**\n   * Async close method that saves all recordings and performs cleanup\n   * @returns {Promise<void>}\n   */\n  async close () {\n    // Save any pending recordings if we have a snapshot path\n    if (this.#snapshotPath && this.#snapshots.size !== 0) {\n      await this.saveSnapshots()\n    }\n\n    // Perform cleanup\n    this.destroy()\n  }\n}\n\nmodule.exports = { SnapshotRecorder, formatRequestKey, createRequestHash, filterHeadersForMatching, filterHeadersForStorage, createHeaderFilters }\n", "'use strict'\n\nconst Agent = require('../dispatcher/agent')\nconst MockAgent = require('./mock-agent')\nconst { SnapshotRecorder } = require('./snapshot-recorder')\nconst WrapHandler = require('../handler/wrap-handler')\nconst { InvalidArgumentError, UndiciError } = require('../core/errors')\nconst { validateSnapshotMode } = require('./snapshot-utils')\n\nconst kSnapshotRecorder = Symbol('kSnapshotRecorder')\nconst kSnapshotMode = Symbol('kSnapshotMode')\nconst kSnapshotPath = Symbol('kSnapshotPath')\nconst kSnapshotLoaded = Symbol('kSnapshotLoaded')\nconst kRealAgent = Symbol('kRealAgent')\n\n// Static flag to ensure warning is only emitted once per process\nlet warningEmitted = false\n\nclass SnapshotAgent extends MockAgent {\n  constructor (opts = {}) {\n    // Emit experimental warning only once\n    if (!warningEmitted) {\n      process.emitWarning(\n        'SnapshotAgent is experimental and subject to change',\n        'ExperimentalWarning'\n      )\n      warningEmitted = true\n    }\n\n    const {\n      mode = 'record',\n      snapshotPath = null,\n      ...mockAgentOpts\n    } = opts\n\n    super(mockAgentOpts)\n\n    validateSnapshotMode(mode)\n\n    // Validate snapshotPath is provided when required\n    if ((mode === 'playback' || mode === 'update') && !snapshotPath) {\n      throw new InvalidArgumentError(`snapshotPath is required when mode is '${mode}'`)\n    }\n\n    this[kSnapshotMode] = mode\n    this[kSnapshotPath] = snapshotPath\n\n    this[kSnapshotRecorder] = new SnapshotRecorder({\n      snapshotPath: this[kSnapshotPath],\n      mode: this[kSnapshotMode],\n      maxSnapshots: opts.maxSnapshots,\n      autoFlush: opts.autoFlush,\n      flushInterval: opts.flushInterval,\n      matchHeaders: opts.matchHeaders,\n      ignoreHeaders: opts.ignoreHeaders,\n      excludeHeaders: opts.excludeHeaders,\n      matchBody: opts.matchBody,\n      matchQuery: opts.matchQuery,\n      caseSensitive: opts.caseSensitive,\n      shouldRecord: opts.shouldRecord,\n      shouldPlayback: opts.shouldPlayback,\n      excludeUrls: opts.excludeUrls\n    })\n    this[kSnapshotLoaded] = false\n\n    // For recording/update mode, we need a real agent to make actual requests\n    // For playback mode, we need a real agent if there are excluded URLs\n    if (this[kSnapshotMode] === 'record' || this[kSnapshotMode] === 'update' ||\n        (this[kSnapshotMode] === 'playback' && opts.excludeUrls && opts.excludeUrls.length > 0)) {\n      this[kRealAgent] = new Agent(opts)\n    }\n\n    // Auto-load snapshots in playback/update mode\n    if ((this[kSnapshotMode] === 'playback' || this[kSnapshotMode] === 'update') && this[kSnapshotPath]) {\n      this.loadSnapshots().catch(() => {\n        // Ignore load errors - file might not exist yet\n      })\n    }\n  }\n\n  dispatch (opts, handler) {\n    handler = WrapHandler.wrap(handler)\n    const mode = this[kSnapshotMode]\n\n    // Check if URL should be excluded (pass through without mocking/recording)\n    if (this[kSnapshotRecorder].isUrlExcluded(opts)) {\n      // Real agent is guaranteed by constructor when excludeUrls is configured\n      return this[kRealAgent].dispatch(opts, handler)\n    }\n\n    if (mode === 'playback' || mode === 'update') {\n      // Ensure snapshots are loaded\n      if (!this[kSnapshotLoaded]) {\n        // Need to load asynchronously, delegate to async version\n        return this.#asyncDispatch(opts, handler)\n      }\n\n      // Try to find existing snapshot (synchronous)\n      const snapshot = this[kSnapshotRecorder].findSnapshot(opts)\n\n      if (snapshot) {\n        // Use recorded response (synchronous)\n        return this.#replaySnapshot(snapshot, handler)\n      } else if (mode === 'update') {\n        // Make real request and record it (async required)\n        return this.#recordAndReplay(opts, handler)\n      } else {\n        // Playback mode but no snapshot found\n        const error = new UndiciError(`No snapshot found for ${opts.method || 'GET'} ${opts.path}`)\n        if (handler.onError) {\n          handler.onError(error)\n          return\n        }\n        throw error\n      }\n    } else if (mode === 'record') {\n      // Record mode - make real request and save response (async required)\n      return this.#recordAndReplay(opts, handler)\n    }\n  }\n\n  /**\n   * Async version of dispatch for when we need to load snapshots first\n   */\n  async #asyncDispatch (opts, handler) {\n    await this.loadSnapshots()\n    return this.dispatch(opts, handler)\n  }\n\n  /**\n   * Records a real request and replays the response\n   */\n  #recordAndReplay (opts, handler) {\n    const responseData = {\n      statusCode: null,\n      headers: {},\n      trailers: {},\n      body: []\n    }\n\n    const self = this // Capture 'this' context for use within nested handler callbacks\n\n    const recordingHandler = {\n      onRequestStart (controller, context) {\n        return handler.onRequestStart(controller, { ...context, history: this.history })\n      },\n\n      onRequestUpgrade (controller, statusCode, headers, socket) {\n        return handler.onRequestUpgrade(controller, statusCode, headers, socket)\n      },\n\n      onResponseStart (controller, statusCode, headers, statusMessage) {\n        responseData.statusCode = statusCode\n        responseData.headers = headers\n        return handler.onResponseStart(controller, statusCode, headers, statusMessage)\n      },\n\n      onResponseData (controller, chunk) {\n        responseData.body.push(chunk)\n        return handler.onResponseData(controller, chunk)\n      },\n\n      onResponseEnd (controller, trailers) {\n        responseData.trailers = trailers\n\n        // Record the interaction using captured 'self' context (fire and forget)\n        const responseBody = Buffer.concat(responseData.body)\n        self[kSnapshotRecorder].record(opts, {\n          statusCode: responseData.statusCode,\n          headers: responseData.headers,\n          body: responseBody,\n          trailers: responseData.trailers\n        })\n          .then(() => handler.onResponseEnd(controller, trailers))\n          .catch((error) => handler.onResponseError(controller, error))\n      }\n    }\n\n    // Use composed agent if available (includes interceptors), otherwise use real agent\n    const agent = this[kRealAgent]\n    return agent.dispatch(opts, recordingHandler)\n  }\n\n  /**\n   * Replays a recorded response\n   *\n   * @param {Object} snapshot - The recorded snapshot to replay.\n   * @param {Object} handler - The handler to call with the response data.\n   * @returns {void}\n   */\n  #replaySnapshot (snapshot, handler) {\n    try {\n      const { response } = snapshot\n\n      const controller = {\n        pause () { },\n        resume () { },\n        abort (reason) {\n          this.aborted = true\n          this.reason = reason\n        },\n\n        aborted: false,\n        paused: false\n      }\n\n      handler.onRequestStart(controller)\n\n      handler.onResponseStart(controller, response.statusCode, response.headers)\n\n      // Body is always stored as base64 string\n      const body = Buffer.from(response.body, 'base64')\n      handler.onResponseData(controller, body)\n\n      handler.onResponseEnd(controller, response.trailers)\n    } catch (error) {\n      handler.onError?.(error)\n    }\n  }\n\n  /**\n   * Loads snapshots from file\n   *\n   * @param {string} [filePath] - Optional file path to load snapshots from.\n   * @returns {Promise<void>} - Resolves when snapshots are loaded.\n   */\n  async loadSnapshots (filePath) {\n    await this[kSnapshotRecorder].loadSnapshots(filePath || this[kSnapshotPath])\n    this[kSnapshotLoaded] = true\n\n    // In playback mode, set up MockAgent interceptors for all snapshots\n    if (this[kSnapshotMode] === 'playback') {\n      this.#setupMockInterceptors()\n    }\n  }\n\n  /**\n   * Saves snapshots to file\n   *\n   * @param {string} [filePath] - Optional file path to save snapshots to.\n   * @returns {Promise<void>} - Resolves when snapshots are saved.\n   */\n  async saveSnapshots (filePath) {\n    return this[kSnapshotRecorder].saveSnapshots(filePath || this[kSnapshotPath])\n  }\n\n  /**\n   * Sets up MockAgent interceptors based on recorded snapshots.\n   *\n   * This method creates MockAgent interceptors for each recorded snapshot,\n   * allowing the SnapshotAgent to fall back to MockAgent's standard intercept\n   * mechanism in playback mode. Each interceptor is configured to persist\n   * (remain active for multiple requests) and responds with the recorded\n   * response data.\n   *\n   * Called automatically when loading snapshots in playback mode.\n   *\n   * @returns {void}\n   */\n  #setupMockInterceptors () {\n    for (const snapshot of this[kSnapshotRecorder].getSnapshots()) {\n      const { request, responses, response } = snapshot\n      const url = new URL(request.url)\n\n      const mockPool = this.get(url.origin)\n\n      // Handle both new format (responses array) and legacy format (response object)\n      const responseData = responses ? responses[0] : response\n      if (!responseData) continue\n\n      mockPool.intercept({\n        path: url.pathname + url.search,\n        method: request.method,\n        headers: request.headers,\n        body: request.body\n      }).reply(responseData.statusCode, responseData.body, {\n        headers: responseData.headers,\n        trailers: responseData.trailers\n      }).persist()\n    }\n  }\n\n  /**\n   * Gets the snapshot recorder\n   * @return {SnapshotRecorder} - The snapshot recorder instance\n   */\n  getRecorder () {\n    return this[kSnapshotRecorder]\n  }\n\n  /**\n   * Gets the current mode\n   * @return {import('./snapshot-utils').SnapshotMode} - The current snapshot mode\n   */\n  getMode () {\n    return this[kSnapshotMode]\n  }\n\n  /**\n   * Clears all snapshots\n   * @returns {void}\n   */\n  clearSnapshots () {\n    this[kSnapshotRecorder].clear()\n  }\n\n  /**\n   * Resets call counts for all snapshots (useful for test cleanup)\n   * @returns {void}\n   */\n  resetCallCounts () {\n    this[kSnapshotRecorder].resetCallCounts()\n  }\n\n  /**\n   * Deletes a specific snapshot by request options\n   * @param {import('./snapshot-recorder').SnapshotRequestOptions} requestOpts - Request options to identify the snapshot\n   * @return {Promise<boolean>} - Returns true if the snapshot was deleted, false if not found\n   */\n  deleteSnapshot (requestOpts) {\n    return this[kSnapshotRecorder].deleteSnapshot(requestOpts)\n  }\n\n  /**\n   * Gets information about a specific snapshot\n   * @returns {import('./snapshot-recorder').SnapshotInfo|null} - Snapshot information or null if not found\n   */\n  getSnapshotInfo (requestOpts) {\n    return this[kSnapshotRecorder].getSnapshotInfo(requestOpts)\n  }\n\n  /**\n   * Replaces all snapshots with new data (full replacement)\n   * @param {Array<{hash: string; snapshot: import('./snapshot-recorder').SnapshotEntryshotEntry}>|Record<string, import('./snapshot-recorder').SnapshotEntry>} snapshotData - New snapshot data to replace existing snapshots\n   * @returns {void}\n   */\n  replaceSnapshots (snapshotData) {\n    this[kSnapshotRecorder].replaceSnapshots(snapshotData)\n  }\n\n  /**\n   * Closes the agent, saving snapshots and cleaning up resources.\n   *\n   * @returns {Promise<void>}\n   */\n  async close () {\n    await this[kSnapshotRecorder].close()\n    await this[kRealAgent]?.close()\n    await super.close()\n  }\n}\n\nmodule.exports = SnapshotAgent\n", "'use strict'\n\n// We include a version number for the Dispatcher API. In case of breaking changes,\n// this version number must be increased to avoid conflicts.\nconst globalDispatcher = Symbol.for('undici.globalDispatcher.1')\nconst { InvalidArgumentError } = require('./core/errors')\nconst Agent = require('./dispatcher/agent')\n\nif (getGlobalDispatcher() === undefined) {\n  setGlobalDispatcher(new Agent())\n}\n\nfunction setGlobalDispatcher (agent) {\n  if (!agent || typeof agent.dispatch !== 'function') {\n    throw new InvalidArgumentError('Argument agent must implement Agent')\n  }\n  Object.defineProperty(globalThis, globalDispatcher, {\n    value: agent,\n    writable: true,\n    enumerable: false,\n    configurable: false\n  })\n}\n\nfunction getGlobalDispatcher () {\n  return globalThis[globalDispatcher]\n}\n\n// These are the globals that can be installed by undici.install().\n// Not exported by index.js to avoid use outside of this module.\nconst installedExports = /** @type {const} */ (\n  [\n    'fetch',\n    'Headers',\n    'Response',\n    'Request',\n    'FormData',\n    'WebSocket',\n    'CloseEvent',\n    'ErrorEvent',\n    'MessageEvent',\n    'EventSource'\n  ]\n)\n\nmodule.exports = {\n  setGlobalDispatcher,\n  getGlobalDispatcher,\n  installedExports\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst WrapHandler = require('./wrap-handler')\n\n/**\n * @deprecated\n */\nmodule.exports = class DecoratorHandler {\n  #handler\n  #onCompleteCalled = false\n  #onErrorCalled = false\n  #onResponseStartCalled = false\n\n  constructor (handler) {\n    if (typeof handler !== 'object' || handler === null) {\n      throw new TypeError('handler must be an object')\n    }\n    this.#handler = WrapHandler.wrap(handler)\n  }\n\n  onRequestStart (...args) {\n    this.#handler.onRequestStart?.(...args)\n  }\n\n  onRequestUpgrade (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n\n    return this.#handler.onRequestUpgrade?.(...args)\n  }\n\n  onResponseStart (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n    assert(!this.#onResponseStartCalled)\n\n    this.#onResponseStartCalled = true\n\n    return this.#handler.onResponseStart?.(...args)\n  }\n\n  onResponseData (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n\n    return this.#handler.onResponseData?.(...args)\n  }\n\n  onResponseEnd (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n\n    this.#onCompleteCalled = true\n    return this.#handler.onResponseEnd?.(...args)\n  }\n\n  onResponseError (...args) {\n    this.#onErrorCalled = true\n    return this.#handler.onResponseError?.(...args)\n  }\n\n  /**\n   * @deprecated\n   */\n  onBodySent () {}\n}\n", "'use strict'\n\nconst util = require('../core/util')\nconst { kBodyUsed } = require('../core/symbols')\nconst assert = require('node:assert')\nconst { InvalidArgumentError } = require('../core/errors')\nconst EE = require('node:events')\n\nconst redirectableStatusCodes = [300, 301, 302, 303, 307, 308]\n\nconst kBody = Symbol('body')\n\nconst noop = () => {}\n\nclass BodyAsyncIterable {\n  constructor (body) {\n    this[kBody] = body\n    this[kBodyUsed] = false\n  }\n\n  async * [Symbol.asyncIterator] () {\n    assert(!this[kBodyUsed], 'disturbed')\n    this[kBodyUsed] = true\n    yield * this[kBody]\n  }\n}\n\nclass RedirectHandler {\n  static buildDispatch (dispatcher, maxRedirections) {\n    if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {\n      throw new InvalidArgumentError('maxRedirections must be a positive number')\n    }\n\n    const dispatch = dispatcher.dispatch.bind(dispatcher)\n    return (opts, originalHandler) => dispatch(opts, new RedirectHandler(dispatch, maxRedirections, opts, originalHandler))\n  }\n\n  constructor (dispatch, maxRedirections, opts, handler) {\n    if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {\n      throw new InvalidArgumentError('maxRedirections must be a positive number')\n    }\n\n    this.dispatch = dispatch\n    this.location = null\n    const { maxRedirections: _, ...cleanOpts } = opts\n    this.opts = cleanOpts // opts must be a copy, exclude maxRedirections\n    this.maxRedirections = maxRedirections\n    this.handler = handler\n    this.history = []\n\n    if (util.isStream(this.opts.body)) {\n      // TODO (fix): Provide some way for the user to cache the file to e.g. /tmp\n      // so that it can be dispatched again?\n      // TODO (fix): Do we need 100-expect support to provide a way to do this properly?\n      if (util.bodyLength(this.opts.body) === 0) {\n        this.opts.body\n          .on('data', function () {\n            assert(false)\n          })\n      }\n\n      if (typeof this.opts.body.readableDidRead !== 'boolean') {\n        this.opts.body[kBodyUsed] = false\n        EE.prototype.on.call(this.opts.body, 'data', function () {\n          this[kBodyUsed] = true\n        })\n      }\n    } else if (this.opts.body && typeof this.opts.body.pipeTo === 'function') {\n      // TODO (fix): We can't access ReadableStream internal state\n      // to determine whether or not it has been disturbed. This is just\n      // a workaround.\n      this.opts.body = new BodyAsyncIterable(this.opts.body)\n    } else if (\n      this.opts.body &&\n      typeof this.opts.body !== 'string' &&\n      !ArrayBuffer.isView(this.opts.body) &&\n      util.isIterable(this.opts.body) &&\n      !util.isFormDataLike(this.opts.body)\n    ) {\n      // TODO: Should we allow re-using iterable if !this.opts.idempotent\n      // or through some other flag?\n      this.opts.body = new BodyAsyncIterable(this.opts.body)\n    }\n  }\n\n  onRequestStart (controller, context) {\n    this.handler.onRequestStart?.(controller, { ...context, history: this.history })\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    if (this.opts.throwOnMaxRedirect && this.history.length >= this.maxRedirections) {\n      throw new Error('max redirects')\n    }\n\n    // https://tools.ietf.org/html/rfc7231#section-6.4.2\n    // https://fetch.spec.whatwg.org/#http-redirect-fetch\n    // In case of HTTP 301 or 302 with POST, change the method to GET\n    if ((statusCode === 301 || statusCode === 302) && this.opts.method === 'POST') {\n      this.opts.method = 'GET'\n      if (util.isStream(this.opts.body)) {\n        util.destroy(this.opts.body.on('error', noop))\n      }\n      this.opts.body = null\n    }\n\n    // https://tools.ietf.org/html/rfc7231#section-6.4.4\n    // In case of HTTP 303, always replace method to be either HEAD or GET\n    if (statusCode === 303 && this.opts.method !== 'HEAD') {\n      this.opts.method = 'GET'\n      if (util.isStream(this.opts.body)) {\n        util.destroy(this.opts.body.on('error', noop))\n      }\n      this.opts.body = null\n    }\n\n    this.location = this.history.length >= this.maxRedirections || util.isDisturbed(this.opts.body) || redirectableStatusCodes.indexOf(statusCode) === -1\n      ? null\n      : headers.location\n\n    if (this.opts.origin) {\n      this.history.push(new URL(this.opts.path, this.opts.origin))\n    }\n\n    if (!this.location) {\n      this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n      return\n    }\n\n    const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin)))\n    const path = search ? `${pathname}${search}` : pathname\n\n    // Check for redirect loops by seeing if we've already visited this URL in our history\n    // This catches the case where Client/Pool try to handle cross-origin redirects but fail\n    // and keep redirecting to the same URL in an infinite loop\n    const redirectUrlString = `${origin}${path}`\n    for (const historyUrl of this.history) {\n      if (historyUrl.toString() === redirectUrlString) {\n        throw new InvalidArgumentError(`Redirect loop detected. Cannot redirect to ${origin}. This typically happens when using a Client or Pool with cross-origin redirects. Use an Agent for cross-origin redirects.`)\n      }\n    }\n\n    // Remove headers referring to the original URL.\n    // By default it is Host only, unless it's a 303 (see below), which removes also all Content-* headers.\n    // https://tools.ietf.org/html/rfc7231#section-6.4\n    this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin)\n    this.opts.path = path\n    this.opts.origin = origin\n    this.opts.query = null\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.location) {\n      /*\n        https://tools.ietf.org/html/rfc7231#section-6.4\n\n        TLDR: undici always ignores 3xx response bodies.\n\n        Redirection is used to serve the requested resource from another URL, so it assumes that\n        no body is generated (and thus can be ignored). Even though generating a body is not prohibited.\n\n        For status 301, 302, 303, 307 and 308 (the latter from RFC 7238), the specs mention that the body usually\n        (which means it's optional and not mandated) contain just an hyperlink to the value of\n        the Location response header, so the body can be ignored safely.\n\n        For status 300, which is \"Multiple Choices\", the spec mentions both generating a Location\n        response header AND a response body with the other possible location to follow.\n        Since the spec explicitly chooses not to specify a format for such body and leave it to\n        servers and browsers implementors, we ignore the body as there is no specified way to eventually parse it.\n      */\n    } else {\n      this.handler.onResponseData?.(controller, chunk)\n    }\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.location) {\n      /*\n        https://tools.ietf.org/html/rfc7231#section-6.4\n\n        TLDR: undici always ignores 3xx response trailers as they are not expected in case of redirections\n        and neither are useful if present.\n\n        See comment on onData method above for more detailed information.\n      */\n      this.dispatch(this.opts, this)\n    } else {\n      this.handler.onResponseEnd(controller, trailers)\n    }\n  }\n\n  onResponseError (controller, error) {\n    this.handler.onResponseError?.(controller, error)\n  }\n}\n\n// https://tools.ietf.org/html/rfc7231#section-6.4.4\nfunction shouldRemoveHeader (header, removeContent, unknownOrigin) {\n  if (header.length === 4) {\n    return util.headerNameToString(header) === 'host'\n  }\n  if (removeContent && util.headerNameToString(header).startsWith('content-')) {\n    return true\n  }\n  if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) {\n    const name = util.headerNameToString(header)\n    return name === 'authorization' || name === 'cookie' || name === 'proxy-authorization'\n  }\n  return false\n}\n\n// https://tools.ietf.org/html/rfc7231#section-6.4\nfunction cleanRequestHeaders (headers, removeContent, unknownOrigin) {\n  const ret = []\n  if (Array.isArray(headers)) {\n    for (let i = 0; i < headers.length; i += 2) {\n      if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) {\n        ret.push(headers[i], headers[i + 1])\n      }\n    }\n  } else if (headers && typeof headers === 'object') {\n    const entries = util.hasSafeIterator(headers) ? headers : Object.entries(headers)\n\n    for (const [key, value] of entries) {\n      if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) {\n        ret.push(key, value)\n      }\n    }\n  } else {\n    assert(headers == null, 'headers must be an object or an array')\n  }\n  return ret\n}\n\nmodule.exports = RedirectHandler\n", "'use strict'\n\nconst RedirectHandler = require('../handler/redirect-handler')\n\nfunction createRedirectInterceptor ({ maxRedirections: defaultMaxRedirections } = {}) {\n  return (dispatch) => {\n    return function Intercept (opts, handler) {\n      const { maxRedirections = defaultMaxRedirections, ...rest } = opts\n\n      if (maxRedirections == null || maxRedirections === 0) {\n        return dispatch(opts, handler)\n      }\n\n      const dispatchOpts = { ...rest } // Stop sub dispatcher from also redirecting.\n      const redirectHandler = new RedirectHandler(dispatch, maxRedirections, dispatchOpts, handler)\n      return dispatch(dispatchOpts, redirectHandler)\n    }\n  }\n}\n\nmodule.exports = createRedirectInterceptor\n", "'use strict'\n\n// const { parseHeaders } = require('../core/util')\nconst DecoratorHandler = require('../handler/decorator-handler')\nconst { ResponseError } = require('../core/errors')\n\nclass ResponseErrorHandler extends DecoratorHandler {\n  #statusCode\n  #contentType\n  #decoder\n  #headers\n  #body\n\n  constructor (_opts, { handler }) {\n    super(handler)\n  }\n\n  #checkContentType (contentType) {\n    return (this.#contentType ?? '').indexOf(contentType) === 0\n  }\n\n  onRequestStart (controller, context) {\n    this.#statusCode = 0\n    this.#contentType = null\n    this.#decoder = null\n    this.#headers = null\n    this.#body = ''\n\n    return super.onRequestStart(controller, context)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    this.#statusCode = statusCode\n    this.#headers = headers\n    this.#contentType = headers['content-type']\n\n    if (this.#statusCode < 400) {\n      return super.onResponseStart(controller, statusCode, headers, statusMessage)\n    }\n\n    if (this.#checkContentType('application/json') || this.#checkContentType('text/plain')) {\n      this.#decoder = new TextDecoder('utf-8')\n    }\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.#statusCode < 400) {\n      return super.onResponseData(controller, chunk)\n    }\n\n    this.#body += this.#decoder?.decode(chunk, { stream: true }) ?? ''\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.#statusCode >= 400) {\n      this.#body += this.#decoder?.decode(undefined, { stream: false }) ?? ''\n\n      if (this.#checkContentType('application/json')) {\n        try {\n          this.#body = JSON.parse(this.#body)\n        } catch {\n          // Do nothing...\n        }\n      }\n\n      let err\n      const stackTraceLimit = Error.stackTraceLimit\n      Error.stackTraceLimit = 0\n      try {\n        err = new ResponseError('Response Error', this.#statusCode, {\n          body: this.#body,\n          headers: this.#headers\n        })\n      } finally {\n        Error.stackTraceLimit = stackTraceLimit\n      }\n\n      super.onResponseError(controller, err)\n    } else {\n      super.onResponseEnd(controller, trailers)\n    }\n  }\n\n  onResponseError (controller, err) {\n    super.onResponseError(controller, err)\n  }\n}\n\nmodule.exports = () => {\n  return (dispatch) => {\n    return function Intercept (opts, handler) {\n      return dispatch(opts, new ResponseErrorHandler(opts, { handler }))\n    }\n  }\n}\n", "'use strict'\nconst RetryHandler = require('../handler/retry-handler')\n\nmodule.exports = globalOpts => {\n  return dispatch => {\n    return function retryInterceptor (opts, handler) {\n      return dispatch(\n        opts,\n        new RetryHandler(\n          { ...opts, retryOptions: { ...globalOpts, ...opts.retryOptions } },\n          {\n            handler,\n            dispatch\n          }\n        )\n      )\n    }\n  }\n}\n", "'use strict'\n\nconst { InvalidArgumentError, RequestAbortedError } = require('../core/errors')\nconst DecoratorHandler = require('../handler/decorator-handler')\n\nclass DumpHandler extends DecoratorHandler {\n  #maxSize = 1024 * 1024\n  #dumped = false\n  #size = 0\n  #controller = null\n  aborted = false\n  reason = false\n\n  constructor ({ maxSize, signal }, handler) {\n    if (maxSize != null && (!Number.isFinite(maxSize) || maxSize < 1)) {\n      throw new InvalidArgumentError('maxSize must be a number greater than 0')\n    }\n\n    super(handler)\n\n    this.#maxSize = maxSize ?? this.#maxSize\n    // this.#handler = handler\n  }\n\n  #abort (reason) {\n    this.aborted = true\n    this.reason = reason\n  }\n\n  onRequestStart (controller, context) {\n    controller.abort = this.#abort.bind(this)\n    this.#controller = controller\n\n    return super.onRequestStart(controller, context)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    const contentLength = headers['content-length']\n\n    if (contentLength != null && contentLength > this.#maxSize) {\n      throw new RequestAbortedError(\n        `Response size (${contentLength}) larger than maxSize (${\n          this.#maxSize\n        })`\n      )\n    }\n\n    if (this.aborted === true) {\n      return true\n    }\n\n    return super.onResponseStart(controller, statusCode, headers, statusMessage)\n  }\n\n  onResponseError (controller, err) {\n    if (this.#dumped) {\n      return\n    }\n\n    // On network errors before connect, controller will be null\n    err = this.#controller?.reason ?? err\n\n    super.onResponseError(controller, err)\n  }\n\n  onResponseData (controller, chunk) {\n    this.#size = this.#size + chunk.length\n\n    if (this.#size >= this.#maxSize) {\n      this.#dumped = true\n\n      if (this.aborted === true) {\n        super.onResponseError(controller, this.reason)\n      } else {\n        super.onResponseEnd(controller, {})\n      }\n    }\n\n    return true\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.#dumped) {\n      return\n    }\n\n    if (this.#controller.aborted === true) {\n      super.onResponseError(controller, this.reason)\n      return\n    }\n\n    super.onResponseEnd(controller, trailers)\n  }\n}\n\nfunction createDumpInterceptor (\n  { maxSize: defaultMaxSize } = {\n    maxSize: 1024 * 1024\n  }\n) {\n  return dispatch => {\n    return function Intercept (opts, handler) {\n      const { dumpMaxSize = defaultMaxSize } = opts\n\n      const dumpHandler = new DumpHandler({ maxSize: dumpMaxSize, signal: opts.signal }, handler)\n\n      return dispatch(opts, dumpHandler)\n    }\n  }\n}\n\nmodule.exports = createDumpInterceptor\n", "'use strict'\nconst { isIP } = require('node:net')\nconst { lookup } = require('node:dns')\nconst DecoratorHandler = require('../handler/decorator-handler')\nconst { InvalidArgumentError, InformationalError } = require('../core/errors')\nconst maxInt = Math.pow(2, 31) - 1\n\nfunction hasSafeIterator (headers) {\n  const prototype = Object.getPrototypeOf(headers)\n  const ownIterator = Object.prototype.hasOwnProperty.call(headers, Symbol.iterator)\n  return ownIterator || (prototype != null && prototype !== Object.prototype && typeof headers[Symbol.iterator] === 'function')\n}\n\nfunction isHostHeader (key) {\n  return typeof key === 'string' && key.toLowerCase() === 'host'\n}\n\nfunction normalizeHeaders (headers) {\n  if (headers == null) {\n    return null\n  }\n\n  if (Array.isArray(headers)) {\n    if (headers.length === 0 || !Array.isArray(headers[0])) {\n      return headers\n    }\n\n    const normalized = []\n    for (const header of headers) {\n      if (Array.isArray(header) && header.length === 2) {\n        normalized.push(header[0], header[1])\n      } else {\n        normalized.push(header)\n      }\n    }\n\n    return normalized\n  }\n\n  if (typeof headers === 'object' && hasSafeIterator(headers)) {\n    const normalized = []\n    for (const header of headers) {\n      if (Array.isArray(header) && header.length === 2) {\n        normalized.push(header[0], header[1])\n      } else {\n        normalized.push(header)\n      }\n    }\n\n    return normalized\n  }\n\n  return headers\n}\n\nfunction hasHostHeader (headers) {\n  if (headers == null) {\n    return false\n  }\n\n  if (Array.isArray(headers)) {\n    if (headers.length === 0) {\n      return false\n    }\n\n    for (let i = 0; i < headers.length; i += 2) {\n      if (isHostHeader(headers[i])) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  if (typeof headers === 'object') {\n    for (const key in headers) {\n      if (isHostHeader(key)) {\n        return true\n      }\n    }\n  }\n\n  return false\n}\n\nfunction withHostHeader (host, headers) {\n  const normalizedHeaders = normalizeHeaders(headers)\n\n  if (hasHostHeader(normalizedHeaders)) {\n    return normalizedHeaders\n  }\n\n  if (Array.isArray(normalizedHeaders)) {\n    return ['host', host, ...normalizedHeaders]\n  }\n\n  if (normalizedHeaders && typeof normalizedHeaders === 'object') {\n    return {\n      host,\n      ...normalizedHeaders\n    }\n  }\n\n  return { host }\n}\n\nclass DNSStorage {\n  #maxItems = 0\n  #records = new Map()\n\n  constructor (opts) {\n    this.#maxItems = opts.maxItems\n  }\n\n  get size () {\n    return this.#records.size\n  }\n\n  get (hostname) {\n    return this.#records.get(hostname) ?? null\n  }\n\n  set (hostname, records) {\n    this.#records.set(hostname, records)\n  }\n\n  delete (hostname) {\n    this.#records.delete(hostname)\n  }\n\n  // Delegate to storage decide can we do more lookups or not\n  full () {\n    return this.size >= this.#maxItems\n  }\n}\n\nclass DNSInstance {\n  #maxTTL = 0\n  #maxItems = 0\n  dualStack = true\n  affinity = null\n  lookup = null\n  pick = null\n  storage = null\n\n  constructor (opts) {\n    this.#maxTTL = opts.maxTTL\n    this.#maxItems = opts.maxItems\n    this.dualStack = opts.dualStack\n    this.affinity = opts.affinity\n    this.lookup = opts.lookup ?? this.#defaultLookup\n    this.pick = opts.pick ?? this.#defaultPick\n    this.storage = opts.storage ?? new DNSStorage(opts)\n  }\n\n  runLookup (origin, opts, cb) {\n    const ips = this.storage.get(origin.hostname)\n\n    // If full, we just return the origin\n    if (ips == null && this.storage.full()) {\n      cb(null, origin)\n      return\n    }\n\n    const newOpts = {\n      affinity: this.affinity,\n      dualStack: this.dualStack,\n      lookup: this.lookup,\n      pick: this.pick,\n      ...opts.dns,\n      maxTTL: this.#maxTTL,\n      maxItems: this.#maxItems\n    }\n\n    // If no IPs we lookup\n    if (ips == null) {\n      this.lookup(origin, newOpts, (err, addresses) => {\n        if (err || addresses == null || addresses.length === 0) {\n          cb(err ?? new InformationalError('No DNS entries found'))\n          return\n        }\n\n        this.setRecords(origin, addresses)\n        const records = this.storage.get(origin.hostname)\n\n        const ip = this.pick(\n          origin,\n          records,\n          newOpts.affinity\n        )\n\n        let port\n        if (typeof ip.port === 'number') {\n          port = `:${ip.port}`\n        } else if (origin.port !== '') {\n          port = `:${origin.port}`\n        } else {\n          port = ''\n        }\n\n        cb(\n          null,\n          new URL(`${origin.protocol}//${\n            ip.family === 6 ? `[${ip.address}]` : ip.address\n          }${port}`)\n        )\n      })\n    } else {\n      // If there's IPs we pick\n      const ip = this.pick(\n        origin,\n        ips,\n        newOpts.affinity\n      )\n\n      // If no IPs we lookup - deleting old records\n      if (ip == null) {\n        this.storage.delete(origin.hostname)\n        this.runLookup(origin, opts, cb)\n        return\n      }\n\n      let port\n      if (typeof ip.port === 'number') {\n        port = `:${ip.port}`\n      } else if (origin.port !== '') {\n        port = `:${origin.port}`\n      } else {\n        port = ''\n      }\n\n      cb(\n        null,\n        new URL(`${origin.protocol}//${\n          ip.family === 6 ? `[${ip.address}]` : ip.address\n        }${port}`)\n      )\n    }\n  }\n\n  #defaultLookup (origin, opts, cb) {\n    lookup(\n      origin.hostname,\n      {\n        all: true,\n        family: this.dualStack === false ? this.affinity : 0,\n        order: 'ipv4first'\n      },\n      (err, addresses) => {\n        if (err) {\n          return cb(err)\n        }\n\n        const results = new Map()\n\n        for (const addr of addresses) {\n          // On linux we found duplicates, we attempt to remove them with\n          // the latest record\n          results.set(`${addr.address}:${addr.family}`, addr)\n        }\n\n        cb(null, results.values())\n      }\n    )\n  }\n\n  #defaultPick (origin, hostnameRecords, affinity) {\n    let ip = null\n    const { records, offset } = hostnameRecords\n\n    let family\n    if (this.dualStack) {\n      if (affinity == null) {\n        // Balance between ip families\n        if (offset == null || offset === maxInt) {\n          hostnameRecords.offset = 0\n          affinity = 4\n        } else {\n          hostnameRecords.offset++\n          affinity = (hostnameRecords.offset & 1) === 1 ? 6 : 4\n        }\n      }\n\n      if (records[affinity] != null && records[affinity].ips.length > 0) {\n        family = records[affinity]\n      } else {\n        family = records[affinity === 4 ? 6 : 4]\n      }\n    } else {\n      family = records[affinity]\n    }\n\n    // If no IPs we return null\n    if (family == null || family.ips.length === 0) {\n      return ip\n    }\n\n    if (family.offset == null || family.offset === maxInt) {\n      family.offset = 0\n    } else {\n      family.offset++\n    }\n\n    const position = family.offset % family.ips.length\n    ip = family.ips[position] ?? null\n\n    if (ip == null) {\n      return ip\n    }\n\n    if (Date.now() - ip.timestamp > ip.ttl) { // record TTL is already in ms\n      // We delete expired records\n      // It is possible that they have different TTL, so we manage them individually\n      family.ips.splice(position, 1)\n      return this.pick(origin, hostnameRecords, affinity)\n    }\n\n    return ip\n  }\n\n  pickFamily (origin, ipFamily) {\n    const records = this.storage.get(origin.hostname)?.records\n    if (!records) {\n      return null\n    }\n\n    const family = records[ipFamily]\n    if (!family) {\n      return null\n    }\n\n    if (family.offset == null || family.offset === maxInt) {\n      family.offset = 0\n    } else {\n      family.offset++\n    }\n\n    const position = family.offset % family.ips.length\n    const ip = family.ips[position] ?? null\n    if (ip == null) {\n      return ip\n    }\n\n    if (Date.now() - ip.timestamp > ip.ttl) { // record TTL is already in ms\n      // We delete expired records\n      // It is possible that they have different TTL, so we manage them individually\n      family.ips.splice(position, 1)\n    }\n\n    return ip\n  }\n\n  setRecords (origin, addresses) {\n    const timestamp = Date.now()\n    const records = { records: { 4: null, 6: null } }\n    let minTTL = this.#maxTTL\n    for (const record of addresses) {\n      record.timestamp = timestamp\n      if (typeof record.ttl === 'number') {\n        // The record TTL is expected to be in ms\n        record.ttl = Math.min(record.ttl, this.#maxTTL)\n        minTTL = Math.min(minTTL, record.ttl)\n      } else {\n        record.ttl = this.#maxTTL\n      }\n\n      const familyRecords = records.records[record.family] ?? { ips: [] }\n\n      familyRecords.ips.push(record)\n      records.records[record.family] = familyRecords\n    }\n\n    // We provide a default TTL if external storage will be used without TTL per record-level support\n    this.storage.set(origin.hostname, records, { ttl: minTTL })\n  }\n\n  deleteRecords (origin) {\n    this.storage.delete(origin.hostname)\n  }\n\n  getHandler (meta, opts) {\n    return new DNSDispatchHandler(this, meta, opts)\n  }\n}\n\nclass DNSDispatchHandler extends DecoratorHandler {\n  #state = null\n  #opts = null\n  #dispatch = null\n  #origin = null\n  #controller = null\n  #newOrigin = null\n  #firstTry = true\n\n  constructor (state, { origin, handler, dispatch, newOrigin }, opts) {\n    super(handler)\n    this.#origin = origin\n    this.#newOrigin = newOrigin\n    this.#opts = { ...opts }\n    this.#state = state\n    this.#dispatch = dispatch\n  }\n\n  onResponseError (controller, err) {\n    switch (err.code) {\n      case 'ETIMEDOUT':\n      case 'ECONNREFUSED': {\n        if (this.#state.dualStack) {\n          if (!this.#firstTry) {\n            super.onResponseError(controller, err)\n            return\n          }\n          this.#firstTry = false\n\n          // Pick an ip address from the other family\n          const otherFamily = this.#newOrigin.hostname[0] === '[' ? 4 : 6\n          const ip = this.#state.pickFamily(this.#origin, otherFamily)\n          if (ip == null) {\n            super.onResponseError(controller, err)\n            return\n          }\n\n          let port\n          if (typeof ip.port === 'number') {\n            port = `:${ip.port}`\n          } else if (this.#origin.port !== '') {\n            port = `:${this.#origin.port}`\n          } else {\n            port = ''\n          }\n\n          const dispatchOpts = {\n            ...this.#opts,\n            origin: `${this.#origin.protocol}//${\n              ip.family === 6 ? `[${ip.address}]` : ip.address\n            }${port}`,\n            headers: withHostHeader(this.#origin.host, this.#opts.headers)\n          }\n          this.#dispatch(dispatchOpts, this)\n          return\n        }\n\n        // if dual-stack disabled, we error out\n        super.onResponseError(controller, err)\n        break\n      }\n      case 'ENOTFOUND':\n        this.#state.deleteRecords(this.#origin)\n        super.onResponseError(controller, err)\n        break\n      default:\n        super.onResponseError(controller, err)\n        break\n    }\n  }\n}\n\nmodule.exports = interceptorOpts => {\n  if (\n    interceptorOpts?.maxTTL != null &&\n    (typeof interceptorOpts?.maxTTL !== 'number' || interceptorOpts?.maxTTL < 0)\n  ) {\n    throw new InvalidArgumentError('Invalid maxTTL. Must be a positive number')\n  }\n\n  if (\n    interceptorOpts?.maxItems != null &&\n    (typeof interceptorOpts?.maxItems !== 'number' ||\n      interceptorOpts?.maxItems < 1)\n  ) {\n    throw new InvalidArgumentError(\n      'Invalid maxItems. Must be a positive number and greater than zero'\n    )\n  }\n\n  if (\n    interceptorOpts?.affinity != null &&\n    interceptorOpts?.affinity !== 4 &&\n    interceptorOpts?.affinity !== 6\n  ) {\n    throw new InvalidArgumentError('Invalid affinity. Must be either 4 or 6')\n  }\n\n  if (\n    interceptorOpts?.dualStack != null &&\n    typeof interceptorOpts?.dualStack !== 'boolean'\n  ) {\n    throw new InvalidArgumentError('Invalid dualStack. Must be a boolean')\n  }\n\n  if (\n    interceptorOpts?.lookup != null &&\n    typeof interceptorOpts?.lookup !== 'function'\n  ) {\n    throw new InvalidArgumentError('Invalid lookup. Must be a function')\n  }\n\n  if (\n    interceptorOpts?.pick != null &&\n    typeof interceptorOpts?.pick !== 'function'\n  ) {\n    throw new InvalidArgumentError('Invalid pick. Must be a function')\n  }\n\n  if (\n    interceptorOpts?.storage != null &&\n    (typeof interceptorOpts?.storage?.get !== 'function' ||\n      typeof interceptorOpts?.storage?.set !== 'function' ||\n      typeof interceptorOpts?.storage?.full !== 'function' ||\n      typeof interceptorOpts?.storage?.delete !== 'function'\n    )\n  ) {\n    throw new InvalidArgumentError('Invalid storage. Must be a object with methods: { get, set, full, delete }')\n  }\n\n  const dualStack = interceptorOpts?.dualStack ?? true\n  let affinity\n  if (dualStack) {\n    affinity = interceptorOpts?.affinity ?? null\n  } else {\n    affinity = interceptorOpts?.affinity ?? 4\n  }\n\n  const opts = {\n    maxTTL: interceptorOpts?.maxTTL ?? 10e3, // Expressed in ms\n    lookup: interceptorOpts?.lookup ?? null,\n    pick: interceptorOpts?.pick ?? null,\n    dualStack,\n    affinity,\n    maxItems: interceptorOpts?.maxItems ?? Infinity,\n    storage: interceptorOpts?.storage\n  }\n\n  const instance = new DNSInstance(opts)\n\n  return dispatch => {\n    return function dnsInterceptor (origDispatchOpts, handler) {\n      const origin =\n        origDispatchOpts.origin.constructor === URL\n          ? origDispatchOpts.origin\n          : new URL(origDispatchOpts.origin)\n\n      if (isIP(origin.hostname) !== 0) {\n        return dispatch(origDispatchOpts, handler)\n      }\n\n      instance.runLookup(origin, origDispatchOpts, (err, newOrigin) => {\n        if (err) {\n          return handler.onResponseError(null, err)\n        }\n\n        const dispatchOpts = {\n          ...origDispatchOpts,\n          servername: origin.hostname, // For SNI on TLS\n          origin: newOrigin.origin,\n          headers: withHostHeader(origin.host, origDispatchOpts.headers)\n        }\n\n        dispatch(\n          dispatchOpts,\n          instance.getHandler(\n            { origin, dispatch, handler, newOrigin },\n            origDispatchOpts\n          )\n        )\n      })\n\n      return true\n    }\n  }\n}\n", "'use strict'\n\nconst {\n  safeHTTPMethods,\n  pathHasQueryOrFragment,\n  hasSafeIterator\n} = require('../core/util')\n\nconst { serializePathWithQuery } = require('../core/util')\n\n/**\n * @param {import('../../types/dispatcher.d.ts').default.DispatchOptions} opts\n */\nfunction makeCacheKey (opts) {\n  if (!opts.origin) {\n    throw new Error('opts.origin is undefined')\n  }\n\n  let fullPath = opts.path || '/'\n\n  if (opts.query && !pathHasQueryOrFragment(opts.path)) {\n    fullPath = serializePathWithQuery(fullPath, opts.query)\n  }\n\n  return {\n    origin: opts.origin.toString(),\n    method: opts.method,\n    path: fullPath,\n    headers: opts.headers\n  }\n}\n\n/**\n * @param {Record<string, string[] | string>}\n * @returns {Record<string, string[] | string>}\n */\nfunction normalizeHeaders (opts) {\n  let headers\n  if (opts.headers == null) {\n    headers = {}\n  } else if (typeof opts.headers === 'object') {\n    headers = {}\n\n    if (hasSafeIterator(opts.headers)) {\n      for (const x of opts.headers) {\n        if (!Array.isArray(x)) {\n          throw new Error('opts.headers is not a valid header map')\n        }\n        const [key, val] = x\n        if (typeof key !== 'string' || typeof val !== 'string') {\n          throw new Error('opts.headers is not a valid header map')\n        }\n        headers[key.toLowerCase()] = val\n      }\n    } else {\n      for (const key of Object.keys(opts.headers)) {\n        headers[key.toLowerCase()] = opts.headers[key]\n      }\n    }\n  } else {\n    throw new Error('opts.headers is not an object')\n  }\n\n  return headers\n}\n\n/**\n * @param {any} key\n */\nfunction assertCacheKey (key) {\n  if (typeof key !== 'object') {\n    throw new TypeError(`expected key to be object, got ${typeof key}`)\n  }\n\n  for (const property of ['origin', 'method', 'path']) {\n    if (typeof key[property] !== 'string') {\n      throw new TypeError(`expected key.${property} to be string, got ${typeof key[property]}`)\n    }\n  }\n\n  if (key.headers !== undefined && typeof key.headers !== 'object') {\n    throw new TypeError(`expected headers to be object, got ${typeof key}`)\n  }\n}\n\n/**\n * @param {any} value\n */\nfunction assertCacheValue (value) {\n  if (typeof value !== 'object') {\n    throw new TypeError(`expected value to be object, got ${typeof value}`)\n  }\n\n  for (const property of ['statusCode', 'cachedAt', 'staleAt', 'deleteAt']) {\n    if (typeof value[property] !== 'number') {\n      throw new TypeError(`expected value.${property} to be number, got ${typeof value[property]}`)\n    }\n  }\n\n  if (typeof value.statusMessage !== 'string') {\n    throw new TypeError(`expected value.statusMessage to be string, got ${typeof value.statusMessage}`)\n  }\n\n  if (value.headers != null && typeof value.headers !== 'object') {\n    throw new TypeError(`expected value.rawHeaders to be object, got ${typeof value.headers}`)\n  }\n\n  if (value.vary !== undefined && typeof value.vary !== 'object') {\n    throw new TypeError(`expected value.vary to be object, got ${typeof value.vary}`)\n  }\n\n  if (value.etag !== undefined && typeof value.etag !== 'string') {\n    throw new TypeError(`expected value.etag to be string, got ${typeof value.etag}`)\n  }\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-cache-control\n * @see https://www.iana.org/assignments/http-cache-directives/http-cache-directives.xhtml\n\n * @param {string | string[]} header\n * @returns {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives}\n */\nfunction parseCacheControlHeader (header) {\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives}\n   */\n  const output = {}\n\n  let directives\n  if (Array.isArray(header)) {\n    directives = []\n\n    for (const directive of header) {\n      directives.push(...directive.split(','))\n    }\n  } else {\n    directives = header.split(',')\n  }\n\n  for (let i = 0; i < directives.length; i++) {\n    const directive = directives[i].toLowerCase()\n    const keyValueDelimiter = directive.indexOf('=')\n\n    let key\n    let value\n    if (keyValueDelimiter !== -1) {\n      key = directive.substring(0, keyValueDelimiter).trimStart()\n      value = directive.substring(keyValueDelimiter + 1)\n    } else {\n      key = directive.trim()\n    }\n\n    switch (key) {\n      case 'min-fresh':\n      case 'max-stale':\n      case 'max-age':\n      case 's-maxage':\n      case 'stale-while-revalidate':\n      case 'stale-if-error': {\n        if (value === undefined || value[0] === ' ') {\n          continue\n        }\n\n        if (\n          value.length >= 2 &&\n          value[0] === '\"' &&\n          value[value.length - 1] === '\"'\n        ) {\n          value = value.substring(1, value.length - 1)\n        }\n\n        const parsedValue = parseInt(value, 10)\n        // eslint-disable-next-line no-self-compare\n        if (parsedValue !== parsedValue) {\n          continue\n        }\n\n        if (key === 'max-age' && key in output && output[key] >= parsedValue) {\n          continue\n        }\n\n        output[key] = parsedValue\n\n        break\n      }\n      case 'private':\n      case 'no-cache': {\n        if (value) {\n          // The private and no-cache directives can be unqualified (aka just\n          //  `private` or `no-cache`) or qualified (w/ a value). When they're\n          //  qualified, it's a list of headers like `no-cache=header1`,\n          //  `no-cache=\"header1\"`, or `no-cache=\"header1, header2\"`\n          // If we're given multiple headers, the comma messes us up since\n          //  we split the full header by commas. So, let's loop through the\n          //  remaining parts in front of us until we find one that ends in a\n          //  quote. We can then just splice all of the parts in between the\n          //  starting quote and the ending quote out of the directives array\n          //  and continue parsing like normal.\n          // https://www.rfc-editor.org/rfc/rfc9111.html#name-no-cache-2\n          if (value[0] === '\"') {\n            // Something like `no-cache=\"some-header\"` OR `no-cache=\"some-header, another-header\"`.\n\n            // Add the first header on and cut off the leading quote\n            const headers = [value.substring(1)]\n\n            let foundEndingQuote = value[value.length - 1] === '\"'\n            if (!foundEndingQuote) {\n              // Something like `no-cache=\"some-header, another-header\"`\n              //  This can still be something invalid, e.g. `no-cache=\"some-header, ...`\n              for (let j = i + 1; j < directives.length; j++) {\n                const nextPart = directives[j]\n                const nextPartLength = nextPart.length\n\n                headers.push(nextPart.trim())\n\n                if (nextPartLength !== 0 && nextPart[nextPartLength - 1] === '\"') {\n                  foundEndingQuote = true\n                  break\n                }\n              }\n            }\n\n            if (foundEndingQuote) {\n              let lastHeader = headers[headers.length - 1]\n              if (lastHeader[lastHeader.length - 1] === '\"') {\n                lastHeader = lastHeader.substring(0, lastHeader.length - 1)\n                headers[headers.length - 1] = lastHeader\n              }\n\n              if (key in output) {\n                output[key] = output[key].concat(headers)\n              } else {\n                output[key] = headers\n              }\n            }\n          } else {\n            // Something like `no-cache=\"some-header\"`\n            if (key in output) {\n              output[key] = output[key].concat(value)\n            } else {\n              output[key] = [value]\n            }\n          }\n\n          break\n        }\n      }\n      // eslint-disable-next-line no-fallthrough\n      case 'public':\n      case 'no-store':\n      case 'must-revalidate':\n      case 'proxy-revalidate':\n      case 'immutable':\n      case 'no-transform':\n      case 'must-understand':\n      case 'only-if-cached':\n        if (value) {\n          // These are qualified (something like `public=...`) when they aren't\n          //  allowed to be, skip\n          continue\n        }\n\n        output[key] = true\n        break\n      default:\n        // Ignore unknown directives as per https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.3-1\n        continue\n    }\n  }\n\n  return output\n}\n\n/**\n * @param {string | string[]} varyHeader Vary header from the server\n * @param {Record<string, string | string[]>} headers Request headers\n * @returns {Record<string, string | string[]>}\n */\nfunction parseVaryHeader (varyHeader, headers) {\n  if (typeof varyHeader === 'string' && varyHeader.includes('*')) {\n    return headers\n  }\n\n  const output = /** @type {Record<string, string | string[] | null>} */ ({})\n\n  const varyingHeaders = typeof varyHeader === 'string'\n    ? varyHeader.split(',')\n    : varyHeader\n\n  for (const header of varyingHeaders) {\n    const trimmedHeader = header.trim().toLowerCase()\n\n    output[trimmedHeader] = headers[trimmedHeader] ?? null\n  }\n\n  return output\n}\n\n/**\n * Note: this deviates from the spec a little. Empty etags (\"\", W/\"\") are valid,\n *  however, including them in cached resposnes serves little to no purpose.\n *\n * @see https://www.rfc-editor.org/rfc/rfc9110.html#name-etag\n *\n * @param {string} etag\n * @returns {boolean}\n */\nfunction isEtagUsable (etag) {\n  if (etag.length <= 2) {\n    // Shortest an etag can be is two chars (just \"\"). This is where we deviate\n    //  from the spec requiring a min of 3 chars however\n    return false\n  }\n\n  if (etag[0] === '\"' && etag[etag.length - 1] === '\"') {\n    // ETag: \"\"asd123\"\" or ETag: \"W/\"asd123\"\", kinda undefined behavior in the\n    //  spec. Some servers will accept these while others don't.\n    // ETag: \"asd123\"\n    return !(etag[1] === '\"' || etag.startsWith('\"W/'))\n  }\n\n  if (etag.startsWith('W/\"') && etag[etag.length - 1] === '\"') {\n    // ETag: W/\"\", also where we deviate from the spec & require a min of 3\n    //  chars\n    // ETag: for W/\"\", W/\"asd123\"\n    return etag.length !== 4\n  }\n\n  // Anything else\n  return false\n}\n\n/**\n * @param {unknown} store\n * @returns {asserts store is import('../../types/cache-interceptor.d.ts').default.CacheStore}\n */\nfunction assertCacheStore (store, name = 'CacheStore') {\n  if (typeof store !== 'object' || store === null) {\n    throw new TypeError(`expected type of ${name} to be a CacheStore, got ${store === null ? 'null' : typeof store}`)\n  }\n\n  for (const fn of ['get', 'createWriteStream', 'delete']) {\n    if (typeof store[fn] !== 'function') {\n      throw new TypeError(`${name} needs to have a \\`${fn}()\\` function`)\n    }\n  }\n}\n/**\n * @param {unknown} methods\n * @returns {asserts methods is import('../../types/cache-interceptor.d.ts').default.CacheMethods[]}\n */\nfunction assertCacheMethods (methods, name = 'CacheMethods') {\n  if (!Array.isArray(methods)) {\n    throw new TypeError(`expected type of ${name} needs to be an array, got ${methods === null ? 'null' : typeof methods}`)\n  }\n\n  if (methods.length === 0) {\n    throw new TypeError(`${name} needs to have at least one method`)\n  }\n\n  for (const method of methods) {\n    if (!safeHTTPMethods.includes(method)) {\n      throw new TypeError(`element of ${name}-array needs to be one of following values: ${safeHTTPMethods.join(', ')}, got ${method}`)\n    }\n  }\n}\n\n/**\n * Creates a string key for request deduplication purposes.\n * This key is used to identify in-flight requests that can be shared.\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n * @param {Set<string>} [excludeHeaders] Set of lowercase header names to exclude from the key\n * @returns {string}\n */\nfunction makeDeduplicationKey (cacheKey, excludeHeaders) {\n  // Create a deterministic string key from the cache key\n  // Include origin, method, path, and sorted headers\n  let key = `${cacheKey.origin}:${cacheKey.method}:${cacheKey.path}`\n\n  if (cacheKey.headers) {\n    const sortedHeaders = Object.keys(cacheKey.headers).sort()\n    for (const header of sortedHeaders) {\n      // Skip excluded headers\n      if (excludeHeaders?.has(header.toLowerCase())) {\n        continue\n      }\n      const value = cacheKey.headers[header]\n      key += `:${header}=${Array.isArray(value) ? value.join(',') : value}`\n    }\n  }\n\n  return key\n}\n\nmodule.exports = {\n  makeCacheKey,\n  normalizeHeaders,\n  assertCacheKey,\n  assertCacheValue,\n  parseCacheControlHeader,\n  parseVaryHeader,\n  isEtagUsable,\n  assertCacheMethods,\n  assertCacheStore,\n  makeDeduplicationKey\n}\n", "'use strict'\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc9110.html#name-date-time-formats\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseHttpDate (date) {\n  // Sun, 06 Nov 1994 08:49:37 GMT    ; IMF-fixdate\n  // Sun Nov  6 08:49:37 1994         ; ANSI C's asctime() format\n  // Sunday, 06-Nov-94 08:49:37 GMT   ; obsolete RFC 850 format\n\n  switch (date[3]) {\n    case ',': return parseImfDate(date)\n    case ' ': return parseAscTimeDate(date)\n    default: return parseRfc850Date(date)\n  }\n}\n\n/**\n * @see https://httpwg.org/specs/rfc9110.html#preferred.date.format\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseImfDate (date) {\n  if (\n    date.length !== 29 ||\n    date[4] !== ' ' ||\n    date[7] !== ' ' ||\n    date[11] !== ' ' ||\n    date[16] !== ' ' ||\n    date[19] !== ':' ||\n    date[22] !== ':' ||\n    date[25] !== ' ' ||\n    date[26] !== 'G' ||\n    date[27] !== 'M' ||\n    date[28] !== 'T'\n  ) {\n    return undefined\n  }\n\n  let weekday = -1\n  if (date[0] === 'S' && date[1] === 'u' && date[2] === 'n') { // Sunday\n    weekday = 0\n  } else if (date[0] === 'M' && date[1] === 'o' && date[2] === 'n') { // Monday\n    weekday = 1\n  } else if (date[0] === 'T' && date[1] === 'u' && date[2] === 'e') { // Tuesday\n    weekday = 2\n  } else if (date[0] === 'W' && date[1] === 'e' && date[2] === 'd') { // Wednesday\n    weekday = 3\n  } else if (date[0] === 'T' && date[1] === 'h' && date[2] === 'u') { // Thursday\n    weekday = 4\n  } else if (date[0] === 'F' && date[1] === 'r' && date[2] === 'i') { // Friday\n    weekday = 5\n  } else if (date[0] === 'S' && date[1] === 'a' && date[2] === 't') { // Saturday\n    weekday = 6\n  } else {\n    return undefined // Not a valid day of the week\n  }\n\n  let day = 0\n  if (date[5] === '0') {\n    // Single digit day, e.g. \"Sun Nov 6 08:49:37 1994\"\n    const code = date.charCodeAt(6)\n    if (code < 49 || code > 57) {\n      return undefined // Not a digit\n    }\n    day = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(5)\n    if (code1 < 49 || code1 > 51) {\n      return undefined // Not a digit between 1 and 3\n    }\n    const code2 = date.charCodeAt(6)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    day = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let monthIdx = -1\n  if (\n    (date[8] === 'J' && date[9] === 'a' && date[10] === 'n')\n  ) {\n    monthIdx = 0 // Jan\n  } else if (\n    (date[8] === 'F' && date[9] === 'e' && date[10] === 'b')\n  ) {\n    monthIdx = 1 // Feb\n  } else if (\n    (date[8] === 'M' && date[9] === 'a')\n  ) {\n    if (date[10] === 'r') {\n      monthIdx = 2 // Mar\n    } else if (date[10] === 'y') {\n      monthIdx = 4 // May\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[8] === 'J')\n  ) {\n    if (date[9] === 'a' && date[10] === 'n') {\n      monthIdx = 0 // Jan\n    } else if (date[9] === 'u') {\n      if (date[10] === 'n') {\n        monthIdx = 5 // Jun\n      } else if (date[10] === 'l') {\n        monthIdx = 6 // Jul\n      } else {\n        return undefined // Invalid month\n      }\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[8] === 'A')\n  ) {\n    if (date[9] === 'p' && date[10] === 'r') {\n      monthIdx = 3 // Apr\n    } else if (date[9] === 'u' && date[10] === 'g') {\n      monthIdx = 7 // Aug\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[8] === 'S' && date[9] === 'e' && date[10] === 'p')\n  ) {\n    monthIdx = 8 // Sep\n  } else if (\n    (date[8] === 'O' && date[9] === 'c' && date[10] === 't')\n  ) {\n    monthIdx = 9 // Oct\n  } else if (\n    (date[8] === 'N' && date[9] === 'o' && date[10] === 'v')\n  ) {\n    monthIdx = 10 // Nov\n  } else if (\n    (date[8] === 'D' && date[9] === 'e' && date[10] === 'c')\n  ) {\n    monthIdx = 11 // Dec\n  } else {\n    // Not a valid month\n    return undefined\n  }\n\n  const yearDigit1 = date.charCodeAt(12)\n  if (yearDigit1 < 48 || yearDigit1 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit2 = date.charCodeAt(13)\n  if (yearDigit2 < 48 || yearDigit2 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit3 = date.charCodeAt(14)\n  if (yearDigit3 < 48 || yearDigit3 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit4 = date.charCodeAt(15)\n  if (yearDigit4 < 48 || yearDigit4 > 57) {\n    return undefined // Not a digit\n  }\n  const year = (yearDigit1 - 48) * 1000 + (yearDigit2 - 48) * 100 + (yearDigit3 - 48) * 10 + (yearDigit4 - 48)\n\n  let hour = 0\n  if (date[17] === '0') {\n    const code = date.charCodeAt(18)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    hour = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(17)\n    if (code1 < 48 || code1 > 50) {\n      return undefined // Not a digit between 0 and 2\n    }\n    const code2 = date.charCodeAt(18)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    if (code1 === 50 && code2 > 51) {\n      return undefined // Hour cannot be greater than 23\n    }\n    hour = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let minute = 0\n  if (date[20] === '0') {\n    const code = date.charCodeAt(21)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    minute = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(20)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(21)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    minute = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let second = 0\n  if (date[23] === '0') {\n    const code = date.charCodeAt(24)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    second = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(23)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(24)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    second = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n  return result.getUTCDay() === weekday ? result : undefined\n}\n\n/**\n * @see https://httpwg.org/specs/rfc9110.html#obsolete.date.formats\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseAscTimeDate (date) {\n  // This is assumed to be in UTC\n\n  if (\n    date.length !== 24 ||\n    date[7] !== ' ' ||\n    date[10] !== ' ' ||\n    date[19] !== ' '\n  ) {\n    return undefined\n  }\n\n  let weekday = -1\n  if (date[0] === 'S' && date[1] === 'u' && date[2] === 'n') { // Sunday\n    weekday = 0\n  } else if (date[0] === 'M' && date[1] === 'o' && date[2] === 'n') { // Monday\n    weekday = 1\n  } else if (date[0] === 'T' && date[1] === 'u' && date[2] === 'e') { // Tuesday\n    weekday = 2\n  } else if (date[0] === 'W' && date[1] === 'e' && date[2] === 'd') { // Wednesday\n    weekday = 3\n  } else if (date[0] === 'T' && date[1] === 'h' && date[2] === 'u') { // Thursday\n    weekday = 4\n  } else if (date[0] === 'F' && date[1] === 'r' && date[2] === 'i') { // Friday\n    weekday = 5\n  } else if (date[0] === 'S' && date[1] === 'a' && date[2] === 't') { // Saturday\n    weekday = 6\n  } else {\n    return undefined // Not a valid day of the week\n  }\n\n  let monthIdx = -1\n  if (\n    (date[4] === 'J' && date[5] === 'a' && date[6] === 'n')\n  ) {\n    monthIdx = 0 // Jan\n  } else if (\n    (date[4] === 'F' && date[5] === 'e' && date[6] === 'b')\n  ) {\n    monthIdx = 1 // Feb\n  } else if (\n    (date[4] === 'M' && date[5] === 'a')\n  ) {\n    if (date[6] === 'r') {\n      monthIdx = 2 // Mar\n    } else if (date[6] === 'y') {\n      monthIdx = 4 // May\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[4] === 'J')\n  ) {\n    if (date[5] === 'a' && date[6] === 'n') {\n      monthIdx = 0 // Jan\n    } else if (date[5] === 'u') {\n      if (date[6] === 'n') {\n        monthIdx = 5 // Jun\n      } else if (date[6] === 'l') {\n        monthIdx = 6 // Jul\n      } else {\n        return undefined // Invalid month\n      }\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[4] === 'A')\n  ) {\n    if (date[5] === 'p' && date[6] === 'r') {\n      monthIdx = 3 // Apr\n    } else if (date[5] === 'u' && date[6] === 'g') {\n      monthIdx = 7 // Aug\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[4] === 'S' && date[5] === 'e' && date[6] === 'p')\n  ) {\n    monthIdx = 8 // Sep\n  } else if (\n    (date[4] === 'O' && date[5] === 'c' && date[6] === 't')\n  ) {\n    monthIdx = 9 // Oct\n  } else if (\n    (date[4] === 'N' && date[5] === 'o' && date[6] === 'v')\n  ) {\n    monthIdx = 10 // Nov\n  } else if (\n    (date[4] === 'D' && date[5] === 'e' && date[6] === 'c')\n  ) {\n    monthIdx = 11 // Dec\n  } else {\n    // Not a valid month\n    return undefined\n  }\n\n  let day = 0\n  if (date[8] === ' ') {\n    // Single digit day, e.g. \"Sun Nov 6 08:49:37 1994\"\n    const code = date.charCodeAt(9)\n    if (code < 49 || code > 57) {\n      return undefined // Not a digit\n    }\n    day = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(8)\n    if (code1 < 49 || code1 > 51) {\n      return undefined // Not a digit between 1 and 3\n    }\n    const code2 = date.charCodeAt(9)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    day = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let hour = 0\n  if (date[11] === '0') {\n    const code = date.charCodeAt(12)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    hour = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(11)\n    if (code1 < 48 || code1 > 50) {\n      return undefined // Not a digit between 0 and 2\n    }\n    const code2 = date.charCodeAt(12)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    if (code1 === 50 && code2 > 51) {\n      return undefined // Hour cannot be greater than 23\n    }\n    hour = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let minute = 0\n  if (date[14] === '0') {\n    const code = date.charCodeAt(15)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    minute = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(14)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(15)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    minute = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let second = 0\n  if (date[17] === '0') {\n    const code = date.charCodeAt(18)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    second = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(17)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(18)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    second = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  const yearDigit1 = date.charCodeAt(20)\n  if (yearDigit1 < 48 || yearDigit1 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit2 = date.charCodeAt(21)\n  if (yearDigit2 < 48 || yearDigit2 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit3 = date.charCodeAt(22)\n  if (yearDigit3 < 48 || yearDigit3 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit4 = date.charCodeAt(23)\n  if (yearDigit4 < 48 || yearDigit4 > 57) {\n    return undefined // Not a digit\n  }\n  const year = (yearDigit1 - 48) * 1000 + (yearDigit2 - 48) * 100 + (yearDigit3 - 48) * 10 + (yearDigit4 - 48)\n\n  const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n  return result.getUTCDay() === weekday ? result : undefined\n}\n\n/**\n * @see https://httpwg.org/specs/rfc9110.html#obsolete.date.formats\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseRfc850Date (date) {\n  let commaIndex = -1\n\n  let weekday = -1\n  if (date[0] === 'S') {\n    if (date[1] === 'u' && date[2] === 'n' && date[3] === 'd' && date[4] === 'a' && date[5] === 'y') {\n      weekday = 0 // Sunday\n      commaIndex = 6\n    } else if (date[1] === 'a' && date[2] === 't' && date[3] === 'u' && date[4] === 'r' && date[5] === 'd' && date[6] === 'a' && date[7] === 'y') {\n      weekday = 6 // Saturday\n      commaIndex = 8\n    }\n  } else if (date[0] === 'M' && date[1] === 'o' && date[2] === 'n' && date[3] === 'd' && date[4] === 'a' && date[5] === 'y') {\n    weekday = 1 // Monday\n    commaIndex = 6\n  } else if (date[0] === 'T') {\n    if (date[1] === 'u' && date[2] === 'e' && date[3] === 's' && date[4] === 'd' && date[5] === 'a' && date[6] === 'y') {\n      weekday = 2 // Tuesday\n      commaIndex = 7\n    } else if (date[1] === 'h' && date[2] === 'u' && date[3] === 'r' && date[4] === 's' && date[5] === 'd' && date[6] === 'a' && date[7] === 'y') {\n      weekday = 4 // Thursday\n      commaIndex = 8\n    }\n  } else if (date[0] === 'W' && date[1] === 'e' && date[2] === 'd' && date[3] === 'n' && date[4] === 'e' && date[5] === 's' && date[6] === 'd' && date[7] === 'a' && date[8] === 'y') {\n    weekday = 3 // Wednesday\n    commaIndex = 9\n  } else if (date[0] === 'F' && date[1] === 'r' && date[2] === 'i' && date[3] === 'd' && date[4] === 'a' && date[5] === 'y') {\n    weekday = 5 // Friday\n    commaIndex = 6\n  } else {\n    // Not a valid day name\n    return undefined\n  }\n\n  if (\n    date[commaIndex] !== ',' ||\n    (date.length - commaIndex - 1) !== 23 ||\n    date[commaIndex + 1] !== ' ' ||\n    date[commaIndex + 4] !== '-' ||\n    date[commaIndex + 8] !== '-' ||\n    date[commaIndex + 11] !== ' ' ||\n    date[commaIndex + 14] !== ':' ||\n    date[commaIndex + 17] !== ':' ||\n    date[commaIndex + 20] !== ' ' ||\n    date[commaIndex + 21] !== 'G' ||\n    date[commaIndex + 22] !== 'M' ||\n    date[commaIndex + 23] !== 'T'\n  ) {\n    return undefined\n  }\n\n  let day = 0\n  if (date[commaIndex + 2] === '0') {\n    // Single digit day, e.g. \"Sun Nov 6 08:49:37 1994\"\n    const code = date.charCodeAt(commaIndex + 3)\n    if (code < 49 || code > 57) {\n      return undefined // Not a digit\n    }\n    day = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 2)\n    if (code1 < 49 || code1 > 51) {\n      return undefined // Not a digit between 1 and 3\n    }\n    const code2 = date.charCodeAt(commaIndex + 3)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    day = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let monthIdx = -1\n  if (\n    (date[commaIndex + 5] === 'J' && date[commaIndex + 6] === 'a' && date[commaIndex + 7] === 'n')\n  ) {\n    monthIdx = 0 // Jan\n  } else if (\n    (date[commaIndex + 5] === 'F' && date[commaIndex + 6] === 'e' && date[commaIndex + 7] === 'b')\n  ) {\n    monthIdx = 1 // Feb\n  } else if (\n    (date[commaIndex + 5] === 'M' && date[commaIndex + 6] === 'a' && date[commaIndex + 7] === 'r')\n  ) {\n    monthIdx = 2 // Mar\n  } else if (\n    (date[commaIndex + 5] === 'A' && date[commaIndex + 6] === 'p' && date[commaIndex + 7] === 'r')\n  ) {\n    monthIdx = 3 // Apr\n  } else if (\n    (date[commaIndex + 5] === 'M' && date[commaIndex + 6] === 'a' && date[commaIndex + 7] === 'y')\n  ) {\n    monthIdx = 4 // May\n  } else if (\n    (date[commaIndex + 5] === 'J' && date[commaIndex + 6] === 'u' && date[commaIndex + 7] === 'n')\n  ) {\n    monthIdx = 5 // Jun\n  } else if (\n    (date[commaIndex + 5] === 'J' && date[commaIndex + 6] === 'u' && date[commaIndex + 7] === 'l')\n  ) {\n    monthIdx = 6 // Jul\n  } else if (\n    (date[commaIndex + 5] === 'A' && date[commaIndex + 6] === 'u' && date[commaIndex + 7] === 'g')\n  ) {\n    monthIdx = 7 // Aug\n  } else if (\n    (date[commaIndex + 5] === 'S' && date[commaIndex + 6] === 'e' && date[commaIndex + 7] === 'p')\n  ) {\n    monthIdx = 8 // Sep\n  } else if (\n    (date[commaIndex + 5] === 'O' && date[commaIndex + 6] === 'c' && date[commaIndex + 7] === 't')\n  ) {\n    monthIdx = 9 // Oct\n  } else if (\n    (date[commaIndex + 5] === 'N' && date[commaIndex + 6] === 'o' && date[commaIndex + 7] === 'v')\n  ) {\n    monthIdx = 10 // Nov\n  } else if (\n    (date[commaIndex + 5] === 'D' && date[commaIndex + 6] === 'e' && date[commaIndex + 7] === 'c')\n  ) {\n    monthIdx = 11 // Dec\n  } else {\n    // Not a valid month\n    return undefined\n  }\n\n  const yearDigit1 = date.charCodeAt(commaIndex + 9)\n  if (yearDigit1 < 48 || yearDigit1 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit2 = date.charCodeAt(commaIndex + 10)\n  if (yearDigit2 < 48 || yearDigit2 > 57) {\n    return undefined // Not a digit\n  }\n\n  let year = (yearDigit1 - 48) * 10 + (yearDigit2 - 48) // Convert ASCII codes to number\n\n  // RFC 6265 states that the year is in the range 1970-2069.\n  // @see https://datatracker.ietf.org/doc/html/rfc6265#section-5.1.1\n  //\n  // 3. If the year-value is greater than or equal to 70 and less than or\n  //    equal to 99, increment the year-value by 1900.\n  // 4. If the year-value is greater than or equal to 0 and less than or\n  //    equal to 69, increment the year-value by 2000.\n  year += year < 70 ? 2000 : 1900\n\n  let hour = 0\n  if (date[commaIndex + 12] === '0') {\n    const code = date.charCodeAt(commaIndex + 13)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    hour = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 12)\n    if (code1 < 48 || code1 > 50) {\n      return undefined // Not a digit between 0 and 2\n    }\n    const code2 = date.charCodeAt(commaIndex + 13)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    if (code1 === 50 && code2 > 51) {\n      return undefined // Hour cannot be greater than 23\n    }\n    hour = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let minute = 0\n  if (date[commaIndex + 15] === '0') {\n    const code = date.charCodeAt(commaIndex + 16)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    minute = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 15)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(commaIndex + 16)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    minute = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let second = 0\n  if (date[commaIndex + 18] === '0') {\n    const code = date.charCodeAt(commaIndex + 19)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    second = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 18)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(commaIndex + 19)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    second = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n  return result.getUTCDay() === weekday ? result : undefined\n}\n\nmodule.exports = {\n  parseHttpDate\n}\n", "'use strict'\n\nconst util = require('../core/util')\nconst {\n  parseCacheControlHeader,\n  parseVaryHeader,\n  isEtagUsable\n} = require('../util/cache')\nconst { parseHttpDate } = require('../util/date.js')\n\nfunction noop () {}\n\n// Status codes that we can use some heuristics on to cache\nconst HEURISTICALLY_CACHEABLE_STATUS_CODES = [\n  200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414, 501\n]\n\n// Status codes which semantic is not handled by the cache\n// https://datatracker.ietf.org/doc/html/rfc9111#section-3\n// This list should not grow beyond 206 unless the RFC is updated\n// by a newer one including more. Please introduce another list if\n// implementing caching of responses with the 'must-understand' directive.\nconst NOT_UNDERSTOOD_STATUS_CODES = [\n  206\n]\n\nconst MAX_RESPONSE_AGE = 2147483647000\n\n/**\n * @typedef {import('../../types/dispatcher.d.ts').default.DispatchHandler} DispatchHandler\n *\n * @implements {DispatchHandler}\n */\nclass CacheHandler {\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheKey}\n   */\n  #cacheKey\n\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions['type']}\n   */\n  #cacheType\n\n  /**\n   * @type {number | undefined}\n   */\n  #cacheByDefault\n\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheStore}\n   */\n  #store\n\n  /**\n   * @type {import('../../types/dispatcher.d.ts').default.DispatchHandler}\n   */\n  #handler\n\n  /**\n   * @type {import('node:stream').Writable | undefined}\n   */\n  #writeStream\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} opts\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n   */\n  constructor ({ store, type, cacheByDefault }, cacheKey, handler) {\n    this.#store = store\n    this.#cacheType = type\n    this.#cacheByDefault = cacheByDefault\n    this.#cacheKey = cacheKey\n    this.#handler = handler\n  }\n\n  onRequestStart (controller, context) {\n    this.#writeStream?.destroy()\n    this.#writeStream = undefined\n    this.#handler.onRequestStart?.(controller, context)\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.#handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {number} statusCode\n   * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n   * @param {string} statusMessage\n   */\n  onResponseStart (\n    controller,\n    statusCode,\n    resHeaders,\n    statusMessage\n  ) {\n    const downstreamOnHeaders = () =>\n      this.#handler.onResponseStart?.(\n        controller,\n        statusCode,\n        resHeaders,\n        statusMessage\n      )\n    const handler = this\n\n    if (\n      !util.safeHTTPMethods.includes(this.#cacheKey.method) &&\n      statusCode >= 200 &&\n      statusCode <= 399\n    ) {\n      // Successful response to an unsafe method, delete it from cache\n      //  https://www.rfc-editor.org/rfc/rfc9111.html#name-invalidating-stored-response\n      try {\n        this.#store.delete(this.#cacheKey)?.catch?.(noop)\n      } catch {\n        // Fail silently\n      }\n      return downstreamOnHeaders()\n    }\n\n    const cacheControlHeader = resHeaders['cache-control']\n    const heuristicallyCacheable = resHeaders['last-modified'] && HEURISTICALLY_CACHEABLE_STATUS_CODES.includes(statusCode)\n    if (\n      !cacheControlHeader &&\n      !resHeaders['expires'] &&\n      !heuristicallyCacheable &&\n      !this.#cacheByDefault\n    ) {\n      // Don't have anything to tell us this response is cachable and we're not\n      //  caching by default\n      return downstreamOnHeaders()\n    }\n\n    const cacheControlDirectives = cacheControlHeader ? parseCacheControlHeader(cacheControlHeader) : {}\n    if (!canCacheResponse(this.#cacheType, statusCode, resHeaders, cacheControlDirectives, this.#cacheKey.headers)) {\n      return downstreamOnHeaders()\n    }\n\n    const now = Date.now()\n    const resAge = resHeaders.age ? getAge(resHeaders.age) : undefined\n    if (resAge && resAge >= MAX_RESPONSE_AGE) {\n      // Response considered stale\n      return downstreamOnHeaders()\n    }\n\n    const resDate = typeof resHeaders.date === 'string'\n      ? parseHttpDate(resHeaders.date)\n      : undefined\n\n    const staleAt =\n      determineStaleAt(this.#cacheType, now, resAge, resHeaders, resDate, cacheControlDirectives) ??\n      this.#cacheByDefault\n    if (staleAt === undefined || (resAge && resAge > staleAt)) {\n      return downstreamOnHeaders()\n    }\n\n    const baseTime = resDate ? resDate.getTime() : now\n    const absoluteStaleAt = staleAt + baseTime\n    if (now >= absoluteStaleAt) {\n      // Response is already stale\n      return downstreamOnHeaders()\n    }\n\n    let varyDirectives\n    if (this.#cacheKey.headers && resHeaders.vary) {\n      varyDirectives = parseVaryHeader(resHeaders.vary, this.#cacheKey.headers)\n      if (!varyDirectives) {\n        // Parse error\n        return downstreamOnHeaders()\n      }\n    }\n\n    const deleteAt = determineDeleteAt(baseTime, cacheControlDirectives, absoluteStaleAt)\n    const strippedHeaders = stripNecessaryHeaders(resHeaders, cacheControlDirectives)\n\n    /**\n     * @type {import('../../types/cache-interceptor.d.ts').default.CacheValue}\n     */\n    const value = {\n      statusCode,\n      statusMessage,\n      headers: strippedHeaders,\n      vary: varyDirectives,\n      cacheControlDirectives,\n      cachedAt: resAge ? now - resAge : now,\n      staleAt: absoluteStaleAt,\n      deleteAt\n    }\n\n    // Not modified, re-use the cached value\n    // https://www.rfc-editor.org/rfc/rfc9111.html#name-handling-304-not-modified\n    if (statusCode === 304) {\n      const handle304 = (cachedValue) => {\n        if (!cachedValue) {\n          // Do not create a new cache entry, as a 304 won't have a body - so cannot be cached.\n          return downstreamOnHeaders()\n        }\n\n        // Re-use the cached value: statuscode, statusmessage, headers and body\n        value.statusCode = cachedValue.statusCode\n        value.statusMessage = cachedValue.statusMessage\n        value.etag = cachedValue.etag\n        value.headers = { ...cachedValue.headers, ...strippedHeaders }\n\n        downstreamOnHeaders()\n\n        this.#writeStream = this.#store.createWriteStream(this.#cacheKey, value)\n\n        if (!this.#writeStream || !cachedValue?.body) {\n          return\n        }\n\n        if (typeof cachedValue.body.values === 'function') {\n          const bodyIterator = cachedValue.body.values()\n\n          const streamCachedBody = () => {\n            for (const chunk of bodyIterator) {\n              const full = this.#writeStream.write(chunk) === false\n              this.#handler.onResponseData?.(controller, chunk)\n              // when stream is full stop writing until we get a 'drain' event\n              if (full) {\n                break\n              }\n            }\n          }\n\n          this.#writeStream\n            .on('error', function () {\n              handler.#writeStream = undefined\n              handler.#store.delete(handler.#cacheKey)\n            })\n            .on('drain', () => {\n              streamCachedBody()\n            })\n            .on('close', function () {\n              if (handler.#writeStream === this) {\n                handler.#writeStream = undefined\n              }\n            })\n\n          streamCachedBody()\n        } else if (typeof cachedValue.body.on === 'function') {\n          // Readable stream body (e.g. from async/remote cache stores)\n          cachedValue.body\n            .on('data', (chunk) => {\n              this.#writeStream.write(chunk)\n              this.#handler.onResponseData?.(controller, chunk)\n            })\n            .on('end', () => {\n              this.#writeStream.end()\n            })\n            .on('error', () => {\n              this.#writeStream = undefined\n              this.#store.delete(this.#cacheKey)\n            })\n\n          this.#writeStream\n            .on('error', function () {\n              handler.#writeStream = undefined\n              handler.#store.delete(handler.#cacheKey)\n            })\n            .on('close', function () {\n              if (handler.#writeStream === this) {\n                handler.#writeStream = undefined\n              }\n            })\n        }\n      }\n\n      /**\n       * @type {import('../../types/cache-interceptor.d.ts').default.CacheValue}\n       */\n      const result = this.#store.get(this.#cacheKey)\n      if (result && typeof result.then === 'function') {\n        result.then(handle304)\n      } else {\n        handle304(result)\n      }\n    } else {\n      if (typeof resHeaders.etag === 'string' && isEtagUsable(resHeaders.etag)) {\n        value.etag = resHeaders.etag\n      }\n\n      this.#writeStream = this.#store.createWriteStream(this.#cacheKey, value)\n\n      if (!this.#writeStream) {\n        return downstreamOnHeaders()\n      }\n\n      this.#writeStream\n        .on('drain', () => controller.resume())\n        .on('error', function () {\n          // TODO (fix): Make error somehow observable?\n          handler.#writeStream = undefined\n\n          // Delete the value in case the cache store is holding onto state from\n          //  the call to createWriteStream\n          handler.#store.delete(handler.#cacheKey)\n        })\n        .on('close', function () {\n          if (handler.#writeStream === this) {\n            handler.#writeStream = undefined\n          }\n\n          // TODO (fix): Should we resume even if was paused downstream?\n          controller.resume()\n        })\n\n      downstreamOnHeaders()\n    }\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.#writeStream?.write(chunk) === false) {\n      controller.pause()\n    }\n\n    this.#handler.onResponseData?.(controller, chunk)\n  }\n\n  onResponseEnd (controller, trailers) {\n    this.#writeStream?.end()\n    this.#handler.onResponseEnd?.(controller, trailers)\n  }\n\n  onResponseError (controller, err) {\n    this.#writeStream?.destroy(err)\n    this.#writeStream = undefined\n    this.#handler.onResponseError?.(controller, err)\n  }\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-storing-responses-to-authen\n *\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType\n * @param {number} statusCode\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} [reqHeaders]\n */\nfunction canCacheResponse (cacheType, statusCode, resHeaders, cacheControlDirectives, reqHeaders) {\n  // Status code must be final and understood.\n  if (statusCode < 200 || NOT_UNDERSTOOD_STATUS_CODES.includes(statusCode)) {\n    return false\n  }\n  // Responses with neither status codes that are heuristically cacheable, nor \"explicit enough\" caching\n  // directives, are not cacheable. \"Explicit enough\": see https://www.rfc-editor.org/rfc/rfc9111.html#section-3\n  if (!HEURISTICALLY_CACHEABLE_STATUS_CODES.includes(statusCode) && !resHeaders['expires'] &&\n    !cacheControlDirectives.public &&\n    cacheControlDirectives['max-age'] === undefined &&\n    // RFC 9111: a private response directive, if the cache is not shared\n    !(cacheControlDirectives.private && cacheType === 'private') &&\n    !(cacheControlDirectives['s-maxage'] !== undefined && cacheType === 'shared')\n  ) {\n    return false\n  }\n\n  if (cacheControlDirectives['no-store']) {\n    return false\n  }\n\n  if (cacheType === 'shared' && cacheControlDirectives.private === true) {\n    return false\n  }\n\n  // https://www.rfc-editor.org/rfc/rfc9111.html#section-4.1-5\n  if (resHeaders.vary?.includes('*')) {\n    return false\n  }\n\n  // https://www.rfc-editor.org/rfc/rfc9111.html#name-storing-responses-to-authen\n  if (reqHeaders?.authorization) {\n    if (\n      !cacheControlDirectives.public &&\n      !cacheControlDirectives['s-maxage'] &&\n      !cacheControlDirectives['must-revalidate']\n    ) {\n      return false\n    }\n\n    if (typeof reqHeaders.authorization !== 'string') {\n      return false\n    }\n\n    if (\n      Array.isArray(cacheControlDirectives['no-cache']) &&\n      cacheControlDirectives['no-cache'].includes('authorization')\n    ) {\n      return false\n    }\n\n    if (\n      Array.isArray(cacheControlDirectives['private']) &&\n      cacheControlDirectives['private'].includes('authorization')\n    ) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @param {string | string[]} ageHeader\n * @returns {number | undefined}\n */\nfunction getAge (ageHeader) {\n  const age = parseInt(Array.isArray(ageHeader) ? ageHeader[0] : ageHeader)\n\n  return isNaN(age) ? undefined : age * 1000\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType\n * @param {number} now\n * @param {number | undefined} age\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {Date | undefined} responseDate\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n *\n * @returns {number | undefined} time that the value is stale at in seconds or undefined if it shouldn't be cached\n */\nfunction determineStaleAt (cacheType, now, age, resHeaders, responseDate, cacheControlDirectives) {\n  if (cacheType === 'shared') {\n    // Prioritize s-maxage since we're a shared cache\n    //  s-maxage > max-age > Expire\n    //  https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.2.10-3\n    const sMaxAge = cacheControlDirectives['s-maxage']\n    if (sMaxAge !== undefined) {\n      return sMaxAge > 0 ? sMaxAge * 1000 : undefined\n    }\n  }\n\n  const maxAge = cacheControlDirectives['max-age']\n  if (maxAge !== undefined) {\n    return maxAge > 0 ? maxAge * 1000 : undefined\n  }\n\n  if (typeof resHeaders.expires === 'string') {\n    // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.3\n    const expiresDate = parseHttpDate(resHeaders.expires)\n    if (expiresDate) {\n      if (now >= expiresDate.getTime()) {\n        return undefined\n      }\n\n      if (responseDate) {\n        if (responseDate >= expiresDate) {\n          return undefined\n        }\n\n        if (age !== undefined && age > (expiresDate - responseDate)) {\n          return undefined\n        }\n      }\n\n      return expiresDate.getTime() - now\n    }\n  }\n\n  if (typeof resHeaders['last-modified'] === 'string') {\n    // https://www.rfc-editor.org/rfc/rfc9111.html#name-calculating-heuristic-fresh\n    const lastModified = new Date(resHeaders['last-modified'])\n    if (isValidDate(lastModified)) {\n      if (lastModified.getTime() >= now) {\n        return undefined\n      }\n\n      const responseAge = now - lastModified.getTime()\n\n      return responseAge * 0.1\n    }\n  }\n\n  if (cacheControlDirectives.immutable) {\n    // https://www.rfc-editor.org/rfc/rfc8246.html#section-2.2\n    return 31536000\n  }\n\n  return undefined\n}\n\n/**\n * @param {number} now\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n * @param {number} staleAt\n */\nfunction determineDeleteAt (now, cacheControlDirectives, staleAt) {\n  let staleWhileRevalidate = -Infinity\n  let staleIfError = -Infinity\n  let immutable = -Infinity\n\n  if (cacheControlDirectives['stale-while-revalidate']) {\n    staleWhileRevalidate = staleAt + (cacheControlDirectives['stale-while-revalidate'] * 1000)\n  }\n\n  if (cacheControlDirectives['stale-if-error']) {\n    staleIfError = staleAt + (cacheControlDirectives['stale-if-error'] * 1000)\n  }\n\n  if (cacheControlDirectives.immutable && staleWhileRevalidate === -Infinity && staleIfError === -Infinity) {\n    immutable = now + 31536000000\n  }\n\n  // When no stale directives or immutable flag, add a revalidation buffer\n  // equal to the freshness lifetime so the entry survives past staleAt long\n  // enough to be revalidated instead of silently disappearing.\n  if (staleWhileRevalidate === -Infinity && staleIfError === -Infinity && immutable === -Infinity) {\n    const freshnessLifetime = staleAt - now\n    return staleAt + freshnessLifetime\n  }\n\n  return Math.max(staleAt, staleWhileRevalidate, staleIfError, immutable)\n}\n\n/**\n * Strips headers required to be removed in cached responses\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n * @returns {Record<string, string | string []>}\n */\nfunction stripNecessaryHeaders (resHeaders, cacheControlDirectives) {\n  const headersToRemove = [\n    'connection',\n    'proxy-authenticate',\n    'proxy-authentication-info',\n    'proxy-authorization',\n    'proxy-connection',\n    'te',\n    'transfer-encoding',\n    'upgrade',\n    // We'll add age back when serving it\n    'age'\n  ]\n\n  if (resHeaders['connection']) {\n    if (Array.isArray(resHeaders['connection'])) {\n      // connection: a\n      // connection: b\n      headersToRemove.push(...resHeaders['connection'].map(header => header.trim()))\n    } else {\n      // connection: a, b\n      headersToRemove.push(...resHeaders['connection'].split(',').map(header => header.trim()))\n    }\n  }\n\n  if (Array.isArray(cacheControlDirectives['no-cache'])) {\n    headersToRemove.push(...cacheControlDirectives['no-cache'])\n  }\n\n  if (Array.isArray(cacheControlDirectives['private'])) {\n    headersToRemove.push(...cacheControlDirectives['private'])\n  }\n\n  let strippedHeaders\n  for (const headerName of headersToRemove) {\n    if (resHeaders[headerName]) {\n      strippedHeaders ??= { ...resHeaders }\n      delete strippedHeaders[headerName]\n    }\n  }\n\n  return strippedHeaders ?? resHeaders\n}\n\n/**\n * @param {Date} date\n * @returns {boolean}\n */\nfunction isValidDate (date) {\n  return date instanceof Date && Number.isFinite(date.valueOf())\n}\n\nmodule.exports = CacheHandler\n", "'use strict'\n\nconst { Writable } = require('node:stream')\nconst { EventEmitter } = require('node:events')\nconst { assertCacheKey, assertCacheValue } = require('../util/cache.js')\n\n/**\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheKey} CacheKey\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheValue} CacheValue\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheStore} CacheStore\n * @typedef {import('../../types/cache-interceptor.d.ts').default.GetResult} GetResult\n */\n\n/**\n * @implements {CacheStore}\n * @extends {EventEmitter}\n */\nclass MemoryCacheStore extends EventEmitter {\n  #maxCount = 1024\n  #maxSize = 104857600 // 100MB\n  #maxEntrySize = 5242880 // 5MB\n\n  #size = 0\n  #count = 0\n  #entries = new Map()\n  #hasEmittedMaxSizeEvent = false\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.MemoryCacheStoreOpts | undefined} [opts]\n   */\n  constructor (opts) {\n    super()\n    if (opts) {\n      if (typeof opts !== 'object') {\n        throw new TypeError('MemoryCacheStore options must be an object')\n      }\n\n      if (opts.maxCount !== undefined) {\n        if (\n          typeof opts.maxCount !== 'number' ||\n          !Number.isInteger(opts.maxCount) ||\n          opts.maxCount < 0\n        ) {\n          throw new TypeError('MemoryCacheStore options.maxCount must be a non-negative integer')\n        }\n        this.#maxCount = opts.maxCount\n      }\n\n      if (opts.maxSize !== undefined) {\n        if (\n          typeof opts.maxSize !== 'number' ||\n          !Number.isInteger(opts.maxSize) ||\n          opts.maxSize < 0\n        ) {\n          throw new TypeError('MemoryCacheStore options.maxSize must be a non-negative integer')\n        }\n        this.#maxSize = opts.maxSize\n      }\n\n      if (opts.maxEntrySize !== undefined) {\n        if (\n          typeof opts.maxEntrySize !== 'number' ||\n          !Number.isInteger(opts.maxEntrySize) ||\n          opts.maxEntrySize < 0\n        ) {\n          throw new TypeError('MemoryCacheStore options.maxEntrySize must be a non-negative integer')\n        }\n        this.#maxEntrySize = opts.maxEntrySize\n      }\n    }\n  }\n\n  /**\n   * Get the current size of the cache in bytes\n   * @returns {number} The current size of the cache in bytes\n   */\n  get size () {\n    return this.#size\n  }\n\n  /**\n   * Check if the cache is full (either max size or max count reached)\n   * @returns {boolean} True if the cache is full, false otherwise\n   */\n  isFull () {\n    return this.#size >= this.#maxSize || this.#count >= this.#maxCount\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} req\n   * @returns {import('../../types/cache-interceptor.d.ts').default.GetResult | undefined}\n   */\n  get (key) {\n    assertCacheKey(key)\n\n    const topLevelKey = `${key.origin}:${key.path}`\n\n    const now = Date.now()\n    const entries = this.#entries.get(topLevelKey)\n\n    const entry = entries ? findEntry(key, entries, now) : null\n\n    return entry == null\n      ? undefined\n      : {\n          statusMessage: entry.statusMessage,\n          statusCode: entry.statusCode,\n          headers: entry.headers,\n          body: entry.body,\n          vary: entry.vary ? entry.vary : undefined,\n          etag: entry.etag,\n          cacheControlDirectives: entry.cacheControlDirectives,\n          cachedAt: entry.cachedAt,\n          staleAt: entry.staleAt,\n          deleteAt: entry.deleteAt\n        }\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue} val\n   * @returns {Writable | undefined}\n   */\n  createWriteStream (key, val) {\n    assertCacheKey(key)\n    assertCacheValue(val)\n\n    const topLevelKey = `${key.origin}:${key.path}`\n\n    const store = this\n    const entry = { ...key, ...val, body: [], size: 0 }\n\n    return new Writable({\n      write (chunk, encoding, callback) {\n        if (typeof chunk === 'string') {\n          chunk = Buffer.from(chunk, encoding)\n        }\n\n        entry.size += chunk.byteLength\n\n        if (entry.size >= store.#maxEntrySize) {\n          this.destroy()\n        } else {\n          entry.body.push(chunk)\n        }\n\n        callback(null)\n      },\n      final (callback) {\n        let entries = store.#entries.get(topLevelKey)\n        if (!entries) {\n          entries = []\n          store.#entries.set(topLevelKey, entries)\n        }\n        const previousEntry = findEntry(key, entries, Date.now())\n        if (previousEntry) {\n          const index = entries.indexOf(previousEntry)\n          entries.splice(index, 1, entry)\n          store.#size -= previousEntry.size\n        } else {\n          entries.push(entry)\n          store.#count += 1\n        }\n\n        store.#size += entry.size\n\n        // Check if cache is full and emit event if needed\n        if (store.#size > store.#maxSize || store.#count > store.#maxCount) {\n          // Emit maxSizeExceeded event if we haven't already\n          if (!store.#hasEmittedMaxSizeEvent) {\n            store.emit('maxSizeExceeded', {\n              size: store.#size,\n              maxSize: store.#maxSize,\n              count: store.#count,\n              maxCount: store.#maxCount\n            })\n            store.#hasEmittedMaxSizeEvent = true\n          }\n\n          // Perform eviction\n          for (const [key, entries] of store.#entries) {\n            for (const entry of entries.splice(0, entries.length / 2)) {\n              store.#size -= entry.size\n              store.#count -= 1\n            }\n            if (entries.length === 0) {\n              store.#entries.delete(key)\n            }\n          }\n\n          // Reset the event flag after eviction\n          if (store.#size < store.#maxSize && store.#count < store.#maxCount) {\n            store.#hasEmittedMaxSizeEvent = false\n          }\n        }\n\n        callback(null)\n      }\n    })\n  }\n\n  /**\n   * @param {CacheKey} key\n   */\n  delete (key) {\n    if (typeof key !== 'object') {\n      throw new TypeError(`expected key to be object, got ${typeof key}`)\n    }\n\n    const topLevelKey = `${key.origin}:${key.path}`\n\n    for (const entry of this.#entries.get(topLevelKey) ?? []) {\n      this.#size -= entry.size\n      this.#count -= 1\n    }\n    this.#entries.delete(topLevelKey)\n  }\n}\n\nfunction findEntry (key, entries, now) {\n  return entries.find((entry) => (\n    entry.deleteAt > now &&\n    entry.method === key.method &&\n    (entry.vary == null || Object.keys(entry.vary).every(headerName => {\n      if (entry.vary[headerName] === null) {\n        return key.headers[headerName] === undefined\n      }\n\n      return entry.vary[headerName] === key.headers[headerName]\n    }))\n  ))\n}\n\nmodule.exports = MemoryCacheStore\n", "'use strict'\n\nconst assert = require('node:assert')\n\n/**\n * This takes care of revalidation requests we send to the origin. If we get\n *  a response indicating that what we have is cached (via a HTTP 304), we can\n *  continue using the cached value. Otherwise, we'll receive the new response\n *  here, which we then just pass on to the next handler (most likely a\n *  CacheHandler). Note that this assumes the proper headers were already\n *  included in the request to tell the origin that we want to revalidate the\n *  response (i.e. if-modified-since or if-none-match).\n *\n * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-validation\n *\n * @implements {import('../../types/dispatcher.d.ts').default.DispatchHandler}\n */\nclass CacheRevalidationHandler {\n  #successful = false\n\n  /**\n   * @type {((boolean, any) => void) | null}\n   */\n  #callback\n\n  /**\n   * @type {(import('../../types/dispatcher.d.ts').default.DispatchHandler)}\n   */\n  #handler\n\n  #context\n\n  /**\n   * @type {boolean}\n   */\n  #allowErrorStatusCodes\n\n  /**\n   * @param {(boolean) => void} callback Function to call if the cached value is valid\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchHandlers} handler\n   * @param {boolean} allowErrorStatusCodes\n   */\n  constructor (callback, handler, allowErrorStatusCodes) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function')\n    }\n\n    this.#callback = callback\n    this.#handler = handler\n    this.#allowErrorStatusCodes = allowErrorStatusCodes\n  }\n\n  onRequestStart (_, context) {\n    this.#successful = false\n    this.#context = context\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.#handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  onResponseStart (\n    controller,\n    statusCode,\n    headers,\n    statusMessage\n  ) {\n    assert(this.#callback != null)\n\n    // https://www.rfc-editor.org/rfc/rfc9111.html#name-handling-a-validation-respo\n    // https://datatracker.ietf.org/doc/html/rfc5861#section-4\n    this.#successful = statusCode === 304 ||\n      (this.#allowErrorStatusCodes && statusCode >= 500 && statusCode <= 504)\n    this.#callback(this.#successful, this.#context)\n    this.#callback = null\n\n    if (this.#successful) {\n      return true\n    }\n\n    this.#handler.onRequestStart?.(controller, this.#context)\n    this.#handler.onResponseStart?.(\n      controller,\n      statusCode,\n      headers,\n      statusMessage\n    )\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.#successful) {\n      return\n    }\n\n    return this.#handler.onResponseData?.(controller, chunk)\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.#successful) {\n      return\n    }\n\n    this.#handler.onResponseEnd?.(controller, trailers)\n  }\n\n  onResponseError (controller, err) {\n    if (this.#successful) {\n      return\n    }\n\n    if (this.#callback) {\n      this.#callback(false)\n      this.#callback = null\n    }\n\n    if (typeof this.#handler.onResponseError === 'function') {\n      this.#handler.onResponseError(controller, err)\n    } else {\n      throw err\n    }\n  }\n}\n\nmodule.exports = CacheRevalidationHandler\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { Readable } = require('node:stream')\nconst util = require('../core/util')\nconst CacheHandler = require('../handler/cache-handler')\nconst MemoryCacheStore = require('../cache/memory-cache-store')\nconst CacheRevalidationHandler = require('../handler/cache-revalidation-handler')\nconst { assertCacheStore, assertCacheMethods, makeCacheKey, normalizeHeaders, parseCacheControlHeader } = require('../util/cache.js')\nconst { AbortError } = require('../core/errors.js')\n\n/**\n * @param {(string | RegExp)[] | undefined} origins\n * @param {string} name\n */\nfunction assertCacheOrigins (origins, name) {\n  if (origins === undefined) return\n  if (!Array.isArray(origins)) {\n    throw new TypeError(`expected ${name} to be an array or undefined, got ${typeof origins}`)\n  }\n  for (let i = 0; i < origins.length; i++) {\n    const origin = origins[i]\n    if (typeof origin !== 'string' && !(origin instanceof RegExp)) {\n      throw new TypeError(`expected ${name}[${i}] to be a string or RegExp, got ${typeof origin}`)\n    }\n  }\n}\n\nconst nop = () => {}\n\n/**\n * @typedef {(options: import('../../types/dispatcher.d.ts').default.DispatchOptions, handler: import('../../types/dispatcher.d.ts').default.DispatchHandler) => void} DispatchFn\n */\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} cacheControlDirectives\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @returns {boolean}\n */\nfunction needsRevalidation (result, cacheControlDirectives, { headers = {} }) {\n  // Always revalidate requests with the no-cache request directive.\n  if (cacheControlDirectives?.['no-cache']) {\n    return true\n  }\n\n  // Always revalidate requests with unqualified no-cache response directive.\n  if (result.cacheControlDirectives?.['no-cache'] && !Array.isArray(result.cacheControlDirectives['no-cache'])) {\n    return true\n  }\n\n  // Always revalidate requests with conditional headers.\n  if (headers['if-modified-since'] || headers['if-none-match']) {\n    return true\n  }\n\n  return false\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} cacheControlDirectives\n * @returns {boolean}\n */\nfunction isStale (result, cacheControlDirectives) {\n  const now = Date.now()\n  if (now > result.staleAt) {\n    // Response is stale\n    if (cacheControlDirectives?.['max-stale']) {\n      // There's a threshold where we can serve stale responses, let's see if\n      //  we're in it\n      // https://www.rfc-editor.org/rfc/rfc9111.html#name-max-stale\n      const gracePeriod = result.staleAt + (cacheControlDirectives['max-stale'] * 1000)\n      return now > gracePeriod\n    }\n\n    return true\n  }\n\n  if (cacheControlDirectives?.['min-fresh']) {\n    // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.1.3\n\n    // At this point, staleAt is always > now\n    const timeLeftTillStale = result.staleAt - now\n    const threshold = cacheControlDirectives['min-fresh'] * 1000\n\n    return timeLeftTillStale <= threshold\n  }\n\n  return false\n}\n\n/**\n * Check if we're within the stale-while-revalidate window for a stale response\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @returns {boolean}\n */\nfunction withinStaleWhileRevalidateWindow (result) {\n  const staleWhileRevalidate = result.cacheControlDirectives?.['stale-while-revalidate']\n  if (!staleWhileRevalidate) {\n    return false\n  }\n\n  const now = Date.now()\n  const staleWhileRevalidateExpiry = result.staleAt + (staleWhileRevalidate * 1000)\n  return now <= staleWhileRevalidateExpiry\n}\n\n/**\n * @param {DispatchFn} dispatch\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} globalOpts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} reqCacheControl\n */\nfunction handleUncachedResponse (\n  dispatch,\n  globalOpts,\n  cacheKey,\n  handler,\n  opts,\n  reqCacheControl\n) {\n  if (reqCacheControl?.['only-if-cached']) {\n    let aborted = false\n    try {\n      if (typeof handler.onConnect === 'function') {\n        handler.onConnect(() => {\n          aborted = true\n        })\n\n        if (aborted) {\n          return\n        }\n      }\n\n      if (typeof handler.onHeaders === 'function') {\n        handler.onHeaders(504, [], nop, 'Gateway Timeout')\n        if (aborted) {\n          return\n        }\n      }\n\n      if (typeof handler.onComplete === 'function') {\n        handler.onComplete([])\n      }\n    } catch (err) {\n      if (typeof handler.onError === 'function') {\n        handler.onError(err)\n      }\n    }\n\n    return true\n  }\n\n  return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n}\n\n/**\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {number} age\n * @param {any} context\n * @param {boolean} isStale\n */\nfunction sendCachedValue (handler, opts, result, age, context, isStale) {\n  // TODO (perf): Readable.from path can be optimized...\n  const stream = util.isStream(result.body)\n    ? result.body\n    : Readable.from(result.body ?? [])\n\n  assert(!stream.destroyed, 'stream should not be destroyed')\n  assert(!stream.readableDidRead, 'stream should not be readableDidRead')\n\n  const controller = {\n    resume () {\n      stream.resume()\n    },\n    pause () {\n      stream.pause()\n    },\n    get paused () {\n      return stream.isPaused()\n    },\n    get aborted () {\n      return stream.destroyed\n    },\n    get reason () {\n      return stream.errored\n    },\n    abort (reason) {\n      stream.destroy(reason ?? new AbortError())\n    }\n  }\n\n  stream\n    .on('error', function (err) {\n      if (!this.readableEnded) {\n        if (typeof handler.onResponseError === 'function') {\n          handler.onResponseError(controller, err)\n        } else {\n          throw err\n        }\n      }\n    })\n    .on('close', function () {\n      if (!this.errored) {\n        handler.onResponseEnd?.(controller, {})\n      }\n    })\n\n  handler.onRequestStart?.(controller, context)\n\n  if (stream.destroyed) {\n    return\n  }\n\n  // Add the age header\n  // https://www.rfc-editor.org/rfc/rfc9111.html#name-age\n  const headers = { ...result.headers, age: String(age) }\n\n  if (isStale) {\n    // Add warning header\n    //  https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Warning\n    headers.warning = '110 - \"response is stale\"'\n  }\n\n  handler.onResponseStart?.(controller, result.statusCode, headers, result.statusMessage)\n\n  if (opts.method === 'HEAD') {\n    stream.destroy()\n  } else {\n    stream.on('data', function (chunk) {\n      handler.onResponseData?.(controller, chunk)\n    })\n  }\n}\n\n/**\n * @param {DispatchFn} dispatch\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} globalOpts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} reqCacheControl\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult | undefined} result\n */\nfunction handleResult (\n  dispatch,\n  globalOpts,\n  cacheKey,\n  handler,\n  opts,\n  reqCacheControl,\n  result\n) {\n  if (!result) {\n    return handleUncachedResponse(dispatch, globalOpts, cacheKey, handler, opts, reqCacheControl)\n  }\n\n  const now = Date.now()\n  if (now > result.deleteAt) {\n    // Response is expired, cache store shouldn't have given this to us\n    return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n  }\n\n  const age = Math.round((now - result.cachedAt) / 1000)\n  if (reqCacheControl?.['max-age'] && age >= reqCacheControl['max-age']) {\n    // Response is considered expired for this specific request\n    //  https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.1.1\n    return dispatch(opts, handler)\n  }\n\n  const stale = isStale(result, reqCacheControl)\n  const revalidate = needsRevalidation(result, reqCacheControl, opts)\n\n  // Check if the response is stale\n  if (stale || revalidate) {\n    if (util.isStream(opts.body) && util.bodyLength(opts.body) !== 0) {\n      // If body is a stream we can't revalidate...\n      // TODO (fix): This could be less strict...\n      return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n    }\n\n    // RFC 5861: If we're within stale-while-revalidate window, serve stale immediately\n    // and revalidate in background, unless immediate revalidation is necessary\n    if (!revalidate && withinStaleWhileRevalidateWindow(result)) {\n      // Serve stale response immediately\n      sendCachedValue(handler, opts, result, age, null, true)\n\n      // Start background revalidation (fire-and-forget)\n      queueMicrotask(() => {\n        const headers = {\n          ...opts.headers,\n          'if-modified-since': new Date(result.cachedAt).toUTCString()\n        }\n\n        if (result.etag) {\n          headers['if-none-match'] = result.etag\n        }\n\n        if (result.vary) {\n          for (const key in result.vary) {\n            if (result.vary[key] != null) {\n              headers[key] = result.vary[key]\n            }\n          }\n        }\n\n        // Background revalidation - update cache if we get new data\n        dispatch(\n          {\n            ...opts,\n            headers\n          },\n          new CacheHandler(globalOpts, cacheKey, {\n            // Silent handler that just updates the cache\n            onRequestStart () {},\n            onRequestUpgrade () {},\n            onResponseStart () {},\n            onResponseData () {},\n            onResponseEnd () {},\n            onResponseError () {}\n          })\n        )\n      })\n\n      return true\n    }\n\n    let withinStaleIfErrorThreshold = false\n    const staleIfErrorExpiry = result.cacheControlDirectives['stale-if-error'] ?? reqCacheControl?.['stale-if-error']\n    if (staleIfErrorExpiry) {\n      withinStaleIfErrorThreshold = now < (result.staleAt + (staleIfErrorExpiry * 1000))\n    }\n\n    const headers = {\n      ...opts.headers,\n      'if-modified-since': new Date(result.cachedAt).toUTCString()\n    }\n\n    if (result.etag) {\n      headers['if-none-match'] = result.etag\n    }\n\n    if (result.vary) {\n      for (const key in result.vary) {\n        if (result.vary[key] != null) {\n          headers[key] = result.vary[key]\n        }\n      }\n    }\n\n    // We need to revalidate the response\n    return dispatch(\n      {\n        ...opts,\n        headers\n      },\n      new CacheRevalidationHandler(\n        (success, context) => {\n          if (success) {\n            // TODO: successful revalidation should be considered fresh (not give stale warning).\n            sendCachedValue(handler, opts, result, age, context, stale)\n          } else if (util.isStream(result.body)) {\n            result.body.on('error', nop).destroy()\n          }\n        },\n        new CacheHandler(globalOpts, cacheKey, handler),\n        withinStaleIfErrorThreshold\n      )\n    )\n  }\n\n  // Dump request body.\n  if (util.isStream(opts.body)) {\n    opts.body.on('error', nop).destroy()\n  }\n\n  sendCachedValue(handler, opts, result, age, null, false)\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions} [opts]\n * @returns {import('../../types/dispatcher.d.ts').default.DispatcherComposeInterceptor}\n */\nmodule.exports = (opts = {}) => {\n  const {\n    store = new MemoryCacheStore(),\n    methods = ['GET'],\n    cacheByDefault = undefined,\n    type = 'shared',\n    origins = undefined\n  } = opts\n\n  if (typeof opts !== 'object' || opts === null) {\n    throw new TypeError(`expected type of opts to be an Object, got ${opts === null ? 'null' : typeof opts}`)\n  }\n\n  assertCacheStore(store, 'opts.store')\n  assertCacheMethods(methods, 'opts.methods')\n  assertCacheOrigins(origins, 'opts.origins')\n\n  if (typeof cacheByDefault !== 'undefined' && typeof cacheByDefault !== 'number') {\n    throw new TypeError(`expected opts.cacheByDefault to be number or undefined, got ${typeof cacheByDefault}`)\n  }\n\n  if (typeof type !== 'undefined' && type !== 'shared' && type !== 'private') {\n    throw new TypeError(`expected opts.type to be shared, private, or undefined, got ${typeof type}`)\n  }\n\n  const globalOpts = {\n    store,\n    methods,\n    cacheByDefault,\n    type\n  }\n\n  const safeMethodsToNotCache = util.safeHTTPMethods.filter(method => methods.includes(method) === false)\n\n  return dispatch => {\n    return (opts, handler) => {\n      if (!opts.origin || safeMethodsToNotCache.includes(opts.method)) {\n        // Not a method we want to cache or we don't have the origin, skip\n        return dispatch(opts, handler)\n      }\n\n      // Check if origin is in whitelist\n      if (origins !== undefined) {\n        const requestOrigin = opts.origin.toString().toLowerCase()\n        let isAllowed = false\n\n        for (let i = 0; i < origins.length; i++) {\n          const allowed = origins[i]\n          if (typeof allowed === 'string') {\n            if (allowed.toLowerCase() === requestOrigin) {\n              isAllowed = true\n              break\n            }\n          } else if (allowed.test(requestOrigin)) {\n            isAllowed = true\n            break\n          }\n        }\n\n        if (!isAllowed) {\n          return dispatch(opts, handler)\n        }\n      }\n\n      opts = {\n        ...opts,\n        headers: normalizeHeaders(opts)\n      }\n\n      const reqCacheControl = opts.headers?.['cache-control']\n        ? parseCacheControlHeader(opts.headers['cache-control'])\n        : undefined\n\n      if (reqCacheControl?.['no-store']) {\n        return dispatch(opts, handler)\n      }\n\n      /**\n       * @type {import('../../types/cache-interceptor.d.ts').default.CacheKey}\n       */\n      const cacheKey = makeCacheKey(opts)\n      const result = store.get(cacheKey)\n\n      if (result && typeof result.then === 'function') {\n        return result\n          .then(result => handleResult(dispatch,\n            globalOpts,\n            cacheKey,\n            handler,\n            opts,\n            reqCacheControl,\n            result\n          ))\n      } else {\n        return handleResult(\n          dispatch,\n          globalOpts,\n          cacheKey,\n          handler,\n          opts,\n          reqCacheControl,\n          result\n        )\n      }\n    }\n  }\n}\n", "'use strict'\n\nconst { createInflate, createGunzip, createBrotliDecompress, createZstdDecompress } = require('node:zlib')\nconst { pipeline } = require('node:stream')\nconst DecoratorHandler = require('../handler/decorator-handler')\nconst { runtimeFeatures } = require('../util/runtime-features')\n\n/** @typedef {import('node:stream').Transform} Transform */\n/** @typedef {import('node:stream').Transform} Controller */\n/** @typedef {Transform&import('node:zlib').Zlib} DecompressorStream */\n\n/** @type {Record<string, () => DecompressorStream>} */\nconst supportedEncodings = {\n  gzip: createGunzip,\n  'x-gzip': createGunzip,\n  br: createBrotliDecompress,\n  deflate: createInflate,\n  compress: createInflate,\n  'x-compress': createInflate,\n  ...(runtimeFeatures.has('zstd') ? { zstd: createZstdDecompress } : {})\n}\n\nconst defaultSkipStatusCodes = /** @type {const} */ ([204, 304])\n\nlet warningEmitted = /** @type {boolean} */ (false)\n\n/**\n * @typedef {Object} DecompressHandlerOptions\n * @property {number[]|Readonly<number[]>} [skipStatusCodes=[204, 304]] - List of status codes to skip decompression for\n * @property {boolean} [skipErrorResponses] - Whether to skip decompression for error responses (status codes >= 400)\n */\n\nclass DecompressHandler extends DecoratorHandler {\n  /** @type {Transform[]} */\n  #decompressors = []\n  /** @type {Readonly<number[]>} */\n  #skipStatusCodes\n  /** @type {boolean} */\n  #skipErrorResponses\n\n  constructor (handler, { skipStatusCodes = defaultSkipStatusCodes, skipErrorResponses = true } = {}) {\n    super(handler)\n    this.#skipStatusCodes = skipStatusCodes\n    this.#skipErrorResponses = skipErrorResponses\n  }\n\n  /**\n   * Determines if decompression should be skipped based on encoding and status code\n   * @param {string} contentEncoding - Content-Encoding header value\n   * @param {number} statusCode - HTTP status code of the response\n   * @returns {boolean} - True if decompression should be skipped\n   */\n  #shouldSkipDecompression (contentEncoding, statusCode) {\n    if (!contentEncoding || statusCode < 200) return true\n    if (this.#skipStatusCodes.includes(statusCode)) return true\n    if (this.#skipErrorResponses && statusCode >= 400) return true\n    return false\n  }\n\n  /**\n   * Creates a chain of decompressors for multiple content encodings\n   *\n   * @param {string} encodings - Comma-separated list of content encodings\n   * @returns {Array<DecompressorStream>} - Array of decompressor streams\n   * @throws {Error} - If the number of content-encodings exceeds the maximum allowed\n   */\n  #createDecompressionChain (encodings) {\n    const parts = encodings.split(',')\n\n    // Limit the number of content-encodings to prevent resource exhaustion.\n    // CVE fix similar to urllib3 (GHSA-gm62-xv2j-4w53) and curl (CVE-2022-32206).\n    const maxContentEncodings = 5\n    if (parts.length > maxContentEncodings) {\n      throw new Error(`too many content-encodings in response: ${parts.length}, maximum allowed is ${maxContentEncodings}`)\n    }\n\n    /** @type {DecompressorStream[]} */\n    const decompressors = []\n\n    for (let i = parts.length - 1; i >= 0; i--) {\n      const encoding = parts[i].trim()\n      if (!encoding) continue\n\n      if (!supportedEncodings[encoding]) {\n        decompressors.length = 0 // Clear if unsupported encoding\n        return decompressors // Unsupported encoding\n      }\n\n      decompressors.push(supportedEncodings[encoding]())\n    }\n\n    return decompressors\n  }\n\n  /**\n   * Sets up event handlers for a decompressor stream using readable events\n   * @param {DecompressorStream} decompressor - The decompressor stream\n   * @param {Controller} controller - The controller to coordinate with\n   * @returns {void}\n   */\n  #setupDecompressorEvents (decompressor, controller) {\n    decompressor.on('readable', () => {\n      let chunk\n      while ((chunk = decompressor.read()) !== null) {\n        const result = super.onResponseData(controller, chunk)\n        if (result === false) {\n          break\n        }\n      }\n    })\n\n    decompressor.on('error', (error) => {\n      super.onResponseError(controller, error)\n    })\n  }\n\n  /**\n   * Sets up event handling for a single decompressor\n   * @param {Controller} controller - The controller to handle events\n   * @returns {void}\n   */\n  #setupSingleDecompressor (controller) {\n    const decompressor = this.#decompressors[0]\n    this.#setupDecompressorEvents(decompressor, controller)\n\n    decompressor.on('end', () => {\n      super.onResponseEnd(controller, {})\n    })\n  }\n\n  /**\n   * Sets up event handling for multiple chained decompressors using pipeline\n   * @param {Controller} controller - The controller to handle events\n   * @returns {void}\n   */\n  #setupMultipleDecompressors (controller) {\n    const lastDecompressor = this.#decompressors[this.#decompressors.length - 1]\n    this.#setupDecompressorEvents(lastDecompressor, controller)\n\n    pipeline(this.#decompressors, (err) => {\n      if (err) {\n        super.onResponseError(controller, err)\n        return\n      }\n      super.onResponseEnd(controller, {})\n    })\n  }\n\n  /**\n   * Cleans up decompressor references to prevent memory leaks\n   * @returns {void}\n   */\n  #cleanupDecompressors () {\n    this.#decompressors.length = 0\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {number} statusCode\n   * @param {Record<string, string | string[] | undefined>} headers\n   * @param {string} statusMessage\n   * @returns {void}\n   */\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    const contentEncoding = headers['content-encoding']\n\n    // If content encoding is not supported or status code is in skip list\n    if (this.#shouldSkipDecompression(contentEncoding, statusCode)) {\n      return super.onResponseStart(controller, statusCode, headers, statusMessage)\n    }\n\n    const decompressors = this.#createDecompressionChain(contentEncoding.toLowerCase())\n\n    if (decompressors.length === 0) {\n      this.#cleanupDecompressors()\n      return super.onResponseStart(controller, statusCode, headers, statusMessage)\n    }\n\n    this.#decompressors = decompressors\n\n    // Remove compression headers since we're decompressing\n    const { 'content-encoding': _, 'content-length': __, ...newHeaders } = headers\n\n    if (this.#decompressors.length === 1) {\n      this.#setupSingleDecompressor(controller)\n    } else {\n      this.#setupMultipleDecompressors(controller)\n    }\n\n    return super.onResponseStart(controller, statusCode, newHeaders, statusMessage)\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {Buffer} chunk\n   * @returns {void}\n   */\n  onResponseData (controller, chunk) {\n    if (this.#decompressors.length > 0) {\n      this.#decompressors[0].write(chunk)\n      return\n    }\n    super.onResponseData(controller, chunk)\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {Record<string, string | string[]> | undefined} trailers\n   * @returns {void}\n   */\n  onResponseEnd (controller, trailers) {\n    if (this.#decompressors.length > 0) {\n      this.#decompressors[0].end()\n      this.#cleanupDecompressors()\n      return\n    }\n    super.onResponseEnd(controller, trailers)\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {Error} err\n   * @returns {void}\n   */\n  onResponseError (controller, err) {\n    if (this.#decompressors.length > 0) {\n      for (const decompressor of this.#decompressors) {\n        decompressor.destroy(err)\n      }\n      this.#cleanupDecompressors()\n    }\n    super.onResponseError(controller, err)\n  }\n}\n\n/**\n * Creates a decompression interceptor for HTTP responses\n * @param {DecompressHandlerOptions} [options] - Options for the interceptor\n * @returns {Function} - Interceptor function\n */\nfunction createDecompressInterceptor (options = {}) {\n  // Emit experimental warning only once\n  if (!warningEmitted) {\n    process.emitWarning(\n      'DecompressInterceptor is experimental and subject to change',\n      'ExperimentalWarning'\n    )\n    warningEmitted = true\n  }\n\n  return (dispatch) => {\n    return (opts, handler) => {\n      const decompressHandler = new DecompressHandler(handler, options)\n      return dispatch(opts, decompressHandler)\n    }\n  }\n}\n\nmodule.exports = createDecompressInterceptor\n", "'use strict'\n\nconst { RequestAbortedError } = require('../core/errors')\n\n/**\n * @typedef {import('../../types/dispatcher.d.ts').default.DispatchHandler} DispatchHandler\n */\n\nconst DEFAULT_MAX_BUFFER_SIZE = 5 * 1024 * 1024\n\n/**\n * @typedef {Object} WaitingHandler\n * @property {DispatchHandler} handler\n * @property {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n * @property {Buffer[]} bufferedChunks\n * @property {number} bufferedBytes\n * @property {object | null} pendingTrailers\n * @property {boolean} done\n */\n\n/**\n * Handler that forwards response events to multiple waiting handlers.\n * Used for request deduplication.\n *\n * @implements {DispatchHandler}\n */\nclass DeduplicationHandler {\n  /**\n   * @type {DispatchHandler}\n   */\n  #primaryHandler\n\n  /**\n   * @type {WaitingHandler[]}\n   */\n  #waitingHandlers = []\n\n  /**\n   * @type {number}\n   */\n  #maxBufferSize = DEFAULT_MAX_BUFFER_SIZE\n\n  /**\n   * @type {number}\n   */\n  #statusCode = 0\n\n  /**\n   * @type {Record<string, string | string[]>}\n   */\n  #headers = {}\n\n  /**\n   * @type {string}\n   */\n  #statusMessage = ''\n\n  /**\n   * @type {boolean}\n   */\n  #aborted = false\n\n  /**\n   * @type {boolean}\n   */\n  #responseStarted = false\n\n  /**\n   * @type {boolean}\n   */\n  #responseDataStarted = false\n\n  /**\n   * @type {boolean}\n   */\n  #completed = false\n\n  /**\n   * @type {import('../../types/dispatcher.d.ts').default.DispatchController | null}\n   */\n  #controller = null\n\n  /**\n   * @type {(() => void) | null}\n   */\n  #onComplete = null\n\n  /**\n   * @param {DispatchHandler} primaryHandler The primary handler\n   * @param {() => void} onComplete Callback when request completes\n   * @param {number} [maxBufferSize] Maximum paused buffer size per waiting handler\n   */\n  constructor (primaryHandler, onComplete, maxBufferSize = DEFAULT_MAX_BUFFER_SIZE) {\n    this.#primaryHandler = primaryHandler\n    this.#onComplete = onComplete\n    this.#maxBufferSize = maxBufferSize\n  }\n\n  /**\n   * Add a waiting handler that will receive response events.\n   * Returns false if deduplication can no longer safely attach this handler.\n   *\n   * @param {DispatchHandler} handler\n   * @returns {boolean}\n   */\n  addWaitingHandler (handler) {\n    if (this.#completed || this.#responseDataStarted) {\n      return false\n    }\n\n    const waitingHandler = this.#createWaitingHandler(handler)\n    const waitingController = waitingHandler.controller\n\n    try {\n      handler.onRequestStart?.(waitingController, null)\n\n      if (waitingController.aborted) {\n        waitingHandler.done = true\n        return true\n      }\n\n      if (this.#responseStarted) {\n        handler.onResponseStart?.(\n          waitingController,\n          this.#statusCode,\n          this.#headers,\n          this.#statusMessage\n        )\n      }\n    } catch {\n      // Ignore errors from waiting handlers\n      waitingHandler.done = true\n      return true\n    }\n\n    if (!waitingController.aborted) {\n      this.#waitingHandlers.push(waitingHandler)\n    }\n\n    return true\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {any} context\n   */\n  onRequestStart (controller, context) {\n    this.#controller = controller\n    this.#primaryHandler.onRequestStart?.(controller, context)\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {number} statusCode\n   * @param {import('../../types/header.d.ts').IncomingHttpHeaders} headers\n   * @param {Socket} socket\n   */\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.#primaryHandler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {number} statusCode\n   * @param {Record<string, string | string[]>} headers\n   * @param {string} statusMessage\n   */\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    this.#responseStarted = true\n    this.#statusCode = statusCode\n    this.#headers = headers\n    this.#statusMessage = statusMessage\n\n    this.#primaryHandler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      const { handler, controller: waitingController } = waitingHandler\n\n      if (waitingHandler.done || waitingController.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      try {\n        handler.onResponseStart?.(\n          waitingController,\n          statusCode,\n          headers,\n          statusMessage\n        )\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      if (waitingController.aborted) {\n        waitingHandler.done = true\n      }\n    }\n\n    this.#pruneDoneWaitingHandlers()\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {Buffer} chunk\n   */\n  onResponseData (controller, chunk) {\n    if (this.#aborted || this.#completed) {\n      return\n    }\n\n    this.#responseDataStarted = true\n\n    this.#primaryHandler.onResponseData?.(controller, chunk)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      const { handler, controller: waitingController } = waitingHandler\n\n      if (waitingHandler.done || waitingController.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      if (waitingController.paused) {\n        this.#bufferWaitingChunk(waitingHandler, chunk)\n        continue\n      }\n\n      try {\n        handler.onResponseData?.(waitingController, chunk)\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      if (waitingController.aborted) {\n        waitingHandler.done = true\n        waitingHandler.bufferedChunks = []\n        waitingHandler.bufferedBytes = 0\n      }\n    }\n\n    this.#pruneDoneWaitingHandlers()\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {object} trailers\n   */\n  onResponseEnd (controller, trailers) {\n    if (this.#aborted || this.#completed) {\n      return\n    }\n\n    this.#completed = true\n    this.#primaryHandler.onResponseEnd?.(controller, trailers)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      if (waitingHandler.done || waitingHandler.controller.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      this.#flushWaitingHandler(waitingHandler)\n\n      if (waitingHandler.done || waitingHandler.controller.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      if (waitingHandler.controller.paused && waitingHandler.bufferedChunks.length > 0) {\n        waitingHandler.pendingTrailers = trailers\n        continue\n      }\n\n      try {\n        waitingHandler.handler.onResponseEnd?.(waitingHandler.controller, trailers)\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      waitingHandler.done = true\n    }\n\n    this.#pruneDoneWaitingHandlers()\n    this.#onComplete?.()\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {Error} err\n   */\n  onResponseError (controller, err) {\n    if (this.#completed) {\n      return\n    }\n\n    this.#aborted = true\n    this.#completed = true\n\n    this.#primaryHandler.onResponseError?.(controller, err)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      this.#errorWaitingHandler(waitingHandler, err)\n    }\n\n    this.#waitingHandlers = []\n    this.#onComplete?.()\n  }\n\n  /**\n   * @param {DispatchHandler} handler\n   * @returns {WaitingHandler}\n   */\n  #createWaitingHandler (handler) {\n    /** @type {WaitingHandler} */\n    const waitingHandler = {\n      handler,\n      controller: null,\n      bufferedChunks: [],\n      bufferedBytes: 0,\n      pendingTrailers: null,\n      done: false\n    }\n\n    const state = {\n      aborted: false,\n      paused: false,\n      reason: null\n    }\n\n    waitingHandler.controller = {\n      resume: () => {\n        if (state.aborted) {\n          return\n        }\n\n        state.paused = false\n        this.#flushWaitingHandler(waitingHandler)\n\n        if (\n          this.#completed &&\n          waitingHandler.pendingTrailers &&\n          waitingHandler.bufferedChunks.length === 0 &&\n          !state.paused &&\n          !state.aborted\n        ) {\n          try {\n            waitingHandler.handler.onResponseEnd?.(waitingHandler.controller, waitingHandler.pendingTrailers)\n          } catch {\n            // Ignore errors from waiting handlers\n          }\n\n          waitingHandler.pendingTrailers = null\n          waitingHandler.done = true\n        }\n\n        this.#pruneDoneWaitingHandlers()\n      },\n      pause: () => {\n        if (!state.aborted) {\n          state.paused = true\n        }\n      },\n      get paused () { return state.paused },\n      get aborted () { return state.aborted },\n      get reason () { return state.reason },\n      abort: (reason) => {\n        state.aborted = true\n        state.reason = reason ?? null\n        waitingHandler.done = true\n        waitingHandler.pendingTrailers = null\n        waitingHandler.bufferedChunks = []\n        waitingHandler.bufferedBytes = 0\n      }\n    }\n\n    return waitingHandler\n  }\n\n  /**\n   * @param {WaitingHandler} waitingHandler\n   * @param {Buffer} chunk\n   */\n  #bufferWaitingChunk (waitingHandler, chunk) {\n    if (waitingHandler.done || waitingHandler.controller.aborted) {\n      waitingHandler.done = true\n      waitingHandler.bufferedChunks = []\n      waitingHandler.bufferedBytes = 0\n      return\n    }\n\n    const bufferedChunk = Buffer.from(chunk)\n    waitingHandler.bufferedChunks.push(bufferedChunk)\n    waitingHandler.bufferedBytes += bufferedChunk.length\n\n    if (waitingHandler.bufferedBytes > this.#maxBufferSize) {\n      const err = new RequestAbortedError(`Deduplicated waiting handler exceeded maxBufferSize (${this.#maxBufferSize} bytes) while paused`)\n      this.#errorWaitingHandler(waitingHandler, err)\n    }\n  }\n\n  /**\n   * @param {WaitingHandler} waitingHandler\n   */\n  #flushWaitingHandler (waitingHandler) {\n    const { handler, controller } = waitingHandler\n\n    while (\n      !waitingHandler.done &&\n      !controller.aborted &&\n      !controller.paused &&\n      waitingHandler.bufferedChunks.length > 0\n    ) {\n      const bufferedChunk = waitingHandler.bufferedChunks.shift()\n      waitingHandler.bufferedBytes -= bufferedChunk.length\n\n      try {\n        handler.onResponseData?.(controller, bufferedChunk)\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      if (controller.aborted) {\n        waitingHandler.done = true\n        waitingHandler.pendingTrailers = null\n        waitingHandler.bufferedChunks = []\n        waitingHandler.bufferedBytes = 0\n        break\n      }\n    }\n  }\n\n  /**\n   * @param {WaitingHandler} waitingHandler\n   * @param {Error} err\n   */\n  #errorWaitingHandler (waitingHandler, err) {\n    if (waitingHandler.done) {\n      return\n    }\n\n    waitingHandler.done = true\n    waitingHandler.pendingTrailers = null\n    waitingHandler.bufferedChunks = []\n    waitingHandler.bufferedBytes = 0\n\n    try {\n      waitingHandler.controller.abort(err)\n      waitingHandler.handler.onResponseError?.(waitingHandler.controller, err)\n    } catch {\n      // Ignore errors from waiting handlers\n    }\n  }\n\n  #pruneDoneWaitingHandlers () {\n    this.#waitingHandlers = this.#waitingHandlers.filter(waitingHandler => waitingHandler.done === false)\n  }\n}\n\nmodule.exports = DeduplicationHandler\n", "'use strict'\n\nconst diagnosticsChannel = require('node:diagnostics_channel')\nconst util = require('../core/util')\nconst DeduplicationHandler = require('../handler/deduplication-handler')\nconst { normalizeHeaders, makeCacheKey, makeDeduplicationKey } = require('../util/cache.js')\n\nconst pendingRequestsChannel = diagnosticsChannel.channel('undici:request:pending-requests')\n\n/**\n * @param {import('../../types/interceptors.d.ts').default.DeduplicateInterceptorOpts} [opts]\n * @returns {import('../../types/dispatcher.d.ts').default.DispatcherComposeInterceptor}\n */\nmodule.exports = (opts = {}) => {\n  const {\n    methods = ['GET'],\n    skipHeaderNames = [],\n    excludeHeaderNames = [],\n    maxBufferSize = 5 * 1024 * 1024\n  } = opts\n\n  if (typeof opts !== 'object' || opts === null) {\n    throw new TypeError(`expected type of opts to be an Object, got ${opts === null ? 'null' : typeof opts}`)\n  }\n\n  if (!Array.isArray(methods)) {\n    throw new TypeError(`expected opts.methods to be an array, got ${typeof methods}`)\n  }\n\n  for (const method of methods) {\n    if (!util.safeHTTPMethods.includes(method)) {\n      throw new TypeError(`expected opts.methods to only contain safe HTTP methods, got ${method}`)\n    }\n  }\n\n  if (!Array.isArray(skipHeaderNames)) {\n    throw new TypeError(`expected opts.skipHeaderNames to be an array, got ${typeof skipHeaderNames}`)\n  }\n\n  if (!Array.isArray(excludeHeaderNames)) {\n    throw new TypeError(`expected opts.excludeHeaderNames to be an array, got ${typeof excludeHeaderNames}`)\n  }\n\n  if (!Number.isFinite(maxBufferSize) || maxBufferSize <= 0) {\n    throw new TypeError(`expected opts.maxBufferSize to be a positive finite number, got ${maxBufferSize}`)\n  }\n\n  // Convert to lowercase Set for case-insensitive header matching\n  const skipHeaderNamesSet = new Set(skipHeaderNames.map(name => name.toLowerCase()))\n\n  // Convert to lowercase Set for case-insensitive header exclusion from deduplication key\n  const excludeHeaderNamesSet = new Set(excludeHeaderNames.map(name => name.toLowerCase()))\n\n  /**\n   * Map of pending requests for deduplication\n   * @type {Map<string, DeduplicationHandler>}\n   */\n  const pendingRequests = new Map()\n\n  return dispatch => {\n    return (opts, handler) => {\n      if (!opts.origin || methods.includes(opts.method) === false) {\n        return dispatch(opts, handler)\n      }\n\n      opts = {\n        ...opts,\n        headers: normalizeHeaders(opts)\n      }\n\n      // Skip deduplication if request contains any of the specified headers\n      if (skipHeaderNamesSet.size > 0) {\n        for (const headerName of Object.keys(opts.headers)) {\n          if (skipHeaderNamesSet.has(headerName.toLowerCase())) {\n            return dispatch(opts, handler)\n          }\n        }\n      }\n\n      const cacheKey = makeCacheKey(opts)\n      const dedupeKey = makeDeduplicationKey(cacheKey, excludeHeaderNamesSet)\n\n      // Check if there's already a pending request for this key\n      const pendingHandler = pendingRequests.get(dedupeKey)\n      if (pendingHandler) {\n        // Add this handler to the waiting list when safe.\n        // If body streaming has already started, this request must be sent independently.\n        if (pendingHandler.addWaitingHandler(handler)) {\n          return true\n        }\n\n        return dispatch(opts, handler)\n      }\n\n      // Create a new deduplication handler\n      const deduplicationHandler = new DeduplicationHandler(\n        handler,\n        () => {\n          // Clean up when request completes\n          pendingRequests.delete(dedupeKey)\n          if (pendingRequestsChannel.hasSubscribers) {\n            pendingRequestsChannel.publish({ size: pendingRequests.size, key: dedupeKey, type: 'removed' })\n          }\n        },\n        maxBufferSize\n      )\n\n      // Register the pending request\n      pendingRequests.set(dedupeKey, deduplicationHandler)\n      if (pendingRequestsChannel.hasSubscribers) {\n        pendingRequestsChannel.publish({ size: pendingRequests.size, key: dedupeKey, type: 'added' })\n      }\n\n      return dispatch(opts, deduplicationHandler)\n    }\n  }\n}\n", "'use strict'\n\nconst { Writable } = require('node:stream')\nconst { assertCacheKey, assertCacheValue } = require('../util/cache.js')\n\nlet DatabaseSync\n\nconst VERSION = 3\n\n// 2gb\nconst MAX_ENTRY_SIZE = 2 * 1000 * 1000 * 1000\n\n/**\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheStore} CacheStore\n * @implements {CacheStore}\n *\n * @typedef {{\n *  id: Readonly<number>,\n *  body?: Uint8Array\n *  statusCode: number\n *  statusMessage: string\n *  headers?: string\n *  vary?: string\n *  etag?: string\n *  cacheControlDirectives?: string\n *  cachedAt: number\n *  staleAt: number\n *  deleteAt: number\n * }} SqliteStoreValue\n */\nmodule.exports = class SqliteCacheStore {\n  #maxEntrySize = MAX_ENTRY_SIZE\n  #maxCount = Infinity\n\n  /**\n   * @type {import('node:sqlite').DatabaseSync}\n   */\n  #db\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #getValuesQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #updateValueQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #insertValueQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #deleteExpiredValuesQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #deleteByUrlQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #countEntriesQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync | null}\n   */\n  #deleteOldValuesQuery\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.SqliteCacheStoreOpts | undefined} opts\n   */\n  constructor (opts) {\n    if (opts) {\n      if (typeof opts !== 'object') {\n        throw new TypeError('SqliteCacheStore options must be an object')\n      }\n\n      if (opts.maxEntrySize !== undefined) {\n        if (\n          typeof opts.maxEntrySize !== 'number' ||\n          !Number.isInteger(opts.maxEntrySize) ||\n          opts.maxEntrySize < 0\n        ) {\n          throw new TypeError('SqliteCacheStore options.maxEntrySize must be a non-negative integer')\n        }\n\n        if (opts.maxEntrySize > MAX_ENTRY_SIZE) {\n          throw new TypeError('SqliteCacheStore options.maxEntrySize must be less than 2gb')\n        }\n\n        this.#maxEntrySize = opts.maxEntrySize\n      }\n\n      if (opts.maxCount !== undefined) {\n        if (\n          typeof opts.maxCount !== 'number' ||\n          !Number.isInteger(opts.maxCount) ||\n          opts.maxCount < 0\n        ) {\n          throw new TypeError('SqliteCacheStore options.maxCount must be a non-negative integer')\n        }\n        this.#maxCount = opts.maxCount\n      }\n    }\n\n    if (!DatabaseSync) {\n      DatabaseSync = require('node:sqlite').DatabaseSync\n    }\n    this.#db = new DatabaseSync(opts?.location ?? ':memory:')\n\n    this.#db.exec(`\n      PRAGMA journal_mode = WAL;\n      PRAGMA synchronous = NORMAL;\n      PRAGMA temp_store = memory;\n      PRAGMA optimize;\n\n      CREATE TABLE IF NOT EXISTS cacheInterceptorV${VERSION} (\n        -- Data specific to us\n        id INTEGER PRIMARY KEY AUTOINCREMENT,\n        url TEXT NOT NULL,\n        method TEXT NOT NULL,\n\n        -- Data returned to the interceptor\n        body BUF NULL,\n        deleteAt INTEGER NOT NULL,\n        statusCode INTEGER NOT NULL,\n        statusMessage TEXT NOT NULL,\n        headers TEXT NULL,\n        cacheControlDirectives TEXT NULL,\n        etag TEXT NULL,\n        vary TEXT NULL,\n        cachedAt INTEGER NOT NULL,\n        staleAt INTEGER NOT NULL\n      );\n\n      CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION}_getValuesQuery ON cacheInterceptorV${VERSION}(url, method, deleteAt);\n      CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION}_deleteByUrlQuery ON cacheInterceptorV${VERSION}(deleteAt);\n    `)\n\n    this.#getValuesQuery = this.#db.prepare(`\n      SELECT\n        id,\n        body,\n        deleteAt,\n        statusCode,\n        statusMessage,\n        headers,\n        etag,\n        cacheControlDirectives,\n        vary,\n        cachedAt,\n        staleAt\n      FROM cacheInterceptorV${VERSION}\n      WHERE\n        url = ?\n        AND method = ?\n      ORDER BY\n        deleteAt ASC\n    `)\n\n    this.#updateValueQuery = this.#db.prepare(`\n      UPDATE cacheInterceptorV${VERSION} SET\n        body = ?,\n        deleteAt = ?,\n        statusCode = ?,\n        statusMessage = ?,\n        headers = ?,\n        etag = ?,\n        cacheControlDirectives = ?,\n        cachedAt = ?,\n        staleAt = ?\n      WHERE\n        id = ?\n    `)\n\n    this.#insertValueQuery = this.#db.prepare(`\n      INSERT INTO cacheInterceptorV${VERSION} (\n        url,\n        method,\n        body,\n        deleteAt,\n        statusCode,\n        statusMessage,\n        headers,\n        etag,\n        cacheControlDirectives,\n        vary,\n        cachedAt,\n        staleAt\n      ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n    `)\n\n    this.#deleteByUrlQuery = this.#db.prepare(\n      `DELETE FROM cacheInterceptorV${VERSION} WHERE url = ?`\n    )\n\n    this.#countEntriesQuery = this.#db.prepare(\n      `SELECT COUNT(*) AS total FROM cacheInterceptorV${VERSION}`\n    )\n\n    this.#deleteExpiredValuesQuery = this.#db.prepare(\n      `DELETE FROM cacheInterceptorV${VERSION} WHERE deleteAt <= ?`\n    )\n\n    this.#deleteOldValuesQuery = this.#maxCount === Infinity\n      ? null\n      : this.#db.prepare(`\n        DELETE FROM cacheInterceptorV${VERSION}\n        WHERE id IN (\n          SELECT\n            id\n          FROM cacheInterceptorV${VERSION}\n          ORDER BY cachedAt DESC\n          LIMIT ?\n        )\n      `)\n  }\n\n  close () {\n    this.#db.close()\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @returns {(import('../../types/cache-interceptor.d.ts').default.GetResult & { body?: Buffer }) | undefined}\n   */\n  get (key) {\n    assertCacheKey(key)\n\n    const value = this.#findValue(key)\n    return value\n      ? {\n          body: value.body ? Buffer.from(value.body.buffer, value.body.byteOffset, value.body.byteLength) : undefined,\n          statusCode: value.statusCode,\n          statusMessage: value.statusMessage,\n          headers: value.headers ? JSON.parse(value.headers) : undefined,\n          etag: value.etag ? value.etag : undefined,\n          vary: value.vary ? JSON.parse(value.vary) : undefined,\n          cacheControlDirectives: value.cacheControlDirectives\n            ? JSON.parse(value.cacheControlDirectives)\n            : undefined,\n          cachedAt: value.cachedAt,\n          staleAt: value.staleAt,\n          deleteAt: value.deleteAt\n        }\n      : undefined\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue & { body: null | Buffer | Array<Buffer>}} value\n   */\n  set (key, value) {\n    assertCacheKey(key)\n\n    const url = this.#makeValueUrl(key)\n    const body = Array.isArray(value.body) ? Buffer.concat(value.body) : value.body\n    const size = body?.byteLength\n\n    if (size && size > this.#maxEntrySize) {\n      return\n    }\n\n    const existingValue = this.#findValue(key, true)\n    if (existingValue) {\n      // Updating an existing response, let's overwrite it\n      this.#updateValueQuery.run(\n        body,\n        value.deleteAt,\n        value.statusCode,\n        value.statusMessage,\n        value.headers ? JSON.stringify(value.headers) : null,\n        value.etag ? value.etag : null,\n        value.cacheControlDirectives ? JSON.stringify(value.cacheControlDirectives) : null,\n        value.cachedAt,\n        value.staleAt,\n        existingValue.id\n      )\n    } else {\n      this.#prune()\n      // New response, let's insert it\n      this.#insertValueQuery.run(\n        url,\n        key.method,\n        body,\n        value.deleteAt,\n        value.statusCode,\n        value.statusMessage,\n        value.headers ? JSON.stringify(value.headers) : null,\n        value.etag ? value.etag : null,\n        value.cacheControlDirectives ? JSON.stringify(value.cacheControlDirectives) : null,\n        value.vary ? JSON.stringify(value.vary) : null,\n        value.cachedAt,\n        value.staleAt\n      )\n    }\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue} value\n   * @returns {Writable | undefined}\n   */\n  createWriteStream (key, value) {\n    assertCacheKey(key)\n    assertCacheValue(value)\n\n    let size = 0\n    /**\n     * @type {Buffer[] | null}\n     */\n    const body = []\n    const store = this\n\n    return new Writable({\n      decodeStrings: true,\n      write (chunk, encoding, callback) {\n        size += chunk.byteLength\n\n        if (size < store.#maxEntrySize) {\n          body.push(chunk)\n        } else {\n          this.destroy()\n        }\n\n        callback()\n      },\n      final (callback) {\n        store.set(key, { ...value, body })\n        callback()\n      }\n    })\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   */\n  delete (key) {\n    if (typeof key !== 'object') {\n      throw new TypeError(`expected key to be object, got ${typeof key}`)\n    }\n\n    this.#deleteByUrlQuery.run(this.#makeValueUrl(key))\n  }\n\n  #prune () {\n    if (Number.isFinite(this.#maxCount) && this.size <= this.#maxCount) {\n      return 0\n    }\n\n    {\n      const removed = this.#deleteExpiredValuesQuery.run(Date.now()).changes\n      if (removed) {\n        return removed\n      }\n    }\n\n    {\n      const removed = this.#deleteOldValuesQuery?.run(Math.max(Math.floor(this.#maxCount * 0.1), 1)).changes\n      if (removed) {\n        return removed\n      }\n    }\n\n    return 0\n  }\n\n  /**\n   * Counts the number of rows in the cache\n   * @returns {Number}\n   */\n  get size () {\n    const { total } = this.#countEntriesQuery.get()\n    return total\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @returns {string}\n   */\n  #makeValueUrl (key) {\n    return `${key.origin}/${key.path}`\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {boolean} [canBeExpired=false]\n   * @returns {SqliteStoreValue | undefined}\n   */\n  #findValue (key, canBeExpired = false) {\n    const url = this.#makeValueUrl(key)\n    const { headers, method } = key\n\n    /**\n     * @type {SqliteStoreValue[]}\n     */\n    const values = this.#getValuesQuery.all(url, method)\n\n    if (values.length === 0) {\n      return undefined\n    }\n\n    const now = Date.now()\n    for (const value of values) {\n      if (now >= value.deleteAt && !canBeExpired) {\n        return undefined\n      }\n\n      let matches = true\n\n      if (value.vary) {\n        const vary = JSON.parse(value.vary)\n\n        for (const header in vary) {\n          if (!headerValueEquals(headers[header], vary[header])) {\n            matches = false\n            break\n          }\n        }\n      }\n\n      if (matches) {\n        return value\n      }\n    }\n\n    return undefined\n  }\n}\n\n/**\n * @param {string|string[]|null|undefined} lhs\n * @param {string|string[]|null|undefined} rhs\n * @returns {boolean}\n */\nfunction headerValueEquals (lhs, rhs) {\n  if (lhs == null && rhs == null) {\n    return true\n  }\n\n  if ((lhs == null && rhs != null) ||\n      (lhs != null && rhs == null)) {\n    return false\n  }\n\n  if (Array.isArray(lhs) && Array.isArray(rhs)) {\n    if (lhs.length !== rhs.length) {\n      return false\n    }\n\n    return lhs.every((x, i) => x === rhs[i])\n  }\n\n  return lhs === rhs\n}\n", "// https://github.com/Ethan-Arrowood/undici-fetch\n\n'use strict'\n\nconst { kConstruct } = require('../../core/symbols')\nconst { kEnumerableProperty } = require('../../core/util')\nconst {\n  iteratorMixin,\n  isValidHeaderName,\n  isValidHeaderValue\n} = require('./util')\nconst { webidl } = require('../webidl')\nconst assert = require('node:assert')\nconst util = require('node:util')\n\n/**\n * @param {number} code\n * @returns {code is (0x0a | 0x0d | 0x09 | 0x20)}\n */\nfunction isHTTPWhiteSpaceCharCode (code) {\n  return code === 0x0a || code === 0x0d || code === 0x09 || code === 0x20\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-header-value-normalize\n * @param {string} potentialValue\n * @returns {string}\n */\nfunction headerValueNormalize (potentialValue) {\n  //  To normalize a byte sequence potentialValue, remove\n  //  any leading and trailing HTTP whitespace bytes from\n  //  potentialValue.\n  let i = 0; let j = potentialValue.length\n\n  while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j - 1))) --j\n  while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i))) ++i\n\n  return i === 0 && j === potentialValue.length ? potentialValue : potentialValue.substring(i, j)\n}\n\n/**\n * @param {Headers} headers\n * @param {Array|Object} object\n */\nfunction fill (headers, object) {\n  // To fill a Headers object headers with a given object object, run these steps:\n\n  // 1. If object is a sequence, then for each header in object:\n  // Note: webidl conversion to array has already been done.\n  if (Array.isArray(object)) {\n    for (let i = 0; i < object.length; ++i) {\n      const header = object[i]\n      // 1. If header does not contain exactly two items, then throw a TypeError.\n      if (header.length !== 2) {\n        throw webidl.errors.exception({\n          header: 'Headers constructor',\n          message: `expected name/value pair to be length 2, found ${header.length}.`\n        })\n      }\n\n      // 2. Append (header\u2019s first item, header\u2019s second item) to headers.\n      appendHeader(headers, header[0], header[1])\n    }\n  } else if (typeof object === 'object' && object !== null) {\n    // Note: null should throw\n\n    // 2. Otherwise, object is a record, then for each key \u2192 value in object,\n    //    append (key, value) to headers\n    const keys = Object.keys(object)\n    for (let i = 0; i < keys.length; ++i) {\n      appendHeader(headers, keys[i], object[keys[i]])\n    }\n  } else {\n    throw webidl.errors.conversionFailed({\n      prefix: 'Headers constructor',\n      argument: 'Argument 1',\n      types: ['sequence<sequence<ByteString>>', 'record<ByteString, ByteString>']\n    })\n  }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-headers-append\n * @param {Headers} headers\n * @param {string} name\n * @param {string} value\n */\nfunction appendHeader (headers, name, value) {\n  // 1. Normalize value.\n  value = headerValueNormalize(value)\n\n  // 2. If name is not a header name or value is not a\n  //    header value, then throw a TypeError.\n  if (!isValidHeaderName(name)) {\n    throw webidl.errors.invalidArgument({\n      prefix: 'Headers.append',\n      value: name,\n      type: 'header name'\n    })\n  } else if (!isValidHeaderValue(value)) {\n    throw webidl.errors.invalidArgument({\n      prefix: 'Headers.append',\n      value,\n      type: 'header value'\n    })\n  }\n\n  // 3. If headers\u2019s guard is \"immutable\", then throw a TypeError.\n  // 4. Otherwise, if headers\u2019s guard is \"request\" and name is a\n  //    forbidden header name, return.\n  // 5. Otherwise, if headers\u2019s guard is \"request-no-cors\":\n  //    TODO\n  // Note: undici does not implement forbidden header names\n  if (getHeadersGuard(headers) === 'immutable') {\n    throw new TypeError('immutable')\n  }\n\n  // 6. Otherwise, if headers\u2019s guard is \"response\" and name is a\n  //    forbidden response-header name, return.\n\n  // 7. Append (name, value) to headers\u2019s header list.\n  return getHeadersList(headers).append(name, value, false)\n\n  // 8. If headers\u2019s guard is \"request-no-cors\", then remove\n  //    privileged no-CORS request headers from headers\n}\n\n// https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n/**\n * @param {Headers} target\n */\nfunction headersListSortAndCombine (target) {\n  const headersList = getHeadersList(target)\n\n  if (!headersList) {\n    return []\n  }\n\n  if (headersList.sortedMap) {\n    return headersList.sortedMap\n  }\n\n  // 1. Let headers be an empty list of headers with the key being the name\n  //    and value the value.\n  const headers = []\n\n  // 2. Let names be the result of convert header names to a sorted-lowercase\n  //    set with all the names of the headers in list.\n  const names = headersList.toSortedArray()\n\n  const cookies = headersList.cookies\n\n  // fast-path\n  if (cookies === null || cookies.length === 1) {\n    // Note: The non-null assertion of value has already been done by `HeadersList#toSortedArray`\n    return (headersList.sortedMap = names)\n  }\n\n  // 3. For each name of names:\n  for (let i = 0; i < names.length; ++i) {\n    const { 0: name, 1: value } = names[i]\n    // 1. If name is `set-cookie`, then:\n    if (name === 'set-cookie') {\n      // 1. Let values be a list of all values of headers in list whose name\n      //    is a byte-case-insensitive match for name, in order.\n\n      // 2. For each value of values:\n      // 1. Append (name, value) to headers.\n      for (let j = 0; j < cookies.length; ++j) {\n        headers.push([name, cookies[j]])\n      }\n    } else {\n      // 2. Otherwise:\n\n      // 1. Let value be the result of getting name from list.\n\n      // 2. Assert: value is non-null.\n      // Note: This operation was done by `HeadersList#toSortedArray`.\n\n      // 3. Append (name, value) to headers.\n      headers.push([name, value])\n    }\n  }\n\n  // 4. Return headers.\n  return (headersList.sortedMap = headers)\n}\n\nfunction compareHeaderName (a, b) {\n  return a[0] < b[0] ? -1 : 1\n}\n\nclass HeadersList {\n  /** @type {[string, string][]|null} */\n  cookies = null\n\n  sortedMap\n  headersMap\n\n  constructor (init) {\n    if (init instanceof HeadersList) {\n      this.headersMap = new Map(init.headersMap)\n      this.sortedMap = init.sortedMap\n      this.cookies = init.cookies === null ? null : [...init.cookies]\n    } else {\n      this.headersMap = new Map(init)\n      this.sortedMap = null\n    }\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#header-list-contains\n   * @param {string} name\n   * @param {boolean} isLowerCase\n   */\n  contains (name, isLowerCase) {\n    // A header list list contains a header name name if list\n    // contains a header whose name is a byte-case-insensitive\n    // match for name.\n\n    return this.headersMap.has(isLowerCase ? name : name.toLowerCase())\n  }\n\n  clear () {\n    this.headersMap.clear()\n    this.sortedMap = null\n    this.cookies = null\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-append\n   * @param {string} name\n   * @param {string} value\n   * @param {boolean} isLowerCase\n   */\n  append (name, value, isLowerCase) {\n    this.sortedMap = null\n\n    // 1. If list contains name, then set name to the first such\n    //    header\u2019s name.\n    const lowercaseName = isLowerCase ? name : name.toLowerCase()\n    const exists = this.headersMap.get(lowercaseName)\n\n    // 2. Append (name, value) to list.\n    if (exists) {\n      const delimiter = lowercaseName === 'cookie' ? '; ' : ', '\n      this.headersMap.set(lowercaseName, {\n        name: exists.name,\n        value: `${exists.value}${delimiter}${value}`\n      })\n    } else {\n      this.headersMap.set(lowercaseName, { name, value })\n    }\n\n    if (lowercaseName === 'set-cookie') {\n      (this.cookies ??= []).push(value)\n    }\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-set\n   * @param {string} name\n   * @param {string} value\n   * @param {boolean} isLowerCase\n   */\n  set (name, value, isLowerCase) {\n    this.sortedMap = null\n    const lowercaseName = isLowerCase ? name : name.toLowerCase()\n\n    if (lowercaseName === 'set-cookie') {\n      this.cookies = [value]\n    }\n\n    // 1. If list contains name, then set the value of\n    //    the first such header to value and remove the\n    //    others.\n    // 2. Otherwise, append header (name, value) to list.\n    this.headersMap.set(lowercaseName, { name, value })\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-delete\n   * @param {string} name\n   * @param {boolean} isLowerCase\n   */\n  delete (name, isLowerCase) {\n    this.sortedMap = null\n    if (!isLowerCase) name = name.toLowerCase()\n\n    if (name === 'set-cookie') {\n      this.cookies = null\n    }\n\n    this.headersMap.delete(name)\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-get\n   * @param {string} name\n   * @param {boolean} isLowerCase\n   * @returns {string | null}\n   */\n  get (name, isLowerCase) {\n    // 1. If list does not contain name, then return null.\n    // 2. Return the values of all headers in list whose name\n    //    is a byte-case-insensitive match for name,\n    //    separated from each other by 0x2C 0x20, in order.\n    return this.headersMap.get(isLowerCase ? name : name.toLowerCase())?.value ?? null\n  }\n\n  * [Symbol.iterator] () {\n    // use the lowercased name\n    for (const { 0: name, 1: { value } } of this.headersMap) {\n      yield [name, value]\n    }\n  }\n\n  get entries () {\n    const headers = {}\n\n    if (this.headersMap.size !== 0) {\n      for (const { name, value } of this.headersMap.values()) {\n        headers[name] = value\n      }\n    }\n\n    return headers\n  }\n\n  rawValues () {\n    return this.headersMap.values()\n  }\n\n  get entriesList () {\n    const headers = []\n\n    if (this.headersMap.size !== 0) {\n      for (const { 0: lowerName, 1: { name, value } } of this.headersMap) {\n        if (lowerName === 'set-cookie') {\n          for (const cookie of this.cookies) {\n            headers.push([name, cookie])\n          }\n        } else {\n          headers.push([name, value])\n        }\n      }\n    }\n\n    return headers\n  }\n\n  // https://fetch.spec.whatwg.org/#convert-header-names-to-a-sorted-lowercase-set\n  toSortedArray () {\n    const size = this.headersMap.size\n    const array = new Array(size)\n    // In most cases, you will use the fast-path.\n    // fast-path: Use binary insertion sort for small arrays.\n    if (size <= 32) {\n      if (size === 0) {\n        // If empty, it is an empty array. To avoid the first index assignment.\n        return array\n      }\n      // Improve performance by unrolling loop and avoiding double-loop.\n      // Double-loop-less version of the binary insertion sort.\n      const iterator = this.headersMap[Symbol.iterator]()\n      const firstValue = iterator.next().value\n      // set [name, value] to first index.\n      array[0] = [firstValue[0], firstValue[1].value]\n      // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n      // 3.2.2. Assert: value is non-null.\n      assert(firstValue[1].value !== null)\n      for (\n        let i = 1, j = 0, right = 0, left = 0, pivot = 0, x, value;\n        i < size;\n        ++i\n      ) {\n        // get next value\n        value = iterator.next().value\n        // set [name, value] to current index.\n        x = array[i] = [value[0], value[1].value]\n        // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n        // 3.2.2. Assert: value is non-null.\n        assert(x[1] !== null)\n        left = 0\n        right = i\n        // binary search\n        while (left < right) {\n          // middle index\n          pivot = left + ((right - left) >> 1)\n          // compare header name\n          if (array[pivot][0] <= x[0]) {\n            left = pivot + 1\n          } else {\n            right = pivot\n          }\n        }\n        if (i !== pivot) {\n          j = i\n          while (j > left) {\n            array[j] = array[--j]\n          }\n          array[left] = x\n        }\n      }\n      /* c8 ignore next 4 */\n      if (!iterator.next().done) {\n        // This is for debugging and will never be called.\n        throw new TypeError('Unreachable')\n      }\n      return array\n    } else {\n      // This case would be a rare occurrence.\n      // slow-path: fallback\n      let i = 0\n      for (const { 0: name, 1: { value } } of this.headersMap) {\n        array[i++] = [name, value]\n        // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n        // 3.2.2. Assert: value is non-null.\n        assert(value !== null)\n      }\n      return array.sort(compareHeaderName)\n    }\n  }\n}\n\n// https://fetch.spec.whatwg.org/#headers-class\nclass Headers {\n  #guard\n  /**\n   * @type {HeadersList}\n   */\n  #headersList\n\n  /**\n   * @param {HeadersInit|Symbol} [init]\n   * @returns\n   */\n  constructor (init = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (init === kConstruct) {\n      return\n    }\n\n    this.#headersList = new HeadersList()\n\n    // The new Headers(init) constructor steps are:\n\n    // 1. Set this\u2019s guard to \"none\".\n    this.#guard = 'none'\n\n    // 2. If init is given, then fill this with init.\n    if (init !== undefined) {\n      init = webidl.converters.HeadersInit(init, 'Headers constructor', 'init')\n      fill(this, init)\n    }\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-append\n  append (name, value) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 2, 'Headers.append')\n\n    const prefix = 'Headers.append'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n    value = webidl.converters.ByteString(value, prefix, 'value')\n\n    return appendHeader(this, name, value)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-delete\n  delete (name) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 1, 'Headers.delete')\n\n    const prefix = 'Headers.delete'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n\n    // 1. If name is not a header name, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix: 'Headers.delete',\n        value: name,\n        type: 'header name'\n      })\n    }\n\n    // 2. If this\u2019s guard is \"immutable\", then throw a TypeError.\n    // 3. Otherwise, if this\u2019s guard is \"request\" and name is a\n    //    forbidden header name, return.\n    // 4. Otherwise, if this\u2019s guard is \"request-no-cors\", name\n    //    is not a no-CORS-safelisted request-header name, and\n    //    name is not a privileged no-CORS request-header name,\n    //    return.\n    // 5. Otherwise, if this\u2019s guard is \"response\" and name is\n    //    a forbidden response-header name, return.\n    // Note: undici does not implement forbidden header names\n    if (this.#guard === 'immutable') {\n      throw new TypeError('immutable')\n    }\n\n    // 6. If this\u2019s header list does not contain name, then\n    //    return.\n    if (!this.#headersList.contains(name, false)) {\n      return\n    }\n\n    // 7. Delete name from this\u2019s header list.\n    // 8. If this\u2019s guard is \"request-no-cors\", then remove\n    //    privileged no-CORS request headers from this.\n    this.#headersList.delete(name, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-get\n  get (name) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 1, 'Headers.get')\n\n    const prefix = 'Headers.get'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n\n    // 1. If name is not a header name, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value: name,\n        type: 'header name'\n      })\n    }\n\n    // 2. Return the result of getting name from this\u2019s header\n    //    list.\n    return this.#headersList.get(name, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-has\n  has (name) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 1, 'Headers.has')\n\n    const prefix = 'Headers.has'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n\n    // 1. If name is not a header name, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value: name,\n        type: 'header name'\n      })\n    }\n\n    // 2. Return true if this\u2019s header list contains name;\n    //    otherwise false.\n    return this.#headersList.contains(name, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-set\n  set (name, value) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 2, 'Headers.set')\n\n    const prefix = 'Headers.set'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n    value = webidl.converters.ByteString(value, prefix, 'value')\n\n    // 1. Normalize value.\n    value = headerValueNormalize(value)\n\n    // 2. If name is not a header name or value is not a\n    //    header value, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value: name,\n        type: 'header name'\n      })\n    } else if (!isValidHeaderValue(value)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value,\n        type: 'header value'\n      })\n    }\n\n    // 3. If this\u2019s guard is \"immutable\", then throw a TypeError.\n    // 4. Otherwise, if this\u2019s guard is \"request\" and name is a\n    //    forbidden header name, return.\n    // 5. Otherwise, if this\u2019s guard is \"request-no-cors\" and\n    //    name/value is not a no-CORS-safelisted request-header,\n    //    return.\n    // 6. Otherwise, if this\u2019s guard is \"response\" and name is a\n    //    forbidden response-header name, return.\n    // Note: undici does not implement forbidden header names\n    if (this.#guard === 'immutable') {\n      throw new TypeError('immutable')\n    }\n\n    // 7. Set (name, value) in this\u2019s header list.\n    // 8. If this\u2019s guard is \"request-no-cors\", then remove\n    //    privileged no-CORS request headers from this\n    this.#headersList.set(name, value, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie\n  getSetCookie () {\n    webidl.brandCheck(this, Headers)\n\n    // 1. If this\u2019s header list does not contain `Set-Cookie`, then return \u00AB \u00BB.\n    // 2. Return the values of all headers in this\u2019s header list whose name is\n    //    a byte-case-insensitive match for `Set-Cookie`, in order.\n\n    const list = this.#headersList.cookies\n\n    if (list) {\n      return [...list]\n    }\n\n    return []\n  }\n\n  [util.inspect.custom] (depth, options) {\n    options.depth ??= depth\n\n    return `Headers ${util.formatWithOptions(options, this.#headersList.entries)}`\n  }\n\n  static getHeadersGuard (o) {\n    return o.#guard\n  }\n\n  static setHeadersGuard (o, guard) {\n    o.#guard = guard\n  }\n\n  /**\n   * @param {Headers} o\n   */\n  static getHeadersList (o) {\n    return o.#headersList\n  }\n\n  /**\n   * @param {Headers} target\n   * @param {HeadersList} list\n   */\n  static setHeadersList (target, list) {\n    target.#headersList = list\n  }\n}\n\nconst { getHeadersGuard, setHeadersGuard, getHeadersList, setHeadersList } = Headers\nReflect.deleteProperty(Headers, 'getHeadersGuard')\nReflect.deleteProperty(Headers, 'setHeadersGuard')\nReflect.deleteProperty(Headers, 'getHeadersList')\nReflect.deleteProperty(Headers, 'setHeadersList')\n\niteratorMixin('Headers', Headers, headersListSortAndCombine, 0, 1)\n\nObject.defineProperties(Headers.prototype, {\n  append: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  get: kEnumerableProperty,\n  has: kEnumerableProperty,\n  set: kEnumerableProperty,\n  getSetCookie: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'Headers',\n    configurable: true\n  },\n  [util.inspect.custom]: {\n    enumerable: false\n  }\n})\n\nwebidl.converters.HeadersInit = function (V, prefix, argument) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT) {\n    const iterator = Reflect.get(V, Symbol.iterator)\n\n    // A work-around to ensure we send the properly-cased Headers when V is a Headers object.\n    // Read https://github.com/nodejs/undici/pull/3159#issuecomment-2075537226 before touching, please.\n    if (!util.types.isProxy(V) && iterator === Headers.prototype.entries) { // Headers object\n      try {\n        return getHeadersList(V).entriesList\n      } catch {\n        // fall-through\n      }\n    }\n\n    if (typeof iterator === 'function') {\n      return webidl.converters['sequence<sequence<ByteString>>'](V, prefix, argument, iterator.bind(V))\n    }\n\n    return webidl.converters['record<ByteString, ByteString>'](V, prefix, argument)\n  }\n\n  throw webidl.errors.conversionFailed({\n    prefix: 'Headers constructor',\n    argument: 'Argument 1',\n    types: ['sequence<sequence<ByteString>>', 'record<ByteString, ByteString>']\n  })\n}\n\nmodule.exports = {\n  fill,\n  // for test.\n  compareHeaderName,\n  Headers,\n  HeadersList,\n  getHeadersGuard,\n  setHeadersGuard,\n  setHeadersList,\n  getHeadersList\n}\n", "'use strict'\n\nconst { Headers, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require('./headers')\nconst { extractBody, cloneBody, mixinBody, streamRegistry, bodyUnusable } = require('./body')\nconst util = require('../../core/util')\nconst nodeUtil = require('node:util')\nconst { kEnumerableProperty } = util\nconst {\n  isValidReasonPhrase,\n  isCancelled,\n  isAborted,\n  isErrorLike,\n  environmentSettingsObject: relevantRealm\n} = require('./util')\nconst {\n  redirectStatusSet,\n  nullBodyStatus\n} = require('./constants')\nconst { webidl } = require('../webidl')\nconst { URLSerializer } = require('./data-url')\nconst { kConstruct } = require('../../core/symbols')\nconst assert = require('node:assert')\nconst { isomorphicEncode, serializeJavascriptValueToJSONString } = require('../infra')\n\nconst textEncoder = new TextEncoder('utf-8')\n\n// https://fetch.spec.whatwg.org/#response-class\nclass Response {\n  /** @type {Headers} */\n  #headers\n\n  #state\n\n  // Creates network error Response.\n  static error () {\n    // The static error() method steps are to return the result of creating a\n    // Response object, given a new network error, \"immutable\", and this\u2019s\n    // relevant Realm.\n    const responseObject = fromInnerResponse(makeNetworkError(), 'immutable')\n\n    return responseObject\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-response-json\n  static json (data, init = undefined) {\n    webidl.argumentLengthCheck(arguments, 1, 'Response.json')\n\n    if (init !== null) {\n      init = webidl.converters.ResponseInit(init)\n    }\n\n    // 1. Let bytes the result of running serialize a JavaScript value to JSON bytes on data.\n    const bytes = textEncoder.encode(\n      serializeJavascriptValueToJSONString(data)\n    )\n\n    // 2. Let body be the result of extracting bytes.\n    const body = extractBody(bytes)\n\n    // 3. Let responseObject be the result of creating a Response object, given a new response,\n    //    \"response\", and this\u2019s relevant Realm.\n    const responseObject = fromInnerResponse(makeResponse({}), 'response')\n\n    // 4. Perform initialize a response given responseObject, init, and (body, \"application/json\").\n    initializeResponse(responseObject, init, { body: body[0], type: 'application/json' })\n\n    // 5. Return responseObject.\n    return responseObject\n  }\n\n  // Creates a redirect Response that redirects to url with status status.\n  static redirect (url, status = 302) {\n    webidl.argumentLengthCheck(arguments, 1, 'Response.redirect')\n\n    url = webidl.converters.USVString(url)\n    status = webidl.converters['unsigned short'](status)\n\n    // 1. Let parsedURL be the result of parsing url with current settings\n    // object\u2019s API base URL.\n    // 2. If parsedURL is failure, then throw a TypeError.\n    // TODO: base-URL?\n    let parsedURL\n    try {\n      parsedURL = new URL(url, relevantRealm.settingsObject.baseUrl)\n    } catch (err) {\n      throw new TypeError(`Failed to parse URL from ${url}`, { cause: err })\n    }\n\n    // 3. If status is not a redirect status, then throw a RangeError.\n    if (!redirectStatusSet.has(status)) {\n      throw new RangeError(`Invalid status code ${status}`)\n    }\n\n    // 4. Let responseObject be the result of creating a Response object,\n    // given a new response, \"immutable\", and this\u2019s relevant Realm.\n    const responseObject = fromInnerResponse(makeResponse({}), 'immutable')\n\n    // 5. Set responseObject\u2019s response\u2019s status to status.\n    responseObject.#state.status = status\n\n    // 6. Let value be parsedURL, serialized and isomorphic encoded.\n    const value = isomorphicEncode(URLSerializer(parsedURL))\n\n    // 7. Append `Location`/value to responseObject\u2019s response\u2019s header list.\n    responseObject.#state.headersList.append('location', value, true)\n\n    // 8. Return responseObject.\n    return responseObject\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-response\n  constructor (body = null, init = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (body === kConstruct) {\n      return\n    }\n\n    if (body !== null) {\n      body = webidl.converters.BodyInit(body, 'Response', 'body')\n    }\n\n    init = webidl.converters.ResponseInit(init)\n\n    // 1. Set this\u2019s response to a new response.\n    this.#state = makeResponse({})\n\n    // 2. Set this\u2019s headers to a new Headers object with this\u2019s relevant\n    // Realm, whose header list is this\u2019s response\u2019s header list and guard\n    // is \"response\".\n    this.#headers = new Headers(kConstruct)\n    setHeadersGuard(this.#headers, 'response')\n    setHeadersList(this.#headers, this.#state.headersList)\n\n    // 3. Let bodyWithType be null.\n    let bodyWithType = null\n\n    // 4. If body is non-null, then set bodyWithType to the result of extracting body.\n    if (body != null) {\n      const [extractedBody, type] = extractBody(body)\n      bodyWithType = { body: extractedBody, type }\n    }\n\n    // 5. Perform initialize a response given this, init, and bodyWithType.\n    initializeResponse(this, init, bodyWithType)\n  }\n\n  // Returns response\u2019s type, e.g., \"cors\".\n  get type () {\n    webidl.brandCheck(this, Response)\n\n    // The type getter steps are to return this\u2019s response\u2019s type.\n    return this.#state.type\n  }\n\n  // Returns response\u2019s URL, if it has one; otherwise the empty string.\n  get url () {\n    webidl.brandCheck(this, Response)\n\n    const urlList = this.#state.urlList\n\n    // The url getter steps are to return the empty string if this\u2019s\n    // response\u2019s URL is null; otherwise this\u2019s response\u2019s URL,\n    // serialized with exclude fragment set to true.\n    const url = urlList[urlList.length - 1] ?? null\n\n    if (url === null) {\n      return ''\n    }\n\n    return URLSerializer(url, true)\n  }\n\n  // Returns whether response was obtained through a redirect.\n  get redirected () {\n    webidl.brandCheck(this, Response)\n\n    // The redirected getter steps are to return true if this\u2019s response\u2019s URL\n    // list has more than one item; otherwise false.\n    return this.#state.urlList.length > 1\n  }\n\n  // Returns response\u2019s status.\n  get status () {\n    webidl.brandCheck(this, Response)\n\n    // The status getter steps are to return this\u2019s response\u2019s status.\n    return this.#state.status\n  }\n\n  // Returns whether response\u2019s status is an ok status.\n  get ok () {\n    webidl.brandCheck(this, Response)\n\n    // The ok getter steps are to return true if this\u2019s response\u2019s status is an\n    // ok status; otherwise false.\n    return this.#state.status >= 200 && this.#state.status <= 299\n  }\n\n  // Returns response\u2019s status message.\n  get statusText () {\n    webidl.brandCheck(this, Response)\n\n    // The statusText getter steps are to return this\u2019s response\u2019s status\n    // message.\n    return this.#state.statusText\n  }\n\n  // Returns response\u2019s headers as Headers.\n  get headers () {\n    webidl.brandCheck(this, Response)\n\n    // The headers getter steps are to return this\u2019s headers.\n    return this.#headers\n  }\n\n  get body () {\n    webidl.brandCheck(this, Response)\n\n    return this.#state.body ? this.#state.body.stream : null\n  }\n\n  get bodyUsed () {\n    webidl.brandCheck(this, Response)\n\n    return !!this.#state.body && util.isDisturbed(this.#state.body.stream)\n  }\n\n  // Returns a clone of response.\n  clone () {\n    webidl.brandCheck(this, Response)\n\n    // 1. If this is unusable, then throw a TypeError.\n    if (bodyUnusable(this.#state)) {\n      throw webidl.errors.exception({\n        header: 'Response.clone',\n        message: 'Body has already been consumed.'\n      })\n    }\n\n    // 2. Let clonedResponse be the result of cloning this\u2019s response.\n    const clonedResponse = cloneResponse(this.#state)\n\n    // Note: To re-register because of a new stream.\n    // Don't set finalizers other than for fetch responses.\n    if (this.#state.urlList.length !== 0 && this.#state.body?.stream) {\n      streamRegistry.register(this, new WeakRef(this.#state.body.stream))\n    }\n\n    // 3. Return the result of creating a Response object, given\n    // clonedResponse, this\u2019s headers\u2019s guard, and this\u2019s relevant Realm.\n    return fromInnerResponse(clonedResponse, getHeadersGuard(this.#headers))\n  }\n\n  [nodeUtil.inspect.custom] (depth, options) {\n    if (options.depth === null) {\n      options.depth = 2\n    }\n\n    options.colors ??= true\n\n    const properties = {\n      status: this.status,\n      statusText: this.statusText,\n      headers: this.headers,\n      body: this.body,\n      bodyUsed: this.bodyUsed,\n      ok: this.ok,\n      redirected: this.redirected,\n      type: this.type,\n      url: this.url\n    }\n\n    return `Response ${nodeUtil.formatWithOptions(options, properties)}`\n  }\n\n  /**\n   * @param {Response} response\n   */\n  static getResponseHeaders (response) {\n    return response.#headers\n  }\n\n  /**\n   * @param {Response} response\n   * @param {Headers} newHeaders\n   */\n  static setResponseHeaders (response, newHeaders) {\n    response.#headers = newHeaders\n  }\n\n  /**\n   * @param {Response} response\n   */\n  static getResponseState (response) {\n    return response.#state\n  }\n\n  /**\n   * @param {Response} response\n   * @param {any} newState\n   */\n  static setResponseState (response, newState) {\n    response.#state = newState\n  }\n}\n\nconst { getResponseHeaders, setResponseHeaders, getResponseState, setResponseState } = Response\nReflect.deleteProperty(Response, 'getResponseHeaders')\nReflect.deleteProperty(Response, 'setResponseHeaders')\nReflect.deleteProperty(Response, 'getResponseState')\nReflect.deleteProperty(Response, 'setResponseState')\n\nmixinBody(Response, getResponseState)\n\nObject.defineProperties(Response.prototype, {\n  type: kEnumerableProperty,\n  url: kEnumerableProperty,\n  status: kEnumerableProperty,\n  ok: kEnumerableProperty,\n  redirected: kEnumerableProperty,\n  statusText: kEnumerableProperty,\n  headers: kEnumerableProperty,\n  clone: kEnumerableProperty,\n  body: kEnumerableProperty,\n  bodyUsed: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'Response',\n    configurable: true\n  }\n})\n\nObject.defineProperties(Response, {\n  json: kEnumerableProperty,\n  redirect: kEnumerableProperty,\n  error: kEnumerableProperty\n})\n\n// https://fetch.spec.whatwg.org/#concept-response-clone\nfunction cloneResponse (response) {\n  // To clone a response response, run these steps:\n\n  // 1. If response is a filtered response, then return a new identical\n  // filtered response whose internal response is a clone of response\u2019s\n  // internal response.\n  if (response.internalResponse) {\n    return filterResponse(\n      cloneResponse(response.internalResponse),\n      response.type\n    )\n  }\n\n  // 2. Let newResponse be a copy of response, except for its body.\n  const newResponse = makeResponse({ ...response, body: null })\n\n  // 3. If response\u2019s body is non-null, then set newResponse\u2019s body to the\n  // result of cloning response\u2019s body.\n  if (response.body != null) {\n    newResponse.body = cloneBody(response.body)\n  }\n\n  // 4. Return newResponse.\n  return newResponse\n}\n\nfunction makeResponse (init) {\n  return {\n    aborted: false,\n    rangeRequested: false,\n    timingAllowPassed: false,\n    requestIncludesCredentials: false,\n    type: 'default',\n    status: 200,\n    timingInfo: null,\n    cacheState: '',\n    statusText: '',\n    ...init,\n    headersList: init?.headersList\n      ? new HeadersList(init?.headersList)\n      : new HeadersList(),\n    urlList: init?.urlList ? [...init.urlList] : []\n  }\n}\n\nfunction makeNetworkError (reason) {\n  const isError = isErrorLike(reason)\n  return makeResponse({\n    type: 'error',\n    status: 0,\n    error: isError\n      ? reason\n      : new Error(reason ? String(reason) : reason),\n    aborted: reason && reason.name === 'AbortError'\n  })\n}\n\n// @see https://fetch.spec.whatwg.org/#concept-network-error\nfunction isNetworkError (response) {\n  return (\n    // A network error is a response whose type is \"error\",\n    response.type === 'error' &&\n    // status is 0\n    response.status === 0\n  )\n}\n\nfunction makeFilteredResponse (response, state) {\n  state = {\n    internalResponse: response,\n    ...state\n  }\n\n  return new Proxy(response, {\n    get (target, p) {\n      return p in state ? state[p] : target[p]\n    },\n    set (target, p, value) {\n      assert(!(p in state))\n      target[p] = value\n      return true\n    }\n  })\n}\n\n// https://fetch.spec.whatwg.org/#concept-filtered-response\nfunction filterResponse (response, type) {\n  // Set response to the following filtered response with response as its\n  // internal response, depending on request\u2019s response tainting:\n  if (type === 'basic') {\n    // A basic filtered response is a filtered response whose type is \"basic\"\n    // and header list excludes any headers in internal response\u2019s header list\n    // whose name is a forbidden response-header name.\n\n    // Note: undici does not implement forbidden response-header names\n    return makeFilteredResponse(response, {\n      type: 'basic',\n      headersList: response.headersList\n    })\n  } else if (type === 'cors') {\n    // A CORS filtered response is a filtered response whose type is \"cors\"\n    // and header list excludes any headers in internal response\u2019s header\n    // list whose name is not a CORS-safelisted response-header name, given\n    // internal response\u2019s CORS-exposed header-name list.\n\n    // Note: undici does not implement CORS-safelisted response-header names\n    return makeFilteredResponse(response, {\n      type: 'cors',\n      headersList: response.headersList\n    })\n  } else if (type === 'opaque') {\n    // An opaque filtered response is a filtered response whose type is\n    // \"opaque\", URL list is the empty list, status is 0, status message\n    // is the empty byte sequence, header list is empty, and body is null.\n\n    return makeFilteredResponse(response, {\n      type: 'opaque',\n      urlList: [],\n      status: 0,\n      statusText: '',\n      body: null\n    })\n  } else if (type === 'opaqueredirect') {\n    // An opaque-redirect filtered response is a filtered response whose type\n    // is \"opaqueredirect\", status is 0, status message is the empty byte\n    // sequence, header list is empty, and body is null.\n\n    return makeFilteredResponse(response, {\n      type: 'opaqueredirect',\n      status: 0,\n      statusText: '',\n      headersList: [],\n      body: null\n    })\n  } else {\n    assert(false)\n  }\n}\n\n// https://fetch.spec.whatwg.org/#appropriate-network-error\nfunction makeAppropriateNetworkError (fetchParams, err = null) {\n  // 1. Assert: fetchParams is canceled.\n  assert(isCancelled(fetchParams))\n\n  // 2. Return an aborted network error if fetchParams is aborted;\n  // otherwise return a network error.\n  return isAborted(fetchParams)\n    ? makeNetworkError(Object.assign(new DOMException('The operation was aborted.', 'AbortError'), { cause: err }))\n    : makeNetworkError(Object.assign(new DOMException('Request was cancelled.'), { cause: err }))\n}\n\n// https://whatpr.org/fetch/1392.html#initialize-a-response\nfunction initializeResponse (response, init, body) {\n  // 1. If init[\"status\"] is not in the range 200 to 599, inclusive, then\n  //    throw a RangeError.\n  if (init.status !== null && (init.status < 200 || init.status > 599)) {\n    throw new RangeError('init[\"status\"] must be in the range of 200 to 599, inclusive.')\n  }\n\n  // 2. If init[\"statusText\"] does not match the reason-phrase token production,\n  //    then throw a TypeError.\n  if ('statusText' in init && init.statusText != null) {\n    // See, https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2:\n    //   reason-phrase  = *( HTAB / SP / VCHAR / obs-text )\n    if (!isValidReasonPhrase(String(init.statusText))) {\n      throw new TypeError('Invalid statusText')\n    }\n  }\n\n  // 3. Set response\u2019s response\u2019s status to init[\"status\"].\n  if ('status' in init && init.status != null) {\n    getResponseState(response).status = init.status\n  }\n\n  // 4. Set response\u2019s response\u2019s status message to init[\"statusText\"].\n  if ('statusText' in init && init.statusText != null) {\n    getResponseState(response).statusText = init.statusText\n  }\n\n  // 5. If init[\"headers\"] exists, then fill response\u2019s headers with init[\"headers\"].\n  if ('headers' in init && init.headers != null) {\n    fill(getResponseHeaders(response), init.headers)\n  }\n\n  // 6. If body was given, then:\n  if (body) {\n    // 1. If response's status is a null body status, then throw a TypeError.\n    if (nullBodyStatus.includes(response.status)) {\n      throw webidl.errors.exception({\n        header: 'Response constructor',\n        message: `Invalid response status code ${response.status}`\n      })\n    }\n\n    // 2. Set response's body to body's body.\n    getResponseState(response).body = body.body\n\n    // 3. If body's type is non-null and response's header list does not contain\n    //    `Content-Type`, then append (`Content-Type`, body's type) to response's header list.\n    if (body.type != null && !getResponseState(response).headersList.contains('content-type', true)) {\n      getResponseState(response).headersList.append('content-type', body.type, true)\n    }\n  }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#response-create\n * @param {any} innerResponse\n * @param {'request' | 'immutable' | 'request-no-cors' | 'response' | 'none'} guard\n * @returns {Response}\n */\nfunction fromInnerResponse (innerResponse, guard) {\n  const response = new Response(kConstruct)\n  setResponseState(response, innerResponse)\n  const headers = new Headers(kConstruct)\n  setResponseHeaders(response, headers)\n  setHeadersList(headers, innerResponse.headersList)\n  setHeadersGuard(headers, guard)\n\n  // Note: If innerResponse's urlList contains a URL, it is a fetch response.\n  if (innerResponse.urlList.length !== 0 && innerResponse.body?.stream) {\n    // If the target (response) is reclaimed, the cleanup callback may be called at some point with\n    // the held value provided for it (innerResponse.body.stream). The held value can be any value:\n    // a primitive or an object, even undefined. If the held value is an object, the registry keeps\n    // a strong reference to it (so it can pass it to the cleanup callback later). Reworded from\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n    streamRegistry.register(response, new WeakRef(innerResponse.body.stream))\n  }\n\n  return response\n}\n\n// https://fetch.spec.whatwg.org/#typedefdef-xmlhttprequestbodyinit\nwebidl.converters.XMLHttpRequestBodyInit = function (V, prefix, name) {\n  if (typeof V === 'string') {\n    return webidl.converters.USVString(V, prefix, name)\n  }\n\n  if (webidl.is.Blob(V)) {\n    return V\n  }\n\n  if (webidl.is.BufferSource(V)) {\n    return V\n  }\n\n  if (webidl.is.FormData(V)) {\n    return V\n  }\n\n  if (webidl.is.URLSearchParams(V)) {\n    return V\n  }\n\n  return webidl.converters.DOMString(V, prefix, name)\n}\n\n// https://fetch.spec.whatwg.org/#bodyinit\nwebidl.converters.BodyInit = function (V, prefix, argument) {\n  if (webidl.is.ReadableStream(V)) {\n    return V\n  }\n\n  // Note: the spec doesn't include async iterables,\n  // this is an undici extension.\n  if (V?.[Symbol.asyncIterator]) {\n    return V\n  }\n\n  return webidl.converters.XMLHttpRequestBodyInit(V, prefix, argument)\n}\n\nwebidl.converters.ResponseInit = webidl.dictionaryConverter([\n  {\n    key: 'status',\n    converter: webidl.converters['unsigned short'],\n    defaultValue: () => 200\n  },\n  {\n    key: 'statusText',\n    converter: webidl.converters.ByteString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'headers',\n    converter: webidl.converters.HeadersInit\n  }\n])\n\nwebidl.is.Response = webidl.util.MakeTypeAssertion(Response)\n\nmodule.exports = {\n  isNetworkError,\n  makeNetworkError,\n  makeResponse,\n  makeAppropriateNetworkError,\n  filterResponse,\n  Response,\n  cloneResponse,\n  fromInnerResponse,\n  getResponseState\n}\n", "/* globals AbortController */\n\n'use strict'\n\nconst { extractBody, mixinBody, cloneBody, bodyUnusable } = require('./body')\nconst { Headers, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require('./headers')\nconst util = require('../../core/util')\nconst nodeUtil = require('node:util')\nconst {\n  isValidHTTPToken,\n  sameOrigin,\n  environmentSettingsObject\n} = require('./util')\nconst {\n  forbiddenMethodsSet,\n  corsSafeListedMethodsSet,\n  referrerPolicy,\n  requestRedirect,\n  requestMode,\n  requestCredentials,\n  requestCache,\n  requestDuplex\n} = require('./constants')\nconst { kEnumerableProperty, normalizedMethodRecordsBase, normalizedMethodRecords } = util\nconst { webidl } = require('../webidl')\nconst { URLSerializer } = require('./data-url')\nconst { kConstruct } = require('../../core/symbols')\nconst assert = require('node:assert')\nconst { getMaxListeners, setMaxListeners, defaultMaxListeners } = require('node:events')\n\nconst kAbortController = Symbol('abortController')\n\nconst requestFinalizer = new FinalizationRegistry(({ signal, abort }) => {\n  signal.removeEventListener('abort', abort)\n})\n\nconst dependentControllerMap = new WeakMap()\n\nlet abortSignalHasEventHandlerLeakWarning\n\ntry {\n  abortSignalHasEventHandlerLeakWarning = getMaxListeners(new AbortController().signal) > 0\n} catch {\n  abortSignalHasEventHandlerLeakWarning = false\n}\n\nfunction buildAbort (acRef) {\n  return abort\n\n  function abort () {\n    const ac = acRef.deref()\n    if (ac !== undefined) {\n      // Currently, there is a problem with FinalizationRegistry.\n      // https://github.com/nodejs/node/issues/49344\n      // https://github.com/nodejs/node/issues/47748\n      // In the case of abort, the first step is to unregister from it.\n      // If the controller can refer to it, it is still registered.\n      // It will be removed in the future.\n      requestFinalizer.unregister(abort)\n\n      // Unsubscribe a listener.\n      // FinalizationRegistry will no longer be called, so this must be done.\n      this.removeEventListener('abort', abort)\n\n      ac.abort(this.reason)\n\n      const controllerList = dependentControllerMap.get(ac.signal)\n\n      if (controllerList !== undefined) {\n        if (controllerList.size !== 0) {\n          for (const ref of controllerList) {\n            const ctrl = ref.deref()\n            if (ctrl !== undefined) {\n              ctrl.abort(this.reason)\n            }\n          }\n          controllerList.clear()\n        }\n        dependentControllerMap.delete(ac.signal)\n      }\n    }\n  }\n}\n\nlet patchMethodWarning = false\n\n// https://fetch.spec.whatwg.org/#request-class\nclass Request {\n  /** @type {AbortSignal} */\n  #signal\n\n  /** @type {import('../../dispatcher/dispatcher')} */\n  #dispatcher\n\n  /** @type {Headers} */\n  #headers\n\n  #state\n\n  // https://fetch.spec.whatwg.org/#dom-request\n  constructor (input, init = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (input === kConstruct) {\n      return\n    }\n\n    const prefix = 'Request constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    input = webidl.converters.RequestInfo(input)\n    init = webidl.converters.RequestInit(init)\n\n    // 1. Let request be null.\n    let request = null\n\n    // 2. Let fallbackMode be null.\n    let fallbackMode = null\n\n    // 3. Let baseURL be this\u2019s relevant settings object\u2019s API base URL.\n    const baseUrl = environmentSettingsObject.settingsObject.baseUrl\n\n    // 4. Let signal be null.\n    let signal = null\n\n    // 5. If input is a string, then:\n    if (typeof input === 'string') {\n      this.#dispatcher = init.dispatcher\n\n      // 1. Let parsedURL be the result of parsing input with baseURL.\n      // 2. If parsedURL is failure, then throw a TypeError.\n      let parsedURL\n      try {\n        parsedURL = new URL(input, baseUrl)\n      } catch (err) {\n        throw new TypeError('Failed to parse URL from ' + input, { cause: err })\n      }\n\n      // 3. If parsedURL includes credentials, then throw a TypeError.\n      if (parsedURL.username || parsedURL.password) {\n        throw new TypeError(\n          'Request cannot be constructed from a URL that includes credentials: ' +\n            input\n        )\n      }\n\n      // 4. Set request to a new request whose URL is parsedURL.\n      request = makeRequest({ urlList: [parsedURL] })\n\n      // 5. Set fallbackMode to \"cors\".\n      fallbackMode = 'cors'\n    } else {\n      // 6. Otherwise:\n\n      // 7. Assert: input is a Request object.\n      assert(webidl.is.Request(input))\n\n      // 8. Set request to input\u2019s request.\n      request = input.#state\n\n      // 9. Set signal to input\u2019s signal.\n      signal = input.#signal\n\n      this.#dispatcher = init.dispatcher || input.#dispatcher\n    }\n\n    // 7. Let origin be this\u2019s relevant settings object\u2019s origin.\n    const origin = environmentSettingsObject.settingsObject.origin\n\n    // 8. Let window be \"client\".\n    let window = 'client'\n\n    // 9. If request\u2019s window is an environment settings object and its origin\n    // is same origin with origin, then set window to request\u2019s window.\n    if (\n      request.window?.constructor?.name === 'EnvironmentSettingsObject' &&\n      sameOrigin(request.window, origin)\n    ) {\n      window = request.window\n    }\n\n    // 10. If init[\"window\"] exists and is non-null, then throw a TypeError.\n    if (init.window != null) {\n      throw new TypeError(`'window' option '${window}' must be null`)\n    }\n\n    // 11. If init[\"window\"] exists, then set window to \"no-window\".\n    if ('window' in init) {\n      window = 'no-window'\n    }\n\n    // 12. Set request to a new request with the following properties:\n    request = makeRequest({\n      // URL request\u2019s URL.\n      // undici implementation note: this is set as the first item in request's urlList in makeRequest\n      // method request\u2019s method.\n      method: request.method,\n      // header list A copy of request\u2019s header list.\n      // undici implementation note: headersList is cloned in makeRequest\n      headersList: request.headersList,\n      // unsafe-request flag Set.\n      unsafeRequest: request.unsafeRequest,\n      // client This\u2019s relevant settings object.\n      client: environmentSettingsObject.settingsObject,\n      // window window.\n      window,\n      // priority request\u2019s priority.\n      priority: request.priority,\n      // origin request\u2019s origin. The propagation of the origin is only significant for navigation requests\n      // being handled by a service worker. In this scenario a request can have an origin that is different\n      // from the current client.\n      origin: request.origin,\n      // referrer request\u2019s referrer.\n      referrer: request.referrer,\n      // referrer policy request\u2019s referrer policy.\n      referrerPolicy: request.referrerPolicy,\n      // mode request\u2019s mode.\n      mode: request.mode,\n      // credentials mode request\u2019s credentials mode.\n      credentials: request.credentials,\n      // cache mode request\u2019s cache mode.\n      cache: request.cache,\n      // redirect mode request\u2019s redirect mode.\n      redirect: request.redirect,\n      // integrity metadata request\u2019s integrity metadata.\n      integrity: request.integrity,\n      // keepalive request\u2019s keepalive.\n      keepalive: request.keepalive,\n      // reload-navigation flag request\u2019s reload-navigation flag.\n      reloadNavigation: request.reloadNavigation,\n      // history-navigation flag request\u2019s history-navigation flag.\n      historyNavigation: request.historyNavigation,\n      // URL list A clone of request\u2019s URL list.\n      urlList: [...request.urlList]\n    })\n\n    const initHasKey = Object.keys(init).length !== 0\n\n    // 13. If init is not empty, then:\n    if (initHasKey) {\n      // 1. If request\u2019s mode is \"navigate\", then set it to \"same-origin\".\n      if (request.mode === 'navigate') {\n        request.mode = 'same-origin'\n      }\n\n      // 2. Unset request\u2019s reload-navigation flag.\n      request.reloadNavigation = false\n\n      // 3. Unset request\u2019s history-navigation flag.\n      request.historyNavigation = false\n\n      // 4. Set request\u2019s origin to \"client\".\n      request.origin = 'client'\n\n      // 5. Set request\u2019s referrer to \"client\"\n      request.referrer = 'client'\n\n      // 6. Set request\u2019s referrer policy to the empty string.\n      request.referrerPolicy = ''\n\n      // 7. Set request\u2019s URL to request\u2019s current URL.\n      request.url = request.urlList[request.urlList.length - 1]\n\n      // 8. Set request\u2019s URL list to \u00AB request\u2019s URL \u00BB.\n      request.urlList = [request.url]\n    }\n\n    // 14. If init[\"referrer\"] exists, then:\n    if (init.referrer !== undefined) {\n      // 1. Let referrer be init[\"referrer\"].\n      const referrer = init.referrer\n\n      // 2. If referrer is the empty string, then set request\u2019s referrer to \"no-referrer\".\n      if (referrer === '') {\n        request.referrer = 'no-referrer'\n      } else {\n        // 1. Let parsedReferrer be the result of parsing referrer with\n        // baseURL.\n        // 2. If parsedReferrer is failure, then throw a TypeError.\n        let parsedReferrer\n        try {\n          parsedReferrer = new URL(referrer, baseUrl)\n        } catch (err) {\n          throw new TypeError(`Referrer \"${referrer}\" is not a valid URL.`, { cause: err })\n        }\n\n        // 3. If one of the following is true\n        // - parsedReferrer\u2019s scheme is \"about\" and path is the string \"client\"\n        // - parsedReferrer\u2019s origin is not same origin with origin\n        // then set request\u2019s referrer to \"client\".\n        if (\n          (parsedReferrer.protocol === 'about:' && parsedReferrer.hostname === 'client') ||\n          (origin && !sameOrigin(parsedReferrer, environmentSettingsObject.settingsObject.baseUrl))\n        ) {\n          request.referrer = 'client'\n        } else {\n          // 4. Otherwise, set request\u2019s referrer to parsedReferrer.\n          request.referrer = parsedReferrer\n        }\n      }\n    }\n\n    // 15. If init[\"referrerPolicy\"] exists, then set request\u2019s referrer policy\n    // to it.\n    if (init.referrerPolicy !== undefined) {\n      request.referrerPolicy = init.referrerPolicy\n    }\n\n    // 16. Let mode be init[\"mode\"] if it exists, and fallbackMode otherwise.\n    let mode\n    if (init.mode !== undefined) {\n      mode = init.mode\n    } else {\n      mode = fallbackMode\n    }\n\n    // 17. If mode is \"navigate\", then throw a TypeError.\n    if (mode === 'navigate') {\n      throw webidl.errors.exception({\n        header: 'Request constructor',\n        message: 'invalid request mode navigate.'\n      })\n    }\n\n    // 18. If mode is non-null, set request\u2019s mode to mode.\n    if (mode != null) {\n      request.mode = mode\n    }\n\n    // 19. If init[\"credentials\"] exists, then set request\u2019s credentials mode\n    // to it.\n    if (init.credentials !== undefined) {\n      request.credentials = init.credentials\n    }\n\n    // 18. If init[\"cache\"] exists, then set request\u2019s cache mode to it.\n    if (init.cache !== undefined) {\n      request.cache = init.cache\n    }\n\n    // 21. If request\u2019s cache mode is \"only-if-cached\" and request\u2019s mode is\n    // not \"same-origin\", then throw a TypeError.\n    if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') {\n      throw new TypeError(\n        \"'only-if-cached' can be set only with 'same-origin' mode\"\n      )\n    }\n\n    // 22. If init[\"redirect\"] exists, then set request\u2019s redirect mode to it.\n    if (init.redirect !== undefined) {\n      request.redirect = init.redirect\n    }\n\n    // 23. If init[\"integrity\"] exists, then set request\u2019s integrity metadata to it.\n    if (init.integrity != null) {\n      request.integrity = String(init.integrity)\n    }\n\n    // 24. If init[\"keepalive\"] exists, then set request\u2019s keepalive to it.\n    if (init.keepalive !== undefined) {\n      request.keepalive = Boolean(init.keepalive)\n    }\n\n    // 25. If init[\"method\"] exists, then:\n    if (init.method !== undefined) {\n      // 1. Let method be init[\"method\"].\n      let method = init.method\n\n      const mayBeNormalized = normalizedMethodRecords[method]\n\n      if (mayBeNormalized !== undefined) {\n        // Note: Bypass validation DELETE, GET, HEAD, OPTIONS, POST, PUT, PATCH and these lowercase ones\n        request.method = mayBeNormalized\n      } else {\n        // 2. If method is not a method or method is a forbidden method, then\n        // throw a TypeError.\n        if (!isValidHTTPToken(method)) {\n          throw new TypeError(`'${method}' is not a valid HTTP method.`)\n        }\n\n        const upperCase = method.toUpperCase()\n\n        if (forbiddenMethodsSet.has(upperCase)) {\n          throw new TypeError(`'${method}' HTTP method is unsupported.`)\n        }\n\n        // 3. Normalize method.\n        // https://fetch.spec.whatwg.org/#concept-method-normalize\n        // Note: must be in uppercase\n        method = normalizedMethodRecordsBase[upperCase] ?? method\n\n        // 4. Set request\u2019s method to method.\n        request.method = method\n      }\n\n      if (!patchMethodWarning && request.method === 'patch') {\n        process.emitWarning('Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.', {\n          code: 'UNDICI-FETCH-patch'\n        })\n\n        patchMethodWarning = true\n      }\n    }\n\n    // 26. If init[\"signal\"] exists, then set signal to it.\n    if (init.signal !== undefined) {\n      signal = init.signal\n    }\n\n    // 27. Set this\u2019s request to request.\n    this.#state = request\n\n    // 28. Set this\u2019s signal to a new AbortSignal object with this\u2019s relevant\n    // Realm.\n    // TODO: could this be simplified with AbortSignal.any\n    // (https://dom.spec.whatwg.org/#dom-abortsignal-any)\n    const ac = new AbortController()\n    this.#signal = ac.signal\n\n    // 29. If signal is not null, then make this\u2019s signal follow signal.\n    if (signal != null) {\n      if (signal.aborted) {\n        ac.abort(signal.reason)\n      } else {\n        // Keep a strong ref to ac while request object\n        // is alive. This is needed to prevent AbortController\n        // from being prematurely garbage collected.\n        // See, https://github.com/nodejs/undici/issues/1926.\n        this[kAbortController] = ac\n\n        const acRef = new WeakRef(ac)\n        const abort = buildAbort(acRef)\n\n        // If the max amount of listeners is equal to the default, increase it\n        if (abortSignalHasEventHandlerLeakWarning && getMaxListeners(signal) === defaultMaxListeners) {\n          setMaxListeners(1500, signal)\n        }\n\n        util.addAbortListener(signal, abort)\n        // The third argument must be a registry key to be unregistered.\n        // Without it, you cannot unregister.\n        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n        // abort is used as the unregister key. (because it is unique)\n        requestFinalizer.register(ac, { signal, abort }, abort)\n      }\n    }\n\n    // 30. Set this\u2019s headers to a new Headers object with this\u2019s relevant\n    // Realm, whose header list is request\u2019s header list and guard is\n    // \"request\".\n    this.#headers = new Headers(kConstruct)\n    setHeadersList(this.#headers, request.headersList)\n    setHeadersGuard(this.#headers, 'request')\n\n    // 31. If this\u2019s request\u2019s mode is \"no-cors\", then:\n    if (mode === 'no-cors') {\n      // 1. If this\u2019s request\u2019s method is not a CORS-safelisted method,\n      // then throw a TypeError.\n      if (!corsSafeListedMethodsSet.has(request.method)) {\n        throw new TypeError(\n          `'${request.method} is unsupported in no-cors mode.`\n        )\n      }\n\n      // 2. Set this\u2019s headers\u2019s guard to \"request-no-cors\".\n      setHeadersGuard(this.#headers, 'request-no-cors')\n    }\n\n    // 32. If init is not empty, then:\n    if (initHasKey) {\n      /** @type {HeadersList} */\n      const headersList = getHeadersList(this.#headers)\n      // 1. Let headers be a copy of this\u2019s headers and its associated header\n      // list.\n      // 2. If init[\"headers\"] exists, then set headers to init[\"headers\"].\n      const headers = init.headers !== undefined ? init.headers : new HeadersList(headersList)\n\n      // 3. Empty this\u2019s headers\u2019s header list.\n      headersList.clear()\n\n      // 4. If headers is a Headers object, then for each header in its header\n      // list, append header\u2019s name/header\u2019s value to this\u2019s headers.\n      if (headers instanceof HeadersList) {\n        for (const { name, value } of headers.rawValues()) {\n          headersList.append(name, value, false)\n        }\n        // Note: Copy the `set-cookie` meta-data.\n        headersList.cookies = headers.cookies\n      } else {\n        // 5. Otherwise, fill this\u2019s headers with headers.\n        fillHeaders(this.#headers, headers)\n      }\n    }\n\n    // 33. Let inputBody be input\u2019s request\u2019s body if input is a Request\n    // object; otherwise null.\n    const inputBody = webidl.is.Request(input) ? input.#state.body : null\n\n    // 34. If either init[\"body\"] exists and is non-null or inputBody is\n    // non-null, and request\u2019s method is `GET` or `HEAD`, then throw a\n    // TypeError.\n    if (\n      (init.body != null || inputBody != null) &&\n      (request.method === 'GET' || request.method === 'HEAD')\n    ) {\n      throw new TypeError('Request with GET/HEAD method cannot have body.')\n    }\n\n    // 35. Let initBody be null.\n    let initBody = null\n\n    // 36. If init[\"body\"] exists and is non-null, then:\n    if (init.body != null) {\n      // 1. Let Content-Type be null.\n      // 2. Set initBody and Content-Type to the result of extracting\n      // init[\"body\"], with keepalive set to request\u2019s keepalive.\n      const [extractedBody, contentType] = extractBody(\n        init.body,\n        request.keepalive\n      )\n      initBody = extractedBody\n\n      // 3, If Content-Type is non-null and this\u2019s headers\u2019s header list does\n      // not contain `Content-Type`, then append `Content-Type`/Content-Type to\n      // this\u2019s headers.\n      if (contentType && !getHeadersList(this.#headers).contains('content-type', true)) {\n        this.#headers.append('content-type', contentType, true)\n      }\n    }\n\n    // 37. Let inputOrInitBody be initBody if it is non-null; otherwise\n    // inputBody.\n    const inputOrInitBody = initBody ?? inputBody\n\n    // 38. If inputOrInitBody is non-null and inputOrInitBody\u2019s source is\n    // null, then:\n    if (inputOrInitBody != null && inputOrInitBody.source == null) {\n      // 1. If initBody is non-null and init[\"duplex\"] does not exist,\n      //    then throw a TypeError.\n      if (initBody != null && init.duplex == null) {\n        throw new TypeError('RequestInit: duplex option is required when sending a body.')\n      }\n\n      // 2. If this\u2019s request\u2019s mode is neither \"same-origin\" nor \"cors\",\n      // then throw a TypeError.\n      if (request.mode !== 'same-origin' && request.mode !== 'cors') {\n        throw new TypeError(\n          'If request is made from ReadableStream, mode should be \"same-origin\" or \"cors\"'\n        )\n      }\n\n      // 3. Set this\u2019s request\u2019s use-CORS-preflight flag.\n      request.useCORSPreflightFlag = true\n    }\n\n    // 39. Let finalBody be inputOrInitBody.\n    let finalBody = inputOrInitBody\n\n    // 40. If initBody is null and inputBody is non-null, then:\n    if (initBody == null && inputBody != null) {\n      // 1. If input is unusable, then throw a TypeError.\n      if (bodyUnusable(input.#state)) {\n        throw new TypeError(\n          'Cannot construct a Request with a Request object that has already been used.'\n        )\n      }\n\n      // 2. Set finalBody to the result of creating a proxy for inputBody.\n      // https://streams.spec.whatwg.org/#readablestream-create-a-proxy\n      const identityTransform = new TransformStream()\n      inputBody.stream.pipeThrough(identityTransform)\n      finalBody = {\n        source: inputBody.source,\n        length: inputBody.length,\n        stream: identityTransform.readable\n      }\n    }\n\n    // 41. Set this\u2019s request\u2019s body to finalBody.\n    this.#state.body = finalBody\n  }\n\n  // Returns request\u2019s HTTP method, which is \"GET\" by default.\n  get method () {\n    webidl.brandCheck(this, Request)\n\n    // The method getter steps are to return this\u2019s request\u2019s method.\n    return this.#state.method\n  }\n\n  // Returns the URL of request as a string.\n  get url () {\n    webidl.brandCheck(this, Request)\n\n    // The url getter steps are to return this\u2019s request\u2019s URL, serialized.\n    return URLSerializer(this.#state.url)\n  }\n\n  // Returns a Headers object consisting of the headers associated with request.\n  // Note that headers added in the network layer by the user agent will not\n  // be accounted for in this object, e.g., the \"Host\" header.\n  get headers () {\n    webidl.brandCheck(this, Request)\n\n    // The headers getter steps are to return this\u2019s headers.\n    return this.#headers\n  }\n\n  // Returns the kind of resource requested by request, e.g., \"document\"\n  // or \"script\".\n  get destination () {\n    webidl.brandCheck(this, Request)\n\n    // The destination getter are to return this\u2019s request\u2019s destination.\n    return this.#state.destination\n  }\n\n  // Returns the referrer of request. Its value can be a same-origin URL if\n  // explicitly set in init, the empty string to indicate no referrer, and\n  // \"about:client\" when defaulting to the global\u2019s default. This is used\n  // during fetching to determine the value of the `Referer` header of the\n  // request being made.\n  get referrer () {\n    webidl.brandCheck(this, Request)\n\n    // 1. If this\u2019s request\u2019s referrer is \"no-referrer\", then return the\n    // empty string.\n    if (this.#state.referrer === 'no-referrer') {\n      return ''\n    }\n\n    // 2. If this\u2019s request\u2019s referrer is \"client\", then return\n    // \"about:client\".\n    if (this.#state.referrer === 'client') {\n      return 'about:client'\n    }\n\n    // Return this\u2019s request\u2019s referrer, serialized.\n    return this.#state.referrer.toString()\n  }\n\n  // Returns the referrer policy associated with request.\n  // This is used during fetching to compute the value of the request\u2019s\n  // referrer.\n  get referrerPolicy () {\n    webidl.brandCheck(this, Request)\n\n    // The referrerPolicy getter steps are to return this\u2019s request\u2019s referrer policy.\n    return this.#state.referrerPolicy\n  }\n\n  // Returns the mode associated with request, which is a string indicating\n  // whether the request will use CORS, or will be restricted to same-origin\n  // URLs.\n  get mode () {\n    webidl.brandCheck(this, Request)\n\n    // The mode getter steps are to return this\u2019s request\u2019s mode.\n    return this.#state.mode\n  }\n\n  // Returns the credentials mode associated with request,\n  // which is a string indicating whether credentials will be sent with the\n  // request always, never, or only when sent to a same-origin URL.\n  get credentials () {\n    webidl.brandCheck(this, Request)\n\n    // The credentials getter steps are to return this\u2019s request\u2019s credentials mode.\n    return this.#state.credentials\n  }\n\n  // Returns the cache mode associated with request,\n  // which is a string indicating how the request will\n  // interact with the browser\u2019s cache when fetching.\n  get cache () {\n    webidl.brandCheck(this, Request)\n\n    // The cache getter steps are to return this\u2019s request\u2019s cache mode.\n    return this.#state.cache\n  }\n\n  // Returns the redirect mode associated with request,\n  // which is a string indicating how redirects for the\n  // request will be handled during fetching. A request\n  // will follow redirects by default.\n  get redirect () {\n    webidl.brandCheck(this, Request)\n\n    // The redirect getter steps are to return this\u2019s request\u2019s redirect mode.\n    return this.#state.redirect\n  }\n\n  // Returns request\u2019s subresource integrity metadata, which is a\n  // cryptographic hash of the resource being fetched. Its value\n  // consists of multiple hashes separated by whitespace. [SRI]\n  get integrity () {\n    webidl.brandCheck(this, Request)\n\n    // The integrity getter steps are to return this\u2019s request\u2019s integrity\n    // metadata.\n    return this.#state.integrity\n  }\n\n  // Returns a boolean indicating whether or not request can outlive the\n  // global in which it was created.\n  get keepalive () {\n    webidl.brandCheck(this, Request)\n\n    // The keepalive getter steps are to return this\u2019s request\u2019s keepalive.\n    return this.#state.keepalive\n  }\n\n  // Returns a boolean indicating whether or not request is for a reload\n  // navigation.\n  get isReloadNavigation () {\n    webidl.brandCheck(this, Request)\n\n    // The isReloadNavigation getter steps are to return true if this\u2019s\n    // request\u2019s reload-navigation flag is set; otherwise false.\n    return this.#state.reloadNavigation\n  }\n\n  // Returns a boolean indicating whether or not request is for a history\n  // navigation (a.k.a. back-forward navigation).\n  get isHistoryNavigation () {\n    webidl.brandCheck(this, Request)\n\n    // The isHistoryNavigation getter steps are to return true if this\u2019s request\u2019s\n    // history-navigation flag is set; otherwise false.\n    return this.#state.historyNavigation\n  }\n\n  // Returns the signal associated with request, which is an AbortSignal\n  // object indicating whether or not request has been aborted, and its\n  // abort event handler.\n  get signal () {\n    webidl.brandCheck(this, Request)\n\n    // The signal getter steps are to return this\u2019s signal.\n    return this.#signal\n  }\n\n  get body () {\n    webidl.brandCheck(this, Request)\n\n    return this.#state.body ? this.#state.body.stream : null\n  }\n\n  get bodyUsed () {\n    webidl.brandCheck(this, Request)\n\n    return !!this.#state.body && util.isDisturbed(this.#state.body.stream)\n  }\n\n  get duplex () {\n    webidl.brandCheck(this, Request)\n\n    return 'half'\n  }\n\n  // Returns a clone of request.\n  clone () {\n    webidl.brandCheck(this, Request)\n\n    // 1. If this is unusable, then throw a TypeError.\n    if (bodyUnusable(this.#state)) {\n      throw new TypeError('unusable')\n    }\n\n    // 2. Let clonedRequest be the result of cloning this\u2019s request.\n    const clonedRequest = cloneRequest(this.#state)\n\n    // 3. Let clonedRequestObject be the result of creating a Request object,\n    // given clonedRequest, this\u2019s headers\u2019s guard, and this\u2019s relevant Realm.\n    // 4. Make clonedRequestObject\u2019s signal follow this\u2019s signal.\n    const ac = new AbortController()\n    if (this.signal.aborted) {\n      ac.abort(this.signal.reason)\n    } else {\n      let list = dependentControllerMap.get(this.signal)\n      if (list === undefined) {\n        list = new Set()\n        dependentControllerMap.set(this.signal, list)\n      }\n      const acRef = new WeakRef(ac)\n      list.add(acRef)\n      util.addAbortListener(\n        ac.signal,\n        buildAbort(acRef)\n      )\n    }\n\n    // 4. Return clonedRequestObject.\n    return fromInnerRequest(clonedRequest, this.#dispatcher, ac.signal, getHeadersGuard(this.#headers))\n  }\n\n  [nodeUtil.inspect.custom] (depth, options) {\n    if (options.depth === null) {\n      options.depth = 2\n    }\n\n    options.colors ??= true\n\n    const properties = {\n      method: this.method,\n      url: this.url,\n      headers: this.headers,\n      destination: this.destination,\n      referrer: this.referrer,\n      referrerPolicy: this.referrerPolicy,\n      mode: this.mode,\n      credentials: this.credentials,\n      cache: this.cache,\n      redirect: this.redirect,\n      integrity: this.integrity,\n      keepalive: this.keepalive,\n      isReloadNavigation: this.isReloadNavigation,\n      isHistoryNavigation: this.isHistoryNavigation,\n      signal: this.signal\n    }\n\n    return `Request ${nodeUtil.formatWithOptions(options, properties)}`\n  }\n\n  /**\n   * @param {Request} request\n   * @param {AbortSignal} newSignal\n   */\n  static setRequestSignal (request, newSignal) {\n    request.#signal = newSignal\n    return request\n  }\n\n  /**\n   * @param {Request} request\n   */\n  static getRequestDispatcher (request) {\n    return request.#dispatcher\n  }\n\n  /**\n   * @param {Request} request\n   * @param {import('../../dispatcher/dispatcher')} newDispatcher\n   */\n  static setRequestDispatcher (request, newDispatcher) {\n    request.#dispatcher = newDispatcher\n  }\n\n  /**\n   * @param {Request} request\n   * @param {Headers} newHeaders\n   */\n  static setRequestHeaders (request, newHeaders) {\n    request.#headers = newHeaders\n  }\n\n  /**\n   * @param {Request} request\n   */\n  static getRequestState (request) {\n    return request.#state\n  }\n\n  /**\n   * @param {Request} request\n   * @param {any} newState\n   */\n  static setRequestState (request, newState) {\n    request.#state = newState\n  }\n}\n\nconst { setRequestSignal, getRequestDispatcher, setRequestDispatcher, setRequestHeaders, getRequestState, setRequestState } = Request\nReflect.deleteProperty(Request, 'setRequestSignal')\nReflect.deleteProperty(Request, 'getRequestDispatcher')\nReflect.deleteProperty(Request, 'setRequestDispatcher')\nReflect.deleteProperty(Request, 'setRequestHeaders')\nReflect.deleteProperty(Request, 'getRequestState')\nReflect.deleteProperty(Request, 'setRequestState')\n\nmixinBody(Request, getRequestState)\n\n// https://fetch.spec.whatwg.org/#requests\nfunction makeRequest (init) {\n  return {\n    method: init.method ?? 'GET',\n    localURLsOnly: init.localURLsOnly ?? false,\n    unsafeRequest: init.unsafeRequest ?? false,\n    body: init.body ?? null,\n    client: init.client ?? null,\n    reservedClient: init.reservedClient ?? null,\n    replacesClientId: init.replacesClientId ?? '',\n    window: init.window ?? 'client',\n    keepalive: init.keepalive ?? false,\n    serviceWorkers: init.serviceWorkers ?? 'all',\n    initiator: init.initiator ?? '',\n    destination: init.destination ?? '',\n    priority: init.priority ?? null,\n    origin: init.origin ?? 'client',\n    policyContainer: init.policyContainer ?? 'client',\n    referrer: init.referrer ?? 'client',\n    referrerPolicy: init.referrerPolicy ?? '',\n    mode: init.mode ?? 'no-cors',\n    useCORSPreflightFlag: init.useCORSPreflightFlag ?? false,\n    credentials: init.credentials ?? 'same-origin',\n    useCredentials: init.useCredentials ?? false,\n    cache: init.cache ?? 'default',\n    redirect: init.redirect ?? 'follow',\n    integrity: init.integrity ?? '',\n    cryptoGraphicsNonceMetadata: init.cryptoGraphicsNonceMetadata ?? '',\n    parserMetadata: init.parserMetadata ?? '',\n    reloadNavigation: init.reloadNavigation ?? false,\n    historyNavigation: init.historyNavigation ?? false,\n    userActivation: init.userActivation ?? false,\n    taintedOrigin: init.taintedOrigin ?? false,\n    redirectCount: init.redirectCount ?? 0,\n    responseTainting: init.responseTainting ?? 'basic',\n    preventNoCacheCacheControlHeaderModification: init.preventNoCacheCacheControlHeaderModification ?? false,\n    done: init.done ?? false,\n    timingAllowFailed: init.timingAllowFailed ?? false,\n    useURLCredentials: init.useURLCredentials ?? undefined,\n    traversableForUserPrompts: init.traversableForUserPrompts ?? 'client',\n    urlList: init.urlList,\n    url: init.urlList[0],\n    headersList: init.headersList\n      ? new HeadersList(init.headersList)\n      : new HeadersList()\n  }\n}\n\n// https://fetch.spec.whatwg.org/#concept-request-clone\nfunction cloneRequest (request) {\n  // To clone a request request, run these steps:\n\n  // 1. Let newRequest be a copy of request, except for its body.\n  const newRequest = makeRequest({ ...request, body: null })\n\n  // 2. If request\u2019s body is non-null, set newRequest\u2019s body to the\n  // result of cloning request\u2019s body.\n  if (request.body != null) {\n    newRequest.body = cloneBody(request.body)\n  }\n\n  // 3. Return newRequest.\n  return newRequest\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#request-create\n * @param {any} innerRequest\n * @param {import('../../dispatcher/agent')} dispatcher\n * @param {AbortSignal} signal\n * @param {'request' | 'immutable' | 'request-no-cors' | 'response' | 'none'} guard\n * @returns {Request}\n */\nfunction fromInnerRequest (innerRequest, dispatcher, signal, guard) {\n  const request = new Request(kConstruct)\n  setRequestState(request, innerRequest)\n  setRequestDispatcher(request, dispatcher)\n  setRequestSignal(request, signal)\n  const headers = new Headers(kConstruct)\n  setRequestHeaders(request, headers)\n  setHeadersList(headers, innerRequest.headersList)\n  setHeadersGuard(headers, guard)\n  return request\n}\n\nObject.defineProperties(Request.prototype, {\n  method: kEnumerableProperty,\n  url: kEnumerableProperty,\n  headers: kEnumerableProperty,\n  redirect: kEnumerableProperty,\n  clone: kEnumerableProperty,\n  signal: kEnumerableProperty,\n  duplex: kEnumerableProperty,\n  destination: kEnumerableProperty,\n  body: kEnumerableProperty,\n  bodyUsed: kEnumerableProperty,\n  isHistoryNavigation: kEnumerableProperty,\n  isReloadNavigation: kEnumerableProperty,\n  keepalive: kEnumerableProperty,\n  integrity: kEnumerableProperty,\n  cache: kEnumerableProperty,\n  credentials: kEnumerableProperty,\n  attribute: kEnumerableProperty,\n  referrerPolicy: kEnumerableProperty,\n  referrer: kEnumerableProperty,\n  mode: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'Request',\n    configurable: true\n  }\n})\n\nwebidl.is.Request = webidl.util.MakeTypeAssertion(Request)\n\n/**\n * @param {*} V\n * @returns {import('../../../types/fetch').Request|string}\n *\n * @see https://fetch.spec.whatwg.org/#requestinfo\n */\nwebidl.converters.RequestInfo = function (V) {\n  if (typeof V === 'string') {\n    return webidl.converters.USVString(V)\n  }\n\n  if (webidl.is.Request(V)) {\n    return V\n  }\n\n  return webidl.converters.USVString(V)\n}\n\n/**\n * @param {*} V\n * @returns {import('../../../types/fetch').RequestInit}\n * @see https://fetch.spec.whatwg.org/#requestinit\n */\nwebidl.converters.RequestInit = webidl.dictionaryConverter([\n  {\n    key: 'method',\n    converter: webidl.converters.ByteString\n  },\n  {\n    key: 'headers',\n    converter: webidl.converters.HeadersInit\n  },\n  {\n    key: 'body',\n    converter: webidl.nullableConverter(\n      webidl.converters.BodyInit\n    )\n  },\n  {\n    key: 'referrer',\n    converter: webidl.converters.USVString\n  },\n  {\n    key: 'referrerPolicy',\n    converter: webidl.converters.DOMString,\n    // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy\n    allowedValues: referrerPolicy\n  },\n  {\n    key: 'mode',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#concept-request-mode\n    allowedValues: requestMode\n  },\n  {\n    key: 'credentials',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#requestcredentials\n    allowedValues: requestCredentials\n  },\n  {\n    key: 'cache',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#requestcache\n    allowedValues: requestCache\n  },\n  {\n    key: 'redirect',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#requestredirect\n    allowedValues: requestRedirect\n  },\n  {\n    key: 'integrity',\n    converter: webidl.converters.DOMString\n  },\n  {\n    key: 'keepalive',\n    converter: webidl.converters.boolean\n  },\n  {\n    key: 'signal',\n    converter: webidl.nullableConverter(\n      (signal) => webidl.converters.AbortSignal(\n        signal,\n        'RequestInit',\n        'signal'\n      )\n    )\n  },\n  {\n    key: 'window',\n    converter: webidl.converters.any\n  },\n  {\n    key: 'duplex',\n    converter: webidl.converters.DOMString,\n    allowedValues: requestDuplex\n  },\n  {\n    key: 'dispatcher', // undici specific option\n    converter: webidl.converters.any\n  },\n  {\n    key: 'priority',\n    converter: webidl.converters.DOMString,\n    allowedValues: ['high', 'low', 'auto'],\n    defaultValue: () => 'auto'\n  }\n])\n\nmodule.exports = {\n  Request,\n  makeRequest,\n  fromInnerRequest,\n  cloneRequest,\n  getRequestDispatcher,\n  getRequestState\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { runtimeFeatures } = require('../../util/runtime-features.js')\n\n/**\n * @typedef {object} Metadata\n * @property {SRIHashAlgorithm} alg - The algorithm used for the hash.\n * @property {string} val - The base64-encoded hash value.\n */\n\n/**\n * @typedef {Metadata[]} MetadataList\n */\n\n/**\n * @typedef {('sha256' | 'sha384' | 'sha512')} SRIHashAlgorithm\n */\n\n/**\n * @type {Map<SRIHashAlgorithm, number>}\n *\n * The valid SRI hash algorithm token set is the ordered set \u00AB \"sha256\",\n * \"sha384\", \"sha512\" \u00BB (corresponding to SHA-256, SHA-384, and SHA-512\n * respectively). The ordering of this set is meaningful, with stronger\n * algorithms appearing later in the set.\n *\n * @see https://w3c.github.io/webappsec-subresource-integrity/#valid-sri-hash-algorithm-token-set\n */\nconst validSRIHashAlgorithmTokenSet = new Map([['sha256', 0], ['sha384', 1], ['sha512', 2]])\n\n// https://nodejs.org/api/crypto.html#determining-if-crypto-support-is-unavailable\n/** @type {import('node:crypto')} */\nlet crypto\n\nif (runtimeFeatures.has('crypto')) {\n  crypto = require('node:crypto')\n  const cryptoHashes = crypto.getHashes()\n\n  // If no hashes are available, we cannot support SRI.\n  if (cryptoHashes.length === 0) {\n    validSRIHashAlgorithmTokenSet.clear()\n  }\n\n  for (const algorithm of validSRIHashAlgorithmTokenSet.keys()) {\n    // If the algorithm is not supported, remove it from the list.\n    if (cryptoHashes.includes(algorithm) === false) {\n      validSRIHashAlgorithmTokenSet.delete(algorithm)\n    }\n  }\n} else {\n  // If crypto is not available, we cannot support SRI.\n  validSRIHashAlgorithmTokenSet.clear()\n}\n\n/**\n * @typedef GetSRIHashAlgorithmIndex\n * @type {(algorithm: SRIHashAlgorithm) => number}\n * @param {SRIHashAlgorithm} algorithm\n * @returns {number} The index of the algorithm in the valid SRI hash algorithm\n * token set.\n */\n\nconst getSRIHashAlgorithmIndex = /** @type {GetSRIHashAlgorithmIndex} */ (Map.prototype.get.bind(\n  validSRIHashAlgorithmTokenSet))\n\n/**\n * @typedef IsValidSRIHashAlgorithm\n * @type {(algorithm: string) => algorithm is SRIHashAlgorithm}\n * @param {*} algorithm\n * @returns {algorithm is SRIHashAlgorithm}\n */\n\nconst isValidSRIHashAlgorithm = /** @type {IsValidSRIHashAlgorithm} */ (\n  Map.prototype.has.bind(validSRIHashAlgorithmTokenSet)\n)\n\n/**\n * @param {Uint8Array} bytes\n * @param {string} metadataList\n * @returns {boolean}\n *\n * @see https://w3c.github.io/webappsec-subresource-integrity/#does-response-match-metadatalist\n */\nconst bytesMatch = runtimeFeatures.has('crypto') === false || validSRIHashAlgorithmTokenSet.size === 0\n  // If node is not built with OpenSSL support, we cannot check\n  // a request's integrity, so allow it by default (the spec will\n  // allow requests if an invalid hash is given, as precedence).\n  ? () => true\n  : (bytes, metadataList) => {\n    // 1. Let parsedMetadata be the result of parsing metadataList.\n      const parsedMetadata = parseMetadata(metadataList)\n\n      // 2. If parsedMetadata is empty set, return true.\n      if (parsedMetadata.length === 0) {\n        return true\n      }\n\n      // 3. Let metadata be the result of getting the strongest\n      //    metadata from parsedMetadata.\n      const metadata = getStrongestMetadata(parsedMetadata)\n\n      // 4. For each item in metadata:\n      for (const item of metadata) {\n      // 1. Let algorithm be the item[\"alg\"].\n        const algorithm = item.alg\n\n        // 2. Let expectedValue be the item[\"val\"].\n        const expectedValue = item.val\n\n        // See https://github.com/web-platform-tests/wpt/commit/e4c5cc7a5e48093220528dfdd1c4012dc3837a0e\n        // \"be liberal with padding\". This is annoying, and it's not even in the spec.\n\n        // 3. Let actualValue be the result of applying algorithm to bytes .\n        const actualValue = applyAlgorithmToBytes(algorithm, bytes)\n\n        // 4. If actualValue is a case-sensitive match for expectedValue,\n        //    return true.\n        if (caseSensitiveMatch(actualValue, expectedValue)) {\n          return true\n        }\n      }\n\n      // 5. Return false.\n      return false\n    }\n\n/**\n * @param {MetadataList} metadataList\n * @returns {MetadataList} The strongest hash algorithm from the metadata list.\n */\nfunction getStrongestMetadata (metadataList) {\n  // 1. Let result be the empty set and strongest be the empty string.\n  const result = []\n  /** @type {Metadata|null} */\n  let strongest = null\n\n  // 2. For each item in set:\n  for (const item of metadataList) {\n    // 1. Assert: item[\"alg\"] is a valid SRI hash algorithm token.\n    assert(isValidSRIHashAlgorithm(item.alg), 'Invalid SRI hash algorithm token')\n\n    // 2. If result is the empty set, then:\n    if (result.length === 0) {\n      // 1. Append item to result.\n      result.push(item)\n\n      // 2. Set strongest to item.\n      strongest = item\n\n      // 3. Continue.\n      continue\n    }\n\n    // 3. Let currentAlgorithm be strongest[\"alg\"], and currentAlgorithmIndex be\n    // the index of currentAlgorithm in the valid SRI hash algorithm token set.\n    const currentAlgorithm = /** @type {Metadata} */ (strongest).alg\n    const currentAlgorithmIndex = getSRIHashAlgorithmIndex(currentAlgorithm)\n\n    // 4. Let newAlgorithm be the item[\"alg\"], and newAlgorithmIndex be the\n    // index of newAlgorithm in the valid SRI hash algorithm token set.\n    const newAlgorithm = item.alg\n    const newAlgorithmIndex = getSRIHashAlgorithmIndex(newAlgorithm)\n\n    // 5. If newAlgorithmIndex is less than currentAlgorithmIndex, then continue.\n    if (newAlgorithmIndex < currentAlgorithmIndex) {\n      continue\n\n    // 6. Otherwise, if newAlgorithmIndex is greater than\n    // currentAlgorithmIndex:\n    } else if (newAlgorithmIndex > currentAlgorithmIndex) {\n      // 1. Set strongest to item.\n      strongest = item\n\n      // 2. Set result to \u00AB item \u00BB.\n      result[0] = item\n      result.length = 1\n\n    // 7. Otherwise, newAlgorithmIndex and currentAlgorithmIndex are the same\n    // value. Append item to result.\n    } else {\n      result.push(item)\n    }\n  }\n\n  // 3. Return result.\n  return result\n}\n\n/**\n * @param {string} metadata\n * @returns {MetadataList}\n *\n * @see https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata\n */\nfunction parseMetadata (metadata) {\n  // 1. Let result be the empty set.\n  /** @type {MetadataList} */\n  const result = []\n\n  // 2. For each item returned by splitting metadata on spaces:\n  for (const item of metadata.split(' ')) {\n    // 1. Let expression-and-options be the result of splitting item on U+003F (?).\n    const expressionAndOptions = item.split('?', 1)\n\n    // 2. Let algorithm-expression be expression-and-options[0].\n    const algorithmExpression = expressionAndOptions[0]\n\n    // 3. Let base64-value be the empty string.\n    let base64Value = ''\n\n    // 4. Let algorithm-and-value be the result of splitting algorithm-expression on U+002D (-).\n    const algorithmAndValue = [algorithmExpression.slice(0, 6), algorithmExpression.slice(7)]\n\n    // 5. Let algorithm be algorithm-and-value[0].\n    const algorithm = algorithmAndValue[0]\n\n    // 6. If algorithm is not a valid SRI hash algorithm token, then continue.\n    if (!isValidSRIHashAlgorithm(algorithm)) {\n      continue\n    }\n\n    // 7. If algorithm-and-value[1] exists, set base64-value to\n    // algorithm-and-value[1].\n    if (algorithmAndValue[1]) {\n      base64Value = algorithmAndValue[1]\n    }\n\n    // 8. Let metadata be the ordered map\n    // \u00AB[\"alg\" \u2192 algorithm, \"val\" \u2192 base64-value]\u00BB.\n    const metadata = {\n      alg: algorithm,\n      val: base64Value\n    }\n\n    // 9. Append metadata to result.\n    result.push(metadata)\n  }\n\n  // 3. Return result.\n  return result\n}\n\n/**\n * Applies the specified hash algorithm to the given bytes\n *\n * @typedef {(algorithm: SRIHashAlgorithm, bytes: Uint8Array) => string} ApplyAlgorithmToBytes\n * @param {SRIHashAlgorithm} algorithm\n * @param {Uint8Array} bytes\n * @returns {string}\n */\nconst applyAlgorithmToBytes = (algorithm, bytes) => {\n  return crypto.hash(algorithm, bytes, 'base64')\n}\n\n/**\n * Compares two base64 strings, allowing for base64url\n * in the second string.\n *\n * @param {string} actualValue base64 encoded string\n * @param {string} expectedValue base64 or base64url encoded string\n * @returns {boolean}\n */\nfunction caseSensitiveMatch (actualValue, expectedValue) {\n  // Ignore padding characters from the end of the strings by\n  // decreasing the length by 1 or 2 if the last characters are `=`.\n  let actualValueLength = actualValue.length\n  if (actualValueLength !== 0 && actualValue[actualValueLength - 1] === '=') {\n    actualValueLength -= 1\n  }\n  if (actualValueLength !== 0 && actualValue[actualValueLength - 1] === '=') {\n    actualValueLength -= 1\n  }\n  let expectedValueLength = expectedValue.length\n  if (expectedValueLength !== 0 && expectedValue[expectedValueLength - 1] === '=') {\n    expectedValueLength -= 1\n  }\n  if (expectedValueLength !== 0 && expectedValue[expectedValueLength - 1] === '=') {\n    expectedValueLength -= 1\n  }\n\n  if (actualValueLength !== expectedValueLength) {\n    return false\n  }\n\n  for (let i = 0; i < actualValueLength; ++i) {\n    if (\n      actualValue[i] === expectedValue[i] ||\n      (actualValue[i] === '+' && expectedValue[i] === '-') ||\n      (actualValue[i] === '/' && expectedValue[i] === '_')\n    ) {\n      continue\n    }\n    return false\n  }\n\n  return true\n}\n\nmodule.exports = {\n  applyAlgorithmToBytes,\n  bytesMatch,\n  caseSensitiveMatch,\n  isValidSRIHashAlgorithm,\n  getStrongestMetadata,\n  parseMetadata\n}\n", "// https://github.com/Ethan-Arrowood/undici-fetch\n\n'use strict'\n\nconst {\n  makeNetworkError,\n  makeAppropriateNetworkError,\n  filterResponse,\n  makeResponse,\n  fromInnerResponse,\n  getResponseState\n} = require('./response')\nconst { HeadersList } = require('./headers')\nconst { Request, cloneRequest, getRequestDispatcher, getRequestState } = require('./request')\nconst zlib = require('node:zlib')\nconst {\n  makePolicyContainer,\n  clonePolicyContainer,\n  requestBadPort,\n  TAOCheck,\n  appendRequestOriginHeader,\n  responseLocationURL,\n  requestCurrentURL,\n  setRequestReferrerPolicyOnRedirect,\n  tryUpgradeRequestToAPotentiallyTrustworthyURL,\n  createOpaqueTimingInfo,\n  appendFetchMetadata,\n  corsCheck,\n  crossOriginResourcePolicyCheck,\n  determineRequestsReferrer,\n  coarsenedSharedCurrentTime,\n  sameOrigin,\n  isCancelled,\n  isAborted,\n  isErrorLike,\n  fullyReadBody,\n  readableStreamClose,\n  urlIsLocal,\n  urlIsHttpHttpsScheme,\n  urlHasHttpsScheme,\n  clampAndCoarsenConnectionTimingInfo,\n  simpleRangeHeaderValue,\n  buildContentRange,\n  createInflate,\n  extractMimeType,\n  hasAuthenticationEntry,\n  includesCredentials,\n  isTraversableNavigable\n} = require('./util')\nconst assert = require('node:assert')\nconst { safelyExtractBody, extractBody } = require('./body')\nconst {\n  redirectStatusSet,\n  nullBodyStatus,\n  safeMethodsSet,\n  requestBodyHeader,\n  subresourceSet\n} = require('./constants')\nconst EE = require('node:events')\nconst { Readable, pipeline, finished, isErrored, isReadable } = require('node:stream')\nconst { addAbortListener, bufferToLowerCasedHeaderName } = require('../../core/util')\nconst { dataURLProcessor, serializeAMimeType, minimizeSupportedMimeType } = require('./data-url')\nconst { getGlobalDispatcher } = require('../../global')\nconst { webidl } = require('../webidl')\nconst { STATUS_CODES } = require('node:http')\nconst { bytesMatch } = require('../subresource-integrity/subresource-integrity')\nconst { createDeferredPromise } = require('../../util/promise')\nconst { isomorphicEncode } = require('../infra')\nconst { runtimeFeatures } = require('../../util/runtime-features')\n\n// Node.js v23.8.0+ and v22.15.0+ supports Zstandard\nconst hasZstd = runtimeFeatures.has('zstd')\n\nconst GET_OR_HEAD = ['GET', 'HEAD']\n\nconst defaultUserAgent = typeof __UNDICI_IS_NODE__ !== 'undefined' || typeof esbuildDetection !== 'undefined'\n  ? 'node'\n  : 'undici'\n\n/** @type {import('buffer').resolveObjectURL} */\nlet resolveObjectURL\n\nclass Fetch extends EE {\n  constructor (dispatcher) {\n    super()\n\n    this.dispatcher = dispatcher\n    this.connection = null\n    this.dump = false\n    this.state = 'ongoing'\n  }\n\n  terminate (reason) {\n    if (this.state !== 'ongoing') {\n      return\n    }\n\n    this.state = 'terminated'\n    this.connection?.destroy(reason)\n    this.emit('terminated', reason)\n  }\n\n  // https://fetch.spec.whatwg.org/#fetch-controller-abort\n  abort (error) {\n    if (this.state !== 'ongoing') {\n      return\n    }\n\n    // 1. Set controller\u2019s state to \"aborted\".\n    this.state = 'aborted'\n\n    // 2. Let fallbackError be an \"AbortError\" DOMException.\n    // 3. Set error to fallbackError if it is not given.\n    if (!error) {\n      error = new DOMException('The operation was aborted.', 'AbortError')\n    }\n\n    // 4. Let serializedError be StructuredSerialize(error).\n    //    If that threw an exception, catch it, and let\n    //    serializedError be StructuredSerialize(fallbackError).\n\n    // 5. Set controller\u2019s serialized abort reason to serializedError.\n    this.serializedAbortReason = error\n\n    this.connection?.destroy(error)\n    this.emit('terminated', error)\n  }\n}\n\nfunction handleFetchDone (response) {\n  finalizeAndReportTiming(response, 'fetch')\n}\n\n// https://fetch.spec.whatwg.org/#fetch-method\nfunction fetch (input, init = undefined) {\n  webidl.argumentLengthCheck(arguments, 1, 'globalThis.fetch')\n\n  // 1. Let p be a new promise.\n  let p = createDeferredPromise()\n\n  // 2. Let requestObject be the result of invoking the initial value of\n  // Request as constructor with input and init as arguments. If this throws\n  // an exception, reject p with it and return p.\n  let requestObject\n\n  try {\n    requestObject = new Request(input, init)\n  } catch (e) {\n    p.reject(e)\n    return p.promise\n  }\n\n  // 3. Let request be requestObject\u2019s request.\n  const request = getRequestState(requestObject)\n\n  // 4. If requestObject\u2019s signal\u2019s aborted flag is set, then:\n  if (requestObject.signal.aborted) {\n    // 1. Abort the fetch() call with p, request, null, and\n    //    requestObject\u2019s signal\u2019s abort reason.\n    abortFetch(p, request, null, requestObject.signal.reason, null)\n\n    // 2. Return p.\n    return p.promise\n  }\n\n  // 5. Let globalObject be request\u2019s client\u2019s global object.\n  const globalObject = request.client.globalObject\n\n  // 6. If globalObject is a ServiceWorkerGlobalScope object, then set\n  // request\u2019s service-workers mode to \"none\".\n  if (globalObject?.constructor?.name === 'ServiceWorkerGlobalScope') {\n    request.serviceWorkers = 'none'\n  }\n\n  // 7. Let responseObject be null.\n  let responseObject = null\n\n  // 8. Let relevantRealm be this\u2019s relevant Realm.\n\n  // 9. Let locallyAborted be false.\n  let locallyAborted = false\n\n  // 10. Let controller be null.\n  let controller = null\n\n  // 11. Add the following abort steps to requestObject\u2019s signal:\n  addAbortListener(\n    requestObject.signal,\n    () => {\n      // 1. Set locallyAborted to true.\n      locallyAborted = true\n\n      // 2. Assert: controller is non-null.\n      assert(controller != null)\n\n      // 3. Abort controller with requestObject\u2019s signal\u2019s abort reason.\n      controller.abort(requestObject.signal.reason)\n\n      const realResponse = responseObject?.deref()\n\n      // 4. Abort the fetch() call with p, request, responseObject,\n      //    and requestObject\u2019s signal\u2019s abort reason.\n      abortFetch(p, request, realResponse, requestObject.signal.reason, controller.controller)\n    }\n  )\n\n  // 12. Let handleFetchDone given response response be to finalize and\n  // report timing with response, globalObject, and \"fetch\".\n  // see function handleFetchDone\n\n  // 13. Set controller to the result of calling fetch given request,\n  // with processResponseEndOfBody set to handleFetchDone, and processResponse\n  // given response being these substeps:\n\n  const processResponse = (response) => {\n    // 1. If locallyAborted is true, terminate these substeps.\n    if (locallyAborted) {\n      return\n    }\n\n    // 2. If response\u2019s aborted flag is set, then:\n    if (response.aborted) {\n      // 1. Let deserializedError be the result of deserialize a serialized\n      //    abort reason given controller\u2019s serialized abort reason and\n      //    relevantRealm.\n\n      // 2. Abort the fetch() call with p, request, responseObject, and\n      //    deserializedError.\n\n      abortFetch(p, request, responseObject, controller.serializedAbortReason, controller.controller)\n      return\n    }\n\n    // 3. If response is a network error, then reject p with a TypeError\n    // and terminate these substeps.\n    if (response.type === 'error') {\n      p.reject(new TypeError('fetch failed', { cause: response.error }))\n      return\n    }\n\n    // 4. Set responseObject to the result of creating a Response object,\n    // given response, \"immutable\", and relevantRealm.\n    responseObject = new WeakRef(fromInnerResponse(response, 'immutable'))\n\n    // 5. Resolve p with responseObject.\n    p.resolve(responseObject.deref())\n    p = null\n  }\n\n  controller = fetching({\n    request,\n    processResponseEndOfBody: handleFetchDone,\n    processResponse,\n    dispatcher: getRequestDispatcher(requestObject), // undici\n    // Keep requestObject alive to prevent its AbortController from being GC'd\n    // See https://github.com/nodejs/undici/issues/4627\n    requestObject\n  })\n\n  // 14. Return p.\n  return p.promise\n}\n\n// https://fetch.spec.whatwg.org/#finalize-and-report-timing\nfunction finalizeAndReportTiming (response, initiatorType = 'other') {\n  // 1. If response is an aborted network error, then return.\n  if (response.type === 'error' && response.aborted) {\n    return\n  }\n\n  // 2. If response\u2019s URL list is null or empty, then return.\n  if (!response.urlList?.length) {\n    return\n  }\n\n  // 3. Let originalURL be response\u2019s URL list[0].\n  const originalURL = response.urlList[0]\n\n  // 4. Let timingInfo be response\u2019s timing info.\n  let timingInfo = response.timingInfo\n\n  // 5. Let cacheState be response\u2019s cache state.\n  let cacheState = response.cacheState\n\n  // 6. If originalURL\u2019s scheme is not an HTTP(S) scheme, then return.\n  if (!urlIsHttpHttpsScheme(originalURL)) {\n    return\n  }\n\n  // 7. If timingInfo is null, then return.\n  if (timingInfo === null) {\n    return\n  }\n\n  // 8. If response\u2019s timing allow passed flag is not set, then:\n  if (!response.timingAllowPassed) {\n    //  1. Set timingInfo to a the result of creating an opaque timing info for timingInfo.\n    timingInfo = createOpaqueTimingInfo({\n      startTime: timingInfo.startTime\n    })\n\n    //  2. Set cacheState to the empty string.\n    cacheState = ''\n  }\n\n  // 9. Set timingInfo\u2019s end time to the coarsened shared current time\n  // given global\u2019s relevant settings object\u2019s cross-origin isolated\n  // capability.\n  // TODO: given global\u2019s relevant settings object\u2019s cross-origin isolated\n  // capability?\n  timingInfo.endTime = coarsenedSharedCurrentTime()\n\n  // 10. Set response\u2019s timing info to timingInfo.\n  response.timingInfo = timingInfo\n\n  // 11. Mark resource timing for timingInfo, originalURL, initiatorType,\n  // global, and cacheState.\n  markResourceTiming(\n    timingInfo,\n    originalURL.href,\n    initiatorType,\n    globalThis,\n    cacheState,\n    '', // bodyType\n    response.status\n  )\n}\n\n// https://w3c.github.io/resource-timing/#dfn-mark-resource-timing\nconst markResourceTiming = performance.markResourceTiming\n\n// https://fetch.spec.whatwg.org/#abort-fetch\nfunction abortFetch (p, request, responseObject, error, controller /* undici-specific */) {\n  // 1. Reject promise with error.\n  if (p) {\n    // We might have already resolved the promise at this stage\n    p.reject(error)\n  }\n\n  // 2. If request\u2019s body is not null and is readable, then cancel request\u2019s\n  // body with error.\n  if (request.body?.stream != null && isReadable(request.body.stream)) {\n    request.body.stream.cancel(error).catch((err) => {\n      if (err.code === 'ERR_INVALID_STATE') {\n        // Node bug?\n        return\n      }\n      throw err\n    })\n  }\n\n  // 3. If responseObject is null, then return.\n  if (responseObject == null) {\n    return\n  }\n\n  // 4. Let response be responseObject\u2019s response.\n  const response = getResponseState(responseObject)\n\n  // 5. If response\u2019s body is not null and is readable, then error response\u2019s\n  // body with error.\n  if (response.body?.stream != null && isReadable(response.body.stream)) {\n    controller.error(error)\n  }\n}\n\n// https://fetch.spec.whatwg.org/#fetching\nfunction fetching ({\n  request,\n  processRequestBodyChunkLength,\n  processRequestEndOfBody,\n  processResponse,\n  processResponseEndOfBody,\n  processResponseConsumeBody,\n  useParallelQueue = false,\n  dispatcher = getGlobalDispatcher(), // undici\n  requestObject = null // Keep alive to prevent AbortController GC, see #4627\n}) {\n  // Ensure that the dispatcher is set accordingly\n  assert(dispatcher)\n\n  // 1. Let taskDestination be null.\n  let taskDestination = null\n\n  // 2. Let crossOriginIsolatedCapability be false.\n  let crossOriginIsolatedCapability = false\n\n  // 3. If request\u2019s client is non-null, then:\n  if (request.client != null) {\n    // 1. Set taskDestination to request\u2019s client\u2019s global object.\n    taskDestination = request.client.globalObject\n\n    // 2. Set crossOriginIsolatedCapability to request\u2019s client\u2019s cross-origin\n    // isolated capability.\n    crossOriginIsolatedCapability =\n      request.client.crossOriginIsolatedCapability\n  }\n\n  // 4. If useParallelQueue is true, then set taskDestination to the result of\n  // starting a new parallel queue.\n  // TODO\n\n  // 5. Let timingInfo be a new fetch timing info whose start time and\n  // post-redirect start time are the coarsened shared current time given\n  // crossOriginIsolatedCapability.\n  const currentTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability)\n  const timingInfo = createOpaqueTimingInfo({\n    startTime: currentTime\n  })\n\n  // 6. Let fetchParams be a new fetch params whose\n  // request is request,\n  // timing info is timingInfo,\n  // process request body chunk length is processRequestBodyChunkLength,\n  // process request end-of-body is processRequestEndOfBody,\n  // process response is processResponse,\n  // process response consume body is processResponseConsumeBody,\n  // process response end-of-body is processResponseEndOfBody,\n  // task destination is taskDestination,\n  // and cross-origin isolated capability is crossOriginIsolatedCapability.\n  const fetchParams = {\n    controller: new Fetch(dispatcher),\n    request,\n    timingInfo,\n    processRequestBodyChunkLength,\n    processRequestEndOfBody,\n    processResponse,\n    processResponseConsumeBody,\n    processResponseEndOfBody,\n    taskDestination,\n    crossOriginIsolatedCapability,\n    // Keep requestObject alive to prevent its AbortController from being GC'd\n    requestObject\n  }\n\n  // 7. If request\u2019s body is a byte sequence, then set request\u2019s body to\n  //    request\u2019s body as a body.\n  // NOTE: Since fetching is only called from fetch, body should already be\n  // extracted.\n  assert(!request.body || request.body.stream)\n\n  // 8. If request\u2019s window is \"client\", then set request\u2019s window to request\u2019s\n  // client, if request\u2019s client\u2019s global object is a Window object; otherwise\n  // \"no-window\".\n  if (request.window === 'client') {\n    // TODO: What if request.client is null?\n    request.window =\n      request.client?.globalObject?.constructor?.name === 'Window'\n        ? request.client\n        : 'no-window'\n  }\n\n  // 9. If request\u2019s origin is \"client\", then set request\u2019s origin to request\u2019s\n  // client\u2019s origin.\n  if (request.origin === 'client') {\n    request.origin = request.client.origin\n  }\n\n  // 10. If all of the following conditions are true:\n  // TODO\n\n  // 11. If request\u2019s policy container is \"client\", then:\n  if (request.policyContainer === 'client') {\n    // 1. If request\u2019s client is non-null, then set request\u2019s policy\n    // container to a clone of request\u2019s client\u2019s policy container. [HTML]\n    if (request.client != null) {\n      request.policyContainer = clonePolicyContainer(\n        request.client.policyContainer\n      )\n    } else {\n      // 2. Otherwise, set request\u2019s policy container to a new policy\n      // container.\n      request.policyContainer = makePolicyContainer()\n    }\n  }\n\n  // 12. If request\u2019s header list does not contain `Accept`, then:\n  if (!request.headersList.contains('accept', true)) {\n    // 1. Let value be `*/*`.\n    const value = '*/*'\n\n    // 2. A user agent should set value to the first matching statement, if\n    // any, switching on request\u2019s destination:\n    // \"document\"\n    // \"frame\"\n    // \"iframe\"\n    // `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8`\n    // \"image\"\n    // `image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5`\n    // \"style\"\n    // `text/css,*/*;q=0.1`\n    // TODO\n\n    // 3. Append `Accept`/value to request\u2019s header list.\n    request.headersList.append('accept', value, true)\n  }\n\n  // 13. If request\u2019s header list does not contain `Accept-Language`, then\n  // user agents should append `Accept-Language`/an appropriate value to\n  // request\u2019s header list.\n  if (!request.headersList.contains('accept-language', true)) {\n    request.headersList.append('accept-language', '*', true)\n  }\n\n  // 14. If request\u2019s priority is null, then use request\u2019s initiator and\n  // destination appropriately in setting request\u2019s priority to a\n  // user-agent-defined object.\n  if (request.priority === null) {\n    // TODO\n  }\n\n  // 15. If request is a subresource request, then:\n  if (subresourceSet.has(request.destination)) {\n    // TODO\n  }\n\n  // 16. Run main fetch given fetchParams.\n  mainFetch(fetchParams, false)\n\n  // 17. Return fetchParam's controller\n  return fetchParams.controller\n}\n\n// https://fetch.spec.whatwg.org/#concept-main-fetch\nasync function mainFetch (fetchParams, recursive) {\n  try {\n    // 1. Let request be fetchParams\u2019s request.\n    const request = fetchParams.request\n\n    // 2. Let response be null.\n    let response = null\n\n    // 3. If request\u2019s local-URLs-only flag is set and request\u2019s current URL is\n    // not local, then set response to a network error.\n    if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) {\n      response = makeNetworkError('local URLs only')\n    }\n\n    // 4. Run report Content Security Policy violations for request.\n    // TODO\n\n    // 5. Upgrade request to a potentially trustworthy URL, if appropriate.\n    tryUpgradeRequestToAPotentiallyTrustworthyURL(request)\n\n    // 6. If should request be blocked due to a bad port, should fetching request\n    // be blocked as mixed content, or should request be blocked by Content\n    // Security Policy returns blocked, then set response to a network error.\n    if (requestBadPort(request) === 'blocked') {\n      response = makeNetworkError('bad port')\n    }\n    // TODO: should fetching request be blocked as mixed content?\n    // TODO: should request be blocked by Content Security Policy?\n\n    // 7. If request\u2019s referrer policy is the empty string, then set request\u2019s\n    // referrer policy to request\u2019s policy container\u2019s referrer policy.\n    if (request.referrerPolicy === '') {\n      request.referrerPolicy = request.policyContainer.referrerPolicy\n    }\n\n    // 8. If request\u2019s referrer is not \"no-referrer\", then set request\u2019s\n    // referrer to the result of invoking determine request\u2019s referrer.\n    if (request.referrer !== 'no-referrer') {\n      request.referrer = determineRequestsReferrer(request)\n    }\n\n    // 9. Set request\u2019s current URL\u2019s scheme to \"https\" if all of the following\n    // conditions are true:\n    // - request\u2019s current URL\u2019s scheme is \"http\"\n    // - request\u2019s current URL\u2019s host is a domain\n    // - Matching request\u2019s current URL\u2019s host per Known HSTS Host Domain Name\n    //   Matching results in either a superdomain match with an asserted\n    //   includeSubDomains directive or a congruent match (with or without an\n    //   asserted includeSubDomains directive). [HSTS]\n    // TODO\n\n    // 10. If recursive is false, then run the remaining steps in parallel.\n    // TODO\n\n    // 11. If response is null, then set response to the result of running\n    // the steps corresponding to the first matching statement:\n    if (response === null) {\n      const currentURL = requestCurrentURL(request)\n      if (\n        // - request\u2019s current URL\u2019s origin is same origin with request\u2019s origin,\n        //   and request\u2019s response tainting is \"basic\"\n        (sameOrigin(currentURL, request.url) && request.responseTainting === 'basic') ||\n        // request\u2019s current URL\u2019s scheme is \"data\"\n        (currentURL.protocol === 'data:') ||\n        // - request\u2019s mode is \"navigate\" or \"websocket\"\n        (request.mode === 'navigate' || request.mode === 'websocket')\n      ) {\n        // 1. Set request\u2019s response tainting to \"basic\".\n        request.responseTainting = 'basic'\n\n        // 2. Return the result of running scheme fetch given fetchParams.\n        response = await schemeFetch(fetchParams)\n\n      // request\u2019s mode is \"same-origin\"\n      } else if (request.mode === 'same-origin') {\n        // 1. Return a network error.\n        response = makeNetworkError('request mode cannot be \"same-origin\"')\n\n      // request\u2019s mode is \"no-cors\"\n      } else if (request.mode === 'no-cors') {\n        // 1. If request\u2019s redirect mode is not \"follow\", then return a network\n        // error.\n        if (request.redirect !== 'follow') {\n          response = makeNetworkError(\n            'redirect mode cannot be \"follow\" for \"no-cors\" request'\n          )\n        } else {\n          // 2. Set request\u2019s response tainting to \"opaque\".\n          request.responseTainting = 'opaque'\n\n          // 3. Return the result of running scheme fetch given fetchParams.\n          response = await schemeFetch(fetchParams)\n        }\n      // request\u2019s current URL\u2019s scheme is not an HTTP(S) scheme\n      } else if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) {\n        // Return a network error.\n        response = makeNetworkError('URL scheme must be a HTTP(S) scheme')\n\n        // - request\u2019s use-CORS-preflight flag is set\n        // - request\u2019s unsafe-request flag is set and either request\u2019s method is\n        //   not a CORS-safelisted method or CORS-unsafe request-header names with\n        //   request\u2019s header list is not empty\n        //    1. Set request\u2019s response tainting to \"cors\".\n        //    2. Let corsWithPreflightResponse be the result of running HTTP fetch\n        //    given fetchParams and true.\n        //    3. If corsWithPreflightResponse is a network error, then clear cache\n        //    entries using request.\n        //    4. Return corsWithPreflightResponse.\n        // TODO\n\n      // Otherwise\n      } else {\n        //    1. Set request\u2019s response tainting to \"cors\".\n        request.responseTainting = 'cors'\n\n        //    2. Return the result of running HTTP fetch given fetchParams.\n        response = await httpFetch(fetchParams)\n      }\n    }\n\n    // 12. If recursive is true, then return response.\n    if (recursive) {\n      return response\n    }\n\n    // 13. If response is not a network error and response is not a filtered\n    // response, then:\n    if (response.status !== 0 && !response.internalResponse) {\n      // If request\u2019s response tainting is \"cors\", then:\n      if (request.responseTainting === 'cors') {\n        // 1. Let headerNames be the result of extracting header list values\n        // given `Access-Control-Expose-Headers` and response\u2019s header list.\n        // TODO\n        // 2. If request\u2019s credentials mode is not \"include\" and headerNames\n        // contains `*`, then set response\u2019s CORS-exposed header-name list to\n        // all unique header names in response\u2019s header list.\n        // TODO\n        // 3. Otherwise, if headerNames is not null or failure, then set\n        // response\u2019s CORS-exposed header-name list to headerNames.\n        // TODO\n      }\n\n      // Set response to the following filtered response with response as its\n      // internal response, depending on request\u2019s response tainting:\n      if (request.responseTainting === 'basic') {\n        response = filterResponse(response, 'basic')\n      } else if (request.responseTainting === 'cors') {\n        response = filterResponse(response, 'cors')\n      } else if (request.responseTainting === 'opaque') {\n        response = filterResponse(response, 'opaque')\n      } else {\n        assert(false)\n      }\n    }\n\n    // 14. Let internalResponse be response, if response is a network error,\n    // and response\u2019s internal response otherwise.\n    let internalResponse =\n      response.status === 0 ? response : response.internalResponse\n\n    // 15. If internalResponse\u2019s URL list is empty, then set it to a clone of\n    // request\u2019s URL list.\n    if (internalResponse.urlList.length === 0) {\n      internalResponse.urlList.push(...request.urlList)\n    }\n\n    // 16. If request\u2019s timing allow failed flag is unset, then set\n    // internalResponse\u2019s timing allow passed flag.\n    if (!request.timingAllowFailed) {\n      response.timingAllowPassed = true\n    }\n\n    // 17. If response is not a network error and any of the following returns\n    // blocked\n    // - should internalResponse to request be blocked as mixed content\n    // - should internalResponse to request be blocked by Content Security Policy\n    // - should internalResponse to request be blocked due to its MIME type\n    // - should internalResponse to request be blocked due to nosniff\n    // TODO\n\n    // 18. If response\u2019s type is \"opaque\", internalResponse\u2019s status is 206,\n    // internalResponse\u2019s range-requested flag is set, and request\u2019s header\n    // list does not contain `Range`, then set response and internalResponse\n    // to a network error.\n    if (\n      response.type === 'opaque' &&\n      internalResponse.status === 206 &&\n      internalResponse.rangeRequested &&\n      !request.headers.contains('range', true)\n    ) {\n      response = internalResponse = makeNetworkError()\n    }\n\n    // 19. If response is not a network error and either request\u2019s method is\n    // `HEAD` or `CONNECT`, or internalResponse\u2019s status is a null body status,\n    // set internalResponse\u2019s body to null and disregard any enqueuing toward\n    // it (if any).\n    if (\n      response.status !== 0 &&\n      (request.method === 'HEAD' ||\n        request.method === 'CONNECT' ||\n        nullBodyStatus.includes(internalResponse.status))\n    ) {\n      internalResponse.body = null\n      fetchParams.controller.dump = true\n    }\n\n    // 20. If request\u2019s integrity metadata is not the empty string, then:\n    if (request.integrity) {\n      // 1. Let processBodyError be this step: run fetch finale given fetchParams\n      // and a network error.\n      const processBodyError = (reason) =>\n        fetchFinale(fetchParams, makeNetworkError(reason))\n\n      // 2. If request\u2019s response tainting is \"opaque\", or response\u2019s body is null,\n      // then run processBodyError and abort these steps.\n      if (request.responseTainting === 'opaque' || response.body == null) {\n        processBodyError(response.error)\n        return\n      }\n\n      // 3. Let processBody given bytes be these steps:\n      const processBody = (bytes) => {\n        // 1. If bytes do not match request\u2019s integrity metadata,\n        // then run processBodyError and abort these steps. [SRI]\n        if (!bytesMatch(bytes, request.integrity)) {\n          processBodyError('integrity mismatch')\n          return\n        }\n\n        // 2. Set response\u2019s body to bytes as a body.\n        response.body = safelyExtractBody(bytes)[0]\n\n        // 3. Run fetch finale given fetchParams and response.\n        fetchFinale(fetchParams, response)\n      }\n\n      // 4. Fully read response\u2019s body given processBody and processBodyError.\n      fullyReadBody(response.body, processBody, processBodyError)\n    } else {\n      // 21. Otherwise, run fetch finale given fetchParams and response.\n      fetchFinale(fetchParams, response)\n    }\n  } catch (err) {\n    fetchParams.controller.terminate(err)\n  }\n}\n\n// https://fetch.spec.whatwg.org/#concept-scheme-fetch\n// given a fetch params fetchParams\nfunction schemeFetch (fetchParams) {\n  // Note: since the connection is destroyed on redirect, which sets fetchParams to a\n  // cancelled state, we do not want this condition to trigger *unless* there have been\n  // no redirects. See https://github.com/nodejs/undici/issues/1776\n  // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams.\n  if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) {\n    return Promise.resolve(makeAppropriateNetworkError(fetchParams))\n  }\n\n  // 2. Let request be fetchParams\u2019s request.\n  const { request } = fetchParams\n\n  const { protocol: scheme } = requestCurrentURL(request)\n\n  // 3. Switch on request\u2019s current URL\u2019s scheme and run the associated steps:\n  switch (scheme) {\n    case 'about:': {\n      // If request\u2019s current URL\u2019s path is the string \"blank\", then return a new response\n      // whose status message is `OK`, header list is \u00AB (`Content-Type`, `text/html;charset=utf-8`) \u00BB,\n      // and body is the empty byte sequence as a body.\n\n      // Otherwise, return a network error.\n      return Promise.resolve(makeNetworkError('about scheme is not supported'))\n    }\n    case 'blob:': {\n      if (!resolveObjectURL) {\n        resolveObjectURL = require('node:buffer').resolveObjectURL\n      }\n\n      // 1. Let blobURLEntry be request\u2019s current URL\u2019s blob URL entry.\n      const blobURLEntry = requestCurrentURL(request)\n\n      // https://github.com/web-platform-tests/wpt/blob/7b0ebaccc62b566a1965396e5be7bb2bc06f841f/FileAPI/url/resources/fetch-tests.js#L52-L56\n      // Buffer.resolveObjectURL does not ignore URL queries.\n      if (blobURLEntry.search.length !== 0) {\n        return Promise.resolve(makeNetworkError('NetworkError when attempting to fetch resource.'))\n      }\n\n      const blob = resolveObjectURL(blobURLEntry.toString())\n\n      // 2. If request\u2019s method is not `GET`, blobURLEntry is null, or blobURLEntry\u2019s\n      //    object is not a Blob object, then return a network error.\n      if (request.method !== 'GET' || !webidl.is.Blob(blob)) {\n        return Promise.resolve(makeNetworkError('invalid method'))\n      }\n\n      // 3. Let blob be blobURLEntry\u2019s object.\n      // Note: done above\n\n      // 4. Let response be a new response.\n      const response = makeResponse()\n\n      // 5. Let fullLength be blob\u2019s size.\n      const fullLength = blob.size\n\n      // 6. Let serializedFullLength be fullLength, serialized and isomorphic encoded.\n      const serializedFullLength = isomorphicEncode(`${fullLength}`)\n\n      // 7. Let type be blob\u2019s type.\n      const type = blob.type\n\n      // 8. If request\u2019s header list does not contain `Range`:\n      // 9. Otherwise:\n      if (!request.headersList.contains('range', true)) {\n        // 1. Let bodyWithType be the result of safely extracting blob.\n        // Note: in the FileAPI a blob \"object\" is a Blob *or* a MediaSource.\n        // In node, this can only ever be a Blob. Therefore we can safely\n        // use extractBody directly.\n        const bodyWithType = extractBody(blob)\n\n        // 2. Set response\u2019s status message to `OK`.\n        response.statusText = 'OK'\n\n        // 3. Set response\u2019s body to bodyWithType\u2019s body.\n        response.body = bodyWithType[0]\n\n        // 4. Set response\u2019s header list to \u00AB (`Content-Length`, serializedFullLength), (`Content-Type`, type) \u00BB.\n        response.headersList.set('content-length', serializedFullLength, true)\n        response.headersList.set('content-type', type, true)\n      } else {\n        // 1. Set response\u2019s range-requested flag.\n        response.rangeRequested = true\n\n        // 2. Let rangeHeader be the result of getting `Range` from request\u2019s header list.\n        const rangeHeader = request.headersList.get('range', true)\n\n        // 3. Let rangeValue be the result of parsing a single range header value given rangeHeader and true.\n        const rangeValue = simpleRangeHeaderValue(rangeHeader, true)\n\n        // 4. If rangeValue is failure, then return a network error.\n        if (rangeValue === 'failure') {\n          return Promise.resolve(makeNetworkError('failed to fetch the data URL'))\n        }\n\n        // 5. Let (rangeStart, rangeEnd) be rangeValue.\n        let { rangeStartValue: rangeStart, rangeEndValue: rangeEnd } = rangeValue\n\n        // 6. If rangeStart is null:\n        // 7. Otherwise:\n        if (rangeStart === null) {\n          // 1. Set rangeStart to fullLength \u2212 rangeEnd.\n          rangeStart = fullLength - rangeEnd\n\n          // 2. Set rangeEnd to rangeStart + rangeEnd \u2212 1.\n          rangeEnd = rangeStart + rangeEnd - 1\n        } else {\n          // 1. If rangeStart is greater than or equal to fullLength, then return a network error.\n          if (rangeStart >= fullLength) {\n            return Promise.resolve(makeNetworkError('Range start is greater than the blob\\'s size.'))\n          }\n\n          // 2. If rangeEnd is null or rangeEnd is greater than or equal to fullLength, then set\n          //    rangeEnd to fullLength \u2212 1.\n          if (rangeEnd === null || rangeEnd >= fullLength) {\n            rangeEnd = fullLength - 1\n          }\n        }\n\n        // 8. Let slicedBlob be the result of invoking slice blob given blob, rangeStart,\n        //    rangeEnd + 1, and type.\n        const slicedBlob = blob.slice(rangeStart, rangeEnd + 1, type)\n\n        // 9. Let slicedBodyWithType be the result of safely extracting slicedBlob.\n        // Note: same reason as mentioned above as to why we use extractBody\n        const slicedBodyWithType = extractBody(slicedBlob)\n\n        // 10. Set response\u2019s body to slicedBodyWithType\u2019s body.\n        response.body = slicedBodyWithType[0]\n\n        // 11. Let serializedSlicedLength be slicedBlob\u2019s size, serialized and isomorphic encoded.\n        const serializedSlicedLength = isomorphicEncode(`${slicedBlob.size}`)\n\n        // 12. Let contentRange be the result of invoking build a content range given rangeStart,\n        //     rangeEnd, and fullLength.\n        const contentRange = buildContentRange(rangeStart, rangeEnd, fullLength)\n\n        // 13. Set response\u2019s status to 206.\n        response.status = 206\n\n        // 14. Set response\u2019s status message to `Partial Content`.\n        response.statusText = 'Partial Content'\n\n        // 15. Set response\u2019s header list to \u00AB (`Content-Length`, serializedSlicedLength),\n        //     (`Content-Type`, type), (`Content-Range`, contentRange) \u00BB.\n        response.headersList.set('content-length', serializedSlicedLength, true)\n        response.headersList.set('content-type', type, true)\n        response.headersList.set('content-range', contentRange, true)\n      }\n\n      // 10. Return response.\n      return Promise.resolve(response)\n    }\n    case 'data:': {\n      // 1. Let dataURLStruct be the result of running the\n      //    data: URL processor on request\u2019s current URL.\n      const currentURL = requestCurrentURL(request)\n      const dataURLStruct = dataURLProcessor(currentURL)\n\n      // 2. If dataURLStruct is failure, then return a\n      //    network error.\n      if (dataURLStruct === 'failure') {\n        return Promise.resolve(makeNetworkError('failed to fetch the data URL'))\n      }\n\n      // 3. Let mimeType be dataURLStruct\u2019s MIME type, serialized.\n      const mimeType = serializeAMimeType(dataURLStruct.mimeType)\n\n      // 4. Return a response whose status message is `OK`,\n      //    header list is \u00AB (`Content-Type`, mimeType) \u00BB,\n      //    and body is dataURLStruct\u2019s body as a body.\n      return Promise.resolve(makeResponse({\n        statusText: 'OK',\n        headersList: [\n          ['content-type', { name: 'Content-Type', value: mimeType }]\n        ],\n        body: safelyExtractBody(dataURLStruct.body)[0]\n      }))\n    }\n    case 'file:': {\n      // For now, unfortunate as it is, file URLs are left as an exercise for the reader.\n      // When in doubt, return a network error.\n      return Promise.resolve(makeNetworkError('not implemented... yet...'))\n    }\n    case 'http:':\n    case 'https:': {\n      // Return the result of running HTTP fetch given fetchParams.\n\n      return httpFetch(fetchParams)\n        .catch((err) => makeNetworkError(err))\n    }\n    default: {\n      return Promise.resolve(makeNetworkError('unknown scheme'))\n    }\n  }\n}\n\n// https://fetch.spec.whatwg.org/#finalize-response\nfunction finalizeResponse (fetchParams, response) {\n  // 1. Set fetchParams\u2019s request\u2019s done flag.\n  fetchParams.request.done = true\n\n  // 2, If fetchParams\u2019s process response done is not null, then queue a fetch\n  // task to run fetchParams\u2019s process response done given response, with\n  // fetchParams\u2019s task destination.\n  if (fetchParams.processResponseDone != null) {\n    queueMicrotask(() => fetchParams.processResponseDone(response))\n  }\n}\n\n// https://fetch.spec.whatwg.org/#fetch-finale\nfunction fetchFinale (fetchParams, response) {\n  // 1. Let timingInfo be fetchParams\u2019s timing info.\n  let timingInfo = fetchParams.timingInfo\n\n  // 2. If response is not a network error and fetchParams\u2019s request\u2019s client is a secure context,\n  //    then set timingInfo\u2019s server-timing headers to the result of getting, decoding, and splitting\n  //    `Server-Timing` from response\u2019s internal response\u2019s header list.\n  // TODO\n\n  // 3. Let processResponseEndOfBody be the following steps:\n  const processResponseEndOfBody = () => {\n    // 1. Let unsafeEndTime be the unsafe shared current time.\n    const unsafeEndTime = Date.now() // ?\n\n    // 2. If fetchParams\u2019s request\u2019s destination is \"document\", then set fetchParams\u2019s controller\u2019s\n    //    full timing info to fetchParams\u2019s timing info.\n    if (fetchParams.request.destination === 'document') {\n      fetchParams.controller.fullTimingInfo = timingInfo\n    }\n\n    // 3. Set fetchParams\u2019s controller\u2019s report timing steps to the following steps given a global object global:\n    fetchParams.controller.reportTimingSteps = () => {\n      // 1. If fetchParams\u2019s request\u2019s URL\u2019s scheme is not an HTTP(S) scheme, then return.\n      if (!urlIsHttpHttpsScheme(fetchParams.request.url)) {\n        return\n      }\n\n      // 2. Set timingInfo\u2019s end time to the relative high resolution time given unsafeEndTime and global.\n      timingInfo.endTime = unsafeEndTime\n\n      // 3. Let cacheState be response\u2019s cache state.\n      let cacheState = response.cacheState\n\n      // 4. Let bodyInfo be response\u2019s body info.\n      const bodyInfo = response.bodyInfo\n\n      // 5. If response\u2019s timing allow passed flag is not set, then set timingInfo to the result of creating an\n      //    opaque timing info for timingInfo and set cacheState to the empty string.\n      if (!response.timingAllowPassed) {\n        timingInfo = createOpaqueTimingInfo(timingInfo)\n\n        cacheState = ''\n      }\n\n      // 6. Let responseStatus be 0.\n      let responseStatus = 0\n\n      // 7. If fetchParams\u2019s request\u2019s mode is not \"navigate\" or response\u2019s has-cross-origin-redirects is false:\n      if (fetchParams.request.mode !== 'navigator' || !response.hasCrossOriginRedirects) {\n        // 1. Set responseStatus to response\u2019s status.\n        responseStatus = response.status\n\n        // 2. Let mimeType be the result of extracting a MIME type from response\u2019s header list.\n        const mimeType = extractMimeType(response.headersList)\n\n        // 3. If mimeType is not failure, then set bodyInfo\u2019s content type to the result of minimizing a supported MIME type given mimeType.\n        if (mimeType !== 'failure') {\n          bodyInfo.contentType = minimizeSupportedMimeType(mimeType)\n        }\n      }\n\n      // 8. If fetchParams\u2019s request\u2019s initiator type is non-null, then mark resource timing given timingInfo,\n      //    fetchParams\u2019s request\u2019s URL, fetchParams\u2019s request\u2019s initiator type, global, cacheState, bodyInfo,\n      //    and responseStatus.\n      if (fetchParams.request.initiatorType != null) {\n        markResourceTiming(timingInfo, fetchParams.request.url.href, fetchParams.request.initiatorType, globalThis, cacheState, bodyInfo, responseStatus)\n      }\n    }\n\n    // 4. Let processResponseEndOfBodyTask be the following steps:\n    const processResponseEndOfBodyTask = () => {\n      // 1. Set fetchParams\u2019s request\u2019s done flag.\n      fetchParams.request.done = true\n\n      // 2. If fetchParams\u2019s process response end-of-body is non-null, then run fetchParams\u2019s process\n      //    response end-of-body given response.\n      if (fetchParams.processResponseEndOfBody != null) {\n        queueMicrotask(() => fetchParams.processResponseEndOfBody(response))\n      }\n\n      // 3. If fetchParams\u2019s request\u2019s initiator type is non-null and fetchParams\u2019s request\u2019s client\u2019s\n      //    global object is fetchParams\u2019s task destination, then run fetchParams\u2019s controller\u2019s report\n      //    timing steps given fetchParams\u2019s request\u2019s client\u2019s global object.\n      if (fetchParams.request.initiatorType != null) {\n        fetchParams.controller.reportTimingSteps()\n      }\n    }\n\n    // 5. Queue a fetch task to run processResponseEndOfBodyTask with fetchParams\u2019s task destination\n    queueMicrotask(() => processResponseEndOfBodyTask())\n  }\n\n  // 4. If fetchParams\u2019s process response is non-null, then queue a fetch task to run fetchParams\u2019s\n  //    process response given response, with fetchParams\u2019s task destination.\n  if (fetchParams.processResponse != null) {\n    queueMicrotask(() => {\n      fetchParams.processResponse(response)\n      fetchParams.processResponse = null\n    })\n  }\n\n  // 5. Let internalResponse be response, if response is a network error; otherwise response\u2019s internal response.\n  const internalResponse = response.type === 'error' ? response : (response.internalResponse ?? response)\n\n  // 6. If internalResponse\u2019s body is null, then run processResponseEndOfBody.\n  // 7. Otherwise:\n  if (internalResponse.body == null) {\n    processResponseEndOfBody()\n  } else {\n    // mcollina: all the following steps of the specs are skipped.\n    // The internal transform stream is not needed.\n    // See https://github.com/nodejs/undici/pull/3093#issuecomment-2050198541\n\n    // 1. Let transformStream be a new TransformStream.\n    // 2. Let identityTransformAlgorithm be an algorithm which, given chunk, enqueues chunk in transformStream.\n    // 3. Set up transformStream with transformAlgorithm set to identityTransformAlgorithm and flushAlgorithm\n    //    set to processResponseEndOfBody.\n    // 4. Set internalResponse\u2019s body\u2019s stream to the result of internalResponse\u2019s body\u2019s stream piped through transformStream.\n\n    finished(internalResponse.body.stream, () => {\n      processResponseEndOfBody()\n    })\n  }\n}\n\n// https://fetch.spec.whatwg.org/#http-fetch\nasync function httpFetch (fetchParams) {\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let response be null.\n  let response = null\n\n  // 3. Let actualResponse be null.\n  let actualResponse = null\n\n  // 4. Let timingInfo be fetchParams\u2019s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 5. If request\u2019s service-workers mode is \"all\", then:\n  if (request.serviceWorkers === 'all') {\n    // TODO\n  }\n\n  // 6. If response is null, then:\n  if (response === null) {\n    // 1. If makeCORSPreflight is true and one of these conditions is true:\n    // TODO\n\n    // 2. If request\u2019s redirect mode is \"follow\", then set request\u2019s\n    // service-workers mode to \"none\".\n    if (request.redirect === 'follow') {\n      request.serviceWorkers = 'none'\n    }\n\n    // 3. Set response and actualResponse to the result of running\n    // HTTP-network-or-cache fetch given fetchParams.\n    actualResponse = response = await httpNetworkOrCacheFetch(fetchParams)\n\n    // 4. If request\u2019s response tainting is \"cors\" and a CORS check\n    // for request and response returns failure, then return a network error.\n    if (\n      request.responseTainting === 'cors' &&\n      corsCheck(request, response) === 'failure'\n    ) {\n      return makeNetworkError('cors failure')\n    }\n\n    // 5. If the TAO check for request and response returns failure, then set\n    // request\u2019s timing allow failed flag.\n    if (TAOCheck(request, response) === 'failure') {\n      request.timingAllowFailed = true\n    }\n  }\n\n  // 7. If either request\u2019s response tainting or response\u2019s type\n  // is \"opaque\", and the cross-origin resource policy check with\n  // request\u2019s origin, request\u2019s client, request\u2019s destination,\n  // and actualResponse returns blocked, then return a network error.\n  if (\n    (request.responseTainting === 'opaque' || response.type === 'opaque') &&\n    crossOriginResourcePolicyCheck(\n      request.origin,\n      request.client,\n      request.destination,\n      actualResponse\n    ) === 'blocked'\n  ) {\n    return makeNetworkError('blocked')\n  }\n\n  // 8. If actualResponse\u2019s status is a redirect status, then:\n  if (redirectStatusSet.has(actualResponse.status)) {\n    // 1. If actualResponse\u2019s status is not 303, request\u2019s body is not null,\n    // and the connection uses HTTP/2, then user agents may, and are even\n    // encouraged to, transmit an RST_STREAM frame.\n    // See, https://github.com/whatwg/fetch/issues/1288\n    if (request.redirect !== 'manual') {\n      fetchParams.controller.connection.destroy(undefined, false)\n    }\n\n    // 2. Switch on request\u2019s redirect mode:\n    if (request.redirect === 'error') {\n      // Set response to a network error.\n      response = makeNetworkError('unexpected redirect')\n    } else if (request.redirect === 'manual') {\n      // Set response to an opaque-redirect filtered response whose internal\n      // response is actualResponse.\n      // NOTE(spec): On the web this would return an `opaqueredirect` response,\n      // but that doesn't make sense server side.\n      // See https://github.com/nodejs/undici/issues/1193.\n      response = actualResponse\n    } else if (request.redirect === 'follow') {\n      // Set response to the result of running HTTP-redirect fetch given\n      // fetchParams and response.\n      response = await httpRedirectFetch(fetchParams, response)\n    } else {\n      assert(false)\n    }\n  }\n\n  // 9. Set response\u2019s timing info to timingInfo.\n  response.timingInfo = timingInfo\n\n  // 10. Return response.\n  return response\n}\n\n// https://fetch.spec.whatwg.org/#http-redirect-fetch\nfunction httpRedirectFetch (fetchParams, response) {\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let actualResponse be response, if response is not a filtered response,\n  // and response\u2019s internal response otherwise.\n  const actualResponse = response.internalResponse\n    ? response.internalResponse\n    : response\n\n  // 3. Let locationURL be actualResponse\u2019s location URL given request\u2019s current\n  // URL\u2019s fragment.\n  let locationURL\n\n  try {\n    locationURL = responseLocationURL(\n      actualResponse,\n      requestCurrentURL(request).hash\n    )\n\n    // 4. If locationURL is null, then return response.\n    if (locationURL == null) {\n      return response\n    }\n  } catch (err) {\n    // 5. If locationURL is failure, then return a network error.\n    return Promise.resolve(makeNetworkError(err))\n  }\n\n  // 6. If locationURL\u2019s scheme is not an HTTP(S) scheme, then return a network\n  // error.\n  if (!urlIsHttpHttpsScheme(locationURL)) {\n    return Promise.resolve(makeNetworkError('URL scheme must be a HTTP(S) scheme'))\n  }\n\n  // 7. If request\u2019s redirect count is 20, then return a network error.\n  if (request.redirectCount === 20) {\n    return Promise.resolve(makeNetworkError('redirect count exceeded'))\n  }\n\n  // 8. Increase request\u2019s redirect count by 1.\n  request.redirectCount += 1\n\n  // 9. If request\u2019s mode is \"cors\", locationURL includes credentials, and\n  // request\u2019s origin is not same origin with locationURL\u2019s origin, then return\n  //  a network error.\n  if (\n    request.mode === 'cors' &&\n    (locationURL.username || locationURL.password) &&\n    !sameOrigin(request, locationURL)\n  ) {\n    return Promise.resolve(makeNetworkError('cross origin not allowed for request mode \"cors\"'))\n  }\n\n  // 10. If request\u2019s response tainting is \"cors\" and locationURL includes\n  // credentials, then return a network error.\n  if (\n    request.responseTainting === 'cors' &&\n    (locationURL.username || locationURL.password)\n  ) {\n    return Promise.resolve(makeNetworkError(\n      'URL cannot contain credentials for request mode \"cors\"'\n    ))\n  }\n\n  // 11. If actualResponse\u2019s status is not 303, request\u2019s body is non-null,\n  // and request\u2019s body\u2019s source is null, then return a network error.\n  if (\n    actualResponse.status !== 303 &&\n    request.body != null &&\n    request.body.source == null\n  ) {\n    return Promise.resolve(makeNetworkError())\n  }\n\n  // 12. If one of the following is true\n  // - actualResponse\u2019s status is 301 or 302 and request\u2019s method is `POST`\n  // - actualResponse\u2019s status is 303 and request\u2019s method is not `GET` or `HEAD`\n  if (\n    ([301, 302].includes(actualResponse.status) && request.method === 'POST') ||\n    (actualResponse.status === 303 &&\n      !GET_OR_HEAD.includes(request.method))\n  ) {\n    // then:\n    // 1. Set request\u2019s method to `GET` and request\u2019s body to null.\n    request.method = 'GET'\n    request.body = null\n\n    // 2. For each headerName of request-body-header name, delete headerName from\n    // request\u2019s header list.\n    for (const headerName of requestBodyHeader) {\n      request.headersList.delete(headerName)\n    }\n  }\n\n  // 13. If request\u2019s current URL\u2019s origin is not same origin with locationURL\u2019s\n  //     origin, then for each headerName of CORS non-wildcard request-header name,\n  //     delete headerName from request\u2019s header list.\n  if (!sameOrigin(requestCurrentURL(request), locationURL)) {\n    // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name\n    request.headersList.delete('authorization', true)\n\n    // https://fetch.spec.whatwg.org/#authentication-entries\n    request.headersList.delete('proxy-authorization', true)\n\n    // \"Cookie\" and \"Host\" are forbidden request-headers, which undici doesn't implement.\n    request.headersList.delete('cookie', true)\n    request.headersList.delete('host', true)\n  }\n\n  // 14. If request's body is non-null, then set request's body to the first return\n  // value of safely extracting request's body's source.\n  if (request.body != null) {\n    assert(request.body.source != null)\n    request.body = safelyExtractBody(request.body.source)[0]\n  }\n\n  // 15. Let timingInfo be fetchParams\u2019s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 16. Set timingInfo\u2019s redirect end time and post-redirect start time to the\n  // coarsened shared current time given fetchParams\u2019s cross-origin isolated\n  // capability.\n  timingInfo.redirectEndTime = timingInfo.postRedirectStartTime =\n    coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n\n  // 17. If timingInfo\u2019s redirect start time is 0, then set timingInfo\u2019s\n  //  redirect start time to timingInfo\u2019s start time.\n  if (timingInfo.redirectStartTime === 0) {\n    timingInfo.redirectStartTime = timingInfo.startTime\n  }\n\n  // 18. Append locationURL to request\u2019s URL list.\n  request.urlList.push(locationURL)\n\n  // 19. Invoke set request\u2019s referrer policy on redirect on request and\n  // actualResponse.\n  setRequestReferrerPolicyOnRedirect(request, actualResponse)\n\n  // 20. Return the result of running main fetch given fetchParams and true.\n  return mainFetch(fetchParams, true)\n}\n\n// https://fetch.spec.whatwg.org/#http-network-or-cache-fetch\nasync function httpNetworkOrCacheFetch (\n  fetchParams,\n  isAuthenticationFetch = false,\n  isNewConnectionFetch = false\n) {\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let httpFetchParams be null.\n  let httpFetchParams = null\n\n  // 3. Let httpRequest be null.\n  let httpRequest = null\n\n  // 4. Let response be null.\n  let response = null\n\n  // 5. Let storedResponse be null.\n  // TODO: cache\n\n  // 6. Let httpCache be null.\n  const httpCache = null\n\n  // 7. Let the revalidatingFlag be unset.\n  const revalidatingFlag = false\n\n  // 8. Run these steps, but abort when the ongoing fetch is terminated:\n\n  //    1. If request\u2019s window is \"no-window\" and request\u2019s redirect mode is\n  //    \"error\", then set httpFetchParams to fetchParams and httpRequest to\n  //    request.\n  if (request.window === 'no-window' && request.redirect === 'error') {\n    httpFetchParams = fetchParams\n    httpRequest = request\n  } else {\n    // Otherwise:\n\n    // 1. Set httpRequest to a clone of request.\n    httpRequest = cloneRequest(request)\n\n    // 2. Set httpFetchParams to a copy of fetchParams.\n    httpFetchParams = { ...fetchParams }\n\n    // 3. Set httpFetchParams\u2019s request to httpRequest.\n    httpFetchParams.request = httpRequest\n  }\n\n  //    3. Let includeCredentials be true if one of\n  const includeCredentials =\n    request.credentials === 'include' ||\n    (request.credentials === 'same-origin' &&\n      request.responseTainting === 'basic')\n\n  //    4. Let contentLength be httpRequest\u2019s body\u2019s length, if httpRequest\u2019s\n  //    body is non-null; otherwise null.\n  const contentLength = httpRequest.body ? httpRequest.body.length : null\n\n  //    5. Let contentLengthHeaderValue be null.\n  let contentLengthHeaderValue = null\n\n  //    6. If httpRequest\u2019s body is null and httpRequest\u2019s method is `POST` or\n  //    `PUT`, then set contentLengthHeaderValue to `0`.\n  if (\n    httpRequest.body == null &&\n    ['POST', 'PUT'].includes(httpRequest.method)\n  ) {\n    contentLengthHeaderValue = '0'\n  }\n\n  //    7. If contentLength is non-null, then set contentLengthHeaderValue to\n  //    contentLength, serialized and isomorphic encoded.\n  if (contentLength != null) {\n    contentLengthHeaderValue = isomorphicEncode(`${contentLength}`)\n  }\n\n  //    8. If contentLengthHeaderValue is non-null, then append\n  //    `Content-Length`/contentLengthHeaderValue to httpRequest\u2019s header\n  //    list.\n  if (contentLengthHeaderValue != null) {\n    httpRequest.headersList.append('content-length', contentLengthHeaderValue, true)\n  }\n\n  //    9. If contentLengthHeaderValue is non-null, then append (`Content-Length`,\n  //    contentLengthHeaderValue) to httpRequest\u2019s header list.\n\n  //    10. If contentLength is non-null and httpRequest\u2019s keepalive is true,\n  //    then:\n  if (contentLength != null && httpRequest.keepalive) {\n    // NOTE: keepalive is a noop outside of browser context.\n  }\n\n  //    11. If httpRequest\u2019s referrer is a URL, then append\n  //    `Referer`/httpRequest\u2019s referrer, serialized and isomorphic encoded,\n  //     to httpRequest\u2019s header list.\n  if (webidl.is.URL(httpRequest.referrer)) {\n    httpRequest.headersList.append('referer', isomorphicEncode(httpRequest.referrer.href), true)\n  }\n\n  //    12. Append a request `Origin` header for httpRequest.\n  appendRequestOriginHeader(httpRequest)\n\n  //    13. Append the Fetch metadata headers for httpRequest. [FETCH-METADATA]\n  appendFetchMetadata(httpRequest)\n\n  //    14. If httpRequest\u2019s header list does not contain `User-Agent`, then\n  //    user agents should append `User-Agent`/default `User-Agent` value to\n  //    httpRequest\u2019s header list.\n  if (!httpRequest.headersList.contains('user-agent', true)) {\n    httpRequest.headersList.append('user-agent', defaultUserAgent, true)\n  }\n\n  //    15. If httpRequest\u2019s cache mode is \"default\" and httpRequest\u2019s header\n  //    list contains `If-Modified-Since`, `If-None-Match`,\n  //    `If-Unmodified-Since`, `If-Match`, or `If-Range`, then set\n  //    httpRequest\u2019s cache mode to \"no-store\".\n  if (\n    httpRequest.cache === 'default' &&\n    (httpRequest.headersList.contains('if-modified-since', true) ||\n      httpRequest.headersList.contains('if-none-match', true) ||\n      httpRequest.headersList.contains('if-unmodified-since', true) ||\n      httpRequest.headersList.contains('if-match', true) ||\n      httpRequest.headersList.contains('if-range', true))\n  ) {\n    httpRequest.cache = 'no-store'\n  }\n\n  //    16. If httpRequest\u2019s cache mode is \"no-cache\", httpRequest\u2019s prevent\n  //    no-cache cache-control header modification flag is unset, and\n  //    httpRequest\u2019s header list does not contain `Cache-Control`, then append\n  //    `Cache-Control`/`max-age=0` to httpRequest\u2019s header list.\n  if (\n    httpRequest.cache === 'no-cache' &&\n    !httpRequest.preventNoCacheCacheControlHeaderModification &&\n    !httpRequest.headersList.contains('cache-control', true)\n  ) {\n    httpRequest.headersList.append('cache-control', 'max-age=0', true)\n  }\n\n  //    17. If httpRequest\u2019s cache mode is \"no-store\" or \"reload\", then:\n  if (httpRequest.cache === 'no-store' || httpRequest.cache === 'reload') {\n    // 1. If httpRequest\u2019s header list does not contain `Pragma`, then append\n    // `Pragma`/`no-cache` to httpRequest\u2019s header list.\n    if (!httpRequest.headersList.contains('pragma', true)) {\n      httpRequest.headersList.append('pragma', 'no-cache', true)\n    }\n\n    // 2. If httpRequest\u2019s header list does not contain `Cache-Control`,\n    // then append `Cache-Control`/`no-cache` to httpRequest\u2019s header list.\n    if (!httpRequest.headersList.contains('cache-control', true)) {\n      httpRequest.headersList.append('cache-control', 'no-cache', true)\n    }\n  }\n\n  //    18. If httpRequest\u2019s header list contains `Range`, then append\n  //    `Accept-Encoding`/`identity` to httpRequest\u2019s header list.\n  if (httpRequest.headersList.contains('range', true)) {\n    httpRequest.headersList.append('accept-encoding', 'identity', true)\n  }\n\n  //    19. Modify httpRequest\u2019s header list per HTTP. Do not append a given\n  //    header if httpRequest\u2019s header list contains that header\u2019s name.\n  //    TODO: https://github.com/whatwg/fetch/issues/1285#issuecomment-896560129\n  if (!httpRequest.headersList.contains('accept-encoding', true)) {\n    if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) {\n      httpRequest.headersList.append('accept-encoding', 'br, gzip, deflate', true)\n    } else {\n      httpRequest.headersList.append('accept-encoding', 'gzip, deflate', true)\n    }\n  }\n\n  httpRequest.headersList.delete('host', true)\n\n  //    21. If includeCredentials is true, then:\n  if (includeCredentials) {\n    // 1. If the user agent is not configured to block cookies for httpRequest\n    // (see section 7 of [COOKIES]), then:\n    // TODO: credentials\n\n    // 2. If httpRequest\u2019s header list does not contain `Authorization`, then:\n    if (!httpRequest.headersList.contains('authorization', true)) {\n      // 1. Let authorizationValue be null.\n      let authorizationValue = null\n\n      // 2. If there\u2019s an authentication entry for httpRequest and either\n      //    httpRequest\u2019s use-URL-credentials flag is unset or httpRequest\u2019s\n      //    current URL does not include credentials, then set\n      //    authorizationValue to authentication entry.\n      if (hasAuthenticationEntry(httpRequest) && (\n        httpRequest.useURLCredentials === undefined || !includesCredentials(requestCurrentURL(httpRequest))\n      )) {\n        // TODO\n      } else if (includesCredentials(requestCurrentURL(httpRequest)) && isAuthenticationFetch) {\n        // 3. Otherwise, if httpRequest\u2019s current URL does include credentials\n        //    and isAuthenticationFetch is true, set authorizationValue to\n        //    httpRequest\u2019s current URL, converted to an `Authorization` value\n        const { username, password } = requestCurrentURL(httpRequest)\n        authorizationValue = `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`\n      }\n\n      // 4. If authorizationValue is non-null, then append (`Authorization`,\n      //    authorizationValue) to httpRequest\u2019s header list.\n      if (authorizationValue !== null) {\n        httpRequest.headersList.append('Authorization', authorizationValue, false)\n      }\n    }\n  }\n\n  //    21. If there\u2019s a proxy-authentication entry, use it as appropriate.\n  //    TODO: proxy-authentication\n\n  //    22. Set httpCache to the result of determining the HTTP cache\n  //    partition, given httpRequest.\n  //    TODO: cache\n\n  //    23. If httpCache is null, then set httpRequest\u2019s cache mode to\n  //    \"no-store\".\n  if (httpCache == null) {\n    httpRequest.cache = 'no-store'\n  }\n\n  //    24. If httpRequest\u2019s cache mode is neither \"no-store\" nor \"reload\",\n  //    then:\n  if (httpRequest.cache !== 'no-store' && httpRequest.cache !== 'reload') {\n    // TODO: cache\n  }\n\n  // 9. If aborted, then return the appropriate network error for fetchParams.\n  // TODO\n\n  // 10. If response is null, then:\n  if (response == null) {\n    // 1. If httpRequest\u2019s cache mode is \"only-if-cached\", then return a\n    // network error.\n    if (httpRequest.cache === 'only-if-cached') {\n      return makeNetworkError('only if cached')\n    }\n\n    // 2. Let forwardResponse be the result of running HTTP-network fetch\n    // given httpFetchParams, includeCredentials, and isNewConnectionFetch.\n    const forwardResponse = await httpNetworkFetch(\n      httpFetchParams,\n      includeCredentials,\n      isNewConnectionFetch\n    )\n\n    // 3. If httpRequest\u2019s method is unsafe and forwardResponse\u2019s status is\n    // in the range 200 to 399, inclusive, invalidate appropriate stored\n    // responses in httpCache, as per the \"Invalidation\" chapter of HTTP\n    // Caching, and set storedResponse to null. [HTTP-CACHING]\n    if (\n      !safeMethodsSet.has(httpRequest.method) &&\n      forwardResponse.status >= 200 &&\n      forwardResponse.status <= 399\n    ) {\n      // TODO: cache\n    }\n\n    // 4. If the revalidatingFlag is set and forwardResponse\u2019s status is 304,\n    // then:\n    if (revalidatingFlag && forwardResponse.status === 304) {\n      // TODO: cache\n    }\n\n    // 5. If response is null, then:\n    if (response == null) {\n      // 1. Set response to forwardResponse.\n      response = forwardResponse\n\n      // 2. Store httpRequest and forwardResponse in httpCache, as per the\n      // \"Storing Responses in Caches\" chapter of HTTP Caching. [HTTP-CACHING]\n      // TODO: cache\n    }\n  }\n\n  // 11. Set response\u2019s URL list to a clone of httpRequest\u2019s URL list.\n  response.urlList = [...httpRequest.urlList]\n\n  // 12. If httpRequest\u2019s header list contains `Range`, then set response\u2019s\n  // range-requested flag.\n  if (httpRequest.headersList.contains('range', true)) {\n    response.rangeRequested = true\n  }\n\n  // 13. Set response\u2019s request-includes-credentials to includeCredentials.\n  response.requestIncludesCredentials = includeCredentials\n\n  // 14. If response\u2019s status is 401, httpRequest\u2019s response tainting is not \"cors\",\n  //     includeCredentials is true, and request\u2019s traversable for user prompts is\n  //     a traversable navigable:\n  //\n  //     In Node.js there is no traversable navigable to prompt the user, but we\n  //     still need to handle URL-embedded credentials so authentication retries\n  //     for WebSocket handshakes continue to work.\n  if (response.status === 401 && httpRequest.responseTainting !== 'cors' && includeCredentials && (\n    request.useURLCredentials !== undefined ||\n    isTraversableNavigable(request.traversableForUserPrompts)\n  )) {\n    // 2. If request\u2019s body is non-null, then:\n    if (request.body != null) {\n      // 1. If request\u2019s body\u2019s source is null, then return a network error.\n      if (request.body.source == null) {\n        // Note: In Node.js, this code path should not be reached because\n        // isTraversableNavigable() returns false for non-navigable contexts.\n        // However, we handle it gracefully by returning the response instead of\n        // a network error, as we won't actually retry the request.\n        // This aligns with the Fetch spec discussion in whatwg/fetch#1132,\n        // which allows implementations flexibility when credentials can't be obtained.\n        return response\n      }\n\n      // 2. Set request\u2019s body to the body of the result of safely extracting\n      //    request\u2019s body\u2019s source.\n      request.body = safelyExtractBody(request.body.source)[0]\n    }\n\n    // 3. If request\u2019s use-URL-credentials flag is unset or isAuthenticationFetch is\n    //    true, then:\n    if (request.useURLCredentials === undefined || isAuthenticationFetch) {\n      // 1. If fetchParams is canceled, then return the appropriate network error\n      //    for fetchParams.\n      if (isCancelled(fetchParams)) {\n        return makeAppropriateNetworkError(fetchParams)\n      }\n\n      // 2. Let username and password be the result of prompting the end user for a\n      //    username and password, respectively, in request\u2019s traversable for user prompts.\n      // TODO\n\n      // 3. Set the username given request\u2019s current URL and username.\n      // requestCurrentURL(request).username = TODO\n\n      // 4. Set the password given request\u2019s current URL and password.\n      // requestCurrentURL(request).password = TODO\n\n      // In browsers, the user will be prompted to enter a username/password before the request\n      // is re-sent. To prevent an infinite 401 loop, return the response for now.\n      // https://github.com/nodejs/undici/pull/4756\n      return response\n    }\n\n    // 4. Set response to the result of running HTTP-network-or-cache fetch given\n    //    fetchParams and true.\n    fetchParams.controller.connection.destroy()\n\n    response = await httpNetworkOrCacheFetch(fetchParams, true)\n  }\n\n  // 15. If response\u2019s status is 407, then:\n  if (response.status === 407) {\n    // 1. If request\u2019s window is \"no-window\", then return a network error.\n    if (request.window === 'no-window') {\n      return makeNetworkError()\n    }\n\n    // 2. ???\n\n    // 3. If fetchParams is canceled, then return the appropriate network error for fetchParams.\n    if (isCancelled(fetchParams)) {\n      return makeAppropriateNetworkError(fetchParams)\n    }\n\n    // 4. Prompt the end user as appropriate in request\u2019s window and store\n    // the result as a proxy-authentication entry. [HTTP-AUTH]\n    // TODO: Invoke some kind of callback?\n\n    // 5. Set response to the result of running HTTP-network-or-cache fetch given\n    // fetchParams.\n    // TODO\n    return makeNetworkError('proxy authentication required')\n  }\n\n  // 16. If all of the following are true\n  if (\n    // response\u2019s status is 421\n    response.status === 421 &&\n    // isNewConnectionFetch is false\n    !isNewConnectionFetch &&\n    // request\u2019s body is null, or request\u2019s body is non-null and request\u2019s body\u2019s source is non-null\n    (request.body == null || request.body.source != null)\n  ) {\n    // then:\n\n    // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams.\n    if (isCancelled(fetchParams)) {\n      return makeAppropriateNetworkError(fetchParams)\n    }\n\n    // 2. Set response to the result of running HTTP-network-or-cache\n    // fetch given fetchParams, isAuthenticationFetch, and true.\n\n    // TODO (spec): The spec doesn't specify this but we need to cancel\n    // the active response before we can start a new one.\n    // https://github.com/whatwg/fetch/issues/1293\n    fetchParams.controller.connection.destroy()\n\n    response = await httpNetworkOrCacheFetch(\n      fetchParams,\n      isAuthenticationFetch,\n      true\n    )\n  }\n\n  // 17. If isAuthenticationFetch is true, then create an authentication entry\n  if (isAuthenticationFetch) {\n    // TODO\n  }\n\n  // 18. Return response.\n  return response\n}\n\n// https://fetch.spec.whatwg.org/#http-network-fetch\nasync function httpNetworkFetch (\n  fetchParams,\n  includeCredentials = false,\n  forceNewConnection = false\n) {\n  assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed)\n\n  fetchParams.controller.connection = {\n    abort: null,\n    destroyed: false,\n    destroy (err, abort = true) {\n      if (!this.destroyed) {\n        this.destroyed = true\n        if (abort) {\n          this.abort?.(err ?? new DOMException('The operation was aborted.', 'AbortError'))\n        }\n      }\n    }\n  }\n\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let response be null.\n  let response = null\n\n  // 3. Let timingInfo be fetchParams\u2019s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 4. Let httpCache be the result of determining the HTTP cache partition,\n  // given request.\n  // TODO: cache\n  const httpCache = null\n\n  // 5. If httpCache is null, then set request\u2019s cache mode to \"no-store\".\n  if (httpCache == null) {\n    request.cache = 'no-store'\n  }\n\n  // 6. Let networkPartitionKey be the result of determining the network\n  // partition key given request.\n  // TODO\n\n  // 7. Let newConnection be \"yes\" if forceNewConnection is true; otherwise\n  // \"no\".\n  const newConnection = forceNewConnection ? 'yes' : 'no' // eslint-disable-line no-unused-vars\n\n  // 8. Switch on request\u2019s mode:\n  if (request.mode === 'websocket') {\n    // Let connection be the result of obtaining a WebSocket connection,\n    // given request\u2019s current URL.\n    // TODO\n  } else {\n    // Let connection be the result of obtaining a connection, given\n    // networkPartitionKey, request\u2019s current URL\u2019s origin,\n    // includeCredentials, and forceNewConnection.\n    // TODO\n  }\n\n  // 9. Run these steps, but abort when the ongoing fetch is terminated:\n\n  //    1. If connection is failure, then return a network error.\n\n  //    2. Set timingInfo\u2019s final connection timing info to the result of\n  //    calling clamp and coarsen connection timing info with connection\u2019s\n  //    timing info, timingInfo\u2019s post-redirect start time, and fetchParams\u2019s\n  //    cross-origin isolated capability.\n\n  //    3. If connection is not an HTTP/2 connection, request\u2019s body is non-null,\n  //    and request\u2019s body\u2019s source is null, then append (`Transfer-Encoding`,\n  //    `chunked`) to request\u2019s header list.\n\n  //    4. Set timingInfo\u2019s final network-request start time to the coarsened\n  //    shared current time given fetchParams\u2019s cross-origin isolated\n  //    capability.\n\n  //    5. Set response to the result of making an HTTP request over connection\n  //    using request with the following caveats:\n\n  //        - Follow the relevant requirements from HTTP. [HTTP] [HTTP-SEMANTICS]\n  //        [HTTP-COND] [HTTP-CACHING] [HTTP-AUTH]\n\n  //        - If request\u2019s body is non-null, and request\u2019s body\u2019s source is null,\n  //        then the user agent may have a buffer of up to 64 kibibytes and store\n  //        a part of request\u2019s body in that buffer. If the user agent reads from\n  //        request\u2019s body beyond that buffer\u2019s size and the user agent needs to\n  //        resend request, then instead return a network error.\n\n  //        - Set timingInfo\u2019s final network-response start time to the coarsened\n  //        shared current time given fetchParams\u2019s cross-origin isolated capability,\n  //        immediately after the user agent\u2019s HTTP parser receives the first byte\n  //        of the response (e.g., frame header bytes for HTTP/2 or response status\n  //        line for HTTP/1.x).\n\n  //        - Wait until all the headers are transmitted.\n\n  //        - Any responses whose status is in the range 100 to 199, inclusive,\n  //        and is not 101, are to be ignored, except for the purposes of setting\n  //        timingInfo\u2019s final network-response start time above.\n\n  //    - If request\u2019s header list contains `Transfer-Encoding`/`chunked` and\n  //    response is transferred via HTTP/1.0 or older, then return a network\n  //    error.\n\n  //    - If the HTTP request results in a TLS client certificate dialog, then:\n\n  //        1. If request\u2019s window is an environment settings object, make the\n  //        dialog available in request\u2019s window.\n\n  //        2. Otherwise, return a network error.\n\n  // To transmit request\u2019s body body, run these steps:\n  let requestBody = null\n  // 1. If body is null and fetchParams\u2019s process request end-of-body is\n  // non-null, then queue a fetch task given fetchParams\u2019s process request\n  // end-of-body and fetchParams\u2019s task destination.\n  if (request.body == null && fetchParams.processRequestEndOfBody) {\n    queueMicrotask(() => fetchParams.processRequestEndOfBody())\n  } else if (request.body != null) {\n    // 2. Otherwise, if body is non-null:\n\n    //    1. Let processBodyChunk given bytes be these steps:\n    const processBodyChunk = async function * (bytes) {\n      // 1. If the ongoing fetch is terminated, then abort these steps.\n      if (isCancelled(fetchParams)) {\n        return\n      }\n\n      // 2. Run this step in parallel: transmit bytes.\n      yield bytes\n\n      // 3. If fetchParams\u2019s process request body is non-null, then run\n      // fetchParams\u2019s process request body given bytes\u2019s length.\n      fetchParams.processRequestBodyChunkLength?.(bytes.byteLength)\n    }\n\n    // 2. Let processEndOfBody be these steps:\n    const processEndOfBody = () => {\n      // 1. If fetchParams is canceled, then abort these steps.\n      if (isCancelled(fetchParams)) {\n        return\n      }\n\n      // 2. If fetchParams\u2019s process request end-of-body is non-null,\n      // then run fetchParams\u2019s process request end-of-body.\n      if (fetchParams.processRequestEndOfBody) {\n        fetchParams.processRequestEndOfBody()\n      }\n    }\n\n    // 3. Let processBodyError given e be these steps:\n    const processBodyError = (e) => {\n      // 1. If fetchParams is canceled, then abort these steps.\n      if (isCancelled(fetchParams)) {\n        return\n      }\n\n      // 2. If e is an \"AbortError\" DOMException, then abort fetchParams\u2019s controller.\n      if (e.name === 'AbortError') {\n        fetchParams.controller.abort()\n      } else {\n        fetchParams.controller.terminate(e)\n      }\n    }\n\n    // 4. Incrementally read request\u2019s body given processBodyChunk, processEndOfBody,\n    // processBodyError, and fetchParams\u2019s task destination.\n    requestBody = (async function * () {\n      try {\n        for await (const bytes of request.body.stream) {\n          yield * processBodyChunk(bytes)\n        }\n        processEndOfBody()\n      } catch (err) {\n        processBodyError(err)\n      }\n    })()\n  }\n\n  try {\n    // socket is only provided for websockets\n    const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody })\n\n    if (socket) {\n      response = makeResponse({ status, statusText, headersList, socket })\n    } else {\n      const iterator = body[Symbol.asyncIterator]()\n      fetchParams.controller.next = () => iterator.next()\n\n      response = makeResponse({ status, statusText, headersList })\n    }\n  } catch (err) {\n    // 10. If aborted, then:\n    if (err.name === 'AbortError') {\n      // 1. If connection uses HTTP/2, then transmit an RST_STREAM frame.\n      fetchParams.controller.connection.destroy()\n\n      // 2. Return the appropriate network error for fetchParams.\n      return makeAppropriateNetworkError(fetchParams, err)\n    }\n\n    return makeNetworkError(err)\n  }\n\n  // 11. Let pullAlgorithm be an action that resumes the ongoing fetch\n  // if it is suspended.\n  const pullAlgorithm = () => {\n    return fetchParams.controller.resume()\n  }\n\n  // 12. Let cancelAlgorithm be an algorithm that aborts fetchParams\u2019s\n  // controller with reason, given reason.\n  const cancelAlgorithm = (reason) => {\n    // If the aborted fetch was already terminated, then we do not\n    // need to do anything.\n    if (!isCancelled(fetchParams)) {\n      fetchParams.controller.abort(reason)\n    }\n  }\n\n  // 13. Let highWaterMark be a non-negative, non-NaN number, chosen by\n  // the user agent.\n  // TODO\n\n  // 14. Let sizeAlgorithm be an algorithm that accepts a chunk object\n  // and returns a non-negative, non-NaN, non-infinite number, chosen by the user agent.\n  // TODO\n\n  // 15. Let stream be a new ReadableStream.\n  // 16. Set up stream with byte reading support with pullAlgorithm set to pullAlgorithm,\n  //     cancelAlgorithm set to cancelAlgorithm.\n  const stream = new ReadableStream(\n    {\n      start (controller) {\n        fetchParams.controller.controller = controller\n      },\n      pull: pullAlgorithm,\n      cancel: cancelAlgorithm,\n      type: 'bytes'\n    }\n  )\n\n  // 17. Run these steps, but abort when the ongoing fetch is terminated:\n\n  //    1. Set response\u2019s body to a new body whose stream is stream.\n  response.body = { stream, source: null, length: null }\n\n  //    2. If response is not a network error and request\u2019s cache mode is\n  //    not \"no-store\", then update response in httpCache for request.\n  //    TODO\n\n  //    3. If includeCredentials is true and the user agent is not configured\n  //    to block cookies for request (see section 7 of [COOKIES]), then run the\n  //    \"set-cookie-string\" parsing algorithm (see section 5.2 of [COOKIES]) on\n  //    the value of each header whose name is a byte-case-insensitive match for\n  //    `Set-Cookie` in response\u2019s header list, if any, and request\u2019s current URL.\n  //    TODO\n\n  // 18. If aborted, then:\n  // TODO\n\n  // 19. Run these steps in parallel:\n\n  //    1. Run these steps, but abort when fetchParams is canceled:\n  if (!fetchParams.controller.resume) {\n    fetchParams.controller.on('terminated', onAborted)\n  }\n\n  fetchParams.controller.resume = async () => {\n    // 1. While true\n    while (true) {\n      // 1-3. See onData...\n\n      // 4. Set bytes to the result of handling content codings given\n      // codings and bytes.\n      let bytes\n      let isFailure\n      try {\n        const { done, value } = await fetchParams.controller.next()\n\n        if (isAborted(fetchParams)) {\n          break\n        }\n\n        bytes = done ? undefined : value\n      } catch (err) {\n        if (fetchParams.controller.ended && !timingInfo.encodedBodySize) {\n          // zlib doesn't like empty streams.\n          bytes = undefined\n        } else {\n          bytes = err\n\n          // err may be propagated from the result of calling readablestream.cancel,\n          // which might not be an error. https://github.com/nodejs/undici/issues/2009\n          isFailure = true\n        }\n      }\n\n      if (bytes === undefined) {\n        // 2. Otherwise, if the bytes transmission for response\u2019s message\n        // body is done normally and stream is readable, then close\n        // stream, finalize response for fetchParams and response, and\n        // abort these in-parallel steps.\n        readableStreamClose(fetchParams.controller.controller)\n\n        finalizeResponse(fetchParams, response)\n\n        return\n      }\n\n      // 5. Increase timingInfo\u2019s decoded body size by bytes\u2019s length.\n      timingInfo.decodedBodySize += bytes?.byteLength ?? 0\n\n      // 6. If bytes is failure, then terminate fetchParams\u2019s controller.\n      if (isFailure) {\n        fetchParams.controller.terminate(bytes)\n        return\n      }\n\n      // 7. Enqueue a Uint8Array wrapping an ArrayBuffer containing bytes\n      // into stream.\n      const buffer = new Uint8Array(bytes)\n      if (buffer.byteLength) {\n        fetchParams.controller.controller.enqueue(buffer)\n      }\n\n      // 8. If stream is errored, then terminate the ongoing fetch.\n      if (isErrored(stream)) {\n        fetchParams.controller.terminate()\n        return\n      }\n\n      // 9. If stream doesn\u2019t need more data ask the user agent to suspend\n      // the ongoing fetch.\n      if (fetchParams.controller.controller.desiredSize <= 0) {\n        return\n      }\n    }\n  }\n\n  //    2. If aborted, then:\n  function onAborted (reason) {\n    // 2. If fetchParams is aborted, then:\n    if (isAborted(fetchParams)) {\n      // 1. Set response\u2019s aborted flag.\n      response.aborted = true\n\n      // 2. If stream is readable, then error stream with the result of\n      //    deserialize a serialized abort reason given fetchParams\u2019s\n      //    controller\u2019s serialized abort reason and an\n      //    implementation-defined realm.\n      if (isReadable(stream)) {\n        fetchParams.controller.controller.error(\n          fetchParams.controller.serializedAbortReason\n        )\n      }\n    } else {\n      // 3. Otherwise, if stream is readable, error stream with a TypeError.\n      if (isReadable(stream)) {\n        fetchParams.controller.controller.error(new TypeError('terminated', {\n          cause: isErrorLike(reason) ? reason : undefined\n        }))\n      }\n    }\n\n    // 4. If connection uses HTTP/2, then transmit an RST_STREAM frame.\n    // 5. Otherwise, the user agent should close connection unless it would be bad for performance to do so.\n    fetchParams.controller.connection.destroy()\n  }\n\n  // 20. Return response.\n  return response\n\n  function dispatch ({ body }) {\n    const url = requestCurrentURL(request)\n    /** @type {import('../../..').Agent} */\n    const agent = fetchParams.controller.dispatcher\n\n    const path = url.pathname + url.search\n    const hasTrailingQuestionMark = url.search.length === 0 && url.href[url.href.length - url.hash.length - 1] === '?'\n\n    return new Promise((resolve, reject) => agent.dispatch(\n      {\n        path: hasTrailingQuestionMark ? `${path}?` : path,\n        origin: url.origin,\n        method: request.method,\n        body: agent.isMockActive ? request.body && (request.body.source || request.body.stream) : body,\n        headers: request.headersList.entries,\n        maxRedirections: 0,\n        upgrade: request.mode === 'websocket' ? 'websocket' : undefined\n      },\n      {\n        body: null,\n        abort: null,\n\n        onConnect (abort) {\n          // TODO (fix): Do we need connection here?\n          const { connection } = fetchParams.controller\n\n          // Set timingInfo\u2019s final connection timing info to the result of calling clamp and coarsen\n          // connection timing info with connection\u2019s timing info, timingInfo\u2019s post-redirect start\n          // time, and fetchParams\u2019s cross-origin isolated capability.\n          // TODO: implement connection timing\n          timingInfo.finalConnectionTimingInfo = clampAndCoarsenConnectionTimingInfo(undefined, timingInfo.postRedirectStartTime, fetchParams.crossOriginIsolatedCapability)\n\n          if (connection.destroyed) {\n            abort(new DOMException('The operation was aborted.', 'AbortError'))\n          } else {\n            fetchParams.controller.on('terminated', abort)\n            this.abort = connection.abort = abort\n          }\n\n          // Set timingInfo\u2019s final network-request start time to the coarsened shared current time given\n          // fetchParams\u2019s cross-origin isolated capability.\n          timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n        },\n\n        onResponseStarted () {\n          // Set timingInfo\u2019s final network-response start time to the coarsened shared current\n          // time given fetchParams\u2019s cross-origin isolated capability, immediately after the\n          // user agent\u2019s HTTP parser receives the first byte of the response (e.g., frame header\n          // bytes for HTTP/2 or response status line for HTTP/1.x).\n          timingInfo.finalNetworkResponseStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n        },\n\n        onHeaders (status, rawHeaders, resume, statusText) {\n          if (status < 200) {\n            return false\n          }\n\n          const headersList = new HeadersList()\n\n          for (let i = 0; i < rawHeaders.length; i += 2) {\n            const nameStr = bufferToLowerCasedHeaderName(rawHeaders[i])\n            const value = rawHeaders[i + 1]\n            if (Array.isArray(value) && !Buffer.isBuffer(rawHeaders[i + 1])) {\n              for (const val of value) {\n                headersList.append(nameStr, val.toString('latin1'), true)\n              }\n            } else {\n              headersList.append(nameStr, value.toString('latin1'), true)\n            }\n          }\n          const location = headersList.get('location', true)\n\n          this.body = new Readable({ read: resume })\n\n          const willFollow = location && request.redirect === 'follow' &&\n            redirectStatusSet.has(status)\n\n          const decoders = []\n\n          // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding\n          if (request.method !== 'HEAD' && request.method !== 'CONNECT' && !nullBodyStatus.includes(status) && !willFollow) {\n            // https://www.rfc-editor.org/rfc/rfc7231#section-3.1.2.1\n            const contentEncoding = headersList.get('content-encoding', true)\n            // \"All content-coding values are case-insensitive...\"\n            /** @type {string[]} */\n            const codings = contentEncoding ? contentEncoding.toLowerCase().split(',') : []\n\n            // Limit the number of content-encodings to prevent resource exhaustion.\n            // CVE fix similar to urllib3 (GHSA-gm62-xv2j-4w53) and curl (CVE-2022-32206).\n            const maxContentEncodings = 5\n            if (codings.length > maxContentEncodings) {\n              reject(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`))\n              return true\n            }\n\n            for (let i = codings.length - 1; i >= 0; --i) {\n              const coding = codings[i].trim()\n              // https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2\n              if (coding === 'x-gzip' || coding === 'gzip') {\n                decoders.push(zlib.createGunzip({\n                  // Be less strict when decoding compressed responses, since sometimes\n                  // servers send slightly invalid responses that are still accepted\n                  // by common browsers.\n                  // Always using Z_SYNC_FLUSH is what cURL does.\n                  flush: zlib.constants.Z_SYNC_FLUSH,\n                  finishFlush: zlib.constants.Z_SYNC_FLUSH\n                }))\n              } else if (coding === 'deflate') {\n                decoders.push(createInflate({\n                  flush: zlib.constants.Z_SYNC_FLUSH,\n                  finishFlush: zlib.constants.Z_SYNC_FLUSH\n                }))\n              } else if (coding === 'br') {\n                decoders.push(zlib.createBrotliDecompress({\n                  flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n                  finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH\n                }))\n              } else if (coding === 'zstd' && hasZstd) {\n                decoders.push(zlib.createZstdDecompress({\n                  flush: zlib.constants.ZSTD_e_continue,\n                  finishFlush: zlib.constants.ZSTD_e_end\n                }))\n              } else {\n                decoders.length = 0\n                break\n              }\n            }\n          }\n\n          const onError = this.onError.bind(this)\n\n          resolve({\n            status,\n            statusText,\n            headersList,\n            body: decoders.length\n              ? pipeline(this.body, ...decoders, (err) => {\n                if (err) {\n                  this.onError(err)\n                }\n              }).on('error', onError)\n              : this.body.on('error', onError)\n          })\n\n          return true\n        },\n\n        onData (chunk) {\n          if (fetchParams.controller.dump) {\n            return\n          }\n\n          // 1. If one or more bytes have been transmitted from response\u2019s\n          // message body, then:\n\n          //  1. Let bytes be the transmitted bytes.\n          const bytes = chunk\n\n          //  2. Let codings be the result of extracting header list values\n          //  given `Content-Encoding` and response\u2019s header list.\n          //  See pullAlgorithm.\n\n          //  3. Increase timingInfo\u2019s encoded body size by bytes\u2019s length.\n          timingInfo.encodedBodySize += bytes.byteLength\n\n          //  4. See pullAlgorithm...\n\n          return this.body.push(bytes)\n        },\n\n        onComplete () {\n          if (this.abort) {\n            fetchParams.controller.off('terminated', this.abort)\n          }\n\n          fetchParams.controller.ended = true\n\n          this.body.push(null)\n        },\n\n        onError (error) {\n          if (this.abort) {\n            fetchParams.controller.off('terminated', this.abort)\n          }\n\n          this.body?.destroy(error)\n\n          fetchParams.controller.terminate(error)\n\n          reject(error)\n        },\n\n        onRequestUpgrade (_controller, status, headers, socket) {\n          // We need to support 200 for websocket over h2 as per RFC-8441\n          // Absence of session means H1\n          if ((socket.session != null && status !== 200) || (socket.session == null && status !== 101)) {\n            return false\n          }\n\n          const headersList = new HeadersList()\n\n          for (const [name, value] of Object.entries(headers)) {\n            if (value == null) {\n              continue\n            }\n\n            const headerName = name.toLowerCase()\n\n            if (Array.isArray(value)) {\n              for (const entry of value) {\n                headersList.append(headerName, String(entry), true)\n              }\n            } else {\n              headersList.append(headerName, String(value), true)\n            }\n          }\n\n          resolve({\n            status,\n            statusText: STATUS_CODES[status],\n            headersList,\n            socket\n          })\n\n          return true\n        },\n\n        onUpgrade (status, rawHeaders, socket) {\n          // We need to support 200 for websocket over h2 as per RFC-8441\n          // Absence of session means H1\n          if ((socket.session != null && status !== 200) || (socket.session == null && status !== 101)) {\n            return false\n          }\n\n          const headersList = new HeadersList()\n\n          for (let i = 0; i < rawHeaders.length; i += 2) {\n            const nameStr = bufferToLowerCasedHeaderName(rawHeaders[i])\n            const value = rawHeaders[i + 1]\n            if (Array.isArray(value) && !Buffer.isBuffer(rawHeaders[i + 1])) {\n              for (const val of value) {\n                headersList.append(nameStr, val.toString('latin1'), true)\n              }\n            } else {\n              headersList.append(nameStr, value.toString('latin1'), true)\n            }\n          }\n\n          resolve({\n            status,\n            statusText: STATUS_CODES[status],\n            headersList,\n            socket\n          })\n\n          return true\n        }\n      }\n    ))\n  }\n}\n\nmodule.exports = {\n  fetch,\n  Fetch,\n  fetching,\n  finalizeAndReportTiming\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { URLSerializer } = require('../fetch/data-url')\nconst { isValidHeaderName } = require('../fetch/util')\n\n/**\n * @see https://url.spec.whatwg.org/#concept-url-equals\n * @param {URL} A\n * @param {URL} B\n * @param {boolean | undefined} excludeFragment\n * @returns {boolean}\n */\nfunction urlEquals (A, B, excludeFragment = false) {\n  const serializedA = URLSerializer(A, excludeFragment)\n\n  const serializedB = URLSerializer(B, excludeFragment)\n\n  return serializedA === serializedB\n}\n\n/**\n * @see https://github.com/chromium/chromium/blob/694d20d134cb553d8d89e5500b9148012b1ba299/content/browser/cache_storage/cache_storage_cache.cc#L260-L262\n * @param {string} header\n */\nfunction getFieldValues (header) {\n  assert(header !== null)\n\n  const values = []\n\n  for (let value of header.split(',')) {\n    value = value.trim()\n\n    if (isValidHeaderName(value)) {\n      values.push(value)\n    }\n  }\n\n  return values\n}\n\nmodule.exports = {\n  urlEquals,\n  getFieldValues\n}\n", "'use strict'\n\nconst assert = require('node:assert')\n\nconst { kConstruct } = require('../../core/symbols')\nconst { urlEquals, getFieldValues } = require('./util')\nconst { kEnumerableProperty, isDisturbed } = require('../../core/util')\nconst { webidl } = require('../webidl')\nconst { cloneResponse, fromInnerResponse, getResponseState } = require('../fetch/response')\nconst { Request, fromInnerRequest, getRequestState } = require('../fetch/request')\nconst { fetching } = require('../fetch/index')\nconst { urlIsHttpHttpsScheme, readAllBytes } = require('../fetch/util')\nconst { createDeferredPromise } = require('../../util/promise')\n\n/**\n * @see https://w3c.github.io/ServiceWorker/#dfn-cache-batch-operation\n * @typedef {Object} CacheBatchOperation\n * @property {'delete' | 'put'} type\n * @property {any} request\n * @property {any} response\n * @property {import('../../../types/cache').CacheQueryOptions} options\n */\n\n/**\n * @see https://w3c.github.io/ServiceWorker/#dfn-request-response-list\n * @typedef {[any, any][]} requestResponseList\n */\n\nclass Cache {\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list\n   * @type {requestResponseList}\n   */\n  #relevantRequestResponseList\n\n  constructor () {\n    if (arguments[0] !== kConstruct) {\n      webidl.illegalConstructor()\n    }\n\n    webidl.util.markAsUncloneable(this)\n    this.#relevantRequestResponseList = arguments[1]\n  }\n\n  async match (request, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.match'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    const p = this.#internalMatchAll(request, options, 1)\n\n    if (p.length === 0) {\n      return\n    }\n\n    return p[0]\n  }\n\n  async matchAll (request = undefined, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.matchAll'\n    if (request !== undefined) request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    return this.#internalMatchAll(request, options)\n  }\n\n  async add (request) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.add'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n\n    // 1.\n    const requests = [request]\n\n    // 2.\n    const responseArrayPromise = this.addAll(requests)\n\n    // 3.\n    return await responseArrayPromise\n  }\n\n  async addAll (requests) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.addAll'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    // 1.\n    const responsePromises = []\n\n    // 2.\n    const requestList = []\n\n    // 3.\n    for (let request of requests) {\n      if (request === undefined) {\n        throw webidl.errors.conversionFailed({\n          prefix,\n          argument: 'Argument 1',\n          types: ['undefined is not allowed']\n        })\n      }\n\n      request = webidl.converters.RequestInfo(request)\n\n      if (typeof request === 'string') {\n        continue\n      }\n\n      // 3.1\n      const r = getRequestState(request)\n\n      // 3.2\n      if (!urlIsHttpHttpsScheme(r.url) || r.method !== 'GET') {\n        throw webidl.errors.exception({\n          header: prefix,\n          message: 'Expected http/s scheme when method is not GET.'\n        })\n      }\n    }\n\n    // 4.\n    /** @type {ReturnType<typeof fetching>[]} */\n    const fetchControllers = []\n\n    // 5.\n    for (const request of requests) {\n      // 5.1\n      const r = getRequestState(new Request(request))\n\n      // 5.2\n      if (!urlIsHttpHttpsScheme(r.url)) {\n        throw webidl.errors.exception({\n          header: prefix,\n          message: 'Expected http/s scheme.'\n        })\n      }\n\n      // 5.4\n      r.initiator = 'fetch'\n      r.destination = 'subresource'\n\n      // 5.5\n      requestList.push(r)\n\n      // 5.6\n      const responsePromise = createDeferredPromise()\n\n      // 5.7\n      fetchControllers.push(fetching({\n        request: r,\n        processResponse (response) {\n          // 1.\n          if (response.type === 'error' || response.status === 206 || response.status < 200 || response.status > 299) {\n            responsePromise.reject(webidl.errors.exception({\n              header: 'Cache.addAll',\n              message: 'Received an invalid status code or the request failed.'\n            }))\n          } else if (response.headersList.contains('vary')) { // 2.\n            // 2.1\n            const fieldValues = getFieldValues(response.headersList.get('vary'))\n\n            // 2.2\n            for (const fieldValue of fieldValues) {\n              // 2.2.1\n              if (fieldValue === '*') {\n                responsePromise.reject(webidl.errors.exception({\n                  header: 'Cache.addAll',\n                  message: 'invalid vary field value'\n                }))\n\n                for (const controller of fetchControllers) {\n                  controller.abort()\n                }\n\n                return\n              }\n            }\n          }\n        },\n        processResponseEndOfBody (response) {\n          // 1.\n          if (response.aborted) {\n            responsePromise.reject(new DOMException('aborted', 'AbortError'))\n            return\n          }\n\n          // 2.\n          responsePromise.resolve(response)\n        }\n      }))\n\n      // 5.8\n      responsePromises.push(responsePromise.promise)\n    }\n\n    // 6.\n    const p = Promise.all(responsePromises)\n\n    // 7.\n    const responses = await p\n\n    // 7.1\n    const operations = []\n\n    // 7.2\n    let index = 0\n\n    // 7.3\n    for (const response of responses) {\n      // 7.3.1\n      /** @type {CacheBatchOperation} */\n      const operation = {\n        type: 'put', // 7.3.2\n        request: requestList[index], // 7.3.3\n        response // 7.3.4\n      }\n\n      operations.push(operation) // 7.3.5\n\n      index++ // 7.3.6\n    }\n\n    // 7.5\n    const cacheJobPromise = createDeferredPromise()\n\n    // 7.6.1\n    let errorData = null\n\n    // 7.6.2\n    try {\n      this.#batchCacheOperations(operations)\n    } catch (e) {\n      errorData = e\n    }\n\n    // 7.6.3\n    queueMicrotask(() => {\n      // 7.6.3.1\n      if (errorData === null) {\n        cacheJobPromise.resolve(undefined)\n      } else {\n        // 7.6.3.2\n        cacheJobPromise.reject(errorData)\n      }\n    })\n\n    // 7.7\n    return cacheJobPromise.promise\n  }\n\n  async put (request, response) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.put'\n    webidl.argumentLengthCheck(arguments, 2, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n    response = webidl.converters.Response(response, prefix, 'response')\n\n    // 1.\n    let innerRequest = null\n\n    // 2.\n    if (webidl.is.Request(request)) {\n      innerRequest = getRequestState(request)\n    } else { // 3.\n      innerRequest = getRequestState(new Request(request))\n    }\n\n    // 4.\n    if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== 'GET') {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: 'Expected an http/s scheme when method is not GET'\n      })\n    }\n\n    // 5.\n    const innerResponse = getResponseState(response)\n\n    // 6.\n    if (innerResponse.status === 206) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: 'Got 206 status'\n      })\n    }\n\n    // 7.\n    if (innerResponse.headersList.contains('vary')) {\n      // 7.1.\n      const fieldValues = getFieldValues(innerResponse.headersList.get('vary'))\n\n      // 7.2.\n      for (const fieldValue of fieldValues) {\n        // 7.2.1\n        if (fieldValue === '*') {\n          throw webidl.errors.exception({\n            header: prefix,\n            message: 'Got * vary field value'\n          })\n        }\n      }\n    }\n\n    // 8.\n    if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: 'Response body is locked or disturbed'\n      })\n    }\n\n    // 9.\n    const clonedResponse = cloneResponse(innerResponse)\n\n    // 10.\n    const bodyReadPromise = createDeferredPromise()\n\n    // 11.\n    if (innerResponse.body != null) {\n      // 11.1\n      const stream = innerResponse.body.stream\n\n      // 11.2\n      const reader = stream.getReader()\n\n      // 11.3\n      readAllBytes(reader, bodyReadPromise.resolve, bodyReadPromise.reject)\n    } else {\n      bodyReadPromise.resolve(undefined)\n    }\n\n    // 12.\n    /** @type {CacheBatchOperation[]} */\n    const operations = []\n\n    // 13.\n    /** @type {CacheBatchOperation} */\n    const operation = {\n      type: 'put', // 14.\n      request: innerRequest, // 15.\n      response: clonedResponse // 16.\n    }\n\n    // 17.\n    operations.push(operation)\n\n    // 19.\n    const bytes = await bodyReadPromise.promise\n\n    if (clonedResponse.body != null) {\n      clonedResponse.body.source = bytes\n    }\n\n    // 19.1\n    const cacheJobPromise = createDeferredPromise()\n\n    // 19.2.1\n    let errorData = null\n\n    // 19.2.2\n    try {\n      this.#batchCacheOperations(operations)\n    } catch (e) {\n      errorData = e\n    }\n\n    // 19.2.3\n    queueMicrotask(() => {\n      // 19.2.3.1\n      if (errorData === null) {\n        cacheJobPromise.resolve()\n      } else { // 19.2.3.2\n        cacheJobPromise.reject(errorData)\n      }\n    })\n\n    return cacheJobPromise.promise\n  }\n\n  async delete (request, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.delete'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    /**\n     * @type {Request}\n     */\n    let r = null\n\n    if (webidl.is.Request(request)) {\n      r = getRequestState(request)\n\n      if (r.method !== 'GET' && !options.ignoreMethod) {\n        return false\n      }\n    } else {\n      assert(typeof request === 'string')\n\n      r = getRequestState(new Request(request))\n    }\n\n    /** @type {CacheBatchOperation[]} */\n    const operations = []\n\n    /** @type {CacheBatchOperation} */\n    const operation = {\n      type: 'delete',\n      request: r,\n      options\n    }\n\n    operations.push(operation)\n\n    const cacheJobPromise = createDeferredPromise()\n\n    let errorData = null\n    let requestResponses\n\n    try {\n      requestResponses = this.#batchCacheOperations(operations)\n    } catch (e) {\n      errorData = e\n    }\n\n    queueMicrotask(() => {\n      if (errorData === null) {\n        cacheJobPromise.resolve(!!requestResponses?.length)\n      } else {\n        cacheJobPromise.reject(errorData)\n      }\n    })\n\n    return cacheJobPromise.promise\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dom-cache-keys\n   * @param {any} request\n   * @param {import('../../../types/cache').CacheQueryOptions} options\n   * @returns {Promise<readonly Request[]>}\n   */\n  async keys (request = undefined, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.keys'\n\n    if (request !== undefined) request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    // 1.\n    let r = null\n\n    // 2.\n    if (request !== undefined) {\n      // 2.1\n      if (webidl.is.Request(request)) {\n        // 2.1.1\n        r = getRequestState(request)\n\n        // 2.1.2\n        if (r.method !== 'GET' && !options.ignoreMethod) {\n          return []\n        }\n      } else if (typeof request === 'string') { // 2.2\n        r = getRequestState(new Request(request))\n      }\n    }\n\n    // 4.\n    const promise = createDeferredPromise()\n\n    // 5.\n    // 5.1\n    const requests = []\n\n    // 5.2\n    if (request === undefined) {\n      // 5.2.1\n      for (const requestResponse of this.#relevantRequestResponseList) {\n        // 5.2.1.1\n        requests.push(requestResponse[0])\n      }\n    } else { // 5.3\n      // 5.3.1\n      const requestResponses = this.#queryCache(r, options)\n\n      // 5.3.2\n      for (const requestResponse of requestResponses) {\n        // 5.3.2.1\n        requests.push(requestResponse[0])\n      }\n    }\n\n    // 5.4\n    queueMicrotask(() => {\n      // 5.4.1\n      const requestList = []\n\n      // 5.4.2\n      for (const request of requests) {\n        const requestObject = fromInnerRequest(\n          request,\n          undefined,\n          new AbortController().signal,\n          'immutable'\n        )\n        // 5.4.2.1\n        requestList.push(requestObject)\n      }\n\n      // 5.4.3\n      promise.resolve(Object.freeze(requestList))\n    })\n\n    return promise.promise\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm\n   * @param {CacheBatchOperation[]} operations\n   * @returns {requestResponseList}\n   */\n  #batchCacheOperations (operations) {\n    // 1.\n    const cache = this.#relevantRequestResponseList\n\n    // 2.\n    const backupCache = [...cache]\n\n    // 3.\n    const addedItems = []\n\n    // 4.1\n    const resultList = []\n\n    try {\n      // 4.2\n      for (const operation of operations) {\n        // 4.2.1\n        if (operation.type !== 'delete' && operation.type !== 'put') {\n          throw webidl.errors.exception({\n            header: 'Cache.#batchCacheOperations',\n            message: 'operation type does not match \"delete\" or \"put\"'\n          })\n        }\n\n        // 4.2.2\n        if (operation.type === 'delete' && operation.response != null) {\n          throw webidl.errors.exception({\n            header: 'Cache.#batchCacheOperations',\n            message: 'delete operation should not have an associated response'\n          })\n        }\n\n        // 4.2.3\n        if (this.#queryCache(operation.request, operation.options, addedItems).length) {\n          throw new DOMException('???', 'InvalidStateError')\n        }\n\n        // 4.2.4\n        let requestResponses\n\n        // 4.2.5\n        if (operation.type === 'delete') {\n          // 4.2.5.1\n          requestResponses = this.#queryCache(operation.request, operation.options)\n\n          // TODO: the spec is wrong, this is needed to pass WPTs\n          if (requestResponses.length === 0) {\n            return []\n          }\n\n          // 4.2.5.2\n          for (const requestResponse of requestResponses) {\n            const idx = cache.indexOf(requestResponse)\n            assert(idx !== -1)\n\n            // 4.2.5.2.1\n            cache.splice(idx, 1)\n          }\n        } else if (operation.type === 'put') { // 4.2.6\n          // 4.2.6.1\n          if (operation.response == null) {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'put operation should have an associated response'\n            })\n          }\n\n          // 4.2.6.2\n          const r = operation.request\n\n          // 4.2.6.3\n          if (!urlIsHttpHttpsScheme(r.url)) {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'expected http or https scheme'\n            })\n          }\n\n          // 4.2.6.4\n          if (r.method !== 'GET') {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'not get method'\n            })\n          }\n\n          // 4.2.6.5\n          if (operation.options != null) {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'options must not be defined'\n            })\n          }\n\n          // 4.2.6.6\n          requestResponses = this.#queryCache(operation.request)\n\n          // 4.2.6.7\n          for (const requestResponse of requestResponses) {\n            const idx = cache.indexOf(requestResponse)\n            assert(idx !== -1)\n\n            // 4.2.6.7.1\n            cache.splice(idx, 1)\n          }\n\n          // 4.2.6.8\n          cache.push([operation.request, operation.response])\n\n          // 4.2.6.10\n          addedItems.push([operation.request, operation.response])\n        }\n\n        // 4.2.7\n        resultList.push([operation.request, operation.response])\n      }\n\n      // 4.3\n      return resultList\n    } catch (e) { // 5.\n      // 5.1\n      this.#relevantRequestResponseList.length = 0\n\n      // 5.2\n      this.#relevantRequestResponseList = backupCache\n\n      // 5.3\n      throw e\n    }\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#query-cache\n   * @param {any} requestQuery\n   * @param {import('../../../types/cache').CacheQueryOptions} options\n   * @param {requestResponseList} targetStorage\n   * @returns {requestResponseList}\n   */\n  #queryCache (requestQuery, options, targetStorage) {\n    /** @type {requestResponseList} */\n    const resultList = []\n\n    const storage = targetStorage ?? this.#relevantRequestResponseList\n\n    for (const requestResponse of storage) {\n      const [cachedRequest, cachedResponse] = requestResponse\n      if (this.#requestMatchesCachedItem(requestQuery, cachedRequest, cachedResponse, options)) {\n        resultList.push(requestResponse)\n      }\n    }\n\n    return resultList\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm\n   * @param {any} requestQuery\n   * @param {any} request\n   * @param {any | null} response\n   * @param {import('../../../types/cache').CacheQueryOptions | undefined} options\n   * @returns {boolean}\n   */\n  #requestMatchesCachedItem (requestQuery, request, response = null, options) {\n    // if (options?.ignoreMethod === false && request.method === 'GET') {\n    //   return false\n    // }\n\n    const queryURL = new URL(requestQuery.url)\n\n    const cachedURL = new URL(request.url)\n\n    if (options?.ignoreSearch) {\n      cachedURL.search = ''\n\n      queryURL.search = ''\n    }\n\n    if (!urlEquals(queryURL, cachedURL, true)) {\n      return false\n    }\n\n    if (\n      response == null ||\n      options?.ignoreVary ||\n      !response.headersList.contains('vary')\n    ) {\n      return true\n    }\n\n    const fieldValues = getFieldValues(response.headersList.get('vary'))\n\n    for (const fieldValue of fieldValues) {\n      if (fieldValue === '*') {\n        return false\n      }\n\n      const requestValue = request.headersList.get(fieldValue)\n      const queryValue = requestQuery.headersList.get(fieldValue)\n\n      // If one has the header and the other doesn't, or one has\n      // a different value than the other, return false\n      if (requestValue !== queryValue) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  #internalMatchAll (request, options, maxResponses = Infinity) {\n    // 1.\n    let r = null\n\n    // 2.\n    if (request !== undefined) {\n      if (webidl.is.Request(request)) {\n        // 2.1.1\n        r = getRequestState(request)\n\n        // 2.1.2\n        if (r.method !== 'GET' && !options.ignoreMethod) {\n          return []\n        }\n      } else if (typeof request === 'string') {\n        // 2.2.1\n        r = getRequestState(new Request(request))\n      }\n    }\n\n    // 5.\n    // 5.1\n    const responses = []\n\n    // 5.2\n    if (request === undefined) {\n      // 5.2.1\n      for (const requestResponse of this.#relevantRequestResponseList) {\n        responses.push(requestResponse[1])\n      }\n    } else { // 5.3\n      // 5.3.1\n      const requestResponses = this.#queryCache(r, options)\n\n      // 5.3.2\n      for (const requestResponse of requestResponses) {\n        responses.push(requestResponse[1])\n      }\n    }\n\n    // 5.4\n    // We don't implement CORs so we don't need to loop over the responses, yay!\n\n    // 5.5.1\n    const responseList = []\n\n    // 5.5.2\n    for (const response of responses) {\n      // 5.5.2.1\n      const responseObject = fromInnerResponse(cloneResponse(response), 'immutable')\n\n      responseList.push(responseObject)\n\n      if (responseList.length >= maxResponses) {\n        break\n      }\n    }\n\n    // 6.\n    return Object.freeze(responseList)\n  }\n}\n\nObject.defineProperties(Cache.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'Cache',\n    configurable: true\n  },\n  match: kEnumerableProperty,\n  matchAll: kEnumerableProperty,\n  add: kEnumerableProperty,\n  addAll: kEnumerableProperty,\n  put: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  keys: kEnumerableProperty\n})\n\nconst cacheQueryOptionConverters = [\n  {\n    key: 'ignoreSearch',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'ignoreMethod',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'ignoreVary',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  }\n]\n\nwebidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters)\n\nwebidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([\n  ...cacheQueryOptionConverters,\n  {\n    key: 'cacheName',\n    converter: webidl.converters.DOMString\n  }\n])\n\nwebidl.converters.Response = webidl.interfaceConverter(\n  webidl.is.Response,\n  'Response'\n)\n\nwebidl.converters['sequence<RequestInfo>'] = webidl.sequenceConverter(\n  webidl.converters.RequestInfo\n)\n\nmodule.exports = {\n  Cache\n}\n", "'use strict'\n\nconst { Cache } = require('./cache')\nconst { webidl } = require('../webidl')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { kConstruct } = require('../../core/symbols')\n\nclass CacheStorage {\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map\n   * @type {Map<string, import('./cache').requestResponseList}\n   */\n  #caches = new Map()\n\n  constructor () {\n    if (arguments[0] !== kConstruct) {\n      webidl.illegalConstructor()\n    }\n\n    webidl.util.markAsUncloneable(this)\n  }\n\n  async match (request, options = {}) {\n    webidl.brandCheck(this, CacheStorage)\n    webidl.argumentLengthCheck(arguments, 1, 'CacheStorage.match')\n\n    request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.MultiCacheQueryOptions(options)\n\n    // 1.\n    if (options.cacheName != null) {\n      // 1.1.1.1\n      if (this.#caches.has(options.cacheName)) {\n        // 1.1.1.1.1\n        const cacheList = this.#caches.get(options.cacheName)\n        const cache = new Cache(kConstruct, cacheList)\n\n        return await cache.match(request, options)\n      }\n    } else { // 2.\n      // 2.2\n      for (const cacheList of this.#caches.values()) {\n        const cache = new Cache(kConstruct, cacheList)\n\n        // 2.2.1.2\n        const response = await cache.match(request, options)\n\n        if (response !== undefined) {\n          return response\n        }\n      }\n    }\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#cache-storage-has\n   * @param {string} cacheName\n   * @returns {Promise<boolean>}\n   */\n  async has (cacheName) {\n    webidl.brandCheck(this, CacheStorage)\n\n    const prefix = 'CacheStorage.has'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    cacheName = webidl.converters.DOMString(cacheName, prefix, 'cacheName')\n\n    // 2.1.1\n    // 2.2\n    return this.#caches.has(cacheName)\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open\n   * @param {string} cacheName\n   * @returns {Promise<Cache>}\n   */\n  async open (cacheName) {\n    webidl.brandCheck(this, CacheStorage)\n\n    const prefix = 'CacheStorage.open'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    cacheName = webidl.converters.DOMString(cacheName, prefix, 'cacheName')\n\n    // 2.1\n    if (this.#caches.has(cacheName)) {\n      // await caches.open('v1') !== await caches.open('v1')\n\n      // 2.1.1\n      const cache = this.#caches.get(cacheName)\n\n      // 2.1.1.1\n      return new Cache(kConstruct, cache)\n    }\n\n    // 2.2\n    const cache = []\n\n    // 2.3\n    this.#caches.set(cacheName, cache)\n\n    // 2.4\n    return new Cache(kConstruct, cache)\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete\n   * @param {string} cacheName\n   * @returns {Promise<boolean>}\n   */\n  async delete (cacheName) {\n    webidl.brandCheck(this, CacheStorage)\n\n    const prefix = 'CacheStorage.delete'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    cacheName = webidl.converters.DOMString(cacheName, prefix, 'cacheName')\n\n    return this.#caches.delete(cacheName)\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys\n   * @returns {Promise<string[]>}\n   */\n  async keys () {\n    webidl.brandCheck(this, CacheStorage)\n\n    // 2.1\n    const keys = this.#caches.keys()\n\n    // 2.2\n    return [...keys]\n  }\n}\n\nObject.defineProperties(CacheStorage.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'CacheStorage',\n    configurable: true\n  },\n  match: kEnumerableProperty,\n  has: kEnumerableProperty,\n  open: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  keys: kEnumerableProperty\n})\n\nmodule.exports = {\n  CacheStorage\n}\n", "'use strict'\n\n// https://wicg.github.io/cookie-store/#cookie-maximum-attribute-value-size\nconst maxAttributeValueSize = 1024\n\n// https://wicg.github.io/cookie-store/#cookie-maximum-name-value-pair-size\nconst maxNameValuePairSize = 4096\n\nmodule.exports = {\n  maxAttributeValueSize,\n  maxNameValuePairSize\n}\n", "'use strict'\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction isCTLExcludingHtab (value) {\n  for (let i = 0; i < value.length; ++i) {\n    const code = value.charCodeAt(i)\n\n    if (\n      (code >= 0x00 && code <= 0x08) ||\n      (code >= 0x0A && code <= 0x1F) ||\n      code === 0x7F\n    ) {\n      return true\n    }\n  }\n  return false\n}\n\n/**\n CHAR           = <any US-ASCII character (octets 0 - 127)>\n token          = 1*<any CHAR except CTLs or separators>\n separators     = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n                | \",\" | \";\" | \":\" | \"\\\" | <\">\n                | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n                | \"{\" | \"}\" | SP | HT\n * @param {string} name\n */\nfunction validateCookieName (name) {\n  for (let i = 0; i < name.length; ++i) {\n    const code = name.charCodeAt(i)\n\n    if (\n      code < 0x21 || // exclude CTLs (0-31), SP and HT\n      code > 0x7E || // exclude non-ascii and DEL\n      code === 0x22 || // \"\n      code === 0x28 || // (\n      code === 0x29 || // )\n      code === 0x3C || // <\n      code === 0x3E || // >\n      code === 0x40 || // @\n      code === 0x2C || // ,\n      code === 0x3B || // ;\n      code === 0x3A || // :\n      code === 0x5C || // \\\n      code === 0x2F || // /\n      code === 0x5B || // [\n      code === 0x5D || // ]\n      code === 0x3F || // ?\n      code === 0x3D || // =\n      code === 0x7B || // {\n      code === 0x7D // }\n    ) {\n      throw new Error('Invalid cookie name')\n    }\n  }\n}\n\n/**\n cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n                       ; US-ASCII characters excluding CTLs,\n                       ; whitespace DQUOTE, comma, semicolon,\n                       ; and backslash\n * @param {string} value\n */\nfunction validateCookieValue (value) {\n  let len = value.length\n  let i = 0\n\n  // if the value is wrapped in DQUOTE\n  if (value[0] === '\"') {\n    if (len === 1 || value[len - 1] !== '\"') {\n      throw new Error('Invalid cookie value')\n    }\n    --len\n    ++i\n  }\n\n  while (i < len) {\n    const code = value.charCodeAt(i++)\n\n    if (\n      code < 0x21 || // exclude CTLs (0-31)\n      code > 0x7E || // non-ascii and DEL (127)\n      code === 0x22 || // \"\n      code === 0x2C || // ,\n      code === 0x3B || // ;\n      code === 0x5C // \\\n    ) {\n      throw new Error('Invalid cookie value')\n    }\n  }\n}\n\n/**\n * path-value        = <any CHAR except CTLs or \";\">\n * @param {string} path\n */\nfunction validateCookiePath (path) {\n  for (let i = 0; i < path.length; ++i) {\n    const code = path.charCodeAt(i)\n\n    if (\n      code < 0x20 || // exclude CTLs (0-31)\n      code === 0x7F || // DEL\n      code === 0x3B // ;\n    ) {\n      throw new Error('Invalid cookie path')\n    }\n  }\n}\n\n/**\n * I have no idea why these values aren't allowed to be honest,\n * but Deno tests these. - Khafra\n * @param {string} domain\n */\nfunction validateCookieDomain (domain) {\n  if (\n    domain.startsWith('-') ||\n    domain.endsWith('.') ||\n    domain.endsWith('-')\n  ) {\n    throw new Error('Invalid cookie domain')\n  }\n}\n\nconst IMFDays = [\n  'Sun', 'Mon', 'Tue', 'Wed',\n  'Thu', 'Fri', 'Sat'\n]\n\nconst IMFMonths = [\n  'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n  'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'\n]\n\nconst IMFPaddedNumbers = Array(61).fill(0).map((_, i) => i.toString().padStart(2, '0'))\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc7231#section-7.1.1.1\n * @param {number|Date} date\n  IMF-fixdate  = day-name \",\" SP date1 SP time-of-day SP GMT\n  ; fixed length/zone/capitalization subset of the format\n  ; see Section 3.3 of [RFC5322]\n\n  day-name     = %x4D.6F.6E ; \"Mon\", case-sensitive\n              / %x54.75.65 ; \"Tue\", case-sensitive\n              / %x57.65.64 ; \"Wed\", case-sensitive\n              / %x54.68.75 ; \"Thu\", case-sensitive\n              / %x46.72.69 ; \"Fri\", case-sensitive\n              / %x53.61.74 ; \"Sat\", case-sensitive\n              / %x53.75.6E ; \"Sun\", case-sensitive\n  date1        = day SP month SP year\n                  ; e.g., 02 Jun 1982\n\n  day          = 2DIGIT\n  month        = %x4A.61.6E ; \"Jan\", case-sensitive\n              / %x46.65.62 ; \"Feb\", case-sensitive\n              / %x4D.61.72 ; \"Mar\", case-sensitive\n              / %x41.70.72 ; \"Apr\", case-sensitive\n              / %x4D.61.79 ; \"May\", case-sensitive\n              / %x4A.75.6E ; \"Jun\", case-sensitive\n              / %x4A.75.6C ; \"Jul\", case-sensitive\n              / %x41.75.67 ; \"Aug\", case-sensitive\n              / %x53.65.70 ; \"Sep\", case-sensitive\n              / %x4F.63.74 ; \"Oct\", case-sensitive\n              / %x4E.6F.76 ; \"Nov\", case-sensitive\n              / %x44.65.63 ; \"Dec\", case-sensitive\n  year         = 4DIGIT\n\n  GMT          = %x47.4D.54 ; \"GMT\", case-sensitive\n\n  time-of-day  = hour \":\" minute \":\" second\n              ; 00:00:00 - 23:59:60 (leap second)\n\n  hour         = 2DIGIT\n  minute       = 2DIGIT\n  second       = 2DIGIT\n */\nfunction toIMFDate (date) {\n  if (typeof date === 'number') {\n    date = new Date(date)\n  }\n\n  return `${IMFDays[date.getUTCDay()]}, ${IMFPaddedNumbers[date.getUTCDate()]} ${IMFMonths[date.getUTCMonth()]} ${date.getUTCFullYear()} ${IMFPaddedNumbers[date.getUTCHours()]}:${IMFPaddedNumbers[date.getUTCMinutes()]}:${IMFPaddedNumbers[date.getUTCSeconds()]} GMT`\n}\n\n/**\n max-age-av        = \"Max-Age=\" non-zero-digit *DIGIT\n                       ; In practice, both expires-av and max-age-av\n                       ; are limited to dates representable by the\n                       ; user agent.\n * @param {number} maxAge\n */\nfunction validateCookieMaxAge (maxAge) {\n  if (maxAge < 0) {\n    throw new Error('Invalid cookie max-age')\n  }\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc6265#section-4.1.1\n * @param {import('./index').Cookie} cookie\n */\nfunction stringify (cookie) {\n  if (cookie.name.length === 0) {\n    return null\n  }\n\n  validateCookieName(cookie.name)\n  validateCookieValue(cookie.value)\n\n  const out = [`${cookie.name}=${cookie.value}`]\n\n  // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.1\n  // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.2\n  if (cookie.name.startsWith('__Secure-')) {\n    cookie.secure = true\n  }\n\n  if (cookie.name.startsWith('__Host-')) {\n    cookie.secure = true\n    cookie.domain = null\n    cookie.path = '/'\n  }\n\n  if (cookie.secure) {\n    out.push('Secure')\n  }\n\n  if (cookie.httpOnly) {\n    out.push('HttpOnly')\n  }\n\n  if (typeof cookie.maxAge === 'number') {\n    validateCookieMaxAge(cookie.maxAge)\n    out.push(`Max-Age=${cookie.maxAge}`)\n  }\n\n  if (cookie.domain) {\n    validateCookieDomain(cookie.domain)\n    out.push(`Domain=${cookie.domain}`)\n  }\n\n  if (cookie.path) {\n    validateCookiePath(cookie.path)\n    out.push(`Path=${cookie.path}`)\n  }\n\n  if (cookie.expires && cookie.expires.toString() !== 'Invalid Date') {\n    out.push(`Expires=${toIMFDate(cookie.expires)}`)\n  }\n\n  if (cookie.sameSite) {\n    out.push(`SameSite=${cookie.sameSite}`)\n  }\n\n  for (const part of cookie.unparsed) {\n    if (!part.includes('=')) {\n      throw new Error('Invalid unparsed')\n    }\n\n    const [key, ...value] = part.split('=')\n\n    out.push(`${key.trim()}=${value.join('=')}`)\n  }\n\n  return out.join('; ')\n}\n\nmodule.exports = {\n  isCTLExcludingHtab,\n  validateCookieName,\n  validateCookiePath,\n  validateCookieValue,\n  toIMFDate,\n  stringify\n}\n", "'use strict'\n\nconst { collectASequenceOfCodePointsFast } = require('../infra')\nconst { maxNameValuePairSize, maxAttributeValueSize } = require('./constants')\nconst { isCTLExcludingHtab } = require('./util')\nconst assert = require('node:assert')\nconst { unescape: qsUnescape } = require('node:querystring')\n\n/**\n * @description Parses the field-value attributes of a set-cookie header string.\n * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4\n * @param {string} header\n * @returns {import('./index').Cookie|null} if the header is invalid, null will be returned\n */\nfunction parseSetCookie (header) {\n  // 1. If the set-cookie-string contains a %x00-08 / %x0A-1F / %x7F\n  //    character (CTL characters excluding HTAB): Abort these steps and\n  //    ignore the set-cookie-string entirely.\n  if (isCTLExcludingHtab(header)) {\n    return null\n  }\n\n  let nameValuePair = ''\n  let unparsedAttributes = ''\n  let name = ''\n  let value = ''\n\n  // 2. If the set-cookie-string contains a %x3B (\";\") character:\n  if (header.includes(';')) {\n    // 1. The name-value-pair string consists of the characters up to,\n    //    but not including, the first %x3B (\";\"), and the unparsed-\n    //    attributes consist of the remainder of the set-cookie-string\n    //    (including the %x3B (\";\") in question).\n    const position = { position: 0 }\n\n    nameValuePair = collectASequenceOfCodePointsFast(';', header, position)\n    unparsedAttributes = header.slice(position.position)\n  } else {\n    // Otherwise:\n\n    // 1. The name-value-pair string consists of all the characters\n    //    contained in the set-cookie-string, and the unparsed-\n    //    attributes is the empty string.\n    nameValuePair = header\n  }\n\n  // 3. If the name-value-pair string lacks a %x3D (\"=\") character, then\n  //    the name string is empty, and the value string is the value of\n  //    name-value-pair.\n  if (!nameValuePair.includes('=')) {\n    value = nameValuePair\n  } else {\n    //    Otherwise, the name string consists of the characters up to, but\n    //    not including, the first %x3D (\"=\") character, and the (possibly\n    //    empty) value string consists of the characters after the first\n    //    %x3D (\"=\") character.\n    const position = { position: 0 }\n    name = collectASequenceOfCodePointsFast(\n      '=',\n      nameValuePair,\n      position\n    )\n    value = nameValuePair.slice(position.position + 1)\n  }\n\n  // 4. Remove any leading or trailing WSP characters from the name\n  //    string and the value string.\n  name = name.trim()\n  value = value.trim()\n\n  // 5. If the sum of the lengths of the name string and the value string\n  //    is more than 4096 octets, abort these steps and ignore the set-\n  //    cookie-string entirely.\n  if (name.length + value.length > maxNameValuePairSize) {\n    return null\n  }\n\n  // 6. The cookie-name is the name string, and the cookie-value is the\n  //    value string.\n  // https://datatracker.ietf.org/doc/html/rfc6265\n  // To maximize compatibility with user agents, servers that wish to\n  // store arbitrary data in a cookie-value SHOULD encode that data, for\n  // example, using Base64 [RFC4648].\n  return {\n    name, value: qsUnescape(value), ...parseUnparsedAttributes(unparsedAttributes)\n  }\n}\n\n/**\n * Parses the remaining attributes of a set-cookie header\n * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4\n * @param {string} unparsedAttributes\n * @param {Object.<string, unknown>} [cookieAttributeList={}]\n */\nfunction parseUnparsedAttributes (unparsedAttributes, cookieAttributeList = {}) {\n  // 1. If the unparsed-attributes string is empty, skip the rest of\n  //    these steps.\n  if (unparsedAttributes.length === 0) {\n    return cookieAttributeList\n  }\n\n  // 2. Discard the first character of the unparsed-attributes (which\n  //    will be a %x3B (\";\") character).\n  assert(unparsedAttributes[0] === ';')\n  unparsedAttributes = unparsedAttributes.slice(1)\n\n  let cookieAv = ''\n\n  // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n  //    character:\n  if (unparsedAttributes.includes(';')) {\n    // 1. Consume the characters of the unparsed-attributes up to, but\n    //    not including, the first %x3B (\";\") character.\n    cookieAv = collectASequenceOfCodePointsFast(\n      ';',\n      unparsedAttributes,\n      { position: 0 }\n    )\n    unparsedAttributes = unparsedAttributes.slice(cookieAv.length)\n  } else {\n    // Otherwise:\n\n    // 1. Consume the remainder of the unparsed-attributes.\n    cookieAv = unparsedAttributes\n    unparsedAttributes = ''\n  }\n\n  // Let the cookie-av string be the characters consumed in this step.\n\n  let attributeName = ''\n  let attributeValue = ''\n\n  // 4. If the cookie-av string contains a %x3D (\"=\") character:\n  if (cookieAv.includes('=')) {\n    // 1. The (possibly empty) attribute-name string consists of the\n    //    characters up to, but not including, the first %x3D (\"=\")\n    //    character, and the (possibly empty) attribute-value string\n    //    consists of the characters after the first %x3D (\"=\")\n    //    character.\n    const position = { position: 0 }\n\n    attributeName = collectASequenceOfCodePointsFast(\n      '=',\n      cookieAv,\n      position\n    )\n    attributeValue = cookieAv.slice(position.position + 1)\n  } else {\n    // Otherwise:\n\n    // 1. The attribute-name string consists of the entire cookie-av\n    //    string, and the attribute-value string is empty.\n    attributeName = cookieAv\n  }\n\n  // 5. Remove any leading or trailing WSP characters from the attribute-\n  //    name string and the attribute-value string.\n  attributeName = attributeName.trim()\n  attributeValue = attributeValue.trim()\n\n  // 6. If the attribute-value is longer than 1024 octets, ignore the\n  //    cookie-av string and return to Step 1 of this algorithm.\n  if (attributeValue.length > maxAttributeValueSize) {\n    return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n  }\n\n  // 7. Process the attribute-name and attribute-value according to the\n  //    requirements in the following subsections.  (Notice that\n  //    attributes with unrecognized attribute-names are ignored.)\n  const attributeNameLowercase = attributeName.toLowerCase()\n\n  // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.1\n  // If the attribute-name case-insensitively matches the string\n  // \"Expires\", the user agent MUST process the cookie-av as follows.\n  if (attributeNameLowercase === 'expires') {\n    // 1. Let the expiry-time be the result of parsing the attribute-value\n    //    as cookie-date (see Section 5.1.1).\n    const expiryTime = new Date(attributeValue)\n\n    // 2. If the attribute-value failed to parse as a cookie date, ignore\n    //    the cookie-av.\n\n    cookieAttributeList.expires = expiryTime\n  } else if (attributeNameLowercase === 'max-age') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.2\n    // If the attribute-name case-insensitively matches the string \"Max-\n    // Age\", the user agent MUST process the cookie-av as follows.\n\n    // 1. If the first character of the attribute-value is not a DIGIT or a\n    //    \"-\" character, ignore the cookie-av.\n    const charCode = attributeValue.charCodeAt(0)\n\n    if ((charCode < 48 || charCode > 57) && attributeValue[0] !== '-') {\n      return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n    }\n\n    // 2. If the remainder of attribute-value contains a non-DIGIT\n    //    character, ignore the cookie-av.\n    if (!/^\\d+$/.test(attributeValue)) {\n      return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n    }\n\n    // 3. Let delta-seconds be the attribute-value converted to an integer.\n    const deltaSeconds = Number(attributeValue)\n\n    // 4. Let cookie-age-limit be the maximum age of the cookie (which\n    //    SHOULD be 400 days or less, see Section 4.1.2.2).\n\n    // 5. Set delta-seconds to the smaller of its present value and cookie-\n    //    age-limit.\n    // deltaSeconds = Math.min(deltaSeconds * 1000, maxExpiresMs)\n\n    // 6. If delta-seconds is less than or equal to zero (0), let expiry-\n    //    time be the earliest representable date and time.  Otherwise, let\n    //    the expiry-time be the current date and time plus delta-seconds\n    //    seconds.\n    // const expiryTime = deltaSeconds <= 0 ? Date.now() : Date.now() + deltaSeconds\n\n    // 7. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of Max-Age and an attribute-value of expiry-time.\n    cookieAttributeList.maxAge = deltaSeconds\n  } else if (attributeNameLowercase === 'domain') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.3\n    // If the attribute-name case-insensitively matches the string \"Domain\",\n    // the user agent MUST process the cookie-av as follows.\n\n    // 1. Let cookie-domain be the attribute-value.\n    let cookieDomain = attributeValue\n\n    // 2. If cookie-domain starts with %x2E (\".\"), let cookie-domain be\n    //    cookie-domain without its leading %x2E (\".\").\n    if (cookieDomain[0] === '.') {\n      cookieDomain = cookieDomain.slice(1)\n    }\n\n    // 3. Convert the cookie-domain to lower case.\n    cookieDomain = cookieDomain.toLowerCase()\n\n    // 4. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of Domain and an attribute-value of cookie-domain.\n    cookieAttributeList.domain = cookieDomain\n  } else if (attributeNameLowercase === 'path') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.4\n    // If the attribute-name case-insensitively matches the string \"Path\",\n    // the user agent MUST process the cookie-av as follows.\n\n    // 1. If the attribute-value is empty or if the first character of the\n    //    attribute-value is not %x2F (\"/\"):\n    let cookiePath = ''\n    if (attributeValue.length === 0 || attributeValue[0] !== '/') {\n      // 1. Let cookie-path be the default-path.\n      cookiePath = '/'\n    } else {\n      // Otherwise:\n\n      // 1. Let cookie-path be the attribute-value.\n      cookiePath = attributeValue\n    }\n\n    // 2. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of Path and an attribute-value of cookie-path.\n    cookieAttributeList.path = cookiePath\n  } else if (attributeNameLowercase === 'secure') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.5\n    // If the attribute-name case-insensitively matches the string \"Secure\",\n    // the user agent MUST append an attribute to the cookie-attribute-list\n    // with an attribute-name of Secure and an empty attribute-value.\n\n    cookieAttributeList.secure = true\n  } else if (attributeNameLowercase === 'httponly') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.6\n    // If the attribute-name case-insensitively matches the string\n    // \"HttpOnly\", the user agent MUST append an attribute to the cookie-\n    // attribute-list with an attribute-name of HttpOnly and an empty\n    // attribute-value.\n\n    cookieAttributeList.httpOnly = true\n  } else if (attributeNameLowercase === 'samesite') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.7\n    // If the attribute-name case-insensitively matches the string\n    // \"SameSite\", the user agent MUST process the cookie-av as follows:\n\n    // 1. Let enforcement be \"Default\".\n    let enforcement = 'Default'\n\n    const attributeValueLowercase = attributeValue.toLowerCase()\n    // 2. If cookie-av's attribute-value is a case-insensitive match for\n    //    \"None\", set enforcement to \"None\".\n    if (attributeValueLowercase.includes('none')) {\n      enforcement = 'None'\n    }\n\n    // 3. If cookie-av's attribute-value is a case-insensitive match for\n    //    \"Strict\", set enforcement to \"Strict\".\n    if (attributeValueLowercase.includes('strict')) {\n      enforcement = 'Strict'\n    }\n\n    // 4. If cookie-av's attribute-value is a case-insensitive match for\n    //    \"Lax\", set enforcement to \"Lax\".\n    if (attributeValueLowercase.includes('lax')) {\n      enforcement = 'Lax'\n    }\n\n    // 5. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of \"SameSite\" and an attribute-value of\n    //    enforcement.\n    cookieAttributeList.sameSite = enforcement\n  } else {\n    cookieAttributeList.unparsed ??= []\n\n    cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`)\n  }\n\n  // 8. Return to Step 1 of this algorithm.\n  return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n}\n\nmodule.exports = {\n  parseSetCookie,\n  parseUnparsedAttributes\n}\n", "'use strict'\n\nconst { parseSetCookie } = require('./parse')\nconst { stringify } = require('./util')\nconst { webidl } = require('../webidl')\nconst { Headers } = require('../fetch/headers')\n\nconst brandChecks = webidl.brandCheckMultiple([Headers, globalThis.Headers].filter(Boolean))\n\n/**\n * @typedef {Object} Cookie\n * @property {string} name\n * @property {string} value\n * @property {Date|number} [expires]\n * @property {number} [maxAge]\n * @property {string} [domain]\n * @property {string} [path]\n * @property {boolean} [secure]\n * @property {boolean} [httpOnly]\n * @property {'Strict'|'Lax'|'None'} [sameSite]\n * @property {string[]} [unparsed]\n */\n\n/**\n * @param {Headers} headers\n * @returns {Record<string, string>}\n */\nfunction getCookies (headers) {\n  webidl.argumentLengthCheck(arguments, 1, 'getCookies')\n\n  brandChecks(headers)\n\n  const cookie = headers.get('cookie')\n\n  /** @type {Record<string, string>} */\n  const out = {}\n\n  if (!cookie) {\n    return out\n  }\n\n  for (const piece of cookie.split(';')) {\n    const [name, ...value] = piece.split('=')\n\n    out[name.trim()] = value.join('=')\n  }\n\n  return out\n}\n\n/**\n * @param {Headers} headers\n * @param {string} name\n * @param {{ path?: string, domain?: string }|undefined} attributes\n * @returns {void}\n */\nfunction deleteCookie (headers, name, attributes) {\n  brandChecks(headers)\n\n  const prefix = 'deleteCookie'\n  webidl.argumentLengthCheck(arguments, 2, prefix)\n\n  name = webidl.converters.DOMString(name, prefix, 'name')\n  attributes = webidl.converters.DeleteCookieAttributes(attributes)\n\n  // Matches behavior of\n  // https://github.com/denoland/deno_std/blob/63827b16330b82489a04614027c33b7904e08be5/http/cookie.ts#L278\n  setCookie(headers, {\n    name,\n    value: '',\n    expires: new Date(0),\n    ...attributes\n  })\n}\n\n/**\n * @param {Headers} headers\n * @returns {Cookie[]}\n */\nfunction getSetCookies (headers) {\n  webidl.argumentLengthCheck(arguments, 1, 'getSetCookies')\n\n  brandChecks(headers)\n\n  const cookies = headers.getSetCookie()\n\n  if (!cookies) {\n    return []\n  }\n\n  return cookies.map((pair) => parseSetCookie(pair))\n}\n\n/**\n * Parses a cookie string\n * @param {string} cookie\n */\nfunction parseCookie (cookie) {\n  cookie = webidl.converters.DOMString(cookie)\n\n  return parseSetCookie(cookie)\n}\n\n/**\n * @param {Headers} headers\n * @param {Cookie} cookie\n * @returns {void}\n */\nfunction setCookie (headers, cookie) {\n  webidl.argumentLengthCheck(arguments, 2, 'setCookie')\n\n  brandChecks(headers)\n\n  cookie = webidl.converters.Cookie(cookie)\n\n  const str = stringify(cookie)\n\n  if (str) {\n    headers.append('set-cookie', str, true)\n  }\n}\n\nwebidl.converters.DeleteCookieAttributes = webidl.dictionaryConverter([\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'path',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'domain',\n    defaultValue: () => null\n  }\n])\n\nwebidl.converters.Cookie = webidl.dictionaryConverter([\n  {\n    converter: webidl.converters.DOMString,\n    key: 'name'\n  },\n  {\n    converter: webidl.converters.DOMString,\n    key: 'value'\n  },\n  {\n    converter: webidl.nullableConverter((value) => {\n      if (typeof value === 'number') {\n        return webidl.converters['unsigned long long'](value)\n      }\n\n      return new Date(value)\n    }),\n    key: 'expires',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters['long long']),\n    key: 'maxAge',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'domain',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'path',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.boolean),\n    key: 'secure',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.boolean),\n    key: 'httpOnly',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.converters.USVString,\n    key: 'sameSite',\n    allowedValues: ['Strict', 'Lax', 'None']\n  },\n  {\n    converter: webidl.sequenceConverter(webidl.converters.DOMString),\n    key: 'unparsed',\n    defaultValue: () => []\n  }\n])\n\nmodule.exports = {\n  getCookies,\n  deleteCookie,\n  getSetCookies,\n  setCookie,\n  parseCookie\n}\n", "'use strict'\n\nconst { webidl } = require('../webidl')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { kConstruct } = require('../../core/symbols')\n\n/**\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent\n */\nclass MessageEvent extends Event {\n  #eventInit\n\n  constructor (type, eventInitDict = {}) {\n    if (type === kConstruct) {\n      super(arguments[1], arguments[2])\n      webidl.util.markAsUncloneable(this)\n      return\n    }\n\n    const prefix = 'MessageEvent constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    type = webidl.converters.DOMString(type, prefix, 'type')\n    eventInitDict = webidl.converters.MessageEventInit(eventInitDict, prefix, 'eventInitDict')\n\n    super(type, eventInitDict)\n\n    this.#eventInit = eventInitDict\n    webidl.util.markAsUncloneable(this)\n  }\n\n  get data () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.data\n  }\n\n  get origin () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.origin\n  }\n\n  get lastEventId () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.lastEventId\n  }\n\n  get source () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.source\n  }\n\n  get ports () {\n    webidl.brandCheck(this, MessageEvent)\n\n    if (!Object.isFrozen(this.#eventInit.ports)) {\n      Object.freeze(this.#eventInit.ports)\n    }\n\n    return this.#eventInit.ports\n  }\n\n  initMessageEvent (\n    type,\n    bubbles = false,\n    cancelable = false,\n    data = null,\n    origin = '',\n    lastEventId = '',\n    source = null,\n    ports = []\n  ) {\n    webidl.brandCheck(this, MessageEvent)\n\n    webidl.argumentLengthCheck(arguments, 1, 'MessageEvent.initMessageEvent')\n\n    return new MessageEvent(type, {\n      bubbles, cancelable, data, origin, lastEventId, source, ports\n    })\n  }\n\n  static createFastMessageEvent (type, init) {\n    const messageEvent = new MessageEvent(kConstruct, type, init)\n    messageEvent.#eventInit = init\n    messageEvent.#eventInit.data ??= null\n    messageEvent.#eventInit.origin ??= ''\n    messageEvent.#eventInit.lastEventId ??= ''\n    messageEvent.#eventInit.source ??= null\n    messageEvent.#eventInit.ports ??= []\n    return messageEvent\n  }\n}\n\nconst { createFastMessageEvent } = MessageEvent\ndelete MessageEvent.createFastMessageEvent\n\n/**\n * @see https://websockets.spec.whatwg.org/#the-closeevent-interface\n */\nclass CloseEvent extends Event {\n  #eventInit\n\n  constructor (type, eventInitDict = {}) {\n    const prefix = 'CloseEvent constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    type = webidl.converters.DOMString(type, prefix, 'type')\n    eventInitDict = webidl.converters.CloseEventInit(eventInitDict)\n\n    super(type, eventInitDict)\n\n    this.#eventInit = eventInitDict\n    webidl.util.markAsUncloneable(this)\n  }\n\n  get wasClean () {\n    webidl.brandCheck(this, CloseEvent)\n\n    return this.#eventInit.wasClean\n  }\n\n  get code () {\n    webidl.brandCheck(this, CloseEvent)\n\n    return this.#eventInit.code\n  }\n\n  get reason () {\n    webidl.brandCheck(this, CloseEvent)\n\n    return this.#eventInit.reason\n  }\n}\n\n// https://html.spec.whatwg.org/multipage/webappapis.html#the-errorevent-interface\nclass ErrorEvent extends Event {\n  #eventInit\n\n  constructor (type, eventInitDict) {\n    const prefix = 'ErrorEvent constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    super(type, eventInitDict)\n    webidl.util.markAsUncloneable(this)\n\n    type = webidl.converters.DOMString(type, prefix, 'type')\n    eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {})\n\n    this.#eventInit = eventInitDict\n  }\n\n  get message () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.message\n  }\n\n  get filename () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.filename\n  }\n\n  get lineno () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.lineno\n  }\n\n  get colno () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.colno\n  }\n\n  get error () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.error\n  }\n}\n\nObject.defineProperties(MessageEvent.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'MessageEvent',\n    configurable: true\n  },\n  data: kEnumerableProperty,\n  origin: kEnumerableProperty,\n  lastEventId: kEnumerableProperty,\n  source: kEnumerableProperty,\n  ports: kEnumerableProperty,\n  initMessageEvent: kEnumerableProperty\n})\n\nObject.defineProperties(CloseEvent.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'CloseEvent',\n    configurable: true\n  },\n  reason: kEnumerableProperty,\n  code: kEnumerableProperty,\n  wasClean: kEnumerableProperty\n})\n\nObject.defineProperties(ErrorEvent.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'ErrorEvent',\n    configurable: true\n  },\n  message: kEnumerableProperty,\n  filename: kEnumerableProperty,\n  lineno: kEnumerableProperty,\n  colno: kEnumerableProperty,\n  error: kEnumerableProperty\n})\n\nwebidl.converters.MessagePort = webidl.interfaceConverter(\n  webidl.is.MessagePort,\n  'MessagePort'\n)\n\nwebidl.converters['sequence<MessagePort>'] = webidl.sequenceConverter(\n  webidl.converters.MessagePort\n)\n\nconst eventInit = [\n  {\n    key: 'bubbles',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'cancelable',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'composed',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  }\n]\n\nwebidl.converters.MessageEventInit = webidl.dictionaryConverter([\n  ...eventInit,\n  {\n    key: 'data',\n    converter: webidl.converters.any,\n    defaultValue: () => null\n  },\n  {\n    key: 'origin',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'lastEventId',\n    converter: webidl.converters.DOMString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'source',\n    // Node doesn't implement WindowProxy or ServiceWorker, so the only\n    // valid value for source is a MessagePort.\n    converter: webidl.nullableConverter(webidl.converters.MessagePort),\n    defaultValue: () => null\n  },\n  {\n    key: 'ports',\n    converter: webidl.converters['sequence<MessagePort>'],\n    defaultValue: () => []\n  }\n])\n\nwebidl.converters.CloseEventInit = webidl.dictionaryConverter([\n  ...eventInit,\n  {\n    key: 'wasClean',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'code',\n    converter: webidl.converters['unsigned short'],\n    defaultValue: () => 0\n  },\n  {\n    key: 'reason',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  }\n])\n\nwebidl.converters.ErrorEventInit = webidl.dictionaryConverter([\n  ...eventInit,\n  {\n    key: 'message',\n    converter: webidl.converters.DOMString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'filename',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'lineno',\n    converter: webidl.converters['unsigned long'],\n    defaultValue: () => 0\n  },\n  {\n    key: 'colno',\n    converter: webidl.converters['unsigned long'],\n    defaultValue: () => 0\n  },\n  {\n    key: 'error',\n    converter: webidl.converters.any\n  }\n])\n\nmodule.exports = {\n  MessageEvent,\n  CloseEvent,\n  ErrorEvent,\n  createFastMessageEvent\n}\n", "'use strict'\n\n/**\n * This is a Globally Unique Identifier unique used to validate that the\n * endpoint accepts websocket connections.\n * @see https://www.rfc-editor.org/rfc/rfc6455.html#section-1.3\n * @type {'258EAFA5-E914-47DA-95CA-C5AB0DC85B11'}\n */\nconst uid = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'\n\n/**\n * @type {PropertyDescriptor}\n */\nconst staticPropertyDescriptors = {\n  enumerable: true,\n  writable: false,\n  configurable: false\n}\n\n/**\n * The states of the WebSocket connection.\n *\n * @readonly\n * @enum\n * @property {0} CONNECTING\n * @property {1} OPEN\n * @property {2} CLOSING\n * @property {3} CLOSED\n */\nconst states = {\n  CONNECTING: 0,\n  OPEN: 1,\n  CLOSING: 2,\n  CLOSED: 3\n}\n\n/**\n * @readonly\n * @enum\n * @property {0} NOT_SENT\n * @property {1} PROCESSING\n * @property {2} SENT\n */\nconst sentCloseFrameState = {\n  SENT: 1,\n  RECEIVED: 2\n}\n\n/**\n * The WebSocket opcodes.\n *\n * @readonly\n * @enum\n * @property {0x0} CONTINUATION\n * @property {0x1} TEXT\n * @property {0x2} BINARY\n * @property {0x8} CLOSE\n * @property {0x9} PING\n * @property {0xA} PONG\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-5.2\n */\nconst opcodes = {\n  CONTINUATION: 0x0,\n  TEXT: 0x1,\n  BINARY: 0x2,\n  CLOSE: 0x8,\n  PING: 0x9,\n  PONG: 0xA\n}\n\n/**\n * The maximum value for an unsigned 16-bit integer.\n *\n * @type {65535} 2 ** 16 - 1\n */\nconst maxUnsigned16Bit = 65535\n\n/**\n * The states of the parser.\n *\n * @readonly\n * @enum\n * @property {0} INFO\n * @property {2} PAYLOADLENGTH_16\n * @property {3} PAYLOADLENGTH_64\n * @property {4} READ_DATA\n */\nconst parserStates = {\n  INFO: 0,\n  PAYLOADLENGTH_16: 2,\n  PAYLOADLENGTH_64: 3,\n  READ_DATA: 4\n}\n\n/**\n * An empty buffer.\n *\n * @type {Buffer}\n */\nconst emptyBuffer = Buffer.allocUnsafe(0)\n\n/**\n * @readonly\n * @property {1} text\n * @property {2} typedArray\n * @property {3} arrayBuffer\n * @property {4} blob\n */\nconst sendHints = {\n  text: 1,\n  typedArray: 2,\n  arrayBuffer: 3,\n  blob: 4\n}\n\nmodule.exports = {\n  uid,\n  sentCloseFrameState,\n  staticPropertyDescriptors,\n  states,\n  opcodes,\n  maxUnsigned16Bit,\n  parserStates,\n  emptyBuffer,\n  sendHints\n}\n", "'use strict'\n\nconst { states, opcodes } = require('./constants')\nconst { isUtf8 } = require('node:buffer')\nconst { removeHTTPWhitespace } = require('../fetch/data-url')\nconst { collectASequenceOfCodePointsFast } = require('../infra')\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isConnecting (readyState) {\n  // If the WebSocket connection is not yet established, and the connection\n  // is not yet closed, then the WebSocket connection is in the CONNECTING state.\n  return readyState === states.CONNECTING\n}\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isEstablished (readyState) {\n  // If the server's response is validated as provided for above, it is\n  // said that _The WebSocket Connection is Established_ and that the\n  // WebSocket Connection is in the OPEN state.\n  return readyState === states.OPEN\n}\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isClosing (readyState) {\n  // Upon either sending or receiving a Close control frame, it is said\n  // that _The WebSocket Closing Handshake is Started_ and that the\n  // WebSocket connection is in the CLOSING state.\n  return readyState === states.CLOSING\n}\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isClosed (readyState) {\n  return readyState === states.CLOSED\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#concept-event-fire\n * @param {string} e\n * @param {EventTarget} target\n * @param {(...args: ConstructorParameters<typeof Event>) => Event} eventFactory\n * @param {EventInit | undefined} eventInitDict\n * @returns {void}\n */\nfunction fireEvent (e, target, eventFactory = (type, init) => new Event(type, init), eventInitDict = {}) {\n  // 1. If eventConstructor is not given, then let eventConstructor be Event.\n\n  // 2. Let event be the result of creating an event given eventConstructor,\n  //    in the relevant realm of target.\n  // 3. Initialize event\u2019s type attribute to e.\n  const event = eventFactory(e, eventInitDict)\n\n  // 4. Initialize any other IDL attributes of event as described in the\n  //    invocation of this algorithm.\n\n  // 5. Return the result of dispatching event at target, with legacy target\n  //    override flag set if set.\n  target.dispatchEvent(event)\n}\n\n/**\n * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol\n * @param {import('./websocket').Handler} handler\n * @param {number} type Opcode\n * @param {Buffer} data application data\n * @returns {void}\n */\nfunction websocketMessageReceived (handler, type, data) {\n  handler.onMessage(type, data)\n}\n\n/**\n * @param {Buffer} buffer\n * @returns {ArrayBuffer}\n */\nfunction toArrayBuffer (buffer) {\n  if (buffer.byteLength === buffer.buffer.byteLength) {\n    return buffer.buffer\n  }\n  return new Uint8Array(buffer).buffer\n}\n\n/**\n * @see https://datatracker.ietf.org/doc/html/rfc6455\n * @see https://datatracker.ietf.org/doc/html/rfc2616\n * @see https://bugs.chromium.org/p/chromium/issues/detail?id=398407\n * @param {string} protocol\n * @returns {boolean}\n */\nfunction isValidSubprotocol (protocol) {\n  // If present, this value indicates one\n  // or more comma-separated subprotocol the client wishes to speak,\n  // ordered by preference.  The elements that comprise this value\n  // MUST be non-empty strings with characters in the range U+0021 to\n  // U+007E not including separator characters as defined in\n  // [RFC2616] and MUST all be unique strings.\n  if (protocol.length === 0) {\n    return false\n  }\n\n  for (let i = 0; i < protocol.length; ++i) {\n    const code = protocol.charCodeAt(i)\n\n    if (\n      code < 0x21 || // CTL, contains SP (0x20) and HT (0x09)\n      code > 0x7E ||\n      code === 0x22 || // \"\n      code === 0x28 || // (\n      code === 0x29 || // )\n      code === 0x2C || // ,\n      code === 0x2F || // /\n      code === 0x3A || // :\n      code === 0x3B || // ;\n      code === 0x3C || // <\n      code === 0x3D || // =\n      code === 0x3E || // >\n      code === 0x3F || // ?\n      code === 0x40 || // @\n      code === 0x5B || // [\n      code === 0x5C || // \\\n      code === 0x5D || // ]\n      code === 0x7B || // {\n      code === 0x7D // }\n    ) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7-4\n * @param {number} code\n * @returns {boolean}\n */\nfunction isValidStatusCode (code) {\n  if (code >= 1000 && code < 1015) {\n    return (\n      code !== 1004 && // reserved\n      code !== 1005 && // \"MUST NOT be set as a status code\"\n      code !== 1006 // \"MUST NOT be set as a status code\"\n    )\n  }\n\n  return code >= 3000 && code <= 4999\n}\n\n/**\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-5.5\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isControlFrame (opcode) {\n  return (\n    opcode === opcodes.CLOSE ||\n    opcode === opcodes.PING ||\n    opcode === opcodes.PONG\n  )\n}\n\n/**\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isContinuationFrame (opcode) {\n  return opcode === opcodes.CONTINUATION\n}\n\n/**\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isTextBinaryFrame (opcode) {\n  return opcode === opcodes.TEXT || opcode === opcodes.BINARY\n}\n\n/**\n *\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isValidOpcode (opcode) {\n  return isTextBinaryFrame(opcode) || isContinuationFrame(opcode) || isControlFrame(opcode)\n}\n\n/**\n * Parses a Sec-WebSocket-Extensions header value.\n * @param {string} extensions\n * @returns {Map<string, string>}\n */\n// TODO(@Uzlopak, @KhafraDev): make compliant https://datatracker.ietf.org/doc/html/rfc6455#section-9.1\nfunction parseExtensions (extensions) {\n  const position = { position: 0 }\n  const extensionList = new Map()\n\n  while (position.position < extensions.length) {\n    const pair = collectASequenceOfCodePointsFast(';', extensions, position)\n    const [name, value = ''] = pair.split('=', 2)\n\n    extensionList.set(\n      removeHTTPWhitespace(name, true, false),\n      removeHTTPWhitespace(value, false, true)\n    )\n\n    position.position++\n  }\n\n  return extensionList\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc7692#section-7.1.2.2\n * @description \"client-max-window-bits = 1*DIGIT\"\n * @param {string} value\n * @returns {boolean}\n */\nfunction isValidClientWindowBits (value) {\n  // Must have at least one character\n  if (value.length === 0) {\n    return false\n  }\n\n  // Check all characters are ASCII digits\n  for (let i = 0; i < value.length; i++) {\n    const byte = value.charCodeAt(i)\n\n    if (byte < 0x30 || byte > 0x39) {\n      return false\n    }\n  }\n\n  // Check numeric range: zlib requires windowBits in range 8-15\n  const num = Number.parseInt(value, 10)\n  return num >= 8 && num <= 15\n}\n\n/**\n * @see https://whatpr.org/websockets/48/7b748d3...d5570f3.html#get-a-url-record\n * @param {string} url\n * @param {string} [baseURL]\n */\nfunction getURLRecord (url, baseURL) {\n  // 1. Let urlRecord be the result of applying the URL parser to url with baseURL .\n  // 2. If urlRecord is failure, then throw a \" SyntaxError \" DOMException .\n  let urlRecord\n\n  try {\n    urlRecord = new URL(url, baseURL)\n  } catch (e) {\n    throw new DOMException(e, 'SyntaxError')\n  }\n\n  // 3. If urlRecord \u2019s scheme is \" http \", then set urlRecord \u2019s scheme to \" ws \".\n  // 4. Otherwise, if urlRecord \u2019s scheme is \" https \", set urlRecord \u2019s scheme to \" wss \".\n  if (urlRecord.protocol === 'http:') {\n    urlRecord.protocol = 'ws:'\n  } else if (urlRecord.protocol === 'https:') {\n    urlRecord.protocol = 'wss:'\n  }\n\n  // 5. If urlRecord \u2019s scheme is not \" ws \" or \" wss \", then throw a \" SyntaxError \" DOMException .\n  if (urlRecord.protocol !== 'ws:' && urlRecord.protocol !== 'wss:') {\n    throw new DOMException('expected a ws: or wss: url', 'SyntaxError')\n  }\n\n  // If urlRecord \u2019s fragment is non-null, then throw a \" SyntaxError \" DOMException .\n  if (urlRecord.hash.length || urlRecord.href.endsWith('#')) {\n    throw new DOMException('hash', 'SyntaxError')\n  }\n\n  // Return urlRecord .\n  return urlRecord\n}\n\n// https://whatpr.org/websockets/48.html#validate-close-code-and-reason\nfunction validateCloseCodeAndReason (code, reason) {\n  // 1. If code is not null, but is neither an integer equal to\n  //    1000 nor an integer in the range 3000 to 4999, inclusive,\n  //    throw an \"InvalidAccessError\" DOMException.\n  if (code !== null) {\n    if (code !== 1000 && (code < 3000 || code > 4999)) {\n      throw new DOMException('invalid code', 'InvalidAccessError')\n    }\n  }\n\n  // 2. If reason is not null, then:\n  if (reason !== null) {\n    // 2.1. Let reasonBytes be the result of UTF-8 encoding reason.\n    // 2.2. If reasonBytes is longer than 123 bytes, then throw a\n    //      \"SyntaxError\" DOMException.\n    const reasonBytesLength = Buffer.byteLength(reason)\n\n    if (reasonBytesLength > 123) {\n      throw new DOMException(`Reason must be less than 123 bytes; received ${reasonBytesLength}`, 'SyntaxError')\n    }\n  }\n}\n\n/**\n * Converts a Buffer to utf-8, even on platforms without icu.\n * @type {(buffer: Buffer) => string}\n */\nconst utf8Decode = (() => {\n  if (typeof process.versions.icu === 'string') {\n    const fatalDecoder = new TextDecoder('utf-8', { fatal: true })\n    return fatalDecoder.decode.bind(fatalDecoder)\n  }\n  return function (buffer) {\n    if (isUtf8(buffer)) {\n      return buffer.toString('utf-8')\n    }\n    throw new TypeError('Invalid utf-8 received.')\n  }\n})()\n\nmodule.exports = {\n  isConnecting,\n  isEstablished,\n  isClosing,\n  isClosed,\n  fireEvent,\n  isValidSubprotocol,\n  isValidStatusCode,\n  websocketMessageReceived,\n  utf8Decode,\n  isControlFrame,\n  isContinuationFrame,\n  isTextBinaryFrame,\n  isValidOpcode,\n  parseExtensions,\n  isValidClientWindowBits,\n  toArrayBuffer,\n  getURLRecord,\n  validateCloseCodeAndReason\n}\n", "'use strict'\n\nconst { runtimeFeatures } = require('../../util/runtime-features')\nconst { maxUnsigned16Bit, opcodes } = require('./constants')\n\nconst BUFFER_SIZE = 8 * 1024\n\nlet buffer = null\nlet bufIdx = BUFFER_SIZE\n\nconst randomFillSync = runtimeFeatures.has('crypto')\n  ? require('node:crypto').randomFillSync\n  // not full compatibility, but minimum.\n  : function randomFillSync (buffer, _offset, _size) {\n    for (let i = 0; i < buffer.length; ++i) {\n      buffer[i] = Math.random() * 255 | 0\n    }\n    return buffer\n  }\n\nfunction generateMask () {\n  if (bufIdx === BUFFER_SIZE) {\n    bufIdx = 0\n    randomFillSync((buffer ??= Buffer.allocUnsafeSlow(BUFFER_SIZE)), 0, BUFFER_SIZE)\n  }\n  return [buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++]]\n}\n\nclass WebsocketFrameSend {\n  /**\n   * @param {Buffer|undefined} data\n   */\n  constructor (data) {\n    this.frameData = data\n  }\n\n  createFrame (opcode) {\n    const frameData = this.frameData\n    const maskKey = generateMask()\n    const bodyLength = frameData?.byteLength ?? 0\n\n    /** @type {number} */\n    let payloadLength = bodyLength // 0-125\n    let offset = 6\n\n    if (bodyLength > maxUnsigned16Bit) {\n      offset += 8 // payload length is next 8 bytes\n      payloadLength = 127\n    } else if (bodyLength > 125) {\n      offset += 2 // payload length is next 2 bytes\n      payloadLength = 126\n    }\n\n    const buffer = Buffer.allocUnsafe(bodyLength + offset)\n\n    // Clear first 2 bytes, everything else is overwritten\n    buffer[0] = buffer[1] = 0\n    buffer[0] |= 0x80 // FIN\n    buffer[0] = (buffer[0] & 0xF0) + opcode // opcode\n\n    /*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> */\n    buffer[offset - 4] = maskKey[0]\n    buffer[offset - 3] = maskKey[1]\n    buffer[offset - 2] = maskKey[2]\n    buffer[offset - 1] = maskKey[3]\n\n    buffer[1] = payloadLength\n\n    if (payloadLength === 126) {\n      buffer.writeUInt16BE(bodyLength, 2)\n    } else if (payloadLength === 127) {\n      // Clear extended payload length\n      buffer[2] = buffer[3] = 0\n      buffer.writeUIntBE(bodyLength, 4, 6)\n    }\n\n    buffer[1] |= 0x80 // MASK\n\n    // mask body\n    for (let i = 0; i < bodyLength; ++i) {\n      buffer[offset + i] = frameData[i] ^ maskKey[i & 3]\n    }\n\n    return buffer\n  }\n\n  /**\n   * @param {Uint8Array} buffer\n   */\n  static createFastTextFrame (buffer) {\n    const maskKey = generateMask()\n\n    const bodyLength = buffer.length\n\n    // mask body\n    for (let i = 0; i < bodyLength; ++i) {\n      buffer[i] ^= maskKey[i & 3]\n    }\n\n    let payloadLength = bodyLength\n    let offset = 6\n\n    if (bodyLength > maxUnsigned16Bit) {\n      offset += 8 // payload length is next 8 bytes\n      payloadLength = 127\n    } else if (bodyLength > 125) {\n      offset += 2 // payload length is next 2 bytes\n      payloadLength = 126\n    }\n    const head = Buffer.allocUnsafeSlow(offset)\n\n    head[0] = 0x80 /* FIN */ | opcodes.TEXT /* opcode TEXT */\n    head[1] = payloadLength | 0x80 /* MASK */\n    head[offset - 4] = maskKey[0]\n    head[offset - 3] = maskKey[1]\n    head[offset - 2] = maskKey[2]\n    head[offset - 1] = maskKey[3]\n\n    if (payloadLength === 126) {\n      head.writeUInt16BE(bodyLength, 2)\n    } else if (payloadLength === 127) {\n      head[2] = head[3] = 0\n      head.writeUIntBE(bodyLength, 4, 6)\n    }\n\n    return [head, buffer]\n  }\n}\n\nmodule.exports = {\n  WebsocketFrameSend,\n  generateMask // for benchmark\n}\n", "'use strict'\n\nconst { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require('./constants')\nconst { parseExtensions, isClosed, isClosing, isEstablished, isConnecting, validateCloseCodeAndReason } = require('./util')\nconst { makeRequest } = require('../fetch/request')\nconst { fetching } = require('../fetch/index')\nconst { Headers, getHeadersList } = require('../fetch/headers')\nconst { getDecodeSplit } = require('../fetch/util')\nconst { WebsocketFrameSend } = require('./frame')\nconst assert = require('node:assert')\nconst { runtimeFeatures } = require('../../util/runtime-features')\n\nconst crypto = runtimeFeatures.has('crypto')\n  ? require('node:crypto')\n  : null\n\nlet warningEmitted = false\n\n/**\n * @see https://websockets.spec.whatwg.org/#concept-websocket-establish\n * @param {URL} url\n * @param {string|string[]} protocols\n * @param {import('./websocket').Handler} handler\n * @param {Partial<import('../../../types/websocket').WebSocketInit>} options\n */\nfunction establishWebSocketConnection (url, protocols, client, handler, options) {\n  // 1. Let requestURL be a copy of url, with its scheme set to \"http\", if url\u2019s\n  //    scheme is \"ws\", and to \"https\" otherwise.\n  const requestURL = url\n\n  requestURL.protocol = url.protocol === 'ws:' ? 'http:' : 'https:'\n\n  // 2. Let request be a new request, whose URL is requestURL, client is client,\n  //    service-workers mode is \"none\", referrer is \"no-referrer\", mode is\n  //    \"websocket\", credentials mode is \"include\", cache mode is \"no-store\" ,\n  //    redirect mode is \"error\", and use-URL-credentials flag is set.\n  const request = makeRequest({\n    urlList: [requestURL],\n    client,\n    serviceWorkers: 'none',\n    referrer: 'no-referrer',\n    mode: 'websocket',\n    credentials: 'include',\n    cache: 'no-store',\n    redirect: 'error',\n    useURLCredentials: true\n  })\n\n  // Note: undici extension, allow setting custom headers.\n  if (options.headers) {\n    const headersList = getHeadersList(new Headers(options.headers))\n\n    request.headersList = headersList\n  }\n\n  // 3. Append (`Upgrade`, `websocket`) to request\u2019s header list.\n  // 4. Append (`Connection`, `Upgrade`) to request\u2019s header list.\n  // Note: both of these are handled by undici currently.\n  // https://github.com/nodejs/undici/blob/68c269c4144c446f3f1220951338daef4a6b5ec4/lib/client.js#L1397\n\n  // 5. Let keyValue be a nonce consisting of a randomly selected\n  //    16-byte value that has been forgiving-base64-encoded and\n  //    isomorphic encoded.\n  const keyValue = crypto.randomBytes(16).toString('base64')\n\n  // 6. Append (`Sec-WebSocket-Key`, keyValue) to request\u2019s\n  //    header list.\n  request.headersList.append('sec-websocket-key', keyValue, true)\n\n  // 7. Append (`Sec-WebSocket-Version`, `13`) to request\u2019s\n  //    header list.\n  request.headersList.append('sec-websocket-version', '13', true)\n\n  // 8. For each protocol in protocols, combine\n  //    (`Sec-WebSocket-Protocol`, protocol) in request\u2019s header\n  //    list.\n  for (const protocol of protocols) {\n    request.headersList.append('sec-websocket-protocol', protocol, true)\n  }\n\n  // 9. Let permessageDeflate be a user-agent defined\n  //    \"permessage-deflate\" extension header value.\n  // https://github.com/mozilla/gecko-dev/blob/ce78234f5e653a5d3916813ff990f053510227bc/netwerk/protocol/websocket/WebSocketChannel.cpp#L2673\n  const permessageDeflate = 'permessage-deflate; client_max_window_bits'\n\n  // 10. Append (`Sec-WebSocket-Extensions`, permessageDeflate) to\n  //     request\u2019s header list.\n  request.headersList.append('sec-websocket-extensions', permessageDeflate, true)\n\n  // 11. Fetch request with useParallelQueue set to true, and\n  //     processResponse given response being these steps:\n  const controller = fetching({\n    request,\n    useParallelQueue: true,\n    dispatcher: options.dispatcher,\n    processResponse (response) {\n      // 1. If response is a network error or its status is not 101,\n      //    fail the WebSocket connection.\n      // if (response.type === 'error' || ((response.socket?.session != null && response.status !== 200) && response.status !== 101)) {\n      if (response.type === 'error' || response.status !== 101) {\n        // The presence of a session property on the socket indicates HTTP2\n        // HTTP1\n        if (response.socket?.session == null) {\n          failWebsocketConnection(handler, 1002, 'Received network error or non-101 status code.', response.error)\n          return\n        }\n\n        // HTTP2\n        if (response.status !== 200) {\n          failWebsocketConnection(handler, 1002, 'Received network error or non-200 status code.', response.error)\n          return\n        }\n      }\n\n      if (warningEmitted === false && response.socket?.session != null) {\n        process.emitWarning('WebSocket over HTTP2 is experimental, and subject to change.', 'ExperimentalWarning')\n        warningEmitted = true\n      }\n\n      // 2. If protocols is not the empty list and extracting header\n      //    list values given `Sec-WebSocket-Protocol` and response\u2019s\n      //    header list results in null, failure, or the empty byte\n      //    sequence, then fail the WebSocket connection.\n      if (protocols.length !== 0 && !response.headersList.get('Sec-WebSocket-Protocol')) {\n        failWebsocketConnection(handler, 1002, 'Server did not respond with sent protocols.')\n        return\n      }\n\n      // 3. Follow the requirements stated step 2 to step 6, inclusive,\n      //    of the last set of steps in section 4.1 of The WebSocket\n      //    Protocol to validate response. This either results in fail\n      //    the WebSocket connection or the WebSocket connection is\n      //    established.\n\n      // 2. If the response lacks an |Upgrade| header field or the |Upgrade|\n      //    header field contains a value that is not an ASCII case-\n      //    insensitive match for the value \"websocket\", the client MUST\n      //    _Fail the WebSocket Connection_.\n      //    For H2, no upgrade header is expected.\n      if (response.socket.session == null && response.headersList.get('Upgrade')?.toLowerCase() !== 'websocket') {\n        failWebsocketConnection(handler, 1002, 'Server did not set Upgrade header to \"websocket\".')\n        return\n      }\n\n      // 3. If the response lacks a |Connection| header field or the\n      //    |Connection| header field doesn't contain a token that is an\n      //    ASCII case-insensitive match for the value \"Upgrade\", the client\n      //    MUST _Fail the WebSocket Connection_.\n      //    For H2, no connection header is expected.\n      if (response.socket.session == null && response.headersList.get('Connection')?.toLowerCase() !== 'upgrade') {\n        failWebsocketConnection(handler, 1002, 'Server did not set Connection header to \"upgrade\".')\n        return\n      }\n\n      // 4. If the response lacks a |Sec-WebSocket-Accept| header field or\n      //    the |Sec-WebSocket-Accept| contains a value other than the\n      //    base64-encoded SHA-1 of the concatenation of the |Sec-WebSocket-\n      //    Key| (as a string, not base64-decoded) with the string \"258EAFA5-\n      //    E914-47DA-95CA-C5AB0DC85B11\" but ignoring any leading and\n      //    trailing whitespace, the client MUST _Fail the WebSocket\n      //    Connection_.\n      const secWSAccept = response.headersList.get('Sec-WebSocket-Accept')\n      const digest = crypto.hash('sha1', keyValue + uid, 'base64')\n      if (secWSAccept !== digest) {\n        failWebsocketConnection(handler, 1002, 'Incorrect hash received in Sec-WebSocket-Accept header.')\n        return\n      }\n\n      // 5. If the response includes a |Sec-WebSocket-Extensions| header\n      //    field and this header field indicates the use of an extension\n      //    that was not present in the client's handshake (the server has\n      //    indicated an extension not requested by the client), the client\n      //    MUST _Fail the WebSocket Connection_.  (The parsing of this\n      //    header field to determine which extensions are requested is\n      //    discussed in Section 9.1.)\n      const secExtension = response.headersList.get('Sec-WebSocket-Extensions')\n      let extensions\n\n      if (secExtension !== null) {\n        extensions = parseExtensions(secExtension)\n\n        if (!extensions.has('permessage-deflate')) {\n          failWebsocketConnection(handler, 1002, 'Sec-WebSocket-Extensions header does not match.')\n          return\n        }\n      }\n\n      // 6. If the response includes a |Sec-WebSocket-Protocol| header field\n      //    and this header field indicates the use of a subprotocol that was\n      //    not present in the client's handshake (the server has indicated a\n      //    subprotocol not requested by the client), the client MUST _Fail\n      //    the WebSocket Connection_.\n      const secProtocol = response.headersList.get('Sec-WebSocket-Protocol')\n\n      if (secProtocol !== null) {\n        const requestProtocols = getDecodeSplit('sec-websocket-protocol', request.headersList)\n\n        // The client can request that the server use a specific subprotocol by\n        // including the |Sec-WebSocket-Protocol| field in its handshake.  If it\n        // is specified, the server needs to include the same field and one of\n        // the selected subprotocol values in its response for the connection to\n        // be established.\n        if (!requestProtocols.includes(secProtocol)) {\n          failWebsocketConnection(handler, 1002, 'Protocol was not set in the opening handshake.')\n          return\n        }\n      }\n\n      response.socket.on('data', handler.onSocketData)\n      response.socket.on('close', handler.onSocketClose)\n      response.socket.on('error', handler.onSocketError)\n\n      handler.wasEverConnected = true\n      handler.onConnectionEstablished(response, extensions)\n    }\n  })\n\n  return controller\n}\n\n/**\n * @see https://whatpr.org/websockets/48.html#close-the-websocket\n * @param {import('./websocket').Handler} object\n * @param {number} [code=null]\n * @param {string} [reason='']\n */\nfunction closeWebSocketConnection (object, code, reason, validate = false) {\n  // 1. If code was not supplied, let code be null.\n  code ??= null\n\n  // 2. If reason was not supplied, let reason be the empty string.\n  reason ??= ''\n\n  // 3. Validate close code and reason with code and reason.\n  if (validate) validateCloseCodeAndReason(code, reason)\n\n  // 4. Run the first matching steps from the following list:\n  //     - If object\u2019s ready state is CLOSING (2) or CLOSED (3)\n  //     - If the WebSocket connection is not yet established [WSP]\n  //     - If the WebSocket closing handshake has not yet been started [WSP]\n  //     - Otherwise\n  if (isClosed(object.readyState) || isClosing(object.readyState)) {\n    // Do nothing.\n  } else if (!isEstablished(object.readyState)) {\n    // Fail the WebSocket connection and set object\u2019s ready state to CLOSING (2). [WSP]\n    failWebsocketConnection(object)\n    object.readyState = states.CLOSING\n  } else if (!object.closeState.has(sentCloseFrameState.SENT) && !object.closeState.has(sentCloseFrameState.RECEIVED)) {\n    // Upon either sending or receiving a Close control frame, it is said\n    // that _The WebSocket Closing Handshake is Started_ and that the\n    // WebSocket connection is in the CLOSING state.\n\n    const frame = new WebsocketFrameSend()\n\n    // If neither code nor reason is present, the WebSocket Close\n    // message must not have a body.\n\n    // If code is present, then the status code to use in the\n    // WebSocket Close message must be the integer given by code.\n    // If code is null and reason is the empty string, the WebSocket Close frame must not have a body.\n    // If reason is non-empty but code is null, then set code to 1000 (\"Normal Closure\").\n    if (reason.length !== 0 && code === null) {\n      code = 1000\n    }\n\n    // If code is set, then the status code to use in the WebSocket Close frame must be the integer given by code.\n    assert(code === null || Number.isInteger(code))\n\n    if (code === null && reason.length === 0) {\n      frame.frameData = emptyBuffer\n    } else if (code !== null && reason === null) {\n      frame.frameData = Buffer.allocUnsafe(2)\n      frame.frameData.writeUInt16BE(code, 0)\n    } else if (code !== null && reason !== null) {\n      // If reason is also present, then reasonBytes must be\n      // provided in the Close message after the status code.\n      frame.frameData = Buffer.allocUnsafe(2 + Buffer.byteLength(reason))\n      frame.frameData.writeUInt16BE(code, 0)\n      // the body MAY contain UTF-8-encoded data with value /reason/\n      frame.frameData.write(reason, 2, 'utf-8')\n    } else {\n      frame.frameData = emptyBuffer\n    }\n\n    object.socket.write(frame.createFrame(opcodes.CLOSE))\n\n    object.closeState.add(sentCloseFrameState.SENT)\n\n    // Upon either sending or receiving a Close control frame, it is said\n    // that _The WebSocket Closing Handshake is Started_ and that the\n    // WebSocket connection is in the CLOSING state.\n    object.readyState = states.CLOSING\n  } else {\n    // Set object\u2019s ready state to CLOSING (2).\n    object.readyState = states.CLOSING\n  }\n}\n\n/**\n * @param {import('./websocket').Handler} handler\n * @param {number} code\n * @param {string|undefined} reason\n * @param {unknown} cause\n * @returns {void}\n */\nfunction failWebsocketConnection (handler, code, reason, cause) {\n  // If _The WebSocket Connection is Established_ prior to the point where\n  // the endpoint is required to _Fail the WebSocket Connection_, the\n  // endpoint SHOULD send a Close frame with an appropriate status code\n  // (Section 7.4) before proceeding to _Close the WebSocket Connection_.\n  if (isEstablished(handler.readyState)) {\n    closeWebSocketConnection(handler, code, reason, false)\n  }\n\n  handler.controller.abort()\n\n  if (isConnecting(handler.readyState)) {\n    // If the connection was not established, we must still emit an 'error' and 'close' events\n    handler.onSocketClose()\n  } else if (handler.socket?.destroyed === false) {\n    handler.socket.destroy()\n  }\n}\n\nmodule.exports = {\n  establishWebSocketConnection,\n  failWebsocketConnection,\n  closeWebSocketConnection\n}\n", "'use strict'\n\nconst { createInflateRaw, Z_DEFAULT_WINDOWBITS } = require('node:zlib')\nconst { isValidClientWindowBits } = require('./util')\nconst { MessageSizeExceededError } = require('../../core/errors')\n\nconst tail = Buffer.from([0x00, 0x00, 0xff, 0xff])\nconst kBuffer = Symbol('kBuffer')\nconst kLength = Symbol('kLength')\n\n// Default maximum decompressed message size: 4 MB\nconst kDefaultMaxDecompressedSize = 4 * 1024 * 1024\n\nclass PerMessageDeflate {\n  /** @type {import('node:zlib').InflateRaw} */\n  #inflate\n\n  #options = {}\n\n  /** @type {boolean} */\n  #aborted = false\n\n  /** @type {Function|null} */\n  #currentCallback = null\n\n  /**\n   * @param {Map<string, string>} extensions\n   */\n  constructor (extensions) {\n    this.#options.serverNoContextTakeover = extensions.has('server_no_context_takeover')\n    this.#options.serverMaxWindowBits = extensions.get('server_max_window_bits')\n  }\n\n  decompress (chunk, fin, callback) {\n    // An endpoint uses the following algorithm to decompress a message.\n    // 1.  Append 4 octets of 0x00 0x00 0xff 0xff to the tail end of the\n    //     payload of the message.\n    // 2.  Decompress the resulting data using DEFLATE.\n\n    if (this.#aborted) {\n      callback(new MessageSizeExceededError())\n      return\n    }\n\n    if (!this.#inflate) {\n      let windowBits = Z_DEFAULT_WINDOWBITS\n\n      if (this.#options.serverMaxWindowBits) { // empty values default to Z_DEFAULT_WINDOWBITS\n        if (!isValidClientWindowBits(this.#options.serverMaxWindowBits)) {\n          callback(new Error('Invalid server_max_window_bits'))\n          return\n        }\n\n        windowBits = Number.parseInt(this.#options.serverMaxWindowBits)\n      }\n\n      try {\n        this.#inflate = createInflateRaw({ windowBits })\n      } catch (err) {\n        callback(err)\n        return\n      }\n      this.#inflate[kBuffer] = []\n      this.#inflate[kLength] = 0\n\n      this.#inflate.on('data', (data) => {\n        if (this.#aborted) {\n          return\n        }\n\n        this.#inflate[kLength] += data.length\n\n        if (this.#inflate[kLength] > kDefaultMaxDecompressedSize) {\n          this.#aborted = true\n          this.#inflate.removeAllListeners()\n          this.#inflate.destroy()\n          this.#inflate = null\n\n          if (this.#currentCallback) {\n            const cb = this.#currentCallback\n            this.#currentCallback = null\n            cb(new MessageSizeExceededError())\n          }\n          return\n        }\n\n        this.#inflate[kBuffer].push(data)\n      })\n\n      this.#inflate.on('error', (err) => {\n        this.#inflate = null\n        callback(err)\n      })\n    }\n\n    this.#currentCallback = callback\n    this.#inflate.write(chunk)\n    if (fin) {\n      this.#inflate.write(tail)\n    }\n\n    this.#inflate.flush(() => {\n      if (this.#aborted || !this.#inflate) {\n        return\n      }\n\n      const full = Buffer.concat(this.#inflate[kBuffer], this.#inflate[kLength])\n\n      this.#inflate[kBuffer].length = 0\n      this.#inflate[kLength] = 0\n      this.#currentCallback = null\n\n      callback(null, full)\n    })\n  }\n}\n\nmodule.exports = { PerMessageDeflate }\n", "'use strict'\n\nconst { Writable } = require('node:stream')\nconst assert = require('node:assert')\nconst { parserStates, opcodes, states, emptyBuffer, sentCloseFrameState } = require('./constants')\nconst {\n  isValidStatusCode,\n  isValidOpcode,\n  websocketMessageReceived,\n  utf8Decode,\n  isControlFrame,\n  isTextBinaryFrame,\n  isContinuationFrame\n} = require('./util')\nconst { failWebsocketConnection } = require('./connection')\nconst { WebsocketFrameSend } = require('./frame')\nconst { PerMessageDeflate } = require('./permessage-deflate')\nconst { MessageSizeExceededError } = require('../../core/errors')\n\n// This code was influenced by ws released under the MIT license.\n// Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>\n// Copyright (c) 2013 Arnout Kazemier and contributors\n// Copyright (c) 2016 Luigi Pinca and contributors\n\nclass ByteParser extends Writable {\n  #buffers = []\n  #fragmentsBytes = 0\n  #byteOffset = 0\n  #loop = false\n\n  #state = parserStates.INFO\n\n  #info = {}\n  #fragments = []\n\n  /** @type {Map<string, PerMessageDeflate>} */\n  #extensions\n\n  /** @type {import('./websocket').Handler} */\n  #handler\n\n  /**\n   * @param {import('./websocket').Handler} handler\n   * @param {Map<string, string>|null} extensions\n   */\n  constructor (handler, extensions) {\n    super()\n\n    this.#handler = handler\n    this.#extensions = extensions == null ? new Map() : extensions\n\n    if (this.#extensions.has('permessage-deflate')) {\n      this.#extensions.set('permessage-deflate', new PerMessageDeflate(extensions))\n    }\n  }\n\n  /**\n   * @param {Buffer} chunk\n   * @param {() => void} callback\n   */\n  _write (chunk, _, callback) {\n    this.#buffers.push(chunk)\n    this.#byteOffset += chunk.length\n    this.#loop = true\n\n    this.run(callback)\n  }\n\n  /**\n   * Runs whenever a new chunk is received.\n   * Callback is called whenever there are no more chunks buffering,\n   * or not enough bytes are buffered to parse.\n   */\n  run (callback) {\n    while (this.#loop) {\n      if (this.#state === parserStates.INFO) {\n        // If there aren't enough bytes to parse the payload length, etc.\n        if (this.#byteOffset < 2) {\n          return callback()\n        }\n\n        const buffer = this.consume(2)\n        const fin = (buffer[0] & 0x80) !== 0\n        const opcode = buffer[0] & 0x0F\n        const masked = (buffer[1] & 0x80) === 0x80\n\n        const fragmented = !fin && opcode !== opcodes.CONTINUATION\n        const payloadLength = buffer[1] & 0x7F\n\n        const rsv1 = buffer[0] & 0x40\n        const rsv2 = buffer[0] & 0x20\n        const rsv3 = buffer[0] & 0x10\n\n        if (!isValidOpcode(opcode)) {\n          failWebsocketConnection(this.#handler, 1002, 'Invalid opcode received')\n          return callback()\n        }\n\n        if (masked) {\n          failWebsocketConnection(this.#handler, 1002, 'Frame cannot be masked')\n          return callback()\n        }\n\n        // MUST be 0 unless an extension is negotiated that defines meanings\n        // for non-zero values.  If a nonzero value is received and none of\n        // the negotiated extensions defines the meaning of such a nonzero\n        // value, the receiving endpoint MUST _Fail the WebSocket\n        // Connection_.\n        // This document allocates the RSV1 bit of the WebSocket header for\n        // PMCEs and calls the bit the \"Per-Message Compressed\" bit.  On a\n        // WebSocket connection where a PMCE is in use, this bit indicates\n        // whether a message is compressed or not.\n        if (rsv1 !== 0 && !this.#extensions.has('permessage-deflate')) {\n          failWebsocketConnection(this.#handler, 1002, 'Expected RSV1 to be clear.')\n          return\n        }\n\n        if (rsv2 !== 0 || rsv3 !== 0) {\n          failWebsocketConnection(this.#handler, 1002, 'RSV1, RSV2, RSV3 must be clear')\n          return\n        }\n\n        if (fragmented && !isTextBinaryFrame(opcode)) {\n          // Only text and binary frames can be fragmented\n          failWebsocketConnection(this.#handler, 1002, 'Invalid frame type was fragmented.')\n          return\n        }\n\n        // If we are already parsing a text/binary frame and do not receive either\n        // a continuation frame or close frame, fail the connection.\n        if (isTextBinaryFrame(opcode) && this.#fragments.length > 0) {\n          failWebsocketConnection(this.#handler, 1002, 'Expected continuation frame')\n          return\n        }\n\n        if (this.#info.fragmented && fragmented) {\n          // A fragmented frame can't be fragmented itself\n          failWebsocketConnection(this.#handler, 1002, 'Fragmented frame exceeded 125 bytes.')\n          return\n        }\n\n        // \"All control frames MUST have a payload length of 125 bytes or less\n        // and MUST NOT be fragmented.\"\n        if ((payloadLength > 125 || fragmented) && isControlFrame(opcode)) {\n          failWebsocketConnection(this.#handler, 1002, 'Control frame either too large or fragmented')\n          return\n        }\n\n        if (isContinuationFrame(opcode) && this.#fragments.length === 0 && !this.#info.compressed) {\n          failWebsocketConnection(this.#handler, 1002, 'Unexpected continuation frame')\n          return\n        }\n\n        if (payloadLength <= 125) {\n          this.#info.payloadLength = payloadLength\n          this.#state = parserStates.READ_DATA\n        } else if (payloadLength === 126) {\n          this.#state = parserStates.PAYLOADLENGTH_16\n        } else if (payloadLength === 127) {\n          this.#state = parserStates.PAYLOADLENGTH_64\n        }\n\n        if (isTextBinaryFrame(opcode)) {\n          this.#info.binaryType = opcode\n          this.#info.compressed = rsv1 !== 0\n        }\n\n        this.#info.opcode = opcode\n        this.#info.masked = masked\n        this.#info.fin = fin\n        this.#info.fragmented = fragmented\n      } else if (this.#state === parserStates.PAYLOADLENGTH_16) {\n        if (this.#byteOffset < 2) {\n          return callback()\n        }\n\n        const buffer = this.consume(2)\n\n        this.#info.payloadLength = buffer.readUInt16BE(0)\n        this.#state = parserStates.READ_DATA\n      } else if (this.#state === parserStates.PAYLOADLENGTH_64) {\n        if (this.#byteOffset < 8) {\n          return callback()\n        }\n\n        const buffer = this.consume(8)\n        const upper = buffer.readUInt32BE(0)\n        const lower = buffer.readUInt32BE(4)\n\n        // 2^31 is the maximum bytes an arraybuffer can contain\n        // on 32-bit systems. Although, on 64-bit systems, this is\n        // 2^53-1 bytes.\n        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_array_length\n        // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/common/globals.h;drc=1946212ac0100668f14eb9e2843bdd846e510a1e;bpv=1;bpt=1;l=1275\n        // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/objects/js-array-buffer.h;l=34;drc=1946212ac0100668f14eb9e2843bdd846e510a1e\n        if (upper !== 0 || lower > 2 ** 31 - 1) {\n          failWebsocketConnection(this.#handler, 1009, 'Received payload length > 2^31 bytes.')\n          return\n        }\n\n        this.#info.payloadLength = lower\n        this.#state = parserStates.READ_DATA\n      } else if (this.#state === parserStates.READ_DATA) {\n        if (this.#byteOffset < this.#info.payloadLength) {\n          return callback()\n        }\n\n        const body = this.consume(this.#info.payloadLength)\n\n        if (isControlFrame(this.#info.opcode)) {\n          this.#loop = this.parseControlFrame(body)\n          this.#state = parserStates.INFO\n        } else {\n          if (!this.#info.compressed) {\n            this.writeFragments(body)\n\n            // If the frame is not fragmented, a message has been received.\n            // If the frame is fragmented, it will terminate with a fin bit set\n            // and an opcode of 0 (continuation), therefore we handle that when\n            // parsing continuation frames, not here.\n            if (!this.#info.fragmented && this.#info.fin) {\n              websocketMessageReceived(this.#handler, this.#info.binaryType, this.consumeFragments())\n            }\n\n            this.#state = parserStates.INFO\n          } else {\n            this.#extensions.get('permessage-deflate').decompress(body, this.#info.fin, (error, data) => {\n              if (error) {\n                // Use 1009 (Message Too Big) for decompression size limit errors\n                const code = error instanceof MessageSizeExceededError ? 1009 : 1007\n                failWebsocketConnection(this.#handler, code, error.message)\n                return\n              }\n\n              this.writeFragments(data)\n\n              if (!this.#info.fin) {\n                this.#state = parserStates.INFO\n                this.#loop = true\n                this.run(callback)\n                return\n              }\n\n              websocketMessageReceived(this.#handler, this.#info.binaryType, this.consumeFragments())\n\n              this.#loop = true\n              this.#state = parserStates.INFO\n              this.run(callback)\n            })\n\n            this.#loop = false\n            break\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Take n bytes from the buffered Buffers\n   * @param {number} n\n   * @returns {Buffer}\n   */\n  consume (n) {\n    if (n > this.#byteOffset) {\n      throw new Error('Called consume() before buffers satiated.')\n    } else if (n === 0) {\n      return emptyBuffer\n    }\n\n    this.#byteOffset -= n\n\n    const first = this.#buffers[0]\n\n    if (first.length > n) {\n      // replace with remaining buffer\n      this.#buffers[0] = first.subarray(n, first.length)\n      return first.subarray(0, n)\n    } else if (first.length === n) {\n      // prefect match\n      return this.#buffers.shift()\n    } else {\n      let offset = 0\n      // If Buffer.allocUnsafe is used, extra copies will be made because the offset is non-zero.\n      const buffer = Buffer.allocUnsafeSlow(n)\n      while (offset !== n) {\n        const next = this.#buffers[0]\n        const length = next.length\n\n        if (length + offset === n) {\n          buffer.set(this.#buffers.shift(), offset)\n          break\n        } else if (length + offset > n) {\n          buffer.set(next.subarray(0, n - offset), offset)\n          this.#buffers[0] = next.subarray(n - offset)\n          break\n        } else {\n          buffer.set(this.#buffers.shift(), offset)\n          offset += length\n        }\n      }\n\n      return buffer\n    }\n  }\n\n  writeFragments (fragment) {\n    this.#fragmentsBytes += fragment.length\n    this.#fragments.push(fragment)\n  }\n\n  consumeFragments () {\n    const fragments = this.#fragments\n\n    if (fragments.length === 1) {\n      // single fragment\n      this.#fragmentsBytes = 0\n      return fragments.shift()\n    }\n\n    let offset = 0\n    // If Buffer.allocUnsafe is used, extra copies will be made because the offset is non-zero.\n    const output = Buffer.allocUnsafeSlow(this.#fragmentsBytes)\n\n    for (let i = 0; i < fragments.length; ++i) {\n      const buffer = fragments[i]\n      output.set(buffer, offset)\n      offset += buffer.length\n    }\n\n    this.#fragments = []\n    this.#fragmentsBytes = 0\n\n    return output\n  }\n\n  parseCloseBody (data) {\n    assert(data.length !== 1)\n\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5\n    /** @type {number|undefined} */\n    let code\n\n    if (data.length >= 2) {\n      // _The WebSocket Connection Close Code_ is\n      // defined as the status code (Section 7.4) contained in the first Close\n      // control frame received by the application\n      code = data.readUInt16BE(0)\n    }\n\n    if (code !== undefined && !isValidStatusCode(code)) {\n      return { code: 1002, reason: 'Invalid status code', error: true }\n    }\n\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.6\n    /** @type {Buffer} */\n    let reason = data.subarray(2)\n\n    // Remove BOM\n    if (reason[0] === 0xEF && reason[1] === 0xBB && reason[2] === 0xBF) {\n      reason = reason.subarray(3)\n    }\n\n    try {\n      reason = utf8Decode(reason)\n    } catch {\n      return { code: 1007, reason: 'Invalid UTF-8', error: true }\n    }\n\n    return { code, reason, error: false }\n  }\n\n  /**\n   * Parses control frames.\n   * @param {Buffer} body\n   */\n  parseControlFrame (body) {\n    const { opcode, payloadLength } = this.#info\n\n    if (opcode === opcodes.CLOSE) {\n      if (payloadLength === 1) {\n        failWebsocketConnection(this.#handler, 1002, 'Received close frame with a 1-byte body.')\n        return false\n      }\n\n      this.#info.closeInfo = this.parseCloseBody(body)\n\n      if (this.#info.closeInfo.error) {\n        const { code, reason } = this.#info.closeInfo\n\n        failWebsocketConnection(this.#handler, code, reason)\n        return false\n      }\n\n      // Upon receiving such a frame, the other peer sends a\n      // Close frame in response, if it hasn't already sent one.\n      if (!this.#handler.closeState.has(sentCloseFrameState.SENT) && !this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n        // If an endpoint receives a Close frame and did not previously send a\n        // Close frame, the endpoint MUST send a Close frame in response.  (When\n        // sending a Close frame in response, the endpoint typically echos the\n        // status code it received.)\n        let body = emptyBuffer\n        if (this.#info.closeInfo.code) {\n          body = Buffer.allocUnsafe(2)\n          body.writeUInt16BE(this.#info.closeInfo.code, 0)\n        }\n        const closeFrame = new WebsocketFrameSend(body)\n\n        this.#handler.socket.write(closeFrame.createFrame(opcodes.CLOSE))\n        this.#handler.closeState.add(sentCloseFrameState.SENT)\n      }\n\n      // Upon either sending or receiving a Close control frame, it is said\n      // that _The WebSocket Closing Handshake is Started_ and that the\n      // WebSocket connection is in the CLOSING state.\n      this.#handler.readyState = states.CLOSING\n      this.#handler.closeState.add(sentCloseFrameState.RECEIVED)\n\n      return false\n    } else if (opcode === opcodes.PING) {\n      // Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in\n      // response, unless it already received a Close frame.\n      // A Pong frame sent in response to a Ping frame must have identical\n      // \"Application data\"\n\n      if (!this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n        const frame = new WebsocketFrameSend(body)\n\n        this.#handler.socket.write(frame.createFrame(opcodes.PONG))\n\n        this.#handler.onPing(body)\n      }\n    } else if (opcode === opcodes.PONG) {\n      // A Pong frame MAY be sent unsolicited.  This serves as a\n      // unidirectional heartbeat.  A response to an unsolicited Pong frame is\n      // not expected.\n      this.#handler.onPong(body)\n    }\n\n    return true\n  }\n\n  get closingInfo () {\n    return this.#info.closeInfo\n  }\n}\n\nmodule.exports = {\n  ByteParser\n}\n", "'use strict'\n\nconst { WebsocketFrameSend } = require('./frame')\nconst { opcodes, sendHints } = require('./constants')\nconst FixedQueue = require('../../dispatcher/fixed-queue')\n\n/**\n * @typedef {object} SendQueueNode\n * @property {Promise<void> | null} promise\n * @property {((...args: any[]) => any)} callback\n * @property {Buffer | null} frame\n */\n\nclass SendQueue {\n  /**\n   * @type {FixedQueue}\n   */\n  #queue = new FixedQueue()\n\n  /**\n   * @type {boolean}\n   */\n  #running = false\n\n  /** @type {import('node:net').Socket} */\n  #socket\n\n  constructor (socket) {\n    this.#socket = socket\n  }\n\n  add (item, cb, hint) {\n    if (hint !== sendHints.blob) {\n      if (!this.#running) {\n        // TODO(@tsctx): support fast-path for string on running\n        if (hint === sendHints.text) {\n          // special fast-path for string\n          const { 0: head, 1: body } = WebsocketFrameSend.createFastTextFrame(item)\n          this.#socket.cork()\n          this.#socket.write(head)\n          this.#socket.write(body, cb)\n          this.#socket.uncork()\n        } else {\n          // direct writing\n          this.#socket.write(createFrame(item, hint), cb)\n        }\n      } else {\n        /** @type {SendQueueNode} */\n        const node = {\n          promise: null,\n          callback: cb,\n          frame: createFrame(item, hint)\n        }\n        this.#queue.push(node)\n      }\n      return\n    }\n\n    /** @type {SendQueueNode} */\n    const node = {\n      promise: item.arrayBuffer().then((ab) => {\n        node.promise = null\n        node.frame = createFrame(ab, hint)\n      }),\n      callback: cb,\n      frame: null\n    }\n\n    this.#queue.push(node)\n\n    if (!this.#running) {\n      this.#run()\n    }\n  }\n\n  async #run () {\n    this.#running = true\n    const queue = this.#queue\n    while (!queue.isEmpty()) {\n      const node = queue.shift()\n      // wait pending promise\n      if (node.promise !== null) {\n        await node.promise\n      }\n      // write\n      this.#socket.write(node.frame, node.callback)\n      // cleanup\n      node.callback = node.frame = null\n    }\n    this.#running = false\n  }\n}\n\nfunction createFrame (data, hint) {\n  return new WebsocketFrameSend(toBuffer(data, hint)).createFrame(hint === sendHints.text ? opcodes.TEXT : opcodes.BINARY)\n}\n\nfunction toBuffer (data, hint) {\n  switch (hint) {\n    case sendHints.text:\n    case sendHints.typedArray:\n      return new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n    case sendHints.arrayBuffer:\n    case sendHints.blob:\n      return new Uint8Array(data)\n  }\n}\n\nmodule.exports = { SendQueue }\n", "'use strict'\n\nconst { isArrayBuffer } = require('node:util/types')\nconst { webidl } = require('../webidl')\nconst { URLSerializer } = require('../fetch/data-url')\nconst { environmentSettingsObject } = require('../fetch/util')\nconst { staticPropertyDescriptors, states, sentCloseFrameState, sendHints, opcodes } = require('./constants')\nconst {\n  isConnecting,\n  isEstablished,\n  isClosing,\n  isClosed,\n  isValidSubprotocol,\n  fireEvent,\n  utf8Decode,\n  toArrayBuffer,\n  getURLRecord\n} = require('./util')\nconst { establishWebSocketConnection, closeWebSocketConnection, failWebsocketConnection } = require('./connection')\nconst { ByteParser } = require('./receiver')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { getGlobalDispatcher } = require('../../global')\nconst { ErrorEvent, CloseEvent, createFastMessageEvent } = require('./events')\nconst { SendQueue } = require('./sender')\nconst { WebsocketFrameSend } = require('./frame')\nconst { channels } = require('../../core/diagnostics')\n\nfunction getSocketAddress (socket) {\n  if (typeof socket?.address === 'function') {\n    return socket.address()\n  }\n\n  if (typeof socket?.session?.socket?.address === 'function') {\n    return socket.session.socket.address()\n  }\n\n  return null\n}\n\n/**\n * @typedef {object} Handler\n * @property {(response: any, extensions?: string[]) => void} onConnectionEstablished\n * @property {(opcode: number, data: Buffer) => void} onMessage\n * @property {(error: Error) => void} onParserError\n * @property {() => void} onParserDrain\n * @property {(chunk: Buffer) => void} onSocketData\n * @property {(err: Error) => void} onSocketError\n * @property {() => void} onSocketClose\n * @property {(body: Buffer) => void} onPing\n * @property {(body: Buffer) => void} onPong\n *\n * @property {number} readyState\n * @property {import('stream').Duplex} socket\n * @property {Set<number>} closeState\n * @property {import('../fetch/index').Fetch} controller\n * @property {boolean} [wasEverConnected=false]\n */\n\n// https://websockets.spec.whatwg.org/#interface-definition\nclass WebSocket extends EventTarget {\n  #events = {\n    open: null,\n    error: null,\n    close: null,\n    message: null\n  }\n\n  #bufferedAmount = 0\n  #protocol = ''\n  #extensions = ''\n\n  /** @type {SendQueue} */\n  #sendQueue\n\n  /** @type {Handler} */\n  #handler = {\n    onConnectionEstablished: (response, extensions) => this.#onConnectionEstablished(response, extensions),\n    onMessage: (opcode, data) => this.#onMessage(opcode, data),\n    onParserError: (err) => failWebsocketConnection(this.#handler, null, err.message),\n    onParserDrain: () => this.#onParserDrain(),\n    onSocketData: (chunk) => {\n      if (!this.#parser.write(chunk)) {\n        this.#handler.socket.pause()\n      }\n    },\n    onSocketError: (err) => {\n      this.#handler.readyState = states.CLOSING\n\n      if (channels.socketError.hasSubscribers) {\n        channels.socketError.publish(err)\n      }\n\n      this.#handler.socket.destroy()\n    },\n    onSocketClose: () => this.#onSocketClose(),\n    onPing: (body) => {\n      if (channels.ping.hasSubscribers) {\n        channels.ping.publish({\n          payload: body,\n          websocket: this\n        })\n      }\n    },\n    onPong: (body) => {\n      if (channels.pong.hasSubscribers) {\n        channels.pong.publish({\n          payload: body,\n          websocket: this\n        })\n      }\n    },\n\n    readyState: states.CONNECTING,\n    socket: null,\n    closeState: new Set(),\n    controller: null,\n    wasEverConnected: false\n  }\n\n  #url\n  #binaryType\n  /** @type {import('./receiver').ByteParser} */\n  #parser\n\n  /**\n   * @param {string} url\n   * @param {string|string[]} protocols\n   */\n  constructor (url, protocols = []) {\n    super()\n\n    webidl.util.markAsUncloneable(this)\n\n    const prefix = 'WebSocket constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    const options = webidl.converters['DOMString or sequence<DOMString> or WebSocketInit'](protocols, prefix, 'options')\n\n    url = webidl.converters.USVString(url)\n    protocols = options.protocols\n\n    // 1. Let baseURL be this's relevant settings object's API base URL.\n    const baseURL = environmentSettingsObject.settingsObject.baseUrl\n\n    // 2. Let urlRecord be the result of getting a URL record given url and baseURL.\n    const urlRecord = getURLRecord(url, baseURL)\n\n    // 3. If protocols is a string, set protocols to a sequence consisting\n    //    of just that string.\n    if (typeof protocols === 'string') {\n      protocols = [protocols]\n    }\n\n    // 4. If any of the values in protocols occur more than once or otherwise\n    //    fail to match the requirements for elements that comprise the value\n    //    of `Sec-WebSocket-Protocol` fields as defined by The WebSocket\n    //    protocol, then throw a \"SyntaxError\" DOMException.\n    if (protocols.length !== new Set(protocols.map(p => p.toLowerCase())).size) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    if (protocols.length > 0 && !protocols.every(p => isValidSubprotocol(p))) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    // 5. Set this's url to urlRecord.\n    this.#url = new URL(urlRecord.href)\n\n    // 6. Let client be this's relevant settings object.\n    const client = environmentSettingsObject.settingsObject\n\n    // 7. Run this step in parallel:\n    // 7.1. Establish a WebSocket connection given urlRecord, protocols,\n    //      and client.\n    this.#handler.controller = establishWebSocketConnection(\n      urlRecord,\n      protocols,\n      client,\n      this.#handler,\n      options\n    )\n\n    // Each WebSocket object has an associated ready state, which is a\n    // number representing the state of the connection. Initially it must\n    // be CONNECTING (0).\n    this.#handler.readyState = WebSocket.CONNECTING\n\n    // The extensions attribute must initially return the empty string.\n\n    // The protocol attribute must initially return the empty string.\n\n    // Each WebSocket object has an associated binary type, which is a\n    // BinaryType. Initially it must be \"blob\".\n    this.#binaryType = 'blob'\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#dom-websocket-close\n   * @param {number|undefined} code\n   * @param {string|undefined} reason\n   */\n  close (code = undefined, reason = undefined) {\n    webidl.brandCheck(this, WebSocket)\n\n    const prefix = 'WebSocket.close'\n\n    if (code !== undefined) {\n      code = webidl.converters['unsigned short'](code, prefix, 'code', webidl.attributes.Clamp)\n    }\n\n    if (reason !== undefined) {\n      reason = webidl.converters.USVString(reason)\n    }\n\n    // 1. If code is the special value \"missing\", then set code to null.\n    code ??= null\n\n    // 2. If reason is the special value \"missing\", then set reason to the empty string.\n    reason ??= ''\n\n    // 3. Close the WebSocket with this, code, and reason.\n    closeWebSocketConnection(this.#handler, code, reason, true)\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#dom-websocket-send\n   * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data\n   */\n  send (data) {\n    webidl.brandCheck(this, WebSocket)\n\n    const prefix = 'WebSocket.send'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    data = webidl.converters.WebSocketSendData(data, prefix, 'data')\n\n    // 1. If this's ready state is CONNECTING, then throw an\n    //    \"InvalidStateError\" DOMException.\n    if (isConnecting(this.#handler.readyState)) {\n      throw new DOMException('Sent before connected.', 'InvalidStateError')\n    }\n\n    // 2. Run the appropriate set of steps from the following list:\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-6.1\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-5.2\n\n    if (!isEstablished(this.#handler.readyState) || isClosing(this.#handler.readyState)) {\n      return\n    }\n\n    // If data is a string\n    if (typeof data === 'string') {\n      // If the WebSocket connection is established and the WebSocket\n      // closing handshake has not yet started, then the user agent\n      // must send a WebSocket Message comprised of the data argument\n      // using a text frame opcode; if the data cannot be sent, e.g.\n      // because it would need to be buffered but the buffer is full,\n      // the user agent must flag the WebSocket as full and then close\n      // the WebSocket connection. Any invocation of this method with a\n      // string argument that does not throw an exception must increase\n      // the bufferedAmount attribute by the number of bytes needed to\n      // express the argument as UTF-8.\n\n      const buffer = Buffer.from(data)\n\n      this.#bufferedAmount += buffer.byteLength\n      this.#sendQueue.add(buffer, () => {\n        this.#bufferedAmount -= buffer.byteLength\n      }, sendHints.text)\n    } else if (isArrayBuffer(data)) {\n      // If the WebSocket connection is established, and the WebSocket\n      // closing handshake has not yet started, then the user agent must\n      // send a WebSocket Message comprised of data using a binary frame\n      // opcode; if the data cannot be sent, e.g. because it would need\n      // to be buffered but the buffer is full, the user agent must flag\n      // the WebSocket as full and then close the WebSocket connection.\n      // The data to be sent is the data stored in the buffer described\n      // by the ArrayBuffer object. Any invocation of this method with an\n      // ArrayBuffer argument that does not throw an exception must\n      // increase the bufferedAmount attribute by the length of the\n      // ArrayBuffer in bytes.\n\n      this.#bufferedAmount += data.byteLength\n      this.#sendQueue.add(data, () => {\n        this.#bufferedAmount -= data.byteLength\n      }, sendHints.arrayBuffer)\n    } else if (ArrayBuffer.isView(data)) {\n      // If the WebSocket connection is established, and the WebSocket\n      // closing handshake has not yet started, then the user agent must\n      // send a WebSocket Message comprised of data using a binary frame\n      // opcode; if the data cannot be sent, e.g. because it would need to\n      // be buffered but the buffer is full, the user agent must flag the\n      // WebSocket as full and then close the WebSocket connection. The\n      // data to be sent is the data stored in the section of the buffer\n      // described by the ArrayBuffer object that data references. Any\n      // invocation of this method with this kind of argument that does\n      // not throw an exception must increase the bufferedAmount attribute\n      // by the length of data\u2019s buffer in bytes.\n\n      this.#bufferedAmount += data.byteLength\n      this.#sendQueue.add(data, () => {\n        this.#bufferedAmount -= data.byteLength\n      }, sendHints.typedArray)\n    } else if (webidl.is.Blob(data)) {\n      // If the WebSocket connection is established, and the WebSocket\n      // closing handshake has not yet started, then the user agent must\n      // send a WebSocket Message comprised of data using a binary frame\n      // opcode; if the data cannot be sent, e.g. because it would need to\n      // be buffered but the buffer is full, the user agent must flag the\n      // WebSocket as full and then close the WebSocket connection. The data\n      // to be sent is the raw data represented by the Blob object. Any\n      // invocation of this method with a Blob argument that does not throw\n      // an exception must increase the bufferedAmount attribute by the size\n      // of the Blob object\u2019s raw data, in bytes.\n\n      this.#bufferedAmount += data.size\n      this.#sendQueue.add(data, () => {\n        this.#bufferedAmount -= data.size\n      }, sendHints.blob)\n    }\n  }\n\n  get readyState () {\n    webidl.brandCheck(this, WebSocket)\n\n    // The readyState getter steps are to return this's ready state.\n    return this.#handler.readyState\n  }\n\n  get bufferedAmount () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#bufferedAmount\n  }\n\n  get url () {\n    webidl.brandCheck(this, WebSocket)\n\n    // The url getter steps are to return this's url, serialized.\n    return URLSerializer(this.#url)\n  }\n\n  get extensions () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#extensions\n  }\n\n  get protocol () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#protocol\n  }\n\n  get onopen () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.open\n  }\n\n  set onopen (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.open) {\n      this.removeEventListener('open', this.#events.open)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('open', listener)\n      this.#events.open = fn\n    } else {\n      this.#events.open = null\n    }\n  }\n\n  get onerror () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.error\n  }\n\n  set onerror (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.error) {\n      this.removeEventListener('error', this.#events.error)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('error', listener)\n      this.#events.error = fn\n    } else {\n      this.#events.error = null\n    }\n  }\n\n  get onclose () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.close\n  }\n\n  set onclose (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.close) {\n      this.removeEventListener('close', this.#events.close)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('close', listener)\n      this.#events.close = fn\n    } else {\n      this.#events.close = null\n    }\n  }\n\n  get onmessage () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.message\n  }\n\n  set onmessage (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.message) {\n      this.removeEventListener('message', this.#events.message)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('message', listener)\n      this.#events.message = fn\n    } else {\n      this.#events.message = null\n    }\n  }\n\n  get binaryType () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#binaryType\n  }\n\n  set binaryType (type) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (type !== 'blob' && type !== 'arraybuffer') {\n      this.#binaryType = 'blob'\n    } else {\n      this.#binaryType = type\n    }\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol\n   */\n  #onConnectionEstablished (response, parsedExtensions) {\n    // processResponse is called when the \"response's header list has been received and initialized.\"\n    // once this happens, the connection is open\n    this.#handler.socket = response.socket\n\n    const parser = new ByteParser(this.#handler, parsedExtensions)\n    parser.on('drain', () => this.#handler.onParserDrain())\n    parser.on('error', (err) => this.#handler.onParserError(err))\n\n    this.#parser = parser\n    this.#sendQueue = new SendQueue(response.socket)\n\n    // 1. Change the ready state to OPEN (1).\n    this.#handler.readyState = states.OPEN\n\n    // 2. Change the extensions attribute\u2019s value to the extensions in use, if\n    //    it is not the null value.\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-9.1\n    const extensions = response.headersList.get('sec-websocket-extensions')\n\n    if (extensions !== null) {\n      this.#extensions = extensions\n    }\n\n    // 3. Change the protocol attribute\u2019s value to the subprotocol in use, if\n    //    it is not the null value.\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-1.9\n    const protocol = response.headersList.get('sec-websocket-protocol')\n\n    if (protocol !== null) {\n      this.#protocol = protocol\n    }\n\n    // 4. Fire an event named open at the WebSocket object.\n    fireEvent('open', this)\n\n    if (channels.open.hasSubscribers) {\n      // Convert headers to a plain object for the event\n      const headers = response.headersList.entries\n      channels.open.publish({\n        address: getSocketAddress(response.socket),\n        protocol: this.#protocol,\n        extensions: this.#extensions,\n        websocket: this,\n        handshakeResponse: {\n          status: response.status,\n          statusText: response.statusText,\n          headers\n        }\n      })\n    }\n  }\n\n  #onMessage (type, data) {\n    // 1. If ready state is not OPEN (1), then return.\n    if (this.#handler.readyState !== states.OPEN) {\n      return\n    }\n\n    // 2. Let dataForEvent be determined by switching on type and binary type:\n    let dataForEvent\n\n    if (type === opcodes.TEXT) {\n      // -> type indicates that the data is Text\n      //      a new DOMString containing data\n      try {\n        dataForEvent = utf8Decode(data)\n      } catch {\n        failWebsocketConnection(this.#handler, 1007, 'Received invalid UTF-8 in text frame.')\n        return\n      }\n    } else if (type === opcodes.BINARY) {\n      if (this.#binaryType === 'blob') {\n        // -> type indicates that the data is Binary and binary type is \"blob\"\n        //      a new Blob object, created in the relevant Realm of the WebSocket\n        //      object, that represents data as its raw data\n        dataForEvent = new Blob([data])\n      } else {\n        // -> type indicates that the data is Binary and binary type is \"arraybuffer\"\n        //      a new ArrayBuffer object, created in the relevant Realm of the\n        //      WebSocket object, whose contents are data\n        dataForEvent = toArrayBuffer(data)\n      }\n    }\n\n    // 3. Fire an event named message at the WebSocket object, using MessageEvent,\n    //    with the origin attribute initialized to the serialization of the WebSocket\n    //    object\u2019s url's origin, and the data attribute initialized to dataForEvent.\n    fireEvent('message', this, createFastMessageEvent, {\n      origin: this.#url.origin,\n      data: dataForEvent\n    })\n  }\n\n  #onParserDrain () {\n    this.#handler.socket.resume()\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol\n   * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.4\n   */\n  #onSocketClose () {\n    // If the TCP connection was closed after the\n    // WebSocket closing handshake was completed, the WebSocket connection\n    // is said to have been closed _cleanly_.\n    const wasClean =\n      this.#handler.closeState.has(sentCloseFrameState.SENT) &&\n      this.#handler.closeState.has(sentCloseFrameState.RECEIVED)\n\n    let code = 1005\n    let reason = ''\n\n    const result = this.#parser?.closingInfo\n\n    if (result && !result.error) {\n      code = result.code ?? 1005\n      reason = result.reason\n    }\n\n    // 1. Change the ready state to CLOSED (3).\n    this.#handler.readyState = states.CLOSED\n\n    // 2. If the user agent was required to fail the WebSocket\n    //    connection, or if the WebSocket connection was closed\n    //    after being flagged as full, fire an event named error\n    //    at the WebSocket object.\n    if (!this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n      // If _The WebSocket\n      // Connection is Closed_ and no Close control frame was received by the\n      // endpoint (such as could occur if the underlying transport connection\n      // is lost), _The WebSocket Connection Close Code_ is considered to be\n      // 1006.\n      code = 1006\n\n      fireEvent('error', this, (type, init) => new ErrorEvent(type, init), {\n        error: new TypeError(reason)\n      })\n    }\n\n    // 3. Fire an event named close at the WebSocket object,\n    //    using CloseEvent, with the wasClean attribute\n    //    initialized to true if the connection closed cleanly\n    //    and false otherwise, the code attribute initialized to\n    //    the WebSocket connection close code, and the reason\n    //    attribute initialized to the result of applying UTF-8\n    //    decode without BOM to the WebSocket connection close\n    //    reason.\n    // TODO: process.nextTick\n    fireEvent('close', this, (type, init) => new CloseEvent(type, init), {\n      wasClean, code, reason\n    })\n\n    if (channels.close.hasSubscribers) {\n      channels.close.publish({\n        websocket: this,\n        code,\n        reason\n      })\n    }\n  }\n\n  /**\n   * @param {WebSocket} ws\n   * @param {Buffer|undefined} buffer\n   */\n  static ping (ws, buffer) {\n    if (Buffer.isBuffer(buffer)) {\n      if (buffer.length > 125) {\n        throw new TypeError('A PING frame cannot have a body larger than 125 bytes.')\n      }\n    } else if (buffer !== undefined) {\n      throw new TypeError('Expected buffer payload')\n    }\n\n    // An endpoint MAY send a Ping frame any time after the connection is\n    // established and before the connection is closed.\n    const readyState = ws.#handler.readyState\n\n    if (isEstablished(readyState) && !isClosing(readyState) && !isClosed(readyState)) {\n      const frame = new WebsocketFrameSend(buffer)\n      ws.#handler.socket.write(frame.createFrame(opcodes.PING))\n    }\n  }\n}\n\nconst { ping } = WebSocket\nReflect.deleteProperty(WebSocket, 'ping')\n\n// https://websockets.spec.whatwg.org/#dom-websocket-connecting\nWebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING\n// https://websockets.spec.whatwg.org/#dom-websocket-open\nWebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN\n// https://websockets.spec.whatwg.org/#dom-websocket-closing\nWebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING\n// https://websockets.spec.whatwg.org/#dom-websocket-closed\nWebSocket.CLOSED = WebSocket.prototype.CLOSED = states.CLOSED\n\nObject.defineProperties(WebSocket.prototype, {\n  CONNECTING: staticPropertyDescriptors,\n  OPEN: staticPropertyDescriptors,\n  CLOSING: staticPropertyDescriptors,\n  CLOSED: staticPropertyDescriptors,\n  url: kEnumerableProperty,\n  readyState: kEnumerableProperty,\n  bufferedAmount: kEnumerableProperty,\n  onopen: kEnumerableProperty,\n  onerror: kEnumerableProperty,\n  onclose: kEnumerableProperty,\n  close: kEnumerableProperty,\n  onmessage: kEnumerableProperty,\n  binaryType: kEnumerableProperty,\n  send: kEnumerableProperty,\n  extensions: kEnumerableProperty,\n  protocol: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'WebSocket',\n    writable: false,\n    enumerable: false,\n    configurable: true\n  }\n})\n\nObject.defineProperties(WebSocket, {\n  CONNECTING: staticPropertyDescriptors,\n  OPEN: staticPropertyDescriptors,\n  CLOSING: staticPropertyDescriptors,\n  CLOSED: staticPropertyDescriptors\n})\n\nwebidl.converters['sequence<DOMString>'] = webidl.sequenceConverter(\n  webidl.converters.DOMString\n)\n\nwebidl.converters['DOMString or sequence<DOMString>'] = function (V, prefix, argument) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT && Symbol.iterator in V) {\n    return webidl.converters['sequence<DOMString>'](V)\n  }\n\n  return webidl.converters.DOMString(V, prefix, argument)\n}\n\n// This implements the proposal made in https://github.com/whatwg/websockets/issues/42\nwebidl.converters.WebSocketInit = webidl.dictionaryConverter([\n  {\n    key: 'protocols',\n    converter: webidl.converters['DOMString or sequence<DOMString>'],\n    defaultValue: () => []\n  },\n  {\n    key: 'dispatcher',\n    converter: webidl.converters.any,\n    defaultValue: () => getGlobalDispatcher()\n  },\n  {\n    key: 'headers',\n    converter: webidl.nullableConverter(webidl.converters.HeadersInit)\n  }\n])\n\nwebidl.converters['DOMString or sequence<DOMString> or WebSocketInit'] = function (V) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT && !(Symbol.iterator in V)) {\n    return webidl.converters.WebSocketInit(V)\n  }\n\n  return { protocols: webidl.converters['DOMString or sequence<DOMString>'](V) }\n}\n\nwebidl.converters.WebSocketSendData = function (V) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT) {\n    if (webidl.is.Blob(V)) {\n      return V\n    }\n\n    if (webidl.is.BufferSource(V)) {\n      return V\n    }\n  }\n\n  return webidl.converters.USVString(V)\n}\n\nmodule.exports = {\n  WebSocket,\n  ping\n}\n", "'use strict'\n\nconst { webidl } = require('../../webidl')\nconst { validateCloseCodeAndReason } = require('../util')\nconst { kConstruct } = require('../../../core/symbols')\nconst { kEnumerableProperty } = require('../../../core/util')\n\nfunction createInheritableDOMException () {\n  // https://github.com/nodejs/node/issues/59677\n  class Test extends DOMException {\n    get reason () {\n      return ''\n    }\n  }\n\n  if (new Test().reason !== undefined) {\n    return DOMException\n  }\n\n  return new Proxy(DOMException, {\n    construct (target, args, newTarget) {\n      const instance = Reflect.construct(target, args, target)\n      Object.setPrototypeOf(instance, newTarget.prototype)\n      return instance\n    }\n  })\n}\n\nclass WebSocketError extends createInheritableDOMException() {\n  #closeCode\n  #reason\n\n  constructor (message = '', init = undefined) {\n    message = webidl.converters.DOMString(message, 'WebSocketError', 'message')\n\n    // 1. Set this 's name to \" WebSocketError \".\n    // 2. Set this 's message to message .\n    super(message, 'WebSocketError')\n\n    if (init === kConstruct) {\n      return\n    } else if (init !== null) {\n      init = webidl.converters.WebSocketCloseInfo(init)\n    }\n\n    // 3. Let code be init [\" closeCode \"] if it exists , or null otherwise.\n    let code = init.closeCode ?? null\n\n    // 4. Let reason be init [\" reason \"] if it exists , or the empty string otherwise.\n    const reason = init.reason ?? ''\n\n    // 5. Validate close code and reason with code and reason .\n    validateCloseCodeAndReason(code, reason)\n\n    // 6. If reason is non-empty, but code is not set, then set code to 1000 (\"Normal Closure\").\n    if (reason.length !== 0 && code === null) {\n      code = 1000\n    }\n\n    // 7. Set this 's closeCode to code .\n    this.#closeCode = code\n\n    // 8. Set this 's reason to reason .\n    this.#reason = reason\n  }\n\n  get closeCode () {\n    return this.#closeCode\n  }\n\n  get reason () {\n    return this.#reason\n  }\n\n  /**\n   * @param {string} message\n   * @param {number|null} code\n   * @param {string} reason\n   */\n  static createUnvalidatedWebSocketError (message, code, reason) {\n    const error = new WebSocketError(message, kConstruct)\n    error.#closeCode = code\n    error.#reason = reason\n    return error\n  }\n}\n\nconst { createUnvalidatedWebSocketError } = WebSocketError\ndelete WebSocketError.createUnvalidatedWebSocketError\n\nObject.defineProperties(WebSocketError.prototype, {\n  closeCode: kEnumerableProperty,\n  reason: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'WebSocketError',\n    writable: false,\n    enumerable: false,\n    configurable: true\n  }\n})\n\nwebidl.is.WebSocketError = webidl.util.MakeTypeAssertion(WebSocketError)\n\nmodule.exports = { WebSocketError, createUnvalidatedWebSocketError }\n", "'use strict'\n\nconst { createDeferredPromise } = require('../../../util/promise')\nconst { environmentSettingsObject } = require('../../fetch/util')\nconst { states, opcodes, sentCloseFrameState } = require('../constants')\nconst { webidl } = require('../../webidl')\nconst { getURLRecord, isValidSubprotocol, isEstablished, utf8Decode } = require('../util')\nconst { establishWebSocketConnection, failWebsocketConnection, closeWebSocketConnection } = require('../connection')\nconst { channels } = require('../../../core/diagnostics')\nconst { WebsocketFrameSend } = require('../frame')\nconst { ByteParser } = require('../receiver')\nconst { WebSocketError, createUnvalidatedWebSocketError } = require('./websocketerror')\nconst { kEnumerableProperty } = require('../../../core/util')\nconst { utf8DecodeBytes } = require('../../../encoding')\n\nlet emittedExperimentalWarning = false\n\nclass WebSocketStream {\n  // Each WebSocketStream object has an associated url , which is a URL record .\n  /** @type {URL} */\n  #url\n\n  // Each WebSocketStream object has an associated opened promise , which is a promise.\n  /** @type {import('../../../util/promise').DeferredPromise} */\n  #openedPromise\n\n  // Each WebSocketStream object has an associated closed promise , which is a promise.\n  /** @type {import('../../../util/promise').DeferredPromise} */\n  #closedPromise\n\n  // Each WebSocketStream object has an associated readable stream , which is a ReadableStream .\n  /** @type {ReadableStream} */\n  #readableStream\n  /** @type {ReadableStreamDefaultController} */\n  #readableStreamController\n\n  // Each WebSocketStream object has an associated writable stream , which is a WritableStream .\n  /** @type {WritableStream} */\n  #writableStream\n\n  // Each WebSocketStream object has an associated boolean handshake aborted , which is initially false.\n  #handshakeAborted = false\n\n  /** @type {import('../websocket').Handler} */\n  #handler = {\n    // https://whatpr.org/websockets/48/7b748d3...d5570f3.html#feedback-to-websocket-stream-from-the-protocol\n    onConnectionEstablished: (response, extensions) => this.#onConnectionEstablished(response, extensions),\n    onMessage: (opcode, data) => this.#onMessage(opcode, data),\n    onParserError: (err) => failWebsocketConnection(this.#handler, null, err.message),\n    onParserDrain: () => this.#handler.socket.resume(),\n    onSocketData: (chunk) => {\n      if (!this.#parser.write(chunk)) {\n        this.#handler.socket.pause()\n      }\n    },\n    onSocketError: (err) => {\n      this.#handler.readyState = states.CLOSING\n\n      if (channels.socketError.hasSubscribers) {\n        channels.socketError.publish(err)\n      }\n\n      this.#handler.socket.destroy()\n    },\n    onSocketClose: () => this.#onSocketClose(),\n    onPing: () => {},\n    onPong: () => {},\n\n    readyState: states.CONNECTING,\n    socket: null,\n    closeState: new Set(),\n    controller: null,\n    wasEverConnected: false\n  }\n\n  /** @type {import('../receiver').ByteParser} */\n  #parser\n\n  constructor (url, options = undefined) {\n    if (!emittedExperimentalWarning) {\n      process.emitWarning('WebSocketStream is experimental! Expect it to change at any time.', {\n        code: 'UNDICI-WSS'\n      })\n      emittedExperimentalWarning = true\n    }\n\n    webidl.argumentLengthCheck(arguments, 1, 'WebSocket')\n\n    url = webidl.converters.USVString(url)\n    if (options !== null) {\n      options = webidl.converters.WebSocketStreamOptions(options)\n    }\n\n    // 1. Let baseURL be this 's relevant settings object 's API base URL .\n    const baseURL = environmentSettingsObject.settingsObject.baseUrl\n\n    // 2. Let urlRecord be the result of getting a URL record given url and baseURL .\n    const urlRecord = getURLRecord(url, baseURL)\n\n    // 3. Let protocols be options [\" protocols \"] if it exists , otherwise an empty sequence.\n    const protocols = options.protocols\n\n    // 4. If any of the values in protocols occur more than once or otherwise fail to match the requirements for elements that comprise the value of ` Sec-WebSocket-Protocol ` fields as defined by The WebSocket Protocol , then throw a \" SyntaxError \" DOMException . [WSP]\n    if (protocols.length !== new Set(protocols.map(p => p.toLowerCase())).size) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    if (protocols.length > 0 && !protocols.every(p => isValidSubprotocol(p))) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    // 5. Set this 's url to urlRecord .\n    this.#url = urlRecord.toString()\n\n    // 6. Set this 's opened promise and closed promise to new promises.\n    this.#openedPromise = createDeferredPromise()\n    this.#closedPromise = createDeferredPromise()\n\n    // 7. Apply backpressure to the WebSocket.\n    // TODO\n\n    // 8.  If options [\" signal \"] exists ,\n    if (options.signal != null) {\n      // 8.1. Let signal be options [\" signal \"].\n      const signal = options.signal\n\n      // 8.2. If signal is aborted , then reject this 's opened promise and closed promise with signal \u2019s abort reason\n      //      and return.\n      if (signal.aborted) {\n        this.#openedPromise.reject(signal.reason)\n        this.#closedPromise.reject(signal.reason)\n        return\n      }\n\n      // 8.3. Add the following abort steps to signal :\n      signal.addEventListener('abort', () => {\n        // 8.3.1. If the WebSocket connection is not yet established : [WSP]\n        if (!isEstablished(this.#handler.readyState)) {\n          // 8.3.1.1. Fail the WebSocket connection .\n          failWebsocketConnection(this.#handler)\n\n          // Set this 's ready state to CLOSING .\n          this.#handler.readyState = states.CLOSING\n\n          // Reject this 's opened promise and closed promise with signal \u2019s abort reason .\n          this.#openedPromise.reject(signal.reason)\n          this.#closedPromise.reject(signal.reason)\n\n          // Set this 's handshake aborted to true.\n          this.#handshakeAborted = true\n        }\n      }, { once: true })\n    }\n\n    // 9.  Let client be this 's relevant settings object .\n    const client = environmentSettingsObject.settingsObject\n\n    // 10. Run this step in parallel :\n    // 10.1. Establish a WebSocket connection given urlRecord , protocols , and client . [FETCH]\n    this.#handler.controller = establishWebSocketConnection(\n      urlRecord,\n      protocols,\n      client,\n      this.#handler,\n      options\n    )\n  }\n\n  // The url getter steps are to return this 's url , serialized .\n  get url () {\n    return this.#url.toString()\n  }\n\n  // The opened getter steps are to return this 's opened promise .\n  get opened () {\n    return this.#openedPromise.promise\n  }\n\n  // The closed getter steps are to return this 's closed promise .\n  get closed () {\n    return this.#closedPromise.promise\n  }\n\n  // The close( closeInfo ) method steps are:\n  close (closeInfo = undefined) {\n    if (closeInfo !== null) {\n      closeInfo = webidl.converters.WebSocketCloseInfo(closeInfo)\n    }\n\n    // 1. Let code be closeInfo [\" closeCode \"] if present, or null otherwise.\n    const code = closeInfo.closeCode ?? null\n\n    // 2. Let reason be closeInfo [\" reason \"].\n    const reason = closeInfo.reason\n\n    // 3. Close the WebSocket with this , code , and reason .\n    closeWebSocketConnection(this.#handler, code, reason, true)\n  }\n\n  #write (chunk) {\n    // See /websockets/stream/tentative/write.any.html\n    chunk = webidl.converters.WebSocketStreamWrite(chunk)\n\n    // 1. Let promise be a new promise created in stream \u2019s relevant realm .\n    const promise = createDeferredPromise()\n\n    // 2. Let data be null.\n    let data = null\n\n    // 3. Let opcode be null.\n    let opcode = null\n\n    // 4. If chunk is a BufferSource ,\n    if (webidl.is.BufferSource(chunk)) {\n      // 4.1. Set data to a copy of the bytes given chunk .\n      data = new Uint8Array(ArrayBuffer.isView(chunk) ? new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength) : chunk.slice())\n\n      // 4.2. Set opcode to a binary frame opcode.\n      opcode = opcodes.BINARY\n    } else {\n      // 5. Otherwise,\n\n      // 5.1. Let string be the result of converting chunk to an IDL USVString .\n      //    If this throws an exception, return a promise rejected with the exception.\n      let string\n\n      try {\n        string = webidl.converters.DOMString(chunk)\n      } catch (e) {\n        promise.reject(e)\n        return promise.promise\n      }\n\n      // 5.2. Set data to the result of UTF-8 encoding string .\n      data = new TextEncoder().encode(string)\n\n      // 5.3. Set opcode to a text frame opcode.\n      opcode = opcodes.TEXT\n    }\n\n    // 6. In parallel,\n    // 6.1. Wait until there is sufficient buffer space in stream to send the message.\n\n    // 6.2. If the closing handshake has not yet started , Send a WebSocket Message to stream comprised of data using opcode .\n    if (!this.#handler.closeState.has(sentCloseFrameState.SENT) && !this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n      const frame = new WebsocketFrameSend(data)\n\n      this.#handler.socket.write(frame.createFrame(opcode), () => {\n        promise.resolve(undefined)\n      })\n    }\n\n    // 6.3. Queue a global task on the WebSocket task source given stream \u2019s relevant global object to resolve promise with undefined.\n    return promise.promise\n  }\n\n  /** @type {import('../websocket').Handler['onConnectionEstablished']} */\n  #onConnectionEstablished (response, parsedExtensions) {\n    this.#handler.socket = response.socket\n\n    const parser = new ByteParser(this.#handler, parsedExtensions)\n    parser.on('drain', () => this.#handler.onParserDrain())\n    parser.on('error', (err) => this.#handler.onParserError(err))\n\n    this.#parser = parser\n\n    // 1. Change stream \u2019s ready state to OPEN (1).\n    this.#handler.readyState = states.OPEN\n\n    // 2. Set stream \u2019s was ever connected to true.\n    // This is done in the opening handshake.\n\n    // 3. Let extensions be the extensions in use .\n    const extensions = parsedExtensions ?? ''\n\n    // 4. Let protocol be the subprotocol in use .\n    const protocol = response.headersList.get('sec-websocket-protocol') ?? ''\n\n    // 5. Let pullAlgorithm be an action that pulls bytes from stream .\n    // 6. Let cancelAlgorithm be an action that cancels stream with reason , given reason .\n    // 7. Let readable be a new ReadableStream .\n    // 8. Set up readable with pullAlgorithm and cancelAlgorithm .\n    const readable = new ReadableStream({\n      start: (controller) => {\n        this.#readableStreamController = controller\n      },\n      pull (controller) {\n        let chunk\n        while (controller.desiredSize > 0 && (chunk = response.socket.read()) !== null) {\n          controller.enqueue(chunk)\n        }\n      },\n      cancel: (reason) => this.#cancel(reason)\n    })\n\n    // 9. Let writeAlgorithm be an action that writes chunk to stream , given chunk .\n    // 10. Let closeAlgorithm be an action that closes stream .\n    // 11. Let abortAlgorithm be an action that aborts stream with reason , given reason .\n    // 12. Let writable be a new WritableStream .\n    // 13. Set up writable with writeAlgorithm , closeAlgorithm , and abortAlgorithm .\n    const writable = new WritableStream({\n      write: (chunk) => this.#write(chunk),\n      close: () => closeWebSocketConnection(this.#handler, null, null),\n      abort: (reason) => this.#closeUsingReason(reason)\n    })\n\n    // Set stream \u2019s readable stream to readable .\n    this.#readableStream = readable\n\n    // Set stream \u2019s writable stream to writable .\n    this.#writableStream = writable\n\n    // Resolve stream \u2019s opened promise with WebSocketOpenInfo \u00AB[ \" extensions \" \u2192 extensions , \" protocol \" \u2192 protocol , \" readable \" \u2192 readable , \" writable \" \u2192 writable ]\u00BB.\n    this.#openedPromise.resolve({\n      extensions,\n      protocol,\n      readable,\n      writable\n    })\n  }\n\n  /** @type {import('../websocket').Handler['onMessage']} */\n  #onMessage (type, data) {\n    // 1. If stream\u2019s ready state is not OPEN (1), then return.\n    if (this.#handler.readyState !== states.OPEN) {\n      return\n    }\n\n    // 2. Let chunk be determined by switching on type:\n    //      - type indicates that the data is Text\n    //          a new DOMString containing data\n    //      - type indicates that the data is Binary\n    //          a new Uint8Array object, created in the relevant Realm of the\n    //          WebSocketStream object, whose contents are data\n    let chunk\n\n    if (type === opcodes.TEXT) {\n      try {\n        chunk = utf8Decode(data)\n      } catch {\n        failWebsocketConnection(this.#handler, 'Received invalid UTF-8 in text frame.')\n        return\n      }\n    } else if (type === opcodes.BINARY) {\n      chunk = new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n    }\n\n    // 3. Enqueue chunk into stream\u2019s readable stream.\n    this.#readableStreamController.enqueue(chunk)\n\n    // 4. Apply backpressure to the WebSocket.\n  }\n\n  /** @type {import('../websocket').Handler['onSocketClose']} */\n  #onSocketClose () {\n    const wasClean =\n      this.#handler.closeState.has(sentCloseFrameState.SENT) &&\n      this.#handler.closeState.has(sentCloseFrameState.RECEIVED)\n\n    // 1. Change the ready state to CLOSED (3).\n    this.#handler.readyState = states.CLOSED\n\n    // 2. If stream \u2019s handshake aborted is true, then return.\n    if (this.#handshakeAborted) {\n      return\n    }\n\n    // 3. If stream \u2019s was ever connected is false, then reject stream \u2019s opened promise with a new WebSocketError.\n    if (!this.#handler.wasEverConnected) {\n      this.#openedPromise.reject(new WebSocketError('Socket never opened'))\n    }\n\n    const result = this.#parser?.closingInfo\n\n    // 4. Let code be the WebSocket connection close code .\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5\n    // If this Close control frame contains no status code, _The WebSocket\n    // Connection Close Code_ is considered to be 1005. If _The WebSocket\n    // Connection is Closed_ and no Close control frame was received by the\n    // endpoint (such as could occur if the underlying transport connection\n    // is lost), _The WebSocket Connection Close Code_ is considered to be\n    // 1006.\n    let code = result?.code ?? 1005\n\n    if (!this.#handler.closeState.has(sentCloseFrameState.SENT) && !this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n      code = 1006\n    }\n\n    // 5. Let reason be the result of applying UTF-8 decode without BOM to the WebSocket connection close reason .\n    const reason = result?.reason == null ? '' : utf8DecodeBytes(Buffer.from(result.reason))\n\n    // 6. If the connection was closed cleanly ,\n    if (wasClean) {\n      // 6.1. Close stream \u2019s readable stream .\n      this.#readableStreamController.close()\n\n      // 6.2. Error stream \u2019s writable stream with an \" InvalidStateError \" DOMException indicating that a closed WebSocketStream cannot be written to.\n      if (!this.#writableStream.locked) {\n        this.#writableStream.abort(new DOMException('A closed WebSocketStream cannot be written to', 'InvalidStateError'))\n      }\n\n      // 6.3. Resolve stream \u2019s closed promise with WebSocketCloseInfo \u00AB[ \" closeCode \" \u2192 code , \" reason \" \u2192 reason ]\u00BB.\n      this.#closedPromise.resolve({\n        closeCode: code,\n        reason\n      })\n    } else {\n      // 7. Otherwise,\n\n      // 7.1. Let error be a new WebSocketError whose closeCode is code and reason is reason .\n      const error = createUnvalidatedWebSocketError('unclean close', code, reason)\n\n      // 7.2. Error stream \u2019s readable stream with error .\n      this.#readableStreamController?.error(error)\n\n      // 7.3. Error stream \u2019s writable stream with error .\n      this.#writableStream?.abort(error)\n\n      // 7.4. Reject stream \u2019s closed promise with error .\n      this.#closedPromise.reject(error)\n    }\n  }\n\n  #closeUsingReason (reason) {\n    // 1. Let code be null.\n    let code = null\n\n    // 2. Let reasonString be the empty string.\n    let reasonString = ''\n\n    // 3. If reason implements WebSocketError ,\n    if (webidl.is.WebSocketError(reason)) {\n      // 3.1. Set code to reason \u2019s closeCode .\n      code = reason.closeCode\n\n      // 3.2. Set reasonString to reason \u2019s reason .\n      reasonString = reason.reason\n    }\n\n    // 4. Close the WebSocket with stream , code , and reasonString . If this throws an exception,\n    //    discard code and reasonString and close the WebSocket with stream .\n    closeWebSocketConnection(this.#handler, code, reasonString)\n  }\n\n  //  To cancel a WebSocketStream stream given reason , close using reason giving stream and reason .\n  #cancel (reason) {\n    this.#closeUsingReason(reason)\n  }\n}\n\nObject.defineProperties(WebSocketStream.prototype, {\n  url: kEnumerableProperty,\n  opened: kEnumerableProperty,\n  closed: kEnumerableProperty,\n  close: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'WebSocketStream',\n    writable: false,\n    enumerable: false,\n    configurable: true\n  }\n})\n\nwebidl.converters.WebSocketStreamOptions = webidl.dictionaryConverter([\n  {\n    key: 'protocols',\n    converter: webidl.sequenceConverter(webidl.converters.USVString),\n    defaultValue: () => []\n  },\n  {\n    key: 'signal',\n    converter: webidl.nullableConverter(webidl.converters.AbortSignal),\n    defaultValue: () => null\n  }\n])\n\nwebidl.converters.WebSocketCloseInfo = webidl.dictionaryConverter([\n  {\n    key: 'closeCode',\n    converter: (V) => webidl.converters['unsigned short'](V, webidl.attributes.EnforceRange)\n  },\n  {\n    key: 'reason',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  }\n])\n\nwebidl.converters.WebSocketStreamWrite = function (V) {\n  if (typeof V === 'string') {\n    return webidl.converters.USVString(V)\n  }\n\n  return webidl.converters.BufferSource(V)\n}\n\nmodule.exports = { WebSocketStream }\n", "'use strict'\n\n/**\n * Checks if the given value is a valid LastEventId.\n * @param {string} value\n * @returns {boolean}\n */\nfunction isValidLastEventId (value) {\n  // LastEventId should not contain U+0000 NULL\n  return value.indexOf('\\u0000') === -1\n}\n\n/**\n * Checks if the given value is a base 10 digit.\n * @param {string} value\n * @returns {boolean}\n */\nfunction isASCIINumber (value) {\n  if (value.length === 0) return false\n  for (let i = 0; i < value.length; i++) {\n    if (value.charCodeAt(i) < 0x30 || value.charCodeAt(i) > 0x39) return false\n  }\n  return true\n}\n\nmodule.exports = {\n  isValidLastEventId,\n  isASCIINumber\n}\n", "'use strict'\nconst { Transform } = require('node:stream')\nconst { isASCIINumber, isValidLastEventId } = require('./util')\n\n/**\n * @type {number[]} BOM\n */\nconst BOM = [0xEF, 0xBB, 0xBF]\n/**\n * @type {10} LF\n */\nconst LF = 0x0A\n/**\n * @type {13} CR\n */\nconst CR = 0x0D\n/**\n * @type {58} COLON\n */\nconst COLON = 0x3A\n/**\n * @type {32} SPACE\n */\nconst SPACE = 0x20\n\n/**\n * @typedef {object} EventSourceStreamEvent\n * @type {object}\n * @property {string} [event] The event type.\n * @property {string} [data] The data of the message.\n * @property {string} [id] A unique ID for the event.\n * @property {string} [retry] The reconnection time, in milliseconds.\n */\n\n/**\n * @typedef eventSourceSettings\n * @type {object}\n * @property {string} [lastEventId] The last event ID received from the server.\n * @property {string} [origin] The origin of the event source.\n * @property {number} [reconnectionTime] The reconnection time, in milliseconds.\n */\n\nclass EventSourceStream extends Transform {\n  /**\n   * @type {eventSourceSettings}\n   */\n  state\n\n  /**\n   * Leading byte-order-mark check.\n   * @type {boolean}\n   */\n  checkBOM = true\n\n  /**\n   * @type {boolean}\n   */\n  crlfCheck = false\n\n  /**\n   * @type {boolean}\n   */\n  eventEndCheck = false\n\n  /**\n   * @type {Buffer|null}\n   */\n  buffer = null\n\n  pos = 0\n\n  event = {\n    data: undefined,\n    event: undefined,\n    id: undefined,\n    retry: undefined\n  }\n\n  /**\n   * @param {object} options\n   * @param {boolean} [options.readableObjectMode]\n   * @param {eventSourceSettings} [options.eventSourceSettings]\n   * @param {(chunk: any, encoding?: BufferEncoding | undefined) => boolean} [options.push]\n   */\n  constructor (options = {}) {\n    // Enable object mode as EventSourceStream emits objects of shape\n    // EventSourceStreamEvent\n    options.readableObjectMode = true\n\n    super(options)\n\n    this.state = options.eventSourceSettings || {}\n    if (options.push) {\n      this.push = options.push\n    }\n  }\n\n  /**\n   * @param {Buffer} chunk\n   * @param {string} _encoding\n   * @param {Function} callback\n   * @returns {void}\n   */\n  _transform (chunk, _encoding, callback) {\n    if (chunk.length === 0) {\n      callback()\n      return\n    }\n\n    // Cache the chunk in the buffer, as the data might not be complete while\n    // processing it\n    // TODO: Investigate if there is a more performant way to handle\n    // incoming chunks\n    // see: https://github.com/nodejs/undici/issues/2630\n    if (this.buffer) {\n      this.buffer = Buffer.concat([this.buffer, chunk])\n    } else {\n      this.buffer = chunk\n    }\n\n    // Strip leading byte-order-mark if we opened the stream and started\n    // the processing of the incoming data\n    if (this.checkBOM) {\n      switch (this.buffer.length) {\n        case 1:\n          // Check if the first byte is the same as the first byte of the BOM\n          if (this.buffer[0] === BOM[0]) {\n            // If it is, we need to wait for more data\n            callback()\n            return\n          }\n          // Set the checkBOM flag to false as we don't need to check for the\n          // BOM anymore\n          this.checkBOM = false\n\n          // The buffer only contains one byte so we need to wait for more data\n          callback()\n          return\n        case 2:\n          // Check if the first two bytes are the same as the first two bytes\n          // of the BOM\n          if (\n            this.buffer[0] === BOM[0] &&\n            this.buffer[1] === BOM[1]\n          ) {\n            // If it is, we need to wait for more data, because the third byte\n            // is needed to determine if it is the BOM or not\n            callback()\n            return\n          }\n\n          // Set the checkBOM flag to false as we don't need to check for the\n          // BOM anymore\n          this.checkBOM = false\n          break\n        case 3:\n          // Check if the first three bytes are the same as the first three\n          // bytes of the BOM\n          if (\n            this.buffer[0] === BOM[0] &&\n            this.buffer[1] === BOM[1] &&\n            this.buffer[2] === BOM[2]\n          ) {\n            // If it is, we can drop the buffered data, as it is only the BOM\n            this.buffer = Buffer.alloc(0)\n            // Set the checkBOM flag to false as we don't need to check for the\n            // BOM anymore\n            this.checkBOM = false\n\n            // Await more data\n            callback()\n            return\n          }\n          // If it is not the BOM, we can start processing the data\n          this.checkBOM = false\n          break\n        default:\n          // The buffer is longer than 3 bytes, so we can drop the BOM if it is\n          // present\n          if (\n            this.buffer[0] === BOM[0] &&\n            this.buffer[1] === BOM[1] &&\n            this.buffer[2] === BOM[2]\n          ) {\n            // Remove the BOM from the buffer\n            this.buffer = this.buffer.subarray(3)\n          }\n\n          // Set the checkBOM flag to false as we don't need to check for the\n          this.checkBOM = false\n          break\n      }\n    }\n\n    while (this.pos < this.buffer.length) {\n      // If the previous line ended with an end-of-line, we need to check\n      // if the next character is also an end-of-line.\n      if (this.eventEndCheck) {\n        // If the the current character is an end-of-line, then the event\n        // is finished and we can process it\n\n        // If the previous line ended with a carriage return, we need to\n        // check if the current character is a line feed and remove it\n        // from the buffer.\n        if (this.crlfCheck) {\n          // If the current character is a line feed, we can remove it\n          // from the buffer and reset the crlfCheck flag\n          if (this.buffer[this.pos] === LF) {\n            this.buffer = this.buffer.subarray(this.pos + 1)\n            this.pos = 0\n            this.crlfCheck = false\n\n            // It is possible that the line feed is not the end of the\n            // event. We need to check if the next character is an\n            // end-of-line character to determine if the event is\n            // finished. We simply continue the loop to check the next\n            // character.\n\n            // As we removed the line feed from the buffer and set the\n            // crlfCheck flag to false, we basically don't make any\n            // distinction between a line feed and a carriage return.\n            continue\n          }\n          this.crlfCheck = false\n        }\n\n        if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) {\n          // If the current character is a carriage return, we need to\n          // set the crlfCheck flag to true, as we need to check if the\n          // next character is a line feed so we can remove it from the\n          // buffer\n          if (this.buffer[this.pos] === CR) {\n            this.crlfCheck = true\n          }\n\n          this.buffer = this.buffer.subarray(this.pos + 1)\n          this.pos = 0\n          if (\n            this.event.data !== undefined || this.event.event || this.event.id !== undefined || this.event.retry) {\n            this.processEvent(this.event)\n          }\n          this.clearEvent()\n          continue\n        }\n        // If the current character is not an end-of-line, then the event\n        // is not finished and we have to reset the eventEndCheck flag\n        this.eventEndCheck = false\n        continue\n      }\n\n      // If the current character is an end-of-line, we can process the\n      // line\n      if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) {\n        // If the current character is a carriage return, we need to\n        // set the crlfCheck flag to true, as we need to check if the\n        // next character is a line feed\n        if (this.buffer[this.pos] === CR) {\n          this.crlfCheck = true\n        }\n\n        // In any case, we can process the line as we reached an\n        // end-of-line character\n        this.parseLine(this.buffer.subarray(0, this.pos), this.event)\n\n        // Remove the processed line from the buffer\n        this.buffer = this.buffer.subarray(this.pos + 1)\n        // Reset the position as we removed the processed line from the buffer\n        this.pos = 0\n        // A line was processed and this could be the end of the event. We need\n        // to check if the next line is empty to determine if the event is\n        // finished.\n        this.eventEndCheck = true\n        continue\n      }\n\n      this.pos++\n    }\n\n    callback()\n  }\n\n  /**\n   * @param {Buffer} line\n   * @param {EventSourceStreamEvent} event\n   */\n  parseLine (line, event) {\n    // If the line is empty (a blank line)\n    // Dispatch the event, as defined below.\n    // This will be handled in the _transform method\n    if (line.length === 0) {\n      return\n    }\n\n    // If the line starts with a U+003A COLON character (:)\n    // Ignore the line.\n    const colonPosition = line.indexOf(COLON)\n    if (colonPosition === 0) {\n      return\n    }\n\n    let field = ''\n    let value = ''\n\n    // If the line contains a U+003A COLON character (:)\n    if (colonPosition !== -1) {\n      // Collect the characters on the line before the first U+003A COLON\n      // character (:), and let field be that string.\n      // TODO: Investigate if there is a more performant way to extract the\n      // field\n      // see: https://github.com/nodejs/undici/issues/2630\n      field = line.subarray(0, colonPosition).toString('utf8')\n\n      // Collect the characters on the line after the first U+003A COLON\n      // character (:), and let value be that string.\n      // If value starts with a U+0020 SPACE character, remove it from value.\n      let valueStart = colonPosition + 1\n      if (line[valueStart] === SPACE) {\n        ++valueStart\n      }\n      // TODO: Investigate if there is a more performant way to extract the\n      // value\n      // see: https://github.com/nodejs/undici/issues/2630\n      value = line.subarray(valueStart).toString('utf8')\n\n      // Otherwise, the string is not empty but does not contain a U+003A COLON\n      // character (:)\n    } else {\n      // Process the field using the steps described below, using the whole\n      // line as the field name, and the empty string as the field value.\n      field = line.toString('utf8')\n      value = ''\n    }\n\n    // Modify the event with the field name and value. The value is also\n    // decoded as UTF-8\n    switch (field) {\n      case 'data':\n        if (event[field] === undefined) {\n          event[field] = value\n        } else {\n          event[field] += `\\n${value}`\n        }\n        break\n      case 'retry':\n        if (isASCIINumber(value)) {\n          event[field] = value\n        }\n        break\n      case 'id':\n        if (isValidLastEventId(value)) {\n          event[field] = value\n        }\n        break\n      case 'event':\n        if (value.length > 0) {\n          event[field] = value\n        }\n        break\n    }\n  }\n\n  /**\n   * @param {EventSourceStreamEvent} event\n   */\n  processEvent (event) {\n    if (event.retry && isASCIINumber(event.retry)) {\n      this.state.reconnectionTime = parseInt(event.retry, 10)\n    }\n\n    if (event.id !== undefined && isValidLastEventId(event.id)) {\n      this.state.lastEventId = event.id\n    }\n\n    // only dispatch event, when data is provided\n    if (event.data !== undefined) {\n      this.push({\n        type: event.event || 'message',\n        options: {\n          data: event.data,\n          lastEventId: this.state.lastEventId,\n          origin: this.state.origin\n        }\n      })\n    }\n  }\n\n  clearEvent () {\n    this.event = {\n      data: undefined,\n      event: undefined,\n      id: undefined,\n      retry: undefined\n    }\n  }\n}\n\nmodule.exports = {\n  EventSourceStream\n}\n", "'use strict'\n\nconst { pipeline } = require('node:stream')\nconst { fetching } = require('../fetch')\nconst { makeRequest } = require('../fetch/request')\nconst { webidl } = require('../webidl')\nconst { EventSourceStream } = require('./eventsource-stream')\nconst { parseMIMEType } = require('../fetch/data-url')\nconst { createFastMessageEvent } = require('../websocket/events')\nconst { isNetworkError } = require('../fetch/response')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { environmentSettingsObject } = require('../fetch/util')\n\nlet experimentalWarned = false\n\n/**\n * A reconnection time, in milliseconds. This must initially be an implementation-defined value,\n * probably in the region of a few seconds.\n *\n * In Comparison:\n * - Chrome uses 3000ms.\n * - Deno uses 5000ms.\n *\n * @type {3000}\n */\nconst defaultReconnectionTime = 3000\n\n/**\n * The readyState attribute represents the state of the connection.\n * @typedef ReadyState\n * @type {0|1|2}\n * @readonly\n * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#dom-eventsource-readystate-dev\n */\n\n/**\n * The connection has not yet been established, or it was closed and the user\n * agent is reconnecting.\n * @type {0}\n */\nconst CONNECTING = 0\n\n/**\n * The user agent has an open connection and is dispatching events as it\n * receives them.\n * @type {1}\n */\nconst OPEN = 1\n\n/**\n * The connection is not open, and the user agent is not trying to reconnect.\n * @type {2}\n */\nconst CLOSED = 2\n\n/**\n * Requests for the element will have their mode set to \"cors\" and their credentials mode set to \"same-origin\".\n * @type {'anonymous'}\n */\nconst ANONYMOUS = 'anonymous'\n\n/**\n * Requests for the element will have their mode set to \"cors\" and their credentials mode set to \"include\".\n * @type {'use-credentials'}\n */\nconst USE_CREDENTIALS = 'use-credentials'\n\n/**\n * The EventSource interface is used to receive server-sent events. It\n * connects to a server over HTTP and receives events in text/event-stream\n * format without closing the connection.\n * @extends {EventTarget}\n * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events\n * @api public\n */\nclass EventSource extends EventTarget {\n  #events = {\n    open: null,\n    error: null,\n    message: null\n  }\n\n  #url\n  #withCredentials = false\n\n  /**\n   * @type {ReadyState}\n   */\n  #readyState = CONNECTING\n\n  #request = null\n  #controller = null\n\n  #dispatcher\n\n  /**\n   * @type {import('./eventsource-stream').eventSourceSettings}\n   */\n  #state\n\n  /**\n   * Creates a new EventSource object.\n   * @param {string} url\n   * @param {EventSourceInit} [eventSourceInitDict={}]\n   * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface\n   */\n  constructor (url, eventSourceInitDict = {}) {\n    // 1. Let ev be a new EventSource object.\n    super()\n\n    webidl.util.markAsUncloneable(this)\n\n    const prefix = 'EventSource constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    if (!experimentalWarned) {\n      experimentalWarned = true\n      process.emitWarning('EventSource is experimental, expect them to change at any time.', {\n        code: 'UNDICI-ES'\n      })\n    }\n\n    url = webidl.converters.USVString(url)\n    eventSourceInitDict = webidl.converters.EventSourceInitDict(eventSourceInitDict, prefix, 'eventSourceInitDict')\n\n    this.#dispatcher = eventSourceInitDict.node.dispatcher || eventSourceInitDict.dispatcher\n    this.#state = {\n      lastEventId: '',\n      reconnectionTime: eventSourceInitDict.node.reconnectionTime\n    }\n\n    // 2. Let settings be ev's relevant settings object.\n    // https://html.spec.whatwg.org/multipage/webappapis.html#environment-settings-object\n    const settings = environmentSettingsObject\n\n    let urlRecord\n\n    try {\n      // 3. Let urlRecord be the result of encoding-parsing a URL given url, relative to settings.\n      urlRecord = new URL(url, settings.settingsObject.baseUrl)\n      this.#state.origin = urlRecord.origin\n    } catch (e) {\n      // 4. If urlRecord is failure, then throw a \"SyntaxError\" DOMException.\n      throw new DOMException(e, 'SyntaxError')\n    }\n\n    // 5. Set ev's url to urlRecord.\n    this.#url = urlRecord.href\n\n    // 6. Let corsAttributeState be Anonymous.\n    let corsAttributeState = ANONYMOUS\n\n    // 7. If the value of eventSourceInitDict's withCredentials member is true,\n    // then set corsAttributeState to Use Credentials and set ev's\n    // withCredentials attribute to true.\n    if (eventSourceInitDict.withCredentials === true) {\n      corsAttributeState = USE_CREDENTIALS\n      this.#withCredentials = true\n    }\n\n    // 8. Let request be the result of creating a potential-CORS request given\n    // urlRecord, the empty string, and corsAttributeState.\n    const initRequest = {\n      redirect: 'follow',\n      keepalive: true,\n      // @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes\n      mode: 'cors',\n      credentials: corsAttributeState === 'anonymous'\n        ? 'same-origin'\n        : 'omit',\n      referrer: 'no-referrer'\n    }\n\n    // 9. Set request's client to settings.\n    initRequest.client = environmentSettingsObject.settingsObject\n\n    // 10. User agents may set (`Accept`, `text/event-stream`) in request's header list.\n    initRequest.headersList = [['accept', { name: 'accept', value: 'text/event-stream' }]]\n\n    // 11. Set request's cache mode to \"no-store\".\n    initRequest.cache = 'no-store'\n\n    // 12. Set request's initiator type to \"other\".\n    initRequest.initiator = 'other'\n\n    initRequest.urlList = [new URL(this.#url)]\n\n    // 13. Set ev's request to request.\n    this.#request = makeRequest(initRequest)\n\n    this.#connect()\n  }\n\n  /**\n   * Returns the state of this EventSource object's connection. It can have the\n   * values described below.\n   * @returns {ReadyState}\n   * @readonly\n   */\n  get readyState () {\n    return this.#readyState\n  }\n\n  /**\n   * Returns the URL providing the event stream.\n   * @readonly\n   * @returns {string}\n   */\n  get url () {\n    return this.#url\n  }\n\n  /**\n   * Returns a boolean indicating whether the EventSource object was\n   * instantiated with CORS credentials set (true), or not (false, the default).\n   */\n  get withCredentials () {\n    return this.#withCredentials\n  }\n\n  #connect () {\n    if (this.#readyState === CLOSED) return\n\n    this.#readyState = CONNECTING\n\n    const fetchParams = {\n      request: this.#request,\n      dispatcher: this.#dispatcher\n    }\n\n    // 14. Let processEventSourceEndOfBody given response res be the following step: if res is not a network error, then reestablish the connection.\n    const processEventSourceEndOfBody = (response) => {\n      if (!isNetworkError(response)) {\n        return this.#reconnect()\n      }\n    }\n\n    // 15. Fetch request, with processResponseEndOfBody set to processEventSourceEndOfBody...\n    fetchParams.processResponseEndOfBody = processEventSourceEndOfBody\n\n    // and processResponse set to the following steps given response res:\n    fetchParams.processResponse = (response) => {\n      // 1. If res is an aborted network error, then fail the connection.\n\n      if (isNetworkError(response)) {\n        // 1. When a user agent is to fail the connection, the user agent\n        // must queue a task which, if the readyState attribute is set to a\n        // value other than CLOSED, sets the readyState attribute to CLOSED\n        // and fires an event named error at the EventSource object. Once the\n        // user agent has failed the connection, it does not attempt to\n        // reconnect.\n        if (response.aborted) {\n          this.close()\n          this.dispatchEvent(new Event('error'))\n          return\n          // 2. Otherwise, if res is a network error, then reestablish the\n          // connection, unless the user agent knows that to be futile, in\n          // which case the user agent may fail the connection.\n        } else {\n          this.#reconnect()\n          return\n        }\n      }\n\n      // 3. Otherwise, if res's status is not 200, or if res's `Content-Type`\n      // is not `text/event-stream`, then fail the connection.\n      const contentType = response.headersList.get('content-type', true)\n      const mimeType = contentType !== null ? parseMIMEType(contentType) : 'failure'\n      const contentTypeValid = mimeType !== 'failure' && mimeType.essence === 'text/event-stream'\n      if (\n        response.status !== 200 ||\n        contentTypeValid === false\n      ) {\n        this.close()\n        this.dispatchEvent(new Event('error'))\n        return\n      }\n\n      // 4. Otherwise, announce the connection and interpret res's body\n      // line by line.\n\n      // When a user agent is to announce the connection, the user agent\n      // must queue a task which, if the readyState attribute is set to a\n      // value other than CLOSED, sets the readyState attribute to OPEN\n      // and fires an event named open at the EventSource object.\n      // @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model\n      this.#readyState = OPEN\n      this.dispatchEvent(new Event('open'))\n\n      // If redirected to a different origin, set the origin to the new origin.\n      this.#state.origin = response.urlList[response.urlList.length - 1].origin\n\n      const eventSourceStream = new EventSourceStream({\n        eventSourceSettings: this.#state,\n        push: (event) => {\n          this.dispatchEvent(createFastMessageEvent(\n            event.type,\n            event.options\n          ))\n        }\n      })\n\n      pipeline(response.body.stream,\n        eventSourceStream,\n        (error) => {\n          if (\n            error?.aborted === false\n          ) {\n            this.close()\n            this.dispatchEvent(new Event('error'))\n          }\n        })\n    }\n\n    this.#controller = fetching(fetchParams)\n  }\n\n  /**\n   * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model\n   * @returns {void}\n   */\n  #reconnect () {\n    // When a user agent is to reestablish the connection, the user agent must\n    // run the following steps. These steps are run in parallel, not as part of\n    // a task. (The tasks that it queues, of course, are run like normal tasks\n    // and not themselves in parallel.)\n\n    // 1. Queue a task to run the following steps:\n\n    //   1. If the readyState attribute is set to CLOSED, abort the task.\n    if (this.#readyState === CLOSED) return\n\n    //   2. Set the readyState attribute to CONNECTING.\n    this.#readyState = CONNECTING\n\n    //   3. Fire an event named error at the EventSource object.\n    this.dispatchEvent(new Event('error'))\n\n    // 2. Wait a delay equal to the reconnection time of the event source.\n    setTimeout(() => {\n      // 5. Queue a task to run the following steps:\n\n      //   1. If the EventSource object's readyState attribute is not set to\n      //      CONNECTING, then return.\n      if (this.#readyState !== CONNECTING) return\n\n      //   2. Let request be the EventSource object's request.\n      //   3. If the EventSource object's last event ID string is not the empty\n      //      string, then:\n      //      1. Let lastEventIDValue be the EventSource object's last event ID\n      //         string, encoded as UTF-8.\n      //      2. Set (`Last-Event-ID`, lastEventIDValue) in request's header\n      //         list.\n      if (this.#state.lastEventId.length) {\n        this.#request.headersList.set('last-event-id', this.#state.lastEventId, true)\n      }\n\n      //   4. Fetch request and process the response obtained in this fashion, if any, as described earlier in this section.\n      this.#connect()\n    }, this.#state.reconnectionTime)?.unref()\n  }\n\n  /**\n   * Closes the connection, if any, and sets the readyState attribute to\n   * CLOSED.\n   */\n  close () {\n    webidl.brandCheck(this, EventSource)\n\n    if (this.#readyState === CLOSED) return\n    this.#readyState = CLOSED\n    this.#controller.abort()\n    this.#request = null\n  }\n\n  get onopen () {\n    return this.#events.open\n  }\n\n  set onopen (fn) {\n    if (this.#events.open) {\n      this.removeEventListener('open', this.#events.open)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('open', listener)\n      this.#events.open = fn\n    } else {\n      this.#events.open = null\n    }\n  }\n\n  get onmessage () {\n    return this.#events.message\n  }\n\n  set onmessage (fn) {\n    if (this.#events.message) {\n      this.removeEventListener('message', this.#events.message)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('message', listener)\n      this.#events.message = fn\n    } else {\n      this.#events.message = null\n    }\n  }\n\n  get onerror () {\n    return this.#events.error\n  }\n\n  set onerror (fn) {\n    if (this.#events.error) {\n      this.removeEventListener('error', this.#events.error)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('error', listener)\n      this.#events.error = fn\n    } else {\n      this.#events.error = null\n    }\n  }\n}\n\nconst constantsPropertyDescriptors = {\n  CONNECTING: {\n    __proto__: null,\n    configurable: false,\n    enumerable: true,\n    value: CONNECTING,\n    writable: false\n  },\n  OPEN: {\n    __proto__: null,\n    configurable: false,\n    enumerable: true,\n    value: OPEN,\n    writable: false\n  },\n  CLOSED: {\n    __proto__: null,\n    configurable: false,\n    enumerable: true,\n    value: CLOSED,\n    writable: false\n  }\n}\n\nObject.defineProperties(EventSource, constantsPropertyDescriptors)\nObject.defineProperties(EventSource.prototype, constantsPropertyDescriptors)\n\nObject.defineProperties(EventSource.prototype, {\n  close: kEnumerableProperty,\n  onerror: kEnumerableProperty,\n  onmessage: kEnumerableProperty,\n  onopen: kEnumerableProperty,\n  readyState: kEnumerableProperty,\n  url: kEnumerableProperty,\n  withCredentials: kEnumerableProperty\n})\n\nwebidl.converters.EventSourceInitDict = webidl.dictionaryConverter([\n  {\n    key: 'withCredentials',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'dispatcher', // undici only\n    converter: webidl.converters.any\n  },\n  {\n    key: 'node', // undici only\n    converter: webidl.dictionaryConverter([\n      {\n        key: 'reconnectionTime',\n        converter: webidl.converters['unsigned long'],\n        defaultValue: () => defaultReconnectionTime\n      },\n      {\n        key: 'dispatcher',\n        converter: webidl.converters.any\n      }\n    ]),\n    defaultValue: () => ({})\n  }\n])\n\nmodule.exports = {\n  EventSource,\n  defaultReconnectionTime\n}\n", "'use strict'\n\nconst Client = require('./lib/dispatcher/client')\nconst Dispatcher = require('./lib/dispatcher/dispatcher')\nconst Pool = require('./lib/dispatcher/pool')\nconst BalancedPool = require('./lib/dispatcher/balanced-pool')\nconst RoundRobinPool = require('./lib/dispatcher/round-robin-pool')\nconst Agent = require('./lib/dispatcher/agent')\nconst ProxyAgent = require('./lib/dispatcher/proxy-agent')\nconst Socks5ProxyAgent = require('./lib/dispatcher/socks5-proxy-agent')\nconst EnvHttpProxyAgent = require('./lib/dispatcher/env-http-proxy-agent')\nconst RetryAgent = require('./lib/dispatcher/retry-agent')\nconst H2CClient = require('./lib/dispatcher/h2c-client')\nconst errors = require('./lib/core/errors')\nconst util = require('./lib/core/util')\nconst { InvalidArgumentError } = errors\nconst api = require('./lib/api')\nconst buildConnector = require('./lib/core/connect')\nconst MockClient = require('./lib/mock/mock-client')\nconst { MockCallHistory, MockCallHistoryLog } = require('./lib/mock/mock-call-history')\nconst MockAgent = require('./lib/mock/mock-agent')\nconst MockPool = require('./lib/mock/mock-pool')\nconst SnapshotAgent = require('./lib/mock/snapshot-agent')\nconst mockErrors = require('./lib/mock/mock-errors')\nconst RetryHandler = require('./lib/handler/retry-handler')\nconst { getGlobalDispatcher, setGlobalDispatcher } = require('./lib/global')\nconst DecoratorHandler = require('./lib/handler/decorator-handler')\nconst RedirectHandler = require('./lib/handler/redirect-handler')\n\nObject.assign(Dispatcher.prototype, api)\n\nmodule.exports.Dispatcher = Dispatcher\nmodule.exports.Client = Client\nmodule.exports.Pool = Pool\nmodule.exports.BalancedPool = BalancedPool\nmodule.exports.RoundRobinPool = RoundRobinPool\nmodule.exports.Agent = Agent\nmodule.exports.ProxyAgent = ProxyAgent\nmodule.exports.Socks5ProxyAgent = Socks5ProxyAgent\nmodule.exports.EnvHttpProxyAgent = EnvHttpProxyAgent\nmodule.exports.RetryAgent = RetryAgent\nmodule.exports.H2CClient = H2CClient\nmodule.exports.RetryHandler = RetryHandler\n\nmodule.exports.DecoratorHandler = DecoratorHandler\nmodule.exports.RedirectHandler = RedirectHandler\nmodule.exports.interceptors = {\n  redirect: require('./lib/interceptor/redirect'),\n  responseError: require('./lib/interceptor/response-error'),\n  retry: require('./lib/interceptor/retry'),\n  dump: require('./lib/interceptor/dump'),\n  dns: require('./lib/interceptor/dns'),\n  cache: require('./lib/interceptor/cache'),\n  decompress: require('./lib/interceptor/decompress'),\n  deduplicate: require('./lib/interceptor/deduplicate')\n}\n\nmodule.exports.cacheStores = {\n  MemoryCacheStore: require('./lib/cache/memory-cache-store')\n}\n\nconst SqliteCacheStore = require('./lib/cache/sqlite-cache-store')\nmodule.exports.cacheStores.SqliteCacheStore = SqliteCacheStore\n\nmodule.exports.buildConnector = buildConnector\nmodule.exports.errors = errors\nmodule.exports.util = {\n  parseHeaders: util.parseHeaders,\n  headerNameToString: util.headerNameToString\n}\n\nfunction makeDispatcher (fn) {\n  return (url, opts, handler) => {\n    if (typeof opts === 'function') {\n      handler = opts\n      opts = null\n    }\n\n    if (!url || (typeof url !== 'string' && typeof url !== 'object' && !(url instanceof URL))) {\n      throw new InvalidArgumentError('invalid url')\n    }\n\n    if (opts != null && typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (opts && opts.path != null) {\n      if (typeof opts.path !== 'string') {\n        throw new InvalidArgumentError('invalid opts.path')\n      }\n\n      let path = opts.path\n      if (!opts.path.startsWith('/')) {\n        path = `/${path}`\n      }\n\n      url = new URL(util.parseOrigin(url).origin + path)\n    } else {\n      if (!opts) {\n        opts = typeof url === 'object' ? url : {}\n      }\n\n      url = util.parseURL(url)\n    }\n\n    const { agent, dispatcher = getGlobalDispatcher() } = opts\n\n    if (agent) {\n      throw new InvalidArgumentError('unsupported opts.agent. Did you mean opts.client?')\n    }\n\n    return fn.call(dispatcher, {\n      ...opts,\n      origin: url.origin,\n      path: url.search ? `${url.pathname}${url.search}` : url.pathname,\n      method: opts.method || (opts.body ? 'PUT' : 'GET')\n    }, handler)\n  }\n}\n\nmodule.exports.setGlobalDispatcher = setGlobalDispatcher\nmodule.exports.getGlobalDispatcher = getGlobalDispatcher\n\nconst fetchImpl = require('./lib/web/fetch').fetch\n\n// Capture __filename at module load time for stack trace augmentation.\n// This may be undefined when bundled in environments like Node.js internals.\nconst currentFilename = typeof __filename !== 'undefined' ? __filename : undefined\n\nfunction appendFetchStackTrace (err, filename) {\n  if (!err || typeof err !== 'object') {\n    return\n  }\n\n  const stack = typeof err.stack === 'string' ? err.stack : ''\n  const normalizedFilename = filename.replace(/\\\\/g, '/')\n\n  if (stack && (stack.includes(filename) || stack.includes(normalizedFilename))) {\n    return\n  }\n\n  const capture = {}\n  Error.captureStackTrace(capture, appendFetchStackTrace)\n\n  if (!capture.stack) {\n    return\n  }\n\n  const captureLines = capture.stack.split('\\n').slice(1).join('\\n')\n\n  err.stack = stack ? `${stack}\\n${captureLines}` : capture.stack\n}\n\nmodule.exports.fetch = function fetch (init, options = undefined) {\n  return fetchImpl(init, options).catch(err => {\n    if (currentFilename) {\n      appendFetchStackTrace(err, currentFilename)\n    } else if (err && typeof err === 'object') {\n      Error.captureStackTrace(err, module.exports.fetch)\n    }\n    throw err\n  })\n}\nmodule.exports.Headers = require('./lib/web/fetch/headers').Headers\nmodule.exports.Response = require('./lib/web/fetch/response').Response\nmodule.exports.Request = require('./lib/web/fetch/request').Request\nmodule.exports.FormData = require('./lib/web/fetch/formdata').FormData\n\nconst { setGlobalOrigin, getGlobalOrigin } = require('./lib/web/fetch/global')\n\nmodule.exports.setGlobalOrigin = setGlobalOrigin\nmodule.exports.getGlobalOrigin = getGlobalOrigin\n\nconst { CacheStorage } = require('./lib/web/cache/cachestorage')\nconst { kConstruct } = require('./lib/core/symbols')\n\nmodule.exports.caches = new CacheStorage(kConstruct)\n\nconst { deleteCookie, getCookies, getSetCookies, setCookie, parseCookie } = require('./lib/web/cookies')\n\nmodule.exports.deleteCookie = deleteCookie\nmodule.exports.getCookies = getCookies\nmodule.exports.getSetCookies = getSetCookies\nmodule.exports.setCookie = setCookie\nmodule.exports.parseCookie = parseCookie\n\nconst { parseMIMEType, serializeAMimeType } = require('./lib/web/fetch/data-url')\n\nmodule.exports.parseMIMEType = parseMIMEType\nmodule.exports.serializeAMimeType = serializeAMimeType\n\nconst { CloseEvent, ErrorEvent, MessageEvent } = require('./lib/web/websocket/events')\nconst { WebSocket, ping } = require('./lib/web/websocket/websocket')\nmodule.exports.WebSocket = WebSocket\nmodule.exports.CloseEvent = CloseEvent\nmodule.exports.ErrorEvent = ErrorEvent\nmodule.exports.MessageEvent = MessageEvent\nmodule.exports.ping = ping\n\nmodule.exports.WebSocketStream = require('./lib/web/websocket/stream/websocketstream').WebSocketStream\nmodule.exports.WebSocketError = require('./lib/web/websocket/stream/websocketerror').WebSocketError\n\nmodule.exports.request = makeDispatcher(api.request)\nmodule.exports.stream = makeDispatcher(api.stream)\nmodule.exports.pipeline = makeDispatcher(api.pipeline)\nmodule.exports.connect = makeDispatcher(api.connect)\nmodule.exports.upgrade = makeDispatcher(api.upgrade)\n\nmodule.exports.MockClient = MockClient\nmodule.exports.MockCallHistory = MockCallHistory\nmodule.exports.MockCallHistoryLog = MockCallHistoryLog\nmodule.exports.MockPool = MockPool\nmodule.exports.MockAgent = MockAgent\nmodule.exports.SnapshotAgent = SnapshotAgent\nmodule.exports.mockErrors = mockErrors\n\nconst { EventSource } = require('./lib/web/eventsource/eventsource')\n\nmodule.exports.EventSource = EventSource\n\nfunction install () {\n  globalThis.fetch = module.exports.fetch\n  globalThis.Headers = module.exports.Headers\n  globalThis.Response = module.exports.Response\n  globalThis.Request = module.exports.Request\n  globalThis.FormData = module.exports.FormData\n  globalThis.WebSocket = module.exports.WebSocket\n  globalThis.CloseEvent = module.exports.CloseEvent\n  globalThis.ErrorEvent = module.exports.ErrorEvent\n  globalThis.MessageEvent = module.exports.MessageEvent\n  globalThis.EventSource = module.exports.EventSource\n}\n\nmodule.exports.install = install\n", "\"use strict\";\n\nexports.removeLeadingAndTrailingHTTPWhitespace = string => {\n  return string.replace(/^[ \\t\\n\\r]+/u, \"\").replace(/[ \\t\\n\\r]+$/u, \"\");\n};\n\nexports.removeTrailingHTTPWhitespace = string => {\n  return string.replace(/[ \\t\\n\\r]+$/u, \"\");\n};\n\nexports.isHTTPWhitespaceChar = char => {\n  return char === \" \" || char === \"\\t\" || char === \"\\n\" || char === \"\\r\";\n};\n\nexports.solelyContainsHTTPTokenCodePoints = string => {\n  return /^[-!#$%&'*+.^_`|~A-Za-z0-9]*$/u.test(string);\n};\n\nexports.soleyContainsHTTPQuotedStringTokenCodePoints = string => {\n  return /^[\\t\\u0020-\\u007E\\u0080-\\u00FF]*$/u.test(string);\n};\n\nexports.asciiLowercase = string => {\n  return string.replace(/[A-Z]/ug, l => l.toLowerCase());\n};\n\n// This variant only implements it with the extract-value flag set.\nexports.collectAnHTTPQuotedString = (input, position) => {\n  let value = \"\";\n\n  position++;\n\n  while (true) {\n    while (position < input.length && input[position] !== \"\\\"\" && input[position] !== \"\\\\\") {\n      value += input[position];\n      ++position;\n    }\n\n    if (position >= input.length) {\n      break;\n    }\n\n    const quoteOrBackslash = input[position];\n    ++position;\n\n    if (quoteOrBackslash === \"\\\\\") {\n      if (position >= input.length) {\n        value += \"\\\\\";\n        break;\n      }\n\n      value += input[position];\n      ++position;\n    } else {\n      break;\n    }\n  }\n\n  return [value, position];\n};\n", "\"use strict\";\nconst {\n  asciiLowercase,\n  solelyContainsHTTPTokenCodePoints,\n  soleyContainsHTTPQuotedStringTokenCodePoints\n} = require(\"./utils.js\");\n\nmodule.exports = class MIMETypeParameters {\n  constructor(map) {\n    this._map = map;\n  }\n\n  get size() {\n    return this._map.size;\n  }\n\n  get(name) {\n    name = asciiLowercase(String(name));\n    return this._map.get(name);\n  }\n\n  has(name) {\n    name = asciiLowercase(String(name));\n    return this._map.has(name);\n  }\n\n  set(name, value) {\n    name = asciiLowercase(String(name));\n    value = String(value);\n\n    if (!solelyContainsHTTPTokenCodePoints(name)) {\n      throw new Error(`Invalid MIME type parameter name \"${name}\": only HTTP token code points are valid.`);\n    }\n    if (!soleyContainsHTTPQuotedStringTokenCodePoints(value)) {\n      throw new Error(`Invalid MIME type parameter value \"${value}\": only HTTP quoted-string token code points are ` +\n                      `valid.`);\n    }\n\n    return this._map.set(name, value);\n  }\n\n  clear() {\n    this._map.clear();\n  }\n\n  delete(name) {\n    name = asciiLowercase(String(name));\n    return this._map.delete(name);\n  }\n\n  forEach(callbackFn, thisArg) {\n    this._map.forEach(callbackFn, thisArg);\n  }\n\n  keys() {\n    return this._map.keys();\n  }\n\n  values() {\n    return this._map.values();\n  }\n\n  entries() {\n    return this._map.entries();\n  }\n\n  [Symbol.iterator]() {\n    return this._map[Symbol.iterator]();\n  }\n};\n", "\"use strict\";\nconst {\n  removeLeadingAndTrailingHTTPWhitespace,\n  removeTrailingHTTPWhitespace,\n  isHTTPWhitespaceChar,\n  solelyContainsHTTPTokenCodePoints,\n  soleyContainsHTTPQuotedStringTokenCodePoints,\n  asciiLowercase,\n  collectAnHTTPQuotedString\n} = require(\"./utils.js\");\n\nmodule.exports = input => {\n  input = removeLeadingAndTrailingHTTPWhitespace(input);\n\n  let position = 0;\n  let type = \"\";\n  while (position < input.length && input[position] !== \"/\") {\n    type += input[position];\n    ++position;\n  }\n\n  if (type.length === 0 || !solelyContainsHTTPTokenCodePoints(type)) {\n    return null;\n  }\n\n  if (position >= input.length) {\n    return null;\n  }\n\n  // Skips past \"/\"\n  ++position;\n\n  let subtype = \"\";\n  while (position < input.length && input[position] !== \";\") {\n    subtype += input[position];\n    ++position;\n  }\n\n  subtype = removeTrailingHTTPWhitespace(subtype);\n\n  if (subtype.length === 0 || !solelyContainsHTTPTokenCodePoints(subtype)) {\n    return null;\n  }\n\n  const mimeType = {\n    type: asciiLowercase(type),\n    subtype: asciiLowercase(subtype),\n    parameters: new Map()\n  };\n\n  while (position < input.length) {\n    // Skip past \";\"\n    ++position;\n\n    while (isHTTPWhitespaceChar(input[position])) {\n      ++position;\n    }\n\n    let parameterName = \"\";\n    while (position < input.length && input[position] !== \";\" && input[position] !== \"=\") {\n      parameterName += input[position];\n      ++position;\n    }\n    parameterName = asciiLowercase(parameterName);\n\n    if (position < input.length) {\n      if (input[position] === \";\") {\n        continue;\n      }\n\n      // Skip past \"=\"\n      ++position;\n    }\n\n    let parameterValue = null;\n    if (input[position] === \"\\\"\") {\n      [parameterValue, position] = collectAnHTTPQuotedString(input, position);\n\n      while (position < input.length && input[position] !== \";\") {\n        ++position;\n      }\n    } else {\n      parameterValue = \"\";\n      while (position < input.length && input[position] !== \";\") {\n        parameterValue += input[position];\n        ++position;\n      }\n\n      parameterValue = removeTrailingHTTPWhitespace(parameterValue);\n\n      if (parameterValue === \"\") {\n        continue;\n      }\n    }\n\n    if (parameterName.length > 0 &&\n        solelyContainsHTTPTokenCodePoints(parameterName) &&\n        soleyContainsHTTPQuotedStringTokenCodePoints(parameterValue) &&\n        !mimeType.parameters.has(parameterName)) {\n      mimeType.parameters.set(parameterName, parameterValue);\n    }\n  }\n\n  return mimeType;\n};\n", "\"use strict\";\nconst { solelyContainsHTTPTokenCodePoints } = require(\"./utils.js\");\n\nmodule.exports = mimeType => {\n  let serialization = `${mimeType.type}/${mimeType.subtype}`;\n\n  if (mimeType.parameters.size === 0) {\n    return serialization;\n  }\n\n  for (let [name, value] of mimeType.parameters) {\n    serialization += \";\";\n    serialization += name;\n    serialization += \"=\";\n\n    if (!solelyContainsHTTPTokenCodePoints(value) || value.length === 0) {\n      value = value.replace(/([\"\\\\])/ug, \"\\\\$1\");\n      value = `\"${value}\"`;\n    }\n\n    serialization += value;\n  }\n\n  return serialization;\n};\n", "\"use strict\";\nconst MIMETypeParameters = require(\"./mime-type-parameters.js\");\nconst parse = require(\"./parser.js\");\nconst serialize = require(\"./serializer.js\");\nconst {\n  asciiLowercase,\n  solelyContainsHTTPTokenCodePoints\n} = require(\"./utils.js\");\n\nmodule.exports = class MIMEType {\n  constructor(string) {\n    string = String(string);\n    const result = parse(string);\n    if (result === null) {\n      throw new Error(`Could not parse MIME type string \"${string}\"`);\n    }\n\n    this._type = result.type;\n    this._subtype = result.subtype;\n    this._parameters = new MIMETypeParameters(result.parameters);\n  }\n\n  static parse(string) {\n    try {\n      return new this(string);\n    } catch (e) {\n      return null;\n    }\n  }\n\n  get essence() {\n    return `${this.type}/${this.subtype}`;\n  }\n\n  get type() {\n    return this._type;\n  }\n\n  set type(value) {\n    value = asciiLowercase(String(value));\n\n    if (value.length === 0) {\n      throw new Error(\"Invalid type: must be a non-empty string\");\n    }\n    if (!solelyContainsHTTPTokenCodePoints(value)) {\n      throw new Error(`Invalid type ${value}: must contain only HTTP token code points`);\n    }\n\n    this._type = value;\n  }\n\n  get subtype() {\n    return this._subtype;\n  }\n\n  set subtype(value) {\n    value = asciiLowercase(String(value));\n\n    if (value.length === 0) {\n      throw new Error(\"Invalid subtype: must be a non-empty string\");\n    }\n    if (!solelyContainsHTTPTokenCodePoints(value)) {\n      throw new Error(`Invalid subtype ${value}: must contain only HTTP token code points`);\n    }\n\n    this._subtype = value;\n  }\n\n  get parameters() {\n    return this._parameters;\n  }\n\n  toString() {\n    // The serialize function works on both \"MIME type records\" (i.e. the results of parse) and on this class, since\n    // this class's interface is identical.\n    return serialize(this);\n  }\n\n  isJavaScript({ prohibitParameters = false } = {}) {\n    switch (this._type) {\n      case \"text\": {\n        switch (this._subtype) {\n          case \"ecmascript\":\n          case \"javascript\":\n          case \"javascript1.0\":\n          case \"javascript1.1\":\n          case \"javascript1.2\":\n          case \"javascript1.3\":\n          case \"javascript1.4\":\n          case \"javascript1.5\":\n          case \"jscript\":\n          case \"livescript\":\n          case \"x-ecmascript\":\n          case \"x-javascript\": {\n            return !prohibitParameters || this._parameters.size === 0;\n          }\n          default: {\n            return false;\n          }\n        }\n      }\n      case \"application\": {\n        switch (this._subtype) {\n          case \"ecmascript\":\n          case \"javascript\":\n          case \"x-ecmascript\":\n          case \"x-javascript\": {\n            return !prohibitParameters || this._parameters.size === 0;\n          }\n          default: {\n            return false;\n          }\n        }\n      }\n      default: {\n        return false;\n      }\n    }\n  }\n  isXML() {\n    return (this._subtype === \"xml\" && (this._type === \"text\" || this._type === \"application\")) ||\n           this._subtype.endsWith(\"+xml\");\n  }\n  isHTML() {\n    return this._subtype === \"html\" && this._type === \"text\";\n  }\n};\n", "/*!\n * media-typer\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 2616 sec 3.7\n *\n * parameter     = token \"=\" ( token | quoted-string )\n * token         = 1*<any CHAR except CTLs or separators>\n * separators    = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *               | \",\" | \";\" | \":\" | \"\\\" | <\">\n *               | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *               | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext        = <any TEXT except <\">>\n * quoted-pair   = \"\\\" CHAR\n * CHAR          = <any US-ASCII character (octets 0 - 127)>\n * TEXT          = <any OCTET except CTLs, but including LWS>\n * LWS           = [CRLF] 1*( SP | HT )\n * CRLF          = CR LF\n * CR            = <US-ASCII CR, carriage return (13)>\n * LF            = <US-ASCII LF, linefeed (10)>\n * SP            = <US-ASCII SP, space (32)>\n * SHT           = <US-ASCII HT, horizontal-tab (9)>\n * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET         = <any 8-bit sequence of data>\n */\nvar paramRegExp = /; *([!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) *= *(\"(?:[ !\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u0020-\\u007e])*\"|[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) */g;\nvar textRegExp = /^[\\u0020-\\u007e\\u0080-\\u00ff]+$/\nvar tokenRegExp = /^[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR        = <any US-ASCII character (octets 0 - 127)>\n */\nvar qescRegExp = /\\\\([\\u0000-\\u007f])/g;\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\nvar quoteRegExp = /([\\\\\"])/g;\n\n/**\n * RegExp to match type in RFC 6838\n *\n * type-name = restricted-name\n * subtype-name = restricted-name\n * restricted-name = restricted-name-first *126restricted-name-chars\n * restricted-name-first  = ALPHA / DIGIT\n * restricted-name-chars  = ALPHA / DIGIT / \"!\" / \"#\" /\n *                          \"$\" / \"&\" / \"-\" / \"^\" / \"_\"\n * restricted-name-chars =/ \".\" ; Characters before first dot always\n *                              ; specify a facet name\n * restricted-name-chars =/ \"+\" ; Characters after last plus always\n *                              ; specify a structured syntax suffix\n * ALPHA =  %x41-5A / %x61-7A   ; A-Z / a-z\n * DIGIT =  %x30-39             ; 0-9\n */\nvar subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/\nvar typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/\nvar typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;\n\n/**\n * Module exports.\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @api public\n */\n\nfunction format(obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required')\n  }\n\n  var parameters = obj.parameters\n  var subtype = obj.subtype\n  var suffix = obj.suffix\n  var type = obj.type\n\n  if (!type || !typeNameRegExp.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  if (!subtype || !subtypeNameRegExp.test(subtype)) {\n    throw new TypeError('invalid subtype')\n  }\n\n  // format as type/subtype\n  var string = type + '/' + subtype\n\n  // append +suffix\n  if (suffix) {\n    if (!typeNameRegExp.test(suffix)) {\n      throw new TypeError('invalid suffix')\n    }\n\n    string += '+' + suffix\n  }\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      if (!tokenRegExp.test(param)) {\n        throw new TypeError('invalid parameter name')\n      }\n\n      string += '; ' + param + '=' + qstring(parameters[param])\n    }\n  }\n\n  return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @api public\n */\n\nfunction parse(string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  // support req/res-like objects as argument\n  if (typeof string === 'object') {\n    string = getcontenttype(string)\n  }\n\n  if (typeof string !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  var index = string.indexOf(';')\n  var type = index !== -1\n    ? string.substr(0, index)\n    : string\n\n  var key\n  var match\n  var obj = splitType(type)\n  var params = {}\n  var value\n\n  paramRegExp.lastIndex = index\n\n  while (match = paramRegExp.exec(string)) {\n    if (match.index !== index) {\n      throw new TypeError('invalid parameter format')\n    }\n\n    index += match[0].length\n    key = match[1].toLowerCase()\n    value = match[2]\n\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value\n        .substr(1, value.length - 2)\n        .replace(qescRegExp, '$1')\n    }\n\n    params[key] = value\n  }\n\n  if (index !== -1 && index !== string.length) {\n    throw new TypeError('invalid parameter format')\n  }\n\n  obj.parameters = params\n\n  return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @api private\n */\n\nfunction getcontenttype(obj) {\n  if (typeof obj.getHeader === 'function') {\n    // res-like\n    return obj.getHeader('content-type')\n  }\n\n  if (typeof obj.headers === 'object') {\n    // req-like\n    return obj.headers && obj.headers['content-type']\n  }\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring(val) {\n  var str = String(val)\n\n  // no need to quote tokens\n  if (tokenRegExp.test(str)) {\n    return str\n  }\n\n  if (str.length > 0 && !textRegExp.test(str)) {\n    throw new TypeError('invalid parameter value')\n  }\n\n  return '\"' + str.replace(quoteRegExp, '\\\\$1') + '\"'\n}\n\n/**\n * Simply \"type/subtype+siffx\" into parts.\n *\n * @param {string} string\n * @return {Object}\n * @api private\n */\n\nfunction splitType(string) {\n  var match = typeRegExp.exec(string.toLowerCase())\n\n  if (!match) {\n    throw new TypeError('invalid media type')\n  }\n\n  var type = match[1]\n  var subtype = match[2]\n  var suffix\n\n  // suffix after last +\n  var index = subtype.lastIndexOf('+')\n  if (index !== -1) {\n    suffix = subtype.substr(index + 1)\n    subtype = subtype.substr(0, index)\n  }\n\n  var obj = {\n    type: type,\n    subtype: subtype,\n    suffix: suffix\n  }\n\n  return obj\n}\n", "{\n  \"application/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/3gpdash-qoe-report+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/3gpp-ims+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/3gpphal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/3gpphalforms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/a2l\": {\n    \"source\": \"iana\"\n  },\n  \"application/ace+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/activemessage\": {\n    \"source\": \"iana\"\n  },\n  \"application/activity+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-directory+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcost+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcostparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointprop+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointpropparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-error+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-updatestreamcontrol+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-updatestreamparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/aml\": {\n    \"source\": \"iana\"\n  },\n  \"application/andrew-inset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez\"]\n  },\n  \"application/applefile\": {\n    \"source\": \"iana\"\n  },\n  \"application/applixware\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aw\"]\n  },\n  \"application/at+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/atf\": {\n    \"source\": \"iana\"\n  },\n  \"application/atfx\": {\n    \"source\": \"iana\"\n  },\n  \"application/atom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atom\"]\n  },\n  \"application/atomcat+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomcat\"]\n  },\n  \"application/atomdeleted+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomdeleted\"]\n  },\n  \"application/atomicmail\": {\n    \"source\": \"iana\"\n  },\n  \"application/atomsvc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomsvc\"]\n  },\n  \"application/atsc-dwd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dwd\"]\n  },\n  \"application/atsc-dynamic-event-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/atsc-held+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"held\"]\n  },\n  \"application/atsc-rdt+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/atsc-rsat+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rsat\"]\n  },\n  \"application/atxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/auth-policy+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/bacnet-xdd+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/batch-smtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/beep+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/calendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/calendar+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xcs\"]\n  },\n  \"application/call-completion\": {\n    \"source\": \"iana\"\n  },\n  \"application/cals-1840\": {\n    \"source\": \"iana\"\n  },\n  \"application/captive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/cccex\": {\n    \"source\": \"iana\"\n  },\n  \"application/ccmp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ccxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ccxml\"]\n  },\n  \"application/cdfx+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cdfx\"]\n  },\n  \"application/cdmi-capability\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmia\"]\n  },\n  \"application/cdmi-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmic\"]\n  },\n  \"application/cdmi-domain\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmid\"]\n  },\n  \"application/cdmi-object\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmio\"]\n  },\n  \"application/cdmi-queue\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmiq\"]\n  },\n  \"application/cdni\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea-2018+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cellml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cfw\": {\n    \"source\": \"iana\"\n  },\n  \"application/city+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/clr\": {\n    \"source\": \"iana\"\n  },\n  \"application/clue+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/clue_info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cms\": {\n    \"source\": \"iana\"\n  },\n  \"application/cnrp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-group+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/commonground\": {\n    \"source\": \"iana\"\n  },\n  \"application/conference-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cose\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key-set\": {\n    \"source\": \"iana\"\n  },\n  \"application/cpl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cpl\"]\n  },\n  \"application/csrattrs\": {\n    \"source\": \"iana\"\n  },\n  \"application/csta+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cstadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/csvm+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cu-seeme\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cu\"]\n  },\n  \"application/cwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/cybercash\": {\n    \"source\": \"iana\"\n  },\n  \"application/dart\": {\n    \"compressible\": true\n  },\n  \"application/dash+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpd\"]\n  },\n  \"application/dash-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpp\"]\n  },\n  \"application/dashdelta\": {\n    \"source\": \"iana\"\n  },\n  \"application/davmount+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"davmount\"]\n  },\n  \"application/dca-rft\": {\n    \"source\": \"iana\"\n  },\n  \"application/dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/dec-dx\": {\n    \"source\": \"iana\"\n  },\n  \"application/dialog-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom\": {\n    \"source\": \"iana\"\n  },\n  \"application/dicom+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dii\": {\n    \"source\": \"iana\"\n  },\n  \"application/dit\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dns-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/docbook+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"dbk\"]\n  },\n  \"application/dots+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/dskpp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dssc+der\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dssc\"]\n  },\n  \"application/dssc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdssc\"]\n  },\n  \"application/dvcs\": {\n    \"source\": \"iana\"\n  },\n  \"application/ecmascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"es\",\"ecma\"]\n  },\n  \"application/edi-consent\": {\n    \"source\": \"iana\"\n  },\n  \"application/edi-x12\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/edifact\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/efi\": {\n    \"source\": \"iana\"\n  },\n  \"application/elm+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/elm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.cap+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.comment+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.deviceinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.ecall.msd\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.providerinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.serviceinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.subscriberinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.veds+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emma+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"emma\"]\n  },\n  \"application/emotionml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"emotionml\"]\n  },\n  \"application/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/epp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/epub+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"epub\"]\n  },\n  \"application/eshop\": {\n    \"source\": \"iana\"\n  },\n  \"application/exi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exi\"]\n  },\n  \"application/expect-ct-report+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/express\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exp\"]\n  },\n  \"application/fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/fastsoap\": {\n    \"source\": \"iana\"\n  },\n  \"application/fdt+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"fdt\"]\n  },\n  \"application/fhir+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/fhir+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/fido.trusted-apps+json\": {\n    \"compressible\": true\n  },\n  \"application/fits\": {\n    \"source\": \"iana\"\n  },\n  \"application/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-tdpfr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pfr\"]\n  },\n  \"application/font-woff\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/framework-attributes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"geojson\"]\n  },\n  \"application/geo+json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/geopackage+sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/geoxacml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/gltf-buffer\": {\n    \"source\": \"iana\"\n  },\n  \"application/gml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gml\"]\n  },\n  \"application/gpx+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"gpx\"]\n  },\n  \"application/gxf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gxf\"]\n  },\n  \"application/gzip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gz\"]\n  },\n  \"application/h224\": {\n    \"source\": \"iana\"\n  },\n  \"application/held+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/hjson\": {\n    \"extensions\": [\"hjson\"]\n  },\n  \"application/http\": {\n    \"source\": \"iana\"\n  },\n  \"application/hyperstudio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stk\"]\n  },\n  \"application/ibe-key-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ibe-pkg-reply+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ibe-pp-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/iges\": {\n    \"source\": \"iana\"\n  },\n  \"application/im-iscomposing+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/index\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.cmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.obj\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.response\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.vnd\": {\n    \"source\": \"iana\"\n  },\n  \"application/inkml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ink\",\"inkml\"]\n  },\n  \"application/iotp\": {\n    \"source\": \"iana\"\n  },\n  \"application/ipfix\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipfix\"]\n  },\n  \"application/ipp\": {\n    \"source\": \"iana\"\n  },\n  \"application/isup\": {\n    \"source\": \"iana\"\n  },\n  \"application/its+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"its\"]\n  },\n  \"application/java-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jar\",\"war\",\"ear\"]\n  },\n  \"application/java-serialized-object\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"ser\"]\n  },\n  \"application/java-vm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"class\"]\n  },\n  \"application/javascript\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"js\",\"mjs\"]\n  },\n  \"application/jf2feed+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jose\": {\n    \"source\": \"iana\"\n  },\n  \"application/jose+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jrd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jscalendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"json\",\"map\"]\n  },\n  \"application/json-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/json5\": {\n    \"extensions\": [\"json5\"]\n  },\n  \"application/jsonml+json\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonml\"]\n  },\n  \"application/jwk+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwk-set+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/kpml-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/kpml-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ld+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonld\"]\n  },\n  \"application/lgr+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lgr\"]\n  },\n  \"application/link-format\": {\n    \"source\": \"iana\"\n  },\n  \"application/load-control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/lost+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lostxml\"]\n  },\n  \"application/lostsync+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/lpf+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/lxf\": {\n    \"source\": \"iana\"\n  },\n  \"application/mac-binhex40\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hqx\"]\n  },\n  \"application/mac-compactpro\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpt\"]\n  },\n  \"application/macwriteii\": {\n    \"source\": \"iana\"\n  },\n  \"application/mads+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mads\"]\n  },\n  \"application/manifest+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"webmanifest\"]\n  },\n  \"application/marc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mrc\"]\n  },\n  \"application/marcxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mrcx\"]\n  },\n  \"application/mathematica\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ma\",\"nb\",\"mb\"]\n  },\n  \"application/mathml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mathml\"]\n  },\n  \"application/mathml-content+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mathml-presentation+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-associated-procedure-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-deregister+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-envelope+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-msk+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-msk-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-protection-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-reception-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-register+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-register-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-schedule+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-user-service-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbox\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbox\"]\n  },\n  \"application/media-policy-dataset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpf\"]\n  },\n  \"application/media_control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mediaservercontrol+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mscml\"]\n  },\n  \"application/merge-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/metalink+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"metalink\"]\n  },\n  \"application/metalink4+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"meta4\"]\n  },\n  \"application/mets+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mets\"]\n  },\n  \"application/mf4\": {\n    \"source\": \"iana\"\n  },\n  \"application/mikey\": {\n    \"source\": \"iana\"\n  },\n  \"application/mipc\": {\n    \"source\": \"iana\"\n  },\n  \"application/missing-blocks+cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/mmt-aei+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"maei\"]\n  },\n  \"application/mmt-usd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"musd\"]\n  },\n  \"application/mods+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mods\"]\n  },\n  \"application/moss-keys\": {\n    \"source\": \"iana\"\n  },\n  \"application/moss-signature\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/mp21\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m21\",\"mp21\"]\n  },\n  \"application/mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mp4s\",\"m4p\"]\n  },\n  \"application/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod-xmt\": {\n    \"source\": \"iana\"\n  },\n  \"application/mrb-consumer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mrb-publish+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/msc-ivr+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/msc-mixer+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/msword\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"doc\",\"dot\"]\n  },\n  \"application/mud+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/multipart-core\": {\n    \"source\": \"iana\"\n  },\n  \"application/mxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxf\"]\n  },\n  \"application/n-quads\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nq\"]\n  },\n  \"application/n-triples\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nt\"]\n  },\n  \"application/nasdata\": {\n    \"source\": \"iana\"\n  },\n  \"application/news-checkgroups\": {\n    \"source\": \"iana\",\n    \"charset\": \"US-ASCII\"\n  },\n  \"application/news-groupinfo\": {\n    \"source\": \"iana\",\n    \"charset\": \"US-ASCII\"\n  },\n  \"application/news-transmission\": {\n    \"source\": \"iana\"\n  },\n  \"application/nlsml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/node\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cjs\"]\n  },\n  \"application/nss\": {\n    \"source\": \"iana\"\n  },\n  \"application/oauth-authz-req+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/oblivious-dns-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/octet-stream\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n  },\n  \"application/oda\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oda\"]\n  },\n  \"application/odm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/odx\": {\n    \"source\": \"iana\"\n  },\n  \"application/oebps-package+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"opf\"]\n  },\n  \"application/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogx\"]\n  },\n  \"application/omdoc+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"omdoc\"]\n  },\n  \"application/onenote\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n  },\n  \"application/opc-nodeset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/oscore\": {\n    \"source\": \"iana\"\n  },\n  \"application/oxps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oxps\"]\n  },\n  \"application/p21\": {\n    \"source\": \"iana\"\n  },\n  \"application/p21+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/p2p-overlay+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"relo\"]\n  },\n  \"application/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/passport\": {\n    \"source\": \"iana\"\n  },\n  \"application/patch-ops-error+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xer\"]\n  },\n  \"application/pdf\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pdf\"]\n  },\n  \"application/pdx\": {\n    \"source\": \"iana\"\n  },\n  \"application/pem-certificate-chain\": {\n    \"source\": \"iana\"\n  },\n  \"application/pgp-encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pgp\"]\n  },\n  \"application/pgp-keys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"asc\"]\n  },\n  \"application/pgp-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"asc\",\"sig\"]\n  },\n  \"application/pics-rules\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prf\"]\n  },\n  \"application/pidf+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/pidf-diff+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/pkcs10\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p10\"]\n  },\n  \"application/pkcs12\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkcs7-mime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7m\",\"p7c\"]\n  },\n  \"application/pkcs7-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7s\"]\n  },\n  \"application/pkcs8\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p8\"]\n  },\n  \"application/pkcs8-encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkix-attr-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ac\"]\n  },\n  \"application/pkix-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cer\"]\n  },\n  \"application/pkix-crl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"crl\"]\n  },\n  \"application/pkix-pkipath\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pkipath\"]\n  },\n  \"application/pkixcmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pki\"]\n  },\n  \"application/pls+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"pls\"]\n  },\n  \"application/poc-settings+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/postscript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ai\",\"eps\",\"ps\"]\n  },\n  \"application/ppsp-tracker+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/provenance+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"provx\"]\n  },\n  \"application/prs.alvestrand.titrax-sheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.cww\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cww\"]\n  },\n  \"application/prs.cyn\": {\n    \"source\": \"iana\",\n    \"charset\": \"7-BIT\"\n  },\n  \"application/prs.hpub+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/prs.nprend\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.plucker\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.rdf-xml-crypt\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.xsf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/pskc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"pskcxml\"]\n  },\n  \"application/pvd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/qsig\": {\n    \"source\": \"iana\"\n  },\n  \"application/raml+yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"raml\"]\n  },\n  \"application/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/rdap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rdf\",\"owl\"]\n  },\n  \"application/reginfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rif\"]\n  },\n  \"application/relax-ng-compact-syntax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rnc\"]\n  },\n  \"application/remote-printing\": {\n    \"source\": \"iana\"\n  },\n  \"application/reputon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/resource-lists+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rl\"]\n  },\n  \"application/resource-lists-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rld\"]\n  },\n  \"application/rfc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/riscos\": {\n    \"source\": \"iana\"\n  },\n  \"application/rlmi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rls-services+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rs\"]\n  },\n  \"application/route-apd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rapd\"]\n  },\n  \"application/route-s-tsid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sls\"]\n  },\n  \"application/route-usd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rusd\"]\n  },\n  \"application/rpki-ghostbusters\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gbr\"]\n  },\n  \"application/rpki-manifest\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mft\"]\n  },\n  \"application/rpki-publication\": {\n    \"source\": \"iana\"\n  },\n  \"application/rpki-roa\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"roa\"]\n  },\n  \"application/rpki-updown\": {\n    \"source\": \"iana\"\n  },\n  \"application/rsd+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rsd\"]\n  },\n  \"application/rss+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rss\"]\n  },\n  \"application/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"application/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"application/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"application/samlassertion+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/samlmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sarif+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sarif-external-properties+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sbe\": {\n    \"source\": \"iana\"\n  },\n  \"application/sbml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sbml\"]\n  },\n  \"application/scaip+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scim+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scvp-cv-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scq\"]\n  },\n  \"application/scvp-cv-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scs\"]\n  },\n  \"application/scvp-vp-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spq\"]\n  },\n  \"application/scvp-vp-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spp\"]\n  },\n  \"application/sdp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sdp\"]\n  },\n  \"application/secevent+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/senml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"senmlx\"]\n  },\n  \"application/senml-etch+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml-etch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/senml-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/sensml+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/sensml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sensml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sensmlx\"]\n  },\n  \"application/sensml-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/sep+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sep-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/session-info\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setpay\"]\n  },\n  \"application/set-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-registration-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setreg\"]\n  },\n  \"application/sgml\": {\n    \"source\": \"iana\"\n  },\n  \"application/sgml-open-catalog\": {\n    \"source\": \"iana\"\n  },\n  \"application/shf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"shf\"]\n  },\n  \"application/sieve\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"siv\",\"sieve\"]\n  },\n  \"application/simple-filter+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/simple-message-summary\": {\n    \"source\": \"iana\"\n  },\n  \"application/simplesymbolcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/sipc\": {\n    \"source\": \"iana\"\n  },\n  \"application/slate\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"smi\",\"smil\"]\n  },\n  \"application/smpte336m\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sparql-query\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rq\"]\n  },\n  \"application/sparql-results+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"srx\"]\n  },\n  \"application/spdx+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/spirits-event+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sql\": {\n    \"source\": \"iana\"\n  },\n  \"application/srgs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gram\"]\n  },\n  \"application/srgs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"grxml\"]\n  },\n  \"application/sru+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sru\"]\n  },\n  \"application/ssdl+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ssdl\"]\n  },\n  \"application/ssml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ssml\"]\n  },\n  \"application/stix+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/swid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"swidtag\"]\n  },\n  \"application/tamp-apex-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-apex-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-error\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tar\": {\n    \"compressible\": true\n  },\n  \"application/taxii+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/td+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/tei+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tei\",\"teicorpus\"]\n  },\n  \"application/tetra_isi\": {\n    \"source\": \"iana\"\n  },\n  \"application/thraud+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tfi\"]\n  },\n  \"application/timestamp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamp-reply\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamped-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tsd\"]\n  },\n  \"application/tlsrpt+gzip\": {\n    \"source\": \"iana\"\n  },\n  \"application/tlsrpt+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/tnauthlist\": {\n    \"source\": \"iana\"\n  },\n  \"application/token-introspection+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/toml\": {\n    \"compressible\": true,\n    \"extensions\": [\"toml\"]\n  },\n  \"application/trickle-ice-sdpfrag\": {\n    \"source\": \"iana\"\n  },\n  \"application/trig\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"trig\"]\n  },\n  \"application/ttml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ttml\"]\n  },\n  \"application/tve-trigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/tzif\": {\n    \"source\": \"iana\"\n  },\n  \"application/tzif-leap\": {\n    \"source\": \"iana\"\n  },\n  \"application/ubjson\": {\n    \"compressible\": false,\n    \"extensions\": [\"ubj\"]\n  },\n  \"application/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/urc-grpsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/urc-ressheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rsheet\"]\n  },\n  \"application/urc-targetdesc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"td\"]\n  },\n  \"application/urc-uisocketdesc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vcard+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vcard+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vemmi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vividence.scriptfile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.1000minds.decision-model+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"1km\"]\n  },\n  \"application/vnd.3gpp-prose+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-prose-pc3ch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-v2x-local-service-information\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.5gnas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.access-transfer-events+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.bsf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.gmop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.gtpc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.interworking-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.lpp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mc-signalling-ear\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-signalling\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-location-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-signed+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mid-call+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.ngap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pfcp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pic-bw-large\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-small\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"psb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-var\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pvb\"]\n  },\n  \"application/vnd.3gpp.s1ap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.sms+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.srvcc-ext+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.srvcc-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.state-and-event-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.ussd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp2.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp2.tcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tcap\"]\n  },\n  \"application/vnd.3lightssoftware.imagescal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3m.post-it-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pwn\"]\n  },\n  \"application/vnd.accpac.simply.aso\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aso\"]\n  },\n  \"application/vnd.accpac.simply.imp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"imp\"]\n  },\n  \"application/vnd.acucobol\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acu\"]\n  },\n  \"application/vnd.acucorp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atc\",\"acutc\"]\n  },\n  \"application/vnd.adobe.air-application-installer-package+zip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"air\"]\n  },\n  \"application/vnd.adobe.flash.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.formscentral.fcdt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcdt\"]\n  },\n  \"application/vnd.adobe.fxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fxp\",\"fxpl\"]\n  },\n  \"application/vnd.adobe.partial-upload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.xdp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdp\"]\n  },\n  \"application/vnd.adobe.xfdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdf\"]\n  },\n  \"application/vnd.aether.imp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.afplinedata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.afplinedata-pagedef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.cmoca-cmresource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-charset\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-codedfont\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-codepage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-cmtable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-formdef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-mediummap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-objectcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-overlay\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-pagesegment\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.age\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"age\"]\n  },\n  \"application/vnd.ah-barcode\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ahead.space\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ahead\"]\n  },\n  \"application/vnd.airzip.filesecure.azf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azf\"]\n  },\n  \"application/vnd.airzip.filesecure.azs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azs\"]\n  },\n  \"application/vnd.amadeus+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.amazon.ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"azw\"]\n  },\n  \"application/vnd.amazon.mobi8-ebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.americandynamics.acc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acc\"]\n  },\n  \"application/vnd.amiga.ami\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ami\"]\n  },\n  \"application/vnd.amundsen.maze+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.android.ota\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.android.package-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"apk\"]\n  },\n  \"application/vnd.anki\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.anser-web-certificate-issue-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cii\"]\n  },\n  \"application/vnd.anser-web-funds-transfer-initiation\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fti\"]\n  },\n  \"application/vnd.antix.game-component\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atx\"]\n  },\n  \"application/vnd.apache.arrow.file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.arrow.stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.compact\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.json\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.api+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.aplextor.warrp+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apothekende.reservation+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apple.installer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpkg\"]\n  },\n  \"application/vnd.apple.keynote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"key\"]\n  },\n  \"application/vnd.apple.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m3u8\"]\n  },\n  \"application/vnd.apple.numbers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"numbers\"]\n  },\n  \"application/vnd.apple.pages\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pages\"]\n  },\n  \"application/vnd.apple.pkpass\": {\n    \"compressible\": false,\n    \"extensions\": [\"pkpass\"]\n  },\n  \"application/vnd.arastra.swi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.aristanetworks.swi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"swi\"]\n  },\n  \"application/vnd.artisan+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.artsquare\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.astraea-software.iota\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iota\"]\n  },\n  \"application/vnd.audiograph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aep\"]\n  },\n  \"application/vnd.autopackage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.avalon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.avistar+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.balsamiq.bmml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmml\"]\n  },\n  \"application/vnd.balsamiq.bmpr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.banana-accounting\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.error\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bekitzur-stech+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bint.med-content\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.biopax.rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.blink-idb-value-wrapper\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.blueice.multipass\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpm\"]\n  },\n  \"application/vnd.bluetooth.ep.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bluetooth.le.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bmi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bmi\"]\n  },\n  \"application/vnd.bpf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bpf3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.businessobjects\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rep\"]\n  },\n  \"application/vnd.byu.uapi+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cab-jscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-cpdl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-lips\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.capasystems-pg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cendio.thinlinc.clientconf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.century-systems.tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chemdraw+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cdxml\"]\n  },\n  \"application/vnd.chess-pgn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chipnuts.karaoke-mmd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmd\"]\n  },\n  \"application/vnd.ciedi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cinderella\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdy\"]\n  },\n  \"application/vnd.cirpack.isdn-ext\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.citationstyles.style+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csl\"]\n  },\n  \"application/vnd.claymore\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cla\"]\n  },\n  \"application/vnd.cloanto.rp9\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rp9\"]\n  },\n  \"application/vnd.clonk.c4group\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amc\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amz\"]\n  },\n  \"application/vnd.coffeescript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collection+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.doc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.next+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.comicbook+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.comicbook-rar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commerce-battelle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commonspace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"csp\"]\n  },\n  \"application/vnd.contact.cmsg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdbcmsg\"]\n  },\n  \"application/vnd.coreos.ignition+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cosmocaller\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmc\"]\n  },\n  \"application/vnd.crick.clicker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkx\"]\n  },\n  \"application/vnd.crick.clicker.keyboard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkk\"]\n  },\n  \"application/vnd.crick.clicker.palette\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkp\"]\n  },\n  \"application/vnd.crick.clicker.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkt\"]\n  },\n  \"application/vnd.crick.clicker.wordbank\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkw\"]\n  },\n  \"application/vnd.criticaltools.wbs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wbs\"]\n  },\n  \"application/vnd.cryptii.pipe+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.crypto-shade-file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cryptomator.encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cryptomator.vault\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ctc-posml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pml\"]\n  },\n  \"application/vnd.ctct.ws+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cups-pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-postscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-ppd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppd\"]\n  },\n  \"application/vnd.cups-raster\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-raw\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl.car\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"car\"]\n  },\n  \"application/vnd.curl.pcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcurl\"]\n  },\n  \"application/vnd.cyan.dean.root+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cybank\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cyclonedx+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cyclonedx+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.d2l.coursepackage1p0+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.d3m-dataset\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.d3m-problem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dart\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dart\"]\n  },\n  \"application/vnd.data-vision.rdz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rdz\"]\n  },\n  \"application/vnd.datapackage+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dataresource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dbf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dbf\"]\n  },\n  \"application/vnd.debian.binary-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dece.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n  },\n  \"application/vnd.dece.ttml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uvt\",\"uvvt\"]\n  },\n  \"application/vnd.dece.unspecified\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvx\",\"uvvx\"]\n  },\n  \"application/vnd.dece.zip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvz\",\"uvvz\"]\n  },\n  \"application/vnd.denovo.fcselayout-link\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fe_launch\"]\n  },\n  \"application/vnd.desmume.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dm.delegation+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dna\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dna\"]\n  },\n  \"application/vnd.document+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dolby.mlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mlp\"]\n  },\n  \"application/vnd.dolby.mobile.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dolby.mobile.2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.doremir.scorecloud-binary-document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dpgraph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dpg\"]\n  },\n  \"application/vnd.dreamfactory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dfac\"]\n  },\n  \"application/vnd.drive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ds-keypoint\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"kpxx\"]\n  },\n  \"application/vnd.dtg.local\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.flash\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ait\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ait\"]\n  },\n  \"application/vnd.dvb.dvbisl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.dvbj\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.esgcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcdftnotifaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgpdd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcroaming\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-base\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-enhancement\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-aggregate-root+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-container+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-generic+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-msglist+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-init+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.pfr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.service\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svc\"]\n  },\n  \"application/vnd.dxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dynageo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"geo\"]\n  },\n  \"application/vnd.dzr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.easykaraoke.cdgdownload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecdis-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecip.rlp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eclipse.ditto+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ecowin.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mag\"]\n  },\n  \"application/vnd.ecowin.filerequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.fileupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.series\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesrequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.img\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.iso\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.emclient.accessrequest+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.enliven\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nml\"]\n  },\n  \"application/vnd.enphase.envoy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eprints.data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.epson.esf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esf\"]\n  },\n  \"application/vnd.epson.msf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msf\"]\n  },\n  \"application/vnd.epson.quickanime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qam\"]\n  },\n  \"application/vnd.epson.salt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"slt\"]\n  },\n  \"application/vnd.epson.ssf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ssf\"]\n  },\n  \"application/vnd.ericsson.quickcall\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.espass-espass+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.eszigno3+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"es3\",\"et3\"]\n  },\n  \"application/vnd.etsi.aoc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.asic-e+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.etsi.asic-s+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.etsi.cug+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvcommand+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvdiscovery+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-bc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-cod+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-npvr+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvservice+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsync+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvueprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.mcid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.mheg5\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.pstn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.sci+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.simservs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.timestamp-token\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.tsl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.tsl.der\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eu.kasparian.car+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.eudora.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.profile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.settings\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.theme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.exstream-empower+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.exstream-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ezpix-album\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez2\"]\n  },\n  \"application/vnd.ezpix-package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez3\"]\n  },\n  \"application/vnd.f-secure.mobile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.familysearch.gedcom+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.fastcopy-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fdf\"]\n  },\n  \"application/vnd.fdsn.mseed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseed\"]\n  },\n  \"application/vnd.fdsn.seed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"seed\",\"dataless\"]\n  },\n  \"application/vnd.ffsns\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ficlab.flb+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.filmit.zfc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fints\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.firemonkeys.cloudcell\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.flographit\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gph\"]\n  },\n  \"application/vnd.fluxtime.clip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ftc\"]\n  },\n  \"application/vnd.font-fontforge-sfd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.framemaker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n  },\n  \"application/vnd.frogans.fnc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fnc\"]\n  },\n  \"application/vnd.frogans.ltf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ltf\"]\n  },\n  \"application/vnd.fsc.weblaunch\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fsc\"]\n  },\n  \"application/vnd.fujifilm.fb.docuworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.docuworks.binder\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.jfi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.fujitsu.oasys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oas\"]\n  },\n  \"application/vnd.fujitsu.oasys2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa2\"]\n  },\n  \"application/vnd.fujitsu.oasys3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa3\"]\n  },\n  \"application/vnd.fujitsu.oasysgp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fg5\"]\n  },\n  \"application/vnd.fujitsu.oasysprs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bh2\"]\n  },\n  \"application/vnd.fujixerox.art-ex\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.art4\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.ddd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ddd\"]\n  },\n  \"application/vnd.fujixerox.docuworks\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdw\"]\n  },\n  \"application/vnd.fujixerox.docuworks.binder\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xbd\"]\n  },\n  \"application/vnd.fujixerox.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.hbpl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fut-misnet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.futoin+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.futoin+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.fuzzysheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fzs\"]\n  },\n  \"application/vnd.genomatix.tuxedo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txd\"]\n  },\n  \"application/vnd.gentics.grd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geocube+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geogebra.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggb\"]\n  },\n  \"application/vnd.geogebra.slides\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.geogebra.tool\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggt\"]\n  },\n  \"application/vnd.geometry-explorer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gex\",\"gre\"]\n  },\n  \"application/vnd.geonext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gxt\"]\n  },\n  \"application/vnd.geoplan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g2w\"]\n  },\n  \"application/vnd.geospace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3w\"]\n  },\n  \"application/vnd.gerber\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gmx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gmx\"]\n  },\n  \"application/vnd.google-apps.document\": {\n    \"compressible\": false,\n    \"extensions\": [\"gdoc\"]\n  },\n  \"application/vnd.google-apps.presentation\": {\n    \"compressible\": false,\n    \"extensions\": [\"gslides\"]\n  },\n  \"application/vnd.google-apps.spreadsheet\": {\n    \"compressible\": false,\n    \"extensions\": [\"gsheet\"]\n  },\n  \"application/vnd.google-earth.kml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"kml\"]\n  },\n  \"application/vnd.google-earth.kmz\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"kmz\"]\n  },\n  \"application/vnd.gov.sk.e-form+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.gov.sk.e-form+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.grafeq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gqf\",\"gqs\"]\n  },\n  \"application/vnd.gridmp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.groove-account\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gac\"]\n  },\n  \"application/vnd.groove-help\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ghf\"]\n  },\n  \"application/vnd.groove-identity-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gim\"]\n  },\n  \"application/vnd.groove-injector\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"grv\"]\n  },\n  \"application/vnd.groove-tool-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtm\"]\n  },\n  \"application/vnd.groove-tool-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpl\"]\n  },\n  \"application/vnd.groove-vcard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcg\"]\n  },\n  \"application/vnd.hal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hal+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"hal\"]\n  },\n  \"application/vnd.handheld-entertainment+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"zmm\"]\n  },\n  \"application/vnd.hbci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hbci\"]\n  },\n  \"application/vnd.hc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hcl-bireports\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hdt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.heroku+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hhe.lesson-player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"les\"]\n  },\n  \"application/vnd.hl7cda+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.hl7v2+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.hp-hpgl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpgl\"]\n  },\n  \"application/vnd.hp-hpid\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpid\"]\n  },\n  \"application/vnd.hp-hps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hps\"]\n  },\n  \"application/vnd.hp-jlyt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jlt\"]\n  },\n  \"application/vnd.hp-pcl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcl\"]\n  },\n  \"application/vnd.hp-pclxl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pclxl\"]\n  },\n  \"application/vnd.httphone\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hydrostatix.sof-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfd-hdstx\"]\n  },\n  \"application/vnd.hyper+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyper-item+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyperdrive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hzn-3d-crossword\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.afplinedata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.electronic-media\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.minipay\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpy\"]\n  },\n  \"application/vnd.ibm.modcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n  },\n  \"application/vnd.ibm.rights-management\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"irm\"]\n  },\n  \"application/vnd.ibm.secure-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sc\"]\n  },\n  \"application/vnd.iccprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"icc\",\"icm\"]\n  },\n  \"application/vnd.ieee.1905\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.igloader\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igl\"]\n  },\n  \"application/vnd.imagemeter.folder+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.imagemeter.image+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.immervision-ivp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivp\"]\n  },\n  \"application/vnd.immervision-ivu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivu\"]\n  },\n  \"application/vnd.ims.imsccv1p1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.lis.v2.result+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informedcontrol.rms+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informix-visionary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.innopath.wamp.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.insors.igm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igm\"]\n  },\n  \"application/vnd.intercon.formnet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpw\",\"xpx\"]\n  },\n  \"application/vnd.intergeo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"i2g\"]\n  },\n  \"application/vnd.intertrust.digibox\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intertrust.nncp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intu.qbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qbo\"]\n  },\n  \"application/vnd.intu.qfx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qfx\"]\n  },\n  \"application/vnd.iptc.g2.catalogitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.conceptitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.newsitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.newsmessage+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.packageitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.planningitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ipunplugged.rcprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rcprofile\"]\n  },\n  \"application/vnd.irepository.package+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"irp\"]\n  },\n  \"application/vnd.is-xpr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpr\"]\n  },\n  \"application/vnd.isac.fcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcs\"]\n  },\n  \"application/vnd.iso11783-10+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.jam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jam\"]\n  },\n  \"application/vnd.japannet-directory-service\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-jpnstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-payment-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-setstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.jcp.javame.midlet-rms\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rms\"]\n  },\n  \"application/vnd.jisp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jisp\"]\n  },\n  \"application/vnd.joost.joda-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"joda\"]\n  },\n  \"application/vnd.jsk.isdn-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.kahootz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktz\",\"ktr\"]\n  },\n  \"application/vnd.kde.karbon\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"karbon\"]\n  },\n  \"application/vnd.kde.kchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chrt\"]\n  },\n  \"application/vnd.kde.kformula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kfo\"]\n  },\n  \"application/vnd.kde.kivio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flw\"]\n  },\n  \"application/vnd.kde.kontour\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kon\"]\n  },\n  \"application/vnd.kde.kpresenter\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kpr\",\"kpt\"]\n  },\n  \"application/vnd.kde.kspread\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ksp\"]\n  },\n  \"application/vnd.kde.kword\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kwd\",\"kwt\"]\n  },\n  \"application/vnd.kenameaapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"htke\"]\n  },\n  \"application/vnd.kidspiration\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kia\"]\n  },\n  \"application/vnd.kinar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kne\",\"knp\"]\n  },\n  \"application/vnd.koan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n  },\n  \"application/vnd.kodak-descriptor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sse\"]\n  },\n  \"application/vnd.las\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.las.las+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.las.las+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lasxml\"]\n  },\n  \"application/vnd.laszip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.leap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.liberty-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.llamagraphics.life-balance.desktop\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lbd\"]\n  },\n  \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lbe\"]\n  },\n  \"application/vnd.logipipe.circuit+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.loom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.lotus-1-2-3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"123\"]\n  },\n  \"application/vnd.lotus-approach\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"apr\"]\n  },\n  \"application/vnd.lotus-freelance\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pre\"]\n  },\n  \"application/vnd.lotus-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nsf\"]\n  },\n  \"application/vnd.lotus-organizer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"org\"]\n  },\n  \"application/vnd.lotus-screencam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scm\"]\n  },\n  \"application/vnd.lotus-wordpro\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lwp\"]\n  },\n  \"application/vnd.macports.portpkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"portpkg\"]\n  },\n  \"application/vnd.mapbox-vector-tile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mvt\"]\n  },\n  \"application/vnd.marlin.drm.actiontoken+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.conftoken+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.license+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.mdcf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mason+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.maxar.archive.3tz+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.maxmind.maxmind-db\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mcd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mcd\"]\n  },\n  \"application/vnd.medcalcdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mc1\"]\n  },\n  \"application/vnd.mediastation.cdkey\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdkey\"]\n  },\n  \"application/vnd.meridian-slingshot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mfer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mwf\"]\n  },\n  \"application/vnd.mfmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mfm\"]\n  },\n  \"application/vnd.micro+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.micrografx.flo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flo\"]\n  },\n  \"application/vnd.micrografx.igx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igx\"]\n  },\n  \"application/vnd.microsoft.portable-executable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.microsoft.windows.thumbnail-cache\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.miele+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.mif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mif\"]\n  },\n  \"application/vnd.minisoft-hp3000-save\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mobius.daf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"daf\"]\n  },\n  \"application/vnd.mobius.dis\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dis\"]\n  },\n  \"application/vnd.mobius.mbk\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbk\"]\n  },\n  \"application/vnd.mobius.mqy\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mqy\"]\n  },\n  \"application/vnd.mobius.msl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msl\"]\n  },\n  \"application/vnd.mobius.plc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plc\"]\n  },\n  \"application/vnd.mobius.txf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txf\"]\n  },\n  \"application/vnd.mophun.application\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpn\"]\n  },\n  \"application/vnd.mophun.certificate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpc\"]\n  },\n  \"application/vnd.motorola.flexsuite\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.adsi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.fis\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.gotap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.kmr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.ttc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.wem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.iprm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mozilla.xul+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xul\"]\n  },\n  \"application/vnd.ms-3mfdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-artgalry\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cil\"]\n  },\n  \"application/vnd.ms-asf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-cab-compressed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cab\"]\n  },\n  \"application/vnd.ms-color.iccprofile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-excel\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n  },\n  \"application/vnd.ms-excel.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlam\"]\n  },\n  \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsb\"]\n  },\n  \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsm\"]\n  },\n  \"application/vnd.ms-excel.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltm\"]\n  },\n  \"application/vnd.ms-fontobject\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eot\"]\n  },\n  \"application/vnd.ms-htmlhelp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chm\"]\n  },\n  \"application/vnd.ms-ims\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ims\"]\n  },\n  \"application/vnd.ms-lrm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lrm\"]\n  },\n  \"application/vnd.ms-office.activex+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-officetheme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"thmx\"]\n  },\n  \"application/vnd.ms-opentype\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-outlook\": {\n    \"compressible\": false,\n    \"extensions\": [\"msg\"]\n  },\n  \"application/vnd.ms-package.obfuscated-opentype\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-pki.seccat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cat\"]\n  },\n  \"application/vnd.ms-pki.stl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stl\"]\n  },\n  \"application/vnd.ms-playready.initiator+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-powerpoint\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n  },\n  \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppam\"]\n  },\n  \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pptm\"]\n  },\n  \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldm\"]\n  },\n  \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsm\"]\n  },\n  \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potm\"]\n  },\n  \"application/vnd.ms-printdevicecapabilities+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-printing.printticket+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-printschematicket+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-project\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpp\",\"mpt\"]\n  },\n  \"application/vnd.ms-tnef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.nwprinting.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.printerpairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.wsd.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-word.document.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"docm\"]\n  },\n  \"application/vnd.ms-word.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotm\"]\n  },\n  \"application/vnd.ms-works\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n  },\n  \"application/vnd.ms-wpl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpl\"]\n  },\n  \"application/vnd.ms-xpsdocument\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xps\"]\n  },\n  \"application/vnd.msa-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mseq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseq\"]\n  },\n  \"application/vnd.msign\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator.cif\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.music-niff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.musician\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mus\"]\n  },\n  \"application/vnd.muvee.style\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msty\"]\n  },\n  \"application/vnd.mynfc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"taglet\"]\n  },\n  \"application/vnd.nacamar.ybrid+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ncd.control\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ncd.reference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nearst.inv+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nebumind.line\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nervana\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.netfpx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.neurolanguage.nlu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nlu\"]\n  },\n  \"application/vnd.nimn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.nitro.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.snes.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nitf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ntf\",\"nitf\"]\n  },\n  \"application/vnd.noblenet-directory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnd\"]\n  },\n  \"application/vnd.noblenet-sealer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nns\"]\n  },\n  \"application/vnd.noblenet-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnw\"]\n  },\n  \"application/vnd.nokia.catalogs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.iptv.config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.isds-radio-presets\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.landmarkcollection+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.n-gage.ac+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ac\"]\n  },\n  \"application/vnd.nokia.n-gage.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ngdat\"]\n  },\n  \"application/vnd.nokia.n-gage.symbian.install\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"n-gage\"]\n  },\n  \"application/vnd.nokia.ncd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.radio-preset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpst\"]\n  },\n  \"application/vnd.nokia.radio-presets\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpss\"]\n  },\n  \"application/vnd.novadigm.edm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edm\"]\n  },\n  \"application/vnd.novadigm.edx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edx\"]\n  },\n  \"application/vnd.novadigm.ext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ext\"]\n  },\n  \"application/vnd.ntt-local.content-share\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.file-transfer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.ogw_remote-access\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_remote\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oasis.opendocument.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odc\"]\n  },\n  \"application/vnd.oasis.opendocument.chart-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otc\"]\n  },\n  \"application/vnd.oasis.opendocument.database\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odb\"]\n  },\n  \"application/vnd.oasis.opendocument.formula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odf\"]\n  },\n  \"application/vnd.oasis.opendocument.formula-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odft\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odg\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otg\"]\n  },\n  \"application/vnd.oasis.opendocument.image\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odi\"]\n  },\n  \"application/vnd.oasis.opendocument.image-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oti\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odp\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otp\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ods\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ots\"]\n  },\n  \"application/vnd.oasis.opendocument.text\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odt\"]\n  },\n  \"application/vnd.oasis.opendocument.text-master\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odm\"]\n  },\n  \"application/vnd.oasis.opendocument.text-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ott\"]\n  },\n  \"application/vnd.oasis.opendocument.text-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oth\"]\n  },\n  \"application/vnd.obn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ocf+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oci.image.manifest.v1+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oftn.l10n+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessdownload+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessstreaming+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.cspg-hexbinary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.dae.svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.dae.xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.pae.gem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.spdiscovery+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.spdlist+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.ueprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.userprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.olpc-sugar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xo\"]\n  },\n  \"application/vnd.oma-scws-config\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.drm-trigger+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.imd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.ltkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.notification+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.provisioningtrigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgboot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgdd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.sgdu\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.simple-symbol-container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.sprov+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.stkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-address-book+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-feature-handler+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-pcc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-subs-invite+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-user-prefs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dcdc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dd2+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dd2\"]\n  },\n  \"application/vnd.oma.drm.risd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.group-usage-list+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.lwm2m+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+tlv\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.pal+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.final-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.groups+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.push\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.scidm.messages+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.xcap-directory+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-email+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-file+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-folder+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omaloc-supl-init\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepager\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertat\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openblox.game+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"obgx\"]\n  },\n  \"application/vnd.openblox.game-binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openeye.oeb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openofficeorg.extension\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"oxt\"]\n  },\n  \"application/vnd.openstreetmap.data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"osm\"]\n  },\n  \"application/vnd.opentimestamps.ots\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pptx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xlsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"docx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.core-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.relationships+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oracle.resource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.orange.indata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osa.netdeploy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgeo.mapguide.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgp\"]\n  },\n  \"application/vnd.osgi.bundle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgi.dp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dp\"]\n  },\n  \"application/vnd.osgi.subsystem\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esa\"]\n  },\n  \"application/vnd.otps.ct-kip+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oxli.countgraph\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pagerduty+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.palm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n  },\n  \"application/vnd.panoply\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.paos.xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.patentdive\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.patientecommsdoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pawaafile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"paw\"]\n  },\n  \"application/vnd.pcos\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pg.format\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"str\"]\n  },\n  \"application/vnd.pg.osasli\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ei6\"]\n  },\n  \"application/vnd.piaccess.application-licence\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.picsel\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"efif\"]\n  },\n  \"application/vnd.pmi.widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wg\"]\n  },\n  \"application/vnd.poc.group-advertisement+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.pocketlearn\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plf\"]\n  },\n  \"application/vnd.powerbuilder6\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pbd\"]\n  },\n  \"application/vnd.powerbuilder6-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.preminet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.previewsystems.box\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"box\"]\n  },\n  \"application/vnd.proteus.magazine\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgz\"]\n  },\n  \"application/vnd.psfs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.publishare-delta-tree\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qps\"]\n  },\n  \"application/vnd.pvi.ptid1\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ptid\"]\n  },\n  \"application/vnd.pwg-multiplexed\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pwg-xhtml-print+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.qualcomm.brew-app-res\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quarantainenet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quark.quarkxpress\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n  },\n  \"application/vnd.quobject-quoxdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.moml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-conf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-conn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-dialog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-stream+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-conf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-base+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-group+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-speech+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-transform+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rainstor.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rapid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rar\"]\n  },\n  \"application/vnd.realvnc.bed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bed\"]\n  },\n  \"application/vnd.recordare.musicxml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxl\"]\n  },\n  \"application/vnd.recordare.musicxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"musicxml\"]\n  },\n  \"application/vnd.renlearn.rlprint\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.resilient.logic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.restful+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rig.cryptonote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cryptonote\"]\n  },\n  \"application/vnd.rim.cod\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cod\"]\n  },\n  \"application/vnd.rn-realmedia\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rm\"]\n  },\n  \"application/vnd.rn-realmedia-vbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmvb\"]\n  },\n  \"application/vnd.route66.link66+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"link66\"]\n  },\n  \"application/vnd.rs-274x\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ruckus.download\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.s3sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sailingtracker.track\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"st\"]\n  },\n  \"application/vnd.sar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.cid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.mid2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.scribus\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.3df\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.csf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.doc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.eml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.mht\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.net\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.ppt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.tiff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.xls\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.seemail\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"see\"]\n  },\n  \"application/vnd.seis+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.sema\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sema\"]\n  },\n  \"application/vnd.semd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semd\"]\n  },\n  \"application/vnd.semf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semf\"]\n  },\n  \"application/vnd.shade-save-file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.shana.informed.formdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ifm\"]\n  },\n  \"application/vnd.shana.informed.formtemplate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"itp\"]\n  },\n  \"application/vnd.shana.informed.interchange\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iif\"]\n  },\n  \"application/vnd.shana.informed.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipk\"]\n  },\n  \"application/vnd.shootproof+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.shopkick+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.shp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.shx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sigrok.session\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.simtech-mindmapper\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"twd\",\"twds\"]\n  },\n  \"application/vnd.siren+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.smaf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmf\"]\n  },\n  \"application/vnd.smart.notebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.smart.teacher\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"teacher\"]\n  },\n  \"application/vnd.snesdev-page-table\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.software602.filler.form+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"fo\"]\n  },\n  \"application/vnd.software602.filler.form-xml-zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.solent.sdkm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sdkm\",\"sdkd\"]\n  },\n  \"application/vnd.spotfire.dxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxp\"]\n  },\n  \"application/vnd.spotfire.sfs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfs\"]\n  },\n  \"application/vnd.sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-cod\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-dtf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-ntf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.stardivision.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdc\"]\n  },\n  \"application/vnd.stardivision.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sda\"]\n  },\n  \"application/vnd.stardivision.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdd\"]\n  },\n  \"application/vnd.stardivision.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smf\"]\n  },\n  \"application/vnd.stardivision.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdw\",\"vor\"]\n  },\n  \"application/vnd.stardivision.writer-global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgl\"]\n  },\n  \"application/vnd.stepmania.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"smzip\"]\n  },\n  \"application/vnd.stepmania.stepchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sm\"]\n  },\n  \"application/vnd.street-stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sun.wadl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wadl\"]\n  },\n  \"application/vnd.sun.xml.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxc\"]\n  },\n  \"application/vnd.sun.xml.calc.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stc\"]\n  },\n  \"application/vnd.sun.xml.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxd\"]\n  },\n  \"application/vnd.sun.xml.draw.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"std\"]\n  },\n  \"application/vnd.sun.xml.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxi\"]\n  },\n  \"application/vnd.sun.xml.impress.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sti\"]\n  },\n  \"application/vnd.sun.xml.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxm\"]\n  },\n  \"application/vnd.sun.xml.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxw\"]\n  },\n  \"application/vnd.sun.xml.writer.global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxg\"]\n  },\n  \"application/vnd.sun.xml.writer.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stw\"]\n  },\n  \"application/vnd.sus-calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sus\",\"susp\"]\n  },\n  \"application/vnd.svd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svd\"]\n  },\n  \"application/vnd.swiftview-ics\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sycle+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.syft+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.symbian.install\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sis\",\"sisx\"]\n  },\n  \"application/vnd.syncml+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"xsm\"]\n  },\n  \"application/vnd.syncml.dm+wbxml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"bdm\"]\n  },\n  \"application/vnd.syncml.dm+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"xdm\"]\n  },\n  \"application/vnd.syncml.dm.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"ddf\"]\n  },\n  \"application/vnd.syncml.dmtnds+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmtnds+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.syncml.ds.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tableschema+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tao.intent-module-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tao\"]\n  },\n  \"application/vnd.tcpdump.pcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n  },\n  \"application/vnd.think-cell.ppttc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tmd.mediaflex.api+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tmobile-livetv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tmo\"]\n  },\n  \"application/vnd.tri.onesource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.trid.tpt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpt\"]\n  },\n  \"application/vnd.triscape.mxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxs\"]\n  },\n  \"application/vnd.trueapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tra\"]\n  },\n  \"application/vnd.truedoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ubisoft.webplayer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ufdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ufd\",\"ufdl\"]\n  },\n  \"application/vnd.uiq.theme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"utz\"]\n  },\n  \"application/vnd.umajin\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"umj\"]\n  },\n  \"application/vnd.unity\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"unityweb\"]\n  },\n  \"application/vnd.uoml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uoml\"]\n  },\n  \"application/vnd.uplanet.alert\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.alert-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.signal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uri-map\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.valve.source.material\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcx\"]\n  },\n  \"application/vnd.vd-study\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vectorworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vel+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.verimatrix.vcas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.veritone.aion+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.veryant.thin\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ves.encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vidsoft.vidconference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.visio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n  },\n  \"application/vnd.visionary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vis\"]\n  },\n  \"application/vnd.vividence.scriptfile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vsf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsf\"]\n  },\n  \"application/vnd.wap.sic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.slc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.wbxml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"wbxml\"]\n  },\n  \"application/vnd.wap.wmlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlc\"]\n  },\n  \"application/vnd.wap.wmlscriptc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlsc\"]\n  },\n  \"application/vnd.webturbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wtb\"]\n  },\n  \"application/vnd.wfa.dpp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.p2p\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.wsc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmf.bootstrap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica.package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nbp\"]\n  },\n  \"application/vnd.wordperfect\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpd\"]\n  },\n  \"application/vnd.wqd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wqd\"]\n  },\n  \"application/vnd.wrq-hp3000-labelled\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wt.stf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stf\"]\n  },\n  \"application/vnd.wv.csp+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wv.csp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.wv.ssp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xacml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xara\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xar\"]\n  },\n  \"application/vnd.xfdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdl\"]\n  },\n  \"application/vnd.xfdl.webform\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xmpie.cpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.dpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.plan\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.ppkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.xlim\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.hv-dic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvd\"]\n  },\n  \"application/vnd.yamaha.hv-script\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvs\"]\n  },\n  \"application/vnd.yamaha.hv-voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvp\"]\n  },\n  \"application/vnd.yamaha.openscoreformat\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"osf\"]\n  },\n  \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"osfpvg\"]\n  },\n  \"application/vnd.yamaha.remote-setup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.smaf-audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"saf\"]\n  },\n  \"application/vnd.yamaha.smaf-phrase\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spf\"]\n  },\n  \"application/vnd.yamaha.through-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.tunnel-udpencap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yaoweme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yellowriver-custom-menu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmp\"]\n  },\n  \"application/vnd.youtube.yt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.zul\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"zir\",\"zirz\"]\n  },\n  \"application/vnd.zzazz.deck+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"zaz\"]\n  },\n  \"application/voicexml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vxml\"]\n  },\n  \"application/voucher-cms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vq-rtcpxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/wasm\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wasm\"]\n  },\n  \"application/watcherinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wif\"]\n  },\n  \"application/webpush-options+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/whoispp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/whoispp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wgt\"]\n  },\n  \"application/winhlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hlp\"]\n  },\n  \"application/wita\": {\n    \"source\": \"iana\"\n  },\n  \"application/wordperfect5.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/wsdl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wsdl\"]\n  },\n  \"application/wspolicy+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wspolicy\"]\n  },\n  \"application/x-7z-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"7z\"]\n  },\n  \"application/x-abiword\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"abw\"]\n  },\n  \"application/x-ace-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ace\"]\n  },\n  \"application/x-amf\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-apple-diskimage\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dmg\"]\n  },\n  \"application/x-arj\": {\n    \"compressible\": false,\n    \"extensions\": [\"arj\"]\n  },\n  \"application/x-authorware-bin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n  },\n  \"application/x-authorware-map\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aam\"]\n  },\n  \"application/x-authorware-seg\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aas\"]\n  },\n  \"application/x-bcpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bcpio\"]\n  },\n  \"application/x-bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/x-bittorrent\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"torrent\"]\n  },\n  \"application/x-blorb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"blb\",\"blorb\"]\n  },\n  \"application/x-bzip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz\"]\n  },\n  \"application/x-bzip2\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz2\",\"boz\"]\n  },\n  \"application/x-cbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n  },\n  \"application/x-cdlink\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcd\"]\n  },\n  \"application/x-cfs-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cfs\"]\n  },\n  \"application/x-chat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"chat\"]\n  },\n  \"application/x-chess-pgn\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgn\"]\n  },\n  \"application/x-chrome-extension\": {\n    \"extensions\": [\"crx\"]\n  },\n  \"application/x-cocoa\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"cco\"]\n  },\n  \"application/x-compress\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-conference\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nsc\"]\n  },\n  \"application/x-cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpio\"]\n  },\n  \"application/x-csh\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csh\"]\n  },\n  \"application/x-deb\": {\n    \"compressible\": false\n  },\n  \"application/x-debian-package\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"deb\",\"udeb\"]\n  },\n  \"application/x-dgc-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dgc\"]\n  },\n  \"application/x-director\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n  },\n  \"application/x-doom\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wad\"]\n  },\n  \"application/x-dtbncx+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ncx\"]\n  },\n  \"application/x-dtbook+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"dtb\"]\n  },\n  \"application/x-dtbresource+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"res\"]\n  },\n  \"application/x-dvi\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"dvi\"]\n  },\n  \"application/x-envoy\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"evy\"]\n  },\n  \"application/x-eva\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"eva\"]\n  },\n  \"application/x-font-bdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bdf\"]\n  },\n  \"application/x-font-dos\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-framemaker\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-ghostscript\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gsf\"]\n  },\n  \"application/x-font-libgrx\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-linux-psf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"psf\"]\n  },\n  \"application/x-font-pcf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcf\"]\n  },\n  \"application/x-font-snf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"snf\"]\n  },\n  \"application/x-font-speedo\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-sunos-news\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-type1\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n  },\n  \"application/x-font-vfont\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-freearc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"arc\"]\n  },\n  \"application/x-futuresplash\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"spl\"]\n  },\n  \"application/x-gca-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gca\"]\n  },\n  \"application/x-glulx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ulx\"]\n  },\n  \"application/x-gnumeric\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gnumeric\"]\n  },\n  \"application/x-gramps-xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gramps\"]\n  },\n  \"application/x-gtar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gtar\"]\n  },\n  \"application/x-gzip\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-hdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hdf\"]\n  },\n  \"application/x-httpd-php\": {\n    \"compressible\": true,\n    \"extensions\": [\"php\"]\n  },\n  \"application/x-install-instructions\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"install\"]\n  },\n  \"application/x-iso9660-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"iso\"]\n  },\n  \"application/x-iwork-keynote-sffkey\": {\n    \"extensions\": [\"key\"]\n  },\n  \"application/x-iwork-numbers-sffnumbers\": {\n    \"extensions\": [\"numbers\"]\n  },\n  \"application/x-iwork-pages-sffpages\": {\n    \"extensions\": [\"pages\"]\n  },\n  \"application/x-java-archive-diff\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jardiff\"]\n  },\n  \"application/x-java-jnlp-file\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jnlp\"]\n  },\n  \"application/x-javascript\": {\n    \"compressible\": true\n  },\n  \"application/x-keepass2\": {\n    \"extensions\": [\"kdbx\"]\n  },\n  \"application/x-latex\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"latex\"]\n  },\n  \"application/x-lua-bytecode\": {\n    \"extensions\": [\"luac\"]\n  },\n  \"application/x-lzh-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lzh\",\"lha\"]\n  },\n  \"application/x-makeself\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"run\"]\n  },\n  \"application/x-mie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mie\"]\n  },\n  \"application/x-mobipocket-ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prc\",\"mobi\"]\n  },\n  \"application/x-mpegurl\": {\n    \"compressible\": false\n  },\n  \"application/x-ms-application\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"application\"]\n  },\n  \"application/x-ms-shortcut\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lnk\"]\n  },\n  \"application/x-ms-wmd\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmd\"]\n  },\n  \"application/x-ms-wmz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmz\"]\n  },\n  \"application/x-ms-xbap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbap\"]\n  },\n  \"application/x-msaccess\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mdb\"]\n  },\n  \"application/x-msbinder\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obd\"]\n  },\n  \"application/x-mscardfile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"crd\"]\n  },\n  \"application/x-msclip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"clp\"]\n  },\n  \"application/x-msdos-program\": {\n    \"extensions\": [\"exe\"]\n  },\n  \"application/x-msdownload\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n  },\n  \"application/x-msmediaview\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n  },\n  \"application/x-msmetafile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n  },\n  \"application/x-msmoney\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mny\"]\n  },\n  \"application/x-mspublisher\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pub\"]\n  },\n  \"application/x-msschedule\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scd\"]\n  },\n  \"application/x-msterminal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"trm\"]\n  },\n  \"application/x-mswrite\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wri\"]\n  },\n  \"application/x-netcdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nc\",\"cdf\"]\n  },\n  \"application/x-ns-proxy-autoconfig\": {\n    \"compressible\": true,\n    \"extensions\": [\"pac\"]\n  },\n  \"application/x-nzb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nzb\"]\n  },\n  \"application/x-perl\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"pl\",\"pm\"]\n  },\n  \"application/x-pilot\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"prc\",\"pdb\"]\n  },\n  \"application/x-pkcs12\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"p12\",\"pfx\"]\n  },\n  \"application/x-pkcs7-certificates\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7b\",\"spc\"]\n  },\n  \"application/x-pkcs7-certreqresp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7r\"]\n  },\n  \"application/x-pki-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-rar-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"rar\"]\n  },\n  \"application/x-redhat-package-manager\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"rpm\"]\n  },\n  \"application/x-research-info-systems\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ris\"]\n  },\n  \"application/x-sea\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"sea\"]\n  },\n  \"application/x-sh\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"sh\"]\n  },\n  \"application/x-shar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"shar\"]\n  },\n  \"application/x-shockwave-flash\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"swf\"]\n  },\n  \"application/x-silverlight-app\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xap\"]\n  },\n  \"application/x-sql\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sql\"]\n  },\n  \"application/x-stuffit\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"sit\"]\n  },\n  \"application/x-stuffitx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sitx\"]\n  },\n  \"application/x-subrip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"srt\"]\n  },\n  \"application/x-sv4cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4cpio\"]\n  },\n  \"application/x-sv4crc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4crc\"]\n  },\n  \"application/x-t3vm-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"t3\"]\n  },\n  \"application/x-tads\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gam\"]\n  },\n  \"application/x-tar\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"tar\"]\n  },\n  \"application/x-tcl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tcl\",\"tk\"]\n  },\n  \"application/x-tex\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tex\"]\n  },\n  \"application/x-tex-tfm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tfm\"]\n  },\n  \"application/x-texinfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"texinfo\",\"texi\"]\n  },\n  \"application/x-tgif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obj\"]\n  },\n  \"application/x-ustar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ustar\"]\n  },\n  \"application/x-virtualbox-hdd\": {\n    \"compressible\": true,\n    \"extensions\": [\"hdd\"]\n  },\n  \"application/x-virtualbox-ova\": {\n    \"compressible\": true,\n    \"extensions\": [\"ova\"]\n  },\n  \"application/x-virtualbox-ovf\": {\n    \"compressible\": true,\n    \"extensions\": [\"ovf\"]\n  },\n  \"application/x-virtualbox-vbox\": {\n    \"compressible\": true,\n    \"extensions\": [\"vbox\"]\n  },\n  \"application/x-virtualbox-vbox-extpack\": {\n    \"compressible\": false,\n    \"extensions\": [\"vbox-extpack\"]\n  },\n  \"application/x-virtualbox-vdi\": {\n    \"compressible\": true,\n    \"extensions\": [\"vdi\"]\n  },\n  \"application/x-virtualbox-vhd\": {\n    \"compressible\": true,\n    \"extensions\": [\"vhd\"]\n  },\n  \"application/x-virtualbox-vmdk\": {\n    \"compressible\": true,\n    \"extensions\": [\"vmdk\"]\n  },\n  \"application/x-wais-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"src\"]\n  },\n  \"application/x-web-app-manifest+json\": {\n    \"compressible\": true,\n    \"extensions\": [\"webapp\"]\n  },\n  \"application/x-www-form-urlencoded\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/x-x509-ca-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"der\",\"crt\",\"pem\"]\n  },\n  \"application/x-x509-ca-ra-cert\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-x509-next-ca-cert\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-xfig\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fig\"]\n  },\n  \"application/x-xliff+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/x-xpinstall\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"xpi\"]\n  },\n  \"application/x-xz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xz\"]\n  },\n  \"application/x-zmachine\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n  },\n  \"application/x400-bp\": {\n    \"source\": \"iana\"\n  },\n  \"application/xacml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xaml+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xaml\"]\n  },\n  \"application/xcap-att+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xav\"]\n  },\n  \"application/xcap-caps+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xca\"]\n  },\n  \"application/xcap-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdf\"]\n  },\n  \"application/xcap-el+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xel\"]\n  },\n  \"application/xcap-error+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xcap-ns+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xns\"]\n  },\n  \"application/xcon-conference-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xcon-conference-info-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xenc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xenc\"]\n  },\n  \"application/xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xhtml\",\"xht\"]\n  },\n  \"application/xhtml-voice+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/xliff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n  },\n  \"application/xml-dtd\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dtd\"]\n  },\n  \"application/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"application/xml-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xmpp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xop\"]\n  },\n  \"application/xproc+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xpl\"]\n  },\n  \"application/xslt+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xsl\",\"xslt\"]\n  },\n  \"application/xspf+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xspf\"]\n  },\n  \"application/xv+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n  },\n  \"application/yang\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"yang\"]\n  },\n  \"application/yang-data+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yin+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"yin\"]\n  },\n  \"application/zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"zip\"]\n  },\n  \"application/zlib\": {\n    \"source\": \"iana\"\n  },\n  \"application/zstd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/3gpp\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"3gpp\"]\n  },\n  \"audio/3gpp2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aac\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/adpcm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"adp\"]\n  },\n  \"audio/amr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"amr\"]\n  },\n  \"audio/amr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/amr-wb+\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aptx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/asc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-advanced-lossless\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/basic\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"au\",\"snd\"]\n  },\n  \"audio/bv16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/bv32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/clearmode\": {\n    \"source\": \"iana\"\n  },\n  \"audio/cn\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dat12\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dls\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es201108\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202050\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202211\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202212\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dvi4\": {\n    \"source\": \"iana\"\n  },\n  \"audio/eac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evs\": {\n    \"source\": \"iana\"\n  },\n  \"audio/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g711-0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g719\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g722\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7221\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g723\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-24\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-40\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g728\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7291\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729d\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729e\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-efr\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-hr-08\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ilbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ip-mr_v2.5\": {\n    \"source\": \"iana\"\n  },\n  \"audio/isac\": {\n    \"source\": \"apache\"\n  },\n  \"audio/l16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l20\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l24\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/l8\": {\n    \"source\": \"iana\"\n  },\n  \"audio/lpc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp1200\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp2400\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp600\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mhas\": {\n    \"source\": \"iana\"\n  },\n  \"audio/midi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n  },\n  \"audio/mobile-xmf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxmf\"]\n  },\n  \"audio/mp3\": {\n    \"compressible\": false,\n    \"extensions\": [\"mp3\"]\n  },\n  \"audio/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"m4a\",\"mp4a\"]\n  },\n  \"audio/mp4a-latm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa-robust\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n  },\n  \"audio/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"audio/musepack\": {\n    \"source\": \"apache\"\n  },\n  \"audio/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"oga\",\"ogg\",\"spx\",\"opus\"]\n  },\n  \"audio/opus\": {\n    \"source\": \"iana\"\n  },\n  \"audio/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/prs.sid\": {\n    \"source\": \"iana\"\n  },\n  \"audio/qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/red\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/s3m\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s3m\"]\n  },\n  \"audio/scip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/silk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sil\"]\n  },\n  \"audio/smv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sofa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/speex\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t140c\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t38\": {\n    \"source\": \"iana\"\n  },\n  \"audio/telephone-event\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tetra_acelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tetra_acelp_bb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tone\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tsvcis\": {\n    \"source\": \"iana\"\n  },\n  \"audio/uemclip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/usac\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vdvi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vmr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.3gpp.iufp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.4sb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.audiokoz\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.celp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cisco.nse\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cmles.radio-events\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.anp1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.inf1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dece.audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uva\",\"uvva\"]\n  },\n  \"audio/vnd.digital-winds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"eol\"]\n  },\n  \"audio/vnd.dlna.adts\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mlp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mps\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2z\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pulse.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dra\"]\n  },\n  \"audio/vnd.dts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dts\"]\n  },\n  \"audio/vnd.dts.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dtshd\"]\n  },\n  \"audio/vnd.dts.uhd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dvb.file\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.everad.plj\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.hns.audio\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.lucent.voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lvp\"]\n  },\n  \"audio/vnd.ms-playready.media.pya\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pya\"]\n  },\n  \"audio/vnd.nokia.mobile-xmf\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nortel.vbk\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nuera.ecelp4800\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp4800\"]\n  },\n  \"audio/vnd.nuera.ecelp7470\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp7470\"]\n  },\n  \"audio/vnd.nuera.ecelp9600\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp9600\"]\n  },\n  \"audio/vnd.octel.sbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.presonus.multitrack\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rhetorex.32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rip\"]\n  },\n  \"audio/vnd.rn-realaudio\": {\n    \"compressible\": false\n  },\n  \"audio/vnd.sealedmedia.softseal.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.vmx.cvsd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.wave\": {\n    \"compressible\": false\n  },\n  \"audio/vorbis\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/vorbis-config\": {\n    \"source\": \"iana\"\n  },\n  \"audio/wav\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/wave\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"weba\"]\n  },\n  \"audio/x-aac\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"aac\"]\n  },\n  \"audio/x-aiff\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n  },\n  \"audio/x-caf\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"caf\"]\n  },\n  \"audio/x-flac\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"flac\"]\n  },\n  \"audio/x-m4a\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"m4a\"]\n  },\n  \"audio/x-matroska\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mka\"]\n  },\n  \"audio/x-mpegurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m3u\"]\n  },\n  \"audio/x-ms-wax\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wax\"]\n  },\n  \"audio/x-ms-wma\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wma\"]\n  },\n  \"audio/x-pn-realaudio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ram\",\"ra\"]\n  },\n  \"audio/x-pn-realaudio-plugin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmp\"]\n  },\n  \"audio/x-realaudio\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"ra\"]\n  },\n  \"audio/x-tta\": {\n    \"source\": \"apache\"\n  },\n  \"audio/x-wav\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/xm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xm\"]\n  },\n  \"chemical/x-cdx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cdx\"]\n  },\n  \"chemical/x-cif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cif\"]\n  },\n  \"chemical/x-cmdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmdf\"]\n  },\n  \"chemical/x-cml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cml\"]\n  },\n  \"chemical/x-csml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csml\"]\n  },\n  \"chemical/x-pdb\": {\n    \"source\": \"apache\"\n  },\n  \"chemical/x-xyz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xyz\"]\n  },\n  \"font/collection\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ttc\"]\n  },\n  \"font/otf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"otf\"]\n  },\n  \"font/sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"font/ttf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ttf\"]\n  },\n  \"font/woff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff\"]\n  },\n  \"font/woff2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff2\"]\n  },\n  \"image/aces\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exr\"]\n  },\n  \"image/apng\": {\n    \"compressible\": false,\n    \"extensions\": [\"apng\"]\n  },\n  \"image/avci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"avci\"]\n  },\n  \"image/avcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"avcs\"]\n  },\n  \"image/avif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"avif\"]\n  },\n  \"image/bmp\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/cgm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cgm\"]\n  },\n  \"image/dicom-rle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"drle\"]\n  },\n  \"image/emf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"emf\"]\n  },\n  \"image/fits\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fits\"]\n  },\n  \"image/g3fax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3\"]\n  },\n  \"image/gif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gif\"]\n  },\n  \"image/heic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heic\"]\n  },\n  \"image/heic-sequence\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heics\"]\n  },\n  \"image/heif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heif\"]\n  },\n  \"image/heif-sequence\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heifs\"]\n  },\n  \"image/hej2k\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hej2\"]\n  },\n  \"image/hsj2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hsj2\"]\n  },\n  \"image/ief\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ief\"]\n  },\n  \"image/jls\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jls\"]\n  },\n  \"image/jp2\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jp2\",\"jpg2\"]\n  },\n  \"image/jpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n  },\n  \"image/jph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jph\"]\n  },\n  \"image/jphc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jhc\"]\n  },\n  \"image/jpm\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpm\"]\n  },\n  \"image/jpx\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpx\",\"jpf\"]\n  },\n  \"image/jxr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxr\"]\n  },\n  \"image/jxra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxra\"]\n  },\n  \"image/jxrs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxrs\"]\n  },\n  \"image/jxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxs\"]\n  },\n  \"image/jxsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxsc\"]\n  },\n  \"image/jxsi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxsi\"]\n  },\n  \"image/jxss\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxss\"]\n  },\n  \"image/ktx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx\"]\n  },\n  \"image/ktx2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx2\"]\n  },\n  \"image/naplps\": {\n    \"source\": \"iana\"\n  },\n  \"image/pjpeg\": {\n    \"compressible\": false\n  },\n  \"image/png\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"png\"]\n  },\n  \"image/prs.btif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"btif\"]\n  },\n  \"image/prs.pti\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pti\"]\n  },\n  \"image/pwg-raster\": {\n    \"source\": \"iana\"\n  },\n  \"image/sgi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgi\"]\n  },\n  \"image/svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"svg\",\"svgz\"]\n  },\n  \"image/t38\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t38\"]\n  },\n  \"image/tiff\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"tif\",\"tiff\"]\n  },\n  \"image/tiff-fx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tfx\"]\n  },\n  \"image/vnd.adobe.photoshop\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"psd\"]\n  },\n  \"image/vnd.airzip.accelerator.azv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azv\"]\n  },\n  \"image/vnd.cns.inf2\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.dece.graphic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n  },\n  \"image/vnd.djvu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"djvu\",\"djv\"]\n  },\n  \"image/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"image/vnd.dwg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwg\"]\n  },\n  \"image/vnd.dxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxf\"]\n  },\n  \"image/vnd.fastbidsheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fbs\"]\n  },\n  \"image/vnd.fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fpx\"]\n  },\n  \"image/vnd.fst\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fst\"]\n  },\n  \"image/vnd.fujixerox.edmics-mmr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmr\"]\n  },\n  \"image/vnd.fujixerox.edmics-rlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rlc\"]\n  },\n  \"image/vnd.globalgraphics.pgb\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.microsoft.icon\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/vnd.mix\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.mozilla.apng\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.ms-dds\": {\n    \"compressible\": true,\n    \"extensions\": [\"dds\"]\n  },\n  \"image/vnd.ms-modi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mdi\"]\n  },\n  \"image/vnd.ms-photo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wdp\"]\n  },\n  \"image/vnd.net-fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"npx\"]\n  },\n  \"image/vnd.pco.b16\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"b16\"]\n  },\n  \"image/vnd.radiance\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealed.png\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.gif\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.jpg\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.svf\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.tencent.tap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tap\"]\n  },\n  \"image/vnd.valve.source.texture\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtf\"]\n  },\n  \"image/vnd.wap.wbmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wbmp\"]\n  },\n  \"image/vnd.xiff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xif\"]\n  },\n  \"image/vnd.zbrush.pcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/webp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"webp\"]\n  },\n  \"image/wmf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmf\"]\n  },\n  \"image/x-3ds\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"3ds\"]\n  },\n  \"image/x-cmu-raster\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ras\"]\n  },\n  \"image/x-cmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmx\"]\n  },\n  \"image/x-freehand\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n  },\n  \"image/x-icon\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/x-jng\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jng\"]\n  },\n  \"image/x-mrsid-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sid\"]\n  },\n  \"image/x-ms-bmp\": {\n    \"source\": \"nginx\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/x-pcx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/x-pict\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pic\",\"pct\"]\n  },\n  \"image/x-portable-anymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pnm\"]\n  },\n  \"image/x-portable-bitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pbm\"]\n  },\n  \"image/x-portable-graymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgm\"]\n  },\n  \"image/x-portable-pixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ppm\"]\n  },\n  \"image/x-rgb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rgb\"]\n  },\n  \"image/x-tga\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tga\"]\n  },\n  \"image/x-xbitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbm\"]\n  },\n  \"image/x-xcf\": {\n    \"compressible\": false\n  },\n  \"image/x-xpixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xpm\"]\n  },\n  \"image/x-xwindowdump\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xwd\"]\n  },\n  \"message/cpim\": {\n    \"source\": \"iana\"\n  },\n  \"message/delivery-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\n      \"disposition-notification\"\n    ]\n  },\n  \"message/external-body\": {\n    \"source\": \"iana\"\n  },\n  \"message/feedback-report\": {\n    \"source\": \"iana\"\n  },\n  \"message/global\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8msg\"]\n  },\n  \"message/global-delivery-status\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8dsn\"]\n  },\n  \"message/global-disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8mdn\"]\n  },\n  \"message/global-headers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8hdr\"]\n  },\n  \"message/http\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/imdn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"message/news\": {\n    \"source\": \"iana\"\n  },\n  \"message/partial\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/rfc822\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eml\",\"mime\"]\n  },\n  \"message/s-http\": {\n    \"source\": \"iana\"\n  },\n  \"message/sip\": {\n    \"source\": \"iana\"\n  },\n  \"message/sipfrag\": {\n    \"source\": \"iana\"\n  },\n  \"message/tracking-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.si.simp\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.wfa.wsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wsc\"]\n  },\n  \"model/3mf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3mf\"]\n  },\n  \"model/e57\": {\n    \"source\": \"iana\"\n  },\n  \"model/gltf+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gltf\"]\n  },\n  \"model/gltf-binary\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"glb\"]\n  },\n  \"model/iges\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"igs\",\"iges\"]\n  },\n  \"model/mesh\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n  },\n  \"model/mtl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mtl\"]\n  },\n  \"model/obj\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"obj\"]\n  },\n  \"model/step\": {\n    \"source\": \"iana\"\n  },\n  \"model/step+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"stpx\"]\n  },\n  \"model/step+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"stpz\"]\n  },\n  \"model/step-xml+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"stpxz\"]\n  },\n  \"model/stl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stl\"]\n  },\n  \"model/vnd.collada+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dae\"]\n  },\n  \"model/vnd.dwf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwf\"]\n  },\n  \"model/vnd.flatland.3dml\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gdl\"]\n  },\n  \"model/vnd.gs-gdl\": {\n    \"source\": \"apache\"\n  },\n  \"model/vnd.gs.gdl\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gtw\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtw\"]\n  },\n  \"model/vnd.moml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"model/vnd.mts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mts\"]\n  },\n  \"model/vnd.opengex\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ogex\"]\n  },\n  \"model/vnd.parasolid.transmit.binary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x_b\"]\n  },\n  \"model/vnd.parasolid.transmit.text\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x_t\"]\n  },\n  \"model/vnd.pytha.pyox\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.rosette.annotated-data-model\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.sap.vds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vds\"]\n  },\n  \"model/vnd.usdz+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"usdz\"]\n  },\n  \"model/vnd.valve.source.compiled-map\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bsp\"]\n  },\n  \"model/vnd.vtu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtu\"]\n  },\n  \"model/vrml\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"wrl\",\"vrml\"]\n  },\n  \"model/x3d+binary\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3db\",\"x3dbz\"]\n  },\n  \"model/x3d+fastinfoset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x3db\"]\n  },\n  \"model/x3d+vrml\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3dv\",\"x3dvz\"]\n  },\n  \"model/x3d+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"x3d\",\"x3dz\"]\n  },\n  \"model/x3d-vrml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x3dv\"]\n  },\n  \"multipart/alternative\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/appledouble\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/byteranges\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/digest\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/form-data\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/header-set\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/mixed\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/multilingual\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/parallel\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/related\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/report\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/signed\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/vnd.bint.med-plus\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/voice-message\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/x-mixed-replace\": {\n    \"source\": \"iana\"\n  },\n  \"text/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/cache-manifest\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"appcache\",\"manifest\"]\n  },\n  \"text/calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ics\",\"ifb\"]\n  },\n  \"text/calender\": {\n    \"compressible\": true\n  },\n  \"text/cmd\": {\n    \"compressible\": true\n  },\n  \"text/coffeescript\": {\n    \"extensions\": [\"coffee\",\"litcoffee\"]\n  },\n  \"text/cql\": {\n    \"source\": \"iana\"\n  },\n  \"text/cql-expression\": {\n    \"source\": \"iana\"\n  },\n  \"text/cql-identifier\": {\n    \"source\": \"iana\"\n  },\n  \"text/css\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"css\"]\n  },\n  \"text/csv\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csv\"]\n  },\n  \"text/csv-schema\": {\n    \"source\": \"iana\"\n  },\n  \"text/directory\": {\n    \"source\": \"iana\"\n  },\n  \"text/dns\": {\n    \"source\": \"iana\"\n  },\n  \"text/ecmascript\": {\n    \"source\": \"iana\"\n  },\n  \"text/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"text/enriched\": {\n    \"source\": \"iana\"\n  },\n  \"text/fhirpath\": {\n    \"source\": \"iana\"\n  },\n  \"text/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"text/gff3\": {\n    \"source\": \"iana\"\n  },\n  \"text/grammar-ref-list\": {\n    \"source\": \"iana\"\n  },\n  \"text/html\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"html\",\"htm\",\"shtml\"]\n  },\n  \"text/jade\": {\n    \"extensions\": [\"jade\"]\n  },\n  \"text/javascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"text/jcr-cnd\": {\n    \"source\": \"iana\"\n  },\n  \"text/jsx\": {\n    \"compressible\": true,\n    \"extensions\": [\"jsx\"]\n  },\n  \"text/less\": {\n    \"compressible\": true,\n    \"extensions\": [\"less\"]\n  },\n  \"text/markdown\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"markdown\",\"md\"]\n  },\n  \"text/mathml\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"mml\"]\n  },\n  \"text/mdx\": {\n    \"compressible\": true,\n    \"extensions\": [\"mdx\"]\n  },\n  \"text/mizar\": {\n    \"source\": \"iana\"\n  },\n  \"text/n3\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"n3\"]\n  },\n  \"text/parameters\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/plain\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n  },\n  \"text/provenance-notation\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/prs.fallenstein.rst\": {\n    \"source\": \"iana\"\n  },\n  \"text/prs.lines.tag\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dsc\"]\n  },\n  \"text/prs.prop.logic\": {\n    \"source\": \"iana\"\n  },\n  \"text/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/red\": {\n    \"source\": \"iana\"\n  },\n  \"text/rfc822-headers\": {\n    \"source\": \"iana\"\n  },\n  \"text/richtext\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtx\"]\n  },\n  \"text/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"text/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"text/sgml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sgml\",\"sgm\"]\n  },\n  \"text/shaclc\": {\n    \"source\": \"iana\"\n  },\n  \"text/shex\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"shex\"]\n  },\n  \"text/slim\": {\n    \"extensions\": [\"slim\",\"slm\"]\n  },\n  \"text/spdx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spdx\"]\n  },\n  \"text/strings\": {\n    \"source\": \"iana\"\n  },\n  \"text/stylus\": {\n    \"extensions\": [\"stylus\",\"styl\"]\n  },\n  \"text/t140\": {\n    \"source\": \"iana\"\n  },\n  \"text/tab-separated-values\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tsv\"]\n  },\n  \"text/troff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n  },\n  \"text/turtle\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"ttl\"]\n  },\n  \"text/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/uri-list\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uri\",\"uris\",\"urls\"]\n  },\n  \"text/vcard\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vcard\"]\n  },\n  \"text/vnd.a\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.abc\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ascii-art\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.curl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"curl\"]\n  },\n  \"text/vnd.curl.dcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dcurl\"]\n  },\n  \"text/vnd.curl.mcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mcurl\"]\n  },\n  \"text/vnd.curl.scurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scurl\"]\n  },\n  \"text/vnd.debian.copyright\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.dmclientscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"text/vnd.esmertec.theme-descriptor\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.familysearch.gedcom\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ged\"]\n  },\n  \"text/vnd.ficlab.flt\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.fly\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fly\"]\n  },\n  \"text/vnd.fmi.flexstor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flx\"]\n  },\n  \"text/vnd.gml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.graphviz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gv\"]\n  },\n  \"text/vnd.hans\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.hgl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.in3d.3dml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3dml\"]\n  },\n  \"text/vnd.in3d.spot\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spot\"]\n  },\n  \"text/vnd.iptc.newsml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.iptc.nitf\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.latex-z\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.motorola.reflex\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ms-mediapackage\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.net2phone.commcenter.command\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.radisys.msml-basic-layout\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.senx.warpscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.si.uricatalogue\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.sosi\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.sun.j2me.app-descriptor\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"jad\"]\n  },\n  \"text/vnd.trolltech.linguist\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.wap.si\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.sl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.wml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wml\"]\n  },\n  \"text/vnd.wap.wmlscript\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmls\"]\n  },\n  \"text/vtt\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"vtt\"]\n  },\n  \"text/x-asm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s\",\"asm\"]\n  },\n  \"text/x-c\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n  },\n  \"text/x-component\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"htc\"]\n  },\n  \"text/x-fortran\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n  },\n  \"text/x-gwt-rpc\": {\n    \"compressible\": true\n  },\n  \"text/x-handlebars-template\": {\n    \"extensions\": [\"hbs\"]\n  },\n  \"text/x-java-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"java\"]\n  },\n  \"text/x-jquery-tmpl\": {\n    \"compressible\": true\n  },\n  \"text/x-lua\": {\n    \"extensions\": [\"lua\"]\n  },\n  \"text/x-markdown\": {\n    \"compressible\": true,\n    \"extensions\": [\"mkd\"]\n  },\n  \"text/x-nfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nfo\"]\n  },\n  \"text/x-opml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"opml\"]\n  },\n  \"text/x-org\": {\n    \"compressible\": true,\n    \"extensions\": [\"org\"]\n  },\n  \"text/x-pascal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p\",\"pas\"]\n  },\n  \"text/x-processing\": {\n    \"compressible\": true,\n    \"extensions\": [\"pde\"]\n  },\n  \"text/x-sass\": {\n    \"extensions\": [\"sass\"]\n  },\n  \"text/x-scss\": {\n    \"extensions\": [\"scss\"]\n  },\n  \"text/x-setext\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"etx\"]\n  },\n  \"text/x-sfv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sfv\"]\n  },\n  \"text/x-suse-ymp\": {\n    \"compressible\": true,\n    \"extensions\": [\"ymp\"]\n  },\n  \"text/x-uuencode\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"uu\"]\n  },\n  \"text/x-vcalendar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcs\"]\n  },\n  \"text/x-vcard\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcf\"]\n  },\n  \"text/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\"]\n  },\n  \"text/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"text/yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"yaml\",\"yml\"]\n  },\n  \"video/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3gp\",\"3gpp\"]\n  },\n  \"video/3gpp-tt\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3g2\"]\n  },\n  \"video/av1\": {\n    \"source\": \"iana\"\n  },\n  \"video/bmpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/bt656\": {\n    \"source\": \"iana\"\n  },\n  \"video/celb\": {\n    \"source\": \"iana\"\n  },\n  \"video/dv\": {\n    \"source\": \"iana\"\n  },\n  \"video/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"video/ffv1\": {\n    \"source\": \"iana\"\n  },\n  \"video/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/h261\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h261\"]\n  },\n  \"video/h263\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h263\"]\n  },\n  \"video/h263-1998\": {\n    \"source\": \"iana\"\n  },\n  \"video/h263-2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h264\"]\n  },\n  \"video/h264-rcdo\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264-svc\": {\n    \"source\": \"iana\"\n  },\n  \"video/h265\": {\n    \"source\": \"iana\"\n  },\n  \"video/iso.segment\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m4s\"]\n  },\n  \"video/jpeg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jpgv\"]\n  },\n  \"video/jpeg2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/jpm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"jpm\",\"jpgm\"]\n  },\n  \"video/jxsv\": {\n    \"source\": \"iana\"\n  },\n  \"video/mj2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mj2\",\"mjp2\"]\n  },\n  \"video/mp1s\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2p\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2t\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ts\"]\n  },\n  \"video/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n  },\n  \"video/mp4v-es\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n  },\n  \"video/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpv\": {\n    \"source\": \"iana\"\n  },\n  \"video/nv\": {\n    \"source\": \"iana\"\n  },\n  \"video/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogv\"]\n  },\n  \"video/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/pointer\": {\n    \"source\": \"iana\"\n  },\n  \"video/quicktime\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"qt\",\"mov\"]\n  },\n  \"video/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/raw\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"video/scip\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte291\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte292m\": {\n    \"source\": \"iana\"\n  },\n  \"video/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.cctv\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvh\",\"uvvh\"]\n  },\n  \"video/vnd.dece.mobile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvm\",\"uvvm\"]\n  },\n  \"video/vnd.dece.mp4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.pd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvp\",\"uvvp\"]\n  },\n  \"video/vnd.dece.sd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvs\",\"uvvs\"]\n  },\n  \"video/vnd.dece.video\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvv\",\"uvvv\"]\n  },\n  \"video/vnd.directv.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.directv.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dlna.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dvb.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dvb\"]\n  },\n  \"video/vnd.fvt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fvt\"]\n  },\n  \"video/vnd.hns.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsavc\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsmpeg2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.videop\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxu\",\"m4u\"]\n  },\n  \"video/vnd.ms-playready.media.pyv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pyv\"]\n  },\n  \"video/vnd.nokia.interleaved-multimedia\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.mp4vr\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.videovoip\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.objectvideo\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.bink\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.smacker\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.swf\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealedmedia.softseal.mov\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.uvvu.mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvu\",\"uvvu\"]\n  },\n  \"video/vnd.vivo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"viv\"]\n  },\n  \"video/vnd.youtube.yt\": {\n    \"source\": \"iana\"\n  },\n  \"video/vp8\": {\n    \"source\": \"iana\"\n  },\n  \"video/vp9\": {\n    \"source\": \"iana\"\n  },\n  \"video/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"webm\"]\n  },\n  \"video/x-f4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f4v\"]\n  },\n  \"video/x-fli\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fli\"]\n  },\n  \"video/x-flv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"flv\"]\n  },\n  \"video/x-m4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m4v\"]\n  },\n  \"video/x-matroska\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n  },\n  \"video/x-mng\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mng\"]\n  },\n  \"video/x-ms-asf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"asf\",\"asx\"]\n  },\n  \"video/x-ms-vob\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vob\"]\n  },\n  \"video/x-ms-wm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wm\"]\n  },\n  \"video/x-ms-wmv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"wmv\"]\n  },\n  \"video/x-ms-wmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmx\"]\n  },\n  \"video/x-ms-wvx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wvx\"]\n  },\n  \"video/x-msvideo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"avi\"]\n  },\n  \"video/x-sgi-movie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"movie\"]\n  },\n  \"video/x-smv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smv\"]\n  },\n  \"x-conference/x-cooltalk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ice\"]\n  },\n  \"x-shader/x-fragment\": {\n    \"compressible\": true\n  },\n  \"x-shader/x-vertex\": {\n    \"compressible\": true\n  }\n}\n", "/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n", "/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n  var mime = match && db[match[1].toLowerCase()]\n\n  if (mime && mime.charset) {\n    return mime.charset\n  }\n\n  // default text/* to utf-8\n  if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n    return 'UTF-8'\n  }\n\n  return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n  // TODO: should this even be in this module?\n  if (!str || typeof str !== 'string') {\n    return false\n  }\n\n  var mime = str.indexOf('/') === -1\n    ? exports.lookup(str)\n    : str\n\n  if (!mime) {\n    return false\n  }\n\n  // TODO: use content-type or other module\n  if (mime.indexOf('charset') === -1) {\n    var charset = exports.charset(mime)\n    if (charset) mime += '; charset=' + charset.toLowerCase()\n  }\n\n  return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n  // get extensions\n  var exts = match && exports.extensions[match[1].toLowerCase()]\n\n  if (!exts || !exts.length) {\n    return false\n  }\n\n  return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n  if (!path || typeof path !== 'string') {\n    return false\n  }\n\n  // get the extension (\"ext\" or \".ext\" or full path)\n  var extension = extname('x.' + path)\n    .toLowerCase()\n    .substr(1)\n\n  if (!extension) {\n    return false\n  }\n\n  return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n  // source preference (least -> most)\n  var preference = ['nginx', 'apache', undefined, 'iana']\n\n  Object.keys(db).forEach(function forEachMimeType (type) {\n    var mime = db[type]\n    var exts = mime.extensions\n\n    if (!exts || !exts.length) {\n      return\n    }\n\n    // mime -> extensions\n    extensions[type] = exts\n\n    // extension -> mime\n    for (var i = 0; i < exts.length; i++) {\n      var extension = exts[i]\n\n      if (types[extension]) {\n        var from = preference.indexOf(db[types[extension]].source)\n        var to = preference.indexOf(mime.source)\n\n        if (types[extension] !== 'application/octet-stream' &&\n          (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n          // skip the remapping\n          continue\n        }\n      }\n\n      // set the extension -> mime\n      types[extension] = type\n    }\n  })\n}\n", "/*!\n * type-is\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar typer = require('media-typer')\nvar mime = require('mime-types')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = typeofrequest\nmodule.exports.is = typeis\nmodule.exports.hasBody = hasbody\nmodule.exports.normalize = normalize\nmodule.exports.match = mimeMatch\n\n/**\n * Compare a `value` content-type with `types`.\n * Each `type` can be an extension like `html`,\n * a special shortcut like `multipart` or `urlencoded`,\n * or a mime type.\n *\n * If no types match, `false` is returned.\n * Otherwise, the first `type` that matches is returned.\n *\n * @param {String} value\n * @param {Array} types\n * @public\n */\n\nfunction typeis (value, types_) {\n  var i\n  var types = types_\n\n  // remove parameters and normalize\n  var val = tryNormalizeType(value)\n\n  // no type or invalid\n  if (!val) {\n    return false\n  }\n\n  // support flattened arguments\n  if (types && !Array.isArray(types)) {\n    types = new Array(arguments.length - 1)\n    for (i = 0; i < types.length; i++) {\n      types[i] = arguments[i + 1]\n    }\n  }\n\n  // no types, return the content type\n  if (!types || !types.length) {\n    return val\n  }\n\n  var type\n  for (i = 0; i < types.length; i++) {\n    if (mimeMatch(normalize(type = types[i]), val)) {\n      return type[0] === '+' || type.indexOf('*') !== -1\n        ? val\n        : type\n    }\n  }\n\n  // no matches\n  return false\n}\n\n/**\n * Check if a request has a request body.\n * A request with a body __must__ either have `transfer-encoding`\n * or `content-length` headers set.\n * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3\n *\n * @param {Object} request\n * @return {Boolean}\n * @public\n */\n\nfunction hasbody (req) {\n  return req.headers['transfer-encoding'] !== undefined ||\n    !isNaN(req.headers['content-length'])\n}\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains any of the give mime `type`s.\n * If there is no request body, `null` is returned.\n * If there is no content type, `false` is returned.\n * Otherwise, it returns the first `type` that matches.\n *\n * Examples:\n *\n *     // With Content-Type: text/html; charset=utf-8\n *     this.is('html'); // => 'html'\n *     this.is('text/html'); // => 'text/html'\n *     this.is('text/*', 'application/json'); // => 'text/html'\n *\n *     // When Content-Type is application/json\n *     this.is('json', 'urlencoded'); // => 'json'\n *     this.is('application/json'); // => 'application/json'\n *     this.is('html', 'application/*'); // => 'application/json'\n *\n *     this.is('html'); // => false\n *\n * @param {String|Array} types...\n * @return {String|false|null}\n * @public\n */\n\nfunction typeofrequest (req, types_) {\n  var types = types_\n\n  // no body\n  if (!hasbody(req)) {\n    return null\n  }\n\n  // support flattened arguments\n  if (arguments.length > 2) {\n    types = new Array(arguments.length - 1)\n    for (var i = 0; i < types.length; i++) {\n      types[i] = arguments[i + 1]\n    }\n  }\n\n  // request content type\n  var value = req.headers['content-type']\n\n  return typeis(value, types)\n}\n\n/**\n * Normalize a mime type.\n * If it's a shorthand, expand it to a valid mime type.\n *\n * In general, you probably want:\n *\n *   var type = is(req, ['urlencoded', 'json', 'multipart']);\n *\n * Then use the appropriate body parsers.\n * These three are the most common request body types\n * and are thus ensured to work.\n *\n * @param {String} type\n * @private\n */\n\nfunction normalize (type) {\n  if (typeof type !== 'string') {\n    // invalid type\n    return false\n  }\n\n  switch (type) {\n    case 'urlencoded':\n      return 'application/x-www-form-urlencoded'\n    case 'multipart':\n      return 'multipart/*'\n  }\n\n  if (type[0] === '+') {\n    // \"+json\" -> \"*/*+json\" expando\n    return '*/*' + type\n  }\n\n  return type.indexOf('/') === -1\n    ? mime.lookup(type)\n    : type\n}\n\n/**\n * Check if `expected` mime type\n * matches `actual` mime type with\n * wildcard and +suffix support.\n *\n * @param {String} expected\n * @param {String} actual\n * @return {Boolean}\n * @private\n */\n\nfunction mimeMatch (expected, actual) {\n  // invalid type\n  if (expected === false) {\n    return false\n  }\n\n  // split types\n  var actualParts = actual.split('/')\n  var expectedParts = expected.split('/')\n\n  // invalid format\n  if (actualParts.length !== 2 || expectedParts.length !== 2) {\n    return false\n  }\n\n  // validate type\n  if (expectedParts[0] !== '*' && expectedParts[0] !== actualParts[0]) {\n    return false\n  }\n\n  // validate suffix wildcard\n  if (expectedParts[1].substr(0, 2) === '*+') {\n    return expectedParts[1].length <= actualParts[1].length + 1 &&\n      expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length)\n  }\n\n  // validate subtype\n  if (expectedParts[1] !== '*' && expectedParts[1] !== actualParts[1]) {\n    return false\n  }\n\n  return true\n}\n\n/**\n * Normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction normalizeType (value) {\n  // parse the type\n  var type = typer.parse(value)\n\n  // remove the parameters\n  type.parameters = undefined\n\n  // reformat it\n  return typer.format(type)\n}\n\n/**\n * Try to normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction tryNormalizeType (value) {\n  if (!value) {\n    return null\n  }\n\n  try {\n    return normalizeType(value)\n  } catch (err) {\n    return null\n  }\n}\n", "'use strict';\n\nfunction parseContentType(str) {\n  if (str.length === 0)\n    return;\n\n  const params = Object.create(null);\n  let i = 0;\n\n  // Parse type\n  for (; i < str.length; ++i) {\n    const code = str.charCodeAt(i);\n    if (TOKEN[code] !== 1) {\n      if (code !== 47/* '/' */ || i === 0)\n        return;\n      break;\n    }\n  }\n  // Check for type without subtype\n  if (i === str.length)\n    return;\n\n  const type = str.slice(0, i).toLowerCase();\n\n  // Parse subtype\n  const subtypeStart = ++i;\n  for (; i < str.length; ++i) {\n    const code = str.charCodeAt(i);\n    if (TOKEN[code] !== 1) {\n      // Make sure we have a subtype\n      if (i === subtypeStart)\n        return;\n\n      if (parseContentTypeParams(str, i, params) === undefined)\n        return;\n      break;\n    }\n  }\n  // Make sure we have a subtype\n  if (i === subtypeStart)\n    return;\n\n  const subtype = str.slice(subtypeStart, i).toLowerCase();\n\n  return { type, subtype, params };\n}\n\nfunction parseContentTypeParams(str, i, params) {\n  while (i < str.length) {\n    // Consume whitespace\n    for (; i < str.length; ++i) {\n      const code = str.charCodeAt(i);\n      if (code !== 32/* ' ' */ && code !== 9/* '\\t' */)\n        break;\n    }\n\n    // Ended on whitespace\n    if (i === str.length)\n      break;\n\n    // Check for malformed parameter\n    if (str.charCodeAt(i++) !== 59/* ';' */)\n      return;\n\n    // Consume whitespace\n    for (; i < str.length; ++i) {\n      const code = str.charCodeAt(i);\n      if (code !== 32/* ' ' */ && code !== 9/* '\\t' */)\n        break;\n    }\n\n    // Ended on whitespace (malformed)\n    if (i === str.length)\n      return;\n\n    let name;\n    const nameStart = i;\n    // Parse parameter name\n    for (; i < str.length; ++i) {\n      const code = str.charCodeAt(i);\n      if (TOKEN[code] !== 1) {\n        if (code !== 61/* '=' */)\n          return;\n        break;\n      }\n    }\n\n    // No value (malformed)\n    if (i === str.length)\n      return;\n\n    name = str.slice(nameStart, i);\n    ++i; // Skip over '='\n\n    // No value (malformed)\n    if (i === str.length)\n      return;\n\n    let value = '';\n    let valueStart;\n    if (str.charCodeAt(i) === 34/* '\"' */) {\n      valueStart = ++i;\n      let escaping = false;\n      // Parse quoted value\n      for (; i < str.length; ++i) {\n        const code = str.charCodeAt(i);\n        if (code === 92/* '\\\\' */) {\n          if (escaping) {\n            valueStart = i;\n            escaping = false;\n          } else {\n            value += str.slice(valueStart, i);\n            escaping = true;\n          }\n          continue;\n        }\n        if (code === 34/* '\"' */) {\n          if (escaping) {\n            valueStart = i;\n            escaping = false;\n            continue;\n          }\n          value += str.slice(valueStart, i);\n          break;\n        }\n        if (escaping) {\n          valueStart = i - 1;\n          escaping = false;\n        }\n        // Invalid unescaped quoted character (malformed)\n        if (QDTEXT[code] !== 1)\n          return;\n      }\n\n      // No end quote (malformed)\n      if (i === str.length)\n        return;\n\n      ++i; // Skip over double quote\n    } else {\n      valueStart = i;\n      // Parse unquoted value\n      for (; i < str.length; ++i) {\n        const code = str.charCodeAt(i);\n        if (TOKEN[code] !== 1) {\n          // No value (malformed)\n          if (i === valueStart)\n            return;\n          break;\n        }\n      }\n      value = str.slice(valueStart, i);\n    }\n\n    name = name.toLowerCase();\n    if (params[name] === undefined)\n      params[name] = value;\n  }\n\n  return params;\n}\n\nfunction parseDisposition(str, defDecoder) {\n  if (str.length === 0)\n    return;\n\n  const params = Object.create(null);\n  let i = 0;\n\n  for (; i < str.length; ++i) {\n    const code = str.charCodeAt(i);\n    if (TOKEN[code] !== 1) {\n      if (parseDispositionParams(str, i, params, defDecoder) === undefined)\n        return;\n      break;\n    }\n  }\n\n  const type = str.slice(0, i).toLowerCase();\n\n  return { type, params };\n}\n\nfunction parseDispositionParams(str, i, params, defDecoder) {\n  while (i < str.length) {\n    // Consume whitespace\n    for (; i < str.length; ++i) {\n      const code = str.charCodeAt(i);\n      if (code !== 32/* ' ' */ && code !== 9/* '\\t' */)\n        break;\n    }\n\n    // Ended on whitespace\n    if (i === str.length)\n      break;\n\n    // Check for malformed parameter\n    if (str.charCodeAt(i++) !== 59/* ';' */)\n      return;\n\n    // Consume whitespace\n    for (; i < str.length; ++i) {\n      const code = str.charCodeAt(i);\n      if (code !== 32/* ' ' */ && code !== 9/* '\\t' */)\n        break;\n    }\n\n    // Ended on whitespace (malformed)\n    if (i === str.length)\n      return;\n\n    let name;\n    const nameStart = i;\n    // Parse parameter name\n    for (; i < str.length; ++i) {\n      const code = str.charCodeAt(i);\n      if (TOKEN[code] !== 1) {\n        if (code === 61/* '=' */)\n          break;\n        return;\n      }\n    }\n\n    // No value (malformed)\n    if (i === str.length)\n      return;\n\n    let value = '';\n    let valueStart;\n    let charset;\n    //~ let lang;\n    name = str.slice(nameStart, i);\n    if (name.charCodeAt(name.length - 1) === 42/* '*' */) {\n      // Extended value\n\n      const charsetStart = ++i;\n      // Parse charset name\n      for (; i < str.length; ++i) {\n        const code = str.charCodeAt(i);\n        if (CHARSET[code] !== 1) {\n          if (code !== 39/* '\\'' */)\n            return;\n          break;\n        }\n      }\n\n      // Incomplete charset (malformed)\n      if (i === str.length)\n        return;\n\n      charset = str.slice(charsetStart, i);\n      ++i; // Skip over the '\\''\n\n      //~ const langStart = ++i;\n      // Parse language name\n      for (; i < str.length; ++i) {\n        const code = str.charCodeAt(i);\n        if (code === 39/* '\\'' */)\n          break;\n      }\n\n      // Incomplete language (malformed)\n      if (i === str.length)\n        return;\n\n      //~ lang = str.slice(langStart, i);\n      ++i; // Skip over the '\\''\n\n      // No value (malformed)\n      if (i === str.length)\n        return;\n\n      valueStart = i;\n\n      let encode = 0;\n      // Parse value\n      for (; i < str.length; ++i) {\n        const code = str.charCodeAt(i);\n        if (EXTENDED_VALUE[code] !== 1) {\n          if (code === 37/* '%' */) {\n            let hexUpper;\n            let hexLower;\n            if (i + 2 < str.length\n                && (hexUpper = HEX_VALUES[str.charCodeAt(i + 1)]) !== -1\n                && (hexLower = HEX_VALUES[str.charCodeAt(i + 2)]) !== -1) {\n              const byteVal = (hexUpper << 4) + hexLower;\n              value += str.slice(valueStart, i);\n              value += String.fromCharCode(byteVal);\n              i += 2;\n              valueStart = i + 1;\n              if (byteVal >= 128)\n                encode = 2;\n              else if (encode === 0)\n                encode = 1;\n              continue;\n            }\n            // '%' disallowed in non-percent encoded contexts (malformed)\n            return;\n          }\n          break;\n        }\n      }\n\n      value += str.slice(valueStart, i);\n      value = convertToUTF8(value, charset, encode);\n      if (value === undefined)\n        return;\n    } else {\n      // Non-extended value\n\n      ++i; // Skip over '='\n\n      // No value (malformed)\n      if (i === str.length)\n        return;\n\n      if (str.charCodeAt(i) === 34/* '\"' */) {\n        valueStart = ++i;\n        let escaping = false;\n        // Parse quoted value\n        for (; i < str.length; ++i) {\n          const code = str.charCodeAt(i);\n          if (code === 92/* '\\\\' */) {\n            if (escaping) {\n              valueStart = i;\n              escaping = false;\n            } else {\n              value += str.slice(valueStart, i);\n              escaping = true;\n            }\n            continue;\n          }\n          if (code === 34/* '\"' */) {\n            if (escaping) {\n              valueStart = i;\n              escaping = false;\n              continue;\n            }\n            value += str.slice(valueStart, i);\n            break;\n          }\n          if (escaping) {\n            valueStart = i - 1;\n            escaping = false;\n          }\n          // Invalid unescaped quoted character (malformed)\n          if (QDTEXT[code] !== 1)\n            return;\n        }\n\n        // No end quote (malformed)\n        if (i === str.length)\n          return;\n\n        ++i; // Skip over double quote\n      } else {\n        valueStart = i;\n        // Parse unquoted value\n        for (; i < str.length; ++i) {\n          const code = str.charCodeAt(i);\n          if (TOKEN[code] !== 1) {\n            // No value (malformed)\n            if (i === valueStart)\n              return;\n            break;\n          }\n        }\n        value = str.slice(valueStart, i);\n      }\n\n      value = defDecoder(value, 2);\n      if (value === undefined)\n        return;\n    }\n\n    name = name.toLowerCase();\n    if (params[name] === undefined)\n      params[name] = value;\n  }\n\n  return params;\n}\n\nfunction getDecoder(charset) {\n  let lc;\n  while (true) {\n    switch (charset) {\n      case 'utf-8':\n      case 'utf8':\n        return decoders.utf8;\n      case 'latin1':\n      case 'ascii': // TODO: Make these a separate, strict decoder?\n      case 'us-ascii':\n      case 'iso-8859-1':\n      case 'iso8859-1':\n      case 'iso88591':\n      case 'iso_8859-1':\n      case 'windows-1252':\n      case 'iso_8859-1:1987':\n      case 'cp1252':\n      case 'x-cp1252':\n        return decoders.latin1;\n      case 'utf16le':\n      case 'utf-16le':\n      case 'ucs2':\n      case 'ucs-2':\n        return decoders.utf16le;\n      case 'base64':\n        return decoders.base64;\n      default:\n        if (lc === undefined) {\n          lc = true;\n          charset = charset.toLowerCase();\n          continue;\n        }\n        return decoders.other.bind(charset);\n    }\n  }\n}\n\nconst decoders = {\n  utf8: (data, hint) => {\n    if (data.length === 0)\n      return '';\n    if (typeof data === 'string') {\n      // If `data` never had any percent-encoded bytes or never had any that\n      // were outside of the ASCII range, then we can safely just return the\n      // input since UTF-8 is ASCII compatible\n      if (hint < 2)\n        return data;\n\n      data = Buffer.from(data, 'latin1');\n    }\n    return data.utf8Slice(0, data.length);\n  },\n\n  latin1: (data, hint) => {\n    if (data.length === 0)\n      return '';\n    if (typeof data === 'string')\n      return data;\n    return data.latin1Slice(0, data.length);\n  },\n\n  utf16le: (data, hint) => {\n    if (data.length === 0)\n      return '';\n    if (typeof data === 'string')\n      data = Buffer.from(data, 'latin1');\n    return data.ucs2Slice(0, data.length);\n  },\n\n  base64: (data, hint) => {\n    if (data.length === 0)\n      return '';\n    if (typeof data === 'string')\n      data = Buffer.from(data, 'latin1');\n    return data.base64Slice(0, data.length);\n  },\n\n  other: (data, hint) => {\n    if (data.length === 0)\n      return '';\n    if (typeof data === 'string')\n      data = Buffer.from(data, 'latin1');\n    try {\n      const decoder = new TextDecoder(this);\n      return decoder.decode(data);\n    } catch {}\n  },\n};\n\nfunction convertToUTF8(data, charset, hint) {\n  const decode = getDecoder(charset);\n  if (decode)\n    return decode(data, hint);\n}\n\nfunction basename(path) {\n  if (typeof path !== 'string')\n    return '';\n  for (let i = path.length - 1; i >= 0; --i) {\n    switch (path.charCodeAt(i)) {\n      case 0x2F: // '/'\n      case 0x5C: // '\\'\n        path = path.slice(i + 1);\n        return (path === '..' || path === '.' ? '' : path);\n    }\n  }\n  return (path === '..' || path === '.' ? '' : path);\n}\n\nconst TOKEN = [\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n];\n\nconst QDTEXT = [\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\n\nconst CHARSET = [\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n];\n\nconst EXTENDED_VALUE = [\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n];\n\n/* eslint-disable no-multi-spaces */\nconst HEX_VALUES = [\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, -1, -1, -1, -1, -1, -1,\n  -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n];\n/* eslint-enable no-multi-spaces */\n\nmodule.exports = {\n  basename,\n  convertToUTF8,\n  getDecoder,\n  parseContentType,\n  parseDisposition,\n};\n", "'use strict';\n/*\n  Based heavily on the Streaming Boyer-Moore-Horspool C++ implementation\n  by Hongli Lai at: https://github.com/FooBarWidget/boyer-moore-horspool\n*/\nfunction memcmp(buf1, pos1, buf2, pos2, num) {\n  for (let i = 0; i < num; ++i) {\n    if (buf1[pos1 + i] !== buf2[pos2 + i])\n      return false;\n  }\n  return true;\n}\n\nclass SBMH {\n  constructor(needle, cb) {\n    if (typeof cb !== 'function')\n      throw new Error('Missing match callback');\n\n    if (typeof needle === 'string')\n      needle = Buffer.from(needle);\n    else if (!Buffer.isBuffer(needle))\n      throw new Error(`Expected Buffer for needle, got ${typeof needle}`);\n\n    const needleLen = needle.length;\n\n    this.maxMatches = Infinity;\n    this.matches = 0;\n\n    this._cb = cb;\n    this._lookbehindSize = 0;\n    this._needle = needle;\n    this._bufPos = 0;\n\n    this._lookbehind = Buffer.allocUnsafe(needleLen);\n\n    // Initialize occurrence table.\n    this._occ = [\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen\n    ];\n\n    // Populate occurrence table with analysis of the needle, ignoring the last\n    // letter.\n    if (needleLen > 1) {\n      for (let i = 0; i < needleLen - 1; ++i)\n        this._occ[needle[i]] = needleLen - 1 - i;\n    }\n  }\n\n  reset() {\n    this.matches = 0;\n    this._lookbehindSize = 0;\n    this._bufPos = 0;\n  }\n\n  push(chunk, pos) {\n    let result;\n    if (!Buffer.isBuffer(chunk))\n      chunk = Buffer.from(chunk, 'latin1');\n    const chunkLen = chunk.length;\n    this._bufPos = pos || 0;\n    while (result !== chunkLen && this.matches < this.maxMatches)\n      result = feed(this, chunk);\n    return result;\n  }\n\n  destroy() {\n    const lbSize = this._lookbehindSize;\n    if (lbSize)\n      this._cb(false, this._lookbehind, 0, lbSize, false);\n    this.reset();\n  }\n}\n\nfunction feed(self, data) {\n  const len = data.length;\n  const needle = self._needle;\n  const needleLen = needle.length;\n\n  // Positive: points to a position in `data`\n  //           pos == 3 points to data[3]\n  // Negative: points to a position in the lookbehind buffer\n  //           pos == -2 points to lookbehind[lookbehindSize - 2]\n  let pos = -self._lookbehindSize;\n  const lastNeedleCharPos = needleLen - 1;\n  const lastNeedleChar = needle[lastNeedleCharPos];\n  const end = len - needleLen;\n  const occ = self._occ;\n  const lookbehind = self._lookbehind;\n\n  if (pos < 0) {\n    // Lookbehind buffer is not empty. Perform Boyer-Moore-Horspool\n    // search with character lookup code that considers both the\n    // lookbehind buffer and the current round's haystack data.\n    //\n    // Loop until\n    //   there is a match.\n    // or until\n    //   we've moved past the position that requires the\n    //   lookbehind buffer. In this case we switch to the\n    //   optimized loop.\n    // or until\n    //   the character to look at lies outside the haystack.\n    while (pos < 0 && pos <= end) {\n      const nextPos = pos + lastNeedleCharPos;\n      const ch = (nextPos < 0\n                  ? lookbehind[self._lookbehindSize + nextPos]\n                  : data[nextPos]);\n\n      if (ch === lastNeedleChar\n          && matchNeedle(self, data, pos, lastNeedleCharPos)) {\n        self._lookbehindSize = 0;\n        ++self.matches;\n        if (pos > -self._lookbehindSize)\n          self._cb(true, lookbehind, 0, self._lookbehindSize + pos, false);\n        else\n          self._cb(true, undefined, 0, 0, true);\n\n        return (self._bufPos = pos + needleLen);\n      }\n\n      pos += occ[ch];\n    }\n\n    // No match.\n\n    // There's too few data for Boyer-Moore-Horspool to run,\n    // so let's use a different algorithm to skip as much as\n    // we can.\n    // Forward pos until\n    //   the trailing part of lookbehind + data\n    //   looks like the beginning of the needle\n    // or until\n    //   pos == 0\n    while (pos < 0 && !matchNeedle(self, data, pos, len - pos))\n      ++pos;\n\n    if (pos < 0) {\n      // Cut off part of the lookbehind buffer that has\n      // been processed and append the entire haystack\n      // into it.\n      const bytesToCutOff = self._lookbehindSize + pos;\n\n      if (bytesToCutOff > 0) {\n        // The cut off data is guaranteed not to contain the needle.\n        self._cb(false, lookbehind, 0, bytesToCutOff, false);\n      }\n\n      self._lookbehindSize -= bytesToCutOff;\n      lookbehind.copy(lookbehind, 0, bytesToCutOff, self._lookbehindSize);\n      lookbehind.set(data, self._lookbehindSize);\n      self._lookbehindSize += len;\n\n      self._bufPos = len;\n      return len;\n    }\n\n    // Discard lookbehind buffer.\n    self._cb(false, lookbehind, 0, self._lookbehindSize, false);\n    self._lookbehindSize = 0;\n  }\n\n  pos += self._bufPos;\n\n  const firstNeedleChar = needle[0];\n\n  // Lookbehind buffer is now empty. Perform Boyer-Moore-Horspool\n  // search with optimized character lookup code that only considers\n  // the current round's haystack data.\n  while (pos <= end) {\n    const ch = data[pos + lastNeedleCharPos];\n\n    if (ch === lastNeedleChar\n        && data[pos] === firstNeedleChar\n        && memcmp(needle, 0, data, pos, lastNeedleCharPos)) {\n      ++self.matches;\n      if (pos > 0)\n        self._cb(true, data, self._bufPos, pos, true);\n      else\n        self._cb(true, undefined, 0, 0, true);\n\n      return (self._bufPos = pos + needleLen);\n    }\n\n    pos += occ[ch];\n  }\n\n  // There was no match. If there's trailing haystack data that we cannot\n  // match yet using the Boyer-Moore-Horspool algorithm (because the trailing\n  // data is less than the needle size) then match using a modified\n  // algorithm that starts matching from the beginning instead of the end.\n  // Whatever trailing data is left after running this algorithm is added to\n  // the lookbehind buffer.\n  while (pos < len) {\n    if (data[pos] !== firstNeedleChar\n        || !memcmp(data, pos, needle, 0, len - pos)) {\n      ++pos;\n      continue;\n    }\n    data.copy(lookbehind, 0, pos, len);\n    self._lookbehindSize = len - pos;\n    break;\n  }\n\n  // Everything until `pos` is guaranteed not to contain needle data.\n  if (pos > 0)\n    self._cb(false, data, self._bufPos, pos < len ? pos : len, true);\n\n  self._bufPos = len;\n  return len;\n}\n\nfunction matchNeedle(self, data, pos, len) {\n  const lb = self._lookbehind;\n  const lbSize = self._lookbehindSize;\n  const needle = self._needle;\n\n  for (let i = 0; i < len; ++i, ++pos) {\n    const ch = (pos < 0 ? lb[lbSize + pos] : data[pos]);\n    if (ch !== needle[i])\n      return false;\n  }\n  return true;\n}\n\nmodule.exports = SBMH;\n", "'use strict';\n\nconst { Readable, Writable } = require('stream');\n\nconst StreamSearch = require('streamsearch');\n\nconst {\n  basename,\n  convertToUTF8,\n  getDecoder,\n  parseContentType,\n  parseDisposition,\n} = require('../utils.js');\n\nconst BUF_CRLF = Buffer.from('\\r\\n');\nconst BUF_CR = Buffer.from('\\r');\nconst BUF_DASH = Buffer.from('-');\n\nfunction noop() {}\n\nconst MAX_HEADER_PAIRS = 2000; // From node\nconst MAX_HEADER_SIZE = 16 * 1024; // From node (its default value)\n\nconst HPARSER_NAME = 0;\nconst HPARSER_PRE_OWS = 1;\nconst HPARSER_VALUE = 2;\nclass HeaderParser {\n  constructor(cb) {\n    this.header = Object.create(null);\n    this.pairCount = 0;\n    this.byteCount = 0;\n    this.state = HPARSER_NAME;\n    this.name = '';\n    this.value = '';\n    this.crlf = 0;\n    this.cb = cb;\n  }\n\n  reset() {\n    this.header = Object.create(null);\n    this.pairCount = 0;\n    this.byteCount = 0;\n    this.state = HPARSER_NAME;\n    this.name = '';\n    this.value = '';\n    this.crlf = 0;\n  }\n\n  push(chunk, pos, end) {\n    let start = pos;\n    while (pos < end) {\n      switch (this.state) {\n        case HPARSER_NAME: {\n          let done = false;\n          for (; pos < end; ++pos) {\n            if (this.byteCount === MAX_HEADER_SIZE)\n              return -1;\n            ++this.byteCount;\n            const code = chunk[pos];\n            if (TOKEN[code] !== 1) {\n              if (code !== 58/* ':' */)\n                return -1;\n              this.name += chunk.latin1Slice(start, pos);\n              if (this.name.length === 0)\n                return -1;\n              ++pos;\n              done = true;\n              this.state = HPARSER_PRE_OWS;\n              break;\n            }\n          }\n          if (!done) {\n            this.name += chunk.latin1Slice(start, pos);\n            break;\n          }\n          // FALLTHROUGH\n        }\n        case HPARSER_PRE_OWS: {\n          // Skip optional whitespace\n          let done = false;\n          for (; pos < end; ++pos) {\n            if (this.byteCount === MAX_HEADER_SIZE)\n              return -1;\n            ++this.byteCount;\n            const code = chunk[pos];\n            if (code !== 32/* ' ' */ && code !== 9/* '\\t' */) {\n              start = pos;\n              done = true;\n              this.state = HPARSER_VALUE;\n              break;\n            }\n          }\n          if (!done)\n            break;\n          // FALLTHROUGH\n        }\n        case HPARSER_VALUE:\n          switch (this.crlf) {\n            case 0: // Nothing yet\n              for (; pos < end; ++pos) {\n                if (this.byteCount === MAX_HEADER_SIZE)\n                  return -1;\n                ++this.byteCount;\n                const code = chunk[pos];\n                if (FIELD_VCHAR[code] !== 1) {\n                  if (code !== 13/* '\\r' */)\n                    return -1;\n                  ++this.crlf;\n                  break;\n                }\n              }\n              this.value += chunk.latin1Slice(start, pos++);\n              break;\n            case 1: // Received CR\n              if (this.byteCount === MAX_HEADER_SIZE)\n                return -1;\n              ++this.byteCount;\n              if (chunk[pos++] !== 10/* '\\n' */)\n                return -1;\n              ++this.crlf;\n              break;\n            case 2: { // Received CR LF\n              if (this.byteCount === MAX_HEADER_SIZE)\n                return -1;\n              ++this.byteCount;\n              const code = chunk[pos];\n              if (code === 32/* ' ' */ || code === 9/* '\\t' */) {\n                // Folded value\n                start = pos;\n                this.crlf = 0;\n              } else {\n                if (++this.pairCount < MAX_HEADER_PAIRS) {\n                  this.name = this.name.toLowerCase();\n                  if (this.header[this.name] === undefined)\n                    this.header[this.name] = [this.value];\n                  else\n                    this.header[this.name].push(this.value);\n                }\n                if (code === 13/* '\\r' */) {\n                  ++this.crlf;\n                  ++pos;\n                } else {\n                  // Assume start of next header field name\n                  start = pos;\n                  this.crlf = 0;\n                  this.state = HPARSER_NAME;\n                  this.name = '';\n                  this.value = '';\n                }\n              }\n              break;\n            }\n            case 3: { // Received CR LF CR\n              if (this.byteCount === MAX_HEADER_SIZE)\n                return -1;\n              ++this.byteCount;\n              if (chunk[pos++] !== 10/* '\\n' */)\n                return -1;\n              // End of header\n              const header = this.header;\n              this.reset();\n              this.cb(header);\n              return pos;\n            }\n          }\n          break;\n      }\n    }\n\n    return pos;\n  }\n}\n\nclass FileStream extends Readable {\n  constructor(opts, owner) {\n    super(opts);\n    this.truncated = false;\n    this._readcb = null;\n    this.once('end', () => {\n      // We need to make sure that we call any outstanding _writecb() that is\n      // associated with this file so that processing of the rest of the form\n      // can continue. This may not happen if the file stream ends right after\n      // backpressure kicks in, so we force it here.\n      this._read();\n      if (--owner._fileEndsLeft === 0 && owner._finalcb) {\n        const cb = owner._finalcb;\n        owner._finalcb = null;\n        // Make sure other 'end' event handlers get a chance to be executed\n        // before busboy's 'finish' event is emitted\n        process.nextTick(cb);\n      }\n    });\n  }\n  _read(n) {\n    const cb = this._readcb;\n    if (cb) {\n      this._readcb = null;\n      cb();\n    }\n  }\n}\n\nconst ignoreData = {\n  push: (chunk, pos) => {},\n  destroy: () => {},\n};\n\nfunction callAndUnsetCb(self, err) {\n  const cb = self._writecb;\n  self._writecb = null;\n  if (err)\n    self.destroy(err);\n  else if (cb)\n    cb();\n}\n\nfunction nullDecoder(val, hint) {\n  return val;\n}\n\nclass Multipart extends Writable {\n  constructor(cfg) {\n    const streamOpts = {\n      autoDestroy: true,\n      emitClose: true,\n      highWaterMark: (typeof cfg.highWaterMark === 'number'\n                      ? cfg.highWaterMark\n                      : undefined),\n    };\n    super(streamOpts);\n\n    if (!cfg.conType.params || typeof cfg.conType.params.boundary !== 'string')\n      throw new Error('Multipart: Boundary not found');\n\n    const boundary = cfg.conType.params.boundary;\n    const paramDecoder = (typeof cfg.defParamCharset === 'string'\n                            && cfg.defParamCharset\n                          ? getDecoder(cfg.defParamCharset)\n                          : nullDecoder);\n    const defCharset = (cfg.defCharset || 'utf8');\n    const preservePath = cfg.preservePath;\n    const fileOpts = {\n      autoDestroy: true,\n      emitClose: true,\n      highWaterMark: (typeof cfg.fileHwm === 'number'\n                      ? cfg.fileHwm\n                      : undefined),\n    };\n\n    const limits = cfg.limits;\n    const fieldSizeLimit = (limits && typeof limits.fieldSize === 'number'\n                            ? limits.fieldSize\n                            : 1 * 1024 * 1024);\n    const fileSizeLimit = (limits && typeof limits.fileSize === 'number'\n                           ? limits.fileSize\n                           : Infinity);\n    const filesLimit = (limits && typeof limits.files === 'number'\n                        ? limits.files\n                        : Infinity);\n    const fieldsLimit = (limits && typeof limits.fields === 'number'\n                         ? limits.fields\n                         : Infinity);\n    const partsLimit = (limits && typeof limits.parts === 'number'\n                        ? limits.parts\n                        : Infinity);\n\n    let parts = -1; // Account for initial boundary\n    let fields = 0;\n    let files = 0;\n    let skipPart = false;\n\n    this._fileEndsLeft = 0;\n    this._fileStream = undefined;\n    this._complete = false;\n    let fileSize = 0;\n\n    let field;\n    let fieldSize = 0;\n    let partCharset;\n    let partEncoding;\n    let partType;\n    let partName;\n    let partTruncated = false;\n\n    let hitFilesLimit = false;\n    let hitFieldsLimit = false;\n\n    this._hparser = null;\n    const hparser = new HeaderParser((header) => {\n      this._hparser = null;\n      skipPart = false;\n\n      partType = 'text/plain';\n      partCharset = defCharset;\n      partEncoding = '7bit';\n      partName = undefined;\n      partTruncated = false;\n\n      let filename;\n      if (!header['content-disposition']) {\n        skipPart = true;\n        return;\n      }\n\n      const disp = parseDisposition(header['content-disposition'][0],\n                                    paramDecoder);\n      if (!disp || disp.type !== 'form-data') {\n        skipPart = true;\n        return;\n      }\n\n      if (disp.params) {\n        if (disp.params.name)\n          partName = disp.params.name;\n\n        if (disp.params['filename*'])\n          filename = disp.params['filename*'];\n        else if (disp.params.filename)\n          filename = disp.params.filename;\n\n        if (filename !== undefined && !preservePath)\n          filename = basename(filename);\n      }\n\n      if (header['content-type']) {\n        const conType = parseContentType(header['content-type'][0]);\n        if (conType) {\n          partType = `${conType.type}/${conType.subtype}`;\n          if (conType.params && typeof conType.params.charset === 'string')\n            partCharset = conType.params.charset.toLowerCase();\n        }\n      }\n\n      if (header['content-transfer-encoding'])\n        partEncoding = header['content-transfer-encoding'][0].toLowerCase();\n\n      if (partType === 'application/octet-stream' || filename !== undefined) {\n        // File\n\n        if (files === filesLimit) {\n          if (!hitFilesLimit) {\n            hitFilesLimit = true;\n            this.emit('filesLimit');\n          }\n          skipPart = true;\n          return;\n        }\n        ++files;\n\n        if (this.listenerCount('file') === 0) {\n          skipPart = true;\n          return;\n        }\n\n        fileSize = 0;\n        this._fileStream = new FileStream(fileOpts, this);\n        ++this._fileEndsLeft;\n        this.emit(\n          'file',\n          partName,\n          this._fileStream,\n          { filename,\n            encoding: partEncoding,\n            mimeType: partType }\n        );\n      } else {\n        // Non-file\n\n        if (fields === fieldsLimit) {\n          if (!hitFieldsLimit) {\n            hitFieldsLimit = true;\n            this.emit('fieldsLimit');\n          }\n          skipPart = true;\n          return;\n        }\n        ++fields;\n\n        if (this.listenerCount('field') === 0) {\n          skipPart = true;\n          return;\n        }\n\n        field = [];\n        fieldSize = 0;\n      }\n    });\n\n    let matchPostBoundary = 0;\n    const ssCb = (isMatch, data, start, end, isDataSafe) => {\nretrydata:\n      while (data) {\n        if (this._hparser !== null) {\n          const ret = this._hparser.push(data, start, end);\n          if (ret === -1) {\n            this._hparser = null;\n            hparser.reset();\n            this.emit('error', new Error('Malformed part header'));\n            break;\n          }\n          start = ret;\n        }\n\n        if (start === end)\n          break;\n\n        if (matchPostBoundary !== 0) {\n          if (matchPostBoundary === 1) {\n            switch (data[start]) {\n              case 45: // '-'\n                // Try matching '--' after boundary\n                matchPostBoundary = 2;\n                ++start;\n                break;\n              case 13: // '\\r'\n                // Try matching CR LF before header\n                matchPostBoundary = 3;\n                ++start;\n                break;\n              default:\n                matchPostBoundary = 0;\n            }\n            if (start === end)\n              return;\n          }\n\n          if (matchPostBoundary === 2) {\n            matchPostBoundary = 0;\n            if (data[start] === 45/* '-' */) {\n              // End of multipart data\n              this._complete = true;\n              this._bparser = ignoreData;\n              return;\n            }\n            // We saw something other than '-', so put the dash we consumed\n            // \"back\"\n            const writecb = this._writecb;\n            this._writecb = noop;\n            ssCb(false, BUF_DASH, 0, 1, false);\n            this._writecb = writecb;\n          } else if (matchPostBoundary === 3) {\n            matchPostBoundary = 0;\n            if (data[start] === 10/* '\\n' */) {\n              ++start;\n              if (parts >= partsLimit)\n                break;\n              // Prepare the header parser\n              this._hparser = hparser;\n              if (start === end)\n                break;\n              // Process the remaining data as a header\n              continue retrydata;\n            } else {\n              // We saw something other than LF, so put the CR we consumed\n              // \"back\"\n              const writecb = this._writecb;\n              this._writecb = noop;\n              ssCb(false, BUF_CR, 0, 1, false);\n              this._writecb = writecb;\n            }\n          }\n        }\n\n        if (!skipPart) {\n          if (this._fileStream) {\n            let chunk;\n            const actualLen = Math.min(end - start, fileSizeLimit - fileSize);\n            if (!isDataSafe) {\n              chunk = Buffer.allocUnsafe(actualLen);\n              data.copy(chunk, 0, start, start + actualLen);\n            } else {\n              chunk = data.slice(start, start + actualLen);\n            }\n\n            fileSize += chunk.length;\n            if (fileSize === fileSizeLimit) {\n              if (chunk.length > 0)\n                this._fileStream.push(chunk);\n              this._fileStream.emit('limit');\n              this._fileStream.truncated = true;\n              skipPart = true;\n            } else if (!this._fileStream.push(chunk)) {\n              if (this._writecb)\n                this._fileStream._readcb = this._writecb;\n              this._writecb = null;\n            }\n          } else if (field !== undefined) {\n            let chunk;\n            const actualLen = Math.min(\n              end - start,\n              fieldSizeLimit - fieldSize\n            );\n            if (!isDataSafe) {\n              chunk = Buffer.allocUnsafe(actualLen);\n              data.copy(chunk, 0, start, start + actualLen);\n            } else {\n              chunk = data.slice(start, start + actualLen);\n            }\n\n            fieldSize += actualLen;\n            field.push(chunk);\n            if (fieldSize === fieldSizeLimit) {\n              skipPart = true;\n              partTruncated = true;\n            }\n          }\n        }\n\n        break;\n      }\n\n      if (isMatch) {\n        matchPostBoundary = 1;\n\n        if (this._fileStream) {\n          // End the active file stream if the previous part was a file\n          this._fileStream.push(null);\n          this._fileStream = null;\n        } else if (field !== undefined) {\n          let data;\n          switch (field.length) {\n            case 0:\n              data = '';\n              break;\n            case 1:\n              data = convertToUTF8(field[0], partCharset, 0);\n              break;\n            default:\n              data = convertToUTF8(\n                Buffer.concat(field, fieldSize),\n                partCharset,\n                0\n              );\n          }\n          field = undefined;\n          fieldSize = 0;\n          this.emit(\n            'field',\n            partName,\n            data,\n            { nameTruncated: false,\n              valueTruncated: partTruncated,\n              encoding: partEncoding,\n              mimeType: partType }\n          );\n        }\n\n        if (++parts === partsLimit)\n          this.emit('partsLimit');\n      }\n    };\n    this._bparser = new StreamSearch(`\\r\\n--${boundary}`, ssCb);\n\n    this._writecb = null;\n    this._finalcb = null;\n\n    // Just in case there is no preamble\n    this.write(BUF_CRLF);\n  }\n\n  static detect(conType) {\n    return (conType.type === 'multipart' && conType.subtype === 'form-data');\n  }\n\n  _write(chunk, enc, cb) {\n    this._writecb = cb;\n    this._bparser.push(chunk, 0);\n    if (this._writecb)\n      callAndUnsetCb(this);\n  }\n\n  _destroy(err, cb) {\n    this._hparser = null;\n    this._bparser = ignoreData;\n    if (!err)\n      err = checkEndState(this);\n    const fileStream = this._fileStream;\n    if (fileStream) {\n      this._fileStream = null;\n      fileStream.destroy(err);\n    }\n    cb(err);\n  }\n\n  _final(cb) {\n    this._bparser.destroy();\n    if (!this._complete)\n      return cb(new Error('Unexpected end of form'));\n    if (this._fileEndsLeft)\n      this._finalcb = finalcb.bind(null, this, cb);\n    else\n      finalcb(this, cb);\n  }\n}\n\nfunction finalcb(self, cb, err) {\n  if (err)\n    return cb(err);\n  err = checkEndState(self);\n  cb(err);\n}\n\nfunction checkEndState(self) {\n  if (self._hparser)\n    return new Error('Malformed part header');\n  const fileStream = self._fileStream;\n  if (fileStream) {\n    self._fileStream = null;\n    fileStream.destroy(new Error('Unexpected end of file'));\n  }\n  if (!self._complete)\n    return new Error('Unexpected end of form');\n}\n\nconst TOKEN = [\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n];\n\nconst FIELD_VCHAR = [\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\n\nmodule.exports = Multipart;\n", "'use strict';\n\nconst { Writable } = require('stream');\n\nconst { getDecoder } = require('../utils.js');\n\nclass URLEncoded extends Writable {\n  constructor(cfg) {\n    const streamOpts = {\n      autoDestroy: true,\n      emitClose: true,\n      highWaterMark: (typeof cfg.highWaterMark === 'number'\n                      ? cfg.highWaterMark\n                      : undefined),\n    };\n    super(streamOpts);\n\n    let charset = (cfg.defCharset || 'utf8');\n    if (cfg.conType.params && typeof cfg.conType.params.charset === 'string')\n      charset = cfg.conType.params.charset;\n\n    this.charset = charset;\n\n    const limits = cfg.limits;\n    this.fieldSizeLimit = (limits && typeof limits.fieldSize === 'number'\n                           ? limits.fieldSize\n                           : 1 * 1024 * 1024);\n    this.fieldsLimit = (limits && typeof limits.fields === 'number'\n                        ? limits.fields\n                        : Infinity);\n    this.fieldNameSizeLimit = (\n      limits && typeof limits.fieldNameSize === 'number'\n      ? limits.fieldNameSize\n      : 100\n    );\n\n    this._inKey = true;\n    this._keyTrunc = false;\n    this._valTrunc = false;\n    this._bytesKey = 0;\n    this._bytesVal = 0;\n    this._fields = 0;\n    this._key = '';\n    this._val = '';\n    this._byte = -2;\n    this._lastPos = 0;\n    this._encode = 0;\n    this._decoder = getDecoder(charset);\n  }\n\n  static detect(conType) {\n    return (conType.type === 'application'\n            && conType.subtype === 'x-www-form-urlencoded');\n  }\n\n  _write(chunk, enc, cb) {\n    if (this._fields >= this.fieldsLimit)\n      return cb();\n\n    let i = 0;\n    const len = chunk.length;\n    this._lastPos = 0;\n\n    // Check if we last ended mid-percent-encoded byte\n    if (this._byte !== -2) {\n      i = readPctEnc(this, chunk, i, len);\n      if (i === -1)\n        return cb(new Error('Malformed urlencoded form'));\n      if (i >= len)\n        return cb();\n      if (this._inKey)\n        ++this._bytesKey;\n      else\n        ++this._bytesVal;\n    }\n\nmain:\n    while (i < len) {\n      if (this._inKey) {\n        // Parsing key\n\n        i = skipKeyBytes(this, chunk, i, len);\n\n        while (i < len) {\n          switch (chunk[i]) {\n            case 61: // '='\n              if (this._lastPos < i)\n                this._key += chunk.latin1Slice(this._lastPos, i);\n              this._lastPos = ++i;\n              this._key = this._decoder(this._key, this._encode);\n              this._encode = 0;\n              this._inKey = false;\n              continue main;\n            case 38: // '&'\n              if (this._lastPos < i)\n                this._key += chunk.latin1Slice(this._lastPos, i);\n              this._lastPos = ++i;\n              this._key = this._decoder(this._key, this._encode);\n              this._encode = 0;\n              if (this._bytesKey > 0) {\n                this.emit(\n                  'field',\n                  this._key,\n                  '',\n                  { nameTruncated: this._keyTrunc,\n                    valueTruncated: false,\n                    encoding: this.charset,\n                    mimeType: 'text/plain' }\n                );\n              }\n              this._key = '';\n              this._val = '';\n              this._keyTrunc = false;\n              this._valTrunc = false;\n              this._bytesKey = 0;\n              this._bytesVal = 0;\n              if (++this._fields >= this.fieldsLimit) {\n                this.emit('fieldsLimit');\n                return cb();\n              }\n              continue;\n            case 43: // '+'\n              if (this._lastPos < i)\n                this._key += chunk.latin1Slice(this._lastPos, i);\n              this._key += ' ';\n              this._lastPos = i + 1;\n              break;\n            case 37: // '%'\n              if (this._encode === 0)\n                this._encode = 1;\n              if (this._lastPos < i)\n                this._key += chunk.latin1Slice(this._lastPos, i);\n              this._lastPos = i + 1;\n              this._byte = -1;\n              i = readPctEnc(this, chunk, i + 1, len);\n              if (i === -1)\n                return cb(new Error('Malformed urlencoded form'));\n              if (i >= len)\n                return cb();\n              ++this._bytesKey;\n              i = skipKeyBytes(this, chunk, i, len);\n              continue;\n          }\n          ++i;\n          ++this._bytesKey;\n          i = skipKeyBytes(this, chunk, i, len);\n        }\n        if (this._lastPos < i)\n          this._key += chunk.latin1Slice(this._lastPos, i);\n      } else {\n        // Parsing value\n\n        i = skipValBytes(this, chunk, i, len);\n\n        while (i < len) {\n          switch (chunk[i]) {\n            case 38: // '&'\n              if (this._lastPos < i)\n                this._val += chunk.latin1Slice(this._lastPos, i);\n              this._lastPos = ++i;\n              this._inKey = true;\n              this._val = this._decoder(this._val, this._encode);\n              this._encode = 0;\n              if (this._bytesKey > 0 || this._bytesVal > 0) {\n                this.emit(\n                  'field',\n                  this._key,\n                  this._val,\n                  { nameTruncated: this._keyTrunc,\n                    valueTruncated: this._valTrunc,\n                    encoding: this.charset,\n                    mimeType: 'text/plain' }\n                );\n              }\n              this._key = '';\n              this._val = '';\n              this._keyTrunc = false;\n              this._valTrunc = false;\n              this._bytesKey = 0;\n              this._bytesVal = 0;\n              if (++this._fields >= this.fieldsLimit) {\n                this.emit('fieldsLimit');\n                return cb();\n              }\n              continue main;\n            case 43: // '+'\n              if (this._lastPos < i)\n                this._val += chunk.latin1Slice(this._lastPos, i);\n              this._val += ' ';\n              this._lastPos = i + 1;\n              break;\n            case 37: // '%'\n              if (this._encode === 0)\n                this._encode = 1;\n              if (this._lastPos < i)\n                this._val += chunk.latin1Slice(this._lastPos, i);\n              this._lastPos = i + 1;\n              this._byte = -1;\n              i = readPctEnc(this, chunk, i + 1, len);\n              if (i === -1)\n                return cb(new Error('Malformed urlencoded form'));\n              if (i >= len)\n                return cb();\n              ++this._bytesVal;\n              i = skipValBytes(this, chunk, i, len);\n              continue;\n          }\n          ++i;\n          ++this._bytesVal;\n          i = skipValBytes(this, chunk, i, len);\n        }\n        if (this._lastPos < i)\n          this._val += chunk.latin1Slice(this._lastPos, i);\n      }\n    }\n\n    cb();\n  }\n\n  _final(cb) {\n    if (this._byte !== -2)\n      return cb(new Error('Malformed urlencoded form'));\n    if (!this._inKey || this._bytesKey > 0 || this._bytesVal > 0) {\n      if (this._inKey)\n        this._key = this._decoder(this._key, this._encode);\n      else\n        this._val = this._decoder(this._val, this._encode);\n      this.emit(\n        'field',\n        this._key,\n        this._val,\n        { nameTruncated: this._keyTrunc,\n          valueTruncated: this._valTrunc,\n          encoding: this.charset,\n          mimeType: 'text/plain' }\n      );\n    }\n    cb();\n  }\n}\n\nfunction readPctEnc(self, chunk, pos, len) {\n  if (pos >= len)\n    return len;\n\n  if (self._byte === -1) {\n    // We saw a '%' but no hex characters yet\n    const hexUpper = HEX_VALUES[chunk[pos++]];\n    if (hexUpper === -1)\n      return -1;\n\n    if (hexUpper >= 8)\n      self._encode = 2; // Indicate high bits detected\n\n    if (pos < len) {\n      // Both hex characters are in this chunk\n      const hexLower = HEX_VALUES[chunk[pos++]];\n      if (hexLower === -1)\n        return -1;\n\n      if (self._inKey)\n        self._key += String.fromCharCode((hexUpper << 4) + hexLower);\n      else\n        self._val += String.fromCharCode((hexUpper << 4) + hexLower);\n\n      self._byte = -2;\n      self._lastPos = pos;\n    } else {\n      // Only one hex character was available in this chunk\n      self._byte = hexUpper;\n    }\n  } else {\n    // We saw only one hex character so far\n    const hexLower = HEX_VALUES[chunk[pos++]];\n    if (hexLower === -1)\n      return -1;\n\n    if (self._inKey)\n      self._key += String.fromCharCode((self._byte << 4) + hexLower);\n    else\n      self._val += String.fromCharCode((self._byte << 4) + hexLower);\n\n    self._byte = -2;\n    self._lastPos = pos;\n  }\n\n  return pos;\n}\n\nfunction skipKeyBytes(self, chunk, pos, len) {\n  // Skip bytes if we've truncated\n  if (self._bytesKey > self.fieldNameSizeLimit) {\n    if (!self._keyTrunc) {\n      if (self._lastPos < pos)\n        self._key += chunk.latin1Slice(self._lastPos, pos - 1);\n    }\n    self._keyTrunc = true;\n    for (; pos < len; ++pos) {\n      const code = chunk[pos];\n      if (code === 61/* '=' */ || code === 38/* '&' */)\n        break;\n      ++self._bytesKey;\n    }\n    self._lastPos = pos;\n  }\n\n  return pos;\n}\n\nfunction skipValBytes(self, chunk, pos, len) {\n  // Skip bytes if we've truncated\n  if (self._bytesVal > self.fieldSizeLimit) {\n    if (!self._valTrunc) {\n      if (self._lastPos < pos)\n        self._val += chunk.latin1Slice(self._lastPos, pos - 1);\n    }\n    self._valTrunc = true;\n    for (; pos < len; ++pos) {\n      if (chunk[pos] === 38/* '&' */)\n        break;\n      ++self._bytesVal;\n    }\n    self._lastPos = pos;\n  }\n\n  return pos;\n}\n\n/* eslint-disable no-multi-spaces */\nconst HEX_VALUES = [\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, -1, -1, -1, -1, -1, -1,\n  -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n];\n/* eslint-enable no-multi-spaces */\n\nmodule.exports = URLEncoded;\n", "'use strict';\n\nconst { parseContentType } = require('./utils.js');\n\nfunction getInstance(cfg) {\n  const headers = cfg.headers;\n  const conType = parseContentType(headers['content-type']);\n  if (!conType)\n    throw new Error('Malformed content type');\n\n  for (const type of TYPES) {\n    const matched = type.detect(conType);\n    if (!matched)\n      continue;\n\n    const instanceCfg = {\n      limits: cfg.limits,\n      headers,\n      conType,\n      highWaterMark: undefined,\n      fileHwm: undefined,\n      defCharset: undefined,\n      defParamCharset: undefined,\n      preservePath: false,\n    };\n    if (cfg.highWaterMark)\n      instanceCfg.highWaterMark = cfg.highWaterMark;\n    if (cfg.fileHwm)\n      instanceCfg.fileHwm = cfg.fileHwm;\n    instanceCfg.defCharset = cfg.defCharset;\n    instanceCfg.defParamCharset = cfg.defParamCharset;\n    instanceCfg.preservePath = cfg.preservePath;\n    return new type(instanceCfg);\n  }\n\n  throw new Error(`Unsupported content type: ${headers['content-type']}`);\n}\n\n// Note: types are explicitly listed here for easier bundling\n// See: https://github.com/mscdex/busboy/issues/121\nconst TYPES = [\n  require('./types/multipart'),\n  require('./types/urlencoded'),\n].filter(function(typemod) { return typeof typemod.detect === 'function'; });\n\nmodule.exports = (cfg) => {\n  if (typeof cfg !== 'object' || cfg === null)\n    cfg = {};\n\n  if (typeof cfg.headers !== 'object'\n      || cfg.headers === null\n      || typeof cfg.headers['content-type'] !== 'string') {\n    throw new Error('Missing Content-Type');\n  }\n\n  return getInstance(cfg);\n};\n", "var reFirstKey = /^[^\\[]*/\nvar reDigitPath = /^\\[(\\d+)\\]/\nvar reNormalPath = /^\\[([^\\]]+)\\]/\n\nfunction parsePath (key) {\n  function failure () {\n    return [{ type: 'object', key: key, last: true }]\n  }\n\n  var firstKey = reFirstKey.exec(key)[0]\n  if (!firstKey) return failure()\n\n  var len = key.length\n  var pos = firstKey.length\n  var tail = { type: 'object', key: firstKey }\n  var steps = [tail]\n\n  while (pos < len) {\n    var m\n\n    if (key[pos] === '[' && key[pos + 1] === ']') {\n      pos += 2\n      tail.append = true\n      if (pos !== len) return failure()\n      continue\n    }\n\n    m = reDigitPath.exec(key.substring(pos))\n    if (m !== null) {\n      pos += m[0].length\n      tail.nextType = 'array'\n      tail = { type: 'array', key: parseInt(m[1], 10) }\n      steps.push(tail)\n      continue\n    }\n\n    m = reNormalPath.exec(key.substring(pos))\n    if (m !== null) {\n      pos += m[0].length\n      tail.nextType = 'object'\n      tail = { type: 'object', key: m[1] }\n      steps.push(tail)\n      continue\n    }\n\n    return failure()\n  }\n\n  tail.last = true\n  return steps\n}\n\nmodule.exports = parsePath\n", "function valueType (value) {\n  if (value === undefined) return 'undefined'\n  if (Array.isArray(value)) return 'array'\n  if (typeof value === 'object') return 'object'\n  return 'scalar'\n}\n\nfunction setLastValue (context, step, currentValue, entryValue) {\n  switch (valueType(currentValue)) {\n    case 'undefined':\n      if (step.append) {\n        context[step.key] = [entryValue]\n      } else {\n        context[step.key] = entryValue\n      }\n      break\n    case 'array':\n      context[step.key].push(entryValue)\n      break\n    case 'object':\n      return setLastValue(currentValue, { type: 'object', key: '', last: true }, currentValue[''], entryValue)\n    case 'scalar':\n      context[step.key] = [context[step.key], entryValue]\n      break\n  }\n\n  return context\n}\n\nfunction setValue (context, step, currentValue, entryValue) {\n  if (step.last) return setLastValue(context, step, currentValue, entryValue)\n\n  var obj\n  switch (valueType(currentValue)) {\n    case 'undefined':\n      if (step.nextType === 'array') {\n        context[step.key] = []\n      } else {\n        context[step.key] = Object.create(null)\n      }\n      return context[step.key]\n    case 'object':\n      return context[step.key]\n    case 'array':\n      if (step.nextType === 'array') {\n        return currentValue\n      }\n\n      obj = Object.create(null)\n      context[step.key] = obj\n      currentValue.forEach(function (item, i) {\n        if (item !== undefined) obj['' + i] = item\n      })\n\n      return obj\n    case 'scalar':\n      obj = Object.create(null)\n      obj[''] = currentValue\n      context[step.key] = obj\n      return obj\n  }\n}\n\nmodule.exports = setValue\n", "var parsePath = require('./lib/parse-path')\nvar setValue = require('./lib/set-value')\n\nfunction appendField (store, key, value) {\n  var steps = parsePath(key)\n\n  steps.reduce(function (context, step) {\n    return setValue(context, step, context[step.key], value)\n  }, store)\n}\n\nmodule.exports = appendField\n", "var EventEmitter = require('events').EventEmitter\n\nfunction Counter () {\n  EventEmitter.call(this)\n  this.value = 0\n}\n\nCounter.prototype = Object.create(EventEmitter.prototype)\n\nCounter.prototype.increment = function increment () {\n  this.value++\n}\n\nCounter.prototype.decrement = function decrement () {\n  if (--this.value === 0) this.emit('zero')\n}\n\nCounter.prototype.isZero = function isZero () {\n  return (this.value === 0)\n}\n\nCounter.prototype.onceZero = function onceZero (fn) {\n  if (this.isZero()) return fn()\n\n  this.once('zero', fn)\n}\n\nmodule.exports = Counter\n", "var util = require('util')\n\nvar errorMessages = {\n  LIMIT_PART_COUNT: 'Too many parts',\n  LIMIT_FILE_SIZE: 'File too large',\n  LIMIT_FILE_COUNT: 'Too many files',\n  LIMIT_FIELD_KEY: 'Field name too long',\n  LIMIT_FIELD_VALUE: 'Field value too long',\n  LIMIT_FIELD_COUNT: 'Too many fields',\n  LIMIT_UNEXPECTED_FILE: 'Unexpected field',\n  MISSING_FIELD_NAME: 'Field name missing'\n}\n\nfunction MulterError (code, field) {\n  Error.captureStackTrace(this, this.constructor)\n  this.name = this.constructor.name\n  this.message = errorMessages[code]\n  this.code = code\n  if (field) this.field = field\n}\n\nutil.inherits(MulterError, Error)\n\nmodule.exports = MulterError\n", "function arrayRemove (arr, item) {\n  var idx = arr.indexOf(item)\n  if (~idx) arr.splice(idx, 1)\n}\n\nfunction FileAppender (strategy, req) {\n  this.strategy = strategy\n  this.req = req\n\n  switch (strategy) {\n    case 'NONE': break\n    case 'VALUE': break\n    case 'ARRAY': req.files = []; break\n    case 'OBJECT': req.files = Object.create(null); break\n    default: throw new Error('Unknown file strategy: ' + strategy)\n  }\n}\n\nFileAppender.prototype.insertPlaceholder = function (file) {\n  var placeholder = {\n    fieldname: file.fieldname\n  }\n\n  switch (this.strategy) {\n    case 'NONE': break\n    case 'VALUE': break\n    case 'ARRAY': this.req.files.push(placeholder); break\n    case 'OBJECT':\n      if (this.req.files[file.fieldname]) {\n        this.req.files[file.fieldname].push(placeholder)\n      } else {\n        this.req.files[file.fieldname] = [placeholder]\n      }\n      break\n  }\n\n  return placeholder\n}\n\nFileAppender.prototype.removePlaceholder = function (placeholder) {\n  switch (this.strategy) {\n    case 'NONE': break\n    case 'VALUE': break\n    case 'ARRAY': arrayRemove(this.req.files, placeholder); break\n    case 'OBJECT':\n      if (this.req.files[placeholder.fieldname].length === 1) {\n        delete this.req.files[placeholder.fieldname]\n      } else {\n        arrayRemove(this.req.files[placeholder.fieldname], placeholder)\n      }\n      break\n  }\n}\n\nFileAppender.prototype.replacePlaceholder = function (placeholder, file) {\n  if (this.strategy === 'VALUE') {\n    this.req.file = file\n    return\n  }\n\n  delete placeholder.fieldname\n  Object.assign(placeholder, file)\n}\n\nmodule.exports = FileAppender\n", "function removeUploadedFiles (uploadedFiles, remove, cb) {\n  var length = uploadedFiles.length\n  var errors = []\n\n  if (length === 0) return cb(null, errors)\n\n  function handleFile (idx) {\n    var file = uploadedFiles[idx]\n\n    remove(file, function (err) {\n      if (err) {\n        err.file = file\n        err.field = file.fieldname\n        errors.push(err)\n      }\n\n      if (idx < length - 1) {\n        setImmediate(function () { handleFile(idx + 1) })\n      } else {\n        cb(null, errors)\n      }\n    })\n  }\n\n  handleFile(0)\n}\n\nmodule.exports = removeUploadedFiles\n", "var is = require('type-is')\nvar Busboy = require('busboy')\nvar appendField = require('append-field')\n\nvar Counter = require('./counter')\nvar MulterError = require('./multer-error')\nvar FileAppender = require('./file-appender')\nvar removeUploadedFiles = require('./remove-uploaded-files')\n\nfunction drainStream (stream) {\n  stream.on('readable', () => {\n    while (stream.read() !== null) {}\n  })\n}\n\nfunction makeMiddleware (setup) {\n  return function multerMiddleware (req, res, next) {\n    if (!is(req, ['multipart'])) return next()\n\n    var options = setup()\n\n    var limits = options.limits\n    var storage = options.storage\n    var fileFilter = options.fileFilter\n    var fileStrategy = options.fileStrategy\n    var preservePath = options.preservePath\n    var defParamCharset = options.defParamCharset\n\n    req.body = Object.create(null)\n\n    var busboy\n    var appender = null\n    var isDone = false\n    var readFinished = false\n    var errorOccured = false\n    var pendingWrites = new Counter()\n    var uploadedFiles = []\n\n    function done (err) {\n      var called = false\n      function onFinished () {\n        if (called) return\n        called = true\n        next(err)\n      }\n\n      if (isDone) return\n      isDone = true\n      if (busboy) {\n        req.unpipe(busboy)\n        setImmediate(() => {\n          busboy.removeAllListeners()\n        })\n      }\n      drainStream(req)\n      req.resume()\n\n      // - if responding with an error, drain request body before calling\n      //     next(err) -- avoids EPIPE on the client (server closing connection\n      //     while the client is still sending the request body)\n      // - also listen for 'close' so we don't hang when the client aborts (stream may never 'end')\n      // - skip waiting if the stream is already destroyed (e.g. client aborted)\n      if (err && req.readable && !req.destroyed) {\n        req.once('end', onFinished)\n        req.once('error', onFinished)\n        req.once('close', onFinished)\n        return\n      }\n      next(err)\n    }\n\n    function indicateDone () {\n      if (readFinished && pendingWrites.isZero() && !errorOccured) done()\n    }\n\n    function abortWithError (uploadError, skipPendingWait) {\n      if (errorOccured) return\n      errorOccured = true\n\n      function finishAbort () {\n        function remove (file, cb) {\n          storage._removeFile(req, file, cb)\n        }\n\n        removeUploadedFiles(uploadedFiles, remove, function (err, storageErrors) {\n          if (err) return done(err)\n\n          uploadError.storageErrors = storageErrors\n          done(uploadError)\n        })\n      }\n\n      if (skipPendingWait) {\n        finishAbort()\n      } else {\n        pendingWrites.onceZero(finishAbort)\n      }\n    }\n\n    function abortWithCode (code, optionalField) {\n      abortWithError(new MulterError(code, optionalField))\n    }\n\n    function handleRequestFailure (err) {\n      if (isDone) return\n      if (busboy) {\n        req.unpipe(busboy)\n        busboy.destroy(err)\n      }\n      abortWithError(err, true)\n    }\n\n    req.on('error', function (err) {\n      handleRequestFailure(err || new Error('Request error'))\n    })\n\n    req.on('aborted', function () {\n      handleRequestFailure(new Error('Request aborted'))\n    })\n\n    req.on('close', function () {\n      if (req.readableEnded) return\n      handleRequestFailure(new Error('Request closed'))\n    })\n\n    try {\n      busboy = Busboy({\n        headers: req.headers,\n        limits: limits,\n        preservePath: preservePath,\n        defParamCharset: defParamCharset\n      })\n    } catch (err) {\n      return next(err)\n    }\n\n    appender = new FileAppender(fileStrategy, req)\n\n    // handle text field data\n    busboy.on('field', function (fieldname, value, { nameTruncated, valueTruncated }) {\n      if (fieldname == null) return abortWithCode('MISSING_FIELD_NAME')\n      if (nameTruncated) return abortWithCode('LIMIT_FIELD_KEY')\n      if (valueTruncated) return abortWithCode('LIMIT_FIELD_VALUE', fieldname)\n\n      // Work around bug in Busboy (https://github.com/mscdex/busboy/issues/6)\n      if (limits && Object.prototype.hasOwnProperty.call(limits, 'fieldNameSize')) {\n        if (fieldname.length > limits.fieldNameSize) return abortWithCode('LIMIT_FIELD_KEY')\n      }\n\n      appendField(req.body, fieldname, value)\n    })\n\n    // handle files\n    busboy.on('file', function (fieldname, fileStream, { filename, encoding, mimeType }) {\n      var pendingWritesIncremented = false\n\n      fileStream.on('error', function (err) {\n        if (pendingWritesIncremented) {\n          pendingWrites.decrement()\n        }\n        abortWithError(err)\n      })\n\n      if (fieldname == null) return abortWithCode('MISSING_FIELD_NAME')\n\n      // don't attach to the files object, if there is no file\n      if (!filename) return fileStream.resume()\n\n      // Work around bug in Busboy (https://github.com/mscdex/busboy/issues/6)\n      if (limits && Object.prototype.hasOwnProperty.call(limits, 'fieldNameSize')) {\n        if (fieldname.length > limits.fieldNameSize) return abortWithCode('LIMIT_FIELD_KEY')\n      }\n\n      var file = {\n        fieldname: fieldname,\n        originalname: filename,\n        encoding: encoding,\n        mimetype: mimeType\n      }\n\n      var placeholder = appender.insertPlaceholder(file)\n\n      fileFilter(req, file, function (err, includeFile) {\n        if (errorOccured) {\n          appender.removePlaceholder(placeholder)\n          return fileStream.resume()\n        }\n\n        if (err) {\n          appender.removePlaceholder(placeholder)\n          return abortWithError(err)\n        }\n\n        if (!includeFile) {\n          appender.removePlaceholder(placeholder)\n          return fileStream.resume()\n        }\n\n        var aborting = false\n        pendingWritesIncremented = true\n        pendingWrites.increment()\n\n        Object.defineProperty(file, 'stream', {\n          configurable: true,\n          enumerable: false,\n          value: fileStream\n        })\n\n        fileStream.on('limit', function () {\n          aborting = true\n          abortWithCode('LIMIT_FILE_SIZE', fieldname)\n        })\n\n        storage._handleFile(req, file, function (err, info) {\n          if (aborting) {\n            appender.removePlaceholder(placeholder)\n            uploadedFiles.push({ ...file, ...info })\n            return pendingWrites.decrement()\n          }\n\n          if (err) {\n            appender.removePlaceholder(placeholder)\n            pendingWrites.decrement()\n            return abortWithError(err)\n          }\n\n          var fileInfo = { ...file, ...info }\n\n          appender.replacePlaceholder(placeholder, fileInfo)\n          uploadedFiles.push(fileInfo)\n          pendingWrites.decrement()\n          indicateDone()\n        })\n      })\n    })\n\n    busboy.on('error', function (err) { abortWithError(err) })\n    busboy.on('partsLimit', function () { abortWithCode('LIMIT_PART_COUNT') })\n    busboy.on('filesLimit', function () { abortWithCode('LIMIT_FILE_COUNT') })\n    busboy.on('fieldsLimit', function () { abortWithCode('LIMIT_FIELD_COUNT') })\n    busboy.on('close', function () {\n      readFinished = true\n      indicateDone()\n    })\n\n    req.pipe(busboy)\n  }\n}\n\nmodule.exports = makeMiddleware\n", "var fs = require('fs')\nvar os = require('os')\nvar path = require('path')\nvar crypto = require('crypto')\n\nfunction getFilename (req, file, cb) {\n  crypto.randomBytes(16, function (err, raw) {\n    cb(err, err ? undefined : raw.toString('hex'))\n  })\n}\n\nfunction getDestination (req, file, cb) {\n  cb(null, os.tmpdir())\n}\n\nfunction DiskStorage (opts) {\n  this.getFilename = (opts.filename || getFilename)\n\n  if (typeof opts.destination === 'string') {\n    fs.mkdirSync(opts.destination, { recursive: true })\n    this.getDestination = function ($0, $1, cb) { cb(null, opts.destination) }\n  } else {\n    this.getDestination = (opts.destination || getDestination)\n  }\n}\n\nDiskStorage.prototype._handleFile = function _handleFile (req, file, cb) {\n  var that = this\n\n  that.getDestination(req, file, function (err, destination) {\n    if (err) return cb(err)\n\n    that.getFilename(req, file, function (err, filename) {\n      if (err) return cb(err)\n\n      var finalPath = path.join(destination, filename)\n      var outStream = fs.createWriteStream(finalPath)\n\n      file.stream.pipe(outStream)\n      outStream.on('error', cb)\n      outStream.on('finish', function () {\n        cb(null, {\n          destination: destination,\n          filename: filename,\n          path: finalPath,\n          size: outStream.bytesWritten\n        })\n      })\n    })\n  })\n}\n\nDiskStorage.prototype._removeFile = function _removeFile (req, file, cb) {\n  var path = file.path\n\n  delete file.destination\n  delete file.filename\n  delete file.path\n\n  fs.unlink(path, cb)\n}\n\nmodule.exports = function (opts) {\n  return new DiskStorage(opts)\n}\n", "module.exports = require('stream');\n", "'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n  Buffer = _require.Buffer;\nvar _require2 = require('util'),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var entry = {\n        data: v,\n        next: this.head\n      };\n      if (this.length === 0) this.tail = entry;\n      this.head = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) ret += s + p.data;\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, i);\n        i += p.data.length;\n        p = p.next;\n      }\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes or characters from the buffered data.\n  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    }\n\n    // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();", "'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\n    }\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n  return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};", "'use strict';\n\nconst codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error\n  }\n\n  function getMessage (arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message\n    } else {\n      return message(arg1, arg2, arg3)\n    }\n  }\n\n  class NodeError extends Base {\n    constructor (arg1, arg2, arg3) {\n      super(getMessage(arg1, arg2, arg3));\n    }\n  }\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n\n  codes[code] = NodeError;\n}\n\n// https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    const len = expected.length;\n    expected = expected.map((i) => String(i));\n    if (len > 2) {\n      return `one of ${thing} ${expected.slice(0, len - 1).join(', ')}, or ` +\n             expected[len - 1];\n    } else if (len === 2) {\n      return `one of ${thing} ${expected[0]} or ${expected[1]}`;\n    } else {\n      return `of ${thing} ${expected[0]}`;\n    }\n  } else {\n    return `of ${thing} ${String(expected)}`;\n  }\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\nfunction startsWith(str, search, pos) {\n\treturn str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\nfunction endsWith(str, search, this_len) {\n\tif (this_len === undefined || this_len > str.length) {\n\t\tthis_len = str.length;\n\t}\n\treturn str.substring(this_len - search.length, this_len) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"'\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  let determiner;\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  let msg;\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`;\n  } else {\n    const type = includes(name, '.') ? 'property' : 'argument';\n    msg = `The \"${name}\" ${type} ${determiner} ${oneOf(expected, 'type')}`;\n  }\n\n  msg += `. Received type ${typeof actual}`;\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented'\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\n\nmodule.exports.codes = codes;\n", "'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n    return Math.floor(hwm);\n  }\n\n  // Default value\n  return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\n};", "\n/**\n * For Node.js, simply re-export the core `util.deprecate` function.\n */\n\nmodule.exports = require('util').deprecate;\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n  ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'finish' (and potentially 'end')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex);\n\n  // legacy.\n  this.writable = true;\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n    if (typeof options.writev === 'function') this._writev = options.writev;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END();\n  // TODO: defer error events consistently everywhere, not just the cb\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n  return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n  return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n      if (state.autoDestroy) {\n        // In case of duplex streams we need a way to detect\n        // if the readable side is ready for autoDestroy as well\n        var rState = stream._readableState;\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n  return need;\n}\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n  Readable.call(this, options);\n  Writable.call(this, options);\n  this.allowHalfOpen = true;\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n  self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}", "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    callback.apply(this, args);\n  };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n  var writableEnded = stream._writableState && stream._writableState.finished;\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n  var onclose = function onclose() {\n    var err;\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\n    stream.removeListener('complete', onfinish);\n    stream.removeListener('abort', onclose);\n    stream.removeListener('request', onrequest);\n    if (stream.req) stream.req.removeListener('finish', onfinish);\n    stream.removeListener('end', onlegacyfinish);\n    stream.removeListener('close', onlegacyfinish);\n    stream.removeListener('finish', onfinish);\n    stream.removeListener('end', onend);\n    stream.removeListener('error', onerror);\n    stream.removeListener('close', onclose);\n  };\n}\nmodule.exports = eos;", "'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n  if (resolve !== null) {\n    var data = iter[kStream].read();\n    // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n  next: function next() {\n    var _this = this;\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    }\n\n    // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n    var lastPromise = this[kLastPromise];\n    var promise;\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n      promise = new Promise(this[kHandlePromise]);\n    }\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject];\n      // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n      iterator[kError] = err;\n      return;\n    }\n    var resolve = iterator[kLastResolve];\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;", "'use strict';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar ERR_INVALID_ARG_TYPE = require('../../../errors').codes.ERR_INVALID_ARG_TYPE;\nfunction from(Readable, iterable, opts) {\n  var iterator;\n  if (iterable && typeof iterable.next === 'function') {\n    iterator = iterable;\n  } else if (iterable && iterable[Symbol.asyncIterator]) iterator = iterable[Symbol.asyncIterator]();else if (iterable && iterable[Symbol.iterator]) iterator = iterable[Symbol.iterator]();else throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable);\n  var readable = new Readable(_objectSpread({\n    objectMode: true\n  }, opts));\n  // Reading boolean to protect against _read\n  // being called before last iteration completion.\n  var reading = false;\n  readable._read = function () {\n    if (!reading) {\n      reading = true;\n      next();\n    }\n  };\n  function next() {\n    return _next2.apply(this, arguments);\n  }\n  function _next2() {\n    _next2 = _asyncToGenerator(function* () {\n      try {\n        var _yield$iterator$next = yield iterator.next(),\n          value = _yield$iterator$next.value,\n          done = _yield$iterator$next.done;\n        if (done) {\n          readable.push(null);\n        } else if (readable.push(yield value)) {\n          next();\n        } else {\n          reading = false;\n        }\n      } catch (err) {\n        readable.destroy(err);\n      }\n    });\n    return _next2.apply(this, arguments);\n  }\n  return readable;\n}\nmodule.exports = from;\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'end' (and potentially 'finish')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex);\n\n  // legacy\n  this.readable = true;\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n  Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n      } else if (state.destroyed) {\n        return false;\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    state.awaitDrain = 0;\n    stream.emit('data', chunk);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n  return er;\n}\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  var decoder = new StringDecoder(enc);\n  this._readableState.decoder = decoder;\n  // If setEncoding(null), decoder.encoding equals utf8\n  this._readableState.encoding = this._readableState.decoder.encoding;\n\n  // Iterate over current buffer to convert already stored Buffers:\n  var p = this._readableState.buffer.head;\n  var content = '';\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n  this._readableState.buffer.clear();\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n  if (ret !== null) this.emit('data', ret);\n  return ret;\n};\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n  if (state.sync) {\n    // if we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call\n    emitReadable(stream);\n  } else {\n    // emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false;\n    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  debug('emitReadable', state.needReadable, state.emittedReadable);\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    process.nextTick(emitReadable_, stream);\n  }\n}\nfunction emitReadable_(stream) {\n  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n  if (!state.destroyed && (state.length || state.ended)) {\n    stream.emit('readable');\n    state.emittedReadable = false;\n  }\n\n  // The stream needs another readable event if\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    process.nextTick(maybeReadMore_, stream, state);\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var len = state.length;\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n    if (ret === false) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n  return dest;\n};\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n      hasUnpiped: false\n    });\n    return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n  dest.emit('unpipe', this, unpipeInfo);\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n  var state = this._readableState;\n  if (ev === 'data') {\n    // update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0;\n\n    // Try start flowing on next tick if stream isn't explicitly paused\n    if (state.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.flowing = false;\n      state.emittedReadable = false;\n      debug('on readable', state.length, state.reading);\n      if (state.length) {\n        emitReadable(this);\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this);\n      }\n    }\n  }\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n  var res = Stream.prototype.removeListener.call(this, ev, fn);\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n  var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nfunction updateReadableListening(self) {\n  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n  if (state.resumeScheduled && !state.paused) {\n    // flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true;\n\n    // crude way to check if we should resume\n  } else if (self.listenerCount('data') > 0) {\n    self.resume();\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    // we flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume()\n    state.flowing = !state.readableListening;\n    resume(this, state);\n  }\n  state.paused = false;\n  return this;\n};\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    process.nextTick(resume_, stream, state);\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading);\n  if (!state.reading) {\n    stream.read(0);\n  }\n  state.resumeScheduled = false;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (this._readableState.flowing !== false) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  this._readableState.paused = true;\n  return this;\n};\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n  return this;\n};\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n    }\n    return createReadableStreamAsyncIterator(this);\n  };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = state.buffer.consume(n, state.decoder);\n  }\n  return ret;\n}\nfunction endReadable(stream) {\n  var state = stream._readableState;\n  debug('endReadable', state.endEmitted);\n  if (!state.endEmitted) {\n    state.ended = true;\n    process.nextTick(endReadableNT, state, stream);\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length);\n\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n    if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well\n      var wState = stream._writableState;\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = require('./internal/streams/from');\n    }\n    return from(Readable, iterable, opts);\n  };\n}\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n  ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n  var _this = this;\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n  Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};", "// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\nvar _require$codes = require('../../../errors').codes,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = require('./end-of-stream');\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true;\n\n    // request.destroy just do .end - .abort is what we want\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\nfunction call(fn) {\n  fn();\n}\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\nmodule.exports = pipeline;", "var Stream = require('stream');\nif (process.env.READABLE_STREAM === 'disable' && Stream) {\n  module.exports = Stream.Readable;\n  Object.assign(module.exports, Stream);\n  module.exports.Stream = Stream;\n} else {\n  exports = module.exports = require('./lib/_stream_readable.js');\n  exports.Stream = Stream || exports;\n  exports.Readable = exports;\n  exports.Writable = require('./lib/_stream_writable.js');\n  exports.Duplex = require('./lib/_stream_duplex.js');\n  exports.Transform = require('./lib/_stream_transform.js');\n  exports.PassThrough = require('./lib/_stream_passthrough.js');\n  exports.finished = require('./lib/internal/streams/end-of-stream.js');\n  exports.pipeline = require('./lib/internal/streams/pipeline.js');\n}\n", "/* eslint-disable node/no-deprecated-api */\n\nvar toString = Object.prototype.toString\n\nvar isModern = (\n  typeof Buffer !== 'undefined' &&\n  typeof Buffer.alloc === 'function' &&\n  typeof Buffer.allocUnsafe === 'function' &&\n  typeof Buffer.from === 'function'\n)\n\nfunction isArrayBuffer (input) {\n  return toString.call(input).slice(8, -1) === 'ArrayBuffer'\n}\n\nfunction fromArrayBuffer (obj, byteOffset, length) {\n  byteOffset >>>= 0\n\n  var maxLength = obj.byteLength - byteOffset\n\n  if (maxLength < 0) {\n    throw new RangeError(\"'offset' is out of bounds\")\n  }\n\n  if (length === undefined) {\n    length = maxLength\n  } else {\n    length >>>= 0\n\n    if (length > maxLength) {\n      throw new RangeError(\"'length' is out of bounds\")\n    }\n  }\n\n  return isModern\n    ? Buffer.from(obj.slice(byteOffset, byteOffset + length))\n    : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length)))\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  return isModern\n    ? Buffer.from(string, encoding)\n    : new Buffer(string, encoding)\n}\n\nfunction bufferFrom (value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (isArrayBuffer(value)) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  return isModern\n    ? Buffer.from(value)\n    : new Buffer(value)\n}\n\nmodule.exports = bufferFrom\n", "var undefined = (void 0); // Paranoia\n\n// Beyond this value, index getters/setters (i.e. array[0], array[1]) are so slow to\n// create, and consume so much memory, that the browser appears frozen.\nvar MAX_ARRAY_LENGTH = 1e5;\n\n// Approximations of internal ECMAScript conversion functions\nvar ECMAScript = (function() {\n  // Stash a copy in case other scripts modify these\n  var opts = Object.prototype.toString,\n      ophop = Object.prototype.hasOwnProperty;\n\n  return {\n    // Class returns internal [[Class]] property, used to avoid cross-frame instanceof issues:\n    Class: function(v) { return opts.call(v).replace(/^\\[object *|\\]$/g, ''); },\n    HasProperty: function(o, p) { return p in o; },\n    HasOwnProperty: function(o, p) { return ophop.call(o, p); },\n    IsCallable: function(o) { return typeof o === 'function'; },\n    ToInt32: function(v) { return v >> 0; },\n    ToUint32: function(v) { return v >>> 0; }\n  };\n}());\n\n// Snapshot intrinsics\nvar LN2 = Math.LN2,\n    abs = Math.abs,\n    floor = Math.floor,\n    log = Math.log,\n    min = Math.min,\n    pow = Math.pow,\n    round = Math.round;\n\n// ES5: lock down object properties\nfunction configureProperties(obj) {\n  if (getOwnPropNames && defineProp) {\n    var props = getOwnPropNames(obj), i;\n    for (i = 0; i < props.length; i += 1) {\n      defineProp(obj, props[i], {\n        value: obj[props[i]],\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n}\n\n// emulate ES5 getter/setter API using legacy APIs\n// http://blogs.msdn.com/b/ie/archive/2010/09/07/transitioning-existing-code-to-the-es5-getter-setter-apis.aspx\n// (second clause tests for Object.defineProperty() in IE<9 that only supports extending DOM prototypes, but\n// note that IE<9 does not support __defineGetter__ or __defineSetter__ so it just renders the method harmless)\nvar defineProp\nif (Object.defineProperty && (function() {\n      try {\n        Object.defineProperty({}, 'x', {});\n        return true;\n      } catch (e) {\n        return false;\n      }\n    })()) {\n  defineProp = Object.defineProperty;\n} else {\n  defineProp = function(o, p, desc) {\n    if (!o === Object(o)) throw new TypeError(\"Object.defineProperty called on non-object\");\n    if (ECMAScript.HasProperty(desc, 'get') && Object.prototype.__defineGetter__) { Object.prototype.__defineGetter__.call(o, p, desc.get); }\n    if (ECMAScript.HasProperty(desc, 'set') && Object.prototype.__defineSetter__) { Object.prototype.__defineSetter__.call(o, p, desc.set); }\n    if (ECMAScript.HasProperty(desc, 'value')) { o[p] = desc.value; }\n    return o;\n  };\n}\n\nvar getOwnPropNames = Object.getOwnPropertyNames || function (o) {\n  if (o !== Object(o)) throw new TypeError(\"Object.getOwnPropertyNames called on non-object\");\n  var props = [], p;\n  for (p in o) {\n    if (ECMAScript.HasOwnProperty(o, p)) {\n      props.push(p);\n    }\n  }\n  return props;\n};\n\n// ES5: Make obj[index] an alias for obj._getter(index)/obj._setter(index, value)\n// for index in 0 ... obj.length\nfunction makeArrayAccessors(obj) {\n  if (!defineProp) { return; }\n\n  if (obj.length > MAX_ARRAY_LENGTH) throw new RangeError(\"Array too large for polyfill\");\n\n  function makeArrayAccessor(index) {\n    defineProp(obj, index, {\n      'get': function() { return obj._getter(index); },\n      'set': function(v) { obj._setter(index, v); },\n      enumerable: true,\n      configurable: false\n    });\n  }\n\n  var i;\n  for (i = 0; i < obj.length; i += 1) {\n    makeArrayAccessor(i);\n  }\n}\n\n// Internal conversion functions:\n//    pack<Type>()   - take a number (interpreted as Type), output a byte array\n//    unpack<Type>() - take a byte array, output a Type-like number\n\nfunction as_signed(value, bits) { var s = 32 - bits; return (value << s) >> s; }\nfunction as_unsigned(value, bits) { var s = 32 - bits; return (value << s) >>> s; }\n\nfunction packI8(n) { return [n & 0xff]; }\nfunction unpackI8(bytes) { return as_signed(bytes[0], 8); }\n\nfunction packU8(n) { return [n & 0xff]; }\nfunction unpackU8(bytes) { return as_unsigned(bytes[0], 8); }\n\nfunction packU8Clamped(n) { n = round(Number(n)); return [n < 0 ? 0 : n > 0xff ? 0xff : n & 0xff]; }\n\nfunction packI16(n) { return [(n >> 8) & 0xff, n & 0xff]; }\nfunction unpackI16(bytes) { return as_signed(bytes[0] << 8 | bytes[1], 16); }\n\nfunction packU16(n) { return [(n >> 8) & 0xff, n & 0xff]; }\nfunction unpackU16(bytes) { return as_unsigned(bytes[0] << 8 | bytes[1], 16); }\n\nfunction packI32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; }\nfunction unpackI32(bytes) { return as_signed(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); }\n\nfunction packU32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; }\nfunction unpackU32(bytes) { return as_unsigned(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); }\n\nfunction packIEEE754(v, ebits, fbits) {\n\n  var bias = (1 << (ebits - 1)) - 1,\n      s, e, f, ln,\n      i, bits, str, bytes;\n\n  function roundToEven(n) {\n    var w = floor(n), f = n - w;\n    if (f < 0.5)\n      return w;\n    if (f > 0.5)\n      return w + 1;\n    return w % 2 ? w + 1 : w;\n  }\n\n  // Compute sign, exponent, fraction\n  if (v !== v) {\n    // NaN\n    // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping\n    e = (1 << ebits) - 1; f = pow(2, fbits - 1); s = 0;\n  } else if (v === Infinity || v === -Infinity) {\n    e = (1 << ebits) - 1; f = 0; s = (v < 0) ? 1 : 0;\n  } else if (v === 0) {\n    e = 0; f = 0; s = (1 / v === -Infinity) ? 1 : 0;\n  } else {\n    s = v < 0;\n    v = abs(v);\n\n    if (v >= pow(2, 1 - bias)) {\n      e = min(floor(log(v) / LN2), 1023);\n      f = roundToEven(v / pow(2, e) * pow(2, fbits));\n      if (f / pow(2, fbits) >= 2) {\n        e = e + 1;\n        f = 1;\n      }\n      if (e > bias) {\n        // Overflow\n        e = (1 << ebits) - 1;\n        f = 0;\n      } else {\n        // Normalized\n        e = e + bias;\n        f = f - pow(2, fbits);\n      }\n    } else {\n      // Denormalized\n      e = 0;\n      f = roundToEven(v / pow(2, 1 - bias - fbits));\n    }\n  }\n\n  // Pack sign, exponent, fraction\n  bits = [];\n  for (i = fbits; i; i -= 1) { bits.push(f % 2 ? 1 : 0); f = floor(f / 2); }\n  for (i = ebits; i; i -= 1) { bits.push(e % 2 ? 1 : 0); e = floor(e / 2); }\n  bits.push(s ? 1 : 0);\n  bits.reverse();\n  str = bits.join('');\n\n  // Bits to bytes\n  bytes = [];\n  while (str.length) {\n    bytes.push(parseInt(str.substring(0, 8), 2));\n    str = str.substring(8);\n  }\n  return bytes;\n}\n\nfunction unpackIEEE754(bytes, ebits, fbits) {\n\n  // Bytes to bits\n  var bits = [], i, j, b, str,\n      bias, s, e, f;\n\n  for (i = bytes.length; i; i -= 1) {\n    b = bytes[i - 1];\n    for (j = 8; j; j -= 1) {\n      bits.push(b % 2 ? 1 : 0); b = b >> 1;\n    }\n  }\n  bits.reverse();\n  str = bits.join('');\n\n  // Unpack sign, exponent, fraction\n  bias = (1 << (ebits - 1)) - 1;\n  s = parseInt(str.substring(0, 1), 2) ? -1 : 1;\n  e = parseInt(str.substring(1, 1 + ebits), 2);\n  f = parseInt(str.substring(1 + ebits), 2);\n\n  // Produce number\n  if (e === (1 << ebits) - 1) {\n    return f !== 0 ? NaN : s * Infinity;\n  } else if (e > 0) {\n    // Normalized\n    return s * pow(2, e - bias) * (1 + f / pow(2, fbits));\n  } else if (f !== 0) {\n    // Denormalized\n    return s * pow(2, -(bias - 1)) * (f / pow(2, fbits));\n  } else {\n    return s < 0 ? -0 : 0;\n  }\n}\n\nfunction unpackF64(b) { return unpackIEEE754(b, 11, 52); }\nfunction packF64(v) { return packIEEE754(v, 11, 52); }\nfunction unpackF32(b) { return unpackIEEE754(b, 8, 23); }\nfunction packF32(v) { return packIEEE754(v, 8, 23); }\n\n\n//\n// 3 The ArrayBuffer Type\n//\n\n(function() {\n\n  /** @constructor */\n  var ArrayBuffer = function ArrayBuffer(length) {\n    length = ECMAScript.ToInt32(length);\n    if (length < 0) throw new RangeError('ArrayBuffer size is not a small enough positive integer');\n\n    this.byteLength = length;\n    this._bytes = [];\n    this._bytes.length = length;\n\n    var i;\n    for (i = 0; i < this.byteLength; i += 1) {\n      this._bytes[i] = 0;\n    }\n\n    configureProperties(this);\n  };\n\n  exports.ArrayBuffer = exports.ArrayBuffer || ArrayBuffer;\n\n  //\n  // 4 The ArrayBufferView Type\n  //\n\n  // NOTE: this constructor is not exported\n  /** @constructor */\n  var ArrayBufferView = function ArrayBufferView() {\n    //this.buffer = null;\n    //this.byteOffset = 0;\n    //this.byteLength = 0;\n  };\n\n  //\n  // 5 The Typed Array View Types\n  //\n\n  function makeConstructor(bytesPerElement, pack, unpack) {\n    // Each TypedArray type requires a distinct constructor instance with\n    // identical logic, which this produces.\n\n    var ctor;\n    ctor = function(buffer, byteOffset, length) {\n      var array, sequence, i, s;\n\n      if (!arguments.length || typeof arguments[0] === 'number') {\n        // Constructor(unsigned long length)\n        this.length = ECMAScript.ToInt32(arguments[0]);\n        if (length < 0) throw new RangeError('ArrayBufferView size is not a small enough positive integer');\n\n        this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        this.buffer = new ArrayBuffer(this.byteLength);\n        this.byteOffset = 0;\n      } else if (typeof arguments[0] === 'object' && arguments[0].constructor === ctor) {\n        // Constructor(TypedArray array)\n        array = arguments[0];\n\n        this.length = array.length;\n        this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        this.buffer = new ArrayBuffer(this.byteLength);\n        this.byteOffset = 0;\n\n        for (i = 0; i < this.length; i += 1) {\n          this._setter(i, array._getter(i));\n        }\n      } else if (typeof arguments[0] === 'object' &&\n                 !(arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) {\n        // Constructor(sequence<type> array)\n        sequence = arguments[0];\n\n        this.length = ECMAScript.ToUint32(sequence.length);\n        this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        this.buffer = new ArrayBuffer(this.byteLength);\n        this.byteOffset = 0;\n\n        for (i = 0; i < this.length; i += 1) {\n          s = sequence[i];\n          this._setter(i, Number(s));\n        }\n      } else if (typeof arguments[0] === 'object' &&\n                 (arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) {\n        // Constructor(ArrayBuffer buffer,\n        //             optional unsigned long byteOffset, optional unsigned long length)\n        this.buffer = buffer;\n\n        this.byteOffset = ECMAScript.ToUint32(byteOffset);\n        if (this.byteOffset > this.buffer.byteLength) {\n          throw new RangeError(\"byteOffset out of range\");\n        }\n\n        if (this.byteOffset % this.BYTES_PER_ELEMENT) {\n          // The given byteOffset must be a multiple of the element\n          // size of the specific type, otherwise an exception is raised.\n          throw new RangeError(\"ArrayBuffer length minus the byteOffset is not a multiple of the element size.\");\n        }\n\n        if (arguments.length < 3) {\n          this.byteLength = this.buffer.byteLength - this.byteOffset;\n\n          if (this.byteLength % this.BYTES_PER_ELEMENT) {\n            throw new RangeError(\"length of buffer minus byteOffset not a multiple of the element size\");\n          }\n          this.length = this.byteLength / this.BYTES_PER_ELEMENT;\n        } else {\n          this.length = ECMAScript.ToUint32(length);\n          this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        }\n\n        if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) {\n          throw new RangeError(\"byteOffset and length reference an area beyond the end of the buffer\");\n        }\n      } else {\n        throw new TypeError(\"Unexpected argument type(s)\");\n      }\n\n      this.constructor = ctor;\n\n      configureProperties(this);\n      makeArrayAccessors(this);\n    };\n\n    ctor.prototype = new ArrayBufferView();\n    ctor.prototype.BYTES_PER_ELEMENT = bytesPerElement;\n    ctor.prototype._pack = pack;\n    ctor.prototype._unpack = unpack;\n    ctor.BYTES_PER_ELEMENT = bytesPerElement;\n\n    // getter type (unsigned long index);\n    ctor.prototype._getter = function(index) {\n      if (arguments.length < 1) throw new SyntaxError(\"Not enough arguments\");\n\n      index = ECMAScript.ToUint32(index);\n      if (index >= this.length) {\n        return undefined;\n      }\n\n      var bytes = [], i, o;\n      for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT;\n           i < this.BYTES_PER_ELEMENT;\n           i += 1, o += 1) {\n        bytes.push(this.buffer._bytes[o]);\n      }\n      return this._unpack(bytes);\n    };\n\n    // NONSTANDARD: convenience alias for getter: type get(unsigned long index);\n    ctor.prototype.get = ctor.prototype._getter;\n\n    // setter void (unsigned long index, type value);\n    ctor.prototype._setter = function(index, value) {\n      if (arguments.length < 2) throw new SyntaxError(\"Not enough arguments\");\n\n      index = ECMAScript.ToUint32(index);\n      if (index >= this.length) {\n        return undefined;\n      }\n\n      var bytes = this._pack(value), i, o;\n      for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT;\n           i < this.BYTES_PER_ELEMENT;\n           i += 1, o += 1) {\n        this.buffer._bytes[o] = bytes[i];\n      }\n    };\n\n    // void set(TypedArray array, optional unsigned long offset);\n    // void set(sequence<type> array, optional unsigned long offset);\n    ctor.prototype.set = function(index, value) {\n      if (arguments.length < 1) throw new SyntaxError(\"Not enough arguments\");\n      var array, sequence, offset, len,\n          i, s, d,\n          byteOffset, byteLength, tmp;\n\n      if (typeof arguments[0] === 'object' && arguments[0].constructor === this.constructor) {\n        // void set(TypedArray array, optional unsigned long offset);\n        array = arguments[0];\n        offset = ECMAScript.ToUint32(arguments[1]);\n\n        if (offset + array.length > this.length) {\n          throw new RangeError(\"Offset plus length of array is out of range\");\n        }\n\n        byteOffset = this.byteOffset + offset * this.BYTES_PER_ELEMENT;\n        byteLength = array.length * this.BYTES_PER_ELEMENT;\n\n        if (array.buffer === this.buffer) {\n          tmp = [];\n          for (i = 0, s = array.byteOffset; i < byteLength; i += 1, s += 1) {\n            tmp[i] = array.buffer._bytes[s];\n          }\n          for (i = 0, d = byteOffset; i < byteLength; i += 1, d += 1) {\n            this.buffer._bytes[d] = tmp[i];\n          }\n        } else {\n          for (i = 0, s = array.byteOffset, d = byteOffset;\n               i < byteLength; i += 1, s += 1, d += 1) {\n            this.buffer._bytes[d] = array.buffer._bytes[s];\n          }\n        }\n      } else if (typeof arguments[0] === 'object' && typeof arguments[0].length !== 'undefined') {\n        // void set(sequence<type> array, optional unsigned long offset);\n        sequence = arguments[0];\n        len = ECMAScript.ToUint32(sequence.length);\n        offset = ECMAScript.ToUint32(arguments[1]);\n\n        if (offset + len > this.length) {\n          throw new RangeError(\"Offset plus length of array is out of range\");\n        }\n\n        for (i = 0; i < len; i += 1) {\n          s = sequence[i];\n          this._setter(offset + i, Number(s));\n        }\n      } else {\n        throw new TypeError(\"Unexpected argument type(s)\");\n      }\n    };\n\n    // TypedArray subarray(long begin, optional long end);\n    ctor.prototype.subarray = function(start, end) {\n      function clamp(v, min, max) { return v < min ? min : v > max ? max : v; }\n\n      start = ECMAScript.ToInt32(start);\n      end = ECMAScript.ToInt32(end);\n\n      if (arguments.length < 1) { start = 0; }\n      if (arguments.length < 2) { end = this.length; }\n\n      if (start < 0) { start = this.length + start; }\n      if (end < 0) { end = this.length + end; }\n\n      start = clamp(start, 0, this.length);\n      end = clamp(end, 0, this.length);\n\n      var len = end - start;\n      if (len < 0) {\n        len = 0;\n      }\n\n      return new this.constructor(\n        this.buffer, this.byteOffset + start * this.BYTES_PER_ELEMENT, len);\n    };\n\n    return ctor;\n  }\n\n  var Int8Array = makeConstructor(1, packI8, unpackI8);\n  var Uint8Array = makeConstructor(1, packU8, unpackU8);\n  var Uint8ClampedArray = makeConstructor(1, packU8Clamped, unpackU8);\n  var Int16Array = makeConstructor(2, packI16, unpackI16);\n  var Uint16Array = makeConstructor(2, packU16, unpackU16);\n  var Int32Array = makeConstructor(4, packI32, unpackI32);\n  var Uint32Array = makeConstructor(4, packU32, unpackU32);\n  var Float32Array = makeConstructor(4, packF32, unpackF32);\n  var Float64Array = makeConstructor(8, packF64, unpackF64);\n\n  exports.Int8Array = exports.Int8Array || Int8Array;\n  exports.Uint8Array = exports.Uint8Array || Uint8Array;\n  exports.Uint8ClampedArray = exports.Uint8ClampedArray || Uint8ClampedArray;\n  exports.Int16Array = exports.Int16Array || Int16Array;\n  exports.Uint16Array = exports.Uint16Array || Uint16Array;\n  exports.Int32Array = exports.Int32Array || Int32Array;\n  exports.Uint32Array = exports.Uint32Array || Uint32Array;\n  exports.Float32Array = exports.Float32Array || Float32Array;\n  exports.Float64Array = exports.Float64Array || Float64Array;\n}());\n\n//\n// 6 The DataView View Type\n//\n\n(function() {\n  function r(array, index) {\n    return ECMAScript.IsCallable(array.get) ? array.get(index) : array[index];\n  }\n\n  var IS_BIG_ENDIAN = (function() {\n    var u16array = new(exports.Uint16Array)([0x1234]),\n        u8array = new(exports.Uint8Array)(u16array.buffer);\n    return r(u8array, 0) === 0x12;\n  }());\n\n  // Constructor(ArrayBuffer buffer,\n  //             optional unsigned long byteOffset,\n  //             optional unsigned long byteLength)\n  /** @constructor */\n  var DataView = function DataView(buffer, byteOffset, byteLength) {\n    if (arguments.length === 0) {\n      buffer = new exports.ArrayBuffer(0);\n    } else if (!(buffer instanceof exports.ArrayBuffer || ECMAScript.Class(buffer) === 'ArrayBuffer')) {\n      throw new TypeError(\"TypeError\");\n    }\n\n    this.buffer = buffer || new exports.ArrayBuffer(0);\n\n    this.byteOffset = ECMAScript.ToUint32(byteOffset);\n    if (this.byteOffset > this.buffer.byteLength) {\n      throw new RangeError(\"byteOffset out of range\");\n    }\n\n    if (arguments.length < 3) {\n      this.byteLength = this.buffer.byteLength - this.byteOffset;\n    } else {\n      this.byteLength = ECMAScript.ToUint32(byteLength);\n    }\n\n    if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) {\n      throw new RangeError(\"byteOffset and length reference an area beyond the end of the buffer\");\n    }\n\n    configureProperties(this);\n  };\n\n  function makeGetter(arrayType) {\n    return function(byteOffset, littleEndian) {\n\n      byteOffset = ECMAScript.ToUint32(byteOffset);\n\n      if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) {\n        throw new RangeError(\"Array index out of range\");\n      }\n      byteOffset += this.byteOffset;\n\n      var uint8Array = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT),\n          bytes = [], i;\n      for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) {\n        bytes.push(r(uint8Array, i));\n      }\n\n      if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) {\n        bytes.reverse();\n      }\n\n      return r(new arrayType(new exports.Uint8Array(bytes).buffer), 0);\n    };\n  }\n\n  DataView.prototype.getUint8 = makeGetter(exports.Uint8Array);\n  DataView.prototype.getInt8 = makeGetter(exports.Int8Array);\n  DataView.prototype.getUint16 = makeGetter(exports.Uint16Array);\n  DataView.prototype.getInt16 = makeGetter(exports.Int16Array);\n  DataView.prototype.getUint32 = makeGetter(exports.Uint32Array);\n  DataView.prototype.getInt32 = makeGetter(exports.Int32Array);\n  DataView.prototype.getFloat32 = makeGetter(exports.Float32Array);\n  DataView.prototype.getFloat64 = makeGetter(exports.Float64Array);\n\n  function makeSetter(arrayType) {\n    return function(byteOffset, value, littleEndian) {\n\n      byteOffset = ECMAScript.ToUint32(byteOffset);\n      if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) {\n        throw new RangeError(\"Array index out of range\");\n      }\n\n      // Get bytes\n      var typeArray = new arrayType([value]),\n          byteArray = new exports.Uint8Array(typeArray.buffer),\n          bytes = [], i, byteView;\n\n      for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) {\n        bytes.push(r(byteArray, i));\n      }\n\n      // Flip if necessary\n      if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) {\n        bytes.reverse();\n      }\n\n      // Write them\n      byteView = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT);\n      byteView.set(bytes);\n    };\n  }\n\n  DataView.prototype.setUint8 = makeSetter(exports.Uint8Array);\n  DataView.prototype.setInt8 = makeSetter(exports.Int8Array);\n  DataView.prototype.setUint16 = makeSetter(exports.Uint16Array);\n  DataView.prototype.setInt16 = makeSetter(exports.Int16Array);\n  DataView.prototype.setUint32 = makeSetter(exports.Uint32Array);\n  DataView.prototype.setInt32 = makeSetter(exports.Int32Array);\n  DataView.prototype.setFloat32 = makeSetter(exports.Float32Array);\n  DataView.prototype.setFloat64 = makeSetter(exports.Float64Array);\n\n  exports.DataView = exports.DataView || DataView;\n\n}());\n", "var Writable = require('readable-stream').Writable\nvar inherits = require('inherits')\nvar bufferFrom = require('buffer-from')\n\nif (typeof Uint8Array === 'undefined') {\n  var U8 = require('typedarray').Uint8Array\n} else {\n  var U8 = Uint8Array\n}\n\nfunction ConcatStream(opts, cb) {\n  if (!(this instanceof ConcatStream)) return new ConcatStream(opts, cb)\n\n  if (typeof opts === 'function') {\n    cb = opts\n    opts = {}\n  }\n  if (!opts) opts = {}\n\n  var encoding = opts.encoding\n  var shouldInferEncoding = false\n\n  if (!encoding) {\n    shouldInferEncoding = true\n  } else {\n    encoding =  String(encoding).toLowerCase()\n    if (encoding === 'u8' || encoding === 'uint8') {\n      encoding = 'uint8array'\n    }\n  }\n\n  Writable.call(this, { objectMode: true })\n\n  this.encoding = encoding\n  this.shouldInferEncoding = shouldInferEncoding\n\n  if (cb) this.on('finish', function () { cb(this.getBody()) })\n  this.body = []\n}\n\nmodule.exports = ConcatStream\ninherits(ConcatStream, Writable)\n\nConcatStream.prototype._write = function(chunk, enc, next) {\n  this.body.push(chunk)\n  next()\n}\n\nConcatStream.prototype.inferEncoding = function (buff) {\n  var firstBuffer = buff === undefined ? this.body[0] : buff;\n  if (Buffer.isBuffer(firstBuffer)) return 'buffer'\n  if (typeof Uint8Array !== 'undefined' && firstBuffer instanceof Uint8Array) return 'uint8array'\n  if (Array.isArray(firstBuffer)) return 'array'\n  if (typeof firstBuffer === 'string') return 'string'\n  if (Object.prototype.toString.call(firstBuffer) === \"[object Object]\") return 'object'\n  return 'buffer'\n}\n\nConcatStream.prototype.getBody = function () {\n  if (!this.encoding && this.body.length === 0) return []\n  if (this.shouldInferEncoding) this.encoding = this.inferEncoding()\n  if (this.encoding === 'array') return arrayConcat(this.body)\n  if (this.encoding === 'string') return stringConcat(this.body)\n  if (this.encoding === 'buffer') return bufferConcat(this.body)\n  if (this.encoding === 'uint8array') return u8Concat(this.body)\n  return this.body\n}\n\nvar isArray = Array.isArray || function (arr) {\n  return Object.prototype.toString.call(arr) == '[object Array]'\n}\n\nfunction isArrayish (arr) {\n  return /Array\\]$/.test(Object.prototype.toString.call(arr))\n}\n\nfunction isBufferish (p) {\n  return typeof p === 'string' || isArrayish(p) || (p && typeof p.subarray === 'function')\n}\n\nfunction stringConcat (parts) {\n  var strings = []\n  var needsToString = false\n  for (var i = 0; i < parts.length; i++) {\n    var p = parts[i]\n    if (typeof p === 'string') {\n      strings.push(p)\n    } else if (Buffer.isBuffer(p)) {\n      strings.push(p)\n    } else if (isBufferish(p)) {\n      strings.push(bufferFrom(p))\n    } else {\n      strings.push(bufferFrom(String(p)))\n    }\n  }\n  if (Buffer.isBuffer(parts[0])) {\n    strings = Buffer.concat(strings)\n    strings = strings.toString('utf8')\n  } else {\n    strings = strings.join('')\n  }\n  return strings\n}\n\nfunction bufferConcat (parts) {\n  var bufs = []\n  for (var i = 0; i < parts.length; i++) {\n    var p = parts[i]\n    if (Buffer.isBuffer(p)) {\n      bufs.push(p)\n    } else if (isBufferish(p)) {\n      bufs.push(bufferFrom(p))\n    } else {\n      bufs.push(bufferFrom(String(p)))\n    }\n  }\n  return Buffer.concat(bufs)\n}\n\nfunction arrayConcat (parts) {\n  var res = []\n  for (var i = 0; i < parts.length; i++) {\n    res.push.apply(res, parts[i])\n  }\n  return res\n}\n\nfunction u8Concat (parts) {\n  var len = 0\n  for (var i = 0; i < parts.length; i++) {\n    if (typeof parts[i] === 'string') {\n      parts[i] = bufferFrom(parts[i])\n    }\n    len += parts[i].length\n  }\n  var u8 = new U8(len)\n  for (var i = 0, offset = 0; i < parts.length; i++) {\n    var part = parts[i]\n    for (var j = 0; j < part.length; j++) {\n      u8[offset++] = part[j]\n    }\n  }\n  return u8\n}\n", "var concat = require('concat-stream')\n\nfunction MemoryStorage (opts) {}\n\nMemoryStorage.prototype._handleFile = function _handleFile (req, file, cb) {\n  file.stream.pipe(concat({ encoding: 'buffer' }, function (data) {\n    cb(null, {\n      buffer: data,\n      size: data.length\n    })\n  }))\n}\n\nMemoryStorage.prototype._removeFile = function _removeFile (req, file, cb) {\n  delete file.buffer\n  cb(null)\n}\n\nmodule.exports = function (opts) {\n  return new MemoryStorage(opts)\n}\n", "var makeMiddleware = require('./lib/make-middleware')\n\nvar diskStorage = require('./storage/disk')\nvar memoryStorage = require('./storage/memory')\nvar MulterError = require('./lib/multer-error')\n\nfunction allowAll (req, file, cb) {\n  cb(null, true)\n}\n\nfunction Multer (options) {\n  if (options.storage) {\n    this.storage = options.storage\n  } else if (options.dest) {\n    this.storage = diskStorage({ destination: options.dest })\n  } else {\n    this.storage = memoryStorage()\n  }\n\n  this.limits = options.limits\n  this.preservePath = options.preservePath\n  this.defParamCharset = options.defParamCharset || 'latin1'\n  this.fileFilter = options.fileFilter || allowAll\n}\n\nMulter.prototype._makeMiddleware = function (fields, fileStrategy) {\n  function setup () {\n    var fileFilter = this.fileFilter\n    var filesLeft = Object.create(null)\n\n    fields.forEach(function (field) {\n      if (typeof field.maxCount === 'number') {\n        filesLeft[field.name] = field.maxCount\n      } else {\n        filesLeft[field.name] = Infinity\n      }\n    })\n\n    function wrappedFileFilter (req, file, cb) {\n      if ((filesLeft[file.fieldname] || 0) <= 0) {\n        return cb(new MulterError('LIMIT_UNEXPECTED_FILE', file.fieldname))\n      }\n\n      filesLeft[file.fieldname] -= 1\n      fileFilter(req, file, cb)\n    }\n\n    return {\n      limits: this.limits,\n      preservePath: this.preservePath,\n      defParamCharset: this.defParamCharset,\n      storage: this.storage,\n      fileFilter: wrappedFileFilter,\n      fileStrategy: fileStrategy\n    }\n  }\n\n  return makeMiddleware(setup.bind(this))\n}\n\nMulter.prototype.single = function (name) {\n  return this._makeMiddleware([{ name: name, maxCount: 1 }], 'VALUE')\n}\n\nMulter.prototype.array = function (name, maxCount) {\n  return this._makeMiddleware([{ name: name, maxCount: maxCount }], 'ARRAY')\n}\n\nMulter.prototype.fields = function (fields) {\n  return this._makeMiddleware(fields, 'OBJECT')\n}\n\nMulter.prototype.none = function () {\n  return this._makeMiddleware([], 'NONE')\n}\n\nMulter.prototype.any = function () {\n  function setup () {\n    return {\n      limits: this.limits,\n      preservePath: this.preservePath,\n      defParamCharset: this.defParamCharset,\n      storage: this.storage,\n      fileFilter: this.fileFilter,\n      fileStrategy: 'ARRAY'\n    }\n  }\n\n  return makeMiddleware(setup.bind(this))\n}\n\nfunction multer (options) {\n  if (options === undefined) {\n    return new Multer({})\n  }\n\n  if (typeof options === 'object' && options !== null) {\n    return new Multer(options)\n  }\n\n  throw new TypeError('Expected object for argument options')\n}\n\nmodule.exports = multer\nmodule.exports.diskStorage = diskStorage\nmodule.exports.memoryStorage = memoryStorage\nmodule.exports.MulterError = MulterError\n", "'use strict'\n\nmodule.exports = {\n  kClose: Symbol('close'),\n  kDestroy: Symbol('destroy'),\n  kDispatch: Symbol('dispatch'),\n  kUrl: Symbol('url'),\n  kWriting: Symbol('writing'),\n  kResuming: Symbol('resuming'),\n  kQueue: Symbol('queue'),\n  kConnect: Symbol('connect'),\n  kConnecting: Symbol('connecting'),\n  kKeepAliveDefaultTimeout: Symbol('default keep alive timeout'),\n  kKeepAliveMaxTimeout: Symbol('max keep alive timeout'),\n  kKeepAliveTimeoutThreshold: Symbol('keep alive timeout threshold'),\n  kKeepAliveTimeoutValue: Symbol('keep alive timeout'),\n  kKeepAlive: Symbol('keep alive'),\n  kHeadersTimeout: Symbol('headers timeout'),\n  kBodyTimeout: Symbol('body timeout'),\n  kServerName: Symbol('server name'),\n  kLocalAddress: Symbol('local address'),\n  kHost: Symbol('host'),\n  kNoRef: Symbol('no ref'),\n  kBodyUsed: Symbol('used'),\n  kBody: Symbol('abstracted request body'),\n  kRunning: Symbol('running'),\n  kBlocking: Symbol('blocking'),\n  kPending: Symbol('pending'),\n  kSize: Symbol('size'),\n  kBusy: Symbol('busy'),\n  kQueued: Symbol('queued'),\n  kFree: Symbol('free'),\n  kConnected: Symbol('connected'),\n  kClosed: Symbol('closed'),\n  kNeedDrain: Symbol('need drain'),\n  kReset: Symbol('reset'),\n  kDestroyed: Symbol.for('nodejs.stream.destroyed'),\n  kResume: Symbol('resume'),\n  kOnError: Symbol('on error'),\n  kMaxHeadersSize: Symbol('max headers size'),\n  kRunningIdx: Symbol('running index'),\n  kPendingIdx: Symbol('pending index'),\n  kError: Symbol('error'),\n  kClients: Symbol('clients'),\n  kClient: Symbol('client'),\n  kParser: Symbol('parser'),\n  kOnDestroyed: Symbol('destroy callbacks'),\n  kPipelining: Symbol('pipelining'),\n  kSocket: Symbol('socket'),\n  kHostHeader: Symbol('host header'),\n  kConnector: Symbol('connector'),\n  kStrictContentLength: Symbol('strict content length'),\n  kMaxRedirections: Symbol('maxRedirections'),\n  kMaxRequests: Symbol('maxRequestsPerClient'),\n  kProxy: Symbol('proxy agent options'),\n  kCounter: Symbol('socket request counter'),\n  kMaxResponseSize: Symbol('max response size'),\n  kHTTP2Session: Symbol('http2Session'),\n  kHTTP2SessionState: Symbol('http2Session state'),\n  kRetryHandlerDefaultRetry: Symbol('retry agent default retry'),\n  kConstruct: Symbol('constructable'),\n  kListeners: Symbol('listeners'),\n  kHTTPContext: Symbol('http context'),\n  kMaxConcurrentStreams: Symbol('max concurrent streams'),\n  kHTTP2InitialWindowSize: Symbol('http2 initial window size'),\n  kHTTP2ConnectionWindowSize: Symbol('http2 connection window size'),\n  kEnableConnectProtocol: Symbol('http2session connect protocol'),\n  kRemoteSettings: Symbol('http2session remote settings'),\n  kHTTP2Stream: Symbol('http2session client stream'),\n  kPingInterval: Symbol('ping interval'),\n  kNoProxyAgent: Symbol('no proxy agent'),\n  kHttpProxyAgent: Symbol('http proxy agent'),\n  kHttpsProxyAgent: Symbol('https proxy agent'),\n  kSocks5ProxyAgent: Symbol('socks5 proxy agent')\n}\n", "'use strict'\n\n/**\n * This module offers an optimized timer implementation designed for scenarios\n * where high precision is not critical.\n *\n * The timer achieves faster performance by using a low-resolution approach,\n * with an accuracy target of within 500ms. This makes it particularly useful\n * for timers with delays of 1 second or more, where exact timing is less\n * crucial.\n *\n * It's important to note that Node.js timers are inherently imprecise, as\n * delays can occur due to the event loop being blocked by other operations.\n * Consequently, timers may trigger later than their scheduled time.\n */\n\n/**\n * The fastNow variable contains the internal fast timer clock value.\n *\n * @type {number}\n */\nlet fastNow = 0\n\n/**\n * RESOLUTION_MS represents the target resolution time in milliseconds.\n *\n * @type {number}\n * @default 1000\n */\nconst RESOLUTION_MS = 1e3\n\n/**\n * TICK_MS defines the desired interval in milliseconds between each tick.\n * The target value is set to half the resolution time, minus 1 ms, to account\n * for potential event loop overhead.\n *\n * @type {number}\n * @default 499\n */\nconst TICK_MS = (RESOLUTION_MS >> 1) - 1\n\n/**\n * fastNowTimeout is a Node.js timer used to manage and process\n * the FastTimers stored in the `fastTimers` array.\n *\n * @type {NodeJS.Timeout}\n */\nlet fastNowTimeout\n\n/**\n * The kFastTimer symbol is used to identify FastTimer instances.\n *\n * @type {Symbol}\n */\nconst kFastTimer = Symbol('kFastTimer')\n\n/**\n * The fastTimers array contains all active FastTimers.\n *\n * @type {FastTimer[]}\n */\nconst fastTimers = []\n\n/**\n * These constants represent the various states of a FastTimer.\n */\n\n/**\n * The `NOT_IN_LIST` constant indicates that the FastTimer is not included\n * in the `fastTimers` array. Timers with this status will not be processed\n * during the next tick by the `onTick` function.\n *\n * A FastTimer can be re-added to the `fastTimers` array by invoking the\n * `refresh` method on the FastTimer instance.\n *\n * @type {-2}\n */\nconst NOT_IN_LIST = -2\n\n/**\n * The `TO_BE_CLEARED` constant indicates that the FastTimer is scheduled\n * for removal from the `fastTimers` array. A FastTimer in this state will\n * be removed in the next tick by the `onTick` function and will no longer\n * be processed.\n *\n * This status is also set when the `clear` method is called on the FastTimer instance.\n *\n * @type {-1}\n */\nconst TO_BE_CLEARED = -1\n\n/**\n * The `PENDING` constant signifies that the FastTimer is awaiting processing\n * in the next tick by the `onTick` function. Timers with this status will have\n * their `_idleStart` value set and their status updated to `ACTIVE` in the next tick.\n *\n * @type {0}\n */\nconst PENDING = 0\n\n/**\n * The `ACTIVE` constant indicates that the FastTimer is active and waiting\n * for its timer to expire. During the next tick, the `onTick` function will\n * check if the timer has expired, and if so, it will execute the associated callback.\n *\n * @type {1}\n */\nconst ACTIVE = 1\n\n/**\n * The onTick function processes the fastTimers array.\n *\n * @returns {void}\n */\nfunction onTick () {\n  /**\n   * Increment the fastNow value by the TICK_MS value, despite the actual time\n   * that has passed since the last tick. This approach ensures independence\n   * from the system clock and delays caused by a blocked event loop.\n   *\n   * @type {number}\n   */\n  fastNow += TICK_MS\n\n  /**\n   * The `idx` variable is used to iterate over the `fastTimers` array.\n   * Expired timers are removed by replacing them with the last element in the array.\n   * Consequently, `idx` is only incremented when the current element is not removed.\n   *\n   * @type {number}\n   */\n  let idx = 0\n\n  /**\n   * The len variable will contain the length of the fastTimers array\n   * and will be decremented when a FastTimer should be removed from the\n   * fastTimers array.\n   *\n   * @type {number}\n   */\n  let len = fastTimers.length\n\n  while (idx < len) {\n    /**\n     * @type {FastTimer}\n     */\n    const timer = fastTimers[idx]\n\n    // If the timer is in the ACTIVE state and the timer has expired, it will\n    // be processed in the next tick.\n    if (timer._state === PENDING) {\n      // Set the _idleStart value to the fastNow value minus the TICK_MS value\n      // to account for the time the timer was in the PENDING state.\n      timer._idleStart = fastNow - TICK_MS\n      timer._state = ACTIVE\n    } else if (\n      timer._state === ACTIVE &&\n      fastNow >= timer._idleStart + timer._idleTimeout\n    ) {\n      timer._state = TO_BE_CLEARED\n      timer._idleStart = -1\n      timer._onTimeout(timer._timerArg)\n    }\n\n    if (timer._state === TO_BE_CLEARED) {\n      timer._state = NOT_IN_LIST\n\n      // Move the last element to the current index and decrement len if it is\n      // not the only element in the array.\n      if (--len !== 0) {\n        fastTimers[idx] = fastTimers[len]\n      }\n    } else {\n      ++idx\n    }\n  }\n\n  // Set the length of the fastTimers array to the new length and thus\n  // removing the excess FastTimers elements from the array.\n  fastTimers.length = len\n\n  // If there are still active FastTimers in the array, refresh the Timer.\n  // If there are no active FastTimers, the timer will be refreshed again\n  // when a new FastTimer is instantiated.\n  if (fastTimers.length !== 0) {\n    refreshTimeout()\n  }\n}\n\nfunction refreshTimeout () {\n  // If the fastNowTimeout is already set and the Timer has the refresh()-\n  // method available, call it to refresh the timer.\n  // Some timer objects returned by setTimeout may not have a .refresh()\n  // method (e.g. mocked timers in tests).\n  if (fastNowTimeout?.refresh) {\n    fastNowTimeout.refresh()\n    // fastNowTimeout is not instantiated yet or refresh is not availabe,\n    // create a new Timer.\n  } else {\n    clearTimeout(fastNowTimeout)\n    fastNowTimeout = setTimeout(onTick, TICK_MS)\n    // If the Timer has an unref method, call it to allow the process to exit,\n    // if there are no other active handles. When using fake timers or mocked\n    // environments (like Jest), .unref() may not be defined,\n    fastNowTimeout?.unref()\n  }\n}\n\n/**\n * The `FastTimer` class is a data structure designed to store and manage\n * timer information.\n */\nclass FastTimer {\n  [kFastTimer] = true\n\n  /**\n   * The state of the timer, which can be one of the following:\n   * - NOT_IN_LIST (-2)\n   * - TO_BE_CLEARED (-1)\n   * - PENDING (0)\n   * - ACTIVE (1)\n   *\n   * @type {-2|-1|0|1}\n   * @private\n   */\n  _state = NOT_IN_LIST\n\n  /**\n   * The number of milliseconds to wait before calling the callback.\n   *\n   * @type {number}\n   * @private\n   */\n  _idleTimeout = -1\n\n  /**\n   * The time in milliseconds when the timer was started. This value is used to\n   * calculate when the timer should expire.\n   *\n   * @type {number}\n   * @default -1\n   * @private\n   */\n  _idleStart = -1\n\n  /**\n   * The function to be executed when the timer expires.\n   * @type {Function}\n   * @private\n   */\n  _onTimeout\n\n  /**\n   * The argument to be passed to the callback when the timer expires.\n   *\n   * @type {*}\n   * @private\n   */\n  _timerArg\n\n  /**\n   * @constructor\n   * @param {Function} callback A function to be executed after the timer\n   * expires.\n   * @param {number} delay The time, in milliseconds that the timer should wait\n   * before the specified function or code is executed.\n   * @param {*} arg\n   */\n  constructor (callback, delay, arg) {\n    this._onTimeout = callback\n    this._idleTimeout = delay\n    this._timerArg = arg\n\n    this.refresh()\n  }\n\n  /**\n   * Sets the timer's start time to the current time, and reschedules the timer\n   * to call its callback at the previously specified duration adjusted to the\n   * current time.\n   * Using this on a timer that has already called its callback will reactivate\n   * the timer.\n   *\n   * @returns {void}\n   */\n  refresh () {\n    // In the special case that the timer is not in the list of active timers,\n    // add it back to the array to be processed in the next tick by the onTick\n    // function.\n    if (this._state === NOT_IN_LIST) {\n      fastTimers.push(this)\n    }\n\n    // If the timer is the only active timer, refresh the fastNowTimeout for\n    // better resolution.\n    if (!fastNowTimeout || fastTimers.length === 1) {\n      refreshTimeout()\n    }\n\n    // Setting the state to PENDING will cause the timer to be reset in the\n    // next tick by the onTick function.\n    this._state = PENDING\n  }\n\n  /**\n   * The `clear` method cancels the timer, preventing it from executing.\n   *\n   * @returns {void}\n   * @private\n   */\n  clear () {\n    // Set the state to TO_BE_CLEARED to mark the timer for removal in the next\n    // tick by the onTick function.\n    this._state = TO_BE_CLEARED\n\n    // Reset the _idleStart value to -1 to indicate that the timer is no longer\n    // active.\n    this._idleStart = -1\n  }\n}\n\n/**\n * This module exports a setTimeout and clearTimeout function that can be\n * used as a drop-in replacement for the native functions.\n */\nmodule.exports = {\n  /**\n   * The setTimeout() method sets a timer which executes a function once the\n   * timer expires.\n   * @param {Function} callback A function to be executed after the timer\n   * expires.\n   * @param {number} delay The time, in milliseconds that the timer should\n   * wait before the specified function or code is executed.\n   * @param {*} [arg] An optional argument to be passed to the callback function\n   * when the timer expires.\n   * @returns {NodeJS.Timeout|FastTimer}\n   */\n  setTimeout (callback, delay, arg) {\n    // If the delay is less than or equal to the RESOLUTION_MS value return a\n    // native Node.js Timer instance.\n    return delay <= RESOLUTION_MS\n      ? setTimeout(callback, delay, arg)\n      : new FastTimer(callback, delay, arg)\n  },\n  /**\n   * The clearTimeout method cancels an instantiated Timer previously created\n   * by calling setTimeout.\n   *\n   * @param {NodeJS.Timeout|FastTimer} timeout\n   */\n  clearTimeout (timeout) {\n    // If the timeout is a FastTimer, call its own clear method.\n    if (timeout[kFastTimer]) {\n      /**\n       * @type {FastTimer}\n       */\n      timeout.clear()\n      // Otherwise it is an instance of a native NodeJS.Timeout, so call the\n      // Node.js native clearTimeout function.\n    } else {\n      clearTimeout(timeout)\n    }\n  },\n  /**\n   * The setFastTimeout() method sets a fastTimer which executes a function once\n   * the timer expires.\n   * @param {Function} callback A function to be executed after the timer\n   * expires.\n   * @param {number} delay The time, in milliseconds that the timer should\n   * wait before the specified function or code is executed.\n   * @param {*} [arg] An optional argument to be passed to the callback function\n   * when the timer expires.\n   * @returns {FastTimer}\n   */\n  setFastTimeout (callback, delay, arg) {\n    return new FastTimer(callback, delay, arg)\n  },\n  /**\n   * The clearTimeout method cancels an instantiated FastTimer previously\n   * created by calling setFastTimeout.\n   *\n   * @param {FastTimer} timeout\n   */\n  clearFastTimeout (timeout) {\n    timeout.clear()\n  },\n  /**\n   * The now method returns the value of the internal fast timer clock.\n   *\n   * @returns {number}\n   */\n  now () {\n    return fastNow\n  },\n  /**\n   * Trigger the onTick function to process the fastTimers array.\n   * Exported for testing purposes only.\n   * Marking as deprecated to discourage any use outside of testing.\n   * @deprecated\n   * @param {number} [delay=0] The delay in milliseconds to add to the now value.\n   */\n  tick (delay = 0) {\n    fastNow += delay - RESOLUTION_MS + 1\n    onTick()\n    onTick()\n  },\n  /**\n   * Reset FastTimers.\n   * Exported for testing purposes only.\n   * Marking as deprecated to discourage any use outside of testing.\n   * @deprecated\n   */\n  reset () {\n    fastNow = 0\n    fastTimers.length = 0\n    clearTimeout(fastNowTimeout)\n    fastNowTimeout = null\n  },\n  /**\n   * Exporting for testing purposes only.\n   * Marking as deprecated to discourage any use outside of testing.\n   * @deprecated\n   */\n  kFastTimer\n}\n", "'use strict'\n\nconst kUndiciError = Symbol.for('undici.error.UND_ERR')\nclass UndiciError extends Error {\n  constructor (message, options) {\n    super(message, options)\n    this.name = 'UndiciError'\n    this.code = 'UND_ERR'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kUndiciError] === true\n  }\n\n  get [kUndiciError] () {\n    return true\n  }\n}\n\nconst kConnectTimeoutError = Symbol.for('undici.error.UND_ERR_CONNECT_TIMEOUT')\nclass ConnectTimeoutError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ConnectTimeoutError'\n    this.message = message || 'Connect Timeout Error'\n    this.code = 'UND_ERR_CONNECT_TIMEOUT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kConnectTimeoutError] === true\n  }\n\n  get [kConnectTimeoutError] () {\n    return true\n  }\n}\n\nconst kHeadersTimeoutError = Symbol.for('undici.error.UND_ERR_HEADERS_TIMEOUT')\nclass HeadersTimeoutError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'HeadersTimeoutError'\n    this.message = message || 'Headers Timeout Error'\n    this.code = 'UND_ERR_HEADERS_TIMEOUT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kHeadersTimeoutError] === true\n  }\n\n  get [kHeadersTimeoutError] () {\n    return true\n  }\n}\n\nconst kHeadersOverflowError = Symbol.for('undici.error.UND_ERR_HEADERS_OVERFLOW')\nclass HeadersOverflowError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'HeadersOverflowError'\n    this.message = message || 'Headers Overflow Error'\n    this.code = 'UND_ERR_HEADERS_OVERFLOW'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kHeadersOverflowError] === true\n  }\n\n  get [kHeadersOverflowError] () {\n    return true\n  }\n}\n\nconst kBodyTimeoutError = Symbol.for('undici.error.UND_ERR_BODY_TIMEOUT')\nclass BodyTimeoutError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'BodyTimeoutError'\n    this.message = message || 'Body Timeout Error'\n    this.code = 'UND_ERR_BODY_TIMEOUT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kBodyTimeoutError] === true\n  }\n\n  get [kBodyTimeoutError] () {\n    return true\n  }\n}\n\nconst kInvalidArgumentError = Symbol.for('undici.error.UND_ERR_INVALID_ARG')\nclass InvalidArgumentError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'InvalidArgumentError'\n    this.message = message || 'Invalid Argument Error'\n    this.code = 'UND_ERR_INVALID_ARG'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kInvalidArgumentError] === true\n  }\n\n  get [kInvalidArgumentError] () {\n    return true\n  }\n}\n\nconst kInvalidReturnValueError = Symbol.for('undici.error.UND_ERR_INVALID_RETURN_VALUE')\nclass InvalidReturnValueError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'InvalidReturnValueError'\n    this.message = message || 'Invalid Return Value Error'\n    this.code = 'UND_ERR_INVALID_RETURN_VALUE'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kInvalidReturnValueError] === true\n  }\n\n  get [kInvalidReturnValueError] () {\n    return true\n  }\n}\n\nconst kAbortError = Symbol.for('undici.error.UND_ERR_ABORT')\nclass AbortError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'AbortError'\n    this.message = message || 'The operation was aborted'\n    this.code = 'UND_ERR_ABORT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kAbortError] === true\n  }\n\n  get [kAbortError] () {\n    return true\n  }\n}\n\nconst kRequestAbortedError = Symbol.for('undici.error.UND_ERR_ABORTED')\nclass RequestAbortedError extends AbortError {\n  constructor (message) {\n    super(message)\n    this.name = 'AbortError'\n    this.message = message || 'Request aborted'\n    this.code = 'UND_ERR_ABORTED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kRequestAbortedError] === true\n  }\n\n  get [kRequestAbortedError] () {\n    return true\n  }\n}\n\nconst kInformationalError = Symbol.for('undici.error.UND_ERR_INFO')\nclass InformationalError extends UndiciError {\n  constructor (message, options) {\n    super(message, options)\n    this.name = 'InformationalError'\n    this.message = message || 'Request information'\n    this.code = 'UND_ERR_INFO'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kInformationalError] === true\n  }\n\n  get [kInformationalError] () {\n    return true\n  }\n}\n\nconst kRequestContentLengthMismatchError = Symbol.for('undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH')\nclass RequestContentLengthMismatchError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'RequestContentLengthMismatchError'\n    this.message = message || 'Request body length does not match content-length header'\n    this.code = 'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kRequestContentLengthMismatchError] === true\n  }\n\n  get [kRequestContentLengthMismatchError] () {\n    return true\n  }\n}\n\nconst kResponseContentLengthMismatchError = Symbol.for('undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH')\nclass ResponseContentLengthMismatchError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ResponseContentLengthMismatchError'\n    this.message = message || 'Response body length does not match content-length header'\n    this.code = 'UND_ERR_RES_CONTENT_LENGTH_MISMATCH'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kResponseContentLengthMismatchError] === true\n  }\n\n  get [kResponseContentLengthMismatchError] () {\n    return true\n  }\n}\n\nconst kClientDestroyedError = Symbol.for('undici.error.UND_ERR_DESTROYED')\nclass ClientDestroyedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ClientDestroyedError'\n    this.message = message || 'The client is destroyed'\n    this.code = 'UND_ERR_DESTROYED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kClientDestroyedError] === true\n  }\n\n  get [kClientDestroyedError] () {\n    return true\n  }\n}\n\nconst kClientClosedError = Symbol.for('undici.error.UND_ERR_CLOSED')\nclass ClientClosedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ClientClosedError'\n    this.message = message || 'The client is closed'\n    this.code = 'UND_ERR_CLOSED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kClientClosedError] === true\n  }\n\n  get [kClientClosedError] () {\n    return true\n  }\n}\n\nconst kSocketError = Symbol.for('undici.error.UND_ERR_SOCKET')\nclass SocketError extends UndiciError {\n  constructor (message, socket) {\n    super(message)\n    this.name = 'SocketError'\n    this.message = message || 'Socket error'\n    this.code = 'UND_ERR_SOCKET'\n    this.socket = socket\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kSocketError] === true\n  }\n\n  get [kSocketError] () {\n    return true\n  }\n}\n\nconst kNotSupportedError = Symbol.for('undici.error.UND_ERR_NOT_SUPPORTED')\nclass NotSupportedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'NotSupportedError'\n    this.message = message || 'Not supported error'\n    this.code = 'UND_ERR_NOT_SUPPORTED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kNotSupportedError] === true\n  }\n\n  get [kNotSupportedError] () {\n    return true\n  }\n}\n\nconst kBalancedPoolMissingUpstreamError = Symbol.for('undici.error.UND_ERR_BPL_MISSING_UPSTREAM')\nclass BalancedPoolMissingUpstreamError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MissingUpstreamError'\n    this.message = message || 'No upstream has been added to the BalancedPool'\n    this.code = 'UND_ERR_BPL_MISSING_UPSTREAM'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kBalancedPoolMissingUpstreamError] === true\n  }\n\n  get [kBalancedPoolMissingUpstreamError] () {\n    return true\n  }\n}\n\nconst kHTTPParserError = Symbol.for('undici.error.UND_ERR_HTTP_PARSER')\nclass HTTPParserError extends Error {\n  constructor (message, code, data) {\n    super(message)\n    this.name = 'HTTPParserError'\n    this.code = code ? `HPE_${code}` : undefined\n    this.data = data ? data.toString() : undefined\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kHTTPParserError] === true\n  }\n\n  get [kHTTPParserError] () {\n    return true\n  }\n}\n\nconst kResponseExceededMaxSizeError = Symbol.for('undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE')\nclass ResponseExceededMaxSizeError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ResponseExceededMaxSizeError'\n    this.message = message || 'Response content exceeded max size'\n    this.code = 'UND_ERR_RES_EXCEEDED_MAX_SIZE'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kResponseExceededMaxSizeError] === true\n  }\n\n  get [kResponseExceededMaxSizeError] () {\n    return true\n  }\n}\n\nconst kRequestRetryError = Symbol.for('undici.error.UND_ERR_REQ_RETRY')\nclass RequestRetryError extends UndiciError {\n  constructor (message, code, { headers, data }) {\n    super(message)\n    this.name = 'RequestRetryError'\n    this.message = message || 'Request retry error'\n    this.code = 'UND_ERR_REQ_RETRY'\n    this.statusCode = code\n    this.data = data\n    this.headers = headers\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kRequestRetryError] === true\n  }\n\n  get [kRequestRetryError] () {\n    return true\n  }\n}\n\nconst kResponseError = Symbol.for('undici.error.UND_ERR_RESPONSE')\nclass ResponseError extends UndiciError {\n  constructor (message, code, { headers, body }) {\n    super(message)\n    this.name = 'ResponseError'\n    this.message = message || 'Response error'\n    this.code = 'UND_ERR_RESPONSE'\n    this.statusCode = code\n    this.body = body\n    this.headers = headers\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kResponseError] === true\n  }\n\n  get [kResponseError] () {\n    return true\n  }\n}\n\nconst kSecureProxyConnectionError = Symbol.for('undici.error.UND_ERR_PRX_TLS')\nclass SecureProxyConnectionError extends UndiciError {\n  constructor (cause, message, options = {}) {\n    super(message, { cause, ...options })\n    this.name = 'SecureProxyConnectionError'\n    this.message = message || 'Secure Proxy Connection failed'\n    this.code = 'UND_ERR_PRX_TLS'\n    this.cause = cause\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kSecureProxyConnectionError] === true\n  }\n\n  get [kSecureProxyConnectionError] () {\n    return true\n  }\n}\n\nconst kMaxOriginsReachedError = Symbol.for('undici.error.UND_ERR_MAX_ORIGINS_REACHED')\nclass MaxOriginsReachedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MaxOriginsReachedError'\n    this.message = message || 'Maximum allowed origins reached'\n    this.code = 'UND_ERR_MAX_ORIGINS_REACHED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kMaxOriginsReachedError] === true\n  }\n\n  get [kMaxOriginsReachedError] () {\n    return true\n  }\n}\n\nclass Socks5ProxyError extends UndiciError {\n  constructor (message, code) {\n    super(message)\n    this.name = 'Socks5ProxyError'\n    this.message = message || 'SOCKS5 proxy error'\n    this.code = code || 'UND_ERR_SOCKS5'\n  }\n}\n\nconst kMessageSizeExceededError = Symbol.for('undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED')\nclass MessageSizeExceededError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MessageSizeExceededError'\n    this.message = message || 'Max decompressed message size exceeded'\n    this.code = 'UND_ERR_WS_MESSAGE_SIZE_EXCEEDED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kMessageSizeExceededError] === true\n  }\n\n  get [kMessageSizeExceededError] () {\n    return true\n  }\n}\n\nmodule.exports = {\n  AbortError,\n  HTTPParserError,\n  UndiciError,\n  HeadersTimeoutError,\n  HeadersOverflowError,\n  BodyTimeoutError,\n  RequestContentLengthMismatchError,\n  ConnectTimeoutError,\n  InvalidArgumentError,\n  InvalidReturnValueError,\n  RequestAbortedError,\n  ClientDestroyedError,\n  ClientClosedError,\n  InformationalError,\n  SocketError,\n  NotSupportedError,\n  ResponseContentLengthMismatchError,\n  BalancedPoolMissingUpstreamError,\n  ResponseExceededMaxSizeError,\n  RequestRetryError,\n  ResponseError,\n  SecureProxyConnectionError,\n  MaxOriginsReachedError,\n  Socks5ProxyError,\n  MessageSizeExceededError\n}\n", "'use strict'\n\n/**\n * @see https://developer.mozilla.org/docs/Web/HTTP/Headers\n */\nconst wellknownHeaderNames = /** @type {const} */ ([\n  'Accept',\n  'Accept-Encoding',\n  'Accept-Language',\n  'Accept-Ranges',\n  'Access-Control-Allow-Credentials',\n  'Access-Control-Allow-Headers',\n  'Access-Control-Allow-Methods',\n  'Access-Control-Allow-Origin',\n  'Access-Control-Expose-Headers',\n  'Access-Control-Max-Age',\n  'Access-Control-Request-Headers',\n  'Access-Control-Request-Method',\n  'Age',\n  'Allow',\n  'Alt-Svc',\n  'Alt-Used',\n  'Authorization',\n  'Cache-Control',\n  'Clear-Site-Data',\n  'Connection',\n  'Content-Disposition',\n  'Content-Encoding',\n  'Content-Language',\n  'Content-Length',\n  'Content-Location',\n  'Content-Range',\n  'Content-Security-Policy',\n  'Content-Security-Policy-Report-Only',\n  'Content-Type',\n  'Cookie',\n  'Cross-Origin-Embedder-Policy',\n  'Cross-Origin-Opener-Policy',\n  'Cross-Origin-Resource-Policy',\n  'Date',\n  'Device-Memory',\n  'Downlink',\n  'ECT',\n  'ETag',\n  'Expect',\n  'Expect-CT',\n  'Expires',\n  'Forwarded',\n  'From',\n  'Host',\n  'If-Match',\n  'If-Modified-Since',\n  'If-None-Match',\n  'If-Range',\n  'If-Unmodified-Since',\n  'Keep-Alive',\n  'Last-Modified',\n  'Link',\n  'Location',\n  'Max-Forwards',\n  'Origin',\n  'Permissions-Policy',\n  'Pragma',\n  'Proxy-Authenticate',\n  'Proxy-Authorization',\n  'RTT',\n  'Range',\n  'Referer',\n  'Referrer-Policy',\n  'Refresh',\n  'Retry-After',\n  'Sec-WebSocket-Accept',\n  'Sec-WebSocket-Extensions',\n  'Sec-WebSocket-Key',\n  'Sec-WebSocket-Protocol',\n  'Sec-WebSocket-Version',\n  'Server',\n  'Server-Timing',\n  'Service-Worker-Allowed',\n  'Service-Worker-Navigation-Preload',\n  'Set-Cookie',\n  'SourceMap',\n  'Strict-Transport-Security',\n  'Supports-Loading-Mode',\n  'TE',\n  'Timing-Allow-Origin',\n  'Trailer',\n  'Transfer-Encoding',\n  'Upgrade',\n  'Upgrade-Insecure-Requests',\n  'User-Agent',\n  'Vary',\n  'Via',\n  'WWW-Authenticate',\n  'X-Content-Type-Options',\n  'X-DNS-Prefetch-Control',\n  'X-Frame-Options',\n  'X-Permitted-Cross-Domain-Policies',\n  'X-Powered-By',\n  'X-Requested-With',\n  'X-XSS-Protection'\n])\n\n/** @type {Record<typeof wellknownHeaderNames[number]|Lowercase<typeof wellknownHeaderNames[number]>, string>} */\nconst headerNameLowerCasedRecord = {}\n\n// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.\nObject.setPrototypeOf(headerNameLowerCasedRecord, null)\n\nfor (let i = 0; i < wellknownHeaderNames.length; ++i) {\n  const key = wellknownHeaderNames[i]\n  const lowerCasedKey = key.toLowerCase()\n  headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] =\n    lowerCasedKey\n}\n\nmodule.exports = {\n  wellknownHeaderNames,\n  headerNameLowerCasedRecord\n}\n", "'use strict'\n\nconst {\n  wellknownHeaderNames,\n  headerNameLowerCasedRecord\n} = require('./constants')\n\nclass TstNode {\n  /** @type {any} */\n  value = null\n  /** @type {null | TstNode} */\n  left = null\n  /** @type {null | TstNode} */\n  middle = null\n  /** @type {null | TstNode} */\n  right = null\n  /** @type {number} */\n  code\n  /**\n   * @param {string} key\n   * @param {any} value\n   * @param {number} index\n   */\n  constructor (key, value, index) {\n    if (index === undefined || index >= key.length) {\n      throw new TypeError('Unreachable')\n    }\n    const code = this.code = key.charCodeAt(index)\n    // check code is ascii string\n    if (code > 0x7F) {\n      throw new TypeError('key must be ascii string')\n    }\n    if (key.length !== ++index) {\n      this.middle = new TstNode(key, value, index)\n    } else {\n      this.value = value\n    }\n  }\n\n  /**\n   * @param {string} key\n   * @param {any} value\n   * @returns {void}\n   */\n  add (key, value) {\n    const length = key.length\n    if (length === 0) {\n      throw new TypeError('Unreachable')\n    }\n    let index = 0\n    /**\n     * @type {TstNode}\n     */\n    let node = this\n    while (true) {\n      const code = key.charCodeAt(index)\n      // check code is ascii string\n      if (code > 0x7F) {\n        throw new TypeError('key must be ascii string')\n      }\n      if (node.code === code) {\n        if (length === ++index) {\n          node.value = value\n          break\n        } else if (node.middle !== null) {\n          node = node.middle\n        } else {\n          node.middle = new TstNode(key, value, index)\n          break\n        }\n      } else if (node.code < code) {\n        if (node.left !== null) {\n          node = node.left\n        } else {\n          node.left = new TstNode(key, value, index)\n          break\n        }\n      } else if (node.right !== null) {\n        node = node.right\n      } else {\n        node.right = new TstNode(key, value, index)\n        break\n      }\n    }\n  }\n\n  /**\n   * @param {Uint8Array} key\n   * @returns {TstNode | null}\n   */\n  search (key) {\n    const keylength = key.length\n    let index = 0\n    /**\n     * @type {TstNode|null}\n     */\n    let node = this\n    while (node !== null && index < keylength) {\n      let code = key[index]\n      // A-Z\n      // First check if it is bigger than 0x5a.\n      // Lowercase letters have higher char codes than uppercase ones.\n      // Also we assume that headers will mostly contain lowercase characters.\n      if (code <= 0x5a && code >= 0x41) {\n        // Lowercase for uppercase.\n        code |= 32\n      }\n      while (node !== null) {\n        if (code === node.code) {\n          if (keylength === ++index) {\n            // Returns Node since it is the last key.\n            return node\n          }\n          node = node.middle\n          break\n        }\n        node = node.code < code ? node.left : node.right\n      }\n    }\n    return null\n  }\n}\n\nclass TernarySearchTree {\n  /** @type {TstNode | null} */\n  node = null\n\n  /**\n   * @param {string} key\n   * @param {any} value\n   * @returns {void}\n   * */\n  insert (key, value) {\n    if (this.node === null) {\n      this.node = new TstNode(key, value, 0)\n    } else {\n      this.node.add(key, value)\n    }\n  }\n\n  /**\n   * @param {Uint8Array} key\n   * @returns {any}\n   */\n  lookup (key) {\n    return this.node?.search(key)?.value ?? null\n  }\n}\n\nconst tree = new TernarySearchTree()\n\nfor (let i = 0; i < wellknownHeaderNames.length; ++i) {\n  const key = headerNameLowerCasedRecord[wellknownHeaderNames[i]]\n  tree.insert(key, key)\n}\n\nmodule.exports = {\n  TernarySearchTree,\n  tree\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { kDestroyed, kBodyUsed, kListeners, kBody } = require('./symbols')\nconst { IncomingMessage } = require('node:http')\nconst stream = require('node:stream')\nconst net = require('node:net')\nconst { stringify } = require('node:querystring')\nconst { EventEmitter: EE, addAbortListener: addAbortListenerNative } = require('node:events')\nconst timers = require('../util/timers')\nconst { InvalidArgumentError, ConnectTimeoutError } = require('./errors')\nconst { headerNameLowerCasedRecord } = require('./constants')\nconst { tree } = require('./tree')\n\nclass BodyAsyncIterable {\n  constructor (body) {\n    this[kBody] = body\n    this[kBodyUsed] = false\n  }\n\n  async * [Symbol.asyncIterator] () {\n    assert(!this[kBodyUsed], 'disturbed')\n    this[kBodyUsed] = true\n    yield * this[kBody]\n  }\n}\n\nfunction noop () {}\n\n/**\n * @param {*} body\n * @returns {*}\n */\nfunction wrapRequestBody (body) {\n  if (isStream(body)) {\n    // TODO (fix): Provide some way for the user to cache the file to e.g. /tmp\n    // so that it can be dispatched again?\n    // TODO (fix): Do we need 100-expect support to provide a way to do this properly?\n    if (bodyLength(body) === 0) {\n      body\n        .on('data', function () {\n          assert(false)\n        })\n    }\n\n    if (typeof body.readableDidRead !== 'boolean') {\n      body[kBodyUsed] = false\n      EE.prototype.on.call(body, 'data', function () {\n        this[kBodyUsed] = true\n      })\n    }\n\n    return body\n  } else if (body && typeof body.pipeTo === 'function') {\n    // TODO (fix): We can't access ReadableStream internal state\n    // to determine whether or not it has been disturbed. This is just\n    // a workaround.\n    return new BodyAsyncIterable(body)\n  } else if (body && isFormDataLike(body)) {\n    return body\n  } else if (\n    body &&\n    typeof body !== 'string' &&\n    !ArrayBuffer.isView(body) &&\n    isIterable(body)\n  ) {\n    // TODO: Should we allow re-using iterable if !this.opts.idempotent\n    // or through some other flag?\n    return new BodyAsyncIterable(body)\n  } else {\n    return body\n  }\n}\n\n/**\n * @param {*} obj\n * @returns {obj is import('node:stream').Stream}\n */\nfunction isStream (obj) {\n  return obj && typeof obj === 'object' && typeof obj.pipe === 'function' && typeof obj.on === 'function'\n}\n\n/**\n * @param {*} object\n * @returns {object is Blob}\n */\nfunction isBlobLike (object) {\n  return object instanceof Blob\n}\n\n/**\n * @param {string} url The path to check for query strings or fragments.\n * @returns {boolean} Returns true if the path contains a query string or fragment.\n */\nfunction pathHasQueryOrFragment (url) {\n  return (\n    url.includes('?') ||\n    url.includes('#')\n  )\n}\n\n/**\n * @param {string} url The URL to add the query params to\n * @param {import('node:querystring').ParsedUrlQueryInput} queryParams The object to serialize into a URL query string\n * @returns {string} The URL with the query params added\n */\nfunction serializePathWithQuery (url, queryParams) {\n  if (pathHasQueryOrFragment(url)) {\n    throw new Error('Query params cannot be passed when url already contains \"?\" or \"#\".')\n  }\n\n  const stringified = stringify(queryParams)\n\n  if (stringified) {\n    url += '?' + stringified\n  }\n\n  return url\n}\n\n/**\n * @param {number|string|undefined} port\n * @returns {boolean}\n */\nfunction isValidPort (port) {\n  const value = parseInt(port, 10)\n  return (\n    value === Number(port) &&\n    value >= 0 &&\n    value <= 65535\n  )\n}\n\n/**\n * Check if the value is a valid http or https prefixed string.\n *\n * @param {string} value\n * @returns {boolean}\n */\nfunction isHttpOrHttpsPrefixed (value) {\n  return (\n    value != null &&\n    value[0] === 'h' &&\n    value[1] === 't' &&\n    value[2] === 't' &&\n    value[3] === 'p' &&\n    (\n      value[4] === ':' ||\n      (\n        value[4] === 's' &&\n        value[5] === ':'\n      )\n    )\n  )\n}\n\n/**\n * @param {string|URL|Record<string,string>} url\n * @returns {URL}\n */\nfunction parseURL (url) {\n  if (typeof url === 'string') {\n    /**\n     * @type {URL}\n     */\n    url = new URL(url)\n\n    if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {\n      throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')\n    }\n\n    return url\n  }\n\n  if (!url || typeof url !== 'object') {\n    throw new InvalidArgumentError('Invalid URL: The URL argument must be a non-null object.')\n  }\n\n  if (!(url instanceof URL)) {\n    if (url.port != null && url.port !== '' && isValidPort(url.port) === false) {\n      throw new InvalidArgumentError('Invalid URL: port must be a valid integer or a string representation of an integer.')\n    }\n\n    if (url.path != null && typeof url.path !== 'string') {\n      throw new InvalidArgumentError('Invalid URL path: the path must be a string or null/undefined.')\n    }\n\n    if (url.pathname != null && typeof url.pathname !== 'string') {\n      throw new InvalidArgumentError('Invalid URL pathname: the pathname must be a string or null/undefined.')\n    }\n\n    if (url.hostname != null && typeof url.hostname !== 'string') {\n      throw new InvalidArgumentError('Invalid URL hostname: the hostname must be a string or null/undefined.')\n    }\n\n    if (url.origin != null && typeof url.origin !== 'string') {\n      throw new InvalidArgumentError('Invalid URL origin: the origin must be a string or null/undefined.')\n    }\n\n    if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {\n      throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')\n    }\n\n    const port = url.port != null\n      ? url.port\n      : (url.protocol === 'https:' ? 443 : 80)\n    let origin = url.origin != null\n      ? url.origin\n      : `${url.protocol || ''}//${url.hostname || ''}:${port}`\n    let path = url.path != null\n      ? url.path\n      : `${url.pathname || ''}${url.search || ''}`\n\n    if (origin[origin.length - 1] === '/') {\n      origin = origin.slice(0, origin.length - 1)\n    }\n\n    if (path && path[0] !== '/') {\n      path = `/${path}`\n    }\n    // new URL(path, origin) is unsafe when `path` contains an absolute URL\n    // From https://developer.mozilla.org/en-US/docs/Web/API/URL/URL:\n    // If first parameter is a relative URL, second param is required, and will be used as the base URL.\n    // If first parameter is an absolute URL, a given second param will be ignored.\n    return new URL(`${origin}${path}`)\n  }\n\n  if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {\n    throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')\n  }\n\n  return url\n}\n\n/**\n * @param {string|URL|Record<string, string>} url\n * @returns {URL}\n */\nfunction parseOrigin (url) {\n  url = parseURL(url)\n\n  if (url.pathname !== '/' || url.search || url.hash) {\n    throw new InvalidArgumentError('invalid url')\n  }\n\n  return url\n}\n\n/**\n * @param {string} host\n * @returns {string}\n */\nfunction getHostname (host) {\n  if (host[0] === '[') {\n    const idx = host.indexOf(']')\n\n    assert(idx !== -1)\n    return host.substring(1, idx)\n  }\n\n  const idx = host.indexOf(':')\n  if (idx === -1) return host\n\n  return host.substring(0, idx)\n}\n\n/**\n * IP addresses are not valid server names per RFC6066\n * Currently, the only server names supported are DNS hostnames\n * @param {string|null} host\n * @returns {string|null}\n */\nfunction getServerName (host) {\n  if (!host) {\n    return null\n  }\n\n  assert(typeof host === 'string')\n\n  const servername = getHostname(host)\n  if (net.isIP(servername)) {\n    return ''\n  }\n\n  return servername\n}\n\n/**\n * @function\n * @template T\n * @param {T} obj\n * @returns {T}\n */\nfunction deepClone (obj) {\n  return JSON.parse(JSON.stringify(obj))\n}\n\n/**\n * @param {*} obj\n * @returns {obj is AsyncIterable}\n */\nfunction isAsyncIterable (obj) {\n  return !!(obj != null && typeof obj[Symbol.asyncIterator] === 'function')\n}\n\n/**\n * @param {*} obj\n * @returns {obj is Iterable}\n */\nfunction isIterable (obj) {\n  return !!(obj != null && (typeof obj[Symbol.iterator] === 'function' || typeof obj[Symbol.asyncIterator] === 'function'))\n}\n\n/**\n * Checks whether an object has a safe Symbol.iterator \u2014 i.e. one that is\n * either own or inherited from a non-Object.prototype chain.  This prevents\n * prototype-pollution attacks from injecting a fake iterator on\n * Object.prototype.\n * @param {object} obj\n * @returns {boolean}\n */\nfunction hasSafeIterator (obj) {\n  const prototype = Object.getPrototypeOf(obj)\n  const ownIterator = Object.hasOwn(obj, Symbol.iterator)\n  return ownIterator || (prototype != null && prototype !== Object.prototype && typeof obj[Symbol.iterator] === 'function')\n}\n\n/**\n * @param {Blob|Buffer|import ('stream').Stream} body\n * @returns {number|null}\n */\nfunction bodyLength (body) {\n  if (body == null) {\n    return 0\n  } else if (isStream(body)) {\n    const state = body._readableState\n    return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length)\n      ? state.length\n      : null\n  } else if (isBlobLike(body)) {\n    return body.size != null ? body.size : null\n  } else if (isBuffer(body)) {\n    return body.byteLength\n  }\n\n  return null\n}\n\n/**\n * @param {import ('stream').Stream} body\n * @returns {boolean}\n */\nfunction isDestroyed (body) {\n  return body && !!(body.destroyed || body[kDestroyed] || (stream.isDestroyed?.(body)))\n}\n\n/**\n * @param {import ('stream').Stream} stream\n * @param {Error} [err]\n * @returns {void}\n */\nfunction destroy (stream, err) {\n  if (stream == null || !isStream(stream) || isDestroyed(stream)) {\n    return\n  }\n\n  if (typeof stream.destroy === 'function') {\n    if (Object.getPrototypeOf(stream).constructor === IncomingMessage) {\n      // See: https://github.com/nodejs/node/pull/38505/files\n      stream.socket = null\n    }\n\n    stream.destroy(err)\n  } else if (err) {\n    queueMicrotask(() => {\n      stream.emit('error', err)\n    })\n  }\n\n  if (stream.destroyed !== true) {\n    stream[kDestroyed] = true\n  }\n}\n\nconst KEEPALIVE_TIMEOUT_EXPR = /timeout=(\\d+)/\n/**\n * @param {string} val\n * @returns {number | null}\n */\nfunction parseKeepAliveTimeout (val) {\n  const m = val.match(KEEPALIVE_TIMEOUT_EXPR)\n  return m ? parseInt(m[1], 10) * 1000 : null\n}\n\n/**\n * Retrieves a header name and returns its lowercase value.\n * @param {string | Buffer} value Header name\n * @returns {string}\n */\nfunction headerNameToString (value) {\n  return typeof value === 'string'\n    ? headerNameLowerCasedRecord[value] ?? value.toLowerCase()\n    : tree.lookup(value) ?? value.toString('latin1').toLowerCase()\n}\n\n/**\n * Receive the buffer as a string and return its lowercase value.\n * @param {Buffer} value Header name\n * @returns {string}\n */\nfunction bufferToLowerCasedHeaderName (value) {\n  return tree.lookup(value) ?? value.toString('latin1').toLowerCase()\n}\n\n/**\n * @param {(Buffer | string)[]} headers\n * @param {Record<string, string | string[]>} [obj]\n * @returns {Record<string, string | string[]>}\n */\nfunction parseHeaders (headers, obj) {\n  if (obj === undefined) obj = {}\n\n  for (let i = 0; i < headers.length; i += 2) {\n    const key = headerNameToString(headers[i])\n    let val = obj[key]\n\n    if (val !== undefined) {\n      if (!Object.hasOwn(obj, key)) {\n        const headersValue = typeof headers[i + 1] === 'string'\n          ? headers[i + 1]\n          : Array.isArray(headers[i + 1])\n            ? headers[i + 1].map(x => x.toString('latin1'))\n            : headers[i + 1].toString('latin1')\n\n        if (key === '__proto__') {\n          Object.defineProperty(obj, key, {\n            value: headersValue,\n            enumerable: true,\n            configurable: true,\n            writable: true\n          })\n        } else {\n          obj[key] = headersValue\n        }\n      } else {\n        if (typeof val === 'string') {\n          val = [val]\n          obj[key] = val\n        }\n        val.push(headers[i + 1].toString('latin1'))\n      }\n    } else {\n      const headersValue = typeof headers[i + 1] === 'string'\n        ? headers[i + 1]\n        : Array.isArray(headers[i + 1])\n          ? headers[i + 1].map(x => x.toString('latin1'))\n          : headers[i + 1].toString('latin1')\n\n      obj[key] = headersValue\n    }\n  }\n\n  return obj\n}\n\n/**\n * @param {Buffer[] | string[] | Record<string, string | string[]> | null | undefined} headers\n * @returns {string[]}\n */\nfunction parseRawHeaders (headers) {\n  if (headers == null) {\n    return []\n  }\n\n  if (!Array.isArray(headers)) {\n    const rawHeaders = []\n\n    for (const [name, value] of Object.entries(headers)) {\n      if (Array.isArray(value)) {\n        for (const entry of value) {\n          rawHeaders.push(name, `${entry}`)\n        }\n      } else {\n        rawHeaders.push(name, `${value}`)\n      }\n    }\n\n    return rawHeaders\n  }\n\n  const headersLength = headers.length\n  /**\n   * @type {string[]}\n   */\n  const ret = new Array(headersLength)\n\n  let key\n  let val\n\n  for (let n = 0; n < headersLength; n += 2) {\n    key = headers[n]\n    val = headers[n + 1]\n\n    typeof key !== 'string' && (key = key.toString())\n    typeof val !== 'string' && (val = val.toString('latin1'))\n\n    ret[n] = key\n    ret[n + 1] = val\n  }\n\n  return ret\n}\n\n/**\n * @param {Record<string, string | string[]>} headers\n * @returns {Buffer[]}\n */\nfunction toRawHeaders (headers) {\n  const rawHeaders = []\n\n  for (const [name, value] of Object.entries(headers)) {\n    if (Array.isArray(value)) {\n      for (const entry of value) {\n        rawHeaders.push(Buffer.from(name, 'latin1'), Buffer.from(`${entry}`, 'latin1'))\n      }\n    } else {\n      rawHeaders.push(Buffer.from(name, 'latin1'), Buffer.from(`${value}`, 'latin1'))\n    }\n  }\n\n  return rawHeaders\n}\n\n/**\n * @param {string[]} headers\n * @param {Buffer[]} headers\n */\nfunction encodeRawHeaders (headers) {\n  if (!Array.isArray(headers)) {\n    throw new TypeError('expected headers to be an array')\n  }\n  return headers.map(x => Buffer.from(x))\n}\n\n/**\n * @param {*} buffer\n * @returns {buffer is Buffer}\n */\nfunction isBuffer (buffer) {\n  // See, https://github.com/mcollina/undici/pull/319\n  return buffer instanceof Uint8Array || Buffer.isBuffer(buffer)\n}\n\n/**\n * Asserts that the handler object is a request handler.\n *\n * @param {object} handler\n * @param {string} method\n * @param {string} [upgrade]\n * @returns {asserts handler is import('../api/api-request').RequestHandler}\n */\nfunction assertRequestHandler (handler, method, upgrade) {\n  if (!handler || typeof handler !== 'object') {\n    throw new InvalidArgumentError('handler must be an object')\n  }\n\n  if (typeof handler.onRequestStart !== 'function') {\n    throw new InvalidArgumentError('invalid onRequestStart method')\n  }\n\n  if (typeof handler.onResponseError !== 'function') {\n    throw new InvalidArgumentError('invalid onResponseError method')\n  }\n\n  if (typeof handler.onBodySent !== 'function' && handler.onBodySent !== undefined) {\n    throw new InvalidArgumentError('invalid onBodySent method')\n  }\n\n  if (typeof handler.onRequestSent !== 'function' && handler.onRequestSent !== undefined) {\n    throw new InvalidArgumentError('invalid onRequestSent method')\n  }\n\n  if (upgrade || method === 'CONNECT') {\n    if (typeof handler.onRequestUpgrade !== 'function') {\n      throw new InvalidArgumentError('invalid onRequestUpgrade method')\n    }\n  } else {\n    if (typeof handler.onResponseStart !== 'function') {\n      throw new InvalidArgumentError('invalid onResponseStart method')\n    }\n\n    if (typeof handler.onResponseData !== 'function') {\n      throw new InvalidArgumentError('invalid onResponseData method')\n    }\n\n    if (typeof handler.onResponseEnd !== 'function') {\n      throw new InvalidArgumentError('invalid onResponseEnd method')\n    }\n  }\n}\n\n/**\n * A body is disturbed if it has been read from and it cannot be re-used without\n * losing state or data.\n * @param {import('node:stream').Readable} body\n * @returns {boolean}\n */\nfunction isDisturbed (body) {\n  // TODO (fix): Why is body[kBodyUsed] needed?\n  return !!(body && (stream.isDisturbed(body) || body[kBodyUsed]))\n}\n\n/**\n * @typedef {object} SocketInfo\n * @property {string} [localAddress]\n * @property {number} [localPort]\n * @property {string} [remoteAddress]\n * @property {number} [remotePort]\n * @property {string} [remoteFamily]\n * @property {number} [timeout]\n * @property {number} bytesWritten\n * @property {number} bytesRead\n */\n\n/**\n * @param {import('net').Socket} socket\n * @returns {SocketInfo}\n */\nfunction getSocketInfo (socket) {\n  return {\n    localAddress: socket.localAddress,\n    localPort: socket.localPort,\n    remoteAddress: socket.remoteAddress,\n    remotePort: socket.remotePort,\n    remoteFamily: socket.remoteFamily,\n    timeout: socket.timeout,\n    bytesWritten: socket.bytesWritten,\n    bytesRead: socket.bytesRead\n  }\n}\n\n/**\n * @param {Iterable} iterable\n * @returns {ReadableStream}\n */\nfunction ReadableStreamFrom (iterable) {\n  // We cannot use ReadableStream.from here because it does not return a byte stream.\n\n  let iterator\n  return new ReadableStream(\n    {\n      start () {\n        iterator = iterable[Symbol.asyncIterator]()\n      },\n      pull (controller) {\n        return iterator.next().then(({ done, value }) => {\n          if (done) {\n            return queueMicrotask(() => {\n              controller.close()\n              controller.byobRequest?.respond(0)\n            })\n          } else {\n            const buf = Buffer.isBuffer(value) ? value : Buffer.from(value)\n            if (buf.byteLength) {\n              return controller.enqueue(new Uint8Array(buf))\n            } else {\n              return this.pull(controller)\n            }\n          }\n        })\n      },\n      cancel () {\n        return iterator.return()\n      },\n      type: 'bytes'\n    }\n  )\n}\n\n/**\n * The object should be a FormData instance and contains all the required\n * methods.\n * @param {*} object\n * @returns {object is FormData}\n */\nfunction isFormDataLike (object) {\n  return (\n    object &&\n    typeof object === 'object' &&\n    typeof object.append === 'function' &&\n    typeof object.delete === 'function' &&\n    typeof object.get === 'function' &&\n    typeof object.getAll === 'function' &&\n    typeof object.has === 'function' &&\n    typeof object.set === 'function' &&\n    object[Symbol.toStringTag] === 'FormData'\n  )\n}\n\nfunction addAbortListener (signal, listener) {\n  if (signal instanceof AbortSignal) {\n    const disposable = addAbortListenerNative(signal, listener)\n    return () => disposable[Symbol.dispose]()\n  }\n\n  if (typeof signal.addEventListener === 'function') {\n    signal.addEventListener('abort', listener, { once: true })\n    return () => signal.removeEventListener('abort', listener)\n  }\n  signal.once('abort', listener)\n  return () => signal.removeListener('abort', listener)\n}\n\nconst validTokenChars = new Uint8Array([\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0-15\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16-31\n  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32-47 (!\"#$%&'()*+,-./)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48-63 (0-9:;<=>?)\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64-79 (@A-O)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80-95 (P-Z[\\]^_)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96-111 (`a-o)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, // 112-127 (p-z{|}~)\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 128-143\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 144-159\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 160-175\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 176-191\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 192-207\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 208-223\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 224-239\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0  // 240-255\n])\n\n/**\n * @see https://tools.ietf.org/html/rfc7230#section-3.2.6\n * @param {number} c\n * @returns {boolean}\n */\nfunction isTokenCharCode (c) {\n  return (validTokenChars[c] === 1)\n}\n\nconst tokenRegExp = /^[\\^_`a-zA-Z\\-0-9!#$%&'*+.|~]+$/\n\n/**\n * @param {string} characters\n * @returns {boolean}\n */\nfunction isValidHTTPToken (characters) {\n  if (characters.length >= 12) return tokenRegExp.test(characters)\n  if (characters.length === 0) return false\n\n  for (let i = 0; i < characters.length; i++) {\n    if (validTokenChars[characters.charCodeAt(i)] !== 1) {\n      return false\n    }\n  }\n  return true\n}\n\n// headerCharRegex have been lifted from\n// https://github.com/nodejs/node/blob/main/lib/_http_common.js\n\n/**\n * Matches if val contains an invalid field-vchar\n *  field-value    = *( field-content / obs-fold )\n *  field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n *  field-vchar    = VCHAR / obs-text\n */\nconst headerCharRegex = /[^\\t\\x20-\\x7e\\x80-\\xff]/\n\n/**\n * @param {string} characters\n * @returns {boolean}\n */\nfunction isValidHeaderValue (characters) {\n  return !headerCharRegex.test(characters)\n}\n\nconst rangeHeaderRegex = /^bytes (\\d+)-(\\d+)\\/(\\d+)?$/\n\n/**\n * @typedef {object} RangeHeader\n * @property {number} start\n * @property {number | null} end\n * @property {number | null} size\n */\n\n/**\n * Parse accordingly to RFC 9110\n * @see https://www.rfc-editor.org/rfc/rfc9110#field.content-range\n * @param {string} [range]\n * @returns {RangeHeader|null}\n */\nfunction parseRangeHeader (range) {\n  if (range == null || range === '') return { start: 0, end: null, size: null }\n\n  const m = range ? range.match(rangeHeaderRegex) : null\n  return m\n    ? {\n        start: parseInt(m[1]),\n        end: m[2] ? parseInt(m[2]) : null,\n        size: m[3] ? parseInt(m[3]) : null\n      }\n    : null\n}\n\n/**\n * @template {import(\"events\").EventEmitter} T\n * @param {T} obj\n * @param {string} name\n * @param {(...args: any[]) => void} listener\n * @returns {T}\n */\nfunction addListener (obj, name, listener) {\n  const listeners = (obj[kListeners] ??= [])\n  listeners.push([name, listener])\n  obj.on(name, listener)\n  return obj\n}\n\n/**\n * @template {import(\"events\").EventEmitter} T\n * @param {T} obj\n * @returns {T}\n */\nfunction removeAllListeners (obj) {\n  if (obj[kListeners] != null) {\n    for (const [name, listener] of obj[kListeners]) {\n      obj.removeListener(name, listener)\n    }\n    obj[kListeners] = null\n  }\n  return obj\n}\n\n/**\n * @param {import ('../dispatcher/client')} client\n * @param {import ('../core/request')} request\n * @param {Error} err\n */\nfunction errorRequest (client, request, err) {\n  try {\n    request.onResponseError(err)\n    assert(request.aborted)\n  } catch (err) {\n    client.emit('error', err)\n  }\n}\n\n/**\n * @param {WeakRef<net.Socket>} socketWeakRef\n * @param {object} opts\n * @param {number} opts.timeout\n * @param {string} opts.hostname\n * @param {number} opts.port\n * @returns {() => void}\n */\nconst setupConnectTimeout = process.platform === 'win32'\n  ? (socketWeakRef, opts) => {\n      if (!opts.timeout) {\n        return noop\n      }\n\n      let s1 = null\n      let s2 = null\n      const fastTimer = timers.setFastTimeout(() => {\n      // setImmediate is added to make sure that we prioritize socket error events over timeouts\n        s1 = setImmediate(() => {\n        // Windows needs an extra setImmediate probably due to implementation differences in the socket logic\n          s2 = setImmediate(() => onConnectTimeout(socketWeakRef.deref(), opts))\n        })\n      }, opts.timeout)\n      return () => {\n        timers.clearFastTimeout(fastTimer)\n        clearImmediate(s1)\n        clearImmediate(s2)\n      }\n    }\n  : (socketWeakRef, opts) => {\n      if (!opts.timeout) {\n        return noop\n      }\n\n      let s1 = null\n      const fastTimer = timers.setFastTimeout(() => {\n      // setImmediate is added to make sure that we prioritize socket error events over timeouts\n        s1 = setImmediate(() => {\n          onConnectTimeout(socketWeakRef.deref(), opts)\n        })\n      }, opts.timeout)\n      return () => {\n        timers.clearFastTimeout(fastTimer)\n        clearImmediate(s1)\n      }\n    }\n\n/**\n * @param {net.Socket} socket\n * @param {object} opts\n * @param {number} opts.timeout\n * @param {string} opts.hostname\n * @param {number} opts.port\n */\nfunction onConnectTimeout (socket, opts) {\n  // The socket could be already garbage collected\n  if (socket == null) {\n    return\n  }\n\n  let message = 'Connect Timeout Error'\n  if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) {\n    message += ` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(', ')},`\n  } else {\n    message += ` (attempted address: ${opts.hostname}:${opts.port},`\n  }\n\n  message += ` timeout: ${opts.timeout}ms)`\n\n  destroy(socket, new ConnectTimeoutError(message))\n}\n\n/**\n * @param {string} urlString\n * @returns {string}\n */\nfunction getProtocolFromUrlString (urlString) {\n  if (\n    urlString[0] === 'h' &&\n    urlString[1] === 't' &&\n    urlString[2] === 't' &&\n    urlString[3] === 'p'\n  ) {\n    switch (urlString[4]) {\n      case ':':\n        return 'http:'\n      case 's':\n        if (urlString[5] === ':') {\n          return 'https:'\n        }\n    }\n  }\n  // fallback if none of the usual suspects\n  return urlString.slice(0, urlString.indexOf(':') + 1)\n}\n\nconst kEnumerableProperty = Object.create(null)\nkEnumerableProperty.enumerable = true\n\nconst normalizedMethodRecordsBase = {\n  delete: 'DELETE',\n  DELETE: 'DELETE',\n  get: 'GET',\n  GET: 'GET',\n  head: 'HEAD',\n  HEAD: 'HEAD',\n  options: 'OPTIONS',\n  OPTIONS: 'OPTIONS',\n  post: 'POST',\n  POST: 'POST',\n  put: 'PUT',\n  PUT: 'PUT'\n}\n\nconst normalizedMethodRecords = {\n  ...normalizedMethodRecordsBase,\n  patch: 'patch',\n  PATCH: 'PATCH'\n}\n\n// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.\nObject.setPrototypeOf(normalizedMethodRecordsBase, null)\nObject.setPrototypeOf(normalizedMethodRecords, null)\n\nmodule.exports = {\n  kEnumerableProperty,\n  isDisturbed,\n  isBlobLike,\n  parseOrigin,\n  parseURL,\n  getServerName,\n  isStream,\n  isIterable,\n  hasSafeIterator,\n  isAsyncIterable,\n  isDestroyed,\n  headerNameToString,\n  bufferToLowerCasedHeaderName,\n  addListener,\n  removeAllListeners,\n  errorRequest,\n  parseRawHeaders,\n  toRawHeaders,\n  encodeRawHeaders,\n  parseHeaders,\n  parseKeepAliveTimeout,\n  destroy,\n  bodyLength,\n  deepClone,\n  ReadableStreamFrom,\n  isBuffer,\n  assertRequestHandler,\n  getSocketInfo,\n  isFormDataLike,\n  pathHasQueryOrFragment,\n  serializePathWithQuery,\n  addAbortListener,\n  isValidHTTPToken,\n  isValidHeaderValue,\n  isTokenCharCode,\n  parseRangeHeader,\n  normalizedMethodRecordsBase,\n  normalizedMethodRecords,\n  isValidPort,\n  isHttpOrHttpsPrefixed,\n  safeHTTPMethods: Object.freeze(['GET', 'HEAD', 'OPTIONS', 'TRACE']),\n  wrapRequestBody,\n  setupConnectTimeout,\n  getProtocolFromUrlString\n}\n", "'use strict'\n\nconst {\n  kConnected,\n  kPending,\n  kRunning,\n  kSize,\n  kFree,\n  kQueued\n} = require('../core/symbols')\n\nclass ClientStats {\n  constructor (client) {\n    this.connected = client[kConnected]\n    this.pending = client[kPending]\n    this.running = client[kRunning]\n    this.size = client[kSize]\n  }\n}\n\nclass PoolStats {\n  constructor (pool) {\n    this.connected = pool[kConnected]\n    this.free = pool[kFree]\n    this.pending = pool[kPending]\n    this.queued = pool[kQueued]\n    this.running = pool[kRunning]\n    this.size = pool[kSize]\n  }\n}\n\nmodule.exports = { ClientStats, PoolStats }\n", "'use strict'\n\nconst diagnosticsChannel = require('node:diagnostics_channel')\nconst util = require('node:util')\n\nconst undiciDebugLog = util.debuglog('undici')\nconst fetchDebuglog = util.debuglog('fetch')\nconst websocketDebuglog = util.debuglog('websocket')\n\nconst channels = {\n  // Client\n  beforeConnect: diagnosticsChannel.channel('undici:client:beforeConnect'),\n  connected: diagnosticsChannel.channel('undici:client:connected'),\n  connectError: diagnosticsChannel.channel('undici:client:connectError'),\n  sendHeaders: diagnosticsChannel.channel('undici:client:sendHeaders'),\n  // Request\n  create: diagnosticsChannel.channel('undici:request:create'),\n  bodySent: diagnosticsChannel.channel('undici:request:bodySent'),\n  bodyChunkSent: diagnosticsChannel.channel('undici:request:bodyChunkSent'),\n  bodyChunkReceived: diagnosticsChannel.channel('undici:request:bodyChunkReceived'),\n  headers: diagnosticsChannel.channel('undici:request:headers'),\n  trailers: diagnosticsChannel.channel('undici:request:trailers'),\n  error: diagnosticsChannel.channel('undici:request:error'),\n  // WebSocket\n  open: diagnosticsChannel.channel('undici:websocket:open'),\n  close: diagnosticsChannel.channel('undici:websocket:close'),\n  socketError: diagnosticsChannel.channel('undici:websocket:socket_error'),\n  ping: diagnosticsChannel.channel('undici:websocket:ping'),\n  pong: diagnosticsChannel.channel('undici:websocket:pong'),\n  // ProxyAgent\n  proxyConnected: diagnosticsChannel.channel('undici:proxy:connected')\n}\n\nlet isTrackingClientEvents = false\n\nfunction trackClientEvents (debugLog = undiciDebugLog) {\n  if (isTrackingClientEvents) {\n    return\n  }\n\n  // Check if any of the channels already have subscribers to prevent duplicate subscriptions\n  // This can happen when both Node.js built-in undici and undici as a dependency are present\n  if (channels.beforeConnect.hasSubscribers || channels.connected.hasSubscribers ||\n      channels.connectError.hasSubscribers || channels.sendHeaders.hasSubscribers) {\n    isTrackingClientEvents = true\n    return\n  }\n\n  isTrackingClientEvents = true\n\n  diagnosticsChannel.subscribe('undici:client:beforeConnect',\n    evt => {\n      const {\n        connectParams: { version, protocol, port, host }\n      } = evt\n      debugLog(\n        'connecting to %s%s using %s%s',\n        host,\n        port ? `:${port}` : '',\n        protocol,\n        version\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:client:connected',\n    evt => {\n      const {\n        connectParams: { version, protocol, port, host }\n      } = evt\n      debugLog(\n        'connected to %s%s using %s%s',\n        host,\n        port ? `:${port}` : '',\n        protocol,\n        version\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:client:connectError',\n    evt => {\n      const {\n        connectParams: { version, protocol, port, host },\n        error\n      } = evt\n      debugLog(\n        'connection to %s%s using %s%s errored - %s',\n        host,\n        port ? `:${port}` : '',\n        protocol,\n        version,\n        error.message\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:client:sendHeaders',\n    evt => {\n      const {\n        request: { method, path, origin }\n      } = evt\n      debugLog('sending request to %s %s%s', method, origin, path)\n    })\n}\n\nlet isTrackingRequestEvents = false\n\nfunction trackRequestEvents (debugLog = undiciDebugLog) {\n  if (isTrackingRequestEvents) {\n    return\n  }\n\n  // Check if any of the channels already have subscribers to prevent duplicate subscriptions\n  // This can happen when both Node.js built-in undici and undici as a dependency are present\n  if (channels.headers.hasSubscribers || channels.trailers.hasSubscribers ||\n      channels.error.hasSubscribers) {\n    isTrackingRequestEvents = true\n    return\n  }\n\n  isTrackingRequestEvents = true\n\n  diagnosticsChannel.subscribe('undici:request:headers',\n    evt => {\n      const {\n        request: { method, path, origin },\n        response: { statusCode }\n      } = evt\n      debugLog(\n        'received response to %s %s%s - HTTP %d',\n        method,\n        origin,\n        path,\n        statusCode\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:request:trailers',\n    evt => {\n      const {\n        request: { method, path, origin }\n      } = evt\n      debugLog('trailers received from %s %s%s', method, origin, path)\n    })\n\n  diagnosticsChannel.subscribe('undici:request:error',\n    evt => {\n      const {\n        request: { method, path, origin },\n        error\n      } = evt\n      debugLog(\n        'request to %s %s%s errored - %s',\n        method,\n        origin,\n        path,\n        error.message\n      )\n    })\n}\n\nlet isTrackingWebSocketEvents = false\n\nfunction trackWebSocketEvents (debugLog = websocketDebuglog) {\n  if (isTrackingWebSocketEvents) {\n    return\n  }\n\n  // Check if any of the channels already have subscribers to prevent duplicate subscriptions\n  // This can happen when both Node.js built-in undici and undici as a dependency are present\n  if (channels.open.hasSubscribers || channels.close.hasSubscribers ||\n      channels.socketError.hasSubscribers || channels.ping.hasSubscribers ||\n      channels.pong.hasSubscribers) {\n    isTrackingWebSocketEvents = true\n    return\n  }\n\n  isTrackingWebSocketEvents = true\n\n  diagnosticsChannel.subscribe('undici:websocket:open',\n    evt => {\n      if (evt.address != null) {\n        const { address, port } = evt.address\n        debugLog('connection opened %s%s', address, port ? `:${port}` : '')\n      } else {\n        debugLog('connection opened')\n      }\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:close',\n    evt => {\n      const { websocket, code, reason } = evt\n      debugLog(\n        'closed connection to %s - %s %s',\n        websocket.url,\n        code,\n        reason\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:socket_error',\n    err => {\n      debugLog('connection errored - %s', err.message)\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:ping',\n    evt => {\n      debugLog('ping received')\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:pong',\n    evt => {\n      debugLog('pong received')\n    })\n}\n\nif (undiciDebugLog.enabled || fetchDebuglog.enabled) {\n  trackClientEvents(fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog)\n  trackRequestEvents(fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog)\n}\n\nif (websocketDebuglog.enabled) {\n  trackClientEvents(undiciDebugLog.enabled ? undiciDebugLog : websocketDebuglog)\n  trackWebSocketEvents(websocketDebuglog)\n}\n\nmodule.exports = {\n  channels\n}\n", "'use strict'\n\nconst {\n  InvalidArgumentError,\n  NotSupportedError\n} = require('./errors')\nconst assert = require('node:assert')\nconst {\n  isValidHTTPToken,\n  isValidHeaderValue,\n  isStream,\n  destroy,\n  isBuffer,\n  isFormDataLike,\n  isIterable,\n  hasSafeIterator,\n  isBlobLike,\n  serializePathWithQuery,\n  parseHeaders,\n  assertRequestHandler,\n  getServerName,\n  normalizedMethodRecords,\n  getProtocolFromUrlString\n} = require('./util')\nconst { channels } = require('./diagnostics.js')\nconst { headerNameLowerCasedRecord } = require('./constants')\n\n// Verifies that a given path is valid does not contain control chars \\x00 to \\x20\nconst invalidPathRegex = /[^\\u0021-\\u00ff]/\n\nfunction isValidContentLengthHeaderValue (val) {\n  if (typeof val !== 'string' || val.length === 0) {\n    return false\n  }\n\n  for (let i = 0; i < val.length; i++) {\n    const charCode = val.charCodeAt(i)\n    if (charCode < 48 || charCode > 57) {\n      return false\n    }\n  }\n\n  return true\n}\n\nconst kHandler = Symbol('handler')\nconst kController = Symbol('controller')\nconst kResume = Symbol('resume')\n\nclass RequestController {\n  #paused = false\n  #reason = null\n  #aborted = false\n  #abort\n\n  [kResume] = null\n\n  rawHeaders = null\n  rawTrailers = null\n\n  constructor (abort) {\n    this.#abort = abort\n  }\n\n  pause () {\n    this.#paused = true\n  }\n\n  resume () {\n    if (this.#paused) {\n      this.#paused = false\n      this[kResume]?.()\n    }\n  }\n\n  abort (reason) {\n    if (!this.#aborted) {\n      this.#aborted = true\n      this.#reason = reason\n      this.#abort(reason)\n    }\n  }\n\n  get aborted () {\n    return this.#aborted\n  }\n\n  get reason () {\n    return this.#reason\n  }\n\n  get paused () {\n    return this.#paused\n  }\n}\n\nclass Request {\n  constructor (origin, {\n    path,\n    method,\n    body,\n    headers,\n    query,\n    idempotent,\n    blocking,\n    upgrade,\n    headersTimeout,\n    bodyTimeout,\n    reset,\n    expectContinue,\n    servername,\n    throwOnError,\n    maxRedirections,\n    typeOfService\n  }, handler) {\n    if (typeof path !== 'string') {\n      throw new InvalidArgumentError('path must be a string')\n    } else if (\n      path[0] !== '/' &&\n      !(path.startsWith('http://') || path.startsWith('https://')) &&\n      method !== 'CONNECT'\n    ) {\n      throw new InvalidArgumentError('path must be an absolute URL or start with a slash')\n    } else if (invalidPathRegex.test(path)) {\n      throw new InvalidArgumentError('invalid request path')\n    }\n\n    if (typeof method !== 'string') {\n      throw new InvalidArgumentError('method must be a string')\n    } else if (normalizedMethodRecords[method] === undefined && !isValidHTTPToken(method)) {\n      throw new InvalidArgumentError('invalid request method')\n    }\n\n    if (upgrade && typeof upgrade !== 'string') {\n      throw new InvalidArgumentError('upgrade must be a string')\n    }\n\n    if (upgrade && !isValidHeaderValue(upgrade)) {\n      throw new InvalidArgumentError('invalid upgrade header')\n    }\n\n    if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) {\n      throw new InvalidArgumentError('invalid headersTimeout')\n    }\n\n    if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) {\n      throw new InvalidArgumentError('invalid bodyTimeout')\n    }\n\n    if (reset != null && typeof reset !== 'boolean') {\n      throw new InvalidArgumentError('invalid reset')\n    }\n\n    if (expectContinue != null && typeof expectContinue !== 'boolean') {\n      throw new InvalidArgumentError('invalid expectContinue')\n    }\n\n    if (throwOnError != null) {\n      throw new InvalidArgumentError('invalid throwOnError')\n    }\n\n    if (maxRedirections != null && maxRedirections !== 0) {\n      throw new InvalidArgumentError('maxRedirections is not supported, use the redirect interceptor')\n    }\n\n    if (typeOfService != null && (!Number.isInteger(typeOfService) || typeOfService < 0 || typeOfService > 255)) {\n      throw new InvalidArgumentError('typeOfService must be an integer between 0 and 255')\n    }\n\n    this.headersTimeout = headersTimeout\n\n    this.bodyTimeout = bodyTimeout\n\n    this.method = method\n\n    this.typeOfService = typeOfService ?? 0\n\n    this.abort = null\n\n    if (body == null) {\n      this.body = null\n    } else if (isStream(body)) {\n      this.body = body\n\n      const rState = this.body._readableState\n      if (!rState || !rState.autoDestroy) {\n        this.endHandler = function autoDestroy () {\n          destroy(this)\n        }\n        this.body.on('end', this.endHandler)\n      }\n\n      this.errorHandler = err => {\n        if (this.abort) {\n          this.abort(err)\n        } else {\n          this.error = err\n        }\n      }\n      this.body.on('error', this.errorHandler)\n    } else if (isBuffer(body)) {\n      this.body = body.byteLength ? body : null\n    } else if (ArrayBuffer.isView(body)) {\n      this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null\n    } else if (body instanceof ArrayBuffer) {\n      this.body = body.byteLength ? Buffer.from(body) : null\n    } else if (typeof body === 'string') {\n      this.body = body.length ? Buffer.from(body) : null\n    } else if (isFormDataLike(body) || isIterable(body) || isBlobLike(body)) {\n      this.body = body\n    } else {\n      throw new InvalidArgumentError('body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable')\n    }\n\n    this.completed = false\n    this.aborted = false\n\n    this.upgrade = upgrade || null\n\n    this.path = query ? serializePathWithQuery(path, query) : path\n\n    // TODO: shall we maybe standardize it to an URL object?\n    this.origin = origin\n\n    this.protocol = getProtocolFromUrlString(origin)\n\n    this.idempotent = idempotent == null\n      ? method === 'HEAD' || method === 'GET'\n      : idempotent\n\n    this.blocking = blocking ?? this.method !== 'HEAD'\n\n    this.reset = reset == null ? null : reset\n\n    this.host = null\n\n    this.contentLength = null\n\n    this.contentType = null\n\n    this.headers = []\n\n    // Only for H2\n    this.expectContinue = expectContinue != null ? expectContinue : false\n\n    if (Array.isArray(headers)) {\n      if (headers.length % 2 !== 0) {\n        throw new InvalidArgumentError('headers array must be even')\n      }\n      for (let i = 0; i < headers.length; i += 2) {\n        processHeader(this, headers[i], headers[i + 1])\n      }\n    } else if (headers && typeof headers === 'object') {\n      if (hasSafeIterator(headers)) {\n        for (const header of headers) {\n          if (!Array.isArray(header) || header.length !== 2) {\n            throw new InvalidArgumentError('headers must be in key-value pair format')\n          }\n          processHeader(this, header[0], header[1])\n        }\n      } else {\n        const keys = Object.keys(headers)\n        for (let i = 0; i < keys.length; ++i) {\n          processHeader(this, keys[i], headers[keys[i]])\n        }\n      }\n    } else if (headers != null) {\n      throw new InvalidArgumentError('headers must be an object or an array')\n    }\n\n    assertRequestHandler(handler, method, upgrade)\n\n    this.servername = servername || getServerName(this.host) || null\n\n    this[kHandler] = handler\n\n    if (channels.create.hasSubscribers) {\n      channels.create.publish({ request: this })\n    }\n  }\n\n  onBodySent (chunk) {\n    if (channels.bodyChunkSent.hasSubscribers) {\n      channels.bodyChunkSent.publish({ request: this, chunk })\n    }\n    if (this[kHandler].onBodySent) {\n      try {\n        return this[kHandler].onBodySent(chunk)\n      } catch (err) {\n        this.abort(err)\n      }\n    }\n  }\n\n  onRequestSent () {\n    if (channels.bodySent.hasSubscribers) {\n      channels.bodySent.publish({ request: this })\n    }\n\n    if (this[kHandler].onRequestSent) {\n      try {\n        return this[kHandler].onRequestSent()\n      } catch (err) {\n        this.abort(err)\n      }\n    }\n  }\n\n  onRequestStart (abort, context) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    this[kController] = new RequestController(abort)\n\n    if (this.error) {\n      this[kController].abort(this.error)\n      return\n    }\n\n    this.abort = abort\n    return this[kHandler].onRequestStart(this[kController], context)\n  }\n\n  onResponseStarted () {\n    return this[kHandler].onResponseStarted?.()\n  }\n\n  onResponseStart (statusCode, headers, resume, statusText) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    if (channels.headers.hasSubscribers) {\n      channels.headers.publish({ request: this, response: { statusCode, headers, statusText } })\n    }\n\n    const controller = this[kController]\n    if (controller) {\n      controller[kResume] = resume\n      controller.rawHeaders = headers\n    }\n\n    const parsedHeaders = Array.isArray(headers) ? parseHeaders(headers) : headers\n\n    try {\n      this[kHandler].onResponseStart?.(controller, statusCode, parsedHeaders, statusText)\n      return !controller?.paused\n    } catch (err) {\n      this.abort(err)\n      return false\n    }\n  }\n\n  onResponseData (chunk) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    if (channels.bodyChunkReceived.hasSubscribers) {\n      channels.bodyChunkReceived.publish({ request: this, chunk })\n    }\n\n    const controller = this[kController]\n    try {\n      this[kHandler].onResponseData?.(controller, chunk)\n      return !controller?.paused\n    } catch (err) {\n      this.abort(err)\n      return false\n    }\n  }\n\n  onRequestUpgrade (statusCode, headers, socket) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    const controller = this[kController]\n    if (controller) {\n      controller.rawHeaders = headers\n    }\n\n    const parsedHeaders = Array.isArray(headers) ? parseHeaders(headers) : headers\n\n    return this[kHandler].onRequestUpgrade?.(controller, statusCode, parsedHeaders, socket)\n  }\n\n  onResponseEnd (trailers) {\n    this.onFinally()\n\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    this.completed = true\n    if (channels.trailers.hasSubscribers) {\n      channels.trailers.publish({ request: this, trailers })\n    }\n\n    const controller = this[kController]\n    if (controller) {\n      controller.rawTrailers = trailers\n    }\n\n    const parsedTrailers = Array.isArray(trailers) ? parseHeaders(trailers) : trailers\n\n    try {\n      return this[kHandler].onResponseEnd?.(controller, parsedTrailers)\n    } catch (err) {\n      // TODO (fix): This might be a bad idea?\n      this.onResponseError(err)\n    }\n  }\n\n  onResponseError (error) {\n    this.onFinally()\n\n    if (channels.error.hasSubscribers) {\n      channels.error.publish({ request: this, error })\n    }\n\n    if (this.aborted) {\n      return\n    }\n    this.aborted = true\n\n    const controller = this[kController]\n\n    return this[kHandler].onResponseError?.(controller, error)\n  }\n\n  onFinally () {\n    if (this.errorHandler) {\n      this.body.off('error', this.errorHandler)\n      this.errorHandler = null\n    }\n\n    if (this.endHandler) {\n      this.body.off('end', this.endHandler)\n      this.endHandler = null\n    }\n  }\n\n  addHeader (key, value) {\n    processHeader(this, key, value)\n    return this\n  }\n}\n\nfunction processHeader (request, key, val) {\n  if (val && (typeof val === 'object' && !Array.isArray(val))) {\n    throw new InvalidArgumentError(`invalid ${key} header`)\n  } else if (val === undefined) {\n    return\n  }\n\n  let headerName = headerNameLowerCasedRecord[key]\n\n  if (headerName === undefined) {\n    headerName = key.toLowerCase()\n    if (headerNameLowerCasedRecord[headerName] === undefined && !isValidHTTPToken(headerName)) {\n      throw new InvalidArgumentError('invalid header key')\n    }\n  }\n\n  if (Array.isArray(val)) {\n    const arr = []\n    for (let i = 0; i < val.length; i++) {\n      if (typeof val[i] === 'string') {\n        if (!isValidHeaderValue(val[i])) {\n          throw new InvalidArgumentError(`invalid ${key} header`)\n        }\n        arr.push(val[i])\n      } else if (val[i] === null) {\n        arr.push('')\n      } else if (typeof val[i] === 'object') {\n        throw new InvalidArgumentError(`invalid ${key} header`)\n      } else {\n        arr.push(`${val[i]}`)\n      }\n    }\n    val = arr\n  } else if (typeof val === 'string') {\n    if (!isValidHeaderValue(val)) {\n      throw new InvalidArgumentError(`invalid ${key} header`)\n    }\n  } else if (val === null) {\n    val = ''\n  } else {\n    val = `${val}`\n  }\n\n  if (headerName === 'host') {\n    if (request.host !== null) {\n      throw new InvalidArgumentError('duplicate host header')\n    }\n    if (typeof val !== 'string') {\n      throw new InvalidArgumentError('invalid host header')\n    }\n    // Consumed by Client\n    request.host = val\n  } else if (headerName === 'content-length') {\n    if (request.contentLength !== null) {\n      throw new InvalidArgumentError('duplicate content-length header')\n    }\n    if (!isValidContentLengthHeaderValue(val)) {\n      throw new InvalidArgumentError('invalid content-length header')\n    }\n    request.contentLength = parseInt(val, 10)\n  } else if (request.contentType === null && headerName === 'content-type') {\n    request.contentType = val\n    request.headers.push(key, val)\n  } else if (headerName === 'transfer-encoding' || headerName === 'keep-alive' || headerName === 'upgrade') {\n    throw new InvalidArgumentError(`invalid ${headerName} header`)\n  } else if (headerName === 'connection') {\n    // Per RFC 7230 Section 6.1, Connection header can contain\n    // a comma-separated list of connection option tokens (header names)\n    const value = typeof val === 'string' ? val : null\n    if (value === null) {\n      throw new InvalidArgumentError('invalid connection header')\n    }\n\n    for (const token of value.toLowerCase().split(',')) {\n      const trimmed = token.trim()\n      if (!isValidHTTPToken(trimmed)) {\n        throw new InvalidArgumentError('invalid connection header')\n      }\n      if (trimmed === 'close') {\n        request.reset = true\n      }\n    }\n  } else if (headerName === 'expect') {\n    throw new NotSupportedError('expect header not supported')\n  } else {\n    request.headers.push(key, val)\n  }\n}\n\nmodule.exports = Request\n", "'use strict'\nconst EventEmitter = require('node:events')\n\nclass Dispatcher extends EventEmitter {\n  dispatch () {\n    throw new Error('not implemented')\n  }\n\n  close () {\n    throw new Error('not implemented')\n  }\n\n  destroy () {\n    throw new Error('not implemented')\n  }\n\n  compose (...args) {\n    // So we handle [interceptor1, interceptor2] or interceptor1, interceptor2, ...\n    const interceptors = Array.isArray(args[0]) ? args[0] : args\n    let dispatch = this.dispatch.bind(this)\n\n    for (const interceptor of interceptors) {\n      if (interceptor == null) {\n        continue\n      }\n\n      if (typeof interceptor !== 'function') {\n        throw new TypeError(`invalid interceptor, expected function received ${typeof interceptor}`)\n      }\n\n      dispatch = interceptor(dispatch)\n\n      if (dispatch == null || typeof dispatch !== 'function' || dispatch.length !== 2) {\n        throw new TypeError('invalid interceptor')\n      }\n    }\n\n    return new Proxy(this, {\n      get: (target, key) => key === 'dispatch' ? dispatch : target[key]\n    })\n  }\n}\n\nmodule.exports = Dispatcher\n", "'use strict'\n\nconst Dispatcher = require('./dispatcher')\nconst {\n  ClientDestroyedError,\n  ClientClosedError,\n  InvalidArgumentError\n} = require('../core/errors')\nconst { kDestroy, kClose, kClosed, kDestroyed, kDispatch } = require('../core/symbols')\n\nconst kOnDestroyed = Symbol('onDestroyed')\nconst kOnClosed = Symbol('onClosed')\nconst kWebSocketOptions = Symbol('webSocketOptions')\n\nclass DispatcherBase extends Dispatcher {\n  /** @type {boolean} */\n  [kDestroyed] = false;\n\n  /** @type {Array<Function|null} */\n  [kOnDestroyed] = null;\n\n  /** @type {boolean} */\n  [kClosed] = false;\n\n  /** @type {Array<Function>|null} */\n  [kOnClosed] = null\n\n  /**\n   * @param {import('../../types/dispatcher').DispatcherOptions} [opts]\n   */\n  constructor (opts) {\n    super()\n    this[kWebSocketOptions] = opts?.webSocket ?? {}\n  }\n\n  /**\n   * @returns {import('../../types/dispatcher').WebSocketOptions}\n   */\n  get webSocketOptions () {\n    return {\n      maxPayloadSize: this[kWebSocketOptions].maxPayloadSize ?? 128 * 1024 * 1024 // 128 MB default\n    }\n  }\n\n  /** @returns {boolean} */\n  get destroyed () {\n    return this[kDestroyed]\n  }\n\n  /** @returns {boolean} */\n  get closed () {\n    return this[kClosed]\n  }\n\n  close (callback) {\n    if (callback === undefined) {\n      return new Promise((resolve, reject) => {\n        this.close((err, data) => {\n          return err ? reject(err) : resolve(data)\n        })\n      })\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    if (this[kDestroyed]) {\n      const err = new ClientDestroyedError()\n      queueMicrotask(() => callback(err, null))\n      return\n    }\n\n    if (this[kClosed]) {\n      if (this[kOnClosed]) {\n        this[kOnClosed].push(callback)\n      } else {\n        queueMicrotask(() => callback(null, null))\n      }\n      return\n    }\n\n    this[kClosed] = true\n    this[kOnClosed] ??= []\n    this[kOnClosed].push(callback)\n\n    const onClosed = () => {\n      const callbacks = this[kOnClosed]\n      this[kOnClosed] = null\n      for (let i = 0; i < callbacks.length; i++) {\n        callbacks[i](null, null)\n      }\n    }\n\n    // Should not error.\n    this[kClose]()\n      .then(() => this.destroy())\n      .then(() => queueMicrotask(onClosed))\n  }\n\n  destroy (err, callback) {\n    if (typeof err === 'function') {\n      callback = err\n      err = null\n    }\n\n    if (callback === undefined) {\n      return new Promise((resolve, reject) => {\n        this.destroy(err, (err, data) => {\n          return err ? reject(err) : resolve(data)\n        })\n      })\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    if (this[kDestroyed]) {\n      if (this[kOnDestroyed]) {\n        this[kOnDestroyed].push(callback)\n      } else {\n        queueMicrotask(() => callback(null, null))\n      }\n      return\n    }\n\n    if (!err) {\n      err = new ClientDestroyedError()\n    }\n\n    this[kDestroyed] = true\n    this[kOnDestroyed] ??= []\n    this[kOnDestroyed].push(callback)\n\n    const onDestroyed = () => {\n      const callbacks = this[kOnDestroyed]\n      this[kOnDestroyed] = null\n      for (let i = 0; i < callbacks.length; i++) {\n        callbacks[i](null, null)\n      }\n    }\n\n    // Should not error.\n    this[kDestroy](err)\n      .then(() => queueMicrotask(onDestroyed))\n  }\n\n  dispatch (opts, handler) {\n    if (!handler || typeof handler !== 'object') {\n      throw new InvalidArgumentError('handler must be an object')\n    }\n\n    try {\n      if (!opts || typeof opts !== 'object') {\n        throw new InvalidArgumentError('opts must be an object.')\n      }\n\n      if (opts.dispatcher) {\n        throw new InvalidArgumentError('opts.dispatcher is not supported by instance methods. Pass opts.dispatcher to the top-level undici functions or call the dispatcher instance method directly.')\n      }\n\n      if (this[kDestroyed] || this[kOnDestroyed]) {\n        throw new ClientDestroyedError()\n      }\n\n      if (this[kClosed]) {\n        throw new ClientClosedError()\n      }\n\n      return this[kDispatch](opts, handler)\n    } catch (err) {\n      if (typeof handler.onResponseError !== 'function') {\n        throw err\n      }\n\n      handler.onResponseError(null, err)\n\n      return false\n    }\n  }\n}\n\nmodule.exports = DispatcherBase\n", "'use strict'\n\nconst net = require('node:net')\nconst assert = require('node:assert')\nconst util = require('./util')\nconst { InvalidArgumentError } = require('./errors')\n\nlet tls // include tls conditionally since it is not always available\n\n// TODO: session re-use does not wait for the first\n// connection to resolve the session and might therefore\n// resolve the same servername multiple times even when\n// re-use is enabled.\n\nconst SessionCache = class WeakSessionCache {\n  constructor (maxCachedSessions) {\n    this._maxCachedSessions = maxCachedSessions\n    this._sessionCache = new Map()\n    this._sessionRegistry = new FinalizationRegistry((key) => {\n      if (this._sessionCache.size < this._maxCachedSessions) {\n        return\n      }\n\n      const ref = this._sessionCache.get(key)\n      if (ref !== undefined && ref.deref() === undefined) {\n        this._sessionCache.delete(key)\n      }\n    })\n  }\n\n  get (sessionKey) {\n    const ref = this._sessionCache.get(sessionKey)\n    return ref ? ref.deref() : null\n  }\n\n  set (sessionKey, session) {\n    if (this._maxCachedSessions === 0) {\n      return\n    }\n\n    if (this._sessionCache.has(sessionKey)) {\n      this._sessionCache.delete(sessionKey)\n    } else if (this._sessionCache.size >= this._maxCachedSessions) {\n      for (const [key, ref] of this._sessionCache) {\n        if (ref.deref() === undefined) {\n          this._sessionCache.delete(key)\n          return\n        }\n      }\n\n      const oldest = this._sessionCache.keys().next()\n      if (!oldest.done) {\n        this._sessionCache.delete(oldest.value)\n      }\n    }\n\n    this._sessionCache.set(sessionKey, new WeakRef(session))\n    this._sessionRegistry.register(session, sessionKey)\n  }\n}\n\nfunction buildConnector ({ allowH2, useH2c, maxCachedSessions, socketPath, timeout, session: customSession, ...opts }) {\n  if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) {\n    throw new InvalidArgumentError('maxCachedSessions must be a positive integer or zero')\n  }\n\n  const options = { path: socketPath, ...opts }\n  const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions)\n  timeout = timeout == null ? 10e3 : timeout\n  allowH2 = allowH2 != null ? allowH2 : true\n  return function connect ({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) {\n    let socket\n    if (protocol === 'https:') {\n      if (!tls) {\n        tls = require('node:tls')\n      }\n      servername = servername || options.servername || util.getServerName(host) || null\n\n      const sessionKey = servername || hostname\n      assert(sessionKey)\n\n      const session = customSession || sessionCache.get(sessionKey) || null\n\n      port = port || 443\n\n      socket = tls.connect({\n        highWaterMark: 16384, // TLS in node can't have bigger HWM anyway...\n        ...options,\n        servername,\n        session,\n        localAddress,\n        ALPNProtocols: allowH2 ? ['http/1.1', 'h2'] : ['http/1.1'],\n        socket: httpSocket, // upgrade socket connection\n        port,\n        host: hostname\n      })\n\n      socket\n        .on('session', function (session) {\n          // TODO (fix): Can a session become invalid once established? Don't think so?\n          sessionCache.set(sessionKey, session)\n        })\n    } else {\n      assert(!httpSocket, 'httpSocket can only be sent on TLS update')\n\n      port = port || 80\n\n      socket = net.connect({\n        highWaterMark: 64 * 1024, // Same as nodejs fs streams.\n        ...options,\n        localAddress,\n        port,\n        host: hostname\n      })\n      if (useH2c === true) {\n        socket.alpnProtocol = 'h2'\n      }\n    }\n\n    // Set TCP keep alive options on the socket here instead of in connect() for the case of assigning the socket\n    if (options.keepAlive == null || options.keepAlive) {\n      const keepAliveInitialDelay = options.keepAliveInitialDelay === undefined ? 60e3 : options.keepAliveInitialDelay\n      socket.setKeepAlive(true, keepAliveInitialDelay)\n    }\n\n    const clearConnectTimeout = util.setupConnectTimeout(new WeakRef(socket), { timeout, hostname, port })\n\n    socket\n      .setNoDelay(true)\n      .once(protocol === 'https:' ? 'secureConnect' : 'connect', function () {\n        queueMicrotask(clearConnectTimeout)\n\n        if (callback) {\n          const cb = callback\n          callback = null\n          cb(null, this)\n        }\n      })\n      .on('error', function (err) {\n        queueMicrotask(clearConnectTimeout)\n\n        if (callback) {\n          const cb = callback\n          callback = null\n          cb(err)\n        }\n      })\n\n    return socket\n  }\n}\n\nmodule.exports = buildConnector\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.enumToMap = enumToMap;\nfunction enumToMap(obj, filter = [], exceptions = []) {\n    const emptyFilter = (filter?.length ?? 0) === 0;\n    const emptyExceptions = (exceptions?.length ?? 0) === 0;\n    return Object.fromEntries(Object.entries(obj).filter(([, value]) => {\n        return (typeof value === 'number' &&\n            (emptyFilter || filter.includes(value)) &&\n            (emptyExceptions || !exceptions.includes(value)));\n    }));\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SPECIAL_HEADERS = exports.MINOR = exports.MAJOR = exports.HTAB_SP_VCHAR_OBS_TEXT = exports.QUOTED_STRING = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.HEX = exports.URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.STATUSES_HTTP = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.HEADER_STATE = exports.FINISH = exports.STATUSES = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0;\nconst utils_1 = require(\"./utils\");\n// Emums\nexports.ERROR = {\n    OK: 0,\n    INTERNAL: 1,\n    STRICT: 2,\n    CR_EXPECTED: 25,\n    LF_EXPECTED: 3,\n    UNEXPECTED_CONTENT_LENGTH: 4,\n    UNEXPECTED_SPACE: 30,\n    CLOSED_CONNECTION: 5,\n    INVALID_METHOD: 6,\n    INVALID_URL: 7,\n    INVALID_CONSTANT: 8,\n    INVALID_VERSION: 9,\n    INVALID_HEADER_TOKEN: 10,\n    INVALID_CONTENT_LENGTH: 11,\n    INVALID_CHUNK_SIZE: 12,\n    INVALID_STATUS: 13,\n    INVALID_EOF_STATE: 14,\n    INVALID_TRANSFER_ENCODING: 15,\n    CB_MESSAGE_BEGIN: 16,\n    CB_HEADERS_COMPLETE: 17,\n    CB_MESSAGE_COMPLETE: 18,\n    CB_CHUNK_HEADER: 19,\n    CB_CHUNK_COMPLETE: 20,\n    PAUSED: 21,\n    PAUSED_UPGRADE: 22,\n    PAUSED_H2_UPGRADE: 23,\n    USER: 24,\n    CB_URL_COMPLETE: 26,\n    CB_STATUS_COMPLETE: 27,\n    CB_METHOD_COMPLETE: 32,\n    CB_VERSION_COMPLETE: 33,\n    CB_HEADER_FIELD_COMPLETE: 28,\n    CB_HEADER_VALUE_COMPLETE: 29,\n    CB_CHUNK_EXTENSION_NAME_COMPLETE: 34,\n    CB_CHUNK_EXTENSION_VALUE_COMPLETE: 35,\n    CB_RESET: 31,\n    CB_PROTOCOL_COMPLETE: 38,\n};\nexports.TYPE = {\n    BOTH: 0, // default\n    REQUEST: 1,\n    RESPONSE: 2,\n};\nexports.FLAGS = {\n    CONNECTION_KEEP_ALIVE: 1 << 0,\n    CONNECTION_CLOSE: 1 << 1,\n    CONNECTION_UPGRADE: 1 << 2,\n    CHUNKED: 1 << 3,\n    UPGRADE: 1 << 4,\n    CONTENT_LENGTH: 1 << 5,\n    SKIPBODY: 1 << 6,\n    TRAILING: 1 << 7,\n    // 1 << 8 is unused\n    TRANSFER_ENCODING: 1 << 9,\n};\nexports.LENIENT_FLAGS = {\n    HEADERS: 1 << 0,\n    CHUNKED_LENGTH: 1 << 1,\n    KEEP_ALIVE: 1 << 2,\n    TRANSFER_ENCODING: 1 << 3,\n    VERSION: 1 << 4,\n    DATA_AFTER_CLOSE: 1 << 5,\n    OPTIONAL_LF_AFTER_CR: 1 << 6,\n    OPTIONAL_CRLF_AFTER_CHUNK: 1 << 7,\n    OPTIONAL_CR_BEFORE_LF: 1 << 8,\n    SPACES_AFTER_CHUNK_SIZE: 1 << 9,\n};\nexports.METHODS = {\n    'DELETE': 0,\n    'GET': 1,\n    'HEAD': 2,\n    'POST': 3,\n    'PUT': 4,\n    /* pathological */\n    'CONNECT': 5,\n    'OPTIONS': 6,\n    'TRACE': 7,\n    /* WebDAV */\n    'COPY': 8,\n    'LOCK': 9,\n    'MKCOL': 10,\n    'MOVE': 11,\n    'PROPFIND': 12,\n    'PROPPATCH': 13,\n    'SEARCH': 14,\n    'UNLOCK': 15,\n    'BIND': 16,\n    'REBIND': 17,\n    'UNBIND': 18,\n    'ACL': 19,\n    /* subversion */\n    'REPORT': 20,\n    'MKACTIVITY': 21,\n    'CHECKOUT': 22,\n    'MERGE': 23,\n    /* upnp */\n    'M-SEARCH': 24,\n    'NOTIFY': 25,\n    'SUBSCRIBE': 26,\n    'UNSUBSCRIBE': 27,\n    /* RFC-5789 */\n    'PATCH': 28,\n    'PURGE': 29,\n    /* CalDAV */\n    'MKCALENDAR': 30,\n    /* RFC-2068, section 19.6.1.2 */\n    'LINK': 31,\n    'UNLINK': 32,\n    /* icecast */\n    'SOURCE': 33,\n    /* RFC-7540, section 11.6 */\n    'PRI': 34,\n    /* RFC-2326 RTSP */\n    'DESCRIBE': 35,\n    'ANNOUNCE': 36,\n    'SETUP': 37,\n    'PLAY': 38,\n    'PAUSE': 39,\n    'TEARDOWN': 40,\n    'GET_PARAMETER': 41,\n    'SET_PARAMETER': 42,\n    'REDIRECT': 43,\n    'RECORD': 44,\n    /* RAOP */\n    'FLUSH': 45,\n    /* DRAFT https://www.ietf.org/archive/id/draft-ietf-httpbis-safe-method-w-body-02.html */\n    'QUERY': 46,\n};\nexports.STATUSES = {\n    CONTINUE: 100,\n    SWITCHING_PROTOCOLS: 101,\n    PROCESSING: 102,\n    EARLY_HINTS: 103,\n    RESPONSE_IS_STALE: 110, // Unofficial\n    REVALIDATION_FAILED: 111, // Unofficial\n    DISCONNECTED_OPERATION: 112, // Unofficial\n    HEURISTIC_EXPIRATION: 113, // Unofficial\n    MISCELLANEOUS_WARNING: 199, // Unofficial\n    OK: 200,\n    CREATED: 201,\n    ACCEPTED: 202,\n    NON_AUTHORITATIVE_INFORMATION: 203,\n    NO_CONTENT: 204,\n    RESET_CONTENT: 205,\n    PARTIAL_CONTENT: 206,\n    MULTI_STATUS: 207,\n    ALREADY_REPORTED: 208,\n    TRANSFORMATION_APPLIED: 214, // Unofficial\n    IM_USED: 226,\n    MISCELLANEOUS_PERSISTENT_WARNING: 299, // Unofficial\n    MULTIPLE_CHOICES: 300,\n    MOVED_PERMANENTLY: 301,\n    FOUND: 302,\n    SEE_OTHER: 303,\n    NOT_MODIFIED: 304,\n    USE_PROXY: 305,\n    SWITCH_PROXY: 306, // No longer used\n    TEMPORARY_REDIRECT: 307,\n    PERMANENT_REDIRECT: 308,\n    BAD_REQUEST: 400,\n    UNAUTHORIZED: 401,\n    PAYMENT_REQUIRED: 402,\n    FORBIDDEN: 403,\n    NOT_FOUND: 404,\n    METHOD_NOT_ALLOWED: 405,\n    NOT_ACCEPTABLE: 406,\n    PROXY_AUTHENTICATION_REQUIRED: 407,\n    REQUEST_TIMEOUT: 408,\n    CONFLICT: 409,\n    GONE: 410,\n    LENGTH_REQUIRED: 411,\n    PRECONDITION_FAILED: 412,\n    PAYLOAD_TOO_LARGE: 413,\n    URI_TOO_LONG: 414,\n    UNSUPPORTED_MEDIA_TYPE: 415,\n    RANGE_NOT_SATISFIABLE: 416,\n    EXPECTATION_FAILED: 417,\n    IM_A_TEAPOT: 418,\n    PAGE_EXPIRED: 419, // Unofficial\n    ENHANCE_YOUR_CALM: 420, // Unofficial\n    MISDIRECTED_REQUEST: 421,\n    UNPROCESSABLE_ENTITY: 422,\n    LOCKED: 423,\n    FAILED_DEPENDENCY: 424,\n    TOO_EARLY: 425,\n    UPGRADE_REQUIRED: 426,\n    PRECONDITION_REQUIRED: 428,\n    TOO_MANY_REQUESTS: 429,\n    REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL: 430, // Unofficial\n    REQUEST_HEADER_FIELDS_TOO_LARGE: 431,\n    LOGIN_TIMEOUT: 440, // Unofficial\n    NO_RESPONSE: 444, // Unofficial\n    RETRY_WITH: 449, // Unofficial\n    BLOCKED_BY_PARENTAL_CONTROL: 450, // Unofficial\n    UNAVAILABLE_FOR_LEGAL_REASONS: 451,\n    CLIENT_CLOSED_LOAD_BALANCED_REQUEST: 460, // Unofficial\n    INVALID_X_FORWARDED_FOR: 463, // Unofficial\n    REQUEST_HEADER_TOO_LARGE: 494, // Unofficial\n    SSL_CERTIFICATE_ERROR: 495, // Unofficial\n    SSL_CERTIFICATE_REQUIRED: 496, // Unofficial\n    HTTP_REQUEST_SENT_TO_HTTPS_PORT: 497, // Unofficial\n    INVALID_TOKEN: 498, // Unofficial\n    CLIENT_CLOSED_REQUEST: 499, // Unofficial\n    INTERNAL_SERVER_ERROR: 500,\n    NOT_IMPLEMENTED: 501,\n    BAD_GATEWAY: 502,\n    SERVICE_UNAVAILABLE: 503,\n    GATEWAY_TIMEOUT: 504,\n    HTTP_VERSION_NOT_SUPPORTED: 505,\n    VARIANT_ALSO_NEGOTIATES: 506,\n    INSUFFICIENT_STORAGE: 507,\n    LOOP_DETECTED: 508,\n    BANDWIDTH_LIMIT_EXCEEDED: 509,\n    NOT_EXTENDED: 510,\n    NETWORK_AUTHENTICATION_REQUIRED: 511,\n    WEB_SERVER_UNKNOWN_ERROR: 520, // Unofficial\n    WEB_SERVER_IS_DOWN: 521, // Unofficial\n    CONNECTION_TIMEOUT: 522, // Unofficial\n    ORIGIN_IS_UNREACHABLE: 523, // Unofficial\n    TIMEOUT_OCCURED: 524, // Unofficial\n    SSL_HANDSHAKE_FAILED: 525, // Unofficial\n    INVALID_SSL_CERTIFICATE: 526, // Unofficial\n    RAILGUN_ERROR: 527, // Unofficial\n    SITE_IS_OVERLOADED: 529, // Unofficial\n    SITE_IS_FROZEN: 530, // Unofficial\n    IDENTITY_PROVIDER_AUTHENTICATION_ERROR: 561, // Unofficial\n    NETWORK_READ_TIMEOUT: 598, // Unofficial\n    NETWORK_CONNECT_TIMEOUT: 599, // Unofficial\n};\nexports.FINISH = {\n    SAFE: 0,\n    SAFE_WITH_CB: 1,\n    UNSAFE: 2,\n};\nexports.HEADER_STATE = {\n    GENERAL: 0,\n    CONNECTION: 1,\n    CONTENT_LENGTH: 2,\n    TRANSFER_ENCODING: 3,\n    UPGRADE: 4,\n    CONNECTION_KEEP_ALIVE: 5,\n    CONNECTION_CLOSE: 6,\n    CONNECTION_UPGRADE: 7,\n    TRANSFER_ENCODING_CHUNKED: 8,\n};\n// C headers\nexports.METHODS_HTTP = [\n    exports.METHODS.DELETE,\n    exports.METHODS.GET,\n    exports.METHODS.HEAD,\n    exports.METHODS.POST,\n    exports.METHODS.PUT,\n    exports.METHODS.CONNECT,\n    exports.METHODS.OPTIONS,\n    exports.METHODS.TRACE,\n    exports.METHODS.COPY,\n    exports.METHODS.LOCK,\n    exports.METHODS.MKCOL,\n    exports.METHODS.MOVE,\n    exports.METHODS.PROPFIND,\n    exports.METHODS.PROPPATCH,\n    exports.METHODS.SEARCH,\n    exports.METHODS.UNLOCK,\n    exports.METHODS.BIND,\n    exports.METHODS.REBIND,\n    exports.METHODS.UNBIND,\n    exports.METHODS.ACL,\n    exports.METHODS.REPORT,\n    exports.METHODS.MKACTIVITY,\n    exports.METHODS.CHECKOUT,\n    exports.METHODS.MERGE,\n    exports.METHODS['M-SEARCH'],\n    exports.METHODS.NOTIFY,\n    exports.METHODS.SUBSCRIBE,\n    exports.METHODS.UNSUBSCRIBE,\n    exports.METHODS.PATCH,\n    exports.METHODS.PURGE,\n    exports.METHODS.MKCALENDAR,\n    exports.METHODS.LINK,\n    exports.METHODS.UNLINK,\n    exports.METHODS.PRI,\n    // TODO(indutny): should we allow it with HTTP?\n    exports.METHODS.SOURCE,\n    exports.METHODS.QUERY,\n];\nexports.METHODS_ICE = [\n    exports.METHODS.SOURCE,\n];\nexports.METHODS_RTSP = [\n    exports.METHODS.OPTIONS,\n    exports.METHODS.DESCRIBE,\n    exports.METHODS.ANNOUNCE,\n    exports.METHODS.SETUP,\n    exports.METHODS.PLAY,\n    exports.METHODS.PAUSE,\n    exports.METHODS.TEARDOWN,\n    exports.METHODS.GET_PARAMETER,\n    exports.METHODS.SET_PARAMETER,\n    exports.METHODS.REDIRECT,\n    exports.METHODS.RECORD,\n    exports.METHODS.FLUSH,\n    // For AirPlay\n    exports.METHODS.GET,\n    exports.METHODS.POST,\n];\nexports.METHOD_MAP = (0, utils_1.enumToMap)(exports.METHODS);\nexports.H_METHOD_MAP = Object.fromEntries(Object.entries(exports.METHODS).filter(([k]) => k.startsWith('H')));\nexports.STATUSES_HTTP = [\n    exports.STATUSES.CONTINUE,\n    exports.STATUSES.SWITCHING_PROTOCOLS,\n    exports.STATUSES.PROCESSING,\n    exports.STATUSES.EARLY_HINTS,\n    exports.STATUSES.RESPONSE_IS_STALE,\n    exports.STATUSES.REVALIDATION_FAILED,\n    exports.STATUSES.DISCONNECTED_OPERATION,\n    exports.STATUSES.HEURISTIC_EXPIRATION,\n    exports.STATUSES.MISCELLANEOUS_WARNING,\n    exports.STATUSES.OK,\n    exports.STATUSES.CREATED,\n    exports.STATUSES.ACCEPTED,\n    exports.STATUSES.NON_AUTHORITATIVE_INFORMATION,\n    exports.STATUSES.NO_CONTENT,\n    exports.STATUSES.RESET_CONTENT,\n    exports.STATUSES.PARTIAL_CONTENT,\n    exports.STATUSES.MULTI_STATUS,\n    exports.STATUSES.ALREADY_REPORTED,\n    exports.STATUSES.TRANSFORMATION_APPLIED,\n    exports.STATUSES.IM_USED,\n    exports.STATUSES.MISCELLANEOUS_PERSISTENT_WARNING,\n    exports.STATUSES.MULTIPLE_CHOICES,\n    exports.STATUSES.MOVED_PERMANENTLY,\n    exports.STATUSES.FOUND,\n    exports.STATUSES.SEE_OTHER,\n    exports.STATUSES.NOT_MODIFIED,\n    exports.STATUSES.USE_PROXY,\n    exports.STATUSES.SWITCH_PROXY,\n    exports.STATUSES.TEMPORARY_REDIRECT,\n    exports.STATUSES.PERMANENT_REDIRECT,\n    exports.STATUSES.BAD_REQUEST,\n    exports.STATUSES.UNAUTHORIZED,\n    exports.STATUSES.PAYMENT_REQUIRED,\n    exports.STATUSES.FORBIDDEN,\n    exports.STATUSES.NOT_FOUND,\n    exports.STATUSES.METHOD_NOT_ALLOWED,\n    exports.STATUSES.NOT_ACCEPTABLE,\n    exports.STATUSES.PROXY_AUTHENTICATION_REQUIRED,\n    exports.STATUSES.REQUEST_TIMEOUT,\n    exports.STATUSES.CONFLICT,\n    exports.STATUSES.GONE,\n    exports.STATUSES.LENGTH_REQUIRED,\n    exports.STATUSES.PRECONDITION_FAILED,\n    exports.STATUSES.PAYLOAD_TOO_LARGE,\n    exports.STATUSES.URI_TOO_LONG,\n    exports.STATUSES.UNSUPPORTED_MEDIA_TYPE,\n    exports.STATUSES.RANGE_NOT_SATISFIABLE,\n    exports.STATUSES.EXPECTATION_FAILED,\n    exports.STATUSES.IM_A_TEAPOT,\n    exports.STATUSES.PAGE_EXPIRED,\n    exports.STATUSES.ENHANCE_YOUR_CALM,\n    exports.STATUSES.MISDIRECTED_REQUEST,\n    exports.STATUSES.UNPROCESSABLE_ENTITY,\n    exports.STATUSES.LOCKED,\n    exports.STATUSES.FAILED_DEPENDENCY,\n    exports.STATUSES.TOO_EARLY,\n    exports.STATUSES.UPGRADE_REQUIRED,\n    exports.STATUSES.PRECONDITION_REQUIRED,\n    exports.STATUSES.TOO_MANY_REQUESTS,\n    exports.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL,\n    exports.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE,\n    exports.STATUSES.LOGIN_TIMEOUT,\n    exports.STATUSES.NO_RESPONSE,\n    exports.STATUSES.RETRY_WITH,\n    exports.STATUSES.BLOCKED_BY_PARENTAL_CONTROL,\n    exports.STATUSES.UNAVAILABLE_FOR_LEGAL_REASONS,\n    exports.STATUSES.CLIENT_CLOSED_LOAD_BALANCED_REQUEST,\n    exports.STATUSES.INVALID_X_FORWARDED_FOR,\n    exports.STATUSES.REQUEST_HEADER_TOO_LARGE,\n    exports.STATUSES.SSL_CERTIFICATE_ERROR,\n    exports.STATUSES.SSL_CERTIFICATE_REQUIRED,\n    exports.STATUSES.HTTP_REQUEST_SENT_TO_HTTPS_PORT,\n    exports.STATUSES.INVALID_TOKEN,\n    exports.STATUSES.CLIENT_CLOSED_REQUEST,\n    exports.STATUSES.INTERNAL_SERVER_ERROR,\n    exports.STATUSES.NOT_IMPLEMENTED,\n    exports.STATUSES.BAD_GATEWAY,\n    exports.STATUSES.SERVICE_UNAVAILABLE,\n    exports.STATUSES.GATEWAY_TIMEOUT,\n    exports.STATUSES.HTTP_VERSION_NOT_SUPPORTED,\n    exports.STATUSES.VARIANT_ALSO_NEGOTIATES,\n    exports.STATUSES.INSUFFICIENT_STORAGE,\n    exports.STATUSES.LOOP_DETECTED,\n    exports.STATUSES.BANDWIDTH_LIMIT_EXCEEDED,\n    exports.STATUSES.NOT_EXTENDED,\n    exports.STATUSES.NETWORK_AUTHENTICATION_REQUIRED,\n    exports.STATUSES.WEB_SERVER_UNKNOWN_ERROR,\n    exports.STATUSES.WEB_SERVER_IS_DOWN,\n    exports.STATUSES.CONNECTION_TIMEOUT,\n    exports.STATUSES.ORIGIN_IS_UNREACHABLE,\n    exports.STATUSES.TIMEOUT_OCCURED,\n    exports.STATUSES.SSL_HANDSHAKE_FAILED,\n    exports.STATUSES.INVALID_SSL_CERTIFICATE,\n    exports.STATUSES.RAILGUN_ERROR,\n    exports.STATUSES.SITE_IS_OVERLOADED,\n    exports.STATUSES.SITE_IS_FROZEN,\n    exports.STATUSES.IDENTITY_PROVIDER_AUTHENTICATION_ERROR,\n    exports.STATUSES.NETWORK_READ_TIMEOUT,\n    exports.STATUSES.NETWORK_CONNECT_TIMEOUT,\n];\nexports.ALPHA = [];\nfor (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) {\n    // Upper case\n    exports.ALPHA.push(String.fromCharCode(i));\n    // Lower case\n    exports.ALPHA.push(String.fromCharCode(i + 0x20));\n}\nexports.NUM_MAP = {\n    0: 0, 1: 1, 2: 2, 3: 3, 4: 4,\n    5: 5, 6: 6, 7: 7, 8: 8, 9: 9,\n};\nexports.HEX_MAP = {\n    0: 0, 1: 1, 2: 2, 3: 3, 4: 4,\n    5: 5, 6: 6, 7: 7, 8: 8, 9: 9,\n    A: 0XA, B: 0XB, C: 0XC, D: 0XD, E: 0XE, F: 0XF,\n    a: 0xa, b: 0xb, c: 0xc, d: 0xd, e: 0xe, f: 0xf,\n};\nexports.NUM = [\n    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n];\nexports.ALPHANUM = exports.ALPHA.concat(exports.NUM);\nexports.MARK = ['-', '_', '.', '!', '~', '*', '\\'', '(', ')'];\nexports.USERINFO_CHARS = exports.ALPHANUM\n    .concat(exports.MARK)\n    .concat(['%', ';', ':', '&', '=', '+', '$', ',']);\n// TODO(indutny): use RFC\nexports.URL_CHAR = [\n    '!', '\"', '$', '%', '&', '\\'',\n    '(', ')', '*', '+', ',', '-', '.', '/',\n    ':', ';', '<', '=', '>',\n    '@', '[', '\\\\', ']', '^', '_',\n    '`',\n    '{', '|', '}', '~',\n].concat(exports.ALPHANUM);\nexports.HEX = exports.NUM.concat(['a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F']);\n/* Tokens as defined by rfc 2616. Also lowercases them.\n *        token       = 1*<any CHAR except CTLs or separators>\n *     separators     = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *                    | \",\" | \";\" | \":\" | \"\\\" | <\">\n *                    | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *                    | \"{\" | \"}\" | SP | HT\n */\nexports.TOKEN = [\n    '!', '#', '$', '%', '&', '\\'',\n    '*', '+', '-', '.',\n    '^', '_', '`',\n    '|', '~',\n].concat(exports.ALPHANUM);\n/*\n * Verify that a char is a valid visible (printable) US-ASCII\n * character or %x80-FF\n */\nexports.HEADER_CHARS = ['\\t'];\nfor (let i = 32; i <= 255; i++) {\n    if (i !== 127) {\n        exports.HEADER_CHARS.push(i);\n    }\n}\n// ',' = \\x44\nexports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS.filter((c) => c !== 44);\nexports.QUOTED_STRING = ['\\t', ' '];\nfor (let i = 0x21; i <= 0xff; i++) {\n    if (i !== 0x22 && i !== 0x5c) { // All characters in ASCII except \\ and \"\n        exports.QUOTED_STRING.push(i);\n    }\n}\nexports.HTAB_SP_VCHAR_OBS_TEXT = ['\\t', ' '];\n// VCHAR: https://tools.ietf.org/html/rfc5234#appendix-B.1\nfor (let i = 0x21; i <= 0x7E; i++) {\n    exports.HTAB_SP_VCHAR_OBS_TEXT.push(i);\n}\n// OBS_TEXT: https://datatracker.ietf.org/doc/html/rfc9110#name-collected-abnf\nfor (let i = 0x80; i <= 0xff; i++) {\n    exports.HTAB_SP_VCHAR_OBS_TEXT.push(i);\n}\nexports.MAJOR = exports.NUM_MAP;\nexports.MINOR = exports.MAJOR;\nexports.SPECIAL_HEADERS = {\n    'connection': exports.HEADER_STATE.CONNECTION,\n    'content-length': exports.HEADER_STATE.CONTENT_LENGTH,\n    'proxy-connection': exports.HEADER_STATE.CONNECTION,\n    'transfer-encoding': exports.HEADER_STATE.TRANSFER_ENCODING,\n    'upgrade': exports.HEADER_STATE.UPGRADE,\n};\nexports.default = {\n    ERROR: exports.ERROR,\n    TYPE: exports.TYPE,\n    FLAGS: exports.FLAGS,\n    LENIENT_FLAGS: exports.LENIENT_FLAGS,\n    METHODS: exports.METHODS,\n    STATUSES: exports.STATUSES,\n    FINISH: exports.FINISH,\n    HEADER_STATE: exports.HEADER_STATE,\n    ALPHA: exports.ALPHA,\n    NUM_MAP: exports.NUM_MAP,\n    HEX_MAP: exports.HEX_MAP,\n    NUM: exports.NUM,\n    ALPHANUM: exports.ALPHANUM,\n    MARK: exports.MARK,\n    USERINFO_CHARS: exports.USERINFO_CHARS,\n    URL_CHAR: exports.URL_CHAR,\n    HEX: exports.HEX,\n    TOKEN: exports.TOKEN,\n    HEADER_CHARS: exports.HEADER_CHARS,\n    CONNECTION_TOKEN_CHARS: exports.CONNECTION_TOKEN_CHARS,\n    QUOTED_STRING: exports.QUOTED_STRING,\n    HTAB_SP_VCHAR_OBS_TEXT: exports.HTAB_SP_VCHAR_OBS_TEXT,\n    MAJOR: exports.MAJOR,\n    MINOR: exports.MINOR,\n    SPECIAL_HEADERS: exports.SPECIAL_HEADERS,\n    METHODS_HTTP: exports.METHODS_HTTP,\n    METHODS_ICE: exports.METHODS_ICE,\n    METHODS_RTSP: exports.METHODS_RTSP,\n    METHOD_MAP: exports.METHOD_MAP,\n    H_METHOD_MAP: exports.H_METHOD_MAP,\n    STATUSES_HTTP: exports.STATUSES_HTTP,\n};\n", "'use strict'\n\nconst { Buffer } = require('node:buffer')\n\nconst wasmBase64 = 'AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgL5YUCAgd/A34gASACaiEEAkAgACIDKAIMIgANACADKAIEBEAgAyABNgIECyMAQRBrIgkkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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C0HjAQwHC0HXAQwGC0HYAQwFC0HZAQwEC0HaAQwDC0HbAQwCC0HdAQwBC0HcAQshAgNAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJ/AkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAg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ogKiAqICogKiAqICogKiAqICogKiAqICogIAogILIAQgAUEBaiIBRw0AC0HJACECDOwCCyABQQFqIQEgA0Evai0AAEEBcQ2lAiADQQA2AhwgAyABNgIUIANBlxA2AhAgA0EKNgIMQQAhAgzrAgsgASAERwRAA0AgAS0AAEEgRw0VIAQgAUEBaiIBRw0AC0H4ACECDOsCC0H4ACECDOoCCyADQQI6ACgMOAtBACECIANBADYCHCADQb8LNgIQIANBAjYCDCADIAFBAWo2AhQM6AILQQAhAgzOAgtBDSECDM0CC0ETIQIMzAILQRUhAgzLAgtBFiECDMoCC0EYIQIMyQILQRkhAgzIAgtBGiECDMcCC0EbIQIMxgILQRwhAgzFAgtBHSECDMQCC0EeIQIMwwILQR8hAgzCAgtBICECDMECC0EiIQIMwAILQSMhAgy/AgtBJSECDL4CC0HlACECDL0CCyADQT02AhwgAyABNgIUIAMgADYCDEEAIQIM1QILIANBGzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDNQCCyADQSA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzTAgsgA0ETNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0gILIANBCzYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNECCyADQRA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzQAgsgA0EgNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzwILIANBCzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM4CCyADQQw2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzNAgtBACECIANBADYCHCADIAE2AhQgA0HdDjYCECADQRI2AgwMzAILAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB/QEhAgzMAgsCQAJAIAMtADZBAUcNAEEAIQACQCADKAI4IgJFDQAgAigCYCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUcNASADQfwBNgIcIAMgATYCFCADQdwZNgIQIANBFTYCDEEAIQIMzQILQdwBIQIMswILIANBADYCHCADIAE2AhQgA0H5CzYCECADQR82AgxBACECDMsCCwJAAkAgAy0AKEEBaw4CBAEAC0HbASECDLICC0HUASECDLECCyADQQI6ADFBACEAAkAgAygCOCICRQ0AIAIoAgAiAkUNACADIAIRAAAhAAsgAEUEQEHdASECDLECCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQbQMNgIQIANBEDYCDEEAIQIMygILIANB+wE2AhwgAyABNgIUIANBgRo2AhAgA0EVNgIMQQAhAgzJAgsgASAERgRAQfoBIQIMyQILIAEtAABByABGDQEgA0EBOgAoC0HAASECDK4CC0HaASECDK0CCyABIARHBEAgA0EMNgIIIAMgATYCBEHZASECDK0CC0H5ASECDMUCCyABIARGBEBB+AEhAgzFAgsgAS0AAEHIAEcNBCABQQFqIQFB2AEhAgyrAgsgASAERgRAQfcBIQIMxAILAkACQCABLQAAQcUAaw4QAAUFBQUFBQUFBQUFBQUFAQULIAFBAWohAUHWASECDKsCCyABQQFqIQFB1wEhAgyqAgtB9gEhAiABIARGDcICIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbrVAGotAABHDQMgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMMCCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIARQRAQeMBIQIMqgILIANB9QE2AhwgAyABNgIUIAMgADYCDEEAIQIMwgILQfQBIQIgASAERg3BAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEG41QBqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzCAgsgA0GBBDsBKCADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIADQMMAgsgA0EANgIAC0EAIQIgA0EANgIcIAMgATYCFCADQeUfNgIQIANBCDYCDAy/AgtB1QEhAgylAgsgA0HzATYCHCADIAE2AhQgAyAANgIMQQAhAgy9AgtBACEAAkAgAygCOCICRQ0AIAIoAkAiAkUNACADIAIRAAAhAAsgAEUNbiAAQRVHBEAgA0EANgIcIAMgATYCFCADQYIPNgIQIANBIDYCDEEAIQIMvQILIANBjwE2AhwgAyABNgIUIANB7Bs2AhAgA0EVNgIMQQAhAgy8AgsgASAERwRAIANBDTYCCCADIAE2AgRB0wEhAgyjAgtB8gEhAgy7AgsgASAERgRAQfEBIQIMuwILAkACQAJAIAEtAABByABrDgsAAQgICAgICAgIAggLIAFBAWohAUHQASECDKMCCyABQQFqIQFB0QEhAgyiAgsgAUEBaiEBQdIBIQIMoQILQfABIQIgASAERg25AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBtdUAai0AAEcNBCAAQQJGDQMgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuQILQe8BIQIgASAERg24AiADKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABBs9UAai0AAEcNAyAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuAILQe4BIQIgASAERg23AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMtwILIAMoAgQhACADQgA3AwAgAyAAIAVBAWoiARArIgBFDQIgA0HsATYCHCADIAE2AhQgAyAANgIMQQAhAgy2AgsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNnAIgA0HtATYCHCADIAE2AhQgAyAANgIMQQAhAgy0AgtBzwEhAgyaAgtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDLQCC0HOASECDJoCCyADQesBNgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMsgILIAEgBEYEQEHrASECDLICCyABLQAAQS9GBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GyODYCECADQQg2AgxBACECDLECC0HNASECDJcCCyABIARHBEAgA0EONgIIIAMgATYCBEHMASECDJcCC0HqASECDK8CCyABIARGBEBB6QEhAgyvAgsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFBywEhAgyWAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZcCIANB6AE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAEgBEYEQEHnASECDK4CCwJAIAEtAABBLkYEQCABQQFqIQEMAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5gE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILQcoBIQIMlAILIAEgBEYEQEHlASECDK0CC0EAIQBBASEFQQEhB0EAIQICQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQCABLQAAQTBrDgoKCQABAgMEBQYICwtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshAkEAIQVBACEHDAILQQkhAkEBIQBBACEFQQAhBwwBC0EAIQVBASECCyADIAI6ACsgAUEBaiEBAkACQCADLQAuQRBxDQACQAJAAkAgAy0AKg4DAQACBAsgB0UNAwwCCyAADQEMAgsgBUUNAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDQIgA0HiATYCHCADIAE2AhQgAyAANgIMQQAhAgyvAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZoCIANB4wE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ2YAiADQeQBNgIcIAMgATYCFCADIAA2AgwMrQILQckBIQIMkwILQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANBpA02AhAgA0EhNgIMQQAhAgytAgtByAEhAgyTAgsgA0HhATYCHCADIAE2AhQgA0HQGjYCECADQRU2AgxBACECDKsCCyABIARGBEBB4QEhAgyrAgsCQCABLQAAQSBGBEAgA0EAOwE0IAFBAWohAQwBCyADQQA2AhwgAyABNgIUIANBmRE2AhAgA0EJNgIMQQAhAgyrAgtBxwEhAgyRAgsgASAERgRAQeABIQIMqgILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyrAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqgILQcYBIQIMkAILIAEgBEYEQEHfASECDKkCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqgILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKkCC0HFASECDI8CCyABIARGBEBB3gEhAgyoAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKkCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyoAgtBxAEhAgyOAgsgASAERgRAQd0BIQIMpwILAkACQAJAAkAgAS0AAEEKaw4XAgMDAAMDAwMDAwMDAwMDAwMDAwMDAwEDCyABQQFqDAULIAFBAWohAUHDASECDI8CCyABQQFqIQEgA0Evai0AAEEBcQ0IIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKcCCyADQQA2AhwgAyABNgIUIANBjQs2AhAgA0ENNgIMQQAhAgymAgsgASAERwRAIANBDzYCCCADIAE2AgRBASECDI0CC0HcASECDKUCCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtB2wEhAgymAgsgAygCBCEAIANBADYCBCADIAAgARAtIgBFBEAgAUEBaiEBDAQLIANB2gE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMpQILIAMoAgQhACADQQA2AgQgAyAAIAEQLSIADQEgAUEBagshAUHBASECDIoCCyADQdkBNgIcIAMgADYCDCADIAFBAWo2AhRBACECDKICC0HCASECDIgCCyADQS9qLQAAQQFxDQEgA0EANgIcIAMgATYCFCADQeQcNgIQIANBGTYCDEEAIQIMoAILIAEgBEYEQEHZASECDKACCwJAAkACQCABLQAAQQprDgQBAgIAAgsgAUEBaiEBDAILIAFBAWohAQwBCyADLQAuQcAAcUUNAQtBACEAAkAgAygCOCICRQ0AIAIoAjwiAkUNACADIAIRAAAhAAsgAEUNoAEgAEEVRgRAIANB2QA2AhwgAyABNgIUIANBtxo2AhAgA0EVNgIMQQAhAgyfAgsgA0EANgIcIAMgATYCFCADQYANNgIQIANBGzYCDEEAIQIMngILIANBADYCHCADIAE2AhQgA0HcKDYCECADQQI2AgxBACECDJ0CCyABIARHBEAgA0EMNgIIIAMgATYCBEG/ASECDIQCC0HYASECDJwCCyABIARGBEBB1wEhAgycAgsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBwQBrDhUAAQIDWgQFBlpaWgcICQoLDA0ODxBaCyABQQFqIQFB+wAhAgySAgsgAUEBaiEBQfwAIQIMkQILIAFBAWohAUGBASECDJACCyABQQFqIQFBhQEhAgyPAgsgAUEBaiEBQYYBIQIMjgILIAFBAWohAUGJASECDI0CCyABQQFqIQFBigEhAgyMAgsgAUEBaiEBQY0BIQIMiwILIAFBAWohAUGWASECDIoCCyABQQFqIQFBlwEhAgyJAgsgAUEBaiEBQZgBIQIMiAILIAFBAWohAUGlASECDIcCCyABQQFqIQFBpgEhAgyGAgsgAUEBaiEBQawBIQIMhQILIAFBAWohAUG0ASECDIQCCyABQQFqIQFBtwEhAgyDAgsgAUEBaiEBQb4BIQIMggILIAEgBEYEQEHWASECDJsCCyABLQAAQc4ARw1IIAFBAWohAUG9ASECDIECCyABIARGBEBB1QEhAgyaAgsCQAJAAkAgAS0AAEHCAGsOEgBKSkpKSkpKSkoBSkpKSkpKAkoLIAFBAWohAUG4ASECDIICCyABQQFqIQFBuwEhAgyBAgsgAUEBaiEBQbwBIQIMgAILQdQBIQIgASAERg2YAiADKAIAIgAgBCABa2ohBSABIABrQQdqIQYCQANAIAEtAAAgAEGo1QBqLQAARw1FIABBB0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyZAgsgA0EANgIAIAZBAWohAUEbDEULIAEgBEYEQEHTASECDJgCCwJAAkAgAS0AAEHJAGsOBwBHR0dHRwFHCyABQQFqIQFBuQEhAgz/AQsgAUEBaiEBQboBIQIM/gELQdIBIQIgASAERg2WAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGm1QBqLQAARw1DIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyXAgsgA0EANgIAIAZBAWohAUEPDEMLQdEBIQIgASAERg2VAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGk1QBqLQAARw1CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyWAgsgA0EANgIAIAZBAWohAUEgDEILQdABIQIgASAERg2UAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGh1QBqLQAARw1BIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyVAgsgA0EANgIAIAZBAWohAUESDEELIAEgBEYEQEHPASECDJQCCwJAAkAgAS0AAEHFAGsODgBDQ0NDQ0NDQ0NDQ0MBQwsgAUEBaiEBQbUBIQIM+wELIAFBAWohAUG2ASECDPoBC0HOASECIAEgBEYNkgIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBntUAai0AAEcNPyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMkwILIANBADYCACAGQQFqIQFBBww/C0HNASECIAEgBEYNkQIgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBmNUAai0AAEcNPiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMkgILIANBADYCACAGQQFqIQFBKAw+CyABIARGBEBBzAEhAgyRAgsCQAJAAkAgAS0AAEHFAGsOEQBBQUFBQUFBQUEBQUFBQUECQQsgAUEBaiEBQbEBIQIM+QELIAFBAWohAUGyASECDPgBCyABQQFqIQFBswEhAgz3AQtBywEhAiABIARGDY8CIAMoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQZHVAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJACCyADQQA2AgAgBkEBaiEBQRoMPAtBygEhAiABIARGDY4CIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQY3VAGotAABHDTsgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADI8CCyADQQA2AgAgBkEBaiEBQSEMOwsgASAERgRAQckBIQIMjgILAkACQCABLQAAQcEAaw4UAD09PT09PT09PT09PT09PT09PQE9CyABQQFqIQFBrQEhAgz1AQsgAUEBaiEBQbABIQIM9AELIAEgBEYEQEHIASECDI0CCwJAAkAgAS0AAEHVAGsOCwA8PDw8PDw8PDwBPAsgAUEBaiEBQa4BIQIM9AELIAFBAWohAUGvASECDPMBC0HHASECIAEgBEYNiwIgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBhNUAai0AAEcNOCAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMjAILIANBADYCACAGQQFqIQFBKgw4CyABIARGBEBBxgEhAgyLAgsgAS0AAEHQAEcNOCABQQFqIQFBJQw3C0HFASECIAEgBEYNiQIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBgdUAai0AAEcNNiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMigILIANBADYCACAGQQFqIQFBDgw2CyABIARGBEBBxAEhAgyJAgsgAS0AAEHFAEcNNiABQQFqIQFBqwEhAgzvAQsgASAERgRAQcMBIQIMiAILAkACQAJAAkAgAS0AAEHCAGsODwABAjk5OTk5OTk5OTk5AzkLIAFBAWohAUGnASECDPEBCyABQQFqIQFBqAEhAgzwAQsgAUEBaiEBQakBIQIM7wELIAFBAWohAUGqASECDO4BC0HCASECIAEgBEYNhgIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB/tQAai0AAEcNMyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMhwILIANBADYCACAGQQFqIQFBFAwzC0HBASECIAEgBEYNhQIgAygCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABB+dQAai0AAEcNMiAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMhgILIANBADYCACAGQQFqIQFBKwwyC0HAASECIAEgBEYNhAIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB9tQAai0AAEcNMSAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMhQILIANBADYCACAGQQFqIQFBLAwxC0G/ASECIAEgBEYNgwIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBodUAai0AAEcNMCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMhAILIANBADYCACAGQQFqIQFBEQwwC0G+ASECIAEgBEYNggIgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABB8tQAai0AAEcNLyAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMgwILIANBADYCACAGQQFqIQFBLgwvCyABIARGBEBBvQEhAgyCAgsCQAJAAkACQAJAIAEtAABBwQBrDhUANDQ0NDQ0NDQ0NAE0NAI0NAM0NAQ0CyABQQFqIQFBmwEhAgzsAQsgAUEBaiEBQZwBIQIM6wELIAFBAWohAUGdASECDOoBCyABQQFqIQFBogEhAgzpAQsgAUEBaiEBQaQBIQIM6AELIAEgBEYEQEG8ASECDIECCwJAAkAgAS0AAEHSAGsOAwAwATALIAFBAWohAUGjASECDOgBCyABQQFqIQFBBAwtC0G7ASECIAEgBEYN/wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8NQAai0AAEcNLCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMgAILIANBADYCACAGQQFqIQFBHQwsCyABIARGBEBBugEhAgz/AQsCQAJAIAEtAABByQBrDgcBLi4uLi4ALgsgAUEBaiEBQaEBIQIM5gELIAFBAWohAUEiDCsLIAEgBEYEQEG5ASECDP4BCyABLQAAQdAARw0rIAFBAWohAUGgASECDOQBCyABIARGBEBBuAEhAgz9AQsCQAJAIAEtAABBxgBrDgsALCwsLCwsLCwsASwLIAFBAWohAUGeASECDOQBCyABQQFqIQFBnwEhAgzjAQtBtwEhAiABIARGDfsBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQezUAGotAABHDSggAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPwBCyADQQA2AgAgBkEBaiEBQQ0MKAtBtgEhAiABIARGDfoBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDScgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPsBCyADQQA2AgAgBkEBaiEBQQwMJwtBtQEhAiABIARGDfkBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQerUAGotAABHDSYgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPoBCyADQQA2AgAgBkEBaiEBQQMMJgtBtAEhAiABIARGDfgBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQejUAGotAABHDSUgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPkBCyADQQA2AgAgBkEBaiEBQSYMJQsgASAERgRAQbMBIQIM+AELAkACQCABLQAAQdQAaw4CAAEnCyABQQFqIQFBmQEhAgzfAQsgAUEBaiEBQZoBIQIM3gELQbIBIQIgASAERg32ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHm1ABqLQAARw0jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz3AQsgA0EANgIAIAZBAWohAUEnDCMLQbEBIQIgASAERg31ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHk1ABqLQAARw0iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz2AQsgA0EANgIAIAZBAWohAUEcDCILQbABIQIgASAERg30ASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHe1ABqLQAARw0hIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz1AQsgA0EANgIAIAZBAWohAUEGDCELQa8BIQIgASAERg3zASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHZ1ABqLQAARw0gIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz0AQsgA0EANgIAIAZBAWohAUEZDCALIAEgBEYEQEGuASECDPMBCwJAAkACQAJAIAEtAABBLWsOIwAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAEkJCQkJAIkJCQDJAsgAUEBaiEBQY4BIQIM3AELIAFBAWohAUGPASECDNsBCyABQQFqIQFBlAEhAgzaAQsgAUEBaiEBQZUBIQIM2QELQa0BIQIgASAERg3xASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHX1ABqLQAARw0eIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzyAQsgA0EANgIAIAZBAWohAUELDB4LIAEgBEYEQEGsASECDPEBCwJAAkAgAS0AAEHBAGsOAwAgASALIAFBAWohAUGQASECDNgBCyABQQFqIQFBkwEhAgzXAQsgASAERgRAQasBIQIM8AELAkACQCABLQAAQcEAaw4PAB8fHx8fHx8fHx8fHx8BHwsgAUEBaiEBQZEBIQIM1wELIAFBAWohAUGSASECDNYBCyABIARGBEBBqgEhAgzvAQsgAS0AAEHMAEcNHCABQQFqIQFBCgwbC0GpASECIAEgBEYN7QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABB0dQAai0AAEcNGiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7gELIANBADYCACAGQQFqIQFBHgwaC0GoASECIAEgBEYN7AEgAygCACIAIAQgAWtqIQUgASAAa0EGaiEGAkADQCABLQAAIABBytQAai0AAEcNGSAAQQZGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7QELIANBADYCACAGQQFqIQFBFQwZC0GnASECIAEgBEYN6wEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBx9QAai0AAEcNGCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7AELIANBADYCACAGQQFqIQFBFwwYC0GmASECIAEgBEYN6gEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBwdQAai0AAEcNFyAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6wELIANBADYCACAGQQFqIQFBGAwXCyABIARGBEBBpQEhAgzqAQsCQAJAIAEtAABByQBrDgcAGRkZGRkBGQsgAUEBaiEBQYsBIQIM0QELIAFBAWohAUGMASECDNABC0GkASECIAEgBEYN6AEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBptUAai0AAEcNFSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6QELIANBADYCACAGQQFqIQFBCQwVC0GjASECIAEgBEYN5wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBpNUAai0AAEcNFCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6AELIANBADYCACAGQQFqIQFBHwwUC0GiASECIAEgBEYN5gEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBvtQAai0AAEcNEyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5wELIANBADYCACAGQQFqIQFBAgwTC0GhASECIAEgBEYN5QEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGA0AgAS0AACAAQbzUAGotAABHDREgAEEBRg0CIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADOUBCyABIARGBEBBoAEhAgzlAQtBASABLQAAQd8ARw0RGiABQQFqIQFBhwEhAgzLAQsgA0EANgIAIAZBAWohAUGIASECDMoBC0GfASECIAEgBEYN4gEgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBhNUAai0AAEcNDyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4wELIANBADYCACAGQQFqIQFBKQwPC0GeASECIAEgBEYN4QEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBuNQAai0AAEcNDiAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4gELIANBADYCACAGQQFqIQFBLQwOCyABIARGBEBBnQEhAgzhAQsgAS0AAEHFAEcNDiABQQFqIQFBhAEhAgzHAQsgASAERgRAQZwBIQIM4AELAkACQCABLQAAQcwAaw4IAA8PDw8PDwEPCyABQQFqIQFBggEhAgzHAQsgAUEBaiEBQYMBIQIMxgELQZsBIQIgASAERg3eASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEGz1ABqLQAARw0LIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzfAQsgA0EANgIAIAZBAWohAUEjDAsLQZoBIQIgASAERg3dASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGw1ABqLQAARw0KIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzeAQsgA0EANgIAIAZBAWohAUEADAoLIAEgBEYEQEGZASECDN0BCwJAAkAgAS0AAEHIAGsOCAAMDAwMDAwBDAsgAUEBaiEBQf0AIQIMxAELIAFBAWohAUGAASECDMMBCyABIARGBEBBmAEhAgzcAQsCQAJAIAEtAABBzgBrDgMACwELCyABQQFqIQFB/gAhAgzDAQsgAUEBaiEBQf8AIQIMwgELIAEgBEYEQEGXASECDNsBCyABLQAAQdkARw0IIAFBAWohAUEIDAcLQZYBIQIgASAERg3ZASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEGs1ABqLQAARw0GIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzaAQsgA0EANgIAIAZBAWohAUEFDAYLQZUBIQIgASAERg3YASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGm1ABqLQAARw0FIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzZAQsgA0EANgIAIAZBAWohAUEWDAULQZQBIQIgASAERg3XASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGh1QBqLQAARw0EIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzYAQsgA0EANgIAIAZBAWohAUEQDAQLIAEgBEYEQEGTASECDNcBCwJAAkAgAS0AAEHDAGsODAAGBgYGBgYGBgYGAQYLIAFBAWohAUH5ACECDL4BCyABQQFqIQFB+gAhAgy9AQtBkgEhAiABIARGDdUBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQaDUAGotAABHDQIgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNYBCyADQQA2AgAgBkEBaiEBQSQMAgsgA0EANgIADAILIAEgBEYEQEGRASECDNQBCyABLQAAQcwARw0BIAFBAWohAUETCzoAKSADKAIEIQAgA0EANgIEIAMgACABEC4iAA0CDAELQQAhAiADQQA2AhwgAyABNgIUIANB/h82AhAgA0EGNgIMDNEBC0H4ACECDLcBCyADQZABNgIcIAMgATYCFCADIAA2AgxBACECDM8BC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUYNASADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgzOAQtB9wAhAgy0AQsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDMwBCyABIARGBEBBjwEhAgzMAQsCQCABLQAAQSBGBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GbHzYCECADQQY2AgxBACECDMwBC0ECIQIMsgELA0AgAS0AAEEgRw0CIAQgAUEBaiIBRw0AC0GOASECDMoBCyABIARGBEBBjQEhAgzKAQsCQCABLQAAQQlrDgRKAABKAAtB9QAhAgywAQsgAy0AKUEFRgRAQfYAIQIMsAELQfQAIQIMrwELIAEgBEYEQEGMASECDMgBCyADQRA2AgggAyABNgIEDAoLIAEgBEYEQEGLASECDMcBCwJAIAEtAABBCWsOBEcAAEcAC0HzACECDK0BCyABIARHBEAgA0EQNgIIIAMgATYCBEHxACECDK0BC0GKASECDMUBCwJAIAEgBEcEQANAIAEtAABBoNAAai0AACIAQQNHBEACQCAAQQFrDgJJAAQLQfAAIQIMrwELIAQgAUEBaiIBRw0AC0GIASEC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BCABQQFqIgFHDQALQfsAIQIMpwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMpgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMpQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMpAELIANBADYCHCADIAE2AhQgA0G8CjYCECADQQc2AgxBACECDKMBC0HPACECDIkBC0HRACECDIgBC0HnACECDIcBCyABIARGBEBB+gAhAgygAQsCQCABLQAAQQlrDgQgAAAgAAsgAUEBaiEBQeYAIQIMhgELIAEgBEYEQEH5ACECDJ8BCwJAIAEtAABBCWsOBB8AAB8AC0EAIQACQCADKAI4IgJFDQAgAigCOCICRQ0AIAMgAhEAACEACyAARQRAQeIBIQIMhgELIABBFUcEQCADQQA2AhwgAyABNgIUIANByQ02AhAgA0EaNgIMQQAhAgyfAQsgA0H4ADYCHCADIAE2AhQgA0HqGjYCECADQRU2AgxBACECDJ4BCyABIARHBEAgA0ENNgIIIAMgATYCBEHkACECDIUBC0H3ACECDJ0BCyABIARGBEBB9gAhAgydAQsCQAJAAkAgAS0AAEHIAGsOCwABCwsLCwsLCwsCCwsgAUEBaiEBQd0AIQIMhQELIAFBAWohAUHgACECDIQBCyABQQFqIQFB4wAhAgyDAQtB9QAhAiABIARGDZsBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbXVAGotAABHDQggAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJwBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIABEAgA0H0ADYCHCADIAE2AhQgAyAANgIMQQAhAgycAQtB4gAhAgyCAQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJwBC0HhACECDIIBCyADQfMANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMmgELIAMtACkiAEEja0ELSQ0JAkAgAEEGSw0AQQEgAHRBygBxRQ0ADAoLQQAhAiADQQA2AhwgAyABNgIUIANB7Qk2AhAgA0EINgIMDJkBC0HyACECIAEgBEYNmAEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBs9UAai0AAEcNBSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMmQELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfEANgIcIAMgATYCFCADIAA2AgxBACECDJkBC0HfACECDH8LQQAhAAJAIAMoAjgiAkUNACACKAI0IgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANB6g02AhAgA0EmNgIMQQAhAgyZAQtB3gAhAgx/CyADQfAANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMlwELIAMtAClBIUYNBiADQQA2AhwgAyABNgIUIANBkQo2AhAgA0EINgIMQQAhAgyWAQtB7wAhAiABIARGDZUBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDVAGotAABHDQIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJYBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIARQ0CIANB7QA2AhwgAyABNgIUIAMgADYCDEEAIQIMlQELIANBADYCAAsgAygCBCEAIANBADYCBCADIAAgARArIgBFDYABIANB7gA2AhwgAyABNgIUIAMgADYCDEEAIQIMkwELQdwAIQIMeQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJMBC0HbACECDHkLIANB7AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyRAQsgAy0AKSIAQSNJDQAgAEEuRg0AIANBADYCHCADIAE2AhQgA0HJCTYCECADQQg2AgxBACECDJABC0HaACECDHYLIAEgBEYEQEHrACECDI8BCwJAIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMjwELQdkAIQIMdQsgASAERwRAIANBDjYCCCADIAE2AgRB2AAhAgx1C0HqACECDI0BCyABIARGBEBB6QAhAgyNAQsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFB1wAhAgx0CyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeiADQegANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyABIARGBEBB5wAhAgyMAQsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ17IANB5gA2AhwgAyABNgIUIAMgADYCDEEAIQIMjAELQdYAIQIMcgsgASAERgRAQeUAIQIMiwELQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIANgIcIAMgATYCFCADIAA2AgxBACECDI0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNfSADQeMANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeyADQeQANgIcIAMgATYCFCADIAA2AgwMiwELQdQAIQIMcQsgAy0AKUEiRg2GAUHTACECDHALQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALIABFBEBB1QAhAgxwCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQaQNNgIQIANBITYCDEEAIQIMiQELIANB4QA2AhwgAyABNgIUIANB0Bo2AhAgA0EVNgIMQQAhAgyIAQsgASAERgRAQeAAIQIMiAELAkACQAJAAkACQCABLQAAQQprDgQBBAQABAsgAUEBaiEBDAELIAFBAWohASADQS9qLQAAQQFxRQ0BC0HSACECDHALIANBADYCHCADIAE2AhQgA0G2ETYCECADQQk2AgxBACECDIgBCyADQQA2AhwgAyABNgIUIANBthE2AhAgA0EJNgIMQQAhAgyHAQsgASAERgRAQd8AIQIMhwELIAEtAABBCkYEQCABQQFqIQEMCQsgAy0ALkHAAHENCCADQQA2AhwgAyABNgIUIANBthE2AhAgA0ECNgIMQQAhAgyGAQsgASAERgRAQd0AIQIMhgELIAEtAAAiAkENRgRAIAFBAWohAUHQACECDG0LIAEhACACQQlrDgQFAQEFAQsgBCABIgBGBEBB3AAhAgyFAQsgAC0AAEEKRw0AIABBAWoMAgtBACECIANBADYCHCADIAA2AhQgA0HKLTYCECADQQc2AgwMgwELIAEgBEYEQEHbACECDIMBCwJAIAEtAABBCWsOBAMAAAMACyABQQFqCyEBQc4AIQIMaAsgASAERgRAQdoAIQIMgQELIAEtAABBCWsOBAABAQABC0EAIQIgA0EANgIcIANBmhI2AhAgA0EHNgIMIAMgAUEBajYCFAx/CyADQYASOwEqQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB2QA2AhwgAyABNgIUIANB6ho2AhAgA0EVNgIMQQAhAgx+C0HNACECDGQLIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDHwLIAEgBEYEQEHZACECDHwLIAEtAABBIEcNPSABQQFqIQEgAy0ALkEBcQ09IANBADYCHCADIAE2AhQgA0HCHDYCECADQR42AgxBACECDHsLIAEgBEYEQEHYACECDHsLAkACQAJAAkACQCABLQAAIgBBCmsOBAIDAwABCyABQQFqIQFBLCECDGULIABBOkcNASADQQA2AhwgAyABNgIUIANB5xE2AhAgA0EKNgIMQQAhAgx9CyABQQFqIQEgA0Evai0AAEEBcUUNcyADLQAyQYABcUUEQCADQTJqIQIgAxA1QQAhAAJAIAMoAjgiBkUNACAGKAIoIgZFDQAgAyAGEQAAIQALAkACQCAADhZNTEsBAQEBAQEBAQEBAQEBAQEBAQEAAQsgA0EpNgIcIAMgATYCFCADQawZNgIQIANBFTYCDEEAIQIMfgsg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c3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw=='\n\nlet wasmBuffer\n\nObject.defineProperty(module, 'exports', {\n  get: () => {\n    return wasmBuffer\n      ? wasmBuffer\n      : (wasmBuffer = Buffer.from(wasmBase64, 'base64'))\n  }\n})\n", "'use strict'\n\nconst { Buffer } = require('node:buffer')\n\nconst wasmBase64 = 'AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgLhocCAwd/A34BeyABIAJqIQQCQCAAIgMoAgwiAA0AIAMoAgQEQCADIAE2AgQLIwBBEGsiCSQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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DAgLQeMBDAcLQdcBDAYLQdgBDAULQdkBDAQLQdoBDAMLQdsBDAILQd0BDAELQdwBCyECA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAn8CQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAwJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCACDuMBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISMkJScoKZ4DmwOaA5EDigODA4AD/QL7AvgC8gLxAu8C7QLoAucC5gLlAuQC3ALbAtoC2QLYAtcC1gLVAs8CzgLMAssCygLJAsgCxwLGAsQCwwK+ArwCugK5ArgCtwK2ArUCtAKzArICsQKwAq4CrQKpAqgCpwKmAqUCpAKjAqICoQKgAp8CmAKQAowCiwKKAoEC/gH9AfwB+wH6AfkB+AH3AfUB8wHwAesB6QHoAecB5gHlAeQB4wHiAeEB4AHfAd4B3QHcAdoB2QHYAdcB1gHVAdQB0wHSAdEB0AHPAc4BzQHMAcsBygHJAcgBxwHGAcUBxAHDAcIBwQHAAb8BvgG9AbwBuwG6AbkBuAG3AbYBtQG0AbMBsgGxAbABrwGuAa0BrAGrAaoBqQGoAacBpgGlAaQBowGiAZ8BngGZAZgBlwGWAZUBlAGTAZIBkQGQAY8BjQGMAYcBhgGFAYQBgwGCAX18e3p5dnV0UFFSU1RVCyABIARHDXJB/QEhAgy+AwsgASAERw2YAUHbASECDL0DCyABIARHDfEBQY4BIQIMvAMLIAEgBEcN/AFBhAEhAgy7AwsgASAERw2KAkH/ACECDLoDCyABIARHDZECQf0AIQIMuQMLIAEgBEcNlAJB+wAhAgy4AwsgASAERw0eQR4hAgy3AwsgASAERw0ZQRghAgy2AwsgASAERw3KAkHNACECDLUDCyABIARHDdUCQcYAIQIMtAMLIAEgBEcN1gJBwwAhAgyzAwsgASAERw3cAkE4IQIMsgMLIAMtADBBAUYNrQMMiQMLQQAhAAJAAkACQCADLQAqRQ0AIAMtACtFDQAgAy8BMiICQQJxRQ0BDAILIAMvATIiAkEBcUUNAQtBASEAIAMtAChBAUYNACADLwE0IgZB5ABrQeQASQ0AIAZBzAFGDQAgBkGwAkYNACACQcAAcQ0AQQAhACACQYgEcUGABEYNACACQShxQQBHIQALIANBADsBMiADQQA6ADECQCAARQRAIANBADoAMSADLQAuQQRxDQEMsQMLIANCADcDIAsgA0EAOgAxIANBAToANgxIC0EAIQACQCADKAI4IgJFDQAgAigCMCICRQ0AIAMgAhEAACEACyAARQ1IIABBFUcNYiADQQQ2AhwgAyABNgIUIANB0hs2AhAgA0EVNgIMQQAhAgyvAwsgASAERgRAQQYhAgyvAwsgAS0AAEEKRw0ZIAFBAWohAQwaCyADQgA3AyBBEiECDJQDCyABIARHDYoDQSMhAgysAwsgASAERgRAQQchAgysAwsCQAJAIAEtAABBCmsOBAEYGAAYCyABQQFqIQFBECECDJMDCyABQQFqIQEgA0Evai0AAEEBcQ0XQQAhAiADQQA2AhwgAyABNgIUIANBmSA2AhAgA0EZNgIMDKsDCyADIAMpAyAiDCAEIAFrrSIKfSILQgAgCyAMWBs3AyAgCiAMWg0YQQghAgyqAwsgASAERwRAIANBCTYCCCADIAE2AgRBFCECDJEDC0EJIQIMqQMLIAMpAyBQDa4CDEMLIAEgBEYEQEELIQIMqAMLIAEtAABBCkcNFiABQQFqIQEMFwsgA0Evai0AAEEBcUUNGQwmC0EAIQACQCADKAI4IgJFDQAgAigCUCICRQ0AIAMgAhEAACEACyAADRkMQgtBACEAAkAgAygCOCICRQ0AIAIoAlAiAkUNACADIAIRAAAhAAsgAA0aDCQLQQAhAAJAIAMoAjgiAkUNACACKAJQIgJFDQAgAyACEQAAIQALIAANGwwyCyADQS9qLQAAQQFxRQ0cDCILQQAhAAJAIAMoAjgiAkUNACACKAJUIgJFDQAgAyACEQAAIQALIAANHAxCC0EAIQACQCADKAI4IgJFDQAgAigCVCICRQ0AIAMgAhEAACEACyAADR0MIAsgASAERgRAQRMhAgygAwsCQCABLQAAIgBBCmsOBB8jIwAiCyABQQFqIQEMHwtBACEAAkAgAygCOCICRQ0AIAIoAlQiAkUNACADIAIRAAAhAAsgAA0iDEILIAEgBEYEQEEWIQIMngMLIAEtAABBwMEAai0AAEEBRw0jDIMDCwJAA0AgAS0AAEGwO2otAAAiAEEBRwRAAkAgAEECaw4CAwAnCyABQQFqIQFBISECDIYDCyAEIAFBAWoiAUcNAAtBGCECDJ0DCyADKAIEIQBBACECIANBADYCBCADIAAgAUEBaiIBEDQiAA0hDEELQQAhAAJAIAMoAjgiAkUNACACKAJUIgJFDQAgAyACEQAAIQALIAANIwwqCyABIARGBEBBHCECDJsDCyADQQo2AgggAyABNgIEQQAhAAJAIAMoAjgiAkUNACACKAJQIgJFDQAgAyACEQAAIQALIAANJUEkIQIMgQMLIAEgBEcEQANAIAEtAABBsD1qLQAAIgBBA0cEQCAAQQFrDgUYGiaCAyUmCyAEIAFBAWoiAUcNAAtBGyECDJoDC0EbIQIMmQMLA0AgAS0AAEGwP2otAAAiAEEDRwRAIABBAWsOBQ8RJxMmJwsgBCABQQFqIgFHDQALQR4hAgyYAwsgASAERwRAIANBCzYCCCADIAE2AgRBByECDP8CC0EfIQIMlwMLIAEgBEYEQEEgIQIMlwMLAkAgAS0AAEENaw4ULj8/Pz8/Pz8/Pz8/Pz8/Pz8/PwA/C0EAIQIgA0EANgIcIANBvws2AhAgA0ECNgIMIAMgAUEBajYCFAyWAwsgA0EvaiECA0AgASAERgRAQSEhAgyXAwsCQAJAAkAgAS0AACIAQQlrDhgCACkpASkpKSkpKSkpKSkpKSkpKSkpKQInCyABQQFqIQEgA0Evai0AAEEBcUUNCgwYCyABQQFqIQEMFwsgAUEBaiEBIAItAABBAnENAAtBACECIANBADYCHCADIAE2AhQgA0GfFTYCECADQQw2AgwMlQMLIAMtAC5BgAFxRQ0BC0EAIQACQCADKAI4IgJFDQAgAigCXCICRQ0AIAMgAhEAACEACyAARQ3mAiAAQRVGBEAgA0EkNgIcIAMgATYCFCADQZsbNgIQIANBFTYCDEEAIQIMlAMLQQAhAiADQQA2AhwgAyABNgIUIANBkA42AhAgA0EUNgIMDJMDC0EAIQIgA0EANgIcIAMgATYCFCADQb4gNgIQIANBAjYCDAySAwsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEgDKdqIgEQMiIARQ0rIANBBzYCHCADIAE2AhQgAyAANgIMDJEDCyADLQAuQcAAcUUNAQtBACEAAkAgAygCOCICRQ0AIAIoAlgiAkUNACADIAIRAAAhAAsgAEUNKyAAQRVGBEAgA0EKNgIcIAMgATYCFCADQesZNgIQIANBFTYCDEEAIQIMkAMLQQAhAiADQQA2AhwgAyABNgIUIANBkww2AhAgA0ETNgIMDI8DC0EAIQIgA0EANgIcIAMgATYCFCADQYIVNgIQIANBAjYCDAyOAwtBACECIANBADYCHCADIAE2AhQgA0HdFDYCECADQRk2AgwMjQMLQQAhAiADQQA2AhwgAyABNgIUIANB5h02AhAgA0EZNgIMDIwDCyAAQRVGDT1BACECIANBADYCHCADIAE2AhQgA0HQDzYCECADQSI2AgwMiwMLIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDMiAEUNKCADQQ02AhwgAyABNgIUIAMgADYCDAyKAwsgAEEVRg06QQAhAiADQQA2AhwgAyABNgIUIANB0A82AhAgA0EiNgIMDIkDCyADKAIEIQBBACECIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDCgLIANBDjYCHCADIAA2AgwgAyABQQFqNgIUDIgDCyAAQRVGDTdBACECIANBADYCHCADIAE2AhQgA0HQDzYCECADQSI2AgwMhwMLIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDMiAEUEQCABQQFqIQEMJwsgA0EPNgIcIAMgADYCDCADIAFBAWo2AhQMhgMLQQAhAiADQQA2AhwgAyABNgIUIANB4hc2AhAgA0EZNgIMDIUDCyAAQRVGDTNBACECIANBADYCHCADIAE2AhQgA0HWDDYCECADQSM2AgwMhAMLIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDQiAEUNJSADQRE2AhwgAyABNgIUIAMgADYCDAyDAwsgAEEVRg0wQQAhAiADQQA2AhwgAyABNgIUIANB1gw2AhAgA0EjNgIMDIIDCyADKAIEIQBBACECIANBADYCBCADIAAgARA0IgBFBEAgAUEBaiEBDCULIANBEjYCHCADIAA2AgwgAyABQQFqNgIUDIEDCyADQS9qLQAAQQFxRQ0BC0EXIQIM5gILQQAhAiADQQA2AhwgAyABNgIUIANB4hc2AhAgA0EZNgIMDP4CCyAAQTtHDQAgAUEBaiEBDAwLQQAhAiADQQA2AhwgAyABNgIUIANBkhg2AhAgA0ECNgIMDPwCCyAAQRVGDShBACECIANBADYCHCADIAE2AhQgA0HWDDYCECADQSM2AgwM+wILIANBFDYCHCADIAE2AhQgAyAANgIMDPoCCyADKAIEIQBBACECIANBADYCBCADIAAgARA0IgBFBEAgAUEBaiEBDPUCCyADQRU2AhwgAyAANgIMIAMgAUEBajYCFAz5AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQzzAgsgA0EXNgIcIAMgADYCDCADIAFBAWo2AhQM+AILIABBFUYNI0EAIQIgA0EANgIcIAMgATYCFCADQdYMNgIQIANBIzYCDAz3AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQwdCyADQRk2AhwgAyAANgIMIAMgAUEBajYCFAz2AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQzvAgsgA0EaNgIcIAMgADYCDCADIAFBAWo2AhQM9QILIABBFUYNH0EAIQIgA0EANgIcIAMgATYCFCADQdAPNgIQIANBIjYCDAz0AgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDBsLIANBHDYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgzzAgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDOsCCyADQR02AhwgAyAANgIMIAMgAUEBajYCFEEAIQIM8gILIABBO0cNASABQQFqIQELQSYhAgzXAgtBACECIANBADYCHCADIAE2AhQgA0GfFTYCECADQQw2AgwM7wILIAEgBEcEQANAIAEtAABBIEcNhAIgBCABQQFqIgFHDQALQSwhAgzvAgtBLCECDO4CCyABIARGBEBBNCECDO4CCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtBNCECDO8CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUNnwIgA0EyNgIcIAMgATYCFCADIAA2AgxBACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUEQCABQQFqIQEMnwILIANBMjYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgztAgsgASAERwRAAkADQCABLQAAQTBrIgBB/wFxQQpPBEBBOiECDNcCCyADKQMgIgtCmbPmzJmz5swZVg0BIAMgC0IKfiIKNwMgIAogAK1C/wGDIgtCf4VWDQEgAyAKIAt8NwMgIAQgAUEBaiIBRw0AC0HAACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABQQFqIgEQMSIADRcM4gILQcAAIQIM7AILIAEgBEYEQEHJACECDOwCCwJAA0ACQCABLQAAQQlrDhgAAqICogKpAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAgCiAgsgBCABQQFqIgFHDQALQckAIQIM7AILIAFBAWohASADQS9qLQAAQQFxDaUCIANBADYCHCADIAE2AhQgA0GXEDYCECADQQo2AgxBACECDOsCCyABIARHBEADQCABLQAAQSBHDRUgBCABQQFqIgFHDQALQfgAIQIM6wILQfgAIQIM6gILIANBAjoAKAw4C0EAIQIgA0EANgIcIANBvws2AhAgA0ECNgIMIAMgAUEBajYCFAzoAgtBACECDM4CC0ENIQIMzQILQRMhAgzMAgtBFSECDMsCC0EWIQIMygILQRghAgzJAgtBGSECDMgCC0EaIQIMxwILQRshAgzGAgtBHCECDMUCC0EdIQIMxAILQR4hAgzDAgtBHyECDMICC0EgIQIMwQILQSIhAgzAAgtBIyECDL8CC0ElIQIMvgILQeUAIQIMvQILIANBPTYCHCADIAE2AhQgAyAANgIMQQAhAgzVAgsgA0EbNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIM1AILIANBIDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNMCCyADQRM2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzSAgsgA0ELNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0QILIANBEDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNACCyADQSA2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzPAgsgA0ELNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzgILIANBDDYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM0CC0EAIQIgA0EANgIcIAMgATYCFCADQd0ONgIQIANBEjYCDAzMAgsCQANAAkAgAS0AAEEKaw4EAAICAAILIAQgAUEBaiIBRw0AC0H9ASECDMwCCwJAAkAgAy0ANkEBRw0AQQAhAAJAIAMoAjgiAkUNACACKAJgIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB/AE2AhwgAyABNgIUIANB3Bk2AhAgA0EVNgIMQQAhAgzNAgtB3AEhAgyzAgsgA0EANgIcIAMgATYCFCADQfkLNgIQIANBHzYCDEEAIQIMywILAkACQCADLQAoQQFrDgIEAQALQdsBIQIMsgILQdQBIQIMsQILIANBAjoAMUEAIQACQCADKAI4IgJFDQAgAigCACICRQ0AIAMgAhEAACEACyAARQRAQd0BIQIMsQILIABBFUcEQCADQQA2AhwgAyABNgIUIANBtAw2AhAgA0EQNgIMQQAhAgzKAgsgA0H7ATYCHCADIAE2AhQgA0GBGjYCECADQRU2AgxBACECDMkCCyABIARGBEBB+gEhAgzJAgsgAS0AAEHIAEYNASADQQE6ACgLQcABIQIMrgILQdoBIQIMrQILIAEgBEcEQCADQQw2AgggAyABNgIEQdkBIQIMrQILQfkBIQIMxQILIAEgBEYEQEH4ASECDMUCCyABLQAAQcgARw0EIAFBAWohAUHYASECDKsCCyABIARGBEBB9wEhAgzEAgsCQAJAIAEtAABBxQBrDhAABQUFBQUFBQUFBQUFBQUBBQsgAUEBaiEBQdYBIQIMqwILIAFBAWohAUHXASECDKoCC0H2ASECIAEgBEYNwgIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABButUAai0AAEcNAyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMwwILIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgBFBEBB4wEhAgyqAgsgA0H1ATYCHCADIAE2AhQgAyAANgIMQQAhAgzCAgtB9AEhAiABIARGDcECIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjVAGotAABHDQIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMICCyADQYEEOwEoIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgANAwwCCyADQQA2AgALQQAhAiADQQA2AhwgAyABNgIUIANB5R82AhAgA0EINgIMDL8CC0HVASECDKUCCyADQfMBNgIcIAMgATYCFCADIAA2AgxBACECDL0CC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ1uIABBFUcEQCADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgy9AgsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDLwCCyABIARHBEAgA0ENNgIIIAMgATYCBEHTASECDKMCC0HyASECDLsCCyABIARGBEBB8QEhAgy7AgsCQAJAAkAgAS0AAEHIAGsOCwABCAgICAgICAgCCAsgAUEBaiEBQdABIQIMowILIAFBAWohAUHRASECDKICCyABQQFqIQFB0gEhAgyhAgtB8AEhAiABIARGDbkCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEG11QBqLQAARw0EIABBAkYNAyAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy5AgtB7wEhAiABIARGDbgCIAMoAgAiACAEIAFraiEGIAEgAGtBAWohBQNAIAEtAAAgAEGz1QBqLQAARw0DIABBAUYNAiAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy4AgtB7gEhAiABIARGDbcCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEGw1QBqLQAARw0CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy3AgsgAygCBCEAIANCADcDACADIAAgBUEBaiIBECsiAEUNAiADQewBNgIcIAMgATYCFCADIAA2AgxBACECDLYCCyADQQA2AgALIAMoAgQhACADQQA2AgQgAyAAIAEQKyIARQ2cAiADQe0BNgIcIAMgATYCFCADIAA2AgxBACECDLQCC0HPASECDJoCC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMtAILQc4BIQIMmgILIANB6wE2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyyAgsgASAERgRAQesBIQIMsgILIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMsQILQc0BIQIMlwILIAEgBEcEQCADQQ42AgggAyABNgIEQcwBIQIMlwILQeoBIQIMrwILIAEgBEYEQEHpASECDK8CCyABLQAAQTBrIgBB/wFxQQpJBEAgAyAAOgAqIAFBAWohAUHLASECDJYCCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNlwIgA0HoATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgASAERgRAQecBIQIMrgILAkAgAS0AAEEuRgRAIAFBAWohAQwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmAIgA0HmATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgtBygEhAgyUAgsgASAERgRAQeUBIQIMrQILQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIBNgIcIAMgATYCFCADIAA2AgxBACECDK8CCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmgIgA0HjATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5AE2AhwgAyABNgIUIAMgADYCDAytAgtByQEhAgyTAgtBACEAAkAgAygCOCICRQ0AIAIoAkQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GkDTYCECADQSE2AgxBACECDK0CC0HIASECDJMCCyADQeEBNgIcIAMgATYCFCADQdAaNgIQIANBFTYCDEEAIQIMqwILIAEgBEYEQEHhASECDKsCCwJAIAEtAABBIEYEQCADQQA7ATQgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GZETYCECADQQk2AgxBACECDKsCC0HHASECDJECCyABIARGBEBB4AEhAgyqAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKsCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyqAgtBxgEhAgyQAgsgASAERgRAQd8BIQIMqQILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyqAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqQILQcUBIQIMjwILIAEgBEYEQEHeASECDKgCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqQILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKgCC0HEASECDI4CCyABIARGBEBB3QEhAgynAgsCQAJAAkACQCABLQAAQQprDhcCAwMAAwMDAwMDAwMDAwMDAwMDAwMDAQMLIAFBAWoMBQsgAUEBaiEBQcMBIQIMjwILIAFBAWohASADQS9qLQAAQQFxDQggA0EANgIcIAMgATYCFCADQY0LNgIQIANBDTYCDEEAIQIMpwILIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKYCCyABIARHBEAgA0EPNgIIIAMgATYCBEEBIQIMjQILQdwBIQIMpQILAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0HbASECDKYCCyADKAIEIQAgA0EANgIEIAMgACABEC0iAEUEQCABQQFqIQEMBAsgA0HaATYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgylAgsgAygCBCEAIANBADYCBCADIAAgARAtIgANASABQQFqCyEBQcEBIQIMigILIANB2QE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMogILQcIBIQIMiAILIANBL2otAABBAXENASADQQA2AhwgAyABNgIUIANB5Bw2AhAgA0EZNgIMQQAhAgygAgsgASAERgRAQdkB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CyADIAU2AgAMkAILIANBADYCACAGQQFqIQFBGgw8C0HKASECIAEgBEYNjgIgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBjdUAai0AAEcNOyAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMjwILIANBADYCACAGQQFqIQFBIQw7CyABIARGBEBByQEhAgyOAgsCQAJAIAEtAABBwQBrDhQAPT09PT09PT09PT09PT09PT09AT0LIAFBAWohAUGtASECDPUBCyABQQFqIQFBsAEhAgz0AQsgASAERgRAQcgBIQIMjQILAkACQCABLQAAQdUAaw4LADw8PDw8PDw8PAE8CyABQQFqIQFBrgEhAgz0AQsgAUEBaiEBQa8BIQIM8wELQccBIQIgASAERg2LAiADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw04IABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyMAgsgA0EANgIAIAZBAWohAUEqDDgLIAEgBEYEQEHGASECDIsCCyABLQAAQdAARw04IAFBAWohAUElDDcLQcUBIQIgASAERg2JAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGB1QBqLQAARw02IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyKAgsgA0EANgIAIAZBAWohAUEODDYLIAEgBEYEQEHEASECDIkCCyABLQAAQcUARw02IAFBAWohAUGrASECDO8BCyABIARGBEBBwwEhAgyIAgsCQAJAAkACQCABLQAAQcIAaw4PAAECOTk5OTk5OTk5OTkDOQsgAUEBaiEBQacBIQIM8QELIAFBAWohAUGoASECDPABCyABQQFqIQFBqQEhAgzvAQsgAUEBaiEBQaoBIQIM7gELQcIBIQIgASAERg2GAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEH+1ABqLQAARw0zIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyHAgsgA0EANgIAIAZBAWohAUEUDDMLQcEBIQIgASAERg2FAiADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANA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BTYCAAzsAQsgA0EANgIAIAZBAWohAUEXDBgLQaYBIQIgASAERg3qASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHB1ABqLQAARw0XIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzrAQsgA0EANgIAIAZBAWohAUEYDBcLIAEgBEYEQEGlASECDOoBCwJAAkAgAS0AAEHJAGsOBwAZGRkZGQEZCyABQQFqIQFBiwEhAgzRAQsgAUEBaiEBQYwBIQIM0AELQaQBIQIgASAERg3oASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGm1QBqLQAARw0VIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzpAQsgA0EANgIAIAZBAWohAUEJDBULQaMBIQIgASAERg3nASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGk1QBqLQAARw0UIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzoAQsgA0EANgIAIAZBAWohAUEfDBQLQaIBIQIgASAERg3mASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEG+1ABqLQAARw0TIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAznAQsgA0EANgIAIAZBAWohAUECDBMLQaEBIQIgASAERg3lASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYDQCABLQAAIABBvNQAai0AAEcNESAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5QELIAEgBEYEQEGgASECDOUBC0EBIAEtAABB3wBHDREaIAFBAWohAUGHASECDMsBCyADQQA2AgAgBkEBaiEBQYgBIQIMygELQZ8BIQIgASAERg3iASADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw0PIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzjAQsgA0EANgIAIAZBAWohAUEpDA8LQZ4BIQIgASAERg3hASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEG41ABqLQAARw0OIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAziAQsgA0EANgIAIAZBAWohAUEtDA4LIAEgBEYEQEGdASECDOEBCyABLQAAQcUARw0OIAFBAWohAUGEASECDMcBCyABIARGBEBBnAEhAgzgAQsCQAJAIAEtAABBzABrDggADw8PDw8PAQ8LIAFBAWohAUGCASECDMcBCyABQQFqIQFBgwEhAgzGAQtBmwEhAiABIARGDd4BIAMoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQbPUAGotAABHDQsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN8BCyADQQA2AgAgBkEBaiEBQSMMCwtBmgEhAiABIARGDd0BIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDUAGotAABHDQogAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN4BCyADQQA2AgAgBkEBaiEBQQAMCgsgASAERgRAQZkBIQIM3QELAkACQCABLQAAQcgAaw4IAAwMDAwMDAEMCyABQQFqIQFB/QAhAgzEAQsgAUEBaiEBQYABIQIMwwELIAEgBEYEQEGYASECDNwBCwJAAkAgAS0AAEHOAGsOAwALAQsLIAFBAWohAUH+ACECDMMBCyABQQFqIQFB/wAhAgzCAQsgASAERgRAQZcBIQIM2wELIAEtAABB2QBHDQggAUEBaiEBQQgMBwtBlgEhAiABIARGDdkBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQazUAGotAABHDQYgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNoBCyADQQA2AgAgBkEBaiEBQQUMBgtBlQEhAiABIARGDdgBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQabUAGotAABHDQUgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNkBCyADQQA2AgAgBkEBaiEBQRYMBQtBlAEhAiABIARGDdcBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDQQgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNgBCyADQQA2AgAgBkEBaiEBQRAMBAsgASAERgRAQZMBIQIM1wELAkACQCABLQAAQcMAaw4MAAYGBgYGBgYGBgYBBgsgAUEBaiEBQfkAIQIMvgELIAFBAWohAUH6ACECDL0BC0GSASECIAEgBEYN1QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBoNQAai0AAEcNAiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM1gELIANBADYCACAGQQFqIQFBJAwCCyADQQA2AgAMAgsgASAERgRAQZEBIQIM1AELIAEtAABBzABHDQEgAUEBaiEBQRMLOgApIAMoAgQhACADQQA2AgQgAyAAIAEQLiIADQIMAQtBACECIANBADYCHCADIAE2AhQgA0H+HzYCECADQQY2AgwM0QELQfgAIQIMtwELIANBkAE2AhwgAyABNgIUIAMgADYCDEEAIQIMzwELQQAhAAJAIAMoAjgiAkUNACACKAJAIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GCDzYCECADQSA2AgxBACECDM4BC0H3ACECDLQBCyADQY8BNgIcIAMgATYCFCADQewbNgIQIANBFTYCDEEAIQIMzAELIAEgBEYEQEGPASECDMwBCwJAIAEtAABBIEYEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQZsfNgIQIANBBjYCDEEAIQIMzAELQQIhAgyyAQsDQCABLQAAQSBHDQIgBCABQQFqIgFHDQALQY4BIQIMygELIAEgBEYEQEGNASECDMoBCwJAIAEtAABBCWsOBEoAAEoAC0H1ACECDLABCyADLQApQQVGBEBB9gAhAgywAQtB9AAhAgyvAQsgASAERgRAQYwBIQIMyAELIANBEDYCCCADIAE2AgQMCgsgASAERgRAQYsBIQIMxwELAkAgAS0AAEEJaw4ERwAARwALQfMAIQIMrQELIAEgBEcEQCADQRA2AgggAyABNgIEQfEAIQIMrQELQYoBIQIMxQELAkAgASAERwRAA0AgAS0AAEGg0ABqLQAAIgBBA0cEQAJAIABBAWsOAkkABAtB8AAhAgyvAQsgBCABQQFqIgFHDQALQYgBIQIMxgELQYgBIQIMxQELIANBADYCHCADIAE2AhQgA0HbIDYCECADQQc2AgxBACECDMQBCyABIARGBEBBiQEhAgzEAQsCQAJAAkAgAS0AAEGg0gBqLQAAQQFrDgNGAgABC0HyACECDKwBCyADQQA2AhwgAyABNgIUIANBtBI2AhAgA0EHNgIMQQAhAgzEAQtB6gAhAgyqAQsgASAERwRAIAFBAWohAUHvACECDKoBC0GHASECDMIBCyAEIAEiAEYEQEGGASECDMIBCyAALQAAIgFBL0YEQCAAQQFqIQFB7gAhAgypAQsgAUEJayICQRdLDQEgACEBQQEgAnRBm4CABHENQQwBCyAEIAEiAEYEQEGFASECDMEBCyAALQAAQS9HDQAgAEEBaiEBDAMLQQAhAiADQQA2AhwgAyAANgIUIANB2yA2AhAgA0EHNgIMDL8BCwJAAkACQAJAAkADQCABLQAAQaDOAGotAAAiAEEFRwRAAkACQCAAQQFrDghHBQYHCAAEAQgLQesAIQIMrQELIAFBAWohAUHtACECDKwBCyAEIAFBAWoiAUcNAAtBhAEhAgzDAQsgAUEBagwUCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDMEBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDMABCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDL8BCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy+AQsgASAERgRAQYMBIQIMvgELAkAgAS0AAEGgzgBqLQAAQQFrDgg+BAUGAAgCAwcLIAFBAWohAQtBAyECDKMBCyABQQFqDA0LQQAhAiADQQA2AhwgA0HREjYCECADQQc2AgwgAyABQQFqNgIUDLoBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDLkBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDLgBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDLcBCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy2AQtB7AAhAgycAQsgASAERgRAQYIBIQIMtQELIAFBAWoMAgsgASAERgRAQYEBIQIMtAELIAFBAWoMAQsgASAERg0BIAFBAWoLIQFBBCECDJgBC0GAASECDLABCwNAIAEtAABBoMwAai0AACIAQQJHBEAgAEEBRwRAQekAIQIMmQELDDELIAQgAUEBaiIBRw0AC0H/ACECDK8BCyABIARGBEBB/gAhAgyvAQsCQCABLQAAQQlrDjcvAwYvBAYGBgYGBgYGBgYGBgYGBgYGBgUGBgIGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYABgsgAUEBagshAUEFIQIMlAELIAFBAWoMBgsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgyrAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgyqAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgypAQsgA0EANgIcIAMgATYCFCADQY0UNgIQIANBBzYCDEEAIQIMqAELAkACQAJAAkADQCABLQAAQaDKAGotAAAiAEEFRwRAAkAgAEEBaw4GLgMEBQYABgtB6AAhAgyUAQsgBCABQQFqIgFHDQALQf0AIQIMqwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMqgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMqQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMqAELIANBADYCHCADIAE2AhQgA0HkCDYCECADQQc2AgxBACECDKcBCyABIARGDQEgAUEBagshAUEGIQIMjAELQfwAIQIMpAELAkACQAJAAkADQCABLQAAQaDIAGotAAAiAEEFRwRAIABBAWsOBCkCAwQFCyAEIAFBAWoiAUcNAAtB+wAhAgynAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgymAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgylAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgykAQsgA0EANgIcIAMgATYCFCADQbwKNgIQIANBBzYCDEEAIQIMowELQc8AIQIMiQELQdEAIQIMiAELQecAIQIMhwELIAEgBEYEQEH6ACECDKABCwJAIAEtAABBCWsOBCAAACAACyABQQFqIQFB5gAhAgyGAQsgASAERgRAQfkAIQIMnwELAkAgAS0AAEEJaw4EHwAAHwALQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFBEBB4gEhAgyGAQsgAEEVRwRAIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDJ8BCyADQfgANgIcIAMgATYCFCADQeoaNgIQIANBFTYCDEEAIQIMngELIAEgBEcEQCADQQ02AgggAyABNgIEQeQAIQIMhQELQfcAIQIMnQELIAEgBEYEQEH2ACECDJ0BCwJAAkACQCABLQAAQcgAaw4LAAELCwsLCwsLCwILCyABQQFqIQFB3QAhAgyFAQsgAUEBaiEBQeAAIQIMhAELIAFBAWohAUHjACECDIMBC0H1ACECIAEgBEYNmwEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBtdUAai0AAEcNCCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMnAELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfQANgIcIAMgATYCFCADIAA2AgxBACECDJwBC0HiACECDIIBC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMnAELQeEAIQIMggELIANB8wA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyaAQsgAy0AKSIAQSNrQQtJDQkCQCAAQQZLDQBBASAAdEHKAHFFDQAMCgtBACECIANBADYCHCADIAE2AhQgA0HtCTYCECADQQg2AgwMmQELQfIAIQIgASAERg2YASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGz1QBqLQAARw0FIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyZAQsgAygCBCEAIANCADcDACADIAAgBkEBaiIBECsiAARAIANB8QA2AhwgAyABNgIUIAMgADYCDEEAIQIMmQELQd8AIQIMfwtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJkBC0HeACECDH8LIANB8AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyXAQsgAy0AKUEhRg0GIANBADYCHCADIAE2AhQgA0GRCjYCECADQQg2AgxBACECDJYBC0HvACECIAEgBEYNlQEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMlgELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgBFDQIgA0HtADYCHCADIAE2AhQgAyAANgIMQQAhAgyVAQsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNgAEgA0HuADYCHCADIAE2AhQgAyAANgIMQQAhAgyTAQtB3AAhAgx5C0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMkwELQdsAIQIMeQsgA0HsADYCHCADIAE2AhQgA0GAGzYCECADQRU2AgxBACECDJEBCyADLQApIgBBI0kNACAAQS5GDQAgA0EANgIcIAMgATYCFCADQckJNgIQIANBCDYCDEEAIQIMkAELQdoAIQIMdgsgASAERgRAQesAIQIMjwELAkAgAS0AAEEvRgRAIAFBAWohAQwBCyAD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ciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw=='\n\nlet wasmBuffer\n\nObject.defineProperty(module, 'exports', {\n  get: () => {\n    return wasmBuffer\n      ? wasmBuffer\n      : (wasmBuffer = Buffer.from(wasmBase64, 'base64'))\n  }\n})\n", "'use strict'\n\nconst corsSafeListedMethods = /** @type {const} */ (['GET', 'HEAD', 'POST'])\nconst corsSafeListedMethodsSet = new Set(corsSafeListedMethods)\n\nconst nullBodyStatus = /** @type {const} */ ([101, 204, 205, 304])\n\nconst redirectStatus = /** @type {const} */ ([301, 302, 303, 307, 308])\nconst redirectStatusSet = new Set(redirectStatus)\n\n/**\n * @see https://fetch.spec.whatwg.org/#block-bad-port\n */\nconst badPorts = /** @type {const} */ ([\n  '1', '7', '9', '11', '13', '15', '17', '19', '20', '21', '22', '23', '25', '37', '42', '43', '53', '69', '77', '79',\n  '87', '95', '101', '102', '103', '104', '109', '110', '111', '113', '115', '117', '119', '123', '135', '137',\n  '139', '143', '161', '179', '389', '427', '465', '512', '513', '514', '515', '526', '530', '531', '532',\n  '540', '548', '554', '556', '563', '587', '601', '636', '989', '990', '993', '995', '1719', '1720', '1723',\n  '2049', '3659', '4045', '4190', '5060', '5061', '6000', '6566', '6665', '6666', '6667', '6668', '6669', '6679',\n  '6697', '10080'\n])\nconst badPortsSet = new Set(badPorts)\n\n/**\n * @see https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-header\n */\nconst referrerPolicyTokens = /** @type {const} */ ([\n  'no-referrer',\n  'no-referrer-when-downgrade',\n  'same-origin',\n  'origin',\n  'strict-origin',\n  'origin-when-cross-origin',\n  'strict-origin-when-cross-origin',\n  'unsafe-url'\n])\n\n/**\n * @see https://w3c.github.io/webappsec-referrer-policy/#referrer-policies\n */\nconst referrerPolicy = /** @type {const} */ ([\n  '',\n  ...referrerPolicyTokens\n])\nconst referrerPolicyTokensSet = new Set(referrerPolicyTokens)\n\nconst requestRedirect = /** @type {const} */ (['follow', 'manual', 'error'])\n\nconst safeMethods = /** @type {const} */ (['GET', 'HEAD', 'OPTIONS', 'TRACE'])\nconst safeMethodsSet = new Set(safeMethods)\n\nconst requestMode = /** @type {const} */ (['navigate', 'same-origin', 'no-cors', 'cors'])\n\nconst requestCredentials = /** @type {const} */ (['omit', 'same-origin', 'include'])\n\nconst requestCache = /** @type {const} */ ([\n  'default',\n  'no-store',\n  'reload',\n  'no-cache',\n  'force-cache',\n  'only-if-cached'\n])\n\n/**\n * @see https://fetch.spec.whatwg.org/#request-body-header-name\n */\nconst requestBodyHeader = /** @type {const} */ ([\n  'content-encoding',\n  'content-language',\n  'content-location',\n  'content-type',\n  // See https://github.com/nodejs/undici/issues/2021\n  // 'Content-Length' is a forbidden header name, which is typically\n  // removed in the Headers implementation. However, undici doesn't\n  // filter out headers, so we add it here.\n  'content-length'\n])\n\n/**\n * @see https://fetch.spec.whatwg.org/#enumdef-requestduplex\n */\nconst requestDuplex = /** @type {const} */ ([\n  'half'\n])\n\n/**\n * @see http://fetch.spec.whatwg.org/#forbidden-method\n */\nconst forbiddenMethods = /** @type {const} */ (['CONNECT', 'TRACE', 'TRACK'])\nconst forbiddenMethodsSet = new Set(forbiddenMethods)\n\nconst subresource = /** @type {const} */ ([\n  'audio',\n  'audioworklet',\n  'font',\n  'image',\n  'manifest',\n  'paintworklet',\n  'script',\n  'style',\n  'track',\n  'video',\n  'xslt',\n  ''\n])\nconst subresourceSet = new Set(subresource)\n\nmodule.exports = {\n  subresource,\n  forbiddenMethods,\n  requestBodyHeader,\n  referrerPolicy,\n  requestRedirect,\n  requestMode,\n  requestCredentials,\n  requestCache,\n  redirectStatus,\n  corsSafeListedMethods,\n  nullBodyStatus,\n  safeMethods,\n  badPorts,\n  requestDuplex,\n  subresourceSet,\n  badPortsSet,\n  redirectStatusSet,\n  corsSafeListedMethodsSet,\n  safeMethodsSet,\n  forbiddenMethodsSet,\n  referrerPolicyTokens: referrerPolicyTokensSet\n}\n", "'use strict'\n\n// In case of breaking changes, increase the version\n// number to avoid conflicts.\nconst globalOrigin = Symbol.for('undici.globalOrigin.1')\n\nfunction getGlobalOrigin () {\n  return globalThis[globalOrigin]\n}\n\nfunction setGlobalOrigin (newOrigin) {\n  if (newOrigin === undefined) {\n    Object.defineProperty(globalThis, globalOrigin, {\n      value: undefined,\n      writable: true,\n      enumerable: false,\n      configurable: false\n    })\n\n    return\n  }\n\n  const parsedURL = new URL(newOrigin)\n\n  if (parsedURL.protocol !== 'http:' && parsedURL.protocol !== 'https:') {\n    throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`)\n  }\n\n  Object.defineProperty(globalThis, globalOrigin, {\n    value: parsedURL,\n    writable: true,\n    enumerable: false,\n    configurable: false\n  })\n}\n\nmodule.exports = {\n  getGlobalOrigin,\n  setGlobalOrigin\n}\n", "'use strict'\n\nconst textDecoder = new TextDecoder()\n\n/**\n * @see https://encoding.spec.whatwg.org/#utf-8-decode\n * @param {Uint8Array} buffer\n */\nfunction utf8DecodeBytes (buffer) {\n  if (buffer.length === 0) {\n    return ''\n  }\n\n  // 1. Let buffer be the result of peeking three bytes from\n  //    ioQueue, converted to a byte sequence.\n\n  // 2. If buffer is 0xEF 0xBB 0xBF, then read three\n  //    bytes from ioQueue. (Do nothing with those bytes.)\n  if (buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) {\n    buffer = buffer.subarray(3)\n  }\n\n  // 3. Process a queue with an instance of UTF-8\u2019s\n  //    decoder, ioQueue, output, and \"replacement\".\n  const output = textDecoder.decode(buffer)\n\n  // 4. Return output.\n  return output\n}\n\nmodule.exports = {\n  utf8DecodeBytes\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { utf8DecodeBytes } = require('../../encoding')\n\n/**\n * @param {(char: string) => boolean} condition\n * @param {string} input\n * @param {{ position: number }} position\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#collect-a-sequence-of-code-points\n */\nfunction collectASequenceOfCodePoints (condition, input, position) {\n  // 1. Let result be the empty string.\n  let result = ''\n\n  // 2. While position doesn\u2019t point past the end of input and the\n  // code point at position within input meets the condition condition:\n  while (position.position < input.length && condition(input[position.position])) {\n    // 1. Append that code point to the end of result.\n    result += input[position.position]\n\n    // 2. Advance position by 1.\n    position.position++\n  }\n\n  // 3. Return result.\n  return result\n}\n\n/**\n * A faster collectASequenceOfCodePoints that only works when comparing a single character.\n * @param {string} char\n * @param {string} input\n * @param {{ position: number }} position\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#collect-a-sequence-of-code-points\n */\nfunction collectASequenceOfCodePointsFast (char, input, position) {\n  const idx = input.indexOf(char, position.position)\n  const start = position.position\n\n  if (idx === -1) {\n    position.position = input.length\n    return input.slice(start)\n  }\n\n  position.position = idx\n  return input.slice(start, position.position)\n}\n\nconst ASCII_WHITESPACE_REPLACE_REGEX = /[\\u0009\\u000A\\u000C\\u000D\\u0020]/g // eslint-disable-line no-control-regex\n\n/**\n * @param {string} data\n * @returns {Uint8Array | 'failure'}\n *\n * @see https://infra.spec.whatwg.org/#forgiving-base64-decode\n */\nfunction forgivingBase64 (data) {\n  // 1. Remove all ASCII whitespace from data.\n  data = data.replace(ASCII_WHITESPACE_REPLACE_REGEX, '')\n\n  let dataLength = data.length\n  // 2. If data\u2019s code point length divides by 4 leaving\n  // no remainder, then:\n  if (dataLength % 4 === 0) {\n    // 1. If data ends with one or two U+003D (=) code points,\n    // then remove them from data.\n    if (data.charCodeAt(dataLength - 1) === 0x003D) {\n      --dataLength\n      if (data.charCodeAt(dataLength - 1) === 0x003D) {\n        --dataLength\n      }\n    }\n  }\n\n  // 3. If data\u2019s code point length divides by 4 leaving\n  // a remainder of 1, then return failure.\n  if (dataLength % 4 === 1) {\n    return 'failure'\n  }\n\n  // 4. If data contains a code point that is not one of\n  //  U+002B (+)\n  //  U+002F (/)\n  //  ASCII alphanumeric\n  // then return failure.\n  if (/[^+/0-9A-Za-z]/.test(data.length === dataLength ? data : data.substring(0, dataLength))) {\n    return 'failure'\n  }\n\n  const buffer = Buffer.from(data, 'base64')\n  return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n}\n\n/**\n * @param {number} char\n * @returns {boolean}\n *\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n */\nfunction isASCIIWhitespace (char) {\n  return (\n    char === 0x09 || // \\t\n    char === 0x0a || // \\n\n    char === 0x0c || // \\f\n    char === 0x0d || // \\r\n    char === 0x20    // space\n  )\n}\n\n/**\n * @param {Uint8Array} input\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#isomorphic-decode\n */\nfunction isomorphicDecode (input) {\n  // 1. To isomorphic decode a byte sequence input, return a string whose code point\n  //    length is equal to input\u2019s length and whose code points have the same values\n  //    as the values of input\u2019s bytes, in the same order.\n  const length = input.length\n  if ((2 << 15) - 1 > length) {\n    return String.fromCharCode.apply(null, input)\n  }\n  let result = ''\n  let i = 0\n  let addition = (2 << 15) - 1\n  while (i < length) {\n    if (i + addition > length) {\n      addition = length - i\n    }\n    result += String.fromCharCode.apply(null, input.subarray(i, i += addition))\n  }\n  return result\n}\n\nconst invalidIsomorphicEncodeValueRegex = /[^\\x00-\\xFF]/ // eslint-disable-line no-control-regex\n\n/**\n * @param {string} input\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#isomorphic-encode\n */\nfunction isomorphicEncode (input) {\n  // 1. Assert: input contains no code points greater than U+00FF.\n  assert(!invalidIsomorphicEncodeValueRegex.test(input))\n\n  // 2. Return a byte sequence whose length is equal to input\u2019s code\n  //    point length and whose bytes have the same values as the\n  //    values of input\u2019s code points, in the same order\n  return input\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#parse-json-bytes-to-a-javascript-value\n * @param {Uint8Array} bytes\n */\nfunction parseJSONFromBytes (bytes) {\n  return JSON.parse(utf8DecodeBytes(bytes))\n}\n\n/**\n * @param {string} str\n * @param {boolean} [leading=true]\n * @param {boolean} [trailing=true]\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#strip-leading-and-trailing-ascii-whitespace\n */\nfunction removeASCIIWhitespace (str, leading = true, trailing = true) {\n  return removeChars(str, leading, trailing, isASCIIWhitespace)\n}\n\n/**\n * @param {string} str\n * @param {boolean} leading\n * @param {boolean} trailing\n * @param {(charCode: number) => boolean} predicate\n * @returns {string}\n */\nfunction removeChars (str, leading, trailing, predicate) {\n  let lead = 0\n  let trail = str.length - 1\n\n  if (leading) {\n    while (lead < str.length && predicate(str.charCodeAt(lead))) lead++\n  }\n\n  if (trailing) {\n    while (trail > 0 && predicate(str.charCodeAt(trail))) trail--\n  }\n\n  return lead === 0 && trail === str.length - 1 ? str : str.slice(lead, trail + 1)\n}\n\n// https://infra.spec.whatwg.org/#serialize-a-javascript-value-to-a-json-string\nfunction serializeJavascriptValueToJSONString (value) {\n  // 1. Let result be ? Call(%JSON.stringify%, undefined, \u00AB value \u00BB).\n  const result = JSON.stringify(value)\n\n  // 2. If result is undefined, then throw a TypeError.\n  if (result === undefined) {\n    throw new TypeError('Value is not JSON serializable')\n  }\n\n  // 3. Assert: result is a string.\n  assert(typeof result === 'string')\n\n  // 4. Return result.\n  return result\n}\n\nmodule.exports = {\n  collectASequenceOfCodePoints,\n  collectASequenceOfCodePointsFast,\n  forgivingBase64,\n  isASCIIWhitespace,\n  isomorphicDecode,\n  isomorphicEncode,\n  parseJSONFromBytes,\n  removeASCIIWhitespace,\n  removeChars,\n  serializeJavascriptValueToJSONString\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { forgivingBase64, collectASequenceOfCodePoints, collectASequenceOfCodePointsFast, isomorphicDecode, removeASCIIWhitespace, removeChars } = require('../infra')\n\nconst encoder = new TextEncoder()\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#http-token-code-point\n */\nconst HTTP_TOKEN_CODEPOINTS = /^[-!#$%&'*+.^_|~A-Za-z0-9]+$/u\nconst HTTP_WHITESPACE_REGEX = /[\\u000A\\u000D\\u0009\\u0020]/u // eslint-disable-line\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#http-quoted-string-token-code-point\n */\nconst HTTP_QUOTED_STRING_TOKENS = /^[\\u0009\\u0020-\\u007E\\u0080-\\u00FF]+$/u // eslint-disable-line\n\n// https://fetch.spec.whatwg.org/#data-url-processor\n/** @param {URL} dataURL */\nfunction dataURLProcessor (dataURL) {\n  // 1. Assert: dataURL\u2019s scheme is \"data\".\n  assert(dataURL.protocol === 'data:')\n\n  // 2. Let input be the result of running the URL\n  // serializer on dataURL with exclude fragment\n  // set to true.\n  let input = URLSerializer(dataURL, true)\n\n  // 3. Remove the leading \"data:\" string from input.\n  input = input.slice(5)\n\n  // 4. Let position point at the start of input.\n  const position = { position: 0 }\n\n  // 5. Let mimeType be the result of collecting a\n  // sequence of code points that are not equal\n  // to U+002C (,), given position.\n  let mimeType = collectASequenceOfCodePointsFast(\n    ',',\n    input,\n    position\n  )\n\n  // 6. Strip leading and trailing ASCII whitespace\n  // from mimeType.\n  // Undici implementation note: we need to store the\n  // length because if the mimetype has spaces removed,\n  // the wrong amount will be sliced from the input in\n  // step #9\n  const mimeTypeLength = mimeType.length\n  mimeType = removeASCIIWhitespace(mimeType, true, true)\n\n  // 7. If position is past the end of input, then\n  // return failure\n  if (position.position >= input.length) {\n    return 'failure'\n  }\n\n  // 8. Advance position by 1.\n  position.position++\n\n  // 9. Let encodedBody be the remainder of input.\n  const encodedBody = input.slice(mimeTypeLength + 1)\n\n  // 10. Let body be the percent-decoding of encodedBody.\n  let body = stringPercentDecode(encodedBody)\n\n  // 11. If mimeType ends with U+003B (;), followed by\n  // zero or more U+0020 SPACE, followed by an ASCII\n  // case-insensitive match for \"base64\", then:\n  if (/;(?:\\u0020*)base64$/ui.test(mimeType)) {\n    // 1. Let stringBody be the isomorphic decode of body.\n    const stringBody = isomorphicDecode(body)\n\n    // 2. Set body to the forgiving-base64 decode of\n    // stringBody.\n    body = forgivingBase64(stringBody)\n\n    // 3. If body is failure, then return failure.\n    if (body === 'failure') {\n      return 'failure'\n    }\n\n    // 4. Remove the last 6 code points from mimeType.\n    mimeType = mimeType.slice(0, -6)\n\n    // 5. Remove trailing U+0020 SPACE code points from mimeType,\n    // if any.\n    mimeType = mimeType.replace(/(\\u0020+)$/u, '')\n\n    // 6. Remove the last U+003B (;) code point from mimeType.\n    mimeType = mimeType.slice(0, -1)\n  }\n\n  // 12. If mimeType starts with U+003B (;), then prepend\n  // \"text/plain\" to mimeType.\n  if (mimeType.startsWith(';')) {\n    mimeType = 'text/plain' + mimeType\n  }\n\n  // 13. Let mimeTypeRecord be the result of parsing\n  // mimeType.\n  let mimeTypeRecord = parseMIMEType(mimeType)\n\n  // 14. If mimeTypeRecord is failure, then set\n  // mimeTypeRecord to text/plain;charset=US-ASCII.\n  if (mimeTypeRecord === 'failure') {\n    mimeTypeRecord = parseMIMEType('text/plain;charset=US-ASCII')\n  }\n\n  // 15. Return a new data: URL struct whose MIME\n  // type is mimeTypeRecord and body is body.\n  // https://fetch.spec.whatwg.org/#data-url-struct\n  return { mimeType: mimeTypeRecord, body }\n}\n\n// https://url.spec.whatwg.org/#concept-url-serializer\n/**\n * @param {URL} url\n * @param {boolean} excludeFragment\n */\nfunction URLSerializer (url, excludeFragment = false) {\n  if (!excludeFragment) {\n    return url.href\n  }\n\n  const href = url.href\n  const hashLength = url.hash.length\n\n  const serialized = hashLength === 0 ? href : href.substring(0, href.length - hashLength)\n\n  if (!hashLength && href.endsWith('#')) {\n    return serialized.slice(0, -1)\n  }\n\n  return serialized\n}\n\n// https://url.spec.whatwg.org/#string-percent-decode\n/** @param {string} input */\nfunction stringPercentDecode (input) {\n  // 1. Let bytes be the UTF-8 encoding of input.\n  const bytes = encoder.encode(input)\n\n  // 2. Return the percent-decoding of bytes.\n  return percentDecode(bytes)\n}\n\n/**\n * @param {number} byte\n */\nfunction isHexCharByte (byte) {\n  // 0-9 A-F a-f\n  return (byte >= 0x30 && byte <= 0x39) || (byte >= 0x41 && byte <= 0x46) || (byte >= 0x61 && byte <= 0x66)\n}\n\n/**\n * @param {number} byte\n */\nfunction hexByteToNumber (byte) {\n  return (\n    // 0-9\n    byte >= 0x30 && byte <= 0x39\n      ? (byte - 48)\n    // Convert to uppercase\n    // ((byte & 0xDF) - 65) + 10\n      : ((byte & 0xDF) - 55)\n  )\n}\n\n// https://url.spec.whatwg.org/#percent-decode\n/** @param {Uint8Array} input */\nfunction percentDecode (input) {\n  const length = input.length\n  // 1. Let output be an empty byte sequence.\n  /** @type {Uint8Array} */\n  const output = new Uint8Array(length)\n  let j = 0\n  let i = 0\n  // 2. For each byte byte in input:\n  while (i < length) {\n    const byte = input[i]\n\n    // 1. If byte is not 0x25 (%), then append byte to output.\n    if (byte !== 0x25) {\n      output[j++] = byte\n\n    // 2. Otherwise, if byte is 0x25 (%) and the next two bytes\n    // after byte in input are not in the ranges\n    // 0x30 (0) to 0x39 (9), 0x41 (A) to 0x46 (F),\n    // and 0x61 (a) to 0x66 (f), all inclusive, append byte\n    // to output.\n    } else if (\n      byte === 0x25 &&\n      !(isHexCharByte(input[i + 1]) && isHexCharByte(input[i + 2]))\n    ) {\n      output[j++] = 0x25\n\n    // 3. Otherwise:\n    } else {\n      // 1. Let bytePoint be the two bytes after byte in input,\n      // decoded, and then interpreted as hexadecimal number.\n      // 2. Append a byte whose value is bytePoint to output.\n      output[j++] = (hexByteToNumber(input[i + 1]) << 4) | hexByteToNumber(input[i + 2])\n\n      // 3. Skip the next two bytes in input.\n      i += 2\n    }\n    ++i\n  }\n\n  // 3. Return output.\n  return length === j ? output : output.subarray(0, j)\n}\n\n// https://mimesniff.spec.whatwg.org/#parse-a-mime-type\n/** @param {string} input */\nfunction parseMIMEType (input) {\n  // 1. Remove any leading and trailing HTTP whitespace\n  // from input.\n  input = removeHTTPWhitespace(input, true, true)\n\n  // 2. Let position be a position variable for input,\n  // initially pointing at the start of input.\n  const position = { position: 0 }\n\n  // 3. Let type be the result of collecting a sequence\n  // of code points that are not U+002F (/) from\n  // input, given position.\n  const type = collectASequenceOfCodePointsFast(\n    '/',\n    input,\n    position\n  )\n\n  // 4. If type is the empty string or does not solely\n  // contain HTTP token code points, then return failure.\n  // https://mimesniff.spec.whatwg.org/#http-token-code-point\n  if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) {\n    return 'failure'\n  }\n\n  // 5. If position is past the end of input, then return\n  // failure\n  if (position.position >= input.length) {\n    return 'failure'\n  }\n\n  // 6. Advance position by 1. (This skips past U+002F (/).)\n  position.position++\n\n  // 7. Let subtype be the result of collecting a sequence of\n  // code points that are not U+003B (;) from input, given\n  // position.\n  let subtype = collectASequenceOfCodePointsFast(\n    ';',\n    input,\n    position\n  )\n\n  // 8. Remove any trailing HTTP whitespace from subtype.\n  subtype = removeHTTPWhitespace(subtype, false, true)\n\n  // 9. If subtype is the empty string or does not solely\n  // contain HTTP token code points, then return failure.\n  if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) {\n    return 'failure'\n  }\n\n  const typeLowercase = type.toLowerCase()\n  const subtypeLowercase = subtype.toLowerCase()\n\n  // 10. Let mimeType be a new MIME type record whose type\n  // is type, in ASCII lowercase, and subtype is subtype,\n  // in ASCII lowercase.\n  // https://mimesniff.spec.whatwg.org/#mime-type\n  const mimeType = {\n    type: typeLowercase,\n    subtype: subtypeLowercase,\n    /** @type {Map<string, string>} */\n    parameters: new Map(),\n    // https://mimesniff.spec.whatwg.org/#mime-type-essence\n    essence: `${typeLowercase}/${subtypeLowercase}`\n  }\n\n  // 11. While position is not past the end of input:\n  while (position.position < input.length) {\n    // 1. Advance position by 1. (This skips past U+003B (;).)\n    position.position++\n\n    // 2. Collect a sequence of code points that are HTTP\n    // whitespace from input given position.\n    collectASequenceOfCodePoints(\n      // https://fetch.spec.whatwg.org/#http-whitespace\n      char => HTTP_WHITESPACE_REGEX.test(char),\n      input,\n      position\n    )\n\n    // 3. Let parameterName be the result of collecting a\n    // sequence of code points that are not U+003B (;)\n    // or U+003D (=) from input, given position.\n    let parameterName = collectASequenceOfCodePoints(\n      (char) => char !== ';' && char !== '=',\n      input,\n      position\n    )\n\n    // 4. Set parameterName to parameterName, in ASCII\n    // lowercase.\n    parameterName = parameterName.toLowerCase()\n\n    // 5. If position is not past the end of input, then:\n    if (position.position < input.length) {\n      // 1. If the code point at position within input is\n      // U+003B (;), then continue.\n      if (input[position.position] === ';') {\n        continue\n      }\n\n      // 2. Advance position by 1. (This skips past U+003D (=).)\n      position.position++\n    }\n\n    // 6. If position is past the end of input, then break.\n    if (position.position >= input.length) {\n      break\n    }\n\n    // 7. Let parameterValue be null.\n    let parameterValue = null\n\n    // 8. If the code point at position within input is\n    // U+0022 (\"), then:\n    if (input[position.position] === '\"') {\n      // 1. Set parameterValue to the result of collecting\n      // an HTTP quoted string from input, given position\n      // and the extract-value flag.\n      parameterValue = collectAnHTTPQuotedString(input, position, true)\n\n      // 2. Collect a sequence of code points that are not\n      // U+003B (;) from input, given position.\n      collectASequenceOfCodePointsFast(\n        ';',\n        input,\n        position\n      )\n\n    // 9. Otherwise:\n    } else {\n      // 1. Set parameterValue to the result of collecting\n      // a sequence of code points that are not U+003B (;)\n      // from input, given position.\n      parameterValue = collectASequenceOfCodePointsFast(\n        ';',\n        input,\n        position\n      )\n\n      // 2. Remove any trailing HTTP whitespace from parameterValue.\n      parameterValue = removeHTTPWhitespace(parameterValue, false, true)\n\n      // 3. If parameterValue is the empty string, then continue.\n      if (parameterValue.length === 0) {\n        continue\n      }\n    }\n\n    // 10. If all of the following are true\n    // - parameterName is not the empty string\n    // - parameterName solely contains HTTP token code points\n    // - parameterValue solely contains HTTP quoted-string token code points\n    // - mimeType\u2019s parameters[parameterName] does not exist\n    // then set mimeType\u2019s parameters[parameterName] to parameterValue.\n    if (\n      parameterName.length !== 0 &&\n      HTTP_TOKEN_CODEPOINTS.test(parameterName) &&\n      (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) &&\n      !mimeType.parameters.has(parameterName)\n    ) {\n      mimeType.parameters.set(parameterName, parameterValue)\n    }\n  }\n\n  // 12. Return mimeType.\n  return mimeType\n}\n\n// https://fetch.spec.whatwg.org/#collect-an-http-quoted-string\n// tests: https://fetch.spec.whatwg.org/#example-http-quoted-string\n/**\n * @param {string} input\n * @param {{ position: number }} position\n * @param {boolean} [extractValue=false]\n */\nfunction collectAnHTTPQuotedString (input, position, extractValue = false) {\n  // 1. Let positionStart be position.\n  const positionStart = position.position\n\n  // 2. Let value be the empty string.\n  let value = ''\n\n  // 3. Assert: the code point at position within input\n  // is U+0022 (\").\n  assert(input[position.position] === '\"')\n\n  // 4. Advance position by 1.\n  position.position++\n\n  // 5. While true:\n  while (true) {\n    // 1. Append the result of collecting a sequence of code points\n    // that are not U+0022 (\") or U+005C (\\) from input, given\n    // position, to value.\n    value += collectASequenceOfCodePoints(\n      (char) => char !== '\"' && char !== '\\\\',\n      input,\n      position\n    )\n\n    // 2. If position is past the end of input, then break.\n    if (position.position >= input.length) {\n      break\n    }\n\n    // 3. Let quoteOrBackslash be the code point at position within\n    // input.\n    const quoteOrBackslash = input[position.position]\n\n    // 4. Advance position by 1.\n    position.position++\n\n    // 5. If quoteOrBackslash is U+005C (\\), then:\n    if (quoteOrBackslash === '\\\\') {\n      // 1. If position is past the end of input, then append\n      // U+005C (\\) to value and break.\n      if (position.position >= input.length) {\n        value += '\\\\'\n        break\n      }\n\n      // 2. Append the code point at position within input to value.\n      value += input[position.position]\n\n      // 3. Advance position by 1.\n      position.position++\n\n    // 6. Otherwise:\n    } else {\n      // 1. Assert: quoteOrBackslash is U+0022 (\").\n      assert(quoteOrBackslash === '\"')\n\n      // 2. Break.\n      break\n    }\n  }\n\n  // 6. If the extract-value flag is set, then return value.\n  if (extractValue) {\n    return value\n  }\n\n  // 7. Return the code points from positionStart to position,\n  // inclusive, within input.\n  return input.slice(positionStart, position.position)\n}\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#serialize-a-mime-type\n */\nfunction serializeAMimeType (mimeType) {\n  assert(mimeType !== 'failure')\n  const { parameters, essence } = mimeType\n\n  // 1. Let serialization be the concatenation of mimeType\u2019s\n  //    type, U+002F (/), and mimeType\u2019s subtype.\n  let serialization = essence\n\n  // 2. For each name \u2192 value of mimeType\u2019s parameters:\n  for (let [name, value] of parameters.entries()) {\n    // 1. Append U+003B (;) to serialization.\n    serialization += ';'\n\n    // 2. Append name to serialization.\n    serialization += name\n\n    // 3. Append U+003D (=) to serialization.\n    serialization += '='\n\n    // 4. If value does not solely contain HTTP token code\n    //    points or value is the empty string, then:\n    if (!HTTP_TOKEN_CODEPOINTS.test(value)) {\n      // 1. Precede each occurrence of U+0022 (\") or\n      //    U+005C (\\) in value with U+005C (\\).\n      value = value.replace(/[\\\\\"]/ug, '\\\\$&')\n\n      // 2. Prepend U+0022 (\") to value.\n      value = '\"' + value\n\n      // 3. Append U+0022 (\") to value.\n      value += '\"'\n    }\n\n    // 5. Append value to serialization.\n    serialization += value\n  }\n\n  // 3. Return serialization.\n  return serialization\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#http-whitespace\n * @param {number} char\n */\nfunction isHTTPWhiteSpace (char) {\n  // \"\\r\\n\\t \"\n  return char === 0x00d || char === 0x00a || char === 0x009 || char === 0x020\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#http-whitespace\n * @param {string} str\n * @param {boolean} [leading=true]\n * @param {boolean} [trailing=true]\n */\nfunction removeHTTPWhitespace (str, leading = true, trailing = true) {\n  return removeChars(str, leading, trailing, isHTTPWhiteSpace)\n}\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#minimize-a-supported-mime-type\n * @param {Exclude<ReturnType<typeof parseMIMEType>, 'failure'>} mimeType\n */\nfunction minimizeSupportedMimeType (mimeType) {\n  switch (mimeType.essence) {\n    case 'application/ecmascript':\n    case 'application/javascript':\n    case 'application/x-ecmascript':\n    case 'application/x-javascript':\n    case 'text/ecmascript':\n    case 'text/javascript':\n    case 'text/javascript1.0':\n    case 'text/javascript1.1':\n    case 'text/javascript1.2':\n    case 'text/javascript1.3':\n    case 'text/javascript1.4':\n    case 'text/javascript1.5':\n    case 'text/jscript':\n    case 'text/livescript':\n    case 'text/x-ecmascript':\n    case 'text/x-javascript':\n      // 1. If mimeType is a JavaScript MIME type, then return \"text/javascript\".\n      return 'text/javascript'\n    case 'application/json':\n    case 'text/json':\n      // 2. If mimeType is a JSON MIME type, then return \"application/json\".\n      return 'application/json'\n    case 'image/svg+xml':\n      // 3. If mimeType\u2019s essence is \"image/svg+xml\", then return \"image/svg+xml\".\n      return 'image/svg+xml'\n    case 'text/xml':\n    case 'application/xml':\n      // 4. If mimeType is an XML MIME type, then return \"application/xml\".\n      return 'application/xml'\n  }\n\n  // 2. If mimeType is a JSON MIME type, then return \"application/json\".\n  if (mimeType.subtype.endsWith('+json')) {\n    return 'application/json'\n  }\n\n  // 4. If mimeType is an XML MIME type, then return \"application/xml\".\n  if (mimeType.subtype.endsWith('+xml')) {\n    return 'application/xml'\n  }\n\n  // 5. If mimeType is supported by the user agent, then return mimeType\u2019s essence.\n  // Technically, node doesn't support any mimetypes.\n\n  // 6. Return the empty string.\n  return ''\n}\n\nmodule.exports = {\n  dataURLProcessor,\n  URLSerializer,\n  stringPercentDecode,\n  parseMIMEType,\n  collectAnHTTPQuotedString,\n  serializeAMimeType,\n  removeHTTPWhitespace,\n  minimizeSupportedMimeType,\n  HTTP_TOKEN_CODEPOINTS\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { types, inspect } = require('node:util')\nconst { markAsUncloneable } = require('node:worker_threads')\n\nconst UNDEFINED = 1\nconst BOOLEAN = 2\nconst STRING = 3\nconst SYMBOL = 4\nconst NUMBER = 5\nconst BIGINT = 6\nconst NULL = 7\nconst OBJECT = 8 // function and object\n\nconst FunctionPrototypeSymbolHasInstance = Function.call.bind(Function.prototype[Symbol.hasInstance])\n\n/** @type {import('../../../types/webidl').Webidl} */\nconst webidl = {\n  converters: {},\n  util: {},\n  errors: {},\n  is: {}\n}\n\n/**\n * @description Instantiate an error.\n *\n * @param {Object} opts\n * @param {string} opts.header\n * @param {string} opts.message\n * @returns {TypeError}\n */\nwebidl.errors.exception = function (message) {\n  return new TypeError(`${message.header}: ${message.message}`)\n}\n\n/**\n * @description Instantiate an error when conversion from one type to another has failed.\n *\n * @param {Object} opts\n * @param {string} opts.prefix\n * @param {string} opts.argument\n * @param {string[]} opts.types\n * @returns {TypeError}\n */\nwebidl.errors.conversionFailed = function (opts) {\n  const plural = opts.types.length === 1 ? '' : ' one of'\n  const message =\n    `${opts.argument} could not be converted to` +\n    `${plural}: ${opts.types.join(', ')}.`\n\n  return webidl.errors.exception({\n    header: opts.prefix,\n    message\n  })\n}\n\n/**\n * @description Instantiate an error when an invalid argument is provided\n *\n * @param {Object} context\n * @param {string} context.prefix\n * @param {string} context.value\n * @param {string} context.type\n * @returns {TypeError}\n */\nwebidl.errors.invalidArgument = function (context) {\n  return webidl.errors.exception({\n    header: context.prefix,\n    message: `\"${context.value}\" is an invalid ${context.type}.`\n  })\n}\n\n// https://webidl.spec.whatwg.org/#implements\nwebidl.brandCheck = function (V, I) {\n  if (!FunctionPrototypeSymbolHasInstance(I, V)) {\n    const err = new TypeError('Illegal invocation')\n    err.code = 'ERR_INVALID_THIS' // node compat.\n    throw err\n  }\n}\n\nwebidl.brandCheckMultiple = function (List) {\n  const prototypes = List.map((c) => webidl.util.MakeTypeAssertion(c))\n\n  return (V) => {\n    if (prototypes.every(typeCheck => !typeCheck(V))) {\n      const err = new TypeError('Illegal invocation')\n      err.code = 'ERR_INVALID_THIS' // node compat.\n      throw err\n    }\n  }\n}\n\nwebidl.argumentLengthCheck = function ({ length }, min, ctx) {\n  if (length < min) {\n    throw webidl.errors.exception({\n      message: `${min} argument${min !== 1 ? 's' : ''} required, ` +\n               `but${length ? ' only' : ''} ${length} found.`,\n      header: ctx\n    })\n  }\n}\n\nwebidl.illegalConstructor = function () {\n  throw webidl.errors.exception({\n    header: 'TypeError',\n    message: 'Illegal constructor'\n  })\n}\n\nwebidl.util.MakeTypeAssertion = function (I) {\n  return (O) => FunctionPrototypeSymbolHasInstance(I, O)\n}\n\n// https://tc39.es/ecma262/#sec-ecmascript-data-types-and-values\nwebidl.util.Type = function (V) {\n  switch (typeof V) {\n    case 'undefined': return UNDEFINED\n    case 'boolean': return BOOLEAN\n    case 'string': return STRING\n    case 'symbol': return SYMBOL\n    case 'number': return NUMBER\n    case 'bigint': return BIGINT\n    case 'function':\n    case 'object': {\n      if (V === null) {\n        return NULL\n      }\n\n      return OBJECT\n    }\n  }\n}\n\nwebidl.util.Types = {\n  UNDEFINED,\n  BOOLEAN,\n  STRING,\n  SYMBOL,\n  NUMBER,\n  BIGINT,\n  NULL,\n  OBJECT\n}\n\nwebidl.util.TypeValueToString = function (o) {\n  switch (webidl.util.Type(o)) {\n    case UNDEFINED: return 'Undefined'\n    case BOOLEAN: return 'Boolean'\n    case STRING: return 'String'\n    case SYMBOL: return 'Symbol'\n    case NUMBER: return 'Number'\n    case BIGINT: return 'BigInt'\n    case NULL: return 'Null'\n    case OBJECT: return 'Object'\n  }\n}\n\nwebidl.util.markAsUncloneable = markAsUncloneable\n\n// https://webidl.spec.whatwg.org/#abstract-opdef-converttoint\nwebidl.util.ConvertToInt = function (V, bitLength, signedness, flags) {\n  let upperBound\n  let lowerBound\n\n  // 1. If bitLength is 64, then:\n  if (bitLength === 64) {\n    // 1. Let upperBound be 2^53 \u2212 1.\n    upperBound = Math.pow(2, 53) - 1\n\n    // 2. If signedness is \"unsigned\", then let lowerBound be 0.\n    if (signedness === 'unsigned') {\n      lowerBound = 0\n    } else {\n      // 3. Otherwise let lowerBound be \u22122^53 + 1.\n      lowerBound = Math.pow(-2, 53) + 1\n    }\n  } else if (signedness === 'unsigned') {\n    // 2. Otherwise, if signedness is \"unsigned\", then:\n\n    // 1. Let lowerBound be 0.\n    lowerBound = 0\n\n    // 2. Let upperBound be 2^bitLength \u2212 1.\n    upperBound = Math.pow(2, bitLength) - 1\n  } else {\n    // 3. Otherwise:\n\n    // 1. Let lowerBound be -2^(bitLength \u2212 1).\n    lowerBound = -Math.pow(2, bitLength - 1)\n\n    // 2. Let upperBound be 2^(bitLength \u2212 1) \u2212 1.\n    upperBound = Math.pow(2, bitLength - 1) - 1\n  }\n\n  // 4. Let x be ? ToNumber(V).\n  let x = Number(V)\n\n  // 5. If x is \u22120, then set x to +0.\n  if (x === 0) {\n    x = 0\n  }\n\n  // 6. If the conversion is to an IDL type associated\n  //    with the [EnforceRange] extended attribute, then:\n  if (webidl.util.HasFlag(flags, webidl.attributes.EnforceRange)) {\n    // 1. If x is NaN, +\u221E, or \u2212\u221E, then throw a TypeError.\n    if (\n      Number.isNaN(x) ||\n      x === Number.POSITIVE_INFINITY ||\n      x === Number.NEGATIVE_INFINITY\n    ) {\n      throw webidl.errors.exception({\n        header: 'Integer conversion',\n        message: `Could not convert ${webidl.util.Stringify(V)} to an integer.`\n      })\n    }\n\n    // 2. Set x to IntegerPart(x).\n    x = webidl.util.IntegerPart(x)\n\n    // 3. If x < lowerBound or x > upperBound, then\n    //    throw a TypeError.\n    if (x < lowerBound || x > upperBound) {\n      throw webidl.errors.exception({\n        header: 'Integer conversion',\n        message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.`\n      })\n    }\n\n    // 4. Return x.\n    return x\n  }\n\n  // 7. If x is not NaN and the conversion is to an IDL\n  //    type associated with the [Clamp] extended\n  //    attribute, then:\n  if (!Number.isNaN(x) && webidl.util.HasFlag(flags, webidl.attributes.Clamp)) {\n    // 1. Set x to min(max(x, lowerBound), upperBound).\n    x = Math.min(Math.max(x, lowerBound), upperBound)\n\n    // 2. Round x to the nearest integer, choosing the\n    //    even integer if it lies halfway between two,\n    //    and choosing +0 rather than \u22120.\n    if (Math.floor(x) % 2 === 0) {\n      x = Math.floor(x)\n    } else {\n      x = Math.ceil(x)\n    }\n\n    // 3. Return x.\n    return x\n  }\n\n  // 8. If x is NaN, +0, +\u221E, or \u2212\u221E, then return +0.\n  if (\n    Number.isNaN(x) ||\n    (x === 0 && Object.is(0, x)) ||\n    x === Number.POSITIVE_INFINITY ||\n    x === Number.NEGATIVE_INFINITY\n  ) {\n    return 0\n  }\n\n  // 9. Set x to IntegerPart(x).\n  x = webidl.util.IntegerPart(x)\n\n  // 10. Set x to x modulo 2^bitLength.\n  x = x % Math.pow(2, bitLength)\n\n  // 11. If signedness is \"signed\" and x \u2265 2^(bitLength \u2212 1),\n  //    then return x \u2212 2^bitLength.\n  if (signedness === 'signed' && x >= Math.pow(2, bitLength - 1)) {\n    return x - Math.pow(2, bitLength)\n  }\n\n  // 12. Otherwise, return x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#abstract-opdef-integerpart\nwebidl.util.IntegerPart = function (n) {\n  // 1. Let r be floor(abs(n)).\n  const r = Math.floor(Math.abs(n))\n\n  // 2. If n < 0, then return -1 \u00D7 r.\n  if (n < 0) {\n    return -1 * r\n  }\n\n  // 3. Otherwise, return r.\n  return r\n}\n\nwebidl.util.Stringify = function (V) {\n  const type = webidl.util.Type(V)\n\n  switch (type) {\n    case SYMBOL:\n      return `Symbol(${V.description})`\n    case OBJECT:\n      return inspect(V)\n    case STRING:\n      return `\"${V}\"`\n    case BIGINT:\n      return `${V}n`\n    default:\n      return `${V}`\n  }\n}\n\nwebidl.util.IsResizableArrayBuffer = function (V) {\n  if (types.isArrayBuffer(V)) {\n    return V.resizable\n  }\n\n  if (types.isSharedArrayBuffer(V)) {\n    return V.growable\n  }\n\n  throw webidl.errors.exception({\n    header: 'IsResizableArrayBuffer',\n    message: `\"${webidl.util.Stringify(V)}\" is not an array buffer.`\n  })\n}\n\nwebidl.util.HasFlag = function (flags, attributes) {\n  return typeof flags === 'number' && (flags & attributes) === attributes\n}\n\n// https://webidl.spec.whatwg.org/#es-sequence\nwebidl.sequenceConverter = function (converter) {\n  return (V, prefix, argument, Iterable) => {\n    // 1. If Type(V) is not Object, throw a TypeError.\n    if (webidl.util.Type(V) !== OBJECT) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `${argument} (${webidl.util.Stringify(V)}) is not iterable.`\n      })\n    }\n\n    // 2. Let method be ? GetMethod(V, @@iterator).\n    /** @type {Generator} */\n    const method = typeof Iterable === 'function' ? Iterable() : V?.[Symbol.iterator]?.()\n    const seq = []\n    let index = 0\n\n    // 3. If method is undefined, throw a TypeError.\n    if (\n      method === undefined ||\n      typeof method.next !== 'function'\n    ) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `${argument} is not iterable.`\n      })\n    }\n\n    // https://webidl.spec.whatwg.org/#create-sequence-from-iterable\n    while (true) {\n      const { done, value } = method.next()\n\n      if (done) {\n        break\n      }\n\n      seq.push(converter(value, prefix, `${argument}[${index++}]`))\n    }\n\n    return seq\n  }\n}\n\n// https://webidl.spec.whatwg.org/#es-to-record\nwebidl.recordConverter = function (keyConverter, valueConverter) {\n  return (O, prefix, argument) => {\n    // 1. If Type(O) is not Object, throw a TypeError.\n    if (webidl.util.Type(O) !== OBJECT) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `${argument} (\"${webidl.util.TypeValueToString(O)}\") is not an Object.`\n      })\n    }\n\n    // 2. Let result be a new empty instance of record<K, V>.\n    const result = {}\n\n    if (!types.isProxy(O)) {\n      // 1. Let desc be ? O.[[GetOwnProperty]](key).\n      const keys = [...Object.getOwnPropertyNames(O), ...Object.getOwnPropertySymbols(O)]\n\n      for (const key of keys) {\n        const keyName = webidl.util.Stringify(key)\n\n        // 1. Let typedKey be key converted to an IDL value of type K.\n        const typedKey = keyConverter(key, prefix, `Key ${keyName} in ${argument}`)\n\n        // 2. Let value be ? Get(O, key).\n        // 3. Let typedValue be value converted to an IDL value of type V.\n        const typedValue = valueConverter(O[key], prefix, `${argument}[${keyName}]`)\n\n        // 4. Set result[typedKey] to typedValue.\n        result[typedKey] = typedValue\n      }\n\n      // 5. Return result.\n      return result\n    }\n\n    // 3. Let keys be ? O.[[OwnPropertyKeys]]().\n    const keys = Reflect.ownKeys(O)\n\n    // 4. For each key of keys.\n    for (const key of keys) {\n      // 1. Let desc be ? O.[[GetOwnProperty]](key).\n      const desc = Reflect.getOwnPropertyDescriptor(O, key)\n\n      // 2. If desc is not undefined and desc.[[Enumerable]] is true:\n      if (desc?.enumerable) {\n        // 1. Let typedKey be key converted to an IDL value of type K.\n        const typedKey = keyConverter(key, prefix, argument)\n\n        // 2. Let value be ? Get(O, key).\n        // 3. Let typedValue be value converted to an IDL value of type V.\n        const typedValue = valueConverter(O[key], prefix, argument)\n\n        // 4. Set result[typedKey] to typedValue.\n        result[typedKey] = typedValue\n      }\n    }\n\n    // 5. Return result.\n    return result\n  }\n}\n\nwebidl.interfaceConverter = function (TypeCheck, name) {\n  return (V, prefix, argument) => {\n    if (!TypeCheck(V)) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `Expected ${argument} (\"${webidl.util.Stringify(V)}\") to be an instance of ${name}.`\n      })\n    }\n\n    return V\n  }\n}\n\nwebidl.dictionaryConverter = function (converters) {\n  // \"For each dictionary member member declared on dictionary, in lexicographical order:\"\n  converters.sort((a, b) => (a.key > b.key) - (a.key < b.key))\n\n  return (dictionary, prefix, argument) => {\n    const dict = {}\n\n    if (dictionary != null && webidl.util.Type(dictionary) !== OBJECT) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `Expected ${dictionary} to be one of: Null, Undefined, Object.`\n      })\n    }\n\n    for (const options of converters) {\n      const { key, defaultValue, required, converter } = options\n\n      if (required === true) {\n        if (dictionary == null || !Object.hasOwn(dictionary, key)) {\n          throw webidl.errors.exception({\n            header: prefix,\n            message: `Missing required key \"${key}\".`\n          })\n        }\n      }\n\n      let value = dictionary?.[key]\n      const hasDefault = defaultValue !== undefined\n\n      // Only use defaultValue if value is undefined and\n      // a defaultValue options was provided.\n      if (hasDefault && value === undefined) {\n        value = defaultValue()\n      }\n\n      // A key can be optional and have no default value.\n      // When this happens, do not perform a conversion,\n      // and do not assign the key a value.\n      if (required || hasDefault || value !== undefined) {\n        value = converter(value, prefix, `${argument}.${key}`)\n\n        if (\n          options.allowedValues &&\n          !options.allowedValues.includes(value)\n        ) {\n          throw webidl.errors.exception({\n            header: prefix,\n            message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(', ')}.`\n          })\n        }\n\n        dict[key] = value\n      }\n    }\n\n    return dict\n  }\n}\n\nwebidl.nullableConverter = function (converter) {\n  return (V, prefix, argument) => {\n    if (V === null) {\n      return V\n    }\n\n    return converter(V, prefix, argument)\n  }\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nwebidl.is.USVString = function (value) {\n  return (\n    typeof value === 'string' &&\n    value.isWellFormed()\n  )\n}\n\nwebidl.is.ReadableStream = webidl.util.MakeTypeAssertion(ReadableStream)\nwebidl.is.Blob = webidl.util.MakeTypeAssertion(Blob)\nwebidl.is.URLSearchParams = webidl.util.MakeTypeAssertion(URLSearchParams)\nwebidl.is.File = webidl.util.MakeTypeAssertion(File)\nwebidl.is.URL = webidl.util.MakeTypeAssertion(URL)\nwebidl.is.AbortSignal = webidl.util.MakeTypeAssertion(AbortSignal)\nwebidl.is.MessagePort = webidl.util.MakeTypeAssertion(MessagePort)\n\nwebidl.is.BufferSource = function (V) {\n  return types.isArrayBuffer(V) || (\n    ArrayBuffer.isView(V) &&\n    types.isArrayBuffer(V.buffer)\n  )\n}\n\n// https://webidl.spec.whatwg.org/#dfn-get-buffer-source-copy\nwebidl.util.getCopyOfBytesHeldByBufferSource = function (bufferSource) {\n  // 1. Let jsBufferSource be the result of converting bufferSource to a JavaScript value.\n  const jsBufferSource = bufferSource\n\n  // 2. Let jsArrayBuffer be jsBufferSource.\n  let jsArrayBuffer = jsBufferSource\n\n  // 3. Let offset be 0.\n  let offset = 0\n\n  // 4. Let length be 0.\n  let length = 0\n\n  // 5. If jsBufferSource has a [[ViewedArrayBuffer]] internal slot, then:\n  if (types.isTypedArray(jsBufferSource) || types.isDataView(jsBufferSource)) {\n    // 5.1. Set jsArrayBuffer to jsBufferSource.[[ViewedArrayBuffer]].\n    jsArrayBuffer = jsBufferSource.buffer\n\n    // 5.2. Set offset to jsBufferSource.[[ByteOffset]].\n    offset = jsBufferSource.byteOffset\n\n    // 5.3. Set length to jsBufferSource.[[ByteLength]].\n    length = jsBufferSource.byteLength\n  } else {\n    // 6. Otherwise:\n\n    // 6.1. Assert: jsBufferSource is an ArrayBuffer or SharedArrayBuffer object.\n    assert(types.isAnyArrayBuffer(jsBufferSource))\n\n    // 6.2. Set length to jsBufferSource.[[ArrayBufferByteLength]].\n    length = jsBufferSource.byteLength\n  }\n\n  // 7. If IsDetachedBuffer(jsArrayBuffer) is true, then return the empty byte sequence.\n  if (jsArrayBuffer.detached) {\n    return new Uint8Array(0)\n  }\n\n  // 8. Let bytes be a new byte sequence of length equal to length.\n  const bytes = new Uint8Array(length)\n\n  // 9. For i in the range offset to offset + length \u2212 1, inclusive,\n  //    set bytes[i \u2212 offset] to GetValueFromBuffer(jsArrayBuffer, i, Uint8, true, Unordered).\n  const view = new Uint8Array(jsArrayBuffer, offset, length)\n  bytes.set(view)\n\n  // 10. Return bytes.\n  return bytes\n}\n\n// https://webidl.spec.whatwg.org/#es-DOMString\nwebidl.converters.DOMString = function (V, prefix, argument, flags) {\n  // 1. If V is null and the conversion is to an IDL type\n  //    associated with the [LegacyNullToEmptyString]\n  //    extended attribute, then return the DOMString value\n  //    that represents the empty string.\n  if (V === null && webidl.util.HasFlag(flags, webidl.attributes.LegacyNullToEmptyString)) {\n    return ''\n  }\n\n  // 2. Let x be ? ToString(V).\n  if (typeof V === 'symbol') {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} is a symbol, which cannot be converted to a DOMString.`\n    })\n  }\n\n  // 3. Return the IDL DOMString value that represents the\n  //    same sequence of code units as the one the\n  //    ECMAScript String value x represents.\n  return String(V)\n}\n\n// https://webidl.spec.whatwg.org/#es-ByteString\nwebidl.converters.ByteString = function (V, prefix, argument) {\n  // 1. Let x be ? ToString(V).\n  if (typeof V === 'symbol') {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} is a symbol, which cannot be converted to a ByteString.`\n    })\n  }\n\n  const x = String(V)\n\n  // 2. If the value of any element of x is greater than\n  //    255, then throw a TypeError.\n  for (let index = 0; index < x.length; index++) {\n    if (x.charCodeAt(index) > 255) {\n      throw new TypeError(\n        'Cannot convert argument to a ByteString because the character at ' +\n        `index ${index} has a value of ${x.charCodeAt(index)} which is greater than 255.`\n      )\n    }\n  }\n\n  // 3. Return an IDL ByteString value whose length is the\n  //    length of x, and where the value of each element is\n  //    the value of the corresponding element of x.\n  return x\n}\n\n/**\n * @param {unknown} value\n * @returns {string}\n * @see https://webidl.spec.whatwg.org/#es-USVString\n */\nwebidl.converters.USVString = function (value) {\n  // TODO: rewrite this so we can control the errors thrown\n  if (typeof value === 'string') {\n    return value.toWellFormed()\n  }\n  return `${value}`.toWellFormed()\n}\n\n// https://webidl.spec.whatwg.org/#es-boolean\nwebidl.converters.boolean = function (V) {\n  // 1. Let x be the result of computing ToBoolean(V).\n  // https://262.ecma-international.org/10.0/index.html#table-10\n  const x = Boolean(V)\n\n  // 2. Return the IDL boolean value that is the one that represents\n  //    the same truth value as the ECMAScript Boolean value x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-any\nwebidl.converters.any = function (V) {\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#es-long-long\nwebidl.converters['long long'] = function (V, prefix, argument) {\n  // 1. Let x be ? ConvertToInt(V, 64, \"signed\").\n  const x = webidl.util.ConvertToInt(V, 64, 'signed', 0, prefix, argument)\n\n  // 2. Return the IDL long long value that represents\n  //    the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-unsigned-long-long\nwebidl.converters['unsigned long long'] = function (V, prefix, argument) {\n  // 1. Let x be ? ConvertToInt(V, 64, \"unsigned\").\n  const x = webidl.util.ConvertToInt(V, 64, 'unsigned', 0, prefix, argument)\n\n  // 2. Return the IDL unsigned long long value that\n  //    represents the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-unsigned-long\nwebidl.converters['unsigned long'] = function (V, prefix, argument) {\n  // 1. Let x be ? ConvertToInt(V, 32, \"unsigned\").\n  const x = webidl.util.ConvertToInt(V, 32, 'unsigned', 0, prefix, argument)\n\n  // 2. Return the IDL unsigned long value that\n  //    represents the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-unsigned-short\nwebidl.converters['unsigned short'] = function (V, prefix, argument, flags) {\n  // 1. Let x be ? ConvertToInt(V, 16, \"unsigned\").\n  const x = webidl.util.ConvertToInt(V, 16, 'unsigned', flags, prefix, argument)\n\n  // 2. Return the IDL unsigned short value that represents\n  //    the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#idl-ArrayBuffer\nwebidl.converters.ArrayBuffer = function (V, prefix, argument, flags) {\n  // 1. If V is not an Object, or V does not have an\n  //    [[ArrayBufferData]] internal slot, then throw a\n  //    TypeError.\n  // 2. If IsSharedArrayBuffer(V) is true, then throw a\n  //    TypeError.\n  // see: https://tc39.es/ecma262/#sec-properties-of-the-arraybuffer-instances\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isArrayBuffer(V)\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['ArrayBuffer']\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V) is true, then throw a\n  //    TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a resizable ArrayBuffer.`\n    })\n  }\n\n  // 4. Return the IDL ArrayBuffer value that is a\n  //    reference to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#idl-SharedArrayBuffer\nwebidl.converters.SharedArrayBuffer = function (V, prefix, argument, flags) {\n  // 1. If V is not an Object, or V does not have an\n  //    [[ArrayBufferData]] internal slot, then throw a\n  //    TypeError.\n  // 2. If IsSharedArrayBuffer(V) is false, then throw a\n  //    TypeError.\n  // see: https://tc39.es/ecma262/#sec-properties-of-the-sharedarraybuffer-instances\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isSharedArrayBuffer(V)\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['SharedArrayBuffer']\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V) is true, then throw a\n  //    TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a resizable SharedArrayBuffer.`\n    })\n  }\n\n  // 4. Return the IDL SharedArrayBuffer value that is a\n  //    reference to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#dfn-typed-array-type\nwebidl.converters.TypedArray = function (V, T, prefix, argument, flags) {\n  // 1. Let T be the IDL type V is being converted to.\n\n  // 2. If Type(V) is not Object, or V does not have a\n  //    [[TypedArrayName]] internal slot with a value\n  //    equal to T\u2019s name, then throw a TypeError.\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isTypedArray(V) ||\n    V.constructor.name !== T.name\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: [T.name]\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowShared] extended attribute, and\n  //    IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is\n  //    true, then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowShared) && types.isSharedArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a shared array buffer.`\n    })\n  }\n\n  // 4. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is\n  //    true, then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a resizable array buffer.`\n    })\n  }\n\n  // 5. Return the IDL value of type T that is a reference\n  //    to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#idl-DataView\nwebidl.converters.DataView = function (V, prefix, argument, flags) {\n  // 1. If Type(V) is not Object, or V does not have a\n  //    [[DataView]] internal slot, then throw a TypeError.\n  if (webidl.util.Type(V) !== OBJECT || !types.isDataView(V)) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['DataView']\n    })\n  }\n\n  // 2. If the conversion is not to an IDL type associated\n  //    with the [AllowShared] extended attribute, and\n  //    IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is true,\n  //    then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowShared) && types.isSharedArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a shared array buffer.`\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is\n  //    true, then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a resizable array buffer.`\n    })\n  }\n\n  // 4. Return the IDL DataView value that is a reference\n  //    to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#ArrayBufferView\nwebidl.converters.ArrayBufferView = function (V, prefix, argument, flags) {\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isArrayBufferView(V)\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['ArrayBufferView']\n    })\n  }\n\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowShared) && types.isSharedArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a shared array buffer.`\n    })\n  }\n\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a resizable array buffer.`\n    })\n  }\n\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#BufferSource\nwebidl.converters.BufferSource = function (V, prefix, argument, flags) {\n  if (types.isArrayBuffer(V)) {\n    return webidl.converters.ArrayBuffer(V, prefix, argument, flags)\n  }\n\n  if (types.isArrayBufferView(V)) {\n    flags &= ~webidl.attributes.AllowShared\n\n    return webidl.converters.ArrayBufferView(V, prefix, argument, flags)\n  }\n\n  // Make this explicit for easier debugging\n  if (types.isSharedArrayBuffer(V)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a SharedArrayBuffer.`\n    })\n  }\n\n  throw webidl.errors.conversionFailed({\n    prefix,\n    argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n    types: ['ArrayBuffer', 'ArrayBufferView']\n  })\n}\n\n// https://webidl.spec.whatwg.org/#AllowSharedBufferSource\nwebidl.converters.AllowSharedBufferSource = function (V, prefix, argument, flags) {\n  if (types.isArrayBuffer(V)) {\n    return webidl.converters.ArrayBuffer(V, prefix, argument, flags)\n  }\n\n  if (types.isSharedArrayBuffer(V)) {\n    return webidl.converters.SharedArrayBuffer(V, prefix, argument, flags)\n  }\n\n  if (types.isArrayBufferView(V)) {\n    flags |= webidl.attributes.AllowShared\n    return webidl.converters.ArrayBufferView(V, prefix, argument, flags)\n  }\n\n  throw webidl.errors.conversionFailed({\n    prefix,\n    argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n    types: ['ArrayBuffer', 'SharedArrayBuffer', 'ArrayBufferView']\n  })\n}\n\nwebidl.converters['sequence<ByteString>'] = webidl.sequenceConverter(\n  webidl.converters.ByteString\n)\n\nwebidl.converters['sequence<sequence<ByteString>>'] = webidl.sequenceConverter(\n  webidl.converters['sequence<ByteString>']\n)\n\nwebidl.converters['record<ByteString, ByteString>'] = webidl.recordConverter(\n  webidl.converters.ByteString,\n  webidl.converters.ByteString\n)\n\nwebidl.converters.Blob = webidl.interfaceConverter(webidl.is.Blob, 'Blob')\n\nwebidl.converters.AbortSignal = webidl.interfaceConverter(\n  webidl.is.AbortSignal,\n  'AbortSignal'\n)\n\n/**\n * [LegacyTreatNonObjectAsNull]\n * callback EventHandlerNonNull = any (Event event);\n * typedef EventHandlerNonNull? EventHandler;\n * @param {*} V\n */\nwebidl.converters.EventHandlerNonNull = function (V) {\n  if (webidl.util.Type(V) !== OBJECT) {\n    return null\n  }\n\n  // [I]f the value is not an object, it will be converted to null, and if the value is not callable,\n  // it will be converted to a callback function value that does nothing when called.\n  if (typeof V === 'function') {\n    return V\n  }\n\n  return () => {}\n}\n\nwebidl.attributes = {\n  Clamp: 1 << 0,\n  EnforceRange: 1 << 1,\n  AllowShared: 1 << 2,\n  AllowResizable: 1 << 3,\n  LegacyNullToEmptyString: 1 << 4\n}\n\nmodule.exports = {\n  webidl\n}\n", "'use strict'\n\nconst { Transform } = require('node:stream')\nconst zlib = require('node:zlib')\nconst { redirectStatusSet, referrerPolicyTokens, badPortsSet } = require('./constants')\nconst { getGlobalOrigin } = require('./global')\nconst { collectAnHTTPQuotedString, parseMIMEType } = require('./data-url')\nconst { performance } = require('node:perf_hooks')\nconst { ReadableStreamFrom, isValidHTTPToken, normalizedMethodRecordsBase } = require('../../core/util')\nconst assert = require('node:assert')\nconst { isUint8Array } = require('node:util/types')\nconst { webidl } = require('../webidl')\nconst { isomorphicEncode, collectASequenceOfCodePoints, removeChars } = require('../infra')\n\nfunction responseURL (response) {\n  // https://fetch.spec.whatwg.org/#responses\n  // A response has an associated URL. It is a pointer to the last URL\n  // in response\u2019s URL list and null if response\u2019s URL list is empty.\n  const urlList = response.urlList\n  const length = urlList.length\n  return length === 0 ? null : urlList[length - 1].toString()\n}\n\n// https://fetch.spec.whatwg.org/#concept-response-location-url\nfunction responseLocationURL (response, requestFragment) {\n  // 1. If response\u2019s status is not a redirect status, then return null.\n  if (!redirectStatusSet.has(response.status)) {\n    return null\n  }\n\n  // 2. Let location be the result of extracting header list values given\n  // `Location` and response\u2019s header list.\n  let location = response.headersList.get('location', true)\n\n  // 3. If location is a header value, then set location to the result of\n  //    parsing location with response\u2019s URL.\n  if (location !== null && isValidHeaderValue(location)) {\n    if (!isValidEncodedURL(location)) {\n      // Some websites respond location header in UTF-8 form without encoding them as ASCII\n      // and major browsers redirect them to correctly UTF-8 encoded addresses.\n      // Here, we handle that behavior in the same way.\n      location = normalizeBinaryStringToUtf8(location)\n    }\n    location = new URL(location, responseURL(response))\n  }\n\n  // 4. If location is a URL whose fragment is null, then set location\u2019s\n  // fragment to requestFragment.\n  if (location && !location.hash) {\n    location.hash = requestFragment\n  }\n\n  // 5. Return location.\n  return location\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc1738#section-2.2\n * @param {string} url\n * @returns {boolean}\n */\nfunction isValidEncodedURL (url) {\n  for (let i = 0; i < url.length; ++i) {\n    const code = url.charCodeAt(i)\n\n    if (\n      code > 0x7E || // Non-US-ASCII + DEL\n      code < 0x20 // Control characters NUL - US\n    ) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * If string contains non-ASCII characters, assumes it's UTF-8 encoded and decodes it.\n * Since UTF-8 is a superset of ASCII, this will work for ASCII strings as well.\n * @param {string} value\n * @returns {string}\n */\nfunction normalizeBinaryStringToUtf8 (value) {\n  return Buffer.from(value, 'binary').toString('utf8')\n}\n\n/** @returns {URL} */\nfunction requestCurrentURL (request) {\n  return request.urlList[request.urlList.length - 1]\n}\n\nfunction requestBadPort (request) {\n  // 1. Let url be request\u2019s current URL.\n  const url = requestCurrentURL(request)\n\n  // 2. If url\u2019s scheme is an HTTP(S) scheme and url\u2019s port is a bad port,\n  // then return blocked.\n  if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) {\n    return 'blocked'\n  }\n\n  // 3. Return allowed.\n  return 'allowed'\n}\n\nfunction isErrorLike (object) {\n  return object instanceof Error || (\n    object?.constructor?.name === 'Error' ||\n    object?.constructor?.name === 'DOMException'\n  )\n}\n\n// Check whether |statusText| is a ByteString and\n// matches the Reason-Phrase token production.\n// RFC 2616: https://tools.ietf.org/html/rfc2616\n// RFC 7230: https://tools.ietf.org/html/rfc7230\n// \"reason-phrase = *( HTAB / SP / VCHAR / obs-text )\"\n// https://github.com/chromium/chromium/blob/94.0.4604.1/third_party/blink/renderer/core/fetch/response.cc#L116\nfunction isValidReasonPhrase (statusText) {\n  for (let i = 0; i < statusText.length; ++i) {\n    const c = statusText.charCodeAt(i)\n    if (\n      !(\n        (\n          c === 0x09 || // HTAB\n          (c >= 0x20 && c <= 0x7e) || // SP / VCHAR\n          (c >= 0x80 && c <= 0xff)\n        ) // obs-text\n      )\n    ) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#header-name\n * @param {string} potentialValue\n */\nconst isValidHeaderName = isValidHTTPToken\n\n/**\n * @see https://fetch.spec.whatwg.org/#header-value\n * @param {string} potentialValue\n */\nfunction isValidHeaderValue (potentialValue) {\n  // - Has no leading or trailing HTTP tab or space bytes.\n  // - Contains no 0x00 (NUL) or HTTP newline bytes.\n  return (\n    potentialValue[0] === '\\t' ||\n    potentialValue[0] === ' ' ||\n    potentialValue[potentialValue.length - 1] === '\\t' ||\n    potentialValue[potentialValue.length - 1] === ' ' ||\n    potentialValue.includes('\\n') ||\n    potentialValue.includes('\\r') ||\n    potentialValue.includes('\\0')\n  ) === false\n}\n\n/**\n * Parse a referrer policy from a Referrer-Policy header\n * @see https://w3c.github.io/webappsec-referrer-policy/#parse-referrer-policy-from-header\n */\nfunction parseReferrerPolicy (actualResponse) {\n  // 1. Let policy-tokens be the result of extracting header list values given `Referrer-Policy` and response\u2019s header list.\n  const policyHeader = (actualResponse.headersList.get('referrer-policy', true) ?? '').split(',')\n\n  // 2. Let policy be the empty string.\n  let policy = ''\n\n  // 3. For each token in policy-tokens, if token is a referrer policy and token is not the empty string, then set policy to token.\n\n  // Note: As the referrer-policy can contain multiple policies\n  // separated by comma, we need to loop through all of them\n  // and pick the first valid one.\n  // Ref: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy#specify_a_fallback_policy\n  if (policyHeader.length) {\n    // The right-most policy takes precedence.\n    // The left-most policy is the fallback.\n    for (let i = policyHeader.length; i !== 0; i--) {\n      const token = policyHeader[i - 1].trim()\n      if (referrerPolicyTokens.has(token)) {\n        policy = token\n        break\n      }\n    }\n  }\n\n  // 4. Return policy.\n  return policy\n}\n\n/**\n * Given a request request and a response actualResponse, this algorithm\n * updates request\u2019s referrer policy according to the Referrer-Policy\n * header (if any) in actualResponse.\n * @see https://w3c.github.io/webappsec-referrer-policy/#set-requests-referrer-policy-on-redirect\n * @param {import('./request').Request} request\n * @param {import('./response').Response} actualResponse\n */\nfunction setRequestReferrerPolicyOnRedirect (request, actualResponse) {\n  // 1. Let policy be the result of executing \u00A7 8.1 Parse a referrer policy\n  // from a Referrer-Policy header on actualResponse.\n  const policy = parseReferrerPolicy(actualResponse)\n\n  // 2. If policy is not the empty string, then set request\u2019s referrer policy to policy.\n  if (policy !== '') {\n    request.referrerPolicy = policy\n  }\n}\n\n// https://fetch.spec.whatwg.org/#cross-origin-resource-policy-check\nfunction crossOriginResourcePolicyCheck () {\n  // TODO\n  return 'allowed'\n}\n\n// https://fetch.spec.whatwg.org/#concept-cors-check\nfunction corsCheck () {\n  // TODO\n  return 'success'\n}\n\n// https://fetch.spec.whatwg.org/#concept-tao-check\nfunction TAOCheck () {\n  // TODO\n  return 'success'\n}\n\nfunction appendFetchMetadata (httpRequest) {\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-dest-header\n  //  TODO\n\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-mode-header\n\n  //  1. Assert: r\u2019s url is a potentially trustworthy URL.\n  //  TODO\n\n  //  2. Let header be a Structured Header whose value is a token.\n  let header = null\n\n  //  3. Set header\u2019s value to r\u2019s mode.\n  header = httpRequest.mode\n\n  //  4. Set a structured field value `Sec-Fetch-Mode`/header in r\u2019s header list.\n  httpRequest.headersList.set('sec-fetch-mode', header, true)\n\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-site-header\n  //  TODO\n\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-user-header\n  //  TODO\n}\n\n// https://fetch.spec.whatwg.org/#append-a-request-origin-header\nfunction appendRequestOriginHeader (request) {\n  // 1. Let serializedOrigin be the result of byte-serializing a request origin\n  //    with request.\n  // TODO: implement \"byte-serializing a request origin\"\n  let serializedOrigin = request.origin\n\n  // - \"'client' is changed to an origin during fetching.\"\n  //   This doesn't happen in undici (in most cases) because undici, by default,\n  //   has no concept of origin.\n  // - request.origin can also be set to request.client.origin (client being\n  //   an environment settings object), which is undefined without using\n  //   setGlobalOrigin.\n  if (serializedOrigin === 'client' || serializedOrigin === undefined) {\n    return\n  }\n\n  // 2. If request\u2019s response tainting is \"cors\" or request\u2019s mode is \"websocket\",\n  //    then append (`Origin`, serializedOrigin) to request\u2019s header list.\n  // 3. Otherwise, if request\u2019s method is neither `GET` nor `HEAD`, then:\n  if (request.responseTainting === 'cors' || request.mode === 'websocket') {\n    request.headersList.append('origin', serializedOrigin, true)\n  } else if (request.method !== 'GET' && request.method !== 'HEAD') {\n    // 1. Switch on request\u2019s referrer policy:\n    switch (request.referrerPolicy) {\n      case 'no-referrer':\n        // Set serializedOrigin to `null`.\n        serializedOrigin = null\n        break\n      case 'no-referrer-when-downgrade':\n      case 'strict-origin':\n      case 'strict-origin-when-cross-origin':\n        // If request\u2019s origin is a tuple origin, its scheme is \"https\", and\n        // request\u2019s current URL\u2019s scheme is not \"https\", then set\n        // serializedOrigin to `null`.\n        if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) {\n          serializedOrigin = null\n        }\n        break\n      case 'same-origin':\n        // If request\u2019s origin is not same origin with request\u2019s current URL\u2019s\n        // origin, then set serializedOrigin to `null`.\n        if (!sameOrigin(request, requestCurrentURL(request))) {\n          serializedOrigin = null\n        }\n        break\n      default:\n        // Do nothing.\n    }\n\n    // 2. Append (`Origin`, serializedOrigin) to request\u2019s header list.\n    request.headersList.append('origin', serializedOrigin, true)\n  }\n}\n\n// https://w3c.github.io/hr-time/#dfn-coarsen-time\nfunction coarsenTime (timestamp, crossOriginIsolatedCapability) {\n  // TODO\n  return timestamp\n}\n\n// https://fetch.spec.whatwg.org/#clamp-and-coarsen-connection-timing-info\nfunction clampAndCoarsenConnectionTimingInfo (connectionTimingInfo, defaultStartTime, crossOriginIsolatedCapability) {\n  if (!connectionTimingInfo?.startTime || connectionTimingInfo.startTime < defaultStartTime) {\n    return {\n      domainLookupStartTime: defaultStartTime,\n      domainLookupEndTime: defaultStartTime,\n      connectionStartTime: defaultStartTime,\n      connectionEndTime: defaultStartTime,\n      secureConnectionStartTime: defaultStartTime,\n      ALPNNegotiatedProtocol: connectionTimingInfo?.ALPNNegotiatedProtocol\n    }\n  }\n\n  return {\n    domainLookupStartTime: coarsenTime(connectionTimingInfo.domainLookupStartTime, crossOriginIsolatedCapability),\n    domainLookupEndTime: coarsenTime(connectionTimingInfo.domainLookupEndTime, crossOriginIsolatedCapability),\n    connectionStartTime: coarsenTime(connectionTimingInfo.connectionStartTime, crossOriginIsolatedCapability),\n    connectionEndTime: coarsenTime(connectionTimingInfo.connectionEndTime, crossOriginIsolatedCapability),\n    secureConnectionStartTime: coarsenTime(connectionTimingInfo.secureConnectionStartTime, crossOriginIsolatedCapability),\n    ALPNNegotiatedProtocol: connectionTimingInfo.ALPNNegotiatedProtocol\n  }\n}\n\n// https://w3c.github.io/hr-time/#dfn-coarsened-shared-current-time\nfunction coarsenedSharedCurrentTime (crossOriginIsolatedCapability) {\n  return coarsenTime(performance.now(), crossOriginIsolatedCapability)\n}\n\n// https://fetch.spec.whatwg.org/#create-an-opaque-timing-info\nfunction createOpaqueTimingInfo (timingInfo) {\n  return {\n    startTime: timingInfo.startTime ?? 0,\n    redirectStartTime: 0,\n    redirectEndTime: 0,\n    postRedirectStartTime: timingInfo.startTime ?? 0,\n    finalServiceWorkerStartTime: 0,\n    finalNetworkResponseStartTime: 0,\n    finalNetworkRequestStartTime: 0,\n    endTime: 0,\n    encodedBodySize: 0,\n    decodedBodySize: 0,\n    finalConnectionTimingInfo: null\n  }\n}\n\n// https://html.spec.whatwg.org/multipage/origin.html#policy-container\nfunction makePolicyContainer () {\n  // Note: the fetch spec doesn't make use of embedder policy or CSP list\n  return {\n    referrerPolicy: 'strict-origin-when-cross-origin'\n  }\n}\n\n// https://html.spec.whatwg.org/multipage/origin.html#clone-a-policy-container\nfunction clonePolicyContainer (policyContainer) {\n  return {\n    referrerPolicy: policyContainer.referrerPolicy\n  }\n}\n\n/**\n * Determine request\u2019s Referrer\n *\n * @see https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer\n */\nfunction determineRequestsReferrer (request) {\n  // Given a request request, we can determine the correct referrer information\n  // to send by examining its referrer policy as detailed in the following\n  // steps, which return either no referrer or a URL:\n\n  // 1. Let policy be request's referrer policy.\n  const policy = request.referrerPolicy\n\n  // Note: policy cannot (shouldn't) be null or an empty string.\n  assert(policy)\n\n  // 2. Let environment be request\u2019s client.\n\n  let referrerSource = null\n\n  // 3. Switch on request\u2019s referrer:\n\n  // \"client\"\n  if (request.referrer === 'client') {\n    // Note: node isn't a browser and doesn't implement document/iframes,\n    // so we bypass this step and replace it with our own.\n\n    const globalOrigin = getGlobalOrigin()\n\n    if (!globalOrigin || globalOrigin.origin === 'null') {\n      return 'no-referrer'\n    }\n\n    // Note: we need to clone it as it's mutated\n    referrerSource = new URL(globalOrigin)\n  // a URL\n  } else if (webidl.is.URL(request.referrer)) {\n    // Let referrerSource be request\u2019s referrer.\n    referrerSource = request.referrer\n  }\n\n  // 4. Let request\u2019s referrerURL be the result of stripping referrerSource for\n  //    use as a referrer.\n  let referrerURL = stripURLForReferrer(referrerSource)\n\n  // 5. Let referrerOrigin be the result of stripping referrerSource for use as\n  //    a referrer, with the origin-only flag set to true.\n  const referrerOrigin = stripURLForReferrer(referrerSource, true)\n\n  // 6. If the result of serializing referrerURL is a string whose length is\n  //    greater than 4096, set referrerURL to referrerOrigin.\n  if (referrerURL.toString().length > 4096) {\n    referrerURL = referrerOrigin\n  }\n\n  // 7. The user agent MAY alter referrerURL or referrerOrigin at this point\n  // to enforce arbitrary policy considerations in the interests of minimizing\n  // data leakage. For example, the user agent could strip the URL down to an\n  // origin, modify its host, replace it with an empty string, etc.\n\n  // 8. Execute the switch statements corresponding to the value of policy:\n  switch (policy) {\n    case 'no-referrer':\n      // Return no referrer\n      return 'no-referrer'\n    case 'origin':\n      // Return referrerOrigin\n      if (referrerOrigin != null) {\n        return referrerOrigin\n      }\n      return stripURLForReferrer(referrerSource, true)\n    case 'unsafe-url':\n      // Return referrerURL.\n      return referrerURL\n    case 'strict-origin': {\n      const currentURL = requestCurrentURL(request)\n\n      // 1. If referrerURL is a potentially trustworthy URL and request\u2019s\n      //    current URL is not a potentially trustworthy URL, then return no\n      //    referrer.\n      if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {\n        return 'no-referrer'\n      }\n      // 2. Return referrerOrigin\n      return referrerOrigin\n    }\n    case 'strict-origin-when-cross-origin': {\n      const currentURL = requestCurrentURL(request)\n\n      // 1. If the origin of referrerURL and the origin of request\u2019s current\n      //    URL are the same, then return referrerURL.\n      if (sameOrigin(referrerURL, currentURL)) {\n        return referrerURL\n      }\n\n      // 2. If referrerURL is a potentially trustworthy URL and request\u2019s\n      //    current URL is not a potentially trustworthy URL, then return no\n      //    referrer.\n      if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {\n        return 'no-referrer'\n      }\n\n      // 3. Return referrerOrigin.\n      return referrerOrigin\n    }\n    case 'same-origin':\n      // 1. If the origin of referrerURL and the origin of request\u2019s current\n      // URL are the same, then return referrerURL.\n      if (sameOrigin(request, referrerURL)) {\n        return referrerURL\n      }\n      // 2. Return no referrer.\n      return 'no-referrer'\n    case 'origin-when-cross-origin':\n      // 1. If the origin of referrerURL and the origin of request\u2019s current\n      // URL are the same, then return referrerURL.\n      if (sameOrigin(request, referrerURL)) {\n        return referrerURL\n      }\n      // 2. Return referrerOrigin.\n      return referrerOrigin\n    case 'no-referrer-when-downgrade': {\n      const currentURL = requestCurrentURL(request)\n\n      // 1. If referrerURL is a potentially trustworthy URL and request\u2019s\n      //    current URL is not a potentially trustworthy URL, then return no\n      //    referrer.\n      if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {\n        return 'no-referrer'\n      }\n      // 2. Return referrerURL.\n      return referrerURL\n    }\n  }\n}\n\n/**\n * Certain portions of URLs must not be included when sending a URL as the\n * value of a `Referer` header: a URLs fragment, username, and password\n * components must be stripped from the URL before it\u2019s sent out. This\n * algorithm accepts a origin-only flag, which defaults to false. If set to\n * true, the algorithm will additionally remove the URL\u2019s path and query\n * components, leaving only the scheme, host, and port.\n *\n * @see https://w3c.github.io/webappsec-referrer-policy/#strip-url\n * @param {URL} url\n * @param {boolean} [originOnly=false]\n */\nfunction stripURLForReferrer (url, originOnly = false) {\n  // 1. Assert: url is a URL.\n  assert(webidl.is.URL(url))\n\n  // Note: Create a new URL instance to avoid mutating the original URL.\n  url = new URL(url)\n\n  // 2. If url\u2019s scheme is a local scheme, then return no referrer.\n  if (urlIsLocal(url)) {\n    return 'no-referrer'\n  }\n\n  // 3. Set url\u2019s username to the empty string.\n  url.username = ''\n\n  // 4. Set url\u2019s password to the empty string.\n  url.password = ''\n\n  // 5. Set url\u2019s fragment to null.\n  url.hash = ''\n\n  // 6. If the origin-only flag is true, then:\n  if (originOnly === true) {\n    // 1. Set url\u2019s path to \u00AB the empty string \u00BB.\n    url.pathname = ''\n\n    // 2. Set url\u2019s query to null.\n    url.search = ''\n  }\n\n  // 7. Return url.\n  return url\n}\n\nconst isPotentialleTrustworthyIPv4 = RegExp.prototype.test\n  .bind(/^127\\.(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)\\.){2}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)$/)\n\nconst isPotentiallyTrustworthyIPv6 = RegExp.prototype.test\n  .bind(/^(?:(?:0{1,4}:){7}|(?:0{1,4}:){1,6}:|::)0{0,3}1$/)\n\n/**\n * Check if host matches one of the CIDR notations 127.0.0.0/8 or ::1/128.\n *\n * @param {string} origin\n * @returns {boolean}\n */\nfunction isOriginIPPotentiallyTrustworthy (origin) {\n  // IPv6\n  if (origin.includes(':')) {\n    // Remove brackets from IPv6 addresses\n    if (origin[0] === '[' && origin[origin.length - 1] === ']') {\n      origin = origin.slice(1, -1)\n    }\n    return isPotentiallyTrustworthyIPv6(origin)\n  }\n\n  // IPv4\n  return isPotentialleTrustworthyIPv4(origin)\n}\n\n/**\n * A potentially trustworthy origin is one which a user agent can generally\n * trust as delivering data securely.\n *\n * Return value `true` means `Potentially Trustworthy`.\n * Return value `false` means `Not Trustworthy`.\n *\n * @see https://w3c.github.io/webappsec-secure-contexts/#is-origin-trustworthy\n * @param {string} origin\n * @returns {boolean}\n */\nfunction isOriginPotentiallyTrustworthy (origin) {\n  // 1. If origin is an opaque origin, return \"Not Trustworthy\".\n  if (origin == null || origin === 'null') {\n    return false\n  }\n\n  // 2. Assert: origin is a tuple origin.\n  origin = new URL(origin)\n\n  // 3. If origin\u2019s scheme is either \"https\" or \"wss\",\n  //    return \"Potentially Trustworthy\".\n  if (origin.protocol === 'https:' || origin.protocol === 'wss:') {\n    return true\n  }\n\n  // 4. If origin\u2019s host matches one of the CIDR notations 127.0.0.0/8 or\n  // ::1/128 [RFC4632], return \"Potentially Trustworthy\".\n  if (isOriginIPPotentiallyTrustworthy(origin.hostname)) {\n    return true\n  }\n\n  // 5. If the user agent conforms to the name resolution rules in\n  //    [let-localhost-be-localhost] and one of the following is true:\n\n  //    origin\u2019s host is \"localhost\" or \"localhost.\"\n  if (origin.hostname === 'localhost' || origin.hostname === 'localhost.') {\n    return true\n  }\n\n  //    origin\u2019s host ends with \".localhost\" or \".localhost.\"\n  if (origin.hostname.endsWith('.localhost') || origin.hostname.endsWith('.localhost.')) {\n    return true\n  }\n\n  // 6. If origin\u2019s scheme is \"file\", return \"Potentially Trustworthy\".\n  if (origin.protocol === 'file:') {\n    return true\n  }\n\n  // 7. If origin\u2019s scheme component is one which the user agent considers to\n  // be authenticated, return \"Potentially Trustworthy\".\n\n  // 8. If origin has been configured as a trustworthy origin, return\n  //    \"Potentially Trustworthy\".\n\n  // 9. Return \"Not Trustworthy\".\n  return false\n}\n\n/**\n * A potentially trustworthy URL is one which either inherits context from its\n * creator (about:blank, about:srcdoc, data) or one whose origin is a\n * potentially trustworthy origin.\n *\n * Return value `true` means `Potentially Trustworthy`.\n * Return value `false` means `Not Trustworthy`.\n *\n * @see https://www.w3.org/TR/secure-contexts/#is-url-trustworthy\n * @param {URL} url\n * @returns {boolean}\n */\nfunction isURLPotentiallyTrustworthy (url) {\n  // Given a URL record (url), the following algorithm returns \"Potentially\n  // Trustworthy\" or \"Not Trustworthy\" as appropriate:\n  if (!webidl.is.URL(url)) {\n    return false\n  }\n\n  // 1. If url is \"about:blank\" or \"about:srcdoc\",\n  //    return \"Potentially Trustworthy\".\n  if (url.href === 'about:blank' || url.href === 'about:srcdoc') {\n    return true\n  }\n\n  // 2. If url\u2019s scheme is \"data\", return \"Potentially Trustworthy\".\n  if (url.protocol === 'data:') return true\n\n  // Note: The origin of blob: URLs is the origin of the context in which they\n  // were created. Therefore, blobs created in a trustworthy origin will\n  // themselves be potentially trustworthy.\n  if (url.protocol === 'blob:') return true\n\n  // 3. Return the result of executing \u00A7 3.1 Is origin potentially trustworthy?\n  // on url\u2019s origin.\n  return isOriginPotentiallyTrustworthy(url.origin)\n}\n\n// https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-request\nfunction tryUpgradeRequestToAPotentiallyTrustworthyURL (request) {\n  // TODO\n}\n\n/**\n * @link {https://html.spec.whatwg.org/multipage/origin.html#same-origin}\n * @param {URL} A\n * @param {URL} B\n */\nfunction sameOrigin (A, B) {\n  // 1. If A and B are the same opaque origin, then return true.\n  if (A.origin === B.origin && A.origin === 'null') {\n    return true\n  }\n\n  // 2. If A and B are both tuple origins and their schemes,\n  //    hosts, and port are identical, then return true.\n  if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) {\n    return true\n  }\n\n  // 3. Return false.\n  return false\n}\n\nfunction isAborted (fetchParams) {\n  return fetchParams.controller.state === 'aborted'\n}\n\nfunction isCancelled (fetchParams) {\n  return fetchParams.controller.state === 'aborted' ||\n    fetchParams.controller.state === 'terminated'\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-method-normalize\n * @param {string} method\n */\nfunction normalizeMethod (method) {\n  return normalizedMethodRecordsBase[method.toLowerCase()] ?? method\n}\n\n// https://tc39.es/ecma262/#sec-%25iteratorprototype%25-object\nconst esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))\n\n/**\n * @see https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object\n * @param {string} name name of the instance\n * @param {((target: any) => any)} kInternalIterator\n * @param {string | number} [keyIndex]\n * @param {string | number} [valueIndex]\n */\nfunction createIterator (name, kInternalIterator, keyIndex = 0, valueIndex = 1) {\n  class FastIterableIterator {\n    /** @type {any} */\n    #target\n    /** @type {'key' | 'value' | 'key+value'} */\n    #kind\n    /** @type {number} */\n    #index\n\n    /**\n     * @see https://webidl.spec.whatwg.org/#dfn-default-iterator-object\n     * @param {unknown} target\n     * @param {'key' | 'value' | 'key+value'} kind\n     */\n    constructor (target, kind) {\n      this.#target = target\n      this.#kind = kind\n      this.#index = 0\n    }\n\n    next () {\n      // 1. Let interface be the interface for which the iterator prototype object exists.\n      // 2. Let thisValue be the this value.\n      // 3. Let object be ? ToObject(thisValue).\n      // 4. If object is a platform object, then perform a security\n      //    check, passing:\n      // 5. If object is not a default iterator object for interface,\n      //    then throw a TypeError.\n      if (typeof this !== 'object' || this === null || !(#target in this)) {\n        throw new TypeError(\n          `'next' called on an object that does not implement interface ${name} Iterator.`\n        )\n      }\n\n      // 6. Let index be object\u2019s index.\n      // 7. Let kind be object\u2019s kind.\n      // 8. Let values be object\u2019s target's value pairs to iterate over.\n      const index = this.#index\n      const values = kInternalIterator(this.#target)\n\n      // 9. Let len be the length of values.\n      const len = values.length\n\n      // 10. If index is greater than or equal to len, then return\n      //     CreateIterResultObject(undefined, true).\n      if (index >= len) {\n        return {\n          value: undefined,\n          done: true\n        }\n      }\n\n      // 11. Let pair be the entry in values at index index.\n      const { [keyIndex]: key, [valueIndex]: value } = values[index]\n\n      // 12. Set object\u2019s index to index + 1.\n      this.#index = index + 1\n\n      // 13. Return the iterator result for pair and kind.\n\n      // https://webidl.spec.whatwg.org/#iterator-result\n\n      // 1. Let result be a value determined by the value of kind:\n      let result\n      switch (this.#kind) {\n        case 'key':\n          // 1. Let idlKey be pair\u2019s key.\n          // 2. Let key be the result of converting idlKey to an\n          //    ECMAScript value.\n          // 3. result is key.\n          result = key\n          break\n        case 'value':\n          // 1. Let idlValue be pair\u2019s value.\n          // 2. Let value be the result of converting idlValue to\n          //    an ECMAScript value.\n          // 3. result is value.\n          result = value\n          break\n        case 'key+value':\n          // 1. Let idlKey be pair\u2019s key.\n          // 2. Let idlValue be pair\u2019s value.\n          // 3. Let key be the result of converting idlKey to an\n          //    ECMAScript value.\n          // 4. Let value be the result of converting idlValue to\n          //    an ECMAScript value.\n          // 5. Let array be ! ArrayCreate(2).\n          // 6. Call ! CreateDataProperty(array, \"0\", key).\n          // 7. Call ! CreateDataProperty(array, \"1\", value).\n          // 8. result is array.\n          result = [key, value]\n          break\n      }\n\n      // 2. Return CreateIterResultObject(result, false).\n      return {\n        value: result,\n        done: false\n      }\n    }\n  }\n\n  // https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object\n  // @ts-ignore\n  delete FastIterableIterator.prototype.constructor\n\n  Object.setPrototypeOf(FastIterableIterator.prototype, esIteratorPrototype)\n\n  Object.defineProperties(FastIterableIterator.prototype, {\n    [Symbol.toStringTag]: {\n      writable: false,\n      enumerable: false,\n      configurable: true,\n      value: `${name} Iterator`\n    },\n    next: { writable: true, enumerable: true, configurable: true }\n  })\n\n  /**\n   * @param {unknown} target\n   * @param {'key' | 'value' | 'key+value'} kind\n   * @returns {IterableIterator<any>}\n   */\n  return function (target, kind) {\n    return new FastIterableIterator(target, kind)\n  }\n}\n\n/**\n * @see https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object\n * @param {string} name name of the instance\n * @param {any} object class\n * @param {(target: any) => any} kInternalIterator\n * @param {string | number} [keyIndex]\n * @param {string | number} [valueIndex]\n */\nfunction iteratorMixin (name, object, kInternalIterator, keyIndex = 0, valueIndex = 1) {\n  const makeIterator = createIterator(name, kInternalIterator, keyIndex, valueIndex)\n\n  const properties = {\n    keys: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function keys () {\n        webidl.brandCheck(this, object)\n        return makeIterator(this, 'key')\n      }\n    },\n    values: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function values () {\n        webidl.brandCheck(this, object)\n        return makeIterator(this, 'value')\n      }\n    },\n    entries: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function entries () {\n        webidl.brandCheck(this, object)\n        return makeIterator(this, 'key+value')\n      }\n    },\n    forEach: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function forEach (callbackfn, thisArg = globalThis) {\n        webidl.brandCheck(this, object)\n        webidl.argumentLengthCheck(arguments, 1, `${name}.forEach`)\n        if (typeof callbackfn !== 'function') {\n          throw new TypeError(\n            `Failed to execute 'forEach' on '${name}': parameter 1 is not of type 'Function'.`\n          )\n        }\n        for (const { 0: key, 1: value } of makeIterator(this, 'key+value')) {\n          callbackfn.call(thisArg, value, key, this)\n        }\n      }\n    }\n  }\n\n  return Object.defineProperties(object.prototype, {\n    ...properties,\n    [Symbol.iterator]: {\n      writable: true,\n      enumerable: false,\n      configurable: true,\n      value: properties.entries.value\n    }\n  })\n}\n\n/**\n * @param {import('./body').ExtractBodyResult} body\n * @param {(bytes: Uint8Array) => void} processBody\n * @param {(error: Error) => void} processBodyError\n * @returns {void}\n *\n * @see https://fetch.spec.whatwg.org/#body-fully-read\n */\nfunction fullyReadBody (body, processBody, processBodyError) {\n  // 1. If taskDestination is null, then set taskDestination to\n  //    the result of starting a new parallel queue.\n\n  // 2. Let successSteps given a byte sequence bytes be to queue a\n  //    fetch task to run processBody given bytes, with taskDestination.\n  const successSteps = processBody\n\n  // 3. Let errorSteps be to queue a fetch task to run processBodyError,\n  //    with taskDestination.\n  const errorSteps = processBodyError\n\n  try {\n  // 4. Let reader be the result of getting a reader for body\u2019s stream.\n  //    If that threw an exception, then run errorSteps with that\n  //    exception and return.\n    const reader = body.stream.getReader()\n\n    // 5. Read all bytes from reader, given successSteps and errorSteps.\n    readAllBytes(reader, successSteps, errorSteps)\n  } catch (e) {\n    errorSteps(e)\n  }\n}\n\n/**\n * @param {ReadableStreamController<Uint8Array>} controller\n */\nfunction readableStreamClose (controller) {\n  try {\n    controller.close()\n    controller.byobRequest?.respond(0)\n  } catch (err) {\n    // TODO: add comment explaining why this error occurs.\n    if (!err.message.includes('Controller is already closed') && !err.message.includes('ReadableStream is already closed')) {\n      throw err\n    }\n  }\n}\n\n/**\n * @see https://streams.spec.whatwg.org/#readablestreamdefaultreader-read-all-bytes\n * @see https://streams.spec.whatwg.org/#read-loop\n * @param {ReadableStream<Uint8Array<ArrayBuffer>>} reader\n * @param {(bytes: Uint8Array) => void} successSteps\n * @param {(error: Error) => void} failureSteps\n * @returns {Promise<void>}\n */\nasync function readAllBytes (reader, successSteps, failureSteps) {\n  try {\n    const bytes = []\n    let byteLength = 0\n\n    do {\n      const { done, value: chunk } = await reader.read()\n\n      if (done) {\n        // 1. Call successSteps with bytes.\n        successSteps(Buffer.concat(bytes, byteLength))\n        return\n      }\n\n      // 1. If chunk is not a Uint8Array object, call failureSteps\n      //    with a TypeError and abort these steps.\n      if (!isUint8Array(chunk)) {\n        failureSteps(new TypeError('Received non-Uint8Array chunk'))\n        return\n      }\n\n      // 2. Append the bytes represented by chunk to bytes.\n      bytes.push(chunk)\n      byteLength += chunk.length\n\n    // 3. Read-loop given reader, bytes, successSteps, and failureSteps.\n    } while (true)\n  } catch (e) {\n    // 1. Call failureSteps with e.\n    failureSteps(e)\n  }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#is-local\n * @param {URL} url\n * @returns {boolean}\n */\nfunction urlIsLocal (url) {\n  assert('protocol' in url) // ensure it's a url object\n\n  const protocol = url.protocol\n\n  // A URL is local if its scheme is a local scheme.\n  // A local scheme is \"about\", \"blob\", or \"data\".\n  return protocol === 'about:' || protocol === 'blob:' || protocol === 'data:'\n}\n\n/**\n * @param {string|URL} url\n * @returns {boolean}\n */\nfunction urlHasHttpsScheme (url) {\n  return (\n    (\n      typeof url === 'string' &&\n      url[5] === ':' &&\n      url[0] === 'h' &&\n      url[1] === 't' &&\n      url[2] === 't' &&\n      url[3] === 'p' &&\n      url[4] === 's'\n    ) ||\n    url.protocol === 'https:'\n  )\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#http-scheme\n * @param {URL} url\n */\nfunction urlIsHttpHttpsScheme (url) {\n  assert('protocol' in url) // ensure it's a url object\n\n  const protocol = url.protocol\n\n  return protocol === 'http:' || protocol === 'https:'\n}\n\n/**\n * @typedef {Object} RangeHeaderValue\n * @property {number|null} rangeStartValue\n * @property {number|null} rangeEndValue\n */\n\n/**\n * @see https://fetch.spec.whatwg.org/#simple-range-header-value\n * @param {string} value\n * @param {boolean} allowWhitespace\n * @return {RangeHeaderValue|'failure'}\n */\nfunction simpleRangeHeaderValue (value, allowWhitespace) {\n  // 1. Let data be the isomorphic decoding of value.\n  // Note: isomorphic decoding takes a sequence of bytes (ie. a Uint8Array) and turns it into a string,\n  // nothing more. We obviously don't need to do that if value is a string already.\n  const data = value\n\n  // 2. If data does not start with \"bytes\", then return failure.\n  if (!data.startsWith('bytes')) {\n    return 'failure'\n  }\n\n  // 3. Let position be a position variable for data, initially pointing at the 5th code point of data.\n  const position = { position: 5 }\n\n  // 4. If allowWhitespace is true, collect a sequence of code points that are HTTP tab or space,\n  //    from data given position.\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 5. If the code point at position within data is not U+003D (=), then return failure.\n  if (data.charCodeAt(position.position) !== 0x3D) {\n    return 'failure'\n  }\n\n  // 6. Advance position by 1.\n  position.position++\n\n  // 7. If allowWhitespace is true, collect a sequence of code points that are HTTP tab or space, from\n  //    data given position.\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 8. Let rangeStart be the result of collecting a sequence of code points that are ASCII digits,\n  //    from data given position.\n  const rangeStart = collectASequenceOfCodePoints(\n    (char) => {\n      const code = char.charCodeAt(0)\n\n      return code >= 0x30 && code <= 0x39\n    },\n    data,\n    position\n  )\n\n  // 9. Let rangeStartValue be rangeStart, interpreted as decimal number, if rangeStart is not the\n  //    empty string; otherwise null.\n  const rangeStartValue = rangeStart.length ? Number(rangeStart) : null\n\n  // 10. If allowWhitespace is true, collect a sequence of code points that are HTTP tab or space,\n  //     from data given position.\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 11. If the code point at position within data is not U+002D (-), then return failure.\n  if (data.charCodeAt(position.position) !== 0x2D) {\n    return 'failure'\n  }\n\n  // 12. Advance position by 1.\n  position.position++\n\n  // 13. If allowWhitespace is true, collect a sequence of code points that are HTTP tab\n  //     or space, from data given position.\n  // Note from Khafra: its the same step as in #8 again lol\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 14. Let rangeEnd be the result of collecting a sequence of code points that are\n  //     ASCII digits, from data given position.\n  // Note from Khafra: you wouldn't guess it, but this is also the same step as #8\n  const rangeEnd = collectASequenceOfCodePoints(\n    (char) => {\n      const code = char.charCodeAt(0)\n\n      return code >= 0x30 && code <= 0x39\n    },\n    data,\n    position\n  )\n\n  // 15. Let rangeEndValue be rangeEnd, interpreted as decimal number, if rangeEnd\n  //     is not the empty string; otherwise null.\n  // Note from Khafra: THE SAME STEP, AGAIN!!!\n  // Note: why interpret as a decimal if we only collect ascii digits?\n  const rangeEndValue = rangeEnd.length ? Number(rangeEnd) : null\n\n  // 16. If position is not past the end of data, then return failure.\n  if (position.position < data.length) {\n    return 'failure'\n  }\n\n  // 17. If rangeEndValue and rangeStartValue are null, then return failure.\n  if (rangeEndValue === null && rangeStartValue === null) {\n    return 'failure'\n  }\n\n  // 18. If rangeStartValue and rangeEndValue are numbers, and rangeStartValue is\n  //     greater than rangeEndValue, then return failure.\n  // Note: ... when can they not be numbers?\n  if (rangeStartValue > rangeEndValue) {\n    return 'failure'\n  }\n\n  // 19. Return (rangeStartValue, rangeEndValue).\n  return { rangeStartValue, rangeEndValue }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#build-a-content-range\n * @param {number} rangeStart\n * @param {number} rangeEnd\n * @param {number} fullLength\n */\nfunction buildContentRange (rangeStart, rangeEnd, fullLength) {\n  // 1. Let contentRange be `bytes `.\n  let contentRange = 'bytes '\n\n  // 2. Append rangeStart, serialized and isomorphic encoded, to contentRange.\n  contentRange += isomorphicEncode(`${rangeStart}`)\n\n  // 3. Append 0x2D (-) to contentRange.\n  contentRange += '-'\n\n  // 4. Append rangeEnd, serialized and isomorphic encoded to contentRange.\n  contentRange += isomorphicEncode(`${rangeEnd}`)\n\n  // 5. Append 0x2F (/) to contentRange.\n  contentRange += '/'\n\n  // 6. Append fullLength, serialized and isomorphic encoded to contentRange.\n  contentRange += isomorphicEncode(`${fullLength}`)\n\n  // 7. Return contentRange.\n  return contentRange\n}\n\n// A Stream, which pipes the response to zlib.createInflate() or\n// zlib.createInflateRaw() depending on the first byte of the Buffer.\n// If the lower byte of the first byte is 0x08, then the stream is\n// interpreted as a zlib stream, otherwise it's interpreted as a\n// raw deflate stream.\nclass InflateStream extends Transform {\n  #zlibOptions\n\n  /** @param {zlib.ZlibOptions} [zlibOptions] */\n  constructor (zlibOptions) {\n    super()\n    this.#zlibOptions = zlibOptions\n  }\n\n  _transform (chunk, encoding, callback) {\n    if (!this._inflateStream) {\n      if (chunk.length === 0) {\n        callback()\n        return\n      }\n      this._inflateStream = (chunk[0] & 0x0F) === 0x08\n        ? zlib.createInflate(this.#zlibOptions)\n        : zlib.createInflateRaw(this.#zlibOptions)\n\n      this._inflateStream.on('data', this.push.bind(this))\n      this._inflateStream.on('end', () => this.push(null))\n      this._inflateStream.on('error', (err) => this.destroy(err))\n    }\n\n    this._inflateStream.write(chunk, encoding, callback)\n  }\n\n  _final (callback) {\n    if (this._inflateStream) {\n      this._inflateStream.end()\n      this._inflateStream = null\n    }\n    callback()\n  }\n}\n\n/**\n * @param {zlib.ZlibOptions} [zlibOptions]\n * @returns {InflateStream}\n */\nfunction createInflate (zlibOptions) {\n  return new InflateStream(zlibOptions)\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-header-extract-mime-type\n * @param {import('./headers').HeadersList} headers\n */\nfunction extractMimeType (headers) {\n  // 1. Let charset be null.\n  let charset = null\n\n  // 2. Let essence be null.\n  let essence = null\n\n  // 3. Let mimeType be null.\n  let mimeType = null\n\n  // 4. Let values be the result of getting, decoding, and splitting `Content-Type` from headers.\n  const values = getDecodeSplit('content-type', headers)\n\n  // 5. If values is null, then return failure.\n  if (values === null) {\n    return 'failure'\n  }\n\n  // 6. For each value of values:\n  for (const value of values) {\n    // 6.1. Let temporaryMimeType be the result of parsing value.\n    const temporaryMimeType = parseMIMEType(value)\n\n    // 6.2. If temporaryMimeType is failure or its essence is \"*/*\", then continue.\n    if (temporaryMimeType === 'failure' || temporaryMimeType.essence === '*/*') {\n      continue\n    }\n\n    // 6.3. Set mimeType to temporaryMimeType.\n    mimeType = temporaryMimeType\n\n    // 6.4. If mimeType\u2019s essence is not essence, then:\n    if (mimeType.essence !== essence) {\n      // 6.4.1. Set charset to null.\n      charset = null\n\n      // 6.4.2. If mimeType\u2019s parameters[\"charset\"] exists, then set charset to\n      //        mimeType\u2019s parameters[\"charset\"].\n      if (mimeType.parameters.has('charset')) {\n        charset = mimeType.parameters.get('charset')\n      }\n\n      // 6.4.3. Set essence to mimeType\u2019s essence.\n      essence = mimeType.essence\n    } else if (!mimeType.parameters.has('charset') && charset !== null) {\n      // 6.5. Otherwise, if mimeType\u2019s parameters[\"charset\"] does not exist, and\n      //      charset is non-null, set mimeType\u2019s parameters[\"charset\"] to charset.\n      mimeType.parameters.set('charset', charset)\n    }\n  }\n\n  // 7. If mimeType is null, then return failure.\n  if (mimeType == null) {\n    return 'failure'\n  }\n\n  // 8. Return mimeType.\n  return mimeType\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#header-value-get-decode-and-split\n * @param {string|null} value\n */\nfunction gettingDecodingSplitting (value) {\n  // 1. Let input be the result of isomorphic decoding value.\n  const input = value\n\n  // 2. Let position be a position variable for input, initially pointing at the start of input.\n  const position = { position: 0 }\n\n  // 3. Let values be a list of strings, initially empty.\n  const values = []\n\n  // 4. Let temporaryValue be the empty string.\n  let temporaryValue = ''\n\n  // 5. While position is not past the end of input:\n  while (position.position < input.length) {\n    // 5.1. Append the result of collecting a sequence of code points that are not U+0022 (\")\n    //      or U+002C (,) from input, given position, to temporaryValue.\n    temporaryValue += collectASequenceOfCodePoints(\n      (char) => char !== '\"' && char !== ',',\n      input,\n      position\n    )\n\n    // 5.2. If position is not past the end of input, then:\n    if (position.position < input.length) {\n      // 5.2.1. If the code point at position within input is U+0022 (\"), then:\n      if (input.charCodeAt(position.position) === 0x22) {\n        // 5.2.1.1. Append the result of collecting an HTTP quoted string from input, given position, to temporaryValue.\n        temporaryValue += collectAnHTTPQuotedString(\n          input,\n          position\n        )\n\n        // 5.2.1.2. If position is not past the end of input, then continue.\n        if (position.position < input.length) {\n          continue\n        }\n      } else {\n        // 5.2.2. Otherwise:\n\n        // 5.2.2.1. Assert: the code point at position within input is U+002C (,).\n        assert(input.charCodeAt(position.position) === 0x2C)\n\n        // 5.2.2.2. Advance position by 1.\n        position.position++\n      }\n    }\n\n    // 5.3. Remove all HTTP tab or space from the start and end of temporaryValue.\n    temporaryValue = removeChars(temporaryValue, true, true, (char) => char === 0x9 || char === 0x20)\n\n    // 5.4. Append temporaryValue to values.\n    values.push(temporaryValue)\n\n    // 5.6. Set temporaryValue to the empty string.\n    temporaryValue = ''\n  }\n\n  // 6. Return values.\n  return values\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-header-list-get-decode-split\n * @param {string} name lowercase header name\n * @param {import('./headers').HeadersList} list\n */\nfunction getDecodeSplit (name, list) {\n  // 1. Let value be the result of getting name from list.\n  const value = list.get(name, true)\n\n  // 2. If value is null, then return null.\n  if (value === null) {\n    return null\n  }\n\n  // 3. Return the result of getting, decoding, and splitting value.\n  return gettingDecodingSplitting(value)\n}\n\nfunction hasAuthenticationEntry (request) {\n  return false\n}\n\n/**\n * @see https://url.spec.whatwg.org/#include-credentials\n * @param {URL} url\n */\nfunction includesCredentials (url) {\n  // A URL includes credentials if its username or password is not the empty string.\n  return !!(url.username || url.password)\n}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/document-sequences.html#traversable-navigable\n * @param {object|string} navigable\n */\nfunction isTraversableNavigable (navigable) {\n  // Returns true only if we have an actual traversable navigable object\n  // that can prompt the user for credentials. In Node.js, this will always\n  // be false since there's no Window object or navigable.\n  return navigable != null && navigable !== 'client' && navigable !== 'no-traversable'\n}\n\nclass EnvironmentSettingsObjectBase {\n  get baseUrl () {\n    return getGlobalOrigin()\n  }\n\n  get origin () {\n    return this.baseUrl?.origin\n  }\n\n  policyContainer = makePolicyContainer()\n}\n\nclass EnvironmentSettingsObject {\n  settingsObject = new EnvironmentSettingsObjectBase()\n}\n\nconst environmentSettingsObject = new EnvironmentSettingsObject()\n\nmodule.exports = {\n  isAborted,\n  isCancelled,\n  isValidEncodedURL,\n  ReadableStreamFrom,\n  tryUpgradeRequestToAPotentiallyTrustworthyURL,\n  clampAndCoarsenConnectionTimingInfo,\n  coarsenedSharedCurrentTime,\n  determineRequestsReferrer,\n  makePolicyContainer,\n  clonePolicyContainer,\n  appendFetchMetadata,\n  appendRequestOriginHeader,\n  TAOCheck,\n  corsCheck,\n  crossOriginResourcePolicyCheck,\n  createOpaqueTimingInfo,\n  setRequestReferrerPolicyOnRedirect,\n  isValidHTTPToken,\n  requestBadPort,\n  requestCurrentURL,\n  responseURL,\n  responseLocationURL,\n  isURLPotentiallyTrustworthy,\n  isValidReasonPhrase,\n  sameOrigin,\n  normalizeMethod,\n  iteratorMixin,\n  createIterator,\n  isValidHeaderName,\n  isValidHeaderValue,\n  isErrorLike,\n  fullyReadBody,\n  readableStreamClose,\n  urlIsLocal,\n  urlHasHttpsScheme,\n  urlIsHttpHttpsScheme,\n  readAllBytes,\n  simpleRangeHeaderValue,\n  buildContentRange,\n  createInflate,\n  extractMimeType,\n  getDecodeSplit,\n  environmentSettingsObject,\n  isOriginIPPotentiallyTrustworthy,\n  hasAuthenticationEntry,\n  includesCredentials,\n  isTraversableNavigable\n}\n", "'use strict'\n\nconst { iteratorMixin } = require('./util')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { webidl } = require('../webidl')\nconst nodeUtil = require('node:util')\n\n// https://xhr.spec.whatwg.org/#formdata\nclass FormData {\n  #state = []\n\n  constructor (form = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (form !== undefined) {\n      throw webidl.errors.conversionFailed({\n        prefix: 'FormData constructor',\n        argument: 'Argument 1',\n        types: ['undefined']\n      })\n    }\n  }\n\n  append (name, value, filename = undefined) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.append'\n    webidl.argumentLengthCheck(arguments, 2, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    if (arguments.length === 3 || webidl.is.Blob(value)) {\n      value = webidl.converters.Blob(value, prefix, 'value')\n\n      if (filename !== undefined) {\n        filename = webidl.converters.USVString(filename)\n      }\n    } else {\n      value = webidl.converters.USVString(value)\n    }\n\n    // 1. Let value be value if given; otherwise blobValue.\n\n    // 2. Let entry be the result of creating an entry with\n    // name, value, and filename if given.\n    const entry = makeEntry(name, value, filename)\n\n    // 3. Append entry to this\u2019s entry list.\n    this.#state.push(entry)\n  }\n\n  delete (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.delete'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // The delete(name) method steps are to remove all entries whose name\n    // is name from this\u2019s entry list.\n    this.#state = this.#state.filter(entry => entry.name !== name)\n  }\n\n  get (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.get'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // 1. If there is no entry whose name is name in this\u2019s entry list,\n    // then return null.\n    const idx = this.#state.findIndex((entry) => entry.name === name)\n    if (idx === -1) {\n      return null\n    }\n\n    // 2. Return the value of the first entry whose name is name from\n    // this\u2019s entry list.\n    return this.#state[idx].value\n  }\n\n  getAll (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.getAll'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // 1. If there is no entry whose name is name in this\u2019s entry list,\n    // then return the empty list.\n    // 2. Return the values of all entries whose name is name, in order,\n    // from this\u2019s entry list.\n    return this.#state\n      .filter((entry) => entry.name === name)\n      .map((entry) => entry.value)\n  }\n\n  has (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.has'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // The has(name) method steps are to return true if there is an entry\n    // whose name is name in this\u2019s entry list; otherwise false.\n    return this.#state.findIndex((entry) => entry.name === name) !== -1\n  }\n\n  set (name, value, filename = undefined) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.set'\n    webidl.argumentLengthCheck(arguments, 2, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    if (arguments.length === 3 || webidl.is.Blob(value)) {\n      value = webidl.converters.Blob(value, prefix, 'value')\n\n      if (filename !== undefined) {\n        filename = webidl.converters.USVString(filename)\n      }\n    } else {\n      value = webidl.converters.USVString(value)\n    }\n\n    // The set(name, value) and set(name, blobValue, filename) method steps\n    // are:\n\n    // 1. Let value be value if given; otherwise blobValue.\n\n    // 2. Let entry be the result of creating an entry with name, value, and\n    // filename if given.\n    const entry = makeEntry(name, value, filename)\n\n    // 3. If there are entries in this\u2019s entry list whose name is name, then\n    // replace the first such entry with entry and remove the others.\n    const idx = this.#state.findIndex((entry) => entry.name === name)\n    if (idx !== -1) {\n      this.#state = [\n        ...this.#state.slice(0, idx),\n        entry,\n        ...this.#state.slice(idx + 1).filter((entry) => entry.name !== name)\n      ]\n    } else {\n      // 4. Otherwise, append entry to this\u2019s entry list.\n      this.#state.push(entry)\n    }\n  }\n\n  [nodeUtil.inspect.custom] (depth, options) {\n    const state = this.#state.reduce((a, b) => {\n      if (a[b.name]) {\n        if (Array.isArray(a[b.name])) {\n          a[b.name].push(b.value)\n        } else {\n          a[b.name] = [a[b.name], b.value]\n        }\n      } else {\n        a[b.name] = b.value\n      }\n\n      return a\n    }, { __proto__: null })\n\n    options.depth ??= depth\n    options.colors ??= true\n\n    const output = nodeUtil.formatWithOptions(options, state)\n\n    // remove [Object null prototype]\n    return `FormData ${output.slice(output.indexOf(']') + 2)}`\n  }\n\n  /**\n   * @param {FormData} formData\n   */\n  static getFormDataState (formData) {\n    return formData.#state\n  }\n\n  /**\n   * @param {FormData} formData\n   * @param {any[]} newState\n   */\n  static setFormDataState (formData, newState) {\n    formData.#state = newState\n  }\n}\n\nconst { getFormDataState, setFormDataState } = FormData\nReflect.deleteProperty(FormData, 'getFormDataState')\nReflect.deleteProperty(FormData, 'setFormDataState')\n\niteratorMixin('FormData', FormData, getFormDataState, 'name', 'value')\n\nObject.defineProperties(FormData.prototype, {\n  append: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  get: kEnumerableProperty,\n  getAll: kEnumerableProperty,\n  has: kEnumerableProperty,\n  set: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'FormData',\n    configurable: true\n  }\n})\n\n/**\n * @see https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#create-an-entry\n * @param {string} name\n * @param {string|Blob} value\n * @param {?string} filename\n * @returns\n */\nfunction makeEntry (name, value, filename) {\n  // 1. Set name to the result of converting name into a scalar value string.\n  // Note: This operation was done by the webidl converter USVString.\n\n  // 2. If value is a string, then set value to the result of converting\n  //    value into a scalar value string.\n  if (typeof value === 'string') {\n    // Note: This operation was done by the webidl converter USVString.\n  } else {\n    // 3. Otherwise:\n\n    // 1. If value is not a File object, then set value to a new File object,\n    //    representing the same bytes, whose name attribute value is \"blob\"\n    if (!webidl.is.File(value)) {\n      value = new File([value], 'blob', { type: value.type })\n    }\n\n    // 2. If filename is given, then set value to a new File object,\n    //    representing the same bytes, whose name attribute is filename.\n    if (filename !== undefined) {\n      /** @type {FilePropertyBag} */\n      const options = {\n        type: value.type,\n        lastModified: value.lastModified\n      }\n\n      value = new File([value], filename, options)\n    }\n  }\n\n  // 4. Return an entry whose name is name and whose value is value.\n  return { name, value }\n}\n\nwebidl.is.FormData = webidl.util.MakeTypeAssertion(FormData)\n\nmodule.exports = { FormData, makeEntry, setFormDataState }\n", "'use strict'\n\nconst { bufferToLowerCasedHeaderName } = require('../../core/util')\nconst { HTTP_TOKEN_CODEPOINTS } = require('./data-url')\nconst { makeEntry } = require('./formdata')\nconst { webidl } = require('../webidl')\nconst assert = require('node:assert')\nconst { isomorphicDecode } = require('../infra')\n\nconst dd = Buffer.from('--')\nconst decoder = new TextDecoder()\nconst decoderIgnoreBOM = new TextDecoder('utf-8', { ignoreBOM: true })\n\n/**\n * @param {string} chars\n */\nfunction isAsciiString (chars) {\n  for (let i = 0; i < chars.length; ++i) {\n    if ((chars.charCodeAt(i) & ~0x7F) !== 0) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#multipart-form-data-boundary\n * @param {string} boundary\n */\nfunction validateBoundary (boundary) {\n  const length = boundary.length\n\n  // - its length is greater or equal to 27 and lesser or equal to 70, and\n  if (length < 27 || length > 70) {\n    return false\n  }\n\n  // - it is composed by bytes in the ranges 0x30 to 0x39, 0x41 to 0x5A, or\n  //   0x61 to 0x7A, inclusive (ASCII alphanumeric), or which are 0x27 ('),\n  //   0x2D (-) or 0x5F (_).\n  for (let i = 0; i < length; ++i) {\n    const cp = boundary.charCodeAt(i)\n\n    if (!(\n      (cp >= 0x30 && cp <= 0x39) ||\n      (cp >= 0x41 && cp <= 0x5a) ||\n      (cp >= 0x61 && cp <= 0x7a) ||\n      cp === 0x27 ||\n      cp === 0x2d ||\n      cp === 0x5f\n    )) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#multipart-form-data-parser\n * @param {Buffer} input\n * @param {ReturnType<import('./data-url')['parseMIMEType']>} mimeType\n */\nfunction multipartFormDataParser (input, mimeType) {\n  // 1. Assert: mimeType\u2019s essence is \"multipart/form-data\".\n  assert(mimeType !== 'failure' && mimeType.essence === 'multipart/form-data')\n\n  const boundaryString = mimeType.parameters.get('boundary')\n\n  // 2. If mimeType\u2019s parameters[\"boundary\"] does not exist, return failure.\n  //    Otherwise, let boundary be the result of UTF-8 decoding mimeType\u2019s\n  //    parameters[\"boundary\"].\n  if (boundaryString === undefined) {\n    throw parsingError('missing boundary in content-type header')\n  }\n\n  const boundary = Buffer.from(`--${boundaryString}`, 'utf8')\n\n  // 3. Let entry list be an empty entry list.\n  const entryList = []\n\n  // 4. Let position be a pointer to a byte in input, initially pointing at\n  //    the first byte.\n  const position = { position: 0 }\n\n  // Note: Per RFC 2046 Section 5.1.1, we must ignore anything before the\n  // first boundary delimiter line (preamble). Search for the first boundary.\n  const firstBoundaryIndex = input.indexOf(boundary)\n\n  if (firstBoundaryIndex === -1) {\n    throw parsingError('no boundary found in multipart body')\n  }\n\n  // Start parsing from the first boundary, ignoring any preamble\n  position.position = firstBoundaryIndex\n\n  // 5. While true:\n  while (true) {\n    // 5.1. If position points to a sequence of bytes starting with 0x2D 0x2D\n    //      (`--`) followed by boundary, advance position by 2 + the length of\n    //      boundary. Otherwise, return failure.\n    // Note: boundary is padded with 2 dashes already, no need to add 2.\n    if (input.subarray(position.position, position.position + boundary.length).equals(boundary)) {\n      position.position += boundary.length\n    } else {\n      throw parsingError('expected a value starting with -- and the boundary')\n    }\n\n    // 5.2. If position points to the sequence of bytes 0x2D 0x2D 0x0D 0x0A\n    //      (`--` followed by CR LF) followed by the end of input, return entry list.\n    // Note: Per RFC 2046 Section 5.1.1, we must ignore anything after the\n    // final boundary delimiter (epilogue). Check for -- or --CRLF and return\n    // regardless of what follows.\n    if (bufferStartsWith(input, dd, position)) {\n      // Found closing boundary delimiter (--), ignore any epilogue\n      return entryList\n    }\n\n    // 5.3. If position does not point to a sequence of bytes starting with 0x0D\n    //      0x0A (CR LF), return failure.\n    if (input[position.position] !== 0x0d || input[position.position + 1] !== 0x0a) {\n      throw parsingError('expected CRLF')\n    }\n\n    // 5.4. Advance position by 2. (This skips past the newline.)\n    position.position += 2\n\n    // 5.5. Let name, filename and contentType be the result of parsing\n    //      multipart/form-data headers on input and position, if the result\n    //      is not failure. Otherwise, return failure.\n    const result = parseMultipartFormDataHeaders(input, position)\n\n    let { name, filename, contentType, encoding } = result\n\n    // 5.6. Advance position by 2. (This skips past the empty line that marks\n    //      the end of the headers.)\n    position.position += 2\n\n    // 5.7. Let body be the empty byte sequence.\n    let body\n\n    // 5.8. Body loop: While position is not past the end of input:\n    // TODO: the steps here are completely wrong\n    {\n      const boundaryIndex = input.indexOf(boundary.subarray(2), position.position)\n\n      if (boundaryIndex === -1) {\n        throw parsingError('expected boundary after body')\n      }\n\n      body = input.subarray(position.position, boundaryIndex - 4)\n\n      position.position += body.length\n\n      // Note: position must be advanced by the body's length before being\n      // decoded, otherwise the parsing will fail.\n      if (encoding === 'base64') {\n        body = Buffer.from(body.toString(), 'base64')\n      }\n    }\n\n    // 5.9. If position does not point to a sequence of bytes starting with\n    //      0x0D 0x0A (CR LF), return failure. Otherwise, advance position by 2.\n    if (input[position.position] !== 0x0d || input[position.position + 1] !== 0x0a) {\n      throw parsingError('expected CRLF')\n    } else {\n      position.position += 2\n    }\n\n    // 5.10. If filename is not null:\n    let value\n\n    if (filename !== null) {\n      // 5.10.1. If contentType is null, set contentType to \"text/plain\".\n      contentType ??= 'text/plain'\n\n      // 5.10.2. If contentType is not an ASCII string, set contentType to the empty string.\n\n      // Note: `buffer.isAscii` can be used at zero-cost, but converting a string to a buffer is a high overhead.\n      // Content-Type is a relatively small string, so it is faster to use `String#charCodeAt`.\n      if (!isAsciiString(contentType)) {\n        contentType = ''\n      }\n\n      // 5.10.3. Let value be a new File object with name filename, type contentType, and body body.\n      value = new File([body], filename, { type: contentType })\n    } else {\n      // 5.11. Otherwise:\n\n      // 5.11.1. Let value be the UTF-8 decoding without BOM of body.\n      value = decoderIgnoreBOM.decode(Buffer.from(body))\n    }\n\n    // 5.12. Assert: name is a scalar value string and value is either a scalar value string or a File object.\n    assert(webidl.is.USVString(name))\n    assert((typeof value === 'string' && webidl.is.USVString(value)) || webidl.is.File(value))\n\n    // 5.13. Create an entry with name and value, and append it to entry list.\n    entryList.push(makeEntry(name, value, filename))\n  }\n}\n\n/**\n * Parses content-disposition attributes (e.g., name=\"value\" or filename*=utf-8''encoded)\n * @param {Buffer} input\n * @param {{ position: number }} position\n * @returns {{ name: string, value: string, extended: boolean } | null}\n */\nfunction parseContentDispositionAttribute (input, position) {\n  // Skip leading semicolon and whitespace\n  if (input[position.position] === 0x3b /* ; */) {\n    position.position++\n  }\n\n  // Skip whitespace\n  collectASequenceOfBytes(\n    (char) => char === 0x20 || char === 0x09,\n    input,\n    position\n  )\n\n  // Collect attribute name (token characters)\n  const attributeName = collectASequenceOfBytes(\n    (char) => isToken(char) && char !== 0x3d && char !== 0x2a, // not = or *\n    input,\n    position\n  )\n\n  if (attributeName.length === 0) {\n    return null\n  }\n\n  const attrNameStr = attributeName.toString('ascii').toLowerCase()\n\n  // Check for extended notation (attribute*)\n  const isExtended = input[position.position] === 0x2a /* * */\n  if (isExtended) {\n    position.position++ // skip *\n  }\n\n  // Expect = sign\n  if (input[position.position] !== 0x3d /* = */) {\n    return null\n  }\n  position.position++ // skip =\n\n  // Skip whitespace\n  collectASequenceOfBytes(\n    (char) => char === 0x20 || char === 0x09,\n    input,\n    position\n  )\n\n  let value\n\n  if (isExtended) {\n    // Extended attribute format: charset'language'encoded-value\n    const headerValue = collectASequenceOfBytes(\n      (char) => char !== 0x20 && char !== 0x0d && char !== 0x0a && char !== 0x3b, // not space, CRLF, or ;\n      input,\n      position\n    )\n\n    // Check for utf-8'' prefix (case insensitive)\n    if (\n      (headerValue[0] !== 0x75 && headerValue[0] !== 0x55) || // u or U\n      (headerValue[1] !== 0x74 && headerValue[1] !== 0x54) || // t or T\n      (headerValue[2] !== 0x66 && headerValue[2] !== 0x46) || // f or F\n      headerValue[3] !== 0x2d || // -\n      headerValue[4] !== 0x38 // 8\n    ) {\n      throw parsingError('unknown encoding, expected utf-8\\'\\'')\n    }\n\n    // Skip utf-8'' and decode the rest\n    value = decodeURIComponent(decoder.decode(headerValue.subarray(7)))\n  } else if (input[position.position] === 0x22 /* \" */) {\n    // Quoted string\n    position.position++ // skip opening quote\n\n    const quotedValue = collectASequenceOfBytes(\n      (char) => char !== 0x0a && char !== 0x0d && char !== 0x22, // not LF, CR, or \"\n      input,\n      position\n    )\n\n    if (input[position.position] !== 0x22) {\n      throw parsingError('Closing quote not found')\n    }\n    position.position++ // skip closing quote\n\n    value = decoder.decode(quotedValue)\n      .replace(/%0A/ig, '\\n')\n      .replace(/%0D/ig, '\\r')\n      .replace(/%22/g, '\"')\n  } else {\n    // Token value (no quotes)\n    const tokenValue = collectASequenceOfBytes(\n      (char) => isToken(char) && char !== 0x3b, // not ;\n      input,\n      position\n    )\n\n    value = decoder.decode(tokenValue)\n  }\n\n  return { name: attrNameStr, value, extended: isExtended }\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#parse-multipart-form-data-headers\n * @param {Buffer} input\n * @param {{ position: number }} position\n */\nfunction parseMultipartFormDataHeaders (input, position) {\n  // 1. Let name, filename and contentType be null.\n  let name = null\n  let filename = null\n  let contentType = null\n  let encoding = null\n\n  // 2. While true:\n  while (true) {\n    // 2.1. If position points to a sequence of bytes starting with 0x0D 0x0A (CR LF):\n    if (input[position.position] === 0x0d && input[position.position + 1] === 0x0a) {\n      // 2.1.1. If name is null, return failure.\n      if (name === null) {\n        throw parsingError('header name is null')\n      }\n\n      // 2.1.2. Return name, filename and contentType.\n      return { name, filename, contentType, encoding }\n    }\n\n    // 2.2. Let header name be the result of collecting a sequence of bytes that are\n    //      not 0x0A (LF), 0x0D (CR) or 0x3A (:), given position.\n    let headerName = collectASequenceOfBytes(\n      (char) => char !== 0x0a && char !== 0x0d && char !== 0x3a,\n      input,\n      position\n    )\n\n    // 2.3. Remove any HTTP tab or space bytes from the start or end of header name.\n    headerName = removeChars(headerName, true, true, (char) => char === 0x9 || char === 0x20)\n\n    // 2.4. If header name does not match the field-name token production, return failure.\n    if (!HTTP_TOKEN_CODEPOINTS.test(headerName.toString())) {\n      throw parsingError('header name does not match the field-name token production')\n    }\n\n    // 2.5. If the byte at position is not 0x3A (:), return failure.\n    if (input[position.position] !== 0x3a) {\n      throw parsingError('expected :')\n    }\n\n    // 2.6. Advance position by 1.\n    position.position++\n\n    // 2.7. Collect a sequence of bytes that are HTTP tab or space bytes given position.\n    //      (Do nothing with those bytes.)\n    collectASequenceOfBytes(\n      (char) => char === 0x20 || char === 0x09,\n      input,\n      position\n    )\n\n    // 2.8. Byte-lowercase header name and switch on the result:\n    switch (bufferToLowerCasedHeaderName(headerName)) {\n      case 'content-disposition': {\n        name = filename = null\n        // Track whether filename was set from the extended (RFC 5987) form so\n        // a subsequent legacy `filename` attribute does not override it.\n        let filenameIsExtended = false\n\n        // Collect the disposition type (should be \"form-data\")\n        const dispositionType = collectASequenceOfBytes(\n          (char) => isToken(char),\n          input,\n          position\n        )\n\n        if (dispositionType.toString('ascii').toLowerCase() !== 'form-data') {\n          throw parsingError('expected form-data for content-disposition header')\n        }\n\n        // Parse attributes recursively until CRLF\n        while (\n          position.position < input.length &&\n          (input[position.position] !== 0x0d ||\n          input[position.position + 1] !== 0x0a)\n        ) {\n          const attribute = parseContentDispositionAttribute(input, position)\n\n          if (!attribute) {\n            break\n          }\n\n          if (attribute.name === 'name') {\n            name = attribute.value\n          } else if (attribute.name === 'filename') {\n            // Per RFC 5987 \u00A74.1, when both legacy and extended forms of the\n            // same parameter are present, the extended (filename*) form takes\n            // precedence regardless of the order they appear in.\n            if (attribute.extended) {\n              filename = attribute.value\n              filenameIsExtended = true\n            } else if (!filenameIsExtended) {\n              filename = attribute.value\n            }\n          }\n        }\n\n        if (name === null) {\n          throw parsingError('name attribute is required in content-disposition header')\n        }\n\n        break\n      }\n      case 'content-type': {\n        // 1. Let header value be the result of collecting a sequence of bytes that are\n        //    not 0x0A (LF) or 0x0D (CR), given position.\n        let headerValue = collectASequenceOfBytes(\n          (char) => char !== 0x0a && char !== 0x0d,\n          input,\n          position\n        )\n\n        // 2. Remove any HTTP tab or space bytes from the end of header value.\n        headerValue = removeChars(headerValue, false, true, (char) => char === 0x9 || char === 0x20)\n\n        // 3. Set contentType to the isomorphic decoding of header value.\n        contentType = isomorphicDecode(headerValue)\n\n        break\n      }\n      case 'content-transfer-encoding': {\n        let headerValue = collectASequenceOfBytes(\n          (char) => char !== 0x0a && char !== 0x0d,\n          input,\n          position\n        )\n\n        headerValue = removeChars(headerValue, false, true, (char) => char === 0x9 || char === 0x20)\n\n        encoding = isomorphicDecode(headerValue)\n\n        break\n      }\n      default: {\n        // Collect a sequence of bytes that are not 0x0A (LF) or 0x0D (CR), given position.\n        // (Do nothing with those bytes.)\n        collectASequenceOfBytes(\n          (char) => char !== 0x0a && char !== 0x0d,\n          input,\n          position\n        )\n      }\n    }\n\n    // 2.9. If position does not point to a sequence of bytes starting with 0x0D 0x0A\n    //      (CR LF), return failure. Otherwise, advance position by 2 (past the newline).\n    if (input[position.position] !== 0x0d || input[position.position + 1] !== 0x0a) {\n      throw parsingError('expected CRLF')\n    } else {\n      position.position += 2\n    }\n  }\n}\n\n/**\n * @param {(char: number) => boolean} condition\n * @param {Buffer} input\n * @param {{ position: number }} position\n */\nfunction collectASequenceOfBytes (condition, input, position) {\n  let start = position.position\n\n  while (start < input.length && condition(input[start])) {\n    ++start\n  }\n\n  return input.subarray(position.position, (position.position = start))\n}\n\n/**\n * @param {Buffer} buf\n * @param {boolean} leading\n * @param {boolean} trailing\n * @param {(charCode: number) => boolean} predicate\n * @returns {Buffer}\n */\nfunction removeChars (buf, leading, trailing, predicate) {\n  let lead = 0\n  let trail = buf.length - 1\n\n  if (leading) {\n    while (lead < buf.length && predicate(buf[lead])) lead++\n  }\n\n  if (trailing) {\n    while (trail > 0 && predicate(buf[trail])) trail--\n  }\n\n  return lead === 0 && trail === buf.length - 1 ? buf : buf.subarray(lead, trail + 1)\n}\n\n/**\n * Checks if {@param buffer} starts with {@param start}\n * @param {Buffer} buffer\n * @param {Buffer} start\n * @param {{ position: number }} position\n */\nfunction bufferStartsWith (buffer, start, position) {\n  if (buffer.length < start.length) {\n    return false\n  }\n\n  for (let i = 0; i < start.length; i++) {\n    if (start[i] !== buffer[position.position + i]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction parsingError (cause) {\n  return new TypeError('Failed to parse body as FormData.', { cause: new TypeError(cause) })\n}\n\n/**\n * CTL            = <any US-ASCII control character\n *                  (octets 0 - 31) and DEL (127)>\n * @param {number} char\n */\nfunction isCTL (char) {\n  return char <= 0x1f || char === 0x7f\n}\n\n/**\n * tspecials :=  \"(\" / \")\" / \"<\" / \">\" / \"@\" /\n *                \",\" / \";\" / \":\" / \"\\\" / <\">\n *                \"/\" / \"[\" / \"]\" / \"?\" / \"=\"\n *                ; Must be in quoted-string,\n *                ; to use within parameter values\n * @param {number} char\n */\nfunction isTSpecial (char) {\n  return (\n    char === 0x28 || // (\n    char === 0x29 || // )\n    char === 0x3c || // <\n    char === 0x3e || // >\n    char === 0x40 || // @\n    char === 0x2c || // ,\n    char === 0x3b || // ;\n    char === 0x3a || // :\n    char === 0x5c || // \\\n    char === 0x22 || // \"\n    char === 0x2f || // /\n    char === 0x5b || // [\n    char === 0x5d || // ]\n    char === 0x3f || // ?\n    char === 0x3d    // +\n  )\n}\n\n/**\n * token := 1*<any (US-ASCII) CHAR except SPACE, CTLs,\n *          or tspecials>\n * @param {number} char\n */\nfunction isToken (char) {\n  return (\n    char <= 0x7f &&  // ascii\n    char !== 0x20 && // space\n    char !== 0x09 &&\n    !isCTL(char) &&\n    !isTSpecial(char)\n  )\n}\n\nmodule.exports = {\n  multipartFormDataParser,\n  validateBoundary\n}\n", "'use strict'\n\n/** @typedef {`node:${string}`} NodeModuleName */\n\n/** @type {Record<NodeModuleName, () => any>} */\nconst lazyLoaders = {\n  __proto__: null,\n  'node:crypto': () => require('node:crypto'),\n  'node:sqlite': () => require('node:sqlite')\n}\n\n/**\n * @param {NodeModuleName} moduleName\n * @returns {boolean}\n */\nfunction detectRuntimeFeatureByNodeModule (moduleName) {\n  try {\n    lazyLoaders[moduleName]()\n    return true\n  } catch (err) {\n    if (err.code !== 'ERR_UNKNOWN_BUILTIN_MODULE' && err.code !== 'ERR_NO_CRYPTO') {\n      throw err\n    }\n    return false\n  }\n}\n\nconst runtimeFeaturesAsNodeModule = /** @type {const} */ (['crypto', 'sqlite'])\n/** @typedef {typeof runtimeFeaturesAsNodeModule[number]} RuntimeFeatureByNodeModule */\n/** @typedef {RuntimeFeatureByNodeModule} Feature */\n\n/**\n * @param {Feature} feature\n * @returns {boolean}\n */\nfunction detectRuntimeFeature (feature) {\n  if (runtimeFeaturesAsNodeModule.includes(/** @type {RuntimeFeatureByNodeModule} */ (feature))) {\n    return detectRuntimeFeatureByNodeModule(`node:${feature}`)\n  }\n  throw new TypeError(`unknown feature: ${feature}`)\n}\n\n/**\n * @class\n * @name RuntimeFeatures\n */\nclass RuntimeFeatures {\n  /** @type {Map<Feature, boolean>} */\n  #map = new Map()\n\n  /**\n   * Clears all cached feature detections.\n   */\n  clear () {\n    this.#map.clear()\n  }\n\n  /**\n   * @param {Feature} feature\n   * @returns {boolean}\n   */\n  has (feature) {\n    return (\n      this.#map.get(feature) ?? this.#detectRuntimeFeature(feature)\n    )\n  }\n\n  /**\n   * @param {Feature} feature\n   * @param {boolean} value\n   */\n  set (feature, value) {\n    if (runtimeFeaturesAsNodeModule.includes(feature) === false) {\n      throw new TypeError(`unknown feature: ${feature}`)\n    }\n    this.#map.set(feature, value)\n  }\n\n  /**\n   * @param {Feature} feature\n   * @returns {boolean}\n   */\n  #detectRuntimeFeature (feature) {\n    const result = detectRuntimeFeature(feature)\n    this.#map.set(feature, result)\n    return result\n  }\n}\n\nconst instance = new RuntimeFeatures()\n\nmodule.exports.runtimeFeatures = instance\nmodule.exports.default = instance\n", "'use strict'\n\nconst util = require('../../core/util')\nconst {\n  ReadableStreamFrom,\n  readableStreamClose,\n  fullyReadBody,\n  extractMimeType\n} = require('./util')\nconst { FormData, setFormDataState } = require('./formdata')\nconst { webidl } = require('../webidl')\nconst assert = require('node:assert')\nconst { isErrored, isDisturbed } = require('node:stream')\nconst { isUint8Array } = require('node:util/types')\nconst { serializeAMimeType } = require('./data-url')\nconst { multipartFormDataParser } = require('./formdata-parser')\nconst { parseJSONFromBytes } = require('../infra')\nconst { utf8DecodeBytes } = require('../../encoding')\nconst { runtimeFeatures } = require('../../util/runtime-features.js')\n\nconst random = runtimeFeatures.has('crypto')\n  ? require('node:crypto').randomInt\n  : (max) => Math.floor(Math.random() * max)\n\nconst textEncoder = new TextEncoder()\nfunction noop () {}\n\nconst streamRegistry = new FinalizationRegistry((weakRef) => {\n  const stream = weakRef.deref()\n  if (stream && !stream.locked && !isDisturbed(stream) && !isErrored(stream)) {\n    stream.cancel('Response object has been garbage collected').catch(noop)\n  }\n})\n\n/**\n * Extract a body with type from a byte sequence or BodyInit object\n *\n * @param {import('../../../types').BodyInit} object - The BodyInit object to extract from\n * @param {boolean} [keepalive=false] - If true, indicates that the body\n * @returns {[{stream: ReadableStream, source: any, length: number | null}, string | null]} - Returns a tuple containing the body and its type\n *\n * @see https://fetch.spec.whatwg.org/#concept-bodyinit-extract\n */\nfunction extractBody (object, keepalive = false) {\n  // 1. Let stream be null.\n  let stream = null\n  let controller = null\n\n  // 2. If object is a ReadableStream object, then set stream to object.\n  if (webidl.is.ReadableStream(object)) {\n    stream = object\n  } else if (webidl.is.Blob(object)) {\n    // 3. Otherwise, if object is a Blob object, set stream to the\n    //    result of running object\u2019s get stream.\n    stream = object.stream()\n  } else {\n    // 4. Otherwise, set stream to a new ReadableStream object, and set\n    //    up stream with byte reading support.\n    stream = new ReadableStream({\n      pull () {},\n      start (c) {\n        controller = c\n      },\n      cancel () {},\n      type: 'bytes'\n    })\n  }\n\n  // 5. Assert: stream is a ReadableStream object.\n  assert(webidl.is.ReadableStream(stream))\n\n  // 6. Let action be null.\n  let action = null\n\n  // 7. Let source be null.\n  let source = null\n\n  // 8. Let length be null.\n  let length = null\n\n  // 9. Let type be null.\n  let type = null\n\n  // 10. Switch on object:\n  if (typeof object === 'string') {\n    // Set source to the UTF-8 encoding of object.\n    // Note: setting source to a Uint8Array here breaks some mocking assumptions.\n    source = object\n\n    // Set type to `text/plain;charset=UTF-8`.\n    type = 'text/plain;charset=UTF-8'\n  } else if (webidl.is.URLSearchParams(object)) {\n    // URLSearchParams\n\n    // spec says to run application/x-www-form-urlencoded on body.list\n    // this is implemented in Node.js as apart of an URLSearchParams instance toString method\n    // See: https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L490\n    // and https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L1100\n\n    // Set source to the result of running the application/x-www-form-urlencoded serializer with object\u2019s list.\n    source = object.toString()\n\n    // Set type to `application/x-www-form-urlencoded;charset=UTF-8`.\n    type = 'application/x-www-form-urlencoded;charset=UTF-8'\n  } else if (webidl.is.BufferSource(object)) {\n    // Set source to a copy of the bytes held by object.\n    source = webidl.util.getCopyOfBytesHeldByBufferSource(object)\n  } else if (webidl.is.FormData(object)) {\n    const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}`\n    const prefix = `--${boundary}\\r\\nContent-Disposition: form-data`\n\n    /*! formdata-polyfill. MIT License. Jimmy W\u00E4rting <https://jimmy.warting.se/opensource> */\n    const formdataEscape = (str) =>\n      str.replace(/\\n/g, '%0A').replace(/\\r/g, '%0D').replace(/\"/g, '%22')\n    const normalizeLinefeeds = (value) => value.replace(/\\r?\\n|\\r/g, '\\r\\n')\n\n    // Set action to this step: run the multipart/form-data\n    // encoding algorithm, with object\u2019s entry list and UTF-8.\n    // - This ensures that the body is immutable and can't be changed afterwords\n    // - That the content-length is calculated in advance.\n    // - And that all parts are pre-encoded and ready to be sent.\n\n    const blobParts = []\n    const rn = new Uint8Array([13, 10]) // '\\r\\n'\n    length = 0\n    let hasUnknownSizeValue = false\n\n    for (const [name, value] of object) {\n      if (typeof value === 'string') {\n        const chunk = textEncoder.encode(prefix +\n          `; name=\"${formdataEscape(normalizeLinefeeds(name))}\"` +\n          `\\r\\n\\r\\n${normalizeLinefeeds(value)}\\r\\n`)\n        blobParts.push(chunk)\n        length += chunk.byteLength\n      } else {\n        const chunk = textEncoder.encode(`${prefix}; name=\"${formdataEscape(normalizeLinefeeds(name))}\"` +\n          (value.name ? `; filename=\"${formdataEscape(value.name)}\"` : '') + '\\r\\n' +\n          `Content-Type: ${\n            value.type || 'application/octet-stream'\n          }\\r\\n\\r\\n`)\n        blobParts.push(chunk, value, rn)\n        if (typeof value.size === 'number') {\n          length += chunk.byteLength + value.size + rn.byteLength\n        } else {\n          hasUnknownSizeValue = true\n        }\n      }\n    }\n\n    // CRLF is appended to the body to function with legacy servers and match other implementations.\n    // https://github.com/curl/curl/blob/3434c6b46e682452973972e8313613dfa58cd690/lib/mime.c#L1029-L1030\n    // https://github.com/form-data/form-data/issues/63\n    const chunk = textEncoder.encode(`--${boundary}--\\r\\n`)\n    blobParts.push(chunk)\n    length += chunk.byteLength\n    if (hasUnknownSizeValue) {\n      length = null\n    }\n\n    // Set source to object.\n    source = object\n\n    action = async function * () {\n      for (const part of blobParts) {\n        if (part.stream) {\n          yield * part.stream()\n        } else {\n          yield part\n        }\n      }\n    }\n\n    // Set type to `multipart/form-data; boundary=`,\n    // followed by the multipart/form-data boundary string generated\n    // by the multipart/form-data encoding algorithm.\n    type = `multipart/form-data; boundary=${boundary}`\n  } else if (webidl.is.Blob(object)) {\n    // Blob\n\n    // Set source to object.\n    source = object\n\n    // Set length to object\u2019s size.\n    length = object.size\n\n    // If object\u2019s type attribute is not the empty byte sequence, set\n    // type to its value.\n    if (object.type) {\n      type = object.type\n    }\n  } else if (typeof object[Symbol.asyncIterator] === 'function') {\n    // If keepalive is true, then throw a TypeError.\n    if (keepalive) {\n      throw new TypeError('keepalive')\n    }\n\n    // If object is disturbed or locked, then throw a TypeError.\n    if (util.isDisturbed(object) || object.locked) {\n      throw new TypeError(\n        'Response body object should not be disturbed or locked'\n      )\n    }\n\n    stream =\n      webidl.is.ReadableStream(object) ? object : ReadableStreamFrom(object)\n  }\n\n  // 11. If source is a byte sequence, then set action to a\n  // step that returns source and length to source\u2019s length.\n  if (typeof source === 'string' || isUint8Array(source)) {\n    action = () => {\n      length = typeof source === 'string' ? Buffer.byteLength(source) : source.length\n      return source\n    }\n  }\n\n  // 12. If action is non-null, then run these steps in parallel:\n  if (action != null) {\n    ;(async () => {\n      // 1. Run action.\n      const result = action()\n\n      // 2. Whenever one or more bytes are available and stream is not errored,\n      //    enqueue the result of creating a Uint8Array from the available bytes into stream.\n      const iterator = result?.[Symbol.asyncIterator]?.()\n      if (iterator) {\n        for await (const bytes of iterator) {\n          if (isErrored(stream)) break\n          if (bytes.length) {\n            controller.enqueue(new Uint8Array(bytes))\n          }\n        }\n      } else if (result?.length && !isErrored(stream)) {\n        controller.enqueue(typeof result === 'string' ? textEncoder.encode(result) : new Uint8Array(result))\n      }\n\n      // 3. When running action is done, close stream.\n      queueMicrotask(() => readableStreamClose(controller))\n    })()\n  }\n\n  // 13. Let body be a body whose stream is stream, source is source,\n  // and length is length.\n  const body = { stream, source, length }\n\n  // 14. Return (body, type).\n  return [body, type]\n}\n\n/**\n * @typedef {object} ExtractBodyResult\n * @property {ReadableStream<Uint8Array<ArrayBuffer>>} stream - The ReadableStream containing the body data\n * @property {any} source - The original source of the body data\n * @property {number | null} length - The length of the body data, or null\n */\n\n/**\n * Safely extract a body with type from a byte sequence or BodyInit object.\n *\n * @param {import('../../../types').BodyInit} object - The BodyInit object to extract from\n * @param {boolean} [keepalive=false] - If true, indicates that the body\n * @returns {[ExtractBodyResult, string | null]} - Returns a tuple containing the body and its type\n *\n * @see https://fetch.spec.whatwg.org/#bodyinit-safely-extract\n */\nfunction safelyExtractBody (object, keepalive = false) {\n  // To safely extract a body and a `Content-Type` value from\n  // a byte sequence or BodyInit object object, run these steps:\n\n  // 1. If object is a ReadableStream object, then:\n  if (webidl.is.ReadableStream(object)) {\n    // Assert: object is neither disturbed nor locked.\n    assert(!util.isDisturbed(object), 'The body has already been consumed.')\n    assert(!object.locked, 'The stream is locked.')\n  }\n\n  // 2. Return the results of extracting object.\n  return extractBody(object, keepalive)\n}\n\nfunction cloneBody (body) {\n  // To clone a body body, run these steps:\n\n  // https://fetch.spec.whatwg.org/#concept-body-clone\n\n  // 1. Let \u00AB out1, out2 \u00BB be the result of teeing body\u2019s stream.\n  const { 0: out1, 1: out2 } = body.stream.tee()\n\n  // 2. Set body\u2019s stream to out1.\n  body.stream = out1\n\n  // 3. Return a body whose stream is out2 and other members are copied from body.\n  return {\n    stream: out2,\n    length: body.length,\n    source: body.source\n  }\n}\n\nfunction bodyMixinMethods (instance, getInternalState) {\n  const methods = {\n    blob () {\n      // The blob() method steps are to return the result of\n      // running consume body with this and the following step\n      // given a byte sequence bytes: return a Blob whose\n      // contents are bytes and whose type attribute is this\u2019s\n      // MIME type.\n      return consumeBody(this, (bytes) => {\n        let mimeType = bodyMimeType(getInternalState(this))\n\n        if (mimeType === null) {\n          mimeType = ''\n        } else if (mimeType) {\n          mimeType = serializeAMimeType(mimeType)\n        }\n\n        // Return a Blob whose contents are bytes and type attribute\n        // is mimeType.\n        return new Blob([bytes], { type: mimeType })\n      }, instance, getInternalState)\n    },\n\n    arrayBuffer () {\n      // The arrayBuffer() method steps are to return the result\n      // of running consume body with this and the following step\n      // given a byte sequence bytes: return a new ArrayBuffer\n      // whose contents are bytes.\n      return consumeBody(this, (bytes) => {\n        return new Uint8Array(bytes).buffer\n      }, instance, getInternalState)\n    },\n\n    text () {\n      // The text() method steps are to return the result of running\n      // consume body with this and UTF-8 decode.\n      return consumeBody(this, utf8DecodeBytes, instance, getInternalState)\n    },\n\n    json () {\n      // The json() method steps are to return the result of running\n      // consume body with this and parse JSON from bytes.\n      return consumeBody(this, parseJSONFromBytes, instance, getInternalState)\n    },\n\n    formData () {\n      // The formData() method steps are to return the result of running\n      // consume body with this and the following step given a byte sequence bytes:\n      return consumeBody(this, (value) => {\n        // 1. Let mimeType be the result of get the MIME type with this.\n        const mimeType = bodyMimeType(getInternalState(this))\n\n        // 2. If mimeType is non-null, then switch on mimeType\u2019s essence and run\n        //    the corresponding steps:\n        if (mimeType !== null) {\n          switch (mimeType.essence) {\n            case 'multipart/form-data': {\n              // 1. ... [long step]\n              // 2. If that fails for some reason, then throw a TypeError.\n              const parsed = multipartFormDataParser(value, mimeType)\n\n              // 3. Return a new FormData object, appending each entry,\n              //    resulting from the parsing operation, to its entry list.\n              const fd = new FormData()\n              setFormDataState(fd, parsed)\n\n              return fd\n            }\n            case 'application/x-www-form-urlencoded': {\n              // 1. Let entries be the result of parsing bytes.\n              const entries = new URLSearchParams(value.toString())\n\n              // 2. If entries is failure, then throw a TypeError.\n\n              // 3. Return a new FormData object whose entry list is entries.\n              const fd = new FormData()\n\n              for (const [name, value] of entries) {\n                fd.append(name, value)\n              }\n\n              return fd\n            }\n          }\n        }\n\n        // 3. Throw a TypeError.\n        throw new TypeError(\n          'Content-Type was not one of \"multipart/form-data\" or \"application/x-www-form-urlencoded\".'\n        )\n      }, instance, getInternalState)\n    },\n\n    bytes () {\n      // The bytes() method steps are to return the result of running consume body\n      // with this and the following step given a byte sequence bytes: return the\n      // result of creating a Uint8Array from bytes in this\u2019s relevant realm.\n      return consumeBody(this, (bytes) => {\n        return new Uint8Array(bytes)\n      }, instance, getInternalState)\n    }\n  }\n\n  return methods\n}\n\nfunction mixinBody (prototype, getInternalState) {\n  Object.assign(prototype.prototype, bodyMixinMethods(prototype, getInternalState))\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-body-consume-body\n * @param {any} object internal state\n * @param {(value: unknown) => unknown} convertBytesToJSValue\n * @param {any} instance\n * @param {(target: any) => any} getInternalState\n */\nfunction consumeBody (object, convertBytesToJSValue, instance, getInternalState) {\n  try {\n    webidl.brandCheck(object, instance)\n  } catch (e) {\n    return Promise.reject(e)\n  }\n\n  object = getInternalState(object)\n\n  // 1. If object is unusable, then return a promise rejected\n  //    with a TypeError.\n  if (bodyUnusable(object)) {\n    return Promise.reject(new TypeError('Body is unusable: Body has already been read'))\n  }\n\n  // 2. Let promise be a new promise.\n  const promise = Promise.withResolvers()\n\n  // 3. Let errorSteps given error be to reject promise with error.\n  const errorSteps = promise.reject\n\n  // 4. Let successSteps given a byte sequence data be to resolve\n  //    promise with the result of running convertBytesToJSValue\n  //    with data. If that threw an exception, then run errorSteps\n  //    with that exception.\n  const successSteps = (data) => {\n    try {\n      promise.resolve(convertBytesToJSValue(data))\n    } catch (e) {\n      errorSteps(e)\n    }\n  }\n\n  // 5. If object\u2019s body is null, then run successSteps with an\n  //    empty byte sequence.\n  if (object.body == null) {\n    successSteps(Buffer.allocUnsafe(0))\n    return promise.promise\n  }\n\n  // 6. Otherwise, fully read object\u2019s body given successSteps,\n  //    errorSteps, and object\u2019s relevant global object.\n  fullyReadBody(object.body, successSteps, errorSteps)\n\n  // 7. Return promise.\n  return promise.promise\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#body-unusable\n * @param {any} object internal state\n */\nfunction bodyUnusable (object) {\n  const body = object.body\n\n  // An object including the Body interface mixin is\n  // said to be unusable if its body is non-null and\n  // its body\u2019s stream is disturbed or locked.\n  return body != null && (body.stream.locked || util.isDisturbed(body.stream))\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-body-mime-type\n * @param {any} requestOrResponse internal state\n */\nfunction bodyMimeType (requestOrResponse) {\n  // 1. Let headers be null.\n  // 2. If requestOrResponse is a Request object, then set headers to requestOrResponse\u2019s request\u2019s header list.\n  // 3. Otherwise, set headers to requestOrResponse\u2019s response\u2019s header list.\n  /** @type {import('./headers').HeadersList} */\n  const headers = requestOrResponse.headersList\n\n  // 4. Let mimeType be the result of extracting a MIME type from headers.\n  const mimeType = extractMimeType(headers)\n\n  // 5. If mimeType is failure, then return null.\n  if (mimeType === 'failure') {\n    return null\n  }\n\n  // 6. Return mimeType.\n  return mimeType\n}\n\nmodule.exports = {\n  extractBody,\n  safelyExtractBody,\n  cloneBody,\n  mixinBody,\n  streamRegistry,\n  bodyUnusable\n}\n", "'use strict'\n\n/* global WebAssembly */\n\nconst assert = require('node:assert')\nconst util = require('../core/util.js')\nconst { channels } = require('../core/diagnostics.js')\nconst timers = require('../util/timers.js')\nconst {\n  RequestContentLengthMismatchError,\n  ResponseContentLengthMismatchError,\n  RequestAbortedError,\n  HeadersTimeoutError,\n  HeadersOverflowError,\n  SocketError,\n  InformationalError,\n  BodyTimeoutError,\n  HTTPParserError,\n  ResponseExceededMaxSizeError\n} = require('../core/errors.js')\nconst {\n  kUrl,\n  kReset,\n  kClient,\n  kParser,\n  kBlocking,\n  kRunning,\n  kPending,\n  kSize,\n  kWriting,\n  kQueue,\n  kNoRef,\n  kKeepAliveDefaultTimeout,\n  kHostHeader,\n  kPendingIdx,\n  kRunningIdx,\n  kError,\n  kPipelining,\n  kSocket,\n  kKeepAliveTimeoutValue,\n  kMaxHeadersSize,\n  kKeepAliveMaxTimeout,\n  kKeepAliveTimeoutThreshold,\n  kHeadersTimeout,\n  kBodyTimeout,\n  kStrictContentLength,\n  kMaxRequests,\n  kCounter,\n  kMaxResponseSize,\n  kOnError,\n  kResume,\n  kHTTPContext,\n  kClosed\n} = require('../core/symbols.js')\n\nconst constants = require('../llhttp/constants.js')\nconst EMPTY_BUF = Buffer.alloc(0)\nconst FastBuffer = Buffer[Symbol.species]\nconst removeAllListeners = util.removeAllListeners\n\nlet extractBody\n\nfunction lazyllhttp () {\n  const llhttpWasmData = process.env.JEST_WORKER_ID ? require('../llhttp/llhttp-wasm.js') : undefined\n\n  let mod\n\n  // We disable wasm SIMD on ppc64 as it seems to be broken on Power 9 architectures.\n  let useWasmSIMD = process.arch !== 'ppc64'\n  // The Env Variable UNDICI_NO_WASM_SIMD allows explicitly overriding the default behavior\n  if (process.env.UNDICI_NO_WASM_SIMD === '1') {\n    useWasmSIMD = false\n  } else if (process.env.UNDICI_NO_WASM_SIMD === '0') {\n    useWasmSIMD = true\n  }\n\n  if (useWasmSIMD) {\n    try {\n      mod = new WebAssembly.Module(require('../llhttp/llhttp_simd-wasm.js'))\n    } catch {\n    }\n  }\n\n  if (!mod) {\n    // We could check if the error was caused by the simd option not\n    // being enabled, but the occurring of this other error\n    // * https://github.com/emscripten-core/emscripten/issues/11495\n    // got me to remove that check to avoid breaking Node 12.\n    mod = new WebAssembly.Module(llhttpWasmData || require('../llhttp/llhttp-wasm.js'))\n  }\n\n  return new WebAssembly.Instance(mod, {\n    env: {\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_url: (p, at, len) => {\n        return 0\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_status: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @returns {number}\n       */\n      wasm_on_message_begin: (p) => {\n        assert(currentParser.ptr === p)\n        return currentParser.onMessageBegin()\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_header_field: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_header_value: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @param {number} statusCode\n       * @param {0|1} upgrade\n       * @param {0|1} shouldKeepAlive\n       * @returns {number}\n       */\n      wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => {\n        assert(currentParser.ptr === p)\n        return currentParser.onHeadersComplete(statusCode, upgrade === 1, shouldKeepAlive === 1)\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_body: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @returns {number}\n       */\n      wasm_on_message_complete: (p) => {\n        assert(currentParser.ptr === p)\n        return currentParser.onMessageComplete()\n      }\n\n    }\n  })\n}\n\nlet llhttpInstance = null\n\n/**\n * @type {Parser|null}\n */\nlet currentParser = null\nlet currentBufferRef = null\n/**\n * @type {number}\n */\nlet currentBufferSize = 0\nlet currentBufferPtr = null\nlet currentBuffer = null\n\nconst USE_NATIVE_TIMER = 0\nconst USE_FAST_TIMER = 1\n\n// Use fast timers for headers and body to take eventual event loop\n// latency into account.\nconst TIMEOUT_HEADERS = 2 | USE_FAST_TIMER\nconst TIMEOUT_BODY = 4 | USE_FAST_TIMER\n\n// Use native timers to ignore event loop latency for keep-alive\n// handling.\nconst TIMEOUT_KEEP_ALIVE = 8 | USE_NATIVE_TIMER\n\nclass Parser {\n  /**\n     * @param {import('./client.js')} client\n     * @param {import('net').Socket} socket\n     * @param {*} llhttp\n     */\n  constructor (client, socket, { exports }) {\n    this.llhttp = exports\n    this.ptr = this.llhttp.llhttp_alloc(constants.TYPE.RESPONSE)\n    this.client = client\n    /**\n     * @type {import('net').Socket}\n     */\n    this.socket = socket\n    this.timeout = null\n    this.timeoutWeakRef = new WeakRef(this)\n    this.timeoutValue = null\n    this.timeoutType = null\n    this.statusCode = 0\n    this.statusText = ''\n    this.upgrade = false\n    this.headers = []\n    this.headersSize = 0\n    this.headersMaxSize = client[kMaxHeadersSize]\n    this.shouldKeepAlive = false\n    this.paused = false\n    this.resume = this.resume.bind(this)\n\n    this.bytesRead = 0\n\n    this.keepAlive = ''\n    this.contentLength = -1\n    this.connectionKeepAlive = false\n    this.maxResponseSize = client[kMaxResponseSize]\n  }\n\n  setTimeout (delay, type) {\n    // If the existing timer and the new timer are of different timer type\n    // (fast or native) or have different delay, we need to clear the existing\n    // timer and set a new one.\n    if (\n      delay !== this.timeoutValue ||\n      (type & USE_FAST_TIMER) ^ (this.timeoutType & USE_FAST_TIMER)\n    ) {\n      // If a timeout is already set, clear it with clearTimeout of the fast\n      // timer implementation, as it can clear fast and native timers.\n      if (this.timeout) {\n        timers.clearTimeout(this.timeout)\n        this.timeout = null\n      }\n\n      if (delay) {\n        if (type & USE_FAST_TIMER) {\n          this.timeout = timers.setFastTimeout(onParserTimeout, delay, this.timeoutWeakRef)\n        } else {\n          this.timeout = setTimeout(onParserTimeout, delay, this.timeoutWeakRef)\n          this.timeout?.unref()\n        }\n      }\n\n      this.timeoutValue = delay\n    } else if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    this.timeoutType = type\n  }\n\n  resume () {\n    if (this.socket.destroyed || !this.paused) {\n      return\n    }\n\n    assert(this.ptr != null)\n    assert(currentParser === null)\n\n    this.llhttp.llhttp_resume(this.ptr)\n\n    assert(this.timeoutType === TIMEOUT_BODY)\n    if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    this.paused = false\n    this.execute(this.socket.read() || EMPTY_BUF) // Flush parser.\n    this.readMore()\n  }\n\n  readMore () {\n    while (!this.paused && this.ptr) {\n      const chunk = this.socket.read()\n      if (chunk === null) {\n        break\n      }\n      this.execute(chunk)\n    }\n  }\n\n  /**\n   * @param {Buffer} chunk\n   */\n  execute (chunk) {\n    assert(currentParser === null)\n    assert(this.ptr != null)\n    assert(!this.paused)\n\n    const { socket, llhttp } = this\n\n    // Allocate a new buffer if the current buffer is too small.\n    if (chunk.length > currentBufferSize) {\n      if (currentBufferPtr) {\n        llhttp.free(currentBufferPtr)\n      }\n      // Allocate a buffer that is a multiple of 4096 bytes.\n      currentBufferSize = Math.ceil(chunk.length / 4096) * 4096\n      currentBufferPtr = llhttp.malloc(currentBufferSize)\n    }\n\n    if (\n      currentBuffer === null ||\n      currentBuffer.buffer !== llhttp.memory.buffer ||\n      currentBuffer.byteOffset !== currentBufferPtr ||\n      currentBuffer.byteLength !== currentBufferSize\n    ) {\n      currentBuffer = new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize)\n    }\n\n    currentBuffer.set(chunk)\n\n    // Call `execute` on the wasm parser.\n    // We pass the `llhttp_parser` pointer address, the pointer address of buffer view data,\n    // and finally the length of bytes to parse.\n    // The return value is an error code or `constants.ERROR.OK`.\n    try {\n      let ret\n\n      try {\n        currentBufferRef = chunk\n        currentParser = this\n        ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, chunk.length)\n      } finally {\n        currentParser = null\n        currentBufferRef = null\n      }\n\n      if (ret !== constants.ERROR.OK) {\n        const data = chunk.subarray(llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr)\n\n        if (ret === constants.ERROR.PAUSED_UPGRADE) {\n          this.onUpgrade(data)\n        } else if (ret === constants.ERROR.PAUSED) {\n          this.paused = true\n          socket.unshift(data)\n        } else {\n          const ptr = llhttp.llhttp_get_error_reason(this.ptr)\n          let message = ''\n          if (ptr) {\n            const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0)\n            message =\n              'Response does not match the HTTP/1.1 protocol (' +\n              Buffer.from(llhttp.memory.buffer, ptr, len).toString() +\n              ')'\n          }\n          throw new HTTPParserError(message, constants.ERROR[ret], data)\n        }\n      }\n    } catch (err) {\n      util.destroy(socket, err)\n    }\n  }\n\n  destroy () {\n    assert(currentParser === null)\n    assert(this.ptr != null)\n\n    this.llhttp.llhttp_free(this.ptr)\n    this.ptr = null\n\n    this.timeout && timers.clearTimeout(this.timeout)\n    this.timeout = null\n    this.timeoutValue = null\n    this.timeoutType = null\n\n    this.paused = false\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {0}\n   */\n  onStatus (buf) {\n    this.statusText = buf.toString()\n    return 0\n  }\n\n  /**\n   * @returns {0|-1}\n   */\n  onMessageBegin () {\n    const { socket, client } = this\n\n    if (socket.destroyed) {\n      return -1\n    }\n\n    const request = client[kQueue][client[kRunningIdx]]\n    if (!request) {\n      return -1\n    }\n    request.onResponseStarted()\n\n    return 0\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {number}\n   */\n  onHeaderField (buf) {\n    const len = this.headers.length\n\n    if ((len & 1) === 0) {\n      this.headers.push(buf)\n    } else {\n      this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf])\n    }\n\n    this.trackHeader(buf.length)\n\n    return 0\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {number}\n   */\n  onHeaderValue (buf) {\n    let len = this.headers.length\n\n    if ((len & 1) === 1) {\n      this.headers.push(buf)\n      len += 1\n    } else {\n      this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf])\n    }\n\n    const key = this.headers[len - 2]\n    if (key.length === 10) {\n      const headerName = util.bufferToLowerCasedHeaderName(key)\n      if (headerName === 'keep-alive') {\n        this.keepAlive += buf.toString()\n      } else if (headerName === 'connection') {\n        this.connectionKeepAlive =\n          this.headers[len - 1].length === 10 &&\n          util.bufferToLowerCasedHeaderName(this.headers[len - 1]) === 'keep-alive'\n      }\n    } else if (key.length === 14 && util.bufferToLowerCasedHeaderName(key) === 'content-length') {\n      if (this.contentLength === -1) {\n        this.contentLength = 0\n      }\n      for (let i = 0; i < buf.length; i++) {\n        this.contentLength = (this.contentLength * 10) + (buf[i] - 0x30)\n      }\n    }\n\n    this.trackHeader(buf.length)\n\n    return 0\n  }\n\n  /**\n   * @param {number} len\n   */\n  trackHeader (len) {\n    this.headersSize += len\n    if (this.headersSize >= this.headersMaxSize) {\n      util.destroy(this.socket, new HeadersOverflowError())\n    }\n  }\n\n  /**\n   * @param {Buffer} head\n   */\n  onUpgrade (head) {\n    const { upgrade, client, socket, headers, statusCode } = this\n\n    assert(upgrade)\n    assert(client[kSocket] === socket)\n    assert(!socket.destroyed)\n    assert(!this.paused)\n    assert((headers.length & 1) === 0)\n\n    const request = client[kQueue][client[kRunningIdx]]\n    assert(request)\n    assert(request.upgrade || request.method === 'CONNECT')\n\n    this.statusCode = 0\n    this.statusText = ''\n    this.shouldKeepAlive = false\n\n    this.headers = []\n    this.headersSize = 0\n\n    socket.unshift(head)\n\n    socket[kParser].destroy()\n    socket[kParser] = null\n\n    socket[kClient] = null\n    socket[kError] = null\n\n    removeAllListeners(socket)\n\n    client[kSocket] = null\n    client[kHTTPContext] = null // TODO (fix): This is hacky...\n    client[kQueue][client[kRunningIdx]++] = null\n    client.emit('disconnect', client[kUrl], [client], new InformationalError('upgrade'))\n\n    try {\n      request.onRequestUpgrade(statusCode, headers, socket)\n    } catch (err) {\n      util.destroy(socket, err)\n    }\n\n    client[kResume]()\n  }\n\n  /**\n   * @param {number} statusCode\n   * @param {boolean} upgrade\n   * @param {boolean} shouldKeepAlive\n   * @returns {number}\n   */\n  onHeadersComplete (statusCode, upgrade, shouldKeepAlive) {\n    const { client, socket, headers, statusText } = this\n\n    if (socket.destroyed) {\n      return -1\n    }\n\n    const request = client[kQueue][client[kRunningIdx]]\n\n    if (!request) {\n      return -1\n    }\n\n    assert(!this.upgrade)\n    assert(this.statusCode < 200)\n\n    if (statusCode === 100) {\n      util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket)))\n      return -1\n    }\n\n    /* this can only happen if server is misbehaving */\n    if (upgrade && !request.upgrade) {\n      util.destroy(socket, new SocketError('bad upgrade', util.getSocketInfo(socket)))\n      return -1\n    }\n\n    assert(this.timeoutType === TIMEOUT_HEADERS)\n\n    this.statusCode = statusCode\n    this.shouldKeepAlive = (\n      shouldKeepAlive ||\n      // Override llhttp value which does not allow keepAlive for HEAD.\n      (request.method === 'HEAD' && !socket[kReset] && this.connectionKeepAlive)\n    )\n\n    if (this.statusCode >= 200) {\n      const bodyTimeout = request.bodyTimeout != null\n        ? request.bodyTimeout\n        : client[kBodyTimeout]\n      this.setTimeout(bodyTimeout, TIMEOUT_BODY)\n    } else if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    if (request.method === 'CONNECT') {\n      assert(client[kRunning] === 1)\n      this.upgrade = true\n      return 2\n    }\n\n    if (upgrade) {\n      assert(client[kRunning] === 1)\n      this.upgrade = true\n      return 2\n    }\n\n    assert((this.headers.length & 1) === 0)\n    this.headers = []\n    this.headersSize = 0\n\n    if (this.shouldKeepAlive && client[kPipelining]) {\n      const keepAliveTimeout = this.keepAlive ? util.parseKeepAliveTimeout(this.keepAlive) : null\n\n      if (keepAliveTimeout != null) {\n        const timeout = Math.min(\n          keepAliveTimeout - client[kKeepAliveTimeoutThreshold],\n          client[kKeepAliveMaxTimeout]\n        )\n        if (timeout <= 0) {\n          socket[kReset] = true\n        } else {\n          client[kKeepAliveTimeoutValue] = timeout\n        }\n      } else {\n        client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout]\n      }\n    } else {\n      // Stop more requests from being dispatched.\n      socket[kReset] = true\n    }\n\n    const pause = request.onResponseStart(statusCode, headers, this.resume, statusText) === false\n\n    if (request.aborted) {\n      return -1\n    }\n\n    if (request.method === 'HEAD') {\n      return 1\n    }\n\n    if (statusCode < 200) {\n      return 1\n    }\n\n    if (socket[kBlocking]) {\n      socket[kBlocking] = false\n      client[kResume]()\n    }\n\n    return pause ? constants.ERROR.PAUSED : 0\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {number}\n   */\n  onBody (buf) {\n    const { client, socket, statusCode, maxResponseSize } = this\n\n    if (socket.destroyed) {\n      return -1\n    }\n\n    const request = client[kQueue][client[kRunningIdx]]\n    assert(request)\n\n    assert(this.timeoutType === TIMEOUT_BODY)\n    if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    assert(statusCode >= 200)\n\n    if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) {\n      util.destroy(socket, new ResponseExceededMaxSizeError())\n      return -1\n    }\n\n    this.bytesRead += buf.length\n\n    if (request.onResponseData(buf) === false) {\n      return constants.ERROR.PAUSED\n    }\n\n    return 0\n  }\n\n  /**\n   * @returns {number}\n   */\n  onMessageComplete () {\n    const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this\n\n    if (socket.destroyed && (!statusCode || shouldKeepAlive)) {\n      return -1\n    }\n\n    if (upgrade) {\n      return 0\n    }\n\n    assert(statusCode >= 100)\n    assert((this.headers.length & 1) === 0)\n\n    const request = client[kQueue][client[kRunningIdx]]\n    assert(request)\n\n    this.statusCode = 0\n    this.statusText = ''\n    this.bytesRead = 0\n    this.contentLength = -1\n    this.keepAlive = ''\n    this.connectionKeepAlive = false\n\n    this.headers = []\n    this.headersSize = 0\n\n    if (statusCode < 200) {\n      return 0\n    }\n\n    if (request.method !== 'HEAD' && contentLength !== -1 && bytesRead !== contentLength) {\n      util.destroy(socket, new ResponseContentLengthMismatchError())\n      return -1\n    }\n\n    request.onResponseEnd(headers)\n\n    client[kQueue][client[kRunningIdx]++] = null\n\n    if (socket[kWriting]) {\n      assert(client[kRunning] === 0)\n      // Response completed before request.\n      util.destroy(socket, new InformationalError('reset'))\n      return constants.ERROR.PAUSED\n    } else if (!shouldKeepAlive) {\n      util.destroy(socket, new InformationalError('reset'))\n      return constants.ERROR.PAUSED\n    } else if (socket[kReset] && client[kRunning] === 0) {\n      // Destroy socket once all requests have completed.\n      // The request at the tail of the pipeline is the one\n      // that requested reset and no further requests should\n      // have been queued since then.\n      util.destroy(socket, new InformationalError('reset'))\n      return constants.ERROR.PAUSED\n    } else if (client[kPipelining] == null || client[kPipelining] === 1) {\n      // We must wait a full event loop cycle to reuse this socket to make sure\n      // that non-spec compliant servers are not closing the connection even if they\n      // said they won't.\n      setImmediate(client[kResume])\n    } else {\n      client[kResume]()\n    }\n\n    return 0\n  }\n}\n\nfunction onParserTimeout (parserWeakRef) {\n  const parser = parserWeakRef.deref()\n  if (!parser) {\n    return\n  }\n\n  const { socket, timeoutType, client, paused } = parser\n\n  if (timeoutType === TIMEOUT_HEADERS) {\n    if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) {\n      assert(!paused, 'cannot be paused while waiting for headers')\n      util.destroy(socket, new HeadersTimeoutError())\n    }\n  } else if (timeoutType === TIMEOUT_BODY) {\n    if (!paused) {\n      util.destroy(socket, new BodyTimeoutError())\n    }\n  } else if (timeoutType === TIMEOUT_KEEP_ALIVE) {\n    assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue])\n    util.destroy(socket, new InformationalError('socket idle timeout'))\n  }\n}\n\n/**\n * @param {import ('./client.js')} client\n * @param {import('net').Socket} socket\n * @returns\n */\nfunction connectH1 (client, socket) {\n  client[kSocket] = socket\n\n  if (!llhttpInstance) {\n    llhttpInstance = lazyllhttp()\n  }\n\n  if (socket.errored) {\n    throw socket.errored\n  }\n\n  if (socket.destroyed) {\n    throw new SocketError('destroyed')\n  }\n\n  socket[kNoRef] = false\n  socket[kWriting] = false\n  socket[kReset] = false\n  socket[kBlocking] = false\n  socket[kParser] = new Parser(client, socket, llhttpInstance)\n\n  util.addListener(socket, 'error', onHttpSocketError)\n  util.addListener(socket, 'readable', onHttpSocketReadable)\n  util.addListener(socket, 'end', onHttpSocketEnd)\n  util.addListener(socket, 'close', onHttpSocketClose)\n\n  socket[kClosed] = false\n  socket.on('close', onSocketClose)\n\n  return {\n    version: 'h1',\n    defaultPipelining: 1,\n    write (request) {\n      return writeH1(client, request)\n    },\n    resume () {\n      resumeH1(client)\n    },\n    /**\n     * @param {Error|undefined} err\n     * @param {() => void} callback\n     */\n    destroy (err, callback) {\n      if (socket[kClosed]) {\n        queueMicrotask(callback)\n      } else {\n        socket.on('close', callback)\n        socket.destroy(err)\n      }\n    },\n    /**\n     * @returns {boolean}\n     */\n    get destroyed () {\n      return socket.destroyed\n    },\n    /**\n     * @param {import('../core/request.js')} request\n     * @returns {boolean}\n     */\n    busy (request) {\n      if (socket[kWriting] || socket[kReset] || socket[kBlocking]) {\n        return true\n      }\n\n      if (request) {\n        if (client[kRunning] > 0 && !request.idempotent) {\n          // Non-idempotent request cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          return true\n        }\n\n        if (client[kRunning] > 0 && (request.upgrade || request.method === 'CONNECT')) {\n          // Don't dispatch an upgrade until all preceding requests have completed.\n          // A misbehaving server might upgrade the connection before all pipelined\n          // request has completed.\n          return true\n        }\n\n        if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 &&\n          (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) {\n          // Request with stream or iterator body can error while other requests\n          // are inflight and indirectly error those as well.\n          // Ensure this doesn't happen by waiting for inflight\n          // to complete before dispatching.\n\n          // Request with stream or iterator body cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          return true\n        }\n      }\n\n      return false\n    }\n  }\n}\n\nfunction onHttpSocketError (err) {\n  assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')\n\n  const parser = this[kParser]\n\n  // On Mac OS, we get an ECONNRESET even if there is a full body to be forwarded\n  // to the user.\n  if (err.code === 'ECONNRESET' && parser.statusCode && !parser.shouldKeepAlive) {\n    // We treat all incoming data so for as a valid response.\n    parser.onMessageComplete()\n    return\n  }\n\n  this[kError] = err\n\n  this[kClient][kOnError](err)\n}\n\nfunction onHttpSocketReadable () {\n  this[kParser]?.readMore()\n}\n\nfunction onHttpSocketEnd () {\n  const parser = this[kParser]\n\n  if (parser.statusCode && !parser.shouldKeepAlive) {\n    // We treat all incoming data so far as a valid response.\n    parser.onMessageComplete()\n    return\n  }\n\n  util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))\n}\n\nfunction onHttpSocketClose () {\n  const parser = this[kParser]\n\n  if (parser) {\n    if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {\n      // We treat all incoming data so far as a valid response.\n      parser.onMessageComplete()\n    }\n\n    this[kParser].destroy()\n    this[kParser] = null\n  }\n\n  const err = this[kError] || new SocketError('closed', util.getSocketInfo(this))\n\n  const client = this[kClient]\n\n  client[kSocket] = null\n  client[kHTTPContext] = null // TODO (fix): This is hacky...\n\n  if (client.destroyed) {\n    assert(client[kPending] === 0)\n\n    // Fail entire queue.\n    const requests = client[kQueue].splice(client[kRunningIdx])\n    for (let i = 0; i < requests.length; i++) {\n      const request = requests[i]\n      util.errorRequest(client, request, err)\n    }\n  } else if (client[kRunning] > 0 && err.code !== 'UND_ERR_INFO') {\n    // Fail head of pipeline.\n    const request = client[kQueue][client[kRunningIdx]]\n    client[kQueue][client[kRunningIdx]++] = null\n\n    util.errorRequest(client, request, err)\n  }\n\n  client[kPendingIdx] = client[kRunningIdx]\n\n  assert(client[kRunning] === 0)\n\n  client.emit('disconnect', client[kUrl], [client], err)\n\n  client[kResume]()\n}\n\nfunction onSocketClose () {\n  this[kClosed] = true\n}\n\n/**\n * @param {import('./client.js')} client\n */\nfunction resumeH1 (client) {\n  const socket = client[kSocket]\n\n  if (socket && !socket.destroyed) {\n    if (client[kSize] === 0) {\n      if (!socket[kNoRef] && socket.unref) {\n        socket.unref()\n        socket[kNoRef] = true\n      }\n    } else if (socket[kNoRef] && socket.ref) {\n      socket.ref()\n      socket[kNoRef] = false\n    }\n\n    if (client[kSize] === 0) {\n      if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) {\n        socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE)\n      }\n    } else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) {\n      if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) {\n        const request = client[kQueue][client[kRunningIdx]]\n        const headersTimeout = request.headersTimeout != null\n          ? request.headersTimeout\n          : client[kHeadersTimeout]\n        socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS)\n      }\n    }\n  }\n}\n\n// https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2\nfunction shouldSendContentLength (method) {\n  return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT'\n}\n\n/**\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @returns\n */\nfunction writeH1 (client, request) {\n  const { method, path, host, upgrade, blocking, reset } = request\n\n  let { body, headers, contentLength } = request\n\n  // https://tools.ietf.org/html/rfc7231#section-4.3.1\n  // https://tools.ietf.org/html/rfc7231#section-4.3.2\n  // https://tools.ietf.org/html/rfc7231#section-4.3.5\n\n  // Sending a payload body on a request that does not\n  // expect it can cause undefined behavior on some\n  // servers and corrupt connection state. Do not\n  // re-use the connection for further requests.\n\n  const expectsPayload = (\n    method === 'PUT' ||\n    method === 'POST' ||\n    method === 'PATCH' ||\n    method === 'QUERY' ||\n    method === 'PROPFIND' ||\n    method === 'PROPPATCH'\n  )\n\n  if (util.isFormDataLike(body)) {\n    if (!extractBody) {\n      extractBody = require('../web/fetch/body.js').extractBody\n    }\n\n    const [bodyStream, contentType] = extractBody(body)\n    if (request.contentType == null) {\n      headers.push('content-type', contentType)\n    }\n    body = bodyStream.stream\n    contentLength = bodyStream.length\n  } else if (util.isBlobLike(body) && request.contentType == null && body.type) {\n    headers.push('content-type', body.type)\n  }\n\n  if (body && typeof body.read === 'function') {\n    // Try to read EOF in order to get length.\n    body.read(0)\n  }\n\n  const bodyLength = util.bodyLength(body)\n\n  contentLength = bodyLength ?? contentLength\n\n  if (contentLength === null) {\n    contentLength = request.contentLength\n  }\n\n  if (contentLength === 0 && !expectsPayload) {\n    // https://tools.ietf.org/html/rfc7230#section-3.3.2\n    // A user agent SHOULD NOT send a Content-Length header field when\n    // the request message does not contain a payload body and the method\n    // semantics do not anticipate such a body.\n\n    contentLength = null\n  }\n\n  // https://github.com/nodejs/undici/issues/2046\n  // A user agent may send a Content-Length header with 0 value, this should be allowed.\n  if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) {\n    if (client[kStrictContentLength]) {\n      util.errorRequest(client, request, new RequestContentLengthMismatchError())\n      return false\n    }\n\n    process.emitWarning(new RequestContentLengthMismatchError())\n  }\n\n  const socket = client[kSocket]\n\n  /**\n   * @param {Error} [err]\n   * @returns {void}\n   */\n  const abort = (err) => {\n    if (request.aborted || request.completed) {\n      return\n    }\n\n    util.errorRequest(client, request, err || new RequestAbortedError())\n\n    util.destroy(body)\n    util.destroy(socket, new InformationalError('aborted'))\n  }\n\n  try {\n    request.onRequestStart(abort, null)\n  } catch (err) {\n    util.errorRequest(client, request, err)\n  }\n\n  if (request.aborted) {\n    return false\n  }\n\n  if (method === 'HEAD') {\n    // https://github.com/mcollina/undici/issues/258\n    // Close after a HEAD request to interop with misbehaving servers\n    // that may send a body in the response.\n\n    socket[kReset] = true\n  }\n\n  if (upgrade || method === 'CONNECT') {\n    // On CONNECT or upgrade, block pipeline from dispatching further\n    // requests on this connection.\n\n    socket[kReset] = true\n  }\n\n  if (reset != null) {\n    socket[kReset] = reset\n  }\n\n  if (client[kMaxRequests] && ++socket[kCounter] >= client[kMaxRequests]) {\n    socket[kReset] = true\n  }\n\n  if (blocking) {\n    socket[kBlocking] = true\n  }\n\n  if (socket.setTypeOfService) {\n    socket.setTypeOfService(request.typeOfService)\n  }\n\n  let header = `${method} ${path} HTTP/1.1\\r\\n`\n\n  if (typeof host === 'string') {\n    header += `host: ${host}\\r\\n`\n  } else {\n    header += client[kHostHeader]\n  }\n\n  if (upgrade) {\n    header += `connection: upgrade\\r\\nupgrade: ${upgrade}\\r\\n`\n  } else if (client[kPipelining] && !socket[kReset]) {\n    header += 'connection: keep-alive\\r\\n'\n  } else {\n    header += 'connection: close\\r\\n'\n  }\n\n  if (Array.isArray(headers)) {\n    for (let n = 0; n < headers.length; n += 2) {\n      const key = headers[n + 0]\n      const val = headers[n + 1]\n\n      if (Array.isArray(val)) {\n        for (let i = 0; i < val.length; i++) {\n          header += `${key}: ${val[i]}\\r\\n`\n        }\n      } else {\n        header += `${key}: ${val}\\r\\n`\n      }\n    }\n  }\n\n  if (channels.sendHeaders.hasSubscribers) {\n    channels.sendHeaders.publish({ request, headers: header, socket })\n  }\n\n  if (!body || bodyLength === 0) {\n    writeBuffer(abort, null, client, request, socket, contentLength, header, expectsPayload)\n  } else if (util.isBuffer(body)) {\n    writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload)\n  } else if (util.isBlobLike(body)) {\n    if (typeof body.stream === 'function') {\n      writeIterable(abort, body.stream(), client, request, socket, contentLength, header, expectsPayload)\n    } else {\n      writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload)\n    }\n  } else if (util.isStream(body)) {\n    writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload)\n  } else if (util.isIterable(body)) {\n    writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload)\n  } else {\n    assert(false)\n  }\n\n  return true\n}\n\n/**\n * @param {AbortCallback} abort\n * @param {import('stream').Stream} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n */\nfunction writeStream (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined')\n\n  let finished = false\n\n  const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header })\n\n  /**\n   * @param {Buffer} chunk\n   * @returns {void}\n   */\n  const onData = function (chunk) {\n    if (finished) {\n      return\n    }\n\n    try {\n      if (!writer.write(chunk) && this.pause) {\n        this.pause()\n      }\n    } catch (err) {\n      util.destroy(this, err)\n    }\n  }\n\n  /**\n   * @returns {void}\n   */\n  const onDrain = function () {\n    if (finished) {\n      return\n    }\n\n    if (body.resume) {\n      body.resume()\n    }\n  }\n\n  /**\n   * @returns {void}\n   */\n  const onClose = function () {\n    // 'close' might be emitted *before* 'error' for\n    // broken streams. Wait a tick to avoid this case.\n    queueMicrotask(() => {\n      // It's only safe to remove 'error' listener after\n      // 'close'.\n      body.removeListener('error', onFinished)\n    })\n\n    if (!finished) {\n      const err = new RequestAbortedError()\n      queueMicrotask(() => onFinished(err))\n    }\n  }\n\n  /**\n   * @param {Error} [err]\n   * @returns\n   */\n  const onFinished = function (err) {\n    if (finished) {\n      return\n    }\n\n    finished = true\n\n    assert(socket.destroyed || (socket[kWriting] && client[kRunning] <= 1))\n\n    socket\n      .off('drain', onDrain)\n      .off('error', onFinished)\n\n    body\n      .removeListener('data', onData)\n      .removeListener('end', onFinished)\n      .removeListener('close', onClose)\n\n    if (!err) {\n      try {\n        writer.end()\n      } catch (er) {\n        err = er\n      }\n    }\n\n    writer.destroy(err)\n\n    if (err && (err.code !== 'UND_ERR_INFO' || err.message !== 'reset')) {\n      util.destroy(body, err)\n    } else {\n      util.destroy(body)\n    }\n  }\n\n  body\n    .on('data', onData)\n    .on('end', onFinished)\n    .on('error', onFinished)\n    .on('close', onClose)\n\n  if (body.resume) {\n    body.resume()\n  }\n\n  socket\n    .on('drain', onDrain)\n    .on('error', onFinished)\n\n  if (body.errorEmitted ?? body.errored) {\n    setImmediate(onFinished, body.errored)\n  } else if (body.endEmitted ?? body.readableEnded) {\n    setImmediate(onFinished, null)\n  }\n\n  if (body.closeEmitted ?? body.closed) {\n    setImmediate(onClose)\n  }\n}\n\n/**\n * @typedef AbortCallback\n * @type {Function}\n * @param {Error} [err]\n * @returns {void}\n */\n\n/**\n * @param {AbortCallback} abort\n * @param {Uint8Array|null} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n * @returns {void}\n */\nfunction writeBuffer (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  try {\n    if (!body) {\n      if (contentLength === 0) {\n        socket.write(`${header}content-length: 0\\r\\n\\r\\n`, 'latin1')\n      } else {\n        assert(contentLength === null, 'no body must not have content length')\n        socket.write(`${header}\\r\\n`, 'latin1')\n      }\n    } else if (util.isBuffer(body)) {\n      assert(contentLength === body.byteLength, 'buffer body must have content length')\n\n      socket.cork()\n      socket.write(`${header}content-length: ${contentLength}\\r\\n\\r\\n`, 'latin1')\n      socket.write(body)\n      socket.uncork()\n      request.onBodySent(body)\n\n      if (!expectsPayload && request.reset !== false) {\n        socket[kReset] = true\n      }\n    }\n    request.onRequestSent()\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  }\n}\n\n/**\n * @param {AbortCallback} abort\n * @param {Blob} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n * @returns {Promise<void>}\n */\nasync function writeBlob (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  assert(contentLength === body.size, 'blob body must have content length')\n\n  try {\n    if (contentLength != null && contentLength !== body.size) {\n      throw new RequestContentLengthMismatchError()\n    }\n\n    const buffer = Buffer.from(await body.arrayBuffer())\n\n    socket.cork()\n    socket.write(`${header}content-length: ${contentLength}\\r\\n\\r\\n`, 'latin1')\n    socket.write(buffer)\n    socket.uncork()\n\n    request.onBodySent(buffer)\n    request.onRequestSent()\n\n    if (!expectsPayload && request.reset !== false) {\n      socket[kReset] = true\n    }\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  }\n}\n\n/**\n * @param {AbortCallback} abort\n * @param {Iterable} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n * @returns {Promise<void>}\n */\nasync function writeIterable (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined')\n\n  let callback = null\n  function onDrain () {\n    if (callback) {\n      const cb = callback\n      callback = null\n      cb()\n    }\n  }\n\n  const waitForDrain = () => new Promise((resolve, reject) => {\n    assert(callback === null)\n\n    if (socket[kError]) {\n      reject(socket[kError])\n    } else {\n      callback = resolve\n    }\n  })\n\n  socket\n    .on('close', onDrain)\n    .on('drain', onDrain)\n\n  const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header })\n  try {\n    // It's up to the user to somehow abort the async iterable.\n    for await (const chunk of body) {\n      if (socket[kError]) {\n        throw socket[kError]\n      }\n\n      if (!writer.write(chunk)) {\n        await waitForDrain()\n      }\n    }\n\n    writer.end()\n  } catch (err) {\n    writer.destroy(err)\n  } finally {\n    socket\n      .off('close', onDrain)\n      .off('drain', onDrain)\n  }\n}\n\nclass AsyncWriter {\n  /**\n   *\n   * @param {object} arg\n   * @param {AbortCallback} arg.abort\n   * @param {import('net').Socket} arg.socket\n   * @param {import('../core/request.js')} arg.request\n   * @param {number} arg.contentLength\n   * @param {import('./client.js')} arg.client\n   * @param {boolean} arg.expectsPayload\n   * @param {string} arg.header\n   */\n  constructor ({ abort, socket, request, contentLength, client, expectsPayload, header }) {\n    this.socket = socket\n    this.request = request\n    this.contentLength = contentLength\n    this.client = client\n    this.bytesWritten = 0\n    this.expectsPayload = expectsPayload\n    this.header = header\n    this.abort = abort\n\n    socket[kWriting] = true\n  }\n\n  /**\n   * @param {string|Uint8Array} chunk\n   * @returns\n   */\n  write (chunk) {\n    const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this\n\n    if (socket[kError]) {\n      throw socket[kError]\n    }\n\n    if (socket.destroyed) {\n      return false\n    }\n\n    const len = chunk instanceof Uint8Array ? chunk.byteLength : Buffer.byteLength(chunk)\n    if (!len) {\n      return true\n    }\n\n    // We should defer writing chunks.\n    if (contentLength !== null && bytesWritten + len > contentLength) {\n      if (client[kStrictContentLength]) {\n        throw new RequestContentLengthMismatchError()\n      }\n\n      process.emitWarning(new RequestContentLengthMismatchError())\n    }\n\n    socket.cork()\n\n    if (bytesWritten === 0) {\n      if (!expectsPayload && request.reset !== false) {\n        socket[kReset] = true\n      }\n\n      if (contentLength === null) {\n        socket.write(`${header}transfer-encoding: chunked\\r\\n`, 'latin1')\n      } else {\n        socket.write(`${header}content-length: ${contentLength}\\r\\n\\r\\n`, 'latin1')\n      }\n    }\n\n    if (contentLength === null) {\n      socket.write(`\\r\\n${len.toString(16)}\\r\\n`, 'latin1')\n    }\n\n    this.bytesWritten += len\n\n    const ret = socket.write(chunk)\n\n    socket.uncork()\n\n    request.onBodySent(chunk)\n\n    if (!ret) {\n      if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {\n        if (socket[kParser].timeout.refresh) {\n          socket[kParser].timeout.refresh()\n        }\n      }\n    }\n\n    return ret\n  }\n\n  /**\n   * @returns {void}\n   */\n  end () {\n    const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this\n    request.onRequestSent()\n\n    socket[kWriting] = false\n\n    if (socket[kError]) {\n      throw socket[kError]\n    }\n\n    if (socket.destroyed) {\n      return\n    }\n\n    if (bytesWritten === 0) {\n      if (expectsPayload) {\n        // https://tools.ietf.org/html/rfc7230#section-3.3.2\n        // A user agent SHOULD send a Content-Length in a request message when\n        // no Transfer-Encoding is sent and the request method defines a meaning\n        // for an enclosed payload body.\n\n        socket.write(`${header}content-length: 0\\r\\n\\r\\n`, 'latin1')\n      } else {\n        socket.write(`${header}\\r\\n`, 'latin1')\n      }\n    } else if (contentLength === null) {\n      socket.write('\\r\\n0\\r\\n\\r\\n', 'latin1')\n    }\n\n    if (contentLength !== null && bytesWritten !== contentLength) {\n      if (client[kStrictContentLength]) {\n        throw new RequestContentLengthMismatchError()\n      } else {\n        process.emitWarning(new RequestContentLengthMismatchError())\n      }\n    }\n\n    if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {\n      if (socket[kParser].timeout.refresh) {\n        socket[kParser].timeout.refresh()\n      }\n    }\n\n    client[kResume]()\n  }\n\n  /**\n   * @param {Error} [err]\n   * @returns {void}\n   */\n  destroy (err) {\n    const { socket, client, abort } = this\n\n    socket[kWriting] = false\n\n    if (err) {\n      assert(client[kRunning] <= 1, 'pipeline should only contain this request')\n      abort(err)\n    }\n  }\n}\n\nmodule.exports = connectH1\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { pipeline } = require('node:stream')\nconst util = require('../core/util.js')\nconst {\n  RequestContentLengthMismatchError,\n  RequestAbortedError,\n  SocketError,\n  InformationalError,\n  InvalidArgumentError\n} = require('../core/errors.js')\nconst {\n  kUrl,\n  kReset,\n  kClient,\n  kRunning,\n  kPending,\n  kQueue,\n  kPendingIdx,\n  kRunningIdx,\n  kError,\n  kSocket,\n  kStrictContentLength,\n  kOnError,\n  kMaxConcurrentStreams,\n  kPingInterval,\n  kHTTP2Session,\n  kHTTP2InitialWindowSize,\n  kHTTP2ConnectionWindowSize,\n  kResume,\n  kSize,\n  kHTTPContext,\n  kClosed,\n  kBodyTimeout,\n  kEnableConnectProtocol,\n  kRemoteSettings,\n  kHTTP2Stream,\n  kHTTP2SessionState\n} = require('../core/symbols.js')\nconst { channels } = require('../core/diagnostics.js')\n\nconst kOpenStreams = Symbol('open streams')\nconst kRequestStreamId = Symbol('request stream id')\nconst kRequestStream = Symbol('request stream')\nconst kRequestStreamCleanup = Symbol('request stream cleanup')\nconst kRequestStreamOnData = Symbol('request stream on data')\nconst kRequestStreamOnCloseError = Symbol('request stream on close error')\nconst kReceivedGoAway = Symbol('received goaway')\n\nlet extractBody\n\n/** @type {import('http2')} */\nlet http2\ntry {\n  http2 = require('node:http2')\n} catch {\n  // @ts-ignore\n  http2 = { constants: {} }\n}\n\nconst {\n  constants: {\n    HTTP2_HEADER_AUTHORITY,\n    HTTP2_HEADER_METHOD,\n    HTTP2_HEADER_PATH,\n    HTTP2_HEADER_SCHEME,\n    HTTP2_HEADER_CONTENT_LENGTH,\n    HTTP2_HEADER_EXPECT,\n    HTTP2_HEADER_STATUS,\n    HTTP2_HEADER_PROTOCOL,\n    NGHTTP2_NO_ERROR,\n    NGHTTP2_REFUSED_STREAM\n  }\n} = http2\n\nfunction getGoAwayError (session, errorCode) {\n  return session[kError] ||\n    (errorCode === NGHTTP2_NO_ERROR\n      ? new InformationalError(`HTTP/2: \"GOAWAY\" frame received with code ${errorCode}`)\n      : new SocketError(`HTTP/2: \"GOAWAY\" frame received with code ${errorCode}`, util.getSocketInfo(session[kSocket])))\n}\n\nfunction getGoAwayPendingIdx (client, lastStreamID) {\n  const maxAcceptedStreamID = Number.isInteger(lastStreamID) ? lastStreamID : Number.MAX_SAFE_INTEGER\n\n  for (let i = client[kRunningIdx]; i < client[kPendingIdx]; i++) {\n    const request = client[kQueue][i]\n\n    if (request == null) {\n      continue\n    }\n\n    if (typeof request[kRequestStreamId] !== 'number' || request[kRequestStreamId] > maxAcceptedStreamID) {\n      return i\n    }\n  }\n\n  return client[kPendingIdx]\n}\n\nfunction detachRequestFromStream (request) {\n  request[kRequestStreamId] = null\n  request[kRequestStream] = null\n  request[kRequestStreamCleanup] = null\n}\n\nfunction bindRequestToStream (request, stream, cleanup) {\n  const previousCleanup = request[kRequestStreamCleanup]\n  detachRequestFromStream(request)\n  previousCleanup?.()\n  request[kRequestStreamId] = stream.id\n  request[kRequestStream] = stream\n  request[kRequestStreamCleanup] = cleanup\n}\n\nfunction clearRequestStream (request) {\n  const cleanup = request[kRequestStreamCleanup]\n  detachRequestFromStream(request)\n  cleanup?.()\n}\n\nfunction canRetryRequestAfterGoAway (request) {\n  const { body } = request\n\n  return body == null || util.isBuffer(body) || util.isBlobLike(body)\n}\n\nfunction closeRequestStream (request, code = NGHTTP2_REFUSED_STREAM) {\n  const stream = request[kRequestStream]\n\n  clearRequestStream(request)\n\n  if (stream != null && !stream.destroyed && !stream.closed) {\n    try {\n      stream.close(code)\n    } catch {}\n  }\n}\n\nfunction connectH2 (client, socket) {\n  client[kSocket] = socket\n\n  const http2InitialWindowSize = client[kHTTP2InitialWindowSize]\n  const http2ConnectionWindowSize = client[kHTTP2ConnectionWindowSize]\n\n  const session = http2.connect(client[kUrl], {\n    createConnection: () => socket,\n    peerMaxConcurrentStreams: client[kMaxConcurrentStreams],\n    settings: {\n      // TODO(metcoder95): add support for PUSH\n      enablePush: false,\n      ...(http2InitialWindowSize != null ? { initialWindowSize: http2InitialWindowSize } : null)\n    }\n  })\n\n  client[kSocket] = socket\n  session[kOpenStreams] = 0\n  session[kClient] = client\n  session[kSocket] = socket\n  session[kHTTP2SessionState] = {\n    ping: {\n      interval: client[kPingInterval] === 0 ? null : setInterval(onHttp2SendPing, client[kPingInterval], session).unref()\n    }\n  }\n  session[kReceivedGoAway] = false\n  // We set it to true by default in a best-effort; however once connected to an H2 server\n  // we will check if extended CONNECT protocol is supported or not\n  // and set this value accordingly.\n  session[kEnableConnectProtocol] = false\n  // States whether or not we have received the remote settings from the server\n  session[kRemoteSettings] = false\n\n  // Apply connection-level flow control once connected (if supported).\n  if (http2ConnectionWindowSize) {\n    util.addListener(session, 'connect', applyConnectionWindowSize.bind(session, http2ConnectionWindowSize))\n  }\n\n  util.addListener(session, 'error', onHttp2SessionError)\n  util.addListener(session, 'frameError', onHttp2FrameError)\n  util.addListener(session, 'end', onHttp2SessionEnd)\n  util.addListener(session, 'goaway', onHttp2SessionGoAway)\n  util.addListener(session, 'close', onHttp2SessionClose)\n  util.addListener(session, 'remoteSettings', onHttp2RemoteSettings)\n  // TODO (@metcoder95): implement SETTINGS support\n  // util.addListener(session, 'localSettings', onHttp2RemoteSettings)\n\n  session.unref()\n\n  client[kHTTP2Session] = session\n  socket[kHTTP2Session] = session\n\n  util.addListener(socket, 'error', onHttp2SocketError)\n  util.addListener(socket, 'end', onHttp2SocketEnd)\n  util.addListener(socket, 'close', onHttp2SocketClose)\n\n  socket[kClosed] = false\n  socket.on('close', onSocketClose)\n\n  return {\n    version: 'h2',\n    defaultPipelining: Infinity,\n    /**\n     * @param {import('../core/request.js')} request\n     * @returns {boolean}\n    */\n    write (request) {\n      return writeH2(client, request)\n    },\n    /**\n     * @returns {void}\n     */\n    resume () {\n      resumeH2(client)\n    },\n    /**\n     * @param {Error | null} err\n     * @param {() => void} callback\n     */\n    destroy (err, callback) {\n      if (socket[kClosed]) {\n        queueMicrotask(callback)\n      } else {\n        socket.destroy(err).on('close', callback)\n      }\n    },\n    /**\n     * @type {boolean}\n     */\n    get destroyed () {\n      return socket.destroyed\n    },\n    /**\n     * @param {import('../core/request.js')} request\n     * @returns {boolean}\n    */\n    busy (request) {\n      if (session[kRemoteSettings] === false && client[kRunning] > 0) {\n        return true\n      }\n\n      if (client[kRunning] >= client[kMaxConcurrentStreams]) {\n        return true\n      }\n\n      if (request != null) {\n        if (client[kRunning] > 0) {\n          // We are already processing requests\n\n          // Non-idempotent request cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          if (request.idempotent === false) return true\n          // Don't dispatch an upgrade until all preceding requests have completed.\n          // Possibly, we do not have remote settings confirmed yet.\n          if ((request.upgrade === 'websocket' || request.method === 'CONNECT') && session[kRemoteSettings] === false) return true\n          // Request with stream or iterator body can error while other requests\n          // are inflight and indirectly error those as well.\n          // Ensure this doesn't happen by waiting for inflight\n          // to complete before dispatching.\n\n          // Request with stream or iterator body cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          if (util.bodyLength(request.body) !== 0 &&\n            (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) return true\n        } else {\n          return (request.upgrade === 'websocket' || request.method === 'CONNECT') && session[kRemoteSettings] === false\n        }\n      }\n\n      return false\n    }\n  }\n}\n\nfunction resumeH2 (client) {\n  const socket = client[kSocket]\n\n  if (socket?.destroyed === false) {\n    if (client[kSize] === 0 || client[kMaxConcurrentStreams] === 0) {\n      socket.unref()\n      client[kHTTP2Session].unref()\n    } else {\n      socket.ref()\n      client[kHTTP2Session].ref()\n    }\n  }\n}\n\nfunction applyConnectionWindowSize (connectionWindowSize) {\n  try {\n    if (typeof this.setLocalWindowSize === 'function') {\n      this.setLocalWindowSize(connectionWindowSize)\n    }\n  } catch {\n    // Best-effort only.\n  }\n}\n\nfunction onHttp2RemoteSettings (settings) {\n  // Fallbacks are a safe bet, remote setting will always override\n  this[kClient][kMaxConcurrentStreams] = settings.maxConcurrentStreams ?? this[kClient][kMaxConcurrentStreams]\n  /**\n   * From RFC-8441\n   * A sender MUST NOT send a SETTINGS_ENABLE_CONNECT_PROTOCOL parameter\n   * with the value of 0 after previously sending a value of 1.\n   */\n  // Note: Cannot be tested in Node, it does not supports disabling the extended CONNECT protocol once enabled\n  if (this[kRemoteSettings] === true && this[kEnableConnectProtocol] === true && settings.enableConnectProtocol === false) {\n    const err = new InformationalError('HTTP/2: Server disabled extended CONNECT protocol against RFC-8441')\n    this[kSocket][kError] = err\n    this[kClient][kOnError](err)\n    return\n  }\n\n  this[kEnableConnectProtocol] = settings.enableConnectProtocol ?? this[kEnableConnectProtocol]\n  this[kRemoteSettings] = true\n  this[kClient][kResume]()\n}\n\nfunction onHttp2SendPing (session) {\n  const state = session[kHTTP2SessionState]\n  if ((session.closed || session.destroyed) && state.ping.interval != null) {\n    clearInterval(state.ping.interval)\n    state.ping.interval = null\n    return\n  }\n\n  // If no ping sent, do nothing\n  session.ping(onPing.bind(session))\n\n  function onPing (err, duration) {\n    const client = this[kClient]\n    const socket = this[kSocket]\n\n    if (err != null) {\n      const error = new InformationalError(`HTTP/2: \"PING\" errored - type ${err.message}`)\n      socket[kError] = error\n      client[kOnError](error)\n    } else {\n      client.emit('ping', duration)\n    }\n  }\n}\n\nfunction onHttp2SessionError (err) {\n  assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')\n\n  this[kSocket][kError] = err\n  this[kClient][kOnError](err)\n}\n\nfunction onHttp2FrameError (type, code, id) {\n  if (id === 0) {\n    const err = new InformationalError(`HTTP/2: \"frameError\" received - type ${type}, code ${code}`)\n    this[kSocket][kError] = err\n    this[kClient][kOnError](err)\n  }\n}\n\nfunction onHttp2SessionEnd () {\n  const err = new SocketError('other side closed', util.getSocketInfo(this[kSocket]))\n  this.destroy(err)\n  util.destroy(this[kSocket], err)\n}\n\n/**\n * This is the root cause of #3011\n * We need to handle GOAWAY frames properly, and trigger the session close\n * along with the socket right away\n *\n * @this {import('http2').ClientHttp2Session}\n * @param {number} errorCode\n * @param {number} lastStreamID\n */\nfunction onHttp2SessionGoAway (errorCode, lastStreamID) {\n  if (this[kReceivedGoAway]) {\n    return\n  }\n\n  this[kReceivedGoAway] = true\n\n  const err = getGoAwayError(this, errorCode)\n  const client = this[kClient]\n  const previousPendingIdx = client[kPendingIdx]\n  const pendingIdx = getGoAwayPendingIdx(client, lastStreamID)\n  const retriableRequests = []\n\n  for (let i = pendingIdx; i < previousPendingIdx; i++) {\n    const request = client[kQueue][i]\n\n    if (request != null) {\n      closeRequestStream(request)\n\n      if (canRetryRequestAfterGoAway(request)) {\n        retriableRequests.push(request)\n      } else {\n        util.errorRequest(client, request, err)\n      }\n    }\n  }\n\n  if (pendingIdx !== previousPendingIdx) {\n    const remainingPendingRequests = client[kQueue].slice(previousPendingIdx)\n    client[kQueue].length = pendingIdx\n    client[kQueue].push(...retriableRequests, ...remainingPendingRequests)\n  }\n\n  if (client[kHTTP2Session] === this) {\n    client[kSocket] = null\n    client[kHTTPContext] = null\n    client[kHTTP2Session] = null\n  }\n\n  if (!this.closed && !this.destroyed) {\n    this.close()\n  }\n\n  client[kPendingIdx] = pendingIdx\n\n  client.emit('disconnect', client[kUrl], [client], err)\n\n  client[kResume]()\n}\n\nfunction onHttp2SessionClose () {\n  const { [kClient]: client, [kHTTP2SessionState]: state, [kSocket]: socket } = this\n\n  const err = socket[kError] || this[kError] || new SocketError('closed', util.getSocketInfo(socket))\n\n  if (client[kHTTP2Session] === this) {\n    client[kSocket] = null\n    client[kHTTPContext] = null\n    client[kHTTP2Session] = null\n  }\n\n  if (state.ping.interval != null) {\n    clearInterval(state.ping.interval)\n    state.ping.interval = null\n  }\n\n  if (client.destroyed) {\n    assert(client[kPending] === 0)\n\n    // Fail entire queue.\n    const requests = client[kQueue].splice(client[kRunningIdx])\n    for (let i = 0; i < requests.length; i++) {\n      const request = requests[i]\n      util.errorRequest(client, request, err)\n    }\n  }\n}\n\nfunction onHttp2SocketClose () {\n  const err = this[kError] || new SocketError('closed', util.getSocketInfo(this))\n\n  const session = this[kHTTP2Session]\n  const client = session[kClient]\n\n  if (client[kSocket] !== this) {\n    // Ignore stale socket closes from a detached GOAWAY session and from any\n    // session that has already been replaced. If the session was detached\n    // without a GOAWAY and there is no replacement yet, we still need the\n    // close event to flush the client state.\n    if (session[kReceivedGoAway] || (client[kHTTP2Session] != null && client[kHTTP2Session] !== session)) {\n      return\n    }\n  }\n\n  client[kSocket] = null\n  client[kHTTPContext] = null\n  if (client[kHTTP2Session] === session) {\n    client[kHTTP2Session] = null\n  }\n\n  session.destroy(err)\n\n  client[kPendingIdx] = client[kRunningIdx]\n\n  assert(client[kRunning] === 0)\n\n  client.emit('disconnect', client[kUrl], [client], err)\n\n  client[kResume]()\n}\n\nfunction onHttp2SocketError (err) {\n  assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')\n\n  this[kError] = err\n\n  this[kClient][kOnError](err)\n}\n\nfunction onHttp2SocketEnd () {\n  util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))\n}\n\nfunction onSocketClose () {\n  this[kClosed] = true\n}\n\nfunction noop () {}\n\nfunction closeStreamSession (stream) {\n  const session = stream[kHTTP2Session]\n\n  stream[kHTTP2Session] = null\n  session[kOpenStreams] -= 1\n  if (session[kOpenStreams] === 0) {\n    session.unref()\n  }\n}\n\nfunction onUpgradeStreamClose () {\n  this.off('error', noop)\n\n  const failUpgradeStream = this[kRequestStreamOnCloseError]\n  this[kRequestStreamOnCloseError] = null\n\n  failUpgradeStream(new InformationalError('HTTP/2: stream closed before response headers'))\n  closeStreamSession(this)\n}\n\nfunction onRequestStreamClose () {\n  const onData = this[kRequestStreamOnData]\n\n  this[kRequestStreamOnData] = null\n  this.off('data', onData)\n  this.off('error', noop)\n  closeStreamSession(this)\n}\n\n// https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2\nfunction shouldSendContentLength (method) {\n  return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT'\n}\n\nfunction writeH2 (client, request) {\n  const requestTimeout = request.bodyTimeout ?? client[kBodyTimeout]\n  const session = client[kHTTP2Session]\n  const { method, path, host, upgrade, expectContinue, signal, protocol, headers: reqHeaders } = request\n  let { body } = request\n\n  if (upgrade != null && upgrade !== 'websocket') {\n    util.errorRequest(client, request, new InvalidArgumentError(`Custom upgrade \"${upgrade}\" not supported over HTTP/2`))\n    return false\n  }\n\n  const headers = {}\n  for (let n = 0; n < reqHeaders.length; n += 2) {\n    const key = reqHeaders[n + 0]\n    const val = reqHeaders[n + 1]\n\n    if (key === 'cookie') {\n      if (headers[key] != null) {\n        headers[key] = Array.isArray(headers[key]) ? (headers[key].push(val), headers[key]) : [headers[key], val]\n      } else {\n        headers[key] = val\n      }\n\n      continue\n    }\n\n    if (Array.isArray(val)) {\n      for (let i = 0; i < val.length; i++) {\n        if (headers[key]) {\n          headers[key] += `, ${val[i]}`\n        } else {\n          headers[key] = val[i]\n        }\n      }\n    } else if (headers[key]) {\n      headers[key] += `, ${val}`\n    } else {\n      headers[key] = val\n    }\n  }\n\n  /** @type {import('node:http2').ClientHttp2Stream} */\n  let stream = null\n\n  const { hostname, port } = client[kUrl]\n\n  headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname}${port ? `:${port}` : ''}`\n  headers[HTTP2_HEADER_METHOD] = method\n\n  let requestFinalized = false\n  const finalizeRequest = (resetPendingIdx = false) => {\n    if (requestFinalized) {\n      return\n    }\n\n    requestFinalized = true\n    client[kQueue][client[kRunningIdx]++] = null\n\n    if (resetPendingIdx) {\n      client[kPendingIdx] = client[kRunningIdx]\n    }\n\n    client[kResume]()\n  }\n\n  const abort = (err, resetPendingIdx = false) => {\n    if (request.aborted || request.completed) {\n      return\n    }\n\n    err = err || new RequestAbortedError()\n\n    util.errorRequest(client, request, err)\n\n    if (stream != null) {\n      clearRequestStream(request)\n\n      // On Abort, we close the stream to send RST_STREAM frame\n      stream.close()\n\n      // We move the running index to the next request\n      client[kOnError](err)\n      finalizeRequest(resetPendingIdx)\n    }\n\n    // We do not destroy the socket as we can continue using the session\n    // the stream gets destroyed and the session remains to create new streams\n    util.destroy(body, err)\n  }\n\n  const requestStream = (headers, options) => {\n    try {\n      return session.request(headers, options)\n    } catch (err) {\n      if (err?.code !== 'ERR_HTTP2_INVALID_CONNECTION_HEADERS') {\n        throw err\n      }\n\n      const wrappedErr = new InformationalError(err.message, { cause: err })\n      session[kError] = wrappedErr\n      session[kSocket][kError] = wrappedErr\n\n      session.destroy(wrappedErr)\n      util.destroy(session[kSocket], wrappedErr)\n      abort(wrappedErr)\n\n      return null\n    }\n  }\n\n  try {\n    // We are already connected, streams are pending.\n    // We can call on connect, and wait for abort\n    request.onRequestStart(abort, null)\n  } catch (err) {\n    util.errorRequest(client, request, err)\n  }\n\n  if (request.aborted) {\n    return false\n  }\n\n  if (upgrade || method === 'CONNECT') {\n    session.ref()\n\n    const setupUpgradeStream = (stream) => {\n      let responseReceived = false\n\n      const removeUpgradeStreamListeners = () => {\n        stream.off('response', onUpgradeResponse)\n        stream.off('error', onUpgradeStreamError)\n        stream.off('end', onUpgradeStreamEnd)\n        stream.off('timeout', onUpgradeStreamTimeout)\n        stream.off('error', noop)\n      }\n\n      const releaseUpgradeStream = () => {\n        if (request[kRequestStream] === stream) {\n          detachRequestFromStream(request)\n        }\n\n        removeUpgradeStreamListeners()\n\n        if (!stream.destroyed && !stream.closed) {\n          stream.once('error', noop)\n        }\n      }\n\n      const failUpgradeStream = (err) => {\n        if (responseReceived || request.aborted || request.completed) {\n          return\n        }\n\n        releaseUpgradeStream()\n        abort(err, true)\n      }\n\n      const onUpgradeStreamError = () => {\n        if (typeof stream.rstCode === 'number' && stream.rstCode !== 0) {\n          failUpgradeStream(new InformationalError(`HTTP/2: \"stream error\" received - code ${stream.rstCode}`))\n        } else {\n          failUpgradeStream(new InformationalError('HTTP/2: stream errored before response headers'))\n        }\n      }\n\n      const onUpgradeStreamEnd = () => {\n        failUpgradeStream(new InformationalError('HTTP/2: stream half-closed (remote)'))\n      }\n\n      const onUpgradeStreamTimeout = () => {\n        failUpgradeStream(new InformationalError(`HTTP/2: \"stream timeout after ${requestTimeout}\"`))\n      }\n\n      const onUpgradeResponse = (headers, _flags) => {\n        responseReceived = true\n\n        const statusCode = headers[HTTP2_HEADER_STATUS]\n        delete headers[HTTP2_HEADER_STATUS]\n\n        request.onRequestUpgrade(statusCode, headers, stream)\n\n        if (request.aborted || request.completed) {\n          return\n        }\n\n        removeUpgradeStreamListeners()\n        detachRequestFromStream(request)\n        finalizeRequest()\n      }\n\n      bindRequestToStream(request, stream, releaseUpgradeStream)\n      stream.once('response', onUpgradeResponse)\n      stream.on('error', onUpgradeStreamError)\n      stream.once('end', onUpgradeStreamEnd)\n      stream.on('timeout', onUpgradeStreamTimeout)\n      stream[kHTTP2Session] = session\n      stream[kRequestStreamOnCloseError] = failUpgradeStream\n      stream.once('close', onUpgradeStreamClose)\n\n      ++session[kOpenStreams]\n      stream.setTimeout(requestTimeout)\n    }\n\n    if (upgrade === 'websocket') {\n      // We cannot upgrade to websocket if extended CONNECT protocol is not supported\n      if (session[kEnableConnectProtocol] === false) {\n        util.errorRequest(client, request, new InformationalError('HTTP/2: Extended CONNECT protocol not supported by server'))\n        session.unref()\n        return false\n      }\n\n      // We force the method to CONNECT\n      // as per RFC-8441\n      // https://datatracker.ietf.org/doc/html/rfc8441#section-4\n      headers[HTTP2_HEADER_METHOD] = 'CONNECT'\n      headers[HTTP2_HEADER_PROTOCOL] = 'websocket'\n      // :path and :scheme headers must be omitted when sending CONNECT but set if extended-CONNECT\n      headers[HTTP2_HEADER_PATH] = path\n\n      if (protocol === 'ws:' || protocol === 'wss:') {\n        headers[HTTP2_HEADER_SCHEME] = protocol === 'ws:' ? 'http' : 'https'\n      } else {\n        headers[HTTP2_HEADER_SCHEME] = protocol === 'http:' ? 'http' : 'https'\n      }\n\n      stream = requestStream(headers, { endStream: false, signal })\n      if (stream == null) {\n        session.unref()\n        return false\n      }\n      stream[kHTTP2Stream] = true\n      setupUpgradeStream(stream)\n      return true\n    }\n\n    // TODO: consolidate once we support CONNECT properly\n    // NOTE: We are already connected, streams are pending, first request\n    // will create a new stream. We trigger a request to create the stream and wait until\n    // `ready` event is triggered\n    // We disabled endStream to allow the user to write to the stream\n    stream = requestStream(headers, { endStream: false, signal })\n    if (stream == null) {\n      session.unref()\n      return false\n    }\n    stream[kHTTP2Stream] = true\n    setupUpgradeStream(stream)\n\n    return true\n  }\n\n  // https://tools.ietf.org/html/rfc7540#section-8.3\n  // :path and :scheme headers must be omitted when sending CONNECT\n  headers[HTTP2_HEADER_PATH] = path\n  headers[HTTP2_HEADER_SCHEME] = protocol === 'http:' ? 'http' : 'https'\n\n  // https://tools.ietf.org/html/rfc7231#section-4.3.1\n  // https://tools.ietf.org/html/rfc7231#section-4.3.2\n  // https://tools.ietf.org/html/rfc7231#section-4.3.5\n\n  // Sending a payload body on a request that does not\n  // expect it can cause undefined behavior on some\n  // servers and corrupt connection state. Do not\n  // re-use the connection for further requests.\n\n  const expectsPayload = (\n    method === 'PUT' ||\n    method === 'POST' ||\n    method === 'PATCH'\n  )\n\n  if (body && typeof body.read === 'function') {\n    // Try to read EOF in order to get length.\n    body.read(0)\n  }\n\n  let contentLength = util.bodyLength(body)\n\n  if (util.isFormDataLike(body)) {\n    extractBody ??= require('../web/fetch/body.js').extractBody\n\n    const [bodyStream, contentType] = extractBody(body)\n    headers['content-type'] = contentType\n\n    body = bodyStream.stream\n    contentLength = bodyStream.length\n  }\n\n  if (contentLength == null) {\n    contentLength = request.contentLength\n  }\n\n  if (contentLength === 0 && !expectsPayload) {\n    // https://tools.ietf.org/html/rfc7230#section-3.3.2\n    // A user agent SHOULD NOT send a Content-Length header field when\n    // the request message does not contain a payload body and the method\n    // semantics do not anticipate such a body.\n    // And for methods that don't expect a payload, omit Content-Length.\n    contentLength = null\n  }\n\n  // https://github.com/nodejs/undici/issues/2046\n  // A user agent may send a Content-Length header with 0 value, this should be allowed.\n  if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) {\n    if (client[kStrictContentLength]) {\n      util.errorRequest(client, request, new RequestContentLengthMismatchError())\n      return false\n    }\n\n    process.emitWarning(new RequestContentLengthMismatchError())\n  }\n\n  if (contentLength != null) {\n    assert(body || contentLength === 0, 'no body must not have content length')\n    headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`\n  }\n\n  session.ref()\n\n  if (channels.sendHeaders.hasSubscribers) {\n    let header = ''\n    for (const key in headers) {\n      header += `${key}: ${headers[key]}\\r\\n`\n    }\n    channels.sendHeaders.publish({ request, headers: header, socket: session[kSocket] })\n  }\n\n  // TODO(metcoder95): add support for sending trailers\n  const shouldEndStream = body === null\n  if (expectContinue) {\n    headers[HTTP2_HEADER_EXPECT] = '100-continue'\n    stream = requestStream(headers, { endStream: shouldEndStream, signal })\n    if (stream == null) {\n      return false\n    }\n    stream[kHTTP2Stream] = true\n    bindRequestToStream(request, stream, null)\n  } else {\n    stream = requestStream(headers, {\n      endStream: shouldEndStream,\n      signal\n    })\n    if (stream == null) {\n      return false\n    }\n    stream[kHTTP2Stream] = true\n    bindRequestToStream(request, stream, null)\n  }\n\n  // Increment counter as we have new streams open\n  ++session[kOpenStreams]\n  stream.setTimeout(requestTimeout)\n\n  // Track whether we received a response (headers)\n  let responseReceived = false\n  const onData = (chunk) => {\n    if (request.aborted || request.completed) {\n      return\n    }\n\n    if (request.onResponseData(chunk) === false) {\n      stream.pause()\n    }\n  }\n\n  const removeRequestStreamListeners = () => {\n    stream.off('error', noop)\n    stream.off('continue', writeBodyH2)\n    stream.off('response', onResponse)\n    stream.off('end', onEnd)\n    stream.off('error', onError)\n    stream.off('frameError', onFrameError)\n    stream.off('aborted', onAborted)\n    stream.off('timeout', onTimeout)\n    stream.off('trailers', onTrailers)\n    stream.off('data', onData)\n  }\n\n  const releaseRequestStream = () => {\n    if (request[kRequestStream] === stream) {\n      detachRequestFromStream(request)\n    }\n\n    removeRequestStreamListeners()\n\n    if (!stream.destroyed && !stream.closed) {\n      stream.once('error', noop)\n    }\n  }\n\n  const onResponse = (headers) => {\n    stream.off('response', onResponse)\n\n    const statusCode = headers[HTTP2_HEADER_STATUS]\n    delete headers[HTTP2_HEADER_STATUS]\n    request.onResponseStarted()\n    responseReceived = true\n\n    // Due to the stream nature, it is possible we face a race condition\n    // where the stream has been assigned, but the request has been aborted\n    // the request remains in-flight and headers hasn't been received yet\n    // for those scenarios, best effort is to destroy the stream immediately\n    // as there's no value to keep it open.\n    if (request.aborted) {\n      releaseRequestStream()\n      return\n    }\n\n    if (request.onResponseStart(Number(statusCode), headers, stream.resume.bind(stream), '') === false) {\n      stream.pause()\n    }\n\n    stream.on('data', onData)\n  }\n\n  const onEnd = () => {\n    stream.off('end', onEnd)\n\n    releaseRequestStream()\n    // If we received a response, this is a normal completion\n    if (responseReceived) {\n      if (!request.aborted && !request.completed) {\n        request.onResponseEnd({})\n      }\n\n      finalizeRequest()\n    } else {\n      // Stream ended without receiving a response - this is an error\n      // (e.g., server destroyed the stream before sending headers)\n      abort(new InformationalError('HTTP/2: stream half-closed (remote)'), true)\n    }\n  }\n\n  stream[kHTTP2Session] = session\n  stream[kRequestStreamOnData] = onData\n  stream.once('close', onRequestStreamClose)\n\n  const onError = function (err) {\n    stream.off('error', onError)\n\n    releaseRequestStream()\n    abort(err)\n  }\n\n  const onFrameError = (type, code) => {\n    stream.off('frameError', onFrameError)\n\n    releaseRequestStream()\n    abort(new InformationalError(`HTTP/2: \"frameError\" received - type ${type}, code ${code}`))\n  }\n\n  const onAborted = () => {\n    stream.off('data', onData)\n  }\n\n  const onTimeout = () => {\n    releaseRequestStream()\n\n    const err = new InformationalError(`HTTP/2: \"stream timeout after ${requestTimeout}\"`)\n    abort(err)\n  }\n\n  const onTrailers = (trailers) => {\n    stream.off('trailers', onTrailers)\n\n    if (request.aborted || request.completed) {\n      return\n    }\n\n    releaseRequestStream()\n    request.onResponseEnd(trailers)\n    finalizeRequest()\n  }\n\n  bindRequestToStream(request, stream, releaseRequestStream)\n  if (expectContinue) {\n    stream.once('continue', writeBodyH2)\n  }\n  stream.once('response', onResponse)\n  stream.once('end', onEnd)\n  stream.once('error', onError)\n  stream.once('frameError', onFrameError)\n  stream.on('aborted', onAborted)\n  stream.on('timeout', onTimeout)\n  stream.once('trailers', onTrailers)\n\n  if (!expectContinue) {\n    writeBodyH2()\n  }\n\n  return true\n\n  function writeBodyH2 () {\n    if (!body || contentLength === 0) {\n      writeBuffer(\n        abort,\n        stream,\n        null,\n        client,\n        request,\n        client[kSocket],\n        contentLength,\n        expectsPayload\n      )\n    } else if (util.isBuffer(body)) {\n      writeBuffer(\n        abort,\n        stream,\n        body,\n        client,\n        request,\n        client[kSocket],\n        contentLength,\n        expectsPayload\n      )\n    } else if (util.isBlobLike(body)) {\n      if (typeof body.stream === 'function') {\n        writeIterable(\n          abort,\n          stream,\n          body.stream(),\n          client,\n          request,\n          client[kSocket],\n          contentLength,\n          expectsPayload\n        )\n      } else {\n        writeBlob(\n          abort,\n          stream,\n          body,\n          client,\n          request,\n          client[kSocket],\n          contentLength,\n          expectsPayload\n        )\n      }\n    } else if (util.isStream(body)) {\n      writeStream(\n        abort,\n        client[kSocket],\n        expectsPayload,\n        stream,\n        body,\n        client,\n        request,\n        contentLength\n      )\n    } else if (util.isIterable(body)) {\n      writeIterable(\n        abort,\n        stream,\n        body,\n        client,\n        request,\n        client[kSocket],\n        contentLength,\n        expectsPayload\n      )\n    } else {\n      assert(false)\n    }\n  }\n}\n\nfunction writeBuffer (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {\n  try {\n    if (body != null && util.isBuffer(body)) {\n      assert(contentLength === body.byteLength, 'buffer body must have content length')\n      h2stream.cork()\n      h2stream.write(body)\n      h2stream.uncork()\n      h2stream.end()\n\n      request.onBodySent(body)\n    }\n\n    if (!expectsPayload) {\n      socket[kReset] = true\n    }\n\n    request.onRequestSent()\n    client[kResume]()\n  } catch (error) {\n    abort(error)\n  }\n}\n\nfunction writeStream (abort, socket, expectsPayload, h2stream, body, client, request, contentLength) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined')\n\n  // For HTTP/2, is enough to pipe the stream\n  const pipe = pipeline(\n    body,\n    h2stream,\n    (err) => {\n      if (err) {\n        util.destroy(pipe, err)\n        abort(err)\n      } else {\n        util.removeAllListeners(pipe)\n        request.onRequestSent()\n\n        if (!expectsPayload) {\n          socket[kReset] = true\n        }\n\n        client[kResume]()\n      }\n    }\n  )\n\n  util.addListener(pipe, 'data', onPipeData)\n\n  function onPipeData (chunk) {\n    request.onBodySent(chunk)\n  }\n}\n\nasync function writeBlob (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {\n  assert(contentLength === body.size, 'blob body must have content length')\n\n  try {\n    if (contentLength != null && contentLength !== body.size) {\n      throw new RequestContentLengthMismatchError()\n    }\n\n    const buffer = Buffer.from(await body.arrayBuffer())\n\n    h2stream.cork()\n    h2stream.write(buffer)\n    h2stream.uncork()\n    h2stream.end()\n\n    request.onBodySent(buffer)\n    request.onRequestSent()\n\n    if (!expectsPayload) {\n      socket[kReset] = true\n    }\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  }\n}\n\nasync function writeIterable (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined')\n\n  let callback = null\n  function onDrain () {\n    if (callback) {\n      const cb = callback\n      callback = null\n      cb()\n    }\n  }\n\n  const waitForDrain = () => new Promise((resolve, reject) => {\n    assert(callback === null)\n\n    if (socket[kError]) {\n      reject(socket[kError])\n    } else {\n      callback = resolve\n    }\n  })\n\n  h2stream\n    .on('close', onDrain)\n    .on('drain', onDrain)\n\n  try {\n    // It's up to the user to somehow abort the async iterable.\n    for await (const chunk of body) {\n      if (socket[kError]) {\n        throw socket[kError]\n      }\n\n      const res = h2stream.write(chunk)\n      request.onBodySent(chunk)\n      if (!res) {\n        await waitForDrain()\n      }\n    }\n\n    h2stream.end()\n\n    request.onRequestSent()\n\n    if (!expectsPayload) {\n      socket[kReset] = true\n    }\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  } finally {\n    h2stream\n      .off('close', onDrain)\n      .off('drain', onDrain)\n  }\n}\n\nmodule.exports = connectH2\n", "'use strict'\n\nconst assert = require('node:assert')\nconst net = require('node:net')\nconst http = require('node:http')\nconst util = require('../core/util.js')\nconst { ClientStats } = require('../util/stats.js')\nconst { channels } = require('../core/diagnostics.js')\nconst Request = require('../core/request.js')\nconst DispatcherBase = require('./dispatcher-base')\nconst {\n  InvalidArgumentError,\n  InformationalError,\n  ClientDestroyedError\n} = require('../core/errors.js')\nconst buildConnector = require('../core/connect.js')\nconst {\n  kUrl,\n  kServerName,\n  kClient,\n  kBusy,\n  kConnect,\n  kResuming,\n  kRunning,\n  kPending,\n  kSize,\n  kQueue,\n  kConnected,\n  kConnecting,\n  kNeedDrain,\n  kKeepAliveDefaultTimeout,\n  kHostHeader,\n  kPendingIdx,\n  kRunningIdx,\n  kError,\n  kPipelining,\n  kKeepAliveTimeoutValue,\n  kMaxHeadersSize,\n  kKeepAliveMaxTimeout,\n  kKeepAliveTimeoutThreshold,\n  kHeadersTimeout,\n  kBodyTimeout,\n  kStrictContentLength,\n  kConnector,\n  kMaxRequests,\n  kCounter,\n  kClose,\n  kDestroy,\n  kDispatch,\n  kLocalAddress,\n  kMaxResponseSize,\n  kOnError,\n  kHTTPContext,\n  kMaxConcurrentStreams,\n  kHTTP2InitialWindowSize,\n  kHTTP2ConnectionWindowSize,\n  kResume,\n  kPingInterval\n} = require('../core/symbols.js')\nconst connectH1 = require('./client-h1.js')\nconst connectH2 = require('./client-h2.js')\n\nconst kClosedResolve = Symbol('kClosedResolve')\n\nconst getDefaultNodeMaxHeaderSize = http &&\n  http.maxHeaderSize &&\n  Number.isInteger(http.maxHeaderSize) &&\n  http.maxHeaderSize > 0\n  ? () => http.maxHeaderSize\n  : () => { throw new InvalidArgumentError('http module not available or http.maxHeaderSize invalid') }\n\nconst noop = () => { }\n\nfunction getPipelining (client) {\n  return client[kPipelining] ?? client[kHTTPContext]?.defaultPipelining ?? 1\n}\n\n/**\n * @type {import('../../types/client.js').default}\n */\nclass Client extends DispatcherBase {\n  /**\n   *\n   * @param {string|URL} url\n   * @param {import('../../types/client.js').Client.Options} options\n   */\n  constructor (url, {\n    maxHeaderSize,\n    headersTimeout,\n    socketTimeout,\n    requestTimeout,\n    connectTimeout,\n    bodyTimeout,\n    idleTimeout,\n    keepAlive,\n    keepAliveTimeout,\n    maxKeepAliveTimeout,\n    keepAliveMaxTimeout,\n    keepAliveTimeoutThreshold,\n    socketPath,\n    pipelining,\n    tls,\n    strictContentLength,\n    maxCachedSessions,\n    connect,\n    maxRequestsPerClient,\n    localAddress,\n    maxResponseSize,\n    autoSelectFamily,\n    autoSelectFamilyAttemptTimeout,\n    // h2\n    maxConcurrentStreams,\n    allowH2,\n    useH2c,\n    initialWindowSize,\n    connectionWindowSize,\n    pingInterval,\n    webSocket\n  } = {}) {\n    if (keepAlive !== undefined) {\n      throw new InvalidArgumentError('unsupported keepAlive, use pipelining=0 instead')\n    }\n\n    if (socketTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported socketTimeout, use headersTimeout & bodyTimeout instead')\n    }\n\n    if (requestTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported requestTimeout, use headersTimeout & bodyTimeout instead')\n    }\n\n    if (idleTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported idleTimeout, use keepAliveTimeout instead')\n    }\n\n    if (maxKeepAliveTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead')\n    }\n\n    if (maxHeaderSize != null) {\n      if (!Number.isInteger(maxHeaderSize) || maxHeaderSize < 1) {\n        throw new InvalidArgumentError('invalid maxHeaderSize')\n      }\n    } else {\n      // If maxHeaderSize is not provided, use the default value from the http module\n      // or if that is not available, throw an error.\n      maxHeaderSize = getDefaultNodeMaxHeaderSize()\n    }\n\n    if (socketPath != null && typeof socketPath !== 'string') {\n      throw new InvalidArgumentError('invalid socketPath')\n    }\n\n    if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) {\n      throw new InvalidArgumentError('invalid connectTimeout')\n    }\n\n    if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) {\n      throw new InvalidArgumentError('invalid keepAliveTimeout')\n    }\n\n    if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) {\n      throw new InvalidArgumentError('invalid keepAliveMaxTimeout')\n    }\n\n    if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) {\n      throw new InvalidArgumentError('invalid keepAliveTimeoutThreshold')\n    }\n\n    if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) {\n      throw new InvalidArgumentError('headersTimeout must be a positive integer or zero')\n    }\n\n    if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) {\n      throw new InvalidArgumentError('bodyTimeout must be a positive integer or zero')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) {\n      throw new InvalidArgumentError('maxRequestsPerClient must be a positive number')\n    }\n\n    if (localAddress != null && (typeof localAddress !== 'string' || net.isIP(localAddress) === 0)) {\n      throw new InvalidArgumentError('localAddress must be valid string IP address')\n    }\n\n    if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) {\n      throw new InvalidArgumentError('maxResponseSize must be a positive number')\n    }\n\n    if (\n      autoSelectFamilyAttemptTimeout != null &&\n      (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1)\n    ) {\n      throw new InvalidArgumentError('autoSelectFamilyAttemptTimeout must be a positive number')\n    }\n\n    // h2\n    if (allowH2 != null && typeof allowH2 !== 'boolean') {\n      throw new InvalidArgumentError('allowH2 must be a valid boolean value')\n    }\n\n    if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== 'number' || maxConcurrentStreams < 1)) {\n      throw new InvalidArgumentError('maxConcurrentStreams must be a positive integer, greater than 0')\n    }\n\n    if (useH2c != null && typeof useH2c !== 'boolean') {\n      throw new InvalidArgumentError('useH2c must be a valid boolean value')\n    }\n\n    if (initialWindowSize != null && (!Number.isInteger(initialWindowSize) || initialWindowSize < 1)) {\n      throw new InvalidArgumentError('initialWindowSize must be a positive integer, greater than 0')\n    }\n\n    if (connectionWindowSize != null && (!Number.isInteger(connectionWindowSize) || connectionWindowSize < 1)) {\n      throw new InvalidArgumentError('connectionWindowSize must be a positive integer, greater than 0')\n    }\n\n    if (pingInterval != null && (typeof pingInterval !== 'number' || !Number.isInteger(pingInterval) || pingInterval < 0)) {\n      throw new InvalidArgumentError('pingInterval must be a positive integer, greater or equal to 0')\n    }\n\n    super({ webSocket })\n\n    if (typeof connect !== 'function') {\n      connect = buildConnector({\n        ...tls,\n        maxCachedSessions,\n        allowH2,\n        useH2c,\n        socketPath,\n        timeout: connectTimeout,\n        ...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),\n        ...connect\n      })\n    } else {\n      const customConnect = connect\n      connect = (opts, callback) => customConnect({\n        ...opts,\n        ...(socketPath != null ? { socketPath } : null),\n        ...(allowH2 != null ? { allowH2 } : null)\n      }, callback)\n    }\n\n    this[kUrl] = util.parseOrigin(url)\n    this[kConnector] = connect\n    this[kPipelining] = pipelining != null ? pipelining : 1\n    this[kMaxHeadersSize] = maxHeaderSize\n    this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout\n    this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 600e3 : keepAliveMaxTimeout\n    this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 2e3 : keepAliveTimeoutThreshold\n    this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout]\n    this[kServerName] = null\n    this[kLocalAddress] = localAddress != null ? localAddress : null\n    this[kResuming] = 0 // 0, idle, 1, scheduled, 2 resuming\n    this[kNeedDrain] = 0 // 0, idle, 1, scheduled, 2 resuming\n    this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ''}\\r\\n`\n    this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 300e3\n    this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 300e3\n    this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength\n    this[kMaxRequests] = maxRequestsPerClient\n    this[kClosedResolve] = null\n    this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1\n    this[kHTTPContext] = null\n    // h2\n    this[kMaxConcurrentStreams] = maxConcurrentStreams != null ? maxConcurrentStreams : 100 // Max peerConcurrentStreams for a Node h2 server\n    // HTTP/2 window sizes are set to higher defaults than Node.js core for better performance:\n    // - initialWindowSize: 262144 (256KB) vs Node.js default 65535 (64KB - 1)\n    //   Allows more data to be sent before requiring acknowledgment, improving throughput\n    //   especially on high-latency networks. This matches common production HTTP/2 servers.\n    // - connectionWindowSize: 524288 (512KB) vs Node.js default (none set)\n    //   Provides better flow control for the entire connection across multiple streams.\n    this[kHTTP2InitialWindowSize] = initialWindowSize != null ? initialWindowSize : 262144\n    this[kHTTP2ConnectionWindowSize] = connectionWindowSize != null ? connectionWindowSize : 524288\n    this[kPingInterval] = pingInterval != null ? pingInterval : 60e3 // Default ping interval for h2 - 1 minute\n\n    // kQueue is built up of 3 sections separated by\n    // the kRunningIdx and kPendingIdx indices.\n    // |   complete   |   running   |   pending   |\n    //                ^ kRunningIdx ^ kPendingIdx ^ kQueue.length\n    // kRunningIdx points to the first running element.\n    // kPendingIdx points to the first pending element.\n    // This implements a fast queue with an amortized\n    // time of O(1).\n\n    this[kQueue] = []\n    this[kRunningIdx] = 0\n    this[kPendingIdx] = 0\n\n    this[kResume] = (sync) => resume(this, sync)\n    this[kOnError] = (err) => onError(this, err)\n  }\n\n  get pipelining () {\n    return this[kPipelining]\n  }\n\n  set pipelining (value) {\n    this[kPipelining] = value\n    this[kResume](true)\n  }\n\n  get stats () {\n    return new ClientStats(this)\n  }\n\n  get [kPending] () {\n    return this[kQueue].length - this[kPendingIdx]\n  }\n\n  get [kRunning] () {\n    return this[kPendingIdx] - this[kRunningIdx]\n  }\n\n  get [kSize] () {\n    return this[kQueue].length - this[kRunningIdx]\n  }\n\n  get [kConnected] () {\n    return !!this[kHTTPContext] && !this[kConnecting] && !this[kHTTPContext].destroyed\n  }\n\n  get [kBusy] () {\n    return Boolean(\n      this[kHTTPContext]?.busy(null) ||\n      (this[kSize] >= (getPipelining(this) || 1)) ||\n      this[kPending] > 0\n    )\n  }\n\n  [kConnect] (cb) {\n    connect(this)\n    this.once('connect', cb)\n  }\n\n  [kDispatch] (opts, handler) {\n    const request = new Request(this[kUrl].origin, opts, handler)\n\n    this[kQueue].push(request)\n    if (this[kResuming]) {\n      // Do nothing.\n    } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) {\n      // Wait a tick in case stream/iterator is ended in the same tick.\n      this[kResuming] = 1\n      queueMicrotask(() => resume(this))\n    } else {\n      this[kResume](true)\n    }\n\n    if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) {\n      this[kNeedDrain] = 2\n    }\n\n    return this[kNeedDrain] < 2\n  }\n\n  [kClose] () {\n    // TODO: for H2 we need to gracefully flush the remaining enqueued\n    // request and close each stream.\n    return new Promise((resolve) => {\n      if (this[kSize]) {\n        this[kClosedResolve] = resolve\n      } else {\n        resolve(null)\n      }\n    })\n  }\n\n  [kDestroy] (err) {\n    return new Promise((resolve) => {\n      const requests = this[kQueue].splice(this[kPendingIdx])\n      for (let i = 0; i < requests.length; i++) {\n        const request = requests[i]\n        util.errorRequest(this, request, err)\n      }\n\n      const callback = () => {\n        if (this[kClosedResolve]) {\n          // TODO (fix): Should we error here with ClientDestroyedError?\n          this[kClosedResolve]()\n          this[kClosedResolve] = null\n        }\n        resolve(null)\n      }\n\n      if (this[kHTTPContext]) {\n        this[kHTTPContext].destroy(err, callback)\n        this[kHTTPContext] = null\n      } else {\n        queueMicrotask(callback)\n      }\n\n      this[kResume]()\n    })\n  }\n}\n\nfunction onError (client, err) {\n  if (\n    client[kRunning] === 0 &&\n    err.code !== 'UND_ERR_INFO' &&\n    err.code !== 'UND_ERR_SOCKET'\n  ) {\n    // Error is not caused by running request and not a recoverable\n    // socket error.\n\n    assert(client[kPendingIdx] === client[kRunningIdx])\n\n    const requests = client[kQueue].splice(client[kRunningIdx])\n\n    for (let i = 0; i < requests.length; i++) {\n      const request = requests[i]\n      util.errorRequest(client, request, err)\n    }\n    assert(client[kSize] === 0)\n  }\n}\n\n/**\n * @param {Client} client\n * @returns {void}\n */\nfunction connect (client) {\n  assert(!client[kConnecting])\n  assert(!client[kHTTPContext])\n\n  let { host, hostname, protocol, port } = client[kUrl]\n\n  // Resolve ipv6\n  if (hostname[0] === '[') {\n    const idx = hostname.indexOf(']')\n\n    assert(idx !== -1)\n    const ip = hostname.substring(1, idx)\n\n    assert(net.isIPv6(ip))\n    hostname = ip\n  }\n\n  client[kConnecting] = true\n\n  if (channels.beforeConnect.hasSubscribers) {\n    channels.beforeConnect.publish({\n      connectParams: {\n        host,\n        hostname,\n        protocol,\n        port,\n        version: client[kHTTPContext]?.version,\n        servername: client[kServerName],\n        localAddress: client[kLocalAddress]\n      },\n      connector: client[kConnector]\n    })\n  }\n\n  try {\n    client[kConnector]({\n      host,\n      hostname,\n      protocol,\n      port,\n      servername: client[kServerName],\n      localAddress: client[kLocalAddress]\n    }, (err, socket) => {\n      if (err) {\n        handleConnectError(client, err, { host, hostname, protocol, port })\n        client[kResume]()\n        return\n      }\n\n      if (client.destroyed) {\n        util.destroy(socket.on('error', noop), new ClientDestroyedError())\n        client[kResume]()\n        return\n      }\n\n      assert(socket)\n\n      try {\n        client[kHTTPContext] = socket.alpnProtocol === 'h2'\n          ? connectH2(client, socket)\n          : connectH1(client, socket)\n      } catch (err) {\n        socket.destroy().on('error', noop)\n        handleConnectError(client, err, { host, hostname, protocol, port })\n        client[kResume]()\n        return\n      }\n\n      client[kConnecting] = false\n\n      socket[kCounter] = 0\n      socket[kMaxRequests] = client[kMaxRequests]\n      socket[kClient] = client\n      socket[kError] = null\n\n      if (channels.connected.hasSubscribers) {\n        channels.connected.publish({\n          connectParams: {\n            host,\n            hostname,\n            protocol,\n            port,\n            version: client[kHTTPContext]?.version,\n            servername: client[kServerName],\n            localAddress: client[kLocalAddress]\n          },\n          connector: client[kConnector],\n          socket\n        })\n      }\n\n      client.emit('connect', client[kUrl], [client])\n      client[kResume]()\n    })\n  } catch (err) {\n    handleConnectError(client, err, { host, hostname, protocol, port })\n    client[kResume]()\n  }\n}\n\nfunction handleConnectError (client, err, { host, hostname, protocol, port }) {\n  if (client.destroyed) {\n    return\n  }\n\n  client[kConnecting] = false\n\n  if (channels.connectError.hasSubscribers) {\n    channels.connectError.publish({\n      connectParams: {\n        host,\n        hostname,\n        protocol,\n        port,\n        version: client[kHTTPContext]?.version,\n        servername: client[kServerName],\n        localAddress: client[kLocalAddress]\n      },\n      connector: client[kConnector],\n      error: err\n    })\n  }\n\n  if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') {\n    assert(client[kRunning] === 0)\n    while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) {\n      const request = client[kQueue][client[kPendingIdx]++]\n      util.errorRequest(client, request, err)\n    }\n  } else {\n    onError(client, err)\n  }\n\n  client.emit('connectionError', client[kUrl], [client], err)\n}\n\nfunction emitDrain (client) {\n  client[kNeedDrain] = 0\n  client.emit('drain', client[kUrl], [client])\n}\n\nfunction resume (client, sync) {\n  if (client[kResuming] === 2) {\n    return\n  }\n\n  client[kResuming] = 2\n\n  _resume(client, sync)\n  client[kResuming] = 0\n\n  if (client[kRunningIdx] > 256) {\n    client[kQueue].splice(0, client[kRunningIdx])\n    client[kPendingIdx] -= client[kRunningIdx]\n    client[kRunningIdx] = 0\n  }\n}\n\nfunction _resume (client, sync) {\n  while (true) {\n    if (client.destroyed) {\n      assert(client[kPending] === 0)\n      return\n    }\n\n    if (client[kClosedResolve] && !client[kSize]) {\n      client[kClosedResolve]()\n      client[kClosedResolve] = null\n      return\n    }\n\n    if (client[kHTTPContext]) {\n      client[kHTTPContext].resume()\n    }\n\n    if (client[kBusy]) {\n      client[kNeedDrain] = 2\n    } else if (client[kNeedDrain] === 2) {\n      if (sync) {\n        client[kNeedDrain] = 1\n        queueMicrotask(() => emitDrain(client))\n      } else {\n        emitDrain(client)\n      }\n      continue\n    }\n\n    if (client[kPending] === 0) {\n      return\n    }\n\n    if (client[kRunning] >= (getPipelining(client) || 1)) {\n      return\n    }\n\n    const request = client[kQueue][client[kPendingIdx]]\n\n    if (request === null) {\n      return\n    }\n\n    if (client[kUrl].protocol === 'https:' && client[kServerName] !== request.servername) {\n      if (client[kRunning] > 0) {\n        return\n      }\n\n      client[kServerName] = request.servername\n      client[kHTTPContext]?.destroy(new InformationalError('servername changed'), () => {\n        client[kHTTPContext] = null\n        resume(client)\n      })\n    }\n\n    if (client[kConnecting]) {\n      return\n    }\n\n    if (!client[kHTTPContext]) {\n      connect(client)\n      return\n    }\n\n    if (client[kHTTPContext].destroyed) {\n      return\n    }\n\n    if (client[kHTTPContext].busy(request)) {\n      return\n    }\n\n    if (!request.aborted && client[kHTTPContext].write(request)) {\n      client[kPendingIdx]++\n    } else {\n      client[kQueue].splice(client[kPendingIdx], 1)\n    }\n  }\n}\n\nmodule.exports = Client\n", "'use strict'\n\n// Extracted from node/lib/internal/fixed_queue.js\n\n// Currently optimal queue size, tested on V8 6.0 - 6.6. Must be power of two.\nconst kSize = 2048\nconst kMask = kSize - 1\n\n// The FixedQueue is implemented as a singly-linked list of fixed-size\n// circular buffers. It looks something like this:\n//\n//  head                                                       tail\n//    |                                                          |\n//    v                                                          v\n// +-----------+ <-----\\       +-----------+ <------\\         +-----------+\n// |  [null]   |        \\----- |   next    |         \\------- |   next    |\n// +-----------+               +-----------+                  +-----------+\n// |   item    | <-- bottom    |   item    | <-- bottom       | undefined |\n// |   item    |               |   item    |                  | undefined |\n// |   item    |               |   item    |                  | undefined |\n// |   item    |               |   item    |                  | undefined |\n// |   item    |               |   item    |       bottom --> |   item    |\n// |   item    |               |   item    |                  |   item    |\n// |    ...    |               |    ...    |                  |    ...    |\n// |   item    |               |   item    |                  |   item    |\n// |   item    |               |   item    |                  |   item    |\n// | undefined | <-- top       |   item    |                  |   item    |\n// | undefined |               |   item    |                  |   item    |\n// | undefined |               | undefined | <-- top  top --> | undefined |\n// +-----------+               +-----------+                  +-----------+\n//\n// Or, if there is only one circular buffer, it looks something\n// like either of these:\n//\n//  head   tail                                 head   tail\n//    |     |                                     |     |\n//    v     v                                     v     v\n// +-----------+                               +-----------+\n// |  [null]   |                               |  [null]   |\n// +-----------+                               +-----------+\n// | undefined |                               |   item    |\n// | undefined |                               |   item    |\n// |   item    | <-- bottom            top --> | undefined |\n// |   item    |                               | undefined |\n// | undefined | <-- top            bottom --> |   item    |\n// | undefined |                               |   item    |\n// +-----------+                               +-----------+\n//\n// Adding a value means moving `top` forward by one, removing means\n// moving `bottom` forward by one. After reaching the end, the queue\n// wraps around.\n//\n// When `top === bottom` the current queue is empty and when\n// `top + 1 === bottom` it's full. This wastes a single space of storage\n// but allows much quicker checks.\n\n/**\n * @type {FixedCircularBuffer}\n * @template T\n */\nclass FixedCircularBuffer {\n  /** @type {number} */\n  bottom = 0\n  /** @type {number} */\n  top = 0\n  /** @type {Array<T|undefined>} */\n  list = new Array(kSize).fill(undefined)\n  /** @type {T|null} */\n  next = null\n\n  /** @returns {boolean} */\n  isEmpty () {\n    return this.top === this.bottom\n  }\n\n  /** @returns {boolean} */\n  isFull () {\n    return ((this.top + 1) & kMask) === this.bottom\n  }\n\n  /**\n   * @param {T} data\n   * @returns {void}\n   */\n  push (data) {\n    this.list[this.top] = data\n    this.top = (this.top + 1) & kMask\n  }\n\n  /** @returns {T|null} */\n  shift () {\n    const nextItem = this.list[this.bottom]\n    if (nextItem === undefined) { return null }\n    this.list[this.bottom] = undefined\n    this.bottom = (this.bottom + 1) & kMask\n    return nextItem\n  }\n}\n\n/**\n * @template T\n */\nmodule.exports = class FixedQueue {\n  constructor () {\n    /** @type {FixedCircularBuffer<T>} */\n    this.head = this.tail = new FixedCircularBuffer()\n  }\n\n  /** @returns {boolean} */\n  isEmpty () {\n    return this.head.isEmpty()\n  }\n\n  /** @param {T} data */\n  push (data) {\n    if (this.head.isFull()) {\n      // Head is full: Creates a new queue, sets the old queue's `.next` to it,\n      // and sets it as the new main queue.\n      this.head = this.head.next = new FixedCircularBuffer()\n    }\n    this.head.push(data)\n  }\n\n  /** @returns {T|null} */\n  shift () {\n    const tail = this.tail\n    const next = tail.shift()\n    if (tail.isEmpty() && tail.next !== null) {\n      // If there is another queue, it forms the new tail.\n      this.tail = tail.next\n      tail.next = null\n    }\n    return next\n  }\n}\n", "'use strict'\n\nconst { PoolStats } = require('../util/stats.js')\nconst DispatcherBase = require('./dispatcher-base')\nconst FixedQueue = require('./fixed-queue')\nconst { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require('../core/symbols')\n\nconst kClients = Symbol('clients')\nconst kNeedDrain = Symbol('needDrain')\nconst kQueue = Symbol('queue')\nconst kClosedResolve = Symbol('closed resolve')\nconst kOnDrain = Symbol('onDrain')\nconst kOnConnect = Symbol('onConnect')\nconst kOnDisconnect = Symbol('onDisconnect')\nconst kOnConnectionError = Symbol('onConnectionError')\nconst kGetDispatcher = Symbol('get dispatcher')\nconst kAddClient = Symbol('add client')\nconst kRemoveClient = Symbol('remove client')\n\nclass PoolBase extends DispatcherBase {\n  [kQueue] = new FixedQueue();\n\n  [kQueued] = 0;\n\n  [kClients] = [];\n\n  [kNeedDrain] = false;\n\n  [kOnDrain] (client, origin, targets) {\n    const queue = this[kQueue]\n\n    let needDrain = false\n\n    while (!needDrain) {\n      const item = queue.shift()\n      if (!item) {\n        break\n      }\n      this[kQueued]--\n      needDrain = !client.dispatch(item.opts, item.handler)\n    }\n\n    client[kNeedDrain] = needDrain\n\n    if (!needDrain && this[kNeedDrain]) {\n      this[kNeedDrain] = false\n      this.emit('drain', origin, [this, ...targets])\n    }\n\n    if (this[kClosedResolve] && queue.isEmpty()) {\n      const closeAll = []\n      for (let i = 0; i < this[kClients].length; i++) {\n        const client = this[kClients][i]\n        if (!client.destroyed) {\n          closeAll.push(client.close())\n        }\n      }\n      return Promise.all(closeAll)\n        .then(this[kClosedResolve])\n    }\n  }\n\n  [kOnConnect] = (origin, targets) => {\n    this.emit('connect', origin, [this, ...targets])\n  };\n\n  [kOnDisconnect] = (origin, targets, err) => {\n    this.emit('disconnect', origin, [this, ...targets], err)\n  };\n\n  [kOnConnectionError] = (origin, targets, err) => {\n    this.emit('connectionError', origin, [this, ...targets], err)\n  }\n\n  get [kBusy] () {\n    return this[kNeedDrain]\n  }\n\n  get [kConnected] () {\n    let ret = 0\n    for (const { [kConnected]: connected } of this[kClients]) {\n      ret += connected\n    }\n    return ret\n  }\n\n  get [kFree] () {\n    let ret = 0\n    for (const { [kConnected]: connected, [kNeedDrain]: needDrain } of this[kClients]) {\n      ret += connected && !needDrain\n    }\n    return ret\n  }\n\n  get [kPending] () {\n    let ret = this[kQueued]\n    for (const { [kPending]: pending } of this[kClients]) {\n      ret += pending\n    }\n    return ret\n  }\n\n  get [kRunning] () {\n    let ret = 0\n    for (const { [kRunning]: running } of this[kClients]) {\n      ret += running\n    }\n    return ret\n  }\n\n  get [kSize] () {\n    let ret = this[kQueued]\n    for (const { [kSize]: size } of this[kClients]) {\n      ret += size\n    }\n    return ret\n  }\n\n  get stats () {\n    return new PoolStats(this)\n  }\n\n  [kClose] () {\n    if (this[kQueue].isEmpty()) {\n      const closeAll = []\n      for (let i = 0; i < this[kClients].length; i++) {\n        const client = this[kClients][i]\n        if (!client.destroyed) {\n          closeAll.push(client.close())\n        }\n      }\n      return Promise.all(closeAll)\n    } else {\n      return new Promise((resolve) => {\n        this[kClosedResolve] = resolve\n      })\n    }\n  }\n\n  [kDestroy] (err) {\n    while (true) {\n      const item = this[kQueue].shift()\n      if (!item) {\n        break\n      }\n      item.handler.onResponseError(null, err)\n    }\n\n    const destroyAll = new Array(this[kClients].length)\n    for (let i = 0; i < this[kClients].length; i++) {\n      destroyAll[i] = this[kClients][i].destroy(err)\n    }\n    return Promise.all(destroyAll)\n  }\n\n  [kDispatch] (opts, handler) {\n    const dispatcher = this[kGetDispatcher]()\n\n    if (!dispatcher) {\n      this[kNeedDrain] = true\n      this[kQueue].push({ opts, handler })\n      this[kQueued]++\n    } else if (!dispatcher.dispatch(opts, handler)) {\n      dispatcher[kNeedDrain] = true\n      this[kNeedDrain] = !this[kGetDispatcher]()\n    }\n\n    return !this[kNeedDrain]\n  }\n\n  [kAddClient] (client) {\n    client\n      .on('drain', this[kOnDrain].bind(this, client))\n      .on('connect', this[kOnConnect])\n      .on('disconnect', this[kOnDisconnect])\n      .on('connectionError', this[kOnConnectionError])\n\n    this[kClients].push(client)\n\n    if (this[kNeedDrain]) {\n      queueMicrotask(() => {\n        if (this[kNeedDrain]) {\n          this[kOnDrain](client, client[kUrl], [client, this])\n        }\n      })\n    }\n\n    return this\n  }\n\n  [kRemoveClient] (client) {\n    const idx = this[kClients].indexOf(client)\n    if (idx !== -1) {\n      this[kClients].splice(idx, 1)\n    }\n\n    client.close(() => {})\n\n    this[kNeedDrain] = this[kClients].some(dispatcher => (\n      !dispatcher[kNeedDrain] &&\n      dispatcher.closed !== true &&\n      dispatcher.destroyed !== true\n    ))\n  }\n}\n\nmodule.exports = {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kRemoveClient,\n  kGetDispatcher\n}\n", "'use strict'\n\nconst {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kGetDispatcher,\n  kRemoveClient\n} = require('./pool-base')\nconst Client = require('./client')\nconst {\n  InvalidArgumentError\n} = require('../core/errors')\nconst util = require('../core/util')\nconst { kUrl } = require('../core/symbols')\nconst buildConnector = require('../core/connect')\n\nconst kOptions = Symbol('options')\nconst kConnections = Symbol('connections')\nconst kFactory = Symbol('factory')\n\nfunction defaultFactory (origin, opts) {\n  return new Client(origin, opts)\n}\n\nclass Pool extends PoolBase {\n  constructor (origin, {\n    connections,\n    factory = defaultFactory,\n    connect,\n    connectTimeout,\n    tls,\n    maxCachedSessions,\n    socketPath,\n    autoSelectFamily,\n    autoSelectFamilyAttemptTimeout,\n    allowH2,\n    useH2c,\n    clientTtl,\n    ...options\n  } = {}) {\n    if (connections != null && (!Number.isFinite(connections) || connections < 0)) {\n      throw new InvalidArgumentError('invalid connections')\n    }\n\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (typeof connect !== 'function') {\n      connect = buildConnector({\n        ...tls,\n        maxCachedSessions,\n        allowH2,\n        useH2c,\n        socketPath,\n        timeout: connectTimeout,\n        ...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),\n        ...connect\n      })\n    }\n\n    super(options)\n\n    this[kConnections] = connections || null\n    this[kUrl] = util.parseOrigin(origin)\n    this[kOptions] = { ...util.deepClone(options), connect, allowH2, useH2c, clientTtl, socketPath }\n    this[kFactory] = factory\n\n    this.on('connect', (origin, targets) => {\n      if (clientTtl != null && clientTtl > 0) {\n        for (const target of targets) {\n          Object.assign(target, { ttl: Date.now() })\n        }\n      }\n    })\n\n    this.on('connectionError', (origin, targets, error) => {\n      // If a connection error occurs, we remove the client from the pool,\n      // and emit a connectionError event. They will not be re-used.\n      // Fixes https://github.com/nodejs/undici/issues/3895\n      for (const target of targets) {\n        // Do not use kRemoveClient here, as it will close the client,\n        // but the client cannot be closed in this state.\n        const idx = this[kClients].indexOf(target)\n        if (idx !== -1) {\n          this[kClients].splice(idx, 1)\n        }\n      }\n    })\n  }\n\n  [kGetDispatcher] () {\n    const clientTtlOption = this[kOptions].clientTtl\n    for (let i = 0; i < this[kClients].length; i++) {\n      const client = this[kClients][i]\n\n      // check ttl of client and if it's stale, remove it from the pool\n      if (clientTtlOption != null && clientTtlOption > 0 && client.ttl && ((Date.now() - client.ttl) > clientTtlOption)) {\n        this[kRemoveClient](client)\n        i--\n      } else if (!client[kNeedDrain]) {\n        return client\n      }\n    }\n\n    if (!this[kConnections] || this[kClients].length < this[kConnections]) {\n      const dispatcher = this[kFactory](this[kUrl], this[kOptions])\n      this[kAddClient](dispatcher)\n      return dispatcher\n    }\n  }\n}\n\nmodule.exports = Pool\n", "'use strict'\n\nconst {\n  BalancedPoolMissingUpstreamError,\n  InvalidArgumentError\n} = require('../core/errors')\nconst {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kRemoveClient,\n  kGetDispatcher\n} = require('./pool-base')\nconst Pool = require('./pool')\nconst { kUrl } = require('../core/symbols')\nconst util = require('../core/util')\nconst kFactory = Symbol('factory')\n\nconst kOptions = Symbol('options')\nconst kGreatestCommonDivisor = Symbol('kGreatestCommonDivisor')\nconst kCurrentWeight = Symbol('kCurrentWeight')\nconst kIndex = Symbol('kIndex')\nconst kWeight = Symbol('kWeight')\nconst kMaxWeightPerServer = Symbol('kMaxWeightPerServer')\nconst kErrorPenalty = Symbol('kErrorPenalty')\n\n/**\n * Calculate the greatest common divisor of two numbers by\n * using the Euclidean algorithm.\n *\n * @param {number} a\n * @param {number} b\n * @returns {number}\n */\nfunction getGreatestCommonDivisor (a, b) {\n  if (a === 0) return b\n\n  while (b !== 0) {\n    const t = b\n    b = a % b\n    a = t\n  }\n  return a\n}\n\nfunction defaultFactory (origin, opts) {\n  return new Pool(origin, opts)\n}\n\nclass BalancedPool extends PoolBase {\n  constructor (upstreams = [], { factory = defaultFactory, ...opts } = {}) {\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    super()\n\n    this[kOptions] = { ...util.deepClone(opts) }\n    this[kIndex] = -1\n    this[kCurrentWeight] = 0\n\n    this[kMaxWeightPerServer] = this[kOptions].maxWeightPerServer || 100\n    this[kErrorPenalty] = this[kOptions].errorPenalty || 15\n\n    if (!Array.isArray(upstreams)) {\n      upstreams = [upstreams]\n    }\n\n    this[kFactory] = factory\n\n    for (const upstream of upstreams) {\n      this.addUpstream(upstream)\n    }\n    this._updateBalancedPoolStats()\n  }\n\n  addUpstream (upstream) {\n    const upstreamOrigin = util.parseOrigin(upstream).origin\n\n    if (this[kClients].find((pool) => (\n      pool[kUrl].origin === upstreamOrigin &&\n      pool.closed !== true &&\n      pool.destroyed !== true\n    ))) {\n      return this\n    }\n    const pool = this[kFactory](upstreamOrigin, this[kOptions])\n\n    this[kAddClient](pool)\n    pool.on('connect', () => {\n      pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty])\n    })\n\n    pool.on('connectionError', () => {\n      pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty])\n      this._updateBalancedPoolStats()\n    })\n\n    pool.on('disconnect', (...args) => {\n      const err = args[2]\n      if (err && err.code === 'UND_ERR_SOCKET') {\n        // decrease the weight of the pool.\n        pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty])\n        this._updateBalancedPoolStats()\n      }\n    })\n\n    for (const client of this[kClients]) {\n      client[kWeight] = this[kMaxWeightPerServer]\n    }\n\n    this._updateBalancedPoolStats()\n\n    return this\n  }\n\n  _updateBalancedPoolStats () {\n    let result = 0\n    for (let i = 0; i < this[kClients].length; i++) {\n      result = getGreatestCommonDivisor(this[kClients][i][kWeight], result)\n    }\n\n    this[kGreatestCommonDivisor] = result\n  }\n\n  removeUpstream (upstream) {\n    const upstreamOrigin = util.parseOrigin(upstream).origin\n\n    const pool = this[kClients].find((pool) => (\n      pool[kUrl].origin === upstreamOrigin &&\n      pool.closed !== true &&\n      pool.destroyed !== true\n    ))\n\n    if (pool) {\n      this[kRemoveClient](pool)\n    }\n\n    return this\n  }\n\n  getUpstream (upstream) {\n    const upstreamOrigin = util.parseOrigin(upstream).origin\n\n    return this[kClients].find((pool) => (\n      pool[kUrl].origin === upstreamOrigin &&\n      pool.closed !== true &&\n      pool.destroyed !== true\n    ))\n  }\n\n  get upstreams () {\n    return this[kClients]\n      .filter(dispatcher => dispatcher.closed !== true && dispatcher.destroyed !== true)\n      .map((p) => p[kUrl].origin)\n  }\n\n  [kGetDispatcher] () {\n    // We validate that pools is greater than 0,\n    // otherwise we would have to wait until an upstream\n    // is added, which might never happen.\n    if (this[kClients].length === 0) {\n      throw new BalancedPoolMissingUpstreamError()\n    }\n\n    let counter = 0\n\n    let maxWeightIndex = -1\n\n    while (counter++ < this[kClients].length) {\n      this[kIndex] = (this[kIndex] + 1) % this[kClients].length\n      const pool = this[kClients][this[kIndex]]\n\n      // decrease the current weight every `this[kClients].length`.\n      if (this[kIndex] === 0) {\n        // Set the current weight to the next lower weight.\n        this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor]\n\n        if (this[kCurrentWeight] <= 0) {\n          this[kCurrentWeight] = this[kMaxWeightPerServer]\n        }\n      }\n\n      // Skip unavailable pools after updating the current weight for this cycle.\n      if (\n        pool[kNeedDrain] ||\n        pool.closed === true ||\n        pool.destroyed === true\n      ) {\n        continue\n      }\n\n      // Track the best fallback if no pool matches the current weight.\n      if (maxWeightIndex === -1 || pool[kWeight] > this[kClients][maxWeightIndex][kWeight]) {\n        maxWeightIndex = this[kIndex]\n      }\n\n      if (pool[kWeight] >= this[kCurrentWeight]) {\n        return pool\n      }\n    }\n\n    if (maxWeightIndex === -1) {\n      return\n    }\n\n    this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight]\n    this[kIndex] = maxWeightIndex\n    return this[kClients][maxWeightIndex]\n  }\n}\n\nmodule.exports = BalancedPool\n", "'use strict'\n\nconst {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kGetDispatcher,\n  kRemoveClient\n} = require('./pool-base')\nconst Client = require('./client')\nconst {\n  InvalidArgumentError\n} = require('../core/errors')\nconst util = require('../core/util')\nconst { kUrl } = require('../core/symbols')\nconst buildConnector = require('../core/connect')\n\nconst kOptions = Symbol('options')\nconst kConnections = Symbol('connections')\nconst kFactory = Symbol('factory')\nconst kIndex = Symbol('index')\n\nfunction defaultFactory (origin, opts) {\n  return new Client(origin, opts)\n}\n\nclass RoundRobinPool extends PoolBase {\n  constructor (origin, {\n    connections,\n    factory = defaultFactory,\n    connect,\n    connectTimeout,\n    tls,\n    maxCachedSessions,\n    socketPath,\n    autoSelectFamily,\n    autoSelectFamilyAttemptTimeout,\n    allowH2,\n    clientTtl,\n    ...options\n  } = {}) {\n    if (connections != null && (!Number.isFinite(connections) || connections < 0)) {\n      throw new InvalidArgumentError('invalid connections')\n    }\n\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (typeof connect !== 'function') {\n      connect = buildConnector({\n        ...tls,\n        maxCachedSessions,\n        allowH2,\n        socketPath,\n        timeout: connectTimeout,\n        ...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),\n        ...connect\n      })\n    }\n\n    super()\n\n    this[kConnections] = connections || null\n    this[kUrl] = util.parseOrigin(origin)\n    this[kOptions] = { ...util.deepClone(options), connect, allowH2, clientTtl, socketPath }\n    this[kFactory] = factory\n    this[kIndex] = -1\n\n    this.on('connect', (origin, targets) => {\n      if (clientTtl != null && clientTtl > 0) {\n        for (const target of targets) {\n          Object.assign(target, { ttl: Date.now() })\n        }\n      }\n    })\n\n    this.on('connectionError', (origin, targets, error) => {\n      for (const target of targets) {\n        const idx = this[kClients].indexOf(target)\n        if (idx !== -1) {\n          this[kClients].splice(idx, 1)\n        }\n      }\n    })\n  }\n\n  [kGetDispatcher] () {\n    const clientTtlOption = this[kOptions].clientTtl\n\n    // If we have no clients yet, create one\n    if (this[kClients].length === 0) {\n      const dispatcher = this[kFactory](this[kUrl], this[kOptions])\n      this[kAddClient](dispatcher)\n      return dispatcher\n    }\n\n    // Round-robin through existing clients\n    let checked = 0\n    while (checked < this[kClients].length) {\n      this[kIndex] = (this[kIndex] + 1) % this[kClients].length\n      const client = this[kClients][this[kIndex]]\n\n      // Check if client is stale (TTL expired)\n      if (clientTtlOption != null && clientTtlOption > 0 && client.ttl && ((Date.now() - client.ttl) > clientTtlOption)) {\n        this[kRemoveClient](client)\n        this[kIndex]--\n        continue\n      }\n\n      // Return client if it's not draining\n      if (!client[kNeedDrain]) {\n        return client\n      }\n\n      checked++\n    }\n\n    // All clients are busy, create a new one if we haven't reached the limit\n    if (!this[kConnections] || this[kClients].length < this[kConnections]) {\n      const dispatcher = this[kFactory](this[kUrl], this[kOptions])\n      this[kAddClient](dispatcher)\n      return dispatcher\n    }\n  }\n}\n\nmodule.exports = RoundRobinPool\n", "'use strict'\n\nconst { InvalidArgumentError, MaxOriginsReachedError } = require('../core/errors')\nconst { kBusy, kClients, kConnected, kRunning, kClose, kDestroy, kDispatch, kUrl } = require('../core/symbols')\nconst DispatcherBase = require('./dispatcher-base')\nconst Pool = require('./pool')\nconst Client = require('./client')\nconst util = require('../core/util')\n\nconst kOnConnect = Symbol('onConnect')\nconst kOnDisconnect = Symbol('onDisconnect')\nconst kOnConnectionError = Symbol('onConnectionError')\nconst kOnDrain = Symbol('onDrain')\nconst kFactory = Symbol('factory')\nconst kOptions = Symbol('options')\nconst kOrigins = Symbol('origins')\n\nfunction defaultFactory (origin, opts) {\n  return opts && opts.connections === 1\n    ? new Client(origin, opts)\n    : new Pool(origin, opts)\n}\n\nclass Agent extends DispatcherBase {\n  constructor ({ factory = defaultFactory, maxOrigins = Infinity, connect, ...options } = {}) {\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (typeof maxOrigins !== 'number' || Number.isNaN(maxOrigins) || maxOrigins <= 0) {\n      throw new InvalidArgumentError('maxOrigins must be a number greater than 0')\n    }\n\n    super(options)\n\n    if (connect && typeof connect !== 'function') {\n      connect = { ...connect }\n    }\n\n    this[kOptions] = { ...util.deepClone(options), maxOrigins, connect }\n    this[kFactory] = factory\n    this[kClients] = new Map()\n    this[kOrigins] = new Set()\n\n    this[kOnDrain] = (origin, targets) => {\n      this.emit('drain', origin, [this, ...targets])\n    }\n\n    this[kOnConnect] = (origin, targets) => {\n      this.emit('connect', origin, [this, ...targets])\n    }\n\n    this[kOnDisconnect] = (origin, targets, err) => {\n      this.emit('disconnect', origin, [this, ...targets], err)\n    }\n\n    this[kOnConnectionError] = (origin, targets, err) => {\n      this.emit('connectionError', origin, [this, ...targets], err)\n    }\n  }\n\n  get [kRunning] () {\n    let ret = 0\n    for (const dispatcher of this[kClients].values()) {\n      ret += dispatcher[kRunning]\n    }\n    return ret\n  }\n\n  [kDispatch] (opts, handler) {\n    let origin\n    if (opts.origin && (typeof opts.origin === 'string' || opts.origin instanceof URL)) {\n      origin = String(opts.origin)\n    } else {\n      throw new InvalidArgumentError('opts.origin must be a non-empty string or URL.')\n    }\n\n    const allowH2 = opts.allowH2 ?? this[kOptions].allowH2\n    const key = allowH2 === false ? `${origin}#http1-only` : origin\n\n    if (this[kOrigins].size >= this[kOptions].maxOrigins && !this[kOrigins].has(origin)) {\n      throw new MaxOriginsReachedError()\n    }\n\n    let dispatcher = this[kClients].get(key)\n    if (!dispatcher) {\n      dispatcher = this[kFactory](opts.origin, allowH2 === false\n        ? { ...this[kOptions], allowH2: false }\n        : this[kOptions])\n\n      const closeClientIfUnused = () => {\n        if (this[kClients].get(key) !== dispatcher) {\n          return\n        }\n\n        if (dispatcher[kConnected] > 0 || dispatcher[kBusy]) {\n          return\n        }\n\n        this[kClients].delete(key)\n        if (!dispatcher.destroyed) {\n          dispatcher.close()\n        }\n\n        let hasOrigin = false\n        for (const client of this[kClients].values()) {\n          if (client[kUrl].origin === dispatcher[kUrl].origin) {\n            hasOrigin = true\n            break\n          }\n        }\n\n        if (!hasOrigin) {\n          this[kOrigins].delete(dispatcher[kUrl].origin)\n        }\n      }\n\n      dispatcher\n        .on('drain', this[kOnDrain])\n        .on('connect', this[kOnConnect])\n        .on('disconnect', (origin, targets, err) => {\n          closeClientIfUnused()\n          this[kOnDisconnect](origin, targets, err)\n        })\n        .on('connectionError', (origin, targets, err) => {\n          closeClientIfUnused()\n          this[kOnConnectionError](origin, targets, err)\n        })\n\n      this[kClients].set(key, dispatcher)\n      this[kOrigins].add(origin)\n    }\n\n    return dispatcher.dispatch(opts, handler)\n  }\n\n  [kClose] () {\n    const closePromises = []\n    for (const dispatcher of this[kClients].values()) {\n      closePromises.push(dispatcher.close())\n    }\n    this[kClients].clear()\n\n    return Promise.all(closePromises)\n  }\n\n  [kDestroy] (err) {\n    const destroyPromises = []\n    for (const dispatcher of this[kClients].values()) {\n      destroyPromises.push(dispatcher.destroy(err))\n    }\n    this[kClients].clear()\n\n    return Promise.all(destroyPromises)\n  }\n\n  get stats () {\n    const allClientStats = {}\n    for (const dispatcher of this[kClients].values()) {\n      if (dispatcher.stats) {\n        allClientStats[dispatcher[kUrl].origin] = dispatcher.stats\n      }\n    }\n    return allClientStats\n  }\n}\n\nmodule.exports = Agent\n", "'use strict'\n\nconst Dispatcher = require('./dispatcher')\nconst { InvalidArgumentError } = require('../core/errors')\nconst { toRawHeaders } = require('../core/util')\n\nclass LegacyHandlerWrapper {\n  #handler\n\n  constructor (handler) {\n    this.#handler = handler\n  }\n\n  onRequestStart (controller, context) {\n    this.#handler.onConnect?.((reason) => controller.abort(reason), context)\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    const rawHeaders = controller?.rawHeaders ?? toRawHeaders(headers ?? {})\n    this.#handler.onUpgrade?.(statusCode, rawHeaders, socket)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    const rawHeaders = controller?.rawHeaders ?? toRawHeaders(headers ?? {})\n\n    if (this.#handler.onHeaders?.(statusCode, rawHeaders, () => controller.resume(), statusMessage) === false) {\n      controller.pause()\n    }\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.#handler.onData?.(chunk) === false) {\n      controller.pause()\n    }\n  }\n\n  onResponseEnd (controller, trailers) {\n    const rawTrailers = controller?.rawTrailers ?? toRawHeaders(trailers ?? {})\n    this.#handler.onComplete?.(rawTrailers)\n  }\n\n  onResponseError (_controller, err) {\n    if (!this.#handler.onError) {\n      throw err\n    }\n\n    this.#handler.onError(err)\n  }\n\n  onBodySent (chunk) {\n    this.#handler.onBodySent?.(chunk)\n  }\n\n  onRequestSent () {\n    this.#handler.onRequestSent?.()\n  }\n\n  onResponseStarted () {\n    this.#handler.onResponseStarted?.()\n  }\n}\n\nclass Dispatcher1Wrapper extends Dispatcher {\n  #dispatcher\n\n  constructor (dispatcher) {\n    super()\n\n    if (!dispatcher || typeof dispatcher.dispatch !== 'function') {\n      throw new InvalidArgumentError('Argument dispatcher must implement dispatch')\n    }\n\n    this.#dispatcher = dispatcher\n  }\n\n  static wrapHandler (handler) {\n    if (!handler || typeof handler !== 'object') {\n      throw new InvalidArgumentError('handler must be an object')\n    }\n\n    if (typeof handler.onRequestStart === 'function') {\n      return handler\n    }\n\n    return new LegacyHandlerWrapper(handler)\n  }\n\n  dispatch (opts, handler) {\n    // Legacy (v1) consumers do not support HTTP/2, so force HTTP/1.1.\n    // See https://github.com/nodejs/undici/issues/4989\n    if (opts.allowH2 !== false) {\n      opts = { ...opts, allowH2: false }\n    }\n\n    return this.#dispatcher.dispatch(opts, Dispatcher1Wrapper.wrapHandler(handler))\n  }\n\n  close (...args) {\n    return this.#dispatcher.close(...args)\n  }\n\n  destroy (...args) {\n    return this.#dispatcher.destroy(...args)\n  }\n}\n\nmodule.exports = Dispatcher1Wrapper\n", "'use strict'\n\nconst { Buffer } = require('node:buffer')\nconst net = require('node:net')\nconst { InvalidArgumentError } = require('./errors')\n\n/**\n * Parse an address and determine its type\n * @param {string} address - The address to parse\n * @returns {{type: number, buffer: Buffer}} Address type and buffer\n */\nfunction parseAddress (address) {\n  // Check if it's an IPv4 address\n  if (net.isIPv4(address)) {\n    const parts = address.split('.').map(Number)\n    return {\n      type: 0x01, // IPv4\n      buffer: Buffer.from(parts)\n    }\n  }\n\n  // Check if it's an IPv6 address\n  if (net.isIPv6(address)) {\n    return {\n      type: 0x04, // IPv6\n      buffer: parseIPv6(address)\n    }\n  }\n\n  // Otherwise, treat as domain name\n  const domainBuffer = Buffer.from(address, 'utf8')\n  if (domainBuffer.length > 255) {\n    throw new InvalidArgumentError('Domain name too long (max 255 bytes)')\n  }\n\n  return {\n    type: 0x03, // Domain\n    buffer: Buffer.concat([Buffer.from([domainBuffer.length]), domainBuffer])\n  }\n}\n\n/**\n * Parse IPv6 address to buffer\n * @param {string} address - IPv6 address string\n * @returns {Buffer} 16-byte buffer\n */\nfunction parseIPv6 (address) {\n  const buffer = Buffer.alloc(16)\n  let normalizedAddress = address\n\n  // Expand an embedded IPv4 tail into the last two IPv6 groups.\n  if (address.includes('.')) {\n    const lastColonIndex = address.lastIndexOf(':')\n    const ipv4Part = address.slice(lastColonIndex + 1)\n\n    if (net.isIPv4(ipv4Part)) {\n      const octets = ipv4Part.split('.').map(Number)\n      const high = ((octets[0] << 8) | octets[1]).toString(16)\n      const low = ((octets[2] << 8) | octets[3]).toString(16)\n      normalizedAddress = `${address.slice(0, lastColonIndex)}:${high}:${low}`\n    }\n  }\n\n  // Handle compressed notation (::)\n  const doubleColonIndex = normalizedAddress.indexOf('::')\n  if (doubleColonIndex !== -1) {\n    const before = normalizedAddress.slice(0, doubleColonIndex)\n    const after = normalizedAddress.slice(doubleColonIndex + 2)\n    const beforeParts = before === '' ? [] : before.split(':')\n    const afterParts = after === '' ? [] : after.split(':')\n\n    let bufferIndex = 0\n    for (const part of beforeParts) {\n      buffer.writeUInt16BE(parseInt(part, 16), bufferIndex)\n      bufferIndex += 2\n    }\n    bufferIndex = 16 - afterParts.length * 2\n    for (const part of afterParts) {\n      buffer.writeUInt16BE(parseInt(part, 16), bufferIndex)\n      bufferIndex += 2\n    }\n  } else {\n    const parts = normalizedAddress.split(':')\n    for (let i = 0; i < parts.length; i++) {\n      buffer.writeUInt16BE(parseInt(parts[i], 16), i * 2)\n    }\n  }\n\n  return buffer\n}\n\n/**\n * Build a SOCKS5 address buffer\n * @param {number} type - Address type (1=IPv4, 3=Domain, 4=IPv6)\n * @param {Buffer} addressBuffer - The address data\n * @param {number} port - Port number\n * @returns {Buffer} Complete address buffer including type, address, and port\n */\nfunction buildAddressBuffer (type, addressBuffer, port) {\n  const portBuffer = Buffer.allocUnsafe(2)\n  portBuffer.writeUInt16BE(port, 0)\n\n  return Buffer.concat([\n    Buffer.from([type]),\n    addressBuffer,\n    portBuffer\n  ])\n}\n\n/**\n * Parse address from SOCKS5 response\n * @param {Buffer} buffer - Buffer containing the address\n * @param {number} offset - Starting offset in buffer\n * @returns {{address: string, port: number, bytesRead: number}}\n */\nfunction parseResponseAddress (buffer, offset = 0) {\n  if (buffer.length < offset + 1) {\n    throw new InvalidArgumentError('Buffer too small to contain address type')\n  }\n\n  const addressType = buffer[offset]\n  let address\n  let currentOffset = offset + 1\n\n  switch (addressType) {\n    case 0x01: { // IPv4\n      if (buffer.length < currentOffset + 6) {\n        throw new InvalidArgumentError('Buffer too small for IPv4 address')\n      }\n      address = Array.from(buffer.subarray(currentOffset, currentOffset + 4)).join('.')\n      currentOffset += 4\n      break\n    }\n\n    case 0x03: { // Domain\n      if (buffer.length < currentOffset + 1) {\n        throw new InvalidArgumentError('Buffer too small for domain length')\n      }\n      const domainLength = buffer[currentOffset]\n      currentOffset += 1\n\n      if (buffer.length < currentOffset + domainLength + 2) {\n        throw new InvalidArgumentError('Buffer too small for domain address')\n      }\n      address = buffer.subarray(currentOffset, currentOffset + domainLength).toString('utf8')\n      currentOffset += domainLength\n      break\n    }\n\n    case 0x04: { // IPv6\n      if (buffer.length < currentOffset + 18) {\n        throw new InvalidArgumentError('Buffer too small for IPv6 address')\n      }\n      // Convert buffer to IPv6 string\n      const parts = []\n      for (let i = 0; i < 8; i++) {\n        const value = buffer.readUInt16BE(currentOffset + i * 2)\n        parts.push(value.toString(16))\n      }\n      address = parts.join(':')\n      currentOffset += 16\n      break\n    }\n\n    default:\n      throw new InvalidArgumentError(`Invalid address type: ${addressType}`)\n  }\n\n  // Parse port\n  if (buffer.length < currentOffset + 2) {\n    throw new InvalidArgumentError('Buffer too small for port')\n  }\n  const port = buffer.readUInt16BE(currentOffset)\n  currentOffset += 2\n\n  return {\n    address,\n    port,\n    bytesRead: currentOffset - offset\n  }\n}\n\n/**\n * Create error for SOCKS5 reply code\n * @param {number} replyCode - SOCKS5 reply code\n * @returns {Error} Appropriate error object\n */\nfunction createReplyError (replyCode) {\n  const messages = {\n    0x01: 'General SOCKS server failure',\n    0x02: 'Connection not allowed by ruleset',\n    0x03: 'Network unreachable',\n    0x04: 'Host unreachable',\n    0x05: 'Connection refused',\n    0x06: 'TTL expired',\n    0x07: 'Command not supported',\n    0x08: 'Address type not supported'\n  }\n\n  const message = messages[replyCode] || `Unknown SOCKS5 error code: ${replyCode}`\n  const error = new Error(message)\n  error.code = `SOCKS5_${replyCode}`\n  return error\n}\n\nmodule.exports = {\n  parseAddress,\n  parseIPv6,\n  buildAddressBuffer,\n  parseResponseAddress,\n  createReplyError\n}\n", "'use strict'\n\nconst { EventEmitter } = require('node:events')\nconst { Buffer } = require('node:buffer')\nconst { InvalidArgumentError, Socks5ProxyError } = require('./errors')\nconst { debuglog } = require('node:util')\nconst { parseAddress } = require('./socks5-utils')\n\nconst debug = debuglog('undici:socks5')\nconst EMPTY_BUFFER = Buffer.alloc(0)\n\n// SOCKS5 constants\nconst SOCKS_VERSION = 0x05\n\n// Authentication methods\nconst AUTH_METHODS = {\n  NO_AUTH: 0x00,\n  GSSAPI: 0x01,\n  USERNAME_PASSWORD: 0x02,\n  NO_ACCEPTABLE: 0xFF\n}\n\n// SOCKS5 commands\nconst COMMANDS = {\n  CONNECT: 0x01,\n  BIND: 0x02,\n  UDP_ASSOCIATE: 0x03\n}\n\n// Address types\nconst ADDRESS_TYPES = {\n  IPV4: 0x01,\n  DOMAIN: 0x03,\n  IPV6: 0x04\n}\n\n// Reply codes\nconst REPLY_CODES = {\n  SUCCEEDED: 0x00,\n  GENERAL_FAILURE: 0x01,\n  CONNECTION_NOT_ALLOWED: 0x02,\n  NETWORK_UNREACHABLE: 0x03,\n  HOST_UNREACHABLE: 0x04,\n  CONNECTION_REFUSED: 0x05,\n  TTL_EXPIRED: 0x06,\n  COMMAND_NOT_SUPPORTED: 0x07,\n  ADDRESS_TYPE_NOT_SUPPORTED: 0x08\n}\n\n// State machine states\nconst STATES = {\n  INITIAL: 'initial',\n  HANDSHAKING: 'handshaking',\n  AUTHENTICATING: 'authenticating',\n  AUTHENTICATED: 'authenticated',\n  CONNECTING: 'connecting',\n  CONNECTED: 'connected',\n  ERROR: 'error',\n  CLOSED: 'closed'\n}\n\n/**\n * SOCKS5 client implementation\n * Handles SOCKS5 protocol negotiation and connection establishment\n */\nclass Socks5Client extends EventEmitter {\n  constructor (socket, options = {}) {\n    super()\n\n    if (!socket) {\n      throw new InvalidArgumentError('socket is required')\n    }\n\n    this.socket = socket\n    this.options = options\n    this.state = STATES.INITIAL\n    this.buffer = EMPTY_BUFFER\n    this.onSocketData = this.onData.bind(this)\n    this.onSocketError = this.onError.bind(this)\n    this.onSocketClose = this.onClose.bind(this)\n\n    // Authentication settings\n    this.authMethods = []\n    if (options.username && options.password) {\n      this.authMethods.push(AUTH_METHODS.USERNAME_PASSWORD)\n    }\n    this.authMethods.push(AUTH_METHODS.NO_AUTH)\n\n    // Socket event handlers\n    this.socket.on('data', this.onSocketData)\n    this.socket.on('error', this.onSocketError)\n    this.socket.on('close', this.onSocketClose)\n  }\n\n  /**\n   * Handle incoming data from the socket\n   */\n  onData (data) {\n    debug('received data', data.length, 'bytes in state', this.state)\n    this.buffer = Buffer.concat([this.buffer, data])\n\n    try {\n      switch (this.state) {\n        case STATES.HANDSHAKING:\n          this.handleHandshakeResponse()\n          break\n        case STATES.AUTHENTICATING:\n          this.handleAuthResponse()\n          break\n        case STATES.CONNECTING:\n          this.handleConnectResponse()\n          break\n      }\n    } catch (err) {\n      this.onError(err)\n    }\n  }\n\n  /**\n   * Handle socket errors\n   */\n  onError (err) {\n    debug('socket error', err)\n    this.state = STATES.ERROR\n    this.emit('error', err)\n    this.destroy()\n  }\n\n  /**\n   * Handle socket close\n   */\n  onClose () {\n    debug('socket closed')\n    this.state = STATES.CLOSED\n    this.emit('close')\n  }\n\n  /**\n   * Destroy the client and underlying socket\n   */\n  destroy () {\n    if (this.socket && !this.socket.destroyed) {\n      this.socket.destroy()\n    }\n  }\n\n  markAuthenticated () {\n    this.state = STATES.AUTHENTICATED\n    this.emit('authenticated')\n  }\n\n  /**\n   * Start the SOCKS5 handshake\n   */\n  handshake () {\n    if (this.state !== STATES.INITIAL) {\n      throw new InvalidArgumentError('Handshake already started')\n    }\n\n    debug('starting handshake with', this.authMethods.length, 'auth methods')\n    this.state = STATES.HANDSHAKING\n\n    // Build handshake request\n    // +----+----------+----------+\n    // |VER | NMETHODS | METHODS  |\n    // +----+----------+----------+\n    // | 1  |    1     | 1 to 255 |\n    // +----+----------+----------+\n    const request = Buffer.alloc(2 + this.authMethods.length)\n    request[0] = SOCKS_VERSION\n    request[1] = this.authMethods.length\n    this.authMethods.forEach((method, i) => {\n      request[2 + i] = method\n    })\n\n    this.socket.write(request)\n  }\n\n  /**\n   * Handle handshake response from server\n   */\n  handleHandshakeResponse () {\n    if (this.buffer.length < 2) {\n      return // Not enough data yet\n    }\n\n    const version = this.buffer[0]\n    const method = this.buffer[1]\n\n    if (version !== SOCKS_VERSION) {\n      throw new Socks5ProxyError(`Invalid SOCKS version: ${version}`, 'UND_ERR_SOCKS5_VERSION')\n    }\n\n    if (method === AUTH_METHODS.NO_ACCEPTABLE) {\n      throw new Socks5ProxyError('No acceptable authentication method', 'UND_ERR_SOCKS5_AUTH_REJECTED')\n    }\n\n    this.buffer = this.buffer.subarray(2)\n    debug('server selected auth method', method)\n\n    if (method === AUTH_METHODS.NO_AUTH) {\n      this.markAuthenticated()\n    } else if (method === AUTH_METHODS.USERNAME_PASSWORD) {\n      this.state = STATES.AUTHENTICATING\n      this.sendAuthRequest()\n    } else {\n      throw new Socks5ProxyError(`Unsupported authentication method: ${method}`, 'UND_ERR_SOCKS5_AUTH_METHOD')\n    }\n  }\n\n  /**\n   * Send username/password authentication request\n   */\n  sendAuthRequest () {\n    const { username, password } = this.options\n\n    if (!username || !password) {\n      throw new InvalidArgumentError('Username and password required for authentication')\n    }\n\n    debug('sending username/password auth')\n\n    // Username/Password authentication request (RFC 1929)\n    // +----+------+----------+------+----------+\n    // |VER | ULEN |  UNAME   | PLEN |  PASSWD  |\n    // +----+------+----------+------+----------+\n    // | 1  |  1   | 1 to 255 |  1   | 1 to 255 |\n    // +----+------+----------+------+----------+\n    const usernameBuffer = Buffer.from(username)\n    const passwordBuffer = Buffer.from(password)\n\n    if (usernameBuffer.length > 255 || passwordBuffer.length > 255) {\n      throw new InvalidArgumentError('Username or password too long')\n    }\n\n    const request = Buffer.alloc(3 + usernameBuffer.length + passwordBuffer.length)\n    request[0] = 0x01 // Sub-negotiation version\n    request[1] = usernameBuffer.length\n    usernameBuffer.copy(request, 2)\n    request[2 + usernameBuffer.length] = passwordBuffer.length\n    passwordBuffer.copy(request, 3 + usernameBuffer.length)\n\n    this.socket.write(request)\n  }\n\n  /**\n   * Handle authentication response\n   */\n  handleAuthResponse () {\n    if (this.buffer.length < 2) {\n      return // Not enough data yet\n    }\n\n    const version = this.buffer[0]\n    const status = this.buffer[1]\n\n    if (version !== 0x01) {\n      throw new Socks5ProxyError(`Invalid auth sub-negotiation version: ${version}`, 'UND_ERR_SOCKS5_AUTH_VERSION')\n    }\n\n    if (status !== 0x00) {\n      throw new Socks5ProxyError('Authentication failed', 'UND_ERR_SOCKS5_AUTH_FAILED')\n    }\n\n    this.buffer = this.buffer.subarray(2)\n    debug('authentication successful')\n    this.markAuthenticated()\n  }\n\n  /**\n   * Send CONNECT command\n   * @param {string} address - Target address (IP or domain)\n   * @param {number} port - Target port\n   */\n  connect (address, port) {\n    if (this.state === STATES.CONNECTING || this.state === STATES.CONNECTED) {\n      throw new InvalidArgumentError('Connection already in progress')\n    }\n\n    if (this.state !== STATES.AUTHENTICATED) {\n      throw new InvalidArgumentError('Client must be authenticated before CONNECT')\n    }\n\n    debug('connecting to', address, port)\n    this.state = STATES.CONNECTING\n\n    const request = this.buildConnectRequest(COMMANDS.CONNECT, address, port)\n    this.socket.write(request)\n  }\n\n  /**\n   * Build a SOCKS5 request\n   */\n  buildConnectRequest (command, address, port) {\n    // Parse address to determine type and buffer\n    const { type: addressType, buffer: addressBuffer } = parseAddress(address)\n\n    // Build request\n    // +----+-----+-------+------+----------+----------+\n    // |VER | CMD |  RSV  | ATYP | DST.ADDR | DST.PORT |\n    // +----+-----+-------+------+----------+----------+\n    // | 1  |  1  | X'00' |  1   | Variable |    2     |\n    // +----+-----+-------+------+----------+----------+\n    const request = Buffer.alloc(4 + addressBuffer.length + 2)\n    request[0] = SOCKS_VERSION\n    request[1] = command\n    request[2] = 0x00 // Reserved\n    request[3] = addressType\n    addressBuffer.copy(request, 4)\n    request.writeUInt16BE(port, 4 + addressBuffer.length)\n\n    return request\n  }\n\n  /**\n   * Handle CONNECT response\n   */\n  handleConnectResponse () {\n    if (this.buffer.length < 4) {\n      return // Not enough data for header\n    }\n\n    const version = this.buffer[0]\n    const reply = this.buffer[1]\n    const addressType = this.buffer[3]\n\n    if (version !== SOCKS_VERSION) {\n      throw new Socks5ProxyError(`Invalid SOCKS version in reply: ${version}`, 'UND_ERR_SOCKS5_REPLY_VERSION')\n    }\n\n    // Calculate the expected response length\n    let responseLength = 4 // VER + REP + RSV + ATYP\n    if (addressType === ADDRESS_TYPES.IPV4) {\n      responseLength += 4 + 2 // IPv4 + port\n    } else if (addressType === ADDRESS_TYPES.DOMAIN) {\n      if (this.buffer.length < 5) {\n        return // Need domain length byte\n      }\n      responseLength += 1 + this.buffer[4] + 2 // length byte + domain + port\n    } else if (addressType === ADDRESS_TYPES.IPV6) {\n      responseLength += 16 + 2 // IPv6 + port\n    } else {\n      throw new Socks5ProxyError(`Invalid address type in reply: ${addressType}`, 'UND_ERR_SOCKS5_ADDR_TYPE')\n    }\n\n    if (this.buffer.length < responseLength) {\n      return // Not enough data for full response\n    }\n\n    if (reply !== REPLY_CODES.SUCCEEDED) {\n      const errorMessage = this.getReplyErrorMessage(reply)\n      throw new Socks5ProxyError(`SOCKS5 connection failed: ${errorMessage}`, `UND_ERR_SOCKS5_REPLY_${reply}`)\n    }\n\n    // Parse bound address and port\n    let boundAddress\n    let offset = 4\n\n    if (addressType === ADDRESS_TYPES.IPV4) {\n      boundAddress = Array.from(this.buffer.subarray(offset, offset + 4)).join('.')\n      offset += 4\n    } else if (addressType === ADDRESS_TYPES.DOMAIN) {\n      const domainLength = this.buffer[offset]\n      offset += 1\n      boundAddress = this.buffer.subarray(offset, offset + domainLength).toString()\n      offset += domainLength\n    } else if (addressType === ADDRESS_TYPES.IPV6) {\n      // Parse IPv6 address from 16-byte buffer\n      const parts = []\n      for (let i = 0; i < 8; i++) {\n        const value = this.buffer.readUInt16BE(offset + i * 2)\n        parts.push(value.toString(16))\n      }\n      boundAddress = parts.join(':')\n      offset += 16\n    }\n\n    const boundPort = this.buffer.readUInt16BE(offset)\n\n    this.buffer = EMPTY_BUFFER\n    this.state = STATES.CONNECTED\n    this.socket.removeListener('data', this.onSocketData)\n\n    debug('connected, bound address:', boundAddress, 'port:', boundPort)\n    this.emit('connected', { address: boundAddress, port: boundPort })\n  }\n\n  /**\n   * Get human-readable error message for reply code\n   */\n  getReplyErrorMessage (reply) {\n    switch (reply) {\n      case REPLY_CODES.GENERAL_FAILURE:\n        return 'General SOCKS server failure'\n      case REPLY_CODES.CONNECTION_NOT_ALLOWED:\n        return 'Connection not allowed by ruleset'\n      case REPLY_CODES.NETWORK_UNREACHABLE:\n        return 'Network unreachable'\n      case REPLY_CODES.HOST_UNREACHABLE:\n        return 'Host unreachable'\n      case REPLY_CODES.CONNECTION_REFUSED:\n        return 'Connection refused'\n      case REPLY_CODES.TTL_EXPIRED:\n        return 'TTL expired'\n      case REPLY_CODES.COMMAND_NOT_SUPPORTED:\n        return 'Command not supported'\n      case REPLY_CODES.ADDRESS_TYPE_NOT_SUPPORTED:\n        return 'Address type not supported'\n      default:\n        return `Unknown error code: ${reply}`\n    }\n  }\n}\n\nmodule.exports = {\n  Socks5Client,\n  AUTH_METHODS,\n  COMMANDS,\n  ADDRESS_TYPES,\n  REPLY_CODES,\n  STATES\n}\n", "'use strict'\n\nconst net = require('node:net')\nconst { URL } = require('node:url')\n\nlet tls // include tls conditionally since it is not always available\nconst DispatcherBase = require('./dispatcher-base')\nconst { InvalidArgumentError } = require('../core/errors')\nconst { Socks5Client, STATES } = require('../core/socks5-client')\nconst { kDispatch, kClose, kDestroy } = require('../core/symbols')\nconst Pool = require('./pool')\nconst buildConnector = require('../core/connect')\nconst { debuglog } = require('node:util')\n\nconst debug = debuglog('undici:socks5-proxy')\n\nconst kProxyUrl = Symbol('proxy url')\nconst kProxyHeaders = Symbol('proxy headers')\nconst kProxyAuth = Symbol('proxy auth')\nconst kPools = Symbol('pools')\nconst kConnector = Symbol('connector')\n\n// Static flag to ensure warning is only emitted once per process\nlet experimentalWarningEmitted = false\n\n/**\n * SOCKS5 proxy agent for dispatching requests through a SOCKS5 proxy\n */\nclass Socks5ProxyAgent extends DispatcherBase {\n  constructor (proxyUrl, options = {}) {\n    super()\n\n    // Emit experimental warning only once\n    if (!experimentalWarningEmitted) {\n      process.emitWarning(\n        'SOCKS5 proxy support is experimental and subject to change',\n        'ExperimentalWarning'\n      )\n      experimentalWarningEmitted = true\n    }\n\n    if (!proxyUrl) {\n      throw new InvalidArgumentError('Proxy URL is mandatory')\n    }\n\n    // Parse proxy URL\n    const url = typeof proxyUrl === 'string' ? new URL(proxyUrl) : proxyUrl\n\n    if (url.protocol !== 'socks5:' && url.protocol !== 'socks:') {\n      throw new InvalidArgumentError('Proxy URL must use socks5:// or socks:// protocol')\n    }\n\n    this[kProxyUrl] = url\n    this[kProxyHeaders] = options.headers || {}\n\n    // Extract auth from URL or options\n    this[kProxyAuth] = {\n      username: options.username || (url.username ? decodeURIComponent(url.username) : null),\n      password: options.password || (url.password ? decodeURIComponent(url.password) : null)\n    }\n\n    // Create connector for proxy connection\n    this[kConnector] = options.connect || buildConnector({\n      ...options.proxyTls,\n      servername: options.proxyTls?.servername || url.hostname\n    })\n\n    // Pools for the actual HTTP connections (with SOCKS5 tunnel connect function), keyed by origin\n    this[kPools] = new Map()\n  }\n\n  /**\n   * Create a SOCKS5 connection to the proxy\n   */\n  async createSocks5Connection (targetHost, targetPort) {\n    const proxyHost = this[kProxyUrl].hostname\n    const proxyPort = parseInt(this[kProxyUrl].port) || 1080\n\n    debug('creating SOCKS5 connection to', proxyHost, proxyPort)\n\n    // Connect to the SOCKS5 proxy\n    const socketReady = Promise.withResolvers()\n\n    const onSocketConnect = () => {\n      socket.removeListener('error', onSocketError)\n      socketReady.resolve(socket)\n    }\n\n    const onSocketError = (err) => {\n      socket.removeListener('connect', onSocketConnect)\n      socketReady.reject(err)\n    }\n\n    const socket = net.connect({\n      host: proxyHost,\n      port: proxyPort\n    })\n\n    socket.once('connect', onSocketConnect)\n    socket.once('error', onSocketError)\n\n    await socketReady.promise\n\n    // Create SOCKS5 client\n    const socks5Client = new Socks5Client(socket, this[kProxyAuth])\n\n    // Handle SOCKS5 errors\n    socks5Client.on('error', (err) => {\n      debug('SOCKS5 error:', err)\n      socket.destroy()\n    })\n\n    // Perform SOCKS5 handshake\n    await socks5Client.handshake()\n\n    // Wait for authentication (if required)\n    const authenticationReady = Promise.withResolvers()\n\n    const authenticationTimeout = setTimeout(() => {\n      authenticationReady.reject(new Error('SOCKS5 authentication timeout'))\n    }, 5000)\n\n    const onAuthenticated = () => {\n      clearTimeout(authenticationTimeout)\n      socks5Client.removeListener('error', onAuthenticationError)\n      authenticationReady.resolve()\n    }\n\n    const onAuthenticationError = (err) => {\n      clearTimeout(authenticationTimeout)\n      socks5Client.removeListener('authenticated', onAuthenticated)\n      authenticationReady.reject(err)\n    }\n\n    // Check if already authenticated (for NO_AUTH method)\n    if (socks5Client.state === STATES.AUTHENTICATED) {\n      clearTimeout(authenticationTimeout)\n      authenticationReady.resolve()\n    } else {\n      socks5Client.once('authenticated', onAuthenticated)\n      socks5Client.once('error', onAuthenticationError)\n    }\n\n    await authenticationReady.promise\n\n    // Send CONNECT command\n    await socks5Client.connect(targetHost, targetPort)\n\n    // Wait for connection\n    const connectionReady = Promise.withResolvers()\n\n    const connectionTimeout = setTimeout(() => {\n      connectionReady.reject(new Error('SOCKS5 connection timeout'))\n    }, 5000)\n\n    const onConnected = (info) => {\n      debug('SOCKS5 tunnel established to', targetHost, targetPort, 'via', info)\n      clearTimeout(connectionTimeout)\n      socks5Client.removeListener('error', onConnectionError)\n      connectionReady.resolve()\n    }\n\n    const onConnectionError = (err) => {\n      clearTimeout(connectionTimeout)\n      socks5Client.removeListener('connected', onConnected)\n      connectionReady.reject(err)\n    }\n\n    socks5Client.once('connected', onConnected)\n    socks5Client.once('error', onConnectionError)\n\n    await connectionReady.promise\n\n    return socket\n  }\n\n  /**\n   * Dispatch a request through the SOCKS5 proxy\n   */\n  async [kDispatch] (opts, handler) {\n    const { origin } = opts\n\n    debug('dispatching request to', origin, 'via SOCKS5')\n\n    try {\n      const originKey = String(origin)\n      let pool = this[kPools].get(originKey)\n      // Create a Pool per origin so requests are not routed to the wrong host\n      if (!pool || pool.destroyed || pool.closed) {\n        pool = new Pool(origin, {\n          pipelining: opts.pipelining,\n          connections: opts.connections,\n          connect: async (connectOpts, callback) => {\n            try {\n              const url = new URL(origin)\n              const targetHost = url.hostname\n              const targetPort = parseInt(url.port) || (url.protocol === 'https:' ? 443 : 80)\n\n              debug('establishing SOCKS5 connection to', targetHost, targetPort)\n\n              // Create SOCKS5 tunnel\n              const socket = await this.createSocks5Connection(targetHost, targetPort)\n\n              // Handle TLS if needed\n              let finalSocket = socket\n              if (url.protocol === 'https:') {\n                if (!tls) {\n                  tls = require('node:tls')\n                }\n                debug('upgrading to TLS')\n                finalSocket = tls.connect({\n                  socket,\n                  servername: targetHost,\n                  ...connectOpts.tls || {}\n                })\n\n                const tlsReady = Promise.withResolvers()\n                finalSocket.once('secureConnect', tlsReady.resolve)\n                finalSocket.once('error', tlsReady.reject)\n                await tlsReady.promise\n              }\n\n              callback(null, finalSocket)\n            } catch (err) {\n              debug('SOCKS5 connection error:', err)\n              callback(err)\n            }\n          }\n        })\n        this[kPools].set(originKey, pool)\n      }\n\n      // Dispatch the request through the per-origin pool\n      return pool[kDispatch](opts, handler)\n    } catch (err) {\n      debug('dispatch error:', err)\n      if (typeof handler.onError === 'function') {\n        handler.onError(err)\n      } else {\n        throw err\n      }\n    }\n  }\n\n  async [kClose] () {\n    const closePromises = []\n    for (const pool of this[kPools].values()) {\n      closePromises.push(pool.close())\n    }\n    this[kPools].clear()\n    await Promise.all(closePromises)\n  }\n\n  async [kDestroy] (err) {\n    const destroyPromises = []\n    for (const pool of this[kPools].values()) {\n      destroyPromises.push(pool.destroy(err))\n    }\n    this[kPools].clear()\n    await Promise.all(destroyPromises)\n  }\n}\n\nmodule.exports = Socks5ProxyAgent\n", "'use strict'\n\nconst { kProxy, kClose, kDestroy, kDispatch } = require('../core/symbols')\nconst Agent = require('./agent')\nconst Pool = require('./pool')\nconst DispatcherBase = require('./dispatcher-base')\nconst { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require('../core/errors')\nconst buildConnector = require('../core/connect')\nconst Client = require('./client')\nconst { channels } = require('../core/diagnostics')\nconst Socks5ProxyAgent = require('./socks5-proxy-agent')\n\nconst kAgent = Symbol('proxy agent')\nconst kClient = Symbol('proxy client')\nconst kProxyHeaders = Symbol('proxy headers')\nconst kRequestTls = Symbol('request tls settings')\nconst kProxyTls = Symbol('proxy tls settings')\nconst kConnectEndpoint = Symbol('connect endpoint function')\nconst kConnectEndpointHTTP1 = Symbol('connect endpoint function (http/1.1 only)')\nconst kTunnelProxy = Symbol('tunnel proxy')\n\nfunction defaultProtocolPort (protocol) {\n  return protocol === 'https:' ? 443 : 80\n}\n\nfunction defaultFactory (origin, opts) {\n  return new Pool(origin, opts)\n}\n\nconst noop = () => {}\n\nfunction defaultAgentFactory (origin, opts) {\n  if (opts.connections === 1) {\n    return new Client(origin, opts)\n  }\n  return new Pool(origin, opts)\n}\n\nclass Http1ProxyWrapper extends DispatcherBase {\n  #client\n\n  constructor (proxyUrl, { headers = {}, connect, factory }) {\n    if (!proxyUrl) {\n      throw new InvalidArgumentError('Proxy URL is mandatory')\n    }\n\n    super()\n\n    this[kProxyHeaders] = headers\n    if (factory) {\n      this.#client = factory(proxyUrl, { connect })\n    } else {\n      this.#client = new Client(proxyUrl, { connect })\n    }\n  }\n\n  [kDispatch] (opts, handler) {\n    const onResponseStart = handler.onResponseStart\n    handler.onResponseStart = function (controller, statusCode, data, statusMessage) {\n      if (statusCode === 407) {\n        if (typeof handler.onResponseError === 'function') {\n          handler.onResponseError(controller, new InvalidArgumentError('Proxy Authentication Required (407)'))\n        }\n        return\n      }\n      if (onResponseStart) onResponseStart.call(this, controller, statusCode, data, statusMessage)\n    }\n\n    // Rewrite request as an HTTP1 Proxy request, without tunneling.\n    const {\n      origin,\n      path = '/',\n      headers = {}\n    } = opts\n\n    opts.path = origin + path\n\n    if (!('host' in headers) && !('Host' in headers)) {\n      const { host } = new URL(origin)\n      headers.host = host\n    }\n    opts.headers = { ...this[kProxyHeaders], ...headers }\n\n    return this.#client[kDispatch](opts, handler)\n  }\n\n  [kClose] () {\n    return this.#client.close()\n  }\n\n  [kDestroy] (err) {\n    return this.#client.destroy(err)\n  }\n}\n\nclass ProxyAgent extends DispatcherBase {\n  constructor (opts) {\n    if (!opts || (typeof opts === 'object' && !(opts instanceof URL) && !opts.uri)) {\n      throw new InvalidArgumentError('Proxy uri is mandatory')\n    }\n\n    const { clientFactory = defaultFactory } = opts\n    if (typeof clientFactory !== 'function') {\n      throw new InvalidArgumentError('Proxy opts.clientFactory must be a function.')\n    }\n\n    const { proxyTunnel = true, connectTimeout } = opts\n\n    super()\n\n    const url = this.#getUrl(opts)\n    const { href, origin, port, protocol, username, password, hostname: proxyHostname } = url\n\n    this[kProxy] = { uri: href, protocol }\n    this[kRequestTls] = opts.requestTls\n    this[kProxyTls] = opts.proxyTls\n    this[kProxyHeaders] = opts.headers || {}\n    this[kTunnelProxy] = proxyTunnel\n\n    if (opts.auth && opts.token) {\n      throw new InvalidArgumentError('opts.auth cannot be used in combination with opts.token')\n    } else if (opts.auth) {\n      /* @deprecated in favour of opts.token */\n      this[kProxyHeaders]['proxy-authorization'] = `Basic ${opts.auth}`\n    } else if (opts.token) {\n      this[kProxyHeaders]['proxy-authorization'] = opts.token\n    } else if (username && password) {\n      this[kProxyHeaders]['proxy-authorization'] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString('base64')}`\n    } else if (username) {\n      this[kProxyHeaders]['proxy-authorization'] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:`).toString('base64')}`\n    }\n\n    const connect = buildConnector({ timeout: connectTimeout, ...opts.proxyTls })\n    this[kConnectEndpoint] = buildConnector({ timeout: connectTimeout, ...opts.requestTls })\n    this[kConnectEndpointHTTP1] = buildConnector({ timeout: connectTimeout, ...opts.requestTls, allowH2: false })\n\n    const agentFactory = opts.factory || defaultAgentFactory\n    const factory = (origin, options) => {\n      const { protocol } = new URL(origin)\n\n      // Handle SOCKS5 proxy\n      if (this[kProxy].protocol === 'socks5:' || this[kProxy].protocol === 'socks:') {\n        return new Socks5ProxyAgent(this[kProxy].uri, {\n          headers: this[kProxyHeaders],\n          connect,\n          factory: agentFactory,\n          username: opts.username || username,\n          password: opts.password || password,\n          proxyTls: opts.proxyTls\n        })\n      }\n\n      if (!this[kTunnelProxy] && protocol === 'http:' && this[kProxy].protocol === 'http:') {\n        return new Http1ProxyWrapper(this[kProxy].uri, {\n          headers: this[kProxyHeaders],\n          connect,\n          factory: agentFactory\n        })\n      }\n      return agentFactory(origin, options)\n    }\n\n    // For SOCKS5 proxies, we don't need a client to the proxy itself\n    // The SOCKS5 connection is handled within Socks5ProxyAgent\n    if (protocol === 'socks5:' || protocol === 'socks:') {\n      this[kClient] = null\n    } else {\n      this[kClient] = clientFactory(url, { connect })\n    }\n\n    this[kAgent] = new Agent({\n      ...opts,\n      factory,\n      connect: async (opts, callback) => {\n        // SOCKS5 proxies handle their own connections via Socks5ProxyAgent,\n        // so this connect function should never be called for them.\n        if (!this[kClient]) {\n          callback(new InvalidArgumentError('Cannot establish tunnel connection without a proxy client'))\n          return\n        }\n\n        let requestedPath = opts.host\n        if (!opts.port) {\n          requestedPath += `:${defaultProtocolPort(opts.protocol)}`\n        }\n        try {\n          const connectParams = {\n            origin,\n            port,\n            path: requestedPath,\n            signal: opts.signal,\n            headers: {\n              ...this[kProxyHeaders],\n              host: opts.host,\n              ...(opts.connections == null || opts.connections > 0 ? { 'proxy-connection': 'keep-alive' } : {})\n            },\n            servername: this[kProxyTls]?.servername || proxyHostname\n          }\n          const { socket, statusCode } = await this[kClient].connect(connectParams)\n          if (statusCode !== 200) {\n            socket.on('error', noop).destroy()\n            callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`))\n            return\n          }\n\n          if (channels.proxyConnected.hasSubscribers) {\n            channels.proxyConnected.publish({\n              socket,\n              connectParams\n            })\n          }\n\n          if (opts.protocol !== 'https:') {\n            callback(null, socket)\n            return\n          }\n          let servername\n          if (this[kRequestTls]) {\n            servername = this[kRequestTls].servername\n          } else {\n            servername = opts.servername\n          }\n          const connectEndpoint = opts.allowH2 === false\n            ? this[kConnectEndpointHTTP1]\n            : this[kConnectEndpoint]\n\n          connectEndpoint({ ...opts, servername, httpSocket: socket }, callback)\n        } catch (err) {\n          if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') {\n            // Throw a custom error to avoid loop in client.js#connect\n            callback(new SecureProxyConnectionError(err))\n          } else {\n            callback(err)\n          }\n        }\n      }\n    })\n  }\n\n  dispatch (opts, handler) {\n    const headers = buildHeaders(opts.headers)\n    throwIfProxyAuthIsSent(headers)\n\n    if (headers && !('host' in headers) && !('Host' in headers)) {\n      const { host } = new URL(opts.origin)\n      headers.host = host\n    }\n\n    return this[kAgent].dispatch(\n      {\n        ...opts,\n        headers\n      },\n      handler\n    )\n  }\n\n  /**\n   * @param {import('../../types/proxy-agent').ProxyAgent.Options | string | URL} opts\n   * @returns {URL}\n   */\n  #getUrl (opts) {\n    if (typeof opts === 'string') {\n      return new URL(opts)\n    } else if (opts instanceof URL) {\n      return opts\n    } else {\n      return new URL(opts.uri)\n    }\n  }\n\n  [kClose] () {\n    const promises = [this[kAgent].close()]\n    if (this[kClient]) {\n      promises.push(this[kClient].close())\n    }\n    return Promise.all(promises)\n  }\n\n  [kDestroy] () {\n    const promises = [this[kAgent].destroy()]\n    if (this[kClient]) {\n      promises.push(this[kClient].destroy())\n    }\n    return Promise.all(promises)\n  }\n}\n\n/**\n * @param {string[] | Record<string, string>} headers\n * @returns {Record<string, string>}\n */\nfunction buildHeaders (headers) {\n  // When using undici.fetch, the headers list is stored\n  // as an array.\n  if (Array.isArray(headers)) {\n    /** @type {Record<string, string>} */\n    const headersPair = {}\n\n    for (let i = 0; i < headers.length; i += 2) {\n      headersPair[headers[i]] = headers[i + 1]\n    }\n\n    return headersPair\n  }\n\n  return headers\n}\n\n/**\n * @param {Record<string, string>} headers\n *\n * Previous versions of ProxyAgent suggests the Proxy-Authorization in request headers\n * Nevertheless, it was changed and to avoid a security vulnerability by end users\n * this check was created.\n * It should be removed in the next major version for performance reasons\n */\nfunction throwIfProxyAuthIsSent (headers) {\n  const existProxyAuth = headers && Object.keys(headers)\n    .find((key) => key.toLowerCase() === 'proxy-authorization')\n  if (existProxyAuth) {\n    throw new InvalidArgumentError('Proxy-Authorization should be sent in ProxyAgent constructor')\n  }\n}\n\nmodule.exports = ProxyAgent\n", "'use strict'\n\nconst DispatcherBase = require('./dispatcher-base')\nconst { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require('../core/symbols')\nconst ProxyAgent = require('./proxy-agent')\nconst Agent = require('./agent')\n\nconst DEFAULT_PORTS = {\n  'http:': 80,\n  'https:': 443\n}\n\nclass EnvHttpProxyAgent extends DispatcherBase {\n  #noProxyValue = null\n  #noProxyEntries = null\n  #opts = null\n\n  constructor (opts = {}) {\n    super()\n    this.#opts = opts\n\n    const { httpProxy, httpsProxy, noProxy, ...agentOpts } = opts\n\n    this[kNoProxyAgent] = new Agent(agentOpts)\n\n    const HTTP_PROXY = httpProxy ?? process.env.http_proxy ?? process.env.HTTP_PROXY\n    if (HTTP_PROXY) {\n      this[kHttpProxyAgent] = new ProxyAgent({ ...agentOpts, uri: HTTP_PROXY })\n    } else {\n      this[kHttpProxyAgent] = this[kNoProxyAgent]\n    }\n\n    const HTTPS_PROXY = httpsProxy ?? process.env.https_proxy ?? process.env.HTTPS_PROXY\n    if (HTTPS_PROXY) {\n      this[kHttpsProxyAgent] = new ProxyAgent({ ...agentOpts, uri: HTTPS_PROXY })\n    } else {\n      this[kHttpsProxyAgent] = this[kHttpProxyAgent]\n    }\n\n    this.#parseNoProxy()\n  }\n\n  [kDispatch] (opts, handler) {\n    const url = new URL(opts.origin)\n    const agent = this.#getProxyAgentForUrl(url)\n    return agent.dispatch(opts, handler)\n  }\n\n  [kClose] () {\n    return Promise.all([\n      this[kNoProxyAgent].close(),\n      !this[kHttpProxyAgent][kClosed] && this[kHttpProxyAgent].close(),\n      !this[kHttpsProxyAgent][kClosed] && this[kHttpsProxyAgent].close()\n    ])\n  }\n\n  [kDestroy] (err) {\n    return Promise.all([\n      this[kNoProxyAgent].destroy(err),\n      !this[kHttpProxyAgent][kDestroyed] && this[kHttpProxyAgent].destroy(err),\n      !this[kHttpsProxyAgent][kDestroyed] && this[kHttpsProxyAgent].destroy(err)\n    ])\n  }\n\n  #getProxyAgentForUrl (url) {\n    let { protocol, host: hostname, port } = url\n\n    // Stripping ports in this way instead of using parsedUrl.hostname to make\n    // sure that the brackets around IPv6 addresses are kept.\n    hostname = hostname.replace(/:\\d*$/, '').toLowerCase()\n    port = Number.parseInt(port, 10) || DEFAULT_PORTS[protocol] || 0\n    if (!this.#shouldProxy(hostname, port)) {\n      return this[kNoProxyAgent]\n    }\n    if (protocol === 'https:') {\n      return this[kHttpsProxyAgent]\n    }\n    return this[kHttpProxyAgent]\n  }\n\n  #shouldProxy (hostname, port) {\n    if (this.#noProxyChanged) {\n      this.#parseNoProxy()\n    }\n\n    if (this.#noProxyEntries.length === 0) {\n      return true // Always proxy if NO_PROXY is not set or empty.\n    }\n    if (this.#noProxyValue === '*') {\n      return false // Never proxy if wildcard is set.\n    }\n\n    for (let i = 0; i < this.#noProxyEntries.length; i++) {\n      const entry = this.#noProxyEntries[i]\n      if (entry.port && entry.port !== port) {\n        continue // Skip if ports don't match.\n      }\n      // Don't proxy if the hostname is equal with the no_proxy host.\n      if (hostname === entry.hostname) {\n        return false\n      }\n      // Don't proxy if the hostname is the subdomain of the no_proxy host.\n      // Reference - https://github.com/denoland/deno/blob/6fbce91e40cc07fc6da74068e5cc56fdd40f7b4c/ext/fetch/proxy.rs#L485\n      if (hostname.slice(-(entry.hostname.length + 1)) === `.${entry.hostname}`) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  #parseNoProxy () {\n    const noProxyValue = this.#opts.noProxy ?? this.#noProxyEnv\n    const noProxySplit = noProxyValue.split(/[,\\s]/)\n    const noProxyEntries = []\n\n    for (let i = 0; i < noProxySplit.length; i++) {\n      const entry = noProxySplit[i]\n      if (!entry) {\n        continue\n      }\n      const parsed = entry.match(/^(.+):(\\d+)$/)\n      noProxyEntries.push({\n        // strip leading dot or asterisk with dot\n        hostname: (parsed ? parsed[1] : entry).replace(/^\\*?\\./, '').toLowerCase(),\n        port: parsed ? Number.parseInt(parsed[2], 10) : 0\n      })\n    }\n\n    this.#noProxyValue = noProxyValue\n    this.#noProxyEntries = noProxyEntries\n  }\n\n  get #noProxyChanged () {\n    if (this.#opts.noProxy !== undefined) {\n      return false\n    }\n    return this.#noProxyValue !== this.#noProxyEnv\n  }\n\n  get #noProxyEnv () {\n    return process.env.no_proxy ?? process.env.NO_PROXY ?? ''\n  }\n}\n\nmodule.exports = EnvHttpProxyAgent\n", "'use strict'\nconst assert = require('node:assert')\n\nconst { kRetryHandlerDefaultRetry } = require('../core/symbols')\nconst { RequestRetryError } = require('../core/errors')\nconst {\n  isDisturbed,\n  parseRangeHeader,\n  wrapRequestBody\n} = require('../core/util')\n\nfunction calculateRetryAfterHeader (retryAfter) {\n  const retryTime = new Date(retryAfter).getTime()\n  return isNaN(retryTime) ? 0 : retryTime - Date.now()\n}\n\nclass RetryHandler {\n  constructor (opts, { dispatch, handler }) {\n    const { retryOptions, ...dispatchOpts } = opts\n    const {\n      // Retry scoped\n      retry: retryFn,\n      maxRetries,\n      maxTimeout,\n      minTimeout,\n      timeoutFactor,\n      // Response scoped\n      methods,\n      errorCodes,\n      retryAfter,\n      statusCodes,\n      throwOnError\n    } = retryOptions ?? {}\n\n    this.error = null\n    this.dispatch = dispatch\n    this.handler = handler\n    this.opts = { ...dispatchOpts, body: wrapRequestBody(opts.body) }\n    this.retryOpts = {\n      throwOnError: throwOnError ?? true,\n      retry: retryFn ?? RetryHandler[kRetryHandlerDefaultRetry],\n      retryAfter: retryAfter ?? true,\n      maxTimeout: maxTimeout ?? 30 * 1000, // 30s,\n      minTimeout: minTimeout ?? 500, // .5s\n      timeoutFactor: timeoutFactor ?? 2,\n      maxRetries: maxRetries ?? 5,\n      // What errors we should retry\n      methods: methods ?? ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE', 'TRACE'],\n      // Indicates which errors to retry\n      statusCodes: statusCodes ?? [500, 502, 503, 504, 429],\n      // List of errors to retry\n      errorCodes: errorCodes ?? [\n        'ECONNRESET',\n        'ECONNREFUSED',\n        'ENOTFOUND',\n        'ENETDOWN',\n        'ENETUNREACH',\n        'EHOSTDOWN',\n        'EHOSTUNREACH',\n        'EPIPE',\n        'UND_ERR_SOCKET'\n      ]\n    }\n\n    this.retryCount = 0\n    this.retryCountCheckpoint = 0\n    this.headersSent = false\n    this.start = 0\n    this.end = null\n    this.etag = null\n  }\n\n  onResponseStartWithRetry (controller, statusCode, headers, statusMessage, err) {\n    if (this.retryOpts.throwOnError) {\n      // Preserve old behavior for status codes that are not eligible for retry\n      if (this.retryOpts.statusCodes.includes(statusCode) === false) {\n        this.headersSent = true\n        this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n      } else {\n        this.error = err\n      }\n\n      return\n    }\n\n    if (isDisturbed(this.opts.body)) {\n      this.headersSent = true\n      this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n      return\n    }\n\n    function shouldRetry (passedErr) {\n      if (passedErr) {\n        this.headersSent = true\n        this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n        controller.resume()\n        return\n      }\n\n      this.error = err\n      controller.resume()\n    }\n\n    controller.pause()\n    this.retryOpts.retry(\n      err,\n      {\n        state: { counter: this.retryCount },\n        opts: { retryOptions: this.retryOpts, ...this.opts }\n      },\n      shouldRetry.bind(this)\n    )\n  }\n\n  onRequestStart (controller, context) {\n    if (!this.headersSent) {\n      this.handler.onRequestStart?.(controller, context)\n    }\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  static [kRetryHandlerDefaultRetry] (err, { state, opts }, cb) {\n    const { statusCode, code, headers } = err\n    const { method, retryOptions } = opts\n    const {\n      maxRetries,\n      minTimeout,\n      maxTimeout,\n      timeoutFactor,\n      statusCodes,\n      errorCodes,\n      methods\n    } = retryOptions\n    const { counter } = state\n\n    // Any code that is not a Undici's originated and allowed to retry\n    if (code && code !== 'UND_ERR_REQ_RETRY' && !errorCodes.includes(code)) {\n      cb(err)\n      return\n    }\n\n    // If a set of method are provided and the current method is not in the list\n    if (Array.isArray(methods) && !methods.includes(method)) {\n      cb(err)\n      return\n    }\n\n    // If a set of status code are provided and the current status code is not in the list\n    if (\n      statusCode != null &&\n      Array.isArray(statusCodes) &&\n      !statusCodes.includes(statusCode)\n    ) {\n      cb(err)\n      return\n    }\n\n    // If we reached the max number of retries\n    if (counter > maxRetries) {\n      cb(err)\n      return\n    }\n\n    let retryAfterHeader = headers?.['retry-after']\n    if (retryAfterHeader) {\n      retryAfterHeader = Number(retryAfterHeader)\n      retryAfterHeader = Number.isNaN(retryAfterHeader)\n        ? calculateRetryAfterHeader(headers['retry-after'])\n        : retryAfterHeader * 1e3 // Retry-After is in seconds\n    }\n\n    const retryTimeout =\n      retryAfterHeader > 0\n        ? Math.min(retryAfterHeader, maxTimeout)\n        : Math.min(minTimeout * timeoutFactor ** (counter - 1), maxTimeout)\n\n    setTimeout(() => cb(null), retryTimeout)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    this.error = null\n    this.retryCount += 1\n\n    if (statusCode >= 300) {\n      const err = new RequestRetryError('Request failed', statusCode, {\n        headers,\n        data: {\n          count: this.retryCount\n        }\n      })\n\n      this.onResponseStartWithRetry(controller, statusCode, headers, statusMessage, err)\n      return\n    }\n\n    // Checkpoint for resume from where we left it\n    if (this.headersSent) {\n      // Only Partial Content 206 supposed to provide Content-Range,\n      // any other status code that partially consumed the payload\n      // should not be retried because it would result in downstream\n      // wrongly concatenate multiple responses.\n      if (statusCode !== 206 && (this.start > 0 || statusCode !== 200)) {\n        throw new RequestRetryError('server does not support the range header and the payload was partially consumed', statusCode, {\n          headers,\n          data: { count: this.retryCount }\n        })\n      }\n\n      const contentRange = parseRangeHeader(headers['content-range'])\n      // If no content range\n      if (!contentRange) {\n        // We always throw here as we want to indicate that we entred unexpected path\n        throw new RequestRetryError('Content-Range mismatch', statusCode, {\n          headers,\n          data: { count: this.retryCount }\n        })\n      }\n\n      // Let's start with a weak etag check\n      if (this.etag != null && this.etag !== headers.etag) {\n        // We always throw here as we want to indicate that we entred unexpected path\n        throw new RequestRetryError('ETag mismatch', statusCode, {\n          headers,\n          data: { count: this.retryCount }\n        })\n      }\n\n      const { start, size, end = size ? size - 1 : null } = contentRange\n\n      assert(this.start === start, 'content-range mismatch')\n      assert(this.end == null || this.end === end, 'content-range mismatch')\n\n      return\n    }\n\n    if (this.end == null) {\n      if (statusCode === 206) {\n        // First time we receive 206\n        const range = parseRangeHeader(headers['content-range'])\n\n        if (range == null) {\n          this.headersSent = true\n          this.handler.onResponseStart?.(\n            controller,\n            statusCode,\n            headers,\n            statusMessage\n          )\n          return\n        }\n\n        const { start, size, end = size ? size - 1 : null } = range\n        assert(\n          start != null && Number.isFinite(start),\n          'content-range mismatch'\n        )\n        assert(end != null && Number.isFinite(end), 'invalid content-length')\n\n        this.start = start\n        this.end = end\n      }\n\n      // We make our best to checkpoint the body for further range headers\n      if (this.end == null) {\n        const contentLength = headers['content-length']\n        this.end = contentLength != null ? Number(contentLength) - 1 : null\n      }\n\n      assert(Number.isFinite(this.start))\n      assert(\n        this.end == null || Number.isFinite(this.end),\n        'invalid content-length'\n      )\n\n      this.resume = true\n      this.etag = headers.etag != null ? headers.etag : null\n\n      // Weak etags are not useful for comparison nor cache\n      // for instance not safe to assume if the response is byte-per-byte\n      // equal\n      if (\n        this.etag != null &&\n        this.etag[0] === 'W' &&\n        this.etag[1] === '/'\n      ) {\n        this.etag = null\n      }\n\n      this.headersSent = true\n      this.handler.onResponseStart?.(\n        controller,\n        statusCode,\n        headers,\n        statusMessage\n      )\n    } else {\n      throw new RequestRetryError('Request failed', statusCode, {\n        headers,\n        data: { count: this.retryCount }\n      })\n    }\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.error) {\n      return\n    }\n\n    this.start += chunk.length\n\n    this.handler.onResponseData?.(controller, chunk)\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.error && this.retryOpts.throwOnError) {\n      throw this.error\n    }\n\n    if (!this.error) {\n      this.retryCount = 0\n      return this.handler.onResponseEnd?.(controller, trailers)\n    }\n\n    this.retry(controller)\n  }\n\n  retry (controller) {\n    if (this.start !== 0) {\n      const headers = { range: `bytes=${this.start}-${this.end ?? ''}` }\n\n      // Weak etag check - weak etags will make comparison algorithms never match\n      if (this.etag != null) {\n        headers['if-match'] = this.etag\n      }\n\n      this.opts = {\n        ...this.opts,\n        headers: {\n          ...this.opts.headers,\n          ...headers\n        }\n      }\n    }\n\n    try {\n      this.retryCountCheckpoint = this.retryCount\n      this.dispatch(this.opts, this)\n    } catch (err) {\n      this.handler.onResponseError?.(controller, err)\n    }\n  }\n\n  onResponseError (controller, err) {\n    if (controller?.aborted || isDisturbed(this.opts.body)) {\n      this.handler.onResponseError?.(controller, err)\n      return\n    }\n\n    function shouldRetry (returnedErr) {\n      if (!returnedErr) {\n        this.retry(controller)\n        return\n      }\n\n      this.handler?.onResponseError?.(controller, returnedErr)\n    }\n\n    // We reconcile in case of a mix between network errors\n    // and server error response\n    if (this.retryCount - this.retryCountCheckpoint > 0) {\n      // We count the difference between the last checkpoint and the current retry count\n      this.retryCount =\n        this.retryCountCheckpoint +\n        (this.retryCount - this.retryCountCheckpoint)\n    } else {\n      this.retryCount += 1\n    }\n\n    this.retryOpts.retry(\n      err,\n      {\n        state: { counter: this.retryCount },\n        opts: { retryOptions: this.retryOpts, ...this.opts }\n      },\n      shouldRetry.bind(this)\n    )\n  }\n}\n\nmodule.exports = RetryHandler\n", "'use strict'\n\nconst Dispatcher = require('./dispatcher')\nconst RetryHandler = require('../handler/retry-handler')\n\nclass RetryAgent extends Dispatcher {\n  #agent = null\n  #options = null\n  constructor (agent, options = {}) {\n    super(options)\n    this.#agent = agent\n    this.#options = options\n  }\n\n  dispatch (opts, handler) {\n    const retry = new RetryHandler({\n      ...opts,\n      retryOptions: this.#options\n    }, {\n      dispatch: this.#agent.dispatch.bind(this.#agent),\n      handler\n    })\n    return this.#agent.dispatch(opts, retry)\n  }\n\n  close () {\n    return this.#agent.close()\n  }\n\n  destroy () {\n    return this.#agent.destroy()\n  }\n}\n\nmodule.exports = RetryAgent\n", "'use strict'\n\nconst { InvalidArgumentError } = require('../core/errors')\nconst Client = require('./client')\n\nclass H2CClient extends Client {\n  constructor (origin, clientOpts) {\n    if (typeof origin === 'string') {\n      origin = new URL(origin)\n    }\n\n    if (origin.protocol !== 'http:') {\n      throw new InvalidArgumentError(\n        'h2c-client: Only h2c protocol is supported'\n      )\n    }\n\n    const { maxConcurrentStreams, pipelining, ...opts } =\n            clientOpts ?? {}\n    const defaultMaxConcurrentStreams = maxConcurrentStreams ?? 100\n    let defaultPipelining = 100\n\n    if (\n      maxConcurrentStreams != null &&\n            (!Number.isInteger(maxConcurrentStreams) ||\n            maxConcurrentStreams < 1)\n    ) {\n      throw new InvalidArgumentError('maxConcurrentStreams must be a positive integer, greater than 0')\n    }\n\n    if (pipelining != null && Number.isInteger(pipelining) && pipelining > 0) {\n      defaultPipelining = pipelining\n    }\n\n    if (defaultPipelining > defaultMaxConcurrentStreams) {\n      throw new InvalidArgumentError(\n        'h2c-client: pipelining cannot be greater than maxConcurrentStreams'\n      )\n    }\n\n    super(origin, {\n      ...opts,\n      maxConcurrentStreams: defaultMaxConcurrentStreams,\n      pipelining: defaultPipelining,\n      allowH2: true,\n      useH2c: true\n    })\n  }\n}\n\nmodule.exports = H2CClient\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { addAbortListener } = require('node:events')\nconst { Readable } = require('node:stream')\nconst { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require('../core/errors')\nconst util = require('../core/util')\nconst { ReadableStreamFrom } = require('../core/util')\n\nconst kConsume = Symbol('kConsume')\nconst kReading = Symbol('kReading')\nconst kBody = Symbol('kBody')\nconst kAbort = Symbol('kAbort')\nconst kContentType = Symbol('kContentType')\nconst kContentLength = Symbol('kContentLength')\nconst kUsed = Symbol('kUsed')\nconst kBytesRead = Symbol('kBytesRead')\n\nconst noop = () => {}\n\n/**\n * @class\n * @extends {Readable}\n * @see https://fetch.spec.whatwg.org/#body\n */\nclass BodyReadable extends Readable {\n  /**\n   * @param {object} opts\n   * @param {(this: Readable, size: number) => void} opts.resume\n   * @param {() => (void | null)} opts.abort\n   * @param {string} [opts.contentType = '']\n   * @param {number} [opts.contentLength]\n   * @param {number} [opts.highWaterMark = 64 * 1024]\n   */\n  constructor ({\n    resume,\n    abort,\n    contentType = '',\n    contentLength,\n    highWaterMark = 64 * 1024 // Same as nodejs fs streams.\n  }) {\n    super({\n      autoDestroy: true,\n      read: resume,\n      highWaterMark\n    })\n\n    this._readableState.dataEmitted = false\n\n    this[kAbort] = abort\n\n    /** @type {Consume | null} */\n    this[kConsume] = null\n\n    /** @type {number} */\n    this[kBytesRead] = 0\n\n    /** @type {ReadableStream|null} */\n    this[kBody] = null\n\n    /** @type {boolean} */\n    this[kUsed] = false\n\n    /** @type {string} */\n    this[kContentType] = contentType\n\n    /** @type {number|null} */\n    this[kContentLength] = Number.isFinite(contentLength) ? contentLength : null\n\n    /**\n     * Is stream being consumed through Readable API?\n     * This is an optimization so that we avoid checking\n     * for 'data' and 'readable' listeners in the hot path\n     * inside push().\n     *\n     * @type {boolean}\n     */\n    this[kReading] = false\n  }\n\n  /**\n   * @param {Error|null} err\n   * @param {(error:(Error|null)) => void} callback\n   * @returns {void}\n   */\n  _destroy (err, callback) {\n    if (!err && !this._readableState.endEmitted) {\n      err = new RequestAbortedError()\n    }\n\n    if (err) {\n      this[kAbort]()\n    }\n\n    // Workaround for Node \"bug\". If the stream is destroyed in same\n    // tick as it is created, then a user who is waiting for a\n    // promise (i.e micro tick) for installing an 'error' listener will\n    // never get a chance and will always encounter an unhandled exception.\n    if (!this[kUsed]) {\n      setImmediate(callback, err)\n    } else {\n      callback(err)\n    }\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  on (event, listener) {\n    if (event === 'data' || event === 'readable') {\n      this[kReading] = true\n      this[kUsed] = true\n    }\n    return super.on(event, listener)\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  addListener (event, listener) {\n    return this.on(event, listener)\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  off (event, listener) {\n    const ret = super.off(event, listener)\n    if (event === 'data' || event === 'readable') {\n      this[kReading] = (\n        this.listenerCount('data') > 0 ||\n        this.listenerCount('readable') > 0\n      )\n    }\n    return ret\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  removeListener (event, listener) {\n    return this.off(event, listener)\n  }\n\n  /**\n   * @param {Buffer|null} chunk\n   * @returns {boolean}\n   */\n  push (chunk) {\n    if (chunk) {\n      this[kBytesRead] += chunk.length\n      if (this[kConsume]) {\n        consumePush(this[kConsume], chunk)\n        return this[kReading] ? super.push(chunk) : true\n      }\n    }\n\n    return super.push(chunk)\n  }\n\n  /**\n   * Consumes and returns the body as a string.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-text\n   * @returns {Promise<string>}\n   */\n  text () {\n    return consume(this, 'text')\n  }\n\n  /**\n   * Consumes and returns the body as a JavaScript Object.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-json\n   * @returns {Promise<unknown>}\n   */\n  json () {\n    return consume(this, 'json')\n  }\n\n  /**\n   * Consumes and returns the body as a Blob\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-blob\n   * @returns {Promise<Blob>}\n   */\n  blob () {\n    return consume(this, 'blob')\n  }\n\n  /**\n   * Consumes and returns the body as an Uint8Array.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-bytes\n   * @returns {Promise<Uint8Array>}\n   */\n  bytes () {\n    return consume(this, 'bytes')\n  }\n\n  /**\n   * Consumes and returns the body as an ArrayBuffer.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-arraybuffer\n   * @returns {Promise<ArrayBuffer>}\n   */\n  arrayBuffer () {\n    return consume(this, 'arrayBuffer')\n  }\n\n  /**\n   * Not implemented\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-formdata\n   * @throws {NotSupportedError}\n   */\n  async formData () {\n    // TODO: Implement.\n    throw new NotSupportedError()\n  }\n\n  /**\n   * Returns true if the body is not null and the body has been consumed.\n   * Otherwise, returns false.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-bodyused\n   * @readonly\n   * @returns {boolean}\n   */\n  get bodyUsed () {\n    return util.isDisturbed(this)\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#dom-body-body\n   * @readonly\n   * @returns {ReadableStream}\n   */\n  get body () {\n    if (!this[kBody]) {\n      this[kBody] = ReadableStreamFrom(this)\n      if (this[kConsume]) {\n        // TODO: Is this the best way to force a lock?\n        this[kBody].getReader() // Ensure stream is locked.\n        assert(this[kBody].locked)\n      }\n    }\n    return this[kBody]\n  }\n\n  /**\n   * Dumps the response body by reading `limit` number of bytes.\n   * @param {object} opts\n   * @param {number} [opts.limit = 131072] Number of bytes to read.\n   * @param {AbortSignal} [opts.signal] An AbortSignal to cancel the dump.\n   * @returns {Promise<null>}\n   */\n  dump (opts) {\n    const signal = opts?.signal\n\n    if (signal != null && (typeof signal !== 'object' || !('aborted' in signal))) {\n      return Promise.reject(new InvalidArgumentError('signal must be an AbortSignal'))\n    }\n\n    const limit = opts?.limit && Number.isFinite(opts.limit)\n      ? opts.limit\n      : 128 * 1024\n\n    if (signal?.aborted) {\n      return Promise.reject(signal.reason ?? new AbortError())\n    }\n\n    if (this._readableState.closeEmitted) {\n      return Promise.resolve(null)\n    }\n\n    return new Promise((resolve, reject) => {\n      if (\n        (this[kContentLength] && (this[kContentLength] > limit)) ||\n        this[kBytesRead] > limit\n      ) {\n        this.destroy(new AbortError())\n      }\n\n      if (signal) {\n        const onAbort = () => {\n          this.destroy(signal.reason ?? new AbortError())\n        }\n        const abortListener = addAbortListener(signal, onAbort)\n        this\n          .on('close', function () {\n            abortListener[Symbol.dispose]()\n            if (signal.aborted) {\n              reject(signal.reason ?? new AbortError())\n            } else {\n              resolve(null)\n            }\n          })\n      } else {\n        this.on('close', resolve)\n      }\n\n      this\n        .on('error', noop)\n        .on('data', () => {\n          if (this[kBytesRead] > limit) {\n            this.destroy()\n          }\n        })\n        .resume()\n    })\n  }\n\n  /**\n   * @param {BufferEncoding} encoding\n   * @returns {this}\n   */\n  setEncoding (encoding) {\n    if (Buffer.isEncoding(encoding)) {\n      this._readableState.encoding = encoding\n    }\n    return this\n  }\n}\n\n/**\n * @see https://streams.spec.whatwg.org/#readablestream-locked\n * @param {BodyReadable} bodyReadable\n * @returns {boolean}\n */\nfunction isLocked (bodyReadable) {\n  // Consume is an implicit lock.\n  return bodyReadable[kBody]?.locked === true || bodyReadable[kConsume] !== null\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#body-unusable\n * @param {BodyReadable} bodyReadable\n * @returns {boolean}\n */\nfunction isUnusable (bodyReadable) {\n  return util.isDisturbed(bodyReadable) || isLocked(bodyReadable)\n}\n\n/**\n * @typedef {'text' | 'json' | 'blob' | 'bytes' | 'arrayBuffer'} ConsumeType\n */\n\n/**\n * @template {ConsumeType} T\n * @typedef {T extends 'text' ? string :\n *           T extends 'json' ? unknown :\n *           T extends 'blob' ? Blob :\n *           T extends 'arrayBuffer' ? ArrayBuffer :\n *           T extends 'bytes' ? Uint8Array :\n *           never\n * } ConsumeReturnType\n */\n/**\n * @typedef {object} Consume\n * @property {ConsumeType} type\n * @property {BodyReadable} stream\n * @property {((value?: any) => void)} resolve\n * @property {((err: Error) => void)} reject\n * @property {number} length\n * @property {Buffer[]} body\n */\n\n/**\n * @template {ConsumeType} T\n * @param {BodyReadable} stream\n * @param {T} type\n * @returns {Promise<ConsumeReturnType<T>>}\n */\nfunction consume (stream, type) {\n  assert(!stream[kConsume])\n\n  return new Promise((resolve, reject) => {\n    if (isUnusable(stream)) {\n      const rState = stream._readableState\n      if (rState.destroyed && rState.closeEmitted === false) {\n        stream\n          .on('error', reject)\n          .on('close', () => {\n            reject(new TypeError('unusable'))\n          })\n      } else {\n        reject(rState.errored ?? new TypeError('unusable'))\n      }\n    } else {\n      queueMicrotask(() => {\n        stream[kConsume] = {\n          type,\n          stream,\n          resolve,\n          reject,\n          length: 0,\n          body: []\n        }\n\n        stream\n          .on('error', function (err) {\n            consumeFinish(this[kConsume], err)\n          })\n          .on('close', function () {\n            if (this[kConsume].body !== null) {\n              consumeFinish(this[kConsume], new RequestAbortedError())\n            }\n          })\n\n        consumeStart(stream[kConsume])\n      })\n    }\n  })\n}\n\n/**\n * @param {Consume} consume\n * @returns {void}\n */\nfunction consumeStart (consume) {\n  if (consume.body === null) {\n    return\n  }\n\n  const { _readableState: state } = consume.stream\n\n  if (state.bufferIndex) {\n    const start = state.bufferIndex\n    const end = state.buffer.length\n    for (let n = start; n < end; n++) {\n      consumePush(consume, state.buffer[n])\n    }\n  } else {\n    for (const chunk of state.buffer) {\n      consumePush(consume, chunk)\n    }\n  }\n\n  if (state.endEmitted) {\n    consumeEnd(this[kConsume], this._readableState.encoding)\n  } else {\n    consume.stream.on('end', function () {\n      consumeEnd(this[kConsume], this._readableState.encoding)\n    })\n  }\n\n  consume.stream.resume()\n\n  while (consume.stream.read() != null) {\n    // Loop\n  }\n}\n\n/**\n * @param {Buffer[]} chunks\n * @param {number} length\n * @param {BufferEncoding} [encoding='utf8']\n * @returns {string}\n */\nfunction chunksDecode (chunks, length, encoding) {\n  if (chunks.length === 0 || length === 0) {\n    return ''\n  }\n  const buffer = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks, length)\n  const bufferLength = buffer.length\n\n  // Skip BOM.\n  const start =\n    bufferLength > 2 &&\n    buffer[0] === 0xef &&\n    buffer[1] === 0xbb &&\n    buffer[2] === 0xbf\n      ? 3\n      : 0\n  if (!encoding || encoding === 'utf8' || encoding === 'utf-8') {\n    return buffer.utf8Slice(start, bufferLength)\n  } else {\n    return buffer.subarray(start, bufferLength).toString(encoding)\n  }\n}\n\n/**\n * @param {Buffer[]} chunks\n * @param {number} length\n * @returns {Uint8Array}\n */\nfunction chunksConcat (chunks, length) {\n  if (chunks.length === 0 || length === 0) {\n    return new Uint8Array(0)\n  }\n  if (chunks.length === 1) {\n    // fast-path\n    return new Uint8Array(chunks[0])\n  }\n  const buffer = new Uint8Array(Buffer.allocUnsafeSlow(length).buffer)\n\n  let offset = 0\n  for (let i = 0; i < chunks.length; ++i) {\n    const chunk = chunks[i]\n    buffer.set(chunk, offset)\n    offset += chunk.length\n  }\n\n  return buffer\n}\n\n/**\n * @param {Consume} consume\n * @param {BufferEncoding} encoding\n * @returns {void}\n */\nfunction consumeEnd (consume, encoding) {\n  const { type, body, resolve, stream, length } = consume\n\n  try {\n    if (type === 'text') {\n      resolve(chunksDecode(body, length, encoding))\n    } else if (type === 'json') {\n      resolve(JSON.parse(chunksDecode(body, length, encoding)))\n    } else if (type === 'arrayBuffer') {\n      resolve(chunksConcat(body, length).buffer)\n    } else if (type === 'blob') {\n      resolve(new Blob(body, { type: stream[kContentType] }))\n    } else if (type === 'bytes') {\n      resolve(chunksConcat(body, length))\n    }\n\n    consumeFinish(consume)\n  } catch (err) {\n    stream.destroy(err)\n  }\n}\n\n/**\n * @param {Consume} consume\n * @param {Buffer} chunk\n * @returns {void}\n */\nfunction consumePush (consume, chunk) {\n  consume.length += chunk.length\n  consume.body.push(chunk)\n}\n\n/**\n * @param {Consume} consume\n * @param {Error} [err]\n * @returns {void}\n */\nfunction consumeFinish (consume, err) {\n  if (consume.body === null) {\n    return\n  }\n\n  if (err) {\n    consume.reject(err)\n  } else {\n    consume.resolve()\n  }\n\n  // Reset the consume object to allow for garbage collection.\n  consume.type = null\n  consume.stream = null\n  consume.resolve = null\n  consume.reject = null\n  consume.length = 0\n  consume.body = null\n}\n\nmodule.exports = {\n  Readable: BodyReadable,\n  chunksDecode\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { AsyncResource } = require('node:async_hooks')\nconst { Readable } = require('./readable')\nconst { InvalidArgumentError, RequestAbortedError } = require('../core/errors')\nconst util = require('../core/util')\n\nfunction noop () {}\n\nclass RequestHandler extends AsyncResource {\n  constructor (opts, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    const { signal, method, opaque, body, onInfo, responseHeaders, highWaterMark } = opts\n\n    try {\n      if (typeof callback !== 'function') {\n        throw new InvalidArgumentError('invalid callback')\n      }\n\n      if (highWaterMark != null && (!Number.isFinite(highWaterMark) || highWaterMark < 0)) {\n        throw new InvalidArgumentError('invalid highWaterMark')\n      }\n\n      if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n        throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n      }\n\n      if (method === 'CONNECT') {\n        throw new InvalidArgumentError('invalid method')\n      }\n\n      if (onInfo && typeof onInfo !== 'function') {\n        throw new InvalidArgumentError('invalid onInfo callback')\n      }\n\n      super('UNDICI_REQUEST')\n    } catch (err) {\n      if (util.isStream(body)) {\n        util.destroy(body.on('error', noop), err)\n      }\n      throw err\n    }\n\n    this.method = method\n    this.responseHeaders = responseHeaders || null\n    this.opaque = opaque || null\n    this.callback = callback\n    this.res = null\n    this.abort = null\n    this.body = body\n    this.trailers = {}\n    this.context = null\n    this.controller = null\n    this.onInfo = onInfo || null\n    this.highWaterMark = highWaterMark\n    this.reason = null\n    this.removeAbortListener = null\n\n    if (signal?.aborted) {\n      this.reason = signal.reason ?? new RequestAbortedError()\n    } else if (signal) {\n      this.removeAbortListener = util.addAbortListener(signal, () => {\n        this.reason = signal.reason ?? new RequestAbortedError()\n        if (this.res) {\n          util.destroy(this.res.on('error', noop), this.reason)\n        } else if (this.abort) {\n          this.abort(this.reason)\n        }\n      })\n    }\n  }\n\n  onRequestStart (controller, context) {\n    if (this.reason) {\n      controller.abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.controller = controller\n    this.abort = (reason) => controller.abort(reason)\n    this.context = context\n  }\n\n  onResponseStart (controller, statusCode, headers, statusText) {\n    const { callback, opaque, context, responseHeaders, highWaterMark } = this\n\n    const rawHeaders = controller?.rawHeaders\n    const responseHeaderData = responseHeaders === 'raw'\n      ? util.parseRawHeaders(rawHeaders)\n      : headers\n\n    if (statusCode < 200) {\n      if (this.onInfo) {\n        this.onInfo({ statusCode, headers: responseHeaderData })\n      }\n      return\n    }\n\n    const parsedHeaders = headers\n    const contentType = parsedHeaders?.['content-type']\n    const contentLength = parsedHeaders?.['content-length']\n    const res = new Readable({\n      resume: () => controller.resume(),\n      abort: (reason) => controller.abort(reason),\n      contentType,\n      contentLength: this.method !== 'HEAD' && contentLength\n        ? Number(contentLength)\n        : null,\n      highWaterMark\n    })\n\n    if (this.removeAbortListener) {\n      res.on('close', this.removeAbortListener)\n      this.removeAbortListener = null\n    }\n\n    this.callback = null\n    this.res = res\n    if (callback !== null) {\n      try {\n        this.runInAsyncScope(callback, null, null, {\n          statusCode,\n          statusText,\n          headers: responseHeaderData,\n          trailers: this.trailers,\n          opaque,\n          body: res,\n          context\n        })\n      } catch (err) {\n        // If the callback throws synchronously, we need to handle it\n        // Remove reference to res to allow res being garbage collected\n        this.res = null\n\n        // Destroy the response stream\n        util.destroy(res.on('error', noop), err)\n\n        // Use queueMicrotask to re-throw the error so it reaches uncaughtException\n        queueMicrotask(() => {\n          throw err\n        })\n      }\n    }\n  }\n\n  onResponseData (controller, chunk) {\n    if (!this.res) {\n      return\n    }\n\n    if (this.res.push(chunk) === false) {\n      controller.pause()\n    }\n  }\n\n  onResponseEnd (_controller, trailers) {\n    if (trailers && typeof trailers === 'object') {\n      for (const key of Object.keys(trailers)) {\n        if (key === '__proto__') {\n          Object.defineProperty(this.trailers, key, {\n            value: trailers[key],\n            enumerable: true,\n            configurable: true,\n            writable: true\n          })\n        } else {\n          this.trailers[key] = trailers[key]\n        }\n      }\n    }\n    this.res?.push(null)\n  }\n\n  onResponseError (_controller, err) {\n    const { res, callback, body, opaque } = this\n\n    if (callback) {\n      // TODO: Does this need queueMicrotask?\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n\n    if (res) {\n      this.res = null\n      // Ensure all queued handlers are invoked before destroying res.\n      queueMicrotask(() => {\n        util.destroy(res.on('error', noop), err)\n      })\n    }\n\n    if (body) {\n      this.body = null\n\n      if (util.isStream(body)) {\n        body.on('error', noop)\n        util.destroy(body, err)\n      }\n    }\n\n    if (this.removeAbortListener) {\n      this.removeAbortListener()\n      this.removeAbortListener = null\n    }\n  }\n}\n\nfunction request (opts, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      request.call(this, opts, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const handler = new RequestHandler(opts, callback)\n\n    this.dispatch(opts, handler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = request\nmodule.exports.RequestHandler = RequestHandler\n", "'use strict'\n\nconst { addAbortListener } = require('../core/util')\nconst { RequestAbortedError } = require('../core/errors')\n\nconst kListener = Symbol('kListener')\nconst kSignal = Symbol('kSignal')\n\nfunction abort (self) {\n  if (self.abort) {\n    self.abort(self[kSignal]?.reason)\n  } else {\n    self.reason = self[kSignal]?.reason ?? new RequestAbortedError()\n  }\n  removeSignal(self)\n}\n\nfunction addSignal (self, signal) {\n  self.reason = null\n\n  self[kSignal] = null\n  self[kListener] = null\n\n  if (!signal) {\n    return\n  }\n\n  if (signal.aborted) {\n    abort(self)\n    return\n  }\n\n  self[kSignal] = signal\n  self[kListener] = () => {\n    abort(self)\n  }\n\n  addAbortListener(self[kSignal], self[kListener])\n}\n\nfunction removeSignal (self) {\n  if (!self[kSignal]) {\n    return\n  }\n\n  if ('removeEventListener' in self[kSignal]) {\n    self[kSignal].removeEventListener('abort', self[kListener])\n  } else {\n    self[kSignal].removeListener('abort', self[kListener])\n  }\n\n  self[kSignal] = null\n  self[kListener] = null\n}\n\nmodule.exports = {\n  addSignal,\n  removeSignal\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { finished } = require('node:stream')\nconst { AsyncResource } = require('node:async_hooks')\nconst { InvalidArgumentError, InvalidReturnValueError } = require('../core/errors')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nfunction noop () {}\n\nclass StreamHandler extends AsyncResource {\n  constructor (opts, factory, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    const { signal, method, opaque, body, onInfo, responseHeaders } = opts\n\n    try {\n      if (typeof callback !== 'function') {\n        throw new InvalidArgumentError('invalid callback')\n      }\n\n      if (typeof factory !== 'function') {\n        throw new InvalidArgumentError('invalid factory')\n      }\n\n      if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n        throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n      }\n\n      if (method === 'CONNECT') {\n        throw new InvalidArgumentError('invalid method')\n      }\n\n      if (onInfo && typeof onInfo !== 'function') {\n        throw new InvalidArgumentError('invalid onInfo callback')\n      }\n\n      super('UNDICI_STREAM')\n    } catch (err) {\n      if (util.isStream(body)) {\n        util.destroy(body.on('error', noop), err)\n      }\n      throw err\n    }\n\n    this.responseHeaders = responseHeaders || null\n    this.opaque = opaque || null\n    this.factory = factory\n    this.callback = callback\n    this.res = null\n    this.abort = null\n    this.context = null\n    this.controller = null\n    this.trailers = null\n    this.body = body\n    this.onInfo = onInfo || null\n\n    if (util.isStream(body)) {\n      body.on('error', (err) => {\n        this.onResponseError(this.controller, err)\n      })\n    }\n\n    addSignal(this, signal)\n  }\n\n  onRequestStart (controller, context) {\n    if (this.reason) {\n      controller.abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.controller = controller\n    this.abort = (reason) => controller.abort(reason)\n    this.context = context\n  }\n\n  onResponseStart (controller, statusCode, headers, _statusMessage) {\n    const { factory, opaque, context, responseHeaders } = this\n\n    const rawHeaders = controller?.rawHeaders\n    const responseHeaderData = responseHeaders === 'raw'\n      ? util.parseRawHeaders(rawHeaders)\n      : headers\n\n    if (statusCode < 200) {\n      if (this.onInfo) {\n        this.onInfo({ statusCode, headers: responseHeaderData })\n      }\n      return\n    }\n\n    this.factory = null\n\n    if (factory === null) {\n      return\n    }\n\n    const res = this.runInAsyncScope(factory, null, {\n      statusCode,\n      headers: responseHeaderData,\n      opaque,\n      context\n    })\n\n    if (\n      !res ||\n      typeof res.write !== 'function' ||\n      typeof res.end !== 'function' ||\n      typeof res.on !== 'function'\n    ) {\n      throw new InvalidReturnValueError('expected Writable')\n    }\n\n    // TODO: Avoid finished. It registers an unnecessary amount of listeners.\n    finished(res, { readable: false }, (err) => {\n      const { callback, res, opaque, trailers, abort } = this\n\n      this.res = null\n      if (err || !res?.readable) {\n        util.destroy(res, err)\n      }\n\n      this.callback = null\n      this.runInAsyncScope(callback, null, err || null, { opaque, trailers })\n\n      if (err) {\n        abort()\n      }\n    })\n\n    res.on('drain', () => controller.resume())\n\n    this.res = res\n\n    const needDrain = res.writableNeedDrain !== undefined\n      ? res.writableNeedDrain\n      : res._writableState?.needDrain\n\n    if (needDrain === true) {\n      controller.pause()\n    }\n  }\n\n  onResponseData (controller, chunk) {\n    const { res } = this\n\n    if (!res) {\n      return\n    }\n\n    if (res.write(chunk) === false) {\n      controller.pause()\n    }\n  }\n\n  onResponseEnd (_controller, trailers) {\n    const { res } = this\n\n    removeSignal(this)\n\n    if (!res) {\n      return\n    }\n\n    if (trailers && typeof trailers === 'object') {\n      this.trailers = trailers\n    }\n\n    res.end()\n  }\n\n  onResponseError (_controller, err) {\n    const { res, callback, opaque, body } = this\n\n    removeSignal(this)\n\n    this.factory = null\n\n    if (res) {\n      this.res = null\n      util.destroy(res, err)\n    } else if (callback) {\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n\n    if (body) {\n      this.body = null\n      util.destroy(body, err)\n    }\n  }\n}\n\nfunction stream (opts, factory, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      stream.call(this, opts, factory, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const handler = new StreamHandler(opts, factory, callback)\n\n    this.dispatch(opts, handler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = stream\n", "'use strict'\n\nconst {\n  Readable,\n  Duplex,\n  PassThrough\n} = require('node:stream')\nconst assert = require('node:assert')\nconst { AsyncResource } = require('node:async_hooks')\nconst {\n  InvalidArgumentError,\n  InvalidReturnValueError,\n  RequestAbortedError\n} = require('../core/errors')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nfunction noop () {}\n\nconst kResume = Symbol('resume')\n\nclass PipelineRequest extends Readable {\n  constructor () {\n    super({ autoDestroy: true })\n\n    this[kResume] = null\n  }\n\n  _read () {\n    const { [kResume]: resume } = this\n\n    if (resume) {\n      this[kResume] = null\n      resume()\n    }\n  }\n\n  _destroy (err, callback) {\n    this._read()\n\n    callback(err)\n  }\n}\n\nclass PipelineResponse extends Readable {\n  constructor (resume) {\n    super({ autoDestroy: true })\n    this[kResume] = resume\n  }\n\n  _read () {\n    this[kResume]()\n  }\n\n  _destroy (err, callback) {\n    if (!err && !this._readableState.endEmitted) {\n      err = new RequestAbortedError()\n    }\n\n    callback(err)\n  }\n}\n\nclass PipelineHandler extends AsyncResource {\n  constructor (opts, handler) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (typeof handler !== 'function') {\n      throw new InvalidArgumentError('invalid handler')\n    }\n\n    const { signal, method, opaque, onInfo, responseHeaders } = opts\n\n    if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n      throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n    }\n\n    if (method === 'CONNECT') {\n      throw new InvalidArgumentError('invalid method')\n    }\n\n    if (onInfo && typeof onInfo !== 'function') {\n      throw new InvalidArgumentError('invalid onInfo callback')\n    }\n\n    super('UNDICI_PIPELINE')\n\n    this.opaque = opaque || null\n    this.responseHeaders = responseHeaders || null\n    this.handler = handler\n    this.abort = null\n    this.context = null\n    this.onInfo = onInfo || null\n\n    this.req = new PipelineRequest().on('error', noop)\n\n    this.ret = new Duplex({\n      readableObjectMode: opts.objectMode,\n      autoDestroy: true,\n      read: () => {\n        const { body } = this\n\n        if (body?.resume) {\n          body.resume()\n        }\n      },\n      write: (chunk, encoding, callback) => {\n        const { req } = this\n\n        if (req.push(chunk, encoding) || req._readableState.destroyed) {\n          callback()\n        } else {\n          req[kResume] = callback\n        }\n      },\n      destroy: (err, callback) => {\n        const { body, req, res, ret, abort } = this\n\n        if (!err && !ret._readableState.endEmitted) {\n          err = new RequestAbortedError()\n        }\n\n        if (abort && err) {\n          abort()\n        }\n\n        util.destroy(body, err)\n        util.destroy(req, err)\n        util.destroy(res, err)\n\n        removeSignal(this)\n\n        callback(err)\n      }\n    }).on('prefinish', () => {\n      const { req } = this\n\n      // Node < 15 does not call _final in same tick.\n      req.push(null)\n    })\n\n    this.res = null\n\n    addSignal(this, signal)\n  }\n\n  onRequestStart (controller, context) {\n    const { res } = this\n\n    if (this.reason) {\n      controller.abort(this.reason)\n      return\n    }\n\n    assert(!res, 'pipeline cannot be retried')\n\n    this.abort = (reason) => controller.abort(reason)\n    this.context = context\n  }\n\n  onResponseStart (controller, statusCode, headers, _statusMessage) {\n    const { opaque, handler, context } = this\n\n    if (statusCode < 200) {\n      if (this.onInfo) {\n        const rawHeaders = controller?.rawHeaders\n        const responseHeaders = this.responseHeaders === 'raw'\n          ? util.parseRawHeaders(rawHeaders)\n          : headers\n        this.onInfo({ statusCode, headers: responseHeaders })\n      }\n      return\n    }\n\n    this.res = new PipelineResponse(() => controller.resume())\n\n    let body\n    try {\n      this.handler = null\n      const rawHeaders = controller?.rawHeaders\n      const responseHeaders = this.responseHeaders === 'raw'\n        ? util.parseRawHeaders(rawHeaders)\n        : headers\n      body = this.runInAsyncScope(handler, null, {\n        statusCode,\n        headers: responseHeaders,\n        opaque,\n        body: this.res,\n        context\n      })\n    } catch (err) {\n      this.res.on('error', noop)\n      throw err\n    }\n\n    if (!body || typeof body.on !== 'function') {\n      throw new InvalidReturnValueError('expected Readable')\n    }\n\n    body\n      .on('data', (chunk) => {\n        const { ret, body } = this\n\n        if (!ret.push(chunk) && body.pause) {\n          body.pause()\n        }\n      })\n      .on('error', (err) => {\n        const { ret } = this\n\n        util.destroy(ret, err)\n      })\n      .on('end', () => {\n        const { ret } = this\n\n        ret.push(null)\n      })\n      .on('close', () => {\n        const { ret } = this\n\n        if (!ret._readableState.ended) {\n          util.destroy(ret, new RequestAbortedError())\n        }\n      })\n\n    this.body = body\n  }\n\n  onResponseData (controller, chunk) {\n    const { res } = this\n\n    if (res.push(chunk) === false) {\n      controller.pause()\n    }\n  }\n\n  onResponseEnd (_controller, _trailers) {\n    const { res } = this\n    res.push(null)\n  }\n\n  onResponseError (_controller, err) {\n    const { ret } = this\n    this.handler = null\n    util.destroy(ret, err)\n  }\n}\n\nfunction pipeline (opts, handler) {\n  try {\n    const pipelineHandler = new PipelineHandler(opts, handler)\n    this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler)\n    return pipelineHandler.ret\n  } catch (err) {\n    return new PassThrough().destroy(err)\n  }\n}\n\nmodule.exports = pipeline\n", "'use strict'\n\nconst { InvalidArgumentError, SocketError } = require('../core/errors')\nconst { AsyncResource } = require('node:async_hooks')\nconst assert = require('node:assert')\nconst util = require('../core/util')\nconst { kHTTP2Stream } = require('../core/symbols')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nclass UpgradeHandler extends AsyncResource {\n  constructor (opts, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    const { signal, opaque, responseHeaders } = opts\n\n    if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n      throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n    }\n\n    super('UNDICI_UPGRADE')\n\n    this.responseHeaders = responseHeaders || null\n    this.opaque = opaque || null\n    this.callback = callback\n    this.abort = null\n    this.context = null\n\n    addSignal(this, signal)\n  }\n\n  onRequestStart (controller, context) {\n    if (this.reason) {\n      controller.abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.abort = (reason) => controller.abort(reason)\n    this.context = context\n  }\n\n  onResponseStart () {\n    throw new SocketError('bad upgrade', null)\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    const expectedStatusCode = socket[kHTTP2Stream] === true ? 200 : 101\n\n    if (statusCode !== expectedStatusCode) {\n      const socketInfo = socket[kHTTP2Stream] === true ? null : util.getSocketInfo(socket)\n      controller.abort(new SocketError('bad upgrade', socketInfo))\n      return\n    }\n\n    const { callback, opaque, context } = this\n\n    removeSignal(this)\n\n    this.callback = null\n\n    const rawHeaders = controller?.rawHeaders\n    const responseHeaders = this.responseHeaders === 'raw'\n      ? util.parseRawHeaders(rawHeaders)\n      : headers\n\n    this.runInAsyncScope(callback, null, null, {\n      headers: responseHeaders,\n      socket,\n      opaque,\n      context\n    })\n  }\n\n  onResponseError (_controller, err) {\n    const { callback, opaque } = this\n\n    removeSignal(this)\n\n    if (callback) {\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n  }\n}\n\nfunction upgrade (opts, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      upgrade.call(this, opts, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const upgradeHandler = new UpgradeHandler(opts, callback)\n    const upgradeOpts = {\n      ...opts,\n      method: opts.method || 'GET',\n      upgrade: opts.protocol || 'Websocket'\n    }\n    this.dispatch(upgradeOpts, upgradeHandler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = upgrade\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { AsyncResource } = require('node:async_hooks')\nconst { InvalidArgumentError, SocketError } = require('../core/errors')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nclass ConnectHandler extends AsyncResource {\n  constructor (opts, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    const { signal, opaque, responseHeaders } = opts\n\n    if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n      throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n    }\n\n    super('UNDICI_CONNECT')\n\n    this.opaque = opaque || null\n    this.responseHeaders = responseHeaders || null\n    this.callback = callback\n    this.abort = null\n\n    addSignal(this, signal)\n  }\n\n  onRequestStart (controller, context) {\n    if (this.reason) {\n      controller.abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.abort = (reason) => controller.abort(reason)\n    this.context = context\n  }\n\n  onResponseStart () {\n    throw new SocketError('bad connect', null)\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    const { callback, opaque, context } = this\n\n    removeSignal(this)\n\n    this.callback = null\n\n    let responseHeaders = headers\n    const rawHeaders = controller?.rawHeaders\n    // Indicates is an HTTP2Session\n    if (responseHeaders != null) {\n      responseHeaders = this.responseHeaders === 'raw'\n        ? util.parseRawHeaders(rawHeaders)\n        : headers\n    }\n\n    this.runInAsyncScope(callback, null, null, {\n      statusCode,\n      headers: responseHeaders,\n      socket,\n      opaque,\n      context\n    })\n  }\n\n  onResponseError (_controller, err) {\n    const { callback, opaque } = this\n\n    removeSignal(this)\n\n    if (callback) {\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n  }\n}\n\nfunction connect (opts, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      connect.call(this, opts, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const connectHandler = new ConnectHandler(opts, callback)\n    const connectOptions = { ...opts, method: 'CONNECT' }\n    this.dispatch(connectOptions, connectHandler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = connect\n", "'use strict'\n\nmodule.exports.request = require('./api-request')\nmodule.exports.stream = require('./api-stream')\nmodule.exports.pipeline = require('./api-pipeline')\nmodule.exports.upgrade = require('./api-upgrade')\nmodule.exports.connect = require('./api-connect')\n", "'use strict'\n\nconst { UndiciError } = require('../core/errors')\n\nconst kMockNotMatchedError = Symbol.for('undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED')\n\n/**\n * The request does not match any registered mock dispatches.\n */\nclass MockNotMatchedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MockNotMatchedError'\n    this.message = message || 'The request does not match any registered mock dispatches'\n    this.code = 'UND_MOCK_ERR_MOCK_NOT_MATCHED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kMockNotMatchedError] === true\n  }\n\n  get [kMockNotMatchedError] () {\n    return true\n  }\n}\n\nmodule.exports = {\n  MockNotMatchedError\n}\n", "'use strict'\n\nmodule.exports = {\n  kAgent: Symbol('agent'),\n  kOptions: Symbol('options'),\n  kFactory: Symbol('factory'),\n  kDispatches: Symbol('dispatches'),\n  kDispatchKey: Symbol('dispatch key'),\n  kDefaultHeaders: Symbol('default headers'),\n  kDefaultTrailers: Symbol('default trailers'),\n  kContentLength: Symbol('content length'),\n  kMockAgent: Symbol('mock agent'),\n  kMockAgentSet: Symbol('mock agent set'),\n  kMockAgentGet: Symbol('mock agent get'),\n  kMockDispatch: Symbol('mock dispatch'),\n  kClose: Symbol('close'),\n  kOriginalClose: Symbol('original agent close'),\n  kOriginalDispatch: Symbol('original dispatch'),\n  kOrigin: Symbol('origin'),\n  kIsMockActive: Symbol('is mock active'),\n  kNetConnect: Symbol('net connect'),\n  kGetNetConnect: Symbol('get net connect'),\n  kConnected: Symbol('connected'),\n  kIgnoreTrailingSlash: Symbol('ignore trailing slash'),\n  kMockAgentMockCallHistoryInstance: Symbol('mock agent mock call history name'),\n  kMockAgentRegisterCallHistory: Symbol('mock agent register mock call history'),\n  kMockAgentAddCallHistoryLog: Symbol('mock agent add call history log'),\n  kMockAgentIsCallHistoryEnabled: Symbol('mock agent is call history enabled'),\n  kMockAgentAcceptsNonStandardSearchParameters: Symbol('mock agent accepts non standard search parameters'),\n  kMockCallHistoryAddLog: Symbol('mock call history add log'),\n  kTotalDispatchCount: Symbol('total dispatch count')\n}\n", "'use strict'\n\nconst { MockNotMatchedError } = require('./mock-errors')\nconst {\n  kDispatches,\n  kMockAgent,\n  kOriginalDispatch,\n  kOrigin,\n  kGetNetConnect,\n  kTotalDispatchCount\n} = require('./mock-symbols')\nconst { serializePathWithQuery, parseHeaders } = require('../core/util')\nconst { STATUS_CODES } = require('node:http')\nconst {\n  types: {\n    isPromise\n  }\n} = require('node:util')\nconst { InvalidArgumentError } = require('../core/errors')\n\nfunction matchValue (match, value) {\n  if (typeof match === 'string') {\n    return match === value\n  }\n  if (match instanceof RegExp) {\n    return match.test(value)\n  }\n  if (typeof match === 'function') {\n    return match(value) === true\n  }\n  return false\n}\n\nfunction lowerCaseEntries (headers) {\n  return Object.fromEntries(\n    Object.entries(headers).map(([headerName, headerValue]) => {\n      return [headerName.toLocaleLowerCase(), headerValue]\n    })\n  )\n}\n\n/**\n * @param {import('../../index').Headers|string[]|Record<string, string>} headers\n * @param {string} key\n */\nfunction getHeaderByName (headers, key) {\n  if (Array.isArray(headers)) {\n    for (let i = 0; i < headers.length; i += 2) {\n      if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) {\n        return headers[i + 1]\n      }\n    }\n\n    return undefined\n  } else if (typeof headers.get === 'function') {\n    return headers.get(key)\n  } else {\n    return lowerCaseEntries(headers)[key.toLocaleLowerCase()]\n  }\n}\n\n/** @param {string[]} headers */\nfunction buildHeadersFromArray (headers) { // fetch HeadersList\n  const clone = headers.slice()\n  const entries = []\n  for (let index = 0; index < clone.length; index += 2) {\n    entries.push([clone[index], clone[index + 1]])\n  }\n  return Object.fromEntries(entries)\n}\n\nfunction matchHeaders (mockDispatch, headers) {\n  if (typeof mockDispatch.headers === 'function') {\n    if (Array.isArray(headers)) { // fetch HeadersList\n      headers = buildHeadersFromArray(headers)\n    }\n    return mockDispatch.headers(headers ? lowerCaseEntries(headers) : {})\n  }\n  if (typeof mockDispatch.headers === 'undefined') {\n    return true\n  }\n  if (typeof headers !== 'object' || typeof mockDispatch.headers !== 'object') {\n    return false\n  }\n\n  for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch.headers)) {\n    const headerValue = getHeaderByName(headers, matchHeaderName)\n\n    if (!matchValue(matchHeaderValue, headerValue)) {\n      return false\n    }\n  }\n  return true\n}\n\nfunction normalizeSearchParams (query) {\n  if (typeof query !== 'string') {\n    return query\n  }\n\n  const originalQp = new URLSearchParams(query)\n  const normalizedQp = new URLSearchParams()\n\n  for (let [key, value] of originalQp.entries()) {\n    key = key.replace('[]', '')\n\n    const valueRepresentsString = /^(['\"]).*\\1$/.test(value)\n    if (valueRepresentsString) {\n      normalizedQp.append(key, value)\n      continue\n    }\n\n    if (value.includes(',')) {\n      const values = value.split(',')\n      for (const v of values) {\n        normalizedQp.append(key, v)\n      }\n      continue\n    }\n\n    normalizedQp.append(key, value)\n  }\n\n  return normalizedQp\n}\n\nfunction safeUrl (path) {\n  if (typeof path !== 'string') {\n    return path\n  }\n  const pathSegments = path.split('?', 3)\n  if (pathSegments.length !== 2) {\n    return path\n  }\n\n  const qp = new URLSearchParams(pathSegments.pop())\n  qp.sort()\n  return [...pathSegments, qp.toString()].join('?')\n}\n\nfunction matchKey (mockDispatch, { path, method, body, headers }) {\n  const pathMatch = matchValue(mockDispatch.path, path)\n  const methodMatch = matchValue(mockDispatch.method, method)\n  const bodyMatch = typeof mockDispatch.body !== 'undefined' ? matchValue(mockDispatch.body, body) : true\n  const headersMatch = matchHeaders(mockDispatch, headers)\n  return pathMatch && methodMatch && bodyMatch && headersMatch\n}\n\nfunction getResponseData (data) {\n  if (Buffer.isBuffer(data)) {\n    return data\n  } else if (data instanceof Uint8Array) {\n    return data\n  } else if (data instanceof ArrayBuffer) {\n    return data\n  } else if (typeof data === 'object') {\n    return JSON.stringify(data)\n  } else if (data) {\n    return data.toString()\n  } else {\n    return ''\n  }\n}\n\nfunction getMockDispatch (mockDispatches, key) {\n  const basePath = key.query ? serializePathWithQuery(key.path, key.query) : key.path\n  const resolvedPath = typeof basePath === 'string' ? safeUrl(basePath) : basePath\n\n  const resolvedPathWithoutTrailingSlash = removeTrailingSlash(resolvedPath)\n\n  // Match path\n  let matchedMockDispatches = mockDispatches\n    .filter(({ consumed }) => !consumed)\n    .filter(({ path, ignoreTrailingSlash }) => {\n      return ignoreTrailingSlash\n        ? matchValue(removeTrailingSlash(safeUrl(path)), resolvedPathWithoutTrailingSlash)\n        : matchValue(safeUrl(path), resolvedPath)\n    })\n  if (matchedMockDispatches.length === 0) {\n    throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`)\n  }\n\n  // Match method\n  matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method))\n  if (matchedMockDispatches.length === 0) {\n    throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}' on path '${resolvedPath}'`)\n  }\n\n  // Match body\n  matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== 'undefined' ? matchValue(body, key.body) : true)\n  if (matchedMockDispatches.length === 0) {\n    throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}' on path '${resolvedPath}'`)\n  }\n\n  // Match headers\n  matchedMockDispatches = matchedMockDispatches.filter((mockDispatch) => matchHeaders(mockDispatch, key.headers))\n  if (matchedMockDispatches.length === 0) {\n    const headers = typeof key.headers === 'object' ? JSON.stringify(key.headers) : key.headers\n    throw new MockNotMatchedError(`Mock dispatch not matched for headers '${headers}' on path '${resolvedPath}'`)\n  }\n\n  return matchedMockDispatches[0]\n}\n\nfunction addMockDispatch (mockDispatches, key, data, opts) {\n  const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false, ...opts }\n  const replyData = typeof data === 'function' ? { callback: data } : { ...data }\n  const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } }\n  mockDispatches.push(newMockDispatch)\n  // Track total number of intercepts ever registered for better error messages\n  mockDispatches[kTotalDispatchCount] = (mockDispatches[kTotalDispatchCount] || 0) + 1\n  return newMockDispatch\n}\n\nfunction deleteMockDispatch (mockDispatches, key) {\n  const index = mockDispatches.findIndex(dispatch => {\n    if (!dispatch.consumed) {\n      return false\n    }\n    return matchKey(dispatch, key)\n  })\n  if (index !== -1) {\n    mockDispatches.splice(index, 1)\n  }\n}\n\n/**\n * @param {string} path Path to remove trailing slash from\n */\nfunction removeTrailingSlash (path) {\n  while (path.endsWith('/')) {\n    path = path.slice(0, -1)\n  }\n\n  if (path.length === 0) {\n    path = '/'\n  }\n\n  return path\n}\n\nfunction buildKey (opts) {\n  const { path, method, body, headers, query } = opts\n\n  return {\n    path,\n    method,\n    body,\n    headers,\n    query\n  }\n}\n\nfunction generateKeyValues (data) {\n  const keys = Object.keys(data)\n  const result = []\n  for (let i = 0; i < keys.length; ++i) {\n    const key = keys[i]\n    const value = data[key]\n    const name = Buffer.from(`${key}`)\n    if (Array.isArray(value)) {\n      for (let j = 0; j < value.length; ++j) {\n        result.push(name, Buffer.from(`${value[j]}`))\n      }\n    } else {\n      result.push(name, Buffer.from(`${value}`))\n    }\n  }\n  return result\n}\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status\n * @param {number} statusCode\n */\nfunction getStatusText (statusCode) {\n  return STATUS_CODES[statusCode] || 'unknown'\n}\n\nasync function getResponse (body) {\n  const buffers = []\n  for await (const data of body) {\n    buffers.push(data)\n  }\n  return Buffer.concat(buffers).toString('utf8')\n}\n\n/**\n * Mock dispatch function used to simulate undici dispatches\n */\nfunction mockDispatch (opts, handler) {\n  // Get mock dispatch from built key\n  const key = buildKey(opts)\n  const mockDispatch = getMockDispatch(this[kDispatches], key)\n\n  mockDispatch.timesInvoked++\n\n  // Here's where we resolve a callback if a callback is present for the dispatch data.\n  if (mockDispatch.data.callback) {\n    mockDispatch.data = { ...mockDispatch.data, ...mockDispatch.data.callback(opts) }\n  }\n\n  // Parse mockDispatch data\n  const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch\n  const { timesInvoked, times } = mockDispatch\n\n  // If it's used up and not persistent, mark as consumed\n  mockDispatch.consumed = !persist && timesInvoked >= times\n  mockDispatch.pending = timesInvoked < times\n\n  // If specified, trigger dispatch error\n  if (error !== null) {\n    deleteMockDispatch(this[kDispatches], key)\n    handler.onResponseError(null, error)\n    return true\n  }\n\n  // Track whether the request has been aborted\n  let aborted = false\n  let timer = null\n\n  // Create the controller early so abort can use it\n  const controller = {\n    paused: false,\n    rawHeaders: null,\n    rawTrailers: null,\n    pause () {\n      this.paused = true\n    },\n    resume () {\n      this.paused = false\n    },\n    abort: (reason) => {\n      if (aborted) {\n        return\n      }\n      aborted = true\n\n      // Clear the pending delayed response if any\n      if (timer !== null) {\n        clearTimeout(timer)\n        timer = null\n      }\n\n      handler.onResponseError?.(controller, reason)\n    }\n  }\n\n  // Call onRequestStart to allow the handler to receive the controller\n  handler.onRequestStart?.(controller, null)\n\n  // Handle the request with a delay if necessary\n  if (typeof delay === 'number' && delay > 0) {\n    timer = setTimeout(() => {\n      timer = null\n      handleReply(this[kDispatches])\n    }, delay)\n  } else {\n    handleReply(this[kDispatches])\n  }\n\n  function handleReply (mockDispatches, _data = data) {\n    // Don't send response if the request was aborted\n    if (aborted) {\n      return\n    }\n\n    // fetch's HeadersList is a 1D string array\n    const optsHeaders = Array.isArray(opts.headers)\n      ? buildHeadersFromArray(opts.headers)\n      : opts.headers\n    const body = typeof _data === 'function'\n      ? _data({ ...opts, headers: optsHeaders })\n      : _data\n\n    // util.types.isPromise is likely needed for jest.\n    if (isPromise(body)) {\n      // If handleReply is asynchronous, throwing an error\n      // in the callback will reject the promise, rather than\n      // synchronously throw the error, which breaks some tests.\n      // Rather, we wait for the callback to resolve if it is a\n      // promise, and then re-run handleReply with the new body.\n      return body.then((newData) => handleReply(mockDispatches, newData))\n    }\n\n    // Check again if aborted after async body resolution\n    if (aborted) {\n      return\n    }\n\n    const responseData = getResponseData(body)\n    const responseHeaders = generateKeyValues(headers)\n    const responseTrailers = generateKeyValues(trailers)\n\n    // Update the controller with response data\n    controller.rawHeaders = responseHeaders\n    controller.rawTrailers = responseTrailers\n\n    handler.onResponseStart?.(controller, statusCode, parseHeaders(responseHeaders), getStatusText(statusCode))\n    handler.onResponseData?.(controller, Buffer.from(responseData))\n    handler.onResponseEnd?.(controller, parseHeaders(responseTrailers))\n    deleteMockDispatch(mockDispatches, key)\n  }\n\n  return true\n}\n\nfunction buildMockDispatch () {\n  const agent = this[kMockAgent]\n  const origin = this[kOrigin]\n  const originalDispatch = this[kOriginalDispatch]\n\n  return function dispatch (opts, handler) {\n    if (agent.isMockActive) {\n      try {\n        mockDispatch.call(this, opts, handler)\n      } catch (error) {\n        if (error.code === 'UND_MOCK_ERR_MOCK_NOT_MATCHED') {\n          const netConnect = agent[kGetNetConnect]()\n          const totalInterceptsCount = this[kDispatches][kTotalDispatchCount] || this[kDispatches].length\n          const pendingInterceptsCount = this[kDispatches].filter(({ consumed }) => !consumed).length\n          const interceptsMessage = `, ${pendingInterceptsCount} interceptor(s) remaining out of ${totalInterceptsCount} defined`\n          if (netConnect === false) {\n            throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)${interceptsMessage}`)\n          }\n          if (checkNetConnect(netConnect, origin)) {\n            originalDispatch.call(this, opts, handler)\n          } else {\n            throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)${interceptsMessage}`)\n          }\n        } else {\n          throw error\n        }\n      }\n    } else {\n      originalDispatch.call(this, opts, handler)\n    }\n  }\n}\n\nfunction checkNetConnect (netConnect, origin) {\n  const url = new URL(origin)\n  if (netConnect === true) {\n    return true\n  } else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url.host))) {\n    return true\n  }\n  return false\n}\n\nfunction normalizeOrigin (origin) {\n  if (typeof origin !== 'string' && !(origin instanceof URL)) {\n    return origin\n  }\n\n  if (origin instanceof URL) {\n    return origin.origin\n  }\n\n  return origin.toLowerCase()\n}\n\nfunction buildAndValidateMockOptions (opts) {\n  const { agent, ...mockOptions } = opts\n\n  if ('enableCallHistory' in mockOptions && typeof mockOptions.enableCallHistory !== 'boolean') {\n    throw new InvalidArgumentError('options.enableCallHistory must to be a boolean')\n  }\n\n  if ('acceptNonStandardSearchParameters' in mockOptions && typeof mockOptions.acceptNonStandardSearchParameters !== 'boolean') {\n    throw new InvalidArgumentError('options.acceptNonStandardSearchParameters must to be a boolean')\n  }\n\n  if ('ignoreTrailingSlash' in mockOptions && typeof mockOptions.ignoreTrailingSlash !== 'boolean') {\n    throw new InvalidArgumentError('options.ignoreTrailingSlash must to be a boolean')\n  }\n\n  return mockOptions\n}\n\nmodule.exports = {\n  getResponseData,\n  getMockDispatch,\n  addMockDispatch,\n  deleteMockDispatch,\n  buildKey,\n  generateKeyValues,\n  matchValue,\n  getResponse,\n  getStatusText,\n  mockDispatch,\n  buildMockDispatch,\n  checkNetConnect,\n  buildAndValidateMockOptions,\n  getHeaderByName,\n  buildHeadersFromArray,\n  normalizeSearchParams,\n  normalizeOrigin\n}\n", "'use strict'\n\nconst { getResponseData, buildKey, addMockDispatch } = require('./mock-utils')\nconst {\n  kDispatches,\n  kDispatchKey,\n  kDefaultHeaders,\n  kDefaultTrailers,\n  kContentLength,\n  kMockDispatch,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst { InvalidArgumentError } = require('../core/errors')\nconst { serializePathWithQuery } = require('../core/util')\n\n/**\n * Defines the scope API for an interceptor reply\n */\nclass MockScope {\n  constructor (mockDispatch) {\n    this[kMockDispatch] = mockDispatch\n  }\n\n  /**\n   * Delay a reply by a set amount in ms.\n   */\n  delay (waitInMs) {\n    if (typeof waitInMs !== 'number' || !Number.isInteger(waitInMs) || waitInMs <= 0) {\n      throw new InvalidArgumentError('waitInMs must be a valid integer > 0')\n    }\n\n    this[kMockDispatch].delay = waitInMs\n    return this\n  }\n\n  /**\n   * For a defined reply, never mark as consumed.\n   */\n  persist () {\n    this[kMockDispatch].persist = true\n    return this\n  }\n\n  /**\n   * Allow one to define a reply for a set amount of matching requests.\n   */\n  times (repeatTimes) {\n    if (typeof repeatTimes !== 'number' || !Number.isInteger(repeatTimes) || repeatTimes <= 0) {\n      throw new InvalidArgumentError('repeatTimes must be a valid integer > 0')\n    }\n\n    this[kMockDispatch].times = repeatTimes\n    return this\n  }\n}\n\n/**\n * Defines an interceptor for a Mock\n */\nclass MockInterceptor {\n  constructor (opts, mockDispatches) {\n    if (typeof opts !== 'object') {\n      throw new InvalidArgumentError('opts must be an object')\n    }\n    if (typeof opts.path === 'undefined') {\n      throw new InvalidArgumentError('opts.path must be defined')\n    }\n    if (typeof opts.method === 'undefined') {\n      opts.method = 'GET'\n    }\n    // See https://github.com/nodejs/undici/issues/1245\n    // As per RFC 3986, clients are not supposed to send URI\n    // fragments to servers when they retrieve a document,\n    if (typeof opts.path === 'string') {\n      if (opts.query) {\n        opts.path = serializePathWithQuery(opts.path, opts.query)\n      } else {\n        // Matches https://github.com/nodejs/undici/blob/main/lib/web/fetch/index.js#L1811\n        const parsedURL = new URL(opts.path, 'data://')\n        opts.path = parsedURL.pathname + parsedURL.search\n      }\n    }\n    if (typeof opts.method === 'string') {\n      opts.method = opts.method.toUpperCase()\n    }\n\n    this[kDispatchKey] = buildKey(opts)\n    this[kDispatches] = mockDispatches\n    this[kIgnoreTrailingSlash] = opts.ignoreTrailingSlash ?? false\n    this[kDefaultHeaders] = {}\n    this[kDefaultTrailers] = {}\n    this[kContentLength] = false\n  }\n\n  createMockScopeDispatchData ({ statusCode, data, responseOptions }) {\n    const responseData = getResponseData(data)\n    const contentLength = this[kContentLength] ? { 'content-length': responseData.length } : {}\n    const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers }\n    const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers }\n\n    return { statusCode, data, headers, trailers }\n  }\n\n  validateReplyParameters (replyParameters) {\n    if (typeof replyParameters.statusCode === 'undefined') {\n      throw new InvalidArgumentError('statusCode must be defined')\n    }\n    if (typeof replyParameters.responseOptions !== 'object' || replyParameters.responseOptions === null) {\n      throw new InvalidArgumentError('responseOptions must be an object')\n    }\n  }\n\n  /**\n   * Mock an undici request with a defined reply.\n   */\n  reply (replyOptionsCallbackOrStatusCode) {\n    // Values of reply aren't available right now as they\n    // can only be available when the reply callback is invoked.\n    if (typeof replyOptionsCallbackOrStatusCode === 'function') {\n      // We'll first wrap the provided callback in another function,\n      // this function will properly resolve the data from the callback\n      // when invoked.\n      const wrappedDefaultsCallback = (opts) => {\n        // Our reply options callback contains the parameter for statusCode, data and options.\n        const resolvedData = replyOptionsCallbackOrStatusCode(opts)\n\n        // Check if it is in the right format\n        if (typeof resolvedData !== 'object' || resolvedData === null) {\n          throw new InvalidArgumentError('reply options callback must return an object')\n        }\n\n        const replyParameters = { data: '', responseOptions: {}, ...resolvedData }\n        this.validateReplyParameters(replyParameters)\n        // Since the values can be obtained immediately we return them\n        // from this higher order function that will be resolved later.\n        return {\n          ...this.createMockScopeDispatchData(replyParameters)\n        }\n      }\n\n      // Add usual dispatch data, but this time set the data parameter to function that will eventually provide data.\n      const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })\n      return new MockScope(newMockDispatch)\n    }\n\n    // We can have either one or three parameters, if we get here,\n    // we should have 1-3 parameters. So we spread the arguments of\n    // this function to obtain the parameters, since replyData will always\n    // just be the statusCode.\n    const replyParameters = {\n      statusCode: replyOptionsCallbackOrStatusCode,\n      data: arguments[1] === undefined ? '' : arguments[1],\n      responseOptions: arguments[2] === undefined ? {} : arguments[2]\n    }\n    this.validateReplyParameters(replyParameters)\n\n    // Send in-already provided data like usual\n    const dispatchData = this.createMockScopeDispatchData(replyParameters)\n    const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })\n    return new MockScope(newMockDispatch)\n  }\n\n  /**\n   * Mock an undici request with a defined error.\n   */\n  replyWithError (error) {\n    if (typeof error === 'undefined') {\n      throw new InvalidArgumentError('error must be defined')\n    }\n\n    const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error }, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })\n    return new MockScope(newMockDispatch)\n  }\n\n  /**\n   * Set default reply headers on the interceptor for subsequent replies\n   */\n  defaultReplyHeaders (headers) {\n    if (typeof headers === 'undefined') {\n      throw new InvalidArgumentError('headers must be defined')\n    }\n\n    this[kDefaultHeaders] = headers\n    return this\n  }\n\n  /**\n   * Set default reply trailers on the interceptor for subsequent replies\n   */\n  defaultReplyTrailers (trailers) {\n    if (typeof trailers === 'undefined') {\n      throw new InvalidArgumentError('trailers must be defined')\n    }\n\n    this[kDefaultTrailers] = trailers\n    return this\n  }\n\n  /**\n   * Set reply content length header for replies on the interceptor\n   */\n  replyContentLength () {\n    this[kContentLength] = true\n    return this\n  }\n}\n\nmodule.exports.MockInterceptor = MockInterceptor\nmodule.exports.MockScope = MockScope\n", "'use strict'\n\nconst { promisify } = require('node:util')\nconst Client = require('../dispatcher/client')\nconst { buildMockDispatch } = require('./mock-utils')\nconst {\n  kDispatches,\n  kMockAgent,\n  kClose,\n  kOriginalClose,\n  kOrigin,\n  kOriginalDispatch,\n  kConnected,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst { MockInterceptor } = require('./mock-interceptor')\nconst Symbols = require('../core/symbols')\nconst { InvalidArgumentError } = require('../core/errors')\n\n/**\n * MockClient provides an API that extends the Client to influence the mockDispatches.\n */\nclass MockClient extends Client {\n  constructor (origin, opts) {\n    if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') {\n      throw new InvalidArgumentError('Argument opts.agent must implement Agent')\n    }\n\n    super(origin, opts)\n\n    this[kMockAgent] = opts.agent\n    this[kOrigin] = origin\n    this[kIgnoreTrailingSlash] = opts.ignoreTrailingSlash ?? false\n    this[kDispatches] = []\n    this[kConnected] = 1\n    this[kOriginalDispatch] = this.dispatch\n    this[kOriginalClose] = this.close.bind(this)\n\n    this.dispatch = buildMockDispatch.call(this)\n    this.close = this[kClose]\n  }\n\n  get [Symbols.kConnected] () {\n    return this[kConnected]\n  }\n\n  /**\n   * Sets up the base interceptor for mocking replies from undici.\n   */\n  intercept (opts) {\n    return new MockInterceptor(\n      opts && { ignoreTrailingSlash: this[kIgnoreTrailingSlash], ...opts },\n      this[kDispatches]\n    )\n  }\n\n  cleanMocks () {\n    this[kDispatches] = []\n  }\n\n  async [kClose] () {\n    await promisify(this[kOriginalClose])()\n    this[kConnected] = 0\n    this[kMockAgent][Symbols.kClients].delete(this[kOrigin])\n  }\n}\n\nmodule.exports = MockClient\n", "'use strict'\n\nconst { kMockCallHistoryAddLog } = require('./mock-symbols')\nconst { InvalidArgumentError } = require('../core/errors')\n\nfunction handleFilterCallsWithOptions (criteria, options, handler, store, allLogs) {\n  switch (options.operator) {\n    case 'OR':\n      store.push(...handler(criteria, allLogs))\n\n      return store\n    case 'AND':\n      return handler(criteria, store)\n    default:\n      // guard -- should never happens because buildAndValidateFilterCallsOptions is called before\n      throw new InvalidArgumentError('options.operator must to be a case insensitive string equal to \\'OR\\' or \\'AND\\'')\n  }\n}\n\nfunction buildAndValidateFilterCallsOptions (options = {}) {\n  const finalOptions = {}\n\n  if ('operator' in options) {\n    if (typeof options.operator !== 'string' || (options.operator.toUpperCase() !== 'OR' && options.operator.toUpperCase() !== 'AND')) {\n      throw new InvalidArgumentError('options.operator must to be a case insensitive string equal to \\'OR\\' or \\'AND\\'')\n    }\n\n    return {\n      ...finalOptions,\n      operator: options.operator.toUpperCase()\n    }\n  }\n\n  return finalOptions\n}\n\nfunction makeFilterCalls (parameterName) {\n  return (parameterValue, logs) => {\n    if (typeof parameterValue === 'string' || parameterValue == null) {\n      return logs.filter((log) => {\n        return log[parameterName] === parameterValue\n      })\n    }\n    if (parameterValue instanceof RegExp) {\n      return logs.filter((log) => {\n        return parameterValue.test(log[parameterName])\n      })\n    }\n\n    throw new InvalidArgumentError(`${parameterName} parameter should be one of string, regexp, undefined or null`)\n  }\n}\nfunction computeUrlWithMaybeSearchParameters (requestInit) {\n  // path can contains query url parameters\n  // or query can contains query url parameters\n  try {\n    const url = new URL(requestInit.path, requestInit.origin)\n\n    // requestInit.path contains query url parameters\n    // requestInit.query is then undefined\n    if (url.search.length !== 0) {\n      return url\n    }\n\n    // requestInit.query can be populated here\n    url.search = new URLSearchParams(requestInit.query).toString()\n\n    return url\n  } catch (error) {\n    throw new InvalidArgumentError('An error occurred when computing MockCallHistoryLog.url', { cause: error })\n  }\n}\n\nclass MockCallHistoryLog {\n  constructor (requestInit = {}) {\n    this.body = requestInit.body\n    this.headers = requestInit.headers\n    this.method = requestInit.method\n\n    const url = computeUrlWithMaybeSearchParameters(requestInit)\n\n    this.fullUrl = url.toString()\n    this.origin = url.origin\n    this.path = url.pathname\n    this.searchParams = Object.fromEntries(url.searchParams)\n    this.protocol = url.protocol\n    this.host = url.host\n    this.port = url.port\n    this.hash = url.hash\n  }\n\n  toMap () {\n    return new Map([\n      ['protocol', this.protocol],\n      ['host', this.host],\n      ['port', this.port],\n      ['origin', this.origin],\n      ['path', this.path],\n      ['hash', this.hash],\n      ['searchParams', this.searchParams],\n      ['fullUrl', this.fullUrl],\n      ['method', this.method],\n      ['body', this.body],\n      ['headers', this.headers]]\n    )\n  }\n\n  toString () {\n    const options = { betweenKeyValueSeparator: '->', betweenPairSeparator: '|' }\n    let result = ''\n\n    this.toMap().forEach((value, key) => {\n      if (typeof value === 'string' || value === undefined || value === null) {\n        result = `${result}${key}${options.betweenKeyValueSeparator}${value}${options.betweenPairSeparator}`\n      }\n      if ((typeof value === 'object' && value !== null) || Array.isArray(value)) {\n        result = `${result}${key}${options.betweenKeyValueSeparator}${JSON.stringify(value)}${options.betweenPairSeparator}`\n      }\n      // maybe miss something for non Record / Array headers and searchParams here\n    })\n\n    // delete last betweenPairSeparator\n    return result.slice(0, -1)\n  }\n}\n\nclass MockCallHistory {\n  logs = []\n\n  calls () {\n    return this.logs\n  }\n\n  firstCall () {\n    return this.logs.at(0)\n  }\n\n  lastCall () {\n    return this.logs.at(-1)\n  }\n\n  nthCall (number) {\n    if (typeof number !== 'number') {\n      throw new InvalidArgumentError('nthCall must be called with a number')\n    }\n    if (!Number.isInteger(number)) {\n      throw new InvalidArgumentError('nthCall must be called with an integer')\n    }\n    if (Math.sign(number) !== 1) {\n      throw new InvalidArgumentError('nthCall must be called with a positive value. use firstCall or lastCall instead')\n    }\n\n    // non zero based index. this is more human readable\n    return this.logs.at(number - 1)\n  }\n\n  filterCalls (criteria, options) {\n    // perf\n    if (this.logs.length === 0) {\n      return this.logs\n    }\n    if (typeof criteria === 'function') {\n      return this.logs.filter(criteria)\n    }\n    if (criteria instanceof RegExp) {\n      return this.logs.filter((log) => {\n        return criteria.test(log.toString())\n      })\n    }\n    if (typeof criteria === 'object' && criteria !== null) {\n      // no criteria - returning all logs\n      if (Object.keys(criteria).length === 0) {\n        return this.logs\n      }\n\n      const finalOptions = { operator: 'OR', ...buildAndValidateFilterCallsOptions(options) }\n\n      let maybeDuplicatedLogsFiltered = finalOptions.operator === 'AND' ? this.logs : []\n      if ('protocol' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.protocol, finalOptions, this.filterCallsByProtocol, maybeDuplicatedLogsFiltered, this.logs)\n      }\n      if ('host' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.host, finalOptions, this.filterCallsByHost, maybeDuplicatedLogsFiltered, this.logs)\n      }\n      if ('port' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.port, finalOptions, this.filterCallsByPort, maybeDuplicatedLogsFiltered, this.logs)\n      }\n      if ('origin' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.origin, finalOptions, this.filterCallsByOrigin, maybeDuplicatedLogsFiltered, this.logs)\n      }\n      if ('path' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.path, finalOptions, this.filterCallsByPath, maybeDuplicatedLogsFiltered, this.logs)\n      }\n      if ('hash' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.hash, finalOptions, this.filterCallsByHash, maybeDuplicatedLogsFiltered, this.logs)\n      }\n      if ('fullUrl' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.fullUrl, finalOptions, this.filterCallsByFullUrl, maybeDuplicatedLogsFiltered, this.logs)\n      }\n      if ('method' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.method, finalOptions, this.filterCallsByMethod, maybeDuplicatedLogsFiltered, this.logs)\n      }\n\n      const uniqLogsFiltered = [...new Set(maybeDuplicatedLogsFiltered)]\n\n      return uniqLogsFiltered\n    }\n\n    throw new InvalidArgumentError('criteria parameter should be one of function, regexp, or object')\n  }\n\n  filterCallsByProtocol = makeFilterCalls.call(this, 'protocol')\n\n  filterCallsByHost = makeFilterCalls.call(this, 'host')\n\n  filterCallsByPort = makeFilterCalls.call(this, 'port')\n\n  filterCallsByOrigin = makeFilterCalls.call(this, 'origin')\n\n  filterCallsByPath = makeFilterCalls.call(this, 'path')\n\n  filterCallsByHash = makeFilterCalls.call(this, 'hash')\n\n  filterCallsByFullUrl = makeFilterCalls.call(this, 'fullUrl')\n\n  filterCallsByMethod = makeFilterCalls.call(this, 'method')\n\n  clear () {\n    this.logs = []\n  }\n\n  [kMockCallHistoryAddLog] (requestInit) {\n    const log = new MockCallHistoryLog(requestInit)\n\n    this.logs.push(log)\n\n    return log\n  }\n\n  * [Symbol.iterator] () {\n    for (const log of this.calls()) {\n      yield log\n    }\n  }\n}\n\nmodule.exports.MockCallHistory = MockCallHistory\nmodule.exports.MockCallHistoryLog = MockCallHistoryLog\n", "'use strict'\n\nconst { promisify } = require('node:util')\nconst Pool = require('../dispatcher/pool')\nconst { buildMockDispatch } = require('./mock-utils')\nconst {\n  kDispatches,\n  kMockAgent,\n  kClose,\n  kOriginalClose,\n  kOrigin,\n  kOriginalDispatch,\n  kConnected,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst { MockInterceptor } = require('./mock-interceptor')\nconst Symbols = require('../core/symbols')\nconst { InvalidArgumentError } = require('../core/errors')\n\n/**\n * MockPool provides an API that extends the Pool to influence the mockDispatches.\n */\nclass MockPool extends Pool {\n  constructor (origin, opts) {\n    if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') {\n      throw new InvalidArgumentError('Argument opts.agent must implement Agent')\n    }\n\n    super(origin, opts)\n\n    this[kMockAgent] = opts.agent\n    this[kOrigin] = origin\n    this[kIgnoreTrailingSlash] = opts.ignoreTrailingSlash ?? false\n    this[kDispatches] = []\n    this[kConnected] = 1\n    this[kOriginalDispatch] = this.dispatch\n    this[kOriginalClose] = this.close.bind(this)\n\n    this.dispatch = buildMockDispatch.call(this)\n    this.close = this[kClose]\n  }\n\n  get [Symbols.kConnected] () {\n    return this[kConnected]\n  }\n\n  /**\n   * Sets up the base interceptor for mocking replies from undici.\n   */\n  intercept (opts) {\n    return new MockInterceptor(\n      opts && { ignoreTrailingSlash: this[kIgnoreTrailingSlash], ...opts },\n      this[kDispatches]\n    )\n  }\n\n  cleanMocks () {\n    this[kDispatches] = []\n  }\n\n  async [kClose] () {\n    await promisify(this[kOriginalClose])()\n    this[kConnected] = 0\n    this[kMockAgent][Symbols.kClients].delete(this[kOrigin])\n  }\n}\n\nmodule.exports = MockPool\n", "'use strict'\n\nconst { Transform } = require('node:stream')\nconst { Console } = require('node:console')\n\nconst PERSISTENT = process.versions.icu ? '\u2705' : 'Y '\nconst NOT_PERSISTENT = process.versions.icu ? '\u274C' : 'N '\n\n/**\n * Gets the output of `console.table(\u2026)` as a string.\n */\nmodule.exports = class PendingInterceptorsFormatter {\n  constructor ({ disableColors } = {}) {\n    this.transform = new Transform({\n      transform (chunk, _enc, cb) {\n        cb(null, chunk)\n      }\n    })\n\n    this.logger = new Console({\n      stdout: this.transform,\n      inspectOptions: {\n        colors: !disableColors && !process.env.CI\n      }\n    })\n  }\n\n  format (pendingInterceptors) {\n    const withPrettyHeaders = pendingInterceptors.map(\n      ({ method, path, data: { statusCode }, persist, times, timesInvoked, origin }) => ({\n        Method: method,\n        Origin: origin,\n        Path: path,\n        'Status code': statusCode,\n        Persistent: persist ? PERSISTENT : NOT_PERSISTENT,\n        Invocations: timesInvoked,\n        Remaining: persist ? Infinity : times - timesInvoked\n      }))\n\n    this.logger.table(withPrettyHeaders)\n    return this.transform.read().toString()\n  }\n}\n", "'use strict'\n\nconst { kClients } = require('../core/symbols')\nconst Agent = require('../dispatcher/agent')\nconst {\n  kAgent,\n  kMockAgentSet,\n  kMockAgentGet,\n  kDispatches,\n  kIsMockActive,\n  kNetConnect,\n  kGetNetConnect,\n  kOptions,\n  kFactory,\n  kMockAgentRegisterCallHistory,\n  kMockAgentIsCallHistoryEnabled,\n  kMockAgentAddCallHistoryLog,\n  kMockAgentMockCallHistoryInstance,\n  kMockAgentAcceptsNonStandardSearchParameters,\n  kMockCallHistoryAddLog,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst MockClient = require('./mock-client')\nconst MockPool = require('./mock-pool')\nconst { matchValue, normalizeSearchParams, buildAndValidateMockOptions, normalizeOrigin } = require('./mock-utils')\nconst { InvalidArgumentError, UndiciError } = require('../core/errors')\nconst Dispatcher = require('../dispatcher/dispatcher')\nconst PendingInterceptorsFormatter = require('./pending-interceptors-formatter')\nconst { MockCallHistory } = require('./mock-call-history')\n\nclass MockAgent extends Dispatcher {\n  constructor (opts = {}) {\n    super(opts)\n\n    const mockOptions = buildAndValidateMockOptions(opts)\n\n    this[kNetConnect] = true\n    this[kIsMockActive] = true\n    this[kMockAgentIsCallHistoryEnabled] = mockOptions.enableCallHistory ?? false\n    this[kMockAgentAcceptsNonStandardSearchParameters] = mockOptions.acceptNonStandardSearchParameters ?? false\n    this[kIgnoreTrailingSlash] = mockOptions.ignoreTrailingSlash ?? false\n\n    // Instantiate Agent and encapsulate\n    if (opts?.agent && typeof opts.agent.dispatch !== 'function') {\n      throw new InvalidArgumentError('Argument opts.agent must implement Agent')\n    }\n    const agent = opts?.agent ? opts.agent : new Agent(opts)\n    this[kAgent] = agent\n\n    this[kClients] = agent[kClients]\n    this[kOptions] = mockOptions\n\n    if (this[kMockAgentIsCallHistoryEnabled]) {\n      this[kMockAgentRegisterCallHistory]()\n    }\n  }\n\n  get (origin) {\n    // Normalize origin to handle URL objects and case-insensitive hostnames\n    const normalizedOrigin = normalizeOrigin(origin)\n    const originKey = this[kIgnoreTrailingSlash] ? normalizedOrigin.replace(/\\/$/, '') : normalizedOrigin\n\n    let dispatcher = this[kMockAgentGet](originKey)\n\n    if (!dispatcher) {\n      dispatcher = this[kFactory](originKey)\n      this[kMockAgentSet](originKey, dispatcher)\n    }\n    return dispatcher\n  }\n\n  dispatch (opts, handler) {\n    opts.origin = normalizeOrigin(opts.origin)\n\n    // Call MockAgent.get to perform additional setup before dispatching as normal\n    this.get(opts.origin)\n\n    this[kMockAgentAddCallHistoryLog](opts)\n\n    const acceptNonStandardSearchParameters = this[kMockAgentAcceptsNonStandardSearchParameters]\n\n    const dispatchOpts = { ...opts }\n\n    if (acceptNonStandardSearchParameters && dispatchOpts.path) {\n      const [path, searchParams] = dispatchOpts.path.split('?')\n      const normalizedSearchParams = normalizeSearchParams(searchParams, acceptNonStandardSearchParameters)\n      dispatchOpts.path = `${path}?${normalizedSearchParams}`\n    }\n\n    return this[kAgent].dispatch(dispatchOpts, handler)\n  }\n\n  async close () {\n    this.clearCallHistory()\n    await this[kAgent].close()\n    this[kClients].clear()\n  }\n\n  deactivate () {\n    this[kIsMockActive] = false\n  }\n\n  activate () {\n    this[kIsMockActive] = true\n  }\n\n  enableNetConnect (matcher) {\n    if (typeof matcher === 'string' || typeof matcher === 'function' || matcher instanceof RegExp) {\n      if (Array.isArray(this[kNetConnect])) {\n        this[kNetConnect].push(matcher)\n      } else {\n        this[kNetConnect] = [matcher]\n      }\n    } else if (typeof matcher === 'undefined') {\n      this[kNetConnect] = true\n    } else {\n      throw new InvalidArgumentError('Unsupported matcher. Must be one of String|Function|RegExp.')\n    }\n  }\n\n  disableNetConnect () {\n    this[kNetConnect] = false\n  }\n\n  enableCallHistory () {\n    this[kMockAgentIsCallHistoryEnabled] = true\n\n    return this\n  }\n\n  disableCallHistory () {\n    this[kMockAgentIsCallHistoryEnabled] = false\n\n    return this\n  }\n\n  getCallHistory () {\n    return this[kMockAgentMockCallHistoryInstance]\n  }\n\n  clearCallHistory () {\n    if (this[kMockAgentMockCallHistoryInstance] !== undefined) {\n      this[kMockAgentMockCallHistoryInstance].clear()\n    }\n  }\n\n  // This is required to bypass issues caused by using global symbols - see:\n  // https://github.com/nodejs/undici/issues/1447\n  get isMockActive () {\n    return this[kIsMockActive]\n  }\n\n  [kMockAgentRegisterCallHistory] () {\n    if (this[kMockAgentMockCallHistoryInstance] === undefined) {\n      this[kMockAgentMockCallHistoryInstance] = new MockCallHistory()\n    }\n  }\n\n  [kMockAgentAddCallHistoryLog] (opts) {\n    if (this[kMockAgentIsCallHistoryEnabled]) {\n      // additional setup when enableCallHistory class method is used after mockAgent instantiation\n      this[kMockAgentRegisterCallHistory]()\n\n      // add call history log on every call (intercepted or not)\n      this[kMockAgentMockCallHistoryInstance][kMockCallHistoryAddLog](opts)\n    }\n  }\n\n  [kMockAgentSet] (origin, dispatcher) {\n    this[kClients].set(origin, dispatcher)\n  }\n\n  [kFactory] (origin) {\n    const mockOptions = Object.assign({ agent: this }, this[kOptions])\n    return this[kOptions] && this[kOptions].connections === 1\n      ? new MockClient(origin, mockOptions)\n      : new MockPool(origin, mockOptions)\n  }\n\n  [kMockAgentGet] (origin) {\n    // First check if we can immediately find it\n    const dispatcher = this[kClients].get(origin)\n    if (dispatcher) {\n      return dispatcher\n    }\n\n    // If the origin is not a string create a dummy parent pool and return to user\n    if (typeof origin !== 'string') {\n      const dispatcher = this[kFactory]('http://localhost:9999')\n      this[kMockAgentSet](origin, dispatcher)\n      return dispatcher\n    }\n\n    // If we match, create a pool and assign the same dispatches\n    for (const [keyMatcher, nonExplicitDispatcher] of Array.from(this[kClients])) {\n      if (nonExplicitDispatcher && typeof keyMatcher !== 'string' && matchValue(keyMatcher, origin)) {\n        const dispatcher = this[kFactory](origin)\n        this[kMockAgentSet](origin, dispatcher)\n        dispatcher[kDispatches] = nonExplicitDispatcher[kDispatches]\n        return dispatcher\n      }\n    }\n  }\n\n  [kGetNetConnect] () {\n    return this[kNetConnect]\n  }\n\n  pendingInterceptors () {\n    const mockAgentClients = this[kClients]\n\n    return Array.from(mockAgentClients.entries())\n      .flatMap(([origin, dispatcher]) => dispatcher[kDispatches].map(dispatch => ({ ...dispatch, origin })))\n      .filter(({ pending }) => pending)\n  }\n\n  assertNoPendingInterceptors ({ pendingInterceptorsFormatter = new PendingInterceptorsFormatter() } = {}) {\n    const pending = this.pendingInterceptors()\n\n    if (pending.length === 0) {\n      return\n    }\n\n    throw new UndiciError(\n      pending.length === 1\n        ? `1 interceptor is pending:\\n\\n${pendingInterceptorsFormatter.format(pending)}`.trim()\n        : `${pending.length} interceptors are pending:\\n\\n${pendingInterceptorsFormatter.format(pending)}`.trim()\n    )\n  }\n}\n\nmodule.exports = MockAgent\n", "'use strict'\n\nconst { InvalidArgumentError } = require('../core/errors')\nconst { runtimeFeatures } = require('../util/runtime-features.js')\n\n/**\n * @typedef {Object} HeaderFilters\n * @property {Set<string>} ignore - Set of headers to ignore for matching\n * @property {Set<string>} exclude - Set of headers to exclude from matching\n * @property {Set<string>} match - Set of headers to match (empty means match\n */\n\n/**\n * Creates cached header sets for performance\n *\n * @param {import('./snapshot-recorder').SnapshotRecorderMatchOptions} matchOptions - Matching options for headers\n * @returns {HeaderFilters} - Cached sets for ignore, exclude, and match headers\n */\nfunction createHeaderFilters (matchOptions = {}) {\n  const { ignoreHeaders = [], excludeHeaders = [], matchHeaders = [], caseSensitive = false } = matchOptions\n\n  return {\n    ignore: new Set(ignoreHeaders.map(header => caseSensitive ? header : header.toLowerCase())),\n    exclude: new Set(excludeHeaders.map(header => caseSensitive ? header : header.toLowerCase())),\n    match: new Set(matchHeaders.map(header => caseSensitive ? header : header.toLowerCase()))\n  }\n}\n\nconst crypto = runtimeFeatures.has('crypto')\n  ? require('node:crypto')\n  : null\n\n/**\n * @callback HashIdFunction\n * @param {string} value - The value to hash\n * @returns {string} - The base64url encoded hash of the value\n */\n\n/**\n * Generates a hash for a given value\n * @type {HashIdFunction}\n */\nconst hashId = crypto?.hash\n  ? (value) => crypto.hash('sha256', value, 'base64url')\n  : (value) => Buffer.from(value).toString('base64url')\n\n/**\n * @typedef {(url: string) => boolean} IsUrlExcluded Checks if a URL matches any of the exclude patterns\n */\n\n/** @typedef {{[key: Lowercase<string>]: string}} NormalizedHeaders */\n/** @typedef {Array<string>} UndiciHeaders */\n/** @typedef {Record<string, string|string[]>} Headers */\n\n/**\n * @param {*} headers\n * @returns {headers is UndiciHeaders}\n */\nfunction isUndiciHeaders (headers) {\n  return Array.isArray(headers) && (headers.length & 1) === 0\n}\n\n/**\n * Factory function to create a URL exclusion checker\n * @param {Array<string| RegExp>} [excludePatterns=[]] - Array of patterns to exclude\n * @returns {IsUrlExcluded} - A function that checks if a URL matches any of the exclude patterns\n */\nfunction isUrlExcludedFactory (excludePatterns = []) {\n  if (excludePatterns.length === 0) {\n    return () => false\n  }\n\n  return function isUrlExcluded (url) {\n    let urlLowerCased\n\n    for (const pattern of excludePatterns) {\n      if (typeof pattern === 'string') {\n        if (!urlLowerCased) {\n          // Convert URL to lowercase only once\n          urlLowerCased = url.toLowerCase()\n        }\n        // Simple string match (case-insensitive)\n        if (urlLowerCased.includes(pattern.toLowerCase())) {\n          return true\n        }\n      } else if (pattern instanceof RegExp) {\n        // Regex pattern match\n        if (pattern.test(url)) {\n          return true\n        }\n      }\n    }\n\n    return false\n  }\n}\n\n/**\n * Normalizes headers for consistent comparison\n *\n * @param {Object|UndiciHeaders} headers - Headers to normalize\n * @returns {NormalizedHeaders} - Normalized headers as a lowercase object\n */\nfunction normalizeHeaders (headers) {\n  /** @type {NormalizedHeaders} */\n  const normalizedHeaders = {}\n\n  if (!headers) return normalizedHeaders\n\n  // Handle array format (undici internal format: [name, value, name, value, ...])\n  if (isUndiciHeaders(headers)) {\n    for (let i = 0; i < headers.length; i += 2) {\n      const key = headers[i]\n      const value = headers[i + 1]\n      if (key && value !== undefined) {\n        // Convert Buffers to strings if needed\n        const keyStr = Buffer.isBuffer(key) ? key.toString() : key\n        const valueStr = Buffer.isBuffer(value) ? value.toString() : value\n        normalizedHeaders[keyStr.toLowerCase()] = valueStr\n      }\n    }\n    return normalizedHeaders\n  }\n\n  // Handle object format\n  if (headers && typeof headers === 'object') {\n    for (const [key, value] of Object.entries(headers)) {\n      if (key && typeof key === 'string') {\n        normalizedHeaders[key.toLowerCase()] = Array.isArray(value) ? value.join(', ') : String(value)\n      }\n    }\n  }\n\n  return normalizedHeaders\n}\n\nconst validSnapshotModes = /** @type {const} */ (['record', 'playback', 'update'])\n\n/** @typedef {typeof validSnapshotModes[number]} SnapshotMode */\n\n/**\n * @param {*} mode - The snapshot mode to validate\n * @returns {asserts mode is SnapshotMode}\n */\nfunction validateSnapshotMode (mode) {\n  if (!validSnapshotModes.includes(mode)) {\n    throw new InvalidArgumentError(`Invalid snapshot mode: ${mode}. Must be one of: ${validSnapshotModes.join(', ')}`)\n  }\n}\n\nmodule.exports = {\n  createHeaderFilters,\n  hashId,\n  isUndiciHeaders,\n  normalizeHeaders,\n  isUrlExcludedFactory,\n  validateSnapshotMode\n}\n", "'use strict'\n\nconst { writeFile, readFile, mkdir } = require('node:fs/promises')\nconst { dirname, resolve } = require('node:path')\nconst { setTimeout, clearTimeout } = require('node:timers')\nconst { InvalidArgumentError, UndiciError } = require('../core/errors')\nconst { hashId, isUrlExcludedFactory, normalizeHeaders, createHeaderFilters } = require('./snapshot-utils')\n\n/**\n * @typedef {Object} SnapshotRequestOptions\n * @property {string} method - HTTP method (e.g. 'GET', 'POST', etc.)\n * @property {string} path - Request path\n * @property {string} origin - Request origin (base URL)\n * @property {import('./snapshot-utils').Headers|import('./snapshot-utils').UndiciHeaders} headers - Request headers\n * @property {import('./snapshot-utils').NormalizedHeaders} _normalizedHeaders - Request headers as a lowercase object\n * @property {string|Buffer} [body] - Request body (optional)\n */\n\n/**\n * @typedef {Object} SnapshotEntryRequest\n * @property {string} method - HTTP method (e.g. 'GET', 'POST', etc.)\n * @property {string} url - Full URL of the request\n * @property {import('./snapshot-utils').NormalizedHeaders} headers - Normalized headers as a lowercase object\n * @property {string|Buffer} [body] - Request body (optional)\n */\n\n/**\n * @typedef {Object} SnapshotEntryResponse\n * @property {number} statusCode - HTTP status code of the response\n * @property {import('./snapshot-utils').NormalizedHeaders} headers - Normalized response headers as a lowercase object\n * @property {string} body - Response body as a base64url encoded string\n * @property {Object} [trailers] - Optional response trailers\n */\n\n/**\n * @typedef {Object} SnapshotEntry\n * @property {SnapshotEntryRequest} request - The request object\n * @property {Array<SnapshotEntryResponse>} responses - Array of response objects\n * @property {number} callCount - Number of times this snapshot has been called\n * @property {string} timestamp - ISO timestamp of when the snapshot was created\n */\n\n/**\n * @typedef {Object} SnapshotRecorderMatchOptions\n * @property {Array<string>} [matchHeaders=[]] - Headers to match (empty array means match all headers)\n * @property {Array<string>} [ignoreHeaders=[]] - Headers to ignore for matching\n * @property {Array<string>} [excludeHeaders=[]] - Headers to exclude from matching\n * @property {boolean} [matchBody=true] - Whether to match request body\n * @property {boolean} [matchQuery=true] - Whether to match query properties\n * @property {boolean} [caseSensitive=false] - Whether header matching is case-sensitive\n */\n\n/**\n * @typedef {Object} SnapshotRecorderOptions\n * @property {string} [snapshotPath] - Path to save/load snapshots\n * @property {import('./snapshot-utils').SnapshotMode} [mode='record'] - Mode: 'record' or 'playback'\n * @property {number} [maxSnapshots=Infinity] - Maximum number of snapshots to keep\n * @property {boolean} [autoFlush=false] - Whether to automatically flush snapshots to disk\n * @property {number} [flushInterval=30000] - Auto-flush interval in milliseconds (default: 30 seconds)\n * @property {Array<string|RegExp>} [excludeUrls=[]] - URLs to exclude from recording\n * @property {function} [shouldRecord=null] - Function to filter requests for recording\n * @property {function} [shouldPlayback=null] - Function to filter requests\n */\n\n/**\n * @typedef {Object} SnapshotFormattedRequest\n * @property {string} method - HTTP method (e.g. 'GET', 'POST', etc.)\n * @property {string} url - Full URL of the request (with query parameters if matchQuery is true)\n * @property {import('./snapshot-utils').NormalizedHeaders} headers - Normalized headers as a lowercase object\n * @property {string} body - Request body (optional, only if matchBody is true)\n */\n\n/**\n * @typedef {Object} SnapshotInfo\n * @property {string} hash - Hash key for the snapshot\n * @property {SnapshotEntryRequest} request - The request object\n * @property {number} responseCount - Number of responses recorded for this request\n * @property {number} callCount - Number of times this snapshot has been called\n * @property {string} timestamp - ISO timestamp of when the snapshot was created\n */\n\n/**\n * Formats a request for consistent snapshot storage\n * Caches normalized headers to avoid repeated processing\n *\n * @param {SnapshotRequestOptions} opts - Request options\n * @param {import('./snapshot-utils').HeaderFilters} headerFilters - Cached header sets for performance\n * @param {SnapshotRecorderMatchOptions} [matchOptions] - Matching options for headers and body\n * @returns {SnapshotFormattedRequest} - Formatted request object\n */\nfunction formatRequestKey (opts, headerFilters, matchOptions = {}) {\n  const url = new URL(opts.path, opts.origin)\n\n  // Cache normalized headers if not already done\n  const normalized = opts._normalizedHeaders || normalizeHeaders(opts.headers)\n  if (!opts._normalizedHeaders) {\n    opts._normalizedHeaders = normalized\n  }\n\n  return {\n    method: opts.method || 'GET',\n    url: matchOptions.matchQuery !== false ? url.toString() : `${url.origin}${url.pathname}`,\n    headers: filterHeadersForMatching(normalized, headerFilters, matchOptions),\n    body: matchOptions.matchBody !== false && opts.body ? String(opts.body) : ''\n  }\n}\n\n/**\n * Filters headers based on matching configuration\n *\n * @param {import('./snapshot-utils').Headers} headers - Headers to filter\n * @param {import('./snapshot-utils').HeaderFilters} headerFilters - Cached sets for ignore, exclude, and match headers\n * @param {SnapshotRecorderMatchOptions} [matchOptions] - Matching options for headers\n */\nfunction filterHeadersForMatching (headers, headerFilters, matchOptions = {}) {\n  if (!headers || typeof headers !== 'object') return {}\n\n  const {\n    caseSensitive = false\n  } = matchOptions\n\n  const filtered = {}\n  const { ignore, exclude, match } = headerFilters\n\n  for (const [key, value] of Object.entries(headers)) {\n    const headerKey = caseSensitive ? key : key.toLowerCase()\n\n    // Skip if in exclude list (for security)\n    if (exclude.has(headerKey)) continue\n\n    // Skip if in ignore list (for matching)\n    if (ignore.has(headerKey)) continue\n\n    // If matchHeaders is specified, only include those headers\n    if (match.size !== 0) {\n      if (!match.has(headerKey)) continue\n    }\n\n    filtered[headerKey] = value\n  }\n\n  return filtered\n}\n\n/**\n * Filters headers for storage (only excludes sensitive headers)\n *\n * @param {import('./snapshot-utils').Headers} headers - Headers to filter\n * @param {import('./snapshot-utils').HeaderFilters} headerFilters - Cached sets for ignore, exclude, and match headers\n * @param {SnapshotRecorderMatchOptions} [matchOptions] - Matching options for headers\n */\nfunction filterHeadersForStorage (headers, headerFilters, matchOptions = {}) {\n  if (!headers || typeof headers !== 'object') return {}\n\n  const {\n    caseSensitive = false\n  } = matchOptions\n\n  const filtered = {}\n  const { exclude: excludeSet } = headerFilters\n\n  for (const [key, value] of Object.entries(headers)) {\n    const headerKey = caseSensitive ? key : key.toLowerCase()\n\n    // Skip if in exclude list (for security)\n    if (excludeSet.has(headerKey)) continue\n\n    filtered[headerKey] = value\n  }\n\n  return filtered\n}\n\n/**\n * Creates a hash key for request matching\n * Properly orders headers to avoid conflicts and uses crypto hashing when available\n *\n * @param {SnapshotFormattedRequest} formattedRequest - Request object\n * @returns {string} - Base64url encoded hash of the request\n */\nfunction createRequestHash (formattedRequest) {\n  const parts = [\n    formattedRequest.method,\n    formattedRequest.url\n  ]\n\n  // Process headers in a deterministic way to avoid conflicts\n  if (formattedRequest.headers && typeof formattedRequest.headers === 'object') {\n    const headerKeys = Object.keys(formattedRequest.headers).sort()\n    for (const key of headerKeys) {\n      const values = Array.isArray(formattedRequest.headers[key])\n        ? formattedRequest.headers[key]\n        : [formattedRequest.headers[key]]\n\n      // Add header name\n      parts.push(key)\n\n      // Add all values for this header, sorted for consistency\n      for (const value of values.sort()) {\n        parts.push(String(value))\n      }\n    }\n  }\n\n  // Add body\n  parts.push(formattedRequest.body)\n\n  const content = parts.join('|')\n\n  return hashId(content)\n}\n\nclass SnapshotRecorder {\n  /** @type {NodeJS.Timeout | null} */\n  #flushTimeout\n\n  /** @type {import('./snapshot-utils').IsUrlExcluded} */\n  #isUrlExcluded\n\n  /** @type {Map<string, SnapshotEntry>} */\n  #snapshots = new Map()\n\n  /** @type {string|undefined} */\n  #snapshotPath\n\n  /** @type {number} */\n  #maxSnapshots = Infinity\n\n  /** @type {boolean} */\n  #autoFlush = false\n\n  /** @type {import('./snapshot-utils').HeaderFilters} */\n  #headerFilters\n\n  /**\n   * Creates a new SnapshotRecorder instance\n   * @param {SnapshotRecorderOptions&SnapshotRecorderMatchOptions} [options={}] - Configuration options for the recorder\n   */\n  constructor (options = {}) {\n    this.#snapshotPath = options.snapshotPath\n    this.#maxSnapshots = options.maxSnapshots || Infinity\n    this.#autoFlush = options.autoFlush || false\n    this.flushInterval = options.flushInterval || 30000 // 30 seconds default\n    this._flushTimer = null\n\n    // Matching configuration\n    /** @type {Required<SnapshotRecorderMatchOptions>} */\n    this.matchOptions = {\n      matchHeaders: options.matchHeaders || [], // empty means match all headers\n      ignoreHeaders: options.ignoreHeaders || [],\n      excludeHeaders: options.excludeHeaders || [],\n      matchBody: options.matchBody !== false, // default: true\n      matchQuery: options.matchQuery !== false, // default: true\n      caseSensitive: options.caseSensitive || false\n    }\n\n    // Cache processed header sets to avoid recreating them on every request\n    this.#headerFilters = createHeaderFilters(this.matchOptions)\n\n    // Request filtering callbacks\n    this.shouldRecord = options.shouldRecord || (() => true) // function(requestOpts) -> boolean\n    this.shouldPlayback = options.shouldPlayback || (() => true) // function(requestOpts) -> boolean\n\n    // URL pattern filtering\n    this.#isUrlExcluded = isUrlExcludedFactory(options.excludeUrls) // Array of regex patterns or strings\n\n    // Start auto-flush timer if enabled\n    if (this.#autoFlush && this.#snapshotPath) {\n      this.#startAutoFlush()\n    }\n  }\n\n  /**\n   * Records a request-response interaction\n   * @param {SnapshotRequestOptions} requestOpts - Request options\n   * @param {SnapshotEntryResponse} response - Response data to record\n   * @return {Promise<void>} - Resolves when the recording is complete\n   */\n  async record (requestOpts, response) {\n    // Check if recording should be filtered out\n    if (!this.shouldRecord(requestOpts)) {\n      return // Skip recording\n    }\n\n    // Check URL exclusion patterns\n    if (this.isUrlExcluded(requestOpts)) {\n      return // Skip recording\n    }\n\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n\n    // Extract response data - always store body as base64\n    const normalizedHeaders = normalizeHeaders(response.headers)\n\n    /** @type {SnapshotEntryResponse} */\n    const responseData = {\n      statusCode: response.statusCode,\n      headers: filterHeadersForStorage(normalizedHeaders, this.#headerFilters, this.matchOptions),\n      body: Buffer.isBuffer(response.body)\n        ? response.body.toString('base64')\n        : Buffer.from(String(response.body || '')).toString('base64'),\n      trailers: response.trailers\n    }\n\n    // Remove oldest snapshot if we exceed maxSnapshots limit\n    if (this.#snapshots.size >= this.#maxSnapshots && !this.#snapshots.has(hash)) {\n      const oldestKey = this.#snapshots.keys().next().value\n      this.#snapshots.delete(oldestKey)\n    }\n\n    // Support sequential responses - if snapshot exists, add to responses array\n    const existingSnapshot = this.#snapshots.get(hash)\n    if (existingSnapshot && existingSnapshot.responses) {\n      existingSnapshot.responses.push(responseData)\n      existingSnapshot.timestamp = new Date().toISOString()\n    } else {\n      this.#snapshots.set(hash, {\n        request,\n        responses: [responseData], // Always store as array for consistency\n        callCount: 0,\n        timestamp: new Date().toISOString()\n      })\n    }\n\n    // Auto-flush if enabled\n    if (this.#autoFlush && this.#snapshotPath) {\n      this.#scheduleFlush()\n    }\n  }\n\n  /**\n   * Checks if a URL should be excluded from recording/playback\n   * @param {SnapshotRequestOptions} requestOpts - Request options to check\n   * @returns {boolean} - True if URL is excluded\n   */\n  isUrlExcluded (requestOpts) {\n    const url = new URL(requestOpts.path, requestOpts.origin).toString()\n    return this.#isUrlExcluded(url)\n  }\n\n  /**\n   * Finds a matching snapshot for the given request\n   * Returns the appropriate response based on call count for sequential responses\n   *\n   * @param {SnapshotRequestOptions} requestOpts - Request options to match\n   * @returns {SnapshotEntry&Record<'response', SnapshotEntryResponse>|undefined} - Matching snapshot response or undefined if not found\n   */\n  findSnapshot (requestOpts) {\n    // Check if playback should be filtered out\n    if (!this.shouldPlayback(requestOpts)) {\n      return undefined // Skip playback\n    }\n\n    // Check URL exclusion patterns\n    if (this.isUrlExcluded(requestOpts)) {\n      return undefined // Skip playback\n    }\n\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n    const snapshot = this.#snapshots.get(hash)\n\n    if (!snapshot) return undefined\n\n    // Handle sequential responses\n    const currentCallCount = snapshot.callCount || 0\n    const responseIndex = Math.min(currentCallCount, snapshot.responses.length - 1)\n    snapshot.callCount = currentCallCount + 1\n\n    return {\n      ...snapshot,\n      response: snapshot.responses[responseIndex]\n    }\n  }\n\n  /**\n   * Loads snapshots from file\n   * @param {string} [filePath] - Optional file path to load snapshots from\n   * @return {Promise<void>} - Resolves when snapshots are loaded\n   */\n  async loadSnapshots (filePath) {\n    const path = filePath || this.#snapshotPath\n    if (!path) {\n      throw new InvalidArgumentError('Snapshot path is required')\n    }\n\n    try {\n      const data = await readFile(resolve(path), 'utf8')\n      const parsed = JSON.parse(data)\n\n      // Convert array format back to Map\n      if (Array.isArray(parsed)) {\n        this.#snapshots.clear()\n        for (const { hash, snapshot } of parsed) {\n          this.#snapshots.set(hash, snapshot)\n        }\n      } else {\n        // Legacy object format\n        this.#snapshots = new Map(Object.entries(parsed))\n      }\n    } catch (error) {\n      if (error.code === 'ENOENT') {\n        // File doesn't exist yet - that's ok for recording mode\n        this.#snapshots.clear()\n      } else {\n        throw new UndiciError(`Failed to load snapshots from ${path}`, { cause: error })\n      }\n    }\n  }\n\n  /**\n   * Saves snapshots to file\n   *\n   * @param {string} [filePath] - Optional file path to save snapshots\n   * @returns {Promise<void>} - Resolves when snapshots are saved\n   */\n  async saveSnapshots (filePath) {\n    const path = filePath || this.#snapshotPath\n    if (!path) {\n      throw new InvalidArgumentError('Snapshot path is required')\n    }\n\n    const resolvedPath = resolve(path)\n\n    // Ensure directory exists\n    await mkdir(dirname(resolvedPath), { recursive: true })\n\n    // Convert Map to serializable format\n    const data = Array.from(this.#snapshots.entries()).map(([hash, snapshot]) => ({\n      hash,\n      snapshot\n    }))\n\n    await writeFile(resolvedPath, JSON.stringify(data, null, 2), { flush: true })\n  }\n\n  /**\n   * Clears all recorded snapshots\n   * @returns {void}\n   */\n  clear () {\n    this.#snapshots.clear()\n  }\n\n  /**\n   * Gets all recorded snapshots\n   * @return {Array<SnapshotEntry>} - Array of all recorded snapshots\n   */\n  getSnapshots () {\n    return Array.from(this.#snapshots.values())\n  }\n\n  /**\n   * Gets snapshot count\n   * @return {number} - Number of recorded snapshots\n   */\n  size () {\n    return this.#snapshots.size\n  }\n\n  /**\n   * Resets call counts for all snapshots (useful for test cleanup)\n   * @returns {void}\n   */\n  resetCallCounts () {\n    for (const snapshot of this.#snapshots.values()) {\n      snapshot.callCount = 0\n    }\n  }\n\n  /**\n   * Deletes a specific snapshot by request options\n   * @param {SnapshotRequestOptions} requestOpts - Request options to match\n   * @returns {boolean} - True if snapshot was deleted, false if not found\n   */\n  deleteSnapshot (requestOpts) {\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n    return this.#snapshots.delete(hash)\n  }\n\n  /**\n   * Gets information about a specific snapshot\n   * @param {SnapshotRequestOptions} requestOpts - Request options to match\n   * @returns {SnapshotInfo|null} - Snapshot information or null if not found\n   */\n  getSnapshotInfo (requestOpts) {\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n    const snapshot = this.#snapshots.get(hash)\n\n    if (!snapshot) return null\n\n    return {\n      hash,\n      request: snapshot.request,\n      responseCount: snapshot.responses ? snapshot.responses.length : (snapshot.response ? 1 : 0), // .response for legacy snapshots\n      callCount: snapshot.callCount || 0,\n      timestamp: snapshot.timestamp\n    }\n  }\n\n  /**\n   * Replaces all snapshots with new data (full replacement)\n   * @param {Array<{hash: string; snapshot: SnapshotEntry}>|Record<string, SnapshotEntry>} snapshotData - New snapshot data to replace existing ones\n   * @returns {void}\n   */\n  replaceSnapshots (snapshotData) {\n    this.#snapshots.clear()\n\n    if (Array.isArray(snapshotData)) {\n      for (const { hash, snapshot } of snapshotData) {\n        this.#snapshots.set(hash, snapshot)\n      }\n    } else if (snapshotData && typeof snapshotData === 'object') {\n      // Legacy object format\n      this.#snapshots = new Map(Object.entries(snapshotData))\n    }\n  }\n\n  /**\n   * Starts the auto-flush timer\n   * @returns {void}\n   */\n  #startAutoFlush () {\n    return this.#scheduleFlush()\n  }\n\n  /**\n   * Stops the auto-flush timer\n   * @returns {void}\n   */\n  #stopAutoFlush () {\n    if (this.#flushTimeout) {\n      clearTimeout(this.#flushTimeout)\n      // Ensure any pending flush is completed\n      this.saveSnapshots().catch(() => {\n      // Ignore flush errors\n      })\n      this.#flushTimeout = null\n    }\n  }\n\n  /**\n   * Schedules a flush (debounced to avoid excessive writes)\n   */\n  #scheduleFlush () {\n    this.#flushTimeout = setTimeout(() => {\n      this.saveSnapshots().catch(() => {\n        // Ignore flush errors\n      })\n      if (this.#autoFlush) {\n        this.#flushTimeout?.refresh()\n      } else {\n        this.#flushTimeout = null\n      }\n    }, 1000) // 1 second debounce\n  }\n\n  /**\n   * Cleanup method to stop timers\n   * @returns {void}\n   */\n  destroy () {\n    this.#stopAutoFlush()\n    if (this.#flushTimeout) {\n      clearTimeout(this.#flushTimeout)\n      this.#flushTimeout = null\n    }\n  }\n\n  /**\n   * Async close method that saves all recordings and performs cleanup\n   * @returns {Promise<void>}\n   */\n  async close () {\n    // Save any pending recordings if we have a snapshot path\n    if (this.#snapshotPath && this.#snapshots.size !== 0) {\n      await this.saveSnapshots()\n    }\n\n    // Perform cleanup\n    this.destroy()\n  }\n}\n\nmodule.exports = { SnapshotRecorder, formatRequestKey, createRequestHash, filterHeadersForMatching, filterHeadersForStorage, createHeaderFilters }\n", "'use strict'\n\nconst Agent = require('../dispatcher/agent')\nconst MockAgent = require('./mock-agent')\nconst { SnapshotRecorder } = require('./snapshot-recorder')\nconst { InvalidArgumentError, UndiciError } = require('../core/errors')\nconst util = require('../core/util')\nconst { validateSnapshotMode } = require('./snapshot-utils')\n\nconst kSnapshotRecorder = Symbol('kSnapshotRecorder')\nconst kSnapshotMode = Symbol('kSnapshotMode')\nconst kSnapshotPath = Symbol('kSnapshotPath')\nconst kSnapshotLoaded = Symbol('kSnapshotLoaded')\nconst kRealAgent = Symbol('kRealAgent')\n\n// Static flag to ensure warning is only emitted once per process\nlet warningEmitted = false\n\nclass SnapshotAgent extends MockAgent {\n  constructor (opts = {}) {\n    // Emit experimental warning only once\n    if (!warningEmitted) {\n      process.emitWarning(\n        'SnapshotAgent is experimental and subject to change',\n        'ExperimentalWarning'\n      )\n      warningEmitted = true\n    }\n\n    const {\n      mode = 'record',\n      snapshotPath = null,\n      ...mockAgentOpts\n    } = opts\n\n    super(mockAgentOpts)\n\n    validateSnapshotMode(mode)\n\n    // Validate snapshotPath is provided when required\n    if ((mode === 'playback' || mode === 'update') && !snapshotPath) {\n      throw new InvalidArgumentError(`snapshotPath is required when mode is '${mode}'`)\n    }\n\n    this[kSnapshotMode] = mode\n    this[kSnapshotPath] = snapshotPath\n\n    this[kSnapshotRecorder] = new SnapshotRecorder({\n      snapshotPath: this[kSnapshotPath],\n      mode: this[kSnapshotMode],\n      maxSnapshots: opts.maxSnapshots,\n      autoFlush: opts.autoFlush,\n      flushInterval: opts.flushInterval,\n      matchHeaders: opts.matchHeaders,\n      ignoreHeaders: opts.ignoreHeaders,\n      excludeHeaders: opts.excludeHeaders,\n      matchBody: opts.matchBody,\n      matchQuery: opts.matchQuery,\n      caseSensitive: opts.caseSensitive,\n      shouldRecord: opts.shouldRecord,\n      shouldPlayback: opts.shouldPlayback,\n      excludeUrls: opts.excludeUrls\n    })\n    this[kSnapshotLoaded] = false\n\n    // For recording/update mode, we need a real agent to make actual requests\n    // For playback mode, we need a real agent if there are excluded URLs\n    if (this[kSnapshotMode] === 'record' || this[kSnapshotMode] === 'update' ||\n        (this[kSnapshotMode] === 'playback' && opts.excludeUrls && opts.excludeUrls.length > 0)) {\n      this[kRealAgent] = new Agent(opts)\n    }\n\n    // Auto-load snapshots in playback/update mode\n    if ((this[kSnapshotMode] === 'playback' || this[kSnapshotMode] === 'update') && this[kSnapshotPath]) {\n      this.loadSnapshots().catch(() => {\n        // Ignore load errors - file might not exist yet\n      })\n    }\n  }\n\n  dispatch (opts, handler) {\n    const mode = this[kSnapshotMode]\n\n    // Check if URL should be excluded (pass through without mocking/recording)\n    if (this[kSnapshotRecorder].isUrlExcluded(opts)) {\n      // Real agent is guaranteed by constructor when excludeUrls is configured\n      return this[kRealAgent].dispatch(opts, handler)\n    }\n\n    if (mode === 'playback' || mode === 'update') {\n      // Ensure snapshots are loaded\n      if (!this[kSnapshotLoaded]) {\n        // Need to load asynchronously, delegate to async version\n        return this.#asyncDispatch(opts, handler)\n      }\n\n      // Try to find existing snapshot (synchronous)\n      const snapshot = this[kSnapshotRecorder].findSnapshot(opts)\n\n      if (snapshot) {\n        // Use recorded response (synchronous)\n        return this.#replaySnapshot(snapshot, handler)\n      } else if (mode === 'update') {\n        // Make real request and record it (async required)\n        return this.#recordAndReplay(opts, handler)\n      } else {\n        // Playback mode but no snapshot found\n        const error = new UndiciError(`No snapshot found for ${opts.method || 'GET'} ${opts.path}`)\n        if (handler.onResponseError) {\n          handler.onResponseError(null, error)\n          return\n        }\n        throw error\n      }\n    } else if (mode === 'record') {\n      // Record mode - make real request and save response (async required)\n      return this.#recordAndReplay(opts, handler)\n    }\n  }\n\n  /**\n   * Async version of dispatch for when we need to load snapshots first\n   */\n  async #asyncDispatch (opts, handler) {\n    await this.loadSnapshots()\n    return this.dispatch(opts, handler)\n  }\n\n  /**\n   * Records a real request and replays the response\n   */\n  #recordAndReplay (opts, handler) {\n    const responseData = {\n      statusCode: null,\n      headers: {},\n      trailers: {},\n      body: []\n    }\n\n    const self = this // Capture 'this' context for use within nested handler callbacks\n\n    const recordingHandler = {\n      onRequestStart (controller, context) {\n        return handler.onRequestStart(controller, { ...context, history: this.history })\n      },\n\n      onRequestUpgrade (controller, statusCode, headers, socket) {\n        return handler.onRequestUpgrade(controller, statusCode, headers, socket)\n      },\n\n      onResponseStart (controller, statusCode, headers, statusMessage) {\n        responseData.statusCode = statusCode\n        responseData.headers = headers\n        return handler.onResponseStart(controller, statusCode, headers, statusMessage)\n      },\n\n      onResponseData (controller, chunk) {\n        responseData.body.push(chunk)\n        return handler.onResponseData(controller, chunk)\n      },\n\n      onResponseEnd (controller, trailers) {\n        responseData.trailers = trailers\n\n        // Record the interaction using captured 'self' context (fire and forget)\n        const responseBody = Buffer.concat(responseData.body)\n        self[kSnapshotRecorder].record(opts, {\n          statusCode: responseData.statusCode,\n          headers: responseData.headers,\n          body: responseBody,\n          trailers: responseData.trailers\n        })\n          .then(() => handler.onResponseEnd(controller, trailers))\n          .catch((error) => handler.onResponseError(controller, error))\n      },\n\n      onResponseError (controller, error) {\n        return handler.onResponseError(controller, error)\n      }\n    }\n\n    // Use composed agent if available (includes interceptors), otherwise use real agent\n    const agent = this[kRealAgent]\n    return agent.dispatch(opts, recordingHandler)\n  }\n\n  /**\n   * Replays a recorded response\n   *\n   * @param {Object} snapshot - The recorded snapshot to replay.\n   * @param {Object} handler - The handler to call with the response data.\n   * @returns {void}\n   */\n  #replaySnapshot (snapshot, handler) {\n    try {\n      const { response } = snapshot\n\n      const rawHeaders = response.headers ? util.toRawHeaders(response.headers) : []\n      const rawTrailers = response.trailers ? util.toRawHeaders(response.trailers) : []\n\n      const controller = {\n        rawHeaders,\n        rawTrailers,\n        pause () { },\n        resume () { },\n        abort (reason) {\n          this.aborted = true\n          this.reason = reason\n        },\n\n        aborted: false,\n        paused: false\n      }\n\n      handler.onRequestStart(controller)\n\n      handler.onResponseStart(controller, response.statusCode, response.headers, response.statusMessage)\n\n      // Body is always stored as base64 string\n      const body = Buffer.from(response.body, 'base64')\n      handler.onResponseData(controller, body)\n\n      handler.onResponseEnd(controller, response.trailers)\n    } catch (error) {\n      handler.onResponseError?.(null, error)\n    }\n  }\n\n  /**\n   * Loads snapshots from file\n   *\n   * @param {string} [filePath] - Optional file path to load snapshots from.\n   * @returns {Promise<void>} - Resolves when snapshots are loaded.\n   */\n  async loadSnapshots (filePath) {\n    await this[kSnapshotRecorder].loadSnapshots(filePath || this[kSnapshotPath])\n    this[kSnapshotLoaded] = true\n\n    // In playback mode, set up MockAgent interceptors for all snapshots\n    if (this[kSnapshotMode] === 'playback') {\n      this.#setupMockInterceptors()\n    }\n  }\n\n  /**\n   * Saves snapshots to file\n   *\n   * @param {string} [filePath] - Optional file path to save snapshots to.\n   * @returns {Promise<void>} - Resolves when snapshots are saved.\n   */\n  async saveSnapshots (filePath) {\n    return this[kSnapshotRecorder].saveSnapshots(filePath || this[kSnapshotPath])\n  }\n\n  /**\n   * Sets up MockAgent interceptors based on recorded snapshots.\n   *\n   * This method creates MockAgent interceptors for each recorded snapshot,\n   * allowing the SnapshotAgent to fall back to MockAgent's standard intercept\n   * mechanism in playback mode. Each interceptor is configured to persist\n   * (remain active for multiple requests) and responds with the recorded\n   * response data.\n   *\n   * Called automatically when loading snapshots in playback mode.\n   *\n   * @returns {void}\n   */\n  #setupMockInterceptors () {\n    for (const snapshot of this[kSnapshotRecorder].getSnapshots()) {\n      const { request, responses, response } = snapshot\n      const url = new URL(request.url)\n\n      const mockPool = this.get(url.origin)\n\n      // Handle both new format (responses array) and legacy format (response object)\n      const responseData = responses ? responses[0] : response\n      if (!responseData) continue\n\n      mockPool.intercept({\n        path: url.pathname + url.search,\n        method: request.method,\n        headers: request.headers,\n        body: request.body\n      }).reply(responseData.statusCode, responseData.body, {\n        headers: responseData.headers,\n        trailers: responseData.trailers\n      }).persist()\n    }\n  }\n\n  /**\n   * Gets the snapshot recorder\n   * @return {SnapshotRecorder} - The snapshot recorder instance\n   */\n  getRecorder () {\n    return this[kSnapshotRecorder]\n  }\n\n  /**\n   * Gets the current mode\n   * @return {import('./snapshot-utils').SnapshotMode} - The current snapshot mode\n   */\n  getMode () {\n    return this[kSnapshotMode]\n  }\n\n  /**\n   * Clears all snapshots\n   * @returns {void}\n   */\n  clearSnapshots () {\n    this[kSnapshotRecorder].clear()\n  }\n\n  /**\n   * Resets call counts for all snapshots (useful for test cleanup)\n   * @returns {void}\n   */\n  resetCallCounts () {\n    this[kSnapshotRecorder].resetCallCounts()\n  }\n\n  /**\n   * Deletes a specific snapshot by request options\n   * @param {import('./snapshot-recorder').SnapshotRequestOptions} requestOpts - Request options to identify the snapshot\n   * @return {Promise<boolean>} - Returns true if the snapshot was deleted, false if not found\n   */\n  deleteSnapshot (requestOpts) {\n    return this[kSnapshotRecorder].deleteSnapshot(requestOpts)\n  }\n\n  /**\n   * Gets information about a specific snapshot\n   * @returns {import('./snapshot-recorder').SnapshotInfo|null} - Snapshot information or null if not found\n   */\n  getSnapshotInfo (requestOpts) {\n    return this[kSnapshotRecorder].getSnapshotInfo(requestOpts)\n  }\n\n  /**\n   * Replaces all snapshots with new data (full replacement)\n   * @param {Array<{hash: string; snapshot: import('./snapshot-recorder').SnapshotEntryshotEntry}>|Record<string, import('./snapshot-recorder').SnapshotEntry>} snapshotData - New snapshot data to replace existing snapshots\n   * @returns {void}\n   */\n  replaceSnapshots (snapshotData) {\n    this[kSnapshotRecorder].replaceSnapshots(snapshotData)\n  }\n\n  /**\n   * Closes the agent, saving snapshots and cleaning up resources.\n   *\n   * @returns {Promise<void>}\n   */\n  async close () {\n    await this[kSnapshotRecorder].close()\n    await this[kRealAgent]?.close()\n    await super.close()\n  }\n}\n\nmodule.exports = SnapshotAgent\n", "'use strict'\n\n// We include a version number for the Dispatcher API. In case of breaking changes,\n// this version number must be increased to avoid conflicts.\nconst globalDispatcher = Symbol.for('undici.globalDispatcher.2')\nconst legacyGlobalDispatcher = Symbol.for('undici.globalDispatcher.1')\nconst { InvalidArgumentError } = require('./core/errors')\nconst Agent = require('./dispatcher/agent')\nconst Dispatcher1Wrapper = require('./dispatcher/dispatcher1-wrapper')\n\nif (getGlobalDispatcher() === undefined) {\n  setGlobalDispatcher(new Agent())\n}\n\nfunction setGlobalDispatcher (agent) {\n  if (!agent || typeof agent.dispatch !== 'function') {\n    throw new InvalidArgumentError('Argument agent must implement Agent')\n  }\n\n  Object.defineProperty(globalThis, globalDispatcher, {\n    value: agent,\n    writable: true,\n    enumerable: false,\n    configurable: false\n  })\n\n  const legacyAgent = agent instanceof Dispatcher1Wrapper ? agent : new Dispatcher1Wrapper(agent)\n\n  Object.defineProperty(globalThis, legacyGlobalDispatcher, {\n    value: legacyAgent,\n    writable: true,\n    enumerable: false,\n    configurable: false\n  })\n}\n\nfunction getGlobalDispatcher () {\n  return globalThis[globalDispatcher]\n}\n\n// These are the globals that can be installed by undici.install().\n// Not exported by index.js to avoid use outside of this module.\nconst installedExports = /** @type {const} */ (\n  [\n    'fetch',\n    'Headers',\n    'Response',\n    'Request',\n    'FormData',\n    'WebSocket',\n    'CloseEvent',\n    'ErrorEvent',\n    'MessageEvent',\n    'EventSource'\n  ]\n)\n\nmodule.exports = {\n  setGlobalDispatcher,\n  getGlobalDispatcher,\n  installedExports\n}\n", "'use strict'\n\nconst assert = require('node:assert')\n\n/**\n * @deprecated\n */\nmodule.exports = class DecoratorHandler {\n  #handler\n  #onCompleteCalled = false\n  #onErrorCalled = false\n  #onResponseStartCalled = false\n\n  constructor (handler) {\n    if (typeof handler !== 'object' || handler === null) {\n      throw new TypeError('handler must be an object')\n    }\n    this.#handler = handler\n  }\n\n  onRequestStart (...args) {\n    this.#handler.onRequestStart?.(...args)\n  }\n\n  onRequestUpgrade (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n\n    return this.#handler.onRequestUpgrade?.(...args)\n  }\n\n  onResponseStart (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n    assert(!this.#onResponseStartCalled)\n\n    this.#onResponseStartCalled = true\n\n    return this.#handler.onResponseStart?.(...args)\n  }\n\n  onResponseData (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n\n    return this.#handler.onResponseData?.(...args)\n  }\n\n  onResponseEnd (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n\n    this.#onCompleteCalled = true\n    return this.#handler.onResponseEnd?.(...args)\n  }\n\n  onResponseError (...args) {\n    this.#onErrorCalled = true\n    return this.#handler.onResponseError?.(...args)\n  }\n\n  /**\n   * @deprecated\n   */\n  onBodySent () {}\n}\n", "'use strict'\n\nconst util = require('../core/util')\nconst assert = require('node:assert')\nconst { InvalidArgumentError } = require('../core/errors')\n\nconst redirectableStatusCodes = [300, 301, 302, 303, 307, 308]\n\nconst noop = () => {}\n\nclass RedirectHandler {\n  static buildDispatch (dispatcher, maxRedirections) {\n    if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {\n      throw new InvalidArgumentError('maxRedirections must be a positive number')\n    }\n\n    const dispatch = dispatcher.dispatch.bind(dispatcher)\n    return (opts, originalHandler) => dispatch(opts, new RedirectHandler(dispatch, maxRedirections, opts, originalHandler))\n  }\n\n  constructor (dispatch, maxRedirections, opts, handler) {\n    if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {\n      throw new InvalidArgumentError('maxRedirections must be a positive number')\n    }\n\n    if (opts.throwOnMaxRedirect != null && typeof opts.throwOnMaxRedirect !== 'boolean') {\n      throw new InvalidArgumentError('throwOnMaxRedirect must be a boolean')\n    }\n\n    this.dispatch = dispatch\n    this.location = null\n    const { maxRedirections: _, ...cleanOpts } = opts\n    this.opts = cleanOpts // opts must be a copy, exclude maxRedirections\n    this.opts.body = util.wrapRequestBody(this.opts.body)\n    this.maxRedirections = maxRedirections\n    this.handler = handler\n    this.history = []\n  }\n\n  onRequestStart (controller, context) {\n    this.handler.onRequestStart?.(controller, { ...context, history: this.history })\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    if (this.opts.throwOnMaxRedirect && this.history.length >= this.maxRedirections) {\n      throw new Error('max redirects')\n    }\n\n    // https://tools.ietf.org/html/rfc7231#section-6.4.2\n    // https://fetch.spec.whatwg.org/#http-redirect-fetch\n    // In case of HTTP 301 or 302 with POST, change the method to GET\n    if ((statusCode === 301 || statusCode === 302) && this.opts.method === 'POST') {\n      this.opts.method = 'GET'\n      if (util.isStream(this.opts.body)) {\n        util.destroy(this.opts.body.on('error', noop))\n      }\n      this.opts.body = null\n    }\n\n    // https://tools.ietf.org/html/rfc7231#section-6.4.4\n    // In case of HTTP 303, always replace method to be either HEAD or GET\n    if (statusCode === 303 && this.opts.method !== 'HEAD') {\n      this.opts.method = 'GET'\n      if (util.isStream(this.opts.body)) {\n        util.destroy(this.opts.body.on('error', noop))\n      }\n      this.opts.body = null\n    }\n\n    this.location = this.history.length >= this.maxRedirections || util.isDisturbed(this.opts.body) || redirectableStatusCodes.indexOf(statusCode) === -1\n      ? null\n      : headers.location\n\n    if (this.opts.origin) {\n      this.history.push(new URL(this.opts.path, this.opts.origin))\n    }\n\n    if (!this.location) {\n      this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n      return\n    }\n\n    const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin)))\n    const path = search ? `${pathname}${search}` : pathname\n\n    // Check for redirect loops by seeing if we've already visited this URL in our history\n    // This catches the case where Client/Pool try to handle cross-origin redirects but fail\n    // and keep redirecting to the same URL in an infinite loop\n    const redirectUrlString = `${origin}${path}`\n    for (const historyUrl of this.history) {\n      if (historyUrl.toString() === redirectUrlString) {\n        throw new InvalidArgumentError(`Redirect loop detected. Cannot redirect to ${origin}. This typically happens when using a Client or Pool with cross-origin redirects. Use an Agent for cross-origin redirects.`)\n      }\n    }\n\n    // Remove headers referring to the original URL.\n    // By default it is Host only, unless it's a 303 (see below), which removes also all Content-* headers.\n    // https://tools.ietf.org/html/rfc7231#section-6.4\n    this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin)\n    this.opts.path = path\n    this.opts.origin = origin\n    this.opts.query = null\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.location) {\n      /*\n        https://tools.ietf.org/html/rfc7231#section-6.4\n\n        TLDR: undici always ignores 3xx response bodies.\n\n        Redirection is used to serve the requested resource from another URL, so it assumes that\n        no body is generated (and thus can be ignored). Even though generating a body is not prohibited.\n\n        For status 301, 302, 303, 307 and 308 (the latter from RFC 7238), the specs mention that the body usually\n        (which means it's optional and not mandated) contain just an hyperlink to the value of\n        the Location response header, so the body can be ignored safely.\n\n        For status 300, which is \"Multiple Choices\", the spec mentions both generating a Location\n        response header AND a response body with the other possible location to follow.\n        Since the spec explicitly chooses not to specify a format for such body and leave it to\n        servers and browsers implementors, we ignore the body as there is no specified way to eventually parse it.\n      */\n    } else {\n      this.handler.onResponseData?.(controller, chunk)\n    }\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.location) {\n      /*\n        https://tools.ietf.org/html/rfc7231#section-6.4\n\n        TLDR: undici always ignores 3xx response trailers as they are not expected in case of redirections\n        and neither are useful if present.\n\n        See comment on onData method above for more detailed information.\n      */\n      this.dispatch(this.opts, this)\n    } else {\n      this.handler.onResponseEnd(controller, trailers)\n    }\n  }\n\n  onResponseError (controller, error) {\n    this.handler.onResponseError?.(controller, error)\n  }\n}\n\n// https://tools.ietf.org/html/rfc7231#section-6.4.4\nfunction shouldRemoveHeader (header, removeContent, unknownOrigin) {\n  if (header.length === 4) {\n    return util.headerNameToString(header) === 'host'\n  }\n  if (removeContent && util.headerNameToString(header).startsWith('content-')) {\n    return true\n  }\n  if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) {\n    const name = util.headerNameToString(header)\n    return name === 'authorization' || name === 'cookie' || name === 'proxy-authorization'\n  }\n  return false\n}\n\n// https://tools.ietf.org/html/rfc7231#section-6.4\nfunction cleanRequestHeaders (headers, removeContent, unknownOrigin) {\n  const ret = []\n  if (Array.isArray(headers)) {\n    for (let i = 0; i < headers.length; i += 2) {\n      if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) {\n        ret.push(headers[i], headers[i + 1])\n      }\n    }\n  } else if (headers && typeof headers === 'object') {\n    const entries = util.hasSafeIterator(headers) ? headers : Object.entries(headers)\n\n    for (const [key, value] of entries) {\n      if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) {\n        ret.push(key, value)\n      }\n    }\n  } else {\n    assert(headers == null, 'headers must be an object or an array')\n  }\n  return ret\n}\n\nmodule.exports = RedirectHandler\n", "'use strict'\n\nconst RedirectHandler = require('../handler/redirect-handler')\n\nfunction createRedirectInterceptor ({ maxRedirections: defaultMaxRedirections, throwOnMaxRedirect: defaultThrowOnMaxRedirect } = {}) {\n  return (dispatch) => {\n    return function Intercept (opts, handler) {\n      const { maxRedirections = defaultMaxRedirections, throwOnMaxRedirect = defaultThrowOnMaxRedirect, ...rest } = opts\n\n      if (maxRedirections == null || maxRedirections === 0) {\n        return dispatch(opts, handler)\n      }\n\n      const dispatchOpts = { ...rest, throwOnMaxRedirect } // Stop sub dispatcher from also redirecting.\n      const redirectHandler = new RedirectHandler(dispatch, maxRedirections, dispatchOpts, handler)\n      return dispatch(dispatchOpts, redirectHandler)\n    }\n  }\n}\n\nmodule.exports = createRedirectInterceptor\n", "'use strict'\n\n// const { parseHeaders } = require('../core/util')\nconst DecoratorHandler = require('../handler/decorator-handler')\nconst { ResponseError } = require('../core/errors')\n\nclass ResponseErrorHandler extends DecoratorHandler {\n  #statusCode\n  #contentType\n  #decoder\n  #headers\n  #body\n\n  constructor (_opts, { handler }) {\n    super(handler)\n  }\n\n  #checkContentType (contentType) {\n    return (this.#contentType ?? '').indexOf(contentType) === 0\n  }\n\n  onRequestStart (controller, context) {\n    this.#statusCode = 0\n    this.#contentType = null\n    this.#decoder = null\n    this.#headers = null\n    this.#body = ''\n\n    return super.onRequestStart(controller, context)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    this.#statusCode = statusCode\n    this.#headers = headers\n    this.#contentType = headers['content-type']\n\n    if (this.#statusCode < 400) {\n      return super.onResponseStart(controller, statusCode, headers, statusMessage)\n    }\n\n    if (this.#checkContentType('application/json') || this.#checkContentType('text/plain')) {\n      this.#decoder = new TextDecoder('utf-8')\n    }\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.#statusCode < 400) {\n      return super.onResponseData(controller, chunk)\n    }\n\n    this.#body += this.#decoder?.decode(chunk, { stream: true }) ?? ''\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.#statusCode >= 400) {\n      this.#body += this.#decoder?.decode(undefined, { stream: false }) ?? ''\n\n      if (this.#checkContentType('application/json')) {\n        try {\n          this.#body = JSON.parse(this.#body)\n        } catch {\n          // Do nothing...\n        }\n      }\n\n      let err\n      const stackTraceLimit = Error.stackTraceLimit\n      Error.stackTraceLimit = 0\n      try {\n        err = new ResponseError('Response Error', this.#statusCode, {\n          body: this.#body,\n          headers: this.#headers\n        })\n      } finally {\n        Error.stackTraceLimit = stackTraceLimit\n      }\n\n      super.onResponseError(controller, err)\n    } else {\n      super.onResponseEnd(controller, trailers)\n    }\n  }\n\n  onResponseError (controller, err) {\n    super.onResponseError(controller, err)\n  }\n}\n\nmodule.exports = () => {\n  return (dispatch) => {\n    return function Intercept (opts, handler) {\n      return dispatch(opts, new ResponseErrorHandler(opts, { handler }))\n    }\n  }\n}\n", "'use strict'\nconst RetryHandler = require('../handler/retry-handler')\n\nmodule.exports = globalOpts => {\n  return dispatch => {\n    return function retryInterceptor (opts, handler) {\n      return dispatch(\n        opts,\n        new RetryHandler(\n          { ...opts, retryOptions: { ...globalOpts, ...opts.retryOptions } },\n          {\n            handler,\n            dispatch\n          }\n        )\n      )\n    }\n  }\n}\n", "'use strict'\n\nconst { InvalidArgumentError, RequestAbortedError } = require('../core/errors')\nconst DecoratorHandler = require('../handler/decorator-handler')\n\nclass DumpHandler extends DecoratorHandler {\n  #maxSize = 1024 * 1024\n  #dumped = false\n  #size = 0\n  #controller = null\n  aborted = false\n  reason = false\n\n  constructor ({ maxSize, signal }, handler) {\n    if (maxSize != null && (!Number.isFinite(maxSize) || maxSize < 1)) {\n      throw new InvalidArgumentError('maxSize must be a number greater than 0')\n    }\n\n    super(handler)\n\n    this.#maxSize = maxSize ?? this.#maxSize\n    // this.#handler = handler\n  }\n\n  #abort (reason) {\n    this.aborted = true\n    this.reason = reason\n  }\n\n  onRequestStart (controller, context) {\n    controller.abort = this.#abort.bind(this)\n    this.#controller = controller\n\n    return super.onRequestStart(controller, context)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    const contentLength = headers['content-length']\n\n    if (contentLength != null && contentLength > this.#maxSize) {\n      throw new RequestAbortedError(\n        `Response size (${contentLength}) larger than maxSize (${\n          this.#maxSize\n        })`\n      )\n    }\n\n    if (this.aborted === true) {\n      return true\n    }\n\n    return super.onResponseStart(controller, statusCode, headers, statusMessage)\n  }\n\n  onResponseError (controller, err) {\n    if (this.#dumped) {\n      return\n    }\n\n    // On network errors before connect, controller will be null\n    err = this.#controller?.reason ?? err\n\n    super.onResponseError(controller, err)\n  }\n\n  onResponseData (controller, chunk) {\n    this.#size = this.#size + chunk.length\n\n    if (this.#size >= this.#maxSize) {\n      this.#dumped = true\n\n      if (this.aborted === true) {\n        super.onResponseError(controller, this.reason)\n      } else {\n        super.onResponseEnd(controller, {})\n      }\n    }\n\n    return true\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.#dumped) {\n      return\n    }\n\n    if (this.#controller.aborted === true) {\n      super.onResponseError(controller, this.reason)\n      return\n    }\n\n    super.onResponseEnd(controller, trailers)\n  }\n}\n\nfunction createDumpInterceptor (\n  { maxSize: defaultMaxSize } = {\n    maxSize: 1024 * 1024\n  }\n) {\n  return dispatch => {\n    return function Intercept (opts, handler) {\n      const { dumpMaxSize = defaultMaxSize } = opts\n\n      const dumpHandler = new DumpHandler({ maxSize: dumpMaxSize, signal: opts.signal }, handler)\n\n      return dispatch(opts, dumpHandler)\n    }\n  }\n}\n\nmodule.exports = createDumpInterceptor\n", "'use strict'\nconst { isIP } = require('node:net')\nconst { lookup } = require('node:dns')\nconst DecoratorHandler = require('../handler/decorator-handler')\nconst { InvalidArgumentError, InformationalError } = require('../core/errors')\nconst maxInt = Math.pow(2, 31) - 1\n\nfunction hasSafeIterator (headers) {\n  const prototype = Object.getPrototypeOf(headers)\n  const ownIterator = Object.hasOwn(headers, Symbol.iterator)\n  return ownIterator || (prototype != null && prototype !== Object.prototype && typeof headers[Symbol.iterator] === 'function')\n}\n\nfunction isHostHeader (key) {\n  return typeof key === 'string' && key.toLowerCase() === 'host'\n}\n\nfunction normalizeHeaders (headers) {\n  if (headers == null) {\n    return null\n  }\n\n  if (Array.isArray(headers)) {\n    if (headers.length === 0 || !Array.isArray(headers[0])) {\n      return headers\n    }\n\n    const normalized = []\n    for (const header of headers) {\n      if (Array.isArray(header) && header.length === 2) {\n        normalized.push(header[0], header[1])\n      } else {\n        normalized.push(header)\n      }\n    }\n\n    return normalized\n  }\n\n  if (typeof headers === 'object' && hasSafeIterator(headers)) {\n    const normalized = []\n    for (const header of headers) {\n      if (Array.isArray(header) && header.length === 2) {\n        normalized.push(header[0], header[1])\n      } else {\n        normalized.push(header)\n      }\n    }\n\n    return normalized\n  }\n\n  return headers\n}\n\nfunction hasHostHeader (headers) {\n  if (headers == null) {\n    return false\n  }\n\n  if (Array.isArray(headers)) {\n    if (headers.length === 0) {\n      return false\n    }\n\n    for (let i = 0; i < headers.length; i += 2) {\n      if (isHostHeader(headers[i])) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  if (typeof headers === 'object') {\n    for (const key in headers) {\n      if (isHostHeader(key)) {\n        return true\n      }\n    }\n  }\n\n  return false\n}\n\nfunction withHostHeader (host, headers) {\n  const normalizedHeaders = normalizeHeaders(headers)\n\n  if (hasHostHeader(normalizedHeaders)) {\n    return normalizedHeaders\n  }\n\n  if (Array.isArray(normalizedHeaders)) {\n    return ['host', host, ...normalizedHeaders]\n  }\n\n  if (normalizedHeaders && typeof normalizedHeaders === 'object') {\n    return {\n      host,\n      ...normalizedHeaders\n    }\n  }\n\n  return { host }\n}\n\nclass DNSStorage {\n  #maxItems = 0\n  #records = new Map()\n\n  constructor (opts) {\n    this.#maxItems = opts.maxItems\n  }\n\n  get size () {\n    return this.#records.size\n  }\n\n  get (hostname) {\n    return this.#records.get(hostname) ?? null\n  }\n\n  set (hostname, records) {\n    this.#records.set(hostname, records)\n  }\n\n  delete (hostname) {\n    this.#records.delete(hostname)\n  }\n\n  // Delegate to storage decide can we do more lookups or not\n  full () {\n    return this.size >= this.#maxItems\n  }\n}\n\nclass DNSInstance {\n  #maxTTL = 0\n  #maxItems = 0\n  dualStack = true\n  affinity = null\n  lookup = null\n  pick = null\n  storage = null\n\n  constructor (opts) {\n    this.#maxTTL = opts.maxTTL\n    this.#maxItems = opts.maxItems\n    this.dualStack = opts.dualStack\n    this.affinity = opts.affinity\n    this.lookup = opts.lookup ?? this.#defaultLookup\n    this.pick = opts.pick ?? this.#defaultPick\n    this.storage = opts.storage ?? new DNSStorage(opts)\n  }\n\n  runLookup (origin, opts, cb) {\n    const ips = this.storage.get(origin.hostname)\n\n    // If full, we just return the origin\n    if (ips == null && this.storage.full()) {\n      cb(null, origin)\n      return\n    }\n\n    const newOpts = {\n      affinity: this.affinity,\n      dualStack: this.dualStack,\n      lookup: this.lookup,\n      pick: this.pick,\n      ...opts.dns,\n      maxTTL: this.#maxTTL,\n      maxItems: this.#maxItems\n    }\n\n    // If no IPs we lookup\n    if (ips == null) {\n      this.lookup(origin, newOpts, (err, addresses) => {\n        if (err || addresses == null || addresses.length === 0) {\n          cb(err ?? new InformationalError('No DNS entries found'))\n          return\n        }\n\n        this.setRecords(origin, addresses)\n        const records = this.storage.get(origin.hostname)\n\n        const ip = this.pick(\n          origin,\n          records,\n          newOpts.affinity\n        )\n\n        let port\n        if (typeof ip.port === 'number') {\n          port = `:${ip.port}`\n        } else if (origin.port !== '') {\n          port = `:${origin.port}`\n        } else {\n          port = ''\n        }\n\n        cb(\n          null,\n          new URL(`${origin.protocol}//${\n            ip.family === 6 ? `[${ip.address}]` : ip.address\n          }${port}`)\n        )\n      })\n    } else {\n      // If there's IPs we pick\n      const ip = this.pick(\n        origin,\n        ips,\n        newOpts.affinity\n      )\n\n      // If no IPs we lookup - deleting old records\n      if (ip == null) {\n        this.storage.delete(origin.hostname)\n        this.runLookup(origin, opts, cb)\n        return\n      }\n\n      let port\n      if (typeof ip.port === 'number') {\n        port = `:${ip.port}`\n      } else if (origin.port !== '') {\n        port = `:${origin.port}`\n      } else {\n        port = ''\n      }\n\n      cb(\n        null,\n        new URL(`${origin.protocol}//${\n          ip.family === 6 ? `[${ip.address}]` : ip.address\n        }${port}`)\n      )\n    }\n  }\n\n  #defaultLookup (origin, opts, cb) {\n    lookup(\n      origin.hostname,\n      {\n        all: true,\n        family: this.dualStack === false ? this.affinity : 0,\n        order: 'ipv4first'\n      },\n      (err, addresses) => {\n        if (err) {\n          return cb(err)\n        }\n\n        const results = new Map()\n\n        for (const addr of addresses) {\n          // On linux we found duplicates, we attempt to remove them with\n          // the latest record\n          results.set(`${addr.address}:${addr.family}`, addr)\n        }\n\n        cb(null, results.values())\n      }\n    )\n  }\n\n  #defaultPick (origin, hostnameRecords, affinity) {\n    let ip = null\n    const { records, offset } = hostnameRecords\n\n    let family\n    if (this.dualStack) {\n      if (affinity == null) {\n        // Balance between ip families\n        if (offset == null || offset === maxInt) {\n          hostnameRecords.offset = 0\n          affinity = 4\n        } else {\n          hostnameRecords.offset++\n          affinity = (hostnameRecords.offset & 1) === 1 ? 6 : 4\n        }\n      }\n\n      if (records[affinity] != null && records[affinity].ips.length > 0) {\n        family = records[affinity]\n      } else {\n        family = records[affinity === 4 ? 6 : 4]\n      }\n    } else {\n      family = records[affinity]\n    }\n\n    // If no IPs we return null\n    if (family == null || family.ips.length === 0) {\n      return ip\n    }\n\n    if (family.offset == null || family.offset === maxInt) {\n      family.offset = 0\n    } else {\n      family.offset++\n    }\n\n    const position = family.offset % family.ips.length\n    ip = family.ips[position] ?? null\n\n    if (ip == null) {\n      return ip\n    }\n\n    if (Date.now() - ip.timestamp > ip.ttl) { // record TTL is already in ms\n      // We delete expired records\n      // It is possible that they have different TTL, so we manage them individually\n      family.ips.splice(position, 1)\n      return this.pick(origin, hostnameRecords, affinity)\n    }\n\n    return ip\n  }\n\n  pickFamily (origin, ipFamily) {\n    const records = this.storage.get(origin.hostname)?.records\n    if (!records) {\n      return null\n    }\n\n    const family = records[ipFamily]\n    if (!family) {\n      return null\n    }\n\n    if (family.offset == null || family.offset === maxInt) {\n      family.offset = 0\n    } else {\n      family.offset++\n    }\n\n    const position = family.offset % family.ips.length\n    const ip = family.ips[position] ?? null\n    if (ip == null) {\n      return ip\n    }\n\n    if (Date.now() - ip.timestamp > ip.ttl) { // record TTL is already in ms\n      // We delete expired records\n      // It is possible that they have different TTL, so we manage them individually\n      family.ips.splice(position, 1)\n    }\n\n    return ip\n  }\n\n  setRecords (origin, addresses) {\n    const timestamp = Date.now()\n    const records = { records: { 4: null, 6: null } }\n    let minTTL = this.#maxTTL\n    for (const record of addresses) {\n      record.timestamp = timestamp\n      if (typeof record.ttl === 'number') {\n        // The record TTL is expected to be in ms\n        record.ttl = Math.min(record.ttl, this.#maxTTL)\n        minTTL = Math.min(minTTL, record.ttl)\n      } else {\n        record.ttl = this.#maxTTL\n      }\n\n      const familyRecords = records.records[record.family] ?? { ips: [] }\n\n      familyRecords.ips.push(record)\n      records.records[record.family] = familyRecords\n    }\n\n    // We provide a default TTL if external storage will be used without TTL per record-level support\n    this.storage.set(origin.hostname, records, { ttl: minTTL })\n  }\n\n  deleteRecords (origin) {\n    this.storage.delete(origin.hostname)\n  }\n\n  getHandler (meta, opts) {\n    return new DNSDispatchHandler(this, meta, opts)\n  }\n}\n\nclass DNSDispatchHandler extends DecoratorHandler {\n  #state = null\n  #opts = null\n  #dispatch = null\n  #origin = null\n  #controller = null\n  #newOrigin = null\n  #firstTry = true\n\n  constructor (state, { origin, handler, dispatch, newOrigin }, opts) {\n    super(handler)\n    this.#origin = origin\n    this.#newOrigin = newOrigin\n    this.#opts = { ...opts }\n    this.#state = state\n    this.#dispatch = dispatch\n  }\n\n  onResponseError (controller, err) {\n    switch (err.code) {\n      case 'ETIMEDOUT':\n      case 'ECONNREFUSED': {\n        if (this.#state.dualStack) {\n          if (!this.#firstTry) {\n            super.onResponseError(controller, err)\n            return\n          }\n          this.#firstTry = false\n\n          // Pick an ip address from the other family\n          const otherFamily = this.#newOrigin.hostname[0] === '[' ? 4 : 6\n          const ip = this.#state.pickFamily(this.#origin, otherFamily)\n          if (ip == null) {\n            super.onResponseError(controller, err)\n            return\n          }\n\n          let port\n          if (typeof ip.port === 'number') {\n            port = `:${ip.port}`\n          } else if (this.#origin.port !== '') {\n            port = `:${this.#origin.port}`\n          } else {\n            port = ''\n          }\n\n          const dispatchOpts = {\n            ...this.#opts,\n            origin: `${this.#origin.protocol}//${\n              ip.family === 6 ? `[${ip.address}]` : ip.address\n            }${port}`,\n            headers: withHostHeader(this.#origin.host, this.#opts.headers)\n          }\n          this.#dispatch(dispatchOpts, this)\n          return\n        }\n\n        // if dual-stack disabled, we error out\n        super.onResponseError(controller, err)\n        break\n      }\n      case 'ENOTFOUND':\n        this.#state.deleteRecords(this.#origin)\n        super.onResponseError(controller, err)\n        break\n      default:\n        super.onResponseError(controller, err)\n        break\n    }\n  }\n}\n\nmodule.exports = interceptorOpts => {\n  if (\n    interceptorOpts?.maxTTL != null &&\n    (typeof interceptorOpts?.maxTTL !== 'number' || interceptorOpts?.maxTTL < 0)\n  ) {\n    throw new InvalidArgumentError('Invalid maxTTL. Must be a positive number')\n  }\n\n  if (\n    interceptorOpts?.maxItems != null &&\n    (typeof interceptorOpts?.maxItems !== 'number' ||\n      interceptorOpts?.maxItems < 1)\n  ) {\n    throw new InvalidArgumentError(\n      'Invalid maxItems. Must be a positive number and greater than zero'\n    )\n  }\n\n  if (\n    interceptorOpts?.affinity != null &&\n    interceptorOpts?.affinity !== 4 &&\n    interceptorOpts?.affinity !== 6\n  ) {\n    throw new InvalidArgumentError('Invalid affinity. Must be either 4 or 6')\n  }\n\n  if (\n    interceptorOpts?.dualStack != null &&\n    typeof interceptorOpts?.dualStack !== 'boolean'\n  ) {\n    throw new InvalidArgumentError('Invalid dualStack. Must be a boolean')\n  }\n\n  if (\n    interceptorOpts?.lookup != null &&\n    typeof interceptorOpts?.lookup !== 'function'\n  ) {\n    throw new InvalidArgumentError('Invalid lookup. Must be a function')\n  }\n\n  if (\n    interceptorOpts?.pick != null &&\n    typeof interceptorOpts?.pick !== 'function'\n  ) {\n    throw new InvalidArgumentError('Invalid pick. Must be a function')\n  }\n\n  if (\n    interceptorOpts?.storage != null &&\n    (typeof interceptorOpts?.storage?.get !== 'function' ||\n      typeof interceptorOpts?.storage?.set !== 'function' ||\n      typeof interceptorOpts?.storage?.full !== 'function' ||\n      typeof interceptorOpts?.storage?.delete !== 'function'\n    )\n  ) {\n    throw new InvalidArgumentError('Invalid storage. Must be a object with methods: { get, set, full, delete }')\n  }\n\n  const dualStack = interceptorOpts?.dualStack ?? true\n  let affinity\n  if (dualStack) {\n    affinity = interceptorOpts?.affinity ?? null\n  } else {\n    affinity = interceptorOpts?.affinity ?? 4\n  }\n\n  const opts = {\n    maxTTL: interceptorOpts?.maxTTL ?? 10e3, // Expressed in ms\n    lookup: interceptorOpts?.lookup ?? null,\n    pick: interceptorOpts?.pick ?? null,\n    dualStack,\n    affinity,\n    maxItems: interceptorOpts?.maxItems ?? Infinity,\n    storage: interceptorOpts?.storage\n  }\n\n  const instance = new DNSInstance(opts)\n\n  return dispatch => {\n    return function dnsInterceptor (origDispatchOpts, handler) {\n      const origin =\n        origDispatchOpts.origin.constructor === URL\n          ? origDispatchOpts.origin\n          : new URL(origDispatchOpts.origin)\n\n      if (isIP(origin.hostname) !== 0) {\n        return dispatch(origDispatchOpts, handler)\n      }\n\n      instance.runLookup(origin, origDispatchOpts, (err, newOrigin) => {\n        if (err) {\n          return handler.onResponseError(null, err)\n        }\n\n        const dispatchOpts = {\n          ...origDispatchOpts,\n          servername: origin.hostname, // For SNI on TLS\n          origin: newOrigin.origin,\n          headers: withHostHeader(origin.host, origDispatchOpts.headers)\n        }\n\n        dispatch(\n          dispatchOpts,\n          instance.getHandler(\n            { origin, dispatch, handler, newOrigin },\n            origDispatchOpts\n          )\n        )\n      })\n\n      return true\n    }\n  }\n}\n", "'use strict'\n\nconst {\n  safeHTTPMethods,\n  pathHasQueryOrFragment,\n  hasSafeIterator\n} = require('../core/util')\n\nconst { serializePathWithQuery } = require('../core/util')\n\n/**\n * @param {import('../../types/dispatcher.d.ts').default.DispatchOptions} opts\n */\nfunction makeCacheKey (opts) {\n  if (!opts.origin) {\n    throw new Error('opts.origin is undefined')\n  }\n\n  let fullPath = opts.path || '/'\n\n  if (opts.query && !pathHasQueryOrFragment(fullPath)) {\n    fullPath = serializePathWithQuery(fullPath, opts.query)\n  }\n\n  return {\n    origin: opts.origin.toString(),\n    method: opts.method,\n    path: fullPath,\n    headers: opts.headers\n  }\n}\n\n/**\n * @param {Record<string, string[] | string>}\n * @returns {Record<string, string[] | string>}\n */\nfunction normalizeHeaders (opts) {\n  let headers\n  if (opts.headers == null) {\n    headers = {}\n  } else if (typeof opts.headers === 'object') {\n    headers = {}\n\n    if (hasSafeIterator(opts.headers)) {\n      for (const x of opts.headers) {\n        if (!Array.isArray(x)) {\n          throw new Error('opts.headers is not a valid header map')\n        }\n        const [key, val] = x\n        if (typeof key !== 'string' || typeof val !== 'string') {\n          throw new Error('opts.headers is not a valid header map')\n        }\n        headers[key.toLowerCase()] = val\n      }\n    } else {\n      for (const key of Object.keys(opts.headers)) {\n        headers[key.toLowerCase()] = opts.headers[key]\n      }\n    }\n  } else {\n    throw new Error('opts.headers is not an object')\n  }\n\n  return headers\n}\n\n/**\n * @param {any} key\n */\nfunction assertCacheKey (key) {\n  if (typeof key !== 'object') {\n    throw new TypeError(`expected key to be object, got ${typeof key}`)\n  }\n\n  for (const property of ['origin', 'method', 'path']) {\n    if (typeof key[property] !== 'string') {\n      throw new TypeError(`expected key.${property} to be string, got ${typeof key[property]}`)\n    }\n  }\n\n  if (key.headers !== undefined && typeof key.headers !== 'object') {\n    throw new TypeError(`expected headers to be object, got ${typeof key}`)\n  }\n}\n\n/**\n * @param {any} value\n */\nfunction assertCacheValue (value) {\n  if (typeof value !== 'object') {\n    throw new TypeError(`expected value to be object, got ${typeof value}`)\n  }\n\n  for (const property of ['statusCode', 'cachedAt', 'staleAt', 'deleteAt']) {\n    if (typeof value[property] !== 'number') {\n      throw new TypeError(`expected value.${property} to be number, got ${typeof value[property]}`)\n    }\n  }\n\n  if (typeof value.statusMessage !== 'string') {\n    throw new TypeError(`expected value.statusMessage to be string, got ${typeof value.statusMessage}`)\n  }\n\n  if (value.headers != null && typeof value.headers !== 'object') {\n    throw new TypeError(`expected value.rawHeaders to be object, got ${typeof value.headers}`)\n  }\n\n  if (value.vary !== undefined && typeof value.vary !== 'object') {\n    throw new TypeError(`expected value.vary to be object, got ${typeof value.vary}`)\n  }\n\n  if (value.etag !== undefined && typeof value.etag !== 'string') {\n    throw new TypeError(`expected value.etag to be string, got ${typeof value.etag}`)\n  }\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-cache-control\n * @see https://www.iana.org/assignments/http-cache-directives/http-cache-directives.xhtml\n\n * @param {string | string[]} header\n * @returns {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives}\n */\nfunction parseCacheControlHeader (header) {\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives}\n   */\n  const output = {}\n\n  let directives\n  if (Array.isArray(header)) {\n    directives = []\n\n    for (const directive of header) {\n      directives.push(...directive.split(','))\n    }\n  } else {\n    directives = header.split(',')\n  }\n\n  for (let i = 0; i < directives.length; i++) {\n    const directive = directives[i].toLowerCase()\n    const keyValueDelimiter = directive.indexOf('=')\n\n    let key\n    let value\n    if (keyValueDelimiter !== -1) {\n      key = directive.substring(0, keyValueDelimiter).trimStart()\n      value = directive.substring(keyValueDelimiter + 1)\n    } else {\n      key = directive.trim()\n    }\n\n    switch (key) {\n      case 'min-fresh':\n      case 'max-stale':\n      case 'max-age':\n      case 's-maxage':\n      case 'stale-while-revalidate':\n      case 'stale-if-error': {\n        if (value === undefined || value[0] === ' ') {\n          continue\n        }\n\n        if (\n          value.length >= 2 &&\n          value[0] === '\"' &&\n          value[value.length - 1] === '\"'\n        ) {\n          value = value.substring(1, value.length - 1)\n        }\n\n        const parsedValue = parseInt(value, 10)\n        // eslint-disable-next-line no-self-compare\n        if (parsedValue !== parsedValue) {\n          continue\n        }\n\n        if (key === 'max-age' && key in output && output[key] >= parsedValue) {\n          continue\n        }\n\n        output[key] = parsedValue\n\n        break\n      }\n      case 'private':\n      case 'no-cache': {\n        if (value) {\n          // The private and no-cache directives can be unqualified (aka just\n          //  `private` or `no-cache`) or qualified (w/ a value). When they're\n          //  qualified, it's a list of headers like `no-cache=header1`,\n          //  `no-cache=\"header1\"`, or `no-cache=\"header1, header2\"`\n          // If we're given multiple headers, the comma messes us up since\n          //  we split the full header by commas. So, let's loop through the\n          //  remaining parts in front of us until we find one that ends in a\n          //  quote. We can then just splice all of the parts in between the\n          //  starting quote and the ending quote out of the directives array\n          //  and continue parsing like normal.\n          // https://www.rfc-editor.org/rfc/rfc9111.html#name-no-cache-2\n          if (value[0] === '\"') {\n            // Something like `no-cache=\"some-header\"` OR `no-cache=\"some-header, another-header\"`.\n\n            // Add the first header on and cut off the leading quote\n            const headers = [value.substring(1)]\n\n            let foundEndingQuote = value[value.length - 1] === '\"'\n            if (!foundEndingQuote) {\n              // Something like `no-cache=\"some-header, another-header\"`\n              //  This can still be something invalid, e.g. `no-cache=\"some-header, ...`\n              for (let j = i + 1; j < directives.length; j++) {\n                const nextPart = directives[j]\n                const nextPartLength = nextPart.length\n\n                headers.push(nextPart.trim())\n\n                if (nextPartLength !== 0 && nextPart[nextPartLength - 1] === '\"') {\n                  foundEndingQuote = true\n                  break\n                }\n              }\n            }\n\n            if (foundEndingQuote) {\n              let lastHeader = headers[headers.length - 1]\n              if (lastHeader[lastHeader.length - 1] === '\"') {\n                lastHeader = lastHeader.substring(0, lastHeader.length - 1)\n                headers[headers.length - 1] = lastHeader\n              }\n\n              if (key in output) {\n                output[key] = output[key].concat(headers)\n              } else {\n                output[key] = headers\n              }\n            }\n          } else {\n            // Something like `no-cache=\"some-header\"`\n            if (key in output) {\n              output[key] = output[key].concat(value)\n            } else {\n              output[key] = [value]\n            }\n          }\n\n          break\n        }\n      }\n      // eslint-disable-next-line no-fallthrough\n      case 'public':\n      case 'no-store':\n      case 'must-revalidate':\n      case 'proxy-revalidate':\n      case 'immutable':\n      case 'no-transform':\n      case 'must-understand':\n      case 'only-if-cached':\n        if (value) {\n          // These are qualified (something like `public=...`) when they aren't\n          //  allowed to be, skip\n          continue\n        }\n\n        output[key] = true\n        break\n      default:\n        // Ignore unknown directives as per https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.3-1\n        continue\n    }\n  }\n\n  return output\n}\n\n/**\n * @param {string | string[]} varyHeader Vary header from the server\n * @param {Record<string, string | string[]>} headers Request headers\n * @returns {Record<string, string | string[]>}\n */\nfunction parseVaryHeader (varyHeader, headers) {\n  if (typeof varyHeader === 'string' && varyHeader.includes('*')) {\n    return headers\n  }\n\n  const output = /** @type {Record<string, string | string[] | null>} */ ({})\n\n  const varyingHeaders = typeof varyHeader === 'string'\n    ? varyHeader.split(',')\n    : varyHeader\n\n  for (const header of varyingHeaders) {\n    const trimmedHeader = header.trim().toLowerCase()\n\n    output[trimmedHeader] = headers[trimmedHeader] ?? null\n  }\n\n  return output\n}\n\n/**\n * Note: this deviates from the spec a little. Empty etags (\"\", W/\"\") are valid,\n *  however, including them in cached resposnes serves little to no purpose.\n *\n * @see https://www.rfc-editor.org/rfc/rfc9110.html#name-etag\n *\n * @param {string} etag\n * @returns {boolean}\n */\nfunction isEtagUsable (etag) {\n  if (etag.length <= 2) {\n    // Shortest an etag can be is two chars (just \"\"). This is where we deviate\n    //  from the spec requiring a min of 3 chars however\n    return false\n  }\n\n  if (etag[0] === '\"' && etag[etag.length - 1] === '\"') {\n    // ETag: \"\"asd123\"\" or ETag: \"W/\"asd123\"\", kinda undefined behavior in the\n    //  spec. Some servers will accept these while others don't.\n    // ETag: \"asd123\"\n    return !(etag[1] === '\"' || etag.startsWith('\"W/'))\n  }\n\n  if (etag.startsWith('W/\"') && etag[etag.length - 1] === '\"') {\n    // ETag: W/\"\", also where we deviate from the spec & require a min of 3\n    //  chars\n    // ETag: for W/\"\", W/\"asd123\"\n    return etag.length !== 4\n  }\n\n  // Anything else\n  return false\n}\n\n/**\n * @param {unknown} store\n * @returns {asserts store is import('../../types/cache-interceptor.d.ts').default.CacheStore}\n */\nfunction assertCacheStore (store, name = 'CacheStore') {\n  if (typeof store !== 'object' || store === null) {\n    throw new TypeError(`expected type of ${name} to be a CacheStore, got ${store === null ? 'null' : typeof store}`)\n  }\n\n  for (const fn of ['get', 'createWriteStream', 'delete']) {\n    if (typeof store[fn] !== 'function') {\n      throw new TypeError(`${name} needs to have a \\`${fn}()\\` function`)\n    }\n  }\n}\n/**\n * @param {unknown} methods\n * @returns {asserts methods is import('../../types/cache-interceptor.d.ts').default.CacheMethods[]}\n */\nfunction assertCacheMethods (methods, name = 'CacheMethods') {\n  if (!Array.isArray(methods)) {\n    throw new TypeError(`expected type of ${name} needs to be an array, got ${methods === null ? 'null' : typeof methods}`)\n  }\n\n  if (methods.length === 0) {\n    throw new TypeError(`${name} needs to have at least one method`)\n  }\n\n  for (const method of methods) {\n    if (!safeHTTPMethods.includes(method)) {\n      throw new TypeError(`element of ${name}-array needs to be one of following values: ${safeHTTPMethods.join(', ')}, got ${method}`)\n    }\n  }\n}\n\n/**\n * Creates a string key for request deduplication purposes.\n * This key is used to identify in-flight requests that can be shared.\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n * @param {Set<string>} [excludeHeaders] Set of lowercase header names to exclude from the key\n * @returns {string}\n */\nfunction makeDeduplicationKey (cacheKey, excludeHeaders) {\n  // Use JSON.stringify to produce a collision-resistant key.\n  // Previous format used `:` and `=` delimiters without escaping, which\n  // allowed different header sets to produce identical keys (e.g.\n  // {a:\"x:b=y\"} vs {a:\"x\", b:\"y\"}). See: https://github.com/nodejs/undici/issues/5012\n  const headers = {}\n\n  if (cacheKey.headers) {\n    const sortedHeaders = Object.keys(cacheKey.headers).sort()\n    for (const header of sortedHeaders) {\n      // Skip excluded headers\n      if (excludeHeaders?.has(header.toLowerCase())) {\n        continue\n      }\n      headers[header] = cacheKey.headers[header]\n    }\n  }\n\n  return JSON.stringify([cacheKey.origin, cacheKey.method, cacheKey.path, headers])\n}\n\nmodule.exports = {\n  makeCacheKey,\n  normalizeHeaders,\n  assertCacheKey,\n  assertCacheValue,\n  parseCacheControlHeader,\n  parseVaryHeader,\n  isEtagUsable,\n  assertCacheMethods,\n  assertCacheStore,\n  makeDeduplicationKey\n}\n", "'use strict'\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc9110.html#name-date-time-formats\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseHttpDate (date) {\n  // Sun, 06 Nov 1994 08:49:37 GMT    ; IMF-fixdate\n  // Sun Nov  6 08:49:37 1994         ; ANSI C's asctime() format\n  // Sunday, 06-Nov-94 08:49:37 GMT   ; obsolete RFC 850 format\n\n  switch (date[3]) {\n    case ',': return parseImfDate(date)\n    case ' ': return parseAscTimeDate(date)\n    default: return parseRfc850Date(date)\n  }\n}\n\n/**\n * @see https://httpwg.org/specs/rfc9110.html#preferred.date.format\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseImfDate (date) {\n  if (\n    date.length !== 29 ||\n    date[4] !== ' ' ||\n    date[7] !== ' ' ||\n    date[11] !== ' ' ||\n    date[16] !== ' ' ||\n    date[19] !== ':' ||\n    date[22] !== ':' ||\n    date[25] !== ' ' ||\n    date[26] !== 'G' ||\n    date[27] !== 'M' ||\n    date[28] !== 'T'\n  ) {\n    return undefined\n  }\n\n  let weekday = -1\n  if (date[0] === 'S' && date[1] === 'u' && date[2] === 'n') { // Sunday\n    weekday = 0\n  } else if (date[0] === 'M' && date[1] === 'o' && date[2] === 'n') { // Monday\n    weekday = 1\n  } else if (date[0] === 'T' && date[1] === 'u' && date[2] === 'e') { // Tuesday\n    weekday = 2\n  } else if (date[0] === 'W' && date[1] === 'e' && date[2] === 'd') { // Wednesday\n    weekday = 3\n  } else if (date[0] === 'T' && date[1] === 'h' && date[2] === 'u') { // Thursday\n    weekday = 4\n  } else if (date[0] === 'F' && date[1] === 'r' && date[2] === 'i') { // Friday\n    weekday = 5\n  } else if (date[0] === 'S' && date[1] === 'a' && date[2] === 't') { // Saturday\n    weekday = 6\n  } else {\n    return undefined // Not a valid day of the week\n  }\n\n  let day = 0\n  if (date[5] === '0') {\n    // Single digit day, e.g. \"Sun Nov 6 08:49:37 1994\"\n    const code = date.charCodeAt(6)\n    if (code < 49 || code > 57) {\n      return undefined // Not a digit\n    }\n    day = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(5)\n    if (code1 < 49 || code1 > 51) {\n      return undefined // Not a digit between 1 and 3\n    }\n    const code2 = date.charCodeAt(6)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    day = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let monthIdx = -1\n  if (\n    (date[8] === 'J' && date[9] === 'a' && date[10] === 'n')\n  ) {\n    monthIdx = 0 // Jan\n  } else if (\n    (date[8] === 'F' && date[9] === 'e' && date[10] === 'b')\n  ) {\n    monthIdx = 1 // Feb\n  } else if (\n    (date[8] === 'M' && date[9] === 'a')\n  ) {\n    if (date[10] === 'r') {\n      monthIdx = 2 // Mar\n    } else if (date[10] === 'y') {\n      monthIdx = 4 // May\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[8] === 'J')\n  ) {\n    if (date[9] === 'a' && date[10] === 'n') {\n      monthIdx = 0 // Jan\n    } else if (date[9] === 'u') {\n      if (date[10] === 'n') {\n        monthIdx = 5 // Jun\n      } else if (date[10] === 'l') {\n        monthIdx = 6 // Jul\n      } else {\n        return undefined // Invalid month\n      }\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[8] === 'A')\n  ) {\n    if (date[9] === 'p' && date[10] === 'r') {\n      monthIdx = 3 // Apr\n    } else if (date[9] === 'u' && date[10] === 'g') {\n      monthIdx = 7 // Aug\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[8] === 'S' && date[9] === 'e' && date[10] === 'p')\n  ) {\n    monthIdx = 8 // Sep\n  } else if (\n    (date[8] === 'O' && date[9] === 'c' && date[10] === 't')\n  ) {\n    monthIdx = 9 // Oct\n  } else if (\n    (date[8] === 'N' && date[9] === 'o' && date[10] === 'v')\n  ) {\n    monthIdx = 10 // Nov\n  } else if (\n    (date[8] === 'D' && date[9] === 'e' && date[10] === 'c')\n  ) {\n    monthIdx = 11 // Dec\n  } else {\n    // Not a valid month\n    return undefined\n  }\n\n  const yearDigit1 = date.charCodeAt(12)\n  if (yearDigit1 < 48 || yearDigit1 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit2 = date.charCodeAt(13)\n  if (yearDigit2 < 48 || yearDigit2 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit3 = date.charCodeAt(14)\n  if (yearDigit3 < 48 || yearDigit3 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit4 = date.charCodeAt(15)\n  if (yearDigit4 < 48 || yearDigit4 > 57) {\n    return undefined // Not a digit\n  }\n  const year = (yearDigit1 - 48) * 1000 + (yearDigit2 - 48) * 100 + (yearDigit3 - 48) * 10 + (yearDigit4 - 48)\n\n  let hour = 0\n  if (date[17] === '0') {\n    const code = date.charCodeAt(18)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    hour = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(17)\n    if (code1 < 48 || code1 > 50) {\n      return undefined // Not a digit between 0 and 2\n    }\n    const code2 = date.charCodeAt(18)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    if (code1 === 50 && code2 > 51) {\n      return undefined // Hour cannot be greater than 23\n    }\n    hour = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let minute = 0\n  if (date[20] === '0') {\n    const code = date.charCodeAt(21)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    minute = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(20)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(21)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    minute = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let second = 0\n  if (date[23] === '0') {\n    const code = date.charCodeAt(24)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    second = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(23)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(24)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    second = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n  return result.getUTCDay() === weekday ? result : undefined\n}\n\n/**\n * @see https://httpwg.org/specs/rfc9110.html#obsolete.date.formats\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseAscTimeDate (date) {\n  // This is assumed to be in UTC\n\n  if (\n    date.length !== 24 ||\n    date[7] !== ' ' ||\n    date[10] !== ' ' ||\n    date[19] !== ' '\n  ) {\n    return undefined\n  }\n\n  let weekday = -1\n  if (date[0] === 'S' && date[1] === 'u' && date[2] === 'n') { // Sunday\n    weekday = 0\n  } else if (date[0] === 'M' && date[1] === 'o' && date[2] === 'n') { // Monday\n    weekday = 1\n  } else if (date[0] === 'T' && date[1] === 'u' && date[2] === 'e') { // Tuesday\n    weekday = 2\n  } else if (date[0] === 'W' && date[1] === 'e' && date[2] === 'd') { // Wednesday\n    weekday = 3\n  } else if (date[0] === 'T' && date[1] === 'h' && date[2] === 'u') { // Thursday\n    weekday = 4\n  } else if (date[0] === 'F' && date[1] === 'r' && date[2] === 'i') { // Friday\n    weekday = 5\n  } else if (date[0] === 'S' && date[1] === 'a' && date[2] === 't') { // Saturday\n    weekday = 6\n  } else {\n    return undefined // Not a valid day of the week\n  }\n\n  let monthIdx = -1\n  if (\n    (date[4] === 'J' && date[5] === 'a' && date[6] === 'n')\n  ) {\n    monthIdx = 0 // Jan\n  } else if (\n    (date[4] === 'F' && date[5] === 'e' && date[6] === 'b')\n  ) {\n    monthIdx = 1 // Feb\n  } else if (\n    (date[4] === 'M' && date[5] === 'a')\n  ) {\n    if (date[6] === 'r') {\n      monthIdx = 2 // Mar\n    } else if (date[6] === 'y') {\n      monthIdx = 4 // May\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[4] === 'J')\n  ) {\n    if (date[5] === 'a' && date[6] === 'n') {\n      monthIdx = 0 // Jan\n    } else if (date[5] === 'u') {\n      if (date[6] === 'n') {\n        monthIdx = 5 // Jun\n      } else if (date[6] === 'l') {\n        monthIdx = 6 // Jul\n      } else {\n        return undefined // Invalid month\n      }\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[4] === 'A')\n  ) {\n    if (date[5] === 'p' && date[6] === 'r') {\n      monthIdx = 3 // Apr\n    } else if (date[5] === 'u' && date[6] === 'g') {\n      monthIdx = 7 // Aug\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[4] === 'S' && date[5] === 'e' && date[6] === 'p')\n  ) {\n    monthIdx = 8 // Sep\n  } else if (\n    (date[4] === 'O' && date[5] === 'c' && date[6] === 't')\n  ) {\n    monthIdx = 9 // Oct\n  } else if (\n    (date[4] === 'N' && date[5] === 'o' && date[6] === 'v')\n  ) {\n    monthIdx = 10 // Nov\n  } else if (\n    (date[4] === 'D' && date[5] === 'e' && date[6] === 'c')\n  ) {\n    monthIdx = 11 // Dec\n  } else {\n    // Not a valid month\n    return undefined\n  }\n\n  let day = 0\n  if (date[8] === ' ') {\n    // Single digit day, e.g. \"Sun Nov 6 08:49:37 1994\"\n    const code = date.charCodeAt(9)\n    if (code < 49 || code > 57) {\n      return undefined // Not a digit\n    }\n    day = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(8)\n    if (code1 < 49 || code1 > 51) {\n      return undefined // Not a digit between 1 and 3\n    }\n    const code2 = date.charCodeAt(9)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    day = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let hour = 0\n  if (date[11] === '0') {\n    const code = date.charCodeAt(12)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    hour = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(11)\n    if (code1 < 48 || code1 > 50) {\n      return undefined // Not a digit between 0 and 2\n    }\n    const code2 = date.charCodeAt(12)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    if (code1 === 50 && code2 > 51) {\n      return undefined // Hour cannot be greater than 23\n    }\n    hour = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let minute = 0\n  if (date[14] === '0') {\n    const code = date.charCodeAt(15)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    minute = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(14)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(15)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    minute = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let second = 0\n  if (date[17] === '0') {\n    const code = date.charCodeAt(18)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    second = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(17)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(18)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    second = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  const yearDigit1 = date.charCodeAt(20)\n  if (yearDigit1 < 48 || yearDigit1 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit2 = date.charCodeAt(21)\n  if (yearDigit2 < 48 || yearDigit2 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit3 = date.charCodeAt(22)\n  if (yearDigit3 < 48 || yearDigit3 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit4 = date.charCodeAt(23)\n  if (yearDigit4 < 48 || yearDigit4 > 57) {\n    return undefined // Not a digit\n  }\n  const year = (yearDigit1 - 48) * 1000 + (yearDigit2 - 48) * 100 + (yearDigit3 - 48) * 10 + (yearDigit4 - 48)\n\n  const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n  return result.getUTCDay() === weekday ? result : undefined\n}\n\n/**\n * @see https://httpwg.org/specs/rfc9110.html#obsolete.date.formats\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseRfc850Date (date) {\n  let commaIndex = -1\n\n  let weekday = -1\n  if (date[0] === 'S') {\n    if (date[1] === 'u' && date[2] === 'n' && date[3] === 'd' && date[4] === 'a' && date[5] === 'y') {\n      weekday = 0 // Sunday\n      commaIndex = 6\n    } else if (date[1] === 'a' && date[2] === 't' && date[3] === 'u' && date[4] === 'r' && date[5] === 'd' && date[6] === 'a' && date[7] === 'y') {\n      weekday = 6 // Saturday\n      commaIndex = 8\n    }\n  } else if (date[0] === 'M' && date[1] === 'o' && date[2] === 'n' && date[3] === 'd' && date[4] === 'a' && date[5] === 'y') {\n    weekday = 1 // Monday\n    commaIndex = 6\n  } else if (date[0] === 'T') {\n    if (date[1] === 'u' && date[2] === 'e' && date[3] === 's' && date[4] === 'd' && date[5] === 'a' && date[6] === 'y') {\n      weekday = 2 // Tuesday\n      commaIndex = 7\n    } else if (date[1] === 'h' && date[2] === 'u' && date[3] === 'r' && date[4] === 's' && date[5] === 'd' && date[6] === 'a' && date[7] === 'y') {\n      weekday = 4 // Thursday\n      commaIndex = 8\n    }\n  } else if (date[0] === 'W' && date[1] === 'e' && date[2] === 'd' && date[3] === 'n' && date[4] === 'e' && date[5] === 's' && date[6] === 'd' && date[7] === 'a' && date[8] === 'y') {\n    weekday = 3 // Wednesday\n    commaIndex = 9\n  } else if (date[0] === 'F' && date[1] === 'r' && date[2] === 'i' && date[3] === 'd' && date[4] === 'a' && date[5] === 'y') {\n    weekday = 5 // Friday\n    commaIndex = 6\n  } else {\n    // Not a valid day name\n    return undefined\n  }\n\n  if (\n    date[commaIndex] !== ',' ||\n    (date.length - commaIndex - 1) !== 23 ||\n    date[commaIndex + 1] !== ' ' ||\n    date[commaIndex + 4] !== '-' ||\n    date[commaIndex + 8] !== '-' ||\n    date[commaIndex + 11] !== ' ' ||\n    date[commaIndex + 14] !== ':' ||\n    date[commaIndex + 17] !== ':' ||\n    date[commaIndex + 20] !== ' ' ||\n    date[commaIndex + 21] !== 'G' ||\n    date[commaIndex + 22] !== 'M' ||\n    date[commaIndex + 23] !== 'T'\n  ) {\n    return undefined\n  }\n\n  let day = 0\n  if (date[commaIndex + 2] === '0') {\n    // Single digit day, e.g. \"Sun Nov 6 08:49:37 1994\"\n    const code = date.charCodeAt(commaIndex + 3)\n    if (code < 49 || code > 57) {\n      return undefined // Not a digit\n    }\n    day = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 2)\n    if (code1 < 49 || code1 > 51) {\n      return undefined // Not a digit between 1 and 3\n    }\n    const code2 = date.charCodeAt(commaIndex + 3)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    day = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let monthIdx = -1\n  if (\n    (date[commaIndex + 5] === 'J' && date[commaIndex + 6] === 'a' && date[commaIndex + 7] === 'n')\n  ) {\n    monthIdx = 0 // Jan\n  } else if (\n    (date[commaIndex + 5] === 'F' && date[commaIndex + 6] === 'e' && date[commaIndex + 7] === 'b')\n  ) {\n    monthIdx = 1 // Feb\n  } else if (\n    (date[commaIndex + 5] === 'M' && date[commaIndex + 6] === 'a' && date[commaIndex + 7] === 'r')\n  ) {\n    monthIdx = 2 // Mar\n  } else if (\n    (date[commaIndex + 5] === 'A' && date[commaIndex + 6] === 'p' && date[commaIndex + 7] === 'r')\n  ) {\n    monthIdx = 3 // Apr\n  } else if (\n    (date[commaIndex + 5] === 'M' && date[commaIndex + 6] === 'a' && date[commaIndex + 7] === 'y')\n  ) {\n    monthIdx = 4 // May\n  } else if (\n    (date[commaIndex + 5] === 'J' && date[commaIndex + 6] === 'u' && date[commaIndex + 7] === 'n')\n  ) {\n    monthIdx = 5 // Jun\n  } else if (\n    (date[commaIndex + 5] === 'J' && date[commaIndex + 6] === 'u' && date[commaIndex + 7] === 'l')\n  ) {\n    monthIdx = 6 // Jul\n  } else if (\n    (date[commaIndex + 5] === 'A' && date[commaIndex + 6] === 'u' && date[commaIndex + 7] === 'g')\n  ) {\n    monthIdx = 7 // Aug\n  } else if (\n    (date[commaIndex + 5] === 'S' && date[commaIndex + 6] === 'e' && date[commaIndex + 7] === 'p')\n  ) {\n    monthIdx = 8 // Sep\n  } else if (\n    (date[commaIndex + 5] === 'O' && date[commaIndex + 6] === 'c' && date[commaIndex + 7] === 't')\n  ) {\n    monthIdx = 9 // Oct\n  } else if (\n    (date[commaIndex + 5] === 'N' && date[commaIndex + 6] === 'o' && date[commaIndex + 7] === 'v')\n  ) {\n    monthIdx = 10 // Nov\n  } else if (\n    (date[commaIndex + 5] === 'D' && date[commaIndex + 6] === 'e' && date[commaIndex + 7] === 'c')\n  ) {\n    monthIdx = 11 // Dec\n  } else {\n    // Not a valid month\n    return undefined\n  }\n\n  const yearDigit1 = date.charCodeAt(commaIndex + 9)\n  if (yearDigit1 < 48 || yearDigit1 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit2 = date.charCodeAt(commaIndex + 10)\n  if (yearDigit2 < 48 || yearDigit2 > 57) {\n    return undefined // Not a digit\n  }\n\n  let year = (yearDigit1 - 48) * 10 + (yearDigit2 - 48) // Convert ASCII codes to number\n\n  // RFC 6265 states that the year is in the range 1970-2069.\n  // @see https://datatracker.ietf.org/doc/html/rfc6265#section-5.1.1\n  //\n  // 3. If the year-value is greater than or equal to 70 and less than or\n  //    equal to 99, increment the year-value by 1900.\n  // 4. If the year-value is greater than or equal to 0 and less than or\n  //    equal to 69, increment the year-value by 2000.\n  year += year < 70 ? 2000 : 1900\n\n  let hour = 0\n  if (date[commaIndex + 12] === '0') {\n    const code = date.charCodeAt(commaIndex + 13)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    hour = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 12)\n    if (code1 < 48 || code1 > 50) {\n      return undefined // Not a digit between 0 and 2\n    }\n    const code2 = date.charCodeAt(commaIndex + 13)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    if (code1 === 50 && code2 > 51) {\n      return undefined // Hour cannot be greater than 23\n    }\n    hour = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let minute = 0\n  if (date[commaIndex + 15] === '0') {\n    const code = date.charCodeAt(commaIndex + 16)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    minute = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 15)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(commaIndex + 16)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    minute = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let second = 0\n  if (date[commaIndex + 18] === '0') {\n    const code = date.charCodeAt(commaIndex + 19)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    second = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 18)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(commaIndex + 19)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    second = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n  return result.getUTCDay() === weekday ? result : undefined\n}\n\nmodule.exports = {\n  parseHttpDate\n}\n", "'use strict'\n\nconst util = require('../core/util')\nconst {\n  parseCacheControlHeader,\n  parseVaryHeader,\n  isEtagUsable\n} = require('../util/cache')\nconst { parseHttpDate } = require('../util/date.js')\n\nfunction noop () {}\n\n// Status codes that we can use some heuristics on to cache\nconst HEURISTICALLY_CACHEABLE_STATUS_CODES = [\n  200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414, 501\n]\n\n// Status codes which semantic is not handled by the cache\n// https://datatracker.ietf.org/doc/html/rfc9111#section-3\n// This list should not grow beyond 206 unless the RFC is updated\n// by a newer one including more. Please introduce another list if\n// implementing caching of responses with the 'must-understand' directive.\nconst NOT_UNDERSTOOD_STATUS_CODES = [\n  206\n]\n\nconst MAX_RESPONSE_AGE = 2147483647000\n\n/**\n * @typedef {import('../../types/dispatcher.d.ts').default.DispatchHandler} DispatchHandler\n *\n * @implements {DispatchHandler}\n */\nclass CacheHandler {\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheKey}\n   */\n  #cacheKey\n\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions['type']}\n   */\n  #cacheType\n\n  /**\n   * @type {number | undefined}\n   */\n  #cacheByDefault\n\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheStore}\n   */\n  #store\n\n  /**\n   * @type {import('../../types/dispatcher.d.ts').default.DispatchHandler}\n   */\n  #handler\n\n  /**\n   * @type {import('node:stream').Writable | undefined}\n   */\n  #writeStream\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} opts\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n   */\n  constructor ({ store, type, cacheByDefault }, cacheKey, handler) {\n    this.#store = store\n    this.#cacheType = type\n    this.#cacheByDefault = cacheByDefault\n    this.#cacheKey = cacheKey\n    this.#handler = handler\n  }\n\n  onRequestStart (controller, context) {\n    this.#writeStream?.destroy()\n    this.#writeStream = undefined\n    this.#handler.onRequestStart?.(controller, context)\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.#handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {number} statusCode\n   * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n   * @param {string} statusMessage\n   */\n  onResponseStart (\n    controller,\n    statusCode,\n    resHeaders,\n    statusMessage\n  ) {\n    const downstreamOnHeaders = () =>\n      this.#handler.onResponseStart?.(\n        controller,\n        statusCode,\n        resHeaders,\n        statusMessage\n      )\n    const handler = this\n\n    if (\n      !util.safeHTTPMethods.includes(this.#cacheKey.method) &&\n      statusCode >= 200 &&\n      statusCode <= 399\n    ) {\n      // Successful response to an unsafe method, delete it from cache\n      //  https://www.rfc-editor.org/rfc/rfc9111.html#name-invalidating-stored-response\n      try {\n        this.#store.delete(this.#cacheKey)?.catch?.(noop)\n      } catch {\n        // Fail silently\n      }\n      return downstreamOnHeaders()\n    }\n\n    const cacheControlHeader = resHeaders['cache-control']\n    const heuristicallyCacheable = resHeaders['last-modified'] && HEURISTICALLY_CACHEABLE_STATUS_CODES.includes(statusCode)\n    if (\n      !cacheControlHeader &&\n      !resHeaders['expires'] &&\n      !heuristicallyCacheable &&\n      !this.#cacheByDefault\n    ) {\n      // Don't have anything to tell us this response is cachable and we're not\n      //  caching by default\n      return downstreamOnHeaders()\n    }\n\n    const cacheControlDirectives = cacheControlHeader ? parseCacheControlHeader(cacheControlHeader) : {}\n    if (!canCacheResponse(this.#cacheType, statusCode, resHeaders, cacheControlDirectives, this.#cacheKey.headers)) {\n      return downstreamOnHeaders()\n    }\n\n    const now = Date.now()\n    const resAge = resHeaders.age ? getAge(resHeaders.age) : undefined\n    if (resAge && resAge >= MAX_RESPONSE_AGE) {\n      // Response considered stale\n      return downstreamOnHeaders()\n    }\n\n    const resDate = typeof resHeaders.date === 'string'\n      ? parseHttpDate(resHeaders.date)\n      : undefined\n\n    const staleAt =\n      determineStaleAt(this.#cacheType, now, resAge, resHeaders, resDate, cacheControlDirectives) ??\n      this.#cacheByDefault\n    if (staleAt === undefined || (resAge && resAge > staleAt)) {\n      return downstreamOnHeaders()\n    }\n\n    const baseTime = resDate ? resDate.getTime() : now\n    const absoluteStaleAt = staleAt + baseTime\n    if (now >= absoluteStaleAt) {\n      // Response is already stale\n      return downstreamOnHeaders()\n    }\n\n    let varyDirectives\n    if (this.#cacheKey.headers && resHeaders.vary) {\n      varyDirectives = parseVaryHeader(resHeaders.vary, this.#cacheKey.headers)\n      if (!varyDirectives) {\n        // Parse error\n        return downstreamOnHeaders()\n      }\n    }\n\n    const cachedAt = resAge ? now - resAge : now\n    const deleteAt = determineDeleteAt(baseTime, cachedAt, cacheControlDirectives, absoluteStaleAt)\n    const strippedHeaders = stripNecessaryHeaders(resHeaders, cacheControlDirectives)\n\n    /**\n     * @type {import('../../types/cache-interceptor.d.ts').default.CacheValue}\n     */\n    const value = {\n      statusCode,\n      statusMessage,\n      headers: strippedHeaders,\n      vary: varyDirectives,\n      cacheControlDirectives,\n      cachedAt,\n      staleAt: absoluteStaleAt,\n      deleteAt\n    }\n\n    // Not modified, re-use the cached value\n    // https://www.rfc-editor.org/rfc/rfc9111.html#name-handling-304-not-modified\n    if (statusCode === 304) {\n      const handle304 = (cachedValue) => {\n        if (!cachedValue) {\n          // Do not create a new cache entry, as a 304 won't have a body - so cannot be cached.\n          return downstreamOnHeaders()\n        }\n\n        // Re-use the cached value: statuscode, statusmessage, headers and body\n        value.statusCode = cachedValue.statusCode\n        value.statusMessage = cachedValue.statusMessage\n        value.etag = cachedValue.etag\n        value.headers = { ...cachedValue.headers, ...strippedHeaders }\n\n        downstreamOnHeaders()\n\n        this.#writeStream = this.#store.createWriteStream(this.#cacheKey, value)\n\n        if (!this.#writeStream || !cachedValue?.body) {\n          return\n        }\n\n        if (typeof cachedValue.body.values === 'function') {\n          const bodyIterator = cachedValue.body.values()\n\n          const streamCachedBody = () => {\n            for (const chunk of bodyIterator) {\n              const full = this.#writeStream.write(chunk) === false\n              this.#handler.onResponseData?.(controller, chunk)\n              // when stream is full stop writing until we get a 'drain' event\n              if (full) {\n                break\n              }\n            }\n          }\n\n          this.#writeStream\n            .on('error', function () {\n              handler.#writeStream = undefined\n              handler.#store.delete(handler.#cacheKey)\n            })\n            .on('drain', () => {\n              streamCachedBody()\n            })\n            .on('close', function () {\n              if (handler.#writeStream === this) {\n                handler.#writeStream = undefined\n              }\n            })\n\n          streamCachedBody()\n        } else if (typeof cachedValue.body.on === 'function') {\n          // Readable stream body (e.g. from async/remote cache stores)\n          cachedValue.body\n            .on('data', (chunk) => {\n              this.#writeStream.write(chunk)\n              this.#handler.onResponseData?.(controller, chunk)\n            })\n            .on('end', () => {\n              this.#writeStream.end()\n            })\n            .on('error', () => {\n              this.#writeStream = undefined\n              this.#store.delete(this.#cacheKey)\n            })\n\n          this.#writeStream\n            .on('error', function () {\n              handler.#writeStream = undefined\n              handler.#store.delete(handler.#cacheKey)\n            })\n            .on('close', function () {\n              if (handler.#writeStream === this) {\n                handler.#writeStream = undefined\n              }\n            })\n        }\n      }\n\n      /**\n       * @type {import('../../types/cache-interceptor.d.ts').default.CacheValue}\n       */\n      const result = this.#store.get(this.#cacheKey)\n      if (result && typeof result.then === 'function') {\n        result.then(handle304)\n      } else {\n        handle304(result)\n      }\n    } else {\n      if (typeof resHeaders.etag === 'string' && isEtagUsable(resHeaders.etag)) {\n        value.etag = resHeaders.etag\n      }\n\n      this.#writeStream = this.#store.createWriteStream(this.#cacheKey, value)\n\n      if (!this.#writeStream) {\n        return downstreamOnHeaders()\n      }\n\n      this.#writeStream\n        .on('drain', () => controller.resume())\n        .on('error', function () {\n          // TODO (fix): Make error somehow observable?\n          handler.#writeStream = undefined\n\n          // Delete the value in case the cache store is holding onto state from\n          //  the call to createWriteStream\n          handler.#store.delete(handler.#cacheKey)\n        })\n        .on('close', function () {\n          if (handler.#writeStream === this) {\n            handler.#writeStream = undefined\n          }\n\n          // TODO (fix): Should we resume even if was paused downstream?\n          controller.resume()\n        })\n\n      downstreamOnHeaders()\n    }\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.#writeStream?.write(chunk) === false) {\n      controller.pause()\n    }\n\n    this.#handler.onResponseData?.(controller, chunk)\n  }\n\n  onResponseEnd (controller, trailers) {\n    this.#writeStream?.end()\n    this.#handler.onResponseEnd?.(controller, trailers)\n  }\n\n  onResponseError (controller, err) {\n    this.#writeStream?.destroy(err)\n    this.#writeStream = undefined\n    this.#handler.onResponseError?.(controller, err)\n  }\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-storing-responses-to-authen\n *\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType\n * @param {number} statusCode\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} [reqHeaders]\n */\nfunction canCacheResponse (cacheType, statusCode, resHeaders, cacheControlDirectives, reqHeaders) {\n  // Status code must be final and understood.\n  if (statusCode < 200 || NOT_UNDERSTOOD_STATUS_CODES.includes(statusCode)) {\n    return false\n  }\n  // Responses with neither status codes that are heuristically cacheable, nor \"explicit enough\" caching\n  // directives, are not cacheable. \"Explicit enough\": see https://www.rfc-editor.org/rfc/rfc9111.html#section-3\n  if (!HEURISTICALLY_CACHEABLE_STATUS_CODES.includes(statusCode) && !resHeaders['expires'] &&\n    !cacheControlDirectives.public &&\n    cacheControlDirectives['max-age'] === undefined &&\n    // RFC 9111: a private response directive, if the cache is not shared\n    !(cacheControlDirectives.private && cacheType === 'private') &&\n    !(cacheControlDirectives['s-maxage'] !== undefined && cacheType === 'shared')\n  ) {\n    return false\n  }\n\n  if (cacheControlDirectives['no-store']) {\n    return false\n  }\n\n  if (cacheType === 'shared' && cacheControlDirectives.private === true) {\n    return false\n  }\n\n  // https://www.rfc-editor.org/rfc/rfc9111.html#section-4.1-5\n  if (resHeaders.vary?.includes('*')) {\n    return false\n  }\n\n  // https://www.rfc-editor.org/rfc/rfc9111.html#name-storing-responses-to-authen\n  if (reqHeaders?.authorization) {\n    if (\n      !cacheControlDirectives.public &&\n      !cacheControlDirectives['s-maxage'] &&\n      !cacheControlDirectives['must-revalidate']\n    ) {\n      return false\n    }\n\n    if (typeof reqHeaders.authorization !== 'string') {\n      return false\n    }\n\n    if (\n      Array.isArray(cacheControlDirectives['no-cache']) &&\n      cacheControlDirectives['no-cache'].includes('authorization')\n    ) {\n      return false\n    }\n\n    if (\n      Array.isArray(cacheControlDirectives['private']) &&\n      cacheControlDirectives['private'].includes('authorization')\n    ) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @param {string | string[]} ageHeader\n * @returns {number | undefined}\n */\nfunction getAge (ageHeader) {\n  const age = parseInt(Array.isArray(ageHeader) ? ageHeader[0] : ageHeader)\n\n  return isNaN(age) ? undefined : age * 1000\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType\n * @param {number} now\n * @param {number | undefined} age\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {Date | undefined} responseDate\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n *\n * @returns {number | undefined} time that the value is stale at in seconds or undefined if it shouldn't be cached\n */\nfunction determineStaleAt (cacheType, now, age, resHeaders, responseDate, cacheControlDirectives) {\n  if (cacheType === 'shared') {\n    // Prioritize s-maxage since we're a shared cache\n    //  s-maxage > max-age > Expire\n    //  https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.2.10-3\n    const sMaxAge = cacheControlDirectives['s-maxage']\n    if (sMaxAge !== undefined) {\n      return sMaxAge > 0 ? sMaxAge * 1000 : undefined\n    }\n  }\n\n  const maxAge = cacheControlDirectives['max-age']\n  if (maxAge !== undefined) {\n    return maxAge > 0 ? maxAge * 1000 : undefined\n  }\n\n  if (typeof resHeaders.expires === 'string') {\n    // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.3\n    const expiresDate = parseHttpDate(resHeaders.expires)\n    if (expiresDate) {\n      if (now >= expiresDate.getTime()) {\n        return undefined\n      }\n\n      if (responseDate) {\n        if (responseDate >= expiresDate) {\n          return undefined\n        }\n\n        if (age !== undefined && age > (expiresDate - responseDate)) {\n          return undefined\n        }\n      }\n\n      return expiresDate.getTime() - now\n    }\n  }\n\n  if (typeof resHeaders['last-modified'] === 'string') {\n    // https://www.rfc-editor.org/rfc/rfc9111.html#name-calculating-heuristic-fresh\n    const lastModified = new Date(resHeaders['last-modified'])\n    if (isValidDate(lastModified)) {\n      if (lastModified.getTime() >= now) {\n        return undefined\n      }\n\n      const responseAge = now - lastModified.getTime()\n\n      return responseAge * 0.1\n    }\n  }\n\n  if (cacheControlDirectives.immutable) {\n    // https://www.rfc-editor.org/rfc/rfc8246.html#section-2.2\n    return 31536000000\n  }\n\n  return undefined\n}\n\n/**\n * @param {number} baseTime\n * @param {number} cachedAt\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n * @param {number} staleAt\n */\nfunction determineDeleteAt (baseTime, cachedAt, cacheControlDirectives, staleAt) {\n  let staleWhileRevalidate = -Infinity\n  let staleIfError = -Infinity\n  let immutable = -Infinity\n\n  if (cacheControlDirectives['stale-while-revalidate']) {\n    staleWhileRevalidate = staleAt + (cacheControlDirectives['stale-while-revalidate'] * 1000)\n  }\n\n  if (cacheControlDirectives['stale-if-error']) {\n    staleIfError = staleAt + (cacheControlDirectives['stale-if-error'] * 1000)\n  }\n\n  if (cacheControlDirectives.immutable && staleWhileRevalidate === -Infinity && staleIfError === -Infinity) {\n    immutable = cachedAt + 31536000000\n  }\n\n  // When no stale directives or immutable flag, add a revalidation buffer\n  // equal to the freshness lifetime so the entry survives past staleAt long\n  // enough to be revalidated instead of silently disappearing.\n  //\n  // Response Date headers only have second precision, so baseTime can trail the\n  // actual cache insertion time by up to ~1s. Pad the buffer by that bounded\n  // skew so short-lived entries do not disappear exactly when they should be\n  // revalidated.\n  if (staleWhileRevalidate === -Infinity && staleIfError === -Infinity && immutable === -Infinity) {\n    const freshnessLifetime = staleAt - baseTime\n    const datePrecisionPadding = Math.min(Math.max(cachedAt - baseTime, 0), 1000)\n    return staleAt + freshnessLifetime + datePrecisionPadding\n  }\n\n  return Math.max(staleAt, staleWhileRevalidate, staleIfError, immutable)\n}\n\n/**\n * Strips headers required to be removed in cached responses\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n * @returns {Record<string, string | string []>}\n */\nfunction stripNecessaryHeaders (resHeaders, cacheControlDirectives) {\n  const headersToRemove = [\n    'connection',\n    'proxy-authenticate',\n    'proxy-authentication-info',\n    'proxy-authorization',\n    'proxy-connection',\n    'te',\n    'transfer-encoding',\n    'upgrade',\n    // We'll add age back when serving it\n    'age'\n  ]\n\n  if (resHeaders['connection']) {\n    if (Array.isArray(resHeaders['connection'])) {\n      // connection: a\n      // connection: b\n      headersToRemove.push(...resHeaders['connection'].map(header => header.trim()))\n    } else {\n      // connection: a, b\n      headersToRemove.push(...resHeaders['connection'].split(',').map(header => header.trim()))\n    }\n  }\n\n  if (Array.isArray(cacheControlDirectives['no-cache'])) {\n    headersToRemove.push(...cacheControlDirectives['no-cache'])\n  }\n\n  if (Array.isArray(cacheControlDirectives['private'])) {\n    headersToRemove.push(...cacheControlDirectives['private'])\n  }\n\n  let strippedHeaders\n  for (const headerName of headersToRemove) {\n    if (resHeaders[headerName]) {\n      strippedHeaders ??= { ...resHeaders }\n      delete strippedHeaders[headerName]\n    }\n  }\n\n  return strippedHeaders ?? resHeaders\n}\n\n/**\n * @param {Date} date\n * @returns {boolean}\n */\nfunction isValidDate (date) {\n  return date instanceof Date && Number.isFinite(date.valueOf())\n}\n\nmodule.exports = CacheHandler\n", "'use strict'\n\nconst { Writable } = require('node:stream')\nconst { EventEmitter } = require('node:events')\nconst { assertCacheKey, assertCacheValue } = require('../util/cache.js')\n\n/**\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheKey} CacheKey\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheValue} CacheValue\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheStore} CacheStore\n * @typedef {import('../../types/cache-interceptor.d.ts').default.GetResult} GetResult\n */\n\n/**\n * @implements {CacheStore}\n * @extends {EventEmitter}\n */\nclass MemoryCacheStore extends EventEmitter {\n  #maxCount = 1024\n  #maxSize = 104857600 // 100MB\n  #maxEntrySize = 5242880 // 5MB\n\n  #size = 0\n  #count = 0\n  #entries = new Map()\n  #hasEmittedMaxSizeEvent = false\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.MemoryCacheStoreOpts | undefined} [opts]\n   */\n  constructor (opts) {\n    super()\n    if (opts) {\n      if (typeof opts !== 'object') {\n        throw new TypeError('MemoryCacheStore options must be an object')\n      }\n\n      if (opts.maxCount !== undefined) {\n        if (\n          typeof opts.maxCount !== 'number' ||\n          !Number.isInteger(opts.maxCount) ||\n          opts.maxCount < 0\n        ) {\n          throw new TypeError('MemoryCacheStore options.maxCount must be a non-negative integer')\n        }\n        this.#maxCount = opts.maxCount\n      }\n\n      if (opts.maxSize !== undefined) {\n        if (\n          typeof opts.maxSize !== 'number' ||\n          !Number.isInteger(opts.maxSize) ||\n          opts.maxSize < 0\n        ) {\n          throw new TypeError('MemoryCacheStore options.maxSize must be a non-negative integer')\n        }\n        this.#maxSize = opts.maxSize\n      }\n\n      if (opts.maxEntrySize !== undefined) {\n        if (\n          typeof opts.maxEntrySize !== 'number' ||\n          !Number.isInteger(opts.maxEntrySize) ||\n          opts.maxEntrySize < 0\n        ) {\n          throw new TypeError('MemoryCacheStore options.maxEntrySize must be a non-negative integer')\n        }\n        this.#maxEntrySize = opts.maxEntrySize\n      }\n    }\n  }\n\n  /**\n   * Get the current size of the cache in bytes\n   * @returns {number} The current size of the cache in bytes\n   */\n  get size () {\n    return this.#size\n  }\n\n  /**\n   * Check if the cache is full (either max size or max count reached)\n   * @returns {boolean} True if the cache is full, false otherwise\n   */\n  isFull () {\n    return this.#size >= this.#maxSize || this.#count >= this.#maxCount\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} req\n   * @returns {import('../../types/cache-interceptor.d.ts').default.GetResult | undefined}\n   */\n  get (key) {\n    assertCacheKey(key)\n\n    const topLevelKey = `${key.origin}:${key.path}`\n\n    const now = Date.now()\n    const entries = this.#entries.get(topLevelKey)\n\n    const entry = entries ? findEntry(key, entries, now) : null\n\n    return entry == null\n      ? undefined\n      : {\n          statusMessage: entry.statusMessage,\n          statusCode: entry.statusCode,\n          headers: entry.headers,\n          body: entry.body,\n          vary: entry.vary ? entry.vary : undefined,\n          etag: entry.etag,\n          cacheControlDirectives: entry.cacheControlDirectives,\n          cachedAt: entry.cachedAt,\n          staleAt: entry.staleAt,\n          deleteAt: entry.deleteAt\n        }\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue} val\n   * @returns {Writable | undefined}\n   */\n  createWriteStream (key, val) {\n    assertCacheKey(key)\n    assertCacheValue(val)\n\n    const topLevelKey = `${key.origin}:${key.path}`\n\n    const store = this\n    const entry = { ...key, ...val, body: [], size: 0 }\n\n    return new Writable({\n      write (chunk, encoding, callback) {\n        if (typeof chunk === 'string') {\n          chunk = Buffer.from(chunk, encoding)\n        }\n\n        entry.size += chunk.byteLength\n\n        if (entry.size > store.#maxEntrySize) {\n          this.destroy()\n        } else {\n          entry.body.push(chunk)\n        }\n\n        callback(null)\n      },\n      final (callback) {\n        let entries = store.#entries.get(topLevelKey)\n        if (!entries) {\n          entries = []\n          store.#entries.set(topLevelKey, entries)\n        }\n        const previousEntry = findEntry(key, entries, Date.now())\n        if (previousEntry) {\n          const index = entries.indexOf(previousEntry)\n          entries.splice(index, 1, entry)\n          store.#size -= previousEntry.size\n        } else {\n          entries.push(entry)\n          store.#count += 1\n        }\n\n        store.#size += entry.size\n\n        // Check if cache is full and emit event if needed\n        if (store.#size > store.#maxSize || store.#count > store.#maxCount) {\n          // Emit maxSizeExceeded event if we haven't already\n          if (!store.#hasEmittedMaxSizeEvent) {\n            store.emit('maxSizeExceeded', {\n              size: store.#size,\n              maxSize: store.#maxSize,\n              count: store.#count,\n              maxCount: store.#maxCount\n            })\n            store.#hasEmittedMaxSizeEvent = true\n          }\n\n          // Perform eviction\n          for (const [key, entries] of store.#entries) {\n            for (const entry of entries.splice(0, entries.length / 2)) {\n              store.#size -= entry.size\n              store.#count -= 1\n            }\n            if (entries.length === 0) {\n              store.#entries.delete(key)\n            }\n          }\n\n          // Reset the event flag after eviction\n          if (store.#size < store.#maxSize && store.#count < store.#maxCount) {\n            store.#hasEmittedMaxSizeEvent = false\n          }\n        }\n\n        callback(null)\n      }\n    })\n  }\n\n  /**\n   * @param {CacheKey} key\n   */\n  delete (key) {\n    if (typeof key !== 'object') {\n      throw new TypeError(`expected key to be object, got ${typeof key}`)\n    }\n\n    const topLevelKey = `${key.origin}:${key.path}`\n\n    for (const entry of this.#entries.get(topLevelKey) ?? []) {\n      this.#size -= entry.size\n      this.#count -= 1\n    }\n    this.#entries.delete(topLevelKey)\n  }\n}\n\nfunction findEntry (key, entries, now) {\n  return entries.find((entry) => (\n    entry.deleteAt > now &&\n    entry.method === key.method &&\n    (entry.vary == null || Object.keys(entry.vary).every(headerName => {\n      if (entry.vary[headerName] === null) {\n        return key.headers[headerName] === undefined\n      }\n\n      return entry.vary[headerName] === key.headers[headerName]\n    }))\n  ))\n}\n\nmodule.exports = MemoryCacheStore\n", "'use strict'\n\nconst assert = require('node:assert')\n\n/**\n * This takes care of revalidation requests we send to the origin. If we get\n *  a response indicating that what we have is cached (via a HTTP 304), we can\n *  continue using the cached value. Otherwise, we'll receive the new response\n *  here, which we then just pass on to the next handler (most likely a\n *  CacheHandler). Note that this assumes the proper headers were already\n *  included in the request to tell the origin that we want to revalidate the\n *  response (i.e. if-modified-since or if-none-match).\n *\n * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-validation\n *\n * @implements {import('../../types/dispatcher.d.ts').default.DispatchHandler}\n */\nclass CacheRevalidationHandler {\n  #successful = false\n\n  /**\n   * @type {((boolean, any) => void) | null}\n   */\n  #callback\n\n  /**\n   * @type {(import('../../types/dispatcher.d.ts').default.DispatchHandler)}\n   */\n  #handler\n\n  #context\n\n  /**\n   * @type {boolean}\n   */\n  #allowErrorStatusCodes\n\n  /**\n   * @param {(boolean) => void} callback Function to call if the cached value is valid\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchHandlers} handler\n   * @param {boolean} allowErrorStatusCodes\n   */\n  constructor (callback, handler, allowErrorStatusCodes) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function')\n    }\n\n    this.#callback = callback\n    this.#handler = handler\n    this.#allowErrorStatusCodes = allowErrorStatusCodes\n  }\n\n  onRequestStart (_, context) {\n    this.#successful = false\n    this.#context = context\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.#handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  onResponseStart (\n    controller,\n    statusCode,\n    headers,\n    statusMessage\n  ) {\n    assert(this.#callback != null)\n\n    // https://www.rfc-editor.org/rfc/rfc9111.html#name-handling-a-validation-respo\n    // https://datatracker.ietf.org/doc/html/rfc5861#section-4\n    this.#successful = statusCode === 304 ||\n      (this.#allowErrorStatusCodes && statusCode >= 500 && statusCode <= 504)\n    this.#callback(this.#successful, this.#context)\n    this.#callback = null\n\n    if (this.#successful) {\n      return true\n    }\n\n    this.#handler.onRequestStart?.(controller, this.#context)\n    this.#handler.onResponseStart?.(\n      controller,\n      statusCode,\n      headers,\n      statusMessage\n    )\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.#successful) {\n      return\n    }\n\n    return this.#handler.onResponseData?.(controller, chunk)\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.#successful) {\n      return\n    }\n\n    this.#handler.onResponseEnd?.(controller, trailers)\n  }\n\n  onResponseError (controller, err) {\n    if (this.#successful) {\n      return\n    }\n\n    if (this.#callback) {\n      this.#callback(false)\n      this.#callback = null\n    }\n\n    if (typeof this.#handler.onResponseError === 'function') {\n      this.#handler.onResponseError(controller, err)\n    } else {\n      throw err\n    }\n  }\n}\n\nmodule.exports = CacheRevalidationHandler\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { Readable } = require('node:stream')\nconst util = require('../core/util')\nconst CacheHandler = require('../handler/cache-handler')\nconst MemoryCacheStore = require('../cache/memory-cache-store')\nconst CacheRevalidationHandler = require('../handler/cache-revalidation-handler')\nconst { assertCacheStore, assertCacheMethods, makeCacheKey, normalizeHeaders, parseCacheControlHeader } = require('../util/cache.js')\nconst { AbortError } = require('../core/errors.js')\n\n/**\n * @param {(string | RegExp)[] | undefined} origins\n * @param {string} name\n */\nfunction assertCacheOrigins (origins, name) {\n  if (origins === undefined) return\n  if (!Array.isArray(origins)) {\n    throw new TypeError(`expected ${name} to be an array or undefined, got ${typeof origins}`)\n  }\n  for (let i = 0; i < origins.length; i++) {\n    const origin = origins[i]\n    if (typeof origin !== 'string' && !(origin instanceof RegExp)) {\n      throw new TypeError(`expected ${name}[${i}] to be a string or RegExp, got ${typeof origin}`)\n    }\n  }\n}\n\nconst nop = () => {}\n\n/**\n * @typedef {(options: import('../../types/dispatcher.d.ts').default.DispatchOptions, handler: import('../../types/dispatcher.d.ts').default.DispatchHandler) => void} DispatchFn\n */\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} cacheControlDirectives\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @returns {boolean}\n */\nfunction needsRevalidation (result, cacheControlDirectives, { headers = {} }) {\n  // Always revalidate requests with the no-cache request directive.\n  if (cacheControlDirectives?.['no-cache']) {\n    return true\n  }\n\n  // Always revalidate requests with unqualified no-cache response directive.\n  if (result.cacheControlDirectives?.['no-cache'] && !Array.isArray(result.cacheControlDirectives['no-cache'])) {\n    return true\n  }\n\n  // Always revalidate requests with conditional headers.\n  if (headers['if-modified-since'] || headers['if-none-match']) {\n    return true\n  }\n\n  return false\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} cacheControlDirectives\n * @returns {boolean}\n */\nfunction isStale (result, cacheControlDirectives) {\n  const now = Date.now()\n  if (now > result.staleAt) {\n    // Response is stale\n    if (cacheControlDirectives?.['max-stale']) {\n      // There's a threshold where we can serve stale responses, let's see if\n      //  we're in it\n      // https://www.rfc-editor.org/rfc/rfc9111.html#name-max-stale\n      const gracePeriod = result.staleAt + (cacheControlDirectives['max-stale'] * 1000)\n      return now > gracePeriod\n    }\n\n    return true\n  }\n\n  if (cacheControlDirectives?.['min-fresh']) {\n    // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.1.3\n\n    // At this point, staleAt is always > now\n    const timeLeftTillStale = result.staleAt - now\n    const threshold = cacheControlDirectives['min-fresh'] * 1000\n\n    return timeLeftTillStale <= threshold\n  }\n\n  return false\n}\n\n/**\n * Check if we're within the stale-while-revalidate window for a stale response\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @returns {boolean}\n */\nfunction withinStaleWhileRevalidateWindow (result) {\n  const staleWhileRevalidate = result.cacheControlDirectives?.['stale-while-revalidate']\n  if (!staleWhileRevalidate) {\n    return false\n  }\n\n  const now = Date.now()\n  const staleWhileRevalidateExpiry = result.staleAt + (staleWhileRevalidate * 1000)\n  return now <= staleWhileRevalidateExpiry\n}\n\n/**\n * @param {DispatchFn} dispatch\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} globalOpts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} reqCacheControl\n */\nfunction handleUncachedResponse (\n  dispatch,\n  globalOpts,\n  cacheKey,\n  handler,\n  opts,\n  reqCacheControl\n) {\n  if (reqCacheControl?.['only-if-cached']) {\n    let aborted = false\n\n    const controller = {\n      paused: false,\n      rawHeaders: [],\n      rawTrailers: [],\n      pause () {\n        this.paused = true\n      },\n      resume () {\n        this.paused = false\n      },\n      abort: (reason) => {\n        aborted = true\n        handler.onResponseError?.(controller, reason ?? new AbortError())\n      }\n    }\n\n    try {\n      handler.onRequestStart?.(controller, null)\n\n      if (aborted) {\n        return\n      }\n\n      handler.onResponseStart?.(controller, 504, {}, 'Gateway Timeout')\n      if (aborted) {\n        return\n      }\n\n      handler.onResponseEnd?.(controller, {})\n    } catch (err) {\n      if (typeof handler.onResponseError === 'function') {\n        handler.onResponseError(controller, err)\n      }\n    }\n\n    return true\n  }\n\n  return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n}\n\n/**\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {number} age\n * @param {any} context\n * @param {boolean} isStale\n */\nfunction sendCachedValue (handler, opts, result, age, context, isStale) {\n  // TODO (perf): Readable.from path can be optimized...\n  const stream = util.isStream(result.body)\n    ? result.body\n    : Readable.from(result.body ?? [])\n\n  assert(!stream.destroyed, 'stream should not be destroyed')\n  assert(!stream.readableDidRead, 'stream should not be readableDidRead')\n\n  const controller = {\n    rawHeaders: [],\n    rawTrailers: [],\n    resume () {\n      stream.resume()\n    },\n    pause () {\n      stream.pause()\n    },\n    get paused () {\n      return stream.isPaused()\n    },\n    get aborted () {\n      return stream.destroyed\n    },\n    get reason () {\n      return stream.errored\n    },\n    abort (reason) {\n      stream.destroy(reason ?? new AbortError())\n    }\n  }\n\n  stream\n    .on('error', function (err) {\n      if (!this.readableEnded) {\n        if (typeof handler.onResponseError === 'function') {\n          handler.onResponseError(controller, err)\n        } else {\n          throw err\n        }\n      }\n    })\n    .on('close', function () {\n      if (!this.errored) {\n        handler.onResponseEnd?.(controller, {})\n      }\n    })\n\n  handler.onRequestStart?.(controller, context)\n\n  if (stream.destroyed) {\n    return\n  }\n\n  // Add the age header\n  // https://www.rfc-editor.org/rfc/rfc9111.html#name-age\n  const headers = { ...result.headers, age: String(age) }\n\n  if (isStale) {\n    // Add warning header\n    //  https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Warning\n    headers.warning = '110 - \"response is stale\"'\n  }\n\n  controller.rawHeaders = util.toRawHeaders(headers)\n\n  handler.onResponseStart?.(controller, result.statusCode, headers, result.statusMessage)\n\n  if (opts.method === 'HEAD') {\n    stream.destroy()\n  } else {\n    stream.on('data', function (chunk) {\n      handler.onResponseData?.(controller, chunk)\n    })\n  }\n}\n\n/**\n * @param {DispatchFn} dispatch\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} globalOpts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} reqCacheControl\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult | undefined} result\n */\nfunction handleResult (\n  dispatch,\n  globalOpts,\n  cacheKey,\n  handler,\n  opts,\n  reqCacheControl,\n  result\n) {\n  if (!result) {\n    return handleUncachedResponse(dispatch, globalOpts, cacheKey, handler, opts, reqCacheControl)\n  }\n\n  const now = Date.now()\n  if (now > result.deleteAt) {\n    // Response is expired, cache store shouldn't have given this to us\n    return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n  }\n\n  const age = Math.round((now - result.cachedAt) / 1000)\n  if (reqCacheControl?.['max-age'] && age >= reqCacheControl['max-age']) {\n    // Response is considered expired for this specific request\n    //  https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.1.1\n    return dispatch(opts, handler)\n  }\n\n  const stale = isStale(result, reqCacheControl)\n  const revalidate = needsRevalidation(result, reqCacheControl, opts)\n\n  // Check if the response is stale\n  if (stale || revalidate) {\n    if (util.isStream(opts.body) && util.bodyLength(opts.body) !== 0) {\n      // If body is a stream we can't revalidate...\n      // TODO (fix): This could be less strict...\n      return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n    }\n\n    // RFC 5861: If we're within stale-while-revalidate window, serve stale immediately\n    // and revalidate in background, unless immediate revalidation is necessary\n    if (!revalidate && withinStaleWhileRevalidateWindow(result)) {\n      // Serve stale response immediately\n      sendCachedValue(handler, opts, result, age, null, true)\n\n      // Start background revalidation (fire-and-forget)\n      queueMicrotask(() => {\n        const headers = {\n          ...opts.headers,\n          'if-modified-since': new Date(result.cachedAt).toUTCString()\n        }\n\n        if (result.etag) {\n          headers['if-none-match'] = result.etag\n        }\n\n        if (result.vary) {\n          for (const key in result.vary) {\n            if (result.vary[key] != null) {\n              headers[key] = result.vary[key]\n            }\n          }\n        }\n\n        // Background revalidation - update cache if we get new data\n        dispatch(\n          {\n            ...opts,\n            headers\n          },\n          new CacheHandler(globalOpts, cacheKey, {\n            // Silent handler that just updates the cache\n            onRequestStart () {},\n            onRequestUpgrade () {},\n            onResponseStart () {},\n            onResponseData () {},\n            onResponseEnd () {},\n            onResponseError () {}\n          })\n        )\n      })\n\n      return true\n    }\n\n    let withinStaleIfErrorThreshold = false\n    const staleIfErrorExpiry = result.cacheControlDirectives['stale-if-error'] ?? reqCacheControl?.['stale-if-error']\n    if (staleIfErrorExpiry) {\n      withinStaleIfErrorThreshold = now < (result.staleAt + (staleIfErrorExpiry * 1000))\n    }\n\n    const headers = {\n      ...opts.headers,\n      'if-modified-since': new Date(result.cachedAt).toUTCString()\n    }\n\n    if (result.etag) {\n      headers['if-none-match'] = result.etag\n    }\n\n    if (result.vary) {\n      for (const key in result.vary) {\n        if (result.vary[key] != null) {\n          headers[key] = result.vary[key]\n        }\n      }\n    }\n\n    // We need to revalidate the response\n    return dispatch(\n      {\n        ...opts,\n        headers\n      },\n      new CacheRevalidationHandler(\n        (success, context) => {\n          if (success) {\n            // TODO: successful revalidation should be considered fresh (not give stale warning).\n            sendCachedValue(handler, opts, result, age, context, stale)\n          } else if (util.isStream(result.body)) {\n            result.body.on('error', nop).destroy()\n          }\n        },\n        new CacheHandler(globalOpts, cacheKey, handler),\n        withinStaleIfErrorThreshold\n      )\n    )\n  }\n\n  // Dump request body.\n  if (util.isStream(opts.body)) {\n    opts.body.on('error', nop).destroy()\n  }\n\n  sendCachedValue(handler, opts, result, age, null, false)\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions} [opts]\n * @returns {import('../../types/dispatcher.d.ts').default.DispatcherComposeInterceptor}\n */\nmodule.exports = (opts = {}) => {\n  const {\n    store = new MemoryCacheStore(),\n    methods = ['GET'],\n    cacheByDefault = undefined,\n    type = 'shared',\n    origins = undefined\n  } = opts\n\n  if (typeof opts !== 'object' || opts === null) {\n    throw new TypeError(`expected type of opts to be an Object, got ${opts === null ? 'null' : typeof opts}`)\n  }\n\n  assertCacheStore(store, 'opts.store')\n  assertCacheMethods(methods, 'opts.methods')\n  assertCacheOrigins(origins, 'opts.origins')\n\n  if (typeof cacheByDefault !== 'undefined' && typeof cacheByDefault !== 'number') {\n    throw new TypeError(`expected opts.cacheByDefault to be number or undefined, got ${typeof cacheByDefault}`)\n  }\n\n  if (typeof type !== 'undefined' && type !== 'shared' && type !== 'private') {\n    throw new TypeError(`expected opts.type to be shared, private, or undefined, got ${typeof type}`)\n  }\n\n  const globalOpts = {\n    store,\n    methods,\n    cacheByDefault,\n    type\n  }\n\n  const safeMethodsToNotCache = util.safeHTTPMethods.filter(method => methods.includes(method) === false)\n\n  return dispatch => {\n    return (opts, handler) => {\n      if (!opts.origin || safeMethodsToNotCache.includes(opts.method)) {\n        // Not a method we want to cache or we don't have the origin, skip\n        return dispatch(opts, handler)\n      }\n\n      // Check if origin is in whitelist\n      if (origins !== undefined) {\n        const requestOrigin = opts.origin.toString().toLowerCase()\n        let isAllowed = false\n\n        for (let i = 0; i < origins.length; i++) {\n          const allowed = origins[i]\n          if (typeof allowed === 'string') {\n            if (allowed.toLowerCase() === requestOrigin) {\n              isAllowed = true\n              break\n            }\n          } else if (allowed.test(requestOrigin)) {\n            isAllowed = true\n            break\n          }\n        }\n\n        if (!isAllowed) {\n          return dispatch(opts, handler)\n        }\n      }\n\n      opts = {\n        ...opts,\n        headers: normalizeHeaders(opts)\n      }\n\n      const reqCacheControl = opts.headers?.['cache-control']\n        ? parseCacheControlHeader(opts.headers['cache-control'])\n        : undefined\n\n      if (reqCacheControl?.['no-store']) {\n        return dispatch(opts, handler)\n      }\n\n      /**\n       * @type {import('../../types/cache-interceptor.d.ts').default.CacheKey}\n       */\n      const cacheKey = makeCacheKey(opts)\n      const result = store.get(cacheKey)\n\n      if (result && typeof result.then === 'function') {\n        return result\n          .then(result => handleResult(dispatch,\n            globalOpts,\n            cacheKey,\n            handler,\n            opts,\n            reqCacheControl,\n            result\n          ))\n      } else {\n        return handleResult(\n          dispatch,\n          globalOpts,\n          cacheKey,\n          handler,\n          opts,\n          reqCacheControl,\n          result\n        )\n      }\n    }\n  }\n}\n", "'use strict'\n\nconst { createInflate, createGunzip, createBrotliDecompress, createZstdDecompress } = require('node:zlib')\nconst { pipeline } = require('node:stream')\nconst DecoratorHandler = require('../handler/decorator-handler')\n\n/** @typedef {import('node:stream').Transform} Transform */\n/** @typedef {import('node:stream').Transform} Controller */\n/** @typedef {Transform&import('node:zlib').Zlib} DecompressorStream */\n\n/** @type {Record<string, () => DecompressorStream>} */\nconst supportedEncodings = {\n  gzip: createGunzip,\n  'x-gzip': createGunzip,\n  br: createBrotliDecompress,\n  deflate: createInflate,\n  compress: createInflate,\n  'x-compress': createInflate,\n  zstd: createZstdDecompress\n}\n\nconst defaultSkipStatusCodes = /** @type {const} */ ([204, 304])\n\nlet warningEmitted = /** @type {boolean} */ (false)\n\n/**\n * @typedef {Object} DecompressHandlerOptions\n * @property {number[]|Readonly<number[]>} [skipStatusCodes=[204, 304]] - List of status codes to skip decompression for\n * @property {boolean} [skipErrorResponses] - Whether to skip decompression for error responses (status codes >= 400)\n */\n\nclass DecompressHandler extends DecoratorHandler {\n  /** @type {Transform[]} */\n  #decompressors = []\n  /** @type {Readonly<number[]>} */\n  #skipStatusCodes\n  /** @type {boolean} */\n  #skipErrorResponses\n\n  constructor (handler, { skipStatusCodes = defaultSkipStatusCodes, skipErrorResponses = true } = {}) {\n    super(handler)\n    this.#skipStatusCodes = skipStatusCodes\n    this.#skipErrorResponses = skipErrorResponses\n  }\n\n  /**\n   * Determines if decompression should be skipped based on encoding and status code\n   * @param {string} contentEncoding - Content-Encoding header value\n   * @param {number} statusCode - HTTP status code of the response\n   * @returns {boolean} - True if decompression should be skipped\n   */\n  #shouldSkipDecompression (contentEncoding, statusCode) {\n    if (!contentEncoding || statusCode < 200) return true\n    if (this.#skipStatusCodes.includes(statusCode)) return true\n    if (this.#skipErrorResponses && statusCode >= 400) return true\n    return false\n  }\n\n  /**\n   * Creates a chain of decompressors for multiple content encodings\n   *\n   * @param {string} encodings - Comma-separated list of content encodings\n   * @returns {Array<DecompressorStream>} - Array of decompressor streams\n   * @throws {Error} - If the number of content-encodings exceeds the maximum allowed\n   */\n  #createDecompressionChain (encodings) {\n    const parts = encodings.split(',')\n\n    // Limit the number of content-encodings to prevent resource exhaustion.\n    // CVE fix similar to urllib3 (GHSA-gm62-xv2j-4w53) and curl (CVE-2022-32206).\n    const maxContentEncodings = 5\n    if (parts.length > maxContentEncodings) {\n      throw new Error(`too many content-encodings in response: ${parts.length}, maximum allowed is ${maxContentEncodings}`)\n    }\n\n    /** @type {DecompressorStream[]} */\n    const decompressors = []\n\n    for (let i = parts.length - 1; i >= 0; i--) {\n      const encoding = parts[i].trim()\n      if (!encoding) continue\n\n      if (!supportedEncodings[encoding]) {\n        decompressors.length = 0 // Clear if unsupported encoding\n        return decompressors // Unsupported encoding\n      }\n\n      decompressors.push(supportedEncodings[encoding]())\n    }\n\n    return decompressors\n  }\n\n  /**\n   * Sets up event handlers for a decompressor stream using readable events\n   * @param {DecompressorStream} decompressor - The decompressor stream\n   * @param {Controller} controller - The controller to coordinate with\n   * @returns {void}\n   */\n  #setupDecompressorEvents (decompressor, controller) {\n    decompressor.on('readable', () => {\n      let chunk\n      while ((chunk = decompressor.read()) !== null) {\n        const result = super.onResponseData(controller, chunk)\n        if (result === false) {\n          break\n        }\n      }\n    })\n\n    decompressor.on('error', (error) => {\n      super.onResponseError(controller, error)\n    })\n  }\n\n  /**\n   * Sets up event handling for a single decompressor\n   * @param {Controller} controller - The controller to handle events\n   * @returns {void}\n   */\n  #setupSingleDecompressor (controller) {\n    const decompressor = this.#decompressors[0]\n    this.#setupDecompressorEvents(decompressor, controller)\n\n    decompressor.on('end', () => {\n      super.onResponseEnd(controller, {})\n    })\n  }\n\n  /**\n   * Sets up event handling for multiple chained decompressors using pipeline\n   * @param {Controller} controller - The controller to handle events\n   * @returns {void}\n   */\n  #setupMultipleDecompressors (controller) {\n    const lastDecompressor = this.#decompressors[this.#decompressors.length - 1]\n    this.#setupDecompressorEvents(lastDecompressor, controller)\n\n    pipeline(this.#decompressors, (err) => {\n      if (err) {\n        super.onResponseError(controller, err)\n        return\n      }\n      super.onResponseEnd(controller, {})\n    })\n  }\n\n  /**\n   * Cleans up decompressor references to prevent memory leaks\n   * @returns {void}\n   */\n  #cleanupDecompressors () {\n    this.#decompressors.length = 0\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {number} statusCode\n   * @param {Record<string, string | string[] | undefined>} headers\n   * @param {string} statusMessage\n   * @returns {void}\n   */\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    const contentEncoding = headers['content-encoding']\n\n    // If content encoding is not supported or status code is in skip list\n    if (this.#shouldSkipDecompression(contentEncoding, statusCode)) {\n      return super.onResponseStart(controller, statusCode, headers, statusMessage)\n    }\n\n    const decompressors = this.#createDecompressionChain(contentEncoding.toLowerCase())\n\n    if (decompressors.length === 0) {\n      this.#cleanupDecompressors()\n      return super.onResponseStart(controller, statusCode, headers, statusMessage)\n    }\n\n    this.#decompressors = decompressors\n\n    // Remove compression headers since we're decompressing\n    const { 'content-encoding': _, 'content-length': __, ...newHeaders } = headers\n\n    if (controller?.rawHeaders) {\n      const rawHeaders = controller.rawHeaders\n\n      if (Array.isArray(rawHeaders)) {\n        const filteredHeaders = []\n        for (let i = 0; i < rawHeaders.length; i += 2) {\n          const headerName = rawHeaders[i]\n          const name = Buffer.isBuffer(headerName) ? headerName.toString('latin1') : `${headerName}`\n          const lowerName = name.toLowerCase()\n\n          if (lowerName === 'content-encoding' || lowerName === 'content-length') {\n            continue\n          }\n\n          filteredHeaders.push(rawHeaders[i], rawHeaders[i + 1])\n        }\n        controller.rawHeaders = filteredHeaders\n      } else if (typeof rawHeaders === 'object') {\n        for (const name of Object.keys(rawHeaders)) {\n          const lowerName = name.toLowerCase()\n          if (lowerName === 'content-encoding' || lowerName === 'content-length') {\n            delete rawHeaders[name]\n          }\n        }\n      }\n    }\n\n    if (this.#decompressors.length === 1) {\n      this.#setupSingleDecompressor(controller)\n    } else {\n      this.#setupMultipleDecompressors(controller)\n    }\n\n    return super.onResponseStart(controller, statusCode, newHeaders, statusMessage)\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {Buffer} chunk\n   * @returns {void}\n   */\n  onResponseData (controller, chunk) {\n    if (this.#decompressors.length > 0) {\n      this.#decompressors[0].write(chunk)\n      return\n    }\n    super.onResponseData(controller, chunk)\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {Record<string, string | string[]> | undefined} trailers\n   * @returns {void}\n   */\n  onResponseEnd (controller, trailers) {\n    if (this.#decompressors.length > 0) {\n      this.#decompressors[0].end()\n      this.#cleanupDecompressors()\n      return\n    }\n    super.onResponseEnd(controller, trailers)\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {Error} err\n   * @returns {void}\n   */\n  onResponseError (controller, err) {\n    if (this.#decompressors.length > 0) {\n      for (const decompressor of this.#decompressors) {\n        decompressor.destroy(err)\n      }\n      this.#cleanupDecompressors()\n    }\n    super.onResponseError(controller, err)\n  }\n}\n\n/**\n * Creates a decompression interceptor for HTTP responses\n * @param {DecompressHandlerOptions} [options] - Options for the interceptor\n * @returns {Function} - Interceptor function\n */\nfunction createDecompressInterceptor (options = {}) {\n  // Emit experimental warning only once\n  if (!warningEmitted) {\n    process.emitWarning(\n      'DecompressInterceptor is experimental and subject to change',\n      'ExperimentalWarning'\n    )\n    warningEmitted = true\n  }\n\n  return (dispatch) => {\n    return (opts, handler) => {\n      const decompressHandler = new DecompressHandler(handler, options)\n      return dispatch(opts, decompressHandler)\n    }\n  }\n}\n\nmodule.exports = createDecompressInterceptor\n", "'use strict'\n\nconst { RequestAbortedError } = require('../core/errors')\n\n/**\n * @typedef {import('../../types/dispatcher.d.ts').default.DispatchHandler} DispatchHandler\n */\n\nconst DEFAULT_MAX_BUFFER_SIZE = 5 * 1024 * 1024\n\n/**\n * @typedef {Object} WaitingHandler\n * @property {DispatchHandler} handler\n * @property {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n * @property {Buffer[]} bufferedChunks\n * @property {number} bufferedBytes\n * @property {object | null} pendingTrailers\n * @property {boolean} done\n */\n\n/**\n * Handler that forwards response events to multiple waiting handlers.\n * Used for request deduplication.\n *\n * @implements {DispatchHandler}\n */\nclass DeduplicationHandler {\n  /**\n   * @type {DispatchHandler}\n   */\n  #primaryHandler\n\n  /**\n   * @type {WaitingHandler[]}\n   */\n  #waitingHandlers = []\n\n  /**\n   * @type {number}\n   */\n  #maxBufferSize = DEFAULT_MAX_BUFFER_SIZE\n\n  /**\n   * @type {number}\n   */\n  #statusCode = 0\n\n  /**\n   * @type {Record<string, string | string[]>}\n   */\n  #headers = {}\n\n  /**\n   * @type {string}\n   */\n  #statusMessage = ''\n\n  /**\n   * @type {boolean}\n   */\n  #aborted = false\n\n  /**\n   * @type {boolean}\n   */\n  #responseStarted = false\n\n  /**\n   * @type {boolean}\n   */\n  #responseDataStarted = false\n\n  /**\n   * @type {boolean}\n   */\n  #completed = false\n\n  /**\n   * @type {import('../../types/dispatcher.d.ts').default.DispatchController | null}\n   */\n  #controller = null\n\n  /**\n   * @type {(() => void) | null}\n   */\n  #onComplete = null\n\n  /**\n   * @param {DispatchHandler} primaryHandler The primary handler\n   * @param {() => void} onComplete Callback when request completes\n   * @param {number} [maxBufferSize] Maximum paused buffer size per waiting handler\n   */\n  constructor (primaryHandler, onComplete, maxBufferSize = DEFAULT_MAX_BUFFER_SIZE) {\n    this.#primaryHandler = primaryHandler\n    this.#onComplete = onComplete\n    this.#maxBufferSize = maxBufferSize\n  }\n\n  /**\n   * Add a waiting handler that will receive response events.\n   * Returns false if deduplication can no longer safely attach this handler.\n   *\n   * @param {DispatchHandler} handler\n   * @returns {boolean}\n   */\n  addWaitingHandler (handler) {\n    if (this.#completed || this.#responseDataStarted) {\n      return false\n    }\n\n    const waitingHandler = this.#createWaitingHandler(handler)\n    const waitingController = waitingHandler.controller\n\n    try {\n      handler.onRequestStart?.(waitingController, null)\n\n      if (waitingController.aborted) {\n        waitingHandler.done = true\n        return true\n      }\n\n      if (this.#responseStarted) {\n        handler.onResponseStart?.(\n          waitingController,\n          this.#statusCode,\n          this.#headers,\n          this.#statusMessage\n        )\n      }\n    } catch {\n      // Ignore errors from waiting handlers\n      waitingHandler.done = true\n      return true\n    }\n\n    if (!waitingController.aborted) {\n      this.#waitingHandlers.push(waitingHandler)\n    }\n\n    return true\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {any} context\n   */\n  onRequestStart (controller, context) {\n    this.#controller = controller\n    this.#primaryHandler.onRequestStart?.(controller, context)\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {number} statusCode\n   * @param {import('../../types/header.d.ts').IncomingHttpHeaders} headers\n   * @param {Socket} socket\n   */\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.#primaryHandler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {number} statusCode\n   * @param {Record<string, string | string[]>} headers\n   * @param {string} statusMessage\n   */\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    this.#responseStarted = true\n    this.#statusCode = statusCode\n    this.#headers = headers\n    this.#statusMessage = statusMessage\n\n    this.#primaryHandler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      const { handler, controller: waitingController } = waitingHandler\n\n      if (waitingHandler.done || waitingController.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      try {\n        handler.onResponseStart?.(\n          waitingController,\n          statusCode,\n          headers,\n          statusMessage\n        )\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      if (waitingController.aborted) {\n        waitingHandler.done = true\n      }\n    }\n\n    this.#pruneDoneWaitingHandlers()\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {Buffer} chunk\n   */\n  onResponseData (controller, chunk) {\n    if (this.#aborted || this.#completed) {\n      return\n    }\n\n    this.#responseDataStarted = true\n\n    this.#primaryHandler.onResponseData?.(controller, chunk)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      const { handler, controller: waitingController } = waitingHandler\n\n      if (waitingHandler.done || waitingController.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      if (waitingController.paused) {\n        this.#bufferWaitingChunk(waitingHandler, chunk)\n        continue\n      }\n\n      try {\n        handler.onResponseData?.(waitingController, chunk)\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      if (waitingController.aborted) {\n        waitingHandler.done = true\n        waitingHandler.bufferedChunks = []\n        waitingHandler.bufferedBytes = 0\n      }\n    }\n\n    this.#pruneDoneWaitingHandlers()\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {object} trailers\n   */\n  onResponseEnd (controller, trailers) {\n    if (this.#aborted || this.#completed) {\n      return\n    }\n\n    this.#completed = true\n    this.#primaryHandler.onResponseEnd?.(controller, trailers)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      if (waitingHandler.done || waitingHandler.controller.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      this.#flushWaitingHandler(waitingHandler)\n\n      if (waitingHandler.done || waitingHandler.controller.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      if (waitingHandler.controller.paused && waitingHandler.bufferedChunks.length > 0) {\n        waitingHandler.pendingTrailers = trailers\n        continue\n      }\n\n      try {\n        waitingHandler.handler.onResponseEnd?.(waitingHandler.controller, trailers)\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      waitingHandler.done = true\n    }\n\n    this.#pruneDoneWaitingHandlers()\n    this.#onComplete?.()\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {Error} err\n   */\n  onResponseError (controller, err) {\n    if (this.#completed) {\n      return\n    }\n\n    this.#aborted = true\n    this.#completed = true\n\n    this.#primaryHandler.onResponseError?.(controller, err)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      this.#errorWaitingHandler(waitingHandler, err)\n    }\n\n    this.#waitingHandlers = []\n    this.#onComplete?.()\n  }\n\n  /**\n   * @param {DispatchHandler} handler\n   * @returns {WaitingHandler}\n   */\n  #createWaitingHandler (handler) {\n    /** @type {WaitingHandler} */\n    const waitingHandler = {\n      handler,\n      controller: null,\n      bufferedChunks: [],\n      bufferedBytes: 0,\n      pendingTrailers: null,\n      done: false\n    }\n\n    const state = {\n      aborted: false,\n      paused: false,\n      reason: null\n    }\n\n    waitingHandler.controller = {\n      resume: () => {\n        if (state.aborted) {\n          return\n        }\n\n        state.paused = false\n        this.#flushWaitingHandler(waitingHandler)\n\n        if (\n          this.#completed &&\n          waitingHandler.pendingTrailers &&\n          waitingHandler.bufferedChunks.length === 0 &&\n          !state.paused &&\n          !state.aborted\n        ) {\n          try {\n            waitingHandler.handler.onResponseEnd?.(waitingHandler.controller, waitingHandler.pendingTrailers)\n          } catch {\n            // Ignore errors from waiting handlers\n          }\n\n          waitingHandler.pendingTrailers = null\n          waitingHandler.done = true\n        }\n\n        this.#pruneDoneWaitingHandlers()\n      },\n      pause: () => {\n        if (!state.aborted) {\n          state.paused = true\n        }\n      },\n      get paused () { return state.paused },\n      get aborted () { return state.aborted },\n      get reason () { return state.reason },\n      abort: (reason) => {\n        state.aborted = true\n        state.reason = reason ?? null\n        waitingHandler.done = true\n        waitingHandler.pendingTrailers = null\n        waitingHandler.bufferedChunks = []\n        waitingHandler.bufferedBytes = 0\n      }\n    }\n\n    return waitingHandler\n  }\n\n  /**\n   * @param {WaitingHandler} waitingHandler\n   * @param {Buffer} chunk\n   */\n  #bufferWaitingChunk (waitingHandler, chunk) {\n    if (waitingHandler.done || waitingHandler.controller.aborted) {\n      waitingHandler.done = true\n      waitingHandler.bufferedChunks = []\n      waitingHandler.bufferedBytes = 0\n      return\n    }\n\n    const bufferedChunk = Buffer.from(chunk)\n    waitingHandler.bufferedChunks.push(bufferedChunk)\n    waitingHandler.bufferedBytes += bufferedChunk.length\n\n    if (waitingHandler.bufferedBytes > this.#maxBufferSize) {\n      const err = new RequestAbortedError(`Deduplicated waiting handler exceeded maxBufferSize (${this.#maxBufferSize} bytes) while paused`)\n      this.#errorWaitingHandler(waitingHandler, err)\n    }\n  }\n\n  /**\n   * @param {WaitingHandler} waitingHandler\n   */\n  #flushWaitingHandler (waitingHandler) {\n    const { handler, controller } = waitingHandler\n\n    while (\n      !waitingHandler.done &&\n      !controller.aborted &&\n      !controller.paused &&\n      waitingHandler.bufferedChunks.length > 0\n    ) {\n      const bufferedChunk = waitingHandler.bufferedChunks.shift()\n      waitingHandler.bufferedBytes -= bufferedChunk.length\n\n      try {\n        handler.onResponseData?.(controller, bufferedChunk)\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      if (controller.aborted) {\n        waitingHandler.done = true\n        waitingHandler.pendingTrailers = null\n        waitingHandler.bufferedChunks = []\n        waitingHandler.bufferedBytes = 0\n        break\n      }\n    }\n  }\n\n  /**\n   * @param {WaitingHandler} waitingHandler\n   * @param {Error} err\n   */\n  #errorWaitingHandler (waitingHandler, err) {\n    if (waitingHandler.done) {\n      return\n    }\n\n    waitingHandler.done = true\n    waitingHandler.pendingTrailers = null\n    waitingHandler.bufferedChunks = []\n    waitingHandler.bufferedBytes = 0\n\n    try {\n      waitingHandler.controller.abort(err)\n      waitingHandler.handler.onResponseError?.(waitingHandler.controller, err)\n    } catch {\n      // Ignore errors from waiting handlers\n    }\n  }\n\n  #pruneDoneWaitingHandlers () {\n    this.#waitingHandlers = this.#waitingHandlers.filter(waitingHandler => waitingHandler.done === false)\n  }\n}\n\nmodule.exports = DeduplicationHandler\n", "'use strict'\n\nconst diagnosticsChannel = require('node:diagnostics_channel')\nconst util = require('../core/util')\nconst DeduplicationHandler = require('../handler/deduplication-handler')\nconst { normalizeHeaders, makeCacheKey, makeDeduplicationKey } = require('../util/cache.js')\n\nconst pendingRequestsChannel = diagnosticsChannel.channel('undici:request:pending-requests')\n\n/**\n * @param {import('../../types/interceptors.d.ts').default.DeduplicateInterceptorOpts} [opts]\n * @returns {import('../../types/dispatcher.d.ts').default.DispatcherComposeInterceptor}\n */\nmodule.exports = (opts = {}) => {\n  const {\n    methods = ['GET'],\n    skipHeaderNames = [],\n    excludeHeaderNames = [],\n    maxBufferSize = 5 * 1024 * 1024\n  } = opts\n\n  if (typeof opts !== 'object' || opts === null) {\n    throw new TypeError(`expected type of opts to be an Object, got ${opts === null ? 'null' : typeof opts}`)\n  }\n\n  if (!Array.isArray(methods)) {\n    throw new TypeError(`expected opts.methods to be an array, got ${typeof methods}`)\n  }\n\n  for (const method of methods) {\n    if (!util.safeHTTPMethods.includes(method)) {\n      throw new TypeError(`expected opts.methods to only contain safe HTTP methods, got ${method}`)\n    }\n  }\n\n  if (!Array.isArray(skipHeaderNames)) {\n    throw new TypeError(`expected opts.skipHeaderNames to be an array, got ${typeof skipHeaderNames}`)\n  }\n\n  if (!Array.isArray(excludeHeaderNames)) {\n    throw new TypeError(`expected opts.excludeHeaderNames to be an array, got ${typeof excludeHeaderNames}`)\n  }\n\n  if (!Number.isFinite(maxBufferSize) || maxBufferSize <= 0) {\n    throw new TypeError(`expected opts.maxBufferSize to be a positive finite number, got ${maxBufferSize}`)\n  }\n\n  // Convert to lowercase Set for case-insensitive header matching\n  const skipHeaderNamesSet = new Set(skipHeaderNames.map(name => name.toLowerCase()))\n\n  // Convert to lowercase Set for case-insensitive header exclusion from deduplication key\n  const excludeHeaderNamesSet = new Set(excludeHeaderNames.map(name => name.toLowerCase()))\n\n  /**\n   * Map of pending requests for deduplication\n   * @type {Map<string, DeduplicationHandler>}\n   */\n  const pendingRequests = new Map()\n\n  return dispatch => {\n    return (opts, handler) => {\n      if (!opts.origin || methods.includes(opts.method) === false) {\n        return dispatch(opts, handler)\n      }\n\n      opts = {\n        ...opts,\n        headers: normalizeHeaders(opts)\n      }\n\n      // Skip deduplication if request contains any of the specified headers\n      if (skipHeaderNamesSet.size > 0) {\n        for (const headerName of Object.keys(opts.headers)) {\n          if (skipHeaderNamesSet.has(headerName.toLowerCase())) {\n            return dispatch(opts, handler)\n          }\n        }\n      }\n\n      const cacheKey = makeCacheKey(opts)\n      const dedupeKey = makeDeduplicationKey(cacheKey, excludeHeaderNamesSet)\n\n      // Check if there's already a pending request for this key\n      const pendingHandler = pendingRequests.get(dedupeKey)\n      if (pendingHandler) {\n        // Add this handler to the waiting list when safe.\n        // If body streaming has already started, this request must be sent independently.\n        if (pendingHandler.addWaitingHandler(handler)) {\n          return true\n        }\n\n        return dispatch(opts, handler)\n      }\n\n      // Create a new deduplication handler\n      const deduplicationHandler = new DeduplicationHandler(\n        handler,\n        () => {\n          // Clean up when request completes\n          pendingRequests.delete(dedupeKey)\n          if (pendingRequestsChannel.hasSubscribers) {\n            pendingRequestsChannel.publish({ size: pendingRequests.size, key: dedupeKey, type: 'removed' })\n          }\n        },\n        maxBufferSize\n      )\n\n      // Register the pending request\n      pendingRequests.set(dedupeKey, deduplicationHandler)\n      if (pendingRequestsChannel.hasSubscribers) {\n        pendingRequestsChannel.publish({ size: pendingRequests.size, key: dedupeKey, type: 'added' })\n      }\n\n      return dispatch(opts, deduplicationHandler)\n    }\n  }\n}\n", "'use strict'\n\nconst { Writable } = require('node:stream')\nconst { assertCacheKey, assertCacheValue } = require('../util/cache.js')\n\nlet DatabaseSync\n\nconst VERSION = 3\n\n// 2gb\nconst MAX_ENTRY_SIZE = 2 * 1000 * 1000 * 1000\n\n/**\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheStore} CacheStore\n * @implements {CacheStore}\n *\n * @typedef {{\n *  id: Readonly<number>,\n *  body?: Uint8Array\n *  statusCode: number\n *  statusMessage: string\n *  headers?: string\n *  vary?: string\n *  etag?: string\n *  cacheControlDirectives?: string\n *  cachedAt: number\n *  staleAt: number\n *  deleteAt: number\n * }} SqliteStoreValue\n */\nmodule.exports = class SqliteCacheStore {\n  #maxEntrySize = MAX_ENTRY_SIZE\n  #maxCount = Infinity\n\n  /**\n   * @type {import('node:sqlite').DatabaseSync}\n   */\n  #db\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #getValuesQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #updateValueQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #insertValueQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #deleteExpiredValuesQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #deleteByUrlQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #countEntriesQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync | null}\n   */\n  #deleteOldValuesQuery\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.SqliteCacheStoreOpts | undefined} opts\n   */\n  constructor (opts) {\n    if (opts) {\n      if (typeof opts !== 'object') {\n        throw new TypeError('SqliteCacheStore options must be an object')\n      }\n\n      if (opts.maxEntrySize !== undefined) {\n        if (\n          typeof opts.maxEntrySize !== 'number' ||\n          !Number.isInteger(opts.maxEntrySize) ||\n          opts.maxEntrySize < 0\n        ) {\n          throw new TypeError('SqliteCacheStore options.maxEntrySize must be a non-negative integer')\n        }\n\n        if (opts.maxEntrySize > MAX_ENTRY_SIZE) {\n          throw new TypeError('SqliteCacheStore options.maxEntrySize must be less than 2gb')\n        }\n\n        this.#maxEntrySize = opts.maxEntrySize\n      }\n\n      if (opts.maxCount !== undefined) {\n        if (\n          typeof opts.maxCount !== 'number' ||\n          !Number.isInteger(opts.maxCount) ||\n          opts.maxCount < 0\n        ) {\n          throw new TypeError('SqliteCacheStore options.maxCount must be a non-negative integer')\n        }\n        this.#maxCount = opts.maxCount\n      }\n    }\n\n    if (!DatabaseSync) {\n      DatabaseSync = require('node:sqlite').DatabaseSync\n    }\n    this.#db = new DatabaseSync(opts?.location ?? ':memory:')\n\n    this.#db.exec(`\n      PRAGMA journal_mode = WAL;\n      PRAGMA synchronous = NORMAL;\n      PRAGMA temp_store = memory;\n      PRAGMA optimize;\n\n      CREATE TABLE IF NOT EXISTS cacheInterceptorV${VERSION} (\n        -- Data specific to us\n        id INTEGER PRIMARY KEY AUTOINCREMENT,\n        url TEXT NOT NULL,\n        method TEXT NOT NULL,\n\n        -- Data returned to the interceptor\n        body BUF NULL,\n        deleteAt INTEGER NOT NULL,\n        statusCode INTEGER NOT NULL,\n        statusMessage TEXT NOT NULL,\n        headers TEXT NULL,\n        cacheControlDirectives TEXT NULL,\n        etag TEXT NULL,\n        vary TEXT NULL,\n        cachedAt INTEGER NOT NULL,\n        staleAt INTEGER NOT NULL\n      );\n\n      CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION}_getValuesQuery ON cacheInterceptorV${VERSION}(url, method, deleteAt);\n      CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION}_deleteByUrlQuery ON cacheInterceptorV${VERSION}(deleteAt);\n    `)\n\n    this.#getValuesQuery = this.#db.prepare(`\n      SELECT\n        id,\n        body,\n        deleteAt,\n        statusCode,\n        statusMessage,\n        headers,\n        etag,\n        cacheControlDirectives,\n        vary,\n        cachedAt,\n        staleAt\n      FROM cacheInterceptorV${VERSION}\n      WHERE\n        url = ?\n        AND method = ?\n      ORDER BY\n        deleteAt ASC\n    `)\n\n    this.#updateValueQuery = this.#db.prepare(`\n      UPDATE cacheInterceptorV${VERSION} SET\n        body = ?,\n        deleteAt = ?,\n        statusCode = ?,\n        statusMessage = ?,\n        headers = ?,\n        etag = ?,\n        cacheControlDirectives = ?,\n        vary = ?,\n        cachedAt = ?,\n        staleAt = ?\n      WHERE\n        id = ?\n    `)\n\n    this.#insertValueQuery = this.#db.prepare(`\n      INSERT INTO cacheInterceptorV${VERSION} (\n        url,\n        method,\n        body,\n        deleteAt,\n        statusCode,\n        statusMessage,\n        headers,\n        etag,\n        cacheControlDirectives,\n        vary,\n        cachedAt,\n        staleAt\n      ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n    `)\n\n    this.#deleteByUrlQuery = this.#db.prepare(\n      `DELETE FROM cacheInterceptorV${VERSION} WHERE url = ?`\n    )\n\n    this.#countEntriesQuery = this.#db.prepare(\n      `SELECT COUNT(*) AS total FROM cacheInterceptorV${VERSION}`\n    )\n\n    this.#deleteExpiredValuesQuery = this.#db.prepare(\n      `DELETE FROM cacheInterceptorV${VERSION} WHERE deleteAt <= ?`\n    )\n\n    this.#deleteOldValuesQuery = this.#maxCount === Infinity\n      ? null\n      : this.#db.prepare(`\n        DELETE FROM cacheInterceptorV${VERSION}\n        WHERE id IN (\n          SELECT\n            id\n          FROM cacheInterceptorV${VERSION}\n          ORDER BY cachedAt ASC\n          LIMIT ?\n        )\n      `)\n  }\n\n  close () {\n    this.#db.close()\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @returns {(import('../../types/cache-interceptor.d.ts').default.GetResult & { body?: Buffer }) | undefined}\n   */\n  get (key) {\n    assertCacheKey(key)\n\n    const value = this.#findValue(key)\n    return value\n      ? {\n          body: value.body ? Buffer.from(value.body.buffer, value.body.byteOffset, value.body.byteLength) : undefined,\n          statusCode: value.statusCode,\n          statusMessage: value.statusMessage,\n          headers: value.headers ? JSON.parse(value.headers) : undefined,\n          etag: value.etag ? value.etag : undefined,\n          vary: value.vary ? JSON.parse(value.vary) : undefined,\n          cacheControlDirectives: value.cacheControlDirectives\n            ? JSON.parse(value.cacheControlDirectives)\n            : undefined,\n          cachedAt: value.cachedAt,\n          staleAt: value.staleAt,\n          deleteAt: value.deleteAt\n        }\n      : undefined\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue & { body: null | Buffer | Array<Buffer>}} value\n   */\n  set (key, value) {\n    assertCacheKey(key)\n\n    const url = this.#makeValueUrl(key)\n    const body = Array.isArray(value.body) ? Buffer.concat(value.body) : value.body\n    const size = body?.byteLength\n\n    if (size && size > this.#maxEntrySize) {\n      return\n    }\n\n    const existingValue = this.#findValue(key, true)\n    if (existingValue) {\n      // Updating an existing response, let's overwrite it\n      this.#updateValueQuery.run(\n        body,\n        value.deleteAt,\n        value.statusCode,\n        value.statusMessage,\n        value.headers ? JSON.stringify(value.headers) : null,\n        value.etag ? value.etag : null,\n        value.cacheControlDirectives ? JSON.stringify(value.cacheControlDirectives) : null,\n        value.vary ? JSON.stringify(value.vary) : null,\n        value.cachedAt,\n        value.staleAt,\n        existingValue.id\n      )\n    } else {\n      // New response, let's insert it\n      this.#insertValueQuery.run(\n        url,\n        key.method,\n        body,\n        value.deleteAt,\n        value.statusCode,\n        value.statusMessage,\n        value.headers ? JSON.stringify(value.headers) : null,\n        value.etag ? value.etag : null,\n        value.cacheControlDirectives ? JSON.stringify(value.cacheControlDirectives) : null,\n        value.vary ? JSON.stringify(value.vary) : null,\n        value.cachedAt,\n        value.staleAt\n      )\n      this.#prune()\n    }\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue} value\n   * @returns {Writable | undefined}\n   */\n  createWriteStream (key, value) {\n    assertCacheKey(key)\n    assertCacheValue(value)\n\n    let size = 0\n    /**\n     * @type {Buffer[] | null}\n     */\n    const body = []\n    const store = this\n\n    return new Writable({\n      decodeStrings: true,\n      write (chunk, encoding, callback) {\n        size += chunk.byteLength\n\n        if (size <= store.#maxEntrySize) {\n          body.push(chunk)\n        } else {\n          this.destroy()\n        }\n\n        callback()\n      },\n      final (callback) {\n        store.set(key, { ...value, body })\n        callback()\n      }\n    })\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   */\n  delete (key) {\n    if (typeof key !== 'object') {\n      throw new TypeError(`expected key to be object, got ${typeof key}`)\n    }\n\n    this.#deleteByUrlQuery.run(this.#makeValueUrl(key))\n  }\n\n  #prune () {\n    if (Number.isFinite(this.#maxCount) && this.size <= this.#maxCount) {\n      return 0\n    }\n\n    {\n      const removed = this.#deleteExpiredValuesQuery.run(Date.now()).changes\n      if (removed) {\n        return removed\n      }\n    }\n\n    {\n      const removed = this.#deleteOldValuesQuery?.run(Math.max(Math.floor(this.#maxCount * 0.1), 1)).changes\n      if (removed) {\n        return removed\n      }\n    }\n\n    return 0\n  }\n\n  /**\n   * Counts the number of rows in the cache\n   * @returns {Number}\n   */\n  get size () {\n    const { total } = this.#countEntriesQuery.get()\n    return total\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @returns {string}\n   */\n  #makeValueUrl (key) {\n    return `${key.origin}/${key.path}`\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {boolean} [canBeExpired=false]\n   * @returns {SqliteStoreValue | undefined}\n   */\n  #findValue (key, canBeExpired = false) {\n    const url = this.#makeValueUrl(key)\n    const { headers, method } = key\n\n    /**\n     * @type {SqliteStoreValue[]}\n     */\n    const values = this.#getValuesQuery.all(url, method)\n\n    if (values.length === 0) {\n      return undefined\n    }\n\n    const now = Date.now()\n    for (const value of values) {\n      if (now >= value.deleteAt && !canBeExpired) {\n        continue\n      }\n\n      let matches = true\n\n      if (value.vary) {\n        const vary = JSON.parse(value.vary)\n\n        for (const header in vary) {\n          if (!headerValueEquals(headers[header], vary[header])) {\n            matches = false\n            break\n          }\n        }\n      }\n\n      if (matches) {\n        return value\n      }\n    }\n\n    return undefined\n  }\n}\n\n/**\n * @param {string|string[]|null|undefined} lhs\n * @param {string|string[]|null|undefined} rhs\n * @returns {boolean}\n */\nfunction headerValueEquals (lhs, rhs) {\n  if (lhs == null && rhs == null) {\n    return true\n  }\n\n  if ((lhs == null && rhs != null) ||\n      (lhs != null && rhs == null)) {\n    return false\n  }\n\n  if (Array.isArray(lhs) && Array.isArray(rhs)) {\n    if (lhs.length !== rhs.length) {\n      return false\n    }\n\n    return lhs.every((x, i) => x === rhs[i])\n  }\n\n  return lhs === rhs\n}\n", "// https://github.com/Ethan-Arrowood/undici-fetch\n\n'use strict'\n\nconst { kConstruct } = require('../../core/symbols')\nconst { kEnumerableProperty } = require('../../core/util')\nconst {\n  iteratorMixin,\n  isValidHeaderName,\n  isValidHeaderValue\n} = require('./util')\nconst { webidl } = require('../webidl')\nconst assert = require('node:assert')\nconst util = require('node:util')\n\n/**\n * @param {number} code\n * @returns {code is (0x0a | 0x0d | 0x09 | 0x20)}\n */\nfunction isHTTPWhiteSpaceCharCode (code) {\n  return code === 0x0a || code === 0x0d || code === 0x09 || code === 0x20\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-header-value-normalize\n * @param {string} potentialValue\n * @returns {string}\n */\nfunction headerValueNormalize (potentialValue) {\n  //  To normalize a byte sequence potentialValue, remove\n  //  any leading and trailing HTTP whitespace bytes from\n  //  potentialValue.\n  let i = 0; let j = potentialValue.length\n\n  while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j - 1))) --j\n  while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i))) ++i\n\n  return i === 0 && j === potentialValue.length ? potentialValue : potentialValue.substring(i, j)\n}\n\n/**\n * @param {Headers} headers\n * @param {Array|Object} object\n */\nfunction fill (headers, object) {\n  // To fill a Headers object headers with a given object object, run these steps:\n\n  // 1. If object is a sequence, then for each header in object:\n  // Note: webidl conversion to array has already been done.\n  if (Array.isArray(object)) {\n    for (let i = 0; i < object.length; ++i) {\n      const header = object[i]\n      // 1. If header does not contain exactly two items, then throw a TypeError.\n      if (header.length !== 2) {\n        throw webidl.errors.exception({\n          header: 'Headers constructor',\n          message: `expected name/value pair to be length 2, found ${header.length}.`\n        })\n      }\n\n      // 2. Append (header\u2019s first item, header\u2019s second item) to headers.\n      appendHeader(headers, header[0], header[1])\n    }\n  } else if (typeof object === 'object' && object !== null) {\n    // Note: null should throw\n\n    // 2. Otherwise, object is a record, then for each key \u2192 value in object,\n    //    append (key, value) to headers\n    const keys = Object.keys(object)\n    for (let i = 0; i < keys.length; ++i) {\n      appendHeader(headers, keys[i], object[keys[i]])\n    }\n  } else {\n    throw webidl.errors.conversionFailed({\n      prefix: 'Headers constructor',\n      argument: 'Argument 1',\n      types: ['sequence<sequence<ByteString>>', 'record<ByteString, ByteString>']\n    })\n  }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-headers-append\n * @param {Headers} headers\n * @param {string} name\n * @param {string} value\n */\nfunction appendHeader (headers, name, value) {\n  // 1. Normalize value.\n  value = headerValueNormalize(value)\n\n  // 2. If name is not a header name or value is not a\n  //    header value, then throw a TypeError.\n  if (!isValidHeaderName(name)) {\n    throw webidl.errors.invalidArgument({\n      prefix: 'Headers.append',\n      value: name,\n      type: 'header name'\n    })\n  } else if (!isValidHeaderValue(value)) {\n    throw webidl.errors.invalidArgument({\n      prefix: 'Headers.append',\n      value,\n      type: 'header value'\n    })\n  }\n\n  // 3. If headers\u2019s guard is \"immutable\", then throw a TypeError.\n  // 4. Otherwise, if headers\u2019s guard is \"request\" and name is a\n  //    forbidden header name, return.\n  // 5. Otherwise, if headers\u2019s guard is \"request-no-cors\":\n  //    TODO\n  // Note: undici does not implement forbidden header names\n  if (getHeadersGuard(headers) === 'immutable') {\n    throw new TypeError('immutable')\n  }\n\n  // 6. Otherwise, if headers\u2019s guard is \"response\" and name is a\n  //    forbidden response-header name, return.\n\n  // 7. Append (name, value) to headers\u2019s header list.\n  return getHeadersList(headers).append(name, value, false)\n\n  // 8. If headers\u2019s guard is \"request-no-cors\", then remove\n  //    privileged no-CORS request headers from headers\n}\n\n// https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n/**\n * @param {Headers} target\n */\nfunction headersListSortAndCombine (target) {\n  const headersList = getHeadersList(target)\n\n  if (!headersList) {\n    return []\n  }\n\n  if (headersList.sortedMap) {\n    return headersList.sortedMap\n  }\n\n  // 1. Let headers be an empty list of headers with the key being the name\n  //    and value the value.\n  const headers = []\n\n  // 2. Let names be the result of convert header names to a sorted-lowercase\n  //    set with all the names of the headers in list.\n  const names = headersList.toSortedArray()\n\n  const cookies = headersList.cookies\n\n  // fast-path\n  if (cookies === null || cookies.length === 1) {\n    // Note: The non-null assertion of value has already been done by `HeadersList#toSortedArray`\n    return (headersList.sortedMap = names)\n  }\n\n  // 3. For each name of names:\n  for (let i = 0; i < names.length; ++i) {\n    const { 0: name, 1: value } = names[i]\n    // 1. If name is `set-cookie`, then:\n    if (name === 'set-cookie') {\n      // 1. Let values be a list of all values of headers in list whose name\n      //    is a byte-case-insensitive match for name, in order.\n\n      // 2. For each value of values:\n      // 1. Append (name, value) to headers.\n      for (let j = 0; j < cookies.length; ++j) {\n        headers.push([name, cookies[j]])\n      }\n    } else {\n      // 2. Otherwise:\n\n      // 1. Let value be the result of getting name from list.\n\n      // 2. Assert: value is non-null.\n      // Note: This operation was done by `HeadersList#toSortedArray`.\n\n      // 3. Append (name, value) to headers.\n      headers.push([name, value])\n    }\n  }\n\n  // 4. Return headers.\n  return (headersList.sortedMap = headers)\n}\n\nfunction compareHeaderName (a, b) {\n  return a[0] < b[0] ? -1 : 1\n}\n\nclass HeadersList {\n  /** @type {[string, string][]|null} */\n  cookies = null\n\n  sortedMap\n  headersMap\n\n  constructor (init) {\n    if (init instanceof HeadersList) {\n      this.headersMap = new Map(init.headersMap)\n      this.sortedMap = init.sortedMap\n      this.cookies = init.cookies === null ? null : [...init.cookies]\n    } else {\n      this.headersMap = new Map(init)\n      this.sortedMap = null\n    }\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#header-list-contains\n   * @param {string} name\n   * @param {boolean} isLowerCase\n   */\n  contains (name, isLowerCase) {\n    // A header list list contains a header name name if list\n    // contains a header whose name is a byte-case-insensitive\n    // match for name.\n\n    return this.headersMap.has(isLowerCase ? name : name.toLowerCase())\n  }\n\n  clear () {\n    this.headersMap.clear()\n    this.sortedMap = null\n    this.cookies = null\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-append\n   * @param {string} name\n   * @param {string} value\n   * @param {boolean} isLowerCase\n   */\n  append (name, value, isLowerCase) {\n    this.sortedMap = null\n\n    // 1. If list contains name, then set name to the first such\n    //    header\u2019s name.\n    const lowercaseName = isLowerCase ? name : name.toLowerCase()\n    const exists = this.headersMap.get(lowercaseName)\n\n    // 2. Append (name, value) to list.\n    if (exists) {\n      const delimiter = lowercaseName === 'cookie' ? '; ' : ', '\n      this.headersMap.set(lowercaseName, {\n        name: exists.name,\n        value: `${exists.value}${delimiter}${value}`\n      })\n    } else {\n      this.headersMap.set(lowercaseName, { name, value })\n    }\n\n    if (lowercaseName === 'set-cookie') {\n      (this.cookies ??= []).push(value)\n    }\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-set\n   * @param {string} name\n   * @param {string} value\n   * @param {boolean} isLowerCase\n   */\n  set (name, value, isLowerCase) {\n    this.sortedMap = null\n    const lowercaseName = isLowerCase ? name : name.toLowerCase()\n\n    if (lowercaseName === 'set-cookie') {\n      this.cookies = [value]\n    }\n\n    // 1. If list contains name, then set the value of\n    //    the first such header to value and remove the\n    //    others.\n    // 2. Otherwise, append header (name, value) to list.\n    this.headersMap.set(lowercaseName, { name, value })\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-delete\n   * @param {string} name\n   * @param {boolean} isLowerCase\n   */\n  delete (name, isLowerCase) {\n    this.sortedMap = null\n    if (!isLowerCase) name = name.toLowerCase()\n\n    if (name === 'set-cookie') {\n      this.cookies = null\n    }\n\n    this.headersMap.delete(name)\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-get\n   * @param {string} name\n   * @param {boolean} isLowerCase\n   * @returns {string | null}\n   */\n  get (name, isLowerCase) {\n    // 1. If list does not contain name, then return null.\n    // 2. Return the values of all headers in list whose name\n    //    is a byte-case-insensitive match for name,\n    //    separated from each other by 0x2C 0x20, in order.\n    return this.headersMap.get(isLowerCase ? name : name.toLowerCase())?.value ?? null\n  }\n\n  * [Symbol.iterator] () {\n    // use the lowercased name\n    for (const { 0: name, 1: { value } } of this.headersMap) {\n      yield [name, value]\n    }\n  }\n\n  get entries () {\n    const headers = {}\n\n    if (this.headersMap.size !== 0) {\n      for (const { name, value } of this.headersMap.values()) {\n        headers[name] = value\n      }\n    }\n\n    return headers\n  }\n\n  rawValues () {\n    return this.headersMap.values()\n  }\n\n  get entriesList () {\n    const headers = []\n\n    if (this.headersMap.size !== 0) {\n      for (const { 0: lowerName, 1: { name, value } } of this.headersMap) {\n        if (lowerName === 'set-cookie') {\n          for (const cookie of this.cookies) {\n            headers.push([name, cookie])\n          }\n        } else {\n          headers.push([name, value])\n        }\n      }\n    }\n\n    return headers\n  }\n\n  // https://fetch.spec.whatwg.org/#convert-header-names-to-a-sorted-lowercase-set\n  toSortedArray () {\n    const size = this.headersMap.size\n    const array = new Array(size)\n    // In most cases, you will use the fast-path.\n    // fast-path: Use binary insertion sort for small arrays.\n    if (size <= 32) {\n      if (size === 0) {\n        // If empty, it is an empty array. To avoid the first index assignment.\n        return array\n      }\n      // Improve performance by unrolling loop and avoiding double-loop.\n      // Double-loop-less version of the binary insertion sort.\n      const iterator = this.headersMap[Symbol.iterator]()\n      const firstValue = iterator.next().value\n      // set [name, value] to first index.\n      array[0] = [firstValue[0], firstValue[1].value]\n      // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n      // 3.2.2. Assert: value is non-null.\n      assert(firstValue[1].value !== null)\n      for (\n        let i = 1, j = 0, right = 0, left = 0, pivot = 0, x, value;\n        i < size;\n        ++i\n      ) {\n        // get next value\n        value = iterator.next().value\n        // set [name, value] to current index.\n        x = array[i] = [value[0], value[1].value]\n        // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n        // 3.2.2. Assert: value is non-null.\n        assert(x[1] !== null)\n        left = 0\n        right = i\n        // binary search\n        while (left < right) {\n          // middle index\n          pivot = left + ((right - left) >> 1)\n          // compare header name\n          if (array[pivot][0] <= x[0]) {\n            left = pivot + 1\n          } else {\n            right = pivot\n          }\n        }\n        if (i !== pivot) {\n          j = i\n          while (j > left) {\n            array[j] = array[--j]\n          }\n          array[left] = x\n        }\n      }\n      /* c8 ignore next 4 */\n      if (!iterator.next().done) {\n        // This is for debugging and will never be called.\n        throw new TypeError('Unreachable')\n      }\n      return array\n    } else {\n      // This case would be a rare occurrence.\n      // slow-path: fallback\n      let i = 0\n      for (const { 0: name, 1: { value } } of this.headersMap) {\n        array[i++] = [name, value]\n        // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n        // 3.2.2. Assert: value is non-null.\n        assert(value !== null)\n      }\n      return array.sort(compareHeaderName)\n    }\n  }\n}\n\n// https://fetch.spec.whatwg.org/#headers-class\nclass Headers {\n  #guard\n  /**\n   * @type {HeadersList}\n   */\n  #headersList\n\n  /**\n   * @param {HeadersInit|Symbol} [init]\n   * @returns\n   */\n  constructor (init = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (init === kConstruct) {\n      return\n    }\n\n    this.#headersList = new HeadersList()\n\n    // The new Headers(init) constructor steps are:\n\n    // 1. Set this\u2019s guard to \"none\".\n    this.#guard = 'none'\n\n    // 2. If init is given, then fill this with init.\n    if (init !== undefined) {\n      init = webidl.converters.HeadersInit(init, 'Headers constructor', 'init')\n      fill(this, init)\n    }\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-append\n  append (name, value) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 2, 'Headers.append')\n\n    const prefix = 'Headers.append'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n    value = webidl.converters.ByteString(value, prefix, 'value')\n\n    return appendHeader(this, name, value)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-delete\n  delete (name) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 1, 'Headers.delete')\n\n    const prefix = 'Headers.delete'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n\n    // 1. If name is not a header name, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix: 'Headers.delete',\n        value: name,\n        type: 'header name'\n      })\n    }\n\n    // 2. If this\u2019s guard is \"immutable\", then throw a TypeError.\n    // 3. Otherwise, if this\u2019s guard is \"request\" and name is a\n    //    forbidden header name, return.\n    // 4. Otherwise, if this\u2019s guard is \"request-no-cors\", name\n    //    is not a no-CORS-safelisted request-header name, and\n    //    name is not a privileged no-CORS request-header name,\n    //    return.\n    // 5. Otherwise, if this\u2019s guard is \"response\" and name is\n    //    a forbidden response-header name, return.\n    // Note: undici does not implement forbidden header names\n    if (this.#guard === 'immutable') {\n      throw new TypeError('immutable')\n    }\n\n    // 6. If this\u2019s header list does not contain name, then\n    //    return.\n    if (!this.#headersList.contains(name, false)) {\n      return\n    }\n\n    // 7. Delete name from this\u2019s header list.\n    // 8. If this\u2019s guard is \"request-no-cors\", then remove\n    //    privileged no-CORS request headers from this.\n    this.#headersList.delete(name, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-get\n  get (name) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 1, 'Headers.get')\n\n    const prefix = 'Headers.get'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n\n    // 1. If name is not a header name, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value: name,\n        type: 'header name'\n      })\n    }\n\n    // 2. Return the result of getting name from this\u2019s header\n    //    list.\n    return this.#headersList.get(name, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-has\n  has (name) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 1, 'Headers.has')\n\n    const prefix = 'Headers.has'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n\n    // 1. If name is not a header name, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value: name,\n        type: 'header name'\n      })\n    }\n\n    // 2. Return true if this\u2019s header list contains name;\n    //    otherwise false.\n    return this.#headersList.contains(name, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-set\n  set (name, value) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 2, 'Headers.set')\n\n    const prefix = 'Headers.set'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n    value = webidl.converters.ByteString(value, prefix, 'value')\n\n    // 1. Normalize value.\n    value = headerValueNormalize(value)\n\n    // 2. If name is not a header name or value is not a\n    //    header value, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value: name,\n        type: 'header name'\n      })\n    } else if (!isValidHeaderValue(value)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value,\n        type: 'header value'\n      })\n    }\n\n    // 3. If this\u2019s guard is \"immutable\", then throw a TypeError.\n    // 4. Otherwise, if this\u2019s guard is \"request\" and name is a\n    //    forbidden header name, return.\n    // 5. Otherwise, if this\u2019s guard is \"request-no-cors\" and\n    //    name/value is not a no-CORS-safelisted request-header,\n    //    return.\n    // 6. Otherwise, if this\u2019s guard is \"response\" and name is a\n    //    forbidden response-header name, return.\n    // Note: undici does not implement forbidden header names\n    if (this.#guard === 'immutable') {\n      throw new TypeError('immutable')\n    }\n\n    // 7. Set (name, value) in this\u2019s header list.\n    // 8. If this\u2019s guard is \"request-no-cors\", then remove\n    //    privileged no-CORS request headers from this\n    this.#headersList.set(name, value, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie\n  getSetCookie () {\n    webidl.brandCheck(this, Headers)\n\n    // 1. If this\u2019s header list does not contain `Set-Cookie`, then return \u00AB \u00BB.\n    // 2. Return the values of all headers in this\u2019s header list whose name is\n    //    a byte-case-insensitive match for `Set-Cookie`, in order.\n\n    const list = this.#headersList.cookies\n\n    if (list) {\n      return [...list]\n    }\n\n    return []\n  }\n\n  [util.inspect.custom] (depth, options) {\n    options.depth ??= depth\n\n    return `Headers ${util.formatWithOptions(options, this.#headersList.entries)}`\n  }\n\n  static getHeadersGuard (o) {\n    return o.#guard\n  }\n\n  static setHeadersGuard (o, guard) {\n    o.#guard = guard\n  }\n\n  /**\n   * @param {Headers} o\n   */\n  static getHeadersList (o) {\n    return o.#headersList\n  }\n\n  /**\n   * @param {Headers} target\n   * @param {HeadersList} list\n   */\n  static setHeadersList (target, list) {\n    target.#headersList = list\n  }\n}\n\nconst { getHeadersGuard, setHeadersGuard, getHeadersList, setHeadersList } = Headers\nReflect.deleteProperty(Headers, 'getHeadersGuard')\nReflect.deleteProperty(Headers, 'setHeadersGuard')\nReflect.deleteProperty(Headers, 'getHeadersList')\nReflect.deleteProperty(Headers, 'setHeadersList')\n\niteratorMixin('Headers', Headers, headersListSortAndCombine, 0, 1)\n\nObject.defineProperties(Headers.prototype, {\n  append: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  get: kEnumerableProperty,\n  has: kEnumerableProperty,\n  set: kEnumerableProperty,\n  getSetCookie: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'Headers',\n    configurable: true\n  },\n  [util.inspect.custom]: {\n    enumerable: false\n  }\n})\n\nwebidl.converters.HeadersInit = function (V, prefix, argument) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT) {\n    const iterator = Reflect.get(V, Symbol.iterator)\n\n    // A work-around to ensure we send the properly-cased Headers when V is a Headers object.\n    // Read https://github.com/nodejs/undici/pull/3159#issuecomment-2075537226 before touching, please.\n    if (!util.types.isProxy(V) && iterator === Headers.prototype.entries) { // Headers object\n      try {\n        return getHeadersList(V).entriesList\n      } catch {\n        // fall-through\n      }\n    }\n\n    if (typeof iterator === 'function') {\n      return webidl.converters['sequence<sequence<ByteString>>'](V, prefix, argument, iterator.bind(V))\n    }\n\n    return webidl.converters['record<ByteString, ByteString>'](V, prefix, argument)\n  }\n\n  throw webidl.errors.conversionFailed({\n    prefix: 'Headers constructor',\n    argument: 'Argument 1',\n    types: ['sequence<sequence<ByteString>>', 'record<ByteString, ByteString>']\n  })\n}\n\nmodule.exports = {\n  fill,\n  // for test.\n  compareHeaderName,\n  Headers,\n  HeadersList,\n  getHeadersGuard,\n  setHeadersGuard,\n  setHeadersList,\n  getHeadersList\n}\n", "'use strict'\n\nconst { Headers, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require('./headers')\nconst { extractBody, cloneBody, mixinBody, streamRegistry, bodyUnusable } = require('./body')\nconst util = require('../../core/util')\nconst nodeUtil = require('node:util')\nconst { kEnumerableProperty } = util\nconst {\n  isValidReasonPhrase,\n  isCancelled,\n  isAborted,\n  isErrorLike,\n  environmentSettingsObject: relevantRealm\n} = require('./util')\nconst {\n  redirectStatusSet,\n  nullBodyStatus\n} = require('./constants')\nconst { webidl } = require('../webidl')\nconst { URLSerializer } = require('./data-url')\nconst { kConstruct } = require('../../core/symbols')\nconst assert = require('node:assert')\nconst { isomorphicEncode, serializeJavascriptValueToJSONString } = require('../infra')\n\nconst textEncoder = new TextEncoder('utf-8')\n\n// https://fetch.spec.whatwg.org/#response-class\nclass Response {\n  /** @type {Headers} */\n  #headers\n\n  #state\n\n  // Creates network error Response.\n  static error () {\n    // The static error() method steps are to return the result of creating a\n    // Response object, given a new network error, \"immutable\", and this\u2019s\n    // relevant Realm.\n    const responseObject = fromInnerResponse(makeNetworkError(), 'immutable')\n\n    return responseObject\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-response-json\n  static json (data, init = undefined) {\n    webidl.argumentLengthCheck(arguments, 1, 'Response.json')\n\n    if (init !== null) {\n      init = webidl.converters.ResponseInit(init)\n    }\n\n    // 1. Let bytes the result of running serialize a JavaScript value to JSON bytes on data.\n    const bytes = textEncoder.encode(\n      serializeJavascriptValueToJSONString(data)\n    )\n\n    // 2. Let body be the result of extracting bytes.\n    const body = extractBody(bytes)\n\n    // 3. Let responseObject be the result of creating a Response object, given a new response,\n    //    \"response\", and this\u2019s relevant Realm.\n    const responseObject = fromInnerResponse(makeResponse({}), 'response')\n\n    // 4. Perform initialize a response given responseObject, init, and (body, \"application/json\").\n    initializeResponse(responseObject, init, { body: body[0], type: 'application/json' })\n\n    // 5. Return responseObject.\n    return responseObject\n  }\n\n  // Creates a redirect Response that redirects to url with status status.\n  static redirect (url, status = 302) {\n    webidl.argumentLengthCheck(arguments, 1, 'Response.redirect')\n\n    url = webidl.converters.USVString(url)\n    status = webidl.converters['unsigned short'](status)\n\n    // 1. Let parsedURL be the result of parsing url with current settings\n    // object\u2019s API base URL.\n    // 2. If parsedURL is failure, then throw a TypeError.\n    // TODO: base-URL?\n    let parsedURL\n    try {\n      parsedURL = new URL(url, relevantRealm.settingsObject.baseUrl)\n    } catch (err) {\n      throw new TypeError(`Failed to parse URL from ${url}`, { cause: err })\n    }\n\n    // 3. If status is not a redirect status, then throw a RangeError.\n    if (!redirectStatusSet.has(status)) {\n      throw new RangeError(`Invalid status code ${status}`)\n    }\n\n    // 4. Let responseObject be the result of creating a Response object,\n    // given a new response, \"immutable\", and this\u2019s relevant Realm.\n    const responseObject = fromInnerResponse(makeResponse({}), 'immutable')\n\n    // 5. Set responseObject\u2019s response\u2019s status to status.\n    responseObject.#state.status = status\n\n    // 6. Let value be parsedURL, serialized and isomorphic encoded.\n    const value = isomorphicEncode(URLSerializer(parsedURL))\n\n    // 7. Append `Location`/value to responseObject\u2019s response\u2019s header list.\n    responseObject.#state.headersList.append('location', value, true)\n\n    // 8. Return responseObject.\n    return responseObject\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-response\n  constructor (body = null, init = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (body === kConstruct) {\n      return\n    }\n\n    if (body !== null) {\n      body = webidl.converters.BodyInit(body, 'Response', 'body')\n    }\n\n    init = webidl.converters.ResponseInit(init)\n\n    // 1. Set this\u2019s response to a new response.\n    this.#state = makeResponse({})\n\n    // 2. Set this\u2019s headers to a new Headers object with this\u2019s relevant\n    // Realm, whose header list is this\u2019s response\u2019s header list and guard\n    // is \"response\".\n    this.#headers = new Headers(kConstruct)\n    setHeadersGuard(this.#headers, 'response')\n    setHeadersList(this.#headers, this.#state.headersList)\n\n    // 3. Let bodyWithType be null.\n    let bodyWithType = null\n\n    // 4. If body is non-null, then set bodyWithType to the result of extracting body.\n    if (body != null) {\n      const [extractedBody, type] = extractBody(body)\n      bodyWithType = { body: extractedBody, type }\n    }\n\n    // 5. Perform initialize a response given this, init, and bodyWithType.\n    initializeResponse(this, init, bodyWithType)\n  }\n\n  // Returns response\u2019s type, e.g., \"cors\".\n  get type () {\n    webidl.brandCheck(this, Response)\n\n    // The type getter steps are to return this\u2019s response\u2019s type.\n    return this.#state.type\n  }\n\n  // Returns response\u2019s URL, if it has one; otherwise the empty string.\n  get url () {\n    webidl.brandCheck(this, Response)\n\n    const urlList = this.#state.urlList\n\n    // The url getter steps are to return the empty string if this\u2019s\n    // response\u2019s URL is null; otherwise this\u2019s response\u2019s URL,\n    // serialized with exclude fragment set to true.\n    const url = urlList[urlList.length - 1] ?? null\n\n    if (url === null) {\n      return ''\n    }\n\n    return URLSerializer(url, true)\n  }\n\n  // Returns whether response was obtained through a redirect.\n  get redirected () {\n    webidl.brandCheck(this, Response)\n\n    // The redirected getter steps are to return true if this\u2019s response\u2019s URL\n    // list has more than one item; otherwise false.\n    return this.#state.urlList.length > 1\n  }\n\n  // Returns response\u2019s status.\n  get status () {\n    webidl.brandCheck(this, Response)\n\n    // The status getter steps are to return this\u2019s response\u2019s status.\n    return this.#state.status\n  }\n\n  // Returns whether response\u2019s status is an ok status.\n  get ok () {\n    webidl.brandCheck(this, Response)\n\n    // The ok getter steps are to return true if this\u2019s response\u2019s status is an\n    // ok status; otherwise false.\n    return this.#state.status >= 200 && this.#state.status <= 299\n  }\n\n  // Returns response\u2019s status message.\n  get statusText () {\n    webidl.brandCheck(this, Response)\n\n    // The statusText getter steps are to return this\u2019s response\u2019s status\n    // message.\n    return this.#state.statusText\n  }\n\n  // Returns response\u2019s headers as Headers.\n  get headers () {\n    webidl.brandCheck(this, Response)\n\n    // The headers getter steps are to return this\u2019s headers.\n    return this.#headers\n  }\n\n  get body () {\n    webidl.brandCheck(this, Response)\n\n    return this.#state.body ? this.#state.body.stream : null\n  }\n\n  get bodyUsed () {\n    webidl.brandCheck(this, Response)\n\n    return !!this.#state.body && util.isDisturbed(this.#state.body.stream)\n  }\n\n  // Returns a clone of response.\n  clone () {\n    webidl.brandCheck(this, Response)\n\n    // 1. If this is unusable, then throw a TypeError.\n    if (bodyUnusable(this.#state)) {\n      throw webidl.errors.exception({\n        header: 'Response.clone',\n        message: 'Body has already been consumed.'\n      })\n    }\n\n    // 2. Let clonedResponse be the result of cloning this\u2019s response.\n    const clonedResponse = cloneResponse(this.#state)\n\n    // Note: To re-register because of a new stream.\n    // Don't set finalizers other than for fetch responses.\n    if (this.#state.urlList.length !== 0 && this.#state.body?.stream) {\n      streamRegistry.register(this, new WeakRef(this.#state.body.stream))\n    }\n\n    // 3. Return the result of creating a Response object, given\n    // clonedResponse, this\u2019s headers\u2019s guard, and this\u2019s relevant Realm.\n    return fromInnerResponse(clonedResponse, getHeadersGuard(this.#headers))\n  }\n\n  [nodeUtil.inspect.custom] (depth, options) {\n    if (options.depth === null) {\n      options.depth = 2\n    }\n\n    options.colors ??= true\n\n    const properties = {\n      status: this.status,\n      statusText: this.statusText,\n      headers: this.headers,\n      body: this.body,\n      bodyUsed: this.bodyUsed,\n      ok: this.ok,\n      redirected: this.redirected,\n      type: this.type,\n      url: this.url\n    }\n\n    return `Response ${nodeUtil.formatWithOptions(options, properties)}`\n  }\n\n  /**\n   * @param {Response} response\n   */\n  static getResponseHeaders (response) {\n    return response.#headers\n  }\n\n  /**\n   * @param {Response} response\n   * @param {Headers} newHeaders\n   */\n  static setResponseHeaders (response, newHeaders) {\n    response.#headers = newHeaders\n  }\n\n  /**\n   * @param {Response} response\n   */\n  static getResponseState (response) {\n    return response.#state\n  }\n\n  /**\n   * @param {Response} response\n   * @param {any} newState\n   */\n  static setResponseState (response, newState) {\n    response.#state = newState\n  }\n}\n\nconst { getResponseHeaders, setResponseHeaders, getResponseState, setResponseState } = Response\nReflect.deleteProperty(Response, 'getResponseHeaders')\nReflect.deleteProperty(Response, 'setResponseHeaders')\nReflect.deleteProperty(Response, 'getResponseState')\nReflect.deleteProperty(Response, 'setResponseState')\n\nmixinBody(Response, getResponseState)\n\nObject.defineProperties(Response.prototype, {\n  type: kEnumerableProperty,\n  url: kEnumerableProperty,\n  status: kEnumerableProperty,\n  ok: kEnumerableProperty,\n  redirected: kEnumerableProperty,\n  statusText: kEnumerableProperty,\n  headers: kEnumerableProperty,\n  clone: kEnumerableProperty,\n  body: kEnumerableProperty,\n  bodyUsed: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'Response',\n    configurable: true\n  }\n})\n\nObject.defineProperties(Response, {\n  json: kEnumerableProperty,\n  redirect: kEnumerableProperty,\n  error: kEnumerableProperty\n})\n\n// https://fetch.spec.whatwg.org/#concept-response-clone\nfunction cloneResponse (response) {\n  // To clone a response response, run these steps:\n\n  // 1. If response is a filtered response, then return a new identical\n  // filtered response whose internal response is a clone of response\u2019s\n  // internal response.\n  if (response.internalResponse) {\n    return filterResponse(\n      cloneResponse(response.internalResponse),\n      response.type\n    )\n  }\n\n  // 2. Let newResponse be a copy of response, except for its body.\n  const newResponse = makeResponse({ ...response, body: null })\n\n  // 3. If response\u2019s body is non-null, then set newResponse\u2019s body to the\n  // result of cloning response\u2019s body.\n  if (response.body != null) {\n    newResponse.body = cloneBody(response.body)\n  }\n\n  // 4. Return newResponse.\n  return newResponse\n}\n\nfunction makeResponse (init) {\n  return {\n    aborted: false,\n    rangeRequested: false,\n    timingAllowPassed: false,\n    requestIncludesCredentials: false,\n    type: 'default',\n    status: 200,\n    timingInfo: null,\n    cacheState: '',\n    statusText: '',\n    ...init,\n    headersList: init?.headersList\n      ? new HeadersList(init?.headersList)\n      : new HeadersList(),\n    urlList: init?.urlList ? [...init.urlList] : []\n  }\n}\n\nfunction makeNetworkError (reason) {\n  const isError = isErrorLike(reason)\n  return makeResponse({\n    type: 'error',\n    status: 0,\n    error: isError\n      ? reason\n      : new Error(reason ? String(reason) : reason),\n    aborted: reason && reason.name === 'AbortError'\n  })\n}\n\n// @see https://fetch.spec.whatwg.org/#concept-network-error\nfunction isNetworkError (response) {\n  return (\n    // A network error is a response whose type is \"error\",\n    response.type === 'error' &&\n    // status is 0\n    response.status === 0\n  )\n}\n\nfunction makeFilteredResponse (response, state) {\n  state = {\n    internalResponse: response,\n    ...state\n  }\n\n  return new Proxy(response, {\n    get (target, p) {\n      return p in state ? state[p] : target[p]\n    },\n    set (target, p, value) {\n      assert(!(p in state))\n      target[p] = value\n      return true\n    }\n  })\n}\n\n// https://fetch.spec.whatwg.org/#concept-filtered-response\nfunction filterResponse (response, type) {\n  // Set response to the following filtered response with response as its\n  // internal response, depending on request\u2019s response tainting:\n  if (type === 'basic') {\n    // A basic filtered response is a filtered response whose type is \"basic\"\n    // and header list excludes any headers in internal response\u2019s header list\n    // whose name is a forbidden response-header name.\n\n    // Note: undici does not implement forbidden response-header names\n    return makeFilteredResponse(response, {\n      type: 'basic',\n      headersList: response.headersList\n    })\n  } else if (type === 'cors') {\n    // A CORS filtered response is a filtered response whose type is \"cors\"\n    // and header list excludes any headers in internal response\u2019s header\n    // list whose name is not a CORS-safelisted response-header name, given\n    // internal response\u2019s CORS-exposed header-name list.\n\n    // Note: undici does not implement CORS-safelisted response-header names\n    return makeFilteredResponse(response, {\n      type: 'cors',\n      headersList: response.headersList\n    })\n  } else if (type === 'opaque') {\n    // An opaque filtered response is a filtered response whose type is\n    // \"opaque\", URL list is the empty list, status is 0, status message\n    // is the empty byte sequence, header list is empty, and body is null.\n\n    return makeFilteredResponse(response, {\n      type: 'opaque',\n      urlList: [],\n      status: 0,\n      statusText: '',\n      body: null\n    })\n  } else if (type === 'opaqueredirect') {\n    // An opaque-redirect filtered response is a filtered response whose type\n    // is \"opaqueredirect\", status is 0, status message is the empty byte\n    // sequence, header list is empty, and body is null.\n\n    return makeFilteredResponse(response, {\n      type: 'opaqueredirect',\n      status: 0,\n      statusText: '',\n      headersList: [],\n      body: null\n    })\n  } else {\n    assert(false)\n  }\n}\n\n// https://fetch.spec.whatwg.org/#appropriate-network-error\nfunction makeAppropriateNetworkError (fetchParams, err = null) {\n  // 1. Assert: fetchParams is canceled.\n  assert(isCancelled(fetchParams))\n\n  // 2. Return an aborted network error if fetchParams is aborted;\n  // otherwise return a network error.\n  return isAborted(fetchParams)\n    ? makeNetworkError(Object.assign(new DOMException('The operation was aborted.', 'AbortError'), { cause: err }))\n    : makeNetworkError(Object.assign(new DOMException('Request was cancelled.'), { cause: err }))\n}\n\n// https://whatpr.org/fetch/1392.html#initialize-a-response\nfunction initializeResponse (response, init, body) {\n  // 1. If init[\"status\"] is not in the range 200 to 599, inclusive, then\n  //    throw a RangeError.\n  if (init.status !== null && (init.status < 200 || init.status > 599)) {\n    throw new RangeError('init[\"status\"] must be in the range of 200 to 599, inclusive.')\n  }\n\n  // 2. If init[\"statusText\"] does not match the reason-phrase token production,\n  //    then throw a TypeError.\n  if ('statusText' in init && init.statusText != null) {\n    // See, https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2:\n    //   reason-phrase  = *( HTAB / SP / VCHAR / obs-text )\n    if (!isValidReasonPhrase(String(init.statusText))) {\n      throw new TypeError('Invalid statusText')\n    }\n  }\n\n  // 3. Set response\u2019s response\u2019s status to init[\"status\"].\n  if ('status' in init && init.status != null) {\n    getResponseState(response).status = init.status\n  }\n\n  // 4. Set response\u2019s response\u2019s status message to init[\"statusText\"].\n  if ('statusText' in init && init.statusText != null) {\n    getResponseState(response).statusText = init.statusText\n  }\n\n  // 5. If init[\"headers\"] exists, then fill response\u2019s headers with init[\"headers\"].\n  if ('headers' in init && init.headers != null) {\n    fill(getResponseHeaders(response), init.headers)\n  }\n\n  // 6. If body was given, then:\n  if (body) {\n    // 1. If response's status is a null body status, then throw a TypeError.\n    if (nullBodyStatus.includes(response.status)) {\n      throw webidl.errors.exception({\n        header: 'Response constructor',\n        message: `Invalid response status code ${response.status}`\n      })\n    }\n\n    // 2. Set response's body to body's body.\n    getResponseState(response).body = body.body\n\n    // 3. If body's type is non-null and response's header list does not contain\n    //    `Content-Type`, then append (`Content-Type`, body's type) to response's header list.\n    if (body.type != null && !getResponseState(response).headersList.contains('content-type', true)) {\n      getResponseState(response).headersList.append('content-type', body.type, true)\n    }\n  }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#response-create\n * @param {any} innerResponse\n * @param {'request' | 'immutable' | 'request-no-cors' | 'response' | 'none'} guard\n * @returns {Response}\n */\nfunction fromInnerResponse (innerResponse, guard) {\n  const response = new Response(kConstruct)\n  setResponseState(response, innerResponse)\n  const headers = new Headers(kConstruct)\n  setResponseHeaders(response, headers)\n  setHeadersList(headers, innerResponse.headersList)\n  setHeadersGuard(headers, guard)\n\n  // Note: If innerResponse's urlList contains a URL, it is a fetch response.\n  if (innerResponse.urlList.length !== 0 && innerResponse.body?.stream) {\n    // If the target (response) is reclaimed, the cleanup callback may be called at some point with\n    // the held value provided for it (innerResponse.body.stream). The held value can be any value:\n    // a primitive or an object, even undefined. If the held value is an object, the registry keeps\n    // a strong reference to it (so it can pass it to the cleanup callback later). Reworded from\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n    streamRegistry.register(response, new WeakRef(innerResponse.body.stream))\n  }\n\n  return response\n}\n\n// https://fetch.spec.whatwg.org/#typedefdef-xmlhttprequestbodyinit\nwebidl.converters.XMLHttpRequestBodyInit = function (V, prefix, name) {\n  if (typeof V === 'string') {\n    return webidl.converters.USVString(V, prefix, name)\n  }\n\n  if (webidl.is.Blob(V)) {\n    return V\n  }\n\n  if (webidl.is.BufferSource(V)) {\n    return V\n  }\n\n  if (webidl.is.FormData(V)) {\n    return V\n  }\n\n  if (webidl.is.URLSearchParams(V)) {\n    return V\n  }\n\n  return webidl.converters.DOMString(V, prefix, name)\n}\n\n// https://fetch.spec.whatwg.org/#bodyinit\nwebidl.converters.BodyInit = function (V, prefix, argument) {\n  if (webidl.is.ReadableStream(V)) {\n    return V\n  }\n\n  // Note: the spec doesn't include async iterables,\n  // this is an undici extension.\n  if (V?.[Symbol.asyncIterator]) {\n    return V\n  }\n\n  return webidl.converters.XMLHttpRequestBodyInit(V, prefix, argument)\n}\n\nwebidl.converters.ResponseInit = webidl.dictionaryConverter([\n  {\n    key: 'status',\n    converter: webidl.converters['unsigned short'],\n    defaultValue: () => 200\n  },\n  {\n    key: 'statusText',\n    converter: webidl.converters.ByteString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'headers',\n    converter: webidl.converters.HeadersInit\n  }\n])\n\nwebidl.is.Response = webidl.util.MakeTypeAssertion(Response)\n\nmodule.exports = {\n  isNetworkError,\n  makeNetworkError,\n  makeResponse,\n  makeAppropriateNetworkError,\n  filterResponse,\n  Response,\n  cloneResponse,\n  fromInnerResponse,\n  getResponseState\n}\n", "/* globals AbortController */\n\n'use strict'\n\nconst { extractBody, mixinBody, cloneBody, bodyUnusable } = require('./body')\nconst { Headers, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require('./headers')\nconst util = require('../../core/util')\nconst nodeUtil = require('node:util')\nconst {\n  isValidHTTPToken,\n  sameOrigin,\n  environmentSettingsObject\n} = require('./util')\nconst {\n  forbiddenMethodsSet,\n  corsSafeListedMethodsSet,\n  referrerPolicy,\n  requestRedirect,\n  requestMode,\n  requestCredentials,\n  requestCache,\n  requestDuplex\n} = require('./constants')\nconst { kEnumerableProperty, normalizedMethodRecordsBase, normalizedMethodRecords } = util\nconst { webidl } = require('../webidl')\nconst { URLSerializer } = require('./data-url')\nconst { kConstruct } = require('../../core/symbols')\nconst assert = require('node:assert')\nconst { getMaxListeners, setMaxListeners, defaultMaxListeners } = require('node:events')\n\nconst kAbortController = Symbol('abortController')\n\nconst requestFinalizer = new FinalizationRegistry(({ signal, abort }) => {\n  signal.removeEventListener('abort', abort)\n})\n\nconst dependentControllerMap = new WeakMap()\n\nlet abortSignalHasEventHandlerLeakWarning\n\ntry {\n  abortSignalHasEventHandlerLeakWarning = getMaxListeners(new AbortController().signal) > 0\n} catch {\n  abortSignalHasEventHandlerLeakWarning = false\n}\n\nfunction buildAbort (acRef) {\n  return abort\n\n  function abort () {\n    const ac = acRef.deref()\n    if (ac !== undefined) {\n      // Currently, there is a problem with FinalizationRegistry.\n      // https://github.com/nodejs/node/issues/49344\n      // https://github.com/nodejs/node/issues/47748\n      // In the case of abort, the first step is to unregister from it.\n      // If the controller can refer to it, it is still registered.\n      // It will be removed in the future.\n      requestFinalizer.unregister(abort)\n\n      // Unsubscribe a listener.\n      // FinalizationRegistry will no longer be called, so this must be done.\n      this.removeEventListener('abort', abort)\n\n      ac.abort(this.reason)\n\n      const controllerList = dependentControllerMap.get(ac.signal)\n\n      if (controllerList !== undefined) {\n        if (controllerList.size !== 0) {\n          for (const ref of controllerList) {\n            const ctrl = ref.deref()\n            if (ctrl !== undefined) {\n              ctrl.abort(this.reason)\n            }\n          }\n          controllerList.clear()\n        }\n        dependentControllerMap.delete(ac.signal)\n      }\n    }\n  }\n}\n\nlet patchMethodWarning = false\n\n// https://fetch.spec.whatwg.org/#request-class\nclass Request {\n  /** @type {AbortSignal} */\n  #signal\n\n  /** @type {import('../../dispatcher/dispatcher')} */\n  #dispatcher\n\n  /** @type {Headers} */\n  #headers\n\n  #state\n\n  // https://fetch.spec.whatwg.org/#dom-request\n  constructor (input, init = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (input === kConstruct) {\n      return\n    }\n\n    const prefix = 'Request constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    input = webidl.converters.RequestInfo(input)\n    init = webidl.converters.RequestInit(init)\n\n    // 1. Let request be null.\n    let request = null\n\n    // 2. Let fallbackMode be null.\n    let fallbackMode = null\n\n    // 3. Let baseURL be this\u2019s relevant settings object\u2019s API base URL.\n    const baseUrl = environmentSettingsObject.settingsObject.baseUrl\n\n    // 4. Let signal be null.\n    let signal = null\n\n    // 5. If input is a string, then:\n    if (typeof input === 'string') {\n      this.#dispatcher = init.dispatcher\n\n      // 1. Let parsedURL be the result of parsing input with baseURL.\n      // 2. If parsedURL is failure, then throw a TypeError.\n      let parsedURL\n      try {\n        parsedURL = new URL(input, baseUrl)\n      } catch (err) {\n        throw new TypeError('Failed to parse URL from ' + input, { cause: err })\n      }\n\n      // 3. If parsedURL includes credentials, then throw a TypeError.\n      if (parsedURL.username || parsedURL.password) {\n        throw new TypeError(\n          'Request cannot be constructed from a URL that includes credentials: ' +\n            input\n        )\n      }\n\n      // 4. Set request to a new request whose URL is parsedURL.\n      request = makeRequest({ urlList: [parsedURL] })\n\n      // 5. Set fallbackMode to \"cors\".\n      fallbackMode = 'cors'\n    } else {\n      // 6. Otherwise:\n\n      // 7. Assert: input is a Request object.\n      assert(webidl.is.Request(input))\n\n      // 8. Set request to input\u2019s request.\n      request = input.#state\n\n      // 9. Set signal to input\u2019s signal.\n      signal = input.#signal\n\n      this.#dispatcher = init.dispatcher || input.#dispatcher\n    }\n\n    // 7. Let origin be this\u2019s relevant settings object\u2019s origin.\n    const origin = environmentSettingsObject.settingsObject.origin\n\n    // 8. Let window be \"client\".\n    let window = 'client'\n\n    // 9. If request\u2019s window is an environment settings object and its origin\n    // is same origin with origin, then set window to request\u2019s window.\n    if (\n      request.window?.constructor?.name === 'EnvironmentSettingsObject' &&\n      sameOrigin(request.window, origin)\n    ) {\n      window = request.window\n    }\n\n    // 10. If init[\"window\"] exists and is non-null, then throw a TypeError.\n    if (init.window != null) {\n      throw new TypeError(`'window' option '${window}' must be null`)\n    }\n\n    // 11. If init[\"window\"] exists, then set window to \"no-window\".\n    if ('window' in init) {\n      window = 'no-window'\n    }\n\n    // 12. Set request to a new request with the following properties:\n    request = makeRequest({\n      // URL request\u2019s URL.\n      // undici implementation note: this is set as the first item in request's urlList in makeRequest\n      // method request\u2019s method.\n      method: request.method,\n      // header list A copy of request\u2019s header list.\n      // undici implementation note: headersList is cloned in makeRequest\n      headersList: request.headersList,\n      // unsafe-request flag Set.\n      unsafeRequest: request.unsafeRequest,\n      // client This\u2019s relevant settings object.\n      client: environmentSettingsObject.settingsObject,\n      // window window.\n      window,\n      // priority request\u2019s priority.\n      priority: request.priority,\n      // origin request\u2019s origin. The propagation of the origin is only significant for navigation requests\n      // being handled by a service worker. In this scenario a request can have an origin that is different\n      // from the current client.\n      origin: request.origin,\n      // referrer request\u2019s referrer.\n      referrer: request.referrer,\n      // referrer policy request\u2019s referrer policy.\n      referrerPolicy: request.referrerPolicy,\n      // mode request\u2019s mode.\n      mode: request.mode,\n      // credentials mode request\u2019s credentials mode.\n      credentials: request.credentials,\n      // cache mode request\u2019s cache mode.\n      cache: request.cache,\n      // redirect mode request\u2019s redirect mode.\n      redirect: request.redirect,\n      // integrity metadata request\u2019s integrity metadata.\n      integrity: request.integrity,\n      // keepalive request\u2019s keepalive.\n      keepalive: request.keepalive,\n      // reload-navigation flag request\u2019s reload-navigation flag.\n      reloadNavigation: request.reloadNavigation,\n      // history-navigation flag request\u2019s history-navigation flag.\n      historyNavigation: request.historyNavigation,\n      // URL list A clone of request\u2019s URL list.\n      urlList: [...request.urlList]\n    })\n\n    const initHasKey = Object.keys(init).length !== 0\n\n    // 13. If init is not empty, then:\n    if (initHasKey) {\n      // 1. If request\u2019s mode is \"navigate\", then set it to \"same-origin\".\n      if (request.mode === 'navigate') {\n        request.mode = 'same-origin'\n      }\n\n      // 2. Unset request\u2019s reload-navigation flag.\n      request.reloadNavigation = false\n\n      // 3. Unset request\u2019s history-navigation flag.\n      request.historyNavigation = false\n\n      // 4. Set request\u2019s origin to \"client\".\n      request.origin = 'client'\n\n      // 5. Set request\u2019s referrer to \"client\"\n      request.referrer = 'client'\n\n      // 6. Set request\u2019s referrer policy to the empty string.\n      request.referrerPolicy = ''\n\n      // 7. Set request\u2019s URL to request\u2019s current URL.\n      request.url = request.urlList[request.urlList.length - 1]\n\n      // 8. Set request\u2019s URL list to \u00AB request\u2019s URL \u00BB.\n      request.urlList = [request.url]\n    }\n\n    // 14. If init[\"referrer\"] exists, then:\n    if (init.referrer !== undefined) {\n      // 1. Let referrer be init[\"referrer\"].\n      const referrer = init.referrer\n\n      // 2. If referrer is the empty string, then set request\u2019s referrer to \"no-referrer\".\n      if (referrer === '') {\n        request.referrer = 'no-referrer'\n      } else {\n        // 1. Let parsedReferrer be the result of parsing referrer with\n        // baseURL.\n        // 2. If parsedReferrer is failure, then throw a TypeError.\n        let parsedReferrer\n        try {\n          parsedReferrer = new URL(referrer, baseUrl)\n        } catch (err) {\n          throw new TypeError(`Referrer \"${referrer}\" is not a valid URL.`, { cause: err })\n        }\n\n        // 3. If one of the following is true\n        // - parsedReferrer\u2019s scheme is \"about\" and path is the string \"client\"\n        // - parsedReferrer\u2019s origin is not same origin with origin\n        // then set request\u2019s referrer to \"client\".\n        if (\n          (parsedReferrer.protocol === 'about:' && parsedReferrer.hostname === 'client') ||\n          (origin && !sameOrigin(parsedReferrer, environmentSettingsObject.settingsObject.baseUrl))\n        ) {\n          request.referrer = 'client'\n        } else {\n          // 4. Otherwise, set request\u2019s referrer to parsedReferrer.\n          request.referrer = parsedReferrer\n        }\n      }\n    }\n\n    // 15. If init[\"referrerPolicy\"] exists, then set request\u2019s referrer policy\n    // to it.\n    if (init.referrerPolicy !== undefined) {\n      request.referrerPolicy = init.referrerPolicy\n    }\n\n    // 16. Let mode be init[\"mode\"] if it exists, and fallbackMode otherwise.\n    let mode\n    if (init.mode !== undefined) {\n      mode = init.mode\n    } else {\n      mode = fallbackMode\n    }\n\n    // 17. If mode is \"navigate\", then throw a TypeError.\n    if (mode === 'navigate') {\n      throw webidl.errors.exception({\n        header: 'Request constructor',\n        message: 'invalid request mode navigate.'\n      })\n    }\n\n    // 18. If mode is non-null, set request\u2019s mode to mode.\n    if (mode != null) {\n      request.mode = mode\n    }\n\n    // 19. If init[\"credentials\"] exists, then set request\u2019s credentials mode\n    // to it.\n    if (init.credentials !== undefined) {\n      request.credentials = init.credentials\n    }\n\n    // 18. If init[\"cache\"] exists, then set request\u2019s cache mode to it.\n    if (init.cache !== undefined) {\n      request.cache = init.cache\n    }\n\n    // 21. If request\u2019s cache mode is \"only-if-cached\" and request\u2019s mode is\n    // not \"same-origin\", then throw a TypeError.\n    if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') {\n      throw new TypeError(\n        \"'only-if-cached' can be set only with 'same-origin' mode\"\n      )\n    }\n\n    // 22. If init[\"redirect\"] exists, then set request\u2019s redirect mode to it.\n    if (init.redirect !== undefined) {\n      request.redirect = init.redirect\n    }\n\n    // 23. If init[\"integrity\"] exists, then set request\u2019s integrity metadata to it.\n    if (init.integrity != null) {\n      request.integrity = String(init.integrity)\n    }\n\n    // 24. If init[\"keepalive\"] exists, then set request\u2019s keepalive to it.\n    if (init.keepalive !== undefined) {\n      request.keepalive = Boolean(init.keepalive)\n    }\n\n    // 25. If init[\"method\"] exists, then:\n    if (init.method !== undefined) {\n      // 1. Let method be init[\"method\"].\n      let method = init.method\n\n      const mayBeNormalized = normalizedMethodRecords[method]\n\n      if (mayBeNormalized !== undefined) {\n        // Note: Bypass validation DELETE, GET, HEAD, OPTIONS, POST, PUT, PATCH and these lowercase ones\n        request.method = mayBeNormalized\n      } else {\n        // 2. If method is not a method or method is a forbidden method, then\n        // throw a TypeError.\n        if (!isValidHTTPToken(method)) {\n          throw new TypeError(`'${method}' is not a valid HTTP method.`)\n        }\n\n        const upperCase = method.toUpperCase()\n\n        if (forbiddenMethodsSet.has(upperCase)) {\n          throw new TypeError(`'${method}' HTTP method is unsupported.`)\n        }\n\n        // 3. Normalize method.\n        // https://fetch.spec.whatwg.org/#concept-method-normalize\n        // Note: must be in uppercase\n        method = normalizedMethodRecordsBase[upperCase] ?? method\n\n        // 4. Set request\u2019s method to method.\n        request.method = method\n      }\n\n      if (!patchMethodWarning && request.method === 'patch') {\n        process.emitWarning('Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.', {\n          code: 'UNDICI-FETCH-patch'\n        })\n\n        patchMethodWarning = true\n      }\n    }\n\n    // 26. If init[\"signal\"] exists, then set signal to it.\n    if (init.signal !== undefined) {\n      signal = init.signal\n    }\n\n    // 27. Set this\u2019s request to request.\n    this.#state = request\n\n    // 28. Set this\u2019s signal to a new AbortSignal object with this\u2019s relevant\n    // Realm.\n    // TODO: could this be simplified with AbortSignal.any\n    // (https://dom.spec.whatwg.org/#dom-abortsignal-any)\n    const ac = new AbortController()\n    this.#signal = ac.signal\n\n    // 29. If signal is not null, then make this\u2019s signal follow signal.\n    if (signal != null) {\n      if (signal.aborted) {\n        ac.abort(signal.reason)\n      } else {\n        // Keep a strong ref to ac while request object\n        // is alive. This is needed to prevent AbortController\n        // from being prematurely garbage collected.\n        // See, https://github.com/nodejs/undici/issues/1926.\n        this[kAbortController] = ac\n\n        const acRef = new WeakRef(ac)\n        const abort = buildAbort(acRef)\n\n        // If the max amount of listeners is equal to the default, increase it\n        if (abortSignalHasEventHandlerLeakWarning && getMaxListeners(signal) === defaultMaxListeners) {\n          setMaxListeners(1500, signal)\n        }\n\n        util.addAbortListener(signal, abort)\n        // The third argument must be a registry key to be unregistered.\n        // Without it, you cannot unregister.\n        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n        // abort is used as the unregister key. (because it is unique)\n        requestFinalizer.register(ac, { signal, abort }, abort)\n      }\n    }\n\n    // 30. Set this\u2019s headers to a new Headers object with this\u2019s relevant\n    // Realm, whose header list is request\u2019s header list and guard is\n    // \"request\".\n    this.#headers = new Headers(kConstruct)\n    setHeadersList(this.#headers, request.headersList)\n    setHeadersGuard(this.#headers, 'request')\n\n    // 31. If this\u2019s request\u2019s mode is \"no-cors\", then:\n    if (mode === 'no-cors') {\n      // 1. If this\u2019s request\u2019s method is not a CORS-safelisted method,\n      // then throw a TypeError.\n      if (!corsSafeListedMethodsSet.has(request.method)) {\n        throw new TypeError(\n          `'${request.method} is unsupported in no-cors mode.`\n        )\n      }\n\n      // 2. Set this\u2019s headers\u2019s guard to \"request-no-cors\".\n      setHeadersGuard(this.#headers, 'request-no-cors')\n    }\n\n    // 32. If init is not empty, then:\n    if (initHasKey) {\n      /** @type {HeadersList} */\n      const headersList = getHeadersList(this.#headers)\n      // 1. Let headers be a copy of this\u2019s headers and its associated header\n      // list.\n      // 2. If init[\"headers\"] exists, then set headers to init[\"headers\"].\n      const headers = init.headers !== undefined ? init.headers : new HeadersList(headersList)\n\n      // 3. Empty this\u2019s headers\u2019s header list.\n      headersList.clear()\n\n      // 4. If headers is a Headers object, then for each header in its header\n      // list, append header\u2019s name/header\u2019s value to this\u2019s headers.\n      if (headers instanceof HeadersList) {\n        for (const { name, value } of headers.rawValues()) {\n          headersList.append(name, value, false)\n        }\n        // Note: Copy the `set-cookie` meta-data.\n        headersList.cookies = headers.cookies\n      } else {\n        // 5. Otherwise, fill this\u2019s headers with headers.\n        fillHeaders(this.#headers, headers)\n      }\n    }\n\n    // 33. Let inputBody be input\u2019s request\u2019s body if input is a Request\n    // object; otherwise null.\n    const inputBody = webidl.is.Request(input) ? input.#state.body : null\n\n    // 34. If either init[\"body\"] exists and is non-null or inputBody is\n    // non-null, and request\u2019s method is `GET` or `HEAD`, then throw a\n    // TypeError.\n    if (\n      (init.body != null || inputBody != null) &&\n      (request.method === 'GET' || request.method === 'HEAD')\n    ) {\n      throw new TypeError('Request with GET/HEAD method cannot have body.')\n    }\n\n    // 35. Let initBody be null.\n    let initBody = null\n\n    // 36. If init[\"body\"] exists and is non-null, then:\n    if (init.body != null) {\n      // 1. Let Content-Type be null.\n      // 2. Set initBody and Content-Type to the result of extracting\n      // init[\"body\"], with keepalive set to request\u2019s keepalive.\n      const [extractedBody, contentType] = extractBody(\n        init.body,\n        request.keepalive\n      )\n      initBody = extractedBody\n\n      // 3, If Content-Type is non-null and this\u2019s headers\u2019s header list does\n      // not contain `Content-Type`, then append `Content-Type`/Content-Type to\n      // this\u2019s headers.\n      if (contentType && !getHeadersList(this.#headers).contains('content-type', true)) {\n        this.#headers.append('content-type', contentType, true)\n      }\n    }\n\n    // 37. Let inputOrInitBody be initBody if it is non-null; otherwise\n    // inputBody.\n    const inputOrInitBody = initBody ?? inputBody\n\n    // 38. If inputOrInitBody is non-null and inputOrInitBody\u2019s source is\n    // null, then:\n    if (inputOrInitBody != null && inputOrInitBody.source == null) {\n      // 1. If initBody is non-null and init[\"duplex\"] does not exist,\n      //    then throw a TypeError.\n      if (initBody != null && init.duplex == null) {\n        throw new TypeError('RequestInit: duplex option is required when sending a body.')\n      }\n\n      // 2. If this\u2019s request\u2019s mode is neither \"same-origin\" nor \"cors\",\n      // then throw a TypeError.\n      if (request.mode !== 'same-origin' && request.mode !== 'cors') {\n        throw new TypeError(\n          'If request is made from ReadableStream, mode should be \"same-origin\" or \"cors\"'\n        )\n      }\n\n      // 3. Set this\u2019s request\u2019s use-CORS-preflight flag.\n      request.useCORSPreflightFlag = true\n    }\n\n    // 39. Let finalBody be inputOrInitBody.\n    let finalBody = inputOrInitBody\n\n    // 40. If initBody is null and inputBody is non-null, then:\n    if (initBody == null && inputBody != null) {\n      // 1. If input is unusable, then throw a TypeError.\n      if (bodyUnusable(input.#state)) {\n        throw new TypeError(\n          'Cannot construct a Request with a Request object that has already been used.'\n        )\n      }\n\n      // 2. Set finalBody to the result of creating a proxy for inputBody.\n      // https://streams.spec.whatwg.org/#readablestream-create-a-proxy\n      const identityTransform = new TransformStream()\n      inputBody.stream.pipeThrough(identityTransform)\n      finalBody = {\n        source: inputBody.source,\n        length: inputBody.length,\n        stream: identityTransform.readable\n      }\n    }\n\n    // 41. Set this\u2019s request\u2019s body to finalBody.\n    this.#state.body = finalBody\n  }\n\n  // Returns request\u2019s HTTP method, which is \"GET\" by default.\n  get method () {\n    webidl.brandCheck(this, Request)\n\n    // The method getter steps are to return this\u2019s request\u2019s method.\n    return this.#state.method\n  }\n\n  // Returns the URL of request as a string.\n  get url () {\n    webidl.brandCheck(this, Request)\n\n    // The url getter steps are to return this\u2019s request\u2019s URL, serialized.\n    return URLSerializer(this.#state.url)\n  }\n\n  // Returns a Headers object consisting of the headers associated with request.\n  // Note that headers added in the network layer by the user agent will not\n  // be accounted for in this object, e.g., the \"Host\" header.\n  get headers () {\n    webidl.brandCheck(this, Request)\n\n    // The headers getter steps are to return this\u2019s headers.\n    return this.#headers\n  }\n\n  // Returns the kind of resource requested by request, e.g., \"document\"\n  // or \"script\".\n  get destination () {\n    webidl.brandCheck(this, Request)\n\n    // The destination getter are to return this\u2019s request\u2019s destination.\n    return this.#state.destination\n  }\n\n  // Returns the referrer of request. Its value can be a same-origin URL if\n  // explicitly set in init, the empty string to indicate no referrer, and\n  // \"about:client\" when defaulting to the global\u2019s default. This is used\n  // during fetching to determine the value of the `Referer` header of the\n  // request being made.\n  get referrer () {\n    webidl.brandCheck(this, Request)\n\n    // 1. If this\u2019s request\u2019s referrer is \"no-referrer\", then return the\n    // empty string.\n    if (this.#state.referrer === 'no-referrer') {\n      return ''\n    }\n\n    // 2. If this\u2019s request\u2019s referrer is \"client\", then return\n    // \"about:client\".\n    if (this.#state.referrer === 'client') {\n      return 'about:client'\n    }\n\n    // Return this\u2019s request\u2019s referrer, serialized.\n    return this.#state.referrer.toString()\n  }\n\n  // Returns the referrer policy associated with request.\n  // This is used during fetching to compute the value of the request\u2019s\n  // referrer.\n  get referrerPolicy () {\n    webidl.brandCheck(this, Request)\n\n    // The referrerPolicy getter steps are to return this\u2019s request\u2019s referrer policy.\n    return this.#state.referrerPolicy\n  }\n\n  // Returns the mode associated with request, which is a string indicating\n  // whether the request will use CORS, or will be restricted to same-origin\n  // URLs.\n  get mode () {\n    webidl.brandCheck(this, Request)\n\n    // The mode getter steps are to return this\u2019s request\u2019s mode.\n    return this.#state.mode\n  }\n\n  // Returns the credentials mode associated with request,\n  // which is a string indicating whether credentials will be sent with the\n  // request always, never, or only when sent to a same-origin URL.\n  get credentials () {\n    webidl.brandCheck(this, Request)\n\n    // The credentials getter steps are to return this\u2019s request\u2019s credentials mode.\n    return this.#state.credentials\n  }\n\n  // Returns the cache mode associated with request,\n  // which is a string indicating how the request will\n  // interact with the browser\u2019s cache when fetching.\n  get cache () {\n    webidl.brandCheck(this, Request)\n\n    // The cache getter steps are to return this\u2019s request\u2019s cache mode.\n    return this.#state.cache\n  }\n\n  // Returns the redirect mode associated with request,\n  // which is a string indicating how redirects for the\n  // request will be handled during fetching. A request\n  // will follow redirects by default.\n  get redirect () {\n    webidl.brandCheck(this, Request)\n\n    // The redirect getter steps are to return this\u2019s request\u2019s redirect mode.\n    return this.#state.redirect\n  }\n\n  // Returns request\u2019s subresource integrity metadata, which is a\n  // cryptographic hash of the resource being fetched. Its value\n  // consists of multiple hashes separated by whitespace. [SRI]\n  get integrity () {\n    webidl.brandCheck(this, Request)\n\n    // The integrity getter steps are to return this\u2019s request\u2019s integrity\n    // metadata.\n    return this.#state.integrity\n  }\n\n  // Returns a boolean indicating whether or not request can outlive the\n  // global in which it was created.\n  get keepalive () {\n    webidl.brandCheck(this, Request)\n\n    // The keepalive getter steps are to return this\u2019s request\u2019s keepalive.\n    return this.#state.keepalive\n  }\n\n  // Returns a boolean indicating whether or not request is for a reload\n  // navigation.\n  get isReloadNavigation () {\n    webidl.brandCheck(this, Request)\n\n    // The isReloadNavigation getter steps are to return true if this\u2019s\n    // request\u2019s reload-navigation flag is set; otherwise false.\n    return this.#state.reloadNavigation\n  }\n\n  // Returns a boolean indicating whether or not request is for a history\n  // navigation (a.k.a. back-forward navigation).\n  get isHistoryNavigation () {\n    webidl.brandCheck(this, Request)\n\n    // The isHistoryNavigation getter steps are to return true if this\u2019s request\u2019s\n    // history-navigation flag is set; otherwise false.\n    return this.#state.historyNavigation\n  }\n\n  // Returns the signal associated with request, which is an AbortSignal\n  // object indicating whether or not request has been aborted, and its\n  // abort event handler.\n  get signal () {\n    webidl.brandCheck(this, Request)\n\n    // The signal getter steps are to return this\u2019s signal.\n    return this.#signal\n  }\n\n  get body () {\n    webidl.brandCheck(this, Request)\n\n    return this.#state.body ? this.#state.body.stream : null\n  }\n\n  get bodyUsed () {\n    webidl.brandCheck(this, Request)\n\n    return !!this.#state.body && util.isDisturbed(this.#state.body.stream)\n  }\n\n  get duplex () {\n    webidl.brandCheck(this, Request)\n\n    return 'half'\n  }\n\n  // Returns a clone of request.\n  clone () {\n    webidl.brandCheck(this, Request)\n\n    // 1. If this is unusable, then throw a TypeError.\n    if (bodyUnusable(this.#state)) {\n      throw new TypeError('unusable')\n    }\n\n    // 2. Let clonedRequest be the result of cloning this\u2019s request.\n    const clonedRequest = cloneRequest(this.#state)\n\n    // 3. Let clonedRequestObject be the result of creating a Request object,\n    // given clonedRequest, this\u2019s headers\u2019s guard, and this\u2019s relevant Realm.\n    // 4. Make clonedRequestObject\u2019s signal follow this\u2019s signal.\n    const ac = new AbortController()\n    if (this.signal.aborted) {\n      ac.abort(this.signal.reason)\n    } else {\n      let list = dependentControllerMap.get(this.signal)\n      if (list === undefined) {\n        list = new Set()\n        dependentControllerMap.set(this.signal, list)\n      }\n      const acRef = new WeakRef(ac)\n      list.add(acRef)\n      util.addAbortListener(\n        ac.signal,\n        buildAbort(acRef)\n      )\n    }\n\n    // 4. Return clonedRequestObject.\n    return fromInnerRequest(clonedRequest, this.#dispatcher, ac.signal, getHeadersGuard(this.#headers))\n  }\n\n  [nodeUtil.inspect.custom] (depth, options) {\n    if (options.depth === null) {\n      options.depth = 2\n    }\n\n    options.colors ??= true\n\n    const properties = {\n      method: this.method,\n      url: this.url,\n      headers: this.headers,\n      destination: this.destination,\n      referrer: this.referrer,\n      referrerPolicy: this.referrerPolicy,\n      mode: this.mode,\n      credentials: this.credentials,\n      cache: this.cache,\n      redirect: this.redirect,\n      integrity: this.integrity,\n      keepalive: this.keepalive,\n      isReloadNavigation: this.isReloadNavigation,\n      isHistoryNavigation: this.isHistoryNavigation,\n      signal: this.signal\n    }\n\n    return `Request ${nodeUtil.formatWithOptions(options, properties)}`\n  }\n\n  /**\n   * @param {Request} request\n   * @param {AbortSignal} newSignal\n   */\n  static setRequestSignal (request, newSignal) {\n    request.#signal = newSignal\n    return request\n  }\n\n  /**\n   * @param {Request} request\n   */\n  static getRequestDispatcher (request) {\n    return request.#dispatcher\n  }\n\n  /**\n   * @param {Request} request\n   * @param {import('../../dispatcher/dispatcher')} newDispatcher\n   */\n  static setRequestDispatcher (request, newDispatcher) {\n    request.#dispatcher = newDispatcher\n  }\n\n  /**\n   * @param {Request} request\n   * @param {Headers} newHeaders\n   */\n  static setRequestHeaders (request, newHeaders) {\n    request.#headers = newHeaders\n  }\n\n  /**\n   * @param {Request} request\n   */\n  static getRequestState (request) {\n    return request.#state\n  }\n\n  /**\n   * @param {Request} request\n   * @param {any} newState\n   */\n  static setRequestState (request, newState) {\n    request.#state = newState\n  }\n}\n\nconst { setRequestSignal, getRequestDispatcher, setRequestDispatcher, setRequestHeaders, getRequestState, setRequestState } = Request\nReflect.deleteProperty(Request, 'setRequestSignal')\nReflect.deleteProperty(Request, 'getRequestDispatcher')\nReflect.deleteProperty(Request, 'setRequestDispatcher')\nReflect.deleteProperty(Request, 'setRequestHeaders')\nReflect.deleteProperty(Request, 'getRequestState')\nReflect.deleteProperty(Request, 'setRequestState')\n\nmixinBody(Request, getRequestState)\n\n// https://fetch.spec.whatwg.org/#requests\nfunction makeRequest (init) {\n  return {\n    method: init.method ?? 'GET',\n    localURLsOnly: init.localURLsOnly ?? false,\n    unsafeRequest: init.unsafeRequest ?? false,\n    body: init.body ?? null,\n    client: init.client ?? null,\n    reservedClient: init.reservedClient ?? null,\n    replacesClientId: init.replacesClientId ?? '',\n    window: init.window ?? 'client',\n    keepalive: init.keepalive ?? false,\n    serviceWorkers: init.serviceWorkers ?? 'all',\n    initiator: init.initiator ?? '',\n    destination: init.destination ?? '',\n    priority: init.priority ?? null,\n    origin: init.origin ?? 'client',\n    policyContainer: init.policyContainer ?? 'client',\n    referrer: init.referrer ?? 'client',\n    referrerPolicy: init.referrerPolicy ?? '',\n    mode: init.mode ?? 'no-cors',\n    useCORSPreflightFlag: init.useCORSPreflightFlag ?? false,\n    credentials: init.credentials ?? 'same-origin',\n    useCredentials: init.useCredentials ?? false,\n    cache: init.cache ?? 'default',\n    redirect: init.redirect ?? 'follow',\n    integrity: init.integrity ?? '',\n    cryptoGraphicsNonceMetadata: init.cryptoGraphicsNonceMetadata ?? '',\n    parserMetadata: init.parserMetadata ?? '',\n    reloadNavigation: init.reloadNavigation ?? false,\n    historyNavigation: init.historyNavigation ?? false,\n    userActivation: init.userActivation ?? false,\n    taintedOrigin: init.taintedOrigin ?? false,\n    redirectCount: init.redirectCount ?? 0,\n    responseTainting: init.responseTainting ?? 'basic',\n    preventNoCacheCacheControlHeaderModification: init.preventNoCacheCacheControlHeaderModification ?? false,\n    done: init.done ?? false,\n    timingAllowFailed: init.timingAllowFailed ?? false,\n    useURLCredentials: init.useURLCredentials ?? undefined,\n    traversableForUserPrompts: init.traversableForUserPrompts ?? 'client',\n    urlList: init.urlList,\n    url: init.urlList[0],\n    headersList: init.headersList\n      ? new HeadersList(init.headersList)\n      : new HeadersList()\n  }\n}\n\n// https://fetch.spec.whatwg.org/#concept-request-clone\nfunction cloneRequest (request) {\n  // To clone a request request, run these steps:\n\n  // 1. Let newRequest be a copy of request, except for its body.\n  const newRequest = makeRequest({ ...request, body: null })\n\n  // 2. If request\u2019s body is non-null, set newRequest\u2019s body to the\n  // result of cloning request\u2019s body.\n  if (request.body != null) {\n    newRequest.body = cloneBody(request.body)\n  }\n\n  // 3. Return newRequest.\n  return newRequest\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#request-create\n * @param {any} innerRequest\n * @param {import('../../dispatcher/agent')} dispatcher\n * @param {AbortSignal} signal\n * @param {'request' | 'immutable' | 'request-no-cors' | 'response' | 'none'} guard\n * @returns {Request}\n */\nfunction fromInnerRequest (innerRequest, dispatcher, signal, guard) {\n  const request = new Request(kConstruct)\n  setRequestState(request, innerRequest)\n  setRequestDispatcher(request, dispatcher)\n  setRequestSignal(request, signal)\n  const headers = new Headers(kConstruct)\n  setRequestHeaders(request, headers)\n  setHeadersList(headers, innerRequest.headersList)\n  setHeadersGuard(headers, guard)\n  return request\n}\n\nObject.defineProperties(Request.prototype, {\n  method: kEnumerableProperty,\n  url: kEnumerableProperty,\n  headers: kEnumerableProperty,\n  redirect: kEnumerableProperty,\n  clone: kEnumerableProperty,\n  signal: kEnumerableProperty,\n  duplex: kEnumerableProperty,\n  destination: kEnumerableProperty,\n  body: kEnumerableProperty,\n  bodyUsed: kEnumerableProperty,\n  isHistoryNavigation: kEnumerableProperty,\n  isReloadNavigation: kEnumerableProperty,\n  keepalive: kEnumerableProperty,\n  integrity: kEnumerableProperty,\n  cache: kEnumerableProperty,\n  credentials: kEnumerableProperty,\n  attribute: kEnumerableProperty,\n  referrerPolicy: kEnumerableProperty,\n  referrer: kEnumerableProperty,\n  mode: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'Request',\n    configurable: true\n  }\n})\n\nwebidl.is.Request = webidl.util.MakeTypeAssertion(Request)\n\n/**\n * @param {*} V\n * @returns {import('../../../types/fetch').Request|string}\n *\n * @see https://fetch.spec.whatwg.org/#requestinfo\n */\nwebidl.converters.RequestInfo = function (V) {\n  if (typeof V === 'string') {\n    return webidl.converters.USVString(V)\n  }\n\n  if (webidl.is.Request(V)) {\n    return V\n  }\n\n  return webidl.converters.USVString(V)\n}\n\n/**\n * @param {*} V\n * @returns {import('../../../types/fetch').RequestInit}\n * @see https://fetch.spec.whatwg.org/#requestinit\n */\nwebidl.converters.RequestInit = webidl.dictionaryConverter([\n  {\n    key: 'method',\n    converter: webidl.converters.ByteString\n  },\n  {\n    key: 'headers',\n    converter: webidl.converters.HeadersInit\n  },\n  {\n    key: 'body',\n    converter: webidl.nullableConverter(\n      webidl.converters.BodyInit\n    )\n  },\n  {\n    key: 'referrer',\n    converter: webidl.converters.USVString\n  },\n  {\n    key: 'referrerPolicy',\n    converter: webidl.converters.DOMString,\n    // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy\n    allowedValues: referrerPolicy\n  },\n  {\n    key: 'mode',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#concept-request-mode\n    allowedValues: requestMode\n  },\n  {\n    key: 'credentials',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#requestcredentials\n    allowedValues: requestCredentials\n  },\n  {\n    key: 'cache',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#requestcache\n    allowedValues: requestCache\n  },\n  {\n    key: 'redirect',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#requestredirect\n    allowedValues: requestRedirect\n  },\n  {\n    key: 'integrity',\n    converter: webidl.converters.DOMString\n  },\n  {\n    key: 'keepalive',\n    converter: webidl.converters.boolean\n  },\n  {\n    key: 'signal',\n    converter: webidl.nullableConverter(\n      (signal) => webidl.converters.AbortSignal(\n        signal,\n        'RequestInit',\n        'signal'\n      )\n    )\n  },\n  {\n    key: 'window',\n    converter: webidl.converters.any\n  },\n  {\n    key: 'duplex',\n    converter: webidl.converters.DOMString,\n    allowedValues: requestDuplex\n  },\n  {\n    key: 'dispatcher', // undici specific option\n    converter: webidl.converters.any\n  },\n  {\n    key: 'priority',\n    converter: webidl.converters.DOMString,\n    allowedValues: ['high', 'low', 'auto'],\n    defaultValue: () => 'auto'\n  }\n])\n\nmodule.exports = {\n  Request,\n  makeRequest,\n  fromInnerRequest,\n  cloneRequest,\n  getRequestDispatcher,\n  getRequestState\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { runtimeFeatures } = require('../../util/runtime-features.js')\n\n/**\n * @typedef {object} Metadata\n * @property {SRIHashAlgorithm} alg - The algorithm used for the hash.\n * @property {string} val - The base64-encoded hash value.\n */\n\n/**\n * @typedef {Metadata[]} MetadataList\n */\n\n/**\n * @typedef {('sha256' | 'sha384' | 'sha512')} SRIHashAlgorithm\n */\n\n/**\n * @type {Map<SRIHashAlgorithm, number>}\n *\n * The valid SRI hash algorithm token set is the ordered set \u00AB \"sha256\",\n * \"sha384\", \"sha512\" \u00BB (corresponding to SHA-256, SHA-384, and SHA-512\n * respectively). The ordering of this set is meaningful, with stronger\n * algorithms appearing later in the set.\n *\n * @see https://w3c.github.io/webappsec-subresource-integrity/#valid-sri-hash-algorithm-token-set\n */\nconst validSRIHashAlgorithmTokenSet = new Map([['sha256', 0], ['sha384', 1], ['sha512', 2]])\n\n// https://nodejs.org/api/crypto.html#determining-if-crypto-support-is-unavailable\n/** @type {import('node:crypto')} */\nlet crypto\n\nif (runtimeFeatures.has('crypto')) {\n  crypto = require('node:crypto')\n  const cryptoHashes = crypto.getHashes()\n\n  // If no hashes are available, we cannot support SRI.\n  if (cryptoHashes.length === 0) {\n    validSRIHashAlgorithmTokenSet.clear()\n  }\n\n  for (const algorithm of validSRIHashAlgorithmTokenSet.keys()) {\n    // If the algorithm is not supported, remove it from the list.\n    if (cryptoHashes.includes(algorithm) === false) {\n      validSRIHashAlgorithmTokenSet.delete(algorithm)\n    }\n  }\n} else {\n  // If crypto is not available, we cannot support SRI.\n  validSRIHashAlgorithmTokenSet.clear()\n}\n\n/**\n * @typedef GetSRIHashAlgorithmIndex\n * @type {(algorithm: SRIHashAlgorithm) => number}\n * @param {SRIHashAlgorithm} algorithm\n * @returns {number} The index of the algorithm in the valid SRI hash algorithm\n * token set.\n */\n\nconst getSRIHashAlgorithmIndex = /** @type {GetSRIHashAlgorithmIndex} */ (Map.prototype.get.bind(\n  validSRIHashAlgorithmTokenSet))\n\n/**\n * @typedef IsValidSRIHashAlgorithm\n * @type {(algorithm: string) => algorithm is SRIHashAlgorithm}\n * @param {*} algorithm\n * @returns {algorithm is SRIHashAlgorithm}\n */\n\nconst isValidSRIHashAlgorithm = /** @type {IsValidSRIHashAlgorithm} */ (\n  Map.prototype.has.bind(validSRIHashAlgorithmTokenSet)\n)\n\n/**\n * @param {Uint8Array} bytes\n * @param {string} metadataList\n * @returns {boolean}\n *\n * @see https://w3c.github.io/webappsec-subresource-integrity/#does-response-match-metadatalist\n */\nconst bytesMatch = runtimeFeatures.has('crypto') === false || validSRIHashAlgorithmTokenSet.size === 0\n  // If node is not built with OpenSSL support, we cannot check\n  // a request's integrity, so allow it by default (the spec will\n  // allow requests if an invalid hash is given, as precedence).\n  ? () => true\n  : (bytes, metadataList) => {\n    // 1. Let parsedMetadata be the result of parsing metadataList.\n      const parsedMetadata = parseMetadata(metadataList)\n\n      // 2. If parsedMetadata is empty set, return true.\n      if (parsedMetadata.length === 0) {\n        return true\n      }\n\n      // 3. Let metadata be the result of getting the strongest\n      //    metadata from parsedMetadata.\n      const metadata = getStrongestMetadata(parsedMetadata)\n\n      // 4. For each item in metadata:\n      for (const item of metadata) {\n      // 1. Let algorithm be the item[\"alg\"].\n        const algorithm = item.alg\n\n        // 2. Let expectedValue be the item[\"val\"].\n        const expectedValue = item.val\n\n        // See https://github.com/web-platform-tests/wpt/commit/e4c5cc7a5e48093220528dfdd1c4012dc3837a0e\n        // \"be liberal with padding\". This is annoying, and it's not even in the spec.\n\n        // 3. Let actualValue be the result of applying algorithm to bytes .\n        const actualValue = applyAlgorithmToBytes(algorithm, bytes)\n\n        // 4. If actualValue is a case-sensitive match for expectedValue,\n        //    return true.\n        if (caseSensitiveMatch(actualValue, expectedValue)) {\n          return true\n        }\n      }\n\n      // 5. Return false.\n      return false\n    }\n\n/**\n * @param {MetadataList} metadataList\n * @returns {MetadataList} The strongest hash algorithm from the metadata list.\n */\nfunction getStrongestMetadata (metadataList) {\n  // 1. Let result be the empty set and strongest be the empty string.\n  const result = []\n  /** @type {Metadata|null} */\n  let strongest = null\n\n  // 2. For each item in set:\n  for (const item of metadataList) {\n    // 1. Assert: item[\"alg\"] is a valid SRI hash algorithm token.\n    assert(isValidSRIHashAlgorithm(item.alg), 'Invalid SRI hash algorithm token')\n\n    // 2. If result is the empty set, then:\n    if (result.length === 0) {\n      // 1. Append item to result.\n      result.push(item)\n\n      // 2. Set strongest to item.\n      strongest = item\n\n      // 3. Continue.\n      continue\n    }\n\n    // 3. Let currentAlgorithm be strongest[\"alg\"], and currentAlgorithmIndex be\n    // the index of currentAlgorithm in the valid SRI hash algorithm token set.\n    const currentAlgorithm = /** @type {Metadata} */ (strongest).alg\n    const currentAlgorithmIndex = getSRIHashAlgorithmIndex(currentAlgorithm)\n\n    // 4. Let newAlgorithm be the item[\"alg\"], and newAlgorithmIndex be the\n    // index of newAlgorithm in the valid SRI hash algorithm token set.\n    const newAlgorithm = item.alg\n    const newAlgorithmIndex = getSRIHashAlgorithmIndex(newAlgorithm)\n\n    // 5. If newAlgorithmIndex is less than currentAlgorithmIndex, then continue.\n    if (newAlgorithmIndex < currentAlgorithmIndex) {\n      continue\n\n    // 6. Otherwise, if newAlgorithmIndex is greater than\n    // currentAlgorithmIndex:\n    } else if (newAlgorithmIndex > currentAlgorithmIndex) {\n      // 1. Set strongest to item.\n      strongest = item\n\n      // 2. Set result to \u00AB item \u00BB.\n      result[0] = item\n      result.length = 1\n\n    // 7. Otherwise, newAlgorithmIndex and currentAlgorithmIndex are the same\n    // value. Append item to result.\n    } else {\n      result.push(item)\n    }\n  }\n\n  // 3. Return result.\n  return result\n}\n\n/**\n * @param {string} metadata\n * @returns {MetadataList}\n *\n * @see https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata\n */\nfunction parseMetadata (metadata) {\n  // 1. Let result be the empty set.\n  /** @type {MetadataList} */\n  const result = []\n\n  // 2. For each item returned by splitting metadata on spaces:\n  for (const item of metadata.split(' ')) {\n    // 1. Let expression-and-options be the result of splitting item on U+003F (?).\n    const expressionAndOptions = item.split('?', 1)\n\n    // 2. Let algorithm-expression be expression-and-options[0].\n    const algorithmExpression = expressionAndOptions[0]\n\n    // 3. Let base64-value be the empty string.\n    let base64Value = ''\n\n    // 4. Let algorithm-and-value be the result of splitting algorithm-expression on U+002D (-).\n    const algorithmAndValue = [algorithmExpression.slice(0, 6), algorithmExpression.slice(7)]\n\n    // 5. Let algorithm be algorithm-and-value[0].\n    const algorithm = algorithmAndValue[0]\n\n    // 6. If algorithm is not a valid SRI hash algorithm token, then continue.\n    if (!isValidSRIHashAlgorithm(algorithm)) {\n      continue\n    }\n\n    // 7. If algorithm-and-value[1] exists, set base64-value to\n    // algorithm-and-value[1].\n    if (algorithmAndValue[1]) {\n      base64Value = algorithmAndValue[1]\n    }\n\n    // 8. Let metadata be the ordered map\n    // \u00AB[\"alg\" \u2192 algorithm, \"val\" \u2192 base64-value]\u00BB.\n    const metadata = {\n      alg: algorithm,\n      val: base64Value\n    }\n\n    // 9. Append metadata to result.\n    result.push(metadata)\n  }\n\n  // 3. Return result.\n  return result\n}\n\n/**\n * Applies the specified hash algorithm to the given bytes\n *\n * @typedef {(algorithm: SRIHashAlgorithm, bytes: Uint8Array) => string} ApplyAlgorithmToBytes\n * @param {SRIHashAlgorithm} algorithm\n * @param {Uint8Array} bytes\n * @returns {string}\n */\nconst applyAlgorithmToBytes = (algorithm, bytes) => {\n  return crypto.hash(algorithm, bytes, 'base64')\n}\n\n/**\n * Compares two base64 strings, allowing for base64url\n * in the second string.\n *\n * @param {string} actualValue base64 encoded string\n * @param {string} expectedValue base64 or base64url encoded string\n * @returns {boolean}\n */\nfunction caseSensitiveMatch (actualValue, expectedValue) {\n  // Ignore padding characters from the end of the strings by\n  // decreasing the length by 1 or 2 if the last characters are `=`.\n  let actualValueLength = actualValue.length\n  if (actualValueLength !== 0 && actualValue[actualValueLength - 1] === '=') {\n    actualValueLength -= 1\n  }\n  if (actualValueLength !== 0 && actualValue[actualValueLength - 1] === '=') {\n    actualValueLength -= 1\n  }\n  let expectedValueLength = expectedValue.length\n  if (expectedValueLength !== 0 && expectedValue[expectedValueLength - 1] === '=') {\n    expectedValueLength -= 1\n  }\n  if (expectedValueLength !== 0 && expectedValue[expectedValueLength - 1] === '=') {\n    expectedValueLength -= 1\n  }\n\n  if (actualValueLength !== expectedValueLength) {\n    return false\n  }\n\n  for (let i = 0; i < actualValueLength; ++i) {\n    if (\n      actualValue[i] === expectedValue[i] ||\n      (actualValue[i] === '+' && expectedValue[i] === '-') ||\n      (actualValue[i] === '/' && expectedValue[i] === '_')\n    ) {\n      continue\n    }\n    return false\n  }\n\n  return true\n}\n\nmodule.exports = {\n  applyAlgorithmToBytes,\n  bytesMatch,\n  caseSensitiveMatch,\n  isValidSRIHashAlgorithm,\n  getStrongestMetadata,\n  parseMetadata\n}\n", "// https://github.com/Ethan-Arrowood/undici-fetch\n\n'use strict'\n\nconst {\n  makeNetworkError,\n  makeAppropriateNetworkError,\n  filterResponse,\n  makeResponse,\n  fromInnerResponse,\n  getResponseState\n} = require('./response')\nconst { HeadersList } = require('./headers')\nconst { Request, cloneRequest, getRequestDispatcher, getRequestState } = require('./request')\nconst zlib = require('node:zlib')\nconst {\n  makePolicyContainer,\n  clonePolicyContainer,\n  requestBadPort,\n  TAOCheck,\n  appendRequestOriginHeader,\n  responseLocationURL,\n  requestCurrentURL,\n  setRequestReferrerPolicyOnRedirect,\n  tryUpgradeRequestToAPotentiallyTrustworthyURL,\n  createOpaqueTimingInfo,\n  appendFetchMetadata,\n  corsCheck,\n  crossOriginResourcePolicyCheck,\n  determineRequestsReferrer,\n  coarsenedSharedCurrentTime,\n  sameOrigin,\n  isCancelled,\n  isAborted,\n  isErrorLike,\n  fullyReadBody,\n  readableStreamClose,\n  urlIsLocal,\n  urlIsHttpHttpsScheme,\n  urlHasHttpsScheme,\n  clampAndCoarsenConnectionTimingInfo,\n  simpleRangeHeaderValue,\n  buildContentRange,\n  createInflate,\n  extractMimeType,\n  hasAuthenticationEntry,\n  includesCredentials,\n  isTraversableNavigable\n} = require('./util')\nconst assert = require('node:assert')\nconst { safelyExtractBody, extractBody } = require('./body')\nconst {\n  redirectStatusSet,\n  nullBodyStatus,\n  safeMethodsSet,\n  requestBodyHeader,\n  subresourceSet\n} = require('./constants')\nconst EE = require('node:events')\nconst { Readable, pipeline, finished, isErrored, isReadable } = require('node:stream')\nconst { addAbortListener, bufferToLowerCasedHeaderName } = require('../../core/util')\nconst { dataURLProcessor, serializeAMimeType, minimizeSupportedMimeType } = require('./data-url')\nconst { getGlobalDispatcher } = require('../../global')\nconst { webidl } = require('../webidl')\nconst { STATUS_CODES } = require('node:http')\nconst { bytesMatch } = require('../subresource-integrity/subresource-integrity')\nconst { isomorphicEncode } = require('../infra')\n\nconst GET_OR_HEAD = ['GET', 'HEAD']\n\nconst defaultUserAgent = typeof __UNDICI_IS_NODE__ !== 'undefined' || typeof esbuildDetection !== 'undefined'\n  ? 'node'\n  : 'undici'\n\n/** @type {import('buffer').resolveObjectURL} */\nlet resolveObjectURL\n\nfunction appendHeadersListFromResponseHeaders (headersList, headers, rawHeaders) {\n  if (Array.isArray(rawHeaders)) {\n    for (let i = 0; i < rawHeaders.length; i += 2) {\n      const nameStr = bufferToLowerCasedHeaderName(rawHeaders[i])\n      const value = rawHeaders[i + 1]\n\n      if (Array.isArray(value) && !Buffer.isBuffer(value)) {\n        for (const val of value) {\n          headersList.append(nameStr, val.toString('latin1'), true)\n        }\n      } else {\n        headersList.append(nameStr, value.toString('latin1'), true)\n      }\n    }\n\n    return\n  }\n\n  for (const [name, value] of Object.entries(headers ?? {})) {\n    if (Array.isArray(value)) {\n      for (const entry of value) {\n        headersList.append(name, `${entry}`, true)\n      }\n    } else {\n      headersList.append(name, `${value}`, true)\n    }\n  }\n}\n\nclass Fetch extends EE {\n  constructor (dispatcher) {\n    super()\n\n    this.dispatcher = dispatcher\n    this.connection = null\n    this.dump = false\n    this.state = 'ongoing'\n  }\n\n  terminate (reason) {\n    if (this.state !== 'ongoing') {\n      return\n    }\n\n    this.state = 'terminated'\n    this.connection?.destroy(reason)\n    this.emit('terminated', reason)\n  }\n\n  // https://fetch.spec.whatwg.org/#fetch-controller-abort\n  abort (error) {\n    if (this.state !== 'ongoing') {\n      return\n    }\n\n    // 1. Set controller\u2019s state to \"aborted\".\n    this.state = 'aborted'\n\n    // 2. Let fallbackError be an \"AbortError\" DOMException.\n    // 3. Set error to fallbackError if it is not given.\n    if (!error) {\n      error = new DOMException('The operation was aborted.', 'AbortError')\n    }\n\n    // 4. Let serializedError be StructuredSerialize(error).\n    //    If that threw an exception, catch it, and let\n    //    serializedError be StructuredSerialize(fallbackError).\n\n    // 5. Set controller\u2019s serialized abort reason to serializedError.\n    this.serializedAbortReason = error\n\n    this.connection?.destroy(error)\n    this.emit('terminated', error)\n  }\n}\n\nfunction handleFetchDone (response) {\n  finalizeAndReportTiming(response, 'fetch')\n}\n\n// https://fetch.spec.whatwg.org/#fetch-method\nfunction fetch (input, init = undefined) {\n  webidl.argumentLengthCheck(arguments, 1, 'globalThis.fetch')\n\n  // 1. Let p be a new promise.\n  let p = Promise.withResolvers()\n\n  // 2. Let requestObject be the result of invoking the initial value of\n  // Request as constructor with input and init as arguments. If this throws\n  // an exception, reject p with it and return p.\n  let requestObject\n\n  try {\n    requestObject = new Request(input, init)\n  } catch (e) {\n    p.reject(e)\n    return p.promise\n  }\n\n  // 3. Let request be requestObject\u2019s request.\n  const request = getRequestState(requestObject)\n\n  // 4. If requestObject\u2019s signal\u2019s aborted flag is set, then:\n  if (requestObject.signal.aborted) {\n    // 1. Abort the fetch() call with p, request, null, and\n    //    requestObject\u2019s signal\u2019s abort reason.\n    abortFetch(p, request, null, requestObject.signal.reason, null)\n\n    // 2. Return p.\n    return p.promise\n  }\n\n  // 5. Let globalObject be request\u2019s client\u2019s global object.\n  const globalObject = request.client.globalObject\n\n  // 6. If globalObject is a ServiceWorkerGlobalScope object, then set\n  // request\u2019s service-workers mode to \"none\".\n  if (globalObject?.constructor?.name === 'ServiceWorkerGlobalScope') {\n    request.serviceWorkers = 'none'\n  }\n\n  // 7. Let responseObject be null.\n  let responseObject = null\n\n  // 8. Let relevantRealm be this\u2019s relevant Realm.\n\n  // 9. Let locallyAborted be false.\n  let locallyAborted = false\n\n  // 10. Let controller be null.\n  let controller = null\n\n  // 11. Add the following abort steps to requestObject\u2019s signal:\n  addAbortListener(\n    requestObject.signal,\n    () => {\n      // 1. Set locallyAborted to true.\n      locallyAborted = true\n\n      // 2. Assert: controller is non-null.\n      assert(controller != null)\n\n      // 3. Abort controller with requestObject\u2019s signal\u2019s abort reason.\n      controller.abort(requestObject.signal.reason)\n\n      const realResponse = responseObject?.deref()\n\n      // 4. Abort the fetch() call with p, request, responseObject,\n      //    and requestObject\u2019s signal\u2019s abort reason.\n      abortFetch(p, request, realResponse, requestObject.signal.reason, controller.controller)\n    }\n  )\n\n  // 12. Let handleFetchDone given response response be to finalize and\n  // report timing with response, globalObject, and \"fetch\".\n  // see function handleFetchDone\n\n  // 13. Set controller to the result of calling fetch given request,\n  // with processResponseEndOfBody set to handleFetchDone, and processResponse\n  // given response being these substeps:\n\n  const processResponse = (response) => {\n    // 1. If locallyAborted is true, terminate these substeps.\n    if (locallyAborted) {\n      return\n    }\n\n    // 2. If response\u2019s aborted flag is set, then:\n    if (response.aborted) {\n      // 1. Let deserializedError be the result of deserialize a serialized\n      //    abort reason given controller\u2019s serialized abort reason and\n      //    relevantRealm.\n\n      // 2. Abort the fetch() call with p, request, responseObject, and\n      //    deserializedError.\n\n      abortFetch(p, request, responseObject, controller.serializedAbortReason, controller.controller)\n      return\n    }\n\n    // 3. If response is a network error, then reject p with a TypeError\n    // and terminate these substeps.\n    if (response.type === 'error') {\n      p.reject(new TypeError('fetch failed', { cause: response.error }))\n      return\n    }\n\n    // 4. Set responseObject to the result of creating a Response object,\n    // given response, \"immutable\", and relevantRealm.\n    responseObject = new WeakRef(fromInnerResponse(response, 'immutable'))\n\n    // 5. Resolve p with responseObject.\n    p.resolve(responseObject.deref())\n    p = null\n  }\n\n  controller = fetching({\n    request,\n    processResponseEndOfBody: handleFetchDone,\n    processResponse,\n    dispatcher: getRequestDispatcher(requestObject), // undici\n    // Keep requestObject alive to prevent its AbortController from being GC'd\n    // See https://github.com/nodejs/undici/issues/4627\n    requestObject\n  })\n\n  // 14. Return p.\n  return p.promise\n}\n\n// https://fetch.spec.whatwg.org/#finalize-and-report-timing\nfunction finalizeAndReportTiming (response, initiatorType = 'other') {\n  // 1. If response is an aborted network error, then return.\n  if (response.type === 'error' && response.aborted) {\n    return\n  }\n\n  // 2. If response\u2019s URL list is null or empty, then return.\n  if (!response.urlList?.length) {\n    return\n  }\n\n  // 3. Let originalURL be response\u2019s URL list[0].\n  const originalURL = response.urlList[0]\n\n  // 4. Let timingInfo be response\u2019s timing info.\n  let timingInfo = response.timingInfo\n\n  // 5. Let cacheState be response\u2019s cache state.\n  let cacheState = response.cacheState\n\n  // 6. If originalURL\u2019s scheme is not an HTTP(S) scheme, then return.\n  if (!urlIsHttpHttpsScheme(originalURL)) {\n    return\n  }\n\n  // 7. If timingInfo is null, then return.\n  if (timingInfo === null) {\n    return\n  }\n\n  // 8. If response\u2019s timing allow passed flag is not set, then:\n  if (!response.timingAllowPassed) {\n    //  1. Set timingInfo to a the result of creating an opaque timing info for timingInfo.\n    timingInfo = createOpaqueTimingInfo({\n      startTime: timingInfo.startTime\n    })\n\n    //  2. Set cacheState to the empty string.\n    cacheState = ''\n  }\n\n  // 9. Set timingInfo\u2019s end time to the coarsened shared current time\n  // given global\u2019s relevant settings object\u2019s cross-origin isolated\n  // capability.\n  // TODO: given global\u2019s relevant settings object\u2019s cross-origin isolated\n  // capability?\n  timingInfo.endTime = coarsenedSharedCurrentTime()\n\n  // 10. Set response\u2019s timing info to timingInfo.\n  response.timingInfo = timingInfo\n\n  // 11. Mark resource timing for timingInfo, originalURL, initiatorType,\n  // global, and cacheState.\n  markResourceTiming(\n    timingInfo,\n    originalURL.href,\n    initiatorType,\n    globalThis,\n    cacheState,\n    '', // bodyType\n    response.status\n  )\n}\n\n// https://w3c.github.io/resource-timing/#dfn-mark-resource-timing\nconst markResourceTiming = performance.markResourceTiming\n\n// https://fetch.spec.whatwg.org/#abort-fetch\nfunction abortFetch (p, request, responseObject, error, controller /* undici-specific */) {\n  // 1. Reject promise with error.\n  if (p) {\n    // We might have already resolved the promise at this stage\n    p.reject(error)\n  }\n\n  // 2. If request\u2019s body is not null and is readable, then cancel request\u2019s\n  // body with error.\n  if (request.body?.stream != null && isReadable(request.body.stream)) {\n    request.body.stream.cancel(error).catch((err) => {\n      if (err.code === 'ERR_INVALID_STATE') {\n        // Node bug?\n        return\n      }\n      throw err\n    })\n  }\n\n  // 3. If responseObject is null, then return.\n  if (responseObject == null) {\n    return\n  }\n\n  // 4. Let response be responseObject\u2019s response.\n  const response = getResponseState(responseObject)\n\n  // 5. If response\u2019s body is not null and is readable, then error response\u2019s\n  // body with error.\n  if (response.body?.stream != null && isReadable(response.body.stream)) {\n    controller.error(error)\n  }\n}\n\n// https://fetch.spec.whatwg.org/#fetching\nfunction fetching ({\n  request,\n  processRequestBodyChunkLength,\n  processRequestEndOfBody,\n  processResponse,\n  processResponseEndOfBody,\n  processResponseConsumeBody,\n  useParallelQueue = false,\n  dispatcher = getGlobalDispatcher(), // undici\n  requestObject = null // Keep alive to prevent AbortController GC, see #4627\n}) {\n  // Ensure that the dispatcher is set accordingly\n  assert(dispatcher)\n\n  // 1. Let taskDestination be null.\n  let taskDestination = null\n\n  // 2. Let crossOriginIsolatedCapability be false.\n  let crossOriginIsolatedCapability = false\n\n  // 3. If request\u2019s client is non-null, then:\n  if (request.client != null) {\n    // 1. Set taskDestination to request\u2019s client\u2019s global object.\n    taskDestination = request.client.globalObject\n\n    // 2. Set crossOriginIsolatedCapability to request\u2019s client\u2019s cross-origin\n    // isolated capability.\n    crossOriginIsolatedCapability =\n      request.client.crossOriginIsolatedCapability\n  }\n\n  // 4. If useParallelQueue is true, then set taskDestination to the result of\n  // starting a new parallel queue.\n  // TODO\n\n  // 5. Let timingInfo be a new fetch timing info whose start time and\n  // post-redirect start time are the coarsened shared current time given\n  // crossOriginIsolatedCapability.\n  const currentTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability)\n  const timingInfo = createOpaqueTimingInfo({\n    startTime: currentTime\n  })\n\n  // 6. Let fetchParams be a new fetch params whose\n  // request is request,\n  // timing info is timingInfo,\n  // process request body chunk length is processRequestBodyChunkLength,\n  // process request end-of-body is processRequestEndOfBody,\n  // process response is processResponse,\n  // process response consume body is processResponseConsumeBody,\n  // process response end-of-body is processResponseEndOfBody,\n  // task destination is taskDestination,\n  // and cross-origin isolated capability is crossOriginIsolatedCapability.\n  const fetchParams = {\n    controller: new Fetch(dispatcher),\n    request,\n    timingInfo,\n    processRequestBodyChunkLength,\n    processRequestEndOfBody,\n    processResponse,\n    processResponseConsumeBody,\n    processResponseEndOfBody,\n    taskDestination,\n    crossOriginIsolatedCapability,\n    // Keep requestObject alive to prevent its AbortController from being GC'd\n    requestObject\n  }\n\n  // 7. If request\u2019s body is a byte sequence, then set request\u2019s body to\n  //    request\u2019s body as a body.\n  // NOTE: Since fetching is only called from fetch, body should already be\n  // extracted.\n  assert(!request.body || request.body.stream)\n\n  // 8. If request\u2019s window is \"client\", then set request\u2019s window to request\u2019s\n  // client, if request\u2019s client\u2019s global object is a Window object; otherwise\n  // \"no-window\".\n  if (request.window === 'client') {\n    // TODO: What if request.client is null?\n    request.window =\n      request.client?.globalObject?.constructor?.name === 'Window'\n        ? request.client\n        : 'no-window'\n  }\n\n  // 9. If request\u2019s origin is \"client\", then set request\u2019s origin to request\u2019s\n  // client\u2019s origin.\n  if (request.origin === 'client') {\n    request.origin = request.client.origin\n  }\n\n  // 10. If all of the following conditions are true:\n  // TODO\n\n  // 11. If request\u2019s policy container is \"client\", then:\n  if (request.policyContainer === 'client') {\n    // 1. If request\u2019s client is non-null, then set request\u2019s policy\n    // container to a clone of request\u2019s client\u2019s policy container. [HTML]\n    if (request.client != null) {\n      request.policyContainer = clonePolicyContainer(\n        request.client.policyContainer\n      )\n    } else {\n      // 2. Otherwise, set request\u2019s policy container to a new policy\n      // container.\n      request.policyContainer = makePolicyContainer()\n    }\n  }\n\n  // 12. If request\u2019s header list does not contain `Accept`, then:\n  if (!request.headersList.contains('accept', true)) {\n    // 1. Let value be `*/*`.\n    const value = '*/*'\n\n    // 2. A user agent should set value to the first matching statement, if\n    // any, switching on request\u2019s destination:\n    // \"document\"\n    // \"frame\"\n    // \"iframe\"\n    // `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8`\n    // \"image\"\n    // `image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5`\n    // \"style\"\n    // `text/css,*/*;q=0.1`\n    // TODO\n\n    // 3. Append `Accept`/value to request\u2019s header list.\n    request.headersList.append('accept', value, true)\n  }\n\n  // 13. If request\u2019s header list does not contain `Accept-Language`, then\n  // user agents should append `Accept-Language`/an appropriate value to\n  // request\u2019s header list.\n  if (!request.headersList.contains('accept-language', true)) {\n    request.headersList.append('accept-language', '*', true)\n  }\n\n  // 14. If request\u2019s priority is null, then use request\u2019s initiator and\n  // destination appropriately in setting request\u2019s priority to a\n  // user-agent-defined object.\n  if (request.priority === null) {\n    // TODO\n  }\n\n  // 15. If request is a subresource request, then:\n  if (subresourceSet.has(request.destination)) {\n    // TODO\n  }\n\n  // 16. Run main fetch given fetchParams.\n  mainFetch(fetchParams, false)\n\n  // 17. Return fetchParam's controller\n  return fetchParams.controller\n}\n\n// https://fetch.spec.whatwg.org/#concept-main-fetch\nasync function mainFetch (fetchParams, recursive) {\n  try {\n    // 1. Let request be fetchParams\u2019s request.\n    const request = fetchParams.request\n\n    // 2. Let response be null.\n    let response = null\n\n    // 3. If request\u2019s local-URLs-only flag is set and request\u2019s current URL is\n    // not local, then set response to a network error.\n    if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) {\n      response = makeNetworkError('local URLs only')\n    }\n\n    // 4. Run report Content Security Policy violations for request.\n    // TODO\n\n    // 5. Upgrade request to a potentially trustworthy URL, if appropriate.\n    tryUpgradeRequestToAPotentiallyTrustworthyURL(request)\n\n    // 6. If should request be blocked due to a bad port, should fetching request\n    // be blocked as mixed content, or should request be blocked by Content\n    // Security Policy returns blocked, then set response to a network error.\n    if (requestBadPort(request) === 'blocked') {\n      response = makeNetworkError('bad port')\n    }\n    // TODO: should fetching request be blocked as mixed content?\n    // TODO: should request be blocked by Content Security Policy?\n\n    // 7. If request\u2019s referrer policy is the empty string, then set request\u2019s\n    // referrer policy to request\u2019s policy container\u2019s referrer policy.\n    if (request.referrerPolicy === '') {\n      request.referrerPolicy = request.policyContainer.referrerPolicy\n    }\n\n    // 8. If request\u2019s referrer is not \"no-referrer\", then set request\u2019s\n    // referrer to the result of invoking determine request\u2019s referrer.\n    if (request.referrer !== 'no-referrer') {\n      request.referrer = determineRequestsReferrer(request)\n    }\n\n    // 9. Set request\u2019s current URL\u2019s scheme to \"https\" if all of the following\n    // conditions are true:\n    // - request\u2019s current URL\u2019s scheme is \"http\"\n    // - request\u2019s current URL\u2019s host is a domain\n    // - Matching request\u2019s current URL\u2019s host per Known HSTS Host Domain Name\n    //   Matching results in either a superdomain match with an asserted\n    //   includeSubDomains directive or a congruent match (with or without an\n    //   asserted includeSubDomains directive). [HSTS]\n    // TODO\n\n    // 10. If recursive is false, then run the remaining steps in parallel.\n    // TODO\n\n    // 11. If response is null, then set response to the result of running\n    // the steps corresponding to the first matching statement:\n    if (response === null) {\n      const currentURL = requestCurrentURL(request)\n      if (\n        // - request\u2019s current URL\u2019s origin is same origin with request\u2019s origin,\n        //   and request\u2019s response tainting is \"basic\"\n        (sameOrigin(currentURL, request.url) && request.responseTainting === 'basic') ||\n        // request\u2019s current URL\u2019s scheme is \"data\"\n        (currentURL.protocol === 'data:') ||\n        // - request\u2019s mode is \"navigate\" or \"websocket\"\n        (request.mode === 'navigate' || request.mode === 'websocket')\n      ) {\n        // 1. Set request\u2019s response tainting to \"basic\".\n        request.responseTainting = 'basic'\n\n        // 2. Return the result of running scheme fetch given fetchParams.\n        response = await schemeFetch(fetchParams)\n\n      // request\u2019s mode is \"same-origin\"\n      } else if (request.mode === 'same-origin') {\n        // 1. Return a network error.\n        response = makeNetworkError('request mode cannot be \"same-origin\"')\n\n      // request\u2019s mode is \"no-cors\"\n      } else if (request.mode === 'no-cors') {\n        // 1. If request\u2019s redirect mode is not \"follow\", then return a network\n        // error.\n        if (request.redirect !== 'follow') {\n          response = makeNetworkError(\n            'redirect mode cannot be \"follow\" for \"no-cors\" request'\n          )\n        } else {\n          // 2. Set request\u2019s response tainting to \"opaque\".\n          request.responseTainting = 'opaque'\n\n          // 3. Return the result of running scheme fetch given fetchParams.\n          response = await schemeFetch(fetchParams)\n        }\n      // request\u2019s current URL\u2019s scheme is not an HTTP(S) scheme\n      } else if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) {\n        // Return a network error.\n        response = makeNetworkError('URL scheme must be a HTTP(S) scheme')\n\n        // - request\u2019s use-CORS-preflight flag is set\n        // - request\u2019s unsafe-request flag is set and either request\u2019s method is\n        //   not a CORS-safelisted method or CORS-unsafe request-header names with\n        //   request\u2019s header list is not empty\n        //    1. Set request\u2019s response tainting to \"cors\".\n        //    2. Let corsWithPreflightResponse be the result of running HTTP fetch\n        //    given fetchParams and true.\n        //    3. If corsWithPreflightResponse is a network error, then clear cache\n        //    entries using request.\n        //    4. Return corsWithPreflightResponse.\n        // TODO\n\n      // Otherwise\n      } else {\n        //    1. Set request\u2019s response tainting to \"cors\".\n        request.responseTainting = 'cors'\n\n        //    2. Return the result of running HTTP fetch given fetchParams.\n        response = await httpFetch(fetchParams)\n      }\n    }\n\n    // 12. If recursive is true, then return response.\n    if (recursive) {\n      return response\n    }\n\n    // 13. If response is not a network error and response is not a filtered\n    // response, then:\n    if (response.status !== 0 && !response.internalResponse) {\n      // If request\u2019s response tainting is \"cors\", then:\n      if (request.responseTainting === 'cors') {\n        // 1. Let headerNames be the result of extracting header list values\n        // given `Access-Control-Expose-Headers` and response\u2019s header list.\n        // TODO\n        // 2. If request\u2019s credentials mode is not \"include\" and headerNames\n        // contains `*`, then set response\u2019s CORS-exposed header-name list to\n        // all unique header names in response\u2019s header list.\n        // TODO\n        // 3. Otherwise, if headerNames is not null or failure, then set\n        // response\u2019s CORS-exposed header-name list to headerNames.\n        // TODO\n      }\n\n      // Set response to the following filtered response with response as its\n      // internal response, depending on request\u2019s response tainting:\n      if (request.responseTainting === 'basic') {\n        response = filterResponse(response, 'basic')\n      } else if (request.responseTainting === 'cors') {\n        response = filterResponse(response, 'cors')\n      } else if (request.responseTainting === 'opaque') {\n        response = filterResponse(response, 'opaque')\n      } else {\n        assert(false)\n      }\n    }\n\n    // 14. Let internalResponse be response, if response is a network error,\n    // and response\u2019s internal response otherwise.\n    let internalResponse =\n      response.status === 0 ? response : response.internalResponse\n\n    // 15. If internalResponse\u2019s URL list is empty, then set it to a clone of\n    // request\u2019s URL list.\n    if (internalResponse.urlList.length === 0) {\n      internalResponse.urlList.push(...request.urlList)\n    }\n\n    // 16. If request\u2019s timing allow failed flag is unset, then set\n    // internalResponse\u2019s timing allow passed flag.\n    if (!request.timingAllowFailed) {\n      response.timingAllowPassed = true\n    }\n\n    // 17. If response is not a network error and any of the following returns\n    // blocked\n    // - should internalResponse to request be blocked as mixed content\n    // - should internalResponse to request be blocked by Content Security Policy\n    // - should internalResponse to request be blocked due to its MIME type\n    // - should internalResponse to request be blocked due to nosniff\n    // TODO\n\n    // 18. If response\u2019s type is \"opaque\", internalResponse\u2019s status is 206,\n    // internalResponse\u2019s range-requested flag is set, and request\u2019s header\n    // list does not contain `Range`, then set response and internalResponse\n    // to a network error.\n    if (\n      response.type === 'opaque' &&\n      internalResponse.status === 206 &&\n      internalResponse.rangeRequested &&\n      !request.headers.contains('range', true)\n    ) {\n      response = internalResponse = makeNetworkError()\n    }\n\n    // 19. If response is not a network error and either request\u2019s method is\n    // `HEAD` or `CONNECT`, or internalResponse\u2019s status is a null body status,\n    // set internalResponse\u2019s body to null and disregard any enqueuing toward\n    // it (if any).\n    if (\n      response.status !== 0 &&\n      (request.method === 'HEAD' ||\n        request.method === 'CONNECT' ||\n        nullBodyStatus.includes(internalResponse.status))\n    ) {\n      internalResponse.body = null\n      fetchParams.controller.dump = true\n    }\n\n    // 20. If request\u2019s integrity metadata is not the empty string, then:\n    if (request.integrity) {\n      // 1. Let processBodyError be this step: run fetch finale given fetchParams\n      // and a network error.\n      const processBodyError = (reason) =>\n        fetchFinale(fetchParams, makeNetworkError(reason))\n\n      // 2. If request\u2019s response tainting is \"opaque\", or response\u2019s body is null,\n      // then run processBodyError and abort these steps.\n      if (request.responseTainting === 'opaque' || response.body == null) {\n        processBodyError(response.error)\n        return\n      }\n\n      // 3. Let processBody given bytes be these steps:\n      const processBody = (bytes) => {\n        // 1. If bytes do not match request\u2019s integrity metadata,\n        // then run processBodyError and abort these steps. [SRI]\n        if (!bytesMatch(bytes, request.integrity)) {\n          processBodyError('integrity mismatch')\n          return\n        }\n\n        // 2. Set response\u2019s body to bytes as a body.\n        response.body = safelyExtractBody(bytes)[0]\n\n        // 3. Run fetch finale given fetchParams and response.\n        fetchFinale(fetchParams, response)\n      }\n\n      // 4. Fully read response\u2019s body given processBody and processBodyError.\n      fullyReadBody(response.body, processBody, processBodyError)\n    } else {\n      // 21. Otherwise, run fetch finale given fetchParams and response.\n      fetchFinale(fetchParams, response)\n    }\n  } catch (err) {\n    fetchParams.controller.terminate(err)\n  }\n}\n\n// https://fetch.spec.whatwg.org/#concept-scheme-fetch\n// given a fetch params fetchParams\nfunction schemeFetch (fetchParams) {\n  // Note: since the connection is destroyed on redirect, which sets fetchParams to a\n  // cancelled state, we do not want this condition to trigger *unless* there have been\n  // no redirects. See https://github.com/nodejs/undici/issues/1776\n  // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams.\n  if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) {\n    return Promise.resolve(makeAppropriateNetworkError(fetchParams))\n  }\n\n  // 2. Let request be fetchParams\u2019s request.\n  const { request } = fetchParams\n\n  const { protocol: scheme } = requestCurrentURL(request)\n\n  // 3. Switch on request\u2019s current URL\u2019s scheme and run the associated steps:\n  switch (scheme) {\n    case 'about:': {\n      // If request\u2019s current URL\u2019s path is the string \"blank\", then return a new response\n      // whose status message is `OK`, header list is \u00AB (`Content-Type`, `text/html;charset=utf-8`) \u00BB,\n      // and body is the empty byte sequence as a body.\n\n      // Otherwise, return a network error.\n      return Promise.resolve(makeNetworkError('about scheme is not supported'))\n    }\n    case 'blob:': {\n      if (!resolveObjectURL) {\n        resolveObjectURL = require('node:buffer').resolveObjectURL\n      }\n\n      // 1. Let blobURLEntry be request\u2019s current URL\u2019s blob URL entry.\n      const blobURLEntry = requestCurrentURL(request)\n\n      // https://github.com/web-platform-tests/wpt/blob/7b0ebaccc62b566a1965396e5be7bb2bc06f841f/FileAPI/url/resources/fetch-tests.js#L52-L56\n      // Buffer.resolveObjectURL does not ignore URL queries.\n      if (blobURLEntry.search.length !== 0) {\n        return Promise.resolve(makeNetworkError('NetworkError when attempting to fetch resource.'))\n      }\n\n      const blob = resolveObjectURL(blobURLEntry.toString())\n\n      // 2. If request\u2019s method is not `GET`, blobURLEntry is null, or blobURLEntry\u2019s\n      //    object is not a Blob object, then return a network error.\n      if (request.method !== 'GET' || !webidl.is.Blob(blob)) {\n        return Promise.resolve(makeNetworkError('invalid method'))\n      }\n\n      // 3. Let blob be blobURLEntry\u2019s object.\n      // Note: done above\n\n      // 4. Let response be a new response.\n      const response = makeResponse()\n\n      // 5. Let fullLength be blob\u2019s size.\n      const fullLength = blob.size\n\n      // 6. Let serializedFullLength be fullLength, serialized and isomorphic encoded.\n      const serializedFullLength = isomorphicEncode(`${fullLength}`)\n\n      // 7. Let type be blob\u2019s type.\n      const type = blob.type\n\n      // 8. If request\u2019s header list does not contain `Range`:\n      // 9. Otherwise:\n      if (!request.headersList.contains('range', true)) {\n        // 1. Let bodyWithType be the result of safely extracting blob.\n        // Note: in the FileAPI a blob \"object\" is a Blob *or* a MediaSource.\n        // In node, this can only ever be a Blob. Therefore we can safely\n        // use extractBody directly.\n        const bodyWithType = extractBody(blob)\n\n        // 2. Set response\u2019s status message to `OK`.\n        response.statusText = 'OK'\n\n        // 3. Set response\u2019s body to bodyWithType\u2019s body.\n        response.body = bodyWithType[0]\n\n        // 4. Set response\u2019s header list to \u00AB (`Content-Length`, serializedFullLength), (`Content-Type`, type) \u00BB.\n        response.headersList.set('content-length', serializedFullLength, true)\n        response.headersList.set('content-type', type, true)\n      } else {\n        // 1. Set response\u2019s range-requested flag.\n        response.rangeRequested = true\n\n        // 2. Let rangeHeader be the result of getting `Range` from request\u2019s header list.\n        const rangeHeader = request.headersList.get('range', true)\n\n        // 3. Let rangeValue be the result of parsing a single range header value given rangeHeader and true.\n        const rangeValue = simpleRangeHeaderValue(rangeHeader, true)\n\n        // 4. If rangeValue is failure, then return a network error.\n        if (rangeValue === 'failure') {\n          return Promise.resolve(makeNetworkError('failed to fetch the data URL'))\n        }\n\n        // 5. Let (rangeStart, rangeEnd) be rangeValue.\n        let { rangeStartValue: rangeStart, rangeEndValue: rangeEnd } = rangeValue\n\n        // 6. If rangeStart is null:\n        // 7. Otherwise:\n        if (rangeStart === null) {\n          // 1. Set rangeStart to fullLength \u2212 rangeEnd.\n          rangeStart = fullLength - rangeEnd\n\n          // 2. Set rangeEnd to rangeStart + rangeEnd \u2212 1.\n          rangeEnd = rangeStart + rangeEnd - 1\n        } else {\n          // 1. If rangeStart is greater than or equal to fullLength, then return a network error.\n          if (rangeStart >= fullLength) {\n            return Promise.resolve(makeNetworkError('Range start is greater than the blob\\'s size.'))\n          }\n\n          // 2. If rangeEnd is null or rangeEnd is greater than or equal to fullLength, then set\n          //    rangeEnd to fullLength \u2212 1.\n          if (rangeEnd === null || rangeEnd >= fullLength) {\n            rangeEnd = fullLength - 1\n          }\n        }\n\n        // 8. Let slicedBlob be the result of invoking slice blob given blob, rangeStart,\n        //    rangeEnd + 1, and type.\n        const slicedBlob = blob.slice(rangeStart, rangeEnd + 1, type)\n\n        // 9. Let slicedBodyWithType be the result of safely extracting slicedBlob.\n        // Note: same reason as mentioned above as to why we use extractBody\n        const slicedBodyWithType = extractBody(slicedBlob)\n\n        // 10. Set response\u2019s body to slicedBodyWithType\u2019s body.\n        response.body = slicedBodyWithType[0]\n\n        // 11. Let serializedSlicedLength be slicedBlob\u2019s size, serialized and isomorphic encoded.\n        const serializedSlicedLength = isomorphicEncode(`${slicedBlob.size}`)\n\n        // 12. Let contentRange be the result of invoking build a content range given rangeStart,\n        //     rangeEnd, and fullLength.\n        const contentRange = buildContentRange(rangeStart, rangeEnd, fullLength)\n\n        // 13. Set response\u2019s status to 206.\n        response.status = 206\n\n        // 14. Set response\u2019s status message to `Partial Content`.\n        response.statusText = 'Partial Content'\n\n        // 15. Set response\u2019s header list to \u00AB (`Content-Length`, serializedSlicedLength),\n        //     (`Content-Type`, type), (`Content-Range`, contentRange) \u00BB.\n        response.headersList.set('content-length', serializedSlicedLength, true)\n        response.headersList.set('content-type', type, true)\n        response.headersList.set('content-range', contentRange, true)\n      }\n\n      // 10. Return response.\n      return Promise.resolve(response)\n    }\n    case 'data:': {\n      // 1. Let dataURLStruct be the result of running the\n      //    data: URL processor on request\u2019s current URL.\n      const currentURL = requestCurrentURL(request)\n      const dataURLStruct = dataURLProcessor(currentURL)\n\n      // 2. If dataURLStruct is failure, then return a\n      //    network error.\n      if (dataURLStruct === 'failure') {\n        return Promise.resolve(makeNetworkError('failed to fetch the data URL'))\n      }\n\n      // 3. Let mimeType be dataURLStruct\u2019s MIME type, serialized.\n      const mimeType = serializeAMimeType(dataURLStruct.mimeType)\n\n      // 4. Return a response whose status message is `OK`,\n      //    header list is \u00AB (`Content-Type`, mimeType) \u00BB,\n      //    and body is dataURLStruct\u2019s body as a body.\n      return Promise.resolve(makeResponse({\n        statusText: 'OK',\n        headersList: [\n          ['content-type', { name: 'Content-Type', value: mimeType }]\n        ],\n        body: safelyExtractBody(dataURLStruct.body)[0]\n      }))\n    }\n    case 'file:': {\n      // For now, unfortunate as it is, file URLs are left as an exercise for the reader.\n      // When in doubt, return a network error.\n      return Promise.resolve(makeNetworkError('not implemented... yet...'))\n    }\n    case 'http:':\n    case 'https:': {\n      // Return the result of running HTTP fetch given fetchParams.\n\n      return httpFetch(fetchParams)\n        .catch((err) => makeNetworkError(err))\n    }\n    default: {\n      return Promise.resolve(makeNetworkError('unknown scheme'))\n    }\n  }\n}\n\n// https://fetch.spec.whatwg.org/#finalize-response\nfunction finalizeResponse (fetchParams, response) {\n  // 1. Set fetchParams\u2019s request\u2019s done flag.\n  fetchParams.request.done = true\n\n  // 2, If fetchParams\u2019s process response done is not null, then queue a fetch\n  // task to run fetchParams\u2019s process response done given response, with\n  // fetchParams\u2019s task destination.\n  if (fetchParams.processResponseDone != null) {\n    queueMicrotask(() => fetchParams.processResponseDone(response))\n  }\n}\n\n// https://fetch.spec.whatwg.org/#fetch-finale\nfunction fetchFinale (fetchParams, response) {\n  // 1. Let timingInfo be fetchParams\u2019s timing info.\n  let timingInfo = fetchParams.timingInfo\n\n  // 2. If response is not a network error and fetchParams\u2019s request\u2019s client is a secure context,\n  //    then set timingInfo\u2019s server-timing headers to the result of getting, decoding, and splitting\n  //    `Server-Timing` from response\u2019s internal response\u2019s header list.\n  // TODO\n\n  // 3. Let processResponseEndOfBody be the following steps:\n  const processResponseEndOfBody = () => {\n    // 1. Let unsafeEndTime be the unsafe shared current time.\n    const unsafeEndTime = Date.now() // ?\n\n    // 2. If fetchParams\u2019s request\u2019s destination is \"document\", then set fetchParams\u2019s controller\u2019s\n    //    full timing info to fetchParams\u2019s timing info.\n    if (fetchParams.request.destination === 'document') {\n      fetchParams.controller.fullTimingInfo = timingInfo\n    }\n\n    // 3. Set fetchParams\u2019s controller\u2019s report timing steps to the following steps given a global object global:\n    fetchParams.controller.reportTimingSteps = () => {\n      // 1. If fetchParams\u2019s request\u2019s URL\u2019s scheme is not an HTTP(S) scheme, then return.\n      if (!urlIsHttpHttpsScheme(fetchParams.request.url)) {\n        return\n      }\n\n      // 2. Set timingInfo\u2019s end time to the relative high resolution time given unsafeEndTime and global.\n      timingInfo.endTime = unsafeEndTime\n\n      // 3. Let cacheState be response\u2019s cache state.\n      let cacheState = response.cacheState\n\n      // 4. Let bodyInfo be response\u2019s body info.\n      const bodyInfo = response.bodyInfo\n\n      // 5. If response\u2019s timing allow passed flag is not set, then set timingInfo to the result of creating an\n      //    opaque timing info for timingInfo and set cacheState to the empty string.\n      if (!response.timingAllowPassed) {\n        timingInfo = createOpaqueTimingInfo(timingInfo)\n\n        cacheState = ''\n      }\n\n      // 6. Let responseStatus be 0.\n      let responseStatus = 0\n\n      // 7. If fetchParams\u2019s request\u2019s mode is not \"navigate\" or response\u2019s has-cross-origin-redirects is false:\n      if (fetchParams.request.mode !== 'navigate' || !response.hasCrossOriginRedirects) {\n        // 1. Set responseStatus to response\u2019s status.\n        responseStatus = response.status\n\n        // 2. Let mimeType be the result of extracting a MIME type from response\u2019s header list.\n        const mimeType = extractMimeType(response.headersList)\n\n        // 3. If mimeType is not failure, then set bodyInfo\u2019s content type to the result of minimizing a supported MIME type given mimeType.\n        if (mimeType !== 'failure') {\n          bodyInfo.contentType = minimizeSupportedMimeType(mimeType)\n        }\n      }\n\n      // 8. If fetchParams\u2019s request\u2019s initiator type is non-null, then mark resource timing given timingInfo,\n      //    fetchParams\u2019s request\u2019s URL, fetchParams\u2019s request\u2019s initiator type, global, cacheState, bodyInfo,\n      //    and responseStatus.\n      if (fetchParams.request.initiatorType != null) {\n        markResourceTiming(timingInfo, fetchParams.request.url.href, fetchParams.request.initiatorType, globalThis, cacheState, bodyInfo, responseStatus)\n      }\n    }\n\n    // 4. Let processResponseEndOfBodyTask be the following steps:\n    const processResponseEndOfBodyTask = () => {\n      // 1. Set fetchParams\u2019s request\u2019s done flag.\n      fetchParams.request.done = true\n\n      // 2. If fetchParams\u2019s process response end-of-body is non-null, then run fetchParams\u2019s process\n      //    response end-of-body given response.\n      if (fetchParams.processResponseEndOfBody != null) {\n        queueMicrotask(() => fetchParams.processResponseEndOfBody(response))\n      }\n\n      // 3. If fetchParams\u2019s request\u2019s initiator type is non-null and fetchParams\u2019s request\u2019s client\u2019s\n      //    global object is fetchParams\u2019s task destination, then run fetchParams\u2019s controller\u2019s report\n      //    timing steps given fetchParams\u2019s request\u2019s client\u2019s global object.\n      if (fetchParams.request.initiatorType != null) {\n        fetchParams.controller.reportTimingSteps()\n      }\n    }\n\n    // 5. Queue a fetch task to run processResponseEndOfBodyTask with fetchParams\u2019s task destination\n    queueMicrotask(() => processResponseEndOfBodyTask())\n  }\n\n  // 4. If fetchParams\u2019s process response is non-null, then queue a fetch task to run fetchParams\u2019s\n  //    process response given response, with fetchParams\u2019s task destination.\n  if (fetchParams.processResponse != null) {\n    queueMicrotask(() => {\n      fetchParams.processResponse(response)\n      fetchParams.processResponse = null\n    })\n  }\n\n  // 5. Let internalResponse be response, if response is a network error; otherwise response\u2019s internal response.\n  const internalResponse = response.type === 'error' ? response : (response.internalResponse ?? response)\n\n  // 6. If internalResponse\u2019s body is null, then run processResponseEndOfBody.\n  // 7. Otherwise:\n  if (internalResponse.body == null) {\n    processResponseEndOfBody()\n  } else {\n    // mcollina: all the following steps of the specs are skipped.\n    // The internal transform stream is not needed.\n    // See https://github.com/nodejs/undici/pull/3093#issuecomment-2050198541\n\n    // 1. Let transformStream be a new TransformStream.\n    // 2. Let identityTransformAlgorithm be an algorithm which, given chunk, enqueues chunk in transformStream.\n    // 3. Set up transformStream with transformAlgorithm set to identityTransformAlgorithm and flushAlgorithm\n    //    set to processResponseEndOfBody.\n    // 4. Set internalResponse\u2019s body\u2019s stream to the result of internalResponse\u2019s body\u2019s stream piped through transformStream.\n\n    finished(internalResponse.body.stream, () => {\n      processResponseEndOfBody()\n    })\n  }\n}\n\n// https://fetch.spec.whatwg.org/#http-fetch\nasync function httpFetch (fetchParams) {\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let response be null.\n  let response = null\n\n  // 3. Let actualResponse be null.\n  let actualResponse = null\n\n  // 4. Let timingInfo be fetchParams\u2019s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 5. If request\u2019s service-workers mode is \"all\", then:\n  if (request.serviceWorkers === 'all') {\n    // TODO\n  }\n\n  // 6. If response is null, then:\n  if (response === null) {\n    // 1. If makeCORSPreflight is true and one of these conditions is true:\n    // TODO\n\n    // 2. If request\u2019s redirect mode is \"follow\", then set request\u2019s\n    // service-workers mode to \"none\".\n    if (request.redirect === 'follow') {\n      request.serviceWorkers = 'none'\n    }\n\n    // 3. Set response and actualResponse to the result of running\n    // HTTP-network-or-cache fetch given fetchParams.\n    actualResponse = response = await httpNetworkOrCacheFetch(fetchParams)\n\n    // 4. If request\u2019s response tainting is \"cors\" and a CORS check\n    // for request and response returns failure, then return a network error.\n    if (\n      request.responseTainting === 'cors' &&\n      corsCheck(request, response) === 'failure'\n    ) {\n      return makeNetworkError('cors failure')\n    }\n\n    // 5. If the TAO check for request and response returns failure, then set\n    // request\u2019s timing allow failed flag.\n    if (TAOCheck(request, response) === 'failure') {\n      request.timingAllowFailed = true\n    }\n  }\n\n  // 7. If either request\u2019s response tainting or response\u2019s type\n  // is \"opaque\", and the cross-origin resource policy check with\n  // request\u2019s origin, request\u2019s client, request\u2019s destination,\n  // and actualResponse returns blocked, then return a network error.\n  if (\n    (request.responseTainting === 'opaque' || response.type === 'opaque') &&\n    crossOriginResourcePolicyCheck(\n      request.origin,\n      request.client,\n      request.destination,\n      actualResponse\n    ) === 'blocked'\n  ) {\n    return makeNetworkError('blocked')\n  }\n\n  // 8. If actualResponse\u2019s status is a redirect status, then:\n  if (redirectStatusSet.has(actualResponse.status)) {\n    // 1. If actualResponse\u2019s status is not 303, request\u2019s body is not null,\n    // and the connection uses HTTP/2, then user agents may, and are even\n    // encouraged to, transmit an RST_STREAM frame.\n    // See, https://github.com/whatwg/fetch/issues/1288\n    if (request.redirect !== 'manual') {\n      fetchParams.controller.connection.destroy(undefined, false)\n    }\n\n    // 2. Switch on request\u2019s redirect mode:\n    if (request.redirect === 'error') {\n      // Set response to a network error.\n      response = makeNetworkError('unexpected redirect')\n    } else if (request.redirect === 'manual') {\n      // Set response to an opaque-redirect filtered response whose internal\n      // response is actualResponse.\n      // NOTE(spec): On the web this would return an `opaqueredirect` response,\n      // but that doesn't make sense server side.\n      // See https://github.com/nodejs/undici/issues/1193.\n      response = actualResponse\n    } else if (request.redirect === 'follow') {\n      // Set response to the result of running HTTP-redirect fetch given\n      // fetchParams and response.\n      response = await httpRedirectFetch(fetchParams, response)\n    } else {\n      assert(false)\n    }\n  }\n\n  // 9. Set response\u2019s timing info to timingInfo.\n  response.timingInfo = timingInfo\n\n  // 10. Return response.\n  return response\n}\n\n// https://fetch.spec.whatwg.org/#http-redirect-fetch\nfunction httpRedirectFetch (fetchParams, response) {\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let actualResponse be response, if response is not a filtered response,\n  // and response\u2019s internal response otherwise.\n  const actualResponse = response.internalResponse\n    ? response.internalResponse\n    : response\n\n  // 3. Let locationURL be actualResponse\u2019s location URL given request\u2019s current\n  // URL\u2019s fragment.\n  let locationURL\n\n  try {\n    locationURL = responseLocationURL(\n      actualResponse,\n      requestCurrentURL(request).hash\n    )\n\n    // 4. If locationURL is null, then return response.\n    if (locationURL == null) {\n      return response\n    }\n  } catch (err) {\n    // 5. If locationURL is failure, then return a network error.\n    return Promise.resolve(makeNetworkError(err))\n  }\n\n  // 6. If locationURL\u2019s scheme is not an HTTP(S) scheme, then return a network\n  // error.\n  if (!urlIsHttpHttpsScheme(locationURL)) {\n    return Promise.resolve(makeNetworkError('URL scheme must be a HTTP(S) scheme'))\n  }\n\n  // 7. If request\u2019s redirect count is 20, then return a network error.\n  if (request.redirectCount === 20) {\n    return Promise.resolve(makeNetworkError('redirect count exceeded'))\n  }\n\n  // 8. Increase request\u2019s redirect count by 1.\n  request.redirectCount += 1\n\n  // 9. If request\u2019s mode is \"cors\", locationURL includes credentials, and\n  // request\u2019s origin is not same origin with locationURL\u2019s origin, then return\n  //  a network error.\n  if (\n    request.mode === 'cors' &&\n    (locationURL.username || locationURL.password) &&\n    !sameOrigin(request, locationURL)\n  ) {\n    return Promise.resolve(makeNetworkError('cross origin not allowed for request mode \"cors\"'))\n  }\n\n  // 10. If request\u2019s response tainting is \"cors\" and locationURL includes\n  // credentials, then return a network error.\n  if (\n    request.responseTainting === 'cors' &&\n    (locationURL.username || locationURL.password)\n  ) {\n    return Promise.resolve(makeNetworkError(\n      'URL cannot contain credentials for request mode \"cors\"'\n    ))\n  }\n\n  // 11. If actualResponse\u2019s status is not 303, request\u2019s body is non-null,\n  // and request\u2019s body\u2019s source is null, then return a network error.\n  if (\n    actualResponse.status !== 303 &&\n    request.body != null &&\n    request.body.source == null\n  ) {\n    return Promise.resolve(makeNetworkError())\n  }\n\n  // 12. If one of the following is true\n  // - actualResponse\u2019s status is 301 or 302 and request\u2019s method is `POST`\n  // - actualResponse\u2019s status is 303 and request\u2019s method is not `GET` or `HEAD`\n  if (\n    ([301, 302].includes(actualResponse.status) && request.method === 'POST') ||\n    (actualResponse.status === 303 &&\n      !GET_OR_HEAD.includes(request.method))\n  ) {\n    // then:\n    // 1. Set request\u2019s method to `GET` and request\u2019s body to null.\n    request.method = 'GET'\n    request.body = null\n\n    // 2. For each headerName of request-body-header name, delete headerName from\n    // request\u2019s header list.\n    for (const headerName of requestBodyHeader) {\n      request.headersList.delete(headerName)\n    }\n  }\n\n  // 13. If request\u2019s current URL\u2019s origin is not same origin with locationURL\u2019s\n  //     origin, then for each headerName of CORS non-wildcard request-header name,\n  //     delete headerName from request\u2019s header list.\n  if (!sameOrigin(requestCurrentURL(request), locationURL)) {\n    // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name\n    request.headersList.delete('authorization', true)\n\n    // https://fetch.spec.whatwg.org/#authentication-entries\n    request.headersList.delete('proxy-authorization', true)\n\n    // \"Cookie\" and \"Host\" are forbidden request-headers, which undici doesn't implement.\n    request.headersList.delete('cookie', true)\n    request.headersList.delete('host', true)\n  }\n\n  // 14. If request's body is non-null, then set request's body to the first return\n  // value of safely extracting request's body's source.\n  if (request.body != null) {\n    assert(request.body.source != null)\n    request.body = safelyExtractBody(request.body.source)[0]\n  }\n\n  // 15. Let timingInfo be fetchParams\u2019s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 16. Set timingInfo\u2019s redirect end time and post-redirect start time to the\n  // coarsened shared current time given fetchParams\u2019s cross-origin isolated\n  // capability.\n  timingInfo.redirectEndTime = timingInfo.postRedirectStartTime =\n    coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n\n  // 17. If timingInfo\u2019s redirect start time is 0, then set timingInfo\u2019s\n  //  redirect start time to timingInfo\u2019s start time.\n  if (timingInfo.redirectStartTime === 0) {\n    timingInfo.redirectStartTime = timingInfo.startTime\n  }\n\n  // 18. Append locationURL to request\u2019s URL list.\n  request.urlList.push(locationURL)\n\n  // 19. Invoke set request\u2019s referrer policy on redirect on request and\n  // actualResponse.\n  setRequestReferrerPolicyOnRedirect(request, actualResponse)\n\n  // 20. Return the result of running main fetch given fetchParams and true.\n  return mainFetch(fetchParams, true)\n}\n\n// https://fetch.spec.whatwg.org/#http-network-or-cache-fetch\nasync function httpNetworkOrCacheFetch (\n  fetchParams,\n  isAuthenticationFetch = false,\n  isNewConnectionFetch = false\n) {\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let httpFetchParams be null.\n  let httpFetchParams = null\n\n  // 3. Let httpRequest be null.\n  let httpRequest = null\n\n  // 4. Let response be null.\n  let response = null\n\n  // 5. Let storedResponse be null.\n  // TODO: cache\n\n  // 6. Let httpCache be null.\n  const httpCache = null\n\n  // 7. Let the revalidatingFlag be unset.\n  const revalidatingFlag = false\n\n  // 8. Run these steps, but abort when the ongoing fetch is terminated:\n\n  //    1. If request\u2019s window is \"no-window\" and request\u2019s redirect mode is\n  //    \"error\", then set httpFetchParams to fetchParams and httpRequest to\n  //    request.\n  if (request.window === 'no-window' && request.redirect === 'error') {\n    httpFetchParams = fetchParams\n    httpRequest = request\n  } else {\n    // Otherwise:\n\n    // 1. Set httpRequest to a clone of request.\n    httpRequest = cloneRequest(request)\n\n    // 2. Set httpFetchParams to a copy of fetchParams.\n    httpFetchParams = { ...fetchParams }\n\n    // 3. Set httpFetchParams\u2019s request to httpRequest.\n    httpFetchParams.request = httpRequest\n  }\n\n  //    3. Let includeCredentials be true if one of\n  const includeCredentials =\n    request.credentials === 'include' ||\n    (request.credentials === 'same-origin' &&\n      request.responseTainting === 'basic')\n\n  //    4. Let contentLength be httpRequest\u2019s body\u2019s length, if httpRequest\u2019s\n  //    body is non-null; otherwise null.\n  const contentLength = httpRequest.body ? httpRequest.body.length : null\n\n  //    5. Let contentLengthHeaderValue be null.\n  let contentLengthHeaderValue = null\n\n  //    6. If httpRequest\u2019s body is null and httpRequest\u2019s method is `POST` or\n  //    `PUT`, then set contentLengthHeaderValue to `0`.\n  if (\n    httpRequest.body == null &&\n    ['POST', 'PUT'].includes(httpRequest.method)\n  ) {\n    contentLengthHeaderValue = '0'\n  }\n\n  //    7. If contentLength is non-null, then set contentLengthHeaderValue to\n  //    contentLength, serialized and isomorphic encoded.\n  if (contentLength != null) {\n    contentLengthHeaderValue = isomorphicEncode(`${contentLength}`)\n  }\n\n  //    8. If contentLengthHeaderValue is non-null, then append\n  //    `Content-Length`/contentLengthHeaderValue to httpRequest\u2019s header\n  //    list.\n  if (\n    contentLengthHeaderValue != null &&\n    !httpRequest.headersList.contains('content-length', true)\n  ) {\n    httpRequest.headersList.append('content-length', contentLengthHeaderValue, true)\n  }\n\n  //    9. If contentLengthHeaderValue is non-null, then append (`Content-Length`,\n  //    contentLengthHeaderValue) to httpRequest\u2019s header list.\n\n  //    10. If contentLength is non-null and httpRequest\u2019s keepalive is true,\n  //    then:\n  if (contentLength != null && httpRequest.keepalive) {\n    // NOTE: keepalive is a noop outside of browser context.\n  }\n\n  //    11. If httpRequest\u2019s referrer is a URL, then append\n  //    `Referer`/httpRequest\u2019s referrer, serialized and isomorphic encoded,\n  //     to httpRequest\u2019s header list.\n  if (webidl.is.URL(httpRequest.referrer)) {\n    httpRequest.headersList.append('referer', isomorphicEncode(httpRequest.referrer.href), true)\n  }\n\n  //    12. Append a request `Origin` header for httpRequest.\n  appendRequestOriginHeader(httpRequest)\n\n  //    13. Append the Fetch metadata headers for httpRequest. [FETCH-METADATA]\n  appendFetchMetadata(httpRequest)\n\n  //    14. If httpRequest\u2019s header list does not contain `User-Agent`, then\n  //    user agents should append `User-Agent`/default `User-Agent` value to\n  //    httpRequest\u2019s header list.\n  if (!httpRequest.headersList.contains('user-agent', true)) {\n    httpRequest.headersList.append('user-agent', defaultUserAgent, true)\n  }\n\n  //    15. If httpRequest\u2019s cache mode is \"default\" and httpRequest\u2019s header\n  //    list contains `If-Modified-Since`, `If-None-Match`,\n  //    `If-Unmodified-Since`, `If-Match`, or `If-Range`, then set\n  //    httpRequest\u2019s cache mode to \"no-store\".\n  if (\n    httpRequest.cache === 'default' &&\n    (httpRequest.headersList.contains('if-modified-since', true) ||\n      httpRequest.headersList.contains('if-none-match', true) ||\n      httpRequest.headersList.contains('if-unmodified-since', true) ||\n      httpRequest.headersList.contains('if-match', true) ||\n      httpRequest.headersList.contains('if-range', true))\n  ) {\n    httpRequest.cache = 'no-store'\n  }\n\n  //    16. If httpRequest\u2019s cache mode is \"no-cache\", httpRequest\u2019s prevent\n  //    no-cache cache-control header modification flag is unset, and\n  //    httpRequest\u2019s header list does not contain `Cache-Control`, then append\n  //    `Cache-Control`/`max-age=0` to httpRequest\u2019s header list.\n  if (\n    httpRequest.cache === 'no-cache' &&\n    !httpRequest.preventNoCacheCacheControlHeaderModification &&\n    !httpRequest.headersList.contains('cache-control', true)\n  ) {\n    httpRequest.headersList.append('cache-control', 'max-age=0', true)\n  }\n\n  //    17. If httpRequest\u2019s cache mode is \"no-store\" or \"reload\", then:\n  if (httpRequest.cache === 'no-store' || httpRequest.cache === 'reload') {\n    // 1. If httpRequest\u2019s header list does not contain `Pragma`, then append\n    // `Pragma`/`no-cache` to httpRequest\u2019s header list.\n    if (!httpRequest.headersList.contains('pragma', true)) {\n      httpRequest.headersList.append('pragma', 'no-cache', true)\n    }\n\n    // 2. If httpRequest\u2019s header list does not contain `Cache-Control`,\n    // then append `Cache-Control`/`no-cache` to httpRequest\u2019s header list.\n    if (!httpRequest.headersList.contains('cache-control', true)) {\n      httpRequest.headersList.append('cache-control', 'no-cache', true)\n    }\n  }\n\n  //    18. If httpRequest\u2019s header list contains `Range`, then append\n  //    `Accept-Encoding`/`identity` to httpRequest\u2019s header list.\n  if (httpRequest.headersList.contains('range', true)) {\n    httpRequest.headersList.append('accept-encoding', 'identity', true)\n  }\n\n  //    19. Modify httpRequest\u2019s header list per HTTP. Do not append a given\n  //    header if httpRequest\u2019s header list contains that header\u2019s name.\n  //    TODO: https://github.com/whatwg/fetch/issues/1285#issuecomment-896560129\n  if (!httpRequest.headersList.contains('accept-encoding', true)) {\n    if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) {\n      httpRequest.headersList.append('accept-encoding', 'br, gzip, deflate', true)\n    } else {\n      httpRequest.headersList.append('accept-encoding', 'gzip, deflate', true)\n    }\n  }\n\n  httpRequest.headersList.delete('host', true)\n\n  //    21. If includeCredentials is true, then:\n  if (includeCredentials) {\n    // 1. If the user agent is not configured to block cookies for httpRequest\n    // (see section 7 of [COOKIES]), then:\n    // TODO: credentials\n\n    // 2. If httpRequest\u2019s header list does not contain `Authorization`, then:\n    if (!httpRequest.headersList.contains('authorization', true)) {\n      // 1. Let authorizationValue be null.\n      let authorizationValue = null\n\n      // 2. If there\u2019s an authentication entry for httpRequest and either\n      //    httpRequest\u2019s use-URL-credentials flag is unset or httpRequest\u2019s\n      //    current URL does not include credentials, then set\n      //    authorizationValue to authentication entry.\n      if (hasAuthenticationEntry(httpRequest) && (\n        httpRequest.useURLCredentials === undefined || !includesCredentials(requestCurrentURL(httpRequest))\n      )) {\n        // TODO\n      } else if (includesCredentials(requestCurrentURL(httpRequest)) && isAuthenticationFetch) {\n        // 3. Otherwise, if httpRequest\u2019s current URL does include credentials\n        //    and isAuthenticationFetch is true, set authorizationValue to\n        //    httpRequest\u2019s current URL, converted to an `Authorization` value\n        const { username, password } = requestCurrentURL(httpRequest)\n        authorizationValue = `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`\n      }\n\n      // 4. If authorizationValue is non-null, then append (`Authorization`,\n      //    authorizationValue) to httpRequest\u2019s header list.\n      if (authorizationValue !== null) {\n        httpRequest.headersList.append('Authorization', authorizationValue, false)\n      }\n    }\n  }\n\n  //    21. If there\u2019s a proxy-authentication entry, use it as appropriate.\n  //    TODO: proxy-authentication\n\n  //    22. Set httpCache to the result of determining the HTTP cache\n  //    partition, given httpRequest.\n  //    TODO: cache\n\n  //    23. If httpCache is null, then set httpRequest\u2019s cache mode to\n  //    \"no-store\".\n  if (httpCache == null) {\n    httpRequest.cache = 'no-store'\n  }\n\n  //    24. If httpRequest\u2019s cache mode is neither \"no-store\" nor \"reload\",\n  //    then:\n  if (httpRequest.cache !== 'no-store' && httpRequest.cache !== 'reload') {\n    // TODO: cache\n  }\n\n  // 9. If aborted, then return the appropriate network error for fetchParams.\n  // TODO\n\n  // 10. If response is null, then:\n  if (response == null) {\n    // 1. If httpRequest\u2019s cache mode is \"only-if-cached\", then return a\n    // network error.\n    if (httpRequest.cache === 'only-if-cached') {\n      return makeNetworkError('only if cached')\n    }\n\n    // 2. Let forwardResponse be the result of running HTTP-network fetch\n    // given httpFetchParams, includeCredentials, and isNewConnectionFetch.\n    const forwardResponse = await httpNetworkFetch(\n      httpFetchParams,\n      includeCredentials,\n      isNewConnectionFetch\n    )\n\n    // 3. If httpRequest\u2019s method is unsafe and forwardResponse\u2019s status is\n    // in the range 200 to 399, inclusive, invalidate appropriate stored\n    // responses in httpCache, as per the \"Invalidation\" chapter of HTTP\n    // Caching, and set storedResponse to null. [HTTP-CACHING]\n    if (\n      !safeMethodsSet.has(httpRequest.method) &&\n      forwardResponse.status >= 200 &&\n      forwardResponse.status <= 399\n    ) {\n      // TODO: cache\n    }\n\n    // 4. If the revalidatingFlag is set and forwardResponse\u2019s status is 304,\n    // then:\n    if (revalidatingFlag && forwardResponse.status === 304) {\n      // TODO: cache\n    }\n\n    // 5. If response is null, then:\n    if (response == null) {\n      // 1. Set response to forwardResponse.\n      response = forwardResponse\n\n      // 2. Store httpRequest and forwardResponse in httpCache, as per the\n      // \"Storing Responses in Caches\" chapter of HTTP Caching. [HTTP-CACHING]\n      // TODO: cache\n    }\n  }\n\n  // 11. Set response\u2019s URL list to a clone of httpRequest\u2019s URL list.\n  response.urlList = [...httpRequest.urlList]\n\n  // 12. If httpRequest\u2019s header list contains `Range`, then set response\u2019s\n  // range-requested flag.\n  if (httpRequest.headersList.contains('range', true)) {\n    response.rangeRequested = true\n  }\n\n  // 13. Set response\u2019s request-includes-credentials to includeCredentials.\n  response.requestIncludesCredentials = includeCredentials\n\n  // 14. If response\u2019s status is 401, httpRequest\u2019s response tainting is not \"cors\",\n  //     includeCredentials is true, and request\u2019s traversable for user prompts is\n  //     a traversable navigable:\n  //\n  //     In Node.js there is no traversable navigable to prompt the user, but we\n  //     still need to handle URL-embedded credentials so authentication retries\n  //     for WebSocket handshakes continue to work.\n  if (response.status === 401 && httpRequest.responseTainting !== 'cors' && includeCredentials && (\n    request.useURLCredentials !== undefined ||\n    isTraversableNavigable(request.traversableForUserPrompts)\n  )) {\n    // 2. If request\u2019s body is non-null, then:\n    if (request.body != null) {\n      // 1. If request\u2019s body\u2019s source is null, then return a network error.\n      if (request.body.source == null) {\n        // Note: In Node.js, this code path should not be reached because\n        // isTraversableNavigable() returns false for non-navigable contexts.\n        // However, we handle it gracefully by returning the response instead of\n        // a network error, as we won't actually retry the request.\n        // This aligns with the Fetch spec discussion in whatwg/fetch#1132,\n        // which allows implementations flexibility when credentials can't be obtained.\n        return response\n      }\n\n      // 2. Set request\u2019s body to the body of the result of safely extracting\n      //    request\u2019s body\u2019s source.\n      request.body = safelyExtractBody(request.body.source)[0]\n    }\n\n    // 3. If request\u2019s use-URL-credentials flag is unset or isAuthenticationFetch is\n    //    true, then:\n    if (request.useURLCredentials === undefined || isAuthenticationFetch) {\n      // 1. If fetchParams is canceled, then return the appropriate network error\n      //    for fetchParams.\n      if (isCancelled(fetchParams)) {\n        return makeAppropriateNetworkError(fetchParams)\n      }\n\n      // 2. Let username and password be the result of prompting the end user for a\n      //    username and password, respectively, in request\u2019s traversable for user prompts.\n      // TODO\n\n      // 3. Set the username given request\u2019s current URL and username.\n      // requestCurrentURL(request).username = TODO\n\n      // 4. Set the password given request\u2019s current URL and password.\n      // requestCurrentURL(request).password = TODO\n\n      // In browsers, the user will be prompted to enter a username/password before the request\n      // is re-sent. To prevent an infinite 401 loop, return the response for now.\n      // https://github.com/nodejs/undici/pull/4756\n      return response\n    }\n\n    // 4. Set response to the result of running HTTP-network-or-cache fetch given\n    //    fetchParams and true.\n    fetchParams.controller.connection.destroy()\n\n    response = await httpNetworkOrCacheFetch(fetchParams, true)\n  }\n\n  // 15. If response\u2019s status is 407, then:\n  if (response.status === 407) {\n    // 1. If request\u2019s window is \"no-window\", then return a network error.\n    if (request.window === 'no-window') {\n      return makeNetworkError()\n    }\n\n    // 2. ???\n\n    // 3. If fetchParams is canceled, then return the appropriate network error for fetchParams.\n    if (isCancelled(fetchParams)) {\n      return makeAppropriateNetworkError(fetchParams)\n    }\n\n    // 4. Prompt the end user as appropriate in request\u2019s window and store\n    // the result as a proxy-authentication entry. [HTTP-AUTH]\n    // TODO: Invoke some kind of callback?\n\n    // 5. Set response to the result of running HTTP-network-or-cache fetch given\n    // fetchParams.\n    // TODO\n    return makeNetworkError('proxy authentication required')\n  }\n\n  // 16. If all of the following are true\n  if (\n    // response\u2019s status is 421\n    response.status === 421 &&\n    // isNewConnectionFetch is false\n    !isNewConnectionFetch &&\n    // request\u2019s body is null, or request\u2019s body is non-null and request\u2019s body\u2019s source is non-null\n    (request.body == null || request.body.source != null)\n  ) {\n    // then:\n\n    // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams.\n    if (isCancelled(fetchParams)) {\n      return makeAppropriateNetworkError(fetchParams)\n    }\n\n    // 2. Set response to the result of running HTTP-network-or-cache\n    // fetch given fetchParams, isAuthenticationFetch, and true.\n\n    // TODO (spec): The spec doesn't specify this but we need to cancel\n    // the active response before we can start a new one.\n    // https://github.com/whatwg/fetch/issues/1293\n    fetchParams.controller.connection.destroy()\n\n    response = await httpNetworkOrCacheFetch(\n      fetchParams,\n      isAuthenticationFetch,\n      true\n    )\n  }\n\n  // 17. If isAuthenticationFetch is true, then create an authentication entry\n  if (isAuthenticationFetch) {\n    // TODO\n  }\n\n  // 18. Return response.\n  return response\n}\n\n// https://fetch.spec.whatwg.org/#http-network-fetch\nasync function httpNetworkFetch (\n  fetchParams,\n  includeCredentials = false,\n  forceNewConnection = false\n) {\n  assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed)\n\n  fetchParams.controller.connection = {\n    abort: null,\n    destroyed: false,\n    destroy (err, abort = true) {\n      if (!this.destroyed) {\n        this.destroyed = true\n        if (abort) {\n          this.abort?.(err ?? new DOMException('The operation was aborted.', 'AbortError'))\n        }\n      }\n    }\n  }\n\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let response be null.\n  let response = null\n\n  // 3. Let timingInfo be fetchParams\u2019s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 4. Let httpCache be the result of determining the HTTP cache partition,\n  // given request.\n  // TODO: cache\n  const httpCache = null\n\n  // 5. If httpCache is null, then set request\u2019s cache mode to \"no-store\".\n  if (httpCache == null) {\n    request.cache = 'no-store'\n  }\n\n  // 6. Let networkPartitionKey be the result of determining the network\n  // partition key given request.\n  // TODO\n\n  // 7. Let newConnection be \"yes\" if forceNewConnection is true; otherwise\n  // \"no\".\n  const newConnection = forceNewConnection ? 'yes' : 'no' // eslint-disable-line no-unused-vars\n\n  // 8. Switch on request\u2019s mode:\n  if (request.mode === 'websocket') {\n    // Let connection be the result of obtaining a WebSocket connection,\n    // given request\u2019s current URL.\n    // TODO\n  } else {\n    // Let connection be the result of obtaining a connection, given\n    // networkPartitionKey, request\u2019s current URL\u2019s origin,\n    // includeCredentials, and forceNewConnection.\n    // TODO\n  }\n\n  // 9. Run these steps, but abort when the ongoing fetch is terminated:\n\n  //    1. If connection is failure, then return a network error.\n\n  //    2. Set timingInfo\u2019s final connection timing info to the result of\n  //    calling clamp and coarsen connection timing info with connection\u2019s\n  //    timing info, timingInfo\u2019s post-redirect start time, and fetchParams\u2019s\n  //    cross-origin isolated capability.\n\n  //    3. If connection is not an HTTP/2 connection, request\u2019s body is non-null,\n  //    and request\u2019s body\u2019s source is null, then append (`Transfer-Encoding`,\n  //    `chunked`) to request\u2019s header list.\n\n  //    4. Set timingInfo\u2019s final network-request start time to the coarsened\n  //    shared current time given fetchParams\u2019s cross-origin isolated\n  //    capability.\n\n  //    5. Set response to the result of making an HTTP request over connection\n  //    using request with the following caveats:\n\n  //        - Follow the relevant requirements from HTTP. [HTTP] [HTTP-SEMANTICS]\n  //        [HTTP-COND] [HTTP-CACHING] [HTTP-AUTH]\n\n  //        - If request\u2019s body is non-null, and request\u2019s body\u2019s source is null,\n  //        then the user agent may have a buffer of up to 64 kibibytes and store\n  //        a part of request\u2019s body in that buffer. If the user agent reads from\n  //        request\u2019s body beyond that buffer\u2019s size and the user agent needs to\n  //        resend request, then instead return a network error.\n\n  //        - Set timingInfo\u2019s final network-response start time to the coarsened\n  //        shared current time given fetchParams\u2019s cross-origin isolated capability,\n  //        immediately after the user agent\u2019s HTTP parser receives the first byte\n  //        of the response (e.g., frame header bytes for HTTP/2 or response status\n  //        line for HTTP/1.x).\n\n  //        - Wait until all the headers are transmitted.\n\n  //        - Any responses whose status is in the range 100 to 199, inclusive,\n  //        and is not 101, are to be ignored, except for the purposes of setting\n  //        timingInfo\u2019s final network-response start time above.\n\n  //    - If request\u2019s header list contains `Transfer-Encoding`/`chunked` and\n  //    response is transferred via HTTP/1.0 or older, then return a network\n  //    error.\n\n  //    - If the HTTP request results in a TLS client certificate dialog, then:\n\n  //        1. If request\u2019s window is an environment settings object, make the\n  //        dialog available in request\u2019s window.\n\n  //        2. Otherwise, return a network error.\n\n  // To transmit request\u2019s body body, run these steps:\n  let requestBody = null\n  // 1. If body is null and fetchParams\u2019s process request end-of-body is\n  // non-null, then queue a fetch task given fetchParams\u2019s process request\n  // end-of-body and fetchParams\u2019s task destination.\n  if (request.body == null && fetchParams.processRequestEndOfBody) {\n    queueMicrotask(() => fetchParams.processRequestEndOfBody())\n  } else if (request.body != null) {\n    // 2. Otherwise, if body is non-null:\n\n    //    1. Let processBodyChunk given bytes be these steps:\n    const processBodyChunk = async function * (bytes) {\n      // 1. If the ongoing fetch is terminated, then abort these steps.\n      if (isCancelled(fetchParams)) {\n        return\n      }\n\n      // 2. Run this step in parallel: transmit bytes.\n      yield bytes\n\n      // 3. If fetchParams\u2019s process request body is non-null, then run\n      // fetchParams\u2019s process request body given bytes\u2019s length.\n      fetchParams.processRequestBodyChunkLength?.(bytes.byteLength)\n    }\n\n    // 2. Let processEndOfBody be these steps:\n    const processEndOfBody = () => {\n      // 1. If fetchParams is canceled, then abort these steps.\n      if (isCancelled(fetchParams)) {\n        return\n      }\n\n      // 2. If fetchParams\u2019s process request end-of-body is non-null,\n      // then run fetchParams\u2019s process request end-of-body.\n      if (fetchParams.processRequestEndOfBody) {\n        fetchParams.processRequestEndOfBody()\n      }\n    }\n\n    // 3. Let processBodyError given e be these steps:\n    const processBodyError = (e) => {\n      // 1. If fetchParams is canceled, then abort these steps.\n      if (isCancelled(fetchParams)) {\n        return\n      }\n\n      // 2. If e is an \"AbortError\" DOMException, then abort fetchParams\u2019s controller.\n      if (e.name === 'AbortError') {\n        fetchParams.controller.abort()\n      } else {\n        fetchParams.controller.terminate(e)\n      }\n    }\n\n    // 4. Incrementally read request\u2019s body given processBodyChunk, processEndOfBody,\n    // processBodyError, and fetchParams\u2019s task destination.\n    requestBody = (async function * () {\n      try {\n        for await (const bytes of request.body.stream) {\n          yield * processBodyChunk(bytes)\n        }\n        processEndOfBody()\n      } catch (err) {\n        processBodyError(err)\n      }\n    })()\n  }\n\n  try {\n    // socket is only provided for websockets\n    const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody })\n\n    if (socket) {\n      response = makeResponse({ status, statusText, headersList, socket })\n    } else {\n      const iterator = body[Symbol.asyncIterator]()\n      fetchParams.controller.next = () => iterator.next()\n\n      response = makeResponse({ status, statusText, headersList })\n    }\n  } catch (err) {\n    // 10. If aborted, then:\n    if (err.name === 'AbortError') {\n      // 1. If connection uses HTTP/2, then transmit an RST_STREAM frame.\n      fetchParams.controller.connection.destroy()\n\n      // 2. Return the appropriate network error for fetchParams.\n      return makeAppropriateNetworkError(fetchParams, err)\n    }\n\n    return makeNetworkError(err)\n  }\n\n  // 11. Let pullAlgorithm be an action that resumes the ongoing fetch\n  // if it is suspended.\n  const pullAlgorithm = () => {\n    return fetchParams.controller.resume()\n  }\n\n  // 12. Let cancelAlgorithm be an algorithm that aborts fetchParams\u2019s\n  // controller with reason, given reason.\n  const cancelAlgorithm = (reason) => {\n    // If the aborted fetch was already terminated, then we do not\n    // need to do anything.\n    if (!isCancelled(fetchParams)) {\n      fetchParams.controller.abort(reason)\n    }\n  }\n\n  // 13. Let highWaterMark be a non-negative, non-NaN number, chosen by\n  // the user agent.\n  // TODO\n\n  // 14. Let sizeAlgorithm be an algorithm that accepts a chunk object\n  // and returns a non-negative, non-NaN, non-infinite number, chosen by the user agent.\n  // TODO\n\n  // 15. Let stream be a new ReadableStream.\n  // 16. Set up stream with byte reading support with pullAlgorithm set to pullAlgorithm,\n  //     cancelAlgorithm set to cancelAlgorithm.\n  const stream = new ReadableStream(\n    {\n      start (controller) {\n        fetchParams.controller.controller = controller\n      },\n      pull: pullAlgorithm,\n      cancel: cancelAlgorithm,\n      type: 'bytes'\n    }\n  )\n\n  // 17. Run these steps, but abort when the ongoing fetch is terminated:\n\n  //    1. Set response\u2019s body to a new body whose stream is stream.\n  response.body = { stream, source: null, length: null }\n\n  //    2. If response is not a network error and request\u2019s cache mode is\n  //    not \"no-store\", then update response in httpCache for request.\n  //    TODO\n\n  //    3. If includeCredentials is true and the user agent is not configured\n  //    to block cookies for request (see section 7 of [COOKIES]), then run the\n  //    \"set-cookie-string\" parsing algorithm (see section 5.2 of [COOKIES]) on\n  //    the value of each header whose name is a byte-case-insensitive match for\n  //    `Set-Cookie` in response\u2019s header list, if any, and request\u2019s current URL.\n  //    TODO\n\n  // 18. If aborted, then:\n  // TODO\n\n  // 19. Run these steps in parallel:\n\n  //    1. Run these steps, but abort when fetchParams is canceled:\n  if (!fetchParams.controller.resume) {\n    fetchParams.controller.on('terminated', onAborted)\n  }\n\n  fetchParams.controller.resume = async () => {\n    // 1. While true\n    while (true) {\n      // 1-3. See onData...\n\n      // 4. Set bytes to the result of handling content codings given\n      // codings and bytes.\n      let bytes\n      let isFailure\n      try {\n        const { done, value } = await fetchParams.controller.next()\n\n        if (isAborted(fetchParams)) {\n          break\n        }\n\n        bytes = done ? undefined : value\n      } catch (err) {\n        if (fetchParams.controller.ended && !timingInfo.encodedBodySize) {\n          // zlib doesn't like empty streams.\n          bytes = undefined\n        } else {\n          bytes = err\n\n          // err may be propagated from the result of calling readablestream.cancel,\n          // which might not be an error. https://github.com/nodejs/undici/issues/2009\n          isFailure = true\n        }\n      }\n\n      if (bytes === undefined) {\n        // 2. Otherwise, if the bytes transmission for response\u2019s message\n        // body is done normally and stream is readable, then close\n        // stream, finalize response for fetchParams and response, and\n        // abort these in-parallel steps.\n        readableStreamClose(fetchParams.controller.controller)\n\n        finalizeResponse(fetchParams, response)\n\n        return\n      }\n\n      // 5. Increase timingInfo\u2019s decoded body size by bytes\u2019s length.\n      timingInfo.decodedBodySize += bytes?.byteLength ?? 0\n\n      // 6. If bytes is failure, then terminate fetchParams\u2019s controller.\n      if (isFailure) {\n        fetchParams.controller.terminate(bytes)\n        return\n      }\n\n      // 7. Enqueue a Uint8Array wrapping an ArrayBuffer containing bytes\n      // into stream.\n      const buffer = new Uint8Array(bytes)\n      if (buffer.byteLength) {\n        fetchParams.controller.controller.enqueue(buffer)\n      }\n\n      // 8. If stream is errored, then terminate the ongoing fetch.\n      if (isErrored(stream)) {\n        fetchParams.controller.terminate()\n        return\n      }\n\n      // 9. If stream doesn\u2019t need more data ask the user agent to suspend\n      // the ongoing fetch.\n      if (fetchParams.controller.controller.desiredSize <= 0) {\n        return\n      }\n    }\n  }\n\n  //    2. If aborted, then:\n  function onAborted (reason) {\n    // 2. If fetchParams is aborted, then:\n    if (isAborted(fetchParams)) {\n      // 1. Set response\u2019s aborted flag.\n      response.aborted = true\n\n      // 2. If stream is readable, then error stream with the result of\n      //    deserialize a serialized abort reason given fetchParams\u2019s\n      //    controller\u2019s serialized abort reason and an\n      //    implementation-defined realm.\n      if (isReadable(stream)) {\n        fetchParams.controller.controller.error(\n          fetchParams.controller.serializedAbortReason\n        )\n      }\n    } else {\n      // 3. Otherwise, if stream is readable, error stream with a TypeError.\n      if (isReadable(stream)) {\n        fetchParams.controller.controller.error(new TypeError('terminated', {\n          cause: isErrorLike(reason) ? reason : undefined\n        }))\n      }\n    }\n\n    // 4. If connection uses HTTP/2, then transmit an RST_STREAM frame.\n    // 5. Otherwise, the user agent should close connection unless it would be bad for performance to do so.\n    fetchParams.controller.connection.destroy()\n  }\n\n  // 20. Return response.\n  return response\n\n  function dispatch ({ body }) {\n    const url = requestCurrentURL(request)\n    /** @type {import('../../..').Agent} */\n    const agent = fetchParams.controller.dispatcher\n\n    const path = url.pathname + url.search\n    const hasTrailingQuestionMark = url.search.length === 0 && url.href[url.href.length - url.hash.length - 1] === '?'\n\n    return dispatchWithProtocolPreference(body)\n\n    function dispatchWithProtocolPreference (body, allowH2) {\n      return new Promise((resolve, reject) => agent.dispatch(\n        {\n          path: hasTrailingQuestionMark ? `${path}?` : path,\n          origin: url.origin,\n          method: request.method,\n          body: agent.isMockActive ? request.body && (request.body.source || request.body.stream) : body,\n          headers: request.headersList.entries,\n          maxRedirections: 0,\n          upgrade: request.mode === 'websocket' ? 'websocket' : undefined,\n          ...(allowH2 === false ? { allowH2 } : null)\n        },\n        {\n          body: null,\n          abort: null,\n\n          onRequestStart (controller) {\n            // TODO (fix): Do we need connection here?\n            const { connection } = fetchParams.controller\n\n            // Set timingInfo\u2019s final connection timing info to the result of calling clamp and coarsen\n            // connection timing info with connection\u2019s timing info, timingInfo\u2019s post-redirect start\n            // time, and fetchParams\u2019s cross-origin isolated capability.\n            // TODO: implement connection timing\n            timingInfo.finalConnectionTimingInfo = clampAndCoarsenConnectionTimingInfo(undefined, timingInfo.postRedirectStartTime, fetchParams.crossOriginIsolatedCapability)\n\n            const abort = (reason) => controller.abort(reason)\n\n            if (connection.destroyed) {\n              abort(new DOMException('The operation was aborted.', 'AbortError'))\n            } else {\n              fetchParams.controller.on('terminated', abort)\n              this.abort = connection.abort = abort\n            }\n\n            // Set timingInfo\u2019s final network-request start time to the coarsened shared current time given\n            // fetchParams\u2019s cross-origin isolated capability.\n            timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n          },\n\n          onResponseStarted () {\n            // Set timingInfo\u2019s final network-response start time to the coarsened shared current\n            // time given fetchParams\u2019s cross-origin isolated capability, immediately after the\n            // user agent\u2019s HTTP parser receives the first byte of the response (e.g., frame header\n            // bytes for HTTP/2 or response status line for HTTP/1.x).\n            timingInfo.finalNetworkResponseStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n          },\n\n          onResponseStart (controller, status, headers, statusText) {\n            if (status < 200) {\n              return\n            }\n\n            const rawHeaders = controller?.rawHeaders ?? []\n            const headersList = new HeadersList()\n            appendHeadersListFromResponseHeaders(headersList, headers, rawHeaders)\n            const location = headersList.get('location', true)\n\n            this.body = new Readable({ read: () => controller.resume() })\n\n            const willFollow = location && request.redirect === 'follow' &&\n              redirectStatusSet.has(status)\n\n            const decoders = []\n\n            // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding\n            if (request.method !== 'HEAD' && request.method !== 'CONNECT' && !nullBodyStatus.includes(status) && !willFollow) {\n              // https://www.rfc-editor.org/rfc/rfc7231#section-3.1.2.1\n              const contentEncoding = headersList.get('content-encoding', true)\n              // \"All content-coding values are case-insensitive...\"\n              /** @type {string[]} */\n              const codings = contentEncoding ? contentEncoding.toLowerCase().split(',') : []\n\n              // Limit the number of content-encodings to prevent resource exhaustion.\n              // CVE fix similar to urllib3 (GHSA-gm62-xv2j-4w53) and curl (CVE-2022-32206).\n              const maxContentEncodings = 5\n              if (codings.length > maxContentEncodings) {\n                reject(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`))\n                return\n              }\n\n              for (let i = codings.length - 1; i >= 0; --i) {\n                const coding = codings[i].trim()\n                // https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2\n                if (coding === 'x-gzip' || coding === 'gzip') {\n                  decoders.push(zlib.createGunzip({\n                    // Be less strict when decoding compressed responses, since sometimes\n                    // servers send slightly invalid responses that are still accepted\n                    // by common browsers.\n                    // Always using Z_SYNC_FLUSH is what cURL does.\n                    flush: zlib.constants.Z_SYNC_FLUSH,\n                    finishFlush: zlib.constants.Z_SYNC_FLUSH\n                  }))\n                } else if (coding === 'deflate') {\n                  decoders.push(createInflate({\n                    flush: zlib.constants.Z_SYNC_FLUSH,\n                    finishFlush: zlib.constants.Z_SYNC_FLUSH\n                  }))\n                } else if (coding === 'br') {\n                  decoders.push(zlib.createBrotliDecompress({\n                    flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n                    finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH\n                  }))\n                } else if (coding === 'zstd') {\n                  decoders.push(zlib.createZstdDecompress({\n                    flush: zlib.constants.ZSTD_e_continue,\n                    finishFlush: zlib.constants.ZSTD_e_end\n                  }))\n                } else {\n                  decoders.length = 0\n                  break\n                }\n              }\n            }\n\n            const onError = (err) => this.onResponseError(controller, err)\n\n            resolve({\n              status,\n              statusText,\n              headersList,\n              body: decoders.length\n                ? pipeline(this.body, ...decoders, (err) => {\n                  if (err) {\n                    this.onResponseError(controller, err)\n                  }\n                }).on('error', onError)\n                : this.body.on('error', onError)\n            })\n          },\n\n          onResponseData (controller, chunk) {\n            if (fetchParams.controller.dump) {\n              return\n            }\n\n            // 1. If one or more bytes have been transmitted from response\u2019s\n            // message body, then:\n\n            //  1. Let bytes be the transmitted bytes.\n            const bytes = chunk\n\n            //  2. Let codings be the result of extracting header list values\n            //  given `Content-Encoding` and response\u2019s header list.\n            //  See pullAlgorithm.\n\n            //  3. Increase timingInfo\u2019s encoded body size by bytes\u2019s length.\n            timingInfo.encodedBodySize += bytes.byteLength\n\n            //  4. See pullAlgorithm...\n\n            if (this.body.push(bytes) === false) {\n              controller.pause()\n            }\n          },\n\n          onResponseEnd () {\n            if (this.abort) {\n              fetchParams.controller.off('terminated', this.abort)\n            }\n\n            fetchParams.controller.ended = true\n\n            this.body?.push(null)\n          },\n\n          onResponseError (_controller, error) {\n            if (this.abort) {\n              fetchParams.controller.off('terminated', this.abort)\n            }\n\n            if (\n              request.mode === 'websocket' &&\n              allowH2 !== false &&\n              error?.code === 'UND_ERR_INFO' &&\n              error?.message === 'HTTP/2: Extended CONNECT protocol not supported by server'\n            ) {\n              // The origin negotiated H2, but RFC 8441 websocket support is unavailable.\n              // Retry the opening handshake on a fresh HTTP/1.1-only connection instead.\n              resolve(dispatchWithProtocolPreference(body, false))\n              return\n            }\n\n            this.body?.destroy(error)\n\n            fetchParams.controller.terminate(error)\n\n            reject(error)\n          },\n\n          onRequestUpgrade (controller, status, headers, socket) {\n            // We need to support 200 for websocket over h2 as per RFC-8441\n            // Absence of session means H1\n            if ((socket.session != null && status !== 200) || (socket.session == null && status !== 101)) {\n              return false\n            }\n\n            const rawHeaders = controller?.rawHeaders ?? []\n            const headersList = new HeadersList()\n            appendHeadersListFromResponseHeaders(headersList, headers, rawHeaders)\n\n            resolve({\n              status,\n              statusText: STATUS_CODES[status],\n              headersList,\n              socket\n            })\n\n            return true\n          }\n        }\n      ))\n    }\n  }\n}\n\nmodule.exports = {\n  fetch,\n  Fetch,\n  fetching,\n  finalizeAndReportTiming\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { URLSerializer } = require('../fetch/data-url')\nconst { isValidHeaderName } = require('../fetch/util')\n\n/**\n * @see https://url.spec.whatwg.org/#concept-url-equals\n * @param {URL} A\n * @param {URL} B\n * @param {boolean | undefined} excludeFragment\n * @returns {boolean}\n */\nfunction urlEquals (A, B, excludeFragment = false) {\n  const serializedA = URLSerializer(A, excludeFragment)\n\n  const serializedB = URLSerializer(B, excludeFragment)\n\n  return serializedA === serializedB\n}\n\n/**\n * @see https://github.com/chromium/chromium/blob/694d20d134cb553d8d89e5500b9148012b1ba299/content/browser/cache_storage/cache_storage_cache.cc#L260-L262\n * @param {string} header\n */\nfunction getFieldValues (header) {\n  assert(header !== null)\n\n  const values = []\n\n  for (let value of header.split(',')) {\n    value = value.trim()\n\n    if (isValidHeaderName(value)) {\n      values.push(value)\n    }\n  }\n\n  return values\n}\n\nmodule.exports = {\n  urlEquals,\n  getFieldValues\n}\n", "'use strict'\n\nconst assert = require('node:assert')\n\nconst { kConstruct } = require('../../core/symbols')\nconst { urlEquals, getFieldValues } = require('./util')\nconst { kEnumerableProperty, isDisturbed } = require('../../core/util')\nconst { webidl } = require('../webidl')\nconst { cloneResponse, fromInnerResponse, getResponseState } = require('../fetch/response')\nconst { Request, fromInnerRequest, getRequestState } = require('../fetch/request')\nconst { fetching } = require('../fetch/index')\nconst { urlIsHttpHttpsScheme, readAllBytes } = require('../fetch/util')\n/**\n * @see https://w3c.github.io/ServiceWorker/#dfn-cache-batch-operation\n * @typedef {Object} CacheBatchOperation\n * @property {'delete' | 'put'} type\n * @property {any} request\n * @property {any} response\n * @property {import('../../../types/cache').CacheQueryOptions} options\n */\n\n/**\n * @see https://w3c.github.io/ServiceWorker/#dfn-request-response-list\n * @typedef {[any, any][]} requestResponseList\n */\n\nclass Cache {\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list\n   * @type {requestResponseList}\n   */\n  #relevantRequestResponseList\n\n  constructor () {\n    if (arguments[0] !== kConstruct) {\n      webidl.illegalConstructor()\n    }\n\n    webidl.util.markAsUncloneable(this)\n    this.#relevantRequestResponseList = arguments[1]\n  }\n\n  async match (request, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.match'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    const p = this.#internalMatchAll(request, options, 1)\n\n    if (p.length === 0) {\n      return\n    }\n\n    return p[0]\n  }\n\n  async matchAll (request = undefined, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.matchAll'\n    if (request !== undefined) request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    return this.#internalMatchAll(request, options)\n  }\n\n  async add (request) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.add'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n\n    // 1.\n    const requests = [request]\n\n    // 2.\n    const responseArrayPromise = this.addAll(requests)\n\n    // 3.\n    return await responseArrayPromise\n  }\n\n  async addAll (requests) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.addAll'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    // 1.\n    const responsePromises = []\n\n    // 2.\n    const requestList = []\n\n    // 3.\n    for (let request of requests) {\n      if (request === undefined) {\n        throw webidl.errors.conversionFailed({\n          prefix,\n          argument: 'Argument 1',\n          types: ['undefined is not allowed']\n        })\n      }\n\n      request = webidl.converters.RequestInfo(request)\n\n      if (typeof request === 'string') {\n        continue\n      }\n\n      // 3.1\n      const r = getRequestState(request)\n\n      // 3.2\n      if (!urlIsHttpHttpsScheme(r.url) || r.method !== 'GET') {\n        throw webidl.errors.exception({\n          header: prefix,\n          message: 'Expected http/s scheme when method is not GET.'\n        })\n      }\n    }\n\n    // 4.\n    /** @type {ReturnType<typeof fetching>[]} */\n    const fetchControllers = []\n\n    // 5.\n    for (const request of requests) {\n      // 5.1\n      const r = getRequestState(new Request(request))\n\n      // 5.2\n      if (!urlIsHttpHttpsScheme(r.url)) {\n        throw webidl.errors.exception({\n          header: prefix,\n          message: 'Expected http/s scheme.'\n        })\n      }\n\n      // 5.4\n      r.initiator = 'fetch'\n      r.destination = 'subresource'\n\n      // 5.5\n      requestList.push(r)\n\n      // 5.6\n      const responsePromise = Promise.withResolvers()\n\n      // 5.7\n      fetchControllers.push(fetching({\n        request: r,\n        processResponse (response) {\n          // 1.\n          if (response.type === 'error' || response.status === 206 || response.status < 200 || response.status > 299) {\n            responsePromise.reject(webidl.errors.exception({\n              header: 'Cache.addAll',\n              message: 'Received an invalid status code or the request failed.'\n            }))\n          } else if (response.headersList.contains('vary')) { // 2.\n            // 2.1\n            const fieldValues = getFieldValues(response.headersList.get('vary'))\n\n            // 2.2\n            for (const fieldValue of fieldValues) {\n              // 2.2.1\n              if (fieldValue === '*') {\n                responsePromise.reject(webidl.errors.exception({\n                  header: 'Cache.addAll',\n                  message: 'invalid vary field value'\n                }))\n\n                for (const controller of fetchControllers) {\n                  controller.abort()\n                }\n\n                return\n              }\n            }\n          }\n        },\n        processResponseEndOfBody (response) {\n          // 1.\n          if (response.aborted) {\n            responsePromise.reject(new DOMException('aborted', 'AbortError'))\n            return\n          }\n\n          // 2.\n          responsePromise.resolve(response)\n        }\n      }))\n\n      // 5.8\n      responsePromises.push(responsePromise.promise)\n    }\n\n    // 6.\n    const p = Promise.all(responsePromises)\n\n    // 7.\n    const responses = await p\n\n    // 7.1\n    const operations = []\n\n    // 7.2\n    let index = 0\n\n    // 7.3\n    for (const response of responses) {\n      // 7.3.1\n      /** @type {CacheBatchOperation} */\n      const operation = {\n        type: 'put', // 7.3.2\n        request: requestList[index], // 7.3.3\n        response // 7.3.4\n      }\n\n      operations.push(operation) // 7.3.5\n\n      index++ // 7.3.6\n    }\n\n    // 7.5\n    const cacheJobPromise = Promise.withResolvers()\n\n    // 7.6.1\n    let errorData = null\n\n    // 7.6.2\n    try {\n      this.#batchCacheOperations(operations)\n    } catch (e) {\n      errorData = e\n    }\n\n    // 7.6.3\n    queueMicrotask(() => {\n      // 7.6.3.1\n      if (errorData === null) {\n        cacheJobPromise.resolve(undefined)\n      } else {\n        // 7.6.3.2\n        cacheJobPromise.reject(errorData)\n      }\n    })\n\n    // 7.7\n    return cacheJobPromise.promise\n  }\n\n  async put (request, response) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.put'\n    webidl.argumentLengthCheck(arguments, 2, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n    response = webidl.converters.Response(response, prefix, 'response')\n\n    // 1.\n    let innerRequest = null\n\n    // 2.\n    if (webidl.is.Request(request)) {\n      innerRequest = getRequestState(request)\n    } else { // 3.\n      innerRequest = getRequestState(new Request(request))\n    }\n\n    // 4.\n    if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== 'GET') {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: 'Expected an http/s scheme when method is not GET'\n      })\n    }\n\n    // 5.\n    const innerResponse = getResponseState(response)\n\n    // 6.\n    if (innerResponse.status === 206) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: 'Got 206 status'\n      })\n    }\n\n    // 7.\n    if (innerResponse.headersList.contains('vary')) {\n      // 7.1.\n      const fieldValues = getFieldValues(innerResponse.headersList.get('vary'))\n\n      // 7.2.\n      for (const fieldValue of fieldValues) {\n        // 7.2.1\n        if (fieldValue === '*') {\n          throw webidl.errors.exception({\n            header: prefix,\n            message: 'Got * vary field value'\n          })\n        }\n      }\n    }\n\n    // 8.\n    if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: 'Response body is locked or disturbed'\n      })\n    }\n\n    // 9.\n    const clonedResponse = cloneResponse(innerResponse)\n\n    // 10.\n    const bodyReadPromise = Promise.withResolvers()\n\n    // 11.\n    if (innerResponse.body != null) {\n      // 11.1\n      const stream = innerResponse.body.stream\n\n      // 11.2\n      const reader = stream.getReader()\n\n      // 11.3\n      readAllBytes(reader, bodyReadPromise.resolve, bodyReadPromise.reject)\n    } else {\n      bodyReadPromise.resolve(undefined)\n    }\n\n    // 12.\n    /** @type {CacheBatchOperation[]} */\n    const operations = []\n\n    // 13.\n    /** @type {CacheBatchOperation} */\n    const operation = {\n      type: 'put', // 14.\n      request: innerRequest, // 15.\n      response: clonedResponse // 16.\n    }\n\n    // 17.\n    operations.push(operation)\n\n    // 19.\n    const bytes = await bodyReadPromise.promise\n\n    if (clonedResponse.body != null) {\n      clonedResponse.body.source = bytes\n    }\n\n    // 19.1\n    const cacheJobPromise = Promise.withResolvers()\n\n    // 19.2.1\n    let errorData = null\n\n    // 19.2.2\n    try {\n      this.#batchCacheOperations(operations)\n    } catch (e) {\n      errorData = e\n    }\n\n    // 19.2.3\n    queueMicrotask(() => {\n      // 19.2.3.1\n      if (errorData === null) {\n        cacheJobPromise.resolve()\n      } else { // 19.2.3.2\n        cacheJobPromise.reject(errorData)\n      }\n    })\n\n    return cacheJobPromise.promise\n  }\n\n  async delete (request, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.delete'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    /**\n     * @type {Request}\n     */\n    let r = null\n\n    if (webidl.is.Request(request)) {\n      r = getRequestState(request)\n\n      if (r.method !== 'GET' && !options.ignoreMethod) {\n        return false\n      }\n    } else {\n      assert(typeof request === 'string')\n\n      r = getRequestState(new Request(request))\n    }\n\n    /** @type {CacheBatchOperation[]} */\n    const operations = []\n\n    /** @type {CacheBatchOperation} */\n    const operation = {\n      type: 'delete',\n      request: r,\n      options\n    }\n\n    operations.push(operation)\n\n    const cacheJobPromise = Promise.withResolvers()\n\n    let errorData = null\n    let requestResponses\n\n    try {\n      requestResponses = this.#batchCacheOperations(operations)\n    } catch (e) {\n      errorData = e\n    }\n\n    queueMicrotask(() => {\n      if (errorData === null) {\n        cacheJobPromise.resolve(!!requestResponses?.length)\n      } else {\n        cacheJobPromise.reject(errorData)\n      }\n    })\n\n    return cacheJobPromise.promise\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dom-cache-keys\n   * @param {any} request\n   * @param {import('../../../types/cache').CacheQueryOptions} options\n   * @returns {Promise<readonly Request[]>}\n   */\n  async keys (request = undefined, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.keys'\n\n    if (request !== undefined) request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    // 1.\n    let r = null\n\n    // 2.\n    if (request !== undefined) {\n      // 2.1\n      if (webidl.is.Request(request)) {\n        // 2.1.1\n        r = getRequestState(request)\n\n        // 2.1.2\n        if (r.method !== 'GET' && !options.ignoreMethod) {\n          return []\n        }\n      } else if (typeof request === 'string') { // 2.2\n        r = getRequestState(new Request(request))\n      }\n    }\n\n    // 4.\n    const promise = Promise.withResolvers()\n\n    // 5.\n    // 5.1\n    const requests = []\n\n    // 5.2\n    if (request === undefined) {\n      // 5.2.1\n      for (const requestResponse of this.#relevantRequestResponseList) {\n        // 5.2.1.1\n        requests.push(requestResponse[0])\n      }\n    } else { // 5.3\n      // 5.3.1\n      const requestResponses = this.#queryCache(r, options)\n\n      // 5.3.2\n      for (const requestResponse of requestResponses) {\n        // 5.3.2.1\n        requests.push(requestResponse[0])\n      }\n    }\n\n    // 5.4\n    queueMicrotask(() => {\n      // 5.4.1\n      const requestList = []\n\n      // 5.4.2\n      for (const request of requests) {\n        const requestObject = fromInnerRequest(\n          request,\n          undefined,\n          new AbortController().signal,\n          'immutable'\n        )\n        // 5.4.2.1\n        requestList.push(requestObject)\n      }\n\n      // 5.4.3\n      promise.resolve(Object.freeze(requestList))\n    })\n\n    return promise.promise\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm\n   * @param {CacheBatchOperation[]} operations\n   * @returns {requestResponseList}\n   */\n  #batchCacheOperations (operations) {\n    // 1.\n    const cache = this.#relevantRequestResponseList\n\n    // 2.\n    const backupCache = [...cache]\n\n    // 3.\n    const addedItems = []\n\n    // 4.1\n    const resultList = []\n\n    try {\n      // 4.2\n      for (const operation of operations) {\n        // 4.2.1\n        if (operation.type !== 'delete' && operation.type !== 'put') {\n          throw webidl.errors.exception({\n            header: 'Cache.#batchCacheOperations',\n            message: 'operation type does not match \"delete\" or \"put\"'\n          })\n        }\n\n        // 4.2.2\n        if (operation.type === 'delete' && operation.response != null) {\n          throw webidl.errors.exception({\n            header: 'Cache.#batchCacheOperations',\n            message: 'delete operation should not have an associated response'\n          })\n        }\n\n        // 4.2.3\n        if (this.#queryCache(operation.request, operation.options, addedItems).length) {\n          throw new DOMException('???', 'InvalidStateError')\n        }\n\n        // 4.2.4\n        let requestResponses\n\n        // 4.2.5\n        if (operation.type === 'delete') {\n          // 4.2.5.1\n          requestResponses = this.#queryCache(operation.request, operation.options)\n\n          // TODO: the spec is wrong, this is needed to pass WPTs\n          if (requestResponses.length === 0) {\n            return []\n          }\n\n          // 4.2.5.2\n          for (const requestResponse of requestResponses) {\n            const idx = cache.indexOf(requestResponse)\n            assert(idx !== -1)\n\n            // 4.2.5.2.1\n            cache.splice(idx, 1)\n          }\n        } else if (operation.type === 'put') { // 4.2.6\n          // 4.2.6.1\n          if (operation.response == null) {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'put operation should have an associated response'\n            })\n          }\n\n          // 4.2.6.2\n          const r = operation.request\n\n          // 4.2.6.3\n          if (!urlIsHttpHttpsScheme(r.url)) {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'expected http or https scheme'\n            })\n          }\n\n          // 4.2.6.4\n          if (r.method !== 'GET') {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'not get method'\n            })\n          }\n\n          // 4.2.6.5\n          if (operation.options != null) {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'options must not be defined'\n            })\n          }\n\n          // 4.2.6.6\n          requestResponses = this.#queryCache(operation.request)\n\n          // 4.2.6.7\n          for (const requestResponse of requestResponses) {\n            const idx = cache.indexOf(requestResponse)\n            assert(idx !== -1)\n\n            // 4.2.6.7.1\n            cache.splice(idx, 1)\n          }\n\n          // 4.2.6.8\n          cache.push([operation.request, operation.response])\n\n          // 4.2.6.10\n          addedItems.push([operation.request, operation.response])\n        }\n\n        // 4.2.7\n        resultList.push([operation.request, operation.response])\n      }\n\n      // 4.3\n      return resultList\n    } catch (e) { // 5.\n      // 5.1\n      this.#relevantRequestResponseList.length = 0\n\n      // 5.2\n      this.#relevantRequestResponseList = backupCache\n\n      // 5.3\n      throw e\n    }\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#query-cache\n   * @param {any} requestQuery\n   * @param {import('../../../types/cache').CacheQueryOptions} options\n   * @param {requestResponseList} targetStorage\n   * @returns {requestResponseList}\n   */\n  #queryCache (requestQuery, options, targetStorage) {\n    /** @type {requestResponseList} */\n    const resultList = []\n\n    const storage = targetStorage ?? this.#relevantRequestResponseList\n\n    for (const requestResponse of storage) {\n      const [cachedRequest, cachedResponse] = requestResponse\n      if (this.#requestMatchesCachedItem(requestQuery, cachedRequest, cachedResponse, options)) {\n        resultList.push(requestResponse)\n      }\n    }\n\n    return resultList\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm\n   * @param {any} requestQuery\n   * @param {any} request\n   * @param {any | null} response\n   * @param {import('../../../types/cache').CacheQueryOptions | undefined} options\n   * @returns {boolean}\n   */\n  #requestMatchesCachedItem (requestQuery, request, response = null, options) {\n    // if (options?.ignoreMethod === false && request.method === 'GET') {\n    //   return false\n    // }\n\n    const queryURL = new URL(requestQuery.url)\n\n    const cachedURL = new URL(request.url)\n\n    if (options?.ignoreSearch) {\n      cachedURL.search = ''\n\n      queryURL.search = ''\n    }\n\n    if (!urlEquals(queryURL, cachedURL, true)) {\n      return false\n    }\n\n    if (\n      response == null ||\n      options?.ignoreVary ||\n      !response.headersList.contains('vary')\n    ) {\n      return true\n    }\n\n    const fieldValues = getFieldValues(response.headersList.get('vary'))\n\n    for (const fieldValue of fieldValues) {\n      if (fieldValue === '*') {\n        return false\n      }\n\n      const requestValue = request.headersList.get(fieldValue)\n      const queryValue = requestQuery.headersList.get(fieldValue)\n\n      // If one has the header and the other doesn't, or one has\n      // a different value than the other, return false\n      if (requestValue !== queryValue) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  #internalMatchAll (request, options, maxResponses = Infinity) {\n    // 1.\n    let r = null\n\n    // 2.\n    if (request !== undefined) {\n      if (webidl.is.Request(request)) {\n        // 2.1.1\n        r = getRequestState(request)\n\n        // 2.1.2\n        if (r.method !== 'GET' && !options.ignoreMethod) {\n          return []\n        }\n      } else if (typeof request === 'string') {\n        // 2.2.1\n        r = getRequestState(new Request(request))\n      }\n    }\n\n    // 5.\n    // 5.1\n    const responses = []\n\n    // 5.2\n    if (request === undefined) {\n      // 5.2.1\n      for (const requestResponse of this.#relevantRequestResponseList) {\n        responses.push(requestResponse[1])\n      }\n    } else { // 5.3\n      // 5.3.1\n      const requestResponses = this.#queryCache(r, options)\n\n      // 5.3.2\n      for (const requestResponse of requestResponses) {\n        responses.push(requestResponse[1])\n      }\n    }\n\n    // 5.4\n    // We don't implement CORs so we don't need to loop over the responses, yay!\n\n    // 5.5.1\n    const responseList = []\n\n    // 5.5.2\n    for (const response of responses) {\n      // 5.5.2.1\n      const responseObject = fromInnerResponse(cloneResponse(response), 'immutable')\n\n      responseList.push(responseObject)\n\n      if (responseList.length >= maxResponses) {\n        break\n      }\n    }\n\n    // 6.\n    return Object.freeze(responseList)\n  }\n}\n\nObject.defineProperties(Cache.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'Cache',\n    configurable: true\n  },\n  match: kEnumerableProperty,\n  matchAll: kEnumerableProperty,\n  add: kEnumerableProperty,\n  addAll: kEnumerableProperty,\n  put: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  keys: kEnumerableProperty\n})\n\nconst cacheQueryOptionConverters = [\n  {\n    key: 'ignoreSearch',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'ignoreMethod',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'ignoreVary',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  }\n]\n\nwebidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters)\n\nwebidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([\n  ...cacheQueryOptionConverters,\n  {\n    key: 'cacheName',\n    converter: webidl.converters.DOMString\n  }\n])\n\nwebidl.converters.Response = webidl.interfaceConverter(\n  webidl.is.Response,\n  'Response'\n)\n\nwebidl.converters['sequence<RequestInfo>'] = webidl.sequenceConverter(\n  webidl.converters.RequestInfo\n)\n\nmodule.exports = {\n  Cache\n}\n", "'use strict'\n\nconst { Cache } = require('./cache')\nconst { webidl } = require('../webidl')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { kConstruct } = require('../../core/symbols')\n\nclass CacheStorage {\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map\n   * @type {Map<string, import('./cache').requestResponseList}\n   */\n  #caches = new Map()\n\n  constructor () {\n    if (arguments[0] !== kConstruct) {\n      webidl.illegalConstructor()\n    }\n\n    webidl.util.markAsUncloneable(this)\n  }\n\n  async match (request, options = {}) {\n    webidl.brandCheck(this, CacheStorage)\n    webidl.argumentLengthCheck(arguments, 1, 'CacheStorage.match')\n\n    request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.MultiCacheQueryOptions(options)\n\n    // 1.\n    if (options.cacheName != null) {\n      // 1.1.1.1\n      if (this.#caches.has(options.cacheName)) {\n        // 1.1.1.1.1\n        const cacheList = this.#caches.get(options.cacheName)\n        const cache = new Cache(kConstruct, cacheList)\n\n        return await cache.match(request, options)\n      }\n    } else { // 2.\n      // 2.2\n      for (const cacheList of this.#caches.values()) {\n        const cache = new Cache(kConstruct, cacheList)\n\n        // 2.2.1.2\n        const response = await cache.match(request, options)\n\n        if (response !== undefined) {\n          return response\n        }\n      }\n    }\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#cache-storage-has\n   * @param {string} cacheName\n   * @returns {Promise<boolean>}\n   */\n  async has (cacheName) {\n    webidl.brandCheck(this, CacheStorage)\n\n    const prefix = 'CacheStorage.has'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    cacheName = webidl.converters.DOMString(cacheName, prefix, 'cacheName')\n\n    // 2.1.1\n    // 2.2\n    return this.#caches.has(cacheName)\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open\n   * @param {string} cacheName\n   * @returns {Promise<Cache>}\n   */\n  async open (cacheName) {\n    webidl.brandCheck(this, CacheStorage)\n\n    const prefix = 'CacheStorage.open'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    cacheName = webidl.converters.DOMString(cacheName, prefix, 'cacheName')\n\n    // 2.1\n    if (this.#caches.has(cacheName)) {\n      // await caches.open('v1') !== await caches.open('v1')\n\n      // 2.1.1\n      const cache = this.#caches.get(cacheName)\n\n      // 2.1.1.1\n      return new Cache(kConstruct, cache)\n    }\n\n    // 2.2\n    const cache = []\n\n    // 2.3\n    this.#caches.set(cacheName, cache)\n\n    // 2.4\n    return new Cache(kConstruct, cache)\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete\n   * @param {string} cacheName\n   * @returns {Promise<boolean>}\n   */\n  async delete (cacheName) {\n    webidl.brandCheck(this, CacheStorage)\n\n    const prefix = 'CacheStorage.delete'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    cacheName = webidl.converters.DOMString(cacheName, prefix, 'cacheName')\n\n    return this.#caches.delete(cacheName)\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys\n   * @returns {Promise<string[]>}\n   */\n  async keys () {\n    webidl.brandCheck(this, CacheStorage)\n\n    // 2.1\n    const keys = this.#caches.keys()\n\n    // 2.2\n    return [...keys]\n  }\n}\n\nObject.defineProperties(CacheStorage.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'CacheStorage',\n    configurable: true\n  },\n  match: kEnumerableProperty,\n  has: kEnumerableProperty,\n  open: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  keys: kEnumerableProperty\n})\n\nmodule.exports = {\n  CacheStorage\n}\n", "'use strict'\n\n// https://wicg.github.io/cookie-store/#cookie-maximum-attribute-value-size\nconst maxAttributeValueSize = 1024\n\n// https://wicg.github.io/cookie-store/#cookie-maximum-name-value-pair-size\nconst maxNameValuePairSize = 4096\n\nmodule.exports = {\n  maxAttributeValueSize,\n  maxNameValuePairSize\n}\n", "'use strict'\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction isCTLExcludingHtab (value) {\n  for (let i = 0; i < value.length; ++i) {\n    const code = value.charCodeAt(i)\n\n    if (\n      (code >= 0x00 && code <= 0x08) ||\n      (code >= 0x0A && code <= 0x1F) ||\n      code === 0x7F\n    ) {\n      return true\n    }\n  }\n  return false\n}\n\n/**\n CHAR           = <any US-ASCII character (octets 0 - 127)>\n token          = 1*<any CHAR except CTLs or separators>\n separators     = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n                | \",\" | \";\" | \":\" | \"\\\" | <\">\n                | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n                | \"{\" | \"}\" | SP | HT\n * @param {string} name\n */\nfunction validateCookieName (name) {\n  for (let i = 0; i < name.length; ++i) {\n    const code = name.charCodeAt(i)\n\n    if (\n      code < 0x21 || // exclude CTLs (0-31), SP and HT\n      code > 0x7E || // exclude non-ascii and DEL\n      code === 0x22 || // \"\n      code === 0x28 || // (\n      code === 0x29 || // )\n      code === 0x3C || // <\n      code === 0x3E || // >\n      code === 0x40 || // @\n      code === 0x2C || // ,\n      code === 0x3B || // ;\n      code === 0x3A || // :\n      code === 0x5C || // \\\n      code === 0x2F || // /\n      code === 0x5B || // [\n      code === 0x5D || // ]\n      code === 0x3F || // ?\n      code === 0x3D || // =\n      code === 0x7B || // {\n      code === 0x7D // }\n    ) {\n      throw new Error('Invalid cookie name')\n    }\n  }\n}\n\n/**\n cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n                       ; US-ASCII characters excluding CTLs,\n                       ; whitespace DQUOTE, comma, semicolon,\n                       ; and backslash\n * @param {string} value\n */\nfunction validateCookieValue (value) {\n  let len = value.length\n  let i = 0\n\n  // if the value is wrapped in DQUOTE\n  if (value[0] === '\"') {\n    if (len === 1 || value[len - 1] !== '\"') {\n      throw new Error('Invalid cookie value')\n    }\n    --len\n    ++i\n  }\n\n  while (i < len) {\n    const code = value.charCodeAt(i++)\n\n    if (\n      code < 0x21 || // exclude CTLs (0-31)\n      code > 0x7E || // non-ascii and DEL (127)\n      code === 0x22 || // \"\n      code === 0x2C || // ,\n      code === 0x3B || // ;\n      code === 0x5C // \\\n    ) {\n      throw new Error('Invalid cookie value')\n    }\n  }\n}\n\n/**\n * path-value        = <any CHAR except CTLs or \";\">\n * @param {string} path\n */\nfunction validateCookiePath (path) {\n  for (let i = 0; i < path.length; ++i) {\n    const code = path.charCodeAt(i)\n\n    if (\n      code < 0x20 || // exclude CTLs (0-31)\n      code === 0x7F || // DEL\n      code === 0x3B // ;\n    ) {\n      throw new Error('Invalid cookie path')\n    }\n  }\n}\n\n/**\n * I have no idea why these values aren't allowed to be honest,\n * but Deno tests these. - Khafra\n * @param {string} domain\n */\nfunction validateCookieDomain (domain) {\n  if (\n    domain.startsWith('-') ||\n    domain.endsWith('.') ||\n    domain.endsWith('-')\n  ) {\n    throw new Error('Invalid cookie domain')\n  }\n}\n\nconst IMFDays = [\n  'Sun', 'Mon', 'Tue', 'Wed',\n  'Thu', 'Fri', 'Sat'\n]\n\nconst IMFMonths = [\n  'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n  'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'\n]\n\nconst IMFPaddedNumbers = Array(61).fill(0).map((_, i) => i.toString().padStart(2, '0'))\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc7231#section-7.1.1.1\n * @param {number|Date} date\n  IMF-fixdate  = day-name \",\" SP date1 SP time-of-day SP GMT\n  ; fixed length/zone/capitalization subset of the format\n  ; see Section 3.3 of [RFC5322]\n\n  day-name     = %x4D.6F.6E ; \"Mon\", case-sensitive\n              / %x54.75.65 ; \"Tue\", case-sensitive\n              / %x57.65.64 ; \"Wed\", case-sensitive\n              / %x54.68.75 ; \"Thu\", case-sensitive\n              / %x46.72.69 ; \"Fri\", case-sensitive\n              / %x53.61.74 ; \"Sat\", case-sensitive\n              / %x53.75.6E ; \"Sun\", case-sensitive\n  date1        = day SP month SP year\n                  ; e.g., 02 Jun 1982\n\n  day          = 2DIGIT\n  month        = %x4A.61.6E ; \"Jan\", case-sensitive\n              / %x46.65.62 ; \"Feb\", case-sensitive\n              / %x4D.61.72 ; \"Mar\", case-sensitive\n              / %x41.70.72 ; \"Apr\", case-sensitive\n              / %x4D.61.79 ; \"May\", case-sensitive\n              / %x4A.75.6E ; \"Jun\", case-sensitive\n              / %x4A.75.6C ; \"Jul\", case-sensitive\n              / %x41.75.67 ; \"Aug\", case-sensitive\n              / %x53.65.70 ; \"Sep\", case-sensitive\n              / %x4F.63.74 ; \"Oct\", case-sensitive\n              / %x4E.6F.76 ; \"Nov\", case-sensitive\n              / %x44.65.63 ; \"Dec\", case-sensitive\n  year         = 4DIGIT\n\n  GMT          = %x47.4D.54 ; \"GMT\", case-sensitive\n\n  time-of-day  = hour \":\" minute \":\" second\n              ; 00:00:00 - 23:59:60 (leap second)\n\n  hour         = 2DIGIT\n  minute       = 2DIGIT\n  second       = 2DIGIT\n */\nfunction toIMFDate (date) {\n  if (typeof date === 'number') {\n    date = new Date(date)\n  }\n\n  return `${IMFDays[date.getUTCDay()]}, ${IMFPaddedNumbers[date.getUTCDate()]} ${IMFMonths[date.getUTCMonth()]} ${date.getUTCFullYear()} ${IMFPaddedNumbers[date.getUTCHours()]}:${IMFPaddedNumbers[date.getUTCMinutes()]}:${IMFPaddedNumbers[date.getUTCSeconds()]} GMT`\n}\n\n/**\n max-age-av        = \"Max-Age=\" non-zero-digit *DIGIT\n                       ; In practice, both expires-av and max-age-av\n                       ; are limited to dates representable by the\n                       ; user agent.\n * @param {number} maxAge\n */\nfunction validateCookieMaxAge (maxAge) {\n  if (maxAge < 0) {\n    throw new Error('Invalid cookie max-age')\n  }\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc6265#section-4.1.1\n * @param {import('./index').Cookie} cookie\n */\nfunction stringify (cookie) {\n  if (cookie.name.length === 0) {\n    return null\n  }\n\n  validateCookieName(cookie.name)\n  validateCookieValue(cookie.value)\n\n  const out = [`${cookie.name}=${cookie.value}`]\n\n  // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.1\n  // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.2\n  if (cookie.name.startsWith('__Secure-')) {\n    cookie.secure = true\n  }\n\n  if (cookie.name.startsWith('__Host-')) {\n    cookie.secure = true\n    cookie.domain = null\n    cookie.path = '/'\n  }\n\n  if (cookie.secure) {\n    out.push('Secure')\n  }\n\n  if (cookie.httpOnly) {\n    out.push('HttpOnly')\n  }\n\n  if (typeof cookie.maxAge === 'number') {\n    validateCookieMaxAge(cookie.maxAge)\n    out.push(`Max-Age=${cookie.maxAge}`)\n  }\n\n  if (cookie.domain) {\n    validateCookieDomain(cookie.domain)\n    out.push(`Domain=${cookie.domain}`)\n  }\n\n  if (cookie.path) {\n    validateCookiePath(cookie.path)\n    out.push(`Path=${cookie.path}`)\n  }\n\n  if (cookie.expires && cookie.expires.toString() !== 'Invalid Date') {\n    out.push(`Expires=${toIMFDate(cookie.expires)}`)\n  }\n\n  if (cookie.sameSite) {\n    out.push(`SameSite=${cookie.sameSite}`)\n  }\n\n  for (const part of cookie.unparsed) {\n    if (!part.includes('=')) {\n      throw new Error('Invalid unparsed')\n    }\n\n    const [key, ...value] = part.split('=')\n\n    out.push(`${key.trim()}=${value.join('=')}`)\n  }\n\n  return out.join('; ')\n}\n\nmodule.exports = {\n  isCTLExcludingHtab,\n  validateCookieName,\n  validateCookiePath,\n  validateCookieValue,\n  toIMFDate,\n  stringify\n}\n", "'use strict'\n\nconst { collectASequenceOfCodePointsFast } = require('../infra')\nconst { maxNameValuePairSize, maxAttributeValueSize } = require('./constants')\nconst { isCTLExcludingHtab } = require('./util')\nconst assert = require('node:assert')\nconst { unescape: qsUnescape } = require('node:querystring')\n\n/**\n * @description Parses the field-value attributes of a set-cookie header string.\n * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4\n * @param {string} header\n * @returns {import('./index').Cookie|null} if the header is invalid, null will be returned\n */\nfunction parseSetCookie (header) {\n  // 1. If the set-cookie-string contains a %x00-08 / %x0A-1F / %x7F\n  //    character (CTL characters excluding HTAB): Abort these steps and\n  //    ignore the set-cookie-string entirely.\n  if (isCTLExcludingHtab(header)) {\n    return null\n  }\n\n  let nameValuePair = ''\n  let unparsedAttributes = ''\n  let name = ''\n  let value = ''\n\n  // 2. If the set-cookie-string contains a %x3B (\";\") character:\n  if (header.includes(';')) {\n    // 1. The name-value-pair string consists of the characters up to,\n    //    but not including, the first %x3B (\";\"), and the unparsed-\n    //    attributes consist of the remainder of the set-cookie-string\n    //    (including the %x3B (\";\") in question).\n    const position = { position: 0 }\n\n    nameValuePair = collectASequenceOfCodePointsFast(';', header, position)\n    unparsedAttributes = header.slice(position.position)\n  } else {\n    // Otherwise:\n\n    // 1. The name-value-pair string consists of all the characters\n    //    contained in the set-cookie-string, and the unparsed-\n    //    attributes is the empty string.\n    nameValuePair = header\n  }\n\n  // 3. If the name-value-pair string lacks a %x3D (\"=\") character, then\n  //    the name string is empty, and the value string is the value of\n  //    name-value-pair.\n  if (!nameValuePair.includes('=')) {\n    value = nameValuePair\n  } else {\n    //    Otherwise, the name string consists of the characters up to, but\n    //    not including, the first %x3D (\"=\") character, and the (possibly\n    //    empty) value string consists of the characters after the first\n    //    %x3D (\"=\") character.\n    const position = { position: 0 }\n    name = collectASequenceOfCodePointsFast(\n      '=',\n      nameValuePair,\n      position\n    )\n    value = nameValuePair.slice(position.position + 1)\n  }\n\n  // 4. Remove any leading or trailing WSP characters from the name\n  //    string and the value string.\n  name = name.trim()\n  value = value.trim()\n\n  // 5. If the sum of the lengths of the name string and the value string\n  //    is more than 4096 octets, abort these steps and ignore the set-\n  //    cookie-string entirely.\n  if (name.length + value.length > maxNameValuePairSize) {\n    return null\n  }\n\n  // 6. The cookie-name is the name string, and the cookie-value is the\n  //    value string.\n  // https://datatracker.ietf.org/doc/html/rfc6265\n  // To maximize compatibility with user agents, servers that wish to\n  // store arbitrary data in a cookie-value SHOULD encode that data, for\n  // example, using Base64 [RFC4648].\n  return {\n    name, value: qsUnescape(value), ...parseUnparsedAttributes(unparsedAttributes)\n  }\n}\n\n/**\n * Parses the remaining attributes of a set-cookie header\n * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4\n * @param {string} unparsedAttributes\n * @param {Object.<string, unknown>} [cookieAttributeList={}]\n */\nfunction parseUnparsedAttributes (unparsedAttributes, cookieAttributeList = {}) {\n  // 1. If the unparsed-attributes string is empty, skip the rest of\n  //    these steps.\n  if (unparsedAttributes.length === 0) {\n    return cookieAttributeList\n  }\n\n  // 2. Discard the first character of the unparsed-attributes (which\n  //    will be a %x3B (\";\") character).\n  assert(unparsedAttributes[0] === ';')\n  unparsedAttributes = unparsedAttributes.slice(1)\n\n  let cookieAv = ''\n\n  // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n  //    character:\n  if (unparsedAttributes.includes(';')) {\n    // 1. Consume the characters of the unparsed-attributes up to, but\n    //    not including, the first %x3B (\";\") character.\n    cookieAv = collectASequenceOfCodePointsFast(\n      ';',\n      unparsedAttributes,\n      { position: 0 }\n    )\n    unparsedAttributes = unparsedAttributes.slice(cookieAv.length)\n  } else {\n    // Otherwise:\n\n    // 1. Consume the remainder of the unparsed-attributes.\n    cookieAv = unparsedAttributes\n    unparsedAttributes = ''\n  }\n\n  // Let the cookie-av string be the characters consumed in this step.\n\n  let attributeName = ''\n  let attributeValue = ''\n\n  // 4. If the cookie-av string contains a %x3D (\"=\") character:\n  if (cookieAv.includes('=')) {\n    // 1. The (possibly empty) attribute-name string consists of the\n    //    characters up to, but not including, the first %x3D (\"=\")\n    //    character, and the (possibly empty) attribute-value string\n    //    consists of the characters after the first %x3D (\"=\")\n    //    character.\n    const position = { position: 0 }\n\n    attributeName = collectASequenceOfCodePointsFast(\n      '=',\n      cookieAv,\n      position\n    )\n    attributeValue = cookieAv.slice(position.position + 1)\n  } else {\n    // Otherwise:\n\n    // 1. The attribute-name string consists of the entire cookie-av\n    //    string, and the attribute-value string is empty.\n    attributeName = cookieAv\n  }\n\n  // 5. Remove any leading or trailing WSP characters from the attribute-\n  //    name string and the attribute-value string.\n  attributeName = attributeName.trim()\n  attributeValue = attributeValue.trim()\n\n  // 6. If the attribute-value is longer than 1024 octets, ignore the\n  //    cookie-av string and return to Step 1 of this algorithm.\n  if (attributeValue.length > maxAttributeValueSize) {\n    return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n  }\n\n  // 7. Process the attribute-name and attribute-value according to the\n  //    requirements in the following subsections.  (Notice that\n  //    attributes with unrecognized attribute-names are ignored.)\n  const attributeNameLowercase = attributeName.toLowerCase()\n\n  // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.1\n  // If the attribute-name case-insensitively matches the string\n  // \"Expires\", the user agent MUST process the cookie-av as follows.\n  if (attributeNameLowercase === 'expires') {\n    // 1. Let the expiry-time be the result of parsing the attribute-value\n    //    as cookie-date (see Section 5.1.1).\n    const expiryTime = new Date(attributeValue)\n\n    // 2. If the attribute-value failed to parse as a cookie date, ignore\n    //    the cookie-av.\n\n    cookieAttributeList.expires = expiryTime\n  } else if (attributeNameLowercase === 'max-age') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.2\n    // If the attribute-name case-insensitively matches the string \"Max-\n    // Age\", the user agent MUST process the cookie-av as follows.\n\n    // 1. If the first character of the attribute-value is not a DIGIT or a\n    //    \"-\" character, ignore the cookie-av.\n    const charCode = attributeValue.charCodeAt(0)\n\n    if ((charCode < 48 || charCode > 57) && attributeValue[0] !== '-') {\n      return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n    }\n\n    // 2. If the remainder of attribute-value contains a non-DIGIT\n    //    character, ignore the cookie-av.\n    if (!/^\\d+$/.test(attributeValue)) {\n      return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n    }\n\n    // 3. Let delta-seconds be the attribute-value converted to an integer.\n    const deltaSeconds = Number(attributeValue)\n\n    // 4. Let cookie-age-limit be the maximum age of the cookie (which\n    //    SHOULD be 400 days or less, see Section 4.1.2.2).\n\n    // 5. Set delta-seconds to the smaller of its present value and cookie-\n    //    age-limit.\n    // deltaSeconds = Math.min(deltaSeconds * 1000, maxExpiresMs)\n\n    // 6. If delta-seconds is less than or equal to zero (0), let expiry-\n    //    time be the earliest representable date and time.  Otherwise, let\n    //    the expiry-time be the current date and time plus delta-seconds\n    //    seconds.\n    // const expiryTime = deltaSeconds <= 0 ? Date.now() : Date.now() + deltaSeconds\n\n    // 7. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of Max-Age and an attribute-value of expiry-time.\n    cookieAttributeList.maxAge = deltaSeconds\n  } else if (attributeNameLowercase === 'domain') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.3\n    // If the attribute-name case-insensitively matches the string \"Domain\",\n    // the user agent MUST process the cookie-av as follows.\n\n    // 1. Let cookie-domain be the attribute-value.\n    let cookieDomain = attributeValue\n\n    // 2. If cookie-domain starts with %x2E (\".\"), let cookie-domain be\n    //    cookie-domain without its leading %x2E (\".\").\n    if (cookieDomain[0] === '.') {\n      cookieDomain = cookieDomain.slice(1)\n    }\n\n    // 3. Convert the cookie-domain to lower case.\n    cookieDomain = cookieDomain.toLowerCase()\n\n    // 4. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of Domain and an attribute-value of cookie-domain.\n    cookieAttributeList.domain = cookieDomain\n  } else if (attributeNameLowercase === 'path') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.4\n    // If the attribute-name case-insensitively matches the string \"Path\",\n    // the user agent MUST process the cookie-av as follows.\n\n    // 1. If the attribute-value is empty or if the first character of the\n    //    attribute-value is not %x2F (\"/\"):\n    let cookiePath = ''\n    if (attributeValue.length === 0 || attributeValue[0] !== '/') {\n      // 1. Let cookie-path be the default-path.\n      cookiePath = '/'\n    } else {\n      // Otherwise:\n\n      // 1. Let cookie-path be the attribute-value.\n      cookiePath = attributeValue\n    }\n\n    // 2. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of Path and an attribute-value of cookie-path.\n    cookieAttributeList.path = cookiePath\n  } else if (attributeNameLowercase === 'secure') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.5\n    // If the attribute-name case-insensitively matches the string \"Secure\",\n    // the user agent MUST append an attribute to the cookie-attribute-list\n    // with an attribute-name of Secure and an empty attribute-value.\n\n    cookieAttributeList.secure = true\n  } else if (attributeNameLowercase === 'httponly') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.6\n    // If the attribute-name case-insensitively matches the string\n    // \"HttpOnly\", the user agent MUST append an attribute to the cookie-\n    // attribute-list with an attribute-name of HttpOnly and an empty\n    // attribute-value.\n\n    cookieAttributeList.httpOnly = true\n  } else if (attributeNameLowercase === 'samesite') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.7\n    // If the attribute-name case-insensitively matches the string\n    // \"SameSite\", the user agent MUST process the cookie-av as follows:\n\n    // 1. Let enforcement be \"Default\".\n    let enforcement = 'Default'\n\n    const attributeValueLowercase = attributeValue.toLowerCase()\n    // 2. If cookie-av's attribute-value is a case-insensitive match for\n    //    \"None\", set enforcement to \"None\".\n    if (attributeValueLowercase.includes('none')) {\n      enforcement = 'None'\n    }\n\n    // 3. If cookie-av's attribute-value is a case-insensitive match for\n    //    \"Strict\", set enforcement to \"Strict\".\n    if (attributeValueLowercase.includes('strict')) {\n      enforcement = 'Strict'\n    }\n\n    // 4. If cookie-av's attribute-value is a case-insensitive match for\n    //    \"Lax\", set enforcement to \"Lax\".\n    if (attributeValueLowercase.includes('lax')) {\n      enforcement = 'Lax'\n    }\n\n    // 5. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of \"SameSite\" and an attribute-value of\n    //    enforcement.\n    cookieAttributeList.sameSite = enforcement\n  } else {\n    cookieAttributeList.unparsed ??= []\n\n    cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`)\n  }\n\n  // 8. Return to Step 1 of this algorithm.\n  return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n}\n\nmodule.exports = {\n  parseSetCookie,\n  parseUnparsedAttributes\n}\n", "'use strict'\n\nconst { parseSetCookie } = require('./parse')\nconst { stringify } = require('./util')\nconst { webidl } = require('../webidl')\nconst { Headers } = require('../fetch/headers')\n\nconst brandChecks = webidl.brandCheckMultiple([Headers, globalThis.Headers].filter(Boolean))\n\n/**\n * @typedef {Object} Cookie\n * @property {string} name\n * @property {string} value\n * @property {Date|number} [expires]\n * @property {number} [maxAge]\n * @property {string} [domain]\n * @property {string} [path]\n * @property {boolean} [secure]\n * @property {boolean} [httpOnly]\n * @property {'Strict'|'Lax'|'None'} [sameSite]\n * @property {string[]} [unparsed]\n */\n\n/**\n * @param {Headers} headers\n * @returns {Record<string, string>}\n */\nfunction getCookies (headers) {\n  webidl.argumentLengthCheck(arguments, 1, 'getCookies')\n\n  brandChecks(headers)\n\n  const cookie = headers.get('cookie')\n\n  /** @type {Record<string, string>} */\n  const out = {}\n\n  if (!cookie) {\n    return out\n  }\n\n  for (const piece of cookie.split(';')) {\n    const [name, ...value] = piece.split('=')\n\n    out[name.trim()] = value.join('=')\n  }\n\n  return out\n}\n\n/**\n * @param {Headers} headers\n * @param {string} name\n * @param {{ path?: string, domain?: string }|undefined} attributes\n * @returns {void}\n */\nfunction deleteCookie (headers, name, attributes) {\n  brandChecks(headers)\n\n  const prefix = 'deleteCookie'\n  webidl.argumentLengthCheck(arguments, 2, prefix)\n\n  name = webidl.converters.DOMString(name, prefix, 'name')\n  attributes = webidl.converters.DeleteCookieAttributes(attributes)\n\n  // Matches behavior of\n  // https://github.com/denoland/deno_std/blob/63827b16330b82489a04614027c33b7904e08be5/http/cookie.ts#L278\n  setCookie(headers, {\n    name,\n    value: '',\n    expires: new Date(0),\n    ...attributes\n  })\n}\n\n/**\n * @param {Headers} headers\n * @returns {Cookie[]}\n */\nfunction getSetCookies (headers) {\n  webidl.argumentLengthCheck(arguments, 1, 'getSetCookies')\n\n  brandChecks(headers)\n\n  const cookies = headers.getSetCookie()\n\n  if (!cookies) {\n    return []\n  }\n\n  return cookies.map((pair) => parseSetCookie(pair))\n}\n\n/**\n * Parses a cookie string\n * @param {string} cookie\n */\nfunction parseCookie (cookie) {\n  cookie = webidl.converters.DOMString(cookie)\n\n  return parseSetCookie(cookie)\n}\n\n/**\n * @param {Headers} headers\n * @param {Cookie} cookie\n * @returns {void}\n */\nfunction setCookie (headers, cookie) {\n  webidl.argumentLengthCheck(arguments, 2, 'setCookie')\n\n  brandChecks(headers)\n\n  cookie = webidl.converters.Cookie(cookie)\n\n  const str = stringify(cookie)\n\n  if (str) {\n    headers.append('set-cookie', str, true)\n  }\n}\n\nwebidl.converters.DeleteCookieAttributes = webidl.dictionaryConverter([\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'path',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'domain',\n    defaultValue: () => null\n  }\n])\n\nwebidl.converters.Cookie = webidl.dictionaryConverter([\n  {\n    converter: webidl.converters.DOMString,\n    key: 'name'\n  },\n  {\n    converter: webidl.converters.DOMString,\n    key: 'value'\n  },\n  {\n    converter: webidl.nullableConverter((value) => {\n      if (typeof value === 'number') {\n        return webidl.converters['unsigned long long'](value)\n      }\n\n      return new Date(value)\n    }),\n    key: 'expires',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters['long long']),\n    key: 'maxAge',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'domain',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'path',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.boolean),\n    key: 'secure',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.boolean),\n    key: 'httpOnly',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.converters.USVString,\n    key: 'sameSite',\n    allowedValues: ['Strict', 'Lax', 'None']\n  },\n  {\n    converter: webidl.sequenceConverter(webidl.converters.DOMString),\n    key: 'unparsed',\n    defaultValue: () => []\n  }\n])\n\nmodule.exports = {\n  getCookies,\n  deleteCookie,\n  getSetCookies,\n  setCookie,\n  parseCookie\n}\n", "'use strict'\n\nconst { webidl } = require('../webidl')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { kConstruct } = require('../../core/symbols')\n\n/**\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent\n */\nclass MessageEvent extends Event {\n  #eventInit\n\n  constructor (type, eventInitDict = {}) {\n    if (type === kConstruct) {\n      super(arguments[1], arguments[2])\n      webidl.util.markAsUncloneable(this)\n      return\n    }\n\n    const prefix = 'MessageEvent constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    type = webidl.converters.DOMString(type, prefix, 'type')\n    eventInitDict = webidl.converters.MessageEventInit(eventInitDict, prefix, 'eventInitDict')\n\n    super(type, eventInitDict)\n\n    this.#eventInit = eventInitDict\n    webidl.util.markAsUncloneable(this)\n  }\n\n  get data () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.data\n  }\n\n  get origin () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.origin\n  }\n\n  get lastEventId () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.lastEventId\n  }\n\n  get source () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.source\n  }\n\n  get ports () {\n    webidl.brandCheck(this, MessageEvent)\n\n    if (!Object.isFrozen(this.#eventInit.ports)) {\n      Object.freeze(this.#eventInit.ports)\n    }\n\n    return this.#eventInit.ports\n  }\n\n  initMessageEvent (\n    type,\n    bubbles = false,\n    cancelable = false,\n    data = null,\n    origin = '',\n    lastEventId = '',\n    source = null,\n    ports = []\n  ) {\n    webidl.brandCheck(this, MessageEvent)\n\n    webidl.argumentLengthCheck(arguments, 1, 'MessageEvent.initMessageEvent')\n\n    return new MessageEvent(type, {\n      bubbles, cancelable, data, origin, lastEventId, source, ports\n    })\n  }\n\n  static createFastMessageEvent (type, init) {\n    const messageEvent = new MessageEvent(kConstruct, type, init)\n    messageEvent.#eventInit = init\n    messageEvent.#eventInit.data ??= null\n    messageEvent.#eventInit.origin ??= ''\n    messageEvent.#eventInit.lastEventId ??= ''\n    messageEvent.#eventInit.source ??= null\n    messageEvent.#eventInit.ports ??= []\n    return messageEvent\n  }\n}\n\nconst { createFastMessageEvent } = MessageEvent\ndelete MessageEvent.createFastMessageEvent\n\n/**\n * @see https://websockets.spec.whatwg.org/#the-closeevent-interface\n */\nclass CloseEvent extends Event {\n  #eventInit\n\n  constructor (type, eventInitDict = {}) {\n    const prefix = 'CloseEvent constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    type = webidl.converters.DOMString(type, prefix, 'type')\n    eventInitDict = webidl.converters.CloseEventInit(eventInitDict)\n\n    super(type, eventInitDict)\n\n    this.#eventInit = eventInitDict\n    webidl.util.markAsUncloneable(this)\n  }\n\n  get wasClean () {\n    webidl.brandCheck(this, CloseEvent)\n\n    return this.#eventInit.wasClean\n  }\n\n  get code () {\n    webidl.brandCheck(this, CloseEvent)\n\n    return this.#eventInit.code\n  }\n\n  get reason () {\n    webidl.brandCheck(this, CloseEvent)\n\n    return this.#eventInit.reason\n  }\n}\n\n// https://html.spec.whatwg.org/multipage/webappapis.html#the-errorevent-interface\nclass ErrorEvent extends Event {\n  #eventInit\n\n  constructor (type, eventInitDict) {\n    const prefix = 'ErrorEvent constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    super(type, eventInitDict)\n    webidl.util.markAsUncloneable(this)\n\n    type = webidl.converters.DOMString(type, prefix, 'type')\n    eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {})\n\n    this.#eventInit = eventInitDict\n  }\n\n  get message () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.message\n  }\n\n  get filename () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.filename\n  }\n\n  get lineno () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.lineno\n  }\n\n  get colno () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.colno\n  }\n\n  get error () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.error\n  }\n}\n\nObject.defineProperties(MessageEvent.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'MessageEvent',\n    configurable: true\n  },\n  data: kEnumerableProperty,\n  origin: kEnumerableProperty,\n  lastEventId: kEnumerableProperty,\n  source: kEnumerableProperty,\n  ports: kEnumerableProperty,\n  initMessageEvent: kEnumerableProperty\n})\n\nObject.defineProperties(CloseEvent.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'CloseEvent',\n    configurable: true\n  },\n  reason: kEnumerableProperty,\n  code: kEnumerableProperty,\n  wasClean: kEnumerableProperty\n})\n\nObject.defineProperties(ErrorEvent.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'ErrorEvent',\n    configurable: true\n  },\n  message: kEnumerableProperty,\n  filename: kEnumerableProperty,\n  lineno: kEnumerableProperty,\n  colno: kEnumerableProperty,\n  error: kEnumerableProperty\n})\n\nwebidl.converters.MessagePort = webidl.interfaceConverter(\n  webidl.is.MessagePort,\n  'MessagePort'\n)\n\nwebidl.converters['sequence<MessagePort>'] = webidl.sequenceConverter(\n  webidl.converters.MessagePort\n)\n\nconst eventInit = [\n  {\n    key: 'bubbles',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'cancelable',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'composed',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  }\n]\n\nwebidl.converters.MessageEventInit = webidl.dictionaryConverter([\n  ...eventInit,\n  {\n    key: 'data',\n    converter: webidl.converters.any,\n    defaultValue: () => null\n  },\n  {\n    key: 'origin',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'lastEventId',\n    converter: webidl.converters.DOMString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'source',\n    // Node doesn't implement WindowProxy or ServiceWorker, so the only\n    // valid value for source is a MessagePort.\n    converter: webidl.nullableConverter(webidl.converters.MessagePort),\n    defaultValue: () => null\n  },\n  {\n    key: 'ports',\n    converter: webidl.converters['sequence<MessagePort>'],\n    defaultValue: () => []\n  }\n])\n\nwebidl.converters.CloseEventInit = webidl.dictionaryConverter([\n  ...eventInit,\n  {\n    key: 'wasClean',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'code',\n    converter: webidl.converters['unsigned short'],\n    defaultValue: () => 0\n  },\n  {\n    key: 'reason',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  }\n])\n\nwebidl.converters.ErrorEventInit = webidl.dictionaryConverter([\n  ...eventInit,\n  {\n    key: 'message',\n    converter: webidl.converters.DOMString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'filename',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'lineno',\n    converter: webidl.converters['unsigned long'],\n    defaultValue: () => 0\n  },\n  {\n    key: 'colno',\n    converter: webidl.converters['unsigned long'],\n    defaultValue: () => 0\n  },\n  {\n    key: 'error',\n    converter: webidl.converters.any\n  }\n])\n\nmodule.exports = {\n  MessageEvent,\n  CloseEvent,\n  ErrorEvent,\n  createFastMessageEvent\n}\n", "'use strict'\n\n/**\n * This is a Globally Unique Identifier unique used to validate that the\n * endpoint accepts websocket connections.\n * @see https://www.rfc-editor.org/rfc/rfc6455.html#section-1.3\n * @type {'258EAFA5-E914-47DA-95CA-C5AB0DC85B11'}\n */\nconst uid = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'\n\n/**\n * @type {PropertyDescriptor}\n */\nconst staticPropertyDescriptors = {\n  enumerable: true,\n  writable: false,\n  configurable: false\n}\n\n/**\n * The states of the WebSocket connection.\n *\n * @readonly\n * @enum\n * @property {0} CONNECTING\n * @property {1} OPEN\n * @property {2} CLOSING\n * @property {3} CLOSED\n */\nconst states = {\n  CONNECTING: 0,\n  OPEN: 1,\n  CLOSING: 2,\n  CLOSED: 3\n}\n\n/**\n * @readonly\n * @enum\n * @property {0} NOT_SENT\n * @property {1} PROCESSING\n * @property {2} SENT\n */\nconst sentCloseFrameState = {\n  SENT: 1,\n  RECEIVED: 2\n}\n\n/**\n * The WebSocket opcodes.\n *\n * @readonly\n * @enum\n * @property {0x0} CONTINUATION\n * @property {0x1} TEXT\n * @property {0x2} BINARY\n * @property {0x8} CLOSE\n * @property {0x9} PING\n * @property {0xA} PONG\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-5.2\n */\nconst opcodes = {\n  CONTINUATION: 0x0,\n  TEXT: 0x1,\n  BINARY: 0x2,\n  CLOSE: 0x8,\n  PING: 0x9,\n  PONG: 0xA\n}\n\n/**\n * The maximum value for an unsigned 16-bit integer.\n *\n * @type {65535} 2 ** 16 - 1\n */\nconst maxUnsigned16Bit = 65535\n\n/**\n * The states of the parser.\n *\n * @readonly\n * @enum\n * @property {0} INFO\n * @property {2} PAYLOADLENGTH_16\n * @property {3} PAYLOADLENGTH_64\n * @property {4} READ_DATA\n */\nconst parserStates = {\n  INFO: 0,\n  PAYLOADLENGTH_16: 2,\n  PAYLOADLENGTH_64: 3,\n  READ_DATA: 4\n}\n\n/**\n * An empty buffer.\n *\n * @type {Buffer}\n */\nconst emptyBuffer = Buffer.allocUnsafe(0)\n\n/**\n * @readonly\n * @property {1} text\n * @property {2} typedArray\n * @property {3} arrayBuffer\n * @property {4} blob\n */\nconst sendHints = {\n  text: 1,\n  typedArray: 2,\n  arrayBuffer: 3,\n  blob: 4\n}\n\nmodule.exports = {\n  uid,\n  sentCloseFrameState,\n  staticPropertyDescriptors,\n  states,\n  opcodes,\n  maxUnsigned16Bit,\n  parserStates,\n  emptyBuffer,\n  sendHints\n}\n", "'use strict'\n\nconst { states, opcodes } = require('./constants')\nconst { isUtf8 } = require('node:buffer')\nconst { removeHTTPWhitespace } = require('../fetch/data-url')\nconst { collectASequenceOfCodePointsFast } = require('../infra')\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isConnecting (readyState) {\n  // If the WebSocket connection is not yet established, and the connection\n  // is not yet closed, then the WebSocket connection is in the CONNECTING state.\n  return readyState === states.CONNECTING\n}\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isEstablished (readyState) {\n  // If the server's response is validated as provided for above, it is\n  // said that _The WebSocket Connection is Established_ and that the\n  // WebSocket Connection is in the OPEN state.\n  return readyState === states.OPEN\n}\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isClosing (readyState) {\n  // Upon either sending or receiving a Close control frame, it is said\n  // that _The WebSocket Closing Handshake is Started_ and that the\n  // WebSocket connection is in the CLOSING state.\n  return readyState === states.CLOSING\n}\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isClosed (readyState) {\n  return readyState === states.CLOSED\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#concept-event-fire\n * @param {string} e\n * @param {EventTarget} target\n * @param {(...args: ConstructorParameters<typeof Event>) => Event} eventFactory\n * @param {EventInit | undefined} eventInitDict\n * @returns {void}\n */\nfunction fireEvent (e, target, eventFactory = (type, init) => new Event(type, init), eventInitDict = {}) {\n  // 1. If eventConstructor is not given, then let eventConstructor be Event.\n\n  // 2. Let event be the result of creating an event given eventConstructor,\n  //    in the relevant realm of target.\n  // 3. Initialize event\u2019s type attribute to e.\n  const event = eventFactory(e, eventInitDict)\n\n  // 4. Initialize any other IDL attributes of event as described in the\n  //    invocation of this algorithm.\n\n  // 5. Return the result of dispatching event at target, with legacy target\n  //    override flag set if set.\n  target.dispatchEvent(event)\n}\n\n/**\n * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol\n * @param {import('./websocket').Handler} handler\n * @param {number} type Opcode\n * @param {Buffer} data application data\n * @returns {void}\n */\nfunction websocketMessageReceived (handler, type, data) {\n  handler.onMessage(type, data)\n}\n\n/**\n * @param {Buffer} buffer\n * @returns {ArrayBuffer}\n */\nfunction toArrayBuffer (buffer) {\n  if (buffer.byteLength === buffer.buffer.byteLength) {\n    return buffer.buffer\n  }\n  return new Uint8Array(buffer).buffer\n}\n\n/**\n * @see https://datatracker.ietf.org/doc/html/rfc6455\n * @see https://datatracker.ietf.org/doc/html/rfc2616\n * @see https://bugs.chromium.org/p/chromium/issues/detail?id=398407\n * @param {string} protocol\n * @returns {boolean}\n */\nfunction isValidSubprotocol (protocol) {\n  // If present, this value indicates one\n  // or more comma-separated subprotocol the client wishes to speak,\n  // ordered by preference.  The elements that comprise this value\n  // MUST be non-empty strings with characters in the range U+0021 to\n  // U+007E not including separator characters as defined in\n  // [RFC2616] and MUST all be unique strings.\n  if (protocol.length === 0) {\n    return false\n  }\n\n  for (let i = 0; i < protocol.length; ++i) {\n    const code = protocol.charCodeAt(i)\n\n    if (\n      code < 0x21 || // CTL, contains SP (0x20) and HT (0x09)\n      code > 0x7E ||\n      code === 0x22 || // \"\n      code === 0x28 || // (\n      code === 0x29 || // )\n      code === 0x2C || // ,\n      code === 0x2F || // /\n      code === 0x3A || // :\n      code === 0x3B || // ;\n      code === 0x3C || // <\n      code === 0x3D || // =\n      code === 0x3E || // >\n      code === 0x3F || // ?\n      code === 0x40 || // @\n      code === 0x5B || // [\n      code === 0x5C || // \\\n      code === 0x5D || // ]\n      code === 0x7B || // {\n      code === 0x7D // }\n    ) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7-4\n * @param {number} code\n * @returns {boolean}\n */\nfunction isValidStatusCode (code) {\n  if (code >= 1000 && code < 1015) {\n    return (\n      code !== 1004 && // reserved\n      code !== 1005 && // \"MUST NOT be set as a status code\"\n      code !== 1006 // \"MUST NOT be set as a status code\"\n    )\n  }\n\n  return code >= 3000 && code <= 4999\n}\n\n/**\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-5.5\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isControlFrame (opcode) {\n  return (\n    opcode === opcodes.CLOSE ||\n    opcode === opcodes.PING ||\n    opcode === opcodes.PONG\n  )\n}\n\n/**\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isContinuationFrame (opcode) {\n  return opcode === opcodes.CONTINUATION\n}\n\n/**\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isTextBinaryFrame (opcode) {\n  return opcode === opcodes.TEXT || opcode === opcodes.BINARY\n}\n\n/**\n *\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isValidOpcode (opcode) {\n  return isTextBinaryFrame(opcode) || isContinuationFrame(opcode) || isControlFrame(opcode)\n}\n\n/**\n * Parses a Sec-WebSocket-Extensions header value.\n * @param {string} extensions\n * @returns {Map<string, string>}\n */\n// TODO(@Uzlopak, @KhafraDev): make compliant https://datatracker.ietf.org/doc/html/rfc6455#section-9.1\nfunction parseExtensions (extensions) {\n  const position = { position: 0 }\n  const extensionList = new Map()\n\n  while (position.position < extensions.length) {\n    const pair = collectASequenceOfCodePointsFast(';', extensions, position)\n    const [name, value = ''] = pair.split('=', 2)\n\n    extensionList.set(\n      removeHTTPWhitespace(name, true, false),\n      removeHTTPWhitespace(value, false, true)\n    )\n\n    position.position++\n  }\n\n  return extensionList\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc7692#section-7.1.2.2\n * @description \"client-max-window-bits = 1*DIGIT\"\n * @param {string} value\n * @returns {boolean}\n */\nfunction isValidClientWindowBits (value) {\n  // Must have at least one character\n  if (value.length === 0) {\n    return false\n  }\n\n  // Check all characters are ASCII digits\n  for (let i = 0; i < value.length; i++) {\n    const byte = value.charCodeAt(i)\n\n    if (byte < 0x30 || byte > 0x39) {\n      return false\n    }\n  }\n\n  // Check numeric range: zlib requires windowBits in range 8-15\n  const num = Number.parseInt(value, 10)\n  return num >= 8 && num <= 15\n}\n\n/**\n * @see https://whatpr.org/websockets/48/7b748d3...d5570f3.html#get-a-url-record\n * @param {string} url\n * @param {string} [baseURL]\n */\nfunction getURLRecord (url, baseURL) {\n  // 1. Let urlRecord be the result of applying the URL parser to url with baseURL .\n  // 2. If urlRecord is failure, then throw a \" SyntaxError \" DOMException .\n  let urlRecord\n\n  try {\n    urlRecord = new URL(url, baseURL)\n  } catch (e) {\n    throw new DOMException(e, 'SyntaxError')\n  }\n\n  // 3. If urlRecord \u2019s scheme is \" http \", then set urlRecord \u2019s scheme to \" ws \".\n  // 4. Otherwise, if urlRecord \u2019s scheme is \" https \", set urlRecord \u2019s scheme to \" wss \".\n  if (urlRecord.protocol === 'http:') {\n    urlRecord.protocol = 'ws:'\n  } else if (urlRecord.protocol === 'https:') {\n    urlRecord.protocol = 'wss:'\n  }\n\n  // 5. If urlRecord \u2019s scheme is not \" ws \" or \" wss \", then throw a \" SyntaxError \" DOMException .\n  if (urlRecord.protocol !== 'ws:' && urlRecord.protocol !== 'wss:') {\n    throw new DOMException('expected a ws: or wss: url', 'SyntaxError')\n  }\n\n  // If urlRecord \u2019s fragment is non-null, then throw a \" SyntaxError \" DOMException .\n  if (urlRecord.hash.length || urlRecord.href.endsWith('#')) {\n    throw new DOMException('hash', 'SyntaxError')\n  }\n\n  // Return urlRecord .\n  return urlRecord\n}\n\n// https://whatpr.org/websockets/48.html#validate-close-code-and-reason\nfunction validateCloseCodeAndReason (code, reason) {\n  // 1. If code is not null, but is neither an integer equal to\n  //    1000 nor an integer in the range 3000 to 4999, inclusive,\n  //    throw an \"InvalidAccessError\" DOMException.\n  if (code !== null) {\n    if (code !== 1000 && (code < 3000 || code > 4999)) {\n      throw new DOMException('invalid code', 'InvalidAccessError')\n    }\n  }\n\n  // 2. If reason is not null, then:\n  if (reason !== null) {\n    // 2.1. Let reasonBytes be the result of UTF-8 encoding reason.\n    // 2.2. If reasonBytes is longer than 123 bytes, then throw a\n    //      \"SyntaxError\" DOMException.\n    const reasonBytesLength = Buffer.byteLength(reason)\n\n    if (reasonBytesLength > 123) {\n      throw new DOMException(`Reason must be less than 123 bytes; received ${reasonBytesLength}`, 'SyntaxError')\n    }\n  }\n}\n\n/**\n * Converts a Buffer to utf-8, even on platforms without icu.\n * @type {(buffer: Buffer) => string}\n */\nconst utf8Decode = (() => {\n  if (typeof process.versions.icu === 'string') {\n    const fatalDecoder = new TextDecoder('utf-8', { fatal: true })\n    return fatalDecoder.decode.bind(fatalDecoder)\n  }\n  return function (buffer) {\n    if (isUtf8(buffer)) {\n      return buffer.toString('utf-8')\n    }\n    throw new TypeError('Invalid utf-8 received.')\n  }\n})()\n\nmodule.exports = {\n  isConnecting,\n  isEstablished,\n  isClosing,\n  isClosed,\n  fireEvent,\n  isValidSubprotocol,\n  isValidStatusCode,\n  websocketMessageReceived,\n  utf8Decode,\n  isControlFrame,\n  isContinuationFrame,\n  isTextBinaryFrame,\n  isValidOpcode,\n  parseExtensions,\n  isValidClientWindowBits,\n  toArrayBuffer,\n  getURLRecord,\n  validateCloseCodeAndReason\n}\n", "'use strict'\n\nconst { runtimeFeatures } = require('../../util/runtime-features')\nconst { maxUnsigned16Bit, opcodes } = require('./constants')\n\nconst BUFFER_SIZE = 8 * 1024\n\nlet buffer = null\nlet bufIdx = BUFFER_SIZE\n\nconst randomFillSync = runtimeFeatures.has('crypto')\n  ? require('node:crypto').randomFillSync\n  : null\n\nfunction generateMask () {\n  if (bufIdx === BUFFER_SIZE) {\n    bufIdx = 0\n    randomFillSync((buffer ??= Buffer.allocUnsafeSlow(BUFFER_SIZE)), 0, BUFFER_SIZE)\n  }\n  return [buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++]]\n}\n\nclass WebsocketFrameSend {\n  /**\n   * @param {Buffer|undefined} data\n   */\n  constructor (data) {\n    this.frameData = data\n  }\n\n  createFrame (opcode) {\n    const frameData = this.frameData\n    const maskKey = generateMask()\n    const bodyLength = frameData?.byteLength ?? 0\n\n    /** @type {number} */\n    let payloadLength = bodyLength // 0-125\n    let offset = 6\n\n    if (bodyLength > maxUnsigned16Bit) {\n      offset += 8 // payload length is next 8 bytes\n      payloadLength = 127\n    } else if (bodyLength > 125) {\n      offset += 2 // payload length is next 2 bytes\n      payloadLength = 126\n    }\n\n    const buffer = Buffer.allocUnsafe(bodyLength + offset)\n\n    // Clear first 2 bytes, everything else is overwritten\n    buffer[0] = buffer[1] = 0\n    buffer[0] |= 0x80 // FIN\n    buffer[0] = (buffer[0] & 0xF0) + opcode // opcode\n\n    /*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> */\n    buffer[offset - 4] = maskKey[0]\n    buffer[offset - 3] = maskKey[1]\n    buffer[offset - 2] = maskKey[2]\n    buffer[offset - 1] = maskKey[3]\n\n    buffer[1] = payloadLength\n\n    if (payloadLength === 126) {\n      buffer.writeUInt16BE(bodyLength, 2)\n    } else if (payloadLength === 127) {\n      // Clear extended payload length\n      buffer[2] = buffer[3] = 0\n      buffer.writeUIntBE(bodyLength, 4, 6)\n    }\n\n    buffer[1] |= 0x80 // MASK\n\n    // mask body\n    for (let i = 0; i < bodyLength; ++i) {\n      buffer[offset + i] = frameData[i] ^ maskKey[i & 3]\n    }\n\n    return buffer\n  }\n\n  /**\n   * @param {Uint8Array} buffer\n   */\n  static createFastTextFrame (buffer) {\n    const maskKey = generateMask()\n\n    const bodyLength = buffer.length\n\n    // mask body\n    for (let i = 0; i < bodyLength; ++i) {\n      buffer[i] ^= maskKey[i & 3]\n    }\n\n    let payloadLength = bodyLength\n    let offset = 6\n\n    if (bodyLength > maxUnsigned16Bit) {\n      offset += 8 // payload length is next 8 bytes\n      payloadLength = 127\n    } else if (bodyLength > 125) {\n      offset += 2 // payload length is next 2 bytes\n      payloadLength = 126\n    }\n    const head = Buffer.allocUnsafeSlow(offset)\n\n    head[0] = 0x80 /* FIN */ | opcodes.TEXT /* opcode TEXT */\n    head[1] = payloadLength | 0x80 /* MASK */\n    head[offset - 4] = maskKey[0]\n    head[offset - 3] = maskKey[1]\n    head[offset - 2] = maskKey[2]\n    head[offset - 1] = maskKey[3]\n\n    if (payloadLength === 126) {\n      head.writeUInt16BE(bodyLength, 2)\n    } else if (payloadLength === 127) {\n      head[2] = head[3] = 0\n      head.writeUIntBE(bodyLength, 4, 6)\n    }\n\n    return [head, buffer]\n  }\n}\n\nmodule.exports = {\n  WebsocketFrameSend,\n  generateMask // for benchmark\n}\n", "'use strict'\n\nconst { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require('./constants')\nconst { parseExtensions, isClosed, isClosing, isEstablished, isConnecting, validateCloseCodeAndReason } = require('./util')\nconst { makeRequest } = require('../fetch/request')\nconst { fetching } = require('../fetch/index')\nconst { Headers, getHeadersList } = require('../fetch/headers')\nconst { getDecodeSplit } = require('../fetch/util')\nconst { WebsocketFrameSend } = require('./frame')\nconst assert = require('node:assert')\nconst { runtimeFeatures } = require('../../util/runtime-features')\n\nconst crypto = runtimeFeatures.has('crypto')\n  ? require('node:crypto')\n  : null\n\nlet warningEmitted = false\n\n/**\n * @see https://websockets.spec.whatwg.org/#concept-websocket-establish\n * @param {URL} url\n * @param {string|string[]} protocols\n * @param {import('./websocket').Handler} handler\n * @param {Partial<import('../../../types/websocket').WebSocketInit>} options\n */\nfunction establishWebSocketConnection (url, protocols, client, handler, options) {\n  // 1. Let requestURL be a copy of url, with its scheme set to \"http\", if url\u2019s\n  //    scheme is \"ws\", and to \"https\" otherwise.\n  const requestURL = url\n\n  requestURL.protocol = url.protocol === 'ws:' ? 'http:' : 'https:'\n\n  // 2. Let request be a new request, whose URL is requestURL, client is client,\n  //    service-workers mode is \"none\", referrer is \"no-referrer\", mode is\n  //    \"websocket\", credentials mode is \"include\", cache mode is \"no-store\" ,\n  //    redirect mode is \"error\", and use-URL-credentials flag is set.\n  const request = makeRequest({\n    urlList: [requestURL],\n    client,\n    serviceWorkers: 'none',\n    referrer: 'no-referrer',\n    mode: 'websocket',\n    credentials: 'include',\n    cache: 'no-store',\n    redirect: 'error',\n    useURLCredentials: true\n  })\n\n  // Note: undici extension, allow setting custom headers.\n  if (options.headers) {\n    const headersList = getHeadersList(new Headers(options.headers))\n\n    request.headersList = headersList\n  }\n\n  // 3. Append (`Upgrade`, `websocket`) to request\u2019s header list.\n  // 4. Append (`Connection`, `Upgrade`) to request\u2019s header list.\n  // Note: both of these are handled by undici currently.\n  // https://github.com/nodejs/undici/blob/68c269c4144c446f3f1220951338daef4a6b5ec4/lib/client.js#L1397\n\n  // 5. Let keyValue be a nonce consisting of a randomly selected\n  //    16-byte value that has been forgiving-base64-encoded and\n  //    isomorphic encoded.\n  const keyValue = crypto.randomBytes(16).toString('base64')\n\n  // 6. Append (`Sec-WebSocket-Key`, keyValue) to request\u2019s\n  //    header list.\n  request.headersList.append('sec-websocket-key', keyValue, true)\n\n  // 7. Append (`Sec-WebSocket-Version`, `13`) to request\u2019s\n  //    header list.\n  request.headersList.append('sec-websocket-version', '13', true)\n\n  // 8. For each protocol in protocols, combine\n  //    (`Sec-WebSocket-Protocol`, protocol) in request\u2019s header\n  //    list.\n  for (const protocol of protocols) {\n    request.headersList.append('sec-websocket-protocol', protocol, true)\n  }\n\n  // 9. Let permessageDeflate be a user-agent defined\n  //    \"permessage-deflate\" extension header value.\n  // https://github.com/mozilla/gecko-dev/blob/ce78234f5e653a5d3916813ff990f053510227bc/netwerk/protocol/websocket/WebSocketChannel.cpp#L2673\n  const permessageDeflate = 'permessage-deflate; client_max_window_bits'\n\n  // 10. Append (`Sec-WebSocket-Extensions`, permessageDeflate) to\n  //     request\u2019s header list.\n  request.headersList.append('sec-websocket-extensions', permessageDeflate, true)\n\n  // 11. Fetch request with useParallelQueue set to true, and\n  //     processResponse given response being these steps:\n  const controller = fetching({\n    request,\n    useParallelQueue: true,\n    dispatcher: options.dispatcher,\n    processResponse (response) {\n      // 1. If response is a network error or its status is not 101,\n      //    fail the WebSocket connection.\n      // if (response.type === 'error' || ((response.socket?.session != null && response.status !== 200) && response.status !== 101)) {\n      if (response.type === 'error' || response.status !== 101) {\n        // The presence of a session property on the socket indicates HTTP2\n        // HTTP1\n        if (response.socket?.session == null) {\n          failWebsocketConnection(handler, 1002, 'Received network error or non-101 status code.', response.error)\n          return\n        }\n\n        // HTTP2\n        if (response.status !== 200) {\n          failWebsocketConnection(handler, 1002, 'Received network error or non-200 status code.', response.error)\n          return\n        }\n      }\n\n      if (warningEmitted === false && response.socket?.session != null) {\n        process.emitWarning('WebSocket over HTTP2 is experimental, and subject to change.', 'ExperimentalWarning')\n        warningEmitted = true\n      }\n\n      // 2. If protocols is not the empty list and extracting header\n      //    list values given `Sec-WebSocket-Protocol` and response\u2019s\n      //    header list results in null, failure, or the empty byte\n      //    sequence, then fail the WebSocket connection.\n      if (protocols.length !== 0 && !response.headersList.get('Sec-WebSocket-Protocol')) {\n        failWebsocketConnection(handler, 1002, 'Server did not respond with sent protocols.')\n        return\n      }\n\n      // 3. Follow the requirements stated step 2 to step 6, inclusive,\n      //    of the last set of steps in section 4.1 of The WebSocket\n      //    Protocol to validate response. This either results in fail\n      //    the WebSocket connection or the WebSocket connection is\n      //    established.\n\n      // 2. If the response lacks an |Upgrade| header field or the |Upgrade|\n      //    header field contains a value that is not an ASCII case-\n      //    insensitive match for the value \"websocket\", the client MUST\n      //    _Fail the WebSocket Connection_.\n      //    For H2, no upgrade header is expected.\n      if (response.socket.session == null && response.headersList.get('Upgrade')?.toLowerCase() !== 'websocket') {\n        failWebsocketConnection(handler, 1002, 'Server did not set Upgrade header to \"websocket\".')\n        return\n      }\n\n      // 3. If the response lacks a |Connection| header field or the\n      //    |Connection| header field doesn't contain a token that is an\n      //    ASCII case-insensitive match for the value \"Upgrade\", the client\n      //    MUST _Fail the WebSocket Connection_.\n      //    For H2, no connection header is expected.\n      if (response.socket.session == null && response.headersList.get('Connection')?.toLowerCase() !== 'upgrade') {\n        failWebsocketConnection(handler, 1002, 'Server did not set Connection header to \"upgrade\".')\n        return\n      }\n\n      // 4. If the response lacks a |Sec-WebSocket-Accept| header field or\n      //    the |Sec-WebSocket-Accept| contains a value other than the\n      //    base64-encoded SHA-1 of the concatenation of the |Sec-WebSocket-\n      //    Key| (as a string, not base64-decoded) with the string \"258EAFA5-\n      //    E914-47DA-95CA-C5AB0DC85B11\" but ignoring any leading and\n      //    trailing whitespace, the client MUST _Fail the WebSocket\n      //    Connection_.\n      const secWSAccept = response.headersList.get('Sec-WebSocket-Accept')\n      const digest = crypto.hash('sha1', keyValue + uid, 'base64')\n      if (secWSAccept !== digest) {\n        failWebsocketConnection(handler, 1002, 'Incorrect hash received in Sec-WebSocket-Accept header.')\n        return\n      }\n\n      // 5. If the response includes a |Sec-WebSocket-Extensions| header\n      //    field and this header field indicates the use of an extension\n      //    that was not present in the client's handshake (the server has\n      //    indicated an extension not requested by the client), the client\n      //    MUST _Fail the WebSocket Connection_.  (The parsing of this\n      //    header field to determine which extensions are requested is\n      //    discussed in Section 9.1.)\n      const secExtension = response.headersList.get('Sec-WebSocket-Extensions')\n      let extensions\n\n      if (secExtension !== null) {\n        extensions = parseExtensions(secExtension)\n\n        if (!extensions.has('permessage-deflate')) {\n          failWebsocketConnection(handler, 1002, 'Sec-WebSocket-Extensions header does not match.')\n          return\n        }\n      }\n\n      // 6. If the response includes a |Sec-WebSocket-Protocol| header field\n      //    and this header field indicates the use of a subprotocol that was\n      //    not present in the client's handshake (the server has indicated a\n      //    subprotocol not requested by the client), the client MUST _Fail\n      //    the WebSocket Connection_.\n      const secProtocol = response.headersList.get('Sec-WebSocket-Protocol')\n\n      if (secProtocol !== null) {\n        const requestProtocols = getDecodeSplit('sec-websocket-protocol', request.headersList)\n\n        // The client can request that the server use a specific subprotocol by\n        // including the |Sec-WebSocket-Protocol| field in its handshake.  If it\n        // is specified, the server needs to include the same field and one of\n        // the selected subprotocol values in its response for the connection to\n        // be established.\n        if (!requestProtocols.includes(secProtocol)) {\n          failWebsocketConnection(handler, 1002, 'Protocol was not set in the opening handshake.')\n          return\n        }\n      }\n\n      response.socket.on('data', handler.onSocketData)\n      response.socket.on('close', handler.onSocketClose)\n      response.socket.on('error', handler.onSocketError)\n\n      handler.wasEverConnected = true\n      handler.onConnectionEstablished(response, extensions)\n    }\n  })\n\n  return controller\n}\n\n/**\n * @see https://whatpr.org/websockets/48.html#close-the-websocket\n * @param {import('./websocket').Handler} object\n * @param {number} [code=null]\n * @param {string} [reason='']\n */\nfunction closeWebSocketConnection (object, code, reason, validate = false) {\n  // 1. If code was not supplied, let code be null.\n  code ??= null\n\n  // 2. If reason was not supplied, let reason be the empty string.\n  reason ??= ''\n\n  // 3. Validate close code and reason with code and reason.\n  if (validate) validateCloseCodeAndReason(code, reason)\n\n  // 4. Run the first matching steps from the following list:\n  //     - If object\u2019s ready state is CLOSING (2) or CLOSED (3)\n  //     - If the WebSocket connection is not yet established [WSP]\n  //     - If the WebSocket closing handshake has not yet been started [WSP]\n  //     - Otherwise\n  if (isClosed(object.readyState) || isClosing(object.readyState)) {\n    // Do nothing.\n  } else if (!isEstablished(object.readyState)) {\n    // Fail the WebSocket connection and set object\u2019s ready state to CLOSING (2). [WSP]\n    failWebsocketConnection(object)\n    object.readyState = states.CLOSING\n  } else if (!object.closeState.has(sentCloseFrameState.SENT) && !object.closeState.has(sentCloseFrameState.RECEIVED)) {\n    // Upon either sending or receiving a Close control frame, it is said\n    // that _The WebSocket Closing Handshake is Started_ and that the\n    // WebSocket connection is in the CLOSING state.\n\n    const frame = new WebsocketFrameSend()\n\n    // If neither code nor reason is present, the WebSocket Close\n    // message must not have a body.\n\n    // If code is present, then the status code to use in the\n    // WebSocket Close message must be the integer given by code.\n    // If code is null and reason is the empty string, the WebSocket Close frame must not have a body.\n    // If reason is non-empty but code is null, then set code to 1000 (\"Normal Closure\").\n    if (reason.length !== 0 && code === null) {\n      code = 1000\n    }\n\n    // If code is set, then the status code to use in the WebSocket Close frame must be the integer given by code.\n    assert(code === null || Number.isInteger(code))\n\n    if (code === null && reason.length === 0) {\n      frame.frameData = emptyBuffer\n    } else if (code !== null && reason === null) {\n      frame.frameData = Buffer.allocUnsafe(2)\n      frame.frameData.writeUInt16BE(code, 0)\n    } else if (code !== null && reason !== null) {\n      // If reason is also present, then reasonBytes must be\n      // provided in the Close message after the status code.\n      frame.frameData = Buffer.allocUnsafe(2 + Buffer.byteLength(reason))\n      frame.frameData.writeUInt16BE(code, 0)\n      // the body MAY contain UTF-8-encoded data with value /reason/\n      frame.frameData.write(reason, 2, 'utf-8')\n    } else {\n      frame.frameData = emptyBuffer\n    }\n\n    object.socket.write(frame.createFrame(opcodes.CLOSE))\n\n    object.closeState.add(sentCloseFrameState.SENT)\n\n    // Upon either sending or receiving a Close control frame, it is said\n    // that _The WebSocket Closing Handshake is Started_ and that the\n    // WebSocket connection is in the CLOSING state.\n    object.readyState = states.CLOSING\n  } else {\n    // Set object\u2019s ready state to CLOSING (2).\n    object.readyState = states.CLOSING\n  }\n}\n\n/**\n * @param {import('./websocket').Handler} handler\n * @param {number} code\n * @param {string|undefined} reason\n * @param {unknown} cause\n * @returns {void}\n */\nfunction failWebsocketConnection (handler, code, reason, cause) {\n  // If _The WebSocket Connection is Established_ prior to the point where\n  // the endpoint is required to _Fail the WebSocket Connection_, the\n  // endpoint SHOULD send a Close frame with an appropriate status code\n  // (Section 7.4) before proceeding to _Close the WebSocket Connection_.\n  if (isEstablished(handler.readyState)) {\n    closeWebSocketConnection(handler, code, reason, false)\n  }\n\n  handler.controller.abort()\n\n  if (isConnecting(handler.readyState)) {\n    // If the connection was not established, we must still emit an 'error' and 'close' events\n    handler.onSocketClose()\n  } else if (handler.socket?.destroyed === false) {\n    handler.socket.destroy()\n  }\n}\n\nmodule.exports = {\n  establishWebSocketConnection,\n  failWebsocketConnection,\n  closeWebSocketConnection\n}\n", "'use strict'\n\nconst { createInflateRaw, Z_DEFAULT_WINDOWBITS } = require('node:zlib')\nconst { isValidClientWindowBits } = require('./util')\nconst { MessageSizeExceededError } = require('../../core/errors')\n\nconst tail = Buffer.from([0x00, 0x00, 0xff, 0xff])\nconst kBuffer = Symbol('kBuffer')\nconst kLength = Symbol('kLength')\n\nclass PerMessageDeflate {\n  /** @type {import('node:zlib').InflateRaw} */\n  #inflate\n\n  #options = {}\n\n  #maxPayloadSize = 0\n\n  /**\n   * @param {Map<string, string>} extensions\n   */\n  constructor (extensions, options) {\n    this.#options.serverNoContextTakeover = extensions.has('server_no_context_takeover')\n    this.#options.serverMaxWindowBits = extensions.get('server_max_window_bits')\n\n    this.#maxPayloadSize = options.maxPayloadSize\n  }\n\n  /**\n   * Decompress a compressed payload.\n   * @param {Buffer} chunk Compressed data\n   * @param {boolean} fin Final fragment flag\n   * @param {Function} callback Callback function\n   */\n  decompress (chunk, fin, callback) {\n    // An endpoint uses the following algorithm to decompress a message.\n    // 1.  Append 4 octets of 0x00 0x00 0xff 0xff to the tail end of the\n    //     payload of the message.\n    // 2.  Decompress the resulting data using DEFLATE.\n    if (!this.#inflate) {\n      let windowBits = Z_DEFAULT_WINDOWBITS\n\n      if (this.#options.serverMaxWindowBits) { // empty values default to Z_DEFAULT_WINDOWBITS\n        if (!isValidClientWindowBits(this.#options.serverMaxWindowBits)) {\n          callback(new Error('Invalid server_max_window_bits'))\n          return\n        }\n\n        windowBits = Number.parseInt(this.#options.serverMaxWindowBits)\n      }\n\n      try {\n        this.#inflate = createInflateRaw({ windowBits })\n      } catch (err) {\n        callback(err)\n        return\n      }\n      this.#inflate[kBuffer] = []\n      this.#inflate[kLength] = 0\n\n      this.#inflate.on('data', (data) => {\n        this.#inflate[kLength] += data.length\n\n        if (this.#maxPayloadSize > 0 && this.#inflate[kLength] > this.#maxPayloadSize) {\n          callback(new MessageSizeExceededError())\n          this.#inflate.removeAllListeners()\n          this.#inflate = null\n          return\n        }\n\n        this.#inflate[kBuffer].push(data)\n      })\n\n      this.#inflate.on('error', (err) => {\n        this.#inflate = null\n        callback(err)\n      })\n    }\n\n    this.#inflate.write(chunk)\n    if (fin) {\n      this.#inflate.write(tail)\n    }\n\n    this.#inflate.flush(() => {\n      if (!this.#inflate) {\n        return\n      }\n\n      const full = Buffer.concat(this.#inflate[kBuffer], this.#inflate[kLength])\n\n      this.#inflate[kBuffer].length = 0\n      this.#inflate[kLength] = 0\n\n      callback(null, full)\n    })\n  }\n}\n\nmodule.exports = { PerMessageDeflate }\n", "'use strict'\n\nconst { Writable } = require('node:stream')\nconst assert = require('node:assert')\nconst { parserStates, opcodes, states, emptyBuffer, sentCloseFrameState } = require('./constants')\nconst {\n  isValidStatusCode,\n  isValidOpcode,\n  websocketMessageReceived,\n  utf8Decode,\n  isControlFrame,\n  isTextBinaryFrame,\n  isContinuationFrame\n} = require('./util')\nconst { failWebsocketConnection } = require('./connection')\nconst { WebsocketFrameSend } = require('./frame')\nconst { PerMessageDeflate } = require('./permessage-deflate')\nconst { MessageSizeExceededError } = require('../../core/errors')\n\n// This code was influenced by ws released under the MIT license.\n// Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>\n// Copyright (c) 2013 Arnout Kazemier and contributors\n// Copyright (c) 2016 Luigi Pinca and contributors\n\nclass ByteParser extends Writable {\n  #buffers = []\n  #fragmentsBytes = 0\n  #byteOffset = 0\n  #loop = false\n\n  #state = parserStates.INFO\n\n  #info = {}\n  #fragments = []\n\n  /** @type {Map<string, PerMessageDeflate>} */\n  #extensions\n\n  /** @type {import('./websocket').Handler} */\n  #handler\n\n  /** @type {number} */\n  #maxPayloadSize\n\n  /**\n   * @param {import('./websocket').Handler} handler\n   * @param {Map<string, string>|null} extensions\n   * @param {{ maxPayloadSize?: number }} [options]\n   */\n  constructor (handler, extensions, options = {}) {\n    super()\n\n    this.#handler = handler\n    this.#extensions = extensions == null ? new Map() : extensions\n    this.#maxPayloadSize = options.maxPayloadSize ?? 0\n\n    if (this.#extensions.has('permessage-deflate')) {\n      this.#extensions.set('permessage-deflate', new PerMessageDeflate(extensions, options))\n    }\n  }\n\n  /**\n   * @param {Buffer} chunk\n   * @param {() => void} callback\n   */\n  _write (chunk, _, callback) {\n    this.#buffers.push(chunk)\n    this.#byteOffset += chunk.length\n    this.#loop = true\n\n    this.run(callback)\n  }\n\n  #validatePayloadLength () {\n    if (\n      this.#maxPayloadSize > 0 &&\n      !isControlFrame(this.#info.opcode) &&\n      this.#info.payloadLength > this.#maxPayloadSize\n    ) {\n      failWebsocketConnection(this.#handler, 1009, 'Payload size exceeds maximum allowed size')\n      return false\n    }\n\n    return true\n  }\n\n  /**\n   * Runs whenever a new chunk is received.\n   * Callback is called whenever there are no more chunks buffering,\n   * or not enough bytes are buffered to parse.\n   */\n  run (callback) {\n    while (this.#loop) {\n      if (this.#state === parserStates.INFO) {\n        // If there aren't enough bytes to parse the payload length, etc.\n        if (this.#byteOffset < 2) {\n          return callback()\n        }\n\n        const buffer = this.consume(2)\n        const fin = (buffer[0] & 0x80) !== 0\n        const opcode = buffer[0] & 0x0F\n        const masked = (buffer[1] & 0x80) === 0x80\n\n        const fragmented = !fin && opcode !== opcodes.CONTINUATION\n        const payloadLength = buffer[1] & 0x7F\n\n        const rsv1 = buffer[0] & 0x40\n        const rsv2 = buffer[0] & 0x20\n        const rsv3 = buffer[0] & 0x10\n\n        if (!isValidOpcode(opcode)) {\n          failWebsocketConnection(this.#handler, 1002, 'Invalid opcode received')\n          return callback()\n        }\n\n        if (masked) {\n          failWebsocketConnection(this.#handler, 1002, 'Frame cannot be masked')\n          return callback()\n        }\n\n        // MUST be 0 unless an extension is negotiated that defines meanings\n        // for non-zero values.  If a nonzero value is received and none of\n        // the negotiated extensions defines the meaning of such a nonzero\n        // value, the receiving endpoint MUST _Fail the WebSocket\n        // Connection_.\n        // This document allocates the RSV1 bit of the WebSocket header for\n        // PMCEs and calls the bit the \"Per-Message Compressed\" bit.  On a\n        // WebSocket connection where a PMCE is in use, this bit indicates\n        // whether a message is compressed or not.\n        if (rsv1 !== 0 && !this.#extensions.has('permessage-deflate')) {\n          failWebsocketConnection(this.#handler, 1002, 'Expected RSV1 to be clear.')\n          return\n        }\n\n        if (rsv2 !== 0 || rsv3 !== 0) {\n          failWebsocketConnection(this.#handler, 1002, 'RSV1, RSV2, RSV3 must be clear')\n          return\n        }\n\n        if (fragmented && !isTextBinaryFrame(opcode)) {\n          // Only text and binary frames can be fragmented\n          failWebsocketConnection(this.#handler, 1002, 'Invalid frame type was fragmented.')\n          return\n        }\n\n        // If we are already parsing a text/binary frame and do not receive either\n        // a continuation frame or close frame, fail the connection.\n        if (isTextBinaryFrame(opcode) && this.#fragments.length > 0) {\n          failWebsocketConnection(this.#handler, 1002, 'Expected continuation frame')\n          return\n        }\n\n        if (this.#info.fragmented && fragmented) {\n          // A fragmented frame can't be fragmented itself\n          failWebsocketConnection(this.#handler, 1002, 'Fragmented frame exceeded 125 bytes.')\n          return\n        }\n\n        // \"All control frames MUST have a payload length of 125 bytes or less\n        // and MUST NOT be fragmented.\"\n        if ((payloadLength > 125 || fragmented) && isControlFrame(opcode)) {\n          failWebsocketConnection(this.#handler, 1002, 'Control frame either too large or fragmented')\n          return\n        }\n\n        if (isContinuationFrame(opcode) && this.#fragments.length === 0 && !this.#info.compressed) {\n          failWebsocketConnection(this.#handler, 1002, 'Unexpected continuation frame')\n          return\n        }\n\n        if (payloadLength <= 125) {\n          this.#info.payloadLength = payloadLength\n          this.#state = parserStates.READ_DATA\n\n          if (!this.#validatePayloadLength()) {\n            return\n          }\n        } else if (payloadLength === 126) {\n          this.#state = parserStates.PAYLOADLENGTH_16\n        } else if (payloadLength === 127) {\n          this.#state = parserStates.PAYLOADLENGTH_64\n        }\n\n        if (isTextBinaryFrame(opcode)) {\n          this.#info.binaryType = opcode\n          this.#info.compressed = rsv1 !== 0\n        }\n\n        this.#info.opcode = opcode\n        this.#info.masked = masked\n        this.#info.fin = fin\n        this.#info.fragmented = fragmented\n      } else if (this.#state === parserStates.PAYLOADLENGTH_16) {\n        if (this.#byteOffset < 2) {\n          return callback()\n        }\n\n        const buffer = this.consume(2)\n\n        this.#info.payloadLength = buffer.readUInt16BE(0)\n        this.#state = parserStates.READ_DATA\n\n        if (!this.#validatePayloadLength()) {\n          return\n        }\n      } else if (this.#state === parserStates.PAYLOADLENGTH_64) {\n        if (this.#byteOffset < 8) {\n          return callback()\n        }\n\n        const buffer = this.consume(8)\n        const upper = buffer.readUInt32BE(0)\n        const lower = buffer.readUInt32BE(4)\n\n        // 2^31 is the maximum bytes an arraybuffer can contain\n        // on 32-bit systems. Although, on 64-bit systems, this is\n        // 2^53-1 bytes.\n        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_array_length\n        // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/common/globals.h;drc=1946212ac0100668f14eb9e2843bdd846e510a1e;bpv=1;bpt=1;l=1275\n        // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/objects/js-array-buffer.h;l=34;drc=1946212ac0100668f14eb9e2843bdd846e510a1e\n        if (upper !== 0 || lower > 2 ** 31 - 1) {\n          failWebsocketConnection(this.#handler, 1009, 'Received payload length > 2^31 bytes.')\n          return\n        }\n\n        this.#info.payloadLength = lower\n        this.#state = parserStates.READ_DATA\n\n        if (!this.#validatePayloadLength()) {\n          return\n        }\n      } else if (this.#state === parserStates.READ_DATA) {\n        if (this.#byteOffset < this.#info.payloadLength) {\n          return callback()\n        }\n\n        const body = this.consume(this.#info.payloadLength)\n\n        if (isControlFrame(this.#info.opcode)) {\n          this.#loop = this.parseControlFrame(body)\n          this.#state = parserStates.INFO\n        } else {\n          if (!this.#info.compressed) {\n            this.writeFragments(body)\n\n            // If the frame is not fragmented, a message has been received.\n            // If the frame is fragmented, it will terminate with a fin bit set\n            // and an opcode of 0 (continuation), therefore we handle that when\n            // parsing continuation frames, not here.\n            if (!this.#info.fragmented && this.#info.fin) {\n              websocketMessageReceived(this.#handler, this.#info.binaryType, this.consumeFragments())\n            }\n\n            this.#state = parserStates.INFO\n          } else {\n            this.#extensions.get('permessage-deflate').decompress(\n              body,\n              this.#info.fin,\n              (error, data) => {\n                if (error) {\n                  const code = error instanceof MessageSizeExceededError ? 1009 : 1007\n                  failWebsocketConnection(this.#handler, code, error.message)\n                  return\n                }\n\n                this.writeFragments(data)\n\n                // Check cumulative fragment size\n                if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) {\n                  failWebsocketConnection(this.#handler, 1009, new MessageSizeExceededError().message)\n                  return\n                }\n\n                if (!this.#info.fin) {\n                  this.#state = parserStates.INFO\n                  this.#loop = true\n                  this.run(callback)\n                  return\n                }\n\n                websocketMessageReceived(this.#handler, this.#info.binaryType, this.consumeFragments())\n\n                this.#loop = true\n                this.#state = parserStates.INFO\n                this.run(callback)\n              },\n              this.#fragmentsBytes\n            )\n\n            this.#loop = false\n            break\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Take n bytes from the buffered Buffers\n   * @param {number} n\n   * @returns {Buffer}\n   */\n  consume (n) {\n    if (n > this.#byteOffset) {\n      throw new Error('Called consume() before buffers satiated.')\n    } else if (n === 0) {\n      return emptyBuffer\n    }\n\n    this.#byteOffset -= n\n\n    const first = this.#buffers[0]\n\n    if (first.length > n) {\n      // replace with remaining buffer\n      this.#buffers[0] = first.subarray(n, first.length)\n      return first.subarray(0, n)\n    } else if (first.length === n) {\n      // prefect match\n      return this.#buffers.shift()\n    } else {\n      let offset = 0\n      // If Buffer.allocUnsafe is used, extra copies will be made because the offset is non-zero.\n      const buffer = Buffer.allocUnsafeSlow(n)\n      while (offset !== n) {\n        const next = this.#buffers[0]\n        const length = next.length\n\n        if (length + offset === n) {\n          buffer.set(this.#buffers.shift(), offset)\n          break\n        } else if (length + offset > n) {\n          buffer.set(next.subarray(0, n - offset), offset)\n          this.#buffers[0] = next.subarray(n - offset)\n          break\n        } else {\n          buffer.set(this.#buffers.shift(), offset)\n          offset += length\n        }\n      }\n\n      return buffer\n    }\n  }\n\n  writeFragments (fragment) {\n    this.#fragmentsBytes += fragment.length\n    this.#fragments.push(fragment)\n  }\n\n  consumeFragments () {\n    const fragments = this.#fragments\n\n    if (fragments.length === 1) {\n      // single fragment\n      this.#fragmentsBytes = 0\n      return fragments.shift()\n    }\n\n    let offset = 0\n    // If Buffer.allocUnsafe is used, extra copies will be made because the offset is non-zero.\n    const output = Buffer.allocUnsafeSlow(this.#fragmentsBytes)\n\n    for (let i = 0; i < fragments.length; ++i) {\n      const buffer = fragments[i]\n      output.set(buffer, offset)\n      offset += buffer.length\n    }\n\n    this.#fragments = []\n    this.#fragmentsBytes = 0\n\n    return output\n  }\n\n  parseCloseBody (data) {\n    assert(data.length !== 1)\n\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5\n    /** @type {number|undefined} */\n    let code\n\n    if (data.length >= 2) {\n      // _The WebSocket Connection Close Code_ is\n      // defined as the status code (Section 7.4) contained in the first Close\n      // control frame received by the application\n      code = data.readUInt16BE(0)\n    }\n\n    if (code !== undefined && !isValidStatusCode(code)) {\n      return { code: 1002, reason: 'Invalid status code', error: true }\n    }\n\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.6\n    /** @type {Buffer} */\n    let reason = data.subarray(2)\n\n    // Remove BOM\n    if (reason[0] === 0xEF && reason[1] === 0xBB && reason[2] === 0xBF) {\n      reason = reason.subarray(3)\n    }\n\n    try {\n      reason = utf8Decode(reason)\n    } catch {\n      return { code: 1007, reason: 'Invalid UTF-8', error: true }\n    }\n\n    return { code, reason, error: false }\n  }\n\n  /**\n   * Parses control frames.\n   * @param {Buffer} body\n   */\n  parseControlFrame (body) {\n    const { opcode, payloadLength } = this.#info\n\n    if (opcode === opcodes.CLOSE) {\n      if (payloadLength === 1) {\n        failWebsocketConnection(this.#handler, 1002, 'Received close frame with a 1-byte body.')\n        return false\n      }\n\n      this.#info.closeInfo = this.parseCloseBody(body)\n\n      if (this.#info.closeInfo.error) {\n        const { code, reason } = this.#info.closeInfo\n\n        failWebsocketConnection(this.#handler, code, reason)\n        return false\n      }\n\n      // Upon receiving such a frame, the other peer sends a\n      // Close frame in response, if it hasn't already sent one.\n      if (!this.#handler.closeState.has(sentCloseFrameState.SENT) && !this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n        // If an endpoint receives a Close frame and did not previously send a\n        // Close frame, the endpoint MUST send a Close frame in response.  (When\n        // sending a Close frame in response, the endpoint typically echos the\n        // status code it received.)\n        let body = emptyBuffer\n        if (this.#info.closeInfo.code) {\n          body = Buffer.allocUnsafe(2)\n          body.writeUInt16BE(this.#info.closeInfo.code, 0)\n        }\n        const closeFrame = new WebsocketFrameSend(body)\n\n        this.#handler.socket.write(closeFrame.createFrame(opcodes.CLOSE))\n        this.#handler.closeState.add(sentCloseFrameState.SENT)\n      }\n\n      // Upon either sending or receiving a Close control frame, it is said\n      // that _The WebSocket Closing Handshake is Started_ and that the\n      // WebSocket connection is in the CLOSING state.\n      this.#handler.readyState = states.CLOSING\n      this.#handler.closeState.add(sentCloseFrameState.RECEIVED)\n\n      return false\n    } else if (opcode === opcodes.PING) {\n      // Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in\n      // response, unless it already received a Close frame.\n      // A Pong frame sent in response to a Ping frame must have identical\n      // \"Application data\"\n\n      if (!this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n        const frame = new WebsocketFrameSend(body)\n\n        this.#handler.socket.write(frame.createFrame(opcodes.PONG))\n\n        this.#handler.onPing(body)\n      }\n    } else if (opcode === opcodes.PONG) {\n      // A Pong frame MAY be sent unsolicited.  This serves as a\n      // unidirectional heartbeat.  A response to an unsolicited Pong frame is\n      // not expected.\n      this.#handler.onPong(body)\n    }\n\n    return true\n  }\n\n  get closingInfo () {\n    return this.#info.closeInfo\n  }\n}\n\nmodule.exports = {\n  ByteParser\n}\n", "'use strict'\n\nconst { WebsocketFrameSend } = require('./frame')\nconst { opcodes, sendHints } = require('./constants')\nconst FixedQueue = require('../../dispatcher/fixed-queue')\n\n/**\n * @typedef {object} SendQueueNode\n * @property {Promise<void> | null} promise\n * @property {((...args: any[]) => any)} callback\n * @property {Buffer | null} frame\n */\n\nclass SendQueue {\n  /**\n   * @type {FixedQueue}\n   */\n  #queue = new FixedQueue()\n\n  /**\n   * @type {boolean}\n   */\n  #running = false\n\n  /** @type {import('node:net').Socket} */\n  #socket\n\n  constructor (socket) {\n    this.#socket = socket\n  }\n\n  add (item, cb, hint) {\n    if (hint !== sendHints.blob) {\n      if (!this.#running) {\n        // TODO(@tsctx): support fast-path for string on running\n        if (hint === sendHints.text) {\n          // special fast-path for string\n          const { 0: head, 1: body } = WebsocketFrameSend.createFastTextFrame(item)\n          this.#socket.cork()\n          this.#socket.write(head)\n          this.#socket.write(body, cb)\n          this.#socket.uncork()\n        } else {\n          // direct writing\n          this.#socket.write(createFrame(item, hint), cb)\n        }\n      } else {\n        /** @type {SendQueueNode} */\n        const node = {\n          promise: null,\n          callback: cb,\n          frame: createFrame(item, hint)\n        }\n        this.#queue.push(node)\n      }\n      return\n    }\n\n    /** @type {SendQueueNode} */\n    const node = {\n      promise: item.arrayBuffer().then((ab) => {\n        node.promise = null\n        node.frame = createFrame(ab, hint)\n      }),\n      callback: cb,\n      frame: null\n    }\n\n    this.#queue.push(node)\n\n    if (!this.#running) {\n      this.#run()\n    }\n  }\n\n  async #run () {\n    this.#running = true\n    const queue = this.#queue\n    while (!queue.isEmpty()) {\n      const node = queue.shift()\n      // wait pending promise\n      if (node.promise !== null) {\n        await node.promise\n      }\n      // write\n      this.#socket.write(node.frame, node.callback)\n      // cleanup\n      node.callback = node.frame = null\n    }\n    this.#running = false\n  }\n}\n\nfunction createFrame (data, hint) {\n  return new WebsocketFrameSend(toBuffer(data, hint)).createFrame(hint === sendHints.text ? opcodes.TEXT : opcodes.BINARY)\n}\n\nfunction toBuffer (data, hint) {\n  switch (hint) {\n    case sendHints.text:\n    case sendHints.typedArray:\n      return new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n    case sendHints.arrayBuffer:\n    case sendHints.blob:\n      return new Uint8Array(data)\n  }\n}\n\nmodule.exports = { SendQueue }\n", "'use strict'\n\nconst { isArrayBuffer } = require('node:util/types')\nconst { webidl } = require('../webidl')\nconst { URLSerializer } = require('../fetch/data-url')\nconst { environmentSettingsObject } = require('../fetch/util')\nconst { staticPropertyDescriptors, states, sentCloseFrameState, sendHints, opcodes } = require('./constants')\nconst {\n  isConnecting,\n  isEstablished,\n  isClosing,\n  isClosed,\n  isValidSubprotocol,\n  fireEvent,\n  utf8Decode,\n  toArrayBuffer,\n  getURLRecord\n} = require('./util')\nconst { establishWebSocketConnection, closeWebSocketConnection, failWebsocketConnection } = require('./connection')\nconst { ByteParser } = require('./receiver')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { getGlobalDispatcher } = require('../../global')\nconst { ErrorEvent, CloseEvent, createFastMessageEvent } = require('./events')\nconst { SendQueue } = require('./sender')\nconst { WebsocketFrameSend } = require('./frame')\nconst { channels } = require('../../core/diagnostics')\n\nfunction getSocketAddress (socket) {\n  if (typeof socket?.address === 'function') {\n    return socket.address()\n  }\n\n  if (typeof socket?.session?.socket?.address === 'function') {\n    return socket.session.socket.address()\n  }\n\n  return null\n}\n\n/**\n * @typedef {object} Handler\n * @property {(response: any, extensions?: string[]) => void} onConnectionEstablished\n * @property {(opcode: number, data: Buffer) => void} onMessage\n * @property {(error: Error) => void} onParserError\n * @property {() => void} onParserDrain\n * @property {(chunk: Buffer) => void} onSocketData\n * @property {(err: Error) => void} onSocketError\n * @property {() => void} onSocketClose\n * @property {(body: Buffer) => void} onPing\n * @property {(body: Buffer) => void} onPong\n *\n * @property {number} readyState\n * @property {import('stream').Duplex} socket\n * @property {Set<number>} closeState\n * @property {import('../fetch/index').Fetch} controller\n * @property {boolean} [wasEverConnected=false]\n */\n\n// https://websockets.spec.whatwg.org/#interface-definition\nclass WebSocket extends EventTarget {\n  #events = {\n    open: null,\n    error: null,\n    close: null,\n    message: null\n  }\n\n  #bufferedAmount = 0\n  #protocol = ''\n  #extensions = ''\n\n  /** @type {SendQueue} */\n  #sendQueue\n\n  /** @type {Handler} */\n  #handler = {\n    onConnectionEstablished: (response, extensions) => this.#onConnectionEstablished(response, extensions),\n    onMessage: (opcode, data) => this.#onMessage(opcode, data),\n    onParserError: (err) => failWebsocketConnection(this.#handler, null, err.message),\n    onParserDrain: () => this.#onParserDrain(),\n    onSocketData: (chunk) => {\n      if (!this.#parser.write(chunk)) {\n        this.#handler.socket.pause()\n      }\n    },\n    onSocketError: (err) => {\n      this.#handler.readyState = states.CLOSING\n\n      if (channels.socketError.hasSubscribers) {\n        channels.socketError.publish(err)\n      }\n\n      this.#handler.socket.destroy()\n    },\n    onSocketClose: () => this.#onSocketClose(),\n    onPing: (body) => {\n      if (channels.ping.hasSubscribers) {\n        channels.ping.publish({\n          payload: body,\n          websocket: this\n        })\n      }\n    },\n    onPong: (body) => {\n      if (channels.pong.hasSubscribers) {\n        channels.pong.publish({\n          payload: body,\n          websocket: this\n        })\n      }\n    },\n\n    readyState: states.CONNECTING,\n    socket: null,\n    closeState: new Set(),\n    controller: null,\n    wasEverConnected: false\n  }\n\n  #url\n  #binaryType\n  /** @type {import('./receiver').ByteParser} */\n  #parser\n\n  /**\n   * @param {string} url\n   * @param {string|string[]} protocols\n   */\n  constructor (url, protocols = []) {\n    super()\n\n    webidl.util.markAsUncloneable(this)\n\n    const prefix = 'WebSocket constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    const options = webidl.converters['DOMString or sequence<DOMString> or WebSocketInit'](protocols, prefix, 'options')\n\n    url = webidl.converters.USVString(url)\n    protocols = options.protocols\n\n    // 1. Let baseURL be this's relevant settings object's API base URL.\n    const baseURL = environmentSettingsObject.settingsObject.baseUrl\n\n    // 2. Let urlRecord be the result of getting a URL record given url and baseURL.\n    const urlRecord = getURLRecord(url, baseURL)\n\n    // 3. If protocols is a string, set protocols to a sequence consisting\n    //    of just that string.\n    if (typeof protocols === 'string') {\n      protocols = [protocols]\n    }\n\n    // 4. If any of the values in protocols occur more than once or otherwise\n    //    fail to match the requirements for elements that comprise the value\n    //    of `Sec-WebSocket-Protocol` fields as defined by The WebSocket\n    //    protocol, then throw a \"SyntaxError\" DOMException.\n    if (protocols.length !== new Set(protocols.map(p => p.toLowerCase())).size) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    if (protocols.length > 0 && !protocols.every(p => isValidSubprotocol(p))) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    // 5. Set this's url to urlRecord.\n    this.#url = new URL(urlRecord.href)\n\n    // 6. Let client be this's relevant settings object.\n    const client = environmentSettingsObject.settingsObject\n\n    // 7. Run this step in parallel:\n    // 7.1. Establish a WebSocket connection given urlRecord, protocols,\n    //      and client.\n    this.#handler.controller = establishWebSocketConnection(\n      urlRecord,\n      protocols,\n      client,\n      this.#handler,\n      options\n    )\n\n    // Each WebSocket object has an associated ready state, which is a\n    // number representing the state of the connection. Initially it must\n    // be CONNECTING (0).\n    this.#handler.readyState = WebSocket.CONNECTING\n\n    // The extensions attribute must initially return the empty string.\n\n    // The protocol attribute must initially return the empty string.\n\n    // Each WebSocket object has an associated binary type, which is a\n    // BinaryType. Initially it must be \"blob\".\n    this.#binaryType = 'blob'\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#dom-websocket-close\n   * @param {number|undefined} code\n   * @param {string|undefined} reason\n   */\n  close (code = undefined, reason = undefined) {\n    webidl.brandCheck(this, WebSocket)\n\n    const prefix = 'WebSocket.close'\n\n    if (code !== undefined) {\n      code = webidl.converters['unsigned short'](code, prefix, 'code', webidl.attributes.Clamp)\n    }\n\n    if (reason !== undefined) {\n      reason = webidl.converters.USVString(reason)\n    }\n\n    // 1. If code is the special value \"missing\", then set code to null.\n    code ??= null\n\n    // 2. If reason is the special value \"missing\", then set reason to the empty string.\n    reason ??= ''\n\n    // 3. Close the WebSocket with this, code, and reason.\n    closeWebSocketConnection(this.#handler, code, reason, true)\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#dom-websocket-send\n   * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data\n   */\n  send (data) {\n    webidl.brandCheck(this, WebSocket)\n\n    const prefix = 'WebSocket.send'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    data = webidl.converters.WebSocketSendData(data, prefix, 'data')\n\n    // 1. If this's ready state is CONNECTING, then throw an\n    //    \"InvalidStateError\" DOMException.\n    if (isConnecting(this.#handler.readyState)) {\n      throw new DOMException('Sent before connected.', 'InvalidStateError')\n    }\n\n    // 2. Run the appropriate set of steps from the following list:\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-6.1\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-5.2\n\n    if (!isEstablished(this.#handler.readyState) || isClosing(this.#handler.readyState)) {\n      return\n    }\n\n    // If data is a string\n    if (typeof data === 'string') {\n      // If the WebSocket connection is established and the WebSocket\n      // closing handshake has not yet started, then the user agent\n      // must send a WebSocket Message comprised of the data argument\n      // using a text frame opcode; if the data cannot be sent, e.g.\n      // because it would need to be buffered but the buffer is full,\n      // the user agent must flag the WebSocket as full and then close\n      // the WebSocket connection. Any invocation of this method with a\n      // string argument that does not throw an exception must increase\n      // the bufferedAmount attribute by the number of bytes needed to\n      // express the argument as UTF-8.\n\n      const buffer = Buffer.from(data)\n\n      this.#bufferedAmount += buffer.byteLength\n      this.#sendQueue.add(buffer, () => {\n        this.#bufferedAmount -= buffer.byteLength\n      }, sendHints.text)\n    } else if (isArrayBuffer(data)) {\n      // If the WebSocket connection is established, and the WebSocket\n      // closing handshake has not yet started, then the user agent must\n      // send a WebSocket Message comprised of data using a binary frame\n      // opcode; if the data cannot be sent, e.g. because it would need\n      // to be buffered but the buffer is full, the user agent must flag\n      // the WebSocket as full and then close the WebSocket connection.\n      // The data to be sent is the data stored in the buffer described\n      // by the ArrayBuffer object. Any invocation of this method with an\n      // ArrayBuffer argument that does not throw an exception must\n      // increase the bufferedAmount attribute by the length of the\n      // ArrayBuffer in bytes.\n\n      this.#bufferedAmount += data.byteLength\n      this.#sendQueue.add(data, () => {\n        this.#bufferedAmount -= data.byteLength\n      }, sendHints.arrayBuffer)\n    } else if (ArrayBuffer.isView(data)) {\n      // If the WebSocket connection is established, and the WebSocket\n      // closing handshake has not yet started, then the user agent must\n      // send a WebSocket Message comprised of data using a binary frame\n      // opcode; if the data cannot be sent, e.g. because it would need to\n      // be buffered but the buffer is full, the user agent must flag the\n      // WebSocket as full and then close the WebSocket connection. The\n      // data to be sent is the data stored in the section of the buffer\n      // described by the ArrayBuffer object that data references. Any\n      // invocation of this method with this kind of argument that does\n      // not throw an exception must increase the bufferedAmount attribute\n      // by the length of data\u2019s buffer in bytes.\n\n      this.#bufferedAmount += data.byteLength\n      this.#sendQueue.add(data, () => {\n        this.#bufferedAmount -= data.byteLength\n      }, sendHints.typedArray)\n    } else if (webidl.is.Blob(data)) {\n      // If the WebSocket connection is established, and the WebSocket\n      // closing handshake has not yet started, then the user agent must\n      // send a WebSocket Message comprised of data using a binary frame\n      // opcode; if the data cannot be sent, e.g. because it would need to\n      // be buffered but the buffer is full, the user agent must flag the\n      // WebSocket as full and then close the WebSocket connection. The data\n      // to be sent is the raw data represented by the Blob object. Any\n      // invocation of this method with a Blob argument that does not throw\n      // an exception must increase the bufferedAmount attribute by the size\n      // of the Blob object\u2019s raw data, in bytes.\n\n      this.#bufferedAmount += data.size\n      this.#sendQueue.add(data, () => {\n        this.#bufferedAmount -= data.size\n      }, sendHints.blob)\n    }\n  }\n\n  get readyState () {\n    webidl.brandCheck(this, WebSocket)\n\n    // The readyState getter steps are to return this's ready state.\n    return this.#handler.readyState\n  }\n\n  get bufferedAmount () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#bufferedAmount\n  }\n\n  get url () {\n    webidl.brandCheck(this, WebSocket)\n\n    // The url getter steps are to return this's url, serialized.\n    return URLSerializer(this.#url)\n  }\n\n  get extensions () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#extensions\n  }\n\n  get protocol () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#protocol\n  }\n\n  get onopen () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.open\n  }\n\n  set onopen (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.open) {\n      this.removeEventListener('open', this.#events.open)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('open', listener)\n      this.#events.open = fn\n    } else {\n      this.#events.open = null\n    }\n  }\n\n  get onerror () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.error\n  }\n\n  set onerror (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.error) {\n      this.removeEventListener('error', this.#events.error)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('error', listener)\n      this.#events.error = fn\n    } else {\n      this.#events.error = null\n    }\n  }\n\n  get onclose () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.close\n  }\n\n  set onclose (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.close) {\n      this.removeEventListener('close', this.#events.close)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('close', listener)\n      this.#events.close = fn\n    } else {\n      this.#events.close = null\n    }\n  }\n\n  get onmessage () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.message\n  }\n\n  set onmessage (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.message) {\n      this.removeEventListener('message', this.#events.message)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('message', listener)\n      this.#events.message = fn\n    } else {\n      this.#events.message = null\n    }\n  }\n\n  get binaryType () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#binaryType\n  }\n\n  set binaryType (type) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (type !== 'blob' && type !== 'arraybuffer') {\n      this.#binaryType = 'blob'\n    } else {\n      this.#binaryType = type\n    }\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol\n   */\n  #onConnectionEstablished (response, parsedExtensions) {\n    // processResponse is called when the \"response's header list has been received and initialized.\"\n    // once this happens, the connection is open\n    this.#handler.socket = response.socket\n\n    // Get maxPayloadSize from dispatcher options\n    const maxPayloadSize = this.#handler.controller.dispatcher?.webSocketOptions?.maxPayloadSize\n\n    const parser = new ByteParser(this.#handler, parsedExtensions, {\n      maxPayloadSize\n    })\n    parser.on('drain', () => this.#handler.onParserDrain())\n    parser.on('error', (err) => this.#handler.onParserError(err))\n\n    this.#parser = parser\n    this.#sendQueue = new SendQueue(response.socket)\n\n    // 1. Change the ready state to OPEN (1).\n    this.#handler.readyState = states.OPEN\n\n    // 2. Change the extensions attribute\u2019s value to the extensions in use, if\n    //    it is not the null value.\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-9.1\n    const extensions = response.headersList.get('sec-websocket-extensions')\n\n    if (extensions !== null) {\n      this.#extensions = extensions\n    }\n\n    // 3. Change the protocol attribute\u2019s value to the subprotocol in use, if\n    //    it is not the null value.\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-1.9\n    const protocol = response.headersList.get('sec-websocket-protocol')\n\n    if (protocol !== null) {\n      this.#protocol = protocol\n    }\n\n    // 4. Fire an event named open at the WebSocket object.\n    fireEvent('open', this)\n\n    if (channels.open.hasSubscribers) {\n      // Convert headers to a plain object for the event\n      const headers = response.headersList.entries\n      channels.open.publish({\n        address: getSocketAddress(response.socket),\n        protocol: this.#protocol,\n        extensions: this.#extensions,\n        websocket: this,\n        handshakeResponse: {\n          status: response.status,\n          statusText: response.statusText,\n          headers\n        }\n      })\n    }\n  }\n\n  #onMessage (type, data) {\n    // 1. If ready state is not OPEN (1), then return.\n    if (this.#handler.readyState !== states.OPEN) {\n      return\n    }\n\n    // 2. Let dataForEvent be determined by switching on type and binary type:\n    let dataForEvent\n\n    if (type === opcodes.TEXT) {\n      // -> type indicates that the data is Text\n      //      a new DOMString containing data\n      try {\n        dataForEvent = utf8Decode(data)\n      } catch {\n        failWebsocketConnection(this.#handler, 1007, 'Received invalid UTF-8 in text frame.')\n        return\n      }\n    } else if (type === opcodes.BINARY) {\n      if (this.#binaryType === 'blob') {\n        // -> type indicates that the data is Binary and binary type is \"blob\"\n        //      a new Blob object, created in the relevant Realm of the WebSocket\n        //      object, that represents data as its raw data\n        dataForEvent = new Blob([data])\n      } else {\n        // -> type indicates that the data is Binary and binary type is \"arraybuffer\"\n        //      a new ArrayBuffer object, created in the relevant Realm of the\n        //      WebSocket object, whose contents are data\n        dataForEvent = toArrayBuffer(data)\n      }\n    }\n\n    // 3. Fire an event named message at the WebSocket object, using MessageEvent,\n    //    with the origin attribute initialized to the serialization of the WebSocket\n    //    object\u2019s url's origin, and the data attribute initialized to dataForEvent.\n    fireEvent('message', this, createFastMessageEvent, {\n      origin: this.#url.origin,\n      data: dataForEvent\n    })\n  }\n\n  #onParserDrain () {\n    this.#handler.socket.resume()\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol\n   * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.4\n   */\n  #onSocketClose () {\n    // If the TCP connection was closed after the\n    // WebSocket closing handshake was completed, the WebSocket connection\n    // is said to have been closed _cleanly_.\n    const wasClean =\n      this.#handler.closeState.has(sentCloseFrameState.SENT) &&\n      this.#handler.closeState.has(sentCloseFrameState.RECEIVED)\n\n    let code = 1005\n    let reason = ''\n\n    const result = this.#parser?.closingInfo\n\n    if (result && !result.error) {\n      code = result.code ?? 1005\n      reason = result.reason\n    }\n\n    // 1. Change the ready state to CLOSED (3).\n    this.#handler.readyState = states.CLOSED\n\n    // 2. If the user agent was required to fail the WebSocket\n    //    connection, or if the WebSocket connection was closed\n    //    after being flagged as full, fire an event named error\n    //    at the WebSocket object.\n    if (!this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n      // If _The WebSocket\n      // Connection is Closed_ and no Close control frame was received by the\n      // endpoint (such as could occur if the underlying transport connection\n      // is lost), _The WebSocket Connection Close Code_ is considered to be\n      // 1006.\n      code = 1006\n\n      fireEvent('error', this, (type, init) => new ErrorEvent(type, init), {\n        error: new TypeError(reason)\n      })\n    }\n\n    // 3. Fire an event named close at the WebSocket object,\n    //    using CloseEvent, with the wasClean attribute\n    //    initialized to true if the connection closed cleanly\n    //    and false otherwise, the code attribute initialized to\n    //    the WebSocket connection close code, and the reason\n    //    attribute initialized to the result of applying UTF-8\n    //    decode without BOM to the WebSocket connection close\n    //    reason.\n    // TODO: process.nextTick\n    fireEvent('close', this, (type, init) => new CloseEvent(type, init), {\n      wasClean, code, reason\n    })\n\n    if (channels.close.hasSubscribers) {\n      channels.close.publish({\n        websocket: this,\n        code,\n        reason\n      })\n    }\n  }\n\n  /**\n   * @param {WebSocket} ws\n   * @param {Buffer|undefined} buffer\n   */\n  static ping (ws, buffer) {\n    if (Buffer.isBuffer(buffer)) {\n      if (buffer.length > 125) {\n        throw new TypeError('A PING frame cannot have a body larger than 125 bytes.')\n      }\n    } else if (buffer !== undefined) {\n      throw new TypeError('Expected buffer payload')\n    }\n\n    // An endpoint MAY send a Ping frame any time after the connection is\n    // established and before the connection is closed.\n    const readyState = ws.#handler.readyState\n\n    if (isEstablished(readyState) && !isClosing(readyState) && !isClosed(readyState)) {\n      const frame = new WebsocketFrameSend(buffer)\n      ws.#handler.socket.write(frame.createFrame(opcodes.PING))\n    }\n  }\n}\n\nconst { ping } = WebSocket\nReflect.deleteProperty(WebSocket, 'ping')\n\n// https://websockets.spec.whatwg.org/#dom-websocket-connecting\nWebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING\n// https://websockets.spec.whatwg.org/#dom-websocket-open\nWebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN\n// https://websockets.spec.whatwg.org/#dom-websocket-closing\nWebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING\n// https://websockets.spec.whatwg.org/#dom-websocket-closed\nWebSocket.CLOSED = WebSocket.prototype.CLOSED = states.CLOSED\n\nObject.defineProperties(WebSocket.prototype, {\n  CONNECTING: staticPropertyDescriptors,\n  OPEN: staticPropertyDescriptors,\n  CLOSING: staticPropertyDescriptors,\n  CLOSED: staticPropertyDescriptors,\n  url: kEnumerableProperty,\n  readyState: kEnumerableProperty,\n  bufferedAmount: kEnumerableProperty,\n  onopen: kEnumerableProperty,\n  onerror: kEnumerableProperty,\n  onclose: kEnumerableProperty,\n  close: kEnumerableProperty,\n  onmessage: kEnumerableProperty,\n  binaryType: kEnumerableProperty,\n  send: kEnumerableProperty,\n  extensions: kEnumerableProperty,\n  protocol: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'WebSocket',\n    writable: false,\n    enumerable: false,\n    configurable: true\n  }\n})\n\nObject.defineProperties(WebSocket, {\n  CONNECTING: staticPropertyDescriptors,\n  OPEN: staticPropertyDescriptors,\n  CLOSING: staticPropertyDescriptors,\n  CLOSED: staticPropertyDescriptors\n})\n\nwebidl.converters['sequence<DOMString>'] = webidl.sequenceConverter(\n  webidl.converters.DOMString\n)\n\nwebidl.converters['DOMString or sequence<DOMString>'] = function (V, prefix, argument) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT && Symbol.iterator in V) {\n    return webidl.converters['sequence<DOMString>'](V)\n  }\n\n  return webidl.converters.DOMString(V, prefix, argument)\n}\n\n// This implements the proposal made in https://github.com/whatwg/websockets/issues/42\nwebidl.converters.WebSocketInit = webidl.dictionaryConverter([\n  {\n    key: 'protocols',\n    converter: webidl.converters['DOMString or sequence<DOMString>'],\n    defaultValue: () => []\n  },\n  {\n    key: 'dispatcher',\n    converter: webidl.converters.any,\n    defaultValue: () => getGlobalDispatcher()\n  },\n  {\n    key: 'headers',\n    converter: webidl.nullableConverter(webidl.converters.HeadersInit)\n  }\n])\n\nwebidl.converters['DOMString or sequence<DOMString> or WebSocketInit'] = function (V) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT && !(Symbol.iterator in V)) {\n    return webidl.converters.WebSocketInit(V)\n  }\n\n  return { protocols: webidl.converters['DOMString or sequence<DOMString>'](V) }\n}\n\nwebidl.converters.WebSocketSendData = function (V) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT) {\n    if (webidl.is.Blob(V)) {\n      return V\n    }\n\n    if (webidl.is.BufferSource(V)) {\n      return V\n    }\n  }\n\n  return webidl.converters.USVString(V)\n}\n\nmodule.exports = {\n  WebSocket,\n  ping\n}\n", "'use strict'\n\nconst { webidl } = require('../../webidl')\nconst { validateCloseCodeAndReason } = require('../util')\nconst { kConstruct } = require('../../../core/symbols')\nconst { kEnumerableProperty } = require('../../../core/util')\n\nfunction createInheritableDOMException () {\n  // https://github.com/nodejs/node/issues/59677\n  class Test extends DOMException {\n    get reason () {\n      return ''\n    }\n  }\n\n  if (new Test().reason !== undefined) {\n    return DOMException\n  }\n\n  return new Proxy(DOMException, {\n    construct (target, args, newTarget) {\n      const instance = Reflect.construct(target, args, target)\n      Object.setPrototypeOf(instance, newTarget.prototype)\n      return instance\n    }\n  })\n}\n\nclass WebSocketError extends createInheritableDOMException() {\n  #closeCode\n  #reason\n\n  constructor (message = '', init = undefined) {\n    message = webidl.converters.DOMString(message, 'WebSocketError', 'message')\n\n    // 1. Set this 's name to \" WebSocketError \".\n    // 2. Set this 's message to message .\n    super(message, 'WebSocketError')\n\n    if (init === kConstruct) {\n      return\n    } else if (init !== null) {\n      init = webidl.converters.WebSocketCloseInfo(init)\n    }\n\n    // 3. Let code be init [\" closeCode \"] if it exists , or null otherwise.\n    let code = init.closeCode ?? null\n\n    // 4. Let reason be init [\" reason \"] if it exists , or the empty string otherwise.\n    const reason = init.reason ?? ''\n\n    // 5. Validate close code and reason with code and reason .\n    validateCloseCodeAndReason(code, reason)\n\n    // 6. If reason is non-empty, but code is not set, then set code to 1000 (\"Normal Closure\").\n    if (reason.length !== 0 && code === null) {\n      code = 1000\n    }\n\n    // 7. Set this 's closeCode to code .\n    this.#closeCode = code\n\n    // 8. Set this 's reason to reason .\n    this.#reason = reason\n  }\n\n  get closeCode () {\n    return this.#closeCode\n  }\n\n  get reason () {\n    return this.#reason\n  }\n\n  /**\n   * @param {string} message\n   * @param {number|null} code\n   * @param {string} reason\n   */\n  static createUnvalidatedWebSocketError (message, code, reason) {\n    const error = new WebSocketError(message, kConstruct)\n    error.#closeCode = code\n    error.#reason = reason\n    return error\n  }\n}\n\nconst { createUnvalidatedWebSocketError } = WebSocketError\ndelete WebSocketError.createUnvalidatedWebSocketError\n\nObject.defineProperties(WebSocketError.prototype, {\n  closeCode: kEnumerableProperty,\n  reason: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'WebSocketError',\n    writable: false,\n    enumerable: false,\n    configurable: true\n  }\n})\n\nwebidl.is.WebSocketError = webidl.util.MakeTypeAssertion(WebSocketError)\n\nmodule.exports = { WebSocketError, createUnvalidatedWebSocketError }\n", "'use strict'\n\nconst { addAbortListener } = require('node:events')\nconst { environmentSettingsObject, readableStreamClose } = require('../../fetch/util')\nconst { states, opcodes, sentCloseFrameState } = require('../constants')\nconst { webidl } = require('../../webidl')\nconst { getURLRecord, isValidSubprotocol, isEstablished, utf8Decode } = require('../util')\nconst { establishWebSocketConnection, failWebsocketConnection, closeWebSocketConnection } = require('../connection')\nconst { channels } = require('../../../core/diagnostics')\nconst { WebsocketFrameSend } = require('../frame')\nconst { ByteParser } = require('../receiver')\nconst { WebSocketError, createUnvalidatedWebSocketError } = require('./websocketerror')\nconst { kEnumerableProperty } = require('../../../core/util')\nconst { utf8DecodeBytes } = require('../../../encoding')\n\nlet emittedExperimentalWarning = false\n\nclass WebSocketStream {\n  // Each WebSocketStream object has an associated url , which is a URL record .\n  /** @type {URL} */\n  #url\n\n  // Each WebSocketStream object has an associated opened promise , which is a promise.\n  /** @type {ReturnType<typeof Promise.withResolvers>} */\n  #openedPromise\n\n  // Each WebSocketStream object has an associated closed promise , which is a promise.\n  /** @type {ReturnType<typeof Promise.withResolvers>} */\n  #closedPromise\n\n  // Each WebSocketStream object has an associated readable stream , which is a ReadableStream .\n  /** @type {ReadableStream} */\n  #readableStream\n  /** @type {ReadableStreamDefaultController} */\n  #readableStreamController\n\n  // Each WebSocketStream object has an associated writable stream , which is a WritableStream .\n  /** @type {WritableStream} */\n  #writableStream\n\n  // Each WebSocketStream object has an associated boolean handshake aborted , which is initially false.\n  #handshakeAborted = false\n\n  /** @type {import('../websocket').Handler} */\n  #handler = {\n    // https://whatpr.org/websockets/48/7b748d3...d5570f3.html#feedback-to-websocket-stream-from-the-protocol\n    onConnectionEstablished: (response, extensions) => this.#onConnectionEstablished(response, extensions),\n    onMessage: (opcode, data) => this.#onMessage(opcode, data),\n    onParserError: (err) => failWebsocketConnection(this.#handler, null, err.message),\n    onParserDrain: () => this.#handler.socket.resume(),\n    onSocketData: (chunk) => {\n      if (!this.#parser.write(chunk)) {\n        this.#handler.socket.pause()\n      }\n    },\n    onSocketError: (err) => {\n      this.#handler.readyState = states.CLOSING\n\n      if (channels.socketError.hasSubscribers) {\n        channels.socketError.publish(err)\n      }\n\n      this.#handler.socket.destroy()\n    },\n    onSocketClose: () => this.#onSocketClose(),\n    onPing: () => {},\n    onPong: () => {},\n\n    readyState: states.CONNECTING,\n    socket: null,\n    closeState: new Set(),\n    controller: null,\n    wasEverConnected: false\n  }\n\n  /** @type {import('../receiver').ByteParser} */\n  #parser\n\n  constructor (url, options = undefined) {\n    if (!emittedExperimentalWarning) {\n      process.emitWarning('WebSocketStream is experimental! Expect it to change at any time.', {\n        code: 'UNDICI-WSS'\n      })\n      emittedExperimentalWarning = true\n    }\n\n    webidl.argumentLengthCheck(arguments, 1, 'WebSocket')\n\n    url = webidl.converters.USVString(url)\n    if (options !== null) {\n      options = webidl.converters.WebSocketStreamOptions(options)\n    }\n\n    // 1. Let baseURL be this 's relevant settings object 's API base URL .\n    const baseURL = environmentSettingsObject.settingsObject.baseUrl\n\n    // 2. Let urlRecord be the result of getting a URL record given url and baseURL .\n    const urlRecord = getURLRecord(url, baseURL)\n\n    // 3. Let protocols be options [\" protocols \"] if it exists , otherwise an empty sequence.\n    const protocols = options.protocols\n\n    // 4. If any of the values in protocols occur more than once or otherwise fail to match the requirements for elements that comprise the value of ` Sec-WebSocket-Protocol ` fields as defined by The WebSocket Protocol , then throw a \" SyntaxError \" DOMException . [WSP]\n    if (protocols.length !== new Set(protocols.map(p => p.toLowerCase())).size) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    if (protocols.length > 0 && !protocols.every(p => isValidSubprotocol(p))) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    // 5. Set this 's url to urlRecord .\n    this.#url = urlRecord.toString()\n\n    // 6. Set this 's opened promise and closed promise to new promises.\n    this.#openedPromise = Promise.withResolvers()\n    this.#closedPromise = Promise.withResolvers()\n\n    // 7. Apply backpressure to the WebSocket.\n    // TODO\n\n    // 8.  If options [\" signal \"] exists ,\n    if (options.signal != null) {\n      // 8.1. Let signal be options [\" signal \"].\n      const signal = options.signal\n\n      // 8.2. If signal is aborted , then reject this 's opened promise and closed promise with signal \u2019s abort reason\n      //      and return.\n      if (signal.aborted) {\n        this.#openedPromise.reject(signal.reason)\n        this.#closedPromise.reject(signal.reason)\n        return\n      }\n\n      // 8.3. Add the following abort steps to signal :\n      addAbortListener(signal, () => {\n        // 8.3.1. If the WebSocket connection is not yet established : [WSP]\n        if (!isEstablished(this.#handler.readyState)) {\n          // 8.3.1.1. Fail the WebSocket connection .\n          failWebsocketConnection(this.#handler)\n\n          // Set this 's ready state to CLOSING .\n          this.#handler.readyState = states.CLOSING\n\n          // Reject this 's opened promise and closed promise with signal \u2019s abort reason .\n          this.#openedPromise.reject(signal.reason)\n          this.#closedPromise.reject(signal.reason)\n\n          // Set this 's handshake aborted to true.\n          this.#handshakeAborted = true\n        }\n      })\n    }\n\n    // 9.  Let client be this 's relevant settings object .\n    const client = environmentSettingsObject.settingsObject\n\n    // 10. Run this step in parallel :\n    // 10.1. Establish a WebSocket connection given urlRecord , protocols , and client . [FETCH]\n    this.#handler.controller = establishWebSocketConnection(\n      urlRecord,\n      protocols,\n      client,\n      this.#handler,\n      options\n    )\n  }\n\n  // The url getter steps are to return this 's url , serialized .\n  get url () {\n    return this.#url.toString()\n  }\n\n  // The opened getter steps are to return this 's opened promise .\n  get opened () {\n    return this.#openedPromise.promise\n  }\n\n  // The closed getter steps are to return this 's closed promise .\n  get closed () {\n    return this.#closedPromise.promise\n  }\n\n  // The close( closeInfo ) method steps are:\n  close (closeInfo = undefined) {\n    if (closeInfo !== null) {\n      closeInfo = webidl.converters.WebSocketCloseInfo(closeInfo)\n    }\n\n    // 1. Let code be closeInfo [\" closeCode \"] if present, or null otherwise.\n    const code = closeInfo.closeCode ?? null\n\n    // 2. Let reason be closeInfo [\" reason \"].\n    const reason = closeInfo.reason\n\n    // 3. Close the WebSocket with this , code , and reason .\n    closeWebSocketConnection(this.#handler, code, reason, true)\n  }\n\n  #write (chunk) {\n    // See /websockets/stream/tentative/write.any.html\n    chunk = webidl.converters.WebSocketStreamWrite(chunk)\n\n    // 1. Let promise be a new promise created in stream \u2019s relevant realm .\n    const promise = Promise.withResolvers()\n\n    // 2. Let data be null.\n    let data = null\n\n    // 3. Let opcode be null.\n    let opcode = null\n\n    // 4. If chunk is a BufferSource ,\n    if (webidl.is.BufferSource(chunk)) {\n      // 4.1. Set data to a copy of the bytes given chunk .\n      data = new Uint8Array(ArrayBuffer.isView(chunk) ? new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength) : chunk.slice())\n\n      // 4.2. Set opcode to a binary frame opcode.\n      opcode = opcodes.BINARY\n    } else {\n      // 5. Otherwise,\n\n      // 5.1. Let string be the result of converting chunk to an IDL USVString .\n      //    If this throws an exception, return a promise rejected with the exception.\n      let string\n\n      try {\n        string = webidl.converters.DOMString(chunk)\n      } catch (e) {\n        promise.reject(e)\n        return promise.promise\n      }\n\n      // 5.2. Set data to the result of UTF-8 encoding string .\n      data = new TextEncoder().encode(string)\n\n      // 5.3. Set opcode to a text frame opcode.\n      opcode = opcodes.TEXT\n    }\n\n    // 6. In parallel,\n    // 6.1. Wait until there is sufficient buffer space in stream to send the message.\n\n    // 6.2. If the closing handshake has not yet started , Send a WebSocket Message to stream comprised of data using opcode .\n    if (!this.#handler.closeState.has(sentCloseFrameState.SENT) && !this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n      const frame = new WebsocketFrameSend(data)\n\n      this.#handler.socket.write(frame.createFrame(opcode), () => {\n        promise.resolve(undefined)\n      })\n    }\n\n    // 6.3. Queue a global task on the WebSocket task source given stream \u2019s relevant global object to resolve promise with undefined.\n    return promise.promise\n  }\n\n  /** @type {import('../websocket').Handler['onConnectionEstablished']} */\n  #onConnectionEstablished (response, parsedExtensions) {\n    this.#handler.socket = response.socket\n\n    const parser = new ByteParser(this.#handler, parsedExtensions)\n    parser.on('drain', () => this.#handler.onParserDrain())\n    parser.on('error', (err) => this.#handler.onParserError(err))\n\n    this.#parser = parser\n\n    // 1. Change stream \u2019s ready state to OPEN (1).\n    this.#handler.readyState = states.OPEN\n\n    // 2. Set stream \u2019s was ever connected to true.\n    // This is done in the opening handshake.\n\n    // 3. Let extensions be the extensions in use .\n    const extensions = parsedExtensions ?? ''\n\n    // 4. Let protocol be the subprotocol in use .\n    const protocol = response.headersList.get('sec-websocket-protocol') ?? ''\n\n    // 5. Let pullAlgorithm be an action that pulls bytes from stream .\n    // 6. Let cancelAlgorithm be an action that cancels stream with reason , given reason .\n    // 7. Let readable be a new ReadableStream .\n    // 8. Set up readable with pullAlgorithm and cancelAlgorithm .\n    const readable = new ReadableStream({\n      start: (controller) => {\n        this.#readableStreamController = controller\n      },\n      cancel: (reason) => this.#cancel(reason)\n    })\n\n    // 9. Let writeAlgorithm be an action that writes chunk to stream , given chunk .\n    // 10. Let closeAlgorithm be an action that closes stream .\n    // 11. Let abortAlgorithm be an action that aborts stream with reason , given reason .\n    // 12. Let writable be a new WritableStream .\n    // 13. Set up writable with writeAlgorithm , closeAlgorithm , and abortAlgorithm .\n    const writable = new WritableStream({\n      write: (chunk) => this.#write(chunk),\n      close: () => closeWebSocketConnection(this.#handler, null, null),\n      abort: (reason) => this.#closeUsingReason(reason)\n    })\n\n    // Set stream \u2019s readable stream to readable .\n    this.#readableStream = readable\n\n    // Set stream \u2019s writable stream to writable .\n    this.#writableStream = writable\n\n    // Resolve stream \u2019s opened promise with WebSocketOpenInfo \u00AB[ \" extensions \" \u2192 extensions , \" protocol \" \u2192 protocol , \" readable \" \u2192 readable , \" writable \" \u2192 writable ]\u00BB.\n    this.#openedPromise.resolve({\n      extensions,\n      protocol,\n      readable,\n      writable\n    })\n  }\n\n  /** @type {import('../websocket').Handler['onMessage']} */\n  #onMessage (type, data) {\n    // 1. If stream\u2019s ready state is not OPEN (1), then return.\n    if (this.#handler.readyState !== states.OPEN) {\n      return\n    }\n\n    // 2. Let chunk be determined by switching on type:\n    //      - type indicates that the data is Text\n    //          a new DOMString containing data\n    //      - type indicates that the data is Binary\n    //          a new Uint8Array object, created in the relevant Realm of the\n    //          WebSocketStream object, whose contents are data\n    let chunk\n\n    if (type === opcodes.TEXT) {\n      try {\n        chunk = utf8Decode(data)\n      } catch {\n        failWebsocketConnection(this.#handler, 1007, 'Received invalid UTF-8 in text frame.')\n        return\n      }\n    } else if (type === opcodes.BINARY) {\n      chunk = new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n    }\n\n    // 3. Enqueue chunk into stream\u2019s readable stream.\n    this.#readableStreamController.enqueue(chunk)\n\n    // 4. Apply backpressure to the WebSocket.\n  }\n\n  /** @type {import('../websocket').Handler['onSocketClose']} */\n  #onSocketClose () {\n    const wasClean =\n      this.#handler.closeState.has(sentCloseFrameState.SENT) &&\n      this.#handler.closeState.has(sentCloseFrameState.RECEIVED)\n\n    // 1. Change the ready state to CLOSED (3).\n    this.#handler.readyState = states.CLOSED\n\n    // 2. If stream \u2019s handshake aborted is true, then return.\n    if (this.#handshakeAborted) {\n      return\n    }\n\n    // 3. If stream \u2019s was ever connected is false, then reject stream \u2019s opened promise with a new WebSocketError.\n    if (!this.#handler.wasEverConnected) {\n      this.#openedPromise.reject(new WebSocketError('Socket never opened'))\n    }\n\n    const result = this.#parser?.closingInfo\n\n    // 4. Let code be the WebSocket connection close code .\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5\n    // If this Close control frame contains no status code, _The WebSocket\n    // Connection Close Code_ is considered to be 1005. If _The WebSocket\n    // Connection is Closed_ and no Close control frame was received by the\n    // endpoint (such as could occur if the underlying transport connection\n    // is lost), _The WebSocket Connection Close Code_ is considered to be\n    // 1006.\n    let code = result?.code ?? 1005\n\n    if (!this.#handler.closeState.has(sentCloseFrameState.SENT) && !this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n      code = 1006\n    }\n\n    // 5. Let reason be the result of applying UTF-8 decode without BOM to the WebSocket connection close reason .\n    const reason = result?.reason == null ? '' : utf8DecodeBytes(Buffer.from(result.reason))\n\n    // 6. If the connection was closed cleanly ,\n    if (wasClean) {\n      // 6.1. Close stream \u2019s readable stream .\n      readableStreamClose(this.#readableStreamController)\n\n      // 6.2. Error stream \u2019s writable stream with an \" InvalidStateError \" DOMException indicating that a closed WebSocketStream cannot be written to.\n      if (!this.#writableStream.locked) {\n        this.#writableStream.abort(new DOMException('A closed WebSocketStream cannot be written to', 'InvalidStateError'))\n      }\n\n      // 6.3. Resolve stream \u2019s closed promise with WebSocketCloseInfo \u00AB[ \" closeCode \" \u2192 code , \" reason \" \u2192 reason ]\u00BB.\n      this.#closedPromise.resolve({\n        closeCode: code,\n        reason\n      })\n    } else {\n      // 7. Otherwise,\n\n      // 7.1. Let error be a new WebSocketError whose closeCode is code and reason is reason .\n      const error = createUnvalidatedWebSocketError('unclean close', code, reason)\n\n      // 7.2. Error stream \u2019s readable stream with error .\n      this.#readableStreamController?.error(error)\n\n      // 7.3. Error stream \u2019s writable stream with error .\n      this.#writableStream?.abort(error)\n\n      // 7.4. Reject stream \u2019s closed promise with error .\n      this.#closedPromise.reject(error)\n    }\n  }\n\n  #closeUsingReason (reason) {\n    // 1. Let code be null.\n    let code = null\n\n    // 2. Let reasonString be the empty string.\n    let reasonString = ''\n\n    // 3. If reason implements WebSocketError ,\n    if (webidl.is.WebSocketError(reason)) {\n      // 3.1. Set code to reason \u2019s closeCode .\n      code = reason.closeCode\n\n      // 3.2. Set reasonString to reason \u2019s reason .\n      reasonString = reason.reason\n    }\n\n    // 4. Close the WebSocket with stream , code , and reasonString . If this throws an exception,\n    //    discard code and reasonString and close the WebSocket with stream .\n    closeWebSocketConnection(this.#handler, code, reasonString)\n  }\n\n  //  To cancel a WebSocketStream stream given reason , close using reason giving stream and reason .\n  #cancel (reason) {\n    this.#closeUsingReason(reason)\n  }\n}\n\nObject.defineProperties(WebSocketStream.prototype, {\n  url: kEnumerableProperty,\n  opened: kEnumerableProperty,\n  closed: kEnumerableProperty,\n  close: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'WebSocketStream',\n    writable: false,\n    enumerable: false,\n    configurable: true\n  }\n})\n\nwebidl.converters.WebSocketStreamOptions = webidl.dictionaryConverter([\n  {\n    key: 'protocols',\n    converter: webidl.sequenceConverter(webidl.converters.USVString),\n    defaultValue: () => []\n  },\n  {\n    key: 'signal',\n    converter: webidl.nullableConverter(webidl.converters.AbortSignal),\n    defaultValue: () => null\n  }\n])\n\nwebidl.converters.WebSocketCloseInfo = webidl.dictionaryConverter([\n  {\n    key: 'closeCode',\n    converter: (V) => webidl.converters['unsigned short'](V, webidl.attributes.EnforceRange)\n  },\n  {\n    key: 'reason',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  }\n])\n\nwebidl.converters.WebSocketStreamWrite = function (V) {\n  if (typeof V === 'string') {\n    return webidl.converters.USVString(V)\n  }\n\n  return webidl.converters.BufferSource(V)\n}\n\nmodule.exports = { WebSocketStream }\n", "'use strict'\n\n/**\n * Checks if the given value is a valid LastEventId.\n * @param {string} value\n * @returns {boolean}\n */\nfunction isValidLastEventId (value) {\n  // LastEventId should not contain U+0000 NULL\n  return value.indexOf('\\u0000') === -1\n}\n\n/**\n * Checks if the given value is a base 10 digit.\n * @param {string} value\n * @returns {boolean}\n */\nfunction isASCIINumber (value) {\n  if (value.length === 0) return false\n  for (let i = 0; i < value.length; i++) {\n    if (value.charCodeAt(i) < 0x30 || value.charCodeAt(i) > 0x39) return false\n  }\n  return true\n}\n\nmodule.exports = {\n  isValidLastEventId,\n  isASCIINumber\n}\n", "'use strict'\nconst { Transform } = require('node:stream')\nconst { isASCIINumber, isValidLastEventId } = require('./util')\n\n/**\n * @type {number[]} BOM\n */\nconst BOM = [0xEF, 0xBB, 0xBF]\n/**\n * @type {10} LF\n */\nconst LF = 0x0A\n/**\n * @type {13} CR\n */\nconst CR = 0x0D\n/**\n * @type {58} COLON\n */\nconst COLON = 0x3A\n/**\n * @type {32} SPACE\n */\nconst SPACE = 0x20\n\nconst DATA = Buffer.from('data')\nconst EVENT = Buffer.from('event')\nconst ID = Buffer.from('id')\nconst RETRY = Buffer.from('retry')\n\nfunction isASCIINumberBytes (buffer, start) {\n  if (start >= buffer.length) {\n    return false\n  }\n\n  for (let i = start; i < buffer.length; i++) {\n    if (buffer[i] < 0x30 || buffer[i] > 0x39) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction isValidLastEventIdBytes (buffer, start) {\n  for (let i = start; i < buffer.length; i++) {\n    if (buffer[i] === 0x00) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction isFieldName (line, length, field) {\n  if (length !== field.length) {\n    return false\n  }\n\n  for (let i = 0; i < length; i++) {\n    if (line[i] !== field[i]) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @typedef {object} EventSourceStreamEvent\n * @type {object}\n * @property {string} [event] The event type.\n * @property {string} [data] The data of the message.\n * @property {string} [id] A unique ID for the event.\n * @property {string} [retry] The reconnection time, in milliseconds.\n */\n\n/**\n * @typedef eventSourceSettings\n * @type {object}\n * @property {string} [lastEventId] The last event ID received from the server.\n * @property {string} [origin] The origin of the event source.\n * @property {number} [reconnectionTime] The reconnection time, in milliseconds.\n */\n\nclass EventSourceStream extends Transform {\n  /**\n   * @type {eventSourceSettings}\n   */\n  state\n\n  /**\n   * Leading byte-order-mark check.\n   * @type {boolean}\n   */\n  checkBOM = true\n\n  /**\n   * @type {boolean}\n   */\n  crlfCheck = false\n\n  /**\n   * @type {boolean}\n   */\n  eventEndCheck = false\n\n  /**\n   * @type {Buffer[]}\n   */\n  chunks = []\n\n  chunkIndex = 0\n  pos = 0\n  lineChunkIndex = 0\n  linePos = 0\n\n  event = {\n    data: undefined,\n    event: undefined,\n    id: undefined,\n    retry: undefined\n  }\n\n  /**\n   * @param {object} options\n   * @param {boolean} [options.readableObjectMode]\n   * @param {eventSourceSettings} [options.eventSourceSettings]\n   * @param {(chunk: any, encoding?: BufferEncoding | undefined) => boolean} [options.push]\n   */\n  constructor (options = {}) {\n    // Enable object mode as EventSourceStream emits objects of shape\n    // EventSourceStreamEvent\n    options.readableObjectMode = true\n\n    super(options)\n\n    this.state = options.eventSourceSettings || {}\n    if (options.push) {\n      this.push = options.push\n    }\n  }\n\n  /**\n   * @param {Buffer} chunk\n   * @param {string} _encoding\n   * @param {Function} callback\n   * @returns {void}\n   */\n  _transform (chunk, _encoding, callback) {\n    if (chunk.length === 0) {\n      callback()\n      return\n    }\n\n    this.chunks.push(chunk)\n\n    // Strip leading byte-order-mark if we opened the stream and started\n    // the processing of the incoming data\n    if (this.checkBOM) {\n      if (this.handleBOM()) {\n        callback()\n        return\n      }\n    }\n\n    while (this.hasCurrentByte()) {\n      const byte = this.currentByte()\n\n      // If the previous line ended with an end-of-line, we need to check\n      // if the next character is also an end-of-line.\n      if (this.eventEndCheck) {\n        // If the the current character is an end-of-line, then the event\n        // is finished and we can process it\n\n        // If the previous line ended with a carriage return, we need to\n        // check if the current character is a line feed and remove it\n        // from the buffer.\n        if (this.crlfCheck) {\n          // If the current character is a line feed, we can remove it\n          // from the buffer and reset the crlfCheck flag\n          if (byte === LF) {\n            this.crlfCheck = false\n            this.consumeCurrentByte()\n\n            // It is possible that the line feed is not the end of the\n            // event. We need to check if the next character is an\n            // end-of-line character to determine if the event is\n            // finished. We simply continue the loop to check the next\n            // character.\n\n            // As we removed the line feed from the buffer and set the\n            // crlfCheck flag to false, we basically don't make any\n            // distinction between a line feed and a carriage return.\n            continue\n          }\n          this.crlfCheck = false\n        }\n\n        if (byte === LF || byte === CR) {\n          // If the current character is a carriage return, we need to\n          // set the crlfCheck flag to true, as we need to check if the\n          // next character is a line feed so we can remove it from the\n          // buffer\n          if (byte === CR) {\n            this.crlfCheck = true\n          }\n\n          this.consumeCurrentByte()\n          if (this.hasPendingEvent()) {\n            this.processEvent(this.event)\n          }\n          this.clearEvent()\n          continue\n        }\n        // If the current character is not an end-of-line, then the event\n        // is not finished and we have to reset the eventEndCheck flag\n        this.eventEndCheck = false\n        continue\n      }\n\n      // If the current character is an end-of-line, we can process the\n      // line\n      if (byte === LF || byte === CR) {\n        // If the current character is a carriage return, we need to\n        // set the crlfCheck flag to true, as we need to check if the\n        // next character is a line feed\n        if (byte === CR) {\n          this.crlfCheck = true\n        }\n\n        // In any case, we can process the line as we reached an\n        // end-of-line character\n        this.parseLine(this.readLine(), this.event)\n        this.consumeCurrentByte()\n        // A line was processed and this could be the end of the event. We need\n        // to check if the next line is empty to determine if the event is\n        // finished.\n        this.eventEndCheck = true\n        continue\n      }\n\n      this.advanceCursor()\n    }\n\n    callback()\n  }\n\n  /**\n   * @param {Buffer} line\n   * @param {EventSourceStreamEvent} event\n   */\n  parseLine (line, event) {\n    // If the line is empty (a blank line)\n    // Dispatch the event, as defined below.\n    // This will be handled in the _transform method\n    if (line.length === 0) {\n      return\n    }\n\n    // If the line starts with a U+003A COLON character (:)\n    // Ignore the line.\n    const colonPosition = line.indexOf(COLON)\n    if (colonPosition === 0) {\n      return\n    }\n\n    let fieldLength = line.length\n    let valueStart = line.length\n\n    // If the line contains a U+003A COLON character (:)\n    if (colonPosition !== -1) {\n      fieldLength = colonPosition\n\n      // Collect the characters on the line after the first U+003A COLON\n      // character (:), and let value be that string.\n      // If value starts with a U+0020 SPACE character, remove it from value.\n      valueStart = colonPosition + 1\n      if (line[valueStart] === SPACE) {\n        ++valueStart\n      }\n    }\n\n    if (isFieldName(line, fieldLength, DATA)) {\n      const value = line.toString('utf8', valueStart)\n\n      if (event.data === undefined) {\n        event.data = value\n      } else {\n        event.data += `\\n${value}`\n      }\n      return\n    }\n\n    if (isFieldName(line, fieldLength, RETRY)) {\n      if (isASCIINumberBytes(line, valueStart)) {\n        event.retry = line.toString('utf8', valueStart)\n      }\n      return\n    }\n\n    if (isFieldName(line, fieldLength, ID)) {\n      if (isValidLastEventIdBytes(line, valueStart)) {\n        event.id = line.toString('utf8', valueStart)\n      }\n      return\n    }\n\n    if (isFieldName(line, fieldLength, EVENT)) {\n      const value = line.toString('utf8', valueStart)\n\n      if (value.length > 0) {\n        event.event = value\n      }\n    }\n  }\n\n  /**\n   * @param {EventSourceStreamEvent} event\n   */\n  processEvent (event) {\n    if (event.retry && isASCIINumber(event.retry)) {\n      this.state.reconnectionTime = parseInt(event.retry, 10)\n    }\n\n    if (event.id !== undefined && isValidLastEventId(event.id)) {\n      this.state.lastEventId = event.id\n    }\n\n    // only dispatch event, when data is provided\n    if (event.data !== undefined) {\n      this.push({\n        type: event.event || 'message',\n        options: {\n          data: event.data,\n          lastEventId: this.state.lastEventId,\n          origin: this.state.origin\n        }\n      })\n    }\n  }\n\n  clearEvent () {\n    this.event.data = undefined\n    this.event.event = undefined\n    this.event.id = undefined\n    this.event.retry = undefined\n  }\n\n  hasPendingEvent () {\n    return this.event.data !== undefined ||\n      this.event.event !== undefined ||\n      this.event.id !== undefined ||\n      this.event.retry !== undefined\n  }\n\n  hasCurrentByte () {\n    return this.chunkIndex < this.chunks.length &&\n      this.pos < this.chunks[this.chunkIndex].length\n  }\n\n  currentByte () {\n    return this.chunks[this.chunkIndex][this.pos]\n  }\n\n  consumeCurrentByte () {\n    this.advanceCursor()\n    this.syncLineStartToCursor()\n  }\n\n  advanceCursor () {\n    this.pos++\n\n    while (this.chunkIndex < this.chunks.length && this.pos >= this.chunks[this.chunkIndex].length) {\n      this.chunkIndex++\n      this.pos = 0\n    }\n  }\n\n  syncLineStartToCursor () {\n    this.lineChunkIndex = this.chunkIndex\n    this.linePos = this.pos\n    this.dropConsumedChunks()\n  }\n\n  dropConsumedChunks () {\n    while (this.lineChunkIndex > 0) {\n      this.chunks.shift()\n      this.lineChunkIndex--\n      this.chunkIndex--\n    }\n\n    if (this.chunkIndex === this.chunks.length) {\n      this.chunks.length = 0\n      this.chunkIndex = 0\n      this.pos = 0\n      this.lineChunkIndex = 0\n      this.linePos = 0\n    }\n  }\n\n  readLine () {\n    if (this.lineChunkIndex === this.chunkIndex) {\n      return this.chunks[this.chunkIndex].subarray(this.linePos, this.pos)\n    }\n\n    const chunks = []\n    let length = 0\n\n    for (let i = this.lineChunkIndex; i <= this.chunkIndex; i++) {\n      const chunk = this.chunks[i]\n      const start = i === this.lineChunkIndex ? this.linePos : 0\n      const end = i === this.chunkIndex ? this.pos : chunk.length\n      const slice = chunk.subarray(start, end)\n      length += slice.length\n      chunks.push(slice)\n    }\n\n    return Buffer.concat(chunks, length)\n  }\n\n  peekBufferedByte (offset) {\n    let chunkIndex = this.lineChunkIndex\n    let pos = this.linePos\n\n    while (chunkIndex < this.chunks.length) {\n      const chunk = this.chunks[chunkIndex]\n      const remaining = chunk.length - pos\n\n      if (offset < remaining) {\n        return chunk[pos + offset]\n      }\n\n      offset -= remaining\n      chunkIndex++\n      pos = 0\n    }\n  }\n\n  discardLeadingBytes (count) {\n    while (count > 0 && this.lineChunkIndex < this.chunks.length) {\n      const chunk = this.chunks[this.lineChunkIndex]\n      const remaining = chunk.length - this.linePos\n\n      if (count < remaining) {\n        this.linePos += count\n        count = 0\n      } else {\n        count -= remaining\n        this.lineChunkIndex++\n        this.linePos = 0\n      }\n    }\n\n    this.chunkIndex = this.lineChunkIndex\n    this.pos = this.linePos\n    this.dropConsumedChunks()\n  }\n\n  handleBOM () {\n    const first = this.peekBufferedByte(0)\n    const second = this.peekBufferedByte(1)\n    const third = this.peekBufferedByte(2)\n\n    if (second === undefined) {\n      if (first === BOM[0]) {\n        return true\n      }\n\n      this.checkBOM = false\n      return true\n    }\n\n    if (third === undefined) {\n      if (first === BOM[0] && second === BOM[1]) {\n        return true\n      }\n\n      this.checkBOM = false\n      return false\n    }\n\n    if (first === BOM[0] && second === BOM[1] && third === BOM[2]) {\n      this.discardLeadingBytes(3)\n    }\n\n    this.checkBOM = false\n    return !this.hasCurrentByte()\n  }\n}\n\nmodule.exports = {\n  EventSourceStream\n}\n", "'use strict'\n\nconst { pipeline } = require('node:stream')\nconst { fetching } = require('../fetch')\nconst { makeRequest } = require('../fetch/request')\nconst { webidl } = require('../webidl')\nconst { EventSourceStream } = require('./eventsource-stream')\nconst { parseMIMEType } = require('../fetch/data-url')\nconst { createFastMessageEvent } = require('../websocket/events')\nconst { isNetworkError } = require('../fetch/response')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { environmentSettingsObject } = require('../fetch/util')\n\nlet experimentalWarned = false\n\n/**\n * A reconnection time, in milliseconds. This must initially be an implementation-defined value,\n * probably in the region of a few seconds.\n *\n * In Comparison:\n * - Chrome uses 3000ms.\n * - Deno uses 5000ms.\n *\n * @type {3000}\n */\nconst defaultReconnectionTime = 3000\n\n/**\n * The readyState attribute represents the state of the connection.\n * @typedef ReadyState\n * @type {0|1|2}\n * @readonly\n * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#dom-eventsource-readystate-dev\n */\n\n/**\n * The connection has not yet been established, or it was closed and the user\n * agent is reconnecting.\n * @type {0}\n */\nconst CONNECTING = 0\n\n/**\n * The user agent has an open connection and is dispatching events as it\n * receives them.\n * @type {1}\n */\nconst OPEN = 1\n\n/**\n * The connection is not open, and the user agent is not trying to reconnect.\n * @type {2}\n */\nconst CLOSED = 2\n\n/**\n * Requests for the element will have their mode set to \"cors\" and their credentials mode set to \"same-origin\".\n * @type {'anonymous'}\n */\nconst ANONYMOUS = 'anonymous'\n\n/**\n * Requests for the element will have their mode set to \"cors\" and their credentials mode set to \"include\".\n * @type {'use-credentials'}\n */\nconst USE_CREDENTIALS = 'use-credentials'\n\n/**\n * The EventSource interface is used to receive server-sent events. It\n * connects to a server over HTTP and receives events in text/event-stream\n * format without closing the connection.\n * @extends {EventTarget}\n * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events\n * @api public\n */\nclass EventSource extends EventTarget {\n  #events = {\n    open: null,\n    error: null,\n    message: null\n  }\n\n  #url\n  #withCredentials = false\n\n  /**\n   * @type {ReadyState}\n   */\n  #readyState = CONNECTING\n\n  #request = null\n  #controller = null\n\n  #dispatcher\n\n  /**\n   * @type {import('./eventsource-stream').eventSourceSettings}\n   */\n  #state\n\n  /**\n   * Creates a new EventSource object.\n   * @param {string} url\n   * @param {EventSourceInit} [eventSourceInitDict={}]\n   * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface\n   */\n  constructor (url, eventSourceInitDict = {}) {\n    // 1. Let ev be a new EventSource object.\n    super()\n\n    webidl.util.markAsUncloneable(this)\n\n    const prefix = 'EventSource constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    if (!experimentalWarned) {\n      experimentalWarned = true\n      process.emitWarning('EventSource is experimental, expect them to change at any time.', {\n        code: 'UNDICI-ES'\n      })\n    }\n\n    url = webidl.converters.USVString(url)\n    eventSourceInitDict = webidl.converters.EventSourceInitDict(eventSourceInitDict, prefix, 'eventSourceInitDict')\n\n    this.#dispatcher = eventSourceInitDict.node.dispatcher || eventSourceInitDict.dispatcher\n    this.#state = {\n      lastEventId: '',\n      reconnectionTime: eventSourceInitDict.node.reconnectionTime\n    }\n\n    // 2. Let settings be ev's relevant settings object.\n    // https://html.spec.whatwg.org/multipage/webappapis.html#environment-settings-object\n    const settings = environmentSettingsObject\n\n    let urlRecord\n\n    try {\n      // 3. Let urlRecord be the result of encoding-parsing a URL given url, relative to settings.\n      urlRecord = new URL(url, settings.settingsObject.baseUrl)\n      this.#state.origin = urlRecord.origin\n    } catch (e) {\n      // 4. If urlRecord is failure, then throw a \"SyntaxError\" DOMException.\n      throw new DOMException(e, 'SyntaxError')\n    }\n\n    // 5. Set ev's url to urlRecord.\n    this.#url = urlRecord.href\n\n    // 6. Let corsAttributeState be Anonymous.\n    let corsAttributeState = ANONYMOUS\n\n    // 7. If the value of eventSourceInitDict's withCredentials member is true,\n    // then set corsAttributeState to Use Credentials and set ev's\n    // withCredentials attribute to true.\n    if (eventSourceInitDict.withCredentials === true) {\n      corsAttributeState = USE_CREDENTIALS\n      this.#withCredentials = true\n    }\n\n    // 8. Let request be the result of creating a potential-CORS request given\n    // urlRecord, the empty string, and corsAttributeState.\n    const initRequest = {\n      redirect: 'follow',\n      keepalive: true,\n      // @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes\n      mode: 'cors',\n      credentials: corsAttributeState === 'anonymous'\n        ? 'same-origin'\n        : 'omit',\n      referrer: 'no-referrer'\n    }\n\n    // 9. Set request's client to settings.\n    initRequest.client = environmentSettingsObject.settingsObject\n\n    // 10. User agents may set (`Accept`, `text/event-stream`) in request's header list.\n    initRequest.headersList = [['accept', { name: 'accept', value: 'text/event-stream' }]]\n\n    // 11. Set request's cache mode to \"no-store\".\n    initRequest.cache = 'no-store'\n\n    // 12. Set request's initiator type to \"other\".\n    initRequest.initiator = 'other'\n\n    initRequest.urlList = [new URL(this.#url)]\n\n    // 13. Set ev's request to request.\n    this.#request = makeRequest(initRequest)\n\n    this.#connect()\n  }\n\n  /**\n   * Returns the state of this EventSource object's connection. It can have the\n   * values described below.\n   * @returns {ReadyState}\n   * @readonly\n   */\n  get readyState () {\n    return this.#readyState\n  }\n\n  /**\n   * Returns the URL providing the event stream.\n   * @readonly\n   * @returns {string}\n   */\n  get url () {\n    return this.#url\n  }\n\n  /**\n   * Returns a boolean indicating whether the EventSource object was\n   * instantiated with CORS credentials set (true), or not (false, the default).\n   */\n  get withCredentials () {\n    return this.#withCredentials\n  }\n\n  #connect () {\n    if (this.#readyState === CLOSED) return\n\n    this.#readyState = CONNECTING\n\n    const fetchParams = {\n      request: this.#request,\n      dispatcher: this.#dispatcher\n    }\n\n    // 14. Let processEventSourceEndOfBody given response res be the following step: if res is not a network error, then reestablish the connection.\n    const processEventSourceEndOfBody = (response) => {\n      if (!isNetworkError(response)) {\n        return this.#reconnect()\n      }\n    }\n\n    // 15. Fetch request, with processResponseEndOfBody set to processEventSourceEndOfBody...\n    fetchParams.processResponseEndOfBody = processEventSourceEndOfBody\n\n    // and processResponse set to the following steps given response res:\n    fetchParams.processResponse = (response) => {\n      // 1. If res is an aborted network error, then fail the connection.\n\n      if (isNetworkError(response)) {\n        // 1. When a user agent is to fail the connection, the user agent\n        // must queue a task which, if the readyState attribute is set to a\n        // value other than CLOSED, sets the readyState attribute to CLOSED\n        // and fires an event named error at the EventSource object. Once the\n        // user agent has failed the connection, it does not attempt to\n        // reconnect.\n        if (response.aborted) {\n          this.close()\n          this.dispatchEvent(new Event('error'))\n          return\n          // 2. Otherwise, if res is a network error, then reestablish the\n          // connection, unless the user agent knows that to be futile, in\n          // which case the user agent may fail the connection.\n        } else {\n          this.#reconnect()\n          return\n        }\n      }\n\n      // 3. Otherwise, if res's status is not 200, or if res's `Content-Type`\n      // is not `text/event-stream`, then fail the connection.\n      const contentType = response.headersList.get('content-type', true)\n      const mimeType = contentType !== null ? parseMIMEType(contentType) : 'failure'\n      const contentTypeValid = mimeType !== 'failure' && mimeType.essence === 'text/event-stream'\n      if (\n        response.status !== 200 ||\n        contentTypeValid === false\n      ) {\n        this.close()\n        this.dispatchEvent(new Event('error'))\n        return\n      }\n\n      // 4. Otherwise, announce the connection and interpret res's body\n      // line by line.\n\n      // When a user agent is to announce the connection, the user agent\n      // must queue a task which, if the readyState attribute is set to a\n      // value other than CLOSED, sets the readyState attribute to OPEN\n      // and fires an event named open at the EventSource object.\n      // @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model\n      this.#readyState = OPEN\n      this.dispatchEvent(new Event('open'))\n\n      // If redirected to a different origin, set the origin to the new origin.\n      this.#state.origin = response.urlList[response.urlList.length - 1].origin\n\n      const eventSourceStream = new EventSourceStream({\n        eventSourceSettings: this.#state,\n        push: (event) => {\n          this.dispatchEvent(createFastMessageEvent(\n            event.type,\n            event.options\n          ))\n        }\n      })\n\n      pipeline(response.body.stream,\n        eventSourceStream,\n        (error) => {\n          if (\n            error?.aborted === false\n          ) {\n            this.close()\n            this.dispatchEvent(new Event('error'))\n          }\n        })\n    }\n\n    this.#controller = fetching(fetchParams)\n  }\n\n  /**\n   * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model\n   * @returns {void}\n   */\n  #reconnect () {\n    // When a user agent is to reestablish the connection, the user agent must\n    // run the following steps. These steps are run in parallel, not as part of\n    // a task. (The tasks that it queues, of course, are run like normal tasks\n    // and not themselves in parallel.)\n\n    // 1. Queue a task to run the following steps:\n\n    //   1. If the readyState attribute is set to CLOSED, abort the task.\n    if (this.#readyState === CLOSED) return\n\n    //   2. Set the readyState attribute to CONNECTING.\n    this.#readyState = CONNECTING\n\n    //   3. Fire an event named error at the EventSource object.\n    this.dispatchEvent(new Event('error'))\n\n    // 2. Wait a delay equal to the reconnection time of the event source.\n    setTimeout(() => {\n      // 5. Queue a task to run the following steps:\n\n      //   1. If the EventSource object's readyState attribute is not set to\n      //      CONNECTING, then return.\n      if (this.#readyState !== CONNECTING) return\n\n      //   2. Let request be the EventSource object's request.\n      //   3. If the EventSource object's last event ID string is not the empty\n      //      string, then:\n      //      1. Let lastEventIDValue be the EventSource object's last event ID\n      //         string, encoded as UTF-8.\n      //      2. Set (`Last-Event-ID`, lastEventIDValue) in request's header\n      //         list.\n      if (this.#state.lastEventId.length) {\n        this.#request.headersList.set('last-event-id', this.#state.lastEventId, true)\n      }\n\n      //   4. Fetch request and process the response obtained in this fashion, if any, as described earlier in this section.\n      this.#connect()\n    }, this.#state.reconnectionTime)?.unref()\n  }\n\n  /**\n   * Closes the connection, if any, and sets the readyState attribute to\n   * CLOSED.\n   */\n  close () {\n    webidl.brandCheck(this, EventSource)\n\n    if (this.#readyState === CLOSED) return\n    this.#readyState = CLOSED\n    this.#controller.abort()\n    this.#request = null\n  }\n\n  get onopen () {\n    return this.#events.open\n  }\n\n  set onopen (fn) {\n    if (this.#events.open) {\n      this.removeEventListener('open', this.#events.open)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('open', listener)\n      this.#events.open = fn\n    } else {\n      this.#events.open = null\n    }\n  }\n\n  get onmessage () {\n    return this.#events.message\n  }\n\n  set onmessage (fn) {\n    if (this.#events.message) {\n      this.removeEventListener('message', this.#events.message)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('message', listener)\n      this.#events.message = fn\n    } else {\n      this.#events.message = null\n    }\n  }\n\n  get onerror () {\n    return this.#events.error\n  }\n\n  set onerror (fn) {\n    if (this.#events.error) {\n      this.removeEventListener('error', this.#events.error)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('error', listener)\n      this.#events.error = fn\n    } else {\n      this.#events.error = null\n    }\n  }\n}\n\nconst constantsPropertyDescriptors = {\n  CONNECTING: {\n    __proto__: null,\n    configurable: false,\n    enumerable: true,\n    value: CONNECTING,\n    writable: false\n  },\n  OPEN: {\n    __proto__: null,\n    configurable: false,\n    enumerable: true,\n    value: OPEN,\n    writable: false\n  },\n  CLOSED: {\n    __proto__: null,\n    configurable: false,\n    enumerable: true,\n    value: CLOSED,\n    writable: false\n  }\n}\n\nObject.defineProperties(EventSource, constantsPropertyDescriptors)\nObject.defineProperties(EventSource.prototype, constantsPropertyDescriptors)\n\nObject.defineProperties(EventSource.prototype, {\n  close: kEnumerableProperty,\n  onerror: kEnumerableProperty,\n  onmessage: kEnumerableProperty,\n  onopen: kEnumerableProperty,\n  readyState: kEnumerableProperty,\n  url: kEnumerableProperty,\n  withCredentials: kEnumerableProperty\n})\n\nwebidl.converters.EventSourceInitDict = webidl.dictionaryConverter([\n  {\n    key: 'withCredentials',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'dispatcher', // undici only\n    converter: webidl.converters.any\n  },\n  {\n    key: 'node', // undici only\n    converter: webidl.dictionaryConverter([\n      {\n        key: 'reconnectionTime',\n        converter: webidl.converters['unsigned long'],\n        defaultValue: () => defaultReconnectionTime\n      },\n      {\n        key: 'dispatcher',\n        converter: webidl.converters.any\n      }\n    ]),\n    defaultValue: () => ({})\n  }\n])\n\nmodule.exports = {\n  EventSource,\n  defaultReconnectionTime\n}\n", "'use strict'\n\nconst Client = require('./lib/dispatcher/client')\nconst Dispatcher = require('./lib/dispatcher/dispatcher')\nconst Pool = require('./lib/dispatcher/pool')\nconst BalancedPool = require('./lib/dispatcher/balanced-pool')\nconst RoundRobinPool = require('./lib/dispatcher/round-robin-pool')\nconst Agent = require('./lib/dispatcher/agent')\nconst Dispatcher1Wrapper = require('./lib/dispatcher/dispatcher1-wrapper')\nconst ProxyAgent = require('./lib/dispatcher/proxy-agent')\nconst Socks5ProxyAgent = require('./lib/dispatcher/socks5-proxy-agent')\nconst EnvHttpProxyAgent = require('./lib/dispatcher/env-http-proxy-agent')\nconst RetryAgent = require('./lib/dispatcher/retry-agent')\nconst H2CClient = require('./lib/dispatcher/h2c-client')\nconst errors = require('./lib/core/errors')\nconst util = require('./lib/core/util')\nconst { InvalidArgumentError } = errors\nconst api = require('./lib/api')\nconst buildConnector = require('./lib/core/connect')\nconst MockClient = require('./lib/mock/mock-client')\nconst { MockCallHistory, MockCallHistoryLog } = require('./lib/mock/mock-call-history')\nconst MockAgent = require('./lib/mock/mock-agent')\nconst MockPool = require('./lib/mock/mock-pool')\nconst SnapshotAgent = require('./lib/mock/snapshot-agent')\nconst mockErrors = require('./lib/mock/mock-errors')\nconst RetryHandler = require('./lib/handler/retry-handler')\nconst { getGlobalDispatcher, setGlobalDispatcher } = require('./lib/global')\nconst DecoratorHandler = require('./lib/handler/decorator-handler')\nconst RedirectHandler = require('./lib/handler/redirect-handler')\n\nObject.assign(Dispatcher.prototype, api)\n\nmodule.exports.Dispatcher = Dispatcher\nmodule.exports.Client = Client\nmodule.exports.Pool = Pool\nmodule.exports.BalancedPool = BalancedPool\nmodule.exports.RoundRobinPool = RoundRobinPool\nmodule.exports.Agent = Agent\nmodule.exports.Dispatcher1Wrapper = Dispatcher1Wrapper\nmodule.exports.ProxyAgent = ProxyAgent\nmodule.exports.Socks5ProxyAgent = Socks5ProxyAgent\nmodule.exports.EnvHttpProxyAgent = EnvHttpProxyAgent\nmodule.exports.RetryAgent = RetryAgent\nmodule.exports.H2CClient = H2CClient\nmodule.exports.RetryHandler = RetryHandler\n\nmodule.exports.DecoratorHandler = DecoratorHandler\nmodule.exports.RedirectHandler = RedirectHandler\nmodule.exports.interceptors = {\n  redirect: require('./lib/interceptor/redirect'),\n  responseError: require('./lib/interceptor/response-error'),\n  retry: require('./lib/interceptor/retry'),\n  dump: require('./lib/interceptor/dump'),\n  dns: require('./lib/interceptor/dns'),\n  cache: require('./lib/interceptor/cache'),\n  decompress: require('./lib/interceptor/decompress'),\n  deduplicate: require('./lib/interceptor/deduplicate')\n}\n\nmodule.exports.cacheStores = {\n  MemoryCacheStore: require('./lib/cache/memory-cache-store')\n}\n\nconst SqliteCacheStore = require('./lib/cache/sqlite-cache-store')\nmodule.exports.cacheStores.SqliteCacheStore = SqliteCacheStore\n\nmodule.exports.buildConnector = buildConnector\nmodule.exports.errors = errors\nmodule.exports.util = {\n  parseHeaders: util.parseHeaders,\n  headerNameToString: util.headerNameToString\n}\n\nfunction makeDispatcher (fn) {\n  return (url, opts, handler) => {\n    if (typeof opts === 'function') {\n      handler = opts\n      opts = null\n    }\n\n    if (!url || (typeof url !== 'string' && typeof url !== 'object' && !(url instanceof URL))) {\n      throw new InvalidArgumentError('invalid url')\n    }\n\n    if (opts != null && typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (opts && opts.path != null) {\n      if (typeof opts.path !== 'string') {\n        throw new InvalidArgumentError('invalid opts.path')\n      }\n\n      let path = opts.path\n      if (!opts.path.startsWith('/')) {\n        path = `/${path}`\n      }\n\n      url = new URL(util.parseOrigin(url).origin + path)\n    } else {\n      if (!opts) {\n        opts = typeof url === 'object' ? url : {}\n      }\n\n      url = util.parseURL(url)\n    }\n\n    const { agent, dispatcher = getGlobalDispatcher(), ...restOpts } = opts\n\n    if (agent) {\n      throw new InvalidArgumentError('unsupported opts.agent. Did you mean opts.client?')\n    }\n\n    return fn.call(dispatcher, {\n      ...restOpts,\n      origin: url.origin,\n      path: url.search ? `${url.pathname}${url.search}` : url.pathname,\n      method: opts.method || (opts.body ? 'PUT' : 'GET')\n    }, handler)\n  }\n}\n\nmodule.exports.setGlobalDispatcher = setGlobalDispatcher\nmodule.exports.getGlobalDispatcher = getGlobalDispatcher\n\nconst fetchImpl = require('./lib/web/fetch').fetch\n\n// Capture __filename at module load time for stack trace augmentation.\n// This may be undefined when bundled in environments like Node.js internals.\nconst currentFilename = typeof __filename !== 'undefined' ? __filename : undefined\n\nfunction appendFetchStackTrace (err, filename) {\n  if (!err || typeof err !== 'object') {\n    return\n  }\n\n  const stack = typeof err.stack === 'string' ? err.stack : ''\n  const normalizedFilename = filename.replace(/\\\\/g, '/')\n\n  if (stack && (stack.includes(filename) || stack.includes(normalizedFilename))) {\n    return\n  }\n\n  const capture = {}\n  Error.captureStackTrace(capture, appendFetchStackTrace)\n\n  if (!capture.stack) {\n    return\n  }\n\n  const captureLines = capture.stack.split('\\n').slice(1).join('\\n')\n\n  err.stack = stack ? `${stack}\\n${captureLines}` : capture.stack\n}\n\nmodule.exports.fetch = function fetch (init, options = undefined) {\n  return fetchImpl(init, options).catch(err => {\n    if (currentFilename) {\n      appendFetchStackTrace(err, currentFilename)\n    } else if (err && typeof err === 'object') {\n      Error.captureStackTrace(err, module.exports.fetch)\n    }\n    throw err\n  })\n}\nmodule.exports.Headers = require('./lib/web/fetch/headers').Headers\nmodule.exports.Response = require('./lib/web/fetch/response').Response\nmodule.exports.Request = require('./lib/web/fetch/request').Request\nmodule.exports.FormData = require('./lib/web/fetch/formdata').FormData\n\nconst { setGlobalOrigin, getGlobalOrigin } = require('./lib/web/fetch/global')\n\nmodule.exports.setGlobalOrigin = setGlobalOrigin\nmodule.exports.getGlobalOrigin = getGlobalOrigin\n\nconst { CacheStorage } = require('./lib/web/cache/cachestorage')\nconst { kConstruct } = require('./lib/core/symbols')\n\nmodule.exports.caches = new CacheStorage(kConstruct)\n\nconst { deleteCookie, getCookies, getSetCookies, setCookie, parseCookie } = require('./lib/web/cookies')\n\nmodule.exports.deleteCookie = deleteCookie\nmodule.exports.getCookies = getCookies\nmodule.exports.getSetCookies = getSetCookies\nmodule.exports.setCookie = setCookie\nmodule.exports.parseCookie = parseCookie\n\nconst { parseMIMEType, serializeAMimeType } = require('./lib/web/fetch/data-url')\n\nmodule.exports.parseMIMEType = parseMIMEType\nmodule.exports.serializeAMimeType = serializeAMimeType\n\nconst { CloseEvent, ErrorEvent, MessageEvent } = require('./lib/web/websocket/events')\nconst { WebSocket, ping } = require('./lib/web/websocket/websocket')\nmodule.exports.WebSocket = WebSocket\nmodule.exports.CloseEvent = CloseEvent\nmodule.exports.ErrorEvent = ErrorEvent\nmodule.exports.MessageEvent = MessageEvent\nmodule.exports.ping = ping\n\nmodule.exports.WebSocketStream = require('./lib/web/websocket/stream/websocketstream').WebSocketStream\nmodule.exports.WebSocketError = require('./lib/web/websocket/stream/websocketerror').WebSocketError\n\nmodule.exports.request = makeDispatcher(api.request)\nmodule.exports.stream = makeDispatcher(api.stream)\nmodule.exports.pipeline = makeDispatcher(api.pipeline)\nmodule.exports.connect = makeDispatcher(api.connect)\nmodule.exports.upgrade = makeDispatcher(api.upgrade)\n\nmodule.exports.MockClient = MockClient\nmodule.exports.MockCallHistory = MockCallHistory\nmodule.exports.MockCallHistoryLog = MockCallHistoryLog\nmodule.exports.MockPool = MockPool\nmodule.exports.MockAgent = MockAgent\nmodule.exports.SnapshotAgent = SnapshotAgent\nmodule.exports.mockErrors = mockErrors\n\nconst { EventSource } = require('./lib/web/eventsource/eventsource')\n\nmodule.exports.EventSource = EventSource\n\nfunction install () {\n  globalThis.fetch = module.exports.fetch\n  globalThis.Headers = module.exports.Headers\n  globalThis.Response = module.exports.Response\n  globalThis.Request = module.exports.Request\n  globalThis.FormData = module.exports.FormData\n  globalThis.WebSocket = module.exports.WebSocket\n  globalThis.CloseEvent = module.exports.CloseEvent\n  globalThis.ErrorEvent = module.exports.ErrorEvent\n  globalThis.MessageEvent = module.exports.MessageEvent\n  globalThis.EventSource = module.exports.EventSource\n}\n\nmodule.exports.install = install\n", "/*\n (c) 2011-2015, Vladimir Agafonkin\n SunCalc is a JavaScript library for calculating sun/moon position and light phases.\n https://github.com/mourner/suncalc\n*/\n\n(function () { 'use strict';\n\n// shortcuts for easier to read formulas\n\nvar PI   = Math.PI,\n    sin  = Math.sin,\n    cos  = Math.cos,\n    tan  = Math.tan,\n    asin = Math.asin,\n    atan = Math.atan2,\n    acos = Math.acos,\n    rad  = PI / 180;\n\n// sun calculations are based on http://aa.quae.nl/en/reken/zonpositie.html formulas\n\n\n// date/time constants and conversions\n\nvar dayMs = 1000 * 60 * 60 * 24,\n    J1970 = 2440588,\n    J2000 = 2451545;\n\nfunction toJulian(date) { return date.valueOf() / dayMs - 0.5 + J1970; }\nfunction fromJulian(j)  { return new Date((j + 0.5 - J1970) * dayMs); }\nfunction toDays(date)   { return toJulian(date) - J2000; }\n\n\n// general calculations for position\n\nvar e = rad * 23.4397; // obliquity of the Earth\n\nfunction rightAscension(l, b) { return atan(sin(l) * cos(e) - tan(b) * sin(e), cos(l)); }\nfunction declination(l, b)    { return asin(sin(b) * cos(e) + cos(b) * sin(e) * sin(l)); }\n\nfunction azimuth(H, phi, dec)  { return atan(sin(H), cos(H) * sin(phi) - tan(dec) * cos(phi)); }\nfunction altitude(H, phi, dec) { return asin(sin(phi) * sin(dec) + cos(phi) * cos(dec) * cos(H)); }\n\nfunction siderealTime(d, lw) { return rad * (280.16 + 360.9856235 * d) - lw; }\n\nfunction astroRefraction(h) {\n    if (h < 0) // the following formula works for positive altitudes only.\n        h = 0; // if h = -0.08901179 a div/0 would occur.\n\n    // formula 16.4 of \"Astronomical Algorithms\" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998.\n    // 1.02 / tan(h + 10.26 / (h + 5.10)) h in degrees, result in arc minutes -> converted to rad:\n    return 0.0002967 / Math.tan(h + 0.00312536 / (h + 0.08901179));\n}\n\n// general sun calculations\n\nfunction solarMeanAnomaly(d) { return rad * (357.5291 + 0.98560028 * d); }\n\nfunction eclipticLongitude(M) {\n\n    var C = rad * (1.9148 * sin(M) + 0.02 * sin(2 * M) + 0.0003 * sin(3 * M)), // equation of center\n        P = rad * 102.9372; // perihelion of the Earth\n\n    return M + C + P + PI;\n}\n\nfunction sunCoords(d) {\n\n    var M = solarMeanAnomaly(d),\n        L = eclipticLongitude(M);\n\n    return {\n        dec: declination(L, 0),\n        ra: rightAscension(L, 0)\n    };\n}\n\n\nvar SunCalc = {};\n\n\n// calculates sun position for a given date and latitude/longitude\n\nSunCalc.getPosition = function (date, lat, lng) {\n\n    var lw  = rad * -lng,\n        phi = rad * lat,\n        d   = toDays(date),\n\n        c  = sunCoords(d),\n        H  = siderealTime(d, lw) - c.ra;\n\n    return {\n        azimuth: azimuth(H, phi, c.dec),\n        altitude: altitude(H, phi, c.dec)\n    };\n};\n\n\n// sun times configuration (angle, morning name, evening name)\n\nvar times = SunCalc.times = [\n    [-0.833, 'sunrise',       'sunset'      ],\n    [  -0.3, 'sunriseEnd',    'sunsetStart' ],\n    [    -6, 'dawn',          'dusk'        ],\n    [   -12, 'nauticalDawn',  'nauticalDusk'],\n    [   -18, 'nightEnd',      'night'       ],\n    [     6, 'goldenHourEnd', 'goldenHour'  ]\n];\n\n// adds a custom time to the times config\n\nSunCalc.addTime = function (angle, riseName, setName) {\n    times.push([angle, riseName, setName]);\n};\n\n\n// calculations for sun times\n\nvar J0 = 0.0009;\n\nfunction julianCycle(d, lw) { return Math.round(d - J0 - lw / (2 * PI)); }\n\nfunction approxTransit(Ht, lw, n) { return J0 + (Ht + lw) / (2 * PI) + n; }\nfunction solarTransitJ(ds, M, L)  { return J2000 + ds + 0.0053 * sin(M) - 0.0069 * sin(2 * L); }\n\nfunction hourAngle(h, phi, d) { return acos((sin(h) - sin(phi) * sin(d)) / (cos(phi) * cos(d))); }\nfunction observerAngle(height) { return -2.076 * Math.sqrt(height) / 60; }\n\n// returns set time for the given sun altitude\nfunction getSetJ(h, lw, phi, dec, n, M, L) {\n\n    var w = hourAngle(h, phi, dec),\n        a = approxTransit(w, lw, n);\n    return solarTransitJ(a, M, L);\n}\n\n\n// calculates sun times for a given date, latitude/longitude, and, optionally,\n// the observer height (in meters) relative to the horizon\n\nSunCalc.getTimes = function (date, lat, lng, height) {\n\n    height = height || 0;\n\n    var lw = rad * -lng,\n        phi = rad * lat,\n\n        dh = observerAngle(height),\n\n        d = toDays(date),\n        n = julianCycle(d, lw),\n        ds = approxTransit(0, lw, n),\n\n        M = solarMeanAnomaly(ds),\n        L = eclipticLongitude(M),\n        dec = declination(L, 0),\n\n        Jnoon = solarTransitJ(ds, M, L),\n\n        i, len, time, h0, Jset, Jrise;\n\n\n    var result = {\n        solarNoon: fromJulian(Jnoon),\n        nadir: fromJulian(Jnoon - 0.5)\n    };\n\n    for (i = 0, len = times.length; i < len; i += 1) {\n        time = times[i];\n        h0 = (time[0] + dh) * rad;\n\n        Jset = getSetJ(h0, lw, phi, dec, n, M, L);\n        Jrise = Jnoon - (Jset - Jnoon);\n\n        result[time[1]] = fromJulian(Jrise);\n        result[time[2]] = fromJulian(Jset);\n    }\n\n    return result;\n};\n\n\n// moon calculations, based on http://aa.quae.nl/en/reken/hemelpositie.html formulas\n\nfunction moonCoords(d) { // geocentric ecliptic coordinates of the moon\n\n    var L = rad * (218.316 + 13.176396 * d), // ecliptic longitude\n        M = rad * (134.963 + 13.064993 * d), // mean anomaly\n        F = rad * (93.272 + 13.229350 * d),  // mean distance\n\n        l  = L + rad * 6.289 * sin(M), // longitude\n        b  = rad * 5.128 * sin(F),     // latitude\n        dt = 385001 - 20905 * cos(M);  // distance to the moon in km\n\n    return {\n        ra: rightAscension(l, b),\n        dec: declination(l, b),\n        dist: dt\n    };\n}\n\nSunCalc.getMoonPosition = function (date, lat, lng) {\n\n    var lw  = rad * -lng,\n        phi = rad * lat,\n        d   = toDays(date),\n\n        c = moonCoords(d),\n        H = siderealTime(d, lw) - c.ra,\n        h = altitude(H, phi, c.dec),\n        // formula 14.1 of \"Astronomical Algorithms\" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998.\n        pa = atan(sin(H), tan(phi) * cos(c.dec) - sin(c.dec) * cos(H));\n\n    h = h + astroRefraction(h); // altitude correction for refraction\n\n    return {\n        azimuth: azimuth(H, phi, c.dec),\n        altitude: h,\n        distance: c.dist,\n        parallacticAngle: pa\n    };\n};\n\n\n// calculations for illumination parameters of the moon,\n// based on http://idlastro.gsfc.nasa.gov/ftp/pro/astro/mphase.pro formulas and\n// Chapter 48 of \"Astronomical Algorithms\" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998.\n\nSunCalc.getMoonIllumination = function (date) {\n\n    var d = toDays(date || new Date()),\n        s = sunCoords(d),\n        m = moonCoords(d),\n\n        sdist = 149598000, // distance from Earth to Sun in km\n\n        phi = acos(sin(s.dec) * sin(m.dec) + cos(s.dec) * cos(m.dec) * cos(s.ra - m.ra)),\n        inc = atan(sdist * sin(phi), m.dist - sdist * cos(phi)),\n        angle = atan(cos(s.dec) * sin(s.ra - m.ra), sin(s.dec) * cos(m.dec) -\n                cos(s.dec) * sin(m.dec) * cos(s.ra - m.ra));\n\n    return {\n        fraction: (1 + cos(inc)) / 2,\n        phase: 0.5 + 0.5 * inc * (angle < 0 ? -1 : 1) / Math.PI,\n        angle: angle\n    };\n};\n\n\nfunction hoursLater(date, h) {\n    return new Date(date.valueOf() + h * dayMs / 24);\n}\n\n// calculations for moon rise/set times are based on http://www.stargazing.net/kepler/moonrise.html article\n\nSunCalc.getMoonTimes = function (date, lat, lng, inUTC) {\n    var t = new Date(date);\n    if (inUTC) t.setUTCHours(0, 0, 0, 0);\n    else t.setHours(0, 0, 0, 0);\n\n    var hc = 0.133 * rad,\n        h0 = SunCalc.getMoonPosition(t, lat, lng).altitude - hc,\n        h1, h2, rise, set, a, b, xe, ye, d, roots, x1, x2, dx;\n\n    // go in 2-hour chunks, each time seeing if a 3-point quadratic curve crosses zero (which means rise or set)\n    for (var i = 1; i <= 24; i += 2) {\n        h1 = SunCalc.getMoonPosition(hoursLater(t, i), lat, lng).altitude - hc;\n        h2 = SunCalc.getMoonPosition(hoursLater(t, i + 1), lat, lng).altitude - hc;\n\n        a = (h0 + h2) / 2 - h1;\n        b = (h2 - h0) / 2;\n        xe = -b / (2 * a);\n        ye = (a * xe + b) * xe + h1;\n        d = b * b - 4 * a * h1;\n        roots = 0;\n\n        if (d >= 0) {\n            dx = Math.sqrt(d) / (Math.abs(a) * 2);\n            x1 = xe - dx;\n            x2 = xe + dx;\n            if (Math.abs(x1) <= 1) roots++;\n            if (Math.abs(x2) <= 1) roots++;\n            if (x1 < -1) x1 = x2;\n        }\n\n        if (roots === 1) {\n            if (h0 < 0) rise = i + x1;\n            else set = i + x1;\n\n        } else if (roots === 2) {\n            rise = i + (ye < 0 ? x2 : x1);\n            set = i + (ye < 0 ? x1 : x2);\n        }\n\n        if (rise && set) break;\n\n        h0 = h2;\n    }\n\n    var result = {};\n\n    if (rise) result.rise = hoursLater(t, rise);\n    if (set) result.set = hoursLater(t, set);\n\n    if (!rise && !set) result[ye > 0 ? 'alwaysUp' : 'alwaysDown'] = true;\n\n    return result;\n};\n\n\n// export as Node module / AMD module / browser variable\nif (typeof exports === 'object' && typeof module !== 'undefined') module.exports = SunCalc;\nelse if (typeof define === 'function' && define.amd) define(SunCalc);\nelse window.SunCalc = SunCalc;\n\n}());\n", "/**\n * Sustainable ingestion policy \u2014 slow, steady collection that respects platform limits.\n * Defaults are conservative; increase gradually only after observing stable runs.\n */\nimport { db, ingestionCheckpointsTable } from \"@workspace/db\";\nimport { and, eq } from \"drizzle-orm\";\n\nconst GLOBAL_PAUSE_SCOPE = \"__sustainable_pause__\";\nconst OPENROUTER_PLAN_SCOPE = \"__openrouter_plan_cycle__\";\n\nfunction readInt(name: string, fallback: number, min = 0, max = Number.MAX_SAFE_INTEGER): number {\n  const raw = parseInt(process.env[name] ?? String(fallback), 10);\n  if (!Number.isFinite(raw)) return fallback;\n  return Math.min(max, Math.max(min, raw));\n}\n\n/** Broad discovery defaults \u2014 species catalog rotates across hundreds of scopes. */\nexport const SUSTAINABLE_DEFAULTS = {\n  youtubeDailyCap: 48,\n  serpDailyCap: 16,\n  scopesPerCycle: 4,\n  serpQueriesPerCycle: 2,\n  nimbleSearchDailyCap: 24,\n  nimbleLinksPerQuery: 12,\n  nimbleHydrateMax: 6,\n  nimbleHydrateDelayMs: 1500,\n  scopeDelayMs: 5_000,\n  providerGapMs: 8_000,\n  rateLimitCooldownMs: 7_200_000, // 2 hours\n  youtubePageSize: 8,\n  serpLinksPerQuery: 3,\n  serpHydrateMax: 2,\n  serpHydrateDelayMs: 2_000,\n  instagramTagsPerCycle: 1,\n  instagramPostsPerTag: 12,\n  instagramTagDelayMs: 4_000,\n  openRouterPlanEveryCycles: 6,\n  max429Retries: 1,\n  tiktokOembedDailyCap: 8,\n  tiktokSerpDailyCap: 2,\n  tiktokHashtagsPerCycle: 1,\n  tiktokPostsPerHashtag: 6,\n  tiktokHashtagDelayMs: 5_000,\n  tiktokOembedDelayMs: 3_000,\n  tiktokSerpQueriesPerCycle: 2,\n  tiktokRelevanceBoost: 18,\n  discoveryTargetsPerCycle: 2,\n  discoveryTargetDelayMs: 6_000,\n  contentDiscoveryDailyCap: 24,\n} as const;\n\nexport function youtubeSearchDailyCapSustainable(): number {\n  return readInt(\"INGESTION_YOUTUBE_DAILY_CAP\", SUSTAINABLE_DEFAULTS.youtubeDailyCap, 1, 100);\n}\n\nexport function serpDiscoveryDailyCapSustainable(): number {\n  return readInt(\"INGESTION_SERP_DAILY_CAP\", SUSTAINABLE_DEFAULTS.serpDailyCap, 0, 50);\n}\n\nexport function scopesPerCycle(): number {\n  const deerDefault =\n    process.env.INGESTION_DEER_PRIORITY !== \"false\"\n      ? SUSTAINABLE_DEFAULTS.scopesPerCycle\n      : 2;\n  return readInt(\"INGESTION_SCOPES_PER_CYCLE\", deerDefault, 1, 8);\n}\n\nexport function serpQueriesPerCycle(): number {\n  return readInt(\"INGESTION_SERP_QUERIES_PER_CYCLE\", SUSTAINABLE_DEFAULTS.serpQueriesPerCycle, 1, 6);\n}\n\nexport function nimbleSearchDailyCap(): number {\n  return readInt(\"INGESTION_NIMBLE_SEARCH_DAILY_CAP\", SUSTAINABLE_DEFAULTS.nimbleSearchDailyCap, 0, 200);\n}\n\nexport function nimbleLinksPerQuery(): number {\n  return readInt(\"INGESTION_NIMBLE_LINKS_PER_QUERY\", SUSTAINABLE_DEFAULTS.nimbleLinksPerQuery, 3, 30);\n}\n\nexport function nimbleHydrateMax(): number {\n  return readInt(\"INGESTION_NIMBLE_HYDRATE_MAX\", SUSTAINABLE_DEFAULTS.nimbleHydrateMax, 1, 15);\n}\n\nexport function nimbleHydrateDelayMs(): number {\n  return readInt(\"INGESTION_NIMBLE_HYDRATE_DELAY_MS\", SUSTAINABLE_DEFAULTS.nimbleHydrateDelayMs, 0, 30_000);\n}\n\nexport function scopeDelayMs(): number {\n  return readInt(\"INGESTION_SCOPE_DELAY_MS\", SUSTAINABLE_DEFAULTS.scopeDelayMs, 0, 120_000);\n}\n\nexport function providerGapMs(): number {\n  return readInt(\"INGESTION_PROVIDER_GAP_MS\", SUSTAINABLE_DEFAULTS.providerGapMs, 0, 120_000);\n}\n\nexport function rateLimitCooldownMs(): number {\n  return readInt(\"INGESTION_429_COOLDOWN_MS\", SUSTAINABLE_DEFAULTS.rateLimitCooldownMs, 60_000);\n}\n\nexport function youtubePageSize(): number {\n  return readInt(\"INGESTION_YOUTUBE_PAGE_SIZE\", SUSTAINABLE_DEFAULTS.youtubePageSize, 3, 25);\n}\n\nexport function serpLinksPerQuery(): number {\n  return readInt(\"INGESTION_SERP_LINKS_PER_QUERY\", SUSTAINABLE_DEFAULTS.serpLinksPerQuery, 1, 10);\n}\n\nexport function serpHydrateMax(): number {\n  return readInt(\"INGESTION_SERP_HYDRATE_MAX\", SUSTAINABLE_DEFAULTS.serpHydrateMax, 1, 5);\n}\n\nexport function serpHydrateDelayMs(): number {\n  return readInt(\"INGESTION_SERP_HYDRATE_DELAY_MS\", SUSTAINABLE_DEFAULTS.serpHydrateDelayMs, 0, 30_000);\n}\n\nexport function instagramTagsPerCycle(): number {\n  return readInt(\"INGESTION_INSTAGRAM_TAGS_PER_CYCLE\", SUSTAINABLE_DEFAULTS.instagramTagsPerCycle, 0, 5);\n}\n\nexport function instagramPostsPerTag(): number {\n  return readInt(\"INGESTION_INSTAGRAM_POSTS_PER_TAG\", SUSTAINABLE_DEFAULTS.instagramPostsPerTag, 5, 50);\n}\n\nexport function instagramTagDelayMs(): number {\n  return readInt(\"INGESTION_INSTAGRAM_TAG_DELAY_MS\", SUSTAINABLE_DEFAULTS.instagramTagDelayMs, 0, 60_000);\n}\n\nexport function openRouterPlanEveryCycles(): number {\n  return readInt(\n    \"OPENROUTER_QUERY_PLAN_EVERY_N_CYCLES\",\n    SUSTAINABLE_DEFAULTS.openRouterPlanEveryCycles,\n    1,\n    48,\n  );\n}\n\nexport function max429Retries(): number {\n  return readInt(\"INGESTION_429_MAX_RETRIES\", SUSTAINABLE_DEFAULTS.max429Retries, 0, 3);\n}\n\nexport function tiktokOembedDailyCapSustainable(): number {\n  return readInt(\"INGESTION_TIKTOK_OEMBED_DAILY_CAP\", SUSTAINABLE_DEFAULTS.tiktokOembedDailyCap, 1, 50);\n}\n\nexport function tiktokSerpDailyCapSustainable(): number {\n  return readInt(\"INGESTION_TIKTOK_SERP_DAILY_CAP\", SUSTAINABLE_DEFAULTS.tiktokSerpDailyCap, 0, 20);\n}\n\nexport function tiktokHashtagsPerCycle(): number {\n  return readInt(\"INGESTION_TIKTOK_HASHTAGS_PER_CYCLE\", SUSTAINABLE_DEFAULTS.tiktokHashtagsPerCycle, 0, 5);\n}\n\nexport function tiktokPostsPerHashtag(): number {\n  return readInt(\"INGESTION_TIKTOK_POSTS_PER_HASHTAG\", SUSTAINABLE_DEFAULTS.tiktokPostsPerHashtag, 1, 30);\n}\n\nexport function tiktokHashtagDelayMs(): number {\n  return readInt(\"INGESTION_TIKTOK_HASHTAG_DELAY_MS\", SUSTAINABLE_DEFAULTS.tiktokHashtagDelayMs, 0, 60_000);\n}\n\nexport function tiktokOembedDelayMs(): number {\n  return readInt(\"INGESTION_TIKTOK_OEMBED_DELAY_MS\", SUSTAINABLE_DEFAULTS.tiktokOembedDelayMs, 0, 30_000);\n}\n\nexport function tiktokSerpQueriesPerCycle(): number {\n  return readInt(\n    \"INGESTION_TIKTOK_SERP_QUERIES_PER_CYCLE\",\n    SUSTAINABLE_DEFAULTS.tiktokSerpQueriesPerCycle,\n    0,\n    5,\n  );\n}\n\nexport function tiktokRelevanceBoost(): number {\n  return readInt(\"INGESTION_TIKTOK_RELEVANCE_BOOST\", SUSTAINABLE_DEFAULTS.tiktokRelevanceBoost, 0, 40);\n}\n\nexport function discoveryTargetsPerCycle(): number {\n  return readInt(\n    \"CONTENT_DISCOVERY_TARGETS_PER_CYCLE\",\n    SUSTAINABLE_DEFAULTS.discoveryTargetsPerCycle,\n    1,\n    10,\n  );\n}\n\nexport function discoveryTargetDelayMs(): number {\n  return readInt(\n    \"CONTENT_DISCOVERY_TARGET_DELAY_MS\",\n    SUSTAINABLE_DEFAULTS.discoveryTargetDelayMs,\n    0,\n    120_000,\n  );\n}\n\nexport function contentDiscoveryDailyCapSustainable(): number {\n  return readInt(\n    \"CONTENT_DISCOVERY_DAILY_CAP\",\n    SUSTAINABLE_DEFAULTS.contentDiscoveryDailyCap,\n    1,\n    200,\n  );\n}\n\nexport function isRateLimitMessage(message: string): boolean {\n  const m = message.toLowerCase();\n  return (\n    m.includes(\"(429)\") ||\n    m.includes(\"rate limit\") ||\n    m.includes(\"quota exceeded\") ||\n    m.includes(\"too many requests\") ||\n    m.includes(\"throttl\")\n  );\n}\n\nexport function sleepWithJitter(baseMs: number): Promise<void> {\n  if (baseMs <= 0) return Promise.resolve();\n  const jitter = Math.floor(baseMs * 0.2 * Math.random());\n  return new Promise((resolve) => setTimeout(resolve, baseMs + jitter));\n}\n\nexport function sustainablePolicySnapshot() {\n  return {\n    mode: \"sustainable\",\n    youtubeDailyCap: youtubeSearchDailyCapSustainable(),\n    serpDailyCap: serpDiscoveryDailyCapSustainable(),\n    scopesPerCycle: scopesPerCycle(),\n    serpQueriesPerCycle: serpQueriesPerCycle(),\n    nimbleSearchDailyCap: nimbleSearchDailyCap(),\n    scopeDelayMs: scopeDelayMs(),\n    providerGapMs: providerGapMs(),\n    rateLimitCooldownMs: rateLimitCooldownMs(),\n    youtubePageSize: youtubePageSize(),\n    instagramTagsPerCycle: instagramTagsPerCycle(),\n    instagramPostsPerTag: instagramPostsPerTag(),\n    openRouterPlanEveryCycles: openRouterPlanEveryCycles(),\n    tiktokOembedDailyCap: tiktokOembedDailyCapSustainable(),\n    tiktokHashtagsPerCycle: tiktokHashtagsPerCycle(),\n    contentDiscoveryDailyCap: contentDiscoveryDailyCapSustainable(),\n    discoveryTargetsPerCycle: discoveryTargetsPerCycle(),\n  };\n}\n\nasync function getCheckpoint(provider: string, scopeKey: string) {\n  const rows = await db\n    .select()\n    .from(ingestionCheckpointsTable)\n    .where(\n      and(\n        eq(ingestionCheckpointsTable.provider, provider),\n        eq(ingestionCheckpointsTable.scopeKey, scopeKey),\n      ),\n    )\n    .limit(1);\n  return rows[0] ?? null;\n}\n\n/** Pause all YouTube fetches after any rate-limit signal \u2014 avoids hammering scopes. */\nexport async function getYouTubeGlobalPause(): Promise<{ paused: boolean; reason?: string; until?: string }> {\n  const row = await getCheckpoint(\"youtube\", GLOBAL_PAUSE_SCOPE);\n  if (!row?.lastError || !row.updatedAt) return { paused: false };\n\n  const elapsed = Date.now() - row.updatedAt.getTime();\n  if (elapsed >= rateLimitCooldownMs()) {\n    return { paused: false };\n  }\n\n  const until = new Date(row.updatedAt.getTime() + rateLimitCooldownMs()).toISOString();\n  return { paused: true, reason: row.lastError, until };\n}\n\nexport async function markYouTubeGlobalPause(reason: string): Promise<void> {\n  const now = new Date();\n  await db\n    .insert(ingestionCheckpointsTable)\n    .values({\n      provider: \"youtube\",\n      scopeKey: GLOBAL_PAUSE_SCOPE,\n      cursorToken: null,\n      lastError: reason.slice(0, 500),\n      updatedAt: now,\n    })\n    .onConflictDoUpdate({\n      target: [ingestionCheckpointsTable.provider, ingestionCheckpointsTable.scopeKey],\n      set: { lastError: reason.slice(0, 500), updatedAt: now },\n    });\n}\n\nexport async function clearYouTubeGlobalPause(): Promise<void> {\n  await db\n    .update(ingestionCheckpointsTable)\n    .set({ lastError: null, lastSuccessAt: new Date(), updatedAt: new Date() })\n    .where(\n      and(\n        eq(ingestionCheckpointsTable.provider, \"youtube\"),\n        eq(ingestionCheckpointsTable.scopeKey, GLOBAL_PAUSE_SCOPE),\n      ),\n    );\n}\n\nexport async function getTikTokGlobalPause(): Promise<{ paused: boolean; reason?: string; until?: string }> {\n  const row = await getCheckpoint(\"tiktok\", GLOBAL_PAUSE_SCOPE);\n  if (!row?.lastError || !row.updatedAt) return { paused: false };\n\n  const elapsed = Date.now() - row.updatedAt.getTime();\n  if (elapsed >= rateLimitCooldownMs()) {\n    return { paused: false };\n  }\n\n  const until = new Date(row.updatedAt.getTime() + rateLimitCooldownMs()).toISOString();\n  return { paused: true, reason: row.lastError, until };\n}\n\nexport async function markTikTokGlobalPause(reason: string): Promise<void> {\n  const now = new Date();\n  await db\n    .insert(ingestionCheckpointsTable)\n    .values({\n      provider: \"tiktok\",\n      scopeKey: GLOBAL_PAUSE_SCOPE,\n      cursorToken: null,\n      lastError: reason.slice(0, 500),\n      updatedAt: now,\n    })\n    .onConflictDoUpdate({\n      target: [ingestionCheckpointsTable.provider, ingestionCheckpointsTable.scopeKey],\n      set: { lastError: reason.slice(0, 500), updatedAt: now },\n    });\n}\n\nexport async function clearTikTokGlobalPause(): Promise<void> {\n  await db\n    .update(ingestionCheckpointsTable)\n    .set({ lastError: null, lastSuccessAt: new Date(), updatedAt: new Date() })\n    .where(\n      and(\n        eq(ingestionCheckpointsTable.provider, \"tiktok\"),\n        eq(ingestionCheckpointsTable.scopeKey, GLOBAL_PAUSE_SCOPE),\n      ),\n    );\n}\n\n/** OpenRouter query planning runs every N cycles \u2014 not every hour. */\nexport async function shouldRunOpenRouterPlanning(): Promise<boolean> {\n  if (process.env.OPENROUTER_QUERY_PLANNING === \"false\") return false;\n\n  const every = openRouterPlanEveryCycles();\n  if (every <= 1) return true;\n\n  const row = await getCheckpoint(\"openrouter\", OPENROUTER_PLAN_SCOPE);\n  const lastCount = row?.cursorToken ? parseInt(row.cursorToken, 10) : 0;\n  const nextCount = (Number.isFinite(lastCount) ? lastCount : 0) + 1;\n\n  await db\n    .insert(ingestionCheckpointsTable)\n    .values({\n      provider: \"openrouter\",\n      scopeKey: OPENROUTER_PLAN_SCOPE,\n      cursorToken: String(nextCount),\n      updatedAt: new Date(),\n    })\n    .onConflictDoUpdate({\n      target: [ingestionCheckpointsTable.provider, ingestionCheckpointsTable.scopeKey],\n      set: { cursorToken: String(nextCount), updatedAt: new Date() },\n    });\n\n  return nextCount % every === 0;\n}\n", "import { db, quotaCountersTable } from \"@workspace/db\";\nimport { sql } from \"drizzle-orm\";\nimport {\n  serpDiscoveryDailyCapSustainable,\n  tiktokOembedDailyCapSustainable,\n  tiktokSerpDailyCapSustainable,\n  youtubeSearchDailyCapSustainable,\n  contentDiscoveryDailyCapSustainable,\n} from \"./sustainableIngestion.js\";\n\nfunction todayUtc(): string {\n  return new Date().toISOString().slice(0, 10);\n}\n\nexport type QuotaConsumeResult = { allowed: boolean; used: number; cap: number };\n\n/** Atomic daily quota bucket per provider counter name. */\nexport async function consumeDailyQuota(\n  counterName: string,\n  cap: number,\n  units = 1,\n): Promise<QuotaConsumeResult> {\n  const today = todayUtc();\n  try {\n    const result = await db\n      .insert(quotaCountersTable)\n      .values({ name: counterName, dateUtc: today, count: units })\n      .onConflictDoUpdate({\n        target: quotaCountersTable.name,\n        set: {\n          dateUtc: today,\n          count: sql`CASE WHEN ${quotaCountersTable.dateUtc} = ${today} THEN ${quotaCountersTable.count} + ${units} ELSE ${units} END`,\n        },\n      })\n      .returning({ count: quotaCountersTable.count, dateUtc: quotaCountersTable.dateUtc });\n\n    const row = result[0];\n    const used = row?.dateUtc === today ? (row.count ?? units) : units;\n    return { allowed: used <= cap, used, cap };\n  } catch {\n    return { allowed: true, used: 0, cap };\n  }\n}\n\nexport async function getDailyQuotaUsage(counterName: string): Promise<number> {\n  const today = todayUtc();\n  try {\n    const rows = await db\n      .select({ count: quotaCountersTable.count, dateUtc: quotaCountersTable.dateUtc })\n      .from(quotaCountersTable)\n      .where(sql`${quotaCountersTable.name} = ${counterName}`)\n      .limit(1);\n    const row = rows[0];\n    if (!row || row.dateUtc !== today) return 0;\n    return row.count ?? 0;\n  } catch {\n    return 0;\n  }\n}\n\nexport function youtubeSearchDailyCap(): number {\n  return youtubeSearchDailyCapSustainable();\n}\n\nexport function serpDiscoveryDailyCap(): number {\n  return serpDiscoveryDailyCapSustainable();\n}\n\nexport function tiktokOembedDailyCap(): number {\n  return tiktokOembedDailyCapSustainable();\n}\n\nexport function tiktokSerpDailyCap(): number {\n  return tiktokSerpDailyCapSustainable();\n}\n\nexport function contentDiscoveryDailyCap(): number {\n  return contentDiscoveryDailyCapSustainable();\n}\n", "export type IngestionProvider = \"youtube\" | \"instagram\" | \"google_serp\" | \"tiktok\";\n\nexport type DiscoveryScope = {\n  scopeKey: string;\n  query: string;\n  category: \"hooks\" | \"shots\" | \"both\";\n  relevanceBoost?: number;\n  /**\n   * YouTube Data API videoDuration=short (<4 min) \u2014 includes Shorts and vertical clips.\n   * Defaults true for all discovery scopes (Shorts-first platform).\n   */\n  preferShortForm?: boolean;\n  /** YouTube search sort \u2014 default viewCount for discovery breadth. */\n  searchOrder?: \"relevance\" | \"viewCount\" | \"date\";\n};\n\n/** Legacy supplemental scopes \u2014 deer-first; species catalog in speciesDiscoveryQueries. */\nexport const YOUTUBE_DISCOVERY_SCOPES: DiscoveryScope[] = [\n  { scopeKey: \"hunting_deer_doc\", query: \"white-tailed deer hunting harvest cinematic #shorts\", category: \"shots\", relevanceBoost: 6, searchOrder: \"relevance\" },\n  { scopeKey: \"hunting_whitetail_buck\", query: \"whitetail buck deer hunt rut tree stand harvest shorts\", category: \"shots\", relevanceBoost: 6 },\n  { scopeKey: \"hunting_deer_guided\", query: \"guided whitetail deer hunt outfitter buck harvest shorts\", category: \"shots\", relevanceBoost: 5 },\n  { scopeKey: \"hunting_deer_cabin\", query: \"deer hunting cabin camp whitetail hunt footage shorts\", category: \"shots\", relevanceBoost: 5 },\n  { scopeKey: \"bowhunting_deer\", query: \"bowhunting whitetail deer buck harvest field #shorts\", category: \"shots\", relevanceBoost: 5 },\n  { scopeKey: \"rifle_deer_hunt\", query: \"rifle deer hunt whitetail buck harvest public land shorts\", category: \"shots\", relevanceBoost: 5 },\n  { scopeKey: \"hunting_big_game\", query: \"elk moose bear big game hunting adventure harvest shorts\", category: \"shots\", relevanceBoost: 4 },\n  { scopeKey: \"antelope_pronghorn\", query: \"pronghorn antelope hunting spot stalk harvest shorts\", category: \"shots\", relevanceBoost: 3 },\n  { scopeKey: \"deer_ground_blind_legacy\", query: \"ground blind whitetail deer hunt buck harvest shorts\", category: \"shots\", relevanceBoost: 5 },\n  { scopeKey: \"deer_compilation\", query: \"whitetail deer hunt compilation bucks harvest shorts\", category: \"shots\", relevanceBoost: 5 },\n];\n\nexport const GOOGLE_SERP_DISCOVERY_QUERIES = [\n  \"site:youtube.com/shorts white-tailed deer hunting harvest\",\n  \"site:youtube.com/shorts whitetail buck deer hunt rut\",\n  \"site:youtube.com/shorts guided deer hunt outfitter whitetail\",\n  \"site:youtube.com/shorts bowhunting whitetail deer harvest\",\n  \"site:youtube.com/shorts tree stand deer hunt buck harvest\",\n  \"site:youtube.com/shorts elk moose big game hunting\",\n  \"site:youtube.com/shorts pronghorn antelope hunting harvest\",\n  \"site:youtube.com/shorts deer hunting cabin camp hunt\",\n  \"site:youtube.com/shorts bass fishing catch tournament\",\n  \"site:youtube.com/shorts fly fishing trout catch\",\n  \"site:youtube.com/shorts duck hunting waterfowl decoy\",\n  \"site:youtube.com/shorts offshore fishing tuna marlin\",\n];\n\nexport const GOOGLE_SERP_TIKTOK_DISCOVERY_QUERIES = [\n  \"tiktok bowhunting harvest video\",\n  \"tiktok deer hunting harvest video\",\n  \"tiktok bass fishing catch video\",\n  \"tiktok fly fishing trout video\",\n  \"tiktok duck hunting waterfowl video\",\n  \"tiktok offshore fishing tuna video\",\n  \"tiktok whitetail hunting video\",\n  \"tiktok kayak fishing catch video\",\n];\n\nexport const TIKTOK_DEFAULT_HASHTAGS = [\n  \"bowhunting\",\n  \"bassfishing\",\n  \"deerhunting\",\n  \"flyfishing\",\n  \"waterfowl\",\n  \"hunting\",\n  \"fishing\",\n  \"whitetail\",\n];\n\nexport const INSTAGRAM_DEFAULT_HASHTAGS = [\n  \"bowhunting\",\n  \"bassfishing\",\n  \"whitetail\",\n  \"flyfishing\",\n  \"waterfowl\",\n  \"offshorefishing\",\n  \"deerhunting\",\n  \"turkeyhunting\",\n];\n\nexport function ingestionActorUserId(): string {\n  return process.env.INGESTION_ACTOR_USER_ID?.trim() || \"system:ingestion-agent\";\n}\n\nexport function publishedAfterIso(): string {\n  const years = parseInt(process.env.INGESTION_MAX_AGE_YEARS ?? \"10\", 10);\n  const d = new Date();\n  d.setFullYear(d.getFullYear() - (Number.isFinite(years) ? years : 10));\n  return d.toISOString();\n}\n\nexport type CatalogVideoCandidate = {\n  sourcePlatform: \"youtube\" | \"instagram\" | \"facebook\" | \"vimeo\" | \"tiktok\";\n  sourceVideoId: string;\n  title: string;\n  description: string;\n  videoUrl: string;\n  embedUrl: string;\n  thumbnailUrl: string | null;\n  creator: string;\n  creatorHandle: string;\n  channelId?: string;\n  publishedAt: Date | null;\n  tags: string[];\n  category: \"hooks\" | \"shots\" | \"both\";\n  viewCount: number | null;\n  externalLikeCount: number | null;\n  relevanceScore: number;\n  ingestionSource: string;\n  rightsMetadata: Record<string, unknown>;\n  species?: string | null;\n  locationState?: string | null;\n  weightSize?: string | null;\n};\n\nexport type IngestionCycleStats = {\n  provider: IngestionProvider;\n  discovered: number;\n  eligible: number;\n  inserted: number;\n  skippedDuplicate: number;\n  rejected: number;\n  errors: number;\n  quotaUsed: number;\n  details: Record<string, unknown>;\n};\n", "/**\n * Discovery query formatting \u2014 applied at search time (YouTube API + web/SERP).\n *\n * Shorts and vertical short-form are intentionally included (never excluded here).\n * Only low-value noise terms are negated.\n */\nexport const DISCOVERY_QUERY_EXCLUSIONS = [\"duck call\", \"kids\", \"reaction\"] as const;\n\nfunction exclusionAlreadyPresent(query: string, term: string): boolean {\n  const lower = query.toLowerCase();\n  const quoted = `-\"${term.toLowerCase()}\"`;\n  const bare = `-${term.toLowerCase()}`;\n  return lower.includes(quoted) || lower.includes(bare);\n}\n\n/** Append required negative terms for YouTube Data API and Google web search. */\nexport function formatDiscoveryQuery(rawQuery: string): string {\n  const base = rawQuery.trim().replace(/\\s+/g, \" \");\n  if (!base) return base;\n\n  const parts = [base];\n  for (const term of DISCOVERY_QUERY_EXCLUSIONS) {\n    if (!exclusionAlreadyPresent(base, term)) {\n      parts.push(`-\"${term}\"`);\n    }\n  }\n  return parts.join(\" \").trim();\n}\n\n/** SERP queries use the same exclusion rules as YouTube API queries. */\nexport function formatSerpDiscoveryQuery(rawQuery: string): string {\n  return formatDiscoveryQuery(rawQuery);\n}\n", "import { extractYouTubeId } from \"../videoDuplicateGuard\";\nimport { auditIngestionContent, classifyIngestionCategory } from \"./contentGatekeeper\";\nimport { scoreRelevance, minRelevanceThresholdForScope } from \"./relevanceScorer\";\nimport { consumeDailyQuota, youtubeSearchDailyCap } from \"./quotaBudget\";\nimport type { CatalogVideoCandidate, DiscoveryScope } from \"./types\";\nimport { publishedAfterIso } from \"./types\";\nimport { runHeuristics } from \"../../routes/feed\";\nimport { inferVideoLayout } from \"@workspace/video-layout\";\nimport { isDeerDiscoveryScope, isDeerHuntingContent } from \"./deerContentPriority\";\nimport { formatDiscoveryQuery } from \"./discoveryQuery.js\";\nimport { max429Retries, youtubePageSize } from \"./sustainableIngestion.js\";\n\nconst YT_API_BASE = \"https://www.googleapis.com/youtube/v3\";\n\ntype RawYtItem = {\n  videoId: string;\n  title: string;\n  description: string;\n  channelTitle: string;\n  channelId: string;\n  thumbnail: string;\n  publishedAt: string;\n  tags: string[];\n  categoryId?: string;\n  viewCount: number;\n  likeCount: number;\n  durationSeconds?: number;\n};\n\nfunction parseIso8601Duration(raw: string | undefined): number | null {\n  if (!raw) return null;\n  const m = raw.match(/PT(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+)S)?/);\n  if (!m) return null;\n  return Number(m[1] ?? 0) * 3600 + Number(m[2] ?? 0) * 60 + Number(m[3] ?? 0);\n}\n\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function ytFetch(url: string, attempt = 0): Promise<Response> {\n  const ctrl = new AbortController();\n  const timer = setTimeout(() => ctrl.abort(), 12_000);\n  try {\n    const res = await fetch(url, { signal: ctrl.signal });\n    if (res.status === 429 && attempt < max429Retries()) {\n      const retryAfterSec = Number(res.headers.get(\"retry-after\") || 0);\n      const delayMs = Math.min(\n        retryAfterSec > 0 ? retryAfterSec * 1000 : 8000 * (attempt + 1),\n        30_000,\n      );\n      await sleep(delayMs);\n      return ytFetch(url, attempt + 1);\n    }\n    return res;\n  } finally {\n    clearTimeout(timer);\n  }\n}\n\nexport async function hydrateVideoStats(\n  apiKey: string,\n  ids: string[],\n): Promise<Map<string, Partial<RawYtItem>>> {\n  const map = new Map<string, Partial<RawYtItem>>();\n  if (ids.length === 0) return map;\n\n  for (let i = 0; i < ids.length; i += 50) {\n    const chunk = ids.slice(i, i + 50);\n    const params = new URLSearchParams({\n      part: \"snippet,statistics,contentDetails\",\n      id: chunk.join(\",\"),\n      key: apiKey,\n    });\n    const res = await ytFetch(`${YT_API_BASE}/videos?${params}`);\n    if (!res.ok) continue;\n    const data = (await res.json()) as {\n      items?: Array<{\n        id: string;\n        snippet?: {\n          tags?: string[];\n          categoryId?: string;\n          publishedAt?: string;\n        };\n        statistics?: { viewCount?: string; likeCount?: string };\n        contentDetails?: { duration?: string };\n      }>;\n    };\n    for (const item of data.items ?? []) {\n      map.set(item.id, {\n        tags: item.snippet?.tags ?? [],\n        categoryId: item.snippet?.categoryId,\n        publishedAt: item.snippet?.publishedAt,\n        viewCount: Number(item.statistics?.viewCount ?? 0),\n        likeCount: Number(item.statistics?.likeCount ?? 0),\n        durationSeconds: parseIso8601Duration(item.contentDetails?.duration) ?? undefined,\n      });\n    }\n  }\n  return map;\n}\n\nexport type YouTubeDiscoveryPage = {\n  items: CatalogVideoCandidate[];\n  nextPageToken: string | null;\n  quotaUsed: number;\n  rejected: number;\n};\n\nexport async function discoverYouTubeScopePage(\n  scope: DiscoveryScope,\n  apiKey: string,\n  pageToken?: string | null,\n): Promise<YouTubeDiscoveryPage> {\n  const quota = await consumeDailyQuota(\"ingestion_youtube_search\", youtubeSearchDailyCap());\n  if (!quota.allowed) {\n    return { items: [], nextPageToken: pageToken ?? null, quotaUsed: 0, rejected: 0 };\n  }\n\n  const params = new URLSearchParams({\n    part: \"snippet\",\n    type: \"video\",\n    maxResults: String(youtubePageSize()),\n    order: scope.searchOrder ?? \"viewCount\",\n    q: formatDiscoveryQuery(scope.query),\n    key: apiKey,\n    safeSearch: \"moderate\",\n    videoEmbeddable: \"true\",\n    publishedAfter: publishedAfterIso(),\n  });\n  if (scope.preferShortForm !== false) {\n    params.set(\"videoDuration\", \"short\");\n  }\n  if (pageToken) params.set(\"pageToken\", pageToken);\n\n  const searchResp = await ytFetch(`${YT_API_BASE}/search?${params}`);\n  if (!searchResp.ok) {\n    throw new Error(`YouTube search failed (${searchResp.status}) for ${scope.scopeKey}`);\n  }\n\n  const searchData = (await searchResp.json()) as {\n    items?: Array<{\n      id: { videoId?: string };\n      snippet: {\n        title: string;\n        description: string;\n        channelTitle: string;\n        channelId: string;\n        publishedAt?: string;\n        tags?: string[];\n        thumbnails?: { high?: { url: string }; medium?: { url: string }; default?: { url: string } };\n      };\n    }>;\n    nextPageToken?: string;\n  };\n\n  const raw: RawYtItem[] = (searchData.items ?? [])\n    .filter((it) => it.id.videoId)\n    .map((it) => ({\n      videoId: it.id.videoId as string,\n      title: it.snippet.title,\n      description: it.snippet.description ?? \"\",\n      channelTitle: it.snippet.channelTitle,\n      channelId: it.snippet.channelId,\n      publishedAt: it.snippet.publishedAt ?? \"\",\n      tags: it.snippet.tags ?? [],\n      thumbnail:\n        it.snippet.thumbnails?.high?.url ??\n        it.snippet.thumbnails?.medium?.url ??\n        it.snippet.thumbnails?.default?.url ??\n        \"\",\n      viewCount: 0,\n      likeCount: 0,\n    }));\n\n  const stats = await hydrateVideoStats(\n    apiKey,\n    raw.map((r) => r.videoId),\n  );\n  for (const item of raw) {\n    const extra = stats.get(item.videoId);\n    if (extra) Object.assign(item, extra);\n  }\n\n  const minScore = minRelevanceThresholdForScope(scope.scopeKey);\n  const candidates: CatalogVideoCandidate[] = [];\n  let rejected = 0;\n\n  for (const item of raw) {\n    const extra = stats.get(item.videoId);\n    const durationSeconds = extra?.durationSeconds ?? item.durationSeconds;\n    const gateText = `${item.title} ${item.description} ${item.tags.join(\" \")}`;\n    const gatekeeper = auditIngestionContent(gateText, item.categoryId);\n    if (!gatekeeper.valid) {\n      rejected++;\n      continue;\n    }\n\n    if (isDeerDiscoveryScope(scope) && !isDeerHuntingContent(gateText)) {\n      rejected++;\n      continue;\n    }\n\n    const h = runHeuristics(gateText);\n\n    const relevanceScore = scoreRelevance({\n      title: item.title,\n      description: item.description,\n      tags: item.tags,\n      species: h.species ?? null,\n      durationSeconds: durationSeconds ?? null,\n      viewCount: item.viewCount,\n      likeCount: item.likeCount,\n      gatekeeper,\n      scopeBoost: scope.relevanceBoost,\n    });\n\n    if (relevanceScore < minScore) {\n      rejected++;\n      continue;\n    }\n\n    const category = scope.category === \"both\" ? classifyIngestionCategory(gateText) : scope.category;\n    const handle = `@${item.channelTitle\n      .toLowerCase()\n      .replace(/\\s+/g, \"_\")\n      .replace(/[^a-z0-9_]/g, \"\")\n      .slice(0, 30)}`;\n\n    candidates.push({\n      sourcePlatform: \"youtube\",\n      sourceVideoId: item.videoId,\n      title: item.title.slice(0, 200),\n      description: item.description.slice(0, 1000),\n      videoUrl: `https://www.youtube.com/watch?v=${item.videoId}`,\n      embedUrl: `https://www.youtube.com/embed/${item.videoId}`,\n      thumbnailUrl: item.thumbnail || null,\n      creator: item.channelTitle,\n      creatorHandle: handle,\n      channelId: item.channelId,\n      publishedAt: item.publishedAt ? new Date(item.publishedAt) : null,\n      tags: item.tags.slice(0, 20),\n      category,\n      viewCount: item.viewCount,\n      externalLikeCount: item.likeCount,\n      relevanceScore,\n      ingestionSource: `youtube:${scope.scopeKey}`,\n      rightsMetadata: {\n        playbackMethod: \"embed\",\n        platform: \"youtube\",\n        attribution: item.channelTitle,\n        embeddable: true,\n        license: \"platform_terms\",\n      },\n      species: h.species ?? null,\n      locationState: h.locationState ?? null,\n      weightSize: h.weight ?? null,\n    });\n  }\n\n  return {\n    items: candidates,\n    nextPageToken: searchData.nextPageToken ?? null,\n    quotaUsed: 1,\n    rejected,\n  };\n}\n\n/** Resolve a watch URL discovered via Google SERP into a YouTube candidate. */\nexport async function hydrateYouTubeUrl(\n  url: string,\n  apiKey: string,\n  ingestionSource: string,\n): Promise<CatalogVideoCandidate | null> {\n  const videoId = extractYouTubeId(url);\n  if (!videoId) return null;\n\n  const stats = await hydrateVideoStats(apiKey, [videoId]);\n  const extra = stats.get(videoId);\n  if (!extra) return null;\n\n  const params = new URLSearchParams({ part: \"snippet\", id: videoId, key: apiKey });\n  const res = await ytFetch(`${YT_API_BASE}/videos?${params}`);\n  if (!res.ok) return null;\n\n  const data = (await res.json()) as {\n    items?: Array<{\n      id: string;\n      snippet?: {\n        title?: string;\n        description?: string;\n        channelTitle?: string;\n        channelId?: string;\n        publishedAt?: string;\n        tags?: string[];\n        thumbnails?: { high?: { url?: string }; medium?: { url?: string } };\n      };\n    }>;\n  };\n  const snippet = data.items?.[0]?.snippet;\n  if (!snippet?.title) return null;\n\n  const title = snippet.title;\n  const description = snippet.description ?? \"\";\n  const gateText = `${title} ${description}`;\n  const gatekeeper = auditIngestionContent(gateText, extra.categoryId);\n  if (!gatekeeper.valid) return null;\n\n  const relevanceScore = scoreRelevance({\n    title,\n    description,\n    tags: snippet.tags ?? extra.tags ?? [],\n    viewCount: extra.viewCount,\n    likeCount: extra.likeCount,\n    durationSeconds: extra.durationSeconds ?? null,\n    gatekeeper,\n  });\n  if (relevanceScore < minRelevanceThresholdForScope(ingestionSource)) return null;\n\n  const h = runHeuristics(gateText);\n  const handle = `@${(snippet.channelTitle ?? \"youtube\")\n    .toLowerCase()\n    .replace(/\\s+/g, \"_\")\n    .slice(0, 30)}`;\n\n  return {\n    sourcePlatform: \"youtube\",\n    sourceVideoId: videoId,\n    title: title.slice(0, 200),\n    description: description.slice(0, 1000),\n    videoUrl: `https://www.youtube.com/watch?v=${videoId}`,\n    embedUrl: `https://www.youtube.com/embed/${videoId}`,\n    thumbnailUrl:\n      snippet.thumbnails?.high?.url ?? snippet.thumbnails?.medium?.url ?? null,\n    creator: snippet.channelTitle ?? \"YouTube\",\n    creatorHandle: handle,\n    channelId: snippet.channelId,\n    publishedAt: snippet.publishedAt ? new Date(snippet.publishedAt) : null,\n    tags: (snippet.tags ?? extra.tags ?? []).slice(0, 20),\n    category: classifyIngestionCategory(gateText),\n    viewCount: extra.viewCount ?? null,\n    externalLikeCount: extra.likeCount ?? null,\n    relevanceScore,\n    ingestionSource,\n    rightsMetadata: {\n      playbackMethod: \"embed\",\n      platform: \"youtube\",\n      attribution: snippet.channelTitle ?? \"YouTube\",\n      embeddable: true,\n      license: \"platform_terms\",\n    },\n    species: h.species ?? null,\n    locationState: h.locationState ?? null,\n    weightSize: h.weight ?? null,\n  };\n}\n\nexport function inferVideoFormatForCandidate(candidate: CatalogVideoCandidate): string | null {\n  return inferVideoLayout({\n    videoUrl: candidate.videoUrl,\n    sourcePlatform: candidate.sourcePlatform,\n    category: candidate.category,\n  }).format;\n}\n", "import { db, user, userVideosTable } from \"@workspace/db\";\nimport { and, asc, eq, inArray } from \"drizzle-orm\";\nimport {\n  buildExistingUrlKeyMap,\n  duplicateKeyForUrl,\n  extractYouTubeId,\n} from \"../videoDuplicateGuard\";\nimport { thumbnailKeyForIngestion } from \"../speciesHeuristics\";\nimport type { CatalogVideoCandidate } from \"./types\";\nimport { inferVideoFormatForCandidate } from \"./youtubeProvider\";\nimport { attributionFieldsFromCatalogCandidate } from \"../postProcess/attribution\";\nimport { isInstagramCdnMp4, isInstagramEmbedUrl } from \"./instagramPlayback\";\nimport { isConfirmedFeedVideo } from \"../playback/videoMediaValidation.js\";\nconst UUID_RE =\n  /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\nlet cachedActorUserId: string | null = null;\n\n/** user_videos.user_id is a UUID FK \u2014 resolve a real admin account for catalog inserts. */\nexport async function resolveIngestionActorUserId(): Promise<string> {\n  const configured = process.env.INGESTION_ACTOR_USER_ID?.trim();\n  if (configured && UUID_RE.test(configured)) {\n    return configured;\n  }\n\n  if (cachedActorUserId) return cachedActorUserId;\n\n  const [admin] = await db\n    .select({ id: user.id })\n    .from(user)\n    .where(eq(user.role, \"admin\"))\n    .orderBy(asc(user.createdAt))\n    .limit(1);\n\n  if (!admin?.id) {\n    throw new Error(\n      \"No admin user found for ingestion. Set INGESTION_ACTOR_USER_ID to a valid user UUID.\",\n    );\n  }\n\n  cachedActorUserId = admin.id;\n  return admin.id;\n}\n\nexport type PersistResult = {\n  inserted: number;\n  skippedDuplicate: number;\n  upgraded: number;\n  ids: number[];\n};\n\nasync function loadExistingKeys(): Promise<{\n  keyMap: Map<string, number>;\n  rowsById: Map<number, { videoUrl: string; rightsMetadata: Record<string, unknown> | null }>;\n}> {\n  const rows = await db\n    .select({\n      id: userVideosTable.id,\n      videoUrl: userVideosTable.videoUrl,\n      sourcePlatform: userVideosTable.sourcePlatform,\n      sourceVideoId: userVideosTable.sourceVideoId,\n      rightsMetadata: userVideosTable.rightsMetadata,\n    })\n    .from(userVideosTable);\n\n  const map = buildExistingUrlKeyMap(rows.map((r) => ({ id: r.id, videoUrl: r.videoUrl })));\n  const rowsById = new Map<number, { videoUrl: string; rightsMetadata: Record<string, unknown> | null }>();\n\n  for (const row of rows) {\n    rowsById.set(row.id, {\n      videoUrl: row.videoUrl,\n      rightsMetadata: (row.rightsMetadata as Record<string, unknown> | null) ?? null,\n    });\n    if (row.sourcePlatform && row.sourceVideoId) {\n      map.set(`${row.sourcePlatform}:${row.sourceVideoId}`, row.id);\n    }\n  }\n  return { keyMap: map, rowsById };\n}\n\nexport async function persistCatalogCandidates(\n  candidates: CatalogVideoCandidate[],\n): Promise<PersistResult> {\n  if (candidates.length === 0) {\n    return { inserted: 0, skippedDuplicate: 0, upgraded: 0, ids: [] };\n  }\n\n  const { keyMap, rowsById } = await loadExistingKeys();\n  const toInsert: CatalogVideoCandidate[] = [];\n  const toUpgrade: Array<{ id: number; candidate: CatalogVideoCandidate }> = [];\n  let skippedDuplicate = 0;\n\n  for (const candidate of candidates) {\n    if (\n      !isConfirmedFeedVideo({\n        videoUrl: candidate.videoUrl,\n        sourcePlatform: candidate.sourcePlatform,\n        embedUrl: candidate.embedUrl,\n        sourceVideoId: candidate.sourceVideoId,\n        rightsMetadata: candidate.rightsMetadata ?? null,\n      })\n    ) {\n      continue;\n    }\n\n    const urlKey = duplicateKeyForUrl(candidate.videoUrl);\n    const platformKey = `${candidate.sourcePlatform}:${candidate.sourceVideoId}`;\n    const existingId = keyMap.get(platformKey);\n\n    if (\n      existingId &&\n      existingId > 0 &&\n      candidate.sourcePlatform === \"instagram\" &&\n      isInstagramCdnMp4(candidate.videoUrl)\n    ) {\n      const existing = rowsById.get(existingId);\n      if (existing && isInstagramEmbedUrl(existing.videoUrl)) {\n        toUpgrade.push({ id: existingId, candidate });\n        skippedDuplicate++;\n        continue;\n      }\n    }\n\n    if (keyMap.has(urlKey) || (existingId && existingId > 0)) {\n      skippedDuplicate++;\n      continue;\n    }\n    keyMap.set(urlKey, -1);\n    keyMap.set(platformKey, -1);\n    toInsert.push(candidate);\n  }\n\n  let upgraded = 0;\n  for (const { id, candidate } of toUpgrade) {\n    const attribution = attributionFieldsFromCatalogCandidate(candidate);\n    await db\n      .update(userVideosTable)\n      .set({\n        videoUrl: candidate.videoUrl,\n        embedUrl: candidate.embedUrl,\n        rightsMetadata: candidate.rightsMetadata,\n        sourceUrl: attribution.sourceUrl,\n        retrievedAt: new Date(),\n      })\n      .where(eq(userVideosTable.id, id));\n    upgraded++;\n  }\n\n  if (toInsert.length === 0) {\n    return { inserted: 0, skippedDuplicate, upgraded, ids: [] };\n  }\n\n  const actorId = await resolveIngestionActorUserId();\n  const inserted = await db\n    .insert(userVideosTable)\n    .values(\n      toInsert.map((c) => {\n        const attribution = attributionFieldsFromCatalogCandidate(c);\n        return {\n          userId: actorId,\n          title: c.title,\n          creator: c.creator,\n          creatorHandle: c.creatorHandle,\n          videoUrl: c.videoUrl,\n          thumbnailUrl: c.thumbnailUrl,\n          thumbnailKey: thumbnailKeyForIngestion(c.species, c.category),\n          species: c.species ?? null,\n          locationState: c.locationState ?? null,\n          weightSize: c.weightSize ?? null,\n          category: c.category,\n          description: c.description,\n          sourcePlatform: c.sourcePlatform,\n          sourceVideoId: c.sourceVideoId,\n          embedUrl: c.embedUrl,\n          publishedAt: c.publishedAt,\n          tags: c.tags,\n          viewCount: c.viewCount,\n          externalLikeCount: c.externalLikeCount,\n          relevanceScore: c.relevanceScore,\n          ingestionSource: c.ingestionSource,\n          rightsMetadata: c.rightsMetadata,\n          videoFormat: inferVideoFormatForCandidate(c),\n          postProcessStatus: \"pending\" as const,\n          sourceUrl: attribution.sourceUrl,\n          creatorUrl: attribution.creatorUrl,\n          retrievedAt: new Date(),\n        };\n      }),\n    )\n    .returning({ id: userVideosTable.id });\n\n  const ids = inserted.map((r) => r.id);\n  return { inserted: ids.length, skippedDuplicate, upgraded, ids };\n}\n\n/** Mark broken YouTube entries hidden when IDs no longer resolve (maintenance pass). */\nexport async function findBrokenYouTubeIds(videoIds: string[]): Promise<string[]> {\n  const apiKey = process.env.YOUTUBE_API_KEY?.trim();\n  if (!apiKey || videoIds.length === 0) return [];\n\n  const broken: string[] = [];\n  for (let i = 0; i < videoIds.length; i += 50) {\n    const chunk = videoIds.slice(i, i + 50);\n    const params = new URLSearchParams({ part: \"id\", id: chunk.join(\",\"), key: apiKey });\n    const res = await fetch(`https://www.googleapis.com/youtube/v3/videos?${params}`);\n    if (!res.ok) continue;\n    const data = (await res.json()) as { items?: Array<{ id: string }> };\n    const live = new Set((data.items ?? []).map((v) => v.id));\n    for (const id of chunk) {\n      if (!live.has(id)) broken.push(id);\n    }\n  }\n  return broken;\n}\n\nexport async function existingYouTubeSourceIds(ids: string[]): Promise<Set<string>> {\n  if (ids.length === 0) return new Set();\n  const rows = await db\n    .select({ sourceVideoId: userVideosTable.sourceVideoId })\n    .from(userVideosTable)\n    .where(\n      and(\n        eq(userVideosTable.sourcePlatform, \"youtube\"),\n        inArray(userVideosTable.sourceVideoId, ids),\n      ),\n    );\n  return new Set(rows.map((r) => r.sourceVideoId).filter(Boolean) as string[]);\n}\n\nexport function extractIdFromUrl(url: string): string | null {\n  return extractYouTubeId(url);\n}\n", "import { z } from \"zod\";\n\nfunction positiveNumber(name: string, raw: string): number {\n  const n = Number(raw);\n  if (!Number.isFinite(n) || n <= 0) {\n    throw new Error(`${name} must be a positive number, got: ${JSON.stringify(raw)}`);\n  }\n  return n;\n}\n\nexport type AgentConfig = {\n  apiKey: string;\n  /** Fast/cheap model for classification and structured extraction */\n  classifyModel: string;\n  /** Capable model for research cycles with web_search */\n  researchModel: string;\n  /** Ultra-cheap model for high-volume batch screening */\n  nanoModel: string;\n  /** Mid-tier model for borderline validation */\n  reasonModel: string;\n  maxSteps: number;\n  maxCost: number;\n  enabled: boolean;\n};\n\nconst DEFAULTS: AgentConfig = {\n  apiKey: \"\",\n  classifyModel: \"google/gemini-2.5-flash-lite\",\n  researchModel: \"anthropic/claude-sonnet-4\",\n  nanoModel: \"google/gemini-2.0-flash-lite-001\",\n  reasonModel: \"google/gemini-2.5-flash\",\n  maxSteps: 12,\n  maxCost: 0.25,\n  enabled: true,\n};\n\nexport function loadAgentConfig(overrides: Partial<AgentConfig> = {}): AgentConfig {\n  let config: AgentConfig = { ...DEFAULTS };\n\n  if (process.env.OPENROUTER_API_KEY?.trim()) {\n    config.apiKey = process.env.OPENROUTER_API_KEY.trim();\n  }\n  if (process.env.OPENROUTER_CLASSIFY_MODEL?.trim()) {\n    config.classifyModel = process.env.OPENROUTER_CLASSIFY_MODEL.trim();\n  }\n  if (process.env.OPENROUTER_RESEARCH_MODEL?.trim()) {\n    config.researchModel = process.env.OPENROUTER_RESEARCH_MODEL.trim();\n  }\n  if (process.env.OPENROUTER_INGESTION_MODEL?.trim()) {\n    config.classifyModel = process.env.OPENROUTER_INGESTION_MODEL.trim();\n  }\n  if (process.env.OPENROUTER_NANO_MODEL?.trim()) {\n    config.nanoModel = process.env.OPENROUTER_NANO_MODEL.trim();\n  }\n  if (process.env.OPENROUTER_REASON_MODEL?.trim()) {\n    config.reasonModel = process.env.OPENROUTER_REASON_MODEL.trim();\n  }\n  if (process.env.OPENROUTER_MAX_STEPS) {\n    config.maxSteps = positiveNumber(\"OPENROUTER_MAX_STEPS\", process.env.OPENROUTER_MAX_STEPS);\n  }\n  if (process.env.OPENROUTER_MAX_COST_PER_CYCLE) {\n    config.maxCost = positiveNumber(\"OPENROUTER_MAX_COST_PER_CYCLE\", process.env.OPENROUTER_MAX_COST_PER_CYCLE);\n  }\n  if (process.env.OPENROUTER_INGESTION_ENABLED === \"false\") {\n    config.enabled = false;\n  }\n\n  config = { ...config, ...overrides };\n  return config;\n}\n\nexport function isOpenRouterConfigured(config?: AgentConfig): boolean {\n  const c = config ?? loadAgentConfig({ enabled: true });\n  return Boolean(c.apiKey?.trim()) && c.enabled;\n}\n\nexport function requireApiKey(config: AgentConfig): string {\n  const key = config.apiKey?.trim();\n  if (!key) {\n    throw new Error(\n      \"OPENROUTER_API_KEY is required. Set it in artifacts/api-server/.env.secrets or the environment.\",\n    );\n  }\n  return key;\n}\n\n/** Structured outputs shared across ingestion tasks */\nexport const discoveryQuerySchema = z.object({\n  youtubeQueries: z\n    .array(\n      z.object({\n        scopeKey: z.string().describe(\"Stable snake_case identifier, NOT the category\"),\n        query: z.string().describe(\"YouTube search query, hunting/fishing focused\"),\n        category: z.preprocess(\n          (val) => {\n            if (val === \"hooks\" || val === \"shots\" || val === \"both\") return val;\n            return \"both\";\n          },\n          z.enum([\"hooks\", \"shots\", \"both\"]),\n        ),\n        relevanceBoost: z.number().min(0).max(10).optional(),\n      }),\n    )\n    .min(1)\n    .max(8),\n  serpQueries: z.array(z.string()).min(1).max(6),\n  rationale: z.string(),\n});\n\nexport type DiscoveryQueryPlan = z.infer<typeof discoveryQuerySchema>;\n\nexport const videoClassificationSchema = z.object({\n  eligible: z.boolean(),\n  confidence: z.number().min(0).max(1),\n  category: z.enum([\"hooks\", \"shots\", \"both\", \"none\"]),\n  reason: z.string(),\n  species: z.string().nullable().optional(),\n  locationHint: z.string().nullable().optional(),\n  tags: z.array(z.string()).max(12).optional(),\n});\n\nexport type VideoClassification = z.infer<typeof videoClassificationSchema>;\n\nexport const ingestionReportSchema = z.object({\n  summary: z.string(),\n  highlights: z.array(z.string()).max(8),\n  gaps: z.array(z.string()).max(6),\n  recommendedQueries: z.array(z.string()).max(6),\n  complianceNotes: z.array(z.string()).max(4),\n});\n\nexport type IngestionReportSummary = z.infer<typeof ingestionReportSchema>;\n\nexport type VideoMetadataInput = {\n  title: string;\n  description: string;\n  creator?: string;\n  platform?: string;\n  viewCount?: number | null;\n  ruleGatekeeperReason?: string;\n  ruleRelevanceScore?: number;\n};\n\n/** Compact video payload for secondary post-processing (after primary scrape). */\nexport type PostProcessVideoInput = {\n  sourcePlatform: string;\n  sourceVideoId: string;\n  title: string;\n  description: string;\n  videoUrl: string;\n  embedUrl: string;\n  creator: string;\n  creatorHandle?: string;\n  channelId?: string;\n  category: \"hooks\" | \"shots\" | \"both\";\n  viewCount: number | null;\n  relevanceScore: number;\n  ingestionSource: string;\n  species?: string | null;\n  locationState?: string | null;\n};\n\nexport const videoBatchVerdictSchema = z.object({\n  id: z.string(),\n  eligible: z.boolean(),\n  confidence: z.number().min(0).max(1),\n  category: z.enum([\"hooks\", \"shots\", \"both\", \"none\"]),\n  reason: z.string().max(200),\n});\n\nexport type VideoBatchVerdict = z.infer<typeof videoBatchVerdictSchema>;\n\nexport const batchValidationSchema = z.object({\n  results: z.array(videoBatchVerdictSchema).min(1).max(24),\n});\n\nexport const gapDiscoverySchema = z.object({\n  youtubeQueries: z.array(z.string()).max(4),\n  serpQueries: z.array(z.string()).max(3),\n  rationale: z.string().max(300),\n});\n\nexport type GapDiscoveryPlan = z.infer<typeof gapDiscoverySchema>;\n\nexport const rankedVideoSchema = z.object({\n  sourcePlatform: z.string(),\n  sourceVideoId: z.string(),\n  title: z.string(),\n  videoUrl: z.string(),\n  embedUrl: z.string(),\n  creator: z.string(),\n  category: z.enum([\"hooks\", \"shots\", \"both\"]),\n  confidence: z.number().min(0).max(1),\n  rankScore: z.number().min(0).max(100),\n  ingestionSource: z.string(),\n  validationTier: z.enum([\"rules_only\", \"nano_batch\", \"fast_borderline\", \"reason_escalation\"]),\n  reason: z.string(),\n});\n\nexport type RankedValidatedVideo = z.infer<typeof rankedVideoSchema>;\n\nexport const secondaryPostProcessReportSchema = z.object({\n  summary: z.string(),\n  rankedVideos: z.array(rankedVideoSchema).max(200),\n  gapPlan: gapDiscoverySchema.nullable().optional(),\n  stats: z.object({\n    inputCount: z.number(),\n    afterDedup: z.number(),\n    llmValidated: z.number(),\n    escalated: z.number(),\n    uniqueChannels: z.number(),\n    tierSpendUsd: z.number(),\n  }),\n  recommendedNextQueries: z.array(z.string()).max(8),\n});\n\nexport type SecondaryPostProcessReport = z.infer<typeof secondaryPostProcessReportSchema>;\n", "/*\n * This file is only ever generated once on the first generation and then is free to be modified.\n * Any hooks you wish to add should be registered in the initHooks function. Feel free to define them\n * in this file or in separate files in the hooks folder.\n */\nexport function initHooks(_hooks) {\n    // Add hooks by calling hooks.register{ClientInit/BeforeCreateRequest/BeforeRequest/AfterSuccess/AfterError}Hook\n    // with an instance of a hook that implements that specific Hook interface\n    // Hooks are registered per SDK instance, and are valid for the lifetime of the SDK instance\n}\n//# sourceMappingURL=registration.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a2463fc6f69b\n */\nimport { initHooks } from \"./registration.js\";\nexport class SDKHooks {\n    constructor() {\n        this.sdkInitHooks = [];\n        this.beforeCreateRequestHooks = [];\n        this.beforeRequestHooks = [];\n        this.afterSuccessHooks = [];\n        this.afterErrorHooks = [];\n        const presetHooks = [];\n        for (const hook of presetHooks) {\n            if (\"sdkInit\" in hook) {\n                this.registerSDKInitHook(hook);\n            }\n            if (\"beforeCreateRequest\" in hook) {\n                this.registerBeforeCreateRequestHook(hook);\n            }\n            if (\"beforeRequest\" in hook) {\n                this.registerBeforeRequestHook(hook);\n            }\n            if (\"afterSuccess\" in hook) {\n                this.registerAfterSuccessHook(hook);\n            }\n            if (\"afterError\" in hook) {\n                this.registerAfterErrorHook(hook);\n            }\n        }\n        initHooks(this);\n    }\n    registerSDKInitHook(hook) {\n        this.sdkInitHooks.push(hook);\n    }\n    registerBeforeCreateRequestHook(hook) {\n        this.beforeCreateRequestHooks.push(hook);\n    }\n    registerBeforeRequestHook(hook) {\n        this.beforeRequestHooks.push(hook);\n    }\n    registerAfterSuccessHook(hook) {\n        this.afterSuccessHooks.push(hook);\n    }\n    registerAfterErrorHook(hook) {\n        this.afterErrorHooks.push(hook);\n    }\n    sdkInit(opts) {\n        return this.sdkInitHooks.reduce((opts, hook) => hook.sdkInit(opts), opts);\n    }\n    beforeCreateRequest(hookCtx, input) {\n        let inp = input;\n        for (const hook of this.beforeCreateRequestHooks) {\n            inp = hook.beforeCreateRequest(hookCtx, inp);\n        }\n        return inp;\n    }\n    async beforeRequest(hookCtx, request) {\n        let req = request;\n        for (const hook of this.beforeRequestHooks) {\n            req = await hook.beforeRequest(hookCtx, req);\n        }\n        return req;\n    }\n    async afterSuccess(hookCtx, response) {\n        let res = response;\n        for (const hook of this.afterSuccessHooks) {\n            res = await hook.afterSuccess(hookCtx, res);\n        }\n        return res;\n    }\n    async afterError(hookCtx, response, error) {\n        let res = response;\n        let err = error;\n        for (const hook of this.afterErrorHooks) {\n            const result = await hook.afterError(hookCtx, res, err);\n            res = result.response;\n            err = result.error;\n        }\n        return { response: res, error: err };\n    }\n}\n//# sourceMappingURL=hooks.js.map", "/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n    status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n    function init(inst, def) {\n        if (!inst._zod) {\n            Object.defineProperty(inst, \"_zod\", {\n                value: {\n                    def,\n                    constr: _,\n                    traits: new Set(),\n                },\n                enumerable: false,\n            });\n        }\n        if (inst._zod.traits.has(name)) {\n            return;\n        }\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        // support prototype modifications\n        const proto = _.prototype;\n        const keys = Object.keys(proto);\n        for (let i = 0; i < keys.length; i++) {\n            const k = keys[i];\n            if (!(k in inst)) {\n                inst[k] = proto[k].bind(inst);\n            }\n        }\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        var _a;\n        const inst = params?.Parent ? new Definition() : this;\n        init(inst, def);\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        for (const fn of inst._zod.deferred) {\n            fn();\n        }\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport class $ZodEncodeError extends Error {\n    constructor(name) {\n        super(`Encountered unidirectional transform during encode: ${name}`);\n        this.name = \"ZodEncodeError\";\n    }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n", "// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\nexport function cached(getter) {\n    const set = false;\n    return {\n        get value() {\n            if (!set) {\n                const value = getter();\n                Object.defineProperty(this, \"value\", { value });\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n    };\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepString = step.toString();\n    let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n    if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n        const match = stepString.match(/\\d?e-(\\d?)/);\n        if (match?.[1]) {\n            stepDecCount = Number.parseInt(match[1]);\n        }\n    }\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n    let value = undefined;\n    Object.defineProperty(object, key, {\n        get() {\n            if (value === EVALUATING) {\n                // Circular reference detected, return undefined to break the cycle\n                return undefined;\n            }\n            if (value === undefined) {\n                value = EVALUATING;\n                value = getter();\n            }\n            return value;\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function objectClone(obj) {\n    return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\nexport function mergeDefs(...defs) {\n    const mergedDescriptors = {};\n    for (const def of defs) {\n        const descriptors = Object.getOwnPropertyDescriptors(def);\n        Object.assign(mergedDescriptors, descriptors);\n    }\n    return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n    return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport function slugify(input) {\n    return input\n        .toLowerCase()\n        .trim()\n        .replace(/[^\\w\\s-]/g, \"\")\n        .replace(/[\\s_-]+/g, \"-\")\n        .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n    // @ts-ignore\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    if (typeof ctor !== \"function\")\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function shallowClone(o) {\n    if (isPlainObject(o))\n        return { ...o };\n    if (Array.isArray(o))\n        return [...o];\n    return o;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            // @ts-ignore\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n    });\n}\nexport const NUMBER_FORMAT_RANGES = {\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = {};\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                newShape[key] = currDef.shape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function omit(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = { ...schema._zod.def.shape };\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                delete newShape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const checks = schema._zod.def.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        // Only throw if new shape overlaps with existing shape\n        // Use getOwnPropertyDescriptor to check key existence without accessing values\n        const existingShape = schema._zod.def.shape;\n        for (const key in shape) {\n            if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n                throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n            }\n        }\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n    });\n    return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n    });\n    return clone(schema, def);\n}\nexport function merge(a, b) {\n    const def = mergeDefs(a._zod.def, {\n        get shape() {\n            const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        get catchall() {\n            return b._zod.def.catchall;\n        },\n        checks: [], // delete existing checks\n    });\n    return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in oldShape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in shape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n    });\n    return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n    const full = { ...iss, path: iss.path ?? [] };\n    // for backwards compatibility\n    if (!iss.message) {\n        const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\";\n        full.message = message;\n    }\n    // delete (full as any).def;\n    delete full.inst;\n    delete full.continue;\n    if (!ctx?.reportInput) {\n        delete full.input;\n    }\n    return full;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    // @ts-ignore\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function parsedType(data) {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        }\n        case \"object\": {\n            if (data === null) {\n                return \"null\";\n            }\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            const obj = data;\n            if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n                return obj.constructor.name;\n            }\n        }\n    }\n    return t;\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n    const binaryString = atob(base64);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n        bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n    let binaryString = \"\";\n    for (let i = 0; i < bytes.length; i++) {\n        binaryString += String.fromCharCode(bytes[i]);\n    }\n    return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n    const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n    return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n    return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n    const cleanHex = hex.replace(/^0x/, \"\");\n    if (cleanHex.length % 2 !== 0) {\n        throw new Error(\"Invalid hex string length\");\n    }\n    const bytes = new Uint8Array(cleanHex.length / 2);\n    for (let i = 0; i < cleanHex.length; i += 2) {\n        bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n    }\n    return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n    return Array.from(bytes)\n        .map((b) => b.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n", "import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    Object.defineProperty(inst, \"_zod\", {\n        value: inst._zod,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"issues\", {\n        value: def,\n        enumerable: false,\n    });\n    inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n    Object.defineProperty(inst, \"toString\", {\n        value: () => inst.message,\n        enumerable: false,\n    });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n            fieldErrors[sub.path[0]].push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = { _errors: [] };\n    const processError = (error) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.path.length === 0) {\n                fieldErrors._errors.push(mapper(issue));\n            }\n            else {\n                let curr = fieldErrors;\n                let i = 0;\n                while (i < issue.path.length) {\n                    const el = issue.path[i];\n                    const terminal = i === issue.path.length - 1;\n                    if (!terminal) {\n                        curr[el] = curr[el] || { _errors: [] };\n                    }\n                    else {\n                        curr[el] = curr[el] || { _errors: [] };\n                        curr[el]._errors.push(mapper(issue));\n                    }\n                    curr = curr[el];\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a, _b;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, issue.path));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   \u2716 Expected number, received string at \"username\n * favoriteNumbers[0]\n *   \u2716 Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n    const segs = [];\n    const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`\u2716 ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  \u2192 at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n", "import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    if (result.issues.length) {\n        const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, _params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    if (result.issues.length) {\n        const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length\n        ? {\n            success: false,\n            error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length\n        ? {\n            success: false,\n            error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n    return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n    return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n", "import * as util from \"./util.js\";\nexport const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n    const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n    return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const time = timeSource({ precision: args.precision });\n    const opts = [\"Z\"];\n    if (args.local)\n        opts.push(\"\");\n    // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    if (args.offset)\n        opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n    const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n    return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n    return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n", "// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n        if (def.value < curr) {\n            if (def.inclusive)\n                bag.maximum = def.value;\n            else\n                bag.exclusiveMaximum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n        if (def.value > curr) {\n            if (def.inclusive)\n                bag.minimum = def.value;\n            else\n                bag.exclusiveMinimum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        var _a;\n        (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n    });\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n        if (isInt)\n            bag.pattern = regexes.integer;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    continue: false,\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.size;\n        bag.maximum = def.size;\n        bag.size = def.size;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.length;\n        bag.maximum = def.length;\n        bag.length = def.length;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        if (def.pattern) {\n            bag.patterns ?? (bag.patterns = new Set());\n            bag.patterns.add(def.pattern);\n        }\n    });\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.mime = def.mime;\n    });\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n", "export class Doc {\n    constructor(args = []) {\n        this.content = [];\n        this.indent = 0;\n        if (this)\n            this.args = args;\n    }\n    indented(fn) {\n        this.indent += 1;\n        fn(this);\n        this.indent -= 1;\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const args = this?.args;\n        const content = this?.content ?? [``];\n        const lines = [...content.map((x) => `  ${x}`)];\n        // console.log(lines.join(\"\\n\"));\n        return new F(...args, lines.join(\"\\n\"));\n    }\n}\n", "export const version = {\n    major: 4,\n    minor: 3,\n    patch: 6,\n};\n", "import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const checks = [...(inst._zod.def.checks ?? [])];\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    if (inst._zod.traits.has(\"$ZodCheck\")) {\n        checks.unshift(inst);\n    }\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer\n        // inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        const handleCanaryResult = (canary, payload, ctx) => {\n            // abort if the canary is aborted\n            if (util.aborted(canary)) {\n                canary.aborted = true;\n                return canary;\n            }\n            // run checks first, then\n            const checkResult = runChecks(payload, checks, ctx);\n            if (checkResult instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n            }\n            return inst._zod.parse(checkResult, ctx);\n        };\n        inst._zod.run = (payload, ctx) => {\n            if (ctx.skipChecks) {\n                return inst._zod.parse(payload, ctx);\n            }\n            if (ctx.direction === \"backward\") {\n                // run canary\n                // initial pass (no checks)\n                const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n                if (canary instanceof Promise) {\n                    return canary.then((canary) => {\n                        return handleCanaryResult(canary, payload, ctx);\n                    });\n                }\n                return handleCanaryResult(canary, payload, ctx);\n            }\n            // forward\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n    // Lazy initialize ~standard to avoid creating objects for every schema\n    util.defineLazy(inst, \"~standard\", () => ({\n        validate: (value) => {\n            try {\n                const r = safeParse(inst, value);\n                return r.success ? { value: r.data } : { issues: r.error?.issues };\n            }\n            catch (_) {\n                return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n            }\n        },\n        vendor: \"zod\",\n        version: 1,\n    }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            // Trim whitespace from input\n            const trimmed = payload.value.trim();\n            // @ts-ignore\n            const url = new URL(trimmed);\n            if (def.hostname) {\n                def.hostname.lastIndex = 0;\n                if (!def.hostname.test(url.hostname)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid hostname\",\n                        pattern: def.hostname.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            if (def.protocol) {\n                def.protocol.lastIndex = 0;\n                if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid protocol\",\n                        pattern: def.protocol.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            // Set the output value based on normalize flag\n            if (def.normalize) {\n                // Use normalized URL\n                payload.value = url.href;\n            }\n            else {\n                // Preserve the original input (trimmed)\n                payload.value = trimmed;\n            }\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.nanoid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `ipv6`;\n    inst._zod.check = (payload) => {\n        try {\n            // @ts-ignore\n            new URL(`http://[${payload.value}]`);\n            // return;\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        const parts = payload.value.split(\"/\");\n        try {\n            if (parts.length !== 2)\n                throw new Error();\n            const [address, prefix] = parts;\n            if (!prefix)\n                throw new Error();\n            const prefixNum = Number(prefix);\n            if (`${prefixNum}` !== prefix)\n                throw new Error();\n            if (prefixNum < 0 || prefixNum > 128)\n                throw new Error();\n            // @ts-ignore\n            new URL(`http://[${address}]`);\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        // @ts-ignore\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.contentEncoding = \"base64\";\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64URL(data) {\n    if (!regexes.base64url.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64url);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.contentEncoding = \"base64url\";\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        // @ts-ignore\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? \"Infinity\"\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = Array(input.length);\n        const proms = [];\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalOut) {\n    if (result.issues.length) {\n        // For optional-out schemas, ignore errors on absent keys\n        if (isOptionalOut && !(key in input)) {\n            return;\n        }\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    if (result.value === undefined) {\n        if (key in input) {\n            final.value[key] = undefined;\n        }\n    }\n    else {\n        final.value[key] = result.value;\n    }\n}\nfunction normalizeDef(def) {\n    const keys = Object.keys(def.shape);\n    for (const k of keys) {\n        if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n            throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n        }\n    }\n    const okeys = util.optionalKeys(def.shape);\n    return {\n        ...def,\n        keys,\n        keySet: new Set(keys),\n        numKeys: keys.length,\n        optionalKeys: new Set(okeys),\n    };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n    const unrecognized = [];\n    // iterate over input keys\n    const keySet = def.keySet;\n    const _catchall = def.catchall._zod;\n    const t = _catchall.def.type;\n    const isOptionalOut = _catchall.optout === \"optional\";\n    for (const key in input) {\n        if (keySet.has(key))\n            continue;\n        if (t === \"never\") {\n            unrecognized.push(key);\n            continue;\n        }\n        const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n        if (r instanceof Promise) {\n            proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n        }\n        else {\n            handlePropertyResult(r, payload, key, input, isOptionalOut);\n        }\n    }\n    if (unrecognized.length) {\n        payload.issues.push({\n            code: \"unrecognized_keys\",\n            keys: unrecognized,\n            input,\n            inst,\n        });\n    }\n    if (!proms.length)\n        return payload;\n    return Promise.all(proms).then(() => {\n        return payload;\n    });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    // const sh = def.shape;\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    if (!desc?.get) {\n        const sh = def.shape;\n        Object.defineProperty(def, \"shape\", {\n            get: () => {\n                const newSh = { ...sh };\n                Object.defineProperty(def, \"shape\", {\n                    value: newSh,\n                });\n                return newSh;\n            },\n        });\n    }\n    const _normalized = util.cached(() => normalizeDef(def));\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const shape = def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                propValues[key] ?? (propValues[key] = new Set());\n                for (const v of field.values)\n                    propValues[key].add(v);\n            }\n        }\n        return propValues;\n    });\n    const isObject = util.isObject;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = {};\n        const proms = [];\n        const shape = value.shape;\n        for (const key of value.keys) {\n            const el = shape[key];\n            const isOptionalOut = el._zod.optout === \"optional\";\n            const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n            }\n            else {\n                handlePropertyResult(r, payload, key, input, isOptionalOut);\n            }\n        }\n        if (!catchall) {\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n    };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodObject.init(inst, def);\n    const superParse = inst._zod.parse;\n    const _normalized = util.cached(() => normalizeDef(def));\n    const generateFastpass = (shape) => {\n        const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n        const normalized = _normalized.value;\n        const parseStr = (key) => {\n            const k = util.esc(key);\n            return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        };\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.keys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(`const newResult = {};`);\n        for (const key of normalized.keys) {\n            const id = ids[key];\n            const k = util.esc(key);\n            const schema = shape[key];\n            const isOptionalOut = schema?._zod?.optout === \"optional\";\n            doc.write(`const ${id} = ${parseStr(key)};`);\n            if (isOptionalOut) {\n                // For optional-out schemas, ignore errors on absent keys\n                doc.write(`\n        if (${id}.issues.length) {\n          if (${k} in input) {\n            payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n              ...iss,\n              path: iss.path ? [${k}, ...iss.path] : [${k}]\n            })));\n          }\n        }\n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n            }\n            else {\n                doc.write(`\n        if (${id}.issues.length) {\n          payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${k}, ...iss.path] : [${k}]\n          })));\n        }\n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n            }\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        const fn = doc.compile();\n        return (payload, ctx) => fn(shape, payload, ctx);\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n            if (!catchall)\n                return payload;\n            return handleCatchall([], input, payload, ctx, value, inst);\n        }\n        return superParse(payload, ctx);\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    const nonaborted = results.filter((r) => !util.aborted(r));\n    if (nonaborted.length === 1) {\n        final.value = nonaborted[0].value;\n        return nonaborted[0];\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"values\", () => {\n        if (def.options.every((o) => o._zod.values)) {\n            return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        if (def.options.every((o) => o._zod.pattern)) {\n            const patterns = def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    const single = def.options.length === 1;\n    const first = def.options[0]._zod.run;\n    inst._zod.parse = (payload, ctx) => {\n        if (single) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n    const successes = results.filter((r) => r.issues.length === 0);\n    if (successes.length === 1) {\n        final.value = successes[0].value;\n        return final;\n    }\n    if (successes.length === 0) {\n        // No matches - same as regular union\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        });\n    }\n    else {\n        // Multiple matches - exclusive union failure\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: [],\n            inclusive: false,\n        });\n    }\n    return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    def.inclusive = false;\n    const single = def.options.length === 1;\n    const first = def.options[0]._zod.run;\n    inst._zod.parse = (payload, ctx) => {\n        if (single) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    def.inclusive = false;\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const propValues = {};\n        for (const option of def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n            for (const [k, v] of Object.entries(pv)) {\n                if (!propValues[k])\n                    propValues[k] = new Set();\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        return propValues;\n    });\n    const disc = util.cached(() => {\n        const opts = def.options;\n        const map = new Map();\n        for (const o of opts) {\n            const values = o._zod.propValues?.[def.discriminator];\n            if (!values || values.size === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n            for (const v of values) {\n                if (map.has(v)) {\n                    throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n                }\n                map.set(v, o);\n            }\n        }\n        return map;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const opt = disc.value.get(input?.[def.discriminator]);\n        if (opt) {\n            return opt._zod.run(payload, ctx);\n        }\n        if (def.unionFallback) {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            discriminator: def.discriminator,\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nfunction mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    // Track which side(s) report each key as unrecognized\n    const unrecKeys = new Map();\n    let unrecIssue;\n    for (const iss of left.issues) {\n        if (iss.code === \"unrecognized_keys\") {\n            unrecIssue ?? (unrecIssue = iss);\n            for (const k of iss.keys) {\n                if (!unrecKeys.has(k))\n                    unrecKeys.set(k, {});\n                unrecKeys.get(k).l = true;\n            }\n        }\n        else {\n            result.issues.push(iss);\n        }\n    }\n    for (const iss of right.issues) {\n        if (iss.code === \"unrecognized_keys\") {\n            for (const k of iss.keys) {\n                if (!unrecKeys.has(k))\n                    unrecKeys.set(k, {});\n                unrecKeys.get(k).r = true;\n            }\n        }\n        else {\n            result.issues.push(iss);\n        }\n    }\n    // Report only keys unrecognized by BOTH sides\n    const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n    if (bothKeys.length && unrecIssue) {\n        result.issues.push({ ...unrecIssue, keys: bothKeys });\n    }\n    if (util.aborted(result))\n        return result;\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = [];\n        const proms = [];\n        const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n        const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\n        if (!def.rest) {\n            const tooBig = input.length > items.length;\n            const tooSmall = input.length < optStart - 1;\n            if (tooBig || tooSmall) {\n                payload.issues.push({\n                    ...(tooBig\n                        ? { code: \"too_big\", maximum: items.length, inclusive: true }\n                        : { code: \"too_small\", minimum: items.length }),\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n                return payload;\n            }\n        }\n        let i = -1;\n        for (const item of items) {\n            i++;\n            if (i >= input.length)\n                if (i >= optStart)\n                    continue;\n            const result = item._zod.run({\n                value: input[i],\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n            }\n            else {\n                handleTupleResult(result, payload, i);\n            }\n        }\n        if (def.rest) {\n            const rest = input.slice(items.length);\n            for (const el of rest) {\n                i++;\n                const result = def.rest._zod.run({\n                    value: el,\n                    issues: [],\n                }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        const values = def.keyType._zod.values;\n        if (values) {\n            payload.value = {};\n            const recordKeys = new Set();\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[key] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[key] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!recordKeys.has(key)) {\n                    unrecognized = unrecognized ?? [];\n                    unrecognized.push(key);\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                });\n            }\n        }\n        else {\n            payload.value = {};\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n                // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n                const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n                if (checkNumericKey) {\n                    const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n                    if (retryResult instanceof Promise) {\n                        throw new Error(\"Async schemas not supported in object keys currently\");\n                    }\n                    if (retryResult.issues.length === 0) {\n                        keyResult = retryResult;\n                    }\n                }\n                if (keyResult.issues.length) {\n                    if (def.mode === \"loose\") {\n                        // Pass through unchanged\n                        payload.value[key] = input[key];\n                    }\n                    else {\n                        // Default \"strict\" behavior: error on invalid key\n                        payload.issues.push({\n                            code: \"invalid_key\",\n                            origin: \"record\",\n                            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                            input: key,\n                            path: [key],\n                            inst,\n                        });\n                    }\n                    continue;\n                }\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[keyResult.value] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[keyResult.value] = result.value;\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Map();\n        for (const [key, value] of input) {\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                code: \"invalid_key\",\n                origin: \"map\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Set();\n        for (const item of input) {\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    const valuesSet = new Set(values);\n    inst._zod.values = valuesSet;\n    inst._zod.pattern = new RegExp(`^(${values\n        .filter((k) => util.propertyKeyTypes.has(typeof k))\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (valuesSet.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    if (def.values.length === 0) {\n        throw new Error(\"Cannot create literal schema with no valid values\");\n    }\n    const values = new Set(def.values);\n    inst._zod.values = values;\n    inst._zod.pattern = new RegExp(`^(${def.values\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        // @ts-ignore\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        const _out = def.transform(payload.value, payload);\n        if (ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        return payload;\n    };\n});\nfunction handleOptionalResult(result, input) {\n    if (result.issues.length && input === undefined) {\n        return { issues: [], value: undefined };\n    }\n    return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (def.innerType._zod.optin === \"optional\") {\n            const result = def.innerType._zod.run(payload, ctx);\n            if (result instanceof Promise)\n                return result.then((r) => handleOptionalResult(r, payload.value));\n            return handleOptionalResult(result, payload.value);\n        }\n        if (payload.value === undefined) {\n            return payload;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n    // Call parent init - inherits optin/optout = \"optional\"\n    $ZodOptional.init(inst, def);\n    // Override values/pattern to NOT add undefined\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n    // Override parse to just delegate (no undefined handling)\n    inst._zod.parse = (payload, ctx) => {\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        // Forward direction (decode): allow null to pass through\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply defaults for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault returns the default value immediately in forward direction.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        // Forward direction: continue with default handling\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply prefault for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => {\n        const v = def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(\"ZodSuccess\");\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply catch logic\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.value;\n                if (result.issues.length) {\n                    payload.value = def.catchValue({\n                        ...payload,\n                        error: {\n                            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        },\n                        input: payload.value,\n                    });\n                    payload.issues = [];\n                }\n                return payload;\n            });\n        }\n        payload.value = result.value;\n        if (result.issues.length) {\n            payload.value = def.catchValue({\n                ...payload,\n                error: {\n                    issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                },\n                input: payload.value,\n            });\n            payload.issues = [];\n        }\n        return payload;\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handlePipeResult(right, def.in, ctx));\n            }\n            return handlePipeResult(right, def.in, ctx);\n        }\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def.out, ctx));\n        }\n        return handlePipeResult(left, def.out, ctx);\n    };\n});\nfunction handlePipeResult(left, next, ctx) {\n    if (left.issues.length) {\n        // prevent further checks\n        left.aborted = true;\n        return left;\n    }\n    return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        const direction = ctx.direction || \"forward\";\n        if (direction === \"forward\") {\n            const left = def.in._zod.run(payload, ctx);\n            if (left instanceof Promise) {\n                return left.then((left) => handleCodecAResult(left, def, ctx));\n            }\n            return handleCodecAResult(left, def, ctx);\n        }\n        else {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handleCodecAResult(right, def, ctx));\n            }\n            return handleCodecAResult(right, def, ctx);\n        }\n    };\n});\nfunction handleCodecAResult(result, def, ctx) {\n    if (result.issues.length) {\n        // prevent further checks\n        result.aborted = true;\n        return result;\n    }\n    const direction = ctx.direction || \"forward\";\n    if (direction === \"forward\") {\n        const transformed = def.transform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.out, ctx);\n    }\n    else {\n        const transformed = def.reverseTransform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.in, ctx);\n    }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n    // Check if transform added any issues\n    if (left.issues.length) {\n        left.aborted = true;\n        return left;\n    }\n    return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    payload.value = Object.freeze(payload.value);\n    return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (typeof part === \"object\" && part !== null) {\n            // is Zod schema\n            if (!part._zod.pattern) {\n                // if (!source)\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n            if (!source)\n                throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n            const start = source.startsWith(\"^\") ? 1 : 0;\n            const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n            regexParts.push(source.slice(start, end));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"string\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: def.format ?? \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._def = def;\n    inst._zod.def = def;\n    inst.implement = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implement() must be called with a function\");\n        }\n        return function (...args) {\n            const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n            const result = Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return parse(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst.implementAsync = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implementAsync() must be called with a function\");\n        }\n        return async function (...args) {\n            const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n            const result = await Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return await parseAsync(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"function\") {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"function\",\n                input: payload.value,\n                inst,\n            });\n            return payload;\n        }\n        // Check if output is a promise type to determine if we should use async implementation\n        const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n        if (hasPromiseOutput) {\n            payload.value = inst.implementAsync(payload.value);\n        }\n        else {\n            payload.value = inst.implement(payload.value);\n        }\n        return payload;\n    };\n    inst.input = (...args) => {\n        const F = inst.constructor;\n        if (Array.isArray(args[0])) {\n            return new F({\n                type: \"function\",\n                input: new $ZodTuple({\n                    type: \"tuple\",\n                    items: args[0],\n                    rest: args[1],\n                }),\n                output: inst._def.output,\n            });\n        }\n        return new F({\n            type: \"function\",\n            input: args[0],\n            output: inst._def.output,\n        });\n    };\n    inst.output = (output) => {\n        const F = inst.constructor;\n        return new F({\n            type: \"function\",\n            input: inst._def.input,\n            output,\n        });\n    };\n    return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // let _innerType!: any;\n    // util.defineLazy(def, \"getter\", () => {\n    //   if (!_innerType) {\n    //     _innerType = def.getter();\n    //   }\n    //   return () => _innerType;\n    // });\n    util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n    util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n    util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n    util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n    util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u062D\u0631\u0641\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n        file: { unit: \"\u0628\u0627\u064A\u062A\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n        array: { unit: \"\u0639\u0646\u0635\u0631\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n        set: { unit: \"\u0639\u0646\u0635\u0631\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0645\u062F\u062E\u0644\",\n        email: \"\u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A\",\n        url: \"\u0631\u0627\u0628\u0637\",\n        emoji: \"\u0625\u064A\u0645\u0648\u062C\u064A\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u062A\u0627\u0631\u064A\u062E \u0648\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        date: \"\u062A\u0627\u0631\u064A\u062E \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        time: \"\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        duration: \"\u0645\u062F\u0629 \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n        ipv4: \"\u0639\u0646\u0648\u0627\u0646 IPv4\",\n        ipv6: \"\u0639\u0646\u0648\u0627\u0646 IPv6\",\n        cidrv4: \"\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv4\",\n        cidrv6: \"\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv6\",\n        base64: \"\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64-encoded\",\n        base64url: \"\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64url-encoded\",\n        json_string: \"\u0646\u064E\u0635 \u0639\u0644\u0649 \u0647\u064A\u0626\u0629 JSON\",\n        e164: \"\u0631\u0642\u0645 \u0647\u0627\u062A\u0641 \u0628\u0645\u0639\u064A\u0627\u0631 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0645\u062F\u062E\u0644\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 instanceof ${issue.expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`;\n                }\n                return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0627\u062E\u062A\u064A\u0627\u0631 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062A\u0648\u0642\u0639 \u0627\u0646\u062A\u0642\u0627\u0621 \u0623\u062D\u062F \u0647\u0630\u0647 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return ` \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue.origin ?? \"\u0627\u0644\u0642\u064A\u0645\u0629\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\"}`;\n                return `\u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue.origin ?? \"\u0627\u0644\u0642\u064A\u0645\u0629\"} ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0628\u062F\u0623 \u0628\u0640 \"${issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0646\u062A\u0647\u064A \u0628\u0640 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u062A\u0636\u0645\u0651\u064E\u0646 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0637\u0627\u0628\u0642 \u0627\u0644\u0646\u0645\u0637 ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644`;\n            }\n            case \"not_multiple_of\":\n                return `\u0631\u0642\u0645 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0645\u0646 \u0645\u0636\u0627\u0639\u0641\u0627\u062A ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u0645\u0639\u0631\u0641${issue.keys.length > 1 ? \"\u0627\u062A\" : \"\"} \u063A\u0631\u064A\u0628${issue.keys.length > 1 ? \"\u0629\" : \"\"}: ${util.joinValues(issue.keys, \"\u060C \")}`;\n            case \"invalid_key\":\n                return `\u0645\u0639\u0631\u0641 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\";\n            case \"invalid_element\":\n                return `\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue.origin}`;\n            default:\n                return \"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"simvol\", verb: \"olmal\u0131d\u0131r\" },\n        file: { unit: \"bayt\", verb: \"olmal\u0131d\u0131r\" },\n        array: { unit: \"element\", verb: \"olmal\u0131d\u0131r\" },\n        set: { unit: \"element\", verb: \"olmal\u0131d\u0131r\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n instanceof ${issue.expected}, daxil olan ${received}`;\n                }\n                return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n ${expected}, daxil olan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Yanl\u0131\u015F se\u00E7im: a\u015Fa\u011F\u0131dak\u0131lardan biri olmal\u0131d\u0131r: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ox b\u00F6y\u00FCk: g\u00F6zl\u0259nil\u0259n ${issue.origin ?? \"d\u0259y\u0259r\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n                return `\u00C7ox b\u00F6y\u00FCk: g\u00F6zl\u0259nil\u0259n ${issue.origin ?? \"d\u0259y\u0259r\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ox ki\u00E7ik: g\u00F6zl\u0259nil\u0259n ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                return `\u00C7ox ki\u00E7ik: g\u00F6zl\u0259nil\u0259n ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Yanl\u0131\u015F m\u0259tn: \"${_issue.prefix}\" il\u0259 ba\u015Flamal\u0131d\u0131r`;\n                if (_issue.format === \"ends_with\")\n                    return `Yanl\u0131\u015F m\u0259tn: \"${_issue.suffix}\" il\u0259 bitm\u0259lidir`;\n                if (_issue.format === \"includes\")\n                    return `Yanl\u0131\u015F m\u0259tn: \"${_issue.includes}\" daxil olmal\u0131d\u0131r`;\n                if (_issue.format === \"regex\")\n                    return `Yanl\u0131\u015F m\u0259tn: ${_issue.pattern} \u015Fablonuna uy\u011Fun olmal\u0131d\u0131r`;\n                return `Yanl\u0131\u015F ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Yanl\u0131\u015F \u0259d\u0259d: ${issue.divisor} il\u0259 b\u00F6l\u00FCn\u0259 bil\u0259n olmal\u0131d\u0131r`;\n            case \"unrecognized_keys\":\n                return `Tan\u0131nmayan a\u00E7ar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} daxilind\u0259 yanl\u0131\u015F a\u00E7ar`;\n            case \"invalid_union\":\n                return \"Yanl\u0131\u015F d\u0259y\u0259r\";\n            case \"invalid_element\":\n                return `${issue.origin} daxilind\u0259 yanl\u0131\u015F d\u0259y\u0259r`;\n            default:\n                return `Yanl\u0131\u015F d\u0259y\u0259r`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nfunction getBelarusianPlural(count, one, few, many) {\n    const absCount = Math.abs(count);\n    const lastDigit = absCount % 10;\n    const lastTwoDigits = absCount % 100;\n    if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n        return many;\n    }\n    if (lastDigit === 1) {\n        return one;\n    }\n    if (lastDigit >= 2 && lastDigit <= 4) {\n        return few;\n    }\n    return many;\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"\u0441\u0456\u043C\u0432\u0430\u043B\",\n                few: \"\u0441\u0456\u043C\u0432\u0430\u043B\u044B\",\n                many: \"\u0441\u0456\u043C\u0432\u0430\u043B\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n        array: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n        set: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n        file: {\n            unit: {\n                one: \"\u0431\u0430\u0439\u0442\",\n                few: \"\u0431\u0430\u0439\u0442\u044B\",\n                many: \"\u0431\u0430\u0439\u0442\u0430\u045E\",\n            },\n            verb: \"\u043C\u0435\u0446\u044C\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0443\u0432\u043E\u0434\",\n        email: \"email \u0430\u0434\u0440\u0430\u0441\",\n        url: \"URL\",\n        emoji: \"\u044D\u043C\u043E\u0434\u0437\u0456\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0434\u0430\u0442\u0430 \u0456 \u0447\u0430\u0441\",\n        date: \"ISO \u0434\u0430\u0442\u0430\",\n        time: \"ISO \u0447\u0430\u0441\",\n        duration: \"ISO \u043F\u0440\u0430\u0446\u044F\u0433\u043B\u0430\u0441\u0446\u044C\",\n        ipv4: \"IPv4 \u0430\u0434\u0440\u0430\u0441\",\n        ipv6: \"IPv6 \u0430\u0434\u0440\u0430\u0441\",\n        cidrv4: \"IPv4 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D\",\n        cidrv6: \"IPv6 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D\",\n        base64: \"\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64\",\n        base64url: \"\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64url\",\n        json_string: \"JSON \u0440\u0430\u0434\u043E\u043A\",\n        e164: \"\u043D\u0443\u043C\u0430\u0440 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0443\u0432\u043E\u0434\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u043B\u0456\u043A\",\n        array: \"\u043C\u0430\u0441\u0456\u045E\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F instanceof ${issue.expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`;\n                }\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F ${expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0432\u0430\u0440\u044B\u044F\u043D\u0442: \u0447\u0430\u043A\u0430\u045E\u0441\u044F \u0430\u0434\u0437\u0456\u043D \u0437 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435\"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435\"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u043F\u0430\u0447\u044B\u043D\u0430\u0446\u0446\u0430 \u0437 \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u0430\u043A\u0430\u043D\u0447\u0432\u0430\u0446\u0446\u0430 \u043D\u0430 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u043C\u044F\u0448\u0447\u0430\u0446\u044C \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0430\u0434\u043F\u0430\u0432\u044F\u0434\u0430\u0446\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043B\u0456\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0431\u044B\u0446\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u041D\u0435\u0440\u0430\u0441\u043F\u0430\u0437\u043D\u0430\u043D\u044B ${issue.keys.length > 1 ? \"\u043A\u043B\u044E\u0447\u044B\" : \"\u043A\u043B\u044E\u0447\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043A\u043B\u044E\u0447 \u0443 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434\";\n            case \"invalid_element\":\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u0430\u0435 \u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435 \u045E ${issue.origin}`;\n            default:\n                return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n        file: { unit: \"\u0431\u0430\u0439\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n        array: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n        set: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0432\u0445\u043E\u0434\",\n        email: \"\u0438\u043C\u0435\u0439\u043B \u0430\u0434\u0440\u0435\u0441\",\n        url: \"URL\",\n        emoji: \"\u0435\u043C\u043E\u0434\u0436\u0438\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n        date: \"ISO \u0434\u0430\u0442\u0430\",\n        time: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n        duration: \"ISO \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442\",\n        ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\",\n        ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\",\n        cidrv4: \"IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n        cidrv6: \"IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n        base64: \"base64-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437\",\n        base64url: \"base64url-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437\",\n        json_string: \"JSON \u043D\u0438\u0437\",\n        e164: \"E.164 \u043D\u043E\u043C\u0435\u0440\",\n        jwt: \"JWT\",\n        template_literal: \"\u0432\u0445\u043E\u0434\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0447\u0438\u0441\u043B\u043E\",\n        array: \"\u043C\u0430\u0441\u0438\u0432\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D instanceof ${issue.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`;\n                }\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u043E\u043F\u0446\u0438\u044F: \u043E\u0447\u0430\u043A\u0432\u0430\u043D\u043E \u0435\u0434\u043D\u043E \u043E\u0442 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin ?? \"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442\"} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\"}`;\n                return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin ?? \"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442\"} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u0432\u0430 \u0441 \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u0432\u044A\u0440\u0448\u0432\u0430 \u0441 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0432\u0430 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0441\u044A\u0432\u043F\u0430\u0434\u0430 \u0441 ${_issue.pattern}`;\n                let invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D\";\n                if (_issue.format === \"emoji\")\n                    invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n                if (_issue.format === \"datetime\")\n                    invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n                if (_issue.format === \"date\")\n                    invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430\";\n                if (_issue.format === \"time\")\n                    invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n                if (_issue.format === \"duration\")\n                    invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430\";\n                return `${invalid_adj} ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E \u0447\u0438\u0441\u043B\u043E: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0431\u044A\u0434\u0435 \u043A\u0440\u0430\u0442\u043D\u043E \u043D\u0430 ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u041D\u0435\u0440\u0430\u0437\u043F\u043E\u0437\u043D\u0430\u0442${issue.keys.length > 1 ? \"\u0438\" : \"\"} \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u043E\u0432\u0435\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043A\u043B\u044E\u0447 \u0432 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434\";\n            case \"invalid_element\":\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442 \u0432 ${issue.origin}`;\n            default:\n                return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"car\u00E0cters\", verb: \"contenir\" },\n        file: { unit: \"bytes\", verb: \"contenir\" },\n        array: { unit: \"elements\", verb: \"contenir\" },\n        set: { unit: \"elements\", verb: \"contenir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entrada\",\n        email: \"adre\u00E7a electr\u00F2nica\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data i hora ISO\",\n        date: \"data ISO\",\n        time: \"hora ISO\",\n        duration: \"durada ISO\",\n        ipv4: \"adre\u00E7a IPv4\",\n        ipv6: \"adre\u00E7a IPv6\",\n        cidrv4: \"rang IPv4\",\n        cidrv6: \"rang IPv6\",\n        base64: \"cadena codificada en base64\",\n        base64url: \"cadena codificada en base64url\",\n        json_string: \"cadena JSON\",\n        e164: \"n\u00FAmero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Tipus inv\u00E0lid: s'esperava instanceof ${issue.expected}, s'ha rebut ${received}`;\n                }\n                return `Tipus inv\u00E0lid: s'esperava ${expected}, s'ha rebut ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Valor inv\u00E0lid: s'esperava ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opci\u00F3 inv\u00E0lida: s'esperava una de ${util.joinValues(issue.values, \" o \")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"com a m\u00E0xim\" : \"menys de\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} contingu\u00E9s ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} fos ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"com a m\u00EDnim\" : \"m\u00E9s de\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Massa petit: s'esperava que ${issue.origin} contingu\u00E9s ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Massa petit: s'esperava que ${issue.origin} fos ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Format inv\u00E0lid: ha de comen\u00E7ar amb \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Format inv\u00E0lid: ha d'acabar amb \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Format inv\u00E0lid: ha d'incloure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Format inv\u00E0lid: ha de coincidir amb el patr\u00F3 ${_issue.pattern}`;\n                return `Format inv\u00E0lid per a ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `N\u00FAmero inv\u00E0lid: ha de ser m\u00FAltiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Clau${issue.keys.length > 1 ? \"s\" : \"\"} no reconeguda${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Clau inv\u00E0lida a ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada inv\u00E0lida\"; // Could also be \"Tipus d'uni\u00F3 inv\u00E0lid\" but \"Entrada inv\u00E0lida\" is more general\n            case \"invalid_element\":\n                return `Element inv\u00E0lid a ${issue.origin}`;\n            default:\n                return `Entrada inv\u00E0lida`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znak\u016F\", verb: \"m\u00EDt\" },\n        file: { unit: \"bajt\u016F\", verb: \"m\u00EDt\" },\n        array: { unit: \"prvk\u016F\", verb: \"m\u00EDt\" },\n        set: { unit: \"prvk\u016F\", verb: \"m\u00EDt\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"regul\u00E1rn\u00ED v\u00FDraz\",\n        email: \"e-mailov\u00E1 adresa\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"datum a \u010Das ve form\u00E1tu ISO\",\n        date: \"datum ve form\u00E1tu ISO\",\n        time: \"\u010Das ve form\u00E1tu ISO\",\n        duration: \"doba trv\u00E1n\u00ED ISO\",\n        ipv4: \"IPv4 adresa\",\n        ipv6: \"IPv6 adresa\",\n        cidrv4: \"rozsah IPv4\",\n        cidrv6: \"rozsah IPv6\",\n        base64: \"\u0159et\u011Bzec zak\u00F3dovan\u00FD ve form\u00E1tu base64\",\n        base64url: \"\u0159et\u011Bzec zak\u00F3dovan\u00FD ve form\u00E1tu base64url\",\n        json_string: \"\u0159et\u011Bzec ve form\u00E1tu JSON\",\n        e164: \"\u010D\u00EDslo E.164\",\n        jwt: \"JWT\",\n        template_literal: \"vstup\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u010D\u00EDslo\",\n        string: \"\u0159et\u011Bzec\",\n        function: \"funkce\",\n        array: \"pole\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no instanceof ${issue.expected}, obdr\u017Eeno ${received}`;\n                }\n                return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no ${expected}, obdr\u017Eeno ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neplatn\u00E1 mo\u017Enost: o\u010Dek\u00E1v\u00E1na jedna z hodnot ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Hodnota je p\u0159\u00EDli\u0161 velk\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED m\u00EDt ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"prvk\u016F\"}`;\n                }\n                return `Hodnota je p\u0159\u00EDli\u0161 velk\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED b\u00FDt ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Hodnota je p\u0159\u00EDli\u0161 mal\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED m\u00EDt ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"prvk\u016F\"}`;\n                }\n                return `Hodnota je p\u0159\u00EDli\u0161 mal\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED b\u00FDt ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED za\u010D\u00EDnat na \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED kon\u010Dit na \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED obsahovat \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED odpov\u00EDdat vzoru ${_issue.pattern}`;\n                return `Neplatn\u00FD form\u00E1t ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neplatn\u00E9 \u010D\u00EDslo: mus\u00ED b\u00FDt n\u00E1sobkem ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nezn\u00E1m\u00E9 kl\u00ED\u010De: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neplatn\u00FD kl\u00ED\u010D v ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Neplatn\u00FD vstup\";\n            case \"invalid_element\":\n                return `Neplatn\u00E1 hodnota v ${issue.origin}`;\n            default:\n                return `Neplatn\u00FD vstup`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tegn\", verb: \"havde\" },\n        file: { unit: \"bytes\", verb: \"havde\" },\n        array: { unit: \"elementer\", verb: \"indeholdt\" },\n        set: { unit: \"elementer\", verb: \"indeholdt\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"e-mailadresse\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dato- og klokkesl\u00E6t\",\n        date: \"ISO-dato\",\n        time: \"ISO-klokkesl\u00E6t\",\n        duration: \"ISO-varighed\",\n        ipv4: \"IPv4-omr\u00E5de\",\n        ipv6: \"IPv6-omr\u00E5de\",\n        cidrv4: \"IPv4-spektrum\",\n        cidrv6: \"IPv6-spektrum\",\n        base64: \"base64-kodet streng\",\n        base64url: \"base64url-kodet streng\",\n        json_string: \"JSON-streng\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"streng\",\n        number: \"tal\",\n        boolean: \"boolean\",\n        array: \"liste\",\n        object: \"objekt\",\n        set: \"s\u00E6t\",\n        file: \"fil\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ugyldigt input: forventede instanceof ${issue.expected}, fik ${received}`;\n                }\n                return `Ugyldigt input: forventede ${expected}, fik ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ugyldig v\u00E6rdi: forventede ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ugyldigt valg: forventede en af f\u00F8lgende ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing)\n                    return `For stor: forventede ${origin ?? \"value\"} ${sizing.verb} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n                return `For stor: forventede ${origin ?? \"value\"} havde ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing) {\n                    return `For lille: forventede ${origin} ${sizing.verb} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `For lille: forventede ${origin} havde ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ugyldig streng: skal starte med \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Ugyldig streng: skal ende med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ugyldig streng: skal indeholde \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ugyldig streng: skal matche m\u00F8nsteret ${_issue.pattern}`;\n                return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ugyldigt tal: skal v\u00E6re deleligt med ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ukendte n\u00F8gler\" : \"Ukendt n\u00F8gle\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ugyldig n\u00F8gle i ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ugyldigt input: matcher ingen af de tilladte typer\";\n            case \"invalid_element\":\n                return `Ugyldig v\u00E6rdi i ${issue.origin}`;\n            default:\n                return `Ugyldigt input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"Zeichen\", verb: \"zu haben\" },\n        file: { unit: \"Bytes\", verb: \"zu haben\" },\n        array: { unit: \"Elemente\", verb: \"zu haben\" },\n        set: { unit: \"Elemente\", verb: \"zu haben\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"Eingabe\",\n        email: \"E-Mail-Adresse\",\n        url: \"URL\",\n        emoji: \"Emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-Datum und -Uhrzeit\",\n        date: \"ISO-Datum\",\n        time: \"ISO-Uhrzeit\",\n        duration: \"ISO-Dauer\",\n        ipv4: \"IPv4-Adresse\",\n        ipv6: \"IPv6-Adresse\",\n        cidrv4: \"IPv4-Bereich\",\n        cidrv6: \"IPv6-Bereich\",\n        base64: \"Base64-codierter String\",\n        base64url: \"Base64-URL-codierter String\",\n        json_string: \"JSON-String\",\n        e164: \"E.164-Nummer\",\n        jwt: \"JWT\",\n        template_literal: \"Eingabe\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"Zahl\",\n        array: \"Array\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ung\u00FCltige Eingabe: erwartet instanceof ${issue.expected}, erhalten ${received}`;\n                }\n                return `Ung\u00FCltige Eingabe: erwartet ${expected}, erhalten ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ung\u00FCltige Eingabe: erwartet ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ung\u00FCltige Option: erwartet eine von ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Zu gro\u00DF: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"Elemente\"} hat`;\n                return `Zu gro\u00DF: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ist`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} hat`;\n                }\n                return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ist`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ung\u00FCltiger String: muss mit \"${_issue.prefix}\" beginnen`;\n                if (_issue.format === \"ends_with\")\n                    return `Ung\u00FCltiger String: muss mit \"${_issue.suffix}\" enden`;\n                if (_issue.format === \"includes\")\n                    return `Ung\u00FCltiger String: muss \"${_issue.includes}\" enthalten`;\n                if (_issue.format === \"regex\")\n                    return `Ung\u00FCltiger String: muss dem Muster ${_issue.pattern} entsprechen`;\n                return `Ung\u00FCltig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ung\u00FCltige Zahl: muss ein Vielfaches von ${issue.divisor} sein`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Unbekannte Schl\u00FCssel\" : \"Unbekannter Schl\u00FCssel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ung\u00FCltiger Schl\u00FCssel in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ung\u00FCltige Eingabe\";\n            case \"invalid_element\":\n                return `Ung\u00FCltiger Wert in ${issue.origin}`;\n            default:\n                return `Ung\u00FCltige Eingabe`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"characters\", verb: \"to have\" },\n        file: { unit: \"bytes\", verb: \"to have\" },\n        array: { unit: \"items\", verb: \"to have\" },\n        set: { unit: \"items\", verb: \"to have\" },\n        map: { unit: \"entries\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        mac: \"MAC address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    // type names: missing keys = do not translate (use raw value via ?? fallback)\n    const TypeDictionary = {\n        // Compatibility: \"nan\" -> \"NaN\" for display\n        nan: \"NaN\",\n        // All other type names omitted - they fall back to raw values via ?? operator\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                return `Invalid input: expected ${expected}, received ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Invalid string: must start with \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Invalid string: must end with \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Invalid string: must include \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Invalid string: must match pattern ${_issue.pattern}`;\n                return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Invalid number: must be a multiple of ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Invalid key in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Invalid input\";\n            case \"invalid_element\":\n                return `Invalid value in ${issue.origin}`;\n            default:\n                return `Invalid input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karaktrojn\", verb: \"havi\" },\n        file: { unit: \"bajtojn\", verb: \"havi\" },\n        array: { unit: \"elementojn\", verb: \"havi\" },\n        set: { unit: \"elementojn\", verb: \"havi\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"enigo\",\n        email: \"retadreso\",\n        url: \"URL\",\n        emoji: \"emo\u011Dio\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-datotempo\",\n        date: \"ISO-dato\",\n        time: \"ISO-tempo\",\n        duration: \"ISO-da\u016Dro\",\n        ipv4: \"IPv4-adreso\",\n        ipv6: \"IPv6-adreso\",\n        cidrv4: \"IPv4-rango\",\n        cidrv6: \"IPv6-rango\",\n        base64: \"64-ume kodita karaktraro\",\n        base64url: \"URL-64-ume kodita karaktraro\",\n        json_string: \"JSON-karaktraro\",\n        e164: \"E.164-nombro\",\n        jwt: \"JWT\",\n        template_literal: \"enigo\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"nombro\",\n        array: \"tabelo\",\n        null: \"senvalora\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Nevalida enigo: atendi\u011Dis instanceof ${issue.expected}, ricevi\u011Dis ${received}`;\n                }\n                return `Nevalida enigo: atendi\u011Dis ${expected}, ricevi\u011Dis ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Nevalida enigo: atendi\u011Dis ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Nevalida opcio: atendi\u011Dis unu el ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Tro granda: atendi\u011Dis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementojn\"}`;\n                return `Tro granda: atendi\u011Dis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Tro malgranda: atendi\u011Dis ke ${issue.origin} havu ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Tro malgranda: atendi\u011Dis ke ${issue.origin} estu ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Nevalida karaktraro: devas komenci\u011Di per \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Nevalida karaktraro: devas fini\u011Di per \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Nevalida karaktraro: devas inkluzivi \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`;\n                return `Nevalida ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Nevalida nombro: devas esti oblo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nekonata${issue.keys.length > 1 ? \"j\" : \"\"} \u015Dlosilo${issue.keys.length > 1 ? \"j\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Nevalida \u015Dlosilo en ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Nevalida enigo\";\n            case \"invalid_element\":\n                return `Nevalida valoro en ${issue.origin}`;\n            default:\n                return `Nevalida enigo`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caracteres\", verb: \"tener\" },\n        file: { unit: \"bytes\", verb: \"tener\" },\n        array: { unit: \"elementos\", verb: \"tener\" },\n        set: { unit: \"elementos\", verb: \"tener\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entrada\",\n        email: \"direcci\u00F3n de correo electr\u00F3nico\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"fecha y hora ISO\",\n        date: \"fecha ISO\",\n        time: \"hora ISO\",\n        duration: \"duraci\u00F3n ISO\",\n        ipv4: \"direcci\u00F3n IPv4\",\n        ipv6: \"direcci\u00F3n IPv6\",\n        cidrv4: \"rango IPv4\",\n        cidrv6: \"rango IPv6\",\n        base64: \"cadena codificada en base64\",\n        base64url: \"URL codificada en base64\",\n        json_string: \"cadena JSON\",\n        e164: \"n\u00FAmero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        string: \"texto\",\n        number: \"n\u00FAmero\",\n        boolean: \"booleano\",\n        array: \"arreglo\",\n        object: \"objeto\",\n        set: \"conjunto\",\n        file: \"archivo\",\n        date: \"fecha\",\n        bigint: \"n\u00FAmero grande\",\n        symbol: \"s\u00EDmbolo\",\n        undefined: \"indefinido\",\n        null: \"nulo\",\n        function: \"funci\u00F3n\",\n        map: \"mapa\",\n        record: \"registro\",\n        tuple: \"tupla\",\n        enum: \"enumeraci\u00F3n\",\n        union: \"uni\u00F3n\",\n        literal: \"literal\",\n        promise: \"promesa\",\n        void: \"vac\u00EDo\",\n        never: \"nunca\",\n        unknown: \"desconocido\",\n        any: \"cualquiera\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Entrada inv\u00E1lida: se esperaba instanceof ${issue.expected}, recibido ${received}`;\n                }\n                return `Entrada inv\u00E1lida: se esperaba ${expected}, recibido ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrada inv\u00E1lida: se esperaba ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opci\u00F3n inv\u00E1lida: se esperaba una de ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing)\n                    return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} tuviera ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n                return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} fuera ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                if (sizing) {\n                    return `Demasiado peque\u00F1o: se esperaba que ${origin} tuviera ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Demasiado peque\u00F1o: se esperaba que ${origin} fuera ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Cadena inv\u00E1lida: debe comenzar con \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Cadena inv\u00E1lida: debe terminar en \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Cadena inv\u00E1lida: debe incluir \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Cadena inv\u00E1lida: debe coincidir con el patr\u00F3n ${_issue.pattern}`;\n                return `Inv\u00E1lido ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `N\u00FAmero inv\u00E1lido: debe ser m\u00FAltiplo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Llave${issue.keys.length > 1 ? \"s\" : \"\"} desconocida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Llave inv\u00E1lida en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada inv\u00E1lida\";\n            case \"invalid_element\":\n                return `Valor inv\u00E1lido en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n            default:\n                return `Entrada inv\u00E1lida`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n        file: { unit: \"\u0628\u0627\u06CC\u062A\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n        array: { unit: \"\u0622\u06CC\u062A\u0645\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n        set: { unit: \"\u0622\u06CC\u062A\u0645\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0648\u0631\u0648\u062F\u06CC\",\n        email: \"\u0622\u062F\u0631\u0633 \u0627\u06CC\u0645\u06CC\u0644\",\n        url: \"URL\",\n        emoji: \"\u0627\u06CC\u0645\u0648\u062C\u06CC\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u062A\u0627\u0631\u06CC\u062E \u0648 \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n        date: \"\u062A\u0627\u0631\u06CC\u062E \u0627\u06CC\u0632\u0648\",\n        time: \"\u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n        duration: \"\u0645\u062F\u062A \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n        ipv4: \"IPv4 \u0622\u062F\u0631\u0633\",\n        ipv6: \"IPv6 \u0622\u062F\u0631\u0633\",\n        cidrv4: \"IPv4 \u062F\u0627\u0645\u0646\u0647\",\n        cidrv6: \"IPv6 \u062F\u0627\u0645\u0646\u0647\",\n        base64: \"base64-encoded \u0631\u0634\u062A\u0647\",\n        base64url: \"base64url-encoded \u0631\u0634\u062A\u0647\",\n        json_string: \"JSON \u0631\u0634\u062A\u0647\",\n        e164: \"E.164 \u0639\u062F\u062F\",\n        jwt: \"JWT\",\n        template_literal: \"\u0648\u0631\u0648\u062F\u06CC\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0639\u062F\u062F\",\n        array: \"\u0622\u0631\u0627\u06CC\u0647\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A instanceof ${issue.expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`;\n                }\n                return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1) {\n                    return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${util.stringifyPrimitive(issue.values[0])} \u0645\u06CC\u200C\u0628\u0648\u062F`;\n                }\n                return `\u06AF\u0632\u06CC\u0646\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A \u06CC\u06A9\u06CC \u0627\u0632 ${util.joinValues(issue.values, \"|\")} \u0645\u06CC\u200C\u0628\u0648\u062F`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue.origin ?? \"\u0645\u0642\u062F\u0627\u0631\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\"} \u0628\u0627\u0634\u062F`;\n                }\n                return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue.origin ?? \"\u0645\u0642\u062F\u0627\u0631\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} \u0628\u0627\u0634\u062F`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} ${sizing.unit} \u0628\u0627\u0634\u062F`;\n                }\n                return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} \u0628\u0627\u0634\u062F`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \"${_issue.prefix}\" \u0634\u0631\u0648\u0639 \u0634\u0648\u062F`;\n                }\n                if (_issue.format === \"ends_with\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \"${_issue.suffix}\" \u062A\u0645\u0627\u0645 \u0634\u0648\u062F`;\n                }\n                if (_issue.format === \"includes\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0634\u0627\u0645\u0644 \"${_issue.includes}\" \u0628\u0627\u0634\u062F`;\n                }\n                if (_issue.format === \"regex\") {\n                    return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \u0627\u0644\u06AF\u0648\u06CC ${_issue.pattern} \u0645\u0637\u0627\u0628\u0642\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F`;\n                }\n                return `${FormatDictionary[_issue.format] ?? issue.format} \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n            }\n            case \"not_multiple_of\":\n                return `\u0639\u062F\u062F \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0645\u0636\u0631\u0628 ${issue.divisor} \u0628\u0627\u0634\u062F`;\n            case \"unrecognized_keys\":\n                return `\u06A9\u0644\u06CC\u062F${issue.keys.length > 1 ? \"\u0647\u0627\u06CC\" : \"\"} \u0646\u0627\u0634\u0646\u0627\u0633: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u06A9\u0644\u06CC\u062F \u0646\u0627\u0634\u0646\u0627\u0633 \u062F\u0631 ${issue.origin}`;\n            case \"invalid_union\":\n                return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n            case \"invalid_element\":\n                return `\u0645\u0642\u062F\u0627\u0631 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u062F\u0631 ${issue.origin}`;\n            default:\n                return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"merkki\u00E4\", subject: \"merkkijonon\" },\n        file: { unit: \"tavua\", subject: \"tiedoston\" },\n        array: { unit: \"alkiota\", subject: \"listan\" },\n        set: { unit: \"alkiota\", subject: \"joukon\" },\n        number: { unit: \"\", subject: \"luvun\" },\n        bigint: { unit: \"\", subject: \"suuren kokonaisluvun\" },\n        int: { unit: \"\", subject: \"kokonaisluvun\" },\n        date: { unit: \"\", subject: \"p\u00E4iv\u00E4m\u00E4\u00E4r\u00E4n\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"s\u00E4\u00E4nn\u00F6llinen lauseke\",\n        email: \"s\u00E4hk\u00F6postiosoite\",\n        url: \"URL-osoite\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-aikaleima\",\n        date: \"ISO-p\u00E4iv\u00E4m\u00E4\u00E4r\u00E4\",\n        time: \"ISO-aika\",\n        duration: \"ISO-kesto\",\n        ipv4: \"IPv4-osoite\",\n        ipv6: \"IPv6-osoite\",\n        cidrv4: \"IPv4-alue\",\n        cidrv6: \"IPv6-alue\",\n        base64: \"base64-koodattu merkkijono\",\n        base64url: \"base64url-koodattu merkkijono\",\n        json_string: \"JSON-merkkijono\",\n        e164: \"E.164-luku\",\n        jwt: \"JWT\",\n        template_literal: \"templaattimerkkijono\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Virheellinen tyyppi: odotettiin instanceof ${issue.expected}, oli ${received}`;\n                }\n                return `Virheellinen tyyppi: odotettiin ${expected}, oli ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy olla ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Virheellinen valinta: t\u00E4ytyy olla yksi seuraavista: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Liian suuri: ${sizing.subject} t\u00E4ytyy olla ${adj}${issue.maximum.toString()} ${sizing.unit}`.trim();\n                }\n                return `Liian suuri: arvon t\u00E4ytyy olla ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Liian pieni: ${sizing.subject} t\u00E4ytyy olla ${adj}${issue.minimum.toString()} ${sizing.unit}`.trim();\n                }\n                return `Liian pieni: arvon t\u00E4ytyy olla ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy alkaa \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy loppua \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy sis\u00E4lt\u00E4\u00E4 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\") {\n                    return `Virheellinen sy\u00F6te: t\u00E4ytyy vastata s\u00E4\u00E4nn\u00F6llist\u00E4 lauseketta ${_issue.pattern}`;\n                }\n                return `Virheellinen ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Virheellinen luku: t\u00E4ytyy olla luvun ${issue.divisor} monikerta`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Tuntemattomat avaimet\" : \"Tuntematon avain\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return \"Virheellinen avain tietueessa\";\n            case \"invalid_union\":\n                return \"Virheellinen unioni\";\n            case \"invalid_element\":\n                return \"Virheellinen arvo joukossa\";\n            default:\n                return `Virheellinen sy\u00F6te`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caract\u00E8res\", verb: \"avoir\" },\n        file: { unit: \"octets\", verb: \"avoir\" },\n        array: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n        set: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entr\u00E9e\",\n        email: \"adresse e-mail\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"date et heure ISO\",\n        date: \"date ISO\",\n        time: \"heure ISO\",\n        duration: \"dur\u00E9e ISO\",\n        ipv4: \"adresse IPv4\",\n        ipv6: \"adresse IPv6\",\n        cidrv4: \"plage IPv4\",\n        cidrv6: \"plage IPv6\",\n        base64: \"cha\u00EEne encod\u00E9e en base64\",\n        base64url: \"cha\u00EEne encod\u00E9e en base64url\",\n        json_string: \"cha\u00EEne JSON\",\n        e164: \"num\u00E9ro E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entr\u00E9e\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"nombre\",\n        array: \"tableau\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Entr\u00E9e invalide : instanceof ${issue.expected} attendu, ${received} re\u00E7u`;\n                }\n                return `Entr\u00E9e invalide : ${expected} attendu, ${received} re\u00E7u`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entr\u00E9e invalide : ${util.stringifyPrimitive(issue.values[0])} attendu`;\n                return `Option invalide : une valeur parmi ${util.joinValues(issue.values, \"|\")} attendue`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Trop grand : ${issue.origin ?? \"valeur\"} doit ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u00E9l\u00E9ment(s)\"}`;\n                return `Trop grand : ${issue.origin ?? \"valeur\"} doit \u00EAtre ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Trop petit : ${issue.origin} doit ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Trop petit : ${issue.origin} doit \u00EAtre ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Cha\u00EEne invalide : doit commencer par \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Cha\u00EEne invalide : doit se terminer par \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Cha\u00EEne invalide : doit inclure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Cha\u00EEne invalide : doit correspondre au mod\u00E8le ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n            }\n            case \"not_multiple_of\":\n                return `Nombre invalide : doit \u00EAtre un multiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Cl\u00E9${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Cl\u00E9 invalide dans ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entr\u00E9e invalide\";\n            case \"invalid_element\":\n                return `Valeur invalide dans ${issue.origin}`;\n            default:\n                return `Entr\u00E9e invalide`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caract\u00E8res\", verb: \"avoir\" },\n        file: { unit: \"octets\", verb: \"avoir\" },\n        array: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n        set: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"entr\u00E9e\",\n        email: \"adresse courriel\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"date-heure ISO\",\n        date: \"date ISO\",\n        time: \"heure ISO\",\n        duration: \"dur\u00E9e ISO\",\n        ipv4: \"adresse IPv4\",\n        ipv6: \"adresse IPv6\",\n        cidrv4: \"plage IPv4\",\n        cidrv6: \"plage IPv6\",\n        base64: \"cha\u00EEne encod\u00E9e en base64\",\n        base64url: \"cha\u00EEne encod\u00E9e en base64url\",\n        json_string: \"cha\u00EEne JSON\",\n        e164: \"num\u00E9ro E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entr\u00E9e\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Entr\u00E9e invalide : attendu instanceof ${issue.expected}, re\u00E7u ${received}`;\n                }\n                return `Entr\u00E9e invalide : attendu ${expected}, re\u00E7u ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entr\u00E9e invalide : attendu ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Option invalide : attendu l'une des valeurs suivantes ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\u2264\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} ait ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} soit ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\u2265\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Trop petit : attendu que ${issue.origin} ait ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Trop petit : attendu que ${issue.origin} soit ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Cha\u00EEne invalide : doit commencer par \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Cha\u00EEne invalide : doit se terminer par \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Cha\u00EEne invalide : doit inclure \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Cha\u00EEne invalide : doit correspondre au motif ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n            }\n            case \"not_multiple_of\":\n                return `Nombre invalide : doit \u00EAtre un multiple de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Cl\u00E9${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Cl\u00E9 invalide dans ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entr\u00E9e invalide\";\n            case \"invalid_element\":\n                return `Valeur invalide dans ${issue.origin}`;\n            default:\n                return `Entr\u00E9e invalide`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    // Hebrew labels + grammatical gender\n    const TypeNames = {\n        string: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA\", gender: \"f\" },\n        number: { label: \"\u05DE\u05E1\u05E4\u05E8\", gender: \"m\" },\n        boolean: { label: \"\u05E2\u05E8\u05DA \u05D1\u05D5\u05DC\u05D9\u05D0\u05E0\u05D9\", gender: \"m\" },\n        bigint: { label: \"BigInt\", gender: \"m\" },\n        date: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA\", gender: \"m\" },\n        array: { label: \"\u05DE\u05E2\u05E8\u05DA\", gender: \"m\" },\n        object: { label: \"\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8\", gender: \"m\" },\n        null: { label: \"\u05E2\u05E8\u05DA \u05E8\u05D9\u05E7 (null)\", gender: \"m\" },\n        undefined: { label: \"\u05E2\u05E8\u05DA \u05DC\u05D0 \u05DE\u05D5\u05D2\u05D3\u05E8 (undefined)\", gender: \"m\" },\n        symbol: { label: \"\u05E1\u05D9\u05DE\u05D1\u05D5\u05DC (Symbol)\", gender: \"m\" },\n        function: { label: \"\u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D4\", gender: \"f\" },\n        map: { label: \"\u05DE\u05E4\u05D4 (Map)\", gender: \"f\" },\n        set: { label: \"\u05E7\u05D1\u05D5\u05E6\u05D4 (Set)\", gender: \"f\" },\n        file: { label: \"\u05E7\u05D5\u05D1\u05E5\", gender: \"m\" },\n        promise: { label: \"Promise\", gender: \"m\" },\n        NaN: { label: \"NaN\", gender: \"m\" },\n        unknown: { label: \"\u05E2\u05E8\u05DA \u05DC\u05D0 \u05D9\u05D3\u05D5\u05E2\", gender: \"m\" },\n        value: { label: \"\u05E2\u05E8\u05DA\", gender: \"m\" },\n    };\n    // Sizing units for size-related messages + localized origin labels\n    const Sizable = {\n        string: { unit: \"\u05EA\u05D5\u05D5\u05D9\u05DD\", shortLabel: \"\u05E7\u05E6\u05E8\", longLabel: \"\u05D0\u05E8\u05D5\u05DA\" },\n        file: { unit: \"\u05D1\u05D9\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n        array: { unit: \"\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n        set: { unit: \"\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n        number: { unit: \"\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" }, // no unit\n    };\n    // Helpers \u2014 labels, articles, and verbs\n    const typeEntry = (t) => (t ? TypeNames[t] : undefined);\n    const typeLabel = (t) => {\n        const e = typeEntry(t);\n        if (e)\n            return e.label;\n        // fallback: show raw string if unknown\n        return t ?? TypeNames.unknown.label;\n    };\n    const withDefinite = (t) => `\u05D4${typeLabel(t)}`;\n    const verbFor = (t) => {\n        const e = typeEntry(t);\n        const gender = e?.gender ?? \"m\";\n        return gender === \"f\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05D9\u05D5\u05EA\" : \"\u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA\";\n    };\n    const getSizing = (origin) => {\n        if (!origin)\n            return null;\n        return Sizable[origin] ?? null;\n    };\n    const FormatDictionary = {\n        regex: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n        email: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA \u05D0\u05D9\u05DE\u05D9\u05D9\u05DC\", gender: \"f\" },\n        url: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA \u05E8\u05E9\u05EA\", gender: \"f\" },\n        emoji: { label: \"\u05D0\u05D9\u05DE\u05D5\u05D2'\u05D9\", gender: \"m\" },\n        uuid: { label: \"UUID\", gender: \"m\" },\n        nanoid: { label: \"nanoid\", gender: \"m\" },\n        guid: { label: \"GUID\", gender: \"m\" },\n        cuid: { label: \"cuid\", gender: \"m\" },\n        cuid2: { label: \"cuid2\", gender: \"m\" },\n        ulid: { label: \"ULID\", gender: \"m\" },\n        xid: { label: \"XID\", gender: \"m\" },\n        ksuid: { label: \"KSUID\", gender: \"m\" },\n        datetime: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA \u05D5\u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n        date: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA ISO\", gender: \"m\" },\n        time: { label: \"\u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n        duration: { label: \"\u05DE\u05E9\u05DA \u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n        ipv4: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA IPv4\", gender: \"f\" },\n        ipv6: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA IPv6\", gender: \"f\" },\n        cidrv4: { label: \"\u05D8\u05D5\u05D5\u05D7 IPv4\", gender: \"m\" },\n        cidrv6: { label: \"\u05D8\u05D5\u05D5\u05D7 IPv6\", gender: \"m\" },\n        base64: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64\", gender: \"f\" },\n        base64url: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64 \u05DC\u05DB\u05EA\u05D5\u05D1\u05D5\u05EA \u05E8\u05E9\u05EA\", gender: \"f\" },\n        json_string: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA JSON\", gender: \"f\" },\n        e164: { label: \"\u05DE\u05E1\u05E4\u05E8 E.164\", gender: \"m\" },\n        jwt: { label: \"JWT\", gender: \"m\" },\n        ends_with: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n        includes: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n        lowercase: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n        starts_with: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n        uppercase: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                // Expected type: show without definite article for clearer Hebrew\n                const expectedKey = issue.expected;\n                const expected = TypeDictionary[expectedKey ?? \"\"] ?? typeLabel(expectedKey);\n                // Received: show localized label if known, otherwise constructor/raw\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? TypeNames[receivedType]?.label ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA instanceof ${issue.expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`;\n                }\n                return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`;\n            }\n            case \"invalid_value\": {\n                if (issue.values.length === 1) {\n                    return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05E2\u05E8\u05DA \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA ${util.stringifyPrimitive(issue.values[0])}`;\n                }\n                // Join values with proper Hebrew formatting\n                const stringified = issue.values.map((v) => util.stringifyPrimitive(v));\n                if (issue.values.length === 2) {\n                    return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${stringified[0]} \u05D0\u05D5 ${stringified[1]}`;\n                }\n                // For 3+ values: \"a\", \"b\" \u05D0\u05D5 \"c\"\n                const lastValue = stringified[stringified.length - 1];\n                const restValues = stringified.slice(0, -1).join(\", \");\n                return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${restValues} \u05D0\u05D5 ${lastValue}`;\n            }\n            case \"too_big\": {\n                const sizing = getSizing(issue.origin);\n                const subject = withDefinite(issue.origin ?? \"value\");\n                if (issue.origin === \"string\") {\n                    // Special handling for strings - more natural Hebrew\n                    return `${sizing?.longLabel ?? \"\u05D0\u05E8\u05D5\u05DA\"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue.maximum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"\u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA\" : \"\u05DC\u05DB\u05DC \u05D4\u05D9\u05D5\u05EA\u05E8\"}`.trim();\n                }\n                if (issue.origin === \"number\") {\n                    // Natural Hebrew for numbers\n                    const comparison = issue.inclusive ? `\u05E7\u05D8\u05DF \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue.maximum}` : `\u05E7\u05D8\u05DF \u05DE-${issue.maximum}`;\n                    return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;\n                }\n                if (issue.origin === \"array\" || issue.origin === \"set\") {\n                    // Natural Hebrew for arrays and sets\n                    const verb = issue.origin === \"set\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4\" : \"\u05E6\u05E8\u05D9\u05DA\";\n                    const comparison = issue.inclusive\n                        ? `${issue.maximum} ${sizing?.unit ?? \"\"} \u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA`\n                        : `\u05E4\u05D7\u05D5\u05EA \u05DE-${issue.maximum} ${sizing?.unit ?? \"\"}`;\n                    return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();\n                }\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const be = verbFor(issue.origin ?? \"value\");\n                if (sizing?.unit) {\n                    return `${sizing.longLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                }\n                return `${sizing?.longLabel ?? \"\u05D2\u05D3\u05D5\u05DC\"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const sizing = getSizing(issue.origin);\n                const subject = withDefinite(issue.origin ?? \"value\");\n                if (issue.origin === \"string\") {\n                    // Special handling for strings - more natural Hebrew\n                    return `${sizing?.shortLabel ?? \"\u05E7\u05E6\u05E8\"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue.minimum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8\" : \"\u05DC\u05E4\u05D7\u05D5\u05EA\"}`.trim();\n                }\n                if (issue.origin === \"number\") {\n                    // Natural Hebrew for numbers\n                    const comparison = issue.inclusive ? `\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue.minimum}` : `\u05D2\u05D3\u05D5\u05DC \u05DE-${issue.minimum}`;\n                    return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;\n                }\n                if (issue.origin === \"array\" || issue.origin === \"set\") {\n                    // Natural Hebrew for arrays and sets\n                    const verb = issue.origin === \"set\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4\" : \"\u05E6\u05E8\u05D9\u05DA\";\n                    // Special case for singular (minimum === 1)\n                    if (issue.minimum === 1 && issue.inclusive) {\n                        const singularPhrase = issue.origin === \"set\" ? \"\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3\" : \"\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3\";\n                        return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${singularPhrase}`;\n                    }\n                    const comparison = issue.inclusive\n                        ? `${issue.minimum} ${sizing?.unit ?? \"\"} \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8`\n                        : `\u05D9\u05D5\u05EA\u05E8 \u05DE-${issue.minimum} ${sizing?.unit ?? \"\"}`;\n                    return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();\n                }\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const be = verbFor(issue.origin ?? \"value\");\n                if (sizing?.unit) {\n                    return `${sizing.shortLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `${sizing?.shortLabel ?? \"\u05E7\u05D8\u05DF\"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                // These apply to strings \u2014 use feminine grammar + \u05D4\u05F3 \u05D4\u05D9\u05D3\u05D9\u05E2\u05D4\n                if (_issue.format === \"starts_with\")\n                    return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D0\u05D9\u05DD \u05DC\u05EA\u05D1\u05E0\u05D9\u05EA ${_issue.pattern}`;\n                // Handle gender agreement for formats\n                const nounEntry = FormatDictionary[_issue.format];\n                const noun = nounEntry?.label ?? _issue.format;\n                const gender = nounEntry?.gender ?? \"m\";\n                const adjective = gender === \"f\" ? \"\u05EA\u05E7\u05D9\u05E0\u05D4\" : \"\u05EA\u05E7\u05D9\u05DF\";\n                return `${noun} \u05DC\u05D0 ${adjective}`;\n            }\n            case \"not_multiple_of\":\n                return `\u05DE\u05E1\u05E4\u05E8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05DB\u05E4\u05DC\u05D4 \u05E9\u05DC ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u05DE\u05E4\u05EA\u05D7${issue.keys.length > 1 ? \"\u05D5\u05EA\" : \"\"} \u05DC\u05D0 \u05DE\u05D6\u05D5\u05D4${issue.keys.length > 1 ? \"\u05D9\u05DD\" : \"\u05D4\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\": {\n                return `\u05E9\u05D3\u05D4 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8`;\n            }\n            case \"invalid_union\":\n                return \"\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF\";\n            case \"invalid_element\": {\n                const place = withDefinite(issue.origin ?? \"array\");\n                return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${place}`;\n            }\n            default:\n                return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"legyen\" },\n        file: { unit: \"byte\", verb: \"legyen\" },\n        array: { unit: \"elem\", verb: \"legyen\" },\n        set: { unit: \"elem\", verb: \"legyen\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"bemenet\",\n        email: \"email c\u00EDm\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO id\u0151b\u00E9lyeg\",\n        date: \"ISO d\u00E1tum\",\n        time: \"ISO id\u0151\",\n        duration: \"ISO id\u0151intervallum\",\n        ipv4: \"IPv4 c\u00EDm\",\n        ipv6: \"IPv6 c\u00EDm\",\n        cidrv4: \"IPv4 tartom\u00E1ny\",\n        cidrv6: \"IPv6 tartom\u00E1ny\",\n        base64: \"base64-k\u00F3dolt string\",\n        base64url: \"base64url-k\u00F3dolt string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 sz\u00E1m\",\n        jwt: \"JWT\",\n        template_literal: \"bemenet\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"sz\u00E1m\",\n        array: \"t\u00F6mb\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k instanceof ${issue.expected}, a kapott \u00E9rt\u00E9k ${received}`;\n                }\n                return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k ${expected}, a kapott \u00E9rt\u00E9k ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u00C9rv\u00E9nytelen opci\u00F3: valamelyik \u00E9rt\u00E9k v\u00E1rt ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `T\u00FAl nagy: ${issue.origin ?? \"\u00E9rt\u00E9k\"} m\u00E9rete t\u00FAl nagy ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elem\"}`;\n                return `T\u00FAl nagy: a bemeneti \u00E9rt\u00E9k ${issue.origin ?? \"\u00E9rt\u00E9k\"} t\u00FAl nagy: ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `T\u00FAl kicsi: a bemeneti \u00E9rt\u00E9k ${issue.origin} m\u00E9rete t\u00FAl kicsi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `T\u00FAl kicsi: a bemeneti \u00E9rt\u00E9k ${issue.origin} t\u00FAl kicsi ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u00C9rv\u00E9nytelen string: \"${_issue.prefix}\" \u00E9rt\u00E9kkel kell kezd\u0151dnie`;\n                if (_issue.format === \"ends_with\")\n                    return `\u00C9rv\u00E9nytelen string: \"${_issue.suffix}\" \u00E9rt\u00E9kkel kell v\u00E9gz\u0151dnie`;\n                if (_issue.format === \"includes\")\n                    return `\u00C9rv\u00E9nytelen string: \"${_issue.includes}\" \u00E9rt\u00E9ket kell tartalmaznia`;\n                if (_issue.format === \"regex\")\n                    return `\u00C9rv\u00E9nytelen string: ${_issue.pattern} mint\u00E1nak kell megfelelnie`;\n                return `\u00C9rv\u00E9nytelen ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u00C9rv\u00E9nytelen sz\u00E1m: ${issue.divisor} t\u00F6bbsz\u00F6r\u00F6s\u00E9nek kell lennie`;\n            case \"unrecognized_keys\":\n                return `Ismeretlen kulcs${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u00C9rv\u00E9nytelen kulcs ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u00C9rv\u00E9nytelen bemenet\";\n            case \"invalid_element\":\n                return `\u00C9rv\u00E9nytelen \u00E9rt\u00E9k: ${issue.origin}`;\n            default:\n                return `\u00C9rv\u00E9nytelen bemenet`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nfunction getArmenianPlural(count, one, many) {\n    return Math.abs(count) === 1 ? one : many;\n}\nfunction withDefiniteArticle(word) {\n    if (!word)\n        return \"\";\n    const vowels = [\"\u0561\", \"\u0565\", \"\u0568\", \"\u056B\", \"\u0578\", \"\u0578\u0582\", \"\u0585\"];\n    const lastChar = word[word.length - 1];\n    return word + (vowels.includes(lastChar) ? \"\u0576\" : \"\u0568\");\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"\u0576\u0577\u0561\u0576\",\n                many: \"\u0576\u0577\u0561\u0576\u0576\u0565\u0580\",\n            },\n            verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n        },\n        file: {\n            unit: {\n                one: \"\u0562\u0561\u0575\u0569\",\n                many: \"\u0562\u0561\u0575\u0569\u0565\u0580\",\n            },\n            verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n        },\n        array: {\n            unit: {\n                one: \"\u057F\u0561\u0580\u0580\",\n                many: \"\u057F\u0561\u0580\u0580\u0565\u0580\",\n            },\n            verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n        },\n        set: {\n            unit: {\n                one: \"\u057F\u0561\u0580\u0580\",\n                many: \"\u057F\u0561\u0580\u0580\u0565\u0580\",\n            },\n            verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0574\u0578\u0582\u057F\u0584\",\n        email: \"\u0567\u056C. \u0570\u0561\u057D\u0581\u0565\",\n        url: \"URL\",\n        emoji: \"\u0567\u0574\u0578\u057B\u056B\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E \u0587 \u056A\u0561\u0574\",\n        date: \"ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E\",\n        time: \"ISO \u056A\u0561\u0574\",\n        duration: \"ISO \u057F\u0587\u0578\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576\",\n        ipv4: \"IPv4 \u0570\u0561\u057D\u0581\u0565\",\n        ipv6: \"IPv6 \u0570\u0561\u057D\u0581\u0565\",\n        cidrv4: \"IPv4 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584\",\n        cidrv6: \"IPv6 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584\",\n        base64: \"base64 \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572\",\n        base64url: \"base64url \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572\",\n        json_string: \"JSON \u057F\u0578\u0572\",\n        e164: \"E.164 \u0570\u0561\u0574\u0561\u0580\",\n        jwt: \"JWT\",\n        template_literal: \"\u0574\u0578\u0582\u057F\u0584\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0569\u056B\u057E\",\n        array: \"\u0566\u0561\u0576\u0563\u057E\u0561\u056E\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 instanceof ${issue.expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`;\n                }\n                return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${util.stringifyPrimitive(issue.values[1])}`;\n                return `\u054D\u056D\u0561\u056C \u057F\u0561\u0580\u0562\u0565\u0580\u0561\u056F\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 \u0570\u0565\u057F\u0587\u0575\u0561\u056C\u0576\u0565\u0580\u056B\u0581 \u0574\u0565\u056F\u0568\u055D ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getArmenianPlural(maxValue, sizing.unit.one, sizing.unit.many);\n                    return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin ?? \"\u0561\u0580\u056A\u0565\u0584\")} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin ?? \"\u0561\u0580\u056A\u0565\u0584\")} \u056C\u056B\u0576\u056B ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getArmenianPlural(minValue, sizing.unit.one, sizing.unit.many);\n                    return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin)} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin)} \u056C\u056B\u0576\u056B ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057D\u056F\u057D\u057E\u056B \"${_issue.prefix}\"-\u0578\u057E`;\n                if (_issue.format === \"ends_with\")\n                    return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0561\u057E\u0561\u0580\u057F\u057E\u056B \"${_issue.suffix}\"-\u0578\u057E`;\n                if (_issue.format === \"includes\")\n                    return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057A\u0561\u0580\u0578\u0582\u0576\u0561\u056F\u056B \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0570\u0561\u0574\u0561\u057A\u0561\u057F\u0561\u057D\u056D\u0561\u0576\u056B ${_issue.pattern} \u0571\u0587\u0561\u0579\u0561\u0583\u056B\u0576`;\n                return `\u054D\u056D\u0561\u056C ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u054D\u056D\u0561\u056C \u0569\u056B\u057E\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0562\u0561\u0566\u0574\u0561\u057A\u0561\u057F\u056B\u056F \u056C\u056B\u0576\u056B ${issue.divisor}-\u056B`;\n            case \"unrecognized_keys\":\n                return `\u0549\u0573\u0561\u0576\u0561\u0579\u057E\u0561\u056E \u0562\u0561\u0576\u0561\u056C\u056B${issue.keys.length > 1 ? \"\u0576\u0565\u0580\" : \"\"}. ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u054D\u056D\u0561\u056C \u0562\u0561\u0576\u0561\u056C\u056B ${withDefiniteArticle(issue.origin)}-\u0578\u0582\u0574`;\n            case \"invalid_union\":\n                return \"\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\";\n            case \"invalid_element\":\n                return `\u054D\u056D\u0561\u056C \u0561\u0580\u056A\u0565\u0584 ${withDefiniteArticle(issue.origin)}-\u0578\u0582\u0574`;\n            default:\n                return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"memiliki\" },\n        file: { unit: \"byte\", verb: \"memiliki\" },\n        array: { unit: \"item\", verb: \"memiliki\" },\n        set: { unit: \"item\", verb: \"memiliki\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"alamat email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"tanggal dan waktu format ISO\",\n        date: \"tanggal format ISO\",\n        time: \"jam format ISO\",\n        duration: \"durasi format ISO\",\n        ipv4: \"alamat IPv4\",\n        ipv6: \"alamat IPv6\",\n        cidrv4: \"rentang alamat IPv4\",\n        cidrv6: \"rentang alamat IPv6\",\n        base64: \"string dengan enkode base64\",\n        base64url: \"string dengan enkode base64url\",\n        json_string: \"string JSON\",\n        e164: \"angka E.164\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Input tidak valid: diharapkan instanceof ${issue.expected}, diterima ${received}`;\n                }\n                return `Input tidak valid: diharapkan ${expected}, diterima ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input tidak valid: diharapkan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Pilihan tidak valid: diharapkan salah satu dari ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} memiliki ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n                return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} menjadi ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Terlalu kecil: diharapkan ${issue.origin} memiliki ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Terlalu kecil: diharapkan ${issue.origin} menjadi ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `String tidak valid: harus dimulai dengan \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `String tidak valid: harus berakhir dengan \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `String tidak valid: harus menyertakan \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `String tidak valid: harus sesuai pola ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} tidak valid`;\n            }\n            case \"not_multiple_of\":\n                return `Angka tidak valid: harus kelipatan dari ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kunci tidak dikenali ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kunci tidak valid di ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input tidak valid\";\n            case \"invalid_element\":\n                return `Nilai tidak valid di ${issue.origin}`;\n            default:\n                return `Input tidak valid`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"stafi\", verb: \"a\u00F0 hafa\" },\n        file: { unit: \"b\u00E6ti\", verb: \"a\u00F0 hafa\" },\n        array: { unit: \"hluti\", verb: \"a\u00F0 hafa\" },\n        set: { unit: \"hluti\", verb: \"a\u00F0 hafa\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"gildi\",\n        email: \"netfang\",\n        url: \"vefsl\u00F3\u00F0\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dagsetning og t\u00EDmi\",\n        date: \"ISO dagsetning\",\n        time: \"ISO t\u00EDmi\",\n        duration: \"ISO t\u00EDmalengd\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded strengur\",\n        base64url: \"base64url-encoded strengur\",\n        json_string: \"JSON strengur\",\n        e164: \"E.164 t\u00F6lugildi\",\n        jwt: \"JWT\",\n        template_literal: \"gildi\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"n\u00FAmer\",\n        array: \"fylki\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Rangt gildi: \u00DE\u00FA sl\u00F3st inn ${received} \u00FEar sem \u00E1 a\u00F0 vera instanceof ${issue.expected}`;\n                }\n                return `Rangt gildi: \u00DE\u00FA sl\u00F3st inn ${received} \u00FEar sem \u00E1 a\u00F0 vera ${expected}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Rangt gildi: gert r\u00E1\u00F0 fyrir ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u00D3gilt val: m\u00E1 vera eitt af eftirfarandi ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Of st\u00F3rt: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin ?? \"gildi\"} hafi ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"hluti\"}`;\n                return `Of st\u00F3rt: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin ?? \"gildi\"} s\u00E9 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Of l\u00EDti\u00F0: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin} hafi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Of l\u00EDti\u00F0: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin} s\u00E9 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 byrja \u00E1 \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 enda \u00E1 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 innihalda \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 fylgja mynstri ${_issue.pattern}`;\n                return `Rangt ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `R\u00F6ng tala: ver\u00F0ur a\u00F0 vera margfeldi af ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u00D3\u00FEekkt ${issue.keys.length > 1 ? \"ir lyklar\" : \"ur lykill\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Rangur lykill \u00ED ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Rangt gildi\";\n            case \"invalid_element\":\n                return `Rangt gildi \u00ED ${issue.origin}`;\n            default:\n                return `Rangt gildi`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caratteri\", verb: \"avere\" },\n        file: { unit: \"byte\", verb: \"avere\" },\n        array: { unit: \"elementi\", verb: \"avere\" },\n        set: { unit: \"elementi\", verb: \"avere\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"indirizzo email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data e ora ISO\",\n        date: \"data ISO\",\n        time: \"ora ISO\",\n        duration: \"durata ISO\",\n        ipv4: \"indirizzo IPv4\",\n        ipv6: \"indirizzo IPv6\",\n        cidrv4: \"intervallo IPv4\",\n        cidrv6: \"intervallo IPv6\",\n        base64: \"stringa codificata in base64\",\n        base64url: \"URL codificata in base64\",\n        json_string: \"stringa JSON\",\n        e164: \"numero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"numero\",\n        array: \"vettore\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Input non valido: atteso instanceof ${issue.expected}, ricevuto ${received}`;\n                }\n                return `Input non valido: atteso ${expected}, ricevuto ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input non valido: atteso ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Opzione non valida: atteso uno tra ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Troppo grande: ${issue.origin ?? \"valore\"} deve avere ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementi\"}`;\n                return `Troppo grande: ${issue.origin ?? \"valore\"} deve essere ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Troppo piccolo: ${issue.origin} deve avere ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Troppo piccolo: ${issue.origin} deve essere ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Stringa non valida: deve iniziare con \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Stringa non valida: deve terminare con \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Stringa non valida: deve includere \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`;\n                return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Numero non valido: deve essere un multiplo di ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Chiav${issue.keys.length > 1 ? \"i\" : \"e\"} non riconosciut${issue.keys.length > 1 ? \"e\" : \"a\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Chiave non valida in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input non valido\";\n            case \"invalid_element\":\n                return `Valore non valido in ${issue.origin}`;\n            default:\n                return `Input non valido`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u6587\u5B57\", verb: \"\u3067\u3042\u308B\" },\n        file: { unit: \"\u30D0\u30A4\u30C8\", verb: \"\u3067\u3042\u308B\" },\n        array: { unit: \"\u8981\u7D20\", verb: \"\u3067\u3042\u308B\" },\n        set: { unit: \"\u8981\u7D20\", verb: \"\u3067\u3042\u308B\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u5165\u529B\u5024\",\n        email: \"\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\",\n        url: \"URL\",\n        emoji: \"\u7D75\u6587\u5B57\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO\u65E5\u6642\",\n        date: \"ISO\u65E5\u4ED8\",\n        time: \"ISO\u6642\u523B\",\n        duration: \"ISO\u671F\u9593\",\n        ipv4: \"IPv4\u30A2\u30C9\u30EC\u30B9\",\n        ipv6: \"IPv6\u30A2\u30C9\u30EC\u30B9\",\n        cidrv4: \"IPv4\u7BC4\u56F2\",\n        cidrv6: \"IPv6\u7BC4\u56F2\",\n        base64: \"base64\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217\",\n        base64url: \"base64url\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217\",\n        json_string: \"JSON\u6587\u5B57\u5217\",\n        e164: \"E.164\u756A\u53F7\",\n        jwt: \"JWT\",\n        template_literal: \"\u5165\u529B\u5024\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u6570\u5024\",\n        array: \"\u914D\u5217\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u7121\u52B9\u306A\u5165\u529B: instanceof ${issue.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;\n                }\n                return `\u7121\u52B9\u306A\u5165\u529B: ${expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u7121\u52B9\u306A\u5165\u529B: ${util.stringifyPrimitive(issue.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`;\n                return `\u7121\u52B9\u306A\u9078\u629E: ${util.joinValues(issue.values, \"\u3001\")}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\u4EE5\u4E0B\u3067\u3042\u308B\" : \"\u3088\u308A\u5C0F\u3055\u3044\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue.origin ?? \"\u5024\"}\u306F${issue.maximum.toString()}${sizing.unit ?? \"\u8981\u7D20\"}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue.origin ?? \"\u5024\"}\u306F${issue.maximum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\u4EE5\u4E0A\u3067\u3042\u308B\" : \"\u3088\u308A\u5927\u304D\u3044\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue.origin}\u306F${issue.minimum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue.origin}\u306F${issue.minimum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.prefix}\"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                if (_issue.format === \"ends_with\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.suffix}\"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                if (_issue.format === \"includes\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.includes}\"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                if (_issue.format === \"regex\")\n                    return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${_issue.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n                return `\u7121\u52B9\u306A${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u7121\u52B9\u306A\u6570\u5024: ${issue.divisor}\u306E\u500D\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n            case \"unrecognized_keys\":\n                return `\u8A8D\u8B58\u3055\u308C\u3066\u3044\u306A\u3044\u30AD\u30FC${issue.keys.length > 1 ? \"\u7FA4\" : \"\"}: ${util.joinValues(issue.keys, \"\u3001\")}`;\n            case \"invalid_key\":\n                return `${issue.origin}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`;\n            case \"invalid_union\":\n                return \"\u7121\u52B9\u306A\u5165\u529B\";\n            case \"invalid_element\":\n                return `${issue.origin}\u5185\u306E\u7121\u52B9\u306A\u5024`;\n            default:\n                return `\u7121\u52B9\u306A\u5165\u529B`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u10E1\u10D8\u10DB\u10D1\u10DD\u10DA\u10DD\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n        file: { unit: \"\u10D1\u10D0\u10D8\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n        array: { unit: \"\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n        set: { unit: \"\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\",\n        email: \"\u10D4\u10DA-\u10E4\u10DD\u10E1\u10E2\u10D8\u10E1 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n        url: \"URL\",\n        emoji: \"\u10D4\u10DB\u10DD\u10EF\u10D8\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8-\u10D3\u10E0\u10DD\",\n        date: \"\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8\",\n        time: \"\u10D3\u10E0\u10DD\",\n        duration: \"\u10EE\u10D0\u10DC\u10D2\u10E0\u10EB\u10DA\u10D8\u10D5\u10DD\u10D1\u10D0\",\n        ipv4: \"IPv4 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n        ipv6: \"IPv6 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n        cidrv4: \"IPv4 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8\",\n        cidrv6: \"IPv6 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8\",\n        base64: \"base64-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n        base64url: \"base64url-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n        json_string: \"JSON \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n        e164: \"E.164 \u10DC\u10DD\u10DB\u10D4\u10E0\u10D8\",\n        jwt: \"JWT\",\n        template_literal: \"\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u10E0\u10D8\u10EA\u10EE\u10D5\u10D8\",\n        string: \"\u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n        boolean: \"\u10D1\u10E3\u10DA\u10D4\u10D0\u10DC\u10D8\",\n        function: \"\u10E4\u10E3\u10DC\u10E5\u10EA\u10D8\u10D0\",\n        array: \"\u10DB\u10D0\u10E1\u10D8\u10D5\u10D8\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 instanceof ${issue.expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`;\n                }\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D0\u10E0\u10D8\u10D0\u10DC\u10E2\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8\u10D0 \u10D4\u10E0\u10D7-\u10D4\u10E0\u10D7\u10D8 ${util.joinValues(issue.values, \"|\")}-\u10D3\u10D0\u10DC`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin ?? \"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n                return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin ?? \"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0\"} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10EC\u10E7\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \"${_issue.prefix}\"-\u10D8\u10D7`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10DB\u10D7\u10D0\u10D5\u10E0\u10D3\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \"${_issue.suffix}\"-\u10D8\u10D7`;\n                if (_issue.format === \"includes\")\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1 \"${_issue.includes}\"-\u10E1`;\n                if (_issue.format === \"regex\")\n                    return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D4\u10E1\u10D0\u10D1\u10D0\u10DB\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \u10E8\u10D0\u10D1\u10DA\u10DD\u10DC\u10E1 ${_issue.pattern}`;\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E0\u10D8\u10EA\u10EE\u10D5\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10E7\u10DD\u10E1 ${issue.divisor}-\u10D8\u10E1 \u10EF\u10D4\u10E0\u10D0\u10D3\u10D8`;\n            case \"unrecognized_keys\":\n                return `\u10E3\u10EA\u10DC\u10DD\u10D1\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1${issue.keys.length > 1 ? \"\u10D4\u10D1\u10D8\" : \"\u10D8\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1\u10D8 ${issue.origin}-\u10E8\u10D8`;\n            case \"invalid_union\":\n                return \"\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\";\n            case \"invalid_element\":\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0 ${issue.origin}-\u10E8\u10D8`;\n            default:\n                return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n        file: { unit: \"\u1794\u17C3\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n        array: { unit: \"\u1792\u17B6\u178F\u17BB\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n        set: { unit: \"\u1792\u17B6\u178F\u17BB\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\",\n        email: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793\u17A2\u17CA\u17B8\u1798\u17C2\u179B\",\n        url: \"URL\",\n        emoji: \"\u179F\u1789\u17D2\u1789\u17B6\u17A2\u17B6\u179A\u1798\u17D2\u1798\u178E\u17CD\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 \u1793\u17B7\u1784\u1798\u17C9\u17C4\u1784 ISO\",\n        date: \"\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 ISO\",\n        time: \"\u1798\u17C9\u17C4\u1784 ISO\",\n        duration: \"\u179A\u1799\u17C8\u1796\u17C1\u179B ISO\",\n        ipv4: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4\",\n        ipv6: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6\",\n        cidrv4: \"\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4\",\n        cidrv6: \"\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6\",\n        base64: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64\",\n        base64url: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64url\",\n        json_string: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A JSON\",\n        e164: \"\u179B\u17C1\u1781 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u179B\u17C1\u1781\",\n        array: \"\u17A2\u17B6\u179A\u17C1 (Array)\",\n        null: \"\u1782\u17D2\u1798\u17B6\u1793\u178F\u1798\u17D2\u179B\u17C3 (null)\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A instanceof ${issue.expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`;\n                }\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u1787\u1798\u17D2\u179A\u17BE\u179F\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1787\u17B6\u1798\u17BD\u1799\u1780\u17D2\u1793\u17BB\u1784\u1785\u17C6\u178E\u17C4\u1798 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin ?? \"\u178F\u1798\u17D2\u179B\u17C3\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u1792\u17B6\u178F\u17BB\"}`;\n                return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin ?? \"\u178F\u1798\u17D2\u179B\u17C3\"} ${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin} ${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1785\u17B6\u1794\u17CB\u1795\u17D2\u178F\u17BE\u1798\u178A\u17C4\u1799 \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1794\u1789\u17D2\u1785\u1794\u17CB\u178A\u17C4\u1799 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1798\u17B6\u1793 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1795\u17D2\u1782\u17BC\u1795\u17D2\u1782\u1784\u1793\u17B9\u1784\u1791\u1798\u17D2\u179A\u1784\u17CB\u178A\u17C2\u179B\u1794\u17B6\u1793\u1780\u17C6\u178E\u178F\u17CB ${_issue.pattern}`;\n                return `\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u179B\u17C1\u1781\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1787\u17B6\u1796\u17A0\u17BB\u1782\u17BB\u178E\u1793\u17C3 ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u179A\u1780\u1783\u17BE\u1789\u179F\u17C4\u1798\u17B7\u1793\u179F\u17D2\u1782\u17B6\u179B\u17CB\u17D6 ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u179F\u17C4\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue.origin}`;\n            case \"invalid_union\":\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;\n            case \"invalid_element\":\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue.origin}`;\n            default:\n                return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import km from \"./km.js\";\n/** @deprecated Use `km` instead. */\nexport default function () {\n    return km();\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\uBB38\uC790\", verb: \"to have\" },\n        file: { unit: \"\uBC14\uC774\uD2B8\", verb: \"to have\" },\n        array: { unit: \"\uAC1C\", verb: \"to have\" },\n        set: { unit: \"\uAC1C\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\uC785\uB825\",\n        email: \"\uC774\uBA54\uC77C \uC8FC\uC18C\",\n        url: \"URL\",\n        emoji: \"\uC774\uBAA8\uC9C0\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \uB0A0\uC9DC\uC2DC\uAC04\",\n        date: \"ISO \uB0A0\uC9DC\",\n        time: \"ISO \uC2DC\uAC04\",\n        duration: \"ISO \uAE30\uAC04\",\n        ipv4: \"IPv4 \uC8FC\uC18C\",\n        ipv6: \"IPv6 \uC8FC\uC18C\",\n        cidrv4: \"IPv4 \uBC94\uC704\",\n        cidrv6: \"IPv6 \uBC94\uC704\",\n        base64: \"base64 \uC778\uCF54\uB529 \uBB38\uC790\uC5F4\",\n        base64url: \"base64url \uC778\uCF54\uB529 \uBB38\uC790\uC5F4\",\n        json_string: \"JSON \uBB38\uC790\uC5F4\",\n        e164: \"E.164 \uBC88\uD638\",\n        jwt: \"JWT\",\n        template_literal: \"\uC785\uB825\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 instanceof ${issue.expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`;\n                }\n                return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 ${expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\uC798\uBABB\uB41C \uC785\uB825: \uAC12\uC740 ${util.stringifyPrimitive(issue.values[0])} \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`;\n                return `\uC798\uBABB\uB41C \uC635\uC158: ${util.joinValues(issue.values, \"\uB610\uB294 \")} \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\uC774\uD558\" : \"\uBBF8\uB9CC\";\n                const suffix = adj === \"\uBBF8\uB9CC\" ? \"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4\" : \"\uC5EC\uC57C \uD569\uB2C8\uB2E4\";\n                const sizing = getSizing(issue.origin);\n                const unit = sizing?.unit ?? \"\uC694\uC18C\";\n                if (sizing)\n                    return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue.maximum.toString()}${unit} ${adj}${suffix}`;\n                return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue.maximum.toString()} ${adj}${suffix}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\uC774\uC0C1\" : \"\uCD08\uACFC\";\n                const suffix = adj === \"\uC774\uC0C1\" ? \"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4\" : \"\uC5EC\uC57C \uD569\uB2C8\uB2E4\";\n                const sizing = getSizing(issue.origin);\n                const unit = sizing?.unit ?? \"\uC694\uC18C\";\n                if (sizing) {\n                    return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue.minimum.toString()}${unit} ${adj}${suffix}`;\n                }\n                return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue.minimum.toString()} ${adj}${suffix}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.prefix}\"(\uC73C)\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.suffix}\"(\uC73C)\uB85C \uB05D\uB098\uC57C \uD569\uB2C8\uB2E4`;\n                if (_issue.format === \"includes\")\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.includes}\"\uC744(\uB97C) \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4`;\n                if (_issue.format === \"regex\")\n                    return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \uC815\uADDC\uC2DD ${_issue.pattern} \uD328\uD134\uACFC \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4`;\n                return `\uC798\uBABB\uB41C ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\uC798\uBABB\uB41C \uC22B\uC790: ${issue.divisor}\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4`;\n            case \"unrecognized_keys\":\n                return `\uC778\uC2DD\uD560 \uC218 \uC5C6\uB294 \uD0A4: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\uC798\uBABB\uB41C \uD0A4: ${issue.origin}`;\n            case \"invalid_union\":\n                return `\uC798\uBABB\uB41C \uC785\uB825`;\n            case \"invalid_element\":\n                return `\uC798\uBABB\uB41C \uAC12: ${issue.origin}`;\n            default:\n                return `\uC798\uBABB\uB41C \uC785\uB825`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst capitalizeFirstCharacter = (text) => {\n    return text.charAt(0).toUpperCase() + text.slice(1);\n};\nfunction getUnitTypeFromNumber(number) {\n    const abs = Math.abs(number);\n    const last = abs % 10;\n    const last2 = abs % 100;\n    if ((last2 >= 11 && last2 <= 19) || last === 0)\n        return \"many\";\n    if (last === 1)\n        return \"one\";\n    return \"few\";\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"simbolis\",\n                few: \"simboliai\",\n                many: \"simboli\u0173\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi b\u016Bti ne ilgesn\u0117 kaip\",\n                    notInclusive: \"turi b\u016Bti trumpesn\u0117 kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi b\u016Bti ne trumpesn\u0117 kaip\",\n                    notInclusive: \"turi b\u016Bti ilgesn\u0117 kaip\",\n                },\n            },\n        },\n        file: {\n            unit: {\n                one: \"baitas\",\n                few: \"baitai\",\n                many: \"bait\u0173\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi b\u016Bti ne didesnis kaip\",\n                    notInclusive: \"turi b\u016Bti ma\u017Eesnis kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi b\u016Bti ne ma\u017Eesnis kaip\",\n                    notInclusive: \"turi b\u016Bti didesnis kaip\",\n                },\n            },\n        },\n        array: {\n            unit: {\n                one: \"element\u0105\",\n                few: \"elementus\",\n                many: \"element\u0173\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi tur\u0117ti ne daugiau kaip\",\n                    notInclusive: \"turi tur\u0117ti ma\u017Eiau kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi tur\u0117ti ne ma\u017Eiau kaip\",\n                    notInclusive: \"turi tur\u0117ti daugiau kaip\",\n                },\n            },\n        },\n        set: {\n            unit: {\n                one: \"element\u0105\",\n                few: \"elementus\",\n                many: \"element\u0173\",\n            },\n            verb: {\n                smaller: {\n                    inclusive: \"turi tur\u0117ti ne daugiau kaip\",\n                    notInclusive: \"turi tur\u0117ti ma\u017Eiau kaip\",\n                },\n                bigger: {\n                    inclusive: \"turi tur\u0117ti ne ma\u017Eiau kaip\",\n                    notInclusive: \"turi tur\u0117ti daugiau kaip\",\n                },\n            },\n        },\n    };\n    function getSizing(origin, unitType, inclusive, targetShouldBe) {\n        const result = Sizable[origin] ?? null;\n        if (result === null)\n            return result;\n        return {\n            unit: result.unit[unitType],\n            verb: result.verb[targetShouldBe][inclusive ? \"inclusive\" : \"notInclusive\"],\n        };\n    }\n    const FormatDictionary = {\n        regex: \"\u012Fvestis\",\n        email: \"el. pa\u0161to adresas\",\n        url: \"URL\",\n        emoji: \"jaustukas\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO data ir laikas\",\n        date: \"ISO data\",\n        time: \"ISO laikas\",\n        duration: \"ISO trukm\u0117\",\n        ipv4: \"IPv4 adresas\",\n        ipv6: \"IPv6 adresas\",\n        cidrv4: \"IPv4 tinklo prefiksas (CIDR)\",\n        cidrv6: \"IPv6 tinklo prefiksas (CIDR)\",\n        base64: \"base64 u\u017Ekoduota eilut\u0117\",\n        base64url: \"base64url u\u017Ekoduota eilut\u0117\",\n        json_string: \"JSON eilut\u0117\",\n        e164: \"E.164 numeris\",\n        jwt: \"JWT\",\n        template_literal: \"\u012Fvestis\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"skai\u010Dius\",\n        bigint: \"sveikasis skai\u010Dius\",\n        string: \"eilut\u0117\",\n        boolean: \"login\u0117 reik\u0161m\u0117\",\n        undefined: \"neapibr\u0117\u017Eta reik\u0161m\u0117\",\n        function: \"funkcija\",\n        symbol: \"simbolis\",\n        array: \"masyvas\",\n        object: \"objektas\",\n        null: \"nulin\u0117 reik\u0161m\u0117\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Gautas tipas ${received}, o tik\u0117tasi - instanceof ${issue.expected}`;\n                }\n                return `Gautas tipas ${received}, o tik\u0117tasi - ${expected}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Privalo b\u016Bti ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Privalo b\u016Bti vienas i\u0161 ${util.joinValues(issue.values, \"|\")} pasirinkim\u0173`;\n            case \"too_big\": {\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.maximum)), issue.inclusive ?? false, \"smaller\");\n                if (sizing?.verb)\n                    return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} ${sizing.verb} ${issue.maximum.toString()} ${sizing.unit ?? \"element\u0173\"}`;\n                const adj = issue.inclusive ? \"ne didesnis kaip\" : \"ma\u017Eesnis kaip\";\n                return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi b\u016Bti ${adj} ${issue.maximum.toString()} ${sizing?.unit}`;\n            }\n            case \"too_small\": {\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.minimum)), issue.inclusive ?? false, \"bigger\");\n                if (sizing?.verb)\n                    return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} ${sizing.verb} ${issue.minimum.toString()} ${sizing.unit ?? \"element\u0173\"}`;\n                const adj = issue.inclusive ? \"ne ma\u017Eesnis kaip\" : \"didesnis kaip\";\n                return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi b\u016Bti ${adj} ${issue.minimum.toString()} ${sizing?.unit}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Eilut\u0117 privalo prasid\u0117ti \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Eilut\u0117 privalo pasibaigti \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Eilut\u0117 privalo \u012Ftraukti \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Eilut\u0117 privalo atitikti ${_issue.pattern}`;\n                return `Neteisingas ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Skai\u010Dius privalo b\u016Bti ${issue.divisor} kartotinis.`;\n            case \"unrecognized_keys\":\n                return `Neatpa\u017Eint${issue.keys.length > 1 ? \"i\" : \"as\"} rakt${issue.keys.length > 1 ? \"ai\" : \"as\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return \"Rastas klaidingas raktas\";\n            case \"invalid_union\":\n                return \"Klaidinga \u012Fvestis\";\n            case \"invalid_element\": {\n                const origin = TypeDictionary[issue.origin] ?? issue.origin;\n                return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi klaiding\u0105 \u012Fvest\u012F`;\n            }\n            default:\n                return \"Klaidinga \u012Fvestis\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0437\u043D\u0430\u0446\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n        file: { unit: \"\u0431\u0430\u0458\u0442\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n        array: { unit: \"\u0441\u0442\u0430\u0432\u043A\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n        set: { unit: \"\u0441\u0442\u0430\u0432\u043A\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0432\u043D\u0435\u0441\",\n        email: \"\u0430\u0434\u0440\u0435\u0441\u0430 \u043D\u0430 \u0435-\u043F\u043E\u0448\u0442\u0430\",\n        url: \"URL\",\n        emoji: \"\u0435\u043C\u043E\u045F\u0438\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0434\u0430\u0442\u0443\u043C \u0438 \u0432\u0440\u0435\u043C\u0435\",\n        date: \"ISO \u0434\u0430\u0442\u0443\u043C\",\n        time: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n        duration: \"ISO \u0432\u0440\u0435\u043C\u0435\u0442\u0440\u0430\u0435\u045A\u0435\",\n        ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\u0430\",\n        ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\u0430\",\n        cidrv4: \"IPv4 \u043E\u043F\u0441\u0435\u0433\",\n        cidrv6: \"IPv6 \u043E\u043F\u0441\u0435\u0433\",\n        base64: \"base64-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430\",\n        base64url: \"base64url-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430\",\n        json_string: \"JSON \u043D\u0438\u0437\u0430\",\n        e164: \"E.164 \u0431\u0440\u043E\u0458\",\n        jwt: \"JWT\",\n        template_literal: \"\u0432\u043D\u0435\u0441\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0431\u0440\u043E\u0458\",\n        array: \"\u043D\u0438\u0437\u0430\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 instanceof ${issue.expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`;\n                }\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0413\u0440\u0435\u0448\u0430\u043D\u0430 \u043E\u043F\u0446\u0438\u0458\u0430: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 \u0435\u0434\u043D\u0430 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin ?? \"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430\"} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0438\"}`;\n                return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin ?? \"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430\"} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u043D\u0443\u0432\u0430 \u0441\u043E \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u0432\u0440\u0448\u0443\u0432\u0430 \u0441\u043E \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0432\u043A\u043B\u0443\u0447\u0443\u0432\u0430 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u043E\u0434\u0433\u043E\u0430\u0440\u0430 \u043D\u0430 \u043F\u0430\u0442\u0435\u0440\u043D\u043E\u0442 ${_issue.pattern}`;\n                return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u0431\u0440\u043E\u0458: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0434\u0435\u043B\u0438\u0432 \u0441\u043E ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D\u0438 \u043A\u043B\u0443\u0447\u0435\u0432\u0438\" : \"\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D \u043A\u043B\u0443\u0447\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u043A\u043B\u0443\u0447 \u0432\u043E ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441\";\n            case \"invalid_element\":\n                return `\u0413\u0440\u0435\u0448\u043D\u0430 \u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442 \u0432\u043E ${issue.origin}`;\n            default:\n                return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"aksara\", verb: \"mempunyai\" },\n        file: { unit: \"bait\", verb: \"mempunyai\" },\n        array: { unit: \"elemen\", verb: \"mempunyai\" },\n        set: { unit: \"elemen\", verb: \"mempunyai\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"alamat e-mel\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"tarikh masa ISO\",\n        date: \"tarikh ISO\",\n        time: \"masa ISO\",\n        duration: \"tempoh ISO\",\n        ipv4: \"alamat IPv4\",\n        ipv6: \"alamat IPv6\",\n        cidrv4: \"julat IPv4\",\n        cidrv6: \"julat IPv6\",\n        base64: \"string dikodkan base64\",\n        base64url: \"string dikodkan base64url\",\n        json_string: \"string JSON\",\n        e164: \"nombor E.164\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"nombor\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Input tidak sah: dijangka instanceof ${issue.expected}, diterima ${received}`;\n                }\n                return `Input tidak sah: dijangka ${expected}, diterima ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Input tidak sah: dijangka ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Pilihan tidak sah: dijangka salah satu daripada ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n                return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} adalah ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Terlalu kecil: dijangka ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Terlalu kecil: dijangka ${issue.origin} adalah ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `String tidak sah: mesti bermula dengan \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `String tidak sah: mesti berakhir dengan \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `String tidak sah: mesti mengandungi \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `String tidak sah: mesti sepadan dengan corak ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} tidak sah`;\n            }\n            case \"not_multiple_of\":\n                return `Nombor tidak sah: perlu gandaan ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kunci tidak dikenali: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kunci tidak sah dalam ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Input tidak sah\";\n            case \"invalid_element\":\n                return `Nilai tidak sah dalam ${issue.origin}`;\n            default:\n                return `Input tidak sah`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tekens\", verb: \"heeft\" },\n        file: { unit: \"bytes\", verb: \"heeft\" },\n        array: { unit: \"elementen\", verb: \"heeft\" },\n        set: { unit: \"elementen\", verb: \"heeft\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"invoer\",\n        email: \"emailadres\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datum en tijd\",\n        date: \"ISO datum\",\n        time: \"ISO tijd\",\n        duration: \"ISO duur\",\n        ipv4: \"IPv4-adres\",\n        ipv6: \"IPv6-adres\",\n        cidrv4: \"IPv4-bereik\",\n        cidrv6: \"IPv6-bereik\",\n        base64: \"base64-gecodeerde tekst\",\n        base64url: \"base64 URL-gecodeerde tekst\",\n        json_string: \"JSON string\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"invoer\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"getal\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ongeldige invoer: verwacht instanceof ${issue.expected}, ontving ${received}`;\n                }\n                return `Ongeldige invoer: verwacht ${expected}, ontving ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ongeldige invoer: verwacht ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ongeldige optie: verwacht \u00E9\u00E9n van ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                const longName = issue.origin === \"date\" ? \"laat\" : issue.origin === \"string\" ? \"lang\" : \"groot\";\n                if (sizing)\n                    return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementen\"} ${sizing.verb}`;\n                return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} is`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                const shortName = issue.origin === \"date\" ? \"vroeg\" : issue.origin === \"string\" ? \"kort\" : \"klein\";\n                if (sizing) {\n                    return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n                }\n                return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} is`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Ongeldige tekst: moet met \"${_issue.prefix}\" beginnen`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Ongeldige tekst: moet op \"${_issue.suffix}\" eindigen`;\n                if (_issue.format === \"includes\")\n                    return `Ongeldige tekst: moet \"${_issue.includes}\" bevatten`;\n                if (_issue.format === \"regex\")\n                    return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`;\n                return `Ongeldig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ongeldig getal: moet een veelvoud van ${issue.divisor} zijn`;\n            case \"unrecognized_keys\":\n                return `Onbekende key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ongeldige key in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ongeldige invoer\";\n            case \"invalid_element\":\n                return `Ongeldige waarde in ${issue.origin}`;\n            default:\n                return `Ongeldige invoer`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tegn\", verb: \"\u00E5 ha\" },\n        file: { unit: \"bytes\", verb: \"\u00E5 ha\" },\n        array: { unit: \"elementer\", verb: \"\u00E5 inneholde\" },\n        set: { unit: \"elementer\", verb: \"\u00E5 inneholde\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"e-postadresse\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO dato- og klokkeslett\",\n        date: \"ISO-dato\",\n        time: \"ISO-klokkeslett\",\n        duration: \"ISO-varighet\",\n        ipv4: \"IPv4-omr\u00E5de\",\n        ipv6: \"IPv6-omr\u00E5de\",\n        cidrv4: \"IPv4-spekter\",\n        cidrv6: \"IPv6-spekter\",\n        base64: \"base64-enkodet streng\",\n        base64url: \"base64url-enkodet streng\",\n        json_string: \"JSON-streng\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"tall\",\n        array: \"liste\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ugyldig input: forventet instanceof ${issue.expected}, fikk ${received}`;\n                }\n                return `Ugyldig input: forventet ${expected}, fikk ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ugyldig verdi: forventet ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ugyldig valg: forventet en av ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `For stor(t): forventet ${issue.origin ?? \"value\"} til \u00E5 ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n                return `For stor(t): forventet ${issue.origin ?? \"value\"} til \u00E5 ha ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `For lite(n): forventet ${issue.origin} til \u00E5 ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `For lite(n): forventet ${issue.origin} til \u00E5 ha ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ugyldig streng: m\u00E5 starte med \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Ugyldig streng: m\u00E5 ende med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ugyldig streng: m\u00E5 inneholde \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ugyldig streng: m\u00E5 matche m\u00F8nsteret ${_issue.pattern}`;\n                return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ugyldig tall: m\u00E5 v\u00E6re et multiplum av ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ukjente n\u00F8kler\" : \"Ukjent n\u00F8kkel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ugyldig n\u00F8kkel i ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Ugyldig input\";\n            case \"invalid_element\":\n                return `Ugyldig verdi i ${issue.origin}`;\n            default:\n                return `Ugyldig input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"harf\", verb: \"olmal\u0131d\u0131r\" },\n        file: { unit: \"bayt\", verb: \"olmal\u0131d\u0131r\" },\n        array: { unit: \"unsur\", verb: \"olmal\u0131d\u0131r\" },\n        set: { unit: \"unsur\", verb: \"olmal\u0131d\u0131r\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"giren\",\n        email: \"epostag\u00E2h\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO heng\u00E2m\u0131\",\n        date: \"ISO tarihi\",\n        time: \"ISO zaman\u0131\",\n        duration: \"ISO m\u00FCddeti\",\n        ipv4: \"IPv4 ni\u015F\u00E2n\u0131\",\n        ipv6: \"IPv6 ni\u015F\u00E2n\u0131\",\n        cidrv4: \"IPv4 menzili\",\n        cidrv6: \"IPv6 menzili\",\n        base64: \"base64-\u015Fifreli metin\",\n        base64url: \"base64url-\u015Fifreli metin\",\n        json_string: \"JSON metin\",\n        e164: \"E.164 say\u0131s\u0131\",\n        jwt: \"JWT\",\n        template_literal: \"giren\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"numara\",\n        array: \"saf\",\n        null: \"gayb\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `F\u00E2sit giren: umulan instanceof ${issue.expected}, al\u0131nan ${received}`;\n                }\n                return `F\u00E2sit giren: umulan ${expected}, al\u0131nan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `F\u00E2sit giren: umulan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `F\u00E2sit tercih: m\u00FBteberler ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Fazla b\u00FCy\u00FCk: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"} sahip olmal\u0131yd\u0131.`;\n                return `Fazla b\u00FCy\u00FCk: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} olmal\u0131yd\u0131.`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Fazla k\u00FC\u00E7\u00FCk: ${issue.origin}, ${adj}${issue.minimum.toString()} ${sizing.unit} sahip olmal\u0131yd\u0131.`;\n                }\n                return `Fazla k\u00FC\u00E7\u00FCk: ${issue.origin}, ${adj}${issue.minimum.toString()} olmal\u0131yd\u0131.`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `F\u00E2sit metin: \"${_issue.prefix}\" ile ba\u015Flamal\u0131.`;\n                if (_issue.format === \"ends_with\")\n                    return `F\u00E2sit metin: \"${_issue.suffix}\" ile bitmeli.`;\n                if (_issue.format === \"includes\")\n                    return `F\u00E2sit metin: \"${_issue.includes}\" ihtiv\u00E2 etmeli.`;\n                if (_issue.format === \"regex\")\n                    return `F\u00E2sit metin: ${_issue.pattern} nak\u015F\u0131na uymal\u0131.`;\n                return `F\u00E2sit ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `F\u00E2sit say\u0131: ${issue.divisor} kat\u0131 olmal\u0131yd\u0131.`;\n            case \"unrecognized_keys\":\n                return `Tan\u0131nmayan anahtar ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} i\u00E7in tan\u0131nmayan anahtar var.`;\n            case \"invalid_union\":\n                return \"Giren tan\u0131namad\u0131.\";\n            case \"invalid_element\":\n                return `${issue.origin} i\u00E7in tan\u0131nmayan k\u0131ymet var.`;\n            default:\n                return `K\u0131ymet tan\u0131namad\u0131.`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n        file: { unit: \"\u0628\u0627\u06CC\u067C\u0633\", verb: \"\u0648\u0644\u0631\u064A\" },\n        array: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n        set: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0648\u0631\u0648\u062F\u064A\",\n        email: \"\u0628\u0631\u06CC\u069A\u0646\u0627\u0644\u06CC\u06A9\",\n        url: \"\u06CC\u0648 \u0622\u0631 \u0627\u0644\",\n        emoji: \"\u0627\u06CC\u0645\u0648\u062C\u064A\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u0646\u06CC\u067C\u0647 \u0627\u0648 \u0648\u062E\u062A\",\n        date: \"\u0646\u06D0\u067C\u0647\",\n        time: \"\u0648\u062E\u062A\",\n        duration: \"\u0645\u0648\u062F\u0647\",\n        ipv4: \"\u062F IPv4 \u067E\u062A\u0647\",\n        ipv6: \"\u062F IPv6 \u067E\u062A\u0647\",\n        cidrv4: \"\u062F IPv4 \u0633\u0627\u062D\u0647\",\n        cidrv6: \"\u062F IPv6 \u0633\u0627\u062D\u0647\",\n        base64: \"base64-encoded \u0645\u062A\u0646\",\n        base64url: \"base64url-encoded \u0645\u062A\u0646\",\n        json_string: \"JSON \u0645\u062A\u0646\",\n        e164: \"\u062F E.164 \u0634\u0645\u06D0\u0631\u0647\",\n        jwt: \"JWT\",\n        template_literal: \"\u0648\u0631\u0648\u062F\u064A\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0639\u062F\u062F\",\n        array: \"\u0627\u0631\u06D0\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F instanceof ${issue.expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;\n                }\n                return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1) {\n                    return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${util.stringifyPrimitive(issue.values[0])} \u0648\u0627\u06CC`;\n                }\n                return `\u0646\u0627\u0633\u0645 \u0627\u0646\u062A\u062E\u0627\u0628: \u0628\u0627\u06CC\u062F \u06CC\u0648 \u0644\u0647 ${util.joinValues(issue.values, \"|\")} \u0685\u062E\u0647 \u0648\u0627\u06CC`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue.origin ?? \"\u0627\u0631\u0632\u069A\u062A\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\u0648\u0646\u0647\"} \u0648\u0644\u0631\u064A`;\n                }\n                return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue.origin ?? \"\u0627\u0631\u0632\u069A\u062A\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} \u0648\u064A`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} ${sizing.unit} \u0648\u0644\u0631\u064A`;\n                }\n                return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} \u0648\u064A`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F \"${_issue.prefix}\" \u0633\u0631\u0647 \u067E\u06CC\u0644 \u0634\u064A`;\n                }\n                if (_issue.format === \"ends_with\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F \"${_issue.suffix}\" \u0633\u0631\u0647 \u067E\u0627\u06CC \u062A\u0647 \u0648\u0631\u0633\u064A\u0696\u064A`;\n                }\n                if (_issue.format === \"includes\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \"${_issue.includes}\" \u0648\u0644\u0631\u064A`;\n                }\n                if (_issue.format === \"regex\") {\n                    return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F ${_issue.pattern} \u0633\u0631\u0647 \u0645\u0637\u0627\u0628\u0642\u062A \u0648\u0644\u0631\u064A`;\n                }\n                return `${FormatDictionary[_issue.format] ?? issue.format} \u0646\u0627\u0633\u0645 \u062F\u06CC`;\n            }\n            case \"not_multiple_of\":\n                return `\u0646\u0627\u0633\u0645 \u0639\u062F\u062F: \u0628\u0627\u06CC\u062F \u062F ${issue.divisor} \u0645\u0636\u0631\u0628 \u0648\u064A`;\n            case \"unrecognized_keys\":\n                return `\u0646\u0627\u0633\u0645 ${issue.keys.length > 1 ? \"\u06A9\u0644\u06CC\u0689\u0648\u0646\u0647\" : \"\u06A9\u0644\u06CC\u0689\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u0646\u0627\u0633\u0645 \u06A9\u0644\u06CC\u0689 \u067E\u0647 ${issue.origin} \u06A9\u06D0`;\n            case \"invalid_union\":\n                return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;\n            case \"invalid_element\":\n                return `\u0646\u0627\u0633\u0645 \u0639\u0646\u0635\u0631 \u067E\u0647 ${issue.origin} \u06A9\u06D0`;\n            default:\n                return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znak\u00F3w\", verb: \"mie\u0107\" },\n        file: { unit: \"bajt\u00F3w\", verb: \"mie\u0107\" },\n        array: { unit: \"element\u00F3w\", verb: \"mie\u0107\" },\n        set: { unit: \"element\u00F3w\", verb: \"mie\u0107\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"wyra\u017Cenie\",\n        email: \"adres email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data i godzina w formacie ISO\",\n        date: \"data w formacie ISO\",\n        time: \"godzina w formacie ISO\",\n        duration: \"czas trwania ISO\",\n        ipv4: \"adres IPv4\",\n        ipv6: \"adres IPv6\",\n        cidrv4: \"zakres IPv4\",\n        cidrv6: \"zakres IPv6\",\n        base64: \"ci\u0105g znak\u00F3w zakodowany w formacie base64\",\n        base64url: \"ci\u0105g znak\u00F3w zakodowany w formacie base64url\",\n        json_string: \"ci\u0105g znak\u00F3w w formacie JSON\",\n        e164: \"liczba E.164\",\n        jwt: \"JWT\",\n        template_literal: \"wej\u015Bcie\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"liczba\",\n        array: \"tablica\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano instanceof ${issue.expected}, otrzymano ${received}`;\n                }\n                return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${expected}, otrzymano ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Nieprawid\u0142owa opcja: oczekiwano jednej z warto\u015Bci ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Za du\u017Ca warto\u015B\u0107: oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie mie\u0107 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\u00F3w\"}`;\n                }\n                return `Zbyt du\u017C(y/a/e): oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie wynosi\u0107 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Za ma\u0142a warto\u015B\u0107: oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie mie\u0107 ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"element\u00F3w\"}`;\n                }\n                return `Zbyt ma\u0142(y/a/e): oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie wynosi\u0107 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi zaczyna\u0107 si\u0119 od \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi ko\u0144czy\u0107 si\u0119 na \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi zawiera\u0107 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi odpowiada\u0107 wzorcowi ${_issue.pattern}`;\n                return `Nieprawid\u0142ow(y/a/e) ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Nieprawid\u0142owa liczba: musi by\u0107 wielokrotno\u015Bci\u0105 ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Nierozpoznane klucze${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Nieprawid\u0142owy klucz w ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Nieprawid\u0142owe dane wej\u015Bciowe\";\n            case \"invalid_element\":\n                return `Nieprawid\u0142owa warto\u015B\u0107 w ${issue.origin}`;\n            default:\n                return `Nieprawid\u0142owe dane wej\u015Bciowe`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"caracteres\", verb: \"ter\" },\n        file: { unit: \"bytes\", verb: \"ter\" },\n        array: { unit: \"itens\", verb: \"ter\" },\n        set: { unit: \"itens\", verb: \"ter\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"padr\u00E3o\",\n        email: \"endere\u00E7o de e-mail\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"data e hora ISO\",\n        date: \"data ISO\",\n        time: \"hora ISO\",\n        duration: \"dura\u00E7\u00E3o ISO\",\n        ipv4: \"endere\u00E7o IPv4\",\n        ipv6: \"endere\u00E7o IPv6\",\n        cidrv4: \"faixa de IPv4\",\n        cidrv6: \"faixa de IPv6\",\n        base64: \"texto codificado em base64\",\n        base64url: \"URL codificada em base64\",\n        json_string: \"texto JSON\",\n        e164: \"n\u00FAmero E.164\",\n        jwt: \"JWT\",\n        template_literal: \"entrada\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"n\u00FAmero\",\n        null: \"nulo\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Tipo inv\u00E1lido: esperado instanceof ${issue.expected}, recebido ${received}`;\n                }\n                return `Tipo inv\u00E1lido: esperado ${expected}, recebido ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Entrada inv\u00E1lida: esperado ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Op\u00E7\u00E3o inv\u00E1lida: esperada uma das ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Muito grande: esperado que ${issue.origin ?? \"valor\"} tivesse ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n                return `Muito grande: esperado que ${issue.origin ?? \"valor\"} fosse ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Muito pequeno: esperado que ${issue.origin} tivesse ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Muito pequeno: esperado que ${issue.origin} fosse ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Texto inv\u00E1lido: deve come\u00E7ar com \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Texto inv\u00E1lido: deve terminar com \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Texto inv\u00E1lido: deve incluir \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Texto inv\u00E1lido: deve corresponder ao padr\u00E3o ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} inv\u00E1lido`;\n            }\n            case \"not_multiple_of\":\n                return `N\u00FAmero inv\u00E1lido: deve ser m\u00FAltiplo de ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Chave${issue.keys.length > 1 ? \"s\" : \"\"} desconhecida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Chave inv\u00E1lida em ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Entrada inv\u00E1lida\";\n            case \"invalid_element\":\n                return `Valor inv\u00E1lido em ${issue.origin}`;\n            default:\n                return `Campo inv\u00E1lido`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nfunction getRussianPlural(count, one, few, many) {\n    const absCount = Math.abs(count);\n    const lastDigit = absCount % 10;\n    const lastTwoDigits = absCount % 100;\n    if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n        return many;\n    }\n    if (lastDigit === 1) {\n        return one;\n    }\n    if (lastDigit >= 2 && lastDigit <= 4) {\n        return few;\n    }\n    return many;\n}\nconst error = () => {\n    const Sizable = {\n        string: {\n            unit: {\n                one: \"\u0441\u0438\u043C\u0432\u043E\u043B\",\n                few: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0430\",\n                many: \"\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n        file: {\n            unit: {\n                one: \"\u0431\u0430\u0439\u0442\",\n                few: \"\u0431\u0430\u0439\u0442\u0430\",\n                many: \"\u0431\u0430\u0439\u0442\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n        array: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n        set: {\n            unit: {\n                one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n                few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\",\n                many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\",\n            },\n            verb: \"\u0438\u043C\u0435\u0442\u044C\",\n        },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0432\u0432\u043E\u0434\",\n        email: \"email \u0430\u0434\u0440\u0435\u0441\",\n        url: \"URL\",\n        emoji: \"\u044D\u043C\u043E\u0434\u0437\u0438\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F\",\n        date: \"ISO \u0434\u0430\u0442\u0430\",\n        time: \"ISO \u0432\u0440\u0435\u043C\u044F\",\n        duration: \"ISO \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C\",\n        ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\",\n        ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\",\n        cidrv4: \"IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n        cidrv6: \"IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n        base64: \"\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64\",\n        base64url: \"\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64url\",\n        json_string: \"JSON \u0441\u0442\u0440\u043E\u043A\u0430\",\n        e164: \"\u043D\u043E\u043C\u0435\u0440 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0432\u0432\u043E\u0434\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0447\u0438\u0441\u043B\u043E\",\n        array: \"\u043C\u0430\u0441\u0441\u0438\u0432\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C instanceof ${issue.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`;\n                }\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0434\u043D\u043E \u0438\u0437 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const maxValue = Number(issue.maximum);\n                    const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue.maximum.toString()} ${unit}`;\n                }\n                return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    const minValue = Number(issue.minimum);\n                    const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n                    return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue.minimum.toString()} ${unit}`;\n                }\n                return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441 \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E: \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u041D\u0435\u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u043D${issue.keys.length > 1 ? \"\u044B\u0435\" : \"\u044B\u0439\"} \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u0438\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u0432 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435\";\n            case \"invalid_element\":\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 ${issue.origin}`;\n            default:\n                return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"znakov\", verb: \"imeti\" },\n        file: { unit: \"bajtov\", verb: \"imeti\" },\n        array: { unit: \"elementov\", verb: \"imeti\" },\n        set: { unit: \"elementov\", verb: \"imeti\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"vnos\",\n        email: \"e-po\u0161tni naslov\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datum in \u010Das\",\n        date: \"ISO datum\",\n        time: \"ISO \u010Das\",\n        duration: \"ISO trajanje\",\n        ipv4: \"IPv4 naslov\",\n        ipv6: \"IPv6 naslov\",\n        cidrv4: \"obseg IPv4\",\n        cidrv6: \"obseg IPv6\",\n        base64: \"base64 kodiran niz\",\n        base64url: \"base64url kodiran niz\",\n        json_string: \"JSON niz\",\n        e164: \"E.164 \u0161tevilka\",\n        jwt: \"JWT\",\n        template_literal: \"vnos\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0161tevilo\",\n        array: \"tabela\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Neveljaven vnos: pri\u010Dakovano instanceof ${issue.expected}, prejeto ${received}`;\n                }\n                return `Neveljaven vnos: pri\u010Dakovano ${expected}, prejeto ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Neveljaven vnos: pri\u010Dakovano ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Neveljavna mo\u017Enost: pri\u010Dakovano eno izmed ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Preveliko: pri\u010Dakovano, da bo ${issue.origin ?? \"vrednost\"} imelo ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementov\"}`;\n                return `Preveliko: pri\u010Dakovano, da bo ${issue.origin ?? \"vrednost\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Premajhno: pri\u010Dakovano, da bo ${issue.origin} imelo ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Premajhno: pri\u010Dakovano, da bo ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Neveljaven niz: mora se za\u010Deti z \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Neveljaven niz: mora se kon\u010Dati z \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Neveljaven niz: mora vsebovati \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`;\n                return `Neveljaven ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Neveljavno \u0161tevilo: mora biti ve\u010Dkratnik ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Neprepoznan${issue.keys.length > 1 ? \"i klju\u010Di\" : \" klju\u010D\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Neveljaven klju\u010D v ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Neveljaven vnos\";\n            case \"invalid_element\":\n                return `Neveljavna vrednost v ${issue.origin}`;\n            default:\n                return \"Neveljaven vnos\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"tecken\", verb: \"att ha\" },\n        file: { unit: \"bytes\", verb: \"att ha\" },\n        array: { unit: \"objekt\", verb: \"att inneh\u00E5lla\" },\n        set: { unit: \"objekt\", verb: \"att inneh\u00E5lla\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"regulj\u00E4rt uttryck\",\n        email: \"e-postadress\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO-datum och tid\",\n        date: \"ISO-datum\",\n        time: \"ISO-tid\",\n        duration: \"ISO-varaktighet\",\n        ipv4: \"IPv4-intervall\",\n        ipv6: \"IPv6-intervall\",\n        cidrv4: \"IPv4-spektrum\",\n        cidrv6: \"IPv6-spektrum\",\n        base64: \"base64-kodad str\u00E4ng\",\n        base64url: \"base64url-kodad str\u00E4ng\",\n        json_string: \"JSON-str\u00E4ng\",\n        e164: \"E.164-nummer\",\n        jwt: \"JWT\",\n        template_literal: \"mall-literal\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"antal\",\n        array: \"lista\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ogiltig inmatning: f\u00F6rv\u00E4ntat instanceof ${issue.expected}, fick ${received}`;\n                }\n                return `Ogiltig inmatning: f\u00F6rv\u00E4ntat ${expected}, fick ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ogiltig inmatning: f\u00F6rv\u00E4ntat ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ogiltigt val: f\u00F6rv\u00E4ntade en av ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `F\u00F6r stor(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n                }\n                return `F\u00F6r stor(t): f\u00F6rv\u00E4ntat ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `F\u00F6r lite(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `F\u00F6r lite(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Ogiltig str\u00E4ng: m\u00E5ste b\u00F6rja med \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Ogiltig str\u00E4ng: m\u00E5ste sluta med \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Ogiltig str\u00E4ng: m\u00E5ste inneh\u00E5lla \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Ogiltig str\u00E4ng: m\u00E5ste matcha m\u00F6nstret \"${_issue.pattern}\"`;\n                return `Ogiltig(t) ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ogiltigt tal: m\u00E5ste vara en multipel av ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `${issue.keys.length > 1 ? \"Ok\u00E4nda nycklar\" : \"Ok\u00E4nd nyckel\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Ogiltig nyckel i ${issue.origin ?? \"v\u00E4rdet\"}`;\n            case \"invalid_union\":\n                return \"Ogiltig input\";\n            case \"invalid_element\":\n                return `Ogiltigt v\u00E4rde i ${issue.origin ?? \"v\u00E4rdet\"}`;\n            default:\n                return `Ogiltig input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n        file: { unit: \"\u0BAA\u0BC8\u0B9F\u0BCD\u0B9F\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n        array: { unit: \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n        set: { unit: \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1\",\n        email: \"\u0BAE\u0BBF\u0BA9\u0BCD\u0BA9\u0B9E\u0BCD\u0B9A\u0BB2\u0BCD \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u0BA4\u0BC7\u0BA4\u0BBF \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD\",\n        date: \"ISO \u0BA4\u0BC7\u0BA4\u0BBF\",\n        time: \"ISO \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD\",\n        duration: \"ISO \u0B95\u0BBE\u0BB2 \u0B85\u0BB3\u0BB5\u0BC1\",\n        ipv4: \"IPv4 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n        ipv6: \"IPv6 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n        cidrv4: \"IPv4 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1\",\n        cidrv6: \"IPv6 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1\",\n        base64: \"base64-encoded \u0B9A\u0BB0\u0BAE\u0BCD\",\n        base64url: \"base64url-encoded \u0B9A\u0BB0\u0BAE\u0BCD\",\n        json_string: \"JSON \u0B9A\u0BB0\u0BAE\u0BCD\",\n        e164: \"E.164 \u0B8E\u0BA3\u0BCD\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0B8E\u0BA3\u0BCD\",\n        array: \"\u0B85\u0BA3\u0BBF\",\n        null: \"\u0BB5\u0BC6\u0BB1\u0BC1\u0BAE\u0BC8\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 instanceof ${issue.expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`;\n                }\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0BAE\u0BCD: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${util.joinValues(issue.values, \"|\")} \u0B87\u0BB2\u0BCD \u0B92\u0BA9\u0BCD\u0BB1\u0BC1`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin ?? \"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\"} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                }\n                return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin ?? \"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\"} ${adj}${issue.maximum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; //\n                }\n                return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin} ${adj}${issue.minimum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.prefix}\" \u0B87\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                if (_issue.format === \"ends_with\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.suffix}\" \u0B87\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0B9F\u0BC8\u0BAF \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                if (_issue.format === \"includes\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.includes}\" \u0B90 \u0B89\u0BB3\u0BCD\u0BB3\u0B9F\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                if (_issue.format === \"regex\")\n                    return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: ${_issue.pattern} \u0BAE\u0BC1\u0BB1\u0BC8\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B9F\u0BA9\u0BCD \u0BAA\u0BCA\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B8E\u0BA3\u0BCD: ${issue.divisor} \u0B87\u0BA9\u0BCD \u0BAA\u0BB2\u0BAE\u0BBE\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n            case \"unrecognized_keys\":\n                return `\u0B85\u0B9F\u0BC8\u0BAF\u0BBE\u0BB3\u0BAE\u0BCD \u0BA4\u0BC6\u0BB0\u0BBF\u0BAF\u0BBE\u0BA4 \u0BB5\u0BBF\u0B9A\u0BC8${issue.keys.length > 1 ? \"\u0B95\u0BB3\u0BCD\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0B9A\u0BC8`;\n            case \"invalid_union\":\n                return \"\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1\";\n            case \"invalid_element\":\n                return `${issue.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1`;\n            default:\n                return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n        file: { unit: \"\u0E44\u0E1A\u0E15\u0E4C\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n        array: { unit: \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n        set: { unit: \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19\",\n        email: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E2D\u0E35\u0E40\u0E21\u0E25\",\n        url: \"URL\",\n        emoji: \"\u0E2D\u0E34\u0E42\u0E21\u0E08\u0E34\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n        date: \"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E41\u0E1A\u0E1A ISO\",\n        time: \"\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n        duration: \"\u0E0A\u0E48\u0E27\u0E07\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n        ipv4: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv4\",\n        ipv6: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv6\",\n        cidrv4: \"\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv4\",\n        cidrv6: \"\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv6\",\n        base64: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64\",\n        base64url: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A URL\",\n        json_string: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A JSON\",\n        e164: \"\u0E40\u0E1A\u0E2D\u0E23\u0E4C\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28 (E.164)\",\n        jwt: \"\u0E42\u0E17\u0E40\u0E04\u0E19 JWT\",\n        template_literal: \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\",\n        array: \"\u0E2D\u0E32\u0E23\u0E4C\u0E40\u0E23\u0E22\u0E4C (Array)\",\n        null: \"\u0E44\u0E21\u0E48\u0E21\u0E35\u0E04\u0E48\u0E32 (null)\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 instanceof ${issue.expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`;\n                }\n                return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0E04\u0E48\u0E32\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E43\u0E19 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19\" : \"\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin ?? \"\u0E04\u0E48\u0E32\"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\"}`;\n                return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin ?? \"\u0E04\u0E48\u0E32\"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \"\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22\" : \"\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E25\u0E07\u0E17\u0E49\u0E32\u0E22\u0E14\u0E49\u0E27\u0E22 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 \"${_issue.includes}\" \u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21`;\n                if (_issue.format === \"regex\")\n                    return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14 ${_issue.pattern}`;\n                return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E32\u0E23\u0E14\u0E49\u0E27\u0E22 ${issue.divisor} \u0E44\u0E14\u0E49\u0E25\u0E07\u0E15\u0E31\u0E27`;\n            case \"unrecognized_keys\":\n                return `\u0E1E\u0E1A\u0E04\u0E35\u0E22\u0E4C\u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u0E04\u0E35\u0E22\u0E4C\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E39\u0E40\u0E19\u0E35\u0E22\u0E19\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49\";\n            case \"invalid_element\":\n                return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue.origin}`;\n            default:\n                return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"karakter\", verb: \"olmal\u0131\" },\n        file: { unit: \"bayt\", verb: \"olmal\u0131\" },\n        array: { unit: \"\u00F6\u011Fe\", verb: \"olmal\u0131\" },\n        set: { unit: \"\u00F6\u011Fe\", verb: \"olmal\u0131\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"girdi\",\n        email: \"e-posta adresi\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO tarih ve saat\",\n        date: \"ISO tarih\",\n        time: \"ISO saat\",\n        duration: \"ISO s\u00FCre\",\n        ipv4: \"IPv4 adresi\",\n        ipv6: \"IPv6 adresi\",\n        cidrv4: \"IPv4 aral\u0131\u011F\u0131\",\n        cidrv6: \"IPv6 aral\u0131\u011F\u0131\",\n        base64: \"base64 ile \u015Fifrelenmi\u015F metin\",\n        base64url: \"base64url ile \u015Fifrelenmi\u015F metin\",\n        json_string: \"JSON dizesi\",\n        e164: \"E.164 say\u0131s\u0131\",\n        jwt: \"JWT\",\n        template_literal: \"\u015Eablon dizesi\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Ge\u00E7ersiz de\u011Fer: beklenen instanceof ${issue.expected}, al\u0131nan ${received}`;\n                }\n                return `Ge\u00E7ersiz de\u011Fer: beklenen ${expected}, al\u0131nan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Ge\u00E7ersiz de\u011Fer: beklenen ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Ge\u00E7ersiz se\u00E7enek: a\u015Fa\u011F\u0131dakilerden biri olmal\u0131: ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ok b\u00FCy\u00FCk: beklenen ${issue.origin ?? \"de\u011Fer\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u00F6\u011Fe\"}`;\n                return `\u00C7ok b\u00FCy\u00FCk: beklenen ${issue.origin ?? \"de\u011Fer\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u00C7ok k\u00FC\u00E7\u00FCk: beklenen ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                return `\u00C7ok k\u00FC\u00E7\u00FCk: beklenen ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Ge\u00E7ersiz metin: \"${_issue.prefix}\" ile ba\u015Flamal\u0131`;\n                if (_issue.format === \"ends_with\")\n                    return `Ge\u00E7ersiz metin: \"${_issue.suffix}\" ile bitmeli`;\n                if (_issue.format === \"includes\")\n                    return `Ge\u00E7ersiz metin: \"${_issue.includes}\" i\u00E7ermeli`;\n                if (_issue.format === \"regex\")\n                    return `Ge\u00E7ersiz metin: ${_issue.pattern} desenine uymal\u0131`;\n                return `Ge\u00E7ersiz ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Ge\u00E7ersiz say\u0131: ${issue.divisor} ile tam b\u00F6l\u00FCnebilmeli`;\n            case \"unrecognized_keys\":\n                return `Tan\u0131nmayan anahtar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} i\u00E7inde ge\u00E7ersiz anahtar`;\n            case \"invalid_union\":\n                return \"Ge\u00E7ersiz de\u011Fer\";\n            case \"invalid_element\":\n                return `${issue.origin} i\u00E7inde ge\u00E7ersiz de\u011Fer`;\n            default:\n                return `Ge\u00E7ersiz de\u011Fer`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n        file: { unit: \"\u0431\u0430\u0439\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n        array: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n        set: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\",\n        email: \"\u0430\u0434\u0440\u0435\u0441\u0430 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u043F\u043E\u0448\u0442\u0438\",\n        url: \"URL\",\n        emoji: \"\u0435\u043C\u043E\u0434\u0437\u0456\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u0434\u0430\u0442\u0430 \u0442\u0430 \u0447\u0430\u0441 ISO\",\n        date: \"\u0434\u0430\u0442\u0430 ISO\",\n        time: \"\u0447\u0430\u0441 ISO\",\n        duration: \"\u0442\u0440\u0438\u0432\u0430\u043B\u0456\u0441\u0442\u044C ISO\",\n        ipv4: \"\u0430\u0434\u0440\u0435\u0441\u0430 IPv4\",\n        ipv6: \"\u0430\u0434\u0440\u0435\u0441\u0430 IPv6\",\n        cidrv4: \"\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv4\",\n        cidrv6: \"\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv6\",\n        base64: \"\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64\",\n        base64url: \"\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64url\",\n        json_string: \"\u0440\u044F\u0434\u043E\u043A JSON\",\n        e164: \"\u043D\u043E\u043C\u0435\u0440 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0447\u0438\u0441\u043B\u043E\",\n        array: \"\u043C\u0430\u0441\u0438\u0432\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F instanceof ${issue.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`;\n                }\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430 \u043E\u043F\u0446\u0456\u044F: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F \u043E\u0434\u043D\u0435 \u0437 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\"}`;\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\"} \u0431\u0443\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin} \u0431\u0443\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043F\u043E\u0447\u0438\u043D\u0430\u0442\u0438\u0441\u044F \u0437 \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0437\u0430\u043A\u0456\u043D\u0447\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u043D\u0430 \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043C\u0456\u0441\u0442\u0438\u0442\u0438 \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0442\u0438 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0447\u0438\u0441\u043B\u043E: \u043F\u043E\u0432\u0438\u043D\u043D\u043E \u0431\u0443\u0442\u0438 \u043A\u0440\u0430\u0442\u043D\u0438\u043C ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `\u041D\u0435\u0440\u043E\u0437\u043F\u0456\u0437\u043D\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u0456\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0443 ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\";\n            case \"invalid_element\":\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0443 ${issue.origin}`;\n            default:\n                return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import uk from \"./uk.js\";\n/** @deprecated Use `uk` instead. */\nexport default function () {\n    return uk();\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u062D\u0631\u0648\u0641\", verb: \"\u06C1\u0648\u0646\u0627\" },\n        file: { unit: \"\u0628\u0627\u0626\u0679\u0633\", verb: \"\u06C1\u0648\u0646\u0627\" },\n        array: { unit: \"\u0622\u0626\u0679\u0645\u0632\", verb: \"\u06C1\u0648\u0646\u0627\" },\n        set: { unit: \"\u0622\u0626\u0679\u0645\u0632\", verb: \"\u06C1\u0648\u0646\u0627\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0627\u0646 \u067E\u0679\",\n        email: \"\u0627\u06CC \u0645\u06CC\u0644 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n        url: \"\u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644\",\n        emoji: \"\u0627\u06CC\u0645\u0648\u062C\u06CC\",\n        uuid: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        uuidv4: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 4\",\n        uuidv6: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 6\",\n        nanoid: \"\u0646\u06CC\u0646\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        guid: \"\u062C\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        cuid: \"\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        cuid2: \"\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC 2\",\n        ulid: \"\u06CC\u0648 \u0627\u06CC\u0644 \u0622\u0626\u06CC \u0688\u06CC\",\n        xid: \"\u0627\u06CC\u06A9\u0633 \u0622\u0626\u06CC \u0688\u06CC\",\n        ksuid: \"\u06A9\u06D2 \u0627\u06CC\u0633 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n        datetime: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0688\u06CC\u0679 \u0679\u0627\u0626\u0645\",\n        date: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u062A\u0627\u0631\u06CC\u062E\",\n        time: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0648\u0642\u062A\",\n        duration: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0645\u062F\u062A\",\n        ipv4: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n        ipv6: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n        cidrv4: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0631\u06CC\u0646\u062C\",\n        cidrv6: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0631\u06CC\u0646\u062C\",\n        base64: \"\u0628\u06CC\u0633 64 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF\",\n        base64url: \"\u0628\u06CC\u0633 64 \u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF\",\n        json_string: \"\u062C\u06D2 \u0627\u06CC\u0633 \u0627\u0648 \u0627\u06CC\u0646 \u0633\u0679\u0631\u0646\u06AF\",\n        e164: \"\u0627\u06CC 164 \u0646\u0645\u0628\u0631\",\n        jwt: \"\u062C\u06D2 \u0688\u0628\u0644\u06CC\u0648 \u0679\u06CC\",\n        template_literal: \"\u0627\u0646 \u067E\u0679\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u0646\u0645\u0628\u0631\",\n        array: \"\u0622\u0631\u06D2\",\n        null: \"\u0646\u0644\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: instanceof ${issue.expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;\n                }\n                return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${util.stringifyPrimitive(issue.values[0])} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n                return `\u063A\u0644\u0637 \u0622\u067E\u0634\u0646: ${util.joinValues(issue.values, \"|\")} \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue.origin ?? \"\u0648\u06CC\u0644\u06CC\u0648\"} \u06A9\u06D2 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0627\u0635\u0631\"} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;\n                return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue.origin ?? \"\u0648\u06CC\u0644\u06CC\u0648\"} \u06A9\u0627 ${adj}${issue.maximum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue.origin} \u06A9\u06D2 ${adj}${issue.minimum.toString()} ${sizing.unit} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;\n                }\n                return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue.origin} \u06A9\u0627 ${adj}${issue.minimum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.prefix}\" \u0633\u06D2 \u0634\u0631\u0648\u0639 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.suffix}\" \u067E\u0631 \u062E\u062A\u0645 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                if (_issue.format === \"includes\")\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.includes}\" \u0634\u0627\u0645\u0644 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                if (_issue.format === \"regex\")\n                    return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \u067E\u06CC\u0679\u0631\u0646 ${_issue.pattern} \u0633\u06D2 \u0645\u06CC\u0686 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n                return `\u063A\u0644\u0637 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u063A\u0644\u0637 \u0646\u0645\u0628\u0631: ${issue.divisor} \u06A9\u0627 \u0645\u0636\u0627\u0639\u0641 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n            case \"unrecognized_keys\":\n                return `\u063A\u06CC\u0631 \u062A\u0633\u0644\u06CC\u0645 \u0634\u062F\u06C1 \u06A9\u06CC${issue.keys.length > 1 ? \"\u0632\" : \"\"}: ${util.joinValues(issue.keys, \"\u060C \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u06A9\u06CC`;\n            case \"invalid_union\":\n                return \"\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679\";\n            case \"invalid_element\":\n                return `${issue.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u0648\u06CC\u0644\u06CC\u0648`;\n            default:\n                return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"belgi\", verb: \"bo\u2018lishi kerak\" },\n        file: { unit: \"bayt\", verb: \"bo\u2018lishi kerak\" },\n        array: { unit: \"element\", verb: \"bo\u2018lishi kerak\" },\n        set: { unit: \"element\", verb: \"bo\u2018lishi kerak\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"kirish\",\n        email: \"elektron pochta manzili\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO sana va vaqti\",\n        date: \"ISO sana\",\n        time: \"ISO vaqt\",\n        duration: \"ISO davomiylik\",\n        ipv4: \"IPv4 manzil\",\n        ipv6: \"IPv6 manzil\",\n        mac: \"MAC manzil\",\n        cidrv4: \"IPv4 diapazon\",\n        cidrv6: \"IPv6 diapazon\",\n        base64: \"base64 kodlangan satr\",\n        base64url: \"base64url kodlangan satr\",\n        json_string: \"JSON satr\",\n        e164: \"E.164 raqam\",\n        jwt: \"JWT\",\n        template_literal: \"kirish\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"raqam\",\n        array: \"massiv\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `Noto\u2018g\u2018ri kirish: kutilgan instanceof ${issue.expected}, qabul qilingan ${received}`;\n                }\n                return `Noto\u2018g\u2018ri kirish: kutilgan ${expected}, qabul qilingan ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Noto\u2018g\u2018ri kirish: kutilgan ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Noto\u2018g\u2018ri variant: quyidagilardan biri kutilgan ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()} ${sizing.unit} ${sizing.verb}`;\n                return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n                }\n                return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Noto\u2018g\u2018ri satr: \"${_issue.prefix}\" bilan boshlanishi kerak`;\n                if (_issue.format === \"ends_with\")\n                    return `Noto\u2018g\u2018ri satr: \"${_issue.suffix}\" bilan tugashi kerak`;\n                if (_issue.format === \"includes\")\n                    return `Noto\u2018g\u2018ri satr: \"${_issue.includes}\" ni o\u2018z ichiga olishi kerak`;\n                if (_issue.format === \"regex\")\n                    return `Noto\u2018g\u2018ri satr: ${_issue.pattern} shabloniga mos kelishi kerak`;\n                return `Noto\u2018g\u2018ri ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Noto\u2018g\u2018ri raqam: ${issue.divisor} ning karralisi bo\u2018lishi kerak`;\n            case \"unrecognized_keys\":\n                return `Noma\u2019lum kalit${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} dagi kalit noto\u2018g\u2018ri`;\n            case \"invalid_union\":\n                return \"Noto\u2018g\u2018ri kirish\";\n            case \"invalid_element\":\n                return `${issue.origin} da noto\u2018g\u2018ri qiymat`;\n            default:\n                return `Noto\u2018g\u2018ri kirish`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"k\u00FD t\u1EF1\", verb: \"c\u00F3\" },\n        file: { unit: \"byte\", verb: \"c\u00F3\" },\n        array: { unit: \"ph\u1EA7n t\u1EED\", verb: \"c\u00F3\" },\n        set: { unit: \"ph\u1EA7n t\u1EED\", verb: \"c\u00F3\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u0111\u1EA7u v\u00E0o\",\n        email: \"\u0111\u1ECBa ch\u1EC9 email\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ng\u00E0y gi\u1EDD ISO\",\n        date: \"ng\u00E0y ISO\",\n        time: \"gi\u1EDD ISO\",\n        duration: \"kho\u1EA3ng th\u1EDDi gian ISO\",\n        ipv4: \"\u0111\u1ECBa ch\u1EC9 IPv4\",\n        ipv6: \"\u0111\u1ECBa ch\u1EC9 IPv6\",\n        cidrv4: \"d\u1EA3i IPv4\",\n        cidrv6: \"d\u1EA3i IPv6\",\n        base64: \"chu\u1ED7i m\u00E3 h\u00F3a base64\",\n        base64url: \"chu\u1ED7i m\u00E3 h\u00F3a base64url\",\n        json_string: \"chu\u1ED7i JSON\",\n        e164: \"s\u1ED1 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u0111\u1EA7u v\u00E0o\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"s\u1ED1\",\n        array: \"m\u1EA3ng\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i instanceof ${issue.expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`;\n                }\n                return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${util.stringifyPrimitive(issue.values[0])}`;\n                return `T\u00F9y ch\u1ECDn kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i m\u1ED9t trong c\u00E1c gi\u00E1 tr\u1ECB ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Qu\u00E1 l\u1EDBn: mong \u0111\u1EE3i ${issue.origin ?? \"gi\u00E1 tr\u1ECB\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"ph\u1EA7n t\u1EED\"}`;\n                return `Qu\u00E1 l\u1EDBn: mong \u0111\u1EE3i ${issue.origin ?? \"gi\u00E1 tr\u1ECB\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Qu\u00E1 nh\u1ECF: mong \u0111\u1EE3i ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Qu\u00E1 nh\u1ECF: mong \u0111\u1EE3i ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i b\u1EAFt \u0111\u1EA7u b\u1EB1ng \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i k\u1EBFt th\u00FAc b\u1EB1ng \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i bao g\u1ED3m \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i kh\u1EDBp v\u1EDBi m\u1EABu ${_issue.pattern}`;\n                return `${FormatDictionary[_issue.format] ?? issue.format} kh\u00F4ng h\u1EE3p l\u1EC7`;\n            }\n            case \"not_multiple_of\":\n                return `S\u1ED1 kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i l\u00E0 b\u1ED9i s\u1ED1 c\u1EE7a ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Kh\u00F3a kh\u00F4ng \u0111\u01B0\u1EE3c nh\u1EADn d\u1EA1ng: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Kh\u00F3a kh\u00F4ng h\u1EE3p l\u1EC7 trong ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7\";\n            case \"invalid_element\":\n                return `Gi\u00E1 tr\u1ECB kh\u00F4ng h\u1EE3p l\u1EC7 trong ${issue.origin}`;\n            default:\n                return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u5B57\u7B26\", verb: \"\u5305\u542B\" },\n        file: { unit: \"\u5B57\u8282\", verb: \"\u5305\u542B\" },\n        array: { unit: \"\u9879\", verb: \"\u5305\u542B\" },\n        set: { unit: \"\u9879\", verb: \"\u5305\u542B\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u8F93\u5165\",\n        email: \"\u7535\u5B50\u90AE\u4EF6\",\n        url: \"URL\",\n        emoji: \"\u8868\u60C5\u7B26\u53F7\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO\u65E5\u671F\u65F6\u95F4\",\n        date: \"ISO\u65E5\u671F\",\n        time: \"ISO\u65F6\u95F4\",\n        duration: \"ISO\u65F6\u957F\",\n        ipv4: \"IPv4\u5730\u5740\",\n        ipv6: \"IPv6\u5730\u5740\",\n        cidrv4: \"IPv4\u7F51\u6BB5\",\n        cidrv6: \"IPv6\u7F51\u6BB5\",\n        base64: \"base64\u7F16\u7801\u5B57\u7B26\u4E32\",\n        base64url: \"base64url\u7F16\u7801\u5B57\u7B26\u4E32\",\n        json_string: \"JSON\u5B57\u7B26\u4E32\",\n        e164: \"E.164\u53F7\u7801\",\n        jwt: \"JWT\",\n        template_literal: \"\u8F93\u5165\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"\u6570\u5B57\",\n        array: \"\u6570\u7EC4\",\n        null: \"\u7A7A\u503C(null)\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B instanceof ${issue.expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`;\n                }\n                return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u65E0\u6548\u9009\u9879\uFF1A\u671F\u671B\u4EE5\u4E0B\u4E4B\u4E00 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue.origin ?? \"\u503C\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u4E2A\u5143\u7D20\"}`;\n                return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue.origin ?? \"\u503C\"} ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue.origin} ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 \"${_issue.prefix}\" \u5F00\u5934`;\n                if (_issue.format === \"ends_with\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 \"${_issue.suffix}\" \u7ED3\u5C3E`;\n                if (_issue.format === \"includes\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u5305\u542B \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u6EE1\u8DB3\u6B63\u5219\u8868\u8FBE\u5F0F ${_issue.pattern}`;\n                return `\u65E0\u6548${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u65E0\u6548\u6570\u5B57\uFF1A\u5FC5\u987B\u662F ${issue.divisor} \u7684\u500D\u6570`;\n            case \"unrecognized_keys\":\n                return `\u51FA\u73B0\u672A\u77E5\u7684\u952E(key): ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u4E2D\u7684\u952E(key)\u65E0\u6548`;\n            case \"invalid_union\":\n                return \"\u65E0\u6548\u8F93\u5165\";\n            case \"invalid_element\":\n                return `${issue.origin} \u4E2D\u5305\u542B\u65E0\u6548\u503C(value)`;\n            default:\n                return `\u65E0\u6548\u8F93\u5165`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u5B57\u5143\", verb: \"\u64C1\u6709\" },\n        file: { unit: \"\u4F4D\u5143\u7D44\", verb: \"\u64C1\u6709\" },\n        array: { unit: \"\u9805\u76EE\", verb: \"\u64C1\u6709\" },\n        set: { unit: \"\u9805\u76EE\", verb: \"\u64C1\u6709\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u8F38\u5165\",\n        email: \"\u90F5\u4EF6\u5730\u5740\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO \u65E5\u671F\u6642\u9593\",\n        date: \"ISO \u65E5\u671F\",\n        time: \"ISO \u6642\u9593\",\n        duration: \"ISO \u671F\u9593\",\n        ipv4: \"IPv4 \u4F4D\u5740\",\n        ipv6: \"IPv6 \u4F4D\u5740\",\n        cidrv4: \"IPv4 \u7BC4\u570D\",\n        cidrv6: \"IPv6 \u7BC4\u570D\",\n        base64: \"base64 \u7DE8\u78BC\u5B57\u4E32\",\n        base64url: \"base64url \u7DE8\u78BC\u5B57\u4E32\",\n        json_string: \"JSON \u5B57\u4E32\",\n        e164: \"E.164 \u6578\u503C\",\n        jwt: \"JWT\",\n        template_literal: \"\u8F38\u5165\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA instanceof ${issue.expected}\uFF0C\u4F46\u6536\u5230 ${received}`;\n                }\n                return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${expected}\uFF0C\u4F46\u6536\u5230 ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u7121\u6548\u7684\u9078\u9805\uFF1A\u9810\u671F\u70BA\u4EE5\u4E0B\u5176\u4E2D\u4E4B\u4E00 ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue.origin ?? \"\u503C\"} \u61C9\u70BA ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u500B\u5143\u7D20\"}`;\n                return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue.origin ?? \"\u503C\"} \u61C9\u70BA ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue.origin} \u61C9\u70BA ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue.origin} \u61C9\u70BA ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 \"${_issue.prefix}\" \u958B\u982D`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 \"${_issue.suffix}\" \u7D50\u5C3E`;\n                if (_issue.format === \"includes\")\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u5305\u542B \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u7B26\u5408\u683C\u5F0F ${_issue.pattern}`;\n                return `\u7121\u6548\u7684 ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `\u7121\u6548\u7684\u6578\u5B57\uFF1A\u5FC5\u9808\u70BA ${issue.divisor} \u7684\u500D\u6578`;\n            case \"unrecognized_keys\":\n                return `\u7121\u6CD5\u8B58\u5225\u7684\u9375\u503C${issue.keys.length > 1 ? \"\u5011\" : \"\"}\uFF1A${util.joinValues(issue.keys, \"\u3001\")}`;\n            case \"invalid_key\":\n                return `${issue.origin} \u4E2D\u6709\u7121\u6548\u7684\u9375\u503C`;\n            case \"invalid_union\":\n                return \"\u7121\u6548\u7684\u8F38\u5165\u503C\";\n            case \"invalid_element\":\n                return `${issue.origin} \u4E2D\u6709\u7121\u6548\u7684\u503C`;\n            default:\n                return `\u7121\u6548\u7684\u8F38\u5165\u503C`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"\u00E0mi\", verb: \"n\u00ED\" },\n        file: { unit: \"bytes\", verb: \"n\u00ED\" },\n        array: { unit: \"nkan\", verb: \"n\u00ED\" },\n        set: { unit: \"nkan\", verb: \"n\u00ED\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"\u1EB9\u0300r\u1ECD \u00ECb\u00E1w\u1ECDl\u00E9\",\n        email: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC \u00ECm\u1EB9\u0301l\u00EC\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"\u00E0k\u00F3k\u00F2 ISO\",\n        date: \"\u1ECDj\u1ECD\u0301 ISO\",\n        time: \"\u00E0k\u00F3k\u00F2 ISO\",\n        duration: \"\u00E0k\u00F3k\u00F2 t\u00F3 p\u00E9 ISO\",\n        ipv4: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC IPv4\",\n        ipv6: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC IPv6\",\n        cidrv4: \"\u00E0gb\u00E8gb\u00E8 IPv4\",\n        cidrv6: \"\u00E0gb\u00E8gb\u00E8 IPv6\",\n        base64: \"\u1ECD\u0300r\u1ECD\u0300 t\u00ED a k\u1ECD\u0301 n\u00ED base64\",\n        base64url: \"\u1ECD\u0300r\u1ECD\u0300 base64url\",\n        json_string: \"\u1ECD\u0300r\u1ECD\u0300 JSON\",\n        e164: \"n\u1ECD\u0301mb\u00E0 E.164\",\n        jwt: \"JWT\",\n        template_literal: \"\u1EB9\u0300r\u1ECD \u00ECb\u00E1w\u1ECDl\u00E9\",\n    };\n    const TypeDictionary = {\n        nan: \"NaN\",\n        number: \"n\u1ECD\u0301mb\u00E0\",\n        array: \"akop\u1ECD\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                if (/^[A-Z]/.test(issue.expected)) {\n                    return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi instanceof ${issue.expected}, \u00E0m\u1ECD\u0300 a r\u00ED ${received}`;\n                }\n                return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi ${expected}, \u00E0m\u1ECD\u0300 a r\u00ED ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi ${util.stringifyPrimitive(issue.values[0])}`;\n                return `\u00C0\u1E63\u00E0y\u00E0n a\u1E63\u00EC\u1E63e: yan \u1ECD\u0300kan l\u00E1ra ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `T\u00F3 p\u1ECD\u0300 j\u00F9: a n\u00ED l\u00E1ti j\u1EB9\u0301 p\u00E9 ${issue.origin ?? \"iye\"} ${sizing.verb} ${adj}${issue.maximum} ${sizing.unit}`;\n                return `T\u00F3 p\u1ECD\u0300 j\u00F9: a n\u00ED l\u00E1ti j\u1EB9\u0301 ${adj}${issue.maximum}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `K\u00E9r\u00E9 ju: a n\u00ED l\u00E1ti j\u1EB9\u0301 p\u00E9 ${issue.origin} ${sizing.verb} ${adj}${issue.minimum} ${sizing.unit}`;\n                return `K\u00E9r\u00E9 ju: a n\u00ED l\u00E1ti j\u1EB9\u0301 ${adj}${issue.minimum}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\")\n                    return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u1EB9\u0300r\u1EB9\u0300 p\u1EB9\u0300l\u00FA \"${_issue.prefix}\"`;\n                if (_issue.format === \"ends_with\")\n                    return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 par\u00ED p\u1EB9\u0300l\u00FA \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 n\u00ED \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u00E1 \u00E0p\u1EB9\u1EB9r\u1EB9 mu ${_issue.pattern}`;\n                return `A\u1E63\u00EC\u1E63e: ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `N\u1ECD\u0301mb\u00E0 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 j\u1EB9\u0301 \u00E8y\u00E0 p\u00EDp\u00EDn ti ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `B\u1ECDt\u00ECn\u00EC \u00E0\u00ECm\u1ECD\u0300: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `B\u1ECDt\u00ECn\u00EC a\u1E63\u00EC\u1E63e n\u00EDn\u00FA ${issue.origin}`;\n            case \"invalid_union\":\n                return \"\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e\";\n            case \"invalid_element\":\n                return `Iye a\u1E63\u00EC\u1E63e n\u00EDn\u00FA ${issue.origin}`;\n            default:\n                return \"\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e\";\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "export { default as ar } from \"./ar.js\";\nexport { default as az } from \"./az.js\";\nexport { default as be } from \"./be.js\";\nexport { default as bg } from \"./bg.js\";\nexport { default as ca } from \"./ca.js\";\nexport { default as cs } from \"./cs.js\";\nexport { default as da } from \"./da.js\";\nexport { default as de } from \"./de.js\";\nexport { default as en } from \"./en.js\";\nexport { default as eo } from \"./eo.js\";\nexport { default as es } from \"./es.js\";\nexport { default as fa } from \"./fa.js\";\nexport { default as fi } from \"./fi.js\";\nexport { default as fr } from \"./fr.js\";\nexport { default as frCA } from \"./fr-CA.js\";\nexport { default as he } from \"./he.js\";\nexport { default as hu } from \"./hu.js\";\nexport { default as hy } from \"./hy.js\";\nexport { default as id } from \"./id.js\";\nexport { default as is } from \"./is.js\";\nexport { default as it } from \"./it.js\";\nexport { default as ja } from \"./ja.js\";\nexport { default as ka } from \"./ka.js\";\nexport { default as kh } from \"./kh.js\";\nexport { default as km } from \"./km.js\";\nexport { default as ko } from \"./ko.js\";\nexport { default as lt } from \"./lt.js\";\nexport { default as mk } from \"./mk.js\";\nexport { default as ms } from \"./ms.js\";\nexport { default as nl } from \"./nl.js\";\nexport { default as no } from \"./no.js\";\nexport { default as ota } from \"./ota.js\";\nexport { default as ps } from \"./ps.js\";\nexport { default as pl } from \"./pl.js\";\nexport { default as pt } from \"./pt.js\";\nexport { default as ru } from \"./ru.js\";\nexport { default as sl } from \"./sl.js\";\nexport { default as sv } from \"./sv.js\";\nexport { default as ta } from \"./ta.js\";\nexport { default as th } from \"./th.js\";\nexport { default as tr } from \"./tr.js\";\nexport { default as ua } from \"./ua.js\";\nexport { default as uk } from \"./uk.js\";\nexport { default as ur } from \"./ur.js\";\nexport { default as uz } from \"./uz.js\";\nexport { default as vi } from \"./vi.js\";\nexport { default as zhCN } from \"./zh-CN.js\";\nexport { default as zhTW } from \"./zh-TW.js\";\nexport { default as yo } from \"./yo.js\";\n", "var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n    constructor() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            const f = { ...pm, ...this._map.get(schema) };\n            return Object.keys(f).length ? f : undefined;\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\n// registries\nexport function registry() {\n    return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n", "import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n    return new Class({\n        type: \"string\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n    return new Class({\n        type: \"string\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"mac\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n    return new Class({\n        type: \"number\",\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n    return new Class({\n        type: \"number\",\n        coerce: true,\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n    return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xor(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn) {\n    const ch = _check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    });\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n    const ch = new checks.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n    const ch = new checks.$ZodCheck({ check: \"describe\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, description });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n    const ch = new checks.$ZodCheck({ check: \"meta\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, ...metadata });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const stringSchema = new _String({ type: \"string\", error: params.error });\n    const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n    const codec = new _Codec({\n        type: \"pipe\",\n        in: stringSchema,\n        out: booleanSchema,\n        transform: ((input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: codec,\n                    continue: false,\n                });\n                return {};\n            }\n        }),\n        reverseTransform: ((input, _payload) => {\n            if (input === true) {\n                return truthyArray[0] || \"true\";\n            }\n            else {\n                return falsyArray[0] || \"false\";\n            }\n        }),\n        error: params.error,\n    });\n    return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        ...util.normalizeParams(_params),\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n", "import { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n//   return {\n//     processor: inputs.processor,\n//     metadataRegistry: inputs.metadata ?? globalRegistry,\n//     target: inputs.target ?? \"draft-2020-12\",\n//     unrepresentable: inputs.unrepresentable ?? \"throw\",\n//   };\n// }\nexport function initializeContext(params) {\n    // Normalize target: convert old non-hyphenated versions to hyphenated versions\n    let target = params?.target ?? \"draft-2020-12\";\n    if (target === \"draft-4\")\n        target = \"draft-04\";\n    if (target === \"draft-7\")\n        target = \"draft-07\";\n    return {\n        processors: params.processors ?? {},\n        metadataRegistry: params?.metadata ?? globalRegistry,\n        target,\n        unrepresentable: params?.unrepresentable ?? \"throw\",\n        override: params?.override ?? (() => { }),\n        io: params?.io ?? \"output\",\n        counter: 0,\n        seen: new Map(),\n        cycles: params?.cycles ?? \"ref\",\n        reused: params?.reused ?? \"inline\",\n        external: params?.external ?? undefined,\n    };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n    var _a;\n    const def = schema._zod.def;\n    // check for schema in seens\n    const seen = ctx.seen.get(schema);\n    if (seen) {\n        seen.count++;\n        // check if cycle\n        const isCycle = _params.schemaPath.includes(schema);\n        if (isCycle) {\n            seen.cycle = _params.path;\n        }\n        return seen.schema;\n    }\n    // initialize\n    const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n    ctx.seen.set(schema, result);\n    // custom method overrides default behavior\n    const overrideSchema = schema._zod.toJSONSchema?.();\n    if (overrideSchema) {\n        result.schema = overrideSchema;\n    }\n    else {\n        const params = {\n            ..._params,\n            schemaPath: [..._params.schemaPath, schema],\n            path: _params.path,\n        };\n        if (schema._zod.processJSONSchema) {\n            schema._zod.processJSONSchema(ctx, result.schema, params);\n        }\n        else {\n            const _json = result.schema;\n            const processor = ctx.processors[def.type];\n            if (!processor) {\n                throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n            }\n            processor(schema, ctx, _json, params);\n        }\n        const parent = schema._zod.parent;\n        if (parent) {\n            // Also set ref if processor didn't (for inheritance)\n            if (!result.ref)\n                result.ref = parent;\n            process(parent, ctx, params);\n            ctx.seen.get(parent).isParent = true;\n        }\n    }\n    // metadata\n    const meta = ctx.metadataRegistry.get(schema);\n    if (meta)\n        Object.assign(result.schema, meta);\n    if (ctx.io === \"input\" && isTransforming(schema)) {\n        // examples/defaults only apply to output type of pipe\n        delete result.schema.examples;\n        delete result.schema.default;\n    }\n    // set prefault as default\n    if (ctx.io === \"input\" && result.schema._prefault)\n        (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n    delete result.schema._prefault;\n    // pulling fresh from ctx.seen in case it was overwritten\n    const _result = ctx.seen.get(schema);\n    return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n    // iterate over seen map;\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // Track ids to detect duplicates across different schemas\n    const idToSchema = new Map();\n    for (const entry of ctx.seen.entries()) {\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            const existing = idToSchema.get(id);\n            if (existing && existing !== entry[0]) {\n                throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n            }\n            idToSchema.set(id, entry[0]);\n        }\n    }\n    // returns a ref to the schema\n    // defId will be empty if the ref points to an external schema (or #)\n    const makeURI = (entry) => {\n        // comparing the seen objects because sometimes\n        // multiple schemas map to the same seen object.\n        // e.g. lazy\n        // external is configured\n        const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n        if (ctx.external) {\n            const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n            // check if schema is in the external registry\n            const uriGenerator = ctx.external.uri ?? ((id) => id);\n            if (externalId) {\n                return { ref: uriGenerator(externalId) };\n            }\n            // otherwise, add to __shared\n            const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n            entry[1].defId = id; // set defId so it will be reused if needed\n            return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n        }\n        if (entry[1] === root) {\n            return { ref: \"#\" };\n        }\n        // self-contained schema\n        const uriPrefix = `#`;\n        const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n        const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n        return { defId, ref: defUriPrefix + defId };\n    };\n    // stored cached version in `def` property\n    // remove all properties, set $ref\n    const extractToDef = (entry) => {\n        // if the schema is already a reference, do not extract it\n        if (entry[1].schema.$ref) {\n            return;\n        }\n        const seen = entry[1];\n        const { ref, defId } = makeURI(entry);\n        seen.def = { ...seen.schema };\n        // defId won't be set if the schema is a reference to an external schema\n        // or if the schema is the root schema\n        if (defId)\n            seen.defId = defId;\n        // wipe away all properties except $ref\n        const schema = seen.schema;\n        for (const key in schema) {\n            delete schema[key];\n        }\n        schema.$ref = ref;\n    };\n    // throw on cycles\n    // break cycles\n    if (ctx.cycles === \"throw\") {\n        for (const entry of ctx.seen.entries()) {\n            const seen = entry[1];\n            if (seen.cycle) {\n                throw new Error(\"Cycle detected: \" +\n                    `#/${seen.cycle?.join(\"/\")}/<root>` +\n                    '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n            }\n        }\n    }\n    // extract schemas into $defs\n    for (const entry of ctx.seen.entries()) {\n        const seen = entry[1];\n        // convert root schema to # $ref\n        if (schema === entry[0]) {\n            extractToDef(entry); // this has special handling for the root schema\n            continue;\n        }\n        // extract schemas that are in the external registry\n        if (ctx.external) {\n            const ext = ctx.external.registry.get(entry[0])?.id;\n            if (schema !== entry[0] && ext) {\n                extractToDef(entry);\n                continue;\n            }\n        }\n        // extract schemas with `id` meta\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            extractToDef(entry);\n            continue;\n        }\n        // break cycles\n        if (seen.cycle) {\n            // any\n            extractToDef(entry);\n            continue;\n        }\n        // extract reused schemas\n        if (seen.count > 1) {\n            if (ctx.reused === \"ref\") {\n                extractToDef(entry);\n                // biome-ignore lint:\n                continue;\n            }\n        }\n    }\n}\nexport function finalize(ctx, schema) {\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // flatten refs - inherit properties from parent schemas\n    const flattenRef = (zodSchema) => {\n        const seen = ctx.seen.get(zodSchema);\n        // already processed\n        if (seen.ref === null)\n            return;\n        const schema = seen.def ?? seen.schema;\n        const _cached = { ...schema };\n        const ref = seen.ref;\n        seen.ref = null; // prevent infinite recursion\n        if (ref) {\n            flattenRef(ref);\n            const refSeen = ctx.seen.get(ref);\n            const refSchema = refSeen.schema;\n            // merge referenced schema into current\n            if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n                // older drafts can't combine $ref with other properties\n                schema.allOf = schema.allOf ?? [];\n                schema.allOf.push(refSchema);\n            }\n            else {\n                Object.assign(schema, refSchema);\n            }\n            // restore child's own properties (child wins)\n            Object.assign(schema, _cached);\n            const isParentRef = zodSchema._zod.parent === ref;\n            // For parent chain, child is a refinement - remove parent-only properties\n            if (isParentRef) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (!(key in _cached)) {\n                        delete schema[key];\n                    }\n                }\n            }\n            // When ref was extracted to $defs, remove properties that match the definition\n            if (refSchema.$ref && refSeen.def) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n                        delete schema[key];\n                    }\n                }\n            }\n        }\n        // If parent was extracted (has $ref), propagate $ref to this schema\n        // This handles cases like: readonly().meta({id}).describe()\n        // where processor sets ref to innerType but parent should be referenced\n        const parent = zodSchema._zod.parent;\n        if (parent && parent !== ref) {\n            // Ensure parent is processed first so its def has inherited properties\n            flattenRef(parent);\n            const parentSeen = ctx.seen.get(parent);\n            if (parentSeen?.schema.$ref) {\n                schema.$ref = parentSeen.schema.$ref;\n                // De-duplicate with parent's definition\n                if (parentSeen.def) {\n                    for (const key in schema) {\n                        if (key === \"$ref\" || key === \"allOf\")\n                            continue;\n                        if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n                            delete schema[key];\n                        }\n                    }\n                }\n            }\n        }\n        // execute overrides\n        ctx.override({\n            zodSchema: zodSchema,\n            jsonSchema: schema,\n            path: seen.path ?? [],\n        });\n    };\n    for (const entry of [...ctx.seen.entries()].reverse()) {\n        flattenRef(entry[0]);\n    }\n    const result = {};\n    if (ctx.target === \"draft-2020-12\") {\n        result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n    }\n    else if (ctx.target === \"draft-07\") {\n        result.$schema = \"http://json-schema.org/draft-07/schema#\";\n    }\n    else if (ctx.target === \"draft-04\") {\n        result.$schema = \"http://json-schema.org/draft-04/schema#\";\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        // OpenAPI 3.0 schema objects should not include a $schema property\n    }\n    else {\n        // Arbitrary string values are allowed but won't have a $schema property set\n    }\n    if (ctx.external?.uri) {\n        const id = ctx.external.registry.get(schema)?.id;\n        if (!id)\n            throw new Error(\"Schema is missing an `id` property\");\n        result.$id = ctx.external.uri(id);\n    }\n    Object.assign(result, root.def ?? root.schema);\n    // build defs object\n    const defs = ctx.external?.defs ?? {};\n    for (const entry of ctx.seen.entries()) {\n        const seen = entry[1];\n        if (seen.def && seen.defId) {\n            defs[seen.defId] = seen.def;\n        }\n    }\n    // set definitions in result\n    if (ctx.external) {\n    }\n    else {\n        if (Object.keys(defs).length > 0) {\n            if (ctx.target === \"draft-2020-12\") {\n                result.$defs = defs;\n            }\n            else {\n                result.definitions = defs;\n            }\n        }\n    }\n    try {\n        // this \"finalizes\" this schema and ensures all cycles are removed\n        // each call to finalize() is functionally independent\n        // though the seen map is shared\n        const finalized = JSON.parse(JSON.stringify(result));\n        Object.defineProperty(finalized, \"~standard\", {\n            value: {\n                ...schema[\"~standard\"],\n                jsonSchema: {\n                    input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n                    output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n                },\n            },\n            enumerable: false,\n            writable: false,\n        });\n        return finalized;\n    }\n    catch (_err) {\n        throw new Error(\"Error converting schema to JSON.\");\n    }\n}\nfunction isTransforming(_schema, _ctx) {\n    const ctx = _ctx ?? { seen: new Set() };\n    if (ctx.seen.has(_schema))\n        return false;\n    ctx.seen.add(_schema);\n    const def = _schema._zod.def;\n    if (def.type === \"transform\")\n        return true;\n    if (def.type === \"array\")\n        return isTransforming(def.element, ctx);\n    if (def.type === \"set\")\n        return isTransforming(def.valueType, ctx);\n    if (def.type === \"lazy\")\n        return isTransforming(def.getter(), ctx);\n    if (def.type === \"promise\" ||\n        def.type === \"optional\" ||\n        def.type === \"nonoptional\" ||\n        def.type === \"nullable\" ||\n        def.type === \"readonly\" ||\n        def.type === \"default\" ||\n        def.type === \"prefault\") {\n        return isTransforming(def.innerType, ctx);\n    }\n    if (def.type === \"intersection\") {\n        return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n    }\n    if (def.type === \"record\" || def.type === \"map\") {\n        return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n    }\n    if (def.type === \"pipe\") {\n        return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n    }\n    if (def.type === \"object\") {\n        for (const key in def.shape) {\n            if (isTransforming(def.shape[key], ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"union\") {\n        for (const option of def.options) {\n            if (isTransforming(option, ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"tuple\") {\n        for (const item of def.items) {\n            if (isTransforming(item, ctx))\n                return true;\n        }\n        if (def.rest && isTransforming(def.rest, ctx))\n            return true;\n        return false;\n    }\n    return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n    const ctx = initializeContext({ ...params, processors });\n    process(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n    const { libraryOptions, target } = params ?? {};\n    const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n    process(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\n", "import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n    guid: \"uuid\",\n    url: \"uri\",\n    datetime: \"date-time\",\n    json_string: \"json-string\",\n    regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n    const json = _json;\n    json.type = \"string\";\n    const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n        .bag;\n    if (typeof minimum === \"number\")\n        json.minLength = minimum;\n    if (typeof maximum === \"number\")\n        json.maxLength = maximum;\n    // custom pattern overrides format\n    if (format) {\n        json.format = formatMap[format] ?? format;\n        if (json.format === \"\")\n            delete json.format; // empty format is not valid\n        // JSON Schema format: \"time\" requires a full time with offset or Z\n        // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n        if (format === \"time\") {\n            delete json.format;\n        }\n    }\n    if (contentEncoding)\n        json.contentEncoding = contentEncoding;\n    if (patterns && patterns.size > 0) {\n        const regexes = [...patterns];\n        if (regexes.length === 1)\n            json.pattern = regexes[0].source;\n        else if (regexes.length > 1) {\n            json.allOf = [\n                ...regexes.map((regex) => ({\n                    ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n                        ? { type: \"string\" }\n                        : {}),\n                    pattern: regex.source,\n                })),\n            ];\n        }\n    }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n    const json = _json;\n    const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n    if (typeof format === \"string\" && format.includes(\"int\"))\n        json.type = \"integer\";\n    else\n        json.type = \"number\";\n    if (typeof exclusiveMinimum === \"number\") {\n        if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n            json.minimum = exclusiveMinimum;\n            json.exclusiveMinimum = true;\n        }\n        else {\n            json.exclusiveMinimum = exclusiveMinimum;\n        }\n    }\n    if (typeof minimum === \"number\") {\n        json.minimum = minimum;\n        if (typeof exclusiveMinimum === \"number\" && ctx.target !== \"draft-04\") {\n            if (exclusiveMinimum >= minimum)\n                delete json.minimum;\n            else\n                delete json.exclusiveMinimum;\n        }\n    }\n    if (typeof exclusiveMaximum === \"number\") {\n        if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n            json.maximum = exclusiveMaximum;\n            json.exclusiveMaximum = true;\n        }\n        else {\n            json.exclusiveMaximum = exclusiveMaximum;\n        }\n    }\n    if (typeof maximum === \"number\") {\n        json.maximum = maximum;\n        if (typeof exclusiveMaximum === \"number\" && ctx.target !== \"draft-04\") {\n            if (exclusiveMaximum <= maximum)\n                delete json.maximum;\n            else\n                delete json.exclusiveMaximum;\n        }\n    }\n    if (typeof multipleOf === \"number\")\n        json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"BigInt cannot be represented in JSON Schema\");\n    }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Symbols cannot be represented in JSON Schema\");\n    }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n    if (ctx.target === \"openapi-3.0\") {\n        json.type = \"string\";\n        json.nullable = true;\n        json.enum = [null];\n    }\n    else {\n        json.type = \"null\";\n    }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Undefined cannot be represented in JSON Schema\");\n    }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Void cannot be represented in JSON Schema\");\n    }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n    json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Date cannot be represented in JSON Schema\");\n    }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n    const def = schema._zod.def;\n    const values = getEnumValues(def.entries);\n    // Number enums can have both string and number values\n    if (values.every((v) => typeof v === \"number\"))\n        json.type = \"number\";\n    if (values.every((v) => typeof v === \"string\"))\n        json.type = \"string\";\n    json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n    const def = schema._zod.def;\n    const vals = [];\n    for (const val of def.values) {\n        if (val === undefined) {\n            if (ctx.unrepresentable === \"throw\") {\n                throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n            }\n            else {\n                // do not add to vals\n            }\n        }\n        else if (typeof val === \"bigint\") {\n            if (ctx.unrepresentable === \"throw\") {\n                throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n            }\n            else {\n                vals.push(Number(val));\n            }\n        }\n        else {\n            vals.push(val);\n        }\n    }\n    if (vals.length === 0) {\n        // do nothing (an undefined literal was stripped)\n    }\n    else if (vals.length === 1) {\n        const val = vals[0];\n        json.type = val === null ? \"null\" : typeof val;\n        if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n            json.enum = [val];\n        }\n        else {\n            json.const = val;\n        }\n    }\n    else {\n        if (vals.every((v) => typeof v === \"number\"))\n            json.type = \"number\";\n        if (vals.every((v) => typeof v === \"string\"))\n            json.type = \"string\";\n        if (vals.every((v) => typeof v === \"boolean\"))\n            json.type = \"boolean\";\n        if (vals.every((v) => v === null))\n            json.type = \"null\";\n        json.enum = vals;\n    }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"NaN cannot be represented in JSON Schema\");\n    }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    const pattern = schema._zod.pattern;\n    if (!pattern)\n        throw new Error(\"Pattern not found in template literal\");\n    _json.type = \"string\";\n    _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    const file = {\n        type: \"string\",\n        format: \"binary\",\n        contentEncoding: \"binary\",\n    };\n    const { minimum, maximum, mime } = schema._zod.bag;\n    if (minimum !== undefined)\n        file.minLength = minimum;\n    if (maximum !== undefined)\n        file.maxLength = maximum;\n    if (mime) {\n        if (mime.length === 1) {\n            file.contentMediaType = mime[0];\n            Object.assign(_json, file);\n        }\n        else {\n            Object.assign(_json, file); // shared props at root\n            _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n        }\n    }\n    else {\n        Object.assign(_json, file);\n    }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Custom types cannot be represented in JSON Schema\");\n    }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Function types cannot be represented in JSON Schema\");\n    }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Transforms cannot be represented in JSON Schema\");\n    }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Map cannot be represented in JSON Schema\");\n    }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Set cannot be represented in JSON Schema\");\n    }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    const { minimum, maximum } = schema._zod.bag;\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n    json.type = \"array\";\n    json.items = process(def.element, ctx, { ...params, path: [...params.path, \"items\"] });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"object\";\n    json.properties = {};\n    const shape = def.shape;\n    for (const key in shape) {\n        json.properties[key] = process(shape[key], ctx, {\n            ...params,\n            path: [...params.path, \"properties\", key],\n        });\n    }\n    // required keys\n    const allKeys = new Set(Object.keys(shape));\n    const requiredKeys = new Set([...allKeys].filter((key) => {\n        const v = def.shape[key]._zod;\n        if (ctx.io === \"input\") {\n            return v.optin === undefined;\n        }\n        else {\n            return v.optout === undefined;\n        }\n    }));\n    if (requiredKeys.size > 0) {\n        json.required = Array.from(requiredKeys);\n    }\n    // catchall\n    if (def.catchall?._zod.def.type === \"never\") {\n        // strict\n        json.additionalProperties = false;\n    }\n    else if (!def.catchall) {\n        // regular\n        if (ctx.io === \"output\")\n            json.additionalProperties = false;\n    }\n    else if (def.catchall) {\n        json.additionalProperties = process(def.catchall, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n    // This includes both z.xor() and discriminated unions\n    const isExclusive = def.inclusive === false;\n    const options = def.options.map((x, i) => process(x, ctx, {\n        ...params,\n        path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n    }));\n    if (isExclusive) {\n        json.oneOf = options;\n    }\n    else {\n        json.anyOf = options;\n    }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const a = process(def.left, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 0],\n    });\n    const b = process(def.right, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 1],\n    });\n    const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n    const allOf = [\n        ...(isSimpleIntersection(a) ? a.allOf : [a]),\n        ...(isSimpleIntersection(b) ? b.allOf : [b]),\n    ];\n    json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"array\";\n    const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n    const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n    const prefixItems = def.items.map((x, i) => process(x, ctx, {\n        ...params,\n        path: [...params.path, prefixPath, i],\n    }));\n    const rest = def.rest\n        ? process(def.rest, ctx, {\n            ...params,\n            path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n        })\n        : null;\n    if (ctx.target === \"draft-2020-12\") {\n        json.prefixItems = prefixItems;\n        if (rest) {\n            json.items = rest;\n        }\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        json.items = {\n            anyOf: prefixItems,\n        };\n        if (rest) {\n            json.items.anyOf.push(rest);\n        }\n        json.minItems = prefixItems.length;\n        if (!rest) {\n            json.maxItems = prefixItems.length;\n        }\n    }\n    else {\n        json.items = prefixItems;\n        if (rest) {\n            json.additionalItems = rest;\n        }\n    }\n    // length\n    const { minimum, maximum } = schema._zod.bag;\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"object\";\n    // For looseRecord with regex patterns, use patternProperties\n    // This correctly represents \"only validate keys matching the pattern\" semantics\n    // and composes well with allOf (intersections)\n    const keyType = def.keyType;\n    const keyBag = keyType._zod.bag;\n    const patterns = keyBag?.patterns;\n    if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n        // Use patternProperties for looseRecord with regex patterns\n        const valueSchema = process(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"patternProperties\", \"*\"],\n        });\n        json.patternProperties = {};\n        for (const pattern of patterns) {\n            json.patternProperties[pattern.source] = valueSchema;\n        }\n    }\n    else {\n        // Default behavior: use propertyNames + additionalProperties\n        if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n            json.propertyNames = process(def.keyType, ctx, {\n                ...params,\n                path: [...params.path, \"propertyNames\"],\n            });\n        }\n        json.additionalProperties = process(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n    // Add required for keys with discrete values (enum, literal, etc.)\n    const keyValues = keyType._zod.values;\n    if (keyValues) {\n        const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n        if (validKeyValues.length > 0) {\n            json.required = validKeyValues;\n        }\n    }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const inner = process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    if (ctx.target === \"openapi-3.0\") {\n        seen.ref = def.innerType;\n        json.nullable = true;\n    }\n    else {\n        json.anyOf = [inner, { type: \"null\" }];\n    }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    if (ctx.io === \"input\")\n        json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    let catchValue;\n    try {\n        catchValue = def.catchValue(undefined);\n    }\n    catch {\n        throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n    }\n    json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    const innerType = ctx.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n    process(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n    const innerType = schema._zod.innerType;\n    process(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n    string: stringProcessor,\n    number: numberProcessor,\n    boolean: booleanProcessor,\n    bigint: bigintProcessor,\n    symbol: symbolProcessor,\n    null: nullProcessor,\n    undefined: undefinedProcessor,\n    void: voidProcessor,\n    never: neverProcessor,\n    any: anyProcessor,\n    unknown: unknownProcessor,\n    date: dateProcessor,\n    enum: enumProcessor,\n    literal: literalProcessor,\n    nan: nanProcessor,\n    template_literal: templateLiteralProcessor,\n    file: fileProcessor,\n    success: successProcessor,\n    custom: customProcessor,\n    function: functionProcessor,\n    transform: transformProcessor,\n    map: mapProcessor,\n    set: setProcessor,\n    array: arrayProcessor,\n    object: objectProcessor,\n    union: unionProcessor,\n    intersection: intersectionProcessor,\n    tuple: tupleProcessor,\n    record: recordProcessor,\n    nullable: nullableProcessor,\n    nonoptional: nonoptionalProcessor,\n    default: defaultProcessor,\n    prefault: prefaultProcessor,\n    catch: catchProcessor,\n    pipe: pipeProcessor,\n    readonly: readonlyProcessor,\n    promise: promiseProcessor,\n    optional: optionalProcessor,\n    lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n    if (\"_idmap\" in input) {\n        // Registry case\n        const registry = input;\n        const ctx = initializeContext({ ...params, processors: allProcessors });\n        const defs = {};\n        // First pass: process all schemas to build the seen map\n        for (const entry of registry._idmap.entries()) {\n            const [_, schema] = entry;\n            process(schema, ctx);\n        }\n        const schemas = {};\n        const external = {\n            registry,\n            uri: params?.uri,\n            defs,\n        };\n        // Update the context with external configuration\n        ctx.external = external;\n        // Second pass: emit each schema\n        for (const entry of registry._idmap.entries()) {\n            const [key, schema] = entry;\n            extractDefs(ctx, schema);\n            schemas[key] = finalize(ctx, schema);\n        }\n        if (Object.keys(defs).length > 0) {\n            const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n            schemas.__shared = {\n                [defsSegment]: defs,\n            };\n        }\n        return { schemas };\n    }\n    // Single schema case\n    const ctx = initializeContext({ ...params, processors: allProcessors });\n    process(input, ctx);\n    extractDefs(ctx, input);\n    return finalize(ctx, input);\n}\n", "import { allProcessors } from \"./json-schema-processors.js\";\nimport { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\n/**\n * Legacy class-based interface for JSON Schema generation.\n * This class wraps the new functional implementation to provide backward compatibility.\n *\n * @deprecated Use the `toJSONSchema` function instead for new code.\n *\n * @example\n * ```typescript\n * // Legacy usage (still supported)\n * const gen = new JSONSchemaGenerator({ target: \"draft-07\" });\n * gen.process(schema);\n * const result = gen.emit(schema);\n *\n * // Preferred modern usage\n * const result = toJSONSchema(schema, { target: \"draft-07\" });\n * ```\n */\nexport class JSONSchemaGenerator {\n    /** @deprecated Access via ctx instead */\n    get metadataRegistry() {\n        return this.ctx.metadataRegistry;\n    }\n    /** @deprecated Access via ctx instead */\n    get target() {\n        return this.ctx.target;\n    }\n    /** @deprecated Access via ctx instead */\n    get unrepresentable() {\n        return this.ctx.unrepresentable;\n    }\n    /** @deprecated Access via ctx instead */\n    get override() {\n        return this.ctx.override;\n    }\n    /** @deprecated Access via ctx instead */\n    get io() {\n        return this.ctx.io;\n    }\n    /** @deprecated Access via ctx instead */\n    get counter() {\n        return this.ctx.counter;\n    }\n    set counter(value) {\n        this.ctx.counter = value;\n    }\n    /** @deprecated Access via ctx instead */\n    get seen() {\n        return this.ctx.seen;\n    }\n    constructor(params) {\n        // Normalize target for internal context\n        let normalizedTarget = params?.target ?? \"draft-2020-12\";\n        if (normalizedTarget === \"draft-4\")\n            normalizedTarget = \"draft-04\";\n        if (normalizedTarget === \"draft-7\")\n            normalizedTarget = \"draft-07\";\n        this.ctx = initializeContext({\n            processors: allProcessors,\n            target: normalizedTarget,\n            ...(params?.metadata && { metadata: params.metadata }),\n            ...(params?.unrepresentable && { unrepresentable: params.unrepresentable }),\n            ...(params?.override && { override: params.override }),\n            ...(params?.io && { io: params.io }),\n        });\n    }\n    /**\n     * Process a schema to prepare it for JSON Schema generation.\n     * This must be called before emit().\n     */\n    process(schema, _params = { path: [], schemaPath: [] }) {\n        return process(schema, this.ctx, _params);\n    }\n    /**\n     * Emit the final JSON Schema after processing.\n     * Must call process() first.\n     */\n    emit(schema, _params) {\n        // Apply emit params to the context\n        if (_params) {\n            if (_params.cycles)\n                this.ctx.cycles = _params.cycles;\n            if (_params.reused)\n                this.ctx.reused = _params.reused;\n            if (_params.external)\n                this.ctx.external = _params.external;\n        }\n        extractDefs(this.ctx, schema);\n        const result = finalize(this.ctx, schema);\n        // Strip ~standard property to match old implementation's return type\n        const { \"~standard\": _, ...plainResult } = result;\n        return plainResult;\n    }\n}\n", "export {};\n", "export * from \"./core.js\";\nexport * from \"./parse.js\";\nexport * from \"./errors.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./versions.js\";\nexport * as util from \"./util.js\";\nexport * as regexes from \"./regexes.js\";\nexport * as locales from \"../locales/index.js\";\nexport * from \"./registries.js\";\nexport * from \"./doc.js\";\nexport * from \"./api.js\";\nexport * from \"./to-json-schema.js\";\nexport { toJSONSchema } from \"./json-schema-processors.js\";\nexport { JSONSchemaGenerator } from \"./json-schema-generator.js\";\nexport * as JSONSchema from \"./json-schema.js\";\n", "export { _lt as lt, _lte as lte, _gt as gt, _gte as gte, _positive as positive, _negative as negative, _nonpositive as nonpositive, _nonnegative as nonnegative, _multipleOf as multipleOf, _maxSize as maxSize, _minSize as minSize, _size as size, _maxLength as maxLength, _minLength as minLength, _length as length, _regex as regex, _lowercase as lowercase, _uppercase as uppercase, _includes as includes, _startsWith as startsWith, _endsWith as endsWith, _property as property, _mime as mime, _overwrite as overwrite, _normalize as normalize, _trim as trim, _toLowerCase as toLowerCase, _toUpperCase as toUpperCase, _slugify as slugify, } from \"../core/index.js\";\n", "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n    return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n    return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n    return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n    return core._isoDuration(ZodISODuration, params);\n}\n", "import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n    $ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    Object.defineProperties(inst, {\n        format: {\n            value: (mapper) => core.formatError(inst, mapper),\n            // enumerable: false,\n        },\n        flatten: {\n            value: (mapper) => core.flattenError(inst, mapper),\n            // enumerable: false,\n        },\n        addIssue: {\n            value: (issue) => {\n                inst.issues.push(issue);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        addIssues: {\n            value: (issues) => {\n                inst.issues.push(...issues);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        isEmpty: {\n            get() {\n                return inst.issues.length === 0;\n            },\n            // enumerable: false,\n        },\n    });\n    // Object.defineProperty(inst, \"isEmpty\", {\n    //   get() {\n    //     return inst.issues.length === 0;\n    //   },\n    // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n", "import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n", "import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n    core.$ZodType.init(inst, def);\n    Object.assign(inst[\"~standard\"], {\n        jsonSchema: {\n            input: createStandardJSONSchemaMethod(inst, \"input\"),\n            output: createStandardJSONSchemaMethod(inst, \"output\"),\n        },\n    });\n    inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n    inst.def = def;\n    inst.type = def.type;\n    Object.defineProperty(inst, \"_def\", { value: def });\n    // base methods\n    inst.check = (...checks) => {\n        return inst.clone(util.mergeDefs(def, {\n            checks: [\n                ...(def.checks ?? []),\n                ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }), {\n            parent: true,\n        });\n    };\n    inst.with = inst.check;\n    inst.clone = (def, params) => core.clone(inst, def, params);\n    inst.brand = () => inst;\n    inst.register = ((reg, meta) => {\n        reg.add(inst, meta);\n        return inst;\n    });\n    // parsing\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.spa = inst.safeParseAsync;\n    // encoding/decoding\n    inst.encode = (data, params) => parse.encode(inst, data, params);\n    inst.decode = (data, params) => parse.decode(inst, data, params);\n    inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n    inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n    inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n    inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n    inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n    inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n    // refinements\n    inst.refine = (check, params) => inst.check(refine(check, params));\n    inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n    inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n    // wrappers\n    inst.optional = () => optional(inst);\n    inst.exactOptional = () => exactOptional(inst);\n    inst.nullable = () => nullable(inst);\n    inst.nullish = () => optional(nullable(inst));\n    inst.nonoptional = (params) => nonoptional(inst, params);\n    inst.array = () => array(inst);\n    inst.or = (arg) => union([inst, arg]);\n    inst.and = (arg) => intersection(inst, arg);\n    inst.transform = (tx) => pipe(inst, transform(tx));\n    inst.default = (def) => _default(inst, def);\n    inst.prefault = (def) => prefault(inst, def);\n    // inst.coalesce = (def, params) => coalesce(inst, def, params);\n    inst.catch = (params) => _catch(inst, params);\n    inst.pipe = (target) => pipe(inst, target);\n    inst.readonly = () => readonly(inst);\n    // meta\n    inst.describe = (description) => {\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, { description });\n        return cl;\n    };\n    Object.defineProperty(inst, \"description\", {\n        get() {\n            return core.globalRegistry.get(inst)?.description;\n        },\n        configurable: true,\n    });\n    inst.meta = (...args) => {\n        if (args.length === 0) {\n            return core.globalRegistry.get(inst);\n        }\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, args[0]);\n        return cl;\n    };\n    // helpers\n    inst.isOptional = () => inst.safeParse(undefined).success;\n    inst.isNullable = () => inst.safeParse(null).success;\n    inst.apply = (fn) => fn(inst);\n    return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n    const bag = inst._zod.bag;\n    inst.format = bag.format ?? null;\n    inst.minLength = bag.minimum ?? null;\n    inst.maxLength = bag.maximum ?? null;\n    // validations\n    inst.regex = (...args) => inst.check(checks.regex(...args));\n    inst.includes = (...args) => inst.check(checks.includes(...args));\n    inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n    inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n    inst.min = (...args) => inst.check(checks.minLength(...args));\n    inst.max = (...args) => inst.check(checks.maxLength(...args));\n    inst.length = (...args) => inst.check(checks.length(...args));\n    inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n    inst.lowercase = (params) => inst.check(checks.lowercase(params));\n    inst.uppercase = (params) => inst.check(checks.uppercase(params));\n    // transforms\n    inst.trim = () => inst.check(checks.trim());\n    inst.normalize = (...args) => inst.check(checks.normalize(...args));\n    inst.toLowerCase = () => inst.check(checks.toLowerCase());\n    inst.toUpperCase = () => inst.check(checks.toUpperCase());\n    inst.slugify = () => inst.check(checks.slugify());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    _ZodString.init(inst, def);\n    inst.email = (params) => inst.check(core._email(ZodEmail, params));\n    inst.url = (params) => inst.check(core._url(ZodURL, params));\n    inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n    inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n    inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n    inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n    inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n    inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n    inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n    inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n    inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n    inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n    inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n    inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n    inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n    inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n    inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n    inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n    inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n    // iso\n    inst.datetime = (params) => inst.check(iso.datetime(params));\n    inst.date = (params) => inst.check(iso.date(params));\n    inst.time = (params) => inst.check(iso.time(params));\n    inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n    return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n    return core._url(ZodURL, {\n        protocol: /^https?$/,\n        hostname: core.regexes.domain,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n    return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodMAC.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n    return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n    const enc = params?.enc ?? \"hex\";\n    const format = `${alg}_${enc}`;\n    const regex = core.regexes[format];\n    if (!regex)\n        throw new Error(`Unrecognized hash format: ${format}`);\n    return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.int = (params) => inst.check(int(params));\n    inst.safe = (params) => inst.check(int(params));\n    inst.positive = (params) => inst.check(checks.gt(0, params));\n    inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n    inst.negative = (params) => inst.check(checks.lt(0, params));\n    inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n    // inst.finite = (params) => inst.check(core.finite(params));\n    inst.finite = () => inst;\n    const bag = inst._zod.bag;\n    inst.minValue =\n        Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n    inst.maxValue =\n        Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n    inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n    inst.isFinite = true;\n    inst.format = bag.format ?? null;\n});\nexport function number(params) {\n    return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n    return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n    inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n    inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n    inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    const bag = inst._zod.bag;\n    inst.minValue = bag.minimum ?? null;\n    inst.maxValue = bag.maximum ?? null;\n    inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n    return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n    return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n    return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n    return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n    return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n    return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n    return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    const c = inst._zod.bag;\n    inst.minDate = c.minimum ? new Date(c.minimum) : null;\n    inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n    return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n    inst.element = def.element;\n    inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n    inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n    inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n    inst.length = (len, params) => inst.check(checks.length(len, params));\n    inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n    return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n    core.$ZodObjectJIT.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n    util.defineLazy(inst, \"shape\", () => {\n        return def.shape;\n    });\n    inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n    inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n    inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n    inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n    inst.extend = (incoming) => {\n        return util.extend(inst, incoming);\n    };\n    inst.safeExtend = (incoming) => {\n        return util.safeExtend(inst, incoming);\n    };\n    inst.merge = (other) => util.merge(inst, other);\n    inst.pick = (mask) => util.pick(inst, mask);\n    inst.omit = (mask) => util.omit(inst, mask);\n    inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n    inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        shape: shape ?? {},\n        ...util.normalizeParams(params),\n    };\n    return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\nexport function union(options, params) {\n    return new ZodUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodXor.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n    return new ZodXor({\n        type: \"union\",\n        options: options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new ZodDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n    return new ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n    inst.rest = (rest) => inst.clone({\n        ...inst._zod.def,\n        rest: rest,\n    });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n    const k = core.clone(keyType);\n    k._zod.values = undefined;\n    return new ZodRecord({\n        type: \"record\",\n        keyType: k,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function looseRecord(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        mode: \"loose\",\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n    return new ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n    inst.enum = def.entries;\n    inst.options = Object.values(def.entries);\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nexport function literal(value, params) {\n    return new ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n    return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n    inst._zod.parse = (payload, _ctx) => {\n        if (_ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = inst);\n                // _issue.continue ??= true;\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        payload.value = output;\n        return payload;\n    };\n});\nexport function transform(fn) {\n    return new ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n    return new ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n    core.$ZodExactOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n    return new ZodExactOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n    return new ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n    return new ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n    return new ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n    return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nexport function pipe(in_, out) {\n    return new ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n    return new ZodCodec({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        transform: params.decode,\n        reverseTransform: params.encode,\n    });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n    return new ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n    return new ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n    return new ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n    core.$ZodFunction.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n    return new ZodFunction({\n        type: \"function\",\n        input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n        output: params?.output ?? unknown(),\n    });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function custom(fn, _params) {\n    return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n    return core._superRefine(fn);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n    const inst = new ZodCustom({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    // Override check to emit invalid_type instead of custom\n    inst._zod.check = (payload) => {\n        if (!(payload.value instanceof cls)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: cls.name,\n                input: payload.value,\n                inst,\n                path: [...(inst._zod.def.path ?? [])],\n            });\n        }\n    };\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Codec: ZodCodec,\n    Boolean: ZodBoolean,\n    String: ZodString,\n}, ...args);\nexport function json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n    return pipe(transform(fn), schema);\n}\n", "// Zod 3 compat layer\nimport * as core from \"../core/index.js\";\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexport const ZodIssueCode = {\n    invalid_type: \"invalid_type\",\n    too_big: \"too_big\",\n    too_small: \"too_small\",\n    invalid_format: \"invalid_format\",\n    not_multiple_of: \"not_multiple_of\",\n    unrecognized_keys: \"unrecognized_keys\",\n    invalid_union: \"invalid_union\",\n    invalid_key: \"invalid_key\",\n    invalid_element: \"invalid_element\",\n    invalid_value: \"invalid_value\",\n    custom: \"custom\",\n};\nexport { $brand, config } from \"../core/index.js\";\n/** @deprecated Use `z.config(params)` instead. */\nexport function setErrorMap(map) {\n    core.config({\n        customError: map,\n    });\n}\n/** @deprecated Use `z.config()` instead. */\nexport function getErrorMap() {\n    return core.config().customError;\n}\n/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n", "import { globalRegistry } from \"../core/registries.js\";\nimport * as _checks from \"./checks.js\";\nimport * as _iso from \"./iso.js\";\nimport * as _schemas from \"./schemas.js\";\n// Local z object to avoid circular dependency with ../index.js\nconst z = {\n    ..._schemas,\n    ..._checks,\n    iso: _iso,\n};\n// Keys that are recognized and handled by the conversion logic\nconst RECOGNIZED_KEYS = new Set([\n    // Schema identification\n    \"$schema\",\n    \"$ref\",\n    \"$defs\",\n    \"definitions\",\n    // Core schema keywords\n    \"$id\",\n    \"id\",\n    \"$comment\",\n    \"$anchor\",\n    \"$vocabulary\",\n    \"$dynamicRef\",\n    \"$dynamicAnchor\",\n    // Type\n    \"type\",\n    \"enum\",\n    \"const\",\n    // Composition\n    \"anyOf\",\n    \"oneOf\",\n    \"allOf\",\n    \"not\",\n    // Object\n    \"properties\",\n    \"required\",\n    \"additionalProperties\",\n    \"patternProperties\",\n    \"propertyNames\",\n    \"minProperties\",\n    \"maxProperties\",\n    // Array\n    \"items\",\n    \"prefixItems\",\n    \"additionalItems\",\n    \"minItems\",\n    \"maxItems\",\n    \"uniqueItems\",\n    \"contains\",\n    \"minContains\",\n    \"maxContains\",\n    // String\n    \"minLength\",\n    \"maxLength\",\n    \"pattern\",\n    \"format\",\n    // Number\n    \"minimum\",\n    \"maximum\",\n    \"exclusiveMinimum\",\n    \"exclusiveMaximum\",\n    \"multipleOf\",\n    // Already handled metadata\n    \"description\",\n    \"default\",\n    // Content\n    \"contentEncoding\",\n    \"contentMediaType\",\n    \"contentSchema\",\n    // Unsupported (error-throwing)\n    \"unevaluatedItems\",\n    \"unevaluatedProperties\",\n    \"if\",\n    \"then\",\n    \"else\",\n    \"dependentSchemas\",\n    \"dependentRequired\",\n    // OpenAPI\n    \"nullable\",\n    \"readOnly\",\n]);\nfunction detectVersion(schema, defaultTarget) {\n    const $schema = schema.$schema;\n    if ($schema === \"https://json-schema.org/draft/2020-12/schema\") {\n        return \"draft-2020-12\";\n    }\n    if ($schema === \"http://json-schema.org/draft-07/schema#\") {\n        return \"draft-7\";\n    }\n    if ($schema === \"http://json-schema.org/draft-04/schema#\") {\n        return \"draft-4\";\n    }\n    // Use defaultTarget if provided, otherwise default to draft-2020-12\n    return defaultTarget ?? \"draft-2020-12\";\n}\nfunction resolveRef(ref, ctx) {\n    if (!ref.startsWith(\"#\")) {\n        throw new Error(\"External $ref is not supported, only local refs (#/...) are allowed\");\n    }\n    const path = ref.slice(1).split(\"/\").filter(Boolean);\n    // Handle root reference \"#\"\n    if (path.length === 0) {\n        return ctx.rootSchema;\n    }\n    const defsKey = ctx.version === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n    if (path[0] === defsKey) {\n        const key = path[1];\n        if (!key || !ctx.defs[key]) {\n            throw new Error(`Reference not found: ${ref}`);\n        }\n        return ctx.defs[key];\n    }\n    throw new Error(`Reference not found: ${ref}`);\n}\nfunction convertBaseSchema(schema, ctx) {\n    // Handle unsupported features\n    if (schema.not !== undefined) {\n        // Special case: { not: {} } represents never\n        if (typeof schema.not === \"object\" && Object.keys(schema.not).length === 0) {\n            return z.never();\n        }\n        throw new Error(\"not is not supported in Zod (except { not: {} } for never)\");\n    }\n    if (schema.unevaluatedItems !== undefined) {\n        throw new Error(\"unevaluatedItems is not supported\");\n    }\n    if (schema.unevaluatedProperties !== undefined) {\n        throw new Error(\"unevaluatedProperties is not supported\");\n    }\n    if (schema.if !== undefined || schema.then !== undefined || schema.else !== undefined) {\n        throw new Error(\"Conditional schemas (if/then/else) are not supported\");\n    }\n    if (schema.dependentSchemas !== undefined || schema.dependentRequired !== undefined) {\n        throw new Error(\"dependentSchemas and dependentRequired are not supported\");\n    }\n    // Handle $ref\n    if (schema.$ref) {\n        const refPath = schema.$ref;\n        if (ctx.refs.has(refPath)) {\n            return ctx.refs.get(refPath);\n        }\n        if (ctx.processing.has(refPath)) {\n            // Circular reference - use lazy\n            return z.lazy(() => {\n                if (!ctx.refs.has(refPath)) {\n                    throw new Error(`Circular reference not resolved: ${refPath}`);\n                }\n                return ctx.refs.get(refPath);\n            });\n        }\n        ctx.processing.add(refPath);\n        const resolved = resolveRef(refPath, ctx);\n        const zodSchema = convertSchema(resolved, ctx);\n        ctx.refs.set(refPath, zodSchema);\n        ctx.processing.delete(refPath);\n        return zodSchema;\n    }\n    // Handle enum\n    if (schema.enum !== undefined) {\n        const enumValues = schema.enum;\n        // Special case: OpenAPI 3.0 null representation { type: \"string\", nullable: true, enum: [null] }\n        if (ctx.version === \"openapi-3.0\" &&\n            schema.nullable === true &&\n            enumValues.length === 1 &&\n            enumValues[0] === null) {\n            return z.null();\n        }\n        if (enumValues.length === 0) {\n            return z.never();\n        }\n        if (enumValues.length === 1) {\n            return z.literal(enumValues[0]);\n        }\n        // Check if all values are strings\n        if (enumValues.every((v) => typeof v === \"string\")) {\n            return z.enum(enumValues);\n        }\n        // Mixed types - use union of literals\n        const literalSchemas = enumValues.map((v) => z.literal(v));\n        if (literalSchemas.length < 2) {\n            return literalSchemas[0];\n        }\n        return z.union([literalSchemas[0], literalSchemas[1], ...literalSchemas.slice(2)]);\n    }\n    // Handle const\n    if (schema.const !== undefined) {\n        return z.literal(schema.const);\n    }\n    // Handle type\n    const type = schema.type;\n    if (Array.isArray(type)) {\n        // Expand type array into anyOf union\n        const typeSchemas = type.map((t) => {\n            const typeSchema = { ...schema, type: t };\n            return convertBaseSchema(typeSchema, ctx);\n        });\n        if (typeSchemas.length === 0) {\n            return z.never();\n        }\n        if (typeSchemas.length === 1) {\n            return typeSchemas[0];\n        }\n        return z.union(typeSchemas);\n    }\n    if (!type) {\n        // No type specified - empty schema (any)\n        return z.any();\n    }\n    let zodSchema;\n    switch (type) {\n        case \"string\": {\n            let stringSchema = z.string();\n            // Apply format using .check() with Zod format functions\n            if (schema.format) {\n                const format = schema.format;\n                // Map common formats to Zod check functions\n                if (format === \"email\") {\n                    stringSchema = stringSchema.check(z.email());\n                }\n                else if (format === \"uri\" || format === \"uri-reference\") {\n                    stringSchema = stringSchema.check(z.url());\n                }\n                else if (format === \"uuid\" || format === \"guid\") {\n                    stringSchema = stringSchema.check(z.uuid());\n                }\n                else if (format === \"date-time\") {\n                    stringSchema = stringSchema.check(z.iso.datetime());\n                }\n                else if (format === \"date\") {\n                    stringSchema = stringSchema.check(z.iso.date());\n                }\n                else if (format === \"time\") {\n                    stringSchema = stringSchema.check(z.iso.time());\n                }\n                else if (format === \"duration\") {\n                    stringSchema = stringSchema.check(z.iso.duration());\n                }\n                else if (format === \"ipv4\") {\n                    stringSchema = stringSchema.check(z.ipv4());\n                }\n                else if (format === \"ipv6\") {\n                    stringSchema = stringSchema.check(z.ipv6());\n                }\n                else if (format === \"mac\") {\n                    stringSchema = stringSchema.check(z.mac());\n                }\n                else if (format === \"cidr\") {\n                    stringSchema = stringSchema.check(z.cidrv4());\n                }\n                else if (format === \"cidr-v6\") {\n                    stringSchema = stringSchema.check(z.cidrv6());\n                }\n                else if (format === \"base64\") {\n                    stringSchema = stringSchema.check(z.base64());\n                }\n                else if (format === \"base64url\") {\n                    stringSchema = stringSchema.check(z.base64url());\n                }\n                else if (format === \"e164\") {\n                    stringSchema = stringSchema.check(z.e164());\n                }\n                else if (format === \"jwt\") {\n                    stringSchema = stringSchema.check(z.jwt());\n                }\n                else if (format === \"emoji\") {\n                    stringSchema = stringSchema.check(z.emoji());\n                }\n                else if (format === \"nanoid\") {\n                    stringSchema = stringSchema.check(z.nanoid());\n                }\n                else if (format === \"cuid\") {\n                    stringSchema = stringSchema.check(z.cuid());\n                }\n                else if (format === \"cuid2\") {\n                    stringSchema = stringSchema.check(z.cuid2());\n                }\n                else if (format === \"ulid\") {\n                    stringSchema = stringSchema.check(z.ulid());\n                }\n                else if (format === \"xid\") {\n                    stringSchema = stringSchema.check(z.xid());\n                }\n                else if (format === \"ksuid\") {\n                    stringSchema = stringSchema.check(z.ksuid());\n                }\n                // Note: json-string format is not currently supported by Zod\n                // Custom formats are ignored - keep as plain string\n            }\n            // Apply constraints\n            if (typeof schema.minLength === \"number\") {\n                stringSchema = stringSchema.min(schema.minLength);\n            }\n            if (typeof schema.maxLength === \"number\") {\n                stringSchema = stringSchema.max(schema.maxLength);\n            }\n            if (schema.pattern) {\n                // JSON Schema patterns are not implicitly anchored (match anywhere in string)\n                stringSchema = stringSchema.regex(new RegExp(schema.pattern));\n            }\n            zodSchema = stringSchema;\n            break;\n        }\n        case \"number\":\n        case \"integer\": {\n            let numberSchema = type === \"integer\" ? z.number().int() : z.number();\n            // Apply constraints\n            if (typeof schema.minimum === \"number\") {\n                numberSchema = numberSchema.min(schema.minimum);\n            }\n            if (typeof schema.maximum === \"number\") {\n                numberSchema = numberSchema.max(schema.maximum);\n            }\n            if (typeof schema.exclusiveMinimum === \"number\") {\n                numberSchema = numberSchema.gt(schema.exclusiveMinimum);\n            }\n            else if (schema.exclusiveMinimum === true && typeof schema.minimum === \"number\") {\n                numberSchema = numberSchema.gt(schema.minimum);\n            }\n            if (typeof schema.exclusiveMaximum === \"number\") {\n                numberSchema = numberSchema.lt(schema.exclusiveMaximum);\n            }\n            else if (schema.exclusiveMaximum === true && typeof schema.maximum === \"number\") {\n                numberSchema = numberSchema.lt(schema.maximum);\n            }\n            if (typeof schema.multipleOf === \"number\") {\n                numberSchema = numberSchema.multipleOf(schema.multipleOf);\n            }\n            zodSchema = numberSchema;\n            break;\n        }\n        case \"boolean\": {\n            zodSchema = z.boolean();\n            break;\n        }\n        case \"null\": {\n            zodSchema = z.null();\n            break;\n        }\n        case \"object\": {\n            const shape = {};\n            const properties = schema.properties || {};\n            const requiredSet = new Set(schema.required || []);\n            // Convert properties - mark optional ones\n            for (const [key, propSchema] of Object.entries(properties)) {\n                const propZodSchema = convertSchema(propSchema, ctx);\n                // If not in required array, make it optional\n                shape[key] = requiredSet.has(key) ? propZodSchema : propZodSchema.optional();\n            }\n            // Handle propertyNames\n            if (schema.propertyNames) {\n                const keySchema = convertSchema(schema.propertyNames, ctx);\n                const valueSchema = schema.additionalProperties && typeof schema.additionalProperties === \"object\"\n                    ? convertSchema(schema.additionalProperties, ctx)\n                    : z.any();\n                // Case A: No properties (pure record)\n                if (Object.keys(shape).length === 0) {\n                    zodSchema = z.record(keySchema, valueSchema);\n                    break;\n                }\n                // Case B: With properties (intersection of object and looseRecord)\n                const objectSchema = z.object(shape).passthrough();\n                const recordSchema = z.looseRecord(keySchema, valueSchema);\n                zodSchema = z.intersection(objectSchema, recordSchema);\n                break;\n            }\n            // Handle patternProperties\n            if (schema.patternProperties) {\n                // patternProperties: keys matching pattern must satisfy corresponding schema\n                // Use loose records so non-matching keys pass through\n                const patternProps = schema.patternProperties;\n                const patternKeys = Object.keys(patternProps);\n                const looseRecords = [];\n                for (const pattern of patternKeys) {\n                    const patternValue = convertSchema(patternProps[pattern], ctx);\n                    const keySchema = z.string().regex(new RegExp(pattern));\n                    looseRecords.push(z.looseRecord(keySchema, patternValue));\n                }\n                // Build intersection: object schema + all pattern property records\n                const schemasToIntersect = [];\n                if (Object.keys(shape).length > 0) {\n                    // Use passthrough so patternProperties can validate additional keys\n                    schemasToIntersect.push(z.object(shape).passthrough());\n                }\n                schemasToIntersect.push(...looseRecords);\n                if (schemasToIntersect.length === 0) {\n                    zodSchema = z.object({}).passthrough();\n                }\n                else if (schemasToIntersect.length === 1) {\n                    zodSchema = schemasToIntersect[0];\n                }\n                else {\n                    // Chain intersections: (A & B) & C & D ...\n                    let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]);\n                    for (let i = 2; i < schemasToIntersect.length; i++) {\n                        result = z.intersection(result, schemasToIntersect[i]);\n                    }\n                    zodSchema = result;\n                }\n                break;\n            }\n            // Handle additionalProperties\n            // In JSON Schema, additionalProperties defaults to true (allow any extra properties)\n            // In Zod, objects strip unknown keys by default, so we need to handle this explicitly\n            const objectSchema = z.object(shape);\n            if (schema.additionalProperties === false) {\n                // Strict mode - no extra properties allowed\n                zodSchema = objectSchema.strict();\n            }\n            else if (typeof schema.additionalProperties === \"object\") {\n                // Extra properties must match the specified schema\n                zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx));\n            }\n            else {\n                // additionalProperties is true or undefined - allow any extra properties (passthrough)\n                zodSchema = objectSchema.passthrough();\n            }\n            break;\n        }\n        case \"array\": {\n            // TODO: uniqueItems is not supported\n            // TODO: contains/minContains/maxContains are not supported\n            // Check if this is a tuple (prefixItems or items as array)\n            const prefixItems = schema.prefixItems;\n            const items = schema.items;\n            if (prefixItems && Array.isArray(prefixItems)) {\n                // Tuple with prefixItems (draft-2020-12)\n                const tupleItems = prefixItems.map((item) => convertSchema(item, ctx));\n                const rest = items && typeof items === \"object\" && !Array.isArray(items)\n                    ? convertSchema(items, ctx)\n                    : undefined;\n                if (rest) {\n                    zodSchema = z.tuple(tupleItems).rest(rest);\n                }\n                else {\n                    zodSchema = z.tuple(tupleItems);\n                }\n                // Apply minItems/maxItems constraints to tuples\n                if (typeof schema.minItems === \"number\") {\n                    zodSchema = zodSchema.check(z.minLength(schema.minItems));\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n                }\n            }\n            else if (Array.isArray(items)) {\n                // Tuple with items array (draft-7)\n                const tupleItems = items.map((item) => convertSchema(item, ctx));\n                const rest = schema.additionalItems && typeof schema.additionalItems === \"object\"\n                    ? convertSchema(schema.additionalItems, ctx)\n                    : undefined; // additionalItems: false means no rest, handled by default tuple behavior\n                if (rest) {\n                    zodSchema = z.tuple(tupleItems).rest(rest);\n                }\n                else {\n                    zodSchema = z.tuple(tupleItems);\n                }\n                // Apply minItems/maxItems constraints to tuples\n                if (typeof schema.minItems === \"number\") {\n                    zodSchema = zodSchema.check(z.minLength(schema.minItems));\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n                }\n            }\n            else if (items !== undefined) {\n                // Regular array\n                const element = convertSchema(items, ctx);\n                let arraySchema = z.array(element);\n                // Apply constraints\n                if (typeof schema.minItems === \"number\") {\n                    arraySchema = arraySchema.min(schema.minItems);\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    arraySchema = arraySchema.max(schema.maxItems);\n                }\n                zodSchema = arraySchema;\n            }\n            else {\n                // No items specified - array of any\n                zodSchema = z.array(z.any());\n            }\n            break;\n        }\n        default:\n            throw new Error(`Unsupported type: ${type}`);\n    }\n    // Apply metadata\n    if (schema.description) {\n        zodSchema = zodSchema.describe(schema.description);\n    }\n    if (schema.default !== undefined) {\n        zodSchema = zodSchema.default(schema.default);\n    }\n    return zodSchema;\n}\nfunction convertSchema(schema, ctx) {\n    if (typeof schema === \"boolean\") {\n        return schema ? z.any() : z.never();\n    }\n    // Convert base schema first (ignoring composition keywords)\n    let baseSchema = convertBaseSchema(schema, ctx);\n    const hasExplicitType = schema.type || schema.enum !== undefined || schema.const !== undefined;\n    // Process composition keywords LAST (they can appear together)\n    // Handle anyOf - wrap base schema with union\n    if (schema.anyOf && Array.isArray(schema.anyOf)) {\n        const options = schema.anyOf.map((s) => convertSchema(s, ctx));\n        const anyOfUnion = z.union(options);\n        baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion;\n    }\n    // Handle oneOf - exclusive union (exactly one must match)\n    if (schema.oneOf && Array.isArray(schema.oneOf)) {\n        const options = schema.oneOf.map((s) => convertSchema(s, ctx));\n        const oneOfUnion = z.xor(options);\n        baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion;\n    }\n    // Handle allOf - wrap base schema with intersection\n    if (schema.allOf && Array.isArray(schema.allOf)) {\n        if (schema.allOf.length === 0) {\n            baseSchema = hasExplicitType ? baseSchema : z.any();\n        }\n        else {\n            let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0], ctx);\n            const startIdx = hasExplicitType ? 0 : 1;\n            for (let i = startIdx; i < schema.allOf.length; i++) {\n                result = z.intersection(result, convertSchema(schema.allOf[i], ctx));\n            }\n            baseSchema = result;\n        }\n    }\n    // Handle nullable (OpenAPI 3.0)\n    if (schema.nullable === true && ctx.version === \"openapi-3.0\") {\n        baseSchema = z.nullable(baseSchema);\n    }\n    // Handle readOnly\n    if (schema.readOnly === true) {\n        baseSchema = z.readonly(baseSchema);\n    }\n    // Collect metadata: core schema keywords and unrecognized keys\n    const extraMeta = {};\n    // Core schema keywords that should be captured as metadata\n    const coreMetadataKeys = [\"$id\", \"id\", \"$comment\", \"$anchor\", \"$vocabulary\", \"$dynamicRef\", \"$dynamicAnchor\"];\n    for (const key of coreMetadataKeys) {\n        if (key in schema) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    // Content keywords - store as metadata\n    const contentMetadataKeys = [\"contentEncoding\", \"contentMediaType\", \"contentSchema\"];\n    for (const key of contentMetadataKeys) {\n        if (key in schema) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    // Unrecognized keys (custom metadata)\n    for (const key of Object.keys(schema)) {\n        if (!RECOGNIZED_KEYS.has(key)) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    if (Object.keys(extraMeta).length > 0) {\n        ctx.registry.add(baseSchema, extraMeta);\n    }\n    return baseSchema;\n}\n/**\n * Converts a JSON Schema to a Zod schema. This function should be considered semi-experimental. It's behavior is liable to change. */\nexport function fromJSONSchema(schema, params) {\n    // Handle boolean schemas\n    if (typeof schema === \"boolean\") {\n        return schema ? z.any() : z.never();\n    }\n    const version = detectVersion(schema, params?.defaultTarget);\n    const defs = (schema.$defs || schema.definitions || {});\n    const ctx = {\n        version,\n        defs,\n        refs: new Map(),\n        processing: new Set(),\n        rootSchema: schema,\n        registry: params?.registry ?? globalRegistry,\n    };\n    return convertSchema(schema, ctx);\n}\n", "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport function string(params) {\n    return core._coercedString(schemas.ZodString, params);\n}\nexport function number(params) {\n    return core._coercedNumber(schemas.ZodNumber, params);\n}\nexport function boolean(params) {\n    return core._coercedBoolean(schemas.ZodBoolean, params);\n}\nexport function bigint(params) {\n    return core._coercedBigint(schemas.ZodBigInt, params);\n}\nexport function date(params) {\n    return core._coercedDate(schemas.ZodDate, params);\n}\n", "export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, TimePrecision, util, NEVER, } from \"../core/index.js\";\nexport { toJSONSchema } from \"../core/json-schema-processors.js\";\nexport { fromJSONSchema } from \"./from-json-schema.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n", "import * as z from \"./external.js\";\nexport { z };\nexport * from \"./external.js\";\nexport default z;\n", "import z4 from \"./classic/index.js\";\nexport * from \"./classic/index.js\";\nexport default z4;\n", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 598522066688\n */\nimport * as z from \"zod/v4\";\nexport function bytesToBase64(u8arr) {\n    return btoa(String.fromCodePoint(...u8arr));\n}\nexport function bytesFromBase64(encoded) {\n    return Uint8Array.from(atob(encoded), (c) => c.charCodeAt(0));\n}\nexport function stringToBytes(str) {\n    return new TextEncoder().encode(str);\n}\nexport function stringFromBytes(u8arr) {\n    return new TextDecoder().decode(u8arr);\n}\nexport function stringToBase64(str) {\n    return bytesToBase64(stringToBytes(str));\n}\nexport function stringFromBase64(b64str) {\n    return stringFromBytes(bytesFromBase64(b64str));\n}\nexport const zodOutbound = z.custom(x => x instanceof Uint8Array)\n    .or(z.string().transform(stringToBytes));\nexport const zodInbound = z.custom(x => x instanceof Uint8Array)\n    .or(z.string().transform(bytesFromBase64));\n//# sourceMappingURL=base64.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b9862591096a\n */\n/*\nMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n// Taken from https://github.com/sindresorhus/is-plain-obj/blob/97f38e8836f86a642cce98fc6ab3058bc36df181/index.js\nexport function isPlainObject(value) {\n    if (typeof value !== \"object\" || value === null) {\n        return false;\n    }\n    const prototype = Object.getPrototypeOf(value);\n    return ((prototype === null ||\n        prototype === Object.prototype ||\n        Object.getPrototypeOf(prototype) === null) &&\n        !(Symbol.toStringTag in value) &&\n        !(Symbol.iterator in value));\n}\n//# sourceMappingURL=is-plain-object.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3bd8ead98afd\n */\nimport { bytesToBase64 } from \"./base64.js\";\nimport { isPlainObject } from \"./is-plain-object.js\";\nexport class EncodingError extends Error {\n    constructor(message) {\n        super(message);\n        this.name = \"EncodingError\";\n    }\n}\nexport function encodeMatrix(key, value, options) {\n    let out = \"\";\n    const pairs = options?.explode\n        ? explode(key, value)\n        : [[key, value]];\n    if (pairs.every(([_, v]) => v == null)) {\n        return;\n    }\n    const encodeString = (v) => {\n        return options?.charEncoding === \"percent\" ? encodeURIComponent(v) : v;\n    };\n    const encodeValue = (v) => encodeString(serializeValue(v));\n    pairs.forEach(([pk, pv]) => {\n        let tmp = \"\";\n        let encValue = null;\n        if (pv == null) {\n            return;\n        }\n        else if (Array.isArray(pv)) {\n            encValue = mapDefined(pv, (v) => `${encodeValue(v)}`)?.join(\",\");\n        }\n        else if (isPlainObject(pv)) {\n            const mapped = mapDefinedEntries(Object.entries(pv), ([k, v]) => {\n                return `,${encodeString(k)},${encodeValue(v)}`;\n            });\n            encValue = mapped?.join(\"\").slice(1);\n        }\n        else {\n            encValue = `${encodeValue(pv)}`;\n        }\n        if (encValue == null) {\n            return;\n        }\n        const keyPrefix = encodeString(pk);\n        tmp = `${keyPrefix}=${encValue}`;\n        // trim trailing '=' if value was empty\n        if (tmp === `${keyPrefix}=`) {\n            tmp = tmp.slice(0, -1);\n        }\n        // If we end up with the nothing then skip forward\n        if (!tmp) {\n            return;\n        }\n        out += `;${tmp}`;\n    });\n    return out;\n}\nexport function encodeLabel(key, value, options) {\n    let out = \"\";\n    const pairs = options?.explode\n        ? explode(key, value)\n        : [[key, value]];\n    if (pairs.every(([_, v]) => v == null)) {\n        return;\n    }\n    const encodeString = (v) => {\n        return options?.charEncoding === \"percent\" ? encodeURIComponent(v) : v;\n    };\n    const encodeValue = (v) => encodeString(serializeValue(v));\n    pairs.forEach(([pk, pv]) => {\n        let encValue = \"\";\n        if (pv == null) {\n            return;\n        }\n        else if (Array.isArray(pv)) {\n            encValue = mapDefined(pv, (v) => `${encodeValue(v)}`)?.join(\".\");\n        }\n        else if (isPlainObject(pv)) {\n            const mapped = mapDefinedEntries(Object.entries(pv), ([k, v]) => {\n                return `.${encodeString(k)}.${encodeValue(v)}`;\n            });\n            encValue = mapped?.join(\"\").slice(1);\n        }\n        else {\n            const k = options?.explode && isPlainObject(value)\n                ? `${encodeString(pk)}=`\n                : \"\";\n            encValue = `${k}${encodeValue(pv)}`;\n        }\n        out += encValue == null ? \"\" : `.${encValue}`;\n    });\n    return out;\n}\nfunction formEncoder(sep) {\n    return (key, value, options) => {\n        let out = \"\";\n        const pairs = options?.explode\n            ? explode(key, value)\n            : [[key, value]];\n        if (pairs.every(([_, v]) => v == null)) {\n            return;\n        }\n        const encodeString = (v) => {\n            return options?.charEncoding === \"percent\" ? encodeURIComponent(v) : v;\n        };\n        const encodeValue = (v) => encodeString(serializeValue(v));\n        const encodedSep = encodeString(sep);\n        pairs.forEach(([pk, pv]) => {\n            let tmp = \"\";\n            let encValue = null;\n            if (pv == null) {\n                return;\n            }\n            else if (Array.isArray(pv)) {\n                encValue = mapDefined(pv, (v) => `${encodeValue(v)}`)?.join(encodedSep);\n            }\n            else if (isPlainObject(pv)) {\n                encValue = mapDefinedEntries(Object.entries(pv), ([k, v]) => {\n                    return `${encodeString(k)}${encodedSep}${encodeValue(v)}`;\n                })?.join(encodedSep);\n            }\n            else {\n                encValue = `${encodeValue(pv)}`;\n            }\n            if (encValue == null) {\n                return;\n            }\n            tmp = `${encodeString(pk)}=${encValue}`;\n            // If we end up with the nothing then skip forward\n            if (!tmp || tmp === \"=\") {\n                return;\n            }\n            out += `&${tmp}`;\n        });\n        return out.slice(1);\n    };\n}\nexport const encodeForm = formEncoder(\",\");\nexport const encodeSpaceDelimited = formEncoder(\" \");\nexport const encodePipeDelimited = formEncoder(\"|\");\nexport function encodeBodyForm(key, value, options) {\n    let out = \"\";\n    const pairs = options?.explode\n        ? explode(key, value)\n        : [[key, value]];\n    const encodeString = (v) => {\n        return options?.charEncoding === \"percent\" ? encodeURIComponent(v) : v;\n    };\n    const encodeValue = (v) => encodeString(serializeValue(v));\n    pairs.forEach(([pk, pv]) => {\n        let tmp = \"\";\n        let encValue = \"\";\n        if (pv == null) {\n            return;\n        }\n        else if (Array.isArray(pv)) {\n            encValue = JSON.stringify(pv, jsonReplacer);\n        }\n        else if (isPlainObject(pv)) {\n            encValue = JSON.stringify(pv, jsonReplacer);\n        }\n        else {\n            encValue = `${encodeValue(pv)}`;\n        }\n        tmp = `${encodeString(pk)}=${encValue}`;\n        // If we end up with the nothing then skip forward\n        if (!tmp || tmp === \"=\") {\n            return;\n        }\n        out += `&${tmp}`;\n    });\n    return out.slice(1);\n}\nexport function encodeDeepObject(key, value, options) {\n    if (value == null) {\n        return;\n    }\n    if (!isPlainObject(value)) {\n        throw new EncodingError(`Value of parameter '${key}' which uses deepObject encoding must be an object or null`);\n    }\n    return encodeDeepObjectObject(key, value, options);\n}\nexport function encodeDeepObjectObject(key, value, options) {\n    if (value == null) {\n        return;\n    }\n    let out = \"\";\n    const encodeString = (v) => {\n        return options?.charEncoding === \"percent\" ? encodeURIComponent(v) : v;\n    };\n    if (!isPlainObject(value)) {\n        throw new EncodingError(`Expected parameter '${key}' to be an object.`);\n    }\n    Object.entries(value).forEach(([ck, cv]) => {\n        if (cv == null) {\n            return;\n        }\n        const pk = `${key}[${ck}]`;\n        if (isPlainObject(cv)) {\n            const objOut = encodeDeepObjectObject(pk, cv, options);\n            out += objOut == null ? \"\" : `&${objOut}`;\n            return;\n        }\n        const pairs = Array.isArray(cv) ? cv : [cv];\n        const encoded = mapDefined(pairs, (v) => {\n            return `${encodeString(pk)}=${encodeString(serializeValue(v))}`;\n        })?.join(\"&\");\n        out += encoded == null ? \"\" : `&${encoded}`;\n    });\n    return out.slice(1);\n}\nexport function encodeJSON(key, value, options) {\n    if (typeof value === \"undefined\") {\n        return;\n    }\n    const encodeString = (v) => {\n        return options?.charEncoding === \"percent\" ? encodeURIComponent(v) : v;\n    };\n    const encVal = encodeString(JSON.stringify(value, jsonReplacer));\n    return options?.explode ? encVal : `${encodeString(key)}=${encVal}`;\n}\nexport const encodeSimple = (key, value, options) => {\n    let out = \"\";\n    const pairs = options?.explode\n        ? explode(key, value)\n        : [[key, value]];\n    if (pairs.every(([_, v]) => v == null)) {\n        return;\n    }\n    const encodeString = (v) => {\n        return options?.charEncoding === \"percent\" ? encodeURIComponent(v) : v;\n    };\n    const encodeValue = (v) => encodeString(serializeValue(v));\n    pairs.forEach(([pk, pv]) => {\n        let tmp = \"\";\n        if (pv == null) {\n            return;\n        }\n        else if (Array.isArray(pv)) {\n            tmp = mapDefined(pv, (v) => `${encodeValue(v)}`)?.join(\",\");\n        }\n        else if (isPlainObject(pv)) {\n            const mapped = mapDefinedEntries(Object.entries(pv), ([k, v]) => {\n                return `,${encodeString(k)},${encodeValue(v)}`;\n            });\n            tmp = mapped?.join(\"\").slice(1);\n        }\n        else {\n            const k = options?.explode && isPlainObject(value) ? `${pk}=` : \"\";\n            tmp = `${k}${encodeValue(pv)}`;\n        }\n        out += tmp ? `,${tmp}` : \"\";\n    });\n    return out.slice(1);\n};\nfunction explode(key, value) {\n    if (Array.isArray(value)) {\n        return value.map((v) => [key, v]);\n    }\n    else if (isPlainObject(value)) {\n        const o = value ?? {};\n        return Object.entries(o).map(([k, v]) => [k, v]);\n    }\n    else {\n        return [[key, value]];\n    }\n}\nfunction serializeValue(value) {\n    if (value == null) {\n        return \"\";\n    }\n    else if (value instanceof Date) {\n        return value.toISOString();\n    }\n    else if (value instanceof Uint8Array) {\n        return bytesToBase64(value);\n    }\n    else if (typeof value === \"object\") {\n        return JSON.stringify(value, jsonReplacer);\n    }\n    return `${value}`;\n}\nfunction jsonReplacer(_, value) {\n    if (value instanceof Uint8Array) {\n        return bytesToBase64(value);\n    }\n    else {\n        return value;\n    }\n}\nfunction mapDefined(inp, mapper) {\n    const res = inp.reduce((acc, v) => {\n        if (v == null) {\n            return acc;\n        }\n        const m = mapper(v);\n        if (m == null) {\n            return acc;\n        }\n        acc.push(m);\n        return acc;\n    }, []);\n    return res.length ? res : null;\n}\nfunction mapDefinedEntries(inp, mapper) {\n    const acc = [];\n    for (const [k, v] of inp) {\n        if (v == null) {\n            continue;\n        }\n        const m = mapper([k, v]);\n        if (m == null) {\n            continue;\n        }\n        acc.push(m);\n    }\n    return acc.length ? acc : null;\n}\nexport function queryJoin(...args) {\n    return args.filter(Boolean).join(\"&\");\n}\nexport function queryEncoder(f) {\n    const bulkEncode = function (values, options) {\n        const opts = {\n            ...options,\n            explode: options?.explode ?? true,\n            charEncoding: options?.charEncoding ?? \"percent\",\n        };\n        const allowEmptySet = new Set(options?.allowEmptyValue ?? []);\n        const encoded = Object.entries(values).map(([key, value]) => {\n            if (allowEmptySet.has(key)) {\n                if (value === undefined\n                    || value === null\n                    || value === \"\"\n                    || (Array.isArray(value) && value.length === 0)) {\n                    return `${encodeURIComponent(key)}=`;\n                }\n            }\n            return f(key, value, opts);\n        });\n        return queryJoin(...encoded);\n    };\n    return bulkEncode;\n}\nexport const encodeJSONQuery = queryEncoder(encodeJSON);\nexport const encodeFormQuery = queryEncoder(encodeForm);\nexport const encodeSpaceDelimitedQuery = queryEncoder(encodeSpaceDelimited);\nexport const encodePipeDelimitedQuery = queryEncoder(encodePipeDelimited);\nexport const encodeDeepObjectQuery = queryEncoder(encodeDeepObject);\nfunction isBlobLike(val) {\n    if (val instanceof Blob) {\n        return true;\n    }\n    if (typeof val !== \"object\" || val == null || !(Symbol.toStringTag in val)) {\n        return false;\n    }\n    const tag = val[Symbol.toStringTag];\n    if (tag !== \"Blob\" && tag !== \"File\") {\n        return false;\n    }\n    return \"stream\" in val && typeof val.stream === \"function\";\n}\nexport function appendForm(fd, key, value, fileName) {\n    if (value == null) {\n        return;\n    }\n    else if (isBlobLike(value)) {\n        if (fileName) {\n            fd.append(key, value, fileName);\n        }\n        else {\n            fd.append(key, value);\n        }\n    }\n    else {\n        fd.append(key, String(value));\n    }\n}\nexport async function normalizeBlob(value) {\n    if (value instanceof Blob) {\n        return value;\n    }\n    return new Blob([await value.arrayBuffer()], { type: value.type });\n}\n//# sourceMappingURL=encodings.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 63a80782d37e\n */\nconst DEFAULT_FETCHER = (input, init) => {\n    // If input is a Request and init is undefined, Bun will discard the method,\n    // headers, body and other options that were set on the request object.\n    // Node.js and browers would ignore an undefined init value. This check is\n    // therefore needed for interop with Bun.\n    if (init == null) {\n        return fetch(input);\n    }\n    else {\n        return fetch(input, init);\n    }\n};\nexport class HTTPClient {\n    constructor(options = {}) {\n        this.options = options;\n        this.requestHooks = [];\n        this.requestErrorHooks = [];\n        this.responseHooks = [];\n        this.fetcher = options.fetcher || DEFAULT_FETCHER;\n    }\n    async request(request) {\n        let req = request;\n        for (const hook of this.requestHooks) {\n            const nextRequest = await hook(req);\n            if (nextRequest) {\n                req = nextRequest;\n            }\n        }\n        try {\n            const res = await this.fetcher(req);\n            for (const hook of this.responseHooks) {\n                await hook(res, req);\n            }\n            return res;\n        }\n        catch (err) {\n            for (const hook of this.requestErrorHooks) {\n                await hook(err, req);\n            }\n            throw err;\n        }\n    }\n    addHook(...args) {\n        if (args[0] === \"beforeRequest\") {\n            this.requestHooks.push(args[1]);\n        }\n        else if (args[0] === \"requestError\") {\n            this.requestErrorHooks.push(args[1]);\n        }\n        else if (args[0] === \"response\") {\n            this.responseHooks.push(args[1]);\n        }\n        else {\n            throw new Error(`Invalid hook type: ${args[0]}`);\n        }\n        return this;\n    }\n    removeHook(...args) {\n        let target;\n        if (args[0] === \"beforeRequest\") {\n            target = this.requestHooks;\n        }\n        else if (args[0] === \"requestError\") {\n            target = this.requestErrorHooks;\n        }\n        else if (args[0] === \"response\") {\n            target = this.responseHooks;\n        }\n        else {\n            throw new Error(`Invalid hook type: ${args[0]}`);\n        }\n        const index = target.findIndex((v) => v === args[1]);\n        if (index >= 0) {\n            target.splice(index, 1);\n        }\n        return this;\n    }\n    clone() {\n        const child = new HTTPClient(this.options);\n        child.requestHooks = this.requestHooks.slice();\n        child.requestErrorHooks = this.requestErrorHooks.slice();\n        child.responseHooks = this.responseHooks.slice();\n        return child;\n    }\n}\n// A semicolon surrounded by optional whitespace characters is used to separate\n// segments in a media type string.\nconst mediaParamSeparator = /\\s*;\\s*/g;\nexport function matchContentType(response, pattern) {\n    // `*` is a special case which means anything is acceptable.\n    if (pattern === \"*\") {\n        return true;\n    }\n    let contentType = response.headers.get(\"content-type\")?.trim() || \"application/octet-stream\";\n    contentType = contentType.toLowerCase();\n    const wantParts = pattern.toLowerCase().trim().split(mediaParamSeparator);\n    const [wantType = \"\", ...wantParams] = wantParts;\n    if (wantType.split(\"/\").length !== 2) {\n        return false;\n    }\n    const gotParts = contentType.split(mediaParamSeparator);\n    const [gotType = \"\", ...gotParams] = gotParts;\n    const [type = \"\", subtype = \"\"] = gotType.split(\"/\");\n    if (!type || !subtype) {\n        return false;\n    }\n    if (wantType !== \"*/*\" &&\n        gotType !== wantType &&\n        `${type}/*` !== wantType &&\n        `*/${subtype}` !== wantType) {\n        return false;\n    }\n    if (gotParams.length < wantParams.length) {\n        return false;\n    }\n    const params = new Set(gotParams);\n    for (const wantParam of wantParams) {\n        if (!params.has(wantParam)) {\n            return false;\n        }\n    }\n    return true;\n}\nconst codeRangeRE = new RegExp(\"^[0-9]xx$\", \"i\");\nexport function matchStatusCode(response, codes) {\n    const actual = `${response.status}`;\n    const expectedCodes = Array.isArray(codes) ? codes : [codes];\n    if (!expectedCodes.length) {\n        return false;\n    }\n    return expectedCodes.some((ec) => {\n        const code = `${ec}`;\n        if (code === \"default\") {\n            return true;\n        }\n        if (!codeRangeRE.test(`${code}`)) {\n            return code === actual;\n        }\n        const expectFamily = code.charAt(0);\n        if (!expectFamily) {\n            throw new Error(\"Invalid status code range\");\n        }\n        const actualFamily = actual.charAt(0);\n        if (!actualFamily) {\n            throw new Error(`Invalid response status code: ${actual}`);\n        }\n        return actualFamily === expectFamily;\n    });\n}\nexport function matchResponse(response, code, contentTypePattern) {\n    return (matchStatusCode(response, code) &&\n        matchContentType(response, contentTypePattern));\n}\n/**\n * Uses various heurisitics to determine if an error is a connection error.\n */\nexport function isConnectionError(err) {\n    if (typeof err !== \"object\" || err == null) {\n        return false;\n    }\n    // Covers fetch in Deno as well\n    const isBrowserErr = err instanceof TypeError &&\n        err.message.toLowerCase().startsWith(\"failed to fetch\");\n    const isNodeErr = err instanceof TypeError &&\n        err.message.toLowerCase().startsWith(\"fetch failed\");\n    const isBunErr = \"name\" in err && err.name === \"ConnectionError\";\n    const isGenericErr = \"code\" in err &&\n        typeof err.code === \"string\" &&\n        err.code.toLowerCase() === \"econnreset\";\n    return isBrowserErr || isNodeErr || isGenericErr || isBunErr;\n}\n/**\n * Uses various heurisitics to determine if an error is a timeout error.\n */\nexport function isTimeoutError(err) {\n    if (typeof err !== \"object\" || err == null) {\n        return false;\n    }\n    // Fetch in browser, Node.js, Bun, Deno\n    const isNative = \"name\" in err && err.name === \"TimeoutError\";\n    const isLegacyNative = \"code\" in err && err.code === 23;\n    // Node.js HTTP client and Axios\n    const isGenericErr = \"code\" in err &&\n        typeof err.code === \"string\" &&\n        err.code.toLowerCase() === \"econnaborted\";\n    return isNative || isLegacyNative || isGenericErr;\n}\n/**\n * Uses various heurisitics to determine if an error is a abort error.\n */\nexport function isAbortError(err) {\n    if (typeof err !== \"object\" || err == null) {\n        return false;\n    }\n    // Fetch in browser, Node.js, Bun, Deno\n    const isNative = \"name\" in err && err.name === \"AbortError\";\n    const isLegacyNative = \"code\" in err && err.code === 20;\n    // Node.js HTTP client and Axios\n    const isGenericErr = \"code\" in err &&\n        typeof err.code === \"string\" &&\n        err.code.toLowerCase() === \"econnaborted\";\n    return isNative || isLegacyNative || isGenericErr;\n}\n//# sourceMappingURL=http.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b030240a8442\n */\n/** The base class for all HTTP error responses */\nexport class OpenRouterError extends Error {\n    constructor(message, httpMeta) {\n        super(message);\n        this.statusCode = httpMeta.response.status;\n        this.body = httpMeta.body;\n        this.headers = httpMeta.response.headers;\n        this.contentType = httpMeta.response.headers.get(\"content-type\") || \"\";\n        this.rawResponse = httpMeta.response;\n        this.name = \"OpenRouterError\";\n    }\n}\n//# sourceMappingURL=openroutererror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 8a3f2faf1848\n */\nimport { OpenRouterError } from \"./openroutererror.js\";\n/** The fallback error class if no more specific error class is matched */\nexport class OpenRouterDefaultError extends OpenRouterError {\n    constructor(message, httpMeta) {\n        if (message) {\n            message += `: `;\n        }\n        message += `Status ${httpMeta.response.status}`;\n        const contentType = httpMeta.response.headers.get(\"content-type\") || `\"\"`;\n        if (contentType !== \"application/json\") {\n            message += ` Content-Type ${contentType.includes(\" \") ? `\"${contentType}\"` : contentType}`;\n        }\n        const body = httpMeta.body || `\"\"`;\n        message += body.length > 100 ? \"\\n\" : \". \";\n        let bodyDisplay = body;\n        if (body.length > 10000) {\n            const truncated = body.substring(0, 10000);\n            const remaining = body.length - 10000;\n            bodyDisplay = `${truncated}...and ${remaining} more chars`;\n        }\n        message += `Body: ${bodyDisplay}`;\n        message = message.trim();\n        super(message, httpMeta);\n        this.name = \"OpenRouterDefaultError\";\n    }\n}\n//# sourceMappingURL=openrouterdefaulterror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: fb6b2b49c445\n */\nimport * as z from \"zod/v4/core\";\nexport class SDKValidationError extends Error {\n    // Allows for backwards compatibility for `instanceof` checks of `ResponseValidationError`\n    static [Symbol.hasInstance](instance) {\n        if (!(instance instanceof Error))\n            return false;\n        if (!(\"rawValue\" in instance))\n            return false;\n        if (!(\"rawMessage\" in instance))\n            return false;\n        if (!(\"pretty\" in instance))\n            return false;\n        if (typeof instance.pretty !== \"function\")\n            return false;\n        return true;\n    }\n    constructor(message, cause, rawValue) {\n        super(`${message}: ${cause}`);\n        this.name = \"SDKValidationError\";\n        this.cause = cause;\n        this.rawValue = rawValue;\n        this.rawMessage = message;\n    }\n    /**\n     * Return a pretty-formatted error message if the underlying validation error\n     * is a ZodError or some other recognized error type, otherwise return the\n     * default error message.\n     */\n    pretty() {\n        if (this.cause instanceof z.$ZodError) {\n            return `${this.rawMessage}\\n${formatZodError(this.cause)}`;\n        }\n        else {\n            return this.toString();\n        }\n    }\n}\nexport function formatZodError(err) {\n    return z.prettifyError(err);\n}\n//# sourceMappingURL=sdkvalidationerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 88ff98a41be9\n */\nimport * as z from \"zod/v4/core\";\nimport { OpenRouterError } from \"./openroutererror.js\";\nimport { formatZodError } from \"./sdkvalidationerror.js\";\nexport class ResponseValidationError extends OpenRouterError {\n    constructor(message, extra) {\n        super(message, extra);\n        this.name = \"ResponseValidationError\";\n        this.cause = extra.cause;\n        this.rawValue = extra.rawValue;\n        this.rawMessage = extra.rawMessage;\n    }\n    /**\n     * Return a pretty-formatted error message if the underlying validation error\n     * is a ZodError or some other recognized error type, otherwise return the\n     * default error message.\n     */\n    pretty() {\n        if (this.cause instanceof z.$ZodError) {\n            return `${this.rawMessage}\\n${formatZodError(this.cause)}`;\n        }\n        else {\n            return this.toString();\n        }\n    }\n}\n//# sourceMappingURL=responsevalidationerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ae9f0fb8aab6\n */\nexport function OK(value) {\n    return { ok: true, value };\n}\nexport function ERR(error) {\n    return { ok: false, error };\n}\n/**\n * unwrap is a convenience function for extracting a value from a result or\n * throwing if there was an error.\n */\nexport function unwrap(r) {\n    if (!r.ok) {\n        throw r.error;\n    }\n    return r.value;\n}\n/**\n * unwrapAsync is a convenience function for resolving a value from a Promise\n * of a result or rejecting if an error occurred.\n */\nexport async function unwrapAsync(pr) {\n    const r = await pr;\n    if (!r.ok) {\n        throw r.error;\n    }\n    return r.value;\n}\n//# sourceMappingURL=fp.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d54b2253b719\n */\nimport { OpenRouterDefaultError } from \"../models/errors/openrouterdefaulterror.js\";\nimport { ResponseValidationError } from \"../models/errors/responsevalidationerror.js\";\nimport { ERR, OK } from \"../types/fp.js\";\nimport { matchResponse, matchStatusCode } from \"./http.js\";\nimport { isPlainObject } from \"./is-plain-object.js\";\nconst DEFAULT_CONTENT_TYPES = {\n    jsonl: \"application/jsonl\",\n    json: \"application/json\",\n    text: \"text/plain\",\n    bytes: \"application/octet-stream\",\n    stream: \"application/octet-stream\",\n    sse: \"text/event-stream\",\n    nil: \"*\",\n    fail: \"*\",\n};\nexport function jsonErr(codes, schema, options) {\n    return { ...options, err: true, enc: \"json\", codes, schema };\n}\nexport function json(codes, schema, options) {\n    return { ...options, enc: \"json\", codes, schema };\n}\nexport function jsonl(codes, schema, options) {\n    return { ...options, enc: \"jsonl\", codes, schema };\n}\nexport function jsonlErr(codes, schema, options) {\n    return { ...options, err: true, enc: \"jsonl\", codes, schema };\n}\nexport function textErr(codes, schema, options) {\n    return { ...options, err: true, enc: \"text\", codes, schema };\n}\nexport function text(codes, schema, options) {\n    return { ...options, enc: \"text\", codes, schema };\n}\nexport function bytesErr(codes, schema, options) {\n    return { ...options, err: true, enc: \"bytes\", codes, schema };\n}\nexport function bytes(codes, schema, options) {\n    return { ...options, enc: \"bytes\", codes, schema };\n}\nexport function streamErr(codes, schema, options) {\n    return { ...options, err: true, enc: \"stream\", codes, schema };\n}\nexport function stream(codes, schema, options) {\n    return { ...options, enc: \"stream\", codes, schema };\n}\nexport function sseErr(codes, schema, options) {\n    return { ...options, err: true, enc: \"sse\", codes, schema };\n}\nexport function sse(codes, schema, options) {\n    return { ...options, enc: \"sse\", codes, schema };\n}\nexport function nilErr(codes, schema, options) {\n    return { ...options, err: true, enc: \"nil\", codes, schema };\n}\nexport function nil(codes, schema, options) {\n    return { ...options, enc: \"nil\", codes, schema };\n}\nexport function fail(codes) {\n    return { enc: \"fail\", codes };\n}\nexport function match(...matchers) {\n    return async function matchFunc(response, request, options) {\n        let raw;\n        let matcher;\n        for (const match of matchers) {\n            const { codes } = match;\n            const ctpattern = \"ctype\" in match\n                ? match.ctype\n                : DEFAULT_CONTENT_TYPES[match.enc];\n            if (ctpattern && matchResponse(response, codes, ctpattern)) {\n                matcher = match;\n                break;\n            }\n            else if (!ctpattern && matchStatusCode(response, codes)) {\n                matcher = match;\n                break;\n            }\n        }\n        if (!matcher) {\n            return [{\n                    ok: false,\n                    error: new OpenRouterDefaultError(\"Unexpected Status or Content-Type\", {\n                        response,\n                        request,\n                        body: await response.text().catch(() => \"\"),\n                    }),\n                }, raw];\n        }\n        const encoding = matcher.enc;\n        let body = \"\";\n        switch (encoding) {\n            case \"json\":\n                body = await response.text();\n                raw = JSON.parse(body);\n                break;\n            case \"jsonl\":\n                raw = response.body;\n                break;\n            case \"bytes\":\n                raw = new Uint8Array(await response.arrayBuffer());\n                break;\n            case \"stream\":\n                raw = response.body;\n                break;\n            case \"text\":\n                body = await response.text();\n                raw = body;\n                break;\n            case \"sse\":\n                raw = response.body;\n                break;\n            case \"nil\":\n                body = await response.text();\n                raw = undefined;\n                break;\n            case \"fail\":\n                body = await response.text();\n                raw = body;\n                break;\n            default:\n                throw new Error(`Unsupported response type: ${encoding}`);\n        }\n        if (matcher.enc === \"fail\") {\n            return [{\n                    ok: false,\n                    error: new OpenRouterDefaultError(\"API error occurred\", {\n                        request,\n                        response,\n                        body,\n                    }),\n                }, raw];\n        }\n        const resultKey = matcher.key || options?.resultKey;\n        let data;\n        if (\"err\" in matcher) {\n            data = {\n                ...options?.extraFields,\n                ...(matcher.hdrs ? { Headers: unpackHeaders(response.headers) } : null),\n                ...(isPlainObject(raw) ? raw : null),\n                request$: request,\n                response$: response,\n                body$: body,\n            };\n        }\n        else if (resultKey) {\n            data = {\n                ...options?.extraFields,\n                ...(matcher.hdrs ? { Headers: unpackHeaders(response.headers) } : null),\n                [resultKey]: raw,\n            };\n        }\n        else if (matcher.hdrs) {\n            data = {\n                ...options?.extraFields,\n                ...(matcher.hdrs ? { Headers: unpackHeaders(response.headers) } : null),\n                ...(isPlainObject(raw) ? raw : null),\n            };\n        }\n        else {\n            data = raw;\n        }\n        if (\"err\" in matcher) {\n            const result = safeParseResponse(data, (v) => matcher.schema.parse(v), \"Response validation failed\", { request, response, body });\n            return [result.ok ? { ok: false, error: result.value } : result, raw];\n        }\n        else {\n            return [\n                safeParseResponse(data, (v) => matcher.schema.parse(v), \"Response validation failed\", { request, response, body }),\n                raw,\n            ];\n        }\n    };\n}\nconst headerValRE = /, */;\n/**\n * Iterates over a Headers object and returns an object with all the header\n * entries. Values are represented as an array to account for repeated headers.\n */\nexport function unpackHeaders(headers) {\n    const out = {};\n    for (const [k, v] of headers.entries()) {\n        out[k] = v.split(headerValRE);\n    }\n    return out;\n}\nfunction safeParseResponse(rawValue, fn, errorMessage, httpMeta) {\n    try {\n        return OK(fn(rawValue));\n    }\n    catch (err) {\n        return ERR(new ResponseValidationError(errorMessage, {\n            cause: err,\n            rawValue,\n            rawMessage: errorMessage,\n            ...httpMeta,\n        }));\n    }\n}\n//# sourceMappingURL=matchers.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 74859f750b28\n */\nclass InvariantError extends Error {\n    constructor(message) {\n        super(message);\n        this.name = \"InvariantError\";\n    }\n}\nexport function invariant(condition, message) {\n    if (!condition) {\n        throw new InvariantError(message);\n    }\n}\n/**\n * Converts or omits an object's keys according to a mapping.\n *\n * @param inp An object whose keys will be remapped\n * @param mappings A mapping of original keys to new keys. If a key is not present in the mapping, it will be left as is. If a key is mapped to `null`, it will be removed in the resulting object.\n * @returns A new object with keys remapped or omitted according to the mappings\n */\nexport function remap(inp, mappings) {\n    let out = {};\n    if (!Object.keys(mappings).length) {\n        out = inp;\n        return out;\n    }\n    for (const [k, v] of Object.entries(inp)) {\n        const j = mappings[k];\n        if (j === null) {\n            continue;\n        }\n        out[j ?? k] = v;\n    }\n    return out;\n}\nexport function combineSignals(...signals) {\n    const filtered = [];\n    for (const signal of signals) {\n        if (signal) {\n            filtered.push(signal);\n        }\n    }\n    switch (filtered.length) {\n        case 0:\n        case 1:\n            return filtered[0] || null;\n        default:\n            if (\"any\" in AbortSignal && typeof AbortSignal.any === \"function\") {\n                return AbortSignal.any(filtered);\n            }\n            return abortSignalAny(filtered);\n    }\n}\nexport function abortSignalAny(signals) {\n    const controller = new AbortController();\n    const result = controller.signal;\n    if (!signals.length) {\n        return controller.signal;\n    }\n    if (signals.length === 1) {\n        return signals[0] || controller.signal;\n    }\n    for (const signal of signals) {\n        if (signal.aborted) {\n            return signal;\n        }\n    }\n    function abort() {\n        controller.abort(this.reason);\n        clean();\n    }\n    const signalRefs = [];\n    function clean() {\n        for (const signalRef of signalRefs) {\n            const signal = signalRef.deref();\n            if (signal) {\n                signal.removeEventListener(\"abort\", abort);\n            }\n        }\n    }\n    for (const signal of signals) {\n        signalRefs.push(new WeakRef(signal));\n        signal.addEventListener(\"abort\", abort);\n    }\n    return result;\n}\nexport function compactMap(values) {\n    const out = {};\n    for (const [k, v] of Object.entries(values)) {\n        if (typeof v !== \"undefined\") {\n            out[k] = v;\n        }\n    }\n    return out;\n}\nexport function allRequired(v) {\n    if (Object.values(v).every((x) => x == null)) {\n        return void 0;\n    }\n    return v;\n}\n//# sourceMappingURL=primitives.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: deb4b531fae1\n */\nimport * as z from \"zod/v4\";\nimport { SDKValidationError } from \"../models/errors/sdkvalidationerror.js\";\nimport { ERR, OK } from \"../types/fp.js\";\n/**\n * Utility function that executes some code which may throw a ZodError. It\n * intercepts this error and converts it to an SDKValidationError so as to not\n * leak Zod implementation details to user code.\n */\nexport function parse(rawValue, fn, errorMessage) {\n    try {\n        return fn(rawValue);\n    }\n    catch (err) {\n        if (err instanceof z.ZodError) {\n            throw new SDKValidationError(errorMessage, err, rawValue);\n        }\n        throw err;\n    }\n}\n/**\n * Utility function that executes some code which may result in a ZodError. It\n * intercepts this error and converts it to an SDKValidationError so as to not\n * leak Zod implementation details to user code.\n */\nexport function safeParse(rawValue, fn, errorMessage) {\n    try {\n        return OK(fn(rawValue));\n    }\n    catch (err) {\n        return ERR(new SDKValidationError(errorMessage, err, rawValue));\n    }\n}\nexport function collectExtraKeys(obj, extrasKey, optional) {\n    return obj.transform((val) => {\n        const extras = {};\n        const { shape } = obj;\n        for (const [key] of Object.entries(val)) {\n            if (key in shape) {\n                continue;\n            }\n            const v = val[key];\n            if (typeof v === \"undefined\") {\n                continue;\n            }\n            extras[key] = v;\n            delete val[key];\n        }\n        if (optional && Object.keys(extras).length === 0) {\n            return val;\n        }\n        return { ...val, [extrasKey]: extras };\n    });\n}\n//# sourceMappingURL=schemas.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b1988214835a\n */\n/*\nMIT License\n\nCopyright (c) 2024 Jason Miller <jason@developit.ca> (http://jasonformat.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/**\n * @param obj The object to walk\n * @param key The key path to walk the object with\n * @param def A default value to return if the result is undefined\n *\n * @example\n * dlv(obj, \"a.b.c.d\")\n * @example\n * dlv(object, [\"a\", \"b\", \"c\", \"d\"])\n * @example\n * dlv(object, \"foo.bar.baz\", \"Hello, default value!\")\n */\nexport function dlv(obj, key, def, p, undef) {\n    key = Array.isArray(key) ? key : key.split(\".\");\n    for (p = 0; p < key.length; p++) {\n        const k = key[p];\n        obj = k != null && obj ? obj[k] : undef;\n    }\n    return obj === undef ? def : obj;\n}\n//# sourceMappingURL=dlv.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: c52972a3b198\n */\nimport * as z from \"zod/v4\";\nimport { dlv } from \"./dlv.js\";\nexport const envSchema = z.object({\n    OPENROUTER_API_KEY: z.string().optional(),\n    OPENROUTER_HTTP_REFERER: z.string().optional(),\n    OPENROUTER_APP_TITLE: z.string().optional(),\n    OPENROUTER_APP_CATEGORIES: z.string().optional(),\n    OPENROUTER_DEBUG: z.coerce.boolean().optional(),\n});\n/**\n * Checks for the existence of the Deno global object to determine the environment.\n * @returns {boolean} True if the runtime is Deno, false otherwise.\n */\nfunction isDeno() {\n    if (\"Deno\" in globalThis) {\n        return true;\n    }\n    return false;\n}\nlet envMemo = undefined;\n/**\n * Reads and validates environment variables.\n */\nexport function env() {\n    if (envMemo) {\n        return envMemo;\n    }\n    let envObject = {};\n    if (isDeno()) {\n        envObject = globalThis.Deno?.env?.toObject?.() ?? {};\n    }\n    else {\n        envObject = dlv(globalThis, \"process.env\") ?? {};\n    }\n    envMemo = envSchema.parse(envObject);\n    return envMemo;\n}\n/**\n * Clears the cached env object. Useful for testing with a fresh environment.\n */\nexport function resetEnv() {\n    envMemo = undefined;\n}\n/**\n * Populates global parameters with environment variables.\n */\nexport function fillGlobals(options) {\n    const clone = { ...options };\n    const envVars = env();\n    if (typeof envVars.OPENROUTER_HTTP_REFERER !== \"undefined\") {\n        clone.httpReferer ?? (clone.httpReferer = envVars.OPENROUTER_HTTP_REFERER);\n    }\n    if (typeof envVars.OPENROUTER_APP_TITLE !== \"undefined\") {\n        clone.appTitle ?? (clone.appTitle = envVars.OPENROUTER_APP_TITLE);\n    }\n    if (typeof envVars.OPENROUTER_APP_CATEGORIES !== \"undefined\") {\n        clone.appCategories ?? (clone.appCategories = envVars.OPENROUTER_APP_CATEGORIES);\n    }\n    return clone;\n}\n//# sourceMappingURL=env.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0502afa7922e\n */\nimport { env } from \"./env.js\";\nexport var SecurityErrorCode;\n(function (SecurityErrorCode) {\n    SecurityErrorCode[\"Incomplete\"] = \"incomplete\";\n    SecurityErrorCode[\"UnrecognisedSecurityType\"] = \"unrecognized_security_type\";\n})(SecurityErrorCode || (SecurityErrorCode = {}));\nexport class SecurityError extends Error {\n    constructor(code, message) {\n        super(message);\n        this.code = code;\n        this.name = \"SecurityError\";\n    }\n    static incomplete() {\n        return new SecurityError(SecurityErrorCode.Incomplete, \"Security requirements not met in order to perform the operation\");\n    }\n    static unrecognizedType(type) {\n        return new SecurityError(SecurityErrorCode.UnrecognisedSecurityType, `Unrecognised security type: ${type}`);\n    }\n}\nexport function resolveSecurity(...options) {\n    const state = {\n        basic: {},\n        headers: {},\n        queryParams: {},\n        cookies: {},\n        oauth2: { type: \"none\" },\n    };\n    const option = options.find((opts) => {\n        return opts.every((o) => {\n            if (o.value == null) {\n                return false;\n            }\n            else if (o.type === \"http:basic\") {\n                return o.value.username != null || o.value.password != null;\n            }\n            else if (o.type === \"http:custom\") {\n                return null;\n            }\n            else if (o.type === \"oauth2:password\") {\n                return (typeof o.value === \"string\" && !!o.value);\n            }\n            else if (o.type === \"oauth2:client_credentials\") {\n                if (typeof o.value == \"string\") {\n                    return !!o.value;\n                }\n                return o.value.clientID != null || o.value.clientSecret != null;\n            }\n            else if (typeof o.value === \"string\") {\n                return !!o.value;\n            }\n            else {\n                throw new Error(`Unrecognized security type: ${o.type} (value type: ${typeof o\n                    .value})`);\n            }\n        });\n    });\n    if (option == null) {\n        return null;\n    }\n    option.forEach((spec) => {\n        if (spec.value == null) {\n            return;\n        }\n        const { type } = spec;\n        switch (type) {\n            case \"apiKey:header\":\n                state.headers[spec.fieldName] = spec.value;\n                break;\n            case \"apiKey:query\":\n                state.queryParams[spec.fieldName] = spec.value;\n                break;\n            case \"apiKey:cookie\":\n                state.cookies[spec.fieldName] = spec.value;\n                break;\n            case \"http:basic\":\n                applyBasic(state, spec);\n                break;\n            case \"http:custom\":\n                break;\n            case \"http:bearer\":\n                applyBearer(state, spec);\n                break;\n            case \"oauth2\":\n                applyBearer(state, spec);\n                break;\n            case \"oauth2:password\":\n                applyBearer(state, spec);\n                break;\n            case \"oauth2:client_credentials\":\n                break;\n            case \"openIdConnect\":\n                applyBearer(state, spec);\n                break;\n            default:\n                throw SecurityError.unrecognizedType((spec, type));\n        }\n    });\n    return state;\n}\nfunction applyBasic(state, spec) {\n    if (spec.value == null) {\n        return;\n    }\n    state.basic = spec.value;\n}\nfunction applyBearer(state, spec) {\n    if (typeof spec.value !== \"string\" || !spec.value) {\n        return;\n    }\n    let value = spec.value;\n    if (value.slice(0, 7).toLowerCase() !== \"bearer \") {\n        value = `Bearer ${value}`;\n    }\n    if (spec.fieldName !== undefined) {\n        state.headers[spec.fieldName] = value;\n    }\n}\nexport function resolveGlobalSecurity(security, allowedFields) {\n    let inputs = [\n        [\n            {\n                fieldName: \"Authorization\",\n                type: \"http:bearer\",\n                value: security?.apiKey ?? env().OPENROUTER_API_KEY,\n            },\n        ],\n    ];\n    if (allowedFields) {\n        inputs = allowedFields.map((i) => {\n            if (i < 0 || i >= inputs.length) {\n                throw new RangeError(`invalid allowedFields index ${i}`);\n            }\n            return inputs[i];\n        });\n    }\n    return resolveSecurity(...inputs);\n}\nexport async function extractSecurity(sec) {\n    if (sec == null) {\n        return;\n    }\n    return typeof sec === \"function\" ? sec() : sec;\n}\n//# sourceMappingURL=security.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b0057e24ed76\n */\nconst hasOwn = Object.prototype.hasOwnProperty;\nexport function pathToFunc(pathPattern, options) {\n    const paramRE = /\\{([a-zA-Z0-9_][a-zA-Z0-9_-]*?)\\}/g;\n    return function buildURLPath(params = {}) {\n        return pathPattern\n            .replace(paramRE, function (_, placeholder) {\n            if (!hasOwn.call(params, placeholder)) {\n                throw new Error(`Parameter '${placeholder}' is required`);\n            }\n            const value = params[placeholder];\n            if (typeof value !== \"string\" && typeof value !== \"number\") {\n                throw new Error(`Parameter '${placeholder}' must be a string or number`);\n            }\n            return options?.charEncoding === \"percent\"\n                ? encodeURIComponent(`${value}`)\n                : `${value}`;\n        })\n            .replace(/^\\/+/, \"\");\n    };\n}\n//# sourceMappingURL=url.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: fff97d475d2d\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const AABenchmarkEntry$inboundSchema = z.object({\n    agentic_index: z.nullable(z.number()),\n    coding_index: z.nullable(z.number()),\n    intelligence_index: z.nullable(z.number()),\n}).transform((v) => {\n    return remap$(v, {\n        \"agentic_index\": \"agenticIndex\",\n        \"coding_index\": \"codingIndex\",\n        \"intelligence_index\": \"intelligenceIndex\",\n    });\n});\nexport function aaBenchmarkEntryFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => AABenchmarkEntry$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'AABenchmarkEntry' from JSON`);\n}\n//# sourceMappingURL=aabenchmarkentry.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ee2d86453873\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ActivityItem$inboundSchema = z\n    .object({\n    byok_usage_inference: z.number(),\n    completion_tokens: z.int(),\n    date: z.string(),\n    endpoint_id: z.string(),\n    model: z.string(),\n    model_permaslug: z.string(),\n    prompt_tokens: z.int(),\n    provider_name: z.string(),\n    reasoning_tokens: z.int(),\n    requests: z.int(),\n    usage: z.number(),\n}).transform((v) => {\n    return remap$(v, {\n        \"byok_usage_inference\": \"byokUsageInference\",\n        \"completion_tokens\": \"completionTokens\",\n        \"endpoint_id\": \"endpointId\",\n        \"model_permaslug\": \"modelPermaslug\",\n        \"prompt_tokens\": \"promptTokens\",\n        \"provider_name\": \"providerName\",\n        \"reasoning_tokens\": \"reasoningTokens\",\n    });\n});\nexport function activityItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ActivityItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ActivityItem' from JSON`);\n}\n//# sourceMappingURL=activityitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: c535306a4318\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ActivityItem$inboundSchema } from \"./activityitem.js\";\n/** @internal */\nexport const ActivityResponse$inboundSchema = z.object({\n    data: z.array(ActivityItem$inboundSchema),\n});\nexport function activityResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ActivityResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ActivityResponse' from JSON`);\n}\n//# sourceMappingURL=activityresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5dc7e04c01b7\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const AdvisorNestedTool$outboundSchema = z.object({\n    parameters: z.record(z.string(), z.nullable(z.any())).optional(),\n    type: z.string(),\n    additionalProperties: z.record(z.string(), z.nullable(z.any())).optional(),\n}).transform((v) => {\n    return {\n        ...v.additionalProperties,\n        ...remap$(v, {\n            additionalProperties: null,\n        }),\n    };\n});\nexport function advisorNestedToolToJSON(advisorNestedTool) {\n    return JSON.stringify(AdvisorNestedTool$outboundSchema.parse(advisorNestedTool));\n}\n//# sourceMappingURL=advisornestedtool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 476605c40716\n */\nfunction unrecognized(value) {\n    globalCount++;\n    return value;\n}\nlet globalCount = 0;\nlet refCount = 0;\nexport function startCountingUnrecognized() {\n    refCount++;\n    const start = globalCount;\n    return {\n        /**\n         * Ends counting and returns the delta.\n         * @param delta - If provided, only this amount is added to the parent counter\n         *   (used for nested unions where we only want to record the winning option's count).\n         *   If not provided, records all counts since start().\n         */\n        end: (delta) => {\n            const count = globalCount - start;\n            // Reset globalCount back to start, then add only the specified delta\n            globalCount = start + (delta ?? count);\n            if (--refCount === 0)\n                globalCount = 0;\n            return count;\n        },\n    };\n}\nexport { unrecognized };\n//# sourceMappingURL=unrecognized.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4d03ddfe5100\n */\nimport * as z from \"zod/v4\";\nimport { unrecognized } from \"./unrecognized.js\";\nexport function inboundSchema(enumObj) {\n    const options = Object.values(enumObj);\n    return z.union([\n        ...options.map(x => z.literal(x)),\n        z.string().transform(x => unrecognized(x)),\n    ]);\n}\nexport function inboundSchemaInt(enumObj) {\n    // For numeric enums, Object.values returns both numbers and string keys\n    const options = Object.values(enumObj).filter(v => typeof v === \"number\");\n    return z.union([\n        ...options.map(x => z.literal(x)),\n        z.int().transform(x => unrecognized(x)),\n    ]);\n}\nexport function outboundSchema(_) {\n    return z.string();\n}\nexport function outboundSchemaInt(_) {\n    return z.int();\n}\n//# sourceMappingURL=enums.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4c86be6688b0\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Reasoning effort level for the advisor call.\n */\nexport const AdvisorReasoningEffort = {\n    Xhigh: \"xhigh\",\n    High: \"high\",\n    Medium: \"medium\",\n    Low: \"low\",\n    Minimal: \"minimal\",\n    None: \"none\",\n};\n/** @internal */\nexport const AdvisorReasoningEffort$outboundSchema = openEnums.outboundSchema(AdvisorReasoningEffort);\n/** @internal */\nexport const AdvisorReasoning$outboundSchema = z.object({\n    effort: AdvisorReasoningEffort$outboundSchema.optional(),\n    maxTokens: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        maxTokens: \"max_tokens\",\n    });\n});\nexport function advisorReasoningToJSON(advisorReasoning) {\n    return JSON.stringify(AdvisorReasoning$outboundSchema.parse(advisorReasoning));\n}\n//# sourceMappingURL=advisorreasoning.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4c2b85fa1b08\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { AdvisorNestedTool$outboundSchema, } from \"./advisornestedtool.js\";\nimport { AdvisorReasoning$outboundSchema, } from \"./advisorreasoning.js\";\n/** @internal */\nexport const AdvisorServerToolConfig$outboundSchema = z.object({\n    forwardTranscript: z.boolean().optional(),\n    instructions: z.string().optional(),\n    maxCompletionTokens: z.int().optional(),\n    maxToolCalls: z.int().optional(),\n    model: z.string().optional(),\n    name: z.string().optional(),\n    reasoning: AdvisorReasoning$outboundSchema.optional(),\n    stream: z.boolean().optional(),\n    temperature: z.number().optional(),\n    tools: z.array(AdvisorNestedTool$outboundSchema).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        forwardTranscript: \"forward_transcript\",\n        maxCompletionTokens: \"max_completion_tokens\",\n        maxToolCalls: \"max_tool_calls\",\n    });\n});\nexport function advisorServerToolConfigToJSON(advisorServerToolConfig) {\n    return JSON.stringify(AdvisorServerToolConfig$outboundSchema.parse(advisorServerToolConfig));\n}\n//# sourceMappingURL=advisorservertoolconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 980c275cec65\n */\nimport * as z from \"zod/v4\";\nimport { AdvisorServerToolConfig$outboundSchema, } from \"./advisorservertoolconfig.js\";\nexport const AdvisorServerToolOpenRouterType = {\n    OpenrouterAdvisor: \"openrouter:advisor\",\n};\n/** @internal */\nexport const AdvisorServerToolOpenRouterType$outboundSchema = z.enum(AdvisorServerToolOpenRouterType);\n/** @internal */\nexport const AdvisorServerToolOpenRouter$outboundSchema = z.object({\n    parameters: AdvisorServerToolConfig$outboundSchema.optional(),\n    type: AdvisorServerToolOpenRouterType$outboundSchema,\n});\nexport function advisorServerToolOpenRouterToJSON(advisorServerToolOpenRouter) {\n    return JSON.stringify(AdvisorServerToolOpenRouter$outboundSchema.parse(advisorServerToolOpenRouter));\n}\n//# sourceMappingURL=advisorservertoolopenrouter.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 44cf2d277540\n */\nimport * as z from \"zod/v4\";\nimport { startCountingUnrecognized } from \"./unrecognized.js\";\nconst UNKNOWN = Symbol(\"UNKNOWN\");\nexport function isUnknown(value) {\n    return typeof value === \"object\" && value !== null && UNKNOWN in value;\n}\n/**\n * Forward-compatible discriminated union parser.\n *\n * If the input does not match one of the predefined options, it will be\n * captured and available as `{ raw: <original input>, [discriminator]: \"UNKNOWN\", isUnknown: true }`.\n *\n * @param inputPropertyName - The discriminator property name in the input payload\n * @param options - Map of discriminator values to their corresponding schemas\n * @param opts - Optional configuration object\n * @param opts.unknownValue - The value to use for the discriminator when the input is unknown (default: \"UNKNOWN\")\n * @param opts.outputPropertyName - Output property name if the sanitized (camelCase) property name differs from inputPropertyName\n */\nexport function discriminatedUnion(inputPropertyName, options, opts = {}) {\n    const { unknownValue = \"UNKNOWN\", outputPropertyName } = opts;\n    return z.unknown().transform((input) => {\n        const fallback = Object.defineProperties({\n            raw: input,\n            [outputPropertyName ?? inputPropertyName]: unknownValue,\n            isUnknown: true,\n        }, { [UNKNOWN]: { value: true, enumerable: false, configurable: false } });\n        const isObject = typeof input === \"object\" && input !== null;\n        if (!isObject)\n            return fallback;\n        const discriminator = input[inputPropertyName];\n        if (typeof discriminator !== \"string\")\n            return fallback;\n        if (!(discriminator in options))\n            return fallback;\n        const schema = options[discriminator];\n        if (!schema)\n            return fallback;\n        // Start counters before parsing to track nested unrecognized/zeroDefault values\n        const unrecognizedCtr = startCountingUnrecognized();\n        const result = schema.safeParse(input);\n        if (!result.success) {\n            // Parse failed - don't propagate any counts from the failed attempt\n            unrecognizedCtr.end(0);\n            return fallback;\n        }\n        // Parse succeeded - propagate the actual counts\n        unrecognizedCtr.end();\n        if (outputPropertyName) {\n            result.data[outputPropertyName] = discriminator;\n        }\n        return result.data;\n    });\n}\n//# sourceMappingURL=discriminatedUnion.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0e609723dbc8\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FileCitation$inboundSchema = z\n    .object({\n    file_id: z.string(),\n    filename: z.string(),\n    index: z.int(),\n    type: z.literal(\"file_citation\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"file_id\": \"fileId\",\n    });\n});\n/** @internal */\nexport const FileCitation$outboundSchema = z.object({\n    fileId: z.string(),\n    filename: z.string(),\n    index: z.int(),\n    type: z.literal(\"file_citation\"),\n}).transform((v) => {\n    return remap$(v, {\n        fileId: \"file_id\",\n    });\n});\nexport function fileCitationToJSON(fileCitation) {\n    return JSON.stringify(FileCitation$outboundSchema.parse(fileCitation));\n}\nexport function fileCitationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FileCitation$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FileCitation' from JSON`);\n}\n//# sourceMappingURL=filecitation.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0f8d4008ed8e\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FilePath$inboundSchema = z.object({\n    file_id: z.string(),\n    index: z.int(),\n    type: z.literal(\"file_path\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"file_id\": \"fileId\",\n    });\n});\n/** @internal */\nexport const FilePath$outboundSchema = z\n    .object({\n    fileId: z.string(),\n    index: z.int(),\n    type: z.literal(\"file_path\"),\n}).transform((v) => {\n    return remap$(v, {\n        fileId: \"file_id\",\n    });\n});\nexport function filePathToJSON(filePath) {\n    return JSON.stringify(FilePath$outboundSchema.parse(filePath));\n}\nexport function filePathFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FilePath$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FilePath' from JSON`);\n}\n//# sourceMappingURL=filepath.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ccd6ecd62c64\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const URLCitation$inboundSchema = z\n    .object({\n    content: z.string().optional(),\n    end_index: z.int(),\n    start_index: z.int(),\n    title: z.string(),\n    type: z.literal(\"url_citation\"),\n    url: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"end_index\": \"endIndex\",\n        \"start_index\": \"startIndex\",\n    });\n});\n/** @internal */\nexport const URLCitation$outboundSchema = z.object({\n    content: z.string().optional(),\n    endIndex: z.int(),\n    startIndex: z.int(),\n    title: z.string(),\n    type: z.literal(\"url_citation\"),\n    url: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        endIndex: \"end_index\",\n        startIndex: \"start_index\",\n    });\n});\nexport function urlCitationToJSON(urlCitation) {\n    return JSON.stringify(URLCitation$outboundSchema.parse(urlCitation));\n}\nexport function urlCitationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => URLCitation$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'URLCitation' from JSON`);\n}\n//# sourceMappingURL=urlcitation.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5828fa2314e3\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { FileCitation$inboundSchema, FileCitation$outboundSchema, } from \"./filecitation.js\";\nimport { FilePath$inboundSchema, FilePath$outboundSchema, } from \"./filepath.js\";\nimport { URLCitation$inboundSchema, URLCitation$outboundSchema, } from \"./urlcitation.js\";\n/** @internal */\nexport const OpenAIResponsesAnnotation$inboundSchema = discriminatedUnion(\"type\", {\n    file_citation: FileCitation$inboundSchema,\n    url_citation: URLCitation$inboundSchema,\n    file_path: FilePath$inboundSchema,\n});\n/** @internal */\nexport const OpenAIResponsesAnnotation$outboundSchema = z.union([\n    FileCitation$outboundSchema,\n    URLCitation$outboundSchema,\n    FilePath$outboundSchema,\n]);\nexport function openAIResponsesAnnotationToJSON(openAIResponsesAnnotation) {\n    return JSON.stringify(OpenAIResponsesAnnotation$outboundSchema.parse(openAIResponsesAnnotation));\n}\nexport function openAIResponsesAnnotationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponsesAnnotation$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponsesAnnotation' from JSON`);\n}\n//# sourceMappingURL=openairesponsesannotation.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e5c5f2adf5f6\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { OpenAIResponsesAnnotation$inboundSchema, } from \"./openairesponsesannotation.js\";\n/** @internal */\nexport const AnnotationAddedEvent$inboundSchema = z.object({\n    annotation: OpenAIResponsesAnnotation$inboundSchema,\n    annotation_index: z.int(),\n    content_index: z.int(),\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.output_text.annotation.added\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"annotation_index\": \"annotationIndex\",\n        \"content_index\": \"contentIndex\",\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function annotationAddedEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => AnnotationAddedEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'AnnotationAddedEvent' from JSON`);\n}\n//# sourceMappingURL=annotationaddedevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: eb986e460cfe\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const AnthropicAllowedCallers = {\n    Direct: \"direct\",\n    CodeExecution20250825: \"code_execution_20250825\",\n    CodeExecution20260120: \"code_execution_20260120\",\n};\n/** @internal */\nexport const AnthropicAllowedCallers$outboundSchema = openEnums.outboundSchema(AnthropicAllowedCallers);\n//# sourceMappingURL=anthropicallowedcallers.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 14923724a710\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const AnthropicImageMimeType = {\n    ImageJpeg: \"image/jpeg\",\n    ImagePng: \"image/png\",\n    ImageGif: \"image/gif\",\n    ImageWebp: \"image/webp\",\n};\n/** @internal */\nexport const AnthropicImageMimeType$outboundSchema = openEnums.outboundSchema(AnthropicImageMimeType);\n//# sourceMappingURL=anthropicimagemimetype.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1e3fef85e19c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { AnthropicImageMimeType$outboundSchema, } from \"./anthropicimagemimetype.js\";\n/** @internal */\nexport const AnthropicBase64ImageSource$outboundSchema = z.object({\n    data: z.string(),\n    mediaType: AnthropicImageMimeType$outboundSchema,\n    type: z.literal(\"base64\"),\n}).transform((v) => {\n    return remap$(v, {\n        mediaType: \"media_type\",\n    });\n});\nexport function anthropicBase64ImageSourceToJSON(anthropicBase64ImageSource) {\n    return JSON.stringify(AnthropicBase64ImageSource$outboundSchema.parse(anthropicBase64ImageSource));\n}\n//# sourceMappingURL=anthropicbase64imagesource.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 8027cdf012a1\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nexport const AnthropicBase64PdfSourceMediaType = {\n    ApplicationPdf: \"application/pdf\",\n};\n/** @internal */\nexport const AnthropicBase64PdfSourceMediaType$outboundSchema = z.enum(AnthropicBase64PdfSourceMediaType);\n/** @internal */\nexport const AnthropicBase64PdfSource$outboundSchema = z.object({\n    data: z.string(),\n    mediaType: AnthropicBase64PdfSourceMediaType$outboundSchema,\n    type: z.literal(\"base64\"),\n}).transform((v) => {\n    return remap$(v, {\n        mediaType: \"media_type\",\n    });\n});\nexport function anthropicBase64PdfSourceToJSON(anthropicBase64PdfSource) {\n    return JSON.stringify(AnthropicBase64PdfSource$outboundSchema.parse(anthropicBase64PdfSource));\n}\n//# sourceMappingURL=anthropicbase64pdfsource.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d6c8b6f13cb1\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const AnthropicCacheControlTtl = {\n    Fivem: \"5m\",\n    Oneh: \"1h\",\n};\n/** @internal */\nexport const AnthropicCacheControlTtl$inboundSchema = openEnums.inboundSchema(AnthropicCacheControlTtl);\n/** @internal */\nexport const AnthropicCacheControlTtl$outboundSchema = openEnums.outboundSchema(AnthropicCacheControlTtl);\n//# sourceMappingURL=anthropiccachecontrolttl.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e8b49d71cdd5\n */\nimport * as z from \"zod/v4\";\nimport { AnthropicCacheControlTtl$outboundSchema, } from \"./anthropiccachecontrolttl.js\";\nexport const AnthropicCacheControlDirectiveType = {\n    Ephemeral: \"ephemeral\",\n};\n/** @internal */\nexport const AnthropicCacheControlDirectiveType$outboundSchema = z.enum(AnthropicCacheControlDirectiveType);\n/** @internal */\nexport const AnthropicCacheControlDirective$outboundSchema = z.object({\n    ttl: AnthropicCacheControlTtl$outboundSchema.optional(),\n    type: AnthropicCacheControlDirectiveType$outboundSchema,\n});\nexport function anthropicCacheControlDirectiveToJSON(anthropicCacheControlDirective) {\n    return JSON.stringify(AnthropicCacheControlDirective$outboundSchema.parse(anthropicCacheControlDirective));\n}\n//# sourceMappingURL=anthropiccachecontroldirective.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 453c0a0bfdd4\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const AnthropicCitationCharLocationParam$outboundSchema = z.object({\n    citedText: z.string(),\n    documentIndex: z.int(),\n    documentTitle: z.nullable(z.string()),\n    endCharIndex: z.int(),\n    startCharIndex: z.int(),\n    type: z.literal(\"char_location\"),\n}).transform((v) => {\n    return remap$(v, {\n        citedText: \"cited_text\",\n        documentIndex: \"document_index\",\n        documentTitle: \"document_title\",\n        endCharIndex: \"end_char_index\",\n        startCharIndex: \"start_char_index\",\n    });\n});\nexport function anthropicCitationCharLocationParamToJSON(anthropicCitationCharLocationParam) {\n    return JSON.stringify(AnthropicCitationCharLocationParam$outboundSchema.parse(anthropicCitationCharLocationParam));\n}\n//# sourceMappingURL=anthropiccitationcharlocationparam.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1a2db0e73f5d\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const AnthropicCitationContentBlockLocationParam$outboundSchema = z.object({\n    citedText: z.string(),\n    documentIndex: z.int(),\n    documentTitle: z.nullable(z.string()),\n    endBlockIndex: z.int(),\n    startBlockIndex: z.int(),\n    type: z.literal(\"content_block_location\"),\n}).transform((v) => {\n    return remap$(v, {\n        citedText: \"cited_text\",\n        documentIndex: \"document_index\",\n        documentTitle: \"document_title\",\n        endBlockIndex: \"end_block_index\",\n        startBlockIndex: \"start_block_index\",\n    });\n});\nexport function anthropicCitationContentBlockLocationParamToJSON(anthropicCitationContentBlockLocationParam) {\n    return JSON.stringify(AnthropicCitationContentBlockLocationParam$outboundSchema.parse(anthropicCitationContentBlockLocationParam));\n}\n//# sourceMappingURL=anthropiccitationcontentblocklocationparam.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a85ef27d808e\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const AnthropicCitationPageLocationParam$outboundSchema = z.object({\n    citedText: z.string(),\n    documentIndex: z.int(),\n    documentTitle: z.nullable(z.string()),\n    endPageNumber: z.int(),\n    startPageNumber: z.int(),\n    type: z.literal(\"page_location\"),\n}).transform((v) => {\n    return remap$(v, {\n        citedText: \"cited_text\",\n        documentIndex: \"document_index\",\n        documentTitle: \"document_title\",\n        endPageNumber: \"end_page_number\",\n        startPageNumber: \"start_page_number\",\n    });\n});\nexport function anthropicCitationPageLocationParamToJSON(anthropicCitationPageLocationParam) {\n    return JSON.stringify(AnthropicCitationPageLocationParam$outboundSchema.parse(anthropicCitationPageLocationParam));\n}\n//# sourceMappingURL=anthropiccitationpagelocationparam.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3e456a65667d\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const AnthropicCitationSearchResultLocation$outboundSchema = z.object({\n    citedText: z.string(),\n    endBlockIndex: z.int(),\n    searchResultIndex: z.int(),\n    source: z.string(),\n    startBlockIndex: z.int(),\n    title: z.nullable(z.string()),\n    type: z.literal(\"search_result_location\"),\n}).transform((v) => {\n    return remap$(v, {\n        citedText: \"cited_text\",\n        endBlockIndex: \"end_block_index\",\n        searchResultIndex: \"search_result_index\",\n        startBlockIndex: \"start_block_index\",\n    });\n});\nexport function anthropicCitationSearchResultLocationToJSON(anthropicCitationSearchResultLocation) {\n    return JSON.stringify(AnthropicCitationSearchResultLocation$outboundSchema.parse(anthropicCitationSearchResultLocation));\n}\n//# sourceMappingURL=anthropiccitationsearchresultlocation.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5c08200bb3d1\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const AnthropicCitationWebSearchResultLocation$outboundSchema = z.object({\n    citedText: z.string(),\n    encryptedIndex: z.string(),\n    title: z.nullable(z.string()),\n    type: z.literal(\"web_search_result_location\"),\n    url: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        citedText: \"cited_text\",\n        encryptedIndex: \"encrypted_index\",\n    });\n});\nexport function anthropicCitationWebSearchResultLocationToJSON(anthropicCitationWebSearchResultLocation) {\n    return JSON.stringify(AnthropicCitationWebSearchResultLocation$outboundSchema.parse(anthropicCitationWebSearchResultLocation));\n}\n//# sourceMappingURL=anthropiccitationwebsearchresultlocation.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 093d880f76ab\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const AnthropicUrlImageSource$outboundSchema = z.object({\n    type: z.literal(\"url\"),\n    url: z.string(),\n});\nexport function anthropicUrlImageSourceToJSON(anthropicUrlImageSource) {\n    return JSON.stringify(AnthropicUrlImageSource$outboundSchema.parse(anthropicUrlImageSource));\n}\n//# sourceMappingURL=anthropicurlimagesource.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 463612aae623\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { AnthropicBase64ImageSource$outboundSchema, } from \"./anthropicbase64imagesource.js\";\nimport { AnthropicCacheControlDirective$outboundSchema, } from \"./anthropiccachecontroldirective.js\";\nimport { AnthropicUrlImageSource$outboundSchema, } from \"./anthropicurlimagesource.js\";\n/** @internal */\nexport const AnthropicImageBlockParamSource$outboundSchema = z.union([\n    AnthropicBase64ImageSource$outboundSchema,\n    AnthropicUrlImageSource$outboundSchema,\n]);\nexport function anthropicImageBlockParamSourceToJSON(anthropicImageBlockParamSource) {\n    return JSON.stringify(AnthropicImageBlockParamSource$outboundSchema.parse(anthropicImageBlockParamSource));\n}\n/** @internal */\nexport const AnthropicImageBlockParam$outboundSchema = z.object({\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    source: z.union([\n        AnthropicBase64ImageSource$outboundSchema,\n        AnthropicUrlImageSource$outboundSchema,\n    ]),\n    type: z.literal(\"image\"),\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n    });\n});\nexport function anthropicImageBlockParamToJSON(anthropicImageBlockParam) {\n    return JSON.stringify(AnthropicImageBlockParam$outboundSchema.parse(anthropicImageBlockParam));\n}\n//# sourceMappingURL=anthropicimageblockparam.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6f9fad0eec61\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nexport const AnthropicPlainTextSourceMediaType = {\n    TextPlain: \"text/plain\",\n};\n/** @internal */\nexport const AnthropicPlainTextSourceMediaType$outboundSchema = z.enum(AnthropicPlainTextSourceMediaType);\n/** @internal */\nexport const AnthropicPlainTextSource$outboundSchema = z.object({\n    data: z.string(),\n    mediaType: AnthropicPlainTextSourceMediaType$outboundSchema,\n    type: z.literal(\"text\"),\n}).transform((v) => {\n    return remap$(v, {\n        mediaType: \"media_type\",\n    });\n});\nexport function anthropicPlainTextSourceToJSON(anthropicPlainTextSource) {\n    return JSON.stringify(AnthropicPlainTextSource$outboundSchema.parse(anthropicPlainTextSource));\n}\n//# sourceMappingURL=anthropicplaintextsource.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 81e2e56dbe5c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { AnthropicCacheControlDirective$outboundSchema, } from \"./anthropiccachecontroldirective.js\";\nimport { AnthropicCitationCharLocationParam$outboundSchema, } from \"./anthropiccitationcharlocationparam.js\";\nimport { AnthropicCitationContentBlockLocationParam$outboundSchema, } from \"./anthropiccitationcontentblocklocationparam.js\";\nimport { AnthropicCitationPageLocationParam$outboundSchema, } from \"./anthropiccitationpagelocationparam.js\";\nimport { AnthropicCitationSearchResultLocation$outboundSchema, } from \"./anthropiccitationsearchresultlocation.js\";\nimport { AnthropicCitationWebSearchResultLocation$outboundSchema, } from \"./anthropiccitationwebsearchresultlocation.js\";\n/** @internal */\nexport const Citation$outboundSchema = z\n    .union([\n    AnthropicCitationCharLocationParam$outboundSchema,\n    AnthropicCitationContentBlockLocationParam$outboundSchema,\n    AnthropicCitationPageLocationParam$outboundSchema,\n    AnthropicCitationSearchResultLocation$outboundSchema,\n    AnthropicCitationWebSearchResultLocation$outboundSchema,\n]);\nexport function citationToJSON(citation) {\n    return JSON.stringify(Citation$outboundSchema.parse(citation));\n}\n/** @internal */\nexport const AnthropicTextBlockParam$outboundSchema = z.object({\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    citations: z.nullable(z.array(z.union([\n        AnthropicCitationCharLocationParam$outboundSchema,\n        AnthropicCitationContentBlockLocationParam$outboundSchema,\n        AnthropicCitationPageLocationParam$outboundSchema,\n        AnthropicCitationSearchResultLocation$outboundSchema,\n        AnthropicCitationWebSearchResultLocation$outboundSchema,\n    ]))).optional(),\n    text: z.string(),\n    type: z.literal(\"text\"),\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n    });\n});\nexport function anthropicTextBlockParamToJSON(anthropicTextBlockParam) {\n    return JSON.stringify(AnthropicTextBlockParam$outboundSchema.parse(anthropicTextBlockParam));\n}\n//# sourceMappingURL=anthropictextblockparam.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 49c061ca1bd2\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const AnthropicUrlPdfSource$outboundSchema = z.object({\n    type: z.literal(\"url\"),\n    url: z.string(),\n});\nexport function anthropicUrlPdfSourceToJSON(anthropicUrlPdfSource) {\n    return JSON.stringify(AnthropicUrlPdfSource$outboundSchema.parse(anthropicUrlPdfSource));\n}\n//# sourceMappingURL=anthropicurlpdfsource.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: da62cae77bdf\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { AnthropicBase64PdfSource$outboundSchema, } from \"./anthropicbase64pdfsource.js\";\nimport { AnthropicCacheControlDirective$outboundSchema, } from \"./anthropiccachecontroldirective.js\";\nimport { AnthropicImageBlockParam$outboundSchema, } from \"./anthropicimageblockparam.js\";\nimport { AnthropicPlainTextSource$outboundSchema, } from \"./anthropicplaintextsource.js\";\nimport { AnthropicTextBlockParam$outboundSchema, } from \"./anthropictextblockparam.js\";\nimport { AnthropicUrlPdfSource$outboundSchema, } from \"./anthropicurlpdfsource.js\";\n/** @internal */\nexport const AnthropicDocumentBlockParamCitations$outboundSchema = z.object({\n    enabled: z.boolean().optional(),\n});\nexport function anthropicDocumentBlockParamCitationsToJSON(anthropicDocumentBlockParamCitations) {\n    return JSON.stringify(AnthropicDocumentBlockParamCitations$outboundSchema.parse(anthropicDocumentBlockParamCitations));\n}\n/** @internal */\nexport const AnthropicDocumentBlockParamContent1$outboundSchema = z.union([\n    AnthropicImageBlockParam$outboundSchema,\n    AnthropicTextBlockParam$outboundSchema,\n]);\nexport function anthropicDocumentBlockParamContent1ToJSON(anthropicDocumentBlockParamContent1) {\n    return JSON.stringify(AnthropicDocumentBlockParamContent1$outboundSchema.parse(anthropicDocumentBlockParamContent1));\n}\n/** @internal */\nexport const AnthropicDocumentBlockParamContent2$outboundSchema = z.union([\n    z.string(),\n    z.array(z.union([\n        AnthropicImageBlockParam$outboundSchema,\n        AnthropicTextBlockParam$outboundSchema,\n    ])),\n]);\nexport function anthropicDocumentBlockParamContent2ToJSON(anthropicDocumentBlockParamContent2) {\n    return JSON.stringify(AnthropicDocumentBlockParamContent2$outboundSchema.parse(anthropicDocumentBlockParamContent2));\n}\n/** @internal */\nexport const SourceContent$outboundSchema = z.object({\n    content: z.union([\n        z.string(),\n        z.array(z.union([\n            AnthropicImageBlockParam$outboundSchema,\n            AnthropicTextBlockParam$outboundSchema,\n        ])),\n    ]),\n    type: z.literal(\"content\"),\n});\nexport function sourceContentToJSON(sourceContent) {\n    return JSON.stringify(SourceContent$outboundSchema.parse(sourceContent));\n}\n/** @internal */\nexport const AnthropicDocumentBlockParamSourceUnion$outboundSchema = z.union([\n    AnthropicBase64PdfSource$outboundSchema,\n    AnthropicPlainTextSource$outboundSchema,\n    z.lazy(() => SourceContent$outboundSchema),\n    AnthropicUrlPdfSource$outboundSchema,\n]);\nexport function anthropicDocumentBlockParamSourceUnionToJSON(anthropicDocumentBlockParamSourceUnion) {\n    return JSON.stringify(AnthropicDocumentBlockParamSourceUnion$outboundSchema.parse(anthropicDocumentBlockParamSourceUnion));\n}\n/** @internal */\nexport const AnthropicDocumentBlockParam$outboundSchema = z.object({\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    citations: z.nullable(z.lazy(() => AnthropicDocumentBlockParamCitations$outboundSchema)).optional(),\n    context: z.nullable(z.string()).optional(),\n    source: z.union([\n        AnthropicBase64PdfSource$outboundSchema,\n        AnthropicPlainTextSource$outboundSchema,\n        z.lazy(() => SourceContent$outboundSchema),\n        AnthropicUrlPdfSource$outboundSchema,\n    ]),\n    title: z.nullable(z.string()).optional(),\n    type: z.literal(\"document\"),\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n    });\n});\nexport function anthropicDocumentBlockParamToJSON(anthropicDocumentBlockParam) {\n    return JSON.stringify(AnthropicDocumentBlockParam$outboundSchema.parse(anthropicDocumentBlockParam));\n}\n//# sourceMappingURL=anthropicdocumentblockparam.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 411e6fbb1d5c\n */\nimport * as z from \"zod/v4\";\nexport const AnthropicInputTokensClearAtLeastType = {\n    InputTokens: \"input_tokens\",\n};\n/** @internal */\nexport const AnthropicInputTokensClearAtLeastType$outboundSchema = z.enum(AnthropicInputTokensClearAtLeastType);\n/** @internal */\nexport const AnthropicInputTokensClearAtLeast$outboundSchema = z.object({\n    type: AnthropicInputTokensClearAtLeastType$outboundSchema,\n    value: z.int(),\n});\nexport function anthropicInputTokensClearAtLeastToJSON(anthropicInputTokensClearAtLeast) {\n    return JSON.stringify(AnthropicInputTokensClearAtLeast$outboundSchema.parse(anthropicInputTokensClearAtLeast));\n}\n//# sourceMappingURL=anthropicinputtokensclearatleast.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 24d82ce75c3e\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const AnthropicInputTokensTrigger$outboundSchema = z.object({\n    type: z.literal(\"input_tokens\"),\n    value: z.int(),\n});\nexport function anthropicInputTokensTriggerToJSON(anthropicInputTokensTrigger) {\n    return JSON.stringify(AnthropicInputTokensTrigger$outboundSchema.parse(anthropicInputTokensTrigger));\n}\n//# sourceMappingURL=anthropicinputtokenstrigger.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: db204b792de1\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { AnthropicCacheControlDirective$outboundSchema, } from \"./anthropiccachecontroldirective.js\";\nimport { AnthropicTextBlockParam$outboundSchema, } from \"./anthropictextblockparam.js\";\n/** @internal */\nexport const AnthropicSearchResultBlockParamCitations$outboundSchema = z.object({\n    enabled: z.boolean().optional(),\n});\nexport function anthropicSearchResultBlockParamCitationsToJSON(anthropicSearchResultBlockParamCitations) {\n    return JSON.stringify(AnthropicSearchResultBlockParamCitations$outboundSchema.parse(anthropicSearchResultBlockParamCitations));\n}\n/** @internal */\nexport const AnthropicSearchResultBlockParam$outboundSchema = z.object({\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    citations: z.lazy(() => AnthropicSearchResultBlockParamCitations$outboundSchema).optional(),\n    content: z.array(AnthropicTextBlockParam$outboundSchema),\n    source: z.string(),\n    title: z.string(),\n    type: z.literal(\"search_result\"),\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n    });\n});\nexport function anthropicSearchResultBlockParamToJSON(anthropicSearchResultBlockParam) {\n    return JSON.stringify(AnthropicSearchResultBlockParam$outboundSchema.parse(anthropicSearchResultBlockParam));\n}\n//# sourceMappingURL=anthropicsearchresultblockparam.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 43a490494a57\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const AnthropicThinkingDisplay = {\n    Summarized: \"summarized\",\n    Omitted: \"omitted\",\n};\n/** @internal */\nexport const AnthropicThinkingDisplay$outboundSchema = openEnums.outboundSchema(AnthropicThinkingDisplay);\n//# sourceMappingURL=anthropicthinkingdisplay.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7c39c94b7e4f\n */\nimport * as z from \"zod/v4\";\nexport const AnthropicThinkingTurnsType = {\n    ThinkingTurns: \"thinking_turns\",\n};\n/** @internal */\nexport const AnthropicThinkingTurnsType$outboundSchema = z.enum(AnthropicThinkingTurnsType);\n/** @internal */\nexport const AnthropicThinkingTurns$outboundSchema = z.object({\n    type: AnthropicThinkingTurnsType$outboundSchema,\n    value: z.int(),\n});\nexport function anthropicThinkingTurnsToJSON(anthropicThinkingTurns) {\n    return JSON.stringify(AnthropicThinkingTurns$outboundSchema.parse(anthropicThinkingTurns));\n}\n//# sourceMappingURL=anthropicthinkingturns.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 2a4fd7da8884\n */\nimport * as z from \"zod/v4\";\nexport const AnthropicToolUsesKeepType = {\n    ToolUses: \"tool_uses\",\n};\n/** @internal */\nexport const AnthropicToolUsesKeepType$outboundSchema = z.enum(AnthropicToolUsesKeepType);\n/** @internal */\nexport const AnthropicToolUsesKeep$outboundSchema = z.object({\n    type: AnthropicToolUsesKeepType$outboundSchema,\n    value: z.int(),\n});\nexport function anthropicToolUsesKeepToJSON(anthropicToolUsesKeep) {\n    return JSON.stringify(AnthropicToolUsesKeep$outboundSchema.parse(anthropicToolUsesKeep));\n}\n//# sourceMappingURL=anthropictooluseskeep.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 301a0cf591e6\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const AnthropicToolUsesTrigger$outboundSchema = z.object({\n    type: z.literal(\"tool_uses\"),\n    value: z.int(),\n});\nexport function anthropicToolUsesTriggerToJSON(anthropicToolUsesTrigger) {\n    return JSON.stringify(AnthropicToolUsesTrigger$outboundSchema.parse(anthropicToolUsesTrigger));\n}\n//# sourceMappingURL=anthropictoolusestrigger.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b8fe75186751\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nexport const AnthropicWebSearchResultBlockParamType = {\n    WebSearchResult: \"web_search_result\",\n};\n/** @internal */\nexport const AnthropicWebSearchResultBlockParamType$outboundSchema = z.enum(AnthropicWebSearchResultBlockParamType);\n/** @internal */\nexport const AnthropicWebSearchResultBlockParam$outboundSchema = z.object({\n    encryptedContent: z.string(),\n    pageAge: z.nullable(z.string()).optional(),\n    title: z.string(),\n    type: AnthropicWebSearchResultBlockParamType$outboundSchema,\n    url: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        encryptedContent: \"encrypted_content\",\n        pageAge: \"page_age\",\n    });\n});\nexport function anthropicWebSearchResultBlockParamToJSON(anthropicWebSearchResultBlockParam) {\n    return JSON.stringify(AnthropicWebSearchResultBlockParam$outboundSchema.parse(anthropicWebSearchResultBlockParam));\n}\n//# sourceMappingURL=anthropicwebsearchresultblockparam.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e9ba7619b5e0\n */\nimport * as z from \"zod/v4\";\nexport const AnthropicWebSearchToolUserLocationType = {\n    Approximate: \"approximate\",\n};\n/** @internal */\nexport const AnthropicWebSearchToolUserLocationType$outboundSchema = z.enum(AnthropicWebSearchToolUserLocationType);\n/** @internal */\nexport const AnthropicWebSearchToolUserLocation$outboundSchema = z.object({\n    city: z.nullable(z.string()).optional(),\n    country: z.nullable(z.string()).optional(),\n    region: z.nullable(z.string()).optional(),\n    timezone: z.nullable(z.string()).optional(),\n    type: AnthropicWebSearchToolUserLocationType$outboundSchema,\n});\nexport function anthropicWebSearchToolUserLocationToJSON(anthropicWebSearchToolUserLocation) {\n    return JSON.stringify(AnthropicWebSearchToolUserLocation$outboundSchema.parse(anthropicWebSearchToolUserLocation));\n}\n//# sourceMappingURL=anthropicwebsearchtooluserlocation.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b681ab3023c8\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ApplyPatchCreateFileOperation$inboundSchema = z.object({\n    diff: z.string(),\n    path: z.string(),\n    type: z.literal(\"create_file\"),\n});\n/** @internal */\nexport const ApplyPatchCreateFileOperation$outboundSchema = z.object({\n    diff: z.string(),\n    path: z.string(),\n    type: z.literal(\"create_file\"),\n});\nexport function applyPatchCreateFileOperationToJSON(applyPatchCreateFileOperation) {\n    return JSON.stringify(ApplyPatchCreateFileOperation$outboundSchema.parse(applyPatchCreateFileOperation));\n}\nexport function applyPatchCreateFileOperationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ApplyPatchCreateFileOperation$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ApplyPatchCreateFileOperation' from JSON`);\n}\n//# sourceMappingURL=applypatchcreatefileoperation.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1d132d27fbd9\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ApplyPatchDeleteFileOperation$inboundSchema = z.object({\n    path: z.string(),\n    type: z.literal(\"delete_file\"),\n});\n/** @internal */\nexport const ApplyPatchDeleteFileOperation$outboundSchema = z.object({\n    path: z.string(),\n    type: z.literal(\"delete_file\"),\n});\nexport function applyPatchDeleteFileOperationToJSON(applyPatchDeleteFileOperation) {\n    return JSON.stringify(ApplyPatchDeleteFileOperation$outboundSchema.parse(applyPatchDeleteFileOperation));\n}\nexport function applyPatchDeleteFileOperationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ApplyPatchDeleteFileOperation$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ApplyPatchDeleteFileOperation' from JSON`);\n}\n//# sourceMappingURL=applypatchdeletefileoperation.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5e7cf3419d1d\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ApplyPatchUpdateFileOperation$inboundSchema = z.object({\n    diff: z.string(),\n    path: z.string(),\n    type: z.literal(\"update_file\"),\n});\n/** @internal */\nexport const ApplyPatchUpdateFileOperation$outboundSchema = z.object({\n    diff: z.string(),\n    path: z.string(),\n    type: z.literal(\"update_file\"),\n});\nexport function applyPatchUpdateFileOperationToJSON(applyPatchUpdateFileOperation) {\n    return JSON.stringify(ApplyPatchUpdateFileOperation$outboundSchema.parse(applyPatchUpdateFileOperation));\n}\nexport function applyPatchUpdateFileOperationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ApplyPatchUpdateFileOperation$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ApplyPatchUpdateFileOperation' from JSON`);\n}\n//# sourceMappingURL=applypatchupdatefileoperation.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 11811921d55f\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { ApplyPatchCreateFileOperation$inboundSchema, ApplyPatchCreateFileOperation$outboundSchema, } from \"./applypatchcreatefileoperation.js\";\nimport { ApplyPatchDeleteFileOperation$inboundSchema, ApplyPatchDeleteFileOperation$outboundSchema, } from \"./applypatchdeletefileoperation.js\";\nimport { ApplyPatchUpdateFileOperation$inboundSchema, ApplyPatchUpdateFileOperation$outboundSchema, } from \"./applypatchupdatefileoperation.js\";\n/** @internal */\nexport const ApplyPatchCallOperation$inboundSchema = discriminatedUnion(\"type\", {\n    create_file: ApplyPatchCreateFileOperation$inboundSchema,\n    delete_file: ApplyPatchDeleteFileOperation$inboundSchema,\n    update_file: ApplyPatchUpdateFileOperation$inboundSchema,\n});\n/** @internal */\nexport const ApplyPatchCallOperation$outboundSchema = z.union([\n    ApplyPatchCreateFileOperation$outboundSchema,\n    ApplyPatchDeleteFileOperation$outboundSchema,\n    ApplyPatchUpdateFileOperation$outboundSchema,\n]);\nexport function applyPatchCallOperationToJSON(applyPatchCallOperation) {\n    return JSON.stringify(ApplyPatchCallOperation$outboundSchema.parse(applyPatchCallOperation));\n}\nexport function applyPatchCallOperationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ApplyPatchCallOperation$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ApplyPatchCallOperation' from JSON`);\n}\n//# sourceMappingURL=applypatchcalloperation.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a4befa0b273f\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Lifecycle state of an `apply_patch_call` output item.\n */\nexport const ApplyPatchCallStatus = {\n    InProgress: \"in_progress\",\n    Completed: \"completed\",\n};\n/** @internal */\nexport const ApplyPatchCallStatus$inboundSchema = openEnums.inboundSchema(ApplyPatchCallStatus);\n/** @internal */\nexport const ApplyPatchCallStatus$outboundSchema = openEnums.outboundSchema(ApplyPatchCallStatus);\n//# sourceMappingURL=applypatchcallstatus.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: bb5c3b2b01b9\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ApplyPatchCallOperation$inboundSchema, ApplyPatchCallOperation$outboundSchema, } from \"./applypatchcalloperation.js\";\nimport { ApplyPatchCallStatus$inboundSchema, ApplyPatchCallStatus$outboundSchema, } from \"./applypatchcallstatus.js\";\nexport const ApplyPatchCallItemType = {\n    ApplyPatchCall: \"apply_patch_call\",\n};\n/** @internal */\nexport const ApplyPatchCallItemType$inboundSchema = z.enum(ApplyPatchCallItemType);\n/** @internal */\nexport const ApplyPatchCallItemType$outboundSchema = ApplyPatchCallItemType$inboundSchema;\n/** @internal */\nexport const ApplyPatchCallItem$inboundSchema = z.object({\n    call_id: z.string(),\n    id: z.nullable(z.string()).optional(),\n    operation: ApplyPatchCallOperation$inboundSchema,\n    status: ApplyPatchCallStatus$inboundSchema,\n    type: ApplyPatchCallItemType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"call_id\": \"callId\",\n    });\n});\n/** @internal */\nexport const ApplyPatchCallItem$outboundSchema = z.object({\n    callId: z.string(),\n    id: z.nullable(z.string()).optional(),\n    operation: ApplyPatchCallOperation$outboundSchema,\n    status: ApplyPatchCallStatus$outboundSchema,\n    type: ApplyPatchCallItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        callId: \"call_id\",\n    });\n});\nexport function applyPatchCallItemToJSON(applyPatchCallItem) {\n    return JSON.stringify(ApplyPatchCallItem$outboundSchema.parse(applyPatchCallItem));\n}\nexport function applyPatchCallItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ApplyPatchCallItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ApplyPatchCallItem' from JSON`);\n}\n//# sourceMappingURL=applypatchcallitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 67d9ed6b3092\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ApplyPatchCallOperationDiffDeltaEvent$inboundSchema = z.object({\n    delta: z.string(),\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.apply_patch_call_operation_diff.delta\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function applyPatchCallOperationDiffDeltaEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ApplyPatchCallOperationDiffDeltaEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ApplyPatchCallOperationDiffDeltaEvent' from JSON`);\n}\n//# sourceMappingURL=applypatchcalloperationdiffdeltaevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1559135a390c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ApplyPatchCallOperationDiffDoneEvent$inboundSchema = z.object({\n    diff: z.string(),\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.apply_patch_call_operation_diff.done\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function applyPatchCallOperationDiffDoneEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ApplyPatchCallOperationDiffDoneEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ApplyPatchCallOperationDiffDoneEvent' from JSON`);\n}\n//# sourceMappingURL=applypatchcalloperationdiffdoneevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: df3c379b4d4e\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const ApplyPatchCallOutputItemStatus = {\n    Completed: \"completed\",\n    Failed: \"failed\",\n};\nexport const ApplyPatchCallOutputItemType = {\n    ApplyPatchCallOutput: \"apply_patch_call_output\",\n};\n/** @internal */\nexport const ApplyPatchCallOutputItemStatus$inboundSchema = openEnums.inboundSchema(ApplyPatchCallOutputItemStatus);\n/** @internal */\nexport const ApplyPatchCallOutputItemStatus$outboundSchema = openEnums.outboundSchema(ApplyPatchCallOutputItemStatus);\n/** @internal */\nexport const ApplyPatchCallOutputItemType$inboundSchema = z.enum(ApplyPatchCallOutputItemType);\n/** @internal */\nexport const ApplyPatchCallOutputItemType$outboundSchema = ApplyPatchCallOutputItemType$inboundSchema;\n/** @internal */\nexport const ApplyPatchCallOutputItem$inboundSchema = z.object({\n    call_id: z.string(),\n    id: z.nullable(z.string()).optional(),\n    output: z.nullable(z.string()).optional(),\n    status: ApplyPatchCallOutputItemStatus$inboundSchema,\n    type: ApplyPatchCallOutputItemType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"call_id\": \"callId\",\n    });\n});\n/** @internal */\nexport const ApplyPatchCallOutputItem$outboundSchema = z.object({\n    callId: z.string(),\n    id: z.nullable(z.string()).optional(),\n    output: z.nullable(z.string()).optional(),\n    status: ApplyPatchCallOutputItemStatus$outboundSchema,\n    type: ApplyPatchCallOutputItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        callId: \"call_id\",\n    });\n});\nexport function applyPatchCallOutputItemToJSON(applyPatchCallOutputItem) {\n    return JSON.stringify(ApplyPatchCallOutputItem$outboundSchema.parse(applyPatchCallOutputItem));\n}\nexport function applyPatchCallOutputItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ApplyPatchCallOutputItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ApplyPatchCallOutputItem' from JSON`);\n}\n//# sourceMappingURL=applypatchcalloutputitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1669076da47f\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Which apply_patch engine to use. \"auto\" (default) uses native passthrough when the endpoint advertises native apply_patch support, otherwise falls back to OpenRouter's HITL validator. \"native\" forces native passthrough \u2014 when the endpoint does not support native, the request falls back to HITL. \"openrouter\" always runs the HITL validator. Native passthrough streams the diff incrementally via `apply_patch_call_operation_diff.delta` events; HITL buffers the diff for atomic delivery as a single delta.\n */\nexport const ApplyPatchEngineEnum = {\n    Auto: \"auto\",\n    Native: \"native\",\n    Openrouter: \"openrouter\",\n};\n/** @internal */\nexport const ApplyPatchEngineEnum$outboundSchema = openEnums.outboundSchema(ApplyPatchEngineEnum);\n//# sourceMappingURL=applypatchengineenum.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ee989280d886\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ApplyPatchServerTool$inboundSchema = z.object({\n    type: z.literal(\"apply_patch\"),\n});\n/** @internal */\nexport const ApplyPatchServerTool$outboundSchema = z.object({\n    type: z.literal(\"apply_patch\"),\n});\nexport function applyPatchServerToolToJSON(applyPatchServerTool) {\n    return JSON.stringify(ApplyPatchServerTool$outboundSchema.parse(applyPatchServerTool));\n}\nexport function applyPatchServerToolFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ApplyPatchServerTool$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ApplyPatchServerTool' from JSON`);\n}\n//# sourceMappingURL=applypatchservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3fd7d99ade6e\n */\nimport * as z from \"zod/v4\";\nimport { ApplyPatchEngineEnum$outboundSchema, } from \"./applypatchengineenum.js\";\n/** @internal */\nexport const ApplyPatchServerToolConfig$outboundSchema = z.object({\n    engine: ApplyPatchEngineEnum$outboundSchema.optional(),\n});\nexport function applyPatchServerToolConfigToJSON(applyPatchServerToolConfig) {\n    return JSON.stringify(ApplyPatchServerToolConfig$outboundSchema.parse(applyPatchServerToolConfig));\n}\n//# sourceMappingURL=applypatchservertoolconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 972652412218\n */\nimport * as z from \"zod/v4\";\nimport { ApplyPatchServerToolConfig$outboundSchema, } from \"./applypatchservertoolconfig.js\";\n/** @internal */\nexport const ApplyPatchServerToolOpenRouter$outboundSchema = z.object({\n    parameters: ApplyPatchServerToolConfig$outboundSchema.optional(),\n    type: z.literal(\"openrouter:apply_patch\"),\n});\nexport function applyPatchServerToolOpenRouterToJSON(applyPatchServerToolOpenRouter) {\n    return JSON.stringify(ApplyPatchServerToolOpenRouter$outboundSchema.parse(applyPatchServerToolOpenRouter));\n}\n//# sourceMappingURL=applypatchservertoolopenrouter.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 94a6b307dab3\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const AppRankingsItem$inboundSchema = z.object({\n    app_id: z.int(),\n    app_name: z.string(),\n    rank: z.int(),\n    total_requests: z.int(),\n    total_tokens: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"app_id\": \"appId\",\n        \"app_name\": \"appName\",\n        \"total_requests\": \"totalRequests\",\n        \"total_tokens\": \"totalTokens\",\n    });\n});\nexport function appRankingsItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => AppRankingsItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'AppRankingsItem' from JSON`);\n}\n//# sourceMappingURL=apprankingsitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6e46d93381d7\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/**\n * Dataset version. Field names and grain are stable for the life of `v1`.\n */\nexport const RankingsDailyMetaVersion = {\n    V1: \"v1\",\n};\n/** @internal */\nexport const RankingsDailyMetaVersion$inboundSchema = z.enum(RankingsDailyMetaVersion);\n/** @internal */\nexport const RankingsDailyMeta$inboundSchema = z.object({\n    as_of: z.string(),\n    end_date: z.string(),\n    start_date: z.string(),\n    version: RankingsDailyMetaVersion$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"as_of\": \"asOf\",\n        \"end_date\": \"endDate\",\n        \"start_date\": \"startDate\",\n    });\n});\nexport function rankingsDailyMetaFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => RankingsDailyMeta$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'RankingsDailyMeta' from JSON`);\n}\n//# sourceMappingURL=rankingsdailymeta.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b6c27d448609\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { AppRankingsItem$inboundSchema, } from \"./apprankingsitem.js\";\nimport { RankingsDailyMeta$inboundSchema, } from \"./rankingsdailymeta.js\";\n/** @internal */\nexport const AppRankingsResponse$inboundSchema = z.object({\n    data: z.array(AppRankingsItem$inboundSchema),\n    meta: RankingsDailyMeta$inboundSchema,\n});\nexport function appRankingsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => AppRankingsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'AppRankingsResponse' from JSON`);\n}\n//# sourceMappingURL=apprankingsresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e3853c83720d\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const AutoRouterPlugin$outboundSchema = z.object({\n    allowedModels: z.array(z.string()).optional(),\n    costQualityTradeoff: z.int().optional(),\n    enabled: z.boolean().optional(),\n    id: z.literal(\"auto-router\"),\n}).transform((v) => {\n    return remap$(v, {\n        allowedModels: \"allowed_models\",\n        costQualityTradeoff: \"cost_quality_tradeoff\",\n    });\n});\nexport function autoRouterPluginToJSON(autoRouterPlugin) {\n    return JSON.stringify(AutoRouterPlugin$outboundSchema.parse(autoRouterPlugin));\n}\n//# sourceMappingURL=autorouterplugin.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: de317517c298\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const BadGatewayResponseErrorData$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n    metadata: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(),\n});\nexport function badGatewayResponseErrorDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BadGatewayResponseErrorData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BadGatewayResponseErrorData' from JSON`);\n}\n//# sourceMappingURL=badgatewayresponseerrordata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 42d173ee6203\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const BadRequestResponseErrorData$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n    metadata: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(),\n});\nexport function badRequestResponseErrorDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BadRequestResponseErrorData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BadRequestResponseErrorData' from JSON`);\n}\n//# sourceMappingURL=badrequestresponseerrordata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9bdc14c7565f\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const FormatEnum = {\n    Mp3: \"mp3\",\n    Wav: \"wav\",\n};\n/** @internal */\nexport const FormatEnum$inboundSchema = openEnums.inboundSchema(FormatEnum);\n/** @internal */\nexport const FormatEnum$outboundSchema = openEnums.outboundSchema(FormatEnum);\n/** @internal */\nexport const InputAudioInputAudio$inboundSchema = z.object({\n    data: z.string(),\n    format: FormatEnum$inboundSchema,\n});\n/** @internal */\nexport const InputAudioInputAudio$outboundSchema = z.object({\n    data: z.string(),\n    format: FormatEnum$outboundSchema,\n});\nexport function inputAudioInputAudioToJSON(inputAudioInputAudio) {\n    return JSON.stringify(InputAudioInputAudio$outboundSchema.parse(inputAudioInputAudio));\n}\nexport function inputAudioInputAudioFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => InputAudioInputAudio$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'InputAudioInputAudio' from JSON`);\n}\n/** @internal */\nexport const InputAudio$inboundSchema = z\n    .object({\n    input_audio: z.lazy(() => InputAudioInputAudio$inboundSchema),\n    type: z.literal(\"input_audio\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"input_audio\": \"inputAudio\",\n    });\n});\n/** @internal */\nexport const InputAudio$outboundSchema = z.object({\n    inputAudio: z.lazy(() => InputAudioInputAudio$outboundSchema),\n    type: z.literal(\"input_audio\"),\n}).transform((v) => {\n    return remap$(v, {\n        inputAudio: \"input_audio\",\n    });\n});\nexport function inputAudioToJSON(inputAudio) {\n    return JSON.stringify(InputAudio$outboundSchema.parse(inputAudio));\n}\nexport function inputAudioFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => InputAudio$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'InputAudio' from JSON`);\n}\n//# sourceMappingURL=inputaudio.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 21319fb604ac\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const InputFile$inboundSchema = z.object({\n    file_data: z.string().optional(),\n    file_id: z.nullable(z.string()).optional(),\n    file_url: z.string().optional(),\n    filename: z.string().optional(),\n    type: z.literal(\"input_file\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"file_data\": \"fileData\",\n        \"file_id\": \"fileId\",\n        \"file_url\": \"fileUrl\",\n    });\n});\n/** @internal */\nexport const InputFile$outboundSchema = z.object({\n    fileData: z.string().optional(),\n    fileId: z.nullable(z.string()).optional(),\n    fileUrl: z.string().optional(),\n    filename: z.string().optional(),\n    type: z.literal(\"input_file\"),\n}).transform((v) => {\n    return remap$(v, {\n        fileData: \"file_data\",\n        fileId: \"file_id\",\n        fileUrl: \"file_url\",\n    });\n});\nexport function inputFileToJSON(inputFile) {\n    return JSON.stringify(InputFile$outboundSchema.parse(inputFile));\n}\nexport function inputFileFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => InputFile$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'InputFile' from JSON`);\n}\n//# sourceMappingURL=inputfile.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7a718177a217\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const InputImageDetail = {\n    Auto: \"auto\",\n    High: \"high\",\n    Low: \"low\",\n    Original: \"original\",\n};\nexport const InputImageTypeEnum = {\n    InputImage: \"input_image\",\n};\n/** @internal */\nexport const InputImageDetail$inboundSchema = openEnums.inboundSchema(InputImageDetail);\n/** @internal */\nexport const InputImageDetail$outboundSchema = openEnums.outboundSchema(InputImageDetail);\n/** @internal */\nexport const InputImageTypeEnum$inboundSchema = z.enum(InputImageTypeEnum);\n/** @internal */\nexport const InputImageTypeEnum$outboundSchema = InputImageTypeEnum$inboundSchema;\n/** @internal */\nexport const InputImage$inboundSchema = z\n    .object({\n    detail: InputImageDetail$inboundSchema,\n    image_url: z.nullable(z.string()).optional(),\n    type: InputImageTypeEnum$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"image_url\": \"imageUrl\",\n    });\n});\n/** @internal */\nexport const InputImage$outboundSchema = z.object({\n    detail: InputImageDetail$outboundSchema,\n    imageUrl: z.nullable(z.string()).optional(),\n    type: InputImageTypeEnum$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        imageUrl: \"image_url\",\n    });\n});\nexport function inputImageToJSON(inputImage) {\n    return JSON.stringify(InputImage$outboundSchema.parse(inputImage));\n}\nexport function inputImageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => InputImage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'InputImage' from JSON`);\n}\n//# sourceMappingURL=inputimage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 8d6c10a240ae\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const InputText$inboundSchema = z.object({\n    text: z.string(),\n    type: z.literal(\"input_text\"),\n});\n/** @internal */\nexport const InputText$outboundSchema = z.object({\n    text: z.string(),\n    type: z.literal(\"input_text\"),\n});\nexport function inputTextToJSON(inputText) {\n    return JSON.stringify(InputText$outboundSchema.parse(inputText));\n}\nexport function inputTextFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => InputText$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'InputText' from JSON`);\n}\n//# sourceMappingURL=inputtext.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: af21a6dcaaac\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nexport const OpenAIResponseCustomToolCallType = {\n    CustomToolCall: \"custom_tool_call\",\n};\n/** @internal */\nexport const OpenAIResponseCustomToolCallType$inboundSchema = z.enum(OpenAIResponseCustomToolCallType);\n/** @internal */\nexport const OpenAIResponseCustomToolCall$inboundSchema = z.object({\n    call_id: z.string(),\n    id: z.string().optional(),\n    input: z.string(),\n    name: z.string(),\n    namespace: z.string().optional(),\n    type: OpenAIResponseCustomToolCallType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"call_id\": \"callId\",\n    });\n});\nexport function openAIResponseCustomToolCallFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponseCustomToolCall$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponseCustomToolCall' from JSON`);\n}\n//# sourceMappingURL=openairesponsecustomtoolcall.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7ce70f788343\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { InputFile$inboundSchema } from \"./inputfile.js\";\nimport { InputImage$inboundSchema } from \"./inputimage.js\";\nimport { InputText$inboundSchema } from \"./inputtext.js\";\nexport const OpenAIResponseCustomToolCallOutputType = {\n    CustomToolCallOutput: \"custom_tool_call_output\",\n};\n/** @internal */\nexport const OpenAIResponseCustomToolCallOutputOutput1$inboundSchema = discriminatedUnion(\"type\", {\n    input_file: InputFile$inboundSchema,\n    input_image: InputImage$inboundSchema.and(z.object({ type: z.literal(\"input_image\") })),\n    input_text: InputText$inboundSchema,\n});\nexport function openAIResponseCustomToolCallOutputOutput1FromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponseCustomToolCallOutputOutput1$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponseCustomToolCallOutputOutput1' from JSON`);\n}\n/** @internal */\nexport const OpenAIResponseCustomToolCallOutputOutput2$inboundSchema = z.union([\n    z.string(),\n    z.array(discriminatedUnion(\"type\", {\n        input_file: InputFile$inboundSchema,\n        input_image: InputImage$inboundSchema.and(z.object({ type: z.literal(\"input_image\") })),\n        input_text: InputText$inboundSchema,\n    })),\n]);\nexport function openAIResponseCustomToolCallOutputOutput2FromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponseCustomToolCallOutputOutput2$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponseCustomToolCallOutputOutput2' from JSON`);\n}\n/** @internal */\nexport const OpenAIResponseCustomToolCallOutputType$inboundSchema = z.enum(OpenAIResponseCustomToolCallOutputType);\n/** @internal */\nexport const OpenAIResponseCustomToolCallOutput$inboundSchema = z.object({\n    call_id: z.string(),\n    id: z.string().optional(),\n    output: z.union([\n        z.string(),\n        z.array(discriminatedUnion(\"type\", {\n            input_file: InputFile$inboundSchema,\n            input_image: InputImage$inboundSchema.and(z.object({ type: z.literal(\"input_image\") })),\n            input_text: InputText$inboundSchema,\n        })),\n    ]),\n    type: OpenAIResponseCustomToolCallOutputType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"call_id\": \"callId\",\n    });\n});\nexport function openAIResponseCustomToolCallOutputFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponseCustomToolCallOutput$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponseCustomToolCallOutput' from JSON`);\n}\n//# sourceMappingURL=openairesponsecustomtoolcalloutput.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 54eb9c06bedb\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const ToolCallStatus = {\n    InProgress: \"in_progress\",\n    Completed: \"completed\",\n    Incomplete: \"incomplete\",\n};\n/** @internal */\nexport const ToolCallStatus$inboundSchema = openEnums.inboundSchema(ToolCallStatus);\n/** @internal */\nexport const ToolCallStatus$outboundSchema = openEnums.outboundSchema(ToolCallStatus);\n//# sourceMappingURL=toolcallstatus.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d27a63e0fb93\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ToolCallStatus$inboundSchema, } from \"./toolcallstatus.js\";\nexport const OpenAIResponseFunctionToolCallType = {\n    FunctionCall: \"function_call\",\n};\n/** @internal */\nexport const OpenAIResponseFunctionToolCallType$inboundSchema = z.enum(OpenAIResponseFunctionToolCallType);\n/** @internal */\nexport const OpenAIResponseFunctionToolCall$inboundSchema = z.object({\n    arguments: z.string(),\n    call_id: z.string(),\n    id: z.string().optional(),\n    name: z.string(),\n    namespace: z.string().optional(),\n    status: ToolCallStatus$inboundSchema.optional(),\n    type: OpenAIResponseFunctionToolCallType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"call_id\": \"callId\",\n    });\n});\nexport function openAIResponseFunctionToolCallFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponseFunctionToolCall$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponseFunctionToolCall' from JSON`);\n}\n//# sourceMappingURL=openairesponsefunctiontoolcall.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 78c25d89c63e\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { InputFile$inboundSchema } from \"./inputfile.js\";\nimport { InputImage$inboundSchema } from \"./inputimage.js\";\nimport { InputText$inboundSchema } from \"./inputtext.js\";\nexport const OpenAIResponseFunctionToolCallOutputStatus = {\n    InProgress: \"in_progress\",\n    Completed: \"completed\",\n    Incomplete: \"incomplete\",\n};\nexport const OpenAIResponseFunctionToolCallOutputType = {\n    FunctionCallOutput: \"function_call_output\",\n};\n/** @internal */\nexport const OpenAIResponseFunctionToolCallOutputOutput1$inboundSchema = discriminatedUnion(\"type\", {\n    input_file: InputFile$inboundSchema,\n    input_image: InputImage$inboundSchema.and(z.object({ type: z.literal(\"input_image\") })),\n    input_text: InputText$inboundSchema,\n});\nexport function openAIResponseFunctionToolCallOutputOutput1FromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponseFunctionToolCallOutputOutput1$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponseFunctionToolCallOutputOutput1' from JSON`);\n}\n/** @internal */\nexport const OpenAIResponseFunctionToolCallOutputOutput2$inboundSchema = z.union([\n    z.string(),\n    z.array(discriminatedUnion(\"type\", {\n        input_file: InputFile$inboundSchema,\n        input_image: InputImage$inboundSchema.and(z.object({ type: z.literal(\"input_image\") })),\n        input_text: InputText$inboundSchema,\n    })),\n]);\nexport function openAIResponseFunctionToolCallOutputOutput2FromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponseFunctionToolCallOutputOutput2$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponseFunctionToolCallOutputOutput2' from JSON`);\n}\n/** @internal */\nexport const OpenAIResponseFunctionToolCallOutputStatus$inboundSchema = openEnums\n    .inboundSchema(OpenAIResponseFunctionToolCallOutputStatus);\n/** @internal */\nexport const OpenAIResponseFunctionToolCallOutputType$inboundSchema = z.enum(OpenAIResponseFunctionToolCallOutputType);\n/** @internal */\nexport const OpenAIResponseFunctionToolCallOutput$inboundSchema = z.object({\n    call_id: z.string(),\n    id: z.nullable(z.string()).optional(),\n    output: z.union([\n        z.string(),\n        z.array(discriminatedUnion(\"type\", {\n            input_file: InputFile$inboundSchema,\n            input_image: InputImage$inboundSchema.and(z.object({ type: z.literal(\"input_image\") })),\n            input_text: InputText$inboundSchema,\n        })),\n    ]),\n    status: z.nullable(OpenAIResponseFunctionToolCallOutputStatus$inboundSchema)\n        .optional(),\n    type: OpenAIResponseFunctionToolCallOutputType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"call_id\": \"callId\",\n    });\n});\nexport function openAIResponseFunctionToolCallOutputFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponseFunctionToolCallOutput$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponseFunctionToolCallOutput' from JSON`);\n}\n//# sourceMappingURL=openairesponsefunctiontoolcalloutput.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 67004da2ad5c\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { InputAudio$inboundSchema } from \"./inputaudio.js\";\nimport { InputFile$inboundSchema } from \"./inputfile.js\";\nimport { InputImage$inboundSchema } from \"./inputimage.js\";\nimport { InputText$inboundSchema } from \"./inputtext.js\";\nexport const OpenAIResponseInputMessageItemRoleDeveloper = {\n    Developer: \"developer\",\n};\nexport const OpenAIResponseInputMessageItemRoleSystem = {\n    System: \"system\",\n};\nexport const OpenAIResponseInputMessageItemRoleUser = {\n    User: \"user\",\n};\nexport const OpenAIResponseInputMessageItemType = {\n    Message: \"message\",\n};\n/** @internal */\nexport const OpenAIResponseInputMessageItemContent$inboundSchema = discriminatedUnion(\"type\", {\n    input_audio: InputAudio$inboundSchema,\n    input_file: InputFile$inboundSchema,\n    input_image: InputImage$inboundSchema.and(z.object({ type: z.literal(\"input_image\") })),\n    input_text: InputText$inboundSchema,\n});\nexport function openAIResponseInputMessageItemContentFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponseInputMessageItemContent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponseInputMessageItemContent' from JSON`);\n}\n/** @internal */\nexport const OpenAIResponseInputMessageItemRoleDeveloper$inboundSchema = z.enum(OpenAIResponseInputMessageItemRoleDeveloper);\n/** @internal */\nexport const OpenAIResponseInputMessageItemRoleSystem$inboundSchema = z.enum(OpenAIResponseInputMessageItemRoleSystem);\n/** @internal */\nexport const OpenAIResponseInputMessageItemRoleUser$inboundSchema = z.enum(OpenAIResponseInputMessageItemRoleUser);\n/** @internal */\nexport const OpenAIResponseInputMessageItemRoleUnion$inboundSchema = z.union([\n    OpenAIResponseInputMessageItemRoleUser$inboundSchema,\n    OpenAIResponseInputMessageItemRoleSystem$inboundSchema,\n    OpenAIResponseInputMessageItemRoleDeveloper$inboundSchema,\n]);\nexport function openAIResponseInputMessageItemRoleUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponseInputMessageItemRoleUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponseInputMessageItemRoleUnion' from JSON`);\n}\n/** @internal */\nexport const OpenAIResponseInputMessageItemType$inboundSchema = z.enum(OpenAIResponseInputMessageItemType);\n/** @internal */\nexport const OpenAIResponseInputMessageItem$inboundSchema = z.object({\n    content: z.array(discriminatedUnion(\"type\", {\n        input_audio: InputAudio$inboundSchema,\n        input_file: InputFile$inboundSchema,\n        input_image: InputImage$inboundSchema.and(z.object({ type: z.literal(\"input_image\") })),\n        input_text: InputText$inboundSchema,\n    })),\n    id: z.string(),\n    role: z.union([\n        OpenAIResponseInputMessageItemRoleUser$inboundSchema,\n        OpenAIResponseInputMessageItemRoleSystem$inboundSchema,\n        OpenAIResponseInputMessageItemRoleDeveloper$inboundSchema,\n    ]),\n    type: OpenAIResponseInputMessageItemType$inboundSchema.optional(),\n});\nexport function openAIResponseInputMessageItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponseInputMessageItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponseInputMessageItem' from JSON`);\n}\n//# sourceMappingURL=openairesponseinputmessageitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 2a72a5923e5a\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const ImageGenerationStatus = {\n    InProgress: \"in_progress\",\n    Completed: \"completed\",\n    Generating: \"generating\",\n    Failed: \"failed\",\n};\n/** @internal */\nexport const ImageGenerationStatus$inboundSchema = openEnums.inboundSchema(ImageGenerationStatus);\n/** @internal */\nexport const ImageGenerationStatus$outboundSchema = openEnums.outboundSchema(ImageGenerationStatus);\n//# sourceMappingURL=imagegenerationstatus.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9c3ac6a7a9ad\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ImageGenerationStatus$inboundSchema, } from \"./imagegenerationstatus.js\";\nexport const OutputItemImageGenerationCallType = {\n    ImageGenerationCall: \"image_generation_call\",\n};\n/** @internal */\nexport const OutputItemImageGenerationCallType$inboundSchema = z.enum(OutputItemImageGenerationCallType);\n/** @internal */\nexport const OutputItemImageGenerationCall$inboundSchema = z.object({\n    id: z.string(),\n    result: z.nullable(z.string()).default(null),\n    status: ImageGenerationStatus$inboundSchema,\n    type: OutputItemImageGenerationCallType$inboundSchema,\n});\nexport function outputItemImageGenerationCallFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputItemImageGenerationCall$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputItemImageGenerationCall' from JSON`);\n}\n//# sourceMappingURL=outputitemimagegenerationcall.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5445ae4a5385\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const OpenAIResponsesRefusalContent$inboundSchema = z.object({\n    refusal: z.string(),\n    type: z.literal(\"refusal\"),\n});\n/** @internal */\nexport const OpenAIResponsesRefusalContent$outboundSchema = z.object({\n    refusal: z.string(),\n    type: z.literal(\"refusal\"),\n});\nexport function openAIResponsesRefusalContentToJSON(openAIResponsesRefusalContent) {\n    return JSON.stringify(OpenAIResponsesRefusalContent$outboundSchema.parse(openAIResponsesRefusalContent));\n}\nexport function openAIResponsesRefusalContentFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponsesRefusalContent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponsesRefusalContent' from JSON`);\n}\n//# sourceMappingURL=openairesponsesrefusalcontent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 2d5e61e53c46\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { OpenAIResponsesAnnotation$inboundSchema, OpenAIResponsesAnnotation$outboundSchema, } from \"./openairesponsesannotation.js\";\n/** @internal */\nexport const ResponseOutputTextTopLogprob$inboundSchema = z.object({\n    bytes: z.array(z.int()),\n    logprob: z.number(),\n    token: z.string(),\n});\n/** @internal */\nexport const ResponseOutputTextTopLogprob$outboundSchema = z.object({\n    bytes: z.array(z.int()),\n    logprob: z.number(),\n    token: z.string(),\n});\nexport function responseOutputTextTopLogprobToJSON(responseOutputTextTopLogprob) {\n    return JSON.stringify(ResponseOutputTextTopLogprob$outboundSchema.parse(responseOutputTextTopLogprob));\n}\nexport function responseOutputTextTopLogprobFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ResponseOutputTextTopLogprob$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ResponseOutputTextTopLogprob' from JSON`);\n}\n/** @internal */\nexport const Logprob$inboundSchema = z.object({\n    bytes: z.array(z.int()),\n    logprob: z.number(),\n    token: z.string(),\n    top_logprobs: z.array(z.lazy(() => ResponseOutputTextTopLogprob$inboundSchema)),\n}).transform((v) => {\n    return remap$(v, {\n        \"top_logprobs\": \"topLogprobs\",\n    });\n});\n/** @internal */\nexport const Logprob$outboundSchema = z\n    .object({\n    bytes: z.array(z.int()),\n    logprob: z.number(),\n    token: z.string(),\n    topLogprobs: z.array(z.lazy(() => ResponseOutputTextTopLogprob$outboundSchema)),\n}).transform((v) => {\n    return remap$(v, {\n        topLogprobs: \"top_logprobs\",\n    });\n});\nexport function logprobToJSON(logprob) {\n    return JSON.stringify(Logprob$outboundSchema.parse(logprob));\n}\nexport function logprobFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Logprob$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Logprob' from JSON`);\n}\n/** @internal */\nexport const ResponseOutputText$inboundSchema = z.object({\n    annotations: z.array(OpenAIResponsesAnnotation$inboundSchema).optional(),\n    logprobs: z.array(z.lazy(() => Logprob$inboundSchema)).optional(),\n    text: z.string(),\n    type: z.literal(\"output_text\"),\n});\n/** @internal */\nexport const ResponseOutputText$outboundSchema = z.object({\n    annotations: z.array(OpenAIResponsesAnnotation$outboundSchema).optional(),\n    logprobs: z.array(z.lazy(() => Logprob$outboundSchema)).optional(),\n    text: z.string(),\n    type: z.literal(\"output_text\"),\n});\nexport function responseOutputTextToJSON(responseOutputText) {\n    return JSON.stringify(ResponseOutputText$outboundSchema.parse(responseOutputText));\n}\nexport function responseOutputTextFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ResponseOutputText$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ResponseOutputText' from JSON`);\n}\n//# sourceMappingURL=responseoutputtext.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: fa128cf87d51\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { OpenAIResponsesRefusalContent$inboundSchema, } from \"./openairesponsesrefusalcontent.js\";\nimport { ResponseOutputText$inboundSchema, } from \"./responseoutputtext.js\";\nexport const OutputMessagePhaseFinalAnswer = {\n    FinalAnswer: \"final_answer\",\n};\nexport const OutputMessagePhaseCommentary = {\n    Commentary: \"commentary\",\n};\nexport const OutputMessageRole = {\n    Assistant: \"assistant\",\n};\nexport const OutputMessageStatusInProgress = {\n    InProgress: \"in_progress\",\n};\nexport const OutputMessageStatusIncomplete = {\n    Incomplete: \"incomplete\",\n};\nexport const OutputMessageStatusCompleted = {\n    Completed: \"completed\",\n};\nexport const OutputMessageType = {\n    Message: \"message\",\n};\n/** @internal */\nexport const OutputMessageContent$inboundSchema = discriminatedUnion(\"type\", {\n    output_text: ResponseOutputText$inboundSchema,\n    refusal: OpenAIResponsesRefusalContent$inboundSchema,\n});\nexport function outputMessageContentFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputMessageContent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputMessageContent' from JSON`);\n}\n/** @internal */\nexport const OutputMessagePhaseFinalAnswer$inboundSchema = z.enum(OutputMessagePhaseFinalAnswer);\n/** @internal */\nexport const OutputMessagePhaseCommentary$inboundSchema = z.enum(OutputMessagePhaseCommentary);\n/** @internal */\nexport const OutputMessagePhaseUnion$inboundSchema = z.union([\n    OutputMessagePhaseCommentary$inboundSchema,\n    OutputMessagePhaseFinalAnswer$inboundSchema,\n    z.any(),\n]);\nexport function outputMessagePhaseUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputMessagePhaseUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputMessagePhaseUnion' from JSON`);\n}\n/** @internal */\nexport const OutputMessageRole$inboundSchema = z.enum(OutputMessageRole);\n/** @internal */\nexport const OutputMessageStatusInProgress$inboundSchema = z.enum(OutputMessageStatusInProgress);\n/** @internal */\nexport const OutputMessageStatusIncomplete$inboundSchema = z.enum(OutputMessageStatusIncomplete);\n/** @internal */\nexport const OutputMessageStatusCompleted$inboundSchema = z.enum(OutputMessageStatusCompleted);\n/** @internal */\nexport const OutputMessageStatusUnion$inboundSchema = z.union([\n    OutputMessageStatusCompleted$inboundSchema,\n    OutputMessageStatusIncomplete$inboundSchema,\n    OutputMessageStatusInProgress$inboundSchema,\n]);\nexport function outputMessageStatusUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputMessageStatusUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputMessageStatusUnion' from JSON`);\n}\n/** @internal */\nexport const OutputMessageType$inboundSchema = z.enum(OutputMessageType);\n/** @internal */\nexport const OutputMessage$inboundSchema = z\n    .object({\n    content: z.array(discriminatedUnion(\"type\", {\n        output_text: ResponseOutputText$inboundSchema,\n        refusal: OpenAIResponsesRefusalContent$inboundSchema,\n    })),\n    id: z.string(),\n    phase: z.nullable(z.union([\n        OutputMessagePhaseCommentary$inboundSchema,\n        OutputMessagePhaseFinalAnswer$inboundSchema,\n        z.any(),\n    ])).optional(),\n    role: OutputMessageRole$inboundSchema,\n    status: z.union([\n        OutputMessageStatusCompleted$inboundSchema,\n        OutputMessageStatusIncomplete$inboundSchema,\n        OutputMessageStatusInProgress$inboundSchema,\n    ]).optional(),\n    type: OutputMessageType$inboundSchema,\n});\nexport function outputMessageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputMessage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputMessage' from JSON`);\n}\n//# sourceMappingURL=outputmessage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7237afe9aafd\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { ApplyPatchCallItem$inboundSchema, } from \"./applypatchcallitem.js\";\nimport { ApplyPatchCallOutputItem$inboundSchema, } from \"./applypatchcalloutputitem.js\";\nimport { InputAudio$inboundSchema } from \"./inputaudio.js\";\nimport { InputFile$inboundSchema } from \"./inputfile.js\";\nimport { InputImage$inboundSchema } from \"./inputimage.js\";\nimport { InputText$inboundSchema } from \"./inputtext.js\";\nimport { OpenAIResponseCustomToolCall$inboundSchema, } from \"./openairesponsecustomtoolcall.js\";\nimport { OpenAIResponseCustomToolCallOutput$inboundSchema, } from \"./openairesponsecustomtoolcalloutput.js\";\nimport { OpenAIResponseFunctionToolCall$inboundSchema, } from \"./openairesponsefunctiontoolcall.js\";\nimport { OpenAIResponseFunctionToolCallOutput$inboundSchema, } from \"./openairesponsefunctiontoolcalloutput.js\";\nimport { OpenAIResponseInputMessageItem$inboundSchema, } from \"./openairesponseinputmessageitem.js\";\nimport { OutputItemImageGenerationCall$inboundSchema, } from \"./outputitemimagegenerationcall.js\";\nimport { OutputMessage$inboundSchema } from \"./outputmessage.js\";\nexport const BaseInputsPhaseFinalAnswer = {\n    FinalAnswer: \"final_answer\",\n};\nexport const BaseInputsPhaseCommentary = {\n    Commentary: \"commentary\",\n};\nexport const BaseInputsRoleDeveloper = {\n    Developer: \"developer\",\n};\nexport const BaseInputsRoleAssistant = {\n    Assistant: \"assistant\",\n};\nexport const BaseInputsRoleSystem = {\n    System: \"system\",\n};\nexport const BaseInputsRoleUser = {\n    User: \"user\",\n};\nexport const BaseInputsType = {\n    Message: \"message\",\n};\n/** @internal */\nexport const BaseInputsContent1$inboundSchema = discriminatedUnion(\"type\", {\n    input_audio: InputAudio$inboundSchema,\n    input_file: InputFile$inboundSchema,\n    input_image: InputImage$inboundSchema.and(z.object({ type: z.literal(\"input_image\") })),\n    input_text: InputText$inboundSchema,\n});\nexport function baseInputsContent1FromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BaseInputsContent1$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BaseInputsContent1' from JSON`);\n}\n/** @internal */\nexport const BaseInputsContent2$inboundSchema = z.union([\n    z.array(discriminatedUnion(\"type\", {\n        input_audio: InputAudio$inboundSchema,\n        input_file: InputFile$inboundSchema,\n        input_image: InputImage$inboundSchema.and(z.object({ type: z.literal(\"input_image\") })),\n        input_text: InputText$inboundSchema,\n    })),\n    z.string(),\n]);\nexport function baseInputsContent2FromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BaseInputsContent2$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BaseInputsContent2' from JSON`);\n}\n/** @internal */\nexport const BaseInputsPhaseFinalAnswer$inboundSchema = z.enum(BaseInputsPhaseFinalAnswer);\n/** @internal */\nexport const BaseInputsPhaseCommentary$inboundSchema = z.enum(BaseInputsPhaseCommentary);\n/** @internal */\nexport const BaseInputsPhaseUnion$inboundSchema = z.union([\n    BaseInputsPhaseCommentary$inboundSchema,\n    BaseInputsPhaseFinalAnswer$inboundSchema,\n    z.any(),\n]);\nexport function baseInputsPhaseUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BaseInputsPhaseUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BaseInputsPhaseUnion' from JSON`);\n}\n/** @internal */\nexport const BaseInputsRoleDeveloper$inboundSchema = z.enum(BaseInputsRoleDeveloper);\n/** @internal */\nexport const BaseInputsRoleAssistant$inboundSchema = z.enum(BaseInputsRoleAssistant);\n/** @internal */\nexport const BaseInputsRoleSystem$inboundSchema = z.enum(BaseInputsRoleSystem);\n/** @internal */\nexport const BaseInputsRoleUser$inboundSchema = z.enum(BaseInputsRoleUser);\n/** @internal */\nexport const BaseInputsRoleUnion$inboundSchema = z.union([\n    BaseInputsRoleUser$inboundSchema,\n    BaseInputsRoleSystem$inboundSchema,\n    BaseInputsRoleAssistant$inboundSchema,\n    BaseInputsRoleDeveloper$inboundSchema,\n]);\nexport function baseInputsRoleUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BaseInputsRoleUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BaseInputsRoleUnion' from JSON`);\n}\n/** @internal */\nexport const BaseInputsType$inboundSchema = z\n    .enum(BaseInputsType);\n/** @internal */\nexport const BaseInputsMessage$inboundSchema = z.object({\n    content: z.union([\n        z.array(discriminatedUnion(\"type\", {\n            input_audio: InputAudio$inboundSchema,\n            input_file: InputFile$inboundSchema,\n            input_image: InputImage$inboundSchema.and(z.object({ type: z.literal(\"input_image\") })),\n            input_text: InputText$inboundSchema,\n        })),\n        z.string(),\n    ]),\n    phase: z.nullable(z.union([\n        BaseInputsPhaseCommentary$inboundSchema,\n        BaseInputsPhaseFinalAnswer$inboundSchema,\n        z.any(),\n    ])).optional(),\n    role: z.union([\n        BaseInputsRoleUser$inboundSchema,\n        BaseInputsRoleSystem$inboundSchema,\n        BaseInputsRoleAssistant$inboundSchema,\n        BaseInputsRoleDeveloper$inboundSchema,\n    ]),\n    type: BaseInputsType$inboundSchema.optional(),\n});\nexport function baseInputsMessageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BaseInputsMessage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BaseInputsMessage' from JSON`);\n}\n/** @internal */\nexport const BaseInputsUnion1$inboundSchema = z.union([\n    OpenAIResponseFunctionToolCall$inboundSchema,\n    OutputMessage$inboundSchema,\n    OpenAIResponseCustomToolCall$inboundSchema,\n    ApplyPatchCallItem$inboundSchema,\n    OpenAIResponseInputMessageItem$inboundSchema,\n    OpenAIResponseFunctionToolCallOutput$inboundSchema,\n    OutputItemImageGenerationCall$inboundSchema,\n    OpenAIResponseCustomToolCallOutput$inboundSchema,\n    ApplyPatchCallOutputItem$inboundSchema,\n    z.lazy(() => BaseInputsMessage$inboundSchema),\n]);\nexport function baseInputsUnion1FromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BaseInputsUnion1$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BaseInputsUnion1' from JSON`);\n}\n/** @internal */\nexport const BaseInputsUnion$inboundSchema = z.union([\n    z.string(),\n    z.array(z.union([\n        OpenAIResponseFunctionToolCall$inboundSchema,\n        OutputMessage$inboundSchema,\n        OpenAIResponseCustomToolCall$inboundSchema,\n        ApplyPatchCallItem$inboundSchema,\n        OpenAIResponseInputMessageItem$inboundSchema,\n        OpenAIResponseFunctionToolCallOutput$inboundSchema,\n        OutputItemImageGenerationCall$inboundSchema,\n        OpenAIResponseCustomToolCallOutput$inboundSchema,\n        ApplyPatchCallOutputItem$inboundSchema,\n        z.lazy(() => BaseInputsMessage$inboundSchema),\n    ])),\n    z.any(),\n]);\nexport function baseInputsUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BaseInputsUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BaseInputsUnion' from JSON`);\n}\n//# sourceMappingURL=baseinputsunion.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: dd747014f9d3\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const ReasoningEffort = {\n    Xhigh: \"xhigh\",\n    High: \"high\",\n    Medium: \"medium\",\n    Low: \"low\",\n    Minimal: \"minimal\",\n    None: \"none\",\n};\n/** @internal */\nexport const ReasoningEffort$inboundSchema = openEnums.inboundSchema(ReasoningEffort);\n/** @internal */\nexport const ReasoningEffort$outboundSchema = openEnums.outboundSchema(ReasoningEffort);\n//# sourceMappingURL=reasoningeffort.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a51c85f04729\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const ReasoningSummaryVerbosity = {\n    Auto: \"auto\",\n    Concise: \"concise\",\n    Detailed: \"detailed\",\n};\n/** @internal */\nexport const ReasoningSummaryVerbosity$inboundSchema = openEnums.inboundSchema(ReasoningSummaryVerbosity);\n/** @internal */\nexport const ReasoningSummaryVerbosity$outboundSchema = openEnums.outboundSchema(ReasoningSummaryVerbosity);\n//# sourceMappingURL=reasoningsummaryverbosity.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f3138cf23569\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ReasoningEffort$inboundSchema, } from \"./reasoningeffort.js\";\nimport { ReasoningSummaryVerbosity$inboundSchema, } from \"./reasoningsummaryverbosity.js\";\n/** @internal */\nexport const BaseReasoningConfig$inboundSchema = z.object({\n    effort: z.nullable(ReasoningEffort$inboundSchema).optional(),\n    summary: z.nullable(ReasoningSummaryVerbosity$inboundSchema).optional(),\n});\nexport function baseReasoningConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BaseReasoningConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BaseReasoningConfig' from JSON`);\n}\n//# sourceMappingURL=basereasoningconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a4d8929dda05\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Which bash engine to use. \"openrouter\" runs commands server-side in the OpenRouter sandbox. \"auto\" (default) and \"native\" use native passthrough, returning the tool call to your application to run client-side; OpenRouter does not execute the commands.\n */\nexport const BashServerToolEngine = {\n    Auto: \"auto\",\n    Native: \"native\",\n    Openrouter: \"openrouter\",\n};\n/** @internal */\nexport const BashServerToolEngine$outboundSchema = openEnums.outboundSchema(BashServerToolEngine);\n//# sourceMappingURL=bashservertoolengine.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 49526688017e\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const ContainerAutoEnvironment$outboundSchema = z.object({\n    type: z.literal(\"container_auto\"),\n});\nexport function containerAutoEnvironmentToJSON(containerAutoEnvironment) {\n    return JSON.stringify(ContainerAutoEnvironment$outboundSchema.parse(containerAutoEnvironment));\n}\n//# sourceMappingURL=containerautoenvironment.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 711d3c8b4418\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const ContainerReferenceEnvironment$outboundSchema = z.object({\n    containerId: z.string(),\n    type: z.literal(\"container_reference\"),\n}).transform((v) => {\n    return remap$(v, {\n        containerId: \"container_id\",\n    });\n});\nexport function containerReferenceEnvironmentToJSON(containerReferenceEnvironment) {\n    return JSON.stringify(ContainerReferenceEnvironment$outboundSchema.parse(containerReferenceEnvironment));\n}\n//# sourceMappingURL=containerreferenceenvironment.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 61289ac69d53\n */\nimport * as z from \"zod/v4\";\nimport { ContainerAutoEnvironment$outboundSchema, } from \"./containerautoenvironment.js\";\nimport { ContainerReferenceEnvironment$outboundSchema, } from \"./containerreferenceenvironment.js\";\n/** @internal */\nexport const BashServerToolEnvironment$outboundSchema = z.union([\n    ContainerAutoEnvironment$outboundSchema,\n    ContainerReferenceEnvironment$outboundSchema,\n]);\nexport function bashServerToolEnvironmentToJSON(bashServerToolEnvironment) {\n    return JSON.stringify(BashServerToolEnvironment$outboundSchema.parse(bashServerToolEnvironment));\n}\n//# sourceMappingURL=bashservertoolenvironment.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 77c2f874ae9c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { BashServerToolEngine$outboundSchema, } from \"./bashservertoolengine.js\";\nimport { BashServerToolEnvironment$outboundSchema, } from \"./bashservertoolenvironment.js\";\n/** @internal */\nexport const BashServerToolConfig$outboundSchema = z.object({\n    engine: BashServerToolEngine$outboundSchema.optional(),\n    environment: BashServerToolEnvironment$outboundSchema.optional(),\n    sleepAfterSeconds: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        sleepAfterSeconds: \"sleep_after_seconds\",\n    });\n});\nexport function bashServerToolConfigToJSON(bashServerToolConfig) {\n    return JSON.stringify(BashServerToolConfig$outboundSchema.parse(bashServerToolConfig));\n}\n//# sourceMappingURL=bashservertoolconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e8dbfc697dd0\n */\nimport * as z from \"zod/v4\";\nimport { BashServerToolConfig$outboundSchema, } from \"./bashservertoolconfig.js\";\nexport const BashServerToolType = {\n    OpenrouterBash: \"openrouter:bash\",\n};\n/** @internal */\nexport const BashServerToolType$outboundSchema = z.enum(BashServerToolType);\n/** @internal */\nexport const BashServerTool$outboundSchema = z.object({\n    parameters: BashServerToolConfig$outboundSchema.optional(),\n    type: BashServerToolType$outboundSchema,\n});\nexport function bashServerToolToJSON(bashServerTool) {\n    return JSON.stringify(BashServerTool$outboundSchema.parse(bashServerTool));\n}\n//# sourceMappingURL=bashservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 74aab084b178\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const BenchmarkPricing$inboundSchema = z.object({\n    completion: z.string(),\n    prompt: z.string(),\n});\nexport function benchmarkPricingFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BenchmarkPricing$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BenchmarkPricing' from JSON`);\n}\n//# sourceMappingURL=benchmarkpricing.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 82b5c9f01e00\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { BenchmarkPricing$inboundSchema, } from \"./benchmarkpricing.js\";\n/** @internal */\nexport const BenchmarksAAItem$inboundSchema = z.object({\n    aa_name: z.string(),\n    agentic_index: z.nullable(z.number()),\n    coding_index: z.nullable(z.number()),\n    intelligence_index: z.nullable(z.number()),\n    model_permaslug: z.string(),\n    pricing: z.nullable(BenchmarkPricing$inboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        \"aa_name\": \"aaName\",\n        \"agentic_index\": \"agenticIndex\",\n        \"coding_index\": \"codingIndex\",\n        \"intelligence_index\": \"intelligenceIndex\",\n        \"model_permaslug\": \"modelPermaslug\",\n    });\n});\nexport function benchmarksAAItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BenchmarksAAItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BenchmarksAAItem' from JSON`);\n}\n//# sourceMappingURL=benchmarksaaitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ea7ac20c3f7c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/**\n * Data source identifier.\n */\nexport const BenchmarksAAMetaSource = {\n    ArtificialAnalysis: \"artificial-analysis\",\n};\n/**\n * URL of the upstream data source.\n */\nexport const BenchmarksAAMetaSourceUrl = {\n    HttpsArtificialanalysisAi: \"https://artificialanalysis.ai\",\n};\n/**\n * Dataset version.\n */\nexport const BenchmarksAAMetaVersion = {\n    V1: \"v1\",\n};\n/** @internal */\nexport const BenchmarksAAMetaSource$inboundSchema = z.enum(BenchmarksAAMetaSource);\n/** @internal */\nexport const BenchmarksAAMetaSourceUrl$inboundSchema = z.enum(BenchmarksAAMetaSourceUrl);\n/** @internal */\nexport const BenchmarksAAMetaVersion$inboundSchema = z.enum(BenchmarksAAMetaVersion);\n/** @internal */\nexport const BenchmarksAAMeta$inboundSchema = z.object({\n    as_of: z.string(),\n    citation: z.string(),\n    model_count: z.int(),\n    source: BenchmarksAAMetaSource$inboundSchema,\n    source_url: BenchmarksAAMetaSourceUrl$inboundSchema,\n    version: BenchmarksAAMetaVersion$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"as_of\": \"asOf\",\n        \"model_count\": \"modelCount\",\n        \"source_url\": \"sourceUrl\",\n    });\n});\nexport function benchmarksAAMetaFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BenchmarksAAMeta$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BenchmarksAAMeta' from JSON`);\n}\n//# sourceMappingURL=benchmarksaameta.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 57a074171835\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { BenchmarksAAItem$inboundSchema, } from \"./benchmarksaaitem.js\";\nimport { BenchmarksAAMeta$inboundSchema, } from \"./benchmarksaameta.js\";\n/** @internal */\nexport const BenchmarksAAResponse$inboundSchema = z.object({\n    data: z.array(BenchmarksAAItem$inboundSchema),\n    meta: BenchmarksAAMeta$inboundSchema,\n});\nexport function benchmarksAAResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BenchmarksAAResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BenchmarksAAResponse' from JSON`);\n}\n//# sourceMappingURL=benchmarksaaresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a8a7a42ac948\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { BenchmarkPricing$inboundSchema, } from \"./benchmarkpricing.js\";\n/** @internal */\nexport const TournamentStats$inboundSchema = z.object({\n    first_place: z.nullable(z.int()),\n    fourth_place: z.nullable(z.int()),\n    second_place: z.nullable(z.int()),\n    third_place: z.nullable(z.int()),\n    total: z.nullable(z.int()),\n}).transform((v) => {\n    return remap$(v, {\n        \"first_place\": \"firstPlace\",\n        \"fourth_place\": \"fourthPlace\",\n        \"second_place\": \"secondPlace\",\n        \"third_place\": \"thirdPlace\",\n    });\n});\nexport function tournamentStatsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => TournamentStats$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'TournamentStats' from JSON`);\n}\n/** @internal */\nexport const BenchmarksDAItem$inboundSchema = z.object({\n    arena: z.string(),\n    avg_generation_time_ms: z.nullable(z.number()),\n    category: z.string(),\n    display_name: z.string(),\n    elo: z.number(),\n    model_permaslug: z.string(),\n    pricing: z.nullable(BenchmarkPricing$inboundSchema),\n    tournament_stats: z.lazy(() => TournamentStats$inboundSchema),\n    win_rate: z.number(),\n}).transform((v) => {\n    return remap$(v, {\n        \"avg_generation_time_ms\": \"avgGenerationTimeMs\",\n        \"display_name\": \"displayName\",\n        \"model_permaslug\": \"modelPermaslug\",\n        \"tournament_stats\": \"tournamentStats\",\n        \"win_rate\": \"winRate\",\n    });\n});\nexport function benchmarksDAItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BenchmarksDAItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BenchmarksDAItem' from JSON`);\n}\n//# sourceMappingURL=benchmarksdaitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: caee78d8918e\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/**\n * Data source identifier.\n */\nexport const BenchmarksDAMetaSource = {\n    DesignArena: \"design-arena\",\n};\n/**\n * URL of the upstream data source.\n */\nexport const BenchmarksDAMetaSourceUrl = {\n    HttpsWwwDesignarenaAi: \"https://www.designarena.ai\",\n};\n/**\n * Dataset version.\n */\nexport const BenchmarksDAMetaVersion = {\n    V1: \"v1\",\n};\n/** @internal */\nexport const EloBounds$inboundSchema = z.object({\n    max: z.number(),\n    min: z.number(),\n});\nexport function eloBoundsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => EloBounds$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'EloBounds' from JSON`);\n}\n/** @internal */\nexport const BenchmarksDAMetaSource$inboundSchema = z.enum(BenchmarksDAMetaSource);\n/** @internal */\nexport const BenchmarksDAMetaSourceUrl$inboundSchema = z.enum(BenchmarksDAMetaSourceUrl);\n/** @internal */\nexport const BenchmarksDAMetaVersion$inboundSchema = z.enum(BenchmarksDAMetaVersion);\n/** @internal */\nexport const BenchmarksDAMeta$inboundSchema = z.object({\n    arena: z.string(),\n    as_of: z.string(),\n    category: z.nullable(z.string()),\n    citation: z.string(),\n    elo_bounds: z.lazy(() => EloBounds$inboundSchema),\n    model_count: z.int(),\n    source: BenchmarksDAMetaSource$inboundSchema,\n    source_url: BenchmarksDAMetaSourceUrl$inboundSchema,\n    version: BenchmarksDAMetaVersion$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"as_of\": \"asOf\",\n        \"elo_bounds\": \"eloBounds\",\n        \"model_count\": \"modelCount\",\n        \"source_url\": \"sourceUrl\",\n    });\n});\nexport function benchmarksDAMetaFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BenchmarksDAMeta$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BenchmarksDAMeta' from JSON`);\n}\n//# sourceMappingURL=benchmarksdameta.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ea90fb0e8882\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { BenchmarksDAItem$inboundSchema, } from \"./benchmarksdaitem.js\";\nimport { BenchmarksDAMeta$inboundSchema, } from \"./benchmarksdameta.js\";\n/** @internal */\nexport const BenchmarksDAResponse$inboundSchema = z.object({\n    data: z.array(BenchmarksDAItem$inboundSchema),\n    meta: BenchmarksDAMeta$inboundSchema,\n});\nexport function benchmarksDAResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BenchmarksDAResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BenchmarksDAResponse' from JSON`);\n}\n//# sourceMappingURL=benchmarksdaresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: dc2d569c8386\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const BulkAddWorkspaceMembersRequest$outboundSchema = z.object({\n    userIds: z.array(z.string()),\n}).transform((v) => {\n    return remap$(v, {\n        userIds: \"user_ids\",\n    });\n});\nexport function bulkAddWorkspaceMembersRequestToJSON(bulkAddWorkspaceMembersRequest) {\n    return JSON.stringify(BulkAddWorkspaceMembersRequest$outboundSchema.parse(bulkAddWorkspaceMembersRequest));\n}\n//# sourceMappingURL=bulkaddworkspacemembersrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 42cb4568aa7e\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Role of the member in the workspace\n */\nexport const WorkspaceMemberRole = {\n    Admin: \"admin\",\n    Member: \"member\",\n};\n/** @internal */\nexport const WorkspaceMemberRole$inboundSchema = openEnums.inboundSchema(WorkspaceMemberRole);\n/** @internal */\nexport const WorkspaceMember$inboundSchema = z.object({\n    created_at: z.string(),\n    id: z.string(),\n    role: WorkspaceMemberRole$inboundSchema,\n    user_id: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"created_at\": \"createdAt\",\n        \"user_id\": \"userId\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function workspaceMemberFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => WorkspaceMember$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'WorkspaceMember' from JSON`);\n}\n//# sourceMappingURL=workspacemember.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 825ef4d0fd7a\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { WorkspaceMember$inboundSchema, } from \"./workspacemember.js\";\n/** @internal */\nexport const BulkAddWorkspaceMembersResponse$inboundSchema = z.object({\n    added_count: z.int(),\n    data: z.array(WorkspaceMember$inboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        \"added_count\": \"addedCount\",\n    });\n});\nexport function bulkAddWorkspaceMembersResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BulkAddWorkspaceMembersResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BulkAddWorkspaceMembersResponse' from JSON`);\n}\n//# sourceMappingURL=bulkaddworkspacemembersresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ad0c5e35d467\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const BulkAssignKeysRequest$outboundSchema = z.object({\n    keyHashes: z.array(z.string()),\n}).transform((v) => {\n    return remap$(v, {\n        keyHashes: \"key_hashes\",\n    });\n});\nexport function bulkAssignKeysRequestToJSON(bulkAssignKeysRequest) {\n    return JSON.stringify(BulkAssignKeysRequest$outboundSchema.parse(bulkAssignKeysRequest));\n}\n//# sourceMappingURL=bulkassignkeysrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: c8f692e7b579\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const BulkAssignKeysResponse$inboundSchema = z.object({\n    assigned_count: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"assigned_count\": \"assignedCount\",\n    });\n});\nexport function bulkAssignKeysResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BulkAssignKeysResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BulkAssignKeysResponse' from JSON`);\n}\n//# sourceMappingURL=bulkassignkeysresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 502ee2c0e36a\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const BulkAssignMembersRequest$outboundSchema = z.object({\n    memberUserIds: z.array(z.string()),\n}).transform((v) => {\n    return remap$(v, {\n        memberUserIds: \"member_user_ids\",\n    });\n});\nexport function bulkAssignMembersRequestToJSON(bulkAssignMembersRequest) {\n    return JSON.stringify(BulkAssignMembersRequest$outboundSchema.parse(bulkAssignMembersRequest));\n}\n//# sourceMappingURL=bulkassignmembersrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e54fe72a28b7\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const BulkAssignMembersResponse$inboundSchema = z.object({\n    assigned_count: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"assigned_count\": \"assignedCount\",\n    });\n});\nexport function bulkAssignMembersResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BulkAssignMembersResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BulkAssignMembersResponse' from JSON`);\n}\n//# sourceMappingURL=bulkassignmembersresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: df9bd1ae938d\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const BulkRemoveWorkspaceMembersRequest$outboundSchema = z.object({\n    userIds: z.array(z.string()),\n}).transform((v) => {\n    return remap$(v, {\n        userIds: \"user_ids\",\n    });\n});\nexport function bulkRemoveWorkspaceMembersRequestToJSON(bulkRemoveWorkspaceMembersRequest) {\n    return JSON.stringify(BulkRemoveWorkspaceMembersRequest$outboundSchema.parse(bulkRemoveWorkspaceMembersRequest));\n}\n//# sourceMappingURL=bulkremoveworkspacemembersrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3786454b94f8\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const BulkRemoveWorkspaceMembersResponse$inboundSchema = z.object({\n    removed_count: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"removed_count\": \"removedCount\",\n    });\n});\nexport function bulkRemoveWorkspaceMembersResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BulkRemoveWorkspaceMembersResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BulkRemoveWorkspaceMembersResponse' from JSON`);\n}\n//# sourceMappingURL=bulkremoveworkspacemembersresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e773f6f68c24\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const BulkUnassignKeysRequest$outboundSchema = z.object({\n    keyHashes: z.array(z.string()),\n}).transform((v) => {\n    return remap$(v, {\n        keyHashes: \"key_hashes\",\n    });\n});\nexport function bulkUnassignKeysRequestToJSON(bulkUnassignKeysRequest) {\n    return JSON.stringify(BulkUnassignKeysRequest$outboundSchema.parse(bulkUnassignKeysRequest));\n}\n//# sourceMappingURL=bulkunassignkeysrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5906bcf3a524\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const BulkUnassignKeysResponse$inboundSchema = z.object({\n    unassigned_count: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"unassigned_count\": \"unassignedCount\",\n    });\n});\nexport function bulkUnassignKeysResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BulkUnassignKeysResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BulkUnassignKeysResponse' from JSON`);\n}\n//# sourceMappingURL=bulkunassignkeysresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3443354340f5\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const BulkUnassignMembersRequest$outboundSchema = z.object({\n    memberUserIds: z.array(z.string()),\n}).transform((v) => {\n    return remap$(v, {\n        memberUserIds: \"member_user_ids\",\n    });\n});\nexport function bulkUnassignMembersRequestToJSON(bulkUnassignMembersRequest) {\n    return JSON.stringify(BulkUnassignMembersRequest$outboundSchema.parse(bulkUnassignMembersRequest));\n}\n//# sourceMappingURL=bulkunassignmembersrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4d3857aa5f6c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const BulkUnassignMembersResponse$inboundSchema = z.object({\n    unassigned_count: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"unassigned_count\": \"unassignedCount\",\n    });\n});\nexport function bulkUnassignMembersResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BulkUnassignMembersResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BulkUnassignMembersResponse' from JSON`);\n}\n//# sourceMappingURL=bulkunassignmembersresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f8e7a5a4b0a2\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * The upstream provider this credential authenticates against, as a lowercase slug (e.g. `openai`, `anthropic`, `amazon-bedrock`).\n */\nexport const BYOKProviderSlug = {\n    Ai21: \"ai21\",\n    AionLabs: \"aion-labs\",\n    Akashml: \"akashml\",\n    Alibaba: \"alibaba\",\n    AmazonBedrock: \"amazon-bedrock\",\n    AmazonNova: \"amazon-nova\",\n    Ambient: \"ambient\",\n    Anthropic: \"anthropic\",\n    ArceeAi: \"arcee-ai\",\n    AtlasCloud: \"atlas-cloud\",\n    Avian: \"avian\",\n    Azure: \"azure\",\n    Baidu: \"baidu\",\n    Baseten: \"baseten\",\n    BlackForestLabs: \"black-forest-labs\",\n    Byteplus: \"byteplus\",\n    Cerebras: \"cerebras\",\n    Chutes: \"chutes\",\n    Cirrascale: \"cirrascale\",\n    Clarifai: \"clarifai\",\n    Cloudflare: \"cloudflare\",\n    Cohere: \"cohere\",\n    Crusoe: \"crusoe\",\n    Darkbloom: \"darkbloom\",\n    Decart: \"decart\",\n    Deepinfra: \"deepinfra\",\n    Deepseek: \"deepseek\",\n    Dekallm: \"dekallm\",\n    Digitalocean: \"digitalocean\",\n    Featherless: \"featherless\",\n    Fireworks: \"fireworks\",\n    Friendli: \"friendli\",\n    Gmicloud: \"gmicloud\",\n    GoogleAiStudio: \"google-ai-studio\",\n    GoogleVertex: \"google-vertex\",\n    Groq: \"groq\",\n    Inception: \"inception\",\n    Inceptron: \"inceptron\",\n    InferenceNet: \"inference-net\",\n    Infermatic: \"infermatic\",\n    Inflection: \"inflection\",\n    IoNet: \"io-net\",\n    Ionstream: \"ionstream\",\n    Liquid: \"liquid\",\n    Mancer: \"mancer\",\n    Mara: \"mara\",\n    Minimax: \"minimax\",\n    Mistral: \"mistral\",\n    Modelrun: \"modelrun\",\n    Modular: \"modular\",\n    Moonshotai: \"moonshotai\",\n    Morph: \"morph\",\n    Ncompass: \"ncompass\",\n    Nebius: \"nebius\",\n    NexAgi: \"nex-agi\",\n    Nextbit: \"nextbit\",\n    Novita: \"novita\",\n    Nvidia: \"nvidia\",\n    OpenInference: \"open-inference\",\n    Openai: \"openai\",\n    Parasail: \"parasail\",\n    Perceptron: \"perceptron\",\n    Perplexity: \"perplexity\",\n    Phala: \"phala\",\n    Poolside: \"poolside\",\n    Recraft: \"recraft\",\n    Reka: \"reka\",\n    Relace: \"relace\",\n    Sambanova: \"sambanova\",\n    Seed: \"seed\",\n    Siliconflow: \"siliconflow\",\n    Sourceful: \"sourceful\",\n    Stepfun: \"stepfun\",\n    Streamlake: \"streamlake\",\n    Switchpoint: \"switchpoint\",\n    Together: \"together\",\n    Upstage: \"upstage\",\n    Venice: \"venice\",\n    Wafer: \"wafer\",\n    Wandb: \"wandb\",\n    Xai: \"xai\",\n    Xiaomi: \"xiaomi\",\n    ZAi: \"z-ai\",\n};\n/** @internal */\nexport const BYOKProviderSlug$inboundSchema = openEnums.inboundSchema(BYOKProviderSlug);\n/** @internal */\nexport const BYOKProviderSlug$outboundSchema = openEnums.outboundSchema(BYOKProviderSlug);\n//# sourceMappingURL=byokproviderslug.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7f8b3abf1e77\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { BYOKProviderSlug$inboundSchema, } from \"./byokproviderslug.js\";\n/** @internal */\nexport const BYOKKey$inboundSchema = z.object({\n    allowed_api_key_hashes: z.nullable(z.array(z.string())),\n    allowed_models: z.nullable(z.array(z.string())),\n    allowed_user_ids: z.nullable(z.array(z.string())),\n    created_at: z.string(),\n    disabled: z.boolean(),\n    id: z.string(),\n    is_fallback: z.boolean(),\n    label: z.string(),\n    name: z.nullable(z.string()).optional(),\n    provider: BYOKProviderSlug$inboundSchema,\n    sort_order: z.int(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"allowed_api_key_hashes\": \"allowedApiKeyHashes\",\n        \"allowed_models\": \"allowedModels\",\n        \"allowed_user_ids\": \"allowedUserIds\",\n        \"created_at\": \"createdAt\",\n        \"is_fallback\": \"isFallback\",\n        \"sort_order\": \"sortOrder\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function byokKeyFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => BYOKKey$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'BYOKKey' from JSON`);\n}\n//# sourceMappingURL=byokkey.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 31fb8a4309f9\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ChatAssistantImagesImageUrl$inboundSchema = z.object({\n    url: z.string(),\n});\n/** @internal */\nexport const ChatAssistantImagesImageUrl$outboundSchema = z.object({\n    url: z.string(),\n});\nexport function chatAssistantImagesImageUrlToJSON(chatAssistantImagesImageUrl) {\n    return JSON.stringify(ChatAssistantImagesImageUrl$outboundSchema.parse(chatAssistantImagesImageUrl));\n}\nexport function chatAssistantImagesImageUrlFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatAssistantImagesImageUrl$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatAssistantImagesImageUrl' from JSON`);\n}\n/** @internal */\nexport const ChatAssistantImages$inboundSchema = z.object({\n    image_url: z.lazy(() => ChatAssistantImagesImageUrl$inboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        \"image_url\": \"imageUrl\",\n    });\n});\n/** @internal */\nexport const ChatAssistantImages$outboundSchema = z.object({\n    imageUrl: z.lazy(() => ChatAssistantImagesImageUrl$outboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        imageUrl: \"image_url\",\n    });\n});\nexport function chatAssistantImagesToJSON(chatAssistantImages) {\n    return JSON.stringify(ChatAssistantImages$outboundSchema.parse(chatAssistantImages));\n}\nexport function chatAssistantImagesFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatAssistantImages$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatAssistantImages' from JSON`);\n}\n//# sourceMappingURL=chatassistantimages.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 692ef1eded11\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ChatAudioOutput$inboundSchema = z.object({\n    data: z.string().optional(),\n    expires_at: z.int().optional(),\n    id: z.string().optional(),\n    transcript: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"expires_at\": \"expiresAt\",\n    });\n});\n/** @internal */\nexport const ChatAudioOutput$outboundSchema = z.object({\n    data: z.string().optional(),\n    expiresAt: z.int().optional(),\n    id: z.string().optional(),\n    transcript: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        expiresAt: \"expires_at\",\n    });\n});\nexport function chatAudioOutputToJSON(chatAudioOutput) {\n    return JSON.stringify(ChatAudioOutput$outboundSchema.parse(chatAudioOutput));\n}\nexport function chatAudioOutputFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatAudioOutput$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatAudioOutput' from JSON`);\n}\n//# sourceMappingURL=chataudiooutput.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0f458a760f42\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ChatContentAudioInputAudio$inboundSchema = z.object({\n    data: z.string(),\n    format: z.string(),\n});\n/** @internal */\nexport const ChatContentAudioInputAudio$outboundSchema = z.object({\n    data: z.string(),\n    format: z.string(),\n});\nexport function chatContentAudioInputAudioToJSON(chatContentAudioInputAudio) {\n    return JSON.stringify(ChatContentAudioInputAudio$outboundSchema.parse(chatContentAudioInputAudio));\n}\nexport function chatContentAudioInputAudioFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatContentAudioInputAudio$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatContentAudioInputAudio' from JSON`);\n}\n/** @internal */\nexport const ChatContentAudio$inboundSchema = z.object({\n    input_audio: z.lazy(() => ChatContentAudioInputAudio$inboundSchema),\n    type: z.literal(\"input_audio\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"input_audio\": \"inputAudio\",\n    });\n});\n/** @internal */\nexport const ChatContentAudio$outboundSchema = z.object({\n    inputAudio: z.lazy(() => ChatContentAudioInputAudio$outboundSchema),\n    type: z.literal(\"input_audio\"),\n}).transform((v) => {\n    return remap$(v, {\n        inputAudio: \"input_audio\",\n    });\n});\nexport function chatContentAudioToJSON(chatContentAudio) {\n    return JSON.stringify(ChatContentAudio$outboundSchema.parse(chatContentAudio));\n}\nexport function chatContentAudioFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatContentAudio$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatContentAudio' from JSON`);\n}\n//# sourceMappingURL=chatcontentaudio.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ee5054f5da9f\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FileT$inboundSchema = z.object({\n    file_data: z.string().optional(),\n    file_id: z.string().optional(),\n    filename: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"file_data\": \"fileData\",\n        \"file_id\": \"fileId\",\n    });\n});\n/** @internal */\nexport const FileT$outboundSchema = z.object({\n    fileData: z.string().optional(),\n    fileId: z.string().optional(),\n    filename: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        fileData: \"file_data\",\n        fileId: \"file_id\",\n    });\n});\nexport function fileToJSON(fileT) {\n    return JSON.stringify(FileT$outboundSchema.parse(fileT));\n}\nexport function fileFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FileT$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FileT' from JSON`);\n}\n/** @internal */\nexport const ChatContentFile$inboundSchema = z.object({\n    file: z.lazy(() => FileT$inboundSchema),\n    type: z.literal(\"file\"),\n});\n/** @internal */\nexport const ChatContentFile$outboundSchema = z.object({\n    file: z.lazy(() => FileT$outboundSchema),\n    type: z.literal(\"file\"),\n});\nexport function chatContentFileToJSON(chatContentFile) {\n    return JSON.stringify(ChatContentFile$outboundSchema.parse(chatContentFile));\n}\nexport function chatContentFileFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatContentFile$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatContentFile' from JSON`);\n}\n//# sourceMappingURL=chatcontentfile.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0903ebf8f7a0\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Image detail level for vision models\n */\nexport const ChatContentImageDetail = {\n    Auto: \"auto\",\n    Low: \"low\",\n    High: \"high\",\n};\n/** @internal */\nexport const ChatContentImageDetail$inboundSchema = openEnums.inboundSchema(ChatContentImageDetail);\n/** @internal */\nexport const ChatContentImageDetail$outboundSchema = openEnums.outboundSchema(ChatContentImageDetail);\n/** @internal */\nexport const ChatContentImageImageUrl$inboundSchema = z.object({\n    detail: ChatContentImageDetail$inboundSchema.optional(),\n    url: z.string(),\n});\n/** @internal */\nexport const ChatContentImageImageUrl$outboundSchema = z.object({\n    detail: ChatContentImageDetail$outboundSchema.optional(),\n    url: z.string(),\n});\nexport function chatContentImageImageUrlToJSON(chatContentImageImageUrl) {\n    return JSON.stringify(ChatContentImageImageUrl$outboundSchema.parse(chatContentImageImageUrl));\n}\nexport function chatContentImageImageUrlFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatContentImageImageUrl$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatContentImageImageUrl' from JSON`);\n}\n/** @internal */\nexport const ChatContentImage$inboundSchema = z.object({\n    image_url: z.lazy(() => ChatContentImageImageUrl$inboundSchema),\n    type: z.literal(\"image_url\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"image_url\": \"imageUrl\",\n    });\n});\n/** @internal */\nexport const ChatContentImage$outboundSchema = z.object({\n    imageUrl: z.lazy(() => ChatContentImageImageUrl$outboundSchema),\n    type: z.literal(\"image_url\"),\n}).transform((v) => {\n    return remap$(v, {\n        imageUrl: \"image_url\",\n    });\n});\nexport function chatContentImageToJSON(chatContentImage) {\n    return JSON.stringify(ChatContentImage$outboundSchema.parse(chatContentImage));\n}\nexport function chatContentImageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatContentImage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatContentImage' from JSON`);\n}\n//# sourceMappingURL=chatcontentimage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 2826e2627ca8\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { AnthropicCacheControlTtl$inboundSchema, AnthropicCacheControlTtl$outboundSchema, } from \"./anthropiccachecontrolttl.js\";\nexport const ChatContentCacheControlType = {\n    Ephemeral: \"ephemeral\",\n};\n/** @internal */\nexport const ChatContentCacheControlType$inboundSchema = z.enum(ChatContentCacheControlType);\n/** @internal */\nexport const ChatContentCacheControlType$outboundSchema = ChatContentCacheControlType$inboundSchema;\n/** @internal */\nexport const ChatContentCacheControl$inboundSchema = z.object({\n    ttl: AnthropicCacheControlTtl$inboundSchema.optional(),\n    type: ChatContentCacheControlType$inboundSchema,\n});\n/** @internal */\nexport const ChatContentCacheControl$outboundSchema = z.object({\n    ttl: AnthropicCacheControlTtl$outboundSchema.optional(),\n    type: ChatContentCacheControlType$outboundSchema,\n});\nexport function chatContentCacheControlToJSON(chatContentCacheControl) {\n    return JSON.stringify(ChatContentCacheControl$outboundSchema.parse(chatContentCacheControl));\n}\nexport function chatContentCacheControlFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatContentCacheControl$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatContentCacheControl' from JSON`);\n}\n//# sourceMappingURL=chatcontentcachecontrol.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 09b5a48d2bab\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ChatContentCacheControl$inboundSchema, ChatContentCacheControl$outboundSchema, } from \"./chatcontentcachecontrol.js\";\nexport const ChatContentTextType = {\n    Text: \"text\",\n};\n/** @internal */\nexport const ChatContentTextType$inboundSchema = z.enum(ChatContentTextType);\n/** @internal */\nexport const ChatContentTextType$outboundSchema = ChatContentTextType$inboundSchema;\n/** @internal */\nexport const ChatContentText$inboundSchema = z.object({\n    cache_control: ChatContentCacheControl$inboundSchema.optional(),\n    text: z.string(),\n    type: ChatContentTextType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"cache_control\": \"cacheControl\",\n    });\n});\n/** @internal */\nexport const ChatContentText$outboundSchema = z.object({\n    cacheControl: ChatContentCacheControl$outboundSchema.optional(),\n    text: z.string(),\n    type: ChatContentTextType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n    });\n});\nexport function chatContentTextToJSON(chatContentText) {\n    return JSON.stringify(ChatContentText$outboundSchema.parse(chatContentText));\n}\nexport function chatContentTextFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatContentText$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatContentText' from JSON`);\n}\n//# sourceMappingURL=chatcontenttext.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: cca28e9a87db\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ChatContentVideoInput$inboundSchema = z.object({\n    url: z.string(),\n});\n/** @internal */\nexport const ChatContentVideoInput$outboundSchema = z.object({\n    url: z.string(),\n});\nexport function chatContentVideoInputToJSON(chatContentVideoInput) {\n    return JSON.stringify(ChatContentVideoInput$outboundSchema.parse(chatContentVideoInput));\n}\nexport function chatContentVideoInputFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatContentVideoInput$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatContentVideoInput' from JSON`);\n}\n//# sourceMappingURL=chatcontentvideoinput.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 353c68bbb3b2\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ChatContentVideoInput$inboundSchema, ChatContentVideoInput$outboundSchema, } from \"./chatcontentvideoinput.js\";\n/** @internal */\nexport const ChatContentVideo$inboundSchema = z.object({\n    type: z.literal(\"video_url\"),\n    video_url: ChatContentVideoInput$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"video_url\": \"videoUrl\",\n    });\n});\n/** @internal */\nexport const ChatContentVideo$outboundSchema = z.object({\n    type: z.literal(\"video_url\"),\n    videoUrl: ChatContentVideoInput$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        videoUrl: \"video_url\",\n    });\n});\nexport function chatContentVideoToJSON(chatContentVideo) {\n    return JSON.stringify(ChatContentVideo$outboundSchema.parse(chatContentVideo));\n}\nexport function chatContentVideoFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatContentVideo$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatContentVideo' from JSON`);\n}\n//# sourceMappingURL=chatcontentvideo.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: baf6fcb0034a\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ChatContentVideoInput$inboundSchema, ChatContentVideoInput$outboundSchema, } from \"./chatcontentvideoinput.js\";\n/** @internal */\nexport const LegacyChatContentVideo$inboundSchema = z.object({\n    type: z.literal(\"input_video\"),\n    video_url: ChatContentVideoInput$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"video_url\": \"videoUrl\",\n    });\n});\n/** @internal */\nexport const LegacyChatContentVideo$outboundSchema = z.object({\n    type: z.literal(\"input_video\"),\n    videoUrl: ChatContentVideoInput$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        videoUrl: \"video_url\",\n    });\n});\nexport function legacyChatContentVideoToJSON(legacyChatContentVideo) {\n    return JSON.stringify(LegacyChatContentVideo$outboundSchema.parse(legacyChatContentVideo));\n}\nexport function legacyChatContentVideoFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => LegacyChatContentVideo$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'LegacyChatContentVideo' from JSON`);\n}\n//# sourceMappingURL=legacychatcontentvideo.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3d8c886d8084\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { ChatContentAudio$inboundSchema, ChatContentAudio$outboundSchema, } from \"./chatcontentaudio.js\";\nimport { ChatContentFile$inboundSchema, ChatContentFile$outboundSchema, } from \"./chatcontentfile.js\";\nimport { ChatContentImage$inboundSchema, ChatContentImage$outboundSchema, } from \"./chatcontentimage.js\";\nimport { ChatContentText$inboundSchema, ChatContentText$outboundSchema, } from \"./chatcontenttext.js\";\nimport { ChatContentVideo$inboundSchema, ChatContentVideo$outboundSchema, } from \"./chatcontentvideo.js\";\nimport { LegacyChatContentVideo$inboundSchema, LegacyChatContentVideo$outboundSchema, } from \"./legacychatcontentvideo.js\";\n/** @internal */\nexport const ChatContentItems$inboundSchema = discriminatedUnion(\"type\", {\n    file: ChatContentFile$inboundSchema,\n    image_url: ChatContentImage$inboundSchema,\n    input_audio: ChatContentAudio$inboundSchema,\n    input_video: LegacyChatContentVideo$inboundSchema,\n    text: ChatContentText$inboundSchema.and(z.object({ type: z.literal(\"text\") })),\n    video_url: ChatContentVideo$inboundSchema,\n});\n/** @internal */\nexport const ChatContentItems$outboundSchema = z.union([\n    ChatContentFile$outboundSchema,\n    ChatContentImage$outboundSchema,\n    ChatContentAudio$outboundSchema,\n    LegacyChatContentVideo$outboundSchema,\n    ChatContentText$outboundSchema.and(z.object({ type: z.literal(\"text\") })),\n    ChatContentVideo$outboundSchema,\n]);\nexport function chatContentItemsToJSON(chatContentItems) {\n    return JSON.stringify(ChatContentItems$outboundSchema.parse(chatContentItems));\n}\nexport function chatContentItemsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatContentItems$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatContentItems' from JSON`);\n}\n//# sourceMappingURL=chatcontentitems.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f15fee305732\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nexport const ChatToolCallType = {\n    Function: \"function\",\n};\n/** @internal */\nexport const ChatToolCallFunction$inboundSchema = z.object({\n    arguments: z.string(),\n    name: z.string(),\n});\n/** @internal */\nexport const ChatToolCallFunction$outboundSchema = z.object({\n    arguments: z.string(),\n    name: z.string(),\n});\nexport function chatToolCallFunctionToJSON(chatToolCallFunction) {\n    return JSON.stringify(ChatToolCallFunction$outboundSchema.parse(chatToolCallFunction));\n}\nexport function chatToolCallFunctionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatToolCallFunction$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatToolCallFunction' from JSON`);\n}\n/** @internal */\nexport const ChatToolCallType$inboundSchema = z.enum(ChatToolCallType);\n/** @internal */\nexport const ChatToolCallType$outboundSchema = ChatToolCallType$inboundSchema;\n/** @internal */\nexport const ChatToolCall$inboundSchema = z\n    .object({\n    function: z.lazy(() => ChatToolCallFunction$inboundSchema),\n    id: z.string(),\n    type: ChatToolCallType$inboundSchema,\n});\n/** @internal */\nexport const ChatToolCall$outboundSchema = z.object({\n    function: z.lazy(() => ChatToolCallFunction$outboundSchema),\n    id: z.string(),\n    type: ChatToolCallType$outboundSchema,\n});\nexport function chatToolCallToJSON(chatToolCall) {\n    return JSON.stringify(ChatToolCall$outboundSchema.parse(chatToolCall));\n}\nexport function chatToolCallFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatToolCall$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatToolCall' from JSON`);\n}\n//# sourceMappingURL=chattoolcall.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b523cf757168\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const ReasoningFormat = {\n    Unknown: \"unknown\",\n    OpenaiResponsesV1: \"openai-responses-v1\",\n    AzureOpenaiResponsesV1: \"azure-openai-responses-v1\",\n    XaiResponsesV1: \"xai-responses-v1\",\n    AnthropicClaudeV1: \"anthropic-claude-v1\",\n    GoogleGeminiV1: \"google-gemini-v1\",\n};\n/** @internal */\nexport const ReasoningFormat$inboundSchema = openEnums.inboundSchema(ReasoningFormat);\n/** @internal */\nexport const ReasoningFormat$outboundSchema = openEnums.outboundSchema(ReasoningFormat);\n//# sourceMappingURL=reasoningformat.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 2064e7820eab\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ReasoningFormat$inboundSchema, ReasoningFormat$outboundSchema, } from \"./reasoningformat.js\";\n/** @internal */\nexport const ReasoningDetailEncrypted$inboundSchema = z.object({\n    data: z.string(),\n    format: z.nullable(ReasoningFormat$inboundSchema).optional(),\n    id: z.nullable(z.string()).optional(),\n    index: z.int().optional(),\n    type: z.literal(\"reasoning.encrypted\"),\n});\n/** @internal */\nexport const ReasoningDetailEncrypted$outboundSchema = z.object({\n    data: z.string(),\n    format: z.nullable(ReasoningFormat$outboundSchema).optional(),\n    id: z.nullable(z.string()).optional(),\n    index: z.int().optional(),\n    type: z.literal(\"reasoning.encrypted\"),\n});\nexport function reasoningDetailEncryptedToJSON(reasoningDetailEncrypted) {\n    return JSON.stringify(ReasoningDetailEncrypted$outboundSchema.parse(reasoningDetailEncrypted));\n}\nexport function reasoningDetailEncryptedFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ReasoningDetailEncrypted$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ReasoningDetailEncrypted' from JSON`);\n}\n//# sourceMappingURL=reasoningdetailencrypted.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 08e5d256b8c9\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ReasoningFormat$inboundSchema, ReasoningFormat$outboundSchema, } from \"./reasoningformat.js\";\n/** @internal */\nexport const ReasoningDetailSummary$inboundSchema = z.object({\n    format: z.nullable(ReasoningFormat$inboundSchema).optional(),\n    id: z.nullable(z.string()).optional(),\n    index: z.int().optional(),\n    summary: z.string(),\n    type: z.literal(\"reasoning.summary\"),\n});\n/** @internal */\nexport const ReasoningDetailSummary$outboundSchema = z.object({\n    format: z.nullable(ReasoningFormat$outboundSchema).optional(),\n    id: z.nullable(z.string()).optional(),\n    index: z.int().optional(),\n    summary: z.string(),\n    type: z.literal(\"reasoning.summary\"),\n});\nexport function reasoningDetailSummaryToJSON(reasoningDetailSummary) {\n    return JSON.stringify(ReasoningDetailSummary$outboundSchema.parse(reasoningDetailSummary));\n}\nexport function reasoningDetailSummaryFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ReasoningDetailSummary$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ReasoningDetailSummary' from JSON`);\n}\n//# sourceMappingURL=reasoningdetailsummary.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 8b6bd4c64a66\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ReasoningFormat$inboundSchema, ReasoningFormat$outboundSchema, } from \"./reasoningformat.js\";\n/** @internal */\nexport const ReasoningDetailText$inboundSchema = z.object({\n    format: z.nullable(ReasoningFormat$inboundSchema).optional(),\n    id: z.nullable(z.string()).optional(),\n    index: z.int().optional(),\n    signature: z.nullable(z.string()).optional(),\n    text: z.nullable(z.string()).optional(),\n    type: z.literal(\"reasoning.text\"),\n});\n/** @internal */\nexport const ReasoningDetailText$outboundSchema = z.object({\n    format: z.nullable(ReasoningFormat$outboundSchema).optional(),\n    id: z.nullable(z.string()).optional(),\n    index: z.int().optional(),\n    signature: z.nullable(z.string()).optional(),\n    text: z.nullable(z.string()).optional(),\n    type: z.literal(\"reasoning.text\"),\n});\nexport function reasoningDetailTextToJSON(reasoningDetailText) {\n    return JSON.stringify(ReasoningDetailText$outboundSchema.parse(reasoningDetailText));\n}\nexport function reasoningDetailTextFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ReasoningDetailText$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ReasoningDetailText' from JSON`);\n}\n//# sourceMappingURL=reasoningdetailtext.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a224fd99cdb5\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { ReasoningDetailEncrypted$inboundSchema, ReasoningDetailEncrypted$outboundSchema, } from \"./reasoningdetailencrypted.js\";\nimport { ReasoningDetailSummary$inboundSchema, ReasoningDetailSummary$outboundSchema, } from \"./reasoningdetailsummary.js\";\nimport { ReasoningDetailText$inboundSchema, ReasoningDetailText$outboundSchema, } from \"./reasoningdetailtext.js\";\n/** @internal */\nexport const ReasoningDetailUnion$inboundSchema = discriminatedUnion(\"type\", {\n    [\"reasoning.encrypted\"]: ReasoningDetailEncrypted$inboundSchema,\n    [\"reasoning.summary\"]: ReasoningDetailSummary$inboundSchema,\n    [\"reasoning.text\"]: ReasoningDetailText$inboundSchema,\n});\n/** @internal */\nexport const ReasoningDetailUnion$outboundSchema = z.union([\n    ReasoningDetailEncrypted$outboundSchema,\n    ReasoningDetailSummary$outboundSchema,\n    ReasoningDetailText$outboundSchema,\n]);\nexport function reasoningDetailUnionToJSON(reasoningDetailUnion) {\n    return JSON.stringify(ReasoningDetailUnion$outboundSchema.parse(reasoningDetailUnion));\n}\nexport function reasoningDetailUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ReasoningDetailUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ReasoningDetailUnion' from JSON`);\n}\n//# sourceMappingURL=reasoningdetailunion.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d8ae826b4712\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ChatAssistantImages$inboundSchema, ChatAssistantImages$outboundSchema, } from \"./chatassistantimages.js\";\nimport { ChatAudioOutput$inboundSchema, ChatAudioOutput$outboundSchema, } from \"./chataudiooutput.js\";\nimport { ChatContentItems$inboundSchema, ChatContentItems$outboundSchema, } from \"./chatcontentitems.js\";\nimport { ChatToolCall$inboundSchema, ChatToolCall$outboundSchema, } from \"./chattoolcall.js\";\nimport { ReasoningDetailUnion$inboundSchema, ReasoningDetailUnion$outboundSchema, } from \"./reasoningdetailunion.js\";\nexport const ChatAssistantMessageRole = {\n    Assistant: \"assistant\",\n};\n/** @internal */\nexport const ChatAssistantMessageContent$inboundSchema = z.union([z.string(), z.array(ChatContentItems$inboundSchema), z.any()]);\n/** @internal */\nexport const ChatAssistantMessageContent$outboundSchema = z.union([z.string(), z.array(ChatContentItems$outboundSchema), z.any()]);\nexport function chatAssistantMessageContentToJSON(chatAssistantMessageContent) {\n    return JSON.stringify(ChatAssistantMessageContent$outboundSchema.parse(chatAssistantMessageContent));\n}\nexport function chatAssistantMessageContentFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatAssistantMessageContent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatAssistantMessageContent' from JSON`);\n}\n/** @internal */\nexport const ChatAssistantMessageRole$inboundSchema = z.enum(ChatAssistantMessageRole);\n/** @internal */\nexport const ChatAssistantMessageRole$outboundSchema = ChatAssistantMessageRole$inboundSchema;\n/** @internal */\nexport const ChatAssistantMessage$inboundSchema = z.object({\n    audio: ChatAudioOutput$inboundSchema.optional(),\n    content: z.nullable(z.union([z.string(), z.array(ChatContentItems$inboundSchema), z.any()])).optional(),\n    images: z.array(ChatAssistantImages$inboundSchema).optional(),\n    name: z.string().optional(),\n    reasoning: z.nullable(z.string()).optional(),\n    reasoning_details: z.array(ReasoningDetailUnion$inboundSchema).optional(),\n    refusal: z.nullable(z.string()).optional(),\n    role: ChatAssistantMessageRole$inboundSchema,\n    tool_calls: z.array(ChatToolCall$inboundSchema).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"reasoning_details\": \"reasoningDetails\",\n        \"tool_calls\": \"toolCalls\",\n    });\n});\n/** @internal */\nexport const ChatAssistantMessage$outboundSchema = z.object({\n    audio: ChatAudioOutput$outboundSchema.optional(),\n    content: z.nullable(z.union([z.string(), z.array(ChatContentItems$outboundSchema), z.any()])).optional(),\n    images: z.array(ChatAssistantImages$outboundSchema).optional(),\n    name: z.string().optional(),\n    reasoning: z.nullable(z.string()).optional(),\n    reasoningDetails: z.array(ReasoningDetailUnion$outboundSchema).optional(),\n    refusal: z.nullable(z.string()).optional(),\n    role: ChatAssistantMessageRole$outboundSchema,\n    toolCalls: z.array(ChatToolCall$outboundSchema).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        reasoningDetails: \"reasoning_details\",\n        toolCalls: \"tool_calls\",\n    });\n});\nexport function chatAssistantMessageToJSON(chatAssistantMessage) {\n    return JSON.stringify(ChatAssistantMessage$outboundSchema.parse(chatAssistantMessage));\n}\nexport function chatAssistantMessageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatAssistantMessage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatAssistantMessage' from JSON`);\n}\n//# sourceMappingURL=chatassistantmessage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 699f385aa2f8\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const ChatFinishReasonEnum = {\n    ToolCalls: \"tool_calls\",\n    Stop: \"stop\",\n    Length: \"length\",\n    ContentFilter: \"content_filter\",\n    Error: \"error\",\n};\n/** @internal */\nexport const ChatFinishReasonEnum$inboundSchema = openEnums.inboundSchema(ChatFinishReasonEnum);\n//# sourceMappingURL=chatfinishreasonenum.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 267d5cc43c1b\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ChatTokenLogprobTopLogprob$inboundSchema = z.object({\n    bytes: z.nullable(z.array(z.int())),\n    logprob: z.number(),\n    token: z.string(),\n});\nexport function chatTokenLogprobTopLogprobFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatTokenLogprobTopLogprob$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatTokenLogprobTopLogprob' from JSON`);\n}\n/** @internal */\nexport const ChatTokenLogprob$inboundSchema = z.object({\n    bytes: z.nullable(z.array(z.int())),\n    logprob: z.number(),\n    token: z.string(),\n    top_logprobs: z.array(z.lazy(() => ChatTokenLogprobTopLogprob$inboundSchema)),\n}).transform((v) => {\n    return remap$(v, {\n        \"top_logprobs\": \"topLogprobs\",\n    });\n});\nexport function chatTokenLogprobFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatTokenLogprob$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatTokenLogprob' from JSON`);\n}\n//# sourceMappingURL=chattokenlogprob.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9dc7afbf530d\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ChatTokenLogprob$inboundSchema, } from \"./chattokenlogprob.js\";\n/** @internal */\nexport const ChatTokenLogprobs$inboundSchema = z.object({\n    content: z.nullable(z.array(ChatTokenLogprob$inboundSchema)),\n    refusal: z.nullable(z.array(ChatTokenLogprob$inboundSchema)).optional(),\n});\nexport function chatTokenLogprobsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatTokenLogprobs$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatTokenLogprobs' from JSON`);\n}\n//# sourceMappingURL=chattokenlogprobs.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: cb1eedd5b62e\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ChatAssistantMessage$inboundSchema, } from \"./chatassistantmessage.js\";\nimport { ChatFinishReasonEnum$inboundSchema, } from \"./chatfinishreasonenum.js\";\nimport { ChatTokenLogprobs$inboundSchema, } from \"./chattokenlogprobs.js\";\n/** @internal */\nexport const ChatChoice$inboundSchema = z\n    .object({\n    finish_reason: z.nullable(ChatFinishReasonEnum$inboundSchema),\n    index: z.int(),\n    logprobs: z.nullable(ChatTokenLogprobs$inboundSchema).optional(),\n    message: ChatAssistantMessage$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"finish_reason\": \"finishReason\",\n    });\n});\nexport function chatChoiceFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatChoice$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatChoice' from JSON`);\n}\n//# sourceMappingURL=chatchoice.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6c32bdd2ee5d\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const ChatDebugOptions$outboundSchema = z.object({\n    echoUpstreamBody: z.boolean().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        echoUpstreamBody: \"echo_upstream_body\",\n    });\n});\nexport function chatDebugOptionsToJSON(chatDebugOptions) {\n    return JSON.stringify(ChatDebugOptions$outboundSchema.parse(chatDebugOptions));\n}\n//# sourceMappingURL=chatdebugoptions.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6a179ea58260\n */\nimport * as z from \"zod/v4\";\nimport { ChatContentText$outboundSchema, } from \"./chatcontenttext.js\";\n/** @internal */\nexport const ChatDeveloperMessageContent$outboundSchema = z.union([z.string(), z.array(ChatContentText$outboundSchema)]);\nexport function chatDeveloperMessageContentToJSON(chatDeveloperMessageContent) {\n    return JSON.stringify(ChatDeveloperMessageContent$outboundSchema.parse(chatDeveloperMessageContent));\n}\n/** @internal */\nexport const ChatDeveloperMessage$outboundSchema = z.object({\n    content: z.union([z.string(), z.array(ChatContentText$outboundSchema)]),\n    name: z.string().optional(),\n    role: z.literal(\"developer\"),\n});\nexport function chatDeveloperMessageToJSON(chatDeveloperMessage) {\n    return JSON.stringify(ChatDeveloperMessage$outboundSchema.parse(chatDeveloperMessage));\n}\n//# sourceMappingURL=chatdevelopermessage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 95df2fc2c178\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const ChatFormatGrammarConfig$outboundSchema = z.object({\n    grammar: z.string(),\n    type: z.literal(\"grammar\"),\n});\nexport function chatFormatGrammarConfigToJSON(chatFormatGrammarConfig) {\n    return JSON.stringify(ChatFormatGrammarConfig$outboundSchema.parse(chatFormatGrammarConfig));\n}\n//# sourceMappingURL=chatformatgrammarconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1ad0e5d930fb\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const ChatJsonSchemaConfig$outboundSchema = z.object({\n    description: z.string().optional(),\n    name: z.string(),\n    schema: z.record(z.string(), z.nullable(z.any())).optional(),\n    strict: z.nullable(z.boolean()).optional(),\n});\nexport function chatJsonSchemaConfigToJSON(chatJsonSchemaConfig) {\n    return JSON.stringify(ChatJsonSchemaConfig$outboundSchema.parse(chatJsonSchemaConfig));\n}\n//# sourceMappingURL=chatjsonschemaconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7e02597be9a9\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { ChatJsonSchemaConfig$outboundSchema, } from \"./chatjsonschemaconfig.js\";\n/** @internal */\nexport const ChatFormatJsonSchemaConfig$outboundSchema = z.object({\n    jsonSchema: ChatJsonSchemaConfig$outboundSchema,\n    type: z.literal(\"json_schema\"),\n}).transform((v) => {\n    return remap$(v, {\n        jsonSchema: \"json_schema\",\n    });\n});\nexport function chatFormatJsonSchemaConfigToJSON(chatFormatJsonSchemaConfig) {\n    return JSON.stringify(ChatFormatJsonSchemaConfig$outboundSchema.parse(chatFormatJsonSchemaConfig));\n}\n//# sourceMappingURL=chatformatjsonschemaconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7ba831befa19\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const ChatFormatPythonConfig$outboundSchema = z.object({\n    type: z.literal(\"python\"),\n});\nexport function chatFormatPythonConfigToJSON(chatFormatPythonConfig) {\n    return JSON.stringify(ChatFormatPythonConfig$outboundSchema.parse(chatFormatPythonConfig));\n}\n//# sourceMappingURL=chatformatpythonconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: cb7d0915102e\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const ChatFormatTextConfig$outboundSchema = z.object({\n    type: z.literal(\"text\"),\n});\nexport function chatFormatTextConfigToJSON(chatFormatTextConfig) {\n    return JSON.stringify(ChatFormatTextConfig$outboundSchema.parse(chatFormatTextConfig));\n}\n//# sourceMappingURL=chatformattextconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f15358a543a6\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const SearchModelsServerToolConfig$outboundSchema = z.object({\n    maxResults: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        maxResults: \"max_results\",\n    });\n});\nexport function searchModelsServerToolConfigToJSON(searchModelsServerToolConfig) {\n    return JSON.stringify(SearchModelsServerToolConfig$outboundSchema.parse(searchModelsServerToolConfig));\n}\n//# sourceMappingURL=searchmodelsservertoolconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: bb9f1922b007\n */\nimport * as z from \"zod/v4\";\nimport { SearchModelsServerToolConfig$outboundSchema, } from \"./searchmodelsservertoolconfig.js\";\nexport const ChatSearchModelsServerToolType = {\n    OpenrouterExperimentalSearchModels: \"openrouter:experimental__search_models\",\n};\n/** @internal */\nexport const ChatSearchModelsServerToolType$outboundSchema = z.enum(ChatSearchModelsServerToolType);\n/** @internal */\nexport const ChatSearchModelsServerTool$outboundSchema = z.object({\n    parameters: SearchModelsServerToolConfig$outboundSchema.optional(),\n    type: ChatSearchModelsServerToolType$outboundSchema,\n});\nexport function chatSearchModelsServerToolToJSON(chatSearchModelsServerTool) {\n    return JSON.stringify(ChatSearchModelsServerTool$outboundSchema.parse(chatSearchModelsServerTool));\n}\n//# sourceMappingURL=chatsearchmodelsservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3f28e436c1e6\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * How much context to retrieve per result. Applies to Exa, Parallel, and Perplexity engines; ignored with native provider search and Firecrawl. For Exa, pins a fixed per-result character cap (low=5,000, medium=15,000, high=30,000); when omitted, Exa picks an adaptive size per query and document (typically ~2,000\u20134,000 characters per result). For Parallel, controls the total characters across all results; when omitted, Parallel uses its own default size. For Perplexity, maps directly to the Search API's native search_context_size parameter. Overridden by `max_characters` when both are set.\n */\nexport const SearchQualityLevel = {\n    Low: \"low\",\n    Medium: \"medium\",\n    High: \"high\",\n};\n/** @internal */\nexport const SearchQualityLevel$outboundSchema = openEnums.outboundSchema(SearchQualityLevel);\n//# sourceMappingURL=searchqualitylevel.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 273c8df02654\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Which search engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in search. \"exa\" forces the Exa search API. \"firecrawl\" uses Firecrawl (requires BYOK). \"parallel\" uses the Parallel search API. \"perplexity\" uses the Perplexity Search API (raw ranked results).\n */\nexport const WebSearchEngineEnum = {\n    Native: \"native\",\n    Exa: \"exa\",\n    Parallel: \"parallel\",\n    Firecrawl: \"firecrawl\",\n    Perplexity: \"perplexity\",\n    Auto: \"auto\",\n};\n/** @internal */\nexport const WebSearchEngineEnum$inboundSchema = openEnums.inboundSchema(WebSearchEngineEnum);\n/** @internal */\nexport const WebSearchEngineEnum$outboundSchema = openEnums.outboundSchema(WebSearchEngineEnum);\n//# sourceMappingURL=websearchengineenum.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d1b6cb4026ad\n */\nimport * as z from \"zod/v4\";\nexport const WebSearchUserLocationServerToolType = {\n    Approximate: \"approximate\",\n};\n/** @internal */\nexport const WebSearchUserLocationServerToolType$outboundSchema = z.enum(WebSearchUserLocationServerToolType);\n/** @internal */\nexport const WebSearchUserLocationServerTool$outboundSchema = z.object({\n    city: z.nullable(z.string()).optional(),\n    country: z.nullable(z.string()).optional(),\n    region: z.nullable(z.string()).optional(),\n    timezone: z.nullable(z.string()).optional(),\n    type: WebSearchUserLocationServerToolType$outboundSchema.optional(),\n});\nexport function webSearchUserLocationServerToolToJSON(webSearchUserLocationServerTool) {\n    return JSON.stringify(WebSearchUserLocationServerTool$outboundSchema.parse(webSearchUserLocationServerTool));\n}\n//# sourceMappingURL=websearchuserlocationservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d43f37b9a707\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { SearchQualityLevel$outboundSchema, } from \"./searchqualitylevel.js\";\nimport { WebSearchEngineEnum$outboundSchema, } from \"./websearchengineenum.js\";\nimport { WebSearchUserLocationServerTool$outboundSchema, } from \"./websearchuserlocationservertool.js\";\n/** @internal */\nexport const WebSearchConfig$outboundSchema = z.object({\n    allowedDomains: z.array(z.string()).optional(),\n    engine: WebSearchEngineEnum$outboundSchema.optional(),\n    excludedDomains: z.array(z.string()).optional(),\n    maxCharacters: z.int().optional(),\n    maxResults: z.int().optional(),\n    maxTotalResults: z.int().optional(),\n    searchContextSize: SearchQualityLevel$outboundSchema.optional(),\n    userLocation: WebSearchUserLocationServerTool$outboundSchema.optional(),\n}).transform((v) => {\n    return remap$(v, {\n        allowedDomains: \"allowed_domains\",\n        excludedDomains: \"excluded_domains\",\n        maxCharacters: \"max_characters\",\n        maxResults: \"max_results\",\n        maxTotalResults: \"max_total_results\",\n        searchContextSize: \"search_context_size\",\n        userLocation: \"user_location\",\n    });\n});\nexport function webSearchConfigToJSON(webSearchConfig) {\n    return JSON.stringify(WebSearchConfig$outboundSchema.parse(webSearchConfig));\n}\n//# sourceMappingURL=websearchconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a67d6bbce478\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { SearchQualityLevel$outboundSchema, } from \"./searchqualitylevel.js\";\nimport { WebSearchConfig$outboundSchema, } from \"./websearchconfig.js\";\nimport { WebSearchEngineEnum$outboundSchema, } from \"./websearchengineenum.js\";\nimport { WebSearchUserLocationServerTool$outboundSchema, } from \"./websearchuserlocationservertool.js\";\nexport const ChatWebSearchShorthandType = {\n    WebSearch: \"web_search\",\n    WebSearchPreview: \"web_search_preview\",\n    WebSearchPreview20250311: \"web_search_preview_2025_03_11\",\n    WebSearch20250826: \"web_search_2025_08_26\",\n};\n/** @internal */\nexport const ChatWebSearchShorthandType$outboundSchema = openEnums.outboundSchema(ChatWebSearchShorthandType);\n/** @internal */\nexport const ChatWebSearchShorthand$outboundSchema = z.object({\n    allowedDomains: z.array(z.string()).optional(),\n    engine: WebSearchEngineEnum$outboundSchema.optional(),\n    excludedDomains: z.array(z.string()).optional(),\n    maxCharacters: z.int().optional(),\n    maxResults: z.int().optional(),\n    maxTotalResults: z.int().optional(),\n    parameters: WebSearchConfig$outboundSchema.optional(),\n    searchContextSize: SearchQualityLevel$outboundSchema.optional(),\n    type: ChatWebSearchShorthandType$outboundSchema,\n    userLocation: WebSearchUserLocationServerTool$outboundSchema.optional(),\n}).transform((v) => {\n    return remap$(v, {\n        allowedDomains: \"allowed_domains\",\n        excludedDomains: \"excluded_domains\",\n        maxCharacters: \"max_characters\",\n        maxResults: \"max_results\",\n        maxTotalResults: \"max_total_results\",\n        searchContextSize: \"search_context_size\",\n        userLocation: \"user_location\",\n    });\n});\nexport function chatWebSearchShorthandToJSON(chatWebSearchShorthand) {\n    return JSON.stringify(ChatWebSearchShorthand$outboundSchema.parse(chatWebSearchShorthand));\n}\n//# sourceMappingURL=chatwebsearchshorthand.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e0faf7e437d1\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const DatetimeServerToolConfig$outboundSchema = z.object({\n    timezone: z.string().optional(),\n});\nexport function datetimeServerToolConfigToJSON(datetimeServerToolConfig) {\n    return JSON.stringify(DatetimeServerToolConfig$outboundSchema.parse(datetimeServerToolConfig));\n}\n//# sourceMappingURL=datetimeservertoolconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e4d8b08fcbb5\n */\nimport * as z from \"zod/v4\";\nimport { DatetimeServerToolConfig$outboundSchema, } from \"./datetimeservertoolconfig.js\";\nexport const DatetimeServerToolType = {\n    OpenrouterDatetime: \"openrouter:datetime\",\n};\n/** @internal */\nexport const DatetimeServerToolType$outboundSchema = z.enum(DatetimeServerToolType);\n/** @internal */\nexport const DatetimeServerTool$outboundSchema = z.object({\n    parameters: DatetimeServerToolConfig$outboundSchema.optional(),\n    type: DatetimeServerToolType$outboundSchema,\n});\nexport function datetimeServerToolToJSON(datetimeServerTool) {\n    return JSON.stringify(DatetimeServerTool$outboundSchema.parse(datetimeServerTool));\n}\n//# sourceMappingURL=datetimeservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7215dce3dfc7\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const ImageGenerationServerToolConfigUnion$outboundSchema = z.union([z.string(), z.number(), z.array(z.nullable(z.any()))]);\nexport function imageGenerationServerToolConfigUnionToJSON(imageGenerationServerToolConfigUnion) {\n    return JSON.stringify(ImageGenerationServerToolConfigUnion$outboundSchema.parse(imageGenerationServerToolConfigUnion));\n}\n//# sourceMappingURL=imagegenerationservertoolconfigunion.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1d04d0100527\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { ImageGenerationServerToolConfigUnion$outboundSchema, } from \"./imagegenerationservertoolconfigunion.js\";\n/** @internal */\nexport const ImageGenerationServerToolConfig$outboundSchema = z.object({\n    model: z.string().optional(),\n    additionalProperties: z.record(z.string(), ImageGenerationServerToolConfigUnion$outboundSchema).optional(),\n}).transform((v) => {\n    return {\n        ...v.additionalProperties,\n        ...remap$(v, {\n            additionalProperties: null,\n        }),\n    };\n});\nexport function imageGenerationServerToolConfigToJSON(imageGenerationServerToolConfig) {\n    return JSON.stringify(ImageGenerationServerToolConfig$outboundSchema.parse(imageGenerationServerToolConfig));\n}\n//# sourceMappingURL=imagegenerationservertoolconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: dcbe3d0a09ac\n */\nimport * as z from \"zod/v4\";\nimport { ImageGenerationServerToolConfig$outboundSchema, } from \"./imagegenerationservertoolconfig.js\";\nexport const ImageGenerationServerToolOpenRouterType = {\n    OpenrouterImageGeneration: \"openrouter:image_generation\",\n};\n/** @internal */\nexport const ImageGenerationServerToolOpenRouterType$outboundSchema = z.enum(ImageGenerationServerToolOpenRouterType);\n/** @internal */\nexport const ImageGenerationServerToolOpenRouter$outboundSchema = z.object({\n    parameters: ImageGenerationServerToolConfig$outboundSchema.optional(),\n    type: ImageGenerationServerToolOpenRouterType$outboundSchema,\n});\nexport function imageGenerationServerToolOpenRouterToJSON(imageGenerationServerToolOpenRouter) {\n    return JSON.stringify(ImageGenerationServerToolOpenRouter$outboundSchema.parse(imageGenerationServerToolOpenRouter));\n}\n//# sourceMappingURL=imagegenerationservertoolopenrouter.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4d50f36832ad\n */\nimport * as z from \"zod/v4\";\nimport { WebSearchConfig$outboundSchema, } from \"./websearchconfig.js\";\nexport const OpenRouterWebSearchServerToolType = {\n    OpenrouterWebSearch: \"openrouter:web_search\",\n};\n/** @internal */\nexport const OpenRouterWebSearchServerToolType$outboundSchema = z.enum(OpenRouterWebSearchServerToolType);\n/** @internal */\nexport const OpenRouterWebSearchServerTool$outboundSchema = z.object({\n    parameters: WebSearchConfig$outboundSchema.optional(),\n    type: OpenRouterWebSearchServerToolType$outboundSchema,\n});\nexport function openRouterWebSearchServerToolToJSON(openRouterWebSearchServerTool) {\n    return JSON.stringify(OpenRouterWebSearchServerTool$outboundSchema.parse(openRouterWebSearchServerTool));\n}\n//# sourceMappingURL=openrouterwebsearchservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9d5ec7df4bc2\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const SubagentNestedTool$outboundSchema = z.object({\n    parameters: z.record(z.string(), z.nullable(z.any())).optional(),\n    type: z.string(),\n    additionalProperties: z.record(z.string(), z.nullable(z.any())).optional(),\n}).transform((v) => {\n    return {\n        ...v.additionalProperties,\n        ...remap$(v, {\n            additionalProperties: null,\n        }),\n    };\n});\nexport function subagentNestedToolToJSON(subagentNestedTool) {\n    return JSON.stringify(SubagentNestedTool$outboundSchema.parse(subagentNestedTool));\n}\n//# sourceMappingURL=subagentnestedtool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 916aba5c0712\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Reasoning effort level for the subagent call.\n */\nexport const SubagentReasoningEffort = {\n    Xhigh: \"xhigh\",\n    High: \"high\",\n    Medium: \"medium\",\n    Low: \"low\",\n    Minimal: \"minimal\",\n    None: \"none\",\n};\n/** @internal */\nexport const SubagentReasoningEffort$outboundSchema = openEnums.outboundSchema(SubagentReasoningEffort);\n/** @internal */\nexport const SubagentReasoning$outboundSchema = z.object({\n    effort: SubagentReasoningEffort$outboundSchema.optional(),\n    maxTokens: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        maxTokens: \"max_tokens\",\n    });\n});\nexport function subagentReasoningToJSON(subagentReasoning) {\n    return JSON.stringify(SubagentReasoning$outboundSchema.parse(subagentReasoning));\n}\n//# sourceMappingURL=subagentreasoning.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6f8ec51577e6\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { SubagentNestedTool$outboundSchema, } from \"./subagentnestedtool.js\";\nimport { SubagentReasoning$outboundSchema, } from \"./subagentreasoning.js\";\n/** @internal */\nexport const SubagentServerToolConfig$outboundSchema = z.object({\n    instructions: z.string().optional(),\n    maxCompletionTokens: z.int().optional(),\n    maxToolCalls: z.int().optional(),\n    model: z.string().optional(),\n    reasoning: SubagentReasoning$outboundSchema.optional(),\n    temperature: z.number().optional(),\n    tools: z.array(SubagentNestedTool$outboundSchema).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        maxCompletionTokens: \"max_completion_tokens\",\n        maxToolCalls: \"max_tool_calls\",\n    });\n});\nexport function subagentServerToolConfigToJSON(subagentServerToolConfig) {\n    return JSON.stringify(SubagentServerToolConfig$outboundSchema.parse(subagentServerToolConfig));\n}\n//# sourceMappingURL=subagentservertoolconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: fe81bd2eaa91\n */\nimport * as z from \"zod/v4\";\nimport { SubagentServerToolConfig$outboundSchema, } from \"./subagentservertoolconfig.js\";\nexport const SubagentServerToolOpenRouterType = {\n    OpenrouterSubagent: \"openrouter:subagent\",\n};\n/** @internal */\nexport const SubagentServerToolOpenRouterType$outboundSchema = z.enum(SubagentServerToolOpenRouterType);\n/** @internal */\nexport const SubagentServerToolOpenRouter$outboundSchema = z.object({\n    parameters: SubagentServerToolConfig$outboundSchema.optional(),\n    type: SubagentServerToolOpenRouterType$outboundSchema,\n});\nexport function subagentServerToolOpenRouterToJSON(subagentServerToolOpenRouter) {\n    return JSON.stringify(SubagentServerToolOpenRouter$outboundSchema.parse(subagentServerToolOpenRouter));\n}\n//# sourceMappingURL=subagentservertoolopenrouter.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9cc8d81a8f6c\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Which fetch engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in fetch. \"exa\" uses Exa Contents API. \"openrouter\" uses direct HTTP fetch. \"firecrawl\" uses Firecrawl scrape (requires BYOK). \"parallel\" uses the Parallel extract API.\n */\nexport const WebFetchEngineEnum = {\n    Auto: \"auto\",\n    Native: \"native\",\n    Openrouter: \"openrouter\",\n    Exa: \"exa\",\n    Parallel: \"parallel\",\n    Firecrawl: \"firecrawl\",\n};\n/** @internal */\nexport const WebFetchEngineEnum$outboundSchema = openEnums.outboundSchema(WebFetchEngineEnum);\n//# sourceMappingURL=webfetchengineenum.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a65999aa9fc4\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { WebFetchEngineEnum$outboundSchema, } from \"./webfetchengineenum.js\";\n/** @internal */\nexport const WebFetchServerToolConfig$outboundSchema = z.object({\n    allowedDomains: z.array(z.string()).optional(),\n    blockedDomains: z.array(z.string()).optional(),\n    engine: WebFetchEngineEnum$outboundSchema.optional(),\n    maxContentTokens: z.int().optional(),\n    maxUses: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        allowedDomains: \"allowed_domains\",\n        blockedDomains: \"blocked_domains\",\n        maxContentTokens: \"max_content_tokens\",\n        maxUses: \"max_uses\",\n    });\n});\nexport function webFetchServerToolConfigToJSON(webFetchServerToolConfig) {\n    return JSON.stringify(WebFetchServerToolConfig$outboundSchema.parse(webFetchServerToolConfig));\n}\n//# sourceMappingURL=webfetchservertoolconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6d6cb09da873\n */\nimport * as z from \"zod/v4\";\nimport { WebFetchServerToolConfig$outboundSchema, } from \"./webfetchservertoolconfig.js\";\nexport const WebFetchServerToolType = {\n    OpenrouterWebFetch: \"openrouter:web_fetch\",\n};\n/** @internal */\nexport const WebFetchServerToolType$outboundSchema = z.enum(WebFetchServerToolType);\n/** @internal */\nexport const WebFetchServerTool$outboundSchema = z.object({\n    parameters: WebFetchServerToolConfig$outboundSchema.optional(),\n    type: WebFetchServerToolType$outboundSchema,\n});\nexport function webFetchServerToolToJSON(webFetchServerTool) {\n    return JSON.stringify(WebFetchServerTool$outboundSchema.parse(webFetchServerTool));\n}\n//# sourceMappingURL=webfetchservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 400104319b29\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { AdvisorServerToolOpenRouter$outboundSchema, } from \"./advisorservertoolopenrouter.js\";\nimport { BashServerTool$outboundSchema, } from \"./bashservertool.js\";\nimport { ChatContentCacheControl$outboundSchema, } from \"./chatcontentcachecontrol.js\";\nimport { ChatSearchModelsServerTool$outboundSchema, } from \"./chatsearchmodelsservertool.js\";\nimport { ChatWebSearchShorthand$outboundSchema, } from \"./chatwebsearchshorthand.js\";\nimport { DatetimeServerTool$outboundSchema, } from \"./datetimeservertool.js\";\nimport { ImageGenerationServerToolOpenRouter$outboundSchema, } from \"./imagegenerationservertoolopenrouter.js\";\nimport { OpenRouterWebSearchServerTool$outboundSchema, } from \"./openrouterwebsearchservertool.js\";\nimport { SubagentServerToolOpenRouter$outboundSchema, } from \"./subagentservertoolopenrouter.js\";\nimport { WebFetchServerTool$outboundSchema, } from \"./webfetchservertool.js\";\nexport const ChatFunctionToolType = {\n    Function: \"function\",\n};\n/** @internal */\nexport const ChatFunctionToolFunctionFunction$outboundSchema = z.object({\n    description: z.string().optional(),\n    name: z.string(),\n    parameters: z.record(z.string(), z.nullable(z.any())).optional(),\n    strict: z.nullable(z.boolean()).optional(),\n});\nexport function chatFunctionToolFunctionFunctionToJSON(chatFunctionToolFunctionFunction) {\n    return JSON.stringify(ChatFunctionToolFunctionFunction$outboundSchema.parse(chatFunctionToolFunctionFunction));\n}\n/** @internal */\nexport const ChatFunctionToolType$outboundSchema = z.enum(ChatFunctionToolType);\n/** @internal */\nexport const ChatFunctionToolFunction$outboundSchema = z.object({\n    cacheControl: ChatContentCacheControl$outboundSchema.optional(),\n    function: z.lazy(() => ChatFunctionToolFunctionFunction$outboundSchema),\n    type: ChatFunctionToolType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n    });\n});\nexport function chatFunctionToolFunctionToJSON(chatFunctionToolFunction) {\n    return JSON.stringify(ChatFunctionToolFunction$outboundSchema.parse(chatFunctionToolFunction));\n}\n/** @internal */\nexport const ChatFunctionTool$outboundSchema = z.union([\n    z.lazy(() => ChatFunctionToolFunction$outboundSchema),\n    AdvisorServerToolOpenRouter$outboundSchema,\n    BashServerTool$outboundSchema,\n    DatetimeServerTool$outboundSchema,\n    ImageGenerationServerToolOpenRouter$outboundSchema,\n    ChatSearchModelsServerTool$outboundSchema,\n    SubagentServerToolOpenRouter$outboundSchema,\n    WebFetchServerTool$outboundSchema,\n    OpenRouterWebSearchServerTool$outboundSchema,\n    ChatWebSearchShorthand$outboundSchema,\n]);\nexport function chatFunctionToolToJSON(chatFunctionTool) {\n    return JSON.stringify(ChatFunctionTool$outboundSchema.parse(chatFunctionTool));\n}\n//# sourceMappingURL=chatfunctiontool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e404d41c140a\n */\nimport * as z from \"zod/v4\";\nimport { ChatContentText$outboundSchema, } from \"./chatcontenttext.js\";\n/** @internal */\nexport const ChatSystemMessageContent$outboundSchema = z.union([z.string(), z.array(ChatContentText$outboundSchema)]);\nexport function chatSystemMessageContentToJSON(chatSystemMessageContent) {\n    return JSON.stringify(ChatSystemMessageContent$outboundSchema.parse(chatSystemMessageContent));\n}\n/** @internal */\nexport const ChatSystemMessage$outboundSchema = z.object({\n    content: z.union([z.string(), z.array(ChatContentText$outboundSchema)]),\n    name: z.string().optional(),\n    role: z.literal(\"system\"),\n});\nexport function chatSystemMessageToJSON(chatSystemMessage) {\n    return JSON.stringify(ChatSystemMessage$outboundSchema.parse(chatSystemMessage));\n}\n//# sourceMappingURL=chatsystemmessage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 446b465db30a\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { ChatContentItems$outboundSchema, } from \"./chatcontentitems.js\";\n/** @internal */\nexport const ChatToolMessageContent$outboundSchema = z.union([z.string(), z.array(ChatContentItems$outboundSchema)]);\nexport function chatToolMessageContentToJSON(chatToolMessageContent) {\n    return JSON.stringify(ChatToolMessageContent$outboundSchema.parse(chatToolMessageContent));\n}\n/** @internal */\nexport const ChatToolMessage$outboundSchema = z.object({\n    content: z.union([z.string(), z.array(ChatContentItems$outboundSchema)]),\n    role: z.literal(\"tool\"),\n    toolCallId: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        toolCallId: \"tool_call_id\",\n    });\n});\nexport function chatToolMessageToJSON(chatToolMessage) {\n    return JSON.stringify(ChatToolMessage$outboundSchema.parse(chatToolMessage));\n}\n//# sourceMappingURL=chattoolmessage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: bc892e4ebadf\n */\nimport * as z from \"zod/v4\";\nimport { ChatContentItems$outboundSchema, } from \"./chatcontentitems.js\";\n/** @internal */\nexport const ChatUserMessageContent$outboundSchema = z.union([z.string(), z.array(ChatContentItems$outboundSchema)]);\nexport function chatUserMessageContentToJSON(chatUserMessageContent) {\n    return JSON.stringify(ChatUserMessageContent$outboundSchema.parse(chatUserMessageContent));\n}\n/** @internal */\nexport const ChatUserMessage$outboundSchema = z.object({\n    content: z.union([z.string(), z.array(ChatContentItems$outboundSchema)]),\n    name: z.string().optional(),\n    role: z.literal(\"user\"),\n});\nexport function chatUserMessageToJSON(chatUserMessage) {\n    return JSON.stringify(ChatUserMessage$outboundSchema.parse(chatUserMessage));\n}\n//# sourceMappingURL=chatusermessage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f21e02796127\n */\nimport * as z from \"zod/v4\";\nimport { ChatAssistantMessage$outboundSchema, } from \"./chatassistantmessage.js\";\nimport { ChatDeveloperMessage$outboundSchema, } from \"./chatdevelopermessage.js\";\nimport { ChatSystemMessage$outboundSchema, } from \"./chatsystemmessage.js\";\nimport { ChatToolMessage$outboundSchema, } from \"./chattoolmessage.js\";\nimport { ChatUserMessage$outboundSchema, } from \"./chatusermessage.js\";\n/** @internal */\nexport const ChatMessages$outboundSchema = z.union([\n    ChatAssistantMessage$outboundSchema.and(z.object({ role: z.literal(\"assistant\") })),\n    ChatDeveloperMessage$outboundSchema,\n    ChatSystemMessage$outboundSchema,\n    ChatToolMessage$outboundSchema,\n    ChatUserMessage$outboundSchema,\n]);\nexport function chatMessagesToJSON(chatMessages) {\n    return JSON.stringify(ChatMessages$outboundSchema.parse(chatMessages));\n}\n//# sourceMappingURL=chatmessages.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: bc876a8e64eb\n */\nimport * as z from \"zod/v4\";\nexport const ChatNamedToolChoiceType = {\n    Function: \"function\",\n};\n/** @internal */\nexport const ChatNamedToolChoiceFunction$outboundSchema = z.object({\n    name: z.string(),\n});\nexport function chatNamedToolChoiceFunctionToJSON(chatNamedToolChoiceFunction) {\n    return JSON.stringify(ChatNamedToolChoiceFunction$outboundSchema.parse(chatNamedToolChoiceFunction));\n}\n/** @internal */\nexport const ChatNamedToolChoiceType$outboundSchema = z.enum(ChatNamedToolChoiceType);\n/** @internal */\nexport const ChatNamedToolChoice$outboundSchema = z.object({\n    function: z.lazy(() => ChatNamedToolChoiceFunction$outboundSchema),\n    type: ChatNamedToolChoiceType$outboundSchema,\n});\nexport function chatNamedToolChoiceToJSON(chatNamedToolChoice) {\n    return JSON.stringify(ChatNamedToolChoice$outboundSchema.parse(chatNamedToolChoice));\n}\n//# sourceMappingURL=chatnamedtoolchoice.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b688b538e122\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const ChatReasoningSummaryVerbosityEnum = {\n    Auto: \"auto\",\n    Concise: \"concise\",\n    Detailed: \"detailed\",\n};\n/** @internal */\nexport const ChatReasoningSummaryVerbosityEnum$outboundSchema = openEnums.outboundSchema(ChatReasoningSummaryVerbosityEnum);\n//# sourceMappingURL=chatreasoningsummaryverbosityenum.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 83ba1c3db4bb\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const ChatStreamOptions$outboundSchema = z.object({\n    includeUsage: z.boolean().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        includeUsage: \"include_usage\",\n    });\n});\nexport function chatStreamOptionsToJSON(chatStreamOptions) {\n    return JSON.stringify(ChatStreamOptions$outboundSchema.parse(chatStreamOptions));\n}\n//# sourceMappingURL=chatstreamoptions.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 19d195c10298\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const ChatServerToolChoice$outboundSchema = z.object({\n    type: z.string(),\n});\nexport function chatServerToolChoiceToJSON(chatServerToolChoice) {\n    return JSON.stringify(ChatServerToolChoice$outboundSchema.parse(chatServerToolChoice));\n}\n//# sourceMappingURL=chatservertoolchoice.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f553e5b216ba\n */\nimport * as z from \"zod/v4\";\nimport { ChatNamedToolChoice$outboundSchema, } from \"./chatnamedtoolchoice.js\";\nimport { ChatServerToolChoice$outboundSchema, } from \"./chatservertoolchoice.js\";\nexport const ChatToolChoiceRequired = {\n    Required: \"required\",\n};\nexport const ChatToolChoiceAuto = {\n    Auto: \"auto\",\n};\nexport const ChatToolChoiceNone = {\n    None: \"none\",\n};\n/** @internal */\nexport const ChatToolChoiceRequired$outboundSchema = z.enum(ChatToolChoiceRequired);\n/** @internal */\nexport const ChatToolChoiceAuto$outboundSchema = z.enum(ChatToolChoiceAuto);\n/** @internal */\nexport const ChatToolChoiceNone$outboundSchema = z.enum(ChatToolChoiceNone);\n/** @internal */\nexport const ChatToolChoice$outboundSchema = z.union([\n    ChatNamedToolChoice$outboundSchema,\n    ChatServerToolChoice$outboundSchema,\n    ChatToolChoiceNone$outboundSchema,\n    ChatToolChoiceAuto$outboundSchema,\n    ChatToolChoiceRequired$outboundSchema,\n]);\nexport function chatToolChoiceToJSON(chatToolChoice) {\n    return JSON.stringify(ChatToolChoice$outboundSchema.parse(chatToolChoice));\n}\n//# sourceMappingURL=chattoolchoice.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: c80f6c3a6e09\n */\nimport * as z from \"zod/v4\";\n/**\n * The compression engine to use. Defaults to \"middle-out\".\n */\nexport const ContextCompressionEngine = {\n    MiddleOut: \"middle-out\",\n};\n/** @internal */\nexport const ContextCompressionEngine$outboundSchema = z.enum(ContextCompressionEngine);\n//# sourceMappingURL=contextcompressionengine.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e3e073b472a1\n */\nimport * as z from \"zod/v4\";\nimport { ContextCompressionEngine$outboundSchema, } from \"./contextcompressionengine.js\";\n/** @internal */\nexport const ContextCompressionPlugin$outboundSchema = z.object({\n    enabled: z.boolean().optional(),\n    engine: ContextCompressionEngine$outboundSchema.optional(),\n    id: z.literal(\"context-compression\"),\n});\nexport function contextCompressionPluginToJSON(contextCompressionPlugin) {\n    return JSON.stringify(ContextCompressionPlugin$outboundSchema.parse(contextCompressionPlugin));\n}\n//# sourceMappingURL=contextcompressionplugin.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3c0c5ac60652\n */\nimport * as z from \"zod/v4\";\nimport * as openEnums from \"../types/enums.js\";\nexport const PDFParserEnginePDFText = {\n    PdfText: \"pdf-text\",\n};\nexport const PDFParserEngineEnum = {\n    MistralOcr: \"mistral-ocr\",\n    Native: \"native\",\n    CloudflareAi: \"cloudflare-ai\",\n};\n/** @internal */\nexport const PDFParserEnginePDFText$outboundSchema = z.enum(PDFParserEnginePDFText);\n/** @internal */\nexport const PDFParserEngineEnum$outboundSchema = openEnums.outboundSchema(PDFParserEngineEnum);\n/** @internal */\nexport const PDFParserEngine$outboundSchema = z.union([\n    PDFParserEngineEnum$outboundSchema,\n    PDFParserEnginePDFText$outboundSchema,\n]);\nexport function pdfParserEngineToJSON(pdfParserEngine) {\n    return JSON.stringify(PDFParserEngine$outboundSchema.parse(pdfParserEngine));\n}\n//# sourceMappingURL=pdfparserengine.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 704f51d4a5f7\n */\nimport * as z from \"zod/v4\";\nimport { PDFParserEngine$outboundSchema, } from \"./pdfparserengine.js\";\n/** @internal */\nexport const PDFParserOptions$outboundSchema = z.object({\n    engine: PDFParserEngine$outboundSchema.optional(),\n});\nexport function pdfParserOptionsToJSON(pdfParserOptions) {\n    return JSON.stringify(PDFParserOptions$outboundSchema.parse(pdfParserOptions));\n}\n//# sourceMappingURL=pdfparseroptions.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 04e61b333ea7\n */\nimport * as z from \"zod/v4\";\nimport { PDFParserOptions$outboundSchema, } from \"./pdfparseroptions.js\";\n/** @internal */\nexport const FileParserPlugin$outboundSchema = z.object({\n    enabled: z.boolean().optional(),\n    id: z.literal(\"file-parser\"),\n    pdf: PDFParserOptions$outboundSchema.optional(),\n});\nexport function fileParserPluginToJSON(fileParserPlugin) {\n    return JSON.stringify(FileParserPlugin$outboundSchema.parse(fileParserPlugin));\n}\n//# sourceMappingURL=fileparserplugin.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 18c9f55ddf22\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FormatJsonObjectConfig$inboundSchema = z.object({\n    type: z.literal(\"json_object\"),\n});\n/** @internal */\nexport const FormatJsonObjectConfig$outboundSchema = z.object({\n    type: z.literal(\"json_object\"),\n});\nexport function formatJsonObjectConfigToJSON(formatJsonObjectConfig) {\n    return JSON.stringify(FormatJsonObjectConfig$outboundSchema.parse(formatJsonObjectConfig));\n}\nexport function formatJsonObjectConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FormatJsonObjectConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FormatJsonObjectConfig' from JSON`);\n}\n//# sourceMappingURL=formatjsonobjectconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f2f6926f21f9\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\n/**\n * A curated OpenRouter fusion preset (slugs follow `<task>-<tier>`, e.g. `general-high`). Expands server-side into the preset's analysis_models panel and judge model, so callers never name individual models. Explicitly provided `analysis_models` / `model` take precedence.\n */\nexport const PresetEnum = {\n    GeneralHigh: \"general-high\",\n    GeneralBudget: \"general-budget\",\n};\n/** @internal */\nexport const PresetEnum$outboundSchema = openEnums.outboundSchema(PresetEnum);\n/** @internal */\nexport const FusionPluginTool$outboundSchema = z.object({\n    parameters: z.record(z.string(), z.nullable(z.any())).optional(),\n    type: z.string(),\n});\nexport function fusionPluginToolToJSON(fusionPluginTool) {\n    return JSON.stringify(FusionPluginTool$outboundSchema.parse(fusionPluginTool));\n}\n/** @internal */\nexport const FusionPlugin$outboundSchema = z.object({\n    analysisModels: z.array(z.string()).optional(),\n    enabled: z.boolean().optional(),\n    id: z.literal(\"fusion\"),\n    maxToolCalls: z.int().optional(),\n    model: z.string().optional(),\n    preset: PresetEnum$outboundSchema.optional(),\n    tools: z.array(z.lazy(() => FusionPluginTool$outboundSchema)).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        analysisModels: \"analysis_models\",\n        maxToolCalls: \"max_tool_calls\",\n    });\n});\nexport function fusionPluginToJSON(fusionPlugin) {\n    return JSON.stringify(FusionPlugin$outboundSchema.parse(fusionPlugin));\n}\n//# sourceMappingURL=fusionplugin.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9b3ec0cba621\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const ImageConfig$outboundSchema = z.union([z.string(), z.number(), z.array(z.nullable(z.any()))]);\nexport function imageConfigToJSON(imageConfig) {\n    return JSON.stringify(ImageConfig$outboundSchema.parse(imageConfig));\n}\n//# sourceMappingURL=imageconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 309bb6cfc394\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const ModerationPlugin$outboundSchema = z.object({\n    id: z.literal(\"moderation\"),\n});\nexport function moderationPluginToJSON(moderationPlugin) {\n    return JSON.stringify(ModerationPlugin$outboundSchema.parse(moderationPlugin));\n}\n//# sourceMappingURL=moderationplugin.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4e557119b1dd\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const ParetoRouterPlugin$outboundSchema = z.object({\n    enabled: z.boolean().optional(),\n    id: z.literal(\"pareto-router\"),\n    minCodingScore: z.number().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        minCodingScore: \"min_coding_score\",\n    });\n});\nexport function paretoRouterPluginToJSON(paretoRouterPlugin) {\n    return JSON.stringify(ParetoRouterPlugin$outboundSchema.parse(paretoRouterPlugin));\n}\n//# sourceMappingURL=paretorouterplugin.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ab5ef16080c7\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const PercentileLatencyCutoffs$outboundSchema = z.object({\n    p50: z.nullable(z.number()).optional(),\n    p75: z.nullable(z.number()).optional(),\n    p90: z.nullable(z.number()).optional(),\n    p99: z.nullable(z.number()).optional(),\n});\nexport function percentileLatencyCutoffsToJSON(percentileLatencyCutoffs) {\n    return JSON.stringify(PercentileLatencyCutoffs$outboundSchema.parse(percentileLatencyCutoffs));\n}\n//# sourceMappingURL=percentilelatencycutoffs.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 17fc19055e19\n */\nimport * as z from \"zod/v4\";\nimport { PercentileLatencyCutoffs$outboundSchema, } from \"./percentilelatencycutoffs.js\";\n/** @internal */\nexport const PreferredMaxLatency$outboundSchema = z.union([z.number(), PercentileLatencyCutoffs$outboundSchema, z.any()]);\nexport function preferredMaxLatencyToJSON(preferredMaxLatency) {\n    return JSON.stringify(PreferredMaxLatency$outboundSchema.parse(preferredMaxLatency));\n}\n//# sourceMappingURL=preferredmaxlatency.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 366b617b09b4\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const PercentileThroughputCutoffs$outboundSchema = z.object({\n    p50: z.nullable(z.number()).optional(),\n    p75: z.nullable(z.number()).optional(),\n    p90: z.nullable(z.number()).optional(),\n    p99: z.nullable(z.number()).optional(),\n});\nexport function percentileThroughputCutoffsToJSON(percentileThroughputCutoffs) {\n    return JSON.stringify(PercentileThroughputCutoffs$outboundSchema.parse(percentileThroughputCutoffs));\n}\n//# sourceMappingURL=percentilethroughputcutoffs.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 04b7597c84f9\n */\nimport * as z from \"zod/v4\";\nimport { PercentileThroughputCutoffs$outboundSchema, } from \"./percentilethroughputcutoffs.js\";\n/** @internal */\nexport const PreferredMinThroughput$outboundSchema = z.union([z.number(), PercentileThroughputCutoffs$outboundSchema, z.any()]);\nexport function preferredMinThroughputToJSON(preferredMinThroughput) {\n    return JSON.stringify(PreferredMinThroughput$outboundSchema.parse(preferredMinThroughput));\n}\n//# sourceMappingURL=preferredminthroughput.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 89e536fb023a\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const ProviderName = {\n    AkashML: \"AkashML\",\n    Ai21: \"AI21\",\n    AionLabs: \"AionLabs\",\n    Alibaba: \"Alibaba\",\n    Ambient: \"Ambient\",\n    Baidu: \"Baidu\",\n    AmazonBedrock: \"Amazon Bedrock\",\n    AmazonNova: \"Amazon Nova\",\n    Anthropic: \"Anthropic\",\n    ArceeAI: \"Arcee AI\",\n    AtlasCloud: \"AtlasCloud\",\n    Avian: \"Avian\",\n    Azure: \"Azure\",\n    BaseTen: \"BaseTen\",\n    BytePlus: \"BytePlus\",\n    BlackForestLabs: \"Black Forest Labs\",\n    Cerebras: \"Cerebras\",\n    Chutes: \"Chutes\",\n    Cirrascale: \"Cirrascale\",\n    Clarifai: \"Clarifai\",\n    Cloudflare: \"Cloudflare\",\n    Cohere: \"Cohere\",\n    Crucible: \"Crucible\",\n    Crusoe: \"Crusoe\",\n    Darkbloom: \"Darkbloom\",\n    Decart: \"Decart\",\n    DeepInfra: \"DeepInfra\",\n    DeepSeek: \"DeepSeek\",\n    DekaLLM: \"DekaLLM\",\n    DigitalOcean: \"DigitalOcean\",\n    Featherless: \"Featherless\",\n    Fireworks: \"Fireworks\",\n    Friendli: \"Friendli\",\n    GMICloud: \"GMICloud\",\n    Google: \"Google\",\n    GoogleAIStudio: \"Google AI Studio\",\n    Groq: \"Groq\",\n    Inception: \"Inception\",\n    Inceptron: \"Inceptron\",\n    InferenceNet: \"InferenceNet\",\n    Ionstream: \"Ionstream\",\n    Infermatic: \"Infermatic\",\n    IoNet: \"Io Net\",\n    Inflection: \"Inflection\",\n    Liquid: \"Liquid\",\n    Mara: \"Mara\",\n    Mancer2: \"Mancer 2\",\n    Minimax: \"Minimax\",\n    ModelRun: \"ModelRun\",\n    Mistral: \"Mistral\",\n    Modular: \"Modular\",\n    MoonshotAI: \"Moonshot AI\",\n    Morph: \"Morph\",\n    NCompass: \"NCompass\",\n    Nebius: \"Nebius\",\n    NexAGI: \"Nex AGI\",\n    NextBit: \"NextBit\",\n    Novita: \"Novita\",\n    Nvidia: \"Nvidia\",\n    OpenAI: \"OpenAI\",\n    OpenInference: \"OpenInference\",\n    Parasail: \"Parasail\",\n    Poolside: \"Poolside\",\n    Perceptron: \"Perceptron\",\n    Perplexity: \"Perplexity\",\n    Phala: \"Phala\",\n    Recraft: \"Recraft\",\n    Reka: \"Reka\",\n    Relace: \"Relace\",\n    SambaNova: \"SambaNova\",\n    Seed: \"Seed\",\n    SiliconFlow: \"SiliconFlow\",\n    Sourceful: \"Sourceful\",\n    StepFun: \"StepFun\",\n    Stealth: \"Stealth\",\n    StreamLake: \"StreamLake\",\n    Switchpoint: \"Switchpoint\",\n    Together: \"Together\",\n    Upstage: \"Upstage\",\n    Venice: \"Venice\",\n    Wafer: \"Wafer\",\n    WandB: \"WandB\",\n    Xiaomi: \"Xiaomi\",\n    XAI: \"xAI\",\n    ZAi: \"Z.AI\",\n    FakeProvider: \"FakeProvider\",\n};\n/** @internal */\nexport const ProviderName$inboundSchema = openEnums.inboundSchema(ProviderName);\n/** @internal */\nexport const ProviderName$outboundSchema = openEnums.outboundSchema(ProviderName);\n//# sourceMappingURL=providername.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7d1e919d1ec3\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * The provider sorting strategy (price, throughput, latency)\n */\nexport const ProviderSort = {\n    Price: \"price\",\n    Throughput: \"throughput\",\n    Latency: \"latency\",\n    Exacto: \"exacto\",\n};\n/** @internal */\nexport const ProviderSort$outboundSchema = openEnums.outboundSchema(ProviderSort);\n//# sourceMappingURL=providersort.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1491329aae16\n */\nimport * as z from \"zod/v4\";\nimport * as openEnums from \"../types/enums.js\";\n/**\n * The provider sorting strategy (price, throughput, latency)\n */\nexport const By = {\n    Price: \"price\",\n    Throughput: \"throughput\",\n    Latency: \"latency\",\n    Exacto: \"exacto\",\n};\n/**\n * Partitioning strategy for sorting: \"model\" (default) groups endpoints by model before sorting (fallback models remain fallbacks), \"none\" sorts all endpoints together regardless of model.\n */\nexport const Partition = {\n    Model: \"model\",\n    None: \"none\",\n};\n/** @internal */\nexport const By$outboundSchema = openEnums\n    .outboundSchema(By);\n/** @internal */\nexport const Partition$outboundSchema = openEnums\n    .outboundSchema(Partition);\n/** @internal */\nexport const ProviderSortConfig$outboundSchema = z.object({\n    by: z.nullable(By$outboundSchema).optional(),\n    partition: z.nullable(Partition$outboundSchema).optional(),\n});\nexport function providerSortConfigToJSON(providerSortConfig) {\n    return JSON.stringify(ProviderSortConfig$outboundSchema.parse(providerSortConfig));\n}\n//# sourceMappingURL=providersortconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b28328f1822c\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const Quantization = {\n    Int4: \"int4\",\n    Int8: \"int8\",\n    Fp4: \"fp4\",\n    Fp6: \"fp6\",\n    Fp8: \"fp8\",\n    Fp16: \"fp16\",\n    Bf16: \"bf16\",\n    Fp32: \"fp32\",\n    Unknown: \"unknown\",\n};\n/** @internal */\nexport const Quantization$outboundSchema = openEnums.outboundSchema(Quantization);\n//# sourceMappingURL=quantization.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3a47295d7b91\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { PreferredMaxLatency$outboundSchema, } from \"./preferredmaxlatency.js\";\nimport { PreferredMinThroughput$outboundSchema, } from \"./preferredminthroughput.js\";\nimport { ProviderName$outboundSchema } from \"./providername.js\";\nimport { ProviderSort$outboundSchema } from \"./providersort.js\";\nimport { ProviderSortConfig$outboundSchema, } from \"./providersortconfig.js\";\nimport { Quantization$outboundSchema } from \"./quantization.js\";\n/**\n * Data collection setting. If no available model provider meets the requirement, your request will return an error.\n *\n * @remarks\n * - allow: (default) allow providers which store user data non-transiently and may train on it\n *\n * - deny: use only providers which do not collect user data.\n */\nexport const DataCollection = {\n    Deny: \"deny\",\n    Allow: \"allow\",\n};\n/** @internal */\nexport const DataCollection$outboundSchema = openEnums.outboundSchema(DataCollection);\n/** @internal */\nexport const Ignore$outboundSchema = z\n    .union([ProviderName$outboundSchema, z.string()]);\nexport function ignoreToJSON(ignore) {\n    return JSON.stringify(Ignore$outboundSchema.parse(ignore));\n}\n/** @internal */\nexport const MaxPrice$outboundSchema = z\n    .object({\n    audio: z.string().optional(),\n    completion: z.string().optional(),\n    image: z.string().optional(),\n    prompt: z.string().optional(),\n    request: z.string().optional(),\n});\nexport function maxPriceToJSON(maxPrice) {\n    return JSON.stringify(MaxPrice$outboundSchema.parse(maxPrice));\n}\n/** @internal */\nexport const Only$outboundSchema = z.union([\n    ProviderName$outboundSchema,\n    z.string(),\n]);\nexport function onlyToJSON(only) {\n    return JSON.stringify(Only$outboundSchema.parse(only));\n}\n/** @internal */\nexport const Order$outboundSchema = z.union([\n    ProviderName$outboundSchema,\n    z.string(),\n]);\nexport function orderToJSON(order) {\n    return JSON.stringify(Order$outboundSchema.parse(order));\n}\n/** @internal */\nexport const Sort$outboundSchema = z.union([\n    ProviderSort$outboundSchema,\n    ProviderSortConfig$outboundSchema,\n    z.any(),\n]);\nexport function sortToJSON(sort) {\n    return JSON.stringify(Sort$outboundSchema.parse(sort));\n}\n/** @internal */\nexport const ProviderPreferences$outboundSchema = z.object({\n    allowFallbacks: z.nullable(z.boolean()).optional(),\n    dataCollection: z.nullable(DataCollection$outboundSchema).optional(),\n    enforceDistillableText: z.nullable(z.boolean()).optional(),\n    ignore: z.nullable(z.array(z.union([ProviderName$outboundSchema, z.string()]))).optional(),\n    maxPrice: z.lazy(() => MaxPrice$outboundSchema).optional(),\n    only: z.nullable(z.array(z.union([ProviderName$outboundSchema, z.string()])))\n        .optional(),\n    order: z.nullable(z.array(z.union([ProviderName$outboundSchema, z.string()])))\n        .optional(),\n    preferredMaxLatency: z.nullable(PreferredMaxLatency$outboundSchema)\n        .optional(),\n    preferredMinThroughput: z.nullable(PreferredMinThroughput$outboundSchema)\n        .optional(),\n    quantizations: z.nullable(z.array(Quantization$outboundSchema)).optional(),\n    requireParameters: z.nullable(z.boolean()).optional(),\n    sort: z.nullable(z.union([\n        ProviderSort$outboundSchema,\n        ProviderSortConfig$outboundSchema,\n        z.any(),\n    ])).optional(),\n    zdr: z.nullable(z.boolean()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        allowFallbacks: \"allow_fallbacks\",\n        dataCollection: \"data_collection\",\n        enforceDistillableText: \"enforce_distillable_text\",\n        maxPrice: \"max_price\",\n        preferredMaxLatency: \"preferred_max_latency\",\n        preferredMinThroughput: \"preferred_min_throughput\",\n        requireParameters: \"require_parameters\",\n    });\n});\nexport function providerPreferencesToJSON(providerPreferences) {\n    return JSON.stringify(ProviderPreferences$outboundSchema.parse(providerPreferences));\n}\n//# sourceMappingURL=providerpreferences.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 622c12ba88e2\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const ResponseHealingPlugin$outboundSchema = z.object({\n    enabled: z.boolean().optional(),\n    id: z.literal(\"response-healing\"),\n});\nexport function responseHealingPluginToJSON(responseHealingPlugin) {\n    return JSON.stringify(ResponseHealingPlugin$outboundSchema.parse(responseHealingPlugin));\n}\n//# sourceMappingURL=responsehealingplugin.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1485b23afc17\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const StopServerToolsWhenFinishReasonIs$outboundSchema = z.object({\n    reason: z.string(),\n    type: z.literal(\"finish_reason_is\"),\n});\nexport function stopServerToolsWhenFinishReasonIsToJSON(stopServerToolsWhenFinishReasonIs) {\n    return JSON.stringify(StopServerToolsWhenFinishReasonIs$outboundSchema.parse(stopServerToolsWhenFinishReasonIs));\n}\n//# sourceMappingURL=stopservertoolswhenfinishreasonis.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: fc798259778d\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const StopServerToolsWhenHasToolCall$outboundSchema = z.object({\n    toolName: z.string(),\n    type: z.literal(\"has_tool_call\"),\n}).transform((v) => {\n    return remap$(v, {\n        toolName: \"tool_name\",\n    });\n});\nexport function stopServerToolsWhenHasToolCallToJSON(stopServerToolsWhenHasToolCall) {\n    return JSON.stringify(StopServerToolsWhenHasToolCall$outboundSchema.parse(stopServerToolsWhenHasToolCall));\n}\n//# sourceMappingURL=stopservertoolswhenhastoolcall.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 03a3b8b239ae\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const StopServerToolsWhenMaxCost$outboundSchema = z.object({\n    maxCostInDollars: z.number(),\n    type: z.literal(\"max_cost\"),\n}).transform((v) => {\n    return remap$(v, {\n        maxCostInDollars: \"max_cost_in_dollars\",\n    });\n});\nexport function stopServerToolsWhenMaxCostToJSON(stopServerToolsWhenMaxCost) {\n    return JSON.stringify(StopServerToolsWhenMaxCost$outboundSchema.parse(stopServerToolsWhenMaxCost));\n}\n//# sourceMappingURL=stopservertoolswhenmaxcost.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 793b741fab9b\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const StopServerToolsWhenMaxTokensUsed$outboundSchema = z.object({\n    maxTokens: z.int(),\n    type: z.literal(\"max_tokens_used\"),\n}).transform((v) => {\n    return remap$(v, {\n        maxTokens: \"max_tokens\",\n    });\n});\nexport function stopServerToolsWhenMaxTokensUsedToJSON(stopServerToolsWhenMaxTokensUsed) {\n    return JSON.stringify(StopServerToolsWhenMaxTokensUsed$outboundSchema.parse(stopServerToolsWhenMaxTokensUsed));\n}\n//# sourceMappingURL=stopservertoolswhenmaxtokensused.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e23bd8c13404\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const StopServerToolsWhenStepCountIs$outboundSchema = z.object({\n    stepCount: z.int(),\n    type: z.literal(\"step_count_is\"),\n}).transform((v) => {\n    return remap$(v, {\n        stepCount: \"step_count\",\n    });\n});\nexport function stopServerToolsWhenStepCountIsToJSON(stopServerToolsWhenStepCountIs) {\n    return JSON.stringify(StopServerToolsWhenStepCountIs$outboundSchema.parse(stopServerToolsWhenStepCountIs));\n}\n//# sourceMappingURL=stopservertoolswhenstepcountis.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3c90e3993bad\n */\nimport * as z from \"zod/v4\";\nimport { StopServerToolsWhenFinishReasonIs$outboundSchema, } from \"./stopservertoolswhenfinishreasonis.js\";\nimport { StopServerToolsWhenHasToolCall$outboundSchema, } from \"./stopservertoolswhenhastoolcall.js\";\nimport { StopServerToolsWhenMaxCost$outboundSchema, } from \"./stopservertoolswhenmaxcost.js\";\nimport { StopServerToolsWhenMaxTokensUsed$outboundSchema, } from \"./stopservertoolswhenmaxtokensused.js\";\nimport { StopServerToolsWhenStepCountIs$outboundSchema, } from \"./stopservertoolswhenstepcountis.js\";\n/** @internal */\nexport const StopServerToolsWhenCondition$outboundSchema = z.union([\n    StopServerToolsWhenFinishReasonIs$outboundSchema,\n    StopServerToolsWhenHasToolCall$outboundSchema,\n    StopServerToolsWhenMaxCost$outboundSchema,\n    StopServerToolsWhenMaxTokensUsed$outboundSchema,\n    StopServerToolsWhenStepCountIs$outboundSchema,\n]);\nexport function stopServerToolsWhenConditionToJSON(stopServerToolsWhenCondition) {\n    return JSON.stringify(StopServerToolsWhenCondition$outboundSchema.parse(stopServerToolsWhenCondition));\n}\n//# sourceMappingURL=stopservertoolswhencondition.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 50ce6e8a7bcd\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const TraceConfig$outboundSchema = z.object({\n    generationName: z.string().optional(),\n    parentSpanId: z.string().optional(),\n    spanName: z.string().optional(),\n    traceId: z.string().optional(),\n    traceName: z.string().optional(),\n    additionalProperties: z.record(z.string(), z.nullable(z.any())).optional(),\n}).transform((v) => {\n    return {\n        ...v.additionalProperties,\n        ...remap$(v, {\n            generationName: \"generation_name\",\n            parentSpanId: \"parent_span_id\",\n            spanName: \"span_name\",\n            traceId: \"trace_id\",\n            traceName: \"trace_name\",\n            additionalProperties: null,\n        }),\n    };\n});\nexport function traceConfigToJSON(traceConfig) {\n    return JSON.stringify(TraceConfig$outboundSchema.parse(traceConfig));\n}\n//# sourceMappingURL=traceconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4bae9e5fd2fa\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const WebFetchPlugin$outboundSchema = z.object({\n    allowedDomains: z.array(z.string()).optional(),\n    blockedDomains: z.array(z.string()).optional(),\n    id: z.literal(\"web-fetch\"),\n    maxContentTokens: z.int().optional(),\n    maxUses: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        allowedDomains: \"allowed_domains\",\n        blockedDomains: \"blocked_domains\",\n        maxContentTokens: \"max_content_tokens\",\n        maxUses: \"max_uses\",\n    });\n});\nexport function webFetchPluginToJSON(webFetchPlugin) {\n    return JSON.stringify(WebFetchPlugin$outboundSchema.parse(webFetchPlugin));\n}\n//# sourceMappingURL=webfetchplugin.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 49b0152fd59a\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * The search engine to use for web search.\n */\nexport const WebSearchEngine = {\n    Native: \"native\",\n    Exa: \"exa\",\n    Firecrawl: \"firecrawl\",\n    Parallel: \"parallel\",\n    Perplexity: \"perplexity\",\n};\n/** @internal */\nexport const WebSearchEngine$outboundSchema = openEnums.outboundSchema(WebSearchEngine);\n//# sourceMappingURL=websearchengine.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: fa32581277e2\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { WebSearchEngine$outboundSchema, } from \"./websearchengine.js\";\nexport const WebSearchPluginType = {\n    Approximate: \"approximate\",\n};\n/** @internal */\nexport const WebSearchPluginType$outboundSchema = z.enum(WebSearchPluginType);\n/** @internal */\nexport const UserLocation$outboundSchema = z.object({\n    city: z.nullable(z.string()).optional(),\n    country: z.nullable(z.string()).optional(),\n    region: z.nullable(z.string()).optional(),\n    timezone: z.nullable(z.string()).optional(),\n    type: WebSearchPluginType$outboundSchema,\n});\nexport function userLocationToJSON(userLocation) {\n    return JSON.stringify(UserLocation$outboundSchema.parse(userLocation));\n}\n/** @internal */\nexport const WebSearchPlugin$outboundSchema = z.object({\n    enabled: z.boolean().optional(),\n    engine: WebSearchEngine$outboundSchema.optional(),\n    excludeDomains: z.array(z.string()).optional(),\n    id: z.literal(\"web\"),\n    includeDomains: z.array(z.string()).optional(),\n    maxResults: z.int().optional(),\n    maxUses: z.int().optional(),\n    searchPrompt: z.string().optional(),\n    userLocation: z.nullable(z.lazy(() => UserLocation$outboundSchema))\n        .optional(),\n}).transform((v) => {\n    return remap$(v, {\n        excludeDomains: \"exclude_domains\",\n        includeDomains: \"include_domains\",\n        maxResults: \"max_results\",\n        maxUses: \"max_uses\",\n        searchPrompt: \"search_prompt\",\n        userLocation: \"user_location\",\n    });\n});\nexport function webSearchPluginToJSON(webSearchPlugin) {\n    return JSON.stringify(WebSearchPlugin$outboundSchema.parse(webSearchPlugin));\n}\n//# sourceMappingURL=websearchplugin.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5d2646ed8dcf\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { AnthropicCacheControlDirective$outboundSchema, } from \"./anthropiccachecontroldirective.js\";\nimport { AutoRouterPlugin$outboundSchema, } from \"./autorouterplugin.js\";\nimport { ChatDebugOptions$outboundSchema, } from \"./chatdebugoptions.js\";\nimport { ChatFormatGrammarConfig$outboundSchema, } from \"./chatformatgrammarconfig.js\";\nimport { ChatFormatJsonSchemaConfig$outboundSchema, } from \"./chatformatjsonschemaconfig.js\";\nimport { ChatFormatPythonConfig$outboundSchema, } from \"./chatformatpythonconfig.js\";\nimport { ChatFormatTextConfig$outboundSchema, } from \"./chatformattextconfig.js\";\nimport { ChatFunctionTool$outboundSchema, } from \"./chatfunctiontool.js\";\nimport { ChatMessages$outboundSchema, } from \"./chatmessages.js\";\nimport { ChatReasoningSummaryVerbosityEnum$outboundSchema, } from \"./chatreasoningsummaryverbosityenum.js\";\nimport { ChatStreamOptions$outboundSchema, } from \"./chatstreamoptions.js\";\nimport { ChatToolChoice$outboundSchema, } from \"./chattoolchoice.js\";\nimport { ContextCompressionPlugin$outboundSchema, } from \"./contextcompressionplugin.js\";\nimport { FileParserPlugin$outboundSchema, } from \"./fileparserplugin.js\";\nimport { FormatJsonObjectConfig$outboundSchema, } from \"./formatjsonobjectconfig.js\";\nimport { FusionPlugin$outboundSchema, } from \"./fusionplugin.js\";\nimport { ImageConfig$outboundSchema, } from \"./imageconfig.js\";\nimport { ModerationPlugin$outboundSchema, } from \"./moderationplugin.js\";\nimport { ParetoRouterPlugin$outboundSchema, } from \"./paretorouterplugin.js\";\nimport { ProviderPreferences$outboundSchema, } from \"./providerpreferences.js\";\nimport { ResponseHealingPlugin$outboundSchema, } from \"./responsehealingplugin.js\";\nimport { StopServerToolsWhenCondition$outboundSchema, } from \"./stopservertoolswhencondition.js\";\nimport { TraceConfig$outboundSchema, } from \"./traceconfig.js\";\nimport { WebFetchPlugin$outboundSchema, } from \"./webfetchplugin.js\";\nimport { WebSearchPlugin$outboundSchema, } from \"./websearchplugin.js\";\nexport const Modality = {\n    Text: \"text\",\n    Image: \"image\",\n    Audio: \"audio\",\n};\n/**\n * Constrains effort on reasoning for reasoning models\n */\nexport const ChatRequestEffort = {\n    Xhigh: \"xhigh\",\n    High: \"high\",\n    Medium: \"medium\",\n    Low: \"low\",\n    Minimal: \"minimal\",\n    None: \"none\",\n};\n/**\n * Shorthand for setting reasoning effort. Equivalent to setting reasoning.effort. Cannot be used simultaneously with reasoning.effort if they differ.\n */\nexport const ChatRequestReasoningEffort = {\n    Xhigh: \"xhigh\",\n    High: \"high\",\n    Medium: \"medium\",\n    Low: \"low\",\n    Minimal: \"minimal\",\n    None: \"none\",\n};\n/**\n * The service tier to use for processing this request.\n */\nexport const ChatRequestServiceTier = {\n    Auto: \"auto\",\n    Default: \"default\",\n    Flex: \"flex\",\n    Priority: \"priority\",\n    Scale: \"scale\",\n};\n/** @internal */\nexport const Modality$outboundSchema = openEnums\n    .outboundSchema(Modality);\n/** @internal */\nexport const ChatRequestPlugin$outboundSchema = z.union([\n    AutoRouterPlugin$outboundSchema,\n    ContextCompressionPlugin$outboundSchema,\n    FileParserPlugin$outboundSchema,\n    FusionPlugin$outboundSchema,\n    ModerationPlugin$outboundSchema,\n    ParetoRouterPlugin$outboundSchema,\n    ResponseHealingPlugin$outboundSchema,\n    WebSearchPlugin$outboundSchema,\n    WebFetchPlugin$outboundSchema,\n]);\nexport function chatRequestPluginToJSON(chatRequestPlugin) {\n    return JSON.stringify(ChatRequestPlugin$outboundSchema.parse(chatRequestPlugin));\n}\n/** @internal */\nexport const ChatRequestEffort$outboundSchema = openEnums.outboundSchema(ChatRequestEffort);\n/** @internal */\nexport const ChatRequestReasoning$outboundSchema = z.object({\n    effort: z.nullable(ChatRequestEffort$outboundSchema).optional(),\n    summary: z.nullable(ChatReasoningSummaryVerbosityEnum$outboundSchema)\n        .optional(),\n});\nexport function chatRequestReasoningToJSON(chatRequestReasoning) {\n    return JSON.stringify(ChatRequestReasoning$outboundSchema.parse(chatRequestReasoning));\n}\n/** @internal */\nexport const ChatRequestReasoningEffort$outboundSchema = openEnums.outboundSchema(ChatRequestReasoningEffort);\n/** @internal */\nexport const ResponseFormat$outboundSchema = z.union([\n    ChatFormatGrammarConfig$outboundSchema,\n    FormatJsonObjectConfig$outboundSchema,\n    ChatFormatJsonSchemaConfig$outboundSchema,\n    ChatFormatPythonConfig$outboundSchema,\n    ChatFormatTextConfig$outboundSchema,\n]);\nexport function responseFormatToJSON(responseFormat) {\n    return JSON.stringify(ResponseFormat$outboundSchema.parse(responseFormat));\n}\n/** @internal */\nexport const ChatRequestServiceTier$outboundSchema = openEnums.outboundSchema(ChatRequestServiceTier);\n/** @internal */\nexport const Stop$outboundSchema = z.union([\n    z.string(),\n    z.array(z.string()),\n    z.any(),\n]);\nexport function stopToJSON(stop) {\n    return JSON.stringify(Stop$outboundSchema.parse(stop));\n}\n/** @internal */\nexport const ChatRequest$outboundSchema = z.object({\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    debug: ChatDebugOptions$outboundSchema.optional(),\n    frequencyPenalty: z.nullable(z.number()).optional(),\n    imageConfig: z.record(z.string(), ImageConfig$outboundSchema).optional(),\n    logitBias: z.nullable(z.record(z.string(), z.number())).optional(),\n    logprobs: z.nullable(z.boolean()).optional(),\n    maxCompletionTokens: z.nullable(z.int()).optional(),\n    maxTokens: z.nullable(z.int()).optional(),\n    messages: z.array(ChatMessages$outboundSchema),\n    metadata: z.record(z.string(), z.string()).optional(),\n    minP: z.nullable(z.number()).optional(),\n    modalities: z.array(Modality$outboundSchema).optional(),\n    model: z.string().optional(),\n    models: z.array(z.string()).optional(),\n    parallelToolCalls: z.nullable(z.boolean()).optional(),\n    plugins: z.array(z.union([\n        AutoRouterPlugin$outboundSchema,\n        ContextCompressionPlugin$outboundSchema,\n        FileParserPlugin$outboundSchema,\n        FusionPlugin$outboundSchema,\n        ModerationPlugin$outboundSchema,\n        ParetoRouterPlugin$outboundSchema,\n        ResponseHealingPlugin$outboundSchema,\n        WebSearchPlugin$outboundSchema,\n        WebFetchPlugin$outboundSchema,\n    ])).optional(),\n    presencePenalty: z.nullable(z.number()).optional(),\n    provider: z.nullable(ProviderPreferences$outboundSchema).optional(),\n    reasoning: z.lazy(() => ChatRequestReasoning$outboundSchema).optional(),\n    reasoningEffort: z.nullable(ChatRequestReasoningEffort$outboundSchema)\n        .optional(),\n    repetitionPenalty: z.nullable(z.number()).optional(),\n    responseFormat: z.union([\n        ChatFormatGrammarConfig$outboundSchema,\n        FormatJsonObjectConfig$outboundSchema,\n        ChatFormatJsonSchemaConfig$outboundSchema,\n        ChatFormatPythonConfig$outboundSchema,\n        ChatFormatTextConfig$outboundSchema,\n    ]).optional(),\n    seed: z.nullable(z.int()).optional(),\n    serviceTier: z.nullable(ChatRequestServiceTier$outboundSchema).optional(),\n    sessionId: z.string().optional(),\n    stop: z.nullable(z.union([z.string(), z.array(z.string()), z.any()]))\n        .optional(),\n    stopServerToolsWhen: z.array(StopServerToolsWhenCondition$outboundSchema)\n        .optional(),\n    stream: z.boolean().default(false),\n    streamOptions: z.nullable(ChatStreamOptions$outboundSchema).optional(),\n    temperature: z.nullable(z.number()).optional(),\n    toolChoice: ChatToolChoice$outboundSchema.optional(),\n    tools: z.array(ChatFunctionTool$outboundSchema).optional(),\n    topA: z.nullable(z.number()).optional(),\n    topK: z.nullable(z.int()).optional(),\n    topLogprobs: z.nullable(z.int()).optional(),\n    topP: z.nullable(z.number()).optional(),\n    trace: TraceConfig$outboundSchema.optional(),\n    user: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n        frequencyPenalty: \"frequency_penalty\",\n        imageConfig: \"image_config\",\n        logitBias: \"logit_bias\",\n        maxCompletionTokens: \"max_completion_tokens\",\n        maxTokens: \"max_tokens\",\n        minP: \"min_p\",\n        parallelToolCalls: \"parallel_tool_calls\",\n        presencePenalty: \"presence_penalty\",\n        reasoningEffort: \"reasoning_effort\",\n        repetitionPenalty: \"repetition_penalty\",\n        responseFormat: \"response_format\",\n        serviceTier: \"service_tier\",\n        sessionId: \"session_id\",\n        stopServerToolsWhen: \"stop_server_tools_when\",\n        streamOptions: \"stream_options\",\n        toolChoice: \"tool_choice\",\n        topA: \"top_a\",\n        topK: \"top_k\",\n        topLogprobs: \"top_logprobs\",\n        topP: \"top_p\",\n    });\n});\nexport function chatRequestToJSON(chatRequest) {\n    return JSON.stringify(ChatRequest$outboundSchema.parse(chatRequest));\n}\n//# sourceMappingURL=chatrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a9138bf3f716\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const CostDetails$inboundSchema = z\n    .object({\n    upstream_inference_completions_cost: z.number(),\n    upstream_inference_cost: z.nullable(z.number()).optional(),\n    upstream_inference_prompt_cost: z.number(),\n}).transform((v) => {\n    return remap$(v, {\n        \"upstream_inference_completions_cost\": \"upstreamInferenceCompletionsCost\",\n        \"upstream_inference_cost\": \"upstreamInferenceCost\",\n        \"upstream_inference_prompt_cost\": \"upstreamInferencePromptCost\",\n    });\n});\nexport function costDetailsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CostDetails$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CostDetails' from JSON`);\n}\n//# sourceMappingURL=costdetails.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1e677d1ed4fc\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { CostDetails$inboundSchema } from \"./costdetails.js\";\n/** @internal */\nexport const CompletionTokensDetails$inboundSchema = z.object({\n    accepted_prediction_tokens: z.nullable(z.int()).optional(),\n    audio_tokens: z.nullable(z.int()).optional(),\n    reasoning_tokens: z.nullable(z.int()).optional(),\n    rejected_prediction_tokens: z.nullable(z.int()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"accepted_prediction_tokens\": \"acceptedPredictionTokens\",\n        \"audio_tokens\": \"audioTokens\",\n        \"reasoning_tokens\": \"reasoningTokens\",\n        \"rejected_prediction_tokens\": \"rejectedPredictionTokens\",\n    });\n});\nexport function completionTokensDetailsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CompletionTokensDetails$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CompletionTokensDetails' from JSON`);\n}\n/** @internal */\nexport const PromptTokensDetails$inboundSchema = z.object({\n    audio_tokens: z.int().optional(),\n    cache_write_tokens: z.int().optional(),\n    cached_tokens: z.int().optional(),\n    video_tokens: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"audio_tokens\": \"audioTokens\",\n        \"cache_write_tokens\": \"cacheWriteTokens\",\n        \"cached_tokens\": \"cachedTokens\",\n        \"video_tokens\": \"videoTokens\",\n    });\n});\nexport function promptTokensDetailsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => PromptTokensDetails$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'PromptTokensDetails' from JSON`);\n}\n/** @internal */\nexport const ChatUsage$inboundSchema = z.object({\n    completion_tokens: z.int(),\n    completion_tokens_details: z.nullable(z.lazy(() => CompletionTokensDetails$inboundSchema)).optional(),\n    cost: z.nullable(z.number()).optional(),\n    cost_details: z.nullable(CostDetails$inboundSchema).optional(),\n    is_byok: z.boolean().optional(),\n    prompt_tokens: z.int(),\n    prompt_tokens_details: z.nullable(z.lazy(() => PromptTokensDetails$inboundSchema)).optional(),\n    total_tokens: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"completion_tokens\": \"completionTokens\",\n        \"completion_tokens_details\": \"completionTokensDetails\",\n        \"cost_details\": \"costDetails\",\n        \"is_byok\": \"isByok\",\n        \"prompt_tokens\": \"promptTokens\",\n        \"prompt_tokens_details\": \"promptTokensDetails\",\n        \"total_tokens\": \"totalTokens\",\n    });\n});\nexport function chatUsageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatUsage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatUsage' from JSON`);\n}\n//# sourceMappingURL=chatusage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 33effd05ad97\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const EndpointInfo$inboundSchema = z\n    .object({\n    model: z.string(),\n    provider: z.string(),\n    selected: z.boolean(),\n});\nexport function endpointInfoFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => EndpointInfo$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'EndpointInfo' from JSON`);\n}\n//# sourceMappingURL=endpointinfo.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 43bec63453bf\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { EndpointInfo$inboundSchema } from \"./endpointinfo.js\";\n/** @internal */\nexport const EndpointsMetadata$inboundSchema = z.object({\n    available: z.array(EndpointInfo$inboundSchema),\n    total: z.int(),\n});\nexport function endpointsMetadataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => EndpointsMetadata$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'EndpointsMetadata' from JSON`);\n}\n//# sourceMappingURL=endpointsmetadata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5e7558516b45\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Categorical kind of a pipeline stage. Multiple plugins can share a type (e.g. all guardrail-level plugins emit `guardrail`); the `name` field disambiguates which plugin emitted it.\n */\nexport const PipelineStageType = {\n    Guardrail: \"guardrail\",\n    Plugin: \"plugin\",\n    ServerTools: \"server_tools\",\n    ResponseHealing: \"response_healing\",\n    ContextCompression: \"context_compression\",\n};\n/** @internal */\nexport const PipelineStageType$inboundSchema = openEnums.inboundSchema(PipelineStageType);\n//# sourceMappingURL=pipelinestagetype.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d737d34295bb\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { PipelineStageType$inboundSchema, } from \"./pipelinestagetype.js\";\n/** @internal */\nexport const PipelineStage$inboundSchema = z\n    .object({\n    cost_usd: z.nullable(z.number()).optional(),\n    data: z.record(z.string(), z.nullable(z.any())).optional(),\n    guardrail_id: z.string().optional(),\n    guardrail_scope: z.string().optional(),\n    name: z.string(),\n    summary: z.string().optional(),\n    type: PipelineStageType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"cost_usd\": \"costUsd\",\n        \"guardrail_id\": \"guardrailId\",\n        \"guardrail_scope\": \"guardrailScope\",\n    });\n});\nexport function pipelineStageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => PipelineStage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'PipelineStage' from JSON`);\n}\n//# sourceMappingURL=pipelinestage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 353df41da8e5\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const RouterAttempt$inboundSchema = z\n    .object({\n    model: z.string(),\n    provider: z.string(),\n    status: z.int(),\n});\nexport function routerAttemptFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => RouterAttempt$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'RouterAttempt' from JSON`);\n}\n//# sourceMappingURL=routerattempt.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3b3282458763\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { collectExtraKeys as collectExtraKeys$, safeParse, } from \"../lib/schemas.js\";\n/** @internal */\nexport const RouterParams$inboundSchema = collectExtraKeys$(z.object({\n    quality_floor: z.number().optional(),\n    throughput_floor: z.number().optional(),\n    version_group: z.string().optional(),\n}).catchall(z.any()), \"additionalProperties\", true).transform((v) => {\n    return remap$(v, {\n        \"quality_floor\": \"qualityFloor\",\n        \"throughput_floor\": \"throughputFloor\",\n        \"version_group\": \"versionGroup\",\n    });\n});\nexport function routerParamsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => RouterParams$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'RouterParams' from JSON`);\n}\n//# sourceMappingURL=routerparams.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 40bcbedca097\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const RoutingStrategy = {\n    Direct: \"direct\",\n    Auto: \"auto\",\n    Free: \"free\",\n    Latest: \"latest\",\n    Alias: \"alias\",\n    Fallback: \"fallback\",\n    Pareto: \"pareto\",\n    Bodybuilder: \"bodybuilder\",\n    Fusion: \"fusion\",\n};\n/** @internal */\nexport const RoutingStrategy$inboundSchema = openEnums.inboundSchema(RoutingStrategy);\n//# sourceMappingURL=routingstrategy.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 8a5688777dfa\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { EndpointsMetadata$inboundSchema, } from \"./endpointsmetadata.js\";\nimport { PipelineStage$inboundSchema } from \"./pipelinestage.js\";\nimport { RouterAttempt$inboundSchema } from \"./routerattempt.js\";\nimport { RouterParams$inboundSchema } from \"./routerparams.js\";\nimport { RoutingStrategy$inboundSchema, } from \"./routingstrategy.js\";\n/** @internal */\nexport const OpenRouterMetadata$inboundSchema = z.object({\n    attempt: z.int(),\n    attempts: z.array(RouterAttempt$inboundSchema).optional(),\n    endpoints: EndpointsMetadata$inboundSchema,\n    is_byok: z.boolean(),\n    params: RouterParams$inboundSchema.optional(),\n    pipeline: z.array(PipelineStage$inboundSchema).optional(),\n    region: z.nullable(z.string()),\n    requested: z.string(),\n    strategy: RoutingStrategy$inboundSchema,\n    summary: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"is_byok\": \"isByok\",\n    });\n});\nexport function openRouterMetadataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenRouterMetadata$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenRouterMetadata' from JSON`);\n}\n//# sourceMappingURL=openroutermetadata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: afefd8aadd09\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ChatChoice$inboundSchema } from \"./chatchoice.js\";\nimport { ChatUsage$inboundSchema } from \"./chatusage.js\";\nimport { OpenRouterMetadata$inboundSchema, } from \"./openroutermetadata.js\";\nexport const ChatResultObject = {\n    ChatCompletion: \"chat.completion\",\n};\n/** @internal */\nexport const ChatResultObject$inboundSchema = z.enum(ChatResultObject);\n/** @internal */\nexport const ChatResult$inboundSchema = z\n    .object({\n    choices: z.array(ChatChoice$inboundSchema),\n    created: z.int(),\n    id: z.string(),\n    model: z.string(),\n    object: ChatResultObject$inboundSchema,\n    openrouter_metadata: OpenRouterMetadata$inboundSchema.optional(),\n    service_tier: z.nullable(z.string()).optional(),\n    system_fingerprint: z.nullable(z.string()),\n    usage: ChatUsage$inboundSchema.optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"service_tier\": \"serviceTier\",\n        \"system_fingerprint\": \"systemFingerprint\",\n    });\n});\nexport function chatResultFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatResult$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatResult' from JSON`);\n}\n//# sourceMappingURL=chatresult.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: bad96c4eeaf7\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/**\n * Tool call type\n */\nexport const ChatStreamToolCallType = {\n    Function: \"function\",\n};\n/** @internal */\nexport const ChatStreamToolCallFunction$inboundSchema = z.object({\n    arguments: z.string().optional(),\n    name: z.string().optional(),\n});\nexport function chatStreamToolCallFunctionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatStreamToolCallFunction$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatStreamToolCallFunction' from JSON`);\n}\n/** @internal */\nexport const ChatStreamToolCallType$inboundSchema = z.enum(ChatStreamToolCallType);\n/** @internal */\nexport const ChatStreamToolCall$inboundSchema = z.object({\n    function: z.lazy(() => ChatStreamToolCallFunction$inboundSchema).optional(),\n    id: z.string().optional(),\n    index: z.int(),\n    type: ChatStreamToolCallType$inboundSchema.optional(),\n});\nexport function chatStreamToolCallFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatStreamToolCall$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatStreamToolCall' from JSON`);\n}\n//# sourceMappingURL=chatstreamtoolcall.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 74a4be948d5f\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ChatAudioOutput$inboundSchema, } from \"./chataudiooutput.js\";\nimport { ChatStreamToolCall$inboundSchema, } from \"./chatstreamtoolcall.js\";\nimport { ReasoningDetailUnion$inboundSchema, } from \"./reasoningdetailunion.js\";\n/**\n * The role of the message author\n */\nexport const ChatStreamDeltaRole = {\n    Assistant: \"assistant\",\n};\n/** @internal */\nexport const ChatStreamDeltaRole$inboundSchema = z.enum(ChatStreamDeltaRole);\n/** @internal */\nexport const ChatStreamDelta$inboundSchema = z.object({\n    audio: ChatAudioOutput$inboundSchema.optional(),\n    content: z.nullable(z.string()).optional(),\n    reasoning: z.nullable(z.string()).optional(),\n    reasoning_details: z.array(ReasoningDetailUnion$inboundSchema).optional(),\n    refusal: z.nullable(z.string()).optional(),\n    role: ChatStreamDeltaRole$inboundSchema.optional(),\n    tool_calls: z.array(ChatStreamToolCall$inboundSchema).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"reasoning_details\": \"reasoningDetails\",\n        \"tool_calls\": \"toolCalls\",\n    });\n});\nexport function chatStreamDeltaFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatStreamDelta$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatStreamDelta' from JSON`);\n}\n//# sourceMappingURL=chatstreamdelta.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3747d92a0ba4\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ChatFinishReasonEnum$inboundSchema, } from \"./chatfinishreasonenum.js\";\nimport { ChatStreamDelta$inboundSchema, } from \"./chatstreamdelta.js\";\nimport { ChatTokenLogprobs$inboundSchema, } from \"./chattokenlogprobs.js\";\n/** @internal */\nexport const ChatStreamChoice$inboundSchema = z.object({\n    delta: ChatStreamDelta$inboundSchema,\n    finish_reason: z.nullable(ChatFinishReasonEnum$inboundSchema),\n    index: z.int(),\n    logprobs: z.nullable(ChatTokenLogprobs$inboundSchema).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"finish_reason\": \"finishReason\",\n    });\n});\nexport function chatStreamChoiceFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatStreamChoice$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatStreamChoice' from JSON`);\n}\n//# sourceMappingURL=chatstreamchoice.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 361f940e91e4\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ChatStreamChoice$inboundSchema, } from \"./chatstreamchoice.js\";\nimport { ChatUsage$inboundSchema } from \"./chatusage.js\";\nimport { OpenRouterMetadata$inboundSchema, } from \"./openroutermetadata.js\";\nexport const ChatStreamChunkObject = {\n    ChatCompletionChunk: \"chat.completion.chunk\",\n};\n/** @internal */\nexport const ErrorT$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n});\nexport function errorFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ErrorT$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ErrorT' from JSON`);\n}\n/** @internal */\nexport const ChatStreamChunkObject$inboundSchema = z.enum(ChatStreamChunkObject);\n/** @internal */\nexport const ChatStreamChunk$inboundSchema = z.object({\n    choices: z.array(ChatStreamChoice$inboundSchema),\n    created: z.int(),\n    error: z.lazy(() => ErrorT$inboundSchema).optional(),\n    id: z.string(),\n    model: z.string(),\n    object: ChatStreamChunkObject$inboundSchema,\n    openrouter_metadata: OpenRouterMetadata$inboundSchema.optional(),\n    service_tier: z.nullable(z.string()).optional(),\n    system_fingerprint: z.string().optional(),\n    usage: ChatUsage$inboundSchema.optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"service_tier\": \"serviceTier\",\n        \"system_fingerprint\": \"systemFingerprint\",\n    });\n});\nexport function chatStreamChunkFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatStreamChunk$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatStreamChunk' from JSON`);\n}\n//# sourceMappingURL=chatstreamchunk.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: bf6c7ab2065f\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ChatStreamChunk$inboundSchema, } from \"./chatstreamchunk.js\";\n/** @internal */\nexport const ChatStreamingResponse$inboundSchema = z.object({\n    data: z.string().transform((v, ctx) => {\n        try {\n            return JSON.parse(v);\n        }\n        catch (err) {\n            ctx.addIssue({\n                input: v,\n                code: \"custom\",\n                message: `malformed json: ${err}`,\n            });\n            return z.NEVER;\n        }\n    }).pipe(ChatStreamChunk$inboundSchema),\n});\nexport function chatStreamingResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ChatStreamingResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ChatStreamingResponse' from JSON`);\n}\n//# sourceMappingURL=chatstreamingresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 493e614d6c34\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const MemoryLimit = {\n    Oneg: \"1g\",\n    Fourg: \"4g\",\n    Sixteeng: \"16g\",\n    SixtyFourg: \"64g\",\n};\nexport const ContainerType = {\n    Auto: \"auto\",\n};\n/** @internal */\nexport const MemoryLimit$inboundSchema = openEnums.inboundSchema(MemoryLimit);\n/** @internal */\nexport const MemoryLimit$outboundSchema = openEnums.outboundSchema(MemoryLimit);\n/** @internal */\nexport const ContainerType$inboundSchema = z\n    .enum(ContainerType);\n/** @internal */\nexport const ContainerType$outboundSchema = ContainerType$inboundSchema;\n/** @internal */\nexport const ContainerAuto$inboundSchema = z\n    .object({\n    file_ids: z.array(z.string()).optional(),\n    memory_limit: z.nullable(MemoryLimit$inboundSchema).optional(),\n    type: ContainerType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"file_ids\": \"fileIds\",\n        \"memory_limit\": \"memoryLimit\",\n    });\n});\n/** @internal */\nexport const ContainerAuto$outboundSchema = z.object({\n    fileIds: z.array(z.string()).optional(),\n    memoryLimit: z.nullable(MemoryLimit$outboundSchema).optional(),\n    type: ContainerType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        fileIds: \"file_ids\",\n        memoryLimit: \"memory_limit\",\n    });\n});\nexport function containerAutoToJSON(containerAuto) {\n    return JSON.stringify(ContainerAuto$outboundSchema.parse(containerAuto));\n}\nexport function containerAutoFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ContainerAuto$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ContainerAuto' from JSON`);\n}\n/** @internal */\nexport const Container$inboundSchema = z.union([\n    z.lazy(() => ContainerAuto$inboundSchema),\n    z.string(),\n]);\n/** @internal */\nexport const Container$outboundSchema = z.union([z.lazy(() => ContainerAuto$outboundSchema), z.string()]);\nexport function containerToJSON(container) {\n    return JSON.stringify(Container$outboundSchema.parse(container));\n}\nexport function containerFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Container$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Container' from JSON`);\n}\n/** @internal */\nexport const CodeInterpreterServerTool$inboundSchema = z.object({\n    container: z.union([z.lazy(() => ContainerAuto$inboundSchema), z.string()]),\n    type: z.literal(\"code_interpreter\"),\n});\n/** @internal */\nexport const CodeInterpreterServerTool$outboundSchema = z.object({\n    container: z.union([z.lazy(() => ContainerAuto$outboundSchema), z.string()]),\n    type: z.literal(\"code_interpreter\"),\n});\nexport function codeInterpreterServerToolToJSON(codeInterpreterServerTool) {\n    return JSON.stringify(CodeInterpreterServerTool$outboundSchema.parse(codeInterpreterServerTool));\n}\nexport function codeInterpreterServerToolFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CodeInterpreterServerTool$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CodeInterpreterServerTool' from JSON`);\n}\n//# sourceMappingURL=codeinterpreterservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5cd3cc003b0b\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const CodexLocalShellTool$inboundSchema = z.object({\n    type: z.literal(\"local_shell\"),\n});\n/** @internal */\nexport const CodexLocalShellTool$outboundSchema = z.object({\n    type: z.literal(\"local_shell\"),\n});\nexport function codexLocalShellToolToJSON(codexLocalShellTool) {\n    return JSON.stringify(CodexLocalShellTool$outboundSchema.parse(codexLocalShellTool));\n}\nexport function codexLocalShellToolFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CodexLocalShellTool$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CodexLocalShellTool' from JSON`);\n}\n//# sourceMappingURL=codexlocalshelltool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0c9fb29a5c84\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nexport const CompactionItemType = {\n    Compaction: \"compaction\",\n};\n/** @internal */\nexport const CompactionItemType$outboundSchema = z.enum(CompactionItemType);\n/** @internal */\nexport const CompactionItem$outboundSchema = z.object({\n    encryptedContent: z.string(),\n    id: z.nullable(z.string()).optional(),\n    type: CompactionItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        encryptedContent: \"encrypted_content\",\n    });\n});\nexport function compactionItemToJSON(compactionItem) {\n    return JSON.stringify(CompactionItem$outboundSchema.parse(compactionItem));\n}\n//# sourceMappingURL=compactionitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: beca2c6f6a75\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const CompoundFilterType = {\n    And: \"and\",\n    Or: \"or\",\n};\n/** @internal */\nexport const CompoundFilterType$inboundSchema = openEnums.inboundSchema(CompoundFilterType);\n/** @internal */\nexport const CompoundFilterType$outboundSchema = openEnums.outboundSchema(CompoundFilterType);\n/** @internal */\nexport const CompoundFilter$inboundSchema = z.object({\n    filters: z.array(z.record(z.string(), z.nullable(z.any()))),\n    type: CompoundFilterType$inboundSchema,\n});\n/** @internal */\nexport const CompoundFilter$outboundSchema = z.object({\n    filters: z.array(z.record(z.string(), z.nullable(z.any()))),\n    type: CompoundFilterType$outboundSchema,\n});\nexport function compoundFilterToJSON(compoundFilter) {\n    return JSON.stringify(CompoundFilter$outboundSchema.parse(compoundFilter));\n}\nexport function compoundFilterFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CompoundFilter$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CompoundFilter' from JSON`);\n}\n//# sourceMappingURL=compoundfilter.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e6059da59a69\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const Environment = {\n    Windows: \"windows\",\n    Mac: \"mac\",\n    Linux: \"linux\",\n    Ubuntu: \"ubuntu\",\n    Browser: \"browser\",\n};\n/** @internal */\nexport const Environment$inboundSchema = openEnums.inboundSchema(Environment);\n/** @internal */\nexport const Environment$outboundSchema = openEnums.outboundSchema(Environment);\n/** @internal */\nexport const ComputerUseServerTool$inboundSchema = z.object({\n    display_height: z.int(),\n    display_width: z.int(),\n    environment: Environment$inboundSchema,\n    type: z.literal(\"computer_use_preview\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"display_height\": \"displayHeight\",\n        \"display_width\": \"displayWidth\",\n    });\n});\n/** @internal */\nexport const ComputerUseServerTool$outboundSchema = z.object({\n    displayHeight: z.int(),\n    displayWidth: z.int(),\n    environment: Environment$outboundSchema,\n    type: z.literal(\"computer_use_preview\"),\n}).transform((v) => {\n    return remap$(v, {\n        displayHeight: \"display_height\",\n        displayWidth: \"display_width\",\n    });\n});\nexport function computerUseServerToolToJSON(computerUseServerTool) {\n    return JSON.stringify(ComputerUseServerTool$outboundSchema.parse(computerUseServerTool));\n}\nexport function computerUseServerToolFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ComputerUseServerTool$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ComputerUseServerTool' from JSON`);\n}\n//# sourceMappingURL=computeruseservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6c8ea4c00fd1\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ConflictResponseErrorData$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n    metadata: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(),\n});\nexport function conflictResponseErrorDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ConflictResponseErrorData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ConflictResponseErrorData' from JSON`);\n}\n//# sourceMappingURL=conflictresponseerrordata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b903dba08901\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Action taken when the pattern matches\n */\nexport const ContentFilterAction = {\n    Redact: \"redact\",\n    Block: \"block\",\n};\n/** @internal */\nexport const ContentFilterAction$inboundSchema = openEnums.inboundSchema(ContentFilterAction);\n/** @internal */\nexport const ContentFilterAction$outboundSchema = openEnums.outboundSchema(ContentFilterAction);\n//# sourceMappingURL=contentfilteraction.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 63b25bbc8dbf\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Action taken when the builtin filter triggers\n */\nexport const ContentFilterBuiltinAction = {\n    Redact: \"redact\",\n    Block: \"block\",\n    Flag: \"flag\",\n};\n/** @internal */\nexport const ContentFilterBuiltinAction$inboundSchema = openEnums.inboundSchema(ContentFilterBuiltinAction);\n/** @internal */\nexport const ContentFilterBuiltinAction$outboundSchema = openEnums.outboundSchema(ContentFilterBuiltinAction);\n//# sourceMappingURL=contentfilterbuiltinaction.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9a8b76e05740\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * The builtin filter identifier\n */\nexport const ContentFilterBuiltinSlug = {\n    Email: \"email\",\n    Phone: \"phone\",\n    Ssn: \"ssn\",\n    CreditCard: \"credit-card\",\n    IpAddress: \"ip-address\",\n    PersonName: \"person-name\",\n    Address: \"address\",\n    RegexPromptInjection: \"regex-prompt-injection\",\n};\n/** @internal */\nexport const ContentFilterBuiltinSlug$inboundSchema = openEnums.inboundSchema(ContentFilterBuiltinSlug);\n/** @internal */\nexport const ContentFilterBuiltinSlug$outboundSchema = openEnums.outboundSchema(ContentFilterBuiltinSlug);\n//# sourceMappingURL=contentfilterbuiltinslug.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 43af25e14cf3\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Which message roles to scan for prompt injection. Only applies to the regex-prompt-injection builtin. Defaults to all_messages.\n */\nexport const PromptInjectionScanScope = {\n    UserOnly: \"user_only\",\n    AllMessages: \"all_messages\",\n};\n/** @internal */\nexport const PromptInjectionScanScope$inboundSchema = openEnums.inboundSchema(PromptInjectionScanScope);\n/** @internal */\nexport const PromptInjectionScanScope$outboundSchema = openEnums.outboundSchema(PromptInjectionScanScope);\n//# sourceMappingURL=promptinjectionscanscope.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a4c9b1effbc1\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ContentFilterBuiltinAction$inboundSchema, } from \"./contentfilterbuiltinaction.js\";\nimport { ContentFilterBuiltinSlug$inboundSchema, } from \"./contentfilterbuiltinslug.js\";\nimport { PromptInjectionScanScope$inboundSchema, } from \"./promptinjectionscanscope.js\";\n/** @internal */\nexport const ContentFilterBuiltinEntry$inboundSchema = z.object({\n    action: ContentFilterBuiltinAction$inboundSchema,\n    label: z.string().optional(),\n    scan_scope: PromptInjectionScanScope$inboundSchema.optional(),\n    slug: ContentFilterBuiltinSlug$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"scan_scope\": \"scanScope\",\n    });\n});\nexport function contentFilterBuiltinEntryFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ContentFilterBuiltinEntry$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ContentFilterBuiltinEntry' from JSON`);\n}\n//# sourceMappingURL=contentfilterbuiltinentry.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: edc82d9f5ab0\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { ContentFilterBuiltinAction$outboundSchema, } from \"./contentfilterbuiltinaction.js\";\nimport { ContentFilterBuiltinSlug$outboundSchema, } from \"./contentfilterbuiltinslug.js\";\nimport { PromptInjectionScanScope$outboundSchema, } from \"./promptinjectionscanscope.js\";\n/** @internal */\nexport const ContentFilterBuiltinEntryInput$outboundSchema = z.object({\n    action: ContentFilterBuiltinAction$outboundSchema,\n    label: z.string().optional(),\n    scanScope: PromptInjectionScanScope$outboundSchema.optional(),\n    slug: ContentFilterBuiltinSlug$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        scanScope: \"scan_scope\",\n    });\n});\nexport function contentFilterBuiltinEntryInputToJSON(contentFilterBuiltinEntryInput) {\n    return JSON.stringify(ContentFilterBuiltinEntryInput$outboundSchema.parse(contentFilterBuiltinEntryInput));\n}\n//# sourceMappingURL=contentfilterbuiltinentryinput.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 309efd3ad069\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ContentFilterAction$inboundSchema, ContentFilterAction$outboundSchema, } from \"./contentfilteraction.js\";\n/** @internal */\nexport const ContentFilterEntry$inboundSchema = z.object({\n    action: ContentFilterAction$inboundSchema,\n    label: z.nullable(z.string()).optional(),\n    pattern: z.string(),\n});\n/** @internal */\nexport const ContentFilterEntry$outboundSchema = z.object({\n    action: ContentFilterAction$outboundSchema,\n    label: z.nullable(z.string()).optional(),\n    pattern: z.string(),\n});\nexport function contentFilterEntryToJSON(contentFilterEntry) {\n    return JSON.stringify(ContentFilterEntry$outboundSchema.parse(contentFilterEntry));\n}\nexport function contentFilterEntryFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ContentFilterEntry$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ContentFilterEntry' from JSON`);\n}\n//# sourceMappingURL=contentfilterentry.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e5520210e3cb\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nexport const ReasoningTextContentType = {\n    ReasoningText: \"reasoning_text\",\n};\n/** @internal */\nexport const ReasoningTextContentType$inboundSchema = z.enum(ReasoningTextContentType);\n/** @internal */\nexport const ReasoningTextContentType$outboundSchema = ReasoningTextContentType$inboundSchema;\n/** @internal */\nexport const ReasoningTextContent$inboundSchema = z.object({\n    text: z.string(),\n    type: ReasoningTextContentType$inboundSchema,\n});\n/** @internal */\nexport const ReasoningTextContent$outboundSchema = z.object({\n    text: z.string(),\n    type: ReasoningTextContentType$outboundSchema,\n});\nexport function reasoningTextContentToJSON(reasoningTextContent) {\n    return JSON.stringify(ReasoningTextContent$outboundSchema.parse(reasoningTextContent));\n}\nexport function reasoningTextContentFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ReasoningTextContent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ReasoningTextContent' from JSON`);\n}\n//# sourceMappingURL=reasoningtextcontent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5ba581a076ec\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { OpenAIResponsesRefusalContent$inboundSchema, } from \"./openairesponsesrefusalcontent.js\";\nimport { ReasoningTextContent$inboundSchema, } from \"./reasoningtextcontent.js\";\nimport { ResponseOutputText$inboundSchema, } from \"./responseoutputtext.js\";\n/** @internal */\nexport const ContentPartAddedEventPart$inboundSchema = discriminatedUnion(\"type\", {\n    output_text: ResponseOutputText$inboundSchema,\n    reasoning_text: ReasoningTextContent$inboundSchema.and(z.object({ type: z.literal(\"reasoning_text\") })),\n    refusal: OpenAIResponsesRefusalContent$inboundSchema,\n});\nexport function contentPartAddedEventPartFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ContentPartAddedEventPart$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ContentPartAddedEventPart' from JSON`);\n}\n/** @internal */\nexport const ContentPartAddedEvent$inboundSchema = z.object({\n    content_index: z.int(),\n    item_id: z.string(),\n    output_index: z.int(),\n    part: discriminatedUnion(\"type\", {\n        output_text: ResponseOutputText$inboundSchema,\n        reasoning_text: ReasoningTextContent$inboundSchema.and(z.object({ type: z.literal(\"reasoning_text\") })),\n        refusal: OpenAIResponsesRefusalContent$inboundSchema,\n    }),\n    sequence_number: z.int(),\n    type: z.literal(\"response.content_part.added\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"content_index\": \"contentIndex\",\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function contentPartAddedEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ContentPartAddedEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ContentPartAddedEvent' from JSON`);\n}\n//# sourceMappingURL=contentpartaddedevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 04ae0dfceba1\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const AudioUrl$outboundSchema = z\n    .object({\n    url: z.string(),\n});\nexport function audioUrlToJSON(audioUrl) {\n    return JSON.stringify(AudioUrl$outboundSchema.parse(audioUrl));\n}\n/** @internal */\nexport const ContentPartAudio$outboundSchema = z.object({\n    audioUrl: z.lazy(() => AudioUrl$outboundSchema),\n    type: z.literal(\"audio_url\"),\n}).transform((v) => {\n    return remap$(v, {\n        audioUrl: \"audio_url\",\n    });\n});\nexport function contentPartAudioToJSON(contentPartAudio) {\n    return JSON.stringify(ContentPartAudio$outboundSchema.parse(contentPartAudio));\n}\n//# sourceMappingURL=contentpartaudio.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 943cfab7678a\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { OpenAIResponsesRefusalContent$inboundSchema, } from \"./openairesponsesrefusalcontent.js\";\nimport { ReasoningTextContent$inboundSchema, } from \"./reasoningtextcontent.js\";\nimport { ResponseOutputText$inboundSchema, } from \"./responseoutputtext.js\";\n/** @internal */\nexport const ContentPartDoneEventPart$inboundSchema = discriminatedUnion(\"type\", {\n    output_text: ResponseOutputText$inboundSchema,\n    reasoning_text: ReasoningTextContent$inboundSchema.and(z.object({ type: z.literal(\"reasoning_text\") })),\n    refusal: OpenAIResponsesRefusalContent$inboundSchema,\n});\nexport function contentPartDoneEventPartFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ContentPartDoneEventPart$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ContentPartDoneEventPart' from JSON`);\n}\n/** @internal */\nexport const ContentPartDoneEvent$inboundSchema = z.object({\n    content_index: z.int(),\n    item_id: z.string(),\n    output_index: z.int(),\n    part: discriminatedUnion(\"type\", {\n        output_text: ResponseOutputText$inboundSchema,\n        reasoning_text: ReasoningTextContent$inboundSchema.and(z.object({ type: z.literal(\"reasoning_text\") })),\n        refusal: OpenAIResponsesRefusalContent$inboundSchema,\n    }),\n    sequence_number: z.int(),\n    type: z.literal(\"response.content_part.done\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"content_index\": \"contentIndex\",\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function contentPartDoneEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ContentPartDoneEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ContentPartDoneEvent' from JSON`);\n}\n//# sourceMappingURL=contentpartdoneevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6b4d72ed5ae8\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const ContentPartImageImageUrl$outboundSchema = z.object({\n    url: z.string(),\n});\nexport function contentPartImageImageUrlToJSON(contentPartImageImageUrl) {\n    return JSON.stringify(ContentPartImageImageUrl$outboundSchema.parse(contentPartImageImageUrl));\n}\n/** @internal */\nexport const ContentPartImage$outboundSchema = z.object({\n    imageUrl: z.lazy(() => ContentPartImageImageUrl$outboundSchema),\n    type: z.literal(\"image_url\"),\n}).transform((v) => {\n    return remap$(v, {\n        imageUrl: \"image_url\",\n    });\n});\nexport function contentPartImageToJSON(contentPartImage) {\n    return JSON.stringify(ContentPartImage$outboundSchema.parse(contentPartImage));\n}\n//# sourceMappingURL=contentpartimage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 66135b381ef7\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const MultimodalMedia$outboundSchema = z.object({\n    data: z.string(),\n    format: z.string().optional(),\n});\nexport function multimodalMediaToJSON(multimodalMedia) {\n    return JSON.stringify(MultimodalMedia$outboundSchema.parse(multimodalMedia));\n}\n//# sourceMappingURL=multimodalmedia.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: af8bf50b2e52\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { MultimodalMedia$outboundSchema, } from \"./multimodalmedia.js\";\n/** @internal */\nexport const ContentPartInputAudio$outboundSchema = z.object({\n    inputAudio: MultimodalMedia$outboundSchema,\n    type: z.literal(\"input_audio\"),\n}).transform((v) => {\n    return remap$(v, {\n        inputAudio: \"input_audio\",\n    });\n});\nexport function contentPartInputAudioToJSON(contentPartInputAudio) {\n    return JSON.stringify(ContentPartInputAudio$outboundSchema.parse(contentPartInputAudio));\n}\n//# sourceMappingURL=contentpartinputaudio.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4b94e641811a\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { MultimodalMedia$outboundSchema, } from \"./multimodalmedia.js\";\n/** @internal */\nexport const ContentPartInputFile$outboundSchema = z.object({\n    inputFile: MultimodalMedia$outboundSchema,\n    type: z.literal(\"input_file\"),\n}).transform((v) => {\n    return remap$(v, {\n        inputFile: \"input_file\",\n    });\n});\nexport function contentPartInputFileToJSON(contentPartInputFile) {\n    return JSON.stringify(ContentPartInputFile$outboundSchema.parse(contentPartInputFile));\n}\n//# sourceMappingURL=contentpartinputfile.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d6e5b9cec359\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { MultimodalMedia$outboundSchema, } from \"./multimodalmedia.js\";\n/** @internal */\nexport const ContentPartInputVideo$outboundSchema = z.object({\n    inputVideo: MultimodalMedia$outboundSchema,\n    type: z.literal(\"input_video\"),\n}).transform((v) => {\n    return remap$(v, {\n        inputVideo: \"input_video\",\n    });\n});\nexport function contentPartInputVideoToJSON(contentPartInputVideo) {\n    return JSON.stringify(ContentPartInputVideo$outboundSchema.parse(contentPartInputVideo));\n}\n//# sourceMappingURL=contentpartinputvideo.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5845b0ae6dcf\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const VideoUrl$outboundSchema = z\n    .object({\n    url: z.string(),\n});\nexport function videoUrlToJSON(videoUrl) {\n    return JSON.stringify(VideoUrl$outboundSchema.parse(videoUrl));\n}\n/** @internal */\nexport const ContentPartVideo$outboundSchema = z.object({\n    type: z.literal(\"video_url\"),\n    videoUrl: z.lazy(() => VideoUrl$outboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        videoUrl: \"video_url\",\n    });\n});\nexport function contentPartVideoToJSON(contentPartVideo) {\n    return JSON.stringify(ContentPartVideo$outboundSchema.parse(contentPartVideo));\n}\n//# sourceMappingURL=contentpartvideo.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5adb6ef47627\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { BYOKProviderSlug$outboundSchema, } from \"./byokproviderslug.js\";\n/** @internal */\nexport const CreateBYOKKeyRequest$outboundSchema = z.object({\n    allowedModels: z.nullable(z.array(z.string())).optional(),\n    allowedUserIds: z.nullable(z.array(z.string())).optional(),\n    disabled: z.boolean().optional(),\n    isFallback: z.boolean().optional(),\n    key: z.string(),\n    name: z.nullable(z.string()).optional(),\n    provider: BYOKProviderSlug$outboundSchema,\n    workspaceId: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        allowedModels: \"allowed_models\",\n        allowedUserIds: \"allowed_user_ids\",\n        isFallback: \"is_fallback\",\n        workspaceId: \"workspace_id\",\n    });\n});\nexport function createBYOKKeyRequestToJSON(createBYOKKeyRequest) {\n    return JSON.stringify(CreateBYOKKeyRequest$outboundSchema.parse(createBYOKKeyRequest));\n}\n//# sourceMappingURL=createbyokkeyrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 93fb8363303b\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { BYOKKey$inboundSchema } from \"./byokkey.js\";\n/** @internal */\nexport const CreateBYOKKeyResponse$inboundSchema = z.object({\n    data: BYOKKey$inboundSchema,\n});\nexport function createBYOKKeyResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateBYOKKeyResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateBYOKKeyResponse' from JSON`);\n}\n//# sourceMappingURL=createbyokkeyresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a8a819c013c0\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Interval at which the limit resets (daily, weekly, monthly)\n */\nexport const GuardrailInterval = {\n    Daily: \"daily\",\n    Weekly: \"weekly\",\n    Monthly: \"monthly\",\n};\n/** @internal */\nexport const GuardrailInterval$inboundSchema = openEnums.inboundSchema(GuardrailInterval);\n/** @internal */\nexport const GuardrailInterval$outboundSchema = openEnums.outboundSchema(GuardrailInterval);\n//# sourceMappingURL=guardrailinterval.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: fbf07f1435fd\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { ContentFilterBuiltinEntryInput$outboundSchema, } from \"./contentfilterbuiltinentryinput.js\";\nimport { ContentFilterEntry$outboundSchema, } from \"./contentfilterentry.js\";\nimport { GuardrailInterval$outboundSchema, } from \"./guardrailinterval.js\";\n/** @internal */\nexport const CreateGuardrailRequest$outboundSchema = z.object({\n    allowedModels: z.nullable(z.array(z.string())).optional(),\n    allowedProviders: z.nullable(z.array(z.string())).optional(),\n    contentFilterBuiltins: z.nullable(z.array(ContentFilterBuiltinEntryInput$outboundSchema)).optional(),\n    contentFilters: z.nullable(z.array(ContentFilterEntry$outboundSchema))\n        .optional(),\n    description: z.nullable(z.string()).optional(),\n    enforceZdr: z.nullable(z.boolean()).optional(),\n    enforceZdrAnthropic: z.nullable(z.boolean()).optional(),\n    enforceZdrGoogle: z.nullable(z.boolean()).optional(),\n    enforceZdrOpenai: z.nullable(z.boolean()).optional(),\n    enforceZdrOther: z.nullable(z.boolean()).optional(),\n    ignoredModels: z.nullable(z.array(z.string())).optional(),\n    ignoredProviders: z.nullable(z.array(z.string())).optional(),\n    limitUsd: z.nullable(z.number()).optional(),\n    name: z.string(),\n    resetInterval: z.nullable(GuardrailInterval$outboundSchema).optional(),\n    workspaceId: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        allowedModels: \"allowed_models\",\n        allowedProviders: \"allowed_providers\",\n        contentFilterBuiltins: \"content_filter_builtins\",\n        contentFilters: \"content_filters\",\n        enforceZdr: \"enforce_zdr\",\n        enforceZdrAnthropic: \"enforce_zdr_anthropic\",\n        enforceZdrGoogle: \"enforce_zdr_google\",\n        enforceZdrOpenai: \"enforce_zdr_openai\",\n        enforceZdrOther: \"enforce_zdr_other\",\n        ignoredModels: \"ignored_models\",\n        ignoredProviders: \"ignored_providers\",\n        limitUsd: \"limit_usd\",\n        resetInterval: \"reset_interval\",\n        workspaceId: \"workspace_id\",\n    });\n});\nexport function createGuardrailRequestToJSON(createGuardrailRequest) {\n    return JSON.stringify(CreateGuardrailRequest$outboundSchema.parse(createGuardrailRequest));\n}\n//# sourceMappingURL=createguardrailrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 240a4b8d7a7d\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ContentFilterBuiltinEntry$inboundSchema, } from \"./contentfilterbuiltinentry.js\";\nimport { ContentFilterEntry$inboundSchema, } from \"./contentfilterentry.js\";\nimport { GuardrailInterval$inboundSchema, } from \"./guardrailinterval.js\";\n/** @internal */\nexport const Guardrail$inboundSchema = z.object({\n    allowed_models: z.nullable(z.array(z.string())).optional(),\n    allowed_providers: z.nullable(z.array(z.string())).optional(),\n    content_filter_builtins: z.nullable(z.array(ContentFilterBuiltinEntry$inboundSchema)).optional(),\n    content_filters: z.nullable(z.array(ContentFilterEntry$inboundSchema))\n        .optional(),\n    created_at: z.string(),\n    description: z.nullable(z.string()).optional(),\n    enforce_zdr: z.nullable(z.boolean()).optional(),\n    enforce_zdr_anthropic: z.nullable(z.boolean()).optional(),\n    enforce_zdr_google: z.nullable(z.boolean()).optional(),\n    enforce_zdr_openai: z.nullable(z.boolean()).optional(),\n    enforce_zdr_other: z.nullable(z.boolean()).optional(),\n    id: z.string(),\n    ignored_models: z.nullable(z.array(z.string())).optional(),\n    ignored_providers: z.nullable(z.array(z.string())).optional(),\n    limit_usd: z.nullable(z.number()).optional(),\n    name: z.string(),\n    reset_interval: z.nullable(GuardrailInterval$inboundSchema).optional(),\n    updated_at: z.nullable(z.string()).optional(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"allowed_models\": \"allowedModels\",\n        \"allowed_providers\": \"allowedProviders\",\n        \"content_filter_builtins\": \"contentFilterBuiltins\",\n        \"content_filters\": \"contentFilters\",\n        \"created_at\": \"createdAt\",\n        \"enforce_zdr\": \"enforceZdr\",\n        \"enforce_zdr_anthropic\": \"enforceZdrAnthropic\",\n        \"enforce_zdr_google\": \"enforceZdrGoogle\",\n        \"enforce_zdr_openai\": \"enforceZdrOpenai\",\n        \"enforce_zdr_other\": \"enforceZdrOther\",\n        \"ignored_models\": \"ignoredModels\",\n        \"ignored_providers\": \"ignoredProviders\",\n        \"limit_usd\": \"limitUsd\",\n        \"reset_interval\": \"resetInterval\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function guardrailFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Guardrail$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Guardrail' from JSON`);\n}\n//# sourceMappingURL=guardrail.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f0b6f29656b5\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { Guardrail$inboundSchema } from \"./guardrail.js\";\n/** @internal */\nexport const CreateGuardrailResponse$inboundSchema = z.object({\n    data: Guardrail$inboundSchema,\n});\nexport function createGuardrailResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateGuardrailResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateGuardrailResponse' from JSON`);\n}\n//# sourceMappingURL=createguardrailresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 297eacee53a2\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const Logic = {\n    And: \"and\",\n    Or: \"or\",\n};\nexport const Field = {\n    Model: \"model\",\n    Provider: \"provider\",\n    SessionId: \"session_id\",\n    UserId: \"user_id\",\n    ApiKeyName: \"api_key_name\",\n    FinishReason: \"finish_reason\",\n    Input: \"input\",\n    Output: \"output\",\n    TotalCost: \"total_cost\",\n    TotalTokens: \"total_tokens\",\n    PromptTokens: \"prompt_tokens\",\n    CompletionTokens: \"completion_tokens\",\n};\nexport const Operator = {\n    Equals: \"equals\",\n    NotEquals: \"not_equals\",\n    Contains: \"contains\",\n    NotContains: \"not_contains\",\n    Regex: \"regex\",\n    StartsWith: \"starts_with\",\n    EndsWith: \"ends_with\",\n    Gt: \"gt\",\n    Lt: \"lt\",\n    Gte: \"gte\",\n    Lte: \"lte\",\n    Exists: \"exists\",\n    NotExists: \"not_exists\",\n};\n/** @internal */\nexport const Logic$inboundSchema = openEnums\n    .inboundSchema(Logic);\n/** @internal */\nexport const Logic$outboundSchema = openEnums\n    .outboundSchema(Logic);\n/** @internal */\nexport const Field$inboundSchema = openEnums\n    .inboundSchema(Field);\n/** @internal */\nexport const Field$outboundSchema = openEnums\n    .outboundSchema(Field);\n/** @internal */\nexport const Operator$inboundSchema = openEnums\n    .inboundSchema(Operator);\n/** @internal */\nexport const Operator$outboundSchema = openEnums\n    .outboundSchema(Operator);\n/** @internal */\nexport const ObservabilityFilterRulesConfigValue$inboundSchema = z.union([z.string(), z.number()]);\n/** @internal */\nexport const ObservabilityFilterRulesConfigValue$outboundSchema = z.union([z.string(), z.number()]);\nexport function observabilityFilterRulesConfigValueToJSON(observabilityFilterRulesConfigValue) {\n    return JSON.stringify(ObservabilityFilterRulesConfigValue$outboundSchema.parse(observabilityFilterRulesConfigValue));\n}\nexport function observabilityFilterRulesConfigValueFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityFilterRulesConfigValue$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityFilterRulesConfigValue' from JSON`);\n}\n/** @internal */\nexport const Rule$inboundSchema = z.object({\n    field: Field$inboundSchema,\n    operator: Operator$inboundSchema,\n    value: z.union([z.string(), z.number()]).optional(),\n});\n/** @internal */\nexport const Rule$outboundSchema = z.object({\n    field: Field$outboundSchema,\n    operator: Operator$outboundSchema,\n    value: z.union([z.string(), z.number()]).optional(),\n});\nexport function ruleToJSON(rule) {\n    return JSON.stringify(Rule$outboundSchema.parse(rule));\n}\nexport function ruleFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Rule$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Rule' from JSON`);\n}\n/** @internal */\nexport const Group$inboundSchema = z.object({\n    logic: Logic$inboundSchema.default(\"and\"),\n    rules: z.array(z.lazy(() => Rule$inboundSchema)),\n});\n/** @internal */\nexport const Group$outboundSchema = z.object({\n    logic: Logic$outboundSchema.default(\"and\"),\n    rules: z.array(z.lazy(() => Rule$outboundSchema)),\n});\nexport function groupToJSON(group) {\n    return JSON.stringify(Group$outboundSchema.parse(group));\n}\nexport function groupFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Group$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Group' from JSON`);\n}\n/** @internal */\nexport const ObservabilityFilterRulesConfig$inboundSchema = z.object({\n    enabled: z.boolean().default(true),\n    groups: z.array(z.lazy(() => Group$inboundSchema)),\n});\n/** @internal */\nexport const ObservabilityFilterRulesConfig$outboundSchema = z.object({\n    enabled: z.boolean().default(true),\n    groups: z.array(z.lazy(() => Group$outboundSchema)),\n});\nexport function observabilityFilterRulesConfigToJSON(observabilityFilterRulesConfig) {\n    return JSON.stringify(ObservabilityFilterRulesConfig$outboundSchema.parse(observabilityFilterRulesConfig));\n}\nexport function observabilityFilterRulesConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityFilterRulesConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityFilterRulesConfig' from JSON`);\n}\n//# sourceMappingURL=observabilityfilterrulesconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6e5b38b96555\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { ObservabilityFilterRulesConfig$outboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/**\n * The destination type. Only stable destination types are accepted.\n */\nexport const CreateObservabilityDestinationRequestType = {\n    Arize: \"arize\",\n    Braintrust: \"braintrust\",\n    Clickhouse: \"clickhouse\",\n    Datadog: \"datadog\",\n    Grafana: \"grafana\",\n    Langfuse: \"langfuse\",\n    Langsmith: \"langsmith\",\n    Newrelic: \"newrelic\",\n    Opik: \"opik\",\n    OtelCollector: \"otel-collector\",\n    Posthog: \"posthog\",\n    Ramp: \"ramp\",\n    S3: \"s3\",\n    Sentry: \"sentry\",\n    Snowflake: \"snowflake\",\n    Weave: \"weave\",\n    Webhook: \"webhook\",\n};\n/** @internal */\nexport const CreateObservabilityDestinationRequestType$outboundSchema = openEnums\n    .outboundSchema(CreateObservabilityDestinationRequestType);\n/** @internal */\nexport const CreateObservabilityDestinationRequest$outboundSchema = z.object({\n    apiKeyHashes: z.nullable(z.array(z.string())).optional(),\n    config: z.record(z.string(), z.nullable(z.any())),\n    enabled: z.boolean().default(true),\n    filterRules: z.nullable(ObservabilityFilterRulesConfig$outboundSchema)\n        .optional(),\n    name: z.string(),\n    privacyMode: z.boolean().default(false),\n    samplingRate: z.number().optional(),\n    type: CreateObservabilityDestinationRequestType$outboundSchema,\n    workspaceId: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        apiKeyHashes: \"api_key_hashes\",\n        filterRules: \"filter_rules\",\n        privacyMode: \"privacy_mode\",\n        samplingRate: \"sampling_rate\",\n        workspaceId: \"workspace_id\",\n    });\n});\nexport function createObservabilityDestinationRequestToJSON(createObservabilityDestinationRequest) {\n    return JSON.stringify(CreateObservabilityDestinationRequest$outboundSchema.parse(createObservabilityDestinationRequest));\n}\n//# sourceMappingURL=createobservabilitydestinationrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 631c7deb0d5e\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const ObservabilityArizeDestinationConfig$inboundSchema = z.object({\n    apiKey: z.string(),\n    baseUrl: z.string().default(\"https://otlp.arize.com\"),\n    headers: z.record(z.string(), z.string()).optional(),\n    modelId: z.string(),\n    spaceKey: z.string(),\n});\nexport function observabilityArizeDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityArizeDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityArizeDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilityArizeDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilityArizeDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"arize\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilityArizeDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityArizeDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityArizeDestination' from JSON`);\n}\n//# sourceMappingURL=observabilityarizedestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 37b935380e25\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const ObservabilityBraintrustDestinationConfig$inboundSchema = z.object({\n    apiKey: z.string(),\n    baseUrl: z.string().default(\"https://api.braintrust.dev\"),\n    headers: z.record(z.string(), z.string()).optional(),\n    projectId: z.string(),\n});\nexport function observabilityBraintrustDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityBraintrustDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityBraintrustDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilityBraintrustDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilityBraintrustDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"braintrust\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilityBraintrustDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityBraintrustDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityBraintrustDestination' from JSON`);\n}\n//# sourceMappingURL=observabilitybraintrustdestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 628ce2e2989d\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const ObservabilityClickhouseDestinationConfig$inboundSchema = z.object({\n    database: z.string(),\n    headers: z.record(z.string(), z.string()).optional(),\n    host: z.string(),\n    password: z.string(),\n    table: z.string().default(\"OPENROUTER_TRACES\"),\n    username: z.string(),\n});\nexport function observabilityClickhouseDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityClickhouseDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityClickhouseDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilityClickhouseDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilityClickhouseDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"clickhouse\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilityClickhouseDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityClickhouseDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityClickhouseDestination' from JSON`);\n}\n//# sourceMappingURL=observabilityclickhousedestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 791210a608e6\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const ObservabilityDatadogDestinationConfig$inboundSchema = z.object({\n    apiKey: z.string(),\n    headers: z.record(z.string(), z.string()).optional(),\n    mlApp: z.string(),\n    url: z.string().default(\"https://api.us5.datadoghq.com\"),\n});\nexport function observabilityDatadogDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityDatadogDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityDatadogDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilityDatadogDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilityDatadogDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"datadog\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilityDatadogDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityDatadogDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityDatadogDestination' from JSON`);\n}\n//# sourceMappingURL=observabilitydatadogdestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 26c17318c1d5\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const ObservabilityGrafanaDestinationConfig$inboundSchema = z.object({\n    apiKey: z.string(),\n    baseUrl: z.string().default(\"https://otlp-gateway-prod-us-west-0.grafana.net\"),\n    headers: z.record(z.string(), z.string()).optional(),\n    instanceId: z.string(),\n});\nexport function observabilityGrafanaDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityGrafanaDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityGrafanaDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilityGrafanaDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilityGrafanaDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"grafana\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilityGrafanaDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityGrafanaDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityGrafanaDestination' from JSON`);\n}\n//# sourceMappingURL=observabilitygrafanadestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 866372fcdbce\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const ObservabilityLangfuseDestinationConfig$inboundSchema = z.object({\n    baseUrl: z.string().default(\"https://us.cloud.langfuse.com\"),\n    headers: z.record(z.string(), z.string()).optional(),\n    publicKey: z.string(),\n    secretKey: z.string(),\n});\nexport function observabilityLangfuseDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityLangfuseDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityLangfuseDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilityLangfuseDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilityLangfuseDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"langfuse\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilityLangfuseDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityLangfuseDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityLangfuseDestination' from JSON`);\n}\n//# sourceMappingURL=observabilitylangfusedestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ed70d9202997\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const ObservabilityLangsmithDestinationConfig$inboundSchema = z.object({\n    apiKey: z.string(),\n    endpoint: z.string().default(\"https://api.smith.langchain.com\"),\n    headers: z.record(z.string(), z.string()).optional(),\n    project: z.string().default(\"main\"),\n    workspaceId: z.string().optional(),\n});\nexport function observabilityLangsmithDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityLangsmithDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityLangsmithDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilityLangsmithDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilityLangsmithDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"langsmith\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilityLangsmithDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityLangsmithDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityLangsmithDestination' from JSON`);\n}\n//# sourceMappingURL=observabilitylangsmithdestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 49ee9e98072a\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\nexport const Region = {\n    Us: \"us\",\n    Eu: \"eu\",\n};\n/** @internal */\nexport const Region$inboundSchema = openEnums\n    .inboundSchema(Region);\n/** @internal */\nexport const ObservabilityNewrelicDestinationConfig$inboundSchema = z.object({\n    headers: z.record(z.string(), z.string()).optional(),\n    licenseKey: z.string(),\n    region: Region$inboundSchema.default(\"us\"),\n});\nexport function observabilityNewrelicDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityNewrelicDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityNewrelicDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilityNewrelicDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilityNewrelicDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"newrelic\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilityNewrelicDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityNewrelicDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityNewrelicDestination' from JSON`);\n}\n//# sourceMappingURL=observabilitynewrelicdestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 96b0714087b1\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const ObservabilityOpikDestinationConfig$inboundSchema = z.object({\n    apiKey: z.string(),\n    headers: z.record(z.string(), z.string()).optional(),\n    projectName: z.string(),\n    workspace: z.string(),\n});\nexport function observabilityOpikDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityOpikDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityOpikDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilityOpikDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilityOpikDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"opik\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilityOpikDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityOpikDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityOpikDestination' from JSON`);\n}\n//# sourceMappingURL=observabilityopikdestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a10e04b8d635\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const ObservabilityOtelCollectorDestinationConfig$inboundSchema = z.object({\n    endpoint: z.string(),\n    headers: z.record(z.string(), z.string()).optional(),\n});\nexport function observabilityOtelCollectorDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityOtelCollectorDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityOtelCollectorDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilityOtelCollectorDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilityOtelCollectorDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"otel-collector\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilityOtelCollectorDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityOtelCollectorDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityOtelCollectorDestination' from JSON`);\n}\n//# sourceMappingURL=observabilityotelcollectordestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7b13c8a68c92\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const ObservabilityPosthogDestinationConfig$inboundSchema = z.object({\n    apiKey: z.string(),\n    endpoint: z.string().default(\"https://us.i.posthog.com\"),\n    headers: z.record(z.string(), z.string()).optional(),\n});\nexport function observabilityPosthogDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityPosthogDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityPosthogDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilityPosthogDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilityPosthogDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"posthog\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilityPosthogDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityPosthogDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityPosthogDestination' from JSON`);\n}\n//# sourceMappingURL=observabilityposthogdestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3991fa386ded\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const ObservabilityRampDestinationConfig$inboundSchema = z.object({\n    apiKey: z.string(),\n    baseUrl: z.string().default(\"https://api.ramp.com/developer/v1/ai-usage/openrouter\"),\n    headers: z.record(z.string(), z.string()).optional(),\n});\nexport function observabilityRampDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityRampDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityRampDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilityRampDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilityRampDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"ramp\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilityRampDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityRampDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityRampDestination' from JSON`);\n}\n//# sourceMappingURL=observabilityrampdestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a9e50c2b3d64\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const ObservabilityS3DestinationConfig$inboundSchema = z.object({\n    accessKeyId: z.string(),\n    bucketName: z.string(),\n    endpoint: z.string().optional(),\n    headers: z.record(z.string(), z.string()).optional(),\n    pathTemplate: z.string().default(\"{prefix}/{date}\"),\n    prefix: z.string().default(\"openrouter-traces\"),\n    region: z.string().optional(),\n    secretAccessKey: z.string(),\n    sessionToken: z.string().optional(),\n});\nexport function observabilityS3DestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityS3DestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityS3DestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilityS3Destination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilityS3DestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"s3\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilityS3DestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityS3Destination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityS3Destination' from JSON`);\n}\n//# sourceMappingURL=observabilitys3destination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 05cd77bde6a0\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const ObservabilitySentryDestinationConfig$inboundSchema = z.object({\n    dsn: z.string(),\n    headers: z.record(z.string(), z.string()).optional(),\n    otlpEndpoint: z.string(),\n});\nexport function observabilitySentryDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilitySentryDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilitySentryDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilitySentryDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilitySentryDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"sentry\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilitySentryDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilitySentryDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilitySentryDestination' from JSON`);\n}\n//# sourceMappingURL=observabilitysentrydestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9b4968dabbd6\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const ObservabilitySnowflakeDestinationConfig$inboundSchema = z.object({\n    account: z.string(),\n    database: z.string().default(\"SNOWFLAKE_LEARNING_DB\"),\n    headers: z.record(z.string(), z.string()).optional(),\n    schema: z.string().default(\"PUBLIC\"),\n    table: z.string().default(\"OPENROUTER_TRACES\"),\n    token: z.string(),\n    warehouse: z.string().default(\"COMPUTE_WH\"),\n});\nexport function observabilitySnowflakeDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilitySnowflakeDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilitySnowflakeDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilitySnowflakeDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilitySnowflakeDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"snowflake\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilitySnowflakeDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilitySnowflakeDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilitySnowflakeDestination' from JSON`);\n}\n//# sourceMappingURL=observabilitysnowflakedestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: beb41ac4527c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const ObservabilityWeaveDestinationConfig$inboundSchema = z.object({\n    apiKey: z.string(),\n    baseUrl: z.string().default(\"https://trace.wandb.ai\"),\n    entity: z.string(),\n    headers: z.record(z.string(), z.string()).optional(),\n    project: z.string(),\n});\nexport function observabilityWeaveDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityWeaveDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityWeaveDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilityWeaveDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilityWeaveDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"weave\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilityWeaveDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityWeaveDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityWeaveDestination' from JSON`);\n}\n//# sourceMappingURL=observabilityweavedestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 934fbf633458\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { ObservabilityFilterRulesConfig$inboundSchema, } from \"./observabilityfilterrulesconfig.js\";\nexport const Method = {\n    Post: \"POST\",\n    Put: \"PUT\",\n};\n/** @internal */\nexport const Method$inboundSchema = openEnums\n    .inboundSchema(Method);\n/** @internal */\nexport const ObservabilityWebhookDestinationConfig$inboundSchema = z.object({\n    headers: z.record(z.string(), z.string()).optional(),\n    method: Method$inboundSchema.default(\"POST\"),\n    url: z.string(),\n});\nexport function observabilityWebhookDestinationConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityWebhookDestinationConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityWebhookDestinationConfig' from JSON`);\n}\n/** @internal */\nexport const ObservabilityWebhookDestination$inboundSchema = z.object({\n    api_key_hashes: z.nullable(z.array(z.string())),\n    config: z.lazy(() => ObservabilityWebhookDestinationConfig$inboundSchema),\n    created_at: z.string(),\n    enabled: z.boolean(),\n    filter_rules: z.nullable(ObservabilityFilterRulesConfig$inboundSchema),\n    id: z.string(),\n    name: z.nullable(z.string()),\n    privacy_mode: z.boolean(),\n    sampling_rate: z.number(),\n    type: z.literal(\"webhook\"),\n    updated_at: z.string(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_key_hashes\": \"apiKeyHashes\",\n        \"created_at\": \"createdAt\",\n        \"filter_rules\": \"filterRules\",\n        \"privacy_mode\": \"privacyMode\",\n        \"sampling_rate\": \"samplingRate\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function observabilityWebhookDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityWebhookDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityWebhookDestination' from JSON`);\n}\n//# sourceMappingURL=observabilitywebhookdestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 701b467a91ab\n */\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { ObservabilityArizeDestination$inboundSchema, } from \"./observabilityarizedestination.js\";\nimport { ObservabilityBraintrustDestination$inboundSchema, } from \"./observabilitybraintrustdestination.js\";\nimport { ObservabilityClickhouseDestination$inboundSchema, } from \"./observabilityclickhousedestination.js\";\nimport { ObservabilityDatadogDestination$inboundSchema, } from \"./observabilitydatadogdestination.js\";\nimport { ObservabilityGrafanaDestination$inboundSchema, } from \"./observabilitygrafanadestination.js\";\nimport { ObservabilityLangfuseDestination$inboundSchema, } from \"./observabilitylangfusedestination.js\";\nimport { ObservabilityLangsmithDestination$inboundSchema, } from \"./observabilitylangsmithdestination.js\";\nimport { ObservabilityNewrelicDestination$inboundSchema, } from \"./observabilitynewrelicdestination.js\";\nimport { ObservabilityOpikDestination$inboundSchema, } from \"./observabilityopikdestination.js\";\nimport { ObservabilityOtelCollectorDestination$inboundSchema, } from \"./observabilityotelcollectordestination.js\";\nimport { ObservabilityPosthogDestination$inboundSchema, } from \"./observabilityposthogdestination.js\";\nimport { ObservabilityRampDestination$inboundSchema, } from \"./observabilityrampdestination.js\";\nimport { ObservabilityS3Destination$inboundSchema, } from \"./observabilitys3destination.js\";\nimport { ObservabilitySentryDestination$inboundSchema, } from \"./observabilitysentrydestination.js\";\nimport { ObservabilitySnowflakeDestination$inboundSchema, } from \"./observabilitysnowflakedestination.js\";\nimport { ObservabilityWeaveDestination$inboundSchema, } from \"./observabilityweavedestination.js\";\nimport { ObservabilityWebhookDestination$inboundSchema, } from \"./observabilitywebhookdestination.js\";\n/** @internal */\nexport const ObservabilityDestination$inboundSchema = discriminatedUnion(\"type\", {\n    arize: ObservabilityArizeDestination$inboundSchema,\n    braintrust: ObservabilityBraintrustDestination$inboundSchema,\n    clickhouse: ObservabilityClickhouseDestination$inboundSchema,\n    datadog: ObservabilityDatadogDestination$inboundSchema,\n    grafana: ObservabilityGrafanaDestination$inboundSchema,\n    langfuse: ObservabilityLangfuseDestination$inboundSchema,\n    langsmith: ObservabilityLangsmithDestination$inboundSchema,\n    newrelic: ObservabilityNewrelicDestination$inboundSchema,\n    opik: ObservabilityOpikDestination$inboundSchema,\n    [\"otel-collector\"]: ObservabilityOtelCollectorDestination$inboundSchema,\n    posthog: ObservabilityPosthogDestination$inboundSchema,\n    ramp: ObservabilityRampDestination$inboundSchema,\n    s3: ObservabilityS3Destination$inboundSchema,\n    sentry: ObservabilitySentryDestination$inboundSchema,\n    snowflake: ObservabilitySnowflakeDestination$inboundSchema,\n    weave: ObservabilityWeaveDestination$inboundSchema,\n    webhook: ObservabilityWebhookDestination$inboundSchema,\n});\nexport function observabilityDestinationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ObservabilityDestination$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ObservabilityDestination' from JSON`);\n}\n//# sourceMappingURL=observabilitydestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 99a723e02f31\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityDestination$inboundSchema, } from \"./observabilitydestination.js\";\n/** @internal */\nexport const CreateObservabilityDestinationResponse$inboundSchema = z.object({\n    data: ObservabilityDestination$inboundSchema,\n});\nexport function createObservabilityDestinationResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateObservabilityDestinationResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateObservabilityDestinationResponse' from JSON`);\n}\n//# sourceMappingURL=createobservabilitydestinationresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 259a18622bbe\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const PresetDesignatedVersion$inboundSchema = z.object({\n    config: z.record(z.string(), z.nullable(z.any())),\n    created_at: z.string(),\n    creator_id: z.string(),\n    id: z.string(),\n    preset_id: z.string(),\n    system_prompt: z.nullable(z.string()),\n    updated_at: z.string(),\n    version: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"created_at\": \"createdAt\",\n        \"creator_id\": \"creatorId\",\n        \"preset_id\": \"presetId\",\n        \"system_prompt\": \"systemPrompt\",\n        \"updated_at\": \"updatedAt\",\n    });\n});\nexport function presetDesignatedVersionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => PresetDesignatedVersion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'PresetDesignatedVersion' from JSON`);\n}\n//# sourceMappingURL=presetdesignatedversion.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 76e85e81f36b\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * The status of a preset.\n */\nexport const PresetStatus = {\n    Active: \"active\",\n    Disabled: \"disabled\",\n    Archived: \"archived\",\n};\n/** @internal */\nexport const PresetStatus$inboundSchema = openEnums.inboundSchema(PresetStatus);\n//# sourceMappingURL=presetstatus.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6ebecbfabdd3\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { PresetDesignatedVersion$inboundSchema, } from \"./presetdesignatedversion.js\";\nimport { PresetStatus$inboundSchema } from \"./presetstatus.js\";\n/** @internal */\nexport const PresetWithDesignatedVersion$inboundSchema = z.object({\n    created_at: z.string(),\n    creator_user_id: z.nullable(z.string()),\n    description: z.nullable(z.string()),\n    designated_version_id: z.nullable(z.string()),\n    id: z.string(),\n    name: z.string(),\n    slug: z.string(),\n    status: PresetStatus$inboundSchema,\n    status_updated_at: z.nullable(z.string()),\n    updated_at: z.string(),\n    workspace_id: z.nullable(z.string()),\n    designated_version: z.nullable(PresetDesignatedVersion$inboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        \"created_at\": \"createdAt\",\n        \"creator_user_id\": \"creatorUserId\",\n        \"designated_version_id\": \"designatedVersionId\",\n        \"status_updated_at\": \"statusUpdatedAt\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n        \"designated_version\": \"designatedVersion\",\n    });\n});\nexport function presetWithDesignatedVersionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => PresetWithDesignatedVersion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'PresetWithDesignatedVersion' from JSON`);\n}\n//# sourceMappingURL=presetwithdesignatedversion.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: dc6bff35f5a1\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { PresetWithDesignatedVersion$inboundSchema, } from \"./presetwithdesignatedversion.js\";\n/** @internal */\nexport const CreatePresetFromInferenceResponse$inboundSchema = z.object({\n    data: PresetWithDesignatedVersion$inboundSchema,\n});\nexport function createPresetFromInferenceResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreatePresetFromInferenceResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreatePresetFromInferenceResponse' from JSON`);\n}\n//# sourceMappingURL=createpresetfrominferenceresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 729716a42b74\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const CreateWorkspaceRequest$outboundSchema = z.object({\n    defaultImageModel: z.nullable(z.string()).optional(),\n    defaultProviderSort: z.nullable(z.string()).optional(),\n    defaultTextModel: z.nullable(z.string()).optional(),\n    description: z.nullable(z.string()).optional(),\n    ioLoggingApiKeyIds: z.nullable(z.array(z.int())).optional(),\n    ioLoggingSamplingRate: z.number().optional(),\n    isDataDiscountLoggingEnabled: z.boolean().optional(),\n    isObservabilityBroadcastEnabled: z.boolean().optional(),\n    isObservabilityIoLoggingEnabled: z.boolean().optional(),\n    name: z.string(),\n    slug: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        defaultImageModel: \"default_image_model\",\n        defaultProviderSort: \"default_provider_sort\",\n        defaultTextModel: \"default_text_model\",\n        ioLoggingApiKeyIds: \"io_logging_api_key_ids\",\n        ioLoggingSamplingRate: \"io_logging_sampling_rate\",\n        isDataDiscountLoggingEnabled: \"is_data_discount_logging_enabled\",\n        isObservabilityBroadcastEnabled: \"is_observability_broadcast_enabled\",\n        isObservabilityIoLoggingEnabled: \"is_observability_io_logging_enabled\",\n    });\n});\nexport function createWorkspaceRequestToJSON(createWorkspaceRequest) {\n    return JSON.stringify(CreateWorkspaceRequest$outboundSchema.parse(createWorkspaceRequest));\n}\n//# sourceMappingURL=createworkspacerequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f3a6e662c47b\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const Workspace$inboundSchema = z.object({\n    created_at: z.string(),\n    created_by: z.nullable(z.string()),\n    default_image_model: z.nullable(z.string()),\n    default_provider_sort: z.nullable(z.string()),\n    default_text_model: z.nullable(z.string()),\n    description: z.nullable(z.string()),\n    id: z.string(),\n    io_logging_api_key_ids: z.nullable(z.array(z.int())),\n    io_logging_sampling_rate: z.number(),\n    is_data_discount_logging_enabled: z.boolean(),\n    is_observability_broadcast_enabled: z.boolean(),\n    is_observability_io_logging_enabled: z.boolean(),\n    name: z.string(),\n    slug: z.string(),\n    updated_at: z.nullable(z.string()),\n}).transform((v) => {\n    return remap$(v, {\n        \"created_at\": \"createdAt\",\n        \"created_by\": \"createdBy\",\n        \"default_image_model\": \"defaultImageModel\",\n        \"default_provider_sort\": \"defaultProviderSort\",\n        \"default_text_model\": \"defaultTextModel\",\n        \"io_logging_api_key_ids\": \"ioLoggingApiKeyIds\",\n        \"io_logging_sampling_rate\": \"ioLoggingSamplingRate\",\n        \"is_data_discount_logging_enabled\": \"isDataDiscountLoggingEnabled\",\n        \"is_observability_broadcast_enabled\": \"isObservabilityBroadcastEnabled\",\n        \"is_observability_io_logging_enabled\": \"isObservabilityIoLoggingEnabled\",\n        \"updated_at\": \"updatedAt\",\n    });\n});\nexport function workspaceFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Workspace$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Workspace' from JSON`);\n}\n//# sourceMappingURL=workspace.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 8cdd42874330\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { Workspace$inboundSchema } from \"./workspace.js\";\n/** @internal */\nexport const CreateWorkspaceResponse$inboundSchema = z.object({\n    data: Workspace$inboundSchema,\n});\nexport function createWorkspaceResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateWorkspaceResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateWorkspaceResponse' from JSON`);\n}\n//# sourceMappingURL=createworkspaceresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b293ddf87321\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const Syntax = {\n    Lark: \"lark\",\n    Regex: \"regex\",\n};\n/** @internal */\nexport const Syntax$inboundSchema = openEnums\n    .inboundSchema(Syntax);\n/** @internal */\nexport const Syntax$outboundSchema = openEnums\n    .outboundSchema(Syntax);\n/** @internal */\nexport const FormatGrammar$inboundSchema = z\n    .object({\n    definition: z.string(),\n    syntax: Syntax$inboundSchema,\n    type: z.literal(\"grammar\"),\n});\n/** @internal */\nexport const FormatGrammar$outboundSchema = z.object({\n    definition: z.string(),\n    syntax: Syntax$outboundSchema,\n    type: z.literal(\"grammar\"),\n});\nexport function formatGrammarToJSON(formatGrammar) {\n    return JSON.stringify(FormatGrammar$outboundSchema.parse(formatGrammar));\n}\nexport function formatGrammarFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FormatGrammar$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FormatGrammar' from JSON`);\n}\n/** @internal */\nexport const FormatText$inboundSchema = z\n    .object({\n    type: z.literal(\"text\"),\n});\n/** @internal */\nexport const FormatText$outboundSchema = z.object({\n    type: z.literal(\"text\"),\n});\nexport function formatTextToJSON(formatText) {\n    return JSON.stringify(FormatText$outboundSchema.parse(formatText));\n}\nexport function formatTextFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FormatText$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FormatText' from JSON`);\n}\n/** @internal */\nexport const Format$inboundSchema = discriminatedUnion(\"type\", {\n    text: z.lazy(() => FormatText$inboundSchema),\n    grammar: z.lazy(() => FormatGrammar$inboundSchema),\n});\n/** @internal */\nexport const Format$outboundSchema = z\n    .union([\n    z.lazy(() => FormatText$outboundSchema),\n    z.lazy(() => FormatGrammar$outboundSchema),\n]);\nexport function formatToJSON(format) {\n    return JSON.stringify(Format$outboundSchema.parse(format));\n}\nexport function formatFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Format$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Format' from JSON`);\n}\n/** @internal */\nexport const CustomTool$inboundSchema = z\n    .object({\n    description: z.string().optional(),\n    format: discriminatedUnion(\"type\", {\n        text: z.lazy(() => FormatText$inboundSchema),\n        grammar: z.lazy(() => FormatGrammar$inboundSchema),\n    }).optional(),\n    name: z.string(),\n    type: z.literal(\"custom\"),\n});\n/** @internal */\nexport const CustomTool$outboundSchema = z.object({\n    description: z.string().optional(),\n    format: z.union([\n        z.lazy(() => FormatText$outboundSchema),\n        z.lazy(() => FormatGrammar$outboundSchema),\n    ]).optional(),\n    name: z.string(),\n    type: z.literal(\"custom\"),\n});\nexport function customToolToJSON(customTool) {\n    return JSON.stringify(CustomTool$outboundSchema.parse(customTool));\n}\nexport function customToolFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CustomTool$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CustomTool' from JSON`);\n}\n//# sourceMappingURL=customtool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 54de1fe595f7\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const CustomToolCallInputDeltaEvent$inboundSchema = z.object({\n    delta: z.string(),\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.custom_tool_call_input.delta\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function customToolCallInputDeltaEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CustomToolCallInputDeltaEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CustomToolCallInputDeltaEvent' from JSON`);\n}\n//# sourceMappingURL=customtoolcallinputdeltaevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 073372193793\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const CustomToolCallInputDoneEvent$inboundSchema = z.object({\n    input: z.string(),\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.custom_tool_call_input.done\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function customToolCallInputDoneEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CustomToolCallInputDoneEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CustomToolCallInputDoneEvent' from JSON`);\n}\n//# sourceMappingURL=customtoolcallinputdoneevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 84d0034c7065\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nexport const CustomToolCallItemType = {\n    CustomToolCall: \"custom_tool_call\",\n};\n/** @internal */\nexport const CustomToolCallItemType$outboundSchema = z.enum(CustomToolCallItemType);\n/** @internal */\nexport const CustomToolCallItem$outboundSchema = z.object({\n    callId: z.string(),\n    id: z.string().optional(),\n    input: z.string(),\n    name: z.string(),\n    namespace: z.string().optional(),\n    type: CustomToolCallItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        callId: \"call_id\",\n    });\n});\nexport function customToolCallItemToJSON(customToolCallItem) {\n    return JSON.stringify(CustomToolCallItem$outboundSchema.parse(customToolCallItem));\n}\n//# sourceMappingURL=customtoolcallitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 02aed5cefca5\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { InputFile$outboundSchema, } from \"./inputfile.js\";\nimport { InputText$outboundSchema, } from \"./inputtext.js\";\nexport const CustomToolCallOutputItemDetail = {\n    Auto: \"auto\",\n    High: \"high\",\n    Low: \"low\",\n    Original: \"original\",\n};\nexport const CustomToolCallOutputItemTypeCustomToolCallOutput = {\n    CustomToolCallOutput: \"custom_tool_call_output\",\n};\n/** @internal */\nexport const CustomToolCallOutputItemDetail$outboundSchema = openEnums.outboundSchema(CustomToolCallOutputItemDetail);\n/** @internal */\nexport const CustomToolCallOutputItemOutputInputImage$outboundSchema = z.object({\n    detail: CustomToolCallOutputItemDetail$outboundSchema,\n    imageUrl: z.nullable(z.string()).optional(),\n    type: z.literal(\"input_image\"),\n}).transform((v) => {\n    return remap$(v, {\n        imageUrl: \"image_url\",\n    });\n});\nexport function customToolCallOutputItemOutputInputImageToJSON(customToolCallOutputItemOutputInputImage) {\n    return JSON.stringify(CustomToolCallOutputItemOutputInputImage$outboundSchema.parse(customToolCallOutputItemOutputInputImage));\n}\n/** @internal */\nexport const CustomToolCallOutputItemOutputUnion1$outboundSchema = z.union([\n    InputText$outboundSchema,\n    z.lazy(() => CustomToolCallOutputItemOutputInputImage$outboundSchema),\n    InputFile$outboundSchema,\n]);\nexport function customToolCallOutputItemOutputUnion1ToJSON(customToolCallOutputItemOutputUnion1) {\n    return JSON.stringify(CustomToolCallOutputItemOutputUnion1$outboundSchema.parse(customToolCallOutputItemOutputUnion1));\n}\n/** @internal */\nexport const CustomToolCallOutputItemOutputUnion2$outboundSchema = z.union([\n    z.string(),\n    z.array(z.union([\n        InputText$outboundSchema,\n        z.lazy(() => CustomToolCallOutputItemOutputInputImage$outboundSchema),\n        InputFile$outboundSchema,\n    ])),\n]);\nexport function customToolCallOutputItemOutputUnion2ToJSON(customToolCallOutputItemOutputUnion2) {\n    return JSON.stringify(CustomToolCallOutputItemOutputUnion2$outboundSchema.parse(customToolCallOutputItemOutputUnion2));\n}\n/** @internal */\nexport const CustomToolCallOutputItemTypeCustomToolCallOutput$outboundSchema = z.enum(CustomToolCallOutputItemTypeCustomToolCallOutput);\n/** @internal */\nexport const CustomToolCallOutputItem$outboundSchema = z.object({\n    callId: z.string(),\n    id: z.string().optional(),\n    output: z.union([\n        z.string(),\n        z.array(z.union([\n            InputText$outboundSchema,\n            z.lazy(() => CustomToolCallOutputItemOutputInputImage$outboundSchema),\n            InputFile$outboundSchema,\n        ])),\n    ]),\n    type: CustomToolCallOutputItemTypeCustomToolCallOutput$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        callId: \"call_id\",\n    });\n});\nexport function customToolCallOutputItemToJSON(customToolCallOutputItem) {\n    return JSON.stringify(CustomToolCallOutputItem$outboundSchema.parse(customToolCallOutputItem));\n}\n//# sourceMappingURL=customtoolcalloutputitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 78bcd1ddec85\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const DABenchmarkEntry$inboundSchema = z.object({\n    arena: z.string(),\n    category: z.string(),\n    elo: z.number(),\n    rank: z.int(),\n    win_rate: z.number(),\n}).transform((v) => {\n    return remap$(v, {\n        \"win_rate\": \"winRate\",\n    });\n});\nexport function daBenchmarkEntryFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => DABenchmarkEntry$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'DABenchmarkEntry' from JSON`);\n}\n//# sourceMappingURL=dabenchmarkentry.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 8da6fac53cb5\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const DefaultParameters$inboundSchema = z.object({\n    frequency_penalty: z.nullable(z.number()).optional(),\n    presence_penalty: z.nullable(z.number()).optional(),\n    repetition_penalty: z.nullable(z.number()).optional(),\n    temperature: z.nullable(z.number()).optional(),\n    top_k: z.nullable(z.int()).optional(),\n    top_p: z.nullable(z.number()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"frequency_penalty\": \"frequencyPenalty\",\n        \"presence_penalty\": \"presencePenalty\",\n        \"repetition_penalty\": \"repetitionPenalty\",\n        \"top_k\": \"topK\",\n        \"top_p\": \"topP\",\n    });\n});\nexport function defaultParametersFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => DefaultParameters$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'DefaultParameters' from JSON`);\n}\n//# sourceMappingURL=defaultparameters.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: c4010d7a964e\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const DeleteBYOKKeyResponse$inboundSchema = z.object({\n    deleted: z.literal(true),\n});\nexport function deleteBYOKKeyResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => DeleteBYOKKeyResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'DeleteBYOKKeyResponse' from JSON`);\n}\n//# sourceMappingURL=deletebyokkeyresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1369f013fe1a\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const DeleteGuardrailResponse$inboundSchema = z.object({\n    deleted: z.literal(true),\n});\nexport function deleteGuardrailResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => DeleteGuardrailResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'DeleteGuardrailResponse' from JSON`);\n}\n//# sourceMappingURL=deleteguardrailresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 86995b7dad27\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const DeleteObservabilityDestinationResponse$inboundSchema = z.object({\n    deleted: z.literal(true),\n});\nexport function deleteObservabilityDestinationResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => DeleteObservabilityDestinationResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'DeleteObservabilityDestinationResponse' from JSON`);\n}\n//# sourceMappingURL=deleteobservabilitydestinationresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5ff5aed380bc\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const DeleteWorkspaceResponse$inboundSchema = z.object({\n    deleted: z.literal(true),\n});\nexport function deleteWorkspaceResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => DeleteWorkspaceResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'DeleteWorkspaceResponse' from JSON`);\n}\n//# sourceMappingURL=deleteworkspaceresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 231a86887e78\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const InputVideo$outboundSchema = z.object({\n    type: z.literal(\"input_video\"),\n    videoUrl: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        videoUrl: \"video_url\",\n    });\n});\nexport function inputVideoToJSON(inputVideo) {\n    return JSON.stringify(InputVideo$outboundSchema.parse(inputVideo));\n}\n//# sourceMappingURL=inputvideo.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0e3bca037a2a\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { InputAudio$outboundSchema, } from \"./inputaudio.js\";\nimport { InputFile$outboundSchema, } from \"./inputfile.js\";\nimport { InputText$outboundSchema, } from \"./inputtext.js\";\nimport { InputVideo$outboundSchema, } from \"./inputvideo.js\";\nexport const EasyInputMessageDetail = {\n    Auto: \"auto\",\n    High: \"high\",\n    Low: \"low\",\n    Original: \"original\",\n};\nexport const EasyInputMessagePhaseFinalAnswer = {\n    FinalAnswer: \"final_answer\",\n};\nexport const EasyInputMessagePhaseCommentary = {\n    Commentary: \"commentary\",\n};\nexport const EasyInputMessageRoleDeveloper = {\n    Developer: \"developer\",\n};\nexport const EasyInputMessageRoleAssistant = {\n    Assistant: \"assistant\",\n};\nexport const EasyInputMessageRoleSystem = {\n    System: \"system\",\n};\nexport const EasyInputMessageRoleUser = {\n    User: \"user\",\n};\nexport const EasyInputMessageTypeMessage = {\n    Message: \"message\",\n};\n/** @internal */\nexport const EasyInputMessageDetail$outboundSchema = openEnums.outboundSchema(EasyInputMessageDetail);\n/** @internal */\nexport const EasyInputMessageContentInputImage$outboundSchema = z.object({\n    detail: EasyInputMessageDetail$outboundSchema,\n    imageUrl: z.nullable(z.string()).optional(),\n    type: z.literal(\"input_image\"),\n}).transform((v) => {\n    return remap$(v, {\n        imageUrl: \"image_url\",\n    });\n});\nexport function easyInputMessageContentInputImageToJSON(easyInputMessageContentInputImage) {\n    return JSON.stringify(EasyInputMessageContentInputImage$outboundSchema.parse(easyInputMessageContentInputImage));\n}\n/** @internal */\nexport const EasyInputMessageContentUnion1$outboundSchema = z.union([\n    InputText$outboundSchema,\n    z.lazy(() => EasyInputMessageContentInputImage$outboundSchema),\n    InputFile$outboundSchema,\n    InputAudio$outboundSchema,\n    InputVideo$outboundSchema,\n]);\nexport function easyInputMessageContentUnion1ToJSON(easyInputMessageContentUnion1) {\n    return JSON.stringify(EasyInputMessageContentUnion1$outboundSchema.parse(easyInputMessageContentUnion1));\n}\n/** @internal */\nexport const EasyInputMessageContentUnion2$outboundSchema = z.union([\n    z.array(z.union([\n        InputText$outboundSchema,\n        z.lazy(() => EasyInputMessageContentInputImage$outboundSchema),\n        InputFile$outboundSchema,\n        InputAudio$outboundSchema,\n        InputVideo$outboundSchema,\n    ])),\n    z.string(),\n    z.any(),\n]);\nexport function easyInputMessageContentUnion2ToJSON(easyInputMessageContentUnion2) {\n    return JSON.stringify(EasyInputMessageContentUnion2$outboundSchema.parse(easyInputMessageContentUnion2));\n}\n/** @internal */\nexport const EasyInputMessagePhaseFinalAnswer$outboundSchema = z.enum(EasyInputMessagePhaseFinalAnswer);\n/** @internal */\nexport const EasyInputMessagePhaseCommentary$outboundSchema = z.enum(EasyInputMessagePhaseCommentary);\n/** @internal */\nexport const EasyInputMessagePhaseUnion$outboundSchema = z.union([\n    EasyInputMessagePhaseCommentary$outboundSchema,\n    EasyInputMessagePhaseFinalAnswer$outboundSchema,\n    z.any(),\n]);\nexport function easyInputMessagePhaseUnionToJSON(easyInputMessagePhaseUnion) {\n    return JSON.stringify(EasyInputMessagePhaseUnion$outboundSchema.parse(easyInputMessagePhaseUnion));\n}\n/** @internal */\nexport const EasyInputMessageRoleDeveloper$outboundSchema = z.enum(EasyInputMessageRoleDeveloper);\n/** @internal */\nexport const EasyInputMessageRoleAssistant$outboundSchema = z.enum(EasyInputMessageRoleAssistant);\n/** @internal */\nexport const EasyInputMessageRoleSystem$outboundSchema = z.enum(EasyInputMessageRoleSystem);\n/** @internal */\nexport const EasyInputMessageRoleUser$outboundSchema = z.enum(EasyInputMessageRoleUser);\n/** @internal */\nexport const EasyInputMessageRoleUnion$outboundSchema = z.union([\n    EasyInputMessageRoleUser$outboundSchema,\n    EasyInputMessageRoleSystem$outboundSchema,\n    EasyInputMessageRoleAssistant$outboundSchema,\n    EasyInputMessageRoleDeveloper$outboundSchema,\n]);\nexport function easyInputMessageRoleUnionToJSON(easyInputMessageRoleUnion) {\n    return JSON.stringify(EasyInputMessageRoleUnion$outboundSchema.parse(easyInputMessageRoleUnion));\n}\n/** @internal */\nexport const EasyInputMessageTypeMessage$outboundSchema = z.enum(EasyInputMessageTypeMessage);\n/** @internal */\nexport const EasyInputMessage$outboundSchema = z.object({\n    content: z.nullable(z.union([\n        z.array(z.union([\n            InputText$outboundSchema,\n            z.lazy(() => EasyInputMessageContentInputImage$outboundSchema),\n            InputFile$outboundSchema,\n            InputAudio$outboundSchema,\n            InputVideo$outboundSchema,\n        ])),\n        z.string(),\n        z.any(),\n    ])).optional(),\n    phase: z.nullable(z.union([\n        EasyInputMessagePhaseCommentary$outboundSchema,\n        EasyInputMessagePhaseFinalAnswer$outboundSchema,\n        z.any(),\n    ])).optional(),\n    role: z.union([\n        EasyInputMessageRoleUser$outboundSchema,\n        EasyInputMessageRoleSystem$outboundSchema,\n        EasyInputMessageRoleAssistant$outboundSchema,\n        EasyInputMessageRoleDeveloper$outboundSchema,\n    ]),\n    type: EasyInputMessageTypeMessage$outboundSchema.optional(),\n});\nexport function easyInputMessageToJSON(easyInputMessage) {\n    return JSON.stringify(EasyInputMessage$outboundSchema.parse(easyInputMessage));\n}\n//# sourceMappingURL=easyinputmessage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d86e84250105\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const EdgeNetworkTimeoutResponseErrorData$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n    metadata: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(),\n});\nexport function edgeNetworkTimeoutResponseErrorDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => EdgeNetworkTimeoutResponseErrorData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'EdgeNetworkTimeoutResponseErrorData' from JSON`);\n}\n//# sourceMappingURL=edgenetworktimeoutresponseerrordata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 83efda25dcf0\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const EndpointStatus = {\n    Zero: 0,\n    Minus1: -1,\n    Minus2: -2,\n    Minus3: -3,\n    Minus5: -5,\n    Minus10: -10,\n};\n/** @internal */\nexport const EndpointStatus$inboundSchema = openEnums.inboundSchemaInt(EndpointStatus);\n//# sourceMappingURL=endpointstatus.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a4e22766585b\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ErrorEvent$inboundSchema = z\n    .object({\n    code: z.nullable(z.string()),\n    message: z.string(),\n    param: z.nullable(z.string()),\n    sequence_number: z.int(),\n    type: z.literal(\"error\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function errorEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ErrorEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ErrorEvent' from JSON`);\n}\n//# sourceMappingURL=errorevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 2464f2b51ee5\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nexport const FileDeleteResponseType = {\n    FileDeleted: \"file_deleted\",\n};\n/** @internal */\nexport const FileDeleteResponseType$inboundSchema = z.enum(FileDeleteResponseType);\n/** @internal */\nexport const FileDeleteResponse$inboundSchema = z.object({\n    id: z.string(),\n    type: FileDeleteResponseType$inboundSchema,\n});\nexport function fileDeleteResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FileDeleteResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FileDeleteResponse' from JSON`);\n}\n//# sourceMappingURL=filedeleteresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7a5c3a86d7a2\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nexport const FileMetadataType = {\n    File: \"file\",\n};\n/** @internal */\nexport const FileMetadataType$inboundSchema = z.enum(FileMetadataType);\n/** @internal */\nexport const FileMetadata$inboundSchema = z\n    .object({\n    created_at: z.string(),\n    downloadable: z.boolean(),\n    filename: z.string(),\n    id: z.string(),\n    mime_type: z.string(),\n    size_bytes: z.int(),\n    type: FileMetadataType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"created_at\": \"createdAt\",\n        \"mime_type\": \"mimeType\",\n        \"size_bytes\": \"sizeBytes\",\n    });\n});\nexport function fileMetadataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FileMetadata$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FileMetadata' from JSON`);\n}\n//# sourceMappingURL=filemetadata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e4978ed568c7\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { FileMetadata$inboundSchema } from \"./filemetadata.js\";\n/** @internal */\nexport const FileListResponse$inboundSchema = z.object({\n    cursor: z.nullable(z.string()),\n    data: z.array(FileMetadata$inboundSchema),\n    first_id: z.nullable(z.string()),\n    has_more: z.boolean(),\n    last_id: z.nullable(z.string()),\n}).transform((v) => {\n    return remap$(v, {\n        \"first_id\": \"firstId\",\n        \"has_more\": \"hasMore\",\n        \"last_id\": \"lastId\",\n    });\n});\nexport function fileListResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FileListResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FileListResponse' from JSON`);\n}\n//# sourceMappingURL=filelistresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e9b1dc2a101e\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { CompoundFilter$inboundSchema, CompoundFilter$outboundSchema, } from \"./compoundfilter.js\";\nexport const FiltersType = {\n    Eq: \"eq\",\n    Ne: \"ne\",\n    Gt: \"gt\",\n    Gte: \"gte\",\n    Lt: \"lt\",\n    Lte: \"lte\",\n};\nexport const Ranker = {\n    Auto: \"auto\",\n    Default20241115: \"default-2024-11-15\",\n};\n/** @internal */\nexport const FiltersType$inboundSchema = openEnums.inboundSchema(FiltersType);\n/** @internal */\nexport const FiltersType$outboundSchema = openEnums.outboundSchema(FiltersType);\n/** @internal */\nexport const FileSearchServerToolValue1$inboundSchema = z.union([z.string(), z.number()]);\n/** @internal */\nexport const FileSearchServerToolValue1$outboundSchema = z.union([z.string(), z.number()]);\nexport function fileSearchServerToolValue1ToJSON(fileSearchServerToolValue1) {\n    return JSON.stringify(FileSearchServerToolValue1$outboundSchema.parse(fileSearchServerToolValue1));\n}\nexport function fileSearchServerToolValue1FromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FileSearchServerToolValue1$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FileSearchServerToolValue1' from JSON`);\n}\n/** @internal */\nexport const FileSearchServerToolValue2$inboundSchema = z.union([\n    z.string(),\n    z.number(),\n    z.boolean(),\n    z.array(z.union([z.string(), z.number()])),\n]);\n/** @internal */\nexport const FileSearchServerToolValue2$outboundSchema = z.union([\n    z.string(),\n    z.number(),\n    z.boolean(),\n    z.array(z.union([z.string(), z.number()])),\n]);\nexport function fileSearchServerToolValue2ToJSON(fileSearchServerToolValue2) {\n    return JSON.stringify(FileSearchServerToolValue2$outboundSchema.parse(fileSearchServerToolValue2));\n}\nexport function fileSearchServerToolValue2FromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FileSearchServerToolValue2$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FileSearchServerToolValue2' from JSON`);\n}\n/** @internal */\nexport const Filters$inboundSchema = z.object({\n    key: z.string(),\n    type: FiltersType$inboundSchema,\n    value: z.union([\n        z.string(),\n        z.number(),\n        z.boolean(),\n        z.array(z.union([z.string(), z.number()])),\n    ]),\n});\n/** @internal */\nexport const Filters$outboundSchema = z\n    .object({\n    key: z.string(),\n    type: FiltersType$outboundSchema,\n    value: z.union([\n        z.string(),\n        z.number(),\n        z.boolean(),\n        z.array(z.union([z.string(), z.number()])),\n    ]),\n});\nexport function filtersToJSON(filters) {\n    return JSON.stringify(Filters$outboundSchema.parse(filters));\n}\nexport function filtersFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Filters$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Filters' from JSON`);\n}\n/** @internal */\nexport const FiltersUnion$inboundSchema = z\n    .union([\n    z.lazy(() => Filters$inboundSchema),\n    CompoundFilter$inboundSchema,\n    z.any(),\n]);\n/** @internal */\nexport const FiltersUnion$outboundSchema = z.union([\n    z.lazy(() => Filters$outboundSchema),\n    CompoundFilter$outboundSchema,\n    z.any(),\n]);\nexport function filtersUnionToJSON(filtersUnion) {\n    return JSON.stringify(FiltersUnion$outboundSchema.parse(filtersUnion));\n}\nexport function filtersUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FiltersUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FiltersUnion' from JSON`);\n}\n/** @internal */\nexport const Ranker$inboundSchema = openEnums\n    .inboundSchema(Ranker);\n/** @internal */\nexport const Ranker$outboundSchema = openEnums\n    .outboundSchema(Ranker);\n/** @internal */\nexport const RankingOptions$inboundSchema = z.object({\n    ranker: Ranker$inboundSchema.optional(),\n    score_threshold: z.number().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"score_threshold\": \"scoreThreshold\",\n    });\n});\n/** @internal */\nexport const RankingOptions$outboundSchema = z.object({\n    ranker: Ranker$outboundSchema.optional(),\n    scoreThreshold: z.number().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        scoreThreshold: \"score_threshold\",\n    });\n});\nexport function rankingOptionsToJSON(rankingOptions) {\n    return JSON.stringify(RankingOptions$outboundSchema.parse(rankingOptions));\n}\nexport function rankingOptionsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => RankingOptions$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'RankingOptions' from JSON`);\n}\n/** @internal */\nexport const FileSearchServerTool$inboundSchema = z.object({\n    filters: z.nullable(z.union([\n        z.lazy(() => Filters$inboundSchema),\n        CompoundFilter$inboundSchema,\n        z.any(),\n    ])).optional(),\n    max_num_results: z.int().optional(),\n    ranking_options: z.lazy(() => RankingOptions$inboundSchema).optional(),\n    type: z.literal(\"file_search\"),\n    vector_store_ids: z.array(z.string()),\n}).transform((v) => {\n    return remap$(v, {\n        \"max_num_results\": \"maxNumResults\",\n        \"ranking_options\": \"rankingOptions\",\n        \"vector_store_ids\": \"vectorStoreIds\",\n    });\n});\n/** @internal */\nexport const FileSearchServerTool$outboundSchema = z.object({\n    filters: z.nullable(z.union([\n        z.lazy(() => Filters$outboundSchema),\n        CompoundFilter$outboundSchema,\n        z.any(),\n    ])).optional(),\n    maxNumResults: z.int().optional(),\n    rankingOptions: z.lazy(() => RankingOptions$outboundSchema).optional(),\n    type: z.literal(\"file_search\"),\n    vectorStoreIds: z.array(z.string()),\n}).transform((v) => {\n    return remap$(v, {\n        maxNumResults: \"max_num_results\",\n        rankingOptions: \"ranking_options\",\n        vectorStoreIds: \"vector_store_ids\",\n    });\n});\nexport function fileSearchServerToolToJSON(fileSearchServerTool) {\n    return JSON.stringify(FileSearchServerTool$outboundSchema.parse(fileSearchServerTool));\n}\nexport function fileSearchServerToolFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FileSearchServerTool$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FileSearchServerTool' from JSON`);\n}\n//# sourceMappingURL=filesearchservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: cc3fdc45a2fd\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ForbiddenResponseErrorData$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n    metadata: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(),\n});\nexport function forbiddenResponseErrorDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ForbiddenResponseErrorData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ForbiddenResponseErrorData' from JSON`);\n}\n//# sourceMappingURL=forbiddenresponseerrordata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: dbec4c78c132\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FormatJsonSchemaConfig$inboundSchema = z.object({\n    description: z.string().optional(),\n    name: z.string(),\n    schema: z.record(z.string(), z.nullable(z.any())),\n    strict: z.nullable(z.boolean()).optional(),\n    type: z.literal(\"json_schema\"),\n});\n/** @internal */\nexport const FormatJsonSchemaConfig$outboundSchema = z.object({\n    description: z.string().optional(),\n    name: z.string(),\n    schema: z.record(z.string(), z.nullable(z.any())),\n    strict: z.nullable(z.boolean()).optional(),\n    type: z.literal(\"json_schema\"),\n});\nexport function formatJsonSchemaConfigToJSON(formatJsonSchemaConfig) {\n    return JSON.stringify(FormatJsonSchemaConfig$outboundSchema.parse(formatJsonSchemaConfig));\n}\nexport function formatJsonSchemaConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FormatJsonSchemaConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FormatJsonSchemaConfig' from JSON`);\n}\n//# sourceMappingURL=formatjsonschemaconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 06c312c9c674\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FormatTextConfig$inboundSchema = z.object({\n    type: z.literal(\"text\"),\n});\n/** @internal */\nexport const FormatTextConfig$outboundSchema = z.object({\n    type: z.literal(\"text\"),\n});\nexport function formatTextConfigToJSON(formatTextConfig) {\n    return JSON.stringify(FormatTextConfig$outboundSchema.parse(formatTextConfig));\n}\nexport function formatTextConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FormatTextConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FormatTextConfig' from JSON`);\n}\n//# sourceMappingURL=formattextconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6e4608e1920c\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { FormatJsonObjectConfig$inboundSchema, FormatJsonObjectConfig$outboundSchema, } from \"./formatjsonobjectconfig.js\";\nimport { FormatJsonSchemaConfig$inboundSchema, FormatJsonSchemaConfig$outboundSchema, } from \"./formatjsonschemaconfig.js\";\nimport { FormatTextConfig$inboundSchema, FormatTextConfig$outboundSchema, } from \"./formattextconfig.js\";\n/** @internal */\nexport const Formats$inboundSchema = discriminatedUnion(\"type\", {\n    text: FormatTextConfig$inboundSchema,\n    json_object: FormatJsonObjectConfig$inboundSchema,\n    json_schema: FormatJsonSchemaConfig$inboundSchema,\n});\n/** @internal */\nexport const Formats$outboundSchema = z\n    .union([\n    FormatTextConfig$outboundSchema,\n    FormatJsonObjectConfig$outboundSchema,\n    FormatJsonSchemaConfig$outboundSchema,\n]);\nexport function formatsToJSON(formats) {\n    return JSON.stringify(Formats$outboundSchema.parse(formats));\n}\nexport function formatsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Formats$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Formats' from JSON`);\n}\n//# sourceMappingURL=formats.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 97fccf1b68ca\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const FrameImageType = {\n    ImageUrl: \"image_url\",\n};\n/**\n * Whether this image represents the first or last frame of the video\n */\nexport const FrameType = {\n    FirstFrame: \"first_frame\",\n    LastFrame: \"last_frame\",\n};\n/** @internal */\nexport const FrameImageImageUrl$outboundSchema = z.object({\n    url: z.string(),\n});\nexport function frameImageImageUrlToJSON(frameImageImageUrl) {\n    return JSON.stringify(FrameImageImageUrl$outboundSchema.parse(frameImageImageUrl));\n}\n/** @internal */\nexport const FrameImageType$outboundSchema = z\n    .enum(FrameImageType);\n/** @internal */\nexport const FrameType$outboundSchema = openEnums\n    .outboundSchema(FrameType);\n/** @internal */\nexport const FrameImage$outboundSchema = z.object({\n    imageUrl: z.lazy(() => FrameImageImageUrl$outboundSchema),\n    type: FrameImageType$outboundSchema,\n    frameType: FrameType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        imageUrl: \"image_url\",\n        frameType: \"frame_type\",\n    });\n});\nexport function frameImageToJSON(frameImage) {\n    return JSON.stringify(FrameImage$outboundSchema.parse(frameImage));\n}\n//# sourceMappingURL=frameimage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 2f23b040fdad\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FunctionCallArgsDeltaEvent$inboundSchema = z.object({\n    delta: z.string(),\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.function_call_arguments.delta\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function functionCallArgsDeltaEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FunctionCallArgsDeltaEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FunctionCallArgsDeltaEvent' from JSON`);\n}\n//# sourceMappingURL=functioncallargsdeltaevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b2142af551f4\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FunctionCallArgsDoneEvent$inboundSchema = z.object({\n    arguments: z.string(),\n    item_id: z.string(),\n    name: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.function_call_arguments.done\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function functionCallArgsDoneEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FunctionCallArgsDoneEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FunctionCallArgsDoneEvent' from JSON`);\n}\n//# sourceMappingURL=functioncallargsdoneevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7e96e10e664b\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const FunctionCallItemType = {\n    FunctionCall: \"function_call\",\n};\n/** @internal */\nexport const FunctionCallItemType$outboundSchema = z.enum(FunctionCallItemType);\n/** @internal */\nexport const FunctionCallItem$outboundSchema = z.object({\n    arguments: z.string(),\n    callId: z.string(),\n    id: z.string(),\n    name: z.string(),\n    namespace: z.string().optional(),\n    status: ToolCallStatus$outboundSchema.optional(),\n    type: FunctionCallItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        callId: \"call_id\",\n    });\n});\nexport function functionCallItemToJSON(functionCallItem) {\n    return JSON.stringify(FunctionCallItem$outboundSchema.parse(functionCallItem));\n}\n//# sourceMappingURL=functioncallitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 279b91cadffe\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { InputFile$outboundSchema, } from \"./inputfile.js\";\nimport { InputText$outboundSchema, } from \"./inputtext.js\";\nexport const FunctionCallOutputItemDetail = {\n    Auto: \"auto\",\n    High: \"high\",\n    Low: \"low\",\n    Original: \"original\",\n};\nexport const FunctionCallOutputItemStatus = {\n    InProgress: \"in_progress\",\n    Completed: \"completed\",\n    Incomplete: \"incomplete\",\n};\nexport const FunctionCallOutputItemTypeFunctionCallOutput = {\n    FunctionCallOutput: \"function_call_output\",\n};\n/** @internal */\nexport const FunctionCallOutputItemDetail$outboundSchema = openEnums.outboundSchema(FunctionCallOutputItemDetail);\n/** @internal */\nexport const FunctionCallOutputItemOutputInputImage$outboundSchema = z.object({\n    detail: FunctionCallOutputItemDetail$outboundSchema,\n    imageUrl: z.nullable(z.string()).optional(),\n    type: z.literal(\"input_image\"),\n}).transform((v) => {\n    return remap$(v, {\n        imageUrl: \"image_url\",\n    });\n});\nexport function functionCallOutputItemOutputInputImageToJSON(functionCallOutputItemOutputInputImage) {\n    return JSON.stringify(FunctionCallOutputItemOutputInputImage$outboundSchema.parse(functionCallOutputItemOutputInputImage));\n}\n/** @internal */\nexport const FunctionCallOutputItemOutputUnion1$outboundSchema = z.union([\n    InputText$outboundSchema,\n    z.lazy(() => FunctionCallOutputItemOutputInputImage$outboundSchema),\n    InputFile$outboundSchema,\n]);\nexport function functionCallOutputItemOutputUnion1ToJSON(functionCallOutputItemOutputUnion1) {\n    return JSON.stringify(FunctionCallOutputItemOutputUnion1$outboundSchema.parse(functionCallOutputItemOutputUnion1));\n}\n/** @internal */\nexport const FunctionCallOutputItemOutputUnion2$outboundSchema = z.union([\n    z.string(),\n    z.array(z.union([\n        InputText$outboundSchema,\n        z.lazy(() => FunctionCallOutputItemOutputInputImage$outboundSchema),\n        InputFile$outboundSchema,\n    ])),\n]);\nexport function functionCallOutputItemOutputUnion2ToJSON(functionCallOutputItemOutputUnion2) {\n    return JSON.stringify(FunctionCallOutputItemOutputUnion2$outboundSchema.parse(functionCallOutputItemOutputUnion2));\n}\n/** @internal */\nexport const FunctionCallOutputItemStatus$outboundSchema = openEnums.outboundSchema(FunctionCallOutputItemStatus);\n/** @internal */\nexport const FunctionCallOutputItemTypeFunctionCallOutput$outboundSchema = z.enum(FunctionCallOutputItemTypeFunctionCallOutput);\n/** @internal */\nexport const FunctionCallOutputItem$outboundSchema = z.object({\n    callId: z.string(),\n    id: z.nullable(z.string()).optional(),\n    output: z.union([\n        z.string(),\n        z.array(z.union([\n            InputText$outboundSchema,\n            z.lazy(() => FunctionCallOutputItemOutputInputImage$outboundSchema),\n            InputFile$outboundSchema,\n        ])),\n    ]),\n    status: z.nullable(FunctionCallOutputItemStatus$outboundSchema).optional(),\n    type: FunctionCallOutputItemTypeFunctionCallOutput$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        callId: \"call_id\",\n    });\n});\nexport function functionCallOutputItemToJSON(functionCallOutputItem) {\n    return JSON.stringify(FunctionCallOutputItem$outboundSchema.parse(functionCallOutputItem));\n}\n//# sourceMappingURL=functioncalloutputitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ffc6f5c74b6c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const Stance$inboundSchema = z.object({\n    model: z.string(),\n    stance: z.string(),\n});\n/** @internal */\nexport const Stance$outboundSchema = z\n    .object({\n    model: z.string(),\n    stance: z.string(),\n});\nexport function stanceToJSON(stance) {\n    return JSON.stringify(Stance$outboundSchema.parse(stance));\n}\nexport function stanceFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Stance$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Stance' from JSON`);\n}\n/** @internal */\nexport const Contradiction$inboundSchema = z\n    .object({\n    stances: z.array(z.lazy(() => Stance$inboundSchema)),\n    topic: z.string(),\n});\n/** @internal */\nexport const Contradiction$outboundSchema = z.object({\n    stances: z.array(z.lazy(() => Stance$outboundSchema)),\n    topic: z.string(),\n});\nexport function contradictionToJSON(contradiction) {\n    return JSON.stringify(Contradiction$outboundSchema.parse(contradiction));\n}\nexport function contradictionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Contradiction$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Contradiction' from JSON`);\n}\n/** @internal */\nexport const PartialCoverage$inboundSchema = z.object({\n    models: z.array(z.string()),\n    point: z.string(),\n});\n/** @internal */\nexport const PartialCoverage$outboundSchema = z.object({\n    models: z.array(z.string()),\n    point: z.string(),\n});\nexport function partialCoverageToJSON(partialCoverage) {\n    return JSON.stringify(PartialCoverage$outboundSchema.parse(partialCoverage));\n}\nexport function partialCoverageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => PartialCoverage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'PartialCoverage' from JSON`);\n}\n/** @internal */\nexport const UniqueInsight$inboundSchema = z\n    .object({\n    insight: z.string(),\n    model: z.string(),\n});\n/** @internal */\nexport const UniqueInsight$outboundSchema = z.object({\n    insight: z.string(),\n    model: z.string(),\n});\nexport function uniqueInsightToJSON(uniqueInsight) {\n    return JSON.stringify(UniqueInsight$outboundSchema.parse(uniqueInsight));\n}\nexport function uniqueInsightFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => UniqueInsight$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'UniqueInsight' from JSON`);\n}\n/** @internal */\nexport const FusionAnalysisResult$inboundSchema = z.object({\n    blind_spots: z.array(z.string()),\n    consensus: z.array(z.string()),\n    contradictions: z.array(z.lazy(() => Contradiction$inboundSchema)),\n    partial_coverage: z.array(z.lazy(() => PartialCoverage$inboundSchema)),\n    unique_insights: z.array(z.lazy(() => UniqueInsight$inboundSchema)),\n}).transform((v) => {\n    return remap$(v, {\n        \"blind_spots\": \"blindSpots\",\n        \"partial_coverage\": \"partialCoverage\",\n        \"unique_insights\": \"uniqueInsights\",\n    });\n});\n/** @internal */\nexport const FusionAnalysisResult$outboundSchema = z.object({\n    blindSpots: z.array(z.string()),\n    consensus: z.array(z.string()),\n    contradictions: z.array(z.lazy(() => Contradiction$outboundSchema)),\n    partialCoverage: z.array(z.lazy(() => PartialCoverage$outboundSchema)),\n    uniqueInsights: z.array(z.lazy(() => UniqueInsight$outboundSchema)),\n}).transform((v) => {\n    return remap$(v, {\n        blindSpots: \"blind_spots\",\n        partialCoverage: \"partial_coverage\",\n        uniqueInsights: \"unique_insights\",\n    });\n});\nexport function fusionAnalysisResultToJSON(fusionAnalysisResult) {\n    return JSON.stringify(FusionAnalysisResult$outboundSchema.parse(fusionAnalysisResult));\n}\nexport function fusionAnalysisResultFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FusionAnalysisResult$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FusionAnalysisResult' from JSON`);\n}\n//# sourceMappingURL=fusionanalysisresult.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0df2084e1a56\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { FusionAnalysisResult$inboundSchema, } from \"./fusionanalysisresult.js\";\n/** @internal */\nexport const FusionCallAnalysisCompletedEvent$inboundSchema = z.object({\n    analysis: FusionAnalysisResult$inboundSchema,\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.fusion_call.analysis.completed\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function fusionCallAnalysisCompletedEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FusionCallAnalysisCompletedEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FusionCallAnalysisCompletedEvent' from JSON`);\n}\n//# sourceMappingURL=fusioncallanalysiscompletedevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 13da94fa473e\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FusionCallAnalysisInProgressEvent$inboundSchema = z.object({\n    item_id: z.string(),\n    judge_model: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.fusion_call.analysis.in_progress\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"judge_model\": \"judgeModel\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function fusionCallAnalysisInProgressEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FusionCallAnalysisInProgressEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FusionCallAnalysisInProgressEvent' from JSON`);\n}\n//# sourceMappingURL=fusioncallanalysisinprogressevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 54f2c88f75f7\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FusionCallCompletedEvent$inboundSchema = z.object({\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.fusion_call.completed\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function fusionCallCompletedEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FusionCallCompletedEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FusionCallCompletedEvent' from JSON`);\n}\n//# sourceMappingURL=fusioncallcompletedevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 623b79a90448\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FusionCallInProgressEvent$inboundSchema = z.object({\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.fusion_call.in_progress\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function fusionCallInProgressEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FusionCallInProgressEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FusionCallInProgressEvent' from JSON`);\n}\n//# sourceMappingURL=fusioncallinprogressevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 58f0673347e7\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FusionCallPanelAddedEvent$inboundSchema = z.object({\n    item_id: z.string(),\n    model: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.fusion_call.panel.added\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function fusionCallPanelAddedEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FusionCallPanelAddedEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FusionCallPanelAddedEvent' from JSON`);\n}\n//# sourceMappingURL=fusioncallpaneladdedevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3578a5986185\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FusionCallPanelCompletedEvent$inboundSchema = z.object({\n    content: z.string(),\n    item_id: z.string(),\n    model: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.fusion_call.panel.completed\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function fusionCallPanelCompletedEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FusionCallPanelCompletedEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FusionCallPanelCompletedEvent' from JSON`);\n}\n//# sourceMappingURL=fusioncallpanelcompletedevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 055e9ca60301\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FusionCallPanelDeltaEvent$inboundSchema = z.object({\n    delta: z.string(),\n    item_id: z.string(),\n    model: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.fusion_call.panel.delta\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function fusionCallPanelDeltaEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FusionCallPanelDeltaEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FusionCallPanelDeltaEvent' from JSON`);\n}\n//# sourceMappingURL=fusioncallpaneldeltaevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 44d86c32e741\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FusionCallPanelFailedEvent$inboundSchema = z.object({\n    error: z.string(),\n    item_id: z.string(),\n    model: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    status_code: z.int().optional(),\n    type: z.literal(\"response.fusion_call.panel.failed\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n        \"status_code\": \"statusCode\",\n    });\n});\nexport function fusionCallPanelFailedEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FusionCallPanelFailedEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FusionCallPanelFailedEvent' from JSON`);\n}\n//# sourceMappingURL=fusioncallpanelfailedevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9c7b9ba8a22c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const FusionCallPanelReasoningDeltaEvent$inboundSchema = z.object({\n    delta: z.string(),\n    item_id: z.string(),\n    model: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.fusion_call.panel.reasoning.delta\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function fusionCallPanelReasoningDeltaEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FusionCallPanelReasoningDeltaEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FusionCallPanelReasoningDeltaEvent' from JSON`);\n}\n//# sourceMappingURL=fusioncallpanelreasoningdeltaevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 500c34bd192b\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Reasoning effort level for panelist and judge inner calls.\n */\nexport const FusionServerToolConfigEffort = {\n    Xhigh: \"xhigh\",\n    High: \"high\",\n    Medium: \"medium\",\n    Low: \"low\",\n    Minimal: \"minimal\",\n    None: \"none\",\n};\n/** @internal */\nexport const FusionServerToolConfigEffort$outboundSchema = openEnums.outboundSchema(FusionServerToolConfigEffort);\n/** @internal */\nexport const FusionServerToolConfigReasoning$outboundSchema = z.object({\n    effort: FusionServerToolConfigEffort$outboundSchema.optional(),\n    maxTokens: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        maxTokens: \"max_tokens\",\n    });\n});\nexport function fusionServerToolConfigReasoningToJSON(fusionServerToolConfigReasoning) {\n    return JSON.stringify(FusionServerToolConfigReasoning$outboundSchema.parse(fusionServerToolConfigReasoning));\n}\n/** @internal */\nexport const FusionServerToolConfigTool$outboundSchema = z.object({\n    parameters: z.record(z.string(), z.nullable(z.any())).optional(),\n    type: z.string(),\n});\nexport function fusionServerToolConfigToolToJSON(fusionServerToolConfigTool) {\n    return JSON.stringify(FusionServerToolConfigTool$outboundSchema.parse(fusionServerToolConfigTool));\n}\n/** @internal */\nexport const FusionServerToolConfig$outboundSchema = z.object({\n    analysisModels: z.array(z.string()).optional(),\n    maxCompletionTokens: z.int().optional(),\n    maxToolCalls: z.int().optional(),\n    model: z.string().optional(),\n    reasoning: z.lazy(() => FusionServerToolConfigReasoning$outboundSchema)\n        .optional(),\n    temperature: z.number().optional(),\n    tools: z.array(z.lazy(() => FusionServerToolConfigTool$outboundSchema))\n        .optional(),\n}).transform((v) => {\n    return remap$(v, {\n        analysisModels: \"analysis_models\",\n        maxCompletionTokens: \"max_completion_tokens\",\n        maxToolCalls: \"max_tool_calls\",\n    });\n});\nexport function fusionServerToolConfigToJSON(fusionServerToolConfig) {\n    return JSON.stringify(FusionServerToolConfig$outboundSchema.parse(fusionServerToolConfig));\n}\n//# sourceMappingURL=fusionservertoolconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 01d346f44f6d\n */\nimport * as z from \"zod/v4\";\nimport { FusionServerToolConfig$outboundSchema, } from \"./fusionservertoolconfig.js\";\n/** @internal */\nexport const FusionServerToolOpenRouter$outboundSchema = z.object({\n    parameters: FusionServerToolConfig$outboundSchema.optional(),\n    type: z.literal(\"openrouter:fusion\"),\n});\nexport function fusionServerToolOpenRouterToJSON(fusionServerToolOpenRouter) {\n    return JSON.stringify(FusionServerToolOpenRouter$outboundSchema.parse(fusionServerToolOpenRouter));\n}\n//# sourceMappingURL=fusionservertoolopenrouter.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f55aeaffdbd5\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const Input2$inboundSchema = z.object({\n    messages: z.array(z.nullable(z.any())),\n});\nexport function input2FromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Input2$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Input2' from JSON`);\n}\n/** @internal */\nexport const Input1$inboundSchema = z.object({\n    prompt: z.string(),\n});\nexport function input1FromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Input1$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Input1' from JSON`);\n}\n/** @internal */\nexport const InputUnion$inboundSchema = z.union([z.lazy(() => Input1$inboundSchema), z.lazy(() => Input2$inboundSchema)]);\nexport function inputUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => InputUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'InputUnion' from JSON`);\n}\n/** @internal */\nexport const GenerationContentDataOutput$inboundSchema = z.object({\n    completion: z.nullable(z.string()),\n    reasoning: z.nullable(z.string()),\n});\nexport function generationContentDataOutputFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GenerationContentDataOutput$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GenerationContentDataOutput' from JSON`);\n}\n/** @internal */\nexport const GenerationContentData$inboundSchema = z.object({\n    input: z.union([\n        z.lazy(() => Input1$inboundSchema),\n        z.lazy(() => Input2$inboundSchema),\n    ]),\n    output: z.lazy(() => GenerationContentDataOutput$inboundSchema),\n});\nexport function generationContentDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GenerationContentData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GenerationContentData' from JSON`);\n}\n//# sourceMappingURL=generationcontentdata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 88f85adb1a59\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { GenerationContentData$inboundSchema, } from \"./generationcontentdata.js\";\n/** @internal */\nexport const GenerationContentResponse$inboundSchema = z.object({\n    data: GenerationContentData$inboundSchema,\n});\nexport function generationContentResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GenerationContentResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GenerationContentResponse' from JSON`);\n}\n//# sourceMappingURL=generationcontentresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7427d17a27bc\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Name of the provider\n */\nexport const ProviderResponseProviderName = {\n    AnyScale: \"AnyScale\",\n    Atoma: \"Atoma\",\n    CentML: \"Cent-ML\",\n    CrofAI: \"CrofAI\",\n    Enfer: \"Enfer\",\n    GoPomelo: \"GoPomelo\",\n    HuggingFace: \"HuggingFace\",\n    Hyperbolic: \"Hyperbolic\",\n    Hyperbolic2: \"Hyperbolic 2\",\n    InoCloud: \"InoCloud\",\n    Kluster: \"Kluster\",\n    Lambda: \"Lambda\",\n    Lepton: \"Lepton\",\n    Lynn2: \"Lynn 2\",\n    Lynn: \"Lynn\",\n    Mancer: \"Mancer\",\n    Meta: \"Meta\",\n    Modal: \"Modal\",\n    Nineteen: \"Nineteen\",\n    OctoAI: \"OctoAI\",\n    Recursal: \"Recursal\",\n    Reflection: \"Reflection\",\n    Replicate: \"Replicate\",\n    SambaNova2: \"SambaNova 2\",\n    SFCompute: \"SF Compute\",\n    Targon: \"Targon\",\n    Together2: \"Together 2\",\n    Ubicloud: \"Ubicloud\",\n    OneDotAI: \"01.AI\",\n    AkashML: \"AkashML\",\n    Ai21: \"AI21\",\n    AionLabs: \"AionLabs\",\n    Alibaba: \"Alibaba\",\n    Ambient: \"Ambient\",\n    Baidu: \"Baidu\",\n    AmazonBedrock: \"Amazon Bedrock\",\n    AmazonNova: \"Amazon Nova\",\n    Anthropic: \"Anthropic\",\n    ArceeAI: \"Arcee AI\",\n    AtlasCloud: \"AtlasCloud\",\n    Avian: \"Avian\",\n    Azure: \"Azure\",\n    BaseTen: \"BaseTen\",\n    BytePlus: \"BytePlus\",\n    BlackForestLabs: \"Black Forest Labs\",\n    Cerebras: \"Cerebras\",\n    Chutes: \"Chutes\",\n    Cirrascale: \"Cirrascale\",\n    Clarifai: \"Clarifai\",\n    Cloudflare: \"Cloudflare\",\n    Cohere: \"Cohere\",\n    Crucible: \"Crucible\",\n    Crusoe: \"Crusoe\",\n    Darkbloom: \"Darkbloom\",\n    Decart: \"Decart\",\n    DeepInfra: \"DeepInfra\",\n    DeepSeek: \"DeepSeek\",\n    DekaLLM: \"DekaLLM\",\n    DigitalOcean: \"DigitalOcean\",\n    Featherless: \"Featherless\",\n    Fireworks: \"Fireworks\",\n    Friendli: \"Friendli\",\n    GMICloud: \"GMICloud\",\n    Google: \"Google\",\n    GoogleAIStudio: \"Google AI Studio\",\n    Groq: \"Groq\",\n    Inception: \"Inception\",\n    Inceptron: \"Inceptron\",\n    InferenceNet: \"InferenceNet\",\n    Ionstream: \"Ionstream\",\n    Infermatic: \"Infermatic\",\n    IoNet: \"Io Net\",\n    Inflection: \"Inflection\",\n    Liquid: \"Liquid\",\n    Mara: \"Mara\",\n    Mancer2: \"Mancer 2\",\n    Minimax: \"Minimax\",\n    ModelRun: \"ModelRun\",\n    Mistral: \"Mistral\",\n    Modular: \"Modular\",\n    MoonshotAI: \"Moonshot AI\",\n    Morph: \"Morph\",\n    NCompass: \"NCompass\",\n    Nebius: \"Nebius\",\n    NexAGI: \"Nex AGI\",\n    NextBit: \"NextBit\",\n    Novita: \"Novita\",\n    Nvidia: \"Nvidia\",\n    OpenAI: \"OpenAI\",\n    OpenInference: \"OpenInference\",\n    Parasail: \"Parasail\",\n    Poolside: \"Poolside\",\n    Perceptron: \"Perceptron\",\n    Perplexity: \"Perplexity\",\n    Phala: \"Phala\",\n    Recraft: \"Recraft\",\n    Reka: \"Reka\",\n    Relace: \"Relace\",\n    SambaNova: \"SambaNova\",\n    Seed: \"Seed\",\n    SiliconFlow: \"SiliconFlow\",\n    Sourceful: \"Sourceful\",\n    StepFun: \"StepFun\",\n    Stealth: \"Stealth\",\n    StreamLake: \"StreamLake\",\n    Switchpoint: \"Switchpoint\",\n    Together: \"Together\",\n    Upstage: \"Upstage\",\n    Venice: \"Venice\",\n    Wafer: \"Wafer\",\n    WandB: \"WandB\",\n    Xiaomi: \"Xiaomi\",\n    XAI: \"xAI\",\n    ZAi: \"Z.AI\",\n    FakeProvider: \"FakeProvider\",\n};\n/** @internal */\nexport const ProviderResponseProviderName$inboundSchema = openEnums.inboundSchema(ProviderResponseProviderName);\n/** @internal */\nexport const ProviderResponse$inboundSchema = z.object({\n    endpoint_id: z.string().optional(),\n    id: z.string().optional(),\n    is_byok: z.boolean().optional(),\n    latency: z.number().optional(),\n    model_permaslug: z.string().optional(),\n    provider_name: ProviderResponseProviderName$inboundSchema.optional(),\n    status: z.nullable(z.int()),\n}).transform((v) => {\n    return remap$(v, {\n        \"endpoint_id\": \"endpointId\",\n        \"is_byok\": \"isByok\",\n        \"model_permaslug\": \"modelPermaslug\",\n        \"provider_name\": \"providerName\",\n    });\n});\nexport function providerResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ProviderResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ProviderResponse' from JSON`);\n}\n//# sourceMappingURL=providerresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f9109ae06502\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { ProviderResponse$inboundSchema, } from \"./providerresponse.js\";\n/**\n * Type of API used for the generation\n */\nexport const ApiType = {\n    Completions: \"completions\",\n    Embeddings: \"embeddings\",\n    Rerank: \"rerank\",\n    Tts: \"tts\",\n    Stt: \"stt\",\n    Video: \"video\",\n    Image: \"image\",\n};\n/**\n * The data region this generation was routed through. 'europe' for EU-routed requests, 'global' otherwise.\n */\nexport const DataRegion = {\n    Global: \"global\",\n    Europe: \"europe\",\n};\n/** @internal */\nexport const ApiType$inboundSchema = openEnums\n    .inboundSchema(ApiType);\n/** @internal */\nexport const DataRegion$inboundSchema = openEnums.inboundSchema(DataRegion);\n/** @internal */\nexport const GenerationResponseData$inboundSchema = z.object({\n    api_type: z.nullable(ApiType$inboundSchema),\n    app_id: z.nullable(z.int()),\n    cache_discount: z.nullable(z.number()),\n    cancelled: z.nullable(z.boolean()),\n    created_at: z.string(),\n    data_region: DataRegion$inboundSchema,\n    external_user: z.nullable(z.string()),\n    finish_reason: z.nullable(z.string()),\n    generation_time: z.nullable(z.number()),\n    http_referer: z.nullable(z.string()),\n    id: z.string(),\n    is_byok: z.boolean(),\n    latency: z.nullable(z.number()),\n    model: z.string(),\n    moderation_latency: z.nullable(z.number()),\n    native_finish_reason: z.nullable(z.string()),\n    native_tokens_cached: z.nullable(z.int()),\n    native_tokens_completion: z.nullable(z.int()),\n    native_tokens_completion_images: z.nullable(z.int()),\n    native_tokens_prompt: z.nullable(z.int()),\n    native_tokens_reasoning: z.nullable(z.int()),\n    num_fetches: z.nullable(z.int()),\n    num_input_audio_prompt: z.nullable(z.int()),\n    num_media_completion: z.nullable(z.int()),\n    num_media_prompt: z.nullable(z.int()),\n    num_search_results: z.nullable(z.int()),\n    origin: z.string(),\n    preset_id: z.nullable(z.string()),\n    provider_name: z.nullable(z.string()),\n    provider_responses: z.nullable(z.array(ProviderResponse$inboundSchema)),\n    request_id: z.nullable(z.string()).optional(),\n    response_cache_source_id: z.nullable(z.string()).optional(),\n    router: z.nullable(z.string()),\n    service_tier: z.nullable(z.string()),\n    session_id: z.nullable(z.string()).optional(),\n    streamed: z.nullable(z.boolean()),\n    tokens_completion: z.nullable(z.int()),\n    tokens_prompt: z.nullable(z.int()),\n    total_cost: z.number(),\n    upstream_id: z.nullable(z.string()),\n    upstream_inference_cost: z.nullable(z.number()),\n    usage: z.number(),\n    user_agent: z.nullable(z.string()),\n    web_search_engine: z.nullable(z.string()),\n}).transform((v) => {\n    return remap$(v, {\n        \"api_type\": \"apiType\",\n        \"app_id\": \"appId\",\n        \"cache_discount\": \"cacheDiscount\",\n        \"created_at\": \"createdAt\",\n        \"data_region\": \"dataRegion\",\n        \"external_user\": \"externalUser\",\n        \"finish_reason\": \"finishReason\",\n        \"generation_time\": \"generationTime\",\n        \"http_referer\": \"httpReferer\",\n        \"is_byok\": \"isByok\",\n        \"moderation_latency\": \"moderationLatency\",\n        \"native_finish_reason\": \"nativeFinishReason\",\n        \"native_tokens_cached\": \"nativeTokensCached\",\n        \"native_tokens_completion\": \"nativeTokensCompletion\",\n        \"native_tokens_completion_images\": \"nativeTokensCompletionImages\",\n        \"native_tokens_prompt\": \"nativeTokensPrompt\",\n        \"native_tokens_reasoning\": \"nativeTokensReasoning\",\n        \"num_fetches\": \"numFetches\",\n        \"num_input_audio_prompt\": \"numInputAudioPrompt\",\n        \"num_media_completion\": \"numMediaCompletion\",\n        \"num_media_prompt\": \"numMediaPrompt\",\n        \"num_search_results\": \"numSearchResults\",\n        \"preset_id\": \"presetId\",\n        \"provider_name\": \"providerName\",\n        \"provider_responses\": \"providerResponses\",\n        \"request_id\": \"requestId\",\n        \"response_cache_source_id\": \"responseCacheSourceId\",\n        \"service_tier\": \"serviceTier\",\n        \"session_id\": \"sessionId\",\n        \"tokens_completion\": \"tokensCompletion\",\n        \"tokens_prompt\": \"tokensPrompt\",\n        \"total_cost\": \"totalCost\",\n        \"upstream_id\": \"upstreamId\",\n        \"upstream_inference_cost\": \"upstreamInferenceCost\",\n        \"user_agent\": \"userAgent\",\n        \"web_search_engine\": \"webSearchEngine\",\n    });\n});\nexport function generationResponseDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GenerationResponseData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GenerationResponseData' from JSON`);\n}\n/** @internal */\nexport const GenerationResponse$inboundSchema = z.object({\n    data: z.lazy(() => GenerationResponseData$inboundSchema),\n});\nexport function generationResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GenerationResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GenerationResponse' from JSON`);\n}\n//# sourceMappingURL=generationresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: c83ed9fbd575\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { BYOKKey$inboundSchema } from \"./byokkey.js\";\n/** @internal */\nexport const GetBYOKKeyResponse$inboundSchema = z.object({\n    data: BYOKKey$inboundSchema,\n});\nexport function getBYOKKeyResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GetBYOKKeyResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GetBYOKKeyResponse' from JSON`);\n}\n//# sourceMappingURL=getbyokkeyresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3103b978871a\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { Guardrail$inboundSchema } from \"./guardrail.js\";\n/** @internal */\nexport const GetGuardrailResponse$inboundSchema = z.object({\n    data: Guardrail$inboundSchema,\n});\nexport function getGuardrailResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GetGuardrailResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GetGuardrailResponse' from JSON`);\n}\n//# sourceMappingURL=getguardrailresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 159f70742f54\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityDestination$inboundSchema, } from \"./observabilitydestination.js\";\n/** @internal */\nexport const GetObservabilityDestinationResponse$inboundSchema = z.object({\n    data: ObservabilityDestination$inboundSchema,\n});\nexport function getObservabilityDestinationResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GetObservabilityDestinationResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GetObservabilityDestinationResponse' from JSON`);\n}\n//# sourceMappingURL=getobservabilitydestinationresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f3c5ddbd4b26\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { PresetWithDesignatedVersion$inboundSchema, } from \"./presetwithdesignatedversion.js\";\n/** @internal */\nexport const GetPresetResponse$inboundSchema = z.object({\n    data: PresetWithDesignatedVersion$inboundSchema,\n});\nexport function getPresetResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GetPresetResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GetPresetResponse' from JSON`);\n}\n//# sourceMappingURL=getpresetresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 28f0dd1227c4\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { PresetDesignatedVersion$inboundSchema, } from \"./presetdesignatedversion.js\";\n/** @internal */\nexport const GetPresetVersionResponse$inboundSchema = z.object({\n    data: z.nullable(PresetDesignatedVersion$inboundSchema),\n});\nexport function getPresetVersionResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GetPresetVersionResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GetPresetVersionResponse' from JSON`);\n}\n//# sourceMappingURL=getpresetversionresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 2315ba7fb584\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { Workspace$inboundSchema } from \"./workspace.js\";\n/** @internal */\nexport const GetWorkspaceResponse$inboundSchema = z.object({\n    data: Workspace$inboundSchema,\n});\nexport function getWorkspaceResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GetWorkspaceResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GetWorkspaceResponse' from JSON`);\n}\n//# sourceMappingURL=getworkspaceresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: fe8d977c7dca\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ImageGenCallCompletedEvent$inboundSchema = z.object({\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.image_generation_call.completed\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function imageGenCallCompletedEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ImageGenCallCompletedEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ImageGenCallCompletedEvent' from JSON`);\n}\n//# sourceMappingURL=imagegencallcompletedevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f2806bd9c69c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ImageGenCallGeneratingEvent$inboundSchema = z.object({\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.image_generation_call.generating\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function imageGenCallGeneratingEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ImageGenCallGeneratingEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ImageGenCallGeneratingEvent' from JSON`);\n}\n//# sourceMappingURL=imagegencallgeneratingevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f9385ea6a417\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ImageGenCallInProgressEvent$inboundSchema = z.object({\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.image_generation_call.in_progress\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function imageGenCallInProgressEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ImageGenCallInProgressEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ImageGenCallInProgressEvent' from JSON`);\n}\n//# sourceMappingURL=imagegencallinprogressevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: db1f02788378\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ImageGenCallPartialImageEvent$inboundSchema = z.object({\n    item_id: z.string(),\n    output_index: z.int(),\n    partial_image_b64: z.string(),\n    partial_image_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.image_generation_call.partial_image\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"partial_image_b64\": \"partialImageB64\",\n        \"partial_image_index\": \"partialImageIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function imageGenCallPartialImageEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ImageGenCallPartialImageEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ImageGenCallPartialImageEvent' from JSON`);\n}\n//# sourceMappingURL=imagegencallpartialimageevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1efbad50f534\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const Background = {\n    Transparent: \"transparent\",\n    Opaque: \"opaque\",\n    Auto: \"auto\",\n};\nexport const InputFidelity = {\n    High: \"high\",\n    Low: \"low\",\n};\nexport const ModelEnum = {\n    GptImage1: \"gpt-image-1\",\n    GptImage1Mini: \"gpt-image-1-mini\",\n};\nexport const Moderation = {\n    Auto: \"auto\",\n    Low: \"low\",\n};\nexport const OutputFormat = {\n    Png: \"png\",\n    Webp: \"webp\",\n    Jpeg: \"jpeg\",\n};\nexport const Quality = {\n    Low: \"low\",\n    Medium: \"medium\",\n    High: \"high\",\n    Auto: \"auto\",\n};\nexport const Size = {\n    OneThousandAndTwentyFourx1024: \"1024x1024\",\n    OneThousandAndTwentyFourx1536: \"1024x1536\",\n    OneThousandFiveHundredAndThirtySixx1024: \"1536x1024\",\n    Auto: \"auto\",\n};\n/** @internal */\nexport const Background$inboundSchema = openEnums.inboundSchema(Background);\n/** @internal */\nexport const Background$outboundSchema = openEnums.outboundSchema(Background);\n/** @internal */\nexport const InputFidelity$inboundSchema = openEnums.inboundSchema(InputFidelity);\n/** @internal */\nexport const InputFidelity$outboundSchema = openEnums.outboundSchema(InputFidelity);\n/** @internal */\nexport const InputImageMask$inboundSchema = z.object({\n    file_id: z.string().optional(),\n    image_url: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"file_id\": \"fileId\",\n        \"image_url\": \"imageUrl\",\n    });\n});\n/** @internal */\nexport const InputImageMask$outboundSchema = z.object({\n    fileId: z.string().optional(),\n    imageUrl: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        fileId: \"file_id\",\n        imageUrl: \"image_url\",\n    });\n});\nexport function inputImageMaskToJSON(inputImageMask) {\n    return JSON.stringify(InputImageMask$outboundSchema.parse(inputImageMask));\n}\nexport function inputImageMaskFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => InputImageMask$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'InputImageMask' from JSON`);\n}\n/** @internal */\nexport const ModelEnum$inboundSchema = openEnums\n    .inboundSchema(ModelEnum);\n/** @internal */\nexport const ModelEnum$outboundSchema = openEnums\n    .outboundSchema(ModelEnum);\n/** @internal */\nexport const Moderation$inboundSchema = openEnums.inboundSchema(Moderation);\n/** @internal */\nexport const Moderation$outboundSchema = openEnums.outboundSchema(Moderation);\n/** @internal */\nexport const OutputFormat$inboundSchema = openEnums.inboundSchema(OutputFormat);\n/** @internal */\nexport const OutputFormat$outboundSchema = openEnums.outboundSchema(OutputFormat);\n/** @internal */\nexport const Quality$inboundSchema = openEnums\n    .inboundSchema(Quality);\n/** @internal */\nexport const Quality$outboundSchema = openEnums\n    .outboundSchema(Quality);\n/** @internal */\nexport const Size$inboundSchema = openEnums\n    .inboundSchema(Size);\n/** @internal */\nexport const Size$outboundSchema = openEnums\n    .outboundSchema(Size);\n/** @internal */\nexport const ImageGenerationServerTool$inboundSchema = z.object({\n    background: Background$inboundSchema.optional(),\n    input_fidelity: z.nullable(InputFidelity$inboundSchema).optional(),\n    input_image_mask: z.lazy(() => InputImageMask$inboundSchema).optional(),\n    model: ModelEnum$inboundSchema.optional(),\n    moderation: Moderation$inboundSchema.optional(),\n    output_compression: z.int().optional(),\n    output_format: OutputFormat$inboundSchema.optional(),\n    partial_images: z.int().optional(),\n    quality: Quality$inboundSchema.optional(),\n    size: Size$inboundSchema.optional(),\n    type: z.literal(\"image_generation\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"input_fidelity\": \"inputFidelity\",\n        \"input_image_mask\": \"inputImageMask\",\n        \"output_compression\": \"outputCompression\",\n        \"output_format\": \"outputFormat\",\n        \"partial_images\": \"partialImages\",\n    });\n});\n/** @internal */\nexport const ImageGenerationServerTool$outboundSchema = z.object({\n    background: Background$outboundSchema.optional(),\n    inputFidelity: z.nullable(InputFidelity$outboundSchema).optional(),\n    inputImageMask: z.lazy(() => InputImageMask$outboundSchema).optional(),\n    model: ModelEnum$outboundSchema.optional(),\n    moderation: Moderation$outboundSchema.optional(),\n    outputCompression: z.int().optional(),\n    outputFormat: OutputFormat$outboundSchema.optional(),\n    partialImages: z.int().optional(),\n    quality: Quality$outboundSchema.optional(),\n    size: Size$outboundSchema.optional(),\n    type: z.literal(\"image_generation\"),\n}).transform((v) => {\n    return remap$(v, {\n        inputFidelity: \"input_fidelity\",\n        inputImageMask: \"input_image_mask\",\n        outputCompression: \"output_compression\",\n        outputFormat: \"output_format\",\n        partialImages: \"partial_images\",\n    });\n});\nexport function imageGenerationServerToolToJSON(imageGenerationServerTool) {\n    return JSON.stringify(ImageGenerationServerTool$outboundSchema.parse(imageGenerationServerTool));\n}\nexport function imageGenerationServerToolFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ImageGenerationServerTool$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ImageGenerationServerTool' from JSON`);\n}\n//# sourceMappingURL=imagegenerationservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1d922f86c2f4\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const Reason = {\n    MaxOutputTokens: \"max_output_tokens\",\n    ContentFilter: \"content_filter\",\n};\n/** @internal */\nexport const Reason$inboundSchema = openEnums\n    .inboundSchema(Reason);\n/** @internal */\nexport const IncompleteDetails$inboundSchema = z.object({\n    reason: Reason$inboundSchema.optional(),\n});\nexport function incompleteDetailsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => IncompleteDetails$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'IncompleteDetails' from JSON`);\n}\n//# sourceMappingURL=incompletedetails.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 78f212025019\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { InputAudio$outboundSchema, } from \"./inputaudio.js\";\nimport { InputFile$outboundSchema, } from \"./inputfile.js\";\nimport { InputText$outboundSchema, } from \"./inputtext.js\";\nimport { InputVideo$outboundSchema, } from \"./inputvideo.js\";\nexport const InputMessageItemDetail = {\n    Auto: \"auto\",\n    High: \"high\",\n    Low: \"low\",\n    Original: \"original\",\n};\nexport const InputMessageItemRoleDeveloper = {\n    Developer: \"developer\",\n};\nexport const InputMessageItemRoleSystem = {\n    System: \"system\",\n};\nexport const InputMessageItemRoleUser = {\n    User: \"user\",\n};\nexport const InputMessageItemTypeMessage = {\n    Message: \"message\",\n};\n/** @internal */\nexport const InputMessageItemDetail$outboundSchema = openEnums.outboundSchema(InputMessageItemDetail);\n/** @internal */\nexport const InputMessageItemContentInputImage$outboundSchema = z.object({\n    detail: InputMessageItemDetail$outboundSchema,\n    imageUrl: z.nullable(z.string()).optional(),\n    type: z.literal(\"input_image\"),\n}).transform((v) => {\n    return remap$(v, {\n        imageUrl: \"image_url\",\n    });\n});\nexport function inputMessageItemContentInputImageToJSON(inputMessageItemContentInputImage) {\n    return JSON.stringify(InputMessageItemContentInputImage$outboundSchema.parse(inputMessageItemContentInputImage));\n}\n/** @internal */\nexport const InputMessageItemContentUnion$outboundSchema = z.union([\n    InputText$outboundSchema,\n    z.lazy(() => InputMessageItemContentInputImage$outboundSchema),\n    InputFile$outboundSchema,\n    InputAudio$outboundSchema,\n    InputVideo$outboundSchema,\n]);\nexport function inputMessageItemContentUnionToJSON(inputMessageItemContentUnion) {\n    return JSON.stringify(InputMessageItemContentUnion$outboundSchema.parse(inputMessageItemContentUnion));\n}\n/** @internal */\nexport const InputMessageItemRoleDeveloper$outboundSchema = z.enum(InputMessageItemRoleDeveloper);\n/** @internal */\nexport const InputMessageItemRoleSystem$outboundSchema = z.enum(InputMessageItemRoleSystem);\n/** @internal */\nexport const InputMessageItemRoleUser$outboundSchema = z.enum(InputMessageItemRoleUser);\n/** @internal */\nexport const InputMessageItemRoleUnion$outboundSchema = z.union([\n    InputMessageItemRoleUser$outboundSchema,\n    InputMessageItemRoleSystem$outboundSchema,\n    InputMessageItemRoleDeveloper$outboundSchema,\n]);\nexport function inputMessageItemRoleUnionToJSON(inputMessageItemRoleUnion) {\n    return JSON.stringify(InputMessageItemRoleUnion$outboundSchema.parse(inputMessageItemRoleUnion));\n}\n/** @internal */\nexport const InputMessageItemTypeMessage$outboundSchema = z.enum(InputMessageItemTypeMessage);\n/** @internal */\nexport const InputMessageItem$outboundSchema = z.object({\n    content: z.nullable(z.array(z.union([\n        InputText$outboundSchema,\n        z.lazy(() => InputMessageItemContentInputImage$outboundSchema),\n        InputFile$outboundSchema,\n        InputAudio$outboundSchema,\n        InputVideo$outboundSchema,\n    ]))).optional(),\n    id: z.string().optional(),\n    role: z.union([\n        InputMessageItemRoleUser$outboundSchema,\n        InputMessageItemRoleSystem$outboundSchema,\n        InputMessageItemRoleDeveloper$outboundSchema,\n    ]),\n    type: InputMessageItemTypeMessage$outboundSchema.optional(),\n});\nexport function inputMessageItemToJSON(inputMessageItem) {\n    return JSON.stringify(InputMessageItem$outboundSchema.parse(inputMessageItem));\n}\n//# sourceMappingURL=inputmessageitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 771d5d4c91ec\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const InputModality = {\n    Text: \"text\",\n    Image: \"image\",\n    File: \"file\",\n    Audio: \"audio\",\n    Video: \"video\",\n};\n/** @internal */\nexport const InputModality$inboundSchema = openEnums.inboundSchema(InputModality);\n//# sourceMappingURL=inputmodality.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0e74e81647ab\n */\nimport * as z from \"zod/v4\";\nimport { ContentPartAudio$outboundSchema, } from \"./contentpartaudio.js\";\nimport { ContentPartImage$outboundSchema, } from \"./contentpartimage.js\";\nimport { ContentPartVideo$outboundSchema, } from \"./contentpartvideo.js\";\n/** @internal */\nexport const InputReference$outboundSchema = z.union([\n    ContentPartAudio$outboundSchema,\n    ContentPartImage$outboundSchema,\n    ContentPartVideo$outboundSchema,\n]);\nexport function inputReferenceToJSON(inputReference) {\n    return JSON.stringify(InputReference$outboundSchema.parse(inputReference));\n}\n//# sourceMappingURL=inputreference.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ccbe6ae60edc\n */\nimport * as z from \"zod/v4\";\nexport const ItemReferenceItemType = {\n    ItemReference: \"item_reference\",\n};\n/** @internal */\nexport const ItemReferenceItemType$outboundSchema = z.enum(ItemReferenceItemType);\n/** @internal */\nexport const ItemReferenceItem$outboundSchema = z.object({\n    id: z.string(),\n    type: ItemReferenceItemType$outboundSchema,\n});\nexport function itemReferenceItemToJSON(itemReferenceItem) {\n    return JSON.stringify(ItemReferenceItem$outboundSchema.parse(itemReferenceItem));\n}\n//# sourceMappingURL=itemreferenceitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 01cd50ccbc7a\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const TypeExec = {\n    Exec: \"exec\",\n};\nexport const TypeLocalShellCall = {\n    LocalShellCall: \"local_shell_call\",\n};\n/** @internal */\nexport const TypeExec$outboundSchema = z.enum(TypeExec);\n/** @internal */\nexport const LocalShellCallItemAction$outboundSchema = z.object({\n    command: z.array(z.string()),\n    env: z.record(z.string(), z.string()),\n    timeoutMs: z.nullable(z.int()).optional(),\n    type: TypeExec$outboundSchema,\n    user: z.nullable(z.string()).optional(),\n    workingDirectory: z.nullable(z.string()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        timeoutMs: \"timeout_ms\",\n        workingDirectory: \"working_directory\",\n    });\n});\nexport function localShellCallItemActionToJSON(localShellCallItemAction) {\n    return JSON.stringify(LocalShellCallItemAction$outboundSchema.parse(localShellCallItemAction));\n}\n/** @internal */\nexport const TypeLocalShellCall$outboundSchema = z.enum(TypeLocalShellCall);\n/** @internal */\nexport const LocalShellCallItem$outboundSchema = z.object({\n    action: z.lazy(() => LocalShellCallItemAction$outboundSchema),\n    callId: z.string(),\n    id: z.string(),\n    status: ToolCallStatus$outboundSchema,\n    type: TypeLocalShellCall$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        callId: \"call_id\",\n    });\n});\nexport function localShellCallItemToJSON(localShellCallItem) {\n    return JSON.stringify(LocalShellCallItem$outboundSchema.parse(localShellCallItem));\n}\n//# sourceMappingURL=localshellcallitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 07d6199bf63f\n */\nimport * as z from \"zod/v4\";\nimport * as openEnums from \"../types/enums.js\";\nexport const LocalShellCallOutputItemStatus = {\n    InProgress: \"in_progress\",\n    Completed: \"completed\",\n    Incomplete: \"incomplete\",\n};\nexport const LocalShellCallOutputItemType = {\n    LocalShellCallOutput: \"local_shell_call_output\",\n};\n/** @internal */\nexport const LocalShellCallOutputItemStatus$outboundSchema = openEnums.outboundSchema(LocalShellCallOutputItemStatus);\n/** @internal */\nexport const LocalShellCallOutputItemType$outboundSchema = z.enum(LocalShellCallOutputItemType);\n/** @internal */\nexport const LocalShellCallOutputItem$outboundSchema = z.object({\n    id: z.string(),\n    output: z.string(),\n    status: z.nullable(LocalShellCallOutputItemStatus$outboundSchema).optional(),\n    type: LocalShellCallOutputItemType$outboundSchema,\n});\nexport function localShellCallOutputItemToJSON(localShellCallOutputItem) {\n    return JSON.stringify(LocalShellCallOutputItem$outboundSchema.parse(localShellCallOutputItem));\n}\n//# sourceMappingURL=localshellcalloutputitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 03d997756e6c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nexport const McpApprovalRequestItemType = {\n    McpApprovalRequest: \"mcp_approval_request\",\n};\n/** @internal */\nexport const McpApprovalRequestItemType$outboundSchema = z.enum(McpApprovalRequestItemType);\n/** @internal */\nexport const McpApprovalRequestItem$outboundSchema = z.object({\n    arguments: z.string(),\n    id: z.string(),\n    name: z.string(),\n    serverLabel: z.string(),\n    type: McpApprovalRequestItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        serverLabel: \"server_label\",\n    });\n});\nexport function mcpApprovalRequestItemToJSON(mcpApprovalRequestItem) {\n    return JSON.stringify(McpApprovalRequestItem$outboundSchema.parse(mcpApprovalRequestItem));\n}\n//# sourceMappingURL=mcpapprovalrequestitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0d43249f80cc\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nexport const McpApprovalResponseItemType = {\n    McpApprovalResponse: \"mcp_approval_response\",\n};\n/** @internal */\nexport const McpApprovalResponseItemType$outboundSchema = z.enum(McpApprovalResponseItemType);\n/** @internal */\nexport const McpApprovalResponseItem$outboundSchema = z.object({\n    approvalRequestId: z.string(),\n    approve: z.boolean(),\n    id: z.nullable(z.string()).optional(),\n    reason: z.nullable(z.string()).optional(),\n    type: McpApprovalResponseItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        approvalRequestId: \"approval_request_id\",\n    });\n});\nexport function mcpApprovalResponseItemToJSON(mcpApprovalResponseItem) {\n    return JSON.stringify(McpApprovalResponseItem$outboundSchema.parse(mcpApprovalResponseItem));\n}\n//# sourceMappingURL=mcpapprovalresponseitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 39bfed05b6dd\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nexport const McpCallItemType = {\n    McpCall: \"mcp_call\",\n};\n/** @internal */\nexport const McpCallItemType$outboundSchema = z.enum(McpCallItemType);\n/** @internal */\nexport const McpCallItem$outboundSchema = z.object({\n    arguments: z.string(),\n    error: z.nullable(z.string()).optional(),\n    id: z.string(),\n    name: z.string(),\n    output: z.nullable(z.string()).optional(),\n    serverLabel: z.string(),\n    type: McpCallItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        serverLabel: \"server_label\",\n    });\n});\nexport function mcpCallItemToJSON(mcpCallItem) {\n    return JSON.stringify(McpCallItem$outboundSchema.parse(mcpCallItem));\n}\n//# sourceMappingURL=mcpcallitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3a1a2af50e51\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nexport const McpListToolsItemType = {\n    McpListTools: \"mcp_list_tools\",\n};\n/** @internal */\nexport const McpListToolsItemTool$outboundSchema = z.object({\n    annotations: z.nullable(z.any()).optional(),\n    description: z.nullable(z.string()).optional(),\n    inputSchema: z.record(z.string(), z.nullable(z.any())),\n    name: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        inputSchema: \"input_schema\",\n    });\n});\nexport function mcpListToolsItemToolToJSON(mcpListToolsItemTool) {\n    return JSON.stringify(McpListToolsItemTool$outboundSchema.parse(mcpListToolsItemTool));\n}\n/** @internal */\nexport const McpListToolsItemType$outboundSchema = z.enum(McpListToolsItemType);\n/** @internal */\nexport const McpListToolsItem$outboundSchema = z.object({\n    error: z.nullable(z.string()).optional(),\n    id: z.string(),\n    serverLabel: z.string(),\n    tools: z.array(z.lazy(() => McpListToolsItemTool$outboundSchema)),\n    type: McpListToolsItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        serverLabel: \"server_label\",\n    });\n});\nexport function mcpListToolsItemToJSON(mcpListToolsItem) {\n    return JSON.stringify(McpListToolsItem$outboundSchema.parse(mcpListToolsItem));\n}\n//# sourceMappingURL=mcplisttoolsitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0c9d6ff77975\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const OutputAdvisorServerToolItemType = {\n    OpenrouterAdvisor: \"openrouter:advisor\",\n};\n/** @internal */\nexport const OutputAdvisorServerToolItemType$inboundSchema = z.enum(OutputAdvisorServerToolItemType);\n/** @internal */\nexport const OutputAdvisorServerToolItemType$outboundSchema = OutputAdvisorServerToolItemType$inboundSchema;\n/** @internal */\nexport const OutputAdvisorServerToolItem$inboundSchema = z.object({\n    advice: z.string().optional(),\n    error: z.string().optional(),\n    id: z.string().optional(),\n    instance_name: z.string().optional(),\n    model: z.string().optional(),\n    prompt: z.string().optional(),\n    status: ToolCallStatus$inboundSchema,\n    type: OutputAdvisorServerToolItemType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"instance_name\": \"instanceName\",\n    });\n});\n/** @internal */\nexport const OutputAdvisorServerToolItem$outboundSchema = z.object({\n    advice: z.string().optional(),\n    error: z.string().optional(),\n    id: z.string().optional(),\n    instanceName: z.string().optional(),\n    model: z.string().optional(),\n    prompt: z.string().optional(),\n    status: ToolCallStatus$outboundSchema,\n    type: OutputAdvisorServerToolItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        instanceName: \"instance_name\",\n    });\n});\nexport function outputAdvisorServerToolItemToJSON(outputAdvisorServerToolItem) {\n    return JSON.stringify(OutputAdvisorServerToolItem$outboundSchema.parse(outputAdvisorServerToolItem));\n}\nexport function outputAdvisorServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputAdvisorServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputAdvisorServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputadvisorservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 761046712899\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ApplyPatchCallOperation$inboundSchema, ApplyPatchCallOperation$outboundSchema, } from \"./applypatchcalloperation.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const OutputApplyPatchServerToolItemType = {\n    OpenrouterApplyPatch: \"openrouter:apply_patch\",\n};\n/** @internal */\nexport const OutputApplyPatchServerToolItemType$inboundSchema = z.enum(OutputApplyPatchServerToolItemType);\n/** @internal */\nexport const OutputApplyPatchServerToolItemType$outboundSchema = OutputApplyPatchServerToolItemType$inboundSchema;\n/** @internal */\nexport const OutputApplyPatchServerToolItem$inboundSchema = z.object({\n    call_id: z.string().optional(),\n    id: z.string().optional(),\n    operation: ApplyPatchCallOperation$inboundSchema.optional(),\n    status: ToolCallStatus$inboundSchema,\n    type: OutputApplyPatchServerToolItemType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"call_id\": \"callId\",\n    });\n});\n/** @internal */\nexport const OutputApplyPatchServerToolItem$outboundSchema = z.object({\n    callId: z.string().optional(),\n    id: z.string().optional(),\n    operation: ApplyPatchCallOperation$outboundSchema.optional(),\n    status: ToolCallStatus$outboundSchema,\n    type: OutputApplyPatchServerToolItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        callId: \"call_id\",\n    });\n});\nexport function outputApplyPatchServerToolItemToJSON(outputApplyPatchServerToolItem) {\n    return JSON.stringify(OutputApplyPatchServerToolItem$outboundSchema.parse(outputApplyPatchServerToolItem));\n}\nexport function outputApplyPatchServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputApplyPatchServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputApplyPatchServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputapplypatchservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 8eeee25f4818\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const OutputBashServerToolItemType = {\n    OpenrouterBash: \"openrouter:bash\",\n};\n/** @internal */\nexport const OutputBashServerToolItemType$inboundSchema = z.enum(OutputBashServerToolItemType);\n/** @internal */\nexport const OutputBashServerToolItemType$outboundSchema = OutputBashServerToolItemType$inboundSchema;\n/** @internal */\nexport const OutputBashServerToolItem$inboundSchema = z.object({\n    command: z.string().optional(),\n    exitCode: z.int().optional(),\n    id: z.string().optional(),\n    status: ToolCallStatus$inboundSchema,\n    stderr: z.string().optional(),\n    stdout: z.string().optional(),\n    type: OutputBashServerToolItemType$inboundSchema,\n});\n/** @internal */\nexport const OutputBashServerToolItem$outboundSchema = z.object({\n    command: z.string().optional(),\n    exitCode: z.int().optional(),\n    id: z.string().optional(),\n    status: ToolCallStatus$outboundSchema,\n    stderr: z.string().optional(),\n    stdout: z.string().optional(),\n    type: OutputBashServerToolItemType$outboundSchema,\n});\nexport function outputBashServerToolItemToJSON(outputBashServerToolItem) {\n    return JSON.stringify(OutputBashServerToolItem$outboundSchema.parse(outputBashServerToolItem));\n}\nexport function outputBashServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputBashServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputBashServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputbashservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5ad5586d0533\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const OutputBrowserUseServerToolItemType = {\n    OpenrouterBrowserUse: \"openrouter:browser_use\",\n};\n/** @internal */\nexport const OutputBrowserUseServerToolItemType$inboundSchema = z.enum(OutputBrowserUseServerToolItemType);\n/** @internal */\nexport const OutputBrowserUseServerToolItemType$outboundSchema = OutputBrowserUseServerToolItemType$inboundSchema;\n/** @internal */\nexport const OutputBrowserUseServerToolItem$inboundSchema = z.object({\n    action: z.string().optional(),\n    id: z.string().optional(),\n    screenshotB64: z.string().optional(),\n    status: ToolCallStatus$inboundSchema,\n    type: OutputBrowserUseServerToolItemType$inboundSchema,\n});\n/** @internal */\nexport const OutputBrowserUseServerToolItem$outboundSchema = z.object({\n    action: z.string().optional(),\n    id: z.string().optional(),\n    screenshotB64: z.string().optional(),\n    status: ToolCallStatus$outboundSchema,\n    type: OutputBrowserUseServerToolItemType$outboundSchema,\n});\nexport function outputBrowserUseServerToolItemToJSON(outputBrowserUseServerToolItem) {\n    return JSON.stringify(OutputBrowserUseServerToolItem$outboundSchema.parse(outputBrowserUseServerToolItem));\n}\nexport function outputBrowserUseServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputBrowserUseServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputBrowserUseServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputbrowseruseservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ee080e2eccae\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const TypeCodeInterpreterCall = {\n    CodeInterpreterCall: \"code_interpreter_call\",\n};\n/** @internal */\nexport const OutputLogs$inboundSchema = z\n    .object({\n    logs: z.string(),\n    type: z.literal(\"logs\"),\n});\n/** @internal */\nexport const OutputLogs$outboundSchema = z.object({\n    logs: z.string(),\n    type: z.literal(\"logs\"),\n});\nexport function outputLogsToJSON(outputLogs) {\n    return JSON.stringify(OutputLogs$outboundSchema.parse(outputLogs));\n}\nexport function outputLogsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputLogs$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputLogs' from JSON`);\n}\n/** @internal */\nexport const OutputImage$inboundSchema = z\n    .object({\n    type: z.literal(\"image\"),\n    url: z.string(),\n});\n/** @internal */\nexport const OutputImage$outboundSchema = z.object({\n    type: z.literal(\"image\"),\n    url: z.string(),\n});\nexport function outputImageToJSON(outputImage) {\n    return JSON.stringify(OutputImage$outboundSchema.parse(outputImage));\n}\nexport function outputImageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputImage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputImage' from JSON`);\n}\n/** @internal */\nexport const OutputCodeInterpreterCallItemOutputUnion$inboundSchema = discriminatedUnion(\"type\", {\n    image: z.lazy(() => OutputImage$inboundSchema),\n    logs: z.lazy(() => OutputLogs$inboundSchema),\n});\n/** @internal */\nexport const OutputCodeInterpreterCallItemOutputUnion$outboundSchema = z.union([\n    z.lazy(() => OutputImage$outboundSchema),\n    z.lazy(() => OutputLogs$outboundSchema),\n]);\nexport function outputCodeInterpreterCallItemOutputUnionToJSON(outputCodeInterpreterCallItemOutputUnion) {\n    return JSON.stringify(OutputCodeInterpreterCallItemOutputUnion$outboundSchema.parse(outputCodeInterpreterCallItemOutputUnion));\n}\nexport function outputCodeInterpreterCallItemOutputUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputCodeInterpreterCallItemOutputUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputCodeInterpreterCallItemOutputUnion' from JSON`);\n}\n/** @internal */\nexport const TypeCodeInterpreterCall$inboundSchema = z.enum(TypeCodeInterpreterCall);\n/** @internal */\nexport const TypeCodeInterpreterCall$outboundSchema = TypeCodeInterpreterCall$inboundSchema;\n/** @internal */\nexport const OutputCodeInterpreterCallItem$inboundSchema = z.object({\n    code: z.nullable(z.string()),\n    container_id: z.string(),\n    id: z.string(),\n    outputs: z.nullable(z.array(discriminatedUnion(\"type\", {\n        image: z.lazy(() => OutputImage$inboundSchema),\n        logs: z.lazy(() => OutputLogs$inboundSchema),\n    }))),\n    status: ToolCallStatus$inboundSchema,\n    type: TypeCodeInterpreterCall$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"container_id\": \"containerId\",\n    });\n});\n/** @internal */\nexport const OutputCodeInterpreterCallItem$outboundSchema = z.object({\n    code: z.nullable(z.string()),\n    containerId: z.string(),\n    id: z.string(),\n    outputs: z.nullable(z.array(z.union([\n        z.lazy(() => OutputImage$outboundSchema),\n        z.lazy(() => OutputLogs$outboundSchema),\n    ]))),\n    status: ToolCallStatus$outboundSchema,\n    type: TypeCodeInterpreterCall$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        containerId: \"container_id\",\n    });\n});\nexport function outputCodeInterpreterCallItemToJSON(outputCodeInterpreterCallItem) {\n    return JSON.stringify(OutputCodeInterpreterCallItem$outboundSchema.parse(outputCodeInterpreterCallItem));\n}\nexport function outputCodeInterpreterCallItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputCodeInterpreterCallItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputCodeInterpreterCallItem' from JSON`);\n}\n//# sourceMappingURL=outputcodeinterpretercallitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 16f87f6046c4\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const OutputCodeInterpreterServerToolItemType = {\n    OpenrouterCodeInterpreter: \"openrouter:code_interpreter\",\n};\n/** @internal */\nexport const OutputCodeInterpreterServerToolItemType$inboundSchema = z.enum(OutputCodeInterpreterServerToolItemType);\n/** @internal */\nexport const OutputCodeInterpreterServerToolItemType$outboundSchema = OutputCodeInterpreterServerToolItemType$inboundSchema;\n/** @internal */\nexport const OutputCodeInterpreterServerToolItem$inboundSchema = z.object({\n    code: z.string().optional(),\n    exitCode: z.int().optional(),\n    id: z.string().optional(),\n    language: z.string().optional(),\n    status: ToolCallStatus$inboundSchema,\n    stderr: z.string().optional(),\n    stdout: z.string().optional(),\n    type: OutputCodeInterpreterServerToolItemType$inboundSchema,\n});\n/** @internal */\nexport const OutputCodeInterpreterServerToolItem$outboundSchema = z.object({\n    code: z.string().optional(),\n    exitCode: z.int().optional(),\n    id: z.string().optional(),\n    language: z.string().optional(),\n    status: ToolCallStatus$outboundSchema,\n    stderr: z.string().optional(),\n    stdout: z.string().optional(),\n    type: OutputCodeInterpreterServerToolItemType$outboundSchema,\n});\nexport function outputCodeInterpreterServerToolItemToJSON(outputCodeInterpreterServerToolItem) {\n    return JSON.stringify(OutputCodeInterpreterServerToolItem$outboundSchema.parse(outputCodeInterpreterServerToolItem));\n}\nexport function outputCodeInterpreterServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputCodeInterpreterServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputCodeInterpreterServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputcodeinterpreterservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: fd4439fdf358\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const OutputComputerCallItemStatus = {\n    Completed: \"completed\",\n    Incomplete: \"incomplete\",\n    InProgress: \"in_progress\",\n};\nexport const OutputComputerCallItemType = {\n    ComputerCall: \"computer_call\",\n};\n/** @internal */\nexport const PendingSafetyCheck$inboundSchema = z.object({\n    code: z.string(),\n    id: z.string(),\n    message: z.string(),\n});\n/** @internal */\nexport const PendingSafetyCheck$outboundSchema = z.object({\n    code: z.string(),\n    id: z.string(),\n    message: z.string(),\n});\nexport function pendingSafetyCheckToJSON(pendingSafetyCheck) {\n    return JSON.stringify(PendingSafetyCheck$outboundSchema.parse(pendingSafetyCheck));\n}\nexport function pendingSafetyCheckFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => PendingSafetyCheck$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'PendingSafetyCheck' from JSON`);\n}\n/** @internal */\nexport const OutputComputerCallItemStatus$inboundSchema = openEnums.inboundSchema(OutputComputerCallItemStatus);\n/** @internal */\nexport const OutputComputerCallItemStatus$outboundSchema = openEnums.outboundSchema(OutputComputerCallItemStatus);\n/** @internal */\nexport const OutputComputerCallItemType$inboundSchema = z.enum(OutputComputerCallItemType);\n/** @internal */\nexport const OutputComputerCallItemType$outboundSchema = OutputComputerCallItemType$inboundSchema;\n/** @internal */\nexport const OutputComputerCallItem$inboundSchema = z.object({\n    action: z.nullable(z.any()).optional(),\n    call_id: z.string(),\n    id: z.string().optional(),\n    pending_safety_checks: z.array(z.lazy(() => PendingSafetyCheck$inboundSchema)),\n    status: OutputComputerCallItemStatus$inboundSchema,\n    type: OutputComputerCallItemType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"call_id\": \"callId\",\n        \"pending_safety_checks\": \"pendingSafetyChecks\",\n    });\n});\n/** @internal */\nexport const OutputComputerCallItem$outboundSchema = z.object({\n    action: z.nullable(z.any()).optional(),\n    callId: z.string(),\n    id: z.string().optional(),\n    pendingSafetyChecks: z.array(z.lazy(() => PendingSafetyCheck$outboundSchema)),\n    status: OutputComputerCallItemStatus$outboundSchema,\n    type: OutputComputerCallItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        callId: \"call_id\",\n        pendingSafetyChecks: \"pending_safety_checks\",\n    });\n});\nexport function outputComputerCallItemToJSON(outputComputerCallItem) {\n    return JSON.stringify(OutputComputerCallItem$outboundSchema.parse(outputComputerCallItem));\n}\nexport function outputComputerCallItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputComputerCallItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputComputerCallItem' from JSON`);\n}\n//# sourceMappingURL=outputcomputercallitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 71596c10c79b\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nexport const OutputCustomToolCallItemType = {\n    CustomToolCall: \"custom_tool_call\",\n};\n/** @internal */\nexport const OutputCustomToolCallItemType$inboundSchema = z.enum(OutputCustomToolCallItemType);\n/** @internal */\nexport const OutputCustomToolCallItemType$outboundSchema = OutputCustomToolCallItemType$inboundSchema;\n/** @internal */\nexport const OutputCustomToolCallItem$inboundSchema = z.object({\n    call_id: z.string(),\n    id: z.string().optional(),\n    input: z.string(),\n    name: z.string(),\n    namespace: z.string().optional(),\n    type: OutputCustomToolCallItemType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"call_id\": \"callId\",\n    });\n});\n/** @internal */\nexport const OutputCustomToolCallItem$outboundSchema = z.object({\n    callId: z.string(),\n    id: z.string().optional(),\n    input: z.string(),\n    name: z.string(),\n    namespace: z.string().optional(),\n    type: OutputCustomToolCallItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        callId: \"call_id\",\n    });\n});\nexport function outputCustomToolCallItemToJSON(outputCustomToolCallItem) {\n    return JSON.stringify(OutputCustomToolCallItem$outboundSchema.parse(outputCustomToolCallItem));\n}\nexport function outputCustomToolCallItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputCustomToolCallItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputCustomToolCallItem' from JSON`);\n}\n//# sourceMappingURL=outputcustomtoolcallitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0c1828e72f98\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const OutputDatetimeItemType = {\n    OpenrouterDatetime: \"openrouter:datetime\",\n};\n/** @internal */\nexport const OutputDatetimeItemType$inboundSchema = z.enum(OutputDatetimeItemType);\n/** @internal */\nexport const OutputDatetimeItemType$outboundSchema = OutputDatetimeItemType$inboundSchema;\n/** @internal */\nexport const OutputDatetimeItem$inboundSchema = z.object({\n    datetime: z.string(),\n    id: z.string().optional(),\n    status: ToolCallStatus$inboundSchema,\n    timezone: z.string(),\n    type: OutputDatetimeItemType$inboundSchema,\n});\n/** @internal */\nexport const OutputDatetimeItem$outboundSchema = z.object({\n    datetime: z.string(),\n    id: z.string().optional(),\n    status: ToolCallStatus$outboundSchema,\n    timezone: z.string(),\n    type: OutputDatetimeItemType$outboundSchema,\n});\nexport function outputDatetimeItemToJSON(outputDatetimeItem) {\n    return JSON.stringify(OutputDatetimeItem$outboundSchema.parse(outputDatetimeItem));\n}\nexport function outputDatetimeItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputDatetimeItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputDatetimeItem' from JSON`);\n}\n//# sourceMappingURL=outputdatetimeitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 55795920a937\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const WebSearchStatus = {\n    Completed: \"completed\",\n    Searching: \"searching\",\n    InProgress: \"in_progress\",\n    Failed: \"failed\",\n};\n/** @internal */\nexport const WebSearchStatus$inboundSchema = openEnums.inboundSchema(WebSearchStatus);\n/** @internal */\nexport const WebSearchStatus$outboundSchema = openEnums.outboundSchema(WebSearchStatus);\n//# sourceMappingURL=websearchstatus.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: eafceec94b81\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { WebSearchStatus$inboundSchema, WebSearchStatus$outboundSchema, } from \"./websearchstatus.js\";\nexport const OutputFileSearchCallItemType = {\n    FileSearchCall: \"file_search_call\",\n};\n/** @internal */\nexport const OutputFileSearchCallItemType$inboundSchema = z.enum(OutputFileSearchCallItemType);\n/** @internal */\nexport const OutputFileSearchCallItemType$outboundSchema = OutputFileSearchCallItemType$inboundSchema;\n/** @internal */\nexport const OutputFileSearchCallItem$inboundSchema = z.object({\n    id: z.string(),\n    queries: z.array(z.string()),\n    status: WebSearchStatus$inboundSchema,\n    type: OutputFileSearchCallItemType$inboundSchema,\n});\n/** @internal */\nexport const OutputFileSearchCallItem$outboundSchema = z.object({\n    id: z.string(),\n    queries: z.array(z.string()),\n    status: WebSearchStatus$outboundSchema,\n    type: OutputFileSearchCallItemType$outboundSchema,\n});\nexport function outputFileSearchCallItemToJSON(outputFileSearchCallItem) {\n    return JSON.stringify(OutputFileSearchCallItem$outboundSchema.parse(outputFileSearchCallItem));\n}\nexport function outputFileSearchCallItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputFileSearchCallItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputFileSearchCallItem' from JSON`);\n}\n//# sourceMappingURL=outputfilesearchcallitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3e5afbd64572\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const OutputFileSearchServerToolItemType = {\n    OpenrouterFileSearch: \"openrouter:file_search\",\n};\n/** @internal */\nexport const OutputFileSearchServerToolItemType$inboundSchema = z.enum(OutputFileSearchServerToolItemType);\n/** @internal */\nexport const OutputFileSearchServerToolItemType$outboundSchema = OutputFileSearchServerToolItemType$inboundSchema;\n/** @internal */\nexport const OutputFileSearchServerToolItem$inboundSchema = z.object({\n    id: z.string().optional(),\n    queries: z.array(z.string()).optional(),\n    status: ToolCallStatus$inboundSchema,\n    type: OutputFileSearchServerToolItemType$inboundSchema,\n});\n/** @internal */\nexport const OutputFileSearchServerToolItem$outboundSchema = z.object({\n    id: z.string().optional(),\n    queries: z.array(z.string()).optional(),\n    status: ToolCallStatus$outboundSchema,\n    type: OutputFileSearchServerToolItemType$outboundSchema,\n});\nexport function outputFileSearchServerToolItemToJSON(outputFileSearchServerToolItem) {\n    return JSON.stringify(OutputFileSearchServerToolItem$outboundSchema.parse(outputFileSearchServerToolItem));\n}\nexport function outputFileSearchServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputFileSearchServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputFileSearchServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputfilesearchservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9c462e9ff54b\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nexport const OutputFunctionCallItemStatusInProgress = {\n    InProgress: \"in_progress\",\n};\nexport const OutputFunctionCallItemStatusIncomplete = {\n    Incomplete: \"incomplete\",\n};\nexport const OutputFunctionCallItemStatusCompleted = {\n    Completed: \"completed\",\n};\nexport const OutputFunctionCallItemType = {\n    FunctionCall: \"function_call\",\n};\n/** @internal */\nexport const OutputFunctionCallItemStatusInProgress$inboundSchema = z.enum(OutputFunctionCallItemStatusInProgress);\n/** @internal */\nexport const OutputFunctionCallItemStatusInProgress$outboundSchema = OutputFunctionCallItemStatusInProgress$inboundSchema;\n/** @internal */\nexport const OutputFunctionCallItemStatusIncomplete$inboundSchema = z.enum(OutputFunctionCallItemStatusIncomplete);\n/** @internal */\nexport const OutputFunctionCallItemStatusIncomplete$outboundSchema = OutputFunctionCallItemStatusIncomplete$inboundSchema;\n/** @internal */\nexport const OutputFunctionCallItemStatusCompleted$inboundSchema = z.enum(OutputFunctionCallItemStatusCompleted);\n/** @internal */\nexport const OutputFunctionCallItemStatusCompleted$outboundSchema = OutputFunctionCallItemStatusCompleted$inboundSchema;\n/** @internal */\nexport const OutputFunctionCallItemStatusUnion$inboundSchema = z.union([\n    OutputFunctionCallItemStatusCompleted$inboundSchema,\n    OutputFunctionCallItemStatusIncomplete$inboundSchema,\n    OutputFunctionCallItemStatusInProgress$inboundSchema,\n]);\n/** @internal */\nexport const OutputFunctionCallItemStatusUnion$outboundSchema = z.union([\n    OutputFunctionCallItemStatusCompleted$outboundSchema,\n    OutputFunctionCallItemStatusIncomplete$outboundSchema,\n    OutputFunctionCallItemStatusInProgress$outboundSchema,\n]);\nexport function outputFunctionCallItemStatusUnionToJSON(outputFunctionCallItemStatusUnion) {\n    return JSON.stringify(OutputFunctionCallItemStatusUnion$outboundSchema.parse(outputFunctionCallItemStatusUnion));\n}\nexport function outputFunctionCallItemStatusUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputFunctionCallItemStatusUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputFunctionCallItemStatusUnion' from JSON`);\n}\n/** @internal */\nexport const OutputFunctionCallItemType$inboundSchema = z.enum(OutputFunctionCallItemType);\n/** @internal */\nexport const OutputFunctionCallItemType$outboundSchema = OutputFunctionCallItemType$inboundSchema;\n/** @internal */\nexport const OutputFunctionCallItem$inboundSchema = z.object({\n    arguments: z.string(),\n    call_id: z.string(),\n    id: z.string().optional(),\n    name: z.string(),\n    namespace: z.string().optional(),\n    status: z.union([\n        OutputFunctionCallItemStatusCompleted$inboundSchema,\n        OutputFunctionCallItemStatusIncomplete$inboundSchema,\n        OutputFunctionCallItemStatusInProgress$inboundSchema,\n    ]).optional(),\n    type: OutputFunctionCallItemType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"call_id\": \"callId\",\n    });\n});\n/** @internal */\nexport const OutputFunctionCallItem$outboundSchema = z.object({\n    arguments: z.string(),\n    callId: z.string(),\n    id: z.string().optional(),\n    name: z.string(),\n    namespace: z.string().optional(),\n    status: z.union([\n        OutputFunctionCallItemStatusCompleted$outboundSchema,\n        OutputFunctionCallItemStatusIncomplete$outboundSchema,\n        OutputFunctionCallItemStatusInProgress$outboundSchema,\n    ]).optional(),\n    type: OutputFunctionCallItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        callId: \"call_id\",\n    });\n});\nexport function outputFunctionCallItemToJSON(outputFunctionCallItem) {\n    return JSON.stringify(OutputFunctionCallItem$outboundSchema.parse(outputFunctionCallItem));\n}\nexport function outputFunctionCallItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputFunctionCallItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputFunctionCallItem' from JSON`);\n}\n//# sourceMappingURL=outputfunctioncallitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 30bcfe965217\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { FusionAnalysisResult$inboundSchema, FusionAnalysisResult$outboundSchema, } from \"./fusionanalysisresult.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const OutputFusionServerToolItemType = {\n    OpenrouterFusion: \"openrouter:fusion\",\n};\n/** @internal */\nexport const FailedModel$inboundSchema = z\n    .object({\n    error: z.string(),\n    model: z.string(),\n    status_code: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"status_code\": \"statusCode\",\n    });\n});\n/** @internal */\nexport const FailedModel$outboundSchema = z.object({\n    error: z.string(),\n    model: z.string(),\n    statusCode: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        statusCode: \"status_code\",\n    });\n});\nexport function failedModelToJSON(failedModel) {\n    return JSON.stringify(FailedModel$outboundSchema.parse(failedModel));\n}\nexport function failedModelFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => FailedModel$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'FailedModel' from JSON`);\n}\n/** @internal */\nexport const ResponseT$inboundSchema = z.object({\n    content: z.string().optional(),\n    model: z.string(),\n});\n/** @internal */\nexport const ResponseT$outboundSchema = z.object({\n    content: z.string().optional(),\n    model: z.string(),\n});\nexport function responseToJSON(responseT) {\n    return JSON.stringify(ResponseT$outboundSchema.parse(responseT));\n}\nexport function responseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ResponseT$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ResponseT' from JSON`);\n}\n/** @internal */\nexport const OutputFusionServerToolItemType$inboundSchema = z.enum(OutputFusionServerToolItemType);\n/** @internal */\nexport const OutputFusionServerToolItemType$outboundSchema = OutputFusionServerToolItemType$inboundSchema;\n/** @internal */\nexport const OutputFusionServerToolItem$inboundSchema = z.object({\n    analysis: FusionAnalysisResult$inboundSchema.optional(),\n    error: z.string().optional(),\n    failed_models: z.array(z.lazy(() => FailedModel$inboundSchema)).optional(),\n    failure_reason: z.string().optional(),\n    id: z.string().optional(),\n    responses: z.array(z.lazy(() => ResponseT$inboundSchema)).optional(),\n    status: ToolCallStatus$inboundSchema,\n    type: OutputFusionServerToolItemType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"failed_models\": \"failedModels\",\n        \"failure_reason\": \"failureReason\",\n    });\n});\n/** @internal */\nexport const OutputFusionServerToolItem$outboundSchema = z.object({\n    analysis: FusionAnalysisResult$outboundSchema.optional(),\n    error: z.string().optional(),\n    failedModels: z.array(z.lazy(() => FailedModel$outboundSchema)).optional(),\n    failureReason: z.string().optional(),\n    id: z.string().optional(),\n    responses: z.array(z.lazy(() => ResponseT$outboundSchema)).optional(),\n    status: ToolCallStatus$outboundSchema,\n    type: OutputFusionServerToolItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        failedModels: \"failed_models\",\n        failureReason: \"failure_reason\",\n    });\n});\nexport function outputFusionServerToolItemToJSON(outputFusionServerToolItem) {\n    return JSON.stringify(OutputFusionServerToolItem$outboundSchema.parse(outputFusionServerToolItem));\n}\nexport function outputFusionServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputFusionServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputFusionServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputfusionservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 618bac10713d\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ImageGenerationStatus$inboundSchema, ImageGenerationStatus$outboundSchema, } from \"./imagegenerationstatus.js\";\nexport const OutputImageGenerationCallItemType = {\n    ImageGenerationCall: \"image_generation_call\",\n};\n/** @internal */\nexport const OutputImageGenerationCallItemType$inboundSchema = z.enum(OutputImageGenerationCallItemType);\n/** @internal */\nexport const OutputImageGenerationCallItemType$outboundSchema = OutputImageGenerationCallItemType$inboundSchema;\n/** @internal */\nexport const OutputImageGenerationCallItem$inboundSchema = z.object({\n    id: z.string(),\n    result: z.nullable(z.string()).default(null),\n    status: ImageGenerationStatus$inboundSchema,\n    type: OutputImageGenerationCallItemType$inboundSchema,\n});\n/** @internal */\nexport const OutputImageGenerationCallItem$outboundSchema = z.object({\n    id: z.string(),\n    result: z.nullable(z.string()).default(null),\n    status: ImageGenerationStatus$outboundSchema,\n    type: OutputImageGenerationCallItemType$outboundSchema,\n});\nexport function outputImageGenerationCallItemToJSON(outputImageGenerationCallItem) {\n    return JSON.stringify(OutputImageGenerationCallItem$outboundSchema.parse(outputImageGenerationCallItem));\n}\nexport function outputImageGenerationCallItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputImageGenerationCallItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputImageGenerationCallItem' from JSON`);\n}\n//# sourceMappingURL=outputimagegenerationcallitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1ea34f16eb56\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const OutputImageGenerationServerToolItemType = {\n    OpenrouterImageGeneration: \"openrouter:image_generation\",\n};\n/** @internal */\nexport const OutputImageGenerationServerToolItemType$inboundSchema = z.enum(OutputImageGenerationServerToolItemType);\n/** @internal */\nexport const OutputImageGenerationServerToolItemType$outboundSchema = OutputImageGenerationServerToolItemType$inboundSchema;\n/** @internal */\nexport const OutputImageGenerationServerToolItem$inboundSchema = z.object({\n    id: z.string().optional(),\n    imageB64: z.string().optional(),\n    imageUrl: z.string().optional(),\n    result: z.nullable(z.string()).optional(),\n    revisedPrompt: z.string().optional(),\n    status: ToolCallStatus$inboundSchema,\n    type: OutputImageGenerationServerToolItemType$inboundSchema,\n});\n/** @internal */\nexport const OutputImageGenerationServerToolItem$outboundSchema = z.object({\n    id: z.string().optional(),\n    imageB64: z.string().optional(),\n    imageUrl: z.string().optional(),\n    result: z.nullable(z.string()).optional(),\n    revisedPrompt: z.string().optional(),\n    status: ToolCallStatus$outboundSchema,\n    type: OutputImageGenerationServerToolItemType$outboundSchema,\n});\nexport function outputImageGenerationServerToolItemToJSON(outputImageGenerationServerToolItem) {\n    return JSON.stringify(OutputImageGenerationServerToolItem$outboundSchema.parse(outputImageGenerationServerToolItem));\n}\nexport function outputImageGenerationServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputImageGenerationServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputImageGenerationServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputimagegenerationservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: dd859086c9c7\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const OutputMcpServerToolItemType = {\n    OpenrouterMcp: \"openrouter:mcp\",\n};\n/** @internal */\nexport const OutputMcpServerToolItemType$inboundSchema = z.enum(OutputMcpServerToolItemType);\n/** @internal */\nexport const OutputMcpServerToolItemType$outboundSchema = OutputMcpServerToolItemType$inboundSchema;\n/** @internal */\nexport const OutputMcpServerToolItem$inboundSchema = z.object({\n    id: z.string().optional(),\n    serverLabel: z.string().optional(),\n    status: ToolCallStatus$inboundSchema,\n    toolName: z.string().optional(),\n    type: OutputMcpServerToolItemType$inboundSchema,\n});\n/** @internal */\nexport const OutputMcpServerToolItem$outboundSchema = z.object({\n    id: z.string().optional(),\n    serverLabel: z.string().optional(),\n    status: ToolCallStatus$outboundSchema,\n    toolName: z.string().optional(),\n    type: OutputMcpServerToolItemType$outboundSchema,\n});\nexport function outputMcpServerToolItemToJSON(outputMcpServerToolItem) {\n    return JSON.stringify(OutputMcpServerToolItem$outboundSchema.parse(outputMcpServerToolItem));\n}\nexport function outputMcpServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputMcpServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputMcpServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputmcpservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 2fb051c8b4e9\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const ActionEnum = {\n    Read: \"read\",\n    Write: \"write\",\n    Delete: \"delete\",\n};\nexport const OutputMemoryServerToolItemType = {\n    OpenrouterMemory: \"openrouter:memory\",\n};\n/** @internal */\nexport const ActionEnum$inboundSchema = openEnums.inboundSchema(ActionEnum);\n/** @internal */\nexport const ActionEnum$outboundSchema = openEnums.outboundSchema(ActionEnum);\n/** @internal */\nexport const OutputMemoryServerToolItemType$inboundSchema = z.enum(OutputMemoryServerToolItemType);\n/** @internal */\nexport const OutputMemoryServerToolItemType$outboundSchema = OutputMemoryServerToolItemType$inboundSchema;\n/** @internal */\nexport const OutputMemoryServerToolItem$inboundSchema = z.object({\n    action: ActionEnum$inboundSchema.optional(),\n    id: z.string().optional(),\n    key: z.string().optional(),\n    status: ToolCallStatus$inboundSchema,\n    type: OutputMemoryServerToolItemType$inboundSchema,\n    value: z.nullable(z.any()).optional(),\n});\n/** @internal */\nexport const OutputMemoryServerToolItem$outboundSchema = z.object({\n    action: ActionEnum$outboundSchema.optional(),\n    id: z.string().optional(),\n    key: z.string().optional(),\n    status: ToolCallStatus$outboundSchema,\n    type: OutputMemoryServerToolItemType$outboundSchema,\n    value: z.nullable(z.any()).optional(),\n});\nexport function outputMemoryServerToolItemToJSON(outputMemoryServerToolItem) {\n    return JSON.stringify(OutputMemoryServerToolItem$outboundSchema.parse(outputMemoryServerToolItem));\n}\nexport function outputMemoryServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputMemoryServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputMemoryServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputmemoryservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e7518c133cf6\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const OutputSearchModelsServerToolItemType = {\n    OpenrouterExperimentalSearchModels: \"openrouter:experimental__search_models\",\n};\n/** @internal */\nexport const OutputSearchModelsServerToolItemType$inboundSchema = z.enum(OutputSearchModelsServerToolItemType);\n/** @internal */\nexport const OutputSearchModelsServerToolItemType$outboundSchema = OutputSearchModelsServerToolItemType$inboundSchema;\n/** @internal */\nexport const OutputSearchModelsServerToolItem$inboundSchema = z.object({\n    arguments: z.string().optional(),\n    id: z.string().optional(),\n    query: z.string().optional(),\n    status: ToolCallStatus$inboundSchema,\n    type: OutputSearchModelsServerToolItemType$inboundSchema,\n});\n/** @internal */\nexport const OutputSearchModelsServerToolItem$outboundSchema = z.object({\n    arguments: z.string().optional(),\n    id: z.string().optional(),\n    query: z.string().optional(),\n    status: ToolCallStatus$outboundSchema,\n    type: OutputSearchModelsServerToolItemType$outboundSchema,\n});\nexport function outputSearchModelsServerToolItemToJSON(outputSearchModelsServerToolItem) {\n    return JSON.stringify(OutputSearchModelsServerToolItem$outboundSchema.parse(outputSearchModelsServerToolItem));\n}\nexport function outputSearchModelsServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputSearchModelsServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputSearchModelsServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputsearchmodelsservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9161bc044a98\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const OutputSubagentServerToolItemType = {\n    OpenrouterSubagent: \"openrouter:subagent\",\n};\n/** @internal */\nexport const OutputSubagentServerToolItemType$inboundSchema = z.enum(OutputSubagentServerToolItemType);\n/** @internal */\nexport const OutputSubagentServerToolItemType$outboundSchema = OutputSubagentServerToolItemType$inboundSchema;\n/** @internal */\nexport const OutputSubagentServerToolItem$inboundSchema = z.object({\n    error: z.string().optional(),\n    id: z.string().optional(),\n    model: z.string().optional(),\n    outcome: z.string().optional(),\n    status: ToolCallStatus$inboundSchema,\n    task_description: z.string().optional(),\n    task_name: z.string().optional(),\n    type: OutputSubagentServerToolItemType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"task_description\": \"taskDescription\",\n        \"task_name\": \"taskName\",\n    });\n});\n/** @internal */\nexport const OutputSubagentServerToolItem$outboundSchema = z.object({\n    error: z.string().optional(),\n    id: z.string().optional(),\n    model: z.string().optional(),\n    outcome: z.string().optional(),\n    status: ToolCallStatus$outboundSchema,\n    taskDescription: z.string().optional(),\n    taskName: z.string().optional(),\n    type: OutputSubagentServerToolItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        taskDescription: \"task_description\",\n        taskName: \"task_name\",\n    });\n});\nexport function outputSubagentServerToolItemToJSON(outputSubagentServerToolItem) {\n    return JSON.stringify(OutputSubagentServerToolItem$outboundSchema.parse(outputSubagentServerToolItem));\n}\nexport function outputSubagentServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputSubagentServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputSubagentServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputsubagentservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6c55837a703d\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const Command = {\n    View: \"view\",\n    Create: \"create\",\n    StrReplace: \"str_replace\",\n    Insert: \"insert\",\n};\nexport const OutputTextEditorServerToolItemType = {\n    OpenrouterTextEditor: \"openrouter:text_editor\",\n};\n/** @internal */\nexport const Command$inboundSchema = openEnums\n    .inboundSchema(Command);\n/** @internal */\nexport const Command$outboundSchema = openEnums\n    .outboundSchema(Command);\n/** @internal */\nexport const OutputTextEditorServerToolItemType$inboundSchema = z.enum(OutputTextEditorServerToolItemType);\n/** @internal */\nexport const OutputTextEditorServerToolItemType$outboundSchema = OutputTextEditorServerToolItemType$inboundSchema;\n/** @internal */\nexport const OutputTextEditorServerToolItem$inboundSchema = z.object({\n    command: Command$inboundSchema.optional(),\n    filePath: z.string().optional(),\n    id: z.string().optional(),\n    status: ToolCallStatus$inboundSchema,\n    type: OutputTextEditorServerToolItemType$inboundSchema,\n});\n/** @internal */\nexport const OutputTextEditorServerToolItem$outboundSchema = z.object({\n    command: Command$outboundSchema.optional(),\n    filePath: z.string().optional(),\n    id: z.string().optional(),\n    status: ToolCallStatus$outboundSchema,\n    type: OutputTextEditorServerToolItemType$outboundSchema,\n});\nexport function outputTextEditorServerToolItemToJSON(outputTextEditorServerToolItem) {\n    return JSON.stringify(OutputTextEditorServerToolItem$outboundSchema.parse(outputTextEditorServerToolItem));\n}\nexport function outputTextEditorServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputTextEditorServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputTextEditorServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputtexteditorservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 54b4dacceeab\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const OutputToolSearchServerToolItemType = {\n    OpenrouterToolSearch: \"openrouter:tool_search\",\n};\n/** @internal */\nexport const OutputToolSearchServerToolItemType$inboundSchema = z.enum(OutputToolSearchServerToolItemType);\n/** @internal */\nexport const OutputToolSearchServerToolItemType$outboundSchema = OutputToolSearchServerToolItemType$inboundSchema;\n/** @internal */\nexport const OutputToolSearchServerToolItem$inboundSchema = z.object({\n    id: z.string().optional(),\n    query: z.string().optional(),\n    status: ToolCallStatus$inboundSchema,\n    type: OutputToolSearchServerToolItemType$inboundSchema,\n});\n/** @internal */\nexport const OutputToolSearchServerToolItem$outboundSchema = z.object({\n    id: z.string().optional(),\n    query: z.string().optional(),\n    status: ToolCallStatus$outboundSchema,\n    type: OutputToolSearchServerToolItemType$outboundSchema,\n});\nexport function outputToolSearchServerToolItemToJSON(outputToolSearchServerToolItem) {\n    return JSON.stringify(OutputToolSearchServerToolItem$outboundSchema.parse(outputToolSearchServerToolItem));\n}\nexport function outputToolSearchServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputToolSearchServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputToolSearchServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputtoolsearchservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a28b106c9b49\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const OutputWebFetchServerToolItemType = {\n    OpenrouterWebFetch: \"openrouter:web_fetch\",\n};\n/** @internal */\nexport const OutputWebFetchServerToolItemType$inboundSchema = z.enum(OutputWebFetchServerToolItemType);\n/** @internal */\nexport const OutputWebFetchServerToolItemType$outboundSchema = OutputWebFetchServerToolItemType$inboundSchema;\n/** @internal */\nexport const OutputWebFetchServerToolItem$inboundSchema = z.object({\n    content: z.string().optional(),\n    error: z.string().optional(),\n    httpStatus: z.int().optional(),\n    id: z.string().optional(),\n    status: ToolCallStatus$inboundSchema,\n    title: z.string().optional(),\n    type: OutputWebFetchServerToolItemType$inboundSchema,\n    url: z.string().optional(),\n});\n/** @internal */\nexport const OutputWebFetchServerToolItem$outboundSchema = z.object({\n    content: z.string().optional(),\n    error: z.string().optional(),\n    httpStatus: z.int().optional(),\n    id: z.string().optional(),\n    status: ToolCallStatus$outboundSchema,\n    title: z.string().optional(),\n    type: OutputWebFetchServerToolItemType$outboundSchema,\n    url: z.string().optional(),\n});\nexport function outputWebFetchServerToolItemToJSON(outputWebFetchServerToolItem) {\n    return JSON.stringify(OutputWebFetchServerToolItem$outboundSchema.parse(outputWebFetchServerToolItem));\n}\nexport function outputWebFetchServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputWebFetchServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputWebFetchServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputwebfetchservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 2a64353a399c\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nexport const WebSearchSourceType = {\n    Url: \"url\",\n};\n/** @internal */\nexport const WebSearchSourceType$inboundSchema = z.enum(WebSearchSourceType);\n/** @internal */\nexport const WebSearchSourceType$outboundSchema = WebSearchSourceType$inboundSchema;\n/** @internal */\nexport const WebSearchSource$inboundSchema = z.object({\n    type: WebSearchSourceType$inboundSchema,\n    url: z.string(),\n});\n/** @internal */\nexport const WebSearchSource$outboundSchema = z.object({\n    type: WebSearchSourceType$outboundSchema,\n    url: z.string(),\n});\nexport function webSearchSourceToJSON(webSearchSource) {\n    return JSON.stringify(WebSearchSource$outboundSchema.parse(webSearchSource));\n}\nexport function webSearchSourceFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => WebSearchSource$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'WebSearchSource' from JSON`);\n}\n//# sourceMappingURL=websearchsource.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b4585d176186\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { WebSearchSource$inboundSchema, WebSearchSource$outboundSchema, } from \"./websearchsource.js\";\nimport { WebSearchStatus$inboundSchema, WebSearchStatus$outboundSchema, } from \"./websearchstatus.js\";\nexport const TypeWebSearchCall = {\n    WebSearchCall: \"web_search_call\",\n};\n/** @internal */\nexport const ActionFindInPage$inboundSchema = z.object({\n    pattern: z.string(),\n    type: z.literal(\"find_in_page\"),\n    url: z.string(),\n});\n/** @internal */\nexport const ActionFindInPage$outboundSchema = z.object({\n    pattern: z.string(),\n    type: z.literal(\"find_in_page\"),\n    url: z.string(),\n});\nexport function actionFindInPageToJSON(actionFindInPage) {\n    return JSON.stringify(ActionFindInPage$outboundSchema.parse(actionFindInPage));\n}\nexport function actionFindInPageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ActionFindInPage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ActionFindInPage' from JSON`);\n}\n/** @internal */\nexport const ActionOpenPage$inboundSchema = z.object({\n    type: z.literal(\"open_page\"),\n    url: z.nullable(z.string()).optional(),\n});\n/** @internal */\nexport const ActionOpenPage$outboundSchema = z.object({\n    type: z.literal(\"open_page\"),\n    url: z.nullable(z.string()).optional(),\n});\nexport function actionOpenPageToJSON(actionOpenPage) {\n    return JSON.stringify(ActionOpenPage$outboundSchema.parse(actionOpenPage));\n}\nexport function actionOpenPageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ActionOpenPage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ActionOpenPage' from JSON`);\n}\n/** @internal */\nexport const OutputWebSearchCallItemActionSearch$inboundSchema = z.object({\n    queries: z.array(z.string()).optional(),\n    query: z.string(),\n    sources: z.array(WebSearchSource$inboundSchema).optional(),\n    type: z.literal(\"search\"),\n});\n/** @internal */\nexport const OutputWebSearchCallItemActionSearch$outboundSchema = z.object({\n    queries: z.array(z.string()).optional(),\n    query: z.string(),\n    sources: z.array(WebSearchSource$outboundSchema).optional(),\n    type: z.literal(\"search\"),\n});\nexport function outputWebSearchCallItemActionSearchToJSON(outputWebSearchCallItemActionSearch) {\n    return JSON.stringify(OutputWebSearchCallItemActionSearch$outboundSchema.parse(outputWebSearchCallItemActionSearch));\n}\nexport function outputWebSearchCallItemActionSearchFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputWebSearchCallItemActionSearch$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputWebSearchCallItemActionSearch' from JSON`);\n}\n/** @internal */\nexport const Action$inboundSchema = discriminatedUnion(\"type\", {\n    search: z.lazy(() => OutputWebSearchCallItemActionSearch$inboundSchema),\n    open_page: z.lazy(() => ActionOpenPage$inboundSchema),\n    find_in_page: z.lazy(() => ActionFindInPage$inboundSchema),\n});\n/** @internal */\nexport const Action$outboundSchema = z\n    .union([\n    z.lazy(() => OutputWebSearchCallItemActionSearch$outboundSchema),\n    z.lazy(() => ActionOpenPage$outboundSchema),\n    z.lazy(() => ActionFindInPage$outboundSchema),\n]);\nexport function actionToJSON(action) {\n    return JSON.stringify(Action$outboundSchema.parse(action));\n}\nexport function actionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Action$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Action' from JSON`);\n}\n/** @internal */\nexport const TypeWebSearchCall$inboundSchema = z.enum(TypeWebSearchCall);\n/** @internal */\nexport const TypeWebSearchCall$outboundSchema = TypeWebSearchCall$inboundSchema;\n/** @internal */\nexport const OutputWebSearchCallItem$inboundSchema = z.object({\n    action: discriminatedUnion(\"type\", {\n        search: z.lazy(() => OutputWebSearchCallItemActionSearch$inboundSchema),\n        open_page: z.lazy(() => ActionOpenPage$inboundSchema),\n        find_in_page: z.lazy(() => ActionFindInPage$inboundSchema),\n    }).optional(),\n    id: z.string(),\n    status: WebSearchStatus$inboundSchema,\n    type: TypeWebSearchCall$inboundSchema,\n});\n/** @internal */\nexport const OutputWebSearchCallItem$outboundSchema = z.object({\n    action: z.union([\n        z.lazy(() => OutputWebSearchCallItemActionSearch$outboundSchema),\n        z.lazy(() => ActionOpenPage$outboundSchema),\n        z.lazy(() => ActionFindInPage$outboundSchema),\n    ]).optional(),\n    id: z.string(),\n    status: WebSearchStatus$outboundSchema,\n    type: TypeWebSearchCall$outboundSchema,\n});\nexport function outputWebSearchCallItemToJSON(outputWebSearchCallItem) {\n    return JSON.stringify(OutputWebSearchCallItem$outboundSchema.parse(outputWebSearchCallItem));\n}\nexport function outputWebSearchCallItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputWebSearchCallItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputWebSearchCallItem' from JSON`);\n}\n//# sourceMappingURL=outputwebsearchcallitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 92114d9bad95\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ToolCallStatus$inboundSchema, ToolCallStatus$outboundSchema, } from \"./toolcallstatus.js\";\nexport const OutputWebSearchServerToolItemTypeURL = {\n    Url: \"url\",\n};\nexport const OutputWebSearchServerToolItemTypeSearch = {\n    Search: \"search\",\n};\nexport const OutputWebSearchServerToolItemTypeOpenrouterWebSearch = {\n    OpenrouterWebSearch: \"openrouter:web_search\",\n};\n/** @internal */\nexport const OutputWebSearchServerToolItemTypeURL$inboundSchema = z.enum(OutputWebSearchServerToolItemTypeURL);\n/** @internal */\nexport const OutputWebSearchServerToolItemTypeURL$outboundSchema = OutputWebSearchServerToolItemTypeURL$inboundSchema;\n/** @internal */\nexport const OutputWebSearchServerToolItemSource$inboundSchema = z.object({\n    type: OutputWebSearchServerToolItemTypeURL$inboundSchema,\n    url: z.string(),\n});\n/** @internal */\nexport const OutputWebSearchServerToolItemSource$outboundSchema = z.object({\n    type: OutputWebSearchServerToolItemTypeURL$outboundSchema,\n    url: z.string(),\n});\nexport function outputWebSearchServerToolItemSourceToJSON(outputWebSearchServerToolItemSource) {\n    return JSON.stringify(OutputWebSearchServerToolItemSource$outboundSchema.parse(outputWebSearchServerToolItemSource));\n}\nexport function outputWebSearchServerToolItemSourceFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputWebSearchServerToolItemSource$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputWebSearchServerToolItemSource' from JSON`);\n}\n/** @internal */\nexport const OutputWebSearchServerToolItemTypeSearch$inboundSchema = z.enum(OutputWebSearchServerToolItemTypeSearch);\n/** @internal */\nexport const OutputWebSearchServerToolItemTypeSearch$outboundSchema = OutputWebSearchServerToolItemTypeSearch$inboundSchema;\n/** @internal */\nexport const OutputWebSearchServerToolItemAction$inboundSchema = z.object({\n    query: z.string(),\n    sources: z.array(z.lazy(() => OutputWebSearchServerToolItemSource$inboundSchema)).optional(),\n    type: OutputWebSearchServerToolItemTypeSearch$inboundSchema,\n});\n/** @internal */\nexport const OutputWebSearchServerToolItemAction$outboundSchema = z.object({\n    query: z.string(),\n    sources: z.array(z.lazy(() => OutputWebSearchServerToolItemSource$outboundSchema)).optional(),\n    type: OutputWebSearchServerToolItemTypeSearch$outboundSchema,\n});\nexport function outputWebSearchServerToolItemActionToJSON(outputWebSearchServerToolItemAction) {\n    return JSON.stringify(OutputWebSearchServerToolItemAction$outboundSchema.parse(outputWebSearchServerToolItemAction));\n}\nexport function outputWebSearchServerToolItemActionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputWebSearchServerToolItemAction$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputWebSearchServerToolItemAction' from JSON`);\n}\n/** @internal */\nexport const OutputWebSearchServerToolItemTypeOpenrouterWebSearch$inboundSchema = z\n    .enum(OutputWebSearchServerToolItemTypeOpenrouterWebSearch);\n/** @internal */\nexport const OutputWebSearchServerToolItemTypeOpenrouterWebSearch$outboundSchema = OutputWebSearchServerToolItemTypeOpenrouterWebSearch$inboundSchema;\n/** @internal */\nexport const OutputWebSearchServerToolItem$inboundSchema = z.object({\n    action: z.lazy(() => OutputWebSearchServerToolItemAction$inboundSchema)\n        .optional(),\n    id: z.string().optional(),\n    status: ToolCallStatus$inboundSchema,\n    type: OutputWebSearchServerToolItemTypeOpenrouterWebSearch$inboundSchema,\n});\n/** @internal */\nexport const OutputWebSearchServerToolItem$outboundSchema = z.object({\n    action: z.lazy(() => OutputWebSearchServerToolItemAction$outboundSchema)\n        .optional(),\n    id: z.string().optional(),\n    status: ToolCallStatus$outboundSchema,\n    type: OutputWebSearchServerToolItemTypeOpenrouterWebSearch$outboundSchema,\n});\nexport function outputWebSearchServerToolItemToJSON(outputWebSearchServerToolItem) {\n    return JSON.stringify(OutputWebSearchServerToolItem$outboundSchema.parse(outputWebSearchServerToolItem));\n}\nexport function outputWebSearchServerToolItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputWebSearchServerToolItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputWebSearchServerToolItem' from JSON`);\n}\n//# sourceMappingURL=outputwebsearchservertoolitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9c06c18de6d6\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nexport const ReasoningSummaryTextType = {\n    SummaryText: \"summary_text\",\n};\n/** @internal */\nexport const ReasoningSummaryTextType$inboundSchema = z.enum(ReasoningSummaryTextType);\n/** @internal */\nexport const ReasoningSummaryTextType$outboundSchema = ReasoningSummaryTextType$inboundSchema;\n/** @internal */\nexport const ReasoningSummaryText$inboundSchema = z.object({\n    text: z.string(),\n    type: ReasoningSummaryTextType$inboundSchema,\n});\n/** @internal */\nexport const ReasoningSummaryText$outboundSchema = z.object({\n    text: z.string(),\n    type: ReasoningSummaryTextType$outboundSchema,\n});\nexport function reasoningSummaryTextToJSON(reasoningSummaryText) {\n    return JSON.stringify(ReasoningSummaryText$outboundSchema.parse(reasoningSummaryText));\n}\nexport function reasoningSummaryTextFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ReasoningSummaryText$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ReasoningSummaryText' from JSON`);\n}\n//# sourceMappingURL=reasoningsummarytext.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 347a000c48b1\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { ReasoningFormat$outboundSchema, } from \"./reasoningformat.js\";\nimport { ReasoningSummaryText$outboundSchema, } from \"./reasoningsummarytext.js\";\nimport { ReasoningTextContent$outboundSchema, } from \"./reasoningtextcontent.js\";\nexport const ReasoningItemStatusInProgress = {\n    InProgress: \"in_progress\",\n};\nexport const ReasoningItemStatusIncomplete = {\n    Incomplete: \"incomplete\",\n};\nexport const ReasoningItemStatusCompleted = {\n    Completed: \"completed\",\n};\nexport const ReasoningItemType = {\n    Reasoning: \"reasoning\",\n};\n/** @internal */\nexport const ReasoningItemStatusInProgress$outboundSchema = z.enum(ReasoningItemStatusInProgress);\n/** @internal */\nexport const ReasoningItemStatusIncomplete$outboundSchema = z.enum(ReasoningItemStatusIncomplete);\n/** @internal */\nexport const ReasoningItemStatusCompleted$outboundSchema = z.enum(ReasoningItemStatusCompleted);\n/** @internal */\nexport const ReasoningItemStatusUnion$outboundSchema = z.union([\n    ReasoningItemStatusCompleted$outboundSchema,\n    ReasoningItemStatusIncomplete$outboundSchema,\n    ReasoningItemStatusInProgress$outboundSchema,\n]);\nexport function reasoningItemStatusUnionToJSON(reasoningItemStatusUnion) {\n    return JSON.stringify(ReasoningItemStatusUnion$outboundSchema.parse(reasoningItemStatusUnion));\n}\n/** @internal */\nexport const ReasoningItemType$outboundSchema = z.enum(ReasoningItemType);\n/** @internal */\nexport const ReasoningItem$outboundSchema = z.object({\n    content: z.nullable(z.array(ReasoningTextContent$outboundSchema)).optional(),\n    encryptedContent: z.nullable(z.string()).optional(),\n    id: z.string(),\n    status: z.union([\n        ReasoningItemStatusCompleted$outboundSchema,\n        ReasoningItemStatusIncomplete$outboundSchema,\n        ReasoningItemStatusInProgress$outboundSchema,\n    ]).optional(),\n    summary: z.array(ReasoningSummaryText$outboundSchema),\n    type: ReasoningItemType$outboundSchema,\n    format: z.nullable(ReasoningFormat$outboundSchema).optional(),\n    signature: z.nullable(z.string()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        encryptedContent: \"encrypted_content\",\n    });\n});\nexport function reasoningItemToJSON(reasoningItem) {\n    return JSON.stringify(ReasoningItem$outboundSchema.parse(reasoningItem));\n}\n//# sourceMappingURL=reasoningitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a94bd412c431\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const ShellCallItemStatus = {\n    InProgress: \"in_progress\",\n    Completed: \"completed\",\n    Incomplete: \"incomplete\",\n};\nexport const ShellCallItemType = {\n    ShellCall: \"shell_call\",\n};\n/** @internal */\nexport const ShellCallItemAction$outboundSchema = z.object({\n    commands: z.array(z.string()),\n    maxOutputLength: z.nullable(z.int()).optional(),\n    timeoutMs: z.nullable(z.int()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        maxOutputLength: \"max_output_length\",\n        timeoutMs: \"timeout_ms\",\n    });\n});\nexport function shellCallItemActionToJSON(shellCallItemAction) {\n    return JSON.stringify(ShellCallItemAction$outboundSchema.parse(shellCallItemAction));\n}\n/** @internal */\nexport const ShellCallItemStatus$outboundSchema = openEnums.outboundSchema(ShellCallItemStatus);\n/** @internal */\nexport const ShellCallItemType$outboundSchema = z.enum(ShellCallItemType);\n/** @internal */\nexport const ShellCallItem$outboundSchema = z.object({\n    action: z.lazy(() => ShellCallItemAction$outboundSchema),\n    callId: z.string(),\n    environment: z.nullable(z.any()).optional(),\n    id: z.nullable(z.string()).optional(),\n    status: z.nullable(ShellCallItemStatus$outboundSchema).optional(),\n    type: ShellCallItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        callId: \"call_id\",\n    });\n});\nexport function shellCallItemToJSON(shellCallItem) {\n    return JSON.stringify(ShellCallItem$outboundSchema.parse(shellCallItem));\n}\n//# sourceMappingURL=shellcallitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7fbbfc5a6ebc\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const ShellCallOutputItemStatus = {\n    InProgress: \"in_progress\",\n    Completed: \"completed\",\n    Incomplete: \"incomplete\",\n};\nexport const ShellCallOutputItemType = {\n    ShellCallOutput: \"shell_call_output\",\n};\n/** @internal */\nexport const ShellCallOutputItemOutput$outboundSchema = z.object({\n    content: z.nullable(z.string()).optional(),\n    exitCode: z.nullable(z.int()).optional(),\n    type: z.string(),\n    additionalProperties: z.record(z.string(), z.nullable(z.any())).optional(),\n}).transform((v) => {\n    return {\n        ...v.additionalProperties,\n        ...remap$(v, {\n            exitCode: \"exit_code\",\n            additionalProperties: null,\n        }),\n    };\n});\nexport function shellCallOutputItemOutputToJSON(shellCallOutputItemOutput) {\n    return JSON.stringify(ShellCallOutputItemOutput$outboundSchema.parse(shellCallOutputItemOutput));\n}\n/** @internal */\nexport const ShellCallOutputItemStatus$outboundSchema = openEnums.outboundSchema(ShellCallOutputItemStatus);\n/** @internal */\nexport const ShellCallOutputItemType$outboundSchema = z.enum(ShellCallOutputItemType);\n/** @internal */\nexport const ShellCallOutputItem$outboundSchema = z.object({\n    callId: z.string(),\n    id: z.nullable(z.string()).optional(),\n    maxOutputLength: z.nullable(z.int()).optional(),\n    output: z.array(z.lazy(() => ShellCallOutputItemOutput$outboundSchema)),\n    status: z.nullable(ShellCallOutputItemStatus$outboundSchema).optional(),\n    type: ShellCallOutputItemType$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        callId: \"call_id\",\n        maxOutputLength: \"max_output_length\",\n    });\n});\nexport function shellCallOutputItemToJSON(shellCallOutputItem) {\n    return JSON.stringify(ShellCallOutputItem$outboundSchema.parse(shellCallOutputItem));\n}\n//# sourceMappingURL=shellcalloutputitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3aff2165a17d\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { ApplyPatchCallItem$outboundSchema, } from \"./applypatchcallitem.js\";\nimport { ApplyPatchCallOutputItem$outboundSchema, } from \"./applypatchcalloutputitem.js\";\nimport { CompactionItem$outboundSchema, } from \"./compactionitem.js\";\nimport { CustomToolCallItem$outboundSchema, } from \"./customtoolcallitem.js\";\nimport { CustomToolCallOutputItem$outboundSchema, } from \"./customtoolcalloutputitem.js\";\nimport { EasyInputMessage$outboundSchema, } from \"./easyinputmessage.js\";\nimport { FunctionCallItem$outboundSchema, } from \"./functioncallitem.js\";\nimport { FunctionCallOutputItem$outboundSchema, } from \"./functioncalloutputitem.js\";\nimport { InputMessageItem$outboundSchema, } from \"./inputmessageitem.js\";\nimport { ItemReferenceItem$outboundSchema, } from \"./itemreferenceitem.js\";\nimport { LocalShellCallItem$outboundSchema, } from \"./localshellcallitem.js\";\nimport { LocalShellCallOutputItem$outboundSchema, } from \"./localshellcalloutputitem.js\";\nimport { McpApprovalRequestItem$outboundSchema, } from \"./mcpapprovalrequestitem.js\";\nimport { McpApprovalResponseItem$outboundSchema, } from \"./mcpapprovalresponseitem.js\";\nimport { McpCallItem$outboundSchema, } from \"./mcpcallitem.js\";\nimport { McpListToolsItem$outboundSchema, } from \"./mcplisttoolsitem.js\";\nimport { OpenAIResponsesRefusalContent$outboundSchema, } from \"./openairesponsesrefusalcontent.js\";\nimport { OutputAdvisorServerToolItem$outboundSchema, } from \"./outputadvisorservertoolitem.js\";\nimport { OutputApplyPatchServerToolItem$outboundSchema, } from \"./outputapplypatchservertoolitem.js\";\nimport { OutputBashServerToolItem$outboundSchema, } from \"./outputbashservertoolitem.js\";\nimport { OutputBrowserUseServerToolItem$outboundSchema, } from \"./outputbrowseruseservertoolitem.js\";\nimport { OutputCodeInterpreterCallItem$outboundSchema, } from \"./outputcodeinterpretercallitem.js\";\nimport { OutputCodeInterpreterServerToolItem$outboundSchema, } from \"./outputcodeinterpreterservertoolitem.js\";\nimport { OutputComputerCallItem$outboundSchema, } from \"./outputcomputercallitem.js\";\nimport { OutputCustomToolCallItem$outboundSchema, } from \"./outputcustomtoolcallitem.js\";\nimport { OutputDatetimeItem$outboundSchema, } from \"./outputdatetimeitem.js\";\nimport { OutputFileSearchCallItem$outboundSchema, } from \"./outputfilesearchcallitem.js\";\nimport { OutputFileSearchServerToolItem$outboundSchema, } from \"./outputfilesearchservertoolitem.js\";\nimport { OutputFunctionCallItem$outboundSchema, } from \"./outputfunctioncallitem.js\";\nimport { OutputFusionServerToolItem$outboundSchema, } from \"./outputfusionservertoolitem.js\";\nimport { OutputImageGenerationCallItem$outboundSchema, } from \"./outputimagegenerationcallitem.js\";\nimport { OutputImageGenerationServerToolItem$outboundSchema, } from \"./outputimagegenerationservertoolitem.js\";\nimport { OutputMcpServerToolItem$outboundSchema, } from \"./outputmcpservertoolitem.js\";\nimport { OutputMemoryServerToolItem$outboundSchema, } from \"./outputmemoryservertoolitem.js\";\nimport { OutputSearchModelsServerToolItem$outboundSchema, } from \"./outputsearchmodelsservertoolitem.js\";\nimport { OutputSubagentServerToolItem$outboundSchema, } from \"./outputsubagentservertoolitem.js\";\nimport { OutputTextEditorServerToolItem$outboundSchema, } from \"./outputtexteditorservertoolitem.js\";\nimport { OutputToolSearchServerToolItem$outboundSchema, } from \"./outputtoolsearchservertoolitem.js\";\nimport { OutputWebFetchServerToolItem$outboundSchema, } from \"./outputwebfetchservertoolitem.js\";\nimport { OutputWebSearchCallItem$outboundSchema, } from \"./outputwebsearchcallitem.js\";\nimport { OutputWebSearchServerToolItem$outboundSchema, } from \"./outputwebsearchservertoolitem.js\";\nimport { ReasoningFormat$outboundSchema, } from \"./reasoningformat.js\";\nimport { ReasoningItem$outboundSchema, } from \"./reasoningitem.js\";\nimport { ReasoningSummaryText$outboundSchema, } from \"./reasoningsummarytext.js\";\nimport { ReasoningTextContent$outboundSchema, } from \"./reasoningtextcontent.js\";\nimport { ResponseOutputText$outboundSchema, } from \"./responseoutputtext.js\";\nimport { ShellCallItem$outboundSchema, } from \"./shellcallitem.js\";\nimport { ShellCallOutputItem$outboundSchema, } from \"./shellcalloutputitem.js\";\nexport const InputsStatusInProgress2 = {\n    InProgress: \"in_progress\",\n};\nexport const InputsStatusIncomplete2 = {\n    Incomplete: \"incomplete\",\n};\nexport const InputsStatusCompleted2 = {\n    Completed: \"completed\",\n};\nexport const InputsTypeReasoning = {\n    Reasoning: \"reasoning\",\n};\nexport const InputsPhaseFinalAnswer = {\n    FinalAnswer: \"final_answer\",\n};\nexport const InputsPhaseCommentary = {\n    Commentary: \"commentary\",\n};\nexport const InputsRole = {\n    Assistant: \"assistant\",\n};\nexport const InputsStatusInProgress1 = {\n    InProgress: \"in_progress\",\n};\nexport const InputsStatusIncomplete1 = {\n    Incomplete: \"incomplete\",\n};\nexport const InputsStatusCompleted1 = {\n    Completed: \"completed\",\n};\nexport const InputsTypeMessage = {\n    Message: \"message\",\n};\n/** @internal */\nexport const InputsStatusInProgress2$outboundSchema = z.enum(InputsStatusInProgress2);\n/** @internal */\nexport const InputsStatusIncomplete2$outboundSchema = z.enum(InputsStatusIncomplete2);\n/** @internal */\nexport const InputsStatusCompleted2$outboundSchema = z.enum(InputsStatusCompleted2);\n/** @internal */\nexport const InputsStatusUnion2$outboundSchema = z.union([\n    InputsStatusCompleted2$outboundSchema,\n    InputsStatusIncomplete2$outboundSchema,\n    InputsStatusInProgress2$outboundSchema,\n]);\nexport function inputsStatusUnion2ToJSON(inputsStatusUnion2) {\n    return JSON.stringify(InputsStatusUnion2$outboundSchema.parse(inputsStatusUnion2));\n}\n/** @internal */\nexport const InputsTypeReasoning$outboundSchema = z.enum(InputsTypeReasoning);\n/** @internal */\nexport const InputsReasoning$outboundSchema = z.object({\n    content: z.nullable(z.array(ReasoningTextContent$outboundSchema)).optional(),\n    encryptedContent: z.nullable(z.string()).optional(),\n    id: z.string(),\n    status: z.union([\n        InputsStatusCompleted2$outboundSchema,\n        InputsStatusIncomplete2$outboundSchema,\n        InputsStatusInProgress2$outboundSchema,\n    ]).optional(),\n    summary: z.nullable(z.array(ReasoningSummaryText$outboundSchema)),\n    type: InputsTypeReasoning$outboundSchema,\n    format: z.nullable(ReasoningFormat$outboundSchema).optional(),\n    signature: z.nullable(z.string()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        encryptedContent: \"encrypted_content\",\n    });\n});\nexport function inputsReasoningToJSON(inputsReasoning) {\n    return JSON.stringify(InputsReasoning$outboundSchema.parse(inputsReasoning));\n}\n/** @internal */\nexport const InputsContent1$outboundSchema = z.union([\n    ResponseOutputText$outboundSchema,\n    OpenAIResponsesRefusalContent$outboundSchema,\n]);\nexport function inputsContent1ToJSON(inputsContent1) {\n    return JSON.stringify(InputsContent1$outboundSchema.parse(inputsContent1));\n}\n/** @internal */\nexport const InputsContent2$outboundSchema = z.union([\n    z.array(z.union([\n        ResponseOutputText$outboundSchema,\n        OpenAIResponsesRefusalContent$outboundSchema,\n    ])),\n    z.string(),\n    z.any(),\n]);\nexport function inputsContent2ToJSON(inputsContent2) {\n    return JSON.stringify(InputsContent2$outboundSchema.parse(inputsContent2));\n}\n/** @internal */\nexport const InputsPhaseFinalAnswer$outboundSchema = z.enum(InputsPhaseFinalAnswer);\n/** @internal */\nexport const InputsPhaseCommentary$outboundSchema = z.enum(InputsPhaseCommentary);\n/** @internal */\nexport const InputsPhaseUnion$outboundSchema = z.union([\n    InputsPhaseCommentary$outboundSchema,\n    InputsPhaseFinalAnswer$outboundSchema,\n    z.any(),\n]);\nexport function inputsPhaseUnionToJSON(inputsPhaseUnion) {\n    return JSON.stringify(InputsPhaseUnion$outboundSchema.parse(inputsPhaseUnion));\n}\n/** @internal */\nexport const InputsRole$outboundSchema = z.enum(InputsRole);\n/** @internal */\nexport const InputsStatusInProgress1$outboundSchema = z.enum(InputsStatusInProgress1);\n/** @internal */\nexport const InputsStatusIncomplete1$outboundSchema = z.enum(InputsStatusIncomplete1);\n/** @internal */\nexport const InputsStatusCompleted1$outboundSchema = z.enum(InputsStatusCompleted1);\n/** @internal */\nexport const InputsStatusUnion1$outboundSchema = z.union([\n    InputsStatusCompleted1$outboundSchema,\n    InputsStatusIncomplete1$outboundSchema,\n    InputsStatusInProgress1$outboundSchema,\n]);\nexport function inputsStatusUnion1ToJSON(inputsStatusUnion1) {\n    return JSON.stringify(InputsStatusUnion1$outboundSchema.parse(inputsStatusUnion1));\n}\n/** @internal */\nexport const InputsTypeMessage$outboundSchema = z.enum(InputsTypeMessage);\n/** @internal */\nexport const InputsMessage$outboundSchema = z.object({\n    content: z.nullable(z.union([\n        z.array(z.union([\n            ResponseOutputText$outboundSchema,\n            OpenAIResponsesRefusalContent$outboundSchema,\n        ])),\n        z.string(),\n        z.any(),\n    ])),\n    id: z.string(),\n    phase: z.nullable(z.union([\n        InputsPhaseCommentary$outboundSchema,\n        InputsPhaseFinalAnswer$outboundSchema,\n        z.any(),\n    ])).optional(),\n    role: InputsRole$outboundSchema,\n    status: z.union([\n        InputsStatusCompleted1$outboundSchema,\n        InputsStatusIncomplete1$outboundSchema,\n        InputsStatusInProgress1$outboundSchema,\n    ]).optional(),\n    type: InputsTypeMessage$outboundSchema,\n});\nexport function inputsMessageToJSON(inputsMessage) {\n    return JSON.stringify(InputsMessage$outboundSchema.parse(inputsMessage));\n}\n/** @internal */\nexport const InputsUnion1$outboundSchema = z.union([\n    OutputCodeInterpreterCallItem$outboundSchema,\n    FunctionCallItem$outboundSchema,\n    LocalShellCallItem$outboundSchema,\n    McpApprovalRequestItem$outboundSchema,\n    McpCallItem$outboundSchema,\n    ApplyPatchCallItem$outboundSchema,\n    z.lazy(() => InputsMessage$outboundSchema),\n    OutputFunctionCallItem$outboundSchema,\n    OutputCustomToolCallItem$outboundSchema,\n    OutputFileSearchCallItem$outboundSchema,\n    OutputComputerCallItem$outboundSchema,\n    OutputDatetimeItem$outboundSchema,\n    McpListToolsItem$outboundSchema,\n    CustomToolCallItem$outboundSchema,\n    ReasoningItem$outboundSchema,\n    FunctionCallOutputItem$outboundSchema,\n    ApplyPatchCallOutputItem$outboundSchema,\n    z.lazy(() => InputsReasoning$outboundSchema),\n    OutputWebSearchCallItem$outboundSchema,\n    OutputImageGenerationCallItem$outboundSchema,\n    LocalShellCallOutputItem$outboundSchema,\n    ShellCallItem$outboundSchema,\n    ShellCallOutputItem$outboundSchema,\n    McpApprovalResponseItem$outboundSchema,\n    CustomToolCallOutputItem$outboundSchema,\n    OutputWebSearchServerToolItem$outboundSchema,\n    OutputCodeInterpreterServerToolItem$outboundSchema,\n    OutputFileSearchServerToolItem$outboundSchema,\n    OutputImageGenerationServerToolItem$outboundSchema,\n    OutputBrowserUseServerToolItem$outboundSchema,\n    OutputBashServerToolItem$outboundSchema,\n    OutputTextEditorServerToolItem$outboundSchema,\n    OutputApplyPatchServerToolItem$outboundSchema,\n    OutputWebFetchServerToolItem$outboundSchema,\n    OutputToolSearchServerToolItem$outboundSchema,\n    OutputMemoryServerToolItem$outboundSchema,\n    OutputMcpServerToolItem$outboundSchema,\n    OutputSearchModelsServerToolItem$outboundSchema,\n    OutputFusionServerToolItem$outboundSchema,\n    OutputAdvisorServerToolItem$outboundSchema,\n    OutputSubagentServerToolItem$outboundSchema,\n    CompactionItem$outboundSchema,\n    ItemReferenceItem$outboundSchema,\n    EasyInputMessage$outboundSchema,\n    InputMessageItem$outboundSchema,\n]);\nexport function inputsUnion1ToJSON(inputsUnion1) {\n    return JSON.stringify(InputsUnion1$outboundSchema.parse(inputsUnion1));\n}\n/** @internal */\nexport const InputsUnion$outboundSchema = z.union([\n    z.string(),\n    z.array(z.union([\n        OutputCodeInterpreterCallItem$outboundSchema,\n        FunctionCallItem$outboundSchema,\n        LocalShellCallItem$outboundSchema,\n        McpApprovalRequestItem$outboundSchema,\n        McpCallItem$outboundSchema,\n        ApplyPatchCallItem$outboundSchema,\n        z.lazy(() => InputsMessage$outboundSchema),\n        OutputFunctionCallItem$outboundSchema,\n        OutputCustomToolCallItem$outboundSchema,\n        OutputFileSearchCallItem$outboundSchema,\n        OutputComputerCallItem$outboundSchema,\n        OutputDatetimeItem$outboundSchema,\n        McpListToolsItem$outboundSchema,\n        CustomToolCallItem$outboundSchema,\n        ReasoningItem$outboundSchema,\n        FunctionCallOutputItem$outboundSchema,\n        ApplyPatchCallOutputItem$outboundSchema,\n        z.lazy(() => InputsReasoning$outboundSchema),\n        OutputWebSearchCallItem$outboundSchema,\n        OutputImageGenerationCallItem$outboundSchema,\n        LocalShellCallOutputItem$outboundSchema,\n        ShellCallItem$outboundSchema,\n        ShellCallOutputItem$outboundSchema,\n        McpApprovalResponseItem$outboundSchema,\n        CustomToolCallOutputItem$outboundSchema,\n        OutputWebSearchServerToolItem$outboundSchema,\n        OutputCodeInterpreterServerToolItem$outboundSchema,\n        OutputFileSearchServerToolItem$outboundSchema,\n        OutputImageGenerationServerToolItem$outboundSchema,\n        OutputBrowserUseServerToolItem$outboundSchema,\n        OutputBashServerToolItem$outboundSchema,\n        OutputTextEditorServerToolItem$outboundSchema,\n        OutputApplyPatchServerToolItem$outboundSchema,\n        OutputWebFetchServerToolItem$outboundSchema,\n        OutputToolSearchServerToolItem$outboundSchema,\n        OutputMemoryServerToolItem$outboundSchema,\n        OutputMcpServerToolItem$outboundSchema,\n        OutputSearchModelsServerToolItem$outboundSchema,\n        OutputFusionServerToolItem$outboundSchema,\n        OutputAdvisorServerToolItem$outboundSchema,\n        OutputSubagentServerToolItem$outboundSchema,\n        CompactionItem$outboundSchema,\n        ItemReferenceItem$outboundSchema,\n        EasyInputMessage$outboundSchema,\n        InputMessageItem$outboundSchema,\n    ])),\n]);\nexport function inputsUnionToJSON(inputsUnion) {\n    return JSON.stringify(InputsUnion$outboundSchema.parse(inputsUnion));\n}\n//# sourceMappingURL=inputsunion.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 970f140dadec\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Instruction format type\n */\nexport const InstructType = {\n    None: \"none\",\n    Airoboros: \"airoboros\",\n    Alpaca: \"alpaca\",\n    AlpacaModif: \"alpaca-modif\",\n    Chatml: \"chatml\",\n    Claude: \"claude\",\n    CodeLlama: \"code-llama\",\n    Gemma: \"gemma\",\n    Llama2: \"llama2\",\n    Llama3: \"llama3\",\n    Mistral: \"mistral\",\n    Nemotron: \"nemotron\",\n    Neural: \"neural\",\n    Openchat: \"openchat\",\n    Phi3: \"phi3\",\n    Rwkv: \"rwkv\",\n    Vicuna: \"vicuna\",\n    Zephyr: \"zephyr\",\n    DeepseekR1: \"deepseek-r1\",\n    DeepseekV31: \"deepseek-v3.1\",\n    Qwq: \"qwq\",\n    Qwen3: \"qwen3\",\n};\n/** @internal */\nexport const InstructType$inboundSchema = openEnums.inboundSchema(InstructType);\n//# sourceMappingURL=instructtype.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 48c17eec376a\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const InternalServerResponseErrorData$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n    metadata: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(),\n});\nexport function internalServerResponseErrorDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => InternalServerResponseErrorData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'InternalServerResponseErrorData' from JSON`);\n}\n//# sourceMappingURL=internalserverresponseerrordata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0daee4bf9653\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const KeyAssignment$inboundSchema = z\n    .object({\n    assigned_by: z.nullable(z.string()),\n    created_at: z.string(),\n    guardrail_id: z.string(),\n    id: z.string(),\n    key_hash: z.string(),\n    key_label: z.string(),\n    key_name: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"assigned_by\": \"assignedBy\",\n        \"created_at\": \"createdAt\",\n        \"guardrail_id\": \"guardrailId\",\n        \"key_hash\": \"keyHash\",\n        \"key_label\": \"keyLabel\",\n        \"key_name\": \"keyName\",\n    });\n});\nexport function keyAssignmentFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => KeyAssignment$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'KeyAssignment' from JSON`);\n}\n//# sourceMappingURL=keyassignment.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d76263d711fe\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Size of the search context for web search tools\n */\nexport const SearchContextSizeEnum = {\n    Low: \"low\",\n    Medium: \"medium\",\n    High: \"high\",\n};\n/** @internal */\nexport const SearchContextSizeEnum$inboundSchema = openEnums.inboundSchema(SearchContextSizeEnum);\n/** @internal */\nexport const SearchContextSizeEnum$outboundSchema = openEnums.outboundSchema(SearchContextSizeEnum);\n//# sourceMappingURL=searchcontextsizeenum.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 827204408f55\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const WebSearchDomainFilter$inboundSchema = z.object({\n    allowed_domains: z.nullable(z.array(z.string())).optional(),\n    excluded_domains: z.nullable(z.array(z.string())).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"allowed_domains\": \"allowedDomains\",\n        \"excluded_domains\": \"excludedDomains\",\n    });\n});\n/** @internal */\nexport const WebSearchDomainFilter$outboundSchema = z.object({\n    allowedDomains: z.nullable(z.array(z.string())).optional(),\n    excludedDomains: z.nullable(z.array(z.string())).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        allowedDomains: \"allowed_domains\",\n        excludedDomains: \"excluded_domains\",\n    });\n});\nexport function webSearchDomainFilterToJSON(webSearchDomainFilter) {\n    return JSON.stringify(WebSearchDomainFilter$outboundSchema.parse(webSearchDomainFilter));\n}\nexport function webSearchDomainFilterFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => WebSearchDomainFilter$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'WebSearchDomainFilter' from JSON`);\n}\n//# sourceMappingURL=websearchdomainfilter.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: cc946a3064e3\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nexport const WebSearchUserLocationType = {\n    Approximate: \"approximate\",\n};\n/** @internal */\nexport const WebSearchUserLocationType$inboundSchema = z.enum(WebSearchUserLocationType);\n/** @internal */\nexport const WebSearchUserLocationType$outboundSchema = WebSearchUserLocationType$inboundSchema;\n/** @internal */\nexport const WebSearchUserLocation$inboundSchema = z.object({\n    city: z.nullable(z.string()).optional(),\n    country: z.nullable(z.string()).optional(),\n    region: z.nullable(z.string()).optional(),\n    timezone: z.nullable(z.string()).optional(),\n    type: WebSearchUserLocationType$inboundSchema.optional(),\n});\n/** @internal */\nexport const WebSearchUserLocation$outboundSchema = z.object({\n    city: z.nullable(z.string()).optional(),\n    country: z.nullable(z.string()).optional(),\n    region: z.nullable(z.string()).optional(),\n    timezone: z.nullable(z.string()).optional(),\n    type: WebSearchUserLocationType$outboundSchema.optional(),\n});\nexport function webSearchUserLocationToJSON(webSearchUserLocation) {\n    return JSON.stringify(WebSearchUserLocation$outboundSchema.parse(webSearchUserLocation));\n}\nexport function webSearchUserLocationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => WebSearchUserLocation$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'WebSearchUserLocation' from JSON`);\n}\n//# sourceMappingURL=websearchuserlocation.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1a9c64204177\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { SearchContextSizeEnum$inboundSchema, SearchContextSizeEnum$outboundSchema, } from \"./searchcontextsizeenum.js\";\nimport { WebSearchDomainFilter$inboundSchema, WebSearchDomainFilter$outboundSchema, } from \"./websearchdomainfilter.js\";\nimport { WebSearchEngineEnum$inboundSchema, WebSearchEngineEnum$outboundSchema, } from \"./websearchengineenum.js\";\nimport { WebSearchUserLocation$inboundSchema, WebSearchUserLocation$outboundSchema, } from \"./websearchuserlocation.js\";\n/** @internal */\nexport const LegacyWebSearchServerTool$inboundSchema = z.object({\n    engine: WebSearchEngineEnum$inboundSchema.optional(),\n    filters: z.nullable(WebSearchDomainFilter$inboundSchema).optional(),\n    max_results: z.int().optional(),\n    search_context_size: SearchContextSizeEnum$inboundSchema.optional(),\n    type: z.literal(\"web_search\"),\n    user_location: z.nullable(WebSearchUserLocation$inboundSchema).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"max_results\": \"maxResults\",\n        \"search_context_size\": \"searchContextSize\",\n        \"user_location\": \"userLocation\",\n    });\n});\n/** @internal */\nexport const LegacyWebSearchServerTool$outboundSchema = z.object({\n    engine: WebSearchEngineEnum$outboundSchema.optional(),\n    filters: z.nullable(WebSearchDomainFilter$outboundSchema).optional(),\n    maxResults: z.int().optional(),\n    searchContextSize: SearchContextSizeEnum$outboundSchema.optional(),\n    type: z.literal(\"web_search\"),\n    userLocation: z.nullable(WebSearchUserLocation$outboundSchema).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        maxResults: \"max_results\",\n        searchContextSize: \"search_context_size\",\n        userLocation: \"user_location\",\n    });\n});\nexport function legacyWebSearchServerToolToJSON(legacyWebSearchServerTool) {\n    return JSON.stringify(LegacyWebSearchServerTool$outboundSchema.parse(legacyWebSearchServerTool));\n}\nexport function legacyWebSearchServerToolFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => LegacyWebSearchServerTool$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'LegacyWebSearchServerTool' from JSON`);\n}\n//# sourceMappingURL=legacywebsearchservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 58b401d42307\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { BYOKKey$inboundSchema } from \"./byokkey.js\";\n/** @internal */\nexport const ListBYOKKeysResponse$inboundSchema = z.object({\n    data: z.array(BYOKKey$inboundSchema),\n    total_count: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"total_count\": \"totalCount\",\n    });\n});\nexport function listBYOKKeysResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListBYOKKeysResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListBYOKKeysResponse' from JSON`);\n}\n//# sourceMappingURL=listbyokkeysresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6b2d2af692c7\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const OutputModality = {\n    Text: \"text\",\n    Image: \"image\",\n    Embeddings: \"embeddings\",\n    Audio: \"audio\",\n    Video: \"video\",\n    Rerank: \"rerank\",\n    Speech: \"speech\",\n    Transcription: \"transcription\",\n};\n/** @internal */\nexport const OutputModality$inboundSchema = openEnums.inboundSchema(OutputModality);\n//# sourceMappingURL=outputmodality.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 066287ded212\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const Parameter = {\n    Temperature: \"temperature\",\n    TopP: \"top_p\",\n    TopK: \"top_k\",\n    MinP: \"min_p\",\n    TopA: \"top_a\",\n    FrequencyPenalty: \"frequency_penalty\",\n    PresencePenalty: \"presence_penalty\",\n    RepetitionPenalty: \"repetition_penalty\",\n    MaxTokens: \"max_tokens\",\n    MaxCompletionTokens: \"max_completion_tokens\",\n    LogitBias: \"logit_bias\",\n    Logprobs: \"logprobs\",\n    TopLogprobs: \"top_logprobs\",\n    Seed: \"seed\",\n    ResponseFormat: \"response_format\",\n    StructuredOutputs: \"structured_outputs\",\n    Stop: \"stop\",\n    Tools: \"tools\",\n    ToolChoice: \"tool_choice\",\n    ParallelToolCalls: \"parallel_tool_calls\",\n    IncludeReasoning: \"include_reasoning\",\n    Reasoning: \"reasoning\",\n    ReasoningEffort: \"reasoning_effort\",\n    WebSearchOptions: \"web_search_options\",\n    Verbosity: \"verbosity\",\n};\n/** @internal */\nexport const Parameter$inboundSchema = openEnums\n    .inboundSchema(Parameter);\n//# sourceMappingURL=parameter.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f8001516363f\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const PercentileStats$inboundSchema = z.object({\n    p50: z.number(),\n    p75: z.number(),\n    p90: z.number(),\n    p99: z.number(),\n});\nexport function percentileStatsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => PercentileStats$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'PercentileStats' from JSON`);\n}\n//# sourceMappingURL=percentilestats.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 396ce3186017\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { EndpointStatus$inboundSchema, } from \"./endpointstatus.js\";\nimport { Parameter$inboundSchema } from \"./parameter.js\";\nimport { PercentileStats$inboundSchema, } from \"./percentilestats.js\";\nimport { ProviderName$inboundSchema } from \"./providername.js\";\nexport const PublicEndpointQuantization = {\n    Int4: \"int4\",\n    Int8: \"int8\",\n    Fp4: \"fp4\",\n    Fp6: \"fp6\",\n    Fp8: \"fp8\",\n    Fp16: \"fp16\",\n    Bf16: \"bf16\",\n    Fp32: \"fp32\",\n    Unknown: \"unknown\",\n};\n/** @internal */\nexport const Pricing$inboundSchema = z.object({\n    audio: z.string().optional(),\n    audio_output: z.string().optional(),\n    completion: z.string(),\n    discount: z.number().optional(),\n    image: z.string().optional(),\n    image_output: z.string().optional(),\n    image_token: z.string().optional(),\n    input_audio_cache: z.string().optional(),\n    input_cache_read: z.string().optional(),\n    input_cache_write: z.string().optional(),\n    internal_reasoning: z.string().optional(),\n    prompt: z.string(),\n    request: z.string().optional(),\n    web_search: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"audio_output\": \"audioOutput\",\n        \"image_output\": \"imageOutput\",\n        \"image_token\": \"imageToken\",\n        \"input_audio_cache\": \"inputAudioCache\",\n        \"input_cache_read\": \"inputCacheRead\",\n        \"input_cache_write\": \"inputCacheWrite\",\n        \"internal_reasoning\": \"internalReasoning\",\n        \"web_search\": \"webSearch\",\n    });\n});\nexport function pricingFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Pricing$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Pricing' from JSON`);\n}\n/** @internal */\nexport const PublicEndpointQuantization$inboundSchema = openEnums.inboundSchema(PublicEndpointQuantization);\n/** @internal */\nexport const PublicEndpoint$inboundSchema = z.object({\n    context_length: z.int(),\n    latency_last_30m: z.nullable(PercentileStats$inboundSchema),\n    max_completion_tokens: z.nullable(z.int()),\n    max_prompt_tokens: z.nullable(z.int()),\n    model_id: z.string(),\n    model_name: z.string(),\n    name: z.string(),\n    pricing: z.lazy(() => Pricing$inboundSchema),\n    provider_name: ProviderName$inboundSchema,\n    quantization: z.nullable(PublicEndpointQuantization$inboundSchema),\n    status: EndpointStatus$inboundSchema.optional(),\n    supported_parameters: z.array(Parameter$inboundSchema),\n    supports_implicit_caching: z.boolean(),\n    tag: z.string(),\n    throughput_last_30m: z.nullable(PercentileStats$inboundSchema),\n    uptime_last_1d: z.nullable(z.number()),\n    uptime_last_30m: z.nullable(z.number()),\n    uptime_last_5m: z.nullable(z.number()),\n}).transform((v) => {\n    return remap$(v, {\n        \"context_length\": \"contextLength\",\n        \"latency_last_30m\": \"latencyLast30m\",\n        \"max_completion_tokens\": \"maxCompletionTokens\",\n        \"max_prompt_tokens\": \"maxPromptTokens\",\n        \"model_id\": \"modelId\",\n        \"model_name\": \"modelName\",\n        \"provider_name\": \"providerName\",\n        \"supported_parameters\": \"supportedParameters\",\n        \"supports_implicit_caching\": \"supportsImplicitCaching\",\n        \"throughput_last_30m\": \"throughputLast30m\",\n        \"uptime_last_1d\": \"uptimeLast1d\",\n        \"uptime_last_30m\": \"uptimeLast30m\",\n        \"uptime_last_5m\": \"uptimeLast5m\",\n    });\n});\nexport function publicEndpointFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => PublicEndpoint$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'PublicEndpoint' from JSON`);\n}\n//# sourceMappingURL=publicendpoint.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5178e92a44ba\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { InputModality$inboundSchema } from \"./inputmodality.js\";\nimport { InstructType$inboundSchema } from \"./instructtype.js\";\nimport { OutputModality$inboundSchema, } from \"./outputmodality.js\";\nimport { PublicEndpoint$inboundSchema, } from \"./publicendpoint.js\";\n/**\n * Tokenizer type used by the model\n */\nexport const Tokenizer = {\n    Router: \"Router\",\n    Media: \"Media\",\n    Other: \"Other\",\n    Gpt: \"GPT\",\n    Claude: \"Claude\",\n    Gemini: \"Gemini\",\n    Gemma: \"Gemma\",\n    Grok: \"Grok\",\n    Cohere: \"Cohere\",\n    Nova: \"Nova\",\n    Qwen: \"Qwen\",\n    Yi: \"Yi\",\n    DeepSeek: \"DeepSeek\",\n    Mistral: \"Mistral\",\n    Llama2: \"Llama2\",\n    Llama3: \"Llama3\",\n    Llama4: \"Llama4\",\n    PaLM: \"PaLM\",\n    Rwkv: \"RWKV\",\n    Qwen3: \"Qwen3\",\n};\n/** @internal */\nexport const Tokenizer$inboundSchema = openEnums\n    .inboundSchema(Tokenizer);\n/** @internal */\nexport const Architecture$inboundSchema = z\n    .object({\n    input_modalities: z.array(InputModality$inboundSchema),\n    instruct_type: z.nullable(InstructType$inboundSchema),\n    modality: z.nullable(z.string()),\n    output_modalities: z.array(OutputModality$inboundSchema),\n    tokenizer: z.nullable(Tokenizer$inboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        \"input_modalities\": \"inputModalities\",\n        \"instruct_type\": \"instructType\",\n        \"output_modalities\": \"outputModalities\",\n    });\n});\nexport function architectureFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Architecture$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Architecture' from JSON`);\n}\n/** @internal */\nexport const ListEndpointsResponse$inboundSchema = z.object({\n    architecture: z.lazy(() => Architecture$inboundSchema),\n    created: z.int(),\n    description: z.string(),\n    endpoints: z.array(PublicEndpoint$inboundSchema),\n    id: z.string(),\n    name: z.string(),\n});\nexport function listEndpointsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListEndpointsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListEndpointsResponse' from JSON`);\n}\n//# sourceMappingURL=listendpointsresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 281c3f73d27b\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { Guardrail$inboundSchema } from \"./guardrail.js\";\n/** @internal */\nexport const ListGuardrailsResponse$inboundSchema = z.object({\n    data: z.array(Guardrail$inboundSchema),\n    total_count: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"total_count\": \"totalCount\",\n    });\n});\nexport function listGuardrailsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListGuardrailsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListGuardrailsResponse' from JSON`);\n}\n//# sourceMappingURL=listguardrailsresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6c14372c6290\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { KeyAssignment$inboundSchema } from \"./keyassignment.js\";\n/** @internal */\nexport const ListKeyAssignmentsResponse$inboundSchema = z.object({\n    data: z.array(KeyAssignment$inboundSchema),\n    total_count: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"total_count\": \"totalCount\",\n    });\n});\nexport function listKeyAssignmentsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListKeyAssignmentsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListKeyAssignmentsResponse' from JSON`);\n}\n//# sourceMappingURL=listkeyassignmentsresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5e100b48823e\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const MemberAssignment$inboundSchema = z.object({\n    assigned_by: z.nullable(z.string()),\n    created_at: z.string(),\n    guardrail_id: z.string(),\n    id: z.string(),\n    organization_id: z.string(),\n    user_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"assigned_by\": \"assignedBy\",\n        \"created_at\": \"createdAt\",\n        \"guardrail_id\": \"guardrailId\",\n        \"organization_id\": \"organizationId\",\n        \"user_id\": \"userId\",\n    });\n});\nexport function memberAssignmentFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => MemberAssignment$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'MemberAssignment' from JSON`);\n}\n//# sourceMappingURL=memberassignment.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: bbd89d5e9f3f\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { MemberAssignment$inboundSchema, } from \"./memberassignment.js\";\n/** @internal */\nexport const ListMemberAssignmentsResponse$inboundSchema = z.object({\n    data: z.array(MemberAssignment$inboundSchema),\n    total_count: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"total_count\": \"totalCount\",\n    });\n});\nexport function listMemberAssignmentsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListMemberAssignmentsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListMemberAssignmentsResponse' from JSON`);\n}\n//# sourceMappingURL=listmemberassignmentsresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5ce39dbed1ba\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityDestination$inboundSchema, } from \"./observabilitydestination.js\";\n/** @internal */\nexport const ListObservabilityDestinationsResponse$inboundSchema = z.object({\n    data: z.array(ObservabilityDestination$inboundSchema),\n    total_count: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"total_count\": \"totalCount\",\n    });\n});\nexport function listObservabilityDestinationsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListObservabilityDestinationsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListObservabilityDestinationsResponse' from JSON`);\n}\n//# sourceMappingURL=listobservabilitydestinationsresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f9cbbbd64494\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { PresetStatus$inboundSchema } from \"./presetstatus.js\";\n/** @internal */\nexport const Preset$inboundSchema = z.object({\n    created_at: z.string(),\n    creator_user_id: z.nullable(z.string()),\n    description: z.nullable(z.string()),\n    designated_version_id: z.nullable(z.string()),\n    id: z.string(),\n    name: z.string(),\n    slug: z.string(),\n    status: PresetStatus$inboundSchema,\n    status_updated_at: z.nullable(z.string()),\n    updated_at: z.string(),\n    workspace_id: z.nullable(z.string()),\n}).transform((v) => {\n    return remap$(v, {\n        \"created_at\": \"createdAt\",\n        \"creator_user_id\": \"creatorUserId\",\n        \"designated_version_id\": \"designatedVersionId\",\n        \"status_updated_at\": \"statusUpdatedAt\",\n        \"updated_at\": \"updatedAt\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function presetFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Preset$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Preset' from JSON`);\n}\n//# sourceMappingURL=preset.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: fa1eada5cc46\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { Preset$inboundSchema } from \"./preset.js\";\n/** @internal */\nexport const ListPresetsResponse$inboundSchema = z.object({\n    data: z.array(Preset$inboundSchema),\n    total_count: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"total_count\": \"totalCount\",\n    });\n});\nexport function listPresetsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListPresetsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListPresetsResponse' from JSON`);\n}\n//# sourceMappingURL=listpresetsresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 071060ed138f\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { PresetDesignatedVersion$inboundSchema, } from \"./presetdesignatedversion.js\";\n/** @internal */\nexport const ListPresetVersionsResponse$inboundSchema = z.object({\n    data: z.array(z.nullable(PresetDesignatedVersion$inboundSchema)),\n    total_count: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"total_count\": \"totalCount\",\n    });\n});\nexport function listPresetVersionsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListPresetVersionsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListPresetVersionsResponse' from JSON`);\n}\n//# sourceMappingURL=listpresetversionsresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9aaaad5475a3\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { Workspace$inboundSchema } from \"./workspace.js\";\n/** @internal */\nexport const ListWorkspacesResponse$inboundSchema = z.object({\n    data: z.array(Workspace$inboundSchema),\n    total_count: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"total_count\": \"totalCount\",\n    });\n});\nexport function listWorkspacesResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListWorkspacesResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListWorkspacesResponse' from JSON`);\n}\n//# sourceMappingURL=listworkspacesresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5e5a26b93ed7\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const ConnectorId = {\n    ConnectorDropbox: \"connector_dropbox\",\n    ConnectorGmail: \"connector_gmail\",\n    ConnectorGooglecalendar: \"connector_googlecalendar\",\n    ConnectorGoogledrive: \"connector_googledrive\",\n    ConnectorMicrosoftteams: \"connector_microsoftteams\",\n    ConnectorOutlookcalendar: \"connector_outlookcalendar\",\n    ConnectorOutlookemail: \"connector_outlookemail\",\n    ConnectorSharepoint: \"connector_sharepoint\",\n};\nexport const RequireApprovalNever = {\n    Never: \"never\",\n};\nexport const RequireApprovalAlways = {\n    Always: \"always\",\n};\n/** @internal */\nexport const AllowedTools$inboundSchema = z\n    .object({\n    read_only: z.boolean().optional(),\n    tool_names: z.array(z.string()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"read_only\": \"readOnly\",\n        \"tool_names\": \"toolNames\",\n    });\n});\n/** @internal */\nexport const AllowedTools$outboundSchema = z.object({\n    readOnly: z.boolean().optional(),\n    toolNames: z.array(z.string()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        readOnly: \"read_only\",\n        toolNames: \"tool_names\",\n    });\n});\nexport function allowedToolsToJSON(allowedTools) {\n    return JSON.stringify(AllowedTools$outboundSchema.parse(allowedTools));\n}\nexport function allowedToolsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => AllowedTools$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'AllowedTools' from JSON`);\n}\n/** @internal */\nexport const AllowedToolsUnion$inboundSchema = z.union([\n    z.array(z.string()),\n    z.lazy(() => AllowedTools$inboundSchema),\n    z.any(),\n]);\n/** @internal */\nexport const AllowedToolsUnion$outboundSchema = z.union([\n    z.array(z.string()),\n    z.lazy(() => AllowedTools$outboundSchema),\n    z.any(),\n]);\nexport function allowedToolsUnionToJSON(allowedToolsUnion) {\n    return JSON.stringify(AllowedToolsUnion$outboundSchema.parse(allowedToolsUnion));\n}\nexport function allowedToolsUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => AllowedToolsUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'AllowedToolsUnion' from JSON`);\n}\n/** @internal */\nexport const ConnectorId$inboundSchema = openEnums.inboundSchema(ConnectorId);\n/** @internal */\nexport const ConnectorId$outboundSchema = openEnums.outboundSchema(ConnectorId);\n/** @internal */\nexport const RequireApprovalNever$inboundSchema = z.enum(RequireApprovalNever);\n/** @internal */\nexport const RequireApprovalNever$outboundSchema = RequireApprovalNever$inboundSchema;\n/** @internal */\nexport const RequireApprovalAlways$inboundSchema = z.enum(RequireApprovalAlways);\n/** @internal */\nexport const RequireApprovalAlways$outboundSchema = RequireApprovalAlways$inboundSchema;\n/** @internal */\nexport const Always$inboundSchema = z.object({\n    tool_names: z.array(z.string()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"tool_names\": \"toolNames\",\n    });\n});\n/** @internal */\nexport const Always$outboundSchema = z\n    .object({\n    toolNames: z.array(z.string()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        toolNames: \"tool_names\",\n    });\n});\nexport function alwaysToJSON(always) {\n    return JSON.stringify(Always$outboundSchema.parse(always));\n}\nexport function alwaysFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Always$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Always' from JSON`);\n}\n/** @internal */\nexport const Never$inboundSchema = z.object({\n    tool_names: z.array(z.string()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"tool_names\": \"toolNames\",\n    });\n});\n/** @internal */\nexport const Never$outboundSchema = z.object({\n    toolNames: z.array(z.string()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        toolNames: \"tool_names\",\n    });\n});\nexport function neverToJSON(never) {\n    return JSON.stringify(Never$outboundSchema.parse(never));\n}\nexport function neverFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Never$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Never' from JSON`);\n}\n/** @internal */\nexport const RequireApproval$inboundSchema = z.object({\n    always: z.lazy(() => Always$inboundSchema).optional(),\n    never: z.lazy(() => Never$inboundSchema).optional(),\n});\n/** @internal */\nexport const RequireApproval$outboundSchema = z.object({\n    always: z.lazy(() => Always$outboundSchema).optional(),\n    never: z.lazy(() => Never$outboundSchema).optional(),\n});\nexport function requireApprovalToJSON(requireApproval) {\n    return JSON.stringify(RequireApproval$outboundSchema.parse(requireApproval));\n}\nexport function requireApprovalFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => RequireApproval$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'RequireApproval' from JSON`);\n}\n/** @internal */\nexport const RequireApprovalUnion$inboundSchema = z.union([\n    z.lazy(() => RequireApproval$inboundSchema),\n    RequireApprovalAlways$inboundSchema,\n    RequireApprovalNever$inboundSchema,\n    z.any(),\n]);\n/** @internal */\nexport const RequireApprovalUnion$outboundSchema = z.union([\n    z.lazy(() => RequireApproval$outboundSchema),\n    RequireApprovalAlways$outboundSchema,\n    RequireApprovalNever$outboundSchema,\n    z.any(),\n]);\nexport function requireApprovalUnionToJSON(requireApprovalUnion) {\n    return JSON.stringify(RequireApprovalUnion$outboundSchema.parse(requireApprovalUnion));\n}\nexport function requireApprovalUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => RequireApprovalUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'RequireApprovalUnion' from JSON`);\n}\n/** @internal */\nexport const McpServerTool$inboundSchema = z\n    .object({\n    allowed_tools: z.nullable(z.union([\n        z.array(z.string()),\n        z.lazy(() => AllowedTools$inboundSchema),\n        z.any(),\n    ])).optional(),\n    authorization: z.string().optional(),\n    connector_id: ConnectorId$inboundSchema.optional(),\n    headers: z.nullable(z.record(z.string(), z.string())).optional(),\n    require_approval: z.nullable(z.union([\n        z.lazy(() => RequireApproval$inboundSchema),\n        RequireApprovalAlways$inboundSchema,\n        RequireApprovalNever$inboundSchema,\n        z.any(),\n    ])).optional(),\n    server_description: z.string().optional(),\n    server_label: z.string(),\n    server_url: z.string().optional(),\n    type: z.literal(\"mcp\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"allowed_tools\": \"allowedTools\",\n        \"connector_id\": \"connectorId\",\n        \"require_approval\": \"requireApproval\",\n        \"server_description\": \"serverDescription\",\n        \"server_label\": \"serverLabel\",\n        \"server_url\": \"serverUrl\",\n    });\n});\n/** @internal */\nexport const McpServerTool$outboundSchema = z.object({\n    allowedTools: z.nullable(z.union([\n        z.array(z.string()),\n        z.lazy(() => AllowedTools$outboundSchema),\n        z.any(),\n    ])).optional(),\n    authorization: z.string().optional(),\n    connectorId: ConnectorId$outboundSchema.optional(),\n    headers: z.nullable(z.record(z.string(), z.string())).optional(),\n    requireApproval: z.nullable(z.union([\n        z.lazy(() => RequireApproval$outboundSchema),\n        RequireApprovalAlways$outboundSchema,\n        RequireApprovalNever$outboundSchema,\n        z.any(),\n    ])).optional(),\n    serverDescription: z.string().optional(),\n    serverLabel: z.string(),\n    serverUrl: z.string().optional(),\n    type: z.literal(\"mcp\"),\n}).transform((v) => {\n    return remap$(v, {\n        allowedTools: \"allowed_tools\",\n        connectorId: \"connector_id\",\n        requireApproval: \"require_approval\",\n        serverDescription: \"server_description\",\n        serverLabel: \"server_label\",\n        serverUrl: \"server_url\",\n    });\n});\nexport function mcpServerToolToJSON(mcpServerTool) {\n    return JSON.stringify(McpServerTool$outboundSchema.parse(mcpServerTool));\n}\nexport function mcpServerToolFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => McpServerTool$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'McpServerTool' from JSON`);\n}\n//# sourceMappingURL=mcpservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: fa2793939c81\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const MessagesAdvisorToolResultBlock$outboundSchema = z.object({\n    content: z.record(z.string(), z.nullable(z.any())),\n    toolUseId: z.string(),\n    type: z.literal(\"advisor_tool_result\"),\n}).transform((v) => {\n    return remap$(v, {\n        toolUseId: \"tool_use_id\",\n    });\n});\nexport function messagesAdvisorToolResultBlockToJSON(messagesAdvisorToolResultBlock) {\n    return JSON.stringify(MessagesAdvisorToolResultBlock$outboundSchema.parse(messagesAdvisorToolResultBlock));\n}\n//# sourceMappingURL=messagesadvisortoolresultblock.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 990ce0f7bc03\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const MessagesFallbackParam$outboundSchema = z.object({\n    model: z.string(),\n    additionalProperties: z.record(z.string(), z.nullable(z.any())).optional(),\n}).transform((v) => {\n    return {\n        ...v.additionalProperties,\n        ...remap$(v, {\n            additionalProperties: null,\n        }),\n    };\n});\nexport function messagesFallbackParamToJSON(messagesFallbackParam) {\n    return JSON.stringify(MessagesFallbackParam$outboundSchema.parse(messagesFallbackParam));\n}\n//# sourceMappingURL=messagesfallbackparam.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0a3ea5a7e049\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { AnthropicCacheControlDirective$outboundSchema, } from \"./anthropiccachecontroldirective.js\";\nimport { AnthropicDocumentBlockParam$outboundSchema, } from \"./anthropicdocumentblockparam.js\";\nimport { AnthropicImageBlockParam$outboundSchema, } from \"./anthropicimageblockparam.js\";\nimport { AnthropicSearchResultBlockParam$outboundSchema, } from \"./anthropicsearchresultblockparam.js\";\nimport { AnthropicTextBlockParam$outboundSchema, } from \"./anthropictextblockparam.js\";\nimport { AnthropicWebSearchResultBlockParam$outboundSchema, } from \"./anthropicwebsearchresultblockparam.js\";\nimport { MessagesAdvisorToolResultBlock$outboundSchema, } from \"./messagesadvisortoolresultblock.js\";\nexport const ErrorCode = {\n    InvalidToolInput: \"invalid_tool_input\",\n    Unavailable: \"unavailable\",\n    MaxUsesExceeded: \"max_uses_exceeded\",\n    TooManyRequests: \"too_many_requests\",\n    QueryTooLong: \"query_too_long\",\n};\nexport const TypeWebSearchToolResultError = {\n    WebSearchToolResultError: \"web_search_tool_result_error\",\n};\nexport const MessagesMessageParamRole = {\n    User: \"user\",\n    Assistant: \"assistant\",\n    System: \"system\",\n};\n/** @internal */\nexport const ContentCompaction$outboundSchema = z.object({\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    content: z.nullable(z.string()),\n    type: z.literal(\"compaction\"),\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n    });\n});\nexport function contentCompactionToJSON(contentCompaction) {\n    return JSON.stringify(ContentCompaction$outboundSchema.parse(contentCompaction));\n}\n/** @internal */\nexport const ErrorCode$outboundSchema = openEnums\n    .outboundSchema(ErrorCode);\n/** @internal */\nexport const TypeWebSearchToolResultError$outboundSchema = z.enum(TypeWebSearchToolResultError);\n/** @internal */\nexport const ContentWebSearchToolResultError$outboundSchema = z.object({\n    errorCode: ErrorCode$outboundSchema,\n    type: TypeWebSearchToolResultError$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        errorCode: \"error_code\",\n    });\n});\nexport function contentWebSearchToolResultErrorToJSON(contentWebSearchToolResultError) {\n    return JSON.stringify(ContentWebSearchToolResultError$outboundSchema.parse(contentWebSearchToolResultError));\n}\n/** @internal */\nexport const MessagesMessageParamContentUnion3$outboundSchema = z.union([\n    z.lazy(() => ContentWebSearchToolResultError$outboundSchema),\n    z.array(AnthropicWebSearchResultBlockParam$outboundSchema),\n]);\nexport function messagesMessageParamContentUnion3ToJSON(messagesMessageParamContentUnion3) {\n    return JSON.stringify(MessagesMessageParamContentUnion3$outboundSchema.parse(messagesMessageParamContentUnion3));\n}\n/** @internal */\nexport const ContentWebSearchToolResult$outboundSchema = z.object({\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    content: z.union([\n        z.lazy(() => ContentWebSearchToolResultError$outboundSchema),\n        z.array(AnthropicWebSearchResultBlockParam$outboundSchema),\n    ]),\n    toolUseId: z.string(),\n    type: z.literal(\"web_search_tool_result\"),\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n        toolUseId: \"tool_use_id\",\n    });\n});\nexport function contentWebSearchToolResultToJSON(contentWebSearchToolResult) {\n    return JSON.stringify(ContentWebSearchToolResult$outboundSchema.parse(contentWebSearchToolResult));\n}\n/** @internal */\nexport const ContentServerToolUse$outboundSchema = z.object({\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    id: z.string(),\n    input: z.nullable(z.any()).optional(),\n    name: z.string(),\n    type: z.literal(\"server_tool_use\"),\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n    });\n});\nexport function contentServerToolUseToJSON(contentServerToolUse) {\n    return JSON.stringify(ContentServerToolUse$outboundSchema.parse(contentServerToolUse));\n}\n/** @internal */\nexport const ContentRedactedThinking$outboundSchema = z.object({\n    data: z.string(),\n    type: z.literal(\"redacted_thinking\"),\n});\nexport function contentRedactedThinkingToJSON(contentRedactedThinking) {\n    return JSON.stringify(ContentRedactedThinking$outboundSchema.parse(contentRedactedThinking));\n}\n/** @internal */\nexport const ContentThinking$outboundSchema = z.object({\n    signature: z.string(),\n    thinking: z.string(),\n    type: z.literal(\"thinking\"),\n});\nexport function contentThinkingToJSON(contentThinking) {\n    return JSON.stringify(ContentThinking$outboundSchema.parse(contentThinking));\n}\n/** @internal */\nexport const ContentToolReference$outboundSchema = z.object({\n    toolName: z.string(),\n    type: z.literal(\"tool_reference\"),\n}).transform((v) => {\n    return remap$(v, {\n        toolName: \"tool_name\",\n    });\n});\nexport function contentToolReferenceToJSON(contentToolReference) {\n    return JSON.stringify(ContentToolReference$outboundSchema.parse(contentToolReference));\n}\n/** @internal */\nexport const MessagesMessageParamContentUnion1$outboundSchema = z.union([\n    AnthropicTextBlockParam$outboundSchema,\n    AnthropicImageBlockParam$outboundSchema,\n    z.lazy(() => ContentToolReference$outboundSchema),\n    AnthropicSearchResultBlockParam$outboundSchema,\n    AnthropicDocumentBlockParam$outboundSchema,\n]);\nexport function messagesMessageParamContentUnion1ToJSON(messagesMessageParamContentUnion1) {\n    return JSON.stringify(MessagesMessageParamContentUnion1$outboundSchema.parse(messagesMessageParamContentUnion1));\n}\n/** @internal */\nexport const MessagesMessageParamContentUnion2$outboundSchema = z.union([\n    z.string(),\n    z.array(z.union([\n        AnthropicTextBlockParam$outboundSchema,\n        AnthropicImageBlockParam$outboundSchema,\n        z.lazy(() => ContentToolReference$outboundSchema),\n        AnthropicSearchResultBlockParam$outboundSchema,\n        AnthropicDocumentBlockParam$outboundSchema,\n    ])),\n]);\nexport function messagesMessageParamContentUnion2ToJSON(messagesMessageParamContentUnion2) {\n    return JSON.stringify(MessagesMessageParamContentUnion2$outboundSchema.parse(messagesMessageParamContentUnion2));\n}\n/** @internal */\nexport const ContentToolResult$outboundSchema = z.object({\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    content: z.union([\n        z.string(),\n        z.array(z.union([\n            AnthropicTextBlockParam$outboundSchema,\n            AnthropicImageBlockParam$outboundSchema,\n            z.lazy(() => ContentToolReference$outboundSchema),\n            AnthropicSearchResultBlockParam$outboundSchema,\n            AnthropicDocumentBlockParam$outboundSchema,\n        ])),\n    ]).optional(),\n    isError: z.boolean().optional(),\n    toolUseId: z.string(),\n    type: z.literal(\"tool_result\"),\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n        isError: \"is_error\",\n        toolUseId: \"tool_use_id\",\n    });\n});\nexport function contentToolResultToJSON(contentToolResult) {\n    return JSON.stringify(ContentToolResult$outboundSchema.parse(contentToolResult));\n}\n/** @internal */\nexport const ContentToolUse$outboundSchema = z.object({\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    id: z.string(),\n    input: z.nullable(z.any()).optional(),\n    name: z.string(),\n    type: z.literal(\"tool_use\"),\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n    });\n});\nexport function contentToolUseToJSON(contentToolUse) {\n    return JSON.stringify(ContentToolUse$outboundSchema.parse(contentToolUse));\n}\n/** @internal */\nexport const MessagesMessageParamContentUnion4$outboundSchema = z.union([\n    AnthropicTextBlockParam$outboundSchema,\n    AnthropicImageBlockParam$outboundSchema,\n    AnthropicDocumentBlockParam$outboundSchema,\n    z.lazy(() => ContentToolUse$outboundSchema),\n    z.lazy(() => ContentToolResult$outboundSchema),\n    z.lazy(() => ContentThinking$outboundSchema),\n    z.lazy(() => ContentRedactedThinking$outboundSchema),\n    z.lazy(() => ContentServerToolUse$outboundSchema),\n    z.lazy(() => ContentWebSearchToolResult$outboundSchema),\n    AnthropicSearchResultBlockParam$outboundSchema,\n    z.lazy(() => ContentCompaction$outboundSchema),\n    MessagesAdvisorToolResultBlock$outboundSchema,\n]);\nexport function messagesMessageParamContentUnion4ToJSON(messagesMessageParamContentUnion4) {\n    return JSON.stringify(MessagesMessageParamContentUnion4$outboundSchema.parse(messagesMessageParamContentUnion4));\n}\n/** @internal */\nexport const MessagesMessageParamContentUnion5$outboundSchema = z.union([\n    z.string(),\n    z.array(z.union([\n        AnthropicTextBlockParam$outboundSchema,\n        AnthropicImageBlockParam$outboundSchema,\n        AnthropicDocumentBlockParam$outboundSchema,\n        z.lazy(() => ContentToolUse$outboundSchema),\n        z.lazy(() => ContentToolResult$outboundSchema),\n        z.lazy(() => ContentThinking$outboundSchema),\n        z.lazy(() => ContentRedactedThinking$outboundSchema),\n        z.lazy(() => ContentServerToolUse$outboundSchema),\n        z.lazy(() => ContentWebSearchToolResult$outboundSchema),\n        AnthropicSearchResultBlockParam$outboundSchema,\n        z.lazy(() => ContentCompaction$outboundSchema),\n        MessagesAdvisorToolResultBlock$outboundSchema,\n    ])),\n]);\nexport function messagesMessageParamContentUnion5ToJSON(messagesMessageParamContentUnion5) {\n    return JSON.stringify(MessagesMessageParamContentUnion5$outboundSchema.parse(messagesMessageParamContentUnion5));\n}\n/** @internal */\nexport const MessagesMessageParamRole$outboundSchema = openEnums.outboundSchema(MessagesMessageParamRole);\n/** @internal */\nexport const MessagesMessageParam$outboundSchema = z.object({\n    content: z.union([\n        z.string(),\n        z.array(z.union([\n            AnthropicTextBlockParam$outboundSchema,\n            AnthropicImageBlockParam$outboundSchema,\n            AnthropicDocumentBlockParam$outboundSchema,\n            z.lazy(() => ContentToolUse$outboundSchema),\n            z.lazy(() => ContentToolResult$outboundSchema),\n            z.lazy(() => ContentThinking$outboundSchema),\n            z.lazy(() => ContentRedactedThinking$outboundSchema),\n            z.lazy(() => ContentServerToolUse$outboundSchema),\n            z.lazy(() => ContentWebSearchToolResult$outboundSchema),\n            AnthropicSearchResultBlockParam$outboundSchema,\n            z.lazy(() => ContentCompaction$outboundSchema),\n            MessagesAdvisorToolResultBlock$outboundSchema,\n        ])),\n    ]),\n    role: MessagesMessageParamRole$outboundSchema,\n});\nexport function messagesMessageParamToJSON(messagesMessageParam) {\n    return JSON.stringify(MessagesMessageParam$outboundSchema.parse(messagesMessageParam));\n}\n//# sourceMappingURL=messagesmessageparam.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: aad3082eb908\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\n/**\n * How much effort the model should put into its response. Higher effort levels may result in more thorough analysis but take longer. Valid values are `low`, `medium`, `high`, `xhigh`, or `max`.\n */\nexport const MessagesOutputConfigEffort = {\n    Low: \"low\",\n    Medium: \"medium\",\n    High: \"high\",\n    Xhigh: \"xhigh\",\n    Max: \"max\",\n};\nexport const MessagesOutputConfigTypeJSONSchema = {\n    JsonSchema: \"json_schema\",\n};\nexport const TypeTokens = {\n    Tokens: \"tokens\",\n};\n/** @internal */\nexport const MessagesOutputConfigEffort$outboundSchema = openEnums.outboundSchema(MessagesOutputConfigEffort);\n/** @internal */\nexport const MessagesOutputConfigTypeJSONSchema$outboundSchema = z.enum(MessagesOutputConfigTypeJSONSchema);\n/** @internal */\nexport const MessagesOutputConfigFormat$outboundSchema = z.object({\n    schema: z.record(z.string(), z.nullable(z.any())),\n    type: MessagesOutputConfigTypeJSONSchema$outboundSchema,\n});\nexport function messagesOutputConfigFormatToJSON(messagesOutputConfigFormat) {\n    return JSON.stringify(MessagesOutputConfigFormat$outboundSchema.parse(messagesOutputConfigFormat));\n}\n/** @internal */\nexport const TypeTokens$outboundSchema = z.enum(TypeTokens);\n/** @internal */\nexport const TaskBudget$outboundSchema = z.object({\n    remaining: z.nullable(z.int()).optional(),\n    total: z.int(),\n    type: TypeTokens$outboundSchema,\n});\nexport function taskBudgetToJSON(taskBudget) {\n    return JSON.stringify(TaskBudget$outboundSchema.parse(taskBudget));\n}\n/** @internal */\nexport const MessagesOutputConfig$outboundSchema = z.object({\n    effort: z.nullable(MessagesOutputConfigEffort$outboundSchema).optional(),\n    format: z.nullable(z.lazy(() => MessagesOutputConfigFormat$outboundSchema))\n        .optional(),\n    taskBudget: z.nullable(z.lazy(() => TaskBudget$outboundSchema)).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        taskBudget: \"task_budget\",\n    });\n});\nexport function messagesOutputConfigToJSON(messagesOutputConfig) {\n    return JSON.stringify(MessagesOutputConfig$outboundSchema.parse(messagesOutputConfig));\n}\n//# sourceMappingURL=messagesoutputconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 572964d5906d\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { AnthropicAllowedCallers$outboundSchema, } from \"./anthropicallowedcallers.js\";\nimport { AnthropicCacheControlDirective$outboundSchema, } from \"./anthropiccachecontroldirective.js\";\nimport { AnthropicCacheControlTtl$outboundSchema, } from \"./anthropiccachecontrolttl.js\";\nimport { AnthropicInputTokensClearAtLeast$outboundSchema, } from \"./anthropicinputtokensclearatleast.js\";\nimport { AnthropicInputTokensTrigger$outboundSchema, } from \"./anthropicinputtokenstrigger.js\";\nimport { AnthropicTextBlockParam$outboundSchema, } from \"./anthropictextblockparam.js\";\nimport { AnthropicThinkingDisplay$outboundSchema, } from \"./anthropicthinkingdisplay.js\";\nimport { AnthropicThinkingTurns$outboundSchema, } from \"./anthropicthinkingturns.js\";\nimport { AnthropicToolUsesKeep$outboundSchema, } from \"./anthropictooluseskeep.js\";\nimport { AnthropicToolUsesTrigger$outboundSchema, } from \"./anthropictoolusestrigger.js\";\nimport { AnthropicWebSearchToolUserLocation$outboundSchema, } from \"./anthropicwebsearchtooluserlocation.js\";\nimport { AutoRouterPlugin$outboundSchema, } from \"./autorouterplugin.js\";\nimport { BashServerTool$outboundSchema, } from \"./bashservertool.js\";\nimport { ChatSearchModelsServerTool$outboundSchema, } from \"./chatsearchmodelsservertool.js\";\nimport { ContextCompressionPlugin$outboundSchema, } from \"./contextcompressionplugin.js\";\nimport { DatetimeServerTool$outboundSchema, } from \"./datetimeservertool.js\";\nimport { FileParserPlugin$outboundSchema, } from \"./fileparserplugin.js\";\nimport { FusionPlugin$outboundSchema, } from \"./fusionplugin.js\";\nimport { ImageGenerationServerToolOpenRouter$outboundSchema, } from \"./imagegenerationservertoolopenrouter.js\";\nimport { MessagesFallbackParam$outboundSchema, } from \"./messagesfallbackparam.js\";\nimport { MessagesMessageParam$outboundSchema, } from \"./messagesmessageparam.js\";\nimport { MessagesOutputConfig$outboundSchema, } from \"./messagesoutputconfig.js\";\nimport { ModerationPlugin$outboundSchema, } from \"./moderationplugin.js\";\nimport { OpenRouterWebSearchServerTool$outboundSchema, } from \"./openrouterwebsearchservertool.js\";\nimport { ParetoRouterPlugin$outboundSchema, } from \"./paretorouterplugin.js\";\nimport { ProviderPreferences$outboundSchema, } from \"./providerpreferences.js\";\nimport { ResponseHealingPlugin$outboundSchema, } from \"./responsehealingplugin.js\";\nimport { StopServerToolsWhenCondition$outboundSchema, } from \"./stopservertoolswhencondition.js\";\nimport { TraceConfig$outboundSchema, } from \"./traceconfig.js\";\nimport { WebFetchPlugin$outboundSchema, } from \"./webfetchplugin.js\";\nimport { WebFetchServerTool$outboundSchema, } from \"./webfetchservertool.js\";\nimport { WebSearchPlugin$outboundSchema, } from \"./websearchplugin.js\";\nexport const EditTypeInputTokens = {\n    InputTokens: \"input_tokens\",\n};\nexport const KeepEnum = {\n    All: \"all\",\n};\nexport const KeepType = {\n    All: \"all\",\n};\n/**\n * Controls output generation speed. When set to `fast`, uses a higher-speed inference configuration at premium pricing. Defaults to `standard` when omitted.\n */\nexport const Speed = {\n    Fast: \"fast\",\n    Standard: \"standard\",\n};\nexport const ToolTypeEphemeral = {\n    Ephemeral: \"ephemeral\",\n};\nexport const NameAdvisor = {\n    Advisor: \"advisor\",\n};\nexport const TypeAdvisor20260301 = {\n    Advisor20260301: \"advisor_20260301\",\n};\nexport const NameWebSearch2 = {\n    WebSearch: \"web_search\",\n};\nexport const TypeWebSearch20260209 = {\n    WebSearch20260209: \"web_search_20260209\",\n};\nexport const NameWebSearch1 = {\n    WebSearch: \"web_search\",\n};\nexport const TypeWebSearch20250305 = {\n    WebSearch20250305: \"web_search_20250305\",\n};\nexport const NameStrReplaceEditor = {\n    StrReplaceEditor: \"str_replace_editor\",\n};\nexport const TypeTextEditor20250124 = {\n    TextEditor20250124: \"text_editor_20250124\",\n};\nexport const NameBash = {\n    Bash: \"bash\",\n};\nexport const TypeBash20250124 = {\n    Bash20250124: \"bash_20250124\",\n};\nexport const ToolTypeCustom = {\n    Custom: \"custom\",\n};\n/** @internal */\nexport const EditTypeInputTokens$outboundSchema = z.enum(EditTypeInputTokens);\n/** @internal */\nexport const TriggerInputTokens$outboundSchema = z.object({\n    type: EditTypeInputTokens$outboundSchema,\n    value: z.int(),\n});\nexport function triggerInputTokensToJSON(triggerInputTokens) {\n    return JSON.stringify(TriggerInputTokens$outboundSchema.parse(triggerInputTokens));\n}\n/** @internal */\nexport const EditCompact20260112$outboundSchema = z.object({\n    instructions: z.nullable(z.string()).optional(),\n    pauseAfterCompaction: z.boolean().optional(),\n    trigger: z.nullable(z.lazy(() => TriggerInputTokens$outboundSchema))\n        .optional(),\n    type: z.literal(\"compact_20260112\"),\n}).transform((v) => {\n    return remap$(v, {\n        pauseAfterCompaction: \"pause_after_compaction\",\n    });\n});\nexport function editCompact20260112ToJSON(editCompact20260112) {\n    return JSON.stringify(EditCompact20260112$outboundSchema.parse(editCompact20260112));\n}\n/** @internal */\nexport const KeepEnum$outboundSchema = z.enum(KeepEnum);\n/** @internal */\nexport const KeepType$outboundSchema = z.enum(KeepType);\n/** @internal */\nexport const KeepAll$outboundSchema = z\n    .object({\n    type: KeepType$outboundSchema,\n});\nexport function keepAllToJSON(keepAll) {\n    return JSON.stringify(KeepAll$outboundSchema.parse(keepAll));\n}\n/** @internal */\nexport const Keep$outboundSchema = z.union([\n    AnthropicThinkingTurns$outboundSchema,\n    z.lazy(() => KeepAll$outboundSchema),\n    KeepEnum$outboundSchema,\n]);\nexport function keepToJSON(keep) {\n    return JSON.stringify(Keep$outboundSchema.parse(keep));\n}\n/** @internal */\nexport const EditClearThinking20251015$outboundSchema = z.object({\n    keep: z.union([\n        AnthropicThinkingTurns$outboundSchema,\n        z.lazy(() => KeepAll$outboundSchema),\n        KeepEnum$outboundSchema,\n    ]).optional(),\n    type: z.literal(\"clear_thinking_20251015\"),\n});\nexport function editClearThinking20251015ToJSON(editClearThinking20251015) {\n    return JSON.stringify(EditClearThinking20251015$outboundSchema.parse(editClearThinking20251015));\n}\n/** @internal */\nexport const ClearToolInputs$outboundSchema = z.union([z.boolean(), z.array(z.string()), z.any()]);\nexport function clearToolInputsToJSON(clearToolInputs) {\n    return JSON.stringify(ClearToolInputs$outboundSchema.parse(clearToolInputs));\n}\n/** @internal */\nexport const Trigger$outboundSchema = z\n    .union([\n    AnthropicInputTokensTrigger$outboundSchema,\n    AnthropicToolUsesTrigger$outboundSchema,\n]);\nexport function triggerToJSON(trigger) {\n    return JSON.stringify(Trigger$outboundSchema.parse(trigger));\n}\n/** @internal */\nexport const EditClearToolUses20250919$outboundSchema = z.object({\n    clearAtLeast: z.nullable(AnthropicInputTokensClearAtLeast$outboundSchema)\n        .optional(),\n    clearToolInputs: z.nullable(z.union([z.boolean(), z.array(z.string()), z.any()])).optional(),\n    excludeTools: z.nullable(z.array(z.string())).optional(),\n    keep: AnthropicToolUsesKeep$outboundSchema.optional(),\n    trigger: z.union([\n        AnthropicInputTokensTrigger$outboundSchema,\n        AnthropicToolUsesTrigger$outboundSchema,\n    ]).optional(),\n    type: z.literal(\"clear_tool_uses_20250919\"),\n}).transform((v) => {\n    return remap$(v, {\n        clearAtLeast: \"clear_at_least\",\n        clearToolInputs: \"clear_tool_inputs\",\n        excludeTools: \"exclude_tools\",\n    });\n});\nexport function editClearToolUses20250919ToJSON(editClearToolUses20250919) {\n    return JSON.stringify(EditClearToolUses20250919$outboundSchema.parse(editClearToolUses20250919));\n}\n/** @internal */\nexport const Edit$outboundSchema = z.union([\n    z.lazy(() => EditClearToolUses20250919$outboundSchema),\n    z.lazy(() => EditClearThinking20251015$outboundSchema),\n    z.lazy(() => EditCompact20260112$outboundSchema),\n]);\nexport function editToJSON(edit) {\n    return JSON.stringify(Edit$outboundSchema.parse(edit));\n}\n/** @internal */\nexport const ContextManagement$outboundSchema = z.object({\n    edits: z.array(z.union([\n        z.lazy(() => EditClearToolUses20250919$outboundSchema),\n        z.lazy(() => EditClearThinking20251015$outboundSchema),\n        z.lazy(() => EditCompact20260112$outboundSchema),\n    ])).optional(),\n});\nexport function contextManagementToJSON(contextManagement) {\n    return JSON.stringify(ContextManagement$outboundSchema.parse(contextManagement));\n}\n/** @internal */\nexport const Metadata$outboundSchema = z\n    .object({\n    userId: z.nullable(z.string()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        userId: \"user_id\",\n    });\n});\nexport function metadataToJSON(metadata) {\n    return JSON.stringify(Metadata$outboundSchema.parse(metadata));\n}\n/** @internal */\nexport const MessagesRequestPlugin$outboundSchema = z.union([\n    AutoRouterPlugin$outboundSchema,\n    ContextCompressionPlugin$outboundSchema,\n    FileParserPlugin$outboundSchema,\n    FusionPlugin$outboundSchema,\n    ModerationPlugin$outboundSchema,\n    ParetoRouterPlugin$outboundSchema,\n    ResponseHealingPlugin$outboundSchema,\n    WebSearchPlugin$outboundSchema,\n    WebFetchPlugin$outboundSchema,\n]);\nexport function messagesRequestPluginToJSON(messagesRequestPlugin) {\n    return JSON.stringify(MessagesRequestPlugin$outboundSchema.parse(messagesRequestPlugin));\n}\n/** @internal */\nexport const Speed$outboundSchema = openEnums\n    .outboundSchema(Speed);\n/** @internal */\nexport const System$outboundSchema = z\n    .union([z.string(), z.array(AnthropicTextBlockParam$outboundSchema)]);\nexport function systemToJSON(system) {\n    return JSON.stringify(System$outboundSchema.parse(system));\n}\n/** @internal */\nexport const ThinkingAdaptive$outboundSchema = z.object({\n    display: z.nullable(AnthropicThinkingDisplay$outboundSchema).optional(),\n    type: z.literal(\"adaptive\"),\n});\nexport function thinkingAdaptiveToJSON(thinkingAdaptive) {\n    return JSON.stringify(ThinkingAdaptive$outboundSchema.parse(thinkingAdaptive));\n}\n/** @internal */\nexport const ThinkingDisabled$outboundSchema = z.object({\n    type: z.literal(\"disabled\"),\n});\nexport function thinkingDisabledToJSON(thinkingDisabled) {\n    return JSON.stringify(ThinkingDisabled$outboundSchema.parse(thinkingDisabled));\n}\n/** @internal */\nexport const ThinkingEnabled$outboundSchema = z.object({\n    budgetTokens: z.int(),\n    display: z.nullable(AnthropicThinkingDisplay$outboundSchema).optional(),\n    type: z.literal(\"enabled\"),\n}).transform((v) => {\n    return remap$(v, {\n        budgetTokens: \"budget_tokens\",\n    });\n});\nexport function thinkingEnabledToJSON(thinkingEnabled) {\n    return JSON.stringify(ThinkingEnabled$outboundSchema.parse(thinkingEnabled));\n}\n/** @internal */\nexport const Thinking$outboundSchema = z\n    .union([\n    z.lazy(() => ThinkingEnabled$outboundSchema),\n    z.lazy(() => ThinkingDisabled$outboundSchema),\n    z.lazy(() => ThinkingAdaptive$outboundSchema),\n]);\nexport function thinkingToJSON(thinking) {\n    return JSON.stringify(Thinking$outboundSchema.parse(thinking));\n}\n/** @internal */\nexport const ToolChoiceTool$outboundSchema = z.object({\n    disableParallelToolUse: z.boolean().optional(),\n    name: z.string(),\n    type: z.literal(\"tool\"),\n}).transform((v) => {\n    return remap$(v, {\n        disableParallelToolUse: \"disable_parallel_tool_use\",\n    });\n});\nexport function toolChoiceToolToJSON(toolChoiceTool) {\n    return JSON.stringify(ToolChoiceTool$outboundSchema.parse(toolChoiceTool));\n}\n/** @internal */\nexport const ToolChoiceNone$outboundSchema = z.object({\n    type: z.literal(\"none\"),\n});\nexport function toolChoiceNoneToJSON(toolChoiceNone) {\n    return JSON.stringify(ToolChoiceNone$outboundSchema.parse(toolChoiceNone));\n}\n/** @internal */\nexport const ToolChoiceAny$outboundSchema = z.object({\n    disableParallelToolUse: z.boolean().optional(),\n    type: z.literal(\"any\"),\n}).transform((v) => {\n    return remap$(v, {\n        disableParallelToolUse: \"disable_parallel_tool_use\",\n    });\n});\nexport function toolChoiceAnyToJSON(toolChoiceAny) {\n    return JSON.stringify(ToolChoiceAny$outboundSchema.parse(toolChoiceAny));\n}\n/** @internal */\nexport const ToolChoiceAuto$outboundSchema = z.object({\n    disableParallelToolUse: z.boolean().optional(),\n    type: z.literal(\"auto\"),\n}).transform((v) => {\n    return remap$(v, {\n        disableParallelToolUse: \"disable_parallel_tool_use\",\n    });\n});\nexport function toolChoiceAutoToJSON(toolChoiceAuto) {\n    return JSON.stringify(ToolChoiceAuto$outboundSchema.parse(toolChoiceAuto));\n}\n/** @internal */\nexport const ToolChoice$outboundSchema = z.union([\n    z.lazy(() => ToolChoiceAuto$outboundSchema),\n    z.lazy(() => ToolChoiceAny$outboundSchema),\n    z.lazy(() => ToolChoiceNone$outboundSchema),\n    z.lazy(() => ToolChoiceTool$outboundSchema),\n]);\nexport function toolChoiceToJSON(toolChoice) {\n    return JSON.stringify(ToolChoice$outboundSchema.parse(toolChoice));\n}\n/** @internal */\nexport const MessagesRequestTool$outboundSchema = z.object({\n    type: z.string(),\n    additionalProperties: z.record(z.string(), z.nullable(z.any())).optional(),\n}).transform((v) => {\n    return {\n        ...v.additionalProperties,\n        ...remap$(v, {\n            additionalProperties: null,\n        }),\n    };\n});\nexport function messagesRequestToolToJSON(messagesRequestTool) {\n    return JSON.stringify(MessagesRequestTool$outboundSchema.parse(messagesRequestTool));\n}\n/** @internal */\nexport const ToolTypeEphemeral$outboundSchema = z.enum(ToolTypeEphemeral);\n/** @internal */\nexport const Caching$outboundSchema = z\n    .object({\n    ttl: AnthropicCacheControlTtl$outboundSchema.optional(),\n    type: ToolTypeEphemeral$outboundSchema,\n});\nexport function cachingToJSON(caching) {\n    return JSON.stringify(Caching$outboundSchema.parse(caching));\n}\n/** @internal */\nexport const NameAdvisor$outboundSchema = z.enum(NameAdvisor);\n/** @internal */\nexport const TypeAdvisor20260301$outboundSchema = z.enum(TypeAdvisor20260301);\n/** @internal */\nexport const ToolAdvisor20260301$outboundSchema = z.object({\n    allowedCallers: z.array(AnthropicAllowedCallers$outboundSchema).optional(),\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    caching: z.nullable(z.lazy(() => Caching$outboundSchema)).optional(),\n    deferLoading: z.boolean().optional(),\n    maxUses: z.int().optional(),\n    model: z.string(),\n    name: NameAdvisor$outboundSchema,\n    type: TypeAdvisor20260301$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        allowedCallers: \"allowed_callers\",\n        cacheControl: \"cache_control\",\n        deferLoading: \"defer_loading\",\n        maxUses: \"max_uses\",\n    });\n});\nexport function toolAdvisor20260301ToJSON(toolAdvisor20260301) {\n    return JSON.stringify(ToolAdvisor20260301$outboundSchema.parse(toolAdvisor20260301));\n}\n/** @internal */\nexport const NameWebSearch2$outboundSchema = z\n    .enum(NameWebSearch2);\n/** @internal */\nexport const TypeWebSearch20260209$outboundSchema = z.enum(TypeWebSearch20260209);\n/** @internal */\nexport const ToolWebSearch20260209$outboundSchema = z.object({\n    allowedCallers: z.array(AnthropicAllowedCallers$outboundSchema).optional(),\n    allowedDomains: z.nullable(z.array(z.string())).optional(),\n    blockedDomains: z.nullable(z.array(z.string())).optional(),\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    maxUses: z.nullable(z.int()).optional(),\n    name: NameWebSearch2$outboundSchema,\n    type: TypeWebSearch20260209$outboundSchema,\n    userLocation: z.nullable(AnthropicWebSearchToolUserLocation$outboundSchema)\n        .optional(),\n}).transform((v) => {\n    return remap$(v, {\n        allowedCallers: \"allowed_callers\",\n        allowedDomains: \"allowed_domains\",\n        blockedDomains: \"blocked_domains\",\n        cacheControl: \"cache_control\",\n        maxUses: \"max_uses\",\n        userLocation: \"user_location\",\n    });\n});\nexport function toolWebSearch20260209ToJSON(toolWebSearch20260209) {\n    return JSON.stringify(ToolWebSearch20260209$outboundSchema.parse(toolWebSearch20260209));\n}\n/** @internal */\nexport const NameWebSearch1$outboundSchema = z\n    .enum(NameWebSearch1);\n/** @internal */\nexport const TypeWebSearch20250305$outboundSchema = z.enum(TypeWebSearch20250305);\n/** @internal */\nexport const ToolWebSearch20250305$outboundSchema = z.object({\n    allowedDomains: z.nullable(z.array(z.string())).optional(),\n    blockedDomains: z.nullable(z.array(z.string())).optional(),\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    maxUses: z.nullable(z.int()).optional(),\n    name: NameWebSearch1$outboundSchema,\n    type: TypeWebSearch20250305$outboundSchema,\n    userLocation: z.nullable(AnthropicWebSearchToolUserLocation$outboundSchema)\n        .optional(),\n}).transform((v) => {\n    return remap$(v, {\n        allowedDomains: \"allowed_domains\",\n        blockedDomains: \"blocked_domains\",\n        cacheControl: \"cache_control\",\n        maxUses: \"max_uses\",\n        userLocation: \"user_location\",\n    });\n});\nexport function toolWebSearch20250305ToJSON(toolWebSearch20250305) {\n    return JSON.stringify(ToolWebSearch20250305$outboundSchema.parse(toolWebSearch20250305));\n}\n/** @internal */\nexport const NameStrReplaceEditor$outboundSchema = z.enum(NameStrReplaceEditor);\n/** @internal */\nexport const TypeTextEditor20250124$outboundSchema = z.enum(TypeTextEditor20250124);\n/** @internal */\nexport const ToolTextEditor20250124$outboundSchema = z.object({\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    name: NameStrReplaceEditor$outboundSchema,\n    type: TypeTextEditor20250124$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n    });\n});\nexport function toolTextEditor20250124ToJSON(toolTextEditor20250124) {\n    return JSON.stringify(ToolTextEditor20250124$outboundSchema.parse(toolTextEditor20250124));\n}\n/** @internal */\nexport const NameBash$outboundSchema = z.enum(NameBash);\n/** @internal */\nexport const TypeBash20250124$outboundSchema = z.enum(TypeBash20250124);\n/** @internal */\nexport const ToolBash20250124$outboundSchema = z.object({\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    name: NameBash$outboundSchema,\n    type: TypeBash20250124$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n    });\n});\nexport function toolBash20250124ToJSON(toolBash20250124) {\n    return JSON.stringify(ToolBash20250124$outboundSchema.parse(toolBash20250124));\n}\n/** @internal */\nexport const InputSchema$outboundSchema = z.object({\n    properties: z.nullable(z.any()).optional(),\n    required: z.nullable(z.array(z.string())).optional(),\n    type: z.string().default(\"object\"),\n    additionalProperties: z.record(z.string(), z.nullable(z.any())).optional(),\n}).transform((v) => {\n    return {\n        ...v.additionalProperties,\n        ...remap$(v, {\n            additionalProperties: null,\n        }),\n    };\n});\nexport function inputSchemaToJSON(inputSchema) {\n    return JSON.stringify(InputSchema$outboundSchema.parse(inputSchema));\n}\n/** @internal */\nexport const ToolTypeCustom$outboundSchema = z\n    .enum(ToolTypeCustom);\n/** @internal */\nexport const ToolCustom$outboundSchema = z.object({\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    description: z.string().optional(),\n    inputSchema: z.lazy(() => InputSchema$outboundSchema),\n    name: z.string(),\n    type: ToolTypeCustom$outboundSchema.optional(),\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n        inputSchema: \"input_schema\",\n    });\n});\nexport function toolCustomToJSON(toolCustom) {\n    return JSON.stringify(ToolCustom$outboundSchema.parse(toolCustom));\n}\n/** @internal */\nexport const MessagesRequestToolUnion$outboundSchema = z.union([\n    z.lazy(() => ToolAdvisor20260301$outboundSchema),\n    z.lazy(() => ToolCustom$outboundSchema),\n    z.lazy(() => ToolBash20250124$outboundSchema),\n    z.lazy(() => ToolTextEditor20250124$outboundSchema),\n    z.lazy(() => ToolWebSearch20250305$outboundSchema),\n    z.lazy(() => ToolWebSearch20260209$outboundSchema),\n    BashServerTool$outboundSchema,\n    DatetimeServerTool$outboundSchema,\n    ImageGenerationServerToolOpenRouter$outboundSchema,\n    ChatSearchModelsServerTool$outboundSchema,\n    WebFetchServerTool$outboundSchema,\n    OpenRouterWebSearchServerTool$outboundSchema,\n    z.lazy(() => MessagesRequestTool$outboundSchema),\n]);\nexport function messagesRequestToolUnionToJSON(messagesRequestToolUnion) {\n    return JSON.stringify(MessagesRequestToolUnion$outboundSchema.parse(messagesRequestToolUnion));\n}\n/** @internal */\nexport const MessagesRequest$outboundSchema = z.object({\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    contextManagement: z.nullable(z.lazy(() => ContextManagement$outboundSchema))\n        .optional(),\n    fallbacks: z.nullable(z.array(MessagesFallbackParam$outboundSchema))\n        .optional(),\n    maxTokens: z.int().optional(),\n    messages: z.nullable(z.array(MessagesMessageParam$outboundSchema)),\n    metadata: z.lazy(() => Metadata$outboundSchema).optional(),\n    model: z.string(),\n    models: z.array(z.string()).optional(),\n    outputConfig: MessagesOutputConfig$outboundSchema.optional(),\n    plugins: z.array(z.union([\n        AutoRouterPlugin$outboundSchema,\n        ContextCompressionPlugin$outboundSchema,\n        FileParserPlugin$outboundSchema,\n        FusionPlugin$outboundSchema,\n        ModerationPlugin$outboundSchema,\n        ParetoRouterPlugin$outboundSchema,\n        ResponseHealingPlugin$outboundSchema,\n        WebSearchPlugin$outboundSchema,\n        WebFetchPlugin$outboundSchema,\n    ])).optional(),\n    provider: z.nullable(ProviderPreferences$outboundSchema).optional(),\n    serviceTier: z.string().optional(),\n    sessionId: z.string().optional(),\n    speed: z.nullable(Speed$outboundSchema).optional(),\n    stopSequences: z.array(z.string()).optional(),\n    stopServerToolsWhen: z.array(StopServerToolsWhenCondition$outboundSchema)\n        .optional(),\n    stream: z.boolean().optional(),\n    system: z.union([z.string(), z.array(AnthropicTextBlockParam$outboundSchema)])\n        .optional(),\n    temperature: z.number().optional(),\n    thinking: z.union([\n        z.lazy(() => ThinkingEnabled$outboundSchema),\n        z.lazy(() => ThinkingDisabled$outboundSchema),\n        z.lazy(() => ThinkingAdaptive$outboundSchema),\n    ]).optional(),\n    toolChoice: z.union([\n        z.lazy(() => ToolChoiceAuto$outboundSchema),\n        z.lazy(() => ToolChoiceAny$outboundSchema),\n        z.lazy(() => ToolChoiceNone$outboundSchema),\n        z.lazy(() => ToolChoiceTool$outboundSchema),\n    ]).optional(),\n    tools: z.array(z.union([\n        z.lazy(() => ToolAdvisor20260301$outboundSchema),\n        z.lazy(() => ToolCustom$outboundSchema),\n        z.lazy(() => ToolBash20250124$outboundSchema),\n        z.lazy(() => ToolTextEditor20250124$outboundSchema),\n        z.lazy(() => ToolWebSearch20250305$outboundSchema),\n        z.lazy(() => ToolWebSearch20260209$outboundSchema),\n        BashServerTool$outboundSchema,\n        DatetimeServerTool$outboundSchema,\n        ImageGenerationServerToolOpenRouter$outboundSchema,\n        ChatSearchModelsServerTool$outboundSchema,\n        WebFetchServerTool$outboundSchema,\n        OpenRouterWebSearchServerTool$outboundSchema,\n        z.lazy(() => MessagesRequestTool$outboundSchema),\n    ])).optional(),\n    topK: z.int().optional(),\n    topP: z.number().optional(),\n    trace: TraceConfig$outboundSchema.optional(),\n    user: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n        contextManagement: \"context_management\",\n        maxTokens: \"max_tokens\",\n        outputConfig: \"output_config\",\n        serviceTier: \"service_tier\",\n        sessionId: \"session_id\",\n        stopSequences: \"stop_sequences\",\n        stopServerToolsWhen: \"stop_server_tools_when\",\n        toolChoice: \"tool_choice\",\n        topK: \"top_k\",\n        topP: \"top_p\",\n    });\n});\nexport function messagesRequestToJSON(messagesRequest) {\n    return JSON.stringify(MessagesRequest$outboundSchema.parse(messagesRequest));\n}\n//# sourceMappingURL=messagesrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d3f8399ef138\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Opt-in level for surfacing routing metadata on the response under `openrouter_metadata`.\n */\nexport const MetadataLevel = {\n    Disabled: \"disabled\",\n    Enabled: \"enabled\",\n};\n/** @internal */\nexport const MetadataLevel$outboundSchema = openEnums.outboundSchema(MetadataLevel);\n//# sourceMappingURL=metadatalevel.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b65482ec4223\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Tokenizer type used by the model\n */\nexport const ModelGroup = {\n    Router: \"Router\",\n    Media: \"Media\",\n    Other: \"Other\",\n    Gpt: \"GPT\",\n    Claude: \"Claude\",\n    Gemini: \"Gemini\",\n    Gemma: \"Gemma\",\n    Grok: \"Grok\",\n    Cohere: \"Cohere\",\n    Nova: \"Nova\",\n    Qwen: \"Qwen\",\n    Yi: \"Yi\",\n    DeepSeek: \"DeepSeek\",\n    Mistral: \"Mistral\",\n    Llama2: \"Llama2\",\n    Llama3: \"Llama3\",\n    Llama4: \"Llama4\",\n    PaLM: \"PaLM\",\n    Rwkv: \"RWKV\",\n    Qwen3: \"Qwen3\",\n};\n/** @internal */\nexport const ModelGroup$inboundSchema = openEnums.inboundSchema(ModelGroup);\n//# sourceMappingURL=modelgroup.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 57607576095f\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { InputModality$inboundSchema } from \"./inputmodality.js\";\nimport { ModelGroup$inboundSchema } from \"./modelgroup.js\";\nimport { OutputModality$inboundSchema, } from \"./outputmodality.js\";\n/**\n * Instruction format type\n */\nexport const ModelArchitectureInstructType = {\n    None: \"none\",\n    Airoboros: \"airoboros\",\n    Alpaca: \"alpaca\",\n    AlpacaModif: \"alpaca-modif\",\n    Chatml: \"chatml\",\n    Claude: \"claude\",\n    CodeLlama: \"code-llama\",\n    Gemma: \"gemma\",\n    Llama2: \"llama2\",\n    Llama3: \"llama3\",\n    Mistral: \"mistral\",\n    Nemotron: \"nemotron\",\n    Neural: \"neural\",\n    Openchat: \"openchat\",\n    Phi3: \"phi3\",\n    Rwkv: \"rwkv\",\n    Vicuna: \"vicuna\",\n    Zephyr: \"zephyr\",\n    DeepseekR1: \"deepseek-r1\",\n    DeepseekV31: \"deepseek-v3.1\",\n    Qwq: \"qwq\",\n    Qwen3: \"qwen3\",\n};\n/** @internal */\nexport const ModelArchitectureInstructType$inboundSchema = openEnums.inboundSchema(ModelArchitectureInstructType);\n/** @internal */\nexport const ModelArchitecture$inboundSchema = z.object({\n    input_modalities: z.array(InputModality$inboundSchema),\n    instruct_type: z.nullable(ModelArchitectureInstructType$inboundSchema)\n        .optional(),\n    modality: z.nullable(z.string()),\n    output_modalities: z.array(OutputModality$inboundSchema),\n    tokenizer: ModelGroup$inboundSchema.optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"input_modalities\": \"inputModalities\",\n        \"instruct_type\": \"instructType\",\n        \"output_modalities\": \"outputModalities\",\n    });\n});\nexport function modelArchitectureFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ModelArchitecture$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ModelArchitecture' from JSON`);\n}\n//# sourceMappingURL=modelarchitecture.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: dc71ead66ff6\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { AABenchmarkEntry$inboundSchema, } from \"./aabenchmarkentry.js\";\nimport { DABenchmarkEntry$inboundSchema, } from \"./dabenchmarkentry.js\";\n/** @internal */\nexport const ModelBenchmarks$inboundSchema = z.object({\n    artificial_analysis: AABenchmarkEntry$inboundSchema.optional(),\n    design_arena: z.array(DABenchmarkEntry$inboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        \"artificial_analysis\": \"artificialAnalysis\",\n        \"design_arena\": \"designArena\",\n    });\n});\nexport function modelBenchmarksFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ModelBenchmarks$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ModelBenchmarks' from JSON`);\n}\n//# sourceMappingURL=modelbenchmarks.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 965b10bc40c4\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ModelLinks$inboundSchema = z\n    .object({\n    details: z.string(),\n});\nexport function modelLinksFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ModelLinks$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ModelLinks' from JSON`);\n}\n//# sourceMappingURL=modellinks.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 2b2b6cf6a019\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const PerRequestLimits$inboundSchema = z.object({\n    completion_tokens: z.number(),\n    prompt_tokens: z.number(),\n}).transform((v) => {\n    return remap$(v, {\n        \"completion_tokens\": \"completionTokens\",\n        \"prompt_tokens\": \"promptTokens\",\n    });\n});\nexport function perRequestLimitsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => PerRequestLimits$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'PerRequestLimits' from JSON`);\n}\n//# sourceMappingURL=perrequestlimits.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0a44a1c3bab5\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const PublicPricing$inboundSchema = z\n    .object({\n    audio: z.string().optional(),\n    audio_output: z.string().optional(),\n    completion: z.string(),\n    discount: z.number().optional(),\n    image: z.string().optional(),\n    image_output: z.string().optional(),\n    image_token: z.string().optional(),\n    input_audio_cache: z.string().optional(),\n    input_cache_read: z.string().optional(),\n    input_cache_write: z.string().optional(),\n    internal_reasoning: z.string().optional(),\n    prompt: z.string(),\n    request: z.string().optional(),\n    web_search: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"audio_output\": \"audioOutput\",\n        \"image_output\": \"imageOutput\",\n        \"image_token\": \"imageToken\",\n        \"input_audio_cache\": \"inputAudioCache\",\n        \"input_cache_read\": \"inputCacheRead\",\n        \"input_cache_write\": \"inputCacheWrite\",\n        \"internal_reasoning\": \"internalReasoning\",\n        \"web_search\": \"webSearch\",\n    });\n});\nexport function publicPricingFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => PublicPricing$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'PublicPricing' from JSON`);\n}\n//# sourceMappingURL=publicpricing.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7439c7b1a9c6\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const TopProviderInfo$inboundSchema = z.object({\n    context_length: z.nullable(z.int()).optional(),\n    is_moderated: z.boolean(),\n    max_completion_tokens: z.nullable(z.int()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"context_length\": \"contextLength\",\n        \"is_moderated\": \"isModerated\",\n        \"max_completion_tokens\": \"maxCompletionTokens\",\n    });\n});\nexport function topProviderInfoFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => TopProviderInfo$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'TopProviderInfo' from JSON`);\n}\n//# sourceMappingURL=topproviderinfo.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b99d4c14e794\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { DefaultParameters$inboundSchema, } from \"./defaultparameters.js\";\nimport { ModelArchitecture$inboundSchema, } from \"./modelarchitecture.js\";\nimport { ModelBenchmarks$inboundSchema, } from \"./modelbenchmarks.js\";\nimport { ModelLinks$inboundSchema } from \"./modellinks.js\";\nimport { Parameter$inboundSchema } from \"./parameter.js\";\nimport { PerRequestLimits$inboundSchema, } from \"./perrequestlimits.js\";\nimport { PublicPricing$inboundSchema } from \"./publicpricing.js\";\nimport { TopProviderInfo$inboundSchema, } from \"./topproviderinfo.js\";\n/** @internal */\nexport const Model$inboundSchema = z.object({\n    architecture: ModelArchitecture$inboundSchema,\n    benchmarks: ModelBenchmarks$inboundSchema.optional(),\n    canonical_slug: z.string(),\n    context_length: z.nullable(z.int()),\n    created: z.int(),\n    default_parameters: z.nullable(DefaultParameters$inboundSchema),\n    description: z.string().optional(),\n    expiration_date: z.nullable(z.string()).optional(),\n    hugging_face_id: z.nullable(z.string()).optional(),\n    id: z.string(),\n    knowledge_cutoff: z.nullable(z.string()).optional(),\n    links: ModelLinks$inboundSchema,\n    name: z.string(),\n    per_request_limits: z.nullable(PerRequestLimits$inboundSchema),\n    pricing: PublicPricing$inboundSchema,\n    supported_parameters: z.array(Parameter$inboundSchema),\n    supported_voices: z.nullable(z.array(z.string())),\n    top_provider: TopProviderInfo$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"canonical_slug\": \"canonicalSlug\",\n        \"context_length\": \"contextLength\",\n        \"default_parameters\": \"defaultParameters\",\n        \"expiration_date\": \"expirationDate\",\n        \"hugging_face_id\": \"huggingFaceId\",\n        \"knowledge_cutoff\": \"knowledgeCutoff\",\n        \"per_request_limits\": \"perRequestLimits\",\n        \"supported_parameters\": \"supportedParameters\",\n        \"supported_voices\": \"supportedVoices\",\n        \"top_provider\": \"topProvider\",\n    });\n});\nexport function modelFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Model$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Model' from JSON`);\n}\n//# sourceMappingURL=model.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: fcc2bf8be188\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { Model$inboundSchema } from \"./model.js\";\n/** @internal */\nexport const ModelResponse$inboundSchema = z\n    .object({\n    data: Model$inboundSchema,\n});\nexport function modelResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ModelResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ModelResponse' from JSON`);\n}\n//# sourceMappingURL=modelresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: cf41f6279453\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ModelsCountResponseData$inboundSchema = z.object({\n    count: z.int(),\n});\nexport function modelsCountResponseDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ModelsCountResponseData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ModelsCountResponseData' from JSON`);\n}\n/** @internal */\nexport const ModelsCountResponse$inboundSchema = z.object({\n    data: z.lazy(() => ModelsCountResponseData$inboundSchema),\n});\nexport function modelsCountResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ModelsCountResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ModelsCountResponse' from JSON`);\n}\n//# sourceMappingURL=modelscountresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ea0e62a13d8d\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { Model$inboundSchema } from \"./model.js\";\n/** @internal */\nexport const ModelsListResponse$inboundSchema = z.object({\n    data: z.array(Model$inboundSchema),\n});\nexport function modelsListResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ModelsListResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ModelsListResponse' from JSON`);\n}\n//# sourceMappingURL=modelslistresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6c2943dd4f02\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const NotFoundResponseErrorData$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n    metadata: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(),\n});\nexport function notFoundResponseErrorDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => NotFoundResponseErrorData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'NotFoundResponseErrorData' from JSON`);\n}\n//# sourceMappingURL=notfoundresponseerrordata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b721d7085e40\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const OpenAIResponsesResponseStatus = {\n    Completed: \"completed\",\n    Incomplete: \"incomplete\",\n    InProgress: \"in_progress\",\n    Failed: \"failed\",\n    Cancelled: \"cancelled\",\n    Queued: \"queued\",\n};\n/** @internal */\nexport const OpenAIResponsesResponseStatus$inboundSchema = openEnums.inboundSchema(OpenAIResponsesResponseStatus);\n//# sourceMappingURL=openairesponsesresponsestatus.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 82ee236509d6\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nexport const ModeRequired = {\n    Required: \"required\",\n};\nexport const ModeAuto = {\n    Auto: \"auto\",\n};\nexport const ToolChoiceAllowedType = {\n    AllowedTools: \"allowed_tools\",\n};\n/** @internal */\nexport const ModeRequired$inboundSchema = z\n    .enum(ModeRequired);\n/** @internal */\nexport const ModeRequired$outboundSchema = ModeRequired$inboundSchema;\n/** @internal */\nexport const ModeAuto$inboundSchema = z.enum(ModeAuto);\n/** @internal */\nexport const ModeAuto$outboundSchema = ModeAuto$inboundSchema;\n/** @internal */\nexport const Mode$inboundSchema = z.union([\n    ModeAuto$inboundSchema,\n    ModeRequired$inboundSchema,\n]);\n/** @internal */\nexport const Mode$outboundSchema = z.union([\n    ModeAuto$outboundSchema,\n    ModeRequired$outboundSchema,\n]);\nexport function modeToJSON(mode) {\n    return JSON.stringify(Mode$outboundSchema.parse(mode));\n}\nexport function modeFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Mode$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Mode' from JSON`);\n}\n/** @internal */\nexport const ToolChoiceAllowedType$inboundSchema = z.enum(ToolChoiceAllowedType);\n/** @internal */\nexport const ToolChoiceAllowedType$outboundSchema = ToolChoiceAllowedType$inboundSchema;\n/** @internal */\nexport const ToolChoiceAllowed$inboundSchema = z.object({\n    mode: z.union([ModeAuto$inboundSchema, ModeRequired$inboundSchema]),\n    tools: z.array(z.record(z.string(), z.nullable(z.any()))),\n    type: ToolChoiceAllowedType$inboundSchema,\n});\n/** @internal */\nexport const ToolChoiceAllowed$outboundSchema = z.object({\n    mode: z.union([ModeAuto$outboundSchema, ModeRequired$outboundSchema]),\n    tools: z.array(z.record(z.string(), z.nullable(z.any()))),\n    type: ToolChoiceAllowedType$outboundSchema,\n});\nexport function toolChoiceAllowedToJSON(toolChoiceAllowed) {\n    return JSON.stringify(ToolChoiceAllowed$outboundSchema.parse(toolChoiceAllowed));\n}\nexport function toolChoiceAllowedFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ToolChoiceAllowed$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ToolChoiceAllowed' from JSON`);\n}\n//# sourceMappingURL=toolchoiceallowed.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 73d80db9cd46\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ToolChoiceAllowed$inboundSchema, ToolChoiceAllowed$outboundSchema, } from \"./toolchoiceallowed.js\";\nexport const OpenAIResponsesToolChoiceTypeShell = {\n    Shell: \"shell\",\n};\nexport const OpenAIResponsesToolChoiceTypeApplyPatch = {\n    ApplyPatch: \"apply_patch\",\n};\nexport const OpenAIResponsesToolChoiceTypeWebSearchPreview = {\n    WebSearchPreview: \"web_search_preview\",\n};\nexport const OpenAIResponsesToolChoiceTypeWebSearchPreview20250311 = {\n    WebSearchPreview20250311: \"web_search_preview_2025_03_11\",\n};\nexport const OpenAIResponsesToolChoiceTypeFunction = {\n    Function: \"function\",\n};\nexport const OpenAIResponsesToolChoiceRequired = {\n    Required: \"required\",\n};\nexport const OpenAIResponsesToolChoiceNone = {\n    None: \"none\",\n};\nexport const OpenAIResponsesToolChoiceAuto = {\n    Auto: \"auto\",\n};\n/** @internal */\nexport const OpenAIResponsesToolChoiceTypeShell$inboundSchema = z.enum(OpenAIResponsesToolChoiceTypeShell);\n/** @internal */\nexport const OpenAIResponsesToolChoiceTypeShell$outboundSchema = OpenAIResponsesToolChoiceTypeShell$inboundSchema;\n/** @internal */\nexport const OpenAIResponsesToolChoiceShell$inboundSchema = z.object({\n    type: OpenAIResponsesToolChoiceTypeShell$inboundSchema,\n});\n/** @internal */\nexport const OpenAIResponsesToolChoiceShell$outboundSchema = z.object({\n    type: OpenAIResponsesToolChoiceTypeShell$outboundSchema,\n});\nexport function openAIResponsesToolChoiceShellToJSON(openAIResponsesToolChoiceShell) {\n    return JSON.stringify(OpenAIResponsesToolChoiceShell$outboundSchema.parse(openAIResponsesToolChoiceShell));\n}\nexport function openAIResponsesToolChoiceShellFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponsesToolChoiceShell$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponsesToolChoiceShell' from JSON`);\n}\n/** @internal */\nexport const OpenAIResponsesToolChoiceTypeApplyPatch$inboundSchema = z.enum(OpenAIResponsesToolChoiceTypeApplyPatch);\n/** @internal */\nexport const OpenAIResponsesToolChoiceTypeApplyPatch$outboundSchema = OpenAIResponsesToolChoiceTypeApplyPatch$inboundSchema;\n/** @internal */\nexport const OpenAIResponsesToolChoiceApplyPatch$inboundSchema = z.object({\n    type: OpenAIResponsesToolChoiceTypeApplyPatch$inboundSchema,\n});\n/** @internal */\nexport const OpenAIResponsesToolChoiceApplyPatch$outboundSchema = z.object({\n    type: OpenAIResponsesToolChoiceTypeApplyPatch$outboundSchema,\n});\nexport function openAIResponsesToolChoiceApplyPatchToJSON(openAIResponsesToolChoiceApplyPatch) {\n    return JSON.stringify(OpenAIResponsesToolChoiceApplyPatch$outboundSchema.parse(openAIResponsesToolChoiceApplyPatch));\n}\nexport function openAIResponsesToolChoiceApplyPatchFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponsesToolChoiceApplyPatch$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponsesToolChoiceApplyPatch' from JSON`);\n}\n/** @internal */\nexport const OpenAIResponsesToolChoiceTypeWebSearchPreview$inboundSchema = z.enum(OpenAIResponsesToolChoiceTypeWebSearchPreview);\n/** @internal */\nexport const OpenAIResponsesToolChoiceTypeWebSearchPreview$outboundSchema = OpenAIResponsesToolChoiceTypeWebSearchPreview$inboundSchema;\n/** @internal */\nexport const OpenAIResponsesToolChoiceTypeWebSearchPreview20250311$inboundSchema = z\n    .enum(OpenAIResponsesToolChoiceTypeWebSearchPreview20250311);\n/** @internal */\nexport const OpenAIResponsesToolChoiceTypeWebSearchPreview20250311$outboundSchema = OpenAIResponsesToolChoiceTypeWebSearchPreview20250311$inboundSchema;\n/** @internal */\nexport const Type$inboundSchema = z.union([\n    OpenAIResponsesToolChoiceTypeWebSearchPreview20250311$inboundSchema,\n    OpenAIResponsesToolChoiceTypeWebSearchPreview$inboundSchema,\n]);\n/** @internal */\nexport const Type$outboundSchema = z.union([\n    OpenAIResponsesToolChoiceTypeWebSearchPreview20250311$outboundSchema,\n    OpenAIResponsesToolChoiceTypeWebSearchPreview$outboundSchema,\n]);\nexport function typeToJSON(type) {\n    return JSON.stringify(Type$outboundSchema.parse(type));\n}\nexport function typeFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Type$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Type' from JSON`);\n}\n/** @internal */\nexport const OpenAIResponsesToolChoice$inboundSchema = z.object({\n    type: z.union([\n        OpenAIResponsesToolChoiceTypeWebSearchPreview20250311$inboundSchema,\n        OpenAIResponsesToolChoiceTypeWebSearchPreview$inboundSchema,\n    ]),\n});\n/** @internal */\nexport const OpenAIResponsesToolChoice$outboundSchema = z.object({\n    type: z.union([\n        OpenAIResponsesToolChoiceTypeWebSearchPreview20250311$outboundSchema,\n        OpenAIResponsesToolChoiceTypeWebSearchPreview$outboundSchema,\n    ]),\n});\nexport function openAIResponsesToolChoiceToJSON(openAIResponsesToolChoice) {\n    return JSON.stringify(OpenAIResponsesToolChoice$outboundSchema.parse(openAIResponsesToolChoice));\n}\nexport function openAIResponsesToolChoiceFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponsesToolChoice$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponsesToolChoice' from JSON`);\n}\n/** @internal */\nexport const OpenAIResponsesToolChoiceTypeFunction$inboundSchema = z.enum(OpenAIResponsesToolChoiceTypeFunction);\n/** @internal */\nexport const OpenAIResponsesToolChoiceTypeFunction$outboundSchema = OpenAIResponsesToolChoiceTypeFunction$inboundSchema;\n/** @internal */\nexport const OpenAIResponsesToolChoiceFunction$inboundSchema = z.object({\n    name: z.string(),\n    type: OpenAIResponsesToolChoiceTypeFunction$inboundSchema,\n});\n/** @internal */\nexport const OpenAIResponsesToolChoiceFunction$outboundSchema = z.object({\n    name: z.string(),\n    type: OpenAIResponsesToolChoiceTypeFunction$outboundSchema,\n});\nexport function openAIResponsesToolChoiceFunctionToJSON(openAIResponsesToolChoiceFunction) {\n    return JSON.stringify(OpenAIResponsesToolChoiceFunction$outboundSchema.parse(openAIResponsesToolChoiceFunction));\n}\nexport function openAIResponsesToolChoiceFunctionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponsesToolChoiceFunction$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponsesToolChoiceFunction' from JSON`);\n}\n/** @internal */\nexport const OpenAIResponsesToolChoiceRequired$inboundSchema = z.enum(OpenAIResponsesToolChoiceRequired);\n/** @internal */\nexport const OpenAIResponsesToolChoiceRequired$outboundSchema = OpenAIResponsesToolChoiceRequired$inboundSchema;\n/** @internal */\nexport const OpenAIResponsesToolChoiceNone$inboundSchema = z.enum(OpenAIResponsesToolChoiceNone);\n/** @internal */\nexport const OpenAIResponsesToolChoiceNone$outboundSchema = OpenAIResponsesToolChoiceNone$inboundSchema;\n/** @internal */\nexport const OpenAIResponsesToolChoiceAuto$inboundSchema = z.enum(OpenAIResponsesToolChoiceAuto);\n/** @internal */\nexport const OpenAIResponsesToolChoiceAuto$outboundSchema = OpenAIResponsesToolChoiceAuto$inboundSchema;\n/** @internal */\nexport const OpenAIResponsesToolChoiceUnion$inboundSchema = z.union([\n    ToolChoiceAllowed$inboundSchema,\n    z.lazy(() => OpenAIResponsesToolChoiceFunction$inboundSchema),\n    z.lazy(() => OpenAIResponsesToolChoice$inboundSchema),\n    z.lazy(() => OpenAIResponsesToolChoiceApplyPatch$inboundSchema),\n    z.lazy(() => OpenAIResponsesToolChoiceShell$inboundSchema),\n    OpenAIResponsesToolChoiceAuto$inboundSchema,\n    OpenAIResponsesToolChoiceNone$inboundSchema,\n    OpenAIResponsesToolChoiceRequired$inboundSchema,\n]);\n/** @internal */\nexport const OpenAIResponsesToolChoiceUnion$outboundSchema = z.union([\n    ToolChoiceAllowed$outboundSchema,\n    z.lazy(() => OpenAIResponsesToolChoiceFunction$outboundSchema),\n    z.lazy(() => OpenAIResponsesToolChoice$outboundSchema),\n    z.lazy(() => OpenAIResponsesToolChoiceApplyPatch$outboundSchema),\n    z.lazy(() => OpenAIResponsesToolChoiceShell$outboundSchema),\n    OpenAIResponsesToolChoiceAuto$outboundSchema,\n    OpenAIResponsesToolChoiceNone$outboundSchema,\n    OpenAIResponsesToolChoiceRequired$outboundSchema,\n]);\nexport function openAIResponsesToolChoiceUnionToJSON(openAIResponsesToolChoiceUnion) {\n    return JSON.stringify(OpenAIResponsesToolChoiceUnion$outboundSchema.parse(openAIResponsesToolChoiceUnion));\n}\nexport function openAIResponsesToolChoiceUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenAIResponsesToolChoiceUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenAIResponsesToolChoiceUnion' from JSON`);\n}\n//# sourceMappingURL=openairesponsestoolchoiceunion.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 03de9ac74888\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const OpenAIResponsesTruncation = {\n    Auto: \"auto\",\n    Disabled: \"disabled\",\n};\n/** @internal */\nexport const OpenAIResponsesTruncation$outboundSchema = openEnums.outboundSchema(OpenAIResponsesTruncation);\n//# sourceMappingURL=openairesponsestruncation.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9cfff773cd37\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ApplyPatchCallOperation$inboundSchema, } from \"./applypatchcalloperation.js\";\nimport { ApplyPatchCallStatus$inboundSchema, } from \"./applypatchcallstatus.js\";\n/** @internal */\nexport const OutputApplyPatchCallItem$inboundSchema = z.object({\n    call_id: z.string(),\n    id: z.string(),\n    operation: ApplyPatchCallOperation$inboundSchema,\n    status: ApplyPatchCallStatus$inboundSchema,\n    type: z.literal(\"apply_patch_call\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"call_id\": \"callId\",\n    });\n});\nexport function outputApplyPatchCallItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputApplyPatchCallItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputApplyPatchCallItem' from JSON`);\n}\n//# sourceMappingURL=outputapplypatchcallitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7eb39195329c\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { OpenAIResponsesRefusalContent$inboundSchema, } from \"./openairesponsesrefusalcontent.js\";\nimport { ResponseOutputText$inboundSchema, } from \"./responseoutputtext.js\";\nexport const OutputMessageItemPhaseFinalAnswer = {\n    FinalAnswer: \"final_answer\",\n};\nexport const OutputMessageItemPhaseCommentary = {\n    Commentary: \"commentary\",\n};\nexport const OutputMessageItemRole = {\n    Assistant: \"assistant\",\n};\nexport const OutputMessageItemStatusInProgress = {\n    InProgress: \"in_progress\",\n};\nexport const OutputMessageItemStatusIncomplete = {\n    Incomplete: \"incomplete\",\n};\nexport const OutputMessageItemStatusCompleted = {\n    Completed: \"completed\",\n};\n/** @internal */\nexport const OutputMessageItemContent$inboundSchema = discriminatedUnion(\"type\", {\n    output_text: ResponseOutputText$inboundSchema,\n    refusal: OpenAIResponsesRefusalContent$inboundSchema,\n});\nexport function outputMessageItemContentFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputMessageItemContent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputMessageItemContent' from JSON`);\n}\n/** @internal */\nexport const OutputMessageItemPhaseFinalAnswer$inboundSchema = z.enum(OutputMessageItemPhaseFinalAnswer);\n/** @internal */\nexport const OutputMessageItemPhaseCommentary$inboundSchema = z.enum(OutputMessageItemPhaseCommentary);\n/** @internal */\nexport const OutputMessageItemPhaseUnion$inboundSchema = z.union([\n    OutputMessageItemPhaseCommentary$inboundSchema,\n    OutputMessageItemPhaseFinalAnswer$inboundSchema,\n    z.any(),\n]);\nexport function outputMessageItemPhaseUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputMessageItemPhaseUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputMessageItemPhaseUnion' from JSON`);\n}\n/** @internal */\nexport const OutputMessageItemRole$inboundSchema = z.enum(OutputMessageItemRole);\n/** @internal */\nexport const OutputMessageItemStatusInProgress$inboundSchema = z.enum(OutputMessageItemStatusInProgress);\n/** @internal */\nexport const OutputMessageItemStatusIncomplete$inboundSchema = z.enum(OutputMessageItemStatusIncomplete);\n/** @internal */\nexport const OutputMessageItemStatusCompleted$inboundSchema = z.enum(OutputMessageItemStatusCompleted);\n/** @internal */\nexport const OutputMessageItemStatusUnion$inboundSchema = z.union([\n    OutputMessageItemStatusCompleted$inboundSchema,\n    OutputMessageItemStatusIncomplete$inboundSchema,\n    OutputMessageItemStatusInProgress$inboundSchema,\n]);\nexport function outputMessageItemStatusUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputMessageItemStatusUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputMessageItemStatusUnion' from JSON`);\n}\n/** @internal */\nexport const OutputMessageItem$inboundSchema = z.object({\n    content: z.array(discriminatedUnion(\"type\", {\n        output_text: ResponseOutputText$inboundSchema,\n        refusal: OpenAIResponsesRefusalContent$inboundSchema,\n    })),\n    id: z.string(),\n    phase: z.nullable(z.union([\n        OutputMessageItemPhaseCommentary$inboundSchema,\n        OutputMessageItemPhaseFinalAnswer$inboundSchema,\n        z.any(),\n    ])).optional(),\n    role: OutputMessageItemRole$inboundSchema,\n    status: z.union([\n        OutputMessageItemStatusCompleted$inboundSchema,\n        OutputMessageItemStatusIncomplete$inboundSchema,\n        OutputMessageItemStatusInProgress$inboundSchema,\n    ]).optional(),\n    type: z.literal(\"message\"),\n});\nexport function outputMessageItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputMessageItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputMessageItem' from JSON`);\n}\n//# sourceMappingURL=outputmessageitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4ea30f8ad34c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ReasoningFormat$inboundSchema, } from \"./reasoningformat.js\";\nimport { ReasoningSummaryText$inboundSchema, } from \"./reasoningsummarytext.js\";\nimport { ReasoningTextContent$inboundSchema, } from \"./reasoningtextcontent.js\";\nexport const OutputReasoningItemStatusInProgress = {\n    InProgress: \"in_progress\",\n};\nexport const OutputReasoningItemStatusIncomplete = {\n    Incomplete: \"incomplete\",\n};\nexport const OutputReasoningItemStatusCompleted = {\n    Completed: \"completed\",\n};\n/** @internal */\nexport const OutputReasoningItemStatusInProgress$inboundSchema = z.enum(OutputReasoningItemStatusInProgress);\n/** @internal */\nexport const OutputReasoningItemStatusIncomplete$inboundSchema = z.enum(OutputReasoningItemStatusIncomplete);\n/** @internal */\nexport const OutputReasoningItemStatusCompleted$inboundSchema = z.enum(OutputReasoningItemStatusCompleted);\n/** @internal */\nexport const OutputReasoningItemStatusUnion$inboundSchema = z.union([\n    OutputReasoningItemStatusCompleted$inboundSchema,\n    OutputReasoningItemStatusIncomplete$inboundSchema,\n    OutputReasoningItemStatusInProgress$inboundSchema,\n]);\nexport function outputReasoningItemStatusUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputReasoningItemStatusUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputReasoningItemStatusUnion' from JSON`);\n}\n/** @internal */\nexport const OutputReasoningItem$inboundSchema = z.object({\n    content: z.nullable(z.array(ReasoningTextContent$inboundSchema)).optional(),\n    encrypted_content: z.nullable(z.string()).optional(),\n    id: z.string(),\n    status: z.union([\n        OutputReasoningItemStatusCompleted$inboundSchema,\n        OutputReasoningItemStatusIncomplete$inboundSchema,\n        OutputReasoningItemStatusInProgress$inboundSchema,\n    ]).optional(),\n    summary: z.array(ReasoningSummaryText$inboundSchema),\n    type: z.literal(\"reasoning\"),\n    format: z.nullable(ReasoningFormat$inboundSchema).optional(),\n    signature: z.nullable(z.string()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"encrypted_content\": \"encryptedContent\",\n    });\n});\nexport function outputReasoningItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputReasoningItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputReasoningItem' from JSON`);\n}\n//# sourceMappingURL=outputreasoningitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 26933f522ec6\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Status of a shell call or its output.\n */\nexport const ShellCallStatus = {\n    InProgress: \"in_progress\",\n    Completed: \"completed\",\n    Incomplete: \"incomplete\",\n};\n/** @internal */\nexport const ShellCallStatus$inboundSchema = openEnums.inboundSchema(ShellCallStatus);\n//# sourceMappingURL=shellcallstatus.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d8b35b2daab6\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ShellCallStatus$inboundSchema, } from \"./shellcallstatus.js\";\n/** @internal */\nexport const OutputShellCallItemAction$inboundSchema = z.object({\n    commands: z.array(z.string()),\n    max_output_length: z.nullable(z.int()),\n    timeout_ms: z.nullable(z.int()),\n}).transform((v) => {\n    return remap$(v, {\n        \"max_output_length\": \"maxOutputLength\",\n        \"timeout_ms\": \"timeoutMs\",\n    });\n});\nexport function outputShellCallItemActionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputShellCallItemAction$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputShellCallItemAction' from JSON`);\n}\n/** @internal */\nexport const OutputShellCallItem$inboundSchema = z.object({\n    action: z.lazy(() => OutputShellCallItemAction$inboundSchema).optional(),\n    call_id: z.string(),\n    id: z.string(),\n    status: ShellCallStatus$inboundSchema,\n    type: z.literal(\"shell_call\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"call_id\": \"callId\",\n    });\n});\nexport function outputShellCallItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputShellCallItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputShellCallItem' from JSON`);\n}\n//# sourceMappingURL=outputshellcallitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a933ffbb5346\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { ShellCallStatus$inboundSchema, } from \"./shellcallstatus.js\";\n/** @internal */\nexport const OutcomeTimeout$inboundSchema = z.object({\n    type: z.literal(\"timeout\"),\n});\nexport function outcomeTimeoutFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutcomeTimeout$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutcomeTimeout' from JSON`);\n}\n/** @internal */\nexport const OutcomeExit$inboundSchema = z\n    .object({\n    exit_code: z.int(),\n    type: z.literal(\"exit\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"exit_code\": \"exitCode\",\n    });\n});\nexport function outcomeExitFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutcomeExit$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutcomeExit' from JSON`);\n}\n/** @internal */\nexport const Outcome$inboundSchema = discriminatedUnion(\"type\", {\n    exit: z.lazy(() => OutcomeExit$inboundSchema),\n    timeout: z.lazy(() => OutcomeTimeout$inboundSchema),\n});\nexport function outcomeFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Outcome$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Outcome' from JSON`);\n}\n/** @internal */\nexport const OutputShellCallOutputItemOutput$inboundSchema = z.object({\n    outcome: discriminatedUnion(\"type\", {\n        exit: z.lazy(() => OutcomeExit$inboundSchema),\n        timeout: z.lazy(() => OutcomeTimeout$inboundSchema),\n    }),\n    stderr: z.string(),\n    stdout: z.string(),\n});\nexport function outputShellCallOutputItemOutputFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputShellCallOutputItemOutput$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputShellCallOutputItemOutput' from JSON`);\n}\n/** @internal */\nexport const OutputShellCallOutputItem$inboundSchema = z.object({\n    call_id: z.string(),\n    id: z.string(),\n    max_output_length: z.nullable(z.int()).optional(),\n    output: z.array(z.lazy(() => OutputShellCallOutputItemOutput$inboundSchema)),\n    status: ShellCallStatus$inboundSchema,\n    type: z.literal(\"shell_call_output\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"call_id\": \"callId\",\n        \"max_output_length\": \"maxOutputLength\",\n    });\n});\nexport function outputShellCallOutputItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputShellCallOutputItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputShellCallOutputItem' from JSON`);\n}\n//# sourceMappingURL=outputshellcalloutputitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0d7161b3403e\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { OutputAdvisorServerToolItem$inboundSchema, } from \"./outputadvisorservertoolitem.js\";\nimport { OutputApplyPatchCallItem$inboundSchema, } from \"./outputapplypatchcallitem.js\";\nimport { OutputApplyPatchServerToolItem$inboundSchema, } from \"./outputapplypatchservertoolitem.js\";\nimport { OutputBashServerToolItem$inboundSchema, } from \"./outputbashservertoolitem.js\";\nimport { OutputBrowserUseServerToolItem$inboundSchema, } from \"./outputbrowseruseservertoolitem.js\";\nimport { OutputCodeInterpreterCallItem$inboundSchema, } from \"./outputcodeinterpretercallitem.js\";\nimport { OutputCodeInterpreterServerToolItem$inboundSchema, } from \"./outputcodeinterpreterservertoolitem.js\";\nimport { OutputComputerCallItem$inboundSchema, } from \"./outputcomputercallitem.js\";\nimport { OutputCustomToolCallItem$inboundSchema, } from \"./outputcustomtoolcallitem.js\";\nimport { OutputDatetimeItem$inboundSchema, } from \"./outputdatetimeitem.js\";\nimport { OutputFileSearchCallItem$inboundSchema, } from \"./outputfilesearchcallitem.js\";\nimport { OutputFileSearchServerToolItem$inboundSchema, } from \"./outputfilesearchservertoolitem.js\";\nimport { OutputFunctionCallItem$inboundSchema, } from \"./outputfunctioncallitem.js\";\nimport { OutputFusionServerToolItem$inboundSchema, } from \"./outputfusionservertoolitem.js\";\nimport { OutputImageGenerationCallItem$inboundSchema, } from \"./outputimagegenerationcallitem.js\";\nimport { OutputImageGenerationServerToolItem$inboundSchema, } from \"./outputimagegenerationservertoolitem.js\";\nimport { OutputMcpServerToolItem$inboundSchema, } from \"./outputmcpservertoolitem.js\";\nimport { OutputMemoryServerToolItem$inboundSchema, } from \"./outputmemoryservertoolitem.js\";\nimport { OutputMessageItem$inboundSchema, } from \"./outputmessageitem.js\";\nimport { OutputReasoningItem$inboundSchema, } from \"./outputreasoningitem.js\";\nimport { OutputSearchModelsServerToolItem$inboundSchema, } from \"./outputsearchmodelsservertoolitem.js\";\nimport { OutputShellCallItem$inboundSchema, } from \"./outputshellcallitem.js\";\nimport { OutputShellCallOutputItem$inboundSchema, } from \"./outputshellcalloutputitem.js\";\nimport { OutputSubagentServerToolItem$inboundSchema, } from \"./outputsubagentservertoolitem.js\";\nimport { OutputTextEditorServerToolItem$inboundSchema, } from \"./outputtexteditorservertoolitem.js\";\nimport { OutputToolSearchServerToolItem$inboundSchema, } from \"./outputtoolsearchservertoolitem.js\";\nimport { OutputWebFetchServerToolItem$inboundSchema, } from \"./outputwebfetchservertoolitem.js\";\nimport { OutputWebSearchCallItem$inboundSchema, } from \"./outputwebsearchcallitem.js\";\nimport { OutputWebSearchServerToolItem$inboundSchema, } from \"./outputwebsearchservertoolitem.js\";\n/** @internal */\nexport const OutputItems$inboundSchema = discriminatedUnion(\"type\", {\n    apply_patch_call: OutputApplyPatchCallItem$inboundSchema,\n    code_interpreter_call: OutputCodeInterpreterCallItem$inboundSchema.and(z.object({ type: z.literal(\"code_interpreter_call\") })),\n    computer_call: OutputComputerCallItem$inboundSchema.and(z.object({ type: z.literal(\"computer_call\") })),\n    custom_tool_call: OutputCustomToolCallItem$inboundSchema.and(z.object({ type: z.literal(\"custom_tool_call\") })),\n    file_search_call: OutputFileSearchCallItem$inboundSchema.and(z.object({ type: z.literal(\"file_search_call\") })),\n    function_call: OutputFunctionCallItem$inboundSchema.and(z.object({ type: z.literal(\"function_call\") })),\n    image_generation_call: OutputImageGenerationCallItem$inboundSchema.and(z.object({ type: z.literal(\"image_generation_call\") })),\n    message: OutputMessageItem$inboundSchema,\n    [\"openrouter:advisor\"]: OutputAdvisorServerToolItem$inboundSchema.and(z.object({ type: z.literal(\"openrouter:advisor\") })),\n    [\"openrouter:apply_patch\"]: OutputApplyPatchServerToolItem$inboundSchema\n        .and(z.object({ type: z.literal(\"openrouter:apply_patch\") })),\n    [\"openrouter:bash\"]: OutputBashServerToolItem$inboundSchema.and(z.object({ type: z.literal(\"openrouter:bash\") })),\n    [\"openrouter:browser_use\"]: OutputBrowserUseServerToolItem$inboundSchema\n        .and(z.object({ type: z.literal(\"openrouter:browser_use\") })),\n    [\"openrouter:code_interpreter\"]: OutputCodeInterpreterServerToolItem$inboundSchema.and(z.object({ type: z.literal(\"openrouter:code_interpreter\") })),\n    [\"openrouter:datetime\"]: OutputDatetimeItem$inboundSchema.and(z.object({ type: z.literal(\"openrouter:datetime\") })),\n    [\"openrouter:experimental__search_models\"]: OutputSearchModelsServerToolItem$inboundSchema.and(z.object({ type: z.literal(\"openrouter:experimental__search_models\") })),\n    [\"openrouter:file_search\"]: OutputFileSearchServerToolItem$inboundSchema\n        .and(z.object({ type: z.literal(\"openrouter:file_search\") })),\n    [\"openrouter:fusion\"]: OutputFusionServerToolItem$inboundSchema.and(z.object({ type: z.literal(\"openrouter:fusion\") })),\n    [\"openrouter:image_generation\"]: OutputImageGenerationServerToolItem$inboundSchema.and(z.object({ type: z.literal(\"openrouter:image_generation\") })),\n    [\"openrouter:mcp\"]: OutputMcpServerToolItem$inboundSchema.and(z.object({ type: z.literal(\"openrouter:mcp\") })),\n    [\"openrouter:memory\"]: OutputMemoryServerToolItem$inboundSchema.and(z.object({ type: z.literal(\"openrouter:memory\") })),\n    [\"openrouter:subagent\"]: OutputSubagentServerToolItem$inboundSchema.and(z.object({ type: z.literal(\"openrouter:subagent\") })),\n    [\"openrouter:text_editor\"]: OutputTextEditorServerToolItem$inboundSchema\n        .and(z.object({ type: z.literal(\"openrouter:text_editor\") })),\n    [\"openrouter:tool_search\"]: OutputToolSearchServerToolItem$inboundSchema\n        .and(z.object({ type: z.literal(\"openrouter:tool_search\") })),\n    [\"openrouter:web_fetch\"]: OutputWebFetchServerToolItem$inboundSchema.and(z.object({ type: z.literal(\"openrouter:web_fetch\") })),\n    [\"openrouter:web_search\"]: OutputWebSearchServerToolItem$inboundSchema.and(z.object({ type: z.literal(\"openrouter:web_search\") })),\n    reasoning: OutputReasoningItem$inboundSchema,\n    shell_call: OutputShellCallItem$inboundSchema,\n    shell_call_output: OutputShellCallOutputItem$inboundSchema,\n    web_search_call: OutputWebSearchCallItem$inboundSchema.and(z.object({ type: z.literal(\"web_search_call\") })),\n});\nexport function outputItemsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputItems$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputItems' from JSON`);\n}\n//# sourceMappingURL=outputitems.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 64db0edfc37d\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nexport const PreviewWebSearchUserLocationType = {\n    Approximate: \"approximate\",\n};\n/** @internal */\nexport const PreviewWebSearchUserLocationType$inboundSchema = z.enum(PreviewWebSearchUserLocationType);\n/** @internal */\nexport const PreviewWebSearchUserLocationType$outboundSchema = PreviewWebSearchUserLocationType$inboundSchema;\n/** @internal */\nexport const PreviewWebSearchUserLocation$inboundSchema = z.object({\n    city: z.nullable(z.string()).optional(),\n    country: z.nullable(z.string()).optional(),\n    region: z.nullable(z.string()).optional(),\n    timezone: z.nullable(z.string()).optional(),\n    type: PreviewWebSearchUserLocationType$inboundSchema,\n});\n/** @internal */\nexport const PreviewWebSearchUserLocation$outboundSchema = z.object({\n    city: z.nullable(z.string()).optional(),\n    country: z.nullable(z.string()).optional(),\n    region: z.nullable(z.string()).optional(),\n    timezone: z.nullable(z.string()).optional(),\n    type: PreviewWebSearchUserLocationType$outboundSchema,\n});\nexport function previewWebSearchUserLocationToJSON(previewWebSearchUserLocation) {\n    return JSON.stringify(PreviewWebSearchUserLocation$outboundSchema.parse(previewWebSearchUserLocation));\n}\nexport function previewWebSearchUserLocationFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => PreviewWebSearchUserLocation$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'PreviewWebSearchUserLocation' from JSON`);\n}\n//# sourceMappingURL=previewwebsearchuserlocation.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: c171c186ccac\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { PreviewWebSearchUserLocation$inboundSchema, PreviewWebSearchUserLocation$outboundSchema, } from \"./previewwebsearchuserlocation.js\";\nimport { SearchContextSizeEnum$inboundSchema, SearchContextSizeEnum$outboundSchema, } from \"./searchcontextsizeenum.js\";\nimport { WebSearchDomainFilter$inboundSchema, WebSearchDomainFilter$outboundSchema, } from \"./websearchdomainfilter.js\";\nimport { WebSearchEngineEnum$inboundSchema, WebSearchEngineEnum$outboundSchema, } from \"./websearchengineenum.js\";\n/** @internal */\nexport const Preview20250311WebSearchServerTool$inboundSchema = z.object({\n    engine: WebSearchEngineEnum$inboundSchema.optional(),\n    filters: z.nullable(WebSearchDomainFilter$inboundSchema).optional(),\n    max_results: z.int().optional(),\n    search_context_size: SearchContextSizeEnum$inboundSchema.optional(),\n    type: z.literal(\"web_search_preview_2025_03_11\"),\n    user_location: z.nullable(PreviewWebSearchUserLocation$inboundSchema)\n        .optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"max_results\": \"maxResults\",\n        \"search_context_size\": \"searchContextSize\",\n        \"user_location\": \"userLocation\",\n    });\n});\n/** @internal */\nexport const Preview20250311WebSearchServerTool$outboundSchema = z.object({\n    engine: WebSearchEngineEnum$outboundSchema.optional(),\n    filters: z.nullable(WebSearchDomainFilter$outboundSchema).optional(),\n    maxResults: z.int().optional(),\n    searchContextSize: SearchContextSizeEnum$outboundSchema.optional(),\n    type: z.literal(\"web_search_preview_2025_03_11\"),\n    userLocation: z.nullable(PreviewWebSearchUserLocation$outboundSchema)\n        .optional(),\n}).transform((v) => {\n    return remap$(v, {\n        maxResults: \"max_results\",\n        searchContextSize: \"search_context_size\",\n        userLocation: \"user_location\",\n    });\n});\nexport function preview20250311WebSearchServerToolToJSON(preview20250311WebSearchServerTool) {\n    return JSON.stringify(Preview20250311WebSearchServerTool$outboundSchema.parse(preview20250311WebSearchServerTool));\n}\nexport function preview20250311WebSearchServerToolFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Preview20250311WebSearchServerTool$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Preview20250311WebSearchServerTool' from JSON`);\n}\n//# sourceMappingURL=preview20250311websearchservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6b7147491ff2\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { PreviewWebSearchUserLocation$inboundSchema, PreviewWebSearchUserLocation$outboundSchema, } from \"./previewwebsearchuserlocation.js\";\nimport { SearchContextSizeEnum$inboundSchema, SearchContextSizeEnum$outboundSchema, } from \"./searchcontextsizeenum.js\";\nimport { WebSearchDomainFilter$inboundSchema, WebSearchDomainFilter$outboundSchema, } from \"./websearchdomainfilter.js\";\nimport { WebSearchEngineEnum$inboundSchema, WebSearchEngineEnum$outboundSchema, } from \"./websearchengineenum.js\";\n/** @internal */\nexport const PreviewWebSearchServerTool$inboundSchema = z.object({\n    engine: WebSearchEngineEnum$inboundSchema.optional(),\n    filters: z.nullable(WebSearchDomainFilter$inboundSchema).optional(),\n    max_results: z.int().optional(),\n    search_context_size: SearchContextSizeEnum$inboundSchema.optional(),\n    type: z.literal(\"web_search_preview\"),\n    user_location: z.nullable(PreviewWebSearchUserLocation$inboundSchema)\n        .optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"max_results\": \"maxResults\",\n        \"search_context_size\": \"searchContextSize\",\n        \"user_location\": \"userLocation\",\n    });\n});\n/** @internal */\nexport const PreviewWebSearchServerTool$outboundSchema = z.object({\n    engine: WebSearchEngineEnum$outboundSchema.optional(),\n    filters: z.nullable(WebSearchDomainFilter$outboundSchema).optional(),\n    maxResults: z.int().optional(),\n    searchContextSize: SearchContextSizeEnum$outboundSchema.optional(),\n    type: z.literal(\"web_search_preview\"),\n    userLocation: z.nullable(PreviewWebSearchUserLocation$outboundSchema)\n        .optional(),\n}).transform((v) => {\n    return remap$(v, {\n        maxResults: \"max_results\",\n        searchContextSize: \"search_context_size\",\n        userLocation: \"user_location\",\n    });\n});\nexport function previewWebSearchServerToolToJSON(previewWebSearchServerTool) {\n    return JSON.stringify(PreviewWebSearchServerTool$outboundSchema.parse(previewWebSearchServerTool));\n}\nexport function previewWebSearchServerToolFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => PreviewWebSearchServerTool$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'PreviewWebSearchServerTool' from JSON`);\n}\n//# sourceMappingURL=previewwebsearchservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 830ea3d3b590\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const Code = {\n    ServerError: \"server_error\",\n    RateLimitExceeded: \"rate_limit_exceeded\",\n    InvalidPrompt: \"invalid_prompt\",\n    VectorStoreTimeout: \"vector_store_timeout\",\n    InvalidImage: \"invalid_image\",\n    InvalidImageFormat: \"invalid_image_format\",\n    InvalidBase64Image: \"invalid_base64_image\",\n    InvalidImageUrl: \"invalid_image_url\",\n    ImageTooLarge: \"image_too_large\",\n    ImageTooSmall: \"image_too_small\",\n    ImageParseError: \"image_parse_error\",\n    ImageContentPolicyViolation: \"image_content_policy_violation\",\n    InvalidImageMode: \"invalid_image_mode\",\n    ImageFileTooLarge: \"image_file_too_large\",\n    UnsupportedImageMediaType: \"unsupported_image_media_type\",\n    EmptyImageFile: \"empty_image_file\",\n    FailedToDownloadImage: \"failed_to_download_image\",\n    ImageFileNotFound: \"image_file_not_found\",\n};\n/** @internal */\nexport const Code$inboundSchema = openEnums\n    .inboundSchema(Code);\n/** @internal */\nexport const ResponsesErrorField$inboundSchema = z.object({\n    code: Code$inboundSchema,\n    message: z.string(),\n});\nexport function responsesErrorFieldFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ResponsesErrorField$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ResponsesErrorField' from JSON`);\n}\n//# sourceMappingURL=responseserrorfield.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4bd6823cb793\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ShellServerTool$inboundSchema = z.object({\n    type: z.literal(\"shell\"),\n});\n/** @internal */\nexport const ShellServerTool$outboundSchema = z.object({\n    type: z.literal(\"shell\"),\n});\nexport function shellServerToolToJSON(shellServerTool) {\n    return JSON.stringify(ShellServerTool$outboundSchema.parse(shellServerTool));\n}\nexport function shellServerToolFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ShellServerTool$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ShellServerTool' from JSON`);\n}\n//# sourceMappingURL=shellservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4a3405746141\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { InputFile$inboundSchema, InputFile$outboundSchema, } from \"./inputfile.js\";\nimport { InputImage$inboundSchema, InputImage$outboundSchema, } from \"./inputimage.js\";\nimport { InputText$inboundSchema, InputText$outboundSchema, } from \"./inputtext.js\";\n/** @internal */\nexport const Variables$inboundSchema = z.union([\n    InputText$inboundSchema,\n    InputImage$inboundSchema,\n    InputFile$inboundSchema,\n    z.string(),\n]);\n/** @internal */\nexport const Variables$outboundSchema = z.union([\n    InputText$outboundSchema,\n    InputImage$outboundSchema,\n    InputFile$outboundSchema,\n    z.string(),\n]);\nexport function variablesToJSON(variables) {\n    return JSON.stringify(Variables$outboundSchema.parse(variables));\n}\nexport function variablesFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Variables$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Variables' from JSON`);\n}\n/** @internal */\nexport const StoredPromptTemplate$inboundSchema = z.object({\n    id: z.string(),\n    variables: z.nullable(z.record(z.string(), z.union([\n        InputText$inboundSchema,\n        InputImage$inboundSchema,\n        InputFile$inboundSchema,\n        z.string(),\n    ]))).optional(),\n});\n/** @internal */\nexport const StoredPromptTemplate$outboundSchema = z.object({\n    id: z.string(),\n    variables: z.nullable(z.record(z.string(), z.union([\n        InputText$outboundSchema,\n        InputImage$outboundSchema,\n        InputFile$outboundSchema,\n        z.string(),\n    ]))).optional(),\n});\nexport function storedPromptTemplateToJSON(storedPromptTemplate) {\n    return JSON.stringify(StoredPromptTemplate$outboundSchema.parse(storedPromptTemplate));\n}\nexport function storedPromptTemplateFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => StoredPromptTemplate$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'StoredPromptTemplate' from JSON`);\n}\n//# sourceMappingURL=storedprompttemplate.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e264e7981200\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { Formats$inboundSchema, Formats$outboundSchema, } from \"./formats.js\";\nexport const Verbosity = {\n    Low: \"low\",\n    Medium: \"medium\",\n    High: \"high\",\n    Xhigh: \"xhigh\",\n    Max: \"max\",\n};\n/** @internal */\nexport const Verbosity$inboundSchema = openEnums\n    .inboundSchema(Verbosity);\n/** @internal */\nexport const Verbosity$outboundSchema = openEnums\n    .outboundSchema(Verbosity);\n/** @internal */\nexport const TextExtendedConfig$inboundSchema = z.object({\n    format: Formats$inboundSchema.optional(),\n    verbosity: z.nullable(Verbosity$inboundSchema).optional(),\n});\n/** @internal */\nexport const TextExtendedConfig$outboundSchema = z.object({\n    format: Formats$outboundSchema.optional(),\n    verbosity: z.nullable(Verbosity$outboundSchema).optional(),\n});\nexport function textExtendedConfigToJSON(textExtendedConfig) {\n    return JSON.stringify(TextExtendedConfig$outboundSchema.parse(textExtendedConfig));\n}\nexport function textExtendedConfigFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => TextExtendedConfig$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'TextExtendedConfig' from JSON`);\n}\n//# sourceMappingURL=textextendedconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 8aa9a16a7a40\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const Truncation = {\n    Auto: \"auto\",\n    Disabled: \"disabled\",\n};\n/** @internal */\nexport const Truncation$inboundSchema = openEnums.inboundSchema(Truncation);\n//# sourceMappingURL=truncation.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7d556ab96faf\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const InputTokensDetails$inboundSchema = z.object({\n    cached_tokens: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"cached_tokens\": \"cachedTokens\",\n    });\n});\nexport function inputTokensDetailsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => InputTokensDetails$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'InputTokensDetails' from JSON`);\n}\n/** @internal */\nexport const OutputTokensDetails$inboundSchema = z.object({\n    reasoning_tokens: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"reasoning_tokens\": \"reasoningTokens\",\n    });\n});\nexport function outputTokensDetailsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OutputTokensDetails$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OutputTokensDetails' from JSON`);\n}\n/** @internal */\nexport const UsageCostDetails$inboundSchema = z.object({\n    upstream_inference_cost: z.nullable(z.number()).optional(),\n    upstream_inference_input_cost: z.number(),\n    upstream_inference_output_cost: z.number(),\n}).transform((v) => {\n    return remap$(v, {\n        \"upstream_inference_cost\": \"upstreamInferenceCost\",\n        \"upstream_inference_input_cost\": \"upstreamInferenceInputCost\",\n        \"upstream_inference_output_cost\": \"upstreamInferenceOutputCost\",\n    });\n});\nexport function usageCostDetailsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => UsageCostDetails$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'UsageCostDetails' from JSON`);\n}\n/** @internal */\nexport const Usage$inboundSchema = z.object({\n    input_tokens: z.int(),\n    input_tokens_details: z.lazy(() => InputTokensDetails$inboundSchema),\n    output_tokens: z.int(),\n    output_tokens_details: z.lazy(() => OutputTokensDetails$inboundSchema),\n    total_tokens: z.int(),\n    cost: z.nullable(z.number()).optional(),\n    cost_details: z.lazy(() => UsageCostDetails$inboundSchema).optional(),\n    is_byok: z.boolean().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"input_tokens\": \"inputTokens\",\n        \"input_tokens_details\": \"inputTokensDetails\",\n        \"output_tokens\": \"outputTokens\",\n        \"output_tokens_details\": \"outputTokensDetails\",\n        \"total_tokens\": \"totalTokens\",\n        \"cost_details\": \"costDetails\",\n        \"is_byok\": \"isByok\",\n    });\n});\nexport function usageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Usage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Usage' from JSON`);\n}\n//# sourceMappingURL=usage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 478da2f8e455\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { SearchContextSizeEnum$inboundSchema, SearchContextSizeEnum$outboundSchema, } from \"./searchcontextsizeenum.js\";\nimport { WebSearchDomainFilter$inboundSchema, WebSearchDomainFilter$outboundSchema, } from \"./websearchdomainfilter.js\";\nimport { WebSearchEngineEnum$inboundSchema, WebSearchEngineEnum$outboundSchema, } from \"./websearchengineenum.js\";\nimport { WebSearchUserLocation$inboundSchema, WebSearchUserLocation$outboundSchema, } from \"./websearchuserlocation.js\";\n/** @internal */\nexport const WebSearchServerTool$inboundSchema = z.object({\n    engine: WebSearchEngineEnum$inboundSchema.optional(),\n    filters: z.nullable(WebSearchDomainFilter$inboundSchema).optional(),\n    max_results: z.int().optional(),\n    search_context_size: SearchContextSizeEnum$inboundSchema.optional(),\n    type: z.literal(\"web_search_2025_08_26\"),\n    user_location: z.nullable(WebSearchUserLocation$inboundSchema).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"max_results\": \"maxResults\",\n        \"search_context_size\": \"searchContextSize\",\n        \"user_location\": \"userLocation\",\n    });\n});\n/** @internal */\nexport const WebSearchServerTool$outboundSchema = z.object({\n    engine: WebSearchEngineEnum$outboundSchema.optional(),\n    filters: z.nullable(WebSearchDomainFilter$outboundSchema).optional(),\n    maxResults: z.int().optional(),\n    searchContextSize: SearchContextSizeEnum$outboundSchema.optional(),\n    type: z.literal(\"web_search_2025_08_26\"),\n    userLocation: z.nullable(WebSearchUserLocation$outboundSchema).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        maxResults: \"max_results\",\n        searchContextSize: \"search_context_size\",\n        userLocation: \"user_location\",\n    });\n});\nexport function webSearchServerToolToJSON(webSearchServerTool) {\n    return JSON.stringify(WebSearchServerTool$outboundSchema.parse(webSearchServerTool));\n}\nexport function webSearchServerToolFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => WebSearchServerTool$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'WebSearchServerTool' from JSON`);\n}\n//# sourceMappingURL=websearchservertool.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 95391b93fcbf\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { ApplyPatchServerTool$inboundSchema, } from \"./applypatchservertool.js\";\nimport { BaseInputsUnion$inboundSchema, } from \"./baseinputsunion.js\";\nimport { BaseReasoningConfig$inboundSchema, } from \"./basereasoningconfig.js\";\nimport { CodeInterpreterServerTool$inboundSchema, } from \"./codeinterpreterservertool.js\";\nimport { CodexLocalShellTool$inboundSchema, } from \"./codexlocalshelltool.js\";\nimport { ComputerUseServerTool$inboundSchema, } from \"./computeruseservertool.js\";\nimport { CustomTool$inboundSchema } from \"./customtool.js\";\nimport { FileSearchServerTool$inboundSchema, } from \"./filesearchservertool.js\";\nimport { ImageGenerationServerTool$inboundSchema, } from \"./imagegenerationservertool.js\";\nimport { IncompleteDetails$inboundSchema, } from \"./incompletedetails.js\";\nimport { LegacyWebSearchServerTool$inboundSchema, } from \"./legacywebsearchservertool.js\";\nimport { McpServerTool$inboundSchema } from \"./mcpservertool.js\";\nimport { OpenAIResponsesResponseStatus$inboundSchema, } from \"./openairesponsesresponsestatus.js\";\nimport { OpenAIResponsesToolChoiceUnion$inboundSchema, } from \"./openairesponsestoolchoiceunion.js\";\nimport { OpenRouterMetadata$inboundSchema, } from \"./openroutermetadata.js\";\nimport { OutputItems$inboundSchema } from \"./outputitems.js\";\nimport { Preview20250311WebSearchServerTool$inboundSchema, } from \"./preview20250311websearchservertool.js\";\nimport { PreviewWebSearchServerTool$inboundSchema, } from \"./previewwebsearchservertool.js\";\nimport { ResponsesErrorField$inboundSchema, } from \"./responseserrorfield.js\";\nimport { ShellServerTool$inboundSchema, } from \"./shellservertool.js\";\nimport { StoredPromptTemplate$inboundSchema, } from \"./storedprompttemplate.js\";\nimport { TextExtendedConfig$inboundSchema, } from \"./textextendedconfig.js\";\nimport { Truncation$inboundSchema } from \"./truncation.js\";\nimport { Usage$inboundSchema } from \"./usage.js\";\nimport { WebSearchServerTool$inboundSchema, } from \"./websearchservertool.js\";\nexport const OpenResponsesResultObject = {\n    Response: \"response\",\n};\n/** @internal */\nexport const OpenResponsesResultObject$inboundSchema = z.enum(OpenResponsesResultObject);\n/** @internal */\nexport const OpenResponsesResultToolFunction$inboundSchema = z.object({\n    description: z.nullable(z.string()).optional(),\n    name: z.string(),\n    parameters: z.nullable(z.record(z.string(), z.nullable(z.any()))),\n    strict: z.nullable(z.boolean()).optional(),\n    type: z.literal(\"function\"),\n});\nexport function openResponsesResultToolFunctionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenResponsesResultToolFunction$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenResponsesResultToolFunction' from JSON`);\n}\n/** @internal */\nexport const OpenResponsesResultToolUnion$inboundSchema = discriminatedUnion(\"type\", {\n    function: z.lazy(() => OpenResponsesResultToolFunction$inboundSchema),\n    web_search_preview: PreviewWebSearchServerTool$inboundSchema,\n    web_search_preview_2025_03_11: Preview20250311WebSearchServerTool$inboundSchema,\n    web_search: LegacyWebSearchServerTool$inboundSchema,\n    web_search_2025_08_26: WebSearchServerTool$inboundSchema,\n    file_search: FileSearchServerTool$inboundSchema,\n    computer_use_preview: ComputerUseServerTool$inboundSchema,\n    code_interpreter: CodeInterpreterServerTool$inboundSchema,\n    mcp: McpServerTool$inboundSchema,\n    image_generation: ImageGenerationServerTool$inboundSchema,\n    local_shell: CodexLocalShellTool$inboundSchema,\n    shell: ShellServerTool$inboundSchema,\n    apply_patch: ApplyPatchServerTool$inboundSchema,\n    custom: CustomTool$inboundSchema,\n});\nexport function openResponsesResultToolUnionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenResponsesResultToolUnion$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenResponsesResultToolUnion' from JSON`);\n}\n/** @internal */\nexport const OpenResponsesResult$inboundSchema = z.object({\n    background: z.nullable(z.boolean()).optional(),\n    completed_at: z.nullable(z.int()),\n    created_at: z.int(),\n    error: z.nullable(ResponsesErrorField$inboundSchema),\n    frequency_penalty: z.nullable(z.number()),\n    id: z.string(),\n    incomplete_details: z.nullable(IncompleteDetails$inboundSchema),\n    instructions: z.nullable(BaseInputsUnion$inboundSchema),\n    max_output_tokens: z.nullable(z.int()).optional(),\n    max_tool_calls: z.nullable(z.int()).optional(),\n    metadata: z.nullable(z.record(z.string(), z.string())),\n    model: z.string(),\n    object: OpenResponsesResultObject$inboundSchema,\n    output: z.array(OutputItems$inboundSchema),\n    output_text: z.string().optional(),\n    parallel_tool_calls: z.boolean(),\n    presence_penalty: z.nullable(z.number()),\n    previous_response_id: z.nullable(z.string()).optional(),\n    prompt: z.nullable(StoredPromptTemplate$inboundSchema).optional(),\n    prompt_cache_key: z.nullable(z.string()).optional(),\n    reasoning: z.nullable(BaseReasoningConfig$inboundSchema).optional(),\n    safety_identifier: z.nullable(z.string()).optional(),\n    service_tier: z.nullable(z.string()).optional(),\n    status: OpenAIResponsesResponseStatus$inboundSchema,\n    store: z.boolean().optional(),\n    temperature: z.nullable(z.number()),\n    text: TextExtendedConfig$inboundSchema.optional(),\n    tool_choice: OpenAIResponsesToolChoiceUnion$inboundSchema,\n    tools: z.array(discriminatedUnion(\"type\", {\n        function: z.lazy(() => OpenResponsesResultToolFunction$inboundSchema),\n        web_search_preview: PreviewWebSearchServerTool$inboundSchema,\n        web_search_preview_2025_03_11: Preview20250311WebSearchServerTool$inboundSchema,\n        web_search: LegacyWebSearchServerTool$inboundSchema,\n        web_search_2025_08_26: WebSearchServerTool$inboundSchema,\n        file_search: FileSearchServerTool$inboundSchema,\n        computer_use_preview: ComputerUseServerTool$inboundSchema,\n        code_interpreter: CodeInterpreterServerTool$inboundSchema,\n        mcp: McpServerTool$inboundSchema,\n        image_generation: ImageGenerationServerTool$inboundSchema,\n        local_shell: CodexLocalShellTool$inboundSchema,\n        shell: ShellServerTool$inboundSchema,\n        apply_patch: ApplyPatchServerTool$inboundSchema,\n        custom: CustomTool$inboundSchema,\n    })),\n    top_logprobs: z.nullable(z.int()).optional(),\n    top_p: z.nullable(z.number()),\n    truncation: z.nullable(Truncation$inboundSchema).optional(),\n    usage: z.nullable(Usage$inboundSchema).optional(),\n    user: z.nullable(z.string()).optional(),\n    openrouter_metadata: OpenRouterMetadata$inboundSchema.optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"completed_at\": \"completedAt\",\n        \"created_at\": \"createdAt\",\n        \"frequency_penalty\": \"frequencyPenalty\",\n        \"incomplete_details\": \"incompleteDetails\",\n        \"max_output_tokens\": \"maxOutputTokens\",\n        \"max_tool_calls\": \"maxToolCalls\",\n        \"output_text\": \"outputText\",\n        \"parallel_tool_calls\": \"parallelToolCalls\",\n        \"presence_penalty\": \"presencePenalty\",\n        \"previous_response_id\": \"previousResponseId\",\n        \"prompt_cache_key\": \"promptCacheKey\",\n        \"safety_identifier\": \"safetyIdentifier\",\n        \"service_tier\": \"serviceTier\",\n        \"tool_choice\": \"toolChoice\",\n        \"top_logprobs\": \"topLogprobs\",\n        \"top_p\": \"topP\",\n        \"openrouter_metadata\": \"openrouterMetadata\",\n    });\n});\nexport function openResponsesResultFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenResponsesResult$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenResponsesResult' from JSON`);\n}\n//# sourceMappingURL=openresponsesresult.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e65287120d25\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { OpenResponsesResult$inboundSchema, } from \"./openresponsesresult.js\";\n/** @internal */\nexport const OpenResponsesCreatedEvent$inboundSchema = z.object({\n    response: OpenResponsesResult$inboundSchema,\n    sequence_number: z.int(),\n    type: z.literal(\"response.created\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function openResponsesCreatedEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenResponsesCreatedEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenResponsesCreatedEvent' from JSON`);\n}\n//# sourceMappingURL=openresponsescreatedevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 44b1a23df5d5\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { OpenResponsesResult$inboundSchema, } from \"./openresponsesresult.js\";\n/** @internal */\nexport const OpenResponsesInProgressEvent$inboundSchema = z.object({\n    response: OpenResponsesResult$inboundSchema,\n    sequence_number: z.int(),\n    type: z.literal(\"response.in_progress\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function openResponsesInProgressEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => OpenResponsesInProgressEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'OpenResponsesInProgressEvent' from JSON`);\n}\n//# sourceMappingURL=openresponsesinprogressevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 732188d6b8fa\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const OutputModalityEnum = {\n    Text: \"text\",\n    Image: \"image\",\n};\n/** @internal */\nexport const OutputModalityEnum$outboundSchema = openEnums.outboundSchema(OutputModalityEnum);\n//# sourceMappingURL=outputmodalityenum.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 59c2c424ea9b\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const PayloadTooLargeResponseErrorData$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n    metadata: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(),\n});\nexport function payloadTooLargeResponseErrorDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => PayloadTooLargeResponseErrorData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'PayloadTooLargeResponseErrorData' from JSON`);\n}\n//# sourceMappingURL=payloadtoolargeresponseerrordata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b38a7e0e1166\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const PaymentRequiredResponseErrorData$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n    metadata: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(),\n});\nexport function paymentRequiredResponseErrorDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => PaymentRequiredResponseErrorData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'PaymentRequiredResponseErrorData' from JSON`);\n}\n//# sourceMappingURL=paymentrequiredresponseerrordata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 65c45f7034d2\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const ProviderOptions$outboundSchema = z.object({\n    oneai: z.record(z.string(), z.nullable(z.any())).optional(),\n    ai21: z.record(z.string(), z.nullable(z.any())).optional(),\n    aionLabs: z.record(z.string(), z.nullable(z.any())).optional(),\n    akashml: z.record(z.string(), z.nullable(z.any())).optional(),\n    alibaba: z.record(z.string(), z.nullable(z.any())).optional(),\n    amazonBedrock: z.record(z.string(), z.nullable(z.any())).optional(),\n    amazonNova: z.record(z.string(), z.nullable(z.any())).optional(),\n    ambient: z.record(z.string(), z.nullable(z.any())).optional(),\n    anthropic: z.record(z.string(), z.nullable(z.any())).optional(),\n    anyscale: z.record(z.string(), z.nullable(z.any())).optional(),\n    arceeAi: z.record(z.string(), z.nullable(z.any())).optional(),\n    atlasCloud: z.record(z.string(), z.nullable(z.any())).optional(),\n    atoma: z.record(z.string(), z.nullable(z.any())).optional(),\n    avian: z.record(z.string(), z.nullable(z.any())).optional(),\n    azure: z.record(z.string(), z.nullable(z.any())).optional(),\n    baidu: z.record(z.string(), z.nullable(z.any())).optional(),\n    baseten: z.record(z.string(), z.nullable(z.any())).optional(),\n    blackForestLabs: z.record(z.string(), z.nullable(z.any())).optional(),\n    byteplus: z.record(z.string(), z.nullable(z.any())).optional(),\n    centml: z.record(z.string(), z.nullable(z.any())).optional(),\n    cerebras: z.record(z.string(), z.nullable(z.any())).optional(),\n    chutes: z.record(z.string(), z.nullable(z.any())).optional(),\n    cirrascale: z.record(z.string(), z.nullable(z.any())).optional(),\n    clarifai: z.record(z.string(), z.nullable(z.any())).optional(),\n    cloudflare: z.record(z.string(), z.nullable(z.any())).optional(),\n    cohere: z.record(z.string(), z.nullable(z.any())).optional(),\n    crofai: z.record(z.string(), z.nullable(z.any())).optional(),\n    crucible: z.record(z.string(), z.nullable(z.any())).optional(),\n    crusoe: z.record(z.string(), z.nullable(z.any())).optional(),\n    darkbloom: z.record(z.string(), z.nullable(z.any())).optional(),\n    decart: z.record(z.string(), z.nullable(z.any())).optional(),\n    deepinfra: z.record(z.string(), z.nullable(z.any())).optional(),\n    deepseek: z.record(z.string(), z.nullable(z.any())).optional(),\n    dekallm: z.record(z.string(), z.nullable(z.any())).optional(),\n    digitalocean: z.record(z.string(), z.nullable(z.any())).optional(),\n    enfer: z.record(z.string(), z.nullable(z.any())).optional(),\n    fakeProvider: z.record(z.string(), z.nullable(z.any())).optional(),\n    featherless: z.record(z.string(), z.nullable(z.any())).optional(),\n    fireworks: z.record(z.string(), z.nullable(z.any())).optional(),\n    friendli: z.record(z.string(), z.nullable(z.any())).optional(),\n    gmicloud: z.record(z.string(), z.nullable(z.any())).optional(),\n    googleAiStudio: z.record(z.string(), z.nullable(z.any())).optional(),\n    googleVertex: z.record(z.string(), z.nullable(z.any())).optional(),\n    gopomelo: z.record(z.string(), z.nullable(z.any())).optional(),\n    groq: z.record(z.string(), z.nullable(z.any())).optional(),\n    huggingface: z.record(z.string(), z.nullable(z.any())).optional(),\n    hyperbolic: z.record(z.string(), z.nullable(z.any())).optional(),\n    hyperbolicQuantized: z.record(z.string(), z.nullable(z.any())).optional(),\n    inception: z.record(z.string(), z.nullable(z.any())).optional(),\n    inceptron: z.record(z.string(), z.nullable(z.any())).optional(),\n    inferenceNet: z.record(z.string(), z.nullable(z.any())).optional(),\n    infermatic: z.record(z.string(), z.nullable(z.any())).optional(),\n    inflection: z.record(z.string(), z.nullable(z.any())).optional(),\n    inocloud: z.record(z.string(), z.nullable(z.any())).optional(),\n    ioNet: z.record(z.string(), z.nullable(z.any())).optional(),\n    ionstream: z.record(z.string(), z.nullable(z.any())).optional(),\n    klusterai: z.record(z.string(), z.nullable(z.any())).optional(),\n    lambda: z.record(z.string(), z.nullable(z.any())).optional(),\n    lepton: z.record(z.string(), z.nullable(z.any())).optional(),\n    liquid: z.record(z.string(), z.nullable(z.any())).optional(),\n    lynn: z.record(z.string(), z.nullable(z.any())).optional(),\n    lynnPrivate: z.record(z.string(), z.nullable(z.any())).optional(),\n    mancer: z.record(z.string(), z.nullable(z.any())).optional(),\n    mancerOld: z.record(z.string(), z.nullable(z.any())).optional(),\n    mara: z.record(z.string(), z.nullable(z.any())).optional(),\n    meta: z.record(z.string(), z.nullable(z.any())).optional(),\n    minimax: z.record(z.string(), z.nullable(z.any())).optional(),\n    mistral: z.record(z.string(), z.nullable(z.any())).optional(),\n    modal: z.record(z.string(), z.nullable(z.any())).optional(),\n    modelrun: z.record(z.string(), z.nullable(z.any())).optional(),\n    modular: z.record(z.string(), z.nullable(z.any())).optional(),\n    moonshotai: z.record(z.string(), z.nullable(z.any())).optional(),\n    morph: z.record(z.string(), z.nullable(z.any())).optional(),\n    ncompass: z.record(z.string(), z.nullable(z.any())).optional(),\n    nebius: z.record(z.string(), z.nullable(z.any())).optional(),\n    nexAgi: z.record(z.string(), z.nullable(z.any())).optional(),\n    nextbit: z.record(z.string(), z.nullable(z.any())).optional(),\n    nineteen: z.record(z.string(), z.nullable(z.any())).optional(),\n    novita: z.record(z.string(), z.nullable(z.any())).optional(),\n    nvidia: z.record(z.string(), z.nullable(z.any())).optional(),\n    octoai: z.record(z.string(), z.nullable(z.any())).optional(),\n    openInference: z.record(z.string(), z.nullable(z.any())).optional(),\n    openai: z.record(z.string(), z.nullable(z.any())).optional(),\n    parasail: z.record(z.string(), z.nullable(z.any())).optional(),\n    perceptron: z.record(z.string(), z.nullable(z.any())).optional(),\n    perplexity: z.record(z.string(), z.nullable(z.any())).optional(),\n    phala: z.record(z.string(), z.nullable(z.any())).optional(),\n    poolside: z.record(z.string(), z.nullable(z.any())).optional(),\n    recraft: z.record(z.string(), z.nullable(z.any())).optional(),\n    recursal: z.record(z.string(), z.nullable(z.any())).optional(),\n    reflection: z.record(z.string(), z.nullable(z.any())).optional(),\n    reka: z.record(z.string(), z.nullable(z.any())).optional(),\n    relace: z.record(z.string(), z.nullable(z.any())).optional(),\n    replicate: z.record(z.string(), z.nullable(z.any())).optional(),\n    sambanova: z.record(z.string(), z.nullable(z.any())).optional(),\n    sambanovaCloaked: z.record(z.string(), z.nullable(z.any())).optional(),\n    seed: z.record(z.string(), z.nullable(z.any())).optional(),\n    sfCompute: z.record(z.string(), z.nullable(z.any())).optional(),\n    siliconflow: z.record(z.string(), z.nullable(z.any())).optional(),\n    sourceful: z.record(z.string(), z.nullable(z.any())).optional(),\n    stealth: z.record(z.string(), z.nullable(z.any())).optional(),\n    stepfun: z.record(z.string(), z.nullable(z.any())).optional(),\n    streamlake: z.record(z.string(), z.nullable(z.any())).optional(),\n    switchpoint: z.record(z.string(), z.nullable(z.any())).optional(),\n    targon: z.record(z.string(), z.nullable(z.any())).optional(),\n    together: z.record(z.string(), z.nullable(z.any())).optional(),\n    togetherLite: z.record(z.string(), z.nullable(z.any())).optional(),\n    ubicloud: z.record(z.string(), z.nullable(z.any())).optional(),\n    upstage: z.record(z.string(), z.nullable(z.any())).optional(),\n    venice: z.record(z.string(), z.nullable(z.any())).optional(),\n    wafer: z.record(z.string(), z.nullable(z.any())).optional(),\n    wandb: z.record(z.string(), z.nullable(z.any())).optional(),\n    xai: z.record(z.string(), z.nullable(z.any())).optional(),\n    xiaomi: z.record(z.string(), z.nullable(z.any())).optional(),\n    zAi: z.record(z.string(), z.nullable(z.any())).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        oneai: \"01ai\",\n        aionLabs: \"aion-labs\",\n        amazonBedrock: \"amazon-bedrock\",\n        amazonNova: \"amazon-nova\",\n        arceeAi: \"arcee-ai\",\n        atlasCloud: \"atlas-cloud\",\n        blackForestLabs: \"black-forest-labs\",\n        fakeProvider: \"fake-provider\",\n        googleAiStudio: \"google-ai-studio\",\n        googleVertex: \"google-vertex\",\n        hyperbolicQuantized: \"hyperbolic-quantized\",\n        inferenceNet: \"inference-net\",\n        ioNet: \"io-net\",\n        lynnPrivate: \"lynn-private\",\n        mancerOld: \"mancer-old\",\n        nexAgi: \"nex-agi\",\n        openInference: \"open-inference\",\n        sambanovaCloaked: \"sambanova-cloaked\",\n        sfCompute: \"sf-compute\",\n        togetherLite: \"together-lite\",\n        zAi: \"z-ai\",\n    });\n});\nexport function providerOptionsToJSON(providerOptions) {\n    return JSON.stringify(ProviderOptions$outboundSchema.parse(providerOptions));\n}\n//# sourceMappingURL=provideroptions.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 379f1256314f\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ProviderOverloadedResponseErrorData$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n    metadata: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(),\n});\nexport function providerOverloadedResponseErrorDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ProviderOverloadedResponseErrorData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ProviderOverloadedResponseErrorData' from JSON`);\n}\n//# sourceMappingURL=provideroverloadedresponseerrordata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6f17738c68f5\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const RankingsDailyItem$inboundSchema = z.object({\n    date: z.string(),\n    model_permaslug: z.string(),\n    total_tokens: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"model_permaslug\": \"modelPermaslug\",\n        \"total_tokens\": \"totalTokens\",\n    });\n});\nexport function rankingsDailyItemFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => RankingsDailyItem$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'RankingsDailyItem' from JSON`);\n}\n//# sourceMappingURL=rankingsdailyitem.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d4c3689c5ec7\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { RankingsDailyItem$inboundSchema, } from \"./rankingsdailyitem.js\";\nimport { RankingsDailyMeta$inboundSchema, } from \"./rankingsdailymeta.js\";\n/** @internal */\nexport const RankingsDailyResponse$inboundSchema = z.object({\n    data: z.array(RankingsDailyItem$inboundSchema),\n    meta: RankingsDailyMeta$inboundSchema,\n});\nexport function rankingsDailyResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => RankingsDailyResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'RankingsDailyResponse' from JSON`);\n}\n//# sourceMappingURL=rankingsdailyresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 809170859136\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { ReasoningEffort$outboundSchema, } from \"./reasoningeffort.js\";\nimport { ReasoningSummaryVerbosity$outboundSchema, } from \"./reasoningsummaryverbosity.js\";\n/** @internal */\nexport const ReasoningConfig$outboundSchema = z.object({\n    effort: z.nullable(ReasoningEffort$outboundSchema).optional(),\n    summary: z.nullable(ReasoningSummaryVerbosity$outboundSchema).optional(),\n    enabled: z.nullable(z.boolean()).optional(),\n    maxTokens: z.nullable(z.int()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        maxTokens: \"max_tokens\",\n    });\n});\nexport function reasoningConfigToJSON(reasoningConfig) {\n    return JSON.stringify(ReasoningConfig$outboundSchema.parse(reasoningConfig));\n}\n//# sourceMappingURL=reasoningconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0e129c34b701\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ReasoningDeltaEvent$inboundSchema = z.object({\n    content_index: z.int(),\n    delta: z.string(),\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.reasoning_text.delta\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"content_index\": \"contentIndex\",\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function reasoningDeltaEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ReasoningDeltaEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ReasoningDeltaEvent' from JSON`);\n}\n//# sourceMappingURL=reasoningdeltaevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3af93f83e103\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ReasoningDoneEvent$inboundSchema = z.object({\n    content_index: z.int(),\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    text: z.string(),\n    type: z.literal(\"response.reasoning_text.done\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"content_index\": \"contentIndex\",\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function reasoningDoneEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ReasoningDoneEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ReasoningDoneEvent' from JSON`);\n}\n//# sourceMappingURL=reasoningdoneevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: aca3bffec6c2\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ReasoningSummaryText$inboundSchema, } from \"./reasoningsummarytext.js\";\n/** @internal */\nexport const ReasoningSummaryPartAddedEvent$inboundSchema = z.object({\n    item_id: z.string(),\n    output_index: z.int(),\n    part: ReasoningSummaryText$inboundSchema,\n    sequence_number: z.int(),\n    summary_index: z.int(),\n    type: z.literal(\"response.reasoning_summary_part.added\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n        \"summary_index\": \"summaryIndex\",\n    });\n});\nexport function reasoningSummaryPartAddedEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ReasoningSummaryPartAddedEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ReasoningSummaryPartAddedEvent' from JSON`);\n}\n//# sourceMappingURL=reasoningsummarypartaddedevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5917fb728157\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ReasoningSummaryText$inboundSchema, } from \"./reasoningsummarytext.js\";\n/** @internal */\nexport const ReasoningSummaryPartDoneEvent$inboundSchema = z.object({\n    item_id: z.string(),\n    output_index: z.int(),\n    part: ReasoningSummaryText$inboundSchema,\n    sequence_number: z.int(),\n    summary_index: z.int(),\n    type: z.literal(\"response.reasoning_summary_part.done\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n        \"summary_index\": \"summaryIndex\",\n    });\n});\nexport function reasoningSummaryPartDoneEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ReasoningSummaryPartDoneEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ReasoningSummaryPartDoneEvent' from JSON`);\n}\n//# sourceMappingURL=reasoningsummarypartdoneevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 888dc7b3074b\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ReasoningSummaryTextDeltaEvent$inboundSchema = z.object({\n    delta: z.string(),\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    summary_index: z.int(),\n    type: z.literal(\"response.reasoning_summary_text.delta\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n        \"summary_index\": \"summaryIndex\",\n    });\n});\nexport function reasoningSummaryTextDeltaEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ReasoningSummaryTextDeltaEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ReasoningSummaryTextDeltaEvent' from JSON`);\n}\n//# sourceMappingURL=reasoningsummarytextdeltaevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4945c757d284\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ReasoningSummaryTextDoneEvent$inboundSchema = z.object({\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    summary_index: z.int(),\n    text: z.string(),\n    type: z.literal(\"response.reasoning_summary_text.done\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n        \"summary_index\": \"summaryIndex\",\n    });\n});\nexport function reasoningSummaryTextDoneEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ReasoningSummaryTextDoneEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ReasoningSummaryTextDoneEvent' from JSON`);\n}\n//# sourceMappingURL=reasoningsummarytextdoneevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 31c52296d4c7\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const RefusalDeltaEvent$inboundSchema = z.object({\n    content_index: z.int(),\n    delta: z.string(),\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.refusal.delta\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"content_index\": \"contentIndex\",\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function refusalDeltaEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => RefusalDeltaEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'RefusalDeltaEvent' from JSON`);\n}\n//# sourceMappingURL=refusaldeltaevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: cd0c3a7b56ac\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const RefusalDoneEvent$inboundSchema = z.object({\n    content_index: z.int(),\n    item_id: z.string(),\n    output_index: z.int(),\n    refusal: z.string(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.refusal.done\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"content_index\": \"contentIndex\",\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function refusalDoneEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => RefusalDoneEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'RefusalDoneEvent' from JSON`);\n}\n//# sourceMappingURL=refusaldoneevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a08eeff8786c\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const RequestTimeoutResponseErrorData$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n    metadata: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(),\n});\nexport function requestTimeoutResponseErrorDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => RequestTimeoutResponseErrorData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'RequestTimeoutResponseErrorData' from JSON`);\n}\n//# sourceMappingURL=requesttimeoutresponseerrordata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 49a048777535\n */\nimport * as openEnums from \"../types/enums.js\";\nexport const ResponseIncludesEnum = {\n    FileSearchCallResults: \"file_search_call.results\",\n    MessageInputImageImageUrl: \"message.input_image.image_url\",\n    ComputerCallOutputOutputImageUrl: \"computer_call_output.output.image_url\",\n    ReasoningEncryptedContent: \"reasoning.encrypted_content\",\n    CodeInterpreterCallOutputs: \"code_interpreter_call.outputs\",\n};\n/** @internal */\nexport const ResponseIncludesEnum$outboundSchema = openEnums.outboundSchema(ResponseIncludesEnum);\n//# sourceMappingURL=responseincludesenum.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 65e8f719b40b\n */\nimport * as openEnums from \"../types/enums.js\";\n/**\n * Which shell engine to use. \"openrouter\" runs commands server-side in the OpenRouter sandbox. \"auto\" (default) keeps the provider's native hosted shell when available (OpenAI); on other providers the call is routed to the OpenRouter sandbox.\n */\nexport const ShellServerToolEngine = {\n    Auto: \"auto\",\n    Openrouter: \"openrouter\",\n};\n/** @internal */\nexport const ShellServerToolEngine$outboundSchema = openEnums.outboundSchema(ShellServerToolEngine);\n//# sourceMappingURL=shellservertoolengine.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b1655b283806\n */\nimport * as z from \"zod/v4\";\nimport { ContainerAutoEnvironment$outboundSchema, } from \"./containerautoenvironment.js\";\nimport { ContainerReferenceEnvironment$outboundSchema, } from \"./containerreferenceenvironment.js\";\n/** @internal */\nexport const ShellServerToolEnvironment$outboundSchema = z.union([\n    ContainerAutoEnvironment$outboundSchema,\n    ContainerReferenceEnvironment$outboundSchema,\n]);\nexport function shellServerToolEnvironmentToJSON(shellServerToolEnvironment) {\n    return JSON.stringify(ShellServerToolEnvironment$outboundSchema.parse(shellServerToolEnvironment));\n}\n//# sourceMappingURL=shellservertoolenvironment.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: c6c92c223699\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { ShellServerToolEngine$outboundSchema, } from \"./shellservertoolengine.js\";\nimport { ShellServerToolEnvironment$outboundSchema, } from \"./shellservertoolenvironment.js\";\n/** @internal */\nexport const ShellServerToolConfig$outboundSchema = z.object({\n    engine: ShellServerToolEngine$outboundSchema.optional(),\n    environment: ShellServerToolEnvironment$outboundSchema.optional(),\n    sleepAfterSeconds: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        sleepAfterSeconds: \"sleep_after_seconds\",\n    });\n});\nexport function shellServerToolConfigToJSON(shellServerToolConfig) {\n    return JSON.stringify(ShellServerToolConfig$outboundSchema.parse(shellServerToolConfig));\n}\n//# sourceMappingURL=shellservertoolconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6619f9fcf764\n */\nimport * as z from \"zod/v4\";\nimport { ShellServerToolConfig$outboundSchema, } from \"./shellservertoolconfig.js\";\n/** @internal */\nexport const ShellServerToolOpenRouter$outboundSchema = z.object({\n    parameters: ShellServerToolConfig$outboundSchema.optional(),\n    type: z.literal(\"openrouter:shell\"),\n});\nexport function shellServerToolOpenRouterToJSON(shellServerToolOpenRouter) {\n    return JSON.stringify(ShellServerToolOpenRouter$outboundSchema.parse(shellServerToolOpenRouter));\n}\n//# sourceMappingURL=shellservertoolopenrouter.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 900e829383d7\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { SearchQualityLevel$outboundSchema, } from \"./searchqualitylevel.js\";\nimport { WebSearchEngineEnum$outboundSchema, } from \"./websearchengineenum.js\";\nimport { WebSearchUserLocationServerTool$outboundSchema, } from \"./websearchuserlocationservertool.js\";\n/** @internal */\nexport const WebSearchServerToolConfig$outboundSchema = z.object({\n    allowedDomains: z.array(z.string()).optional(),\n    engine: WebSearchEngineEnum$outboundSchema.optional(),\n    excludedDomains: z.array(z.string()).optional(),\n    maxCharacters: z.int().optional(),\n    maxResults: z.int().optional(),\n    maxTotalResults: z.int().optional(),\n    searchContextSize: SearchQualityLevel$outboundSchema.optional(),\n    userLocation: WebSearchUserLocationServerTool$outboundSchema.optional(),\n}).transform((v) => {\n    return remap$(v, {\n        allowedDomains: \"allowed_domains\",\n        excludedDomains: \"excluded_domains\",\n        maxCharacters: \"max_characters\",\n        maxResults: \"max_results\",\n        maxTotalResults: \"max_total_results\",\n        searchContextSize: \"search_context_size\",\n        userLocation: \"user_location\",\n    });\n});\nexport function webSearchServerToolConfigToJSON(webSearchServerToolConfig) {\n    return JSON.stringify(WebSearchServerToolConfig$outboundSchema.parse(webSearchServerToolConfig));\n}\n//# sourceMappingURL=websearchservertoolconfig.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 99dffefc1c11\n */\nimport * as z from \"zod/v4\";\nimport { WebSearchServerToolConfig$outboundSchema, } from \"./websearchservertoolconfig.js\";\n/** @internal */\nexport const WebSearchServerToolOpenRouter$outboundSchema = z.object({\n    parameters: WebSearchServerToolConfig$outboundSchema.optional(),\n    type: z.literal(\"openrouter:web_search\"),\n});\nexport function webSearchServerToolOpenRouterToJSON(webSearchServerToolOpenRouter) {\n    return JSON.stringify(WebSearchServerToolOpenRouter$outboundSchema.parse(webSearchServerToolOpenRouter));\n}\n//# sourceMappingURL=websearchservertoolopenrouter.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 39799702f982\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { AdvisorServerToolOpenRouter$outboundSchema, } from \"./advisorservertoolopenrouter.js\";\nimport { AnthropicCacheControlDirective$outboundSchema, } from \"./anthropiccachecontroldirective.js\";\nimport { ApplyPatchServerTool$outboundSchema, } from \"./applypatchservertool.js\";\nimport { ApplyPatchServerToolOpenRouter$outboundSchema, } from \"./applypatchservertoolopenrouter.js\";\nimport { AutoRouterPlugin$outboundSchema, } from \"./autorouterplugin.js\";\nimport { BashServerTool$outboundSchema, } from \"./bashservertool.js\";\nimport { ChatSearchModelsServerTool$outboundSchema, } from \"./chatsearchmodelsservertool.js\";\nimport { CodeInterpreterServerTool$outboundSchema, } from \"./codeinterpreterservertool.js\";\nimport { CodexLocalShellTool$outboundSchema, } from \"./codexlocalshelltool.js\";\nimport { ComputerUseServerTool$outboundSchema, } from \"./computeruseservertool.js\";\nimport { ContextCompressionPlugin$outboundSchema, } from \"./contextcompressionplugin.js\";\nimport { CustomTool$outboundSchema, } from \"./customtool.js\";\nimport { DatetimeServerTool$outboundSchema, } from \"./datetimeservertool.js\";\nimport { FileParserPlugin$outboundSchema, } from \"./fileparserplugin.js\";\nimport { FileSearchServerTool$outboundSchema, } from \"./filesearchservertool.js\";\nimport { FusionPlugin$outboundSchema, } from \"./fusionplugin.js\";\nimport { FusionServerToolOpenRouter$outboundSchema, } from \"./fusionservertoolopenrouter.js\";\nimport { ImageConfig$outboundSchema, } from \"./imageconfig.js\";\nimport { ImageGenerationServerTool$outboundSchema, } from \"./imagegenerationservertool.js\";\nimport { ImageGenerationServerToolOpenRouter$outboundSchema, } from \"./imagegenerationservertoolopenrouter.js\";\nimport { InputsUnion$outboundSchema, } from \"./inputsunion.js\";\nimport { LegacyWebSearchServerTool$outboundSchema, } from \"./legacywebsearchservertool.js\";\nimport { McpServerTool$outboundSchema, } from \"./mcpservertool.js\";\nimport { ModerationPlugin$outboundSchema, } from \"./moderationplugin.js\";\nimport { OpenAIResponsesToolChoiceUnion$outboundSchema, } from \"./openairesponsestoolchoiceunion.js\";\nimport { OpenAIResponsesTruncation$outboundSchema, } from \"./openairesponsestruncation.js\";\nimport { OutputModalityEnum$outboundSchema, } from \"./outputmodalityenum.js\";\nimport { ParetoRouterPlugin$outboundSchema, } from \"./paretorouterplugin.js\";\nimport { Preview20250311WebSearchServerTool$outboundSchema, } from \"./preview20250311websearchservertool.js\";\nimport { PreviewWebSearchServerTool$outboundSchema, } from \"./previewwebsearchservertool.js\";\nimport { ProviderPreferences$outboundSchema, } from \"./providerpreferences.js\";\nimport { ReasoningConfig$outboundSchema, } from \"./reasoningconfig.js\";\nimport { ResponseHealingPlugin$outboundSchema, } from \"./responsehealingplugin.js\";\nimport { ResponseIncludesEnum$outboundSchema, } from \"./responseincludesenum.js\";\nimport { ShellServerTool$outboundSchema, } from \"./shellservertool.js\";\nimport { ShellServerToolOpenRouter$outboundSchema, } from \"./shellservertoolopenrouter.js\";\nimport { StopServerToolsWhenCondition$outboundSchema, } from \"./stopservertoolswhencondition.js\";\nimport { StoredPromptTemplate$outboundSchema, } from \"./storedprompttemplate.js\";\nimport { SubagentServerToolOpenRouter$outboundSchema, } from \"./subagentservertoolopenrouter.js\";\nimport { TextExtendedConfig$outboundSchema, } from \"./textextendedconfig.js\";\nimport { TraceConfig$outboundSchema, } from \"./traceconfig.js\";\nimport { WebFetchPlugin$outboundSchema, } from \"./webfetchplugin.js\";\nimport { WebFetchServerTool$outboundSchema, } from \"./webfetchservertool.js\";\nimport { WebSearchPlugin$outboundSchema, } from \"./websearchplugin.js\";\nimport { WebSearchServerTool$outboundSchema, } from \"./websearchservertool.js\";\nimport { WebSearchServerToolOpenRouter$outboundSchema, } from \"./websearchservertoolopenrouter.js\";\nexport const ResponsesRequestServiceTier = {\n    Auto: \"auto\",\n    Default: \"default\",\n    Flex: \"flex\",\n    Priority: \"priority\",\n    Scale: \"scale\",\n};\n/** @internal */\nexport const ResponsesRequestPlugin$outboundSchema = z.union([\n    AutoRouterPlugin$outboundSchema,\n    ContextCompressionPlugin$outboundSchema,\n    FileParserPlugin$outboundSchema,\n    FusionPlugin$outboundSchema,\n    ModerationPlugin$outboundSchema,\n    ParetoRouterPlugin$outboundSchema,\n    ResponseHealingPlugin$outboundSchema,\n    WebSearchPlugin$outboundSchema,\n    WebFetchPlugin$outboundSchema,\n]);\nexport function responsesRequestPluginToJSON(responsesRequestPlugin) {\n    return JSON.stringify(ResponsesRequestPlugin$outboundSchema.parse(responsesRequestPlugin));\n}\n/** @internal */\nexport const ResponsesRequestServiceTier$outboundSchema = openEnums.outboundSchema(ResponsesRequestServiceTier);\n/** @internal */\nexport const ResponsesRequestToolFunction$outboundSchema = z.object({\n    description: z.nullable(z.string()).optional(),\n    name: z.string(),\n    parameters: z.nullable(z.record(z.string(), z.nullable(z.any()))),\n    strict: z.nullable(z.boolean()).optional(),\n    type: z.literal(\"function\"),\n});\nexport function responsesRequestToolFunctionToJSON(responsesRequestToolFunction) {\n    return JSON.stringify(ResponsesRequestToolFunction$outboundSchema.parse(responsesRequestToolFunction));\n}\n/** @internal */\nexport const ResponsesRequestToolUnion$outboundSchema = z.union([\n    z.lazy(() => ResponsesRequestToolFunction$outboundSchema),\n    PreviewWebSearchServerTool$outboundSchema,\n    Preview20250311WebSearchServerTool$outboundSchema,\n    LegacyWebSearchServerTool$outboundSchema,\n    WebSearchServerTool$outboundSchema,\n    FileSearchServerTool$outboundSchema,\n    ComputerUseServerTool$outboundSchema,\n    CodeInterpreterServerTool$outboundSchema,\n    McpServerTool$outboundSchema,\n    ImageGenerationServerTool$outboundSchema,\n    CodexLocalShellTool$outboundSchema,\n    ShellServerTool$outboundSchema,\n    ApplyPatchServerTool$outboundSchema,\n    CustomTool$outboundSchema,\n    AdvisorServerToolOpenRouter$outboundSchema.and(z.object({ type: z.literal(\"openrouter:advisor\") })),\n    SubagentServerToolOpenRouter$outboundSchema.and(z.object({ type: z.literal(\"openrouter:subagent\") })),\n    DatetimeServerTool$outboundSchema.and(z.object({ type: z.literal(\"openrouter:datetime\") })),\n    FusionServerToolOpenRouter$outboundSchema,\n    ImageGenerationServerToolOpenRouter$outboundSchema.and(z.object({ type: z.literal(\"openrouter:image_generation\") })),\n    ChatSearchModelsServerTool$outboundSchema.and(z.object({ type: z.literal(\"openrouter:experimental__search_models\") })),\n    WebFetchServerTool$outboundSchema.and(z.object({ type: z.literal(\"openrouter:web_fetch\") })),\n    WebSearchServerToolOpenRouter$outboundSchema,\n    ApplyPatchServerToolOpenRouter$outboundSchema,\n    BashServerTool$outboundSchema.and(z.object({ type: z.literal(\"openrouter:bash\") })),\n    ShellServerToolOpenRouter$outboundSchema,\n]);\nexport function responsesRequestToolUnionToJSON(responsesRequestToolUnion) {\n    return JSON.stringify(ResponsesRequestToolUnion$outboundSchema.parse(responsesRequestToolUnion));\n}\n/** @internal */\nexport const ResponsesRequest$outboundSchema = z.object({\n    background: z.nullable(z.boolean()).optional(),\n    cacheControl: AnthropicCacheControlDirective$outboundSchema.optional(),\n    frequencyPenalty: z.nullable(z.number()).optional(),\n    imageConfig: z.record(z.string(), ImageConfig$outboundSchema).optional(),\n    include: z.nullable(z.array(ResponseIncludesEnum$outboundSchema)).optional(),\n    input: InputsUnion$outboundSchema.optional(),\n    instructions: z.nullable(z.string()).optional(),\n    maxOutputTokens: z.nullable(z.int()).optional(),\n    maxToolCalls: z.nullable(z.int()).optional(),\n    metadata: z.nullable(z.record(z.string(), z.string())).optional(),\n    modalities: z.array(OutputModalityEnum$outboundSchema).optional(),\n    model: z.string().optional(),\n    models: z.array(z.string()).optional(),\n    parallelToolCalls: z.nullable(z.boolean()).optional(),\n    plugins: z.array(z.union([\n        AutoRouterPlugin$outboundSchema,\n        ContextCompressionPlugin$outboundSchema,\n        FileParserPlugin$outboundSchema,\n        FusionPlugin$outboundSchema,\n        ModerationPlugin$outboundSchema,\n        ParetoRouterPlugin$outboundSchema,\n        ResponseHealingPlugin$outboundSchema,\n        WebSearchPlugin$outboundSchema,\n        WebFetchPlugin$outboundSchema,\n    ])).optional(),\n    presencePenalty: z.nullable(z.number()).optional(),\n    previousResponseId: z.nullable(z.string()).optional(),\n    prompt: z.nullable(StoredPromptTemplate$outboundSchema).optional(),\n    promptCacheKey: z.nullable(z.string()).optional(),\n    provider: z.nullable(ProviderPreferences$outboundSchema).optional(),\n    reasoning: z.nullable(ReasoningConfig$outboundSchema).optional(),\n    safetyIdentifier: z.nullable(z.string()).optional(),\n    serviceTier: z.nullable(ResponsesRequestServiceTier$outboundSchema.default(\"auto\")),\n    sessionId: z.string().optional(),\n    stopServerToolsWhen: z.array(StopServerToolsWhenCondition$outboundSchema)\n        .optional(),\n    store: z.literal(false).default(false),\n    stream: z.boolean().default(false),\n    temperature: z.nullable(z.number()).optional(),\n    text: TextExtendedConfig$outboundSchema.optional(),\n    toolChoice: OpenAIResponsesToolChoiceUnion$outboundSchema.optional(),\n    tools: z.array(z.union([\n        z.lazy(() => ResponsesRequestToolFunction$outboundSchema),\n        PreviewWebSearchServerTool$outboundSchema,\n        Preview20250311WebSearchServerTool$outboundSchema,\n        LegacyWebSearchServerTool$outboundSchema,\n        WebSearchServerTool$outboundSchema,\n        FileSearchServerTool$outboundSchema,\n        ComputerUseServerTool$outboundSchema,\n        CodeInterpreterServerTool$outboundSchema,\n        McpServerTool$outboundSchema,\n        ImageGenerationServerTool$outboundSchema,\n        CodexLocalShellTool$outboundSchema,\n        ShellServerTool$outboundSchema,\n        ApplyPatchServerTool$outboundSchema,\n        CustomTool$outboundSchema,\n        AdvisorServerToolOpenRouter$outboundSchema.and(z.object({ type: z.literal(\"openrouter:advisor\") })),\n        SubagentServerToolOpenRouter$outboundSchema.and(z.object({ type: z.literal(\"openrouter:subagent\") })),\n        DatetimeServerTool$outboundSchema.and(z.object({ type: z.literal(\"openrouter:datetime\") })),\n        FusionServerToolOpenRouter$outboundSchema,\n        ImageGenerationServerToolOpenRouter$outboundSchema.and(z.object({ type: z.literal(\"openrouter:image_generation\") })),\n        ChatSearchModelsServerTool$outboundSchema.and(z.object({ type: z.literal(\"openrouter:experimental__search_models\") })),\n        WebFetchServerTool$outboundSchema.and(z.object({ type: z.literal(\"openrouter:web_fetch\") })),\n        WebSearchServerToolOpenRouter$outboundSchema,\n        ApplyPatchServerToolOpenRouter$outboundSchema,\n        BashServerTool$outboundSchema.and(z.object({ type: z.literal(\"openrouter:bash\") })),\n        ShellServerToolOpenRouter$outboundSchema,\n    ])).optional(),\n    topK: z.int().optional(),\n    topLogprobs: z.nullable(z.int()).optional(),\n    topP: z.nullable(z.number()).optional(),\n    trace: TraceConfig$outboundSchema.optional(),\n    truncation: z.nullable(OpenAIResponsesTruncation$outboundSchema).optional(),\n    user: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        cacheControl: \"cache_control\",\n        frequencyPenalty: \"frequency_penalty\",\n        imageConfig: \"image_config\",\n        maxOutputTokens: \"max_output_tokens\",\n        maxToolCalls: \"max_tool_calls\",\n        parallelToolCalls: \"parallel_tool_calls\",\n        presencePenalty: \"presence_penalty\",\n        previousResponseId: \"previous_response_id\",\n        promptCacheKey: \"prompt_cache_key\",\n        safetyIdentifier: \"safety_identifier\",\n        serviceTier: \"service_tier\",\n        sessionId: \"session_id\",\n        stopServerToolsWhen: \"stop_server_tools_when\",\n        toolChoice: \"tool_choice\",\n        topK: \"top_k\",\n        topLogprobs: \"top_logprobs\",\n        topP: \"top_p\",\n    });\n});\nexport function responsesRequestToJSON(responsesRequest) {\n    return JSON.stringify(ResponsesRequest$outboundSchema.parse(responsesRequest));\n}\n//# sourceMappingURL=responsesrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f7fe07ad1c47\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { OpenResponsesResult$inboundSchema, } from \"./openresponsesresult.js\";\n/** @internal */\nexport const StreamEventsResponseCompleted$inboundSchema = z.object({\n    response: OpenResponsesResult$inboundSchema,\n    sequence_number: z.int(),\n    type: z.literal(\"response.completed\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function streamEventsResponseCompletedFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => StreamEventsResponseCompleted$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'StreamEventsResponseCompleted' from JSON`);\n}\n//# sourceMappingURL=streameventsresponsecompleted.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 63748aa9f88e\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { OpenResponsesResult$inboundSchema, } from \"./openresponsesresult.js\";\n/** @internal */\nexport const StreamEventsResponseFailed$inboundSchema = z.object({\n    response: OpenResponsesResult$inboundSchema,\n    sequence_number: z.int(),\n    type: z.literal(\"response.failed\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function streamEventsResponseFailedFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => StreamEventsResponseFailed$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'StreamEventsResponseFailed' from JSON`);\n}\n//# sourceMappingURL=streameventsresponsefailed.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 56f3a5c4a544\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { OpenResponsesResult$inboundSchema, } from \"./openresponsesresult.js\";\n/** @internal */\nexport const StreamEventsResponseIncomplete$inboundSchema = z.object({\n    response: OpenResponsesResult$inboundSchema,\n    sequence_number: z.int(),\n    type: z.literal(\"response.incomplete\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function streamEventsResponseIncompleteFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => StreamEventsResponseIncomplete$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'StreamEventsResponseIncomplete' from JSON`);\n}\n//# sourceMappingURL=streameventsresponseincomplete.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 16cdc9efe2b8\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { OutputItems$inboundSchema } from \"./outputitems.js\";\n/** @internal */\nexport const StreamEventsResponseOutputItemAdded$inboundSchema = z.object({\n    item: OutputItems$inboundSchema,\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.output_item.added\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function streamEventsResponseOutputItemAddedFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => StreamEventsResponseOutputItemAdded$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'StreamEventsResponseOutputItemAdded' from JSON`);\n}\n//# sourceMappingURL=streameventsresponseoutputitemadded.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: cef4030a60c2\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { OutputItems$inboundSchema } from \"./outputitems.js\";\n/** @internal */\nexport const StreamEventsResponseOutputItemDone$inboundSchema = z.object({\n    item: OutputItems$inboundSchema,\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.output_item.done\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function streamEventsResponseOutputItemDoneFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => StreamEventsResponseOutputItemDone$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'StreamEventsResponseOutputItemDone' from JSON`);\n}\n//# sourceMappingURL=streameventsresponseoutputitemdone.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3b88c304514b\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const StreamLogprobTopLogprob$inboundSchema = z.object({\n    bytes: z.array(z.int()).optional(),\n    logprob: z.number().optional(),\n    token: z.string().optional(),\n});\nexport function streamLogprobTopLogprobFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => StreamLogprobTopLogprob$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'StreamLogprobTopLogprob' from JSON`);\n}\n//# sourceMappingURL=streamlogprobtoplogprob.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3d401204f1ef\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { StreamLogprobTopLogprob$inboundSchema, } from \"./streamlogprobtoplogprob.js\";\n/** @internal */\nexport const StreamLogprob$inboundSchema = z\n    .object({\n    bytes: z.array(z.int()).optional(),\n    logprob: z.number(),\n    token: z.string(),\n    top_logprobs: z.array(StreamLogprobTopLogprob$inboundSchema).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"top_logprobs\": \"topLogprobs\",\n    });\n});\nexport function streamLogprobFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => StreamLogprob$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'StreamLogprob' from JSON`);\n}\n//# sourceMappingURL=streamlogprob.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 920ea48e0f90\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { StreamLogprob$inboundSchema } from \"./streamlogprob.js\";\n/** @internal */\nexport const TextDeltaEvent$inboundSchema = z.object({\n    content_index: z.int(),\n    delta: z.string(),\n    item_id: z.string(),\n    logprobs: z.array(StreamLogprob$inboundSchema),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.output_text.delta\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"content_index\": \"contentIndex\",\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function textDeltaEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => TextDeltaEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'TextDeltaEvent' from JSON`);\n}\n//# sourceMappingURL=textdeltaevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 006e3645c287\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { StreamLogprob$inboundSchema } from \"./streamlogprob.js\";\n/** @internal */\nexport const TextDoneEvent$inboundSchema = z\n    .object({\n    content_index: z.int(),\n    item_id: z.string(),\n    logprobs: z.array(StreamLogprob$inboundSchema),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    text: z.string(),\n    type: z.literal(\"response.output_text.done\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"content_index\": \"contentIndex\",\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function textDoneEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => TextDoneEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'TextDoneEvent' from JSON`);\n}\n//# sourceMappingURL=textdoneevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5137f6f83524\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const WebSearchCallCompletedEvent$inboundSchema = z.object({\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.web_search_call.completed\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function webSearchCallCompletedEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => WebSearchCallCompletedEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'WebSearchCallCompletedEvent' from JSON`);\n}\n//# sourceMappingURL=websearchcallcompletedevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: faa6555bfcd9\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const WebSearchCallInProgressEvent$inboundSchema = z.object({\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.web_search_call.in_progress\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function webSearchCallInProgressEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => WebSearchCallInProgressEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'WebSearchCallInProgressEvent' from JSON`);\n}\n//# sourceMappingURL=websearchcallinprogressevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 337a384e39d8\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const WebSearchCallSearchingEvent$inboundSchema = z.object({\n    item_id: z.string(),\n    output_index: z.int(),\n    sequence_number: z.int(),\n    type: z.literal(\"response.web_search_call.searching\"),\n}).transform((v) => {\n    return remap$(v, {\n        \"item_id\": \"itemId\",\n        \"output_index\": \"outputIndex\",\n        \"sequence_number\": \"sequenceNumber\",\n    });\n});\nexport function webSearchCallSearchingEventFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => WebSearchCallSearchingEvent$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'WebSearchCallSearchingEvent' from JSON`);\n}\n//# sourceMappingURL=websearchcallsearchingevent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4aa1487f961f\n */\nimport { safeParse } from \"../lib/schemas.js\";\nimport { discriminatedUnion } from \"../types/discriminatedUnion.js\";\nimport { AnnotationAddedEvent$inboundSchema, } from \"./annotationaddedevent.js\";\nimport { ApplyPatchCallOperationDiffDeltaEvent$inboundSchema, } from \"./applypatchcalloperationdiffdeltaevent.js\";\nimport { ApplyPatchCallOperationDiffDoneEvent$inboundSchema, } from \"./applypatchcalloperationdiffdoneevent.js\";\nimport { ContentPartAddedEvent$inboundSchema, } from \"./contentpartaddedevent.js\";\nimport { ContentPartDoneEvent$inboundSchema, } from \"./contentpartdoneevent.js\";\nimport { CustomToolCallInputDeltaEvent$inboundSchema, } from \"./customtoolcallinputdeltaevent.js\";\nimport { CustomToolCallInputDoneEvent$inboundSchema, } from \"./customtoolcallinputdoneevent.js\";\nimport { ErrorEvent$inboundSchema } from \"./errorevent.js\";\nimport { FunctionCallArgsDeltaEvent$inboundSchema, } from \"./functioncallargsdeltaevent.js\";\nimport { FunctionCallArgsDoneEvent$inboundSchema, } from \"./functioncallargsdoneevent.js\";\nimport { FusionCallAnalysisCompletedEvent$inboundSchema, } from \"./fusioncallanalysiscompletedevent.js\";\nimport { FusionCallAnalysisInProgressEvent$inboundSchema, } from \"./fusioncallanalysisinprogressevent.js\";\nimport { FusionCallCompletedEvent$inboundSchema, } from \"./fusioncallcompletedevent.js\";\nimport { FusionCallInProgressEvent$inboundSchema, } from \"./fusioncallinprogressevent.js\";\nimport { FusionCallPanelAddedEvent$inboundSchema, } from \"./fusioncallpaneladdedevent.js\";\nimport { FusionCallPanelCompletedEvent$inboundSchema, } from \"./fusioncallpanelcompletedevent.js\";\nimport { FusionCallPanelDeltaEvent$inboundSchema, } from \"./fusioncallpaneldeltaevent.js\";\nimport { FusionCallPanelFailedEvent$inboundSchema, } from \"./fusioncallpanelfailedevent.js\";\nimport { FusionCallPanelReasoningDeltaEvent$inboundSchema, } from \"./fusioncallpanelreasoningdeltaevent.js\";\nimport { ImageGenCallCompletedEvent$inboundSchema, } from \"./imagegencallcompletedevent.js\";\nimport { ImageGenCallGeneratingEvent$inboundSchema, } from \"./imagegencallgeneratingevent.js\";\nimport { ImageGenCallInProgressEvent$inboundSchema, } from \"./imagegencallinprogressevent.js\";\nimport { ImageGenCallPartialImageEvent$inboundSchema, } from \"./imagegencallpartialimageevent.js\";\nimport { OpenResponsesCreatedEvent$inboundSchema, } from \"./openresponsescreatedevent.js\";\nimport { OpenResponsesInProgressEvent$inboundSchema, } from \"./openresponsesinprogressevent.js\";\nimport { ReasoningDeltaEvent$inboundSchema, } from \"./reasoningdeltaevent.js\";\nimport { ReasoningDoneEvent$inboundSchema, } from \"./reasoningdoneevent.js\";\nimport { ReasoningSummaryPartAddedEvent$inboundSchema, } from \"./reasoningsummarypartaddedevent.js\";\nimport { ReasoningSummaryPartDoneEvent$inboundSchema, } from \"./reasoningsummarypartdoneevent.js\";\nimport { ReasoningSummaryTextDeltaEvent$inboundSchema, } from \"./reasoningsummarytextdeltaevent.js\";\nimport { ReasoningSummaryTextDoneEvent$inboundSchema, } from \"./reasoningsummarytextdoneevent.js\";\nimport { RefusalDeltaEvent$inboundSchema, } from \"./refusaldeltaevent.js\";\nimport { RefusalDoneEvent$inboundSchema, } from \"./refusaldoneevent.js\";\nimport { StreamEventsResponseCompleted$inboundSchema, } from \"./streameventsresponsecompleted.js\";\nimport { StreamEventsResponseFailed$inboundSchema, } from \"./streameventsresponsefailed.js\";\nimport { StreamEventsResponseIncomplete$inboundSchema, } from \"./streameventsresponseincomplete.js\";\nimport { StreamEventsResponseOutputItemAdded$inboundSchema, } from \"./streameventsresponseoutputitemadded.js\";\nimport { StreamEventsResponseOutputItemDone$inboundSchema, } from \"./streameventsresponseoutputitemdone.js\";\nimport { TextDeltaEvent$inboundSchema, } from \"./textdeltaevent.js\";\nimport { TextDoneEvent$inboundSchema } from \"./textdoneevent.js\";\nimport { WebSearchCallCompletedEvent$inboundSchema, } from \"./websearchcallcompletedevent.js\";\nimport { WebSearchCallInProgressEvent$inboundSchema, } from \"./websearchcallinprogressevent.js\";\nimport { WebSearchCallSearchingEvent$inboundSchema, } from \"./websearchcallsearchingevent.js\";\n/** @internal */\nexport const StreamEvents$inboundSchema = discriminatedUnion(\"type\", {\n    error: ErrorEvent$inboundSchema,\n    [\"response.apply_patch_call_operation_diff.delta\"]: ApplyPatchCallOperationDiffDeltaEvent$inboundSchema,\n    [\"response.apply_patch_call_operation_diff.done\"]: ApplyPatchCallOperationDiffDoneEvent$inboundSchema,\n    [\"response.completed\"]: StreamEventsResponseCompleted$inboundSchema,\n    [\"response.content_part.added\"]: ContentPartAddedEvent$inboundSchema,\n    [\"response.content_part.done\"]: ContentPartDoneEvent$inboundSchema,\n    [\"response.created\"]: OpenResponsesCreatedEvent$inboundSchema,\n    [\"response.custom_tool_call_input.delta\"]: CustomToolCallInputDeltaEvent$inboundSchema,\n    [\"response.custom_tool_call_input.done\"]: CustomToolCallInputDoneEvent$inboundSchema,\n    [\"response.failed\"]: StreamEventsResponseFailed$inboundSchema,\n    [\"response.function_call_arguments.delta\"]: FunctionCallArgsDeltaEvent$inboundSchema,\n    [\"response.function_call_arguments.done\"]: FunctionCallArgsDoneEvent$inboundSchema,\n    [\"response.fusion_call.analysis.completed\"]: FusionCallAnalysisCompletedEvent$inboundSchema,\n    [\"response.fusion_call.analysis.in_progress\"]: FusionCallAnalysisInProgressEvent$inboundSchema,\n    [\"response.fusion_call.completed\"]: FusionCallCompletedEvent$inboundSchema,\n    [\"response.fusion_call.in_progress\"]: FusionCallInProgressEvent$inboundSchema,\n    [\"response.fusion_call.panel.added\"]: FusionCallPanelAddedEvent$inboundSchema,\n    [\"response.fusion_call.panel.completed\"]: FusionCallPanelCompletedEvent$inboundSchema,\n    [\"response.fusion_call.panel.delta\"]: FusionCallPanelDeltaEvent$inboundSchema,\n    [\"response.fusion_call.panel.failed\"]: FusionCallPanelFailedEvent$inboundSchema,\n    [\"response.fusion_call.panel.reasoning.delta\"]: FusionCallPanelReasoningDeltaEvent$inboundSchema,\n    [\"response.image_generation_call.completed\"]: ImageGenCallCompletedEvent$inboundSchema,\n    [\"response.image_generation_call.generating\"]: ImageGenCallGeneratingEvent$inboundSchema,\n    [\"response.image_generation_call.in_progress\"]: ImageGenCallInProgressEvent$inboundSchema,\n    [\"response.image_generation_call.partial_image\"]: ImageGenCallPartialImageEvent$inboundSchema,\n    [\"response.in_progress\"]: OpenResponsesInProgressEvent$inboundSchema,\n    [\"response.incomplete\"]: StreamEventsResponseIncomplete$inboundSchema,\n    [\"response.output_item.added\"]: StreamEventsResponseOutputItemAdded$inboundSchema,\n    [\"response.output_item.done\"]: StreamEventsResponseOutputItemDone$inboundSchema,\n    [\"response.output_text.annotation.added\"]: AnnotationAddedEvent$inboundSchema,\n    [\"response.output_text.delta\"]: TextDeltaEvent$inboundSchema,\n    [\"response.output_text.done\"]: TextDoneEvent$inboundSchema,\n    [\"response.reasoning_summary_part.added\"]: ReasoningSummaryPartAddedEvent$inboundSchema,\n    [\"response.reasoning_summary_part.done\"]: ReasoningSummaryPartDoneEvent$inboundSchema,\n    [\"response.reasoning_summary_text.delta\"]: ReasoningSummaryTextDeltaEvent$inboundSchema,\n    [\"response.reasoning_summary_text.done\"]: ReasoningSummaryTextDoneEvent$inboundSchema,\n    [\"response.reasoning_text.delta\"]: ReasoningDeltaEvent$inboundSchema,\n    [\"response.reasoning_text.done\"]: ReasoningDoneEvent$inboundSchema,\n    [\"response.refusal.delta\"]: RefusalDeltaEvent$inboundSchema,\n    [\"response.refusal.done\"]: RefusalDoneEvent$inboundSchema,\n    [\"response.web_search_call.completed\"]: WebSearchCallCompletedEvent$inboundSchema,\n    [\"response.web_search_call.in_progress\"]: WebSearchCallInProgressEvent$inboundSchema,\n    [\"response.web_search_call.searching\"]: WebSearchCallSearchingEvent$inboundSchema,\n});\nexport function streamEventsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => StreamEvents$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'StreamEvents' from JSON`);\n}\n//# sourceMappingURL=streamevents.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 69284d63df45\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { StreamEvents$inboundSchema } from \"./streamevents.js\";\n/** @internal */\nexport const ResponsesStreamingResponse$inboundSchema = z.object({\n    data: z.string().transform((v, ctx) => {\n        try {\n            return JSON.parse(v);\n        }\n        catch (err) {\n            ctx.addIssue({\n                input: v,\n                code: \"custom\",\n                message: `malformed json: ${err}`,\n            });\n            return z.NEVER;\n        }\n    }).pipe(StreamEvents$inboundSchema),\n});\nexport function responsesStreamingResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ResponsesStreamingResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ResponsesStreamingResponse' from JSON`);\n}\n//# sourceMappingURL=responsesstreamingresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d90c6c784ca5\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const Security$outboundSchema = z\n    .object({\n    apiKey: z.string().optional(),\n});\nexport function securityToJSON(security) {\n    return JSON.stringify(Security$outboundSchema.parse(security));\n}\n//# sourceMappingURL=security.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 842927f7dc14\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const ServiceUnavailableResponseErrorData$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n    metadata: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(),\n});\nexport function serviceUnavailableResponseErrorDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ServiceUnavailableResponseErrorData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ServiceUnavailableResponseErrorData' from JSON`);\n}\n//# sourceMappingURL=serviceunavailableresponseerrordata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 96d573d68420\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { ProviderOptions$outboundSchema, } from \"./provideroptions.js\";\n/**\n * Audio output format\n */\nexport const ResponseFormatEnum = {\n    Mp3: \"mp3\",\n    Pcm: \"pcm\",\n};\n/** @internal */\nexport const SpeechRequestProvider$outboundSchema = z.object({\n    options: ProviderOptions$outboundSchema.optional(),\n});\nexport function speechRequestProviderToJSON(speechRequestProvider) {\n    return JSON.stringify(SpeechRequestProvider$outboundSchema.parse(speechRequestProvider));\n}\n/** @internal */\nexport const ResponseFormatEnum$outboundSchema = openEnums.outboundSchema(ResponseFormatEnum);\n/** @internal */\nexport const SpeechRequest$outboundSchema = z.object({\n    input: z.string(),\n    model: z.string(),\n    provider: z.lazy(() => SpeechRequestProvider$outboundSchema).optional(),\n    responseFormat: ResponseFormatEnum$outboundSchema.default(\"pcm\"),\n    speed: z.number().optional(),\n    voice: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        responseFormat: \"response_format\",\n    });\n});\nexport function speechRequestToJSON(speechRequest) {\n    return JSON.stringify(SpeechRequest$outboundSchema.parse(speechRequest));\n}\n//# sourceMappingURL=speechrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 2251488e7c0b\n */\nimport * as z from \"zod/v4\";\n/** @internal */\nexport const STTInputAudio$outboundSchema = z.object({\n    data: z.string(),\n    format: z.string(),\n});\nexport function sttInputAudioToJSON(sttInputAudio) {\n    return JSON.stringify(STTInputAudio$outboundSchema.parse(sttInputAudio));\n}\n//# sourceMappingURL=sttinputaudio.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3be8453c0517\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { ProviderOptions$outboundSchema, } from \"./provideroptions.js\";\nimport { STTInputAudio$outboundSchema, } from \"./sttinputaudio.js\";\n/** @internal */\nexport const STTRequestProvider$outboundSchema = z.object({\n    options: ProviderOptions$outboundSchema.optional(),\n});\nexport function sttRequestProviderToJSON(sttRequestProvider) {\n    return JSON.stringify(STTRequestProvider$outboundSchema.parse(sttRequestProvider));\n}\n/** @internal */\nexport const STTRequest$outboundSchema = z.object({\n    inputAudio: STTInputAudio$outboundSchema,\n    language: z.string().optional(),\n    model: z.string(),\n    provider: z.lazy(() => STTRequestProvider$outboundSchema).optional(),\n    temperature: z.number().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        inputAudio: \"input_audio\",\n    });\n});\nexport function sttRequestToJSON(sttRequest) {\n    return JSON.stringify(STTRequest$outboundSchema.parse(sttRequest));\n}\n//# sourceMappingURL=sttrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6d43566c0d40\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const STTUsage$inboundSchema = z.object({\n    cost: z.number().optional(),\n    input_tokens: z.int().optional(),\n    output_tokens: z.int().optional(),\n    seconds: z.number().optional(),\n    total_tokens: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"input_tokens\": \"inputTokens\",\n        \"output_tokens\": \"outputTokens\",\n        \"total_tokens\": \"totalTokens\",\n    });\n});\nexport function sttUsageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => STTUsage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'STTUsage' from JSON`);\n}\n//# sourceMappingURL=sttusage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 383a6e21047b\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { STTUsage$inboundSchema } from \"./sttusage.js\";\n/** @internal */\nexport const STTResponse$inboundSchema = z\n    .object({\n    text: z.string(),\n    usage: STTUsage$inboundSchema.optional(),\n});\nexport function sttResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => STTResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'STTResponse' from JSON`);\n}\n//# sourceMappingURL=sttresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ff9492357bd9\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const TooManyRequestsResponseErrorData$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n    metadata: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(),\n});\nexport function tooManyRequestsResponseErrorDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => TooManyRequestsResponseErrorData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'TooManyRequestsResponseErrorData' from JSON`);\n}\n//# sourceMappingURL=toomanyrequestsresponseerrordata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d335c48e0c3e\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const UnauthorizedResponseErrorData$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n    metadata: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(),\n});\nexport function unauthorizedResponseErrorDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => UnauthorizedResponseErrorData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'UnauthorizedResponseErrorData' from JSON`);\n}\n//# sourceMappingURL=unauthorizedresponseerrordata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 557063315301\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const UnprocessableEntityResponseErrorData$inboundSchema = z.object({\n    code: z.int(),\n    message: z.string(),\n    metadata: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(),\n});\nexport function unprocessableEntityResponseErrorDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => UnprocessableEntityResponseErrorData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'UnprocessableEntityResponseErrorData' from JSON`);\n}\n//# sourceMappingURL=unprocessableentityresponseerrordata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e86268c7b05c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const UpdateBYOKKeyRequest$outboundSchema = z.object({\n    allowedModels: z.nullable(z.array(z.string())).optional(),\n    allowedUserIds: z.nullable(z.array(z.string())).optional(),\n    disabled: z.boolean().optional(),\n    isFallback: z.boolean().optional(),\n    key: z.string().optional(),\n    name: z.nullable(z.string()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        allowedModels: \"allowed_models\",\n        allowedUserIds: \"allowed_user_ids\",\n        isFallback: \"is_fallback\",\n    });\n});\nexport function updateBYOKKeyRequestToJSON(updateBYOKKeyRequest) {\n    return JSON.stringify(UpdateBYOKKeyRequest$outboundSchema.parse(updateBYOKKeyRequest));\n}\n//# sourceMappingURL=updatebyokkeyrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 016842b2461b\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { BYOKKey$inboundSchema } from \"./byokkey.js\";\n/** @internal */\nexport const UpdateBYOKKeyResponse$inboundSchema = z.object({\n    data: BYOKKey$inboundSchema,\n});\nexport function updateBYOKKeyResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => UpdateBYOKKeyResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'UpdateBYOKKeyResponse' from JSON`);\n}\n//# sourceMappingURL=updatebyokkeyresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 8ae5b029f2d5\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { ContentFilterBuiltinEntryInput$outboundSchema, } from \"./contentfilterbuiltinentryinput.js\";\nimport { ContentFilterEntry$outboundSchema, } from \"./contentfilterentry.js\";\nimport { GuardrailInterval$outboundSchema, } from \"./guardrailinterval.js\";\n/** @internal */\nexport const UpdateGuardrailRequest$outboundSchema = z.object({\n    allowedModels: z.nullable(z.array(z.string())).optional(),\n    allowedProviders: z.nullable(z.array(z.string())).optional(),\n    contentFilterBuiltins: z.nullable(z.array(ContentFilterBuiltinEntryInput$outboundSchema)).optional(),\n    contentFilters: z.nullable(z.array(ContentFilterEntry$outboundSchema))\n        .optional(),\n    description: z.nullable(z.string()).optional(),\n    enforceZdr: z.nullable(z.boolean()).optional(),\n    enforceZdrAnthropic: z.nullable(z.boolean()).optional(),\n    enforceZdrGoogle: z.nullable(z.boolean()).optional(),\n    enforceZdrOpenai: z.nullable(z.boolean()).optional(),\n    enforceZdrOther: z.nullable(z.boolean()).optional(),\n    ignoredModels: z.nullable(z.array(z.string())).optional(),\n    ignoredProviders: z.nullable(z.array(z.string())).optional(),\n    limitUsd: z.nullable(z.number()).optional(),\n    name: z.string().optional(),\n    resetInterval: z.nullable(GuardrailInterval$outboundSchema).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        allowedModels: \"allowed_models\",\n        allowedProviders: \"allowed_providers\",\n        contentFilterBuiltins: \"content_filter_builtins\",\n        contentFilters: \"content_filters\",\n        enforceZdr: \"enforce_zdr\",\n        enforceZdrAnthropic: \"enforce_zdr_anthropic\",\n        enforceZdrGoogle: \"enforce_zdr_google\",\n        enforceZdrOpenai: \"enforce_zdr_openai\",\n        enforceZdrOther: \"enforce_zdr_other\",\n        ignoredModels: \"ignored_models\",\n        ignoredProviders: \"ignored_providers\",\n        limitUsd: \"limit_usd\",\n        resetInterval: \"reset_interval\",\n    });\n});\nexport function updateGuardrailRequestToJSON(updateGuardrailRequest) {\n    return JSON.stringify(UpdateGuardrailRequest$outboundSchema.parse(updateGuardrailRequest));\n}\n//# sourceMappingURL=updateguardrailrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a1debd60e96d\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { Guardrail$inboundSchema } from \"./guardrail.js\";\n/** @internal */\nexport const UpdateGuardrailResponse$inboundSchema = z.object({\n    data: Guardrail$inboundSchema,\n});\nexport function updateGuardrailResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => UpdateGuardrailResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'UpdateGuardrailResponse' from JSON`);\n}\n//# sourceMappingURL=updateguardrailresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b5f21f0b6b97\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { ObservabilityFilterRulesConfig$outboundSchema, } from \"./observabilityfilterrulesconfig.js\";\n/** @internal */\nexport const UpdateObservabilityDestinationRequest$outboundSchema = z.object({\n    apiKeyHashes: z.nullable(z.array(z.string())).optional(),\n    config: z.record(z.string(), z.nullable(z.any())).optional(),\n    enabled: z.boolean().optional(),\n    filterRules: z.nullable(ObservabilityFilterRulesConfig$outboundSchema)\n        .optional(),\n    name: z.string().optional(),\n    privacyMode: z.boolean().optional(),\n    samplingRate: z.number().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        apiKeyHashes: \"api_key_hashes\",\n        filterRules: \"filter_rules\",\n        privacyMode: \"privacy_mode\",\n        samplingRate: \"sampling_rate\",\n    });\n});\nexport function updateObservabilityDestinationRequestToJSON(updateObservabilityDestinationRequest) {\n    return JSON.stringify(UpdateObservabilityDestinationRequest$outboundSchema.parse(updateObservabilityDestinationRequest));\n}\n//# sourceMappingURL=updateobservabilitydestinationrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 784690ec7bf0\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { ObservabilityDestination$inboundSchema, } from \"./observabilitydestination.js\";\n/** @internal */\nexport const UpdateObservabilityDestinationResponse$inboundSchema = z.object({\n    data: ObservabilityDestination$inboundSchema,\n});\nexport function updateObservabilityDestinationResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => UpdateObservabilityDestinationResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'UpdateObservabilityDestinationResponse' from JSON`);\n}\n//# sourceMappingURL=updateobservabilitydestinationresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 84dd4f01b245\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\n/** @internal */\nexport const UpdateWorkspaceRequest$outboundSchema = z.object({\n    defaultImageModel: z.nullable(z.string()).optional(),\n    defaultProviderSort: z.nullable(z.string()).optional(),\n    defaultTextModel: z.nullable(z.string()).optional(),\n    description: z.nullable(z.string()).optional(),\n    ioLoggingApiKeyIds: z.nullable(z.array(z.int())).optional(),\n    ioLoggingSamplingRate: z.number().optional(),\n    isDataDiscountLoggingEnabled: z.boolean().optional(),\n    isObservabilityBroadcastEnabled: z.boolean().optional(),\n    isObservabilityIoLoggingEnabled: z.boolean().optional(),\n    name: z.string().optional(),\n    slug: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        defaultImageModel: \"default_image_model\",\n        defaultProviderSort: \"default_provider_sort\",\n        defaultTextModel: \"default_text_model\",\n        ioLoggingApiKeyIds: \"io_logging_api_key_ids\",\n        ioLoggingSamplingRate: \"io_logging_sampling_rate\",\n        isDataDiscountLoggingEnabled: \"is_data_discount_logging_enabled\",\n        isObservabilityBroadcastEnabled: \"is_observability_broadcast_enabled\",\n        isObservabilityIoLoggingEnabled: \"is_observability_io_logging_enabled\",\n    });\n});\nexport function updateWorkspaceRequestToJSON(updateWorkspaceRequest) {\n    return JSON.stringify(UpdateWorkspaceRequest$outboundSchema.parse(updateWorkspaceRequest));\n}\n//# sourceMappingURL=updateworkspacerequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5b6906dad2d6\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { Workspace$inboundSchema } from \"./workspace.js\";\n/** @internal */\nexport const UpdateWorkspaceResponse$inboundSchema = z.object({\n    data: Workspace$inboundSchema,\n});\nexport function updateWorkspaceResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => UpdateWorkspaceResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'UpdateWorkspaceResponse' from JSON`);\n}\n//# sourceMappingURL=updateworkspaceresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e72ea2e4c5b3\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { FrameImage$outboundSchema, } from \"./frameimage.js\";\nimport { InputReference$outboundSchema, } from \"./inputreference.js\";\n/**\n * Aspect ratio of the generated video\n */\nexport const AspectRatio = {\n    OneHundredAndSixtyNine: \"16:9\",\n    NineHundredAndSixteen: \"9:16\",\n    Eleven: \"1:1\",\n    FortyThree: \"4:3\",\n    ThirtyFour: \"3:4\",\n    ThirtyTwo: \"3:2\",\n    TwentyThree: \"2:3\",\n    TwoHundredAndNineteen: \"21:9\",\n    NineHundredAndTwentyOne: \"9:21\",\n};\n/**\n * Resolution of the generated video\n */\nexport const Resolution = {\n    FourHundredAndEightyp: \"480p\",\n    SevenHundredAndTwentyp: \"720p\",\n    OneThousandAndEightyp: \"1080p\",\n    OneK: \"1K\",\n    TwoK: \"2K\",\n    FourK: \"4K\",\n};\n/** @internal */\nexport const AspectRatio$outboundSchema = openEnums.outboundSchema(AspectRatio);\n/** @internal */\nexport const Options$outboundSchema = z\n    .object({\n    oneai: z.record(z.string(), z.nullable(z.any())).optional(),\n    ai21: z.record(z.string(), z.nullable(z.any())).optional(),\n    aionLabs: z.record(z.string(), z.nullable(z.any())).optional(),\n    akashml: z.record(z.string(), z.nullable(z.any())).optional(),\n    alibaba: z.record(z.string(), z.nullable(z.any())).optional(),\n    amazonBedrock: z.record(z.string(), z.nullable(z.any())).optional(),\n    amazonNova: z.record(z.string(), z.nullable(z.any())).optional(),\n    ambient: z.record(z.string(), z.nullable(z.any())).optional(),\n    anthropic: z.record(z.string(), z.nullable(z.any())).optional(),\n    anyscale: z.record(z.string(), z.nullable(z.any())).optional(),\n    arceeAi: z.record(z.string(), z.nullable(z.any())).optional(),\n    atlasCloud: z.record(z.string(), z.nullable(z.any())).optional(),\n    atoma: z.record(z.string(), z.nullable(z.any())).optional(),\n    avian: z.record(z.string(), z.nullable(z.any())).optional(),\n    azure: z.record(z.string(), z.nullable(z.any())).optional(),\n    baidu: z.record(z.string(), z.nullable(z.any())).optional(),\n    baseten: z.record(z.string(), z.nullable(z.any())).optional(),\n    blackForestLabs: z.record(z.string(), z.nullable(z.any())).optional(),\n    byteplus: z.record(z.string(), z.nullable(z.any())).optional(),\n    centml: z.record(z.string(), z.nullable(z.any())).optional(),\n    cerebras: z.record(z.string(), z.nullable(z.any())).optional(),\n    chutes: z.record(z.string(), z.nullable(z.any())).optional(),\n    cirrascale: z.record(z.string(), z.nullable(z.any())).optional(),\n    clarifai: z.record(z.string(), z.nullable(z.any())).optional(),\n    cloudflare: z.record(z.string(), z.nullable(z.any())).optional(),\n    cohere: z.record(z.string(), z.nullable(z.any())).optional(),\n    crofai: z.record(z.string(), z.nullable(z.any())).optional(),\n    crucible: z.record(z.string(), z.nullable(z.any())).optional(),\n    crusoe: z.record(z.string(), z.nullable(z.any())).optional(),\n    darkbloom: z.record(z.string(), z.nullable(z.any())).optional(),\n    decart: z.record(z.string(), z.nullable(z.any())).optional(),\n    deepinfra: z.record(z.string(), z.nullable(z.any())).optional(),\n    deepseek: z.record(z.string(), z.nullable(z.any())).optional(),\n    dekallm: z.record(z.string(), z.nullable(z.any())).optional(),\n    digitalocean: z.record(z.string(), z.nullable(z.any())).optional(),\n    enfer: z.record(z.string(), z.nullable(z.any())).optional(),\n    fakeProvider: z.record(z.string(), z.nullable(z.any())).optional(),\n    featherless: z.record(z.string(), z.nullable(z.any())).optional(),\n    fireworks: z.record(z.string(), z.nullable(z.any())).optional(),\n    friendli: z.record(z.string(), z.nullable(z.any())).optional(),\n    gmicloud: z.record(z.string(), z.nullable(z.any())).optional(),\n    googleAiStudio: z.record(z.string(), z.nullable(z.any())).optional(),\n    googleVertex: z.record(z.string(), z.nullable(z.any())).optional(),\n    gopomelo: z.record(z.string(), z.nullable(z.any())).optional(),\n    groq: z.record(z.string(), z.nullable(z.any())).optional(),\n    huggingface: z.record(z.string(), z.nullable(z.any())).optional(),\n    hyperbolic: z.record(z.string(), z.nullable(z.any())).optional(),\n    hyperbolicQuantized: z.record(z.string(), z.nullable(z.any())).optional(),\n    inception: z.record(z.string(), z.nullable(z.any())).optional(),\n    inceptron: z.record(z.string(), z.nullable(z.any())).optional(),\n    inferenceNet: z.record(z.string(), z.nullable(z.any())).optional(),\n    infermatic: z.record(z.string(), z.nullable(z.any())).optional(),\n    inflection: z.record(z.string(), z.nullable(z.any())).optional(),\n    inocloud: z.record(z.string(), z.nullable(z.any())).optional(),\n    ioNet: z.record(z.string(), z.nullable(z.any())).optional(),\n    ionstream: z.record(z.string(), z.nullable(z.any())).optional(),\n    klusterai: z.record(z.string(), z.nullable(z.any())).optional(),\n    lambda: z.record(z.string(), z.nullable(z.any())).optional(),\n    lepton: z.record(z.string(), z.nullable(z.any())).optional(),\n    liquid: z.record(z.string(), z.nullable(z.any())).optional(),\n    lynn: z.record(z.string(), z.nullable(z.any())).optional(),\n    lynnPrivate: z.record(z.string(), z.nullable(z.any())).optional(),\n    mancer: z.record(z.string(), z.nullable(z.any())).optional(),\n    mancerOld: z.record(z.string(), z.nullable(z.any())).optional(),\n    mara: z.record(z.string(), z.nullable(z.any())).optional(),\n    meta: z.record(z.string(), z.nullable(z.any())).optional(),\n    minimax: z.record(z.string(), z.nullable(z.any())).optional(),\n    mistral: z.record(z.string(), z.nullable(z.any())).optional(),\n    modal: z.record(z.string(), z.nullable(z.any())).optional(),\n    modelrun: z.record(z.string(), z.nullable(z.any())).optional(),\n    modular: z.record(z.string(), z.nullable(z.any())).optional(),\n    moonshotai: z.record(z.string(), z.nullable(z.any())).optional(),\n    morph: z.record(z.string(), z.nullable(z.any())).optional(),\n    ncompass: z.record(z.string(), z.nullable(z.any())).optional(),\n    nebius: z.record(z.string(), z.nullable(z.any())).optional(),\n    nexAgi: z.record(z.string(), z.nullable(z.any())).optional(),\n    nextbit: z.record(z.string(), z.nullable(z.any())).optional(),\n    nineteen: z.record(z.string(), z.nullable(z.any())).optional(),\n    novita: z.record(z.string(), z.nullable(z.any())).optional(),\n    nvidia: z.record(z.string(), z.nullable(z.any())).optional(),\n    octoai: z.record(z.string(), z.nullable(z.any())).optional(),\n    openInference: z.record(z.string(), z.nullable(z.any())).optional(),\n    openai: z.record(z.string(), z.nullable(z.any())).optional(),\n    parasail: z.record(z.string(), z.nullable(z.any())).optional(),\n    perceptron: z.record(z.string(), z.nullable(z.any())).optional(),\n    perplexity: z.record(z.string(), z.nullable(z.any())).optional(),\n    phala: z.record(z.string(), z.nullable(z.any())).optional(),\n    poolside: z.record(z.string(), z.nullable(z.any())).optional(),\n    recraft: z.record(z.string(), z.nullable(z.any())).optional(),\n    recursal: z.record(z.string(), z.nullable(z.any())).optional(),\n    reflection: z.record(z.string(), z.nullable(z.any())).optional(),\n    reka: z.record(z.string(), z.nullable(z.any())).optional(),\n    relace: z.record(z.string(), z.nullable(z.any())).optional(),\n    replicate: z.record(z.string(), z.nullable(z.any())).optional(),\n    sambanova: z.record(z.string(), z.nullable(z.any())).optional(),\n    sambanovaCloaked: z.record(z.string(), z.nullable(z.any())).optional(),\n    seed: z.record(z.string(), z.nullable(z.any())).optional(),\n    sfCompute: z.record(z.string(), z.nullable(z.any())).optional(),\n    siliconflow: z.record(z.string(), z.nullable(z.any())).optional(),\n    sourceful: z.record(z.string(), z.nullable(z.any())).optional(),\n    stealth: z.record(z.string(), z.nullable(z.any())).optional(),\n    stepfun: z.record(z.string(), z.nullable(z.any())).optional(),\n    streamlake: z.record(z.string(), z.nullable(z.any())).optional(),\n    switchpoint: z.record(z.string(), z.nullable(z.any())).optional(),\n    targon: z.record(z.string(), z.nullable(z.any())).optional(),\n    together: z.record(z.string(), z.nullable(z.any())).optional(),\n    togetherLite: z.record(z.string(), z.nullable(z.any())).optional(),\n    ubicloud: z.record(z.string(), z.nullable(z.any())).optional(),\n    upstage: z.record(z.string(), z.nullable(z.any())).optional(),\n    venice: z.record(z.string(), z.nullable(z.any())).optional(),\n    wafer: z.record(z.string(), z.nullable(z.any())).optional(),\n    wandb: z.record(z.string(), z.nullable(z.any())).optional(),\n    xai: z.record(z.string(), z.nullable(z.any())).optional(),\n    xiaomi: z.record(z.string(), z.nullable(z.any())).optional(),\n    zAi: z.record(z.string(), z.nullable(z.any())).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        oneai: \"01ai\",\n        aionLabs: \"aion-labs\",\n        amazonBedrock: \"amazon-bedrock\",\n        amazonNova: \"amazon-nova\",\n        arceeAi: \"arcee-ai\",\n        atlasCloud: \"atlas-cloud\",\n        blackForestLabs: \"black-forest-labs\",\n        fakeProvider: \"fake-provider\",\n        googleAiStudio: \"google-ai-studio\",\n        googleVertex: \"google-vertex\",\n        hyperbolicQuantized: \"hyperbolic-quantized\",\n        inferenceNet: \"inference-net\",\n        ioNet: \"io-net\",\n        lynnPrivate: \"lynn-private\",\n        mancerOld: \"mancer-old\",\n        nexAgi: \"nex-agi\",\n        openInference: \"open-inference\",\n        sambanovaCloaked: \"sambanova-cloaked\",\n        sfCompute: \"sf-compute\",\n        togetherLite: \"together-lite\",\n        zAi: \"z-ai\",\n    });\n});\nexport function optionsToJSON(options) {\n    return JSON.stringify(Options$outboundSchema.parse(options));\n}\n/** @internal */\nexport const VideoGenerationRequestProvider$outboundSchema = z.object({\n    options: z.lazy(() => Options$outboundSchema).optional(),\n});\nexport function videoGenerationRequestProviderToJSON(videoGenerationRequestProvider) {\n    return JSON.stringify(VideoGenerationRequestProvider$outboundSchema.parse(videoGenerationRequestProvider));\n}\n/** @internal */\nexport const Resolution$outboundSchema = openEnums.outboundSchema(Resolution);\n/** @internal */\nexport const VideoGenerationRequest$outboundSchema = z.object({\n    aspectRatio: AspectRatio$outboundSchema.optional(),\n    callbackUrl: z.string().optional(),\n    duration: z.int().optional(),\n    frameImages: z.array(FrameImage$outboundSchema).optional(),\n    generateAudio: z.boolean().optional(),\n    inputReferences: z.array(InputReference$outboundSchema).optional(),\n    model: z.string(),\n    prompt: z.string(),\n    provider: z.lazy(() => VideoGenerationRequestProvider$outboundSchema)\n        .optional(),\n    resolution: Resolution$outboundSchema.optional(),\n    seed: z.int().optional(),\n    size: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        aspectRatio: \"aspect_ratio\",\n        callbackUrl: \"callback_url\",\n        frameImages: \"frame_images\",\n        generateAudio: \"generate_audio\",\n        inputReferences: \"input_references\",\n    });\n});\nexport function videoGenerationRequestToJSON(videoGenerationRequest) {\n    return JSON.stringify(VideoGenerationRequest$outboundSchema.parse(videoGenerationRequest));\n}\n//# sourceMappingURL=videogenerationrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9a49f28f7c9c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\n/** @internal */\nexport const VideoGenerationUsage$inboundSchema = z.object({\n    cost: z.nullable(z.number()).optional(),\n    is_byok: z.boolean().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"is_byok\": \"isByok\",\n    });\n});\nexport function videoGenerationUsageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => VideoGenerationUsage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'VideoGenerationUsage' from JSON`);\n}\n//# sourceMappingURL=videogenerationusage.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0a96c6ee9eea\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nimport { VideoGenerationUsage$inboundSchema, } from \"./videogenerationusage.js\";\nexport const VideoGenerationResponseStatus = {\n    Pending: \"pending\",\n    InProgress: \"in_progress\",\n    Completed: \"completed\",\n    Failed: \"failed\",\n    Cancelled: \"cancelled\",\n    Expired: \"expired\",\n};\n/** @internal */\nexport const VideoGenerationResponseStatus$inboundSchema = openEnums.inboundSchema(VideoGenerationResponseStatus);\n/** @internal */\nexport const VideoGenerationResponse$inboundSchema = z.object({\n    error: z.string().optional(),\n    generation_id: z.string().optional(),\n    id: z.string(),\n    polling_url: z.string(),\n    status: VideoGenerationResponseStatus$inboundSchema,\n    unsigned_urls: z.array(z.string()).optional(),\n    usage: VideoGenerationUsage$inboundSchema.optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"generation_id\": \"generationId\",\n        \"polling_url\": \"pollingUrl\",\n        \"unsigned_urls\": \"unsignedUrls\",\n    });\n});\nexport function videoGenerationResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => VideoGenerationResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'VideoGenerationResponse' from JSON`);\n}\n//# sourceMappingURL=videogenerationresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3761c095ec55\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport * as openEnums from \"../types/enums.js\";\nexport const SupportedAspectRatio = {\n    OneHundredAndSixtyNine: \"16:9\",\n    NineHundredAndSixteen: \"9:16\",\n    Eleven: \"1:1\",\n    FortyThree: \"4:3\",\n    ThirtyFour: \"3:4\",\n    ThirtyTwo: \"3:2\",\n    TwentyThree: \"2:3\",\n    TwoHundredAndNineteen: \"21:9\",\n    NineHundredAndTwentyOne: \"9:21\",\n};\nexport const SupportedFrameImage = {\n    FirstFrame: \"first_frame\",\n    LastFrame: \"last_frame\",\n};\nexport const SupportedResolution = {\n    FourHundredAndEightyp: \"480p\",\n    SevenHundredAndTwentyp: \"720p\",\n    OneThousandAndEightyp: \"1080p\",\n    OneK: \"1K\",\n    TwoK: \"2K\",\n    FourK: \"4K\",\n};\nexport const SupportedSize = {\n    FourHundredAndEightyx480: \"480x480\",\n    FourHundredAndEightyx640: \"480x640\",\n    FourHundredAndEightyx720: \"480x720\",\n    FourHundredAndEightyx854: \"480x854\",\n    FourHundredAndEightyx1120: \"480x1120\",\n    SixHundredAndFortyx480: \"640x480\",\n    SevenHundredAndTwentyx480: \"720x480\",\n    SevenHundredAndTwentyx720: \"720x720\",\n    SevenHundredAndTwentyx960: \"720x960\",\n    SevenHundredAndTwentyx1080: \"720x1080\",\n    SevenHundredAndTwentyx1280: \"720x1280\",\n    SevenHundredAndTwentyx1680: \"720x1680\",\n    EightHundredAndFiftyFourx480: \"854x480\",\n    NineHundredAndSixtyx720: \"960x720\",\n    OneThousandAndEightyx720: \"1080x720\",\n    OneThousandAndEightyx1080: \"1080x1080\",\n    OneThousandAndEightyx1440: \"1080x1440\",\n    OneThousandAndEightyx1620: \"1080x1620\",\n    OneThousandAndEightyx1920: \"1080x1920\",\n    OneThousandAndEightyx2520: \"1080x2520\",\n    OneThousandOneHundredAndTwentyx480: \"1120x480\",\n    OneThousandTwoHundredAndEightyx720: \"1280x720\",\n    OneThousandFourHundredAndFortyx1080: \"1440x1080\",\n    OneThousandSixHundredAndTwentyx1080: \"1620x1080\",\n    OneThousandSixHundredAndEightyx720: \"1680x720\",\n    OneThousandNineHundredAndTwentyx1080: \"1920x1080\",\n    TwoThousandOneHundredAndSixtyx2160: \"2160x2160\",\n    TwoThousandOneHundredAndSixtyx2880: \"2160x2880\",\n    TwoThousandOneHundredAndSixtyx3240: \"2160x3240\",\n    TwoThousandOneHundredAndSixtyx3840: \"2160x3840\",\n    TwoThousandOneHundredAndSixtyx5040: \"2160x5040\",\n    TwoThousandFiveHundredAndTwentyx1080: \"2520x1080\",\n    TwoThousandEightHundredAndEightyx2160: \"2880x2160\",\n    ThreeThousandTwoHundredAndFortyx2160: \"3240x2160\",\n    ThreeThousandEightHundredAndFortyx2160: \"3840x2160\",\n    FiveThousandAndFortyx2160: \"5040x2160\",\n};\n/** @internal */\nexport const SupportedAspectRatio$inboundSchema = openEnums.inboundSchema(SupportedAspectRatio);\n/** @internal */\nexport const SupportedFrameImage$inboundSchema = openEnums.inboundSchema(SupportedFrameImage);\n/** @internal */\nexport const SupportedResolution$inboundSchema = openEnums.inboundSchema(SupportedResolution);\n/** @internal */\nexport const SupportedSize$inboundSchema = openEnums.inboundSchema(SupportedSize);\n/** @internal */\nexport const VideoModel$inboundSchema = z\n    .object({\n    allowed_passthrough_parameters: z.array(z.string()),\n    canonical_slug: z.string(),\n    created: z.int(),\n    description: z.string().optional(),\n    generate_audio: z.nullable(z.boolean()),\n    hugging_face_id: z.nullable(z.string()).optional(),\n    id: z.string(),\n    name: z.string(),\n    pricing_skus: z.nullable(z.record(z.string(), z.string())).optional(),\n    seed: z.nullable(z.boolean()),\n    supported_aspect_ratios: z.nullable(z.array(SupportedAspectRatio$inboundSchema)),\n    supported_durations: z.nullable(z.array(z.int())),\n    supported_frame_images: z.nullable(z.array(SupportedFrameImage$inboundSchema)),\n    supported_resolutions: z.nullable(z.array(SupportedResolution$inboundSchema)),\n    supported_sizes: z.nullable(z.array(SupportedSize$inboundSchema)),\n}).transform((v) => {\n    return remap$(v, {\n        \"allowed_passthrough_parameters\": \"allowedPassthroughParameters\",\n        \"canonical_slug\": \"canonicalSlug\",\n        \"generate_audio\": \"generateAudio\",\n        \"hugging_face_id\": \"huggingFaceId\",\n        \"pricing_skus\": \"pricingSkus\",\n        \"supported_aspect_ratios\": \"supportedAspectRatios\",\n        \"supported_durations\": \"supportedDurations\",\n        \"supported_frame_images\": \"supportedFrameImages\",\n        \"supported_resolutions\": \"supportedResolutions\",\n        \"supported_sizes\": \"supportedSizes\",\n    });\n});\nexport function videoModelFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => VideoModel$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'VideoModel' from JSON`);\n}\n//# sourceMappingURL=videomodel.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3ddde944c8c8\n */\nimport * as z from \"zod/v4\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { VideoModel$inboundSchema } from \"./videomodel.js\";\n/** @internal */\nexport const VideoModelsListResponse$inboundSchema = z.object({\n    data: z.array(VideoModel$inboundSchema),\n});\nexport function videoModelsListResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => VideoModelsListResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'VideoModelsListResponse' from JSON`);\n}\n//# sourceMappingURL=videomodelslistresponse.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f93644b0f37e\n */\nexport * from \"./aabenchmarkentry.js\";\nexport * from \"./activityitem.js\";\nexport * from \"./activityresponse.js\";\nexport * from \"./advisornestedtool.js\";\nexport * from \"./advisorreasoning.js\";\nexport * from \"./advisorservertoolconfig.js\";\nexport * from \"./advisorservertoolopenrouter.js\";\nexport * from \"./annotationaddedevent.js\";\nexport * from \"./anthropicallowedcallers.js\";\nexport * from \"./anthropicbase64imagesource.js\";\nexport * from \"./anthropicbase64pdfsource.js\";\nexport * from \"./anthropiccachecontroldirective.js\";\nexport * from \"./anthropiccachecontrolttl.js\";\nexport * from \"./anthropiccitationcharlocationparam.js\";\nexport * from \"./anthropiccitationcontentblocklocationparam.js\";\nexport * from \"./anthropiccitationpagelocationparam.js\";\nexport * from \"./anthropiccitationsearchresultlocation.js\";\nexport * from \"./anthropiccitationwebsearchresultlocation.js\";\nexport * from \"./anthropicdocumentblockparam.js\";\nexport * from \"./anthropicimageblockparam.js\";\nexport * from \"./anthropicimagemimetype.js\";\nexport * from \"./anthropicinputtokensclearatleast.js\";\nexport * from \"./anthropicinputtokenstrigger.js\";\nexport * from \"./anthropicplaintextsource.js\";\nexport * from \"./anthropicsearchresultblockparam.js\";\nexport * from \"./anthropictextblockparam.js\";\nexport * from \"./anthropicthinkingdisplay.js\";\nexport * from \"./anthropicthinkingturns.js\";\nexport * from \"./anthropictooluseskeep.js\";\nexport * from \"./anthropictoolusestrigger.js\";\nexport * from \"./anthropicurlimagesource.js\";\nexport * from \"./anthropicurlpdfsource.js\";\nexport * from \"./anthropicwebsearchresultblockparam.js\";\nexport * from \"./anthropicwebsearchtooluserlocation.js\";\nexport * from \"./applypatchcallitem.js\";\nexport * from \"./applypatchcalloperation.js\";\nexport * from \"./applypatchcalloperationdiffdeltaevent.js\";\nexport * from \"./applypatchcalloperationdiffdoneevent.js\";\nexport * from \"./applypatchcalloutputitem.js\";\nexport * from \"./applypatchcallstatus.js\";\nexport * from \"./applypatchcreatefileoperation.js\";\nexport * from \"./applypatchdeletefileoperation.js\";\nexport * from \"./applypatchengineenum.js\";\nexport * from \"./applypatchservertool.js\";\nexport * from \"./applypatchservertoolconfig.js\";\nexport * from \"./applypatchservertoolopenrouter.js\";\nexport * from \"./applypatchupdatefileoperation.js\";\nexport * from \"./apprankingsitem.js\";\nexport * from \"./apprankingsresponse.js\";\nexport * from \"./autorouterplugin.js\";\nexport * from \"./badgatewayresponseerrordata.js\";\nexport * from \"./badrequestresponseerrordata.js\";\nexport * from \"./baseinputsunion.js\";\nexport * from \"./basereasoningconfig.js\";\nexport * from \"./bashservertool.js\";\nexport * from \"./bashservertoolconfig.js\";\nexport * from \"./bashservertoolengine.js\";\nexport * from \"./bashservertoolenvironment.js\";\nexport * from \"./benchmarkpricing.js\";\nexport * from \"./benchmarksaaitem.js\";\nexport * from \"./benchmarksaameta.js\";\nexport * from \"./benchmarksaaresponse.js\";\nexport * from \"./benchmarksdaitem.js\";\nexport * from \"./benchmarksdameta.js\";\nexport * from \"./benchmarksdaresponse.js\";\nexport * from \"./bulkaddworkspacemembersrequest.js\";\nexport * from \"./bulkaddworkspacemembersresponse.js\";\nexport * from \"./bulkassignkeysrequest.js\";\nexport * from \"./bulkassignkeysresponse.js\";\nexport * from \"./bulkassignmembersrequest.js\";\nexport * from \"./bulkassignmembersresponse.js\";\nexport * from \"./bulkremoveworkspacemembersrequest.js\";\nexport * from \"./bulkremoveworkspacemembersresponse.js\";\nexport * from \"./bulkunassignkeysrequest.js\";\nexport * from \"./bulkunassignkeysresponse.js\";\nexport * from \"./bulkunassignmembersrequest.js\";\nexport * from \"./bulkunassignmembersresponse.js\";\nexport * from \"./byokkey.js\";\nexport * from \"./byokproviderslug.js\";\nexport * from \"./chatassistantimages.js\";\nexport * from \"./chatassistantmessage.js\";\nexport * from \"./chataudiooutput.js\";\nexport * from \"./chatchoice.js\";\nexport * from \"./chatcontentaudio.js\";\nexport * from \"./chatcontentcachecontrol.js\";\nexport * from \"./chatcontentfile.js\";\nexport * from \"./chatcontentimage.js\";\nexport * from \"./chatcontentitems.js\";\nexport * from \"./chatcontenttext.js\";\nexport * from \"./chatcontentvideo.js\";\nexport * from \"./chatcontentvideoinput.js\";\nexport * from \"./chatdebugoptions.js\";\nexport * from \"./chatdevelopermessage.js\";\nexport * from \"./chatfinishreasonenum.js\";\nexport * from \"./chatformatgrammarconfig.js\";\nexport * from \"./chatformatjsonschemaconfig.js\";\nexport * from \"./chatformatpythonconfig.js\";\nexport * from \"./chatformattextconfig.js\";\nexport * from \"./chatfunctiontool.js\";\nexport * from \"./chatjsonschemaconfig.js\";\nexport * from \"./chatmessages.js\";\nexport * from \"./chatnamedtoolchoice.js\";\nexport * from \"./chatreasoningsummaryverbosityenum.js\";\nexport * from \"./chatrequest.js\";\nexport * from \"./chatresult.js\";\nexport * from \"./chatsearchmodelsservertool.js\";\nexport * from \"./chatservertoolchoice.js\";\nexport * from \"./chatstreamchoice.js\";\nexport * from \"./chatstreamchunk.js\";\nexport * from \"./chatstreamdelta.js\";\nexport * from \"./chatstreamingresponse.js\";\nexport * from \"./chatstreamoptions.js\";\nexport * from \"./chatstreamtoolcall.js\";\nexport * from \"./chatsystemmessage.js\";\nexport * from \"./chattokenlogprob.js\";\nexport * from \"./chattokenlogprobs.js\";\nexport * from \"./chattoolcall.js\";\nexport * from \"./chattoolchoice.js\";\nexport * from \"./chattoolmessage.js\";\nexport * from \"./chatusage.js\";\nexport * from \"./chatusermessage.js\";\nexport * from \"./chatwebsearchshorthand.js\";\nexport * from \"./codeinterpreterservertool.js\";\nexport * from \"./codexlocalshelltool.js\";\nexport * from \"./compactionitem.js\";\nexport * from \"./compoundfilter.js\";\nexport * from \"./computeruseservertool.js\";\nexport * from \"./conflictresponseerrordata.js\";\nexport * from \"./containerautoenvironment.js\";\nexport * from \"./containerreferenceenvironment.js\";\nexport * from \"./contentfilteraction.js\";\nexport * from \"./contentfilterbuiltinaction.js\";\nexport * from \"./contentfilterbuiltinentry.js\";\nexport * from \"./contentfilterbuiltinentryinput.js\";\nexport * from \"./contentfilterbuiltinslug.js\";\nexport * from \"./contentfilterentry.js\";\nexport * from \"./contentpartaddedevent.js\";\nexport * from \"./contentpartaudio.js\";\nexport * from \"./contentpartdoneevent.js\";\nexport * from \"./contentpartimage.js\";\nexport * from \"./contentpartinputaudio.js\";\nexport * from \"./contentpartinputfile.js\";\nexport * from \"./contentpartinputvideo.js\";\nexport * from \"./contentpartvideo.js\";\nexport * from \"./contextcompressionengine.js\";\nexport * from \"./contextcompressionplugin.js\";\nexport * from \"./costdetails.js\";\nexport * from \"./createbyokkeyrequest.js\";\nexport * from \"./createbyokkeyresponse.js\";\nexport * from \"./createguardrailrequest.js\";\nexport * from \"./createguardrailresponse.js\";\nexport * from \"./createobservabilitydestinationrequest.js\";\nexport * from \"./createobservabilitydestinationresponse.js\";\nexport * from \"./createpresetfrominferenceresponse.js\";\nexport * from \"./createworkspacerequest.js\";\nexport * from \"./createworkspaceresponse.js\";\nexport * from \"./customtool.js\";\nexport * from \"./customtoolcallinputdeltaevent.js\";\nexport * from \"./customtoolcallinputdoneevent.js\";\nexport * from \"./customtoolcallitem.js\";\nexport * from \"./customtoolcalloutputitem.js\";\nexport * from \"./dabenchmarkentry.js\";\nexport * from \"./datetimeservertool.js\";\nexport * from \"./datetimeservertoolconfig.js\";\nexport * from \"./defaultparameters.js\";\nexport * from \"./deletebyokkeyresponse.js\";\nexport * from \"./deleteguardrailresponse.js\";\nexport * from \"./deleteobservabilitydestinationresponse.js\";\nexport * from \"./deleteworkspaceresponse.js\";\nexport * from \"./easyinputmessage.js\";\nexport * from \"./edgenetworktimeoutresponseerrordata.js\";\nexport * from \"./endpointinfo.js\";\nexport * from \"./endpointsmetadata.js\";\nexport * from \"./endpointstatus.js\";\nexport * from \"./errorevent.js\";\nexport * from \"./filecitation.js\";\nexport * from \"./filedeleteresponse.js\";\nexport * from \"./filelistresponse.js\";\nexport * from \"./filemetadata.js\";\nexport * from \"./fileparserplugin.js\";\nexport * from \"./filepath.js\";\nexport * from \"./filesearchservertool.js\";\nexport * from \"./forbiddenresponseerrordata.js\";\nexport * from \"./formatjsonobjectconfig.js\";\nexport * from \"./formatjsonschemaconfig.js\";\nexport * from \"./formats.js\";\nexport * from \"./formattextconfig.js\";\nexport * from \"./frameimage.js\";\nexport * from \"./functioncallargsdeltaevent.js\";\nexport * from \"./functioncallargsdoneevent.js\";\nexport * from \"./functioncallitem.js\";\nexport * from \"./functioncalloutputitem.js\";\nexport * from \"./fusionanalysisresult.js\";\nexport * from \"./fusioncallanalysiscompletedevent.js\";\nexport * from \"./fusioncallanalysisinprogressevent.js\";\nexport * from \"./fusioncallcompletedevent.js\";\nexport * from \"./fusioncallinprogressevent.js\";\nexport * from \"./fusioncallpaneladdedevent.js\";\nexport * from \"./fusioncallpanelcompletedevent.js\";\nexport * from \"./fusioncallpaneldeltaevent.js\";\nexport * from \"./fusioncallpanelfailedevent.js\";\nexport * from \"./fusioncallpanelreasoningdeltaevent.js\";\nexport * from \"./fusionplugin.js\";\nexport * from \"./fusionservertoolconfig.js\";\nexport * from \"./fusionservertoolopenrouter.js\";\nexport * from \"./generationcontentdata.js\";\nexport * from \"./generationcontentresponse.js\";\nexport * from \"./generationresponse.js\";\nexport * from \"./getbyokkeyresponse.js\";\nexport * from \"./getguardrailresponse.js\";\nexport * from \"./getobservabilitydestinationresponse.js\";\nexport * from \"./getpresetresponse.js\";\nexport * from \"./getpresetversionresponse.js\";\nexport * from \"./getworkspaceresponse.js\";\nexport * from \"./guardrail.js\";\nexport * from \"./guardrailinterval.js\";\nexport * from \"./imageconfig.js\";\nexport * from \"./imagegencallcompletedevent.js\";\nexport * from \"./imagegencallgeneratingevent.js\";\nexport * from \"./imagegencallinprogressevent.js\";\nexport * from \"./imagegencallpartialimageevent.js\";\nexport * from \"./imagegenerationservertool.js\";\nexport * from \"./imagegenerationservertoolconfig.js\";\nexport * from \"./imagegenerationservertoolconfigunion.js\";\nexport * from \"./imagegenerationservertoolopenrouter.js\";\nexport * from \"./imagegenerationstatus.js\";\nexport * from \"./incompletedetails.js\";\nexport * from \"./inputaudio.js\";\nexport * from \"./inputfile.js\";\nexport * from \"./inputimage.js\";\nexport * from \"./inputmessageitem.js\";\nexport * from \"./inputmodality.js\";\nexport * from \"./inputreference.js\";\nexport * from \"./inputsunion.js\";\nexport * from \"./inputtext.js\";\nexport * from \"./inputvideo.js\";\nexport * from \"./instructtype.js\";\nexport * from \"./internalserverresponseerrordata.js\";\nexport * from \"./itemreferenceitem.js\";\nexport * from \"./keyassignment.js\";\nexport * from \"./legacychatcontentvideo.js\";\nexport * from \"./legacywebsearchservertool.js\";\nexport * from \"./listbyokkeysresponse.js\";\nexport * from \"./listendpointsresponse.js\";\nexport * from \"./listguardrailsresponse.js\";\nexport * from \"./listkeyassignmentsresponse.js\";\nexport * from \"./listmemberassignmentsresponse.js\";\nexport * from \"./listobservabilitydestinationsresponse.js\";\nexport * from \"./listpresetsresponse.js\";\nexport * from \"./listpresetversionsresponse.js\";\nexport * from \"./listworkspacesresponse.js\";\nexport * from \"./localshellcallitem.js\";\nexport * from \"./localshellcalloutputitem.js\";\nexport * from \"./mcpapprovalrequestitem.js\";\nexport * from \"./mcpapprovalresponseitem.js\";\nexport * from \"./mcpcallitem.js\";\nexport * from \"./mcplisttoolsitem.js\";\nexport * from \"./mcpservertool.js\";\nexport * from \"./memberassignment.js\";\nexport * from \"./messagesadvisortoolresultblock.js\";\nexport * from \"./messagesfallbackparam.js\";\nexport * from \"./messagesmessageparam.js\";\nexport * from \"./messagesoutputconfig.js\";\nexport * from \"./messagesrequest.js\";\nexport * from \"./metadatalevel.js\";\nexport * from \"./model.js\";\nexport * from \"./modelarchitecture.js\";\nexport * from \"./modelbenchmarks.js\";\nexport * from \"./modelgroup.js\";\nexport * from \"./modellinks.js\";\nexport * from \"./modelresponse.js\";\nexport * from \"./modelscountresponse.js\";\nexport * from \"./modelslistresponse.js\";\nexport * from \"./moderationplugin.js\";\nexport * from \"./multimodalmedia.js\";\nexport * from \"./notfoundresponseerrordata.js\";\nexport * from \"./observabilityarizedestination.js\";\nexport * from \"./observabilitybraintrustdestination.js\";\nexport * from \"./observabilityclickhousedestination.js\";\nexport * from \"./observabilitydatadogdestination.js\";\nexport * from \"./observabilitydestination.js\";\nexport * from \"./observabilityfilterrulesconfig.js\";\nexport * from \"./observabilitygrafanadestination.js\";\nexport * from \"./observabilitylangfusedestination.js\";\nexport * from \"./observabilitylangsmithdestination.js\";\nexport * from \"./observabilitynewrelicdestination.js\";\nexport * from \"./observabilityopikdestination.js\";\nexport * from \"./observabilityotelcollectordestination.js\";\nexport * from \"./observabilityposthogdestination.js\";\nexport * from \"./observabilityrampdestination.js\";\nexport * from \"./observabilitys3destination.js\";\nexport * from \"./observabilitysentrydestination.js\";\nexport * from \"./observabilitysnowflakedestination.js\";\nexport * from \"./observabilityweavedestination.js\";\nexport * from \"./observabilitywebhookdestination.js\";\nexport * from \"./openairesponsecustomtoolcall.js\";\nexport * from \"./openairesponsecustomtoolcalloutput.js\";\nexport * from \"./openairesponsefunctiontoolcall.js\";\nexport * from \"./openairesponsefunctiontoolcalloutput.js\";\nexport * from \"./openairesponseinputmessageitem.js\";\nexport * from \"./openairesponsesannotation.js\";\nexport * from \"./openairesponsesrefusalcontent.js\";\nexport * from \"./openairesponsesresponsestatus.js\";\nexport * from \"./openairesponsestoolchoiceunion.js\";\nexport * from \"./openairesponsestruncation.js\";\nexport * from \"./openresponsescreatedevent.js\";\nexport * from \"./openresponsesinprogressevent.js\";\nexport * from \"./openresponsesresult.js\";\nexport * from \"./openroutermetadata.js\";\nexport * from \"./openrouterwebsearchservertool.js\";\nexport * from \"./outputadvisorservertoolitem.js\";\nexport * from \"./outputapplypatchcallitem.js\";\nexport * from \"./outputapplypatchservertoolitem.js\";\nexport * from \"./outputbashservertoolitem.js\";\nexport * from \"./outputbrowseruseservertoolitem.js\";\nexport * from \"./outputcodeinterpretercallitem.js\";\nexport * from \"./outputcodeinterpreterservertoolitem.js\";\nexport * from \"./outputcomputercallitem.js\";\nexport * from \"./outputcustomtoolcallitem.js\";\nexport * from \"./outputdatetimeitem.js\";\nexport * from \"./outputfilesearchcallitem.js\";\nexport * from \"./outputfilesearchservertoolitem.js\";\nexport * from \"./outputfunctioncallitem.js\";\nexport * from \"./outputfusionservertoolitem.js\";\nexport * from \"./outputimagegenerationcallitem.js\";\nexport * from \"./outputimagegenerationservertoolitem.js\";\nexport * from \"./outputitemimagegenerationcall.js\";\nexport * from \"./outputitems.js\";\nexport * from \"./outputmcpservertoolitem.js\";\nexport * from \"./outputmemoryservertoolitem.js\";\nexport * from \"./outputmessage.js\";\nexport * from \"./outputmessageitem.js\";\nexport * from \"./outputmodality.js\";\nexport * from \"./outputmodalityenum.js\";\nexport * from \"./outputreasoningitem.js\";\nexport * from \"./outputsearchmodelsservertoolitem.js\";\nexport * from \"./outputshellcallitem.js\";\nexport * from \"./outputshellcalloutputitem.js\";\nexport * from \"./outputsubagentservertoolitem.js\";\nexport * from \"./outputtexteditorservertoolitem.js\";\nexport * from \"./outputtoolsearchservertoolitem.js\";\nexport * from \"./outputwebfetchservertoolitem.js\";\nexport * from \"./outputwebsearchcallitem.js\";\nexport * from \"./outputwebsearchservertoolitem.js\";\nexport * from \"./parameter.js\";\nexport * from \"./paretorouterplugin.js\";\nexport * from \"./payloadtoolargeresponseerrordata.js\";\nexport * from \"./paymentrequiredresponseerrordata.js\";\nexport * from \"./pdfparserengine.js\";\nexport * from \"./pdfparseroptions.js\";\nexport * from \"./percentilelatencycutoffs.js\";\nexport * from \"./percentilestats.js\";\nexport * from \"./percentilethroughputcutoffs.js\";\nexport * from \"./perrequestlimits.js\";\nexport * from \"./pipelinestage.js\";\nexport * from \"./pipelinestagetype.js\";\nexport * from \"./preferredmaxlatency.js\";\nexport * from \"./preferredminthroughput.js\";\nexport * from \"./preset.js\";\nexport * from \"./presetdesignatedversion.js\";\nexport * from \"./presetstatus.js\";\nexport * from \"./presetwithdesignatedversion.js\";\nexport * from \"./preview20250311websearchservertool.js\";\nexport * from \"./previewwebsearchservertool.js\";\nexport * from \"./previewwebsearchuserlocation.js\";\nexport * from \"./promptinjectionscanscope.js\";\nexport * from \"./providername.js\";\nexport * from \"./provideroptions.js\";\nexport * from \"./provideroverloadedresponseerrordata.js\";\nexport * from \"./providerpreferences.js\";\nexport * from \"./providerresponse.js\";\nexport * from \"./providersort.js\";\nexport * from \"./providersortconfig.js\";\nexport * from \"./publicendpoint.js\";\nexport * from \"./publicpricing.js\";\nexport * from \"./quantization.js\";\nexport * from \"./rankingsdailyitem.js\";\nexport * from \"./rankingsdailymeta.js\";\nexport * from \"./rankingsdailyresponse.js\";\nexport * from \"./reasoningconfig.js\";\nexport * from \"./reasoningdeltaevent.js\";\nexport * from \"./reasoningdetailencrypted.js\";\nexport * from \"./reasoningdetailsummary.js\";\nexport * from \"./reasoningdetailtext.js\";\nexport * from \"./reasoningdetailunion.js\";\nexport * from \"./reasoningdoneevent.js\";\nexport * from \"./reasoningeffort.js\";\nexport * from \"./reasoningformat.js\";\nexport * from \"./reasoningitem.js\";\nexport * from \"./reasoningsummarypartaddedevent.js\";\nexport * from \"./reasoningsummarypartdoneevent.js\";\nexport * from \"./reasoningsummarytext.js\";\nexport * from \"./reasoningsummarytextdeltaevent.js\";\nexport * from \"./reasoningsummarytextdoneevent.js\";\nexport * from \"./reasoningsummaryverbosity.js\";\nexport * from \"./reasoningtextcontent.js\";\nexport * from \"./refusaldeltaevent.js\";\nexport * from \"./refusaldoneevent.js\";\nexport * from \"./requesttimeoutresponseerrordata.js\";\nexport * from \"./responsehealingplugin.js\";\nexport * from \"./responseincludesenum.js\";\nexport * from \"./responseoutputtext.js\";\nexport * from \"./responseserrorfield.js\";\nexport * from \"./responsesrequest.js\";\nexport * from \"./responsesstreamingresponse.js\";\nexport * from \"./routerattempt.js\";\nexport * from \"./routerparams.js\";\nexport * from \"./routingstrategy.js\";\nexport * from \"./searchcontextsizeenum.js\";\nexport * from \"./searchmodelsservertoolconfig.js\";\nexport * from \"./searchqualitylevel.js\";\nexport * from \"./security.js\";\nexport * from \"./serviceunavailableresponseerrordata.js\";\nexport * from \"./shellcallitem.js\";\nexport * from \"./shellcalloutputitem.js\";\nexport * from \"./shellcallstatus.js\";\nexport * from \"./shellservertool.js\";\nexport * from \"./shellservertoolconfig.js\";\nexport * from \"./shellservertoolengine.js\";\nexport * from \"./shellservertoolenvironment.js\";\nexport * from \"./shellservertoolopenrouter.js\";\nexport * from \"./speechrequest.js\";\nexport * from \"./stopservertoolswhencondition.js\";\nexport * from \"./stopservertoolswhenfinishreasonis.js\";\nexport * from \"./stopservertoolswhenhastoolcall.js\";\nexport * from \"./stopservertoolswhenmaxcost.js\";\nexport * from \"./stopservertoolswhenmaxtokensused.js\";\nexport * from \"./stopservertoolswhenstepcountis.js\";\nexport * from \"./storedprompttemplate.js\";\nexport * from \"./streamevents.js\";\nexport * from \"./streameventsresponsecompleted.js\";\nexport * from \"./streameventsresponsefailed.js\";\nexport * from \"./streameventsresponseincomplete.js\";\nexport * from \"./streameventsresponseoutputitemadded.js\";\nexport * from \"./streameventsresponseoutputitemdone.js\";\nexport * from \"./streamlogprob.js\";\nexport * from \"./streamlogprobtoplogprob.js\";\nexport * from \"./sttinputaudio.js\";\nexport * from \"./sttrequest.js\";\nexport * from \"./sttresponse.js\";\nexport * from \"./sttusage.js\";\nexport * from \"./subagentnestedtool.js\";\nexport * from \"./subagentreasoning.js\";\nexport * from \"./subagentservertoolconfig.js\";\nexport * from \"./subagentservertoolopenrouter.js\";\nexport * from \"./textdeltaevent.js\";\nexport * from \"./textdoneevent.js\";\nexport * from \"./textextendedconfig.js\";\nexport * from \"./toolcallstatus.js\";\nexport * from \"./toolchoiceallowed.js\";\nexport * from \"./toomanyrequestsresponseerrordata.js\";\nexport * from \"./topproviderinfo.js\";\nexport * from \"./traceconfig.js\";\nexport * from \"./truncation.js\";\nexport * from \"./unauthorizedresponseerrordata.js\";\nexport * from \"./unprocessableentityresponseerrordata.js\";\nexport * from \"./updatebyokkeyrequest.js\";\nexport * from \"./updatebyokkeyresponse.js\";\nexport * from \"./updateguardrailrequest.js\";\nexport * from \"./updateguardrailresponse.js\";\nexport * from \"./updateobservabilitydestinationrequest.js\";\nexport * from \"./updateobservabilitydestinationresponse.js\";\nexport * from \"./updateworkspacerequest.js\";\nexport * from \"./updateworkspaceresponse.js\";\nexport * from \"./urlcitation.js\";\nexport * from \"./usage.js\";\nexport * from \"./videogenerationrequest.js\";\nexport * from \"./videogenerationresponse.js\";\nexport * from \"./videogenerationusage.js\";\nexport * from \"./videomodel.js\";\nexport * from \"./videomodelslistresponse.js\";\nexport * from \"./webfetchengineenum.js\";\nexport * from \"./webfetchplugin.js\";\nexport * from \"./webfetchservertool.js\";\nexport * from \"./webfetchservertoolconfig.js\";\nexport * from \"./websearchcallcompletedevent.js\";\nexport * from \"./websearchcallinprogressevent.js\";\nexport * from \"./websearchcallsearchingevent.js\";\nexport * from \"./websearchconfig.js\";\nexport * from \"./websearchdomainfilter.js\";\nexport * from \"./websearchengine.js\";\nexport * from \"./websearchengineenum.js\";\nexport * from \"./websearchplugin.js\";\nexport * from \"./websearchservertool.js\";\nexport * from \"./websearchservertoolconfig.js\";\nexport * from \"./websearchservertoolopenrouter.js\";\nexport * from \"./websearchsource.js\";\nexport * from \"./websearchstatus.js\";\nexport * from \"./websearchuserlocation.js\";\nexport * from \"./websearchuserlocationservertool.js\";\nexport * from \"./workspace.js\";\nexport * from \"./workspacemember.js\";\n//# sourceMappingURL=index.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6264bb9f01d6\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\nimport { OpenRouterError } from \"./openroutererror.js\";\n/**\n * Bad Gateway - Provider/upstream API failure\n */\nexport class BadGatewayResponseError extends OpenRouterError {\n    constructor(err, httpMeta) {\n        const message = err.error?.message\n            || `API error occurred: ${JSON.stringify(err)}`;\n        super(message, httpMeta);\n        this.data$ = err;\n        this.error = err.error;\n        if (err.openrouterMetadata != null) {\n            this.openrouterMetadata = err.openrouterMetadata;\n        }\n        if (err.userId != null)\n            this.userId = err.userId;\n        this.name = \"BadGatewayResponseError\";\n    }\n}\n/** @internal */\nexport const BadGatewayResponseError$inboundSchema = z.object({\n    error: models.BadGatewayResponseErrorData$inboundSchema,\n    openrouter_metadata: z.nullable(z.record(z.string(), z.nullable(z.any())))\n        .optional(),\n    user_id: z.nullable(z.string()).optional(),\n    request$: z.custom(x => x instanceof Request),\n    response$: z.custom(x => x instanceof Response),\n    body$: z.string(),\n})\n    .transform((v) => {\n    const remapped = remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"user_id\": \"userId\",\n    });\n    return new BadGatewayResponseError(remapped, {\n        request: v.request$,\n        response: v.response$,\n        body: v.body$,\n    });\n});\n//# sourceMappingURL=badgatewayresponseerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: beddfd22a313\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\nimport { OpenRouterError } from \"./openroutererror.js\";\n/**\n * Bad Request - Invalid request parameters or malformed input\n */\nexport class BadRequestResponseError extends OpenRouterError {\n    constructor(err, httpMeta) {\n        const message = err.error?.message\n            || `API error occurred: ${JSON.stringify(err)}`;\n        super(message, httpMeta);\n        this.data$ = err;\n        this.error = err.error;\n        if (err.openrouterMetadata != null) {\n            this.openrouterMetadata = err.openrouterMetadata;\n        }\n        if (err.userId != null)\n            this.userId = err.userId;\n        this.name = \"BadRequestResponseError\";\n    }\n}\n/** @internal */\nexport const BadRequestResponseError$inboundSchema = z.object({\n    error: models.BadRequestResponseErrorData$inboundSchema,\n    openrouter_metadata: z.nullable(z.record(z.string(), z.nullable(z.any())))\n        .optional(),\n    user_id: z.nullable(z.string()).optional(),\n    request$: z.custom(x => x instanceof Request),\n    response$: z.custom(x => x instanceof Response),\n    body$: z.string(),\n})\n    .transform((v) => {\n    const remapped = remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"user_id\": \"userId\",\n    });\n    return new BadRequestResponseError(remapped, {\n        request: v.request$,\n        response: v.response$,\n        body: v.body$,\n    });\n});\n//# sourceMappingURL=badrequestresponseerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3d49b17cca5f\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\nimport { OpenRouterError } from \"./openroutererror.js\";\n/**\n * Conflict - Resource conflict or concurrent modification\n */\nexport class ConflictResponseError extends OpenRouterError {\n    constructor(err, httpMeta) {\n        const message = err.error?.message\n            || `API error occurred: ${JSON.stringify(err)}`;\n        super(message, httpMeta);\n        this.data$ = err;\n        this.error = err.error;\n        if (err.openrouterMetadata != null) {\n            this.openrouterMetadata = err.openrouterMetadata;\n        }\n        if (err.userId != null)\n            this.userId = err.userId;\n        this.name = \"ConflictResponseError\";\n    }\n}\n/** @internal */\nexport const ConflictResponseError$inboundSchema = z.object({\n    error: models.ConflictResponseErrorData$inboundSchema,\n    openrouter_metadata: z.nullable(z.record(z.string(), z.nullable(z.any())))\n        .optional(),\n    user_id: z.nullable(z.string()).optional(),\n    request$: z.custom(x => x instanceof Request),\n    response$: z.custom(x => x instanceof Response),\n    body$: z.string(),\n})\n    .transform((v) => {\n    const remapped = remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"user_id\": \"userId\",\n    });\n    return new ConflictResponseError(remapped, {\n        request: v.request$,\n        response: v.response$,\n        body: v.body$,\n    });\n});\n//# sourceMappingURL=conflictresponseerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: da53f308c771\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\nimport { OpenRouterError } from \"./openroutererror.js\";\n/**\n * Infrastructure Timeout - Provider request timed out at edge network\n */\nexport class EdgeNetworkTimeoutResponseError extends OpenRouterError {\n    constructor(err, httpMeta) {\n        const message = err.error?.message\n            || `API error occurred: ${JSON.stringify(err)}`;\n        super(message, httpMeta);\n        this.data$ = err;\n        this.error = err.error;\n        if (err.openrouterMetadata != null) {\n            this.openrouterMetadata = err.openrouterMetadata;\n        }\n        if (err.userId != null)\n            this.userId = err.userId;\n        this.name = \"EdgeNetworkTimeoutResponseError\";\n    }\n}\n/** @internal */\nexport const EdgeNetworkTimeoutResponseError$inboundSchema = z.object({\n    error: models.EdgeNetworkTimeoutResponseErrorData$inboundSchema,\n    openrouter_metadata: z.nullable(z.record(z.string(), z.nullable(z.any())))\n        .optional(),\n    user_id: z.nullable(z.string()).optional(),\n    request$: z.custom(x => x instanceof Request),\n    response$: z.custom(x => x instanceof Response),\n    body$: z.string(),\n})\n    .transform((v) => {\n    const remapped = remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"user_id\": \"userId\",\n    });\n    return new EdgeNetworkTimeoutResponseError(remapped, {\n        request: v.request$,\n        response: v.response$,\n        body: v.body$,\n    });\n});\n//# sourceMappingURL=edgenetworktimeoutresponseerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d08a9d9ee588\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\nimport { OpenRouterError } from \"./openroutererror.js\";\n/**\n * Forbidden - Authentication successful but insufficient permissions\n */\nexport class ForbiddenResponseError extends OpenRouterError {\n    constructor(err, httpMeta) {\n        const message = err.error?.message\n            || `API error occurred: ${JSON.stringify(err)}`;\n        super(message, httpMeta);\n        this.data$ = err;\n        this.error = err.error;\n        if (err.openrouterMetadata != null) {\n            this.openrouterMetadata = err.openrouterMetadata;\n        }\n        if (err.userId != null)\n            this.userId = err.userId;\n        this.name = \"ForbiddenResponseError\";\n    }\n}\n/** @internal */\nexport const ForbiddenResponseError$inboundSchema = z.object({\n    error: models.ForbiddenResponseErrorData$inboundSchema,\n    openrouter_metadata: z.nullable(z.record(z.string(), z.nullable(z.any())))\n        .optional(),\n    user_id: z.nullable(z.string()).optional(),\n    request$: z.custom(x => x instanceof Request),\n    response$: z.custom(x => x instanceof Response),\n    body$: z.string(),\n})\n    .transform((v) => {\n    const remapped = remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"user_id\": \"userId\",\n    });\n    return new ForbiddenResponseError(remapped, {\n        request: v.request$,\n        response: v.response$,\n        body: v.body$,\n    });\n});\n//# sourceMappingURL=forbiddenresponseerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6948de76af99\n */\n/**\n * Base class for all HTTP errors.\n */\nexport class HTTPClientError extends Error {\n    constructor(message, opts) {\n        let msg = message;\n        if (opts?.cause) {\n            msg += `: ${opts.cause}`;\n        }\n        super(msg, opts);\n        this.name = \"HTTPClientError\";\n        // In older runtimes, the cause field would not have been assigned through\n        // the super() call.\n        if (typeof this.cause === \"undefined\") {\n            this.cause = opts?.cause;\n        }\n    }\n}\n/**\n * An error to capture unrecognised or unexpected errors when making HTTP calls.\n */\nexport class UnexpectedClientError extends HTTPClientError {\n    constructor() {\n        super(...arguments);\n        this.name = \"UnexpectedClientError\";\n    }\n}\n/**\n * An error that is raised when any inputs used to create a request are invalid.\n */\nexport class InvalidRequestError extends HTTPClientError {\n    constructor() {\n        super(...arguments);\n        this.name = \"InvalidRequestError\";\n    }\n}\n/**\n * An error that is raised when a HTTP request was aborted by the client error.\n */\nexport class RequestAbortedError extends HTTPClientError {\n    constructor() {\n        super(...arguments);\n        this.name = \"RequestAbortedError\";\n    }\n}\n/**\n * An error that is raised when a HTTP request timed out due to an AbortSignal\n * signal timeout.\n */\nexport class RequestTimeoutError extends HTTPClientError {\n    constructor() {\n        super(...arguments);\n        this.name = \"RequestTimeoutError\";\n    }\n}\n/**\n * An error that is raised when a HTTP client is unable to make a request to\n * a server.\n */\nexport class ConnectionError extends HTTPClientError {\n    constructor() {\n        super(...arguments);\n        this.name = \"ConnectionError\";\n    }\n}\n//# sourceMappingURL=httpclienterrors.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 02b76cec85f0\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\nimport { OpenRouterError } from \"./openroutererror.js\";\n/**\n * Internal Server Error - Unexpected server error\n */\nexport class InternalServerResponseError extends OpenRouterError {\n    constructor(err, httpMeta) {\n        const message = err.error?.message\n            || `API error occurred: ${JSON.stringify(err)}`;\n        super(message, httpMeta);\n        this.data$ = err;\n        this.error = err.error;\n        if (err.openrouterMetadata != null) {\n            this.openrouterMetadata = err.openrouterMetadata;\n        }\n        if (err.userId != null)\n            this.userId = err.userId;\n        this.name = \"InternalServerResponseError\";\n    }\n}\n/** @internal */\nexport const InternalServerResponseError$inboundSchema = z.object({\n    error: models.InternalServerResponseErrorData$inboundSchema,\n    openrouter_metadata: z.nullable(z.record(z.string(), z.nullable(z.any())))\n        .optional(),\n    user_id: z.nullable(z.string()).optional(),\n    request$: z.custom(x => x instanceof Request),\n    response$: z.custom(x => x instanceof Response),\n    body$: z.string(),\n})\n    .transform((v) => {\n    const remapped = remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"user_id\": \"userId\",\n    });\n    return new InternalServerResponseError(remapped, {\n        request: v.request$,\n        response: v.response$,\n        body: v.body$,\n    });\n});\n//# sourceMappingURL=internalserverresponseerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1914d6d7fbaf\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\nimport { OpenRouterError } from \"./openroutererror.js\";\n/**\n * Not Found - Resource does not exist\n */\nexport class NotFoundResponseError extends OpenRouterError {\n    constructor(err, httpMeta) {\n        const message = err.error?.message\n            || `API error occurred: ${JSON.stringify(err)}`;\n        super(message, httpMeta);\n        this.data$ = err;\n        this.error = err.error;\n        if (err.openrouterMetadata != null) {\n            this.openrouterMetadata = err.openrouterMetadata;\n        }\n        if (err.userId != null)\n            this.userId = err.userId;\n        this.name = \"NotFoundResponseError\";\n    }\n}\n/** @internal */\nexport const NotFoundResponseError$inboundSchema = z.object({\n    error: models.NotFoundResponseErrorData$inboundSchema,\n    openrouter_metadata: z.nullable(z.record(z.string(), z.nullable(z.any())))\n        .optional(),\n    user_id: z.nullable(z.string()).optional(),\n    request$: z.custom(x => x instanceof Request),\n    response$: z.custom(x => x instanceof Response),\n    body$: z.string(),\n})\n    .transform((v) => {\n    const remapped = remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"user_id\": \"userId\",\n    });\n    return new NotFoundResponseError(remapped, {\n        request: v.request$,\n        response: v.response$,\n        body: v.body$,\n    });\n});\n//# sourceMappingURL=notfoundresponseerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f1e472cb7b51\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\nimport { OpenRouterError } from \"./openroutererror.js\";\n/**\n * Payload Too Large - Request payload exceeds size limits\n */\nexport class PayloadTooLargeResponseError extends OpenRouterError {\n    constructor(err, httpMeta) {\n        const message = err.error?.message\n            || `API error occurred: ${JSON.stringify(err)}`;\n        super(message, httpMeta);\n        this.data$ = err;\n        this.error = err.error;\n        if (err.openrouterMetadata != null) {\n            this.openrouterMetadata = err.openrouterMetadata;\n        }\n        if (err.userId != null)\n            this.userId = err.userId;\n        this.name = \"PayloadTooLargeResponseError\";\n    }\n}\n/** @internal */\nexport const PayloadTooLargeResponseError$inboundSchema = z.object({\n    error: models.PayloadTooLargeResponseErrorData$inboundSchema,\n    openrouter_metadata: z.nullable(z.record(z.string(), z.nullable(z.any())))\n        .optional(),\n    user_id: z.nullable(z.string()).optional(),\n    request$: z.custom(x => x instanceof Request),\n    response$: z.custom(x => x instanceof Response),\n    body$: z.string(),\n})\n    .transform((v) => {\n    const remapped = remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"user_id\": \"userId\",\n    });\n    return new PayloadTooLargeResponseError(remapped, {\n        request: v.request$,\n        response: v.response$,\n        body: v.body$,\n    });\n});\n//# sourceMappingURL=payloadtoolargeresponseerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f70439757fb9\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\nimport { OpenRouterError } from \"./openroutererror.js\";\n/**\n * Payment Required - Insufficient credits or quota to complete request\n */\nexport class PaymentRequiredResponseError extends OpenRouterError {\n    constructor(err, httpMeta) {\n        const message = err.error?.message\n            || `API error occurred: ${JSON.stringify(err)}`;\n        super(message, httpMeta);\n        this.data$ = err;\n        this.error = err.error;\n        if (err.openrouterMetadata != null) {\n            this.openrouterMetadata = err.openrouterMetadata;\n        }\n        if (err.userId != null)\n            this.userId = err.userId;\n        this.name = \"PaymentRequiredResponseError\";\n    }\n}\n/** @internal */\nexport const PaymentRequiredResponseError$inboundSchema = z.object({\n    error: models.PaymentRequiredResponseErrorData$inboundSchema,\n    openrouter_metadata: z.nullable(z.record(z.string(), z.nullable(z.any())))\n        .optional(),\n    user_id: z.nullable(z.string()).optional(),\n    request$: z.custom(x => x instanceof Request),\n    response$: z.custom(x => x instanceof Response),\n    body$: z.string(),\n})\n    .transform((v) => {\n    const remapped = remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"user_id\": \"userId\",\n    });\n    return new PaymentRequiredResponseError(remapped, {\n        request: v.request$,\n        response: v.response$,\n        body: v.body$,\n    });\n});\n//# sourceMappingURL=paymentrequiredresponseerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ba8edf813fa0\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\nimport { OpenRouterError } from \"./openroutererror.js\";\n/**\n * Provider Overloaded - Provider is temporarily overloaded\n */\nexport class ProviderOverloadedResponseError extends OpenRouterError {\n    constructor(err, httpMeta) {\n        const message = err.error?.message\n            || `API error occurred: ${JSON.stringify(err)}`;\n        super(message, httpMeta);\n        this.data$ = err;\n        this.error = err.error;\n        if (err.openrouterMetadata != null) {\n            this.openrouterMetadata = err.openrouterMetadata;\n        }\n        if (err.userId != null)\n            this.userId = err.userId;\n        this.name = \"ProviderOverloadedResponseError\";\n    }\n}\n/** @internal */\nexport const ProviderOverloadedResponseError$inboundSchema = z.object({\n    error: models.ProviderOverloadedResponseErrorData$inboundSchema,\n    openrouter_metadata: z.nullable(z.record(z.string(), z.nullable(z.any())))\n        .optional(),\n    user_id: z.nullable(z.string()).optional(),\n    request$: z.custom(x => x instanceof Request),\n    response$: z.custom(x => x instanceof Response),\n    body$: z.string(),\n})\n    .transform((v) => {\n    const remapped = remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"user_id\": \"userId\",\n    });\n    return new ProviderOverloadedResponseError(remapped, {\n        request: v.request$,\n        response: v.response$,\n        body: v.body$,\n    });\n});\n//# sourceMappingURL=provideroverloadedresponseerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3a4a755c8536\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\nimport { OpenRouterError } from \"./openroutererror.js\";\n/**\n * Request Timeout - Operation exceeded time limit\n */\nexport class RequestTimeoutResponseError extends OpenRouterError {\n    constructor(err, httpMeta) {\n        const message = err.error?.message\n            || `API error occurred: ${JSON.stringify(err)}`;\n        super(message, httpMeta);\n        this.data$ = err;\n        this.error = err.error;\n        if (err.openrouterMetadata != null) {\n            this.openrouterMetadata = err.openrouterMetadata;\n        }\n        if (err.userId != null)\n            this.userId = err.userId;\n        this.name = \"RequestTimeoutResponseError\";\n    }\n}\n/** @internal */\nexport const RequestTimeoutResponseError$inboundSchema = z.object({\n    error: models.RequestTimeoutResponseErrorData$inboundSchema,\n    openrouter_metadata: z.nullable(z.record(z.string(), z.nullable(z.any())))\n        .optional(),\n    user_id: z.nullable(z.string()).optional(),\n    request$: z.custom(x => x instanceof Request),\n    response$: z.custom(x => x instanceof Response),\n    body$: z.string(),\n})\n    .transform((v) => {\n    const remapped = remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"user_id\": \"userId\",\n    });\n    return new RequestTimeoutResponseError(remapped, {\n        request: v.request$,\n        response: v.response$,\n        body: v.body$,\n    });\n});\n//# sourceMappingURL=requesttimeoutresponseerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1259f9d051c8\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\nimport { OpenRouterError } from \"./openroutererror.js\";\n/**\n * Service Unavailable - Service temporarily unavailable\n */\nexport class ServiceUnavailableResponseError extends OpenRouterError {\n    constructor(err, httpMeta) {\n        const message = err.error?.message\n            || `API error occurred: ${JSON.stringify(err)}`;\n        super(message, httpMeta);\n        this.data$ = err;\n        this.error = err.error;\n        if (err.openrouterMetadata != null) {\n            this.openrouterMetadata = err.openrouterMetadata;\n        }\n        if (err.userId != null)\n            this.userId = err.userId;\n        this.name = \"ServiceUnavailableResponseError\";\n    }\n}\n/** @internal */\nexport const ServiceUnavailableResponseError$inboundSchema = z.object({\n    error: models.ServiceUnavailableResponseErrorData$inboundSchema,\n    openrouter_metadata: z.nullable(z.record(z.string(), z.nullable(z.any())))\n        .optional(),\n    user_id: z.nullable(z.string()).optional(),\n    request$: z.custom(x => x instanceof Request),\n    response$: z.custom(x => x instanceof Response),\n    body$: z.string(),\n})\n    .transform((v) => {\n    const remapped = remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"user_id\": \"userId\",\n    });\n    return new ServiceUnavailableResponseError(remapped, {\n        request: v.request$,\n        response: v.response$,\n        body: v.body$,\n    });\n});\n//# sourceMappingURL=serviceunavailableresponseerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ab15bfa145f3\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\nimport { OpenRouterError } from \"./openroutererror.js\";\n/**\n * Too Many Requests - Rate limit exceeded\n */\nexport class TooManyRequestsResponseError extends OpenRouterError {\n    constructor(err, httpMeta) {\n        const message = err.error?.message\n            || `API error occurred: ${JSON.stringify(err)}`;\n        super(message, httpMeta);\n        this.data$ = err;\n        this.error = err.error;\n        if (err.openrouterMetadata != null) {\n            this.openrouterMetadata = err.openrouterMetadata;\n        }\n        if (err.userId != null)\n            this.userId = err.userId;\n        this.name = \"TooManyRequestsResponseError\";\n    }\n}\n/** @internal */\nexport const TooManyRequestsResponseError$inboundSchema = z.object({\n    error: models.TooManyRequestsResponseErrorData$inboundSchema,\n    openrouter_metadata: z.nullable(z.record(z.string(), z.nullable(z.any())))\n        .optional(),\n    user_id: z.nullable(z.string()).optional(),\n    request$: z.custom(x => x instanceof Request),\n    response$: z.custom(x => x instanceof Response),\n    body$: z.string(),\n})\n    .transform((v) => {\n    const remapped = remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"user_id\": \"userId\",\n    });\n    return new TooManyRequestsResponseError(remapped, {\n        request: v.request$,\n        response: v.response$,\n        body: v.body$,\n    });\n});\n//# sourceMappingURL=toomanyrequestsresponseerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 79ab0861cf08\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\nimport { OpenRouterError } from \"./openroutererror.js\";\n/**\n * Unauthorized - Authentication required or invalid credentials\n */\nexport class UnauthorizedResponseError extends OpenRouterError {\n    constructor(err, httpMeta) {\n        const message = err.error?.message\n            || `API error occurred: ${JSON.stringify(err)}`;\n        super(message, httpMeta);\n        this.data$ = err;\n        this.error = err.error;\n        if (err.openrouterMetadata != null) {\n            this.openrouterMetadata = err.openrouterMetadata;\n        }\n        if (err.userId != null)\n            this.userId = err.userId;\n        this.name = \"UnauthorizedResponseError\";\n    }\n}\n/** @internal */\nexport const UnauthorizedResponseError$inboundSchema = z.object({\n    error: models.UnauthorizedResponseErrorData$inboundSchema,\n    openrouter_metadata: z.nullable(z.record(z.string(), z.nullable(z.any())))\n        .optional(),\n    user_id: z.nullable(z.string()).optional(),\n    request$: z.custom(x => x instanceof Request),\n    response$: z.custom(x => x instanceof Response),\n    body$: z.string(),\n})\n    .transform((v) => {\n    const remapped = remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"user_id\": \"userId\",\n    });\n    return new UnauthorizedResponseError(remapped, {\n        request: v.request$,\n        response: v.response$,\n        body: v.body$,\n    });\n});\n//# sourceMappingURL=unauthorizedresponseerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d81e01bbb5e3\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\nimport { OpenRouterError } from \"./openroutererror.js\";\n/**\n * Unprocessable Entity - Semantic validation failure\n */\nexport class UnprocessableEntityResponseError extends OpenRouterError {\n    constructor(err, httpMeta) {\n        const message = err.error?.message\n            || `API error occurred: ${JSON.stringify(err)}`;\n        super(message, httpMeta);\n        this.data$ = err;\n        this.error = err.error;\n        if (err.openrouterMetadata != null) {\n            this.openrouterMetadata = err.openrouterMetadata;\n        }\n        if (err.userId != null)\n            this.userId = err.userId;\n        this.name = \"UnprocessableEntityResponseError\";\n    }\n}\n/** @internal */\nexport const UnprocessableEntityResponseError$inboundSchema = z.object({\n    error: models.UnprocessableEntityResponseErrorData$inboundSchema,\n    openrouter_metadata: z.nullable(z.record(z.string(), z.nullable(z.any())))\n        .optional(),\n    user_id: z.nullable(z.string()).optional(),\n    request$: z.custom(x => x instanceof Request),\n    response$: z.custom(x => x instanceof Response),\n    body$: z.string(),\n})\n    .transform((v) => {\n    const remapped = remap$(v, {\n        \"openrouter_metadata\": \"openrouterMetadata\",\n        \"user_id\": \"userId\",\n    });\n    return new UnprocessableEntityResponseError(remapped, {\n        request: v.request$,\n        response: v.response$,\n        body: v.body$,\n    });\n});\n//# sourceMappingURL=unprocessableentityresponseerror.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: c4e22507cb83\n */\nexport * from \"./badgatewayresponseerror.js\";\nexport * from \"./badrequestresponseerror.js\";\nexport * from \"./conflictresponseerror.js\";\nexport * from \"./edgenetworktimeoutresponseerror.js\";\nexport * from \"./forbiddenresponseerror.js\";\nexport * from \"./httpclienterrors.js\";\nexport * from \"./internalserverresponseerror.js\";\nexport * from \"./notfoundresponseerror.js\";\nexport * from \"./openrouterdefaulterror.js\";\nexport * from \"./openroutererror.js\";\nexport * from \"./payloadtoolargeresponseerror.js\";\nexport * from \"./paymentrequiredresponseerror.js\";\nexport * from \"./provideroverloadedresponseerror.js\";\nexport * from \"./requesttimeoutresponseerror.js\";\nexport * from \"./responsevalidationerror.js\";\nexport * from \"./sdkvalidationerror.js\";\nexport * from \"./serviceunavailableresponseerror.js\";\nexport * from \"./toomanyrequestsresponseerror.js\";\nexport * from \"./unauthorizedresponseerror.js\";\nexport * from \"./unprocessableentityresponseerror.js\";\n//# sourceMappingURL=index.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5868f2fbd4d9\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const BulkAddWorkspaceMembersRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n    bulkAddWorkspaceMembersRequest: models.BulkAddWorkspaceMembersRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        bulkAddWorkspaceMembersRequest: \"BulkAddWorkspaceMembersRequest\",\n    });\n});\nexport function bulkAddWorkspaceMembersRequestToJSON(bulkAddWorkspaceMembersRequest) {\n    return JSON.stringify(BulkAddWorkspaceMembersRequest$outboundSchema.parse(bulkAddWorkspaceMembersRequest));\n}\n//# sourceMappingURL=bulkaddworkspacemembers.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4f855e3ea589\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const BulkAssignKeysToGuardrailRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n    bulkAssignKeysRequest: models.BulkAssignKeysRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        bulkAssignKeysRequest: \"BulkAssignKeysRequest\",\n    });\n});\nexport function bulkAssignKeysToGuardrailRequestToJSON(bulkAssignKeysToGuardrailRequest) {\n    return JSON.stringify(BulkAssignKeysToGuardrailRequest$outboundSchema.parse(bulkAssignKeysToGuardrailRequest));\n}\n//# sourceMappingURL=bulkassignkeystoguardrail.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 09a0f06fd33d\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const BulkAssignMembersToGuardrailRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n    bulkAssignMembersRequest: models.BulkAssignMembersRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        bulkAssignMembersRequest: \"BulkAssignMembersRequest\",\n    });\n});\nexport function bulkAssignMembersToGuardrailRequestToJSON(bulkAssignMembersToGuardrailRequest) {\n    return JSON.stringify(BulkAssignMembersToGuardrailRequest$outboundSchema.parse(bulkAssignMembersToGuardrailRequest));\n}\n//# sourceMappingURL=bulkassignmemberstoguardrail.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 82eaae6cae60\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const BulkRemoveWorkspaceMembersRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n    bulkRemoveWorkspaceMembersRequest: models.BulkRemoveWorkspaceMembersRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        bulkRemoveWorkspaceMembersRequest: \"BulkRemoveWorkspaceMembersRequest\",\n    });\n});\nexport function bulkRemoveWorkspaceMembersRequestToJSON(bulkRemoveWorkspaceMembersRequest) {\n    return JSON.stringify(BulkRemoveWorkspaceMembersRequest$outboundSchema.parse(bulkRemoveWorkspaceMembersRequest));\n}\n//# sourceMappingURL=bulkremoveworkspacemembers.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5ff688d2a0f6\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const BulkUnassignKeysFromGuardrailRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n    bulkUnassignKeysRequest: models.BulkUnassignKeysRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        bulkUnassignKeysRequest: \"BulkUnassignKeysRequest\",\n    });\n});\nexport function bulkUnassignKeysFromGuardrailRequestToJSON(bulkUnassignKeysFromGuardrailRequest) {\n    return JSON.stringify(BulkUnassignKeysFromGuardrailRequest$outboundSchema.parse(bulkUnassignKeysFromGuardrailRequest));\n}\n//# sourceMappingURL=bulkunassignkeysfromguardrail.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ab90e9780326\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const BulkUnassignMembersFromGuardrailRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n    bulkUnassignMembersRequest: models.BulkUnassignMembersRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        bulkUnassignMembersRequest: \"BulkUnassignMembersRequest\",\n    });\n});\nexport function bulkUnassignMembersFromGuardrailRequestToJSON(bulkUnassignMembersFromGuardrailRequest) {\n    return JSON.stringify(BulkUnassignMembersFromGuardrailRequest$outboundSchema.parse(bulkUnassignMembersFromGuardrailRequest));\n}\n//# sourceMappingURL=bulkunassignmembersfromguardrail.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 70089adf9736\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const CreateAudioSpeechRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    speechRequest: models.SpeechRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        speechRequest: \"SpeechRequest\",\n    });\n});\nexport function createAudioSpeechRequestToJSON(createAudioSpeechRequest) {\n    return JSON.stringify(CreateAudioSpeechRequest$outboundSchema.parse(createAudioSpeechRequest));\n}\n//# sourceMappingURL=createaudiospeech.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: cfb0e2ed254b\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const CreateAudioTranscriptionsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    sttRequest: models.STTRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        sttRequest: \"STTRequest\",\n    });\n});\nexport function createAudioTranscriptionsRequestToJSON(createAudioTranscriptionsRequest) {\n    return JSON.stringify(CreateAudioTranscriptionsRequest$outboundSchema.parse(createAudioTranscriptionsRequest));\n}\n//# sourceMappingURL=createaudiotranscriptions.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1443f6afbf40\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as openEnums from \"../../types/enums.js\";\n/**\n * The method used to generate the code challenge\n */\nexport const CreateAuthKeysCodeCodeChallengeMethod = {\n    S256: \"S256\",\n    Plain: \"plain\",\n};\n/**\n * Optional credit limit reset interval. When set, the credit limit resets on this interval.\n */\nexport const UsageLimitType = {\n    Daily: \"daily\",\n    Weekly: \"weekly\",\n    Monthly: \"monthly\",\n};\n/** @internal */\nexport const CreateAuthKeysCodeCodeChallengeMethod$outboundSchema = openEnums.outboundSchema(CreateAuthKeysCodeCodeChallengeMethod);\n/** @internal */\nexport const UsageLimitType$outboundSchema = openEnums.outboundSchema(UsageLimitType);\n/** @internal */\nexport const CreateAuthKeysCodeRequestBody$outboundSchema = z.object({\n    callbackUrl: z.string(),\n    codeChallenge: z.string().optional(),\n    codeChallengeMethod: CreateAuthKeysCodeCodeChallengeMethod$outboundSchema\n        .optional(),\n    expiresAt: z.nullable(z.date().transform(v => v.toISOString())).optional(),\n    keyLabel: z.string().optional(),\n    limit: z.number().optional(),\n    usageLimitType: UsageLimitType$outboundSchema.optional(),\n    workspaceId: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        callbackUrl: \"callback_url\",\n        codeChallenge: \"code_challenge\",\n        codeChallengeMethod: \"code_challenge_method\",\n        expiresAt: \"expires_at\",\n        keyLabel: \"key_label\",\n        usageLimitType: \"usage_limit_type\",\n        workspaceId: \"workspace_id\",\n    });\n});\nexport function createAuthKeysCodeRequestBodyToJSON(createAuthKeysCodeRequestBody) {\n    return JSON.stringify(CreateAuthKeysCodeRequestBody$outboundSchema.parse(createAuthKeysCodeRequestBody));\n}\n/** @internal */\nexport const CreateAuthKeysCodeRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    requestBody: z.lazy(() => CreateAuthKeysCodeRequestBody$outboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        requestBody: \"RequestBody\",\n    });\n});\nexport function createAuthKeysCodeRequestToJSON(createAuthKeysCodeRequest) {\n    return JSON.stringify(CreateAuthKeysCodeRequest$outboundSchema.parse(createAuthKeysCodeRequest));\n}\n/** @internal */\nexport const CreateAuthKeysCodeData$inboundSchema = z.object({\n    app_id: z.int(),\n    created_at: z.string(),\n    id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"app_id\": \"appId\",\n        \"created_at\": \"createdAt\",\n    });\n});\nexport function createAuthKeysCodeDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateAuthKeysCodeData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateAuthKeysCodeData' from JSON`);\n}\n/** @internal */\nexport const CreateAuthKeysCodeResponse$inboundSchema = z.object({\n    data: z.lazy(() => CreateAuthKeysCodeData$inboundSchema),\n});\nexport function createAuthKeysCodeResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateAuthKeysCodeResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateAuthKeysCodeResponse' from JSON`);\n}\n//# sourceMappingURL=createauthkeyscode.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1725e1bba8d8\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const CreateBYOKKeyRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    createBYOKKeyRequest: models.CreateBYOKKeyRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        createBYOKKeyRequest: \"CreateBYOKKeyRequest\",\n    });\n});\nexport function createBYOKKeyRequestToJSON(createBYOKKeyRequest) {\n    return JSON.stringify(CreateBYOKKeyRequest$outboundSchema.parse(createBYOKKeyRequest));\n}\n//# sourceMappingURL=createbyokkey.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7c210337fdff\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as openEnums from \"../../types/enums.js\";\nimport * as models from \"../index.js\";\n/**\n * The format of the output embeddings\n */\nexport const EncodingFormat = {\n    Float: \"float\",\n    Base64: \"base64\",\n};\nexport const ObjectEmbedding = {\n    Embedding: \"embedding\",\n};\nexport const ObjectT = {\n    List: \"list\",\n};\n/** @internal */\nexport const EncodingFormat$outboundSchema = openEnums.outboundSchema(EncodingFormat);\n/** @internal */\nexport const ImageUrl$outboundSchema = z\n    .object({\n    url: z.string(),\n});\nexport function imageUrlToJSON(imageUrl) {\n    return JSON.stringify(ImageUrl$outboundSchema.parse(imageUrl));\n}\n/** @internal */\nexport const ContentImageURL$outboundSchema = z.object({\n    imageUrl: z.lazy(() => ImageUrl$outboundSchema),\n    type: z.literal(\"image_url\"),\n}).transform((v) => {\n    return remap$(v, {\n        imageUrl: \"image_url\",\n    });\n});\nexport function contentImageURLToJSON(contentImageURL) {\n    return JSON.stringify(ContentImageURL$outboundSchema.parse(contentImageURL));\n}\n/** @internal */\nexport const ContentText$outboundSchema = z.object({\n    text: z.string(),\n    type: z.literal(\"text\"),\n});\nexport function contentTextToJSON(contentText) {\n    return JSON.stringify(ContentText$outboundSchema.parse(contentText));\n}\n/** @internal */\nexport const Content$outboundSchema = z\n    .union([\n    z.lazy(() => ContentText$outboundSchema),\n    z.lazy(() => ContentImageURL$outboundSchema),\n    models.ContentPartInputAudio$outboundSchema,\n    models.ContentPartInputVideo$outboundSchema,\n    models.ContentPartInputFile$outboundSchema,\n]);\nexport function contentToJSON(content) {\n    return JSON.stringify(Content$outboundSchema.parse(content));\n}\n/** @internal */\nexport const Input$outboundSchema = z.object({\n    content: z.array(z.union([\n        z.lazy(() => ContentText$outboundSchema),\n        z.lazy(() => ContentImageURL$outboundSchema),\n        models.ContentPartInputAudio$outboundSchema,\n        models.ContentPartInputVideo$outboundSchema,\n        models.ContentPartInputFile$outboundSchema,\n    ])),\n});\nexport function inputToJSON(input) {\n    return JSON.stringify(Input$outboundSchema.parse(input));\n}\n/** @internal */\nexport const InputUnion$outboundSchema = z.union([\n    z.string(),\n    z.array(z.string()),\n    z.array(z.number()),\n    z.array(z.array(z.number())),\n    z.array(z.lazy(() => Input$outboundSchema)),\n]);\nexport function inputUnionToJSON(inputUnion) {\n    return JSON.stringify(InputUnion$outboundSchema.parse(inputUnion));\n}\n/** @internal */\nexport const CreateEmbeddingsRequestBody$outboundSchema = z.object({\n    dimensions: z.int().optional(),\n    encodingFormat: EncodingFormat$outboundSchema.optional(),\n    input: z.union([\n        z.string(),\n        z.array(z.string()),\n        z.array(z.number()),\n        z.array(z.array(z.number())),\n        z.array(z.lazy(() => Input$outboundSchema)),\n    ]),\n    inputType: z.string().optional(),\n    model: z.string(),\n    provider: z.nullable(models.ProviderPreferences$outboundSchema).optional(),\n    user: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        encodingFormat: \"encoding_format\",\n        inputType: \"input_type\",\n    });\n});\nexport function createEmbeddingsRequestBodyToJSON(createEmbeddingsRequestBody) {\n    return JSON.stringify(CreateEmbeddingsRequestBody$outboundSchema.parse(createEmbeddingsRequestBody));\n}\n/** @internal */\nexport const CreateEmbeddingsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    requestBody: z.lazy(() => CreateEmbeddingsRequestBody$outboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        requestBody: \"RequestBody\",\n    });\n});\nexport function createEmbeddingsRequestToJSON(createEmbeddingsRequest) {\n    return JSON.stringify(CreateEmbeddingsRequest$outboundSchema.parse(createEmbeddingsRequest));\n}\n/** @internal */\nexport const Embedding$inboundSchema = z.union([\n    z.array(z.number()),\n    z.string(),\n]);\nexport function embeddingFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Embedding$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Embedding' from JSON`);\n}\n/** @internal */\nexport const ObjectEmbedding$inboundSchema = z.enum(ObjectEmbedding);\n/** @internal */\nexport const CreateEmbeddingsData$inboundSchema = z.object({\n    embedding: z.union([z.array(z.number()), z.string()]),\n    index: z.int().optional(),\n    object: ObjectEmbedding$inboundSchema,\n});\nexport function createEmbeddingsDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateEmbeddingsData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateEmbeddingsData' from JSON`);\n}\n/** @internal */\nexport const ObjectT$inboundSchema = z.enum(ObjectT);\n/** @internal */\nexport const PromptTokensDetails$inboundSchema = z.object({\n    audio_tokens: z.int().optional(),\n    file_tokens: z.int().optional(),\n    image_tokens: z.int().optional(),\n    text_tokens: z.int().optional(),\n    video_tokens: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"audio_tokens\": \"audioTokens\",\n        \"file_tokens\": \"fileTokens\",\n        \"image_tokens\": \"imageTokens\",\n        \"text_tokens\": \"textTokens\",\n        \"video_tokens\": \"videoTokens\",\n    });\n});\nexport function promptTokensDetailsFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => PromptTokensDetails$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'PromptTokensDetails' from JSON`);\n}\n/** @internal */\nexport const CreateEmbeddingsUsage$inboundSchema = z.object({\n    cost: z.number().optional(),\n    prompt_tokens: z.int(),\n    prompt_tokens_details: z.lazy(() => PromptTokensDetails$inboundSchema)\n        .optional(),\n    total_tokens: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"prompt_tokens\": \"promptTokens\",\n        \"prompt_tokens_details\": \"promptTokensDetails\",\n        \"total_tokens\": \"totalTokens\",\n    });\n});\nexport function createEmbeddingsUsageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateEmbeddingsUsage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateEmbeddingsUsage' from JSON`);\n}\n/** @internal */\nexport const CreateEmbeddingsResponseBody$inboundSchema = z.object({\n    data: z.array(z.lazy(() => CreateEmbeddingsData$inboundSchema)),\n    id: z.string().optional(),\n    model: z.string(),\n    object: ObjectT$inboundSchema,\n    usage: z.lazy(() => CreateEmbeddingsUsage$inboundSchema).optional(),\n});\nexport function createEmbeddingsResponseBodyFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateEmbeddingsResponseBody$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateEmbeddingsResponseBody' from JSON`);\n}\n/** @internal */\nexport const CreateEmbeddingsResponse$inboundSchema = z.union([\n    z.lazy(() => CreateEmbeddingsResponseBody$inboundSchema),\n    z.string(),\n]);\nexport function createEmbeddingsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateEmbeddingsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateEmbeddingsResponse' from JSON`);\n}\n//# sourceMappingURL=createembeddings.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5f0f56d14d79\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const CreateGuardrailRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    createGuardrailRequest: models.CreateGuardrailRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        createGuardrailRequest: \"CreateGuardrailRequest\",\n    });\n});\nexport function createGuardrailRequestToJSON(createGuardrailRequest) {\n    return JSON.stringify(CreateGuardrailRequest$outboundSchema.parse(createGuardrailRequest));\n}\n//# sourceMappingURL=createguardrail.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e7a250c8b7bb\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as openEnums from \"../../types/enums.js\";\n/**\n * Type of limit reset for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday.\n */\nexport const CreateKeysLimitReset = {\n    Daily: \"daily\",\n    Weekly: \"weekly\",\n    Monthly: \"monthly\",\n};\n/** @internal */\nexport const CreateKeysLimitReset$outboundSchema = openEnums.outboundSchema(CreateKeysLimitReset);\n/** @internal */\nexport const CreateKeysRequestBody$outboundSchema = z.object({\n    creatorUserId: z.nullable(z.string()).optional(),\n    expiresAt: z.nullable(z.date().transform(v => v.toISOString())).optional(),\n    includeByokInLimit: z.boolean().optional(),\n    limit: z.nullable(z.number()).optional(),\n    limitReset: z.nullable(CreateKeysLimitReset$outboundSchema).optional(),\n    name: z.string(),\n    workspaceId: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        creatorUserId: \"creator_user_id\",\n        expiresAt: \"expires_at\",\n        includeByokInLimit: \"include_byok_in_limit\",\n        limitReset: \"limit_reset\",\n        workspaceId: \"workspace_id\",\n    });\n});\nexport function createKeysRequestBodyToJSON(createKeysRequestBody) {\n    return JSON.stringify(CreateKeysRequestBody$outboundSchema.parse(createKeysRequestBody));\n}\n/** @internal */\nexport const CreateKeysRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    requestBody: z.lazy(() => CreateKeysRequestBody$outboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        requestBody: \"RequestBody\",\n    });\n});\nexport function createKeysRequestToJSON(createKeysRequest) {\n    return JSON.stringify(CreateKeysRequest$outboundSchema.parse(createKeysRequest));\n}\n/** @internal */\nexport const CreateKeysData$inboundSchema = z.object({\n    byok_usage: z.number(),\n    byok_usage_daily: z.number(),\n    byok_usage_monthly: z.number(),\n    byok_usage_weekly: z.number(),\n    created_at: z.string(),\n    creator_user_id: z.nullable(z.string()),\n    disabled: z.boolean(),\n    expires_at: z.nullable(z.iso.datetime({ offset: true }).transform(v => new Date(v))).optional(),\n    hash: z.string(),\n    include_byok_in_limit: z.boolean(),\n    label: z.string(),\n    limit: z.nullable(z.number()),\n    limit_remaining: z.nullable(z.number()),\n    limit_reset: z.nullable(z.string()),\n    name: z.string(),\n    updated_at: z.nullable(z.string()),\n    usage: z.number(),\n    usage_daily: z.number(),\n    usage_monthly: z.number(),\n    usage_weekly: z.number(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"byok_usage\": \"byokUsage\",\n        \"byok_usage_daily\": \"byokUsageDaily\",\n        \"byok_usage_monthly\": \"byokUsageMonthly\",\n        \"byok_usage_weekly\": \"byokUsageWeekly\",\n        \"created_at\": \"createdAt\",\n        \"creator_user_id\": \"creatorUserId\",\n        \"expires_at\": \"expiresAt\",\n        \"include_byok_in_limit\": \"includeByokInLimit\",\n        \"limit_remaining\": \"limitRemaining\",\n        \"limit_reset\": \"limitReset\",\n        \"updated_at\": \"updatedAt\",\n        \"usage_daily\": \"usageDaily\",\n        \"usage_monthly\": \"usageMonthly\",\n        \"usage_weekly\": \"usageWeekly\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function createKeysDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateKeysData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateKeysData' from JSON`);\n}\n/** @internal */\nexport const CreateKeysResponse$inboundSchema = z.object({\n    data: z.lazy(() => CreateKeysData$inboundSchema),\n    key: z.string(),\n});\nexport function createKeysResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateKeysResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateKeysResponse' from JSON`);\n}\n//# sourceMappingURL=createkeys.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 600d023d815b\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const CreateObservabilityDestinationRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    createObservabilityDestinationRequest: models.CreateObservabilityDestinationRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        createObservabilityDestinationRequest: \"CreateObservabilityDestinationRequest\",\n    });\n});\nexport function createObservabilityDestinationRequestToJSON(createObservabilityDestinationRequest) {\n    return JSON.stringify(CreateObservabilityDestinationRequest$outboundSchema.parse(createObservabilityDestinationRequest));\n}\n//# sourceMappingURL=createobservabilitydestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5b44400688c2\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const CreatePresetsChatCompletionsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    slug: z.string(),\n    chatRequest: models.ChatRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        chatRequest: \"ChatRequest\",\n    });\n});\nexport function createPresetsChatCompletionsRequestToJSON(createPresetsChatCompletionsRequest) {\n    return JSON.stringify(CreatePresetsChatCompletionsRequest$outboundSchema.parse(createPresetsChatCompletionsRequest));\n}\n//# sourceMappingURL=createpresetschatcompletions.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 511220621048\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const CreatePresetsMessagesRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    slug: z.string(),\n    messagesRequest: models.MessagesRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        messagesRequest: \"MessagesRequest\",\n    });\n});\nexport function createPresetsMessagesRequestToJSON(createPresetsMessagesRequest) {\n    return JSON.stringify(CreatePresetsMessagesRequest$outboundSchema.parse(createPresetsMessagesRequest));\n}\n//# sourceMappingURL=createpresetsmessages.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: c0a2f8b46a1c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const CreatePresetsResponsesRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    slug: z.string(),\n    responsesRequest: models.ResponsesRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        responsesRequest: \"ResponsesRequest\",\n    });\n});\nexport function createPresetsResponsesRequestToJSON(createPresetsResponsesRequest) {\n    return JSON.stringify(CreatePresetsResponsesRequest$outboundSchema.parse(createPresetsResponsesRequest));\n}\n//# sourceMappingURL=createpresetsresponses.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e1de55b94363\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const DocumentRequest$outboundSchema = z.object({\n    image: z.string().optional(),\n    text: z.string().optional(),\n});\nexport function documentRequestToJSON(documentRequest) {\n    return JSON.stringify(DocumentRequest$outboundSchema.parse(documentRequest));\n}\n/** @internal */\nexport const Document$outboundSchema = z\n    .union([z.string(), z.lazy(() => DocumentRequest$outboundSchema)]);\nexport function documentToJSON(document) {\n    return JSON.stringify(Document$outboundSchema.parse(document));\n}\n/** @internal */\nexport const CreateRerankRequestBody$outboundSchema = z.object({\n    documents: z.array(z.union([z.string(), z.lazy(() => DocumentRequest$outboundSchema)])),\n    model: z.string(),\n    provider: z.nullable(models.ProviderPreferences$outboundSchema).optional(),\n    query: z.string(),\n    topN: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        topN: \"top_n\",\n    });\n});\nexport function createRerankRequestBodyToJSON(createRerankRequestBody) {\n    return JSON.stringify(CreateRerankRequestBody$outboundSchema.parse(createRerankRequestBody));\n}\n/** @internal */\nexport const CreateRerankRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    requestBody: z.lazy(() => CreateRerankRequestBody$outboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        requestBody: \"RequestBody\",\n    });\n});\nexport function createRerankRequestToJSON(createRerankRequest) {\n    return JSON.stringify(CreateRerankRequest$outboundSchema.parse(createRerankRequest));\n}\n/** @internal */\nexport const DocumentResponse$inboundSchema = z.object({\n    image: z.string().optional(),\n    text: z.string().optional(),\n});\nexport function documentResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => DocumentResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'DocumentResponse' from JSON`);\n}\n/** @internal */\nexport const Result$inboundSchema = z.object({\n    document: z.lazy(() => DocumentResponse$inboundSchema),\n    index: z.int(),\n    relevance_score: z.number(),\n}).transform((v) => {\n    return remap$(v, {\n        \"relevance_score\": \"relevanceScore\",\n    });\n});\nexport function resultFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Result$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Result' from JSON`);\n}\n/** @internal */\nexport const CreateRerankUsage$inboundSchema = z.object({\n    cost: z.number().optional(),\n    search_units: z.int().optional(),\n    total_tokens: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"search_units\": \"searchUnits\",\n        \"total_tokens\": \"totalTokens\",\n    });\n});\nexport function createRerankUsageFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateRerankUsage$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateRerankUsage' from JSON`);\n}\n/** @internal */\nexport const CreateRerankResponseBody$inboundSchema = z.object({\n    id: z.string().optional(),\n    model: z.string(),\n    provider: z.string().optional(),\n    results: z.array(z.lazy(() => Result$inboundSchema)),\n    usage: z.lazy(() => CreateRerankUsage$inboundSchema).optional(),\n});\nexport function createRerankResponseBodyFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateRerankResponseBody$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateRerankResponseBody' from JSON`);\n}\n/** @internal */\nexport const CreateRerankResponse$inboundSchema = z.union([z.lazy(() => CreateRerankResponseBody$inboundSchema), z.string()]);\nexport function createRerankResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateRerankResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateRerankResponse' from JSON`);\n}\n//# sourceMappingURL=creatererank.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3f731f808a79\n */\nexport class EventStream extends ReadableStream {\n    constructor(responseBody, parse, opts) {\n        const upstream = responseBody.getReader();\n        let buffer = new Uint8Array();\n        const state = { eventId: undefined };\n        const dataRequired = opts?.dataRequired ?? true;\n        super({\n            async pull(downstream) {\n                try {\n                    while (true) {\n                        const match = findBoundary(buffer);\n                        if (!match) {\n                            const chunk = await upstream.read();\n                            if (chunk.done)\n                                return downstream.close();\n                            buffer = concatBuffer(buffer, chunk.value);\n                            continue;\n                        }\n                        const message = buffer.slice(0, match.index);\n                        buffer = buffer.slice(match.index + match.length);\n                        const item = parseMessage(message, parse, state, dataRequired);\n                        if (item && !item.done)\n                            return downstream.enqueue(item.value);\n                        if (item?.done) {\n                            await upstream.cancel(\"done\");\n                            return downstream.close();\n                        }\n                    }\n                }\n                catch (e) {\n                    downstream.error(e);\n                    await upstream.cancel(e);\n                }\n            },\n            cancel: reason => upstream.cancel(reason),\n        });\n    }\n    // Polyfill for older browsers\n    [Symbol.asyncIterator]() {\n        const fn = ReadableStream.prototype[Symbol.asyncIterator];\n        if (typeof fn === \"function\")\n            return fn.call(this);\n        const reader = this.getReader();\n        return {\n            next: async () => {\n                const r = await reader.read();\n                if (r.done) {\n                    reader.releaseLock();\n                    return { done: true, value: undefined };\n                }\n                return { done: false, value: r.value };\n            },\n            throw: async (e) => {\n                await reader.cancel(e);\n                reader.releaseLock();\n                return { done: true, value: undefined };\n            },\n            return: async () => {\n                await reader.cancel(\"done\");\n                reader.releaseLock();\n                return { done: true, value: undefined };\n            },\n            [Symbol.asyncIterator]() {\n                return this;\n            },\n        };\n    }\n}\nfunction concatBuffer(a, b) {\n    const c = new Uint8Array(a.length + b.length);\n    c.set(a, 0);\n    c.set(b, a.length);\n    return c;\n}\nconst CR = 13;\nconst LF = 10;\nconst BOUNDARIES = [\n    [CR, LF, CR, LF], // \\r\\n\\r\\n\n    [CR, LF, CR], // \\r\\n\\r\n    [CR, LF, LF], // \\r\\n\\n\n    [CR, CR, LF], // \\r\\r\\n\n    [LF, CR, LF], // \\n\\r\\n\n    [CR, CR], // \\r\\r\n    [LF, CR], // \\n\\r\n    [LF, LF], // \\n\\n\n];\nfunction findBoundary(buf) {\n    const len = buf.length;\n    for (let i = 0; i < len; i++) {\n        if (buf[i] !== CR && buf[i] !== LF)\n            continue;\n        for (const boundary of BOUNDARIES) {\n            if (i + boundary.length > len)\n                continue;\n            let match = true;\n            for (let j = 0; j < boundary.length; j++) {\n                if (buf[i + j] !== boundary[j]) {\n                    match = false;\n                    break;\n                }\n            }\n            if (match)\n                return { index: i, length: boundary.length };\n        }\n    }\n    return null;\n}\nfunction parseMessage(chunk, parse, state, dataRequired) {\n    const text = new TextDecoder().decode(chunk);\n    const lines = text.split(/\\r\\n|\\r|\\n/);\n    const dataLines = [];\n    const ret = {};\n    let ignore = true;\n    for (const line of lines) {\n        if (!line || line.startsWith(\":\"))\n            continue;\n        ignore = false;\n        const i = line.indexOf(\":\");\n        let field = line;\n        let value = \"\";\n        if (i > 0) {\n            field = line.slice(0, i);\n            value = line[i + 1] === \" \" ? line.slice(i + 2) : line.slice(i + 1);\n        }\n        if (field === \"data\")\n            dataLines.push(value);\n        else if (field === \"event\")\n            ret.event = value;\n        else if (field === \"id\" && !value.includes(\"\\0\"))\n            state.eventId = value;\n        else if (field === \"retry\" && /^\\d+$/.test(value)) {\n            ret.retry = Number(value);\n        }\n    }\n    if (ignore)\n        return;\n    ret.id = state.eventId;\n    if (dataLines.length)\n        ret.data = dataLines.join(\"\\n\");\n    else if (dataRequired)\n        return; // skip data-less events when data is required\n    return parse(ret);\n}\n//# sourceMappingURL=event-streams.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7ad611b27e9d\n */\nimport * as z from \"zod/v4\";\nimport { EventStream } from \"../../lib/event-streams.js\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const CreateResponsesRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    xOpenRouterMetadata: models.MetadataLevel$outboundSchema.optional(),\n    responsesRequest: models.ResponsesRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        xOpenRouterMetadata: \"X-OpenRouter-Metadata\",\n        responsesRequest: \"ResponsesRequest\",\n    });\n});\nexport function createResponsesRequestToJSON(createResponsesRequest) {\n    return JSON.stringify(CreateResponsesRequest$outboundSchema.parse(createResponsesRequest));\n}\n/** @internal */\nexport const CreateResponsesResponse$inboundSchema = z.union([\n    models.OpenResponsesResult$inboundSchema,\n    z.custom(x => x instanceof ReadableStream)\n        .transform(stream => {\n        return new EventStream(stream, rawEvent => {\n            if (rawEvent.data === \"[DONE]\")\n                return { done: true, value: undefined };\n            return {\n                done: false,\n                value: models.ResponsesStreamingResponse$inboundSchema.parse(rawEvent)\n                    ?.data,\n            };\n        });\n    }),\n]);\nexport function createResponsesResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => CreateResponsesResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'CreateResponsesResponse' from JSON`);\n}\n//# sourceMappingURL=createresponses.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 06dc92996e18\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const CreateVideosRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    videoGenerationRequest: models.VideoGenerationRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        videoGenerationRequest: \"VideoGenerationRequest\",\n    });\n});\nexport function createVideosRequestToJSON(createVideosRequest) {\n    return JSON.stringify(CreateVideosRequest$outboundSchema.parse(createVideosRequest));\n}\n//# sourceMappingURL=createvideos.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 27fe97979faa\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const CreateWorkspaceRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    createWorkspaceRequest: models.CreateWorkspaceRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        createWorkspaceRequest: \"CreateWorkspaceRequest\",\n    });\n});\nexport function createWorkspaceRequestToJSON(createWorkspaceRequest) {\n    return JSON.stringify(CreateWorkspaceRequest$outboundSchema.parse(createWorkspaceRequest));\n}\n//# sourceMappingURL=createworkspace.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 948bcb0fbfc1\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const DeleteBYOKKeyRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function deleteBYOKKeyRequestToJSON(deleteBYOKKeyRequest) {\n    return JSON.stringify(DeleteBYOKKeyRequest$outboundSchema.parse(deleteBYOKKeyRequest));\n}\n//# sourceMappingURL=deletebyokkey.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4b741f4bc99e\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const DeleteFileRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    fileId: z.string(),\n    workspaceId: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        fileId: \"file_id\",\n        workspaceId: \"workspace_id\",\n    });\n});\nexport function deleteFileRequestToJSON(deleteFileRequest) {\n    return JSON.stringify(DeleteFileRequest$outboundSchema.parse(deleteFileRequest));\n}\n//# sourceMappingURL=deletefile.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0319276942bf\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const DeleteGuardrailRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function deleteGuardrailRequestToJSON(deleteGuardrailRequest) {\n    return JSON.stringify(DeleteGuardrailRequest$outboundSchema.parse(deleteGuardrailRequest));\n}\n//# sourceMappingURL=deleteguardrail.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: efa22339a3d6\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\n/** @internal */\nexport const DeleteKeysRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    hash: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function deleteKeysRequestToJSON(deleteKeysRequest) {\n    return JSON.stringify(DeleteKeysRequest$outboundSchema.parse(deleteKeysRequest));\n}\n/** @internal */\nexport const DeleteKeysResponse$inboundSchema = z.object({\n    deleted: z.literal(true),\n});\nexport function deleteKeysResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => DeleteKeysResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'DeleteKeysResponse' from JSON`);\n}\n//# sourceMappingURL=deletekeys.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: a6ab575f608d\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const DeleteObservabilityDestinationRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function deleteObservabilityDestinationRequestToJSON(deleteObservabilityDestinationRequest) {\n    return JSON.stringify(DeleteObservabilityDestinationRequest$outboundSchema.parse(deleteObservabilityDestinationRequest));\n}\n//# sourceMappingURL=deleteobservabilitydestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 38325c1278ba\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const DeleteWorkspaceRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function deleteWorkspaceRequestToJSON(deleteWorkspaceRequest) {\n    return JSON.stringify(DeleteWorkspaceRequest$outboundSchema.parse(deleteWorkspaceRequest));\n}\n//# sourceMappingURL=deleteworkspace.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1c7f08d2fedf\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const DownloadFileContentRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    fileId: z.string(),\n    workspaceId: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        fileId: \"file_id\",\n        workspaceId: \"workspace_id\",\n    });\n});\nexport function downloadFileContentRequestToJSON(downloadFileContentRequest) {\n    return JSON.stringify(DownloadFileContentRequest$outboundSchema.parse(downloadFileContentRequest));\n}\n//# sourceMappingURL=downloadfilecontent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 440595fac2ad\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as openEnums from \"../../types/enums.js\";\n/**\n * The method used to generate the code challenge\n */\nexport const ExchangeAuthCodeForAPIKeyCodeChallengeMethod = {\n    S256: \"S256\",\n    Plain: \"plain\",\n};\n/** @internal */\nexport const ExchangeAuthCodeForAPIKeyCodeChallengeMethod$outboundSchema = openEnums\n    .outboundSchema(ExchangeAuthCodeForAPIKeyCodeChallengeMethod);\n/** @internal */\nexport const ExchangeAuthCodeForAPIKeyRequestBody$outboundSchema = z.object({\n    code: z.string(),\n    codeChallengeMethod: z.nullable(ExchangeAuthCodeForAPIKeyCodeChallengeMethod$outboundSchema).optional(),\n    codeVerifier: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        codeChallengeMethod: \"code_challenge_method\",\n        codeVerifier: \"code_verifier\",\n    });\n});\nexport function exchangeAuthCodeForAPIKeyRequestBodyToJSON(exchangeAuthCodeForAPIKeyRequestBody) {\n    return JSON.stringify(ExchangeAuthCodeForAPIKeyRequestBody$outboundSchema.parse(exchangeAuthCodeForAPIKeyRequestBody));\n}\n/** @internal */\nexport const ExchangeAuthCodeForAPIKeyRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    requestBody: z.lazy(() => ExchangeAuthCodeForAPIKeyRequestBody$outboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        requestBody: \"RequestBody\",\n    });\n});\nexport function exchangeAuthCodeForAPIKeyRequestToJSON(exchangeAuthCodeForAPIKeyRequest) {\n    return JSON.stringify(ExchangeAuthCodeForAPIKeyRequest$outboundSchema.parse(exchangeAuthCodeForAPIKeyRequest));\n}\n/** @internal */\nexport const ExchangeAuthCodeForAPIKeyResponse$inboundSchema = z.object({\n    key: z.string(),\n    user_id: z.nullable(z.string()),\n}).transform((v) => {\n    return remap$(v, {\n        \"user_id\": \"userId\",\n    });\n});\nexport function exchangeAuthCodeForAPIKeyResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ExchangeAuthCodeForAPIKeyResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ExchangeAuthCodeForAPIKeyResponse' from JSON`);\n}\n//# sourceMappingURL=exchangeauthcodeforapikey.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 55adc33e474c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as openEnums from \"../../types/enums.js\";\n/**\n * Granularity identifier\n */\nexport const GranularityName = {\n    Minute: \"minute\",\n    Hour: \"hour\",\n    Day: \"day\",\n    Week: \"week\",\n    Month: \"month\",\n};\n/**\n * How this metric value should be formatted for display (e.g. percent \u2192 multiply by 100 and append %, currency \u2192 prefix with $)\n */\nexport const DisplayFormat = {\n    Number: \"number\",\n    Currency: \"currency\",\n    Percent: \"percent\",\n    Latency: \"latency\",\n    Throughput: \"throughput\",\n};\n/**\n * Operator identifier used in filter definitions\n */\nexport const OperatorName = {\n    Eq: \"eq\",\n    Neq: \"neq\",\n    In: \"in\",\n    NotIn: \"not_in\",\n    Gt: \"gt\",\n    Gte: \"gte\",\n    Lt: \"lt\",\n    Lte: \"lte\",\n};\n/**\n * Whether the operator expects a single value or an array\n */\nexport const ValueType = {\n    Scalar: \"scalar\",\n    Array: \"array\",\n};\n/** @internal */\nexport const GetAnalyticsMetaRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function getAnalyticsMetaRequestToJSON(getAnalyticsMetaRequest) {\n    return JSON.stringify(GetAnalyticsMetaRequest$outboundSchema.parse(getAnalyticsMetaRequest));\n}\n/** @internal */\nexport const Dimension$inboundSchema = z.object({\n    display_label: z.string(),\n    name: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"display_label\": \"displayLabel\",\n    });\n});\nexport function dimensionFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Dimension$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Dimension' from JSON`);\n}\n/** @internal */\nexport const GranularityName$inboundSchema = openEnums.inboundSchema(GranularityName);\n/** @internal */\nexport const Granularity$inboundSchema = z\n    .object({\n    display_label: z.string(),\n    name: GranularityName$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"display_label\": \"displayLabel\",\n    });\n});\nexport function granularityFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Granularity$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Granularity' from JSON`);\n}\n/** @internal */\nexport const DisplayFormat$inboundSchema = openEnums.inboundSchema(DisplayFormat);\n/** @internal */\nexport const Metric$inboundSchema = z.object({\n    display_format: DisplayFormat$inboundSchema,\n    display_label: z.string(),\n    is_rate: z.boolean(),\n    name: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"display_format\": \"displayFormat\",\n        \"display_label\": \"displayLabel\",\n        \"is_rate\": \"isRate\",\n    });\n});\nexport function metricFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Metric$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Metric' from JSON`);\n}\n/** @internal */\nexport const OperatorName$inboundSchema = openEnums.inboundSchema(OperatorName);\n/** @internal */\nexport const ValueType$inboundSchema = openEnums\n    .inboundSchema(ValueType);\n/** @internal */\nexport const Operator$inboundSchema = z.object({\n    name: OperatorName$inboundSchema,\n    value_type: ValueType$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"value_type\": \"valueType\",\n    });\n});\nexport function operatorFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Operator$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Operator' from JSON`);\n}\n/** @internal */\nexport const GetAnalyticsMetaData$inboundSchema = z.object({\n    dimensions: z.array(z.lazy(() => Dimension$inboundSchema)),\n    granularities: z.array(z.lazy(() => Granularity$inboundSchema)),\n    metrics: z.array(z.lazy(() => Metric$inboundSchema)),\n    operators: z.array(z.lazy(() => Operator$inboundSchema)),\n});\nexport function getAnalyticsMetaDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GetAnalyticsMetaData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GetAnalyticsMetaData' from JSON`);\n}\n/** @internal */\nexport const GetAnalyticsMetaResponse$inboundSchema = z.object({\n    data: z.lazy(() => GetAnalyticsMetaData$inboundSchema),\n});\nexport function getAnalyticsMetaResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GetAnalyticsMetaResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GetAnalyticsMetaResponse' from JSON`);\n}\n//# sourceMappingURL=getanalyticsmeta.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: edd3364e84c1\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as openEnums from \"../../types/enums.js\";\nimport * as models from \"../index.js\";\n/**\n * Marketplace category group to filter by (e.g. `coding`). Only apps tagged with a subcategory inside this group are returned. Mutually combinable with `subcategory` \u2014 when both are supplied the `subcategory` must belong to the `category` group.\n */\nexport const GetAppRankingsCategory = {\n    Coding: \"coding\",\n    Creative: \"creative\",\n    Productivity: \"productivity\",\n    Entertainment: \"entertainment\",\n};\n/**\n * Marketplace subcategory to filter by (e.g. `cli-agent`). Takes precedence over `category` for the actual filter; when `category` is also supplied the pair must be consistent.\n */\nexport const Subcategory = {\n    CliAgent: \"cli-agent\",\n    IdeExtension: \"ide-extension\",\n    CloudAgent: \"cloud-agent\",\n    ProgrammingApp: \"programming-app\",\n    NativeAppBuilder: \"native-app-builder\",\n    CreativeWriting: \"creative-writing\",\n    VideoGen: \"video-gen\",\n    ImageGen: \"image-gen\",\n    AudioGen: \"audio-gen\",\n    Roleplay: \"roleplay\",\n    Game: \"game\",\n    WritingAssistant: \"writing-assistant\",\n    GeneralChat: \"general-chat\",\n    PersonalAgent: \"personal-agent\",\n    Legal: \"legal\",\n};\n/**\n * `popular` ranks apps by total token volume inside the date window. `trending` ranks apps by absolute excess token growth: window volume minus the average volume of the three equal-length periods immediately preceding the window. Apps with no excess growth are omitted from `trending` results.\n */\nexport const GetAppRankingsSort = {\n    Popular: \"popular\",\n    Trending: \"trending\",\n};\n/** @internal */\nexport const GetAppRankingsCategory$outboundSchema = openEnums.outboundSchema(GetAppRankingsCategory);\n/** @internal */\nexport const Subcategory$outboundSchema = openEnums.outboundSchema(Subcategory);\n/** @internal */\nexport const GetAppRankingsSort$outboundSchema = openEnums.outboundSchema(GetAppRankingsSort);\n/** @internal */\nexport const GetAppRankingsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    category: GetAppRankingsCategory$outboundSchema.optional(),\n    subcategory: Subcategory$outboundSchema.optional(),\n    sort: GetAppRankingsSort$outboundSchema.default(\"popular\"),\n    startDate: z.string().optional(),\n    endDate: z.string().optional(),\n    limit: z.int().default(50),\n    offset: z.nullable(z.int().default(0)),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        startDate: \"start_date\",\n        endDate: \"end_date\",\n    });\n});\nexport function getAppRankingsRequestToJSON(getAppRankingsRequest) {\n    return JSON.stringify(GetAppRankingsRequest$outboundSchema.parse(getAppRankingsRequest));\n}\n/** @internal */\nexport const GetAppRankingsResponse$inboundSchema = z.object({\n    Result: models.AppRankingsResponse$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"Result\": \"result\",\n    });\n});\nexport function getAppRankingsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GetAppRankingsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GetAppRankingsResponse' from JSON`);\n}\n//# sourceMappingURL=getapprankings.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 1b7863e0088a\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const GetBenchmarksArtificialAnalysisRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    maxResults: z.int().default(50),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        maxResults: \"max_results\",\n    });\n});\nexport function getBenchmarksArtificialAnalysisRequestToJSON(getBenchmarksArtificialAnalysisRequest) {\n    return JSON.stringify(GetBenchmarksArtificialAnalysisRequest$outboundSchema.parse(getBenchmarksArtificialAnalysisRequest));\n}\n//# sourceMappingURL=getbenchmarksartificialanalysis.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 86e27de57b33\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as openEnums from \"../../types/enums.js\";\n/**\n * Arena to query. Defaults to `models`.\n */\nexport const Arena = {\n    Models: \"models\",\n    Builders: \"builders\",\n    Agents: \"agents\",\n};\n/** @internal */\nexport const Arena$outboundSchema = openEnums\n    .outboundSchema(Arena);\n/** @internal */\nexport const GetBenchmarksDesignArenaRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    arena: Arena$outboundSchema.default(\"models\"),\n    category: z.string().optional(),\n    maxResults: z.int().default(50),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        maxResults: \"max_results\",\n    });\n});\nexport function getBenchmarksDesignArenaRequestToJSON(getBenchmarksDesignArenaRequest) {\n    return JSON.stringify(GetBenchmarksDesignArenaRequest$outboundSchema.parse(getBenchmarksDesignArenaRequest));\n}\n//# sourceMappingURL=getbenchmarksdesignarena.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 883c19bd90fb\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const GetBYOKKeyRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function getBYOKKeyRequestToJSON(getBYOKKeyRequest) {\n    return JSON.stringify(GetBYOKKeyRequest$outboundSchema.parse(getBYOKKeyRequest));\n}\n//# sourceMappingURL=getbyokkey.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0e5a438307ae\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\n/** @internal */\nexport const GetCreditsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function getCreditsRequestToJSON(getCreditsRequest) {\n    return JSON.stringify(GetCreditsRequest$outboundSchema.parse(getCreditsRequest));\n}\n/** @internal */\nexport const GetCreditsData$inboundSchema = z.object({\n    total_credits: z.number(),\n    total_usage: z.number(),\n}).transform((v) => {\n    return remap$(v, {\n        \"total_credits\": \"totalCredits\",\n        \"total_usage\": \"totalUsage\",\n    });\n});\nexport function getCreditsDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GetCreditsData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GetCreditsData' from JSON`);\n}\n/** @internal */\nexport const GetCreditsResponse$inboundSchema = z.object({\n    data: z.lazy(() => GetCreditsData$inboundSchema),\n});\nexport function getCreditsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GetCreditsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GetCreditsResponse' from JSON`);\n}\n//# sourceMappingURL=getcredits.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ddb4fa558414\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\n/** @internal */\nexport const GetCurrentKeyRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function getCurrentKeyRequestToJSON(getCurrentKeyRequest) {\n    return JSON.stringify(GetCurrentKeyRequest$outboundSchema.parse(getCurrentKeyRequest));\n}\n/** @internal */\nexport const RateLimit$inboundSchema = z.object({\n    interval: z.string(),\n    note: z.string(),\n    requests: z.int(),\n});\nexport function rateLimitFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => RateLimit$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'RateLimit' from JSON`);\n}\n/** @internal */\nexport const GetCurrentKeyData$inboundSchema = z.object({\n    byok_usage: z.number(),\n    byok_usage_daily: z.number(),\n    byok_usage_monthly: z.number(),\n    byok_usage_weekly: z.number(),\n    creator_user_id: z.nullable(z.string()),\n    expires_at: z.nullable(z.iso.datetime({ offset: true }).transform(v => new Date(v))).optional(),\n    include_byok_in_limit: z.boolean(),\n    is_free_tier: z.boolean(),\n    is_management_key: z.boolean(),\n    is_provisioning_key: z.boolean(),\n    label: z.string(),\n    limit: z.nullable(z.number()),\n    limit_remaining: z.nullable(z.number()),\n    limit_reset: z.nullable(z.string()),\n    rate_limit: z.lazy(() => RateLimit$inboundSchema),\n    usage: z.number(),\n    usage_daily: z.number(),\n    usage_monthly: z.number(),\n    usage_weekly: z.number(),\n}).transform((v) => {\n    return remap$(v, {\n        \"byok_usage\": \"byokUsage\",\n        \"byok_usage_daily\": \"byokUsageDaily\",\n        \"byok_usage_monthly\": \"byokUsageMonthly\",\n        \"byok_usage_weekly\": \"byokUsageWeekly\",\n        \"creator_user_id\": \"creatorUserId\",\n        \"expires_at\": \"expiresAt\",\n        \"include_byok_in_limit\": \"includeByokInLimit\",\n        \"is_free_tier\": \"isFreeTier\",\n        \"is_management_key\": \"isManagementKey\",\n        \"is_provisioning_key\": \"isProvisioningKey\",\n        \"limit_remaining\": \"limitRemaining\",\n        \"limit_reset\": \"limitReset\",\n        \"rate_limit\": \"rateLimit\",\n        \"usage_daily\": \"usageDaily\",\n        \"usage_monthly\": \"usageMonthly\",\n        \"usage_weekly\": \"usageWeekly\",\n    });\n});\nexport function getCurrentKeyDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GetCurrentKeyData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GetCurrentKeyData' from JSON`);\n}\n/** @internal */\nexport const GetCurrentKeyResponse$inboundSchema = z.object({\n    data: z.lazy(() => GetCurrentKeyData$inboundSchema),\n});\nexport function getCurrentKeyResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GetCurrentKeyResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GetCurrentKeyResponse' from JSON`);\n}\n//# sourceMappingURL=getcurrentkey.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: accbd0757579\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const GetFileMetadataRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    fileId: z.string(),\n    workspaceId: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        fileId: \"file_id\",\n        workspaceId: \"workspace_id\",\n    });\n});\nexport function getFileMetadataRequestToJSON(getFileMetadataRequest) {\n    return JSON.stringify(GetFileMetadataRequest$outboundSchema.parse(getFileMetadataRequest));\n}\n//# sourceMappingURL=getfilemetadata.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5cdb2959d2a5\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const GetGenerationRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function getGenerationRequestToJSON(getGenerationRequest) {\n    return JSON.stringify(GetGenerationRequest$outboundSchema.parse(getGenerationRequest));\n}\n//# sourceMappingURL=getgeneration.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 5a16015b4d1f\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const GetGuardrailRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function getGuardrailRequestToJSON(getGuardrailRequest) {\n    return JSON.stringify(GetGuardrailRequest$outboundSchema.parse(getGuardrailRequest));\n}\n//# sourceMappingURL=getguardrail.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 27d0f86c087f\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\n/** @internal */\nexport const GetKeyRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    hash: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function getKeyRequestToJSON(getKeyRequest) {\n    return JSON.stringify(GetKeyRequest$outboundSchema.parse(getKeyRequest));\n}\n/** @internal */\nexport const GetKeyData$inboundSchema = z\n    .object({\n    byok_usage: z.number(),\n    byok_usage_daily: z.number(),\n    byok_usage_monthly: z.number(),\n    byok_usage_weekly: z.number(),\n    created_at: z.string(),\n    creator_user_id: z.nullable(z.string()),\n    disabled: z.boolean(),\n    expires_at: z.nullable(z.iso.datetime({ offset: true }).transform(v => new Date(v))).optional(),\n    hash: z.string(),\n    include_byok_in_limit: z.boolean(),\n    label: z.string(),\n    limit: z.nullable(z.number()),\n    limit_remaining: z.nullable(z.number()),\n    limit_reset: z.nullable(z.string()),\n    name: z.string(),\n    updated_at: z.nullable(z.string()),\n    usage: z.number(),\n    usage_daily: z.number(),\n    usage_monthly: z.number(),\n    usage_weekly: z.number(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"byok_usage\": \"byokUsage\",\n        \"byok_usage_daily\": \"byokUsageDaily\",\n        \"byok_usage_monthly\": \"byokUsageMonthly\",\n        \"byok_usage_weekly\": \"byokUsageWeekly\",\n        \"created_at\": \"createdAt\",\n        \"creator_user_id\": \"creatorUserId\",\n        \"expires_at\": \"expiresAt\",\n        \"include_byok_in_limit\": \"includeByokInLimit\",\n        \"limit_remaining\": \"limitRemaining\",\n        \"limit_reset\": \"limitReset\",\n        \"updated_at\": \"updatedAt\",\n        \"usage_daily\": \"usageDaily\",\n        \"usage_monthly\": \"usageMonthly\",\n        \"usage_weekly\": \"usageWeekly\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function getKeyDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GetKeyData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GetKeyData' from JSON`);\n}\n/** @internal */\nexport const GetKeyResponse$inboundSchema = z.object({\n    data: z.lazy(() => GetKeyData$inboundSchema),\n});\nexport function getKeyResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => GetKeyResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'GetKeyResponse' from JSON`);\n}\n//# sourceMappingURL=getkey.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 2ffcb8988513\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const GetModelRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    author: z.string(),\n    slug: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function getModelRequestToJSON(getModelRequest) {\n    return JSON.stringify(GetModelRequest$outboundSchema.parse(getModelRequest));\n}\n//# sourceMappingURL=getmodel.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f1343fbaaed5\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as openEnums from \"../../types/enums.js\";\n/**\n * Filter models by use case category\n */\nexport const GetModelsCategory = {\n    Programming: \"programming\",\n    Roleplay: \"roleplay\",\n    Marketing: \"marketing\",\n    MarketingSeo: \"marketing/seo\",\n    Technology: \"technology\",\n    Science: \"science\",\n    Translation: \"translation\",\n    Legal: \"legal\",\n    Finance: \"finance\",\n    Health: \"health\",\n    Trivia: \"trivia\",\n    Academia: \"academia\",\n};\n/**\n * Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date). When omitted, the existing default ordering is preserved.\n */\nexport const GetModelsSort = {\n    MostPopular: \"most-popular\",\n    Newest: \"newest\",\n    TopWeekly: \"top-weekly\",\n    PricingLowToHigh: \"pricing-low-to-high\",\n    PricingHighToLow: \"pricing-high-to-low\",\n    ContextHighToLow: \"context-high-to-low\",\n    ThroughputHighToLow: \"throughput-high-to-low\",\n    LatencyLowToHigh: \"latency-low-to-high\",\n};\n/**\n * Filter by distillation capability. \"true\" returns only distillable models, \"false\" excludes them.\n */\nexport const Distillable = {\n    True: \"true\",\n    False: \"false\",\n};\n/**\n * When set to \"true\", return only models with zero data retention endpoints.\n */\nexport const Zdr = {\n    True: \"true\",\n};\n/**\n * Filter to models with endpoints in the given data region. Currently only \"eu\" is supported.\n */\nexport const Region = {\n    Eu: \"eu\",\n};\n/** @internal */\nexport const GetModelsCategory$outboundSchema = openEnums.outboundSchema(GetModelsCategory);\n/** @internal */\nexport const GetModelsSort$outboundSchema = openEnums.outboundSchema(GetModelsSort);\n/** @internal */\nexport const Distillable$outboundSchema = openEnums.outboundSchema(Distillable);\n/** @internal */\nexport const Zdr$outboundSchema = z.enum(Zdr);\n/** @internal */\nexport const Region$outboundSchema = z.enum(Region);\n/** @internal */\nexport const GetModelsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    category: GetModelsCategory$outboundSchema.optional(),\n    supportedParameters: z.string().optional(),\n    outputModalities: z.string().optional(),\n    sort: GetModelsSort$outboundSchema.optional(),\n    q: z.string().optional(),\n    inputModalities: z.string().optional(),\n    context: z.int().optional(),\n    minPrice: z.nullable(z.number()).optional(),\n    maxPrice: z.nullable(z.number()).optional(),\n    arch: z.string().optional(),\n    modelAuthors: z.string().optional(),\n    providers: z.string().optional(),\n    distillable: Distillable$outboundSchema.optional(),\n    zdr: Zdr$outboundSchema.optional(),\n    region: Region$outboundSchema.optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        supportedParameters: \"supported_parameters\",\n        outputModalities: \"output_modalities\",\n        inputModalities: \"input_modalities\",\n        minPrice: \"min_price\",\n        maxPrice: \"max_price\",\n        modelAuthors: \"model_authors\",\n    });\n});\nexport function getModelsRequestToJSON(getModelsRequest) {\n    return JSON.stringify(GetModelsRequest$outboundSchema.parse(getModelsRequest));\n}\n//# sourceMappingURL=getmodels.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4d97e48a6b92\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const GetObservabilityDestinationRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function getObservabilityDestinationRequestToJSON(getObservabilityDestinationRequest) {\n    return JSON.stringify(GetObservabilityDestinationRequest$outboundSchema.parse(getObservabilityDestinationRequest));\n}\n//# sourceMappingURL=getobservabilitydestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b3c05a058de0\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const GetPresetRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    slug: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function getPresetRequestToJSON(getPresetRequest) {\n    return JSON.stringify(GetPresetRequest$outboundSchema.parse(getPresetRequest));\n}\n//# sourceMappingURL=getpreset.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e1b248af1f73\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const GetPresetVersionRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    slug: z.string(),\n    version: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function getPresetVersionRequestToJSON(getPresetVersionRequest) {\n    return JSON.stringify(GetPresetVersionRequest$outboundSchema.parse(getPresetVersionRequest));\n}\n//# sourceMappingURL=getpresetversion.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b165b39aba3b\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const GetRankingsDailyRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    startDate: z.string().optional(),\n    endDate: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        startDate: \"start_date\",\n        endDate: \"end_date\",\n    });\n});\nexport function getRankingsDailyRequestToJSON(getRankingsDailyRequest) {\n    return JSON.stringify(GetRankingsDailyRequest$outboundSchema.parse(getRankingsDailyRequest));\n}\n//# sourceMappingURL=getrankingsdaily.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 19535b4511a4\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const GetUserActivityRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    date: z.string().optional(),\n    apiKeyHash: z.string().optional(),\n    userId: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        apiKeyHash: \"api_key_hash\",\n        userId: \"user_id\",\n    });\n});\nexport function getUserActivityRequestToJSON(getUserActivityRequest) {\n    return JSON.stringify(GetUserActivityRequest$outboundSchema.parse(getUserActivityRequest));\n}\n//# sourceMappingURL=getuseractivity.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ac332053ddd0\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const GetVideosRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    jobId: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function getVideosRequestToJSON(getVideosRequest) {\n    return JSON.stringify(GetVideosRequest$outboundSchema.parse(getVideosRequest));\n}\n//# sourceMappingURL=getvideos.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: bd847aca12d8\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const GetWorkspaceRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function getWorkspaceRequestToJSON(getWorkspaceRequest) {\n    return JSON.stringify(GetWorkspaceRequest$outboundSchema.parse(getWorkspaceRequest));\n}\n//# sourceMappingURL=getworkspace.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: ce11386ad30f\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\n/** @internal */\nexport const ListRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    includeDisabled: z.boolean().optional(),\n    offset: z.nullable(z.int()).optional(),\n    workspaceId: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        includeDisabled: \"include_disabled\",\n        workspaceId: \"workspace_id\",\n    });\n});\nexport function listRequestToJSON(listRequest) {\n    return JSON.stringify(ListRequest$outboundSchema.parse(listRequest));\n}\n/** @internal */\nexport const ListData$inboundSchema = z.object({\n    byok_usage: z.number(),\n    byok_usage_daily: z.number(),\n    byok_usage_monthly: z.number(),\n    byok_usage_weekly: z.number(),\n    created_at: z.string(),\n    creator_user_id: z.nullable(z.string()),\n    disabled: z.boolean(),\n    expires_at: z.nullable(z.iso.datetime({ offset: true }).transform(v => new Date(v))).optional(),\n    hash: z.string(),\n    include_byok_in_limit: z.boolean(),\n    label: z.string(),\n    limit: z.nullable(z.number()),\n    limit_remaining: z.nullable(z.number()),\n    limit_reset: z.nullable(z.string()),\n    name: z.string(),\n    updated_at: z.nullable(z.string()),\n    usage: z.number(),\n    usage_daily: z.number(),\n    usage_monthly: z.number(),\n    usage_weekly: z.number(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"byok_usage\": \"byokUsage\",\n        \"byok_usage_daily\": \"byokUsageDaily\",\n        \"byok_usage_monthly\": \"byokUsageMonthly\",\n        \"byok_usage_weekly\": \"byokUsageWeekly\",\n        \"created_at\": \"createdAt\",\n        \"creator_user_id\": \"creatorUserId\",\n        \"expires_at\": \"expiresAt\",\n        \"include_byok_in_limit\": \"includeByokInLimit\",\n        \"limit_remaining\": \"limitRemaining\",\n        \"limit_reset\": \"limitReset\",\n        \"updated_at\": \"updatedAt\",\n        \"usage_daily\": \"usageDaily\",\n        \"usage_monthly\": \"usageMonthly\",\n        \"usage_weekly\": \"usageWeekly\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function listDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListData' from JSON`);\n}\n/** @internal */\nexport const ListResponse$inboundSchema = z\n    .object({\n    data: z.array(z.lazy(() => ListData$inboundSchema)),\n});\nexport function listResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListResponse' from JSON`);\n}\n//# sourceMappingURL=list.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 953de50b8d0e\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as openEnums from \"../../types/enums.js\";\nimport * as models from \"../index.js\";\n/**\n * Optional provider slug to filter by (e.g. `openai`, `anthropic`, `amazon-bedrock`).\n */\nexport const Provider = {\n    Ai21: \"ai21\",\n    AionLabs: \"aion-labs\",\n    Akashml: \"akashml\",\n    Alibaba: \"alibaba\",\n    AmazonBedrock: \"amazon-bedrock\",\n    AmazonNova: \"amazon-nova\",\n    Ambient: \"ambient\",\n    Anthropic: \"anthropic\",\n    ArceeAi: \"arcee-ai\",\n    AtlasCloud: \"atlas-cloud\",\n    Avian: \"avian\",\n    Azure: \"azure\",\n    Baidu: \"baidu\",\n    Baseten: \"baseten\",\n    BlackForestLabs: \"black-forest-labs\",\n    Byteplus: \"byteplus\",\n    Cerebras: \"cerebras\",\n    Chutes: \"chutes\",\n    Cirrascale: \"cirrascale\",\n    Clarifai: \"clarifai\",\n    Cloudflare: \"cloudflare\",\n    Cohere: \"cohere\",\n    Crusoe: \"crusoe\",\n    Darkbloom: \"darkbloom\",\n    Decart: \"decart\",\n    Deepinfra: \"deepinfra\",\n    Deepseek: \"deepseek\",\n    Dekallm: \"dekallm\",\n    Digitalocean: \"digitalocean\",\n    Featherless: \"featherless\",\n    Fireworks: \"fireworks\",\n    Friendli: \"friendli\",\n    Gmicloud: \"gmicloud\",\n    GoogleAiStudio: \"google-ai-studio\",\n    GoogleVertex: \"google-vertex\",\n    Groq: \"groq\",\n    Inception: \"inception\",\n    Inceptron: \"inceptron\",\n    InferenceNet: \"inference-net\",\n    Infermatic: \"infermatic\",\n    Inflection: \"inflection\",\n    IoNet: \"io-net\",\n    Ionstream: \"ionstream\",\n    Liquid: \"liquid\",\n    Mancer: \"mancer\",\n    Mara: \"mara\",\n    Minimax: \"minimax\",\n    Mistral: \"mistral\",\n    Modelrun: \"modelrun\",\n    Modular: \"modular\",\n    Moonshotai: \"moonshotai\",\n    Morph: \"morph\",\n    Ncompass: \"ncompass\",\n    Nebius: \"nebius\",\n    NexAgi: \"nex-agi\",\n    Nextbit: \"nextbit\",\n    Novita: \"novita\",\n    Nvidia: \"nvidia\",\n    OpenInference: \"open-inference\",\n    Openai: \"openai\",\n    Parasail: \"parasail\",\n    Perceptron: \"perceptron\",\n    Perplexity: \"perplexity\",\n    Phala: \"phala\",\n    Poolside: \"poolside\",\n    Recraft: \"recraft\",\n    Reka: \"reka\",\n    Relace: \"relace\",\n    Sambanova: \"sambanova\",\n    Seed: \"seed\",\n    Siliconflow: \"siliconflow\",\n    Sourceful: \"sourceful\",\n    Stepfun: \"stepfun\",\n    Streamlake: \"streamlake\",\n    Switchpoint: \"switchpoint\",\n    Together: \"together\",\n    Upstage: \"upstage\",\n    Venice: \"venice\",\n    Wafer: \"wafer\",\n    Wandb: \"wandb\",\n    Xai: \"xai\",\n    Xiaomi: \"xiaomi\",\n    ZAi: \"z-ai\",\n};\n/** @internal */\nexport const Provider$outboundSchema = openEnums\n    .outboundSchema(Provider);\n/** @internal */\nexport const ListBYOKKeysRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    offset: z.nullable(z.int()).optional(),\n    limit: z.int().optional(),\n    workspaceId: z.string().optional(),\n    provider: Provider$outboundSchema.optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        workspaceId: \"workspace_id\",\n    });\n});\nexport function listBYOKKeysRequestToJSON(listBYOKKeysRequest) {\n    return JSON.stringify(ListBYOKKeysRequest$outboundSchema.parse(listBYOKKeysRequest));\n}\n/** @internal */\nexport const ListBYOKKeysResponse$inboundSchema = z.object({\n    Result: models.ListBYOKKeysResponse$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"Result\": \"result\",\n    });\n});\nexport function listBYOKKeysResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListBYOKKeysResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListBYOKKeysResponse' from JSON`);\n}\n//# sourceMappingURL=listbyokkeys.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 52a7fdf31054\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const ListEmbeddingsModelsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listEmbeddingsModelsRequestToJSON(listEmbeddingsModelsRequest) {\n    return JSON.stringify(ListEmbeddingsModelsRequest$outboundSchema.parse(listEmbeddingsModelsRequest));\n}\n//# sourceMappingURL=listembeddingsmodels.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 253a81bc10af\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const ListEndpointsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    author: z.string(),\n    slug: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listEndpointsRequestToJSON(listEndpointsRequest) {\n    return JSON.stringify(ListEndpointsRequest$outboundSchema.parse(listEndpointsRequest));\n}\n/** @internal */\nexport const ListEndpointsResponse$inboundSchema = z.object({\n    data: models.ListEndpointsResponse$inboundSchema,\n});\nexport function listEndpointsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListEndpointsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListEndpointsResponse' from JSON`);\n}\n//# sourceMappingURL=listendpoints.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d52e6aeefb5e\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const ListEndpointsZdrRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listEndpointsZdrRequestToJSON(listEndpointsZdrRequest) {\n    return JSON.stringify(ListEndpointsZdrRequest$outboundSchema.parse(listEndpointsZdrRequest));\n}\n/** @internal */\nexport const ListEndpointsZdrResponse$inboundSchema = z.object({\n    data: z.array(models.PublicEndpoint$inboundSchema),\n});\nexport function listEndpointsZdrResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListEndpointsZdrResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListEndpointsZdrResponse' from JSON`);\n}\n//# sourceMappingURL=listendpointszdr.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 9220b094caf4\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const ListFilesRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    limit: z.int().optional(),\n    cursor: z.string().optional(),\n    workspaceId: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        workspaceId: \"workspace_id\",\n    });\n});\nexport function listFilesRequestToJSON(listFilesRequest) {\n    return JSON.stringify(ListFilesRequest$outboundSchema.parse(listFilesRequest));\n}\n/** @internal */\nexport const ListFilesResponse$inboundSchema = z.object({\n    Result: models.FileListResponse$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"Result\": \"result\",\n    });\n});\nexport function listFilesResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListFilesResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListFilesResponse' from JSON`);\n}\n//# sourceMappingURL=listfiles.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 75c4167b92a2\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const ListGenerationContentRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listGenerationContentRequestToJSON(listGenerationContentRequest) {\n    return JSON.stringify(ListGenerationContentRequest$outboundSchema.parse(listGenerationContentRequest));\n}\n//# sourceMappingURL=listgenerationcontent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e616af13fd7a\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const ListGuardrailKeyAssignmentsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n    offset: z.nullable(z.int()).optional(),\n    limit: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listGuardrailKeyAssignmentsRequestToJSON(listGuardrailKeyAssignmentsRequest) {\n    return JSON.stringify(ListGuardrailKeyAssignmentsRequest$outboundSchema.parse(listGuardrailKeyAssignmentsRequest));\n}\n/** @internal */\nexport const ListGuardrailKeyAssignmentsResponse$inboundSchema = z.object({\n    Result: models.ListKeyAssignmentsResponse$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"Result\": \"result\",\n    });\n});\nexport function listGuardrailKeyAssignmentsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListGuardrailKeyAssignmentsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListGuardrailKeyAssignmentsResponse' from JSON`);\n}\n//# sourceMappingURL=listguardrailkeyassignments.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 37ee24c57c33\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const ListGuardrailMemberAssignmentsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n    offset: z.nullable(z.int()).optional(),\n    limit: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listGuardrailMemberAssignmentsRequestToJSON(listGuardrailMemberAssignmentsRequest) {\n    return JSON.stringify(ListGuardrailMemberAssignmentsRequest$outboundSchema.parse(listGuardrailMemberAssignmentsRequest));\n}\n/** @internal */\nexport const ListGuardrailMemberAssignmentsResponse$inboundSchema = z.object({\n    Result: models.ListMemberAssignmentsResponse$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"Result\": \"result\",\n    });\n});\nexport function listGuardrailMemberAssignmentsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListGuardrailMemberAssignmentsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListGuardrailMemberAssignmentsResponse' from JSON`);\n}\n//# sourceMappingURL=listguardrailmemberassignments.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 4c71cf4db173\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const ListGuardrailsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    offset: z.nullable(z.int()).optional(),\n    limit: z.int().optional(),\n    workspaceId: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        workspaceId: \"workspace_id\",\n    });\n});\nexport function listGuardrailsRequestToJSON(listGuardrailsRequest) {\n    return JSON.stringify(ListGuardrailsRequest$outboundSchema.parse(listGuardrailsRequest));\n}\n/** @internal */\nexport const ListGuardrailsResponse$inboundSchema = z.object({\n    Result: models.ListGuardrailsResponse$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"Result\": \"result\",\n    });\n});\nexport function listGuardrailsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListGuardrailsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListGuardrailsResponse' from JSON`);\n}\n//# sourceMappingURL=listguardrails.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: c4b0c0303428\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const ListKeyAssignmentsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    offset: z.nullable(z.int()).optional(),\n    limit: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listKeyAssignmentsRequestToJSON(listKeyAssignmentsRequest) {\n    return JSON.stringify(ListKeyAssignmentsRequest$outboundSchema.parse(listKeyAssignmentsRequest));\n}\n/** @internal */\nexport const ListKeyAssignmentsResponse$inboundSchema = z.object({\n    Result: models.ListKeyAssignmentsResponse$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"Result\": \"result\",\n    });\n});\nexport function listKeyAssignmentsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListKeyAssignmentsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListKeyAssignmentsResponse' from JSON`);\n}\n//# sourceMappingURL=listkeyassignments.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7d02937e1a11\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const ListMemberAssignmentsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    offset: z.nullable(z.int()).optional(),\n    limit: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listMemberAssignmentsRequestToJSON(listMemberAssignmentsRequest) {\n    return JSON.stringify(ListMemberAssignmentsRequest$outboundSchema.parse(listMemberAssignmentsRequest));\n}\n/** @internal */\nexport const ListMemberAssignmentsResponse$inboundSchema = z.object({\n    Result: models.ListMemberAssignmentsResponse$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"Result\": \"result\",\n    });\n});\nexport function listMemberAssignmentsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListMemberAssignmentsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListMemberAssignmentsResponse' from JSON`);\n}\n//# sourceMappingURL=listmemberassignments.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 8def1e8eb7b5\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const ListModelsCountRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    outputModalities: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        outputModalities: \"output_modalities\",\n    });\n});\nexport function listModelsCountRequestToJSON(listModelsCountRequest) {\n    return JSON.stringify(ListModelsCountRequest$outboundSchema.parse(listModelsCountRequest));\n}\n//# sourceMappingURL=listmodelscount.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0846aac6be02\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const ListModelsUserSecurity$outboundSchema = z.object({\n    bearer: z.string(),\n});\nexport function listModelsUserSecurityToJSON(listModelsUserSecurity) {\n    return JSON.stringify(ListModelsUserSecurity$outboundSchema.parse(listModelsUserSecurity));\n}\n/** @internal */\nexport const ListModelsUserRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listModelsUserRequestToJSON(listModelsUserRequest) {\n    return JSON.stringify(ListModelsUserRequest$outboundSchema.parse(listModelsUserRequest));\n}\n//# sourceMappingURL=listmodelsuser.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 611f391b0806\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const ListObservabilityDestinationsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    offset: z.nullable(z.int()).optional(),\n    limit: z.int().optional(),\n    workspaceId: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        workspaceId: \"workspace_id\",\n    });\n});\nexport function listObservabilityDestinationsRequestToJSON(listObservabilityDestinationsRequest) {\n    return JSON.stringify(ListObservabilityDestinationsRequest$outboundSchema.parse(listObservabilityDestinationsRequest));\n}\n/** @internal */\nexport const ListObservabilityDestinationsResponse$inboundSchema = z.object({\n    Result: models.ListObservabilityDestinationsResponse$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"Result\": \"result\",\n    });\n});\nexport function listObservabilityDestinationsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListObservabilityDestinationsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListObservabilityDestinationsResponse' from JSON`);\n}\n//# sourceMappingURL=listobservabilitydestinations.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: cc21259f09b8\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as openEnums from \"../../types/enums.js\";\n/**\n * Role of the member in the organization\n */\nexport const Role = {\n    OrgAdmin: \"org:admin\",\n    OrgMember: \"org:member\",\n};\n/** @internal */\nexport const ListOrganizationMembersRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    offset: z.nullable(z.int()).optional(),\n    limit: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listOrganizationMembersRequestToJSON(listOrganizationMembersRequest) {\n    return JSON.stringify(ListOrganizationMembersRequest$outboundSchema.parse(listOrganizationMembersRequest));\n}\n/** @internal */\nexport const Role$inboundSchema = openEnums\n    .inboundSchema(Role);\n/** @internal */\nexport const ListOrganizationMembersData$inboundSchema = z.object({\n    email: z.string(),\n    first_name: z.nullable(z.string()),\n    id: z.string(),\n    last_name: z.nullable(z.string()),\n    role: Role$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"first_name\": \"firstName\",\n        \"last_name\": \"lastName\",\n    });\n});\nexport function listOrganizationMembersDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListOrganizationMembersData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListOrganizationMembersData' from JSON`);\n}\n/** @internal */\nexport const ListOrganizationMembersResponseBody$inboundSchema = z.object({\n    data: z.array(z.lazy(() => ListOrganizationMembersData$inboundSchema)),\n    total_count: z.int(),\n}).transform((v) => {\n    return remap$(v, {\n        \"total_count\": \"totalCount\",\n    });\n});\nexport function listOrganizationMembersResponseBodyFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListOrganizationMembersResponseBody$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListOrganizationMembersResponseBody' from JSON`);\n}\n/** @internal */\nexport const ListOrganizationMembersResponse$inboundSchema = z.object({\n    Result: z.lazy(() => ListOrganizationMembersResponseBody$inboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        \"Result\": \"result\",\n    });\n});\nexport function listOrganizationMembersResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListOrganizationMembersResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListOrganizationMembersResponse' from JSON`);\n}\n//# sourceMappingURL=listorganizationmembers.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 85970d436882\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const ListPresetsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    offset: z.nullable(z.int()).optional(),\n    limit: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listPresetsRequestToJSON(listPresetsRequest) {\n    return JSON.stringify(ListPresetsRequest$outboundSchema.parse(listPresetsRequest));\n}\n/** @internal */\nexport const ListPresetsResponse$inboundSchema = z.object({\n    Result: models.ListPresetsResponse$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"Result\": \"result\",\n    });\n});\nexport function listPresetsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListPresetsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListPresetsResponse' from JSON`);\n}\n//# sourceMappingURL=listpresets.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 7971ca6e4018\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const ListPresetVersionsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    slug: z.string(),\n    offset: z.nullable(z.int()).optional(),\n    limit: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listPresetVersionsRequestToJSON(listPresetVersionsRequest) {\n    return JSON.stringify(ListPresetVersionsRequest$outboundSchema.parse(listPresetVersionsRequest));\n}\n/** @internal */\nexport const ListPresetVersionsResponse$inboundSchema = z.object({\n    Result: models.ListPresetVersionsResponse$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"Result\": \"result\",\n    });\n});\nexport function listPresetVersionsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListPresetVersionsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListPresetVersionsResponse' from JSON`);\n}\n//# sourceMappingURL=listpresetversions.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 76a35169de06\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as openEnums from \"../../types/enums.js\";\nexport const Datacenter = {\n    Ad: \"AD\",\n    Ae: \"AE\",\n    Af: \"AF\",\n    Ag: \"AG\",\n    Ai: \"AI\",\n    Al: \"AL\",\n    Am: \"AM\",\n    Ao: \"AO\",\n    Aq: \"AQ\",\n    Ar: \"AR\",\n    As: \"AS\",\n    At: \"AT\",\n    Au: \"AU\",\n    Aw: \"AW\",\n    Ax: \"AX\",\n    Az: \"AZ\",\n    Ba: \"BA\",\n    Bb: \"BB\",\n    Bd: \"BD\",\n    Be: \"BE\",\n    Bf: \"BF\",\n    Bg: \"BG\",\n    Bh: \"BH\",\n    Bi: \"BI\",\n    Bj: \"BJ\",\n    Bl: \"BL\",\n    Bm: \"BM\",\n    Bn: \"BN\",\n    Bo: \"BO\",\n    Bq: \"BQ\",\n    Br: \"BR\",\n    Bs: \"BS\",\n    Bt: \"BT\",\n    Bv: \"BV\",\n    Bw: \"BW\",\n    By: \"BY\",\n    Bz: \"BZ\",\n    Ca: \"CA\",\n    Cc: \"CC\",\n    Cd: \"CD\",\n    Cf: \"CF\",\n    Cg: \"CG\",\n    Ch: \"CH\",\n    Ci: \"CI\",\n    Ck: \"CK\",\n    Cl: \"CL\",\n    Cm: \"CM\",\n    Cn: \"CN\",\n    Co: \"CO\",\n    Cr: \"CR\",\n    Cu: \"CU\",\n    Cv: \"CV\",\n    Cw: \"CW\",\n    Cx: \"CX\",\n    Cy: \"CY\",\n    Cz: \"CZ\",\n    De: \"DE\",\n    Dj: \"DJ\",\n    Dk: \"DK\",\n    Dm: \"DM\",\n    Do: \"DO\",\n    Dz: \"DZ\",\n    Ec: \"EC\",\n    Ee: \"EE\",\n    Eg: \"EG\",\n    Eh: \"EH\",\n    Er: \"ER\",\n    Es: \"ES\",\n    Et: \"ET\",\n    Fi: \"FI\",\n    Fj: \"FJ\",\n    Fk: \"FK\",\n    Fm: \"FM\",\n    Fo: \"FO\",\n    Fr: \"FR\",\n    Ga: \"GA\",\n    Gb: \"GB\",\n    Gd: \"GD\",\n    Ge: \"GE\",\n    Gf: \"GF\",\n    Gg: \"GG\",\n    Gh: \"GH\",\n    Gi: \"GI\",\n    Gl: \"GL\",\n    Gm: \"GM\",\n    Gn: \"GN\",\n    Gp: \"GP\",\n    Gq: \"GQ\",\n    Gr: \"GR\",\n    Gs: \"GS\",\n    Gt: \"GT\",\n    Gu: \"GU\",\n    Gw: \"GW\",\n    Gy: \"GY\",\n    Hk: \"HK\",\n    Hm: \"HM\",\n    Hn: \"HN\",\n    Hr: \"HR\",\n    Ht: \"HT\",\n    Hu: \"HU\",\n    Id: \"ID\",\n    Ie: \"IE\",\n    Il: \"IL\",\n    Im: \"IM\",\n    In: \"IN\",\n    Io: \"IO\",\n    Iq: \"IQ\",\n    Ir: \"IR\",\n    Is: \"IS\",\n    It: \"IT\",\n    Je: \"JE\",\n    Jm: \"JM\",\n    Jo: \"JO\",\n    Jp: \"JP\",\n    Ke: \"KE\",\n    Kg: \"KG\",\n    Kh: \"KH\",\n    Ki: \"KI\",\n    Km: \"KM\",\n    Kn: \"KN\",\n    Kp: \"KP\",\n    Kr: \"KR\",\n    Kw: \"KW\",\n    Ky: \"KY\",\n    Kz: \"KZ\",\n    La: \"LA\",\n    Lb: \"LB\",\n    Lc: \"LC\",\n    Li: \"LI\",\n    Lk: \"LK\",\n    Lr: \"LR\",\n    Ls: \"LS\",\n    Lt: \"LT\",\n    Lu: \"LU\",\n    Lv: \"LV\",\n    Ly: \"LY\",\n    Ma: \"MA\",\n    Mc: \"MC\",\n    Md: \"MD\",\n    Me: \"ME\",\n    Mf: \"MF\",\n    Mg: \"MG\",\n    Mh: \"MH\",\n    Mk: \"MK\",\n    Ml: \"ML\",\n    Mm: \"MM\",\n    Mn: \"MN\",\n    Mo: \"MO\",\n    Mp: \"MP\",\n    Mq: \"MQ\",\n    Mr: \"MR\",\n    Ms: \"MS\",\n    Mt: \"MT\",\n    Mu: \"MU\",\n    Mv: \"MV\",\n    Mw: \"MW\",\n    Mx: \"MX\",\n    My: \"MY\",\n    Mz: \"MZ\",\n    Na: \"NA\",\n    Nc: \"NC\",\n    Ne: \"NE\",\n    Nf: \"NF\",\n    Ng: \"NG\",\n    Ni: \"NI\",\n    Nl: \"NL\",\n    No: \"NO\",\n    Np: \"NP\",\n    Nr: \"NR\",\n    Nu: \"NU\",\n    Nz: \"NZ\",\n    Om: \"OM\",\n    Pa: \"PA\",\n    Pe: \"PE\",\n    Pf: \"PF\",\n    Pg: \"PG\",\n    Ph: \"PH\",\n    Pk: \"PK\",\n    Pl: \"PL\",\n    Pm: \"PM\",\n    Pn: \"PN\",\n    Pr: \"PR\",\n    Ps: \"PS\",\n    Pt: \"PT\",\n    Pw: \"PW\",\n    Py: \"PY\",\n    Qa: \"QA\",\n    Re: \"RE\",\n    Ro: \"RO\",\n    Rs: \"RS\",\n    Ru: \"RU\",\n    Rw: \"RW\",\n    Sa: \"SA\",\n    Sb: \"SB\",\n    Sc: \"SC\",\n    Sd: \"SD\",\n    Se: \"SE\",\n    Sg: \"SG\",\n    Sh: \"SH\",\n    Si: \"SI\",\n    Sj: \"SJ\",\n    Sk: \"SK\",\n    Sl: \"SL\",\n    Sm: \"SM\",\n    Sn: \"SN\",\n    So: \"SO\",\n    Sr: \"SR\",\n    Ss: \"SS\",\n    St: \"ST\",\n    Sv: \"SV\",\n    Sx: \"SX\",\n    Sy: \"SY\",\n    Sz: \"SZ\",\n    Tc: \"TC\",\n    Td: \"TD\",\n    Tf: \"TF\",\n    Tg: \"TG\",\n    Th: \"TH\",\n    Tj: \"TJ\",\n    Tk: \"TK\",\n    Tl: \"TL\",\n    Tm: \"TM\",\n    Tn: \"TN\",\n    To: \"TO\",\n    Tr: \"TR\",\n    Tt: \"TT\",\n    Tv: \"TV\",\n    Tw: \"TW\",\n    Tz: \"TZ\",\n    Ua: \"UA\",\n    Ug: \"UG\",\n    Um: \"UM\",\n    Us: \"US\",\n    Uy: \"UY\",\n    Uz: \"UZ\",\n    Va: \"VA\",\n    Vc: \"VC\",\n    Ve: \"VE\",\n    Vg: \"VG\",\n    Vi: \"VI\",\n    Vn: \"VN\",\n    Vu: \"VU\",\n    Wf: \"WF\",\n    Ws: \"WS\",\n    Ye: \"YE\",\n    Yt: \"YT\",\n    Za: \"ZA\",\n    Zm: \"ZM\",\n    Zw: \"ZW\",\n};\n/**\n * ISO 3166-1 Alpha-2 country code of the provider headquarters\n */\nexport const Headquarters = {\n    Ad: \"AD\",\n    Ae: \"AE\",\n    Af: \"AF\",\n    Ag: \"AG\",\n    Ai: \"AI\",\n    Al: \"AL\",\n    Am: \"AM\",\n    Ao: \"AO\",\n    Aq: \"AQ\",\n    Ar: \"AR\",\n    As: \"AS\",\n    At: \"AT\",\n    Au: \"AU\",\n    Aw: \"AW\",\n    Ax: \"AX\",\n    Az: \"AZ\",\n    Ba: \"BA\",\n    Bb: \"BB\",\n    Bd: \"BD\",\n    Be: \"BE\",\n    Bf: \"BF\",\n    Bg: \"BG\",\n    Bh: \"BH\",\n    Bi: \"BI\",\n    Bj: \"BJ\",\n    Bl: \"BL\",\n    Bm: \"BM\",\n    Bn: \"BN\",\n    Bo: \"BO\",\n    Bq: \"BQ\",\n    Br: \"BR\",\n    Bs: \"BS\",\n    Bt: \"BT\",\n    Bv: \"BV\",\n    Bw: \"BW\",\n    By: \"BY\",\n    Bz: \"BZ\",\n    Ca: \"CA\",\n    Cc: \"CC\",\n    Cd: \"CD\",\n    Cf: \"CF\",\n    Cg: \"CG\",\n    Ch: \"CH\",\n    Ci: \"CI\",\n    Ck: \"CK\",\n    Cl: \"CL\",\n    Cm: \"CM\",\n    Cn: \"CN\",\n    Co: \"CO\",\n    Cr: \"CR\",\n    Cu: \"CU\",\n    Cv: \"CV\",\n    Cw: \"CW\",\n    Cx: \"CX\",\n    Cy: \"CY\",\n    Cz: \"CZ\",\n    De: \"DE\",\n    Dj: \"DJ\",\n    Dk: \"DK\",\n    Dm: \"DM\",\n    Do: \"DO\",\n    Dz: \"DZ\",\n    Ec: \"EC\",\n    Ee: \"EE\",\n    Eg: \"EG\",\n    Eh: \"EH\",\n    Er: \"ER\",\n    Es: \"ES\",\n    Et: \"ET\",\n    Fi: \"FI\",\n    Fj: \"FJ\",\n    Fk: \"FK\",\n    Fm: \"FM\",\n    Fo: \"FO\",\n    Fr: \"FR\",\n    Ga: \"GA\",\n    Gb: \"GB\",\n    Gd: \"GD\",\n    Ge: \"GE\",\n    Gf: \"GF\",\n    Gg: \"GG\",\n    Gh: \"GH\",\n    Gi: \"GI\",\n    Gl: \"GL\",\n    Gm: \"GM\",\n    Gn: \"GN\",\n    Gp: \"GP\",\n    Gq: \"GQ\",\n    Gr: \"GR\",\n    Gs: \"GS\",\n    Gt: \"GT\",\n    Gu: \"GU\",\n    Gw: \"GW\",\n    Gy: \"GY\",\n    Hk: \"HK\",\n    Hm: \"HM\",\n    Hn: \"HN\",\n    Hr: \"HR\",\n    Ht: \"HT\",\n    Hu: \"HU\",\n    Id: \"ID\",\n    Ie: \"IE\",\n    Il: \"IL\",\n    Im: \"IM\",\n    In: \"IN\",\n    Io: \"IO\",\n    Iq: \"IQ\",\n    Ir: \"IR\",\n    Is: \"IS\",\n    It: \"IT\",\n    Je: \"JE\",\n    Jm: \"JM\",\n    Jo: \"JO\",\n    Jp: \"JP\",\n    Ke: \"KE\",\n    Kg: \"KG\",\n    Kh: \"KH\",\n    Ki: \"KI\",\n    Km: \"KM\",\n    Kn: \"KN\",\n    Kp: \"KP\",\n    Kr: \"KR\",\n    Kw: \"KW\",\n    Ky: \"KY\",\n    Kz: \"KZ\",\n    La: \"LA\",\n    Lb: \"LB\",\n    Lc: \"LC\",\n    Li: \"LI\",\n    Lk: \"LK\",\n    Lr: \"LR\",\n    Ls: \"LS\",\n    Lt: \"LT\",\n    Lu: \"LU\",\n    Lv: \"LV\",\n    Ly: \"LY\",\n    Ma: \"MA\",\n    Mc: \"MC\",\n    Md: \"MD\",\n    Me: \"ME\",\n    Mf: \"MF\",\n    Mg: \"MG\",\n    Mh: \"MH\",\n    Mk: \"MK\",\n    Ml: \"ML\",\n    Mm: \"MM\",\n    Mn: \"MN\",\n    Mo: \"MO\",\n    Mp: \"MP\",\n    Mq: \"MQ\",\n    Mr: \"MR\",\n    Ms: \"MS\",\n    Mt: \"MT\",\n    Mu: \"MU\",\n    Mv: \"MV\",\n    Mw: \"MW\",\n    Mx: \"MX\",\n    My: \"MY\",\n    Mz: \"MZ\",\n    Na: \"NA\",\n    Nc: \"NC\",\n    Ne: \"NE\",\n    Nf: \"NF\",\n    Ng: \"NG\",\n    Ni: \"NI\",\n    Nl: \"NL\",\n    No: \"NO\",\n    Np: \"NP\",\n    Nr: \"NR\",\n    Nu: \"NU\",\n    Nz: \"NZ\",\n    Om: \"OM\",\n    Pa: \"PA\",\n    Pe: \"PE\",\n    Pf: \"PF\",\n    Pg: \"PG\",\n    Ph: \"PH\",\n    Pk: \"PK\",\n    Pl: \"PL\",\n    Pm: \"PM\",\n    Pn: \"PN\",\n    Pr: \"PR\",\n    Ps: \"PS\",\n    Pt: \"PT\",\n    Pw: \"PW\",\n    Py: \"PY\",\n    Qa: \"QA\",\n    Re: \"RE\",\n    Ro: \"RO\",\n    Rs: \"RS\",\n    Ru: \"RU\",\n    Rw: \"RW\",\n    Sa: \"SA\",\n    Sb: \"SB\",\n    Sc: \"SC\",\n    Sd: \"SD\",\n    Se: \"SE\",\n    Sg: \"SG\",\n    Sh: \"SH\",\n    Si: \"SI\",\n    Sj: \"SJ\",\n    Sk: \"SK\",\n    Sl: \"SL\",\n    Sm: \"SM\",\n    Sn: \"SN\",\n    So: \"SO\",\n    Sr: \"SR\",\n    Ss: \"SS\",\n    St: \"ST\",\n    Sv: \"SV\",\n    Sx: \"SX\",\n    Sy: \"SY\",\n    Sz: \"SZ\",\n    Tc: \"TC\",\n    Td: \"TD\",\n    Tf: \"TF\",\n    Tg: \"TG\",\n    Th: \"TH\",\n    Tj: \"TJ\",\n    Tk: \"TK\",\n    Tl: \"TL\",\n    Tm: \"TM\",\n    Tn: \"TN\",\n    To: \"TO\",\n    Tr: \"TR\",\n    Tt: \"TT\",\n    Tv: \"TV\",\n    Tw: \"TW\",\n    Tz: \"TZ\",\n    Ua: \"UA\",\n    Ug: \"UG\",\n    Um: \"UM\",\n    Us: \"US\",\n    Uy: \"UY\",\n    Uz: \"UZ\",\n    Va: \"VA\",\n    Vc: \"VC\",\n    Ve: \"VE\",\n    Vg: \"VG\",\n    Vi: \"VI\",\n    Vn: \"VN\",\n    Vu: \"VU\",\n    Wf: \"WF\",\n    Ws: \"WS\",\n    Ye: \"YE\",\n    Yt: \"YT\",\n    Za: \"ZA\",\n    Zm: \"ZM\",\n    Zw: \"ZW\",\n};\n/** @internal */\nexport const ListProvidersRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listProvidersRequestToJSON(listProvidersRequest) {\n    return JSON.stringify(ListProvidersRequest$outboundSchema.parse(listProvidersRequest));\n}\n/** @internal */\nexport const Datacenter$inboundSchema = openEnums.inboundSchema(Datacenter);\n/** @internal */\nexport const Headquarters$inboundSchema = openEnums.inboundSchema(Headquarters);\n/** @internal */\nexport const ListProvidersData$inboundSchema = z.object({\n    datacenters: z.nullable(z.array(Datacenter$inboundSchema)).optional(),\n    headquarters: z.nullable(Headquarters$inboundSchema).optional(),\n    name: z.string(),\n    privacy_policy_url: z.nullable(z.string()),\n    slug: z.string(),\n    status_page_url: z.nullable(z.string()).optional(),\n    terms_of_service_url: z.nullable(z.string()).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        \"privacy_policy_url\": \"privacyPolicyUrl\",\n        \"status_page_url\": \"statusPageUrl\",\n        \"terms_of_service_url\": \"termsOfServiceUrl\",\n    });\n});\nexport function listProvidersDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListProvidersData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListProvidersData' from JSON`);\n}\n/** @internal */\nexport const ListProvidersResponse$inboundSchema = z.object({\n    data: z.array(z.lazy(() => ListProvidersData$inboundSchema)),\n});\nexport function listProvidersResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListProvidersResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListProvidersResponse' from JSON`);\n}\n//# sourceMappingURL=listproviders.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 6d6644a39a85\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const ListVideosContentRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    jobId: z.string(),\n    index: z.nullable(z.int().default(0)),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listVideosContentRequestToJSON(listVideosContentRequest) {\n    return JSON.stringify(ListVideosContentRequest$outboundSchema.parse(listVideosContentRequest));\n}\n//# sourceMappingURL=listvideoscontent.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 3c3814660d7c\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\n/** @internal */\nexport const ListVideosModelsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listVideosModelsRequestToJSON(listVideosModelsRequest) {\n    return JSON.stringify(ListVideosModelsRequest$outboundSchema.parse(listVideosModelsRequest));\n}\n//# sourceMappingURL=listvideosmodels.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 04f9b5b78c0f\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const ListWorkspacesRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    offset: z.nullable(z.int()).optional(),\n    limit: z.int().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n    });\n});\nexport function listWorkspacesRequestToJSON(listWorkspacesRequest) {\n    return JSON.stringify(ListWorkspacesRequest$outboundSchema.parse(listWorkspacesRequest));\n}\n/** @internal */\nexport const ListWorkspacesResponse$inboundSchema = z.object({\n    Result: models.ListWorkspacesResponse$inboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        \"Result\": \"result\",\n    });\n});\nexport function listWorkspacesResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => ListWorkspacesResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'ListWorkspacesResponse' from JSON`);\n}\n//# sourceMappingURL=listworkspaces.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 2b9c6044e362\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as openEnums from \"../../types/enums.js\";\nexport const Direction = {\n    Asc: \"asc\",\n    Desc: \"desc\",\n};\n/** @internal */\nexport const Value2$outboundSchema = z\n    .union([z.string(), z.number()]);\nexport function value2ToJSON(value2) {\n    return JSON.stringify(Value2$outboundSchema.parse(value2));\n}\n/** @internal */\nexport const Value1$outboundSchema = z\n    .union([z.string(), z.number(), z.array(z.union([z.string(), z.number()]))]);\nexport function value1ToJSON(value1) {\n    return JSON.stringify(Value1$outboundSchema.parse(value1));\n}\n/** @internal */\nexport const Filter$outboundSchema = z\n    .object({\n    field: z.string(),\n    operator: z.string(),\n    value: z.union([\n        z.string(),\n        z.number(),\n        z.array(z.union([z.string(), z.number()])),\n    ]),\n});\nexport function filterToJSON(filter) {\n    return JSON.stringify(Filter$outboundSchema.parse(filter));\n}\n/** @internal */\nexport const Direction$outboundSchema = openEnums\n    .outboundSchema(Direction);\n/** @internal */\nexport const OrderBy$outboundSchema = z\n    .object({\n    direction: Direction$outboundSchema,\n    field: z.string(),\n});\nexport function orderByToJSON(orderBy) {\n    return JSON.stringify(OrderBy$outboundSchema.parse(orderBy));\n}\n/** @internal */\nexport const TimeRange$outboundSchema = z.object({\n    end: z.date().transform(v => v.toISOString()),\n    start: z.date().transform(v => v.toISOString()),\n});\nexport function timeRangeToJSON(timeRange) {\n    return JSON.stringify(TimeRange$outboundSchema.parse(timeRange));\n}\n/** @internal */\nexport const QueryAnalyticsRequestBody$outboundSchema = z.object({\n    dimensions: z.array(z.string()).optional(),\n    filters: z.array(z.lazy(() => Filter$outboundSchema)).optional(),\n    granularity: z.string().optional(),\n    groupLimit: z.int().optional(),\n    limit: z.int().optional(),\n    metrics: z.array(z.string()),\n    orderBy: z.lazy(() => OrderBy$outboundSchema).optional(),\n    timeRange: z.lazy(() => TimeRange$outboundSchema).optional(),\n}).transform((v) => {\n    return remap$(v, {\n        groupLimit: \"group_limit\",\n        orderBy: \"order_by\",\n        timeRange: \"time_range\",\n    });\n});\nexport function queryAnalyticsRequestBodyToJSON(queryAnalyticsRequestBody) {\n    return JSON.stringify(QueryAnalyticsRequestBody$outboundSchema.parse(queryAnalyticsRequestBody));\n}\n/** @internal */\nexport const QueryAnalyticsRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    requestBody: z.lazy(() => QueryAnalyticsRequestBody$outboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        requestBody: \"RequestBody\",\n    });\n});\nexport function queryAnalyticsRequestToJSON(queryAnalyticsRequest) {\n    return JSON.stringify(QueryAnalyticsRequest$outboundSchema.parse(queryAnalyticsRequest));\n}\n/** @internal */\nexport const QueryAnalyticsData1$inboundSchema = z.object({});\nexport function queryAnalyticsData1FromJSON(jsonString) {\n    return safeParse(jsonString, (x) => QueryAnalyticsData1$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'QueryAnalyticsData1' from JSON`);\n}\n/** @internal */\nexport const Metadata$inboundSchema = z.object({\n    query_time_ms: z.number(),\n    row_count: z.int(),\n    truncated: z.boolean(),\n}).transform((v) => {\n    return remap$(v, {\n        \"query_time_ms\": \"queryTimeMs\",\n        \"row_count\": \"rowCount\",\n    });\n});\nexport function metadataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => Metadata$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'Metadata' from JSON`);\n}\n/** @internal */\nexport const QueryAnalyticsData2$inboundSchema = z.object({\n    cachedAt: z.number().optional(),\n    data: z.array(z.lazy(() => QueryAnalyticsData1$inboundSchema)),\n    metadata: z.lazy(() => Metadata$inboundSchema),\n});\nexport function queryAnalyticsData2FromJSON(jsonString) {\n    return safeParse(jsonString, (x) => QueryAnalyticsData2$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'QueryAnalyticsData2' from JSON`);\n}\n/** @internal */\nexport const QueryAnalyticsResponse$inboundSchema = z.object({\n    data: z.lazy(() => QueryAnalyticsData2$inboundSchema),\n});\nexport function queryAnalyticsResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => QueryAnalyticsResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'QueryAnalyticsResponse' from JSON`);\n}\n//# sourceMappingURL=queryanalytics.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 52a55a780d2d\n */\nimport * as z from \"zod/v4\";\nimport { EventStream } from \"../../lib/event-streams.js\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const SendChatCompletionRequestRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    xOpenRouterMetadata: models.MetadataLevel$outboundSchema.optional(),\n    chatRequest: models.ChatRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        xOpenRouterMetadata: \"X-OpenRouter-Metadata\",\n        chatRequest: \"ChatRequest\",\n    });\n});\nexport function sendChatCompletionRequestRequestToJSON(sendChatCompletionRequestRequest) {\n    return JSON.stringify(SendChatCompletionRequestRequest$outboundSchema.parse(sendChatCompletionRequestRequest));\n}\n/** @internal */\nexport const SendChatCompletionRequestResponse$inboundSchema = z.union([\n    models.ChatResult$inboundSchema,\n    z.custom(x => x instanceof ReadableStream)\n        .transform(stream => {\n        return new EventStream(stream, rawEvent => {\n            if (rawEvent.data === \"[DONE]\")\n                return { done: true, value: undefined };\n            return {\n                done: false,\n                value: models.ChatStreamingResponse$inboundSchema.parse(rawEvent)\n                    ?.data,\n            };\n        });\n    }),\n]);\nexport function sendChatCompletionRequestResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => SendChatCompletionRequestResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'SendChatCompletionRequestResponse' from JSON`);\n}\n//# sourceMappingURL=sendchatcompletionrequest.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e302ae3fa539\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const UpdateBYOKKeyRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n    updateBYOKKeyRequest: models.UpdateBYOKKeyRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        updateBYOKKeyRequest: \"UpdateBYOKKeyRequest\",\n    });\n});\nexport function updateBYOKKeyRequestToJSON(updateBYOKKeyRequest) {\n    return JSON.stringify(UpdateBYOKKeyRequest$outboundSchema.parse(updateBYOKKeyRequest));\n}\n//# sourceMappingURL=updatebyokkey.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: d4106fbc6dca\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const UpdateGuardrailRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n    updateGuardrailRequest: models.UpdateGuardrailRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        updateGuardrailRequest: \"UpdateGuardrailRequest\",\n    });\n});\nexport function updateGuardrailRequestToJSON(updateGuardrailRequest) {\n    return JSON.stringify(UpdateGuardrailRequest$outboundSchema.parse(updateGuardrailRequest));\n}\n//# sourceMappingURL=updateguardrail.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 30a0942aa2b9\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { safeParse } from \"../../lib/schemas.js\";\nimport * as openEnums from \"../../types/enums.js\";\n/**\n * New limit reset type for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday.\n */\nexport const UpdateKeysLimitReset = {\n    Daily: \"daily\",\n    Weekly: \"weekly\",\n    Monthly: \"monthly\",\n};\n/** @internal */\nexport const UpdateKeysLimitReset$outboundSchema = openEnums.outboundSchema(UpdateKeysLimitReset);\n/** @internal */\nexport const UpdateKeysRequestBody$outboundSchema = z.object({\n    disabled: z.boolean().optional(),\n    includeByokInLimit: z.boolean().optional(),\n    limit: z.nullable(z.number()).optional(),\n    limitReset: z.nullable(UpdateKeysLimitReset$outboundSchema).optional(),\n    name: z.string().optional(),\n}).transform((v) => {\n    return remap$(v, {\n        includeByokInLimit: \"include_byok_in_limit\",\n        limitReset: \"limit_reset\",\n    });\n});\nexport function updateKeysRequestBodyToJSON(updateKeysRequestBody) {\n    return JSON.stringify(UpdateKeysRequestBody$outboundSchema.parse(updateKeysRequestBody));\n}\n/** @internal */\nexport const UpdateKeysRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    hash: z.string(),\n    requestBody: z.lazy(() => UpdateKeysRequestBody$outboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        requestBody: \"RequestBody\",\n    });\n});\nexport function updateKeysRequestToJSON(updateKeysRequest) {\n    return JSON.stringify(UpdateKeysRequest$outboundSchema.parse(updateKeysRequest));\n}\n/** @internal */\nexport const UpdateKeysData$inboundSchema = z.object({\n    byok_usage: z.number(),\n    byok_usage_daily: z.number(),\n    byok_usage_monthly: z.number(),\n    byok_usage_weekly: z.number(),\n    created_at: z.string(),\n    creator_user_id: z.nullable(z.string()),\n    disabled: z.boolean(),\n    expires_at: z.nullable(z.iso.datetime({ offset: true }).transform(v => new Date(v))).optional(),\n    hash: z.string(),\n    include_byok_in_limit: z.boolean(),\n    label: z.string(),\n    limit: z.nullable(z.number()),\n    limit_remaining: z.nullable(z.number()),\n    limit_reset: z.nullable(z.string()),\n    name: z.string(),\n    updated_at: z.nullable(z.string()),\n    usage: z.number(),\n    usage_daily: z.number(),\n    usage_monthly: z.number(),\n    usage_weekly: z.number(),\n    workspace_id: z.string(),\n}).transform((v) => {\n    return remap$(v, {\n        \"byok_usage\": \"byokUsage\",\n        \"byok_usage_daily\": \"byokUsageDaily\",\n        \"byok_usage_monthly\": \"byokUsageMonthly\",\n        \"byok_usage_weekly\": \"byokUsageWeekly\",\n        \"created_at\": \"createdAt\",\n        \"creator_user_id\": \"creatorUserId\",\n        \"expires_at\": \"expiresAt\",\n        \"include_byok_in_limit\": \"includeByokInLimit\",\n        \"limit_remaining\": \"limitRemaining\",\n        \"limit_reset\": \"limitReset\",\n        \"updated_at\": \"updatedAt\",\n        \"usage_daily\": \"usageDaily\",\n        \"usage_monthly\": \"usageMonthly\",\n        \"usage_weekly\": \"usageWeekly\",\n        \"workspace_id\": \"workspaceId\",\n    });\n});\nexport function updateKeysDataFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => UpdateKeysData$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'UpdateKeysData' from JSON`);\n}\n/** @internal */\nexport const UpdateKeysResponse$inboundSchema = z.object({\n    data: z.lazy(() => UpdateKeysData$inboundSchema),\n});\nexport function updateKeysResponseFromJSON(jsonString) {\n    return safeParse(jsonString, (x) => UpdateKeysResponse$inboundSchema.parse(JSON.parse(x)), `Failed to parse 'UpdateKeysResponse' from JSON`);\n}\n//# sourceMappingURL=updatekeys.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: efb1e13263f5\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const UpdateObservabilityDestinationRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n    updateObservabilityDestinationRequest: models.UpdateObservabilityDestinationRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        updateObservabilityDestinationRequest: \"UpdateObservabilityDestinationRequest\",\n    });\n});\nexport function updateObservabilityDestinationRequestToJSON(updateObservabilityDestinationRequest) {\n    return JSON.stringify(UpdateObservabilityDestinationRequest$outboundSchema.parse(updateObservabilityDestinationRequest));\n}\n//# sourceMappingURL=updateobservabilitydestination.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b10c83b1ce4f\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport * as models from \"../index.js\";\n/** @internal */\nexport const UpdateWorkspaceRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    id: z.string(),\n    updateWorkspaceRequest: models.UpdateWorkspaceRequest$outboundSchema,\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        updateWorkspaceRequest: \"UpdateWorkspaceRequest\",\n    });\n});\nexport function updateWorkspaceRequestToJSON(updateWorkspaceRequest) {\n    return JSON.stringify(UpdateWorkspaceRequest$outboundSchema.parse(updateWorkspaceRequest));\n}\n//# sourceMappingURL=updateworkspace.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f8ab9b326c86\n */\nimport * as z from \"zod/v4\";\nexport const blobLikeSchema = z.custom(isBlobLike, {\n    message: \"expected a Blob, File or Blob-like object\",\n    abort: true,\n});\nexport function isBlobLike(val) {\n    if (val instanceof Blob) {\n        return true;\n    }\n    if (typeof val !== \"object\" || val == null || !(Symbol.toStringTag in val)) {\n        return false;\n    }\n    const name = val[Symbol.toStringTag];\n    if (typeof name !== \"string\") {\n        return false;\n    }\n    if (name !== \"Blob\" && name !== \"File\") {\n        return false;\n    }\n    return \"stream\" in val && typeof val.stream === \"function\";\n}\n//# sourceMappingURL=blobs.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: e2f1b0f34a4a\n */\nimport * as z from \"zod/v4\";\nimport { remap as remap$ } from \"../../lib/primitives.js\";\nimport { blobLikeSchema } from \"../../types/blobs.js\";\n/** @internal */\nexport const FileT$outboundSchema = z.object({\n    fileName: z.string(),\n    content: z.union([\n        z.custom(x => x instanceof ReadableStream),\n        z.custom(x => x instanceof Blob),\n        z.custom(x => x instanceof ArrayBuffer),\n        z.custom(x => x instanceof Uint8Array),\n    ]),\n});\nexport function fileToJSON(fileT) {\n    return JSON.stringify(FileT$outboundSchema.parse(fileT));\n}\n/** @internal */\nexport const UploadFileRequestBody$outboundSchema = z.object({\n    file: z.lazy(() => FileT$outboundSchema).or(blobLikeSchema),\n});\nexport function uploadFileRequestBodyToJSON(uploadFileRequestBody) {\n    return JSON.stringify(UploadFileRequestBody$outboundSchema.parse(uploadFileRequestBody));\n}\n/** @internal */\nexport const UploadFileRequest$outboundSchema = z.object({\n    httpReferer: z.string().optional(),\n    appTitle: z.string().optional(),\n    appCategories: z.string().optional(),\n    workspaceId: z.string().optional(),\n    requestBody: z.lazy(() => UploadFileRequestBody$outboundSchema),\n}).transform((v) => {\n    return remap$(v, {\n        httpReferer: \"HTTP-Referer\",\n        workspaceId: \"workspace_id\",\n        requestBody: \"RequestBody\",\n    });\n});\nexport function uploadFileRequestToJSON(uploadFileRequest) {\n    return JSON.stringify(UploadFileRequest$outboundSchema.parse(uploadFileRequest));\n}\n//# sourceMappingURL=uploadfile.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 0d9ffaf774d2\n */\nexport * from \"./bulkaddworkspacemembers.js\";\nexport * from \"./bulkassignkeystoguardrail.js\";\nexport * from \"./bulkassignmemberstoguardrail.js\";\nexport * from \"./bulkremoveworkspacemembers.js\";\nexport * from \"./bulkunassignkeysfromguardrail.js\";\nexport * from \"./bulkunassignmembersfromguardrail.js\";\nexport * from \"./createaudiospeech.js\";\nexport * from \"./createaudiotranscriptions.js\";\nexport * from \"./createauthkeyscode.js\";\nexport * from \"./createbyokkey.js\";\nexport * from \"./createembeddings.js\";\nexport * from \"./createguardrail.js\";\nexport * from \"./createkeys.js\";\nexport * from \"./createobservabilitydestination.js\";\nexport * from \"./createpresetschatcompletions.js\";\nexport * from \"./createpresetsmessages.js\";\nexport * from \"./createpresetsresponses.js\";\nexport * from \"./creatererank.js\";\nexport * from \"./createresponses.js\";\nexport * from \"./createvideos.js\";\nexport * from \"./createworkspace.js\";\nexport * from \"./deletebyokkey.js\";\nexport * from \"./deletefile.js\";\nexport * from \"./deleteguardrail.js\";\nexport * from \"./deletekeys.js\";\nexport * from \"./deleteobservabilitydestination.js\";\nexport * from \"./deleteworkspace.js\";\nexport * from \"./downloadfilecontent.js\";\nexport * from \"./exchangeauthcodeforapikey.js\";\nexport * from \"./getanalyticsmeta.js\";\nexport * from \"./getapprankings.js\";\nexport * from \"./getbenchmarksartificialanalysis.js\";\nexport * from \"./getbenchmarksdesignarena.js\";\nexport * from \"./getbyokkey.js\";\nexport * from \"./getcredits.js\";\nexport * from \"./getcurrentkey.js\";\nexport * from \"./getfilemetadata.js\";\nexport * from \"./getgeneration.js\";\nexport * from \"./getguardrail.js\";\nexport * from \"./getkey.js\";\nexport * from \"./getmodel.js\";\nexport * from \"./getmodels.js\";\nexport * from \"./getobservabilitydestination.js\";\nexport * from \"./getpreset.js\";\nexport * from \"./getpresetversion.js\";\nexport * from \"./getrankingsdaily.js\";\nexport * from \"./getuseractivity.js\";\nexport * from \"./getvideos.js\";\nexport * from \"./getworkspace.js\";\nexport * from \"./list.js\";\nexport * from \"./listbyokkeys.js\";\nexport * from \"./listembeddingsmodels.js\";\nexport * from \"./listendpoints.js\";\nexport * from \"./listendpointszdr.js\";\nexport * from \"./listfiles.js\";\nexport * from \"./listgenerationcontent.js\";\nexport * from \"./listguardrailkeyassignments.js\";\nexport * from \"./listguardrailmemberassignments.js\";\nexport * from \"./listguardrails.js\";\nexport * from \"./listkeyassignments.js\";\nexport * from \"./listmemberassignments.js\";\nexport * from \"./listmodelscount.js\";\nexport * from \"./listmodelsuser.js\";\nexport * from \"./listobservabilitydestinations.js\";\nexport * from \"./listorganizationmembers.js\";\nexport * from \"./listpresets.js\";\nexport * from \"./listpresetversions.js\";\nexport * from \"./listproviders.js\";\nexport * from \"./listvideoscontent.js\";\nexport * from \"./listvideosmodels.js\";\nexport * from \"./listworkspaces.js\";\nexport * from \"./queryanalytics.js\";\nexport * from \"./sendchatcompletionrequest.js\";\nexport * from \"./updatebyokkey.js\";\nexport * from \"./updateguardrail.js\";\nexport * from \"./updatekeys.js\";\nexport * from \"./updateobservabilitydestination.js\";\nexport * from \"./updateworkspace.js\";\nexport * from \"./uploadfile.js\";\n//# sourceMappingURL=index.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: fac8da972f86\n */\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _APIPromise_promise, _APIPromise_unwrapped, _a;\nexport class APIPromise {\n    constructor(p) {\n        _APIPromise_promise.set(this, void 0);\n        _APIPromise_unwrapped.set(this, void 0);\n        this[_a] = \"APIPromise\";\n        __classPrivateFieldSet(this, _APIPromise_promise, p instanceof Promise ? p : Promise.resolve(p), \"f\");\n        __classPrivateFieldSet(this, _APIPromise_unwrapped, p instanceof Promise\n            ? __classPrivateFieldGet(this, _APIPromise_promise, \"f\").then(([value]) => value)\n            : Promise.resolve(p[0]), \"f\");\n    }\n    then(onfulfilled, onrejected) {\n        return __classPrivateFieldGet(this, _APIPromise_promise, \"f\").then(onfulfilled ? ([value]) => onfulfilled(value) : void 0, onrejected);\n    }\n    catch(onrejected) {\n        return __classPrivateFieldGet(this, _APIPromise_unwrapped, \"f\").catch(onrejected);\n    }\n    finally(onfinally) {\n        return __classPrivateFieldGet(this, _APIPromise_unwrapped, \"f\").finally(onfinally);\n    }\n    $inspect() {\n        return __classPrivateFieldGet(this, _APIPromise_promise, \"f\");\n    }\n}\n_APIPromise_promise = new WeakMap(), _APIPromise_unwrapped = new WeakMap(), _a = Symbol.toStringTag;\n//# sourceMappingURL=async.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: c5c4ab0c3f76\n */\nimport { encodeJSON, encodeSimple } from \"../lib/encodings.js\";\nimport { matchStatusCode } from \"../lib/http.js\";\nimport * as M from \"../lib/matchers.js\";\nimport { compactMap } from \"../lib/primitives.js\";\nimport { safeParse } from \"../lib/schemas.js\";\nimport { extractSecurity, resolveGlobalSecurity } from \"../lib/security.js\";\nimport { pathToFunc } from \"../lib/url.js\";\nimport * as errors from \"../models/errors/index.js\";\nimport * as operations from \"../models/operations/index.js\";\nimport { APIPromise } from \"../types/async.js\";\nexport function betaResponsesSend(client, request, options) {\n    return new APIPromise($do(client, request, options));\n}\nasync function $do(client, request, options) {\n    const parsed = safeParse(request, (value) => operations.CreateResponsesRequest$outboundSchema.parse(value), \"Input validation failed\");\n    if (!parsed.ok) {\n        return [parsed, { status: \"invalid\" }];\n    }\n    const payload = parsed.value;\n    const body = encodeJSON(\"body\", payload.ResponsesRequest, { explode: true });\n    const path = pathToFunc(\"/responses\")();\n    const headers = new Headers(compactMap({\n        \"Content-Type\": \"application/json\",\n        Accept: request?.responsesRequest?.stream\n            ? \"text/event-stream\"\n            : \"application/json\",\n        \"HTTP-Referer\": encodeSimple(\"HTTP-Referer\", payload[\"HTTP-Referer\"] ?? client._options.httpReferer, { explode: false, charEncoding: \"none\" }),\n        \"X-OpenRouter-Metadata\": encodeSimple(\"X-OpenRouter-Metadata\", payload[\"X-OpenRouter-Metadata\"], { explode: false, charEncoding: \"none\" }),\n        \"X-OpenRouter-Categories\": encodeSimple(\"X-OpenRouter-Categories\", payload.appCategories ?? client._options.appCategories, { explode: false, charEncoding: \"none\" }),\n        \"X-OpenRouter-Title\": encodeSimple(\"X-OpenRouter-Title\", payload.appTitle ?? client._options.appTitle, { explode: false, charEncoding: \"none\" }),\n    }));\n    const secConfig = await extractSecurity(client._options.apiKey);\n    const securityInput = secConfig == null ? {} : { apiKey: secConfig };\n    const requestSecurity = resolveGlobalSecurity(securityInput);\n    const context = {\n        options: client._options,\n        baseURL: options?.serverURL ?? client._baseURL ?? \"\",\n        operationID: \"createResponses\",\n        oAuth2Scopes: null,\n        resolvedSecurity: requestSecurity,\n        securitySource: client._options.apiKey,\n        retryConfig: options?.retries\n            || client._options.retryConfig\n            || {\n                strategy: \"backoff\",\n                backoff: {\n                    initialInterval: 500,\n                    maxInterval: 60000,\n                    exponent: 1.5,\n                    maxElapsedTime: 3600000,\n                },\n                retryConnectionErrors: true,\n            }\n            || { strategy: \"none\" },\n        retryCodes: options?.retryCodes || [\"5XX\"],\n    };\n    const requestRes = client._createRequest(context, {\n        security: requestSecurity,\n        method: \"POST\",\n        baseURL: options?.serverURL,\n        path: path,\n        headers: headers,\n        body: body,\n        userAgent: client._options.userAgent,\n        timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1,\n    }, options);\n    if (!requestRes.ok) {\n        return [requestRes, { status: \"invalid\" }];\n    }\n    const req = requestRes.value;\n    const doResult = await client._do(req, {\n        context,\n        isErrorStatusCode: (statusCode) => matchStatusCode({ status: statusCode }, [\"4XX\", \"5XX\"]),\n        retryConfig: context.retryConfig,\n        retryCodes: context.retryCodes,\n    });\n    if (!doResult.ok) {\n        return [doResult, { status: \"request-error\", request: req }];\n    }\n    const response = doResult.value;\n    const responseFields = {\n        HttpMeta: { Response: response, Request: req },\n    };\n    const [result] = await M.match(M.json(200, operations.CreateResponsesResponse$inboundSchema), M.sse(200, operations.CreateResponsesResponse$inboundSchema), M.jsonErr(400, errors.BadRequestResponseError$inboundSchema), M.jsonErr(401, errors.UnauthorizedResponseError$inboundSchema), M.jsonErr(402, errors.PaymentRequiredResponseError$inboundSchema), M.jsonErr(403, errors.ForbiddenResponseError$inboundSchema), M.jsonErr(404, errors.NotFoundResponseError$inboundSchema), M.jsonErr(408, errors.RequestTimeoutResponseError$inboundSchema), M.jsonErr(413, errors.PayloadTooLargeResponseError$inboundSchema), M.jsonErr(422, errors.UnprocessableEntityResponseError$inboundSchema), M.jsonErr(429, errors.TooManyRequestsResponseError$inboundSchema), M.jsonErr(500, errors.InternalServerResponseError$inboundSchema), M.jsonErr(502, errors.BadGatewayResponseError$inboundSchema), M.jsonErr(503, errors.ServiceUnavailableResponseError$inboundSchema), M.jsonErr(524, errors.EdgeNetworkTimeoutResponseError$inboundSchema), M.jsonErr(529, errors.ProviderOverloadedResponseError$inboundSchema), M.fail(\"4XX\"), M.fail(\"5XX\"))(response, req, { extraFields: responseFields });\n    if (!result.ok) {\n        return [result, { status: \"complete\", request: req, response }];\n    }\n    return [result, { status: \"complete\", request: req, response }];\n}\n//# sourceMappingURL=betaResponsesSend.js.map", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 320761608fb3\n */\nimport { pathToFunc } from \"./url.js\";\n/**\n * Production server\n */\nexport const ServerProduction = \"production\";\n/**\n * Contains the list of servers available to the SDK\n */\nexport const ServerList = {\n    [ServerProduction]: \"https://openrouter.ai/api/v1\",\n};\nexport function serverURLFromOptions(options) {\n    let serverURL = options.serverURL;\n    const params = {};\n    if (!serverURL) {\n        const server = options.server ?? ServerProduction;\n        serverURL = ServerList[server] || \"\";\n    }\n    const u = pathToFunc(serverURL)(params);\n    return new URL(u);\n}\nexport const SDK_METADATA = {\n    language: \"typescript\",\n    openapiDocVersion: \"1.0.0\",\n    sdkVersion: \"0.13.7\",\n    genVersion: \"2.884.4\",\n    userAgent: \"speakeasy-sdk/typescript 0.13.7 2.884.4 1.0.0 @openrouter/sdk\",\n};\n//# sourceMappingURL=config.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: b24a69d15639\n */\nimport { isConnectionError, isTimeoutError } from \"./http.js\";\nconst defaultBackoff = {\n    initialInterval: 500,\n    maxInterval: 60000,\n    exponent: 1.5,\n    maxElapsedTime: 3600000,\n};\n/**\n * PermanentError is an error that is not recoverable. Throwing this error will\n * cause a retry loop to terminate.\n */\nexport class PermanentError extends Error {\n    constructor(message, options) {\n        let msg = message;\n        if (options?.cause) {\n            msg += `: ${options.cause}`;\n        }\n        super(msg, options);\n        this.name = \"PermanentError\";\n        // In older runtimes, the cause field would not have been assigned through\n        // the super() call.\n        if (typeof this.cause === \"undefined\") {\n            this.cause = options?.cause;\n        }\n        Object.setPrototypeOf(this, PermanentError.prototype);\n    }\n}\n/**\n * TemporaryError is an error is used to signal that an HTTP request can be\n * retried as part of a retry loop. If retry attempts are exhausted and this\n * error is thrown, the response will be returned to the caller.\n */\nexport class TemporaryError extends Error {\n    constructor(message, response) {\n        super(message);\n        this.response = response;\n        this.name = \"TemporaryError\";\n        Object.setPrototypeOf(this, TemporaryError.prototype);\n    }\n}\nexport async function retry(fetchFn, options) {\n    switch (options.config.strategy) {\n        case \"backoff\":\n            return retryBackoff(wrapFetcher(fetchFn, {\n                statusCodes: options.statusCodes,\n                retryConnectionErrors: !!options.config.retryConnectionErrors,\n            }), options.config.backoff ?? defaultBackoff);\n        default:\n            return await fetchFn();\n    }\n}\nfunction wrapFetcher(fn, options) {\n    return async () => {\n        try {\n            const res = await fn();\n            if (isRetryableResponse(res, options.statusCodes)) {\n                throw new TemporaryError(\"Response failed with retryable status code\", res);\n            }\n            return res;\n        }\n        catch (err) {\n            if (err instanceof TemporaryError) {\n                throw err;\n            }\n            if (options.retryConnectionErrors &&\n                (isTimeoutError(err) || isConnectionError(err))) {\n                throw err;\n            }\n            throw new PermanentError(\"Permanent error\", { cause: err });\n        }\n    };\n}\nconst codeRangeRE = new RegExp(\"^[0-9]xx$\", \"i\");\nfunction isRetryableResponse(res, statusCodes) {\n    const actual = `${res.status}`;\n    return statusCodes.some((code) => {\n        if (!codeRangeRE.test(code)) {\n            return code === actual;\n        }\n        const expectFamily = code.charAt(0);\n        if (!expectFamily) {\n            throw new Error(\"Invalid status code range\");\n        }\n        const actualFamily = actual.charAt(0);\n        if (!actualFamily) {\n            throw new Error(`Invalid response status code: ${actual}`);\n        }\n        return actualFamily === expectFamily;\n    });\n}\nasync function retryBackoff(fn, strategy) {\n    const { maxElapsedTime, initialInterval, exponent, maxInterval } = strategy;\n    const start = Date.now();\n    let x = 0;\n    while (true) {\n        try {\n            const res = await fn();\n            return res;\n        }\n        catch (err) {\n            if (err instanceof PermanentError) {\n                throw err.cause;\n            }\n            const elapsed = Date.now() - start;\n            if (elapsed > maxElapsedTime) {\n                if (err instanceof TemporaryError) {\n                    return err.response;\n                }\n                throw err;\n            }\n            let retryInterval = 0;\n            if (err instanceof TemporaryError) {\n                retryInterval = retryIntervalFromResponse(err.response);\n            }\n            if (retryInterval <= 0) {\n                retryInterval =\n                    initialInterval * Math.pow(x, exponent) + Math.random() * 1000;\n            }\n            const d = Math.min(retryInterval, maxInterval);\n            await delay(d);\n            x++;\n        }\n    }\n}\nfunction retryIntervalFromResponse(res) {\n    const retryVal = res.headers.get(\"retry-after\") || \"\";\n    if (!retryVal) {\n        return 0;\n    }\n    const parsedNumber = Number(retryVal);\n    if (Number.isInteger(parsedNumber)) {\n        return parsedNumber * 1000;\n    }\n    const parsedDate = Date.parse(retryVal);\n    if (Number.isInteger(parsedDate)) {\n        const deltaMS = parsedDate - Date.now();\n        return deltaMS > 0 ? Math.ceil(deltaMS) : 0;\n    }\n    return 0;\n}\nasync function delay(delay) {\n    return new Promise((resolve) => setTimeout(resolve, delay));\n}\n//# sourceMappingURL=retries.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: 8a6d91f1218d\n */\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _ClientSDK_httpClient, _ClientSDK_hooks, _ClientSDK_logger;\nimport { SDKHooks } from \"../hooks/hooks.js\";\nimport { ConnectionError, InvalidRequestError, RequestAbortedError, RequestTimeoutError, UnexpectedClientError, } from \"../models/errors/httpclienterrors.js\";\nimport { ERR, OK } from \"../types/fp.js\";\nimport { stringToBase64 } from \"./base64.js\";\nimport { SDK_METADATA, serverURLFromOptions } from \"./config.js\";\nimport { encodeForm } from \"./encodings.js\";\nimport { env, fillGlobals } from \"./env.js\";\nimport { HTTPClient, isAbortError, isConnectionError, isTimeoutError, matchContentType, } from \"./http.js\";\nimport { retry } from \"./retries.js\";\nconst gt = typeof globalThis === \"undefined\" ? null : globalThis;\nconst webWorkerLike = typeof gt === \"object\"\n    && gt != null\n    && \"importScripts\" in gt\n    && typeof gt[\"importScripts\"] === \"function\";\nconst isBrowserLike = webWorkerLike\n    || (typeof navigator !== \"undefined\" && \"serviceWorker\" in navigator)\n    || (typeof window === \"object\" && typeof window.document !== \"undefined\");\nexport class ClientSDK {\n    constructor(options = {}) {\n        _ClientSDK_httpClient.set(this, void 0);\n        _ClientSDK_hooks.set(this, void 0);\n        _ClientSDK_logger.set(this, void 0);\n        const opt = options;\n        if (typeof opt === \"object\"\n            && opt != null\n            && \"hooks\" in opt\n            && opt.hooks instanceof SDKHooks) {\n            __classPrivateFieldSet(this, _ClientSDK_hooks, opt.hooks, \"f\");\n        }\n        else {\n            __classPrivateFieldSet(this, _ClientSDK_hooks, new SDKHooks(), \"f\");\n        }\n        const defaultHttpClient = new HTTPClient();\n        options.httpClient = options.httpClient || defaultHttpClient;\n        options = __classPrivateFieldGet(this, _ClientSDK_hooks, \"f\").sdkInit(options);\n        const url = serverURLFromOptions(options);\n        if (url) {\n            url.pathname = url.pathname.replace(/\\/+$/, \"\") + \"/\";\n        }\n        this._baseURL = url;\n        __classPrivateFieldSet(this, _ClientSDK_httpClient, options.httpClient || defaultHttpClient, \"f\");\n        this._options = { ...fillGlobals(options), hooks: __classPrivateFieldGet(this, _ClientSDK_hooks, \"f\") };\n        __classPrivateFieldSet(this, _ClientSDK_logger, this._options.debugLogger, \"f\");\n        if (!__classPrivateFieldGet(this, _ClientSDK_logger, \"f\") && env().OPENROUTER_DEBUG) {\n            __classPrivateFieldSet(this, _ClientSDK_logger, console, \"f\");\n        }\n    }\n    _createRequest(context, conf, options) {\n        const { method, path, query, headers: opHeaders, security } = conf;\n        const base = conf.baseURL ?? this._baseURL;\n        if (!base) {\n            return ERR(new InvalidRequestError(\"No base URL provided for operation\"));\n        }\n        const baseURL = new URL(base);\n        let reqURL;\n        if (path) {\n            baseURL.pathname = baseURL.pathname.replace(/\\/+$/, \"\") + \"/\";\n            reqURL = new URL(path, baseURL);\n        }\n        else {\n            reqURL = baseURL;\n        }\n        reqURL.hash = \"\";\n        let finalQuery = query || \"\";\n        const secQuery = [];\n        for (const [k, v] of Object.entries(security?.queryParams || {})) {\n            const q = encodeForm(k, v, { charEncoding: \"percent\" });\n            if (typeof q !== \"undefined\") {\n                secQuery.push(q);\n            }\n        }\n        if (secQuery.length) {\n            finalQuery += `&${secQuery.join(\"&\")}`;\n        }\n        if (finalQuery) {\n            const q = finalQuery.startsWith(\"&\") ? finalQuery.slice(1) : finalQuery;\n            reqURL.search = `?${q}`;\n        }\n        const headers = new Headers(opHeaders);\n        const username = security?.basic.username;\n        const password = security?.basic.password;\n        if (username != null || password != null) {\n            const encoded = stringToBase64([username || \"\", password || \"\"].join(\":\"));\n            headers.set(\"Authorization\", `Basic ${encoded}`);\n        }\n        const securityHeaders = new Headers(security?.headers || {});\n        for (const [k, v] of securityHeaders) {\n            headers.set(k, v);\n        }\n        let cookie = headers.get(\"cookie\") || \"\";\n        for (const [k, v] of Object.entries(security?.cookies || {})) {\n            cookie += `; ${k}=${v}`;\n        }\n        cookie = cookie.startsWith(\"; \") ? cookie.slice(2) : cookie;\n        headers.set(\"cookie\", cookie);\n        const userHeaders = new Headers(options?.headers ?? options?.fetchOptions?.headers);\n        for (const [k, v] of userHeaders) {\n            headers.set(k, v);\n        }\n        // Only set user agent header in non-browser-like environments since CORS\n        // policy disallows setting it in browsers e.g. Chrome throws an error.\n        if (!isBrowserLike) {\n            headers.set(conf.uaHeader ?? \"user-agent\", conf.userAgent ?? SDK_METADATA.userAgent);\n        }\n        const fetchOptions = {\n            ...options?.fetchOptions,\n            ...options,\n        };\n        if (!fetchOptions?.signal && conf.timeoutMs && conf.timeoutMs > 0) {\n            const timeoutSignal = AbortSignal.timeout(conf.timeoutMs);\n            fetchOptions.signal = timeoutSignal;\n        }\n        if (conf.body instanceof ReadableStream) {\n            Object.assign(fetchOptions, { duplex: \"half\" });\n        }\n        let input;\n        try {\n            input = __classPrivateFieldGet(this, _ClientSDK_hooks, \"f\").beforeCreateRequest(context, {\n                url: reqURL,\n                options: {\n                    ...fetchOptions,\n                    body: conf.body ?? null,\n                    headers,\n                    method,\n                },\n            });\n        }\n        catch (err) {\n            return ERR(new UnexpectedClientError(\"Create request hook failed to execute\", {\n                cause: err,\n            }));\n        }\n        return OK(new Request(input.url, input.options));\n    }\n    async _do(request, options) {\n        const { context, isErrorStatusCode } = options;\n        return retry(async () => {\n            const req = await __classPrivateFieldGet(this, _ClientSDK_hooks, \"f\").beforeRequest(context, request.clone());\n            await logRequest(__classPrivateFieldGet(this, _ClientSDK_logger, \"f\"), req).catch((e) => __classPrivateFieldGet(this, _ClientSDK_logger, \"f\")?.log(\"Failed to log request:\", e));\n            let response = await __classPrivateFieldGet(this, _ClientSDK_httpClient, \"f\").request(req);\n            try {\n                if (isErrorStatusCode(response.status)) {\n                    const result = await __classPrivateFieldGet(this, _ClientSDK_hooks, \"f\").afterError(context, response, null);\n                    if (result.error) {\n                        throw result.error;\n                    }\n                    response = result.response || response;\n                }\n                else {\n                    response = await __classPrivateFieldGet(this, _ClientSDK_hooks, \"f\").afterSuccess(context, response);\n                }\n            }\n            finally {\n                await logResponse(__classPrivateFieldGet(this, _ClientSDK_logger, \"f\"), response, req)\n                    .catch(e => __classPrivateFieldGet(this, _ClientSDK_logger, \"f\")?.log(\"Failed to log response:\", e));\n            }\n            return response;\n        }, { config: options.retryConfig, statusCodes: options.retryCodes }).then((r) => OK(r), (err) => {\n            switch (true) {\n                case isAbortError(err):\n                    return ERR(new RequestAbortedError(\"Request aborted by client\", {\n                        cause: err,\n                    }));\n                case isTimeoutError(err):\n                    return ERR(new RequestTimeoutError(\"Request timed out\", { cause: err }));\n                case isConnectionError(err):\n                    return ERR(new ConnectionError(\"Unable to make request\", { cause: err }));\n                default:\n                    return ERR(new UnexpectedClientError(\"Unexpected HTTP client error\", {\n                        cause: err,\n                    }));\n            }\n        });\n    }\n}\n_ClientSDK_httpClient = new WeakMap(), _ClientSDK_hooks = new WeakMap(), _ClientSDK_logger = new WeakMap();\nconst jsonLikeContentTypeRE = /^(application|text)\\/([^+]+\\+)*json.*/;\nconst jsonlLikeContentTypeRE = /^(application|text)\\/([^+]+\\+)*(jsonl|x-ndjson)\\b.*/;\nasync function logRequest(logger, req) {\n    if (!logger) {\n        return;\n    }\n    const contentType = req.headers.get(\"content-type\");\n    const ct = contentType?.split(\";\")[0] || \"\";\n    logger.group(`> Request: ${req.method} ${req.url}`);\n    logger.group(\"Headers:\");\n    for (const [k, v] of req.headers.entries()) {\n        logger.log(`${k}: ${v}`);\n    }\n    logger.groupEnd();\n    logger.group(\"Body:\");\n    switch (true) {\n        case jsonLikeContentTypeRE.test(ct):\n            logger.log(await req.clone().json());\n            break;\n        case ct.startsWith(\"text/\"):\n            logger.log(await req.clone().text());\n            break;\n        case ct === \"multipart/form-data\": {\n            const body = await req.clone().formData();\n            for (const [k, v] of body) {\n                const vlabel = v instanceof Blob ? \"<Blob>\" : v;\n                logger.log(`${k}: ${vlabel}`);\n            }\n            break;\n        }\n        default:\n            logger.log(`<${contentType}>`);\n            break;\n    }\n    logger.groupEnd();\n    logger.groupEnd();\n}\nasync function logResponse(logger, res, req) {\n    if (!logger) {\n        return;\n    }\n    const contentType = res.headers.get(\"content-type\");\n    const ct = contentType?.split(\";\")[0] || \"\";\n    logger.group(`< Response: ${req.method} ${req.url}`);\n    logger.log(\"Status Code:\", res.status, res.statusText);\n    logger.group(\"Headers:\");\n    for (const [k, v] of res.headers.entries()) {\n        logger.log(`${k}: ${v}`);\n    }\n    logger.groupEnd();\n    logger.group(\"Body:\");\n    switch (true) {\n        case matchContentType(res, \"application/json\")\n            || jsonLikeContentTypeRE.test(ct) && !jsonlLikeContentTypeRE.test(ct):\n            logger.log(await res.clone().json());\n            break;\n        case matchContentType(res, \"application/jsonl\")\n            || jsonlLikeContentTypeRE.test(ct):\n        case matchContentType(res, \"text/event-stream\"):\n            logger.log(`<${contentType}>`);\n            break;\n        case matchContentType(res, \"text/*\"):\n            logger.log(await res.clone().text());\n            break;\n        case matchContentType(res, \"multipart/form-data\"): {\n            const body = await res.clone().formData();\n            for (const [k, v] of body) {\n                const vlabel = v instanceof Blob ? \"<Blob>\" : v;\n                logger.log(`${k}: ${vlabel}`);\n            }\n            break;\n        }\n        default:\n            logger.log(`<${contentType}>`);\n            break;\n    }\n    logger.groupEnd();\n    logger.groupEnd();\n}\n//# sourceMappingURL=sdks.js.map", "/*\n * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\n * @generated-id: f431fdbcd144\n */\nimport { ClientSDK } from \"./lib/sdks.js\";\n/**\n * A minimal client to use when calling standalone SDK functions. Typically, an\n * instance of this class would be instantiated once at the start of an\n * application and passed around through some dependency injection mechanism  to\n * parts of an application that need to make SDK calls.\n */\nexport class OpenRouterCore extends ClientSDK {\n}\n//# sourceMappingURL=core.js.map", null, null, "import { OpenRouter, serverTool, type Tool } from \"@openrouter/agent\";\nimport { stepCountIs, maxCost } from \"@openrouter/agent/stop-conditions\";\nimport type { z } from \"zod\";\nimport { loadAgentConfig, requireApiKey, type AgentConfig } from \"./config.js\";\n\nlet cachedClient: OpenRouter | null = null;\nlet cachedKey: string | null = null;\n\nexport function getOpenRouterClient(config?: AgentConfig): OpenRouter {\n  const cfg = config ?? loadAgentConfig();\n  const apiKey = requireApiKey(cfg);\n  if (!cachedClient || cachedKey !== apiKey) {\n    cachedClient = new OpenRouter({ apiKey });\n    cachedKey = apiKey;\n  }\n  return cachedClient;\n}\n\n/** Server-side tools executed by OpenRouter \u2014 no client implementation. */\nexport const researchTools = [\n  serverTool({ type: \"openrouter:web_search\" }),\n  serverTool({ type: \"openrouter:web_fetch\" }),\n  serverTool({ type: \"openrouter:datetime\", parameters: { timezone: \"UTC\" } }),\n] as const;\n\nfunction extractJsonObject(text: string): unknown {\n  const trimmed = text.trim();\n  if (trimmed.startsWith(\"{\")) {\n    return JSON.parse(trimmed);\n  }\n  const fence = trimmed.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\n  if (fence?.[1]) {\n    return JSON.parse(fence[1].trim());\n  }\n  const start = trimmed.indexOf(\"{\");\n  const end = trimmed.lastIndexOf(\"}\");\n  if (start >= 0 && end > start) {\n    return JSON.parse(trimmed.slice(start, end + 1));\n  }\n  throw new Error(\"Model response did not contain parseable JSON\");\n}\n\nexport type StructuredCallOptions<T extends z.ZodType> = {\n  model: string;\n  instructions: string;\n  input: string;\n  outputSchema: T;\n  tools?: readonly Tool[];\n  maxSteps?: number;\n  maxCostUsd?: number;\n  signal?: AbortSignal;\n};\n\nexport async function callStructured<T extends z.ZodType>(\n  options: StructuredCallOptions<T>,\n): Promise<{ result: z.infer<T>; text: string; usage: unknown }> {\n  const config = loadAgentConfig();\n  const client = getOpenRouterClient(config);\n  const tools = options.tools ?? [];\n  const maxSteps = options.maxSteps ?? config.maxSteps;\n  const maxCostUsd = options.maxCostUsd ?? config.maxCost;\n\n  async function attempt(model: string, extraHint: string) {\n    const instructions = [\n      options.instructions,\n      \"\",\n      extraHint,\n      \"Return ONLY a single JSON object (no markdown, no prose).\",\n    ].join(\"\\n\");\n\n    const result = client.callModel({\n      model,\n      instructions,\n      input: options.input,\n      tools: tools.length > 0 ? tools : undefined,\n      stopWhen: [stepCountIs(maxSteps), maxCost(maxCostUsd)],\n      allowFinalResponse: true,\n    });\n\n    const onAbort = () => result.cancel();\n    options.signal?.addEventListener(\"abort\", onAbort);\n    if (options.signal?.aborted) result.cancel();\n\n    try {\n      const response = await result.getResponse();\n      const text = (await result.getText()) || response.outputText || \"\";\n      const raw = extractJsonObject(text);\n      const parsed = options.outputSchema.safeParse(raw);\n      if (!parsed.success) {\n        throw new Error(`OpenRouter structured output validation failed: ${parsed.error.message}`);\n      }\n      return { result: parsed.data, text, usage: response.usage };\n    } finally {\n      options.signal?.removeEventListener(\"abort\", onAbort);\n    }\n  }\n\n  const schemaHint =\n    \"Required JSON fields must all be present with correct types (booleans, numbers, strings, arrays).\";\n\n  try {\n    return await attempt(options.model, schemaHint);\n  } catch (firstErr) {\n    const tiers = [\n      process.env.OPENROUTER_REASON_MODEL?.trim() || config.reasonModel,\n      process.env.OPENROUTER_PREMIUM_MODEL?.trim() ||\n        process.env.OPENROUTER_ESCALATION_MODEL?.trim() ||\n        \"anthropic/claude-opus-4.6\",\n    ].filter((m, i, arr) => m && m !== options.model && arr.indexOf(m) === i);\n\n    for (const model of tiers) {\n      try {\n        return await attempt(\n          model,\n          `${schemaHint}\\nPrevious response failed \u2014 return complete valid JSON.`,\n        );\n      } catch {\n        /* try next tier */\n      }\n    }\n    throw firstErr;\n  }\n}\n\nexport async function runResearchAgent(\n  prompt: string,\n  options?: { model?: string; maxSteps?: number; maxCostUsd?: number; signal?: AbortSignal },\n): Promise<{ text: string; usage: unknown }> {\n  const config = loadAgentConfig();\n  const client = getOpenRouterClient(config);\n\n  const result = client.callModel({\n    model: options?.model ?? config.researchModel,\n    instructions: [\n      \"You are Hook-n-Bone's video discovery research agent.\",\n      \"Focus on hunting and fishing outdoor content discoverable via public embeds and metadata.\",\n      \"Never suggest downloading, re-hosting, or bypassing platform terms.\",\n      \"Use web_search when you need current trends, tournaments, or seasonal topics.\",\n      \"Be concise and actionable.\",\n    ].join(\"\\n\"),\n    input: prompt,\n    tools: [...researchTools],\n    stopWhen: [\n      stepCountIs(options?.maxSteps ?? config.maxSteps),\n      maxCost(options?.maxCostUsd ?? config.maxCost),\n    ],\n    allowFinalResponse: true,\n  });\n\n  const onAbort = () => result.cancel();\n  options?.signal?.addEventListener(\"abort\", onAbort);\n  if (options?.signal?.aborted) result.cancel();\n\n  try {\n    const response = await result.getResponse();\n    const text = await result.getText();\n    return { text: text || response.outputText || \"\", usage: response.usage };\n  } finally {\n    options?.signal?.removeEventListener(\"abort\", onAbort);\n  }\n}\n", "import { loadAgentConfig, type AgentConfig } from \"./config.js\";\n\n/** Cost tiers \u2014 cheapest first; escalate only when needed. */\nexport type ModelTier = \"nano\" | \"fast\" | \"reason\" | \"research\";\n\nexport type TierModelConfig = Record<ModelTier, string>;\n\nexport type TierBudget = {\n  nano: number;\n  fast: number;\n  reason: number;\n  research: number;\n  total: number;\n};\n\nexport type TierSpend = {\n  nano: number;\n  fast: number;\n  reason: number;\n  research: number;\n  total: number;\n};\n\nconst DEFAULT_TIER_MODELS: TierModelConfig = {\n  nano: \"google/gemini-2.0-flash-lite-001\",\n  fast: \"google/gemini-2.5-flash-lite\",\n  reason: \"anthropic/claude-sonnet-4\",\n  research: \"anthropic/claude-sonnet-4\",\n};\n\nexport function loadTierModels(config?: AgentConfig): TierModelConfig {\n  const c = config ?? loadAgentConfig();\n  return {\n    nano: process.env.OPENROUTER_NANO_MODEL?.trim() || DEFAULT_TIER_MODELS.nano,\n    fast: process.env.OPENROUTER_CLASSIFY_MODEL?.trim() || c.classifyModel || DEFAULT_TIER_MODELS.fast,\n    reason: process.env.OPENROUTER_REASON_MODEL?.trim() || DEFAULT_TIER_MODELS.reason,\n    research: process.env.OPENROUTER_RESEARCH_MODEL?.trim() || c.researchModel || DEFAULT_TIER_MODELS.research,\n  };\n}\n\n/** Per-tier USD caps for one secondary post-process run. */\nexport function loadSecondaryTierBudget(config?: AgentConfig): TierBudget {\n  const c = config ?? loadAgentConfig();\n  const totalCap = parseFloat(process.env.OPENROUTER_SECONDARY_MAX_COST ?? \"0.15\") || 0.15;\n  const cycleCap = Math.min(c.maxCost, totalCap);\n\n  return {\n    nano: parseFloat(process.env.OPENROUTER_SECONDARY_NANO_BUDGET ?? \"0.04\") || 0.04,\n    fast: parseFloat(process.env.OPENROUTER_SECONDARY_FAST_BUDGET ?? \"0.06\") || 0.06,\n    reason: parseFloat(process.env.OPENROUTER_SECONDARY_REASON_BUDGET ?? \"0.04\") || 0.04,\n    research: parseFloat(process.env.OPENROUTER_SECONDARY_RESEARCH_BUDGET ?? \"0.03\") || 0.03,\n    total: cycleCap,\n  };\n}\n\nexport function createSpendTracker(budget: TierBudget): {\n  spend: TierSpend;\n  canSpend: (tier: ModelTier, amount: number) => boolean;\n  record: (tier: ModelTier, amount: number) => void;\n} {\n  const spend: TierSpend = { nano: 0, fast: 0, reason: 0, research: 0, total: 0 };\n\n  return {\n    spend,\n    canSpend(tier, amount) {\n      if (spend.total + amount > budget.total) return false;\n      return spend[tier] + amount <= budget[tier];\n    },\n    record(tier, amount) {\n      spend[tier] += amount;\n      spend.total += amount;\n    },\n  };\n}\n\n/** Pick the cheapest tier that can afford `estimateUsd` for a task class. */\nexport function pickTierForTask(\n  task: \"batch_screen\" | \"borderline\" | \"gap_research\",\n  tracker: ReturnType<typeof createSpendTracker>[\"spend\"],\n  budget: TierBudget,\n  estimateUsd: number,\n): ModelTier | null {\n  const order: ModelTier[] =\n    task === \"batch_screen\"\n      ? [\"nano\", \"fast\", \"reason\"]\n      : task === \"borderline\"\n        ? [\"fast\", \"reason\", \"research\"]\n        : [\"research\", \"reason\"];\n\n  for (const tier of order) {\n    if (tracker[tier] + estimateUsd <= budget[tier] && tracker.total + estimateUsd <= budget.total) {\n      return tier;\n    }\n  }\n  return null;\n}\n\nexport function estimateBatchCost(batchSize: number, tier: ModelTier): number {\n  const perItem =\n    tier === \"nano\" ? 0.0008 : tier === \"fast\" ? 0.0015 : tier === \"reason\" ? 0.004 : 0.02;\n  return Math.min(0.05, batchSize * perItem + 0.002);\n}\n", "import {\n  discoveryQuerySchema,\n  ingestionReportSchema,\n  loadAgentConfig,\n  videoClassificationSchema,\n  type DiscoveryQueryPlan,\n  type IngestionReportSummary,\n  type VideoClassification,\n  type VideoMetadataInput,\n  isOpenRouterConfigured,\n} from \"../config.js\";\nimport { callStructured, runResearchAgent } from \"../client.js\";\nimport { loadTierModels } from \"../modelRouter.js\";\n\nconst CLASSIFY_INSTRUCTIONS = [\n  \"You classify whether a video belongs on Hook-n-Bone: a hunting and fishing streaming platform.\",\n  \"Eligible: real outdoor hunting/fishing content (harvests, catches, tutorials, gear in field, conservation).\",\n  \"Ineligible: gaming, general vlogs, music, sports unrelated to hunting/fishing, pranks, crypto, beauty.\",\n  \"We only store embed URLs and metadata \u2014 never suggest downloading video files.\",\n  \"If rule-based gatekeeper already rejected, still analyze but lean toward ineligible unless clearly misclassified.\",\n].join(\"\\n\");\n\nconst QUERY_PLANNER_INSTRUCTIONS = [\n  \"You plan discovery queries for Hook-n-Bone's compliant video ingestion pipeline.\",\n  \"PRIMARY FOCUS: YouTube Shorts and vertical outdoor video \u2014 hunting, fishing, camping, bushcraft.\",\n  \"SECONDARY: white-tailed deer hunting, big game, waterfowl, bass/offshore/fly fishing field content.\",\n  \"Include #shorts or 'shorts' in YouTube queries. Use site:youtube.com/shorts for SERP queries when possible.\",\n  \"NEVER exclude or negate shorts, short, reels, or vertical in queries.\",\n  \"NEVER plan animal calls, duck call sound effects, trapping-only, or unrelated viral content.\",\n  \"The site already rotates deer-first YouTube scopes. Add seasonal/gap queries \u2014 not duplicates.\",\n  \"scopeKey must be unique snake_case prefixed with or_ (e.g. or_rut_whitetail_shorts_2026).\",\n].join(\"\\n\");\n\nexport type QueryPlannerContext = {\n  existingScopeKeys: string[];\n  existingSerpQueries: string[];\n  season?: string;\n  recentInsertCount?: number;\n};\n\nexport async function planDiscoveryQueries(\n  context: QueryPlannerContext,\n): Promise<DiscoveryQueryPlan | null> {\n  if (!isOpenRouterConfigured()) return null;\n\n  const config = loadAgentConfig();\n  const tiers = loadTierModels(config);\n  const planModel =\n    process.env.OPENROUTER_QUERY_PLAN_MODEL?.trim() ||\n    tiers.reason ||\n    config.researchModel;\n  const planMaxCost = Math.min(\n    config.maxCost,\n    parseFloat(process.env.OPENROUTER_QUERY_PLAN_MAX_COST ?? \"0.12\") || 0.12,\n  );\n  const input = [\n    \"Plan the next batch of discovery queries.\",\n    `Existing YouTube scope keys: ${context.existingScopeKeys.join(\", \") || \"none\"}`,\n    `Existing SERP queries: ${context.existingSerpQueries.slice(0, 5).join(\" | \") || \"none\"}`,\n    context.season ? `Season context: ${context.season}` : \"\",\n    context.recentInsertCount != null ? `Recent inserts this cycle: ${context.recentInsertCount}` : \"\",\n    \"Return 3-5 new YouTube queries and 2-4 SERP queries that complement (not duplicate) existing ones.\",\n    \"\",\n    'Respond with JSON exactly like: {\"youtubeQueries\":[{\"scopeKey\":\"spring_turkey\",\"query\":\"spring turkey hunting gobbler\",\"category\":\"shots\",\"relevanceBoost\":3}],\"serpQueries\":[\"site:youtube.com spring turkey hunt video\"],\"rationale\":\"seasonal turkey opener\"}',\n  ]\n    .filter(Boolean)\n    .join(\"\\n\");\n\n  const { result } = await callStructured({\n    model: planModel,\n    instructions: QUERY_PLANNER_INSTRUCTIONS,\n    input,\n    outputSchema: discoveryQuerySchema,\n    maxSteps: 6,\n    maxCostUsd: planMaxCost,\n  });\n\n  return result;\n}\n\nexport async function classifyVideoMetadata(\n  video: VideoMetadataInput,\n): Promise<VideoClassification | null> {\n  if (!isOpenRouterConfigured()) return null;\n\n  const config = loadAgentConfig();\n  const input = [\n    `Title: ${video.title}`,\n    `Description: ${(video.description ?? \"\").slice(0, 1200)}`,\n    video.creator ? `Creator: ${video.creator}` : \"\",\n    video.platform ? `Platform: ${video.platform}` : \"\",\n    video.viewCount != null ? `Views: ${video.viewCount}` : \"\",\n    video.ruleGatekeeperReason ? `Rule gatekeeper: ${video.ruleGatekeeperReason}` : \"\",\n    video.ruleRelevanceScore != null ? `Rule relevance score: ${video.ruleRelevanceScore}` : \"\",\n  ]\n    .filter(Boolean)\n    .join(\"\\n\");\n\n  const { result } = await callStructured({\n    model: config.classifyModel,\n    instructions: CLASSIFY_INSTRUCTIONS,\n    input,\n    outputSchema: videoClassificationSchema,\n    maxSteps: 3,\n    maxCostUsd: Math.min(config.maxCost, 0.03),\n  });\n\n  return result;\n}\n\nexport type IngestionRunSnapshot = {\n  youtube: Record<string, unknown>;\n  instagram: Record<string, unknown>;\n  googleSerp: Record<string, unknown>;\n  quota: Record<string, unknown>;\n};\n\nexport async function summarizeIngestionRun(\n  snapshot: IngestionRunSnapshot,\n): Promise<IngestionReportSummary | null> {\n  if (!isOpenRouterConfigured()) return null;\n\n  const config = loadAgentConfig();\n  const input = [\n    \"Summarize this ingestion cycle for an admin dashboard:\",\n    JSON.stringify(snapshot, null, 2),\n    \"\",\n    'Return JSON: {\"summary\":\"...\",\"highlights\":[\"...\"],\"gaps\":[\"...\"],\"recommendedQueries\":[\"...\"],\"complianceNotes\":[\"embed-only\"]}',\n  ].join(\"\\n\");\n\n  const { result } = await callStructured({\n    model: config.classifyModel,\n    instructions: [\n      \"Summarize video ingestion results for Hook-n-Bone admins.\",\n      \"Highlight wins, gaps in coverage, and suggested next queries.\",\n      \"Remind that we use embed-only compliant ingestion.\",\n    ].join(\"\\n\"),\n    input,\n    outputSchema: ingestionReportSchema,\n    maxSteps: 4,\n    maxCostUsd: Math.min(config.maxCost, 0.06),\n  });\n\n  return result;\n}\n\nexport async function researchVideoTrends(topic: string): Promise<string | null> {\n  if (!isOpenRouterConfigured()) return null;\n  const { text } = await runResearchAgent(\n    `Research current ${topic} video trends on YouTube and public web. ` +\n      \"Return bullet points of search queries and hashtags suitable for embed-only discovery. \" +\n      \"Do not suggest scraping or downloading video files.\",\n  );\n  return text || null;\n}\n\nexport {\n  isOpenRouterConfigured,\n  loadAgentConfig,\n  type DiscoveryQueryPlan,\n  type VideoClassification,\n  type IngestionReportSummary,\n};\n", "/** Deterministic deduplication before any LLM spend. */\n\nexport type DedupableVideo = {\n  sourcePlatform: string;\n  sourceVideoId: string;\n  videoUrl: string;\n  embedUrl?: string;\n  title: string;\n  creator: string;\n  creatorHandle?: string;\n  channelId?: string;\n};\n\nfunction normalizeTitle(title: string): string {\n  return title\n    .toLowerCase()\n    .replace(/[^a-z0-9\\s]/g, \" \")\n    .replace(/\\s+/g, \" \")\n    .trim();\n}\n\nfunction titleFingerprint(title: string): string {\n  const words = normalizeTitle(title).split(\" \").filter((w) => w.length > 2);\n  return words.slice(0, 8).sort().join(\"|\");\n}\n\nexport function canonicalVideoKey(video: DedupableVideo): string {\n  const platform = video.sourcePlatform.toLowerCase();\n  const id = video.sourceVideoId.trim();\n  if (id) return `${platform}:${id}`;\n  return `${platform}:url:${video.videoUrl.split(\"?\")[0]?.toLowerCase() ?? video.videoUrl}`;\n}\n\nexport function canonicalChannelKey(video: DedupableVideo): string {\n  if (video.channelId?.trim()) return `ch:${video.channelId.trim()}`;\n  const handle = video.creatorHandle?.replace(/^@/, \"\").toLowerCase();\n  if (handle) return `handle:${handle}`;\n  return `creator:${video.creator.toLowerCase().slice(0, 40)}`;\n}\n\nexport type DedupStats = {\n  inputCount: number;\n  outputCount: number;\n  removedDuplicateId: number;\n  removedDuplicateTitle: number;\n  removedDuplicateUrl: number;\n};\n\n/** Remove exact ID/URL dupes and near-duplicate titles from the same channel. */\nexport function dedupeVideos<T extends DedupableVideo>(videos: T[]): { items: T[]; stats: DedupStats } {\n  const stats: DedupStats = {\n    inputCount: videos.length,\n    outputCount: 0,\n    removedDuplicateId: 0,\n    removedDuplicateTitle: 0,\n    removedDuplicateUrl: 0,\n  };\n\n  const seenId = new Set<string>();\n  const seenUrl = new Set<string>();\n  const seenTitleChannel = new Set<string>();\n  const out: T[] = [];\n\n  for (const video of videos) {\n    const idKey = canonicalVideoKey(video);\n    if (seenId.has(idKey)) {\n      stats.removedDuplicateId++;\n      continue;\n    }\n\n    const urlKey = (video.embedUrl || video.videoUrl).split(\"?\")[0]?.toLowerCase() ?? \"\";\n    if (urlKey && seenUrl.has(urlKey)) {\n      stats.removedDuplicateUrl++;\n      continue;\n    }\n\n    const titleKey = `${canonicalChannelKey(video)}::${titleFingerprint(video.title)}`;\n    if (seenTitleChannel.has(titleKey)) {\n      stats.removedDuplicateTitle++;\n      continue;\n    }\n\n    seenId.add(idKey);\n    if (urlKey) seenUrl.add(urlKey);\n    seenTitleChannel.add(titleKey);\n    out.push(video);\n  }\n\n  stats.outputCount = out.length;\n  return { items: out, stats };\n}\n\n/** Limit per-channel representation to improve source diversity. */\nexport function applyChannelCap<T extends DedupableVideo>(\n  videos: T[],\n  maxPerChannel = 3,\n): { items: T[]; capped: number } {\n  const counts = new Map<string, number>();\n  const out: T[] = [];\n  let capped = 0;\n\n  for (const video of videos) {\n    const ch = canonicalChannelKey(video);\n    const n = counts.get(ch) ?? 0;\n    if (n >= maxPerChannel) {\n      capped++;\n      continue;\n    }\n    counts.set(ch, n + 1);\n    out.push(video);\n  }\n\n  return { items: out, capped };\n}\n", "import type { VideoBatchVerdict } from \"./config.js\";\n\nconst TTL_MS = 24 * 60 * 60 * 1000;\n\ntype CacheEntry = {\n  verdict: VideoBatchVerdict;\n  expiresAt: number;\n};\n\nconst cache = new Map<string, CacheEntry>();\n\nexport function cacheKeyForVideo(platform: string, videoId: string): string {\n  return `${platform.toLowerCase()}:${videoId}`;\n}\n\nexport function getCachedVerdict(platform: string, videoId: string): VideoBatchVerdict | null {\n  const key = cacheKeyForVideo(platform, videoId);\n  const entry = cache.get(key);\n  if (!entry) return null;\n  if (Date.now() > entry.expiresAt) {\n    cache.delete(key);\n    return null;\n  }\n  return entry.verdict;\n}\n\nexport function setCachedVerdict(platform: string, videoId: string, verdict: VideoBatchVerdict): void {\n  if (cache.size > 5000) {\n    const now = Date.now();\n    for (const [k, v] of cache) {\n      if (v.expiresAt < now) cache.delete(k);\n    }\n  }\n  cache.set(cacheKeyForVideo(platform, videoId), {\n    verdict,\n    expiresAt: Date.now() + TTL_MS,\n  });\n}\n\nexport function cacheStats(): { size: number } {\n  return { size: cache.size };\n}\n", "/**\n * Secondary post-processing \u2014 runs ONLY after primary scrape/search/analysis completes.\n *\n * Cost strategy:\n * 1. Deterministic dedup + channel diversity (zero tokens)\n * 2. Nano-tier batched screening (cheapest)\n * 3. Fast-tier borderline validation (only uncertain items)\n * 4. Reason/research tier gap fill (only when budget + coverage gaps remain)\n */\n\nimport { z } from \"zod\";\nimport {\n  batchValidationSchema,\n  gapDiscoverySchema,\n  isOpenRouterConfigured,\n  loadAgentConfig,\n  type GapDiscoveryPlan,\n  type PostProcessVideoInput,\n  type RankedValidatedVideo,\n  type SecondaryPostProcessReport,\n  type VideoBatchVerdict,\n} from \"../config.js\";\nimport { callStructured } from \"../client.js\";\nimport { applyChannelCap, canonicalChannelKey, dedupeVideos } from \"../dedup.js\";\nimport {\n  createSpendTracker,\n  estimateBatchCost,\n  loadSecondaryTierBudget,\n  loadTierModels,\n  pickTierForTask,\n  type ModelTier,\n} from \"../modelRouter.js\";\nimport { getCachedVerdict, setCachedVerdict } from \"../validationCache.js\";\n\nconst BATCH_SCREEN_PROMPT = [\n  \"You are Hook-n-Bone's low-cost video screening agent.\",\n  \"Batch-validate hunting/fishing embed-only videos for a compliant outdoor streaming catalog.\",\n  \"Eligible: real field hunting, fishing, harvests, tutorials, gear-in-field, conservation.\",\n  \"Ineligible: gaming, music, pranks, beauty, crypto, unrelated sports, general vlogs.\",\n  \"Assign confidence 0-1. Use category hooks (fishing), shots (hunting), both, or none.\",\n  \"Be concise in reasons. Prefer high recall \u2014 borderline cases get escalated later.\",\n].join(\"\\n\");\n\nconst BORDERLINE_PROMPT = [\n  \"You validate borderline outdoor videos for Hook-n-Bone.\",\n  \"These passed rule filters but need nuanced judgment.\",\n  \"Return strict eligible/confidence. Embed-only metadata \u2014 never suggest downloading files.\",\n].join(\"\\n\");\n\nconst GAP_FILL_PROMPT = [\n  \"You identify coverage gaps in a hunting/fishing video catalog.\",\n  \"Given category/channel diversity stats, suggest 2-4 YouTube search queries and 1-3 site:youtube.com SERP queries.\",\n  \"Target underrepresented niches (species, regions, techniques). Avoid duplicating existing queries.\",\n  \"Compliant embed-only discovery only.\",\n].join(\"\\n\");\n\nfunction compactId(video: PostProcessVideoInput): string {\n  return `${video.sourcePlatform}:${video.sourceVideoId}`;\n}\n\nfunction rulesOnlyVerdict(video: PostProcessVideoInput): VideoBatchVerdict {\n  const highConfidence = video.relevanceScore >= 0.72;\n  return {\n    id: compactId(video),\n    eligible: highConfidence,\n    confidence: highConfidence ? Math.min(0.95, 0.7 + video.relevanceScore * 0.25) : 0.55,\n    category: video.category,\n    reason: highConfidence ? \"High rule relevance \u2014 skipped LLM\" : \"Moderate rule score\",\n  };\n}\n\nfunction needsEscalation(verdict: VideoBatchVerdict): boolean {\n  return verdict.confidence >= 0.32 && verdict.confidence < 0.72 && verdict.category !== \"none\";\n}\n\nasync function batchScreenVideos(\n  batch: PostProcessVideoInput[],\n  tier: ModelTier,\n  maxCostUsd: number,\n): Promise<VideoBatchVerdict[]> {\n  const models = loadTierModels();\n  const payload = batch.map((v) => ({\n    id: compactId(v),\n    title: v.title.slice(0, 120),\n    creator: v.creator.slice(0, 60),\n    categoryHint: v.category,\n    views: v.viewCount,\n    source: v.ingestionSource,\n  }));\n\n  const { result } = await callStructured({\n    model: models[tier],\n    instructions: BATCH_SCREEN_PROMPT,\n    input: [\n      `Screen ${batch.length} videos. Return results array with matching ids.`,\n      JSON.stringify(payload),\n      \"\",\n      'JSON shape: {\"results\":[{\"id\":\"youtube:abc\",\"eligible\":true,\"confidence\":0.9,\"category\":\"shots\",\"reason\":\"whitetail harvest\"}]}',\n    ].join(\"\\n\"),\n    outputSchema: batchValidationSchema,\n    maxSteps: 3,\n    maxCostUsd,\n  });\n\n  return result.results;\n}\n\nasync function validateBorderline(\n  video: PostProcessVideoInput,\n  tier: ModelTier,\n  maxCostUsd: number,\n): Promise<VideoBatchVerdict> {\n  const models = loadTierModels();\n  const schema = z.object({\n    eligible: z.boolean(),\n    confidence: z.number().min(0).max(1),\n    category: z.enum([\"hooks\", \"shots\", \"both\", \"none\"]),\n    reason: z.string().max(200),\n  });\n\n  const { result } = await callStructured({\n    model: models[tier],\n    instructions: BORDERLINE_PROMPT,\n    input: [\n      `Title: ${video.title}`,\n      `Description: ${video.description.slice(0, 800)}`,\n      `Creator: ${video.creator}`,\n      `Rule relevance: ${video.relevanceScore.toFixed(2)}`,\n      `Source: ${video.ingestionSource}`,\n    ].join(\"\\n\"),\n    outputSchema: schema,\n    maxSteps: 4,\n    maxCostUsd,\n  });\n\n  return {\n    id: compactId(video),\n    ...result,\n  };\n}\n\nasync function discoverCoverageGaps(\n  input: {\n    uniqueChannels: number;\n    hooksCount: number;\n    shotsCount: number;\n    existingSources: string[];\n    season: string;\n  },\n  tracker: ReturnType<typeof createSpendTracker>,\n  budget: ReturnType<typeof loadSecondaryTierBudget>,\n): Promise<GapDiscoveryPlan | null> {\n  const models = loadTierModels();\n  const estimate = 0.03;\n  if (!tracker.canSpend(\"reason\", estimate)) return null;\n\n  try {\n    const { result } = await callStructured({\n      model: models.reason,\n      instructions: GAP_FILL_PROMPT,\n      input: [\n        `Season: ${input.season}`,\n        `Unique channels in batch: ${input.uniqueChannels}`,\n        `Hooks videos: ${input.hooksCount}, Shots videos: ${input.shotsCount}`,\n        `Existing ingestion sources (sample): ${input.existingSources.slice(0, 12).join(\", \")}`,\n        \"Suggest complementary discovery queries for next cycle.\",\n      ].join(\"\\n\"),\n      outputSchema: gapDiscoverySchema,\n      maxSteps: 4,\n      maxCostUsd: Math.min(budget.reason, estimate + 0.005),\n    });\n    tracker.record(\"reason\", estimate);\n    return result;\n  } catch {\n    return null;\n  }\n}\n\nfunction computeRankScore(\n  video: PostProcessVideoInput,\n  verdict: VideoBatchVerdict,\n  channelCounts: Map<string, number>,\n): number {\n  const diversityBonus = (() => {\n    const ch = canonicalChannelKey(video);\n    const count = channelCounts.get(ch) ?? 1;\n    return count <= 1 ? 12 : count === 2 ? 6 : 0;\n  })();\n\n  const freshnessBonus = video.viewCount && video.viewCount > 10_000 ? 5 : 2;\n  const base = video.relevanceScore * 35 + verdict.confidence * 40 + diversityBonus + freshnessBonus;\n  return Math.round(Math.min(100, Math.max(0, base)));\n}\n\nfunction validationTierLabel(\n  verdict: VideoBatchVerdict,\n  escalated: boolean,\n  fromCache: boolean,\n): RankedValidatedVideo[\"validationTier\"] {\n  if (fromCache) return \"nano_batch\";\n  if (!escalated && verdict.confidence >= 0.72) {\n    return verdict.reason.includes(\"rule\") ? \"rules_only\" : \"nano_batch\";\n  }\n  if (escalated) return \"reason_escalation\";\n  return \"fast_borderline\";\n}\n\nexport type SecondaryPostProcessOptions = {\n  videos: PostProcessVideoInput[];\n  existingScopeKeys?: string[];\n  existingSerpQueries?: string[];\n  enableGapFill?: boolean;\n};\n\nexport async function runSecondaryPostProcess(\n  options: SecondaryPostProcessOptions,\n): Promise<SecondaryPostProcessReport | null> {\n  if (!isOpenRouterConfigured()) return null;\n  if (process.env.OPENROUTER_SECONDARY_ENABLED === \"false\") return null;\n\n  const videos = options.videos;\n  if (videos.length === 0) {\n    return {\n      summary: \"No candidates to post-process this cycle.\",\n      rankedVideos: [],\n      stats: {\n        inputCount: 0,\n        afterDedup: 0,\n        llmValidated: 0,\n        escalated: 0,\n        uniqueChannels: 0,\n        tierSpendUsd: 0,\n      },\n      recommendedNextQueries: [],\n    };\n  }\n\n  const budget = loadSecondaryTierBudget();\n  const tracker = createSpendTracker(budget);\n  const batchSize = parseInt(process.env.OPENROUTER_SECONDARY_BATCH_SIZE ?? \"12\", 10) || 12;\n\n  const { items: deduped, stats: dedupStats } = dedupeVideos(videos);\n  const { items: diversified } = applyChannelCap(deduped, 5);\n\n  const verdictMap = new Map<string, VideoBatchVerdict>();\n  const escalatedIds = new Set<string>();\n  let llmValidated = 0;\n\n  const needsLlm: PostProcessVideoInput[] = [];\n  for (const video of diversified) {\n    const cached = getCachedVerdict(video.sourcePlatform, video.sourceVideoId);\n    if (cached) {\n      verdictMap.set(compactId(video), cached);\n      continue;\n    }\n    if (video.relevanceScore >= 0.82) {\n      const v = rulesOnlyVerdict(video);\n      verdictMap.set(compactId(video), v);\n      setCachedVerdict(video.sourcePlatform, video.sourceVideoId, v);\n      continue;\n    }\n    needsLlm.push(video);\n  }\n\n  for (let i = 0; i < needsLlm.length; i += batchSize) {\n    const batch = needsLlm.slice(i, i + batchSize);\n    const estimate = estimateBatchCost(batch.length, \"nano\");\n    const tier = pickTierForTask(\"batch_screen\", tracker.spend, budget, estimate);\n    if (!tier) break;\n\n    try {\n      const results = await batchScreenVideos(batch, tier, Math.min(budget[tier], estimate + 0.01));\n      tracker.record(tier, estimate);\n      llmValidated += batch.length;\n\n      const byId = new Map(results.map((r) => [r.id, r]));\n      for (const video of batch) {\n        const id = compactId(video);\n        const verdict = byId.get(id) ?? rulesOnlyVerdict(video);\n        verdictMap.set(id, verdict);\n        setCachedVerdict(video.sourcePlatform, video.sourceVideoId, verdict);\n      }\n    } catch {\n      for (const video of batch) {\n        const v = rulesOnlyVerdict(video);\n        verdictMap.set(compactId(video), v);\n      }\n    }\n  }\n\n  const borderline: PostProcessVideoInput[] = [];\n  for (const video of diversified) {\n    const verdict = verdictMap.get(compactId(video));\n    if (verdict && needsEscalation(verdict)) borderline.push(video);\n  }\n\n  const maxEscalations = parseInt(process.env.OPENROUTER_SECONDARY_MAX_ESCALATIONS ?? \"8\", 10) || 8;\n  for (const video of borderline.slice(0, maxEscalations)) {\n    const estimate = 0.012;\n    const tier = pickTierForTask(\"borderline\", tracker.spend, budget, estimate);\n    if (!tier) break;\n\n    try {\n      const verdict = await validateBorderline(video, tier, Math.min(budget[tier], estimate + 0.005));\n      tracker.record(tier, estimate);\n      escalatedIds.add(compactId(video));\n      verdictMap.set(compactId(video), verdict);\n      setCachedVerdict(video.sourcePlatform, video.sourceVideoId, verdict);\n      llmValidated++;\n    } catch {\n      /* keep prior verdict */\n    }\n  }\n\n  const channelCounts = new Map<string, number>();\n  for (const video of diversified) {\n    const ch = canonicalChannelKey(video);\n    channelCounts.set(ch, (channelCounts.get(ch) ?? 0) + 1);\n  }\n\n  const rankedVideos: RankedValidatedVideo[] = diversified\n    .map((video) => {\n      const id = compactId(video);\n      const verdict = verdictMap.get(id) ?? rulesOnlyVerdict(video);\n      const eligible = verdict.eligible && verdict.category !== \"none\";\n      if (!eligible) return null;\n\n      return {\n        sourcePlatform: video.sourcePlatform,\n        sourceVideoId: video.sourceVideoId,\n        title: video.title,\n        videoUrl: video.videoUrl,\n        embedUrl: video.embedUrl,\n        creator: video.creator,\n        category:\n          verdict.category === \"hooks\" || verdict.category === \"shots\" || verdict.category === \"both\"\n            ? verdict.category\n            : video.category,\n        confidence: verdict.confidence,\n        rankScore: computeRankScore(video, verdict, channelCounts),\n        ingestionSource: video.ingestionSource,\n        validationTier: validationTierLabel(verdict, escalatedIds.has(id), false),\n        reason: verdict.reason,\n      };\n    })\n    .filter((v): v is RankedValidatedVideo => v !== null)\n    .sort((a, b) => b.rankScore - a.rankScore);\n\n  const uniqueChannels = new Set(diversified.map((v) => canonicalChannelKey(v))).size;\n  const hooksCount = rankedVideos.filter((v) => v.category === \"hooks\" || v.category === \"both\").length;\n  const shotsCount = rankedVideos.filter((v) => v.category === \"shots\" || v.category === \"both\").length;\n\n  let gapPlan: GapDiscoveryPlan | null = null;\n  const gapFillEnabled =\n    options.enableGapFill ?? process.env.OPENROUTER_SECONDARY_GAP_FILL === \"true\";\n\n  if (\n    gapFillEnabled &&\n    tracker.canSpend(\"reason\", 0.03) &&\n    (uniqueChannels < 8 || hooksCount < 3 || shotsCount < 3)\n  ) {\n    gapPlan = await discoverCoverageGaps(\n      {\n        uniqueChannels,\n        hooksCount,\n        shotsCount,\n        existingSources: diversified.map((v) => v.ingestionSource),\n        season: new Date().toLocaleString(\"en-US\", { month: \"long\", year: \"numeric\" }),\n      },\n      tracker,\n      budget,\n    );\n  }\n\n  const recommendedNextQueries = [\n    ...(gapPlan?.youtubeQueries ?? []),\n    ...(gapPlan?.serpQueries ?? []),\n  ].slice(0, 8);\n\n  return {\n    summary: [\n      `Post-processed ${videos.length} candidates \u2192 ${dedupStats.outputCount} unique \u2192 ${rankedVideos.length} validated.`,\n      `LLM screened ${llmValidated}, escalated ${escalatedIds.size}, ${uniqueChannels} channels.`,\n      `Spend ~$${tracker.spend.total.toFixed(3)} (nano $${tracker.spend.nano.toFixed(3)}, fast $${tracker.spend.fast.toFixed(3)}).`,\n    ].join(\" \"),\n    rankedVideos,\n    gapPlan: gapPlan ?? undefined,\n    stats: {\n      inputCount: videos.length,\n      afterDedup: dedupStats.outputCount,\n      llmValidated,\n      escalated: escalatedIds.size,\n      uniqueChannels,\n      tierSpendUsd: tracker.spend.total,\n    },\n    recommendedNextQueries,\n  };\n}\n\nexport {\n  isOpenRouterConfigured,\n  loadAgentConfig,\n  type PostProcessVideoInput,\n  type SecondaryPostProcessReport,\n};\n", "export {\n  planDiscoveryQueries,\n  classifyVideoMetadata,\n  summarizeIngestionRun,\n  researchVideoTrends,\n  isOpenRouterConfigured,\n  loadAgentConfig,\n  type DiscoveryQueryPlan,\n  type VideoClassification,\n  type IngestionReportSummary,\n  type IngestionRunSnapshot,\n  type QueryPlannerContext,\n} from \"./tasks/ingestion.js\";\n\nexport {\n  runSecondaryPostProcess,\n  type PostProcessVideoInput,\n  type SecondaryPostProcessReport,\n} from \"./tasks/secondaryPostProcess.js\";\n\nexport { callStructured, runResearchAgent, getOpenRouterClient, researchTools } from \"./client.js\";\n\nexport {\n  discoveryQuerySchema,\n  videoClassificationSchema,\n  ingestionReportSchema,\n  secondaryPostProcessReportSchema,\n  rankedVideoSchema,\n  type VideoMetadataInput,\n  type RankedValidatedVideo,\n} from \"./config.js\";\n\nexport { loadTierModels, loadSecondaryTierBudget, type ModelTier } from \"./modelRouter.js\";\n\nexport { dedupeVideos, canonicalVideoKey, canonicalChannelKey } from \"./dedup.js\";\n", "import express, { type Express } from \"express\";\nimport cors from \"cors\";\nimport cookieParser from \"cookie-parser\";\nimport pinoHttp from \"pino-http\";\nimport { rateLimit, ipKeyGenerator } from \"express-rate-limit\";\nimport { authMiddleware, getSessionUser } from \"./lib/authMiddleware\";\nimport router from \"./routes\";\nimport seoPublicRouter from \"./routes/seoPublic\";\nimport objectsRouter from \"./routes/objects\";\nimport { logger } from \"./lib/logger\";\nimport { startFeedRefreshJob } from \"./jobs/feedRefreshJob\";\nimport { startRegulationRefreshJob } from \"./jobs/regulationRefreshJob\";\nimport { startInstagramScraperJob } from \"./jobs/instagramScraperJob\";\nimport { startVideoIngestionJob } from \"./jobs/videoIngestionJob\";\nimport type { Request } from \"express\";\n\nconst app: Express = express();\n\napp.set(\"trust proxy\", 1);\n\napp.use(\n  pinoHttp({\n    logger,\n    serializers: {\n      req(req) {\n        return { id: req.id, method: req.method, url: req.url?.split(\"?\")[0] };\n      },\n      res(res) {\n        return { statusCode: res.statusCode };\n      },\n    },\n  }),\n);\n\nfunction buildAllowedOrigins(): Set<string> {\n  const origins = new Set<string>();\n  origins.add(\"https://hooknbone.com\");\n  origins.add(\"https://www.hooknbone.com\");\n  origins.add(\"https://hooknbone-website.vercel.app\");\n  origins.add(\"https://hooknbone-admin.vercel.app\");\n  const siteOrigin = process.env[\"SITE_ORIGIN\"]?.trim();\n  if (siteOrigin) origins.add(siteOrigin);\n  if (process.env.NODE_ENV !== \"production\") {\n    for (const port of [3000, 3001, 5173, 8080, 8081, 8082, 19006]) {\n      origins.add(`http://localhost:${port}`);\n    }\n  }\n  return origins;\n}\n\nconst allowedOrigins = buildAllowedOrigins();\n\napp.use(\n  cors({\n    credentials: true,\n    origin(origin, callback) {\n      if (!origin) { callback(null, true); return; }\n      if (allowedOrigins.has(origin)) {\n        callback(null, origin);\n      } else {\n        callback(null, false);\n      }\n    },\n  }),\n);\n\napp.use(cookieParser());\napp.use(express.json({ limit: \"8mb\" }));\napp.use(express.urlencoded({ extended: true, limit: \"8mb\" }));\napp.use(authMiddleware);\n\nfunction userOrIpKey(req: Request): string {\n  const u = getSessionUser(req);\n  if (u?.userId) return `user:${u.userId}`;\n  return `ip:${ipKeyGenerator(req.ip ?? \"unknown\")}`;\n}\n\nconst globalLimiter = rateLimit({\n  windowMs: 15 * 60 * 1000,\n  max: 2000,\n  standardHeaders: \"draft-7\",\n  legacyHeaders: false,\n  message: { error: \"Too many requests, please try again later.\" },\n  keyGenerator: (req) => `ip:${ipKeyGenerator(req.ip ?? \"unknown\")}`,\n  skip: (req) => {\n    const p = req.path;\n    return p === \"/healthz\" || p.startsWith(\"/species\") || p.startsWith(\"/regulations\") || p.startsWith(\"/solunar\") || p.startsWith(\"/radar/conditions\");\n  },\n});\n\nconst aiLimiter = rateLimit({\n  windowMs: 60 * 1000,\n  max: 10,\n  standardHeaders: \"draft-7\",\n  legacyHeaders: false,\n  message: { error: \"AI rate limit exceeded. Please wait before retrying.\" },\n  keyGenerator: userOrIpKey,\n});\n\nconst geocodeLimiter = rateLimit({\n  windowMs: 60 * 1000,\n  max: 30,\n  standardHeaders: \"draft-7\",\n  legacyHeaders: false,\n  message: { error: \"Geocode rate limit exceeded. Please wait before retrying.\" },\n  keyGenerator: userOrIpKey,\n});\n\nconst youtubeLimiter = rateLimit({\n  windowMs: 60 * 1000,\n  max: 5,\n  standardHeaders: \"draft-7\",\n  legacyHeaders: false,\n  message: { error: \"YouTube search rate limit exceeded. Please wait before retrying.\" },\n  keyGenerator: userOrIpKey,\n});\n\napp.use(\"/api\", globalLimiter);\napp.use(\"/api/gear-detect\", aiLimiter);\napp.use(\"/api/radar/advisor\", aiLimiter);\napp.use(\"/api/openai\", aiLimiter);\napp.use(\"/api/video-metadata\", aiLimiter);\napp.use(\"/api/youtube\", youtubeLimiter);\napp.use(\"/api/geocode\", geocodeLimiter);\n\nconst musicLimiter = rateLimit({\n  windowMs: 60 * 1000,\n  max: 20,\n  standardHeaders: \"draft-7\",\n  legacyHeaders: false,\n  message: { error: \"Music search rate limit exceeded. Please wait.\" },\n  keyGenerator: userOrIpKey,\n});\napp.use(\"/api/music\", musicLimiter);\n\nconst renderLimiter = rateLimit({\n  windowMs: 5 * 60 * 1000,\n  max: 6,\n  standardHeaders: \"draft-7\",\n  legacyHeaders: false,\n  message: { error: \"Render rate limit exceeded. Please wait before retrying.\" },\n  keyGenerator: userOrIpKey,\n  skip: (req) => req.method !== \"POST\",\n});\napp.use(\"/api/video-render\", renderLimiter);\n\nconst renderPollLimiter = rateLimit({\n  windowMs: 60 * 1000,\n  max: 30,\n  standardHeaders: \"draft-7\",\n  legacyHeaders: false,\n  message: { error: \"Too many status requests. Please slow down.\" },\n  keyGenerator: userOrIpKey,\n  skip: (req) => req.method === \"POST\",\n});\napp.use(\"/api/video-render\", renderPollLimiter);\n\nconst renderDownloadLimiter = rateLimit({\n  windowMs: 60 * 1000,\n  max: 10,\n  standardHeaders: \"draft-7\",\n  legacyHeaders: false,\n  message: { error: \"Download rate limit exceeded. Please wait before retrying.\" },\n  keyGenerator: userOrIpKey,\n  skip: (req) => !req.path.endsWith(\"/download\"),\n});\napp.use(\"/api/video-render\", renderDownloadLimiter);\n\nconst socialLimiter = rateLimit({\n  windowMs: 60 * 1000,\n  max: 20,\n  standardHeaders: \"draft-7\",\n  legacyHeaders: false,\n  message: { error: \"Social accounts rate limit exceeded. Please wait.\" },\n  keyGenerator: userOrIpKey,\n});\nconst analyticsIngestLimiter = rateLimit({\n  windowMs: 60 * 1000,\n  max: 120,\n  standardHeaders: \"draft-7\",\n  legacyHeaders: false,\n  message: { error: \"Analytics ingest rate limit exceeded.\" },\n  keyGenerator: (req) => `ip:${ipKeyGenerator(req.ip ?? \"unknown\")}`,\n});\napp.use(\"/api/analytics/ingest\", analyticsIngestLimiter);\n\nconst outfitterApplyLimiter = rateLimit({\n  windowMs: 10 * 60 * 1000,\n  max: 5,\n  standardHeaders: \"draft-7\",\n  legacyHeaders: false,\n  message: { error: \"Too many listing applications. Please try again later.\" },\n  keyGenerator: (req) => `ip:${ipKeyGenerator(req.ip ?? \"unknown\")}`,\n});\napp.post(\"/api/outfitters/apply\", outfitterApplyLimiter);\n\napp.use(seoPublicRouter);\napp.use(\"/objects\", objectsRouter);\napp.use(\"/api\", router);\n\nconst isVercel = Boolean(process.env.VERCEL);\nif (!isVercel) {\n  startFeedRefreshJob();\n  startRegulationRefreshJob();\n  startInstagramScraperJob();\n  startVideoIngestionJob();\n}\n\nexport default app;\n", "// source/ip-key-generator.ts\nimport { isIPv6 } from \"node:net\";\nimport { Address6 } from \"ip-address\";\nfunction ipKeyGenerator(ip, ipv6Subnet = 56) {\n  if (isIPv6(ip)) {\n    const address = new Address6(ip);\n    if (address.is4()) return address.to4().correctForm();\n    if (ipv6Subnet) {\n      const subnet = new Address6(`${ip}/${ipv6Subnet}`);\n      return `${subnet.startAddress().correctForm()}/${ipv6Subnet}`;\n    }\n  }\n  return ip;\n}\n\n// source/memory-store.ts\nvar MemoryStore = class {\n  constructor(validations2) {\n    this.validations = validations2;\n    /**\n     * These two maps store usage (requests) and reset time by key (for example, IP\n     * addresses or API keys).\n     *\n     * They are split into two to avoid having to iterate through the entire set to\n     * determine which ones need reset. Instead, `Client`s are moved from `previous`\n     * to `current` as they hit the endpoint. Once `windowMs` has elapsed, all clients\n     * left in `previous`, i.e., those that have not made any recent requests, are\n     * known to be expired and can be deleted in bulk.\n     */\n    this.previous = /* @__PURE__ */ new Map();\n    this.current = /* @__PURE__ */ new Map();\n    /**\n     * Confirmation that the keys incremented in once instance of MemoryStore\n     * cannot affect other instances.\n     */\n    this.localKeys = true;\n  }\n  /**\n   * Method that initializes the store.\n   *\n   * @param options {Options} - The options used to setup the middleware.\n   */\n  init(options) {\n    this.windowMs = options.windowMs;\n    this.validations?.windowMs(this.windowMs);\n    if (this.interval) clearInterval(this.interval);\n    this.interval = setInterval(() => {\n      this.clearExpired();\n    }, this.windowMs);\n    this.interval.unref?.();\n  }\n  /**\n   * Method to fetch a client's hit count and reset time.\n   *\n   * @param key {string} - The identifier for a client.\n   *\n   * @returns {ClientRateLimitInfo | undefined} - The number of hits and reset time for that client.\n   *\n   * @public\n   */\n  async get(key) {\n    return this.current.get(key) ?? this.previous.get(key);\n  }\n  /**\n   * Method to increment a client's hit counter.\n   *\n   * @param key {string} - The identifier for a client.\n   *\n   * @returns {ClientRateLimitInfo} - The number of hits and reset time for that client.\n   *\n   * @public\n   */\n  async increment(key) {\n    const client = this.getClient(key);\n    const now = Date.now();\n    if (client.resetTime.getTime() <= now) {\n      this.resetClient(client, now);\n    }\n    client.totalHits++;\n    return client;\n  }\n  /**\n   * Method to decrement a client's hit counter.\n   *\n   * @param key {string} - The identifier for a client.\n   *\n   * @public\n   */\n  async decrement(key) {\n    const client = this.getClient(key);\n    if (client.totalHits > 0) client.totalHits--;\n  }\n  /**\n   * Method to reset a client's hit counter.\n   *\n   * @param key {string} - The identifier for a client.\n   *\n   * @public\n   */\n  async resetKey(key) {\n    this.current.delete(key);\n    this.previous.delete(key);\n  }\n  /**\n   * Method to reset everyone's hit counter.\n   *\n   * @public\n   */\n  async resetAll() {\n    this.current.clear();\n    this.previous.clear();\n  }\n  /**\n   * Method to stop the timer (if currently running) and prevent any memory\n   * leaks.\n   *\n   * @public\n   */\n  shutdown() {\n    clearInterval(this.interval);\n    void this.resetAll();\n  }\n  /**\n   * Recycles a client by setting its hit count to zero, and reset time to\n   * `windowMs` milliseconds from now.\n   *\n   * NOT to be confused with `#resetKey()`, which removes a client from both the\n   * `current` and `previous` maps.\n   *\n   * @param client {Client} - The client to recycle.\n   * @param now {number} - The current time, to which the `windowMs` is added to get the `resetTime` for the client.\n   *\n   * @return {Client} - The modified client that was passed in, to allow for chaining.\n   */\n  resetClient(client, now = Date.now()) {\n    client.totalHits = 0;\n    client.resetTime.setTime(now + this.windowMs);\n    return client;\n  }\n  /**\n   * Retrieves or creates a client, given a key. Also ensures that the client being\n   * returned is in the `current` map.\n   *\n   * @param key {string} - The key under which the client is (or is to be) stored.\n   *\n   * @returns {Client} - The requested client.\n   */\n  getClient(key) {\n    if (this.current.has(key)) return this.current.get(key);\n    let client;\n    if (this.previous.has(key)) {\n      client = this.previous.get(key);\n      this.previous.delete(key);\n    } else {\n      client = { totalHits: 0, resetTime: /* @__PURE__ */ new Date() };\n      this.resetClient(client);\n    }\n    this.current.set(key, client);\n    return client;\n  }\n  /**\n   * Move current clients to previous, create a new map for current.\n   *\n   * This function is called every `windowMs`.\n   */\n  clearExpired() {\n    this.previous = this.current;\n    this.current = /* @__PURE__ */ new Map();\n  }\n};\n\n// source/rate-limit.ts\nimport { isIPv6 as isIPv62 } from \"node:net\";\n\n// source/console-logger.ts\nvar ConsoleLogger = {\n  warn(...args) {\n    console.warn(...args.reverse());\n  },\n  error(...args) {\n    console.error(...args.reverse());\n  }\n};\n\n// source/headers.ts\nimport { Buffer } from \"node:buffer\";\nimport { createHash } from \"node:crypto\";\nvar SUPPORTED_DRAFT_VERSIONS = [\n  \"draft-6\",\n  \"draft-7\",\n  \"draft-8\"\n];\nvar getResetSeconds = (windowMs, resetTime) => {\n  let resetSeconds;\n  if (resetTime) {\n    const deltaSeconds = Math.ceil((resetTime.getTime() - Date.now()) / 1e3);\n    resetSeconds = Math.max(0, deltaSeconds);\n  } else {\n    resetSeconds = Math.ceil(windowMs / 1e3);\n  }\n  return resetSeconds;\n};\nvar getPartitionKey = (key) => {\n  const hash = createHash(\"sha256\");\n  hash.update(key);\n  const partitionKey = hash.digest(\"hex\").slice(0, 12);\n  return Buffer.from(partitionKey).toString(\"base64\");\n};\nvar setLegacyHeaders = (response, info) => {\n  if (response.headersSent) return;\n  response.setHeader(\"X-RateLimit-Limit\", info.limit.toString());\n  response.setHeader(\"X-RateLimit-Remaining\", info.remaining.toString());\n  if (info.resetTime instanceof Date) {\n    response.setHeader(\"Date\", (/* @__PURE__ */ new Date()).toUTCString());\n    response.setHeader(\n      \"X-RateLimit-Reset\",\n      Math.ceil(info.resetTime.getTime() / 1e3).toString()\n    );\n  }\n};\nvar setDraft6Headers = (response, info, windowMs) => {\n  if (response.headersSent) return;\n  const windowSeconds = Math.ceil(windowMs / 1e3);\n  const resetSeconds = getResetSeconds(windowMs, info.resetTime);\n  response.setHeader(\"RateLimit-Policy\", `${info.limit};w=${windowSeconds}`);\n  response.setHeader(\"RateLimit-Limit\", info.limit.toString());\n  response.setHeader(\"RateLimit-Remaining\", info.remaining.toString());\n  if (typeof resetSeconds === \"number\")\n    response.setHeader(\"RateLimit-Reset\", resetSeconds.toString());\n};\nvar setDraft7Headers = (response, info, windowMs) => {\n  if (response.headersSent) return;\n  const windowSeconds = Math.ceil(windowMs / 1e3);\n  const resetSeconds = getResetSeconds(windowMs, info.resetTime);\n  response.setHeader(\"RateLimit-Policy\", `${info.limit};w=${windowSeconds}`);\n  response.setHeader(\n    \"RateLimit\",\n    `limit=${info.limit}, remaining=${info.remaining}, reset=${resetSeconds}`\n  );\n};\nvar setDraft8Headers = (response, info, windowMs, name, key) => {\n  if (response.headersSent) return;\n  const windowSeconds = Math.ceil(windowMs / 1e3);\n  const resetSeconds = getResetSeconds(windowMs, info.resetTime);\n  const partitionKey = getPartitionKey(key);\n  const header = `r=${info.remaining}; t=${resetSeconds}`;\n  const policy = `q=${info.limit}; w=${windowSeconds}; pk=:${partitionKey}:`;\n  response.append(\"RateLimit\", `\"${name}\"; ${header}`);\n  response.append(\"RateLimit-Policy\", `\"${name}\"; ${policy}`);\n};\nvar setRetryAfterHeader = (response, info, windowMs) => {\n  if (response.headersSent) return;\n  const resetSeconds = getResetSeconds(windowMs, info.resetTime);\n  response.setHeader(\"Retry-After\", resetSeconds.toString());\n};\n\n// source/utils.ts\nvar omitUndefinedProperties = (passedOptions) => {\n  const omittedOptions = {};\n  for (const k of Object.keys(passedOptions)) {\n    const key = k;\n    if (passedOptions[key] !== void 0) {\n      omittedOptions[key] = passedOptions[key];\n    }\n  }\n  return omittedOptions;\n};\n\n// source/validations.ts\nimport { isIP } from \"node:net\";\nvar ValidationError = class extends Error {\n  /**\n   * The code must be a string, in snake case and all capital, that starts with\n   * the substring `ERR_ERL_`.\n   *\n   * The message must be a string, starting with an uppercase character,\n   * describing the issue in detail.\n   */\n  constructor(code, message) {\n    const url = `https://express-rate-limit.github.io/${code}/`;\n    super(`${message} See ${url} for more information.`);\n    this.name = this.constructor.name;\n    this.code = code;\n    this.help = url;\n  }\n};\nvar ChangeWarning = class extends ValidationError {\n};\nvar usedStores = /* @__PURE__ */ new Set();\nvar singleCountKeys = /* @__PURE__ */ new WeakMap();\nvar validations = {\n  enabled: {\n    default: true\n  },\n  // Should be EnabledValidations type, but that's a circular reference\n  disable() {\n    for (const k of Object.keys(this.enabled)) this.enabled[k] = false;\n  },\n  /**\n   * Checks whether the IP address is valid, and that it does not have a port\n   * number in it.\n   *\n   * See https://github.com/express-rate-limit/express-rate-limit/wiki/Error-Codes#err_erl_invalid_ip_address.\n   *\n   * @param ip {string | undefined} - The IP address provided by Express as request.ip.\n   *\n   * @returns {void}\n   */\n  ip(ip) {\n    if (ip === void 0) {\n      throw new ValidationError(\n        \"ERR_ERL_UNDEFINED_IP_ADDRESS\",\n        `An undefined 'request.ip' was detected. This might indicate a misconfiguration or the connection being destroyed prematurely.`\n      );\n    }\n    if (!isIP(ip)) {\n      throw new ValidationError(\n        \"ERR_ERL_INVALID_IP_ADDRESS\",\n        `An invalid 'request.ip' (${ip}) was detected. Consider passing a custom 'keyGenerator' function to the rate limiter.`\n      );\n    }\n  },\n  /**\n   * Makes sure the trust proxy setting is not set to `true`.\n   *\n   * See https://github.com/express-rate-limit/express-rate-limit/wiki/Error-Codes#err_erl_permissive_trust_proxy.\n   *\n   * @param request {Request} - The Express request object.\n   *\n   * @returns {void}\n   */\n  trustProxy(request) {\n    if (request.app.get(\"trust proxy\") === true) {\n      throw new ValidationError(\n        \"ERR_ERL_PERMISSIVE_TRUST_PROXY\",\n        `The Express 'trust proxy' setting is true, which allows anyone to trivially bypass IP-based rate limiting.`\n      );\n    }\n  },\n  /**\n   * Makes sure the trust proxy setting is set in case the `X-Forwarded-For`\n   * header is present.\n   *\n   * See https://github.com/express-rate-limit/express-rate-limit/wiki/Error-Codes#err_erl_unset_trust_proxy.\n   *\n   * @param request {Request} - The Express request object.\n   *\n   * @returns {void}\n   */\n  xForwardedForHeader(request) {\n    if (request.headers[\"x-forwarded-for\"] && request.app.get(\"trust proxy\") === false) {\n      throw new ValidationError(\n        \"ERR_ERL_UNEXPECTED_X_FORWARDED_FOR\",\n        `The 'X-Forwarded-For' header is set but the Express 'trust proxy' setting is false (default). This could indicate a misconfiguration which would prevent express-rate-limit from accurately identifying users.`\n      );\n    }\n  },\n  /**\n   * Alert the user if the Forwarded header is set (standardized version of X-Forwarded-For - not supported by express as of version 5.1.0)\n   *\n   * @param request {Request} - The Express request object.\n   *\n   * @returns {void}\n   */\n  forwardedHeader(request) {\n    if (request.headers.forwarded && request.ip === request.socket?.remoteAddress) {\n      throw new ValidationError(\n        \"ERR_ERL_FORWARDED_HEADER\",\n        `The 'Forwarded' header (standardized X-Forwarded-For) is set but currently being ignored. Add a custom keyGenerator to use a value from this header.`\n      );\n    }\n  },\n  /**\n   * Ensures totalHits value from store is a positive integer.\n   *\n   * @param hits {any} - The `totalHits` returned by the store.\n   */\n  positiveHits(hits) {\n    if (typeof hits !== \"number\" || hits < 1 || hits !== Math.round(hits)) {\n      throw new ValidationError(\n        \"ERR_ERL_INVALID_HITS\",\n        `The totalHits value returned from the store must be a positive integer, got ${hits}`\n      );\n    }\n  },\n  /**\n   * Ensures a single store instance is not used with multiple express-rate-limit instances\n   */\n  unsharedStore(store) {\n    if (usedStores.has(store)) {\n      const maybeUniquePrefix = store?.localKeys ? \"\" : \" (with a unique prefix)\";\n      throw new ValidationError(\n        \"ERR_ERL_STORE_REUSE\",\n        `A Store instance must not be shared across multiple rate limiters. Create a new instance of ${store.constructor.name}${maybeUniquePrefix} for each limiter instead.`\n      );\n    }\n    usedStores.add(store);\n  },\n  /**\n   * Ensures a given key is incremented only once per request.\n   *\n   * @param request {Request} - The Express request object.\n   * @param store {Store} - The store class.\n   * @param key {string} - The key used to store the client's hit count.\n   *\n   * @returns {void}\n   */\n  singleCount(request, store, key) {\n    let storeKeys = singleCountKeys.get(request);\n    if (!storeKeys) {\n      storeKeys = /* @__PURE__ */ new Map();\n      singleCountKeys.set(request, storeKeys);\n    }\n    const storeKey = store.localKeys ? store : store.constructor.name;\n    let keys = storeKeys.get(storeKey);\n    if (!keys) {\n      keys = [];\n      storeKeys.set(storeKey, keys);\n    }\n    const prefixedKey = `${store.prefix ?? \"\"}${key}`;\n    if (keys.includes(prefixedKey)) {\n      throw new ValidationError(\n        \"ERR_ERL_DOUBLE_COUNT\",\n        `The hit count for ${key} was incremented more than once for a single request.`\n      );\n    }\n    keys.push(prefixedKey);\n  },\n  /**\n   * Warns the user that the behaviour for `max: 0` / `limit: 0` is\n   * changing in the next major release.\n   *\n   * @param limit {number} - The maximum number of hits per client.\n   *\n   * @returns {void}\n   */\n  limit(limit) {\n    if (limit === 0) {\n      throw new ChangeWarning(\n        \"WRN_ERL_MAX_ZERO\",\n        \"Setting limit or max to 0 disables rate limiting in express-rate-limit v6 and older, but will cause all requests to be blocked in v7\"\n      );\n    }\n  },\n  /**\n   * Warns the user that the `draft_polli_ratelimit_headers` option is deprecated\n   * and will be removed in the next major release.\n   *\n   * @param draft_polli_ratelimit_headers {any | undefined} - The now-deprecated setting that was used to enable standard headers.\n   *\n   * @returns {void}\n   */\n  draftPolliHeaders(draft_polli_ratelimit_headers) {\n    if (draft_polli_ratelimit_headers) {\n      throw new ChangeWarning(\n        \"WRN_ERL_DEPRECATED_DRAFT_POLLI_HEADERS\",\n        `The draft_polli_ratelimit_headers configuration option is deprecated and has been removed in express-rate-limit v7, please set standardHeaders: 'draft-6' instead.`\n      );\n    }\n  },\n  /**\n   * Warns the user that the `onLimitReached` option is deprecated and\n   * will be removed in the next major release.\n   *\n   * @param onLimitReached {any | undefined} - The maximum number of hits per client.\n   *\n   * @returns {void}\n   */\n  onLimitReached(onLimitReached) {\n    if (onLimitReached) {\n      throw new ChangeWarning(\n        \"WRN_ERL_DEPRECATED_ON_LIMIT_REACHED\",\n        \"The onLimitReached configuration option is deprecated and has been removed in express-rate-limit v7.\"\n      );\n    }\n  },\n  /**\n   * Warns the user when an invalid/unsupported version of the draft spec is passed.\n   *\n   * @param version {any | undefined} - The version passed by the user.\n   *\n   * @returns {void}\n   */\n  headersDraftVersion(version) {\n    if (typeof version !== \"string\" || // @ts-expect-error This is fine. If version is not in the array, it will just return false.\n    !SUPPORTED_DRAFT_VERSIONS.includes(version)) {\n      const versionString = SUPPORTED_DRAFT_VERSIONS.join(\", \");\n      throw new ValidationError(\n        \"ERR_ERL_HEADERS_UNSUPPORTED_DRAFT_VERSION\",\n        `standardHeaders: only the following versions of the IETF draft specification are supported: ${versionString}.`\n      );\n    }\n  },\n  /**\n   * Warns the user when the selected headers option requires a reset time but\n   * the store does not provide one.\n   *\n   * @param resetTime {Date | undefined} - The timestamp when the client's hit count will be reset.\n   *\n   * @returns {void}\n   */\n  headersResetTime(resetTime) {\n    if (!resetTime) {\n      throw new ValidationError(\n        \"ERR_ERL_HEADERS_NO_RESET\",\n        `standardHeaders:  'draft-7' requires a 'resetTime', but the store did not provide one. The 'windowMs' value will be used instead, which may cause clients to wait longer than necessary.`\n      );\n    }\n  },\n  knownOptions(passedOptions) {\n    if (!passedOptions) return;\n    const optionsMap = {\n      windowMs: true,\n      limit: true,\n      message: true,\n      statusCode: true,\n      legacyHeaders: true,\n      standardHeaders: true,\n      identifier: true,\n      requestPropertyName: true,\n      skipFailedRequests: true,\n      skipSuccessfulRequests: true,\n      keyGenerator: true,\n      ipv6Subnet: true,\n      handler: true,\n      skip: true,\n      requestWasSuccessful: true,\n      store: true,\n      validate: true,\n      headers: true,\n      max: true,\n      passOnStoreError: true,\n      logger: true\n    };\n    const validOptions = Object.keys(optionsMap).concat(\n      \"draft_polli_ratelimit_headers\",\n      // not a valid option anymore, but we have a more specific check for this one, so don't warn for it here\n      // from express-slow-down - https://github.com/express-rate-limit/express-slow-down/blob/main/source/types.ts#L65\n      \"delayAfter\",\n      \"delayMs\",\n      \"maxDelayMs\"\n    );\n    for (const key of Object.keys(passedOptions)) {\n      if (!validOptions.includes(key)) {\n        throw new ValidationError(\n          \"ERR_ERL_UNKNOWN_OPTION\",\n          `Unexpected configuration option: ${key}`\n          // todo: suggest a valid option with a short levenstein distance?\n        );\n      }\n    }\n  },\n  /**\n   * Checks the options.validate setting to ensure that only recognized\n   * validations are enabled or disabled.\n   *\n   * If any unrecognized values are found, an error is logged that\n   * includes the list of supported validations.\n   */\n  validationsConfig() {\n    const supportedValidations = Object.keys(this).filter(\n      (k) => ![\"enabled\", \"disable\"].includes(k)\n    );\n    supportedValidations.push(\"default\");\n    for (const key of Object.keys(this.enabled)) {\n      if (!supportedValidations.includes(key)) {\n        throw new ValidationError(\n          \"ERR_ERL_UNKNOWN_VALIDATION\",\n          `options.validate.${key} is not recognized. Supported validate options are: ${supportedValidations.join(\n            \", \"\n          )}.`\n        );\n      }\n    }\n  },\n  /**\n   * Checks to see if the instance was created inside of a request handler,\n   * which would prevent it from working correctly, with the default memory\n   * store (or any other store with localKeys.)\n   */\n  creationStack(store) {\n    const { stack } = new Error(\n      \"express-rate-limit validation check (set options.validate.creationStack=false to disable)\"\n    );\n    if (stack?.includes(\"Layer.handle [as handle_request]\") || // express v4\n    stack?.includes(\"Layer.handleRequest\")) {\n      if (!store.localKeys) {\n        throw new ValidationError(\n          \"ERR_ERL_CREATED_IN_REQUEST_HANDLER\",\n          \"express-rate-limit instance should *usually* be created at app initialization, not when responding to a request.\"\n        );\n      }\n      throw new ValidationError(\n        \"ERR_ERL_CREATED_IN_REQUEST_HANDLER\",\n        \"express-rate-limit instance should be created at app initialization, not when responding to a request.\"\n      );\n    }\n  },\n  ipv6Subnet(ipv6Subnet) {\n    if (ipv6Subnet === false) {\n      return;\n    }\n    if (!Number.isInteger(ipv6Subnet) || ipv6Subnet < 32 || ipv6Subnet > 64) {\n      throw new ValidationError(\n        \"ERR_ERL_IPV6_SUBNET\",\n        `Unexpected ipv6Subnet value: ${ipv6Subnet}. Expected an integer between 32 and 64 (usually 48-64).`\n      );\n    }\n  },\n  ipv6SubnetOrKeyGenerator(options) {\n    if (options.ipv6Subnet !== void 0 && options.keyGenerator) {\n      throw new ValidationError(\n        \"ERR_ERL_IPV6SUBNET_OR_KEYGENERATOR\",\n        `Incompatible options: the 'ipv6Subnet' option is ignored when a custom 'keyGenerator' function is also set.`\n      );\n    }\n  },\n  keyGeneratorIpFallback(keyGenerator) {\n    if (!keyGenerator) {\n      return;\n    }\n    const src = keyGenerator.toString();\n    if ((src.includes(\"req.ip\") || src.includes(\"request.ip\")) && !src.includes(\"ipKeyGenerator\")) {\n      throw new ValidationError(\n        \"ERR_ERL_KEY_GEN_IPV6\",\n        \"Custom keyGenerator appears to use request IP without calling the ipKeyGenerator helper function for IPv6 addresses. This could allow IPv6 users to bypass limits.\"\n      );\n    }\n  },\n  /**\n   * Checks to see if the window duration is greater than 2^32 - 1. This is only\n   * called by the default MemoryStore, since it uses Node's setInterval method.\n   *\n   * See https://nodejs.org/api/timers.html#setintervalcallback-delay-args.\n   */\n  windowMs(windowMs) {\n    const SET_TIMEOUT_MAX = 2 ** 31 - 1;\n    if (typeof windowMs !== \"number\" || Number.isNaN(windowMs) || windowMs < 1 || windowMs > SET_TIMEOUT_MAX) {\n      throw new ValidationError(\n        \"ERR_ERL_WINDOW_MS\",\n        `Invalid windowMs value: ${windowMs}${typeof windowMs !== \"number\" ? ` (${typeof windowMs})` : \"\"}, must be a number between 1 and ${SET_TIMEOUT_MAX} when using the default MemoryStore`\n      );\n    }\n  }\n};\nfunction validateLogger(logger) {\n  if (typeof logger !== \"object\" || typeof logger.error !== \"function\" || typeof logger.warn !== \"function\") {\n    throw new TypeError(\n      \"Provided logger does not implement the Logger interface\"\n    );\n  }\n}\nvar getValidations = (_enabled, logger) => {\n  validateLogger(logger);\n  let enabled;\n  if (typeof _enabled === \"boolean\") {\n    enabled = {\n      default: _enabled\n    };\n  } else {\n    enabled = {\n      default: true,\n      ..._enabled\n    };\n  }\n  const wrappedValidations = { enabled };\n  for (const [name, validation] of Object.entries(validations)) {\n    if (typeof validation === \"function\")\n      wrappedValidations[name] = (...args) => {\n        if (!(enabled[name] ?? enabled.default)) {\n          return;\n        }\n        try {\n          ;\n          validation.apply(\n            wrappedValidations,\n            args\n          );\n        } catch (error) {\n          if (error instanceof ChangeWarning) logger.warn(error);\n          else logger.error(error);\n        }\n      };\n  }\n  return wrappedValidations;\n};\n\n// source/rate-limit.ts\nvar isLegacyStore = (store) => (\n  // Check that `incr` exists but `increment` does not - store authors might want\n  // to keep both around for backwards compatibility.\n  typeof store.incr === \"function\" && typeof store.increment !== \"function\"\n);\nvar promisifyStore = (passedStore) => {\n  if (!isLegacyStore(passedStore)) {\n    return passedStore;\n  }\n  const legacyStore = passedStore;\n  class PromisifiedStore {\n    async increment(key) {\n      return new Promise((resolve, reject) => {\n        legacyStore.incr(\n          key,\n          (error, totalHits, resetTime) => {\n            if (error) reject(error);\n            resolve({ totalHits, resetTime });\n          }\n        );\n      });\n    }\n    async decrement(key) {\n      return legacyStore.decrement(key);\n    }\n    async resetKey(key) {\n      return legacyStore.resetKey(key);\n    }\n    /* istanbul ignore next */\n    async resetAll() {\n      if (typeof legacyStore.resetAll === \"function\")\n        return legacyStore.resetAll();\n    }\n  }\n  return new PromisifiedStore();\n};\nvar getOptionsFromConfig = (config) => {\n  const { validations: validations2, ...directlyPassableEntries } = config;\n  return {\n    ...directlyPassableEntries,\n    validate: validations2.enabled\n  };\n};\nvar parseOptions = (passedOptions) => {\n  const notUndefinedOptions = omitUndefinedProperties(passedOptions);\n  const logger = passedOptions.logger ?? ConsoleLogger;\n  const validations2 = getValidations(\n    notUndefinedOptions?.validate ?? true,\n    logger\n  );\n  validations2.validationsConfig();\n  validations2.knownOptions(passedOptions);\n  validations2.draftPolliHeaders(\n    // @ts-expect-error see the note above.\n    notUndefinedOptions.draft_polli_ratelimit_headers\n  );\n  validations2.onLimitReached(notUndefinedOptions.onLimitReached);\n  if (notUndefinedOptions.ipv6Subnet !== void 0 && typeof notUndefinedOptions.ipv6Subnet !== \"function\") {\n    validations2.ipv6Subnet(notUndefinedOptions.ipv6Subnet);\n  }\n  validations2.keyGeneratorIpFallback(notUndefinedOptions.keyGenerator);\n  validations2.ipv6SubnetOrKeyGenerator(notUndefinedOptions);\n  let standardHeaders = notUndefinedOptions.standardHeaders ?? false;\n  if (standardHeaders === true) standardHeaders = \"draft-6\";\n  const config = {\n    windowMs: 60 * 1e3,\n    limit: passedOptions.max ?? 5,\n    // `max` is deprecated, but support it anyways.\n    message: \"Too many requests, please try again later.\",\n    statusCode: 429,\n    legacyHeaders: passedOptions.headers ?? true,\n    identifier(request, _response) {\n      let duration = \"\";\n      const property = config.requestPropertyName;\n      const { limit } = request[property];\n      const seconds = config.windowMs / 1e3;\n      const minutes = config.windowMs / (1e3 * 60);\n      const hours = config.windowMs / (1e3 * 60 * 60);\n      const days = config.windowMs / (1e3 * 60 * 60 * 24);\n      if (seconds < 60) duration = `${seconds}sec`;\n      else if (minutes < 60) duration = `${minutes}min`;\n      else if (hours < 24) duration = `${hours}hr${hours > 1 ? \"s\" : \"\"}`;\n      else duration = `${days}day${days > 1 ? \"s\" : \"\"}`;\n      return `${limit}-in-${duration}`;\n    },\n    requestPropertyName: \"rateLimit\",\n    skipFailedRequests: false,\n    skipSuccessfulRequests: false,\n    requestWasSuccessful: (_request, response) => response.statusCode < 400,\n    skip: (_request, _response) => false,\n    async keyGenerator(request, response) {\n      validations2.ip(request.ip);\n      validations2.trustProxy(request);\n      validations2.xForwardedForHeader(request);\n      validations2.forwardedHeader(request);\n      const ip = request.ip;\n      let subnet = 56;\n      if (isIPv62(ip)) {\n        subnet = typeof config.ipv6Subnet === \"function\" ? await config.ipv6Subnet(request, response) : config.ipv6Subnet;\n        if (typeof config.ipv6Subnet === \"function\")\n          validations2.ipv6Subnet(subnet);\n      }\n      return ipKeyGenerator(ip, subnet);\n    },\n    ipv6Subnet: 56,\n    async handler(request, response, _next, _optionsUsed) {\n      response.status(config.statusCode);\n      const message = typeof config.message === \"function\" ? await config.message(\n        request,\n        response\n      ) : config.message;\n      if (!response.writableEnded) response.send(message);\n    },\n    passOnStoreError: false,\n    // Allow the default options to be overridden by the passed options.\n    ...notUndefinedOptions,\n    // `standardHeaders` is resolved into a draft version above, use that.\n    standardHeaders,\n    // Note that this field is declared after the user's options are spread in,\n    // so that this field doesn't get overridden with an un-promisified store!\n    store: promisifyStore(\n      notUndefinedOptions.store ?? new MemoryStore(validations2)\n    ),\n    // Print an error to the console if a few known misconfigurations are detected.\n    validations: validations2,\n    logger\n  };\n  if (typeof config.store.increment !== \"function\" || typeof config.store.decrement !== \"function\" || typeof config.store.resetKey !== \"function\" || config.store.resetAll !== void 0 && typeof config.store.resetAll !== \"function\" || config.store.init !== void 0 && typeof config.store.init !== \"function\") {\n    throw new TypeError(\n      \"An invalid store was passed. Please ensure that the store is a class that implements the `Store` interface.\"\n    );\n  }\n  return config;\n};\nvar handleAsyncErrors = (fn) => async (request, response, next) => {\n  try {\n    await Promise.resolve(fn(request, response, next)).catch(next);\n  } catch (error) {\n    next(error);\n  }\n};\nvar rateLimit = (passedOptions) => {\n  const config = parseOptions(passedOptions ?? {});\n  const options = getOptionsFromConfig(config);\n  config.validations.creationStack(config.store);\n  config.validations.unsharedStore(config.store);\n  if (typeof config.store.init === \"function\") config.store.init(options);\n  const middleware = handleAsyncErrors(\n    async (request, response, next) => {\n      const closePromise = config.skipFailedRequests && new Promise((resolve) => response.once(\"close\", resolve));\n      const finishPromise = (config.skipFailedRequests || config.skipSuccessfulRequests) && new Promise((resolve) => response.once(\"finish\", resolve));\n      const errorPromise = config.skipFailedRequests && new Promise((resolve) => response.once(\"error\", resolve));\n      const skip = await config.skip(request, response);\n      if (skip) {\n        next();\n        return;\n      }\n      const augmentedRequest = request;\n      const key = await config.keyGenerator(request, response);\n      let totalHits = 0;\n      let resetTime;\n      try {\n        const incrementResult = await config.store.increment(key);\n        totalHits = incrementResult.totalHits;\n        resetTime = incrementResult.resetTime;\n      } catch (error) {\n        if (config.passOnStoreError) {\n          config.logger.error(\n            error,\n            \"express-rate-limit: error from store, allowing request without rate-limiting.\"\n          );\n          next();\n          return;\n        }\n        throw error;\n      }\n      config.validations.positiveHits(totalHits);\n      config.validations.singleCount(request, config.store, key);\n      const retrieveLimit = typeof config.limit === \"function\" ? config.limit(request, response) : config.limit;\n      const limit = await retrieveLimit;\n      config.validations.limit(limit);\n      const info = {\n        limit,\n        used: totalHits,\n        remaining: Math.max(limit - totalHits, 0),\n        resetTime,\n        key\n      };\n      Object.defineProperty(info, \"current\", {\n        configurable: false,\n        enumerable: false,\n        value: totalHits\n      });\n      augmentedRequest[config.requestPropertyName] = info;\n      if (config.legacyHeaders && !response.headersSent) {\n        setLegacyHeaders(response, info);\n      }\n      if (config.standardHeaders && !response.headersSent) {\n        switch (config.standardHeaders) {\n          case \"draft-6\": {\n            setDraft6Headers(response, info, config.windowMs);\n            break;\n          }\n          case \"draft-7\": {\n            config.validations.headersResetTime(info.resetTime);\n            setDraft7Headers(response, info, config.windowMs);\n            break;\n          }\n          case \"draft-8\": {\n            const retrieveName = typeof config.identifier === \"function\" ? config.identifier(request, response) : config.identifier;\n            const name = await retrieveName;\n            config.validations.headersResetTime(info.resetTime);\n            setDraft8Headers(response, info, config.windowMs, name, key);\n            break;\n          }\n          default: {\n            config.validations.headersDraftVersion(config.standardHeaders);\n            break;\n          }\n        }\n      }\n      if (config.skipFailedRequests || config.skipSuccessfulRequests) {\n        let decremented = false;\n        const decrementKey = async () => {\n          if (!decremented) {\n            await config.store.decrement(key);\n            decremented = true;\n          }\n        };\n        if (config.skipFailedRequests) {\n          if (finishPromise) {\n            void finishPromise.then(async () => {\n              if (!await config.requestWasSuccessful(request, response))\n                await decrementKey();\n            });\n          }\n          if (closePromise) {\n            void closePromise.then(async () => {\n              if (!response.writableEnded) await decrementKey();\n            });\n          }\n          if (errorPromise) {\n            void errorPromise.then(async () => {\n              await decrementKey();\n            });\n          }\n        }\n        if (config.skipSuccessfulRequests) {\n          if (finishPromise) {\n            void finishPromise.then(async () => {\n              if (await config.requestWasSuccessful(request, response))\n                await decrementKey();\n            });\n          }\n        }\n      }\n      config.validations.disable();\n      if (totalHits > limit) {\n        if (config.legacyHeaders || config.standardHeaders) {\n          setRetryAfterHeader(response, info, config.windowMs);\n        }\n        config.handler(request, response, next, options);\n        return;\n      }\n      next();\n    }\n  );\n  const getThrowFn = () => {\n    throw new Error(\"The current store does not support the get/getKey method\");\n  };\n  middleware.resetKey = config.store.resetKey.bind(config.store);\n  middleware.getKey = typeof config.store.get === \"function\" ? config.store.get.bind(config.store) : getThrowFn;\n  return middleware;\n};\nvar rate_limit_default = rateLimit;\nexport {\n  MemoryStore,\n  rate_limit_default as default,\n  ipKeyGenerator,\n  rate_limit_default as rateLimit\n};\n", "import { Router, type IRouter } from \"express\";\nimport healthRouter from \"./health\";\nimport authRouter from \"./auth\";\nimport openaiRouter from \"./openai\";\nimport adminRouter from \"./admin\";\nimport legalRouter from \"./legal\";\nimport reportsRouter from \"./reports\";\nimport videoMetadataRouter from \"./videoMetadata\";\nimport videoRenderRouter from \"./videoRender\";\nimport speciesRouter from \"./species\";\nimport gearDetectRouter from \"./gearDetect\";\nimport gearRouter from \"./gear\";\nimport gearPriceRouter from \"./gearPrice\";\nimport regulationsRouter from \"./regulations\";\nimport solunarRouter from \"./solunar\";\nimport geocodeRouter from \"./geocode\";\nimport youtubeRouter from \"./youtube\";\nimport musicRouter from \"./music\";\nimport exportsRouter from \"./exports\";\nimport feedRouter from \"./feed\";\nimport socialRouter from \"./social\";\nimport uploadRouter from \"./upload\";\nimport outfittersRouter from \"./outfitters\";\nimport listingsRouter from \"./listings\";\nimport waitlistRouter from \"./waitlist\";\nimport gscRouter from \"./gsc\";\nimport wardenRouter from \"./warden\";\nimport conversationsRouter from \"./conversations\";\nimport friendsRouter from \"./friends\";\nimport contentScraperRouter from \"./contentScraper\";\nimport youtubeSeederRouter from \"./youtubeSeeder\";\nimport googleSerpRouter from \"./googleSerp\";\nimport scuttlebuttRouter from \"./scuttlebutt\";\nimport campfireChatRouter from \"./campfireChat\";\nimport radarConditionsRouter from \"./radarConditions\";\nimport radarAdvisorRouter from \"./radarAdvisor\";\nimport analyticsIngestRouter from \"./analyticsIngest\";\nimport betaFeedbackRouter from \"./betaFeedback\";\nimport videoIngestionRouter from \"./videoIngestion\";\nimport contentDiscoveryRouter from \"./contentDiscovery\";\nimport tiktokCollectionRouter from \"./tiktokCollection\";\nimport postProcessRouter from \"./postProcess\";\n\nconst router: IRouter = Router();\n\nrouter.use(healthRouter);\nrouter.use(authRouter);\nrouter.use(\"/openai\", openaiRouter);\nrouter.use(\"/admin/gsc\", gscRouter);\nrouter.use(\"/admin/scraper\", contentScraperRouter);\nrouter.use(\"/admin/youtube-seeder\", youtubeSeederRouter);\nrouter.use(\"/admin/google-serp\", googleSerpRouter);\nrouter.use(\"/admin\", adminRouter);\nrouter.use(\"/legal\", legalRouter);\nrouter.use(\"/reports\", reportsRouter);\nrouter.use(\"/video-metadata\", videoMetadataRouter);\nrouter.use(\"/video-render\", videoRenderRouter);\nrouter.use(\"/exports\", exportsRouter);\nrouter.use(\"/baked-clips\", exportsRouter);\nrouter.use(\"/species\", speciesRouter);\nrouter.use(\"/gear-detect\", gearDetectRouter);\nrouter.use(\"/gear/price\", gearPriceRouter);\nrouter.use(\"/gear\", gearRouter);\nrouter.use(\"/regulations\", regulationsRouter);\nrouter.use(\"/solunar\", solunarRouter);\nrouter.use(\"/geocode\", geocodeRouter);\nrouter.use(\"/youtube\", youtubeRouter);\nrouter.use(\"/music\", musicRouter);\nrouter.use(\"/feed\", feedRouter);\nrouter.use(\"/social\", socialRouter);\nrouter.use(\"/upload\", uploadRouter);\nrouter.use(\"/outfitters\", outfittersRouter);\nrouter.use(\"/listings\", listingsRouter);\nrouter.use(\"/waitlist\", waitlistRouter);\nrouter.use(\"/warden\", wardenRouter);\nrouter.use(\"/conversations\", conversationsRouter);\nrouter.use(\"/friends\", friendsRouter);\nrouter.use(\"/scuttlebutt\", scuttlebuttRouter);\nrouter.use(\"/campfire-chat\", campfireChatRouter);\nrouter.use(\"/radar/conditions\", radarConditionsRouter);\nrouter.use(\"/radar/advisor\", radarAdvisorRouter);\nrouter.use(\"/analytics\", analyticsIngestRouter);\nrouter.use(\"/beta-feedback\", betaFeedbackRouter);\nrouter.use(videoIngestionRouter);\nrouter.use(contentDiscoveryRouter);\nrouter.use(tiktokCollectionRouter);\nrouter.use(postProcessRouter);\n\nexport default router;\n", "import { Router, type IRouter } from \"express\";\nimport { HealthCheckResponse } from \"@workspace/api-zod\";\n\nconst router: IRouter = Router();\n\nrouter.get(\"/healthz\", (_req, res) => {\n  const data = HealthCheckResponse.parse({ status: \"ok\" });\n  res.json(data);\n});\n\nexport default router;\n", "/**\n * Generated by orval v8.5.3 \uD83C\uDF7A\n * Do not edit manually.\n * Api\n * API specification\n * OpenAPI spec version: 0.1.0\n */\nimport * as zod from \"zod\";\n\n/**\n * @summary Get the currently authenticated user\n */\nexport const GetCurrentAuthUserHeader = zod.object({\n  Authorization: zod\n    .string()\n    .optional()\n    .describe(\"Opaque session token \u2014 `Bearer <sid>`.\"),\n});\n\nexport const GetCurrentAuthUserResponse = zod.object({\n  user: zod.union([\n    zod.object({\n      id: zod.string(),\n      email: zod.string().email().nullable(),\n      firstName: zod.string().nullable(),\n      lastName: zod.string().nullable(),\n      profileImageUrl: zod.string().nullable(),\n      role: zod.string().nullish(),\n      banned: zod.boolean().nullish(),\n    }),\n    zod.null(),\n  ]),\n});\n\n/**\n * @summary Start the browser OIDC login flow\n */\nexport const BeginBrowserLoginQueryParams = zod.object({\n  returnTo: zod.coerce\n    .string()\n    .optional()\n    .describe(\n      \"Relative path to redirect to after login (must start with `\\/`). Defaults to `\\/`.\",\n    ),\n});\n\n/**\n * @summary Complete the browser OIDC login flow\n */\nexport const HandleBrowserLoginCallbackQueryParams = zod.object({\n  code: zod.coerce.string().optional(),\n  state: zod.coerce.string().optional(),\n  iss: zod.coerce.string().url().optional(),\n});\n\n/**\n * @summary Clear the session and begin OIDC logout\n */\nexport const LogoutBrowserSessionHeader = zod.object({\n  Authorization: zod\n    .string()\n    .optional()\n    .describe(\"Opaque session token \u2014 `Bearer <sid>`.\"),\n});\n\n/**\n * @summary Exchange a mobile OIDC code for a session token\n */\n\nexport const ExchangeMobileAuthorizationCodeBody = zod.object({\n  code: zod.string().min(1),\n  code_verifier: zod.string().min(1),\n  redirect_uri: zod.string().url().min(1),\n  state: zod.string().min(1),\n  nonce: zod.string().min(1).optional(),\n});\n\nexport const ExchangeMobileAuthorizationCodeResponse = zod.object({\n  token: zod.string(),\n});\n\n/**\n * @summary Delete a mobile session token\n */\nexport const LogoutMobileSessionHeader = zod.object({\n  Authorization: zod\n    .string()\n    .optional()\n    .describe(\"Opaque session token \u2014 `Bearer <sid>`.\"),\n});\n\nexport const LogoutMobileSessionResponse = zod.object({\n  success: zod.boolean(),\n});\n\n/**\n * Returns all baked MP4 exports for the authenticated user, ordered newest\nfirst. Exports are stored permanently (no expiry). Each item includes a\n`downloadUrl` that points to the authenticated download endpoint.\nAlso accessible as `GET /baked-clips`.\n\n * @summary List authenticated user's baked clip exports\n */\nexport const ListExportsResponse = zod.object({\n  exports: zod.array(\n    zod\n      .object({\n        id: zod.number(),\n        userId: zod.string(),\n        filename: zod.string(),\n        objectPath: zod.string(),\n        format: zod.enum([\"hook\", \"shot\", \"video\"]),\n        fileSizeBytes: zod.number(),\n        createdAt: zod.coerce.date(),\n        jobId: zod\n          .string()\n          .nullish()\n          .describe(\"The render job ID that produced this clip\"),\n        manifest: zod\n          .string()\n          .nullish()\n          .describe(\n            \"JSON-serialized EditManifest (format, trim, crop, audio) used to bake this clip\",\n          ),\n        downloadUrl: zod\n          .string()\n          .describe(\"Authenticated download URL for this export\"),\n      })\n      .describe(\n        \"A baked MP4 clip stored permanently in the user's export library\",\n      ),\n  ),\n});\n\n/**\n * Streams the baked MP4 file for the given export ID. The caller must\nown the export (matched by Clerk userId).\n\n * @summary Stream a baked MP4 export to the caller\n */\nexport const DownloadExportParams = zod.object({\n  id: zod.coerce.number(),\n});\n\n/**\n * Removes the MP4 file from storage and deletes the database record.\n * @summary Delete a baked clip export\n */\nexport const DeleteExportParams = zod.object({\n  id: zod.coerce.number(),\n});\n\nexport const DeleteExportResponse = zod.object({\n  success: zod.boolean(),\n});\n\n/**\n * Returns all baked MP4 exports for the authenticated user. Exports are\nstored permanently (no expiry). This is an alias for `GET /exports`.\n\n * @summary Alias for GET /exports \u2014 list authenticated user's baked clips\n */\nexport const ListBakedClipsResponse = zod.object({\n  exports: zod.array(\n    zod\n      .object({\n        id: zod.number(),\n        userId: zod.string(),\n        filename: zod.string(),\n        objectPath: zod.string(),\n        format: zod.enum([\"hook\", \"shot\", \"video\"]),\n        fileSizeBytes: zod.number(),\n        createdAt: zod.coerce.date(),\n        jobId: zod\n          .string()\n          .nullish()\n          .describe(\"The render job ID that produced this clip\"),\n        manifest: zod\n          .string()\n          .nullish()\n          .describe(\n            \"JSON-serialized EditManifest (format, trim, crop, audio) used to bake this clip\",\n          ),\n        downloadUrl: zod\n          .string()\n          .describe(\"Authenticated download URL for this export\"),\n      })\n      .describe(\n        \"A baked MP4 clip stored permanently in the user's export library\",\n      ),\n  ),\n});\n\n/**\n * Returns server health status\n * @summary Health check\n */\nexport const HealthCheckResponse = zod.object({\n  status: zod.string(),\n});\n\n/**\n * Clerk-gated. Accepts either a multipart/form-data `video` file or a JSON body with `videoUrl`.\nExtracts a representative frame via ffmpeg and sends it to GPT-4o vision to detect blood,\nfield dressing, gut piles, or animal dispatching. Persists result to video_content_flags.\nRate limited to 20 requests per hour per user.\n\n * @summary Analyze video content for blood/dispatching detection\n */\nexport const CheckUploadContentBody = zod.object({\n  videoUrl: zod.string().describe(\"Public video URL to fetch and analyze\"),\n});\n\nexport const CheckUploadContentResponse = zod.object({\n  uploadSessionId: zod\n    .string()\n    .describe(\"UUID identifying this content check session\"),\n  bloodDetected: zod\n    .boolean()\n    .describe(\n      \"Whether GPT-4o detected blood, field dressing, gut piles, or animal dispatching\",\n    ),\n});\n\n/**\n * Clerk-gated. Accepts a base64-encoded image frame (JPEG/PNG/WebP) that was extracted\non-device, bypassing ffmpeg entirely for near-instant latency. Intended for native\nmobile clients that can use expo-video-thumbnails to extract a frame before upload.\nPersists result to video_content_flags. Shares the same rate limit as check-content\n(20 requests per hour per user).\n\n * @summary Analyze a pre-extracted video frame for blood/dispatching detection\n */\nexport const CheckUploadFrameBody = zod.object({\n  imageBase64: zod\n    .string()\n    .describe(\"Base64-encoded image data (JPEG\\/PNG\\/WebP), max 5 MB decoded\"),\n  mimeType: zod\n    .enum([\"image/jpeg\", \"image/png\", \"image/webp\"])\n    .describe(\n      \"MIME type of the image (image\\/jpeg, image\\/png, or image\\/webp)\",\n    ),\n});\n\nexport const CheckUploadFrameResponse = zod.object({\n  uploadSessionId: zod\n    .string()\n    .describe(\"UUID identifying this content check session\"),\n  bloodDetected: zod\n    .boolean()\n    .describe(\n      \"Whether GPT-4o detected blood, field dressing, gut piles, or animal dispatching\",\n    ),\n});\n\n/**\n * Clerk-gated. Updates the video_content_flags record identified by uploadSessionId\nwith the user's adultConfirmed and legalConfirmed values.\nMust be called before finalizing upload of blood-detected content.\n\n * @summary Record user age and ethics confirmations for flagged content\n */\nexport const ConfirmUploadContentBody = zod.object({\n  uploadSessionId: zod\n    .string()\n    .describe(\"The session ID returned from check-content\"),\n  adultConfirmed: zod.boolean().describe(\"User confirms they are 18 or older\"),\n  legalConfirmed: zod\n    .boolean()\n    .describe(\"User confirms harvest was legal and ethical\"),\n});\n\nexport const ConfirmUploadContentResponse = zod.object({\n  success: zod.boolean(),\n});\n\n/**\n * Returns up to 100 most recent video_content_flags records where blood_detected is true.\n * @summary List blood-detected upload sessions (moderator+)\n */\nexport const ListBloodFlagsResponseItem = zod.object({\n  id: zod.number(),\n  uploadSessionId: zod.string(),\n  userId: zod.string(),\n  bloodDetected: zod.boolean(),\n  adultConfirmed: zod.boolean(),\n  legalConfirmed: zod.boolean(),\n  analyzedAt: zod.coerce.date(),\n});\nexport const ListBloodFlagsResponse = zod.array(ListBloodFlagsResponseItem);\n\n/**\n * Records a user's acceptance of the current Terms of Service version. Requires Clerk auth.\n * @summary Accept Terms of Service\n */\nexport const AcceptTosBody = zod.object({\n  birthDate: zod.string().describe(\"ISO 8601 date string (YYYY-MM-DD)\"),\n  profileType: zod.enum([\"hunter\", \"angler\", \"both\"]),\n  tosVersion: zod\n    .string()\n    .optional()\n    .describe(\"TOS version to accept (optional; defaults to current version)\"),\n});\n\nexport const AcceptTosResponse = zod.object({\n  success: zod.boolean(),\n  alreadyAccepted: zod.boolean(),\n});\n\n/**\n * Returns whether the authenticated user has accepted a given TOS version. Requires Clerk auth.\n * @summary Check TOS acceptance status\n */\nexport const GetTosStatusQueryParams = zod.object({\n  version: zod.coerce\n    .string()\n    .optional()\n    .describe(\"TOS version string (default is current version)\"),\n});\n\nexport const GetTosStatusResponse = zod.object({\n  accepted: zod.boolean(),\n  tosVersion: zod.string(),\n  currentVersion: zod.string(),\n  acceptedAt: zod\n    .string()\n    .nullable()\n    .describe(\"ISO 8601 timestamp of acceptance, or null if not accepted\"),\n});\n\n/**\n * Returns paginated list of user TOS acceptances with user email enriched from Clerk. Requires admin role.\n * @summary List TOS agreement records (admin only)\n */\nexport const listTosAgreementsQueryPageDefault = 1;\nexport const listTosAgreementsQueryLimitDefault = 50;\nexport const listTosAgreementsQueryLimitMax = 100;\n\nexport const ListTosAgreementsQueryParams = zod.object({\n  page: zod.coerce.number().default(listTosAgreementsQueryPageDefault),\n  limit: zod.coerce\n    .number()\n    .max(listTosAgreementsQueryLimitMax)\n    .default(listTosAgreementsQueryLimitDefault),\n});\n\nexport const ListTosAgreementsResponse = zod.object({\n  total: zod.number(),\n  page: zod.number(),\n  limit: zod.number(),\n  items: zod.array(\n    zod.object({\n      id: zod.number(),\n      userId: zod.string(),\n      userEmail: zod.string(),\n      tosVersion: zod.string(),\n      profileType: zod.string().nullable(),\n      isAdult: zod.boolean().nullable(),\n      acceptedAt: zod.string().nullable(),\n    }),\n  ),\n});\n\n/**\n * Returns paginated DMCA claims, optionally filtered by status. Requires admin role.\n * @summary List DMCA claims (admin only)\n */\nexport const listDmcaClaimsQueryPageDefault = 1;\nexport const listDmcaClaimsQueryLimitDefault = 50;\nexport const listDmcaClaimsQueryLimitMax = 100;\n\nexport const ListDmcaClaimsQueryParams = zod.object({\n  status: zod.enum([\"pending\", \"reviewing\", \"resolved\", \"rejected\"]).optional(),\n  page: zod.coerce.number().default(listDmcaClaimsQueryPageDefault),\n  limit: zod.coerce\n    .number()\n    .max(listDmcaClaimsQueryLimitMax)\n    .default(listDmcaClaimsQueryLimitDefault),\n});\n\nexport const ListDmcaClaimsResponse = zod.object({\n  total: zod.number(),\n  page: zod.number(),\n  limit: zod.number(),\n  items: zod.array(\n    zod.object({\n      id: zod.number(),\n      claimantName: zod.string(),\n      claimantEmail: zod.string(),\n      contentUrl: zod.string(),\n      description: zod.string(),\n      status: zod.string(),\n      reviewNote: zod.string().nullable(),\n      reviewedAt: zod.string().nullable(),\n      submittedAt: zod.string().nullable(),\n    }),\n  ),\n});\n\n/**\n * Updates the status of a DMCA claim. Requires admin role.\n * @summary Update DMCA claim status (admin only)\n */\nexport const UpdateDmcaClaimStatusParams = zod.object({\n  id: zod.coerce.number(),\n});\n\nexport const UpdateDmcaClaimStatusBody = zod.object({\n  status: zod.enum([\"pending\", \"reviewing\", \"resolved\", \"rejected\"]),\n});\n\nexport const UpdateDmcaClaimStatusResponse = zod.object({\n  success: zod.boolean(),\n  id: zod.number(),\n  status: zod.string(),\n});\n\n/**\n * Reports a piece of content. Requires Clerk authentication. Rate-limited to 10 per hour per user. Duplicate reports (same reporter + content) return 409.\n * @summary Submit a content report\n */\nexport const submitReportBodyContentTypeDefault = `video`;\n\nexport const SubmitReportBody = zod.object({\n  contentId: zod.string().describe(\"ID of the content being reported\"),\n  contentType: zod\n    .enum([\"video\", \"comment\"])\n    .default(submitReportBodyContentTypeDefault),\n  category: zod.enum([\n    \"illegal_activity\",\n    \"animal_cruelty\",\n    \"copyright_infringement\",\n    \"spam\",\n  ]),\n  description: zod\n    .string()\n    .nullish()\n    .describe(\"Optional additional context (max 500 chars)\"),\n});\n\nexport const SubmitReportResponse = zod.object({\n  success: zod.boolean(),\n});\n\n/**\n * Returns content grouped by contentId with report counts, unique reporter counts, top category, and current visibility status. Requires moderator or admin role.\n * @summary List grouped community reports (moderator+)\n */\nexport const ListAdminReportsQueryParams = zod.object({\n  contentType: zod.enum([\"video\", \"comment\"]).optional(),\n});\n\nexport const ListAdminReportsResponse = zod.object({\n  items: zod.array(\n    zod.object({\n      contentId: zod.string(),\n      contentType: zod.string(),\n      totalReports: zod.number(),\n      uniqueReporters: zod.number(),\n      topCategory: zod.string(),\n      firstReportAt: zod.coerce.date(),\n      visibility: zod.enum([\"visible\", \"hidden\", \"removed\"]),\n      hiddenAt: zod.coerce.date().nullable(),\n    }),\n  ),\n});\n\n/**\n * Sets content visibility back to visible. Requires moderator or admin role.\n * @summary Restore hidden content (moderator+)\n */\nexport const RestoreReportedContentParams = zod.object({\n  contentId: zod.coerce.string(),\n});\n\nexport const restoreReportedContentQueryContentTypeDefault = `video`;\n\nexport const RestoreReportedContentQueryParams = zod.object({\n  contentType: zod\n    .enum([\"video\", \"comment\"])\n    .default(restoreReportedContentQueryContentTypeDefault),\n});\n\nexport const RestoreReportedContentResponse = zod.object({\n  success: zod.boolean(),\n  contentId: zod.string(),\n  visibility: zod.enum([\"visible\", \"hidden\", \"removed\"]),\n});\n\n/**\n * Sets content visibility to removed. Requires moderator or admin role.\n * @summary Permanently remove content (moderator+)\n */\nexport const RemoveReportedContentParams = zod.object({\n  contentId: zod.coerce.string(),\n});\n\nexport const removeReportedContentQueryContentTypeDefault = `video`;\n\nexport const RemoveReportedContentQueryParams = zod.object({\n  contentType: zod\n    .enum([\"video\", \"comment\"])\n    .default(removeReportedContentQueryContentTypeDefault),\n});\n\nexport const RemoveReportedContentResponse = zod.object({\n  success: zod.boolean(),\n  contentId: zod.string(),\n  visibility: zod.enum([\"visible\", \"hidden\", \"removed\"]),\n});\n\n/**\n * Submits a DMCA claim. Rate-limited to 5 requests per hour per IP.\n * @summary Submit a DMCA takedown claim\n */\nexport const SubmitDmcaClaimBody = zod.object({\n  claimantName: zod.string(),\n  claimantEmail: zod.string().email(),\n  contentUrl: zod.string().url(),\n  description: zod.string(),\n});\n\nexport const SubmitDmcaClaimResponse = zod.object({\n  success: zod.boolean(),\n  claimId: zod.number(),\n});\n\n/**\n * Returns static database species first, then iNaturalist results for unlimited live search with pagination.\n * @summary Paginated species search\n */\nexport const searchSpeciesQueryPageDefault = 1;\n\nexport const searchSpeciesQueryPerPageDefault = 20;\nexport const searchSpeciesQueryPerPageMax = 30;\n\nexport const SearchSpeciesQueryParams = zod.object({\n  q: zod.coerce.string().optional().describe(\"Search query string\"),\n  category: zod\n    .enum([\n      \"all\",\n      \"big-game\",\n      \"waterfowl\",\n      \"freshwater\",\n      \"saltwater\",\n      \"small-game\",\n    ])\n    .optional()\n    .describe(\"Filter by category\"),\n  page: zod.coerce\n    .number()\n    .min(1)\n    .default(searchSpeciesQueryPageDefault)\n    .describe(\"Page number (1-indexed)\"),\n  per_page: zod.coerce\n    .number()\n    .max(searchSpeciesQueryPerPageMax)\n    .default(searchSpeciesQueryPerPageDefault)\n    .describe(\"Results per page (max 30)\"),\n});\n\nexport const SearchSpeciesResponse = zod.object({\n  page: zod.number(),\n  per_page: zod.number(),\n  hasMore: zod.boolean(),\n  species: zod.array(\n    zod.object({\n      id: zod.string(),\n      name: zod.string(),\n      scientificName: zod.string(),\n      category: zod.enum([\n        \"big-game\",\n        \"waterfowl\",\n        \"freshwater\",\n        \"saltwater\",\n        \"small-game\",\n      ]),\n      imageKey: zod.string(),\n      photoUrl: zod.string(),\n      difficulty: zod.enum([\"beginner\", \"intermediate\", \"expert\"]),\n      description: zod.string(),\n      habitat: zod.string(),\n      range: zod.string(),\n      locations: zod.array(zod.string()),\n      season: zod.string(),\n      bestTimes: zod.string(),\n      behavior: zod.string(),\n      bestBait: zod.array(zod.string()),\n      techniques: zod.array(zod.string()),\n      feedingSchedule: zod.string(),\n      sizeRange: zod.string(),\n      recordWeight: zod.string(),\n      tags: zod.array(zod.string()),\n    }),\n  ),\n});\n\n/**\n * SSRF-protected proxy to the Wikipedia REST API. Returns plain-text extract and optional thumbnail URL. Cached 1 hour.\n * @summary Wikipedia summary proxy\n */\nexport const GetWikiSummaryQueryParams = zod.object({\n  title: zod.coerce\n    .string()\n    .describe(\"Wikipedia article title (scientific name or common name)\"),\n});\n\nexport const GetWikiSummaryResponse = zod.object({\n  extract: zod.string().describe(\"Plain-text Wikipedia article extract\"),\n  thumbnail: zod\n    .string()\n    .nullish()\n    .describe(\"Direct URL to article thumbnail image\"),\n});\n\n/**\n * Returns which platforms are currently connected for the authenticated user\n * @summary Get connected social accounts status\n */\nexport const GetSocialStatusResponse = zod.object({\n  youtube: zod.boolean(),\n  facebook: zod.boolean(),\n  instagram: zod.boolean(),\n  tiktok: zod.boolean(),\n  youtubeChannelId: zod.string().nullish(),\n  youtubeChannelName: zod.string().nullish(),\n  youtubeChannelAvatar: zod.string().nullish(),\n  tiktokUsername: zod.string().nullish(),\n  tiktokAvatar: zod.string().nullish(),\n});\n\n/**\n * Generates a Google OAuth URL with a CSRF state token for the YouTube connection flow\n * @summary Get YouTube OAuth URL\n */\nexport const GetSocialConnectYoutubeResponse = zod.object({\n  url: zod.string().describe(\"Google OAuth authorization URL\"),\n  redirectUri: zod.string().describe(\"The redirect URI registered with Google\"),\n});\n\n/**\n * Handles Google OAuth callback, stores tokens, and redirects to deep link\n * @summary YouTube OAuth callback\n */\nexport const SocialCallbackYoutubeQueryParams = zod.object({\n  code: zod.coerce.string().optional(),\n  state: zod.coerce.string().optional(),\n  error: zod.coerce.string().optional(),\n});\n\n/**\n * Revokes the stored OAuth token and removes the YouTube connection\n * @summary Disconnect YouTube account\n */\nexport const DisconnectYoutubeResponse = zod.object({\n  success: zod.boolean(),\n});\n\n/**\n * Generates a TikTok OAuth URL with a CSRF state token for the TikTok connection flow\n * @summary Get TikTok OAuth URL\n */\nexport const GetSocialConnectTiktokResponse = zod.object({\n  url: zod.string().describe(\"Google OAuth authorization URL\"),\n  redirectUri: zod.string().describe(\"The redirect URI registered with Google\"),\n});\n\n/**\n * Handles TikTok OAuth callback, stores tokens, and redirects to deep link\n * @summary TikTok OAuth callback\n */\nexport const SocialCallbackTiktokQueryParams = zod.object({\n  code: zod.coerce.string().optional(),\n  state: zod.coerce.string().optional(),\n  error: zod.coerce.string().optional(),\n});\n\n/**\n * Revokes the stored OAuth token and removes the TikTok connection\n * @summary Disconnect TikTok account\n */\nexport const DisconnectTiktokResponse = zod.object({\n  success: zod.boolean(),\n});\n\n/**\n * Returns a paginated list of the authenticated user's own TikTok uploads\n * @summary List user's TikTok videos\n */\nexport const GetTiktokVideosQueryParams = zod.object({\n  cursor: zod.coerce\n    .number()\n    .optional()\n    .describe(\"Cursor for pagination (0 for first page)\"),\n});\n\nexport const GetTiktokVideosResponse = zod.object({\n  videos: zod.array(\n    zod.object({\n      id: zod.string(),\n      title: zod.string(),\n      thumbnail: zod.string(),\n      duration: zod.number().describe(\"Duration in seconds\"),\n      createTime: zod.number().describe(\"Unix timestamp of creation\"),\n      embedLink: zod.string(),\n    }),\n  ),\n  cursor: zod.number(),\n  hasMore: zod.boolean(),\n});\n\n/**\n * Returns a paginated list of the authenticated user's own YouTube uploads\n * @summary List user's YouTube videos\n */\nexport const GetYoutubeVideosQueryParams = zod.object({\n  pageToken: zod.coerce\n    .string()\n    .optional()\n    .describe(\"Pagination token from a previous response\"),\n});\n\nexport const GetYoutubeVideosResponse = zod.object({\n  videos: zod.array(\n    zod.object({\n      videoId: zod.string(),\n      title: zod.string(),\n      thumbnail: zod.string(),\n      duration: zod\n        .string()\n        .describe(\"ISO 8601 duration string (e.g. PT4M13S)\"),\n      publishedAt: zod.coerce.date(),\n      url: zod.string(),\n    }),\n  ),\n  nextPageToken: zod.string().nullish(),\n});\n\n/**\n * Returns the most-imported YouTube videos across all community members, ordered by import count descending. No authentication required.\n * @summary Get trending YouTube imports\n */\nexport const getYoutubeTrendingQueryLimitDefault = 10;\nexport const getYoutubeTrendingQueryLimitMax = 50;\n\nexport const GetYoutubeTrendingQueryParams = zod.object({\n  limit: zod.coerce\n    .number()\n    .min(1)\n    .max(getYoutubeTrendingQueryLimitMax)\n    .default(getYoutubeTrendingQueryLimitDefault)\n    .describe(\"Maximum number of results to return (1\u201350, default 10)\"),\n});\n\nexport const GetYoutubeTrendingResponse = zod.object({\n  trending: zod.array(\n    zod.object({\n      videoId: zod.string(),\n      title: zod.string().nullish(),\n      thumbnailUrl: zod.string().nullish(),\n      importCount: zod\n        .number()\n        .describe(\n          \"Number of distinct community members who have imported this video\",\n        ),\n    }),\n  ),\n});\n\n/**\n * Returns the set of YouTube videoIds the authenticated user has already imported\n * @summary Get YouTube import history\n */\nexport const GetYoutubeImportsResponse = zod.object({\n  imports: zod.array(\n    zod.object({\n      videoId: zod.string(),\n      title: zod.string().nullish(),\n      thumbnailUrl: zod.string().nullish(),\n      importedAt: zod.coerce.date(),\n    }),\n  ),\n  videoIds: zod.array(zod.string()),\n});\n\n/**\n * Saves a YouTube videoId to the authenticated user's import history so it can be flagged in the browse UI\n * @summary Record a YouTube video import\n */\nexport const RecordYoutubeImportBody = zod.object({\n  videoId: zod.string().describe(\"YouTube video ID to record as imported\"),\n  title: zod.string().optional().describe(\"Optional video title for reference\"),\n  thumbnailUrl: zod\n    .string()\n    .optional()\n    .describe(\"Optional thumbnail URL for reference\"),\n});\n\nexport const RecordYoutubeImportResponse = zod.object({\n  success: zod.boolean(),\n});\n\n/**\n * Removes the specified YouTube video from the authenticated user's import history, allowing it to be re-imported cleanly\n * @summary Delete a YouTube import record\n */\nexport const DeleteYoutubeImportParams = zod.object({\n  videoId: zod.coerce.string(),\n});\n\nexport const DeleteYoutubeImportResponse = zod.object({\n  success: zod.boolean(),\n});\n\n/**\n * Clerk-gated. Returns up to 100 of the authenticated user's own videos,\nordered by pinnedAt DESC NULLS LAST, then createdAt DESC (pinned videos\nappear first). Each video is enriched with a community importCount for\nYouTube-linked clips.\n\n * @summary List authenticated user's own uploaded videos\n */\nexport const GetUserFeedVideosResponse = zod.object({\n  videos: zod\n    .array(\n      zod\n        .object({\n          id: zod.number(),\n          userId: zod.string(),\n          title: zod.string(),\n          creator: zod.string(),\n          creatorHandle: zod.string(),\n          videoUrl: zod.string(),\n          thumbnailUrl: zod.string().nullish(),\n          thumbnailKey: zod.string(),\n          species: zod.string().nullish(),\n          locationState: zod.string().nullish(),\n          locationCountry: zod.string().nullish(),\n          weightSize: zod.string().nullish(),\n          category: zod.enum([\"hooks\", \"shots\", \"both\"]),\n          description: zod.string().nullish(),\n          uploadSessionId: zod.string().nullish(),\n          pinnedAt: zod.coerce\n            .date()\n            .nullish()\n            .describe(\n              \"ISO timestamp of when the video was pinned, or null if not pinned\",\n            ),\n          createdAt: zod.coerce.date(),\n          importCount: zod\n            .number()\n            .optional()\n            .describe(\n              \"Number of other community members who have imported this video (YouTube-linked clips only). Present in GET \\/feed\\/user responses; not returned by PATCH \\/feed\\/{id}.\",\n            ),\n        })\n        .describe(\"A user-uploaded video persisted to the feed\"),\n    )\n    .describe(\n      \"User's own videos sorted by pinnedAt DESC NULLS LAST, then createdAt DESC\",\n    ),\n});\n\n/**\n * Clerk-gated (owner only). Updates any combination of title, species,\ndescription, category, locationState, weightSize, and pinned. Setting\npinned to true sets pinnedAt to now; false clears it.\n\n * @summary Edit a user's own video metadata or pin status\n */\nexport const PatchFeedVideoParams = zod.object({\n  id: zod.coerce.number(),\n});\n\nexport const patchFeedVideoBodyTitleMax = 200;\n\nexport const patchFeedVideoBodySpeciesMax = 100;\n\nexport const patchFeedVideoBodyDescriptionMax = 1000;\n\nexport const patchFeedVideoBodyLocationStateMax = 100;\n\nexport const patchFeedVideoBodyWeightSizeMax = 100;\n\nexport const PatchFeedVideoBody = zod\n  .object({\n    title: zod.string().max(patchFeedVideoBodyTitleMax).optional(),\n    species: zod.string().max(patchFeedVideoBodySpeciesMax).nullish(),\n    description: zod.string().max(patchFeedVideoBodyDescriptionMax).nullish(),\n    category: zod.enum([\"hooks\", \"shots\", \"both\"]).optional(),\n    pinned: zod\n      .boolean()\n      .optional()\n      .describe(\n        \"Set to true to pin the video (sets pinnedAt to now); false to unpin (clears pinnedAt)\",\n      ),\n    locationState: zod\n      .string()\n      .max(patchFeedVideoBodyLocationStateMax)\n      .nullish(),\n    weightSize: zod.string().max(patchFeedVideoBodyWeightSizeMax).nullish(),\n  })\n  .describe(\n    \"Fields to update on a user video. At least one field must be provided.\",\n  );\n\nexport const PatchFeedVideoResponse = zod.object({\n  video: zod\n    .object({\n      id: zod.number(),\n      userId: zod.string(),\n      title: zod.string(),\n      creator: zod.string(),\n      creatorHandle: zod.string(),\n      videoUrl: zod.string(),\n      thumbnailUrl: zod.string().nullish(),\n      thumbnailKey: zod.string(),\n      species: zod.string().nullish(),\n      locationState: zod.string().nullish(),\n      locationCountry: zod.string().nullish(),\n      weightSize: zod.string().nullish(),\n      category: zod.enum([\"hooks\", \"shots\", \"both\"]),\n      description: zod.string().nullish(),\n      uploadSessionId: zod.string().nullish(),\n      pinnedAt: zod.coerce\n        .date()\n        .nullish()\n        .describe(\n          \"ISO timestamp of when the video was pinned, or null if not pinned\",\n        ),\n      createdAt: zod.coerce.date(),\n      importCount: zod\n        .number()\n        .optional()\n        .describe(\n          \"Number of other community members who have imported this video (YouTube-linked clips only). Present in GET \\/feed\\/user responses; not returned by PATCH \\/feed\\/{id}.\",\n        ),\n    })\n    .describe(\"A user-uploaded video persisted to the feed\"),\n});\n\n/**\n * Clerk-gated (owner only). Removes the video record permanently.\n * @summary Delete a user's own uploaded video\n */\nexport const DeleteFeedVideoParams = zod.object({\n  id: zod.coerce.number(),\n});\n\nexport const DeleteFeedVideoResponse = zod.object({\n  deleted: zod.boolean(),\n  id: zod.number(),\n});\n\n/**\n * Clerk-gated (any authenticated user). Accepts item details; seller name is\nderived from the authenticated user's Clerk profile. The new listing lands\nin the admin pending queue with status \"pending\".\nRate limited: 10 listings per hour per user.\n\n * @summary Submit a used-gear listing for review\n */\nexport const submitListingBodyNameMax = 100;\n\nexport const submitListingBodyLocationMax = 80;\n\nexport const SubmitListingBody = zod.object({\n  name: zod\n    .string()\n    .min(1)\n    .max(submitListingBodyNameMax)\n    .describe(\"Item name\\/title\"),\n  price: zod.number().min(1).describe(\"Asking price in USD (positive integer)\"),\n  condition: zod.enum([\"Excellent\", \"Good\", \"Fair\"]),\n  category: zod.enum([\"hunting\", \"fishing\"]),\n  location: zod\n    .string()\n    .min(1)\n    .max(submitListingBodyLocationMax)\n    .describe(\"City, State or general location\"),\n});\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\n\nconst router: IRouter = Router();\n\n// Returns the current user (resolved by authMiddleware from the Supabase access\n// token), including the DB-sourced role/banned flags. Works for both cookie\n// (web) and Bearer (native) callers.\nrouter.get(\"/auth/user\", (req: Request, res: Response) => {\n  if (req.isAuthenticated()) {\n    res.json({ user: req.user });\n  } else {\n    res.json({ user: null });\n  }\n});\n\n// Public Supabase client config. Clients normally read these from their own\n// build-time env (EXPO_PUBLIC_* / VITE_*); this endpoint is a runtime fallback.\n// The anon key is safe to expose by design.\nrouter.get(\"/auth/config\", (_req: Request, res: Response) => {\n  res.json({\n    supabaseUrl: process.env.SUPABASE_URL ?? \"\",\n    supabaseAnonKey: process.env.SUPABASE_ANON_KEY ?? \"\",\n  });\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { getSessionUser } from \"../lib/authMiddleware\";\nimport { geminiVisionJson } from \"../lib/ai\";\n\nconst router: IRouter = Router();\n\nconst SPECIES_SYSTEM_PROMPT = `You are an expert wildlife biologist and ichthyologist for North American game species. You analyze photos of game animals (deer, elk, turkey, bear, hog, etc.) and freshwater/saltwater fish (bass, trout, walleye, redfish, etc.) and identify the species.\n\nRespond with STRICT JSON in this exact shape (no markdown, no commentary, no code fences):\n{\n  \"kind\": \"fish\" | \"game\" | \"unknown\",\n  \"primary\": {\n    \"common_name\": string,\n    \"scientific_name\": string,\n    \"confidence\": number  // 0-100\n  },\n  \"alternatives\": [\n    { \"common_name\": string, \"scientific_name\": string, \"confidence\": number }\n  ],\n  \"estimate\": {\n    \"size_inches\": number | null,\n    \"weight_lbs\": number | null,\n    \"notes\": string\n  },\n  \"trophy_class\": \"juvenile\" | \"average\" | \"mature\" | \"trophy\" | \"unknown\",\n  \"tips\": string  // 1-2 sentence field tip about this species\n}\n\nIf the image is not a fish or game animal, return kind=\"unknown\" with primary.confidence=0 and tips=\"No game or fish detected in this image.\"`;\n\nconst ALLOWED_IMAGE_MIMES = new Set([\n  \"image/jpeg\",\n  \"image/png\",\n  \"image/gif\",\n  \"image/webp\",\n]);\n\nconst MAX_IMAGE_BYTES = 5_000_000;\nconst MAX_BASE64_CHARS = Math.ceil((MAX_IMAGE_BYTES * 4) / 3);\n\nrouter.post(\"/identify-species\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    return res.status(401).json({ error: \"Unauthorized\" });\n  }\n\n  const { imageBase64, mimeType } = req.body ?? {};\n  if (typeof imageBase64 !== \"string\" || imageBase64.length < 100) {\n    return res.status(400).json({ error: \"imageBase64 is required\" });\n  }\n\n  if (imageBase64.length > MAX_BASE64_CHARS) {\n    return res.status(413).json({ error: \"Image too large\" });\n  }\n\n  const resolvedMime =\n    typeof mimeType === \"string\" ? mimeType.split(\";\")[0]?.trim() : \"\";\n  if (!resolvedMime || !ALLOWED_IMAGE_MIMES.has(resolvedMime)) {\n    return res.status(400).json({ error: \"Unsupported image type. Use JPEG, PNG, GIF, or WebP.\" });\n  }\n\n  try {\n    const raw = await geminiVisionJson({\n      systemInstruction: SPECIES_SYSTEM_PROMPT,\n      userText:\n        \"Identify the species shown in this photo. Respond with strict JSON only.\",\n      imageBase64,\n      mimeType: resolvedMime,\n      maxOutputTokens: 1024,\n    });\n    let parsed: unknown;\n    try {\n      parsed = JSON.parse(raw);\n    } catch {\n      req.log?.warn({ raw }, \"Failed to parse species JSON\");\n      parsed = {\n        kind: \"unknown\",\n        primary: { common_name: \"Unknown\", scientific_name: \"\", confidence: 0 },\n        alternatives: [],\n        estimate: { size_inches: null, weight_lbs: null, notes: \"\" },\n        trophy_class: \"unknown\",\n        tips: \"Could not analyze image. Try a clearer photo with the full animal in frame.\",\n      };\n    }\n    return res.json(parsed);\n  } catch (err) {\n    req.log?.error({ err }, \"Species identification failed\");\n    return res\n      .status(500)\n      .json({ error: \"Species identification failed. Try again.\" });\n  }\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response, type NextFunction } from \"express\";\nimport { getSessionUser, requireAdmin, requireModerator } from \"../lib/authMiddleware\";\nimport { db, adminContentTable, adminCacheTable } from \"@workspace/db\";\nimport { user as authUserTable } from \"@workspace/db/schema\";\nimport {\n  gearCatalogTable,\n  usedListingsTable,\n  moderationFlagsTable,\n  outfittersTable,\n  contentVisibilityTable,\n  seedResetLogTable,\n  feedCommentsTable,\n  quotaDailyLogTable,\n} from \"@workspace/db/schema\";\nimport { userAgreementsTable, dmcaClaimsTable } from \"@workspace/db/schema\";\nimport { userVideosTable, contentAppealsTable } from \"@workspace/db/schema\";\nimport { feedLikesTable } from \"@workspace/db/schema\";\nimport { count, desc, eq, asc, sql, inArray, ne, and, gte } from \"drizzle-orm\";\nimport { runSeedReset } from \"../data/seed\";\nimport { getYouTubeQuotaStatus, setCapOverride } from \"../jobs/feedRefreshJob\";\nimport {\n  sendOutfitterApprovalEmail,\n  sendOutfitterRejectionEmail,\n} from \"../lib/email.js\";\nimport { getSupabaseAdmin } from \"../lib/supabase\";\nimport type { User as SupabaseUser } from \"@supabase/supabase-js\";\nimport { ensurePublicUserForAuthUser, syncMissingAuthUsers } from \"../lib/syncAuthUsers\";\nimport {\n  countVideosByPlatform,\n  getFeedPlatformSettings,\n  saveFeedPlatformSettings,\n  type FeedPlatformKey,\n} from \"../lib/feedPlatformSettings.js\";\nimport gearAdminRouter from \"./gearAdmin\";\nimport analyticsAdminRouter from \"./analyticsAdmin\";\nimport {\n  buildExistingUrlKeyMap,\n  duplicateKeyForUrl,\n  filterDuplicateUrls,\n  findExistingVideoByUrl,\n} from \"../lib/videoDuplicateGuard\";\nimport { inferVideoFormatForUpload, inferVideoLayout } from \"@workspace/video-layout\";\nimport {\n  isPlayableFeedUrl,\n  resolveFeedPlaybackUrl,\n  isNativePlaybackUrl,\n} from \"../lib/playback/feedPlayback.js\";\nimport { isInstagramCdnMp4 } from \"../lib/ingestion/instagramPlayback.js\";\nimport { isTikTokCdnUrl } from \"../lib/playback/tiktokPlayback.js\";\n\nconst router: IRouter = Router();\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// CSRF protection \u2014 require explicit JSON Content-Type for all mutations.\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction requireJsonContentType(req: Request, res: Response, next: NextFunction): void {\n  if ([\"POST\", \"PUT\", \"PATCH\"].includes(req.method)) {\n    const ct = req.headers[\"content-type\"] ?? \"\";\n    if (!ct.includes(\"application/json\")) {\n      res.status(415).json({ error: \"Content-Type must be application/json\" });\n      return;\n    }\n  }\n  next();\n}\n\nrouter.use(requireJsonContentType);\n\nconst VALID_ROLES = [\"admin\", \"moderator\", \"beta_tester\", \"user\"] as const;\ntype ValidRole = (typeof VALID_ROLES)[number];\nconst VALID_CONTENT_TYPES = [\"tag\", \"url\", \"video\"] as const;\n\n// Helper to get current admin user from session\nfunction getAdminUser(req: Request): { userId: string; role: string } | null {\n  const u = getSessionUser(req);\n  if (!u?.userId) return null;\n  return { userId: u.userId, role: u.role ?? \"user\" };\n}\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// USERS \u2014 admin only\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/users\", requireAdmin, async (req: Request, res: Response) => {\n  try {\n    const limit = Math.min(Number(req.query[\"limit\"] ?? 200), 200);\n    const offset = Number(req.query[\"offset\"] ?? 0);\n    const search = (req.query[\"search\"] as string | undefined)?.trim().toLowerCase();\n    const roleFilter = req.query[\"role\"] as string | undefined;\n    const bannedFilter = req.query[\"banned\"] as string | undefined;\n\n    try {\n      await syncMissingAuthUsers();\n    } catch (syncErr) {\n      req.log?.warn({ syncErr }, \"Admin: auth-user sync skipped\");\n    }\n\n    const allDbUsers = await db.select().from(authUserTable).limit(500).offset(0);\n    let users = allDbUsers.map((u) => ({\n      id: u.id,\n      email: u.email,\n      firstName: u.name?.split(\" \")[0] ?? null,\n      lastName: u.name?.split(\" \").slice(1).join(\" \") || null,\n      role: u.role ?? \"user\",\n      createdAt: u.createdAt.getTime(),\n      banned: u.banned ?? false,\n    }));\n\n    if (search) {\n      users = users.filter((u) =>\n        u.email.toLowerCase().includes(search) ||\n        (u.firstName?.toLowerCase().includes(search) ?? false) ||\n        (u.lastName?.toLowerCase().includes(search) ?? false),\n      );\n    }\n    if (roleFilter && roleFilter !== \"all\") {\n      users = users.filter((u) => u.role === roleFilter);\n    }\n    if (bannedFilter === \"true\") {\n      users = users.filter((u) => u.banned);\n    } else if (bannedFilter === \"false\") {\n      users = users.filter((u) => !u.banned);\n    }\n\n    res.json(users.slice(offset, offset + limit));\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to list users\");\n    res.status(500).json({ error: \"Failed to list users\" });\n  }\n});\n\nrouter.post(\"/users/invite\", requireAdmin, async (req: Request, res: Response) => {\n  const { emailAddress, role } = (req.body ?? {}) as { emailAddress?: string; role?: string };\n  if (!emailAddress || !emailAddress.includes(\"@\")) {\n    res.status(400).json({ error: \"Valid emailAddress required\" });\n    return;\n  }\n  const finalRole: ValidRole = (VALID_ROLES as readonly string[]).includes(role ?? \"\")\n    ? (role as ValidRole)\n    : \"user\";\n  try {\n    // Try to create the Supabase Auth user (sends the invite email when SMTP is\n    // configured). If that fails (e.g. no SMTP locally), fall back to a\n    // local-only record that links up once the person signs up with this email.\n    let authUser: SupabaseUser | null = null;\n    try {\n      const { data, error } = await getSupabaseAdmin().auth.admin.inviteUserByEmail(emailAddress);\n      if (!error && data?.user) authUser = data.user;\n      else if (error?.message?.toLowerCase().includes(\"already\")) {\n        const { data: listed } = await getSupabaseAdmin().auth.admin.listUsers();\n        authUser =\n          listed.users.find(\n            (u: SupabaseUser) => u.email?.toLowerCase() === emailAddress.trim().toLowerCase(),\n          ) ?? null;\n        if (!authUser) req.log?.warn({ error }, \"Admin: auth user exists but lookup failed\");\n      } else {\n        req.log?.warn({ error }, \"Admin: Supabase invite failed; creating local-only record\");\n      }\n    } catch (e) {\n      req.log?.warn({ e }, \"Admin: Supabase invite threw; creating local-only record\");\n    }\n\n    let userId = authUser?.id;\n    if (!userId) {\n      const { randomUUID } = await import(\"crypto\");\n      userId = randomUUID();\n    }\n\n    const [existingByEmail] = await db\n      .select()\n      .from(authUserTable)\n      .where(eq(authUserTable.email, emailAddress.trim()))\n      .limit(1);\n\n    if (existingByEmail) {\n      if (finalRole !== \"user\" && existingByEmail.role !== finalRole) {\n        await db\n          .update(authUserTable)\n          .set({ role: finalRole, updatedAt: new Date() })\n          .where(eq(authUserTable.id, existingByEmail.id));\n      }\n      if (authUser) {\n        await ensurePublicUserForAuthUser(authUser, finalRole);\n      }\n      res.json({ success: true, userId: existingByEmail.id, alreadyExists: true });\n      return;\n    }\n\n    const [created] = await db.insert(authUserTable).values({\n      id: userId,\n      name: emailAddress.split(\"@\")[0] ?? emailAddress,\n      email: emailAddress,\n      emailVerified: !!authUser?.email_confirmed_at,\n      role: finalRole,\n      banned: false,\n    }).onConflictDoNothing().returning();\n    if (!created) {\n      res.status(400).json({ error: \"A user with that email already exists\" });\n      return;\n    }\n    if (authUser) {\n      await ensurePublicUserForAuthUser(authUser, finalRole);\n    }\n    res.json({ success: true, userId: created.id });\n  } catch (err: any) {\n    req.log?.error({ err }, \"Admin: failed to invite user\");\n    const message = err?.message ?? \"Failed to create user\";\n    res.status(400).json({ error: message });\n  }\n});\n\nrouter.post(\"/users/create\", requireAdmin, async (req: Request, res: Response) => {\n  const { emailAddress, password, role, firstName, lastName } = (req.body ?? {}) as {\n    emailAddress?: string;\n    password?: string;\n    role?: string;\n    firstName?: string;\n    lastName?: string;\n  };\n  if (!emailAddress || !emailAddress.includes(\"@\")) {\n    res.status(400).json({ error: \"Valid emailAddress required\" });\n    return;\n  }\n  const finalRole: ValidRole = (VALID_ROLES as readonly string[]).includes(role ?? \"\")\n    ? (role as ValidRole)\n    : \"user\";\n  try {\n    const name = [firstName, lastName].filter(Boolean).join(\" \") || emailAddress.split(\"@\")[0] || emailAddress;\n\n    // Create the real Supabase Auth user so the account can sign in. Email is\n    // pre-confirmed since an admin is provisioning it directly.\n    const { data, error } = await getSupabaseAdmin().auth.admin.createUser({\n      email: emailAddress,\n      password: password || undefined,\n      email_confirm: true,\n      user_metadata: { full_name: name, first_name: firstName ?? null, last_name: lastName ?? null },\n    });\n    if (error || !data.user) {\n      res.status(400).json({ error: error?.message ?? \"Failed to create auth user\" });\n      return;\n    }\n\n    const [created] = await db.insert(authUserTable).values({\n      id: data.user.id,\n      name,\n      email: emailAddress,\n      emailVerified: true,\n      role: finalRole,\n      banned: false,\n    }).onConflictDoUpdate({\n      target: authUserTable.id,\n      set: { name, email: emailAddress, role: finalRole, emailVerified: true },\n    }).returning();\n    res.json({ success: true, userId: created?.id ?? data.user.id });\n  } catch (err: any) {\n    req.log?.error({ err }, \"Admin: failed to create user\");\n    const message = err?.message ?? \"Failed to create user\";\n    res.status(400).json({ error: message });\n  }\n});\n\nrouter.patch(\"/users/:id/role\", requireAdmin, async (req: Request, res: Response) => {\n  const userId = req.params[\"id\"] as string;\n  const { role } = req.body ?? {};\n  if (!role || !VALID_ROLES.includes(role)) {\n    res.status(400).json({ error: `role must be one of: ${VALID_ROLES.join(\", \")}` });\n    return;\n  }\n  try {\n    await db.update(authUserTable).set({ role }).where(eq(authUserTable.id, userId));\n    res.json({ success: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to update role\");\n    res.status(500).json({ error: \"Failed to update role\" });\n  }\n});\n\nrouter.patch(\"/users/:id/ban\", requireAdmin, async (req: Request, res: Response) => {\n  const userId = req.params[\"id\"] as string;\n  const { banned } = req.body ?? {};\n  try {\n    await db.update(authUserTable).set({ banned: Boolean(banned) }).where(eq(authUserTable.id, userId));\n    res.json({ success: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to update ban status\");\n    res.status(500).json({ error: \"Failed to update ban status\" });\n  }\n});\n\nrouter.delete(\"/users/:id\", requireAdmin, async (req: Request, res: Response) => {\n  const userId = req.params[\"id\"] as string;\n  try {\n    await db.delete(authUserTable).where(eq(authUserTable.id, userId));\n    // Best-effort: remove the Supabase Auth user too. Legacy rows whose id is\n    // not a Supabase uuid will simply no-op here.\n    try {\n      await getSupabaseAdmin().auth.admin.deleteUser(userId);\n    } catch (e) {\n      req.log?.warn({ e }, \"Admin: Supabase deleteUser failed (non-fatal)\");\n    }\n    res.json({ success: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to delete user\");\n    res.status(500).json({ error: \"Failed to delete user\" });\n  }\n});\n\nrouter.patch(\"/users/:id/profile\", requireAdmin, async (req: Request, res: Response) => {\n  const userId = req.params[\"id\"] as string;\n  const { firstName, lastName, username } = (req.body ?? {}) as {\n    firstName?: string; lastName?: string; username?: string;\n  };\n  try {\n    const nameParts = [firstName, lastName].filter(Boolean);\n    if (nameParts.length > 0) {\n      await db.update(authUserTable).set({ name: nameParts.join(\" \") }).where(eq(authUserTable.id, userId));\n    }\n    res.json({ success: true });\n  } catch (err: any) {\n    req.log?.error({ err }, \"Admin: failed to update user profile\");\n    const message = err?.message ?? \"Failed to update profile\";\n    res.status(400).json({ error: message });\n  }\n});\n\nrouter.get(\"/users/:id/activity\", requireAdmin, async (req: Request, res: Response) => {\n  const userId = req.params[\"id\"] as string;\n  try {\n    const [recentUploads, recentComments, reports, uploadCount, commentCount, reportCount, likeCount] =\n      await Promise.all([\n        db\n          .select({\n            id: userVideosTable.id,\n            title: userVideosTable.title,\n            createdAt: userVideosTable.createdAt,\n          })\n          .from(userVideosTable)\n          .where(eq(userVideosTable.userId, userId))\n          .orderBy(desc(userVideosTable.createdAt))\n          .limit(8),\n        db\n          .select({\n            id: feedCommentsTable.id,\n            text: feedCommentsTable.text,\n            clipId: feedCommentsTable.clipId,\n            createdAt: feedCommentsTable.createdAt,\n          })\n          .from(feedCommentsTable)\n          .where(eq(feedCommentsTable.userId, userId))\n          .orderBy(desc(feedCommentsTable.createdAt))\n          .limit(8),\n        db\n          .select({\n            id: moderationFlagsTable.id,\n            reason: moderationFlagsTable.reason,\n            contentType: moderationFlagsTable.contentType,\n            status: moderationFlagsTable.status,\n            reportedAt: moderationFlagsTable.reportedAt,\n          })\n          .from(moderationFlagsTable)\n          .where(eq(moderationFlagsTable.reportedUser, userId))\n          .orderBy(desc(moderationFlagsTable.reportedAt))\n          .limit(8),\n        db\n          .select({ count: count() })\n          .from(userVideosTable)\n          .where(eq(userVideosTable.userId, userId)),\n        db\n          .select({ count: count() })\n          .from(feedCommentsTable)\n          .where(eq(feedCommentsTable.userId, userId)),\n        db\n          .select({ count: count() })\n          .from(moderationFlagsTable)\n          .where(eq(moderationFlagsTable.reportedUser, userId)),\n        db\n          .select({ count: count() })\n          .from(feedLikesTable)\n          .where(eq(feedLikesTable.userId, userId)),\n      ]);\n\n    res.json({\n      counts: {\n        uploads: uploadCount[0]?.count ?? 0,\n        comments: commentCount[0]?.count ?? 0,\n        reports: reportCount[0]?.count ?? 0,\n        likes: likeCount[0]?.count ?? 0,\n      },\n      recentUploads: recentUploads.map((row) => ({\n        id: row.id,\n        title: row.title,\n        createdAt: row.createdAt.getTime(),\n      })),\n      recentComments: recentComments.map((row) => ({\n        id: row.id,\n        text: row.text,\n        clipId: row.clipId,\n        createdAt: row.createdAt.getTime(),\n      })),\n      reports: reports.map((row) => ({\n        id: row.id,\n        reason: row.reason,\n        contentType: row.contentType,\n        status: row.status,\n        reportedAt: row.reportedAt.getTime(),\n      })),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to load user activity\");\n    res.status(500).json({ error: \"Failed to load user activity\" });\n  }\n});\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// CONTENT \u2014 persisted in PostgreSQL via Drizzle\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/content\", requireModerator, async (_req, res) => {\n  try {\n    const rows = await db\n      .select()\n      .from(adminContentTable)\n      .orderBy(desc(adminContentTable.createdAt));\n\n    // For video-type entries, look up their visibility so we can surface (and\n    // suppress) anything that has been hidden or removed via the reports system.\n    const videoValues = rows.filter((r) => r.type === \"video\").map((r) => r.value);\n    const visibilityMap = new Map<string, string>();\n    if (videoValues.length > 0) {\n      try {\n        const visRows = await db\n          .select({\n            contentId: contentVisibilityTable.contentId,\n            visibility: contentVisibilityTable.visibility,\n          })\n          .from(contentVisibilityTable)\n          .where(\n            and(\n              inArray(contentVisibilityTable.contentId, videoValues),\n              eq(contentVisibilityTable.contentType, \"video\"),\n            ),\n          );\n        for (const v of visRows) {\n          visibilityMap.set(v.contentId, v.visibility);\n        }\n      } catch {\n        // Non-fatal: if the visibility lookup fails, serve all items unfiltered\n        _req.log?.warn(\"Admin: content visibility lookup failed, skipping filter\");\n      }\n    }\n\n    // Admins and moderators need to see all curated entries (including hidden/removed\n    // ones) so they can take corrective action. We surface the visibility status on\n    // each video entry rather than silently dropping non-visible items \u2014 filtering is\n    // the feed's job, not the admin content list's job.\n    res.json(\n      rows.map((r) => ({\n        id: String(r.id),\n        type: r.type,\n        label: r.label,\n        value: r.value,\n        visibility: r.type === \"video\" ? (visibilityMap.get(r.value) ?? \"visible\") : \"visible\",\n        createdAt: r.createdAt.toISOString(),\n      })),\n    );\n  } catch (err) {\n    _req.log?.error({ err }, \"Admin: failed to list content\");\n    res.status(500).json({ error: \"Failed to load content\" });\n  }\n});\n\nrouter.post(\"/content\", requireModerator, async (req, res) => {\n  const { type, label, value } = req.body ?? {};\n  if (!type || !(VALID_CONTENT_TYPES as readonly string[]).includes(type)) {\n    res.status(400).json({ error: \"type must be one of: tag, url, video\" });\n    return;\n  }\n  if (!label?.trim() || !value?.trim()) {\n    res.status(400).json({ error: \"label and value are required\" });\n    return;\n  }\n  try {\n    const [row] = await db\n      .insert(adminContentTable)\n      .values({ type, label: label.trim(), value: value.trim() })\n      .returning();\n    if (!row) {\n      res.status(500).json({ error: \"Insert returned no row\" });\n      return;\n    }\n    res.json({\n      id: String(row.id),\n      type: row.type,\n      label: row.label,\n      value: row.value,\n      createdAt: row.createdAt.toISOString(),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to add content\");\n    res.status(500).json({ error: \"Failed to add content\" });\n  }\n});\n\nrouter.delete(\"/content/:id\", requireModerator, async (req, res) => {\n  const id = Number(req.params[\"id\"]);\n  if (!Number.isFinite(id)) {\n    res.status(400).json({ error: \"Invalid id\" });\n    return;\n  }\n  try {\n    const result = await db\n      .delete(adminContentTable)\n      .where(eq(adminContentTable.id, id))\n      .returning({ id: adminContentTable.id });\n    if (result.length === 0) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n    res.json({ success: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to delete content\");\n    res.status(500).json({ error: \"Failed to delete content\" });\n  }\n});\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// GEAR \u2014 admin only for catalog/featured/reorder; moderator may view\n// Persisted in PostgreSQL via Drizzle.\n// Mount extended Official Gear routes FIRST so /gear/library and /gear/seed\n// are never shadowed by legacy /gear/:id handlers.\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.use(\"/gear\", gearAdminRouter);\nrouter.use(\"/analytics\", analyticsAdminRouter);\n\nrouter.get(\"/gear\", requireModerator, async (req, res) => {\n  try {\n    const rows = await db.select().from(gearCatalogTable).orderBy(asc(gearCatalogTable.position));\n    res.json(rows);\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to list gear\");\n    res.status(500).json({ error: \"Failed to load gear catalog\" });\n  }\n});\n\nrouter.get(\"/gear/featured\", requireModerator, async (req, res) => {\n  try {\n    const rows = await db\n      .select()\n      .from(gearCatalogTable)\n      .where(eq(gearCatalogTable.featured, true))\n      .orderBy(asc(gearCatalogTable.position));\n    res.json(rows);\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to list featured gear\");\n    res.status(500).json({ error: \"Failed to load featured gear\" });\n  }\n});\n\nrouter.patch(\"/gear/:id/featured\", requireAdmin, async (req, res) => {\n  const id = req.params[\"id\"] as string;\n  const { featured } = req.body ?? {};\n  try {\n    const [updated] = await db\n      .update(gearCatalogTable)\n      .set({ featured: Boolean(featured) })\n      .where(eq(gearCatalogTable.id, id))\n      .returning();\n    if (!updated) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n    res.json(updated);\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to update gear featured\");\n    res.status(500).json({ error: \"Failed to update gear\" });\n  }\n});\n\nrouter.patch(\"/gear/reorder\", requireAdmin, async (req, res) => {\n  const { ids } = req.body ?? {};\n  if (!Array.isArray(ids) || !ids.every((x) => typeof x === \"string\")) {\n    res.status(400).json({ error: \"ids must be an array of strings\" });\n    return;\n  }\n  try {\n    const orderedIds = ids as string[];\n    // Assign positions in a transaction: each item in the ordered list gets\n    // its index, then items not in the list are appended after.\n    await db.transaction(async (tx) => {\n      for (let i = 0; i < orderedIds.length; i++) {\n        await tx\n          .update(gearCatalogTable)\n          .set({ position: i })\n          .where(eq(gearCatalogTable.id, orderedIds[i]!));\n      }\n      // Items not mentioned get positions N, N+1, ... based on their prior order.\n      const remaining = await tx\n        .select({ id: gearCatalogTable.id })\n        .from(gearCatalogTable)\n        .where(\n          sql`${gearCatalogTable.id} != ALL(ARRAY[${sql.join(\n            orderedIds.map((id) => sql`${id}`),\n            sql`, `\n          )}]::text[])`\n        )\n        .orderBy(asc(gearCatalogTable.position));\n      for (let i = 0; i < remaining.length; i++) {\n        await tx\n          .update(gearCatalogTable)\n          .set({ position: orderedIds.length + i })\n          .where(eq(gearCatalogTable.id, remaining[i]!.id));\n      }\n    });\n    const rows = await db.select().from(gearCatalogTable).orderBy(asc(gearCatalogTable.position));\n    res.json(rows);\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to reorder gear\");\n    res.status(500).json({ error: \"Failed to reorder gear\" });\n  }\n});\n\nrouter.post(\"/gear\", requireAdmin, async (req, res) => {\n  const { name, brand, category, subcategory, price } = req.body as Record<string, unknown>;\n  if (\n    typeof name !== \"string\" || !name.trim() ||\n    typeof brand !== \"string\" || !brand.trim() ||\n    typeof category !== \"string\" || ![\"hunting\", \"fishing\"].includes(category) ||\n    typeof subcategory !== \"string\" || !subcategory.trim() ||\n    typeof price !== \"number\" || !Number.isFinite(price) || price < 0\n  ) {\n    res.status(400).json({ error: \"Invalid gear data: name, brand, category, subcategory, and price are required\" });\n    return;\n  }\n  try {\n    const maxPos = await db\n      .select({ pos: gearCatalogTable.position })\n      .from(gearCatalogTable)\n      .orderBy(desc(gearCatalogTable.position))\n      .limit(1);\n    const nextPos = maxPos[0] ? maxPos[0].pos + 1 : 0;\n    const [row] = await db\n      .insert(gearCatalogTable)\n      .values({\n        id: crypto.randomUUID(),\n        name: name.trim(),\n        brand: brand.trim(),\n        category: category as \"hunting\" | \"fishing\",\n        subcategory: subcategory.trim(),\n        price: Math.round(price),\n        featured: false,\n        position: nextPos,\n      })\n      .returning();\n    if (!row) {\n      res.status(500).json({ error: \"Insert failed\" });\n      return;\n    }\n    res.status(201).json(row);\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to create gear\");\n    res.status(500).json({ error: \"Failed to create gear entry\" });\n  }\n});\n\nrouter.put(\"/gear/:id\", requireAdmin, async (req, res) => {\n  const id = req.params[\"id\"] as string;\n  const { name, brand, category, subcategory, price } = req.body as Record<string, unknown>;\n  if (\n    typeof name !== \"string\" || !name.trim() ||\n    typeof brand !== \"string\" || !brand.trim() ||\n    typeof category !== \"string\" || ![\"hunting\", \"fishing\"].includes(category) ||\n    typeof subcategory !== \"string\" || !subcategory.trim() ||\n    typeof price !== \"number\" || !Number.isFinite(price) || price < 0\n  ) {\n    res.status(400).json({ error: \"Invalid gear data: name, brand, category, subcategory, and price are required\" });\n    return;\n  }\n  try {\n    const [updated] = await db\n      .update(gearCatalogTable)\n      .set({\n        name: name.trim(),\n        brand: brand.trim(),\n        category: category as \"hunting\" | \"fishing\",\n        subcategory: subcategory.trim(),\n        price: Math.round(price),\n      })\n      .where(eq(gearCatalogTable.id, id))\n      .returning();\n    if (!updated) {\n      res.status(404).json({ error: \"Gear entry not found\" });\n      return;\n    }\n    res.json(updated);\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to update gear\");\n    res.status(500).json({ error: \"Failed to update gear entry\" });\n  }\n});\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// USED-GEAR P2P LISTINGS \u2014 moderator or admin, persisted in PostgreSQL\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/gear/used-listings\", requireModerator, async (req, res) => {\n  try {\n    const rows = await db.select().from(usedListingsTable).orderBy(desc(usedListingsTable.postedAt));\n    res.json(\n      rows.map((r) => ({\n        ...r,\n        postedAt: r.postedAt.toISOString(),\n      })),\n    );\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to list used listings\");\n    res.status(500).json({ error: \"Failed to load used listings\" });\n  }\n});\n\nrouter.patch(\"/gear/used-listings/:id/approve\", requireModerator, async (req, res) => {\n  const id = req.params[\"id\"] as string;\n  try {\n    const [updated] = await db\n      .update(usedListingsTable)\n      .set({ status: \"approved\" })\n      .where(eq(usedListingsTable.id, id))\n      .returning();\n    if (!updated) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n    res.json({ ...updated, postedAt: updated.postedAt.toISOString() });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to approve used listing\");\n    res.status(500).json({ error: \"Failed to approve listing\" });\n  }\n});\n\nrouter.patch(\"/gear/used-listings/:id/reject\", requireModerator, async (req, res) => {\n  const id = req.params[\"id\"] as string;\n  try {\n    const [updated] = await db\n      .update(usedListingsTable)\n      .set({ status: \"rejected\" })\n      .where(eq(usedListingsTable.id, id))\n      .returning();\n    if (!updated) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n    res.json({ ...updated, postedAt: updated.postedAt.toISOString() });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to reject used listing\");\n    res.status(500).json({ error: \"Failed to reject listing\" });\n  }\n});\n\nrouter.post(\"/gear/used-listings\", requireModerator, async (req, res) => {\n  const { name, price, condition, seller, location, category, imageUrls } = req.body as Record<string, unknown>;\n  if (\n    typeof name !== \"string\" || !name.trim() ||\n    typeof price !== \"number\" || !Number.isFinite(price) || price < 0 ||\n    typeof condition !== \"string\" || ![\"Excellent\", \"Good\", \"Fair\"].includes(condition) ||\n    typeof seller !== \"string\" || !seller.trim() ||\n    typeof location !== \"string\" || !location.trim() ||\n    typeof category !== \"string\" || ![\"hunting\", \"fishing\"].includes(category)\n  ) {\n    res.status(400).json({ error: \"Invalid listing data\" });\n    return;\n  }\n  const safeImageUrls: string[] = Array.isArray(imageUrls)\n    ? imageUrls.filter((u): u is string => typeof u === \"string\" && u.length > 0).slice(0, 10)\n    : [];\n  try {\n    const [row] = await db\n      .insert(usedListingsTable)\n      .values({\n        id: crypto.randomUUID(),\n        name: name.trim(),\n        price: Math.round(price),\n        condition: condition as \"Excellent\" | \"Good\" | \"Fair\",\n        seller: seller.trim(),\n        location: location.trim(),\n        category: category as \"hunting\" | \"fishing\",\n        status: \"pending\",\n        postedAt: new Date(),\n        imageUrls: safeImageUrls,\n      })\n      .returning();\n    if (!row) {\n      res.status(500).json({ error: \"Insert failed\" });\n      return;\n    }\n    res.status(201).json({ ...row, postedAt: row.postedAt.toISOString() });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to create used listing\");\n    res.status(500).json({ error: \"Failed to create listing\" });\n  }\n});\n\nrouter.patch(\"/gear/used-listings/:id\", requireModerator, async (req, res) => {\n  const id = req.params[\"id\"] as string;\n  const { name, price, condition, seller, location, category, status, imageUrls } = req.body as Record<string, unknown>;\n  if (\n    typeof name !== \"string\" || !name.trim() ||\n    typeof price !== \"number\" || !Number.isFinite(price) || price < 0 ||\n    typeof condition !== \"string\" || ![\"Excellent\", \"Good\", \"Fair\"].includes(condition) ||\n    typeof seller !== \"string\" || !seller.trim() ||\n    typeof location !== \"string\" || !location.trim() ||\n    typeof category !== \"string\" || ![\"hunting\", \"fishing\"].includes(category)\n  ) {\n    res.status(400).json({ error: \"Invalid listing data\" });\n    return;\n  }\n  if (status !== undefined && (typeof status !== \"string\" || ![\"pending\", \"approved\", \"rejected\"].includes(status))) {\n    res.status(400).json({ error: \"Invalid status value\" });\n    return;\n  }\n  const safeImageUrls: string[] = Array.isArray(imageUrls)\n    ? imageUrls.filter((u): u is string => typeof u === \"string\" && u.length > 0).slice(0, 10)\n    : [];\n  try {\n    const updatePayload: Record<string, unknown> = {\n      name: name.trim(),\n      price: Math.round(price),\n      condition: condition as \"Excellent\" | \"Good\" | \"Fair\",\n      seller: seller.trim(),\n      location: location.trim(),\n      category: category as \"hunting\" | \"fishing\",\n      imageUrls: safeImageUrls,\n    };\n    if (status !== undefined) {\n      updatePayload[\"status\"] = status as \"pending\" | \"approved\" | \"rejected\";\n    }\n    const [updated] = await db\n      .update(usedListingsTable)\n      .set(updatePayload)\n      .where(eq(usedListingsTable.id, id))\n      .returning();\n    if (!updated) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n    res.json({ ...updated, postedAt: updated.postedAt.toISOString() });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to update used listing\");\n    res.status(500).json({ error: \"Failed to update listing\" });\n  }\n});\n\nrouter.delete(\"/gear/used-listings/:id\", requireModerator, async (req, res) => {\n  const id = req.params[\"id\"] as string;\n  try {\n    const result = await db\n      .delete(usedListingsTable)\n      .where(eq(usedListingsTable.id, id))\n      .returning({ id: usedListingsTable.id });\n    if (result.length === 0) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n    res.json({ success: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to delete used listing\");\n    res.status(500).json({ error: \"Failed to delete listing\" });\n  }\n});\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// MODERATION FLAGS \u2014 moderator or admin, persisted in PostgreSQL\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/moderation/flags\", requireModerator, async (req, res) => {\n  try {\n    const rows = await db\n      .select()\n      .from(moderationFlagsTable)\n      .orderBy(desc(moderationFlagsTable.reportedAt));\n    res.json(\n      rows.map((r) => ({\n        id: r.id,\n        contentType: r.contentType,\n        contentPreview: r.contentPreview,\n        reason: r.reason,\n        reporter: r.reporter,\n        reportedUser: r.reportedUser,\n        reportedAt: r.reportedAt.toISOString(),\n        status: r.status,\n      })),\n    );\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to list moderation flags\");\n    res.status(500).json({ error: \"Failed to load moderation flags\" });\n  }\n});\n\nrouter.patch(\"/moderation/flags/:id/approve\", requireModerator, async (req, res) => {\n  const id = req.params[\"id\"] as string;\n  try {\n    const [updated] = await db\n      .update(moderationFlagsTable)\n      .set({ status: \"approved\" })\n      .where(eq(moderationFlagsTable.id, id))\n      .returning();\n    if (!updated) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n    res.json({\n      id: updated.id,\n      contentType: updated.contentType,\n      contentPreview: updated.contentPreview,\n      reason: updated.reason,\n      reporter: updated.reporter,\n      reportedUser: updated.reportedUser,\n      reportedAt: updated.reportedAt.toISOString(),\n      status: updated.status,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to approve flag\");\n    res.status(500).json({ error: \"Failed to approve flag\" });\n  }\n});\n\nrouter.patch(\"/moderation/flags/:id/remove\", requireModerator, async (req, res) => {\n  const id = req.params[\"id\"] as string;\n  try {\n    const [updated] = await db\n      .update(moderationFlagsTable)\n      .set({ status: \"removed\" })\n      .where(eq(moderationFlagsTable.id, id))\n      .returning();\n    if (!updated) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n    res.json({\n      id: updated.id,\n      contentType: updated.contentType,\n      contentPreview: updated.contentPreview,\n      reason: updated.reason,\n      reporter: updated.reporter,\n      reportedUser: updated.reportedUser,\n      reportedAt: updated.reportedAt.toISOString(),\n      status: updated.status,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to remove flag\");\n    res.status(500).json({ error: \"Failed to remove flag\" });\n  }\n});\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// FEED COMMENTS \u2014 moderator or admin; list all + hard-delete individual\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/moderation/comments\", requireModerator, async (req, res) => {\n  try {\n    const rawLimit = Number(req.query[\"limit\"]);\n    const limit = Number.isFinite(rawLimit) && rawLimit > 0 ? Math.min(Math.floor(rawLimit), 200) : 200;\n    const rows = await db\n      .select()\n      .from(feedCommentsTable)\n      .orderBy(desc(feedCommentsTable.createdAt))\n      .limit(limit);\n    res.json(\n      rows.map((r) => ({\n        id: r.id,\n        clipId: r.clipId,\n        userId: r.userId,\n        userDisplay: r.userDisplay,\n        text: r.text,\n        createdAt: r.createdAt.toISOString(),\n      })),\n    );\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to list feed comments\");\n    res.status(500).json({ error: \"Failed to load comments\" });\n  }\n});\n\nrouter.delete(\"/moderation/comments/:id\", requireModerator, async (req, res) => {\n  const id = Number(req.params[\"id\"]);\n  if (!Number.isInteger(id) || id < 1) {\n    res.status(400).json({ error: \"Invalid comment id\" });\n    return;\n  }\n  try {\n    const [deleted] = await db\n      .delete(feedCommentsTable)\n      .where(eq(feedCommentsTable.id, id))\n      .returning({ id: feedCommentsTable.id });\n    if (!deleted) {\n      res.status(404).json({ error: \"Comment not found\" });\n      return;\n    }\n    res.json({ success: true, id: deleted.id });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to delete comment\");\n    res.status(500).json({ error: \"Failed to delete comment\" });\n  }\n});\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// OUTFITTERS \u2014 moderator/admin read; admin mutates\n// Persisted in PostgreSQL via Drizzle.\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction formatOutfitter(r: import(\"@workspace/db/schema\").OutfitterRow) {\n  return {\n    id: r.id,\n    name: r.name,\n    guide: r.guide,\n    location: r.location,\n    state: r.state,\n    targetSpecies: r.targetSpecies as string[],\n    imageKey: r.imageKey,\n    photos: r.photos as string[],\n    rating: r.rating,\n    reviewCount: r.reviewCount,\n    pricePerDay: r.pricePerDay,\n    category: r.category,\n    status: r.status,\n    featured: r.featured,\n    bio: r.bio,\n    email: r.email,\n    phone: r.phone,\n    website: r.website,\n    yearsInOperation: r.yearsInOperation,\n    groupSize: r.groupSize,\n    tripsInclude: r.tripsInclude as string[],\n    seasons: r.seasons as string[],\n    licenses: r.licenses as string[],\n    reviews: r.reviews as unknown[],\n    submittedAt: r.submittedAt?.toISOString() ?? null,\n    approvedAt: r.approvedAt?.toISOString() ?? null,\n  };\n}\n\nrouter.get(\"/outfitters\", requireModerator, async (req, res) => {\n  try {\n    const rows = await db\n      .select()\n      .from(outfittersTable)\n      .orderBy(desc(outfittersTable.createdAt));\n    res.json(rows.map(formatOutfitter));\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to list outfitters\");\n    res.status(500).json({ error: \"Failed to load outfitters\" });\n  }\n});\n\nrouter.post(\"/outfitters\", requireAdmin, async (req, res) => {\n  const body = req.body ?? {};\n  const id = `o_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n  try {\n    const [row] = await db\n      .insert(outfittersTable)\n      .values({\n        id,\n        name: String(body.name ?? \"\").trim(),\n        guide: String(body.guide ?? \"\").trim(),\n        location: String(body.location ?? \"\").trim(),\n        state: String(body.state ?? \"\").trim(),\n        targetSpecies: Array.isArray(body.targetSpecies) ? body.targetSpecies : [],\n        imageKey: String(body.imageKey ?? \"bow\"),\n        photos: Array.isArray(body.photos) ? body.photos : [],\n        rating: Number(body.rating ?? 0),\n        reviewCount: Number(body.reviewCount ?? 0),\n        pricePerDay: Number(body.pricePerDay ?? 0),\n        category: String(body.category ?? \"hunting\"),\n        status: \"pending\",\n        featured: Boolean(body.featured ?? false),\n        bio: String(body.bio ?? \"\").trim(),\n        email: String(body.email ?? \"\").trim(),\n        phone: String(body.phone ?? \"\").trim(),\n        website: String(body.website ?? \"\").trim(),\n        yearsInOperation: Number(body.yearsInOperation ?? 0),\n        groupSize: String(body.groupSize ?? \"\").trim(),\n        tripsInclude: Array.isArray(body.tripsInclude) ? body.tripsInclude : [],\n        seasons: Array.isArray(body.seasons) ? body.seasons : [],\n        licenses: Array.isArray(body.licenses) ? body.licenses : [],\n        reviews: Array.isArray(body.reviews) ? body.reviews : [],\n        submittedAt: new Date(),\n      })\n      .returning();\n    if (!row) {\n      res.status(500).json({ error: \"Insert returned no row\" });\n      return;\n    }\n    res.json(formatOutfitter(row));\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to create outfitter\");\n    res.status(500).json({ error: \"Failed to create outfitter\" });\n  }\n});\n\nrouter.patch(\"/outfitters/:id/status\", requireAdmin, async (req, res) => {\n  const id = req.params[\"id\"] as string;\n  const { status } = req.body ?? {};\n  const VALID_STATUSES = [\"pending\", \"active\", \"suspended\"] as const;\n  if (!status || !(VALID_STATUSES as readonly string[]).includes(status)) {\n    res.status(400).json({ error: `status must be one of: ${VALID_STATUSES.join(\", \")}` });\n    return;\n  }\n  try {\n    const patch: Partial<typeof outfittersTable.$inferInsert> = { status };\n    if (status === \"active\") {\n      patch.approvedAt = new Date();\n    }\n    const [updated] = await db\n      .update(outfittersTable)\n      .set(patch)\n      .where(eq(outfittersTable.id, id))\n      .returning();\n    if (!updated) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n\n    let emailSent = false;\n    if (status === \"active\" && updated.email) {\n      emailSent = await sendOutfitterApprovalEmail({\n        outfitterEmail: updated.email,\n        guideName: updated.guide,\n        businessName: updated.name,\n        outfitterId: updated.id,\n      }).catch((err) => {\n        req.log?.error({ err, outfitterId: id }, \"Failed to send outfitter approval email\");\n        return false;\n      });\n    } else if (status === \"suspended\" && updated.email) {\n      emailSent = await sendOutfitterRejectionEmail({\n        outfitterEmail: updated.email,\n        guideName: updated.guide,\n        businessName: updated.name,\n      }).catch((err) => {\n        req.log?.error({ err, outfitterId: id }, \"Failed to send outfitter rejection email\");\n        return false;\n      });\n    }\n\n    res.json({ ...formatOutfitter(updated), emailSent });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to update outfitter status\");\n    res.status(500).json({ error: \"Failed to update outfitter\" });\n  }\n});\n\nrouter.patch(\"/outfitters/:id\", requireAdmin, async (req, res) => {\n  const id = req.params[\"id\"] as string;\n  const body = req.body ?? {};\n  try {\n    const patch: Partial<typeof outfittersTable.$inferInsert> = {};\n    if (body.name !== undefined) patch.name = String(body.name).trim();\n    if (body.guide !== undefined) patch.guide = String(body.guide).trim();\n    if (body.location !== undefined) patch.location = String(body.location).trim();\n    if (body.state !== undefined) patch.state = String(body.state).trim();\n    if (body.targetSpecies !== undefined) patch.targetSpecies = Array.isArray(body.targetSpecies) ? body.targetSpecies : [];\n    if (body.imageKey !== undefined) patch.imageKey = String(body.imageKey);\n    if (body.rating !== undefined) patch.rating = Number(body.rating);\n    if (body.reviewCount !== undefined) patch.reviewCount = Number(body.reviewCount);\n    if (body.pricePerDay !== undefined) patch.pricePerDay = Number(body.pricePerDay);\n    if (body.category !== undefined) patch.category = String(body.category);\n    if (body.featured !== undefined) patch.featured = Boolean(body.featured);\n    if (body.bio !== undefined) patch.bio = String(body.bio).trim();\n    if (body.email !== undefined) patch.email = String(body.email).trim();\n    if (body.phone !== undefined) patch.phone = String(body.phone).trim();\n    if (body.website !== undefined) patch.website = String(body.website).trim();\n    if (body.yearsInOperation !== undefined) patch.yearsInOperation = Number(body.yearsInOperation);\n    if (body.groupSize !== undefined) patch.groupSize = String(body.groupSize).trim();\n    if (body.tripsInclude !== undefined) patch.tripsInclude = Array.isArray(body.tripsInclude) ? body.tripsInclude : [];\n    if (body.seasons !== undefined) patch.seasons = Array.isArray(body.seasons) ? body.seasons : [];\n    if (body.licenses !== undefined) patch.licenses = Array.isArray(body.licenses) ? body.licenses : [];\n\n    const [updated] = await db\n      .update(outfittersTable)\n      .set(patch)\n      .where(eq(outfittersTable.id, id))\n      .returning();\n    if (!updated) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n    res.json(formatOutfitter(updated));\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to update outfitter\");\n    res.status(500).json({ error: \"Failed to update outfitter\" });\n  }\n});\n\nrouter.delete(\"/outfitters/:id\", requireAdmin, async (req, res) => {\n  const id = req.params[\"id\"] as string;\n  try {\n    const [existing] = await db\n      .select()\n      .from(outfittersTable)\n      .where(eq(outfittersTable.id, id))\n      .limit(1);\n\n    const result = await db\n      .delete(outfittersTable)\n      .where(eq(outfittersTable.id, id))\n      .returning({ id: outfittersTable.id });\n    if (result.length === 0) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n\n    let emailSent = false;\n    if (existing && existing.status === \"pending\" && existing.email) {\n      emailSent = await sendOutfitterRejectionEmail({\n        outfitterEmail: existing.email,\n        guideName: existing.guide,\n        businessName: existing.name,\n      }).catch((err) => {\n        req.log?.error({ err, outfitterId: id }, \"Failed to send outfitter rejection email\");\n        return false;\n      });\n    }\n\n    res.json({ success: true, emailSent });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to delete outfitter\");\n    res.status(500).json({ error: \"Failed to delete outfitter\" });\n  }\n});\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// STATS / TIMESERIES \u2014 moderator or admin\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst VALID_METRICS = [\"signups\", \"uploads\", \"approvals\"] as const;\ntype TimeseriesMetric = (typeof VALID_METRICS)[number];\n\nrouter.get(\"/stats/timeseries\", requireModerator, async (req: Request, res: Response) => {\n  const metric = req.query[\"metric\"] as string | undefined;\n  const days = Math.min(Math.max(Number(req.query[\"days\"] ?? 30), 7), 90);\n\n  if (!metric || !(VALID_METRICS as readonly string[]).includes(metric)) {\n    res.status(400).json({ error: `metric must be one of: ${VALID_METRICS.join(\", \")}` });\n    return;\n  }\n\n  try {\n    const now = new Date();\n    const buckets: { date: string; count: number }[] = [];\n\n    if (metric === \"signups\") {\n      const allDbUsers = await db.select({ createdAt: authUserTable.createdAt }).from(authUserTable);\n      for (let i = days - 1; i >= 0; i--) {\n        const d = new Date(now);\n        d.setHours(0, 0, 0, 0);\n        d.setDate(d.getDate() - i);\n        const start = d.getTime();\n        const end = start + 86400000;\n        const date = d.toISOString().slice(0, 10);\n        const countVal = allDbUsers.filter((u) => u.createdAt.getTime() >= start && u.createdAt.getTime() < end).length;\n        buckets.push({ date, count: countVal });\n      }\n    } else if (metric === \"uploads\") {\n      const listings = await db.select().from(usedListingsTable);\n      for (let i = days - 1; i >= 0; i--) {\n        const d = new Date(now);\n        d.setHours(0, 0, 0, 0);\n        d.setDate(d.getDate() - i);\n        const start = d.getTime();\n        const end = start + 86400000;\n        const date = d.toISOString().slice(0, 10);\n        const countVal = listings.filter((l) => {\n          const t = l.postedAt.getTime();\n          return t >= start && t < end;\n        }).length;\n        buckets.push({ date, count: countVal });\n      }\n    } else {\n      const listings = await db\n        .select()\n        .from(usedListingsTable)\n        .where(eq(usedListingsTable.status, \"approved\"));\n      for (let i = days - 1; i >= 0; i--) {\n        const d = new Date(now);\n        d.setHours(0, 0, 0, 0);\n        d.setDate(d.getDate() - i);\n        const start = d.getTime();\n        const end = start + 86400000;\n        const date = d.toISOString().slice(0, 10);\n        const countVal = listings.filter((l) => {\n          const t = l.postedAt.getTime();\n          return t >= start && t < end;\n        }).length;\n        buckets.push({ date, count: countVal });\n      }\n    }\n\n    res.json({ metric: metric as TimeseriesMetric, days, buckets });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to load timeseries\");\n    res.status(500).json({ error: \"Failed to load timeseries\" });\n  }\n});\n\nrouter.get(\"/stats\", requireModerator, async (req, res) => {\n  try {\n    const now = Date.now();\n    const sevenDaysAgo = new Date(now - 7 * 86400000);\n    const todayStart = new Date(new Date().toISOString().slice(0, 10) + \"T00:00:00.000Z\");\n\n    const allDbUsers = await db.select().from(authUserTable);\n    const totalUsers = allDbUsers.length;\n    const newUsers = allDbUsers.filter((u) => u.createdAt >= sevenDaysAgo).length;\n    const adminCount = allDbUsers.filter((u) => u.role === \"admin\").length;\n    const moderatorCount = allDbUsers.filter((u) => u.role === \"moderator\").length;\n    const bannedCount = allDbUsers.filter((u) => u.banned).length;\n\n    const [gearAgg, usedAgg, flagAgg, contentAgg, outfitterAgg, videoAgg, appealAgg] = await Promise.all([\n      db.select({\n        total: count(),\n        featured: sql<number>`COUNT(*) FILTER (WHERE featured = true)`,\n      }).from(gearCatalogTable),\n      db.select({\n        total: count(),\n        pending: sql<number>`COUNT(*) FILTER (WHERE status = 'pending')`,\n        approved: sql<number>`COUNT(*) FILTER (WHERE status = 'approved')`,\n        rejected: sql<number>`COUNT(*) FILTER (WHERE status = 'rejected')`,\n      }).from(usedListingsTable),\n      db.select({\n        pending: sql<number>`COUNT(*) FILTER (WHERE status = 'pending')`,\n      }).from(moderationFlagsTable),\n      db.select({ total: count() }).from(adminContentTable),\n      db.select({\n        total: count(),\n        active: sql<number>`COUNT(*) FILTER (WHERE status = 'active')`,\n        pending: sql<number>`COUNT(*) FILTER (WHERE status = 'pending')`,\n        suspended: sql<number>`COUNT(*) FILTER (WHERE status = 'suspended')`,\n        featured: sql<number>`COUNT(*) FILTER (WHERE featured = true)`,\n      }).from(outfittersTable),\n      db.select({\n        total: count(),\n        uploadsToday: sql<number>`COUNT(*) FILTER (WHERE created_at >= ${todayStart})`,\n        huntingCount: sql<number>`COUNT(*) FILTER (WHERE category = 'hunting')`,\n        fishingCount: sql<number>`COUNT(*) FILTER (WHERE category = 'fishing')`,\n      }).from(userVideosTable),\n      db.select({\n        pending: sql<number>`COUNT(*) FILTER (WHERE status = 'pending')`,\n      }).from(contentAppealsTable),\n    ]);\n\n    const g = gearAgg[0] ?? { total: 0, featured: 0 };\n    const u = usedAgg[0] ?? { total: 0, pending: 0, approved: 0, rejected: 0 };\n    const f = flagAgg[0] ?? { pending: 0 };\n    const o = outfitterAgg[0] ?? { total: 0, active: 0, pending: 0, suspended: 0, featured: 0 };\n    const v = videoAgg[0] ?? { total: 0, uploadsToday: 0, huntingCount: 0, fishingCount: 0 };\n    const ap = appealAgg[0] ?? { pending: 0 };\n\n    res.json({\n      totalUsers,\n      totalOutfitters: Number(o.total),\n      pendingOutfitters: Number(o.pending),\n      totalGear: Number(g.total),\n      pendingUsedListings: Number(u.pending),\n      pendingFlags: Number(f.pending),\n      pendingAppeals: Number(ap.pending),\n      totalVideos: Number(v.total),\n      activeUsers7d: newUsers,\n      uploadsToday: Number(v.uploadsToday),\n      huntingCount: Number(v.huntingCount),\n      fishingCount: Number(v.fishingCount),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to load stats\");\n    res.status(500).json({ error: \"Failed to load stats\" });\n  }\n});\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Compliance: TOS Agreements (admin-only)\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nrouter.get(\"/compliance/agreements\", requireAdmin, async (req: Request, res: Response) => {\n  try {\n    const page = Math.max(1, parseInt(String(req.query[\"page\"] ?? \"1\"), 10));\n    const limit = Math.min(100, Math.max(1, parseInt(String(req.query[\"limit\"] ?? \"50\"), 10)));\n    const offset = (page - 1) * limit;\n\n    const [rows, countRow] = await Promise.all([\n      db\n        .select()\n        .from(userAgreementsTable)\n        .orderBy(desc(userAgreementsTable.acceptedAt))\n        .limit(limit)\n        .offset(offset),\n      db.select({ value: count() }).from(userAgreementsTable),\n    ]);\n\n    const uniqueUserIds = [...new Set(rows.map((r) => r.userId))];\n    const emailByUserId = new Map<string, string>();\n    if (uniqueUserIds.length > 0) {\n      const dbUsers = await db\n        .select({ id: authUserTable.id, email: authUserTable.email })\n        .from(authUserTable)\n        .where(inArray(authUserTable.id, uniqueUserIds));\n      for (const u of dbUsers) emailByUserId.set(u.id, u.email);\n    }\n\n    res.json({\n      total: countRow[0]?.value ?? 0,\n      page,\n      limit,\n      items: rows.map((r) => ({\n        id: r.id,\n        userId: r.userId,\n        userEmail: emailByUserId.get(r.userId) ?? \"\",\n        tosVersion: r.tosVersion,\n        profileType: r.profileType,\n        isAdult: r.isAdult,\n        acceptedAt: r.acceptedAt,\n      })),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to list TOS agreements\");\n    res.status(500).json({ error: \"Failed to load agreements\" });\n  }\n});\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Compliance: DMCA Claims (admin + moderator)\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nrouter.get(\"/compliance/dmca-claims\", requireAdmin, async (req: Request, res: Response) => {\n  try {\n    const status = req.query[\"status\"] as string | undefined;\n    const page = Math.max(1, parseInt(String(req.query[\"page\"] ?? \"1\"), 10));\n    const limit = Math.min(100, Math.max(1, parseInt(String(req.query[\"limit\"] ?? \"50\"), 10)));\n    const offset = (page - 1) * limit;\n\n    const baseQuery = db.select().from(dmcaClaimsTable);\n    const rows = await (status\n      ? baseQuery.where(eq(dmcaClaimsTable.status, status))\n      : baseQuery\n    ).orderBy(desc(dmcaClaimsTable.submittedAt)).limit(limit).offset(offset);\n\n    const countQuery = db.select({ value: count() }).from(dmcaClaimsTable);\n    const countRow = await (status\n      ? countQuery.where(eq(dmcaClaimsTable.status, status))\n      : countQuery\n    );\n\n    res.json({\n      total: countRow[0]?.value ?? 0,\n      page,\n      limit,\n      items: rows,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to list DMCA claims\");\n    res.status(500).json({ error: \"Failed to load DMCA claims\" });\n  }\n});\n\nrouter.patch(\"/compliance/dmca-claims/:id/status\", requireAdmin, async (req: Request, res: Response) => {\n  const { id } = req.params as { id: string };\n  const { status } = (req.body ?? {}) as { status?: string };\n\n  const VALID_STATUSES = [\"pending\", \"reviewing\", \"resolved\", \"rejected\"];\n  if (!status || !VALID_STATUSES.includes(status)) {\n    res.status(400).json({ error: `status must be one of: ${VALID_STATUSES.join(\", \")}` });\n    return;\n  }\n\n  const idNum = parseInt(id, 10);\n  if (isNaN(idNum)) {\n    res.status(400).json({ error: \"Invalid ID\" });\n    return;\n  }\n\n  try {\n    const [updated] = await db\n      .update(dmcaClaimsTable)\n      .set({ status })\n      .where(eq(dmcaClaimsTable.id, idNum))\n      .returning({ id: dmcaClaimsTable.id, status: dmcaClaimsTable.status });\n\n    if (!updated) {\n      res.status(404).json({ error: \"Claim not found\" });\n      return;\n    }\n\n    res.json({ success: true, id: updated.id, status: updated.status });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to update DMCA claim status\");\n    res.status(500).json({ error: \"Failed to update claim\" });\n  }\n});\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Seed reset \u2014 admin only\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// YouTube quota usage (moderator+)\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nrouter.get(\"/youtube-quota\", requireModerator, async (req: Request, res: Response) => {\n  try {\n    const quota = await getYouTubeQuotaStatus();\n    res.json(quota);\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to load YouTube quota status\");\n    res.status(500).json({ error: \"Failed to load YouTube quota status\" });\n  }\n});\n\nrouter.patch(\"/youtube-quota/cap\", requireAdmin, async (req: Request, res: Response) => {\n  const { cap } = req.body as { cap?: unknown };\n  if (typeof cap !== \"number\" || !Number.isInteger(cap) || cap < 1 || cap > 10_000) {\n    res.status(400).json({ error: \"cap must be an integer between 1 and 10000\" });\n    return;\n  }\n  try {\n    await setCapOverride(cap);\n    const adminUser = getAdminUser(req);\n    req.log?.info({ cap, adminUserId: adminUser?.userId }, \"Admin: YouTube daily refresh cap updated\");\n    res.json({ cap });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to update YouTube refresh cap\");\n    res.status(500).json({ error: \"Failed to update cap\" });\n  }\n});\n\nrouter.get(\"/youtube-quota/history\", requireModerator, async (req: Request, res: Response) => {\n  try {\n    const rawDays = parseInt(String(req.query[\"days\"] ?? \"14\"), 10);\n    const days = isNaN(rawDays) || rawDays < 1 ? 14 : Math.min(rawDays, 30);\n\n    // Build the list of UTC date strings for the requested window.\n    const now = new Date();\n    const dates: string[] = [];\n    for (let i = days - 1; i >= 0; i--) {\n      const d = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() - i));\n      dates.push(d.toISOString().slice(0, 10));\n    }\n\n    const startDate = dates[0]!;\n    const rows = await db\n      .select()\n      .from(quotaDailyLogTable)\n      .where(gte(quotaDailyLogTable.dateUtc, startDate))\n      .orderBy(quotaDailyLogTable.dateUtc);\n\n    const byDate = new Map(rows.map((r) => [r.dateUtc, r]));\n\n    // Use the current cap as the fallback for days without a log row.\n    const { cap: defaultCap } = await getYouTubeQuotaStatus();\n\n    const history = dates.map((date) => {\n      const row = byDate.get(date);\n      return { date, count: row?.count ?? 0, cap: row?.cap ?? defaultCap };\n    });\n\n    res.json({ days, history });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to load YouTube quota history\");\n    res.status(500).json({ error: \"Failed to load YouTube quota history\" });\n  }\n});\n\nrouter.post(\"/seed-reset\", requireAdmin, async (req: Request, res: Response) => {\n  const r = getAdminUser(req);\n  req.log?.warn({ adminUserId: r?.userId }, \"Admin: seed reset initiated\");\n  try {\n    const counts = await runSeedReset();\n    req.log?.info({ adminUserId: r?.userId, counts }, \"Admin: seed reset completed\");\n\n    if (r?.userId) {\n      try {\n        const adminRows = await db\n          .select({ email: authUserTable.email })\n          .from(authUserTable)\n          .where(eq(authUserTable.id, r.userId))\n          .limit(1);\n        const adminEmail = adminRows[0]?.email ?? r.userId;\n        await db.insert(seedResetLogTable).values({\n          adminUserId: r.userId,\n          adminEmail,\n        });\n      } catch (logErr) {\n        req.log?.warn({ logErr }, \"Admin: failed to persist seed-reset log entry\");\n      }\n    }\n\n    res.json({ success: true, counts });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: seed reset failed\");\n    res.status(500).json({ error: \"Seed reset failed\" });\n  }\n});\n\nrouter.get(\"/seed-reset-log\", requireAdmin, async (req: Request, res: Response) => {\n  try {\n    const history = await db\n      .select()\n      .from(seedResetLogTable)\n      .orderBy(desc(seedResetLogTable.resetAt))\n      .limit(100);\n    const last = history[0] ?? null;\n    res.json({ last, history });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to fetch seed-reset log\");\n    res.status(500).json({ error: \"Failed to fetch seed reset log\" });\n  }\n});\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// PLAYBACK HEALTH \u2014 catalog video playback diagnostics (moderator+)\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/library/playback-health\", requireModerator, async (req: Request, res: Response) => {\n  try {\n    const rows = await db\n      .select({\n        id: userVideosTable.id,\n        title: userVideosTable.title,\n        videoUrl: userVideosTable.videoUrl,\n        sourcePlatform: userVideosTable.sourcePlatform,\n        sourceVideoId: userVideosTable.sourceVideoId,\n        embedUrl: userVideosTable.embedUrl,\n        rightsMetadata: userVideosTable.rightsMetadata,\n      })\n      .from(userVideosTable)\n      .orderBy(desc(userVideosTable.createdAt))\n      .limit(3000);\n\n    const stats = {\n      total: rows.length,\n      instagram: { native: 0, embedOnly: 0, missingId: 0 },\n      tiktok: { native: 0, embedOnly: 0, missingId: 0 },\n      youtube: 0,\n      otherNative: 0,\n      unplayable: 0,\n    };\n\n    const failingSamples: Array<{ id: number; title: string; platform: string | null; reason: string }> = [];\n\n    for (const row of rows) {\n      const platform = row.sourcePlatform ?? \"unknown\";\n      const meta = (row.rightsMetadata as Record<string, unknown> | null) ?? {};\n      const resolved = resolveFeedPlaybackUrl({\n        videoUrl: row.videoUrl,\n        sourcePlatform: row.sourcePlatform,\n        rightsMetadata: meta,\n        embedUrl: row.embedUrl,\n      });\n      const native = isNativePlaybackUrl(resolved);\n      const playable = isPlayableFeedUrl(row.videoUrl, {\n        sourcePlatform: row.sourcePlatform,\n        embedUrl: row.embedUrl,\n        sourceVideoId: row.sourceVideoId,\n      });\n\n      if (!playable) {\n        stats.unplayable += 1;\n        if (failingSamples.length < 25) {\n          failingSamples.push({\n            id: row.id,\n            title: row.title,\n            platform: row.sourcePlatform,\n            reason: \"not_playable\",\n          });\n        }\n        continue;\n      }\n\n      if (platform === \"instagram\") {\n        if (!row.sourceVideoId?.trim()) stats.instagram.missingId += 1;\n        else if (native || isInstagramCdnMp4(resolved)) stats.instagram.native += 1;\n        else stats.instagram.embedOnly += 1;\n        if (!native && failingSamples.length < 25) {\n          failingSamples.push({\n            id: row.id,\n            title: row.title,\n            platform,\n            reason: \"instagram_embed_only\",\n          });\n        }\n      } else if (platform === \"tiktok\") {\n        if (!row.sourceVideoId?.trim()) stats.tiktok.missingId += 1;\n        else if (native || isTikTokCdnUrl(resolved)) stats.tiktok.native += 1;\n        else stats.tiktok.embedOnly += 1;\n        if (!native && failingSamples.length < 25) {\n          failingSamples.push({\n            id: row.id,\n            title: row.title,\n            platform,\n            reason: \"tiktok_embed_only\",\n          });\n        }\n      } else if (platform === \"youtube\" || row.videoUrl.includes(\"youtube\") || row.videoUrl.includes(\"youtu.be\")) {\n        stats.youtube += 1;\n      } else if (native) {\n        stats.otherNative += 1;\n      }\n    }\n\n    res.json({ stats, failingSamples, checkedAt: new Date().toISOString() });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: playback health failed\");\n    res.status(500).json({ error: \"Failed to compute playback health\" });\n  }\n});\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// CONTENT LIBRARY \u2014 all user-uploaded videos (moderator+)\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/library/videos\", requireModerator, async (req: Request, res: Response) => {\n  try {\n    const offset = Math.max(0, Number(req.query[\"offset\"] ?? 0));\n    const limit = Math.min(Number(req.query[\"limit\"] ?? 200), 500);\n    const search = (req.query[\"search\"] as string | undefined)?.trim().toLowerCase();\n\n    const rows = await db\n      .select()\n      .from(userVideosTable)\n      .orderBy(\n        sql`${userVideosTable.pinnedAt} DESC NULLS LAST`,\n        desc(userVideosTable.createdAt),\n      )\n      .offset(offset)\n      .limit(limit);\n\n    const uploaderIds = [...new Set(rows.map((r) => r.userId))];\n    const emailByUserId = new Map<string, string>();\n    if (uploaderIds.length > 0) {\n      const users = await db\n        .select({ id: authUserTable.id, email: authUserTable.email })\n        .from(authUserTable)\n        .where(inArray(authUserTable.id, uploaderIds));\n      for (const u of users) emailByUserId.set(u.id, u.email);\n    }\n\n    let items = rows.map((r) => {\n      const layout = inferVideoLayout({\n        videoUrl: r.videoUrl,\n        sourcePlatform: r.sourcePlatform,\n        videoFormat:\n          r.videoFormat === \"hook\" || r.videoFormat === \"shot\" || r.videoFormat === \"video\"\n            ? r.videoFormat\n            : null,\n        category: r.category,\n      });\n      return {\n      id: r.id,\n      title: r.title,\n      creator: r.creator,\n      creatorHandle: r.creatorHandle,\n      uploaderId: r.userId,\n      uploaderEmail: emailByUserId.get(r.userId) ?? \"\",\n      videoUrl: r.videoUrl,\n      thumbnailUrl: r.thumbnailUrl,\n      category: r.category,\n      species: r.species,\n      description: r.description,\n      source: libraryVideoSource(r.videoUrl),\n      sourcePlatform: r.sourcePlatform,\n      videoFormat: layout.format,\n      videoLayoutLabel: layout.label,\n      videoOrientation: layout.orientation,\n      hashtags: extractVideoHashtags(r.species, r.description),\n      views: 0,\n      pinned: r.pinnedAt != null,\n      pinnedAt: r.pinnedAt?.toISOString() ?? null,\n      createdAt: r.createdAt.toISOString(),\n      storageBytes: null as number | null,\n    };\n    });\n\n    if (search) {\n      items = items.filter(\n        (v) =>\n          v.title.toLowerCase().includes(search) ||\n          v.creator.toLowerCase().includes(search) ||\n          v.uploaderEmail.toLowerCase().includes(search) ||\n          (v.species?.toLowerCase().includes(search) ?? false),\n      );\n    }\n\n    res.json(items);\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to list library videos\");\n    res.status(500).json({ error: \"Failed to load content library\" });\n  }\n});\n\nrouter.patch(\"/library/videos/:id\", requireModerator, async (req: Request, res: Response) => {\n  const idRaw = parseInt(String(req.params[\"id\"] ?? \"\"), 10);\n  if (!Number.isFinite(idRaw) || idRaw <= 0) {\n    res.status(400).json({ error: \"Invalid video id\" });\n    return;\n  }\n\n  const { pinned, category, species, title } = (req.body ?? {}) as {\n    pinned?: unknown;\n    category?: unknown;\n    species?: unknown;\n    title?: unknown;\n  };\n\n  const updates: Partial<typeof userVideosTable.$inferInsert> = {};\n  if (pinned !== undefined) {\n    updates.pinnedAt = pinned ? new Date() : null;\n  }\n  if (typeof category === \"string\" && [\"hooks\", \"shots\", \"both\", \"hunting\", \"fishing\", \"unassigned\"].includes(category)) {\n    updates.category = category;\n  }\n  if (species !== undefined) {\n    updates.species = typeof species === \"string\" ? species.trim() || null : null;\n  }\n  if (typeof title === \"string\" && title.trim()) {\n    updates.title = title.trim().slice(0, 200);\n  }\n\n  if (Object.keys(updates).length === 0) {\n    res.status(400).json({ error: \"No valid fields to update\" });\n    return;\n  }\n\n  try {\n    const [updated] = await db\n      .update(userVideosTable)\n      .set(updates)\n      .where(eq(userVideosTable.id, idRaw))\n      .returning();\n    if (!updated) {\n      res.status(404).json({ error: \"Video not found\" });\n      return;\n    }\n    res.json({\n      id: updated.id,\n      title: updated.title,\n      category: updated.category,\n      species: updated.species,\n      pinned: updated.pinnedAt != null,\n      pinnedAt: updated.pinnedAt?.toISOString() ?? null,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to update library video\");\n    res.status(500).json({ error: \"Failed to update video\" });\n  }\n});\n\nrouter.delete(\"/library/videos/:id\", requireAdmin, async (req: Request, res: Response) => {\n  const idRaw = parseInt(String(req.params[\"id\"] ?? \"\"), 10);\n  if (!Number.isFinite(idRaw) || idRaw <= 0) {\n    res.status(400).json({ error: \"Invalid video id\" });\n    return;\n  }\n\n  try {\n    const [row] = await db\n      .select()\n      .from(userVideosTable)\n      .where(eq(userVideosTable.id, idRaw))\n      .limit(1);\n    if (!row) {\n      res.status(404).json({ error: \"Video not found\" });\n      return;\n    }\n\n    if (row.videoUrl.startsWith(\"/objects/\")) {\n      await deleteNativeStorageObject(row.videoUrl, req.log);\n    } else {\n      await deleteNativeStorageObject(row.videoUrl, req.log);\n    }\n\n    await db.delete(userVideosTable).where(eq(userVideosTable.id, idRaw));\n    res.json({ success: true, id: idRaw });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to delete library video\");\n    res.status(500).json({ error: \"Failed to delete video\" });\n  }\n});\n\nfunction libraryClipId(videoId: number): string {\n  return `db-${videoId}`;\n}\n\nasync function mergeVideoEngagement(\n  keepId: number,\n  removeIds: number[],\n): Promise<{ likesMoved: number; likesDropped: number; commentsMoved: number }> {\n  const keepClipId = libraryClipId(keepId);\n  let likesMoved = 0;\n  let likesDropped = 0;\n  let commentsMoved = 0;\n\n  for (const removeId of removeIds) {\n    const removeClipId = libraryClipId(removeId);\n\n    const commentUpdate = await db\n      .update(feedCommentsTable)\n      .set({ clipId: keepClipId })\n      .where(eq(feedCommentsTable.clipId, removeClipId))\n      .returning({ id: feedCommentsTable.id });\n    commentsMoved += commentUpdate.length;\n\n    const keepLikes = await db\n      .select({ userId: feedLikesTable.userId })\n      .from(feedLikesTable)\n      .where(eq(feedLikesTable.clipId, keepClipId));\n    const likedUsers = new Set(keepLikes.map((row) => row.userId));\n\n    const removeLikes = await db\n      .select()\n      .from(feedLikesTable)\n      .where(eq(feedLikesTable.clipId, removeClipId));\n\n    for (const like of removeLikes) {\n      if (likedUsers.has(like.userId)) {\n        await db.delete(feedLikesTable).where(eq(feedLikesTable.id, like.id));\n        likesDropped += 1;\n      } else {\n        await db\n          .update(feedLikesTable)\n          .set({ clipId: keepClipId })\n          .where(eq(feedLikesTable.id, like.id));\n        likedUsers.add(like.userId);\n        likesMoved += 1;\n      }\n    }\n\n    await db\n      .update(contentVisibilityTable)\n      .set({ contentId: keepClipId })\n      .where(eq(contentVisibilityTable.contentId, removeClipId));\n  }\n\n  return { likesMoved, likesDropped, commentsMoved };\n}\n\nrouter.post(\"/library/videos/merge-duplicates\", requireAdmin, async (req: Request, res: Response) => {\n  const { keepId, removeIds } = (req.body ?? {}) as {\n    keepId?: unknown;\n    removeIds?: unknown;\n  };\n\n  const keepIdNum = parseInt(String(keepId ?? \"\"), 10);\n  if (!Number.isFinite(keepIdNum) || keepIdNum <= 0) {\n    res.status(400).json({ error: \"keepId must be a positive integer\" });\n    return;\n  }\n\n  if (!Array.isArray(removeIds) || removeIds.length === 0) {\n    res.status(400).json({ error: \"removeIds must be a non-empty array\" });\n    return;\n  }\n\n  const removeIdList = removeIds\n    .map((v) => parseInt(String(v), 10))\n    .filter((v) => Number.isFinite(v) && v > 0 && v !== keepIdNum);\n  if (removeIdList.length === 0) {\n    res.status(400).json({ error: \"No valid removeIds\" });\n    return;\n  }\n\n  try {\n    const [keepRow] = await db\n      .select({ id: userVideosTable.id })\n      .from(userVideosTable)\n      .where(eq(userVideosTable.id, keepIdNum))\n      .limit(1);\n    if (!keepRow) {\n      res.status(404).json({ error: \"Keep video not found\" });\n      return;\n    }\n\n    const removeRows = await db\n      .select()\n      .from(userVideosTable)\n      .where(inArray(userVideosTable.id, removeIdList));\n    if (removeRows.length === 0) {\n      res.status(404).json({ error: \"No duplicate videos found to merge\" });\n      return;\n    }\n\n    const engagement = await mergeVideoEngagement(keepIdNum, removeRows.map((r) => r.id));\n\n    for (const row of removeRows) {\n      await deleteNativeStorageObject(row.videoUrl, req.log);\n    }\n    await db.delete(userVideosTable).where(inArray(userVideosTable.id, removeRows.map((r) => r.id)));\n\n    res.json({\n      success: true,\n      keepId: keepIdNum,\n      removed: removeRows.length,\n      ...engagement,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to merge duplicate videos\");\n    res.status(500).json({ error: \"Failed to merge duplicate videos\" });\n  }\n});\n\nfunction libraryVideoSource(videoUrl: string): \"upload\" | \"external\" {\n  if (\n    videoUrl.startsWith(\"/objects/\") ||\n    videoUrl.includes(\".supabase.co/storage/\") ||\n    videoUrl.includes(\"r2.dev\") ||\n    videoUrl.includes(\"videos.hooknbone.com\")\n  ) {\n    return \"upload\";\n  }\n  return \"external\";\n}\n\nfunction extractVideoHashtags(species: string | null, description: string | null): string[] {\n  const tags = new Set<string>();\n  if (species?.trim()) {\n    for (const part of species.split(/[,;|/]+/)) {\n      const t = part.trim().toLowerCase();\n      if (t) tags.add(t);\n    }\n  }\n  const hashMatches = description?.match(/#[\\w-]+/gi) ?? [];\n  for (const raw of hashMatches) tags.add(raw.slice(1).toLowerCase());\n  return [...tags];\n}\n\nasync function deleteNativeStorageObject(videoUrl: string, log?: Request[\"log\"]): Promise<void> {\n  if (videoUrl.startsWith(\"/objects/\")) {\n    try {\n      const { ObjectStorageService } = await import(\"../lib/objectStorage\");\n      await new ObjectStorageService().deleteObjectEntity(videoUrl);\n    } catch (storageErr) {\n      log?.warn({ storageErr, videoUrl }, \"Admin: R2 storage delete failed (non-fatal)\");\n    }\n    return;\n  }\n\n  const supabaseMatch = videoUrl.match(/\\/storage\\/v1\\/object\\/(?:public|sign)\\/([^/]+)\\/(.+)$/);\n  if (supabaseMatch) {\n    const [, bucket, objectPath] = supabaseMatch;\n    try {\n      const admin = getSupabaseAdmin();\n      await admin.storage.from(bucket!).remove([decodeURIComponent(objectPath!)]);\n    } catch (storageErr) {\n      log?.warn({ storageErr, videoUrl }, \"Admin: Supabase storage delete failed (non-fatal)\");\n    }\n  }\n}\n\nrouter.post(\"/library/videos/bulk\", requireModerator, async (req: Request, res: Response) => {\n  const admin = getAdminUser(req);\n  if (!admin) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const { action, ids, tag } = (req.body ?? {}) as {\n    action?: unknown;\n    ids?: unknown;\n    tag?: unknown;\n  };\n\n  if (!Array.isArray(ids) || ids.length === 0) {\n    res.status(400).json({ error: \"ids must be a non-empty array\" });\n    return;\n  }\n\n  const idList = ids\n    .map((v) => parseInt(String(v), 10))\n    .filter((v) => Number.isFinite(v) && v > 0);\n  if (idList.length === 0) {\n    res.status(400).json({ error: \"No valid video ids\" });\n    return;\n  }\n\n  try {\n    if (action === \"delete\") {\n      const rows = await db\n        .select()\n        .from(userVideosTable)\n        .where(inArray(userVideosTable.id, idList));\n      for (const row of rows) {\n        await deleteNativeStorageObject(row.videoUrl, req.log);\n      }\n      await db.delete(userVideosTable).where(inArray(userVideosTable.id, idList));\n      res.json({ success: true, affected: idList.length });\n      return;\n    }\n\n    if (action === \"feature\") {\n      await db\n        .update(userVideosTable)\n        .set({ pinnedAt: new Date() })\n        .where(inArray(userVideosTable.id, idList));\n      res.json({ success: true, affected: idList.length });\n      return;\n    }\n\n    if (action === \"unfeature\") {\n      await db\n        .update(userVideosTable)\n        .set({ pinnedAt: null })\n        .where(inArray(userVideosTable.id, idList));\n      res.json({ success: true, affected: idList.length });\n      return;\n    }\n\n    if (action === \"tag\") {\n      const tagValue = typeof tag === \"string\" ? tag.trim() : \"\";\n      if (!tagValue) {\n        res.status(400).json({ error: \"tag is required for bulk tagging\" });\n        return;\n      }\n      await db\n        .update(userVideosTable)\n        .set({ species: tagValue })\n        .where(inArray(userVideosTable.id, idList));\n      res.json({ success: true, affected: idList.length });\n      return;\n    }\n\n    res.status(400).json({ error: \"Invalid action\" });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: bulk library action failed\");\n    res.status(500).json({ error: \"Bulk action failed\" });\n  }\n});\n\nrouter.post(\"/library/videos/batch-seed\", requireModerator, async (req: Request, res: Response) => {\n  const admin = getAdminUser(req);\n  if (!admin) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const { videos } = (req.body ?? {}) as { videos?: unknown };\n  if (!Array.isArray(videos) || videos.length === 0) {\n    res.status(400).json({ error: \"videos must be a non-empty array\" });\n    return;\n  }\n  if (videos.length > 200) {\n    res.status(400).json({ error: \"Maximum 200 videos per batch\" });\n    return;\n  }\n\n  const allowedCategories = [\"hooks\", \"shots\", \"both\", \"hunting\", \"fishing\", \"unassigned\"];\n\n  type SeedInput = {\n    title?: unknown;\n    videoUrl?: unknown;\n    creator?: unknown;\n    creatorHandle?: unknown;\n    thumbnailUrl?: unknown;\n    thumbnailKey?: unknown;\n    species?: unknown;\n    category?: unknown;\n    description?: unknown;\n    sourcePlatform?: unknown;\n    sourceVideoId?: unknown;\n  };\n\n  const normalized = videos\n    .map((raw) => (raw && typeof raw === \"object\" ? (raw as SeedInput) : null))\n    .map((item) => {\n      if (!item) return null;\n      const videoUrl = typeof item.videoUrl === \"string\" ? item.videoUrl.trim() : \"\";\n      if (!videoUrl || videoUrl.length > 2000) return null;\n      const title =\n        typeof item.title === \"string\" && item.title.trim()\n          ? item.title.trim().slice(0, 200)\n          : \"Linked video\";\n      const category =\n        typeof item.category === \"string\" && allowedCategories.includes(item.category)\n          ? item.category\n          : \"both\";\n      return {\n        title,\n        videoUrl,\n        creator: typeof item.creator === \"string\" && item.creator.trim() ? item.creator.trim() : \"Hook N Bone\",\n        creatorHandle:\n          typeof item.creatorHandle === \"string\" && item.creatorHandle.trim()\n            ? item.creatorHandle.trim()\n            : \"@admin\",\n        thumbnailUrl: typeof item.thumbnailUrl === \"string\" ? item.thumbnailUrl : null,\n        thumbnailKey: typeof item.thumbnailKey === \"string\" ? item.thumbnailKey : \"deer\",\n        species: typeof item.species === \"string\" ? item.species.trim() || null : null,\n        category,\n        description: typeof item.description === \"string\" ? item.description.trim().slice(0, 1000) || null : null,\n        sourcePlatform: typeof item.sourcePlatform === \"string\" ? item.sourcePlatform : null,\n        sourceVideoId: typeof item.sourceVideoId === \"string\" ? item.sourceVideoId : null,\n      };\n    })\n    .filter((row): row is NonNullable<typeof row> => row != null);\n\n  if (normalized.length === 0) {\n    res.status(400).json({ error: \"No valid videos in batch\" });\n    return;\n  }\n\n  try {\n    const existingRows = await db\n      .select({ id: userVideosTable.id, videoUrl: userVideosTable.videoUrl })\n      .from(userVideosTable);\n    const keyMap = buildExistingUrlKeyMap(existingRows);\n\n    const toInsert: typeof normalized = [];\n    let skipped = 0;\n    const batchKeys = new Set<string>();\n    for (const video of normalized) {\n      const key = duplicateKeyForUrl(video.videoUrl);\n      if (keyMap.has(key) || batchKeys.has(key)) {\n        skipped += 1;\n        continue;\n      }\n      batchKeys.add(key);\n      keyMap.set(key, -1);\n      toInsert.push(video);\n    }\n\n    if (toInsert.length === 0) {\n      res.status(409).json({\n        error: \"All videos are already in the library\",\n        inserted: 0,\n        skipped,\n        ids: [],\n      });\n      return;\n    }\n\n    const inserted = await db\n      .insert(userVideosTable)\n      .values(\n        toInsert.map((video) => ({\n          userId: admin.userId,\n          title: video.title,\n          creator: video.creator,\n          creatorHandle: video.creatorHandle,\n          videoUrl: video.videoUrl,\n          thumbnailUrl: video.thumbnailUrl,\n          thumbnailKey: video.thumbnailKey,\n          species: video.species,\n          category: video.category,\n          description: video.description,\n          sourcePlatform: video.sourcePlatform,\n          sourceVideoId: video.sourceVideoId,\n        })),\n      )\n      .returning({ id: userVideosTable.id });\n\n    res.status(201).json({\n      inserted: inserted.length,\n      skipped,\n      ids: inserted.map((row) => row.id),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: batch seed insert failed\");\n    res.status(500).json({ error: \"Failed to batch seed videos\" });\n  }\n});\n\nrouter.post(\"/library/videos/batch-links\", requireModerator, async (req: Request, res: Response) => {\n  const admin = getAdminUser(req);\n  if (!admin) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const { urls, category, defaultTitle } = (req.body ?? {}) as {\n    urls?: unknown;\n    category?: unknown;\n    defaultTitle?: unknown;\n  };\n\n  if (!Array.isArray(urls) || urls.length === 0) {\n    res.status(400).json({ error: \"urls must be a non-empty array\" });\n    return;\n  }\n\n  const allowedCategories = [\"hooks\", \"shots\", \"both\", \"hunting\", \"fishing\", \"unassigned\"];\n  const cat =\n    typeof category === \"string\" && allowedCategories.includes(category) ? category : \"both\";\n  const titleFallback = typeof defaultTitle === \"string\" && defaultTitle.trim()\n    ? defaultTitle.trim()\n    : \"Linked video\";\n\n  const cleanUrls = urls\n    .map((u) => (typeof u === \"string\" ? u.trim() : \"\"))\n    .filter((u) => u.length > 0 && u.length <= 2000);\n\n  if (cleanUrls.length === 0) {\n    res.status(400).json({ error: \"No valid URLs provided\" });\n    return;\n  }\n\n  try {\n    const existingRows = await db\n      .select({ id: userVideosTable.id, videoUrl: userVideosTable.videoUrl })\n      .from(userVideosTable);\n    const keyMap = buildExistingUrlKeyMap(existingRows);\n    const { newUrls, skipped } = filterDuplicateUrls(cleanUrls, keyMap);\n\n    if (newUrls.length === 0) {\n      res.status(409).json({\n        error: \"All URLs are already in the library\",\n        inserted: 0,\n        skipped: skipped.length,\n        skippedUrls: skipped,\n        ids: [],\n      });\n      return;\n    }\n\n    const [profile] = await db\n      .select({ email: authUserTable.email, name: authUserTable.name })\n      .from(authUserTable)\n      .where(eq(authUserTable.id, admin.userId))\n      .limit(1);\n\n    const creator = profile?.name?.trim() || \"Hook N Bone\";\n    const handle = `@${(profile?.email?.split(\"@\")[0] ?? \"admin\").replace(/[^a-z0-9_]/gi, \"\")}`;\n\n    const inserted = await db\n      .insert(userVideosTable)\n      .values(\n        newUrls.map((videoUrl) => ({\n          userId: admin.userId,\n          title: titleFallback,\n          creator,\n          creatorHandle: handle,\n          videoUrl,\n          category: cat,\n          sourcePlatform: videoUrl.includes(\"youtube\") || videoUrl.includes(\"youtu.be\")\n            ? \"youtube\"\n            : \"external\",\n        })),\n      )\n      .returning({ id: userVideosTable.id });\n\n    res.status(201).json({\n      inserted: inserted.length,\n      skipped: skipped.length,\n      skippedUrls: skipped,\n      ids: inserted.map((r) => r.id),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: batch link insert failed\");\n    res.status(500).json({ error: \"Failed to batch insert links\" });\n  }\n});\n\nrouter.post(\"/library/videos/register-upload\", requireModerator, async (req: Request, res: Response) => {\n  const admin = getAdminUser(req);\n  if (!admin) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const body = (req.body ?? {}) as {\n    title?: unknown;\n    videoUrl?: unknown;\n    thumbnailUrl?: unknown;\n    category?: unknown;\n    species?: unknown;\n    description?: unknown;\n  };\n\n  if (typeof body.videoUrl !== \"string\" || body.videoUrl.length === 0 || body.videoUrl.length > 2000) {\n    res.status(400).json({ error: \"videoUrl is required\" });\n    return;\n  }\n\n  const title = typeof body.title === \"string\" && body.title.trim() ? body.title.trim() : \"Uploaded video\";\n  const allowedCategories = [\"hooks\", \"shots\", \"both\", \"hunting\", \"fishing\", \"unassigned\"];\n  const category =\n    typeof body.category === \"string\" && allowedCategories.includes(body.category)\n      ? body.category\n      : \"both\";\n\n  try {\n    const existingRows = await db\n      .select({ id: userVideosTable.id, videoUrl: userVideosTable.videoUrl })\n      .from(userVideosTable);\n    const duplicate = await findExistingVideoByUrl(body.videoUrl, existingRows);\n    if (duplicate) {\n      res.status(409).json({\n        error: \"Video already exists in the library\",\n        existingId: duplicate.id,\n        duplicateKey: duplicateKeyForUrl(body.videoUrl),\n      });\n      return;\n    }\n\n    const [profile] = await db\n      .select({ email: authUserTable.email, name: authUserTable.name })\n      .from(authUserTable)\n      .where(eq(authUserTable.id, admin.userId))\n      .limit(1);\n\n    const creator = profile?.name?.trim() || \"Hook N Bone\";\n    const handle = `@${(profile?.email?.split(\"@\")[0] ?? \"admin\").replace(/[^a-z0-9_]/gi, \"\")}`;\n\n    const [row] = await db\n      .insert(userVideosTable)\n      .values({\n        userId: admin.userId,\n        title,\n        creator,\n        creatorHandle: handle,\n        videoUrl: body.videoUrl,\n        thumbnailUrl: typeof body.thumbnailUrl === \"string\" ? body.thumbnailUrl : null,\n        category,\n        species: typeof body.species === \"string\" ? body.species.trim() || null : null,\n        description: typeof body.description === \"string\" ? body.description.trim() || null : null,\n        sourcePlatform: \"upload\",\n        videoFormat: inferVideoFormatForUpload(body.videoUrl),\n      })\n      .returning({ id: userVideosTable.id });\n\n    res.status(201).json({ id: row?.id });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: register upload failed\");\n    res.status(500).json({ error: \"Failed to register upload\" });\n  }\n});\n\nrouter.post(\"/library/hashtags/action\", requireModerator, async (req: Request, res: Response) => {\n  const { action, from, to, tag } = (req.body ?? {}) as {\n    action?: unknown;\n    from?: unknown;\n    to?: unknown;\n    tag?: unknown;\n  };\n\n  const normalize = (v: unknown) => (typeof v === \"string\" ? v.trim().toLowerCase() : \"\");\n  const source = normalize(from || tag);\n  const target = normalize(to);\n\n  if (!source) {\n    res.status(400).json({ error: \"from or tag is required\" });\n    return;\n  }\n\n  try {\n    const rows = await db.select().from(userVideosTable);\n\n    if (action === \"delete\") {\n      let affected = 0;\n      for (const row of rows) {\n        const tags = extractVideoHashtags(row.species, row.description);\n        if (!tags.includes(source)) continue;\n        const nextTags = tags.filter((t) => t !== source);\n        await db\n          .update(userVideosTable)\n          .set({\n            species: nextTags[0] ?? null,\n            description: row.description?.replace(new RegExp(`#${source}\\\\b`, \"gi\"), \"\").trim() || null,\n          })\n          .where(eq(userVideosTable.id, row.id));\n        affected += 1;\n      }\n      res.json({ success: true, affected });\n      return;\n    }\n\n    if (action === \"rename\") {\n      if (!target) {\n        res.status(400).json({ error: \"to is required for rename\" });\n        return;\n      }\n      let affected = 0;\n      for (const row of rows) {\n        const tags = extractVideoHashtags(row.species, row.description);\n        if (!tags.includes(source)) continue;\n        const nextTags = tags.map((t) => (t === source ? target : t));\n        await db\n          .update(userVideosTable)\n          .set({\n            species: nextTags[0] ?? null,\n            description: row.description?.replace(new RegExp(`#${source}\\\\b`, \"gi\"), `#${target}`) ?? null,\n          })\n          .where(eq(userVideosTable.id, row.id));\n        affected += 1;\n      }\n      res.json({ success: true, affected });\n      return;\n    }\n\n    if (action === \"merge\") {\n      if (!target) {\n        res.status(400).json({ error: \"to is required for merge\" });\n        return;\n      }\n      let affected = 0;\n      for (const row of rows) {\n        const tags = extractVideoHashtags(row.species, row.description);\n        if (!tags.includes(source)) continue;\n        const merged = [...new Set(tags.filter((t) => t !== source).concat(target))];\n        await db\n          .update(userVideosTable)\n          .set({\n            species: merged[0] ?? null,\n            description: row.description?.replace(new RegExp(`#${source}\\\\b`, \"gi\"), `#${target}`) ?? null,\n          })\n          .where(eq(userVideosTable.id, row.id));\n        affected += 1;\n      }\n      res.json({ success: true, affected });\n      return;\n    }\n\n    res.status(400).json({ error: \"Invalid hashtag action\" });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: hashtag action failed\");\n    res.status(500).json({ error: \"Hashtag action failed\" });\n  }\n});\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// PLATFORM SETTINGS \u2014 persisted in admin_cache (admin only)\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst PLATFORM_SETTINGS_KEY = \"platform_settings\";\nconst LEGAL_DOCUMENTS_KEY = \"legal_documents\";\nconst COMMUNITY_EVENTS_KEY = \"community_events\";\nconst PAGE_CONTENT_KEY = \"page_content\";\n\nasync function readAdminCache<T>(key: string, fallback: T): Promise<T> {\n  const [row] = await db\n    .select()\n    .from(adminCacheTable)\n    .where(eq(adminCacheTable.key, key))\n    .limit(1);\n  if (!row?.dataJson) return fallback;\n  try {\n    return JSON.parse(row.dataJson) as T;\n  } catch {\n    return fallback;\n  }\n}\n\nasync function writeAdminCache(key: string, value: unknown): Promise<void> {\n  const dataJson = JSON.stringify(value);\n  await db\n    .insert(adminCacheTable)\n    .values({ key, dataJson, fetchedAt: new Date(), ttlMs: 0 })\n    .onConflictDoUpdate({\n      target: adminCacheTable.key,\n      set: { dataJson, fetchedAt: new Date() },\n    });\n}\n\nconst DEFAULT_PLATFORM_SETTINGS = {\n  pauseRegistrations: false,\n  disableUploads: false,\n  maintenanceMode: false,\n  showFeaturedContests: true,\n};\n\nconst DEFAULT_LEGAL_DOCUMENTS = {\n  termsOfService: \"\",\n  privacyPolicy: \"\",\n  tosVersion: \"2026-05\",\n};\n\nrouter.get(\"/settings\", requireAdmin, async (_req, res) => {\n  try {\n    const settings = await readAdminCache(PLATFORM_SETTINGS_KEY, DEFAULT_PLATFORM_SETTINGS);\n    res.json(settings);\n  } catch (err) {\n    _req.log?.error({ err }, \"Admin: failed to load settings\");\n    res.status(500).json({ error: \"Failed to load settings\" });\n  }\n});\n\nrouter.patch(\"/settings\", requireAdmin, async (req, res) => {\n  try {\n    const current = await readAdminCache(PLATFORM_SETTINGS_KEY, DEFAULT_PLATFORM_SETTINGS);\n    const body = (req.body ?? {}) as Partial<typeof DEFAULT_PLATFORM_SETTINGS>;\n    const next = {\n      pauseRegistrations: body.pauseRegistrations ?? current.pauseRegistrations,\n      disableUploads: body.disableUploads ?? current.disableUploads,\n      maintenanceMode: body.maintenanceMode ?? current.maintenanceMode,\n      showFeaturedContests: body.showFeaturedContests ?? current.showFeaturedContests,\n    };\n    await writeAdminCache(PLATFORM_SETTINGS_KEY, next);\n    res.json(next);\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to update settings\");\n    res.status(500).json({ error: \"Failed to update settings\" });\n  }\n});\n\nrouter.get(\"/settings/feed-platforms\", requireAdmin, async (_req, res) => {\n  try {\n    const [settings, counts] = await Promise.all([\n      getFeedPlatformSettings(),\n      countVideosByPlatform(),\n    ]);\n    res.json({ settings, counts });\n  } catch (err) {\n    _req.log?.error({ err }, \"Admin: failed to load feed platform settings\");\n    res.status(500).json({ error: \"Failed to load feed platform settings\" });\n  }\n});\n\nrouter.patch(\"/settings/feed-platforms\", requireAdmin, async (req, res) => {\n  const body = (req.body ?? {}) as Partial<\n    Record<FeedPlatformKey, { enabled: boolean }> & { platforms?: Record<string, { enabled: boolean }> }\n  >;\n  try {\n    const patch =\n      body.platforms ??\n      (Object.fromEntries(\n        ([\"youtube\", \"tiktok\", \"instagram\", \"vimeo\", \"upload\", \"other\"] as FeedPlatformKey[])\n          .filter((k) => body[k] != null)\n          .map((k) => [k, body[k]!]),\n      ) as Partial<Record<FeedPlatformKey, { enabled: boolean }>>);\n\n    const user = await getSessionUser(req);\n    const updatedBy = user?.email ?? user?.userId ?? \"admin\";\n    const settings = await saveFeedPlatformSettings(patch, updatedBy);\n    const counts = await countVideosByPlatform();\n    res.json({ settings, counts });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to update feed platform settings\");\n    res.status(500).json({ error: \"Failed to update feed platform settings\" });\n  }\n});\n\nrouter.get(\"/settings/legal\", requireAdmin, async (_req, res) => {\n  try {\n    const docs = await readAdminCache(LEGAL_DOCUMENTS_KEY, DEFAULT_LEGAL_DOCUMENTS);\n    res.json(docs);\n  } catch (err) {\n    _req.log?.error({ err }, \"Admin: failed to load legal documents\");\n    res.status(500).json({ error: \"Failed to load legal documents\" });\n  }\n});\n\nrouter.patch(\"/settings/legal\", requireAdmin, async (req, res) => {\n  const { termsOfService, privacyPolicy, tosVersion } = (req.body ?? {}) as {\n    termsOfService?: unknown;\n    privacyPolicy?: unknown;\n    tosVersion?: unknown;\n  };\n  try {\n    const current = await readAdminCache(LEGAL_DOCUMENTS_KEY, DEFAULT_LEGAL_DOCUMENTS);\n    const next = {\n      termsOfService: typeof termsOfService === \"string\" ? termsOfService : current.termsOfService,\n      privacyPolicy: typeof privacyPolicy === \"string\" ? privacyPolicy : current.privacyPolicy,\n      tosVersion: typeof tosVersion === \"string\" ? tosVersion : current.tosVersion,\n    };\n    await writeAdminCache(LEGAL_DOCUMENTS_KEY, next);\n    res.json(next);\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to update legal documents\");\n    res.status(500).json({ error: \"Failed to update legal documents\" });\n  }\n});\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// COMMUNITY EVENTS \u2014 persisted in admin_cache (admin only)\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ntype CommunityEvent = {\n  id: string;\n  title: string;\n  description: string;\n  bannerUrl: string;\n  startDate: string;\n  endDate: string;\n  status: \"draft\" | \"active\" | \"ended\";\n  submissions: { id: string; user: string; score: number; title: string }[];\n};\n\nconst DEFAULT_EVENTS: CommunityEvent[] = [];\n\nrouter.get(\"/events\", requireAdmin, async (_req, res) => {\n  try {\n    const events = await readAdminCache<CommunityEvent[]>(COMMUNITY_EVENTS_KEY, DEFAULT_EVENTS);\n    res.json(events);\n  } catch (err) {\n    _req.log?.error({ err }, \"Admin: failed to list events\");\n    res.status(500).json({ error: \"Failed to load events\" });\n  }\n});\n\nrouter.post(\"/events\", requireAdmin, async (req, res) => {\n  const { title, description, bannerUrl, startDate, endDate } = (req.body ?? {}) as {\n    title?: unknown;\n    description?: unknown;\n    bannerUrl?: unknown;\n    startDate?: unknown;\n    endDate?: unknown;\n  };\n  if (typeof title !== \"string\" || !title.trim()) {\n    res.status(400).json({ error: \"title is required\" });\n    return;\n  }\n  try {\n    const events = await readAdminCache<CommunityEvent[]>(COMMUNITY_EVENTS_KEY, DEFAULT_EVENTS);\n    const event: CommunityEvent = {\n      id: crypto.randomUUID(),\n      title: title.trim(),\n      description: typeof description === \"string\" ? description.trim() : \"\",\n      bannerUrl: typeof bannerUrl === \"string\" ? bannerUrl.trim() : \"\",\n      startDate: typeof startDate === \"string\" ? startDate : new Date().toISOString().slice(0, 10),\n      endDate: typeof endDate === \"string\" ? endDate : new Date().toISOString().slice(0, 10),\n      status: \"active\",\n      submissions: [],\n    };\n    const next = [event, ...events];\n    await writeAdminCache(COMMUNITY_EVENTS_KEY, next);\n    res.status(201).json(event);\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to create event\");\n    res.status(500).json({ error: \"Failed to create event\" });\n  }\n});\n\nrouter.patch(\"/events/:id\", requireAdmin, async (req, res) => {\n  const eventId = req.params[\"id\"] as string;\n  const body = (req.body ?? {}) as Partial<CommunityEvent>;\n  try {\n    const events = await readAdminCache<CommunityEvent[]>(COMMUNITY_EVENTS_KEY, DEFAULT_EVENTS);\n    const idx = events.findIndex((e) => e.id === eventId);\n    if (idx < 0) {\n      res.status(404).json({ error: \"Event not found\" });\n      return;\n    }\n    const current = events[idx]!;\n    const updated: CommunityEvent = {\n      ...current,\n      title: typeof body.title === \"string\" ? body.title.trim() : current.title,\n      description: typeof body.description === \"string\" ? body.description : current.description,\n      bannerUrl: typeof body.bannerUrl === \"string\" ? body.bannerUrl : current.bannerUrl,\n      startDate: typeof body.startDate === \"string\" ? body.startDate : current.startDate,\n      endDate: typeof body.endDate === \"string\" ? body.endDate : current.endDate,\n      status: body.status ?? current.status,\n      submissions: Array.isArray(body.submissions) ? body.submissions : current.submissions,\n    };\n    events[idx] = updated;\n    await writeAdminCache(COMMUNITY_EVENTS_KEY, events);\n    res.json(updated);\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to update event\");\n    res.status(500).json({ error: \"Failed to update event\" });\n  }\n});\n\nrouter.delete(\"/events/:id\", requireAdmin, async (req, res) => {\n  const eventId = req.params[\"id\"] as string;\n  try {\n    const events = await readAdminCache<CommunityEvent[]>(COMMUNITY_EVENTS_KEY, DEFAULT_EVENTS);\n    const next = events.filter((e) => e.id !== eventId);\n    if (next.length === events.length) {\n      res.status(404).json({ error: \"Event not found\" });\n      return;\n    }\n    await writeAdminCache(COMMUNITY_EVENTS_KEY, next);\n    res.json({ success: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to delete event\");\n    res.status(500).json({ error: \"Failed to delete event\" });\n  }\n});\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// PAGE CMS \u2014 persisted in admin_cache (admin only)\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst DEFAULT_PAGE_CONTENT = {\n  homepage: {\n    heroHeadline: \"Hunt. Fish. Share.\",\n    heroSubheadline: \"Post trophy clips, browse gear, look up any species, and book outfitters \u2014 all without leaving camp.\",\n    ctaLabel: \"Join Free\",\n    ctaLink: \"/sign-up\",\n  },\n  faq: \"\",\n  about: \"\",\n  contact: \"\",\n};\n\nrouter.get(\"/settings/pages\", requireAdmin, async (_req, res) => {\n  try {\n    const pages = await readAdminCache(PAGE_CONTENT_KEY, DEFAULT_PAGE_CONTENT);\n    res.json(pages);\n  } catch (err) {\n    _req.log?.error({ err }, \"Admin: failed to load page content\");\n    res.status(500).json({ error: \"Failed to load page content\" });\n  }\n});\n\nrouter.patch(\"/settings/pages\", requireAdmin, async (req, res) => {\n  try {\n    const current = await readAdminCache(PAGE_CONTENT_KEY, DEFAULT_PAGE_CONTENT);\n    const body = (req.body ?? {}) as Partial<typeof DEFAULT_PAGE_CONTENT>;\n    const next = {\n      homepage: {\n        heroHeadline:\n          typeof body.homepage?.heroHeadline === \"string\"\n            ? body.homepage.heroHeadline\n            : current.homepage.heroHeadline,\n        heroSubheadline:\n          typeof body.homepage?.heroSubheadline === \"string\"\n            ? body.homepage.heroSubheadline\n            : current.homepage.heroSubheadline,\n        ctaLabel:\n          typeof body.homepage?.ctaLabel === \"string\"\n            ? body.homepage.ctaLabel\n            : current.homepage.ctaLabel,\n        ctaLink:\n          typeof body.homepage?.ctaLink === \"string\"\n            ? body.homepage.ctaLink\n            : current.homepage.ctaLink,\n      },\n      faq: typeof body.faq === \"string\" ? body.faq : current.faq,\n      about: typeof body.about === \"string\" ? body.about : current.about,\n      contact: typeof body.contact === \"string\" ? body.contact : current.contact,\n    };\n    await writeAdminCache(PAGE_CONTENT_KEY, next);\n    res.json(next);\n  } catch (err) {\n    req.log?.error({ err }, \"Admin: failed to update page content\");\n    res.status(500).json({ error: \"Failed to update page content\" });\n  }\n});\n\nexport default router;\n", "import { db } from \"@workspace/db\";\nimport {\n  gearCatalogTable,\n  usedListingsTable,\n  moderationFlagsTable,\n  outfittersTable,\n} from \"@workspace/db/schema\";\nimport { sql } from \"drizzle-orm\";\nimport type { AnyPgTable } from \"drizzle-orm/pg-core\";\nimport { logger } from \"../lib/logger\";\n\nasync function countRows(table: AnyPgTable): Promise<number> {\n  const result = await db.select({ count: sql<string>`count(*)` }).from(table);\n  return Number(result[0]?.count ?? 0);\n}\n\n// \u2500\u2500 Gear catalog (35 items) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst gearSeed: (typeof gearCatalogTable.$inferInsert)[] = [\n  { id: \"g1\",  name: \"Mathews Phase 4 Compound Bow\",                  brand: \"Mathews\",        category: \"hunting\", subcategory: \"Archery\",     price: 1099, featured: true,  position: 0  },\n  { id: \"g2\",  name: \"Hoyt Carbon RX-8 Ultra\",                        brand: \"Hoyt\",           category: \"hunting\", subcategory: \"Archery\",     price: 1549, featured: false, position: 1  },\n  { id: \"g3\",  name: \"Vortex Diamondback HD 10x42\",                   brand: \"Vortex\",         category: \"hunting\", subcategory: \"Optics\",      price: 299,  featured: true,  position: 2  },\n  { id: \"g4\",  name: \"Leupold VX-3HD 4.5-14x40\",                     brand: \"Leupold\",        category: \"hunting\", subcategory: \"Optics\",      price: 599,  featured: false, position: 3  },\n  { id: \"g5\",  name: \"Sig Sauer KILO2400BDX Rangefinder\",             brand: \"Sig Sauer\",      category: \"hunting\", subcategory: \"Optics\",      price: 449,  featured: false, position: 4  },\n  { id: \"g6\",  name: \"Lone Wolf Alpha Tree Stand\",                     brand: \"Lone Wolf\",      category: \"hunting\", subcategory: \"Tree Stands\", price: 399,  featured: true,  position: 5  },\n  { id: \"g7\",  name: \"Summit Viper SD Climbing Stand\",                 brand: \"Summit\",         category: \"hunting\", subcategory: \"Tree Stands\", price: 279,  featured: false, position: 6  },\n  { id: \"g8\",  name: \"Primos Hunting Blind Double Bull SurroundView\",  brand: \"Primos\",         category: \"hunting\", subcategory: \"Blinds\",      price: 349,  featured: false, position: 7  },\n  { id: \"g9\",  name: \"Sitka Gear Kelvin Down Hoody\",                  brand: \"Sitka\",          category: \"hunting\", subcategory: \"Apparel\",     price: 329,  featured: true,  position: 8  },\n  { id: \"g10\", name: \"Under Armour Ridge Reaper GORE-TEX\",             brand: \"Under Armour\",   category: \"hunting\", subcategory: \"Apparel\",     price: 249,  featured: false, position: 9  },\n  { id: \"g11\", name: \"Mossy Oak Camo Base Layer Set\",                  brand: \"Mossy Oak\",      category: \"hunting\", subcategory: \"Apparel\",     price: 79,   featured: false, position: 10 },\n  { id: \"g12\", name: \"Flextone Thunder Cluck Turkey Call\",             brand: \"Flextone\",       category: \"hunting\", subcategory: \"Calls\",       price: 28,   featured: false, position: 11 },\n  { id: \"g13\", name: \"Primos Hunting Elk Bugle Tube\",                  brand: \"Primos\",         category: \"hunting\", subcategory: \"Calls\",       price: 45,   featured: false, position: 12 },\n  { id: \"g14\", name: \"Illusion System Black Rack Deer Call\",           brand: \"Illusion\",       category: \"hunting\", subcategory: \"Calls\",       price: 36,   featured: false, position: 13 },\n  { id: \"g15\", name: \"Wildgame Innovations Encounter Trail Camera\",    brand: \"Wildgame\",       category: \"hunting\", subcategory: \"Trail Cams\",  price: 89,   featured: false, position: 14 },\n  { id: \"g16\", name: \"Stealth Cam G42NG No-Glow Trail Camera\",         brand: \"Stealth Cam\",    category: \"hunting\", subcategory: \"Trail Cams\",  price: 129,  featured: true,  position: 15 },\n  { id: \"g17\", name: \"Carbon Express Maxima RED SD Arrows (12pk)\",     brand: \"Carbon Express\", category: \"hunting\", subcategory: \"Archery\",     price: 129,  featured: false, position: 16 },\n  { id: \"g18\", name: \"Muzzy Trocar HB Broadheads (3pk)\",               brand: \"Muzzy\",          category: \"hunting\", subcategory: \"Archery\",     price: 42,   featured: false, position: 17 },\n  { id: \"g19\", name: \"Shimano Stradic FL 2500 Spinning Reel\",          brand: \"Shimano\",        category: \"fishing\", subcategory: \"Reels\",       price: 229,  featured: true,  position: 18 },\n  { id: \"g20\", name: \"Penn Battle III 3000 Spinning Reel\",             brand: \"Penn\",           category: \"fishing\", subcategory: \"Reels\",       price: 119,  featured: true,  position: 19 },\n  { id: \"g21\", name: \"Daiwa BG MQ 4000D Spinning Reel\",                brand: \"Daiwa\",          category: \"fishing\", subcategory: \"Reels\",       price: 179,  featured: false, position: 20 },\n  { id: \"g22\", name: 'St. Croix Mojo Bass Casting Rod 7\\'2\"',          brand: \"St. Croix\",      category: \"fishing\", subcategory: \"Rods\",        price: 149,  featured: false, position: 21 },\n  { id: \"g23\", name: 'Ugly Stik GX2 Spinning Rod 6\\'6\"',               brand: \"Ugly Stik\",      category: \"fishing\", subcategory: \"Rods\",        price: 49,   featured: true,  position: 22 },\n  { id: \"g24\", name: \"G. Loomis NRX+ Salmon/Steelhead Rod\",            brand: \"G. Loomis\",      category: \"fishing\", subcategory: \"Rods\",        price: 499,  featured: true,  position: 23 },\n  { id: \"g25\", name: \"Rapala Original Floating Lure 11cm\",             brand: \"Rapala\",         category: \"fishing\", subcategory: \"Lures\",       price: 9,    featured: false, position: 24 },\n  { id: \"g26\", name: \"Strike King KVD Perfect Plastic Jig\",            brand: \"Strike King\",    category: \"fishing\", subcategory: \"Lures\",       price: 7,    featured: false, position: 25 },\n  { id: \"g27\", name: \"Zoom Bait Super Fluke Soft Plastic (10pk)\",      brand: \"Zoom Bait\",      category: \"fishing\", subcategory: \"Lures\",       price: 6,    featured: false, position: 26 },\n  { id: \"g28\", name: \"Humminbird HELIX 7 CHIRP GPS G4\",                brand: \"Humminbird\",     category: \"fishing\", subcategory: \"Electronics\", price: 599,  featured: true,  position: 27 },\n  { id: \"g29\", name: \"Garmin Striker Plus 7cv Fish Finder\",            brand: \"Garmin\",         category: \"fishing\", subcategory: \"Electronics\", price: 399,  featured: false, position: 28 },\n  { id: \"g30\", name: \"PowerPro Braided Spectra Fiber 30lb 300yd\",      brand: \"PowerPro\",       category: \"fishing\", subcategory: \"Line\",        price: 29,   featured: true,  position: 29 },\n  { id: \"g31\", name: \"Seaguar InvizX Fluorocarbon 200yd 12lb\",         brand: \"Seaguar\",        category: \"fishing\", subcategory: \"Line\",        price: 22,   featured: false, position: 30 },\n  { id: \"g32\", name: \"Plano Guide Series Tackle Bag 3700\",             brand: \"Plano\",          category: \"fishing\", subcategory: \"Storage\",     price: 79,   featured: false, position: 31 },\n  { id: \"g33\", name: \"Abu Garcia Revo X Low Profile Baitcaster\",       brand: \"Abu Garcia\",     category: \"fishing\", subcategory: \"Reels\",       price: 129,  featured: false, position: 32 },\n  { id: \"g34\", name: \"Tactacam Solo Xtreme Hunting Camera\",            brand: \"Tactacam\",       category: \"hunting\", subcategory: \"Trail Cams\",  price: 349,  featured: false, position: 33 },\n  { id: \"g35\", name: \"Birchwood Casey Shoot-N-C Targets (60pk)\",       brand: \"Birchwood Casey\",category: \"hunting\", subcategory: \"Accessories\", price: 18,   featured: true,  position: 34 },\n];\n\n// \u2500\u2500 Used listings (8 items) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Fixed reference date so the seed is deterministic across restarts.\nconst REF = new Date(\"2025-01-01T00:00:00Z\");\nfunction daysAgo(n: number): Date {\n  return new Date(REF.getTime() - n * 86_400_000);\n}\n\nconst usedListingsSeed: (typeof usedListingsTable.$inferInsert)[] = [\n  { id: \"u1\", name: \"Mathews VXR 28 Compound Bow \u2014 Complete Setup\", price: 649,  condition: \"Excellent\", seller: \"buckmaster_tx\",   location: \"Austin, TX\",      status: \"pending\",  postedAt: daysAgo(2),  category: \"hunting\" },\n  { id: \"u2\", name: \"Shimano Stradic 2500 \u2014 Barely Used\",           price: 159,  condition: \"Excellent\", seller: \"bass_slayer_ok\",  location: \"Tulsa, OK\",       status: \"pending\",  postedAt: daysAgo(5),  category: \"fishing\" },\n  { id: \"u3\", name: \"Lone Wolf Trophy Hunter Stand\",                 price: 229,  condition: \"Good\",      seller: \"midwest_whitetail\",location: \"St. Louis, MO\",  status: \"approved\", postedAt: daysAgo(7),  category: \"hunting\" },\n  { id: \"u4\", name: \"Vortex Viper HD 10x42 Binos\",                  price: 319,  condition: \"Excellent\", seller: \"elk_country_co\",  location: \"Denver, CO\",      status: \"approved\", postedAt: daysAgo(3),  category: \"hunting\" },\n  { id: \"u5\", name: \"Humminbird Helix 5 with Transducer\",           price: 189,  condition: \"Good\",      seller: \"walleye_king_mn\", location: \"Minneapolis, MN\", status: \"pending\",  postedAt: daysAgo(14), category: \"fishing\" },\n  { id: \"u6\", name: \"Sitka Fanatic Jacket \u2014 Size L\",                price: 219,  condition: \"Good\",      seller: \"mountain_mule_id\",location: \"Boise, ID\",       status: \"approved\", postedAt: daysAgo(4),  category: \"hunting\" },\n  { id: \"u7\", name: \"G. Loomis NRX+ Bass Rod 7'\",                   price: 329,  condition: \"Excellent\", seller: \"tourney_bass_ga\", location: \"Atlanta, GA\",     status: \"pending\",  postedAt: daysAgo(1),  category: \"fishing\" },\n  { id: \"u8\", name: \"Tactacam 5.0 \u2014 3 Seasons Used\",               price: 229,  condition: \"Fair\",      seller: \"whitetail_wi\",    location: \"Green Bay, WI\",   status: \"approved\", postedAt: daysAgo(21), category: \"hunting\" },\n];\n\n// \u2500\u2500 Moderation flags (5 items) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst moderationFlagsSeed: (typeof moderationFlagsTable.$inferInsert)[] = [\n  { id: \"f1\", contentType: \"video\",   contentPreview: \"Trophy buck taken with crossbow at 40 yards\",            reason: \"Inappropriate content / graphic\",   reporter: \"@hunter_jane\",    reportedUser: \"@bigbuck_brad\",    reportedAt: daysAgo(0), status: \"pending\" },\n  { id: \"f2\", contentType: \"message\", contentPreview: \"Selling unregistered firearm \u2014 DM for details...\",       reason: \"Illegal sales / regulated goods\",   reporter: \"@safety_first\",   reportedUser: \"@gun_trader_99\",   reportedAt: daysAgo(0), status: \"pending\" },\n  { id: \"f3\", contentType: \"video\",   contentPreview: \"100lb largemouth caught in private pond \u2014 RECORD!\",      reason: \"Misleading / fake claim\",           reporter: \"@bass_pro_jim\",   reportedUser: \"@fish_lies\",       reportedAt: daysAgo(0), status: \"pending\" },\n  { id: \"f4\", contentType: \"message\", contentPreview: \"Spam: Click here for free hunting gear giveaway!!!\",     reason: \"Spam / phishing\",                   reporter: \"@trail_watch\",    reportedUser: \"@spam_bot_42\",     reportedAt: daysAgo(0), status: \"pending\" },\n  { id: \"f5\", contentType: \"video\",   contentPreview: \"Hunting on private land without permission \u2014 caught on camera\", reason: \"Trespassing / illegal activity\", reporter: \"@landowner_ohio\", reportedUser: \"@trespasser_bill\", reportedAt: daysAgo(1), status: \"pending\" },\n];\n\n// \u2500\u2500 Outfitters (6 items) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst outfittersSeed: (typeof outfittersTable.$inferInsert)[] = [\n  {\n    id: \"o1\",\n    name: \"Whitetail Ridge Outfitters\",\n    guide: \"Jake Morrison\",\n    location: \"Zanesville, OH\",\n    state: \"Ohio\",\n    targetSpecies: [\"Whitetail Deer\", \"Wild Turkey\"],\n    imageKey: \"bow\",\n    photos: [],\n    rating: 4.9,\n    reviewCount: 127,\n    pricePerDay: 450,\n    category: \"hunting\",\n    status: \"active\",\n    featured: true,\n    bio: \"Over 20 years guiding Ohio whitetail hunts. We run a strictly managed 2,400-acre property with trophy bucks every season. Our blind setup, food plots, and trail cameras give you the best shot at a true Ohio giant. All-inclusive packages available.\",\n    email: \"jake@whitetailridge.com\",\n    phone: \"(740) 555-0182\",\n    website: \"https://whitetailridgeoutfitters.com\",\n    yearsInOperation: 21,\n    groupSize: \"1\u20134 hunters\",\n    tripsInclude: [\"Stand/Blind Setup\", \"Field Dressing\", \"Trophy Photos\", \"Lodging\", \"Meals\", \"Licensing Assistance\"],\n    seasons: [\"September\", \"October\", \"November\", \"December\"],\n    licenses: [\"Ohio Licensed Guide\", \"ATA Member\", \"Fully Insured\"],\n    reviews: [\n      { id: \"r1\", author: \"Buck Wyatt\",    rating: 5, text: \"Jake put me on a 180\\\" 8-point opening morning. Best hunt of my life. I'll be back every year.\", date: \"Nov 2024\", species: \"Whitetail Deer\" },\n      { id: \"r2\", author: \"RutCrazy_Co\",   rating: 5, text: \"Property is managed perfectly. Multiple giants on camera daily. Jake goes above and beyond.\",   date: \"Oct 2024\", species: \"Whitetail Deer\" },\n      { id: \"r3\", author: \"SwampStomp\",    rating: 5, text: \"Third year in a row. Never going anywhere else. Ohio's best whitetail outfitter period.\",       date: \"Nov 2023\", species: \"Whitetail Deer\" },\n    ],\n    submittedAt: new Date(\"2024-01-15T10:00:00Z\"),\n    approvedAt:  new Date(\"2024-01-16T09:00:00Z\"),\n  },\n  {\n    id: \"o2\",\n    name: \"Bayou Blue Charters\",\n    guide: \"Cody Thibodaux\",\n    location: \"Venice, LA\",\n    state: \"Louisiana\",\n    targetSpecies: [\"Redfish\", \"Speckled Trout\", \"Flounder\"],\n    imageKey: \"reel\",\n    photos: [],\n    rating: 4.8,\n    reviewCount: 89,\n    pricePerDay: 600,\n    category: \"fishing\",\n    status: \"active\",\n    featured: true,\n    bio: \"Born and raised in the Venice marsh, I've been running charters for 15 years. Nobody knows these waters like we do. Redfish, specks, and flounder \u2014 we put you on fish guaranteed. Light tackle and fly fishing specialists.\",\n    email: \"cody@bayoubluecharters.com\",\n    phone: \"(985) 555-0247\",\n    website: \"https://bayoubluecharters.com\",\n    yearsInOperation: 15,\n    groupSize: \"1\u20134 anglers\",\n    tripsInclude: [\"All Tackle & Bait\", \"Fish Cleaning\", \"Ice & Cooler\", \"Fishing License\", \"Snacks & Water\"],\n    seasons: [\"January\", \"February\", \"March\", \"April\", \"May\", \"September\", \"October\", \"November\", \"December\"],\n    licenses: [\"USCG Licensed Captain\", \"Louisiana Charter License\", \"Fully Insured\"],\n    reviews: [\n      { id: \"r4\", author: \"Bayou Blade\", rating: 5, text: \"Cody is the real deal. Had us on tailing redfish in 6 inches of water within 20 minutes of launch.\", date: \"Oct 2024\", species: \"Redfish\" },\n      { id: \"r5\", author: \"ReelSavage\",  rating: 4, text: \"Great trip. Tons of specks and a few big reds. Cody knows every cut in that marsh.\",               date: \"Sep 2024\", species: \"Speckled Trout\" },\n    ],\n    submittedAt: new Date(\"2024-02-01T08:00:00Z\"),\n    approvedAt:  new Date(\"2024-02-02T10:00:00Z\"),\n  },\n  {\n    id: \"o3\",\n    name: \"Rocky Top Elk Hunts\",\n    guide: \"Travis Holt\",\n    location: \"Gunnison, CO\",\n    state: \"Colorado\",\n    targetSpecies: [\"Rocky Mountain Elk\", \"Mule Deer\"],\n    imageKey: \"jacket\",\n    photos: [],\n    rating: 5.0,\n    reviewCount: 54,\n    pricePerDay: 850,\n    category: \"hunting\",\n    status: \"active\",\n    featured: true,\n    bio: \"We run horseback and backpack elk hunts deep in the Gunnison National Forest. 100% shot opportunities on bulls 5x5 or better. Archery and rifle seasons. This is the real deal backcountry elk experience \u2014 no road hunting.\",\n    email: \"travis@rockytopelk.com\",\n    phone: \"(970) 555-0391\",\n    website: \"https://rockytopelkhunts.com\",\n    yearsInOperation: 12,\n    groupSize: \"1\u20132 hunters per guide\",\n    tripsInclude: [\"Horseback Transport\", \"Wall Tent Camp\", \"All Meals\", \"Game Care & Quartering\", \"Pack Out\", \"Trophy Photos\"],\n    seasons: [\"August\", \"September\", \"October\", \"November\"],\n    licenses: [\"Colorado Licensed Outfitter\", \"PHASA Member\", \"RMEF Partner\"],\n    reviews: [\n      { id: \"r6\", author: \"MtnGhost\",    rating: 5, text: \"Travis called in a 360\\\" bull on day 3. Got him at 28 yards. Once-in-a-lifetime experience.\", date: \"Sep 2024\", species: \"Rocky Mountain Elk\" },\n      { id: \"r7\", author: \"RandyPeaks\",  rating: 5, text: \"Perfect camp, perfect guides, perfect country. Took a 340\\\" 6x6 OTC. Will be back.\",          date: \"Sep 2023\", species: \"Rocky Mountain Elk\" },\n    ],\n    submittedAt: new Date(\"2024-01-20T12:00:00Z\"),\n    approvedAt:  new Date(\"2024-01-21T14:00:00Z\"),\n  },\n  {\n    id: \"o4\",\n    name: \"Lowcountry Bass Expeditions\",\n    guide: \"Marcus Webb\",\n    location: \"Lake Okeechobee, FL\",\n    state: \"Florida\",\n    targetSpecies: [\"Largemouth Bass\", \"Peacock Bass\"],\n    imageKey: \"reel\",\n    photos: [],\n    rating: 4.7,\n    reviewCount: 203,\n    pricePerDay: 500,\n    category: \"fishing\",\n    status: \"active\",\n    featured: false,\n    bio: \"Lake Okeechobee is the bass fishing capital of the world and I've been fishing it for 18 years. We target trophy largemouth on the flats and in the hydrilla. Peacock bass expeditions in Miami canals also available.\",\n    email: \"marcus@lowcountrybass.com\",\n    phone: \"(561) 555-0458\",\n    website: \"https://lowcountrybassexpeditions.com\",\n    yearsInOperation: 18,\n    groupSize: \"1\u20133 anglers\",\n    tripsInclude: [\"All Tackle Provided\", \"Live Bait\", \"Fish Photos\", \"Cooler & Ice\", \"Soft Drinks\"],\n    seasons: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n    licenses: [\"Florida Licensed Guide\", \"Fully Insured\"],\n    reviews: [\n      { id: \"r8\", author: \"BassGuruTX\", rating: 5, text: \"Marcus put me on a 10.2 lb largemouth in the first hour. Okeechobee is unreal right now.\", date: \"Mar 2024\", species: \"Largemouth Bass\" },\n    ],\n    submittedAt: new Date(\"2024-03-01T09:00:00Z\"),\n    approvedAt:  new Date(\"2024-03-02T11:00:00Z\"),\n  },\n  {\n    id: \"o5\",\n    name: \"High Plains Pronghorn\",\n    guide: \"Wyatt Callahan\",\n    location: \"Casper, WY\",\n    state: \"Wyoming\",\n    targetSpecies: [\"Pronghorn\", \"Mule Deer\", \"Elk\"],\n    imageKey: \"bow\",\n    photos: [],\n    rating: 4.6,\n    reviewCount: 41,\n    pricePerDay: 350,\n    category: \"hunting\",\n    status: \"active\",\n    featured: false,\n    bio: \"Wyoming pronghorn, mule deer, and elk on thousands of acres of private land and adjacent BLM. Spot and stalk archery is our specialty. These wide open plains hold some of the biggest speed goats in North America.\",\n    email: \"wyatt@highplainspronghorn.com\",\n    phone: \"(307) 555-0512\",\n    website: \"https://highplainspronghorn.com\",\n    yearsInOperation: 8,\n    groupSize: \"1\u20133 hunters\",\n    tripsInclude: [\"Lodging\", \"Meals\", \"Licensing Help\", \"Field Dressing\", \"Trophy Photos\"],\n    seasons: [\"August\", \"September\", \"October\"],\n    licenses: [\"Wyoming Licensed Outfitter\", \"Fully Insured\"],\n    reviews: [\n      { id: \"r9\", author: \"PronghornRider\", rating: 5, text: \"Wyatt called the shot at 300 yards. Speed goat dropped in his tracks. Epic country.\", date: \"Aug 2024\", species: \"Pronghorn\" },\n    ],\n    submittedAt: new Date(\"2024-04-01T07:00:00Z\"),\n    approvedAt:  new Date(\"2024-04-02T09:00:00Z\"),\n  },\n  {\n    id: \"o6\",\n    name: \"Chesapeake Bay Trophy Fishing\",\n    guide: \"Ray Donovan\",\n    location: \"Annapolis, MD\",\n    state: \"Maryland\",\n    targetSpecies: [\"Striped Bass\", \"Bluefish\", \"Flounder\"],\n    imageKey: \"reel\",\n    photos: [],\n    rating: 4.8,\n    reviewCount: 156,\n    pricePerDay: 700,\n    category: \"fishing\",\n    status: \"active\",\n    featured: false,\n    bio: \"The Chesapeake Bay is one of the greatest striped bass fisheries in the world. I've been running charter trips here for 22 years. We troll, jig, and live-line for trophy stripers up to 50 lbs+. Full and half-day trips available.\",\n    email: \"ray@chesapeaketrophy.com\",\n    phone: \"(410) 555-0634\",\n    website: \"https://chesapeakebaytrophyfishing.com\",\n    yearsInOperation: 22,\n    groupSize: \"1\u20136 anglers\",\n    tripsInclude: [\"All Tackle & Rigs\", \"Bait\", \"Fishing License\", \"Fish Cleaning\", \"Ice\"],\n    seasons: [\"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\"],\n    licenses: [\"USCG Licensed Captain\", \"Maryland Charter License\", \"Fully Insured\"],\n    reviews: [\n      { id: \"r10\", author: \"FlatHeadKing\", rating: 5, text: \"Ray put us on 40+ lb stripers back to back. The Bay is incredible in the fall run.\", date: \"Oct 2024\", species: \"Striped Bass\" },\n    ],\n    submittedAt: new Date(\"2024-02-15T11:00:00Z\"),\n    approvedAt:  new Date(\"2024-02-16T13:00:00Z\"),\n  },\n];\n\n// \u2500\u2500 Seed runner \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function runSeed(opts?: { rethrow?: boolean }): Promise<void> {\n  try {\n    const [gearCount, usedCount, flagsCount, outfittersCount] = await Promise.all([\n      countRows(gearCatalogTable),\n      countRows(usedListingsTable),\n      countRows(moderationFlagsTable),\n      countRows(outfittersTable),\n    ]);\n\n    const tableCounts = {\n      gear_catalog: gearCount,\n      used_listings: usedCount,\n      moderation_flags: flagsCount,\n      outfitters: outfittersCount,\n    };\n\n    logger.info(tableCounts, \"Seed: row counts before seeding\");\n\n    const insertions: Promise<{ id: string }[]>[] = [];\n    const labels: string[] = [];\n\n    if (gearCount === 0) {\n      insertions.push(db.insert(gearCatalogTable).values(gearSeed).onConflictDoNothing().returning({ id: gearCatalogTable.id }));\n      labels.push(\"gear_catalog\");\n    } else {\n      logger.info({ rows: gearCount }, \"Seed: gear_catalog already populated \u2014 skipped\");\n    }\n\n    if (usedCount === 0) {\n      insertions.push(db.insert(usedListingsTable).values(usedListingsSeed).onConflictDoNothing().returning({ id: usedListingsTable.id }));\n      labels.push(\"used_listings\");\n    } else {\n      logger.info({ rows: usedCount }, \"Seed: used_listings already populated \u2014 skipped\");\n    }\n\n    if (flagsCount === 0) {\n      insertions.push(db.insert(moderationFlagsTable).values(moderationFlagsSeed).onConflictDoNothing().returning({ id: moderationFlagsTable.id }));\n      labels.push(\"moderation_flags\");\n    } else {\n      logger.info({ rows: flagsCount }, \"Seed: moderation_flags already populated \u2014 skipped\");\n    }\n\n    if (outfittersCount === 0) {\n      insertions.push(db.insert(outfittersTable).values(outfittersSeed).onConflictDoNothing().returning({ id: outfittersTable.id }));\n      labels.push(\"outfitters\");\n    } else {\n      logger.info({ rows: outfittersCount }, \"Seed: outfitters already populated \u2014 skipped\");\n    }\n\n    if (insertions.length === 0) {\n      logger.info(\"Seed: all tables already populated \u2014 nothing to insert\");\n      return;\n    }\n\n    const results = await Promise.all(insertions);\n    const inserted = Object.fromEntries(labels.map((label, i) => [label, results[i]!.length]));\n    logger.info(inserted, \"Seed: seeded empty tables\");\n  } catch (err) {\n    logger.error({ err }, \"Seed: failed \u2014 server will continue without seed data\");\n    if (opts?.rethrow) throw err;\n  }\n}\n\n// \u2500\u2500 Seed reset (wipe + re-seed) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function runSeedReset(): Promise<{ gear: number; usedListings: number; moderationFlags: number; outfitters: number }> {\n  await Promise.all([\n    db.delete(gearCatalogTable),\n    db.delete(usedListingsTable),\n    db.delete(moderationFlagsTable),\n    db.delete(outfittersTable),\n  ]);\n\n  const [gear, used, flags, outfitters] = await Promise.all([\n    db.insert(gearCatalogTable).values(gearSeed).returning({ id: gearCatalogTable.id }),\n    db.insert(usedListingsTable).values(usedListingsSeed).returning({ id: usedListingsTable.id }),\n    db.insert(moderationFlagsTable).values(moderationFlagsSeed).returning({ id: moderationFlagsTable.id }),\n    db.insert(outfittersTable).values(outfittersSeed).returning({ id: outfittersTable.id }),\n  ]);\n\n  const counts = {\n    gear: gear.length,\n    usedListings: used.length,\n    moderationFlags: flags.length,\n    outfitters: outfitters.length,\n  };\n\n  logger.info(counts, \"Seed reset: truncated and re-seeded all demo tables\");\n  return counts;\n}\n", "import pino from \"pino\";\n\nconst isProduction = process.env.NODE_ENV === \"production\";\n\nexport const logger = pino({\n  level: process.env.LOG_LEVEL ?? \"info\",\n  redact: [\n    \"req.headers.authorization\",\n    \"req.headers.cookie\",\n    \"res.headers['set-cookie']\",\n  ],\n  ...(isProduction\n    ? {}\n    : {\n        transport: {\n          target: \"pino-pretty\",\n          options: { colorize: true },\n        },\n      }),\n});\n", "// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Feed cache background refresh job\n//\n// Polls every POLL_INTERVAL_MS (10 minutes). On each tick it queries the DB for\n// feed_cache rows that will expire within REFRESH_WINDOW_MS (15 minutes) and\n// re-fetches those categories from YouTube, writing fresh data back to the\n// cache before the stale row is ever served to a user.\n//\n// Timing guarantee:\n//   REFRESH_WINDOW_MS (15 min) > POLL_INTERVAL_MS (10 min), so every\n//   near-expiry row is caught by at least one poll cycle before it expires \u2014\n//   regardless of when the row was last written.\n//\n// An immediate cycle also runs at startup to pre-warm any rows that survived\n// a server restart but are close to their expiry deadline.\n//\n// Daily quota guard:\n//   Each category fetch costs ~100 YouTube Data API units. With 6 categories\n//   and a 10-minute poll interval the job could issue up to 864 fetches/day\n//   during a restart loop. DAILY_REFRESH_CAP (default 60, override via\n//   FEED_REFRESH_DAILY_CAP env var) bounds that to well within the shared\n//   10 000-unit/day quota. The counter is persisted in the `quota_counters`\n//   DB table so it survives process restarts. It resets at UTC midnight via\n//   an atomic UPSERT that checks the stored date_utc against today.\n//   The counter is incremented only after each successful YouTube fetch\n//   (not speculatively before) so that only real API consumption is counted.\n//\n// Design notes:\n// - Uses setInterval; no external scheduler dependency.\n// - Each category is refreshed sequentially to stay within YouTube quota.\n// - All failures are logged and swallowed so the job never crashes the process.\n// - The job is a no-op when YOUTUBE_API_KEY is not set.\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nimport { db, feedCacheTable, quotaCountersTable, quotaDailyLogTable } from \"@workspace/db\";\nimport { user as authUserTable } from \"@workspace/db/schema\";\nimport { and, eq, gt, lt, sql } from \"drizzle-orm\";\n\nimport { sendYouTubeQuotaAlertEmail } from \"../lib/email\";\nimport { logger } from \"../lib/logger\";\nimport { CATEGORIES, fetchCategoryClips } from \"../routes/feed\";\n\nconst POLL_INTERVAL_MS = 10 * 60 * 1000;\nconst REFRESH_WINDOW_MS = 15 * 60 * 1000;\nconst COUNTER_NAME = \"youtube_daily_refreshes\";\nconst DEFAULT_DAILY_REFRESH_CAP = 60;\nconst CAP_OVERRIDE_NAME = \"youtube_daily_refresh_cap_override\";\n\n// \u2500\u2500\u2500 Quota alert state \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Three-layer guard against duplicate alert emails per UTC day:\n//\n//  1. In-memory fast path (quotaAlertSentForDate):\n//     Avoids DB round-trips on subsequent cycles once sent in this process.\n//\n//  2. Single-flight in-process guard (quotaAlertSendInFlight):\n//     Concurrent poll cycles share one in-flight promise instead of each\n//     starting an independent send attempt.\n//\n//  3. Atomic DB claim with release-on-failure (tryClaimAlertSendSlot /\n//     releaseAlertSendSlot):\n//     A PostgreSQL INSERT \u2026 ON CONFLICT \u2026 WHERE date differs RETURNING\n//     ensures exactly one worker wins the slot per UTC day. The slot is\n//     released on transient failures (empty admin list, SendGrid error)\n//     so the next poll cycle can retry.\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst ALERT_COUNTER_NAME = \"youtube_quota_alert_sent\";\nlet quotaAlertSentForDate: string | null = null;\nlet quotaAlertSendInFlight: Promise<void> | null = null;\n\nfunction todayUtc(): string {\n  return new Date().toISOString().slice(0, 10); // \"YYYY-MM-DD\"\n}\n\n/**\n * Fetch all users whose role === \"admin\" and return their primary email\n * addresses. Errors are swallowed; if the lookup fails we return an empty\n * list so the caller can decide.\n */\nasync function fetchAdminEmails(): Promise<string[]> {\n  const emails: string[] = [];\n  try {\n    let offset = 0;\n    const limit = 100;\n    while (true) {\n      const users = await db\n        .select({ email: authUserTable.email, role: authUserTable.role })\n        .from(authUserTable)\n        .where(eq(authUserTable.role, \"admin\"))\n        .limit(limit)\n        .offset(offset);\n      for (const user of users) {\n        if (user.email) emails.push(user.email);\n      }\n      if (users.length < limit) break;\n      offset += limit;\n    }\n  } catch (err) {\n    logger.warn({ err }, \"Feed refresh job: failed to fetch admin emails for quota alert\");\n  }\n  return emails;\n}\n\n/**\n * Atomically claim the alert send slot for today's UTC date.\n *\n * Uses a single PostgreSQL statement:\n *   INSERT \u2026 ON CONFLICT (name) DO UPDATE \u2026 WHERE date differs \u2026 RETURNING name\n *\n * RETURNING is non-empty only when the row was actually written (new insert or\n * date changed from a previous day), so exactly one worker wins the claim per\n * UTC day even under concurrent execution across multiple instances.\n *\n * Returns true if this caller won the claim (should proceed to send).\n */\nasync function tryClaimAlertSendSlot(today: string): Promise<boolean> {\n  const result = await db.execute(sql`\n    INSERT INTO quota_counters (name, date_utc, count)\n    VALUES (${ALERT_COUNTER_NAME}, ${today}, 1)\n    ON CONFLICT (name) DO UPDATE\n      SET date_utc = EXCLUDED.date_utc,\n          count    = 1\n      WHERE quota_counters.date_utc != EXCLUDED.date_utc\n    RETURNING name\n  `);\n  const rows = (result as { rows?: unknown[] }).rows ?? [];\n  return rows.length > 0;\n}\n\n/**\n * Release a previously claimed slot so that the next poll cycle can retry.\n * Sets date_utc to a sentinel past value so the claim check sees \"no slot today\".\n */\nasync function releaseAlertSendSlot(): Promise<void> {\n  await db.execute(sql`\n    UPDATE quota_counters\n    SET date_utc = '0000-00-00', count = 0\n    WHERE name = ${ALERT_COUNTER_NAME}\n  `);\n}\n\n/**\n * Core send logic, extracted so the single-flight guard can wrap it cleanly.\n * This is the only function that actually calls SendGrid.\n */\nasync function doSendQuotaAlert(today: string, usedToday: number, cap: number): Promise<void> {\n  // Atomically claim the send slot. RETURNING empty = another worker holds it.\n  let claimed: boolean;\n  try {\n    claimed = await tryClaimAlertSendSlot(today);\n  } catch (err) {\n    logger.warn({ err }, \"Feed refresh job: could not claim quota alert slot in DB \u2014 will retry next cycle\");\n    return;\n  }\n\n  if (!claimed) {\n    // Slot is taken for today. Warm the in-memory cache so subsequent cycles\n    // skip the DB round-trip.\n    quotaAlertSentForDate = today;\n    return;\n  }\n\n  // We hold the slot. Fetch admin emails.\n  // On failure: release the slot so the next cycle can retry.\n  const adminEmails = await fetchAdminEmails();\n  if (adminEmails.length === 0) {\n    logger.warn(\n      { usedToday, cap },\n      \"Feed refresh job: quota alert slot claimed but no admin emails found \u2014 releasing for retry next cycle\",\n    );\n    await releaseAlertSendSlot().catch((err) => {\n      logger.warn({ err }, \"Feed refresh job: could not release quota alert slot\");\n    });\n    return;\n  }\n\n  const now = new Date();\n  const resetAtUtc = new Date(\n    Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() + 1),\n  ).toISOString();\n\n  // Send and check for confirmed success.\n  // On failure: release the slot so the next cycle can retry.\n  let sent: boolean;\n  try {\n    sent = await sendYouTubeQuotaAlertEmail({ adminEmails, usedToday, cap, resetAtUtc });\n  } catch (err) {\n    logger.warn({ err }, \"Feed refresh job: unexpected error sending quota cap alert \u2014 releasing for retry\");\n    await releaseAlertSendSlot().catch((releaseErr) => {\n      logger.warn({ releaseErr }, \"Feed refresh job: could not release quota alert slot\");\n    });\n    return;\n  }\n\n  if (!sent) {\n    logger.warn(\n      { usedToday, cap, recipients: adminEmails.length },\n      \"Feed refresh job: quota cap alert email delivery failed \u2014 releasing for retry next cycle\",\n    );\n    await releaseAlertSendSlot().catch((releaseErr) => {\n      logger.warn({ releaseErr }, \"Feed refresh job: could not release quota alert slot\");\n    });\n    return;\n  }\n\n  // Confirmed success \u2014 keep the claim in DB and warm the in-memory fast path.\n  quotaAlertSentForDate = today;\n  logger.info(\n    { usedToday, cap, resetAtUtc, recipients: adminEmails.length },\n    \"Feed refresh job: YouTube quota cap alert email sent to admins\",\n  );\n}\n\n/**\n * Send a one-time quota alert email to all admin users for the current UTC day.\n * Subsequent calls within the same day are no-ops \u2014 even across restarts or\n * concurrent workers \u2014 via a three-layer guard:\n *\n *  Layer 1 \u2014 in-memory fast path: returns immediately if already confirmed sent.\n *  Layer 2 \u2014 single-flight guard: concurrent callers share the one in-flight promise.\n *  Layer 3 \u2014 atomic DB claim: only one worker wins the slot per UTC day.\n */\nasync function maybeSendQuotaAlert(usedToday: number, cap: number): Promise<void> {\n  const today = todayUtc();\n\n  // Fast path: already confirmed sent this process lifetime.\n  if (quotaAlertSentForDate === today) return;\n\n  // Single-flight guard: if another call is already in flight, await it and\n  // return \u2014 the first caller's outcome is sufficient.\n  if (quotaAlertSendInFlight !== null) {\n    await quotaAlertSendInFlight.catch(() => {});\n    return;\n  }\n\n  quotaAlertSendInFlight = doSendQuotaAlert(today, usedToday, cap).finally(() => {\n    quotaAlertSendInFlight = null;\n  });\n\n  await quotaAlertSendInFlight.catch((err) => {\n    logger.warn({ err }, \"Feed refresh job: quota alert failed (non-fatal)\");\n  });\n}\n\nfunction getDailyRefreshCap(): number {\n  const raw = process.env[\"FEED_REFRESH_DAILY_CAP\"];\n  if (raw !== undefined) {\n    const parsed = parseInt(raw, 10);\n    if (!isNaN(parsed) && parsed > 0) return parsed;\n  }\n  return DEFAULT_DAILY_REFRESH_CAP;\n}\n\n/**\n * Read the admin-set cap override from the DB.\n * Returns null if no override has been stored yet.\n */\nasync function getCapOverrideFromDb(): Promise<number | null> {\n  const rows = await db\n    .select({ count: quotaCountersTable.count })\n    .from(quotaCountersTable)\n    .where(eq(quotaCountersTable.name, CAP_OVERRIDE_NAME));\n  if (rows.length === 0) return null;\n  const val = rows[0]!.count;\n  return val > 0 ? val : null;\n}\n\n/**\n * Return the effective daily refresh cap: DB override first, then env var, then\n * the compiled-in default.\n */\nasync function getEffectiveCap(): Promise<number> {\n  try {\n    const override = await getCapOverrideFromDb();\n    if (override !== null) return override;\n  } catch (err) {\n    logger.warn({ err }, \"Feed refresh job: failed to read cap override from DB \u2014 falling back to env var/default\");\n  }\n  return getDailyRefreshCap();\n}\n\n/**\n * Persist an admin-set cap override to the DB.\n * Exported so the admin route can call it without duplicating DB logic.\n */\nexport async function setCapOverride(cap: number): Promise<void> {\n  await db\n    .insert(quotaCountersTable)\n    .values({ name: CAP_OVERRIDE_NAME, dateUtc: \"override\", count: cap })\n    .onConflictDoUpdate({\n      target: quotaCountersTable.name,\n      set: { count: cap, dateUtc: \"override\" },\n    });\n}\n\n/**\n * Read the current daily fetch count from the DB for today's UTC date.\n * Returns 0 if no row exists or the stored date is a previous day.\n */\nasync function readDailyCount(): Promise<number> {\n  const today = todayUtc();\n  const rows = await db\n    .select({ dateUtc: quotaCountersTable.dateUtc, count: quotaCountersTable.count })\n    .from(quotaCountersTable)\n    .where(eq(quotaCountersTable.name, COUNTER_NAME));\n\n  if (rows.length === 0 || rows[0]!.dateUtc !== today) {\n    return 0;\n  }\n  return rows[0]!.count;\n}\n\n/**\n * Upsert today's running count into quota_daily_log so admins can see\n * historical usage via the admin dashboard sparkline chart.\n * Failures are non-fatal \u2014 the caller should log and continue.\n */\nasync function snapshotDailyQuota(count: number, cap: number): Promise<void> {\n  const today = todayUtc();\n  await db\n    .insert(quotaDailyLogTable)\n    .values({ dateUtc: today, count, cap })\n    .onConflictDoUpdate({\n      target: quotaDailyLogTable.dateUtc,\n      set: { count, cap },\n    });\n}\n\n/**\n * Atomically increment the daily fetch counter in the DB.\n * If the stored date_utc differs from today, the row is reset to 1\n * (a new day has started). Returns the new count after the increment.\n */\nasync function incrementDailyCount(): Promise<number> {\n  const today = todayUtc();\n  const result = await db\n    .insert(quotaCountersTable)\n    .values({ name: COUNTER_NAME, dateUtc: today, count: 1 })\n    .onConflictDoUpdate({\n      target: quotaCountersTable.name,\n      set: {\n        dateUtc: today,\n        count: sql`CASE WHEN ${quotaCountersTable.dateUtc} = ${today} THEN ${quotaCountersTable.count} + 1 ELSE 1 END`,\n      },\n    })\n    .returning({ count: quotaCountersTable.count });\n\n  return result[0]?.count ?? 1;\n}\n\nasync function refreshStaleCategories(): Promise<void> {\n  const apiKey = process.env[\"YOUTUBE_API_KEY\"];\n  if (!apiKey) {\n    return;\n  }\n\n  const cap = await getEffectiveCap();\n\n  // Read the persisted count from the DB so the cap survives process restarts.\n  let dailyCount: number;\n  try {\n    dailyCount = await readDailyCount();\n  } catch (err) {\n    logger.warn({ err }, \"Feed refresh job: failed to read daily quota counter \u2014 skipping cycle\");\n    return;\n  }\n\n  if (dailyCount >= cap) {\n    logger.warn(\n      { dailyCount, cap, date: todayUtc() },\n      \"Feed refresh job: daily YouTube fetch cap reached \u2014 skipping cycle to protect API quota\",\n    );\n    void maybeSendQuotaAlert(dailyCount, cap).catch((err) => {\n      logger.warn({ err }, \"Feed refresh job: quota alert failed (non-fatal)\");\n    });\n    return;\n  }\n\n  const now = new Date();\n  const windowEnd = new Date(now.getTime() + REFRESH_WINDOW_MS);\n\n  let staleKeys: string[];\n  try {\n    const rows = await db\n      .select({ key: feedCacheTable.key })\n      .from(feedCacheTable)\n      .where(\n        and(\n          gt(feedCacheTable.expiresAt, now),\n          lt(feedCacheTable.expiresAt, windowEnd),\n        ),\n      );\n    staleKeys = rows.map((r) => r.key);\n  } catch (err) {\n    logger.warn({ err }, \"Feed refresh job: DB query for stale rows failed\");\n    return;\n  }\n\n  const catsToRefresh = CATEGORIES.filter((cat) => staleKeys.includes(cat.key));\n\n  if (catsToRefresh.length === 0) {\n    logger.debug(\"Feed refresh job: no categories near expiry, nothing to do\");\n    return;\n  }\n\n  logger.info(\n    { categories: catsToRefresh.map((c) => c.key), dailyCount, cap },\n    \"Feed refresh job: pre-warming expiring categories\",\n  );\n\n  for (let i = 0; i < catsToRefresh.length; i++) {\n    const cat = catsToRefresh[i]!;\n\n    // Re-read latest persisted count before each fetch in case another\n    // process/worker also incremented it.\n    try {\n      dailyCount = await readDailyCount();\n    } catch (err) {\n      logger.warn({ err, category: cat.key }, \"Feed refresh job: failed to read quota counter mid-cycle \u2014 stopping early\");\n      break;\n    }\n\n    if (dailyCount >= cap) {\n      const remaining = catsToRefresh.slice(i).map((c) => c.key);\n      logger.warn(\n        { dailyCount, cap, date: todayUtc(), remainingCategories: remaining },\n        \"Feed refresh job: daily YouTube fetch cap reached mid-cycle \u2014 stopping early\",\n      );\n      void maybeSendQuotaAlert(dailyCount, cap).catch((err) => {\n        logger.warn({ err }, \"Feed refresh job: quota alert failed (non-fatal)\");\n      });\n      break;\n    }\n\n    let fetchSucceeded = false;\n    try {\n      await fetchCategoryClips(apiKey, cat, logger, true);\n      fetchSucceeded = true;\n    } catch (err) {\n      logger.warn({ err, category: cat.key }, \"Feed refresh job: category refresh failed (non-fatal)\");\n    }\n\n    if (fetchSucceeded) {\n      // Increment the persisted counter after a successful fetch.\n      // If the increment itself fails, stop the cycle (fail-closed) so we\n      // don't silently undercount and bypass the daily quota guard.\n      try {\n        dailyCount = await incrementDailyCount();\n      } catch (err) {\n        logger.warn({ err, category: cat.key }, \"Feed refresh job: failed to persist quota counter after fetch \u2014 stopping cycle to protect quota guard\");\n        break;\n      }\n\n      // Snapshot the updated count into the daily log for the admin chart.\n      try {\n        await snapshotDailyQuota(dailyCount, cap);\n      } catch (snapErr) {\n        logger.warn({ snapErr, category: cat.key }, \"Feed refresh job: failed to persist daily quota snapshot (non-fatal)\");\n      }\n\n      logger.debug(\n        { category: cat.key, dailyCount, cap },\n        \"Feed refresh job: category refreshed\",\n      );\n\n      // If this increment crossed the cap threshold, fire the alert immediately\n      // so the transition cap-1 \u2192 cap is never missed even if the cycle ends here.\n      if (dailyCount >= cap) {\n        void maybeSendQuotaAlert(dailyCount, cap).catch((err) => {\n          logger.warn({ err }, \"Feed refresh job: quota alert failed (non-fatal)\");\n        });\n      }\n    }\n  }\n}\n\n/**\n * Return the current daily YouTube quota status.\n * Exported so the admin route can surface it without duplicating DB logic.\n */\nexport async function getYouTubeQuotaStatus(): Promise<{\n  usedToday: number;\n  cap: number;\n  resetAtUtc: string;\n}> {\n  const usedToday = await readDailyCount();\n  const cap = await getEffectiveCap();\n  const now = new Date();\n  // Next UTC midnight\n  const resetAtUtc = new Date(\n    Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() + 1),\n  ).toISOString();\n  return { usedToday, cap, resetAtUtc };\n}\n\nexport function startFeedRefreshJob(): void {\n  logger.info(\n    { intervalMs: POLL_INTERVAL_MS, windowMs: REFRESH_WINDOW_MS, defaultDailyRefreshCap: getDailyRefreshCap() },\n    \"Feed refresh job: starting background cache pre-warmer (effective cap read from DB each cycle)\",\n  );\n\n  // Fire immediately on startup so near-expiry rows after a server restart\n  // are refreshed right away rather than waiting up to POLL_INTERVAL_MS.\n  void refreshStaleCategories().catch((err) => {\n    logger.warn({ err }, \"Feed refresh job: startup cycle failed (non-fatal)\");\n  });\n\n  setInterval(() => {\n    refreshStaleCategories().catch((err) => {\n      logger.warn({ err }, \"Feed refresh job: unhandled error in refresh cycle\");\n    });\n  }, POLL_INTERVAL_MS);\n}\n", "import { logger } from \"./logger.js\";\n\nconst SENDGRID_API_URL = \"https://api.sendgrid.com/v3/mail/send\";\n\ninterface EmailAddress {\n  email: string;\n  name?: string;\n}\n\ninterface SendMailParams {\n  to: EmailAddress | EmailAddress[];\n  from: EmailAddress;\n  subject: string;\n  text: string;\n  html: string;\n}\n\nasync function sendMail(params: SendMailParams): Promise<boolean> {\n  const apiKey = process.env[\"SENDGRID_API_KEY\"];\n  if (!apiKey) {\n    logger.warn(\n      { to: params.to, subject: params.subject },\n      \"Email: SENDGRID_API_KEY not configured \u2014 skipping email send\",\n    );\n    return false;\n  }\n\n  const toAddresses = Array.isArray(params.to) ? params.to : [params.to];\n\n  const body = {\n    personalizations: [{ to: toAddresses }],\n    from: params.from,\n    subject: params.subject,\n    content: [\n      { type: \"text/plain\", value: params.text },\n      { type: \"text/html\", value: params.html },\n    ],\n  };\n\n  try {\n    const response = await fetch(SENDGRID_API_URL, {\n      method: \"POST\",\n      headers: {\n        Authorization: `Bearer ${apiKey}`,\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify(body),\n    });\n\n    if (!response.ok) {\n      const errorText = await response.text().catch(() => \"(no body)\");\n      logger.error(\n        { status: response.status, errorText, subject: params.subject },\n        \"Email: SendGrid request failed\",\n      );\n      return false;\n    }\n    return true;\n  } catch (err) {\n    logger.error({ err, subject: params.subject }, \"Email: unexpected error sending mail\");\n    return false;\n  }\n}\n\nfunction getSender(): EmailAddress {\n  /* Matches the published privacy policy: transactional mail originates\n     from the users@ alias. FROM_EMAIL env still overrides. */\n  const email = process.env[\"FROM_EMAIL\"] ?? \"users@hooknbone.com\";\n  return { email, name: \"Hook N Bone\" };\n}\n\nfunction getAdminEmail(): string {\n  return process.env[\"ADMIN_EMAIL\"] ?? \"admin@hooknbone.com\";\n}\n\nexport async function sendDmcaClaimantConfirmation(opts: {\n  claimantEmail: string;\n  claimantName: string;\n  claimId: number;\n  contentUrl: string;\n}): Promise<void> {\n  const { claimantEmail, claimantName, claimId, contentUrl } = opts;\n  const subject = `DMCA Claim #${claimId} Received \u2014 Hook N Bone`;\n\n  const text = [\n    `Hello ${claimantName},`,\n    \"\",\n    `We have received your DMCA copyright claim (Claim ID: ${claimId}).`,\n    \"\",\n    `Reported content URL: ${contentUrl}`,\n    \"\",\n    \"Our team will review your submission and respond within 3\u20135 business days.\",\n    \"Please keep this email for your records \u2014 your Claim ID is: #\" + claimId,\n    \"\",\n    \"If you have questions, reply to this email.\",\n    \"\",\n    \"\u2014 The Hook N Bone Team\",\n  ].join(\"\\n\");\n\n  const html = `\n    <p>Hello ${escHtml(claimantName)},</p>\n    <p>We have received your DMCA copyright claim (<strong>Claim ID: #${claimId}</strong>).</p>\n    <p><strong>Reported content URL:</strong> ${escHtml(contentUrl)}</p>\n    <p>Our team will review your submission and respond within <strong>3\u20135 business days</strong>.<br>\n    Please keep this email for your records \u2014 your Claim ID is: <strong>#${claimId}</strong>.</p>\n    <p>If you have questions, reply to this email.</p>\n    <p>\u2014 The Hook N Bone Team</p>\n  `.trim();\n\n  await sendMail({\n    to: { email: claimantEmail, name: claimantName },\n    from: getSender(),\n    subject,\n    text,\n    html,\n  });\n}\n\nexport async function sendDmcaAdminNotification(opts: {\n  claimId: number;\n  claimantName: string;\n  claimantEmail: string;\n  contentUrl: string;\n  description: string;\n}): Promise<void> {\n  const { claimId, claimantName, claimantEmail, contentUrl, description } = opts;\n  const subject = `[Admin] New DMCA Claim #${claimId} Submitted`;\n\n  const text = [\n    `A new DMCA claim has been submitted.`,\n    \"\",\n    `Claim ID:        #${claimId}`,\n    `Claimant:        ${claimantName} <${claimantEmail}>`,\n    `Content URL:     ${contentUrl}`,\n    `Description:`,\n    description,\n    \"\",\n    \"Review this claim in the admin panel.\",\n  ].join(\"\\n\");\n\n  const html = `\n    <h2>New DMCA Claim Submitted</h2>\n    <table cellpadding=\"6\" cellspacing=\"0\" border=\"1\" style=\"border-collapse:collapse;font-family:sans-serif;\">\n      <tr><th align=\"left\">Claim ID</th><td>#${claimId}</td></tr>\n      <tr><th align=\"left\">Claimant</th><td>${escHtml(claimantName)} &lt;${escHtml(claimantEmail)}&gt;</td></tr>\n      <tr><th align=\"left\">Content URL</th><td>${escHtml(contentUrl)}</td></tr>\n      <tr><th align=\"left\">Description</th><td style=\"white-space:pre-wrap\">${escHtml(description)}</td></tr>\n    </table>\n    <p>Review this claim in the admin panel.</p>\n  `.trim();\n\n  await sendMail({\n    to: { email: getAdminEmail() },\n    from: getSender(),\n    subject,\n    text,\n    html,\n  });\n}\n\nexport async function sendTosAcceptanceReceipt(opts: {\n  userEmail: string;\n  userName: string;\n  tosVersion: string;\n  acceptedAt: Date;\n}): Promise<void> {\n  const { userEmail, userName, tosVersion, acceptedAt } = opts;\n  const subject = \"Terms of Service Accepted \u2014 Hook N Bone\";\n  const dateStr = acceptedAt.toUTCString();\n\n  const text = [\n    `Hello ${userName},`,\n    \"\",\n    \"This email confirms that you have accepted the Hook N Bone Terms of Service.\",\n    \"\",\n    `TOS Version:  ${tosVersion}`,\n    `Accepted at:  ${dateStr}`,\n    \"\",\n    \"If you did not take this action, please contact our support team immediately.\",\n    \"\",\n    \"\u2014 The Hook N Bone Team\",\n  ].join(\"\\n\");\n\n  const html = `\n    <p>Hello ${escHtml(userName)},</p>\n    <p>This email confirms that you have accepted the Hook N Bone Terms of Service.</p>\n    <table cellpadding=\"6\" cellspacing=\"0\" border=\"1\" style=\"border-collapse:collapse;font-family:sans-serif;\">\n      <tr><th align=\"left\">TOS Version</th><td>${escHtml(tosVersion)}</td></tr>\n      <tr><th align=\"left\">Accepted at</th><td>${escHtml(dateStr)}</td></tr>\n    </table>\n    <p>If you did not take this action, please contact our support team immediately.</p>\n    <p>\u2014 The Hook N Bone Team</p>\n  `.trim();\n\n  await sendMail({\n    to: { email: userEmail, name: userName },\n    from: getSender(),\n    subject,\n    text,\n    html,\n  });\n}\n\nexport async function sendOutfitterApprovalEmail(opts: {\n  outfitterEmail: string;\n  guideName: string;\n  businessName: string;\n  outfitterId: string;\n}): Promise<boolean> {\n  const { outfitterEmail, guideName, businessName, outfitterId } = opts;\n  const baseUrl =\n    process.env[\"MARKETPLACE_URL\"] ?? \"https://hooknbone.com/hook-n-bone-website/\";\n  const listingUrl = `${baseUrl.replace(/\\/$/, \"\")}/outfitters/${outfitterId}`;\n  const subject = \"Your Guide Listing Has Been Approved \u2014 Hook N Bone\";\n\n  const text = [\n    `Hello ${guideName},`,\n    \"\",\n    `Congratulations! Your guide listing for \"${businessName}\" has been approved and is now live on the Hook N Bone marketplace.`,\n    \"\",\n    `View your listing: ${listingUrl}`,\n    \"\",\n    \"Hunters and anglers can now discover and book your services. Make sure your profile is fully up to date to attract the right clients.\",\n    \"\",\n    \"Thank you for joining the Hook N Bone community.\",\n    \"\",\n    \"\u2014 The Hook N Bone Team\",\n  ].join(\"\\n\");\n\n  const html = `\n    <p>Hello ${escHtml(guideName)},</p>\n    <p>Congratulations! Your guide listing for <strong>${escHtml(businessName)}</strong> has been <strong>approved</strong> and is now live on the Hook N Bone marketplace.</p>\n    <p><a href=\"${escHtml(listingUrl)}\" style=\"display:inline-block;padding:10px 20px;background:#f97316;color:#fff;text-decoration:none;border-radius:6px;font-weight:bold;\">View Your Live Listing</a></p>\n    <p>Hunters and anglers can now discover and book your services. Make sure your profile is fully up to date to attract the right clients.</p>\n    <p>Thank you for joining the Hook N Bone community.</p>\n    <p>\u2014 The Hook N Bone Team</p>\n  `.trim();\n\n  return sendMail({\n    to: { email: outfitterEmail, name: guideName },\n    from: getSender(),\n    subject,\n    text,\n    html,\n  });\n}\n\nexport async function sendOutfitterRejectionEmail(opts: {\n  outfitterEmail: string;\n  guideName: string;\n  businessName: string;\n}): Promise<boolean> {\n  const { outfitterEmail, guideName, businessName } = opts;\n  const subject = \"Update on Your Guide Listing Application \u2014 Hook N Bone\";\n\n  const text = [\n    `Hello ${guideName},`,\n    \"\",\n    `Thank you for your interest in listing \"${businessName}\" on Hook N Bone.`,\n    \"\",\n    \"After reviewing your application, we are unable to approve your listing at this time. This may be due to incomplete information, licensing requirements, or our current marketplace criteria.\",\n    \"\",\n    \"We encourage you to review our listing guidelines and reapply. If you have questions or believe this decision was made in error, please reply to this email and our team will be happy to help.\",\n    \"\",\n    \"We appreciate your interest in the Hook N Bone community and hope to work with you in the future.\",\n    \"\",\n    \"\u2014 The Hook N Bone Team\",\n  ].join(\"\\n\");\n\n  const html = `\n    <p>Hello ${escHtml(guideName)},</p>\n    <p>Thank you for your interest in listing <strong>${escHtml(businessName)}</strong> on Hook N Bone.</p>\n    <p>After reviewing your application, we are unable to approve your listing at this time. This may be due to incomplete information, licensing requirements, or our current marketplace criteria.</p>\n    <p>We encourage you to review our listing guidelines and reapply. If you have questions or believe this decision was made in error, please reply to this email and our team will be happy to help.</p>\n    <p>We appreciate your interest in the Hook N Bone community and hope to work with you in the future.</p>\n    <p>\u2014 The Hook N Bone Team</p>\n  `.trim();\n\n  return sendMail({\n    to: { email: outfitterEmail, name: guideName },\n    from: getSender(),\n    subject,\n    text,\n    html,\n  });\n}\n\nexport async function sendYouTubeQuotaAlertEmail(opts: {\n  adminEmails: string[];\n  usedToday: number;\n  cap: number;\n  resetAtUtc: string;\n}): Promise<boolean> {\n  const { adminEmails, usedToday, cap, resetAtUtc } = opts;\n  if (adminEmails.length === 0) return false;\n\n  const subject = \"[Alert] YouTube API Quota Cap Reached \u2014 Hook N Bone\";\n  const resetDisplay = new Date(resetAtUtc).toUTCString();\n\n  const text = [\n    \"The Hook N Bone YouTube feed refresh job has hit the daily API quota cap.\",\n    \"\",\n    `Used today : ${usedToday} / ${cap} refreshes`,\n    `Resets at  : ${resetDisplay} (UTC midnight)`,\n    \"\",\n    \"No further YouTube feed refreshes will run until the counter resets.\",\n    \"The feed will continue serving cached clips until then.\",\n    \"\",\n    \"To raise the cap, update the FEED_REFRESH_DAILY_CAP environment variable and redeploy.\",\n    \"\",\n    \"\u2014 Hook N Bone Automated Alert\",\n  ].join(\"\\n\");\n\n  const html = `\n    <h2 style=\"color:#c2410c;\">[Alert] YouTube API Quota Cap Reached</h2>\n    <p>The Hook N Bone YouTube feed refresh job has hit the daily API quota cap.</p>\n    <table cellpadding=\"8\" cellspacing=\"0\" border=\"1\" style=\"border-collapse:collapse;font-family:monospace;\">\n      <tr><th align=\"left\">Used today</th><td>${usedToday} / ${cap} refreshes</td></tr>\n      <tr><th align=\"left\">Resets at</th><td>${escHtml(resetDisplay)} (UTC midnight)</td></tr>\n    </table>\n    <p>No further YouTube feed refreshes will run until the counter resets.<br>\n    The feed will continue serving cached clips until then.</p>\n    <p>To raise the cap, update the <code>FEED_REFRESH_DAILY_CAP</code> environment variable and redeploy.</p>\n    <p>\u2014 Hook N Bone Automated Alert</p>\n  `.trim();\n\n  return sendMail({\n    to: adminEmails.map((email) => ({ email })),\n    from: getSender(),\n    subject,\n    text,\n    html,\n  });\n}\n\nfunction escHtml(str: string): string {\n  return str\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&#39;\");\n}\n", "import type { User as SupabaseUser } from \"@supabase/supabase-js\";\nimport { db } from \"@workspace/db\";\nimport { user as usersTable } from \"@workspace/db/schema\";\nimport { eq } from \"drizzle-orm\";\nimport { getSupabaseAdmin } from \"./supabase\";\n\nfunction displayNameFromAuthUser(authUser: SupabaseUser, email: string): string {\n  const meta = (authUser.user_metadata ?? {}) as Record<string, unknown>;\n  return (\n    (meta.full_name as string) ||\n    (meta.name as string) ||\n    [meta.first_name, meta.last_name].filter(Boolean).join(\" \") ||\n    email.split(\"@\")[0]!\n  );\n}\n\n/**\n * Mirror Supabase Auth users that are missing from public.user. Self-signup and\n * dashboard invites can create auth rows without a matching app profile, which\n * makes users invisible in the admin panel until their first authenticated API\n * call runs upsertUserFromSupabase().\n */\nexport async function syncMissingAuthUsers(): Promise<number> {\n  const admin = getSupabaseAdmin();\n\n  const existingRows = await db\n    .select({ id: usersTable.id, email: usersTable.email })\n    .from(usersTable);\n  const byEmail = new Map(\n    existingRows.map((row) => [row.email.toLowerCase(), row.id]),\n  );\n  const byId = new Set(existingRows.map((row) => row.id));\n\n  let synced = 0;\n  let page = 1;\n\n  while (page <= 10) {\n    const { data: authPage, error } = await admin.auth.admin.listUsers({\n      page,\n      perPage: 200,\n    });\n    if (error || !authPage?.users.length) break;\n\n    for (const authUser of authPage.users) {\n      const email = authUser.email?.trim();\n      if (!email) continue;\n\n      const emailKey = email.toLowerCase();\n      if (byId.has(authUser.id) || byEmail.has(emailKey)) continue;\n\n      const name = displayNameFromAuthUser(authUser, email);\n      const [created] = await db\n        .insert(usersTable)\n        .values({\n          id: authUser.id,\n          name,\n          email,\n          emailVerified: !!authUser.email_confirmed_at,\n          role: \"user\",\n          banned: false,\n        })\n        .onConflictDoNothing()\n        .returning({ id: usersTable.id });\n\n      if (created) {\n        byId.add(authUser.id);\n        byEmail.set(emailKey, authUser.id);\n        synced += 1;\n      }\n    }\n\n    if (authPage.users.length < 200) break;\n    page += 1;\n  }\n\n  return synced;\n}\n\n/** Ensure a public.user row exists for an auth user id/email pair. */\nexport async function ensurePublicUserForAuthUser(\n  authUser: SupabaseUser,\n  role: string = \"user\",\n): Promise<string | null> {\n  const email = authUser.email?.trim();\n  if (!email) return null;\n\n  const [byEmail] = await db\n    .select()\n    .from(usersTable)\n    .where(eq(usersTable.email, email))\n    .limit(1);\n  if (byEmail) return byEmail.id;\n\n  const [byId] = await db\n    .select()\n    .from(usersTable)\n    .where(eq(usersTable.id, authUser.id))\n    .limit(1);\n  if (byId) return byId.id;\n\n  const name = displayNameFromAuthUser(authUser, email);\n  const [created] = await db\n    .insert(usersTable)\n    .values({\n      id: authUser.id,\n      name,\n      email,\n      emailVerified: !!authUser.email_confirmed_at,\n      role,\n      banned: false,\n    })\n    .onConflictDoUpdate({\n      target: usersTable.email,\n      set: {\n        name,\n        emailVerified: !!authUser.email_confirmed_at,\n        updatedAt: new Date(),\n      },\n    })\n    .returning({ id: usersTable.id });\n\n  return created?.id ?? authUser.id;\n}\n", "import { Router } from \"express\";\nimport crypto from \"crypto\";\nimport { db } from \"@workspace/db\";\nimport {\n  gearCatalogTable,\n  gearOffersTable,\n  gearClickEventsTable,\n  gearStoresTable,\n  gearImageScrapeJobsTable,\n  videoGearLinksTable,\n} from \"@workspace/db/schema\";\nimport type { GearSpecs } from \"@workspace/db/schema\";\nimport { asc, desc, eq, sql, and, or, ilike, inArray } from \"drizzle-orm\";\nimport { requireAdmin, requireModerator } from \"../lib/authMiddleware\";\nimport {\n  buildAutoSortOrderFromItems,\n  classifyGearItem,\n} from \"@workspace/gear-taxonomy\";\nimport {\n  buildTrackedAffiliateUrl,\n  checkLinkHealth,\n  computeConversionRate,\n} from \"../lib/gearAffiliate\";\nimport { scrapeGearImage } from \"../lib/gearImageScraper\";\nimport {\n  runGearSeedFetch,\n  fetchAmazonCategories,\n  isSeederApiError,\n  type StagedGearItem,\n} from \"../lib/gearSeeder\";\n\nconst router = Router();\n\nfunction logGearAdminError(label: string, err: unknown) {\n  console.error(`[GearAdmin] ${label}:`, err);\n}\n\nfunction gearErrorDetail(err: unknown): string | undefined {\n  if (process.env.NODE_ENV === \"production\") return undefined;\n  return err instanceof Error ? err.message : String(err);\n}\n\nfunction serializeGear(row: typeof gearCatalogTable.$inferSelect) {\n  return {\n    ...row,\n    imageUrls: row.imageUrls ?? [],\n    specs: (row.specs ?? {}) as GearSpecs,\n    createdAt: row.createdAt.toISOString(),\n    updatedAt: row.updatedAt.toISOString(),\n    linkCheckedAt: row.linkCheckedAt?.toISOString() ?? null,\n  };\n}\n\nfunction serializeOffer(row: typeof gearOffersTable.$inferSelect) {\n  return {\n    ...row,\n    createdAt: row.createdAt.toISOString(),\n    linkCheckedAt: row.linkCheckedAt?.toISOString() ?? null,\n  };\n}\n\n// \u2500\u2500 Library list with search/filter \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/library\", requireModerator, async (req, res) => {\n  const q = ((req.query.q as string) || \"\").trim();\n  const category = (req.query.category as string) || \"\";\n  const subcategory = ((req.query.subcategory as string) || \"\").trim();\n  const store = ((req.query.store as string) || \"\").trim();\n  const trackingId = ((req.query.trackingId as string) || \"\").trim();\n  const status = ((req.query.status as string) || \"\").trim();\n\n  try {\n    const conditions = [];\n    if (category === \"hunting\" || category === \"fishing\" || category === \"camping\") {\n      conditions.push(eq(gearCatalogTable.category, category));\n    }\n    if (subcategory) {\n      conditions.push(ilike(gearCatalogTable.subcategory, subcategory));\n    }\n    if (status) conditions.push(eq(gearCatalogTable.status, status));\n    if (q) {\n      const pattern = `%${q}%`;\n      conditions.push(\n        or(\n          ilike(gearCatalogTable.name, pattern),\n          ilike(gearCatalogTable.brand, pattern),\n          ilike(gearCatalogTable.subcategory, pattern),\n          ilike(gearCatalogTable.description, pattern),\n        )!,\n      );\n    }\n    if (store) {\n      conditions.push(ilike(gearCatalogTable.storeName, `%${store}%`));\n    }\n    if (trackingId) {\n      conditions.push(ilike(gearCatalogTable.trackingId, `%${trackingId}%`));\n    }\n\n    const rows = await db\n      .select()\n      .from(gearCatalogTable)\n      .where(conditions.length ? and(...conditions) : undefined)\n      .orderBy(asc(gearCatalogTable.position), desc(gearCatalogTable.updatedAt));\n\n    res.json(rows.map(serializeGear));\n  } catch (err) {\n    logGearAdminError(\"GET /library failed\", err);\n    req.log?.error({ err }, \"GearAdmin: failed to list library\");\n    res.status(500).json({\n      error: \"Failed to load gear library\",\n      detail: gearErrorDetail(err),\n    });\n  }\n});\n\nrouter.get(\"/library/:id\", requireModerator, async (req, res) => {\n  const id = req.params.id as string;\n  try {\n    const [row] = await db.select().from(gearCatalogTable).where(eq(gearCatalogTable.id, id)).limit(1);\n    if (!row) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n    const offers = await db\n      .select()\n      .from(gearOffersTable)\n      .where(eq(gearOffersTable.gearId, id))\n      .orderBy(asc(gearOffersTable.position));\n    res.json({ item: serializeGear(row), offers: offers.map(serializeOffer) });\n  } catch (err) {\n    req.log?.error({ err }, \"GearAdmin: failed to get gear detail\");\n    res.status(500).json({ error: \"Failed to load gear item\" });\n  }\n});\n\nrouter.post(\"/library\", requireAdmin, async (req, res) => {\n  const body = req.body as Record<string, unknown>;\n  const name = typeof body.name === \"string\" ? body.name.trim() : \"\";\n  const brand = typeof body.brand === \"string\" ? body.brand.trim() : \"\";\n  const category = typeof body.category === \"string\" ? body.category : \"\";\n  const subcategory = typeof body.subcategory === \"string\" ? body.subcategory.trim() : \"\";\n  const price = typeof body.price === \"number\" ? body.price : parseFloat(String(body.price ?? \"0\"));\n\n  if (!name || !brand || ![\"hunting\", \"fishing\", \"camping\"].includes(category) || !subcategory || !Number.isFinite(price) || price < 0) {\n    res.status(400).json({ error: \"name, brand, category, subcategory, and price are required\" });\n    return;\n  }\n\n  try {\n    const maxPos = await db\n      .select({ pos: gearCatalogTable.position })\n      .from(gearCatalogTable)\n      .orderBy(desc(gearCatalogTable.position))\n      .limit(1);\n    const nextPos = maxPos[0] ? maxPos[0].pos + 1 : 0;\n    const now = new Date();\n\n    const [row] = await db\n      .insert(gearCatalogTable)\n      .values({\n        id: crypto.randomUUID(),\n        name,\n        brand,\n        category,\n        subcategory,\n        price: Math.round(price),\n        description: typeof body.description === \"string\" ? body.description : \"\",\n        thumbnailUrl: typeof body.thumbnailUrl === \"string\" ? body.thumbnailUrl : \"\",\n        imageUrls: Array.isArray(body.imageUrls) ? (body.imageUrls as string[]) : [],\n        specs: (body.specs && typeof body.specs === \"object\" ? body.specs : {}) as GearSpecs,\n        storeName: typeof body.storeName === \"string\" ? body.storeName : \"\",\n        affiliateUrl: typeof body.affiliateUrl === \"string\" ? body.affiliateUrl : \"\",\n        trackingId: typeof body.trackingId === \"string\" ? body.trackingId : \"\",\n        utmSource: typeof body.utmSource === \"string\" ? body.utmSource : \"hooknbone\",\n        utmMedium: typeof body.utmMedium === \"string\" ? body.utmMedium : \"affiliate\",\n        utmCampaign: typeof body.utmCampaign === \"string\" ? body.utmCampaign : \"official-gear\",\n        status: typeof body.status === \"string\" ? body.status : \"published\",\n        featured: Boolean(body.featured),\n        position: nextPos,\n        updatedAt: now,\n      })\n      .returning();\n\n    res.status(201).json(serializeGear(row!));\n  } catch (err) {\n    req.log?.error({ err }, \"GearAdmin: failed to create gear\");\n    res.status(500).json({ error: \"Failed to create gear item\" });\n  }\n});\n\n/** Classify every item and rebuild catalog display order in one pass. */\nrouter.post(\"/library/organize\", requireModerator, async (req, res) => {\n  try {\n    const rows = await db.select().from(gearCatalogTable).orderBy(asc(gearCatalogTable.position));\n    const now = new Date();\n    let classified = 0;\n\n    for (const row of rows) {\n      const next = classifyGearItem({\n        name: row.name,\n        brand: row.brand,\n        description: row.description,\n        subcategory: row.subcategory,\n        category: row.category,\n      });\n\n      if (next.category !== row.category || next.subcategory !== row.subcategory) {\n        classified++;\n      }\n\n      await db\n        .update(gearCatalogTable)\n        .set({\n          category: next.category,\n          subcategory: next.subcategory,\n          updatedAt: now,\n        })\n        .where(eq(gearCatalogTable.id, row.id));\n    }\n\n    const refreshed = await db.select().from(gearCatalogTable).orderBy(asc(gearCatalogTable.position));\n    const orderedIds = buildAutoSortOrderFromItems(\n      refreshed.map((row) => ({\n        id: row.id,\n        name: row.name,\n        brand: row.brand,\n        description: row.description,\n        subcategory: row.subcategory,\n        category: row.category,\n      })),\n    );\n\n    await db.transaction(async (tx) => {\n      for (let i = 0; i < orderedIds.length; i++) {\n        await tx\n          .update(gearCatalogTable)\n          .set({ position: i, updatedAt: now })\n          .where(eq(gearCatalogTable.id, orderedIds[i]!));\n      }\n    });\n\n    res.json({\n      scanned: rows.length,\n      classified,\n      reordered: orderedIds.length,\n      summary: `${classified} items reclassified \u00B7 ${orderedIds.length} items sorted`,\n    });\n  } catch (err) {\n    logGearAdminError(\"POST /library/organize failed\", err);\n    req.log?.error({ err }, \"GearAdmin: organize catalog failed\");\n    res.status(500).json({ error: \"Failed to organize gear catalog\", detail: gearErrorDetail(err) });\n  }\n});\n\nrouter.patch(\"/library/reorder\", requireModerator, async (req, res) => {\n  const { ids } = req.body ?? {};\n  if (!Array.isArray(ids) || !ids.every((x) => typeof x === \"string\")) {\n    res.status(400).json({ error: \"ids must be an array of strings\" });\n    return;\n  }\n\n  try {\n    const orderedIds = ids as string[];\n    const now = new Date();\n    await db.transaction(async (tx) => {\n      for (let i = 0; i < orderedIds.length; i++) {\n        await tx\n          .update(gearCatalogTable)\n          .set({ position: i, updatedAt: now })\n          .where(eq(gearCatalogTable.id, orderedIds[i]!));\n      }\n\n      if (orderedIds.length > 0) {\n        const remaining = await tx\n          .select({ id: gearCatalogTable.id })\n          .from(gearCatalogTable)\n          .where(\n            sql`${gearCatalogTable.id} != ALL(ARRAY[${sql.join(\n              orderedIds.map((id) => sql`${id}`),\n              sql`, `,\n            )}]::text[])`,\n          )\n          .orderBy(asc(gearCatalogTable.position));\n\n        for (let i = 0; i < remaining.length; i++) {\n          await tx\n            .update(gearCatalogTable)\n            .set({ position: orderedIds.length + i, updatedAt: now })\n            .where(eq(gearCatalogTable.id, remaining[i]!.id));\n        }\n      }\n    });\n\n    const rows = await db\n      .select()\n      .from(gearCatalogTable)\n      .orderBy(asc(gearCatalogTable.position), desc(gearCatalogTable.updatedAt));\n    res.json(rows.map(serializeGear));\n  } catch (err) {\n    logGearAdminError(\"PATCH /library/reorder failed\", err);\n    req.log?.error({ err }, \"GearAdmin: failed to reorder library\");\n    res.status(500).json({ error: \"Failed to reorder gear catalog\" });\n  }\n});\n\nrouter.patch(\"/library/:id\", requireAdmin, async (req, res) => {\n  const id = req.params.id as string;\n  const body = req.body as Record<string, unknown>;\n  const patch: Partial<typeof gearCatalogTable.$inferInsert> = { updatedAt: new Date() };\n\n  if (typeof body.name === \"string\") patch.name = body.name.trim();\n  if (typeof body.brand === \"string\") patch.brand = body.brand.trim();\n  if (typeof body.category === \"string\" && [\"hunting\", \"fishing\", \"camping\"].includes(body.category)) patch.category = body.category;\n  if (typeof body.subcategory === \"string\") patch.subcategory = body.subcategory.trim();\n  if (typeof body.price === \"number\" && Number.isFinite(body.price)) patch.price = Math.round(body.price);\n  if (typeof body.description === \"string\") patch.description = body.description;\n  if (typeof body.thumbnailUrl === \"string\") patch.thumbnailUrl = body.thumbnailUrl;\n  if (Array.isArray(body.imageUrls)) patch.imageUrls = body.imageUrls as string[];\n  if (body.specs && typeof body.specs === \"object\") patch.specs = body.specs as GearSpecs;\n  if (typeof body.storeName === \"string\") patch.storeName = body.storeName;\n  if (typeof body.affiliateUrl === \"string\") patch.affiliateUrl = body.affiliateUrl;\n  if (typeof body.trackingId === \"string\") patch.trackingId = body.trackingId;\n  if (typeof body.utmSource === \"string\") patch.utmSource = body.utmSource;\n  if (typeof body.utmMedium === \"string\") patch.utmMedium = body.utmMedium;\n  if (typeof body.utmCampaign === \"string\") patch.utmCampaign = body.utmCampaign;\n  if (typeof body.status === \"string\") patch.status = body.status;\n  if (typeof body.featured === \"boolean\") patch.featured = body.featured;\n\n  try {\n    const [updated] = await db\n      .update(gearCatalogTable)\n      .set(patch)\n      .where(eq(gearCatalogTable.id, id))\n      .returning();\n    if (!updated) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n    res.json(serializeGear(updated));\n  } catch (err) {\n    req.log?.error({ err }, \"GearAdmin: failed to update gear\");\n    res.status(500).json({ error: \"Failed to update gear item\" });\n  }\n});\n\nrouter.delete(\"/library/:id\", requireAdmin, async (req, res) => {\n  const id = req.params.id as string;\n  try {\n    await db.delete(gearOffersTable).where(eq(gearOffersTable.gearId, id));\n    const [deleted] = await db.delete(gearCatalogTable).where(eq(gearCatalogTable.id, id)).returning({ id: gearCatalogTable.id });\n    if (!deleted) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n    res.status(204).end();\n  } catch (err) {\n    req.log?.error({ err }, \"GearAdmin: failed to delete gear\");\n    res.status(500).json({ error: \"Failed to delete gear item\" });\n  }\n});\n\n// \u2500\u2500 Affiliate stores hub \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/stores\", requireModerator, async (_req, res) => {\n  try {\n    const rows = await db.select().from(gearStoresTable).orderBy(asc(gearStoresTable.name));\n    res.json(rows.map((r) => ({ ...r, createdAt: r.createdAt.toISOString() })));\n  } catch (err) {\n    res.status(500).json({ error: \"Failed to load stores\" });\n  }\n});\n\nrouter.post(\"/stores\", requireAdmin, async (req, res) => {\n  const { name, slug, baseUrl, defaultTrackingId, defaultUtmSource, defaultUtmMedium, defaultUtmCampaign } =\n    req.body as Record<string, unknown>;\n  if (typeof name !== \"string\" || !name.trim() || typeof slug !== \"string\" || !slug.trim()) {\n    res.status(400).json({ error: \"name and slug are required\" });\n    return;\n  }\n  try {\n    const [row] = await db\n      .insert(gearStoresTable)\n      .values({\n        id: crypto.randomUUID(),\n        name: name.trim(),\n        slug: slug.trim().toLowerCase(),\n        baseUrl: typeof baseUrl === \"string\" ? baseUrl : \"\",\n        defaultTrackingId: typeof defaultTrackingId === \"string\" ? defaultTrackingId : \"\",\n        defaultUtmSource: typeof defaultUtmSource === \"string\" ? defaultUtmSource : \"hooknbone\",\n        defaultUtmMedium: typeof defaultUtmMedium === \"string\" ? defaultUtmMedium : \"affiliate\",\n        defaultUtmCampaign: typeof defaultUtmCampaign === \"string\" ? defaultUtmCampaign : \"official-gear\",\n      })\n      .returning();\n    res.status(201).json(row);\n  } catch (err) {\n    req.log?.error({ err }, \"GearAdmin: failed to create store\");\n    res.status(500).json({ error: \"Failed to create store\" });\n  }\n});\n\n// \u2500\u2500 Offers (comparative pricing) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.post(\"/library/:gearId/offers\", requireAdmin, async (req, res) => {\n  const gearId = req.params.gearId as string;\n  const body = req.body as Record<string, unknown>;\n  const storeName = typeof body.storeName === \"string\" ? body.storeName.trim() : \"\";\n  const affiliateUrl = typeof body.affiliateUrl === \"string\" ? body.affiliateUrl.trim() : \"\";\n  const price = typeof body.price === \"number\" ? body.price : parseFloat(String(body.price ?? \"0\"));\n\n  if (!storeName || !affiliateUrl || !Number.isFinite(price)) {\n    res.status(400).json({ error: \"storeName, affiliateUrl, and price are required\" });\n    return;\n  }\n\n  try {\n    const [row] = await db\n      .insert(gearOffersTable)\n      .values({\n        id: crypto.randomUUID(),\n        gearId,\n        storeId: typeof body.storeId === \"string\" ? body.storeId : null,\n        storeName,\n        location: typeof body.location === \"string\" ? body.location : \"US\",\n        price: Math.round(price),\n        currency: typeof body.currency === \"string\" ? body.currency : \"USD\",\n        affiliateUrl,\n        trackingId: typeof body.trackingId === \"string\" ? body.trackingId : \"\",\n        utmSource: typeof body.utmSource === \"string\" ? body.utmSource : \"\",\n        utmMedium: typeof body.utmMedium === \"string\" ? body.utmMedium : \"\",\n        utmCampaign: typeof body.utmCampaign === \"string\" ? body.utmCampaign : \"\",\n        isPrimary: Boolean(body.isPrimary),\n        position: typeof body.position === \"number\" ? body.position : 0,\n      })\n      .returning();\n    res.status(201).json(serializeOffer(row!));\n  } catch (err) {\n    req.log?.error({ err }, \"GearAdmin: failed to create offer\");\n    res.status(500).json({ error: \"Failed to create offer\" });\n  }\n});\n\nrouter.delete(\"/offers/:offerId\", requireAdmin, async (req, res) => {\n  const offerId = req.params.offerId as string;\n  try {\n    const [deleted] = await db.delete(gearOffersTable).where(eq(gearOffersTable.id, offerId)).returning({ id: gearOffersTable.id });\n    if (!deleted) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n    res.status(204).end();\n  } catch (err) {\n    res.status(500).json({ error: \"Failed to delete offer\" });\n  }\n});\n\n// \u2500\u2500 UTM generator \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.post(\"/utm/generate\", requireModerator, async (req, res) => {\n  const { baseUrl, trackingId, utmSource, utmMedium, utmCampaign, utmContent, utmTerm } =\n    req.body as Record<string, unknown>;\n  if (typeof baseUrl !== \"string\" || !baseUrl.trim()) {\n    res.status(400).json({ error: \"baseUrl is required\" });\n    return;\n  }\n  const tracked = buildTrackedAffiliateUrl({\n    baseUrl: baseUrl.trim(),\n    trackingId: typeof trackingId === \"string\" ? trackingId : undefined,\n    utm: {\n      source: typeof utmSource === \"string\" ? utmSource : undefined,\n      medium: typeof utmMedium === \"string\" ? utmMedium : undefined,\n      campaign: typeof utmCampaign === \"string\" ? utmCampaign : undefined,\n      content: typeof utmContent === \"string\" ? utmContent : undefined,\n      term: typeof utmTerm === \"string\" ? utmTerm : undefined,\n    },\n  });\n  res.json({ url: tracked });\n});\n\n// \u2500\u2500 Link health checker \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.post(\"/link-check\", requireModerator, async (req, res) => {\n  const { url, gearId, offerId } = req.body as Record<string, unknown>;\n  if (typeof url !== \"string\" || !url.trim()) {\n    res.status(400).json({ error: \"url is required\" });\n    return;\n  }\n  const result = await checkLinkHealth(url.trim());\n  const now = new Date();\n\n  try {\n    if (typeof gearId === \"string\" && gearId) {\n      await db\n        .update(gearCatalogTable)\n        .set({ linkStatus: result.status, linkCheckedAt: now })\n        .where(eq(gearCatalogTable.id, gearId));\n    }\n    if (typeof offerId === \"string\" && offerId) {\n      await db\n        .update(gearOffersTable)\n        .set({ linkStatus: result.status, linkCheckedAt: now })\n        .where(eq(gearOffersTable.id, offerId));\n    }\n  } catch (err) {\n    req.log?.warn({ err }, \"GearAdmin: failed to persist link check status\");\n  }\n\n  res.json(result);\n});\n\nrouter.post(\"/link-check/bulk\", requireModerator, async (req, res) => {\n  try {\n    const items = await db\n      .select({ id: gearCatalogTable.id, affiliateUrl: gearCatalogTable.affiliateUrl })\n      .from(gearCatalogTable)\n      .where(sql`${gearCatalogTable.affiliateUrl} != ''`);\n    const now = new Date();\n    let active = 0;\n    let broken = 0;\n    for (const item of items) {\n      const result = await checkLinkHealth(item.affiliateUrl);\n      if (result.status === \"active\") active++;\n      else if (result.status === \"broken\") broken++;\n      await db\n        .update(gearCatalogTable)\n        .set({ linkStatus: result.status, linkCheckedAt: now })\n        .where(eq(gearCatalogTable.id, item.id));\n    }\n    res.json({ checked: items.length, active, broken });\n  } catch (err) {\n    req.log?.error({ err }, \"GearAdmin: bulk link check failed\");\n    res.status(500).json({ error: \"Bulk link check failed\" });\n  }\n});\n\n// \u2500\u2500 Analytics dashboard \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/analytics\", requireModerator, async (req, res) => {\n  const days = Math.min(Math.max(parseInt((req.query.days as string) || \"30\", 10) || 30, 1), 365);\n  const since = new Date(Date.now() - days * 24 * 60 * 60 * 1000);\n\n  try {\n    const [totals] = await db\n      .select({\n        totalClicks: sql<number>`coalesce(sum(${gearCatalogTable.clickCount}), 0)::int`,\n        totalImpressions: sql<number>`coalesce(sum(${gearCatalogTable.impressionCount}), 0)::int`,\n        itemCount: sql<number>`count(*)::int`,\n      })\n      .from(gearCatalogTable);\n\n    const topItems = await db\n      .select({\n        id: gearCatalogTable.id,\n        name: gearCatalogTable.name,\n        brand: gearCatalogTable.brand,\n        clickCount: gearCatalogTable.clickCount,\n        impressionCount: gearCatalogTable.impressionCount,\n        conversionRate: gearCatalogTable.conversionRate,\n      })\n      .from(gearCatalogTable)\n      .orderBy(desc(gearCatalogTable.clickCount))\n      .limit(10);\n\n    const recentClicks = await db\n      .select()\n      .from(gearClickEventsTable)\n      .where(sql`${gearClickEventsTable.createdAt} >= ${since}`)\n      .orderBy(desc(gearClickEventsTable.createdAt))\n      .limit(50);\n\n    res.json({\n      totals,\n      topItems,\n      recentClicks: recentClicks.map((e) => ({\n        ...e,\n        createdAt: e.createdAt.toISOString(),\n      })),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"GearAdmin: analytics failed\");\n    res.status(500).json({ error: \"Failed to load analytics\" });\n  }\n});\n\n// \u2500\u2500 Image scrape agent \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.post(\"/scrape-image\", requireModerator, async (req, res) => {\n  const { title, brand, sourceUrl, gearId } = req.body as Record<string, unknown>;\n  if (typeof title !== \"string\" || !title.trim()) {\n    res.status(400).json({ error: \"title is required\" });\n    return;\n  }\n\n  try {\n    const result = await scrapeGearImage({\n      title: title.trim(),\n      brand: typeof brand === \"string\" ? brand : undefined,\n      sourceUrl: typeof sourceUrl === \"string\" ? sourceUrl : undefined,\n    });\n\n    const [job] = await db\n      .insert(gearImageScrapeJobsTable)\n      .values({\n        id: crypto.randomUUID(),\n        gearId: typeof gearId === \"string\" ? gearId : null,\n        query: [brand, title].filter(Boolean).join(\" \"),\n        sourceUrl: result.sourceUrl,\n        candidateUrl: result.candidateUrl,\n        fallbackUrl: result.fallbackUrl,\n        status: result.candidateUrl ? \"pending\" : \"failed\",\n        error: result.error ?? \"\",\n      })\n      .returning();\n\n    res.json({\n      job: { ...job, createdAt: job!.createdAt.toISOString() },\n      ...result,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"GearAdmin: scrape image failed\");\n    res.status(500).json({ error: \"Image scrape failed\" });\n  }\n});\n\nrouter.post(\"/scrape-image/:jobId/approve\", requireAdmin, async (req, res) => {\n  const jobId = req.params.jobId as string;\n  const { gearId } = req.body as Record<string, unknown>;\n  try {\n    const [job] = await db\n      .select()\n      .from(gearImageScrapeJobsTable)\n      .where(eq(gearImageScrapeJobsTable.id, jobId))\n      .limit(1);\n    if (!job) {\n      res.status(404).json({ error: \"Scrape job not found\" });\n      return;\n    }\n    const targetGearId = (typeof gearId === \"string\" ? gearId : job.gearId) ?? \"\";\n    if (!targetGearId || !job.candidateUrl) {\n      res.status(400).json({ error: \"gearId and candidateUrl required\" });\n      return;\n    }\n\n    const [updated] = await db\n      .update(gearCatalogTable)\n      .set({\n        thumbnailUrl: job.candidateUrl,\n        imageUrls: sql`array_append(COALESCE(${gearCatalogTable.imageUrls}, '{}'::text[]), ${job.candidateUrl})`,\n        updatedAt: new Date(),\n      })\n      .where(eq(gearCatalogTable.id, targetGearId))\n      .returning();\n\n    await db\n      .update(gearImageScrapeJobsTable)\n      .set({ status: \"approved\", resolvedAt: new Date() })\n      .where(eq(gearImageScrapeJobsTable.id, jobId));\n\n    res.json({ item: serializeGear(updated!), jobId });\n  } catch (err) {\n    req.log?.error({ err }, \"GearAdmin: approve scrape failed\");\n    res.status(500).json({ error: \"Failed to approve scraped image\" });\n  }\n});\n\nrouter.post(\"/scrape-image/:jobId/reject\", requireAdmin, async (req, res) => {\n  const jobId = req.params.jobId as string;\n  try {\n    await db\n      .update(gearImageScrapeJobsTable)\n      .set({ status: \"rejected\", resolvedAt: new Date() })\n      .where(eq(gearImageScrapeJobsTable.id, jobId));\n    res.json({ ok: true });\n  } catch (err) {\n    res.status(500).json({ error: \"Failed to reject scrape\" });\n  }\n});\n\n// \u2500\u2500 Auto-fetch comparative prices for an item \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.post(\"/library/:gearId/fetch-prices\", requireModerator, async (req, res) => {\n  const gearId = req.params.gearId as string;\n  try {\n    const [item] = await db.select().from(gearCatalogTable).where(eq(gearCatalogTable.id, gearId)).limit(1);\n    if (!item) {\n      res.status(404).json({ error: \"Gear not found\" });\n      return;\n    }\n\n    const stores = await db.select().from(gearStoresTable).where(eq(gearStoresTable.active, true));\n    const created: ReturnType<typeof serializeOffer>[] = [];\n\n    for (const store of stores.slice(0, 5)) {\n      const searchQ = encodeURIComponent(`${item.brand} ${item.name}`);\n      const baseUrl = store.baseUrl.includes(\"amazon\")\n        ? `https://www.amazon.com/s?k=${searchQ}`\n        : `${store.baseUrl}${store.baseUrl.includes(\"?\") ? \"&\" : \"?\"}query=${searchQ}`;\n\n      const tracked = buildTrackedAffiliateUrl({\n        baseUrl,\n        trackingId: store.defaultTrackingId || item.trackingId,\n        utm: {\n          source: store.defaultUtmSource,\n          medium: store.defaultUtmMedium,\n          campaign: store.defaultUtmCampaign,\n          content: item.id,\n        },\n      });\n\n      const jitter = 1 + (Math.random() * 0.12 - 0.06);\n      const [insertedOffer] = await db\n        .insert(gearOffersTable)\n        .values({\n          id: crypto.randomUUID(),\n          gearId,\n          storeId: store.id,\n          storeName: store.name,\n          location: \"US\",\n          price: Math.max(5, Math.round(item.price * jitter)),\n          affiliateUrl: tracked,\n          trackingId: store.defaultTrackingId,\n          utmSource: store.defaultUtmSource,\n          utmMedium: store.defaultUtmMedium,\n          utmCampaign: store.defaultUtmCampaign,\n          isPrimary: false,\n          position: created.length,\n        })\n        .returning();\n      created.push(serializeOffer(insertedOffer!));\n    }\n\n    res.json({ offers: created, source: stores.length ? \"stores\" : \"none\" });\n  } catch (err) {\n    req.log?.error({ err }, \"GearAdmin: fetch prices failed\");\n    res.status(500).json({ error: \"Failed to fetch comparative prices\" });\n  }\n});\n\n// \u2500\u2500 AI Gear Seeder (RapidAPI + ScraperAPI) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/seed/amazon/categories\", requireAdmin, async (req, res) => {\n  try {\n    const categories = await fetchAmazonCategories();\n    res.json({ categories });\n  } catch (err) {\n    if (isSeederApiError(err)) {\n      res.status(err.statusCode).json({ error: err.message });\n      return;\n    }\n    logGearAdminError(\"GET /seed/amazon/categories failed\", err);\n    req.log?.error({ err }, \"GearAdmin: amazon categories failed\");\n    res.status(500).json({ error: \"Failed to load Amazon categories\" });\n  }\n});\n\nrouter.post(\"/seed\", requireAdmin, async (req, res) => {\n  const body = req.body as Record<string, unknown>;\n  const searchQuery = typeof body.searchQuery === \"string\" ? body.searchQuery.trim() : \"\";\n  const targetStore = typeof body.targetStore === \"string\" ? body.targetStore : \"amazon\";\n  const quantity =\n    typeof body.quantity === \"number\"\n      ? body.quantity\n      : parseInt(String(body.quantity ?? \"10\"), 10);\n  const customUrl = typeof body.customUrl === \"string\" ? body.customUrl : undefined;\n  const amazonCategoryId =\n    typeof body.amazonCategoryId === \"string\" ? body.amazonCategoryId.trim() : undefined;\n  const amazonCategoryName =\n    typeof body.amazonCategoryName === \"string\" ? body.amazonCategoryName.trim() : undefined;\n\n  const allowedStores = [\"amazon\", \"basspro\", \"cabelas\", \"generic\"] as const;\n  if (!allowedStores.includes(targetStore as (typeof allowedStores)[number])) {\n    res.status(400).json({ error: \"targetStore must be amazon, basspro, cabelas, or generic\" });\n    return;\n  }\n\n  try {\n    const result = await runGearSeedFetch({\n      searchQuery,\n      targetStore: targetStore as (typeof allowedStores)[number],\n      quantity: Number.isFinite(quantity) ? quantity : 10,\n      customUrl,\n      amazonCategoryId,\n      amazonCategoryName,\n    });\n\n    res.json({\n      stagingList: result.items,\n      meta: {\n        query: result.query,\n        source: result.source,\n        count: result.items.length,\n      },\n    });\n  } catch (err) {\n    if (isSeederApiError(err)) {\n      if (err.retryAfterSec) {\n        res.setHeader(\"Retry-After\", String(err.retryAfterSec));\n      }\n      res.status(err.statusCode).json({ error: err.message });\n      return;\n    }\n    logGearAdminError(\"POST /seed failed\", err);\n    req.log?.error({ err }, \"GearAdmin: seed fetch failed\");\n    res.status(500).json({\n      error: \"Gear seed fetch failed\",\n      detail: gearErrorDetail(err),\n    });\n  }\n});\n\nrouter.post(\"/library/merge-duplicates\", requireAdmin, async (req, res) => {\n  const { keepId, removeIds } = (req.body ?? {}) as {\n    keepId?: unknown;\n    removeIds?: unknown;\n  };\n\n  const keepIdStr = typeof keepId === \"string\" ? keepId.trim() : \"\";\n  if (!keepIdStr) {\n    res.status(400).json({ error: \"keepId is required\" });\n    return;\n  }\n\n  if (!Array.isArray(removeIds) || removeIds.length === 0) {\n    res.status(400).json({ error: \"removeIds must be a non-empty array\" });\n    return;\n  }\n\n  const removeIdList = removeIds\n    .map((v) => (typeof v === \"string\" ? v.trim() : \"\"))\n    .filter((id) => id && id !== keepIdStr);\n  if (removeIdList.length === 0) {\n    res.status(400).json({ error: \"No valid removeIds\" });\n    return;\n  }\n\n  try {\n    const [keepRow] = await db\n      .select()\n      .from(gearCatalogTable)\n      .where(eq(gearCatalogTable.id, keepIdStr))\n      .limit(1);\n    if (!keepRow) {\n      res.status(404).json({ error: \"Keep gear item not found\" });\n      return;\n    }\n\n    const removeRows = await db\n      .select()\n      .from(gearCatalogTable)\n      .where(inArray(gearCatalogTable.id, removeIdList));\n    if (removeRows.length === 0) {\n      res.status(404).json({ error: \"No duplicate gear items found to merge\" });\n      return;\n    }\n\n    let offersMoved = 0;\n    let linksMoved = 0;\n    let clicksMoved = 0;\n\n    await db.transaction(async (tx) => {\n      for (const removeId of removeRows.map((r) => r.id)) {\n        const offerUpdate = await tx\n          .update(gearOffersTable)\n          .set({ gearId: keepIdStr })\n          .where(eq(gearOffersTable.gearId, removeId))\n          .returning({ id: gearOffersTable.id });\n        offersMoved += offerUpdate.length;\n\n        const clickUpdate = await tx\n          .update(gearClickEventsTable)\n          .set({ gearId: keepIdStr })\n          .where(eq(gearClickEventsTable.gearId, removeId))\n          .returning({ id: gearClickEventsTable.id });\n        clicksMoved += clickUpdate.length;\n\n        const existingLinks = await tx\n          .select({ videoId: videoGearLinksTable.videoId })\n          .from(videoGearLinksTable)\n          .where(eq(videoGearLinksTable.gearId, keepIdStr));\n        const keepVideoIds = new Set(existingLinks.map((l) => l.videoId));\n\n        const linksToMove = await tx\n          .select()\n          .from(videoGearLinksTable)\n          .where(eq(videoGearLinksTable.gearId, removeId));\n\n        for (const link of linksToMove) {\n          if (keepVideoIds.has(link.videoId)) {\n            await tx.delete(videoGearLinksTable).where(eq(videoGearLinksTable.id, link.id));\n          } else {\n            await tx\n              .update(videoGearLinksTable)\n              .set({ gearId: keepIdStr })\n              .where(eq(videoGearLinksTable.id, link.id));\n            keepVideoIds.add(link.videoId);\n            linksMoved += 1;\n          }\n        }\n      }\n\n      const totalClicks = removeRows.reduce((sum, row) => sum + (row.clickCount ?? 0), 0);\n      const totalImpressions = removeRows.reduce((sum, row) => sum + (row.impressionCount ?? 0), 0);\n      const mergedFeatured = keepRow.featured || removeRows.some((row) => row.featured);\n      const bestThumbnail =\n        keepRow.thumbnailUrl?.trim() ||\n        removeRows.find((row) => row.thumbnailUrl?.trim())?.thumbnailUrl ||\n        \"\";\n\n      await tx\n        .update(gearCatalogTable)\n        .set({\n          clickCount: (keepRow.clickCount ?? 0) + totalClicks,\n          impressionCount: (keepRow.impressionCount ?? 0) + totalImpressions,\n          conversionRate: computeConversionRate(\n            (keepRow.clickCount ?? 0) + totalClicks,\n            (keepRow.impressionCount ?? 0) + totalImpressions,\n          ),\n          featured: mergedFeatured,\n          thumbnailUrl: bestThumbnail || keepRow.thumbnailUrl,\n          updatedAt: new Date(),\n        })\n        .where(eq(gearCatalogTable.id, keepIdStr));\n\n      await tx.delete(gearCatalogTable).where(inArray(gearCatalogTable.id, removeRows.map((r) => r.id)));\n    });\n\n    res.json({\n      success: true,\n      keepId: keepIdStr,\n      removed: removeRows.length,\n      offersMoved,\n      linksMoved,\n      clicksMoved,\n    });\n  } catch (err) {\n    logGearAdminError(\"POST /library/merge-duplicates failed\", err);\n    req.log?.error({ err }, \"GearAdmin: failed to merge duplicates\");\n    res.status(500).json({ error: \"Failed to merge duplicate gear items\" });\n  }\n});\n\nrouter.post(\"/seed/import\", requireAdmin, async (req, res) => {\n  const body = req.body as { items?: StagedGearItem[] };\n  const items = Array.isArray(body.items) ? body.items : [];\n\n  if (!items.length) {\n    res.status(400).json({ error: \"items array is required\" });\n    return;\n  }\n  if (items.length > 50) {\n    res.status(400).json({ error: \"Maximum 50 items per import batch\" });\n    return;\n  }\n\n  try {\n    const maxPos = await db\n      .select({ pos: gearCatalogTable.position })\n      .from(gearCatalogTable)\n      .orderBy(desc(gearCatalogTable.position))\n      .limit(1);\n    let nextPos = maxPos[0] ? maxPos[0].pos + 1 : 0;\n    const now = new Date();\n    const imported: ReturnType<typeof serializeGear>[] = [];\n\n    for (const item of items) {\n      const name = item.name?.trim();\n      if (!name) continue;\n\n      const [row] = await db\n        .insert(gearCatalogTable)\n        .values({\n          id: crypto.randomUUID(),\n          name,\n          brand: item.brand?.trim() || \"Unknown\",\n          category:\n            item.category === \"fishing\"\n              ? \"fishing\"\n              : item.category === \"camping\"\n                ? \"camping\"\n                : \"hunting\",\n          subcategory: item.subcategory?.trim() || \"General\",\n          price: Math.max(0, Math.round(item.price ?? 0)),\n          description: item.description?.trim() || \"\",\n          thumbnailUrl: item.thumbnailUrl?.trim() || \"\",\n          imageUrls: item.thumbnailUrl ? [item.thumbnailUrl] : [],\n          specs: item.asin ? { asin: item.asin } : {},\n          storeName: item.storeName?.trim() || \"\",\n          affiliateUrl: item.affiliateUrl?.trim() || \"\",\n          trackingId: item.trackingId?.trim() || \"\",\n          utmSource: \"hooknbone\",\n          utmMedium: \"affiliate\",\n          utmCampaign: \"gear-seeder\",\n          status: \"published\",\n          featured: false,\n          position: nextPos++,\n          updatedAt: now,\n        })\n        .returning();\n\n      if (row) imported.push(serializeGear(row));\n    }\n\n    res.status(201).json({ imported, count: imported.length });\n  } catch (err) {\n    req.log?.error({ err }, \"GearAdmin: seed import failed\");\n    res.status(500).json({ error: \"Failed to import staged gear items\" });\n  }\n});\n\nexport default router;\n", "/** Shared gear category taxonomy \u2014 user page, admin panel, classifier, and API. */\n\nexport type GearCategory = \"hunting\" | \"fishing\" | \"camping\";\n\nexport const GEAR_CATEGORIES: GearCategory[] = [\"hunting\", \"fishing\", \"camping\"];\n\nexport const GEAR_CATEGORY_LABELS: Record<GearCategory, string> = {\n  hunting: \"Hunting\",\n  fishing: \"Fishing\",\n  camping: \"Camping & Outdoor\",\n};\n\nexport const GEAR_ACCENTS: Record<GearCategory, string> = {\n  hunting: \"#f97316\",\n  fishing: \"#22d3ee\",\n  camping: \"#a3e635\",\n};\n\nexport interface GearSection {\n  id: string;\n  label: string;\n  subcategories: readonly string[];\n  blurb?: string;\n  position?: number;\n}\n\nexport interface GearClassifiableItem {\n  name: string;\n  brand: string;\n  description?: string | null;\n  subcategory: string;\n  category: string;\n}\n\nexport const GEAR_SECTIONS: Record<GearCategory, GearSection[]> = {\n  hunting: [\n    { id: \"optics-tracking\", label: \"Optics & Tracking\", subcategories: [\"Optics & Tracking\"], blurb: \"Rangefinders, scopes, and trail cameras\" },\n    { id: \"weapons-bows\", label: \"Weapons & Bows\", subcategories: [\"Weapons & Bows\"], blurb: \"Rifles, broadheads, and crossbows\" },\n    { id: \"apparel\", label: \"Apparel\", subcategories: [\"Apparel\"], blurb: \"Scent control and field layers\" },\n    { id: \"packs-storage\", label: \"Packs & Storage\", subcategories: [\"Packs & Storage\"], blurb: \"Modular packs and saddle systems\" },\n  ],\n  fishing: [\n    { id: \"optics-tracking\", label: \"Optics & Tracking\", subcategories: [\"Optics & Tracking\"], blurb: \"Marine binoculars and electronics\" },\n    { id: \"reels-rods\", label: \"Reels & Rods\", subcategories: [\"Reels & Rods\"], blurb: \"Spinning, fly, and trolling setups\" },\n    { id: \"tackle-bait\", label: \"Tackle & Bait\", subcategories: [\"Tackle & Bait\"], blurb: \"Lures, baits, and terminal tackle\" },\n    { id: \"apparel\", label: \"Apparel\", subcategories: [\"Apparel\"], blurb: \"Foul-weather and on-water gear\" },\n    { id: \"packs-storage\", label: \"Packs & Storage\", subcategories: [\"Packs & Storage\"], blurb: \"Sling packs and tackle storage\" },\n  ],\n  camping: [\n    { id: \"camp-comfort\", label: \"Camp Comfort\", subcategories: [\"Camp Comfort\"], blurb: \"Sleep systems and camp bedding\" },\n    { id: \"hiking-trek\", label: \"Hiking & Trek\", subcategories: [\"Hiking & Trek\"], blurb: \"Trekking poles and trail gear\" },\n    { id: \"camp-tech\", label: \"Camp Tech\", subcategories: [\"Camp Tech\"], blurb: \"Power, fire pits, and solar trail tech\" },\n    { id: \"camp-essentials\", label: \"Camp Essentials\", subcategories: [\"Camp Essentials\"], blurb: \"Water, sinks, and base camp staples\" },\n    { id: \"apparel\", label: \"Apparel\", subcategories: [\"Apparel\"], blurb: \"Rain gear and weather protection\" },\n    { id: \"packs-storage\", label: \"Packs & Storage\", subcategories: [\"Packs & Storage\"], blurb: \"Ultralight packs and carry systems\" },\n  ],\n};\n\nexport const GEAR_SUBCATEGORY_ORDER: Record<GearCategory, readonly string[]> = {\n  hunting: [\"Optics & Tracking\", \"Weapons & Bows\", \"Apparel\", \"Packs & Storage\", \"General\"],\n  fishing: [\"Optics & Tracking\", \"Reels & Rods\", \"Tackle & Bait\", \"Apparel\", \"Packs & Storage\", \"General\"],\n  camping: [\"Camp Comfort\", \"Hiking & Trek\", \"Camp Tech\", \"Camp Essentials\", \"Apparel\", \"Packs & Storage\", \"General\"],\n};\n\nconst HUNTING_KEYWORDS =\n  /\\b(hunt|hunting|deer|elk|turkey|duck|bowhunt|archery|rifle|ammo|broadhead|tree stand|blind|decoy|camo|crossbow|saddle hunt)\\b/i;\nconst FISHING_KEYWORDS =\n  /\\b(fish|fishing|bass|trout|reel|rod|lure|tackle|wader|kayak|offshore|saltwater|fly fish|crappie|walleye|swimbait|topwater)\\b/i;\nconst CAMPING_KEYWORDS =\n  /\\b(camp|camping|backpack|trekking|fire pit|mosquito|poncho|solar|portable power|camp bed|trek pole|water jug|sink kit)\\b/i;\n\nexport const SUBCATEGORY_CLASSIFICATION_RULES: Array<{\n  re: RegExp;\n  category: GearCategory;\n  subcategory: string;\n}> = [\n  { re: /\\brangefinder|\\bbinocular|\\bscope|\\bballistic|\\btrail cam|\\bcell cam|\\bcamera\\b/, category: \"hunting\", subcategory: \"Optics & Tracking\" },\n  { re: /\\brifle|\\bshotgun|\\bfirearm|\\bbroadhead|\\bcrossbow|\\bbow\\b|\\barchery/, category: \"hunting\", subcategory: \"Weapons & Bows\" },\n  { re: /\\bscent control|\\bbase layer|\\bscent membrane|\\bcamo|\\bjacket|\\bvest|\\bapparel/, category: \"hunting\", subcategory: \"Apparel\" },\n  { re: /\\bhunting pack|\\bmodular pack|\\bsaddle hunt|\\bsaddle gear/, category: \"hunting\", subcategory: \"Packs & Storage\" },\n  { re: /\\bmarine binocular|\\bgyro|\\bbinocular/, category: \"fishing\", subcategory: \"Optics & Tracking\" },\n  { re: /\\bspinning reel|\\bfly reel|\\btrolling rod|\\bfishing rod|\\b rod\\b|\\breel\\b/, category: \"fishing\", subcategory: \"Reels & Rods\" },\n  { re: /\\bsoft plastic|\\bbait|\\blure|\\bswimbait|\\btopwater|\\btool bundle|\\bterminal|\\btackle\\b/, category: \"fishing\", subcategory: \"Tackle & Bait\" },\n  { re: /\\bbib|\\bfoul weather|\\bwader|\\brain gear/, category: \"fishing\", subcategory: \"Apparel\" },\n  { re: /\\bsling pack|\\btackle storage|\\btackle box/, category: \"fishing\", subcategory: \"Packs & Storage\" },\n  { re: /\\bcamp bed|\\binflating|\\bsleeping pad|\\bsleep system/, category: \"camping\", subcategory: \"Camp Comfort\" },\n  { re: /\\btrekking pole|\\btrek pole|\\bhiking pole/, category: \"camping\", subcategory: \"Hiking & Trek\" },\n  { re: /\\bfire pit|\\bmosquito|\\brepeller|\\bportable power|\\bsolar|\\bsink kit|\\bcamp tech/, category: \"camping\", subcategory: \"Camp Tech\" },\n  { re: /\\bwater jug|\\bgallon|\\bcamp essential/, category: \"camping\", subcategory: \"Camp Essentials\" },\n  { re: /\\bponcho|\\brain gear|\\bwaterproof jacket/, category: \"camping\", subcategory: \"Apparel\" },\n  { re: /\\bbackpack|\\bframeless|\\bultralight pack/, category: \"camping\", subcategory: \"Packs & Storage\" },\n];\n\nexport const LEGACY_SUBCATEGORY_MAP: Record<string, string> = {\n  Archery: \"Weapons & Bows\",\n  Firearms: \"Weapons & Bows\",\n  Rifles: \"Weapons & Bows\",\n  Bows: \"Weapons & Bows\",\n  Broadheads: \"Weapons & Bows\",\n  Arrows: \"Weapons & Bows\",\n  Optics: \"Optics & Tracking\",\n  \"Trail Cams\": \"Optics & Tracking\",\n  Ammo: \"Weapons & Bows\",\n  Apparel: \"Apparel\",\n  Knives: \"Tackle & Bait\",\n  \"Calls & Decoys\": \"Weapons & Bows\",\n  Blinds: \"Packs & Storage\",\n  Packs: \"Packs & Storage\",\n  Accessories: \"Packs & Storage\",\n  Rods: \"Reels & Rods\",\n  Reels: \"Reels & Rods\",\n  Lures: \"Tackle & Bait\",\n  Line: \"Tackle & Bait\",\n  Terminal: \"Tackle & Bait\",\n  Tackle: \"Tackle & Bait\",\n  Electronics: \"Optics & Tracking\",\n  Waders: \"Apparel\",\n  Kayaks: \"Reels & Rods\",\n  Saltwater: \"Tackle & Bait\",\n  General: \"General\",\n};\n\nexport function normalizeSubcategoryLabel(raw: string, category?: GearCategory): string {\n  const trimmed = raw.trim();\n  if (!trimmed) return \"General\";\n  const mapped = LEGACY_SUBCATEGORY_MAP[trimmed] ?? trimmed;\n  if (category && GEAR_SUBCATEGORY_ORDER[category].includes(mapped)) return mapped;\n  if (Object.values(GEAR_SUBCATEGORY_ORDER).some((list) => list.includes(mapped))) return mapped;\n  return mapped;\n}\n\nexport function inferGearCategory(text: string): GearCategory {\n  const blob = text.toLowerCase();\n  if (CAMPING_KEYWORDS.test(blob) && !HUNTING_KEYWORDS.test(blob) && !FISHING_KEYWORDS.test(blob)) {\n    return \"camping\";\n  }\n  if (FISHING_KEYWORDS.test(blob) && !HUNTING_KEYWORDS.test(blob)) return \"fishing\";\n  if (HUNTING_KEYWORDS.test(blob)) return \"hunting\";\n  if (CAMPING_KEYWORDS.test(blob)) return \"camping\";\n  return \"hunting\";\n}\n\nexport function inferGearSubcategory(text: string, category: GearCategory): string {\n  const blob = text.toLowerCase();\n  for (const rule of SUBCATEGORY_CLASSIFICATION_RULES) {\n    if (rule.category === category && rule.re.test(blob)) return rule.subcategory;\n  }\n  for (const rule of SUBCATEGORY_CLASSIFICATION_RULES) {\n    if (rule.re.test(blob)) return rule.subcategory;\n  }\n  return \"General\";\n}\n\nexport function subcategorySortIndex(category: GearCategory, subcategory: string): number {\n  const normalized = normalizeSubcategoryLabel(subcategory, category);\n  const order = GEAR_SUBCATEGORY_ORDER[category];\n  const idx = order.indexOf(normalized);\n  return idx === -1 ? order.length + 1 : idx;\n}\n\nexport function isValidGearCategory(value: string): value is GearCategory {\n  return GEAR_CATEGORIES.includes(value as GearCategory);\n}\n\nexport function buildGearClassificationText(\n  item: Pick<GearClassifiableItem, \"name\" | \"brand\" | \"description\" | \"subcategory\">,\n): string {\n  return [item.name, item.brand, item.description, item.subcategory].filter(Boolean).join(\" \");\n}\n\nexport function classifyGearItem(\n  item: GearClassifiableItem,\n): { category: GearCategory; subcategory: string } {\n  const text = buildGearClassificationText(item);\n  const category = inferGearCategory(text);\n  const subcategory = inferGearSubcategory(text, category);\n  return { category, subcategory: normalizeSubcategoryLabel(subcategory, category) };\n}\n\nexport function sortGearCatalogItems<T extends GearClassifiableItem & { id: string; name: string }>(\n  items: T[],\n): T[] {\n  return [...items].sort((a, b) => {\n    const catOrder = a.category === b.category ? 0 : a.category.localeCompare(b.category);\n    if (catOrder !== 0) return catOrder;\n\n    const subOrder =\n      subcategorySortIndex(a.category as GearCategory, a.subcategory) -\n      subcategorySortIndex(b.category as GearCategory, b.subcategory);\n    if (subOrder !== 0) return subOrder;\n\n    return a.name.localeCompare(b.name, undefined, { sensitivity: \"base\" });\n  });\n}\n\nexport function buildAutoSortOrderFromItems(items: Array<GearClassifiableItem & { id: string }>): string[] {\n  return sortGearCatalogItems(items).map((item) => item.id);\n}\n\nexport function sectionForSubcategory(\n  category: GearCategory,\n  subcategory: string,\n  sections: readonly GearSection[] = GEAR_SECTIONS[category],\n): GearSection | undefined {\n  const normalized = normalizeSubcategoryLabel(subcategory, category);\n  return sections.find((s) => s.subcategories.includes(normalized));\n}\n\nexport function groupGearBySubcategoryFromItems<T extends GearClassifiableItem & { id: string; name: string }>(\n  items: T[],\n): Map<string, T[]> {\n  const groups = new Map<string, T[]>();\n  for (const item of sortGearCatalogItems(items)) {\n    const key = `${item.category}::${normalizeSubcategoryLabel(item.subcategory, item.category as GearCategory)}`;\n    const list = groups.get(key) ?? [];\n    list.push(item);\n    groups.set(key, list);\n  }\n  return groups;\n}\n\nexport interface GearSectionGroup<T> {\n  sectionId: string;\n  label: string;\n  blurb?: string;\n  items: T[];\n}\n\nexport function buildGearSectionGroups<T extends GearClassifiableItem & { featured?: boolean; name: string }>(\n  tab: GearCategory,\n  items: T[],\n  sectionDefs: readonly GearSection[] = GEAR_SECTIONS[tab],\n): Array<GearSectionGroup<T>> {\n  const buckets = new Map<string, T[]>();\n\n  for (const item of items) {\n    const normalized = normalizeSubcategoryLabel(item.subcategory, tab);\n    const section = sectionForSubcategory(tab, normalized, sectionDefs);\n    const sectionId = section?.id ?? `subcat-${normalized.toLowerCase().replace(/[^a-z0-9]+/g, \"-\")}`;\n    const list = buckets.get(sectionId) ?? [];\n    list.push(item);\n    buckets.set(sectionId, list);\n  }\n\n  const groups: Array<GearSectionGroup<T>> = [];\n  const usedSectionIds = new Set<string>();\n\n  for (const def of sectionDefs) {\n    const sectionItems = buckets.get(def.id);\n    if (!sectionItems?.length) continue;\n    usedSectionIds.add(def.id);\n    groups.push({\n      sectionId: def.id,\n      label: def.label,\n      blurb: def.blurb,\n      items: [...sectionItems].sort((a, b) => {\n        if (a.featured && !b.featured) return -1;\n        if (!a.featured && b.featured) return 1;\n        return a.name.localeCompare(b.name);\n      }),\n    });\n  }\n\n  for (const [sectionId, sectionItems] of buckets) {\n    if (usedSectionIds.has(sectionId)) continue;\n    const normalizedLabel =\n      sectionItems[0] != null\n        ? normalizeSubcategoryLabel(sectionItems[0].subcategory, tab)\n        : \"More Gear\";\n    groups.push({\n      sectionId,\n      label: normalizedLabel === \"General\" ? \"More Gear\" : normalizedLabel,\n      blurb: normalizedLabel === \"General\" ? \"Additional picks in this category\" : undefined,\n      items: [...sectionItems].sort((a, b) => a.name.localeCompare(b.name)),\n    });\n  }\n\n  return groups;\n}\n", "/**\n * Affiliate URL helpers: UTM tagging, link health checks, tracked redirect URLs.\n */\n\nexport interface UtmParams {\n  source?: string;\n  medium?: string;\n  campaign?: string;\n  content?: string;\n  term?: string;\n}\n\nexport interface AffiliateLinkInput {\n  baseUrl: string;\n  trackingId?: string;\n  utm?: UtmParams;\n}\n\nconst DEFAULT_UTM: Required<UtmParams> = {\n  source: \"hooknbone\",\n  medium: \"affiliate\",\n  campaign: \"official-gear\",\n  content: \"\",\n  term: \"\",\n};\n\n/** Append UTM params and optional tracking tag to a base affiliate URL. */\nexport function buildTrackedAffiliateUrl(input: AffiliateLinkInput): string {\n  const raw = input.baseUrl.trim();\n  if (!raw) return \"\";\n\n  let url: URL;\n  try {\n    url = new URL(raw);\n  } catch {\n    return raw;\n  }\n\n  const utm = { ...DEFAULT_UTM, ...input.utm };\n  if (utm.source) url.searchParams.set(\"utm_source\", utm.source);\n  if (utm.medium) url.searchParams.set(\"utm_medium\", utm.medium);\n  if (utm.campaign) url.searchParams.set(\"utm_campaign\", utm.campaign);\n  if (utm.content) url.searchParams.set(\"utm_content\", utm.content);\n  if (utm.term) url.searchParams.set(\"utm_term\", utm.term);\n\n  if (input.trackingId?.trim()) {\n    // Amazon Associates tag\n    if (/amazon\\./i.test(url.hostname)) {\n      url.searchParams.set(\"tag\", input.trackingId.trim());\n    }\n  }\n\n  return url.toString();\n}\n\nexport type LinkHealthStatus = \"active\" | \"broken\" | \"unknown\";\n\n/** HEAD/GET probe to verify an affiliate link responds. */\nexport async function checkLinkHealth(\n  url: string,\n  timeoutMs = 8000,\n): Promise<{ status: LinkHealthStatus; httpStatus?: number }> {\n  const trimmed = url.trim();\n  if (!trimmed) return { status: \"unknown\" };\n\n  try {\n    const parsed = new URL(trimmed);\n    if (parsed.protocol !== \"https:\" && parsed.protocol !== \"http:\") {\n      return { status: \"unknown\" };\n    }\n  } catch {\n    return { status: \"broken\" };\n  }\n\n  try {\n    const controller = new AbortController();\n    const timer = setTimeout(() => controller.abort(), timeoutMs);\n    try {\n      const res = await fetch(trimmed, {\n        method: \"HEAD\",\n        signal: controller.signal,\n        redirect: \"follow\",\n        headers: {\n          \"User-Agent\": \"Mozilla/5.0 (compatible; HookNBone-LinkCheck/1.0)\",\n        },\n      });\n      if (res.ok || (res.status >= 300 && res.status < 400)) {\n        return { status: \"active\", httpStatus: res.status };\n      }\n      // Some retailers block HEAD \u2014 retry with GET (bounded)\n      if (res.status === 405 || res.status === 403) {\n        const getRes = await fetch(trimmed, {\n          method: \"GET\",\n          signal: controller.signal,\n          redirect: \"follow\",\n          headers: {\n            \"User-Agent\": \"Mozilla/5.0 (compatible; HookNBone-LinkCheck/1.0)\",\n          },\n        });\n        return {\n          status: getRes.ok || getRes.status < 400 ? \"active\" : \"broken\",\n          httpStatus: getRes.status,\n        };\n      }\n      return { status: \"broken\", httpStatus: res.status };\n    } finally {\n      clearTimeout(timer);\n    }\n  } catch {\n    return { status: \"broken\" };\n  }\n}\n\n/** Recompute conversion rate from clicks and impressions (0\u2013100). */\nexport function computeConversionRate(clicks: number, impressions: number): number {\n  if (impressions <= 0) return 0;\n  return Math.round((clicks / impressions) * 10000) / 100;\n}\n", "/**\n * Gear image scraping: OG meta extraction from retailer pages + category fallbacks.\n */\n\nconst RETAILER_HOSTS = new Set([\n  \"amazon.com\", \"www.amazon.com\",\n  \"cabelas.com\", \"www.cabelas.com\",\n  \"basspro.com\", \"www.basspro.com\",\n  \"tacklewarehouse.com\", \"www.tacklewarehouse.com\",\n  \"opticsplanet.com\", \"www.opticsplanet.com\",\n  \"rei.com\", \"www.rei.com\",\n  \"dickssportinggoods.com\", \"www.dickssportinggoods.com\",\n  \"scheels.com\", \"www.scheels.com\",\n  \"academy.com\", \"www.academy.com\",\n]);\n\nconst MAX_BODY_BYTES = 500_000;\n\nfunction decodeHtmlEntities(str: string): string {\n  return str\n    .replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\")\n    .replace(/&quot;/g, '\"').replace(/&#39;/g, \"'\")\n    .replace(/&#(\\d+);/g, (_, n) => String.fromCharCode(parseInt(n, 10)));\n}\n\nfunction extractMeta(html: string, names: string[]): string | undefined {\n  for (const name of names) {\n    const esc = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n    const m =\n      html.match(new RegExp(`<meta[^>]+(?:property|name)\\\\s*=\\\\s*[\"']${esc}[\"'][^>]*content\\\\s*=\\\\s*[\"']([^\"']*)[\"']`, \"i\")) ??\n      html.match(new RegExp(`<meta[^>]+content\\\\s*=\\\\s*[\"']([^\"']*)[\"'][^>]*(?:property|name)\\\\s*=\\\\s*[\"']${esc}[\"']`, \"i\"));\n    if (m?.[1]) return decodeHtmlEntities(m[1]);\n  }\n  return undefined;\n}\n\nfunction isPrivateIp(hostname: string): boolean {\n  return (\n    hostname === \"localhost\" ||\n    hostname.startsWith(\"127.\") ||\n    hostname.startsWith(\"10.\") ||\n    hostname.startsWith(\"192.168.\") ||\n    /^172\\.(1[6-9]|2\\d|3[01])\\./.test(hostname)\n  );\n}\n\nfunction isAllowedScrapeUrl(rawUrl: string): boolean {\n  try {\n    const u = new URL(rawUrl);\n    if (u.protocol !== \"https:\" && u.protocol !== \"http:\") return false;\n    if (isPrivateIp(u.hostname)) return false;\n    return RETAILER_HOSTS.has(u.hostname.toLowerCase());\n  } catch {\n    return false;\n  }\n}\n\nasync function readBoundedText(res: globalThis.Response, maxBytes: number): Promise<string | null> {\n  const reader = res.body?.getReader();\n  if (!reader) {\n    const txt = await res.text();\n    return txt.length > maxBytes ? txt.slice(0, maxBytes) : txt;\n  }\n  const decoder = new TextDecoder(\"utf-8\", { fatal: false });\n  let collected = \"\";\n  let bytes = 0;\n  while (bytes < maxBytes) {\n    const { done, value } = await reader.read();\n    if (done) break;\n    bytes += value.byteLength;\n    collected += decoder.decode(value, { stream: true });\n  }\n  reader.cancel().catch(() => {});\n  return collected;\n}\n\nasync function fetchPageMeta(url: string): Promise<{ image?: string; title?: string } | null> {\n  if (!isAllowedScrapeUrl(url)) return null;\n  try {\n    const res = await fetch(url, {\n      signal: AbortSignal.timeout(8000),\n      redirect: \"follow\",\n      headers: {\n        \"User-Agent\":\n          \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\",\n        Accept: \"text/html,application/xhtml+xml\",\n      },\n    });\n    if (!res.ok) return null;\n    const ct = res.headers.get(\"content-type\") ?? \"\";\n    if (!ct.includes(\"text/html\")) return null;\n    const html = await readBoundedText(res, MAX_BODY_BYTES);\n    if (!html) return null;\n    const titleTag = html.match(/<title[^>]*>([\\s\\S]*?)<\\/title>/i)?.[1];\n    return {\n      image: extractMeta(html, [\"og:image\", \"twitter:image\", \"twitter:image:src\"]),\n      title:\n        extractMeta(html, [\"og:title\", \"twitter:title\"]) ??\n        (titleTag ? decodeHtmlEntities(titleTag.trim()) : undefined),\n    };\n  } catch {\n    return null;\n  }\n}\n\n/** Build Amazon search URL for a product query (used when no direct URL provided). */\nexport function buildAmazonSearchUrl(query: string, partnerTag?: string): string {\n  const params = new URLSearchParams({ k: query.slice(0, 100) });\n  if (partnerTag) params.set(\"tag\", partnerTag);\n  return `https://www.amazon.com/s?${params.toString()}`;\n}\n\nexport interface ScrapeImageResult {\n  candidateUrl: string;\n  fallbackUrl: string;\n  sourceUrl: string;\n  title?: string;\n  error?: string;\n}\n\n/**\n * Scrape product imagery from a store URL or Amazon search for a gear title.\n * Returns candidate + fallback URLs for admin approval.\n */\nexport async function scrapeGearImage(options: {\n  title: string;\n  brand?: string;\n  sourceUrl?: string;\n  fallbackCategoryPath?: string;\n}): Promise<ScrapeImageResult> {\n  const query = [options.brand, options.title].filter(Boolean).join(\" \").trim();\n  const fallbackUrl = options.fallbackCategoryPath ?? \"/images/gear/default.svg\";\n  const partnerTag = process.env.AFFILIATE_PARTNER_TAG ?? \"\";\n\n  const urlsToTry: string[] = [];\n  if (options.sourceUrl?.trim()) urlsToTry.push(options.sourceUrl.trim());\n  urlsToTry.push(buildAmazonSearchUrl(query, partnerTag || undefined));\n\n  for (const url of urlsToTry) {\n    const meta = await fetchPageMeta(url);\n    if (meta?.image) {\n      return {\n        candidateUrl: meta.image,\n        fallbackUrl,\n        sourceUrl: url,\n        title: meta.title,\n      };\n    }\n  }\n\n  return {\n    candidateUrl: \"\",\n    fallbackUrl,\n    sourceUrl: urlsToTry[0] ?? \"\",\n    error: \"Could not extract product image; using category fallback.\",\n  };\n}\n", "import type { DomHandlerOptions } from 'domhandler';\nimport type { ParserOptions as HTMLParser2ParserOptions } from 'htmlparser2';\nimport type { ParserOptions as Parse5ParserOptions } from 'parse5';\nimport type { Htmlparser2TreeAdapterMap } from 'parse5-htmlparser2-tree-adapter';\nimport type { Options as SelectOptions } from 'cheerio-select';\nimport type { DomSerializerOptions } from 'dom-serializer';\n\n/**\n * Options accepted by htmlparser2, the default parser for XML.\n *\n * @see https://github.com/fb55/htmlparser2/wiki/Parser-options\n */\nexport interface HTMLParser2Options\n  extends DomHandlerOptions, DomSerializerOptions, HTMLParser2ParserOptions {\n  /** Treat the input as an XML document. */\n  xmlMode?: boolean;\n}\n\n/**\n * Options accepted by Cheerio.\n *\n * Please note that parser-specific options are _only recognized_ if the\n * relevant parser is used.\n */\nexport interface CheerioOptions extends Parse5ParserOptions<Htmlparser2TreeAdapterMap> {\n  /**\n   * Recommended way of configuring htmlparser2 when wanting to parse XML.\n   *\n   * This will switch Cheerio to use htmlparser2.\n   *\n   * @default false\n   */\n  xml?: HTMLParser2Options | boolean;\n\n  /**\n   * Enable xml mode, which will switch Cheerio to use htmlparser2.\n   *\n   * @deprecated Please use the `xml` option instead.\n   * @default false\n   */\n  xmlMode?: boolean;\n\n  /** The base URI for the document. Used to resolve the `href` and `src` props. */\n  baseURI?: string | URL;\n\n  /**\n   * Is the document in quirks mode?\n   *\n   * This will lead to `.className` and `#id` being case-insensitive.\n   *\n   * @default false\n   */\n  quirksMode?: SelectOptions['quirksMode'];\n  /**\n   * Extension point for pseudo-classes.\n   *\n   * Maps from names to either strings of functions.\n   *\n   * - A string value is a selector that the element must match to be selected.\n   * - A function is called with the element as its first argument, and optional\n   *   parameters second. If it returns true, the element is selected.\n   *\n   * @example\n   *\n   * ```js\n   * const $ = cheerio.load(\n   *   '<div class=\"foo\"></div><div data-bar=\"boo\"></div>',\n   *   {\n   *     pseudos: {\n   *       // `:foo` is an alias for `div.foo`\n   *       foo: 'div.foo',\n   *       // `:bar(val)` is equivalent to `[data-bar=val s]`\n   *       bar: (el, val) => el.attribs['data-bar'] === val,\n   *     },\n   *   },\n   * );\n   *\n   * $(':foo').length; // 1\n   * $('div:bar(boo)').length; // 1\n   * $('div:bar(baz)').length; // 0\n   * ```\n   */\n  pseudos?: SelectOptions['pseudos'];\n}\n\n/** Internal options for Cheerio. */\nexport interface InternalOptions\n  extends HTMLParser2Options, Omit<CheerioOptions, 'xml'> {\n  /**\n   * Whether to use htmlparser2.\n   *\n   * This is set to true if `xml` is set to true.\n   */\n  _useHtmlParser2?: boolean;\n}\n\nconst defaultOpts: InternalOptions = {\n  _useHtmlParser2: false,\n};\n\n/**\n * Flatten the options for Cheerio.\n *\n * This will set `_useHtmlParser2` to true if `xml` is set to true.\n *\n * @param options - The options to flatten.\n * @param baseOptions - The base options to use.\n * @returns The flattened options.\n */\nexport function flattenOptions(\n  options?: CheerioOptions | null,\n  baseOptions?: InternalOptions,\n): InternalOptions {\n  if (!options) {\n    return baseOptions ?? defaultOpts;\n  }\n\n  const opts: InternalOptions = {\n    _useHtmlParser2: !!options.xmlMode,\n    ...baseOptions,\n    ...options,\n  };\n\n  if (options.xml) {\n    opts._useHtmlParser2 = true;\n    opts.xmlMode = true;\n\n    if (options.xml !== true) {\n      Object.assign(opts, options.xml);\n    }\n  } else if (options.xmlMode) {\n    opts._useHtmlParser2 = true;\n  }\n\n  return opts;\n}\n", "import type { BasicAcceptedElems } from './types.js';\nimport type { CheerioAPI } from './load.js';\nimport type { Cheerio } from './cheerio.js';\nimport type { AnyNode, Document } from 'domhandler';\nimport { textContent } from 'domutils';\nimport {\n  type InternalOptions,\n  type CheerioOptions,\n  flattenOptions as flattenOptions,\n} from './options.js';\nimport type { ExtractedMap, ExtractMap } from './api/extract.js';\n\n/**\n * Helper function to render a DOM.\n *\n * @param that - Cheerio instance to render.\n * @param dom - The DOM to render. Defaults to `that`'s root.\n * @param options - Options for rendering.\n * @returns The rendered document.\n */\nfunction render(\n  that: CheerioAPI,\n  dom: BasicAcceptedElems<AnyNode> | undefined,\n  options: InternalOptions,\n): string {\n  if (!that) return '';\n\n  return that(dom ?? that._root.children, null, undefined, options).toString();\n}\n\n/**\n * Checks if a passed object is an options object.\n *\n * @param dom - Object to check if it is an options object.\n * @param options - Options object.\n * @returns Whether the object is an options object.\n */\nfunction isOptions(\n  dom?: BasicAcceptedElems<AnyNode> | CheerioOptions | null,\n  options?: CheerioOptions,\n): dom is CheerioOptions {\n  return (\n    !options &&\n    typeof dom === 'object' &&\n    dom != null &&\n    !('length' in dom) &&\n    !('type' in dom)\n  );\n}\n\n/**\n * Renders the document.\n *\n * @category Static\n * @param options - Options for the renderer.\n * @returns The rendered document.\n */\nexport function html(this: CheerioAPI, options?: CheerioOptions): string;\n/**\n * Renders the document.\n *\n * @category Static\n * @param dom - Element to render.\n * @param options - Options for the renderer.\n * @returns The rendered document.\n */\nexport function html(\n  this: CheerioAPI,\n  dom?: BasicAcceptedElems<AnyNode>,\n  options?: CheerioOptions,\n): string;\nexport function html(\n  this: CheerioAPI,\n  dom?: BasicAcceptedElems<AnyNode> | CheerioOptions,\n  options?: CheerioOptions,\n): string {\n  /*\n   * Be flexible about parameters, sometimes we call html(),\n   * with options as only parameter\n   * check dom argument for dom element specific properties\n   * assume there is no 'length' or 'type' properties in the options object\n   */\n  const toRender = isOptions(dom) ? ((options = dom), undefined) : dom;\n\n  /*\n   * Sometimes `$.html()` is used without preloading html,\n   * so fallback non-existing options to the default ones.\n   */\n  const opts = {\n    ...this?._options,\n    ...flattenOptions(options),\n  };\n\n  return render(this, toRender, opts);\n}\n\n/**\n * Render the document as XML.\n *\n * @category Static\n * @param dom - Element to render.\n * @returns THe rendered document.\n */\nexport function xml(\n  this: CheerioAPI,\n  dom?: BasicAcceptedElems<AnyNode>,\n): string {\n  const options = { ...this._options, xmlMode: true };\n\n  return render(this, dom, options);\n}\n\n/**\n * Render the document as text.\n *\n * This returns the `textContent` of the passed elements. The result will\n * include the contents of `<script>` and `<style>` elements. To avoid this, use\n * `.prop('innerText')` instead.\n *\n * @category Static\n * @param elements - Elements to render.\n * @returns The rendered document.\n */\nexport function text(\n  this: CheerioAPI | void,\n  elements?: ArrayLike<AnyNode>,\n): string {\n  const elems = elements ?? (this ? this.root() : []);\n\n  let ret = '';\n\n  for (let i = 0; i < elems.length; i++) {\n    ret += textContent(elems[i]);\n  }\n\n  return ret;\n}\n\n/**\n * Parses a string into an array of DOM nodes. The `context` argument has no\n * meaning for Cheerio, but it is maintained for API compatibility with jQuery.\n *\n * @category Static\n * @param data - Markup that will be parsed.\n * @param context - Will be ignored. If it is a boolean it will be used as the\n *   value of `keepScripts`.\n * @param keepScripts - If false all scripts will be removed.\n * @returns The parsed DOM.\n * @alias Cheerio.parseHTML\n * @see {@link https://api.jquery.com/jQuery.parseHTML/}\n */\nexport function parseHTML(\n  this: CheerioAPI,\n  data: string,\n  context?: unknown,\n  keepScripts?: boolean,\n): AnyNode[];\nexport function parseHTML(this: CheerioAPI, data?: '' | null): null;\nexport function parseHTML(\n  this: CheerioAPI,\n  data?: string | null,\n  context?: unknown,\n  keepScripts = typeof context === 'boolean' ? context : false,\n): AnyNode[] | null {\n  if (!data || typeof data !== 'string') {\n    return null;\n  }\n\n  if (typeof context === 'boolean') {\n    keepScripts = context;\n  }\n\n  const parsed = this.load(data, this._options, false);\n  if (!keepScripts) {\n    parsed('script').remove();\n  }\n\n  /*\n   * The `children` array is used by Cheerio internally to group elements that\n   * share the same parents. When nodes created through `parseHTML` are\n   * inserted into previously-existing DOM structures, they will be removed\n   * from the `children` array. The results of `parseHTML` should remain\n   * constant across these operations, so a shallow copy should be returned.\n   */\n  return [...parsed.root()[0].children];\n}\n\n/**\n * Sometimes you need to work with the top-level root element. To query it, you\n * can use `$.root()`.\n *\n * @category Static\n * @example\n *\n * ```js\n * $.root().append('<ul id=\"vegetables\"></ul>').html();\n * //=> <ul id=\"fruits\">...</ul><ul id=\"vegetables\"></ul>\n * ```\n *\n * @returns Cheerio instance wrapping the root node.\n * @alias Cheerio.root\n */\nexport function root(this: CheerioAPI): Cheerio<Document> {\n  return this(this._root);\n}\n\n/**\n * Checks to see if the `contained` DOM element is a descendant of the\n * `container` DOM element.\n *\n * @category Static\n * @param container - Potential parent node.\n * @param contained - Potential child node.\n * @returns Indicates if the nodes contain one another.\n * @alias Cheerio.contains\n * @see {@link https://api.jquery.com/jQuery.contains/}\n */\nexport function contains(container: AnyNode, contained: AnyNode): boolean {\n  // According to the jQuery API, an element does not \"contain\" itself\n  if (contained === container) {\n    return false;\n  }\n\n  /*\n   * Step up the descendants, stopping when the root element is reached\n   * (signaled by `.parent` returning a reference to the same object)\n   */\n  let next: AnyNode | null = contained;\n  while (next && next !== next.parent) {\n    next = next.parent;\n    if (next === container) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Extract multiple values from a document, and store them in an object.\n *\n * @category Static\n * @param map - An object containing key-value pairs. The keys are the names of\n *   the properties to be created on the object, and the values are the\n *   selectors to be used to extract the values.\n * @returns An object containing the extracted values.\n */\nexport function extract<M extends ExtractMap>(\n  this: CheerioAPI,\n  map: M,\n): ExtractedMap<M> {\n  return this.root().extract(map);\n}\n\ntype Writable<T> = { -readonly [P in keyof T]: T[P] };\n\n/**\n * $.merge().\n *\n * @category Static\n * @param arr1 - First array.\n * @param arr2 - Second array.\n * @returns `arr1`, with elements of `arr2` inserted.\n * @alias Cheerio.merge\n * @see {@link https://api.jquery.com/jQuery.merge/}\n */\nexport function merge<T>(\n  arr1: Writable<ArrayLike<T>>,\n  arr2: ArrayLike<T>,\n): ArrayLike<T> | undefined {\n  if (!isArrayLike(arr1) || !isArrayLike(arr2)) {\n    return;\n  }\n  let newLength = arr1.length;\n  const len = +arr2.length;\n\n  for (let i = 0; i < len; i++) {\n    arr1[newLength++] = arr2[i];\n  }\n  arr1.length = newLength;\n  return arr1;\n}\n\n/**\n * Checks if an object is array-like.\n *\n * @category Static\n * @param item - Item to check.\n * @returns Indicates if the item is array-like.\n */\nfunction isArrayLike(item: unknown): item is ArrayLike<unknown> {\n  if (Array.isArray(item)) {\n    return true;\n  }\n\n  if (\n    typeof item !== 'object' ||\n    item === null ||\n    !('length' in item) ||\n    typeof item.length !== 'number' ||\n    item.length < 0\n  ) {\n    return false;\n  }\n\n  for (let i = 0; i < item.length; i++) {\n    if (!(i in item)) {\n      return false;\n    }\n  }\n  return true;\n}\n", null, "/** Types of elements found in htmlparser2's DOM */\nexport var ElementType;\n(function (ElementType) {\n    /** Type for the root element of a document */\n    ElementType[\"Root\"] = \"root\";\n    /** Type for Text */\n    ElementType[\"Text\"] = \"text\";\n    /** Type for <? ... ?> */\n    ElementType[\"Directive\"] = \"directive\";\n    /** Type for <!-- ... --> */\n    ElementType[\"Comment\"] = \"comment\";\n    /** Type for <script> tags */\n    ElementType[\"Script\"] = \"script\";\n    /** Type for <style> tags */\n    ElementType[\"Style\"] = \"style\";\n    /** Type for Any tag */\n    ElementType[\"Tag\"] = \"tag\";\n    /** Type for <![CDATA[ ... ]]> */\n    ElementType[\"CDATA\"] = \"cdata\";\n    /** Type for <!doctype ...> */\n    ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType || (ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nexport function isTag(elem) {\n    return (elem.type === ElementType.Tag ||\n        elem.type === ElementType.Script ||\n        elem.type === ElementType.Style);\n}\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexport const Root = ElementType.Root;\n/** Type for Text */\nexport const Text = ElementType.Text;\n/** Type for <? ... ?> */\nexport const Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexport const Comment = ElementType.Comment;\n/** Type for <script> tags */\nexport const Script = ElementType.Script;\n/** Type for <style> tags */\nexport const Style = ElementType.Style;\n/** Type for Any tag */\nexport const Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexport const CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexport const Doctype = ElementType.Doctype;\n", "import { ElementType, isTag as isTagRaw } from \"domelementtype\";\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nexport class Node {\n    constructor() {\n        /** Parent of the node */\n        this.parent = null;\n        /** Previous sibling */\n        this.prev = null;\n        /** Next sibling */\n        this.next = null;\n        /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n        this.startIndex = null;\n        /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n        this.endIndex = null;\n    }\n    // Read-write aliases for properties\n    /**\n     * Same as {@link parent}.\n     * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n     */\n    get parentNode() {\n        return this.parent;\n    }\n    set parentNode(parent) {\n        this.parent = parent;\n    }\n    /**\n     * Same as {@link prev}.\n     * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n     */\n    get previousSibling() {\n        return this.prev;\n    }\n    set previousSibling(prev) {\n        this.prev = prev;\n    }\n    /**\n     * Same as {@link next}.\n     * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n     */\n    get nextSibling() {\n        return this.next;\n    }\n    set nextSibling(next) {\n        this.next = next;\n    }\n    /**\n     * Clone this node, and optionally its children.\n     *\n     * @param recursive Clone child nodes as well.\n     * @returns A clone of the node.\n     */\n    cloneNode(recursive = false) {\n        return cloneNode(this, recursive);\n    }\n}\n/**\n * A node that contains some data.\n */\nexport class DataNode extends Node {\n    /**\n     * @param data The content of the data node\n     */\n    constructor(data) {\n        super();\n        this.data = data;\n    }\n    /**\n     * Same as {@link data}.\n     * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n     */\n    get nodeValue() {\n        return this.data;\n    }\n    set nodeValue(data) {\n        this.data = data;\n    }\n}\n/**\n * Text within the document.\n */\nexport class Text extends DataNode {\n    constructor() {\n        super(...arguments);\n        this.type = ElementType.Text;\n    }\n    get nodeType() {\n        return 3;\n    }\n}\n/**\n * Comments within the document.\n */\nexport class Comment extends DataNode {\n    constructor() {\n        super(...arguments);\n        this.type = ElementType.Comment;\n    }\n    get nodeType() {\n        return 8;\n    }\n}\n/**\n * Processing instructions, including doc types.\n */\nexport class ProcessingInstruction extends DataNode {\n    constructor(name, data) {\n        super(data);\n        this.name = name;\n        this.type = ElementType.Directive;\n    }\n    get nodeType() {\n        return 1;\n    }\n}\n/**\n * A `Node` that can have children.\n */\nexport class NodeWithChildren extends Node {\n    /**\n     * @param children Children of the node. Only certain node types can have children.\n     */\n    constructor(children) {\n        super();\n        this.children = children;\n    }\n    // Aliases\n    /** First child of the node. */\n    get firstChild() {\n        var _a;\n        return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n    }\n    /** Last child of the node. */\n    get lastChild() {\n        return this.children.length > 0\n            ? this.children[this.children.length - 1]\n            : null;\n    }\n    /**\n     * Same as {@link children}.\n     * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n     */\n    get childNodes() {\n        return this.children;\n    }\n    set childNodes(children) {\n        this.children = children;\n    }\n}\nexport class CDATA extends NodeWithChildren {\n    constructor() {\n        super(...arguments);\n        this.type = ElementType.CDATA;\n    }\n    get nodeType() {\n        return 4;\n    }\n}\n/**\n * The root node of the document.\n */\nexport class Document extends NodeWithChildren {\n    constructor() {\n        super(...arguments);\n        this.type = ElementType.Root;\n    }\n    get nodeType() {\n        return 9;\n    }\n}\n/**\n * An element within the DOM.\n */\nexport class Element extends NodeWithChildren {\n    /**\n     * @param name Name of the tag, eg. `div`, `span`.\n     * @param attribs Object mapping attribute names to attribute values.\n     * @param children Children of the node.\n     */\n    constructor(name, attribs, children = [], type = name === \"script\"\n        ? ElementType.Script\n        : name === \"style\"\n            ? ElementType.Style\n            : ElementType.Tag) {\n        super(children);\n        this.name = name;\n        this.attribs = attribs;\n        this.type = type;\n    }\n    get nodeType() {\n        return 1;\n    }\n    // DOM Level 1 aliases\n    /**\n     * Same as {@link name}.\n     * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n     */\n    get tagName() {\n        return this.name;\n    }\n    set tagName(name) {\n        this.name = name;\n    }\n    get attributes() {\n        return Object.keys(this.attribs).map((name) => {\n            var _a, _b;\n            return ({\n                name,\n                value: this.attribs[name],\n                namespace: (_a = this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n                prefix: (_b = this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name],\n            });\n        });\n    }\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nexport function isTag(node) {\n    return isTagRaw(node);\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nexport function isCDATA(node) {\n    return node.type === ElementType.CDATA;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nexport function isText(node) {\n    return node.type === ElementType.Text;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nexport function isComment(node) {\n    return node.type === ElementType.Comment;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nexport function isDirective(node) {\n    return node.type === ElementType.Directive;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nexport function isDocument(node) {\n    return node.type === ElementType.Root;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has children, `false` otherwise.\n */\nexport function hasChildren(node) {\n    return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nexport function cloneNode(node, recursive = false) {\n    let result;\n    if (isText(node)) {\n        result = new Text(node.data);\n    }\n    else if (isComment(node)) {\n        result = new Comment(node.data);\n    }\n    else if (isTag(node)) {\n        const children = recursive ? cloneChildren(node.children) : [];\n        const clone = new Element(node.name, { ...node.attribs }, children);\n        children.forEach((child) => (child.parent = clone));\n        if (node.namespace != null) {\n            clone.namespace = node.namespace;\n        }\n        if (node[\"x-attribsNamespace\"]) {\n            clone[\"x-attribsNamespace\"] = { ...node[\"x-attribsNamespace\"] };\n        }\n        if (node[\"x-attribsPrefix\"]) {\n            clone[\"x-attribsPrefix\"] = { ...node[\"x-attribsPrefix\"] };\n        }\n        result = clone;\n    }\n    else if (isCDATA(node)) {\n        const children = recursive ? cloneChildren(node.children) : [];\n        const clone = new CDATA(children);\n        children.forEach((child) => (child.parent = clone));\n        result = clone;\n    }\n    else if (isDocument(node)) {\n        const children = recursive ? cloneChildren(node.children) : [];\n        const clone = new Document(children);\n        children.forEach((child) => (child.parent = clone));\n        if (node[\"x-mode\"]) {\n            clone[\"x-mode\"] = node[\"x-mode\"];\n        }\n        result = clone;\n    }\n    else if (isDirective(node)) {\n        const instruction = new ProcessingInstruction(node.name, node.data);\n        if (node[\"x-name\"] != null) {\n            instruction[\"x-name\"] = node[\"x-name\"];\n            instruction[\"x-publicId\"] = node[\"x-publicId\"];\n            instruction[\"x-systemId\"] = node[\"x-systemId\"];\n        }\n        result = instruction;\n    }\n    else {\n        throw new Error(`Not implemented yet: ${node.type}`);\n    }\n    result.startIndex = node.startIndex;\n    result.endIndex = node.endIndex;\n    if (node.sourceCodeLocation != null) {\n        result.sourceCodeLocation = node.sourceCodeLocation;\n    }\n    return result;\n}\nfunction cloneChildren(childs) {\n    const children = childs.map((child) => cloneNode(child, true));\n    for (let i = 1; i < children.length; i++) {\n        children[i].prev = children[i - 1];\n        children[i - 1].next = children[i];\n    }\n    return children;\n}\n", "import { ElementType } from \"domelementtype\";\nimport { Element, Text, Comment, CDATA, Document, ProcessingInstruction, } from \"./node.js\";\nexport * from \"./node.js\";\n// Default options\nconst defaultOpts = {\n    withStartIndices: false,\n    withEndIndices: false,\n    xmlMode: false,\n};\nexport class DomHandler {\n    /**\n     * @param callback Called once parsing has completed.\n     * @param options Settings for the handler.\n     * @param elementCB Callback whenever a tag is closed.\n     */\n    constructor(callback, options, elementCB) {\n        /** The elements of the DOM */\n        this.dom = [];\n        /** The root element for the DOM */\n        this.root = new Document(this.dom);\n        /** Indicated whether parsing has been completed. */\n        this.done = false;\n        /** Stack of open tags. */\n        this.tagStack = [this.root];\n        /** A data node that is still being written to. */\n        this.lastNode = null;\n        /** Reference to the parser instance. Used for location information. */\n        this.parser = null;\n        // Make it possible to skip arguments, for backwards-compatibility\n        if (typeof options === \"function\") {\n            elementCB = options;\n            options = defaultOpts;\n        }\n        if (typeof callback === \"object\") {\n            options = callback;\n            callback = undefined;\n        }\n        this.callback = callback !== null && callback !== void 0 ? callback : null;\n        this.options = options !== null && options !== void 0 ? options : defaultOpts;\n        this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;\n    }\n    onparserinit(parser) {\n        this.parser = parser;\n    }\n    // Resets the handler back to starting state\n    onreset() {\n        this.dom = [];\n        this.root = new Document(this.dom);\n        this.done = false;\n        this.tagStack = [this.root];\n        this.lastNode = null;\n        this.parser = null;\n    }\n    // Signals the handler that parsing is done\n    onend() {\n        if (this.done)\n            return;\n        this.done = true;\n        this.parser = null;\n        this.handleCallback(null);\n    }\n    onerror(error) {\n        this.handleCallback(error);\n    }\n    onclosetag() {\n        this.lastNode = null;\n        const elem = this.tagStack.pop();\n        if (this.options.withEndIndices) {\n            elem.endIndex = this.parser.endIndex;\n        }\n        if (this.elementCB)\n            this.elementCB(elem);\n    }\n    onopentag(name, attribs) {\n        const type = this.options.xmlMode ? ElementType.Tag : undefined;\n        const element = new Element(name, attribs, undefined, type);\n        this.addNode(element);\n        this.tagStack.push(element);\n    }\n    ontext(data) {\n        const { lastNode } = this;\n        if (lastNode && lastNode.type === ElementType.Text) {\n            lastNode.data += data;\n            if (this.options.withEndIndices) {\n                lastNode.endIndex = this.parser.endIndex;\n            }\n        }\n        else {\n            const node = new Text(data);\n            this.addNode(node);\n            this.lastNode = node;\n        }\n    }\n    oncomment(data) {\n        if (this.lastNode && this.lastNode.type === ElementType.Comment) {\n            this.lastNode.data += data;\n            return;\n        }\n        const node = new Comment(data);\n        this.addNode(node);\n        this.lastNode = node;\n    }\n    oncommentend() {\n        this.lastNode = null;\n    }\n    oncdatastart() {\n        const text = new Text(\"\");\n        const node = new CDATA([text]);\n        this.addNode(node);\n        text.parent = node;\n        this.lastNode = text;\n    }\n    oncdataend() {\n        this.lastNode = null;\n    }\n    onprocessinginstruction(name, data) {\n        const node = new ProcessingInstruction(name, data);\n        this.addNode(node);\n    }\n    handleCallback(error) {\n        if (typeof this.callback === \"function\") {\n            this.callback(error, this.dom);\n        }\n        else if (error) {\n            throw error;\n        }\n    }\n    addNode(node) {\n        const parent = this.tagStack[this.tagStack.length - 1];\n        const previousSibling = parent.children[parent.children.length - 1];\n        if (this.options.withStartIndices) {\n            node.startIndex = this.parser.startIndex;\n        }\n        if (this.options.withEndIndices) {\n            node.endIndex = this.parser.endIndex;\n        }\n        parent.children.push(node);\n        if (previousSibling) {\n            node.prev = previousSibling;\n            previousSibling.next = node;\n        }\n        node.parent = parent;\n        this.lastNode = null;\n    }\n}\nexport default DomHandler;\n", null, null, null, null, null, null, null, "export const elementNames = new Map([\n    \"altGlyph\",\n    \"altGlyphDef\",\n    \"altGlyphItem\",\n    \"animateColor\",\n    \"animateMotion\",\n    \"animateTransform\",\n    \"clipPath\",\n    \"feBlend\",\n    \"feColorMatrix\",\n    \"feComponentTransfer\",\n    \"feComposite\",\n    \"feConvolveMatrix\",\n    \"feDiffuseLighting\",\n    \"feDisplacementMap\",\n    \"feDistantLight\",\n    \"feDropShadow\",\n    \"feFlood\",\n    \"feFuncA\",\n    \"feFuncB\",\n    \"feFuncG\",\n    \"feFuncR\",\n    \"feGaussianBlur\",\n    \"feImage\",\n    \"feMerge\",\n    \"feMergeNode\",\n    \"feMorphology\",\n    \"feOffset\",\n    \"fePointLight\",\n    \"feSpecularLighting\",\n    \"feSpotLight\",\n    \"feTile\",\n    \"feTurbulence\",\n    \"foreignObject\",\n    \"glyphRef\",\n    \"linearGradient\",\n    \"radialGradient\",\n    \"textPath\",\n].map((val) => [val.toLowerCase(), val]));\nexport const attributeNames = new Map([\n    \"definitionURL\",\n    \"attributeName\",\n    \"attributeType\",\n    \"baseFrequency\",\n    \"baseProfile\",\n    \"calcMode\",\n    \"clipPathUnits\",\n    \"diffuseConstant\",\n    \"edgeMode\",\n    \"filterUnits\",\n    \"glyphRef\",\n    \"gradientTransform\",\n    \"gradientUnits\",\n    \"kernelMatrix\",\n    \"kernelUnitLength\",\n    \"keyPoints\",\n    \"keySplines\",\n    \"keyTimes\",\n    \"lengthAdjust\",\n    \"limitingConeAngle\",\n    \"markerHeight\",\n    \"markerUnits\",\n    \"markerWidth\",\n    \"maskContentUnits\",\n    \"maskUnits\",\n    \"numOctaves\",\n    \"pathLength\",\n    \"patternContentUnits\",\n    \"patternTransform\",\n    \"patternUnits\",\n    \"pointsAtX\",\n    \"pointsAtY\",\n    \"pointsAtZ\",\n    \"preserveAlpha\",\n    \"preserveAspectRatio\",\n    \"primitiveUnits\",\n    \"refX\",\n    \"refY\",\n    \"repeatCount\",\n    \"repeatDur\",\n    \"requiredExtensions\",\n    \"requiredFeatures\",\n    \"specularConstant\",\n    \"specularExponent\",\n    \"spreadMethod\",\n    \"startOffset\",\n    \"stdDeviation\",\n    \"stitchTiles\",\n    \"surfaceScale\",\n    \"systemLanguage\",\n    \"tableValues\",\n    \"targetX\",\n    \"targetY\",\n    \"textLength\",\n    \"viewBox\",\n    \"viewTarget\",\n    \"xChannelSelector\",\n    \"yChannelSelector\",\n    \"zoomAndPan\",\n].map((val) => [val.toLowerCase(), val]));\n", "/*\n * Module dependencies\n */\nimport * as ElementType from \"domelementtype\";\nimport { encodeXML, escapeAttribute, escapeText } from \"entities\";\n/**\n * Mixed-case SVG and MathML tags & attributes\n * recognized by the HTML parser.\n *\n * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign\n */\nimport { elementNames, attributeNames } from \"./foreignNames.js\";\nconst unencodedElements = new Set([\n    \"style\",\n    \"script\",\n    \"xmp\",\n    \"iframe\",\n    \"noembed\",\n    \"noframes\",\n    \"plaintext\",\n    \"noscript\",\n]);\nfunction replaceQuotes(value) {\n    return value.replace(/\"/g, \"&quot;\");\n}\n/**\n * Format attributes\n */\nfunction formatAttributes(attributes, opts) {\n    var _a;\n    if (!attributes)\n        return;\n    const encode = ((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) === false\n        ? replaceQuotes\n        : opts.xmlMode || opts.encodeEntities !== \"utf8\"\n            ? encodeXML\n            : escapeAttribute;\n    return Object.keys(attributes)\n        .map((key) => {\n        var _a, _b;\n        const value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : \"\";\n        if (opts.xmlMode === \"foreign\") {\n            /* Fix up mixed-case attribute names */\n            key = (_b = attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;\n        }\n        if (!opts.emptyAttrs && !opts.xmlMode && value === \"\") {\n            return key;\n        }\n        return `${key}=\"${encode(value)}\"`;\n    })\n        .join(\" \");\n}\n/**\n * Self-enclosing tags\n */\nconst singleTag = new Set([\n    \"area\",\n    \"base\",\n    \"basefont\",\n    \"br\",\n    \"col\",\n    \"command\",\n    \"embed\",\n    \"frame\",\n    \"hr\",\n    \"img\",\n    \"input\",\n    \"isindex\",\n    \"keygen\",\n    \"link\",\n    \"meta\",\n    \"param\",\n    \"source\",\n    \"track\",\n    \"wbr\",\n]);\n/**\n * Renders a DOM node or an array of DOM nodes to a string.\n *\n * Can be thought of as the equivalent of the `outerHTML` of the passed node(s).\n *\n * @param node Node to be rendered.\n * @param options Changes serialization behavior\n */\nexport function render(node, options = {}) {\n    const nodes = \"length\" in node ? node : [node];\n    let output = \"\";\n    for (let i = 0; i < nodes.length; i++) {\n        output += renderNode(nodes[i], options);\n    }\n    return output;\n}\nexport default render;\nfunction renderNode(node, options) {\n    switch (node.type) {\n        case ElementType.Root:\n            return render(node.children, options);\n        // @ts-expect-error We don't use `Doctype` yet\n        case ElementType.Doctype:\n        case ElementType.Directive:\n            return renderDirective(node);\n        case ElementType.Comment:\n            return renderComment(node);\n        case ElementType.CDATA:\n            return renderCdata(node);\n        case ElementType.Script:\n        case ElementType.Style:\n        case ElementType.Tag:\n            return renderTag(node, options);\n        case ElementType.Text:\n            return renderText(node, options);\n    }\n}\nconst foreignModeIntegrationPoints = new Set([\n    \"mi\",\n    \"mo\",\n    \"mn\",\n    \"ms\",\n    \"mtext\",\n    \"annotation-xml\",\n    \"foreignObject\",\n    \"desc\",\n    \"title\",\n]);\nconst foreignElements = new Set([\"svg\", \"math\"]);\nfunction renderTag(elem, opts) {\n    var _a;\n    // Handle SVG / MathML in HTML\n    if (opts.xmlMode === \"foreign\") {\n        /* Fix up mixed-case element names */\n        elem.name = (_a = elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name;\n        /* Exit foreign mode at integration points */\n        if (elem.parent &&\n            foreignModeIntegrationPoints.has(elem.parent.name)) {\n            opts = { ...opts, xmlMode: false };\n        }\n    }\n    if (!opts.xmlMode && foreignElements.has(elem.name)) {\n        opts = { ...opts, xmlMode: \"foreign\" };\n    }\n    let tag = `<${elem.name}`;\n    const attribs = formatAttributes(elem.attribs, opts);\n    if (attribs) {\n        tag += ` ${attribs}`;\n    }\n    if (elem.children.length === 0 &&\n        (opts.xmlMode\n            ? // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags\n                opts.selfClosingTags !== false\n            : // User explicitly asked for self-closing tags, even in HTML mode\n                opts.selfClosingTags && singleTag.has(elem.name))) {\n        if (!opts.xmlMode)\n            tag += \" \";\n        tag += \"/>\";\n    }\n    else {\n        tag += \">\";\n        if (elem.children.length > 0) {\n            tag += render(elem.children, opts);\n        }\n        if (opts.xmlMode || !singleTag.has(elem.name)) {\n            tag += `</${elem.name}>`;\n        }\n    }\n    return tag;\n}\nfunction renderDirective(elem) {\n    return `<${elem.data}>`;\n}\nfunction renderText(elem, opts) {\n    var _a;\n    let data = elem.data || \"\";\n    // If entities weren't decoded, no need to encode them back\n    if (((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) !== false &&\n        !(!opts.xmlMode &&\n            elem.parent &&\n            unencodedElements.has(elem.parent.name))) {\n        data =\n            opts.xmlMode || opts.encodeEntities !== \"utf8\"\n                ? encodeXML(data)\n                : escapeText(data);\n    }\n    return data;\n}\nfunction renderCdata(elem) {\n    return `<![CDATA[${elem.children[0].data}]]>`;\n}\nfunction renderComment(elem) {\n    return `<!--${elem.data}-->`;\n}\n", null, null, null, null, null, null, null, "/**\n * Methods for getting and modifying attributes.\n *\n * @module cheerio/attributes\n */\n\nimport { text } from '../static.js';\nimport { domEach, camelCase, cssCase } from '../utils.js';\nimport { isTag, type AnyNode, type Element } from 'domhandler';\nimport type { Cheerio } from '../cheerio.js';\nimport { innerText, textContent } from 'domutils';\nimport { ElementType } from 'htmlparser2';\nconst hasOwn =\n  // @ts-expect-error `hasOwn` is a standard object method\n  (Object.hasOwn as (object: unknown, prop: string) => boolean) ??\n  ((object: unknown, prop: string) =>\n    Object.prototype.hasOwnProperty.call(object, prop));\nconst rspace = /\\s+/;\nconst dataAttrPrefix = 'data-';\n\n// Attributes that are booleans\nconst rboolean =\n  /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i;\n// Matches strings that look like JSON objects or arrays\nconst rbrace = /^{[^]*}$|^\\[[^]*]$/;\n\n/**\n * Gets a node's attribute. For boolean attributes, it will return the value's\n * name should it be set.\n *\n * Also supports getting the `value` of several form elements.\n *\n * @private\n * @category Attributes\n * @param elem - Element to get the attribute of.\n * @param name - Name of the attribute.\n * @param xmlMode - Disable handling of special HTML attributes.\n * @returns The attribute's value.\n */\nfunction getAttr(\n  elem: AnyNode,\n  name: undefined,\n  xmlMode?: boolean,\n): Record<string, string> | undefined;\nfunction getAttr(\n  elem: AnyNode,\n  name: string,\n  xmlMode?: boolean,\n): string | undefined;\nfunction getAttr(\n  elem: AnyNode,\n  name: string | undefined,\n  xmlMode?: boolean,\n): Record<string, string> | string | undefined {\n  if (!elem || !isTag(elem)) return undefined;\n\n  elem.attribs ??= {};\n\n  // Return the entire attribs object if no attribute specified\n  if (!name) {\n    return elem.attribs;\n  }\n\n  if (hasOwn(elem.attribs, name)) {\n    // Get the (decoded) attribute\n    return !xmlMode && rboolean.test(name) ? name : elem.attribs[name];\n  }\n\n  // Mimic the DOM and return text content as value for `option's`\n  if (elem.name === 'option' && name === 'value') {\n    return text(elem.children);\n  }\n\n  // Mimic DOM with default value for radios/checkboxes\n  if (\n    elem.name === 'input' &&\n    (elem.attribs['type'] === 'radio' || elem.attribs['type'] === 'checkbox') &&\n    name === 'value'\n  ) {\n    return 'on';\n  }\n\n  return undefined;\n}\n\n/**\n * Sets the value of an attribute. The attribute will be deleted if the value is\n * `null`.\n *\n * @private\n * @param el - The element to set the attribute on.\n * @param name - The attribute's name.\n * @param value - The attribute's value.\n */\nfunction setAttr(el: Element, name: string, value: string | null) {\n  if (value === null) {\n    removeAttribute(el, name);\n  } else {\n    el.attribs[name] = `${value}`;\n  }\n}\n\n/**\n * Method for getting attributes. Gets the attribute value for only the first\n * element in the matched set.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('ul').attr('id');\n * //=> fruits\n * ```\n *\n * @param name - Name of the attribute.\n * @returns The attribute's value.\n * @see {@link https://api.jquery.com/attr/}\n */\nexport function attr<T extends AnyNode>(\n  this: Cheerio<T>,\n  name: string,\n): string | undefined;\n/**\n * Method for getting all attributes and their values of the first element in\n * the matched set.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('ul').attr();\n * //=> { id: 'fruits' }\n * ```\n *\n * @returns The attribute's values.\n * @see {@link https://api.jquery.com/attr/}\n */\nexport function attr<T extends AnyNode>(\n  this: Cheerio<T>,\n): Record<string, string> | undefined;\n/**\n * Method for setting attributes. Sets the attribute value for all elements in\n * the matched set. If you set an attribute's value to `null`, you remove that\n * attribute. You may also pass a `map` and `function`.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('.apple').attr('id', 'favorite').prop('outerHTML');\n * //=> <li class=\"apple\" id=\"favorite\">Apple</li>\n * ```\n *\n * @param name - Name of the attribute.\n * @param value - The new value of the attribute.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/attr/}\n */\nexport function attr<T extends AnyNode>(\n  this: Cheerio<T>,\n  name: string,\n  value?:\n    | string\n    | null\n    | ((this: Element, i: number, attrib: string) => string | null),\n): Cheerio<T>;\n/**\n * Method for setting multiple attributes at once. Sets the attribute value for\n * all elements in the matched set. If you set an attribute's value to `null`,\n * you remove that attribute.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('.apple').attr({ id: 'favorite' }).prop('outerHTML');\n * //=> <li class=\"apple\" id=\"favorite\">Apple</li>\n * ```\n *\n * @param values - Map of attribute names and values.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/attr/}\n */\nexport function attr<T extends AnyNode>(\n  this: Cheerio<T>,\n  values: Record<string, string | null>,\n): Cheerio<T>;\nexport function attr<T extends AnyNode>(\n  this: Cheerio<T>,\n  name?: string | Record<string, string | null>,\n  value?:\n    | string\n    | null\n    | ((this: Element, i: number, attrib: string) => string | null),\n): string | Cheerio<T> | undefined | Record<string, string> {\n  // Set the value (with attr map support)\n  if (typeof name === 'object' || value !== undefined) {\n    if (typeof value === 'function') {\n      if (typeof name !== 'string') {\n        {\n          throw new Error('Bad combination of arguments.');\n        }\n      }\n      return domEach(this, (el, i) => {\n        if (isTag(el)) setAttr(el, name, value.call(el, i, el.attribs[name]));\n      });\n    }\n    return domEach(this, (el) => {\n      if (!isTag(el)) return;\n\n      if (typeof name === 'object') {\n        for (const objName of Object.keys(name)) {\n          const objValue = name[objName];\n          setAttr(el, objName, objValue);\n        }\n      } else {\n        setAttr(el, name!, value!);\n      }\n    });\n  }\n\n  return arguments.length > 1\n    ? this\n    : getAttr(this[0], name!, this.options.xmlMode);\n}\n\n/**\n * Gets a node's prop.\n *\n * @private\n * @category Attributes\n * @param el - Element to get the prop of.\n * @param name - Name of the prop.\n * @param xmlMode - Disable handling of special HTML attributes.\n * @returns The prop's value.\n */\nfunction getProp(\n  el: Element,\n  name: string,\n  xmlMode?: boolean,\n): string | undefined | boolean | Element[keyof Element] {\n  return name in el\n    ? // @ts-expect-error TS doesn't like us accessing the value directly here.\n      (el[name] as string | undefined)\n    : !xmlMode && rboolean.test(name)\n      ? getAttr(el, name, false) !== undefined\n      : getAttr(el, name, xmlMode);\n}\n\n/**\n * Sets the value of a prop.\n *\n * @private\n * @param el - The element to set the prop on.\n * @param name - The prop's name.\n * @param value - The prop's value.\n * @param xmlMode - Disable handling of special HTML attributes.\n */\nfunction setProp(el: Element, name: string, value: unknown, xmlMode?: boolean) {\n  if (name in el) {\n    // @ts-expect-error Overriding value\n    el[name] = value;\n  } else {\n    setAttr(\n      el,\n      name,\n      !xmlMode && rboolean.test(name)\n        ? value\n          ? ''\n          : null\n        : `${value as string}`,\n    );\n  }\n}\n\ninterface StyleProp {\n  length: number;\n  [key: string]: string | number;\n  [index: number]: string;\n}\n\n/**\n * Method for getting and setting properties. Gets the property value for only\n * the first element in the matched set.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('input[type=\"checkbox\"]').prop('checked');\n * //=> false\n *\n * $('input[type=\"checkbox\"]').prop('checked', true).val();\n * //=> ok\n * ```\n *\n * @param name - Name of the property.\n * @returns If `value` is specified the instance itself, otherwise the prop's\n *   value.\n * @see {@link https://api.jquery.com/prop/}\n */\nexport function prop<T extends AnyNode>(\n  this: Cheerio<T>,\n  name: 'tagName' | 'nodeName',\n): string | undefined;\nexport function prop<T extends AnyNode>(\n  this: Cheerio<T>,\n  name: 'innerHTML' | 'outerHTML' | 'innerText' | 'textContent',\n): string | null;\n/**\n * Get a parsed CSS style object.\n *\n * @param name - Name of the property.\n * @returns The style object, or `undefined` if the element has no `style`\n *   attribute.\n */\nexport function prop<T extends AnyNode>(\n  this: Cheerio<T>,\n  name: 'style',\n): StyleProp | undefined;\n/**\n * Resolve `href` or `src` of supported elements. Requires the `baseURI` option\n * to be set, and a global `URL` object to be part of the environment.\n *\n * @example With `baseURI` set to `'https://example.com'`:\n *\n * ```js\n * $('<img src=\"image.png\">').prop('src');\n * //=> 'https://example.com/image.png'\n * ```\n *\n * @param name - Name of the property.\n * @returns The resolved URL, or `undefined` if the element is not supported.\n */\nexport function prop<T extends AnyNode>(\n  this: Cheerio<T>,\n  name: 'href' | 'src',\n): string | undefined;\n/**\n * Get a property of an element.\n *\n * @param name - Name of the property.\n * @returns The property's value.\n */\nexport function prop<T extends AnyNode, K extends keyof Element>(\n  this: Cheerio<T>,\n  name: K,\n): Element[K];\n/**\n * Set a property of an element.\n *\n * @param name - Name of the property.\n * @param value - Value to set the property to.\n * @returns The instance itself.\n */\nexport function prop<T extends AnyNode, K extends keyof Element>(\n  this: Cheerio<T>,\n  name: K,\n  value:\n    | Element[K]\n    | ((this: Element, i: number, prop: K) => Element[keyof Element]),\n): Cheerio<T>;\n/**\n * Set multiple properties of an element.\n *\n * @example\n *\n * ```js\n * $('input[type=\"checkbox\"]').prop({\n *   checked: true,\n *   disabled: false,\n * });\n * ```\n *\n * @param map - Object of properties to set.\n * @returns The instance itself.\n */\nexport function prop<T extends AnyNode>(\n  this: Cheerio<T>,\n  map: Record<string, string | Element[keyof Element] | boolean>,\n): Cheerio<T>;\n/**\n * Set a property of an element.\n *\n * @param name - Name of the property.\n * @param value - Value to set the property to.\n * @returns The instance itself.\n */\nexport function prop<T extends AnyNode>(\n  this: Cheerio<T>,\n  name: string,\n  value:\n    | string\n    | boolean\n    | null\n    | ((this: Element, i: number, prop: string) => string | boolean),\n): Cheerio<T>;\n/**\n * Get a property of an element.\n *\n * @param name - The property's name.\n * @returns The property's value.\n */\nexport function prop<T extends AnyNode>(this: Cheerio<T>, name: string): string;\nexport function prop<T extends AnyNode>(\n  this: Cheerio<T>,\n  name: string | Record<string, string | Element[keyof Element] | boolean>,\n  value?: unknown,\n):\n  | Cheerio<T>\n  | string\n  | boolean\n  | undefined\n  | null\n  | Element[keyof Element]\n  | StyleProp {\n  if (typeof name === 'string' && value === undefined) {\n    const el = this[0];\n\n    if (!el) return undefined;\n\n    switch (name) {\n      case 'style': {\n        const property = this.css() as StyleProp;\n        const keys = Object.keys(property);\n        for (let i = 0; i < keys.length; i++) {\n          property[i] = keys[i];\n        }\n\n        property.length = keys.length;\n\n        return property;\n      }\n      case 'tagName':\n      case 'nodeName': {\n        if (!isTag(el)) return undefined;\n        return el.name.toUpperCase();\n      }\n\n      case 'href':\n      case 'src': {\n        if (!isTag(el)) return undefined;\n        const prop = el.attribs?.[name];\n\n        if (\n          typeof URL !== 'undefined' &&\n          ((name === 'href' && (el.tagName === 'a' || el.tagName === 'link')) ||\n            (name === 'src' &&\n              (el.tagName === 'img' ||\n                el.tagName === 'iframe' ||\n                el.tagName === 'audio' ||\n                el.tagName === 'video' ||\n                el.tagName === 'source'))) &&\n          prop !== undefined &&\n          this.options.baseURI\n        ) {\n          return new URL(prop, this.options.baseURI).href;\n        }\n\n        return prop;\n      }\n\n      case 'innerText': {\n        return innerText(el);\n      }\n\n      case 'textContent': {\n        return textContent(el);\n      }\n\n      case 'outerHTML': {\n        if (el.type === ElementType.Root) return this.html();\n        return this.clone().wrap('<container />').parent().html();\n      }\n\n      case 'innerHTML': {\n        return this.html();\n      }\n\n      default: {\n        if (!isTag(el)) return undefined;\n        return getProp(el, name, this.options.xmlMode);\n      }\n    }\n  }\n\n  if (typeof name === 'object' || value !== undefined) {\n    if (typeof value === 'function') {\n      if (typeof name === 'object') {\n        throw new TypeError('Bad combination of arguments.');\n      }\n      return domEach(this, (el, i) => {\n        if (isTag(el)) {\n          setProp(\n            el,\n            name,\n            value.call(el, i, getProp(el, name, this.options.xmlMode)),\n            this.options.xmlMode,\n          );\n        }\n      });\n    }\n\n    return domEach(this, (el) => {\n      if (!isTag(el)) return;\n\n      if (typeof name === 'object') {\n        for (const key of Object.keys(name)) {\n          const val = name[key];\n          setProp(el, key, val, this.options.xmlMode);\n        }\n      } else {\n        setProp(el, name, value, this.options.xmlMode);\n      }\n    });\n  }\n\n  return undefined;\n}\n\n/**\n * An element with a data attribute.\n *\n * @private\n */\ninterface DataElement extends Element {\n  /** The data attribute. */\n  data?: Record<string, unknown>;\n}\n\n/**\n * Sets the value of a data attribute.\n *\n * @private\n * @param elem - The element to set the data attribute on.\n * @param name - The data attribute's name.\n * @param value - The data attribute's value.\n */\nfunction setData(\n  elem: DataElement,\n  name: string | Record<string, unknown>,\n  value?: unknown,\n) {\n  elem.data ??= {};\n\n  if (typeof name === 'object') Object.assign(elem.data, name);\n  else if (typeof name === 'string' && value !== undefined) {\n    elem.data[name] = value;\n  }\n}\n\n/**\n * Read _all_ HTML5 `data-*` attributes from the equivalent HTML5 `data-*`\n * attribute, and cache the value in the node's internal data store.\n *\n * @private\n * @category Attributes\n * @param el - Element to get the data attribute of.\n * @returns A map with all of the data attributes.\n */\nfunction readAllData(el: DataElement): unknown {\n  for (const domName of Object.keys(el.attribs)) {\n    if (!domName.startsWith(dataAttrPrefix)) {\n      continue;\n    }\n\n    const jsName = camelCase(domName.slice(dataAttrPrefix.length));\n\n    if (!hasOwn(el.data, jsName)) {\n      el.data![jsName] = parseDataValue(el.attribs[domName]);\n    }\n  }\n\n  return el.data;\n}\n\n/**\n * Read the specified attribute from the equivalent HTML5 `data-*` attribute,\n * and (if present) cache the value in the node's internal data store.\n *\n * @private\n * @category Attributes\n * @param el - Element to get the data attribute of.\n * @param name - Name of the data attribute.\n * @returns The data attribute's value.\n */\nfunction readData(el: DataElement, name: string): unknown {\n  const domName = dataAttrPrefix + cssCase(name);\n  const data = el.data!;\n\n  if (hasOwn(data, name)) {\n    return data[name];\n  }\n\n  if (hasOwn(el.attribs, domName)) {\n    return (data[name] = parseDataValue(el.attribs[domName]));\n  }\n\n  return undefined;\n}\n\n/**\n * Coerce string data-* attributes to their corresponding JavaScript primitives.\n *\n * @private\n * @category Attributes\n * @param value - The value to parse.\n * @returns The parsed value.\n */\nfunction parseDataValue(value: string): unknown {\n  if (value === 'null') return null;\n  if (value === 'true') return true;\n  if (value === 'false') return false;\n  const num = Number(value);\n  if (value === String(num)) return num;\n  if (rbrace.test(value)) {\n    try {\n      return JSON.parse(value);\n    } catch {\n      /* Ignore */\n    }\n  }\n  return value;\n}\n\n/**\n * Method for getting data attributes, for only the first element in the matched\n * set.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('<div data-apple-color=\"red\"></div>').data('apple-color');\n * //=> 'red'\n * ```\n *\n * @param name - Name of the data attribute.\n * @returns The data attribute's value, or `undefined` if the attribute does not\n *   exist.\n * @see {@link https://api.jquery.com/data/}\n */\nexport function data<T extends AnyNode>(\n  this: Cheerio<T>,\n  name: string,\n): unknown;\n/**\n * Method for getting all of an element's data attributes, for only the first\n * element in the matched set.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('<div data-apple-color=\"red\"></div>').data();\n * //=> { appleColor: 'red' }\n * ```\n *\n * @returns A map with all of the data attributes.\n * @see {@link https://api.jquery.com/data/}\n */\nexport function data<T extends AnyNode>(\n  this: Cheerio<T>,\n): Record<string, unknown>;\n/**\n * Method for setting data attributes, for only the first element in the matched\n * set.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * const apple = $('.apple').data('kind', 'mac');\n *\n * apple.data('kind');\n * //=> 'mac'\n * ```\n *\n * @param name - Name of the data attribute.\n * @param value - The new value.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/data/}\n */\nexport function data<T extends AnyNode>(\n  this: Cheerio<T>,\n  name: string,\n  value: unknown,\n): Cheerio<T>;\n/**\n * Method for setting multiple data attributes at once, for only the first\n * element in the matched set.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * const apple = $('.apple').data({ kind: 'mac' });\n *\n * apple.data('kind');\n * //=> 'mac'\n * ```\n *\n * @param values - Map of names to values.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/data/}\n */\nexport function data<T extends AnyNode>(\n  this: Cheerio<T>,\n  values: Record<string, unknown>,\n): Cheerio<T>;\nexport function data<T extends AnyNode>(\n  this: Cheerio<T>,\n  name?: string | Record<string, unknown>,\n  value?: unknown,\n): unknown {\n  const elem = this[0];\n\n  if (!elem || !isTag(elem)) return;\n\n  const dataEl: DataElement = elem;\n  dataEl.data ??= {};\n\n  // Return the entire data object if no data specified\n  if (name == null) {\n    return readAllData(dataEl);\n  }\n\n  // Set the value (with attr map support)\n  if (typeof name === 'object' || value !== undefined) {\n    domEach(this, (el) => {\n      if (isTag(el)) {\n        if (typeof name === 'object') setData(el, name);\n        else setData(el, name, value);\n      }\n    });\n    return this;\n  }\n\n  return readData(dataEl, name);\n}\n\n/**\n * Method for getting the value of input, select, and textarea. Note: Support\n * for `map`, and `function` has not been added yet.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('input[type=\"text\"]').val();\n * //=> input_text\n * ```\n *\n * @returns The value.\n * @see {@link https://api.jquery.com/val/}\n */\nexport function val<T extends AnyNode>(\n  this: Cheerio<T>,\n): string | undefined | string[];\n/**\n * Method for setting the value of input, select, and textarea. Note: Support\n * for `map`, and `function` has not been added yet.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('input[type=\"text\"]').val('test').prop('outerHTML');\n * //=> <input type=\"text\" value=\"test\"/>\n * ```\n *\n * @param value - The new value.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/val/}\n */\nexport function val<T extends AnyNode>(\n  this: Cheerio<T>,\n  value: string | string[],\n): Cheerio<T>;\nexport function val<T extends AnyNode>(\n  this: Cheerio<T>,\n  value?: string | string[],\n): string | string[] | Cheerio<T> | undefined {\n  const querying = arguments.length === 0;\n  const element = this[0];\n\n  if (!element || !isTag(element)) return querying ? undefined : this;\n\n  switch (element.name) {\n    case 'textarea': {\n      return this.text(value as string);\n    }\n    case 'select': {\n      const option = this.find('option:selected');\n      if (!querying) {\n        if (this.attr('multiple') == null && typeof value === 'object') {\n          return this;\n        }\n\n        this.find('option').removeAttr('selected');\n\n        const values = typeof value === 'object' ? value : [value];\n        for (const val of values) {\n          this.find(`option[value=\"${val}\"]`).attr('selected', '');\n        }\n\n        return this;\n      }\n\n      return this.attr('multiple')\n        ? option.toArray().map((el) => text(el.children))\n        : option.attr('value');\n    }\n    case 'button':\n    case 'input':\n    case 'option': {\n      return querying\n        ? this.attr('value')\n        : this.attr('value', value as string);\n    }\n  }\n\n  return undefined;\n}\n\n/**\n * Remove an attribute.\n *\n * @private\n * @param elem - Node to remove attribute from.\n * @param name - Name of the attribute to remove.\n */\nfunction removeAttribute(elem: Element, name: string) {\n  if (!elem.attribs || !hasOwn(elem.attribs, name)) return;\n\n  delete elem.attribs[name];\n}\n\n/**\n * Splits a space-separated list of names to individual names.\n *\n * @category Attributes\n * @param names - Names to split.\n * @returns - Split names.\n */\nfunction splitNames(names?: string): string[] {\n  return names ? names.trim().split(rspace) : [];\n}\n\n/**\n * Method for removing attributes by `name`.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('.pear').removeAttr('class').prop('outerHTML');\n * //=> <li>Pear</li>\n *\n * $('.apple').attr('id', 'favorite');\n * $('.apple').removeAttr('id class').prop('outerHTML');\n * //=> <li>Apple</li>\n * ```\n *\n * @param name - Name of the attribute.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/removeAttr/}\n */\nexport function removeAttr<T extends AnyNode>(\n  this: Cheerio<T>,\n  name: string,\n): Cheerio<T> {\n  const attrNames = splitNames(name);\n\n  for (const attrName of attrNames) {\n    domEach(this, (elem) => {\n      if (isTag(elem)) removeAttribute(elem, attrName);\n    });\n  }\n\n  return this;\n}\n\n/**\n * Check to see if _any_ of the matched elements have the given `className`.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('.pear').hasClass('pear');\n * //=> true\n *\n * $('apple').hasClass('fruit');\n * //=> false\n *\n * $('li').hasClass('pear');\n * //=> true\n * ```\n *\n * @param className - Name of the class.\n * @returns Indicates if an element has the given `className`.\n * @see {@link https://api.jquery.com/hasClass/}\n */\nexport function hasClass<T extends AnyNode>(\n  this: Cheerio<T>,\n  className: string,\n): boolean {\n  return this.toArray().some((elem) => {\n    const clazz = isTag(elem) && elem.attribs['class'];\n    let idx = -1;\n\n    if (clazz && className.length > 0) {\n      while ((idx = clazz.indexOf(className, idx + 1)) > -1) {\n        const end = idx + className.length;\n\n        if (\n          (idx === 0 || rspace.test(clazz[idx - 1])) &&\n          (end === clazz.length || rspace.test(clazz[end]))\n        ) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  });\n}\n\n/**\n * Adds class(es) to all of the matched elements. Also accepts a `function`.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('.pear').addClass('fruit').prop('outerHTML');\n * //=> <li class=\"pear fruit\">Pear</li>\n *\n * $('.apple').addClass('fruit red').prop('outerHTML');\n * //=> <li class=\"apple fruit red\">Apple</li>\n * ```\n *\n * @param value - Name of new class.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/addClass/}\n */\nexport function addClass<T extends AnyNode, R extends ArrayLike<T>>(\n  this: R,\n  value?:\n    | string\n    | ((this: Element, i: number, className: string) => string | undefined),\n): R {\n  // Support functions\n  if (typeof value === 'function') {\n    return domEach(this, (el, i) => {\n      if (isTag(el)) {\n        const className = el.attribs['class'] || '';\n        addClass.call([el], value.call(el, i, className));\n      }\n    });\n  }\n\n  // Return if no value or not a string or function\n  if (!value || typeof value !== 'string') return this;\n\n  const classNames = value.split(rspace);\n  const numElements = this.length;\n\n  for (let i = 0; i < numElements; i++) {\n    const el = this[i];\n    // If selected element isn't a tag, move on\n    if (!isTag(el)) continue;\n\n    // If we don't already have classes \u2014 always set xmlMode to false here, as it doesn't matter for classes\n    const className = getAttr(el, 'class', false);\n\n    if (className) {\n      let setClass = ` ${className} `;\n\n      // Check if class already exists\n      for (const cn of classNames) {\n        const appendClass = `${cn} `;\n        if (!setClass.includes(` ${appendClass}`)) setClass += appendClass;\n      }\n\n      setAttr(el, 'class', setClass.trim());\n    } else {\n      setAttr(el, 'class', classNames.join(' ').trim());\n    }\n  }\n\n  return this;\n}\n\n/**\n * Removes one or more space-separated classes from the selected elements. If no\n * `className` is defined, all classes will be removed. Also accepts a\n * `function`.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('.pear').removeClass('pear').prop('outerHTML');\n * //=> <li class=\"\">Pear</li>\n *\n * $('.apple').addClass('red').removeClass().prop('outerHTML');\n * //=> <li class=\"\">Apple</li>\n * ```\n *\n * @param name - Name of the class. If not specified, removes all elements.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/removeClass/}\n */\nexport function removeClass<T extends AnyNode, R extends ArrayLike<T>>(\n  this: R,\n  name?:\n    | string\n    | ((this: Element, i: number, className: string) => string | undefined),\n): R {\n  // Handle if value is a function\n  if (typeof name === 'function') {\n    return domEach(this, (el, i) => {\n      if (isTag(el)) {\n        removeClass.call([el], name.call(el, i, el.attribs['class'] || ''));\n      }\n    });\n  }\n\n  const classes = splitNames(name);\n  const numClasses = classes.length;\n  const removeAll = arguments.length === 0;\n\n  return domEach(this, (el) => {\n    if (!isTag(el)) return;\n\n    if (removeAll) {\n      // Short circuit the remove all case as this is the nice one\n      el.attribs['class'] = '';\n    } else {\n      const elClasses = splitNames(el.attribs['class']);\n      let changed = false;\n\n      for (let j = 0; j < numClasses; j++) {\n        const index = elClasses.indexOf(classes[j]);\n\n        if (index !== -1) {\n          elClasses.splice(index, 1);\n          changed = true;\n\n          /*\n           * We have to do another pass to ensure that there are not duplicate\n           * classes listed\n           */\n          j--;\n        }\n      }\n      if (changed) {\n        el.attribs['class'] = elClasses.join(' ');\n      }\n    }\n  });\n}\n\n/**\n * Add or remove class(es) from the matched elements, depending on either the\n * class's presence or the value of the switch argument. Also accepts a\n * `function`.\n *\n * @category Attributes\n * @example\n *\n * ```js\n * $('.apple.green').toggleClass('fruit green red').prop('outerHTML');\n * //=> <li class=\"apple fruit red\">Apple</li>\n *\n * $('.apple.green').toggleClass('fruit green red', true).prop('outerHTML');\n * //=> <li class=\"apple green fruit red\">Apple</li>\n * ```\n *\n * @param value - Name of the class. Can also be a function.\n * @param stateVal - If specified the state of the class.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/toggleClass/}\n */\nexport function toggleClass<T extends AnyNode, R extends ArrayLike<T>>(\n  this: R,\n  value?:\n    | string\n    | ((\n        this: Element,\n        i: number,\n        className: string,\n        stateVal?: boolean,\n      ) => string),\n  stateVal?: boolean,\n): R {\n  // Support functions\n  if (typeof value === 'function') {\n    return domEach(this, (el, i) => {\n      if (isTag(el)) {\n        toggleClass.call(\n          [el],\n          value.call(el, i, el.attribs['class'] || '', stateVal),\n          stateVal,\n        );\n      }\n    });\n  }\n\n  // Return if no value or not a string or function\n  if (!value || typeof value !== 'string') return this;\n\n  const classNames = value.split(rspace);\n  const numClasses = classNames.length;\n  const state = typeof stateVal === 'boolean' ? (stateVal ? 1 : -1) : 0;\n  const numElements = this.length;\n\n  for (let i = 0; i < numElements; i++) {\n    const el = this[i];\n    // If selected element isn't a tag, move on\n    if (!isTag(el)) continue;\n\n    const elementClasses = splitNames(el.attribs['class']);\n\n    // Check if class already exists\n    for (let j = 0; j < numClasses; j++) {\n      // Check if the class name is currently defined\n      const index = elementClasses.indexOf(classNames[j]);\n\n      // Add if stateValue === true or we are toggling and there is no value\n      if (state >= 0 && index === -1) {\n        elementClasses.push(classNames[j]);\n      } else if (state <= 0 && index !== -1) {\n        // Otherwise remove but only if the item exists\n        elementClasses.splice(index, 1);\n      }\n    }\n\n    el.attribs['class'] = elementClasses.join(' ');\n  }\n\n  return this;\n}\n", "import type { AnyNode } from 'domhandler';\nimport type { Cheerio } from './cheerio.js';\n\n/**\n * Checks if an object is a Cheerio instance.\n *\n * @category Utils\n * @param maybeCheerio - The object to check.\n * @returns Whether the object is a Cheerio instance.\n */\nexport function isCheerio<T>(\n  maybeCheerio: unknown,\n): maybeCheerio is Cheerio<T> {\n  return (maybeCheerio as Cheerio<T>).cheerio != null;\n}\n\n/**\n * Convert a string to camel case notation.\n *\n * @private\n * @category Utils\n * @param str - The string to be converted.\n * @returns String in camel case notation.\n */\nexport function camelCase(str: string): string {\n  return str.replace(/[._-](\\w|$)/g, (_, x) => (x as string).toUpperCase());\n}\n\n/**\n * Convert a string from camel case to \"CSS case\", where word boundaries are\n * described by hyphens (\"-\") and all characters are lower-case.\n *\n * @private\n * @category Utils\n * @param str - The string to be converted.\n * @returns String in \"CSS case\".\n */\nexport function cssCase(str: string): string {\n  return str.replace(/[A-Z]/g, '-$&').toLowerCase();\n}\n\n/**\n * Iterate over each DOM element without creating intermediary Cheerio\n * instances.\n *\n * This is indented for use internally to avoid otherwise unnecessary memory\n * pressure introduced by _make.\n *\n * @category Utils\n * @param array - The array to iterate over.\n * @param fn - Function to call.\n * @returns The original instance.\n */\nexport function domEach<\n  T extends AnyNode,\n  Arr extends ArrayLike<T> = Cheerio<T>,\n>(array: Arr, fn: (elem: T, index: number) => void): Arr {\n  const len = array.length;\n  for (let i = 0; i < len; i++) fn(array[i], i);\n  return array;\n}\n\nconst enum CharacterCode {\n  LowerA = 97,\n  LowerZ = 122,\n  UpperA = 65,\n  UpperZ = 90,\n  Exclamation = 33,\n}\n\n/**\n * Check if string is HTML.\n *\n * Tests for a `<` within a string, immediate followed by a letter and\n * eventually followed by a `>`.\n *\n * @private\n * @category Utils\n * @param str - The string to check.\n * @returns Indicates if `str` is HTML.\n */\nexport function isHtml(str: string): boolean {\n  if (typeof str !== 'string') {\n    return false;\n  }\n\n  const tagStart = str.indexOf('<');\n\n  if (tagStart === -1 || tagStart > str.length - 3) return false;\n\n  const tagChar = str.charCodeAt(tagStart + 1) as CharacterCode;\n\n  return (\n    ((tagChar >= CharacterCode.LowerA && tagChar <= CharacterCode.LowerZ) ||\n      (tagChar >= CharacterCode.UpperA && tagChar <= CharacterCode.UpperZ) ||\n      tagChar === CharacterCode.Exclamation) &&\n    str.includes('>', tagStart + 2)\n  );\n}\n", "// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\n\nconst decodeMap = new Map([\n    [0, 65_533],\n    // C1 Unicode control character reference replacements\n    [128, 8364],\n    [130, 8218],\n    [131, 402],\n    [132, 8222],\n    [133, 8230],\n    [134, 8224],\n    [135, 8225],\n    [136, 710],\n    [137, 8240],\n    [138, 352],\n    [139, 8249],\n    [140, 338],\n    [142, 381],\n    [145, 8216],\n    [146, 8217],\n    [147, 8220],\n    [148, 8221],\n    [149, 8226],\n    [150, 8211],\n    [151, 8212],\n    [152, 732],\n    [153, 8482],\n    [154, 353],\n    [155, 8250],\n    [156, 339],\n    [158, 382],\n    [159, 376],\n]);\n\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint: (...codePoints: number[]) => string =\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins\n    String.fromCodePoint ??\n    ((codePoint: number): string => {\n        let output = \"\";\n\n        if (codePoint > 0xff_ff) {\n            codePoint -= 0x1_00_00;\n            output += String.fromCharCode(\n                ((codePoint >>> 10) & 0x3_ff) | 0xd8_00,\n            );\n            codePoint = 0xdc_00 | (codePoint & 0x3_ff);\n        }\n\n        output += String.fromCharCode(codePoint);\n        return output;\n    });\n\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint: number): number {\n    if (\n        (codePoint >= 0xd8_00 && codePoint <= 0xdf_ff) ||\n        codePoint > 0x10_ff_ff\n    ) {\n        return 0xff_fd;\n    }\n\n    return decodeMap.get(codePoint) ?? codePoint;\n}\n\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport function decodeCodePoint(codePoint: number): string {\n    return fromCodePoint(replaceCodePoint(codePoint));\n}\n", "/*\n * Shared base64 decode helper for generated decode data.\n * Assumes global atob is available.\n */\nexport function decodeBase64(input: string): Uint16Array {\n    const binary: string =\n        // eslint-disable-next-line n/no-unsupported-features/node-builtins\n        typeof atob === \"function\"\n            ? // Browser (and Node >=16)\n              // eslint-disable-next-line n/no-unsupported-features/node-builtins\n              atob(input)\n            : // Older Node versions (<16)\n              // eslint-disable-next-line n/no-unsupported-features/node-builtins\n              typeof Buffer.from === \"function\"\n              ? // eslint-disable-next-line n/no-unsupported-features/node-builtins\n                Buffer.from(input, \"base64\").toString(\"binary\")\n              : // eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api\n                new Buffer(input, \"base64\").toString(\"binary\");\n\n    const evenLength = binary.length & ~1; // Round down to even length\n    const out = new Uint16Array(evenLength / 2);\n\n    for (let index = 0, outIndex = 0; index < evenLength; index += 2) {\n        const lo = binary.charCodeAt(index);\n        const hi = binary.charCodeAt(index + 1);\n        out[outIndex++] = lo | (hi << 8);\n    }\n\n    return out;\n}\n", "// Generated using scripts/write-decode-map.ts\n\nimport { decodeBase64 } from \"../internal/decode-shared.js\";\nexport const htmlDecodeTree: Uint16Array = /* #__PURE__ */ decodeBase64(\n    \"QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg\",\n);\n", "// Generated using scripts/write-decode-map.ts\n\nimport { decodeBase64 } from \"../internal/decode-shared.js\";\nexport const xmlDecodeTree: Uint16Array = /* #__PURE__ */ decodeBase64(\n    \"AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg\",\n);\n", "/**\n * Bit flags & masks for the binary trie encoding used for entity decoding.\n *\n * Bit layout (16 bits total):\n * 15..14 VALUE_LENGTH   (+1 encoding; 0 => no value)\n * 13     FLAG13.        If valueLength>0: semicolon required flag (implicit ';').\n *                       If valueLength==0: compact run flag.\n * 12..7  BRANCH_LENGTH  Branch length (0 => single branch in 6..0 if jumpOffset==char) OR run length (when compact run)\n * 6..0   JUMP_TABLE     Jump offset (jump table) OR single-branch char code OR first run char\n */\nexport enum BinTrieFlags {\n    VALUE_LENGTH = 0b1100_0000_0000_0000,\n    FLAG13 = 0b0010_0000_0000_0000,\n    BRANCH_LENGTH = 0b0001_1111_1000_0000,\n    JUMP_TABLE = 0b0000_0000_0111_1111,\n}\n", "import { fromCodePoint, replaceCodePoint } from \"./decode-codepoint.js\";\nimport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { BinTrieFlags } from \"./internal/bin-trie-flags.js\";\n\nconst enum CharCodes {\n    NUM = 35, // \"#\"\n    SEMI = 59, // \";\"\n    EQUALS = 61, // \"=\"\n    ZERO = 48, // \"0\"\n    NINE = 57, // \"9\"\n    LOWER_A = 97, // \"a\"\n    LOWER_F = 102, // \"f\"\n    LOWER_X = 120, // \"x\"\n    LOWER_Z = 122, // \"z\"\n    UPPER_A = 65, // \"A\"\n    UPPER_F = 70, // \"F\"\n    UPPER_Z = 90, // \"Z\"\n}\n\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b10_0000;\n\nfunction isNumber(code: number): boolean {\n    return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\n\nfunction isHexadecimalCharacter(code: number): boolean {\n    return (\n        (code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F)\n    );\n}\n\nfunction isAsciiAlphaNumeric(code: number): boolean {\n    return (\n        (code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n        isNumber(code)\n    );\n}\n\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code: number): boolean {\n    return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\n\nconst enum EntityDecoderState {\n    EntityStart,\n    NumericStart,\n    NumericDecimal,\n    NumericHex,\n    NamedEntity,\n}\n\nexport enum DecodingMode {\n    /** Entities in text nodes that can end with any character. */\n    Legacy = 0,\n    /** Only allow entities terminated with a semicolon. */\n    Strict = 1,\n    /** Entities in attributes have limitations on ending characters. */\n    Attribute = 2,\n}\n\n/**\n * Producers for character reference errors as defined in the HTML spec.\n */\nexport interface EntityErrorProducer {\n    missingSemicolonAfterCharacterReference(): void;\n    absenceOfDigitsInNumericCharacterReference(\n        consumedCharacters: number,\n    ): void;\n    validateNumericCharacterReference(code: number): void;\n}\n\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n    constructor(\n        /** The tree used to decode entities. */\n        // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive\n        private readonly decodeTree: Uint16Array,\n        /**\n         * The function that is called when a codepoint is decoded.\n         *\n         * For multi-byte named entities, this will be called multiple times,\n         * with the second codepoint, and the same `consumed` value.\n         *\n         * @param codepoint The decoded codepoint.\n         * @param consumed The number of bytes consumed by the decoder.\n         */\n        private readonly emitCodePoint: (cp: number, consumed: number) => void,\n        /** An object that is used to produce errors. */\n        private readonly errors?: EntityErrorProducer | undefined,\n    ) {}\n\n    /** The current state of the decoder. */\n    private state = EntityDecoderState.EntityStart;\n    /** Characters that were consumed while parsing an entity. */\n    private consumed = 1;\n    /**\n     * The result of the entity.\n     *\n     * Either the result index of a numeric entity, or the codepoint of a\n     * numeric entity.\n     */\n    private result = 0;\n\n    /** The current index in the decode tree. */\n    private treeIndex = 0;\n    /** The number of characters that were consumed in excess. */\n    private excess = 1;\n    /** The mode in which the decoder is operating. */\n    private decodeMode = DecodingMode.Strict;\n    /** The number of characters that have been consumed in the current run. */\n    private runConsumed = 0;\n\n    /** Resets the instance to make it reusable. */\n    startEntity(decodeMode: DecodingMode): void {\n        this.decodeMode = decodeMode;\n        this.state = EntityDecoderState.EntityStart;\n        this.result = 0;\n        this.treeIndex = 0;\n        this.excess = 1;\n        this.consumed = 1;\n        this.runConsumed = 0;\n    }\n\n    /**\n     * Write an entity to the decoder. This can be called multiple times with partial entities.\n     * If the entity is incomplete, the decoder will return -1.\n     *\n     * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n     * entity is incomplete, and resume when the next string is written.\n     *\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    write(input: string, offset: number): number {\n        switch (this.state) {\n            case EntityDecoderState.EntityStart: {\n                if (input.charCodeAt(offset) === CharCodes.NUM) {\n                    this.state = EntityDecoderState.NumericStart;\n                    this.consumed += 1;\n                    return this.stateNumericStart(input, offset + 1);\n                }\n                this.state = EntityDecoderState.NamedEntity;\n                return this.stateNamedEntity(input, offset);\n            }\n\n            case EntityDecoderState.NumericStart: {\n                return this.stateNumericStart(input, offset);\n            }\n\n            case EntityDecoderState.NumericDecimal: {\n                return this.stateNumericDecimal(input, offset);\n            }\n\n            case EntityDecoderState.NumericHex: {\n                return this.stateNumericHex(input, offset);\n            }\n\n            case EntityDecoderState.NamedEntity: {\n                return this.stateNamedEntity(input, offset);\n            }\n        }\n    }\n\n    /**\n     * Switches between the numeric decimal and hexadecimal states.\n     *\n     * Equivalent to the `Numeric character reference state` in the HTML spec.\n     *\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    private stateNumericStart(input: string, offset: number): number {\n        if (offset >= input.length) {\n            return -1;\n        }\n\n        if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n            this.state = EntityDecoderState.NumericHex;\n            this.consumed += 1;\n            return this.stateNumericHex(input, offset + 1);\n        }\n\n        this.state = EntityDecoderState.NumericDecimal;\n        return this.stateNumericDecimal(input, offset);\n    }\n\n    /**\n     * Parses a hexadecimal numeric entity.\n     *\n     * Equivalent to the `Hexademical character reference state` in the HTML spec.\n     *\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    private stateNumericHex(input: string, offset: number): number {\n        while (offset < input.length) {\n            const char = input.charCodeAt(offset);\n            if (isNumber(char) || isHexadecimalCharacter(char)) {\n                // Convert hex digit to value (0-15); 'a'/'A' -> 10.\n                const digit =\n                    char <= CharCodes.NINE\n                        ? char - CharCodes.ZERO\n                        : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;\n                this.result = this.result * 16 + digit;\n                this.consumed++;\n                offset++;\n            } else {\n                return this.emitNumericEntity(char, 3);\n            }\n        }\n        return -1; // Incomplete entity\n    }\n\n    /**\n     * Parses a decimal numeric entity.\n     *\n     * Equivalent to the `Decimal character reference state` in the HTML spec.\n     *\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    private stateNumericDecimal(input: string, offset: number): number {\n        while (offset < input.length) {\n            const char = input.charCodeAt(offset);\n            if (isNumber(char)) {\n                this.result = this.result * 10 + (char - CharCodes.ZERO);\n                this.consumed++;\n                offset++;\n            } else {\n                return this.emitNumericEntity(char, 2);\n            }\n        }\n        return -1; // Incomplete entity\n    }\n\n    /**\n     * Validate and emit a numeric entity.\n     *\n     * Implements the logic from the `Hexademical character reference start\n     * state` and `Numeric character reference end state` in the HTML spec.\n     *\n     * @param lastCp The last code point of the entity. Used to see if the\n     *               entity was terminated with a semicolon.\n     * @param expectedLength The minimum number of characters that should be\n     *                       consumed. Used to validate that at least one digit\n     *                       was consumed.\n     * @returns The number of characters that were consumed.\n     */\n    private emitNumericEntity(lastCp: number, expectedLength: number): number {\n        // Ensure we consumed at least one digit.\n        if (this.consumed <= expectedLength) {\n            this.errors?.absenceOfDigitsInNumericCharacterReference(\n                this.consumed,\n            );\n            return 0;\n        }\n\n        // Figure out if this is a legit end of the entity\n        if (lastCp === CharCodes.SEMI) {\n            this.consumed += 1;\n        } else if (this.decodeMode === DecodingMode.Strict) {\n            return 0;\n        }\n\n        this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n\n        if (this.errors) {\n            if (lastCp !== CharCodes.SEMI) {\n                this.errors.missingSemicolonAfterCharacterReference();\n            }\n\n            this.errors.validateNumericCharacterReference(this.result);\n        }\n\n        return this.consumed;\n    }\n\n    /**\n     * Parses a named entity.\n     *\n     * Equivalent to the `Named character reference state` in the HTML spec.\n     *\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    private stateNamedEntity(input: string, offset: number): number {\n        const { decodeTree } = this;\n        let current = decodeTree[this.treeIndex];\n        // The length is the number of bytes of the value, including the current byte.\n        let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n        while (offset < input.length) {\n            // Handle compact runs (possibly inline): valueLength == 0 and SEMI_REQUIRED bit set.\n            if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {\n                const runLength =\n                    (current & BinTrieFlags.BRANCH_LENGTH) >> 7; /* 2..63 */\n\n                // If we are starting a run, check the first char.\n                if (this.runConsumed === 0) {\n                    const firstChar = current & BinTrieFlags.JUMP_TABLE;\n                    if (input.charCodeAt(offset) !== firstChar) {\n                        return this.result === 0\n                            ? 0\n                            : this.emitNotTerminatedNamedEntity();\n                    }\n                    offset++;\n                    this.excess++;\n                    this.runConsumed++;\n                }\n\n                // Check remaining characters in the run.\n                while (this.runConsumed < runLength) {\n                    if (offset >= input.length) {\n                        return -1;\n                    }\n\n                    const charIndexInPacked = this.runConsumed - 1;\n                    const packedWord =\n                        decodeTree[\n                            this.treeIndex + 1 + (charIndexInPacked >> 1)\n                        ];\n                    const expectedChar =\n                        charIndexInPacked % 2 === 0\n                            ? packedWord & 0xff\n                            : (packedWord >> 8) & 0xff;\n\n                    if (input.charCodeAt(offset) !== expectedChar) {\n                        this.runConsumed = 0;\n                        return this.result === 0\n                            ? 0\n                            : this.emitNotTerminatedNamedEntity();\n                    }\n                    offset++;\n                    this.excess++;\n                    this.runConsumed++;\n                }\n\n                this.runConsumed = 0;\n                this.treeIndex += 1 + (runLength >> 1);\n                current = decodeTree[this.treeIndex];\n                valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n            }\n\n            if (offset >= input.length) break;\n\n            const char = input.charCodeAt(offset);\n\n            /*\n             * Implicit semicolon handling for nodes that require a semicolon but\n             * don't have an explicit ';' branch stored in the trie. If we have\n             * a value on the current node, it requires a semicolon, and the\n             * current input character is a semicolon, emit the entity using the\n             * current node (without descending further).\n             */\n            if (\n                char === CharCodes.SEMI &&\n                valueLength !== 0 &&\n                (current & BinTrieFlags.FLAG13) !== 0\n            ) {\n                return this.emitNamedEntityData(\n                    this.treeIndex,\n                    valueLength,\n                    this.consumed + this.excess,\n                );\n            }\n\n            this.treeIndex = determineBranch(\n                decodeTree,\n                current,\n                this.treeIndex + Math.max(1, valueLength),\n                char,\n            );\n\n            if (this.treeIndex < 0) {\n                return this.result === 0 ||\n                    // If we are parsing an attribute\n                    (this.decodeMode === DecodingMode.Attribute &&\n                        // We shouldn't have consumed any characters after the entity,\n                        (valueLength === 0 ||\n                            // And there should be no invalid characters.\n                            isEntityInAttributeInvalidEnd(char)))\n                    ? 0\n                    : this.emitNotTerminatedNamedEntity();\n            }\n\n            current = decodeTree[this.treeIndex];\n            valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n            // If the branch is a value, store it and continue\n            if (valueLength !== 0) {\n                // If the entity is terminated by a semicolon, we are done.\n                if (char === CharCodes.SEMI) {\n                    return this.emitNamedEntityData(\n                        this.treeIndex,\n                        valueLength,\n                        this.consumed + this.excess,\n                    );\n                }\n\n                // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n                if (\n                    this.decodeMode !== DecodingMode.Strict &&\n                    (current & BinTrieFlags.FLAG13) === 0\n                ) {\n                    this.result = this.treeIndex;\n                    this.consumed += this.excess;\n                    this.excess = 0;\n                }\n            }\n            // Increment offset & excess for next iteration\n            offset++;\n            this.excess++;\n        }\n\n        return -1;\n    }\n\n    /**\n     * Emit a named entity that was not terminated with a semicolon.\n     *\n     * @returns The number of characters consumed.\n     */\n    private emitNotTerminatedNamedEntity(): number {\n        const { result, decodeTree } = this;\n\n        const valueLength =\n            (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n        this.emitNamedEntityData(result, valueLength, this.consumed);\n        this.errors?.missingSemicolonAfterCharacterReference();\n\n        return this.consumed;\n    }\n\n    /**\n     * Emit a named entity.\n     *\n     * @param result The index of the entity in the decode tree.\n     * @param valueLength The number of bytes in the entity.\n     * @param consumed The number of characters consumed.\n     *\n     * @returns The number of characters consumed.\n     */\n    private emitNamedEntityData(\n        result: number,\n        valueLength: number,\n        consumed: number,\n    ): number {\n        const { decodeTree } = this;\n\n        this.emitCodePoint(\n            valueLength === 1\n                ? decodeTree[result] &\n                      ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)\n                : decodeTree[result + 1],\n            consumed,\n        );\n        if (valueLength === 3) {\n            // For multi-byte values, we need to emit the second byte.\n            this.emitCodePoint(decodeTree[result + 2], consumed);\n        }\n\n        return consumed;\n    }\n\n    /**\n     * Signal to the parser that the end of the input was reached.\n     *\n     * Remaining data will be emitted and relevant errors will be produced.\n     *\n     * @returns The number of characters consumed.\n     */\n    end(): number {\n        switch (this.state) {\n            case EntityDecoderState.NamedEntity: {\n                // Emit a named entity if we have one.\n                return this.result !== 0 &&\n                    (this.decodeMode !== DecodingMode.Attribute ||\n                        this.result === this.treeIndex)\n                    ? this.emitNotTerminatedNamedEntity()\n                    : 0;\n            }\n            // Otherwise, emit a numeric entity if we have one.\n            case EntityDecoderState.NumericDecimal: {\n                return this.emitNumericEntity(0, 2);\n            }\n            case EntityDecoderState.NumericHex: {\n                return this.emitNumericEntity(0, 3);\n            }\n            case EntityDecoderState.NumericStart: {\n                this.errors?.absenceOfDigitsInNumericCharacterReference(\n                    this.consumed,\n                );\n                return 0;\n            }\n            case EntityDecoderState.EntityStart: {\n                // Return 0 if we have no entity.\n                return 0;\n            }\n        }\n    }\n}\n\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree: Uint16Array) {\n    let returnValue = \"\";\n    const decoder = new EntityDecoder(\n        decodeTree,\n        (data) => (returnValue += fromCodePoint(data)),\n    );\n\n    return function decodeWithTrie(\n        input: string,\n        decodeMode: DecodingMode,\n    ): string {\n        let lastIndex = 0;\n        let offset = 0;\n\n        while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n            returnValue += input.slice(lastIndex, offset);\n\n            decoder.startEntity(decodeMode);\n\n            const length = decoder.write(\n                input,\n                // Skip the \"&\"\n                offset + 1,\n            );\n\n            if (length < 0) {\n                lastIndex = offset + decoder.end();\n                break;\n            }\n\n            lastIndex = offset + length;\n            // If `length` is 0, skip the current `&` and continue.\n            offset = length === 0 ? lastIndex + 1 : lastIndex;\n        }\n\n        const result = returnValue + input.slice(lastIndex);\n\n        // Make sure we don't keep a reference to the final string.\n        returnValue = \"\";\n\n        return result;\n    };\n}\n\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(\n    decodeTree: Uint16Array,\n    current: number,\n    nodeIndex: number,\n    char: number,\n): number {\n    const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n    const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n\n    // Case 1: Single branch encoded in jump offset\n    if (branchCount === 0) {\n        return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n    }\n\n    // Case 2: Multiple branches encoded in jump table\n    if (jumpOffset) {\n        const value = char - jumpOffset;\n\n        return value < 0 || value >= branchCount\n            ? -1\n            : decodeTree[nodeIndex + value] - 1;\n    }\n\n    // Case 3: Multiple branches encoded in packed dictionary (two keys per uint16)\n    const packedKeySlots = (branchCount + 1) >> 1;\n\n    /*\n     * Treat packed keys as a virtual sorted array of length `branchCount`.\n     * Key(i) = low byte for even i, high byte for odd i in slot i>>1.\n     */\n    let lo = 0;\n    let hi = branchCount - 1;\n\n    while (lo <= hi) {\n        const mid = (lo + hi) >>> 1;\n        const slot = mid >> 1;\n        const packed = decodeTree[nodeIndex + slot];\n        const midKey = (packed >> ((mid & 1) * 8)) & 0xff;\n\n        if (midKey < char) {\n            lo = mid + 1;\n        } else if (midKey > char) {\n            hi = mid - 1;\n        } else {\n            return decodeTree[nodeIndex + packedKeySlots + mid];\n        }\n    }\n\n    return -1;\n}\n\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n\n/**\n * Decodes an HTML string.\n *\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(\n    htmlString: string,\n    mode: DecodingMode = DecodingMode.Legacy,\n): string {\n    return htmlDecoder(htmlString, mode);\n}\n\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute: string): string {\n    return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString: string): string {\n    return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString: string): string {\n    return xmlDecoder(xmlString, DecodingMode.Strict);\n}\n\nexport {\n    decodeCodePoint,\n    fromCodePoint,\n    replaceCodePoint,\n} from \"./decode-codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\n", "import {\n    EntityDecoder,\n    DecodingMode,\n    htmlDecodeTree,\n    xmlDecodeTree,\n} from \"entities/decode\";\n\nconst enum CharCodes {\n    Tab = 0x9, // \"\\t\"\n    NewLine = 0xa, // \"\\n\"\n    FormFeed = 0xc, // \"\\f\"\n    CarriageReturn = 0xd, // \"\\r\"\n    Space = 0x20, // \" \"\n    ExclamationMark = 0x21, // \"!\"\n    Number = 0x23, // \"#\"\n    Amp = 0x26, // \"&\"\n    SingleQuote = 0x27, // \"'\"\n    DoubleQuote = 0x22, // '\"'\n    Dash = 0x2d, // \"-\"\n    Slash = 0x2f, // \"/\"\n    Zero = 0x30, // \"0\"\n    Nine = 0x39, // \"9\"\n    Semi = 0x3b, // \";\"\n    Lt = 0x3c, // \"<\"\n    Eq = 0x3d, // \"=\"\n    Gt = 0x3e, // \">\"\n    Questionmark = 0x3f, // \"?\"\n    UpperA = 0x41, // \"A\"\n    LowerA = 0x61, // \"a\"\n    UpperF = 0x46, // \"F\"\n    LowerF = 0x66, // \"f\"\n    UpperZ = 0x5a, // \"Z\"\n    LowerZ = 0x7a, // \"z\"\n    LowerX = 0x78, // \"x\"\n    OpeningSquareBracket = 0x5b, // \"[\"\n}\n\n/** All the states the tokenizer can be in. */\nconst enum State {\n    Text = 1,\n    BeforeTagName, // After <\n    InTagName,\n    InSelfClosingTag,\n    BeforeClosingTagName,\n    InClosingTagName,\n    AfterClosingTagName,\n\n    // Attributes\n    BeforeAttributeName,\n    InAttributeName,\n    AfterAttributeName,\n    BeforeAttributeValue,\n    InAttributeValueDq, // \"\n    InAttributeValueSq, // '\n    InAttributeValueNq,\n\n    // Declarations\n    BeforeDeclaration, // !\n    InDeclaration,\n\n    // Processing instructions\n    InProcessingInstruction, // ?\n\n    // Comments & CDATA\n    BeforeComment,\n    CDATASequence,\n    InSpecialComment,\n    InCommentLike,\n\n    // Special tags\n    BeforeSpecialS, // Decide if we deal with `<script` or `<style`\n    BeforeSpecialT, // Decide if we deal with `<title` or `<textarea`\n    SpecialStartSequence,\n    InSpecialTag,\n\n    InEntity,\n}\n\nfunction isWhitespace(c: number): boolean {\n    return (\n        c === CharCodes.Space ||\n        c === CharCodes.NewLine ||\n        c === CharCodes.Tab ||\n        c === CharCodes.FormFeed ||\n        c === CharCodes.CarriageReturn\n    );\n}\n\nfunction isEndOfTagSection(c: number): boolean {\n    return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);\n}\n\nfunction isASCIIAlpha(c: number): boolean {\n    return (\n        (c >= CharCodes.LowerA && c <= CharCodes.LowerZ) ||\n        (c >= CharCodes.UpperA && c <= CharCodes.UpperZ)\n    );\n}\n\nexport enum QuoteType {\n    NoValue = 0,\n    Unquoted = 1,\n    Single = 2,\n    Double = 3,\n}\n\nexport interface Callbacks {\n    onattribdata(start: number, endIndex: number): void;\n    onattribentity(codepoint: number): void;\n    onattribend(quote: QuoteType, endIndex: number): void;\n    onattribname(start: number, endIndex: number): void;\n    oncdata(start: number, endIndex: number, endOffset: number): void;\n    onclosetag(start: number, endIndex: number): void;\n    oncomment(start: number, endIndex: number, endOffset: number): void;\n    ondeclaration(start: number, endIndex: number): void;\n    onend(): void;\n    onopentagend(endIndex: number): void;\n    onopentagname(start: number, endIndex: number): void;\n    onprocessinginstruction(start: number, endIndex: number): void;\n    onselfclosingtag(endIndex: number): void;\n    ontext(start: number, endIndex: number): void;\n    ontextentity(codepoint: number, endIndex: number): void;\n}\n\n/**\n * Sequences used to match longer strings.\n *\n * We don't have `Script`, `Style`, or `Title` here. Instead, we re-use the *End\n * sequences with an increased offset.\n */\nconst Sequences = {\n    Cdata: new Uint8Array([0x43, 0x44, 0x41, 0x54, 0x41, 0x5b]), // CDATA[\n    CdataEnd: new Uint8Array([0x5d, 0x5d, 0x3e]), // ]]>\n    CommentEnd: new Uint8Array([0x2d, 0x2d, 0x3e]), // `-->`\n    ScriptEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74]), // `</script`\n    StyleEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65]), // `</style`\n    TitleEnd: new Uint8Array([0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65]), // `</title`\n    TextareaEnd: new Uint8Array([\n        0x3c, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61,\n    ]), // `</textarea`\n    XmpEnd: new Uint8Array([0x3c, 0x2f, 0x78, 0x6d, 0x70]), // `</xmp`\n};\n\nexport default class Tokenizer {\n    /** The current state the tokenizer is in. */\n    private state = State.Text;\n    /** The read buffer. */\n    private buffer = \"\";\n    /** The beginning of the section that is currently being read. */\n    private sectionStart = 0;\n    /** The index within the buffer that we are currently looking at. */\n    private index = 0;\n    /** The start of the last entity. */\n    private entityStart = 0;\n    /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */\n    private baseState = State.Text;\n    /** For special parsing behavior inside of script and style tags. */\n    private isSpecial = false;\n    /** Indicates whether the tokenizer has been paused. */\n    public running = true;\n    /** The offset of the current buffer. */\n    private offset = 0;\n\n    private readonly xmlMode: boolean;\n    private readonly decodeEntities: boolean;\n    private readonly entityDecoder: EntityDecoder;\n\n    constructor(\n        {\n            xmlMode = false,\n            decodeEntities = true,\n        }: { xmlMode?: boolean; decodeEntities?: boolean },\n        private readonly cbs: Callbacks,\n    ) {\n        this.xmlMode = xmlMode;\n        this.decodeEntities = decodeEntities;\n        this.entityDecoder = new EntityDecoder(\n            xmlMode ? xmlDecodeTree : htmlDecodeTree,\n            (cp, consumed) => this.emitCodePoint(cp, consumed),\n        );\n    }\n\n    public reset(): void {\n        this.state = State.Text;\n        this.buffer = \"\";\n        this.sectionStart = 0;\n        this.index = 0;\n        this.baseState = State.Text;\n        this.currentSequence = undefined!;\n        this.running = true;\n        this.offset = 0;\n    }\n\n    public write(chunk: string): void {\n        this.offset += this.buffer.length;\n        this.buffer = chunk;\n        this.parse();\n    }\n\n    public end(): void {\n        if (this.running) this.finish();\n    }\n\n    public pause(): void {\n        this.running = false;\n    }\n\n    public resume(): void {\n        this.running = true;\n        if (this.index < this.buffer.length + this.offset) {\n            this.parse();\n        }\n    }\n\n    private stateText(c: number): void {\n        if (\n            c === CharCodes.Lt ||\n            (!this.decodeEntities && this.fastForwardTo(CharCodes.Lt))\n        ) {\n            if (this.index > this.sectionStart) {\n                this.cbs.ontext(this.sectionStart, this.index);\n            }\n            this.state = State.BeforeTagName;\n            this.sectionStart = this.index;\n        } else if (this.decodeEntities && c === CharCodes.Amp) {\n            this.startEntity();\n        }\n    }\n\n    private currentSequence: Uint8Array = undefined!;\n    private sequenceIndex = 0;\n    private stateSpecialStartSequence(c: number): void {\n        const isEnd = this.sequenceIndex === this.currentSequence.length;\n        const isMatch = isEnd\n            ? // If we are at the end of the sequence, make sure the tag name has ended\n              isEndOfTagSection(c)\n            : // Otherwise, do a case-insensitive comparison\n              (c | 0x20) === this.currentSequence[this.sequenceIndex];\n\n        if (!isMatch) {\n            this.isSpecial = false;\n        } else if (!isEnd) {\n            this.sequenceIndex++;\n            return;\n        }\n\n        this.sequenceIndex = 0;\n        this.state = State.InTagName;\n        this.stateInTagName(c);\n    }\n\n    /** Look for an end tag. For <title> tags, also decode entities. */\n    private stateInSpecialTag(c: number): void {\n        if (this.sequenceIndex === this.currentSequence.length) {\n            if (c === CharCodes.Gt || isWhitespace(c)) {\n                const endOfText = this.index - this.currentSequence.length;\n\n                if (this.sectionStart < endOfText) {\n                    // Spoof the index so that reported locations match up.\n                    const actualIndex = this.index;\n                    this.index = endOfText;\n                    this.cbs.ontext(this.sectionStart, endOfText);\n                    this.index = actualIndex;\n                }\n\n                this.isSpecial = false;\n                this.sectionStart = endOfText + 2; // Skip over the `</`\n                this.stateInClosingTagName(c);\n                return; // We are done; skip the rest of the function.\n            }\n\n            this.sequenceIndex = 0;\n        }\n\n        if ((c | 0x20) === this.currentSequence[this.sequenceIndex]) {\n            this.sequenceIndex += 1;\n        } else if (this.sequenceIndex === 0) {\n            if (this.currentSequence === Sequences.TitleEnd) {\n                // We have to parse entities in <title> tags.\n                if (this.decodeEntities && c === CharCodes.Amp) {\n                    this.startEntity();\n                }\n            } else if (this.fastForwardTo(CharCodes.Lt)) {\n                // Outside of <title> tags, we can fast-forward.\n                this.sequenceIndex = 1;\n            }\n        } else {\n            // If we see a `<`, set the sequence index to 1; useful for eg. `<</script>`.\n            this.sequenceIndex = Number(c === CharCodes.Lt);\n        }\n    }\n\n    private stateCDATASequence(c: number): void {\n        if (c === Sequences.Cdata[this.sequenceIndex]) {\n            if (++this.sequenceIndex === Sequences.Cdata.length) {\n                this.state = State.InCommentLike;\n                this.currentSequence = Sequences.CdataEnd;\n                this.sequenceIndex = 0;\n                this.sectionStart = this.index + 1;\n            }\n        } else {\n            this.sequenceIndex = 0;\n            this.state = State.InDeclaration;\n            this.stateInDeclaration(c); // Reconsume the character\n        }\n    }\n\n    /**\n     * When we wait for one specific character, we can speed things up\n     * by skipping through the buffer until we find it.\n     *\n     * @returns Whether the character was found.\n     */\n    private fastForwardTo(c: number): boolean {\n        while (++this.index < this.buffer.length + this.offset) {\n            if (this.buffer.charCodeAt(this.index - this.offset) === c) {\n                return true;\n            }\n        }\n\n        /*\n         * We increment the index at the end of the `parse` loop,\n         * so set it to `buffer.length - 1` here.\n         *\n         * TODO: Refactor `parse` to increment index before calling states.\n         */\n        this.index = this.buffer.length + this.offset - 1;\n\n        return false;\n    }\n\n    /**\n     * Comments and CDATA end with `-->` and `]]>`.\n     *\n     * Their common qualities are:\n     * - Their end sequences have a distinct character they start with.\n     * - That character is then repeated, so we have to check multiple repeats.\n     * - All characters but the start character of the sequence can be skipped.\n     */\n    private stateInCommentLike(c: number): void {\n        if (c === this.currentSequence[this.sequenceIndex]) {\n            if (++this.sequenceIndex === this.currentSequence.length) {\n                if (this.currentSequence === Sequences.CdataEnd) {\n                    this.cbs.oncdata(this.sectionStart, this.index, 2);\n                } else {\n                    this.cbs.oncomment(this.sectionStart, this.index, 2);\n                }\n\n                this.sequenceIndex = 0;\n                this.sectionStart = this.index + 1;\n                this.state = State.Text;\n            }\n        } else if (this.sequenceIndex === 0) {\n            // Fast-forward to the first character of the sequence\n            if (this.fastForwardTo(this.currentSequence[0])) {\n                this.sequenceIndex = 1;\n            }\n        } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {\n            // Allow long sequences, eg. --->, ]]]>\n            this.sequenceIndex = 0;\n        }\n    }\n\n    /**\n     * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.\n     *\n     * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).\n     * We allow anything that wouldn't end the tag.\n     */\n    private isTagStartChar(c: number) {\n        return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);\n    }\n\n    private startSpecial(sequence: Uint8Array, offset: number) {\n        this.isSpecial = true;\n        this.currentSequence = sequence;\n        this.sequenceIndex = offset;\n        this.state = State.SpecialStartSequence;\n    }\n\n    private stateBeforeTagName(c: number): void {\n        if (c === CharCodes.ExclamationMark) {\n            this.state = State.BeforeDeclaration;\n            this.sectionStart = this.index + 1;\n        } else if (c === CharCodes.Questionmark) {\n            this.state = State.InProcessingInstruction;\n            this.sectionStart = this.index + 1;\n        } else if (this.isTagStartChar(c)) {\n            const lower = c | 0x20;\n            this.sectionStart = this.index;\n            if (this.xmlMode) {\n                this.state = State.InTagName;\n            } else if (lower === Sequences.ScriptEnd[2]) {\n                this.state = State.BeforeSpecialS;\n            } else if (\n                lower === Sequences.TitleEnd[2] ||\n                lower === Sequences.XmpEnd[2]\n            ) {\n                this.state = State.BeforeSpecialT;\n            } else {\n                this.state = State.InTagName;\n            }\n        } else if (c === CharCodes.Slash) {\n            this.state = State.BeforeClosingTagName;\n        } else {\n            this.state = State.Text;\n            this.stateText(c);\n        }\n    }\n    private stateInTagName(c: number): void {\n        if (isEndOfTagSection(c)) {\n            this.cbs.onopentagname(this.sectionStart, this.index);\n            this.sectionStart = -1;\n            this.state = State.BeforeAttributeName;\n            this.stateBeforeAttributeName(c);\n        }\n    }\n    private stateBeforeClosingTagName(c: number): void {\n        if (isWhitespace(c)) {\n            // Ignore\n        } else if (c === CharCodes.Gt) {\n            this.state = State.Text;\n        } else {\n            this.state = this.isTagStartChar(c)\n                ? State.InClosingTagName\n                : State.InSpecialComment;\n            this.sectionStart = this.index;\n        }\n    }\n    private stateInClosingTagName(c: number): void {\n        if (c === CharCodes.Gt || isWhitespace(c)) {\n            this.cbs.onclosetag(this.sectionStart, this.index);\n            this.sectionStart = -1;\n            this.state = State.AfterClosingTagName;\n            this.stateAfterClosingTagName(c);\n        }\n    }\n    private stateAfterClosingTagName(c: number): void {\n        // Skip everything until \">\"\n        if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n            this.state = State.Text;\n            this.sectionStart = this.index + 1;\n        }\n    }\n    private stateBeforeAttributeName(c: number): void {\n        if (c === CharCodes.Gt) {\n            this.cbs.onopentagend(this.index);\n            if (this.isSpecial) {\n                this.state = State.InSpecialTag;\n                this.sequenceIndex = 0;\n            } else {\n                this.state = State.Text;\n            }\n            this.sectionStart = this.index + 1;\n        } else if (c === CharCodes.Slash) {\n            this.state = State.InSelfClosingTag;\n        } else if (!isWhitespace(c)) {\n            this.state = State.InAttributeName;\n            this.sectionStart = this.index;\n        }\n    }\n    private stateInSelfClosingTag(c: number): void {\n        if (c === CharCodes.Gt) {\n            this.cbs.onselfclosingtag(this.index);\n            this.state = State.Text;\n            this.sectionStart = this.index + 1;\n            this.isSpecial = false; // Reset special state, in case of self-closing special tags\n        } else if (!isWhitespace(c)) {\n            this.state = State.BeforeAttributeName;\n            this.stateBeforeAttributeName(c);\n        }\n    }\n    private stateInAttributeName(c: number): void {\n        if (c === CharCodes.Eq || isEndOfTagSection(c)) {\n            this.cbs.onattribname(this.sectionStart, this.index);\n            this.sectionStart = this.index;\n            this.state = State.AfterAttributeName;\n            this.stateAfterAttributeName(c);\n        }\n    }\n    private stateAfterAttributeName(c: number): void {\n        if (c === CharCodes.Eq) {\n            this.state = State.BeforeAttributeValue;\n        } else if (c === CharCodes.Slash || c === CharCodes.Gt) {\n            this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n            this.sectionStart = -1;\n            this.state = State.BeforeAttributeName;\n            this.stateBeforeAttributeName(c);\n        } else if (!isWhitespace(c)) {\n            this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n            this.state = State.InAttributeName;\n            this.sectionStart = this.index;\n        }\n    }\n    private stateBeforeAttributeValue(c: number): void {\n        if (c === CharCodes.DoubleQuote) {\n            this.state = State.InAttributeValueDq;\n            this.sectionStart = this.index + 1;\n        } else if (c === CharCodes.SingleQuote) {\n            this.state = State.InAttributeValueSq;\n            this.sectionStart = this.index + 1;\n        } else if (!isWhitespace(c)) {\n            this.sectionStart = this.index;\n            this.state = State.InAttributeValueNq;\n            this.stateInAttributeValueNoQuotes(c); // Reconsume token\n        }\n    }\n    private handleInAttributeValue(c: number, quote: number) {\n        if (\n            c === quote ||\n            (!this.decodeEntities && this.fastForwardTo(quote))\n        ) {\n            this.cbs.onattribdata(this.sectionStart, this.index);\n            this.sectionStart = -1;\n            this.cbs.onattribend(\n                quote === CharCodes.DoubleQuote\n                    ? QuoteType.Double\n                    : QuoteType.Single,\n                this.index + 1,\n            );\n            this.state = State.BeforeAttributeName;\n        } else if (this.decodeEntities && c === CharCodes.Amp) {\n            this.startEntity();\n        }\n    }\n    private stateInAttributeValueDoubleQuotes(c: number): void {\n        this.handleInAttributeValue(c, CharCodes.DoubleQuote);\n    }\n    private stateInAttributeValueSingleQuotes(c: number): void {\n        this.handleInAttributeValue(c, CharCodes.SingleQuote);\n    }\n    private stateInAttributeValueNoQuotes(c: number): void {\n        if (isWhitespace(c) || c === CharCodes.Gt) {\n            this.cbs.onattribdata(this.sectionStart, this.index);\n            this.sectionStart = -1;\n            this.cbs.onattribend(QuoteType.Unquoted, this.index);\n            this.state = State.BeforeAttributeName;\n            this.stateBeforeAttributeName(c);\n        } else if (this.decodeEntities && c === CharCodes.Amp) {\n            this.startEntity();\n        }\n    }\n    private stateBeforeDeclaration(c: number): void {\n        if (c === CharCodes.OpeningSquareBracket) {\n            this.state = State.CDATASequence;\n            this.sequenceIndex = 0;\n        } else {\n            this.state =\n                c === CharCodes.Dash\n                    ? State.BeforeComment\n                    : State.InDeclaration;\n        }\n    }\n    private stateInDeclaration(c: number): void {\n        if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n            this.cbs.ondeclaration(this.sectionStart, this.index);\n            this.state = State.Text;\n            this.sectionStart = this.index + 1;\n        }\n    }\n    private stateInProcessingInstruction(c: number): void {\n        if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n            this.cbs.onprocessinginstruction(this.sectionStart, this.index);\n            this.state = State.Text;\n            this.sectionStart = this.index + 1;\n        }\n    }\n    private stateBeforeComment(c: number): void {\n        if (c === CharCodes.Dash) {\n            this.state = State.InCommentLike;\n            this.currentSequence = Sequences.CommentEnd;\n            // Allow short comments (eg. <!-->)\n            this.sequenceIndex = 2;\n            this.sectionStart = this.index + 1;\n        } else {\n            this.state = State.InDeclaration;\n        }\n    }\n    private stateInSpecialComment(c: number): void {\n        if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n            this.cbs.oncomment(this.sectionStart, this.index, 0);\n            this.state = State.Text;\n            this.sectionStart = this.index + 1;\n        }\n    }\n    private stateBeforeSpecialS(c: number): void {\n        const lower = c | 0x20;\n        if (lower === Sequences.ScriptEnd[3]) {\n            this.startSpecial(Sequences.ScriptEnd, 4);\n        } else if (lower === Sequences.StyleEnd[3]) {\n            this.startSpecial(Sequences.StyleEnd, 4);\n        } else {\n            this.state = State.InTagName;\n            this.stateInTagName(c); // Consume the token again\n        }\n    }\n\n    private stateBeforeSpecialT(c: number): void {\n        const lower = c | 0x20;\n        switch (lower) {\n            case Sequences.TitleEnd[3]: {\n                this.startSpecial(Sequences.TitleEnd, 4);\n\n                break;\n            }\n            case Sequences.TextareaEnd[3]: {\n                this.startSpecial(Sequences.TextareaEnd, 4);\n\n                break;\n            }\n            case Sequences.XmpEnd[3]: {\n                this.startSpecial(Sequences.XmpEnd, 4);\n\n                break;\n            }\n            default: {\n                this.state = State.InTagName;\n                this.stateInTagName(c); // Consume the token again\n            }\n        }\n    }\n\n    private startEntity() {\n        this.baseState = this.state;\n        this.state = State.InEntity;\n        this.entityStart = this.index;\n        this.entityDecoder.startEntity(\n            this.xmlMode\n                ? DecodingMode.Strict\n                : this.baseState === State.Text ||\n                    this.baseState === State.InSpecialTag\n                  ? DecodingMode.Legacy\n                  : DecodingMode.Attribute,\n        );\n    }\n\n    private stateInEntity(): void {\n        const indexInBuffer = this.index - this.offset;\n        const length = this.entityDecoder.write(this.buffer, indexInBuffer);\n\n        // If `length` is positive, we are done with the entity.\n        if (length >= 0) {\n            this.state = this.baseState;\n\n            if (length === 0) {\n                this.index -= 1;\n            }\n        } else {\n            if (\n                indexInBuffer < this.buffer.length &&\n                this.buffer.charCodeAt(indexInBuffer) === CharCodes.Amp\n            ) {\n                this.state = this.baseState;\n                this.index -= 1;\n                return;\n            }\n\n            // Mark buffer as consumed.\n            this.index = this.offset + this.buffer.length - 1;\n        }\n    }\n\n    /**\n     * Remove data that has already been consumed from the buffer.\n     */\n    private cleanup() {\n        // If we are inside of text or attributes, emit what we already have.\n        if (this.running && this.sectionStart !== this.index) {\n            if (\n                this.state === State.Text ||\n                (this.state === State.InSpecialTag && this.sequenceIndex === 0)\n            ) {\n                this.cbs.ontext(this.sectionStart, this.index);\n                this.sectionStart = this.index;\n            } else if (\n                this.state === State.InAttributeValueDq ||\n                this.state === State.InAttributeValueSq ||\n                this.state === State.InAttributeValueNq\n            ) {\n                this.cbs.onattribdata(this.sectionStart, this.index);\n                this.sectionStart = this.index;\n            }\n        }\n    }\n\n    private shouldContinue() {\n        return this.index < this.buffer.length + this.offset && this.running;\n    }\n\n    /**\n     * Iterates through the buffer, calling the function corresponding to the current state.\n     *\n     * States that are more likely to be hit are higher up, as a performance improvement.\n     */\n    private parse() {\n        while (this.shouldContinue()) {\n            const c = this.buffer.charCodeAt(this.index - this.offset);\n            switch (this.state) {\n                case State.Text: {\n                    this.stateText(c);\n                    break;\n                }\n                case State.SpecialStartSequence: {\n                    this.stateSpecialStartSequence(c);\n                    break;\n                }\n                case State.InSpecialTag: {\n                    this.stateInSpecialTag(c);\n                    break;\n                }\n                case State.CDATASequence: {\n                    this.stateCDATASequence(c);\n                    break;\n                }\n                case State.InAttributeValueDq: {\n                    this.stateInAttributeValueDoubleQuotes(c);\n                    break;\n                }\n                case State.InAttributeName: {\n                    this.stateInAttributeName(c);\n                    break;\n                }\n                case State.InCommentLike: {\n                    this.stateInCommentLike(c);\n                    break;\n                }\n                case State.InSpecialComment: {\n                    this.stateInSpecialComment(c);\n                    break;\n                }\n                case State.BeforeAttributeName: {\n                    this.stateBeforeAttributeName(c);\n                    break;\n                }\n                case State.InTagName: {\n                    this.stateInTagName(c);\n                    break;\n                }\n                case State.InClosingTagName: {\n                    this.stateInClosingTagName(c);\n                    break;\n                }\n                case State.BeforeTagName: {\n                    this.stateBeforeTagName(c);\n                    break;\n                }\n                case State.AfterAttributeName: {\n                    this.stateAfterAttributeName(c);\n                    break;\n                }\n                case State.InAttributeValueSq: {\n                    this.stateInAttributeValueSingleQuotes(c);\n                    break;\n                }\n                case State.BeforeAttributeValue: {\n                    this.stateBeforeAttributeValue(c);\n                    break;\n                }\n                case State.BeforeClosingTagName: {\n                    this.stateBeforeClosingTagName(c);\n                    break;\n                }\n                case State.AfterClosingTagName: {\n                    this.stateAfterClosingTagName(c);\n                    break;\n                }\n                case State.BeforeSpecialS: {\n                    this.stateBeforeSpecialS(c);\n                    break;\n                }\n                case State.BeforeSpecialT: {\n                    this.stateBeforeSpecialT(c);\n                    break;\n                }\n                case State.InAttributeValueNq: {\n                    this.stateInAttributeValueNoQuotes(c);\n                    break;\n                }\n                case State.InSelfClosingTag: {\n                    this.stateInSelfClosingTag(c);\n                    break;\n                }\n                case State.InDeclaration: {\n                    this.stateInDeclaration(c);\n                    break;\n                }\n                case State.BeforeDeclaration: {\n                    this.stateBeforeDeclaration(c);\n                    break;\n                }\n                case State.BeforeComment: {\n                    this.stateBeforeComment(c);\n                    break;\n                }\n                case State.InProcessingInstruction: {\n                    this.stateInProcessingInstruction(c);\n                    break;\n                }\n                case State.InEntity: {\n                    this.stateInEntity();\n                    break;\n                }\n            }\n            this.index++;\n        }\n        this.cleanup();\n    }\n\n    private finish() {\n        if (this.state === State.InEntity) {\n            this.entityDecoder.end();\n            this.state = this.baseState;\n        }\n\n        this.handleTrailingData();\n\n        this.cbs.onend();\n    }\n\n    /** Handle any trailing data. */\n    private handleTrailingData() {\n        const endIndex = this.buffer.length + this.offset;\n\n        // If there is no remaining data, we are done.\n        if (this.sectionStart >= endIndex) {\n            return;\n        }\n\n        if (this.state === State.InCommentLike) {\n            if (this.currentSequence === Sequences.CdataEnd) {\n                this.cbs.oncdata(this.sectionStart, endIndex, 0);\n            } else {\n                this.cbs.oncomment(this.sectionStart, endIndex, 0);\n            }\n        } else if (\n            this.state === State.InTagName ||\n            this.state === State.BeforeAttributeName ||\n            this.state === State.BeforeAttributeValue ||\n            this.state === State.AfterAttributeName ||\n            this.state === State.InAttributeName ||\n            this.state === State.InAttributeValueSq ||\n            this.state === State.InAttributeValueDq ||\n            this.state === State.InAttributeValueNq ||\n            this.state === State.InClosingTagName\n        ) {\n            /*\n             * If we are currently in an opening or closing tag, us not calling the\n             * respective callback signals that the tag should be ignored.\n             */\n        } else {\n            this.cbs.ontext(this.sectionStart, endIndex);\n        }\n    }\n\n    private emitCodePoint(cp: number, consumed: number): void {\n        if (\n            this.baseState !== State.Text &&\n            this.baseState !== State.InSpecialTag\n        ) {\n            if (this.sectionStart < this.entityStart) {\n                this.cbs.onattribdata(this.sectionStart, this.entityStart);\n            }\n            this.sectionStart = this.entityStart + consumed;\n            this.index = this.sectionStart - 1;\n\n            this.cbs.onattribentity(cp);\n        } else {\n            if (this.sectionStart < this.entityStart) {\n                this.cbs.ontext(this.sectionStart, this.entityStart);\n            }\n            this.sectionStart = this.entityStart + consumed;\n            this.index = this.sectionStart - 1;\n\n            this.cbs.ontextentity(cp, this.sectionStart);\n        }\n    }\n}\n", "import Tokenizer, { type Callbacks, QuoteType } from \"./Tokenizer.js\";\nimport { fromCodePoint } from \"entities/decode\";\n\nconst formTags = new Set([\n    \"input\",\n    \"option\",\n    \"optgroup\",\n    \"select\",\n    \"button\",\n    \"datalist\",\n    \"textarea\",\n]);\nconst pTag = new Set([\"p\"]);\nconst tableSectionTags = new Set([\"thead\", \"tbody\"]);\nconst ddtTags = new Set([\"dd\", \"dt\"]);\nconst rtpTags = new Set([\"rt\", \"rp\"]);\n\nconst openImpliesClose = new Map<string, Set<string>>([\n    [\"tr\", new Set([\"tr\", \"th\", \"td\"])],\n    [\"th\", new Set([\"th\"])],\n    [\"td\", new Set([\"thead\", \"th\", \"td\"])],\n    [\"body\", new Set([\"head\", \"link\", \"script\"])],\n    [\"li\", new Set([\"li\"])],\n    [\"p\", pTag],\n    [\"h1\", pTag],\n    [\"h2\", pTag],\n    [\"h3\", pTag],\n    [\"h4\", pTag],\n    [\"h5\", pTag],\n    [\"h6\", pTag],\n    [\"select\", formTags],\n    [\"input\", formTags],\n    [\"output\", formTags],\n    [\"button\", formTags],\n    [\"datalist\", formTags],\n    [\"textarea\", formTags],\n    [\"option\", new Set([\"option\"])],\n    [\"optgroup\", new Set([\"optgroup\", \"option\"])],\n    [\"dd\", ddtTags],\n    [\"dt\", ddtTags],\n    [\"address\", pTag],\n    [\"article\", pTag],\n    [\"aside\", pTag],\n    [\"blockquote\", pTag],\n    [\"details\", pTag],\n    [\"div\", pTag],\n    [\"dl\", pTag],\n    [\"fieldset\", pTag],\n    [\"figcaption\", pTag],\n    [\"figure\", pTag],\n    [\"footer\", pTag],\n    [\"form\", pTag],\n    [\"header\", pTag],\n    [\"hr\", pTag],\n    [\"main\", pTag],\n    [\"nav\", pTag],\n    [\"ol\", pTag],\n    [\"pre\", pTag],\n    [\"section\", pTag],\n    [\"table\", pTag],\n    [\"ul\", pTag],\n    [\"rt\", rtpTags],\n    [\"rp\", rtpTags],\n    [\"tbody\", tableSectionTags],\n    [\"tfoot\", tableSectionTags],\n]);\n\nconst voidElements = new Set([\n    \"area\",\n    \"base\",\n    \"basefont\",\n    \"br\",\n    \"col\",\n    \"command\",\n    \"embed\",\n    \"frame\",\n    \"hr\",\n    \"img\",\n    \"input\",\n    \"isindex\",\n    \"keygen\",\n    \"link\",\n    \"meta\",\n    \"param\",\n    \"source\",\n    \"track\",\n    \"wbr\",\n]);\n\nconst foreignContextElements = new Set([\"math\", \"svg\"]);\n\nconst htmlIntegrationElements = new Set([\n    \"mi\",\n    \"mo\",\n    \"mn\",\n    \"ms\",\n    \"mtext\",\n    \"annotation-xml\",\n    \"foreignobject\",\n    \"desc\",\n    \"title\",\n]);\n\nexport interface ParserOptions {\n    /**\n     * Indicates whether special tags (`<script>`, `<style>`, and `<title>`) should get special treatment\n     * and if \"empty\" tags (eg. `<br>`) can have children.  If `false`, the content of special tags\n     * will be text only. For feeds and other XML content (documents that don't consist of HTML),\n     * set this to `true`.\n     *\n     * @default false\n     */\n    xmlMode?: boolean;\n\n    /**\n     * Decode entities within the document.\n     *\n     * @default true\n     */\n    decodeEntities?: boolean;\n\n    /**\n     * If set to true, all tags will be lowercased.\n     *\n     * @default !xmlMode\n     */\n    lowerCaseTags?: boolean;\n\n    /**\n     * If set to `true`, all attribute names will be lowercased. This has noticeable impact on speed.\n     *\n     * @default !xmlMode\n     */\n    lowerCaseAttributeNames?: boolean;\n\n    /**\n     * If set to true, CDATA sections will be recognized as text even if the xmlMode option is not enabled.\n     * NOTE: If xmlMode is set to `true` then CDATA sections will always be recognized as text.\n     *\n     * @default xmlMode\n     */\n    recognizeCDATA?: boolean;\n\n    /**\n     * If set to `true`, self-closing tags will trigger the onclosetag event even if xmlMode is not set to `true`.\n     * NOTE: If xmlMode is set to `true` then self-closing tags will always be recognized.\n     *\n     * @default xmlMode\n     */\n    recognizeSelfClosing?: boolean;\n\n    /**\n     * Allows the default tokenizer to be overwritten.\n     */\n    Tokenizer?: typeof Tokenizer;\n}\n\nexport interface Handler {\n    onparserinit(parser: Parser): void;\n\n    /**\n     * Resets the handler back to starting state\n     */\n    onreset(): void;\n\n    /**\n     * Signals the handler that parsing is done\n     */\n    onend(): void;\n    onerror(error: Error): void;\n    onclosetag(name: string, isImplied: boolean): void;\n    onopentagname(name: string): void;\n    /**\n     *\n     * @param name Name of the attribute\n     * @param value Value of the attribute.\n     * @param quote Quotes used around the attribute. `null` if the attribute has no quotes around the value, `undefined` if the attribute has no value.\n     */\n    onattribute(\n        name: string,\n        value: string,\n        quote?: string | undefined | null,\n    ): void;\n    onopentag(\n        name: string,\n        attribs: { [s: string]: string },\n        isImplied: boolean,\n    ): void;\n    ontext(data: string): void;\n    oncomment(data: string): void;\n    oncdatastart(): void;\n    oncdataend(): void;\n    oncommentend(): void;\n    onprocessinginstruction(name: string, data: string): void;\n}\n\nconst reNameEnd = /\\s|\\//;\n\nexport class Parser implements Callbacks {\n    /** The start index of the last event. */\n    public startIndex = 0;\n    /** The end index of the last event. */\n    public endIndex = 0;\n    /**\n     * Store the start index of the current open tag,\n     * so we can update the start index for attributes.\n     */\n    private openTagStart = 0;\n\n    private tagname = \"\";\n    private attribname = \"\";\n    private attribvalue = \"\";\n    private attribs: null | { [key: string]: string } = null;\n    private readonly stack: string[] = [];\n    /** Determines whether self-closing tags are recognized. */\n    private readonly foreignContext: boolean[];\n    private readonly cbs: Partial<Handler>;\n    private readonly lowerCaseTagNames: boolean;\n    private readonly lowerCaseAttributeNames: boolean;\n    private readonly recognizeSelfClosing: boolean;\n    /** We are parsing HTML. Inverse of the `xmlMode` option. */\n    private readonly htmlMode: boolean;\n    private readonly tokenizer: Tokenizer;\n\n    private readonly buffers: string[] = [];\n    private bufferOffset = 0;\n    /** The index of the last written buffer. Used when resuming after a `pause()`. */\n    private writeIndex = 0;\n    /** Indicates whether the parser has finished running / `.end` has been called. */\n    private ended = false;\n\n    constructor(\n        cbs?: Partial<Handler> | null,\n        private readonly options: ParserOptions = {},\n    ) {\n        this.cbs = cbs ?? {};\n        this.htmlMode = !this.options.xmlMode;\n        this.lowerCaseTagNames = options.lowerCaseTags ?? this.htmlMode;\n        this.lowerCaseAttributeNames =\n            options.lowerCaseAttributeNames ?? this.htmlMode;\n        this.recognizeSelfClosing =\n            options.recognizeSelfClosing ?? !this.htmlMode;\n        this.tokenizer = new (options.Tokenizer ?? Tokenizer)(\n            this.options,\n            this,\n        );\n        this.foreignContext = [!this.htmlMode];\n        this.cbs.onparserinit?.(this);\n    }\n\n    // Tokenizer event handlers\n\n    /** @internal */\n    ontext(start: number, endIndex: number): void {\n        const data = this.getSlice(start, endIndex);\n        this.endIndex = endIndex - 1;\n        this.cbs.ontext?.(data);\n        this.startIndex = endIndex;\n    }\n\n    /** @internal */\n    ontextentity(cp: number, endIndex: number): void {\n        this.endIndex = endIndex - 1;\n        this.cbs.ontext?.(fromCodePoint(cp));\n        this.startIndex = endIndex;\n    }\n\n    /**\n     * Checks if the current tag is a void element. Override this if you want\n     * to specify your own additional void elements.\n     */\n    protected isVoidElement(name: string): boolean {\n        return this.htmlMode && voidElements.has(name);\n    }\n\n    /** @internal */\n    onopentagname(start: number, endIndex: number): void {\n        this.endIndex = endIndex;\n\n        let name = this.getSlice(start, endIndex);\n\n        if (this.lowerCaseTagNames) {\n            name = name.toLowerCase();\n        }\n\n        this.emitOpenTag(name);\n    }\n\n    private emitOpenTag(name: string) {\n        this.openTagStart = this.startIndex;\n        this.tagname = name;\n\n        const impliesClose = this.htmlMode && openImpliesClose.get(name);\n\n        if (impliesClose) {\n            while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {\n                const element = this.stack.shift()!;\n                this.cbs.onclosetag?.(element, true);\n            }\n        }\n        if (!this.isVoidElement(name)) {\n            this.stack.unshift(name);\n\n            if (this.htmlMode) {\n                if (foreignContextElements.has(name)) {\n                    this.foreignContext.unshift(true);\n                } else if (htmlIntegrationElements.has(name)) {\n                    this.foreignContext.unshift(false);\n                }\n            }\n        }\n        this.cbs.onopentagname?.(name);\n        if (this.cbs.onopentag) this.attribs = {};\n    }\n\n    private endOpenTag(isImplied: boolean) {\n        this.startIndex = this.openTagStart;\n\n        if (this.attribs) {\n            this.cbs.onopentag?.(this.tagname, this.attribs, isImplied);\n            this.attribs = null;\n        }\n        if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {\n            this.cbs.onclosetag(this.tagname, true);\n        }\n\n        this.tagname = \"\";\n    }\n\n    /** @internal */\n    onopentagend(endIndex: number): void {\n        this.endIndex = endIndex;\n        this.endOpenTag(false);\n\n        // Set `startIndex` for next node\n        this.startIndex = endIndex + 1;\n    }\n\n    /** @internal */\n    onclosetag(start: number, endIndex: number): void {\n        this.endIndex = endIndex;\n\n        let name = this.getSlice(start, endIndex);\n\n        if (this.lowerCaseTagNames) {\n            name = name.toLowerCase();\n        }\n\n        if (\n            this.htmlMode &&\n            (foreignContextElements.has(name) ||\n                htmlIntegrationElements.has(name))\n        ) {\n            this.foreignContext.shift();\n        }\n\n        if (!this.isVoidElement(name)) {\n            const pos = this.stack.indexOf(name);\n            if (pos !== -1) {\n                for (let index = 0; index <= pos; index++) {\n                    const element = this.stack.shift()!;\n                    // We know the stack has sufficient elements.\n                    this.cbs.onclosetag?.(element, index !== pos);\n                }\n            } else if (this.htmlMode && name === \"p\") {\n                // Implicit open before close\n                this.emitOpenTag(\"p\");\n                this.closeCurrentTag(true);\n            }\n        } else if (this.htmlMode && name === \"br\") {\n            // We can't use `emitOpenTag` for implicit open, as `br` would be implicitly closed.\n            this.cbs.onopentagname?.(\"br\");\n            this.cbs.onopentag?.(\"br\", {}, true);\n            this.cbs.onclosetag?.(\"br\", false);\n        }\n\n        // Set `startIndex` for next node\n        this.startIndex = endIndex + 1;\n    }\n\n    /** @internal */\n    onselfclosingtag(endIndex: number): void {\n        this.endIndex = endIndex;\n        if (this.recognizeSelfClosing || this.foreignContext[0]) {\n            this.closeCurrentTag(false);\n\n            // Set `startIndex` for next node\n            this.startIndex = endIndex + 1;\n        } else {\n            // Ignore the fact that the tag is self-closing.\n            this.onopentagend(endIndex);\n        }\n    }\n\n    private closeCurrentTag(isOpenImplied: boolean) {\n        const name = this.tagname;\n        this.endOpenTag(isOpenImplied);\n\n        // Self-closing tags will be on the top of the stack\n        if (this.stack[0] === name) {\n            // If the opening tag isn't implied, the closing tag has to be implied.\n            this.cbs.onclosetag?.(name, !isOpenImplied);\n            this.stack.shift();\n        }\n    }\n\n    /** @internal */\n    onattribname(start: number, endIndex: number): void {\n        this.startIndex = start;\n        const name = this.getSlice(start, endIndex);\n\n        this.attribname = this.lowerCaseAttributeNames\n            ? name.toLowerCase()\n            : name;\n    }\n\n    /** @internal */\n    onattribdata(start: number, endIndex: number): void {\n        this.attribvalue += this.getSlice(start, endIndex);\n    }\n\n    /** @internal */\n    onattribentity(cp: number): void {\n        this.attribvalue += fromCodePoint(cp);\n    }\n\n    /** @internal */\n    onattribend(quote: QuoteType, endIndex: number): void {\n        this.endIndex = endIndex;\n\n        this.cbs.onattribute?.(\n            this.attribname,\n            this.attribvalue,\n            quote === QuoteType.Double\n                ? '\"'\n                : quote === QuoteType.Single\n                  ? \"'\"\n                  : quote === QuoteType.NoValue\n                    ? undefined\n                    : null,\n        );\n\n        if (\n            this.attribs &&\n            !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)\n        ) {\n            this.attribs[this.attribname] = this.attribvalue;\n        }\n        this.attribvalue = \"\";\n    }\n\n    private getInstructionName(value: string) {\n        const index = value.search(reNameEnd);\n        let name = index < 0 ? value : value.substr(0, index);\n\n        if (this.lowerCaseTagNames) {\n            name = name.toLowerCase();\n        }\n\n        return name;\n    }\n\n    /** @internal */\n    ondeclaration(start: number, endIndex: number): void {\n        this.endIndex = endIndex;\n        const value = this.getSlice(start, endIndex);\n\n        if (this.cbs.onprocessinginstruction) {\n            const name = this.getInstructionName(value);\n            this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);\n        }\n\n        // Set `startIndex` for next node\n        this.startIndex = endIndex + 1;\n    }\n\n    /** @internal */\n    onprocessinginstruction(start: number, endIndex: number): void {\n        this.endIndex = endIndex;\n        const value = this.getSlice(start, endIndex);\n\n        if (this.cbs.onprocessinginstruction) {\n            const name = this.getInstructionName(value);\n            this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);\n        }\n\n        // Set `startIndex` for next node\n        this.startIndex = endIndex + 1;\n    }\n\n    /** @internal */\n    oncomment(start: number, endIndex: number, offset: number): void {\n        this.endIndex = endIndex;\n\n        this.cbs.oncomment?.(this.getSlice(start, endIndex - offset));\n        this.cbs.oncommentend?.();\n\n        // Set `startIndex` for next node\n        this.startIndex = endIndex + 1;\n    }\n\n    /** @internal */\n    oncdata(start: number, endIndex: number, offset: number): void {\n        this.endIndex = endIndex;\n        const value = this.getSlice(start, endIndex - offset);\n\n        if (!this.htmlMode || this.options.recognizeCDATA) {\n            this.cbs.oncdatastart?.();\n            this.cbs.ontext?.(value);\n            this.cbs.oncdataend?.();\n        } else {\n            this.cbs.oncomment?.(`[CDATA[${value}]]`);\n            this.cbs.oncommentend?.();\n        }\n\n        // Set `startIndex` for next node\n        this.startIndex = endIndex + 1;\n    }\n\n    /** @internal */\n    onend(): void {\n        if (this.cbs.onclosetag) {\n            // Set the end index for all remaining tags\n            this.endIndex = this.startIndex;\n            for (let index = 0; index < this.stack.length; index++) {\n                this.cbs.onclosetag(this.stack[index], true);\n            }\n        }\n        this.cbs.onend?.();\n    }\n\n    /**\n     * Resets the parser to a blank state, ready to parse a new HTML document\n     */\n    public reset(): void {\n        this.cbs.onreset?.();\n        this.tokenizer.reset();\n        this.tagname = \"\";\n        this.attribname = \"\";\n        this.attribs = null;\n        this.stack.length = 0;\n        this.startIndex = 0;\n        this.endIndex = 0;\n        this.cbs.onparserinit?.(this);\n        this.buffers.length = 0;\n        this.foreignContext.length = 0;\n        this.foreignContext.unshift(!this.htmlMode);\n        this.bufferOffset = 0;\n        this.writeIndex = 0;\n        this.ended = false;\n    }\n\n    /**\n     * Resets the parser, then parses a complete document and\n     * pushes it to the handler.\n     *\n     * @param data Document to parse.\n     */\n    public parseComplete(data: string): void {\n        this.reset();\n        this.end(data);\n    }\n\n    private getSlice(start: number, end: number) {\n        while (start - this.bufferOffset >= this.buffers[0].length) {\n            this.shiftBuffer();\n        }\n\n        let slice = this.buffers[0].slice(\n            start - this.bufferOffset,\n            end - this.bufferOffset,\n        );\n\n        while (end - this.bufferOffset > this.buffers[0].length) {\n            this.shiftBuffer();\n            slice += this.buffers[0].slice(0, end - this.bufferOffset);\n        }\n\n        return slice;\n    }\n\n    private shiftBuffer(): void {\n        this.bufferOffset += this.buffers[0].length;\n        this.writeIndex--;\n        this.buffers.shift();\n    }\n\n    /**\n     * Parses a chunk of data and calls the corresponding callbacks.\n     *\n     * @param chunk Chunk to parse.\n     */\n    public write(chunk: string): void {\n        if (this.ended) {\n            this.cbs.onerror?.(new Error(\".write() after done!\"));\n            return;\n        }\n\n        this.buffers.push(chunk);\n        if (this.tokenizer.running) {\n            this.tokenizer.write(chunk);\n            this.writeIndex++;\n        }\n    }\n\n    /**\n     * Parses the end of the buffer and clears the stack, calls onend.\n     *\n     * @param chunk Optional final chunk to parse.\n     */\n    public end(chunk?: string): void {\n        if (this.ended) {\n            this.cbs.onerror?.(new Error(\".end() after done!\"));\n            return;\n        }\n\n        if (chunk) this.write(chunk);\n        this.ended = true;\n        this.tokenizer.end();\n    }\n\n    /**\n     * Pauses parsing. The parser won't emit events until `resume` is called.\n     */\n    public pause(): void {\n        this.tokenizer.pause();\n    }\n\n    /**\n     * Resumes parsing after `pause` was called.\n     */\n    public resume(): void {\n        this.tokenizer.resume();\n\n        while (\n            this.tokenizer.running &&\n            this.writeIndex < this.buffers.length\n        ) {\n            this.tokenizer.write(this.buffers[this.writeIndex++]);\n        }\n\n        if (this.ended) this.tokenizer.end();\n    }\n\n    /**\n     * Alias of `write`, for backwards compatibility.\n     *\n     * @param chunk Chunk to parse.\n     * @deprecated\n     */\n    public parseChunk(chunk: string): void {\n        this.write(chunk);\n    }\n    /**\n     * Alias of `end`, for backwards compatibility.\n     *\n     * @param chunk Optional final chunk to parse.\n     * @deprecated\n     */\n    public done(chunk?: string): void {\n        this.end(chunk);\n    }\n}\n", "import { Parser, type ParserOptions } from \"./Parser.js\";\nexport type { Handler, ParserOptions } from \"./Parser.js\";\nexport { Parser } from \"./Parser.js\";\n\nimport {\n    DomHandler,\n    type DomHandlerOptions,\n    type ChildNode,\n    type Element,\n    type Document,\n} from \"domhandler\";\n\nexport {\n    DomHandler,\n    // Old name for DomHandler\n    DomHandler as DefaultHandler,\n    type DomHandlerOptions,\n} from \"domhandler\";\n\nexport type Options = ParserOptions & DomHandlerOptions;\n\n// Helper methods\n\n/**\n * Parses the data, returns the resulting document.\n *\n * @param data The data that should be parsed.\n * @param options Optional options for the parser and DOM handler.\n */\nexport function parseDocument(data: string, options?: Options): Document {\n    const handler = new DomHandler(undefined, options);\n    new Parser(handler, options).end(data);\n    return handler.root;\n}\n/**\n * Parses data, returns an array of the root nodes.\n *\n * Note that the root nodes still have a `Document` node as their parent.\n * Use `parseDocument` to get the `Document` node instead.\n *\n * @param data The data that should be parsed.\n * @param options Optional options for the parser and DOM handler.\n * @deprecated Use `parseDocument` instead.\n */\nexport function parseDOM(data: string, options?: Options): ChildNode[] {\n    return parseDocument(data, options).children;\n}\n/**\n * Creates a parser instance, with an attached DOM handler.\n *\n * @param callback A callback that will be called once parsing has been completed, with the resulting document.\n * @param options Optional options for the parser and DOM handler.\n * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM.\n */\nexport function createDocumentStream(\n    callback: (error: Error | null, document: Document) => void,\n    options?: Options,\n    elementCallback?: (element: Element) => void,\n): Parser {\n    const handler: DomHandler = new DomHandler(\n        (error: Error | null) => callback(error, handler.root),\n        options,\n        elementCallback,\n    );\n    return new Parser(handler, options);\n}\n/**\n * Creates a parser instance, with an attached DOM handler.\n *\n * @param callback A callback that will be called once parsing has been completed, with an array of root nodes.\n * @param options Optional options for the parser and DOM handler.\n * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM.\n * @deprecated Use `createDocumentStream` instead.\n */\nexport function createDomStream(\n    callback: (error: Error | null, dom: ChildNode[]) => void,\n    options?: Options,\n    elementCallback?: (element: Element) => void,\n): Parser {\n    const handler = new DomHandler(callback, options, elementCallback);\n    return new Parser(handler, options);\n}\n\nexport {\n    default as Tokenizer,\n    type Callbacks as TokenizerCallbacks,\n    QuoteType,\n} from \"./Tokenizer.js\";\n\n/*\n * All of the following exports exist for backwards-compatibility.\n * They should probably be removed eventually.\n */\nexport * as ElementType from \"domelementtype\";\n\nimport { getFeed, type Feed } from \"domutils\";\n\nexport { getFeed, type Feed } from \"domutils\";\n\nconst parseFeedDefaultOptions = { xmlMode: true };\n\n/**\n * Parse a feed.\n *\n * @param feed The feed that should be parsed, as a string.\n * @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`.\n */\nexport function parseFeed(\n    feed: string,\n    options: Options = parseFeedDefaultOptions,\n): Feed | null {\n    return getFeed(parseDOM(feed, options));\n}\n\nexport * as DomUtils from \"domutils\";\n", "/**\n * Methods for traversing the DOM structure.\n *\n * @module cheerio/traversing\n */\n\nimport {\n  isTag,\n  type AnyNode,\n  type Element,\n  hasChildren,\n  isDocument,\n  type Document,\n} from 'domhandler';\nimport type { Cheerio } from '../cheerio.js';\nimport * as select from 'cheerio-select';\nimport { domEach, isCheerio } from '../utils.js';\nimport { contains } from '../static.js';\nimport {\n  getChildren,\n  getSiblings,\n  nextElementSibling,\n  prevElementSibling,\n  uniqueSort,\n} from 'domutils';\nimport type { FilterFunction, AcceptedFilters } from '../types.js';\nconst reContextSelector = /^\\s*(?:[+~]|:scope\\b)/;\n\n/**\n * Get the descendants of each element in the current set of matched elements,\n * filtered by a selector, jQuery object, or element.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('#fruits').find('li').length;\n * //=> 3\n * $('#fruits').find($('.apple')).length;\n * //=> 1\n * ```\n *\n * @param selectorOrHaystack - Element to look for.\n * @returns The found elements.\n * @see {@link https://api.jquery.com/find/}\n */\nexport function find<T extends AnyNode>(\n  this: Cheerio<T>,\n  selectorOrHaystack?: string | Cheerio<Element> | Element,\n): Cheerio<Element> {\n  if (!selectorOrHaystack) {\n    return this._make([]);\n  }\n\n  if (typeof selectorOrHaystack !== 'string') {\n    const haystack = isCheerio(selectorOrHaystack)\n      ? selectorOrHaystack.toArray()\n      : [selectorOrHaystack];\n\n    const context = this.toArray();\n\n    return this._make(\n      haystack.filter((elem) => context.some((node) => contains(node, elem))),\n    );\n  }\n\n  return this._findBySelector(selectorOrHaystack, Number.POSITIVE_INFINITY);\n}\n\n/**\n * Find elements by a specific selector.\n *\n * @private\n * @category Traversing\n * @param selector - Selector to filter by.\n * @param limit - Maximum number of elements to match.\n * @returns The found elements.\n */\nexport function _findBySelector<T extends AnyNode>(\n  this: Cheerio<T>,\n  selector: string,\n  limit: number,\n): Cheerio<Element> {\n  const context = this.toArray();\n\n  const elems = reContextSelector.test(selector)\n    ? context\n    : this.children().toArray();\n\n  const options = {\n    context,\n    root: this._root?.[0],\n\n    // Pass options that are recognized by `cheerio-select`\n    xmlMode: this.options.xmlMode,\n    lowerCaseTags: this.options.lowerCaseTags,\n    lowerCaseAttributeNames: this.options.lowerCaseAttributeNames,\n    pseudos: this.options.pseudos,\n    quirksMode: this.options.quirksMode,\n  };\n\n  return this._make(select.select(selector, elems, options, limit));\n}\n\n/**\n * Creates a matcher, using a particular mapping function. Matchers provide a\n * function that finds elements using a generating function, supporting\n * filtering.\n *\n * @private\n * @param matchMap - Mapping function.\n * @returns - Function for wrapping generating functions.\n */\nfunction _getMatcher<P>(\n  matchMap: (fn: (elem: AnyNode) => P, elems: Cheerio<AnyNode>) => Element[],\n) {\n  return function (\n    fn: (elem: AnyNode) => P,\n    ...postFns: ((elems: Element[]) => Element[])[]\n  ) {\n    return function <T extends AnyNode>(\n      this: Cheerio<T>,\n      selector?: AcceptedFilters<Element>,\n    ): Cheerio<Element> {\n      let matched: Element[] = matchMap(fn, this);\n\n      if (selector) {\n        matched = filterArray(\n          matched,\n          selector,\n          this.options.xmlMode,\n          this._root?.[0],\n        );\n      }\n\n      return this._make(\n        // Post processing is only necessary if there is more than one element.\n        this.length > 1 && matched.length > 1\n          ? postFns.reduce((elems, fn) => fn(elems), matched)\n          : matched,\n      );\n    };\n  };\n}\n\n/** Matcher that adds multiple elements for each entry in the input. */\nconst _matcher = _getMatcher((fn: (elem: AnyNode) => Element[], elems) => {\n  let ret: Element[] = [];\n\n  for (let i = 0; i < elems.length; i++) {\n    const value = fn(elems[i]);\n    if (value.length > 0) ret = ret.concat(value);\n  }\n\n  return ret;\n});\n\n/** Matcher that adds at most one element for each entry in the input. */\nconst _singleMatcher = _getMatcher(\n  (fn: (elem: AnyNode) => Element | null, elems) => {\n    const ret: Element[] = [];\n\n    for (let i = 0; i < elems.length; i++) {\n      const value = fn(elems[i]);\n      if (value !== null) {\n        ret.push(value);\n      }\n    }\n    return ret;\n  },\n);\n\n/**\n * Matcher that supports traversing until a condition is met.\n *\n * @param nextElem - Function that returns the next element.\n * @param postFns - Post processing functions.\n * @returns A function usable for `*Until` methods.\n */\nfunction _matchUntil(\n  nextElem: (elem: AnyNode) => Element | null,\n  ...postFns: ((elems: Element[]) => Element[])[]\n) {\n  // We use a variable here that is used from within the matcher.\n  let matches: ((el: Element, i: number) => boolean) | null = null;\n\n  const innerMatcher = _getMatcher(\n    (nextElem: (elem: AnyNode) => Element | null, elems) => {\n      const matched: Element[] = [];\n\n      domEach(elems, (elem) => {\n        for (let next; (next = nextElem(elem)); elem = next) {\n          // FIXME: `matched` might contain duplicates here and the index is too large.\n          if (matches?.(next, matched.length)) break;\n          matched.push(next);\n        }\n      });\n\n      return matched;\n    },\n  )(nextElem, ...postFns);\n\n  return function <T extends AnyNode>(\n    this: Cheerio<T>,\n    selector?: AcceptedFilters<Element> | null,\n    filterSelector?: AcceptedFilters<Element>,\n  ): Cheerio<Element> {\n    // Override `matches` variable with the new target.\n    matches =\n      typeof selector === 'string'\n        ? (elem: Element) => select.is(elem, selector, this.options)\n        : selector\n          ? getFilterFn(selector)\n          : null;\n\n    const ret = innerMatcher.call(this, filterSelector);\n\n    // Set `matches` to `null`, so we don't waste memory.\n    matches = null;\n\n    return ret;\n  };\n}\n\nfunction _removeDuplicates<T extends AnyNode>(elems: T[]): T[] {\n  return elems.length > 1 ? Array.from(new Set<T>(elems)) : elems;\n}\n\n/**\n * Get the parent of each element in the current set of matched elements,\n * optionally filtered by a selector.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('.pear').parent().attr('id');\n * //=> fruits\n * ```\n *\n * @param selector - If specified filter for parent.\n * @returns The parents.\n * @see {@link https://api.jquery.com/parent/}\n */\nexport const parent: <T extends AnyNode>(\n  this: Cheerio<T>,\n  selector?: AcceptedFilters<Element>,\n) => Cheerio<Element> = _singleMatcher(\n  ({ parent }) => (parent && !isDocument(parent) ? (parent as Element) : null),\n  _removeDuplicates,\n);\n\n/**\n * Get a set of parents filtered by `selector` of each element in the current\n * set of match elements.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('.orange').parents().length;\n * //=> 2\n * $('.orange').parents('#fruits').length;\n * //=> 1\n * ```\n *\n * @param selector - If specified filter for parents.\n * @returns The parents.\n * @see {@link https://api.jquery.com/parents/}\n */\nexport const parents: <T extends AnyNode>(\n  this: Cheerio<T>,\n  selector?: AcceptedFilters<Element>,\n) => Cheerio<Element> = _matcher(\n  (elem) => {\n    const matched: Element[] = [];\n    while (elem.parent && !isDocument(elem.parent)) {\n      matched.push(elem.parent as Element);\n      elem = elem.parent;\n    }\n    return matched;\n  },\n  uniqueSort,\n  // eslint-disable-next-line unicorn/no-array-reverse\n  (elems) => elems.reverse(),\n);\n\n/**\n * Get the ancestors of each element in the current set of matched elements, up\n * to but not including the element matched by the selector, DOM node, or\n * cheerio object.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('.orange').parentsUntil('#food').length;\n * //=> 1\n * ```\n *\n * @param selector - Selector for element to stop at.\n * @param filterSelector - Optional filter for parents.\n * @returns The parents.\n * @see {@link https://api.jquery.com/parentsUntil/}\n */\nexport const parentsUntil: <T extends AnyNode>(\n  this: Cheerio<T>,\n  selector?: AcceptedFilters<Element> | null,\n  filterSelector?: AcceptedFilters<Element>,\n) => Cheerio<Element> = _matchUntil(\n  ({ parent }) => (parent && !isDocument(parent) ? (parent as Element) : null),\n  uniqueSort,\n  // eslint-disable-next-line unicorn/no-array-reverse\n  (elems) => elems.reverse(),\n);\n\n/**\n * For each element in the set, get the first element that matches the selector\n * by testing the element itself and traversing up through its ancestors in the\n * DOM tree.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('.orange').closest();\n * //=> []\n *\n * $('.orange').closest('.apple');\n * // => []\n *\n * $('.orange').closest('li');\n * //=> [<li class=\"orange\">Orange</li>]\n *\n * $('.orange').closest('#fruits');\n * //=> [<ul id=\"fruits\"> ... </ul>]\n * ```\n *\n * @param selector - Selector for the element to find.\n * @returns The closest nodes.\n * @see {@link https://api.jquery.com/closest/}\n */\nexport function closest<T extends AnyNode>(\n  this: Cheerio<T>,\n  selector?: AcceptedFilters<Element>,\n): Cheerio<AnyNode> {\n  const set: AnyNode[] = [];\n\n  if (!selector) {\n    return this._make(set);\n  }\n\n  const selectOpts = {\n    xmlMode: this.options.xmlMode,\n    root: this._root?.[0],\n  };\n\n  const selectFn =\n    typeof selector === 'string'\n      ? (elem: Element) => select.is(elem, selector, selectOpts)\n      : getFilterFn(selector);\n\n  domEach(this, (elem: AnyNode | null) => {\n    if (elem && !isDocument(elem) && !isTag(elem)) {\n      elem = elem.parent;\n    }\n    while (elem && isTag(elem)) {\n      if (selectFn(elem, 0)) {\n        // Do not add duplicate elements to the set\n        if (!set.includes(elem)) {\n          set.push(elem);\n        }\n        break;\n      }\n      elem = elem.parent;\n    }\n  });\n\n  return this._make(set);\n}\n\n/**\n * Gets the next sibling of each selected element, optionally filtered by a\n * selector.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('.apple').next().hasClass('orange');\n * //=> true\n * ```\n *\n * @param selector - If specified filter for sibling.\n * @returns The next nodes.\n * @see {@link https://api.jquery.com/next/}\n */\nexport const next: <T extends AnyNode>(\n  this: Cheerio<T>,\n  selector?: AcceptedFilters<Element>,\n) => Cheerio<Element> = _singleMatcher((elem) => nextElementSibling(elem));\n\n/**\n * Gets all the following siblings of the each selected element, optionally\n * filtered by a selector.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('.apple').nextAll();\n * //=> [<li class=\"orange\">Orange</li>, <li class=\"pear\">Pear</li>]\n * $('.apple').nextAll('.orange');\n * //=> [<li class=\"orange\">Orange</li>]\n * ```\n *\n * @param selector - If specified filter for siblings.\n * @returns The next nodes.\n * @see {@link https://api.jquery.com/nextAll/}\n */\nexport const nextAll: <T extends AnyNode>(\n  this: Cheerio<T>,\n  selector?: AcceptedFilters<Element>,\n) => Cheerio<Element> = _matcher((elem) => {\n  const matched = [];\n  while (elem.next) {\n    elem = elem.next;\n    if (isTag(elem)) matched.push(elem);\n  }\n  return matched;\n}, _removeDuplicates);\n\n/**\n * Gets all the following siblings up to but not including the element matched\n * by the selector, optionally filtered by another selector.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('.apple').nextUntil('.pear');\n * //=> [<li class=\"orange\">Orange</li>]\n * ```\n *\n * @param selector - Selector for element to stop at.\n * @param filterSelector - If specified filter for siblings.\n * @returns The next nodes.\n * @see {@link https://api.jquery.com/nextUntil/}\n */\nexport const nextUntil: <T extends AnyNode>(\n  this: Cheerio<T>,\n  selector?: AcceptedFilters<Element> | null,\n  filterSelector?: AcceptedFilters<Element>,\n) => Cheerio<Element> = _matchUntil(\n  (el) => nextElementSibling(el),\n  _removeDuplicates,\n);\n\n/**\n * Gets the previous sibling of each selected element optionally filtered by a\n * selector.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('.orange').prev().hasClass('apple');\n * //=> true\n * ```\n *\n * @param selector - If specified filter for siblings.\n * @returns The previous nodes.\n * @see {@link https://api.jquery.com/prev/}\n */\nexport const prev: <T extends AnyNode>(\n  this: Cheerio<T>,\n  selector?: AcceptedFilters<Element>,\n) => Cheerio<Element> = _singleMatcher((elem) => prevElementSibling(elem));\n\n/**\n * Gets all the preceding siblings of each selected element, optionally filtered\n * by a selector.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('.pear').prevAll();\n * //=> [<li class=\"orange\">Orange</li>, <li class=\"apple\">Apple</li>]\n *\n * $('.pear').prevAll('.orange');\n * //=> [<li class=\"orange\">Orange</li>]\n * ```\n *\n * @param selector - If specified filter for siblings.\n * @returns The previous nodes.\n * @see {@link https://api.jquery.com/prevAll/}\n */\nexport const prevAll: <T extends AnyNode>(\n  this: Cheerio<T>,\n  selector?: AcceptedFilters<Element>,\n) => Cheerio<Element> = _matcher((elem) => {\n  const matched = [];\n  while (elem.prev) {\n    elem = elem.prev;\n    if (isTag(elem)) matched.push(elem);\n  }\n  return matched;\n}, _removeDuplicates);\n\n/**\n * Gets all the preceding siblings up to but not including the element matched\n * by the selector, optionally filtered by another selector.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('.pear').prevUntil('.apple');\n * //=> [<li class=\"orange\">Orange</li>]\n * ```\n *\n * @param selector - Selector for element to stop at.\n * @param filterSelector - If specified filter for siblings.\n * @returns The previous nodes.\n * @see {@link https://api.jquery.com/prevUntil/}\n */\nexport const prevUntil: <T extends AnyNode>(\n  this: Cheerio<T>,\n  selector?: AcceptedFilters<Element> | null,\n  filterSelector?: AcceptedFilters<Element>,\n) => Cheerio<Element> = _matchUntil(\n  (el) => prevElementSibling(el),\n  _removeDuplicates,\n);\n\n/**\n * Get the siblings of each element (excluding the element) in the set of\n * matched elements, optionally filtered by a selector.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('.pear').siblings().length;\n * //=> 2\n *\n * $('.pear').siblings('.orange').length;\n * //=> 1\n * ```\n *\n * @param selector - If specified filter for siblings.\n * @returns The siblings.\n * @see {@link https://api.jquery.com/siblings/}\n */\nexport const siblings: <T extends AnyNode>(\n  this: Cheerio<T>,\n  selector?: AcceptedFilters<Element>,\n) => Cheerio<Element> = _matcher(\n  (elem) =>\n    getSiblings(elem).filter((el): el is Element => isTag(el) && el !== elem),\n  uniqueSort,\n);\n\n/**\n * Gets the element children of each element in the set of matched elements.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('#fruits').children().length;\n * //=> 3\n *\n * $('#fruits').children('.pear').text();\n * //=> Pear\n * ```\n *\n * @param selector - If specified filter for children.\n * @returns The children.\n * @see {@link https://api.jquery.com/children/}\n */\nexport const children: <T extends AnyNode>(\n  this: Cheerio<T>,\n  selector?: AcceptedFilters<Element>,\n) => Cheerio<Element> = _matcher(\n  (elem) => getChildren(elem).filter(isTag),\n  _removeDuplicates,\n);\n\n/**\n * Gets the children of each element in the set of matched elements, including\n * text and comment nodes.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('#fruits').contents().length;\n * //=> 3\n * ```\n *\n * @returns The children.\n * @see {@link https://api.jquery.com/contents/}\n */\nexport function contents<T extends AnyNode>(\n  this: Cheerio<T>,\n): Cheerio<AnyNode> {\n  const elems = this.toArray().reduce<AnyNode[]>(\n    (newElems, elem) =>\n      hasChildren(elem) ? newElems.concat(elem.children) : newElems,\n    [],\n  );\n  return this._make(elems);\n}\n\n/**\n * Iterates over a cheerio object, executing a function for each matched\n * element. When the callback is fired, the function is fired in the context of\n * the DOM element, so `this` refers to the current element, which is equivalent\n * to the function parameter `element`. To break out of the `each` loop early,\n * return with `false`.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * const fruits = [];\n *\n * $('li').each(function (i, elem) {\n *   fruits[i] = $(this).text();\n * });\n *\n * fruits.join(', ');\n * //=> Apple, Orange, Pear\n * ```\n *\n * @param fn - Function to execute.\n * @returns The instance itself, useful for chaining.\n * @see {@link https://api.jquery.com/each/}\n */\nexport function each<T>(\n  this: Cheerio<T>,\n  fn: (this: T, i: number, el: T) => void | boolean,\n): Cheerio<T> {\n  let i = 0;\n  const len = this.length;\n  while (i < len && fn.call(this[i], i, this[i]) !== false) ++i;\n  return this;\n}\n\n/**\n * Pass each element in the current matched set through a function, producing a\n * new Cheerio object containing the return values. The function can return an\n * individual data item or an array of data items to be inserted into the\n * resulting set. If an array is returned, the elements inside the array are\n * inserted into the set. If the function returns null or undefined, no element\n * will be inserted.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('li')\n *   .map(function (i, el) {\n *     // this === el\n *     return $(this).text();\n *   })\n *   .toArray()\n *   .join(' ');\n * //=> \"apple orange pear\"\n * ```\n *\n * @param fn - Function to execute.\n * @returns The mapped elements, wrapped in a Cheerio collection.\n * @see {@link https://api.jquery.com/map/}\n */\nexport function map<T, M>(\n  this: Cheerio<T>,\n  fn: (this: T, i: number, el: T) => M[] | M | null | undefined,\n): Cheerio<M> {\n  let elems: M[] = [];\n  for (let i = 0; i < this.length; i++) {\n    const el = this[i];\n    const val = fn.call(el, i, el);\n    if (val != null) {\n      elems = elems.concat(val);\n    }\n  }\n  return this._make(elems);\n}\n\n/**\n * Creates a function to test if a filter is matched.\n *\n * @param match - A filter.\n * @returns A function that determines if a filter has been matched.\n */\nfunction getFilterFn<T>(\n  match: FilterFunction<T> | Cheerio<T> | T,\n): (el: T, i: number) => boolean {\n  if (typeof match === 'function') {\n    return (el, i) => (match as FilterFunction<T>).call(el, i, el);\n  }\n  if (isCheerio<T>(match)) {\n    return (el) => Array.prototype.includes.call(match, el);\n  }\n  return function (el) {\n    return match === el;\n  };\n}\n\n/**\n * Iterates over a cheerio object, reducing the set of selector elements to\n * those that match the selector or pass the function's test.\n *\n * This is the definition for using type guards; have a look below for other\n * ways to invoke this method. The function is executed in the context of the\n * selected element, so `this` refers to the current element.\n *\n * @category Traversing\n * @example <caption>Function</caption>\n *\n * ```js\n * $('li')\n *   .filter(function (i, el) {\n *     // this === el\n *     return $(this).attr('class') === 'orange';\n *   })\n *   .attr('class'); //=> orange\n * ```\n *\n * @param match - Value to look for, following the rules above.\n * @returns The filtered collection.\n * @see {@link https://api.jquery.com/filter/}\n */\nexport function filter<T, S extends T>(\n  this: Cheerio<T>,\n  match: (this: T, index: number, value: T) => value is S,\n): Cheerio<S>;\n/**\n * Iterates over a cheerio object, reducing the set of selector elements to\n * those that match the selector or pass the function's test.\n *\n * - When a Cheerio selection is specified, return only the elements contained in\n *   that selection.\n * - When an element is specified, return only that element (if it is contained in\n *   the original selection).\n * - If using the function method, the function is executed in the context of the\n *   selected element, so `this` refers to the current element.\n *\n * @category Traversing\n * @example <caption>Selector</caption>\n *\n * ```js\n * $('li').filter('.orange').attr('class');\n * //=> orange\n * ```\n *\n * @example <caption>Function</caption>\n *\n * ```js\n * $('li')\n *   .filter(function (i, el) {\n *     // this === el\n *     return $(this).attr('class') === 'orange';\n *   })\n *   .attr('class'); //=> orange\n * ```\n *\n * @param match - Value to look for, following the rules above. See\n *   {@link AcceptedFilters}.\n * @returns The filtered collection.\n * @see {@link https://api.jquery.com/filter/}\n */\nexport function filter<T, S extends AcceptedFilters<T>>(\n  this: Cheerio<T>,\n  match: S,\n): Cheerio<S extends string ? Element : T>;\nexport function filter<T>(\n  this: Cheerio<T>,\n  match: AcceptedFilters<T>,\n): Cheerio<unknown> {\n  return this._make<unknown>(\n    filterArray(this.toArray(), match, this.options.xmlMode, this._root?.[0]),\n  );\n}\n\nexport function filterArray<T>(\n  nodes: T[],\n  match: AcceptedFilters<T>,\n  xmlMode?: boolean,\n  root?: Document,\n): Element[] | T[] {\n  return typeof match === 'string'\n    ? select.filter(match, nodes as unknown as AnyNode[], { xmlMode, root })\n    : nodes.filter(getFilterFn<T>(match));\n}\n\n/**\n * Checks the current list of elements and returns `true` if _any_ of the\n * elements match the selector. If using an element or Cheerio selection,\n * returns `true` if _any_ of the elements match. If using a predicate function,\n * the function is executed in the context of the selected element, so `this`\n * refers to the current element.\n *\n * @category Traversing\n * @param selector - Selector for the selection.\n * @returns Whether or not the selector matches an element of the instance.\n * @see {@link https://api.jquery.com/is/}\n */\nexport function is<T>(\n  this: Cheerio<T>,\n  selector?: AcceptedFilters<T>,\n): boolean {\n  const nodes = this.toArray();\n  return typeof selector === 'string'\n    ? select.some(\n        (nodes as unknown as AnyNode[]).filter(isTag),\n        selector,\n        this.options,\n      )\n    : selector\n      ? nodes.some(getFilterFn<T>(selector))\n      : false;\n}\n\n/**\n * Remove elements from the set of matched elements. Given a Cheerio object that\n * represents a set of DOM elements, the `.not()` method constructs a new\n * Cheerio object from a subset of the matching elements. The supplied selector\n * is tested against each element; the elements that don't match the selector\n * will be included in the result.\n *\n * The `.not()` method can take a function as its argument in the same way that\n * `.filter()` does. Elements for which the function returns `true` are excluded\n * from the filtered set; all other elements are included.\n *\n * @category Traversing\n * @example <caption>Selector</caption>\n *\n * ```js\n * $('li').not('.apple').length;\n * //=> 2\n * ```\n *\n * @example <caption>Function</caption>\n *\n * ```js\n * $('li').not(function (i, el) {\n *   // this === el\n *   return $(this).attr('class') === 'orange';\n * }).length; //=> 2\n * ```\n *\n * @param match - Value to look for, following the rules above.\n * @returns The filtered collection.\n * @see {@link https://api.jquery.com/not/}\n */\nexport function not<T extends AnyNode>(\n  this: Cheerio<T>,\n  match: AcceptedFilters<T>,\n): Cheerio<T> {\n  let nodes = this.toArray();\n\n  if (typeof match === 'string') {\n    const matches = new Set<AnyNode>(select.filter(match, nodes, this.options));\n    nodes = nodes.filter((el) => !matches.has(el));\n  } else {\n    const filterFn = getFilterFn(match);\n    nodes = nodes.filter((el, i) => !filterFn(el, i));\n  }\n\n  return this._make(nodes);\n}\n\n/**\n * Filters the set of matched elements to only those which have the given DOM\n * element as a descendant or which have a descendant that matches the given\n * selector. Equivalent to `.filter(':has(selector)')`.\n *\n * @category Traversing\n * @example <caption>Selector</caption>\n *\n * ```js\n * $('ul').has('.pear').attr('id');\n * //=> fruits\n * ```\n *\n * @example <caption>Element</caption>\n *\n * ```js\n * $('ul').has($('.pear')[0]).attr('id');\n * //=> fruits\n * ```\n *\n * @param selectorOrHaystack - Element to look for.\n * @returns The filtered collection.\n * @see {@link https://api.jquery.com/has/}\n */\nexport function has(\n  this: Cheerio<AnyNode | Element>,\n  selectorOrHaystack: string | Cheerio<Element> | Element,\n): Cheerio<AnyNode | Element> {\n  return this.filter(\n    typeof selectorOrHaystack === 'string'\n      ? // Using the `:has` selector here short-circuits searches.\n        `:has(${selectorOrHaystack})`\n      : (_, el) => this._make(el).find(selectorOrHaystack).length > 0,\n  );\n}\n\n/**\n * Will select the first element of a cheerio object.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('#fruits').children().first().text();\n * //=> Apple\n * ```\n *\n * @returns The first element.\n * @see {@link https://api.jquery.com/first/}\n */\nexport function first<T extends AnyNode>(this: Cheerio<T>): Cheerio<T> {\n  return this.length > 1 ? this._make(this[0]) : this;\n}\n\n/**\n * Will select the last element of a cheerio object.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('#fruits').children().last().text();\n * //=> Pear\n * ```\n *\n * @returns The last element.\n * @see {@link https://api.jquery.com/last/}\n */\nexport function last<T>(this: Cheerio<T>): Cheerio<T> {\n  return this.length > 0 ? this._make(this[this.length - 1]) : this;\n}\n\n/**\n * Reduce the set of matched elements to the one at the specified index. Use\n * `.eq(-i)` to count backwards from the last selected element.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('li').eq(0).text();\n * //=> Apple\n *\n * $('li').eq(-1).text();\n * //=> Pear\n * ```\n *\n * @param i - Index of the element to select.\n * @returns The element at the `i`th position.\n * @see {@link https://api.jquery.com/eq/}\n */\nexport function eq<T>(this: Cheerio<T>, i: number): Cheerio<T> {\n  i = +i;\n\n  // Use the first identity optimization if possible\n  if (i === 0 && this.length <= 1) return this;\n\n  if (i < 0) i = this.length + i;\n  return this._make(this[i] ?? []);\n}\n\n/**\n * Retrieve one of the elements matched by the Cheerio object, at the `i`th\n * position.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('li').get(0).tagName;\n * //=> li\n * ```\n *\n * @param i - Element to retrieve.\n * @returns The element at the `i`th position.\n * @see {@link https://api.jquery.com/get/}\n */\nexport function get<T>(this: Cheerio<T>, i: number): T | undefined;\n/**\n * Retrieve all elements matched by the Cheerio object, as an array.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('li').get().length;\n * //=> 3\n * ```\n *\n * @returns All elements matched by the Cheerio object.\n * @see {@link https://api.jquery.com/get/}\n */\nexport function get<T>(this: Cheerio<T>): T[];\nexport function get<T>(this: Cheerio<T>, i?: number): T | T[] {\n  if (i == null) {\n    return this.toArray();\n  }\n  return this[i < 0 ? this.length + i : i];\n}\n\n/**\n * Retrieve all the DOM elements contained in the jQuery set as an array.\n *\n * @example\n *\n * ```js\n * $('li').toArray();\n * //=> [ {...}, {...}, {...} ]\n * ```\n *\n * @returns The contained items.\n */\nexport function toArray<T>(this: Cheerio<T>): T[] {\n  return (Array.prototype as T[]).slice.call(this);\n}\n\n/**\n * Search for a given element from among the matched elements.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('.pear').index();\n * //=> 2 $('.orange').index('li');\n * //=> 1\n * $('.apple').index($('#fruit, li'));\n * //=> 1\n * ```\n *\n * @param selectorOrNeedle - Element to look for.\n * @returns The index of the element.\n * @see {@link https://api.jquery.com/index/}\n */\nexport function index<T extends AnyNode>(\n  this: Cheerio<T>,\n  selectorOrNeedle?: string | Cheerio<AnyNode> | AnyNode,\n): number {\n  let $haystack: Cheerio<AnyNode>;\n  let needle: AnyNode;\n\n  if (selectorOrNeedle == null) {\n    $haystack = this.parent().children();\n    needle = this[0];\n  } else if (typeof selectorOrNeedle === 'string') {\n    $haystack = this._make<AnyNode>(selectorOrNeedle);\n    needle = this[0];\n  } else {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias, unicorn/no-this-assignment\n    $haystack = this;\n    needle = isCheerio(selectorOrNeedle)\n      ? selectorOrNeedle[0]\n      : selectorOrNeedle;\n  }\n\n  return Array.prototype.indexOf.call($haystack, needle);\n}\n\n/**\n * Gets the elements matching the specified range (0-based position).\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('li').slice(1).eq(0).text();\n * //=> 'Orange'\n *\n * $('li').slice(1, 2).length;\n * //=> 1\n * ```\n *\n * @param start - A position at which the elements begin to be selected. If\n *   negative, it indicates an offset from the end of the set.\n * @param end - A position at which the elements stop being selected. If\n *   negative, it indicates an offset from the end of the set. If omitted, the\n *   range continues until the end of the set.\n * @returns The elements matching the specified range.\n * @see {@link https://api.jquery.com/slice/}\n */\nexport function slice<T>(\n  this: Cheerio<T>,\n  start?: number,\n  end?: number,\n): Cheerio<T> {\n  return this._make<T>(Array.prototype.slice.call(this, start, end));\n}\n\n/**\n * End the most recent filtering operation in the current chain and return the\n * set of matched elements to its previous state.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('li').eq(0).end().length;\n * //=> 3\n * ```\n *\n * @returns The previous state of the set of matched elements.\n * @see {@link https://api.jquery.com/end/}\n */\nexport function end<T>(this: Cheerio<T>): Cheerio<AnyNode> {\n  return (this.prevObject as Cheerio<AnyNode> | null) ?? this._make([]);\n}\n\n/**\n * Add elements to the set of matched elements.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('.apple').add('.orange').length;\n * //=> 2\n * ```\n *\n * @param other - Elements to add.\n * @param context - Optionally the context of the new selection.\n * @returns The combined set.\n * @see {@link https://api.jquery.com/add/}\n */\nexport function add<S extends AnyNode, T extends AnyNode>(\n  this: Cheerio<T>,\n  other: string | Cheerio<S> | S | S[],\n  context?: Cheerio<S> | string,\n): Cheerio<S | T> {\n  const selection = this._make(other, context);\n  const contents = uniqueSort([...this.get(), ...selection.get()]);\n  return this._make(contents);\n}\n\n/**\n * Add the previous set of elements on the stack to the current set, optionally\n * filtered by a selector.\n *\n * @category Traversing\n * @example\n *\n * ```js\n * $('li').eq(0).addBack('.orange').length;\n * //=> 2\n * ```\n *\n * @param selector - Selector for the elements to add.\n * @returns The combined set.\n * @see {@link https://api.jquery.com/addBack/}\n */\nexport function addBack<T extends AnyNode>(\n  this: Cheerio<T>,\n  selector?: string,\n): Cheerio<AnyNode> {\n  return this.prevObject\n    ? this.add<AnyNode, T>(\n        selector ? this.prevObject.filter(selector) : this.prevObject,\n      )\n    : this;\n}\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "/**\n * Methods for modifying the DOM structure.\n *\n * @module cheerio/manipulation\n */\n\nimport {\n  isTag,\n  Text,\n  hasChildren,\n  cloneNode,\n  Document,\n  type ParentNode,\n  type AnyNode,\n  type Element,\n} from 'domhandler';\nimport { update as updateDOM } from '../parse.js';\nimport { text as staticText } from '../static.js';\nimport { domEach, isHtml, isCheerio } from '../utils.js';\nimport { removeElement } from 'domutils';\nimport type { Cheerio } from '../cheerio.js';\nimport type { BasicAcceptedElems, AcceptedElems } from '../types.js';\nimport { ElementType } from 'htmlparser2';\n\n/**\n * Create an array of nodes, recursing into arrays and parsing strings if\n * necessary.\n *\n * @private\n * @category Manipulation\n * @param elem - Elements to make an array of.\n * @param clone - Optionally clone nodes.\n * @returns The array of nodes.\n */\nexport function _makeDomArray<T extends AnyNode>(\n  this: Cheerio<T>,\n  elem?: BasicAcceptedElems<AnyNode> | BasicAcceptedElems<AnyNode>[],\n  clone?: boolean,\n): AnyNode[] {\n  if (elem == null) {\n    return [];\n  }\n\n  if (typeof elem === 'string') {\n    return this._parse(elem, this.options, false, null).children.slice(0);\n  }\n\n  if ('length' in elem) {\n    if (elem.length === 1) {\n      return this._makeDomArray(elem[0], clone);\n    }\n\n    const result: AnyNode[] = [];\n\n    for (let i = 0; i < elem.length; i++) {\n      const el = elem[i];\n\n      if (typeof el === 'object') {\n        if (el == null) {\n          continue;\n        }\n\n        if (!('length' in el)) {\n          result.push(clone ? cloneNode(el, true) : el);\n          continue;\n        }\n      }\n\n      result.push(...this._makeDomArray(el, clone));\n    }\n\n    return result;\n  }\n\n  return [clone ? cloneNode(elem, true) : elem];\n}\n\nfunction _insert(\n  concatenator: (\n    dom: AnyNode[],\n    children: AnyNode[],\n    parent: ParentNode,\n  ) => void,\n) {\n  return function <T extends AnyNode>(\n    this: Cheerio<T>,\n    ...elems:\n      | [\n          (\n            this: AnyNode,\n            i: number,\n            html: string,\n          ) => BasicAcceptedElems<AnyNode>,\n        ]\n      | BasicAcceptedElems<AnyNode>[]\n  ) {\n    const lastIdx = this.length - 1;\n\n    return domEach(this, (el, i) => {\n      if (!hasChildren(el)) return;\n\n      const domSrc =\n        typeof elems[0] === 'function'\n          ? elems[0].call(el, i, this._render(el.children))\n          : (elems as BasicAcceptedElems<AnyNode>[]);\n\n      const dom = this._makeDomArray(domSrc, i < lastIdx);\n      concatenator(dom, el.children, el);\n    });\n  };\n}\n\n/**\n * Modify an array in-place, removing some number of elements and adding new\n * elements directly following them.\n *\n * @private\n * @category Manipulation\n * @param array - Target array to splice.\n * @param spliceIdx - Index at which to begin changing the array.\n * @param spliceCount - Number of elements to remove from the array.\n * @param newElems - Elements to insert into the array.\n * @param parent - The parent of the node.\n * @returns The spliced array.\n */\nfunction uniqueSplice(\n  array: AnyNode[],\n  spliceIdx: number,\n  spliceCount: number,\n  newElems: AnyNode[],\n  parent: ParentNode,\n): AnyNode[] {\n  const spliceArgs: Parameters<AnyNode[]['splice']> = [\n    spliceIdx,\n    spliceCount,\n    ...newElems,\n  ];\n  const prev = spliceIdx === 0 ? null : array[spliceIdx - 1];\n  const next =\n    spliceIdx + spliceCount >= array.length\n      ? null\n      : array[spliceIdx + spliceCount];\n\n  /*\n   * Before splicing in new elements, ensure they do not already appear in the\n   * current array.\n   */\n  for (let idx = 0; idx < newElems.length; ++idx) {\n    const node = newElems[idx];\n    const oldParent = node.parent;\n\n    if (oldParent) {\n      const oldSiblings: AnyNode[] = oldParent.children;\n      const prevIdx = oldSiblings.indexOf(node);\n\n      if (prevIdx !== -1) {\n        oldParent.children.splice(prevIdx, 1);\n        if (parent === oldParent && spliceIdx > prevIdx) {\n          spliceArgs[0]--;\n        }\n      }\n    }\n\n    node.parent = parent;\n\n    if (node.prev) {\n      node.prev.next = node.next ?? null;\n    }\n\n    if (node.next) {\n      node.next.prev = node.prev ?? null;\n    }\n\n    node.prev = idx === 0 ? prev : newElems[idx - 1];\n    node.next = idx === newElems.length - 1 ? next : newElems[idx + 1];\n  }\n\n  if (prev) {\n    prev.next = newElems[0];\n  }\n  if (next) {\n    next.prev = newElems[newElems.length - 1];\n  }\n  return array.splice(...spliceArgs);\n}\n\n/**\n * Insert every element in the set of matched elements to the end of the target.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * $('<li class=\"plum\">Plum</li>').appendTo('#fruits');\n * $.html();\n * //=>  <ul id=\"fruits\">\n * //      <li class=\"apple\">Apple</li>\n * //      <li class=\"orange\">Orange</li>\n * //      <li class=\"pear\">Pear</li>\n * //      <li class=\"plum\">Plum</li>\n * //    </ul>\n * ```\n *\n * @param target - Element to append elements to.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/appendTo/}\n */\nexport function appendTo<T extends AnyNode>(\n  this: Cheerio<T>,\n  target: BasicAcceptedElems<AnyNode>,\n): Cheerio<T> {\n  const appendTarget = isCheerio<T>(target) ? target : this._make(target);\n\n  appendTarget.append(this);\n\n  return this;\n}\n\n/**\n * Insert every element in the set of matched elements to the beginning of the\n * target.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * $('<li class=\"plum\">Plum</li>').prependTo('#fruits');\n * $.html();\n * //=>  <ul id=\"fruits\">\n * //      <li class=\"plum\">Plum</li>\n * //      <li class=\"apple\">Apple</li>\n * //      <li class=\"orange\">Orange</li>\n * //      <li class=\"pear\">Pear</li>\n * //    </ul>\n * ```\n *\n * @param target - Element to prepend elements to.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/prependTo/}\n */\nexport function prependTo<T extends AnyNode>(\n  this: Cheerio<T>,\n  target: BasicAcceptedElems<AnyNode>,\n): Cheerio<T> {\n  const prependTarget = isCheerio<T>(target) ? target : this._make(target);\n\n  prependTarget.prepend(this);\n\n  return this;\n}\n\n/**\n * Inserts content as the _last_ child of each of the selected elements.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * $('ul').append('<li class=\"plum\">Plum</li>');\n * $.html();\n * //=>  <ul id=\"fruits\">\n * //      <li class=\"apple\">Apple</li>\n * //      <li class=\"orange\">Orange</li>\n * //      <li class=\"pear\">Pear</li>\n * //      <li class=\"plum\">Plum</li>\n * //    </ul>\n * ```\n *\n * @see {@link https://api.jquery.com/append/}\n */\nexport const append: <T extends AnyNode>(\n  this: Cheerio<T>,\n  ...elems:\n    | [(this: AnyNode, i: number, html: string) => BasicAcceptedElems<AnyNode>]\n    | BasicAcceptedElems<AnyNode>[]\n) => Cheerio<T> = _insert((dom, children, parent) => {\n  uniqueSplice(children, children.length, 0, dom, parent);\n});\n\n/**\n * Inserts content as the _first_ child of each of the selected elements.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * $('ul').prepend('<li class=\"plum\">Plum</li>');\n * $.html();\n * //=>  <ul id=\"fruits\">\n * //      <li class=\"plum\">Plum</li>\n * //      <li class=\"apple\">Apple</li>\n * //      <li class=\"orange\">Orange</li>\n * //      <li class=\"pear\">Pear</li>\n * //    </ul>\n * ```\n *\n * @see {@link https://api.jquery.com/prepend/}\n */\nexport const prepend: <T extends AnyNode>(\n  this: Cheerio<T>,\n  ...elems:\n    | [(this: AnyNode, i: number, html: string) => BasicAcceptedElems<AnyNode>]\n    | BasicAcceptedElems<AnyNode>[]\n) => Cheerio<T> = _insert((dom, children, parent) => {\n  uniqueSplice(children, 0, 0, dom, parent);\n});\n\nfunction _wrap(\n  insert: (\n    el: AnyNode,\n    elInsertLocation: ParentNode,\n    wrapperDom: ParentNode[],\n  ) => void,\n) {\n  return function <T extends AnyNode>(\n    this: Cheerio<T>,\n    wrapper: AcceptedElems<AnyNode>,\n  ) {\n    const lastIdx = this.length - 1;\n    const lastParent = this.parents().last();\n\n    for (let i = 0; i < this.length; i++) {\n      const el = this[i];\n\n      const wrap =\n        typeof wrapper === 'function'\n          ? wrapper.call(el, i, el)\n          : typeof wrapper === 'string' && !isHtml(wrapper)\n            ? lastParent.find(wrapper).clone()\n            : wrapper;\n\n      const [wrapperDom] = this._makeDomArray(wrap, i < lastIdx);\n\n      if (!wrapperDom || !hasChildren(wrapperDom)) continue;\n\n      let elInsertLocation = wrapperDom;\n\n      /*\n       * Find the deepest child. Only consider the first tag child of each node\n       * (ignore text); stop if no children are found.\n       */\n      let j = 0;\n\n      while (j < elInsertLocation.children.length) {\n        const child = elInsertLocation.children[j];\n        if (isTag(child)) {\n          elInsertLocation = child;\n          j = 0;\n        } else {\n          j++;\n        }\n      }\n\n      insert(el, elInsertLocation, [wrapperDom]);\n    }\n\n    return this;\n  };\n}\n\n/**\n * The .wrap() function can take any string or object that could be passed to\n * the $() factory function to specify a DOM structure. This structure may be\n * nested several levels deep, but should contain only one inmost element. A\n * copy of this structure will be wrapped around each of the elements in the set\n * of matched elements. This method returns the original set of elements for\n * chaining purposes.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * const redFruit = $('<div class=\"red-fruit\"></div>');\n * $('.apple').wrap(redFruit);\n *\n * //=> <ul id=\"fruits\">\n * //     <div class=\"red-fruit\">\n * //      <li class=\"apple\">Apple</li>\n * //     </div>\n * //     <li class=\"orange\">Orange</li>\n * //     <li class=\"plum\">Plum</li>\n * //   </ul>\n *\n * const healthy = $('<div class=\"healthy\"></div>');\n * $('li').wrap(healthy);\n *\n * //=> <ul id=\"fruits\">\n * //     <div class=\"healthy\">\n * //       <li class=\"apple\">Apple</li>\n * //     </div>\n * //     <div class=\"healthy\">\n * //       <li class=\"orange\">Orange</li>\n * //     </div>\n * //     <div class=\"healthy\">\n * //        <li class=\"plum\">Plum</li>\n * //     </div>\n * //   </ul>\n * ```\n *\n * @param wrapper - The DOM structure to wrap around each element in the\n *   selection.\n * @see {@link https://api.jquery.com/wrap/}\n */\nexport const wrap: <T extends AnyNode>(\n  this: Cheerio<T>,\n  wrapper: AcceptedElems<AnyNode>,\n) => Cheerio<T> = _wrap((el, elInsertLocation, wrapperDom) => {\n  const { parent } = el;\n\n  if (!parent) return;\n\n  const siblings: AnyNode[] = parent.children;\n  const index = siblings.indexOf(el);\n\n  updateDOM([el], elInsertLocation);\n  /*\n   * The previous operation removed the current element from the `siblings`\n   * array, so the `dom` array can be inserted without removing any\n   * additional elements.\n   */\n  uniqueSplice(siblings, index, 0, wrapperDom, parent);\n});\n\n/**\n * The .wrapInner() function can take any string or object that could be passed\n * to the $() factory function to specify a DOM structure. This structure may be\n * nested several levels deep, but should contain only one inmost element. The\n * structure will be wrapped around the content of each of the elements in the\n * set of matched elements.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * const redFruit = $('<div class=\"red-fruit\"></div>');\n * $('.apple').wrapInner(redFruit);\n *\n * //=> <ul id=\"fruits\">\n * //     <li class=\"apple\">\n * //       <div class=\"red-fruit\">Apple</div>\n * //     </li>\n * //     <li class=\"orange\">Orange</li>\n * //     <li class=\"pear\">Pear</li>\n * //   </ul>\n *\n * const healthy = $('<div class=\"healthy\"></div>');\n * $('li').wrapInner(healthy);\n *\n * //=> <ul id=\"fruits\">\n * //     <li class=\"apple\">\n * //       <div class=\"healthy\">Apple</div>\n * //     </li>\n * //     <li class=\"orange\">\n * //       <div class=\"healthy\">Orange</div>\n * //     </li>\n * //     <li class=\"pear\">\n * //       <div class=\"healthy\">Pear</div>\n * //     </li>\n * //   </ul>\n * ```\n *\n * @param wrapper - The DOM structure to wrap around the content of each element\n *   in the selection.\n * @returns The instance itself, for chaining.\n * @see {@link https://api.jquery.com/wrapInner/}\n */\nexport const wrapInner: <T extends AnyNode>(\n  this: Cheerio<T>,\n  wrapper: AcceptedElems<AnyNode>,\n) => Cheerio<T> = _wrap((el, elInsertLocation, wrapperDom) => {\n  if (!hasChildren(el)) return;\n  updateDOM(el.children, elInsertLocation);\n  updateDOM(wrapperDom, el);\n});\n\n/**\n * The .unwrap() function, removes the parents of the set of matched elements\n * from the DOM, leaving the matched elements in their place.\n *\n * @category Manipulation\n * @example <caption>without selector</caption>\n *\n * ```js\n * const $ = cheerio.load(\n *   '<div id=test>\\n  <div><p>Hello</p></div>\\n  <div><p>World</p></div>\\n</div>',\n * );\n * $('#test p').unwrap();\n *\n * //=> <div id=test>\n * //     <p>Hello</p>\n * //     <p>World</p>\n * //   </div>\n * ```\n *\n * @example <caption>with selector</caption>\n *\n * ```js\n * const $ = cheerio.load(\n *   '<div id=test>\\n  <p>Hello</p>\\n  <b><p>World</p></b>\\n</div>',\n * );\n * $('#test p').unwrap('b');\n *\n * //=> <div id=test>\n * //     <p>Hello</p>\n * //     <p>World</p>\n * //   </div>\n * ```\n *\n * @param selector - A selector to check the parent element against. If an\n *   element's parent does not match the selector, the element won't be\n *   unwrapped.\n * @returns The instance itself, for chaining.\n * @see {@link https://api.jquery.com/unwrap/}\n */\nexport function unwrap<T extends AnyNode>(\n  this: Cheerio<T>,\n  selector?: string,\n): Cheerio<T> {\n  this.parent(selector)\n    .not('body')\n    .each((_, el) => {\n      this._make(el).replaceWith(el.children);\n    });\n  return this;\n}\n\n/**\n * The .wrapAll() function can take any string or object that could be passed to\n * the $() function to specify a DOM structure. This structure may be nested\n * several levels deep, but should contain only one inmost element. The\n * structure will be wrapped around all of the elements in the set of matched\n * elements, as a single group.\n *\n * @category Manipulation\n * @example <caption>With markup passed to `wrapAll`</caption>\n *\n * ```js\n * const $ = cheerio.load(\n *   '<div class=\"container\"><div class=\"inner\">First</div><div class=\"inner\">Second</div></div>',\n * );\n * $('.inner').wrapAll(\"<div class='new'></div>\");\n *\n * //=> <div class=\"container\">\n * //     <div class='new'>\n * //       <div class=\"inner\">First</div>\n * //       <div class=\"inner\">Second</div>\n * //     </div>\n * //   </div>\n * ```\n *\n * @example <caption>With an existing cheerio instance</caption>\n *\n * ```js\n * const $ = cheerio.load(\n *   '<span>Span 1</span><strong>Strong</strong><span>Span 2</span>',\n * );\n * const wrap = $('<div><p><em><b></b></em></p></div>');\n * $('span').wrapAll(wrap);\n *\n * //=> <div>\n * //     <p>\n * //       <em>\n * //         <b>\n * //           <span>Span 1</span>\n * //           <span>Span 2</span>\n * //         </b>\n * //       </em>\n * //     </p>\n * //   </div>\n * //   <strong>Strong</strong>\n * ```\n *\n * @param wrapper - The DOM structure to wrap around all matched elements in the\n *   selection.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/wrapAll/}\n */\nexport function wrapAll<T extends AnyNode>(\n  this: Cheerio<T>,\n  wrapper: AcceptedElems<T>,\n): Cheerio<T> {\n  const el = this[0];\n  if (el) {\n    const wrap: Cheerio<AnyNode> = this._make(\n      typeof wrapper === 'function' ? wrapper.call(el, 0, el) : wrapper,\n    ).insertBefore(el);\n\n    // If html is given as wrapper, wrap may contain text elements\n    let elInsertLocation: Element | undefined;\n\n    for (let i = 0; i < wrap.length; i++) {\n      if (wrap[i].type === ElementType.Tag) {\n        elInsertLocation = wrap[i] as Element;\n      }\n    }\n\n    let j = 0;\n\n    /*\n     * Find the deepest child. Only consider the first tag child of each node\n     * (ignore text); stop if no children are found.\n     */\n    while (elInsertLocation && j < elInsertLocation.children.length) {\n      const child = elInsertLocation.children[j];\n      if (child.type === ElementType.Tag) {\n        elInsertLocation = child;\n        j = 0;\n      } else {\n        j++;\n      }\n    }\n\n    if (elInsertLocation) this._make(elInsertLocation).append(this);\n  }\n  return this;\n}\n\n/**\n * Insert content next to each element in the set of matched elements.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * $('.apple').after('<li class=\"plum\">Plum</li>');\n * $.html();\n * //=>  <ul id=\"fruits\">\n * //      <li class=\"apple\">Apple</li>\n * //      <li class=\"plum\">Plum</li>\n * //      <li class=\"orange\">Orange</li>\n * //      <li class=\"pear\">Pear</li>\n * //    </ul>\n * ```\n *\n * @param elems - HTML string, DOM element, array of DOM elements or Cheerio to\n *   insert after each element in the set of matched elements.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/after/}\n */\nexport function after<T extends AnyNode>(\n  this: Cheerio<T>,\n  ...elems:\n    | [(this: AnyNode, i: number, html: string) => BasicAcceptedElems<AnyNode>]\n    | BasicAcceptedElems<AnyNode>[]\n): Cheerio<T> {\n  const lastIdx = this.length - 1;\n\n  return domEach(this, (el, i) => {\n    if (!hasChildren(el) || !el.parent) {\n      return;\n    }\n\n    const siblings: AnyNode[] = el.parent.children;\n    const index = siblings.indexOf(el);\n\n    // If not found, move on\n    /* istanbul ignore next */\n    if (index === -1) return;\n\n    const domSrc =\n      typeof elems[0] === 'function'\n        ? elems[0].call(el, i, this._render(el.children))\n        : (elems as BasicAcceptedElems<AnyNode>[]);\n\n    const dom = this._makeDomArray(domSrc, i < lastIdx);\n\n    // Add element after `this` element\n    uniqueSplice(siblings, index + 1, 0, dom, el.parent);\n  });\n}\n\n/**\n * Insert every element in the set of matched elements after the target.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * $('<li class=\"plum\">Plum</li>').insertAfter('.apple');\n * $.html();\n * //=>  <ul id=\"fruits\">\n * //      <li class=\"apple\">Apple</li>\n * //      <li class=\"plum\">Plum</li>\n * //      <li class=\"orange\">Orange</li>\n * //      <li class=\"pear\">Pear</li>\n * //    </ul>\n * ```\n *\n * @param target - Element to insert elements after.\n * @returns The set of newly inserted elements.\n * @see {@link https://api.jquery.com/insertAfter/}\n */\nexport function insertAfter<T extends AnyNode>(\n  this: Cheerio<T>,\n  target: BasicAcceptedElems<AnyNode>,\n): Cheerio<T> {\n  if (typeof target === 'string') {\n    target = this._make<AnyNode>(target);\n  }\n\n  this.remove();\n\n  const clones: T[] = [];\n\n  for (const el of this._makeDomArray(target)) {\n    const clonedSelf = this.clone().toArray();\n    const { parent } = el;\n    if (!parent) {\n      continue;\n    }\n\n    const siblings: AnyNode[] = parent.children;\n    const index = siblings.indexOf(el);\n\n    // If not found, move on\n    /* istanbul ignore next */\n    if (index === -1) continue;\n\n    // Add cloned `this` element(s) after target element\n    uniqueSplice(siblings, index + 1, 0, clonedSelf, parent);\n    clones.push(...clonedSelf);\n  }\n\n  return this._make(clones);\n}\n\n/**\n * Insert content previous to each element in the set of matched elements.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * $('.apple').before('<li class=\"plum\">Plum</li>');\n * $.html();\n * //=>  <ul id=\"fruits\">\n * //      <li class=\"plum\">Plum</li>\n * //      <li class=\"apple\">Apple</li>\n * //      <li class=\"orange\">Orange</li>\n * //      <li class=\"pear\">Pear</li>\n * //    </ul>\n * ```\n *\n * @param elems - HTML string, DOM element, array of DOM elements or Cheerio to\n *   insert before each element in the set of matched elements.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/before/}\n */\nexport function before<T extends AnyNode>(\n  this: Cheerio<T>,\n  ...elems:\n    | [(this: AnyNode, i: number, html: string) => BasicAcceptedElems<AnyNode>]\n    | BasicAcceptedElems<AnyNode>[]\n): Cheerio<T> {\n  const lastIdx = this.length - 1;\n\n  return domEach(this, (el, i) => {\n    if (!hasChildren(el) || !el.parent) {\n      return;\n    }\n\n    const siblings: AnyNode[] = el.parent.children;\n    const index = siblings.indexOf(el);\n\n    // If not found, move on\n    /* istanbul ignore next */\n    if (index === -1) return;\n\n    const domSrc =\n      typeof elems[0] === 'function'\n        ? elems[0].call(el, i, this._render(el.children))\n        : (elems as BasicAcceptedElems<AnyNode>[]);\n\n    const dom = this._makeDomArray(domSrc, i < lastIdx);\n\n    // Add element before `el` element\n    uniqueSplice(siblings, index, 0, dom, el.parent);\n  });\n}\n\n/**\n * Insert every element in the set of matched elements before the target.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * $('<li class=\"plum\">Plum</li>').insertBefore('.apple');\n * $.html();\n * //=>  <ul id=\"fruits\">\n * //      <li class=\"plum\">Plum</li>\n * //      <li class=\"apple\">Apple</li>\n * //      <li class=\"orange\">Orange</li>\n * //      <li class=\"pear\">Pear</li>\n * //    </ul>\n * ```\n *\n * @param target - Element to insert elements before.\n * @returns The set of newly inserted elements.\n * @see {@link https://api.jquery.com/insertBefore/}\n */\nexport function insertBefore<T extends AnyNode>(\n  this: Cheerio<T>,\n  target: BasicAcceptedElems<AnyNode>,\n): Cheerio<T> {\n  const targetArr = this._make<AnyNode>(target);\n\n  this.remove();\n\n  const clones: T[] = [];\n\n  domEach(targetArr, (el) => {\n    const clonedSelf = this.clone().toArray();\n    const { parent } = el;\n    if (!parent) {\n      return;\n    }\n\n    const siblings: AnyNode[] = parent.children;\n    const index = siblings.indexOf(el);\n\n    // If not found, move on\n    /* istanbul ignore next */\n    if (index === -1) return;\n\n    // Add cloned `this` element(s) after target element\n    uniqueSplice(siblings, index, 0, clonedSelf, parent);\n    clones.push(...clonedSelf);\n  });\n\n  return this._make(clones);\n}\n\n/**\n * Removes the set of matched elements from the DOM and all their children.\n * `selector` filters the set of matched elements to be removed.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * $('.pear').remove();\n * $.html();\n * //=>  <ul id=\"fruits\">\n * //      <li class=\"apple\">Apple</li>\n * //      <li class=\"orange\">Orange</li>\n * //    </ul>\n * ```\n *\n * @param selector - Optional selector for elements to remove.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/remove/}\n */\nexport function remove<T extends AnyNode>(\n  this: Cheerio<T>,\n  selector?: string,\n): Cheerio<T> {\n  // Filter if we have selector\n  const elems = selector ? this.filter(selector) : this;\n\n  domEach(elems, (el) => {\n    removeElement(el);\n    el.prev = el.next = el.parent = null;\n  });\n\n  return this;\n}\n\n/**\n * Replaces matched elements with `content`.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * const plum = $('<li class=\"plum\">Plum</li>');\n * $('.pear').replaceWith(plum);\n * $.html();\n * //=> <ul id=\"fruits\">\n * //     <li class=\"apple\">Apple</li>\n * //     <li class=\"orange\">Orange</li>\n * //     <li class=\"plum\">Plum</li>\n * //   </ul>\n * ```\n *\n * @param content - Replacement for matched elements.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/replaceWith/}\n */\nexport function replaceWith<T extends AnyNode>(\n  this: Cheerio<T>,\n  content: AcceptedElems<AnyNode>,\n): Cheerio<T> {\n  return domEach(this, (el, i) => {\n    const { parent } = el;\n    if (!parent) {\n      return;\n    }\n\n    const siblings: AnyNode[] = parent.children;\n    const cont =\n      typeof content === 'function' ? content.call(el, i, el) : content;\n    const dom = this._makeDomArray(cont);\n\n    /*\n     * In the case that `dom` contains nodes that already exist in other\n     * structures, ensure those nodes are properly removed.\n     */\n    updateDOM(dom, null);\n\n    const index = siblings.indexOf(el);\n\n    // Completely remove old element\n    uniqueSplice(siblings, index, 1, dom, parent);\n\n    if (!dom.includes(el)) {\n      el.parent = el.prev = el.next = null;\n    }\n  });\n}\n\n/**\n * Removes all children from each item in the selection. Text nodes and comment\n * nodes are left as is.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * $('ul').empty();\n * $.html();\n * //=>  <ul id=\"fruits\"></ul>\n * ```\n *\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/empty/}\n */\nexport function empty<T extends AnyNode>(this: Cheerio<T>): Cheerio<T> {\n  return domEach(this, (el) => {\n    if (!hasChildren(el)) return;\n    for (const child of el.children) {\n      child.next = child.prev = child.parent = null;\n    }\n\n    el.children.length = 0;\n  });\n}\n\n/**\n * Gets an HTML content string from the first selected element.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * $('.orange').html();\n * //=> Orange\n *\n * $('#fruits').html('<li class=\"mango\">Mango</li>').html();\n * //=> <li class=\"mango\">Mango</li>\n * ```\n *\n * @returns The HTML content string.\n * @see {@link https://api.jquery.com/html/}\n */\nexport function html<T extends AnyNode>(this: Cheerio<T>): string | null;\n/**\n * Replaces each selected element's content with the specified content.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * $('.orange').html('<li class=\"mango\">Mango</li>').html();\n * //=> <li class=\"mango\">Mango</li>\n * ```\n *\n * @param str - The content to replace selection's contents with.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/html/}\n */\nexport function html<T extends AnyNode>(\n  this: Cheerio<T>,\n  str: string | Cheerio<T>,\n): Cheerio<T>;\nexport function html<T extends AnyNode>(\n  this: Cheerio<T>,\n  str?: string | Cheerio<AnyNode>,\n): Cheerio<T> | string | null {\n  if (str === undefined) {\n    const el = this[0];\n    if (!el || !hasChildren(el)) return null;\n    return this._render(el.children);\n  }\n\n  return domEach(this, (el) => {\n    if (!hasChildren(el)) return;\n    for (const child of el.children) {\n      child.next = child.prev = child.parent = null;\n    }\n\n    const content = isCheerio(str)\n      ? str.toArray()\n      : this._parse(`${str}`, this.options, false, el).children;\n\n    updateDOM(content, el);\n  });\n}\n\n/**\n * Turns the collection to a string. Alias for `.html()`.\n *\n * @category Manipulation\n * @returns The rendered document.\n */\nexport function toString<T extends AnyNode>(this: Cheerio<T>): string {\n  return this._render(this);\n}\n\n/**\n * Get the combined text contents of each element in the set of matched\n * elements, including their descendants.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * $('.orange').text();\n * //=> Orange\n *\n * $('ul').text();\n * //=>  Apple\n * //    Orange\n * //    Pear\n * ```\n *\n * @returns The text contents of the collection.\n * @see {@link https://api.jquery.com/text/}\n */\nexport function text<T extends AnyNode>(this: Cheerio<T>): string;\n/**\n * Set the content of each element in the set of matched elements to the\n * specified text.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * $('.orange').text('Orange');\n * //=> <div class=\"orange\">Orange</div>\n * ```\n *\n * @param str - The text to set as the content of each matched element.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/text/}\n */\nexport function text<T extends AnyNode>(\n  this: Cheerio<T>,\n  str: string | ((this: AnyNode, i: number, text: string) => string),\n): Cheerio<T>;\nexport function text<T extends AnyNode>(\n  this: Cheerio<T>,\n  str?: string | ((this: AnyNode, i: number, text: string) => string),\n): Cheerio<T> | string {\n  // If `str` is undefined, act as a \"getter\"\n  if (str === undefined) {\n    return staticText(this);\n  }\n  if (typeof str === 'function') {\n    // Function support\n    return domEach(this, (el, i) =>\n      this._make(el).text(str.call(el, i, staticText([el]))),\n    );\n  }\n\n  // Append text node to each selected elements\n  return domEach(this, (el) => {\n    if (!hasChildren(el)) return;\n    for (const child of el.children) {\n      child.next = child.prev = child.parent = null;\n    }\n\n    const textNode = new Text(`${str}`);\n\n    updateDOM(textNode, el);\n  });\n}\n\n/**\n * Clone the cheerio object.\n *\n * @category Manipulation\n * @example\n *\n * ```js\n * const moreFruit = $('#fruits').clone();\n * ```\n *\n * @returns The cloned object.\n * @see {@link https://api.jquery.com/clone/}\n */\nexport function clone<T extends AnyNode>(this: Cheerio<T>): Cheerio<T> {\n  const clone = Array.prototype.map.call(\n    this.get(),\n    (el) => cloneNode(el, true) as T,\n  ) as T[];\n\n  // Add a root node around the cloned nodes\n  const root = new Document(clone);\n  for (const node of clone) {\n    node.parent = root;\n  }\n\n  return this._make(clone);\n}\n", "import { removeElement } from 'domutils';\nimport {\n  type AnyNode,\n  Document,\n  type ParentNode,\n  isDocument as checkIsDocument,\n} from 'domhandler';\nimport type { InternalOptions } from './options.js';\n\n/**\n * Get the parse function with options.\n *\n * @param parser - The parser function.\n * @returns The parse function with options.\n */\nexport function getParse(\n  parser: (\n    content: string,\n    options: InternalOptions,\n    isDocument: boolean,\n    context: ParentNode | null,\n  ) => Document,\n) {\n  /**\n   * Parse a HTML string or a node.\n   *\n   * @param content - The HTML string or node.\n   * @param options - The parser options.\n   * @param isDocument - If `content` is a document.\n   * @param context - The context node in the DOM tree.\n   * @returns The parsed document node.\n   */\n  return function parse(\n    content: string | Document | AnyNode | AnyNode[] | Buffer,\n    options: InternalOptions,\n    isDocument: boolean,\n    context: ParentNode | null,\n  ): Document {\n    if (typeof Buffer !== 'undefined' && Buffer.isBuffer(content)) {\n      content = content.toString();\n    }\n\n    if (typeof content === 'string') {\n      return parser(content, options, isDocument, context);\n    }\n\n    const doc = content as AnyNode | AnyNode[] | Document;\n\n    if (!Array.isArray(doc) && checkIsDocument(doc)) {\n      // If `doc` is already a root, just return it\n      return doc;\n    }\n\n    // Add content to new root element\n    const root = new Document([]);\n\n    // Update the DOM using the root\n    update(doc, root);\n\n    return root;\n  };\n}\n\n/**\n * Update the dom structure, for one changed layer.\n *\n * @param newChilds - The new children.\n * @param parent - The new parent.\n * @returns The parent node.\n */\nexport function update(\n  newChilds: AnyNode[] | AnyNode,\n  parent: ParentNode | null,\n): ParentNode | null {\n  // Normalize\n  const arr = Array.isArray(newChilds) ? newChilds : [newChilds];\n\n  // Update parent\n  if (parent) {\n    parent.children = arr;\n  } else {\n    parent = null;\n  }\n\n  // Update neighbors\n  for (let i = 0; i < arr.length; i++) {\n    const node = arr[i];\n\n    // Cleanly remove existing nodes from their previous structures.\n    if (node.parent && node.parent.children !== arr) {\n      removeElement(node);\n    }\n\n    if (parent) {\n      node.prev = arr[i - 1] || null;\n      node.next = arr[i + 1] || null;\n    } else {\n      node.prev = node.next = null;\n    }\n\n    node.parent = parent;\n  }\n\n  return parent;\n}\n", "import { domEach } from '../utils.js';\nimport { isTag, type Element, type AnyNode } from 'domhandler';\nimport type { Cheerio } from '../cheerio.js';\n\n/**\n * Get the value of a style property for the first element in the set of matched\n * elements.\n *\n * @category CSS\n * @param names - Optionally the names of the properties of interest.\n * @returns A map of all of the style properties.\n * @see {@link https://api.jquery.com/css/}\n */\nexport function css<T extends AnyNode>(\n  this: Cheerio<T>,\n  names?: string[],\n): Record<string, string> | undefined;\n/**\n * Get the value of a style property for the first element in the set of matched\n * elements.\n *\n * @category CSS\n * @param name - The name of the property.\n * @returns The property value for the given name.\n * @see {@link https://api.jquery.com/css/}\n */\nexport function css<T extends AnyNode>(\n  this: Cheerio<T>,\n  name: string,\n): string | undefined;\n/**\n * Set one CSS property for every matched element.\n *\n * @category CSS\n * @param prop - The name of the property.\n * @param val - The new value.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/css/}\n */\nexport function css<T extends AnyNode>(\n  this: Cheerio<T>,\n  prop: string,\n  val:\n    | string\n    | ((this: Element, i: number, style: string) => string | undefined),\n): Cheerio<T>;\n/**\n * Set multiple CSS properties for every matched element.\n *\n * @category CSS\n * @param map - A map of property names and values.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/css/}\n */\nexport function css<T extends AnyNode>(\n  this: Cheerio<T>,\n  map: Record<string, string>,\n): Cheerio<T>;\n/**\n * Set multiple CSS properties for every matched element.\n *\n * @category CSS\n * @param prop - The names of the properties.\n * @param val - The new values.\n * @returns The instance itself.\n * @see {@link https://api.jquery.com/css/}\n */\nexport function css<T extends AnyNode>(\n  this: Cheerio<T>,\n  prop?: string | string[] | Record<string, string>,\n  val?:\n    | string\n    | ((this: Element, i: number, style: string) => string | undefined),\n): Cheerio<T> | Record<string, string> | string | undefined {\n  if (\n    (prop != null && val != null) ||\n    // When `prop` is a \"plain\" object\n    (typeof prop === 'object' && !Array.isArray(prop))\n  ) {\n    return domEach(this, (el, i) => {\n      if (isTag(el)) {\n        // `prop` can't be an array here anymore.\n        setCss(el, prop as string, val, i);\n      }\n    });\n  }\n\n  if (this.length === 0) {\n    return undefined;\n  }\n\n  return getCss(this[0], prop as string);\n}\n\n/**\n * Set styles of all elements.\n *\n * @private\n * @param el - Element to set style of.\n * @param prop - Name of property.\n * @param value - Value to set property to.\n * @param idx - Optional index within the selection.\n */\nfunction setCss(\n  el: Element,\n  prop: string | Record<string, string>,\n  value:\n    | string\n    | ((this: Element, i: number, style: string) => string | undefined)\n    | undefined,\n  idx: number,\n) {\n  if (typeof prop === 'string') {\n    const styles = getCss(el);\n\n    const val =\n      typeof value === 'function' ? value.call(el, idx, styles[prop]) : value;\n\n    if (val === '') {\n      delete styles[prop];\n    } else if (val != null) {\n      styles[prop] = val;\n    }\n\n    el.attribs['style'] = stringify(styles);\n  } else if (typeof prop === 'object') {\n    const keys = Object.keys(prop);\n    for (let i = 0; i < keys.length; i++) {\n      const k = keys[i];\n      setCss(el, k, prop[k], i);\n    }\n  }\n}\n\n/**\n * Get the parsed styles of the first element.\n *\n * @private\n * @category CSS\n * @param el - Element to get styles from.\n * @param props - Optionally the names of the properties of interest.\n * @returns The parsed styles.\n */\nfunction getCss(el: AnyNode, props?: string[]): Record<string, string>;\n/**\n * Get a property from the parsed styles of the first element.\n *\n * @private\n * @category CSS\n * @param el - Element to get styles from.\n * @param prop - Name of the prop.\n * @returns The value of the property.\n */\nfunction getCss(el: AnyNode, prop: string): string | undefined;\nfunction getCss(\n  el: AnyNode,\n  prop?: string | string[],\n): Record<string, string> | string | undefined {\n  if (!el || !isTag(el)) return;\n\n  const styles = parse(el.attribs['style']);\n  if (typeof prop === 'string') {\n    return styles[prop];\n  }\n  if (Array.isArray(prop)) {\n    const newStyles: Record<string, string> = {};\n    for (const item of prop) {\n      if (styles[item] != null) {\n        newStyles[item] = styles[item];\n      }\n    }\n    return newStyles;\n  }\n  return styles;\n}\n\n/**\n * Stringify `obj` to styles.\n *\n * @private\n * @category CSS\n * @param obj - Object to stringify.\n * @returns The serialized styles.\n */\nfunction stringify(obj: Record<string, string>): string {\n  return Object.keys(obj).reduce(\n    (str, prop) => `${str}${str ? ' ' : ''}${prop}: ${obj[prop]};`,\n    '',\n  );\n}\n\n/**\n * Parse `styles`.\n *\n * @private\n * @category CSS\n * @param styles - Styles to be parsed.\n * @returns The parsed styles.\n */\nfunction parse(styles: string): Record<string, string> {\n  styles = (styles || '').trim();\n\n  if (!styles) return {};\n\n  const obj: Record<string, string> = {};\n\n  let key: string | undefined;\n\n  for (const str of styles.split(';')) {\n    const n = str.indexOf(':');\n    // If there is no :, or if it is the first/last character, add to the previous item's value\n    if (n < 1 || n === str.length - 1) {\n      const trimmed = str.trimEnd();\n      if (trimmed.length > 0 && key !== undefined) {\n        obj[key] += `;${trimmed}`;\n      }\n    } else {\n      key = str.slice(0, n).trim();\n      obj[key] = str.slice(n + 1).trim();\n    }\n  }\n\n  return obj;\n}\n", "import { isTag, type AnyNode } from 'domhandler';\nimport type { Cheerio } from '../cheerio.js';\n\n/*\n * https://github.com/jquery/jquery/blob/2.1.3/src/manipulation/var/rcheckableType.js\n * https://github.com/jquery/jquery/blob/2.1.3/src/serialize.js\n */\nconst submittableSelector = 'input,select,textarea,keygen';\nconst r20 = /%20/g;\nconst rCRLF = /\\r?\\n/g;\n\n/**\n * Encode a set of form elements as a string for submission.\n *\n * @category Forms\n * @example\n *\n * ```js\n * $('<form><input name=\"foo\" value=\"bar\" /></form>').serialize();\n * //=> 'foo=bar'\n * ```\n *\n * @returns The serialized form.\n * @see {@link https://api.jquery.com/serialize/}\n */\nexport function serialize<T extends AnyNode>(this: Cheerio<T>): string {\n  // Convert form elements into name/value objects\n  const arr = this.serializeArray();\n\n  // Serialize each element into a key/value string\n  const retArr = arr.map(\n    (data) =>\n      `${encodeURIComponent(data.name)}=${encodeURIComponent(data.value)}`,\n  );\n\n  // Return the resulting serialization\n  return retArr.join('&').replace(r20, '+');\n}\n\n/**\n * Encode a set of form elements as an array of names and values.\n *\n * @category Forms\n * @example\n *\n * ```js\n * $('<form><input name=\"foo\" value=\"bar\" /></form>').serializeArray();\n * //=> [ { name: 'foo', value: 'bar' } ]\n * ```\n *\n * @returns The serialized form.\n * @see {@link https://api.jquery.com/serializeArray/}\n */\nexport function serializeArray<T extends AnyNode>(\n  this: Cheerio<T>,\n): {\n  name: string;\n  value: string;\n}[] {\n  // Resolve all form elements from either forms or collections of form elements\n  return this.map((_, elem) => {\n    const $elem = this._make(elem);\n    if (isTag(elem) && elem.name === 'form') {\n      return $elem.find(submittableSelector).toArray();\n    }\n    return $elem.filter(submittableSelector).toArray();\n  })\n    .filter(\n      // Verify elements have a name (`attr.name`) and are not disabled (`:enabled`)\n      '[name!=\"\"]:enabled' +\n        // And cannot be clicked (`[type=submit]`) or are used in `x-www-form-urlencoded` (`[type=file]`)\n        ':not(:submit, :button, :image, :reset, :file)' +\n        // And are either checked/don't have a checkable state\n        ':matches([checked], :not(:checkbox, :radio))',\n      // Convert each of the elements to its value(s)\n    )\n    .map<\n      AnyNode,\n      {\n        name: string;\n        value: string;\n      }\n    >((_, elem) => {\n      const $elem = this._make(elem);\n      const name = $elem.attr('name')!; // We have filtered for elements with a name before.\n      // If there is no value set (e.g. `undefined`, `null`), then default value to empty\n      const value = $elem.val() ?? '';\n\n      // If we have an array of values (e.g. `<select multiple>`), return an array of key/value pairs\n      if (Array.isArray(value)) {\n        return value.map((val) =>\n          /*\n           * We trim replace any line endings (e.g. `\\r` or `\\r\\n` with `\\r\\n`) to guarantee consistency across platforms\n           * These can occur inside of `<textarea>'s`\n           */\n          ({ name, value: val.replace(rCRLF, '\\r\\n') }),\n        );\n      }\n      // Otherwise (e.g. `<input type=\"text\">`, return only one key/value pair\n      return { name, value: value.replace(rCRLF, '\\r\\n') };\n    })\n    .toArray();\n}\n", "import type { AnyNode, Element } from 'domhandler';\nimport type { Cheerio } from '../cheerio.js';\nimport type { prop } from './attributes.js';\n\ntype ExtractDescriptorFn = (\n  el: Element,\n  key: string,\n  // TODO: This could be typed with ExtractedMap\n  obj: Record<string, unknown>,\n) => unknown;\n\ninterface ExtractDescriptor {\n  selector: string;\n  value?: string | ExtractDescriptorFn | ExtractMap;\n}\n\ntype ExtractValue = string | ExtractDescriptor | [string | ExtractDescriptor];\n\nexport type ExtractMap = Record<string, ExtractValue>;\n\ntype ExtractedValue<V extends ExtractValue> = V extends [\n  string | ExtractDescriptor,\n]\n  ? NonNullable<ExtractedValue<V[0]>>[]\n  : V extends string\n    ? string | undefined\n    : V extends ExtractDescriptor\n      ? V['value'] extends infer U\n        ? U extends ExtractMap\n          ? ExtractedMap<U> | undefined\n          : U extends ExtractDescriptorFn\n            ? ReturnType<U> | undefined\n            : ReturnType<typeof prop> | undefined\n        : never\n      : never;\n\nexport type ExtractedMap<M extends ExtractMap> = {\n  [key in keyof M]: ExtractedValue<M[key]>;\n};\n\nfunction getExtractDescr(\n  descr: string | ExtractDescriptor,\n): Required<ExtractDescriptor> {\n  if (typeof descr === 'string') {\n    return { selector: descr, value: 'textContent' };\n  }\n\n  return {\n    selector: descr.selector,\n    value: descr.value ?? 'textContent',\n  };\n}\n\n/**\n * Extract multiple values from a document, and store them in an object.\n *\n * @param map - An object containing key-value pairs. The keys are the names of\n *   the properties to be created on the object, and the values are the\n *   selectors to be used to extract the values.\n * @returns An object containing the extracted values.\n */\nexport function extract<M extends ExtractMap, T extends AnyNode>(\n  this: Cheerio<T>,\n  map: M,\n): ExtractedMap<M> {\n  const ret: Record<string, unknown> = {};\n\n  for (const key in map) {\n    const descr = map[key];\n    const isArray = Array.isArray(descr);\n\n    const { selector, value } = getExtractDescr(isArray ? descr[0] : descr);\n\n    const fn: ExtractDescriptorFn =\n      typeof value === 'function'\n        ? value\n        : typeof value === 'string'\n          ? (el: Element) => this._make(el).prop(value)\n          : (el: Element) => this._make(el).extract(value);\n\n    if (isArray) {\n      ret[key] = this._findBySelector(selector, Number.POSITIVE_INFINITY)\n        .map((_, el) => fn(el, key, ret))\n        .get();\n    } else {\n      const $ = this._findBySelector(selector, 1);\n      ret[key] = $.length > 0 ? fn($[0], key, ret) : undefined;\n    }\n  }\n\n  return ret as ExtractedMap<M>;\n}\n", "/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\nimport type { InternalOptions } from './options.js';\nimport type { AnyNode, Document, ParentNode } from 'domhandler';\nimport type { BasicAcceptedElems } from './types.js';\n\nimport * as Attributes from './api/attributes.js';\nimport * as Traversing from './api/traversing.js';\nimport * as Manipulation from './api/manipulation.js';\nimport * as Css from './api/css.js';\nimport * as Forms from './api/forms.js';\nimport * as Extract from './api/extract.js';\n\ntype MethodsType = typeof Attributes &\n  typeof Traversing &\n  typeof Manipulation &\n  typeof Css &\n  typeof Forms &\n  typeof Extract;\n\n/**\n * The cheerio class is the central class of the library. It wraps a set of\n * elements and provides an API for traversing, modifying, and interacting with\n * the set.\n *\n * Loading a document will return the Cheerio class bound to the root element of\n * the document. The class will be instantiated when querying the document (when\n * calling `$('selector')`).\n *\n * @example This is the HTML markup we will be using in all of the API examples:\n *\n * ```html\n * <ul id=\"fruits\">\n *   <li class=\"apple\">Apple</li>\n *   <li class=\"orange\">Orange</li>\n *   <li class=\"pear\">Pear</li>\n * </ul>\n * ```\n */\nexport abstract class Cheerio<T> implements ArrayLike<T> {\n  length = 0;\n  [index: number]: T;\n\n  options: InternalOptions;\n  /**\n   * The root of the document. Can be set by using the `root` argument of the\n   * constructor.\n   *\n   * @private\n   */\n  _root: Cheerio<Document> | null;\n\n  /**\n   * Instance of cheerio. Methods are specified in the modules. Usage of this\n   * constructor is not recommended. Please use `$.load` instead.\n   *\n   * @private\n   * @param elements - The new selection.\n   * @param root - Sets the root node.\n   * @param options - Options for the instance.\n   */\n  constructor(\n    elements: ArrayLike<T> | undefined,\n    root: Cheerio<Document> | null,\n    options: InternalOptions,\n  ) {\n    this.options = options;\n    this._root = root;\n\n    if (elements) {\n      for (let idx = 0; idx < elements.length; idx++) {\n        this[idx] = elements[idx];\n      }\n      this.length = elements.length;\n    }\n  }\n\n  prevObject: Cheerio<any> | undefined;\n  /**\n   * Make a cheerio object.\n   *\n   * @private\n   * @param dom - The contents of the new object.\n   * @param context - The context of the new object.\n   * @returns The new cheerio object.\n   */\n  abstract _make<T>(\n    dom: ArrayLike<T> | T | string,\n    context?: BasicAcceptedElems<AnyNode>,\n  ): Cheerio<T>;\n\n  /**\n   * Parses some content.\n   *\n   * @private\n   * @param content - Content to parse.\n   * @param options - Options for parsing.\n   * @param isDocument - Allows parser to be switched to fragment mode.\n   * @returns A document containing the `content`.\n   */\n  abstract _parse(\n    content: string | Document | AnyNode | AnyNode[] | Buffer,\n    options: InternalOptions,\n    isDocument: boolean,\n    context: ParentNode | null,\n  ): Document;\n\n  /**\n   * Render an element or a set of elements.\n   *\n   * @private\n   * @param dom - DOM to render.\n   * @returns The rendered DOM.\n   */\n  abstract _render(dom: AnyNode | ArrayLike<AnyNode>): string;\n}\n\nexport interface Cheerio<T> extends MethodsType, Iterable<T> {\n  cheerio: '[cheerio object]';\n\n  splice: typeof Array.prototype.splice;\n}\n\n/** Set a signature of the object. */\nCheerio.prototype.cheerio = '[cheerio object]';\n\n/*\n * Make cheerio an array-like object\n */\nCheerio.prototype.splice = Array.prototype.splice;\n\n// Support for (const element of $(...)) iteration:\nCheerio.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];\n\n// Plug in the API\nObject.assign(\n  Cheerio.prototype,\n  Attributes,\n  Traversing,\n  Manipulation,\n  Css,\n  Forms,\n  Extract,\n);\n", "import {\n  type CheerioOptions,\n  type InternalOptions,\n  flattenOptions,\n} from './options.js';\nimport * as staticMethods from './static.js';\nimport { Cheerio } from './cheerio.js';\nimport { isHtml, isCheerio } from './utils.js';\nimport type { AnyNode, Document, Element, ParentNode } from 'domhandler';\nimport type { SelectorType, BasicAcceptedElems } from './types.js';\nimport { ElementType } from 'htmlparser2';\n\ntype StaticType = typeof staticMethods;\n\n/**\n * A querying function, bound to a document created from the provided markup.\n *\n * Also provides several helper methods for dealing with the document as a\n * whole.\n */\nexport interface CheerioAPI extends StaticType {\n  /**\n   * This selector method is the starting point for traversing and manipulating\n   * the document. Like jQuery, it's the primary method for selecting elements\n   * in the document.\n   *\n   * `selector` searches within the `context` scope, which searches within the\n   * `root` scope.\n   *\n   * @example\n   *\n   * ```js\n   * $('ul .pear').attr('class');\n   * //=> pear\n   *\n   * $('li[class=orange]').html();\n   * //=> Orange\n   *\n   * $('.apple', '#fruits').text();\n   * //=> Apple\n   * ```\n   *\n   * Optionally, you can also load HTML by passing the string as the selector:\n   *\n   * ```js\n   * $('<ul id=\"fruits\">...</ul>');\n   * ```\n   *\n   * Or the context:\n   *\n   * ```js\n   * $('ul', '<ul id=\"fruits\">...</ul>');\n   * ```\n   *\n   * Or as the root:\n   *\n   * ```js\n   * $('li', 'ul', '<ul id=\"fruits\">...</ul>');\n   * ```\n   *\n   * @param selector - Either a selector to look for within the document, or the\n   *   contents of a new Cheerio instance.\n   * @param context - Either a selector to look for within the root, or the\n   *   contents of the document to query.\n   * @param root - Optional HTML document string.\n   */\n  <T extends AnyNode, S extends string>(\n    selector?: S | BasicAcceptedElems<T>,\n    context?: BasicAcceptedElems<AnyNode> | null,\n    root?: BasicAcceptedElems<Document>,\n    options?: CheerioOptions,\n  ): Cheerio<S extends SelectorType ? Element : T>;\n\n  /**\n   * The root the document was originally loaded with.\n   *\n   * @private\n   */\n  _root: Document;\n\n  /**\n   * The options the document was originally loaded with.\n   *\n   * @private\n   */\n  _options: InternalOptions;\n\n  /** Mimic jQuery's prototype alias for plugin authors. */\n  fn: typeof Cheerio.prototype;\n\n  /**\n   * The `.load` static method defined on the \"loaded\" Cheerio factory function\n   * is deprecated. Users are encouraged to instead use the `load` function\n   * exported by the Cheerio module.\n   *\n   * @deprecated Use the `load` function exported by the Cheerio module.\n   * @category Deprecated\n   * @example\n   *\n   * ```js\n   * const $ = cheerio.load('<h1>Hello, <span>world</span>.</h1>');\n   * ```\n   */\n  load: ReturnType<typeof getLoad>;\n}\n\nexport function getLoad(\n  parse: Cheerio<AnyNode>['_parse'],\n  render: (\n    dom: AnyNode | ArrayLike<AnyNode>,\n    options: InternalOptions,\n  ) => string,\n) {\n  /**\n   * Create a querying function, bound to a document created from the provided\n   * markup.\n   *\n   * Note that similar to web browser contexts, this operation may introduce\n   * `<html>`, `<head>`, and `<body>` elements; set `isDocument` to `false` to\n   * switch to fragment mode and disable this.\n   *\n   * @param content - Markup to be loaded.\n   * @param options - Options for the created instance.\n   * @param isDocument - Allows parser to be switched to fragment mode.\n   * @returns The loaded document.\n   * @see {@link https://cheerio.js.org/docs/basics/loading#load} for additional usage information.\n   */\n  return function load(\n    content: string | AnyNode | AnyNode[] | Buffer,\n    options?: CheerioOptions | null,\n    isDocument = true,\n  ): CheerioAPI {\n    if ((content as string | null) == null) {\n      throw new Error('cheerio.load() expects a string');\n    }\n\n    const internalOpts = flattenOptions(options);\n    const initialRoot = parse(content, internalOpts, isDocument, null);\n\n    /**\n     * Create an extended class here, so that extensions only live on one\n     * instance.\n     */\n    class LoadedCheerio<T> extends Cheerio<T> {\n      _make<T>(\n        selector?: ArrayLike<T> | T | string,\n        context?: BasicAcceptedElems<AnyNode> | null,\n      ): Cheerio<T> {\n        const cheerio = initialize(selector, context);\n        cheerio.prevObject = this;\n\n        return cheerio;\n      }\n\n      _parse(\n        content: string | Document | AnyNode | AnyNode[] | Buffer,\n        options: InternalOptions,\n        isDocument: boolean,\n        context: ParentNode | null,\n      ) {\n        return parse(content, options, isDocument, context);\n      }\n\n      _render(dom: AnyNode | ArrayLike<AnyNode>): string {\n        return render(dom, this.options);\n      }\n    }\n\n    function initialize<T = AnyNode, S extends string = string>(\n      selector?: ArrayLike<T> | T | S,\n      context?: BasicAcceptedElems<AnyNode> | null,\n      root: BasicAcceptedElems<Document> = initialRoot,\n      opts?: CheerioOptions,\n    ): Cheerio<S extends SelectorType ? Element : T> {\n      type Result = S extends SelectorType ? Element : T;\n\n      // $($)\n      if (selector && isCheerio<Result>(selector)) return selector;\n\n      const options = flattenOptions(opts, internalOpts);\n      const r =\n        typeof root === 'string'\n          ? [parse(root, options, false, null)]\n          : 'length' in root\n            ? root\n            : [root];\n      const rootInstance = isCheerio<Document>(r)\n        ? r\n        : new LoadedCheerio<Document>(r, null, options);\n      // Add a cyclic reference, so that calling methods on `_root` never fails.\n      rootInstance._root = rootInstance;\n\n      // $(), $(null), $(undefined), $(false)\n      if (!selector) {\n        return new LoadedCheerio<Result>(undefined, rootInstance, options);\n      }\n\n      const elements: AnyNode[] | undefined =\n        typeof selector === 'string' && isHtml(selector)\n          ? // $(<html>)\n            parse(selector, options, false, null).children\n          : isNode(selector)\n            ? // $(dom)\n              [selector]\n            : Array.isArray(selector)\n              ? // $([dom])\n                selector\n              : undefined;\n\n      const instance = new LoadedCheerio(elements, rootInstance, options);\n\n      if (elements) {\n        return instance as Cheerio<Result>;\n      }\n\n      if (typeof selector !== 'string') {\n        throw new TypeError('Unexpected type of selector');\n      }\n\n      // We know that our selector is a string now.\n      let search = selector;\n\n      const searchContext: Cheerio<AnyNode> | undefined = context\n        ? // If we don't have a context, maybe we have a root, from loading\n          typeof context === 'string'\n          ? isHtml(context)\n            ? // $('li', '<ul>...</ul>')\n              new LoadedCheerio<Document>(\n                [parse(context, options, false, null)],\n                rootInstance,\n                options,\n              )\n            : // $('li', 'ul')\n              ((search = `${context} ${search}` as S), rootInstance)\n          : isCheerio<AnyNode>(context)\n            ? // $('li', $)\n              context\n            : // $('li', node), $('li', [nodes])\n              new LoadedCheerio<AnyNode>(\n                Array.isArray(context) ? context : [context],\n                rootInstance,\n                options,\n              )\n        : rootInstance;\n\n      // If we still don't have a context, return\n      if (!searchContext) return instance as Cheerio<Result>;\n\n      /*\n       * #id, .class, tag\n       */\n      return searchContext.find(search) as Cheerio<Result>;\n    }\n\n    // Add in static methods & properties\n    Object.assign(initialize, staticMethods, {\n      load,\n      // `_root` and `_options` are used in static methods.\n      _root: initialRoot,\n      _options: internalOpts,\n      // Add `fn` for plugins\n      fn: LoadedCheerio.prototype,\n      // Add the prototype here to maintain `instanceof` behavior.\n      prototype: LoadedCheerio.prototype,\n    });\n\n    return initialize as CheerioAPI;\n  };\n}\n\nfunction isNode(obj: unknown): obj is AnyNode {\n  return (\n    // @ts-expect-error: TS doesn't know about the `name` property.\n    !!obj.name ||\n    // @ts-expect-error: TS doesn't know about the `type` property.\n    obj.type === ElementType.Root ||\n    // @ts-expect-error: TS doesn't know about the `type` property.\n    obj.type === ElementType.Text ||\n    // @ts-expect-error: TS doesn't know about the `type` property.\n    obj.type === ElementType.Comment\n  );\n}\n", "const UNDEFINED_CODE_POINTS = new Set([\n    65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214,\n    393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894,\n    720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574,\n    1048575, 1114110, 1114111,\n]);\nexport const REPLACEMENT_CHARACTER = '\\uFFFD';\nexport var CODE_POINTS;\n(function (CODE_POINTS) {\n    CODE_POINTS[CODE_POINTS[\"EOF\"] = -1] = \"EOF\";\n    CODE_POINTS[CODE_POINTS[\"NULL\"] = 0] = \"NULL\";\n    CODE_POINTS[CODE_POINTS[\"TABULATION\"] = 9] = \"TABULATION\";\n    CODE_POINTS[CODE_POINTS[\"CARRIAGE_RETURN\"] = 13] = \"CARRIAGE_RETURN\";\n    CODE_POINTS[CODE_POINTS[\"LINE_FEED\"] = 10] = \"LINE_FEED\";\n    CODE_POINTS[CODE_POINTS[\"FORM_FEED\"] = 12] = \"FORM_FEED\";\n    CODE_POINTS[CODE_POINTS[\"SPACE\"] = 32] = \"SPACE\";\n    CODE_POINTS[CODE_POINTS[\"EXCLAMATION_MARK\"] = 33] = \"EXCLAMATION_MARK\";\n    CODE_POINTS[CODE_POINTS[\"QUOTATION_MARK\"] = 34] = \"QUOTATION_MARK\";\n    CODE_POINTS[CODE_POINTS[\"AMPERSAND\"] = 38] = \"AMPERSAND\";\n    CODE_POINTS[CODE_POINTS[\"APOSTROPHE\"] = 39] = \"APOSTROPHE\";\n    CODE_POINTS[CODE_POINTS[\"HYPHEN_MINUS\"] = 45] = \"HYPHEN_MINUS\";\n    CODE_POINTS[CODE_POINTS[\"SOLIDUS\"] = 47] = \"SOLIDUS\";\n    CODE_POINTS[CODE_POINTS[\"DIGIT_0\"] = 48] = \"DIGIT_0\";\n    CODE_POINTS[CODE_POINTS[\"DIGIT_9\"] = 57] = \"DIGIT_9\";\n    CODE_POINTS[CODE_POINTS[\"SEMICOLON\"] = 59] = \"SEMICOLON\";\n    CODE_POINTS[CODE_POINTS[\"LESS_THAN_SIGN\"] = 60] = \"LESS_THAN_SIGN\";\n    CODE_POINTS[CODE_POINTS[\"EQUALS_SIGN\"] = 61] = \"EQUALS_SIGN\";\n    CODE_POINTS[CODE_POINTS[\"GREATER_THAN_SIGN\"] = 62] = \"GREATER_THAN_SIGN\";\n    CODE_POINTS[CODE_POINTS[\"QUESTION_MARK\"] = 63] = \"QUESTION_MARK\";\n    CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_A\"] = 65] = \"LATIN_CAPITAL_A\";\n    CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_Z\"] = 90] = \"LATIN_CAPITAL_Z\";\n    CODE_POINTS[CODE_POINTS[\"RIGHT_SQUARE_BRACKET\"] = 93] = \"RIGHT_SQUARE_BRACKET\";\n    CODE_POINTS[CODE_POINTS[\"GRAVE_ACCENT\"] = 96] = \"GRAVE_ACCENT\";\n    CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_A\"] = 97] = \"LATIN_SMALL_A\";\n    CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_Z\"] = 122] = \"LATIN_SMALL_Z\";\n})(CODE_POINTS || (CODE_POINTS = {}));\nexport const SEQUENCES = {\n    DASH_DASH: '--',\n    CDATA_START: '[CDATA[',\n    DOCTYPE: 'doctype',\n    SCRIPT: 'script',\n    PUBLIC: 'public',\n    SYSTEM: 'system',\n};\n//Surrogates\nexport function isSurrogate(cp) {\n    return cp >= 55296 && cp <= 57343;\n}\nexport function isSurrogatePair(cp) {\n    return cp >= 56320 && cp <= 57343;\n}\nexport function getSurrogatePairCodePoint(cp1, cp2) {\n    return (cp1 - 55296) * 1024 + 9216 + cp2;\n}\n//NOTE: excluding NULL and ASCII whitespace\nexport function isControlCodePoint(cp) {\n    return ((cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) ||\n        (cp >= 0x7f && cp <= 0x9f));\n}\nexport function isUndefinedCodePoint(cp) {\n    return (cp >= 64976 && cp <= 65007) || UNDEFINED_CODE_POINTS.has(cp);\n}\n", "export var ERR;\n(function (ERR) {\n    ERR[\"controlCharacterInInputStream\"] = \"control-character-in-input-stream\";\n    ERR[\"noncharacterInInputStream\"] = \"noncharacter-in-input-stream\";\n    ERR[\"surrogateInInputStream\"] = \"surrogate-in-input-stream\";\n    ERR[\"nonVoidHtmlElementStartTagWithTrailingSolidus\"] = \"non-void-html-element-start-tag-with-trailing-solidus\";\n    ERR[\"endTagWithAttributes\"] = \"end-tag-with-attributes\";\n    ERR[\"endTagWithTrailingSolidus\"] = \"end-tag-with-trailing-solidus\";\n    ERR[\"unexpectedSolidusInTag\"] = \"unexpected-solidus-in-tag\";\n    ERR[\"unexpectedNullCharacter\"] = \"unexpected-null-character\";\n    ERR[\"unexpectedQuestionMarkInsteadOfTagName\"] = \"unexpected-question-mark-instead-of-tag-name\";\n    ERR[\"invalidFirstCharacterOfTagName\"] = \"invalid-first-character-of-tag-name\";\n    ERR[\"unexpectedEqualsSignBeforeAttributeName\"] = \"unexpected-equals-sign-before-attribute-name\";\n    ERR[\"missingEndTagName\"] = \"missing-end-tag-name\";\n    ERR[\"unexpectedCharacterInAttributeName\"] = \"unexpected-character-in-attribute-name\";\n    ERR[\"unknownNamedCharacterReference\"] = \"unknown-named-character-reference\";\n    ERR[\"missingSemicolonAfterCharacterReference\"] = \"missing-semicolon-after-character-reference\";\n    ERR[\"unexpectedCharacterAfterDoctypeSystemIdentifier\"] = \"unexpected-character-after-doctype-system-identifier\";\n    ERR[\"unexpectedCharacterInUnquotedAttributeValue\"] = \"unexpected-character-in-unquoted-attribute-value\";\n    ERR[\"eofBeforeTagName\"] = \"eof-before-tag-name\";\n    ERR[\"eofInTag\"] = \"eof-in-tag\";\n    ERR[\"missingAttributeValue\"] = \"missing-attribute-value\";\n    ERR[\"missingWhitespaceBetweenAttributes\"] = \"missing-whitespace-between-attributes\";\n    ERR[\"missingWhitespaceAfterDoctypePublicKeyword\"] = \"missing-whitespace-after-doctype-public-keyword\";\n    ERR[\"missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers\"] = \"missing-whitespace-between-doctype-public-and-system-identifiers\";\n    ERR[\"missingWhitespaceAfterDoctypeSystemKeyword\"] = \"missing-whitespace-after-doctype-system-keyword\";\n    ERR[\"missingQuoteBeforeDoctypePublicIdentifier\"] = \"missing-quote-before-doctype-public-identifier\";\n    ERR[\"missingQuoteBeforeDoctypeSystemIdentifier\"] = \"missing-quote-before-doctype-system-identifier\";\n    ERR[\"missingDoctypePublicIdentifier\"] = \"missing-doctype-public-identifier\";\n    ERR[\"missingDoctypeSystemIdentifier\"] = \"missing-doctype-system-identifier\";\n    ERR[\"abruptDoctypePublicIdentifier\"] = \"abrupt-doctype-public-identifier\";\n    ERR[\"abruptDoctypeSystemIdentifier\"] = \"abrupt-doctype-system-identifier\";\n    ERR[\"cdataInHtmlContent\"] = \"cdata-in-html-content\";\n    ERR[\"incorrectlyOpenedComment\"] = \"incorrectly-opened-comment\";\n    ERR[\"eofInScriptHtmlCommentLikeText\"] = \"eof-in-script-html-comment-like-text\";\n    ERR[\"eofInDoctype\"] = \"eof-in-doctype\";\n    ERR[\"nestedComment\"] = \"nested-comment\";\n    ERR[\"abruptClosingOfEmptyComment\"] = \"abrupt-closing-of-empty-comment\";\n    ERR[\"eofInComment\"] = \"eof-in-comment\";\n    ERR[\"incorrectlyClosedComment\"] = \"incorrectly-closed-comment\";\n    ERR[\"eofInCdata\"] = \"eof-in-cdata\";\n    ERR[\"absenceOfDigitsInNumericCharacterReference\"] = \"absence-of-digits-in-numeric-character-reference\";\n    ERR[\"nullCharacterReference\"] = \"null-character-reference\";\n    ERR[\"surrogateCharacterReference\"] = \"surrogate-character-reference\";\n    ERR[\"characterReferenceOutsideUnicodeRange\"] = \"character-reference-outside-unicode-range\";\n    ERR[\"controlCharacterReference\"] = \"control-character-reference\";\n    ERR[\"noncharacterCharacterReference\"] = \"noncharacter-character-reference\";\n    ERR[\"missingWhitespaceBeforeDoctypeName\"] = \"missing-whitespace-before-doctype-name\";\n    ERR[\"missingDoctypeName\"] = \"missing-doctype-name\";\n    ERR[\"invalidCharacterSequenceAfterDoctypeName\"] = \"invalid-character-sequence-after-doctype-name\";\n    ERR[\"duplicateAttribute\"] = \"duplicate-attribute\";\n    ERR[\"nonConformingDoctype\"] = \"non-conforming-doctype\";\n    ERR[\"missingDoctype\"] = \"missing-doctype\";\n    ERR[\"misplacedDoctype\"] = \"misplaced-doctype\";\n    ERR[\"endTagWithoutMatchingOpenElement\"] = \"end-tag-without-matching-open-element\";\n    ERR[\"closingOfElementWithOpenChildElements\"] = \"closing-of-element-with-open-child-elements\";\n    ERR[\"disallowedContentInNoscriptInHead\"] = \"disallowed-content-in-noscript-in-head\";\n    ERR[\"openElementsLeftAfterEof\"] = \"open-elements-left-after-eof\";\n    ERR[\"abandonedHeadElementChild\"] = \"abandoned-head-element-child\";\n    ERR[\"misplacedStartTagForHeadElement\"] = \"misplaced-start-tag-for-head-element\";\n    ERR[\"nestedNoscriptInHead\"] = \"nested-noscript-in-head\";\n    ERR[\"eofInElementThatCanContainOnlyText\"] = \"eof-in-element-that-can-contain-only-text\";\n})(ERR || (ERR = {}));\n", "import { CODE_POINTS as $, getSurrogatePairCodePoint, isControlCodePoint, isSurrogate, isSurrogatePair, isUndefinedCodePoint, } from '../common/unicode.js';\nimport { ERR } from '../common/error-codes.js';\n//Const\nconst DEFAULT_BUFFER_WATERLINE = 1 << 16;\n//Preprocessor\n//NOTE: HTML input preprocessing\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream)\nexport class Preprocessor {\n    constructor(handler) {\n        this.handler = handler;\n        this.html = '';\n        this.pos = -1;\n        // NOTE: Initial `lastGapPos` is -2, to ensure `col` on initialisation is 0\n        this.lastGapPos = -2;\n        this.gapStack = [];\n        this.skipNextNewLine = false;\n        this.lastChunkWritten = false;\n        this.endOfChunkHit = false;\n        this.bufferWaterline = DEFAULT_BUFFER_WATERLINE;\n        this.isEol = false;\n        this.lineStartPos = 0;\n        this.droppedBufferSize = 0;\n        this.line = 1;\n        //NOTE: avoid reporting errors twice on advance/retreat\n        this.lastErrOffset = -1;\n    }\n    /** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */\n    get col() {\n        return this.pos - this.lineStartPos + Number(this.lastGapPos !== this.pos);\n    }\n    get offset() {\n        return this.droppedBufferSize + this.pos;\n    }\n    getError(code, cpOffset) {\n        const { line, col, offset } = this;\n        const startCol = col + cpOffset;\n        const startOffset = offset + cpOffset;\n        return {\n            code,\n            startLine: line,\n            endLine: line,\n            startCol,\n            endCol: startCol,\n            startOffset,\n            endOffset: startOffset,\n        };\n    }\n    _err(code) {\n        if (this.handler.onParseError && this.lastErrOffset !== this.offset) {\n            this.lastErrOffset = this.offset;\n            this.handler.onParseError(this.getError(code, 0));\n        }\n    }\n    _addGap() {\n        this.gapStack.push(this.lastGapPos);\n        this.lastGapPos = this.pos;\n    }\n    _processSurrogate(cp) {\n        //NOTE: try to peek a surrogate pair\n        if (this.pos !== this.html.length - 1) {\n            const nextCp = this.html.charCodeAt(this.pos + 1);\n            if (isSurrogatePair(nextCp)) {\n                //NOTE: we have a surrogate pair. Peek pair character and recalculate code point.\n                this.pos++;\n                //NOTE: add a gap that should be avoided during retreat\n                this._addGap();\n                return getSurrogatePairCodePoint(cp, nextCp);\n            }\n        }\n        //NOTE: we are at the end of a chunk, therefore we can't infer the surrogate pair yet.\n        else if (!this.lastChunkWritten) {\n            this.endOfChunkHit = true;\n            return $.EOF;\n        }\n        //NOTE: isolated surrogate\n        this._err(ERR.surrogateInInputStream);\n        return cp;\n    }\n    willDropParsedChunk() {\n        return this.pos > this.bufferWaterline;\n    }\n    dropParsedChunk() {\n        if (this.willDropParsedChunk()) {\n            this.html = this.html.substring(this.pos);\n            this.lineStartPos -= this.pos;\n            this.droppedBufferSize += this.pos;\n            this.pos = 0;\n            this.lastGapPos = -2;\n            this.gapStack.length = 0;\n        }\n    }\n    write(chunk, isLastChunk) {\n        if (this.html.length > 0) {\n            this.html += chunk;\n        }\n        else {\n            this.html = chunk;\n        }\n        this.endOfChunkHit = false;\n        this.lastChunkWritten = isLastChunk;\n    }\n    insertHtmlAtCurrentPos(chunk) {\n        this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1);\n        this.endOfChunkHit = false;\n    }\n    startsWith(pattern, caseSensitive) {\n        // Check if our buffer has enough characters\n        if (this.pos + pattern.length > this.html.length) {\n            this.endOfChunkHit = !this.lastChunkWritten;\n            return false;\n        }\n        if (caseSensitive) {\n            return this.html.startsWith(pattern, this.pos);\n        }\n        for (let i = 0; i < pattern.length; i++) {\n            const cp = this.html.charCodeAt(this.pos + i) | 0x20;\n            if (cp !== pattern.charCodeAt(i)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    peek(offset) {\n        const pos = this.pos + offset;\n        if (pos >= this.html.length) {\n            this.endOfChunkHit = !this.lastChunkWritten;\n            return $.EOF;\n        }\n        const code = this.html.charCodeAt(pos);\n        return code === $.CARRIAGE_RETURN ? $.LINE_FEED : code;\n    }\n    advance() {\n        this.pos++;\n        //NOTE: LF should be in the last column of the line\n        if (this.isEol) {\n            this.isEol = false;\n            this.line++;\n            this.lineStartPos = this.pos;\n        }\n        if (this.pos >= this.html.length) {\n            this.endOfChunkHit = !this.lastChunkWritten;\n            return $.EOF;\n        }\n        let cp = this.html.charCodeAt(this.pos);\n        //NOTE: all U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters\n        if (cp === $.CARRIAGE_RETURN) {\n            this.isEol = true;\n            this.skipNextNewLine = true;\n            return $.LINE_FEED;\n        }\n        //NOTE: any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character\n        //must be ignored.\n        if (cp === $.LINE_FEED) {\n            this.isEol = true;\n            if (this.skipNextNewLine) {\n                // `line` will be bumped again in the recursive call.\n                this.line--;\n                this.skipNextNewLine = false;\n                this._addGap();\n                return this.advance();\n            }\n        }\n        this.skipNextNewLine = false;\n        if (isSurrogate(cp)) {\n            cp = this._processSurrogate(cp);\n        }\n        //OPTIMIZATION: first check if code point is in the common allowed\n        //range (ASCII alphanumeric, whitespaces, big chunk of BMP)\n        //before going into detailed performance cost validation.\n        const isCommonValidRange = this.handler.onParseError === null ||\n            (cp > 0x1f && cp < 0x7f) ||\n            cp === $.LINE_FEED ||\n            cp === $.CARRIAGE_RETURN ||\n            (cp > 0x9f && cp < 64976);\n        if (!isCommonValidRange) {\n            this._checkForProblematicCharacters(cp);\n        }\n        return cp;\n    }\n    _checkForProblematicCharacters(cp) {\n        if (isControlCodePoint(cp)) {\n            this._err(ERR.controlCharacterInInputStream);\n        }\n        else if (isUndefinedCodePoint(cp)) {\n            this._err(ERR.noncharacterInInputStream);\n        }\n    }\n    retreat(count) {\n        this.pos -= count;\n        while (this.pos < this.lastGapPos) {\n            this.lastGapPos = this.gapStack.pop();\n            this.pos--;\n        }\n        this.isEol = false;\n    }\n}\n", "export var TokenType;\n(function (TokenType) {\n    TokenType[TokenType[\"CHARACTER\"] = 0] = \"CHARACTER\";\n    TokenType[TokenType[\"NULL_CHARACTER\"] = 1] = \"NULL_CHARACTER\";\n    TokenType[TokenType[\"WHITESPACE_CHARACTER\"] = 2] = \"WHITESPACE_CHARACTER\";\n    TokenType[TokenType[\"START_TAG\"] = 3] = \"START_TAG\";\n    TokenType[TokenType[\"END_TAG\"] = 4] = \"END_TAG\";\n    TokenType[TokenType[\"COMMENT\"] = 5] = \"COMMENT\";\n    TokenType[TokenType[\"DOCTYPE\"] = 6] = \"DOCTYPE\";\n    TokenType[TokenType[\"EOF\"] = 7] = \"EOF\";\n    TokenType[TokenType[\"HIBERNATION\"] = 8] = \"HIBERNATION\";\n})(TokenType || (TokenType = {}));\nexport function getTokenAttr(token, attrName) {\n    for (let i = token.attrs.length - 1; i >= 0; i--) {\n        if (token.attrs[i].name === attrName) {\n            return token.attrs[i].value;\n        }\n    }\n    return null;\n}\n", "// Generated using scripts/write-decode-map.ts\n\nexport const htmlDecodeTree: Uint16Array = /* #__PURE__ */ new Uint16Array(\n    // prettier-ignore\n    /* #__PURE__ */ \"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n        .split(\"\")\n        .map((c) => c.charCodeAt(0)),\n);\n", "// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\n\nconst decodeMap = new Map([\n    [0, 65_533],\n    // C1 Unicode control character reference replacements\n    [128, 8364],\n    [130, 8218],\n    [131, 402],\n    [132, 8222],\n    [133, 8230],\n    [134, 8224],\n    [135, 8225],\n    [136, 710],\n    [137, 8240],\n    [138, 352],\n    [139, 8249],\n    [140, 338],\n    [142, 381],\n    [145, 8216],\n    [146, 8217],\n    [147, 8220],\n    [148, 8221],\n    [149, 8226],\n    [150, 8211],\n    [151, 8212],\n    [152, 732],\n    [153, 8482],\n    [154, 353],\n    [155, 8250],\n    [156, 339],\n    [158, 382],\n    [159, 376],\n]);\n\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint: (...codePoints: number[]) => string =\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins\n    String.fromCodePoint ??\n    function (codePoint: number): string {\n        let output = \"\";\n\n        if (codePoint > 0xff_ff) {\n            codePoint -= 0x1_00_00;\n            output += String.fromCharCode(\n                ((codePoint >>> 10) & 0x3_ff) | 0xd8_00,\n            );\n            codePoint = 0xdc_00 | (codePoint & 0x3_ff);\n        }\n\n        output += String.fromCharCode(codePoint);\n        return output;\n    };\n\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint: number): number {\n    if (\n        (codePoint >= 0xd8_00 && codePoint <= 0xdf_ff) ||\n        codePoint > 0x10_ff_ff\n    ) {\n        return 0xff_fd;\n    }\n\n    return decodeMap.get(codePoint) ?? codePoint;\n}\n\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport function decodeCodePoint(codePoint: number): string {\n    return fromCodePoint(replaceCodePoint(codePoint));\n}\n", "import { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { replaceCodePoint, fromCodePoint } from \"./decode-codepoint.js\";\n\nconst enum CharCodes {\n    NUM = 35, // \"#\"\n    SEMI = 59, // \";\"\n    EQUALS = 61, // \"=\"\n    ZERO = 48, // \"0\"\n    NINE = 57, // \"9\"\n    LOWER_A = 97, // \"a\"\n    LOWER_F = 102, // \"f\"\n    LOWER_X = 120, // \"x\"\n    LOWER_Z = 122, // \"z\"\n    UPPER_A = 65, // \"A\"\n    UPPER_F = 70, // \"F\"\n    UPPER_Z = 90, // \"Z\"\n}\n\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b10_0000;\n\nexport enum BinTrieFlags {\n    VALUE_LENGTH = 0b1100_0000_0000_0000,\n    BRANCH_LENGTH = 0b0011_1111_1000_0000,\n    JUMP_TABLE = 0b0000_0000_0111_1111,\n}\n\nfunction isNumber(code: number): boolean {\n    return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\n\nfunction isHexadecimalCharacter(code: number): boolean {\n    return (\n        (code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F)\n    );\n}\n\nfunction isAsciiAlphaNumeric(code: number): boolean {\n    return (\n        (code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n        isNumber(code)\n    );\n}\n\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code: number): boolean {\n    return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\n\nconst enum EntityDecoderState {\n    EntityStart,\n    NumericStart,\n    NumericDecimal,\n    NumericHex,\n    NamedEntity,\n}\n\nexport enum DecodingMode {\n    /** Entities in text nodes that can end with any character. */\n    Legacy = 0,\n    /** Only allow entities terminated with a semicolon. */\n    Strict = 1,\n    /** Entities in attributes have limitations on ending characters. */\n    Attribute = 2,\n}\n\n/**\n * Producers for character reference errors as defined in the HTML spec.\n */\nexport interface EntityErrorProducer {\n    missingSemicolonAfterCharacterReference(): void;\n    absenceOfDigitsInNumericCharacterReference(\n        consumedCharacters: number,\n    ): void;\n    validateNumericCharacterReference(code: number): void;\n}\n\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n    constructor(\n        /** The tree used to decode entities. */\n        private readonly decodeTree: Uint16Array,\n        /**\n         * The function that is called when a codepoint is decoded.\n         *\n         * For multi-byte named entities, this will be called multiple times,\n         * with the second codepoint, and the same `consumed` value.\n         *\n         * @param codepoint The decoded codepoint.\n         * @param consumed The number of bytes consumed by the decoder.\n         */\n        private readonly emitCodePoint: (cp: number, consumed: number) => void,\n        /** An object that is used to produce errors. */\n        private readonly errors?: EntityErrorProducer | undefined,\n    ) {}\n\n    /** The current state of the decoder. */\n    private state = EntityDecoderState.EntityStart;\n    /** Characters that were consumed while parsing an entity. */\n    private consumed = 1;\n    /**\n     * The result of the entity.\n     *\n     * Either the result index of a numeric entity, or the codepoint of a\n     * numeric entity.\n     */\n    private result = 0;\n\n    /** The current index in the decode tree. */\n    private treeIndex = 0;\n    /** The number of characters that were consumed in excess. */\n    private excess = 1;\n    /** The mode in which the decoder is operating. */\n    private decodeMode = DecodingMode.Strict;\n\n    /** Resets the instance to make it reusable. */\n    startEntity(decodeMode: DecodingMode): void {\n        this.decodeMode = decodeMode;\n        this.state = EntityDecoderState.EntityStart;\n        this.result = 0;\n        this.treeIndex = 0;\n        this.excess = 1;\n        this.consumed = 1;\n    }\n\n    /**\n     * Write an entity to the decoder. This can be called multiple times with partial entities.\n     * If the entity is incomplete, the decoder will return -1.\n     *\n     * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n     * entity is incomplete, and resume when the next string is written.\n     *\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    write(input: string, offset: number): number {\n        switch (this.state) {\n            case EntityDecoderState.EntityStart: {\n                if (input.charCodeAt(offset) === CharCodes.NUM) {\n                    this.state = EntityDecoderState.NumericStart;\n                    this.consumed += 1;\n                    return this.stateNumericStart(input, offset + 1);\n                }\n                this.state = EntityDecoderState.NamedEntity;\n                return this.stateNamedEntity(input, offset);\n            }\n\n            case EntityDecoderState.NumericStart: {\n                return this.stateNumericStart(input, offset);\n            }\n\n            case EntityDecoderState.NumericDecimal: {\n                return this.stateNumericDecimal(input, offset);\n            }\n\n            case EntityDecoderState.NumericHex: {\n                return this.stateNumericHex(input, offset);\n            }\n\n            case EntityDecoderState.NamedEntity: {\n                return this.stateNamedEntity(input, offset);\n            }\n        }\n    }\n\n    /**\n     * Switches between the numeric decimal and hexadecimal states.\n     *\n     * Equivalent to the `Numeric character reference state` in the HTML spec.\n     *\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    private stateNumericStart(input: string, offset: number): number {\n        if (offset >= input.length) {\n            return -1;\n        }\n\n        if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n            this.state = EntityDecoderState.NumericHex;\n            this.consumed += 1;\n            return this.stateNumericHex(input, offset + 1);\n        }\n\n        this.state = EntityDecoderState.NumericDecimal;\n        return this.stateNumericDecimal(input, offset);\n    }\n\n    private addToNumericResult(\n        input: string,\n        start: number,\n        end: number,\n        base: number,\n    ): void {\n        if (start !== end) {\n            const digitCount = end - start;\n            this.result =\n                this.result * Math.pow(base, digitCount) +\n                Number.parseInt(input.substr(start, digitCount), base);\n            this.consumed += digitCount;\n        }\n    }\n\n    /**\n     * Parses a hexadecimal numeric entity.\n     *\n     * Equivalent to the `Hexademical character reference state` in the HTML spec.\n     *\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    private stateNumericHex(input: string, offset: number): number {\n        const startIndex = offset;\n\n        while (offset < input.length) {\n            const char = input.charCodeAt(offset);\n            if (isNumber(char) || isHexadecimalCharacter(char)) {\n                offset += 1;\n            } else {\n                this.addToNumericResult(input, startIndex, offset, 16);\n                return this.emitNumericEntity(char, 3);\n            }\n        }\n\n        this.addToNumericResult(input, startIndex, offset, 16);\n\n        return -1;\n    }\n\n    /**\n     * Parses a decimal numeric entity.\n     *\n     * Equivalent to the `Decimal character reference state` in the HTML spec.\n     *\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    private stateNumericDecimal(input: string, offset: number): number {\n        const startIndex = offset;\n\n        while (offset < input.length) {\n            const char = input.charCodeAt(offset);\n            if (isNumber(char)) {\n                offset += 1;\n            } else {\n                this.addToNumericResult(input, startIndex, offset, 10);\n                return this.emitNumericEntity(char, 2);\n            }\n        }\n\n        this.addToNumericResult(input, startIndex, offset, 10);\n\n        return -1;\n    }\n\n    /**\n     * Validate and emit a numeric entity.\n     *\n     * Implements the logic from the `Hexademical character reference start\n     * state` and `Numeric character reference end state` in the HTML spec.\n     *\n     * @param lastCp The last code point of the entity. Used to see if the\n     *               entity was terminated with a semicolon.\n     * @param expectedLength The minimum number of characters that should be\n     *                       consumed. Used to validate that at least one digit\n     *                       was consumed.\n     * @returns The number of characters that were consumed.\n     */\n    private emitNumericEntity(lastCp: number, expectedLength: number): number {\n        // Ensure we consumed at least one digit.\n        if (this.consumed <= expectedLength) {\n            this.errors?.absenceOfDigitsInNumericCharacterReference(\n                this.consumed,\n            );\n            return 0;\n        }\n\n        // Figure out if this is a legit end of the entity\n        if (lastCp === CharCodes.SEMI) {\n            this.consumed += 1;\n        } else if (this.decodeMode === DecodingMode.Strict) {\n            return 0;\n        }\n\n        this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n\n        if (this.errors) {\n            if (lastCp !== CharCodes.SEMI) {\n                this.errors.missingSemicolonAfterCharacterReference();\n            }\n\n            this.errors.validateNumericCharacterReference(this.result);\n        }\n\n        return this.consumed;\n    }\n\n    /**\n     * Parses a named entity.\n     *\n     * Equivalent to the `Named character reference state` in the HTML spec.\n     *\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    private stateNamedEntity(input: string, offset: number): number {\n        const { decodeTree } = this;\n        let current = decodeTree[this.treeIndex];\n        // The mask is the number of bytes of the value, including the current byte.\n        let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n        for (; offset < input.length; offset++, this.excess++) {\n            const char = input.charCodeAt(offset);\n\n            this.treeIndex = determineBranch(\n                decodeTree,\n                current,\n                this.treeIndex + Math.max(1, valueLength),\n                char,\n            );\n\n            if (this.treeIndex < 0) {\n                return this.result === 0 ||\n                    // If we are parsing an attribute\n                    (this.decodeMode === DecodingMode.Attribute &&\n                        // We shouldn't have consumed any characters after the entity,\n                        (valueLength === 0 ||\n                            // And there should be no invalid characters.\n                            isEntityInAttributeInvalidEnd(char)))\n                    ? 0\n                    : this.emitNotTerminatedNamedEntity();\n            }\n\n            current = decodeTree[this.treeIndex];\n            valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n            // If the branch is a value, store it and continue\n            if (valueLength !== 0) {\n                // If the entity is terminated by a semicolon, we are done.\n                if (char === CharCodes.SEMI) {\n                    return this.emitNamedEntityData(\n                        this.treeIndex,\n                        valueLength,\n                        this.consumed + this.excess,\n                    );\n                }\n\n                // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n                if (this.decodeMode !== DecodingMode.Strict) {\n                    this.result = this.treeIndex;\n                    this.consumed += this.excess;\n                    this.excess = 0;\n                }\n            }\n        }\n\n        return -1;\n    }\n\n    /**\n     * Emit a named entity that was not terminated with a semicolon.\n     *\n     * @returns The number of characters consumed.\n     */\n    private emitNotTerminatedNamedEntity(): number {\n        const { result, decodeTree } = this;\n\n        const valueLength =\n            (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n        this.emitNamedEntityData(result, valueLength, this.consumed);\n        this.errors?.missingSemicolonAfterCharacterReference();\n\n        return this.consumed;\n    }\n\n    /**\n     * Emit a named entity.\n     *\n     * @param result The index of the entity in the decode tree.\n     * @param valueLength The number of bytes in the entity.\n     * @param consumed The number of characters consumed.\n     *\n     * @returns The number of characters consumed.\n     */\n    private emitNamedEntityData(\n        result: number,\n        valueLength: number,\n        consumed: number,\n    ): number {\n        const { decodeTree } = this;\n\n        this.emitCodePoint(\n            valueLength === 1\n                ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n                : decodeTree[result + 1],\n            consumed,\n        );\n        if (valueLength === 3) {\n            // For multi-byte values, we need to emit the second byte.\n            this.emitCodePoint(decodeTree[result + 2], consumed);\n        }\n\n        return consumed;\n    }\n\n    /**\n     * Signal to the parser that the end of the input was reached.\n     *\n     * Remaining data will be emitted and relevant errors will be produced.\n     *\n     * @returns The number of characters consumed.\n     */\n    end(): number {\n        switch (this.state) {\n            case EntityDecoderState.NamedEntity: {\n                // Emit a named entity if we have one.\n                return this.result !== 0 &&\n                    (this.decodeMode !== DecodingMode.Attribute ||\n                        this.result === this.treeIndex)\n                    ? this.emitNotTerminatedNamedEntity()\n                    : 0;\n            }\n            // Otherwise, emit a numeric entity if we have one.\n            case EntityDecoderState.NumericDecimal: {\n                return this.emitNumericEntity(0, 2);\n            }\n            case EntityDecoderState.NumericHex: {\n                return this.emitNumericEntity(0, 3);\n            }\n            case EntityDecoderState.NumericStart: {\n                this.errors?.absenceOfDigitsInNumericCharacterReference(\n                    this.consumed,\n                );\n                return 0;\n            }\n            case EntityDecoderState.EntityStart: {\n                // Return 0 if we have no entity.\n                return 0;\n            }\n        }\n    }\n}\n\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree: Uint16Array) {\n    let returnValue = \"\";\n    const decoder = new EntityDecoder(\n        decodeTree,\n        (data) => (returnValue += fromCodePoint(data)),\n    );\n\n    return function decodeWithTrie(\n        input: string,\n        decodeMode: DecodingMode,\n    ): string {\n        let lastIndex = 0;\n        let offset = 0;\n\n        while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n            returnValue += input.slice(lastIndex, offset);\n\n            decoder.startEntity(decodeMode);\n\n            const length = decoder.write(\n                input,\n                // Skip the \"&\"\n                offset + 1,\n            );\n\n            if (length < 0) {\n                lastIndex = offset + decoder.end();\n                break;\n            }\n\n            lastIndex = offset + length;\n            // If `length` is 0, skip the current `&` and continue.\n            offset = length === 0 ? lastIndex + 1 : lastIndex;\n        }\n\n        const result = returnValue + input.slice(lastIndex);\n\n        // Make sure we don't keep a reference to the final string.\n        returnValue = \"\";\n\n        return result;\n    };\n}\n\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(\n    decodeTree: Uint16Array,\n    current: number,\n    nodeIndex: number,\n    char: number,\n): number {\n    const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n    const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n\n    // Case 1: Single branch encoded in jump offset\n    if (branchCount === 0) {\n        return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n    }\n\n    // Case 2: Multiple branches encoded in jump table\n    if (jumpOffset) {\n        const value = char - jumpOffset;\n\n        return value < 0 || value >= branchCount\n            ? -1\n            : decodeTree[nodeIndex + value] - 1;\n    }\n\n    // Case 3: Multiple branches encoded in dictionary\n\n    // Binary search for the character.\n    let lo = nodeIndex;\n    let hi = lo + branchCount - 1;\n\n    while (lo <= hi) {\n        const mid = (lo + hi) >>> 1;\n        const midValue = decodeTree[mid];\n\n        if (midValue < char) {\n            lo = mid + 1;\n        } else if (midValue > char) {\n            hi = mid - 1;\n        } else {\n            return decodeTree[mid + branchCount];\n        }\n    }\n\n    return -1;\n}\n\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n\n/**\n * Decodes an HTML string.\n *\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(\n    htmlString: string,\n    mode: DecodingMode = DecodingMode.Legacy,\n): string {\n    return htmlDecoder(htmlString, mode);\n}\n\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute: string): string {\n    return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString: string): string {\n    return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString: string): string {\n    return xmlDecoder(xmlString, DecodingMode.Strict);\n}\n\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\n\nexport {\n    decodeCodePoint,\n    replaceCodePoint,\n    fromCodePoint,\n} from \"./decode-codepoint.js\";\n", "/** All valid namespaces in HTML. */\nexport var NS;\n(function (NS) {\n    NS[\"HTML\"] = \"http://www.w3.org/1999/xhtml\";\n    NS[\"MATHML\"] = \"http://www.w3.org/1998/Math/MathML\";\n    NS[\"SVG\"] = \"http://www.w3.org/2000/svg\";\n    NS[\"XLINK\"] = \"http://www.w3.org/1999/xlink\";\n    NS[\"XML\"] = \"http://www.w3.org/XML/1998/namespace\";\n    NS[\"XMLNS\"] = \"http://www.w3.org/2000/xmlns/\";\n})(NS || (NS = {}));\nexport var ATTRS;\n(function (ATTRS) {\n    ATTRS[\"TYPE\"] = \"type\";\n    ATTRS[\"ACTION\"] = \"action\";\n    ATTRS[\"ENCODING\"] = \"encoding\";\n    ATTRS[\"PROMPT\"] = \"prompt\";\n    ATTRS[\"NAME\"] = \"name\";\n    ATTRS[\"COLOR\"] = \"color\";\n    ATTRS[\"FACE\"] = \"face\";\n    ATTRS[\"SIZE\"] = \"size\";\n})(ATTRS || (ATTRS = {}));\n/**\n * The mode of the document.\n *\n * @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks}\n */\nexport var DOCUMENT_MODE;\n(function (DOCUMENT_MODE) {\n    DOCUMENT_MODE[\"NO_QUIRKS\"] = \"no-quirks\";\n    DOCUMENT_MODE[\"QUIRKS\"] = \"quirks\";\n    DOCUMENT_MODE[\"LIMITED_QUIRKS\"] = \"limited-quirks\";\n})(DOCUMENT_MODE || (DOCUMENT_MODE = {}));\nexport var TAG_NAMES;\n(function (TAG_NAMES) {\n    TAG_NAMES[\"A\"] = \"a\";\n    TAG_NAMES[\"ADDRESS\"] = \"address\";\n    TAG_NAMES[\"ANNOTATION_XML\"] = \"annotation-xml\";\n    TAG_NAMES[\"APPLET\"] = \"applet\";\n    TAG_NAMES[\"AREA\"] = \"area\";\n    TAG_NAMES[\"ARTICLE\"] = \"article\";\n    TAG_NAMES[\"ASIDE\"] = \"aside\";\n    TAG_NAMES[\"B\"] = \"b\";\n    TAG_NAMES[\"BASE\"] = \"base\";\n    TAG_NAMES[\"BASEFONT\"] = \"basefont\";\n    TAG_NAMES[\"BGSOUND\"] = \"bgsound\";\n    TAG_NAMES[\"BIG\"] = \"big\";\n    TAG_NAMES[\"BLOCKQUOTE\"] = \"blockquote\";\n    TAG_NAMES[\"BODY\"] = \"body\";\n    TAG_NAMES[\"BR\"] = \"br\";\n    TAG_NAMES[\"BUTTON\"] = \"button\";\n    TAG_NAMES[\"CAPTION\"] = \"caption\";\n    TAG_NAMES[\"CENTER\"] = \"center\";\n    TAG_NAMES[\"CODE\"] = \"code\";\n    TAG_NAMES[\"COL\"] = \"col\";\n    TAG_NAMES[\"COLGROUP\"] = \"colgroup\";\n    TAG_NAMES[\"DD\"] = \"dd\";\n    TAG_NAMES[\"DESC\"] = \"desc\";\n    TAG_NAMES[\"DETAILS\"] = \"details\";\n    TAG_NAMES[\"DIALOG\"] = \"dialog\";\n    TAG_NAMES[\"DIR\"] = \"dir\";\n    TAG_NAMES[\"DIV\"] = \"div\";\n    TAG_NAMES[\"DL\"] = \"dl\";\n    TAG_NAMES[\"DT\"] = \"dt\";\n    TAG_NAMES[\"EM\"] = \"em\";\n    TAG_NAMES[\"EMBED\"] = \"embed\";\n    TAG_NAMES[\"FIELDSET\"] = \"fieldset\";\n    TAG_NAMES[\"FIGCAPTION\"] = \"figcaption\";\n    TAG_NAMES[\"FIGURE\"] = \"figure\";\n    TAG_NAMES[\"FONT\"] = \"font\";\n    TAG_NAMES[\"FOOTER\"] = \"footer\";\n    TAG_NAMES[\"FOREIGN_OBJECT\"] = \"foreignObject\";\n    TAG_NAMES[\"FORM\"] = \"form\";\n    TAG_NAMES[\"FRAME\"] = \"frame\";\n    TAG_NAMES[\"FRAMESET\"] = \"frameset\";\n    TAG_NAMES[\"H1\"] = \"h1\";\n    TAG_NAMES[\"H2\"] = \"h2\";\n    TAG_NAMES[\"H3\"] = \"h3\";\n    TAG_NAMES[\"H4\"] = \"h4\";\n    TAG_NAMES[\"H5\"] = \"h5\";\n    TAG_NAMES[\"H6\"] = \"h6\";\n    TAG_NAMES[\"HEAD\"] = \"head\";\n    TAG_NAMES[\"HEADER\"] = \"header\";\n    TAG_NAMES[\"HGROUP\"] = \"hgroup\";\n    TAG_NAMES[\"HR\"] = \"hr\";\n    TAG_NAMES[\"HTML\"] = \"html\";\n    TAG_NAMES[\"I\"] = \"i\";\n    TAG_NAMES[\"IMG\"] = \"img\";\n    TAG_NAMES[\"IMAGE\"] = \"image\";\n    TAG_NAMES[\"INPUT\"] = \"input\";\n    TAG_NAMES[\"IFRAME\"] = \"iframe\";\n    TAG_NAMES[\"KEYGEN\"] = \"keygen\";\n    TAG_NAMES[\"LABEL\"] = \"label\";\n    TAG_NAMES[\"LI\"] = \"li\";\n    TAG_NAMES[\"LINK\"] = \"link\";\n    TAG_NAMES[\"LISTING\"] = \"listing\";\n    TAG_NAMES[\"MAIN\"] = \"main\";\n    TAG_NAMES[\"MALIGNMARK\"] = \"malignmark\";\n    TAG_NAMES[\"MARQUEE\"] = \"marquee\";\n    TAG_NAMES[\"MATH\"] = \"math\";\n    TAG_NAMES[\"MENU\"] = \"menu\";\n    TAG_NAMES[\"META\"] = \"meta\";\n    TAG_NAMES[\"MGLYPH\"] = \"mglyph\";\n    TAG_NAMES[\"MI\"] = \"mi\";\n    TAG_NAMES[\"MO\"] = \"mo\";\n    TAG_NAMES[\"MN\"] = \"mn\";\n    TAG_NAMES[\"MS\"] = \"ms\";\n    TAG_NAMES[\"MTEXT\"] = \"mtext\";\n    TAG_NAMES[\"NAV\"] = \"nav\";\n    TAG_NAMES[\"NOBR\"] = \"nobr\";\n    TAG_NAMES[\"NOFRAMES\"] = \"noframes\";\n    TAG_NAMES[\"NOEMBED\"] = \"noembed\";\n    TAG_NAMES[\"NOSCRIPT\"] = \"noscript\";\n    TAG_NAMES[\"OBJECT\"] = \"object\";\n    TAG_NAMES[\"OL\"] = \"ol\";\n    TAG_NAMES[\"OPTGROUP\"] = \"optgroup\";\n    TAG_NAMES[\"OPTION\"] = \"option\";\n    TAG_NAMES[\"P\"] = \"p\";\n    TAG_NAMES[\"PARAM\"] = \"param\";\n    TAG_NAMES[\"PLAINTEXT\"] = \"plaintext\";\n    TAG_NAMES[\"PRE\"] = \"pre\";\n    TAG_NAMES[\"RB\"] = \"rb\";\n    TAG_NAMES[\"RP\"] = \"rp\";\n    TAG_NAMES[\"RT\"] = \"rt\";\n    TAG_NAMES[\"RTC\"] = \"rtc\";\n    TAG_NAMES[\"RUBY\"] = \"ruby\";\n    TAG_NAMES[\"S\"] = \"s\";\n    TAG_NAMES[\"SCRIPT\"] = \"script\";\n    TAG_NAMES[\"SEARCH\"] = \"search\";\n    TAG_NAMES[\"SECTION\"] = \"section\";\n    TAG_NAMES[\"SELECT\"] = \"select\";\n    TAG_NAMES[\"SOURCE\"] = \"source\";\n    TAG_NAMES[\"SMALL\"] = \"small\";\n    TAG_NAMES[\"SPAN\"] = \"span\";\n    TAG_NAMES[\"STRIKE\"] = \"strike\";\n    TAG_NAMES[\"STRONG\"] = \"strong\";\n    TAG_NAMES[\"STYLE\"] = \"style\";\n    TAG_NAMES[\"SUB\"] = \"sub\";\n    TAG_NAMES[\"SUMMARY\"] = \"summary\";\n    TAG_NAMES[\"SUP\"] = \"sup\";\n    TAG_NAMES[\"TABLE\"] = \"table\";\n    TAG_NAMES[\"TBODY\"] = \"tbody\";\n    TAG_NAMES[\"TEMPLATE\"] = \"template\";\n    TAG_NAMES[\"TEXTAREA\"] = \"textarea\";\n    TAG_NAMES[\"TFOOT\"] = \"tfoot\";\n    TAG_NAMES[\"TD\"] = \"td\";\n    TAG_NAMES[\"TH\"] = \"th\";\n    TAG_NAMES[\"THEAD\"] = \"thead\";\n    TAG_NAMES[\"TITLE\"] = \"title\";\n    TAG_NAMES[\"TR\"] = \"tr\";\n    TAG_NAMES[\"TRACK\"] = \"track\";\n    TAG_NAMES[\"TT\"] = \"tt\";\n    TAG_NAMES[\"U\"] = \"u\";\n    TAG_NAMES[\"UL\"] = \"ul\";\n    TAG_NAMES[\"SVG\"] = \"svg\";\n    TAG_NAMES[\"VAR\"] = \"var\";\n    TAG_NAMES[\"WBR\"] = \"wbr\";\n    TAG_NAMES[\"XMP\"] = \"xmp\";\n})(TAG_NAMES || (TAG_NAMES = {}));\n/**\n * Tag IDs are numeric IDs for known tag names.\n *\n * We use tag IDs to improve the performance of tag name comparisons.\n */\nexport var TAG_ID;\n(function (TAG_ID) {\n    TAG_ID[TAG_ID[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n    TAG_ID[TAG_ID[\"A\"] = 1] = \"A\";\n    TAG_ID[TAG_ID[\"ADDRESS\"] = 2] = \"ADDRESS\";\n    TAG_ID[TAG_ID[\"ANNOTATION_XML\"] = 3] = \"ANNOTATION_XML\";\n    TAG_ID[TAG_ID[\"APPLET\"] = 4] = \"APPLET\";\n    TAG_ID[TAG_ID[\"AREA\"] = 5] = \"AREA\";\n    TAG_ID[TAG_ID[\"ARTICLE\"] = 6] = \"ARTICLE\";\n    TAG_ID[TAG_ID[\"ASIDE\"] = 7] = \"ASIDE\";\n    TAG_ID[TAG_ID[\"B\"] = 8] = \"B\";\n    TAG_ID[TAG_ID[\"BASE\"] = 9] = \"BASE\";\n    TAG_ID[TAG_ID[\"BASEFONT\"] = 10] = \"BASEFONT\";\n    TAG_ID[TAG_ID[\"BGSOUND\"] = 11] = \"BGSOUND\";\n    TAG_ID[TAG_ID[\"BIG\"] = 12] = \"BIG\";\n    TAG_ID[TAG_ID[\"BLOCKQUOTE\"] = 13] = \"BLOCKQUOTE\";\n    TAG_ID[TAG_ID[\"BODY\"] = 14] = \"BODY\";\n    TAG_ID[TAG_ID[\"BR\"] = 15] = \"BR\";\n    TAG_ID[TAG_ID[\"BUTTON\"] = 16] = \"BUTTON\";\n    TAG_ID[TAG_ID[\"CAPTION\"] = 17] = \"CAPTION\";\n    TAG_ID[TAG_ID[\"CENTER\"] = 18] = \"CENTER\";\n    TAG_ID[TAG_ID[\"CODE\"] = 19] = \"CODE\";\n    TAG_ID[TAG_ID[\"COL\"] = 20] = \"COL\";\n    TAG_ID[TAG_ID[\"COLGROUP\"] = 21] = \"COLGROUP\";\n    TAG_ID[TAG_ID[\"DD\"] = 22] = \"DD\";\n    TAG_ID[TAG_ID[\"DESC\"] = 23] = \"DESC\";\n    TAG_ID[TAG_ID[\"DETAILS\"] = 24] = \"DETAILS\";\n    TAG_ID[TAG_ID[\"DIALOG\"] = 25] = \"DIALOG\";\n    TAG_ID[TAG_ID[\"DIR\"] = 26] = \"DIR\";\n    TAG_ID[TAG_ID[\"DIV\"] = 27] = \"DIV\";\n    TAG_ID[TAG_ID[\"DL\"] = 28] = \"DL\";\n    TAG_ID[TAG_ID[\"DT\"] = 29] = \"DT\";\n    TAG_ID[TAG_ID[\"EM\"] = 30] = \"EM\";\n    TAG_ID[TAG_ID[\"EMBED\"] = 31] = \"EMBED\";\n    TAG_ID[TAG_ID[\"FIELDSET\"] = 32] = \"FIELDSET\";\n    TAG_ID[TAG_ID[\"FIGCAPTION\"] = 33] = \"FIGCAPTION\";\n    TAG_ID[TAG_ID[\"FIGURE\"] = 34] = \"FIGURE\";\n    TAG_ID[TAG_ID[\"FONT\"] = 35] = \"FONT\";\n    TAG_ID[TAG_ID[\"FOOTER\"] = 36] = \"FOOTER\";\n    TAG_ID[TAG_ID[\"FOREIGN_OBJECT\"] = 37] = \"FOREIGN_OBJECT\";\n    TAG_ID[TAG_ID[\"FORM\"] = 38] = \"FORM\";\n    TAG_ID[TAG_ID[\"FRAME\"] = 39] = \"FRAME\";\n    TAG_ID[TAG_ID[\"FRAMESET\"] = 40] = \"FRAMESET\";\n    TAG_ID[TAG_ID[\"H1\"] = 41] = \"H1\";\n    TAG_ID[TAG_ID[\"H2\"] = 42] = \"H2\";\n    TAG_ID[TAG_ID[\"H3\"] = 43] = \"H3\";\n    TAG_ID[TAG_ID[\"H4\"] = 44] = \"H4\";\n    TAG_ID[TAG_ID[\"H5\"] = 45] = \"H5\";\n    TAG_ID[TAG_ID[\"H6\"] = 46] = \"H6\";\n    TAG_ID[TAG_ID[\"HEAD\"] = 47] = \"HEAD\";\n    TAG_ID[TAG_ID[\"HEADER\"] = 48] = \"HEADER\";\n    TAG_ID[TAG_ID[\"HGROUP\"] = 49] = \"HGROUP\";\n    TAG_ID[TAG_ID[\"HR\"] = 50] = \"HR\";\n    TAG_ID[TAG_ID[\"HTML\"] = 51] = \"HTML\";\n    TAG_ID[TAG_ID[\"I\"] = 52] = \"I\";\n    TAG_ID[TAG_ID[\"IMG\"] = 53] = \"IMG\";\n    TAG_ID[TAG_ID[\"IMAGE\"] = 54] = \"IMAGE\";\n    TAG_ID[TAG_ID[\"INPUT\"] = 55] = \"INPUT\";\n    TAG_ID[TAG_ID[\"IFRAME\"] = 56] = \"IFRAME\";\n    TAG_ID[TAG_ID[\"KEYGEN\"] = 57] = \"KEYGEN\";\n    TAG_ID[TAG_ID[\"LABEL\"] = 58] = \"LABEL\";\n    TAG_ID[TAG_ID[\"LI\"] = 59] = \"LI\";\n    TAG_ID[TAG_ID[\"LINK\"] = 60] = \"LINK\";\n    TAG_ID[TAG_ID[\"LISTING\"] = 61] = \"LISTING\";\n    TAG_ID[TAG_ID[\"MAIN\"] = 62] = \"MAIN\";\n    TAG_ID[TAG_ID[\"MALIGNMARK\"] = 63] = \"MALIGNMARK\";\n    TAG_ID[TAG_ID[\"MARQUEE\"] = 64] = \"MARQUEE\";\n    TAG_ID[TAG_ID[\"MATH\"] = 65] = \"MATH\";\n    TAG_ID[TAG_ID[\"MENU\"] = 66] = \"MENU\";\n    TAG_ID[TAG_ID[\"META\"] = 67] = \"META\";\n    TAG_ID[TAG_ID[\"MGLYPH\"] = 68] = \"MGLYPH\";\n    TAG_ID[TAG_ID[\"MI\"] = 69] = \"MI\";\n    TAG_ID[TAG_ID[\"MO\"] = 70] = \"MO\";\n    TAG_ID[TAG_ID[\"MN\"] = 71] = \"MN\";\n    TAG_ID[TAG_ID[\"MS\"] = 72] = \"MS\";\n    TAG_ID[TAG_ID[\"MTEXT\"] = 73] = \"MTEXT\";\n    TAG_ID[TAG_ID[\"NAV\"] = 74] = \"NAV\";\n    TAG_ID[TAG_ID[\"NOBR\"] = 75] = \"NOBR\";\n    TAG_ID[TAG_ID[\"NOFRAMES\"] = 76] = \"NOFRAMES\";\n    TAG_ID[TAG_ID[\"NOEMBED\"] = 77] = \"NOEMBED\";\n    TAG_ID[TAG_ID[\"NOSCRIPT\"] = 78] = \"NOSCRIPT\";\n    TAG_ID[TAG_ID[\"OBJECT\"] = 79] = \"OBJECT\";\n    TAG_ID[TAG_ID[\"OL\"] = 80] = \"OL\";\n    TAG_ID[TAG_ID[\"OPTGROUP\"] = 81] = \"OPTGROUP\";\n    TAG_ID[TAG_ID[\"OPTION\"] = 82] = \"OPTION\";\n    TAG_ID[TAG_ID[\"P\"] = 83] = \"P\";\n    TAG_ID[TAG_ID[\"PARAM\"] = 84] = \"PARAM\";\n    TAG_ID[TAG_ID[\"PLAINTEXT\"] = 85] = \"PLAINTEXT\";\n    TAG_ID[TAG_ID[\"PRE\"] = 86] = \"PRE\";\n    TAG_ID[TAG_ID[\"RB\"] = 87] = \"RB\";\n    TAG_ID[TAG_ID[\"RP\"] = 88] = \"RP\";\n    TAG_ID[TAG_ID[\"RT\"] = 89] = \"RT\";\n    TAG_ID[TAG_ID[\"RTC\"] = 90] = \"RTC\";\n    TAG_ID[TAG_ID[\"RUBY\"] = 91] = \"RUBY\";\n    TAG_ID[TAG_ID[\"S\"] = 92] = \"S\";\n    TAG_ID[TAG_ID[\"SCRIPT\"] = 93] = \"SCRIPT\";\n    TAG_ID[TAG_ID[\"SEARCH\"] = 94] = \"SEARCH\";\n    TAG_ID[TAG_ID[\"SECTION\"] = 95] = \"SECTION\";\n    TAG_ID[TAG_ID[\"SELECT\"] = 96] = \"SELECT\";\n    TAG_ID[TAG_ID[\"SOURCE\"] = 97] = \"SOURCE\";\n    TAG_ID[TAG_ID[\"SMALL\"] = 98] = \"SMALL\";\n    TAG_ID[TAG_ID[\"SPAN\"] = 99] = \"SPAN\";\n    TAG_ID[TAG_ID[\"STRIKE\"] = 100] = \"STRIKE\";\n    TAG_ID[TAG_ID[\"STRONG\"] = 101] = \"STRONG\";\n    TAG_ID[TAG_ID[\"STYLE\"] = 102] = \"STYLE\";\n    TAG_ID[TAG_ID[\"SUB\"] = 103] = \"SUB\";\n    TAG_ID[TAG_ID[\"SUMMARY\"] = 104] = \"SUMMARY\";\n    TAG_ID[TAG_ID[\"SUP\"] = 105] = \"SUP\";\n    TAG_ID[TAG_ID[\"TABLE\"] = 106] = \"TABLE\";\n    TAG_ID[TAG_ID[\"TBODY\"] = 107] = \"TBODY\";\n    TAG_ID[TAG_ID[\"TEMPLATE\"] = 108] = \"TEMPLATE\";\n    TAG_ID[TAG_ID[\"TEXTAREA\"] = 109] = \"TEXTAREA\";\n    TAG_ID[TAG_ID[\"TFOOT\"] = 110] = \"TFOOT\";\n    TAG_ID[TAG_ID[\"TD\"] = 111] = \"TD\";\n    TAG_ID[TAG_ID[\"TH\"] = 112] = \"TH\";\n    TAG_ID[TAG_ID[\"THEAD\"] = 113] = \"THEAD\";\n    TAG_ID[TAG_ID[\"TITLE\"] = 114] = \"TITLE\";\n    TAG_ID[TAG_ID[\"TR\"] = 115] = \"TR\";\n    TAG_ID[TAG_ID[\"TRACK\"] = 116] = \"TRACK\";\n    TAG_ID[TAG_ID[\"TT\"] = 117] = \"TT\";\n    TAG_ID[TAG_ID[\"U\"] = 118] = \"U\";\n    TAG_ID[TAG_ID[\"UL\"] = 119] = \"UL\";\n    TAG_ID[TAG_ID[\"SVG\"] = 120] = \"SVG\";\n    TAG_ID[TAG_ID[\"VAR\"] = 121] = \"VAR\";\n    TAG_ID[TAG_ID[\"WBR\"] = 122] = \"WBR\";\n    TAG_ID[TAG_ID[\"XMP\"] = 123] = \"XMP\";\n})(TAG_ID || (TAG_ID = {}));\nconst TAG_NAME_TO_ID = new Map([\n    [TAG_NAMES.A, TAG_ID.A],\n    [TAG_NAMES.ADDRESS, TAG_ID.ADDRESS],\n    [TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML],\n    [TAG_NAMES.APPLET, TAG_ID.APPLET],\n    [TAG_NAMES.AREA, TAG_ID.AREA],\n    [TAG_NAMES.ARTICLE, TAG_ID.ARTICLE],\n    [TAG_NAMES.ASIDE, TAG_ID.ASIDE],\n    [TAG_NAMES.B, TAG_ID.B],\n    [TAG_NAMES.BASE, TAG_ID.BASE],\n    [TAG_NAMES.BASEFONT, TAG_ID.BASEFONT],\n    [TAG_NAMES.BGSOUND, TAG_ID.BGSOUND],\n    [TAG_NAMES.BIG, TAG_ID.BIG],\n    [TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE],\n    [TAG_NAMES.BODY, TAG_ID.BODY],\n    [TAG_NAMES.BR, TAG_ID.BR],\n    [TAG_NAMES.BUTTON, TAG_ID.BUTTON],\n    [TAG_NAMES.CAPTION, TAG_ID.CAPTION],\n    [TAG_NAMES.CENTER, TAG_ID.CENTER],\n    [TAG_NAMES.CODE, TAG_ID.CODE],\n    [TAG_NAMES.COL, TAG_ID.COL],\n    [TAG_NAMES.COLGROUP, TAG_ID.COLGROUP],\n    [TAG_NAMES.DD, TAG_ID.DD],\n    [TAG_NAMES.DESC, TAG_ID.DESC],\n    [TAG_NAMES.DETAILS, TAG_ID.DETAILS],\n    [TAG_NAMES.DIALOG, TAG_ID.DIALOG],\n    [TAG_NAMES.DIR, TAG_ID.DIR],\n    [TAG_NAMES.DIV, TAG_ID.DIV],\n    [TAG_NAMES.DL, TAG_ID.DL],\n    [TAG_NAMES.DT, TAG_ID.DT],\n    [TAG_NAMES.EM, TAG_ID.EM],\n    [TAG_NAMES.EMBED, TAG_ID.EMBED],\n    [TAG_NAMES.FIELDSET, TAG_ID.FIELDSET],\n    [TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION],\n    [TAG_NAMES.FIGURE, TAG_ID.FIGURE],\n    [TAG_NAMES.FONT, TAG_ID.FONT],\n    [TAG_NAMES.FOOTER, TAG_ID.FOOTER],\n    [TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT],\n    [TAG_NAMES.FORM, TAG_ID.FORM],\n    [TAG_NAMES.FRAME, TAG_ID.FRAME],\n    [TAG_NAMES.FRAMESET, TAG_ID.FRAMESET],\n    [TAG_NAMES.H1, TAG_ID.H1],\n    [TAG_NAMES.H2, TAG_ID.H2],\n    [TAG_NAMES.H3, TAG_ID.H3],\n    [TAG_NAMES.H4, TAG_ID.H4],\n    [TAG_NAMES.H5, TAG_ID.H5],\n    [TAG_NAMES.H6, TAG_ID.H6],\n    [TAG_NAMES.HEAD, TAG_ID.HEAD],\n    [TAG_NAMES.HEADER, TAG_ID.HEADER],\n    [TAG_NAMES.HGROUP, TAG_ID.HGROUP],\n    [TAG_NAMES.HR, TAG_ID.HR],\n    [TAG_NAMES.HTML, TAG_ID.HTML],\n    [TAG_NAMES.I, TAG_ID.I],\n    [TAG_NAMES.IMG, TAG_ID.IMG],\n    [TAG_NAMES.IMAGE, TAG_ID.IMAGE],\n    [TAG_NAMES.INPUT, TAG_ID.INPUT],\n    [TAG_NAMES.IFRAME, TAG_ID.IFRAME],\n    [TAG_NAMES.KEYGEN, TAG_ID.KEYGEN],\n    [TAG_NAMES.LABEL, TAG_ID.LABEL],\n    [TAG_NAMES.LI, TAG_ID.LI],\n    [TAG_NAMES.LINK, TAG_ID.LINK],\n    [TAG_NAMES.LISTING, TAG_ID.LISTING],\n    [TAG_NAMES.MAIN, TAG_ID.MAIN],\n    [TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK],\n    [TAG_NAMES.MARQUEE, TAG_ID.MARQUEE],\n    [TAG_NAMES.MATH, TAG_ID.MATH],\n    [TAG_NAMES.MENU, TAG_ID.MENU],\n    [TAG_NAMES.META, TAG_ID.META],\n    [TAG_NAMES.MGLYPH, TAG_ID.MGLYPH],\n    [TAG_NAMES.MI, TAG_ID.MI],\n    [TAG_NAMES.MO, TAG_ID.MO],\n    [TAG_NAMES.MN, TAG_ID.MN],\n    [TAG_NAMES.MS, TAG_ID.MS],\n    [TAG_NAMES.MTEXT, TAG_ID.MTEXT],\n    [TAG_NAMES.NAV, TAG_ID.NAV],\n    [TAG_NAMES.NOBR, TAG_ID.NOBR],\n    [TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES],\n    [TAG_NAMES.NOEMBED, TAG_ID.NOEMBED],\n    [TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT],\n    [TAG_NAMES.OBJECT, TAG_ID.OBJECT],\n    [TAG_NAMES.OL, TAG_ID.OL],\n    [TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP],\n    [TAG_NAMES.OPTION, TAG_ID.OPTION],\n    [TAG_NAMES.P, TAG_ID.P],\n    [TAG_NAMES.PARAM, TAG_ID.PARAM],\n    [TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT],\n    [TAG_NAMES.PRE, TAG_ID.PRE],\n    [TAG_NAMES.RB, TAG_ID.RB],\n    [TAG_NAMES.RP, TAG_ID.RP],\n    [TAG_NAMES.RT, TAG_ID.RT],\n    [TAG_NAMES.RTC, TAG_ID.RTC],\n    [TAG_NAMES.RUBY, TAG_ID.RUBY],\n    [TAG_NAMES.S, TAG_ID.S],\n    [TAG_NAMES.SCRIPT, TAG_ID.SCRIPT],\n    [TAG_NAMES.SEARCH, TAG_ID.SEARCH],\n    [TAG_NAMES.SECTION, TAG_ID.SECTION],\n    [TAG_NAMES.SELECT, TAG_ID.SELECT],\n    [TAG_NAMES.SOURCE, TAG_ID.SOURCE],\n    [TAG_NAMES.SMALL, TAG_ID.SMALL],\n    [TAG_NAMES.SPAN, TAG_ID.SPAN],\n    [TAG_NAMES.STRIKE, TAG_ID.STRIKE],\n    [TAG_NAMES.STRONG, TAG_ID.STRONG],\n    [TAG_NAMES.STYLE, TAG_ID.STYLE],\n    [TAG_NAMES.SUB, TAG_ID.SUB],\n    [TAG_NAMES.SUMMARY, TAG_ID.SUMMARY],\n    [TAG_NAMES.SUP, TAG_ID.SUP],\n    [TAG_NAMES.TABLE, TAG_ID.TABLE],\n    [TAG_NAMES.TBODY, TAG_ID.TBODY],\n    [TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE],\n    [TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA],\n    [TAG_NAMES.TFOOT, TAG_ID.TFOOT],\n    [TAG_NAMES.TD, TAG_ID.TD],\n    [TAG_NAMES.TH, TAG_ID.TH],\n    [TAG_NAMES.THEAD, TAG_ID.THEAD],\n    [TAG_NAMES.TITLE, TAG_ID.TITLE],\n    [TAG_NAMES.TR, TAG_ID.TR],\n    [TAG_NAMES.TRACK, TAG_ID.TRACK],\n    [TAG_NAMES.TT, TAG_ID.TT],\n    [TAG_NAMES.U, TAG_ID.U],\n    [TAG_NAMES.UL, TAG_ID.UL],\n    [TAG_NAMES.SVG, TAG_ID.SVG],\n    [TAG_NAMES.VAR, TAG_ID.VAR],\n    [TAG_NAMES.WBR, TAG_ID.WBR],\n    [TAG_NAMES.XMP, TAG_ID.XMP],\n]);\nexport function getTagID(tagName) {\n    var _a;\n    return (_a = TAG_NAME_TO_ID.get(tagName)) !== null && _a !== void 0 ? _a : TAG_ID.UNKNOWN;\n}\nconst $ = TAG_ID;\nexport const SPECIAL_ELEMENTS = {\n    [NS.HTML]: new Set([\n        $.ADDRESS,\n        $.APPLET,\n        $.AREA,\n        $.ARTICLE,\n        $.ASIDE,\n        $.BASE,\n        $.BASEFONT,\n        $.BGSOUND,\n        $.BLOCKQUOTE,\n        $.BODY,\n        $.BR,\n        $.BUTTON,\n        $.CAPTION,\n        $.CENTER,\n        $.COL,\n        $.COLGROUP,\n        $.DD,\n        $.DETAILS,\n        $.DIR,\n        $.DIV,\n        $.DL,\n        $.DT,\n        $.EMBED,\n        $.FIELDSET,\n        $.FIGCAPTION,\n        $.FIGURE,\n        $.FOOTER,\n        $.FORM,\n        $.FRAME,\n        $.FRAMESET,\n        $.H1,\n        $.H2,\n        $.H3,\n        $.H4,\n        $.H5,\n        $.H6,\n        $.HEAD,\n        $.HEADER,\n        $.HGROUP,\n        $.HR,\n        $.HTML,\n        $.IFRAME,\n        $.IMG,\n        $.INPUT,\n        $.LI,\n        $.LINK,\n        $.LISTING,\n        $.MAIN,\n        $.MARQUEE,\n        $.MENU,\n        $.META,\n        $.NAV,\n        $.NOEMBED,\n        $.NOFRAMES,\n        $.NOSCRIPT,\n        $.OBJECT,\n        $.OL,\n        $.P,\n        $.PARAM,\n        $.PLAINTEXT,\n        $.PRE,\n        $.SCRIPT,\n        $.SECTION,\n        $.SELECT,\n        $.SOURCE,\n        $.STYLE,\n        $.SUMMARY,\n        $.TABLE,\n        $.TBODY,\n        $.TD,\n        $.TEMPLATE,\n        $.TEXTAREA,\n        $.TFOOT,\n        $.TH,\n        $.THEAD,\n        $.TITLE,\n        $.TR,\n        $.TRACK,\n        $.UL,\n        $.WBR,\n        $.XMP,\n    ]),\n    [NS.MATHML]: new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]),\n    [NS.SVG]: new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]),\n    [NS.XLINK]: new Set(),\n    [NS.XML]: new Set(),\n    [NS.XMLNS]: new Set(),\n};\nexport const NUMBERED_HEADERS = new Set([$.H1, $.H2, $.H3, $.H4, $.H5, $.H6]);\nconst UNESCAPED_TEXT = new Set([\n    TAG_NAMES.STYLE,\n    TAG_NAMES.SCRIPT,\n    TAG_NAMES.XMP,\n    TAG_NAMES.IFRAME,\n    TAG_NAMES.NOEMBED,\n    TAG_NAMES.NOFRAMES,\n    TAG_NAMES.PLAINTEXT,\n]);\nexport function hasUnescapedText(tn, scriptingEnabled) {\n    return UNESCAPED_TEXT.has(tn) || (scriptingEnabled && tn === TAG_NAMES.NOSCRIPT);\n}\n", "import { Preprocessor } from './preprocessor.js';\nimport { CODE_POINTS as $, SEQUENCES as $$, REPLACEMENT_CHARACTER, isSurrogate, isUndefinedCodePoint, isControlCodePoint, } from '../common/unicode.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\nimport { htmlDecodeTree, EntityDecoder, DecodingMode } from 'entities/decode';\nimport { ERR } from '../common/error-codes.js';\nimport { TAG_ID, getTagID } from '../common/html.js';\n//States\nvar State;\n(function (State) {\n    State[State[\"DATA\"] = 0] = \"DATA\";\n    State[State[\"RCDATA\"] = 1] = \"RCDATA\";\n    State[State[\"RAWTEXT\"] = 2] = \"RAWTEXT\";\n    State[State[\"SCRIPT_DATA\"] = 3] = \"SCRIPT_DATA\";\n    State[State[\"PLAINTEXT\"] = 4] = \"PLAINTEXT\";\n    State[State[\"TAG_OPEN\"] = 5] = \"TAG_OPEN\";\n    State[State[\"END_TAG_OPEN\"] = 6] = \"END_TAG_OPEN\";\n    State[State[\"TAG_NAME\"] = 7] = \"TAG_NAME\";\n    State[State[\"RCDATA_LESS_THAN_SIGN\"] = 8] = \"RCDATA_LESS_THAN_SIGN\";\n    State[State[\"RCDATA_END_TAG_OPEN\"] = 9] = \"RCDATA_END_TAG_OPEN\";\n    State[State[\"RCDATA_END_TAG_NAME\"] = 10] = \"RCDATA_END_TAG_NAME\";\n    State[State[\"RAWTEXT_LESS_THAN_SIGN\"] = 11] = \"RAWTEXT_LESS_THAN_SIGN\";\n    State[State[\"RAWTEXT_END_TAG_OPEN\"] = 12] = \"RAWTEXT_END_TAG_OPEN\";\n    State[State[\"RAWTEXT_END_TAG_NAME\"] = 13] = \"RAWTEXT_END_TAG_NAME\";\n    State[State[\"SCRIPT_DATA_LESS_THAN_SIGN\"] = 14] = \"SCRIPT_DATA_LESS_THAN_SIGN\";\n    State[State[\"SCRIPT_DATA_END_TAG_OPEN\"] = 15] = \"SCRIPT_DATA_END_TAG_OPEN\";\n    State[State[\"SCRIPT_DATA_END_TAG_NAME\"] = 16] = \"SCRIPT_DATA_END_TAG_NAME\";\n    State[State[\"SCRIPT_DATA_ESCAPE_START\"] = 17] = \"SCRIPT_DATA_ESCAPE_START\";\n    State[State[\"SCRIPT_DATA_ESCAPE_START_DASH\"] = 18] = \"SCRIPT_DATA_ESCAPE_START_DASH\";\n    State[State[\"SCRIPT_DATA_ESCAPED\"] = 19] = \"SCRIPT_DATA_ESCAPED\";\n    State[State[\"SCRIPT_DATA_ESCAPED_DASH\"] = 20] = \"SCRIPT_DATA_ESCAPED_DASH\";\n    State[State[\"SCRIPT_DATA_ESCAPED_DASH_DASH\"] = 21] = \"SCRIPT_DATA_ESCAPED_DASH_DASH\";\n    State[State[\"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\"] = 22] = \"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\";\n    State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\"] = 23] = \"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\";\n    State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_NAME\"] = 24] = \"SCRIPT_DATA_ESCAPED_END_TAG_NAME\";\n    State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_START\"] = 25] = \"SCRIPT_DATA_DOUBLE_ESCAPE_START\";\n    State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED\"] = 26] = \"SCRIPT_DATA_DOUBLE_ESCAPED\";\n    State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\"] = 27] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\";\n    State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\"] = 28] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\";\n    State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\"] = 29] = \"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\";\n    State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_END\"] = 30] = \"SCRIPT_DATA_DOUBLE_ESCAPE_END\";\n    State[State[\"BEFORE_ATTRIBUTE_NAME\"] = 31] = \"BEFORE_ATTRIBUTE_NAME\";\n    State[State[\"ATTRIBUTE_NAME\"] = 32] = \"ATTRIBUTE_NAME\";\n    State[State[\"AFTER_ATTRIBUTE_NAME\"] = 33] = \"AFTER_ATTRIBUTE_NAME\";\n    State[State[\"BEFORE_ATTRIBUTE_VALUE\"] = 34] = \"BEFORE_ATTRIBUTE_VALUE\";\n    State[State[\"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"] = 35] = \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\";\n    State[State[\"ATTRIBUTE_VALUE_SINGLE_QUOTED\"] = 36] = \"ATTRIBUTE_VALUE_SINGLE_QUOTED\";\n    State[State[\"ATTRIBUTE_VALUE_UNQUOTED\"] = 37] = \"ATTRIBUTE_VALUE_UNQUOTED\";\n    State[State[\"AFTER_ATTRIBUTE_VALUE_QUOTED\"] = 38] = \"AFTER_ATTRIBUTE_VALUE_QUOTED\";\n    State[State[\"SELF_CLOSING_START_TAG\"] = 39] = \"SELF_CLOSING_START_TAG\";\n    State[State[\"BOGUS_COMMENT\"] = 40] = \"BOGUS_COMMENT\";\n    State[State[\"MARKUP_DECLARATION_OPEN\"] = 41] = \"MARKUP_DECLARATION_OPEN\";\n    State[State[\"COMMENT_START\"] = 42] = \"COMMENT_START\";\n    State[State[\"COMMENT_START_DASH\"] = 43] = \"COMMENT_START_DASH\";\n    State[State[\"COMMENT\"] = 44] = \"COMMENT\";\n    State[State[\"COMMENT_LESS_THAN_SIGN\"] = 45] = \"COMMENT_LESS_THAN_SIGN\";\n    State[State[\"COMMENT_LESS_THAN_SIGN_BANG\"] = 46] = \"COMMENT_LESS_THAN_SIGN_BANG\";\n    State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH\"] = 47] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH\";\n    State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\"] = 48] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\";\n    State[State[\"COMMENT_END_DASH\"] = 49] = \"COMMENT_END_DASH\";\n    State[State[\"COMMENT_END\"] = 50] = \"COMMENT_END\";\n    State[State[\"COMMENT_END_BANG\"] = 51] = \"COMMENT_END_BANG\";\n    State[State[\"DOCTYPE\"] = 52] = \"DOCTYPE\";\n    State[State[\"BEFORE_DOCTYPE_NAME\"] = 53] = \"BEFORE_DOCTYPE_NAME\";\n    State[State[\"DOCTYPE_NAME\"] = 54] = \"DOCTYPE_NAME\";\n    State[State[\"AFTER_DOCTYPE_NAME\"] = 55] = \"AFTER_DOCTYPE_NAME\";\n    State[State[\"AFTER_DOCTYPE_PUBLIC_KEYWORD\"] = 56] = \"AFTER_DOCTYPE_PUBLIC_KEYWORD\";\n    State[State[\"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\"] = 57] = \"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\";\n    State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\"] = 58] = \"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\";\n    State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\"] = 59] = \"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\";\n    State[State[\"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\"] = 60] = \"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\";\n    State[State[\"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\"] = 61] = \"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\";\n    State[State[\"AFTER_DOCTYPE_SYSTEM_KEYWORD\"] = 62] = \"AFTER_DOCTYPE_SYSTEM_KEYWORD\";\n    State[State[\"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\"] = 63] = \"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\";\n    State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\"] = 64] = \"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\";\n    State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\"] = 65] = \"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\";\n    State[State[\"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\"] = 66] = \"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\";\n    State[State[\"BOGUS_DOCTYPE\"] = 67] = \"BOGUS_DOCTYPE\";\n    State[State[\"CDATA_SECTION\"] = 68] = \"CDATA_SECTION\";\n    State[State[\"CDATA_SECTION_BRACKET\"] = 69] = \"CDATA_SECTION_BRACKET\";\n    State[State[\"CDATA_SECTION_END\"] = 70] = \"CDATA_SECTION_END\";\n    State[State[\"CHARACTER_REFERENCE\"] = 71] = \"CHARACTER_REFERENCE\";\n    State[State[\"AMBIGUOUS_AMPERSAND\"] = 72] = \"AMBIGUOUS_AMPERSAND\";\n})(State || (State = {}));\n//Tokenizer initial states for different modes\nexport const TokenizerMode = {\n    DATA: State.DATA,\n    RCDATA: State.RCDATA,\n    RAWTEXT: State.RAWTEXT,\n    SCRIPT_DATA: State.SCRIPT_DATA,\n    PLAINTEXT: State.PLAINTEXT,\n    CDATA_SECTION: State.CDATA_SECTION,\n};\n//Utils\n//OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline\n//this functions if they will be situated in another module due to context switch.\n//Always perform inlining check before modifying this functions ('node --trace-inlining').\nfunction isAsciiDigit(cp) {\n    return cp >= $.DIGIT_0 && cp <= $.DIGIT_9;\n}\nfunction isAsciiUpper(cp) {\n    return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_Z;\n}\nfunction isAsciiLower(cp) {\n    return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_Z;\n}\nfunction isAsciiLetter(cp) {\n    return isAsciiLower(cp) || isAsciiUpper(cp);\n}\nfunction isAsciiAlphaNumeric(cp) {\n    return isAsciiLetter(cp) || isAsciiDigit(cp);\n}\nfunction toAsciiLower(cp) {\n    return cp + 32;\n}\nfunction isWhitespace(cp) {\n    return cp === $.SPACE || cp === $.LINE_FEED || cp === $.TABULATION || cp === $.FORM_FEED;\n}\nfunction isScriptDataDoubleEscapeSequenceEnd(cp) {\n    return isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN;\n}\nfunction getErrorForNumericCharacterReference(code) {\n    if (code === $.NULL) {\n        return ERR.nullCharacterReference;\n    }\n    else if (code > 1114111) {\n        return ERR.characterReferenceOutsideUnicodeRange;\n    }\n    else if (isSurrogate(code)) {\n        return ERR.surrogateCharacterReference;\n    }\n    else if (isUndefinedCodePoint(code)) {\n        return ERR.noncharacterCharacterReference;\n    }\n    else if (isControlCodePoint(code) || code === $.CARRIAGE_RETURN) {\n        return ERR.controlCharacterReference;\n    }\n    return null;\n}\n//Tokenizer\nexport class Tokenizer {\n    constructor(options, handler) {\n        this.options = options;\n        this.handler = handler;\n        this.paused = false;\n        /** Ensures that the parsing loop isn't run multiple times at once. */\n        this.inLoop = false;\n        /**\n         * Indicates that the current adjusted node exists, is not an element in the HTML namespace,\n         * and that it is not an integration point for either MathML or HTML.\n         *\n         * @see {@link https://html.spec.whatwg.org/multipage/parsing.html#tree-construction}\n         */\n        this.inForeignNode = false;\n        this.lastStartTagName = '';\n        this.active = false;\n        this.state = State.DATA;\n        this.returnState = State.DATA;\n        this.entityStartPos = 0;\n        this.consumedAfterSnapshot = -1;\n        this.currentCharacterToken = null;\n        this.currentToken = null;\n        this.currentAttr = { name: '', value: '' };\n        this.preprocessor = new Preprocessor(handler);\n        this.currentLocation = this.getCurrentLocation(-1);\n        this.entityDecoder = new EntityDecoder(htmlDecodeTree, (cp, consumed) => {\n            // Note: Set `pos` _before_ flushing, as flushing might drop\n            // the current chunk and invalidate `entityStartPos`.\n            this.preprocessor.pos = this.entityStartPos + consumed - 1;\n            this._flushCodePointConsumedAsCharacterReference(cp);\n        }, handler.onParseError\n            ? {\n                missingSemicolonAfterCharacterReference: () => {\n                    this._err(ERR.missingSemicolonAfterCharacterReference, 1);\n                },\n                absenceOfDigitsInNumericCharacterReference: (consumed) => {\n                    this._err(ERR.absenceOfDigitsInNumericCharacterReference, this.entityStartPos - this.preprocessor.pos + consumed);\n                },\n                validateNumericCharacterReference: (code) => {\n                    const error = getErrorForNumericCharacterReference(code);\n                    if (error)\n                        this._err(error, 1);\n                },\n            }\n            : undefined);\n    }\n    //Errors\n    _err(code, cpOffset = 0) {\n        var _a, _b;\n        (_b = (_a = this.handler).onParseError) === null || _b === void 0 ? void 0 : _b.call(_a, this.preprocessor.getError(code, cpOffset));\n    }\n    // NOTE: `offset` may never run across line boundaries.\n    getCurrentLocation(offset) {\n        if (!this.options.sourceCodeLocationInfo) {\n            return null;\n        }\n        return {\n            startLine: this.preprocessor.line,\n            startCol: this.preprocessor.col - offset,\n            startOffset: this.preprocessor.offset - offset,\n            endLine: -1,\n            endCol: -1,\n            endOffset: -1,\n        };\n    }\n    _runParsingLoop() {\n        if (this.inLoop)\n            return;\n        this.inLoop = true;\n        while (this.active && !this.paused) {\n            this.consumedAfterSnapshot = 0;\n            const cp = this._consume();\n            if (!this._ensureHibernation()) {\n                this._callState(cp);\n            }\n        }\n        this.inLoop = false;\n    }\n    //API\n    pause() {\n        this.paused = true;\n    }\n    resume(writeCallback) {\n        if (!this.paused) {\n            throw new Error('Parser was already resumed');\n        }\n        this.paused = false;\n        // Necessary for synchronous resume.\n        if (this.inLoop)\n            return;\n        this._runParsingLoop();\n        if (!this.paused) {\n            writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n        }\n    }\n    write(chunk, isLastChunk, writeCallback) {\n        this.active = true;\n        this.preprocessor.write(chunk, isLastChunk);\n        this._runParsingLoop();\n        if (!this.paused) {\n            writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n        }\n    }\n    insertHtmlAtCurrentPos(chunk) {\n        this.active = true;\n        this.preprocessor.insertHtmlAtCurrentPos(chunk);\n        this._runParsingLoop();\n    }\n    //Hibernation\n    _ensureHibernation() {\n        if (this.preprocessor.endOfChunkHit) {\n            this.preprocessor.retreat(this.consumedAfterSnapshot);\n            this.consumedAfterSnapshot = 0;\n            this.active = false;\n            return true;\n        }\n        return false;\n    }\n    //Consumption\n    _consume() {\n        this.consumedAfterSnapshot++;\n        return this.preprocessor.advance();\n    }\n    _advanceBy(count) {\n        this.consumedAfterSnapshot += count;\n        for (let i = 0; i < count; i++) {\n            this.preprocessor.advance();\n        }\n    }\n    _consumeSequenceIfMatch(pattern, caseSensitive) {\n        if (this.preprocessor.startsWith(pattern, caseSensitive)) {\n            // We will already have consumed one character before calling this method.\n            this._advanceBy(pattern.length - 1);\n            return true;\n        }\n        return false;\n    }\n    //Token creation\n    _createStartTagToken() {\n        this.currentToken = {\n            type: TokenType.START_TAG,\n            tagName: '',\n            tagID: TAG_ID.UNKNOWN,\n            selfClosing: false,\n            ackSelfClosing: false,\n            attrs: [],\n            location: this.getCurrentLocation(1),\n        };\n    }\n    _createEndTagToken() {\n        this.currentToken = {\n            type: TokenType.END_TAG,\n            tagName: '',\n            tagID: TAG_ID.UNKNOWN,\n            selfClosing: false,\n            ackSelfClosing: false,\n            attrs: [],\n            location: this.getCurrentLocation(2),\n        };\n    }\n    _createCommentToken(offset) {\n        this.currentToken = {\n            type: TokenType.COMMENT,\n            data: '',\n            location: this.getCurrentLocation(offset),\n        };\n    }\n    _createDoctypeToken(initialName) {\n        this.currentToken = {\n            type: TokenType.DOCTYPE,\n            name: initialName,\n            forceQuirks: false,\n            publicId: null,\n            systemId: null,\n            location: this.currentLocation,\n        };\n    }\n    _createCharacterToken(type, chars) {\n        this.currentCharacterToken = {\n            type,\n            chars,\n            location: this.currentLocation,\n        };\n    }\n    //Tag attributes\n    _createAttr(attrNameFirstCh) {\n        this.currentAttr = {\n            name: attrNameFirstCh,\n            value: '',\n        };\n        this.currentLocation = this.getCurrentLocation(0);\n    }\n    _leaveAttrName() {\n        var _a;\n        var _b;\n        const token = this.currentToken;\n        if (getTokenAttr(token, this.currentAttr.name) === null) {\n            token.attrs.push(this.currentAttr);\n            if (token.location && this.currentLocation) {\n                const attrLocations = ((_a = (_b = token.location).attrs) !== null && _a !== void 0 ? _a : (_b.attrs = Object.create(null)));\n                attrLocations[this.currentAttr.name] = this.currentLocation;\n                // Set end location\n                this._leaveAttrValue();\n            }\n        }\n        else {\n            this._err(ERR.duplicateAttribute);\n        }\n    }\n    _leaveAttrValue() {\n        if (this.currentLocation) {\n            this.currentLocation.endLine = this.preprocessor.line;\n            this.currentLocation.endCol = this.preprocessor.col;\n            this.currentLocation.endOffset = this.preprocessor.offset;\n        }\n    }\n    //Token emission\n    prepareToken(ct) {\n        this._emitCurrentCharacterToken(ct.location);\n        this.currentToken = null;\n        if (ct.location) {\n            ct.location.endLine = this.preprocessor.line;\n            ct.location.endCol = this.preprocessor.col + 1;\n            ct.location.endOffset = this.preprocessor.offset + 1;\n        }\n        this.currentLocation = this.getCurrentLocation(-1);\n    }\n    emitCurrentTagToken() {\n        const ct = this.currentToken;\n        this.prepareToken(ct);\n        ct.tagID = getTagID(ct.tagName);\n        if (ct.type === TokenType.START_TAG) {\n            this.lastStartTagName = ct.tagName;\n            this.handler.onStartTag(ct);\n        }\n        else {\n            if (ct.attrs.length > 0) {\n                this._err(ERR.endTagWithAttributes);\n            }\n            if (ct.selfClosing) {\n                this._err(ERR.endTagWithTrailingSolidus);\n            }\n            this.handler.onEndTag(ct);\n        }\n        this.preprocessor.dropParsedChunk();\n    }\n    emitCurrentComment(ct) {\n        this.prepareToken(ct);\n        this.handler.onComment(ct);\n        this.preprocessor.dropParsedChunk();\n    }\n    emitCurrentDoctype(ct) {\n        this.prepareToken(ct);\n        this.handler.onDoctype(ct);\n        this.preprocessor.dropParsedChunk();\n    }\n    _emitCurrentCharacterToken(nextLocation) {\n        if (this.currentCharacterToken) {\n            //NOTE: if we have a pending character token, make it's end location equal to the\n            //current token's start location.\n            if (nextLocation && this.currentCharacterToken.location) {\n                this.currentCharacterToken.location.endLine = nextLocation.startLine;\n                this.currentCharacterToken.location.endCol = nextLocation.startCol;\n                this.currentCharacterToken.location.endOffset = nextLocation.startOffset;\n            }\n            switch (this.currentCharacterToken.type) {\n                case TokenType.CHARACTER: {\n                    this.handler.onCharacter(this.currentCharacterToken);\n                    break;\n                }\n                case TokenType.NULL_CHARACTER: {\n                    this.handler.onNullCharacter(this.currentCharacterToken);\n                    break;\n                }\n                case TokenType.WHITESPACE_CHARACTER: {\n                    this.handler.onWhitespaceCharacter(this.currentCharacterToken);\n                    break;\n                }\n            }\n            this.currentCharacterToken = null;\n        }\n    }\n    _emitEOFToken() {\n        const location = this.getCurrentLocation(0);\n        if (location) {\n            location.endLine = location.startLine;\n            location.endCol = location.startCol;\n            location.endOffset = location.startOffset;\n        }\n        this._emitCurrentCharacterToken(location);\n        this.handler.onEof({ type: TokenType.EOF, location });\n        this.active = false;\n    }\n    //Characters emission\n    //OPTIMIZATION: The specification uses only one type of character token (one token per character).\n    //This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters.\n    //If we have a sequence of characters that belong to the same group, the parser can process it\n    //as a single solid character token.\n    //So, there are 3 types of character tokens in parse5:\n    //1)TokenType.NULL_CHARACTER - \\u0000-character sequences (e.g. '\\u0000\\u0000\\u0000')\n    //2)TokenType.WHITESPACE_CHARACTER - any whitespace/new-line character sequences (e.g. '\\n  \\r\\t   \\f')\n    //3)TokenType.CHARACTER - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^')\n    _appendCharToCurrentCharacterToken(type, ch) {\n        if (this.currentCharacterToken) {\n            if (this.currentCharacterToken.type === type) {\n                this.currentCharacterToken.chars += ch;\n                return;\n            }\n            else {\n                this.currentLocation = this.getCurrentLocation(0);\n                this._emitCurrentCharacterToken(this.currentLocation);\n                this.preprocessor.dropParsedChunk();\n            }\n        }\n        this._createCharacterToken(type, ch);\n    }\n    _emitCodePoint(cp) {\n        const type = isWhitespace(cp)\n            ? TokenType.WHITESPACE_CHARACTER\n            : cp === $.NULL\n                ? TokenType.NULL_CHARACTER\n                : TokenType.CHARACTER;\n        this._appendCharToCurrentCharacterToken(type, String.fromCodePoint(cp));\n    }\n    //NOTE: used when we emit characters explicitly.\n    //This is always for non-whitespace and non-null characters, which allows us to avoid additional checks.\n    _emitChars(ch) {\n        this._appendCharToCurrentCharacterToken(TokenType.CHARACTER, ch);\n    }\n    // Character reference helpers\n    _startCharacterReference() {\n        this.returnState = this.state;\n        this.state = State.CHARACTER_REFERENCE;\n        this.entityStartPos = this.preprocessor.pos;\n        this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute() ? DecodingMode.Attribute : DecodingMode.Legacy);\n    }\n    _isCharacterReferenceInAttribute() {\n        return (this.returnState === State.ATTRIBUTE_VALUE_DOUBLE_QUOTED ||\n            this.returnState === State.ATTRIBUTE_VALUE_SINGLE_QUOTED ||\n            this.returnState === State.ATTRIBUTE_VALUE_UNQUOTED);\n    }\n    _flushCodePointConsumedAsCharacterReference(cp) {\n        if (this._isCharacterReferenceInAttribute()) {\n            this.currentAttr.value += String.fromCodePoint(cp);\n        }\n        else {\n            this._emitCodePoint(cp);\n        }\n    }\n    // Calling states this way turns out to be much faster than any other approach.\n    _callState(cp) {\n        switch (this.state) {\n            case State.DATA: {\n                this._stateData(cp);\n                break;\n            }\n            case State.RCDATA: {\n                this._stateRcdata(cp);\n                break;\n            }\n            case State.RAWTEXT: {\n                this._stateRawtext(cp);\n                break;\n            }\n            case State.SCRIPT_DATA: {\n                this._stateScriptData(cp);\n                break;\n            }\n            case State.PLAINTEXT: {\n                this._statePlaintext(cp);\n                break;\n            }\n            case State.TAG_OPEN: {\n                this._stateTagOpen(cp);\n                break;\n            }\n            case State.END_TAG_OPEN: {\n                this._stateEndTagOpen(cp);\n                break;\n            }\n            case State.TAG_NAME: {\n                this._stateTagName(cp);\n                break;\n            }\n            case State.RCDATA_LESS_THAN_SIGN: {\n                this._stateRcdataLessThanSign(cp);\n                break;\n            }\n            case State.RCDATA_END_TAG_OPEN: {\n                this._stateRcdataEndTagOpen(cp);\n                break;\n            }\n            case State.RCDATA_END_TAG_NAME: {\n                this._stateRcdataEndTagName(cp);\n                break;\n            }\n            case State.RAWTEXT_LESS_THAN_SIGN: {\n                this._stateRawtextLessThanSign(cp);\n                break;\n            }\n            case State.RAWTEXT_END_TAG_OPEN: {\n                this._stateRawtextEndTagOpen(cp);\n                break;\n            }\n            case State.RAWTEXT_END_TAG_NAME: {\n                this._stateRawtextEndTagName(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_LESS_THAN_SIGN: {\n                this._stateScriptDataLessThanSign(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_END_TAG_OPEN: {\n                this._stateScriptDataEndTagOpen(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_END_TAG_NAME: {\n                this._stateScriptDataEndTagName(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPE_START: {\n                this._stateScriptDataEscapeStart(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPE_START_DASH: {\n                this._stateScriptDataEscapeStartDash(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPED: {\n                this._stateScriptDataEscaped(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPED_DASH: {\n                this._stateScriptDataEscapedDash(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPED_DASH_DASH: {\n                this._stateScriptDataEscapedDashDash(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN: {\n                this._stateScriptDataEscapedLessThanSign(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN: {\n                this._stateScriptDataEscapedEndTagOpen(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPED_END_TAG_NAME: {\n                this._stateScriptDataEscapedEndTagName(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_DOUBLE_ESCAPE_START: {\n                this._stateScriptDataDoubleEscapeStart(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_DOUBLE_ESCAPED: {\n                this._stateScriptDataDoubleEscaped(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH: {\n                this._stateScriptDataDoubleEscapedDash(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH: {\n                this._stateScriptDataDoubleEscapedDashDash(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN: {\n                this._stateScriptDataDoubleEscapedLessThanSign(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_DOUBLE_ESCAPE_END: {\n                this._stateScriptDataDoubleEscapeEnd(cp);\n                break;\n            }\n            case State.BEFORE_ATTRIBUTE_NAME: {\n                this._stateBeforeAttributeName(cp);\n                break;\n            }\n            case State.ATTRIBUTE_NAME: {\n                this._stateAttributeName(cp);\n                break;\n            }\n            case State.AFTER_ATTRIBUTE_NAME: {\n                this._stateAfterAttributeName(cp);\n                break;\n            }\n            case State.BEFORE_ATTRIBUTE_VALUE: {\n                this._stateBeforeAttributeValue(cp);\n                break;\n            }\n            case State.ATTRIBUTE_VALUE_DOUBLE_QUOTED: {\n                this._stateAttributeValueDoubleQuoted(cp);\n                break;\n            }\n            case State.ATTRIBUTE_VALUE_SINGLE_QUOTED: {\n                this._stateAttributeValueSingleQuoted(cp);\n                break;\n            }\n            case State.ATTRIBUTE_VALUE_UNQUOTED: {\n                this._stateAttributeValueUnquoted(cp);\n                break;\n            }\n            case State.AFTER_ATTRIBUTE_VALUE_QUOTED: {\n                this._stateAfterAttributeValueQuoted(cp);\n                break;\n            }\n            case State.SELF_CLOSING_START_TAG: {\n                this._stateSelfClosingStartTag(cp);\n                break;\n            }\n            case State.BOGUS_COMMENT: {\n                this._stateBogusComment(cp);\n                break;\n            }\n            case State.MARKUP_DECLARATION_OPEN: {\n                this._stateMarkupDeclarationOpen(cp);\n                break;\n            }\n            case State.COMMENT_START: {\n                this._stateCommentStart(cp);\n                break;\n            }\n            case State.COMMENT_START_DASH: {\n                this._stateCommentStartDash(cp);\n                break;\n            }\n            case State.COMMENT: {\n                this._stateComment(cp);\n                break;\n            }\n            case State.COMMENT_LESS_THAN_SIGN: {\n                this._stateCommentLessThanSign(cp);\n                break;\n            }\n            case State.COMMENT_LESS_THAN_SIGN_BANG: {\n                this._stateCommentLessThanSignBang(cp);\n                break;\n            }\n            case State.COMMENT_LESS_THAN_SIGN_BANG_DASH: {\n                this._stateCommentLessThanSignBangDash(cp);\n                break;\n            }\n            case State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH: {\n                this._stateCommentLessThanSignBangDashDash(cp);\n                break;\n            }\n            case State.COMMENT_END_DASH: {\n                this._stateCommentEndDash(cp);\n                break;\n            }\n            case State.COMMENT_END: {\n                this._stateCommentEnd(cp);\n                break;\n            }\n            case State.COMMENT_END_BANG: {\n                this._stateCommentEndBang(cp);\n                break;\n            }\n            case State.DOCTYPE: {\n                this._stateDoctype(cp);\n                break;\n            }\n            case State.BEFORE_DOCTYPE_NAME: {\n                this._stateBeforeDoctypeName(cp);\n                break;\n            }\n            case State.DOCTYPE_NAME: {\n                this._stateDoctypeName(cp);\n                break;\n            }\n            case State.AFTER_DOCTYPE_NAME: {\n                this._stateAfterDoctypeName(cp);\n                break;\n            }\n            case State.AFTER_DOCTYPE_PUBLIC_KEYWORD: {\n                this._stateAfterDoctypePublicKeyword(cp);\n                break;\n            }\n            case State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER: {\n                this._stateBeforeDoctypePublicIdentifier(cp);\n                break;\n            }\n            case State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED: {\n                this._stateDoctypePublicIdentifierDoubleQuoted(cp);\n                break;\n            }\n            case State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED: {\n                this._stateDoctypePublicIdentifierSingleQuoted(cp);\n                break;\n            }\n            case State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER: {\n                this._stateAfterDoctypePublicIdentifier(cp);\n                break;\n            }\n            case State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS: {\n                this._stateBetweenDoctypePublicAndSystemIdentifiers(cp);\n                break;\n            }\n            case State.AFTER_DOCTYPE_SYSTEM_KEYWORD: {\n                this._stateAfterDoctypeSystemKeyword(cp);\n                break;\n            }\n            case State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER: {\n                this._stateBeforeDoctypeSystemIdentifier(cp);\n                break;\n            }\n            case State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED: {\n                this._stateDoctypeSystemIdentifierDoubleQuoted(cp);\n                break;\n            }\n            case State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED: {\n                this._stateDoctypeSystemIdentifierSingleQuoted(cp);\n                break;\n            }\n            case State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER: {\n                this._stateAfterDoctypeSystemIdentifier(cp);\n                break;\n            }\n            case State.BOGUS_DOCTYPE: {\n                this._stateBogusDoctype(cp);\n                break;\n            }\n            case State.CDATA_SECTION: {\n                this._stateCdataSection(cp);\n                break;\n            }\n            case State.CDATA_SECTION_BRACKET: {\n                this._stateCdataSectionBracket(cp);\n                break;\n            }\n            case State.CDATA_SECTION_END: {\n                this._stateCdataSectionEnd(cp);\n                break;\n            }\n            case State.CHARACTER_REFERENCE: {\n                this._stateCharacterReference();\n                break;\n            }\n            case State.AMBIGUOUS_AMPERSAND: {\n                this._stateAmbiguousAmpersand(cp);\n                break;\n            }\n            default: {\n                throw new Error('Unknown state');\n            }\n        }\n    }\n    // State machine\n    // Data state\n    //------------------------------------------------------------------\n    _stateData(cp) {\n        switch (cp) {\n            case $.LESS_THAN_SIGN: {\n                this.state = State.TAG_OPEN;\n                break;\n            }\n            case $.AMPERSAND: {\n                this._startCharacterReference();\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this._emitCodePoint(cp);\n                break;\n            }\n            case $.EOF: {\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    //  RCDATA state\n    //------------------------------------------------------------------\n    _stateRcdata(cp) {\n        switch (cp) {\n            case $.AMPERSAND: {\n                this._startCharacterReference();\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                this.state = State.RCDATA_LESS_THAN_SIGN;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // RAWTEXT state\n    //------------------------------------------------------------------\n    _stateRawtext(cp) {\n        switch (cp) {\n            case $.LESS_THAN_SIGN: {\n                this.state = State.RAWTEXT_LESS_THAN_SIGN;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Script data state\n    //------------------------------------------------------------------\n    _stateScriptData(cp) {\n        switch (cp) {\n            case $.LESS_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA_LESS_THAN_SIGN;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // PLAINTEXT state\n    //------------------------------------------------------------------\n    _statePlaintext(cp) {\n        switch (cp) {\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Tag open state\n    //------------------------------------------------------------------\n    _stateTagOpen(cp) {\n        if (isAsciiLetter(cp)) {\n            this._createStartTagToken();\n            this.state = State.TAG_NAME;\n            this._stateTagName(cp);\n        }\n        else\n            switch (cp) {\n                case $.EXCLAMATION_MARK: {\n                    this.state = State.MARKUP_DECLARATION_OPEN;\n                    break;\n                }\n                case $.SOLIDUS: {\n                    this.state = State.END_TAG_OPEN;\n                    break;\n                }\n                case $.QUESTION_MARK: {\n                    this._err(ERR.unexpectedQuestionMarkInsteadOfTagName);\n                    this._createCommentToken(1);\n                    this.state = State.BOGUS_COMMENT;\n                    this._stateBogusComment(cp);\n                    break;\n                }\n                case $.EOF: {\n                    this._err(ERR.eofBeforeTagName);\n                    this._emitChars('<');\n                    this._emitEOFToken();\n                    break;\n                }\n                default: {\n                    this._err(ERR.invalidFirstCharacterOfTagName);\n                    this._emitChars('<');\n                    this.state = State.DATA;\n                    this._stateData(cp);\n                }\n            }\n    }\n    // End tag open state\n    //------------------------------------------------------------------\n    _stateEndTagOpen(cp) {\n        if (isAsciiLetter(cp)) {\n            this._createEndTagToken();\n            this.state = State.TAG_NAME;\n            this._stateTagName(cp);\n        }\n        else\n            switch (cp) {\n                case $.GREATER_THAN_SIGN: {\n                    this._err(ERR.missingEndTagName);\n                    this.state = State.DATA;\n                    break;\n                }\n                case $.EOF: {\n                    this._err(ERR.eofBeforeTagName);\n                    this._emitChars('</');\n                    this._emitEOFToken();\n                    break;\n                }\n                default: {\n                    this._err(ERR.invalidFirstCharacterOfTagName);\n                    this._createCommentToken(2);\n                    this.state = State.BOGUS_COMMENT;\n                    this._stateBogusComment(cp);\n                }\n            }\n    }\n    // Tag name state\n    //------------------------------------------------------------------\n    _stateTagName(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this.state = State.BEFORE_ATTRIBUTE_NAME;\n                break;\n            }\n            case $.SOLIDUS: {\n                this.state = State.SELF_CLOSING_START_TAG;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                this.emitCurrentTagToken();\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.tagName += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInTag);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.tagName += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n            }\n        }\n    }\n    // RCDATA less-than sign state\n    //------------------------------------------------------------------\n    _stateRcdataLessThanSign(cp) {\n        if (cp === $.SOLIDUS) {\n            this.state = State.RCDATA_END_TAG_OPEN;\n        }\n        else {\n            this._emitChars('<');\n            this.state = State.RCDATA;\n            this._stateRcdata(cp);\n        }\n    }\n    // RCDATA end tag open state\n    //------------------------------------------------------------------\n    _stateRcdataEndTagOpen(cp) {\n        if (isAsciiLetter(cp)) {\n            this.state = State.RCDATA_END_TAG_NAME;\n            this._stateRcdataEndTagName(cp);\n        }\n        else {\n            this._emitChars('</');\n            this.state = State.RCDATA;\n            this._stateRcdata(cp);\n        }\n    }\n    handleSpecialEndTag(_cp) {\n        if (!this.preprocessor.startsWith(this.lastStartTagName, false)) {\n            return !this._ensureHibernation();\n        }\n        this._createEndTagToken();\n        const token = this.currentToken;\n        token.tagName = this.lastStartTagName;\n        const cp = this.preprocessor.peek(this.lastStartTagName.length);\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this._advanceBy(this.lastStartTagName.length);\n                this.state = State.BEFORE_ATTRIBUTE_NAME;\n                return false;\n            }\n            case $.SOLIDUS: {\n                this._advanceBy(this.lastStartTagName.length);\n                this.state = State.SELF_CLOSING_START_TAG;\n                return false;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._advanceBy(this.lastStartTagName.length);\n                this.emitCurrentTagToken();\n                this.state = State.DATA;\n                return false;\n            }\n            default: {\n                return !this._ensureHibernation();\n            }\n        }\n    }\n    // RCDATA end tag name state\n    //------------------------------------------------------------------\n    _stateRcdataEndTagName(cp) {\n        if (this.handleSpecialEndTag(cp)) {\n            this._emitChars('</');\n            this.state = State.RCDATA;\n            this._stateRcdata(cp);\n        }\n    }\n    // RAWTEXT less-than sign state\n    //------------------------------------------------------------------\n    _stateRawtextLessThanSign(cp) {\n        if (cp === $.SOLIDUS) {\n            this.state = State.RAWTEXT_END_TAG_OPEN;\n        }\n        else {\n            this._emitChars('<');\n            this.state = State.RAWTEXT;\n            this._stateRawtext(cp);\n        }\n    }\n    // RAWTEXT end tag open state\n    //------------------------------------------------------------------\n    _stateRawtextEndTagOpen(cp) {\n        if (isAsciiLetter(cp)) {\n            this.state = State.RAWTEXT_END_TAG_NAME;\n            this._stateRawtextEndTagName(cp);\n        }\n        else {\n            this._emitChars('</');\n            this.state = State.RAWTEXT;\n            this._stateRawtext(cp);\n        }\n    }\n    // RAWTEXT end tag name state\n    //------------------------------------------------------------------\n    _stateRawtextEndTagName(cp) {\n        if (this.handleSpecialEndTag(cp)) {\n            this._emitChars('</');\n            this.state = State.RAWTEXT;\n            this._stateRawtext(cp);\n        }\n    }\n    // Script data less-than sign state\n    //------------------------------------------------------------------\n    _stateScriptDataLessThanSign(cp) {\n        switch (cp) {\n            case $.SOLIDUS: {\n                this.state = State.SCRIPT_DATA_END_TAG_OPEN;\n                break;\n            }\n            case $.EXCLAMATION_MARK: {\n                this.state = State.SCRIPT_DATA_ESCAPE_START;\n                this._emitChars('<!');\n                break;\n            }\n            default: {\n                this._emitChars('<');\n                this.state = State.SCRIPT_DATA;\n                this._stateScriptData(cp);\n            }\n        }\n    }\n    // Script data end tag open state\n    //------------------------------------------------------------------\n    _stateScriptDataEndTagOpen(cp) {\n        if (isAsciiLetter(cp)) {\n            this.state = State.SCRIPT_DATA_END_TAG_NAME;\n            this._stateScriptDataEndTagName(cp);\n        }\n        else {\n            this._emitChars('</');\n            this.state = State.SCRIPT_DATA;\n            this._stateScriptData(cp);\n        }\n    }\n    // Script data end tag name state\n    //------------------------------------------------------------------\n    _stateScriptDataEndTagName(cp) {\n        if (this.handleSpecialEndTag(cp)) {\n            this._emitChars('</');\n            this.state = State.SCRIPT_DATA;\n            this._stateScriptData(cp);\n        }\n    }\n    // Script data escape start state\n    //------------------------------------------------------------------\n    _stateScriptDataEscapeStart(cp) {\n        if (cp === $.HYPHEN_MINUS) {\n            this.state = State.SCRIPT_DATA_ESCAPE_START_DASH;\n            this._emitChars('-');\n        }\n        else {\n            this.state = State.SCRIPT_DATA;\n            this._stateScriptData(cp);\n        }\n    }\n    // Script data escape start dash state\n    //------------------------------------------------------------------\n    _stateScriptDataEscapeStartDash(cp) {\n        if (cp === $.HYPHEN_MINUS) {\n            this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n            this._emitChars('-');\n        }\n        else {\n            this.state = State.SCRIPT_DATA;\n            this._stateScriptData(cp);\n        }\n    }\n    // Script data escaped state\n    //------------------------------------------------------------------\n    _stateScriptDataEscaped(cp) {\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.SCRIPT_DATA_ESCAPED_DASH;\n                this._emitChars('-');\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInScriptHtmlCommentLikeText);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Script data escaped dash state\n    //------------------------------------------------------------------\n    _stateScriptDataEscapedDash(cp) {\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n                this._emitChars('-');\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.state = State.SCRIPT_DATA_ESCAPED;\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInScriptHtmlCommentLikeText);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this.state = State.SCRIPT_DATA_ESCAPED;\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Script data escaped dash dash state\n    //------------------------------------------------------------------\n    _stateScriptDataEscapedDashDash(cp) {\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this._emitChars('-');\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA;\n                this._emitChars('>');\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.state = State.SCRIPT_DATA_ESCAPED;\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInScriptHtmlCommentLikeText);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this.state = State.SCRIPT_DATA_ESCAPED;\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Script data escaped less-than sign state\n    //------------------------------------------------------------------\n    _stateScriptDataEscapedLessThanSign(cp) {\n        if (cp === $.SOLIDUS) {\n            this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;\n        }\n        else if (isAsciiLetter(cp)) {\n            this._emitChars('<');\n            this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_START;\n            this._stateScriptDataDoubleEscapeStart(cp);\n        }\n        else {\n            this._emitChars('<');\n            this.state = State.SCRIPT_DATA_ESCAPED;\n            this._stateScriptDataEscaped(cp);\n        }\n    }\n    // Script data escaped end tag open state\n    //------------------------------------------------------------------\n    _stateScriptDataEscapedEndTagOpen(cp) {\n        if (isAsciiLetter(cp)) {\n            this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_NAME;\n            this._stateScriptDataEscapedEndTagName(cp);\n        }\n        else {\n            this._emitChars('</');\n            this.state = State.SCRIPT_DATA_ESCAPED;\n            this._stateScriptDataEscaped(cp);\n        }\n    }\n    // Script data escaped end tag name state\n    //------------------------------------------------------------------\n    _stateScriptDataEscapedEndTagName(cp) {\n        if (this.handleSpecialEndTag(cp)) {\n            this._emitChars('</');\n            this.state = State.SCRIPT_DATA_ESCAPED;\n            this._stateScriptDataEscaped(cp);\n        }\n    }\n    // Script data double escape start state\n    //------------------------------------------------------------------\n    _stateScriptDataDoubleEscapeStart(cp) {\n        if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n            isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n            this._emitCodePoint(cp);\n            for (let i = 0; i < $$.SCRIPT.length; i++) {\n                this._emitCodePoint(this._consume());\n            }\n            this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n        }\n        else if (!this._ensureHibernation()) {\n            this.state = State.SCRIPT_DATA_ESCAPED;\n            this._stateScriptDataEscaped(cp);\n        }\n    }\n    // Script data double escaped state\n    //------------------------------------------------------------------\n    _stateScriptDataDoubleEscaped(cp) {\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH;\n                this._emitChars('-');\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n                this._emitChars('<');\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInScriptHtmlCommentLikeText);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Script data double escaped dash state\n    //------------------------------------------------------------------\n    _stateScriptDataDoubleEscapedDash(cp) {\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH;\n                this._emitChars('-');\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n                this._emitChars('<');\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInScriptHtmlCommentLikeText);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Script data double escaped dash dash state\n    //------------------------------------------------------------------\n    _stateScriptDataDoubleEscapedDashDash(cp) {\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this._emitChars('-');\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n                this._emitChars('<');\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA;\n                this._emitChars('>');\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInScriptHtmlCommentLikeText);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Script data double escaped less-than sign state\n    //------------------------------------------------------------------\n    _stateScriptDataDoubleEscapedLessThanSign(cp) {\n        if (cp === $.SOLIDUS) {\n            this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_END;\n            this._emitChars('/');\n        }\n        else {\n            this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n            this._stateScriptDataDoubleEscaped(cp);\n        }\n    }\n    // Script data double escape end state\n    //------------------------------------------------------------------\n    _stateScriptDataDoubleEscapeEnd(cp) {\n        if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n            isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n            this._emitCodePoint(cp);\n            for (let i = 0; i < $$.SCRIPT.length; i++) {\n                this._emitCodePoint(this._consume());\n            }\n            this.state = State.SCRIPT_DATA_ESCAPED;\n        }\n        else if (!this._ensureHibernation()) {\n            this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n            this._stateScriptDataDoubleEscaped(cp);\n        }\n    }\n    // Before attribute name state\n    //------------------------------------------------------------------\n    _stateBeforeAttributeName(cp) {\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.SOLIDUS:\n            case $.GREATER_THAN_SIGN:\n            case $.EOF: {\n                this.state = State.AFTER_ATTRIBUTE_NAME;\n                this._stateAfterAttributeName(cp);\n                break;\n            }\n            case $.EQUALS_SIGN: {\n                this._err(ERR.unexpectedEqualsSignBeforeAttributeName);\n                this._createAttr('=');\n                this.state = State.ATTRIBUTE_NAME;\n                break;\n            }\n            default: {\n                this._createAttr('');\n                this.state = State.ATTRIBUTE_NAME;\n                this._stateAttributeName(cp);\n            }\n        }\n    }\n    // Attribute name state\n    //------------------------------------------------------------------\n    _stateAttributeName(cp) {\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED:\n            case $.SOLIDUS:\n            case $.GREATER_THAN_SIGN:\n            case $.EOF: {\n                this._leaveAttrName();\n                this.state = State.AFTER_ATTRIBUTE_NAME;\n                this._stateAfterAttributeName(cp);\n                break;\n            }\n            case $.EQUALS_SIGN: {\n                this._leaveAttrName();\n                this.state = State.BEFORE_ATTRIBUTE_VALUE;\n                break;\n            }\n            case $.QUOTATION_MARK:\n            case $.APOSTROPHE:\n            case $.LESS_THAN_SIGN: {\n                this._err(ERR.unexpectedCharacterInAttributeName);\n                this.currentAttr.name += String.fromCodePoint(cp);\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.currentAttr.name += REPLACEMENT_CHARACTER;\n                break;\n            }\n            default: {\n                this.currentAttr.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n            }\n        }\n    }\n    // After attribute name state\n    //------------------------------------------------------------------\n    _stateAfterAttributeName(cp) {\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.SOLIDUS: {\n                this.state = State.SELF_CLOSING_START_TAG;\n                break;\n            }\n            case $.EQUALS_SIGN: {\n                this.state = State.BEFORE_ATTRIBUTE_VALUE;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                this.emitCurrentTagToken();\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInTag);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._createAttr('');\n                this.state = State.ATTRIBUTE_NAME;\n                this._stateAttributeName(cp);\n            }\n        }\n    }\n    // Before attribute value state\n    //------------------------------------------------------------------\n    _stateBeforeAttributeValue(cp) {\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.QUOTATION_MARK: {\n                this.state = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED;\n                break;\n            }\n            case $.APOSTROPHE: {\n                this.state = State.ATTRIBUTE_VALUE_SINGLE_QUOTED;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.missingAttributeValue);\n                this.state = State.DATA;\n                this.emitCurrentTagToken();\n                break;\n            }\n            default: {\n                this.state = State.ATTRIBUTE_VALUE_UNQUOTED;\n                this._stateAttributeValueUnquoted(cp);\n            }\n        }\n    }\n    // Attribute value (double-quoted) state\n    //------------------------------------------------------------------\n    _stateAttributeValueDoubleQuoted(cp) {\n        switch (cp) {\n            case $.QUOTATION_MARK: {\n                this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n                break;\n            }\n            case $.AMPERSAND: {\n                this._startCharacterReference();\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.currentAttr.value += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInTag);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this.currentAttr.value += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // Attribute value (single-quoted) state\n    //------------------------------------------------------------------\n    _stateAttributeValueSingleQuoted(cp) {\n        switch (cp) {\n            case $.APOSTROPHE: {\n                this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n                break;\n            }\n            case $.AMPERSAND: {\n                this._startCharacterReference();\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.currentAttr.value += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInTag);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this.currentAttr.value += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // Attribute value (unquoted) state\n    //------------------------------------------------------------------\n    _stateAttributeValueUnquoted(cp) {\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this._leaveAttrValue();\n                this.state = State.BEFORE_ATTRIBUTE_NAME;\n                break;\n            }\n            case $.AMPERSAND: {\n                this._startCharacterReference();\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._leaveAttrValue();\n                this.state = State.DATA;\n                this.emitCurrentTagToken();\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.currentAttr.value += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.QUOTATION_MARK:\n            case $.APOSTROPHE:\n            case $.LESS_THAN_SIGN:\n            case $.EQUALS_SIGN:\n            case $.GRAVE_ACCENT: {\n                this._err(ERR.unexpectedCharacterInUnquotedAttributeValue);\n                this.currentAttr.value += String.fromCodePoint(cp);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInTag);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this.currentAttr.value += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // After attribute value (quoted) state\n    //------------------------------------------------------------------\n    _stateAfterAttributeValueQuoted(cp) {\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this._leaveAttrValue();\n                this.state = State.BEFORE_ATTRIBUTE_NAME;\n                break;\n            }\n            case $.SOLIDUS: {\n                this._leaveAttrValue();\n                this.state = State.SELF_CLOSING_START_TAG;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._leaveAttrValue();\n                this.state = State.DATA;\n                this.emitCurrentTagToken();\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInTag);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingWhitespaceBetweenAttributes);\n                this.state = State.BEFORE_ATTRIBUTE_NAME;\n                this._stateBeforeAttributeName(cp);\n            }\n        }\n    }\n    // Self-closing start tag state\n    //------------------------------------------------------------------\n    _stateSelfClosingStartTag(cp) {\n        switch (cp) {\n            case $.GREATER_THAN_SIGN: {\n                const token = this.currentToken;\n                token.selfClosing = true;\n                this.state = State.DATA;\n                this.emitCurrentTagToken();\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInTag);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.unexpectedSolidusInTag);\n                this.state = State.BEFORE_ATTRIBUTE_NAME;\n                this._stateBeforeAttributeName(cp);\n            }\n        }\n    }\n    // Bogus comment state\n    //------------------------------------------------------------------\n    _stateBogusComment(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                this.emitCurrentComment(token);\n                break;\n            }\n            case $.EOF: {\n                this.emitCurrentComment(token);\n                this._emitEOFToken();\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.data += REPLACEMENT_CHARACTER;\n                break;\n            }\n            default: {\n                token.data += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // Markup declaration open state\n    //------------------------------------------------------------------\n    _stateMarkupDeclarationOpen(cp) {\n        if (this._consumeSequenceIfMatch($$.DASH_DASH, true)) {\n            this._createCommentToken($$.DASH_DASH.length + 1);\n            this.state = State.COMMENT_START;\n        }\n        else if (this._consumeSequenceIfMatch($$.DOCTYPE, false)) {\n            // NOTE: Doctypes tokens are created without fixed offsets. We keep track of the moment a doctype *might* start here.\n            this.currentLocation = this.getCurrentLocation($$.DOCTYPE.length + 1);\n            this.state = State.DOCTYPE;\n        }\n        else if (this._consumeSequenceIfMatch($$.CDATA_START, true)) {\n            if (this.inForeignNode) {\n                this.state = State.CDATA_SECTION;\n            }\n            else {\n                this._err(ERR.cdataInHtmlContent);\n                this._createCommentToken($$.CDATA_START.length + 1);\n                this.currentToken.data = '[CDATA[';\n                this.state = State.BOGUS_COMMENT;\n            }\n        }\n        //NOTE: Sequence lookups can be abrupted by hibernation. In that case, lookup\n        //results are no longer valid and we will need to start over.\n        else if (!this._ensureHibernation()) {\n            this._err(ERR.incorrectlyOpenedComment);\n            this._createCommentToken(2);\n            this.state = State.BOGUS_COMMENT;\n            this._stateBogusComment(cp);\n        }\n    }\n    // Comment start state\n    //------------------------------------------------------------------\n    _stateCommentStart(cp) {\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.COMMENT_START_DASH;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.abruptClosingOfEmptyComment);\n                this.state = State.DATA;\n                const token = this.currentToken;\n                this.emitCurrentComment(token);\n                break;\n            }\n            default: {\n                this.state = State.COMMENT;\n                this._stateComment(cp);\n            }\n        }\n    }\n    // Comment start dash state\n    //------------------------------------------------------------------\n    _stateCommentStartDash(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.COMMENT_END;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.abruptClosingOfEmptyComment);\n                this.state = State.DATA;\n                this.emitCurrentComment(token);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInComment);\n                this.emitCurrentComment(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.data += '-';\n                this.state = State.COMMENT;\n                this._stateComment(cp);\n            }\n        }\n    }\n    // Comment state\n    //------------------------------------------------------------------\n    _stateComment(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.COMMENT_END_DASH;\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                token.data += '<';\n                this.state = State.COMMENT_LESS_THAN_SIGN;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.data += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInComment);\n                this.emitCurrentComment(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.data += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // Comment less-than sign state\n    //------------------------------------------------------------------\n    _stateCommentLessThanSign(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.EXCLAMATION_MARK: {\n                token.data += '!';\n                this.state = State.COMMENT_LESS_THAN_SIGN_BANG;\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                token.data += '<';\n                break;\n            }\n            default: {\n                this.state = State.COMMENT;\n                this._stateComment(cp);\n            }\n        }\n    }\n    // Comment less-than sign bang state\n    //------------------------------------------------------------------\n    _stateCommentLessThanSignBang(cp) {\n        if (cp === $.HYPHEN_MINUS) {\n            this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH;\n        }\n        else {\n            this.state = State.COMMENT;\n            this._stateComment(cp);\n        }\n    }\n    // Comment less-than sign bang dash state\n    //------------------------------------------------------------------\n    _stateCommentLessThanSignBangDash(cp) {\n        if (cp === $.HYPHEN_MINUS) {\n            this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;\n        }\n        else {\n            this.state = State.COMMENT_END_DASH;\n            this._stateCommentEndDash(cp);\n        }\n    }\n    // Comment less-than sign bang dash dash state\n    //------------------------------------------------------------------\n    _stateCommentLessThanSignBangDashDash(cp) {\n        if (cp !== $.GREATER_THAN_SIGN && cp !== $.EOF) {\n            this._err(ERR.nestedComment);\n        }\n        this.state = State.COMMENT_END;\n        this._stateCommentEnd(cp);\n    }\n    // Comment end dash state\n    //------------------------------------------------------------------\n    _stateCommentEndDash(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.COMMENT_END;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInComment);\n                this.emitCurrentComment(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.data += '-';\n                this.state = State.COMMENT;\n                this._stateComment(cp);\n            }\n        }\n    }\n    // Comment end state\n    //------------------------------------------------------------------\n    _stateCommentEnd(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                this.emitCurrentComment(token);\n                break;\n            }\n            case $.EXCLAMATION_MARK: {\n                this.state = State.COMMENT_END_BANG;\n                break;\n            }\n            case $.HYPHEN_MINUS: {\n                token.data += '-';\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInComment);\n                this.emitCurrentComment(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.data += '--';\n                this.state = State.COMMENT;\n                this._stateComment(cp);\n            }\n        }\n    }\n    // Comment end bang state\n    //------------------------------------------------------------------\n    _stateCommentEndBang(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                token.data += '--!';\n                this.state = State.COMMENT_END_DASH;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.incorrectlyClosedComment);\n                this.state = State.DATA;\n                this.emitCurrentComment(token);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInComment);\n                this.emitCurrentComment(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.data += '--!';\n                this.state = State.COMMENT;\n                this._stateComment(cp);\n            }\n        }\n    }\n    // DOCTYPE state\n    //------------------------------------------------------------------\n    _stateDoctype(cp) {\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this.state = State.BEFORE_DOCTYPE_NAME;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.BEFORE_DOCTYPE_NAME;\n                this._stateBeforeDoctypeName(cp);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                this._createDoctypeToken(null);\n                const token = this.currentToken;\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingWhitespaceBeforeDoctypeName);\n                this.state = State.BEFORE_DOCTYPE_NAME;\n                this._stateBeforeDoctypeName(cp);\n            }\n        }\n    }\n    // Before DOCTYPE name state\n    //------------------------------------------------------------------\n    _stateBeforeDoctypeName(cp) {\n        if (isAsciiUpper(cp)) {\n            this._createDoctypeToken(String.fromCharCode(toAsciiLower(cp)));\n            this.state = State.DOCTYPE_NAME;\n        }\n        else\n            switch (cp) {\n                case $.SPACE:\n                case $.LINE_FEED:\n                case $.TABULATION:\n                case $.FORM_FEED: {\n                    // Ignore whitespace\n                    break;\n                }\n                case $.NULL: {\n                    this._err(ERR.unexpectedNullCharacter);\n                    this._createDoctypeToken(REPLACEMENT_CHARACTER);\n                    this.state = State.DOCTYPE_NAME;\n                    break;\n                }\n                case $.GREATER_THAN_SIGN: {\n                    this._err(ERR.missingDoctypeName);\n                    this._createDoctypeToken(null);\n                    const token = this.currentToken;\n                    token.forceQuirks = true;\n                    this.emitCurrentDoctype(token);\n                    this.state = State.DATA;\n                    break;\n                }\n                case $.EOF: {\n                    this._err(ERR.eofInDoctype);\n                    this._createDoctypeToken(null);\n                    const token = this.currentToken;\n                    token.forceQuirks = true;\n                    this.emitCurrentDoctype(token);\n                    this._emitEOFToken();\n                    break;\n                }\n                default: {\n                    this._createDoctypeToken(String.fromCodePoint(cp));\n                    this.state = State.DOCTYPE_NAME;\n                }\n            }\n    }\n    // DOCTYPE name state\n    //------------------------------------------------------------------\n    _stateDoctypeName(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this.state = State.AFTER_DOCTYPE_NAME;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                this.emitCurrentDoctype(token);\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.name += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n            }\n        }\n    }\n    // After DOCTYPE name state\n    //------------------------------------------------------------------\n    _stateAfterDoctypeName(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                this.emitCurrentDoctype(token);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                if (this._consumeSequenceIfMatch($$.PUBLIC, false)) {\n                    this.state = State.AFTER_DOCTYPE_PUBLIC_KEYWORD;\n                }\n                else if (this._consumeSequenceIfMatch($$.SYSTEM, false)) {\n                    this.state = State.AFTER_DOCTYPE_SYSTEM_KEYWORD;\n                }\n                //NOTE: sequence lookup can be abrupted by hibernation. In that case lookup\n                //results are no longer valid and we will need to start over.\n                else if (!this._ensureHibernation()) {\n                    this._err(ERR.invalidCharacterSequenceAfterDoctypeName);\n                    token.forceQuirks = true;\n                    this.state = State.BOGUS_DOCTYPE;\n                    this._stateBogusDoctype(cp);\n                }\n            }\n        }\n    }\n    // After DOCTYPE public keyword state\n    //------------------------------------------------------------------\n    _stateAfterDoctypePublicKeyword(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this.state = State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;\n                break;\n            }\n            case $.QUOTATION_MARK: {\n                this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n                token.publicId = '';\n                this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n                break;\n            }\n            case $.APOSTROPHE: {\n                this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n                token.publicId = '';\n                this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.missingDoctypePublicIdentifier);\n                token.forceQuirks = true;\n                this.state = State.DATA;\n                this.emitCurrentDoctype(token);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n                token.forceQuirks = true;\n                this.state = State.BOGUS_DOCTYPE;\n                this._stateBogusDoctype(cp);\n            }\n        }\n    }\n    // Before DOCTYPE public identifier state\n    //------------------------------------------------------------------\n    _stateBeforeDoctypePublicIdentifier(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.QUOTATION_MARK: {\n                token.publicId = '';\n                this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n                break;\n            }\n            case $.APOSTROPHE: {\n                token.publicId = '';\n                this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.missingDoctypePublicIdentifier);\n                token.forceQuirks = true;\n                this.state = State.DATA;\n                this.emitCurrentDoctype(token);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n                token.forceQuirks = true;\n                this.state = State.BOGUS_DOCTYPE;\n                this._stateBogusDoctype(cp);\n            }\n        }\n    }\n    // DOCTYPE public identifier (double-quoted) state\n    //------------------------------------------------------------------\n    _stateDoctypePublicIdentifierDoubleQuoted(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.QUOTATION_MARK: {\n                this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.publicId += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.abruptDoctypePublicIdentifier);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this.state = State.DATA;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.publicId += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // DOCTYPE public identifier (single-quoted) state\n    //------------------------------------------------------------------\n    _stateDoctypePublicIdentifierSingleQuoted(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.APOSTROPHE: {\n                this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.publicId += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.abruptDoctypePublicIdentifier);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this.state = State.DATA;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.publicId += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // After DOCTYPE public identifier state\n    //------------------------------------------------------------------\n    _stateAfterDoctypePublicIdentifier(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this.state = State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                this.emitCurrentDoctype(token);\n                break;\n            }\n            case $.QUOTATION_MARK: {\n                this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n                break;\n            }\n            case $.APOSTROPHE: {\n                this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.state = State.BOGUS_DOCTYPE;\n                this._stateBogusDoctype(cp);\n            }\n        }\n    }\n    // Between DOCTYPE public and system identifiers state\n    //------------------------------------------------------------------\n    _stateBetweenDoctypePublicAndSystemIdentifiers(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.emitCurrentDoctype(token);\n                this.state = State.DATA;\n                break;\n            }\n            case $.QUOTATION_MARK: {\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n                break;\n            }\n            case $.APOSTROPHE: {\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.state = State.BOGUS_DOCTYPE;\n                this._stateBogusDoctype(cp);\n            }\n        }\n    }\n    // After DOCTYPE system keyword state\n    //------------------------------------------------------------------\n    _stateAfterDoctypeSystemKeyword(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this.state = State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;\n                break;\n            }\n            case $.QUOTATION_MARK: {\n                this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n                break;\n            }\n            case $.APOSTROPHE: {\n                this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.missingDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.state = State.DATA;\n                this.emitCurrentDoctype(token);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.state = State.BOGUS_DOCTYPE;\n                this._stateBogusDoctype(cp);\n            }\n        }\n    }\n    // Before DOCTYPE system identifier state\n    //------------------------------------------------------------------\n    _stateBeforeDoctypeSystemIdentifier(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.QUOTATION_MARK: {\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n                break;\n            }\n            case $.APOSTROPHE: {\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.missingDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.state = State.DATA;\n                this.emitCurrentDoctype(token);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.state = State.BOGUS_DOCTYPE;\n                this._stateBogusDoctype(cp);\n            }\n        }\n    }\n    // DOCTYPE system identifier (double-quoted) state\n    //------------------------------------------------------------------\n    _stateDoctypeSystemIdentifierDoubleQuoted(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.QUOTATION_MARK: {\n                this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.systemId += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.abruptDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this.state = State.DATA;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.systemId += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // DOCTYPE system identifier (single-quoted) state\n    //------------------------------------------------------------------\n    _stateDoctypeSystemIdentifierSingleQuoted(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.APOSTROPHE: {\n                this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.systemId += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.abruptDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this.state = State.DATA;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.systemId += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // After DOCTYPE system identifier state\n    //------------------------------------------------------------------\n    _stateAfterDoctypeSystemIdentifier(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.emitCurrentDoctype(token);\n                this.state = State.DATA;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.unexpectedCharacterAfterDoctypeSystemIdentifier);\n                this.state = State.BOGUS_DOCTYPE;\n                this._stateBogusDoctype(cp);\n            }\n        }\n    }\n    // Bogus DOCTYPE state\n    //------------------------------------------------------------------\n    _stateBogusDoctype(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.GREATER_THAN_SIGN: {\n                this.emitCurrentDoctype(token);\n                this.state = State.DATA;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                break;\n            }\n            case $.EOF: {\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    // CDATA section state\n    //------------------------------------------------------------------\n    _stateCdataSection(cp) {\n        switch (cp) {\n            case $.RIGHT_SQUARE_BRACKET: {\n                this.state = State.CDATA_SECTION_BRACKET;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInCdata);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // CDATA section bracket state\n    //------------------------------------------------------------------\n    _stateCdataSectionBracket(cp) {\n        if (cp === $.RIGHT_SQUARE_BRACKET) {\n            this.state = State.CDATA_SECTION_END;\n        }\n        else {\n            this._emitChars(']');\n            this.state = State.CDATA_SECTION;\n            this._stateCdataSection(cp);\n        }\n    }\n    // CDATA section end state\n    //------------------------------------------------------------------\n    _stateCdataSectionEnd(cp) {\n        switch (cp) {\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                break;\n            }\n            case $.RIGHT_SQUARE_BRACKET: {\n                this._emitChars(']');\n                break;\n            }\n            default: {\n                this._emitChars(']]');\n                this.state = State.CDATA_SECTION;\n                this._stateCdataSection(cp);\n            }\n        }\n    }\n    // Character reference state\n    //------------------------------------------------------------------\n    _stateCharacterReference() {\n        let length = this.entityDecoder.write(this.preprocessor.html, this.preprocessor.pos);\n        if (length < 0) {\n            if (this.preprocessor.lastChunkWritten) {\n                length = this.entityDecoder.end();\n            }\n            else {\n                // Wait for the rest of the entity.\n                this.active = false;\n                // Mark the entire buffer as read.\n                this.preprocessor.pos = this.preprocessor.html.length - 1;\n                this.consumedAfterSnapshot = 0;\n                this.preprocessor.endOfChunkHit = true;\n                return;\n            }\n        }\n        if (length === 0) {\n            // This was not a valid entity. Go back to the beginning, and\n            // figure out what to do.\n            this.preprocessor.pos = this.entityStartPos;\n            this._flushCodePointConsumedAsCharacterReference($.AMPERSAND);\n            this.state =\n                !this._isCharacterReferenceInAttribute() && isAsciiAlphaNumeric(this.preprocessor.peek(1))\n                    ? State.AMBIGUOUS_AMPERSAND\n                    : this.returnState;\n        }\n        else {\n            // We successfully parsed an entity. Switch to the return state.\n            this.state = this.returnState;\n        }\n    }\n    // Ambiguos ampersand state\n    //------------------------------------------------------------------\n    _stateAmbiguousAmpersand(cp) {\n        if (isAsciiAlphaNumeric(cp)) {\n            this._flushCodePointConsumedAsCharacterReference(cp);\n        }\n        else {\n            if (cp === $.SEMICOLON) {\n                this._err(ERR.unknownNamedCharacterReference);\n            }\n            this.state = this.returnState;\n            this._callState(cp);\n        }\n    }\n}\n", "import { TAG_ID as $, NS, NUMBERED_HEADERS } from '../common/html.js';\n//Element utils\nconst IMPLICIT_END_TAG_REQUIRED = new Set([$.DD, $.DT, $.LI, $.OPTGROUP, $.OPTION, $.P, $.RB, $.RP, $.RT, $.RTC]);\nconst IMPLICIT_END_TAG_REQUIRED_THOROUGHLY = new Set([\n    ...IMPLICIT_END_TAG_REQUIRED,\n    $.CAPTION,\n    $.COLGROUP,\n    $.TBODY,\n    $.TD,\n    $.TFOOT,\n    $.TH,\n    $.THEAD,\n    $.TR,\n]);\nconst SCOPING_ELEMENTS_HTML = new Set([\n    $.APPLET,\n    $.CAPTION,\n    $.HTML,\n    $.MARQUEE,\n    $.OBJECT,\n    $.TABLE,\n    $.TD,\n    $.TEMPLATE,\n    $.TH,\n]);\nconst SCOPING_ELEMENTS_HTML_LIST = new Set([...SCOPING_ELEMENTS_HTML, $.OL, $.UL]);\nconst SCOPING_ELEMENTS_HTML_BUTTON = new Set([...SCOPING_ELEMENTS_HTML, $.BUTTON]);\nconst SCOPING_ELEMENTS_MATHML = new Set([$.ANNOTATION_XML, $.MI, $.MN, $.MO, $.MS, $.MTEXT]);\nconst SCOPING_ELEMENTS_SVG = new Set([$.DESC, $.FOREIGN_OBJECT, $.TITLE]);\nconst TABLE_ROW_CONTEXT = new Set([$.TR, $.TEMPLATE, $.HTML]);\nconst TABLE_BODY_CONTEXT = new Set([$.TBODY, $.TFOOT, $.THEAD, $.TEMPLATE, $.HTML]);\nconst TABLE_CONTEXT = new Set([$.TABLE, $.TEMPLATE, $.HTML]);\nconst TABLE_CELLS = new Set([$.TD, $.TH]);\n//Stack of open elements\nexport class OpenElementStack {\n    get currentTmplContentOrNode() {\n        return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current;\n    }\n    constructor(document, treeAdapter, handler) {\n        this.treeAdapter = treeAdapter;\n        this.handler = handler;\n        this.items = [];\n        this.tagIDs = [];\n        this.stackTop = -1;\n        this.tmplCount = 0;\n        this.currentTagId = $.UNKNOWN;\n        this.current = document;\n    }\n    //Index of element\n    _indexOf(element) {\n        return this.items.lastIndexOf(element, this.stackTop);\n    }\n    //Update current element\n    _isInTemplate() {\n        return this.currentTagId === $.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === NS.HTML;\n    }\n    _updateCurrentElement() {\n        this.current = this.items[this.stackTop];\n        this.currentTagId = this.tagIDs[this.stackTop];\n    }\n    //Mutations\n    push(element, tagID) {\n        this.stackTop++;\n        this.items[this.stackTop] = element;\n        this.current = element;\n        this.tagIDs[this.stackTop] = tagID;\n        this.currentTagId = tagID;\n        if (this._isInTemplate()) {\n            this.tmplCount++;\n        }\n        this.handler.onItemPush(element, tagID, true);\n    }\n    pop() {\n        const popped = this.current;\n        if (this.tmplCount > 0 && this._isInTemplate()) {\n            this.tmplCount--;\n        }\n        this.stackTop--;\n        this._updateCurrentElement();\n        this.handler.onItemPop(popped, true);\n    }\n    replace(oldElement, newElement) {\n        const idx = this._indexOf(oldElement);\n        this.items[idx] = newElement;\n        if (idx === this.stackTop) {\n            this.current = newElement;\n        }\n    }\n    insertAfter(referenceElement, newElement, newElementID) {\n        const insertionIdx = this._indexOf(referenceElement) + 1;\n        this.items.splice(insertionIdx, 0, newElement);\n        this.tagIDs.splice(insertionIdx, 0, newElementID);\n        this.stackTop++;\n        if (insertionIdx === this.stackTop) {\n            this._updateCurrentElement();\n        }\n        if (this.current && this.currentTagId !== undefined) {\n            this.handler.onItemPush(this.current, this.currentTagId, insertionIdx === this.stackTop);\n        }\n    }\n    popUntilTagNamePopped(tagName) {\n        let targetIdx = this.stackTop + 1;\n        do {\n            targetIdx = this.tagIDs.lastIndexOf(tagName, targetIdx - 1);\n        } while (targetIdx > 0 && this.treeAdapter.getNamespaceURI(this.items[targetIdx]) !== NS.HTML);\n        this.shortenToLength(Math.max(targetIdx, 0));\n    }\n    shortenToLength(idx) {\n        while (this.stackTop >= idx) {\n            const popped = this.current;\n            if (this.tmplCount > 0 && this._isInTemplate()) {\n                this.tmplCount -= 1;\n            }\n            this.stackTop--;\n            this._updateCurrentElement();\n            this.handler.onItemPop(popped, this.stackTop < idx);\n        }\n    }\n    popUntilElementPopped(element) {\n        const idx = this._indexOf(element);\n        this.shortenToLength(Math.max(idx, 0));\n    }\n    popUntilPopped(tagNames, targetNS) {\n        const idx = this._indexOfTagNames(tagNames, targetNS);\n        this.shortenToLength(Math.max(idx, 0));\n    }\n    popUntilNumberedHeaderPopped() {\n        this.popUntilPopped(NUMBERED_HEADERS, NS.HTML);\n    }\n    popUntilTableCellPopped() {\n        this.popUntilPopped(TABLE_CELLS, NS.HTML);\n    }\n    popAllUpToHtmlElement() {\n        //NOTE: here we assume that the root <html> element is always first in the open element stack, so\n        //we perform this fast stack clean up.\n        this.tmplCount = 0;\n        this.shortenToLength(1);\n    }\n    _indexOfTagNames(tagNames, namespace) {\n        for (let i = this.stackTop; i >= 0; i--) {\n            if (tagNames.has(this.tagIDs[i]) && this.treeAdapter.getNamespaceURI(this.items[i]) === namespace) {\n                return i;\n            }\n        }\n        return -1;\n    }\n    clearBackTo(tagNames, targetNS) {\n        const idx = this._indexOfTagNames(tagNames, targetNS);\n        this.shortenToLength(idx + 1);\n    }\n    clearBackToTableContext() {\n        this.clearBackTo(TABLE_CONTEXT, NS.HTML);\n    }\n    clearBackToTableBodyContext() {\n        this.clearBackTo(TABLE_BODY_CONTEXT, NS.HTML);\n    }\n    clearBackToTableRowContext() {\n        this.clearBackTo(TABLE_ROW_CONTEXT, NS.HTML);\n    }\n    remove(element) {\n        const idx = this._indexOf(element);\n        if (idx >= 0) {\n            if (idx === this.stackTop) {\n                this.pop();\n            }\n            else {\n                this.items.splice(idx, 1);\n                this.tagIDs.splice(idx, 1);\n                this.stackTop--;\n                this._updateCurrentElement();\n                this.handler.onItemPop(element, false);\n            }\n        }\n    }\n    //Search\n    tryPeekProperlyNestedBodyElement() {\n        //Properly nested <body> element (should be second element in stack).\n        return this.stackTop >= 1 && this.tagIDs[1] === $.BODY ? this.items[1] : null;\n    }\n    contains(element) {\n        return this._indexOf(element) > -1;\n    }\n    getCommonAncestor(element) {\n        const elementIdx = this._indexOf(element) - 1;\n        return elementIdx >= 0 ? this.items[elementIdx] : null;\n    }\n    isRootHtmlElementCurrent() {\n        return this.stackTop === 0 && this.tagIDs[0] === $.HTML;\n    }\n    //Element in scope\n    hasInDynamicScope(tagName, htmlScope) {\n        for (let i = this.stackTop; i >= 0; i--) {\n            const tn = this.tagIDs[i];\n            switch (this.treeAdapter.getNamespaceURI(this.items[i])) {\n                case NS.HTML: {\n                    if (tn === tagName)\n                        return true;\n                    if (htmlScope.has(tn))\n                        return false;\n                    break;\n                }\n                case NS.SVG: {\n                    if (SCOPING_ELEMENTS_SVG.has(tn))\n                        return false;\n                    break;\n                }\n                case NS.MATHML: {\n                    if (SCOPING_ELEMENTS_MATHML.has(tn))\n                        return false;\n                    break;\n                }\n            }\n        }\n        return true;\n    }\n    hasInScope(tagName) {\n        return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML);\n    }\n    hasInListItemScope(tagName) {\n        return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_LIST);\n    }\n    hasInButtonScope(tagName) {\n        return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_BUTTON);\n    }\n    hasNumberedHeaderInScope() {\n        for (let i = this.stackTop; i >= 0; i--) {\n            const tn = this.tagIDs[i];\n            switch (this.treeAdapter.getNamespaceURI(this.items[i])) {\n                case NS.HTML: {\n                    if (NUMBERED_HEADERS.has(tn))\n                        return true;\n                    if (SCOPING_ELEMENTS_HTML.has(tn))\n                        return false;\n                    break;\n                }\n                case NS.SVG: {\n                    if (SCOPING_ELEMENTS_SVG.has(tn))\n                        return false;\n                    break;\n                }\n                case NS.MATHML: {\n                    if (SCOPING_ELEMENTS_MATHML.has(tn))\n                        return false;\n                    break;\n                }\n            }\n        }\n        return true;\n    }\n    hasInTableScope(tagName) {\n        for (let i = this.stackTop; i >= 0; i--) {\n            if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n                continue;\n            }\n            switch (this.tagIDs[i]) {\n                case tagName: {\n                    return true;\n                }\n                case $.TABLE:\n                case $.HTML: {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n    hasTableBodyContextInTableScope() {\n        for (let i = this.stackTop; i >= 0; i--) {\n            if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n                continue;\n            }\n            switch (this.tagIDs[i]) {\n                case $.TBODY:\n                case $.THEAD:\n                case $.TFOOT: {\n                    return true;\n                }\n                case $.TABLE:\n                case $.HTML: {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n    hasInSelectScope(tagName) {\n        for (let i = this.stackTop; i >= 0; i--) {\n            if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n                continue;\n            }\n            switch (this.tagIDs[i]) {\n                case tagName: {\n                    return true;\n                }\n                case $.OPTION:\n                case $.OPTGROUP: {\n                    break;\n                }\n                default: {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n    //Implied end tags\n    generateImpliedEndTags() {\n        while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED.has(this.currentTagId)) {\n            this.pop();\n        }\n    }\n    generateImpliedEndTagsThoroughly() {\n        while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n            this.pop();\n        }\n    }\n    generateImpliedEndTagsWithExclusion(exclusionId) {\n        while (this.currentTagId !== undefined &&\n            this.currentTagId !== exclusionId &&\n            IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n            this.pop();\n        }\n    }\n}\n", "//Const\nconst NOAH_ARK_CAPACITY = 3;\nexport var EntryType;\n(function (EntryType) {\n    EntryType[EntryType[\"Marker\"] = 0] = \"Marker\";\n    EntryType[EntryType[\"Element\"] = 1] = \"Element\";\n})(EntryType || (EntryType = {}));\nconst MARKER = { type: EntryType.Marker };\n//List of formatting elements\nexport class FormattingElementList {\n    constructor(treeAdapter) {\n        this.treeAdapter = treeAdapter;\n        this.entries = [];\n        this.bookmark = null;\n    }\n    //Noah Ark's condition\n    //OPTIMIZATION: at first we try to find possible candidates for exclusion using\n    //lightweight heuristics without thorough attributes check.\n    _getNoahArkConditionCandidates(newElement, neAttrs) {\n        const candidates = [];\n        const neAttrsLength = neAttrs.length;\n        const neTagName = this.treeAdapter.getTagName(newElement);\n        const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement);\n        for (let i = 0; i < this.entries.length; i++) {\n            const entry = this.entries[i];\n            if (entry.type === EntryType.Marker) {\n                break;\n            }\n            const { element } = entry;\n            if (this.treeAdapter.getTagName(element) === neTagName &&\n                this.treeAdapter.getNamespaceURI(element) === neNamespaceURI) {\n                const elementAttrs = this.treeAdapter.getAttrList(element);\n                if (elementAttrs.length === neAttrsLength) {\n                    candidates.push({ idx: i, attrs: elementAttrs });\n                }\n            }\n        }\n        return candidates;\n    }\n    _ensureNoahArkCondition(newElement) {\n        if (this.entries.length < NOAH_ARK_CAPACITY)\n            return;\n        const neAttrs = this.treeAdapter.getAttrList(newElement);\n        const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs);\n        if (candidates.length < NOAH_ARK_CAPACITY)\n            return;\n        //NOTE: build attrs map for the new element, so we can perform fast lookups\n        const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value]));\n        let validCandidates = 0;\n        //NOTE: remove bottommost candidates, until Noah's Ark condition will not be met\n        for (let i = 0; i < candidates.length; i++) {\n            const candidate = candidates[i];\n            // We know that `candidate.attrs.length === neAttrs.length`\n            if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) {\n                validCandidates += 1;\n                if (validCandidates >= NOAH_ARK_CAPACITY) {\n                    this.entries.splice(candidate.idx, 1);\n                }\n            }\n        }\n    }\n    //Mutations\n    insertMarker() {\n        this.entries.unshift(MARKER);\n    }\n    pushElement(element, token) {\n        this._ensureNoahArkCondition(element);\n        this.entries.unshift({\n            type: EntryType.Element,\n            element,\n            token,\n        });\n    }\n    insertElementAfterBookmark(element, token) {\n        const bookmarkIdx = this.entries.indexOf(this.bookmark);\n        this.entries.splice(bookmarkIdx, 0, {\n            type: EntryType.Element,\n            element,\n            token,\n        });\n    }\n    removeEntry(entry) {\n        const entryIndex = this.entries.indexOf(entry);\n        if (entryIndex !== -1) {\n            this.entries.splice(entryIndex, 1);\n        }\n    }\n    /**\n     * Clears the list of formatting elements up to the last marker.\n     *\n     * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker\n     */\n    clearToLastMarker() {\n        const markerIdx = this.entries.indexOf(MARKER);\n        if (markerIdx === -1) {\n            this.entries.length = 0;\n        }\n        else {\n            this.entries.splice(0, markerIdx + 1);\n        }\n    }\n    //Search\n    getElementEntryInScopeWithTagName(tagName) {\n        const entry = this.entries.find((entry) => entry.type === EntryType.Marker || this.treeAdapter.getTagName(entry.element) === tagName);\n        return entry && entry.type === EntryType.Element ? entry : null;\n    }\n    getElementEntry(element) {\n        return this.entries.find((entry) => entry.type === EntryType.Element && entry.element === element);\n    }\n}\n", "import { DOCUMENT_MODE } from '../common/html.js';\nexport const defaultTreeAdapter = {\n    //Node construction\n    createDocument() {\n        return {\n            nodeName: '#document',\n            mode: DOCUMENT_MODE.NO_QUIRKS,\n            childNodes: [],\n        };\n    },\n    createDocumentFragment() {\n        return {\n            nodeName: '#document-fragment',\n            childNodes: [],\n        };\n    },\n    createElement(tagName, namespaceURI, attrs) {\n        return {\n            nodeName: tagName,\n            tagName,\n            attrs,\n            namespaceURI,\n            childNodes: [],\n            parentNode: null,\n        };\n    },\n    createCommentNode(data) {\n        return {\n            nodeName: '#comment',\n            data,\n            parentNode: null,\n        };\n    },\n    createTextNode(value) {\n        return {\n            nodeName: '#text',\n            value,\n            parentNode: null,\n        };\n    },\n    //Tree mutation\n    appendChild(parentNode, newNode) {\n        parentNode.childNodes.push(newNode);\n        newNode.parentNode = parentNode;\n    },\n    insertBefore(parentNode, newNode, referenceNode) {\n        const insertionIdx = parentNode.childNodes.indexOf(referenceNode);\n        parentNode.childNodes.splice(insertionIdx, 0, newNode);\n        newNode.parentNode = parentNode;\n    },\n    setTemplateContent(templateElement, contentElement) {\n        templateElement.content = contentElement;\n    },\n    getTemplateContent(templateElement) {\n        return templateElement.content;\n    },\n    setDocumentType(document, name, publicId, systemId) {\n        const doctypeNode = document.childNodes.find((node) => node.nodeName === '#documentType');\n        if (doctypeNode) {\n            doctypeNode.name = name;\n            doctypeNode.publicId = publicId;\n            doctypeNode.systemId = systemId;\n        }\n        else {\n            const node = {\n                nodeName: '#documentType',\n                name,\n                publicId,\n                systemId,\n                parentNode: null,\n            };\n            defaultTreeAdapter.appendChild(document, node);\n        }\n    },\n    setDocumentMode(document, mode) {\n        document.mode = mode;\n    },\n    getDocumentMode(document) {\n        return document.mode;\n    },\n    detachNode(node) {\n        if (node.parentNode) {\n            const idx = node.parentNode.childNodes.indexOf(node);\n            node.parentNode.childNodes.splice(idx, 1);\n            node.parentNode = null;\n        }\n    },\n    insertText(parentNode, text) {\n        if (parentNode.childNodes.length > 0) {\n            const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1];\n            if (defaultTreeAdapter.isTextNode(prevNode)) {\n                prevNode.value += text;\n                return;\n            }\n        }\n        defaultTreeAdapter.appendChild(parentNode, defaultTreeAdapter.createTextNode(text));\n    },\n    insertTextBefore(parentNode, text, referenceNode) {\n        const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];\n        if (prevNode && defaultTreeAdapter.isTextNode(prevNode)) {\n            prevNode.value += text;\n        }\n        else {\n            defaultTreeAdapter.insertBefore(parentNode, defaultTreeAdapter.createTextNode(text), referenceNode);\n        }\n    },\n    adoptAttributes(recipient, attrs) {\n        const recipientAttrsMap = new Set(recipient.attrs.map((attr) => attr.name));\n        for (let j = 0; j < attrs.length; j++) {\n            if (!recipientAttrsMap.has(attrs[j].name)) {\n                recipient.attrs.push(attrs[j]);\n            }\n        }\n    },\n    //Tree traversing\n    getFirstChild(node) {\n        return node.childNodes[0];\n    },\n    getChildNodes(node) {\n        return node.childNodes;\n    },\n    getParentNode(node) {\n        return node.parentNode;\n    },\n    getAttrList(element) {\n        return element.attrs;\n    },\n    //Node data\n    getTagName(element) {\n        return element.tagName;\n    },\n    getNamespaceURI(element) {\n        return element.namespaceURI;\n    },\n    getTextNodeContent(textNode) {\n        return textNode.value;\n    },\n    getCommentNodeContent(commentNode) {\n        return commentNode.data;\n    },\n    getDocumentTypeNodeName(doctypeNode) {\n        return doctypeNode.name;\n    },\n    getDocumentTypeNodePublicId(doctypeNode) {\n        return doctypeNode.publicId;\n    },\n    getDocumentTypeNodeSystemId(doctypeNode) {\n        return doctypeNode.systemId;\n    },\n    //Node types\n    isTextNode(node) {\n        return node.nodeName === '#text';\n    },\n    isCommentNode(node) {\n        return node.nodeName === '#comment';\n    },\n    isDocumentTypeNode(node) {\n        return node.nodeName === '#documentType';\n    },\n    isElementNode(node) {\n        return Object.prototype.hasOwnProperty.call(node, 'tagName');\n    },\n    // Source code location\n    setNodeSourceCodeLocation(node, location) {\n        node.sourceCodeLocation = location;\n    },\n    getNodeSourceCodeLocation(node) {\n        return node.sourceCodeLocation;\n    },\n    updateNodeSourceCodeLocation(node, endLocation) {\n        node.sourceCodeLocation = { ...node.sourceCodeLocation, ...endLocation };\n    },\n};\n", "import { DOCUMENT_MODE } from './html.js';\n//Const\nconst VALID_DOCTYPE_NAME = 'html';\nconst VALID_SYSTEM_ID = 'about:legacy-compat';\nconst QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd';\nconst QUIRKS_MODE_PUBLIC_ID_PREFIXES = [\n    '+//silmaril//dtd html pro v0r11 19970101//',\n    '-//as//dtd html 3.0 aswedit + extensions//',\n    '-//advasoft ltd//dtd html 3.0 aswedit + extensions//',\n    '-//ietf//dtd html 2.0 level 1//',\n    '-//ietf//dtd html 2.0 level 2//',\n    '-//ietf//dtd html 2.0 strict level 1//',\n    '-//ietf//dtd html 2.0 strict level 2//',\n    '-//ietf//dtd html 2.0 strict//',\n    '-//ietf//dtd html 2.0//',\n    '-//ietf//dtd html 2.1e//',\n    '-//ietf//dtd html 3.0//',\n    '-//ietf//dtd html 3.2 final//',\n    '-//ietf//dtd html 3.2//',\n    '-//ietf//dtd html 3//',\n    '-//ietf//dtd html level 0//',\n    '-//ietf//dtd html level 1//',\n    '-//ietf//dtd html level 2//',\n    '-//ietf//dtd html level 3//',\n    '-//ietf//dtd html strict level 0//',\n    '-//ietf//dtd html strict level 1//',\n    '-//ietf//dtd html strict level 2//',\n    '-//ietf//dtd html strict level 3//',\n    '-//ietf//dtd html strict//',\n    '-//ietf//dtd html//',\n    '-//metrius//dtd metrius presentational//',\n    '-//microsoft//dtd internet explorer 2.0 html strict//',\n    '-//microsoft//dtd internet explorer 2.0 html//',\n    '-//microsoft//dtd internet explorer 2.0 tables//',\n    '-//microsoft//dtd internet explorer 3.0 html strict//',\n    '-//microsoft//dtd internet explorer 3.0 html//',\n    '-//microsoft//dtd internet explorer 3.0 tables//',\n    '-//netscape comm. corp.//dtd html//',\n    '-//netscape comm. corp.//dtd strict html//',\n    \"-//o'reilly and associates//dtd html 2.0//\",\n    \"-//o'reilly and associates//dtd html extended 1.0//\",\n    \"-//o'reilly and associates//dtd html extended relaxed 1.0//\",\n    '-//sq//dtd html 2.0 hotmetal + extensions//',\n    '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//',\n    '-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//',\n    '-//spyglass//dtd html 2.0 extended//',\n    '-//sun microsystems corp.//dtd hotjava html//',\n    '-//sun microsystems corp.//dtd hotjava strict html//',\n    '-//w3c//dtd html 3 1995-03-24//',\n    '-//w3c//dtd html 3.2 draft//',\n    '-//w3c//dtd html 3.2 final//',\n    '-//w3c//dtd html 3.2//',\n    '-//w3c//dtd html 3.2s draft//',\n    '-//w3c//dtd html 4.0 frameset//',\n    '-//w3c//dtd html 4.0 transitional//',\n    '-//w3c//dtd html experimental 19960712//',\n    '-//w3c//dtd html experimental 970421//',\n    '-//w3c//dtd w3 html//',\n    '-//w3o//dtd w3 html 3.0//',\n    '-//webtechs//dtd mozilla html 2.0//',\n    '-//webtechs//dtd mozilla html//',\n];\nconst QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n    ...QUIRKS_MODE_PUBLIC_ID_PREFIXES,\n    '-//w3c//dtd html 4.01 frameset//',\n    '-//w3c//dtd html 4.01 transitional//',\n];\nconst QUIRKS_MODE_PUBLIC_IDS = new Set([\n    '-//w3o//dtd w3 html strict 3.0//en//',\n    '-/w3c/dtd html 4.0 transitional/en',\n    'html',\n]);\nconst LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//w3c//dtd xhtml 1.0 frameset//', '-//w3c//dtd xhtml 1.0 transitional//'];\nconst LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n    ...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES,\n    '-//w3c//dtd html 4.01 frameset//',\n    '-//w3c//dtd html 4.01 transitional//',\n];\n//Utils\nfunction hasPrefix(publicId, prefixes) {\n    return prefixes.some((prefix) => publicId.startsWith(prefix));\n}\n//API\nexport function isConforming(token) {\n    return (token.name === VALID_DOCTYPE_NAME &&\n        token.publicId === null &&\n        (token.systemId === null || token.systemId === VALID_SYSTEM_ID));\n}\nexport function getDocumentMode(token) {\n    if (token.name !== VALID_DOCTYPE_NAME) {\n        return DOCUMENT_MODE.QUIRKS;\n    }\n    const { systemId } = token;\n    if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {\n        return DOCUMENT_MODE.QUIRKS;\n    }\n    let { publicId } = token;\n    if (publicId !== null) {\n        publicId = publicId.toLowerCase();\n        if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) {\n            return DOCUMENT_MODE.QUIRKS;\n        }\n        let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;\n        if (hasPrefix(publicId, prefixes)) {\n            return DOCUMENT_MODE.QUIRKS;\n        }\n        prefixes =\n            systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;\n        if (hasPrefix(publicId, prefixes)) {\n            return DOCUMENT_MODE.LIMITED_QUIRKS;\n        }\n    }\n    return DOCUMENT_MODE.NO_QUIRKS;\n}\n", "import { TAG_ID as $, NS, ATTRS, getTagID } from './html.js';\n//MIME types\nconst MIME_TYPES = {\n    TEXT_HTML: 'text/html',\n    APPLICATION_XML: 'application/xhtml+xml',\n};\n//Attributes\nconst DEFINITION_URL_ATTR = 'definitionurl';\nconst ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL';\nconst SVG_ATTRS_ADJUSTMENT_MAP = new Map([\n    'attributeName',\n    'attributeType',\n    'baseFrequency',\n    'baseProfile',\n    'calcMode',\n    'clipPathUnits',\n    'diffuseConstant',\n    'edgeMode',\n    'filterUnits',\n    'glyphRef',\n    'gradientTransform',\n    'gradientUnits',\n    'kernelMatrix',\n    'kernelUnitLength',\n    'keyPoints',\n    'keySplines',\n    'keyTimes',\n    'lengthAdjust',\n    'limitingConeAngle',\n    'markerHeight',\n    'markerUnits',\n    'markerWidth',\n    'maskContentUnits',\n    'maskUnits',\n    'numOctaves',\n    'pathLength',\n    'patternContentUnits',\n    'patternTransform',\n    'patternUnits',\n    'pointsAtX',\n    'pointsAtY',\n    'pointsAtZ',\n    'preserveAlpha',\n    'preserveAspectRatio',\n    'primitiveUnits',\n    'refX',\n    'refY',\n    'repeatCount',\n    'repeatDur',\n    'requiredExtensions',\n    'requiredFeatures',\n    'specularConstant',\n    'specularExponent',\n    'spreadMethod',\n    'startOffset',\n    'stdDeviation',\n    'stitchTiles',\n    'surfaceScale',\n    'systemLanguage',\n    'tableValues',\n    'targetX',\n    'targetY',\n    'textLength',\n    'viewBox',\n    'viewTarget',\n    'xChannelSelector',\n    'yChannelSelector',\n    'zoomAndPan',\n].map((attr) => [attr.toLowerCase(), attr]));\nconst XML_ATTRS_ADJUSTMENT_MAP = new Map([\n    ['xlink:actuate', { prefix: 'xlink', name: 'actuate', namespace: NS.XLINK }],\n    ['xlink:arcrole', { prefix: 'xlink', name: 'arcrole', namespace: NS.XLINK }],\n    ['xlink:href', { prefix: 'xlink', name: 'href', namespace: NS.XLINK }],\n    ['xlink:role', { prefix: 'xlink', name: 'role', namespace: NS.XLINK }],\n    ['xlink:show', { prefix: 'xlink', name: 'show', namespace: NS.XLINK }],\n    ['xlink:title', { prefix: 'xlink', name: 'title', namespace: NS.XLINK }],\n    ['xlink:type', { prefix: 'xlink', name: 'type', namespace: NS.XLINK }],\n    ['xml:lang', { prefix: 'xml', name: 'lang', namespace: NS.XML }],\n    ['xml:space', { prefix: 'xml', name: 'space', namespace: NS.XML }],\n    ['xmlns', { prefix: '', name: 'xmlns', namespace: NS.XMLNS }],\n    ['xmlns:xlink', { prefix: 'xmlns', name: 'xlink', namespace: NS.XMLNS }],\n]);\n//SVG tag names adjustment map\nexport const SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([\n    'altGlyph',\n    'altGlyphDef',\n    'altGlyphItem',\n    'animateColor',\n    'animateMotion',\n    'animateTransform',\n    'clipPath',\n    'feBlend',\n    'feColorMatrix',\n    'feComponentTransfer',\n    'feComposite',\n    'feConvolveMatrix',\n    'feDiffuseLighting',\n    'feDisplacementMap',\n    'feDistantLight',\n    'feFlood',\n    'feFuncA',\n    'feFuncB',\n    'feFuncG',\n    'feFuncR',\n    'feGaussianBlur',\n    'feImage',\n    'feMerge',\n    'feMergeNode',\n    'feMorphology',\n    'feOffset',\n    'fePointLight',\n    'feSpecularLighting',\n    'feSpotLight',\n    'feTile',\n    'feTurbulence',\n    'foreignObject',\n    'glyphRef',\n    'linearGradient',\n    'radialGradient',\n    'textPath',\n].map((tn) => [tn.toLowerCase(), tn]));\n//Tags that causes exit from foreign content\nconst EXITS_FOREIGN_CONTENT = new Set([\n    $.B,\n    $.BIG,\n    $.BLOCKQUOTE,\n    $.BODY,\n    $.BR,\n    $.CENTER,\n    $.CODE,\n    $.DD,\n    $.DIV,\n    $.DL,\n    $.DT,\n    $.EM,\n    $.EMBED,\n    $.H1,\n    $.H2,\n    $.H3,\n    $.H4,\n    $.H5,\n    $.H6,\n    $.HEAD,\n    $.HR,\n    $.I,\n    $.IMG,\n    $.LI,\n    $.LISTING,\n    $.MENU,\n    $.META,\n    $.NOBR,\n    $.OL,\n    $.P,\n    $.PRE,\n    $.RUBY,\n    $.S,\n    $.SMALL,\n    $.SPAN,\n    $.STRONG,\n    $.STRIKE,\n    $.SUB,\n    $.SUP,\n    $.TABLE,\n    $.TT,\n    $.U,\n    $.UL,\n    $.VAR,\n]);\n//Check exit from foreign content\nexport function causesExit(startTagToken) {\n    const tn = startTagToken.tagID;\n    const isFontWithAttrs = tn === $.FONT &&\n        startTagToken.attrs.some(({ name }) => name === ATTRS.COLOR || name === ATTRS.SIZE || name === ATTRS.FACE);\n    return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn);\n}\n//Token adjustments\nexport function adjustTokenMathMLAttrs(token) {\n    for (let i = 0; i < token.attrs.length; i++) {\n        if (token.attrs[i].name === DEFINITION_URL_ATTR) {\n            token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR;\n            break;\n        }\n    }\n}\nexport function adjustTokenSVGAttrs(token) {\n    for (let i = 0; i < token.attrs.length; i++) {\n        const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n        if (adjustedAttrName != null) {\n            token.attrs[i].name = adjustedAttrName;\n        }\n    }\n}\nexport function adjustTokenXMLAttrs(token) {\n    for (let i = 0; i < token.attrs.length; i++) {\n        const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n        if (adjustedAttrEntry) {\n            token.attrs[i].prefix = adjustedAttrEntry.prefix;\n            token.attrs[i].name = adjustedAttrEntry.name;\n            token.attrs[i].namespace = adjustedAttrEntry.namespace;\n        }\n    }\n}\nexport function adjustTokenSVGTagName(token) {\n    const adjustedTagName = SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName);\n    if (adjustedTagName != null) {\n        token.tagName = adjustedTagName;\n        token.tagID = getTagID(token.tagName);\n    }\n}\n//Integration points\nfunction isMathMLTextIntegrationPoint(tn, ns) {\n    return ns === NS.MATHML && (tn === $.MI || tn === $.MO || tn === $.MN || tn === $.MS || tn === $.MTEXT);\n}\nfunction isHtmlIntegrationPoint(tn, ns, attrs) {\n    if (ns === NS.MATHML && tn === $.ANNOTATION_XML) {\n        for (let i = 0; i < attrs.length; i++) {\n            if (attrs[i].name === ATTRS.ENCODING) {\n                const value = attrs[i].value.toLowerCase();\n                return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;\n            }\n        }\n    }\n    return ns === NS.SVG && (tn === $.FOREIGN_OBJECT || tn === $.DESC || tn === $.TITLE);\n}\nexport function isIntegrationPoint(tn, ns, attrs, foreignNS) {\n    return (((!foreignNS || foreignNS === NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) ||\n        ((!foreignNS || foreignNS === NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns)));\n}\n", "import { Tokenizer, TokenizerMode } from '../tokenizer/index.js';\nimport { OpenElementStack } from './open-element-stack.js';\nimport { FormattingElementList, EntryType } from './formatting-element-list.js';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\nimport * as doctype from '../common/doctype.js';\nimport * as foreignContent from '../common/foreign-content.js';\nimport { ERR } from '../common/error-codes.js';\nimport * as unicode from '../common/unicode.js';\nimport { TAG_ID as $, TAG_NAMES as TN, NS, ATTRS, SPECIAL_ELEMENTS, DOCUMENT_MODE, NUMBERED_HEADERS, getTagID, } from '../common/html.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\n//Misc constants\nconst HIDDEN_INPUT_TYPE = 'hidden';\n//Adoption agency loops iteration count\nconst AA_OUTER_LOOP_ITER = 8;\nconst AA_INNER_LOOP_ITER = 3;\n//Insertion modes\nvar InsertionMode;\n(function (InsertionMode) {\n    InsertionMode[InsertionMode[\"INITIAL\"] = 0] = \"INITIAL\";\n    InsertionMode[InsertionMode[\"BEFORE_HTML\"] = 1] = \"BEFORE_HTML\";\n    InsertionMode[InsertionMode[\"BEFORE_HEAD\"] = 2] = \"BEFORE_HEAD\";\n    InsertionMode[InsertionMode[\"IN_HEAD\"] = 3] = \"IN_HEAD\";\n    InsertionMode[InsertionMode[\"IN_HEAD_NO_SCRIPT\"] = 4] = \"IN_HEAD_NO_SCRIPT\";\n    InsertionMode[InsertionMode[\"AFTER_HEAD\"] = 5] = \"AFTER_HEAD\";\n    InsertionMode[InsertionMode[\"IN_BODY\"] = 6] = \"IN_BODY\";\n    InsertionMode[InsertionMode[\"TEXT\"] = 7] = \"TEXT\";\n    InsertionMode[InsertionMode[\"IN_TABLE\"] = 8] = \"IN_TABLE\";\n    InsertionMode[InsertionMode[\"IN_TABLE_TEXT\"] = 9] = \"IN_TABLE_TEXT\";\n    InsertionMode[InsertionMode[\"IN_CAPTION\"] = 10] = \"IN_CAPTION\";\n    InsertionMode[InsertionMode[\"IN_COLUMN_GROUP\"] = 11] = \"IN_COLUMN_GROUP\";\n    InsertionMode[InsertionMode[\"IN_TABLE_BODY\"] = 12] = \"IN_TABLE_BODY\";\n    InsertionMode[InsertionMode[\"IN_ROW\"] = 13] = \"IN_ROW\";\n    InsertionMode[InsertionMode[\"IN_CELL\"] = 14] = \"IN_CELL\";\n    InsertionMode[InsertionMode[\"IN_SELECT\"] = 15] = \"IN_SELECT\";\n    InsertionMode[InsertionMode[\"IN_SELECT_IN_TABLE\"] = 16] = \"IN_SELECT_IN_TABLE\";\n    InsertionMode[InsertionMode[\"IN_TEMPLATE\"] = 17] = \"IN_TEMPLATE\";\n    InsertionMode[InsertionMode[\"AFTER_BODY\"] = 18] = \"AFTER_BODY\";\n    InsertionMode[InsertionMode[\"IN_FRAMESET\"] = 19] = \"IN_FRAMESET\";\n    InsertionMode[InsertionMode[\"AFTER_FRAMESET\"] = 20] = \"AFTER_FRAMESET\";\n    InsertionMode[InsertionMode[\"AFTER_AFTER_BODY\"] = 21] = \"AFTER_AFTER_BODY\";\n    InsertionMode[InsertionMode[\"AFTER_AFTER_FRAMESET\"] = 22] = \"AFTER_AFTER_FRAMESET\";\n})(InsertionMode || (InsertionMode = {}));\nconst BASE_LOC = {\n    startLine: -1,\n    startCol: -1,\n    startOffset: -1,\n    endLine: -1,\n    endCol: -1,\n    endOffset: -1,\n};\nconst TABLE_STRUCTURE_TAGS = new Set([$.TABLE, $.TBODY, $.TFOOT, $.THEAD, $.TR]);\nconst defaultParserOptions = {\n    scriptingEnabled: true,\n    sourceCodeLocationInfo: false,\n    treeAdapter: defaultTreeAdapter,\n    onParseError: null,\n};\n//Parser\nexport class Parser {\n    constructor(options, document, \n    /** @internal */\n    fragmentContext = null, \n    /** @internal */\n    scriptHandler = null) {\n        this.fragmentContext = fragmentContext;\n        this.scriptHandler = scriptHandler;\n        this.currentToken = null;\n        this.stopped = false;\n        /** @internal */\n        this.insertionMode = InsertionMode.INITIAL;\n        /** @internal */\n        this.originalInsertionMode = InsertionMode.INITIAL;\n        /** @internal */\n        this.headElement = null;\n        /** @internal */\n        this.formElement = null;\n        /** Indicates that the current node is not an element in the HTML namespace */\n        this.currentNotInHTML = false;\n        /**\n         * The template insertion mode stack is maintained from the left.\n         * Ie. the topmost element will always have index 0.\n         *\n         * @internal\n         */\n        this.tmplInsertionModeStack = [];\n        /** @internal */\n        this.pendingCharacterTokens = [];\n        /** @internal */\n        this.hasNonWhitespacePendingCharacterToken = false;\n        /** @internal */\n        this.framesetOk = true;\n        /** @internal */\n        this.skipNextNewLine = false;\n        /** @internal */\n        this.fosterParentingEnabled = false;\n        this.options = {\n            ...defaultParserOptions,\n            ...options,\n        };\n        this.treeAdapter = this.options.treeAdapter;\n        this.onParseError = this.options.onParseError;\n        // Always enable location info if we report parse errors.\n        if (this.onParseError) {\n            this.options.sourceCodeLocationInfo = true;\n        }\n        this.document = document !== null && document !== void 0 ? document : this.treeAdapter.createDocument();\n        this.tokenizer = new Tokenizer(this.options, this);\n        this.activeFormattingElements = new FormattingElementList(this.treeAdapter);\n        this.fragmentContextID = fragmentContext ? getTagID(this.treeAdapter.getTagName(fragmentContext)) : $.UNKNOWN;\n        this._setContextModes(fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : this.document, this.fragmentContextID);\n        this.openElements = new OpenElementStack(this.document, this.treeAdapter, this);\n    }\n    // API\n    static parse(html, options) {\n        const parser = new this(options);\n        parser.tokenizer.write(html, true);\n        return parser.document;\n    }\n    static getFragmentParser(fragmentContext, options) {\n        const opts = {\n            ...defaultParserOptions,\n            ...options,\n        };\n        //NOTE: use a <template> element as the fragment context if no context element was provided,\n        //so we will parse in a \"forgiving\" manner\n        fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : (fragmentContext = opts.treeAdapter.createElement(TN.TEMPLATE, NS.HTML, []));\n        //NOTE: create a fake element which will be used as the `document` for fragment parsing.\n        //This is important for jsdom, where a new `document` cannot be created. This led to\n        //fragment parsing messing with the main `document`.\n        const documentMock = opts.treeAdapter.createElement('documentmock', NS.HTML, []);\n        const parser = new this(opts, documentMock, fragmentContext);\n        if (parser.fragmentContextID === $.TEMPLATE) {\n            parser.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n        }\n        parser._initTokenizerForFragmentParsing();\n        parser._insertFakeRootElement();\n        parser._resetInsertionMode();\n        parser._findFormInFragmentContext();\n        return parser;\n    }\n    getFragment() {\n        const rootElement = this.treeAdapter.getFirstChild(this.document);\n        const fragment = this.treeAdapter.createDocumentFragment();\n        this._adoptNodes(rootElement, fragment);\n        return fragment;\n    }\n    //Errors\n    /** @internal */\n    _err(token, code, beforeToken) {\n        var _a;\n        if (!this.onParseError)\n            return;\n        const loc = (_a = token.location) !== null && _a !== void 0 ? _a : BASE_LOC;\n        const err = {\n            code,\n            startLine: loc.startLine,\n            startCol: loc.startCol,\n            startOffset: loc.startOffset,\n            endLine: beforeToken ? loc.startLine : loc.endLine,\n            endCol: beforeToken ? loc.startCol : loc.endCol,\n            endOffset: beforeToken ? loc.startOffset : loc.endOffset,\n        };\n        this.onParseError(err);\n    }\n    //Stack events\n    /** @internal */\n    onItemPush(node, tid, isTop) {\n        var _a, _b;\n        (_b = (_a = this.treeAdapter).onItemPush) === null || _b === void 0 ? void 0 : _b.call(_a, node);\n        if (isTop && this.openElements.stackTop > 0)\n            this._setContextModes(node, tid);\n    }\n    /** @internal */\n    onItemPop(node, isTop) {\n        var _a, _b;\n        if (this.options.sourceCodeLocationInfo) {\n            this._setEndLocation(node, this.currentToken);\n        }\n        (_b = (_a = this.treeAdapter).onItemPop) === null || _b === void 0 ? void 0 : _b.call(_a, node, this.openElements.current);\n        if (isTop) {\n            let current;\n            let currentTagId;\n            if (this.openElements.stackTop === 0 && this.fragmentContext) {\n                current = this.fragmentContext;\n                currentTagId = this.fragmentContextID;\n            }\n            else {\n                ({ current, currentTagId } = this.openElements);\n            }\n            this._setContextModes(current, currentTagId);\n        }\n    }\n    _setContextModes(current, tid) {\n        const isHTML = current === this.document || (current && this.treeAdapter.getNamespaceURI(current) === NS.HTML);\n        this.currentNotInHTML = !isHTML;\n        this.tokenizer.inForeignNode =\n            !isHTML && current !== undefined && tid !== undefined && !this._isIntegrationPoint(tid, current);\n    }\n    /** @protected */\n    _switchToTextParsing(currentToken, nextTokenizerState) {\n        this._insertElement(currentToken, NS.HTML);\n        this.tokenizer.state = nextTokenizerState;\n        this.originalInsertionMode = this.insertionMode;\n        this.insertionMode = InsertionMode.TEXT;\n    }\n    switchToPlaintextParsing() {\n        this.insertionMode = InsertionMode.TEXT;\n        this.originalInsertionMode = InsertionMode.IN_BODY;\n        this.tokenizer.state = TokenizerMode.PLAINTEXT;\n    }\n    //Fragment parsing\n    /** @protected */\n    _getAdjustedCurrentElement() {\n        return this.openElements.stackTop === 0 && this.fragmentContext\n            ? this.fragmentContext\n            : this.openElements.current;\n    }\n    /** @protected */\n    _findFormInFragmentContext() {\n        let node = this.fragmentContext;\n        while (node) {\n            if (this.treeAdapter.getTagName(node) === TN.FORM) {\n                this.formElement = node;\n                break;\n            }\n            node = this.treeAdapter.getParentNode(node);\n        }\n    }\n    _initTokenizerForFragmentParsing() {\n        if (!this.fragmentContext || this.treeAdapter.getNamespaceURI(this.fragmentContext) !== NS.HTML) {\n            return;\n        }\n        switch (this.fragmentContextID) {\n            case $.TITLE:\n            case $.TEXTAREA: {\n                this.tokenizer.state = TokenizerMode.RCDATA;\n                break;\n            }\n            case $.STYLE:\n            case $.XMP:\n            case $.IFRAME:\n            case $.NOEMBED:\n            case $.NOFRAMES:\n            case $.NOSCRIPT: {\n                this.tokenizer.state = TokenizerMode.RAWTEXT;\n                break;\n            }\n            case $.SCRIPT: {\n                this.tokenizer.state = TokenizerMode.SCRIPT_DATA;\n                break;\n            }\n            case $.PLAINTEXT: {\n                this.tokenizer.state = TokenizerMode.PLAINTEXT;\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    //Tree mutation\n    /** @protected */\n    _setDocumentType(token) {\n        const name = token.name || '';\n        const publicId = token.publicId || '';\n        const systemId = token.systemId || '';\n        this.treeAdapter.setDocumentType(this.document, name, publicId, systemId);\n        if (token.location) {\n            const documentChildren = this.treeAdapter.getChildNodes(this.document);\n            const docTypeNode = documentChildren.find((node) => this.treeAdapter.isDocumentTypeNode(node));\n            if (docTypeNode) {\n                this.treeAdapter.setNodeSourceCodeLocation(docTypeNode, token.location);\n            }\n        }\n    }\n    /** @protected */\n    _attachElementToTree(element, location) {\n        if (this.options.sourceCodeLocationInfo) {\n            const loc = location && {\n                ...location,\n                startTag: location,\n            };\n            this.treeAdapter.setNodeSourceCodeLocation(element, loc);\n        }\n        if (this._shouldFosterParentOnInsertion()) {\n            this._fosterParentElement(element);\n        }\n        else {\n            const parent = this.openElements.currentTmplContentOrNode;\n            this.treeAdapter.appendChild(parent !== null && parent !== void 0 ? parent : this.document, element);\n        }\n    }\n    /**\n     * For self-closing tags. Add an element to the tree, but skip adding it\n     * to the stack.\n     */\n    /** @protected */\n    _appendElement(token, namespaceURI) {\n        const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n        this._attachElementToTree(element, token.location);\n    }\n    /** @protected */\n    _insertElement(token, namespaceURI) {\n        const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n        this._attachElementToTree(element, token.location);\n        this.openElements.push(element, token.tagID);\n    }\n    /** @protected */\n    _insertFakeElement(tagName, tagID) {\n        const element = this.treeAdapter.createElement(tagName, NS.HTML, []);\n        this._attachElementToTree(element, null);\n        this.openElements.push(element, tagID);\n    }\n    /** @protected */\n    _insertTemplate(token) {\n        const tmpl = this.treeAdapter.createElement(token.tagName, NS.HTML, token.attrs);\n        const content = this.treeAdapter.createDocumentFragment();\n        this.treeAdapter.setTemplateContent(tmpl, content);\n        this._attachElementToTree(tmpl, token.location);\n        this.openElements.push(tmpl, token.tagID);\n        if (this.options.sourceCodeLocationInfo)\n            this.treeAdapter.setNodeSourceCodeLocation(content, null);\n    }\n    /** @protected */\n    _insertFakeRootElement() {\n        const element = this.treeAdapter.createElement(TN.HTML, NS.HTML, []);\n        if (this.options.sourceCodeLocationInfo)\n            this.treeAdapter.setNodeSourceCodeLocation(element, null);\n        this.treeAdapter.appendChild(this.openElements.current, element);\n        this.openElements.push(element, $.HTML);\n    }\n    /** @protected */\n    _appendCommentNode(token, parent) {\n        const commentNode = this.treeAdapter.createCommentNode(token.data);\n        this.treeAdapter.appendChild(parent, commentNode);\n        if (this.options.sourceCodeLocationInfo) {\n            this.treeAdapter.setNodeSourceCodeLocation(commentNode, token.location);\n        }\n    }\n    /** @protected */\n    _insertCharacters(token) {\n        let parent;\n        let beforeElement;\n        if (this._shouldFosterParentOnInsertion()) {\n            ({ parent, beforeElement } = this._findFosterParentingLocation());\n            if (beforeElement) {\n                this.treeAdapter.insertTextBefore(parent, token.chars, beforeElement);\n            }\n            else {\n                this.treeAdapter.insertText(parent, token.chars);\n            }\n        }\n        else {\n            parent = this.openElements.currentTmplContentOrNode;\n            this.treeAdapter.insertText(parent, token.chars);\n        }\n        if (!token.location)\n            return;\n        const siblings = this.treeAdapter.getChildNodes(parent);\n        const textNodeIdx = beforeElement ? siblings.lastIndexOf(beforeElement) : siblings.length;\n        const textNode = siblings[textNodeIdx - 1];\n        //NOTE: if we have a location assigned by another token, then just update the end position\n        const tnLoc = this.treeAdapter.getNodeSourceCodeLocation(textNode);\n        if (tnLoc) {\n            const { endLine, endCol, endOffset } = token.location;\n            this.treeAdapter.updateNodeSourceCodeLocation(textNode, { endLine, endCol, endOffset });\n        }\n        else if (this.options.sourceCodeLocationInfo) {\n            this.treeAdapter.setNodeSourceCodeLocation(textNode, token.location);\n        }\n    }\n    /** @protected */\n    _adoptNodes(donor, recipient) {\n        for (let child = this.treeAdapter.getFirstChild(donor); child; child = this.treeAdapter.getFirstChild(donor)) {\n            this.treeAdapter.detachNode(child);\n            this.treeAdapter.appendChild(recipient, child);\n        }\n    }\n    /** @protected */\n    _setEndLocation(element, closingToken) {\n        if (this.treeAdapter.getNodeSourceCodeLocation(element) && closingToken.location) {\n            const ctLoc = closingToken.location;\n            const tn = this.treeAdapter.getTagName(element);\n            const endLoc = \n            // NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing\n            // tag and for cases like <td> <p> </td> - 'p' closes without a closing tag.\n            closingToken.type === TokenType.END_TAG && tn === closingToken.tagName\n                ? {\n                    endTag: { ...ctLoc },\n                    endLine: ctLoc.endLine,\n                    endCol: ctLoc.endCol,\n                    endOffset: ctLoc.endOffset,\n                }\n                : {\n                    endLine: ctLoc.startLine,\n                    endCol: ctLoc.startCol,\n                    endOffset: ctLoc.startOffset,\n                };\n            this.treeAdapter.updateNodeSourceCodeLocation(element, endLoc);\n        }\n    }\n    //Token processing\n    shouldProcessStartTagTokenInForeignContent(token) {\n        // Check that neither current === document, or ns === NS.HTML\n        if (!this.currentNotInHTML)\n            return false;\n        let current;\n        let currentTagId;\n        if (this.openElements.stackTop === 0 && this.fragmentContext) {\n            current = this.fragmentContext;\n            currentTagId = this.fragmentContextID;\n        }\n        else {\n            ({ current, currentTagId } = this.openElements);\n        }\n        if (token.tagID === $.SVG &&\n            this.treeAdapter.getTagName(current) === TN.ANNOTATION_XML &&\n            this.treeAdapter.getNamespaceURI(current) === NS.MATHML) {\n            return false;\n        }\n        return (\n        // Check that `current` is not an integration point for HTML or MathML elements.\n        this.tokenizer.inForeignNode ||\n            // If it _is_ an integration point, then we might have to check that it is not an HTML\n            // integration point.\n            ((token.tagID === $.MGLYPH || token.tagID === $.MALIGNMARK) &&\n                currentTagId !== undefined &&\n                !this._isIntegrationPoint(currentTagId, current, NS.HTML)));\n    }\n    /** @protected */\n    _processToken(token) {\n        switch (token.type) {\n            case TokenType.CHARACTER: {\n                this.onCharacter(token);\n                break;\n            }\n            case TokenType.NULL_CHARACTER: {\n                this.onNullCharacter(token);\n                break;\n            }\n            case TokenType.COMMENT: {\n                this.onComment(token);\n                break;\n            }\n            case TokenType.DOCTYPE: {\n                this.onDoctype(token);\n                break;\n            }\n            case TokenType.START_TAG: {\n                this._processStartTag(token);\n                break;\n            }\n            case TokenType.END_TAG: {\n                this.onEndTag(token);\n                break;\n            }\n            case TokenType.EOF: {\n                this.onEof(token);\n                break;\n            }\n            case TokenType.WHITESPACE_CHARACTER: {\n                this.onWhitespaceCharacter(token);\n                break;\n            }\n        }\n    }\n    //Integration points\n    /** @protected */\n    _isIntegrationPoint(tid, element, foreignNS) {\n        const ns = this.treeAdapter.getNamespaceURI(element);\n        const attrs = this.treeAdapter.getAttrList(element);\n        return foreignContent.isIntegrationPoint(tid, ns, attrs, foreignNS);\n    }\n    //Active formatting elements reconstruction\n    /** @protected */\n    _reconstructActiveFormattingElements() {\n        const listLength = this.activeFormattingElements.entries.length;\n        if (listLength) {\n            const endIndex = this.activeFormattingElements.entries.findIndex((entry) => entry.type === EntryType.Marker || this.openElements.contains(entry.element));\n            const unopenIdx = endIndex === -1 ? listLength - 1 : endIndex - 1;\n            for (let i = unopenIdx; i >= 0; i--) {\n                const entry = this.activeFormattingElements.entries[i];\n                this._insertElement(entry.token, this.treeAdapter.getNamespaceURI(entry.element));\n                entry.element = this.openElements.current;\n            }\n        }\n    }\n    //Close elements\n    /** @protected */\n    _closeTableCell() {\n        this.openElements.generateImpliedEndTags();\n        this.openElements.popUntilTableCellPopped();\n        this.activeFormattingElements.clearToLastMarker();\n        this.insertionMode = InsertionMode.IN_ROW;\n    }\n    /** @protected */\n    _closePElement() {\n        this.openElements.generateImpliedEndTagsWithExclusion($.P);\n        this.openElements.popUntilTagNamePopped($.P);\n    }\n    //Insertion modes\n    /** @protected */\n    _resetInsertionMode() {\n        for (let i = this.openElements.stackTop; i >= 0; i--) {\n            //Insertion mode reset map\n            switch (i === 0 && this.fragmentContext ? this.fragmentContextID : this.openElements.tagIDs[i]) {\n                case $.TR: {\n                    this.insertionMode = InsertionMode.IN_ROW;\n                    return;\n                }\n                case $.TBODY:\n                case $.THEAD:\n                case $.TFOOT: {\n                    this.insertionMode = InsertionMode.IN_TABLE_BODY;\n                    return;\n                }\n                case $.CAPTION: {\n                    this.insertionMode = InsertionMode.IN_CAPTION;\n                    return;\n                }\n                case $.COLGROUP: {\n                    this.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n                    return;\n                }\n                case $.TABLE: {\n                    this.insertionMode = InsertionMode.IN_TABLE;\n                    return;\n                }\n                case $.BODY: {\n                    this.insertionMode = InsertionMode.IN_BODY;\n                    return;\n                }\n                case $.FRAMESET: {\n                    this.insertionMode = InsertionMode.IN_FRAMESET;\n                    return;\n                }\n                case $.SELECT: {\n                    this._resetInsertionModeForSelect(i);\n                    return;\n                }\n                case $.TEMPLATE: {\n                    this.insertionMode = this.tmplInsertionModeStack[0];\n                    return;\n                }\n                case $.HTML: {\n                    this.insertionMode = this.headElement ? InsertionMode.AFTER_HEAD : InsertionMode.BEFORE_HEAD;\n                    return;\n                }\n                case $.TD:\n                case $.TH: {\n                    if (i > 0) {\n                        this.insertionMode = InsertionMode.IN_CELL;\n                        return;\n                    }\n                    break;\n                }\n                case $.HEAD: {\n                    if (i > 0) {\n                        this.insertionMode = InsertionMode.IN_HEAD;\n                        return;\n                    }\n                    break;\n                }\n            }\n        }\n        this.insertionMode = InsertionMode.IN_BODY;\n    }\n    /** @protected */\n    _resetInsertionModeForSelect(selectIdx) {\n        if (selectIdx > 0) {\n            for (let i = selectIdx - 1; i > 0; i--) {\n                const tn = this.openElements.tagIDs[i];\n                if (tn === $.TEMPLATE) {\n                    break;\n                }\n                else if (tn === $.TABLE) {\n                    this.insertionMode = InsertionMode.IN_SELECT_IN_TABLE;\n                    return;\n                }\n            }\n        }\n        this.insertionMode = InsertionMode.IN_SELECT;\n    }\n    //Foster parenting\n    /** @protected */\n    _isElementCausesFosterParenting(tn) {\n        return TABLE_STRUCTURE_TAGS.has(tn);\n    }\n    /** @protected */\n    _shouldFosterParentOnInsertion() {\n        return (this.fosterParentingEnabled &&\n            this.openElements.currentTagId !== undefined &&\n            this._isElementCausesFosterParenting(this.openElements.currentTagId));\n    }\n    /** @protected */\n    _findFosterParentingLocation() {\n        for (let i = this.openElements.stackTop; i >= 0; i--) {\n            const openElement = this.openElements.items[i];\n            switch (this.openElements.tagIDs[i]) {\n                case $.TEMPLATE: {\n                    if (this.treeAdapter.getNamespaceURI(openElement) === NS.HTML) {\n                        return { parent: this.treeAdapter.getTemplateContent(openElement), beforeElement: null };\n                    }\n                    break;\n                }\n                case $.TABLE: {\n                    const parent = this.treeAdapter.getParentNode(openElement);\n                    if (parent) {\n                        return { parent, beforeElement: openElement };\n                    }\n                    return { parent: this.openElements.items[i - 1], beforeElement: null };\n                }\n                default:\n                // Do nothing\n            }\n        }\n        return { parent: this.openElements.items[0], beforeElement: null };\n    }\n    /** @protected */\n    _fosterParentElement(element) {\n        const location = this._findFosterParentingLocation();\n        if (location.beforeElement) {\n            this.treeAdapter.insertBefore(location.parent, element, location.beforeElement);\n        }\n        else {\n            this.treeAdapter.appendChild(location.parent, element);\n        }\n    }\n    //Special elements\n    /** @protected */\n    _isSpecialElement(element, id) {\n        const ns = this.treeAdapter.getNamespaceURI(element);\n        return SPECIAL_ELEMENTS[ns].has(id);\n    }\n    /** @internal */\n    onCharacter(token) {\n        this.skipNextNewLine = false;\n        if (this.tokenizer.inForeignNode) {\n            characterInForeignContent(this, token);\n            return;\n        }\n        switch (this.insertionMode) {\n            case InsertionMode.INITIAL: {\n                tokenInInitialMode(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HTML: {\n                tokenBeforeHtml(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HEAD: {\n                tokenBeforeHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD: {\n                tokenInHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD_NO_SCRIPT: {\n                tokenInHeadNoScript(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_HEAD: {\n                tokenAfterHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_BODY:\n            case InsertionMode.IN_CAPTION:\n            case InsertionMode.IN_CELL:\n            case InsertionMode.IN_TEMPLATE: {\n                characterInBody(this, token);\n                break;\n            }\n            case InsertionMode.TEXT:\n            case InsertionMode.IN_SELECT:\n            case InsertionMode.IN_SELECT_IN_TABLE: {\n                this._insertCharacters(token);\n                break;\n            }\n            case InsertionMode.IN_TABLE:\n            case InsertionMode.IN_TABLE_BODY:\n            case InsertionMode.IN_ROW: {\n                characterInTable(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_TEXT: {\n                characterInTableText(this, token);\n                break;\n            }\n            case InsertionMode.IN_COLUMN_GROUP: {\n                tokenInColumnGroup(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_BODY: {\n                tokenAfterBody(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_AFTER_BODY: {\n                tokenAfterAfterBody(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    /** @internal */\n    onNullCharacter(token) {\n        this.skipNextNewLine = false;\n        if (this.tokenizer.inForeignNode) {\n            nullCharacterInForeignContent(this, token);\n            return;\n        }\n        switch (this.insertionMode) {\n            case InsertionMode.INITIAL: {\n                tokenInInitialMode(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HTML: {\n                tokenBeforeHtml(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HEAD: {\n                tokenBeforeHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD: {\n                tokenInHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD_NO_SCRIPT: {\n                tokenInHeadNoScript(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_HEAD: {\n                tokenAfterHead(this, token);\n                break;\n            }\n            case InsertionMode.TEXT: {\n                this._insertCharacters(token);\n                break;\n            }\n            case InsertionMode.IN_TABLE:\n            case InsertionMode.IN_TABLE_BODY:\n            case InsertionMode.IN_ROW: {\n                characterInTable(this, token);\n                break;\n            }\n            case InsertionMode.IN_COLUMN_GROUP: {\n                tokenInColumnGroup(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_BODY: {\n                tokenAfterBody(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_AFTER_BODY: {\n                tokenAfterAfterBody(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    /** @internal */\n    onComment(token) {\n        this.skipNextNewLine = false;\n        if (this.currentNotInHTML) {\n            appendComment(this, token);\n            return;\n        }\n        switch (this.insertionMode) {\n            case InsertionMode.INITIAL:\n            case InsertionMode.BEFORE_HTML:\n            case InsertionMode.BEFORE_HEAD:\n            case InsertionMode.IN_HEAD:\n            case InsertionMode.IN_HEAD_NO_SCRIPT:\n            case InsertionMode.AFTER_HEAD:\n            case InsertionMode.IN_BODY:\n            case InsertionMode.IN_TABLE:\n            case InsertionMode.IN_CAPTION:\n            case InsertionMode.IN_COLUMN_GROUP:\n            case InsertionMode.IN_TABLE_BODY:\n            case InsertionMode.IN_ROW:\n            case InsertionMode.IN_CELL:\n            case InsertionMode.IN_SELECT:\n            case InsertionMode.IN_SELECT_IN_TABLE:\n            case InsertionMode.IN_TEMPLATE:\n            case InsertionMode.IN_FRAMESET:\n            case InsertionMode.AFTER_FRAMESET: {\n                appendComment(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_TEXT: {\n                tokenInTableText(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_BODY: {\n                appendCommentToRootHtmlElement(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_AFTER_BODY:\n            case InsertionMode.AFTER_AFTER_FRAMESET: {\n                appendCommentToDocument(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    /** @internal */\n    onDoctype(token) {\n        this.skipNextNewLine = false;\n        switch (this.insertionMode) {\n            case InsertionMode.INITIAL: {\n                doctypeInInitialMode(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HEAD:\n            case InsertionMode.IN_HEAD:\n            case InsertionMode.IN_HEAD_NO_SCRIPT:\n            case InsertionMode.AFTER_HEAD: {\n                this._err(token, ERR.misplacedDoctype);\n                break;\n            }\n            case InsertionMode.IN_TABLE_TEXT: {\n                tokenInTableText(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    /** @internal */\n    onStartTag(token) {\n        this.skipNextNewLine = false;\n        this.currentToken = token;\n        this._processStartTag(token);\n        if (token.selfClosing && !token.ackSelfClosing) {\n            this._err(token, ERR.nonVoidHtmlElementStartTagWithTrailingSolidus);\n        }\n    }\n    /**\n     * Processes a given start tag.\n     *\n     * `onStartTag` checks if a self-closing tag was recognized. When a token\n     * is moved inbetween multiple insertion modes, this check for self-closing\n     * could lead to false positives. To avoid this, `_processStartTag` is used\n     * for nested calls.\n     *\n     * @param token The token to process.\n     * @protected\n     */\n    _processStartTag(token) {\n        if (this.shouldProcessStartTagTokenInForeignContent(token)) {\n            startTagInForeignContent(this, token);\n        }\n        else {\n            this._startTagOutsideForeignContent(token);\n        }\n    }\n    /** @protected */\n    _startTagOutsideForeignContent(token) {\n        switch (this.insertionMode) {\n            case InsertionMode.INITIAL: {\n                tokenInInitialMode(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HTML: {\n                startTagBeforeHtml(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HEAD: {\n                startTagBeforeHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD: {\n                startTagInHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD_NO_SCRIPT: {\n                startTagInHeadNoScript(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_HEAD: {\n                startTagAfterHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_BODY: {\n                startTagInBody(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE: {\n                startTagInTable(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_TEXT: {\n                tokenInTableText(this, token);\n                break;\n            }\n            case InsertionMode.IN_CAPTION: {\n                startTagInCaption(this, token);\n                break;\n            }\n            case InsertionMode.IN_COLUMN_GROUP: {\n                startTagInColumnGroup(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_BODY: {\n                startTagInTableBody(this, token);\n                break;\n            }\n            case InsertionMode.IN_ROW: {\n                startTagInRow(this, token);\n                break;\n            }\n            case InsertionMode.IN_CELL: {\n                startTagInCell(this, token);\n                break;\n            }\n            case InsertionMode.IN_SELECT: {\n                startTagInSelect(this, token);\n                break;\n            }\n            case InsertionMode.IN_SELECT_IN_TABLE: {\n                startTagInSelectInTable(this, token);\n                break;\n            }\n            case InsertionMode.IN_TEMPLATE: {\n                startTagInTemplate(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_BODY: {\n                startTagAfterBody(this, token);\n                break;\n            }\n            case InsertionMode.IN_FRAMESET: {\n                startTagInFrameset(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_FRAMESET: {\n                startTagAfterFrameset(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_AFTER_BODY: {\n                startTagAfterAfterBody(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_AFTER_FRAMESET: {\n                startTagAfterAfterFrameset(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    /** @internal */\n    onEndTag(token) {\n        this.skipNextNewLine = false;\n        this.currentToken = token;\n        if (this.currentNotInHTML) {\n            endTagInForeignContent(this, token);\n        }\n        else {\n            this._endTagOutsideForeignContent(token);\n        }\n    }\n    /** @protected */\n    _endTagOutsideForeignContent(token) {\n        switch (this.insertionMode) {\n            case InsertionMode.INITIAL: {\n                tokenInInitialMode(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HTML: {\n                endTagBeforeHtml(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HEAD: {\n                endTagBeforeHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD: {\n                endTagInHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD_NO_SCRIPT: {\n                endTagInHeadNoScript(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_HEAD: {\n                endTagAfterHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_BODY: {\n                endTagInBody(this, token);\n                break;\n            }\n            case InsertionMode.TEXT: {\n                endTagInText(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE: {\n                endTagInTable(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_TEXT: {\n                tokenInTableText(this, token);\n                break;\n            }\n            case InsertionMode.IN_CAPTION: {\n                endTagInCaption(this, token);\n                break;\n            }\n            case InsertionMode.IN_COLUMN_GROUP: {\n                endTagInColumnGroup(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_BODY: {\n                endTagInTableBody(this, token);\n                break;\n            }\n            case InsertionMode.IN_ROW: {\n                endTagInRow(this, token);\n                break;\n            }\n            case InsertionMode.IN_CELL: {\n                endTagInCell(this, token);\n                break;\n            }\n            case InsertionMode.IN_SELECT: {\n                endTagInSelect(this, token);\n                break;\n            }\n            case InsertionMode.IN_SELECT_IN_TABLE: {\n                endTagInSelectInTable(this, token);\n                break;\n            }\n            case InsertionMode.IN_TEMPLATE: {\n                endTagInTemplate(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_BODY: {\n                endTagAfterBody(this, token);\n                break;\n            }\n            case InsertionMode.IN_FRAMESET: {\n                endTagInFrameset(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_FRAMESET: {\n                endTagAfterFrameset(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_AFTER_BODY: {\n                tokenAfterAfterBody(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    /** @internal */\n    onEof(token) {\n        switch (this.insertionMode) {\n            case InsertionMode.INITIAL: {\n                tokenInInitialMode(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HTML: {\n                tokenBeforeHtml(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HEAD: {\n                tokenBeforeHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD: {\n                tokenInHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD_NO_SCRIPT: {\n                tokenInHeadNoScript(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_HEAD: {\n                tokenAfterHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_BODY:\n            case InsertionMode.IN_TABLE:\n            case InsertionMode.IN_CAPTION:\n            case InsertionMode.IN_COLUMN_GROUP:\n            case InsertionMode.IN_TABLE_BODY:\n            case InsertionMode.IN_ROW:\n            case InsertionMode.IN_CELL:\n            case InsertionMode.IN_SELECT:\n            case InsertionMode.IN_SELECT_IN_TABLE: {\n                eofInBody(this, token);\n                break;\n            }\n            case InsertionMode.TEXT: {\n                eofInText(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_TEXT: {\n                tokenInTableText(this, token);\n                break;\n            }\n            case InsertionMode.IN_TEMPLATE: {\n                eofInTemplate(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_BODY:\n            case InsertionMode.IN_FRAMESET:\n            case InsertionMode.AFTER_FRAMESET:\n            case InsertionMode.AFTER_AFTER_BODY:\n            case InsertionMode.AFTER_AFTER_FRAMESET: {\n                stopParsing(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    /** @internal */\n    onWhitespaceCharacter(token) {\n        if (this.skipNextNewLine) {\n            this.skipNextNewLine = false;\n            if (token.chars.charCodeAt(0) === unicode.CODE_POINTS.LINE_FEED) {\n                if (token.chars.length === 1) {\n                    return;\n                }\n                token.chars = token.chars.substr(1);\n            }\n        }\n        if (this.tokenizer.inForeignNode) {\n            this._insertCharacters(token);\n            return;\n        }\n        switch (this.insertionMode) {\n            case InsertionMode.IN_HEAD:\n            case InsertionMode.IN_HEAD_NO_SCRIPT:\n            case InsertionMode.AFTER_HEAD:\n            case InsertionMode.TEXT:\n            case InsertionMode.IN_COLUMN_GROUP:\n            case InsertionMode.IN_SELECT:\n            case InsertionMode.IN_SELECT_IN_TABLE:\n            case InsertionMode.IN_FRAMESET:\n            case InsertionMode.AFTER_FRAMESET: {\n                this._insertCharacters(token);\n                break;\n            }\n            case InsertionMode.IN_BODY:\n            case InsertionMode.IN_CAPTION:\n            case InsertionMode.IN_CELL:\n            case InsertionMode.IN_TEMPLATE:\n            case InsertionMode.AFTER_BODY:\n            case InsertionMode.AFTER_AFTER_BODY:\n            case InsertionMode.AFTER_AFTER_FRAMESET: {\n                whitespaceCharacterInBody(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE:\n            case InsertionMode.IN_TABLE_BODY:\n            case InsertionMode.IN_ROW: {\n                characterInTable(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_TEXT: {\n                whitespaceCharacterInTableText(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n}\n//Adoption agency algorithm\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#adoptionAgency)\n//------------------------------------------------------------------\n//Steps 5-8 of the algorithm\nfunction aaObtainFormattingElementEntry(p, token) {\n    let formattingElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(token.tagName);\n    if (formattingElementEntry) {\n        if (!p.openElements.contains(formattingElementEntry.element)) {\n            p.activeFormattingElements.removeEntry(formattingElementEntry);\n            formattingElementEntry = null;\n        }\n        else if (!p.openElements.hasInScope(token.tagID)) {\n            formattingElementEntry = null;\n        }\n    }\n    else {\n        genericEndTagInBody(p, token);\n    }\n    return formattingElementEntry;\n}\n//Steps 9 and 10 of the algorithm\nfunction aaObtainFurthestBlock(p, formattingElementEntry) {\n    let furthestBlock = null;\n    let idx = p.openElements.stackTop;\n    for (; idx >= 0; idx--) {\n        const element = p.openElements.items[idx];\n        if (element === formattingElementEntry.element) {\n            break;\n        }\n        if (p._isSpecialElement(element, p.openElements.tagIDs[idx])) {\n            furthestBlock = element;\n        }\n    }\n    if (!furthestBlock) {\n        p.openElements.shortenToLength(Math.max(idx, 0));\n        p.activeFormattingElements.removeEntry(formattingElementEntry);\n    }\n    return furthestBlock;\n}\n//Step 13 of the algorithm\nfunction aaInnerLoop(p, furthestBlock, formattingElement) {\n    let lastElement = furthestBlock;\n    let nextElement = p.openElements.getCommonAncestor(furthestBlock);\n    for (let i = 0, element = nextElement; element !== formattingElement; i++, element = nextElement) {\n        //NOTE: store the next element for the next loop iteration (it may be deleted from the stack by step 9.5)\n        nextElement = p.openElements.getCommonAncestor(element);\n        const elementEntry = p.activeFormattingElements.getElementEntry(element);\n        const counterOverflow = elementEntry && i >= AA_INNER_LOOP_ITER;\n        const shouldRemoveFromOpenElements = !elementEntry || counterOverflow;\n        if (shouldRemoveFromOpenElements) {\n            if (counterOverflow) {\n                p.activeFormattingElements.removeEntry(elementEntry);\n            }\n            p.openElements.remove(element);\n        }\n        else {\n            element = aaRecreateElementFromEntry(p, elementEntry);\n            if (lastElement === furthestBlock) {\n                p.activeFormattingElements.bookmark = elementEntry;\n            }\n            p.treeAdapter.detachNode(lastElement);\n            p.treeAdapter.appendChild(element, lastElement);\n            lastElement = element;\n        }\n    }\n    return lastElement;\n}\n//Step 13.7 of the algorithm\nfunction aaRecreateElementFromEntry(p, elementEntry) {\n    const ns = p.treeAdapter.getNamespaceURI(elementEntry.element);\n    const newElement = p.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs);\n    p.openElements.replace(elementEntry.element, newElement);\n    elementEntry.element = newElement;\n    return newElement;\n}\n//Step 14 of the algorithm\nfunction aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement) {\n    const tn = p.treeAdapter.getTagName(commonAncestor);\n    const tid = getTagID(tn);\n    if (p._isElementCausesFosterParenting(tid)) {\n        p._fosterParentElement(lastElement);\n    }\n    else {\n        const ns = p.treeAdapter.getNamespaceURI(commonAncestor);\n        if (tid === $.TEMPLATE && ns === NS.HTML) {\n            commonAncestor = p.treeAdapter.getTemplateContent(commonAncestor);\n        }\n        p.treeAdapter.appendChild(commonAncestor, lastElement);\n    }\n}\n//Steps 15-19 of the algorithm\nfunction aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry) {\n    const ns = p.treeAdapter.getNamespaceURI(formattingElementEntry.element);\n    const { token } = formattingElementEntry;\n    const newElement = p.treeAdapter.createElement(token.tagName, ns, token.attrs);\n    p._adoptNodes(furthestBlock, newElement);\n    p.treeAdapter.appendChild(furthestBlock, newElement);\n    p.activeFormattingElements.insertElementAfterBookmark(newElement, token);\n    p.activeFormattingElements.removeEntry(formattingElementEntry);\n    p.openElements.remove(formattingElementEntry.element);\n    p.openElements.insertAfter(furthestBlock, newElement, token.tagID);\n}\n//Algorithm entry point\nfunction callAdoptionAgency(p, token) {\n    for (let i = 0; i < AA_OUTER_LOOP_ITER; i++) {\n        const formattingElementEntry = aaObtainFormattingElementEntry(p, token);\n        if (!formattingElementEntry) {\n            break;\n        }\n        const furthestBlock = aaObtainFurthestBlock(p, formattingElementEntry);\n        if (!furthestBlock) {\n            break;\n        }\n        p.activeFormattingElements.bookmark = formattingElementEntry;\n        const lastElement = aaInnerLoop(p, furthestBlock, formattingElementEntry.element);\n        const commonAncestor = p.openElements.getCommonAncestor(formattingElementEntry.element);\n        p.treeAdapter.detachNode(lastElement);\n        if (commonAncestor)\n            aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement);\n        aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry);\n    }\n}\n//Generic token handlers\n//------------------------------------------------------------------\nfunction appendComment(p, token) {\n    p._appendCommentNode(token, p.openElements.currentTmplContentOrNode);\n}\nfunction appendCommentToRootHtmlElement(p, token) {\n    p._appendCommentNode(token, p.openElements.items[0]);\n}\nfunction appendCommentToDocument(p, token) {\n    p._appendCommentNode(token, p.document);\n}\nfunction stopParsing(p, token) {\n    p.stopped = true;\n    // NOTE: Set end locations for elements that remain on the open element stack.\n    if (token.location) {\n        // NOTE: If we are not in a fragment, `html` and `body` will stay on the stack.\n        // This is a problem, as we might overwrite their end position here.\n        const target = p.fragmentContext ? 0 : 2;\n        for (let i = p.openElements.stackTop; i >= target; i--) {\n            p._setEndLocation(p.openElements.items[i], token);\n        }\n        // Handle `html` and `body`\n        if (!p.fragmentContext && p.openElements.stackTop >= 0) {\n            const htmlElement = p.openElements.items[0];\n            const htmlLocation = p.treeAdapter.getNodeSourceCodeLocation(htmlElement);\n            if (htmlLocation && !htmlLocation.endTag) {\n                p._setEndLocation(htmlElement, token);\n                if (p.openElements.stackTop >= 1) {\n                    const bodyElement = p.openElements.items[1];\n                    const bodyLocation = p.treeAdapter.getNodeSourceCodeLocation(bodyElement);\n                    if (bodyLocation && !bodyLocation.endTag) {\n                        p._setEndLocation(bodyElement, token);\n                    }\n                }\n            }\n        }\n    }\n}\n// The \"initial\" insertion mode\n//------------------------------------------------------------------\nfunction doctypeInInitialMode(p, token) {\n    p._setDocumentType(token);\n    const mode = token.forceQuirks ? DOCUMENT_MODE.QUIRKS : doctype.getDocumentMode(token);\n    if (!doctype.isConforming(token)) {\n        p._err(token, ERR.nonConformingDoctype);\n    }\n    p.treeAdapter.setDocumentMode(p.document, mode);\n    p.insertionMode = InsertionMode.BEFORE_HTML;\n}\nfunction tokenInInitialMode(p, token) {\n    p._err(token, ERR.missingDoctype, true);\n    p.treeAdapter.setDocumentMode(p.document, DOCUMENT_MODE.QUIRKS);\n    p.insertionMode = InsertionMode.BEFORE_HTML;\n    p._processToken(token);\n}\n// The \"before html\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHtml(p, token) {\n    if (token.tagID === $.HTML) {\n        p._insertElement(token, NS.HTML);\n        p.insertionMode = InsertionMode.BEFORE_HEAD;\n    }\n    else {\n        tokenBeforeHtml(p, token);\n    }\n}\nfunction endTagBeforeHtml(p, token) {\n    const tn = token.tagID;\n    if (tn === $.HTML || tn === $.HEAD || tn === $.BODY || tn === $.BR) {\n        tokenBeforeHtml(p, token);\n    }\n}\nfunction tokenBeforeHtml(p, token) {\n    p._insertFakeRootElement();\n    p.insertionMode = InsertionMode.BEFORE_HEAD;\n    p._processToken(token);\n}\n// The \"before head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHead(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.HEAD: {\n            p._insertElement(token, NS.HTML);\n            p.headElement = p.openElements.current;\n            p.insertionMode = InsertionMode.IN_HEAD;\n            break;\n        }\n        default: {\n            tokenBeforeHead(p, token);\n        }\n    }\n}\nfunction endTagBeforeHead(p, token) {\n    const tn = token.tagID;\n    if (tn === $.HEAD || tn === $.BODY || tn === $.HTML || tn === $.BR) {\n        tokenBeforeHead(p, token);\n    }\n    else {\n        p._err(token, ERR.endTagWithoutMatchingOpenElement);\n    }\n}\nfunction tokenBeforeHead(p, token) {\n    p._insertFakeElement(TN.HEAD, $.HEAD);\n    p.headElement = p.openElements.current;\n    p.insertionMode = InsertionMode.IN_HEAD;\n    p._processToken(token);\n}\n// The \"in head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHead(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.BASE:\n        case $.BASEFONT:\n        case $.BGSOUND:\n        case $.LINK:\n        case $.META: {\n            p._appendElement(token, NS.HTML);\n            token.ackSelfClosing = true;\n            break;\n        }\n        case $.TITLE: {\n            p._switchToTextParsing(token, TokenizerMode.RCDATA);\n            break;\n        }\n        case $.NOSCRIPT: {\n            if (p.options.scriptingEnabled) {\n                p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n            }\n            else {\n                p._insertElement(token, NS.HTML);\n                p.insertionMode = InsertionMode.IN_HEAD_NO_SCRIPT;\n            }\n            break;\n        }\n        case $.NOFRAMES:\n        case $.STYLE: {\n            p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n            break;\n        }\n        case $.SCRIPT: {\n            p._switchToTextParsing(token, TokenizerMode.SCRIPT_DATA);\n            break;\n        }\n        case $.TEMPLATE: {\n            p._insertTemplate(token);\n            p.activeFormattingElements.insertMarker();\n            p.framesetOk = false;\n            p.insertionMode = InsertionMode.IN_TEMPLATE;\n            p.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n            break;\n        }\n        case $.HEAD: {\n            p._err(token, ERR.misplacedStartTagForHeadElement);\n            break;\n        }\n        default: {\n            tokenInHead(p, token);\n        }\n    }\n}\nfunction endTagInHead(p, token) {\n    switch (token.tagID) {\n        case $.HEAD: {\n            p.openElements.pop();\n            p.insertionMode = InsertionMode.AFTER_HEAD;\n            break;\n        }\n        case $.BODY:\n        case $.BR:\n        case $.HTML: {\n            tokenInHead(p, token);\n            break;\n        }\n        case $.TEMPLATE: {\n            templateEndTagInHead(p, token);\n            break;\n        }\n        default: {\n            p._err(token, ERR.endTagWithoutMatchingOpenElement);\n        }\n    }\n}\nfunction templateEndTagInHead(p, token) {\n    if (p.openElements.tmplCount > 0) {\n        p.openElements.generateImpliedEndTagsThoroughly();\n        if (p.openElements.currentTagId !== $.TEMPLATE) {\n            p._err(token, ERR.closingOfElementWithOpenChildElements);\n        }\n        p.openElements.popUntilTagNamePopped($.TEMPLATE);\n        p.activeFormattingElements.clearToLastMarker();\n        p.tmplInsertionModeStack.shift();\n        p._resetInsertionMode();\n    }\n    else {\n        p._err(token, ERR.endTagWithoutMatchingOpenElement);\n    }\n}\nfunction tokenInHead(p, token) {\n    p.openElements.pop();\n    p.insertionMode = InsertionMode.AFTER_HEAD;\n    p._processToken(token);\n}\n// The \"in head no script\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHeadNoScript(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.BASEFONT:\n        case $.BGSOUND:\n        case $.HEAD:\n        case $.LINK:\n        case $.META:\n        case $.NOFRAMES:\n        case $.STYLE: {\n            startTagInHead(p, token);\n            break;\n        }\n        case $.NOSCRIPT: {\n            p._err(token, ERR.nestedNoscriptInHead);\n            break;\n        }\n        default: {\n            tokenInHeadNoScript(p, token);\n        }\n    }\n}\nfunction endTagInHeadNoScript(p, token) {\n    switch (token.tagID) {\n        case $.NOSCRIPT: {\n            p.openElements.pop();\n            p.insertionMode = InsertionMode.IN_HEAD;\n            break;\n        }\n        case $.BR: {\n            tokenInHeadNoScript(p, token);\n            break;\n        }\n        default: {\n            p._err(token, ERR.endTagWithoutMatchingOpenElement);\n        }\n    }\n}\nfunction tokenInHeadNoScript(p, token) {\n    const errCode = token.type === TokenType.EOF ? ERR.openElementsLeftAfterEof : ERR.disallowedContentInNoscriptInHead;\n    p._err(token, errCode);\n    p.openElements.pop();\n    p.insertionMode = InsertionMode.IN_HEAD;\n    p._processToken(token);\n}\n// The \"after head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterHead(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.BODY: {\n            p._insertElement(token, NS.HTML);\n            p.framesetOk = false;\n            p.insertionMode = InsertionMode.IN_BODY;\n            break;\n        }\n        case $.FRAMESET: {\n            p._insertElement(token, NS.HTML);\n            p.insertionMode = InsertionMode.IN_FRAMESET;\n            break;\n        }\n        case $.BASE:\n        case $.BASEFONT:\n        case $.BGSOUND:\n        case $.LINK:\n        case $.META:\n        case $.NOFRAMES:\n        case $.SCRIPT:\n        case $.STYLE:\n        case $.TEMPLATE:\n        case $.TITLE: {\n            p._err(token, ERR.abandonedHeadElementChild);\n            p.openElements.push(p.headElement, $.HEAD);\n            startTagInHead(p, token);\n            p.openElements.remove(p.headElement);\n            break;\n        }\n        case $.HEAD: {\n            p._err(token, ERR.misplacedStartTagForHeadElement);\n            break;\n        }\n        default: {\n            tokenAfterHead(p, token);\n        }\n    }\n}\nfunction endTagAfterHead(p, token) {\n    switch (token.tagID) {\n        case $.BODY:\n        case $.HTML:\n        case $.BR: {\n            tokenAfterHead(p, token);\n            break;\n        }\n        case $.TEMPLATE: {\n            templateEndTagInHead(p, token);\n            break;\n        }\n        default: {\n            p._err(token, ERR.endTagWithoutMatchingOpenElement);\n        }\n    }\n}\nfunction tokenAfterHead(p, token) {\n    p._insertFakeElement(TN.BODY, $.BODY);\n    p.insertionMode = InsertionMode.IN_BODY;\n    modeInBody(p, token);\n}\n// The \"in body\" insertion mode\n//------------------------------------------------------------------\nfunction modeInBody(p, token) {\n    switch (token.type) {\n        case TokenType.CHARACTER: {\n            characterInBody(p, token);\n            break;\n        }\n        case TokenType.WHITESPACE_CHARACTER: {\n            whitespaceCharacterInBody(p, token);\n            break;\n        }\n        case TokenType.COMMENT: {\n            appendComment(p, token);\n            break;\n        }\n        case TokenType.START_TAG: {\n            startTagInBody(p, token);\n            break;\n        }\n        case TokenType.END_TAG: {\n            endTagInBody(p, token);\n            break;\n        }\n        case TokenType.EOF: {\n            eofInBody(p, token);\n            break;\n        }\n        default:\n        // Do nothing\n    }\n}\nfunction whitespaceCharacterInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._insertCharacters(token);\n}\nfunction characterInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._insertCharacters(token);\n    p.framesetOk = false;\n}\nfunction htmlStartTagInBody(p, token) {\n    if (p.openElements.tmplCount === 0) {\n        p.treeAdapter.adoptAttributes(p.openElements.items[0], token.attrs);\n    }\n}\nfunction bodyStartTagInBody(p, token) {\n    const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n    if (bodyElement && p.openElements.tmplCount === 0) {\n        p.framesetOk = false;\n        p.treeAdapter.adoptAttributes(bodyElement, token.attrs);\n    }\n}\nfunction framesetStartTagInBody(p, token) {\n    const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n    if (p.framesetOk && bodyElement) {\n        p.treeAdapter.detachNode(bodyElement);\n        p.openElements.popAllUpToHtmlElement();\n        p._insertElement(token, NS.HTML);\n        p.insertionMode = InsertionMode.IN_FRAMESET;\n    }\n}\nfunction addressStartTagInBody(p, token) {\n    if (p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    p._insertElement(token, NS.HTML);\n}\nfunction numberedHeaderStartTagInBody(p, token) {\n    if (p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    if (p.openElements.currentTagId !== undefined && NUMBERED_HEADERS.has(p.openElements.currentTagId)) {\n        p.openElements.pop();\n    }\n    p._insertElement(token, NS.HTML);\n}\nfunction preStartTagInBody(p, token) {\n    if (p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    p._insertElement(token, NS.HTML);\n    //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n    //on to the next one. (Newlines at the start of pre blocks are ignored as an authoring convenience.)\n    p.skipNextNewLine = true;\n    p.framesetOk = false;\n}\nfunction formStartTagInBody(p, token) {\n    const inTemplate = p.openElements.tmplCount > 0;\n    if (!p.formElement || inTemplate) {\n        if (p.openElements.hasInButtonScope($.P)) {\n            p._closePElement();\n        }\n        p._insertElement(token, NS.HTML);\n        if (!inTemplate) {\n            p.formElement = p.openElements.current;\n        }\n    }\n}\nfunction listItemStartTagInBody(p, token) {\n    p.framesetOk = false;\n    const tn = token.tagID;\n    for (let i = p.openElements.stackTop; i >= 0; i--) {\n        const elementId = p.openElements.tagIDs[i];\n        if ((tn === $.LI && elementId === $.LI) ||\n            ((tn === $.DD || tn === $.DT) && (elementId === $.DD || elementId === $.DT))) {\n            p.openElements.generateImpliedEndTagsWithExclusion(elementId);\n            p.openElements.popUntilTagNamePopped(elementId);\n            break;\n        }\n        if (elementId !== $.ADDRESS &&\n            elementId !== $.DIV &&\n            elementId !== $.P &&\n            p._isSpecialElement(p.openElements.items[i], elementId)) {\n            break;\n        }\n    }\n    if (p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    p._insertElement(token, NS.HTML);\n}\nfunction plaintextStartTagInBody(p, token) {\n    if (p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    p._insertElement(token, NS.HTML);\n    p.tokenizer.state = TokenizerMode.PLAINTEXT;\n}\nfunction buttonStartTagInBody(p, token) {\n    if (p.openElements.hasInScope($.BUTTON)) {\n        p.openElements.generateImpliedEndTags();\n        p.openElements.popUntilTagNamePopped($.BUTTON);\n    }\n    p._reconstructActiveFormattingElements();\n    p._insertElement(token, NS.HTML);\n    p.framesetOk = false;\n}\nfunction aStartTagInBody(p, token) {\n    const activeElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(TN.A);\n    if (activeElementEntry) {\n        callAdoptionAgency(p, token);\n        p.openElements.remove(activeElementEntry.element);\n        p.activeFormattingElements.removeEntry(activeElementEntry);\n    }\n    p._reconstructActiveFormattingElements();\n    p._insertElement(token, NS.HTML);\n    p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction bStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._insertElement(token, NS.HTML);\n    p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction nobrStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    if (p.openElements.hasInScope($.NOBR)) {\n        callAdoptionAgency(p, token);\n        p._reconstructActiveFormattingElements();\n    }\n    p._insertElement(token, NS.HTML);\n    p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction appletStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._insertElement(token, NS.HTML);\n    p.activeFormattingElements.insertMarker();\n    p.framesetOk = false;\n}\nfunction tableStartTagInBody(p, token) {\n    if (p.treeAdapter.getDocumentMode(p.document) !== DOCUMENT_MODE.QUIRKS && p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    p._insertElement(token, NS.HTML);\n    p.framesetOk = false;\n    p.insertionMode = InsertionMode.IN_TABLE;\n}\nfunction areaStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._appendElement(token, NS.HTML);\n    p.framesetOk = false;\n    token.ackSelfClosing = true;\n}\nfunction isHiddenInput(token) {\n    const inputType = getTokenAttr(token, ATTRS.TYPE);\n    return inputType != null && inputType.toLowerCase() === HIDDEN_INPUT_TYPE;\n}\nfunction inputStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._appendElement(token, NS.HTML);\n    if (!isHiddenInput(token)) {\n        p.framesetOk = false;\n    }\n    token.ackSelfClosing = true;\n}\nfunction paramStartTagInBody(p, token) {\n    p._appendElement(token, NS.HTML);\n    token.ackSelfClosing = true;\n}\nfunction hrStartTagInBody(p, token) {\n    if (p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    p._appendElement(token, NS.HTML);\n    p.framesetOk = false;\n    token.ackSelfClosing = true;\n}\nfunction imageStartTagInBody(p, token) {\n    token.tagName = TN.IMG;\n    token.tagID = $.IMG;\n    areaStartTagInBody(p, token);\n}\nfunction textareaStartTagInBody(p, token) {\n    p._insertElement(token, NS.HTML);\n    //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n    //on to the next one. (Newlines at the start of textarea elements are ignored as an authoring convenience.)\n    p.skipNextNewLine = true;\n    p.tokenizer.state = TokenizerMode.RCDATA;\n    p.originalInsertionMode = p.insertionMode;\n    p.framesetOk = false;\n    p.insertionMode = InsertionMode.TEXT;\n}\nfunction xmpStartTagInBody(p, token) {\n    if (p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    p._reconstructActiveFormattingElements();\n    p.framesetOk = false;\n    p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction iframeStartTagInBody(p, token) {\n    p.framesetOk = false;\n    p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\n//NOTE: here we assume that we always act as a user agent with enabled plugins/frames, so we parse\n//<noembed>/<noframes> as rawtext.\nfunction rawTextStartTagInBody(p, token) {\n    p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction selectStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._insertElement(token, NS.HTML);\n    p.framesetOk = false;\n    p.insertionMode =\n        p.insertionMode === InsertionMode.IN_TABLE ||\n            p.insertionMode === InsertionMode.IN_CAPTION ||\n            p.insertionMode === InsertionMode.IN_TABLE_BODY ||\n            p.insertionMode === InsertionMode.IN_ROW ||\n            p.insertionMode === InsertionMode.IN_CELL\n            ? InsertionMode.IN_SELECT_IN_TABLE\n            : InsertionMode.IN_SELECT;\n}\nfunction optgroupStartTagInBody(p, token) {\n    if (p.openElements.currentTagId === $.OPTION) {\n        p.openElements.pop();\n    }\n    p._reconstructActiveFormattingElements();\n    p._insertElement(token, NS.HTML);\n}\nfunction rbStartTagInBody(p, token) {\n    if (p.openElements.hasInScope($.RUBY)) {\n        p.openElements.generateImpliedEndTags();\n    }\n    p._insertElement(token, NS.HTML);\n}\nfunction rtStartTagInBody(p, token) {\n    if (p.openElements.hasInScope($.RUBY)) {\n        p.openElements.generateImpliedEndTagsWithExclusion($.RTC);\n    }\n    p._insertElement(token, NS.HTML);\n}\nfunction mathStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    foreignContent.adjustTokenMathMLAttrs(token);\n    foreignContent.adjustTokenXMLAttrs(token);\n    if (token.selfClosing) {\n        p._appendElement(token, NS.MATHML);\n    }\n    else {\n        p._insertElement(token, NS.MATHML);\n    }\n    token.ackSelfClosing = true;\n}\nfunction svgStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    foreignContent.adjustTokenSVGAttrs(token);\n    foreignContent.adjustTokenXMLAttrs(token);\n    if (token.selfClosing) {\n        p._appendElement(token, NS.SVG);\n    }\n    else {\n        p._insertElement(token, NS.SVG);\n    }\n    token.ackSelfClosing = true;\n}\nfunction genericStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._insertElement(token, NS.HTML);\n}\nfunction startTagInBody(p, token) {\n    switch (token.tagID) {\n        case $.I:\n        case $.S:\n        case $.B:\n        case $.U:\n        case $.EM:\n        case $.TT:\n        case $.BIG:\n        case $.CODE:\n        case $.FONT:\n        case $.SMALL:\n        case $.STRIKE:\n        case $.STRONG: {\n            bStartTagInBody(p, token);\n            break;\n        }\n        case $.A: {\n            aStartTagInBody(p, token);\n            break;\n        }\n        case $.H1:\n        case $.H2:\n        case $.H3:\n        case $.H4:\n        case $.H5:\n        case $.H6: {\n            numberedHeaderStartTagInBody(p, token);\n            break;\n        }\n        case $.P:\n        case $.DL:\n        case $.OL:\n        case $.UL:\n        case $.DIV:\n        case $.DIR:\n        case $.NAV:\n        case $.MAIN:\n        case $.MENU:\n        case $.ASIDE:\n        case $.CENTER:\n        case $.FIGURE:\n        case $.FOOTER:\n        case $.HEADER:\n        case $.HGROUP:\n        case $.DIALOG:\n        case $.DETAILS:\n        case $.ADDRESS:\n        case $.ARTICLE:\n        case $.SEARCH:\n        case $.SECTION:\n        case $.SUMMARY:\n        case $.FIELDSET:\n        case $.BLOCKQUOTE:\n        case $.FIGCAPTION: {\n            addressStartTagInBody(p, token);\n            break;\n        }\n        case $.LI:\n        case $.DD:\n        case $.DT: {\n            listItemStartTagInBody(p, token);\n            break;\n        }\n        case $.BR:\n        case $.IMG:\n        case $.WBR:\n        case $.AREA:\n        case $.EMBED:\n        case $.KEYGEN: {\n            areaStartTagInBody(p, token);\n            break;\n        }\n        case $.HR: {\n            hrStartTagInBody(p, token);\n            break;\n        }\n        case $.RB:\n        case $.RTC: {\n            rbStartTagInBody(p, token);\n            break;\n        }\n        case $.RT:\n        case $.RP: {\n            rtStartTagInBody(p, token);\n            break;\n        }\n        case $.PRE:\n        case $.LISTING: {\n            preStartTagInBody(p, token);\n            break;\n        }\n        case $.XMP: {\n            xmpStartTagInBody(p, token);\n            break;\n        }\n        case $.SVG: {\n            svgStartTagInBody(p, token);\n            break;\n        }\n        case $.HTML: {\n            htmlStartTagInBody(p, token);\n            break;\n        }\n        case $.BASE:\n        case $.LINK:\n        case $.META:\n        case $.STYLE:\n        case $.TITLE:\n        case $.SCRIPT:\n        case $.BGSOUND:\n        case $.BASEFONT:\n        case $.TEMPLATE: {\n            startTagInHead(p, token);\n            break;\n        }\n        case $.BODY: {\n            bodyStartTagInBody(p, token);\n            break;\n        }\n        case $.FORM: {\n            formStartTagInBody(p, token);\n            break;\n        }\n        case $.NOBR: {\n            nobrStartTagInBody(p, token);\n            break;\n        }\n        case $.MATH: {\n            mathStartTagInBody(p, token);\n            break;\n        }\n        case $.TABLE: {\n            tableStartTagInBody(p, token);\n            break;\n        }\n        case $.INPUT: {\n            inputStartTagInBody(p, token);\n            break;\n        }\n        case $.PARAM:\n        case $.TRACK:\n        case $.SOURCE: {\n            paramStartTagInBody(p, token);\n            break;\n        }\n        case $.IMAGE: {\n            imageStartTagInBody(p, token);\n            break;\n        }\n        case $.BUTTON: {\n            buttonStartTagInBody(p, token);\n            break;\n        }\n        case $.APPLET:\n        case $.OBJECT:\n        case $.MARQUEE: {\n            appletStartTagInBody(p, token);\n            break;\n        }\n        case $.IFRAME: {\n            iframeStartTagInBody(p, token);\n            break;\n        }\n        case $.SELECT: {\n            selectStartTagInBody(p, token);\n            break;\n        }\n        case $.OPTION:\n        case $.OPTGROUP: {\n            optgroupStartTagInBody(p, token);\n            break;\n        }\n        case $.NOEMBED:\n        case $.NOFRAMES: {\n            rawTextStartTagInBody(p, token);\n            break;\n        }\n        case $.FRAMESET: {\n            framesetStartTagInBody(p, token);\n            break;\n        }\n        case $.TEXTAREA: {\n            textareaStartTagInBody(p, token);\n            break;\n        }\n        case $.NOSCRIPT: {\n            if (p.options.scriptingEnabled) {\n                rawTextStartTagInBody(p, token);\n            }\n            else {\n                genericStartTagInBody(p, token);\n            }\n            break;\n        }\n        case $.PLAINTEXT: {\n            plaintextStartTagInBody(p, token);\n            break;\n        }\n        case $.COL:\n        case $.TH:\n        case $.TD:\n        case $.TR:\n        case $.HEAD:\n        case $.FRAME:\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD:\n        case $.CAPTION:\n        case $.COLGROUP: {\n            // Ignore token\n            break;\n        }\n        default: {\n            genericStartTagInBody(p, token);\n        }\n    }\n}\nfunction bodyEndTagInBody(p, token) {\n    if (p.openElements.hasInScope($.BODY)) {\n        p.insertionMode = InsertionMode.AFTER_BODY;\n        //NOTE: <body> is never popped from the stack, so we need to updated\n        //the end location explicitly.\n        if (p.options.sourceCodeLocationInfo) {\n            const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n            if (bodyElement) {\n                p._setEndLocation(bodyElement, token);\n            }\n        }\n    }\n}\nfunction htmlEndTagInBody(p, token) {\n    if (p.openElements.hasInScope($.BODY)) {\n        p.insertionMode = InsertionMode.AFTER_BODY;\n        endTagAfterBody(p, token);\n    }\n}\nfunction addressEndTagInBody(p, token) {\n    const tn = token.tagID;\n    if (p.openElements.hasInScope(tn)) {\n        p.openElements.generateImpliedEndTags();\n        p.openElements.popUntilTagNamePopped(tn);\n    }\n}\nfunction formEndTagInBody(p) {\n    const inTemplate = p.openElements.tmplCount > 0;\n    const { formElement } = p;\n    if (!inTemplate) {\n        p.formElement = null;\n    }\n    if ((formElement || inTemplate) && p.openElements.hasInScope($.FORM)) {\n        p.openElements.generateImpliedEndTags();\n        if (inTemplate) {\n            p.openElements.popUntilTagNamePopped($.FORM);\n        }\n        else if (formElement) {\n            p.openElements.remove(formElement);\n        }\n    }\n}\nfunction pEndTagInBody(p) {\n    if (!p.openElements.hasInButtonScope($.P)) {\n        p._insertFakeElement(TN.P, $.P);\n    }\n    p._closePElement();\n}\nfunction liEndTagInBody(p) {\n    if (p.openElements.hasInListItemScope($.LI)) {\n        p.openElements.generateImpliedEndTagsWithExclusion($.LI);\n        p.openElements.popUntilTagNamePopped($.LI);\n    }\n}\nfunction ddEndTagInBody(p, token) {\n    const tn = token.tagID;\n    if (p.openElements.hasInScope(tn)) {\n        p.openElements.generateImpliedEndTagsWithExclusion(tn);\n        p.openElements.popUntilTagNamePopped(tn);\n    }\n}\nfunction numberedHeaderEndTagInBody(p) {\n    if (p.openElements.hasNumberedHeaderInScope()) {\n        p.openElements.generateImpliedEndTags();\n        p.openElements.popUntilNumberedHeaderPopped();\n    }\n}\nfunction appletEndTagInBody(p, token) {\n    const tn = token.tagID;\n    if (p.openElements.hasInScope(tn)) {\n        p.openElements.generateImpliedEndTags();\n        p.openElements.popUntilTagNamePopped(tn);\n        p.activeFormattingElements.clearToLastMarker();\n    }\n}\nfunction brEndTagInBody(p) {\n    p._reconstructActiveFormattingElements();\n    p._insertFakeElement(TN.BR, $.BR);\n    p.openElements.pop();\n    p.framesetOk = false;\n}\nfunction genericEndTagInBody(p, token) {\n    const tn = token.tagName;\n    const tid = token.tagID;\n    for (let i = p.openElements.stackTop; i > 0; i--) {\n        const element = p.openElements.items[i];\n        const elementId = p.openElements.tagIDs[i];\n        // Compare the tag name here, as the tag might not be a known tag with an ID.\n        if (tid === elementId && (tid !== $.UNKNOWN || p.treeAdapter.getTagName(element) === tn)) {\n            p.openElements.generateImpliedEndTagsWithExclusion(tid);\n            if (p.openElements.stackTop >= i)\n                p.openElements.shortenToLength(i);\n            break;\n        }\n        if (p._isSpecialElement(element, elementId)) {\n            break;\n        }\n    }\n}\nfunction endTagInBody(p, token) {\n    switch (token.tagID) {\n        case $.A:\n        case $.B:\n        case $.I:\n        case $.S:\n        case $.U:\n        case $.EM:\n        case $.TT:\n        case $.BIG:\n        case $.CODE:\n        case $.FONT:\n        case $.NOBR:\n        case $.SMALL:\n        case $.STRIKE:\n        case $.STRONG: {\n            callAdoptionAgency(p, token);\n            break;\n        }\n        case $.P: {\n            pEndTagInBody(p);\n            break;\n        }\n        case $.DL:\n        case $.UL:\n        case $.OL:\n        case $.DIR:\n        case $.DIV:\n        case $.NAV:\n        case $.PRE:\n        case $.MAIN:\n        case $.MENU:\n        case $.ASIDE:\n        case $.BUTTON:\n        case $.CENTER:\n        case $.FIGURE:\n        case $.FOOTER:\n        case $.HEADER:\n        case $.HGROUP:\n        case $.DIALOG:\n        case $.ADDRESS:\n        case $.ARTICLE:\n        case $.DETAILS:\n        case $.SEARCH:\n        case $.SECTION:\n        case $.SUMMARY:\n        case $.LISTING:\n        case $.FIELDSET:\n        case $.BLOCKQUOTE:\n        case $.FIGCAPTION: {\n            addressEndTagInBody(p, token);\n            break;\n        }\n        case $.LI: {\n            liEndTagInBody(p);\n            break;\n        }\n        case $.DD:\n        case $.DT: {\n            ddEndTagInBody(p, token);\n            break;\n        }\n        case $.H1:\n        case $.H2:\n        case $.H3:\n        case $.H4:\n        case $.H5:\n        case $.H6: {\n            numberedHeaderEndTagInBody(p);\n            break;\n        }\n        case $.BR: {\n            brEndTagInBody(p);\n            break;\n        }\n        case $.BODY: {\n            bodyEndTagInBody(p, token);\n            break;\n        }\n        case $.HTML: {\n            htmlEndTagInBody(p, token);\n            break;\n        }\n        case $.FORM: {\n            formEndTagInBody(p);\n            break;\n        }\n        case $.APPLET:\n        case $.OBJECT:\n        case $.MARQUEE: {\n            appletEndTagInBody(p, token);\n            break;\n        }\n        case $.TEMPLATE: {\n            templateEndTagInHead(p, token);\n            break;\n        }\n        default: {\n            genericEndTagInBody(p, token);\n        }\n    }\n}\nfunction eofInBody(p, token) {\n    if (p.tmplInsertionModeStack.length > 0) {\n        eofInTemplate(p, token);\n    }\n    else {\n        stopParsing(p, token);\n    }\n}\n// The \"text\" insertion mode\n//------------------------------------------------------------------\nfunction endTagInText(p, token) {\n    var _a;\n    if (token.tagID === $.SCRIPT) {\n        (_a = p.scriptHandler) === null || _a === void 0 ? void 0 : _a.call(p, p.openElements.current);\n    }\n    p.openElements.pop();\n    p.insertionMode = p.originalInsertionMode;\n}\nfunction eofInText(p, token) {\n    p._err(token, ERR.eofInElementThatCanContainOnlyText);\n    p.openElements.pop();\n    p.insertionMode = p.originalInsertionMode;\n    p.onEof(token);\n}\n// The \"in table\" insertion mode\n//------------------------------------------------------------------\nfunction characterInTable(p, token) {\n    if (p.openElements.currentTagId !== undefined && TABLE_STRUCTURE_TAGS.has(p.openElements.currentTagId)) {\n        p.pendingCharacterTokens.length = 0;\n        p.hasNonWhitespacePendingCharacterToken = false;\n        p.originalInsertionMode = p.insertionMode;\n        p.insertionMode = InsertionMode.IN_TABLE_TEXT;\n        switch (token.type) {\n            case TokenType.CHARACTER: {\n                characterInTableText(p, token);\n                break;\n            }\n            case TokenType.WHITESPACE_CHARACTER: {\n                whitespaceCharacterInTableText(p, token);\n                break;\n            }\n            // Ignore null\n        }\n    }\n    else {\n        tokenInTable(p, token);\n    }\n}\nfunction captionStartTagInTable(p, token) {\n    p.openElements.clearBackToTableContext();\n    p.activeFormattingElements.insertMarker();\n    p._insertElement(token, NS.HTML);\n    p.insertionMode = InsertionMode.IN_CAPTION;\n}\nfunction colgroupStartTagInTable(p, token) {\n    p.openElements.clearBackToTableContext();\n    p._insertElement(token, NS.HTML);\n    p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n}\nfunction colStartTagInTable(p, token) {\n    p.openElements.clearBackToTableContext();\n    p._insertFakeElement(TN.COLGROUP, $.COLGROUP);\n    p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n    startTagInColumnGroup(p, token);\n}\nfunction tbodyStartTagInTable(p, token) {\n    p.openElements.clearBackToTableContext();\n    p._insertElement(token, NS.HTML);\n    p.insertionMode = InsertionMode.IN_TABLE_BODY;\n}\nfunction tdStartTagInTable(p, token) {\n    p.openElements.clearBackToTableContext();\n    p._insertFakeElement(TN.TBODY, $.TBODY);\n    p.insertionMode = InsertionMode.IN_TABLE_BODY;\n    startTagInTableBody(p, token);\n}\nfunction tableStartTagInTable(p, token) {\n    if (p.openElements.hasInTableScope($.TABLE)) {\n        p.openElements.popUntilTagNamePopped($.TABLE);\n        p._resetInsertionMode();\n        p._processStartTag(token);\n    }\n}\nfunction inputStartTagInTable(p, token) {\n    if (isHiddenInput(token)) {\n        p._appendElement(token, NS.HTML);\n    }\n    else {\n        tokenInTable(p, token);\n    }\n    token.ackSelfClosing = true;\n}\nfunction formStartTagInTable(p, token) {\n    if (!p.formElement && p.openElements.tmplCount === 0) {\n        p._insertElement(token, NS.HTML);\n        p.formElement = p.openElements.current;\n        p.openElements.pop();\n    }\n}\nfunction startTagInTable(p, token) {\n    switch (token.tagID) {\n        case $.TD:\n        case $.TH:\n        case $.TR: {\n            tdStartTagInTable(p, token);\n            break;\n        }\n        case $.STYLE:\n        case $.SCRIPT:\n        case $.TEMPLATE: {\n            startTagInHead(p, token);\n            break;\n        }\n        case $.COL: {\n            colStartTagInTable(p, token);\n            break;\n        }\n        case $.FORM: {\n            formStartTagInTable(p, token);\n            break;\n        }\n        case $.TABLE: {\n            tableStartTagInTable(p, token);\n            break;\n        }\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD: {\n            tbodyStartTagInTable(p, token);\n            break;\n        }\n        case $.INPUT: {\n            inputStartTagInTable(p, token);\n            break;\n        }\n        case $.CAPTION: {\n            captionStartTagInTable(p, token);\n            break;\n        }\n        case $.COLGROUP: {\n            colgroupStartTagInTable(p, token);\n            break;\n        }\n        default: {\n            tokenInTable(p, token);\n        }\n    }\n}\nfunction endTagInTable(p, token) {\n    switch (token.tagID) {\n        case $.TABLE: {\n            if (p.openElements.hasInTableScope($.TABLE)) {\n                p.openElements.popUntilTagNamePopped($.TABLE);\n                p._resetInsertionMode();\n            }\n            break;\n        }\n        case $.TEMPLATE: {\n            templateEndTagInHead(p, token);\n            break;\n        }\n        case $.BODY:\n        case $.CAPTION:\n        case $.COL:\n        case $.COLGROUP:\n        case $.HTML:\n        case $.TBODY:\n        case $.TD:\n        case $.TFOOT:\n        case $.TH:\n        case $.THEAD:\n        case $.TR: {\n            // Ignore token\n            break;\n        }\n        default: {\n            tokenInTable(p, token);\n        }\n    }\n}\nfunction tokenInTable(p, token) {\n    const savedFosterParentingState = p.fosterParentingEnabled;\n    p.fosterParentingEnabled = true;\n    // Process token in `In Body` mode\n    modeInBody(p, token);\n    p.fosterParentingEnabled = savedFosterParentingState;\n}\n// The \"in table text\" insertion mode\n//------------------------------------------------------------------\nfunction whitespaceCharacterInTableText(p, token) {\n    p.pendingCharacterTokens.push(token);\n}\nfunction characterInTableText(p, token) {\n    p.pendingCharacterTokens.push(token);\n    p.hasNonWhitespacePendingCharacterToken = true;\n}\nfunction tokenInTableText(p, token) {\n    let i = 0;\n    if (p.hasNonWhitespacePendingCharacterToken) {\n        for (; i < p.pendingCharacterTokens.length; i++) {\n            tokenInTable(p, p.pendingCharacterTokens[i]);\n        }\n    }\n    else {\n        for (; i < p.pendingCharacterTokens.length; i++) {\n            p._insertCharacters(p.pendingCharacterTokens[i]);\n        }\n    }\n    p.insertionMode = p.originalInsertionMode;\n    p._processToken(token);\n}\n// The \"in caption\" insertion mode\n//------------------------------------------------------------------\nconst TABLE_VOID_ELEMENTS = new Set([$.CAPTION, $.COL, $.COLGROUP, $.TBODY, $.TD, $.TFOOT, $.TH, $.THEAD, $.TR]);\nfunction startTagInCaption(p, token) {\n    const tn = token.tagID;\n    if (TABLE_VOID_ELEMENTS.has(tn)) {\n        if (p.openElements.hasInTableScope($.CAPTION)) {\n            p.openElements.generateImpliedEndTags();\n            p.openElements.popUntilTagNamePopped($.CAPTION);\n            p.activeFormattingElements.clearToLastMarker();\n            p.insertionMode = InsertionMode.IN_TABLE;\n            startTagInTable(p, token);\n        }\n    }\n    else {\n        startTagInBody(p, token);\n    }\n}\nfunction endTagInCaption(p, token) {\n    const tn = token.tagID;\n    switch (tn) {\n        case $.CAPTION:\n        case $.TABLE: {\n            if (p.openElements.hasInTableScope($.CAPTION)) {\n                p.openElements.generateImpliedEndTags();\n                p.openElements.popUntilTagNamePopped($.CAPTION);\n                p.activeFormattingElements.clearToLastMarker();\n                p.insertionMode = InsertionMode.IN_TABLE;\n                if (tn === $.TABLE) {\n                    endTagInTable(p, token);\n                }\n            }\n            break;\n        }\n        case $.BODY:\n        case $.COL:\n        case $.COLGROUP:\n        case $.HTML:\n        case $.TBODY:\n        case $.TD:\n        case $.TFOOT:\n        case $.TH:\n        case $.THEAD:\n        case $.TR: {\n            // Ignore token\n            break;\n        }\n        default: {\n            endTagInBody(p, token);\n        }\n    }\n}\n// The \"in column group\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInColumnGroup(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.COL: {\n            p._appendElement(token, NS.HTML);\n            token.ackSelfClosing = true;\n            break;\n        }\n        case $.TEMPLATE: {\n            startTagInHead(p, token);\n            break;\n        }\n        default: {\n            tokenInColumnGroup(p, token);\n        }\n    }\n}\nfunction endTagInColumnGroup(p, token) {\n    switch (token.tagID) {\n        case $.COLGROUP: {\n            if (p.openElements.currentTagId === $.COLGROUP) {\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE;\n            }\n            break;\n        }\n        case $.TEMPLATE: {\n            templateEndTagInHead(p, token);\n            break;\n        }\n        case $.COL: {\n            // Ignore token\n            break;\n        }\n        default: {\n            tokenInColumnGroup(p, token);\n        }\n    }\n}\nfunction tokenInColumnGroup(p, token) {\n    if (p.openElements.currentTagId === $.COLGROUP) {\n        p.openElements.pop();\n        p.insertionMode = InsertionMode.IN_TABLE;\n        p._processToken(token);\n    }\n}\n// The \"in table body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTableBody(p, token) {\n    switch (token.tagID) {\n        case $.TR: {\n            p.openElements.clearBackToTableBodyContext();\n            p._insertElement(token, NS.HTML);\n            p.insertionMode = InsertionMode.IN_ROW;\n            break;\n        }\n        case $.TH:\n        case $.TD: {\n            p.openElements.clearBackToTableBodyContext();\n            p._insertFakeElement(TN.TR, $.TR);\n            p.insertionMode = InsertionMode.IN_ROW;\n            startTagInRow(p, token);\n            break;\n        }\n        case $.CAPTION:\n        case $.COL:\n        case $.COLGROUP:\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD: {\n            if (p.openElements.hasTableBodyContextInTableScope()) {\n                p.openElements.clearBackToTableBodyContext();\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE;\n                startTagInTable(p, token);\n            }\n            break;\n        }\n        default: {\n            startTagInTable(p, token);\n        }\n    }\n}\nfunction endTagInTableBody(p, token) {\n    const tn = token.tagID;\n    switch (token.tagID) {\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD: {\n            if (p.openElements.hasInTableScope(tn)) {\n                p.openElements.clearBackToTableBodyContext();\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE;\n            }\n            break;\n        }\n        case $.TABLE: {\n            if (p.openElements.hasTableBodyContextInTableScope()) {\n                p.openElements.clearBackToTableBodyContext();\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE;\n                endTagInTable(p, token);\n            }\n            break;\n        }\n        case $.BODY:\n        case $.CAPTION:\n        case $.COL:\n        case $.COLGROUP:\n        case $.HTML:\n        case $.TD:\n        case $.TH:\n        case $.TR: {\n            // Ignore token\n            break;\n        }\n        default: {\n            endTagInTable(p, token);\n        }\n    }\n}\n// The \"in row\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInRow(p, token) {\n    switch (token.tagID) {\n        case $.TH:\n        case $.TD: {\n            p.openElements.clearBackToTableRowContext();\n            p._insertElement(token, NS.HTML);\n            p.insertionMode = InsertionMode.IN_CELL;\n            p.activeFormattingElements.insertMarker();\n            break;\n        }\n        case $.CAPTION:\n        case $.COL:\n        case $.COLGROUP:\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD:\n        case $.TR: {\n            if (p.openElements.hasInTableScope($.TR)) {\n                p.openElements.clearBackToTableRowContext();\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE_BODY;\n                startTagInTableBody(p, token);\n            }\n            break;\n        }\n        default: {\n            startTagInTable(p, token);\n        }\n    }\n}\nfunction endTagInRow(p, token) {\n    switch (token.tagID) {\n        case $.TR: {\n            if (p.openElements.hasInTableScope($.TR)) {\n                p.openElements.clearBackToTableRowContext();\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE_BODY;\n            }\n            break;\n        }\n        case $.TABLE: {\n            if (p.openElements.hasInTableScope($.TR)) {\n                p.openElements.clearBackToTableRowContext();\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE_BODY;\n                endTagInTableBody(p, token);\n            }\n            break;\n        }\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD: {\n            if (p.openElements.hasInTableScope(token.tagID) || p.openElements.hasInTableScope($.TR)) {\n                p.openElements.clearBackToTableRowContext();\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE_BODY;\n                endTagInTableBody(p, token);\n            }\n            break;\n        }\n        case $.BODY:\n        case $.CAPTION:\n        case $.COL:\n        case $.COLGROUP:\n        case $.HTML:\n        case $.TD:\n        case $.TH: {\n            // Ignore end tag\n            break;\n        }\n        default: {\n            endTagInTable(p, token);\n        }\n    }\n}\n// The \"in cell\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInCell(p, token) {\n    const tn = token.tagID;\n    if (TABLE_VOID_ELEMENTS.has(tn)) {\n        if (p.openElements.hasInTableScope($.TD) || p.openElements.hasInTableScope($.TH)) {\n            p._closeTableCell();\n            startTagInRow(p, token);\n        }\n    }\n    else {\n        startTagInBody(p, token);\n    }\n}\nfunction endTagInCell(p, token) {\n    const tn = token.tagID;\n    switch (tn) {\n        case $.TD:\n        case $.TH: {\n            if (p.openElements.hasInTableScope(tn)) {\n                p.openElements.generateImpliedEndTags();\n                p.openElements.popUntilTagNamePopped(tn);\n                p.activeFormattingElements.clearToLastMarker();\n                p.insertionMode = InsertionMode.IN_ROW;\n            }\n            break;\n        }\n        case $.TABLE:\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD:\n        case $.TR: {\n            if (p.openElements.hasInTableScope(tn)) {\n                p._closeTableCell();\n                endTagInRow(p, token);\n            }\n            break;\n        }\n        case $.BODY:\n        case $.CAPTION:\n        case $.COL:\n        case $.COLGROUP:\n        case $.HTML: {\n            // Ignore token\n            break;\n        }\n        default: {\n            endTagInBody(p, token);\n        }\n    }\n}\n// The \"in select\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelect(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.OPTION: {\n            if (p.openElements.currentTagId === $.OPTION) {\n                p.openElements.pop();\n            }\n            p._insertElement(token, NS.HTML);\n            break;\n        }\n        case $.OPTGROUP: {\n            if (p.openElements.currentTagId === $.OPTION) {\n                p.openElements.pop();\n            }\n            if (p.openElements.currentTagId === $.OPTGROUP) {\n                p.openElements.pop();\n            }\n            p._insertElement(token, NS.HTML);\n            break;\n        }\n        case $.HR: {\n            if (p.openElements.currentTagId === $.OPTION) {\n                p.openElements.pop();\n            }\n            if (p.openElements.currentTagId === $.OPTGROUP) {\n                p.openElements.pop();\n            }\n            p._appendElement(token, NS.HTML);\n            token.ackSelfClosing = true;\n            break;\n        }\n        case $.INPUT:\n        case $.KEYGEN:\n        case $.TEXTAREA:\n        case $.SELECT: {\n            if (p.openElements.hasInSelectScope($.SELECT)) {\n                p.openElements.popUntilTagNamePopped($.SELECT);\n                p._resetInsertionMode();\n                if (token.tagID !== $.SELECT) {\n                    p._processStartTag(token);\n                }\n            }\n            break;\n        }\n        case $.SCRIPT:\n        case $.TEMPLATE: {\n            startTagInHead(p, token);\n            break;\n        }\n        default:\n        // Do nothing\n    }\n}\nfunction endTagInSelect(p, token) {\n    switch (token.tagID) {\n        case $.OPTGROUP: {\n            if (p.openElements.stackTop > 0 &&\n                p.openElements.currentTagId === $.OPTION &&\n                p.openElements.tagIDs[p.openElements.stackTop - 1] === $.OPTGROUP) {\n                p.openElements.pop();\n            }\n            if (p.openElements.currentTagId === $.OPTGROUP) {\n                p.openElements.pop();\n            }\n            break;\n        }\n        case $.OPTION: {\n            if (p.openElements.currentTagId === $.OPTION) {\n                p.openElements.pop();\n            }\n            break;\n        }\n        case $.SELECT: {\n            if (p.openElements.hasInSelectScope($.SELECT)) {\n                p.openElements.popUntilTagNamePopped($.SELECT);\n                p._resetInsertionMode();\n            }\n            break;\n        }\n        case $.TEMPLATE: {\n            templateEndTagInHead(p, token);\n            break;\n        }\n        default:\n        // Do nothing\n    }\n}\n// The \"in select in table\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelectInTable(p, token) {\n    const tn = token.tagID;\n    if (tn === $.CAPTION ||\n        tn === $.TABLE ||\n        tn === $.TBODY ||\n        tn === $.TFOOT ||\n        tn === $.THEAD ||\n        tn === $.TR ||\n        tn === $.TD ||\n        tn === $.TH) {\n        p.openElements.popUntilTagNamePopped($.SELECT);\n        p._resetInsertionMode();\n        p._processStartTag(token);\n    }\n    else {\n        startTagInSelect(p, token);\n    }\n}\nfunction endTagInSelectInTable(p, token) {\n    const tn = token.tagID;\n    if (tn === $.CAPTION ||\n        tn === $.TABLE ||\n        tn === $.TBODY ||\n        tn === $.TFOOT ||\n        tn === $.THEAD ||\n        tn === $.TR ||\n        tn === $.TD ||\n        tn === $.TH) {\n        if (p.openElements.hasInTableScope(tn)) {\n            p.openElements.popUntilTagNamePopped($.SELECT);\n            p._resetInsertionMode();\n            p.onEndTag(token);\n        }\n    }\n    else {\n        endTagInSelect(p, token);\n    }\n}\n// The \"in template\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTemplate(p, token) {\n    switch (token.tagID) {\n        // First, handle tags that can start without a mode change\n        case $.BASE:\n        case $.BASEFONT:\n        case $.BGSOUND:\n        case $.LINK:\n        case $.META:\n        case $.NOFRAMES:\n        case $.SCRIPT:\n        case $.STYLE:\n        case $.TEMPLATE:\n        case $.TITLE: {\n            startTagInHead(p, token);\n            break;\n        }\n        // Re-process the token in the appropriate mode\n        case $.CAPTION:\n        case $.COLGROUP:\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD: {\n            p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE;\n            p.insertionMode = InsertionMode.IN_TABLE;\n            startTagInTable(p, token);\n            break;\n        }\n        case $.COL: {\n            p.tmplInsertionModeStack[0] = InsertionMode.IN_COLUMN_GROUP;\n            p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n            startTagInColumnGroup(p, token);\n            break;\n        }\n        case $.TR: {\n            p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE_BODY;\n            p.insertionMode = InsertionMode.IN_TABLE_BODY;\n            startTagInTableBody(p, token);\n            break;\n        }\n        case $.TD:\n        case $.TH: {\n            p.tmplInsertionModeStack[0] = InsertionMode.IN_ROW;\n            p.insertionMode = InsertionMode.IN_ROW;\n            startTagInRow(p, token);\n            break;\n        }\n        default: {\n            p.tmplInsertionModeStack[0] = InsertionMode.IN_BODY;\n            p.insertionMode = InsertionMode.IN_BODY;\n            startTagInBody(p, token);\n        }\n    }\n}\nfunction endTagInTemplate(p, token) {\n    if (token.tagID === $.TEMPLATE) {\n        templateEndTagInHead(p, token);\n    }\n}\nfunction eofInTemplate(p, token) {\n    if (p.openElements.tmplCount > 0) {\n        p.openElements.popUntilTagNamePopped($.TEMPLATE);\n        p.activeFormattingElements.clearToLastMarker();\n        p.tmplInsertionModeStack.shift();\n        p._resetInsertionMode();\n        p.onEof(token);\n    }\n    else {\n        stopParsing(p, token);\n    }\n}\n// The \"after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterBody(p, token) {\n    if (token.tagID === $.HTML) {\n        startTagInBody(p, token);\n    }\n    else {\n        tokenAfterBody(p, token);\n    }\n}\nfunction endTagAfterBody(p, token) {\n    var _a;\n    if (token.tagID === $.HTML) {\n        if (!p.fragmentContext) {\n            p.insertionMode = InsertionMode.AFTER_AFTER_BODY;\n        }\n        //NOTE: <html> is never popped from the stack, so we need to updated\n        //the end location explicitly.\n        if (p.options.sourceCodeLocationInfo && p.openElements.tagIDs[0] === $.HTML) {\n            p._setEndLocation(p.openElements.items[0], token);\n            // Update the body element, if it doesn't have an end tag\n            const bodyElement = p.openElements.items[1];\n            if (bodyElement && !((_a = p.treeAdapter.getNodeSourceCodeLocation(bodyElement)) === null || _a === void 0 ? void 0 : _a.endTag)) {\n                p._setEndLocation(bodyElement, token);\n            }\n        }\n    }\n    else {\n        tokenAfterBody(p, token);\n    }\n}\nfunction tokenAfterBody(p, token) {\n    p.insertionMode = InsertionMode.IN_BODY;\n    modeInBody(p, token);\n}\n// The \"in frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInFrameset(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.FRAMESET: {\n            p._insertElement(token, NS.HTML);\n            break;\n        }\n        case $.FRAME: {\n            p._appendElement(token, NS.HTML);\n            token.ackSelfClosing = true;\n            break;\n        }\n        case $.NOFRAMES: {\n            startTagInHead(p, token);\n            break;\n        }\n        default:\n        // Do nothing\n    }\n}\nfunction endTagInFrameset(p, token) {\n    if (token.tagID === $.FRAMESET && !p.openElements.isRootHtmlElementCurrent()) {\n        p.openElements.pop();\n        if (!p.fragmentContext && p.openElements.currentTagId !== $.FRAMESET) {\n            p.insertionMode = InsertionMode.AFTER_FRAMESET;\n        }\n    }\n}\n// The \"after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterFrameset(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.NOFRAMES: {\n            startTagInHead(p, token);\n            break;\n        }\n        default:\n        // Do nothing\n    }\n}\nfunction endTagAfterFrameset(p, token) {\n    if (token.tagID === $.HTML) {\n        p.insertionMode = InsertionMode.AFTER_AFTER_FRAMESET;\n    }\n}\n// The \"after after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterBody(p, token) {\n    if (token.tagID === $.HTML) {\n        startTagInBody(p, token);\n    }\n    else {\n        tokenAfterAfterBody(p, token);\n    }\n}\nfunction tokenAfterAfterBody(p, token) {\n    p.insertionMode = InsertionMode.IN_BODY;\n    modeInBody(p, token);\n}\n// The \"after after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterFrameset(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.NOFRAMES: {\n            startTagInHead(p, token);\n            break;\n        }\n        default:\n        // Do nothing\n    }\n}\n// The rules for parsing tokens in foreign content\n//------------------------------------------------------------------\nfunction nullCharacterInForeignContent(p, token) {\n    token.chars = unicode.REPLACEMENT_CHARACTER;\n    p._insertCharacters(token);\n}\nfunction characterInForeignContent(p, token) {\n    p._insertCharacters(token);\n    p.framesetOk = false;\n}\nfunction popUntilHtmlOrIntegrationPoint(p) {\n    while (p.treeAdapter.getNamespaceURI(p.openElements.current) !== NS.HTML &&\n        p.openElements.currentTagId !== undefined &&\n        !p._isIntegrationPoint(p.openElements.currentTagId, p.openElements.current)) {\n        p.openElements.pop();\n    }\n}\nfunction startTagInForeignContent(p, token) {\n    if (foreignContent.causesExit(token)) {\n        popUntilHtmlOrIntegrationPoint(p);\n        p._startTagOutsideForeignContent(token);\n    }\n    else {\n        const current = p._getAdjustedCurrentElement();\n        const currentNs = p.treeAdapter.getNamespaceURI(current);\n        if (currentNs === NS.MATHML) {\n            foreignContent.adjustTokenMathMLAttrs(token);\n        }\n        else if (currentNs === NS.SVG) {\n            foreignContent.adjustTokenSVGTagName(token);\n            foreignContent.adjustTokenSVGAttrs(token);\n        }\n        foreignContent.adjustTokenXMLAttrs(token);\n        if (token.selfClosing) {\n            p._appendElement(token, currentNs);\n        }\n        else {\n            p._insertElement(token, currentNs);\n        }\n        token.ackSelfClosing = true;\n    }\n}\nfunction endTagInForeignContent(p, token) {\n    if (token.tagID === $.P || token.tagID === $.BR) {\n        popUntilHtmlOrIntegrationPoint(p);\n        p._endTagOutsideForeignContent(token);\n        return;\n    }\n    for (let i = p.openElements.stackTop; i > 0; i--) {\n        const element = p.openElements.items[i];\n        if (p.treeAdapter.getNamespaceURI(element) === NS.HTML) {\n            p._endTagOutsideForeignContent(token);\n            break;\n        }\n        const tagName = p.treeAdapter.getTagName(element);\n        if (tagName.toLowerCase() === token.tagName) {\n            //NOTE: update the token tag name for `_setEndLocation`.\n            token.tagName = tagName;\n            p.openElements.shortenToLength(i);\n            break;\n        }\n    }\n}\n", "export const xmlReplacer: RegExp = /[\"$&'<>\\u0080-\\uFFFF]/g;\n\nconst xmlCodeMap = new Map([\n    [34, \"&quot;\"],\n    [38, \"&amp;\"],\n    [39, \"&apos;\"],\n    [60, \"&lt;\"],\n    [62, \"&gt;\"],\n]);\n\n// For compatibility with node < 4, we wrap `codePointAt`\nexport const getCodePoint: (c: string, index: number) => number =\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n    String.prototype.codePointAt == null\n        ? (c: string, index: number): number =>\n              (c.charCodeAt(index) & 0xfc_00) === 0xd8_00\n                  ? (c.charCodeAt(index) - 0xd8_00) * 0x4_00 +\n                    c.charCodeAt(index + 1) -\n                    0xdc_00 +\n                    0x1_00_00\n                  : c.charCodeAt(index)\n        : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n          (input: string, index: number): number => input.codePointAt(index)!;\n\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `&#xfc;`) will be used.\n */\nexport function encodeXML(input: string): string {\n    let returnValue = \"\";\n    let lastIndex = 0;\n    let match;\n\n    while ((match = xmlReplacer.exec(input)) !== null) {\n        const { index } = match;\n        const char = input.charCodeAt(index);\n        const next = xmlCodeMap.get(char);\n\n        if (next === undefined) {\n            returnValue += `${input.substring(lastIndex, index)}&#x${getCodePoint(\n                input,\n                index,\n            ).toString(16)};`;\n            // Increase by 1 if we have a surrogate pair\n            lastIndex = xmlReplacer.lastIndex += Number(\n                (char & 0xfc_00) === 0xd8_00,\n            );\n        } else {\n            returnValue += input.substring(lastIndex, index) + next;\n            lastIndex = index + 1;\n        }\n    }\n\n    return returnValue + input.substr(lastIndex);\n}\n\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using numeric hexadecimal reference (eg. `&#xfc;`).\n *\n * Have a look at `escapeUTF8` if you want a more concise output at the expense\n * of reduced transportability.\n *\n * @param data String to escape.\n */\nexport const escape: typeof encodeXML = encodeXML;\n\n/**\n * Creates a function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n *\n * @param regex Regular expression to match characters to escape.\n * @param map Map of characters to escape to their entities.\n *\n * @returns Function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n */\nfunction getEscaper(\n    regex: RegExp,\n    map: Map<number, string>,\n): (data: string) => string {\n    return function escape(data: string): string {\n        let match;\n        let lastIndex = 0;\n        let result = \"\";\n\n        while ((match = regex.exec(data))) {\n            if (lastIndex !== match.index) {\n                result += data.substring(lastIndex, match.index);\n            }\n\n            // We know that this character will be in the map.\n            result += map.get(match[0].charCodeAt(0))!;\n\n            // Every match will be of length 1\n            lastIndex = match.index + 1;\n        }\n\n        return result + data.substring(lastIndex);\n    };\n}\n\n/**\n * Encodes all characters not valid in XML documents using XML entities.\n *\n * Note that the output will be character-set dependent.\n *\n * @param data String to escape.\n */\nexport const escapeUTF8: (data: string) => string = /* #__PURE__ */ getEscaper(\n    /[\"&'<>]/g,\n    xmlCodeMap,\n);\n\n/**\n * Encodes all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexport const escapeAttribute: (data: string) => string =\n    /* #__PURE__ */ getEscaper(\n        /[\"&\\u00A0]/g,\n        new Map([\n            [34, \"&quot;\"],\n            [38, \"&amp;\"],\n            [160, \"&nbsp;\"],\n        ]),\n    );\n\n/**\n * Encodes all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexport const escapeText: (data: string) => string = /* #__PURE__ */ getEscaper(\n    /[&<>\\u00A0]/g,\n    new Map([\n        [38, \"&amp;\"],\n        [60, \"&lt;\"],\n        [62, \"&gt;\"],\n        [160, \"&nbsp;\"],\n    ]),\n);\n", "import { TAG_NAMES as $, NS, hasUnescapedText } from '../common/html.js';\nimport { escapeText, escapeAttribute } from 'entities/escape';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\n// Sets\nconst VOID_ELEMENTS = new Set([\n    $.AREA,\n    $.BASE,\n    $.BASEFONT,\n    $.BGSOUND,\n    $.BR,\n    $.COL,\n    $.EMBED,\n    $.FRAME,\n    $.HR,\n    $.IMG,\n    $.INPUT,\n    $.KEYGEN,\n    $.LINK,\n    $.META,\n    $.PARAM,\n    $.SOURCE,\n    $.TRACK,\n    $.WBR,\n]);\nfunction isVoidElement(node, options) {\n    return (options.treeAdapter.isElementNode(node) &&\n        options.treeAdapter.getNamespaceURI(node) === NS.HTML &&\n        VOID_ELEMENTS.has(options.treeAdapter.getTagName(node)));\n}\nconst defaultOpts = { treeAdapter: defaultTreeAdapter, scriptingEnabled: true };\n/**\n * Serializes an AST node to an HTML string.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');\n *\n * // Serializes a document.\n * const html = parse5.serialize(document);\n *\n * // Serializes the <html> element content.\n * const str = parse5.serialize(document.childNodes[1]);\n *\n * console.log(str); //> '<head></head><body>Hi there!</body>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serialize(node, options) {\n    const opts = { ...defaultOpts, ...options };\n    if (isVoidElement(node, opts)) {\n        return '';\n    }\n    return serializeChildNodes(node, opts);\n}\n/**\n * Serializes an AST element node to an HTML string, including the element node.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parseFragment('<div>Hello, <b>world</b>!</div>');\n *\n * // Serializes the <div> element.\n * const str = parse5.serializeOuter(document.childNodes[0]);\n *\n * console.log(str); //> '<div>Hello, <b>world</b>!</div>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serializeOuter(node, options) {\n    const opts = { ...defaultOpts, ...options };\n    return serializeNode(node, opts);\n}\nfunction serializeChildNodes(parentNode, options) {\n    let html = '';\n    // Get container of the child nodes\n    const container = options.treeAdapter.isElementNode(parentNode) &&\n        options.treeAdapter.getTagName(parentNode) === $.TEMPLATE &&\n        options.treeAdapter.getNamespaceURI(parentNode) === NS.HTML\n        ? options.treeAdapter.getTemplateContent(parentNode)\n        : parentNode;\n    const childNodes = options.treeAdapter.getChildNodes(container);\n    if (childNodes) {\n        for (const currentNode of childNodes) {\n            html += serializeNode(currentNode, options);\n        }\n    }\n    return html;\n}\nfunction serializeNode(node, options) {\n    if (options.treeAdapter.isElementNode(node)) {\n        return serializeElement(node, options);\n    }\n    if (options.treeAdapter.isTextNode(node)) {\n        return serializeTextNode(node, options);\n    }\n    if (options.treeAdapter.isCommentNode(node)) {\n        return serializeCommentNode(node, options);\n    }\n    if (options.treeAdapter.isDocumentTypeNode(node)) {\n        return serializeDocumentTypeNode(node, options);\n    }\n    // Return an empty string for unknown nodes\n    return '';\n}\nfunction serializeElement(node, options) {\n    const tn = options.treeAdapter.getTagName(node);\n    return `<${tn}${serializeAttributes(node, options)}>${isVoidElement(node, options) ? '' : `${serializeChildNodes(node, options)}</${tn}>`}`;\n}\nfunction serializeAttributes(node, { treeAdapter }) {\n    let html = '';\n    for (const attr of treeAdapter.getAttrList(node)) {\n        html += ' ';\n        if (attr.namespace) {\n            switch (attr.namespace) {\n                case NS.XML: {\n                    html += `xml:${attr.name}`;\n                    break;\n                }\n                case NS.XMLNS: {\n                    if (attr.name !== 'xmlns') {\n                        html += 'xmlns:';\n                    }\n                    html += attr.name;\n                    break;\n                }\n                case NS.XLINK: {\n                    html += `xlink:${attr.name}`;\n                    break;\n                }\n                default: {\n                    html += `${attr.prefix}:${attr.name}`;\n                }\n            }\n        }\n        else {\n            html += attr.name;\n        }\n        html += `=\"${escapeAttribute(attr.value)}\"`;\n    }\n    return html;\n}\nfunction serializeTextNode(node, options) {\n    const { treeAdapter } = options;\n    const content = treeAdapter.getTextNodeContent(node);\n    const parent = treeAdapter.getParentNode(node);\n    const parentTn = parent && treeAdapter.isElementNode(parent) && treeAdapter.getTagName(parent);\n    return parentTn &&\n        treeAdapter.getNamespaceURI(parent) === NS.HTML &&\n        hasUnescapedText(parentTn, options.scriptingEnabled)\n        ? content\n        : escapeText(content);\n}\nfunction serializeCommentNode(node, { treeAdapter }) {\n    return `<!--${treeAdapter.getCommentNodeContent(node)}-->`;\n}\nfunction serializeDocumentTypeNode(node, { treeAdapter }) {\n    return `<!DOCTYPE ${treeAdapter.getDocumentTypeNodeName(node)}>`;\n}\n", "import { Parser } from './parser/index.js';\nexport { defaultTreeAdapter } from './tree-adapters/default.js';\nexport { /** @internal */ Parser } from './parser/index.js';\nexport { serialize, serializeOuter } from './serializer/index.js';\nexport { ERR as ErrorCodes } from './common/error-codes.js';\n/** @internal */\nexport * as foreignContent from './common/foreign-content.js';\nexport * as html from './common/html.js';\nexport * as Token from './common/token.js';\n/** @internal */\nexport { Tokenizer, TokenizerMode } from './tokenizer/index.js';\n// Shorthands\n/**\n * Parses an HTML string.\n *\n * @param html Input HTML string.\n * @param options Parsing options.\n * @returns Document\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');\n *\n * console.log(document.childNodes[1].tagName); //> 'html'\n *```\n */\nexport function parse(html, options) {\n    return Parser.parse(html, options);\n}\nexport function parseFragment(fragmentContext, html, options) {\n    if (typeof fragmentContext === 'string') {\n        options = html;\n        html = fragmentContext;\n        fragmentContext = null;\n    }\n    const parser = Parser.getFragmentParser(fragmentContext, options);\n    parser.tokenizer.write(html, true);\n    return parser.getFragment();\n}\n", "import { html } from 'parse5';\nimport { Element, Document, ProcessingInstruction, Comment, Text, isDirective, isText, isComment, isTag, } from 'domhandler';\nfunction enquoteDoctypeId(id) {\n    const quote = id.includes('\"') ? \"'\" : '\"';\n    return quote + id + quote;\n}\n/** @internal */\nexport function serializeDoctypeContent(name, publicId, systemId) {\n    let str = '!DOCTYPE ';\n    if (name) {\n        str += name;\n    }\n    if (publicId) {\n        str += ` PUBLIC ${enquoteDoctypeId(publicId)}`;\n    }\n    else if (systemId) {\n        str += ' SYSTEM';\n    }\n    if (systemId) {\n        str += ` ${enquoteDoctypeId(systemId)}`;\n    }\n    return str;\n}\nexport const adapter = {\n    // Re-exports from domhandler\n    isCommentNode: isComment,\n    isElementNode: isTag,\n    isTextNode: isText,\n    //Node construction\n    createDocument() {\n        const node = new Document([]);\n        node['x-mode'] = html.DOCUMENT_MODE.NO_QUIRKS;\n        return node;\n    },\n    createDocumentFragment() {\n        return new Document([]);\n    },\n    createElement(tagName, namespaceURI, attrs) {\n        const attribs = Object.create(null);\n        const attribsNamespace = Object.create(null);\n        const attribsPrefix = Object.create(null);\n        for (let i = 0; i < attrs.length; i++) {\n            const attrName = attrs[i].name;\n            attribs[attrName] = attrs[i].value;\n            attribsNamespace[attrName] = attrs[i].namespace;\n            attribsPrefix[attrName] = attrs[i].prefix;\n        }\n        const node = new Element(tagName, attribs, []);\n        node.namespace = namespaceURI;\n        node['x-attribsNamespace'] = attribsNamespace;\n        node['x-attribsPrefix'] = attribsPrefix;\n        return node;\n    },\n    createCommentNode(data) {\n        return new Comment(data);\n    },\n    createTextNode(value) {\n        return new Text(value);\n    },\n    //Tree mutation\n    appendChild(parentNode, newNode) {\n        const prev = parentNode.children[parentNode.children.length - 1];\n        if (prev) {\n            prev.next = newNode;\n            newNode.prev = prev;\n        }\n        parentNode.children.push(newNode);\n        newNode.parent = parentNode;\n    },\n    insertBefore(parentNode, newNode, referenceNode) {\n        const insertionIdx = parentNode.children.indexOf(referenceNode);\n        const { prev } = referenceNode;\n        if (prev) {\n            prev.next = newNode;\n            newNode.prev = prev;\n        }\n        referenceNode.prev = newNode;\n        newNode.next = referenceNode;\n        parentNode.children.splice(insertionIdx, 0, newNode);\n        newNode.parent = parentNode;\n    },\n    setTemplateContent(templateElement, contentElement) {\n        adapter.appendChild(templateElement, contentElement);\n    },\n    getTemplateContent(templateElement) {\n        return templateElement.children[0];\n    },\n    setDocumentType(document, name, publicId, systemId) {\n        const data = serializeDoctypeContent(name, publicId, systemId);\n        let doctypeNode = document.children.find((node) => isDirective(node) && node.name === '!doctype');\n        if (doctypeNode) {\n            doctypeNode.data = data !== null && data !== void 0 ? data : null;\n        }\n        else {\n            doctypeNode = new ProcessingInstruction('!doctype', data);\n            adapter.appendChild(document, doctypeNode);\n        }\n        doctypeNode['x-name'] = name;\n        doctypeNode['x-publicId'] = publicId;\n        doctypeNode['x-systemId'] = systemId;\n    },\n    setDocumentMode(document, mode) {\n        document['x-mode'] = mode;\n    },\n    getDocumentMode(document) {\n        return document['x-mode'];\n    },\n    detachNode(node) {\n        if (node.parent) {\n            const idx = node.parent.children.indexOf(node);\n            const { prev, next } = node;\n            node.prev = null;\n            node.next = null;\n            if (prev) {\n                prev.next = next;\n            }\n            if (next) {\n                next.prev = prev;\n            }\n            node.parent.children.splice(idx, 1);\n            node.parent = null;\n        }\n    },\n    insertText(parentNode, text) {\n        const lastChild = parentNode.children[parentNode.children.length - 1];\n        if (lastChild && isText(lastChild)) {\n            lastChild.data += text;\n        }\n        else {\n            adapter.appendChild(parentNode, adapter.createTextNode(text));\n        }\n    },\n    insertTextBefore(parentNode, text, referenceNode) {\n        const prevNode = parentNode.children[parentNode.children.indexOf(referenceNode) - 1];\n        if (prevNode && isText(prevNode)) {\n            prevNode.data += text;\n        }\n        else {\n            adapter.insertBefore(parentNode, adapter.createTextNode(text), referenceNode);\n        }\n    },\n    adoptAttributes(recipient, attrs) {\n        for (let i = 0; i < attrs.length; i++) {\n            const attrName = attrs[i].name;\n            if (recipient.attribs[attrName] === undefined) {\n                recipient.attribs[attrName] = attrs[i].value;\n                recipient['x-attribsNamespace'][attrName] = attrs[i].namespace;\n                recipient['x-attribsPrefix'][attrName] = attrs[i].prefix;\n            }\n        }\n    },\n    //Tree traversing\n    getFirstChild(node) {\n        return node.children[0];\n    },\n    getChildNodes(node) {\n        return node.children;\n    },\n    getParentNode(node) {\n        return node.parent;\n    },\n    getAttrList(element) {\n        return element.attributes;\n    },\n    //Node data\n    getTagName(element) {\n        return element.name;\n    },\n    getNamespaceURI(element) {\n        return element.namespace;\n    },\n    getTextNodeContent(textNode) {\n        return textNode.data;\n    },\n    getCommentNodeContent(commentNode) {\n        return commentNode.data;\n    },\n    getDocumentTypeNodeName(doctypeNode) {\n        var _a;\n        return (_a = doctypeNode['x-name']) !== null && _a !== void 0 ? _a : '';\n    },\n    getDocumentTypeNodePublicId(doctypeNode) {\n        var _a;\n        return (_a = doctypeNode['x-publicId']) !== null && _a !== void 0 ? _a : '';\n    },\n    getDocumentTypeNodeSystemId(doctypeNode) {\n        var _a;\n        return (_a = doctypeNode['x-systemId']) !== null && _a !== void 0 ? _a : '';\n    },\n    //Node types\n    isDocumentTypeNode(node) {\n        return isDirective(node) && node.name === '!doctype';\n    },\n    // Source code location\n    setNodeSourceCodeLocation(node, location) {\n        if (location) {\n            node.startIndex = location.startOffset;\n            node.endIndex = location.endOffset;\n        }\n        node.sourceCodeLocation = location;\n    },\n    getNodeSourceCodeLocation(node) {\n        return node.sourceCodeLocation;\n    },\n    updateNodeSourceCodeLocation(node, endLocation) {\n        if (endLocation.endOffset != null)\n            node.endIndex = endLocation.endOffset;\n        node.sourceCodeLocation = {\n            ...node.sourceCodeLocation,\n            ...endLocation,\n        };\n    },\n};\n", "import {\n  type AnyNode,\n  type Document,\n  type ParentNode,\n  isDocument,\n} from 'domhandler';\nimport { parse as parseDocument, parseFragment, serializeOuter } from 'parse5';\nimport { adapter as htmlparser2Adapter } from 'parse5-htmlparser2-tree-adapter';\nimport type { InternalOptions } from '../options.js';\n\n/**\n * Parse the content with `parse5` in the context of the given `ParentNode`.\n *\n * @param content - The content to parse.\n * @param options - A set of options to use to parse.\n * @param isDocument - Whether to parse the content as a full HTML document.\n * @param context - The context in which to parse the content.\n * @returns The parsed content.\n */\nexport function parseWithParse5(\n  content: string,\n  options: InternalOptions,\n  isDocument: boolean,\n  context: ParentNode | null,\n): Document {\n  options.treeAdapter ??= htmlparser2Adapter;\n\n  if (options.scriptingEnabled !== false) {\n    options.scriptingEnabled = true;\n  }\n\n  return isDocument\n    ? parseDocument(content, options)\n    : parseFragment(context, content, options);\n}\n\nconst renderOpts = { treeAdapter: htmlparser2Adapter };\n\n/**\n * Renders the given DOM tree with `parse5` and returns the result as a string.\n *\n * @param dom - The DOM tree to render.\n * @returns The rendered document.\n */\nexport function renderWithParse5(dom: AnyNode | ArrayLike<AnyNode>): string {\n  /*\n   * `dom-serializer` passes over the special \"root\" node and renders the\n   * node's children in its place. To mimic this behavior with `parse5`, an\n   * equivalent operation must be applied to the input array.\n   */\n  const nodes = 'length' in dom ? dom : [dom];\n  for (let index = 0; index < nodes.length; index += 1) {\n    const node = nodes[index];\n    if (isDocument(node)) {\n      Array.prototype.splice.call(nodes, index, 1, ...node.children);\n    }\n  }\n\n  let result = '';\n  for (let index = 0; index < nodes.length; index += 1) {\n    const node = nodes[index];\n    result += serializeOuter(node, renderOpts);\n  }\n\n  return result;\n}\n", "import { type CheerioAPI, getLoad } from './load.js';\nimport { getParse } from './parse.js';\nimport { renderWithParse5, parseWithParse5 } from './parsers/parse5-adapter.js';\nimport type { CheerioOptions } from './options.js';\nimport renderWithHtmlparser2 from 'dom-serializer';\nimport { parseDocument as parseWithHtmlparser2 } from 'htmlparser2';\nimport type { AnyNode } from 'domhandler';\n\nconst parse = getParse((content, options, isDocument, context) =>\n  options._useHtmlParser2\n    ? parseWithHtmlparser2(content, options)\n    : parseWithParse5(content, options, isDocument, context),\n);\n\n// Duplicate docs due to https://github.com/TypeStrong/typedoc/issues/1616\n/**\n * Create a querying function, bound to a document created from the provided\n * markup.\n *\n * Note that similar to web browser contexts, this operation may introduce\n * `<html>`, `<head>`, and `<body>` elements; set `isDocument` to `false` to\n * switch to fragment mode and disable this.\n *\n * @category Loading\n * @param content - Markup to be loaded.\n * @param options - Options for the created instance.\n * @param isDocument - Allows parser to be switched to fragment mode.\n * @returns The loaded document.\n * @see {@link https://cheerio.js.org/docs/basics/loading#load} for additional usage information.\n */\nexport const load: (\n  content: string | AnyNode | AnyNode[] | Buffer,\n  options?: CheerioOptions | null,\n  isDocument?: boolean,\n) => CheerioAPI = getLoad(parse, (dom, options) =>\n  options._useHtmlParser2\n    ? renderWithHtmlparser2(dom, options)\n    : renderWithParse5(dom),\n);\n", null, null, "/**\n * @file Batteries-included version of Cheerio. This module includes several\n *   convenience methods for loading documents from various sources.\n */\n\nexport * from './load-parse.js';\nexport { contains, merge } from './static.js';\nexport type * from './types.js';\nexport type {\n  Cheerio,\n  CheerioAPI,\n  CheerioOptions,\n  HTMLParser2Options,\n} from './slim.js';\n\nimport { adapter as htmlparser2Adapter } from 'parse5-htmlparser2-tree-adapter';\nimport * as htmlparser2 from 'htmlparser2';\nimport { ParserStream as Parse5Stream } from 'parse5-parser-stream';\nimport {\n  decodeBuffer,\n  DecodeStream,\n  type SnifferOptions,\n} from 'encoding-sniffer';\nimport * as undici from 'undici';\nimport MIMEType from 'whatwg-mimetype';\nimport { Writable, finished } from 'node:stream';\nimport type { CheerioAPI } from './load.js';\nimport {\n  flattenOptions,\n  type InternalOptions,\n  type CheerioOptions,\n} from './options.js';\nimport { load } from './load-parse.js';\n\n/**\n * Sniffs the encoding of a buffer, then creates a querying function bound to a\n * document created from the buffer.\n *\n * @category Loading\n * @example\n *\n * ```js\n * import * as cheerio from 'cheerio';\n *\n * const buffer = fs.readFileSync('index.html');\n * const $ = cheerio.loadBuffer(buffer);\n * ```\n *\n * @param buffer - The buffer to sniff the encoding of.\n * @param options - The options to pass to Cheerio.\n * @returns The loaded document.\n */\nexport function loadBuffer(\n  buffer: Buffer,\n  options: DecodeStreamOptions = {},\n): CheerioAPI {\n  const opts = flattenOptions(options);\n  const str = decodeBuffer(buffer, {\n    defaultEncoding: opts?.xmlMode ? 'utf8' : 'windows-1252',\n    ...options.encoding,\n  });\n\n  return load(str, opts);\n}\n\nfunction _stringStream(\n  options: InternalOptions | undefined,\n  cb: (err: Error | null | undefined, $: CheerioAPI) => void,\n): Writable {\n  if (options?._useHtmlParser2) {\n    const parser = htmlparser2.createDocumentStream(\n      (err, document) => cb(err, load(document, options)),\n      options,\n    );\n\n    return new Writable({\n      decodeStrings: false,\n      write(chunk, _encoding, callback) {\n        if (typeof chunk !== 'string') {\n          throw new TypeError('Expected a string');\n        }\n\n        parser.write(chunk);\n        callback();\n      },\n      final(callback) {\n        parser.end();\n        callback();\n      },\n    });\n  }\n\n  options ??= {};\n  options.treeAdapter ??= htmlparser2Adapter;\n\n  if (options.scriptingEnabled !== false) {\n    options.scriptingEnabled = true;\n  }\n\n  const stream = new Parse5Stream(options);\n\n  finished(stream, (err) => cb(err, load(stream.document, options)));\n\n  return stream;\n}\n\n/**\n * Creates a stream that parses a sequence of strings into a document.\n *\n * The stream is a `Writable` stream that accepts strings. When the stream is\n * finished, the callback is called with the loaded document.\n *\n * @category Loading\n * @example\n *\n * ```js\n * import * as cheerio from 'cheerio';\n * import * as fs from 'fs';\n *\n * const writeStream = cheerio.stringStream({}, (err, $) => {\n *   if (err) {\n *     // Handle error\n *   }\n *\n *   console.log($('h1').text());\n *   // Output: Hello, world!\n * });\n *\n * fs.createReadStream('my-document.html', { encoding: 'utf8' }).pipe(\n *   writeStream,\n * );\n * ```\n *\n * @param options - The options to pass to Cheerio.\n * @param cb - The callback to call when the stream is finished.\n * @returns The writable stream.\n */\nexport function stringStream(\n  options: CheerioOptions,\n  cb: (err: Error | null | undefined, $: CheerioAPI) => void,\n): Writable {\n  return _stringStream(flattenOptions(options), cb);\n}\n\nexport interface DecodeStreamOptions extends CheerioOptions {\n  encoding?: SnifferOptions;\n}\n\n/**\n * Parses a stream of buffers into a document.\n *\n * The stream is a `Writable` stream that accepts buffers. When the stream is\n * finished, the callback is called with the loaded document.\n *\n * @category Loading\n * @param options - The options to pass to Cheerio.\n * @param cb - The callback to call when the stream is finished.\n * @returns The writable stream.\n */\nexport function decodeStream(\n  options: DecodeStreamOptions,\n  cb: (err: Error | null | undefined, $: CheerioAPI) => void,\n): Writable {\n  const { encoding = {}, ...cheerioOptions } = options;\n  const opts = flattenOptions(cheerioOptions);\n\n  // Set the default encoding to UTF-8 for XML mode\n  encoding.defaultEncoding ??= opts?.xmlMode ? 'utf8' : 'windows-1252';\n\n  const decodeStream = new DecodeStream(encoding);\n  const loadStream = _stringStream(opts, cb);\n\n  decodeStream.pipe(loadStream);\n\n  return decodeStream;\n}\n\ntype UndiciStreamOptions = Omit<\n  undici.Dispatcher.RequestOptions<unknown>,\n  'path'\n>;\n\nexport interface CheerioRequestOptions extends DecodeStreamOptions {\n  /** The options passed to `undici`'s `stream` method. */\n  requestOptions?: UndiciStreamOptions;\n}\n\nconst defaultRequestOptions: UndiciStreamOptions = {\n  method: 'GET',\n  // Set an Accept header\n  headers: {\n    accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',\n  },\n};\n\n/**\n * `fromURL` loads a document from a URL.\n *\n * By default, redirects are allowed and non-2xx responses are rejected.\n *\n * @category Loading\n * @example\n *\n * ```js\n * import * as cheerio from 'cheerio';\n *\n * const $ = await cheerio.fromURL('https://example.com');\n * ```\n *\n * @param url - The URL to load the document from.\n * @param options - The options to pass to Cheerio.\n * @returns The loaded document.\n */\nexport async function fromURL(\n  url: string | URL,\n  options: CheerioRequestOptions = {},\n): Promise<CheerioAPI> {\n  const {\n    requestOptions = defaultRequestOptions,\n    encoding = {},\n    ...cheerioOptions\n  } = options;\n  let undiciStream: Promise<undici.Dispatcher.StreamData<unknown>> | undefined;\n\n  // Add headers if none were supplied.\n  const urlObject = typeof url === 'string' ? new URL(url) : url;\n  const streamOptions = {\n    headers: defaultRequestOptions.headers,\n    path: urlObject.pathname + urlObject.search,\n    ...requestOptions,\n  };\n\n  const promise = new Promise<CheerioAPI>((resolve, reject) => {\n    undiciStream = new undici.Client(urlObject.origin)\n      .compose(undici.interceptors.redirect({ maxRedirections: 5 }))\n      .stream(streamOptions, (res) => {\n        if (res.statusCode < 200 || res.statusCode >= 300) {\n          throw new undici.errors.ResponseError(\n            'Response Error',\n            res.statusCode,\n            {\n              headers: res.headers,\n            },\n          );\n        }\n\n        const contentTypeHeader = res.headers['content-type'] ?? 'text/html';\n        const mimeType = new MIMEType(\n          Array.isArray(contentTypeHeader)\n            ? contentTypeHeader[0]\n            : contentTypeHeader,\n        );\n\n        if (!mimeType.isHTML() && !mimeType.isXML()) {\n          throw new RangeError(\n            `The content-type \"${mimeType.essence}\" is neither HTML nor XML.`,\n          );\n        }\n\n        // Forward the charset from the header to the decodeStream.\n        encoding.transportLayerEncodingLabel =\n          mimeType.parameters.get('charset');\n\n        /*\n         * If we allow redirects, we will have entries in the history.\n         * The last entry will be the final URL.\n         */\n        const history = (\n          res.context as\n            | {\n                history?: URL[];\n              }\n            | undefined\n        )?.history;\n        // Set the `baseURI` to the final URL.\n        const baseURI = history ? history[history.length - 1] : urlObject;\n\n        const opts: DecodeStreamOptions = {\n          encoding,\n          // Set XML mode based on the MIME type.\n          xmlMode: mimeType.isXML(),\n          baseURI,\n          ...cheerioOptions,\n        };\n\n        return decodeStream(opts, (err, $) => (err ? reject(err) : resolve($)));\n      });\n  });\n\n  // Let's make sure the request is completed before returning the promise.\n  await undiciStream;\n\n  return promise;\n}\n", "/**\n\n * AI Gear Seeder \u2014 fetches affiliate product candidates from external APIs.\n\n *\n\n * Amazon  \u2192 RapidAPI \"Real-Time Amazon Data\" (JSON, no HTML scraping)\n\n * Outdoor \u2192 ScraperAPI proxy + cheerio HTML parsing (Bass Pro, Cabela's, generic)\n\n */\n\n\n\nimport * as cheerio from \"cheerio\";\n\nimport crypto from \"crypto\";\n\nimport { buildTrackedAffiliateUrl } from \"./gearAffiliate\";\n\n\n\nexport type SeedTargetStore = \"amazon\" | \"basspro\" | \"cabelas\" | \"generic\";\n\n\n\nexport interface AmazonCategory {\n\n  id: string;\n\n  name: string;\n\n}\n\n\n\nexport interface StagedGearItem {\n\n  /** Ephemeral staging id \u2014 not persisted until import */\n\n  stagingId: string;\n\n  name: string;\n\n  brand: string;\n\n  category: \"hunting\" | \"fishing\" | \"camping\";\n\n  subcategory: string;\n\n  price: number;\n\n  description: string;\n\n  thumbnailUrl: string;\n\n  affiliateUrl: string;\n\n  trackingId: string;\n\n  storeName: string;\n\n  asin?: string;\n\n  source: SeedTargetStore;\n\n}\n\n\n\nexport class SeederApiError extends Error {\n\n  constructor(\n\n    message: string,\n\n    public statusCode: number,\n\n    public retryAfterSec?: number,\n\n  ) {\n\n    super(message);\n\n    this.name = \"SeederApiError\";\n\n  }\n\n}\n\n\n\nconst DEFAULT_RAPIDAPI_AMAZON_HOST = \"real-time-amazon-data.p.rapidapi.com\";\n\n\n\nconst OUTDOOR_CATEGORY_RE =\n\n  /hunt|fish|outdoor|sport|archery|camp|tackle|boat|knife|optics|shoot|garden|departments|all/i;\n\n\n\nfunction resolveRapidApiHost(): string {\n\n  const configured = process.env.RAPIDAPI_AMAZON_HOST?.trim();\n\n  return configured || DEFAULT_RAPIDAPI_AMAZON_HOST;\n\n}\n\n\n\nfunction rapidApiKey(): string {\n\n  const apiKey = process.env.RAPIDAPI_KEY?.trim();\n\n  if (!apiKey) {\n\n    throw new SeederApiError(\"RAPIDAPI_KEY is not configured.\", 503);\n\n  }\n\n  return apiKey;\n\n}\n\n\n\nasync function rapidApiAmazonFetch<T>(\n\n  path: string,\n\n  params?: Record<string, string | undefined>,\n\n): Promise<T> {\n\n  const host = resolveRapidApiHost();\n\n  const search = new URLSearchParams();\n\n  for (const [key, value] of Object.entries(params ?? {})) {\n\n    if (value?.trim()) search.set(key, value.trim());\n\n  }\n\n  const qs = search.toString();\n\n  const url = `https://${host}${path}${qs ? `?${qs}` : \"\"}`;\n\n\n\n  let res: Response;\n\n  try {\n\n    res = await fetch(url, {\n\n      method: \"GET\",\n\n      headers: {\n\n        \"x-rapidapi-key\": rapidApiKey(),\n\n        \"x-rapidapi-host\": host,\n\n        \"Content-Type\": \"application/json\",\n\n      },\n\n    });\n\n  } catch (err) {\n\n    const detail = err instanceof Error ? err.message : String(err);\n\n    throw new SeederApiError(`Amazon API request failed: ${detail}`, 502);\n\n  }\n\n\n\n  if (res.status === 429) {\n\n    const retryAfter = parseInt(res.headers.get(\"retry-after\") ?? \"60\", 10);\n\n    throw new SeederApiError(\n\n      \"Amazon API rate limit exceeded. Try again later or reduce quantity.\",\n\n      429,\n\n      retryAfter,\n\n    );\n\n  }\n\n  if (res.status === 401 || res.status === 403) {\n\n    throw new SeederApiError(\n\n      \"Invalid, expired, or unsubscribed RapidAPI key. Subscribe to Real-Time Amazon Data on RapidAPI and set RAPIDAPI_KEY.\",\n\n      502,\n\n    );\n\n  }\n\n\n\n  const bodyText = await res.text();\n\n  let json: Record<string, unknown>;\n\n  try {\n\n    json = JSON.parse(bodyText) as Record<string, unknown>;\n\n  } catch {\n\n    throw new SeederApiError(\n\n      `Amazon API returned non-JSON (${res.status}): ${bodyText.slice(0, 200)}`,\n\n      res.status >= 500 ? 502 : 400,\n\n    );\n\n  }\n\n\n\n  if (json.status === \"ERROR\") {\n\n    const message =\n\n      (typeof json.message === \"string\" && json.message) ||\n\n      (typeof json.error === \"string\" && json.error) ||\n\n      \"Amazon API returned an error.\";\n\n    throw new SeederApiError(message, 502);\n\n  }\n\n\n\n  if (!res.ok) {\n\n    throw new SeederApiError(\n\n      `Amazon API failed (${res.status}): ${bodyText.slice(0, 200)}`,\n\n      res.status >= 500 ? 502 : 400,\n\n    );\n\n  }\n\n\n\n  return json as T;\n\n}\n\n\n\nconst STORE_SEARCH_URLS: Record<Exclude<SeedTargetStore, \"amazon\">, (q: string) => string> = {\n\n  basspro: (q) => `https://www.basspro.com/shop/en/search?Ntt=${encodeURIComponent(q)}`,\n\n  cabelas: (q) => `https://www.cabelas.com/shop/en/search?Ntt=${encodeURIComponent(q)}`,\n\n  generic: (q) => `https://www.basspro.com/shop/en/search?Ntt=${encodeURIComponent(q)}`,\n\n};\n\n\n\nconst FISHING_KEYWORDS =\n\n  /\\b(fish|fishing|rod|reel|lure|bait|tackle|kayak|wader|fly|bass|trout|salmon|crappie|catfish)\\b/i;\n\nconst HUNTING_KEYWORDS =\n\n  /\\b(hunt|hunting|bow|arrow|broadhead|rifle|scope|deer|duck|waterfowl|blind|camo|crossbow)\\b/i;\n\n\n\nfunction inferCategory(query: string, title: string): \"hunting\" | \"fishing\" {\n\n  const blob = `${query} ${title}`;\n\n  if (FISHING_KEYWORDS.test(blob) && !HUNTING_KEYWORDS.test(blob)) return \"fishing\";\n\n  if (HUNTING_KEYWORDS.test(blob)) return \"hunting\";\n\n  return \"hunting\";\n\n}\n\n\n\nfunction inferSubcategory(query: string, title: string): string {\n\n  const blob = `${query} ${title}`.toLowerCase();\n\n  const pairs: Array<[RegExp, string]> = [\n\n    [/\\bbroadhead/, \"Broadheads\"],\n\n    [/\\bcompound bow|\\bbow\\b/, \"Bows\"],\n\n    [/\\barrow/, \"Arrows\"],\n\n    [/\\bscope|\\bsight/, \"Optics\"],\n\n    [/\\brod\\b/, \"Rods\"],\n\n    [/\\breel/, \"Reels\"],\n\n    [/\\blure|\\bbait/, \"Lures\"],\n\n    [/\\btackle/, \"Tackle\"],\n\n    [/\\bwader/, \"Waders\"],\n\n    [/\\bkayak/, \"Kayaks\"],\n\n    [/\\bcall\\b|\\bdecoy/, \"Calls & Decoys\"],\n\n  ];\n\n  for (const [re, label] of pairs) {\n\n    if (re.test(blob)) return label;\n\n  }\n\n  return \"General\";\n\n}\n\n\n\nfunction parsePrice(raw: unknown): number {\n\n  if (typeof raw === \"number\" && Number.isFinite(raw)) return Math.round(raw);\n\n  if (typeof raw !== \"string\") return 0;\n\n  const cleaned = raw.replace(/[^0-9.]/g, \"\");\n\n  const n = parseFloat(cleaned);\n\n  return Number.isFinite(n) ? Math.round(n) : 0;\n\n}\n\n\n\nfunction extractBrand(title: string): string {\n\n  const first = title.trim().split(/\\s+/)[0] ?? \"Unknown\";\n\n  return first.length > 1 ? first : \"Unknown\";\n\n}\n\n\n\nfunction decodeHtmlEntities(text: string): string {\n\n  return text\n\n    .replace(/&amp;/g, \"&\")\n\n    .replace(/&quot;/g, '\"')\n\n    .replace(/&#39;/g, \"'\")\n\n    .replace(/&lt;/g, \"<\")\n\n    .replace(/&gt;/g, \">\");\n\n}\n\n\n\nfunction amazonAffiliateTag(): string {\n\n  return (\n\n    process.env.AMAZON_AFFILIATE_TAG?.trim() ||\n\n    process.env.AMAZON_ASSOCIATE_TAG?.trim() ||\n\n    \"hooknbone-20\"\n\n  );\n\n}\n\n\n\nasync function fetchWithRateLimit(url: string, init?: RequestInit): Promise<Response> {\n\n  let res: Response;\n\n  try {\n\n    res = await fetch(url, init);\n\n  } catch (err) {\n\n    const detail = err instanceof Error ? err.message : String(err);\n\n    throw new SeederApiError(`External API request failed: ${detail}`, 502);\n\n  }\n\n  if (res.status === 429) {\n\n    const retryAfter = parseInt(res.headers.get(\"retry-after\") ?? \"60\", 10);\n\n    throw new SeederApiError(\n\n      \"External API rate limit exceeded. Try again later or reduce quantity.\",\n\n      429,\n\n      retryAfter,\n\n    );\n\n  }\n\n  if (res.status === 401 || res.status === 403) {\n\n    throw new SeederApiError(\n\n      \"Invalid, expired, or unsubscribed API key for the external provider. Check RAPIDAPI_KEY / SCRAPER_API_KEY and your provider subscription.\",\n\n      502,\n\n    );\n\n  }\n\n  return res;\n\n}\n\n\n\nexport function isSeederApiError(err: unknown): err is SeederApiError {\n\n  return err instanceof SeederApiError || (err instanceof Error && err.name === \"SeederApiError\");\n\n}\n\n\n\ntype AmazonProductRecord = Record<string, unknown>;\n\n\n\nfunction normalizeAmazonProduct(\n\n  p: AmazonProductRecord,\n\n  searchQuery: string,\n\n  categoryLabel?: string,\n\n): StagedGearItem | null {\n\n  const titleRaw =\n\n    (typeof p.product_title === \"string\" && p.product_title) ||\n\n    (typeof p.title === \"string\" && p.title) ||\n\n    \"\";\n\n  const title = decodeHtmlEntities(titleRaw).trim();\n\n  if (!title) return null;\n\n\n\n  const asin =\n\n    (typeof p.asin === \"string\" && p.asin) ||\n\n    (typeof p.product_asin === \"string\" && p.product_asin) ||\n\n    undefined;\n\n\n\n  const rawUrl =\n\n    (typeof p.product_url === \"string\" && p.product_url) ||\n\n    (typeof p.url === \"string\" && p.url) ||\n\n    (asin ? `https://www.amazon.com/dp/${asin}` : \"\");\n\n\n\n  const photo =\n\n    (typeof p.product_photo === \"string\" && p.product_photo) ||\n\n    (typeof p.product_main_image_url === \"string\" && p.product_main_image_url) ||\n\n    (typeof p.image === \"string\" && p.image) ||\n\n    \"\";\n\n\n\n  const price = parsePrice(p.product_price ?? p.price ?? p.product_original_price);\n\n  const tag = amazonAffiliateTag();\n\n  const categoryNote = categoryLabel ? ` in ${categoryLabel}` : \"\";\n\n\n\n  return {\n\n    stagingId: crypto.randomUUID(),\n\n    name: title.slice(0, 200),\n\n    brand: extractBrand(title),\n\n    category: inferCategory(searchQuery, title),\n\n    subcategory: inferSubcategory(searchQuery, title),\n\n    price,\n\n    description: `Imported from Amazon search: \"${searchQuery}\"${categoryNote}`,\n\n    thumbnailUrl: photo,\n\n    affiliateUrl: buildTrackedAffiliateUrl({\n\n      baseUrl: rawUrl || `https://www.amazon.com/s?k=${encodeURIComponent(title)}`,\n\n      trackingId: tag,\n\n      utm: { source: \"hooknbone\", medium: \"affiliate\", campaign: \"gear-seeder\" },\n\n    }),\n\n    trackingId: tag,\n\n    storeName: \"Amazon\",\n\n    asin,\n\n    source: \"amazon\",\n\n  };\n\n}\n\n\n\n/** RapidAPI Amazon department list (product-category-list). */\n\nexport async function fetchAmazonCategories(): Promise<AmazonCategory[]> {\n\n  const json = await rapidApiAmazonFetch<{\n\n    data?: Array<{ id?: string; name?: string }>;\n\n  }>(\"/product-category-list\", { country: \"US\" });\n\n\n\n  const rows = json.data ?? [];\n\n  const categories = rows\n\n    .filter((row) => row.id && row.name)\n\n    .map((row) => ({ id: row.id!, name: row.name! }));\n\n\n\n  const outdoor = categories.filter((c) => OUTDOOR_CATEGORY_RE.test(c.name));\n\n  return outdoor.length ? outdoor : categories.slice(0, 12);\n\n}\n\n\n\n/** RapidAPI Amazon product search \u2014 returns normalized staging items. */\n\nexport async function fetchAmazonProducts(\n\n  searchQuery: string,\n\n  quantity: number,\n\n  options?: { categoryId?: string; categoryName?: string },\n\n): Promise<StagedGearItem[]> {\n\n  const params: Record<string, string> = {\n\n    query: searchQuery,\n\n    page: \"1\",\n\n    country: \"US\",\n\n    sort_by: \"RELEVANCE\",\n\n    product_condition: \"ALL\",\n\n  };\n\n  if (options?.categoryId?.trim()) {\n\n    params.category_id = options.categoryId.trim();\n\n  }\n\n\n\n  const json = await rapidApiAmazonFetch<{\n\n    data?: { products?: AmazonProductRecord[] };\n\n    products?: AmazonProductRecord[];\n\n  }>(\"/search\", params);\n\n\n\n  const products = json.data?.products ?? json.products ?? [];\n\n  const items: StagedGearItem[] = [];\n\n\n\n  for (const p of products.slice(0, quantity)) {\n\n    const item = normalizeAmazonProduct(p, searchQuery, options?.categoryName);\n\n    if (item) items.push(item);\n\n  }\n\n\n\n  return items;\n\n}\n\n\n\nconst SCRAPER_API_KEY = \"b17f0f38f2e97be4aae5ee7c745e8f96\";\n\n\n\n/** ScraperAPI + cheerio for outdoor retailer search pages. */\n\nexport async function fetchScrapedStoreProducts(\n\n  searchQuery: string,\n\n  targetStore: Exclude<SeedTargetStore, \"amazon\">,\n\n  quantity: number,\n\n  customUrl?: string,\n\n): Promise<StagedGearItem[]> {\n\n  const requestBodyUrl = customUrl?.trim() || STORE_SEARCH_URLS[targetStore](searchQuery);\n\n  const targetUrl = encodeURIComponent(requestBodyUrl);\n\n  const needsUltraPremium = targetStore === \"basspro\" || targetStore === \"cabelas\";\n\n  const fetchUrl = needsUltraPremium\n\n    ? `https://api.scraperapi.com/?api_key=${SCRAPER_API_KEY}&url=${targetUrl}&render=true&ultra_premium=true`\n\n    : `https://api.scraperapi.com/?api_key=${SCRAPER_API_KEY}&url=${targetUrl}&render=true`;\n\n\n\n  let htmlString: string;\n\n  try {\n\n    const response = await fetch(fetchUrl);\n\n\n\n    if (!response.ok) {\n\n      const errorText = await response.text();\n\n      console.error(\"ScraperAPI Error:\", errorText);\n\n      if (response.status === 403 && /premium proxies/i.test(errorText)) {\n\n        throw new SeederApiError(\n\n          \"ScraperAPI plan does not include Premium/Ultra Premium proxies required for Bass Pro and Cabela's. Upgrade your ScraperAPI plan or use Generic URL with a custom product/search page.\",\n\n          502,\n\n        );\n\n      }\n\n      throw new SeederApiError(`ScraperAPI failed: ${errorText}`, response.status >= 500 ? 500 : 502);\n\n    }\n\n\n\n    htmlString = await response.text();\n\n  } catch (error) {\n\n    if (isSeederApiError(error)) throw error;\n\n    console.error(\"Fetch Execution Error:\", error);\n\n    throw new SeederApiError(\"Internal Server Error during scraping\", 500);\n\n  }\n\n\n\n  const $ = cheerio.load(htmlString);\n\n  const storeLabel =\n\n    targetStore === \"basspro\"\n\n      ? \"Bass Pro Shops\"\n\n      : targetStore === \"cabelas\"\n\n        ? \"Cabela's\"\n\n        : \"Outdoor Retailer\";\n\n\n\n  const candidates = parseProductCards($, storeLabel);\n\n  const items: StagedGearItem[] = [];\n\n\n\n  for (const c of candidates.slice(0, quantity)) {\n\n    items.push({\n\n      stagingId: crypto.randomUUID(),\n\n      name: c.title.slice(0, 200),\n\n      brand: extractBrand(c.title),\n\n      category: inferCategory(searchQuery, c.title),\n\n      subcategory: inferSubcategory(searchQuery, c.title),\n\n      price: c.price,\n\n      description: `Imported from ${storeLabel} search: \"${searchQuery}\"`,\n\n      thumbnailUrl: c.imageUrl,\n\n      affiliateUrl: c.productUrl || requestBodyUrl,\n\n      trackingId: \"\",\n\n      storeName: storeLabel,\n\n      source: targetStore,\n\n    });\n\n  }\n\n\n\n  return items;\n\n}\n\n\n\ninterface ParsedCard {\n\n  title: string;\n\n  price: number;\n\n  imageUrl: string;\n\n  productUrl: string;\n\n}\n\n\n\n/** Parse product cards using common e-commerce selectors + retailer-specific fallbacks. */\n\nfunction parseProductCards($: cheerio.CheerioAPI, storeLabel: string): ParsedCard[] {\n\n  const results: ParsedCard[] = [];\n\n  const seen = new Set<string>();\n\n\n\n  const cardSelectors = [\n\n    \"[data-product-id]\",\n\n    \"[data-test='product-card']\",\n\n    \"li.product-card-item\",\n\n    \".product-card\",\n\n    \".product-tile\",\n\n    \".search-result-item\",\n\n    \".product-item\",\n\n    \"article.product\",\n\n    \"article.product_pod\",\n\n    \".product_pod\",\n\n    \".product-grid-item\",\n\n  ];\n\n\n\n  for (const sel of cardSelectors) {\n\n    $(sel).each((_, el) => {\n\n      const card = $(el);\n\n      const title =\n\n        card.find(\".product-card-name\").first().text().trim() ||\n\n        card.find(\"[data-test='product-name']\").first().text().trim() ||\n\n        card.find(\".product-title\").first().text().trim() ||\n\n        card.find(\"[class*='product-title']\").first().text().trim() ||\n\n        card.find(\"h2 a, h3 a, .product-name, [data-test='product-title']\").first().text().trim() ||\n\n        card.find(\"h3 a\").attr(\"title\")?.trim() ||\n\n        card.find(\"a[title]\").attr(\"title\")?.trim() ||\n\n        \"\";\n\n\n\n      if (!title || title.length < 3 || seen.has(title)) return;\n\n      seen.add(title);\n\n\n\n      const priceText =\n\n        card.find(\".product-card-price\").first().text().trim() ||\n\n        card.find(\"[data-test='product-price']\").first().text().trim() ||\n\n        card.find(\".sale-price, .current-price\").first().text().trim() ||\n\n        card.find(\".price_color\").first().text().trim() ||\n\n        card.find(\".price\").first().text().trim() ||\n\n        card.find(\"[class*='price']\").first().text().trim() ||\n\n        \"\";\n\n\n\n      const imageUrl =\n\n        card.find(\".product-card-image img\").attr(\"src\") ||\n\n        card.find(\".product-image img\").attr(\"src\") ||\n\n        card.find(\"img[class*='product']\").attr(\"src\") ||\n\n        card.find(\"img\").first().attr(\"src\") ||\n\n        card.find(\"img\").first().attr(\"data-src\") ||\n\n        card.find(\"img\").first().attr(\"data-lazy-src\") ||\n\n        \"\";\n\n\n\n      const href =\n\n        card.find(\"a[href*='/product']\").first().attr(\"href\") ||\n\n        card.find(\"a[href*='/shop']\").first().attr(\"href\") ||\n\n        card.find(\".product-card-name a\").first().attr(\"href\") ||\n\n        card.find(\"a\").first().attr(\"href\") ||\n\n        \"\";\n\n\n\n      let productUrl = href ?? \"\";\n\n      if (productUrl.startsWith(\"/\")) {\n\n        const base =\n\n          storeLabel.includes(\"Cabela\")\n\n            ? \"https://www.cabelas.com\"\n\n            : \"https://www.basspro.com\";\n\n        productUrl = `${base}${productUrl}`;\n\n      }\n\n\n\n      results.push({\n\n        title,\n\n        price: parsePrice(priceText),\n\n        imageUrl: normalizeImageUrl(imageUrl),\n\n        productUrl,\n\n      });\n\n    });\n\n\n\n    if (results.length >= 50) break;\n\n  }\n\n\n\n  if (!results.length) {\n\n    const single = parseSingleProductPage($, storeLabel);\n\n    if (single) results.push(single);\n\n  }\n\n\n\n  return results;\n\n}\n\n\n\nfunction normalizeImageUrl(url: string): string {\n\n  if (!url) return \"\";\n\n  if (url.startsWith(\"//\")) return `https:${url}`;\n\n  return url;\n\n}\n\n\n\n/** Fallback for direct product page URLs (og tags + JSON-LD). */\n\nfunction parseSingleProductPage($: cheerio.CheerioAPI, storeLabel: string): ParsedCard | null {\n\n  const ogTitle = $('meta[property=\"og:title\"]').attr(\"content\")?.trim();\n\n  const jsonLdTitle = extractJsonLdProductField($, \"name\");\n\n  const title = ogTitle || jsonLdTitle || $(\"h1\").first().text().trim();\n\n  if (!title || title.length < 3) return null;\n\n\n\n  const ogImage = $('meta[property=\"og:image\"]').attr(\"content\")?.trim();\n\n  const jsonLdImage = extractJsonLdProductField($, \"image\");\n\n  const imageUrl = normalizeImageUrl(ogImage || jsonLdImage || $(\"img[itemprop='image']\").attr(\"src\") || \"\");\n\n\n\n  const priceText =\n\n    extractJsonLdProductField($, \"price\") ||\n\n    $(\"[itemprop='price']\").attr(\"content\") ||\n\n    $(\"[data-test='product-price']\").first().text().trim() ||\n\n    $(\".product-card-price, .sale-price, .current-price, .price\").first().text().trim() ||\n\n    \"\";\n\n\n\n  const ogUrl = $('meta[property=\"og:url\"]').attr(\"content\")?.trim();\n\n  const canonical = $('link[rel=\"canonical\"]').attr(\"href\")?.trim();\n\n  let productUrl = ogUrl || canonical || \"\";\n\n  if (productUrl.startsWith(\"/\")) {\n\n    const base = storeLabel.includes(\"Cabela\") ? \"https://www.cabelas.com\" : \"https://www.basspro.com\";\n\n    productUrl = `${base}${productUrl}`;\n\n  }\n\n\n\n  return {\n\n    title,\n\n    price: parsePrice(priceText),\n\n    imageUrl,\n\n    productUrl,\n\n  };\n\n}\n\n\n\nfunction extractJsonLdProductField($: cheerio.CheerioAPI, field: string): string {\n\n  const scripts = $('script[type=\"application/ld+json\"]');\n\n  for (let i = 0; i < scripts.length; i++) {\n\n    const raw = $(scripts[i]).html()?.trim();\n\n    if (!raw) continue;\n\n    try {\n\n      const parsed = JSON.parse(raw) as unknown;\n\n      const product = findJsonLdProduct(parsed);\n\n      if (!product) continue;\n\n      const value = product[field];\n\n      if (typeof value === \"string\" && value.trim()) return value.trim();\n\n      if (field === \"price\" && product.offers) {\n\n        const offers = Array.isArray(product.offers) ? product.offers[0] : product.offers;\n\n        if (offers && typeof offers === \"object\" && \"price\" in offers) {\n\n          const price = (offers as Record<string, unknown>).price;\n\n          if (typeof price === \"string\" || typeof price === \"number\") return String(price);\n\n        }\n\n      }\n\n      if (field === \"image\") {\n\n        if (Array.isArray(value) && typeof value[0] === \"string\") return value[0];\n\n        if (typeof value === \"object\" && value && \"url\" in (value as Record<string, unknown>)) {\n\n          return String((value as Record<string, unknown>).url);\n\n        }\n\n      }\n\n    } catch {\n\n      // ignore malformed JSON-LD blocks\n\n    }\n\n  }\n\n  return \"\";\n\n}\n\n\n\nfunction findJsonLdProduct(node: unknown): Record<string, unknown> | null {\n\n  if (!node || typeof node !== \"object\") return null;\n\n  const record = node as Record<string, unknown>;\n\n  const type = record[\"@type\"];\n\n  if (typeof type === \"string\" && /product/i.test(type)) return record;\n\n  if (Array.isArray(type) && type.some((t) => typeof t === \"string\" && /product/i.test(t))) return record;\n\n  if (Array.isArray(node)) {\n\n    for (const item of node) {\n\n      const found = findJsonLdProduct(item);\n\n      if (found) return found;\n\n    }\n\n  }\n\n  if (Array.isArray(record[\"@graph\"])) {\n\n    for (const item of record[\"@graph\"]) {\n\n      const found = findJsonLdProduct(item);\n\n      if (found) return found;\n\n    }\n\n  }\n\n  return null;\n\n}\n\n\n\nexport async function runGearSeedFetch(args: {\n\n  searchQuery: string;\n\n  targetStore: SeedTargetStore;\n\n  quantity: number;\n\n  customUrl?: string;\n\n  amazonCategoryId?: string;\n\n  amazonCategoryName?: string;\n\n}): Promise<{ items: StagedGearItem[]; source: SeedTargetStore; query: string }> {\n\n  const query = args.searchQuery.trim();\n\n  if (!query) {\n\n    throw new SeederApiError(\"searchQuery is required.\", 400);\n\n  }\n\n\n\n  const quantity = Math.min(Math.max(args.quantity, 1), 50);\n\n\n\n  const items =\n\n    args.targetStore === \"amazon\"\n\n      ? await fetchAmazonProducts(query, quantity, {\n\n          categoryId: args.amazonCategoryId,\n\n          categoryName: args.amazonCategoryName,\n\n        })\n\n      : await fetchScrapedStoreProducts(query, args.targetStore, quantity, args.customUrl);\n\n\n\n  return { items, source: args.targetStore, query };\n\n}\n\n\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { db, adminCacheTable } from \"@workspace/db\";\nimport {\n  analyticsApiUsageTable,\n  analyticsSeoConfigTable,\n} from \"@workspace/db/schema\";\nimport { requireAdmin } from \"../lib/authMiddleware\";\nimport {\n  generateGeminiInsights,\n  getLatestInsight,\n  getRealtimeMetrics,\n} from \"../lib/analyticsInsights\";\nimport { fetchAndAuditPage } from \"../lib/seoAuditor\";\nimport { generateSitemapXml } from \"../lib/sitemapBuilder\";\nimport { DEFAULT_ROBOTS } from \"./seoPublic\";\nimport { desc, eq, gte } from \"drizzle-orm\";\nimport { sql } from \"drizzle-orm\";\n\nconst router: IRouter = Router();\n\nconst ROBOTS_CACHE_KEY = \"robots_txt\";\n\nfunction siteOrigin(): string {\n  return (\n    process.env.SITE_ORIGIN?.trim() ||\n    (process.env.NODE_ENV === \"production\" ? \"https://hooknbone.com\" : \"http://localhost:5173\")\n  );\n}\n\nrouter.get(\"/metrics\", requireAdmin, async (req: Request, res: Response) => {\n  try {\n    const hours = Math.min(72, Math.max(1, Number(req.query.hours ?? 24)));\n    const data = await getRealtimeMetrics(hours);\n    res.json(data);\n  } catch (err) {\n    req.log?.error({ err }, \"analytics metrics failed\");\n    res.status(500).json({ error: \"Failed to load metrics\" });\n  }\n});\n\nrouter.get(\"/insights/latest\", requireAdmin, async (req: Request, res: Response) => {\n  try {\n    const row = await getLatestInsight();\n    res.json(row ?? null);\n  } catch (err) {\n    res.status(500).json({ error: \"Failed to load insights\" });\n  }\n});\n\nrouter.post(\"/insights/generate\", requireAdmin, async (req: Request, res: Response) => {\n  try {\n    const hours = Math.min(72, Math.max(24, Number(req.body?.hours ?? 48)));\n    const result = await generateGeminiInsights(hours);\n    res.json(result);\n  } catch (err) {\n    req.log?.error({ err }, \"insight generation failed\");\n    const message = err instanceof Error ? err.message : \"Insight generation failed\";\n    res.status(500).json({ error: message });\n  }\n});\n\nrouter.get(\"/costs\", requireAdmin, async (req: Request, res: Response) => {\n  try {\n    const hours = Math.min(168, Math.max(1, Number(req.query.hours ?? 24)));\n    const since = new Date(Date.now() - hours * 60 * 60 * 1000);\n\n    const [totals] = await db\n      .select({\n        totalCost: sql<number>`coalesce(sum(${analyticsApiUsageTable.costUsd}), 0)`,\n        tokensIn: sql<number>`coalesce(sum(${analyticsApiUsageTable.tokensIn}), 0)`,\n        tokensOut: sql<number>`coalesce(sum(${analyticsApiUsageTable.tokensOut}), 0)`,\n        calls: sql<number>`count(*)`,\n        avgLatency: sql<number>`avg(${analyticsApiUsageTable.latencyMs})`,\n      })\n      .from(analyticsApiUsageTable)\n      .where(gte(analyticsApiUsageTable.createdAt, since));\n\n    const byProvider = await db\n      .select({\n        provider: analyticsApiUsageTable.provider,\n        cost: sql<number>`coalesce(sum(${analyticsApiUsageTable.costUsd}), 0)`,\n        calls: sql<number>`count(*)`,\n      })\n      .from(analyticsApiUsageTable)\n      .where(gte(analyticsApiUsageTable.createdAt, since))\n      .groupBy(analyticsApiUsageTable.provider)\n      .orderBy(desc(sql`coalesce(sum(${analyticsApiUsageTable.costUsd}), 0)`));\n\n    const recent = await db\n      .select()\n      .from(analyticsApiUsageTable)\n      .where(gte(analyticsApiUsageTable.createdAt, since))\n      .orderBy(desc(analyticsApiUsageTable.createdAt))\n      .limit(25);\n\n    res.json({ hours, totals: totals ?? {}, byProvider, recent });\n  } catch (err) {\n    req.log?.error({ err }, \"cost metrics failed\");\n    res.status(500).json({ error: \"Failed to load costs\" });\n  }\n});\n\nrouter.post(\"/seo/audit\", requireAdmin, async (req: Request, res: Response) => {\n  try {\n    const path = String(req.body?.path ?? \"/\").trim();\n    if (!path.startsWith(\"/\")) {\n      res.status(400).json({ error: \"Path must start with /\" });\n      return;\n    }\n    const result = await fetchAndAuditPage(path, siteOrigin());\n    res.json(result);\n  } catch (err) {\n    req.log?.error({ err }, \"seo audit failed\");\n    res.status(500).json({ error: \"SEO audit failed\" });\n  }\n});\n\nrouter.get(\"/seo/robots\", requireAdmin, async (_req: Request, res: Response) => {\n  try {\n    const [row] = await db\n      .select()\n      .from(adminCacheTable)\n      .where(eq(adminCacheTable.key, ROBOTS_CACHE_KEY))\n      .limit(1);\n\n    res.json({ content: row?.dataJson ?? DEFAULT_ROBOTS, updatedAt: row?.fetchedAt ?? null });\n  } catch (err) {\n    res.status(500).json({ error: \"Failed to load robots.txt\" });\n  }\n});\n\nrouter.put(\"/seo/robots\", requireAdmin, async (req: Request, res: Response) => {\n  try {\n    const content = String(req.body?.content ?? \"\");\n    if (content.length > 32_000) {\n      res.status(400).json({ error: \"robots.txt too large\" });\n      return;\n    }\n    await db\n      .insert(adminCacheTable)\n      .values({ key: ROBOTS_CACHE_KEY, dataJson: content, ttlMs: 86_400_000 * 365 })\n      .onConflictDoUpdate({\n        target: adminCacheTable.key,\n        set: { dataJson: content, fetchedAt: new Date() },\n      });\n    res.json({ ok: true });\n  } catch (err) {\n    res.status(500).json({ error: \"Failed to save robots.txt\" });\n  }\n});\n\nrouter.post(\"/seo/sitemap/regenerate\", requireAdmin, async (_req: Request, res: Response) => {\n  try {\n    const xml = await generateSitemapXml(siteOrigin());\n    res.json({\n      ok: true,\n      message: `Sitemap regenerated with ${xml.split(\"<url>\").length - 1} URLs.`,\n      sitemapUrl: `${siteOrigin()}/sitemap.xml`,\n      urlCount: xml.split(\"<url>\").length - 1,\n    });\n  } catch (err) {\n    res.status(500).json({ error: \"Sitemap regeneration failed\" });\n  }\n});\n\nrouter.get(\"/seo/social\", requireAdmin, async (req: Request, res: Response) => {\n  try {\n    const path = String(req.query.path ?? \"/\").trim();\n    const [row] = await db\n      .select()\n      .from(analyticsSeoConfigTable)\n      .where(eq(analyticsSeoConfigTable.path, path))\n      .limit(1);\n    res.json(row ?? { path, ogTitle: null, ogDescription: null, ogImage: null, twitterCard: \"summary_large_image\", keywords: null });\n  } catch (err) {\n    res.status(500).json({ error: \"Failed to load social config\" });\n  }\n});\n\nrouter.put(\"/seo/social\", requireAdmin, async (req: Request, res: Response) => {\n  try {\n    const path = String(req.body?.path ?? \"/\").trim();\n    if (!path.startsWith(\"/\")) {\n      res.status(400).json({ error: \"Path must start with /\" });\n      return;\n    }\n    const payload = {\n      path,\n      ogTitle: req.body?.ogTitle ?? null,\n      ogDescription: req.body?.ogDescription ?? null,\n      ogImage: req.body?.ogImage ?? null,\n      twitterCard: req.body?.twitterCard ?? \"summary_large_image\",\n      keywords: req.body?.keywords ?? null,\n      updatedAt: new Date(),\n    };\n    await db.insert(analyticsSeoConfigTable).values(payload).onConflictDoUpdate({\n      target: analyticsSeoConfigTable.path,\n      set: {\n        ogTitle: payload.ogTitle,\n        ogDescription: payload.ogDescription,\n        ogImage: payload.ogImage,\n        twitterCard: payload.twitterCard,\n        keywords: payload.keywords,\n        updatedAt: payload.updatedAt,\n      },\n    });\n    res.json(payload);\n  } catch (err) {\n    res.status(500).json({ error: \"Failed to save social config\" });\n  }\n});\n\nexport default router;\n", "import { randomUUID } from \"node:crypto\";\nimport { db } from \"@workspace/db\";\nimport {\n  analyticsEventsTable,\n  analyticsInsightsTable,\n  analyticsWebVitalsTable,\n  analyticsApiUsageTable,\n} from \"@workspace/db/schema\";\nimport { and, count, desc, eq, gte, sql } from \"drizzle-orm\";\nimport { getGemini, GEMINI_VISION_MODEL } from \"./ai\";\nimport { logApiUsage } from \"./analyticsUsageLogger\";\n\nexport interface GeminiInsightPayload {\n  headline: string;\n  summary: string;\n  performanceScore: number;\n  anomalies: { severity: \"critical\" | \"warning\" | \"info\"; message: string }[];\n  trends: { metric: string; direction: \"up\" | \"down\" | \"flat\"; changePct: number; note: string }[];\n  seoRecommendations: string[];\n  costAlerts: string[];\n}\n\nexport async function aggregateAnalyticsWindow(hours: number) {\n  const since = new Date(Date.now() - hours * 60 * 60 * 1000);\n\n  const [eventStats] = await db\n    .select({\n      total: count(),\n      sessions: sql<number>`count(distinct ${analyticsEventsTable.sessionId})`,\n      pageviews: sql<number>`count(*) filter (where ${analyticsEventsTable.eventType} = 'pageview')`,\n      clicks: sql<number>`count(*) filter (where ${analyticsEventsTable.eventType} = 'click')`,\n    })\n    .from(analyticsEventsTable)\n    .where(and(gte(analyticsEventsTable.createdAt, since), eq(analyticsEventsTable.isBot, false)));\n\n  const topPages = await db\n    .select({\n      pagePath: analyticsEventsTable.pagePath,\n      views: count(),\n    })\n    .from(analyticsEventsTable)\n    .where(\n      and(\n        gte(analyticsEventsTable.createdAt, since),\n        eq(analyticsEventsTable.isBot, false),\n        eq(analyticsEventsTable.eventType, \"pageview\"),\n      ),\n    )\n    .groupBy(analyticsEventsTable.pagePath)\n    .orderBy(desc(count()))\n    .limit(8);\n\n  const referralBreakdown = await db\n    .select({\n      channel: sql<string>`coalesce(${analyticsEventsTable.utmSource}, 'direct')`,\n      total: count(),\n    })\n    .from(analyticsEventsTable)\n    .where(and(gte(analyticsEventsTable.createdAt, since), eq(analyticsEventsTable.isBot, false)))\n    .groupBy(sql`coalesce(${analyticsEventsTable.utmSource}, 'direct')`)\n    .orderBy(desc(count()))\n    .limit(10);\n\n  const [vitalsAgg] = await db\n    .select({\n      avgLcp: sql<number>`avg(${analyticsWebVitalsTable.lcp})`,\n      avgCls: sql<number>`avg(${analyticsWebVitalsTable.cls})`,\n      avgTtfb: sql<number>`avg(${analyticsWebVitalsTable.ttfb})`,\n      samples: count(),\n    })\n    .from(analyticsWebVitalsTable)\n    .where(gte(analyticsWebVitalsTable.createdAt, since));\n\n  const [costAgg] = await db\n    .select({\n      totalCost: sql<number>`coalesce(sum(${analyticsApiUsageTable.costUsd}), 0)`,\n      totalTokensIn: sql<number>`coalesce(sum(${analyticsApiUsageTable.tokensIn}), 0)`,\n      totalTokensOut: sql<number>`coalesce(sum(${analyticsApiUsageTable.tokensOut}), 0)`,\n      calls: count(),\n    })\n    .from(analyticsApiUsageTable)\n    .where(gte(analyticsApiUsageTable.createdAt, since));\n\n  const providerBreakdown = await db\n    .select({\n      provider: analyticsApiUsageTable.provider,\n      cost: sql<number>`coalesce(sum(${analyticsApiUsageTable.costUsd}), 0)`,\n      calls: count(),\n    })\n    .from(analyticsApiUsageTable)\n    .where(gte(analyticsApiUsageTable.createdAt, since))\n    .groupBy(analyticsApiUsageTable.provider)\n    .orderBy(desc(sql`coalesce(sum(${analyticsApiUsageTable.costUsd}), 0)`));\n\n  const hourlySessions = await db\n    .select({\n      hour: sql<string>`date_trunc('hour', ${analyticsEventsTable.createdAt})`,\n      sessions: sql<number>`count(distinct ${analyticsEventsTable.sessionId})`,\n    })\n    .from(analyticsEventsTable)\n    .where(and(gte(analyticsEventsTable.createdAt, since), eq(analyticsEventsTable.isBot, false)))\n    .groupBy(sql`date_trunc('hour', ${analyticsEventsTable.createdAt})`)\n    .orderBy(sql`date_trunc('hour', ${analyticsEventsTable.createdAt})`);\n\n  return {\n    since: since.toISOString(),\n    hours,\n    eventStats: eventStats ?? { total: 0, sessions: 0, pageviews: 0, clicks: 0 },\n    topPages,\n    referralBreakdown,\n    vitalsAgg: vitalsAgg ?? { avgLcp: null, avgCls: null, avgTtfb: null, samples: 0 },\n    costAgg: costAgg ?? { totalCost: 0, totalTokensIn: 0, totalTokensOut: 0, calls: 0 },\n    providerBreakdown,\n    hourlySessions,\n  };\n}\n\nexport async function generateGeminiInsights(hours: number): Promise<{\n  id: string;\n  narrative: string;\n  summary: GeminiInsightPayload;\n}> {\n  const data = await aggregateAnalyticsWindow(hours);\n  const started = Date.now();\n\n  const systemInstruction = `You are an elite SEO and growth analyst for Hook N Bone, a fishing/outdoor media platform.\nAnalyze the provided analytics JSON and return ONLY valid JSON matching this schema:\n{\n  \"headline\": \"string \u2014 one punchy executive headline\",\n  \"summary\": \"string \u2014 2-3 sentence natural language brief\",\n  \"performanceScore\": number 0-100,\n  \"anomalies\": [{ \"severity\": \"critical\"|\"warning\"|\"info\", \"message\": \"string\" }],\n  \"trends\": [{ \"metric\": \"string\", \"direction\": \"up\"|\"down\"|\"flat\", \"changePct\": number, \"note\": \"string\" }],\n  \"seoRecommendations\": [\"string\"],\n  \"costAlerts\": [\"string\"]\n}\nBe specific. Reference actual page paths and metrics when available. If data is sparse, say so and give setup recommendations.`;\n\n  const model = getGemini().getGenerativeModel({\n    model: GEMINI_VISION_MODEL,\n    systemInstruction,\n    generationConfig: {\n      responseMimeType: \"application/json\",\n      maxOutputTokens: 2048,\n    },\n  });\n\n  const result = await model.generateContent([\n    { text: `Analyze the last ${hours} hours of site analytics:\\n${JSON.stringify(data, null, 2)}` },\n  ]);\n\n  const latencyMs = Date.now() - started;\n  const raw = result.response.text();\n  const usage = result.response.usageMetadata;\n  const tokensIn = usage?.promptTokenCount ?? 0;\n  const tokensOut = usage?.candidatesTokenCount ?? 0;\n\n  await logApiUsage({\n    provider: \"gemini\",\n    model: GEMINI_VISION_MODEL,\n    endpoint: \"/analytics/insights\",\n    tokensIn,\n    tokensOut,\n    latencyMs,\n    metadata: { periodHours: hours },\n  });\n\n  let summary: GeminiInsightPayload;\n  try {\n    summary = JSON.parse(raw) as GeminiInsightPayload;\n  } catch {\n    summary = {\n      headline: \"Analytics brief unavailable\",\n      summary: raw.slice(0, 500),\n      performanceScore: 50,\n      anomalies: [],\n      trends: [],\n      seoRecommendations: [\"Verify GEMINI_API_KEY and retry insight generation.\"],\n      costAlerts: [],\n    };\n  }\n\n  const id = randomUUID();\n  const narrative = `${summary.headline}\\n\\n${summary.summary}`;\n\n  await db.insert(analyticsInsightsTable).values({\n    id,\n    periodHours: hours,\n    summaryJson: summary,\n    narrative,\n  });\n\n  return { id, narrative, summary };\n}\n\nexport async function getLatestInsight() {\n  const [row] = await db\n    .select()\n    .from(analyticsInsightsTable)\n    .orderBy(desc(analyticsInsightsTable.generatedAt))\n    .limit(1);\n  return row ?? null;\n}\n\nexport async function getRealtimeMetrics(hours = 24) {\n  return aggregateAnalyticsWindow(hours);\n}\n", "export interface SeoAuditResult {\n  path: string;\n  score: number;\n  title: string | null;\n  description: string | null;\n  h1: string[];\n  headings: { level: number; text: string }[];\n  metaTags: { name: string; content: string }[];\n  imagesMissingAlt: number;\n  imagesTotal: number;\n  issues: { severity: \"error\" | \"warning\" | \"info\"; message: string }[];\n  keywordDensity: Record<string, number>;\n}\n\nfunction stripTags(html: string): string {\n  return html.replace(/<[^>]+>/g, \" \").replace(/\\s+/g, \" \").trim();\n}\n\nfunction extractMeta(html: string, attr: \"name\" | \"property\", key: string): string | null {\n  const re = new RegExp(\n    `<meta[^>]+${attr}=[\"']${key}[\"'][^>]+content=[\"']([^\"']*)[\"']`,\n    \"i\",\n  );\n  const m = html.match(re);\n  if (m?.[1]) return m[1];\n  const re2 = new RegExp(\n    `<meta[^>]+content=[\"']([^\"']*)[\"'][^>]+${attr}=[\"']${key}[\"']`,\n    \"i\",\n  );\n  return re2.exec(html)?.[1] ?? null;\n}\n\nfunction extractTitle(html: string): string | null {\n  return html.match(/<title[^>]*>([^<]*)<\\/title>/i)?.[1]?.trim() ?? null;\n}\n\nfunction extractHeadings(html: string): { level: number; text: string }[] {\n  const headings: { level: number; text: string }[] = [];\n  const re = /<h([1-6])[^>]*>([\\s\\S]*?)<\\/h\\1>/gi;\n  let m: RegExpExecArray | null;\n  while ((m = re.exec(html)) !== null) {\n    headings.push({ level: Number(m[1]), text: stripTags(m[2] ?? \"\") });\n  }\n  return headings;\n}\n\nfunction countImages(html: string): { total: number; missingAlt: number } {\n  const imgs = [...html.matchAll(/<img\\b[^>]*>/gi)];\n  let missingAlt = 0;\n  for (const img of imgs) {\n    const tag = img[0] ?? \"\";\n    if (!/\\balt\\s*=\\s*[\"'][^\"']+[\"']/i.test(tag)) missingAlt++;\n  }\n  return { total: imgs.length, missingAlt };\n}\n\nfunction keywordDensity(text: string): Record<string, number> {\n  const words = text.toLowerCase().match(/[a-z]{4,}/g) ?? [];\n  const freq = new Map<string, number>();\n  for (const w of words) freq.set(w, (freq.get(w) ?? 0) + 1);\n  const total = words.length || 1;\n  return [...freq.entries()]\n    .sort((a, b) => b[1] - a[1])\n    .slice(0, 8)\n    .reduce<Record<string, number>>((acc, [k, v]) => {\n      acc[k] = Math.round((v / total) * 1000) / 10;\n      return acc;\n    }, {});\n}\n\nexport function auditHtml(path: string, html: string): SeoAuditResult {\n  const title = extractTitle(html);\n  const description = extractMeta(html, \"name\", \"description\");\n  const ogTitle = extractMeta(html, \"property\", \"og:title\");\n  const ogDescription = extractMeta(html, \"property\", \"og:description\");\n  const ogImage = extractMeta(html, \"property\", \"og:image\");\n  const headings = extractHeadings(html);\n  const h1 = headings.filter((h) => h.level === 1).map((h) => h.text);\n  const { total: imagesTotal, missingAlt: imagesMissingAlt } = countImages(html);\n\n  const metaTags: { name: string; content: string }[] = [];\n  if (title) metaTags.push({ name: \"title\", content: title });\n  if (description) metaTags.push({ name: \"description\", content: description });\n  if (ogTitle) metaTags.push({ name: \"og:title\", content: ogTitle });\n  if (ogDescription) metaTags.push({ name: \"og:description\", content: ogDescription });\n  if (ogImage) metaTags.push({ name: \"og:image\", content: ogImage });\n\n  const issues: SeoAuditResult[\"issues\"] = [];\n  let score = 100;\n\n  if (!title) {\n    issues.push({ severity: \"error\", message: \"Missing <title> tag\" });\n    score -= 20;\n  } else if (title.length < 30 || title.length > 65) {\n    issues.push({ severity: \"warning\", message: `Title length ${title.length} \u2014 aim for 30\u201365 characters` });\n    score -= 8;\n  }\n\n  if (!description) {\n    issues.push({ severity: \"error\", message: \"Missing meta description\" });\n    score -= 15;\n  } else if (description.length < 120 || description.length > 160) {\n    issues.push({\n      severity: \"warning\",\n      message: `Description length ${description.length} \u2014 aim for 120\u2013160 characters`,\n    });\n    score -= 6;\n  }\n\n  if (h1.length === 0) {\n    issues.push({ severity: \"error\", message: \"No H1 heading found\" });\n    score -= 15;\n  } else if (h1.length > 1) {\n    issues.push({ severity: \"warning\", message: `Multiple H1 tags (${h1.length}) \u2014 use exactly one` });\n    score -= 10;\n  }\n\n  for (let i = 1; i < headings.length; i++) {\n    const prev = headings[i - 1]!.level;\n    const curr = headings[i]!.level;\n    if (curr > prev + 1) {\n      issues.push({\n        severity: \"warning\",\n        message: `Heading hierarchy skip: H${prev} \u2192 H${curr}`,\n      });\n      score -= 4;\n      break;\n    }\n  }\n\n  if (imagesTotal > 0 && imagesMissingAlt > 0) {\n    issues.push({\n      severity: imagesMissingAlt / imagesTotal > 0.5 ? \"error\" : \"warning\",\n      message: `${imagesMissingAlt}/${imagesTotal} images missing alt text`,\n    });\n    score -= Math.min(20, imagesMissingAlt * 3);\n  }\n\n  if (!ogTitle || !ogDescription) {\n    issues.push({ severity: \"info\", message: \"Incomplete Open Graph tags for social sharing\" });\n    score -= 5;\n  }\n\n  const bodyText = stripTags(html.replace(/<head[\\s\\S]*?<\\/head>/i, \"\").replace(/<script[\\s\\S]*?<\\/script>/gi, \"\"));\n\n  return {\n    path,\n    score: Math.max(0, Math.min(100, score)),\n    title,\n    description,\n    h1,\n    headings: headings.slice(0, 20),\n    metaTags,\n    imagesMissingAlt,\n    imagesTotal,\n    issues,\n    keywordDensity: keywordDensity(bodyText),\n  };\n}\n\nexport async function fetchAndAuditPage(path: string, origin: string): Promise<SeoAuditResult> {\n  const url = `${origin.replace(/\\/$/, \"\")}${path.startsWith(\"/\") ? path : `/${path}`}`;\n  const res = await fetch(url, {\n    headers: { \"User-Agent\": \"HookNBone-SEO-Auditor/1.0\" },\n    redirect: \"follow\",\n  });\n  if (!res.ok) {\n    return {\n      path,\n      score: 0,\n      title: null,\n      description: null,\n      h1: [],\n      headings: [],\n      metaTags: [],\n      imagesMissingAlt: 0,\n      imagesTotal: 0,\n      issues: [{ severity: \"error\", message: `Failed to fetch page (${res.status})` }],\n      keywordDensity: {},\n    };\n  }\n  const html = await res.text();\n  return auditHtml(path, html);\n}\n", "import { db } from \"@workspace/db\";\nimport {\n  gearCatalogTable,\n  outfittersTable,\n} from \"@workspace/db/schema\";\nimport { asc, eq } from \"drizzle-orm\";\nimport { SPECIES_DATABASE } from \"../data/species\";\n\nexport interface SitemapUrl {\n  loc: string;\n  lastmod?: string;\n  changefreq?: string;\n  priority?: string;\n}\n\nconst SITEMAP_NS = \"http://www.sitemaps.org/schemas/sitemap/0.9\";\nconst MAX_GEAR_URLS = 5_000;\n\nconst STATIC_ROUTES: Array<{\n  path: string;\n  changefreq: SitemapUrl[\"changefreq\"];\n  priority: string;\n}> = [\n  { path: \"/\", changefreq: \"weekly\", priority: \"1.0\" },\n  { path: \"/gear\", changefreq: \"weekly\", priority: \"0.8\" },\n  { path: \"/feed\", changefreq: \"daily\", priority: \"0.8\" },\n  { path: \"/field-guide\", changefreq: \"weekly\", priority: \"0.7\" },\n  { path: \"/outfitters\", changefreq: \"weekly\", priority: \"0.7\" },\n  { path: \"/boneyard\", changefreq: \"daily\", priority: \"0.7\" },\n  { path: \"/radar\", changefreq: \"weekly\", priority: \"0.7\" },\n  { path: \"/wardens-desk\", changefreq: \"weekly\", priority: \"0.6\" },\n  { path: \"/terms\", changefreq: \"monthly\", priority: \"0.4\" },\n  { path: \"/privacy\", changefreq: \"monthly\", priority: \"0.4\" },\n  { path: \"/dmca-policy\", changefreq: \"monthly\", priority: \"0.3\" },\n];\n\nfunction formatDate(value: Date | string | null | undefined): string | undefined {\n  if (!value) return undefined;\n  const d = value instanceof Date ? value : new Date(value);\n  if (Number.isNaN(d.getTime())) return undefined;\n  return d.toISOString().split(\"T\")[0];\n}\n\nfunction readSpeciesSlugs(): string[] {\n  return SPECIES_DATABASE.map((species) => species.id);\n}\n\nasync function fetchPublishedGearUrls(): Promise<SitemapUrl[]> {\n  try {\n    const rows = await db\n      .select({\n        id: gearCatalogTable.id,\n        updatedAt: gearCatalogTable.updatedAt,\n      })\n      .from(gearCatalogTable)\n      .where(eq(gearCatalogTable.status, \"published\"))\n      .orderBy(asc(gearCatalogTable.position))\n      .limit(MAX_GEAR_URLS);\n\n    return rows.map((row) => ({\n      loc: `/gear/${encodeURIComponent(row.id)}`,\n      lastmod: formatDate(row.updatedAt),\n      changefreq: \"weekly\",\n      priority: \"0.7\",\n    }));\n  } catch {\n    const rows = await db\n      .select({\n        id: gearCatalogTable.id,\n        updatedAt: gearCatalogTable.updatedAt,\n      })\n      .from(gearCatalogTable)\n      .orderBy(asc(gearCatalogTable.position))\n      .limit(MAX_GEAR_URLS);\n\n    return rows.map((row) => ({\n      loc: `/gear/${encodeURIComponent(row.id)}`,\n      lastmod: formatDate(row.updatedAt),\n      changefreq: \"weekly\",\n      priority: \"0.7\",\n    }));\n  }\n}\n\nasync function fetchOutfitterUrls(): Promise<SitemapUrl[]> {\n  try {\n    const rows = await db\n      .select({\n        id: outfittersTable.id,\n        updatedAt: outfittersTable.createdAt,\n      })\n      .from(outfittersTable)\n      .where(eq(outfittersTable.status, \"approved\"))\n      .limit(2_000);\n\n    return rows.map((row) => ({\n      loc: `/outfitters/${encodeURIComponent(row.id)}`,\n      lastmod: formatDate(row.updatedAt),\n      changefreq: \"monthly\",\n      priority: \"0.6\",\n    }));\n  } catch {\n    return [];\n  }\n}\n\nexport async function collectSitemapUrls(): Promise<SitemapUrl[]> {\n  const today = new Date().toISOString().split(\"T\")[0];\n\n  const staticUrls: SitemapUrl[] = STATIC_ROUTES.map((route) => ({\n    loc: route.path,\n    lastmod: today,\n    changefreq: route.changefreq,\n    priority: route.priority,\n  }));\n\n  const speciesUrls: SitemapUrl[] = readSpeciesSlugs().map((slug) => ({\n    loc: `/species/${slug}`,\n    lastmod: today,\n    changefreq: \"monthly\",\n    priority: \"0.6\",\n  }));\n\n  const [gearUrls, outfitterUrls] = await Promise.all([\n    fetchPublishedGearUrls(),\n    fetchOutfitterUrls(),\n  ]);\n\n  const seen = new Set<string>();\n  const merged: SitemapUrl[] = [];\n\n  for (const entry of [...staticUrls, ...speciesUrls, ...gearUrls, ...outfitterUrls]) {\n    if (seen.has(entry.loc)) continue;\n    seen.add(entry.loc);\n    merged.push(entry);\n  }\n\n  return merged;\n}\n\nexport function buildSitemapXml(urls: SitemapUrl[], origin: string): string {\n  const entries = urls\n    .map((u) => {\n      const loc = `${origin}${u.loc.startsWith(\"/\") ? u.loc : `/${u.loc}`}`;\n      const lines = [`  <url>`, `    <loc>${escapeXml(loc)}</loc>`];\n      if (u.lastmod) lines.push(`    <lastmod>${escapeXml(u.lastmod)}</lastmod>`);\n      if (u.changefreq) lines.push(`    <changefreq>${escapeXml(u.changefreq)}</changefreq>`);\n      if (u.priority) lines.push(`    <priority>${escapeXml(u.priority)}</priority>`);\n      lines.push(`  </url>`);\n      return lines.join(\"\\n\");\n    })\n    .join(\"\\n\");\n\n  return (\n    `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n` +\n    `<urlset xmlns=\"${SITEMAP_NS}\">\\n` +\n    entries +\n    `\\n</urlset>\\n`\n  );\n}\n\nexport async function generateSitemapXml(origin: string): Promise<string> {\n  const urls = await collectSitemapUrls();\n  return buildSitemapXml(urls, origin);\n}\n\nfunction escapeXml(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&apos;\");\n}\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { db, adminCacheTable } from \"@workspace/db\";\nimport { eq } from \"drizzle-orm\";\nimport { generateSitemapXml } from \"../lib/sitemapBuilder\";\n\nconst router: IRouter = Router();\n\nconst ROBOTS_CACHE_KEY = \"robots_txt\";\n\nexport const DEFAULT_ROBOTS = `User-agent: *\nAllow: /\n\nDisallow: /admin\nDisallow: /admin/\nDisallow: /auth\nDisallow: /auth/\nDisallow: /sign-in\nDisallow: /sign-up\nDisallow: /upload\nDisallow: /exports\nDisallow: /api/\n\nSitemap: https://hooknbone.com/sitemap.xml\n`;\n\nfunction siteOrigin(): string {\n  return (\n    process.env.SITE_ORIGIN?.trim() ||\n    (process.env.NODE_ENV === \"production\" ? \"https://hooknbone.com\" : \"http://localhost:5173\")\n  );\n}\n\nrouter.get(\"/robots.txt\", async (_req: Request, res: Response) => {\n  try {\n    const [row] = await db\n      .select()\n      .from(adminCacheTable)\n      .where(eq(adminCacheTable.key, ROBOTS_CACHE_KEY))\n      .limit(1);\n\n    const content = row?.dataJson ?? DEFAULT_ROBOTS;\n    res.type(\"text/plain; charset=utf-8\");\n    res.setHeader(\"Cache-Control\", \"public, max-age=3600\");\n    res.send(content);\n  } catch {\n    res.type(\"text/plain; charset=utf-8\");\n    res.send(DEFAULT_ROBOTS);\n  }\n});\n\nrouter.get(\"/sitemap.xml\", async (req: Request, res: Response) => {\n  try {\n    const xml = await generateSitemapXml(siteOrigin());\n    res.type(\"application/xml; charset=utf-8\");\n    res.setHeader(\"Cache-Control\", \"public, max-age=3600\");\n    res.send(xml);\n  } catch (err) {\n    req.log?.error({ err }, \"sitemap generation failed\");\n    res.status(500).type(\"text/plain\").send(\"Sitemap generation failed\");\n  }\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { createHash } from \"crypto\";\nimport { getSessionUser, getDbUser } from \"../lib/authMiddleware\";\nimport { db } from \"@workspace/db\";\nimport { userAgreementsTable, dmcaClaimsTable, CURRENT_TOS_VERSION } from \"@workspace/db/schema\";\nimport { eq, and } from \"drizzle-orm\";\nimport {\n  sendDmcaClaimantConfirmation,\n  sendDmcaAdminNotification,\n  sendTosAcceptanceReceipt,\n} from \"../lib/email.js\";\n\nconst router: IRouter = Router();\n\nfunction hashIp(raw: string): string {\n  return createHash(\"sha256\").update(raw).digest(\"hex\");\n}\n\nfunction getClientIp(req: Request): string {\n  const xff = req.headers[\"x-forwarded-for\"];\n  if (xff) {\n    const first = Array.isArray(xff) ? xff[0] : xff.split(\",\")[0];\n    return (first ?? \"\").trim();\n  }\n  return req.socket?.remoteAddress ?? \"unknown\";\n}\n\nconst dmcaRateMap = new Map<string, number[]>();\nconst DMCA_LIMIT = 5;\nconst DMCA_WINDOW_MS = 3600_000;\n\nfunction dmcaRateLimited(ip: string): boolean {\n  const now = Date.now();\n  const hits = (dmcaRateMap.get(ip) ?? []).filter((t) => now - t < DMCA_WINDOW_MS);\n  hits.push(now);\n  dmcaRateMap.set(ip, hits);\n  return hits.length > DMCA_LIMIT;\n}\n\nrouter.post(\"/accept-tos\", async (req: Request, res: Response) => {\n  const u = getSessionUser(req);\n  if (!u?.userId) {\n    res.status(401).json({ error: \"Unauthorized\" });\n    return;\n  }\n\n  const { birthDate, profileType, tosVersion } = (req.body ?? {}) as {\n    birthDate?: string;\n    profileType?: string;\n    tosVersion?: string;\n  };\n\n  if (!birthDate || !profileType) {\n    res.status(400).json({ error: \"birthDate and profileType are required\" });\n    return;\n  }\n\n  const VALID_PROFILE_TYPES = [\"hunter\", \"angler\", \"both\"] as const;\n  if (!(VALID_PROFILE_TYPES as readonly string[]).includes(profileType)) {\n    res.status(400).json({ error: \"profileType must be hunter, angler, or both\" });\n    return;\n  }\n\n  const version = tosVersion ?? CURRENT_TOS_VERSION;\n\n  const birthMs = new Date(birthDate).getTime();\n  if (isNaN(birthMs)) {\n    res.status(400).json({ error: \"Invalid birthDate format\" });\n    return;\n  }\n\n  const ageMs = Date.now() - birthMs;\n  const ageYears = ageMs / (365.25 * 24 * 3600 * 1000);\n\n  if (ageYears < 13) {\n    res.status(400).json({ error: \"Must be at least 13 years old\" });\n    return;\n  }\n\n  const isAdult = ageYears >= 18;\n  const ipHash = hashIp(getClientIp(req));\n\n  try {\n    const existing = await db\n      .select({ id: userAgreementsTable.id })\n      .from(userAgreementsTable)\n      .where(\n        and(\n          eq(userAgreementsTable.userId, u.userId),\n          eq(userAgreementsTable.tosVersion, version),\n        ),\n      )\n      .limit(1);\n\n    if (existing.length > 0) {\n      res.json({ success: true, alreadyAccepted: true });\n      return;\n    }\n\n    const acceptedAt = new Date();\n\n    await db.insert(userAgreementsTable).values({\n      userId: u.userId,\n      tosVersion: version,\n      birthDate,\n      profileType,\n      ipHash,\n      isAdult,\n    });\n\n    res.json({ success: true, alreadyAccepted: false });\n\n    getDbUser(u.userId)\n      .then((dbUser) => {\n        if (!dbUser?.email) return;\n        return sendTosAcceptanceReceipt({ userEmail: dbUser.email, userName: dbUser.name || dbUser.email, tosVersion: version, acceptedAt });\n      })\n      .catch((err) => {\n        req.log?.warn({ err }, \"Legal: TOS receipt email failed (non-fatal)\");\n      });\n  } catch (err) {\n    req.log?.error({ err }, \"Legal: failed to record TOS acceptance\");\n    res.status(500).json({ error: \"Failed to record agreement\" });\n  }\n});\n\nrouter.get(\"/tos-status\", async (req: Request, res: Response) => {\n  const u2 = getSessionUser(req);\n  if (!u2?.userId) {\n    res.status(401).json({ error: \"Unauthorized\" });\n    return;\n  }\n\n  const version = (req.query[\"version\"] as string | undefined) ?? CURRENT_TOS_VERSION;\n\n  try {\n    const rows = await db\n      .select({\n        id: userAgreementsTable.id,\n        acceptedAt: userAgreementsTable.acceptedAt,\n        profileType: userAgreementsTable.profileType,\n      })\n      .from(userAgreementsTable)\n      .where(\n        and(\n          eq(userAgreementsTable.userId, u2.userId),\n          eq(userAgreementsTable.tosVersion, version),\n        ),\n      )\n      .limit(1);\n\n    res.json({\n      accepted: rows.length > 0,\n      tosVersion: version,\n      currentVersion: CURRENT_TOS_VERSION,\n      acceptedAt: rows[0]?.acceptedAt?.toISOString() ?? null,\n      profileType: rows[0]?.profileType ?? null,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Legal: failed to check TOS status\");\n    res.status(500).json({ error: \"Failed to check TOS status\" });\n  }\n});\n\nrouter.post(\"/dmca\", async (req: Request, res: Response) => {\n  const ip = getClientIp(req);\n  if (dmcaRateLimited(ip)) {\n    res.status(429).json({ error: \"Too many requests. Try again in an hour.\" });\n    return;\n  }\n\n  const ct = req.headers[\"content-type\"] ?? \"\";\n  if (!ct.includes(\"application/json\")) {\n    res.status(415).json({ error: \"Content-Type must be application/json\" });\n    return;\n  }\n\n  const { claimantName, claimantEmail, contentUrl, description } = (req.body ?? {}) as {\n    claimantName?: string;\n    claimantEmail?: string;\n    contentUrl?: string;\n    description?: string;\n  };\n\n  if (!claimantName?.trim() || !claimantEmail?.trim() || !contentUrl?.trim() || !description?.trim()) {\n    res.status(400).json({ error: \"claimantName, claimantEmail, contentUrl, and description are required\" });\n    return;\n  }\n\n  if (!claimantEmail.includes(\"@\")) {\n    res.status(400).json({ error: \"Invalid email address\" });\n    return;\n  }\n\n  try {\n    new URL(contentUrl.trim());\n  } catch {\n    res.status(400).json({ error: \"contentUrl must be a valid URL\" });\n    return;\n  }\n\n  try {\n    const [row] = await db\n      .insert(dmcaClaimsTable)\n      .values({\n        claimantName: claimantName.trim(),\n        claimantEmail: claimantEmail.trim().toLowerCase(),\n        contentUrl: contentUrl.trim(),\n        description: description.trim(),\n      })\n      .returning({ id: dmcaClaimsTable.id });\n\n    const claimId = row?.id;\n    res.json({ success: true, claimId });\n\n    if (claimId !== undefined) {\n      const emailOpts = {\n        claimId,\n        claimantName: claimantName.trim(),\n        claimantEmail: claimantEmail.trim().toLowerCase(),\n        contentUrl: contentUrl.trim(),\n        description: description.trim(),\n      };\n      Promise.all([\n        sendDmcaClaimantConfirmation(emailOpts),\n        sendDmcaAdminNotification(emailOpts),\n      ]).catch((err) => {\n        req.log?.warn({ err }, \"Legal: DMCA notification emails failed (non-fatal)\");\n      });\n    }\n  } catch (err) {\n    req.log?.error({ err }, \"Legal: failed to store DMCA claim\");\n    res.status(500).json({ error: \"Failed to submit DMCA claim\" });\n  }\n});\n\nexport default router;\n", "// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// POST /api/reports              \u2014 submit a content report (auth-gated)\n// POST /api/reports/appeal       \u2014 submit a content appeal (auth-gated)\n// GET  /api/reports/my-hidden    \u2014 list caller's hidden content (auth-gated)\n// GET  /api/admin/reports        \u2014 grouped report summaries (admin + moderator)\n// PATCH /api/admin/reports/:contentId/restore  \u2014 restore hidden content\n// PATCH /api/admin/reports/:contentId/remove   \u2014 permanently remove content\n// GET  /api/admin/appeals        \u2014 list appeals (admin + moderator)\n// PATCH /api/admin/appeals/:id/approve \u2014 approve appeal & restore content\n// PATCH /api/admin/appeals/:id/reject  \u2014 reject appeal\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nimport { Router, type IRouter, type Request, type Response, type NextFunction } from \"express\";\nimport { getSessionUser, requireModerator as sharedRequireModerator } from \"../lib/authMiddleware\";\nimport { db } from \"@workspace/db\";\nimport {\n  videoReportsTable,\n  contentVisibilityTable,\n  contentAppealsTable,\n  userVideosTable,\n  REPORT_CATEGORIES,\n} from \"@workspace/db/schema\";\nimport { eq, and, gte, count, sql, desc, inArray } from \"drizzle-orm\";\n\nconst router: IRouter = Router();\n\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction requireJsonCt(req: Request, res: Response, next: NextFunction): void {\n  if ([\"POST\", \"PUT\", \"PATCH\"].includes(req.method)) {\n    const ct = req.headers[\"content-type\"] ?? \"\";\n    if (!ct.includes(\"application/json\")) {\n      res.status(415).json({ error: \"Content-Type must be application/json\" });\n      return;\n    }\n  }\n  next();\n}\n\nfunction getClientIp(req: Request): string {\n  const xff = req.headers[\"x-forwarded-for\"];\n  if (xff) {\n    const first = Array.isArray(xff) ? xff[0] : xff.split(\",\")[0];\n    return (first ?? \"\").trim();\n  }\n  return req.socket?.remoteAddress ?? \"unknown\";\n}\n\n// Per-user rate limit: 10 reports per hour\nconst reportRateMap = new Map<string, number[]>();\nconst RATE_LIMIT = 10;\nconst RATE_WINDOW_MS = 3_600_000;\n\nfunction isRateLimited(key: string): boolean {\n  const now = Date.now();\n  const hits = (reportRateMap.get(key) ?? []).filter((t) => now - t < RATE_WINDOW_MS);\n  hits.push(now);\n  reportRateMap.set(key, hits);\n  return hits.length > RATE_LIMIT;\n}\n\n// Per-user appeal rate limit: 5 per hour\nconst appealRateMap = new Map<string, number[]>();\nconst APPEAL_RATE_LIMIT = 5;\n\nfunction isAppealRateLimited(key: string): boolean {\n  const now = Date.now();\n  const hits = (appealRateMap.get(key) ?? []).filter((t) => now - t < RATE_WINDOW_MS);\n  hits.push(now);\n  appealRateMap.set(key, hits);\n  return hits.length > APPEAL_RATE_LIMIT;\n}\n\nconst requireAuth = (req: Request, res: Response, next: NextFunction) => {\n  const u = getSessionUser(req);\n  if (!u?.userId) { res.status(401).json({ error: \"Unauthorized\" }); return; }\n  next();\n};\nconst requireModerator = sharedRequireModerator;\n\n// Auto-hide threshold: 3 unique reporters in 24 hours\nconst AUTO_HIDE_THRESHOLD = 3;\nconst AUTO_HIDE_WINDOW_MS = 86_400_000;\n\nasync function runAutoHideCheck(contentId: string, contentType: string): Promise<void> {\n  const windowStart = new Date(Date.now() - AUTO_HIDE_WINDOW_MS);\n  const rows = await db\n    .select({ reporterId: videoReportsTable.reporterId })\n    .from(videoReportsTable)\n    .where(\n      and(\n        eq(videoReportsTable.contentId, contentId),\n        eq(videoReportsTable.contentType, contentType),\n        gte(videoReportsTable.createdAt, windowStart),\n      ),\n    );\n\n  const uniqueReporters = new Set(rows.map((r) => r.reporterId));\n  if (uniqueReporters.size >= AUTO_HIDE_THRESHOLD) {\n    // Upsert visibility to hidden \u2014 check if row exists first\n    const existing = await db\n      .select({ id: contentVisibilityTable.id })\n      .from(contentVisibilityTable)\n      .where(\n        and(\n          eq(contentVisibilityTable.contentId, contentId),\n          eq(contentVisibilityTable.contentType, contentType),\n        ),\n      )\n      .limit(1);\n\n    if (existing.length > 0) {\n      await db\n        .update(contentVisibilityTable)\n        .set({ visibility: \"hidden\", hiddenAt: new Date(), hiddenReason: \"auto-hide: report threshold exceeded\" })\n        .where(\n          and(\n            eq(contentVisibilityTable.contentId, contentId),\n            eq(contentVisibilityTable.contentType, contentType),\n          ),\n        );\n    } else {\n      await db.insert(contentVisibilityTable).values({\n        contentId,\n        contentType,\n        visibility: \"hidden\",\n        hiddenAt: new Date(),\n        hiddenReason: \"auto-hide: report threshold exceeded\",\n      });\n    }\n  }\n}\n\n// \u2500\u2500 POST /api/reports \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.post(\"/\", requireJsonCt, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Unauthorized\" });\n    return;\n  }\n\n  const rateKey = userId ?? getClientIp(req);\n  if (isRateLimited(rateKey)) {\n    res.status(429).json({ error: \"Too many reports. Try again later.\" });\n    return;\n  }\n\n  const { contentId, contentType = \"video\", category, description } = (req.body ?? {}) as {\n    contentId?: string;\n    contentType?: string;\n    category?: string;\n    description?: string;\n  };\n\n  if (!contentId?.trim()) {\n    res.status(400).json({ error: \"contentId is required\" });\n    return;\n  }\n\n  if (!category || !(REPORT_CATEGORIES as readonly string[]).includes(category)) {\n    res.status(400).json({ error: `category must be one of: ${REPORT_CATEGORIES.join(\", \")}` });\n    return;\n  }\n\n  const validContentTypes = [\"video\", \"comment\"];\n  if (!validContentTypes.includes(contentType)) {\n    res.status(400).json({ error: \"contentType must be video or comment\" });\n    return;\n  }\n\n  try {\n    await db.insert(videoReportsTable).values({\n      contentId: contentId.trim(),\n      contentType,\n      reporterId: userId,\n      category,\n      description: description?.trim() || null,\n    });\n\n    // Run auto-hide check asynchronously (fire-and-forget, don't fail the response)\n    if (contentType === \"video\") {\n      runAutoHideCheck(contentId.trim(), contentType).catch(() => {});\n    }\n\n    res.json({ success: true });\n  } catch (err: any) {\n    // Unique constraint violation = already reported\n    if (err?.code === \"23505\" || String(err).includes(\"uq_reporter_content\")) {\n      res.status(409).json({ error: \"already_reported\", message: \"You have already reported this content\" });\n      return;\n    }\n    req.log?.error({ err }, \"Reports: failed to insert report\");\n    res.status(500).json({ error: \"Failed to submit report\" });\n  }\n});\n\n// \u2500\u2500 POST /api/reports/appeal \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.post(\"/appeal\", requireJsonCt, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Unauthorized\" });\n    return;\n  }\n\n  if (isAppealRateLimited(userId)) {\n    res.status(429).json({ error: \"Too many appeals. Try again later.\" });\n    return;\n  }\n\n  const { contentId, contentType = \"video\", reason } = (req.body ?? {}) as {\n    contentId?: string;\n    contentType?: string;\n    reason?: string;\n  };\n\n  if (!contentId?.trim()) {\n    res.status(400).json({ error: \"contentId is required\" });\n    return;\n  }\n\n  if (!reason?.trim() || reason.trim().length < 10) {\n    res.status(400).json({ error: \"reason must be at least 10 characters\" });\n    return;\n  }\n\n  if (reason.trim().length > 1000) {\n    res.status(400).json({ error: \"reason must be at most 1000 characters\" });\n    return;\n  }\n\n  const validContentTypes = [\"video\", \"comment\"];\n  if (!validContentTypes.includes(contentType)) {\n    res.status(400).json({ error: \"contentType must be video or comment\" });\n    return;\n  }\n\n  const normalizedContentId = contentId.trim();\n\n  // \u2500\u2500 Ownership check: for video content, caller must own it \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  if (contentType === \"video\") {\n    // User videos are stored with IDs in the format \"db-{numericId}\"\n    if (!normalizedContentId.startsWith(\"db-\")) {\n      res.status(403).json({ error: \"Forbidden: you do not own this content\" });\n      return;\n    }\n    const numericId = parseInt(normalizedContentId.slice(3), 10);\n    if (isNaN(numericId)) {\n      res.status(400).json({ error: \"Invalid contentId format\" });\n      return;\n    }\n    const ownerRow = await db\n      .select({ id: userVideosTable.id })\n      .from(userVideosTable)\n      .where(and(eq(userVideosTable.id, numericId), eq(userVideosTable.userId, userId)))\n      .limit(1);\n    if (ownerRow.length === 0) {\n      res.status(403).json({ error: \"Forbidden: you do not own this content\" });\n      return;\n    }\n  }\n\n  // Verify the content is actually hidden before accepting the appeal\n  const visRow = await db\n    .select({ visibility: contentVisibilityTable.visibility })\n    .from(contentVisibilityTable)\n    .where(\n      and(\n        eq(contentVisibilityTable.contentId, normalizedContentId),\n        eq(contentVisibilityTable.contentType, contentType),\n      ),\n    )\n    .limit(1);\n\n  if (visRow.length === 0 || visRow[0]!.visibility === \"visible\") {\n    res.status(400).json({ error: \"Content is not hidden \u2014 no appeal needed\" });\n    return;\n  }\n\n  if (visRow[0]!.visibility === \"removed\") {\n    res.status(400).json({ error: \"Content has been permanently removed and cannot be appealed\" });\n    return;\n  }\n\n  try {\n    const [appeal] = await db.insert(contentAppealsTable).values({\n      contentId: normalizedContentId,\n      contentType,\n      appellantId: userId,\n      reason: reason.trim(),\n    }).returning({ id: contentAppealsTable.id });\n\n    res.json({ success: true, appealId: appeal?.id });\n  } catch (err: any) {\n    if (err?.code === \"23505\" || String(err).includes(\"uq_appellant_content\")) {\n      res.status(409).json({ error: \"already_appealed\", message: \"You have already submitted an appeal for this content\" });\n      return;\n    }\n    req.log?.error({ err }, \"Reports: failed to insert appeal\");\n    res.status(500).json({ error: \"Failed to submit appeal\" });\n  }\n});\n\n// \u2500\u2500 GET /api/reports/my-hidden \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/my-hidden\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n\n  try {\n    // Get this user's video IDs from user_videos table.\n    // Content IDs in content_visibility use the canonical \"db-{numericId}\" format\n    // (same format used by the mobile app when submitting reports).\n    const myVideos = await db\n      .select({ numericId: userVideosTable.id })\n      .from(userVideosTable)\n      .where(eq(userVideosTable.userId, userId));\n\n    const myContentIds = myVideos.map((v) => `db-${v.numericId}`);\n\n    let hiddenContent: Array<{\n      contentId: string;\n      contentType: string;\n      hiddenAt: Date | null;\n      hiddenReason: string | null;\n      appealId: number | null;\n      appealStatus: string | null;\n      appealCreatedAt: Date | null;\n    }> = [];\n\n    if (myContentIds.length > 0) {\n      const visRows = await db\n        .select({\n          contentId: contentVisibilityTable.contentId,\n          contentType: contentVisibilityTable.contentType,\n          hiddenAt: contentVisibilityTable.hiddenAt,\n          hiddenReason: contentVisibilityTable.hiddenReason,\n        })\n        .from(contentVisibilityTable)\n        .where(\n          and(\n            inArray(contentVisibilityTable.contentId, myContentIds),\n            eq(contentVisibilityTable.visibility, \"hidden\"),\n          ),\n        );\n\n      // For each hidden item, check if there's an existing appeal\n      hiddenContent = await Promise.all(\n        visRows.map(async (row) => {\n          const appealRow = await db\n            .select({\n              id: contentAppealsTable.id,\n              status: contentAppealsTable.status,\n              createdAt: contentAppealsTable.createdAt,\n            })\n            .from(contentAppealsTable)\n            .where(\n              and(\n                eq(contentAppealsTable.contentId, row.contentId),\n                eq(contentAppealsTable.contentType, row.contentType),\n                eq(contentAppealsTable.appellantId, userId),\n              ),\n            )\n            .limit(1);\n\n          return {\n            contentId: row.contentId,\n            contentType: row.contentType,\n            hiddenAt: row.hiddenAt,\n            hiddenReason: row.hiddenReason,\n            appealId: appealRow[0]?.id ?? null,\n            appealStatus: appealRow[0]?.status ?? null,\n            appealCreatedAt: appealRow[0]?.createdAt ?? null,\n          };\n        }),\n      );\n    }\n\n    res.json({ items: hiddenContent });\n  } catch (err) {\n    req.log?.error({ err }, \"Reports: failed to load my-hidden\");\n    res.status(500).json({ error: \"Failed to load hidden content\" });\n  }\n});\n\n// \u2500\u2500 GET /api/admin/reports \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/admin\", requireModerator, async (req: Request, res: Response) => {\n  try {\n    const contentTypeFilter = req.query[\"contentType\"] as string | undefined;\n\n    // Aggregate reports grouped by contentId + contentType\n    const groupedQuery = db\n      .select({\n        contentId: videoReportsTable.contentId,\n        contentType: videoReportsTable.contentType,\n        totalReports: count(videoReportsTable.id),\n        firstReportAt: sql<Date>`MIN(${videoReportsTable.createdAt})`,\n      })\n      .from(videoReportsTable)\n      .$dynamic();\n\n    const grouped = contentTypeFilter\n      ? await groupedQuery\n          .where(eq(videoReportsTable.contentType, contentTypeFilter))\n          .groupBy(videoReportsTable.contentId, videoReportsTable.contentType)\n          .orderBy(sql`count(${videoReportsTable.id}) DESC`)\n      : await groupedQuery\n          .groupBy(videoReportsTable.contentId, videoReportsTable.contentType)\n          .orderBy(sql`count(${videoReportsTable.id}) DESC`);\n\n    if (grouped.length === 0) {\n      res.json({ items: [] });\n      return;\n    }\n\n    // For each group, get unique reporters, top category, and visibility status\n    const items = await Promise.all(\n      grouped.map(async (g) => {\n        const [reporters, categories, visRow, appealRow] = await Promise.all([\n          db\n            .selectDistinct({ reporterId: videoReportsTable.reporterId })\n            .from(videoReportsTable)\n            .where(\n              and(\n                eq(videoReportsTable.contentId, g.contentId),\n                eq(videoReportsTable.contentType, g.contentType),\n              ),\n            ),\n          db\n            .select({\n              category: videoReportsTable.category,\n              cnt: count(videoReportsTable.id),\n            })\n            .from(videoReportsTable)\n            .where(\n              and(\n                eq(videoReportsTable.contentId, g.contentId),\n                eq(videoReportsTable.contentType, g.contentType),\n              ),\n            )\n            .groupBy(videoReportsTable.category)\n            .orderBy(sql`count(${videoReportsTable.id}) DESC`)\n            .limit(1),\n          db\n            .select()\n            .from(contentVisibilityTable)\n            .where(\n              and(\n                eq(contentVisibilityTable.contentId, g.contentId),\n                eq(contentVisibilityTable.contentType, g.contentType),\n              ),\n            )\n            .limit(1),\n          db\n            .select({ id: contentAppealsTable.id, status: contentAppealsTable.status })\n            .from(contentAppealsTable)\n            .where(\n              and(\n                eq(contentAppealsTable.contentId, g.contentId),\n                eq(contentAppealsTable.contentType, g.contentType),\n              ),\n            )\n            .limit(1),\n        ]);\n\n        return {\n          contentId: g.contentId,\n          contentType: g.contentType,\n          totalReports: Number(g.totalReports),\n          uniqueReporters: reporters.length,\n          topCategory: categories[0]?.category ?? \"unknown\",\n          firstReportAt: g.firstReportAt,\n          visibility: visRow[0]?.visibility ?? \"visible\",\n          hiddenAt: visRow[0]?.hiddenAt ?? null,\n          hasAppeal: appealRow.length > 0,\n          appealStatus: appealRow[0]?.status ?? null,\n        };\n      }),\n    );\n\n    res.json({ items });\n  } catch (err) {\n    req.log?.error({ err }, \"Reports: failed to load admin reports\");\n    res.status(500).json({ error: \"Failed to load reports\" });\n  }\n});\n\n// \u2500\u2500 PATCH /api/admin/reports/:contentId/restore \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.patch(\"/admin/:contentId/restore\", requireJsonCt, requireModerator, async (req: Request, res: Response) => {\n  const { contentId } = req.params as { contentId: string };\n  const contentType = (req.query[\"contentType\"] as string | undefined) ?? \"video\";\n\n  try {\n    const existing = await db\n      .select({ id: contentVisibilityTable.id })\n      .from(contentVisibilityTable)\n      .where(\n        and(\n          eq(contentVisibilityTable.contentId, contentId),\n          eq(contentVisibilityTable.contentType, contentType),\n        ),\n      )\n      .limit(1);\n\n    if (existing.length > 0) {\n      await db\n        .update(contentVisibilityTable)\n        .set({ visibility: \"visible\", hiddenAt: null, hiddenReason: null })\n        .where(\n          and(\n            eq(contentVisibilityTable.contentId, contentId),\n            eq(contentVisibilityTable.contentType, contentType),\n          ),\n        );\n    } else {\n      await db.insert(contentVisibilityTable).values({\n        contentId,\n        contentType,\n        visibility: \"visible\",\n      });\n    }\n\n    res.json({ success: true, contentId, visibility: \"visible\" });\n  } catch (err) {\n    req.log?.error({ err }, \"Reports: failed to restore content\");\n    res.status(500).json({ error: \"Failed to restore content\" });\n  }\n});\n\n// \u2500\u2500 PATCH /api/admin/reports/:contentId/remove \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.patch(\"/admin/:contentId/remove\", requireJsonCt, requireModerator, async (req: Request, res: Response) => {\n  const { contentId } = req.params as { contentId: string };\n  const contentType = (req.query[\"contentType\"] as string | undefined) ?? \"video\";\n\n  try {\n    const existing = await db\n      .select({ id: contentVisibilityTable.id })\n      .from(contentVisibilityTable)\n      .where(\n        and(\n          eq(contentVisibilityTable.contentId, contentId),\n          eq(contentVisibilityTable.contentType, contentType),\n        ),\n      )\n      .limit(1);\n\n    if (existing.length > 0) {\n      await db\n        .update(contentVisibilityTable)\n        .set({ visibility: \"removed\", hiddenAt: new Date(), hiddenReason: \"admin: permanent removal\" })\n        .where(\n          and(\n            eq(contentVisibilityTable.contentId, contentId),\n            eq(contentVisibilityTable.contentType, contentType),\n          ),\n        );\n    } else {\n      await db.insert(contentVisibilityTable).values({\n        contentId,\n        contentType,\n        visibility: \"removed\",\n        hiddenAt: new Date(),\n        hiddenReason: \"admin: permanent removal\",\n      });\n    }\n\n    res.json({ success: true, contentId, visibility: \"removed\" });\n  } catch (err) {\n    req.log?.error({ err }, \"Reports: failed to remove content\");\n    res.status(500).json({ error: \"Failed to remove content\" });\n  }\n});\n\n// \u2500\u2500 GET /api/admin/appeals \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/admin/appeals\", requireModerator, async (req: Request, res: Response) => {\n  try {\n    const statusFilter = (req.query[\"status\"] as string | undefined) ?? \"pending\";\n\n    const appeals = await db\n      .select()\n      .from(contentAppealsTable)\n      .where(eq(contentAppealsTable.status, statusFilter))\n      .orderBy(desc(contentAppealsTable.createdAt))\n      .limit(100);\n\n    // Enrich with visibility info\n    const items = await Promise.all(\n      appeals.map(async (appeal) => {\n        const visRow = await db\n          .select({ visibility: contentVisibilityTable.visibility })\n          .from(contentVisibilityTable)\n          .where(\n            and(\n              eq(contentVisibilityTable.contentId, appeal.contentId),\n              eq(contentVisibilityTable.contentType, appeal.contentType),\n            ),\n          )\n          .limit(1);\n\n        return {\n          ...appeal,\n          visibility: visRow[0]?.visibility ?? \"visible\",\n        };\n      }),\n    );\n\n    res.json({ items });\n  } catch (err) {\n    req.log?.error({ err }, \"Reports: failed to load appeals\");\n    res.status(500).json({ error: \"Failed to load appeals\" });\n  }\n});\n\n// \u2500\u2500 PATCH /api/admin/appeals/:id/approve \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.patch(\"/admin/appeals/:id/approve\", requireJsonCt, requireModerator, async (req: Request, res: Response) => {\n  const id = parseInt((req.params as { id: string }).id, 10);\n  if (isNaN(id)) {\n    res.status(400).json({ error: \"Invalid appeal ID\" });\n    return;\n  }\n\n  const reviewerId = getSessionUser(req)?.userId ?? \"unknown\";\n\n  try {\n    const appeal = await db\n      .select()\n      .from(contentAppealsTable)\n      .where(eq(contentAppealsTable.id, id))\n      .limit(1);\n\n    if (appeal.length === 0) {\n      res.status(404).json({ error: \"Appeal not found\" });\n      return;\n    }\n\n    const { contentId, contentType } = appeal[0]!;\n\n    // Approve the appeal\n    await db\n      .update(contentAppealsTable)\n      .set({ status: \"approved\", reviewedBy: reviewerId, reviewedAt: new Date() })\n      .where(eq(contentAppealsTable.id, id));\n\n    // Restore the content visibility\n    const existing = await db\n      .select({ id: contentVisibilityTable.id })\n      .from(contentVisibilityTable)\n      .where(\n        and(\n          eq(contentVisibilityTable.contentId, contentId),\n          eq(contentVisibilityTable.contentType, contentType),\n        ),\n      )\n      .limit(1);\n\n    if (existing.length > 0) {\n      await db\n        .update(contentVisibilityTable)\n        .set({ visibility: \"visible\", hiddenAt: null, hiddenReason: null })\n        .where(\n          and(\n            eq(contentVisibilityTable.contentId, contentId),\n            eq(contentVisibilityTable.contentType, contentType),\n          ),\n        );\n    }\n\n    res.json({ success: true, appealId: id, visibility: \"visible\" });\n  } catch (err) {\n    req.log?.error({ err }, \"Reports: failed to approve appeal\");\n    res.status(500).json({ error: \"Failed to approve appeal\" });\n  }\n});\n\n// \u2500\u2500 PATCH /api/admin/appeals/:id/reject \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.patch(\"/admin/appeals/:id/reject\", requireJsonCt, requireModerator, async (req: Request, res: Response) => {\n  const id = parseInt((req.params as { id: string }).id, 10);\n  if (isNaN(id)) {\n    res.status(400).json({ error: \"Invalid appeal ID\" });\n    return;\n  }\n\n  const reviewerId = getSessionUser(req)?.userId ?? \"unknown\";\n\n  try {\n    const updated = await db\n      .update(contentAppealsTable)\n      .set({ status: \"rejected\", reviewedBy: reviewerId, reviewedAt: new Date() })\n      .where(eq(contentAppealsTable.id, id))\n      .returning({ id: contentAppealsTable.id });\n\n    if (updated.length === 0) {\n      res.status(404).json({ error: \"Appeal not found\" });\n      return;\n    }\n\n    res.json({ success: true, appealId: id });\n  } catch (err) {\n    req.log?.error({ err }, \"Reports: failed to reject appeal\");\n    res.status(500).json({ error: \"Failed to reject appeal\" });\n  }\n});\n\nexport { requireModerator as requireModeratorFromReports };\nexport default router;\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { matchSpeciesInText } from \"../lib/speciesHeuristics\";\n\nconst router: IRouter = Router();\n\nconst US_STATES = [\n  \"Alabama\",\"Alaska\",\"Arizona\",\"Arkansas\",\"California\",\"Colorado\",\"Connecticut\",\n  \"Delaware\",\"Florida\",\"Georgia\",\"Hawaii\",\"Idaho\",\"Illinois\",\"Indiana\",\"Iowa\",\n  \"Kansas\",\"Kentucky\",\"Louisiana\",\"Maine\",\"Maryland\",\"Massachusetts\",\"Michigan\",\n  \"Minnesota\",\"Mississippi\",\"Missouri\",\"Montana\",\"Nebraska\",\"Nevada\",\n  \"New Hampshire\",\"New Jersey\",\"New Mexico\",\"New York\",\"North Carolina\",\n  \"North Dakota\",\"Ohio\",\"Oklahoma\",\"Oregon\",\"Pennsylvania\",\"Rhode Island\",\n  \"South Carolina\",\"South Dakota\",\"Tennessee\",\"Texas\",\"Utah\",\"Vermont\",\n  \"Virginia\",\"Washington\",\"West Virginia\",\"Wisconsin\",\"Wyoming\",\n];\n\nconst CA_PROVINCES = [\n  \"Alberta\",\"British Columbia\",\"Manitoba\",\"New Brunswick\",\n  \"Newfoundland\",\"Nova Scotia\",\"Ontario\",\"Prince Edward Island\",\n  \"Quebec\",\"Saskatchewan\",\"Northwest Territories\",\"Nunavut\",\"Yukon\",\n];\n\ntype VideoPlatform =\n  | \"youtube\" | \"tiktok\" | \"instagram\" | \"facebook\"\n  | \"twitter\" | \"rumble\" | \"dailymotion\" | \"odysee\" | \"vimeo\" | \"unknown\";\n\ninterface ParsedUrl {\n  platform: VideoPlatform;\n  videoId: string | null;\n  canonicalUrl: string;\n}\n\nfunction parseVideoUrl(raw: string): ParsedUrl {\n  const url = raw.trim();\n\n  // YouTube\n  const ytId =\n    url.match(/youtube\\.com\\/shorts\\/([a-zA-Z0-9_-]{11})/)?.[1] ??\n    url.match(/youtu\\.be\\/([a-zA-Z0-9_-]{11})/)?.[1] ??\n    url.match(/youtube\\.com\\/watch\\?(?:.*&)?v=([a-zA-Z0-9_-]{11})/)?.[1] ??\n    url.match(/youtube(?:-nocookie)?\\.com\\/embed\\/([a-zA-Z0-9_-]{11})/)?.[1] ??\n    null;\n  if (ytId) return { platform: \"youtube\", videoId: ytId, canonicalUrl: `https://www.youtube.com/watch?v=${ytId}` };\n\n  // TikTok\n  const tiktokId =\n    url.match(/tiktok\\.com\\/@[^/]+\\/video\\/(\\d+)/)?.[1] ??\n    url.match(/vm\\.tiktok\\.com\\/([A-Za-z0-9]+)/)?.[1] ??\n    null;\n  if (tiktokId) return { platform: \"tiktok\", videoId: tiktokId, canonicalUrl: url };\n\n  // Instagram\n  const igCode =\n    url.match(/instagram\\.com\\/reel(?:s)?\\/([A-Za-z0-9_-]+)/)?.[1] ??\n    url.match(/instagram\\.com\\/p\\/([A-Za-z0-9_-]+)/)?.[1] ??\n    url.match(/instagram\\.com\\/tv\\/([A-Za-z0-9_-]+)/)?.[1] ??\n    null;\n  if (igCode) return { platform: \"instagram\", videoId: igCode, canonicalUrl: url };\n\n  // Facebook (incl. Reels, share/r/, share/v/, watch, /videos/, fb.watch, m./web.facebook.com)\n  const fbReelId = url.match(/facebook\\.com\\/reel\\/?(\\d+)/)?.[1] ?? null;\n  const fbVideoId =\n    url.match(/facebook\\.com\\/watch\\/?[?&]v=(\\d+)/)?.[1] ??\n    url.match(/facebook\\.com\\/(?:[^/]+\\/)?videos\\/(?:[^/]+\\/)?(\\d+)/)?.[1] ??\n    url.match(/fb\\.watch\\/([A-Za-z0-9_-]+)/)?.[1] ??\n    url.match(/facebook\\.com\\/share\\/[rv]\\/([A-Za-z0-9_-]+)/)?.[1] ??\n    null;\n  const fbId = fbReelId ?? fbVideoId;\n  if (\n    fbId ||\n    /facebook\\.com\\/(?:reel|share\\/[rv])\\//.test(url) ||\n    /facebook\\.com\\/.*\\/videos\\//.test(url) ||\n    /fb\\.watch\\//.test(url)\n  ) {\n    const canonical = fbReelId\n      ? `https://www.facebook.com/reel/${fbReelId}`\n      : fbVideoId && /watch\\/?[?&]v=/.test(url)\n        ? `https://www.facebook.com/watch?v=${fbVideoId}`\n        : url;\n    return { platform: \"facebook\", videoId: fbId, canonicalUrl: canonical };\n  }\n\n  // Twitter / X\n  const tweetId = url.match(/(?:twitter|x)\\.com\\/[^/]+\\/status\\/(\\d+)/)?.[1] ?? null;\n  if (tweetId) return { platform: \"twitter\", videoId: tweetId, canonicalUrl: url };\n\n  // Rumble\n  const rumbleId =\n    url.match(/rumble\\.com\\/embed\\/([A-Za-z0-9-]+)/)?.[1] ??\n    url.match(/rumble\\.com\\/(v[A-Za-z0-9]+-[^./#?]+)/)?.[1] ??\n    null;\n  if (rumbleId) return { platform: \"rumble\", videoId: rumbleId, canonicalUrl: url };\n\n  // Dailymotion\n  const dmId =\n    url.match(/dailymotion\\.com\\/video\\/([a-zA-Z0-9]+)/)?.[1] ??\n    url.match(/dai\\.ly\\/([a-zA-Z0-9]+)/)?.[1] ??\n    null;\n  if (dmId) return { platform: \"dailymotion\", videoId: dmId, canonicalUrl: `https://www.dailymotion.com/video/${dmId}` };\n\n  // Odysee\n  const odyseeSlug = url.match(/odysee\\.com\\/@[^/]+\\/([^?#]+)/)?.[1] ?? null;\n  if (odyseeSlug) return { platform: \"odysee\", videoId: odyseeSlug, canonicalUrl: url };\n\n  // Vimeo\n  const vimeoId = url.match(/vimeo\\.com\\/(\\d+)/)?.[1] ?? null;\n  if (vimeoId) return { platform: \"vimeo\", videoId: vimeoId, canonicalUrl: `https://vimeo.com/${vimeoId}` };\n\n  return { platform: \"unknown\", videoId: null, canonicalUrl: url };\n}\n\n// SSRF allowlist \u2014 only user-supplied URLs are validated against this\nconst ALLOWED_HOSTS = new Set([\n  // YouTube\n  \"youtube.com\", \"www.youtube.com\", \"m.youtube.com\", \"youtu.be\", \"www.youtu.be\",\n  \"youtube-nocookie.com\", \"www.youtube-nocookie.com\",\n  // TikTok\n  \"tiktok.com\", \"www.tiktok.com\", \"vm.tiktok.com\",\n  // Instagram\n  \"instagram.com\", \"www.instagram.com\",\n  // Facebook\n  \"facebook.com\", \"www.facebook.com\", \"m.facebook.com\", \"web.facebook.com\",\n  \"mbasic.facebook.com\", \"fb.watch\",\n  // Twitter / X\n  \"twitter.com\", \"www.twitter.com\", \"mobile.twitter.com\", \"x.com\", \"www.x.com\",\n  // Rumble\n  \"rumble.com\", \"www.rumble.com\",\n  // Dailymotion\n  \"dailymotion.com\", \"www.dailymotion.com\", \"dai.ly\",\n  // Odysee / LBRY\n  \"odysee.com\", \"www.odysee.com\",\n  // Vimeo\n  \"vimeo.com\", \"www.vimeo.com\", \"player.vimeo.com\",\n]);\n\nfunction isAllowedUrl(rawUrl: string): boolean {\n  try {\n    const u = new URL(rawUrl);\n    if (u.protocol !== \"https:\" && u.protocol !== \"http:\") return false;\n    return ALLOWED_HOSTS.has(u.hostname.toLowerCase());\n  } catch {\n    return false;\n  }\n}\n\ninterface OembedData {\n  title?: string;\n  author_name?: string;\n  author_url?: string;\n  thumbnail_url?: string;\n  description?: string;\n  html?: string;\n}\n\nasync function fetchWithTimeout(\n  url: string,\n  ms: number,\n  init: RequestInit = {},\n): Promise<globalThis.Response> {\n  const controller = new AbortController();\n  const timer = setTimeout(() => controller.abort(), ms);\n  try {\n    return await globalThis.fetch(url, {\n      ...init,\n      signal: controller.signal,\n      redirect: \"manual\",\n      headers: {\n        \"User-Agent\": \"Mozilla/5.0 (compatible; HookNBone/1.0; +https://hooknbone.app)\",\n        Accept: \"application/json, text/html, */*\",\n        ...(init.headers ?? {}),\n      },\n    });\n  } finally {\n    clearTimeout(timer);\n  }\n}\n\nconst MAX_REDIRECTS = 4;\nconst MAX_BODY_BYTES = 1_000_000;\n\nasync function fetchAllowedFollowingRedirects(\n  startUrl: string,\n  ms: number,\n  headers: Record<string, string> = {},\n): Promise<globalThis.Response | null> {\n  let current = startUrl;\n  for (let hop = 0; hop <= MAX_REDIRECTS; hop++) {\n    if (!isAllowedUrl(current)) return null;\n    const res = await fetchWithTimeout(current, ms, { headers });\n    if (res.status >= 300 && res.status < 400) {\n      const loc = res.headers.get(\"location\");\n      if (!loc) return res;\n      current = new URL(loc, current).toString();\n      continue;\n    }\n    return res;\n  }\n  return null;\n}\n\n// Internal fetch \u2014 our hardcoded oEmbed endpoints, no SSRF risk\nasync function fetchDirect(url: string, ms: number): Promise<globalThis.Response | null> {\n  try {\n    return await fetchWithTimeout(url, ms);\n  } catch {\n    return null;\n  }\n}\n\nasync function readBoundedText(\n  res: globalThis.Response,\n  maxBytes: number,\n): Promise<string | null> {\n  const reader = res.body?.getReader();\n  if (!reader) {\n    const txt = await res.text();\n    return txt.length > maxBytes ? txt.slice(0, maxBytes) : txt;\n  }\n  const decoder = new TextDecoder(\"utf-8\", { fatal: false });\n  let collected = \"\";\n  let received = 0;\n  try {\n    for (;;) {\n      const { value, done } = await reader.read();\n      if (done) break;\n      received += value.byteLength;\n      if (received > maxBytes) {\n        collected += decoder.decode(\n          value.subarray(0, Math.max(0, value.byteLength - (received - maxBytes))),\n          { stream: false },\n        );\n        try { await reader.cancel(); } catch { /* noop */ }\n        break;\n      }\n      collected += decoder.decode(value, { stream: true });\n    }\n  } finally {\n    try { reader.releaseLock(); } catch { /* noop */ }\n  }\n  return collected;\n}\n\nasync function fetchOembed(parsed: ParsedUrl): Promise<OembedData | null> {\n  const encodedUrl = encodeURIComponent(parsed.canonicalUrl);\n  let endpoint: string | null = null;\n\n  switch (parsed.platform) {\n    case \"youtube\":\n      endpoint = `https://www.youtube.com/oembed?url=${encodedUrl}&format=json`;\n      break;\n    case \"vimeo\":\n      endpoint = `https://vimeo.com/api/oembed.json?url=${encodedUrl}`;\n      break;\n    case \"tiktok\":\n      endpoint = `https://www.tiktok.com/oembed?url=${encodedUrl}`;\n      break;\n    case \"twitter\":\n      endpoint = `https://publish.twitter.com/oembed?url=${encodedUrl}&theme=dark&omit_script=true`;\n      break;\n    case \"rumble\":\n      endpoint = `https://rumble.com/api/Media/oembed.json?url=${encodedUrl}`;\n      break;\n    case \"dailymotion\":\n      endpoint = `https://www.dailymotion.com/services/oembed?url=${encodedUrl}&format=json`;\n      break;\n    case \"facebook\":\n      // Facebook's PUBLIC plugin oEmbed endpoint works without an app token\n      // for publicly-shared videos and reels. (The /v18.0/oembed_video Graph\n      // endpoint requires an app token; the /plugins/video/oembed.json one\n      // does not \u2014 it's the same endpoint Facebook embed buttons use.)\n      endpoint = `https://www.facebook.com/plugins/video/oembed.json/?url=${encodedUrl}`;\n      break;\n    // Instagram requires OAuth \u2014 handled via mobile-UA OG scrape below\n    default:\n      return null;\n  }\n\n  try {\n    const res = await fetchDirect(endpoint, 5000);\n    if (!res || res.status >= 300) return null;\n    const text = await readBoundedText(res, 200_000);\n    if (!text) return null;\n    return JSON.parse(text) as OembedData;\n  } catch {\n    return null;\n  }\n}\n\ninterface MetaTags {\n  title?: string;\n  description?: string;\n  image?: string;\n  siteName?: string;\n  author?: string;\n  videoUrl?: string;\n  keywords?: string;\n}\n\nfunction decodeHtmlEntities(str: string): string {\n  return str\n    .replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\")\n    .replace(/&quot;/g, '\"').replace(/&#39;/g, \"'\").replace(/&#x27;/g, \"'\")\n    .replace(/&nbsp;/g, \" \")\n    .replace(/&#(\\d+);/g, (_, n) => String.fromCharCode(parseInt(n, 10)))\n    .replace(/&#x([0-9a-f]+);/gi, (_, n) => String.fromCharCode(parseInt(n, 16)));\n}\n\nfunction extractMeta(html: string, names: string[]): string | undefined {\n  for (const name of names) {\n    const esc = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n    const m =\n      html.match(new RegExp(`<meta[^>]+(?:property|name)\\\\s*=\\\\s*[\"']${esc}[\"'][^>]*content\\\\s*=\\\\s*[\"']([^\"']*)[\"']`, \"i\")) ??\n      html.match(new RegExp(`<meta[^>]+content\\\\s*=\\\\s*[\"']([^\"']*)[\"'][^>]*(?:property|name)\\\\s*=\\\\s*[\"']${esc}[\"']`, \"i\"));\n    if (m?.[1]) return decodeHtmlEntities(m[1]);\n  }\n  return undefined;\n}\n\nasync function fetchMetaTags(\n  url: string,\n  opts: { mobileUa?: boolean } = {},\n): Promise<MetaTags | null> {\n  try {\n    const headers: Record<string, string> = {};\n    if (opts.mobileUa) {\n      // Instagram and some FB pages serve usable OG meta only to mobile UAs;\n      // the desktop UA gets a login wall.\n      headers[\"User-Agent\"] =\n        \"Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 \" +\n        \"(KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1\";\n      headers[\"Accept-Language\"] = \"en-US,en;q=0.9\";\n    }\n    const res = await fetchAllowedFollowingRedirects(url, 6000, headers);\n    if (!res || !res.ok) return null;\n    const ct = res.headers.get(\"content-type\") ?? \"\";\n    if (!ct.includes(\"text/html\") && !ct.includes(\"application/xhtml\")) return null;\n    const html = await readBoundedText(res, MAX_BODY_BYTES);\n    if (!html) return null;\n    const titleTag = html.match(/<title[^>]*>([\\s\\S]*?)<\\/title>/i)?.[1];\n    return {\n      title:\n        extractMeta(html, [\"og:title\", \"twitter:title\"]) ??\n        (titleTag ? decodeHtmlEntities(titleTag.trim()) : undefined),\n      description: extractMeta(html, [\n        \"og:description\", \"twitter:description\", \"description\",\n      ]),\n      image: extractMeta(html, [\"og:image\", \"twitter:image\", \"twitter:image:src\"]),\n      siteName: extractMeta(html, [\"og:site_name\", \"application-name\"]),\n      author: extractMeta(html, [\"author\", \"article:author\", \"dc.creator\"]),\n      videoUrl: extractMeta(html, [\n        \"og:video:secure_url\", \"og:video:url\", \"og:video\",\n        \"twitter:player\", \"twitter:player:stream\",\n      ]),\n      keywords: extractMeta(html, [\"keywords\", \"og:video:tag\"]),\n    };\n  } catch {\n    return null;\n  }\n}\n\ninterface HeuristicResult {\n  species?: string;\n  weight?: string;\n  state?: string;\n  country?: string;\n}\n\nfunction runHeuristics(text: string): HeuristicResult {\n  const result: HeuristicResult = {};\n\n  const speciesMatch = matchSpeciesInText(text);\n  if (speciesMatch) result.species = speciesMatch.species;\n\n  const weightMatch = text.match(/(\\d{1,4}(?:\\.\\d{1,2})?)\\s?(?:lbs?|pounds?)\\b/i);\n  if (weightMatch) {\n    result.weight = `${weightMatch[1]} lbs`;\n  } else {\n    const kgMatch = text.match(/(\\d{1,4}(?:\\.\\d{1,2})?)\\s?(?:kg|kilos?)\\b/i);\n    if (kgMatch) result.weight = `${kgMatch[1]} kg`;\n    else {\n      const inchMatch = text.match(/(\\d{1,3}(?:\\.\\d{1,2})?)\\s?(?:inch(?:es)?|in|\")\\b/i);\n      if (inchMatch) result.weight = `${inchMatch[1]} inch`;\n    }\n  }\n\n  for (const st of US_STATES) {\n    if (new RegExp(`\\\\b${st}\\\\b`, \"i\").test(text)) {\n      result.state = st;\n      result.country = \"United States\";\n      break;\n    }\n  }\n\n  if (!result.country) {\n    for (const prov of CA_PROVINCES) {\n      if (new RegExp(`\\\\b${prov}\\\\b`, \"i\").test(text)) {\n        result.state = prov;\n        result.country = \"Canada\";\n        break;\n      }\n    }\n  }\n\n  if (!result.country) {\n    if (/\\bcanada\\b/i.test(text)) result.country = \"Canada\";\n    else if (/\\bmexico\\b/i.test(text)) result.country = \"Mexico\";\n    else if (/\\bnew zealand\\b/i.test(text)) result.country = \"New Zealand\";\n    else if (/\\baustralia\\b/i.test(text)) result.country = \"Australia\";\n    else if (/\\bsouth africa\\b/i.test(text)) result.country = \"South Africa\";\n    else if (/\\bargentina\\b/i.test(text)) result.country = \"Argentina\";\n    else if (/\\bscotland\\b|\\bwales\\b|\\bengland\\b|\\bireland\\b/i.test(text)) result.country = \"United Kingdom\";\n  }\n\n  return result;\n}\n\nfunction cleanTitle(raw: string): string {\n  return raw\n    .replace(/\\s*[-|\u00B7\u2014]\\s*YouTube\\s*$/i, \"\")\n    .replace(/\\s*on Vimeo\\s*$/i, \"\")\n    .replace(/\\s*\\|\\s*TikTok\\s*$/i, \"\")\n    .replace(/\\s*[-|]\\s*Instagram\\s*$/i, \"\")\n    .replace(/\\s*\\|\\s*Facebook\\s*$/i, \"\")\n    .replace(/\\s*[-|]\\s*Twitter\\s*$/i, \"\")\n    .replace(/\\s*[-|\u00B7]\\s*Rumble\\s*$/i, \"\")\n    .replace(/\\s*[-|\u00B7]\\s*Odysee\\s*$/i, \"\")\n    .replace(/\\s*[-|\u00B7]\\s*Dailymotion\\s*$/i, \"\")\n    .replace(/\\s+/g, \" \")\n    .trim();\n}\n\nrouter.post(\"/\", async (req: Request, res: Response) => {\n  const rawUrl = typeof req.body?.url === \"string\" ? req.body.url.trim() : \"\";\n  if (!rawUrl) {\n    res.status(400).json({ error: \"url is required\" });\n    return;\n  }\n\n  const parsed = parseVideoUrl(rawUrl);\n  if (parsed.platform === \"unknown\") {\n    res.status(400).json({\n      error:\n        \"Unsupported video URL \u2014 try YouTube, TikTok, Instagram, Facebook, Twitter/X, Rumble, Dailymotion, Odysee, or Vimeo\",\n    });\n    return;\n  }\n  if (!isAllowedUrl(parsed.canonicalUrl) && !isAllowedUrl(rawUrl)) {\n    res.status(400).json({ error: \"URL host not allowed\" });\n    return;\n  }\n\n  // Facebook and Instagram return a login wall to desktop user-agents. For\n  // those two platforms we use a mobile UA so the OG meta is rendered into\n  // the public page. For Facebook we ALSO try the public plugin oEmbed\n  // endpoint inside fetchOembed() \u2014 if either succeeds we have a real preview.\n  const useMobileUa =\n    parsed.platform === \"facebook\" || parsed.platform === \"instagram\";\n\n  const [oembed, meta] = await Promise.all([\n    fetchOembed(parsed),\n    fetchMetaTags(parsed.canonicalUrl, { mobileUa: useMobileUa }).catch(() => null),\n  ]);\n\n  // Merge best available metadata\n  const rawTitle = oembed?.title ?? meta?.title ?? \"\";\n  const title = cleanTitle(rawTitle);\n  const description =\n    oembed?.description ??\n    meta?.description ??\n    (meta?.keywords ? `Tags: ${meta.keywords}` : \"\");\n  const creator =\n    oembed?.author_name ??\n    meta?.author ??\n    (meta?.siteName && parsed.platform !== \"youtube\" ? meta.siteName : \"\") ??\n    \"\";\n  const thumbnailUrl = oembed?.thumbnail_url ?? meta?.image ?? null;\n\n  let creatorHandle = \"\";\n  if (oembed?.author_url) {\n    const m = oembed.author_url.match(/[/@]([A-Za-z0-9_.-]{2,40})\\/?$/);\n    if (m?.[1]) creatorHandle = `@${m[1]}`;\n  }\n  if (!creatorHandle && creator) {\n    creatorHandle = `@${creator.toLowerCase().replace(/\\s+/g, \"_\").replace(/[^a-z0-9_]/g, \"\").slice(0, 30)}`;\n  }\n\n  // Run heuristics across title + description + keywords\n  const heuristicSource = [title, description, meta?.keywords ?? \"\"].filter(Boolean).join(\" \");\n  const heuristics = runHeuristics(heuristicSource);\n\n  res.json({\n    platform: parsed.platform,\n    videoId: parsed.videoId,\n    canonicalUrl: parsed.canonicalUrl,\n    title,\n    description,\n    creator,\n    creatorHandle,\n    thumbnailUrl,\n    suggested: {\n      species: heuristics.species ?? null,\n      weight: heuristics.weight ?? null,\n      state: heuristics.state ?? null,\n      country: heuristics.country ?? null,\n    },\n    sources: {\n      oembed: oembed !== null,\n      metaTags: meta !== null,\n    },\n  });\n});\n\nexport default router;\n", "// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// /api/video-render \u2014 job-based video baking with SSE progress streaming.\n//\n// POST   /api/video-render          \u2014 start job, returns { jobId }\n// GET    /api/video-render/:id/progress  \u2014 SSE stream (progress/stage/done/error)\n// GET    /api/video-render/:id/download  \u2014 serve completed MP4\n// DELETE /api/video-render/:id      \u2014 cancel in-flight job\n//\n// Request (POST) \u2014 either:\n//   A) multipart/form-data with `video` (file) + `manifest` (JSON string), or\n//   B) application/json `{ sourceVideoUrl, manifest }` where\n//      sourceVideoUrl is a public https video the server pulls (SSRF-safe).\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nimport { Router, type IRouter, type Request, type Response } from \"express\";\nimport { getSessionUser } from \"../lib/authMiddleware\";\nimport { ipKeyGenerator } from \"express-rate-limit\";\nimport multer from \"multer\";\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { mkdtemp, rm, stat, readFile, writeFile } from \"node:fs/promises\";\nimport { createReadStream } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { randomUUID } from \"node:crypto\";\nimport path from \"node:path\";\nimport dns from \"node:dns/promises\";\nimport net from \"node:net\";\nimport { db, userExportsTable } from \"@workspace/db\";\nimport { exportStorage } from \"../lib/exportStorage\";\n\nconst router: IRouter = Router();\n\nconst MAX_VIDEO_BYTES = 500 * 1024 * 1024;\nconst MAX_MUSIC_BYTES = 25 * 1024 * 1024;\nconst MAX_TRIM_SECONDS = 600;\nconst RENDER_TIMEOUT_MS = 5 * 60 * 1000;\nconst JOB_TTL_MS = 15 * 60 * 1000; // clean up completed jobs after 15 min\n\nconst upload = multer({\n  storage: multer.memoryStorage(),\n  limits: { fileSize: MAX_VIDEO_BYTES, files: 1, fields: 4 },\n  fileFilter: (_req, file, cb) => {\n    if (file.fieldname !== \"video\") return cb(new Error(\"Unexpected field\"));\n    if (!/^video\\//.test(file.mimetype)) return cb(new Error(\"Not a video\"));\n    cb(null, true);\n  },\n});\n\nconst MUSIC_HOSTS = new Set([\n  \"prod-1.storage.jamendo.com\",\n  \"mp3l.jamendo.com\",\n  \"mp3d.jamendo.com\",\n  \"storage-new.newjamendo.com\",\n  \"cdn.pixabay.com\",\n]);\n\ninterface MusicTrack {\n  id: string;\n  title: string;\n  artist: string;\n  durationSec: number;\n  artworkUrl: string | null;\n  previewUrl: string;\n  source: \"jamendo\" | \"fallback\";\n  license?: string;\n}\n\ninterface EditManifest {\n  format: \"hook\" | \"shot\" | \"video\";\n  trimInSec: number;\n  trimOutSec: number | null;\n  cropOffsetX: number;\n  cropOffsetY: number;\n  cropScale: number;\n  audioTrack: MusicTrack | null;\n  audioVolume: number;\n  originalVolume: number;\n}\n\nconst TARGET_DIMS: Record<EditManifest[\"format\"], { w: number; h: number }> = {\n  hook:  { w: 720, h: 1280 },\n  shot:  { w: 720, h: 1280 },\n  video: { w: 1280, h: 720 },\n};\n\n// \u2500\u2500\u2500 Job registry \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ntype JobStatus = \"pending\" | \"downloading\" | \"encoding\" | \"done\" | \"error\" | \"cancelled\";\n\ninterface SseEvent {\n  type: \"stage\" | \"progress\" | \"done\" | \"error\";\n  message?: string;\n  percent?: number;\n  elapsed?: number;\n}\n\ninterface Job {\n  status: JobStatus;\n  percent: number;\n  stage: string;\n  error?: string;\n  outPath?: string;\n  workDir: string;\n  ffmpegChild?: ChildProcess;\n  clients: Set<Response>;\n  startedAt: number;\n  /** Total output clip duration in seconds (used to compute percent) */\n  durationSec: number;\n  format: string;\n  cleanupTimer?: ReturnType<typeof setTimeout>;\n  /**\n   * Identity of the job creator \u2014 `user:<userId>` for authenticated\n   * requests or `ip:<address>` for anonymous ones. The download endpoint\n   * enforces that only the creator can retrieve the finished clip.\n   */\n  creatorId: string;\n}\n\nconst jobs = new Map<string, Job>();\n\n/**\n * Derive a stable identity string for the current request.\n * Authenticated users are identified by their userId so they can switch\n * IPs (e.g. mobile roaming) and still download their own clips.\n * Unauthenticated callers fall back to their IP address.\n */\nfunction requestCreatorId(req: Request): string {\n  const userId = getSessionUser(req)?.userId;\n  if (userId) return `user:${userId}`;\n  return `ip:${ipKeyGenerator(req.ip ?? \"unknown\")}`;\n}\n\nfunction scheduleCleanup(jobId: string) {\n  const job = jobs.get(jobId);\n  if (!job) return;\n  if (job.cleanupTimer) clearTimeout(job.cleanupTimer);\n  job.cleanupTimer = setTimeout(() => {\n    const j = jobs.get(jobId);\n    if (j) void rm(j.workDir, { recursive: true, force: true }).catch(() => {});\n    jobs.delete(jobId);\n  }, JOB_TTL_MS);\n}\n\nfunction emitToClients(job: Job, event: SseEvent) {\n  const data = `data: ${JSON.stringify(event)}\\n\\n`;\n  for (const client of job.clients) {\n    try { client.write(data); } catch { /* client gone */ }\n  }\n}\n\nfunction setJobStage(job: Job, stage: string) {\n  job.stage = stage;\n  const elapsed = Math.floor((Date.now() - job.startedAt) / 1000);\n  emitToClients(job, { type: \"stage\", message: stage, elapsed });\n}\n\nfunction setJobProgress(job: Job, percent: number) {\n  job.percent = percent;\n  const elapsed = Math.floor((Date.now() - job.startedAt) / 1000);\n  emitToClients(job, { type: \"progress\", percent, elapsed });\n}\n\nfunction finishJob(job: Job, outPath: string) {\n  job.status = \"done\";\n  job.outPath = outPath;\n  job.percent = 100;\n  const elapsed = Math.floor((Date.now() - job.startedAt) / 1000);\n  emitToClients(job, { type: \"done\", elapsed, percent: 100 });\n  for (const client of job.clients) {\n    try { client.end(); } catch { /* noop */ }\n  }\n  job.clients.clear();\n}\n\nfunction failJob(job: Job, message: string) {\n  job.status = \"error\";\n  job.error = message;\n  emitToClients(job, { type: \"error\", message });\n  for (const client of job.clients) {\n    try { client.end(); } catch { /* noop */ }\n  }\n  job.clients.clear();\n}\n\n// \u2500\u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction clamp(n: number, lo: number, hi: number): number {\n  if (!Number.isFinite(n)) return lo;\n  return Math.min(hi, Math.max(lo, n));\n}\n\nfunction parseManifest(raw: unknown): EditManifest | { error: string } {\n  if (typeof raw !== \"string\") return { error: \"manifest field is required\" };\n  let parsed: unknown;\n  try { parsed = JSON.parse(raw); } catch { return { error: \"manifest is not valid JSON\" }; }\n  if (!parsed || typeof parsed !== \"object\") return { error: \"manifest must be an object\" };\n  const m = parsed as Record<string, unknown>;\n  const format = m.format;\n  if (format !== \"hook\" && format !== \"shot\" && format !== \"video\") {\n    return { error: \"manifest.format must be hook|shot|video\" };\n  }\n  const trimInSec = clamp(Number(m.trimInSec ?? 0), 0, MAX_TRIM_SECONDS);\n  const trimOutRaw = m.trimOutSec;\n  const trimOutSec =\n    trimOutRaw == null ? null : clamp(Number(trimOutRaw), trimInSec + 0.1, MAX_TRIM_SECONDS);\n  const cropOffsetX = clamp(Number(m.cropOffsetX ?? 0), -1, 1);\n  const cropOffsetY = clamp(Number(m.cropOffsetY ?? 0), -1, 1);\n  const cropScale   = clamp(Number(m.cropScale ?? 1), 1, 4);\n  const audioVolume    = clamp(Number(m.audioVolume ?? 0.7), 0, 2);\n  const originalVolume = clamp(Number(m.originalVolume ?? 1), 0, 2);\n\n  let audioTrack: MusicTrack | null = null;\n  if (m.audioTrack && typeof m.audioTrack === \"object\") {\n    const t = m.audioTrack as Record<string, unknown>;\n    const previewUrl = typeof t.previewUrl === \"string\" ? t.previewUrl : \"\";\n    if (previewUrl) {\n      try {\n        const u = new URL(previewUrl);\n        if (u.protocol !== \"https:\" && u.protocol !== \"http:\") {\n          return { error: \"audioTrack.previewUrl protocol not allowed\" };\n        }\n        if (!MUSIC_HOSTS.has(u.hostname.toLowerCase())) {\n          return { error: `audioTrack.previewUrl host not allowed: ${u.hostname}` };\n        }\n      } catch {\n        return { error: \"audioTrack.previewUrl is invalid\" };\n      }\n      audioTrack = {\n        id: String(t.id ?? \"\"),\n        title: String(t.title ?? \"Track\"),\n        artist: String(t.artist ?? \"\"),\n        durationSec: Number(t.durationSec ?? 0),\n        artworkUrl: typeof t.artworkUrl === \"string\" ? t.artworkUrl : null,\n        previewUrl,\n        source: t.source === \"jamendo\" ? \"jamendo\" : \"fallback\",\n        license: typeof t.license === \"string\" ? t.license : undefined,\n      };\n    }\n  }\n\n  return {\n    format, trimInSec, trimOutSec,\n    cropOffsetX, cropOffsetY, cropScale,\n    audioTrack, audioVolume, originalVolume,\n  };\n}\n\nfunction buildVideoFilter(m: EditManifest): string {\n  const { w, h } = TARGET_DIMS[m.format];\n  const S = m.cropScale;\n  const tw = w, th = h;\n  const cx = `(iw-${tw})/2-(${m.cropOffsetX.toFixed(4)})*${tw}`;\n  const cy = `(ih-${th})/2-(${m.cropOffsetY.toFixed(4)})*${th}`;\n  const targetAspect = tw / th;\n  return [\n    `scale=w='if(gt(iw/ih,${targetAspect.toFixed(6)}),-2,${tw}*${S})':` +\n      `h='if(gt(iw/ih,${targetAspect.toFixed(6)}),${th}*${S},-2)'`,\n    `crop=${tw}:${th}:${cx}:${cy}`,\n    `setsar=1`,\n  ].join(\",\");\n}\n\nfunction isPrivateIp(ip: string): boolean {\n  if (net.isIPv6(ip)) {\n    const lower = ip.toLowerCase().replace(/^::ffff:/, \"\");\n    if (net.isIPv4(lower)) return isPrivateIp(lower);\n    return (\n      lower === \"::1\" || lower === \"::\" || lower === \"0:0:0:0:0:0:0:1\" ||\n      lower.startsWith(\"fe80:\") || lower.startsWith(\"fc\") ||\n      lower.startsWith(\"fd\") || lower.startsWith(\"ff\")\n    );\n  }\n  if (!net.isIPv4(ip)) return true;\n  const parts = ip.split(\".\").map(Number);\n  if (parts.length !== 4 || parts.some((p) => isNaN(p) || p < 0 || p > 255)) return true;\n  const [a, b] = parts;\n  return (\n    a === 0 || a === 10 || a === 127 ||\n    (a === 172 && b! >= 16 && b! <= 31) ||\n    (a === 192 && b === 168) ||\n    (a === 169 && b === 254) || a >= 224\n  );\n}\n\nasync function isPublicHost(hostname: string): Promise<boolean> {\n  const lower = hostname.toLowerCase();\n  if (\n    lower === \"localhost\" || lower.endsWith(\".local\") ||\n    lower.endsWith(\".internal\") || lower.endsWith(\".localdomain\") ||\n    lower.endsWith(\".corp\") || lower.endsWith(\".lan\")\n  ) return false;\n  if (net.isIP(hostname) !== 0) return !isPrivateIp(hostname);\n  let addrs: { address: string }[];\n  try { addrs = await dns.lookup(hostname, { all: true }); } catch { return false; }\n  if (addrs.length === 0) return false;\n  return addrs.every(({ address }) => !isPrivateIp(address));\n}\n\nfunction probeAudio(filePath: string): Promise<boolean> {\n  return new Promise((resolve) => {\n    const child = spawn(\"ffprobe\", [\n      \"-v\", \"error\",\n      \"-select_streams\", \"a\",\n      \"-show_entries\", \"stream=index\",\n      \"-of\", \"csv=p=0\",\n      filePath,\n    ], { stdio: [\"ignore\", \"pipe\", \"ignore\"] });\n    let out = \"\";\n    child.stdout.on(\"data\", (d: Buffer) => { out += d.toString(); });\n    child.on(\"error\", () => resolve(false));\n    child.on(\"close\", () => resolve(out.trim().length > 0));\n  });\n}\n\nfunction probeDuration(filePath: string): Promise<number | null> {\n  return new Promise((resolve) => {\n    const child = spawn(\"ffprobe\", [\n      \"-v\", \"error\",\n      \"-show_entries\", \"format=duration\",\n      \"-of\", \"csv=p=0\",\n      filePath,\n    ], { stdio: [\"ignore\", \"pipe\", \"ignore\"] });\n    let out = \"\";\n    child.stdout.on(\"data\", (d: Buffer) => { out += d.toString(); });\n    child.on(\"error\", () => resolve(null));\n    child.on(\"close\", () => {\n      const n = parseFloat(out.trim());\n      resolve(isFinite(n) && n > 0 ? n : null);\n    });\n  });\n}\n\nconst MAX_REDIRECTS = 4;\n\nasync function safeFetchWithRedirects(\n  startUrl: string,\n  timeoutMs: number,\n  isHopAllowed: (u: URL) => Promise<boolean>,\n): Promise<globalThis.Response> {\n  let current = startUrl;\n  for (let hop = 0; hop <= MAX_REDIRECTS; hop++) {\n    let parsed: URL;\n    try { parsed = new URL(current); } catch { throw new Error(\"Invalid URL\"); }\n    if (parsed.protocol !== \"https:\" && parsed.protocol !== \"http:\") {\n      throw new Error(`Protocol not allowed: ${parsed.protocol}`);\n    }\n    if (!(await isHopAllowed(parsed))) {\n      throw new Error(`Host not allowed: ${parsed.hostname}`);\n    }\n    const ctrl = new AbortController();\n    const timer = setTimeout(() => ctrl.abort(), timeoutMs);\n    let res: globalThis.Response;\n    try {\n      res = await fetch(parsed.toString(), { signal: ctrl.signal, redirect: \"manual\" });\n    } finally {\n      clearTimeout(timer);\n    }\n    if (res.status >= 300 && res.status < 400) {\n      const loc = res.headers.get(\"location\");\n      if (!loc) return res;\n      current = new URL(loc, parsed).toString();\n      continue;\n    }\n    return res;\n  }\n  throw new Error(\"Too many redirects\");\n}\n\nasync function streamToFile(\n  res: globalThis.Response,\n  dest: string,\n  maxBytes: number,\n  tooLargeMsg: string,\n): Promise<void> {\n  if (!res.body) throw new Error(\"Empty response body\");\n  const reader = res.body.getReader();\n  const chunks: Uint8Array[] = [];\n  let total = 0;\n  for (;;) {\n    const { value, done } = await reader.read();\n    if (done) break;\n    total += value.byteLength;\n    if (total > maxBytes) throw new Error(tooLargeMsg);\n    chunks.push(value);\n  }\n  await writeFile(dest, Buffer.concat(chunks.map((c) => Buffer.from(c))));\n}\n\nasync function downloadSourceUrl(url: string, dest: string): Promise<void> {\n  let fetchUrl = url;\n  try {\n    const { ingestFromUrl } = await import(\"../lib/videoIngest\");\n    const ingested = await ingestFromUrl(url);\n    if (ingested?.streamUrl) fetchUrl = ingested.streamUrl;\n  } catch {\n    // fall back to direct fetch\n  }\n\n  const res = await safeFetchWithRedirects(fetchUrl, 60_000, (u) => isPublicHost(u.hostname));\n  if (!res.ok) throw new Error(`Source fetch failed: ${res.status}`);\n  const ct = res.headers.get(\"content-type\") ?? \"\";\n  if (!/^video\\//i.test(ct) && !/octet-stream/i.test(ct)) {\n    throw new Error(`Unexpected source content-type: ${ct}`);\n  }\n  await streamToFile(res, dest, MAX_VIDEO_BYTES, \"Source video too large (max 500 MB)\");\n}\n\nasync function downloadMusic(url: string, dest: string): Promise<void> {\n  const res = await safeFetchWithRedirects(url, 15_000, async (u) =>\n    MUSIC_HOSTS.has(u.hostname.toLowerCase()),\n  );\n  if (!res.ok) throw new Error(`Music fetch failed: ${res.status}`);\n  const ct = res.headers.get(\"content-type\") ?? \"\";\n  if (!/audio\\/|application\\/octet-stream/.test(ct)) {\n    throw new Error(`Unexpected music content-type: ${ct}`);\n  }\n  await streamToFile(res, dest, MAX_MUSIC_BYTES, \"Music track too large\");\n}\n\n// \u2500\u2500\u2500 ffmpeg runner with progress \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction runFfmpegWithProgress(\n  args: string[],\n  job: Job,\n  log: { info: (obj: object | string, msg?: string) => void; warn: (obj: object, msg: string) => void },\n): Promise<void> {\n  return new Promise((resolve, reject) => {\n    const child = spawn(\"ffmpeg\", args, { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n    job.ffmpegChild = child;\n\n    const killTimer = setTimeout(() => {\n      try { child.kill(\"SIGKILL\"); } catch { /* noop */ }\n      reject(new Error(\"ffmpeg timed out\"));\n    }, RENDER_TIMEOUT_MS);\n\n    // Parse -progress pipe:1 output (structured key=value to stdout)\n    let stdoutBuf = \"\";\n    const progressFrame: Record<string, string> = {};\n    child.stdout.on(\"data\", (chunk: Buffer) => {\n      stdoutBuf += chunk.toString();\n      const lines = stdoutBuf.split(\"\\n\");\n      stdoutBuf = lines.pop() ?? \"\";\n      for (const line of lines) {\n        const eq = line.indexOf(\"=\");\n        if (eq === -1) continue;\n        const key = line.slice(0, eq).trim();\n        const val = line.slice(eq + 1).trim();\n        progressFrame[key] = val;\n        if (key === \"progress\") {\n          // A complete frame arrived. Compute percent from out_time_ms.\n          const outTimeMs = parseFloat(progressFrame[\"out_time_ms\"] ?? \"0\");\n          if (isFinite(outTimeMs) && job.durationSec > 0) {\n            const pct = Math.min(99, Math.round((outTimeMs / 1000 / job.durationSec) * 100));\n            setJobProgress(job, pct);\n          }\n        }\n      }\n    });\n\n    let stderr = \"\";\n    child.stderr.on(\"data\", (chunk: Buffer) => {\n      if (stderr.length < 16_000) stderr += chunk.toString();\n    });\n\n    child.on(\"error\", (err) => {\n      clearTimeout(killTimer);\n      reject(err);\n    });\n\n    child.on(\"close\", (code) => {\n      clearTimeout(killTimer);\n      job.ffmpegChild = undefined;\n      if (code === 0) {\n        log.info(\"ffmpeg render complete\");\n        resolve();\n      } else if (job.status === \"cancelled\") {\n        reject(new Error(\"Cancelled\"));\n      } else {\n        log.warn({ code, stderr: stderr.slice(-2000) }, \"ffmpeg failed\");\n        reject(new Error(`ffmpeg exited with code ${code}`));\n      }\n    });\n  });\n}\n\n// \u2500\u2500\u2500 Background render task \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function runRenderJob(\n  jobId: string,\n  manifest: EditManifest,\n  fileBuffer: Buffer | null,\n  sourceVideoUrl: string | null,\n  log: { info: (obj: object | string, msg?: string) => void; warn: (obj: object, msg: string) => void },\n  userId: string | null = null,\n) {\n  const job = jobs.get(jobId);\n  if (!job) return;\n\n  const workDir = job.workDir;\n  const sourcePath = path.join(workDir, \"source.bin\");\n  const musicPath = path.join(workDir, \"music.bin\");\n  const outPath = path.join(workDir, \"out.mp4\");\n\n  try {\n    // Stage 1: acquire source\n    if (fileBuffer) {\n      setJobStage(job, \"Preparing source\");\n      await writeFile(sourcePath, fileBuffer);\n    } else if (sourceVideoUrl) {\n      setJobStage(job, \"Downloading source\");\n      await downloadSourceUrl(sourceVideoUrl, sourcePath);\n    }\n\n    if (job.status === \"cancelled\") throw new Error(\"Cancelled\");\n\n    // Probe audio + duration\n    const [hasSourceAudio, sourceDuration] = await Promise.all([\n      probeAudio(sourcePath),\n      probeDuration(sourcePath),\n    ]);\n\n    // Compute expected output duration for percent calculation\n    const outDur =\n      manifest.trimOutSec != null\n        ? manifest.trimOutSec - manifest.trimInSec\n        : sourceDuration != null\n          ? Math.min(sourceDuration - manifest.trimInSec, MAX_TRIM_SECONDS)\n          : MAX_TRIM_SECONDS;\n    job.durationSec = Math.max(0.1, outDur);\n\n    // Stage 2: fetch music if needed\n    let hasMusic = false;\n    if (manifest.audioTrack) {\n      setJobStage(job, \"Downloading music\");\n      try {\n        await downloadMusic(manifest.audioTrack.previewUrl, musicPath);\n        hasMusic = true;\n      } catch (err) {\n        log.warn({ err }, \"video-render: music download failed; continuing without it\");\n      }\n    }\n\n    if ((job.status as JobStatus) === \"cancelled\") throw new Error(\"Cancelled\");\n\n    // Build ffmpeg args\n    const inputs: string[] = [\"-y\", \"-i\", sourcePath];\n    if (hasMusic) inputs.push(\"-i\", musicPath);\n\n    const trimArgs: string[] = [];\n    if (manifest.trimInSec > 0) trimArgs.push(\"-ss\", String(manifest.trimInSec));\n    if (manifest.trimOutSec != null) {\n      const dur = Math.max(0.1, manifest.trimOutSec - manifest.trimInSec);\n      trimArgs.push(\"-t\", String(dur));\n    } else {\n      trimArgs.push(\"-t\", String(MAX_TRIM_SECONDS));\n    }\n\n    const vf = buildVideoFilter(manifest);\n    const filterParts: string[] = [`[0:v]${vf}[v]`];\n    const mapArgs: string[] = [\"-map\", \"[v]\"];\n\n    if (hasMusic && hasSourceAudio) {\n      filterParts.push(\n        `[0:a:0]volume=${manifest.originalVolume.toFixed(3)},aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo[ao]`,\n        `[1:a:0]volume=${manifest.audioVolume.toFixed(3)},aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo[am]`,\n        `[ao][am]amix=inputs=2:duration=first:dropout_transition=0[a]`,\n      );\n      mapArgs.push(\"-map\", \"[a]\");\n    } else if (hasMusic && !hasSourceAudio) {\n      filterParts.push(\n        `[1:a:0]volume=${manifest.audioVolume.toFixed(3)},aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo[a]`,\n      );\n      mapArgs.push(\"-map\", \"[a]\");\n    } else if (!hasMusic && hasSourceAudio) {\n      filterParts.push(`[0:a:0]volume=${manifest.originalVolume.toFixed(3)}[a]`);\n      mapArgs.push(\"-map\", \"[a]\");\n    }\n\n    const args: string[] = [\n      ...inputs,\n      \"-filter_complex\", filterParts.join(\";\"),\n      ...mapArgs,\n      ...trimArgs,\n      \"-c:v\", \"libx264\",\n      \"-preset\", \"veryfast\",\n      \"-crf\", \"23\",\n      \"-pix_fmt\", \"yuv420p\",\n      \"-c:a\", \"aac\",\n      \"-b:a\", \"128k\",\n      \"-ac\", \"2\",\n      \"-ar\", \"44100\",\n      \"-movflags\", \"+faststart\",\n      // Send structured progress to stdout\n      \"-progress\", \"pipe:1\",\n      outPath,\n    ];\n\n    job.status = \"encoding\";\n    setJobStage(job, \"Encoding\");\n    log.info({ format: manifest.format, hasMusic }, \"video-render: starting ffmpeg\");\n    await runFfmpegWithProgress(args, job, log);\n\n    if ((job.status as JobStatus) === \"cancelled\") throw new Error(\"Cancelled\");\n\n    finishJob(job, outPath);\n\n    // \u2500\u2500 Persist to App Storage for signed-in users \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    // exportStorage uploads to the project's GCS bucket via Replit App Storage.\n    // Clips are permanent \u2014 no expiry \u2014 and survive server restarts.\n    if (userId) {\n      void (async () => {\n        try {\n          const exportId = randomUUID();\n          const buf = await readFile(outPath);\n          const objectPath = await exportStorage.upload(userId, exportId, buf);\n          const st = await stat(outPath);\n          const filename = `hooknbone-${manifest.format}-${Date.now()}.mp4`;\n          await db.insert(userExportsTable).values({\n            userId,\n            filename,\n            objectPath,\n            format: manifest.format,\n            fileSizeBytes: st.size,\n            jobId,\n            manifest: JSON.stringify(manifest),\n          });\n          log.info({ objectPath, userId }, \"video-render: export saved to library\");\n        } catch (err) {\n          log.warn({ err }, \"video-render: failed to save export to library\");\n        }\n      })();\n    }\n    // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n    scheduleCleanup(jobId);\n  } catch (err) {\n    const msg = err instanceof Error ? err.message : \"Render failed\";\n    if (job.status !== \"cancelled\") {\n      job.status = \"error\";\n      failJob(job, msg);\n    }\n    log.warn({ err }, \"video-render: render failed\");\n    void rm(workDir, { recursive: true, force: true }).catch(() => {});\n    scheduleCleanup(jobId);\n  }\n}\n\n// \u2500\u2500\u2500 Routes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// POST \u2014 start a render job\nrouter.post(\"/\", upload.single(\"video\"), async (req: Request, res: Response) => {\n  const file = (req as Request & { file?: Express.Multer.File }).file;\n  const body = (req.body ?? {}) as Record<string, unknown>;\n\n  const rawManifest =\n    typeof body.manifest === \"string\"\n      ? body.manifest\n      : body.manifest != null\n        ? JSON.stringify(body.manifest)\n        : undefined;\n\n  const manifestResult = parseManifest(rawManifest);\n  if (\"error\" in manifestResult) {\n    res.status(400).json({ error: manifestResult.error });\n    return;\n  }\n  const manifest = manifestResult;\n\n  const sourceVideoUrl = typeof body.sourceVideoUrl === \"string\" ? body.sourceVideoUrl : null;\n  if (!file && !sourceVideoUrl) {\n    res.status(400).json({ error: \"video file or sourceVideoUrl is required\" });\n    return;\n  }\n\n  const jobId = randomUUID();\n  const workDir = await mkdtemp(path.join(tmpdir(), \"vrender-\"));\n\n  const creatorId = requestCreatorId(req);\n  const job: Job = {\n    status: \"pending\",\n    percent: 0,\n    stage: \"Queued\",\n    workDir,\n    clients: new Set(),\n    startedAt: Date.now(),\n    durationSec: 0,\n    format: manifest.format,\n    creatorId,\n  };\n  jobs.set(jobId, job);\n\n  // Start render asynchronously (don't await)\n  const fileBuffer = file ? file.buffer : null;\n  const { userId } = getSessionUser(req) ?? {};\n  void runRenderJob(jobId, manifest, fileBuffer, sourceVideoUrl, req.log, userId ?? null);\n\n  res.json({ jobId });\n});\n\n// GET /:id/progress \u2014 SSE stream\nrouter.get(\"/:id/progress\", (req: Request, res: Response) => {\n  const job = jobs.get(String(req.params[\"id\"] ?? \"\"));\n  if (!job) {\n    res.status(404).json({ error: \"Job not found\" });\n    return;\n  }\n\n  res.setHeader(\"Content-Type\", \"text/event-stream\");\n  res.setHeader(\"Cache-Control\", \"no-cache\");\n  res.setHeader(\"Connection\", \"keep-alive\");\n  res.setHeader(\"X-Accel-Buffering\", \"no\");\n  res.flushHeaders();\n\n  // Send a heartbeat comment every 15s to keep connection alive\n  const heartbeat = setInterval(() => {\n    try { res.write(\": ping\\n\\n\"); } catch { /* gone */ }\n  }, 15_000);\n\n  // If job is already finished, send terminal event immediately\n  if (job.status === \"done\") {\n    const elapsed = Math.floor((Date.now() - job.startedAt) / 1000);\n    res.write(`data: ${JSON.stringify({ type: \"done\", percent: 100, elapsed })}\\n\\n`);\n    clearInterval(heartbeat);\n    res.end();\n    return;\n  }\n  if (job.status === \"error\") {\n    res.write(`data: ${JSON.stringify({ type: \"error\", message: job.error ?? \"Render failed\" })}\\n\\n`);\n    clearInterval(heartbeat);\n    res.end();\n    return;\n  }\n  if (job.status === \"cancelled\") {\n    res.write(`data: ${JSON.stringify({ type: \"error\", message: \"Cancelled\" })}\\n\\n`);\n    clearInterval(heartbeat);\n    res.end();\n    return;\n  }\n\n  // Send current state\n  const elapsed = Math.floor((Date.now() - job.startedAt) / 1000);\n  res.write(`data: ${JSON.stringify({ type: \"stage\", message: job.stage, elapsed })}\\n\\n`);\n  if (job.percent > 0) {\n    res.write(`data: ${JSON.stringify({ type: \"progress\", percent: job.percent, elapsed })}\\n\\n`);\n  }\n\n  job.clients.add(res);\n\n  const cleanup = () => {\n    clearInterval(heartbeat);\n    job.clients.delete(res);\n  };\n  req.on(\"close\", cleanup);\n  req.on(\"aborted\", cleanup);\n});\n\n// GET /:id/download \u2014 serve the baked MP4\nrouter.get(\"/:id/download\", async (req: Request, res: Response) => {\n  const job = jobs.get(String(req.params[\"id\"] ?? \"\"));\n  if (!job) {\n    res.status(404).json({ error: \"Job not found\" });\n    return;\n  }\n\n  // Ownership check \u2014 only the creator (by userId or originating IP)\n  // may download. This prevents a third party who guesses or obtains a jobId\n  // from streaming another user's exported MP4.\n  const requestorId = requestCreatorId(req);\n  if (requestorId !== job.creatorId) {\n    res.status(403).json({ error: \"Forbidden\" });\n    return;\n  }\n\n  if (job.status !== \"done\" || !job.outPath) {\n    res.status(409).json({ error: \"Job not finished yet\", status: job.status });\n    return;\n  }\n  try {\n    const st = await stat(job.outPath);\n    res.setHeader(\"Content-Type\", \"video/mp4\");\n    res.setHeader(\"Content-Length\", String(st.size));\n    res.setHeader(\n      \"Content-Disposition\",\n      `attachment; filename=\"hooknbone-${job.format}-${Date.now()}.mp4\"`,\n    );\n    const stream = createReadStream(job.outPath);\n    stream.on(\"error\", (err) => {\n      req.log.warn({ err }, \"video-render: stream error\");\n      if (!res.headersSent) res.status(500).end();\n      else res.destroy(err);\n    });\n    stream.pipe(res);\n  } catch {\n    res.status(500).json({ error: \"Could not read output file\" });\n  }\n});\n\n// DELETE /:id \u2014 cancel in-flight job\nrouter.delete(\"/:id\", (req: Request, res: Response) => {\n  const jobId = String(req.params[\"id\"] ?? \"\");\n  const job = jobs.get(jobId);\n  if (!job) {\n    res.status(404).json({ error: \"Job not found\" });\n    return;\n  }\n  if (job.status === \"done\" || job.status === \"cancelled\") {\n    res.json({ ok: true, status: job.status });\n    return;\n  }\n  job.status = \"cancelled\";\n  if (job.ffmpegChild) {\n    try { job.ffmpegChild.kill(\"SIGTERM\"); } catch { /* noop */ }\n  }\n  emitToClients(job, { type: \"error\", message: \"Cancelled\" });\n  for (const client of job.clients) {\n    try { client.end(); } catch { /* noop */ }\n  }\n  job.clients.clear();\n  void rm(job.workDir, { recursive: true, force: true }).catch(() => {});\n  scheduleCleanup(jobId);\n  res.json({ ok: true });\n});\n\n// Multer error handler\nrouter.use((err: unknown, _req: Request, res: Response, _next: () => void) => {\n  if (err instanceof multer.MulterError) {\n    if (err.code === \"LIMIT_FILE_SIZE\") {\n      res.status(413).json({ error: \"Video too large (max 500 MB)\" });\n      return;\n    }\n    res.status(400).json({ error: err.message });\n    return;\n  }\n  if (err instanceof Error) {\n    res.status(400).json({ error: err.message });\n    return;\n  }\n  res.status(500).json({ error: \"Upload error\" });\n});\n\nexport default router;\n", "// Export Storage \u2014 Cloudflare R2 (S3-compatible).\n\nimport {\n  privateObjectKey,\n  r2DeleteObject,\n  r2GetObjectStream,\n  r2ObjectExists,\n  r2PutObject,\n} from \"./r2\";\n\nexport class ExportNotFoundError extends Error {\n  constructor() {\n    super(\"Export not found\");\n    this.name = \"ExportNotFoundError\";\n    Object.setPrototypeOf(this, ExportNotFoundError.prototype);\n  }\n}\n\nexport class ExportStorage {\n  async upload(userId: string, exportId: string, buffer: Buffer): Promise<string> {\n    const relative = `exports/${userId}/${exportId}.mp4`;\n    const key = privateObjectKey(relative);\n    await r2PutObject(key, buffer, \"video/mp4\");\n    return relative;\n  }\n\n  async createReadableStream(objectPath: string): Promise<{\n    stream: NodeJS.ReadableStream;\n    contentLength: number | null;\n  }> {\n    const key = privateObjectKey(objectPath);\n    if (!(await r2ObjectExists(key))) throw new ExportNotFoundError();\n    const { stream, contentLength } = await r2GetObjectStream(key);\n    return { stream, contentLength };\n  }\n\n  async remove(objectPath: string): Promise<void> {\n    try {\n      const key = privateObjectKey(objectPath);\n      if (await r2ObjectExists(key)) {\n        await r2DeleteObject(key);\n      }\n    } catch (err) {\n      if (err instanceof ExportNotFoundError) return;\n      throw err;\n    }\n  }\n}\n\nexport const exportStorage = new ExportStorage();\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { db } from \"@workspace/db\";\nimport { speciesSightingsCacheTable } from \"@workspace/db\";\nimport { eq } from \"drizzle-orm\";\nimport {\n  SPECIES_DATABASE,\n  searchSpecies,\n  filterSpeciesByCategory,\n  type SpeciesData,\n} from \"../data/species\";\n\nconst router: IRouter = Router();\n\n// \u2500\u2500\u2500 In-memory TTL cache \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\ninterface CacheEntry<T> {\n  data: T;\n  expiresAt: number;\n}\n\nexport interface SightingObservation {\n  id: number;\n  lat: number;\n  lon: number;\n  observedOn: string;\n  locationName: string;\n  photoUrl: string | null;\n  observer: string;\n  quality: string;\n}\n\nconst inatCache = new Map<string, CacheEntry<SpeciesData[]>>();\nconst wikiCache = new Map<string, CacheEntry<{ extract: string; thumbnail?: string }>>();\nconst CACHE_TTL_MS = 60 * 60 * 1000;\nconst SIGHTINGS_TTL_MS = 30 * 60 * 1000;\n\nfunction cacheGet<T>(map: Map<string, CacheEntry<T>>, key: string): T | null {\n  const entry = map.get(key);\n  if (!entry) return null;\n  if (Date.now() > entry.expiresAt) { map.delete(key); return null; }\n  return entry.data;\n}\nfunction cacheSet<T>(map: Map<string, CacheEntry<T>>, key: string, data: T): void {\n  map.set(key, { data, expiresAt: Date.now() + CACHE_TTL_MS });\n}\n\n// \u2500\u2500\u2500 iNaturalist category inference \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction inferCategory(iconicTaxonName: string): SpeciesData[\"category\"] {\n  switch (iconicTaxonName) {\n    case \"Actinopterygii\":\n    case \"Elasmobranchii\":\n    case \"Reptilia\":\n      return \"freshwater\";\n    case \"Aves\":\n      return \"waterfowl\";\n    default:\n      return \"big-game\";\n  }\n}\n\n// \u2500\u2500\u2500 iNaturalist search fetch \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function fetchInatTaxa(q: string, page: number, perPage: number): Promise<SpeciesData[]> {\n  const cacheKey = `inat:${q}:${page}:${perPage}`;\n  const cached = cacheGet(inatCache, cacheKey);\n  if (cached) return cached;\n\n  const url = new URL(\"https://api.inaturalist.org/v1/taxa\");\n  url.searchParams.set(\"q\", q);\n  url.searchParams.set(\"rank\", \"species,subspecies\");\n  url.searchParams.set(\"per_page\", String(Math.min(perPage, 30)));\n  url.searchParams.set(\"page\", String(page));\n  url.searchParams.set(\"is_active\", \"true\");\n\n  const resp = await fetch(url.toString(), {\n    headers: { \"Accept\": \"application/json\", \"User-Agent\": \"HookNBoneApp/1.0\" },\n    signal: AbortSignal.timeout(8000),\n  });\n  if (!resp.ok) throw new Error(`iNaturalist HTTP ${resp.status}`);\n\n  const json = await resp.json() as {\n    results: Array<{\n      id: number;\n      name: string;\n      preferred_common_name?: string;\n      iconic_taxon_name?: string;\n      default_photo?: { medium_url?: string };\n    }>;\n  };\n\n  const results: SpeciesData[] = (json.results ?? []).map((t) => ({\n    id: `inat-${t.id}`,\n    name: t.preferred_common_name ?? t.name,\n    scientificName: t.name,\n    category: inferCategory(t.iconic_taxon_name ?? \"\"),\n    imageKey: \"inat\",\n    photoUrl: t.default_photo?.medium_url ?? \"\",\n    difficulty: \"intermediate\" as const,\n    description: \"\",\n    habitat: \"\",\n    range: \"\",\n    locations: [],\n    season: \"\",\n    bestTimes: \"\",\n    behavior: \"\",\n    bestBait: [],\n    techniques: [],\n    feedingSchedule: \"\",\n    sizeRange: \"\",\n    recordWeight: \"\",\n    tags: [\"inat\"],\n  }));\n\n  cacheSet(inatCache, cacheKey, results);\n  return results;\n}\n\n// \u2500\u2500\u2500 GET /api/species/search \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nrouter.get(\"/search\", async (req: Request, res: Response) => {\n  const { q, category, page: pageStr, per_page: perPageStr } = req.query;\n  const page = Math.max(1, parseInt(String(pageStr ?? \"1\"), 10) || 1);\n  const perPage = Math.min(30, Math.max(5, parseInt(String(perPageStr ?? \"20\"), 10) || 20));\n  const query = typeof q === \"string\" ? q.trim() : \"\";\n  const cat = typeof category === \"string\" && category !== \"all\" ? category : \"\";\n\n  let staticResults: SpeciesData[] = SPECIES_DATABASE;\n  if (cat) staticResults = filterSpeciesByCategory(cat as SpeciesData[\"category\"] | \"all\");\n  if (query) {\n    const searched = new Set(searchSpecies(query).map((s) => s.id));\n    staticResults = staticResults.filter((s) => searched.has(s.id));\n  }\n\n  if (page === 1) {\n    const sliced = staticResults.slice(0, perPage);\n\n    let inatExtra: SpeciesData[] = [];\n    if (query && sliced.length < perPage) {\n      try {\n        const inatAll = await fetchInatTaxa(query, 1, perPage + 5);\n        const staticNames = new Set(staticResults.map((s) => s.scientificName.toLowerCase()));\n        inatExtra = inatAll\n          .filter((s) => !staticNames.has(s.scientificName.toLowerCase()) && s.photoUrl)\n          .slice(0, perPage - sliced.length);\n      } catch {\n        // fail silently \u2014 static results are enough\n      }\n    }\n    return res.json({\n      page,\n      per_page: perPage,\n      hasMore: staticResults.length > perPage || inatExtra.length > 0,\n      species: [...sliced, ...inatExtra],\n    });\n  }\n\n  if (!query) {\n    return res.json({ page, per_page: perPage, hasMore: false, species: [] });\n  }\n\n  try {\n    const inatResults = await fetchInatTaxa(query, page - 1, perPage);\n    const staticNames = new Set(SPECIES_DATABASE.map((s) => s.scientificName.toLowerCase()));\n    const filtered = inatResults.filter(\n      (s) => !staticNames.has(s.scientificName.toLowerCase()) && s.photoUrl,\n    );\n    return res.json({\n      page,\n      per_page: perPage,\n      hasMore: filtered.length >= perPage,\n      species: filtered,\n    });\n  } catch {\n    return res.status(502).json({ error: \"Upstream search unavailable\" });\n  }\n});\n\n// \u2500\u2500\u2500 GET /api/species/wiki-summary \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nrouter.get(\"/wiki-summary\", async (req: Request, res: Response) => {\n  const { title } = req.query;\n  if (typeof title !== \"string\" || !title.trim()) {\n    return res.status(400).json({ error: \"title is required\" });\n  }\n\n  const cleanTitle = title.trim().replace(/\\s+/g, \"_\");\n  const cached = cacheGet(wikiCache, cleanTitle);\n  if (cached) return res.json(cached);\n\n  try {\n    const wikiUrl = `https://en.wikipedia.org/api/rest_v1/page/summary/${encodeURIComponent(cleanTitle)}`;\n    const resp = await fetch(wikiUrl, {\n      headers: { \"Accept\": \"application/json\", \"User-Agent\": \"HookNBoneApp/1.0\" },\n      signal: AbortSignal.timeout(8000),\n    });\n    if (!resp.ok) {\n      return res.status(resp.status).json({ error: \"Wikipedia API error\" });\n    }\n    const json = await resp.json() as {\n      extract?: string;\n      thumbnail?: { source?: string };\n    };\n    const result = {\n      extract: json.extract ?? \"\",\n      thumbnail: json.thumbnail?.source,\n    };\n    cacheSet(wikiCache, cleanTitle, result);\n    return res.json(result);\n  } catch {\n    return res.status(502).json({ error: \"Could not fetch Wikipedia summary\" });\n  }\n});\n\n// \u2500\u2500\u2500 GET /api/species/category/summary \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nrouter.get(\"/category/summary\", (_req: Request, res: Response) => {\n  const summary = {\n    \"big-game\":   SPECIES_DATABASE.filter((s) => s.category === \"big-game\").length,\n    \"waterfowl\":  SPECIES_DATABASE.filter((s) => s.category === \"waterfowl\").length,\n    \"small-game\": SPECIES_DATABASE.filter((s) => s.category === \"small-game\").length,\n    \"freshwater\": SPECIES_DATABASE.filter((s) => s.category === \"freshwater\").length,\n    \"saltwater\":  SPECIES_DATABASE.filter((s) => s.category === \"saltwater\").length,\n    \"total\":      SPECIES_DATABASE.length,\n  };\n  res.json(summary);\n});\n\n// \u2500\u2500\u2500 GET /api/species (list with filtering) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// All photoUrls are pre-baked CDN URLs \u2014 no warm-up delay, no enrichment needed.\nrouter.get(\"/\", (req: Request, res: Response) => {\n  const { category, q, difficulty } = req.query;\n\n  let results: SpeciesData[] = SPECIES_DATABASE;\n\n  if (typeof category === \"string\" && category !== \"all\") {\n    results = filterSpeciesByCategory(category as SpeciesData[\"category\"] | \"all\");\n  }\n  if (typeof q === \"string\" && q.trim()) {\n    const searchResults = new Set(searchSpecies(q.trim()).map((s) => s.id));\n    results = results.filter((s) => searchResults.has(s.id));\n  }\n  if (typeof difficulty === \"string\" && difficulty !== \"all\") {\n    results = results.filter((s) => s.difficulty === difficulty);\n  }\n\n  res.json({ total: results.length, species: results });\n});\n\n// \u2500\u2500\u2500 iNaturalist place_id allowlist (prevents arbitrary place_id injection) \u2500\u2500\u2500\u2500\nconst INAT_PLACE_IDS: Record<string, number> = {\n  \"north-america\":   97394,\n  \"united-states\":   1,\n  \"canada\":          6712,\n  \"mexico\":          6793,\n  \"europe\":          97391,\n  \"africa\":          97392,\n  \"asia\":            97393,\n  \"australia\":       6744,\n  \"south-america\":   97389,\n};\n\n// \u2500\u2500\u2500 GET /api/species/:id/sightings \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// SSRF-safe: only fetches from hardcoded api.inaturalist.org domain.\n// scientificName comes from our own DB (trusted), or optional `scientific_name`\n// query param validated by regex (fallback for dynamically discovered iNat taxa).\nconst SAFE_TAXON_RE = /^[A-Za-z][\\w .\\-()]{1,80}$/;\nconst DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nrouter.get(\"/:id/sightings\", async (req: Request, res: Response) => {\n  let taxonName: string;\n\n  const dbSpecies = SPECIES_DATABASE.find((s) => s.id === req.params.id);\n  if (dbSpecies) {\n    taxonName = dbSpecies.scientificName;\n  } else {\n    const fallback = req.query.scientific_name;\n    if (typeof fallback !== \"string\" || !SAFE_TAXON_RE.test(fallback.trim())) {\n      res.status(404).json({ error: \"Species not found\" });\n      return;\n    }\n    taxonName = fallback.trim();\n  }\n\n  // Optional date range params (YYYY-MM-DD) \u2014 validate format then real-parse\n  const d1Raw = typeof req.query.d1 === \"string\" ? req.query.d1.trim() : \"\";\n  const d2Raw = typeof req.query.d2 === \"string\" ? req.query.d2.trim() : \"\";\n\n  function isValidDate(s: string): boolean {\n    if (!DATE_RE.test(s)) return false;\n    const t = Date.parse(s);\n    return !isNaN(t);\n  }\n\n  const d1 = isValidDate(d1Raw) ? d1Raw : \"\";\n  const d2 = isValidDate(d2Raw) ? d2Raw : \"\";\n\n  if (d1 && d2 && d1 > d2) {\n    res.status(400).json({ error: \"d1 must be before or equal to d2\" });\n    return;\n  }\n\n  // Optional region param \u2014 mapped to an allowlisted iNat place_id.\n  // Unknown place_name values are rejected with a 400 rather than silently\n  // falling back to a global query (which would share the wrong cache entry).\n  const placeNameRaw = typeof req.query.place_name === \"string\" ? req.query.place_name.trim().toLowerCase() : \"\";\n  let placeId: number | null = null;\n  if (placeNameRaw) {\n    if (!(placeNameRaw in INAT_PLACE_IDS)) {\n      res.status(400).json({ error: `Unknown place_name. Valid values: ${Object.keys(INAT_PLACE_IDS).join(\", \")}` });\n      return;\n    }\n    placeId = INAT_PLACE_IDS[placeNameRaw]!;\n  }\n\n  const cacheKey = `${taxonName.toLowerCase()}:${d1}:${d2}:${placeId ?? \"\"}`;\n\n  try {\n    const dbRow = await db\n      .select()\n      .from(speciesSightingsCacheTable)\n      .where(eq(speciesSightingsCacheTable.taxonName, cacheKey))\n      .limit(1)\n      .then((rows) => rows[0] ?? null);\n\n    if (dbRow) {\n      const ageMs = Date.now() - dbRow.fetchedAt.getTime();\n      if (ageMs < SIGHTINGS_TTL_MS) {\n        const sightings = JSON.parse(dbRow.sightingsJson) as SightingObservation[];\n        return res.json({ sightings });\n      }\n    }\n  } catch (err) {\n    req.log.warn({ err }, \"Failed to read sightings cache from DB \u2014 falling back to iNaturalist\");\n  }\n\n  try {\n    const url = new URL(\"https://api.inaturalist.org/v1/observations\");\n    url.searchParams.set(\"taxon_name\", taxonName);\n    url.searchParams.set(\"per_page\", \"50\");\n    url.searchParams.set(\"order\", \"desc\");\n    url.searchParams.set(\"order_by\", \"created_at\");\n    url.searchParams.set(\"quality_grade\", \"research\");\n    url.searchParams.append(\"has[]\", \"geo\");\n    url.searchParams.append(\"has[]\", \"photos\");\n    if (d1) url.searchParams.set(\"d1\", d1);\n    if (d2) url.searchParams.set(\"d2\", d2);\n    if (placeId !== null) url.searchParams.set(\"place_id\", String(placeId));\n\n    const resp = await fetch(url.toString(), {\n      headers: { Accept: \"application/json\", \"User-Agent\": \"HookNBoneApp/1.0\" },\n      signal: AbortSignal.timeout(10_000),\n      redirect: \"error\",\n    });\n    if (!resp.ok) {\n      req.log.warn({ status: resp.status }, \"iNaturalist observations API error\");\n      return res.status(502).json({ error: \"Upstream unavailable\" });\n    }\n\n    const contentType = resp.headers.get(\"content-type\") ?? \"\";\n    if (!contentType.includes(\"application/json\")) {\n      return res.status(502).json({ error: \"Unexpected response from upstream\" });\n    }\n\n    const json = await resp.json() as {\n      results: Array<{\n        id: number;\n        location?: string;\n        observed_on?: string;\n        place_guess?: string;\n        photos?: Array<{ url?: string }>;\n        user?: { login?: string };\n        quality_grade?: string;\n      }>;\n    };\n\n    const sightings: SightingObservation[] = [];\n    for (const obs of json.results ?? []) {\n      if (!obs.location) continue;\n      const [latStr, lonStr] = obs.location.split(\",\");\n      const lat = parseFloat(latStr ?? \"\");\n      const lon = parseFloat(lonStr ?? \"\");\n      if (!isFinite(lat) || !isFinite(lon)) continue;\n\n      const rawPhoto = obs.photos?.[0]?.url ?? null;\n      const photoUrl = rawPhoto\n        ? rawPhoto.replace(\"square\", \"medium\")\n        : null;\n\n      sightings.push({\n        id: obs.id,\n        lat,\n        lon,\n        observedOn: obs.observed_on ?? \"\",\n        locationName: obs.place_guess ?? \"\",\n        photoUrl,\n        observer: obs.user?.login ?? \"unknown\",\n        quality: obs.quality_grade ?? \"\",\n      });\n    }\n\n    try {\n      await db.insert(speciesSightingsCacheTable)\n        .values({ taxonName: cacheKey, sightingsJson: JSON.stringify(sightings), fetchedAt: new Date() })\n        .onConflictDoUpdate({\n          target: speciesSightingsCacheTable.taxonName,\n          set: { sightingsJson: JSON.stringify(sightings), fetchedAt: new Date() },\n        });\n    } catch (err) {\n      req.log.warn({ err }, \"Failed to persist sightings cache to DB\");\n    }\n\n    return res.json({ sightings });\n  } catch (err) {\n    req.log.error({ err }, \"Failed to fetch iNaturalist sightings\");\n    return res.status(502).json({ error: \"Could not fetch sightings\" });\n  }\n});\n\n// \u2500\u2500\u2500 GET /api/species/:id \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Photo URL is pre-baked \u2014 no async enrichment needed; return directly.\nrouter.get(\"/:id\", (req: Request, res: Response) => {\n  const species = SPECIES_DATABASE.find((s) => s.id === req.params.id);\n  if (!species) {\n    res.status(404).json({ error: \"Species not found\" });\n    return;\n  }\n  res.json(species);\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { getSessionUser } from \"../lib/authMiddleware\";\nimport { geminiVisionJson } from \"../lib/ai\";\nimport { Agent as UndiciAgent, fetch as undiciFetch, type Response as FetchResponse } from \"undici\";\nimport dns from \"dns/promises\";\nimport net from \"node:net\";\n\nconst router: IRouter = Router();\n\nconst GEAR_SYSTEM_PROMPT = `You are an expert hunting and fishing gear identification specialist with encyclopedic knowledge of all major brands and equipment. Analyze the provided image from a hunting or fishing video and identify every piece of gear, equipment, clothing, and accessories visible.\n\nFor each item identified, provide:\n- category: one of [Firearm, Bow/Archery, Optics, Fishing Rod, Fishing Reel, Fishing Lure/Bait, Fishing Line, Fish Finder/Electronics, Apparel/Clothing, Footwear, Pack/Bag, Knife/Cutting Tool, Boat, Kayak/Canoe, Decoy, Game Call, Treestand/Blind, Safety Harness, Cooler/Storage, Vehicle, Accessory, Other]\n- brand: manufacturer/brand name (e.g., Sitka, Hoyt, Shimano, Bass Pro, Garmin, Leupold, Browning, Mathews, Daiwa, G. Loomis)\n- name: product name or description\n- model: specific model number if visible or identifiable from context (can be null)\n- confidence: 0\u2013100 integer \u2014 how confident you are in this identification\n- description: 1-sentence description of the item and what you see\n- searchQuery: the best search string for finding this exact product online (e.g., \"Sitka Fanatic Jacket Elevated II\")\n\nReturn ONLY a JSON object in this exact shape (no markdown, no commentary):\n{\n  \"imageAnalyzed\": true,\n  \"summary\": \"brief 1-sentence summary of the video content\",\n  \"gear\": [\n    {\n      \"category\": string,\n      \"brand\": string,\n      \"name\": string,\n      \"model\": string | null,\n      \"confidence\": number,\n      \"description\": string,\n      \"searchQuery\": string\n    }\n  ]\n}\n\nIf no gear is identifiable (e.g., black image, no content), return:\n{ \"imageAnalyzed\": false, \"summary\": \"No gear visible in image\", \"gear\": [] }\n\nImportant: Only list items you can genuinely see or identify with reasonable confidence (confidence >= 30). Do not fabricate items.`;\n\nconst ALLOWED_IMAGE_MIMES = new Set([\n  \"image/jpeg\",\n  \"image/png\",\n  \"image/gif\",\n  \"image/webp\",\n]);\n\nconst MAX_IMAGE_BYTES = 5_000_000;\nconst MAX_BASE64_CHARS = Math.ceil((MAX_IMAGE_BYTES * 4) / 3);\n\nfunction isPrivateIp(ip: string): boolean {\n  if (net.isIPv6(ip)) {\n    const lower = ip.toLowerCase().replace(/^::ffff:/, \"\");\n    // After stripping IPv4-mapped prefix, re-check as IPv4 if applicable\n    if (net.isIPv4(lower)) return isPrivateIp(lower);\n    return (\n      lower === \"::1\" ||\n      lower === \"::\" ||\n      lower === \"0:0:0:0:0:0:0:1\" ||\n      lower.startsWith(\"fe80:\") ||\n      lower.startsWith(\"fc\") ||\n      lower.startsWith(\"fd\") ||\n      lower.startsWith(\"ff\") // multicast\n    );\n  }\n  if (!net.isIPv4(ip)) return true; // malformed = block\n  const parts = ip.split(\".\").map(Number);\n  if (parts.length !== 4 || parts.some((p) => isNaN(p) || p < 0 || p > 255))\n    return true;\n  const [a, b] = parts;\n  return (\n    a === 0 ||\n    a === 10 ||\n    a === 127 ||\n    (a === 172 && b >= 16 && b <= 31) ||\n    (a === 192 && b === 168) ||\n    (a === 169 && b === 254) || // link-local / AWS metadata\n    a >= 224 // multicast + reserved\n  );\n}\n\ninterface ValidatedDestination {\n  hostname: string;\n  pinnedIp: string;\n  family: 4 | 6;\n}\n\nasync function validateHostname(\n  hostname: string,\n): Promise<ValidatedDestination | null> {\n  const lower = hostname.toLowerCase();\n\n  // Block internal-sounding hostnames\n  if (\n    lower === \"localhost\" ||\n    lower.endsWith(\".local\") ||\n    lower.endsWith(\".internal\") ||\n    lower.endsWith(\".localdomain\") ||\n    lower.endsWith(\".corp\") ||\n    lower.endsWith(\".lan\")\n  ) {\n    return null;\n  }\n\n  // If hostname is already an IP address, validate it directly\n  if (net.isIP(hostname) !== 0) {\n    if (isPrivateIp(hostname)) return null;\n    const family = net.isIPv6(hostname) ? 6 : 4;\n    return { hostname, pinnedIp: hostname, family };\n  }\n\n  // DNS resolution \u2014 validate every returned address\n  let addrs: { address: string; family: number }[];\n  try {\n    addrs = await dns.lookup(hostname, { all: true });\n  } catch {\n    return null;\n  }\n  if (addrs.length === 0) return null;\n\n  for (const { address } of addrs) {\n    if (isPrivateIp(address)) return null;\n  }\n\n  // Pin to the first resolved address to eliminate TOCTOU / DNS-rebinding\n  const first = addrs[0]!;\n  return {\n    hostname,\n    pinnedIp: first.address,\n    family: first.family as 4 | 6,\n  };\n}\n\nasync function fetchImageWithPinnedDns(\n  rawUrl: string,\n): Promise<{ base64: string; mimeType: string } | null> {\n  let parsed: URL;\n  try {\n    parsed = new URL(rawUrl);\n  } catch {\n    return null;\n  }\n  if (parsed.protocol !== \"https:\" && parsed.protocol !== \"http:\") return null;\n\n  const MAX_REDIRECTS = 4;\n  let currentUrl = rawUrl;\n\n  for (let hop = 0; hop <= MAX_REDIRECTS; hop++) {\n    let currentParsed: URL;\n    try {\n      currentParsed = new URL(currentUrl);\n    } catch {\n      return null;\n    }\n    if (\n      currentParsed.protocol !== \"https:\" &&\n      currentParsed.protocol !== \"http:\"\n    )\n      return null;\n\n    const validated = await validateHostname(currentParsed.hostname);\n    if (!validated) return null;\n\n    // Build an undici Agent that always resolves to the pre-validated IP,\n    // preventing DNS rebinding between validation and connection.\n    const { pinnedIp, family } = validated;\n    const agent = new UndiciAgent({\n      connect: {\n        lookup: (\n          _hostname: string,\n          _options: unknown,\n          callback: (\n            err: Error | null,\n            result: { address: string; family: number }[],\n          ) => void,\n        ) => {\n          callback(null, [{ address: pinnedIp, family }]);\n        },\n      },\n    });\n\n    const controller = new AbortController();\n    const timer = setTimeout(() => controller.abort(), 8000);\n\n    let res: FetchResponse;\n    try {\n      res = await undiciFetch(currentUrl, {\n        dispatcher: agent,\n        signal: controller.signal as AbortSignal,\n        redirect: \"manual\",\n        headers: {\n          \"User-Agent\":\n            \"Mozilla/5.0 (compatible; HookNBone/1.0; +https://hooknbone.app)\",\n          Accept: \"image/jpeg,image/png,image/gif,image/webp\",\n        },\n      });\n    } catch {\n      clearTimeout(timer);\n      return null;\n    }\n    clearTimeout(timer);\n\n    if (res.status >= 300 && res.status < 400) {\n      const loc = res.headers.get(\"location\");\n      if (!loc) return null;\n      try {\n        currentUrl = new URL(loc, currentUrl).toString();\n      } catch {\n        return null;\n      }\n      continue;\n    }\n\n    if (!res.ok) return null;\n\n    const ct = res.headers.get(\"content-type\") ?? \"\";\n    const mimeType = ct.split(\";\")[0]?.trim() ?? \"\";\n    if (!ALLOWED_IMAGE_MIMES.has(mimeType)) return null;\n\n    // Stream with a hard byte limit \u2014 never buffer more than MAX_IMAGE_BYTES\n    const reader = res.body?.getReader();\n    if (!reader) return null;\n\n    const chunks: Uint8Array[] = [];\n    let totalBytes = 0;\n    try {\n      for (;;) {\n        const { value, done } = await reader.read();\n        if (done) break;\n        totalBytes += value.byteLength;\n        if (totalBytes > MAX_IMAGE_BYTES) {\n          await reader.cancel().catch(() => {});\n          return null;\n        }\n        chunks.push(value);\n      }\n    } finally {\n      reader.releaseLock();\n    }\n\n    const buffer = Buffer.concat(chunks);\n    return { base64: buffer.toString(\"base64\"), mimeType };\n  }\n\n  return null; // too many redirects\n}\n\nrouter.post(\"/\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Unauthorized\" });\n    return;\n  }\n\n  const { imageUrl, imageBase64, mimeType: clientMime } = req.body ?? {};\n\n  if (!imageUrl && !imageBase64) {\n    res.status(400).json({ error: \"imageUrl or imageBase64 is required\" });\n    return;\n  }\n\n  let base64: string;\n  let mimeType: string;\n\n  if (imageBase64 && typeof imageBase64 === \"string\") {\n    if (imageBase64.length > MAX_BASE64_CHARS) {\n      res.status(413).json({ error: \"Image too large\" });\n      return;\n    }\n    const resolvedMime =\n      typeof clientMime === \"string\" ? clientMime.split(\";\")[0]?.trim() : \"\";\n    if (!resolvedMime || !ALLOWED_IMAGE_MIMES.has(resolvedMime)) {\n      res.status(400).json({ error: \"Unsupported image type\" });\n      return;\n    }\n    base64 = imageBase64;\n    mimeType = resolvedMime;\n  } else if (imageUrl && typeof imageUrl === \"string\") {\n    const fetched = await fetchImageWithPinnedDns(imageUrl);\n    if (!fetched) {\n      res\n        .status(422)\n        .json({ error: \"Could not fetch image from URL \u2014 try imageBase64 instead\" });\n      return;\n    }\n    base64 = fetched.base64;\n    mimeType = fetched.mimeType;\n  } else {\n    res.status(400).json({ error: \"Invalid imageUrl or imageBase64\" });\n    return;\n  }\n\n  try {\n    const raw = await geminiVisionJson({\n      systemInstruction: GEAR_SYSTEM_PROMPT,\n      userText:\n        \"Identify all hunting and fishing gear visible in this image. Return strict JSON only.\",\n      imageBase64: base64,\n      mimeType,\n      maxOutputTokens: 2048,\n    });\n    let parsedResult: unknown;\n    try {\n      parsedResult = JSON.parse(raw);\n    } catch {\n      req.log?.warn({ raw }, \"Failed to parse gear detect JSON\");\n      parsedResult = {\n        imageAnalyzed: false,\n        summary: \"Could not analyze image. Try a clearer photo.\",\n        gear: [],\n      };\n    }\n    return res.json(parsedResult);\n  } catch (err) {\n    req.log?.error({ err }, \"Gear detection failed\");\n    return res.status(500).json({ error: \"Gear detection failed. Try again.\" });\n  }\n});\n\nexport default router;\n", "import { Router } from \"express\";\nimport crypto from \"crypto\";\nimport { db } from \"@workspace/db\";\nimport {\n  gearCatalogTable,\n  gearOffersTable,\n  gearClickEventsTable,\n} from \"@workspace/db/schema\";\nimport type { GearSpecs } from \"@workspace/db/schema\";\nimport { asc, eq, sql, and } from \"drizzle-orm\";\nimport { buildTrackedAffiliateUrl, computeConversionRate } from \"../lib/gearAffiliate\";\n\nconst router = Router();\n\nfunction mapListItem(g: typeof gearCatalogTable.$inferSelect) {\n  return {\n    id: g.id,\n    name: g.name,\n    brand: g.brand,\n    category: g.category,\n    subcategory: g.subcategory,\n    price: g.price,\n    featured: g.featured,\n    clickCount: g.clickCount,\n    thumbnailUrl: g.thumbnailUrl || null,\n    storeName: g.storeName || null,\n    description: g.description ? g.description.slice(0, 160) : undefined,\n  };\n}\n\nfunction mapDetail(g: typeof gearCatalogTable.$inferSelect) {\n  return {\n    id: g.id,\n    name: g.name,\n    brand: g.brand,\n    category: g.category,\n    subcategory: g.subcategory,\n    price: g.price,\n    featured: g.featured,\n    description: g.description,\n    thumbnailUrl: g.thumbnailUrl || null,\n    imageUrls: g.imageUrls ?? [],\n    specs: (g.specs ?? {}) as GearSpecs,\n    storeName: g.storeName,\n    affiliateUrl: g.affiliateUrl,\n    clickCount: g.clickCount,\n    impressionCount: g.impressionCount,\n  };\n}\n\nrouter.get(\"/\", async (req, res) => {\n  const q = ((req.query.q as string) || \"\").trim().toLowerCase();\n  const category = (req.query.category as string) || \"\";\n  const popularOnly = req.query.popular === \"true\" || req.query.popular === \"1\";\n  const limit = Math.min(Math.max(parseInt((req.query.limit as string) || \"100\", 10) || 100, 1), 500);\n  const offset = Math.max(parseInt((req.query.offset as string) || \"0\", 10) || 0, 0);\n\n  try {\n    let items: (typeof gearCatalogTable.$inferSelect)[];\n\n    try {\n      items = await db\n        .select()\n        .from(gearCatalogTable)\n        .where(eq(gearCatalogTable.status, \"published\"))\n        .orderBy(asc(gearCatalogTable.position));\n    } catch (statusErr) {\n      req.log?.warn({ err: statusErr }, \"Gear: status column unavailable, listing full catalog\");\n      items = await db.select().from(gearCatalogTable).orderBy(asc(gearCatalogTable.position));\n    }\n\n    if (category === \"hunting\" || category === \"fishing\" || category === \"camping\") {\n      items = items.filter((g) => g.category === category);\n    }\n\n    if (popularOnly) {\n      items = items.filter((g) => g.featured);\n    }\n\n    if (q) {\n      items = items.filter((g) => {\n        const hay = `${g.brand} ${g.name} ${g.subcategory} ${g.storeName}`.toLowerCase();\n        return hay.includes(q);\n      });\n    }\n\n    const total = items.length;\n    const page = items.slice(offset, offset + limit).map(mapListItem);\n\n    res.json({\n      items: page,\n      total,\n      offset,\n      limit,\n      hasMore: offset + page.length < total,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Gear: failed to list gear\");\n    res.status(500).json({ error: \"Failed to load gear\" });\n  }\n});\n\nrouter.get(\"/:id\", async (req, res) => {\n  const id = req.params.id as string;\n  try {\n    const [item] = await db\n      .select()\n      .from(gearCatalogTable)\n      .where(eq(gearCatalogTable.id, id))\n      .limit(1);\n\n    if (!item || item.status !== \"published\") {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n\n    const offers = await db\n      .select()\n      .from(gearOffersTable)\n      .where(eq(gearOffersTable.gearId, id))\n      .orderBy(asc(gearOffersTable.position));\n\n    res.json({\n      item: mapDetail(item),\n      offers: offers.map((o) => ({\n        id: o.id,\n        storeName: o.storeName,\n        location: o.location,\n        price: o.price,\n        currency: o.currency,\n        isPrimary: o.isPrimary,\n        linkStatus: o.linkStatus,\n      })),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Gear: failed to get detail\");\n    res.status(500).json({ error: \"Failed to load gear detail\" });\n  }\n});\n\n/** Stage-one impression tracking when modal opens. */\nrouter.post(\"/:id/impression\", async (req, res) => {\n  const id = req.params.id as string;\n  try {\n    const [updated] = await db\n      .update(gearCatalogTable)\n      .set({\n        impressionCount: sql`${gearCatalogTable.impressionCount} + 1`,\n        conversionRate: sql`CASE WHEN ${gearCatalogTable.impressionCount} + 1 > 0 THEN ROUND((${gearCatalogTable.clickCount}::float / (${gearCatalogTable.impressionCount} + 1)) * 10000) / 100 ELSE 0 END`,\n      })\n      .where(and(eq(gearCatalogTable.id, id), eq(gearCatalogTable.status, \"published\")))\n      .returning({\n        impressionCount: gearCatalogTable.impressionCount,\n        clickCount: gearCatalogTable.clickCount,\n        conversionRate: gearCatalogTable.conversionRate,\n      });\n\n    if (!updated) {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n    res.json({ ok: true, ...updated });\n  } catch (err) {\n    req.log?.error({ err }, \"Gear: impression tracking failed\");\n    res.status(500).json({ error: \"Failed to record impression\" });\n  }\n});\n\n/** Stage-one click tracking \u2014 returns tracked redirect URL. */\nrouter.post(\"/:id/click\", async (req, res) => {\n  const id = req.params.id as string;\n  const { offerId, source } = req.body as { offerId?: string; source?: string };\n  const clickSource = typeof source === \"string\" ? source : \"web\";\n\n  try {\n    const [item] = await db.select().from(gearCatalogTable).where(eq(gearCatalogTable.id, id)).limit(1);\n    if (!item || item.status !== \"published\") {\n      res.status(404).json({ error: \"Not found\" });\n      return;\n    }\n\n    let redirectUrl = item.affiliateUrl;\n    let trackingId = item.trackingId;\n    let utmSource = item.utmSource;\n    let utmMedium = item.utmMedium;\n    let utmCampaign = item.utmCampaign;\n    let resolvedOfferId: string | null = null;\n\n    if (offerId) {\n      const [offer] = await db\n        .select()\n        .from(gearOffersTable)\n        .where(eq(gearOffersTable.id, offerId))\n        .limit(1);\n      if (offer && offer.gearId === id) {\n        redirectUrl = offer.affiliateUrl;\n        trackingId = offer.trackingId || item.trackingId;\n        utmSource = offer.utmSource || item.utmSource;\n        utmMedium = offer.utmMedium || item.utmMedium;\n        utmCampaign = offer.utmCampaign || item.utmCampaign;\n        resolvedOfferId = offer.id;\n      }\n    }\n\n    if (!redirectUrl) {\n      redirectUrl = `https://www.google.com/search?q=${encodeURIComponent(`${item.brand} ${item.name} buy`)}`;\n    }\n\n    const trackedUrl = buildTrackedAffiliateUrl({\n      baseUrl: redirectUrl,\n      trackingId,\n      utm: {\n        source: utmSource,\n        medium: utmMedium,\n        campaign: utmCampaign,\n        content: id,\n      },\n    });\n\n    const userId = req.user?.id ?? null;\n    await db.insert(gearClickEventsTable).values({\n      id: crypto.randomUUID(),\n      gearId: id,\n      offerId: resolvedOfferId,\n      userId,\n      source: clickSource,\n      referrer: (req.headers.referer as string) ?? \"\",\n      userAgent: (req.headers[\"user-agent\"] as string) ?? \"\",\n    });\n\n    const [updated] = await db\n      .update(gearCatalogTable)\n      .set({\n        clickCount: sql`${gearCatalogTable.clickCount} + 1`,\n        conversionRate: sql`CASE WHEN ${gearCatalogTable.impressionCount} > 0 THEN ROUND((${gearCatalogTable.clickCount} + 1)::float / ${gearCatalogTable.impressionCount} * 10000) / 100 ELSE 0 END`,\n      })\n      .where(eq(gearCatalogTable.id, id))\n      .returning({ clickCount: gearCatalogTable.clickCount });\n\n    res.json({\n      url: trackedUrl,\n      clickCount: updated?.clickCount ?? item.clickCount + 1,\n      conversionRate: computeConversionRate(\n        updated?.clickCount ?? item.clickCount + 1,\n        item.impressionCount,\n      ),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Gear: click tracking failed\");\n    res.status(500).json({ error: \"Failed to record click\" });\n  }\n});\n\nexport default router;\n", "import { Router } from \"express\";\nimport { db } from \"@workspace/db\";\nimport { gearPriceCacheTable } from \"@workspace/db/schema\";\nimport { eq } from \"drizzle-orm\";\nimport crypto from \"crypto\";\n\nconst router = Router();\n\nconst CACHE_TTL_MS = 6 * 60 * 60 * 1000;\n\n// \u2500\u2500 Amazon Product Advertising API v5 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Configure via environment variables:\n//   AFFILIATE_API_KEY      \u2014 Amazon access key ID\n//   AFFILIATE_API_SECRET   \u2014 Amazon secret access key\n//   AFFILIATE_PARTNER_TAG  \u2014 Amazon Associates partner tag (e.g. \"mysite-20\")\n// All three must be set; missing any one causes graceful fallback to simulation.\n\nconst PA_API_HOST = \"webservices.amazon.com\";\nconst PA_API_PATH = \"/paapi5/searchitems\";\nconst PA_API_TARGET =\n  \"com.amazon.paapi5.v1.ProductAdvertisingAPIv1.SearchItems\";\nconst AWS_REGION = \"us-east-1\";\nconst AWS_SERVICE = \"ProductAdvertisingAPI\";\n\nfunction hmacSha256(key: Buffer | string, data: string): Buffer {\n  return crypto.createHmac(\"sha256\", key).update(data).digest();\n}\n\nfunction buildAwsAuthHeader(\n  accessKey: string,\n  secretKey: string,\n  payload: string,\n  amzDate: string,\n  dateStamp: string,\n): string {\n  const headers: Record<string, string> = {\n    \"content-encoding\": \"amz-1.0\",\n    \"content-type\": \"application/json; charset=UTF-8\",\n    host: PA_API_HOST,\n    \"x-amz-date\": amzDate,\n    \"x-amz-target\": PA_API_TARGET,\n  };\n\n  const sortedKeys = Object.keys(headers).sort();\n  const canonicalHeaders = sortedKeys.map((k) => `${k}:${headers[k]}\\n`).join(\"\");\n  const signedHeaders = sortedKeys.join(\";\");\n  const payloadHash = crypto\n    .createHash(\"sha256\")\n    .update(payload)\n    .digest(\"hex\");\n\n  const canonicalRequest = [\n    \"POST\",\n    PA_API_PATH,\n    \"\",\n    canonicalHeaders,\n    signedHeaders,\n    payloadHash,\n  ].join(\"\\n\");\n\n  const credentialScope = `${dateStamp}/${AWS_REGION}/${AWS_SERVICE}/aws4_request`;\n  const stringToSign = [\n    \"AWS4-HMAC-SHA256\",\n    amzDate,\n    credentialScope,\n    crypto.createHash(\"sha256\").update(canonicalRequest).digest(\"hex\"),\n  ].join(\"\\n\");\n\n  const signingKey = hmacSha256(\n    hmacSha256(\n      hmacSha256(\n        hmacSha256(`AWS4${secretKey}`, dateStamp),\n        AWS_REGION,\n      ),\n      AWS_SERVICE,\n    ),\n    \"aws4_request\",\n  );\n  const signature = crypto\n    .createHmac(\"sha256\", signingKey)\n    .update(stringToSign)\n    .digest(\"hex\");\n\n  return (\n    `AWS4-HMAC-SHA256 Credential=${accessKey}/${credentialScope}, ` +\n    `SignedHeaders=${signedHeaders}, Signature=${signature}`\n  );\n}\n\ninterface PaApiSearchResponse {\n  SearchResult?: {\n    Items?: Array<{\n      Offers?: { Listings?: Array<{ Price?: { Amount?: number } }> };\n      ItemInfo?: { Title?: { DisplayValue?: string } };\n    }>;\n  };\n  Errors?: Array<{ Code: string; Message: string }>;\n}\n\nasync function fetchPriceFromAmazonPaApi(\n  itemName: string,\n  brand: string,\n): Promise<{ retailPrice: number; salePrice: number; source: string } | null> {\n  const accessKey = process.env.AFFILIATE_API_KEY;\n  const secretKey = process.env.AFFILIATE_API_SECRET;\n  const partnerTag = process.env.AFFILIATE_PARTNER_TAG;\n\n  if (!accessKey || !secretKey || !partnerTag) return null;\n\n  const payload = JSON.stringify({\n    Keywords: `${brand} ${itemName}`.slice(0, 100),\n    Marketplace: \"www.amazon.com\",\n    PartnerTag: partnerTag,\n    PartnerType: \"Associates\",\n    Resources: [\"ItemInfo.Title\", \"Offers.Listings.Price\"],\n    SearchIndex: \"SportingGoods\",\n    ItemCount: 1,\n  });\n\n  const now = new Date();\n  const amzDate =\n    now.toISOString().replace(/[:-]/g, \"\").replace(/\\.\\d{3}/, \"\") + \"\";\n  const cleanAmzDate = amzDate.replace(/[^0-9TZ]/g, \"\");\n  const dateStamp = cleanAmzDate.slice(0, 8);\n  const amzDateTime = `${dateStamp}T${cleanAmzDate.slice(9, 15)}Z`;\n\n  const authorization = buildAwsAuthHeader(\n    accessKey,\n    secretKey,\n    payload,\n    amzDateTime,\n    dateStamp,\n  );\n\n  const response = await fetch(`https://${PA_API_HOST}${PA_API_PATH}`, {\n    method: \"POST\",\n    headers: {\n      \"content-encoding\": \"amz-1.0\",\n      \"content-type\": \"application/json; charset=UTF-8\",\n      host: PA_API_HOST,\n      \"x-amz-date\": amzDateTime,\n      \"x-amz-target\": PA_API_TARGET,\n      Authorization: authorization,\n    },\n    body: payload,\n    signal: AbortSignal.timeout(8000),\n  });\n\n  if (!response.ok) {\n    const errorBody = await response.text().catch(() => \"\");\n    throw new Error(\n      `Amazon PA-API HTTP ${response.status}: ${errorBody.slice(0, 200)}`,\n    );\n  }\n\n  const data = (await response.json()) as PaApiSearchResponse;\n\n  if (data.Errors && data.Errors.length > 0) {\n    throw new Error(\n      `Amazon PA-API error: ${data.Errors[0].Code} \u2014 ${data.Errors[0].Message}`,\n    );\n  }\n\n  const items = data.SearchResult?.Items;\n  if (!items || items.length === 0) return null;\n\n  const amount = items[0].Offers?.Listings?.[0]?.Price?.Amount;\n  if (!amount || amount <= 0) return null;\n\n  const roundTo5 = (n: number) => Math.max(5, Math.round(n / 5) * 5);\n  return {\n    retailPrice: roundTo5(amount),\n    salePrice: roundTo5(amount),\n    source: \"live\",\n  };\n}\n\n// \u2500\u2500 Price simulation fallback \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Used only when AFFILIATE_API_KEY / AFFILIATE_API_SECRET / AFFILIATE_PARTNER_TAG\n// are not configured, or when the affiliate API returns no usable price.\n// Apply a plausible \u00B110 % market variation to the caller-supplied static prices\n// so the caching layer, UI loading states, and fallback path can be exercised\n// end-to-end without live credentials.\nfunction simulateLivePrice(\n  basePrice: number,\n  staticRetailPrice?: number,\n  staticSalePrice?: number,\n): { retailPrice: number; salePrice: number; source: string } {\n  const roundTo5 = (n: number) => Math.max(5, Math.round(n / 5) * 5);\n\n  if (staticRetailPrice != null && staticSalePrice != null) {\n    const jitter = 1 + (Math.random() * 0.1 - 0.05);\n    return {\n      retailPrice: roundTo5(staticRetailPrice * jitter),\n      salePrice: roundTo5(staticSalePrice * jitter),\n      source: \"simulated\",\n    };\n  }\n\n  const onSale = Math.random() < 0.35;\n  if (onSale) {\n    return {\n      retailPrice: roundTo5(basePrice * (1 + Math.random() * 0.2 + 0.1)),\n      salePrice: roundTo5(basePrice * (1 - (Math.random() * 0.15 + 0.05))),\n      source: \"simulated\",\n    };\n  }\n\n  const jitter = 1 + (Math.random() * 0.06 - 0.03);\n  const livePrice = roundTo5(basePrice * jitter);\n  return { retailPrice: livePrice, salePrice: livePrice, source: \"simulated\" };\n}\n\n/**\n * GET /api/gear/price?id=<gear-item-id>&basePrice=<n>[&retailPrice=<n>&salePrice=<n>]\n *\n * Returns live (or recently-cached) affiliate price data for a single gear item.\n *\n * Live prices are fetched from the Amazon Product Advertising API when\n * AFFILIATE_API_KEY / AFFILIATE_API_SECRET / AFFILIATE_PARTNER_TAG are set.\n * Falls back to price simulation (\u00B110 % variation of the static base price)\n * when credentials are absent or the affiliate call yields no price.\n *\n * All results \u2014 live and simulated \u2014 are cached for 6 hours in `gear_price_cache`\n * to avoid hitting affiliate rate limits on repeated views.\n *\n * Response shape:\n *   { id, retailPrice, salePrice, source: 'live'|'cache'|'simulated'|'static', cachedAt? }\n */\nrouter.get(\"/\", async (req, res) => {\n  const id = ((req.query.id as string) || \"\").trim();\n  if (!id) {\n    res.status(400).json({ error: \"Missing required query param: id\" });\n    return;\n  }\n\n  const basePrice = parseFloat((req.query.basePrice as string) || \"0\");\n  if (!basePrice || basePrice <= 0) {\n    res.status(400).json({ error: \"Missing or invalid query param: basePrice\" });\n    return;\n  }\n\n  const staticRetailPrice = req.query.retailPrice\n    ? parseFloat(req.query.retailPrice as string)\n    : undefined;\n  const staticSalePrice = req.query.salePrice\n    ? parseFloat(req.query.salePrice as string)\n    : undefined;\n\n  const itemName = ((req.query.name as string) || \"\").trim();\n  const brand = ((req.query.brand as string) || \"\").trim();\n\n  try {\n    const now = new Date();\n\n    const [cached] = await db\n      .select()\n      .from(gearPriceCacheTable)\n      .where(eq(gearPriceCacheTable.id, id))\n      .limit(1);\n\n    if (cached && cached.expiresAt > now) {\n      res.json({\n        id,\n        retailPrice: cached.retailPrice,\n        salePrice: cached.salePrice,\n        source: \"cache\",\n        cachedAt: cached.fetchedAt,\n      });\n      return;\n    }\n\n    let priceData: { retailPrice: number; salePrice: number; source: string };\n\n    try {\n      const liveResult =\n        itemName && brand\n          ? await fetchPriceFromAmazonPaApi(itemName, brand)\n          : null;\n\n      priceData =\n        liveResult ??\n        simulateLivePrice(basePrice, staticRetailPrice, staticSalePrice);\n    } catch (apiErr) {\n      req.log?.warn({ err: apiErr }, \"GearPrice: affiliate API error, falling back to simulation\");\n      priceData = simulateLivePrice(basePrice, staticRetailPrice, staticSalePrice);\n    }\n\n    const expiresAt = new Date(now.getTime() + CACHE_TTL_MS);\n\n    await db\n      .insert(gearPriceCacheTable)\n      .values({\n        id,\n        retailPrice: priceData.retailPrice,\n        salePrice: priceData.salePrice,\n        source: priceData.source,\n        fetchedAt: now,\n        expiresAt,\n      })\n      .onConflictDoUpdate({\n        target: gearPriceCacheTable.id,\n        set: {\n          retailPrice: priceData.retailPrice,\n          salePrice: priceData.salePrice,\n          source: priceData.source,\n          fetchedAt: now,\n          expiresAt,\n        },\n      });\n\n    res.json({\n      id,\n      retailPrice: priceData.retailPrice,\n      salePrice: priceData.salePrice,\n      source: priceData.source,\n      cachedAt: now,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"GearPrice: unhandled error\");\n    res.json({\n      id,\n      retailPrice: staticRetailPrice ?? basePrice,\n      salePrice: staticSalePrice ?? basePrice,\n      source: \"static\",\n    });\n  }\n});\n\nexport default router;\n", "import { Router } from \"express\";\nimport { db, regulationCacheTable } from \"@workspace/db\";\nimport { eq } from \"drizzle-orm\";\nimport {\n  getJurisdictions,\n  getJurisdictionById,\n  getTopLocations,\n  getRegulationSummary,\n  getAllRegulationSummaries,\n  type RegulationSummary,\n} from \"../data/regulations.js\";\n\nconst router = Router();\n\n// GET /api/regulations/jurisdictions?country=US|CA&q=searchterm\nrouter.get(\"/jurisdictions\", (req, res) => {\n  const { country, q } = req.query as Record<string, string>;\n  const results = getJurisdictions(country, q);\n  res.json({ total: results.length, jurisdictions: results });\n});\n\n// GET /api/regulations/jurisdictions/:id\nrouter.get(\"/jurisdictions/:id\", (req, res) => {\n  const j = getJurisdictionById(req.params.id);\n  if (!j) return res.status(404).json({ error: \"Jurisdiction not found\" });\n  return res.json(j);\n});\n\n// GET /api/regulations/locations?type=hunting|fishing|both&q=&country=&limit=\nrouter.get(\"/locations\", (req, res) => {\n  const { type, q, country, limit } = req.query as Record<string, string>;\n  const results = getTopLocations(type, q, country, limit ? Number(limit) : 200);\n  res.json({ total: results.length, locations: results });\n});\n\n// GET /api/regulations/summaries \u2014 all jurisdiction season summaries (US + CA)\n// Reads from DB cache (populated by regulationRefreshJob); falls back to static.\nrouter.get(\"/summaries\", async (req, res) => {\n  try {\n    const rows = await db.select().from(regulationCacheTable);\n\n    if (rows.length > 0) {\n      const summaries = rows.map((row) => {\n        const data = JSON.parse(row.dataJson) as RegulationSummary;\n        return {\n          ...data,\n          fetchedAt: row.fetchedAt.toISOString(),\n          sourceUrl: row.sourceUrl,\n        };\n      });\n      const latest = rows.reduce((a, b) =>\n        a.fetchedAt > b.fetchedAt ? a : b\n      );\n      return res.json({\n        total: summaries.length,\n        summaries,\n        lastUpdated: latest.fetchedAt.toISOString(),\n        source: \"cache\",\n      });\n    }\n  } catch (err) {\n    req.log.warn({ err }, \"regulations/summaries: DB read failed, falling back to static\");\n  }\n\n  // Fallback: serve static seed data\n  const summaries = getAllRegulationSummaries();\n  return res.json({\n    total: summaries.length,\n    summaries,\n    lastUpdated: summaries[0]?.lastUpdated ?? \"2025-01-01\",\n    source: \"static\",\n  });\n});\n\n// GET /api/regulations?state=TX|Alberta \u2014 season summary for one jurisdiction\n// Supports both 2-letter codes (TX, AB) and full names (Texas, Alberta).\n// Reads from DB cache first; falls back to static data.\nrouter.get(\"/\", async (req, res) => {\n  const { state } = req.query as Record<string, string>;\n  if (!state) {\n    return res.status(400).json({ error: \"Missing required query param: state\" });\n  }\n\n  // Resolve the canonical jurisdiction ID (2-letter code) from code or full name.\n  // Static lookup handles both \u2014 use it to normalise before hitting the DB.\n  const staticSummary = getRegulationSummary(state);\n  if (!staticSummary) {\n    return res.status(404).json({ error: `No regulation summary found for \"${state}\"` });\n  }\n\n  // Look up the cached record by canonical ID\n  try {\n    const rows = await db\n      .select()\n      .from(regulationCacheTable)\n      .where(eq(regulationCacheTable.jurisdictionId, staticSummary.id));\n\n    if (rows.length > 0) {\n      const row = rows[0]!;\n      const data = JSON.parse(row.dataJson) as RegulationSummary;\n      return res.json({\n        ...data,\n        fetchedAt: row.fetchedAt.toISOString(),\n        sourceUrl: row.sourceUrl,\n        source: \"cache\",\n      });\n    }\n  } catch (err) {\n    req.log.warn({ err, state }, \"regulations: DB read failed, falling back to static\");\n  }\n\n  // Fallback: static data (cache miss or DB error)\n  return res.json({ ...staticSummary, source: \"static\" });\n});\n\nexport default router;\n", "export interface Jurisdiction {\n  id: string;\n  name: string;\n  country: 'US' | 'CA';\n  abbr: string;\n  agency: string;\n  agencyUrl: string;\n  licenseUrl: string;\n  topSpecies: string[];\n  notes: string;\n}\n\nexport interface TopLocation {\n  id: string;\n  rank: number;\n  name: string;\n  country: string;\n  region: string;\n  type: 'hunting' | 'fishing' | 'both';\n  species: string[];\n  description: string;\n  url: string;\n}\n\nexport const JURISDICTIONS: Jurisdiction[] = [\n  // \u2500\u2500\u2500 US STATES \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  { id: 'alabama', name: 'Alabama', country: 'US', abbr: 'AL', agency: 'Alabama Division of Wildlife & Freshwater Fisheries', agencyUrl: 'https://www.outdooralabama.com', licenseUrl: 'https://www.outdooralabama.com/licenses-and-regulations/buy-licenses-online', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Largemouth Bass', 'Redfish'], notes: 'WMA permits required for many public lands; draw hunts for premium units.' },\n  { id: 'alaska', name: 'Alaska', country: 'US', abbr: 'AK', agency: 'Alaska Dept. of Fish & Game', agencyUrl: 'https://www.adfg.alaska.gov', licenseUrl: 'https://www.adfg.alaska.gov/sf/OncorLicensing/', topSpecies: ['Moose', 'Brown Bear', 'Chinook Salmon', 'Halibut', 'Caribou'], notes: 'Non-resident big game requires licensed guide. Brown/grizzly tags are draw.' },\n  { id: 'arizona', name: 'Arizona', country: 'US', abbr: 'AZ', agency: 'Arizona Game & Fish Dept.', agencyUrl: 'https://www.azgfd.com', licenseUrl: 'https://www.azgfd.com/licensing/buy-a-license/', topSpecies: ['Mule Deer', 'Pronghorn', 'Rocky Mountain Elk', 'Coues Deer'], notes: 'Elk, bison, and bighorn sheep are draw-only tags.' },\n  { id: 'arkansas', name: 'Arkansas', country: 'US', abbr: 'AR', agency: 'Arkansas Game & Fish Commission', agencyUrl: 'https://www.agfc.com', licenseUrl: 'https://www.agfc.com/en/licensing/', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Largemouth Bass', 'Crappie'], notes: 'Many WMA areas require permits. Quota deer hunts available via draw.' },\n  { id: 'california', name: 'California', country: 'US', abbr: 'CA', agency: 'CA Dept. of Fish & Wildlife', agencyUrl: 'https://wildlife.ca.gov', licenseUrl: 'https://www.ca.wildlifelicense.com/', topSpecies: ['Blacktail Deer', 'Wild Turkey', 'Striped Bass', 'Salmon', 'Elk'], notes: 'Elk and bighorn sheep are draw-only. Fishing license required for all ages 16+.' },\n  { id: 'colorado', name: 'Colorado', country: 'US', abbr: 'CO', agency: 'Colorado Parks & Wildlife', agencyUrl: 'https://cpw.state.co.us', licenseUrl: 'https://cpw.state.co.us/buyapply/Pages/Licenses.aspx', topSpecies: ['Rocky Mountain Elk', 'Mule Deer', 'Pronghorn', 'Bighorn Sheep', 'Brown Trout'], notes: 'Most elk and deer tags are limited draw. Over-the-counter tags available for some units.' },\n  { id: 'connecticut', name: 'Connecticut', country: 'US', abbr: 'CT', agency: 'CT Dept. of Energy & Environmental Protection', agencyUrl: 'https://portal.ct.gov/DEEP/Wildlife', licenseUrl: 'https://ct.aspirafocus.com/', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Striped Bass', 'Bluefish'], notes: 'Antlerless deer tags required in addition to general license.' },\n  { id: 'delaware', name: 'Delaware', country: 'US', abbr: 'DE', agency: 'Delaware Division of Fish & Wildlife', agencyUrl: 'https://dnrec.delaware.gov/fish-wildlife/', licenseUrl: 'https://licenseinfo.delaware.gov/', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Striped Bass', 'Weakfish'], notes: 'Deer hunting season coincides with firearms season. Tidal waters require separate licenses.' },\n  { id: 'florida', name: 'Florida', country: 'US', abbr: 'FL', agency: 'Florida Fish & Wildlife Conservation Commission', agencyUrl: 'https://myfwc.com', licenseUrl: 'https://licenses.myfwc.com/', topSpecies: ['Largemouth Bass', 'Redfish', 'Tarpon', 'Snook', 'Wild Turkey'], notes: 'Snook and tarpon require separate endorsements. Alligator hunting by permit only.' },\n  { id: 'georgia', name: 'Georgia', country: 'US', abbr: 'GA', agency: 'Georgia Dept. of Natural Resources \u2013 Wildlife Resources Division', agencyUrl: 'https://georgiawildlife.com', licenseUrl: 'https://georgiawildlife.com/licenses-permits-passes', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Largemouth Bass', 'Striped Bass'], notes: 'Wildlife Management Areas require separate WMA license stamp.' },\n  { id: 'hawaii', name: 'Hawaii', country: 'US', abbr: 'HI', agency: 'Hawaii Division of Aquatic Resources / Division of Forestry & Wildlife', agencyUrl: 'https://dlnr.hawaii.gov', licenseUrl: 'https://dlnr.hawaii.gov/dofaw/hunting/', topSpecies: ['Axis Deer', 'Wild Boar', 'Mouflon Sheep', 'Yellowfin Tuna', 'Mahi-Mahi'], notes: 'Public hunting areas are island-specific. No freshwater fishing license required.' },\n  { id: 'idaho', name: 'Idaho', country: 'US', abbr: 'ID', agency: 'Idaho Dept. of Fish & Game', agencyUrl: 'https://idfg.idaho.gov', licenseUrl: 'https://idfg.idaho.gov/buy', topSpecies: ['Rocky Mountain Elk', 'Mule Deer', 'Whitetail Deer', 'Chinook Salmon', 'Steelhead'], notes: 'Bear and mountain lion limited tags. Salmon and steelhead require harvest tags.' },\n  { id: 'illinois', name: 'Illinois', country: 'US', abbr: 'IL', agency: 'Illinois Dept. of Natural Resources', agencyUrl: 'https://www.dnr.illinois.gov', licenseUrl: 'https://www.wildlifelicense.com/il/', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Largemouth Bass', 'Walleye'], notes: 'Firearm deer season requires antlerless permit. CRP ground produces trophy bucks.' },\n  { id: 'indiana', name: 'Indiana', country: 'US', abbr: 'IN', agency: 'Indiana Dept. of Natural Resources', agencyUrl: 'https://www.in.gov/dnr/fish-and-wildlife/', licenseUrl: 'https://buy.wildlifelicense.com/IN/', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Largemouth Bass', 'Smallmouth Bass'], notes: 'Antler point restrictions apply in some counties.' },\n  { id: 'iowa', name: 'Iowa', country: 'US', abbr: 'IA', agency: 'Iowa Dept. of Natural Resources', agencyUrl: 'https://www.iowadnr.gov', licenseUrl: 'https://www.iowadnr.gov/Hunting/Hunting-License-Statistics/Hunting-Licenses', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Pheasant', 'Walleye', 'Smallmouth Bass'], notes: 'Premium deer units require preference points. World-class bowhunting state.' },\n  { id: 'kansas', name: 'Kansas', country: 'US', abbr: 'KS', agency: 'Kansas Dept. of Wildlife & Parks', agencyUrl: 'https://ksoutdoors.com', licenseUrl: 'https://ksoutdoors.com/License-Permits-Fees', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Pronghorn', 'Pheasant', 'Flathead Catfish'], notes: 'Elk is draw-only with very limited tags. Pheasant hunting strong in western Kansas.' },\n  { id: 'kentucky', name: 'Kentucky', country: 'US', abbr: 'KY', agency: 'Kentucky Dept. of Fish & Wildlife Resources', agencyUrl: 'https://fw.ky.gov', licenseUrl: 'https://fw.ky.gov/License/Pages/default.aspx', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Largemouth Bass', 'Muskie'], notes: 'Deer tags include antlered and antlerless. Lake Cumberland is premier bass fishery.' },\n  { id: 'louisiana', name: 'Louisiana', country: 'US', abbr: 'LA', agency: 'Louisiana Dept. of Wildlife & Fisheries', agencyUrl: 'https://wlf.louisiana.gov', licenseUrl: 'https://www.la.wildlifelicense.com/', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Redfish', 'Speckled Trout', 'Largemouth Bass'], notes: 'WMA hunts by permit. Saltwater license required for tidal waters.' },\n  { id: 'maine', name: 'Maine', country: 'US', abbr: 'ME', agency: 'Maine Dept. of Inland Fisheries & Wildlife', agencyUrl: 'https://www.maine.gov/ifw', licenseUrl: 'https://www.maine.gov/ifw/hunting-trapping/licenses-permits/index.html', topSpecies: ['Moose', 'Whitetail Deer', 'Black Bear', 'Brook Trout', 'Atlantic Salmon'], notes: 'Moose permits are draw-only with long waiting periods. Guide required for some hunts.' },\n  { id: 'maryland', name: 'Maryland', country: 'US', abbr: 'MD', agency: 'Maryland Dept. of Natural Resources', agencyUrl: 'https://dnr.maryland.gov', licenseUrl: 'https://compass.dnr.maryland.gov/', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Striped Bass', 'Blue Crab'], notes: 'Striped bass season and size limits change annually. DMAP permits available for deer.' },\n  { id: 'massachusetts', name: 'Massachusetts', country: 'US', abbr: 'MA', agency: 'MA Division of Fisheries & Wildlife', agencyUrl: 'https://www.mass.gov/orgs/division-of-fisheries-wildlife', licenseUrl: 'https://www.mass.gov/how-to/buy-a-hunting-or-fishing-license', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Striped Bass', 'Bluefish'], notes: 'Firearm deer restricted to shotgun/muzzleloader or archery in most areas.' },\n  { id: 'michigan', name: 'Michigan', country: 'US', abbr: 'MI', agency: 'Michigan Dept. of Natural Resources', agencyUrl: 'https://www.michigan.gov/dnr', licenseUrl: 'https://www.mdnr-elicense.com/', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Walleye', 'Muskie', 'Chinook Salmon'], notes: 'UP provides excellent bear and wolf (non-huntable) country. Great Lakes salmon epic.' },\n  { id: 'minnesota', name: 'Minnesota', country: 'US', abbr: 'MN', agency: 'Minnesota Dept. of Natural Resources', agencyUrl: 'https://www.dnr.state.mn.us', licenseUrl: 'https://www.dnr.state.mn.us/licenses/hunting/index.html', topSpecies: ['Whitetail Deer', 'Moose', 'Walleye', 'Northern Pike', 'Muskie'], notes: 'Moose tags extremely limited. Boundary Waters area produces trophy walleye and pike.' },\n  { id: 'mississippi', name: 'Mississippi', country: 'US', abbr: 'MS', agency: 'Mississippi Dept. of Wildlife, Fisheries & Parks', agencyUrl: 'https://www.mdwfp.com', licenseUrl: 'https://www.ms.wildlifelicense.com/', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Largemouth Bass', 'Crappie'], notes: 'Delta region is world-class deer country. Public WMA hunts require quota permits.' },\n  { id: 'missouri', name: 'Missouri', country: 'US', abbr: 'MO', agency: 'Missouri Dept. of Conservation', agencyUrl: 'https://mdc.mo.gov', licenseUrl: 'https://mdc.mo.gov/licenses', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Largemouth Bass', 'Crappie', 'Walleye'], notes: 'Antler point restrictions in place. Many free public hunting areas.' },\n  { id: 'montana', name: 'Montana', country: 'US', abbr: 'MT', agency: 'Montana Fish, Wildlife & Parks', agencyUrl: 'https://fwp.mt.gov', licenseUrl: 'https://fwp.mt.gov/licenses', topSpecies: ['Rocky Mountain Elk', 'Mule Deer', 'Whitetail Deer', 'Brown Trout', 'Bighorn Sheep'], notes: 'OTC elk tags available in many districts. Bighorn sheep and moose are draw-only.' },\n  { id: 'nebraska', name: 'Nebraska', country: 'US', abbr: 'NE', agency: 'Nebraska Game & Parks Commission', agencyUrl: 'https://outdoornebraska.gov', licenseUrl: 'https://outdoornebraska.gov/licenses/', topSpecies: ['Whitetail Deer', 'Mule Deer', 'Wild Turkey', 'Pheasant', 'Walleye'], notes: 'Sandhills provides excellent trophy mule and whitetail. Archery season OTC.' },\n  { id: 'nevada', name: 'Nevada', country: 'US', abbr: 'NV', agency: 'Nevada Dept. of Wildlife', agencyUrl: 'https://www.ndow.org', licenseUrl: 'https://www.ndow.org/fish/licenses/', topSpecies: ['Mule Deer', 'Pronghorn', 'Bighorn Sheep', 'Desert Bighorn', 'Rainbow Trout'], notes: 'Big game tags allocated by draw. Desert bighorn among most coveted in North America.' },\n  { id: 'new-hampshire', name: 'New Hampshire', country: 'US', abbr: 'NH', agency: 'NH Fish & Game Dept.', agencyUrl: 'https://www.wildlife.nh.gov', licenseUrl: 'https://www.wildlife.nh.gov/hunting/hunting_licenses.htm', topSpecies: ['Whitetail Deer', 'Moose', 'Black Bear', 'Brook Trout', 'Smallmouth Bass'], notes: 'Moose permits by lottery. Bear season runs concurrent with deer season.' },\n  { id: 'new-jersey', name: 'New Jersey', country: 'US', abbr: 'NJ', agency: 'NJ Division of Fish & Wildlife', agencyUrl: 'https://www.nj.gov/dep/fgw', licenseUrl: 'https://www.nj.gov/dep/fgw/lic_hunt.htm', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Striped Bass', 'Bluefish', 'Weakfish'], notes: 'Deer management zones. Six-day firearm season is one of the most densely hunted in US.' },\n  { id: 'new-mexico', name: 'New Mexico', country: 'US', abbr: 'NM', agency: 'NM Dept. of Game & Fish', agencyUrl: 'https://www.wildlife.state.nm.us', licenseUrl: 'https://www.wildlife.state.nm.us/hunting/licenses-and-permits/', topSpecies: ['Rocky Mountain Elk', 'Mule Deer', 'Pronghorn', 'Oryx', 'Wild Turkey'], notes: 'Oryx hunts on White Sands Missile Range. Valles Caldera produces trophy bulls.' },\n  { id: 'new-york', name: 'New York', country: 'US', abbr: 'NY', agency: 'NY Dept. of Environmental Conservation', agencyUrl: 'https://www.dec.ny.gov', licenseUrl: 'https://www.dec.ny.gov/permits/6094.html', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Striped Bass', 'Walleye', 'Muskellunge'], notes: 'Adirondack and Catskill regions offer quality deer and trout. Lake Erie walleye superb.' },\n  { id: 'north-carolina', name: 'North Carolina', country: 'US', abbr: 'NC', agency: 'NC Wildlife Resources Commission', agencyUrl: 'https://www.ncwildlife.org', licenseUrl: 'https://www.ncwildlife.org/Licensing', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Redfish', 'Flounder', 'Black Bear'], notes: 'One of the longest deer seasons in the US. Outer Banks saltwater fishing world-class.' },\n  { id: 'north-dakota', name: 'North Dakota', country: 'US', abbr: 'ND', agency: 'ND Game & Fish Dept.', agencyUrl: 'https://gf.nd.gov', licenseUrl: 'https://gf.nd.gov/licensing', topSpecies: ['Whitetail Deer', 'Mule Deer', 'Pronghorn', 'Waterfowl', 'Walleye'], notes: 'Premium non-resident deer licenses by draw. Top waterfowl state in the US.' },\n  { id: 'ohio', name: 'Ohio', country: 'US', abbr: 'OH', agency: 'Ohio Dept. of Natural Resources \u2013 Division of Wildlife', agencyUrl: 'https://ohiodnr.gov/wps/portal/gov/odnr/hunting-fishing', licenseUrl: 'https://ohiodnr.gov/buy-and-apply', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Largemouth Bass', 'Walleye', 'Steelhead'], notes: 'Lake Erie walleye fishery is world-renowned. Archery season starts October 1.' },\n  { id: 'oklahoma', name: 'Oklahoma', country: 'US', abbr: 'OK', agency: 'Oklahoma Dept. of Wildlife Conservation', agencyUrl: 'https://www.wildlifedepartment.com', licenseUrl: 'https://www.wildlifedepartment.com/licenses', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Largemouth Bass', 'Smallmouth Bass', 'Catfish'], notes: 'Lake Texoma produces exceptional striped bass. WMA permits required.' },\n  { id: 'oregon', name: 'Oregon', country: 'US', abbr: 'OR', agency: 'Oregon Dept. of Fish & Wildlife', agencyUrl: 'https://www.dfw.state.or.us', licenseUrl: 'https://www.oregonlicensing.dfw.state.or.us/', topSpecies: ['Rocky Mountain Elk', 'Mule Deer', 'Chinook Salmon', 'Steelhead', 'Pronghorn'], notes: 'Many elk and deer units are draw-only. Columbia River produces world-class salmon.' },\n  { id: 'pennsylvania', name: 'Pennsylvania', country: 'US', abbr: 'PA', agency: 'PA Game Commission / PA Fish & Boat Commission', agencyUrl: 'https://www.pgc.pa.gov', licenseUrl: 'https://www.huntfish.pa.gov/', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Black Bear', 'Brook Trout', 'Walleye'], notes: 'Second most hunters of any state. Antler restrictions apply statewide.' },\n  { id: 'rhode-island', name: 'Rhode Island', country: 'US', abbr: 'RI', agency: 'RI Dept. of Environmental Management', agencyUrl: 'https://dem.ri.gov/programs/fish-wildlife', licenseUrl: 'https://www.ri.gov/DEM/fishwild/', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Striped Bass', 'Bluefish', 'Tautog'], notes: 'Smallest hunting state but solid deer densities and excellent saltwater fishing.' },\n  { id: 'south-carolina', name: 'South Carolina', country: 'US', abbr: 'SC', agency: 'SC Dept. of Natural Resources', agencyUrl: 'https://www.dnr.sc.gov', licenseUrl: 'https://www.dnr.sc.gov/licenses/index.html', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Redfish', 'Flounder', 'Black Bear'], notes: 'Early season deer hunting starts in August. Coastal waters hold trophy redfish.' },\n  { id: 'south-dakota', name: 'South Dakota', country: 'US', abbr: 'SD', agency: 'SD Game, Fish & Parks', agencyUrl: 'https://gfp.sd.gov', licenseUrl: 'https://gfp.sd.gov/licenses/', topSpecies: ['Pheasant', 'Whitetail Deer', 'Mule Deer', 'Pronghorn', 'Walleye'], notes: 'World pheasant capital. Missouri River system is top walleye fishery.' },\n  { id: 'tennessee', name: 'Tennessee', country: 'US', abbr: 'TN', agency: 'Tennessee Wildlife Resources Agency', agencyUrl: 'https://www.tn.gov/twra', licenseUrl: 'https://license.gooutdoorstennessee.com/', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Largemouth Bass', 'Smallmouth Bass', 'Crappie'], notes: 'Draw-only quota hunts for premium areas. Lake Chickamauga produces world-class bass.' },\n  { id: 'texas', name: 'Texas', country: 'US', abbr: 'TX', agency: 'Texas Parks & Wildlife Dept.', agencyUrl: 'https://tpwd.texas.gov', licenseUrl: 'https://tpwd.texas.gov/huntwild/hunt/licenses/', topSpecies: ['Whitetail Deer', 'Mule Deer', 'Wild Turkey', 'Redfish', 'Largemouth Bass'], notes: 'More deer harvested annually than any state. Over 95% of land is private. Lease system dominant.' },\n  { id: 'utah', name: 'Utah', country: 'US', abbr: 'UT', agency: 'Utah Division of Wildlife Resources', agencyUrl: 'https://wildlife.utah.gov', licenseUrl: 'https://wildlife.utah.gov/licenses-and-permits/hunting-licenses.html', topSpecies: ['Mule Deer', 'Rocky Mountain Elk', 'Pronghorn', 'Bighorn Sheep', 'Rainbow Trout'], notes: 'Most premium tags are draw-only. Book Cliffs famous for trophy mule deer.' },\n  { id: 'vermont', name: 'Vermont', country: 'US', abbr: 'VT', agency: 'Vermont Fish & Wildlife Dept.', agencyUrl: 'https://vtfishandwildlife.com', licenseUrl: 'https://vtfishandwildlife.com/hunt/hunting-licenses-permits', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Black Bear', 'Brook Trout', 'Smallmouth Bass'], notes: 'Quality over quantity deer hunting. Trophy-class bears in the Northeast Kingdom.' },\n  { id: 'virginia', name: 'Virginia', country: 'US', abbr: 'VA', agency: 'Virginia Dept. of Wildlife Resources', agencyUrl: 'https://www.dwr.virginia.gov', licenseUrl: 'https://www.dwr.virginia.gov/licenses/', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Striped Bass', 'Largemouth Bass', 'Crappie'], notes: 'Shenandoah Valley and western mountains offer quality hunting. Chesapeake Bay stripers.' },\n  { id: 'washington', name: 'Washington', country: 'US', abbr: 'WA', agency: 'Washington Dept. of Fish & Wildlife', agencyUrl: 'https://wdfw.wa.gov', licenseUrl: 'https://wdfw.wa.gov/licenses', topSpecies: ['Rocky Mountain Elk', 'Mule Deer', 'Chinook Salmon', 'Steelhead', 'Halibut'], notes: 'Elk and deer permit draws for premium units. Columbia River salmon season varies annually.' },\n  { id: 'west-virginia', name: 'West Virginia', country: 'US', abbr: 'WV', agency: 'WV Division of Natural Resources', agencyUrl: 'https://wvdnr.gov', licenseUrl: 'https://wvdnr.gov/Licensing/', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Black Bear', 'Smallmouth Bass', 'Brook Trout'], notes: 'Mountain state with large public land base. Bear season concurrent with deer.' },\n  { id: 'wisconsin', name: 'Wisconsin', country: 'US', abbr: 'WI', agency: 'Wisconsin Dept. of Natural Resources', agencyUrl: 'https://dnr.wisconsin.gov', licenseUrl: 'https://goapps.wi.gov/licenses/', topSpecies: ['Whitetail Deer', 'Wild Turkey', 'Walleye', 'Muskie', 'Brown Trout'], notes: 'Antler point restrictions statewide. Muskie fishing in Hayward area is legendary.' },\n  { id: 'wyoming', name: 'Wyoming', country: 'US', abbr: 'WY', agency: 'Wyoming Game & Fish Dept.', agencyUrl: 'https://wgfd.wyo.gov', licenseUrl: 'https://wgfd.wyo.gov/Get-A-License', topSpecies: ['Rocky Mountain Elk', 'Mule Deer', 'Pronghorn', 'Bighorn Sheep', 'Brown Trout'], notes: 'Preference point system for premium tags. Some OTC elk licenses available.' },\n\n  // \u2500\u2500\u2500 CANADIAN PROVINCES \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  { id: 'alberta', name: 'Alberta', country: 'CA', abbr: 'AB', agency: 'Alberta Environment & Protected Areas', agencyUrl: 'https://www.alberta.ca/hunting.aspx', licenseUrl: 'https://www.mywildalberta.ca/hunting/licences-permits/default.aspx', topSpecies: ['Whitetail Deer', 'Mule Deer', 'Rocky Mountain Elk', 'Moose', 'Northern Pike'], notes: 'Non-residents require a licensed guide for big game. Draw tags for antelope and sheep.' },\n  { id: 'british-columbia', name: 'British Columbia', country: 'CA', abbr: 'BC', agency: 'BC Ministry of Forests \u2013 Wildlife Branch', agencyUrl: 'https://www2.gov.bc.ca/gov/content/sports-culture/recreation/hunting', licenseUrl: 'https://a100.gov.bc.ca/pub/erase/login.do?site=hli', topSpecies: ['Rocky Mountain Elk', 'Mule Deer', 'Moose', 'Grizzly Bear', 'Chinook Salmon'], notes: 'Grizzly bear hunting closed since 2017. World-class trophy opportunities for elk and moose.' },\n  { id: 'manitoba', name: 'Manitoba', country: 'CA', abbr: 'MB', agency: 'Manitoba Sustainable Development \u2013 Fish & Wildlife Branch', agencyUrl: 'https://www.gov.mb.ca/sd/wildlife', licenseUrl: 'https://www.gov.mb.ca/sd/wildlife/hunting/licences_permits.html', topSpecies: ['Whitetail Deer', 'Moose', 'Black Bear', 'Walleye', 'Northern Pike'], notes: 'Parklands region offers world-class whitetail. Moose draw in many zones.' },\n  { id: 'new-brunswick', name: 'New Brunswick', country: 'CA', abbr: 'NB', agency: 'NB Dept. of Natural Resources & Energy Development', agencyUrl: 'https://www2.gnb.ca/content/gnb/en/departments/erd/fish_wildlife.html', licenseUrl: 'https://www.fish-chasse.gnb.ca/', topSpecies: ['Whitetail Deer', 'Moose', 'Black Bear', 'Atlantic Salmon', 'Brook Trout'], notes: 'Moose lottery highly coveted. Atlantic salmon rivers are world-renowned.' },\n  { id: 'newfoundland', name: 'Newfoundland & Labrador', country: 'CA', abbr: 'NL', agency: 'NL Dept. of Fisheries, Forestry & Agriculture', agencyUrl: 'https://www.gov.nl.ca/ffa/wildlife', licenseUrl: 'https://www.gov.nl.ca/ffa/wildlife/licences-permits/', topSpecies: ['Woodland Caribou', 'Moose', 'Black Bear', 'Atlantic Salmon', 'Arctic Char'], notes: 'Remote wilderness. Woodland caribou herds offer unique trophy experience.' },\n  { id: 'nova-scotia', name: 'Nova Scotia', country: 'CA', abbr: 'NS', agency: 'NS Dept. of Natural Resources & Renewables', agencyUrl: 'https://novascotia.ca/natr/hunt/', licenseUrl: 'https://www.ns.wildlifelicense.com/', topSpecies: ['Whitetail Deer', 'Moose', 'Black Bear', 'Striped Bass', 'Atlantic Salmon'], notes: 'Moose restricted to cape Breton. Strong deer population. Striped bass fishing excellent.' },\n  { id: 'ontario', name: 'Ontario', country: 'CA', abbr: 'ON', agency: 'Ontario Ministry of Natural Resources & Forestry', agencyUrl: 'https://www.ontario.ca/page/hunting', licenseUrl: 'https://www.ontario.ca/page/get-hunting-licence', topSpecies: ['Moose', 'Whitetail Deer', 'Black Bear', 'Walleye', 'Muskie'], notes: 'Resident and non-resident bear seasons. Draw moose tags in most zones. Shield country epic.' },\n  { id: 'prince-edward-island', name: 'Prince Edward Island', country: 'CA', abbr: 'PE', agency: 'PEI Dept. of Environment, Energy & Climate Action', agencyUrl: 'https://www.princeedwardisland.ca/en/topic/hunting-and-trapping', licenseUrl: 'https://www.princeedwardisland.ca/en/service/purchase-hunting-licence', topSpecies: ['Whitetail Deer', 'Coyote', 'Striped Bass', 'Rainbow Trout'], notes: 'Small island province. Only deer hunting of significance. Excellent striped bass in estuaries.' },\n  { id: 'quebec', name: 'Quebec', country: 'CA', abbr: 'QC', agency: 'Minist\u00E8re des For\u00EAts, de la Faune et des Parcs', agencyUrl: 'https://www.quebec.ca/loisirs-sport-plein-air/chasse-peche', licenseUrl: 'https://www.quebec.ca/loisirs-sport-plein-air/chasse-peche/permis-chasse-peche', topSpecies: ['Moose', 'Whitetail Deer', 'Black Bear', 'Caribou', 'Walleye'], notes: 'Northern Quebec holds the George River caribou herd. Outfitter zones (ZECs) widely used.' },\n  { id: 'saskatchewan', name: 'Saskatchewan', country: 'CA', abbr: 'SK', agency: 'Saskatchewan Ministry of Environment', agencyUrl: 'https://www.saskatchewan.ca/residents/environment-public-health-and-safety/fish-and-wildlife/hunting', licenseUrl: 'https://posp.ca/', topSpecies: ['Whitetail Deer', 'Mule Deer', 'Moose', 'Elk', 'Northern Pike'], notes: 'World-class trophy whitetail. Boreal forest moose and bear hunting outstanding.' },\n  { id: 'northwest-territories', name: 'Northwest Territories', country: 'CA', abbr: 'NT', agency: 'NWT Dept. of Environment & Natural Resources', agencyUrl: 'https://www.enr.gov.nt.ca/en/services/wildlife', licenseUrl: 'https://www.enr.gov.nt.ca/en/services/hunting-licences', topSpecies: ['Barren-Ground Caribou', 'Moose', 'Musk Ox', 'Dall Sheep', 'Arctic Grayling'], notes: 'Remote fly-in hunts. Guide required for all non-resident big game. Dall sheep world-class.' },\n  { id: 'nunavut', name: 'Nunavut', country: 'CA', abbr: 'NU', agency: 'Nunavut Dept. of Environment', agencyUrl: 'https://www.gov.nu.ca/environment/information/hunting-regulations', licenseUrl: 'https://www.gov.nu.ca/environment/information/hunting-regulations', topSpecies: ['Polar Bear', 'Barren-Ground Caribou', 'Musk Ox', 'Narwhal', 'Arctic Char'], notes: 'Polar bear hunts via Inuit guide only. Extremely remote; all fly-in logistics required.' },\n  { id: 'yukon', name: 'Yukon', country: 'CA', abbr: 'YT', agency: 'Yukon Dept. of Environment \u2013 Wildlife Management', agencyUrl: 'https://yukon.ca/en/outdoor-recreation-and-wildlife/hunting', licenseUrl: 'https://yukon.ca/en/outdoor-recreation-and-wildlife/hunting/purchase-hunting-licence', topSpecies: ['Dall Sheep', 'Moose', 'Grizzly Bear', 'Mountain Caribou', 'Arctic Grayling'], notes: 'Guide required for all non-resident hunters. Dall sheep is the crown jewel trophy.' },\n];\n\nexport const TOP_LOCATIONS: TopLocation[] = [\n  // \u2500\u2500\u2500 NORTH AMERICA \u2013 FISHING (ranks 1\u201355) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  { id: 'kenai-river-ak', rank: 1, name: 'Kenai River', country: 'USA', region: 'Alaska', type: 'fishing', species: ['Chinook Salmon', 'Sockeye Salmon', 'Rainbow Trout'], description: 'The king salmon capital of the world with world-record Chinook potential', url: 'https://www.adfg.alaska.gov/index.cfm?adfg=fishingkenaipeninsula.main' },\n  { id: 'florida-keys', rank: 2, name: 'Florida Keys', country: 'USA', region: 'Florida', type: 'fishing', species: ['Tarpon', 'Bonefish', 'Permit', 'Mahi-Mahi'], description: 'Premier flats fishing and blue-water action stretching from Key Largo to Key West', url: 'https://www.fla-keys.com/fishing/' },\n  { id: 'chesapeake-bay', rank: 3, name: 'Chesapeake Bay', country: 'USA', region: 'Maryland/Virginia', type: 'fishing', species: ['Striped Bass', 'Blue Crab', 'Bluefish', 'Weakfish'], description: 'Largest estuary in North America and epicenter of East Coast striped bass fishing', url: 'https://www.chesapeakebayprogram.org/visit/fishing/' },\n  { id: 'lake-erie', rank: 4, name: 'Lake Erie', country: 'USA', region: 'Ohio/Pennsylvania/New York', type: 'fishing', species: ['Walleye', 'Smallmouth Bass', 'Yellow Perch', 'Steelhead'], description: 'Undisputed walleye capital of the world producing millions of fish each season', url: 'https://www.ohiodnr.gov/buy-and-apply/fishing' },\n  { id: 'san-juan-river-nm', rank: 5, name: 'San Juan River', country: 'USA', region: 'New Mexico', type: 'fishing', species: ['Rainbow Trout', 'Brown Trout'], description: 'Tailwater fishery holding 15,000+ fish per mile with trophy trout averaging 18 inches', url: 'https://www.wildlife.state.nm.us/fishing/fishing-areas/san-juan-river/' },\n  { id: 'madison-river-mt', rank: 6, name: 'Madison River', country: 'USA', region: 'Montana', type: 'fishing', species: ['Brown Trout', 'Rainbow Trout'], description: 'Legendary blue-ribbon trout stream flowing through Yellowstone and Gallatin valleys', url: 'https://fwp.mt.gov/fishing/fishingGuide' },\n  { id: 'bighorn-river-mt', rank: 7, name: 'Bighorn River', country: 'USA', region: 'Montana', type: 'fishing', species: ['Brown Trout', 'Rainbow Trout'], description: 'Tailwater fishery with density of 5,000+ large trout per mile below Yellowtail Dam', url: 'https://fwp.mt.gov/fishing' },\n  { id: 'henry-fork-id', rank: 8, name: \"Henry's Fork of the Snake\", country: 'USA', region: 'Idaho', type: 'fishing', species: ['Rainbow Trout', 'Brown Trout'], description: 'Legendary dry-fly fishery and home of the famous Railroad Ranch stretch', url: 'https://idfg.idaho.gov/fish/map' },\n  { id: 'green-river-ut', rank: 9, name: 'Green River', country: 'USA', region: 'Utah', type: 'fishing', species: ['Rainbow Trout', 'Brown Trout'], description: 'Crystal clear tailwater below Flaming Gorge Reservoir holds massive trout', url: 'https://wildlife.utah.gov/fishing.html' },\n  { id: 'boundary-waters-mn', rank: 10, name: 'Boundary Waters Canoe Area', country: 'USA', region: 'Minnesota', type: 'fishing', species: ['Walleye', 'Northern Pike', 'Smallmouth Bass', 'Lake Trout'], description: 'Over 1,000 pristine lakes along the US-Canada border with wilderness fishing', url: 'https://www.fs.usda.gov/detail/superior/specialplaces/?cid=stelprdb5109676' },\n  { id: 'lake-fork-tx', rank: 11, name: 'Lake Fork', country: 'USA', region: 'Texas', type: 'fishing', species: ['Largemouth Bass'], description: 'Holds more Texas ShareLunker qualifying bass (13+ lbs) than any other lake in the state', url: 'https://tpwd.texas.gov/fishboat/fish/recreational/lakes/lake_fork/' },\n  { id: 'guntersville-al', rank: 12, name: 'Lake Guntersville', country: 'USA', region: 'Alabama', type: 'fishing', species: ['Largemouth Bass', 'Striped Bass', 'Crappie'], description: 'One of the top bass lakes in the world, consistently producing tournament wins', url: 'https://www.outdooralabama.com/fishing/freshwater-fishing/lakes-and-reservoirs/lake-guntersville' },\n  { id: 'okeechobee-fl', rank: 13, name: 'Lake Okeechobee', country: 'USA', region: 'Florida', type: 'fishing', species: ['Largemouth Bass', 'Crappie', 'Bluegill'], description: 'Florida\\'s inland sea and one of the most productive bass fisheries in North America', url: 'https://myfwc.com/fishing/freshwater/recreational/lakes/okeechobee/' },\n  { id: 'columbia-river', rank: 14, name: 'Columbia River', country: 'USA', region: 'Oregon/Washington', type: 'fishing', species: ['Chinook Salmon', 'Steelhead', 'Sturgeon', 'Shad'], description: 'Iconic Pacific Northwest salmon and steelhead river with historic Bonneville Dam runs', url: 'https://www.dfw.state.or.us/fish/salmon/' },\n  { id: 'homosassa-springs-fl', rank: 15, name: 'Homosassa Springs', country: 'USA', region: 'Florida', type: 'fishing', species: ['Tarpon'], description: 'World capital of giant tarpon fishing, hosting some of the largest tarpon ever caught', url: 'https://myfwc.com/fishing/saltwater/' },\n  { id: 'lake-superior', rank: 16, name: 'Lake Superior', country: 'USA', region: 'Michigan/Minnesota/Wisconsin', type: 'fishing', species: ['Lake Trout', 'Coho Salmon', 'Brown Trout', 'Steelhead'], description: 'World\\'s largest freshwater lake by surface area with exceptional cold-water sportfishing', url: 'https://www.michigan.gov/dnr/fishing' },\n  { id: 'mille-lacs-mn', rank: 17, name: 'Mille Lacs Lake', country: 'USA', region: 'Minnesota', type: 'fishing', species: ['Walleye', 'Smallmouth Bass', 'Northern Pike'], description: 'Renowned walleye factory covering 132,000 acres in central Minnesota', url: 'https://www.dnr.state.mn.us/fishing/index.html' },\n  { id: 'st-lawrence-river', rank: 18, name: 'St. Lawrence River', country: 'USA', region: 'New York', type: 'fishing', species: ['Smallmouth Bass', 'Muskie', 'Northern Pike', 'Walleye'], description: 'Smallmouth bass fishing here is considered among the best in the world', url: 'https://www.dec.ny.gov/outdoor/fishing.html' },\n  { id: 'lake-champlain', rank: 19, name: 'Lake Champlain', country: 'USA', region: 'Vermont/New York', type: 'fishing', species: ['Smallmouth Bass', 'Largemouth Bass', 'Walleye', 'Northern Pike'], description: 'Consistently rates among the top five smallmouth bass fisheries in North America', url: 'https://vtfishandwildlife.com/fish' },\n  { id: 'delta-marshes-la', rank: 20, name: 'Louisiana Coastal Delta', country: 'USA', region: 'Louisiana', type: 'fishing', species: ['Redfish', 'Speckled Trout', 'Flounder', 'Tarpon'], description: 'Vast marsh ecosystem with legendary redfish and speckled trout fishing year-round', url: 'https://wlf.louisiana.gov/page/fishing' },\n  { id: 'outer-banks-nc', rank: 21, name: 'Outer Banks', country: 'USA', region: 'North Carolina', type: 'fishing', species: ['Red Drum', 'Striped Bass', 'Bluefin Tuna', 'Blue Marlin'], description: 'Where the warm Gulf Stream meets the cold Labrador Current creating incredible diversity', url: 'https://www.ncwildlife.org/fishing' },\n  { id: 'galveston-bay-tx', rank: 22, name: 'Galveston Bay', country: 'USA', region: 'Texas', type: 'fishing', species: ['Redfish', 'Speckled Trout', 'Flounder', 'Cobia'], description: 'One of the most productive coastal bays in the Gulf, easily accessible from Houston', url: 'https://tpwd.texas.gov/fishboat/fish/recreational/saltwater/' },\n  { id: 'south-platte-co', rank: 23, name: 'South Platte River', country: 'USA', region: 'Colorado', type: 'fishing', species: ['Brown Trout', 'Rainbow Trout'], description: 'Blue-ribbon tailwater fishery holding trophy trout within an hour of Denver', url: 'https://cpw.state.co.us/thingstodo/Pages/Fishing.aspx' },\n  { id: 'delaware-river', rank: 24, name: 'Delaware River', country: 'USA', region: 'Pennsylvania/New Jersey', type: 'fishing', species: ['American Shad', 'Smallmouth Bass', 'Walleye', 'Brown Trout'], description: 'One of the last great American shad runs east of the Rockies', url: 'https://www.huntfish.pa.gov/' },\n  { id: 'kodiak-ak', rank: 25, name: 'Kodiak Island', country: 'USA', region: 'Alaska', type: 'fishing', species: ['Halibut', 'Chinook Salmon', 'Coho Salmon', 'Rockfish'], description: 'Remote island fishery with massive Pacific halibut to 300+ lbs and Pacific salmon', url: 'https://www.adfg.alaska.gov/index.cfm?adfg=fishingkodiak.main' },\n  { id: 'cape-cod', rank: 26, name: 'Cape Cod Bay', country: 'USA', region: 'Massachusetts', type: 'fishing', species: ['Striped Bass', 'Bluefish', 'Bluefin Tuna', 'Fluke'], description: 'Iconic Northeast fishery where giant bluefin tuna feed in summer alongside striped bass', url: 'https://www.mass.gov/fishing' },\n  { id: 'niagara-river-ny', rank: 27, name: 'Niagara River', country: 'USA', region: 'New York', type: 'fishing', species: ['Steelhead', 'Brown Trout', 'Chinook Salmon', 'Smallmouth Bass'], description: 'Short powerful river with massive Lake Erie/Ontario tributary runs of steelhead', url: 'https://www.dec.ny.gov/outdoor/fishing.html' },\n  { id: 'san-francisco-bay', rank: 28, name: 'San Francisco Bay & Delta', country: 'USA', region: 'California', type: 'fishing', species: ['Striped Bass', 'Sturgeon', 'Halibut', 'Salmon'], description: 'World-class striped bass and sturgeon fishing in the largest estuary on the West Coast', url: 'https://wildlife.ca.gov/Fishing' },\n  { id: 'puget-sound', rank: 29, name: 'Puget Sound', country: 'USA', region: 'Washington', type: 'fishing', species: ['Chinook Salmon', 'Coho Salmon', 'Halibut', 'Lingcod'], description: 'Massive inland saltwater sea offering year-round salmon and bottomfish action', url: 'https://wdfw.wa.gov/fishing' },\n  { id: 'clear-lake-ca', rank: 30, name: 'Clear Lake', country: 'USA', region: 'California', type: 'fishing', species: ['Largemouth Bass', 'Crappie', 'Bluegill'], description: 'California\\'s largest natural lake and one of the oldest lakes in the world', url: 'https://wildlife.ca.gov/Fishing/Inland/N-CentralRegion' },\n  { id: 'oklahoma-lake-texoma', rank: 31, name: 'Lake Texoma', country: 'USA', region: 'Oklahoma/Texas', type: 'fishing', species: ['Striped Bass', 'Largemouth Bass', 'Catfish'], description: 'Landlocked striped bass fishing here rivals anywhere in North America', url: 'https://tpwd.texas.gov/fishboat/fish/recreational/lakes/texoma/' },\n  { id: 'brule-river-wi', rank: 32, name: 'Brule River', country: 'USA', region: 'Wisconsin', type: 'fishing', species: ['Steelhead', 'Coho Salmon', 'Brook Trout', 'Brown Trout'], description: 'The presidential trout stream; cool spring-fed waters hold exceptional trout', url: 'https://dnr.wisconsin.gov/topic/Fishing' },\n  { id: 'sipsey-fork-al', rank: 33, name: 'Sipsey Fork \u2013 Smith Lake', country: 'USA', region: 'Alabama', type: 'fishing', species: ['Brown Trout', 'Rainbow Trout'], description: 'One of the best tailwater trout fisheries in the Southeast', url: 'https://www.outdooralabama.com/fishing' },\n  { id: 'upper-miss-mn', rank: 34, name: 'Upper Mississippi River', country: 'USA', region: 'Minnesota/Wisconsin', type: 'fishing', species: ['Walleye', 'Smallmouth Bass', 'Catfish', 'Sauger'], description: 'Natural river pool system providing world-class multi-species fishing', url: 'https://www.dnr.state.mn.us/fishing/index.html' },\n  { id: 'sebago-lake-me', rank: 35, name: 'Sebago Lake', country: 'USA', region: 'Maine', type: 'fishing', species: ['Lake Trout', 'Landlocked Salmon', 'Smallmouth Bass'], description: 'Maine\\'s deepest lake and home to the largest landlocked salmon in the world', url: 'https://www.maine.gov/ifw/fishing-boating/index.html' },\n  { id: 'lower-niagara', rank: 36, name: 'Lower Niagara River Gorge', country: 'USA', region: 'New York', type: 'fishing', species: ['Steelhead', 'Brown Trout', 'Chinook Salmon'], description: 'One of the most productive steelhead rivers in the Great Lakes basin', url: 'https://www.dec.ny.gov/outdoor/fishing.html' },\n  { id: 'thousand-islands', rank: 37, name: 'Thousand Islands', country: 'USA', region: 'New York', type: 'fishing', species: ['Muskie', 'Northern Pike', 'Walleye', 'Smallmouth Bass'], description: 'Trophy muskie and smallmouth bass where the St. Lawrence meets Lake Ontario', url: 'https://www.dec.ny.gov/outdoor/fishing.html' },\n  { id: 'lake-michigan-salmon', rank: 38, name: 'Lake Michigan \u2013 Sheboygan', country: 'USA', region: 'Wisconsin', type: 'fishing', species: ['Chinook Salmon', 'Coho Salmon', 'Steelhead', 'Brown Trout'], description: 'Legendary charter salmon fishery with massive king salmon runs in summer', url: 'https://dnr.wisconsin.gov/topic/Fishing' },\n  { id: 'kenai-peninsula-halibut', rank: 39, name: 'Homer Spit \u2013 Halibut Cove', country: 'USA', region: 'Alaska', type: 'fishing', species: ['Halibut', 'Lingcod', 'Rockfish'], description: 'Pacific halibut fishing capital with fish regularly exceeding 200 lbs', url: 'https://www.adfg.alaska.gov/sf/OncorLicensing/' },\n  { id: 'sam-rayburn-tx', rank: 40, name: 'Sam Rayburn Reservoir', country: 'USA', region: 'Texas', type: 'fishing', species: ['Largemouth Bass', 'Catfish', 'Crappie'], description: 'Largest reservoir in Texas and consistently ranks top 10 for largemouth bass', url: 'https://tpwd.texas.gov/fishboat/fish/recreational/lakes/sam_rayburn/' },\n  { id: 'reelfoot-lake-tn', rank: 41, name: 'Reelfoot Lake', country: 'USA', region: 'Tennessee', type: 'fishing', species: ['Crappie', 'Largemouth Bass', 'Bluegill', 'Catfish'], description: 'Earthquake-formed lake and perhaps the greatest crappie fishery in North America', url: 'https://www.tn.gov/twra/fishing.html' },\n  { id: 'lake-of-the-ozarks', rank: 42, name: 'Lake of the Ozarks', country: 'USA', region: 'Missouri', type: 'fishing', species: ['Largemouth Bass', 'Striped Bass', 'Crappie', 'Walleye'], description: 'Massive reservoir with over 1,100 miles of shoreline and world-class bass fishing', url: 'https://mdc.mo.gov/fishing' },\n  { id: 'missouri-river-mt', rank: 43, name: 'Missouri River Tailwater', country: 'USA', region: 'Montana', type: 'fishing', species: ['Brown Trout', 'Rainbow Trout'], description: 'Tailwater below Canyon Ferry Dam holds large wild trout in crystal clear water', url: 'https://fwp.mt.gov/fishing' },\n  { id: 'deschutes-river-or', rank: 44, name: 'Deschutes River', country: 'USA', region: 'Oregon', type: 'fishing', species: ['Steelhead', 'Chinook Salmon', 'Rainbow Trout'], description: 'One of the great steelhead and trout rivers in the Pacific Northwest', url: 'https://www.dfw.state.or.us/fish/' },\n  { id: 'north-platte-wy', rank: 45, name: 'North Platte River', country: 'USA', region: 'Wyoming', type: 'fishing', species: ['Brown Trout', 'Rainbow Trout'], description: 'Grey Reef section holds massive brown trout exceeding 20 inches in rich tailwater', url: 'https://wgfd.wyo.gov/Fishing' },\n  { id: 'biscayne-bay-fl', rank: 46, name: 'Biscayne Bay', country: 'USA', region: 'Florida', type: 'fishing', species: ['Bonefish', 'Permit', 'Snook', 'Tarpon'], description: 'Urban flats fishery at Miami\\'s back door with world-class bonefish and permit', url: 'https://myfwc.com/fishing/saltwater/' },\n  { id: 'lake-havasu-az', rank: 47, name: 'Lake Havasu', country: 'USA', region: 'Arizona/California', type: 'fishing', species: ['Striped Bass', 'Largemouth Bass', 'Smallmouth Bass'], description: 'Desert reservoir world-famous for trophy striped bass and multi-species action', url: 'https://www.azgfd.com/fishing/' },\n  { id: 'lower-colorado-az', rank: 48, name: 'Lower Colorado River', country: 'USA', region: 'Arizona', type: 'fishing', species: ['Flathead Catfish', 'Striped Bass', 'Largemouth Bass'], description: 'Massive flathead catfish and giant striped bass in warm river stretches', url: 'https://www.azgfd.com/fishing/' },\n  { id: 'conowingo-dam', rank: 49, name: 'Conowingo Dam \u2013 Susquehanna', country: 'USA', region: 'Maryland', type: 'fishing', species: ['Striped Bass', 'American Shad', 'Catfish'], description: 'Legendary striper concentration below the dam draws anglers from the entire East Coast', url: 'https://dnr.maryland.gov/fisheries/pages/index.aspx' },\n  { id: 'lake-ontario-salmon', rank: 50, name: 'Lake Ontario \u2013 Salmon River', country: 'USA', region: 'New York', type: 'fishing', species: ['Chinook Salmon', 'Coho Salmon', 'Steelhead', 'Brown Trout'], description: 'Salmon River at Pulaski holds one of the largest Great Lakes salmon runs in the US', url: 'https://www.dec.ny.gov/outdoor/fishing.html' },\n  { id: 'skeena-river-bc', rank: 51, name: 'Skeena River', country: 'Canada', region: 'British Columbia', type: 'fishing', species: ['Steelhead', 'Chinook Salmon', 'Coho Salmon'], description: 'Premier steelhead river in the world, drawing fly anglers from across the globe', url: 'https://www2.gov.bc.ca/gov/content/sports-culture/recreation/fishing' },\n  { id: 'thompson-river-bc', rank: 52, name: 'Thompson River', country: 'Canada', region: 'British Columbia', type: 'fishing', species: ['Steelhead', 'Chinook Salmon'], description: 'Famous for wild Thompson steelhead, one of the largest races in the world', url: 'https://www2.gov.bc.ca/gov/content/sports-culture/recreation/fishing' },\n  { id: 'lake-of-the-woods', rank: 53, name: 'Lake of the Woods', country: 'Canada', region: 'Ontario/Manitoba', type: 'fishing', species: ['Walleye', 'Muskie', 'Northern Pike', 'Lake Trout'], description: 'Over 14,000 islands and 65,000 miles of shoreline full of trophy walleye and muskie', url: 'https://www.ontario.ca/page/fishing' },\n  { id: 'restigouche-river-nb', rank: 54, name: 'Restigouche River', country: 'Canada', region: 'New Brunswick', type: 'fishing', species: ['Atlantic Salmon'], description: 'One of the last pristine Atlantic salmon rivers in eastern Canada', url: 'https://www.fish-chasse.gnb.ca/' },\n  { id: 'miramichi-river-nb', rank: 55, name: 'Miramichi River', country: 'Canada', region: 'New Brunswick', type: 'fishing', species: ['Atlantic Salmon'], description: 'The most famous Atlantic salmon river in North America with storied pools', url: 'https://www.fish-chasse.gnb.ca/' },\n\n  // \u2500\u2500\u2500 NORTH AMERICA \u2013 HUNTING (ranks 56\u2013110) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  { id: 'kaibab-az', rank: 56, name: 'Kaibab Plateau \u2013 North Rim', country: 'USA', region: 'Arizona', type: 'hunting', species: ['Mule Deer'], description: 'Produces more Boone & Crockett bucks per square mile than anywhere in North America', url: 'https://www.azgfd.com/hunting/' },\n  { id: 'texas-hill-country', rank: 57, name: 'Texas Hill Country', country: 'USA', region: 'Texas', type: 'hunting', species: ['Whitetail Deer', 'Wild Turkey', 'Axis Deer', 'Wild Boar'], description: 'Rolling cedar hills with the highest density of whitetail deer in the world', url: 'https://tpwd.texas.gov/huntwild/hunt/' },\n  { id: 'iowa-river-bottom', rank: 58, name: 'Iowa River Bottom Corridor', country: 'USA', region: 'Iowa', type: 'hunting', species: ['Whitetail Deer'], description: 'Consistently produces more Boone & Crockett whitetails than any other state', url: 'https://www.iowadnr.gov/Hunting' },\n  { id: 'kodiak-island-bear', rank: 59, name: 'Kodiak Island', country: 'USA', region: 'Alaska', type: 'hunting', species: ['Kodiak Brown Bear', 'Blacktail Deer', 'Sitka Black-tailed Deer'], description: 'Home of the world\\'s largest brown bears; non-residents must use licensed guide', url: 'https://www.adfg.alaska.gov/index.cfm?adfg=blackbearhunting.main' },\n  { id: 'alaska-peninsula', rank: 60, name: 'Alaska Peninsula', country: 'USA', region: 'Alaska', type: 'hunting', species: ['Brown Bear', 'Moose', 'Caribou', 'Dall Sheep'], description: 'Remote wilderness offering the complete Alaska big game experience', url: 'https://www.adfg.alaska.gov/index.cfm?adfg=hunting.main' },\n  { id: 'colorado-unit-2', rank: 61, name: 'Colorado Unit 2 \u2013 Grand Mesa', country: 'USA', region: 'Colorado', type: 'hunting', species: ['Rocky Mountain Elk', 'Mule Deer'], description: 'Legendary over-the-counter elk unit producing hundreds of bulls each season', url: 'https://cpw.state.co.us/thingstodo/Pages/Hunting.aspx' },\n  { id: 'south-texas-brush', rank: 62, name: 'South Texas Brush Country', country: 'USA', region: 'Texas', type: 'hunting', species: ['Whitetail Deer', 'Mule Deer', 'Wild Boar', 'Nilgai'], description: 'Dense brush produces some of the largest-antlered whitetails in North America', url: 'https://tpwd.texas.gov/huntwild/hunt/' },\n  { id: 'wyoming-region-g', rank: 63, name: 'Wyoming Region G \u2013 Sublette', country: 'USA', region: 'Wyoming', type: 'hunting', species: ['Rocky Mountain Elk', 'Mule Deer', 'Pronghorn'], description: 'One of the premier draw elk units in Wyoming with exceptional bull quality', url: 'https://wgfd.wyo.gov/Hunting' },\n  { id: 'kansas-flint-hills', rank: 64, name: 'Kansas Flint Hills', country: 'USA', region: 'Kansas', type: 'hunting', species: ['Whitetail Deer', 'Pheasant', 'Wild Turkey'], description: 'Last remaining tallgrass prairie in America with tremendous late-season deer hunting', url: 'https://ksoutdoors.com/Hunting' },\n  { id: 'nez-perce-idaho', rank: 65, name: 'Clearwater Region \u2013 Idaho', country: 'USA', region: 'Idaho', type: 'hunting', species: ['Rocky Mountain Elk', 'Mule Deer', 'Black Bear'], description: 'OTC elk opportunity in one of the largest wilderness areas in the lower 48', url: 'https://idfg.idaho.gov/hunt' },\n  { id: 'brooks-range-ak', rank: 66, name: 'Brooks Range', country: 'USA', region: 'Alaska', type: 'hunting', species: ['Dall Sheep', 'Barren-Ground Caribou', 'Grizzly Bear', 'Moose'], description: 'Arctic mountain range with Dall sheep, caribou, and grizzly bear in remote wilderness', url: 'https://www.adfg.alaska.gov/index.cfm?adfg=hunting.main' },\n  { id: 'nevada-ruby-mountains', rank: 67, name: 'Ruby Mountains \u2013 Nevada', country: 'USA', region: 'Nevada', type: 'hunting', species: ['Rocky Mountain Elk', 'Mule Deer', 'Desert Bighorn'], description: 'Nevada\\'s most coveted draw hunts with trophy elk and the majestic desert bighorn', url: 'https://www.ndow.org/hunting/' },\n  { id: 'utah-book-cliffs', rank: 68, name: 'Utah Book Cliffs', country: 'USA', region: 'Utah', type: 'hunting', species: ['Mule Deer'], description: 'Remote plateau country famous for producing enormous non-typical mule deer', url: 'https://wildlife.utah.gov/hunting.html' },\n  { id: 'nm-valles-caldera', rank: 69, name: 'Valles Caldera \u2013 New Mexico', country: 'USA', region: 'New Mexico', type: 'hunting', species: ['Rocky Mountain Elk', 'Mule Deer'], description: 'Ancient volcanic caldera with trophy elk in stunning high-altitude meadows', url: 'https://www.wildlife.state.nm.us/hunting/' },\n  { id: 'mississippi-delta', rank: 70, name: 'Mississippi Delta', country: 'USA', region: 'Mississippi', type: 'hunting', species: ['Whitetail Deer', 'Wild Turkey', 'Wood Duck', 'Mallard'], description: 'Rich agricultural delta with giant whitetails and incredible duck hunting in flooded timber', url: 'https://www.mdwfp.com/hunting' },\n  { id: 'illinois-river-bottom-il', rank: 71, name: 'Illinois River Bottom', country: 'USA', region: 'Illinois', type: 'hunting', species: ['Whitetail Deer', 'Canada Goose', 'Mallard'], description: 'Agricultural river corridor with some of the largest-bodied whitetails in the US', url: 'https://www.dnr.illinois.gov/hunting' },\n  { id: 'nd-waterfowl', rank: 72, name: 'Prairie Potholes \u2013 North Dakota', country: 'USA', region: 'North Dakota', type: 'hunting', species: ['Mallard', 'Canada Goose', 'Snow Goose', 'Pheasant'], description: 'The duck factory of North America with concentrations of breeding and staging waterfowl', url: 'https://gf.nd.gov/hunting' },\n  { id: 'arkansas-flooded-timber', rank: 73, name: 'Arkansas Flooded Timber', country: 'USA', region: 'Arkansas', type: 'hunting', species: ['Mallard', 'Wood Duck', 'Canada Goose'], description: 'Stuttgart, Arkansas is the duck hunting capital of the world for flooded timber ducks', url: 'https://www.agfc.com/en/hunting' },\n  { id: 'sd-pheasant', rank: 74, name: 'South Dakota Pheasant Country', country: 'USA', region: 'South Dakota', type: 'hunting', species: ['Ring-necked Pheasant'], description: 'More wild roosters per square mile than anywhere else on Earth in a good year', url: 'https://gfp.sd.gov/hunting/' },\n  { id: 'kenai-moose', rank: 75, name: 'Kenai Peninsula \u2013 Moose', country: 'USA', region: 'Alaska', type: 'hunting', species: ['Moose', 'Brown Bear', 'Black Bear'], description: 'Classic Alaskan moose habitat with Kenai Refuge producing Boone & Crockett bulls', url: 'https://www.adfg.alaska.gov/index.cfm?adfg=moosehunting.main' },\n  { id: 'oregon-eastern-unit', rank: 76, name: 'Eastern Oregon Blue Mountains', country: 'USA', region: 'Oregon', type: 'hunting', species: ['Rocky Mountain Elk', 'Mule Deer', 'Pronghorn'], description: 'Remote high desert mountains with quality over-the-counter elk opportunities', url: 'https://www.dfw.state.or.us/wildlife/hunting/' },\n  { id: 'maine-moose', rank: 77, name: 'Maine North Woods \u2013 Moose', country: 'USA', region: 'Maine', type: 'hunting', species: ['Moose', 'Black Bear', 'Whitetail Deer'], description: 'Boreal forest moose country with the largest moose permit lottery in the lower 48', url: 'https://www.maine.gov/ifw/hunting-trapping' },\n  { id: 'mt-region-7', rank: 78, name: 'Montana Region 7 \u2013 Northeast', country: 'USA', region: 'Montana', type: 'hunting', species: ['Whitetail Deer', 'Mule Deer', 'Pronghorn', 'Elk'], description: 'Shortgrass prairie with trophy mule and whitetail deer plus pronghorn', url: 'https://fwp.mt.gov/hunting' },\n  { id: 'wa-cascade-elk', rank: 79, name: 'Washington Cascades \u2013 Elk', country: 'USA', region: 'Washington', type: 'hunting', species: ['Rocky Mountain Elk', 'Blacktail Deer', 'Mule Deer'], description: 'Dense old-growth forest elk hunting in one of the most rugged landscapes in the lower 48', url: 'https://wdfw.wa.gov/hunting' },\n  { id: 'nc-bear-country', rank: 80, name: 'NC Coastal Bear Country', country: 'USA', region: 'North Carolina', type: 'hunting', species: ['Black Bear'], description: 'Densest black bear population in the eastern US in pocosins and swamps', url: 'https://www.ncwildlife.org/hunting' },\n  { id: 'al-black-belt', rank: 81, name: 'Alabama Black Belt Region', country: 'USA', region: 'Alabama', type: 'hunting', species: ['Whitetail Deer', 'Wild Turkey'], description: 'Rich chalk soil growing massive-bodied whitetails with huge antlers', url: 'https://www.outdooralabama.com/hunting' },\n  { id: 'ga-plantation-country', rank: 82, name: 'Georgia \u2013 Quail Plantation Country', country: 'USA', region: 'Georgia', type: 'hunting', species: ['Bobwhite Quail', 'Whitetail Deer', 'Wild Turkey'], description: 'Longleaf pine savannas of south Georgia produce wild quail hunting on classic plantations', url: 'https://georgiawildlife.com/hunting' },\n  { id: 'sk-whitetail', rank: 83, name: 'Saskatchewan Parklands \u2013 Whitetail', country: 'Canada', region: 'Saskatchewan', type: 'hunting', species: ['Whitetail Deer'], description: 'Consistently produces the largest-antlered wild whitetails on the planet', url: 'https://posp.ca/' },\n  { id: 'ab-elk', rank: 84, name: 'Alberta Foothills \u2013 Elk & Mule Deer', country: 'Canada', region: 'Alberta', type: 'hunting', species: ['Rocky Mountain Elk', 'Mule Deer', 'White-tailed Deer', 'Moose'], description: 'Foothills east of the Rockies hold trophy elk and huge mule deer bucks', url: 'https://www.mywildalberta.ca/hunting/licences-permits/default.aspx' },\n  { id: 'bc-stone-sheep', rank: 85, name: 'Northern BC \u2013 Stone Sheep', country: 'Canada', region: 'British Columbia', type: 'hunting', species: ['Stone Sheep', 'Mountain Goat', 'Moose', 'Grizzly Bear'], description: 'Spatsizi Plateau area holds world-class Stone sheep in true wilderness conditions', url: 'https://a100.gov.bc.ca/pub/erase/login.do?site=hli' },\n  { id: 'yukon-dall-sheep', rank: 86, name: 'Yukon \u2013 Dall Sheep', country: 'Canada', region: 'Yukon', type: 'hunting', species: ['Dall Sheep', 'Moose', 'Grizzly Bear', 'Mountain Caribou'], description: 'The Yukon\\'s remote mountains produce magnificent full-curl Dall rams', url: 'https://yukon.ca/en/outdoor-recreation-and-wildlife/hunting/purchase-hunting-licence' },\n  { id: 'nwt-caribou', rank: 87, name: 'NWT Barren Grounds \u2013 Caribou', country: 'Canada', region: 'Northwest Territories', type: 'hunting', species: ['Barren-Ground Caribou', 'Musk Ox'], description: 'Dramatic tundra hunt for Barren Ground caribou bulls migrating through the NWT', url: 'https://www.enr.gov.nt.ca/en/services/wildlife' },\n  { id: 'mb-bear', rank: 88, name: 'Manitoba \u2013 Black Bear', country: 'Canada', region: 'Manitoba', type: 'hunting', species: ['Black Bear', 'Moose', 'Whitetail Deer'], description: 'World-record black bears have come from Manitoba\\'s boreal forests', url: 'https://www.gov.mb.ca/sd/wildlife/hunting/licences_permits.html' },\n  { id: 'nl-woodland-caribou', rank: 89, name: 'Newfoundland \u2013 Woodland Caribou', country: 'Canada', region: 'Newfoundland', type: 'hunting', species: ['Woodland Caribou', 'Moose', 'Black Bear'], description: 'Island province with the largest woodland caribou herd in the world', url: 'https://www.gov.nl.ca/ffa/wildlife/licences-permits/' },\n  { id: 'co-goose-creek', rank: 90, name: 'Colorado Elk \u2013 Gunnison Basin', country: 'USA', region: 'Colorado', type: 'hunting', species: ['Rocky Mountain Elk', 'Mule Deer'], description: 'Gunnison Basin holds one of the largest elk herds in Colorado with draw-tag hunts', url: 'https://cpw.state.co.us/thingstodo/Pages/Hunting.aspx' },\n  { id: 'wy-pronghorn', rank: 91, name: 'Wyoming Pronghorn \u2013 Red Desert', country: 'USA', region: 'Wyoming', type: 'hunting', species: ['Pronghorn'], description: 'Sage-covered desert holding the largest pronghorn herds in North America', url: 'https://wgfd.wyo.gov/Hunting' },\n  { id: 'nj-whitetail', rank: 92, name: 'New Jersey Pine Barrens \u2013 Deer', country: 'USA', region: 'New Jersey', type: 'hunting', species: ['Whitetail Deer'], description: 'Dense forests and agricultural edges produce heavy-antlered bucks', url: 'https://www.nj.gov/dep/fgw/hunting.htm' },\n  { id: 'wi-musky-deer', rank: 93, name: 'Wisconsin Northwoods \u2013 Deer & Bear', country: 'USA', region: 'Wisconsin', type: 'hunting', species: ['Whitetail Deer', 'Black Bear', 'Wild Turkey'], description: 'Big woods whitetail hunting with the highest legal harvest of deer in the Midwest', url: 'https://dnr.wisconsin.gov/topic/Hunt' },\n  { id: 'mn-moose', rank: 94, name: 'Minnesota Arrowhead \u2013 Moose', country: 'USA', region: 'Minnesota', type: 'hunting', species: ['Moose', 'Black Bear', 'Ruffed Grouse'], description: 'Border country with boreal forest moose habitat along the US-Canada boundary', url: 'https://www.dnr.state.mn.us/hunting/index.html' },\n  { id: 'wv-black-bear', rank: 95, name: 'West Virginia \u2013 Black Bear', country: 'USA', region: 'West Virginia', type: 'hunting', species: ['Black Bear', 'Whitetail Deer', 'Wild Turkey'], description: 'Mountain state with largest bear harvest in the East outside of Pennsylvania', url: 'https://wvdnr.gov/Hunting/' },\n  { id: 'la-coastal-waterfowl', rank: 96, name: 'Louisiana Coastal Marshes \u2013 Ducks', country: 'USA', region: 'Louisiana', type: 'hunting', species: ['Mallard', 'Teal', 'Pintail', 'Widgeon'], description: 'The Louisiana Delta receives the highest concentration of wintering ducks in North America', url: 'https://wlf.louisiana.gov/page/hunting' },\n\n  // \u2500\u2500\u2500 INTERNATIONAL \u2013 HUNTING (ranks 97\u2013145) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  { id: 'tanzania-selous', rank: 97, name: 'Selous Game Reserve', country: 'Tanzania', region: 'East Africa', type: 'hunting', species: ['Cape Buffalo', 'Lion', 'Leopard', 'Hippo', 'Elephant'], description: 'Largest protected area in Africa offering the most complete dangerous game safari', url: 'https://www.tanzaniatourism.go.tz' },\n  { id: 'namibia-thornbush', rank: 98, name: 'Namibia Plains & Thornbush', country: 'Namibia', region: 'Southern Africa', type: 'hunting', species: ['Kudu', 'Gemsbok', 'Springbok', 'Eland', 'Leopard'], description: 'Superb hunting on private conservancies for Africa\\'s iconic plains game', url: 'https://www.meft.gov.na/hunting' },\n  { id: 'south-africa-limpopo', rank: 99, name: 'Limpopo Province', country: 'South Africa', region: 'Southern Africa', type: 'hunting', species: ['Cape Buffalo', 'Sable', 'Kudu', 'Zebra', 'Leopard'], description: 'Premier South African hunting province with diverse big five and plains game', url: 'https://www.capenature.co.za' },\n  { id: 'mozambique-niassa', rank: 100, name: 'Niassa Reserve', country: 'Mozambique', region: 'Southern Africa', type: 'hunting', species: ['Cape Buffalo', 'Sable', 'Nyala', 'Lion'], description: 'Remote 42,000 square mile reserve with exceptional buffalo and sable hunting', url: 'https://www.niassareserve.org' },\n  { id: 'zimbabwe-hwange', rank: 101, name: 'Hwange Concessions', country: 'Zimbabwe', region: 'Southern Africa', type: 'hunting', species: ['Cape Buffalo', 'Elephant', 'Leopard', 'Sable'], description: 'Adjacent to Hwange National Park with world-class elephant and buffalo hunting', url: 'https://www.zimparks.org.zw' },\n  { id: 'zambia-kafue', rank: 102, name: 'Kafue National Park Concessions', country: 'Zambia', region: 'Central Africa', type: 'hunting', species: ['Cape Buffalo', 'Lion', 'Leopard', 'Sable', 'Roan'], description: 'Africa\\'s second largest park with some of the finest cat hunting on the continent', url: 'https://www.zawa.org.zm' },\n  { id: 'ethiopia-mountain-nyala', rank: 103, name: 'Bale Mountains \u2013 Ethiopia', country: 'Ethiopia', region: 'East Africa', type: 'hunting', species: ['Mountain Nyala', 'Menelik\\'s Bushbuck', 'Walia Ibex'], description: 'One of the last places on earth to hunt the endemic mountain nyala at altitude', url: 'https://www.ewca.gov.et' },\n  { id: 'new-zealand-red-stag', rank: 104, name: 'South Island \u2013 Red Stag & Tahr', country: 'New Zealand', region: 'Oceania', type: 'hunting', species: ['Red Stag', 'Himalayan Tahr', 'Chamois', 'Fallow Deer'], description: 'Free-range alpine hunting for trophy stags and himalayan tahr in spectacular mountains', url: 'https://www.doc.govt.nz/parks-and-recreation/things-to-do/hunting/' },\n  { id: 'argentina-red-stag', rank: 105, name: 'Patagonia \u2013 Red Stag & Wild Boar', country: 'Argentina', region: 'South America', type: 'hunting', species: ['Red Stag', 'Wild Boar', 'Water Buffalo', 'Puma'], description: 'European red stag roar hunts against the backdrop of Andean peaks', url: 'https://www.mininterior.gov.ar/turismo/hunt.php' },\n  { id: 'scotland-red-stag', rank: 106, name: 'Scottish Highlands \u2013 Red Stag', country: 'United Kingdom', region: 'Europe', type: 'hunting', species: ['Red Stag', 'Roe Deer', 'Red Grouse'], description: 'Ancient driven grouse and walk-and-stalk red stag on historic Scottish estates', url: 'https://www.snh.gov.uk/wildlife-and-conservation/natures-power/deer/' },\n  { id: 'spain-red-stag', rank: 107, name: 'Castilla-La Mancha \u2013 Monter\u00EDa', country: 'Spain', region: 'Europe', type: 'hunting', species: ['Red Deer (Stag)', 'Wild Boar', 'Iberian Ibex', 'Fallow Deer'], description: 'Spanish monter\u00EDa driven hunts producing some of the largest red deer in the world', url: 'https://www.miteco.gob.es/es/biodiversidad/temas/caza-y-pesca/' },\n  { id: 'mongolia-argali', rank: 108, name: 'Mongolian Altai \u2013 Argali Sheep', country: 'Mongolia', region: 'Central Asia', type: 'hunting', species: ['Altai Argali', 'Ibex', 'Mongolian Gazelle', 'Wolf'], description: 'Home of the world\\'s largest wild sheep\u2014the Altai Argali\u2014in remote mountain terrain', url: 'https://www.mnpaa.org.mn' },\n  { id: 'kyrgyzstan-marco-polo', rank: 109, name: 'Kyrgyz Tien Shan \u2013 Marco Polo', country: 'Kyrgyzstan', region: 'Central Asia', type: 'hunting', species: ['Marco Polo Sheep', 'Ibex', 'Snow Leopard (photographic)'], description: 'Roof of the world at 15,000+ feet pursuing the magnificent Marco Polo argali', url: 'https://www.nature.kg' },\n  { id: 'hungary-red-stag', rank: 110, name: 'Transdanubia \u2013 Hungarian Red Stag', country: 'Hungary', region: 'Europe', type: 'hunting', species: ['Red Deer (Stag)', 'Wild Boar', 'Roe Deer', 'Fallow Deer'], description: 'Hungary consistently produces the largest antlered red stag in the world during the rut', url: 'https://www.nefmi.gov.hu' },\n  { id: 'romania-carpathians', rank: 111, name: 'Carpathian Mountains', country: 'Romania', region: 'Europe', type: 'hunting', species: ['Brown Bear', 'Red Deer', 'Chamois', 'Wild Boar'], description: 'Last great European brown bear population in dramatic mountain hunting terrain', url: 'https://www.romsilva.ro' },\n  { id: 'russia-kamchatka-bear', rank: 112, name: 'Kamchatka Peninsula \u2013 Brown Bear', country: 'Russia', region: 'Far East', type: 'hunting', species: ['Kamchatka Brown Bear', 'Moose', 'Snow Sheep'], description: 'Most remote bear hunting in the world; Kamchatka bears rival Kodiak in size', url: 'https://www.fao.gov.ru' },\n  { id: 'australia-water-buffalo', rank: 113, name: 'NT Arnhem Land \u2013 Water Buffalo', country: 'Australia', region: 'Oceania', type: 'hunting', species: ['Water Buffalo', 'Banteng', 'Feral Camel', 'Sambar Deer'], description: 'Dramatic Top End buffalo hunting in remote Aboriginal land country', url: 'https://nt.gov.au/leisure/parks-recreation/hunting' },\n  { id: 'mexico-sonora-deer', rank: 114, name: 'Sonora Desert \u2013 Coues Deer', country: 'Mexico', region: 'North America', type: 'hunting', species: ['Coues Deer', 'Mule Deer', 'Desert Bighorn', 'Javelina'], description: 'Rugged desert mountain country for the trophy Coues whitetail and Sonoran bighorn', url: 'https://www.gob.mx/semarnat' },\n  { id: 'mexico-tamaulipas', rank: 115, name: 'Tamaulipas Brush Country', country: 'Mexico', region: 'North America', type: 'hunting', species: ['Whitetail Deer', 'Wild Boar', 'Nilgai', 'Javelina'], description: 'Dense thorn brush producing enormous typical whitetails just south of Texas', url: 'https://www.gob.mx/semarnat' },\n  { id: 'botswana-okavango', rank: 116, name: 'Ngamiland \u2013 Okavango', country: 'Botswana', region: 'Southern Africa', type: 'hunting', species: ['Cape Buffalo', 'Elephant', 'Hippo', 'Lion'], description: 'Hunting concessions adjacent to the Okavango Delta with exceptional trophy elephant', url: 'https://www.gov.bw/wildlife' },\n  { id: 'norway-moose', rank: 117, name: 'Norwegian Forests \u2013 Moose', country: 'Norway', region: 'Scandinavia', type: 'hunting', species: ['Moose', 'Reindeer', 'Roe Deer', 'Red Fox'], description: 'Elk (moose) hunting deep in Norwegian boreal forest; one of Europe\\'s great traditions', url: 'https://www.miljodirektoratet.no/hunting' },\n  { id: 'finland-moose', rank: 118, name: 'Finnish Lapland \u2013 Moose & Reindeer', country: 'Finland', region: 'Scandinavia', type: 'hunting', species: ['Moose', 'Reindeer', 'Wolverine (observational)', 'Grouse'], description: 'Vast boreal wilderness producing quality moose and driven grouse hunting', url: 'https://www.riista.fi/en/' },\n  { id: 'peru-dove', rank: 119, name: 'Peru Coastal Desert \u2013 Dove', country: 'Peru', region: 'South America', type: 'hunting', species: ['Eared Dove', 'White-winged Dove'], description: 'Largest dove population in the world with shooting that rivals any wingshooting in existence', url: 'https://serfor.gob.pe' },\n  { id: 'argentina-dove', rank: 120, name: 'C\u00F3rdoba \u2013 Dove Shooting', country: 'Argentina', region: 'South America', type: 'hunting', species: ['Eared Dove', 'Spotted Dove'], description: 'C\u00F3rdoba Province has the highest concentration of doves in the world\u2014thousands per day', url: 'https://www.argentina.gob.ar/ambiente' },\n\n  // \u2500\u2500\u2500 INTERNATIONAL \u2013 FISHING (ranks 121\u2013200) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  { id: 'amazon-river', rank: 121, name: 'Amazon River Basin', country: 'Brazil', region: 'South America', type: 'fishing', species: ['Peacock Bass', 'Arapaima', 'Payara', 'Red-tailed Catfish'], description: 'World\\'s greatest freshwater fishery with over 3,000 species including giant peacock bass', url: 'https://www.icmbio.gov.br' },\n  { id: 'patagonia-trout', rank: 122, name: 'Patagonia \u2013 Trout Rivers', country: 'Argentina', region: 'South America', type: 'fishing', species: ['Brown Trout', 'Rainbow Trout', 'Sea-run Brook Trout'], description: 'Cold, clear Andean rivers producing trophy brown trout in stunning wilderness', url: 'https://www.argentina.gob.ar/turismo' },\n  { id: 'jurassic-lake-argentina', rank: 123, name: 'Jurassic Lake (Strobel)', country: 'Argentina', region: 'South America', type: 'fishing', species: ['Rainbow Trout'], description: 'Remote Patagonian plateau lake holding the world\\'s largest wild rainbows averaging 15+ lbs', url: 'https://www.patagoniaflyshop.com' },\n  { id: 'alta-river-norway', rank: 124, name: 'Alta River', country: 'Norway', region: 'Scandinavia', type: 'fishing', species: ['Atlantic Salmon'], description: 'Norway\\'s most famous salmon river; beats are booked years in advance', url: 'https://www.alta.no/laksefiske' },\n  { id: 'iceland-salmon', rank: 125, name: 'Iceland Salmon Rivers', country: 'Iceland', region: 'North Atlantic', type: 'fishing', species: ['Atlantic Salmon', 'Arctic Char', 'Brown Trout'], description: 'Pristine lava-filtered rivers with strong Atlantic salmon and char populations', url: 'https://www.fishistandaland.is' },\n  { id: 'new-zealand-trout', rank: 126, name: 'South Island \u2013 Trout Streams', country: 'New Zealand', region: 'Oceania', type: 'fishing', species: ['Brown Trout', 'Rainbow Trout'], description: 'Crystal clear rivers where you sight-fish individual trophy brown trout over 10 lbs', url: 'https://www.fishandgame.org.nz' },\n  { id: 'maldives-gt', rank: 127, name: 'Maldives Atolls', country: 'Maldives', region: 'Indian Ocean', type: 'fishing', species: ['Giant Trevally', 'Sailfish', 'Wahoo', 'Yellowfin Tuna'], description: 'Pristine atoll flats with massive Giant Trevally and world-class offshore action', url: 'https://tourism.gov.mv' },\n  { id: 'seychelles-flats', rank: 128, name: 'Seychelles \u2013 Cosmoledo Atoll', country: 'Seychelles', region: 'Indian Ocean', type: 'fishing', species: ['Bonefish', 'Giant Trevally', 'Permit', 'Triggerfish'], description: 'One of the world\\'s most remote and pristine fly-fishing destinations for GTs and bonefish', url: 'https://www.tourism.gov.sc' },\n  { id: 'andros-bahamas', rank: 129, name: 'Andros Island \u2013 Bahamas', country: 'Bahamas', region: 'Caribbean', type: 'fishing', species: ['Bonefish', 'Permit', 'Tarpon'], description: 'Largest bonefish flat in the world, considered the global capital of bonefishing', url: 'https://www.bahamas.com/bonefish' },\n  { id: 'turneffe-belize', rank: 130, name: 'Turneffe Atoll \u2013 Belize', country: 'Belize', region: 'Central America', type: 'fishing', species: ['Permit', 'Tarpon', 'Bonefish'], description: 'Grand Slam destination with resident permit, rolling tarpon, and tailing bonefish', url: 'https://www.belizetourism.org' },\n  { id: 'costa-rica-marlin', rank: 131, name: 'Los Sue\u00F1os \u2013 Costa Rica', country: 'Costa Rica', region: 'Central America', type: 'fishing', species: ['Pacific Sailfish', 'Blue Marlin', 'Roosterfish', 'Dorado'], description: 'World-record Pacific sailfish billfishing with multiple releases per day common', url: 'https://www.visitcostarica.com' },\n  { id: 'cabo-san-lucas', rank: 132, name: 'Cabo San Lucas', country: 'Mexico', region: 'North America', type: 'fishing', species: ['Blue Marlin', 'Striped Marlin', 'Yellowfin Tuna', 'Wahoo'], description: 'World Marlin Capital where the Pacific and Sea of Cortez create incredible fishing', url: 'https://www.cabosanlucas.net/activities/fishing.php' },\n  { id: 'kona-hawaii', rank: 133, name: 'Kona Coast \u2013 Hawaii', country: 'USA', region: 'Pacific', type: 'fishing', species: ['Pacific Blue Marlin', 'Spearfish', 'Mahi-Mahi', 'Yellowfin Tuna'], description: 'World capital of Pacific blue marlin, holding multiple world records', url: 'https://www.gohawaii.com/big-island/guidebook/things-to-do/water-activities/fishing' },\n  { id: 'cairns-australia', rank: 134, name: 'Cairns \u2013 Great Barrier Reef', country: 'Australia', region: 'Oceania', type: 'fishing', species: ['Black Marlin', 'Giant Trevally', 'Barramundi', 'Coral Trout'], description: 'World capital of heavy tackle black marlin fishing with granders over 1,000 lbs', url: 'https://www.queensland.com/en/activities/fishing' },\n  { id: 'azores-bluefin', rank: 135, name: 'Azores \u2013 Bluefin Tuna', country: 'Portugal', region: 'North Atlantic', type: 'fishing', species: ['Atlantic Bluefin Tuna', 'Blue Marlin', 'Wahoo', 'Amberjack'], description: 'Volcanic mid-Atlantic islands with massive Atlantic bluefin tuna and big game', url: 'https://www.visitazores.com/fishing' },\n  { id: 'lake-nasser-egypt', rank: 136, name: 'Lake Nasser \u2013 Nile Perch', country: 'Egypt', region: 'North Africa', type: 'fishing', species: ['Nile Perch', 'Tigerfish', 'Vundu Catfish'], description: 'Vast Saharan reservoir holding Nile perch exceeding 250 lbs and almost no pressure', url: 'https://www.egypt.travel' },\n  { id: 'congo-tigerfish', rank: 137, name: 'Congo River \u2013 Tigerfish', country: 'Democratic Republic of Congo', region: 'Central Africa', type: 'fishing', species: ['Giant Tigerfish', 'Goliath Tigerfish'], description: 'The Goliath tigerfish\u2014freshwater\\'s most ferocious predator\u2014in world\\'s most remote river', url: 'https://www.rdctourism.com' },\n  { id: 'kamchatka-salmon', rank: 138, name: 'Kamchatka Peninsula \u2013 Salmon', country: 'Russia', region: 'Far East', type: 'fishing', species: ['Chinook Salmon', 'Steelhead', 'Arctic Grayling', 'Taimen'], description: 'Most remote pristine salmon fishing on earth, unchanged since the Ice Age', url: 'https://www.kamchatkatourism.ru' },\n  { id: 'mongolia-taimen', rank: 139, name: 'Eg-Ur River System \u2013 Taimen', country: 'Mongolia', region: 'Central Asia', type: 'fishing', species: ['Taimen', 'Lenok', 'Arctic Grayling'], description: 'Pristine steppe rivers with taimen\u2014the world\\'s largest trout\u2014exceeding 50 lbs', url: 'https://www.mongoliatourism.gov.mn' },\n  { id: 'scotland-salmon', rank: 140, name: 'Spey & Dee \u2013 Scotland', country: 'United Kingdom', region: 'Europe', type: 'fishing', species: ['Atlantic Salmon'], description: 'Birthplace of spey casting with storied salmon rivers and historic fishing lodges', url: 'https://www.fishpal.com' },\n  { id: 'ireland-salmon', rank: 141, name: 'Ireland \u2013 West Coast Rivers', country: 'Ireland', region: 'Europe', type: 'fishing', species: ['Atlantic Salmon', 'Sea Trout', 'Brown Trout'], description: 'Wild Atlantic salmon on classic Irish spate rivers through green rural countryside', url: 'https://www.fisheriesireland.ie' },\n  { id: 'sri-lanka-wahoo', rank: 142, name: 'Sri Lanka \u2013 Blue Water Game', country: 'Sri Lanka', region: 'Indian Ocean', type: 'fishing', species: ['Wahoo', 'Yellowfin Tuna', 'Dorado', 'Sailfish'], description: 'Year-round warm water action in the Indian Ocean off the Pearl of the Orient', url: 'https://www.srilanka.travel' },\n  { id: 'vanuatu-gt', rank: 143, name: 'Vanuatu \u2013 Giant Trevally', country: 'Vanuatu', region: 'Pacific', type: 'fishing', species: ['Giant Trevally', 'Dogtooth Tuna', 'Wahoo', 'Marlin'], description: 'Remote Pacific atoll flats with population-dense GTs rarely pressured by anglers', url: 'https://www.vanuatu.travel' },\n  { id: 'cuba-bonefish', rank: 144, name: 'Jardines de la Reina \u2013 Cuba', country: 'Cuba', region: 'Caribbean', type: 'fishing', species: ['Bonefish', 'Permit', 'Tarpon', 'Cubera Snapper'], description: 'Marine national park with some of the most pristine and undisturbed saltwater flats on earth', url: 'https://www.cubatravel.cu' },\n  { id: 'ecuador-marlin', rank: 145, name: 'Salinas \u2013 Ecuador', country: 'Ecuador', region: 'South America', type: 'fishing', species: ['Blue Marlin', 'Pacific Sailfish', 'Yellowfin Tuna'], description: 'World-class Pacific billfish grounds with year-round marlin and sailfish action', url: 'https://www.ecuador.travel' },\n  { id: 'barramundi-australia', rank: 146, name: 'Kimberley Region \u2013 Barramundi', country: 'Australia', region: 'Oceania', type: 'fishing', species: ['Barramundi', 'Mangrove Jack', 'Queenfish', 'Threadfin Salmon'], description: 'Remote tropical rivers and creeks with barra to 40+ lbs and zero fishing pressure', url: 'https://www.westernaustralia.com/fishing' },\n  { id: 'andaman-gt', rank: 147, name: 'Andaman Islands \u2013 GT Fishing', country: 'India', region: 'Indian Ocean', type: 'fishing', species: ['Giant Trevally', 'Dogtooth Tuna', 'Yellowfin Tuna', 'Wahoo'], description: 'Pristine island chain with massive GTs and tuna virtually untouched by sport anglers', url: 'https://www.andamantourism.gov.in' },\n  { id: 'hokkaido-taimen', rank: 148, name: 'Hokkaido \u2013 Ito (Sakhalin Taimen)', country: 'Japan', region: 'East Asia', type: 'fishing', species: ['Sakhalin Taimen', 'Masu Salmon', 'Dolly Varden'], description: 'Japan\\'s northernmost island holds the endangered Sakhalin taimen\u2014the rarest sport fish', url: 'https://www.jnto.go.jp' },\n  { id: 'chile-sea-trout', rank: 149, name: 'Tierra del Fuego \u2013 Sea Trout', country: 'Chile', region: 'South America', type: 'fishing', species: ['Sea-run Brown Trout'], description: 'World-record sea-run brown trout in the Falkland Current waters at the end of the world', url: 'https://www.chile.travel/fishing' },\n  { id: 'christmas-island', rank: 150, name: 'Christmas Island Flats', country: 'Kiribati', region: 'Pacific', type: 'fishing', species: ['Bonefish', 'Giant Trevally', 'Bluefin Trevally'], description: 'The Bone Fishing Capital of the World with incredible density of bonefish on vast flats', url: 'https://www.southpacificislands.com' },\n  { id: 'palau-gt', rank: 151, name: 'Palau Blue Corner', country: 'Palau', region: 'Pacific', type: 'fishing', species: ['Giant Trevally', 'Barracuda', 'Napoleon Wrasse', 'Dogtooth Tuna'], description: 'Legendary current-swept wall dive site that doubles as a fishing mecca', url: 'https://www.pristineparadisepalau.com' },\n  { id: 'galapagos-marlin', rank: 152, name: 'Gal\u00E1pagos Islands', country: 'Ecuador', region: 'Pacific', type: 'fishing', species: ['Blue Marlin', 'Yellowfin Tuna', 'Wahoo', 'Giant Trevally'], description: 'World-class blue-water fishing in the nutrient-rich Humboldt and Cromwell currents', url: 'https://www.galapagosnationalpark.org' },\n  { id: 'sweden-sea-trout', rank: 153, name: 'Swedish West Coast \u2013 Sea Trout', country: 'Sweden', region: 'Scandinavia', type: 'fishing', species: ['Sea Trout', 'Atlantic Cod', 'Mackerel'], description: 'Wading the rocky Swedish shoreline for sea trout is a beloved Nordic tradition', url: 'https://www.visitsweden.com/fishing' },\n  { id: 'brazil-peacock', rank: 154, name: 'Rio Negro \u2013 Peacock Bass', country: 'Brazil', region: 'South America', type: 'fishing', species: ['Peacock Bass', 'Piranha', 'Bicuda'], description: 'Black-water Amazon tributary with the world\\'s highest concentrations of peacock bass', url: 'https://www.visitbrasil.com' },\n  { id: 'cape-verde-marlin', rank: 155, name: 'Cape Verde \u2013 Blue Marlin', country: 'Cape Verde', region: 'North Atlantic', type: 'fishing', species: ['Blue Marlin', 'White Marlin', 'Yellowfin Tuna', 'Wahoo'], description: 'Under-fished Atlantic islands with year-round blue marlin and big game action', url: 'https://www.caboverde.com' },\n  { id: 'kenya-tilapia', rank: 156, name: 'Lake Victoria \u2013 Nile Perch', country: 'Kenya', region: 'East Africa', type: 'fishing', species: ['Nile Perch', 'Tilapia'], description: 'Africa\\'s largest lake with Nile perch to 200+ lbs in open water', url: 'https://www.magicalkenya.com' },\n  { id: 'scotland-halibut', rank: 157, name: 'Orkney Islands \u2013 Atlantic Halibut', country: 'United Kingdom', region: 'Europe', type: 'fishing', species: ['Atlantic Halibut', 'Cod', 'Ling', 'Haddock'], description: 'Trophy halibut to 300+ lbs in the waters between Scotland and Norway', url: 'https://www.visitscotland.com/fishing' },\n  { id: 'madeira-bluefin', rank: 158, name: 'Madeira \u2013 Big Game Fishing', country: 'Portugal', region: 'Atlantic', type: 'fishing', species: ['Atlantic Bluefin Tuna', 'Blue Marlin', 'White Marlin', 'Wahoo'], description: 'Mid-Atlantic volcanic island renowned for blue marlin and giant bluefin tuna', url: 'https://www.visitmadeira.com' },\n  { id: 'dominican-republic-wahoo', rank: 159, name: 'Punta Cana \u2013 Caribbean Game', country: 'Dominican Republic', region: 'Caribbean', type: 'fishing', species: ['Wahoo', 'Mahi-Mahi', 'Blue Marlin', 'Sailfish'], description: 'Deep Caribbean blue water just minutes offshore from Punta Cana with big game fishing', url: 'https://www.godominicanrepublic.com' },\n  { id: 'bahamas-deep-sea', rank: 160, name: 'Bahamas \u2013 Exuma Chain', country: 'Bahamas', region: 'Caribbean', type: 'fishing', species: ['Blue Marlin', 'Bonefish', 'Yellowfin Tuna', 'Wahoo'], description: 'Island chain fishing from bonefish flats to Tongue of the Ocean deep water marlin', url: 'https://www.bahamas.com/fishing' },\n  { id: 'guyana-arapaima', rank: 161, name: 'Rupununi Savanna \u2013 Arapaima', country: 'Guyana', region: 'South America', type: 'fishing', species: ['Arapaima', 'Peacock Bass', 'Payara'], description: 'Remote savanna lakes hold arapaima, the world\\'s largest scaled freshwater fish', url: 'https://www.guyanatourism.com' },\n  { id: 'panama-roosterfish', rank: 162, name: 'Gulf of Chiriqu\u00ED \u2013 Roosterfish', country: 'Panama', region: 'Central America', type: 'fishing', species: ['Roosterfish', 'Pacific Sailfish', 'Cubera Snapper', 'Wahoo'], description: 'Pacific waters of Panama host massive roosterfish and world-class sailfishing', url: 'https://www.visitpanama.com' },\n  { id: 'canada-lake-trout', rank: 163, name: 'Great Bear Lake \u2013 NWT', country: 'Canada', region: 'Northwest Territories', type: 'fishing', species: ['Lake Trout', 'Arctic Grayling', 'Northern Pike'], description: 'World\\'s largest lake trout ever caught came from this remote Northwest Territories jewel', url: 'https://www.enr.gov.nt.ca/en/services/fishing' },\n  { id: 'norway-halibut', rank: 164, name: 'Troms\u00F8 \u2013 Norwegian Atlantic Halibut', country: 'Norway', region: 'Scandinavia', type: 'fishing', species: ['Atlantic Halibut', 'Atlantic Cod', 'Coalfish', 'Catfish'], description: 'Arctic Norway fjords produce monster halibut to 400+ lbs from the deep cold water', url: 'https://www.visitnorway.com/things-to-do/sport-activities/fishing/' },\n  { id: 'venezuela-payara', rank: 165, name: 'Orinoco \u2013 Payara', country: 'Venezuela', region: 'South America', type: 'fishing', species: ['Payara', 'Peacock Bass', 'Piranha'], description: 'Home of the vampire fish\u2014the payara\u2014with sabre-like teeth and leaping fights', url: 'https://www.mintur.gob.ve' },\n  { id: 'canada-arctic-char', rank: 166, name: 'Nunavut \u2013 Arctic Char', country: 'Canada', region: 'Nunavut', type: 'fishing', species: ['Arctic Char', 'Lake Trout', 'Grayling'], description: 'Remote Arctic fly-in camps for brilliantly colored arctic char on light tackle', url: 'https://www.gov.nu.ca/environment' },\n  { id: 'south-africa-sport', rank: 167, name: 'Transkei Wild Coast \u2013 Yellowfin', country: 'South Africa', region: 'Southern Africa', type: 'fishing', species: ['Yellowfin Tuna', 'Sailfish', 'Dorado', 'Wahoo'], description: 'The Wild Coast offers excellent light tackle billfish and giant yellowfin', url: 'https://www.southafrica.net/fishing' },\n  { id: 'indonesia-giant-trevally', rank: 168, name: 'Raja Ampat \u2013 Indonesia', country: 'Indonesia', region: 'Southeast Asia', type: 'fishing', species: ['Giant Trevally', 'Dogtooth Tuna', 'Spanish Mackerel', 'Wahoo'], description: 'Most biodiverse marine region on earth with powerful GTs on pristine reef systems', url: 'https://www.indonesia.travel' },\n  { id: 'chile-rainbow-trout', rank: 169, name: 'Lake District \u2013 Chile', country: 'Chile', region: 'South America', type: 'fishing', species: ['Rainbow Trout', 'Brown Trout'], description: 'Chilean lake district rivers fed by Andean glaciers full of trophy wild rainbows', url: 'https://www.chile.travel' },\n  { id: 'mozambique-marlin', rank: 170, name: 'Pemba \u2013 Mozambique Offshore', country: 'Mozambique', region: 'East Africa', type: 'fishing', species: ['Blue Marlin', 'Sailfish', 'Wahoo', 'Giant Trevally'], description: 'Lightly fished Indian Ocean waters off northern Mozambique with outstanding game fishing', url: 'https://www.mozambiquetourism.co.mz' },\n  { id: 'tonga-marlin', rank: 171, name: 'Tonga \u2013 Pacific Game Fishing', country: 'Tonga', region: 'Pacific', type: 'fishing', species: ['Blue Marlin', 'Striped Marlin', 'Yellowfin Tuna', 'Wahoo'], description: 'South Pacific island kingdom with exceptional blue-water marlin and tuna fishing', url: 'https://www.thekingdomoftonga.com' },\n  { id: 'uk-bass', rank: 172, name: 'Southwest England \u2013 Sea Bass', country: 'United Kingdom', region: 'Europe', type: 'fishing', species: ['European Sea Bass', 'Turbot', 'Pollock'], description: 'Rocky Cornish headlands and Irish Sea producing trophy European sea bass on lures', url: 'https://www.anglingtrustanglers.co.uk' },\n  { id: 'france-tuna', rank: 173, name: 'Gulf of Lion \u2013 France', country: 'France', region: 'Europe', type: 'fishing', species: ['Atlantic Bluefin Tuna', 'Swordfish', 'Striped Marlin'], description: 'Mediterranean tuna return after decades with giant bluefin to 1,000 lbs', url: 'https://www.federation-peche.fr' },\n  { id: 'guinea-bissau-tarpon', rank: 174, name: 'Bijag\u00F3s Archipelago', country: 'Guinea-Bissau', region: 'West Africa', type: 'fishing', species: ['Atlantic Tarpon', 'Giant Trevally', 'Roosterfish'], description: 'UNESCO Biosphere Reserve with world-record Atlantic tarpon to 286 lbs', url: 'https://www.guineabissautourism.org' },\n  { id: 'tobago-wahoo', rank: 175, name: 'Tobago \u2013 Caribbean Game', country: 'Trinidad and Tobago', region: 'Caribbean', type: 'fishing', species: ['Wahoo', 'Blue Marlin', 'Yellowfin Tuna', 'Mahi-Mahi'], description: 'Caribbean\\'s best wahoo fishing in the deep channels surrounding Tobago', url: 'https://www.gotrinidadandtobago.com' },\n  { id: 'alaska-bristol-bay', rank: 176, name: 'Bristol Bay \u2013 Alaska', country: 'USA', region: 'Alaska', type: 'fishing', species: ['Sockeye Salmon', 'Rainbow Trout', 'Arctic Char', 'Northern Pike'], description: 'World\\'s most productive wild salmon run in pristine Bristol Bay watershed', url: 'https://www.adfg.alaska.gov/sf/OncorLicensing/' },\n  { id: 'lake-tanganyika', rank: 177, name: 'Lake Tanganyika \u2013 Nile Perch', country: 'Tanzania', region: 'East Africa', type: 'fishing', species: ['Nile Perch', 'Giant Perch', 'Tigerfish', 'Frontosa Cichlid'], description: 'World\\'s longest and second deepest freshwater lake with endemic massive perch', url: 'https://www.tanzaniatourism.go.tz' },\n  { id: 'zambia-tiger', rank: 178, name: 'Lower Zambezi \u2013 Tigerfish', country: 'Zambia', region: 'Southern Africa', type: 'fishing', species: ['Tigerfish', 'Nile Perch', 'Catfish'], description: 'Africa\\'s most exciting freshwater fishing for vicious tigerfish on the Zambezi', url: 'https://www.zambia.tourism.com' },\n  { id: 'spain-sea-bass', rank: 179, name: 'Galicia Coast \u2013 Spain', country: 'Spain', region: 'Europe', type: 'fishing', species: ['European Sea Bass', 'Gilt-head Bream', 'Atlantic Bluefin Tuna'], description: 'Atlantic Spanish coast with superb European sea bass lure fishing on rocky points', url: 'https://www.spain.info/fishing' },\n  { id: 'mexico-bay-of-banderas', rank: 180, name: 'Bay of Banderas \u2013 Puerto Vallarta', country: 'Mexico', region: 'North America', type: 'fishing', species: ['Pacific Sailfish', 'Dorado', 'Yellowfin Tuna', 'Blue Marlin'], description: 'Pacific bay known as the sailfish capital of the Pacific with world-class offshore action', url: 'https://www.visitpuertovallarta.com' },\n  { id: 'portugal-big-game', rank: 181, name: 'Algarve \u2013 Portugal', country: 'Portugal', region: 'Europe', type: 'fishing', species: ['Atlantic Bluefin Tuna', 'Blue Marlin', 'Swordfish', 'Wahoo'], description: 'Southern Portugal coastline where Atlantic produces exceptional big game fishing', url: 'https://www.visitportugal.com' },\n  { id: 'peru-yellowfin', rank: 182, name: 'Cabo Blanco \u2013 Peru', country: 'Peru', region: 'South America', type: 'fishing', species: ['Blue Marlin', 'Black Marlin', 'Striped Marlin', 'Yellowfin Tuna'], description: 'Humboldt Current upwelling creates extraordinary nutrient-rich big game fishing', url: 'https://www.promperu.gob.pe' },\n  { id: 'cocos-island', rank: 183, name: 'Cocos Island \u2013 Costa Rica', country: 'Costa Rica', region: 'Pacific', type: 'fishing', species: ['Yellowfin Tuna', 'Wahoo', 'Dorado', 'Giant Trevally'], description: 'Remote UNESCO island 300 miles offshore in massive hammerhead and tuna aggregations', url: 'https://www.visitcostarica.com' },\n  { id: 'scotland-pollack', rank: 184, name: 'Hebrides \u2013 Pollack & Cod', country: 'United Kingdom', region: 'Europe', type: 'fishing', species: ['Pollack', 'Atlantic Cod', 'Ling', 'Conger Eel'], description: 'Western Scottish islands with exceptional wreck and reef fishing in cold Atlantic', url: 'https://www.visitscotland.com/fishing' },\n  { id: 'mexico-loreto', rank: 185, name: 'Loreto \u2013 Sea of Cortez', country: 'Mexico', region: 'North America', type: 'fishing', species: ['Dorado', 'Yellowtail', 'Roosterfish', 'Striped Marlin'], description: 'Cousteau\\'s aquarium of the world with incredible year-round multi-species fishing', url: 'https://www.loreto.com' },\n  { id: 'mozambique-sailfish', rank: 186, name: 'Bazaruto Archipelago', country: 'Mozambique', region: 'East Africa', type: 'fishing', species: ['Sailfish', 'Blue Marlin', 'Bonefish', 'Giant Trevally'], description: 'Remote Indian Ocean island chain with exceptional billfish and pristine flats', url: 'https://www.mozambiquetourism.co.mz' },\n  { id: 'canada-peace-river', rank: 187, name: 'Peace River \u2013 Alberta', country: 'Canada', region: 'Alberta', type: 'fishing', species: ['Walleye', 'Northern Pike', 'Goldeye', 'Burbot'], description: 'Northern Alberta river system with trophy walleye and pike in near-wilderness conditions', url: 'https://www.alberta.ca/fishing.aspx' },\n  { id: 'baja-yellowtail', rank: 188, name: 'Baja Pacific Kelp Beds', country: 'Mexico', region: 'North America', type: 'fishing', species: ['Yellowtail', 'White Sea Bass', 'Halibut', 'Wahoo'], description: 'Fertile Pacific kelp beds produce exceptional yellowtail and white sea bass', url: 'https://www.discoverbajacalifornia.com' },\n  { id: 'norway-cod', rank: 189, name: 'Lofoten Islands \u2013 Cod Fishing', country: 'Norway', region: 'Scandinavia', type: 'fishing', species: ['Atlantic Cod', 'Halibut', 'Coalfish', 'Wolf Fish'], description: 'Dramatic Arctic archipelago with massive Atlantic cod runs and record halibut potential', url: 'https://www.visitnorway.com' },\n  { id: 'japan-gt-snapper', rank: 190, name: 'Okinawa \u2013 Japan', country: 'Japan', region: 'East Asia', type: 'fishing', species: ['Giant Trevally', 'Bluefin Trevally', 'Dogtooth Tuna', 'Red Snapper'], description: 'Japanese coral reef island groups with superb GT and tuna action on clear water', url: 'https://www.jnto.go.jp/fishing' },\n  { id: 'philippines-gt', rank: 191, name: 'Tubbataha Reef \u2013 Philippines', country: 'Philippines', region: 'Southeast Asia', type: 'fishing', species: ['Giant Trevally', 'Wahoo', 'Yellowfin Tuna', 'Dogtooth Tuna'], description: 'UNESCO World Heritage reef site with incredible remote big game and GT fishing', url: 'https://www.philtourism.gov.ph' },\n  { id: 'russia-taimen', rank: 192, name: 'Siberian Rivers \u2013 Taimen', country: 'Russia', region: 'Siberia', type: 'fishing', species: ['Siberian Taimen', 'Huchen', 'Arctic Grayling'], description: 'Wild Siberian taiga rivers with the world\\'s most massive taimen predators', url: 'https://www.russiatourism.ru' },\n  { id: 'ukraine-catfish', rank: 193, name: 'Dnieper River \u2013 Wels Catfish', country: 'Ukraine', region: 'Europe', type: 'fishing', species: ['Wels Catfish', 'Pike', 'Zander', 'Asp'], description: 'Eastern European river system with wels catfish to 300+ lbs on lures', url: 'https://www.tourism.gov.ua' },\n  { id: 'france-carp', rank: 194, name: 'French Canals & Lakes \u2013 Carp', country: 'France', region: 'Europe', type: 'fishing', species: ['Mirror Carp', 'Common Carp', 'Wels Catfish'], description: 'Trophy European carp consistently exceeding 60 lbs in French estate lakes', url: 'https://www.france.fr/fishing' },\n  { id: 'uk-pike', rank: 195, name: 'Norfolk Broads \u2013 Pike Fishing', country: 'United Kingdom', region: 'Europe', type: 'fishing', species: ['Northern Pike', 'Perch', 'Tench', 'Bream'], description: 'Connected lake and river system in Norfolk producing 40+ lb pike regularly', url: 'https://www.anglingtrust.net' },\n  { id: 'sweden-pike', rank: 196, name: 'Lake V\u00E4nern \u2013 Pike & Perch', country: 'Sweden', region: 'Scandinavia', type: 'fishing', species: ['Northern Pike', 'Perch', 'Zander', 'Lake Trout'], description: 'Scandinavia\\'s largest lake holding monster pike exceeding 30 lbs on lures', url: 'https://www.visitsweden.com' },\n  { id: 'germany-asp', rank: 197, name: 'Rhine & Danube \u2013 Asp & Zander', country: 'Germany', region: 'Europe', type: 'fishing', species: ['Asp', 'Zander', 'Wels Catfish', 'Barbel'], description: 'German rivers produce spectacular surface asp fishing and giant zander', url: 'https://www.germany.travel/fishing' },\n  { id: 'hungary-catfish', rank: 198, name: 'Tisza & Danube \u2013 Catfish', country: 'Hungary', region: 'Europe', type: 'fishing', species: ['Wels Catfish', 'Zander', 'Carp', 'Asp'], description: 'European catfish record country with wels to 250+ lbs in warm Pannonian rivers', url: 'https://www.gotohungary.com' },\n  { id: 'philippines-marlin', rank: 199, name: 'General Santos \u2013 Philippines', country: 'Philippines', region: 'Southeast Asia', type: 'fishing', species: ['Yellow Tuna', 'Blue Marlin', 'Skipjack Tuna'], description: 'Tuna capital of the Philippines with extraordinary year-round yellowfin action', url: 'https://www.philtourism.gov.ph' },\n  { id: 'papua-new-guinea-gt', rank: 200, name: 'Papua New Guinea \u2013 Flats & Reefs', country: 'Papua New Guinea', region: 'Pacific', type: 'fishing', species: ['Giant Trevally', 'Dogtooth Tuna', 'Spanish Mackerel', 'Barramundi'], description: 'Last frontier of untouched tropical fishing with explosively aggressive GTs and dogtooth tuna', url: 'https://www.papuanewguinea.travel' },\n];\n\nexport function getJurisdictions(country?: string, q?: string): Jurisdiction[] {\n  let results = JURISDICTIONS;\n  if (country === 'US') results = results.filter(j => j.country === 'US');\n  else if (country === 'CA') results = results.filter(j => j.country === 'CA');\n  if (q) {\n    const lower = q.toLowerCase();\n    results = results.filter(j =>\n      j.name.toLowerCase().includes(lower) ||\n      j.abbr.toLowerCase().includes(lower) ||\n      j.topSpecies.some(s => s.toLowerCase().includes(lower))\n    );\n  }\n  return results;\n}\n\nexport function getJurisdictionById(id: string): Jurisdiction | null {\n  return JURISDICTIONS.find(j => j.id === id) ?? null;\n}\n\nexport function getTopLocations(type?: string, q?: string, country?: string, limit = 200): TopLocation[] {\n  let results = TOP_LOCATIONS;\n  if (type && type !== 'all') results = results.filter(l => l.type === type || l.type === 'both');\n  if (country) {\n    const lower = country.toLowerCase();\n    results = results.filter(l => l.country.toLowerCase().includes(lower));\n  }\n  if (q) {\n    const lower = q.toLowerCase();\n    results = results.filter(l =>\n      l.name.toLowerCase().includes(lower) ||\n      l.country.toLowerCase().includes(lower) ||\n      l.region.toLowerCase().includes(lower) ||\n      l.species.some(s => s.toLowerCase().includes(lower))\n    );\n  }\n  return results.slice(0, limit);\n}\n\n// \u2500\u2500 Season summaries \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface SeasonDates {\n  deerOpener?: string;\n  turkeySpring?: string;\n  waterfowl?: string;\n  elk?: string;\n  bear?: string;\n  moose?: string;\n}\n\nexport interface BagLimits {\n  /** e.g. \"1 antlered + 1 antlerless/season\" */\n  deer?: string;\n  turkey?: string;\n  waterfowl?: string;\n  elk?: string;\n  bear?: string;\n  moose?: string;\n}\n\nexport interface RegulationSummary {\n  /** 2\u20133 letter abbreviation matching the JURISDICTIONS abbr field */\n  id: string;\n  name: string;\n  country: 'US' | 'CA';\n  /** Short badge shown on the Warden's Desk card, e.g. \"Deer: Nov 2\" */\n  highlight: string;\n  seasons: SeasonDates;\n  bagLimits: BagLimits;\n  licenseNote: string;\n  /** URL to the agency's official regulation page for this jurisdiction */\n  sourceUrl: string;\n  /** ISO date of the static seed; routes replace this with DB fetchedAt */\n  lastUpdated: string;\n}\n\nconst TS = '2025-01-01';\n\nexport const REGULATION_SUMMARIES: RegulationSummary[] = [\n  // \u2500\u2500 East \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  { id: 'CT', name: 'Connecticut',    country: 'US', highlight: 'Deer: Nov 15', seasons: { deerOpener: 'Nov 15', turkeySpring: 'Apr 26', waterfowl: 'Oct 1',  bear: 'Oct 1'  }, bagLimits: { deer: '2/season', turkey: '1 bird/season', waterfowl: '6 ducks/day', bear: '1/season' }, licenseNote: 'Resident license: ~$19',      sourceUrl: 'https://portal.ct.gov/DEEP/Hunting/Regulations', lastUpdated: TS },\n  { id: 'DE', name: 'Delaware',       country: 'US', highlight: 'Deer: Sep 1',  seasons: { deerOpener: 'Sep 1',  turkeySpring: 'Apr 15', waterfowl: 'Oct 1'                 }, bagLimits: { deer: '2/day, 10/season', turkey: '2/season', waterfowl: '6 ducks/day' }, licenseNote: 'Resident license: ~$8.50',    sourceUrl: 'https://dnrec.delaware.gov/fish-wildlife/hunting/', lastUpdated: TS },\n  { id: 'FL', name: 'Florida',        country: 'US', highlight: 'Deer: Oct 19', seasons: { deerOpener: 'Oct 19', turkeySpring: 'Mar 1',  waterfowl: 'Nov 1'                 }, bagLimits: { deer: '2/day, 5/season', turkey: '2/day, 3/season', waterfowl: '6 ducks/day' }, licenseNote: 'Resident license: ~$17.50',   sourceUrl: 'https://myfwc.com/hunting/regulations/', lastUpdated: TS },\n  { id: 'GA', name: 'Georgia',        country: 'US', highlight: 'Deer: Oct 19', seasons: { deerOpener: 'Oct 19', turkeySpring: 'Mar 22', waterfowl: 'Oct 1'                 }, bagLimits: { deer: '2/day, 12/season', turkey: '2/day, 4/season', waterfowl: '6 ducks/day' }, licenseNote: 'Resident license: ~$15',      sourceUrl: 'https://georgiawildlife.com/hunting/regulations', lastUpdated: TS },\n  { id: 'ME', name: 'Maine',          country: 'US', highlight: 'Deer: Oct 1',  seasons: { deerOpener: 'Oct 1',  turkeySpring: 'May 1',  waterfowl: 'Oct 1',  moose: 'Sep 30', bear: 'Aug 26' }, bagLimits: { deer: '1/season', turkey: '1 bird/spring', waterfowl: '6 ducks/day', bear: '1/season', moose: '1/season (draw)' }, licenseNote: 'Resident license: ~$26', sourceUrl: 'https://www.maine.gov/ifw/hunting-trapping/regulations/', lastUpdated: TS },\n  { id: 'MD', name: 'Maryland',       country: 'US', highlight: 'Deer: Sep 7',  seasons: { deerOpener: 'Sep 7',  turkeySpring: 'Apr 19', waterfowl: 'Oct 1',  bear: 'Nov 4'  }, bagLimits: { deer: '3/season', turkey: '2/spring, 1/fall', waterfowl: '6 ducks/day', bear: '1/season' }, licenseNote: 'Resident license: ~$24.50',   sourceUrl: 'https://dnr.maryland.gov/wildlife/Pages/hunting/regulations.aspx', lastUpdated: TS },\n  { id: 'MA', name: 'Massachusetts',  country: 'US', highlight: 'Deer: Oct 14', seasons: { deerOpener: 'Oct 14', turkeySpring: 'Apr 28', waterfowl: 'Oct 1',  bear: 'Sep 2'  }, bagLimits: { deer: '1 antlered + 1 antlerless', turkey: '2/spring', waterfowl: '6 ducks/day', bear: '1/season' }, licenseNote: 'Resident license: ~$27.50',   sourceUrl: 'https://www.mass.gov/hunting-regulations', lastUpdated: TS },\n  { id: 'NH', name: 'New Hampshire',  country: 'US', highlight: 'Deer: Sep 15', seasons: { deerOpener: 'Sep 15', turkeySpring: 'May 1',  waterfowl: 'Oct 1',  bear: 'Sep 1', moose: 'Oct 15' }, bagLimits: { deer: '1/season', turkey: '1 bird/spring', waterfowl: '6 ducks/day', bear: '1/season', moose: '1/season (draw)' }, licenseNote: 'Resident license: ~$15', sourceUrl: 'https://www.wildlife.nh.gov/hunting/hunting-regulations.html', lastUpdated: TS },\n  { id: 'NJ', name: 'New Jersey',     country: 'US', highlight: 'Deer: Sep 9',  seasons: { deerOpener: 'Sep 9',  turkeySpring: 'Apr 21', waterfowl: 'Oct 1',  bear: 'Oct 7'  }, bagLimits: { deer: '6/season', turkey: '2/spring', waterfowl: '6 ducks/day', bear: '1/season' }, licenseNote: 'Resident license: ~$27.50',   sourceUrl: 'https://www.nj.gov/dep/fgw/deerinfo.htm', lastUpdated: TS },\n  { id: 'NY', name: 'New York',       country: 'US', highlight: 'Deer: Oct 1',  seasons: { deerOpener: 'Oct 1',  turkeySpring: 'May 1',  waterfowl: 'Oct 1',  bear: 'Sep 27' }, bagLimits: { deer: '1 antlered + varies antlerless', turkey: '2/spring', waterfowl: '6 ducks/day', bear: '1/season' }, licenseNote: 'Resident license: ~$22',      sourceUrl: 'https://www.dec.ny.gov/outdoor/28605.html', lastUpdated: TS },\n  { id: 'NC', name: 'North Carolina', country: 'US', highlight: 'Deer: Sep 7',  seasons: { deerOpener: 'Sep 7',  turkeySpring: 'Apr 12', waterfowl: 'Oct 1',  bear: 'Oct 14' }, bagLimits: { deer: '6/season (2 antlered)', turkey: '2/spring', waterfowl: '6 ducks/day', bear: '1/season' }, licenseNote: 'Resident license: ~$25',      sourceUrl: 'https://www.ncwildlife.org/hunting/regulations', lastUpdated: TS },\n  { id: 'PA', name: 'Pennsylvania',   country: 'US', highlight: 'Deer: Nov 30', seasons: { deerOpener: 'Nov 30', turkeySpring: 'Apr 26', waterfowl: 'Oct 1',  bear: 'Nov 18' }, bagLimits: { deer: '1 antlered + 1 antlerless', turkey: '1 bird/spring', waterfowl: '6 ducks/day', bear: '1/season' }, licenseNote: 'Resident license: ~$20.97',   sourceUrl: 'https://www.pgc.pa.gov/HuntTrap/Regulations/Pages/default.aspx', lastUpdated: TS },\n  { id: 'RI', name: 'Rhode Island',   country: 'US', highlight: 'Deer: Oct 1',  seasons: { deerOpener: 'Oct 1',  turkeySpring: 'Apr 28', waterfowl: 'Oct 1'                 }, bagLimits: { deer: '2/season', turkey: '2/spring', waterfowl: '6 ducks/day' }, licenseNote: 'Resident license: ~$18',      sourceUrl: 'https://dem.ri.gov/programs/fish-wildlife/hunting-regulations', lastUpdated: TS },\n  { id: 'SC', name: 'South Carolina', country: 'US', highlight: 'Deer: Aug 15', seasons: { deerOpener: 'Aug 15', turkeySpring: 'Apr 1',  waterfowl: 'Oct 1',  bear: 'Oct 1'  }, bagLimits: { deer: '5/day (2 antlered)', turkey: '3/spring', waterfowl: '6 ducks/day', bear: '1/season' }, licenseNote: 'Resident license: ~$14',      sourceUrl: 'https://www.dnr.sc.gov/regulations/hunting/', lastUpdated: TS },\n  { id: 'VT', name: 'Vermont',        country: 'US', highlight: 'Deer: Oct 1',  seasons: { deerOpener: 'Oct 1',  turkeySpring: 'May 1',  waterfowl: 'Oct 1',  bear: 'Sep 1', moose: 'Oct 15' }, bagLimits: { deer: '1/season', turkey: '1 bird/spring', waterfowl: '6 ducks/day', bear: '1/season', moose: '1/season (draw)' }, licenseNote: 'Resident license: ~$28', sourceUrl: 'https://vtfishandwildlife.com/hunt/seasons-and-bag-limits', lastUpdated: TS },\n  { id: 'VA', name: 'Virginia',       country: 'US', highlight: 'Deer: Oct 5',  seasons: { deerOpener: 'Oct 5',  turkeySpring: 'Apr 12', waterfowl: 'Oct 1',  bear: 'Nov 4'  }, bagLimits: { deer: '6/season', turkey: '2/spring', waterfowl: '6 ducks/day', bear: '2/season' }, licenseNote: 'Resident license: ~$23',      sourceUrl: 'https://www.dwr.virginia.gov/regulations/hunting/', lastUpdated: TS },\n  { id: 'WV', name: 'West Virginia',  country: 'US', highlight: 'Deer: Nov 25', seasons: { deerOpener: 'Nov 25', turkeySpring: 'Apr 22', waterfowl: 'Oct 1',  bear: 'Oct 21' }, bagLimits: { deer: '3/season', turkey: '2/spring', waterfowl: '6 ducks/day', bear: '1/season' }, licenseNote: 'Resident license: ~$19',      sourceUrl: 'https://wvdnr.gov/hunting/regulations/', lastUpdated: TS },\n  // \u2500\u2500 Midwest \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  { id: 'IL', name: 'Illinois',       country: 'US', highlight: 'Deer: Oct 1',  seasons: { deerOpener: 'Oct 1',  turkeySpring: 'Apr 17', waterfowl: 'Oct 15'                }, bagLimits: { deer: '2 antlered/season', turkey: '1 bird/spring', waterfowl: '6 ducks/day' }, licenseNote: 'Resident license: ~$12.50',   sourceUrl: 'https://www.dnr.illinois.gov/hunting/Pages/DeerRegulations.aspx', lastUpdated: TS },\n  { id: 'IN', name: 'Indiana',        country: 'US', highlight: 'Deer: Oct 1',  seasons: { deerOpener: 'Oct 1',  turkeySpring: 'Apr 26', waterfowl: 'Oct 1'                 }, bagLimits: { deer: '1 antlered + 5 antlerless', turkey: '2/spring', waterfowl: '6 ducks/day' }, licenseNote: 'Resident license: ~$17',      sourceUrl: 'https://www.in.gov/dnr/fish-and-wildlife/hunting-and-trapping/deer/', lastUpdated: TS },\n  { id: 'IA', name: 'Iowa',           country: 'US', highlight: 'Deer: Oct 1',  seasons: { deerOpener: 'Oct 1',  turkeySpring: 'Apr 13', waterfowl: 'Oct 1'                 }, bagLimits: { deer: '1 per tag', turkey: '2/spring', waterfowl: '6 ducks/day' }, licenseNote: 'Resident license: ~$22',      sourceUrl: 'https://www.iowadnr.gov/Hunting/Deer-Hunting/Deer-Regulations', lastUpdated: TS },\n  { id: 'KS', name: 'Kansas',         country: 'US', highlight: 'Deer: Sep 14', seasons: { deerOpener: 'Sep 14', turkeySpring: 'Apr 14', waterfowl: 'Oct 1',  elk: 'Sep 15'  }, bagLimits: { deer: '2/season', turkey: '2/spring', waterfowl: '6 ducks/day', elk: '1/tag (draw)' }, licenseNote: 'Resident license: ~$27.50',   sourceUrl: 'https://ksoutdoors.com/Hunting/Deer', lastUpdated: TS },\n  { id: 'MI', name: 'Michigan',       country: 'US', highlight: 'Deer: Nov 15', seasons: { deerOpener: 'Nov 15', turkeySpring: 'Apr 22', waterfowl: 'Oct 1',  bear: 'Sep 10', elk: 'Nov 15' }, bagLimits: { deer: '1 antlered + varies', turkey: '2/spring', waterfowl: '6 ducks/day', bear: '1/season', elk: '1/tag (draw)' }, licenseNote: 'Resident license: ~$11', sourceUrl: 'https://www.michigan.gov/dnr/managing-resources/wildlife/deer', lastUpdated: TS },\n  { id: 'MN', name: 'Minnesota',      country: 'US', highlight: 'Deer: Nov 8',  seasons: { deerOpener: 'Nov 8',  turkeySpring: 'Apr 13', waterfowl: 'Oct 1',  bear: 'Sep 1', moose: 'Oct 7' }, bagLimits: { deer: '1 deer + bonus permit', turkey: '2/spring', waterfowl: '6 ducks/day', bear: '1/season', moose: '1/season (draw)' }, licenseNote: 'Resident license: ~$30', sourceUrl: 'https://www.dnr.state.mn.us/hunting/deer/regulations.html', lastUpdated: TS },\n  { id: 'MO', name: 'Missouri',       country: 'US', highlight: 'Deer: Nov 15', seasons: { deerOpener: 'Nov 15', turkeySpring: 'Apr 21', waterfowl: 'Oct 1',  bear: 'Oct 19' }, bagLimits: { deer: '2/season', turkey: '2/spring', waterfowl: '6 ducks/day', bear: '1/season' }, licenseNote: 'Resident license: ~$19',      sourceUrl: 'https://mdc.mo.gov/hunting-trapping/species/deer', lastUpdated: TS },\n  { id: 'NE', name: 'Nebraska',       country: 'US', highlight: 'Deer: Sep 1',  seasons: { deerOpener: 'Sep 1',  turkeySpring: 'Apr 16', waterfowl: 'Oct 1',  elk: 'Sep 15'  }, bagLimits: { deer: '1 per tag', turkey: '2/spring', waterfowl: '6 ducks/day', elk: '1/tag (draw)' }, licenseNote: 'Resident license: ~$25',      sourceUrl: 'https://outdoornebraska.gov/deer/', lastUpdated: TS },\n  { id: 'ND', name: 'North Dakota',   country: 'US', highlight: 'Deer: Nov 8',  seasons: { deerOpener: 'Nov 8',  turkeySpring: 'Apr 12', waterfowl: 'Oct 1',  elk: 'Sep 1'   }, bagLimits: { deer: '1 per tag', turkey: '2/spring', waterfowl: '6 ducks/day', elk: '1/tag (draw)' }, licenseNote: 'Resident license: ~$15',      sourceUrl: 'https://gf.nd.gov/hunting/deer', lastUpdated: TS },\n  { id: 'OH', name: 'Ohio',           country: 'US', highlight: 'Deer: Oct 5',  seasons: { deerOpener: 'Oct 5',  turkeySpring: 'Apr 19', waterfowl: 'Oct 1'                 }, bagLimits: { deer: '1 antlered + 6 antlerless', turkey: '2/spring', waterfowl: '6 ducks/day' }, licenseNote: 'Resident license: ~$19',      sourceUrl: 'https://ohiodnr.gov/wps/portal/gov/odnr/hunting-fishing/deer', lastUpdated: TS },\n  { id: 'SD', name: 'South Dakota',   country: 'US', highlight: 'Deer: Sep 28', seasons: { deerOpener: 'Sep 28', turkeySpring: 'Apr 12', waterfowl: 'Oct 1',  elk: 'Sep 15'  }, bagLimits: { deer: '1 per tag', turkey: '2/spring', waterfowl: '6 ducks/day', elk: '1/tag (draw)' }, licenseNote: 'Resident license: ~$28',      sourceUrl: 'https://gfp.sd.gov/deer/', lastUpdated: TS },\n  { id: 'WI', name: 'Wisconsin',      country: 'US', highlight: 'Deer: Nov 22', seasons: { deerOpener: 'Nov 22', turkeySpring: 'Apr 19', waterfowl: 'Oct 1',  bear: 'Sep 6', elk: 'Sep 10' }, bagLimits: { deer: '1 antlered + bonus tags', turkey: '1 bird/spring', waterfowl: '6 ducks/day', bear: '1/season', elk: '1/tag (draw)' }, licenseNote: 'Resident license: ~$20', sourceUrl: 'https://dnr.wisconsin.gov/topic/hunt/deer', lastUpdated: TS },\n  // \u2500\u2500 South \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  { id: 'AL', name: 'Alabama',        country: 'US', highlight: 'Deer: Oct 15', seasons: { deerOpener: 'Oct 15', turkeySpring: 'Mar 22', waterfowl: 'Oct 1'                 }, bagLimits: { deer: '3/day, 1 antlered/day', turkey: '2/day, 5/season', waterfowl: '6 ducks/day' }, licenseNote: 'Resident license: ~$17.25',   sourceUrl: 'https://www.outdooralabama.com/deer', lastUpdated: TS },\n  { id: 'AR', name: 'Arkansas',       country: 'US', highlight: 'Deer: Sep 23', seasons: { deerOpener: 'Sep 23', turkeySpring: 'Apr 1',  waterfowl: 'Oct 1',  bear: 'Sep 30' }, bagLimits: { deer: '5/season', turkey: '2/spring', waterfowl: '6 ducks/day', bear: '1/season' }, licenseNote: 'Resident license: ~$35',      sourceUrl: 'https://www.agfc.com/en/hunting/big-game/deer/', lastUpdated: TS },\n  { id: 'KY', name: 'Kentucky',       country: 'US', highlight: 'Deer: Sep 7',  seasons: { deerOpener: 'Sep 7',  turkeySpring: 'Apr 14', waterfowl: 'Oct 1',  bear: 'Nov 17' }, bagLimits: { deer: '4/season (2 antlered)', turkey: '2/spring', waterfowl: '6 ducks/day', bear: '1/season' }, licenseNote: 'Resident license: ~$25',      sourceUrl: 'https://fw.ky.gov/Hunt/Pages/Deer-Regulations.aspx', lastUpdated: TS },\n  { id: 'LA', name: 'Louisiana',      country: 'US', highlight: 'Deer: Oct 1',  seasons: { deerOpener: 'Oct 1',  turkeySpring: 'Mar 27', waterfowl: 'Oct 1'                 }, bagLimits: { deer: '6/season (3 antlered)', turkey: '2/spring', waterfowl: '6 ducks/day' }, licenseNote: 'Resident license: ~$15',      sourceUrl: 'https://www.wlf.louisiana.gov/page/deer', lastUpdated: TS },\n  { id: 'MS', name: 'Mississippi',    country: 'US', highlight: 'Deer: Oct 1',  seasons: { deerOpener: 'Oct 1',  turkeySpring: 'Mar 15', waterfowl: 'Oct 1'                 }, bagLimits: { deer: '3/day, 1 antlered', turkey: '3/day, 6/season', waterfowl: '6 ducks/day' }, licenseNote: 'Resident license: ~$10.80',   sourceUrl: 'https://www.mdwfp.com/hunting/regulations/', lastUpdated: TS },\n  { id: 'OK', name: 'Oklahoma',       country: 'US', highlight: 'Deer: Oct 1',  seasons: { deerOpener: 'Oct 1',  turkeySpring: 'Apr 14', waterfowl: 'Oct 1',  elk: 'Sep 20'  }, bagLimits: { deer: '4/season', turkey: '2/spring', waterfowl: '6 ducks/day', elk: '1/tag (draw)' }, licenseNote: 'Resident license: ~$36',      sourceUrl: 'https://www.wildlifedepartment.com/hunting/deer', lastUpdated: TS },\n  { id: 'TN', name: 'Tennessee',      country: 'US', highlight: 'Deer: Sep 28', seasons: { deerOpener: 'Sep 28', turkeySpring: 'Apr 7',  waterfowl: 'Oct 1',  bear: 'Oct 14' }, bagLimits: { deer: '3/day (1 antlered)', turkey: '2/spring', waterfowl: '6 ducks/day', bear: '1/season' }, licenseNote: 'Resident license: ~$34',      sourceUrl: 'https://www.tn.gov/twra/hunting/deer.html', lastUpdated: TS },\n  { id: 'TX', name: 'Texas',          country: 'US', highlight: 'Deer: Nov 2',  seasons: { deerOpener: 'Nov 2',  turkeySpring: 'Apr 1',  waterfowl: 'Oct 24', elk: 'Nov 2'   }, bagLimits: { deer: '5/season (2 antlered, 3 antlerless)', turkey: '4/season', waterfowl: '6 ducks/day', elk: '1/tag (draw)' }, licenseNote: 'Resident license: ~$25',      sourceUrl: 'https://tpwd.texas.gov/regulations/outdoor-annual/', lastUpdated: TS },\n  // \u2500\u2500 West \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  { id: 'AK', name: 'Alaska',         country: 'US', highlight: 'Moose: Aug 20',seasons: { deerOpener: 'Aug 1',  waterfowl: 'Sep 1',  elk: 'Aug 20', bear: 'Sep 1', moose: 'Aug 20' }, bagLimits: { deer: '4/season (Sitka)', turkey: 'N/A', waterfowl: '7 ducks/day', elk: '1/season', bear: '1/season', moose: '1/season' }, licenseNote: 'Resident license: ~$25', sourceUrl: 'https://www.adfg.alaska.gov/index.cfm?adfg=regulations.main', lastUpdated: TS },\n  { id: 'AZ', name: 'Arizona',        country: 'US', highlight: 'Elk: Aug 23',  seasons: { deerOpener: 'Oct 18', turkeySpring: 'Apr 12', waterfowl: 'Oct 1', elk: 'Aug 23', bear: 'Aug 9' }, bagLimits: { deer: '1/tag (draw)', turkey: '2/spring', waterfowl: '7 ducks/day', elk: '1/tag (draw)', bear: '1/season' }, licenseNote: 'Resident license: ~$37', sourceUrl: 'https://www.azgfd.com/hunting/regulations/', lastUpdated: TS },\n  { id: 'CA', name: 'California',     country: 'US', highlight: 'Deer: Aug 24', seasons: { deerOpener: 'Aug 24', turkeySpring: 'Apr 13', waterfowl: 'Oct 19', elk: 'Sep 1', bear: 'Aug 10' }, bagLimits: { deer: '1/tag', turkey: '3/spring', waterfowl: '7 ducks/day', elk: '1/tag (draw)', bear: '1/season' }, licenseNote: 'Resident license: ~$62.02', sourceUrl: 'https://wildlife.ca.gov/Regulations/Hunting', lastUpdated: TS },\n  { id: 'CO', name: 'Colorado',       country: 'US', highlight: 'Elk: Sep 2',   seasons: { deerOpener: 'Sep 2',  turkeySpring: 'Apr 13', waterfowl: 'Oct 1',  elk: 'Sep 2',  bear: 'Sep 2'  }, bagLimits: { deer: '1/tag', turkey: '2/spring', waterfowl: '7 ducks/day', elk: '1/tag', bear: '1/season' }, licenseNote: 'Resident license: ~$36.38',   sourceUrl: 'https://cpw.state.co.us/learn/Pages/RegulationsandUpdates.aspx', lastUpdated: TS },\n  { id: 'HI', name: 'Hawaii',         country: 'US', highlight: 'Deer: Aug 1',  seasons: { deerOpener: 'Aug 1',  turkeySpring: 'Feb 1'                                       }, bagLimits: { deer: '2/day (axis/blacktail)', turkey: 'unlimited' }, licenseNote: 'Resident license: ~$10',      sourceUrl: 'https://dlnr.hawaii.gov/dofaw/hunting/regulations/', lastUpdated: TS },\n  { id: 'ID', name: 'Idaho',          country: 'US', highlight: 'Elk: Sep 1',   seasons: { deerOpener: 'Oct 10', turkeySpring: 'Apr 15', waterfowl: 'Oct 1',  elk: 'Sep 1',  bear: 'Sep 1', moose: 'Sep 1' }, bagLimits: { deer: '1/tag', turkey: '2/spring', waterfowl: '7 ducks/day', elk: '1/tag', bear: '1/season', moose: '1/season (draw)' }, licenseNote: 'Resident license: ~$16.75', sourceUrl: 'https://idfg.idaho.gov/rules/big-game', lastUpdated: TS },\n  { id: 'MT', name: 'Montana',        country: 'US', highlight: 'Elk: Sep 2',   seasons: { deerOpener: 'Oct 26', turkeySpring: 'Apr 15', waterfowl: 'Oct 1',  elk: 'Sep 2',  bear: 'Sep 15', moose: 'Oct 15' }, bagLimits: { deer: '1/tag', turkey: '2/spring', waterfowl: '7 ducks/day', elk: '1/tag', bear: '1/season', moose: '1/season (draw)' }, licenseNote: 'Resident license: ~$28', sourceUrl: 'https://fwp.mt.gov/hunting/regulations', lastUpdated: TS },\n  { id: 'NV', name: 'Nevada',         country: 'US', highlight: 'Deer: Oct 10', seasons: { deerOpener: 'Oct 10', waterfowl: 'Oct 1',  elk: 'Aug 28', bear: 'Aug 28'         }, bagLimits: { deer: '1/tag (draw)', turkey: '2/spring', waterfowl: '7 ducks/day', elk: '1/tag (draw)', bear: '1/season' }, licenseNote: 'Resident license: ~$29',      sourceUrl: 'https://www.ndow.org/hunting/regulations/', lastUpdated: TS },\n  { id: 'NM', name: 'New Mexico',     country: 'US', highlight: 'Elk: Sep 1',   seasons: { deerOpener: 'Oct 1',  turkeySpring: 'Apr 12', waterfowl: 'Oct 1',  elk: 'Sep 1',  bear: 'Sep 1'  }, bagLimits: { deer: '1/tag (draw)', turkey: '2/spring', waterfowl: '7 ducks/day', elk: '1/tag (draw)', bear: '1/season' }, licenseNote: 'Resident license: ~$32',      sourceUrl: 'https://www.wildlife.state.nm.us/hunting/regulations/', lastUpdated: TS },\n  { id: 'OR', name: 'Oregon',         country: 'US', highlight: 'Elk: Sep 1',   seasons: { deerOpener: 'Oct 5',  turkeySpring: 'Apr 15', waterfowl: 'Oct 1',  elk: 'Sep 1',  bear: 'Aug 1'  }, bagLimits: { deer: '1/tag', turkey: '2/spring', waterfowl: '7 ducks/day', elk: '1/tag', bear: '2/year' }, licenseNote: 'Resident license: ~$29.50',   sourceUrl: 'https://www.dfw.state.or.us/regulations/', lastUpdated: TS },\n  { id: 'UT', name: 'Utah',           country: 'US', highlight: 'Elk: Sep 1',   seasons: { deerOpener: 'Oct 19', turkeySpring: 'Apr 13', waterfowl: 'Oct 1',  elk: 'Sep 1',  bear: 'Aug 1', moose: 'Aug 26' }, bagLimits: { deer: '1/tag (draw)', turkey: '2/spring', waterfowl: '7 ducks/day', elk: '1/tag (draw)', bear: '1/season', moose: '1/season (draw)' }, licenseNote: 'Resident license: ~$34', sourceUrl: 'https://wildlife.utah.gov/hunting-regulations.html', lastUpdated: TS },\n  { id: 'WA', name: 'Washington',     country: 'US', highlight: 'Elk: Sep 15',  seasons: { deerOpener: 'Oct 12', turkeySpring: 'Apr 15', waterfowl: 'Oct 1',  elk: 'Sep 15', bear: 'Aug 1', moose: 'Sep 15' }, bagLimits: { deer: '1/tag', turkey: '2/spring', waterfowl: '7 ducks/day', elk: '1/tag', bear: '1/season', moose: '1/season (draw)' }, licenseNote: 'Resident license: ~$31.50', sourceUrl: 'https://wdfw.wa.gov/hunting/regulations', lastUpdated: TS },\n  { id: 'WY', name: 'Wyoming',        country: 'US', highlight: 'Elk: Sep 1',   seasons: { deerOpener: 'Oct 1',  turkeySpring: 'Apr 15', waterfowl: 'Oct 1',  elk: 'Sep 1',  bear: 'Sep 1', moose: 'Sep 15' }, bagLimits: { deer: '1/tag', turkey: '2/spring', waterfowl: '7 ducks/day', elk: '1/tag', bear: '1/season', moose: '1/season (draw)' }, licenseNote: 'Resident license: ~$30', sourceUrl: 'https://wgfd.wyo.gov/Hunting/Regulations', lastUpdated: TS },\n  // \u2500\u2500 Canada \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  { id: 'AB', name: 'Alberta',                  country: 'CA', highlight: 'Deer: Sep 6',    seasons: { deerOpener: 'Sep 6',  waterfowl: 'Sep 1',  elk: 'Sep 6',  bear: 'Apr 1',  moose: 'Sep 6'  }, bagLimits: { deer: '1/season', waterfowl: '6 ducks/day', elk: '1/tag', bear: '1/season', moose: '1/season (draw)' }, licenseNote: 'Resident license: ~C$9.58',    sourceUrl: 'https://www.alberta.ca/hunting-regulations.aspx', lastUpdated: TS },\n  { id: 'BC', name: 'British Columbia',         country: 'CA', highlight: 'Deer: Sep 10',   seasons: { deerOpener: 'Sep 10', waterfowl: 'Sep 15', elk: 'Sep 10', bear: 'Apr 1',  moose: 'Sep 10' }, bagLimits: { deer: '1/season', waterfowl: '6 ducks/day', elk: '1/tag', bear: '2/year', moose: '1/season' }, licenseNote: 'Resident license: ~C$21',      sourceUrl: 'https://www2.gov.bc.ca/gov/content/sports-culture/recreation/hunting/regulations', lastUpdated: TS },\n  { id: 'MB', name: 'Manitoba',                 country: 'CA', highlight: 'Deer: Nov 8',    seasons: { deerOpener: 'Nov 8',  waterfowl: 'Sep 1',  elk: 'Sep 20', bear: 'Sep 1',  moose: 'Sep 15' }, bagLimits: { deer: '1/season', waterfowl: '6 ducks/day', elk: '1/tag', bear: '1/season', moose: '1/season (draw)' }, licenseNote: 'Resident license: ~C$22',      sourceUrl: 'https://www.gov.mb.ca/nrnd/fish-wildlife/hunting/regulations/', lastUpdated: TS },\n  { id: 'NB', name: 'New Brunswick',            country: 'CA', highlight: 'Deer: Oct 14',   seasons: { deerOpener: 'Oct 14', waterfowl: 'Sep 20', bear: 'Sep 1',  moose: 'Oct 7'  }, bagLimits: { deer: '1/season', waterfowl: '6 ducks/day', bear: '1/season', moose: '1/season (draw)' }, licenseNote: 'Resident license: ~C$25.56',   sourceUrl: 'https://www2.gnb.ca/content/gnb/en/departments/erd/fish_and_wildlife/content/hunting.html', lastUpdated: TS },\n  { id: 'NL', name: 'Newfoundland & Labrador',  country: 'CA', highlight: 'Moose: Oct 5',   seasons: { waterfowl: 'Sep 15', bear: 'Sep 15', moose: 'Oct 5'                    }, bagLimits: { waterfowl: '6 ducks/day', bear: '1/season', moose: '1/season (draw)' }, licenseNote: 'Resident license: ~C$20',      sourceUrl: 'https://www.gov.nl.ca/ffa/wildlife/hunting-and-trapping/hunting-regulations/', lastUpdated: TS },\n  { id: 'NT', name: 'Northwest Territories',    country: 'CA', highlight: 'Moose: Aug 15',  seasons: { waterfowl: 'Sep 1',  bear: 'Aug 15', moose: 'Aug 15'                   }, bagLimits: { waterfowl: '6 ducks/day', bear: '1/season', moose: '1/season' }, licenseNote: 'Resident license: ~C$10',      sourceUrl: 'https://www.enr.gov.nt.ca/en/services/hunting-regulations', lastUpdated: TS },\n  { id: 'NS', name: 'Nova Scotia',              country: 'CA', highlight: 'Deer: Oct 1',    seasons: { deerOpener: 'Oct 1',  waterfowl: 'Sep 20', bear: 'Sep 22', moose: 'Oct 20' }, bagLimits: { deer: '1/season', waterfowl: '6 ducks/day', bear: '1/season', moose: '1/season (draw)' }, licenseNote: 'Resident license: ~C$25.95',   sourceUrl: 'https://novascotia.ca/natr/wildlife/hunting/regulations.asp', lastUpdated: TS },\n  { id: 'NU', name: 'Nunavut',                  country: 'CA', highlight: 'Caribou: Aug 1', seasons: { waterfowl: 'Sep 1',  bear: 'Mar 1'                                     }, bagLimits: { waterfowl: '6 ducks/day', bear: '1/season (resident)' }, licenseNote: 'Resident license: ~C$15',      sourceUrl: 'https://gov.nu.ca/environment/information/hunting-and-trapping', lastUpdated: TS },\n  { id: 'ON', name: 'Ontario',                  country: 'CA', highlight: 'Deer: Nov 1',    seasons: { deerOpener: 'Nov 1',  waterfowl: 'Sep 21', elk: 'Oct 5',  bear: 'Sep 9',  moose: 'Oct 14' }, bagLimits: { deer: '1/tag (zone)', waterfowl: '6 ducks/day', elk: '1/tag (draw)', bear: '1/season', moose: '1/season (zone)' }, licenseNote: 'Resident license: ~C$42.29', sourceUrl: 'https://www.ontario.ca/page/hunting-regulations-summary', lastUpdated: TS },\n  { id: 'PE', name: 'Prince Edward Island',     country: 'CA', highlight: 'Deer: Nov 1',    seasons: { deerOpener: 'Nov 1',  waterfowl: 'Oct 1'                                }, bagLimits: { deer: '1/season', waterfowl: '6 ducks/day' }, licenseNote: 'Resident license: ~C$27',      sourceUrl: 'https://www.princeedwardisland.ca/en/information/finance/hunting-regulations', lastUpdated: TS },\n  { id: 'QC', name: 'Quebec',                   country: 'CA', highlight: 'Deer: Oct 26',   seasons: { deerOpener: 'Oct 26', waterfowl: 'Sep 27', bear: 'Sep 1',  moose: 'Oct 5'  }, bagLimits: { deer: '1/season (zone)', waterfowl: '6 ducks/day', bear: '1/season', moose: '1/season (zone)' }, licenseNote: 'Resident license: ~C$26.06',   sourceUrl: 'https://www.quebec.ca/loisirs-sport-plein-air/chasse/reglementation/', lastUpdated: TS },\n  { id: 'SK', name: 'Saskatchewan',             country: 'CA', highlight: 'Deer: Nov 1',    seasons: { deerOpener: 'Nov 1',  waterfowl: 'Sep 1',  elk: 'Sep 8',  bear: 'Sep 1',  moose: 'Sep 15' }, bagLimits: { deer: '1/season', waterfowl: '6 ducks/day', elk: '1/tag', bear: '1/season', moose: '1/season (draw)' }, licenseNote: 'Resident license: ~C$34.60', sourceUrl: 'https://www.saskatchewan.ca/residents/environment-public-health-and-safety/fish-and-wildlife/hunting/regulations', lastUpdated: TS },\n  { id: 'YT', name: 'Yukon',                    country: 'CA', highlight: 'Moose: Aug 1',   seasons: { waterfowl: 'Sep 1',  bear: 'Apr 15', moose: 'Aug 1'                    }, bagLimits: { waterfowl: '6 ducks/day', bear: '1/season', moose: '1/season' }, licenseNote: 'Resident license: ~C$15',      sourceUrl: 'https://yukon.ca/en/outdoor-recreation-and-wildlife/hunting/hunting-regulations', lastUpdated: TS },\n];\n\n/** Name \u2192 summary map for fast lookup by jurisdiction display name */\nconst SUMMARY_BY_NAME = new Map<string, RegulationSummary>(\n  REGULATION_SUMMARIES.map(s => [s.name.toLowerCase(), s])\n);\n/** 2-letter code \u2192 summary */\nconst SUMMARY_BY_ID = new Map<string, RegulationSummary>(\n  REGULATION_SUMMARIES.map(s => [s.id.toUpperCase(), s])\n);\n\nexport function getRegulationSummary(stateOrCode: string): RegulationSummary | null {\n  const trimmed = stateOrCode.trim();\n  return (\n    SUMMARY_BY_ID.get(trimmed.toUpperCase()) ??\n    SUMMARY_BY_NAME.get(trimmed.toLowerCase()) ??\n    null\n  );\n}\n\nexport function getAllRegulationSummaries(): RegulationSummary[] {\n  return REGULATION_SUMMARIES;\n}\n", "import { Router } from \"express\";\nimport SunCalc from \"suncalc\";\n\nconst router = Router();\n\nfunction makeFmt(tz: string) {\n  return (date: Date | undefined): string => {\n    if (!date || isNaN(date.getTime())) return \"\u2014\";\n    try {\n      return date.toLocaleTimeString(\"en-US\", {\n        hour: \"numeric\",\n        minute: \"2-digit\",\n        hour12: true,\n        timeZone: tz,\n      });\n    } catch {\n      return date.toLocaleTimeString(\"en-US\", {\n        hour: \"numeric\",\n        minute: \"2-digit\",\n        hour12: true,\n      });\n    }\n  };\n}\n\nfunction getMoonPhase(phase: number): { name: string; emoji: string } {\n  if (phase < 0.0625 || phase >= 0.9375) return { name: \"New Moon\", emoji: \"\uD83C\uDF11\" };\n  if (phase < 0.1875) return { name: \"Waxing Crescent\", emoji: \"\uD83C\uDF12\" };\n  if (phase < 0.3125) return { name: \"First Quarter\", emoji: \"\uD83C\uDF13\" };\n  if (phase < 0.4375) return { name: \"Waxing Gibbous\", emoji: \"\uD83C\uDF14\" };\n  if (phase < 0.5625) return { name: \"Full Moon\", emoji: \"\uD83C\uDF15\" };\n  if (phase < 0.6875) return { name: \"Waning Gibbous\", emoji: \"\uD83C\uDF16\" };\n  if (phase < 0.8125) return { name: \"Last Quarter\", emoji: \"\uD83C\uDF17\" };\n  return { name: \"Waning Crescent\", emoji: \"\uD83C\uDF18\" };\n}\n\nfunction findMoonTransit(date: Date, lat: number, lon: number): Date | null {\n  const start = new Date(date);\n  start.setUTCHours(0, 0, 0, 0);\n  let maxAlt = -Infinity;\n  let transit: Date | null = null;\n  for (let i = 0; i < 288; i++) {\n    const t = new Date(start.getTime() + i * 5 * 60 * 1000);\n    const pos = SunCalc.getMoonPosition(t, lat, lon);\n    if (pos.altitude > maxAlt) { maxAlt = pos.altitude; transit = t; }\n  }\n  return transit;\n}\n\nfunction solunarScore(phase: number): number {\n  const dNew = Math.min(phase, 1 - phase);\n  const dFull = Math.abs(phase - 0.5);\n  const minDist = Math.min(dNew, dFull);\n  return Math.round(40 + 60 * (1 - minDist / 0.25));\n}\n\nfunction ratingLabel(score: number): string {\n  if (score >= 85) return \"EXCELLENT\";\n  if (score >= 65) return \"GOOD\";\n  if (score >= 45) return \"FAIR\";\n  return \"SLOW\";\n}\n\nfunction conditionsText(\n  phaseName: string,\n  illum: number,\n  score: number,\n  rating: string,\n  windows: { type: string; label: string; start: string; end: string }[]\n): string {\n  const majorW = windows.filter((w) => w.type === \"major\")[0];\n  const moonDesc =\n    illum > 80\n      ? \"High lunar illumination creates strong gravitational pull\u2014expect aggressive feeding.\"\n      : illum > 40\n      ? \"Moderate lunar influence with steady activity throughout the day.\"\n      : \"Low lunar pressure; fish may feed selectively. Target the major windows.\";\n  const windowStr = majorW ? ` Best window: ${majorW.start}\u2013${majorW.end}.` : \"\";\n  return `${phaseName} \u00B7 ${illum}% illuminated. ${moonDesc}${windowStr} Overall rating: ${rating}.`;\n}\n\nrouter.get(\"/\", (req, res) => {\n  const lat = parseFloat(req.query.lat as string);\n  const lon = parseFloat(req.query.lon as string);\n  const dateStr = (req.query.date as string) || new Date().toISOString().slice(0, 10);\n  const tz = (req.query.tz as string) || \"UTC\";\n\n  if (isNaN(lat) || isNaN(lon)) {\n    return res.status(400).json({ error: \"lat and lon are required\" });\n  }\n\n  const fmt = makeFmt(tz);\n\n  // Use local midnight in the supplied timezone so SunCalc sees the correct calendar day\n  const date = new Date(`${dateStr}T12:00:00Z`);\n\n  const sunTimes = SunCalc.getTimes(date, lat, lon);\n  const moonTimes = SunCalc.getMoonTimes(date, lat, lon);\n  const moonIll = SunCalc.getMoonIllumination(date);\n\n  const { name: phaseName, emoji: phaseEmoji } = getMoonPhase(moonIll.phase);\n  const illumination = Math.round(moonIll.fraction * 100);\n\n  const transit = findMoonTransit(date, lat, lon);\n\n  const windows: { type: \"major\" | \"minor\"; label: string; start: string; end: string; _ms: number }[] = [];\n\n  if (transit) {\n    const s1 = new Date(transit.getTime() - 60 * 60 * 1000);\n    const e1 = new Date(transit.getTime() + 60 * 60 * 1000);\n    windows.push({ type: \"major\", label: \"MOON OVERHEAD\", start: fmt(s1), end: fmt(e1), _ms: s1.getTime() });\n\n    const antiT = new Date(transit.getTime() + (12 * 60 + 25) * 60 * 1000);\n    const s2 = new Date(antiT.getTime() - 60 * 60 * 1000);\n    const e2 = new Date(antiT.getTime() + 60 * 60 * 1000);\n    windows.push({ type: \"major\", label: \"MOON UNDERFOOT\", start: fmt(s2), end: fmt(e2), _ms: s2.getTime() });\n  }\n\n  if (moonTimes.rise) {\n    const rise = moonTimes.rise as Date;\n    windows.push({ type: \"minor\", label: \"MOONRISE\", start: fmt(new Date(rise.getTime() - 30 * 60000)), end: fmt(new Date(rise.getTime() + 30 * 60000)), _ms: rise.getTime() - 30 * 60000 });\n  }\n  if (moonTimes.set) {\n    const set = moonTimes.set as Date;\n    windows.push({ type: \"minor\", label: \"MOONSET\", start: fmt(new Date(set.getTime() - 30 * 60000)), end: fmt(new Date(set.getTime() + 30 * 60000)), _ms: set.getTime() - 30 * 60000 });\n  }\n\n  windows.sort((a, b) => a._ms - b._ms);\n  const feedingWindows = windows.map(({ _ms: _, ...w }) => w);\n\n  const score = solunarScore(moonIll.phase);\n  const rating = ratingLabel(score);\n\n  return res.json({\n    date: dateStr,\n    lat,\n    lon,\n    moon: { phase: moonIll.phase, phaseName, phaseEmoji, illumination, angle: moonIll.angle },\n    sun: {\n      sunrise: fmt(sunTimes.sunrise),\n      sunset: fmt(sunTimes.sunset),\n      solarNoon: fmt(sunTimes.solarNoon),\n      dawn: fmt(sunTimes.dawn),\n      dusk: fmt(sunTimes.dusk),\n      goldenHourMorning: fmt(sunTimes.goldenHour),\n      goldenHourEvening: fmt(sunTimes.goldenHourEnd),\n    },\n    moonTimes: {\n      rise: moonTimes.rise ? fmt(moonTimes.rise as Date) : null,\n      set: moonTimes.set ? fmt(moonTimes.set as Date) : null,\n      transit: transit ? fmt(transit) : null,\n    },\n    feedingWindows,\n    solunarScore: score,\n    solunarRating: rating,\n    conditions: conditionsText(phaseName, illumination, score, rating, feedingWindows),\n  });\n});\n\nexport default router;\n", "import { Router } from \"express\";\n\nconst router = Router();\n\nconst MAX_QUERY_LENGTH = 200;\nconst GEOCODE_TIMEOUT_MS = 5000;\n\nrouter.get(\"/reverse\", async (req, res) => {\n  const latRaw = req.query.lat as string;\n  const lonRaw = req.query.lon as string;\n  const lat = parseFloat(latRaw);\n  const lon = parseFloat(lonRaw);\n\n  if (isNaN(lat) || isNaN(lon)) {\n    return res.status(400).json({ error: \"lat and lon parameters required\" });\n  }\n  if (lat < -90 || lat > 90 || lon < -180 || lon > 180) {\n    return res.status(400).json({ error: \"Invalid coordinates\" });\n  }\n\n  const controller = new AbortController();\n  const timer = setTimeout(() => controller.abort(), GEOCODE_TIMEOUT_MS);\n\n  try {\n    const url = `https://nominatim.openstreetmap.org/reverse?lat=${lat}&lon=${lon}&format=json&addressdetails=1`;\n    const response = await fetch(url, {\n      signal: controller.signal,\n      headers: {\n        \"User-Agent\": \"HookNBone/1.0 hunting-fishing-scout-app\",\n        \"Accept-Language\": \"en\",\n      },\n    });\n    clearTimeout(timer);\n    if (!response.ok) throw new Error(`Nominatim ${response.status}`);\n\n    const data = (await response.json()) as {\n      display_name?: string;\n      address?: {\n        state?: string;\n        province?: string;\n        country?: string;\n        country_code?: string;\n      };\n    };\n\n    const stateName = data.address?.state ?? data.address?.province ?? null;\n    const country = data.address?.country ?? null;\n    const countryCode = data.address?.country_code?.toLowerCase() ?? null;\n    const displayName = data.display_name ?? null;\n\n    return res.json({ stateName, country, countryCode, displayName });\n  } catch (_e) {\n    clearTimeout(timer);\n    return res.status(500).json({ error: \"Reverse geocoding failed\" });\n  }\n});\n\nrouter.get(\"/\", async (req, res) => {\n  const q = req.query.q as string;\n  if (!q?.trim()) return res.status(400).json({ error: \"q parameter required\" });\n\n  if (q.trim().length > MAX_QUERY_LENGTH) {\n    return res.status(400).json({ error: \"Query too long\" });\n  }\n\n  const controller = new AbortController();\n  const timer = setTimeout(() => controller.abort(), GEOCODE_TIMEOUT_MS);\n\n  try {\n    const url = `https://nominatim.openstreetmap.org/search?q=${encodeURIComponent(q.trim())}&format=json&limit=5&addressdetails=1`;\n    const response = await fetch(url, {\n      signal: controller.signal,\n      headers: {\n        \"User-Agent\": \"HookNBone/1.0 hunting-fishing-scout-app\",\n        \"Accept-Language\": \"en\",\n      },\n    });\n    clearTimeout(timer);\n    if (!response.ok) throw new Error(`Nominatim ${response.status}`);\n\n    const data = (await response.json()) as {\n      display_name: string;\n      lat: string;\n      lon: string;\n    }[];\n\n    const results = data.map((item) => ({\n      name: item.display_name.split(\",\").slice(0, 3).join(\",\").trim(),\n      displayName: item.display_name,\n      lat: parseFloat(item.lat),\n      lon: parseFloat(item.lon),\n    }));\n\n    return res.json({ results });\n  } catch (e) {\n    clearTimeout(timer);\n    return res.status(500).json({ error: \"Geocoding failed\" });\n  }\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { getSessionUser } from \"../lib/authMiddleware\";\nimport { db, quotaCountersTable, youtubeSearchCacheTable } from \"@workspace/db\";\nimport { eq, sql } from \"drizzle-orm\";\n\nconst router: IRouter = Router();\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// YouTube search proxy. Wraps the YouTube Data API v3 search endpoint with\n// caching because search costs 100 quota units per call and the default\n// project quota is only 10,000 units/day (~100 searches/day).\n//\n// Two-layer cache:\n//   1. In-memory Map  \u2014 fast path, avoids DB round-trip for hot queries.\n//   2. DB (youtube_search_cache table) \u2014 survives process restarts so a\n//      reboot doesn't instantly burn quota re-fetching the same queries.\n//\n// Quota counter (globalQuotaUsed) is persisted to the quota_counters DB\n// table using the same atomic UPSERT pattern as the feed-refresh job so the\n// daily budget survives process restarts.\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst YT_API_BASE = \"https://www.googleapis.com/youtube/v3\";\nconst SEARCH_TTL_MS = 10 * 60 * 1000;\nconst DISCOVER_TTL_MS = 60 * 60 * 1000;\nconst MAX_RESULTS = 25;\n\ninterface YTSearchItem {\n  videoId: string;\n  title: string;\n  description: string;\n  channelTitle: string;\n  channelId: string;\n  publishedAt: string;\n  thumbnail: string;\n  url: string;\n  viewCount?: number;\n  likeCount?: number;\n  duration?: string;\n}\n\ninterface YTSearchResponse {\n  items: YTSearchItem[];\n  nextPageToken?: string;\n  cached: boolean;\n}\n\n// \u2500\u2500 In-memory cache (layer 1) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst memCache = new Map<string, { ts: number; ttl: number; data: YTSearchResponse }>();\n\nfunction getMemCached(key: string): YTSearchResponse | null {\n  const hit = memCache.get(key);\n  if (!hit) return null;\n  if (Date.now() - hit.ts > hit.ttl) {\n    memCache.delete(key);\n    return null;\n  }\n  return { ...hit.data, cached: true };\n}\n\nfunction setMemCached(key: string, data: YTSearchResponse, ttl: number): void {\n  memCache.set(key, { ts: Date.now(), ttl, data });\n}\n\n// \u2500\u2500 DB cache helpers (layer 2) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function getDbCached(key: string): Promise<{ data: YTSearchResponse; ttlMs: number } | null> {\n  try {\n    const rows = await db\n      .select()\n      .from(youtubeSearchCacheTable)\n      .where(eq(youtubeSearchCacheTable.key, key))\n      .limit(1);\n    if (!rows.length) return null;\n    const row = rows[0]!;\n    const age = Date.now() - row.fetchedAt.getTime();\n    if (age > row.ttlMs) return null;\n    return {\n      data: { ...(JSON.parse(row.dataJson) as YTSearchResponse), cached: true },\n      ttlMs: row.ttlMs,\n    };\n  } catch {\n    return null;\n  }\n}\n\nasync function setDbCached(key: string, data: YTSearchResponse, ttlMs: number): Promise<void> {\n  try {\n    const now = new Date();\n    await db\n      .insert(youtubeSearchCacheTable)\n      .values({ key, dataJson: JSON.stringify(data), fetchedAt: now, ttlMs })\n      .onConflictDoUpdate({\n        target: youtubeSearchCacheTable.key,\n        set: { dataJson: JSON.stringify(data), fetchedAt: now, ttlMs },\n      });\n  } catch {\n    // Non-fatal \u2014 caller already has fresh data to return\n  }\n}\n\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Global daily quota budget (hard ceiling).\n// 10,000 YouTube units/day \u00F7 100 per search = ~100 live calls/day.\n// We cap at 80 to leave a 20-call safety buffer for bursts and discover\n// warm-ups. No single actor can burn more than this application-wide.\n//\n// The counter is persisted in the quota_counters DB table so it survives\n// process restarts. An in-memory fallback is used only when the DB is\n// temporarily unavailable.\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst GLOBAL_DAILY_BUDGET = 80;\nconst GLOBAL_QUOTA_COUNTER = \"youtube_search_global\";\n\n// In-memory fallback for when the DB is temporarily unavailable\nlet globalQuotaFallbackUsed = 0;\nlet globalQuotaFallbackDayStart = Date.now();\n\nfunction todayUtc(): string {\n  return new Date().toISOString().slice(0, 10);\n}\n\nasync function consumeGlobalQuota(): Promise<boolean> {\n  const today = todayUtc();\n  try {\n    // Atomically increment the counter for today, resetting if the stored date\n    // differs (a new UTC day has started). Returns the new count after increment.\n    const result = await db\n      .insert(quotaCountersTable)\n      .values({ name: GLOBAL_QUOTA_COUNTER, dateUtc: today, count: 1 })\n      .onConflictDoUpdate({\n        target: quotaCountersTable.name,\n        set: {\n          dateUtc: today,\n          count: sql`CASE WHEN ${quotaCountersTable.dateUtc} = ${today} THEN ${quotaCountersTable.count} + 1 ELSE 1 END`,\n        },\n      })\n      .returning({ count: quotaCountersTable.count });\n    const newCount = result[0]?.count ?? 1;\n    // Allow this call only if we are within budget (conservative: we already\n    // incremented so if this returns false we stop without making the API call,\n    // meaning the counter overshoots actual API calls by at most 1 at the boundary).\n    return newCount <= GLOBAL_DAILY_BUDGET;\n  } catch {\n    // DB unavailable \u2014 fall back to in-memory counter so search keeps working.\n    const now = Date.now();\n    if (now - globalQuotaFallbackDayStart >= 24 * 60 * 60 * 1000) {\n      globalQuotaFallbackUsed = 0;\n      globalQuotaFallbackDayStart = now;\n    }\n    if (globalQuotaFallbackUsed >= GLOBAL_DAILY_BUDGET) return false;\n    globalQuotaFallbackUsed++;\n    return true;\n  }\n}\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Per-identity daily budget (primary DoS prevention layer).\n// Limits how many live (uncached) YouTube API calls a single IP or\n// authenticated user can trigger per day, so one actor cannot exhaust the\n// shared global pool.\n//   \u2022 Authenticated users  \u2192 15 live calls/day  (accountable identity)\n//   \u2022 Unauthenticated IPs  \u2192 5  live calls/day  (stricter, no accountability)\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst IDENTITY_DAILY_BUDGET_AUTHED = 15;\nconst IDENTITY_DAILY_BUDGET_ANON = 5;\n\nconst identityUsage = new Map<string, { count: number; resetAt: number }>();\n\nfunction consumeIdentityQuota(identity: string, authed: boolean): boolean {\n  const budget = authed ? IDENTITY_DAILY_BUDGET_AUTHED : IDENTITY_DAILY_BUDGET_ANON;\n  const now = Date.now();\n  const rec = identityUsage.get(identity);\n  if (!rec || now >= rec.resetAt) {\n    identityUsage.set(identity, { count: 1, resetAt: now + 24 * 60 * 60 * 1000 });\n    return true;\n  }\n  if (rec.count >= budget) return false;\n  rec.count++;\n  return true;\n}\n\n// Periodically evict expired identity entries to prevent unbounded map growth.\nsetInterval(\n  () => {\n    const now = Date.now();\n    for (const [key, rec] of identityUsage) {\n      if (now >= rec.resetAt) identityUsage.delete(key);\n    }\n  },\n  60 * 60 * 1000,\n);\n\n// Normalise the query before caching: lowercase + collapse whitespace so minor\n// variations (\"bass  fishing\" vs \"Bass Fishing\") hit the same cache entry.\nfunction normalizeQuery(q: string): string {\n  return q.toLowerCase().replace(/\\s+/g, \" \").trim();\n}\n\nfunction cacheKey(q: string, max: number, order: string, pageToken: string | undefined): string {\n  return `${normalizeQuery(q)}|${max}|${order}|${pageToken ?? \"\"}`;\n}\n\ninterface YTApiSearchResp {\n  items?: Array<{\n    id: { videoId?: string };\n    snippet: {\n      title: string;\n      description: string;\n      channelTitle: string;\n      channelId: string;\n      publishedAt: string;\n      thumbnails?: { high?: { url: string }; medium?: { url: string }; default?: { url: string } };\n    };\n  }>;\n  nextPageToken?: string;\n}\n\ninterface YTApiVideosResp {\n  items?: Array<{\n    id: string;\n    statistics?: { viewCount?: string; likeCount?: string };\n    contentDetails?: { duration?: string };\n  }>;\n}\n\nasync function fetchWithTimeout(url: string, ms: number): Promise<globalThis.Response> {\n  const ctrl = new AbortController();\n  const timer = setTimeout(() => ctrl.abort(), ms);\n  try {\n    return await fetch(url, { signal: ctrl.signal });\n  } finally {\n    clearTimeout(timer);\n  }\n}\n\nasync function performSearch(opts: {\n  apiKey: string;\n  q: string;\n  max: number;\n  order: string;\n  pageToken?: string;\n  ttl?: number;\n  identity: string;\n  authed: boolean;\n  log?: { warn: (...args: unknown[]) => void; error?: (...args: unknown[]) => void };\n}): Promise<{ ok: true; data: YTSearchResponse } | { ok: false; status: number; error: string }> {\n  const { apiKey, q, max, order, pageToken, ttl = SEARCH_TTL_MS, identity, authed, log } = opts;\n\n  const key = cacheKey(q, max, order, pageToken);\n\n  // Layer 1: in-memory (fast path)\n  const memHit = getMemCached(key);\n  if (memHit) return { ok: true, data: memHit };\n\n  // Layer 2: DB (survives restarts) \u2014 rehydrate memory with the persisted TTL\n  // so /search (10 min) and /discover (1 h) entries don't bleed into each other.\n  const dbHit = await getDbCached(key);\n  if (dbHit) {\n    setMemCached(key, dbHit.data, dbHit.ttlMs);\n    return { ok: true, data: dbHit.data };\n  }\n\n  // Per-identity daily cap (primary protection): prevents a single actor from\n  // consuming the full shared quota even if they rotate query strings.\n  if (!consumeIdentityQuota(identity, authed)) {\n    return {\n      ok: false,\n      status: 429,\n      error: \"YouTube search daily limit reached for your account. Try again tomorrow.\",\n    };\n  }\n\n  // Global daily hard ceiling (secondary protection): persisted to DB so\n  // the budget survives process restarts.\n  if (!(await consumeGlobalQuota())) {\n    return { ok: false, status: 503, error: \"YouTube API daily search budget reached; try again later\" };\n  }\n\n  const params = new URLSearchParams({\n    part: \"snippet\",\n    type: \"video\",\n    maxResults: String(max),\n    order,\n    q,\n    key: apiKey,\n    safeSearch: \"moderate\",\n    videoEmbeddable: \"true\",\n  });\n  if (pageToken) params.set(\"pageToken\", pageToken);\n\n  const searchResp = await fetchWithTimeout(`${YT_API_BASE}/search?${params}`, 8000);\n  if (!searchResp.ok) {\n    const body = await searchResp.text().catch(() => \"\");\n    log?.warn({ status: searchResp.status, body: body.slice(0, 200) }, \"YouTube search failed\");\n    if (searchResp.status === 403) {\n      return { ok: false, status: 503, error: \"YouTube API quota exceeded; try again later\" };\n    }\n    return { ok: false, status: 502, error: \"YouTube search failed\" };\n  }\n  const searchData = (await searchResp.json()) as YTApiSearchResp;\n  const baseItems: YTSearchItem[] = (searchData.items ?? [])\n    .filter((it) => it.id.videoId)\n    .map((it) => ({\n      videoId: it.id.videoId as string,\n      title: it.snippet.title,\n      description: it.snippet.description,\n      channelTitle: it.snippet.channelTitle,\n      channelId: it.snippet.channelId,\n      publishedAt: it.snippet.publishedAt,\n      thumbnail:\n        it.snippet.thumbnails?.high?.url ??\n        it.snippet.thumbnails?.medium?.url ??\n        it.snippet.thumbnails?.default?.url ??\n        \"\",\n      url: `https://www.youtube.com/watch?v=${it.id.videoId}`,\n    }));\n\n  if (baseItems.length > 0) {\n    const ids = baseItems.map((i) => i.videoId).join(\",\");\n    const vparams = new URLSearchParams({ part: \"statistics,contentDetails\", id: ids, key: apiKey });\n    try {\n      const vResp = await fetchWithTimeout(`${YT_API_BASE}/videos?${vparams}`, 8000);\n      if (vResp.ok) {\n        const vData = (await vResp.json()) as YTApiVideosResp;\n        const byId = new Map((vData.items ?? []).map((v) => [v.id, v]));\n        for (const item of baseItems) {\n          const v = byId.get(item.videoId);\n          if (v) {\n            const vc = v.statistics?.viewCount;\n            const lc = v.statistics?.likeCount;\n            if (vc) item.viewCount = Number(vc);\n            if (lc) item.likeCount = Number(lc);\n            if (v.contentDetails?.duration) item.duration = v.contentDetails.duration;\n          }\n        }\n      }\n    } catch (err) {\n      log?.warn({ err }, \"YouTube videos.list hydration failed (non-fatal)\");\n    }\n  }\n\n  const out: YTSearchResponse = { items: baseItems, cached: false };\n  if (searchData.nextPageToken) out.nextPageToken = searchData.nextPageToken;\n\n  // Write to both memory and DB caches.\n  setMemCached(key, out, ttl);\n  void setDbCached(key, out, ttl);\n\n  return { ok: true, data: out };\n}\n\n// Extract a stable identity key: authenticated user ID when available,\n// otherwise the trusted IP address set by `trust proxy 1`.\nfunction resolveIdentity(req: Request): { identity: string; authed: boolean } {\n  const userId = getSessionUser(req)?.userId;\n  if (userId) return { identity: `user:${userId}`, authed: true };\n  return { identity: `ip:${req.ip ?? \"unknown\"}`, authed: false };\n}\n\nrouter.get(\"/search\", async (req: Request, res: Response) => {\n  const apiKey = process.env[\"YOUTUBE_API_KEY\"];\n  if (!apiKey) {\n    res.status(503).json({ error: \"YouTube search is not configured\" });\n    return;\n  }\n\n  const q = (req.query[\"q\"] as string | undefined)?.trim();\n  if (!q || q.length < 2 || q.length > 200) {\n    res.status(400).json({ error: \"q must be 2\u2013200 characters\" });\n    return;\n  }\n\n  const max = Math.min(Math.max(Number(req.query[\"maxResults\"] ?? 12), 1), MAX_RESULTS);\n  const orderRaw = (req.query[\"order\"] as string | undefined) ?? \"relevance\";\n  const order = [\"relevance\", \"date\", \"viewCount\", \"rating\"].includes(orderRaw) ? orderRaw : \"relevance\";\n  const pageToken = (req.query[\"pageToken\"] as string | undefined)?.trim() || undefined;\n  const { identity, authed } = resolveIdentity(req);\n\n  try {\n    const result = await performSearch({\n      apiKey,\n      q,\n      max,\n      order,\n      identity,\n      authed,\n      ...(pageToken ? { pageToken } : {}),\n      ...(req.log ? { log: req.log } : {}),\n    });\n    if (!result.ok) {\n      res.status(result.status).json({ error: result.error });\n      return;\n    }\n    res.json(result.data);\n  } catch (err) {\n    req.log?.error({ err }, \"YouTube search threw\");\n    res.status(502).json({ error: \"YouTube search failed\" });\n  }\n});\n\n// Discover endpoint \u2014 curated hunting/fishing search shortcuts so the feed\n// has something to render before any user uploads. Forwards to /search with\n// a category-locked query. Results are cached for 1 hour because the queries\n// are static and category-locked \u2014 they rarely change and would otherwise burn\n// quota on every app open.\nconst DISCOVER_QUERIES: Record<string, string> = {\n  hunting: \"hunting whitetail elk hunt\",\n  fishing: \"bass fishing tournament\",\n  bowhunting: \"bowhunting compound bow\",\n  waterfowl: \"duck hunting waterfowl\",\n  saltwater: \"saltwater fishing offshore\",\n  trophy: \"trophy buck hunt\",\n};\n\nrouter.get(\"/discover\", async (req: Request, res: Response) => {\n  const apiKey = process.env[\"YOUTUBE_API_KEY\"];\n  if (!apiKey) {\n    res.status(503).json({ error: \"YouTube search is not configured\" });\n    return;\n  }\n  const cat = ((req.query[\"category\"] as string | undefined) ?? \"hunting\").toLowerCase();\n  const q = DISCOVER_QUERIES[cat];\n  if (!q) {\n    res.status(400).json({ error: `category must be one of: ${Object.keys(DISCOVER_QUERIES).join(\", \")}` });\n    return;\n  }\n  const { identity, authed } = resolveIdentity(req);\n  try {\n    const result = await performSearch({\n      apiKey,\n      q,\n      max: 12,\n      order: \"viewCount\",\n      ttl: DISCOVER_TTL_MS,\n      identity,\n      authed,\n      ...(req.log ? { log: req.log } : {}),\n    });\n    if (!result.ok) {\n      res.status(result.status).json({ error: result.error });\n      return;\n    }\n    res.json({ ...result.data, category: cat });\n  } catch (err) {\n    req.log?.error({ err }, \"YouTube discover threw\");\n    res.status(502).json({ error: \"YouTube discover failed\" });\n  }\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { db, musicSearchCacheTable } from \"@workspace/db\";\nimport { eq } from \"drizzle-orm\";\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Music search proxy. Backed by Jamendo (free CC-licensed catalog) when\n// JAMENDO_CLIENT_ID is configured. Falls back to a small curated catalog\n// of known free / royalty-free demo tracks so the editor UI keeps working\n// even without an API key \u2014 explicit failure modes only, no silent fakery.\n//\n// Two-layer cache:\n//   1. In-memory Map  \u2014 fast path, avoids DB round-trip for hot queries.\n//   2. DB (music_search_cache table) \u2014 survives process restarts so a\n//      reboot doesn't re-fetch the same Jamendo results immediately.\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst router: IRouter = Router();\n\nconst JAMENDO_BASE = \"https://api.jamendo.com/v3.0\";\nconst SEARCH_TTL_MS = 10 * 60 * 1000;\n\ninterface MusicTrack {\n  id: string;\n  title: string;\n  artist: string;\n  durationSec: number;\n  artworkUrl: string | null;\n  previewUrl: string;\n  source: \"jamendo\" | \"fallback\";\n  license?: string;\n}\n\ninterface MusicSearchResponse {\n  items: MusicTrack[];\n  cached: boolean;\n  source: \"jamendo\" | \"fallback\";\n}\n\n// \u2500\u2500 In-memory cache (layer 1) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst memCache = new Map<string, { ts: number; data: MusicSearchResponse }>();\n\nfunction cacheKey(q: string, max: number): string {\n  return `${q.toLowerCase().trim()}|${max}`;\n}\n\nfunction getMemCached(key: string): MusicSearchResponse | null {\n  const hit = memCache.get(key);\n  if (!hit) return null;\n  if (Date.now() - hit.ts > SEARCH_TTL_MS) {\n    memCache.delete(key);\n    return null;\n  }\n  return { ...hit.data, cached: true };\n}\n\nfunction setMemCached(key: string, data: MusicSearchResponse): void {\n  memCache.set(key, { ts: Date.now(), data });\n}\n\n// \u2500\u2500 DB cache helpers (layer 2) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function getDbCached(key: string): Promise<MusicSearchResponse | null> {\n  try {\n    const rows = await db\n      .select()\n      .from(musicSearchCacheTable)\n      .where(eq(musicSearchCacheTable.key, key))\n      .limit(1);\n    if (!rows.length) return null;\n    const row = rows[0]!;\n    const age = Date.now() - row.fetchedAt.getTime();\n    if (age > SEARCH_TTL_MS) return null;\n    return { ...(JSON.parse(row.dataJson) as MusicSearchResponse), cached: true };\n  } catch {\n    return null;\n  }\n}\n\nasync function setDbCached(key: string, data: MusicSearchResponse): Promise<void> {\n  try {\n    const now = new Date();\n    await db\n      .insert(musicSearchCacheTable)\n      .values({ key, dataJson: JSON.stringify(data), fetchedAt: now })\n      .onConflictDoUpdate({\n        target: musicSearchCacheTable.key,\n        set: { dataJson: JSON.stringify(data), fetchedAt: now },\n      });\n  } catch {\n    // Non-fatal \u2014 caller already has fresh data to return\n  }\n}\n\ninterface JamendoTrackResp {\n  id: string;\n  name: string;\n  artist_name: string;\n  duration: number;\n  audio: string;\n  audiodownload: string;\n  image: string;\n  license_ccurl?: string;\n}\n\nasync function fetchWithTimeout(url: string, ms: number): Promise<globalThis.Response> {\n  const ctrl = new AbortController();\n  const timer = setTimeout(() => ctrl.abort(), ms);\n  try {\n    return await fetch(url, { signal: ctrl.signal });\n  } finally {\n    clearTimeout(timer);\n  }\n}\n\nconst FALLBACK_CATALOG: MusicTrack[] = [\n  {\n    id: \"fb-1\",\n    title: \"Cinematic Drone\",\n    artist: \"Hook N Bone Studio\",\n    durationSec: 96,\n    artworkUrl: null,\n    previewUrl:\n      \"https://cdn.pixabay.com/audio/2022/05/27/audio_1808fbf07a.mp3\",\n    source: \"fallback\",\n    license: \"Pixabay Free Use\",\n  },\n  {\n    id: \"fb-2\",\n    title: \"Backwoods Acoustic\",\n    artist: \"Hook N Bone Studio\",\n    durationSec: 124,\n    artworkUrl: null,\n    previewUrl:\n      \"https://cdn.pixabay.com/audio/2023/01/27/audio_77c63b8e34.mp3\",\n    source: \"fallback\",\n    license: \"Pixabay Free Use\",\n  },\n  {\n    id: \"fb-3\",\n    title: \"Tactical Pulse\",\n    artist: \"Hook N Bone Studio\",\n    durationSec: 88,\n    artworkUrl: null,\n    previewUrl:\n      \"https://cdn.pixabay.com/audio/2022/03/15/audio_5f0aaf4bb1.mp3\",\n    source: \"fallback\",\n    license: \"Pixabay Free Use\",\n  },\n  {\n    id: \"fb-4\",\n    title: \"Open Water\",\n    artist: \"Hook N Bone Studio\",\n    durationSec: 104,\n    artworkUrl: null,\n    previewUrl:\n      \"https://cdn.pixabay.com/audio/2023/06/05/audio_5e1296c2e0.mp3\",\n    source: \"fallback\",\n    license: \"Pixabay Free Use\",\n  },\n];\n\nrouter.get(\"/search\", async (req: Request, res: Response) => {\n  const q = (req.query[\"q\"] as string | undefined)?.trim() ?? \"\";\n  if (q.length < 0 || q.length > 100) {\n    res.status(400).json({ error: \"q must be 0\u2013100 characters\" });\n    return;\n  }\n  const max = Math.min(Math.max(Number(req.query[\"limit\"] ?? 12), 1), 25);\n\n  const key = cacheKey(q, max);\n\n  // Layer 1: in-memory (fast path)\n  const memHit = getMemCached(key);\n  if (memHit) {\n    res.json(memHit);\n    return;\n  }\n\n  // Layer 2: DB (survives restarts) \u2014 populate memory cache on hit\n  const dbHit = await getDbCached(key);\n  if (dbHit) {\n    setMemCached(key, dbHit);\n    res.json(dbHit);\n    return;\n  }\n\n  const apiKey = process.env[\"JAMENDO_CLIENT_ID\"];\n  if (!apiKey) {\n    // Fallback mode \u2014 filter the curated demo catalog by query so the editor\n    // remains usable. UI surfaces the source so users know it's a placeholder.\n    const filtered = q\n      ? FALLBACK_CATALOG.filter(\n          (t) =>\n            t.title.toLowerCase().includes(q.toLowerCase()) ||\n            t.artist.toLowerCase().includes(q.toLowerCase()),\n        )\n      : FALLBACK_CATALOG;\n    const payload: MusicSearchResponse = {\n      items: filtered.length ? filtered : FALLBACK_CATALOG,\n      cached: false,\n      source: \"fallback\",\n    };\n    setMemCached(key, payload);\n    void setDbCached(key, payload);\n    res.json(payload);\n    return;\n  }\n\n  try {\n    const params = new URLSearchParams({\n      client_id: apiKey,\n      format: \"json\",\n      limit: String(max),\n      include: \"musicinfo+licenses\",\n      audioformat: \"mp32\",\n    });\n    if (q) params.set(\"search\", q);\n    else params.set(\"order\", \"popularity_total\");\n    const url = `${JAMENDO_BASE}/tracks?${params}`;\n\n    const resp = await fetchWithTimeout(url, 8000);\n    if (!resp.ok) {\n      req.log?.warn({ status: resp.status }, \"jamendo search failed\");\n      res.status(502).json({ error: \"Music search failed\" });\n      return;\n    }\n    const data = (await resp.json()) as { results?: JamendoTrackResp[] };\n    const items: MusicTrack[] = (data.results ?? []).map((t) => ({\n      id: String(t.id),\n      title: t.name,\n      artist: t.artist_name,\n      durationSec: t.duration,\n      artworkUrl: t.image || null,\n      previewUrl: t.audio,\n      source: \"jamendo\" as const,\n      ...(t.license_ccurl ? { license: t.license_ccurl } : {}),\n    }));\n    const payload: MusicSearchResponse = { items, cached: false, source: \"jamendo\" };\n    setMemCached(key, payload);\n    void setDbCached(key, payload);\n    res.json(payload);\n  } catch (err) {\n    req.log?.error({ err }, \"music search threw\");\n    res.status(502).json({ error: \"Music search failed\" });\n  }\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { getSessionUser } from \"../lib/authMiddleware\";\nimport { db, userExportsTable } from \"@workspace/db\";\nimport { eq, and, desc } from \"drizzle-orm\";\nimport { exportStorage, ExportNotFoundError } from \"../lib/exportStorage\";\n\nconst router: IRouter = Router();\n\nfunction requireAuth(req: Request, res: Response): string | null {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return null;\n  }\n  return userId;\n}\n\n// GET / \u2014 list this user's permanent baked clip exports\nrouter.get(\"/\", async (req: Request, res: Response) => {\n  const userId = requireAuth(req, res);\n  if (!userId) return;\n\n  try {\n    const exports = await db\n      .select()\n      .from(userExportsTable)\n      .where(eq(userExportsTable.userId, userId))\n      .orderBy(desc(userExportsTable.createdAt));\n\n    const withUrls = exports.map((exp) => ({\n      ...exp,\n      downloadUrl: `/api/exports/${exp.id}/download`,\n    }));\n\n    res.json({ exports: withUrls });\n  } catch (err) {\n    req.log.warn({ err }, \"exports: list failed\");\n    res.status(500).json({ error: \"Failed to list exports\" });\n  }\n});\n\n// GET /:id/download \u2014 stream the baked MP4 from App Storage to the caller\nrouter.get(\"/:id/download\", async (req: Request, res: Response) => {\n  const userId = requireAuth(req, res);\n  if (!userId) return;\n\n  const rawId = Array.isArray(req.params[\"id\"]) ? req.params[\"id\"][0] : req.params[\"id\"];\n  const id = parseInt(rawId ?? \"\", 10);\n  if (!Number.isFinite(id)) {\n    res.status(400).json({ error: \"Invalid export id\" });\n    return;\n  }\n\n  try {\n    const [exp] = await db\n      .select()\n      .from(userExportsTable)\n      .where(and(eq(userExportsTable.id, id), eq(userExportsTable.userId, userId)));\n\n    if (!exp) {\n      res.status(404).json({ error: \"Export not found\" });\n      return;\n    }\n\n    let stream: NodeJS.ReadableStream;\n    let contentLength: number | null;\n    try {\n      ({ stream, contentLength } = await exportStorage.createReadableStream(exp.objectPath));\n    } catch (err) {\n      if (err instanceof ExportNotFoundError) {\n        res.status(404).json({ error: \"Export file not found in storage\" });\n        return;\n      }\n      throw err;\n    }\n\n    res.setHeader(\"Content-Type\", \"video/mp4\");\n    if (contentLength != null) res.setHeader(\"Content-Length\", String(contentLength));\n    res.setHeader(\n      \"Content-Disposition\",\n      `attachment; filename=\"${exp.filename}\"`,\n    );\n    stream.on(\"error\", (err) => {\n      req.log.warn({ err }, \"exports: stream error\");\n      if (!res.headersSent) res.status(500).end();\n      else res.destroy(err as Error);\n    });\n    stream.pipe(res);\n  } catch (err) {\n    req.log.warn({ err }, \"exports: download failed\");\n    res.status(500).json({ error: \"Failed to download export\" });\n  }\n});\n\n// DELETE /:id \u2014 remove from App Storage and database\nrouter.delete(\"/:id\", async (req: Request, res: Response) => {\n  const userId = requireAuth(req, res);\n  if (!userId) return;\n\n  const rawId = Array.isArray(req.params[\"id\"]) ? req.params[\"id\"][0] : req.params[\"id\"];\n  const id = parseInt(rawId ?? \"\", 10);\n  if (!Number.isFinite(id)) {\n    res.status(400).json({ error: \"Invalid export id\" });\n    return;\n  }\n\n  try {\n    const [exp] = await db\n      .select()\n      .from(userExportsTable)\n      .where(and(eq(userExportsTable.id, id), eq(userExportsTable.userId, userId)));\n\n    if (!exp) {\n      res.status(404).json({ error: \"Export not found\" });\n      return;\n    }\n\n    // Remove from App Storage first (best-effort \u2014 don't block on failure)\n    await exportStorage.remove(exp.objectPath).catch((err) => {\n      req.log.warn({ err, id }, \"exports: GCS delete failed (removing DB record anyway)\");\n    });\n\n    await db.delete(userExportsTable).where(eq(userExportsTable.id, id));\n    res.json({ success: true });\n  } catch (err) {\n    req.log.warn({ err }, \"exports: delete failed\");\n    res.status(500).json({ error: \"Failed to delete export\" });\n  }\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response, type NextFunction } from \"express\";\nimport { getSessionUser } from \"../lib/authMiddleware\";\nimport {\n  createCipheriv,\n  createDecipheriv,\n  randomBytes,\n} from \"node:crypto\";\nimport { getTokenEncryptionKey } from \"../lib/tokenEncryption\";\nimport { db, socialConnectionsTable, youtubeImportsTable } from \"@workspace/db\";\nimport { eq, and, inArray, count, desc, sql } from \"drizzle-orm\";\n\nconst router: IRouter = Router();\n\nconst YT_API_BASE = \"https://www.googleapis.com/youtube/v3\";\nconst GOOGLE_TOKEN_URL = \"https://oauth2.googleapis.com/token\";\nconst GOOGLE_REVOKE_URL = \"https://oauth2.googleapis.com/revoke\";\nconst GOOGLE_AUTH_URL = \"https://accounts.google.com/o/oauth2/v2/auth\";\n\nconst TIKTOK_AUTH_URL = \"https://www.tiktok.com/v2/auth/authorize/\";\nconst TIKTOK_TOKEN_URL = \"https://open.tiktokapis.com/v2/oauth/token/\";\nconst TIKTOK_REVOKE_URL = \"https://open.tiktokapis.com/v2/oauth/revoke/\";\nconst TIKTOK_USER_URL = \"https://open.tiktokapis.com/v2/user/info/\";\nconst TIKTOK_VIDEO_LIST_URL = \"https://open.tiktokapis.com/v2/video/list/\";\n\n// \u2500\u2500 Token encryption \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction encryptToken(plaintext: string): string {\n  const key = getTokenEncryptionKey();\n  const iv = randomBytes(16);\n  const cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n  const enc = Buffer.concat([cipher.update(plaintext, \"utf8\"), cipher.final()]);\n  const tag = cipher.getAuthTag();\n  return `${iv.toString(\"hex\")}:${tag.toString(\"hex\")}:${enc.toString(\"hex\")}`;\n}\n\nfunction decryptToken(stored: string): string {\n  const parts = stored.split(\":\");\n  if (parts.length !== 3) throw new Error(\"Invalid encrypted token format\");\n  const [ivHex, tagHex, encHex] = parts;\n  const key = getTokenEncryptionKey();\n  const iv = Buffer.from(ivHex!, \"hex\");\n  const tag = Buffer.from(tagHex!, \"hex\");\n  const enc = Buffer.from(encHex!, \"hex\");\n  const decipher = createDecipheriv(\"aes-256-gcm\", key, iv);\n  decipher.setAuthTag(tag);\n  return decipher.update(enc).toString(\"utf8\") + decipher.final(\"utf8\");\n}\n\n// \u2500\u2500 CSRF state \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst csrfMap = new Map<string, { userId: string; ts: number }>();\nconst CSRF_TTL_MS = 10 * 60 * 1000;\n\nsetInterval(() => {\n  const now = Date.now();\n  for (const [key, val] of csrfMap) {\n    if (now - val.ts > CSRF_TTL_MS) csrfMap.delete(key);\n  }\n}, 5 * 60 * 1000);\n\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction getCallbackBase(req: Request): string {\n  const explicitBase = process.env[\"OAUTH_CALLBACK_BASE\"]?.trim();\n  if (explicitBase) return explicitBase.replace(/\\/$/, \"\");\n  return `${req.protocol}://${req.hostname}`;\n}\n\nfunction getRedirectUri(req: Request): string {\n  return `${getCallbackBase(req)}/api/social/callback/youtube`;\n}\n\nasync function fetchWithTimeout(\n  url: string,\n  init: RequestInit,\n  ms = 8000,\n): Promise<globalThis.Response> {\n  const ctrl = new AbortController();\n  const timer = setTimeout(() => ctrl.abort(), ms);\n  try {\n    return await fetch(url, { ...init, signal: ctrl.signal });\n  } finally {\n    clearTimeout(timer);\n  }\n}\n\nfunction requireUser(req: Request, res: Response, next: NextFunction): void {\n  if (!getSessionUser(req)?.userId) {\n    res.status(401).json({ error: \"Unauthorized\" });\n    return;\n  }\n  next();\n}\n\nasync function refreshAccessToken(\n  encryptedRefreshToken: string,\n  req: Request,\n): Promise<{ accessToken: string; expiresAt: Date } | null> {\n  const clientId = process.env[\"GOOGLE_CLIENT_ID\"];\n  const clientSecret = process.env[\"GOOGLE_CLIENT_SECRET\"];\n  if (!clientId || !clientSecret) return null;\n  try {\n    const refreshToken = decryptToken(encryptedRefreshToken);\n    const res = await fetchWithTimeout(GOOGLE_TOKEN_URL, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n      body: new URLSearchParams({\n        client_id: clientId,\n        client_secret: clientSecret,\n        refresh_token: refreshToken,\n        grant_type: \"refresh_token\",\n      }).toString(),\n    });\n    if (!res.ok) {\n      req.log?.warn({ status: res.status }, \"YouTube token refresh failed\");\n      return null;\n    }\n    const data = (await res.json()) as { access_token: string; expires_in: number };\n    return {\n      accessToken: data.access_token,\n      expiresAt: new Date(Date.now() + data.expires_in * 1000),\n    };\n  } catch (err) {\n    req.log?.warn({ err }, \"YouTube token refresh threw (non-fatal)\");\n    return null;\n  }\n}\n\n// \u2500\u2500 GET /connect/youtube \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/connect/youtube\", requireUser, (req: Request, res: Response) => {\n  const clientId = process.env[\"GOOGLE_CLIENT_ID\"];\n  if (!clientId) {\n    res.status(503).json({ error: \"YouTube connection is not configured on this server\" });\n    return;\n  }\n\n  const userId = getSessionUser(req)!.userId;\n  const state = randomBytes(24).toString(\"hex\");\n  csrfMap.set(state, { userId, ts: Date.now() });\n\n  const redirectUri = getRedirectUri(req);\n  const params = new URLSearchParams({\n    client_id: clientId,\n    redirect_uri: redirectUri,\n    response_type: \"code\",\n    scope: \"https://www.googleapis.com/auth/youtube.readonly\",\n    access_type: \"offline\",\n    prompt: \"consent\",\n    state,\n  });\n\n  res.json({ url: `${GOOGLE_AUTH_URL}?${params}`, redirectUri });\n});\n\n// \u2500\u2500 GET /callback/youtube \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/callback/youtube\", async (req: Request, res: Response) => {\n  const { code, state, error } = req.query as Record<string, string | undefined>;\n  const deepLink = \"hook-n-bone://social/callback\";\n\n  if (error || !code || !state) {\n    res.redirect(`${deepLink}?success=false&error=${encodeURIComponent(error ?? \"missing_params\")}`);\n    return;\n  }\n\n  const entry = csrfMap.get(state);\n  if (!entry || Date.now() - entry.ts > CSRF_TTL_MS) {\n    res.redirect(`${deepLink}?success=false&error=invalid_state`);\n    return;\n  }\n  csrfMap.delete(state);\n  const { userId } = entry;\n\n  const clientId = process.env[\"GOOGLE_CLIENT_ID\"];\n  const clientSecret = process.env[\"GOOGLE_CLIENT_SECRET\"];\n  if (!clientId || !clientSecret) {\n    res.redirect(`${deepLink}?success=false&error=server_misconfigured`);\n    return;\n  }\n\n  const redirectUri = getRedirectUri(req);\n  try {\n    const tokenRes = await fetchWithTimeout(GOOGLE_TOKEN_URL, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n      body: new URLSearchParams({\n        code,\n        client_id: clientId,\n        client_secret: clientSecret,\n        redirect_uri: redirectUri,\n        grant_type: \"authorization_code\",\n      }).toString(),\n    });\n\n    if (!tokenRes.ok) {\n      const body = await tokenRes.text().catch(() => \"\");\n      req.log?.error({ status: tokenRes.status, body: body.slice(0, 200) }, \"Google token exchange failed\");\n      res.redirect(`${deepLink}?success=false&error=token_exchange_failed`);\n      return;\n    }\n\n    const tokens = (await tokenRes.json()) as {\n      access_token: string;\n      refresh_token?: string;\n      expires_in: number;\n    };\n\n    // Fetch YouTube channel info (best-effort)\n    let channelId: string | null = null;\n    let channelName: string | null = null;\n    let channelAvatar: string | null = null;\n\n    try {\n      const chRes = await fetchWithTimeout(\n        `${YT_API_BASE}/channels?part=snippet&mine=true`,\n        { headers: { Authorization: `Bearer ${tokens.access_token}` } },\n      );\n      if (chRes.ok) {\n        const chData = (await chRes.json()) as {\n          items?: Array<{\n            id: string;\n            snippet: {\n              title: string;\n              thumbnails?: { default?: { url: string }; medium?: { url: string } };\n            };\n          }>;\n        };\n        const ch = chData.items?.[0];\n        if (ch) {\n          channelId = ch.id;\n          channelName = ch.snippet.title;\n          channelAvatar =\n            ch.snippet.thumbnails?.medium?.url ??\n            ch.snippet.thumbnails?.default?.url ??\n            null;\n        }\n      }\n    } catch {\n      // Channel info is decorative \u2014 do not block the OAuth flow\n    }\n\n    const expiresAt = new Date(Date.now() + tokens.expires_in * 1000);\n    const encAccess = encryptToken(tokens.access_token);\n    const encRefresh = tokens.refresh_token ? encryptToken(tokens.refresh_token) : null;\n\n    await db\n      .insert(socialConnectionsTable)\n      .values({\n        userId,\n        platform: \"youtube\",\n        accessToken: encAccess,\n        refreshToken: encRefresh,\n        expiresAt,\n        channelId,\n        channelName,\n        channelAvatar,\n      })\n      .onConflictDoUpdate({\n        target: [socialConnectionsTable.userId, socialConnectionsTable.platform],\n        set: {\n          accessToken: encAccess,\n          refreshToken: encRefresh,\n          expiresAt,\n          channelId,\n          channelName,\n          channelAvatar,\n          updatedAt: new Date(),\n        },\n      });\n\n    res.redirect(`${deepLink}?success=true`);\n  } catch (err) {\n    req.log?.error({ err }, \"YouTube OAuth callback error\");\n    res.redirect(`${deepLink}?success=false&error=server_error`);\n  }\n});\n\n// \u2500\u2500 DELETE /disconnect/youtube \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.delete(\"/disconnect/youtube\", requireUser, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n\n  try {\n    const rows = await db\n      .select()\n      .from(socialConnectionsTable)\n      .where(\n        and(\n          eq(socialConnectionsTable.userId, userId),\n          eq(socialConnectionsTable.platform, \"youtube\"),\n        ),\n      );\n\n    const conn = rows[0];\n    if (!conn) {\n      res.status(404).json({ error: \"No YouTube connection found\" });\n      return;\n    }\n\n    // Revoke the token with Google (best-effort)\n    try {\n      const token = decryptToken(conn.accessToken);\n      await fetchWithTimeout(\n        `${GOOGLE_REVOKE_URL}?token=${encodeURIComponent(token)}`,\n        { method: \"POST\", headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" } },\n        5000,\n      );\n    } catch {\n      req.log?.warn(\"YouTube token revocation request failed (non-fatal)\");\n    }\n\n    await db\n      .delete(socialConnectionsTable)\n      .where(\n        and(\n          eq(socialConnectionsTable.userId, userId),\n          eq(socialConnectionsTable.platform, \"youtube\"),\n        ),\n      );\n\n    res.json({ success: true });\n  } catch (err) {\n    req.log?.error({ err }, \"YouTube disconnect error\");\n    res.status(500).json({ error: \"Failed to disconnect YouTube account\" });\n  }\n});\n\n// \u2500\u2500 GET /connect/tiktok \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/connect/tiktok\", requireUser, (req: Request, res: Response) => {\n  const clientKey = process.env[\"TIKTOK_CLIENT_KEY\"];\n  if (!clientKey) {\n    res.status(503).json({ error: \"TikTok connection is not configured on this server\" });\n    return;\n  }\n\n  const userId = getSessionUser(req)!.userId;\n  const state = randomBytes(24).toString(\"hex\");\n  csrfMap.set(state, { userId, ts: Date.now() });\n\n  const base = getCallbackBase(req);\n  const redirectUri = `${base}/api/social/callback/tiktok`;\n\n  const params = new URLSearchParams({\n    client_key: clientKey,\n    scope: \"user.info.basic,video.list\",\n    response_type: \"code\",\n    redirect_uri: redirectUri,\n    state,\n  });\n\n  res.json({ url: `${TIKTOK_AUTH_URL}?${params}`, redirectUri });\n});\n\n// \u2500\u2500 GET /callback/tiktok \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/callback/tiktok\", async (req: Request, res: Response) => {\n  const { code, state, error } = req.query as Record<string, string | undefined>;\n  const deepLink = \"hook-n-bone://social/callback\";\n\n  if (error || !code || !state) {\n    res.redirect(`${deepLink}?success=false&platform=tiktok&error=${encodeURIComponent(error ?? \"missing_params\")}`);\n    return;\n  }\n\n  const entry = csrfMap.get(state);\n  if (!entry || Date.now() - entry.ts > CSRF_TTL_MS) {\n    res.redirect(`${deepLink}?success=false&platform=tiktok&error=invalid_state`);\n    return;\n  }\n  csrfMap.delete(state);\n  const { userId } = entry;\n\n  const clientKey = process.env[\"TIKTOK_CLIENT_KEY\"];\n  const clientSecret = process.env[\"TIKTOK_CLIENT_SECRET\"];\n  if (!clientKey || !clientSecret) {\n    res.redirect(`${deepLink}?success=false&platform=tiktok&error=server_misconfigured`);\n    return;\n  }\n\n  const base = getCallbackBase(req);\n  const redirectUri = `${base}/api/social/callback/tiktok`;\n\n  try {\n    const tokenRes = await fetchWithTimeout(TIKTOK_TOKEN_URL, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n      body: new URLSearchParams({\n        client_key: clientKey,\n        client_secret: clientSecret,\n        code,\n        grant_type: \"authorization_code\",\n        redirect_uri: redirectUri,\n      }).toString(),\n    });\n\n    if (!tokenRes.ok) {\n      const body = await tokenRes.text().catch(() => \"\");\n      req.log?.error({ status: tokenRes.status, body: body.slice(0, 200) }, \"TikTok token exchange failed\");\n      res.redirect(`${deepLink}?success=false&platform=tiktok&error=token_exchange_failed`);\n      return;\n    }\n\n    const tokens = (await tokenRes.json()) as {\n      access_token: string;\n      expires_in: number;\n      refresh_token: string;\n      refresh_expires_in: number;\n      open_id: string;\n      scope: string;\n    };\n\n    // Fetch user info (best-effort)\n    let tiktokUsername: string | null = null;\n    let tiktokAvatar: string | null = null;\n\n    try {\n      const userRes = await fetchWithTimeout(\n        `${TIKTOK_USER_URL}?fields=open_id,display_name,avatar_url`,\n        {\n          headers: {\n            Authorization: `Bearer ${tokens.access_token}`,\n            \"Content-Type\": \"application/json\",\n          },\n        },\n      );\n      if (userRes.ok) {\n        const userData = (await userRes.json()) as {\n          data?: {\n            user?: {\n              open_id?: string;\n              display_name?: string;\n              avatar_url?: string;\n            };\n          };\n        };\n        const u = userData.data?.user;\n        if (u) {\n          tiktokUsername = u.display_name ?? null;\n          tiktokAvatar = u.avatar_url ?? null;\n        }\n      }\n    } catch {\n      // User info is decorative \u2014 do not block the OAuth flow\n    }\n\n    const expiresAt = new Date(Date.now() + tokens.expires_in * 1000);\n    const encAccess = encryptToken(tokens.access_token);\n    const encRefresh = tokens.refresh_token ? encryptToken(tokens.refresh_token) : null;\n\n    await db\n      .insert(socialConnectionsTable)\n      .values({\n        userId,\n        platform: \"tiktok\",\n        accessToken: encAccess,\n        refreshToken: encRefresh,\n        expiresAt,\n        channelId: tokens.open_id,\n        channelName: tiktokUsername,\n        channelAvatar: tiktokAvatar,\n      })\n      .onConflictDoUpdate({\n        target: [socialConnectionsTable.userId, socialConnectionsTable.platform],\n        set: {\n          accessToken: encAccess,\n          refreshToken: encRefresh,\n          expiresAt,\n          channelId: tokens.open_id,\n          channelName: tiktokUsername,\n          channelAvatar: tiktokAvatar,\n          updatedAt: new Date(),\n        },\n      });\n\n    res.redirect(`${deepLink}?success=true&platform=tiktok`);\n  } catch (err) {\n    req.log?.error({ err }, \"TikTok OAuth callback error\");\n    res.redirect(`${deepLink}?success=false&platform=tiktok&error=server_error`);\n  }\n});\n\n// \u2500\u2500 DELETE /disconnect/tiktok \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.delete(\"/disconnect/tiktok\", requireUser, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n\n  try {\n    const rows = await db\n      .select()\n      .from(socialConnectionsTable)\n      .where(\n        and(\n          eq(socialConnectionsTable.userId, userId),\n          eq(socialConnectionsTable.platform, \"tiktok\"),\n        ),\n      );\n\n    const conn = rows[0];\n    if (!conn) {\n      res.status(404).json({ error: \"No TikTok connection found\" });\n      return;\n    }\n\n    // Revoke the token with TikTok (best-effort)\n    const clientKey = process.env[\"TIKTOK_CLIENT_KEY\"];\n    const clientSecret = process.env[\"TIKTOK_CLIENT_SECRET\"];\n    if (clientKey && clientSecret) {\n      try {\n        const token = decryptToken(conn.accessToken);\n        await fetchWithTimeout(TIKTOK_REVOKE_URL, {\n          method: \"POST\",\n          headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n          body: new URLSearchParams({\n            client_key: clientKey,\n            client_secret: clientSecret,\n            token,\n          }).toString(),\n        }, 5000);\n      } catch {\n        req.log?.warn(\"TikTok token revocation request failed (non-fatal)\");\n      }\n    }\n\n    await db\n      .delete(socialConnectionsTable)\n      .where(\n        and(\n          eq(socialConnectionsTable.userId, userId),\n          eq(socialConnectionsTable.platform, \"tiktok\"),\n        ),\n      );\n\n    res.json({ success: true });\n  } catch (err) {\n    req.log?.error({ err }, \"TikTok disconnect error\");\n    res.status(500).json({ error: \"Failed to disconnect TikTok account\" });\n  }\n});\n\n// \u2500\u2500 GET /status \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/status\", requireUser, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n\n  try {\n    const rows = await db\n      .select()\n      .from(socialConnectionsTable)\n      .where(eq(socialConnectionsTable.userId, userId));\n\n    const result = {\n      youtube: false,\n      facebook: false,\n      instagram: false,\n      tiktok: false,\n      tiktokConfigured: !!(process.env[\"TIKTOK_CLIENT_KEY\"] && process.env[\"TIKTOK_CLIENT_SECRET\"]),\n      youtubeChannelId: null as string | null,\n      youtubeChannelName: null as string | null,\n      youtubeChannelAvatar: null as string | null,\n      tiktokUsername: null as string | null,\n      tiktokAvatar: null as string | null,\n    };\n\n    for (const row of rows) {\n      if (row.platform === \"youtube\") {\n        result.youtube = true;\n        result.youtubeChannelId = row.channelId;\n        result.youtubeChannelName = row.channelName;\n        result.youtubeChannelAvatar = row.channelAvatar;\n      } else if (row.platform === \"tiktok\") {\n        result.tiktok = true;\n        result.tiktokUsername = row.channelName;\n        result.tiktokAvatar = row.channelAvatar;\n      }\n    }\n\n    res.json(result);\n  } catch (err) {\n    req.log?.error({ err }, \"Social status error\");\n    res.status(500).json({ error: \"Failed to get social connection status\" });\n  }\n});\n\n// \u2500\u2500 GET /tiktok/videos \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/tiktok/videos\", requireUser, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const cursor = parseInt((req.query[\"cursor\"] as string | undefined) ?? \"0\", 10) || 0;\n\n  try {\n    const rows = await db\n      .select()\n      .from(socialConnectionsTable)\n      .where(\n        and(\n          eq(socialConnectionsTable.userId, userId),\n          eq(socialConnectionsTable.platform, \"tiktok\"),\n        ),\n      );\n\n    const conn = rows[0];\n    if (!conn) {\n      res.status(404).json({ error: \"TikTok account not connected. Please connect your account first.\" });\n      return;\n    }\n\n    // Refresh TikTok access token if within 5 minutes of expiry\n    let accessToken = decryptToken(conn.accessToken);\n    const fiveMinsFromNow = new Date(Date.now() + 5 * 60 * 1000);\n    if (conn.expiresAt && conn.expiresAt < fiveMinsFromNow && conn.refreshToken) {\n      const clientKey = process.env[\"TIKTOK_CLIENT_KEY\"];\n      const clientSecret = process.env[\"TIKTOK_CLIENT_SECRET\"];\n      if (clientKey && clientSecret) {\n        try {\n          const refreshToken = decryptToken(conn.refreshToken);\n          const refreshRes = await fetchWithTimeout(TIKTOK_TOKEN_URL, {\n            method: \"POST\",\n            headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n            body: new URLSearchParams({\n              client_key: clientKey,\n              client_secret: clientSecret,\n              grant_type: \"refresh_token\",\n              refresh_token: refreshToken,\n            }).toString(),\n          });\n          if (refreshRes.ok) {\n            const refreshData = (await refreshRes.json()) as {\n              access_token: string;\n              expires_in: number;\n            };\n            const encNew = encryptToken(refreshData.access_token);\n            const newExpiry = new Date(Date.now() + refreshData.expires_in * 1000);\n            await db\n              .update(socialConnectionsTable)\n              .set({ accessToken: encNew, expiresAt: newExpiry, updatedAt: new Date() })\n              .where(\n                and(\n                  eq(socialConnectionsTable.userId, userId),\n                  eq(socialConnectionsTable.platform, \"tiktok\"),\n                ),\n              );\n            accessToken = refreshData.access_token;\n          }\n        } catch {\n          req.log?.warn(\"TikTok token refresh threw (non-fatal)\");\n        }\n      }\n    }\n\n    const listRes = await fetchWithTimeout(\n      `${TIKTOK_VIDEO_LIST_URL}?fields=id,title,cover_image_url,embed_link,duration,create_time`,\n      {\n        method: \"POST\",\n        headers: {\n          Authorization: `Bearer ${accessToken}`,\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({ max_count: 20, cursor }),\n      },\n      12000,\n    );\n\n    if (!listRes.ok) {\n      if (listRes.status === 401) {\n        res.status(401).json({ error: \"TikTok session expired \u2014 please reconnect your account.\" });\n        return;\n      }\n      res.status(502).json({ error: \"Failed to fetch TikTok video list\" });\n      return;\n    }\n\n    const listData = (await listRes.json()) as {\n      data?: {\n        videos?: Array<{\n          id: string;\n          title?: string;\n          cover_image_url?: string;\n          embed_link?: string;\n          duration?: number;\n          create_time?: number;\n        }>;\n        cursor?: number;\n        has_more?: boolean;\n      };\n      error?: { code?: string; message?: string };\n    };\n\n    if (listData.error?.code && listData.error.code !== \"ok\") {\n      req.log?.warn({ error: listData.error }, \"TikTok video list API error\");\n      res.status(502).json({ error: listData.error.message ?? \"TikTok API error\" });\n      return;\n    }\n\n    const rawVideos = listData.data?.videos ?? [];\n    const rawVideoIds = rawVideos.map((v) => v.id).filter(Boolean);\n\n    // Look up which TikTok videos this user has already imported\n    const tkImportMap = new Map<string, Date>();\n    if (rawVideoIds.length > 0) {\n      try {\n        const importRows = await db\n          .select({ videoId: youtubeImportsTable.videoId, importedAt: youtubeImportsTable.importedAt })\n          .from(youtubeImportsTable)\n          .where(\n            and(\n              eq(youtubeImportsTable.userId, userId),\n              eq(youtubeImportsTable.platform, \"tiktok\"),\n              inArray(youtubeImportsTable.videoId, rawVideoIds),\n            ),\n          );\n        for (const row of importRows) {\n          tkImportMap.set(row.videoId, row.importedAt);\n        }\n      } catch {\n        // Import history is supplemental \u2014 don't fail the request\n      }\n    }\n\n    const videos = rawVideos.map((v) => {\n      const importedAt = tkImportMap.get(v.id);\n      return {\n        id: v.id,\n        title: v.title ?? \"\",\n        thumbnail: v.cover_image_url ?? \"\",\n        duration: v.duration ?? 0,\n        createTime: v.create_time ?? 0,\n        embedLink: v.embed_link ?? `https://www.tiktok.com/embed/v2/${v.id}`,\n        importedAt: importedAt ? importedAt.toISOString() : null,\n      };\n    });\n\n    res.json({\n      videos,\n      cursor: listData.data?.cursor ?? 0,\n      hasMore: listData.data?.has_more ?? false,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"TikTok videos list error\");\n    res.status(500).json({ error: \"Failed to fetch TikTok videos\" });\n  }\n});\n\n// \u2500\u2500 GET /youtube/videos \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/youtube/videos\", requireUser, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const pageToken = (req.query[\"pageToken\"] as string | undefined)?.trim() || undefined;\n\n  try {\n    const rows = await db\n      .select()\n      .from(socialConnectionsTable)\n      .where(\n        and(\n          eq(socialConnectionsTable.userId, userId),\n          eq(socialConnectionsTable.platform, \"youtube\"),\n        ),\n      );\n\n    const conn = rows[0];\n    if (!conn) {\n      res.status(404).json({ error: \"YouTube account not connected. Please connect your account first.\" });\n      return;\n    }\n\n    // Refresh access token if within 5 minutes of expiry\n    let accessToken = decryptToken(conn.accessToken);\n    const fiveMinsFromNow = new Date(Date.now() + 5 * 60 * 1000);\n    if (conn.expiresAt && conn.expiresAt < fiveMinsFromNow && conn.refreshToken) {\n      const refreshed = await refreshAccessToken(conn.refreshToken, req);\n      if (refreshed) {\n        const encNew = encryptToken(refreshed.accessToken);\n        await db\n          .update(socialConnectionsTable)\n          .set({ accessToken: encNew, expiresAt: refreshed.expiresAt, updatedAt: new Date() })\n          .where(\n            and(\n              eq(socialConnectionsTable.userId, userId),\n              eq(socialConnectionsTable.platform, \"youtube\"),\n            ),\n          );\n        accessToken = refreshed.accessToken;\n      }\n    }\n\n    const authHeader = { Authorization: `Bearer ${accessToken}` };\n\n    // Step 1: get upload playlist ID for this channel\n    const chRes = await fetchWithTimeout(\n      `${YT_API_BASE}/channels?part=contentDetails&mine=true`,\n      { headers: authHeader },\n    );\n    if (!chRes.ok) {\n      if (chRes.status === 401) {\n        res.status(401).json({ error: \"YouTube session expired \u2014 please reconnect your account.\" });\n        return;\n      }\n      res.status(502).json({ error: \"Failed to fetch YouTube channel info\" });\n      return;\n    }\n\n    const chData = (await chRes.json()) as {\n      items?: Array<{\n        contentDetails: { relatedPlaylists: { uploads: string } };\n      }>;\n    };\n\n    const uploadsPlaylistId = chData.items?.[0]?.contentDetails?.relatedPlaylists?.uploads;\n    if (!uploadsPlaylistId) {\n      res.json({ videos: [], nextPageToken: null });\n      return;\n    }\n\n    // Step 2: fetch playlist items (the user's uploaded videos)\n    const plParams = new URLSearchParams({\n      part: \"snippet,contentDetails\",\n      playlistId: uploadsPlaylistId,\n      maxResults: \"24\",\n    });\n    if (pageToken) plParams.set(\"pageToken\", pageToken);\n\n    const plRes = await fetchWithTimeout(\n      `${YT_API_BASE}/playlistItems?${plParams}`,\n      { headers: authHeader },\n    );\n    if (!plRes.ok) {\n      res.status(502).json({ error: \"Failed to fetch YouTube video list\" });\n      return;\n    }\n\n    const plData = (await plRes.json()) as {\n      items?: Array<{\n        snippet: {\n          title: string;\n          publishedAt: string;\n          thumbnails?: {\n            high?: { url: string };\n            medium?: { url: string };\n            default?: { url: string };\n          };\n          resourceId: { videoId: string };\n        };\n      }>;\n      nextPageToken?: string;\n    };\n\n    const items = plData.items ?? [];\n    const videoIds = items.map((it) => it.snippet.resourceId.videoId).filter(Boolean);\n\n    // Step 3: batch-fetch video durations\n    const durationMap = new Map<string, string>();\n    if (videoIds.length > 0) {\n      try {\n        const vParams = new URLSearchParams({ part: \"contentDetails\", id: videoIds.join(\",\") });\n        const vRes = await fetchWithTimeout(\n          `${YT_API_BASE}/videos?${vParams}`,\n          { headers: authHeader },\n        );\n        if (vRes.ok) {\n          const vData = (await vRes.json()) as {\n            items?: Array<{ id: string; contentDetails: { duration: string } }>;\n          };\n          for (const v of vData.items ?? []) {\n            durationMap.set(v.id, v.contentDetails.duration);\n          }\n        }\n      } catch {\n        // Duration is supplemental \u2014 don't fail the request\n      }\n    }\n\n    // Step 4: look up which of these video IDs have already been imported by THIS user,\n    // and also get the cross-user import count for each video.\n    const importMap = new Map<string, Date>();\n    const importCountMap = new Map<string, number>();\n    if (videoIds.length > 0) {\n      try {\n        const importRows = await db\n          .select({ videoId: youtubeImportsTable.videoId, importedAt: youtubeImportsTable.importedAt })\n          .from(youtubeImportsTable)\n          .where(\n            and(\n              eq(youtubeImportsTable.userId, userId),\n              eq(youtubeImportsTable.platform, \"youtube\"),\n              inArray(youtubeImportsTable.videoId, videoIds),\n            ),\n          );\n        for (const row of importRows) {\n          importMap.set(row.videoId, row.importedAt);\n        }\n      } catch {\n        // Import history is supplemental \u2014 don't fail the request\n      }\n\n      // Count how many total users have imported each video (across all users)\n      try {\n        const countRows = await db\n          .select({\n            videoId: youtubeImportsTable.videoId,\n            importCount: count(),\n          })\n          .from(youtubeImportsTable)\n          .where(\n            and(\n              eq(youtubeImportsTable.platform, \"youtube\"),\n              inArray(youtubeImportsTable.videoId, videoIds),\n            ),\n          )\n          .groupBy(youtubeImportsTable.videoId);\n        for (const row of countRows) {\n          importCountMap.set(row.videoId, row.importCount);\n        }\n      } catch {\n        // Import counts are supplemental \u2014 don't fail the request\n      }\n    }\n\n    const videos = items.map((it) => {\n      const videoId = it.snippet.resourceId.videoId;\n      const thumb =\n        it.snippet.thumbnails?.high?.url ??\n        it.snippet.thumbnails?.medium?.url ??\n        it.snippet.thumbnails?.default?.url ??\n        \"\";\n      const importedAt = importMap.get(videoId);\n      return {\n        videoId,\n        title: it.snippet.title,\n        thumbnail: thumb,\n        duration: durationMap.get(videoId) ?? \"\",\n        publishedAt: it.snippet.publishedAt,\n        url: `https://www.youtube.com/watch?v=${videoId}`,\n        importedAt: importedAt ? importedAt.toISOString() : null,\n        importCount: importCountMap.get(videoId) ?? 0,\n      };\n    });\n\n    res.json({ videos, nextPageToken: plData.nextPageToken ?? null });\n  } catch (err) {\n    req.log?.error({ err }, \"YouTube videos list error\");\n    res.status(500).json({ error: \"Failed to fetch YouTube videos\" });\n  }\n});\n\n// \u2500\u2500 GET /youtube/trending \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Public endpoint \u2014 returns the top N most-imported YouTube videos across all\n// community members, ranked by unique importer count descending.\n\nrouter.get(\"/youtube/trending\", async (req: Request, res: Response) => {\n  const rawLimit = parseInt((req.query[\"limit\"] as string | undefined) ?? \"10\", 10);\n  const limit = Math.min(Math.max(Number.isFinite(rawLimit) ? rawLimit : 10, 1), 50);\n\n  try {\n    const rows = await db\n      .select({\n        videoId: youtubeImportsTable.videoId,\n        title: sql<string | null>`MAX(${youtubeImportsTable.title})`,\n        thumbnailUrl: sql<string | null>`MAX(${youtubeImportsTable.thumbnailUrl})`,\n        importCount: count(youtubeImportsTable.userId),\n      })\n      .from(youtubeImportsTable)\n      .groupBy(youtubeImportsTable.videoId)\n      .orderBy(desc(count(youtubeImportsTable.userId)))\n      .limit(limit);\n\n    res.json({ trending: rows });\n  } catch (err) {\n    req.log?.error({ err }, \"YouTube trending fetch error\");\n    res.status(500).json({ error: \"Failed to fetch trending imports\" });\n  }\n});\n\n// \u2500\u2500 GET /youtube/imports \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/youtube/imports\", requireUser, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  try {\n    const rows = await db\n      .select({\n        videoId: youtubeImportsTable.videoId,\n        title: youtubeImportsTable.title,\n        thumbnailUrl: youtubeImportsTable.thumbnailUrl,\n        importedAt: youtubeImportsTable.importedAt,\n      })\n      .from(youtubeImportsTable)\n      .where(\n        and(\n          eq(youtubeImportsTable.userId, userId),\n          eq(youtubeImportsTable.platform, \"youtube\"),\n        ),\n      )\n      .orderBy(desc(youtubeImportsTable.importedAt));\n    const imports = rows;\n    res.json({\n      imports,\n      videoIds: imports.map((r) => r.videoId),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"YouTube imports fetch error\");\n    res.status(500).json({ error: \"Failed to fetch import history\" });\n  }\n});\n\n// \u2500\u2500 POST /youtube/imports \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Records that the authenticated user has imported a given YouTube video into\n// Hook N Bone. Idempotent \u2014 duplicate calls for the same videoId are ignored.\n\nrouter.post(\"/youtube/imports\", requireUser, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const { videoId, title, thumbnailUrl } = req.body as {\n    videoId?: string;\n    title?: string;\n    thumbnailUrl?: string;\n  };\n\n  if (!videoId || typeof videoId !== \"string\" || videoId.trim() === \"\") {\n    res.status(400).json({ error: \"videoId is required\" });\n    return;\n  }\n\n  try {\n    await db\n      .insert(youtubeImportsTable)\n      .values({\n        userId,\n        platform: \"youtube\",\n        videoId: videoId.trim(),\n        title: typeof title === \"string\" ? title.slice(0, 500) : null,\n        thumbnailUrl: typeof thumbnailUrl === \"string\" ? thumbnailUrl.slice(0, 2000) : null,\n      })\n      .onConflictDoNothing();\n    res.json({ success: true });\n  } catch (err) {\n    req.log?.error({ err }, \"YouTube import record error\");\n    res.status(500).json({ error: \"Failed to record import\" });\n  }\n});\n\n// \u2500\u2500 DELETE /youtube/imports/:videoId \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.delete(\"/youtube/imports/:videoId\", requireUser, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const { videoId } = req.params as { videoId: string };\n\n  if (!videoId || videoId.trim() === \"\") {\n    res.status(400).json({ error: \"videoId is required\" });\n    return;\n  }\n\n  try {\n    const result = await db\n      .delete(youtubeImportsTable)\n      .where(\n        and(\n          eq(youtubeImportsTable.userId, userId),\n          eq(youtubeImportsTable.platform, \"youtube\"),\n          eq(youtubeImportsTable.videoId, videoId.trim()),\n        ),\n      )\n      .returning({ videoId: youtubeImportsTable.videoId });\n\n    if (result.length === 0) {\n      res.status(404).json({ error: \"Import record not found\" });\n      return;\n    }\n\n    res.json({ success: true });\n  } catch (err) {\n    req.log?.error({ err }, \"YouTube import delete error\");\n    res.status(500).json({ error: \"Failed to delete import record\" });\n  }\n});\n\n// \u2500\u2500 GET /tiktok/imports \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/tiktok/imports\", requireUser, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  try {\n    const rows = await db\n      .select({\n        videoId: youtubeImportsTable.videoId,\n        title: youtubeImportsTable.title,\n        thumbnailUrl: youtubeImportsTable.thumbnailUrl,\n        importedAt: youtubeImportsTable.importedAt,\n      })\n      .from(youtubeImportsTable)\n      .where(\n        and(\n          eq(youtubeImportsTable.userId, userId),\n          eq(youtubeImportsTable.platform, \"tiktok\"),\n        ),\n      )\n      .orderBy(desc(youtubeImportsTable.importedAt));\n    const imports = rows;\n    res.json({\n      imports,\n      videoIds: imports.map((r) => r.videoId),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"TikTok imports fetch error\");\n    res.status(500).json({ error: \"Failed to fetch TikTok import history\" });\n  }\n});\n\n// \u2500\u2500 POST /tiktok/imports \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Records that the authenticated user has imported a given TikTok video into\n// Hook N Bone. Idempotent \u2014 duplicate calls for the same videoId are ignored.\n\nrouter.post(\"/tiktok/imports\", requireUser, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const { videoId, title, thumbnailUrl } = req.body as {\n    videoId?: string;\n    title?: string;\n    thumbnailUrl?: string;\n  };\n\n  if (!videoId || typeof videoId !== \"string\" || videoId.trim() === \"\") {\n    res.status(400).json({ error: \"videoId is required\" });\n    return;\n  }\n\n  try {\n    await db\n      .insert(youtubeImportsTable)\n      .values({\n        userId,\n        platform: \"tiktok\",\n        videoId: videoId.trim(),\n        title: typeof title === \"string\" ? title.slice(0, 500) : null,\n        thumbnailUrl: typeof thumbnailUrl === \"string\" ? thumbnailUrl.slice(0, 2000) : null,\n      })\n      .onConflictDoNothing();\n    res.json({ success: true });\n  } catch (err) {\n    req.log?.error({ err }, \"TikTok import record error\");\n    res.status(500).json({ error: \"Failed to record TikTok import\" });\n  }\n});\n\n// \u2500\u2500 DELETE /tiktok/imports/:videoId \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.delete(\"/tiktok/imports/:videoId\", requireUser, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const { videoId } = req.params as { videoId: string };\n\n  if (!videoId || videoId.trim() === \"\") {\n    res.status(400).json({ error: \"videoId is required\" });\n    return;\n  }\n\n  try {\n    const result = await db\n      .delete(youtubeImportsTable)\n      .where(\n        and(\n          eq(youtubeImportsTable.userId, userId),\n          eq(youtubeImportsTable.platform, \"tiktok\"),\n          eq(youtubeImportsTable.videoId, videoId.trim()),\n        ),\n      )\n      .returning({ videoId: youtubeImportsTable.videoId });\n\n    if (result.length === 0) {\n      res.status(404).json({ error: \"TikTok import record not found\" });\n      return;\n    }\n\n    res.json({ success: true });\n  } catch (err) {\n    req.log?.error({ err }, \"TikTok import delete error\");\n    res.status(500).json({ error: \"Failed to delete TikTok import record\" });\n  }\n});\n\nexport default router;\n", "import { createHash } from \"node:crypto\";\n\n/** Derive a stable AES-256 key for encrypting OAuth tokens at rest. */\nexport function getTokenEncryptionKey(): Buffer {\n  const src =\n    process.env[\"AUTH_TOKEN_SECRET\"] ??\n    process.env[\"SUPABASE_SERVICE_ROLE_KEY\"] ??\n    \"dev-fallback-not-for-production\";\n  return createHash(\"sha256\").update(`social-tokens:${src}`).digest();\n}\n", "// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// /api/upload \u2014 blood/content checking pipeline\n//\n// POST /api/upload/check-content\n//   auth-gated. Accepts multipart `video` file OR JSON `{ videoUrl }`.\n//   Extracts a representative frame via ffmpeg, sends to GPT-4o vision,\n//   persists result to video_content_flags, returns { uploadSessionId, bloodDetected }.\n//   Rate limited: 20 requests/hour per authenticated user.\n//\n// POST /api/upload/confirm-content\n//   auth-gated. Accepts JSON { uploadSessionId, adultConfirmed, legalConfirmed }.\n//   Updates the existing video_content_flags record with user confirmations.\n//\n// GET /api/upload/blood-flags (moderator-gated, used by admin panel)\n//   Returns all video_content_flags where blood_detected = true.\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nimport { Router, type IRouter, type Request, type Response } from \"express\";\nimport { getSessionUser } from \"../lib/authMiddleware\";\nimport multer from \"multer\";\nimport { writeFile, rm, mkdtemp } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport dns from \"node:dns/promises\";\nimport net from \"node:net\";\nimport { db, videoContentFlagsTable } from \"@workspace/db\";\nimport { eq, desc } from \"drizzle-orm\";\nimport { geminiVisionJson } from \"../lib/ai\";\nimport { extractFrameAsJpeg, FrameExtractionTimeoutError } from \"../lib/frameExtract\";\nimport { requireAuth } from \"../lib/authMiddleware\";\nimport { privateObjectKey, r2PresignUrl, r2PutObject } from \"../lib/r2\";\n\nconst router: IRouter = Router();\n\n// \u2500\u2500\u2500 Multer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst MAX_VIDEO_BYTES = 500 * 1024 * 1024;\n\nconst upload = multer({\n  storage: multer.memoryStorage(),\n  limits: { fileSize: MAX_VIDEO_BYTES, files: 1 },\n  fileFilter: (_req, file, cb) => {\n    if (file.fieldname !== \"video\") return cb(new Error(\"Unexpected field\"));\n    if (!/^video\\//.test(file.mimetype)) return cb(new Error(\"Not a video\"));\n    cb(null, true);\n  },\n});\n\n// \u2500\u2500\u2500 Rate limiter (in-memory, 20 req/hr per user) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst RATE_WINDOW_MS = 60 * 60 * 1000;\nconst RATE_LIMIT = 20;\nconst rateBuckets = new Map<string, { count: number; windowStart: number }>();\n\nfunction checkRateLimit(userId: string): boolean {\n  const now = Date.now();\n  const bucket = rateBuckets.get(userId);\n  if (!bucket || now - bucket.windowStart > RATE_WINDOW_MS) {\n    rateBuckets.set(userId, { count: 1, windowStart: now });\n    return true;\n  }\n  if (bucket.count >= RATE_LIMIT) return false;\n  bucket.count++;\n  return true;\n}\n\n// \u2500\u2500\u2500 SSRF guard \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction isPrivateIp(ip: string): boolean {\n  if (net.isIPv6(ip)) {\n    const lower = ip.toLowerCase().replace(/^::ffff:/, \"\");\n    if (net.isIPv4(lower)) return isPrivateIp(lower);\n    return (\n      lower === \"::1\" || lower.startsWith(\"fe80:\") ||\n      lower.startsWith(\"fc\") || lower.startsWith(\"fd\") || lower.startsWith(\"ff\")\n    );\n  }\n  if (!net.isIPv4(ip)) return true;\n  const parts = ip.split(\".\").map(Number);\n  if (parts.length !== 4 || parts.some((p) => isNaN(p) || p < 0 || p > 255)) return true;\n  const [a, b] = parts;\n  return (\n    a === 0 || a === 10 || a === 127 ||\n    (a === 172 && b! >= 16 && b! <= 31) ||\n    (a === 192 && b === 168) ||\n    (a === 169 && b === 254) || a >= 224\n  );\n}\n\nasync function isPublicHost(hostname: string): Promise<boolean> {\n  const lower = hostname.toLowerCase();\n  if (\n    lower === \"localhost\" || lower.endsWith(\".local\") ||\n    lower.endsWith(\".internal\") || lower.endsWith(\".localdomain\")\n  ) return false;\n  if (net.isIP(hostname) !== 0) return !isPrivateIp(hostname);\n  let addrs: { address: string }[];\n  try { addrs = await dns.lookup(hostname, { all: true }); } catch { return false; }\n  if (addrs.length === 0) return false;\n  return addrs.every(({ address }) => !isPrivateIp(address));\n}\n\nconst MAX_REDIRECTS = 4;\n\nasync function safeFetch(startUrl: string, timeoutMs: number): Promise<globalThis.Response> {\n  let current = startUrl;\n  for (let hop = 0; hop <= MAX_REDIRECTS; hop++) {\n    let parsed: URL;\n    try { parsed = new URL(current); } catch { throw new Error(\"Invalid URL\"); }\n    if (parsed.protocol !== \"https:\" && parsed.protocol !== \"http:\") {\n      throw new Error(`Protocol not allowed: ${parsed.protocol}`);\n    }\n    if (!(await isPublicHost(parsed.hostname))) {\n      throw new Error(`Host not allowed: ${parsed.hostname}`);\n    }\n    const ctrl = new AbortController();\n    const timer = setTimeout(() => ctrl.abort(), timeoutMs);\n    let res: globalThis.Response;\n    try {\n      res = await fetch(parsed.toString(), { signal: ctrl.signal, redirect: \"manual\" });\n    } finally {\n      clearTimeout(timer);\n    }\n    if (res.status >= 300 && res.status < 400) {\n      const loc = res.headers.get(\"location\");\n      if (!loc) return res;\n      current = new URL(loc, parsed).toString();\n      continue;\n    }\n    return res;\n  }\n  throw new Error(\"Too many redirects\");\n}\n\n// \u2500\u2500\u2500 GPT-4o vision blood check \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst BLOOD_CHECK_SYSTEM_PROMPT =\n  \"Analyze this image extracted from a hunting or fishing video. \" +\n  \"Return only a JSON object with a single boolean key `blood_detected`. \" +\n  \"Set to true if there is visible blood, field dressing, gut piles, or an animal being dispatched. \" +\n  \"Set to false for all other content.\";\n\nasync function detectBloodInFrame(frameBuffer: Buffer, mimeType = \"image/jpeg\"): Promise<boolean> {\n  const base64 = frameBuffer.toString(\"base64\");\n\n  const raw = await geminiVisionJson({\n    systemInstruction: BLOOD_CHECK_SYSTEM_PROMPT,\n    userText: \"Analyze this frame and return the JSON object.\",\n    imageBase64: base64,\n    mimeType,\n    maxOutputTokens: 64,\n  });\n\n  try {\n    const parsed = JSON.parse(raw) as { blood_detected?: boolean };\n    return Boolean(parsed.blood_detected);\n  } catch {\n    return false;\n  }\n}\n\n// \u2500\u2500\u2500 Auth helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n\nasync function requireModeratorRole(req: Request, res: Response): Promise<string | null> {\n  const u = getSessionUser(req);\n  if (!u?.userId) { res.status(401).json({ error: \"Unauthorized\" }); return null; }\n  if (u.role !== \"admin\" && u.role !== \"moderator\") {\n    res.status(403).json({ error: \"Forbidden: moderator or admin access required\" });\n    return null;\n  }\n  return u.userId;\n}\n\n// \u2500\u2500\u2500 POST /api/upload/check-frame \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// auth-gated. Accepts { imageBase64, mimeType } \u2014 a JPEG/PNG/WebP frame\n// already extracted on-device. Skips ffmpeg entirely for near-instant latency.\n// Shares the same rate-limit bucket as check-content (20 req/hr per user).\n\nconst ALLOWED_FRAME_MIMES = new Set([\"image/jpeg\", \"image/png\", \"image/webp\"]);\nconst MAX_FRAME_BASE64_CHARS = Math.ceil((5_000_000 * 4) / 3);\n\nrouter.post(\"/check-frame\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    return res.status(401).json({ error: \"Unauthorized\" });\n  }\n\n  if (!checkRateLimit(userId)) {\n    return res.status(429).json({ error: \"Rate limit exceeded. Max 20 content checks per hour.\" });\n  }\n\n  const { imageBase64, mimeType } = req.body ?? {};\n\n  if (!imageBase64 || typeof imageBase64 !== \"string\") {\n    return res.status(400).json({ error: \"imageBase64 is required\" });\n  }\n  if (imageBase64.length > MAX_FRAME_BASE64_CHARS) {\n    return res.status(413).json({ error: \"Image too large (max 5 MB)\" });\n  }\n\n  const resolvedMime =\n    typeof mimeType === \"string\" ? mimeType.split(\";\")[0]?.trim() : \"\";\n  if (!resolvedMime || !ALLOWED_FRAME_MIMES.has(resolvedMime)) {\n    return res.status(400).json({ error: \"Unsupported image type. Use image/jpeg, image/png, or image/webp.\" });\n  }\n\n  try {\n    const jpegBuffer = Buffer.from(imageBase64, \"base64\");\n    const bloodDetected = await detectBloodInFrame(jpegBuffer, resolvedMime);\n    const uploadSessionId = randomUUID();\n\n    await db.insert(videoContentFlagsTable).values({\n      uploadSessionId,\n      userId: userId,\n      bloodDetected,\n      adultConfirmed: false,\n      legalConfirmed: false,\n    });\n\n    return res.json({ uploadSessionId, bloodDetected });\n  } catch (err) {\n    req.log?.error({ err }, \"check-frame failed\");\n    return res.status(500).json({ error: \"Content check failed. Try again.\" });\n  }\n});\n\n// \u2500\u2500\u2500 POST /api/upload/check-content \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.post(\n  \"/check-content\",\n  (req, res, next) => {\n    const ct = req.headers[\"content-type\"] ?? \"\";\n    if (ct.includes(\"multipart/form-data\")) {\n      upload.single(\"video\")(req, res, next);\n    } else {\n      next();\n    }\n  },\n  async (req: Request, res: Response) => {\n    const userId = getSessionUser(req)?.userId;\n    if (!userId) {\n      return res.status(401).json({ error: \"Unauthorized\" });\n    }\n\n    if (!checkRateLimit(userId)) {\n      return res.status(429).json({ error: \"Rate limit exceeded. Max 20 content checks per hour.\" });\n    }\n\n    let workDir: string | null = null;\n    let videoPath: string | null = null;\n\n    try {\n      const file = (req as any).file as Express.Multer.File | undefined;\n      const videoUrl = typeof req.body?.videoUrl === \"string\" ? req.body.videoUrl.trim() : null;\n\n      if (!file && !videoUrl) {\n        return res.status(400).json({ error: \"Provide a video file (multipart) or a videoUrl in JSON body\" });\n      }\n\n      workDir = await mkdtemp(path.join(tmpdir(), \"hbn-check-\"));\n      videoPath = path.join(workDir, \"source.bin\");\n\n      if (file) {\n        await writeFile(videoPath, file.buffer);\n      } else if (videoUrl) {\n        let parsed: URL;\n        try { parsed = new URL(videoUrl); } catch { return res.status(400).json({ error: \"Invalid videoUrl\" }); }\n        if (!(await isPublicHost(parsed.hostname))) {\n          return res.status(400).json({ error: \"videoUrl host not allowed\" });\n        }\n        const res2 = await safeFetch(videoUrl, 60_000);\n        if (!res2.ok) return res.status(400).json({ error: `Could not fetch video: HTTP ${res2.status}` });\n        const ct = res2.headers.get(\"content-type\") ?? \"\";\n        if (!/^video\\//i.test(ct) && !/octet-stream/i.test(ct)) {\n          return res.status(400).json({ error: `Unexpected content-type: ${ct}` });\n        }\n        if (!res2.body) return res.status(400).json({ error: \"Empty video response\" });\n        const reader = res2.body.getReader();\n        const chunks: Uint8Array[] = [];\n        let total = 0;\n        for (;;) {\n          const { value, done } = await reader.read();\n          if (done) break;\n          total += value.byteLength;\n          if (total > MAX_VIDEO_BYTES) return res.status(413).json({ error: \"Video too large (max 500 MB)\" });\n          chunks.push(value);\n        }\n        await writeFile(videoPath, Buffer.concat(chunks.map((c) => Buffer.from(c))));\n      }\n\n      const jpegBuffer = await extractFrameAsJpeg(videoPath!);\n      const bloodDetected = await detectBloodInFrame(jpegBuffer);\n\n      const uploadSessionId = randomUUID();\n\n      await db.insert(videoContentFlagsTable).values({\n        uploadSessionId,\n        userId: userId,\n        bloodDetected,\n        adultConfirmed: false,\n        legalConfirmed: false,\n      });\n\n      return res.json({ uploadSessionId, bloodDetected });\n    } catch (err) {\n      if (err instanceof FrameExtractionTimeoutError) {\n        req.log?.warn({ err }, \"check-content: ffmpeg timed out\");\n        return res.status(504).json({ error: \"Content check timed out. The video may be corrupted or too complex to process.\" });\n      }\n      req.log?.error({ err }, \"check-content failed\");\n      return res.status(500).json({ error: \"Content check failed. Try again.\" });\n    } finally {\n      if (workDir) {\n        await rm(workDir, { recursive: true, force: true }).catch(() => {});\n      }\n    }\n  },\n);\n\n// \u2500\u2500\u2500 POST /api/upload/confirm-content \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.post(\"/confirm-content\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    return res.status(401).json({ error: \"Unauthorized\" });\n  }\n\n  const { uploadSessionId, adultConfirmed, legalConfirmed } = req.body ?? {};\n  if (typeof uploadSessionId !== \"string\" || !uploadSessionId) {\n    return res.status(400).json({ error: \"uploadSessionId is required\" });\n  }\n  if (typeof adultConfirmed !== \"boolean\" || typeof legalConfirmed !== \"boolean\") {\n    return res.status(400).json({ error: \"adultConfirmed and legalConfirmed must be booleans\" });\n  }\n\n  try {\n    const rows = await db\n      .update(videoContentFlagsTable)\n      .set({ adultConfirmed, legalConfirmed })\n      .where(eq(videoContentFlagsTable.uploadSessionId, uploadSessionId))\n      .returning({ id: videoContentFlagsTable.id, userId: videoContentFlagsTable.userId });\n\n    if (rows.length === 0) {\n      return res.status(404).json({ error: \"Upload session not found\" });\n    }\n    if (rows[0]!.userId !== userId) {\n      return res.status(403).json({ error: \"Forbidden\" });\n    }\n\n    return res.json({ success: true });\n  } catch (err) {\n    req.log?.error({ err }, \"confirm-content failed\");\n    return res.status(500).json({ error: \"Failed to save confirmations\" });\n  }\n});\n\n// \u2500\u2500\u2500 GET /api/upload/blood-flags (moderator-gated) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/blood-flags\", async (req: Request, res: Response) => {\n  const userId = await requireModeratorRole(req, res);\n  if (!userId) return;\n\n  try {\n    const rows = await db\n      .select()\n      .from(videoContentFlagsTable)\n      .where(eq(videoContentFlagsTable.bloodDetected, true))\n      .orderBy(desc(videoContentFlagsTable.analyzedAt))\n      .limit(100);\n\n    return res.json(\n      rows.map((r) => ({\n        id: r.id,\n        uploadSessionId: r.uploadSessionId,\n        userId: r.userId,\n        bloodDetected: r.bloodDetected,\n        adultConfirmed: r.adultConfirmed,\n        legalConfirmed: r.legalConfirmed,\n        analyzedAt: r.analyzedAt.toISOString(),\n      })),\n    );\n  } catch (err) {\n    req.log?.error({ err }, \"blood-flags fetch failed\");\n    return res.status(500).json({ error: \"Failed to load blood flags\" });\n  }\n});\n\n// POST /api/upload/thumbnail \u2014 store a custom cover image on R2\nrouter.post(\"/thumbnail\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const body = req.body as { imageBase64?: string; mimeType?: string };\n  const raw = body.imageBase64?.trim();\n  if (!raw) {\n    res.status(400).json({ error: \"imageBase64 is required\" });\n    return;\n  }\n\n  const mimeType = body.mimeType?.trim() || \"image/jpeg\";\n  if (!/^image\\/(jpeg|jpg|png|webp)$/i.test(mimeType)) {\n    res.status(400).json({ error: \"Unsupported image type\" });\n    return;\n  }\n\n  let buffer: Buffer;\n  try {\n    const b64 = raw.includes(\",\") ? raw.split(\",\")[1]! : raw;\n    buffer = Buffer.from(b64, \"base64\");\n    if (buffer.length < 16 || buffer.length > 5 * 1024 * 1024) {\n      res.status(400).json({ error: \"Image must be between 16 bytes and 5 MB\" });\n      return;\n    }\n  } catch {\n    res.status(400).json({ error: \"Invalid base64 image\" });\n    return;\n  }\n\n  const thumbId = randomUUID();\n  const ext = mimeType.includes(\"png\") ? \"png\" : mimeType.includes(\"webp\") ? \"webp\" : \"jpg\";\n  const key = privateObjectKey(`videos/${userId}/thumb-${thumbId}.${ext}`);\n\n  try {\n    await r2PutObject(key, buffer, mimeType);\n    const thumbnailUrl = await r2PresignUrl(key, \"GET\", 7 * 24 * 3600);\n    res.status(201).json({ thumbnailUrl, thumbnailKey: key });\n  } catch (err) {\n    req.log?.error({ err }, \"thumbnail upload failed\");\n    res.status(500).json({ error: \"Failed to store thumbnail\" });\n  }\n});\n\nexport default router;\n", "import { spawn } from \"node:child_process\";\nimport { mkdtemp, readFile, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\n\nexport class FrameExtractionTimeoutError extends Error {\n  constructor(tool: string, timeoutMs: number) {\n    super(`${tool} timed out after ${timeoutMs / 1000}s`);\n    this.name = \"FrameExtractionTimeoutError\";\n  }\n}\n\nconst FFPROBE_TIMEOUT_MS = 10_000;\nconst FFMPEG_TIMEOUT_MS = 20_000;\n\nfunction probeDuration(filePath: string): Promise<number | null> {\n  return new Promise((resolve) => {\n    const child = spawn(\"ffprobe\", [\n      \"-v\", \"error\",\n      \"-show_entries\", \"format=duration\",\n      \"-of\", \"csv=p=0\",\n      filePath,\n    ], { stdio: [\"ignore\", \"pipe\", \"ignore\"] });\n    let out = \"\";\n    child.stdout.on(\"data\", (d: Buffer) => { out += d.toString(); });\n\n    const timer = setTimeout(() => {\n      try { child.kill(\"SIGKILL\"); } catch { /* noop */ }\n      resolve(null);\n    }, FFPROBE_TIMEOUT_MS);\n\n    child.on(\"error\", () => { clearTimeout(timer); resolve(null); });\n    child.on(\"close\", () => {\n      clearTimeout(timer);\n      const n = parseFloat(out.trim());\n      resolve(isFinite(n) && n > 0 ? n : null);\n    });\n  });\n}\n\nfunction runFfmpegFrame(\n  inputPath: string,\n  outputPath: string,\n  seekSec: number,\n): Promise<void> {\n  return new Promise((resolve, reject) => {\n    const child = spawn(\"ffmpeg\", [\n      \"-ss\", String(seekSec.toFixed(3)),\n      \"-i\", inputPath,\n      \"-frames:v\", \"1\",\n      \"-q:v\", \"3\",\n      \"-f\", \"image2\",\n      \"-vf\", \"scale=960:-1\",\n      \"-y\",\n      outputPath,\n    ], { stdio: [\"ignore\", \"ignore\", \"pipe\"] });\n\n    let stderr = \"\";\n    child.stderr.on(\"data\", (d: Buffer) => {\n      if (stderr.length < 4000) stderr += d.toString();\n    });\n\n    const timer = setTimeout(() => {\n      try { child.kill(\"SIGKILL\"); } catch { /* noop */ }\n      reject(new FrameExtractionTimeoutError(\"ffmpeg\", FFMPEG_TIMEOUT_MS));\n    }, FFMPEG_TIMEOUT_MS);\n\n    child.on(\"error\", (err) => { clearTimeout(timer); reject(err); });\n    child.on(\"close\", (code) => {\n      clearTimeout(timer);\n      if (code === 0) resolve();\n      else reject(new Error(`ffmpeg frame extract failed (code ${code}): ${stderr.slice(-500)}`));\n    });\n  });\n}\n\nexport async function extractFrameAsJpeg(videoPath: string): Promise<Buffer> {\n  const duration = await probeDuration(videoPath);\n  const seekSec = duration ? Math.max(0.5, duration * 0.1) : 1;\n\n  const workDir = await mkdtemp(path.join(tmpdir(), \"hbn-frame-\"));\n  const framePath = path.join(workDir, \"frame.jpg\");\n\n  try {\n    await runFfmpegFrame(videoPath, framePath, seekSec);\n    return await readFile(framePath);\n  } finally {\n    await rm(workDir, { recursive: true, force: true }).catch(() => {});\n  }\n}\n", "import { Router, type IRouter } from \"express\";\nimport { db } from \"@workspace/db\";\nimport { outfittersTable } from \"@workspace/db/schema\";\nimport { eq, desc } from \"drizzle-orm\";\nimport { getSessionUser } from \"../lib/authMiddleware\";\nimport type { OutfitterRow } from \"@workspace/db/schema\";\n\nconst router: IRouter = Router();\n\nfunction formatOutfitter(r: OutfitterRow) {\n  return {\n    id: r.id,\n    name: r.name,\n    guide: r.guide,\n    location: r.location,\n    state: r.state,\n    targetSpecies: r.targetSpecies as string[],\n    imageKey: r.imageKey,\n    photos: r.photos as string[],\n    rating: r.rating,\n    reviewCount: r.reviewCount,\n    pricePerDay: r.pricePerDay,\n    category: r.category,\n    status: r.status,\n    featured: r.featured,\n    bio: r.bio,\n    email: r.email,\n    phone: r.phone,\n    website: r.website,\n    yearsInOperation: r.yearsInOperation,\n    groupSize: r.groupSize,\n    tripsInclude: r.tripsInclude as string[],\n    seasons: r.seasons as string[],\n    licenses: r.licenses as string[],\n    reviews: r.reviews as unknown[],\n    submittedAt: r.submittedAt?.toISOString() ?? null,\n    approvedAt: r.approvedAt?.toISOString() ?? null,\n  };\n}\n\nrouter.get(\"/\", async (req, res) => {\n  try {\n    const rows = await db\n      .select()\n      .from(outfittersTable)\n      .where(eq(outfittersTable.status, \"active\"))\n      .orderBy(desc(outfittersTable.featured), desc(outfittersTable.createdAt));\n    res.json(rows.map(formatOutfitter));\n  } catch (err) {\n    req.log?.error({ err }, \"Public: failed to list outfitters\");\n    res.status(500).json({ error: \"Failed to load outfitters\" });\n  }\n});\n\n// \u2500\u2500 Public single outfitter lookup \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Returns the full active outfitter record for the detail page.\n// Pending/suspended outfitters are not exposed.\nrouter.get(\"/:id\", async (req, res) => {\n  const { id } = req.params as { id: string };\n  if (!id || typeof id !== \"string\" || id.length > 80) {\n    res.status(400).json({ error: \"Invalid outfitter ID\" });\n    return;\n  }\n\n  try {\n    const rows = await db\n      .select()\n      .from(outfittersTable)\n      .where(eq(outfittersTable.id, id))\n      .limit(1);\n\n    const row = rows[0];\n    if (!row || row.status !== \"active\") {\n      res.status(404).json({ error: \"Outfitter not found\" });\n      return;\n    }\n\n    res.json(formatOutfitter(row));\n  } catch (err) {\n    req.log?.error({ err }, \"Public: failed to fetch outfitter by id\");\n    res.status(500).json({ error: \"Failed to load outfitter\" });\n  }\n});\n\n// \u2500\u2500 auth-gated: look up authenticated user's own application \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Returns the most recent application tied to the authenticated user.\n// Used so guides can recover their application status on a new device.\nrouter.get(\"/apply/mine\", async (req, res) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  try {\n    const rows = await db\n      .select()\n      .from(outfittersTable)\n      .where(eq(outfittersTable.userId, userId))\n      .orderBy(desc(outfittersTable.createdAt))\n      .limit(1);\n\n    const row = rows[0];\n    if (!row) {\n      res.status(404).json({ error: \"No application found\" });\n      return;\n    }\n\n    res.json({\n      id: row.id,\n      status: row.status,\n      name: row.name,\n      guide: row.guide,\n      location: row.location,\n      state: row.state,\n      category: row.category,\n      bio: row.bio,\n      targetSpecies: row.targetSpecies as string[],\n      pricePerDay: row.pricePerDay,\n      email: row.email,\n      phone: row.phone,\n      website: row.website,\n      yearsInOperation: row.yearsInOperation,\n      groupSize: row.groupSize,\n      tripsInclude: row.tripsInclude as string[],\n      seasons: row.seasons as string[],\n      licenses: row.licenses as string[],\n      photos: row.photos as string[],\n      submittedAt: row.submittedAt?.toISOString() ?? null,\n      approvedAt: row.approvedAt?.toISOString() ?? null,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"auth-gated: failed to look up user's own application\");\n    res.status(500).json({ error: \"Failed to look up application\" });\n  }\n});\n\n// \u2500\u2500 Public listing application \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// No auth required \u2014 any guide can submit a listing request.\n// If an authenticated session is present the userId is stored on the row so the guide\n// can retrieve their status from any device via GET /apply/mine.\nrouter.post(\"/apply\", async (req, res) => {\n  const ct = req.headers[\"content-type\"] ?? \"\";\n  if (!ct.includes(\"application/json\")) {\n    res.status(415).json({ error: \"Content-Type must be application/json\" });\n    return;\n  }\n\n  const body = (req.body ?? {}) as Record<string, unknown>;\n\n  const name = String(body[\"name\"] ?? \"\").trim();\n  const guide = String(body[\"guide\"] ?? \"\").trim();\n  const location = String(body[\"location\"] ?? \"\").trim();\n  const state = String(body[\"state\"] ?? \"\").trim();\n  const category = String(body[\"category\"] ?? \"hunting\").trim();\n  const bio = String(body[\"bio\"] ?? \"\").trim();\n  const targetSpecies = Array.isArray(body[\"targetSpecies\"]) ? body[\"targetSpecies\"] as string[] : [];\n  const pricePerDay = Number(body[\"pricePerDay\"] ?? 0);\n  const email = String(body[\"email\"] ?? \"\").trim();\n\n  if (!name || !guide || !location || !state || !bio) {\n    res.status(400).json({ error: \"name, guide, location, state, and bio are required\" });\n    return;\n  }\n  if (![\"hunting\", \"fishing\", \"both\"].includes(category)) {\n    res.status(400).json({ error: \"category must be hunting, fishing, or both\" });\n    return;\n  }\n  if (targetSpecies.length === 0) {\n    res.status(400).json({ error: \"At least one target species is required\" });\n    return;\n  }\n  if (!pricePerDay || pricePerDay <= 0) {\n    res.status(400).json({ error: \"pricePerDay must be a positive number\" });\n    return;\n  }\n\n  const VALID_STATES = new Set([\n    \"Alabama\",\"Alaska\",\"Arizona\",\"Arkansas\",\"California\",\"Colorado\",\"Connecticut\",\n    \"Delaware\",\"Florida\",\"Georgia\",\"Hawaii\",\"Idaho\",\"Illinois\",\"Indiana\",\"Iowa\",\n    \"Kansas\",\"Kentucky\",\"Louisiana\",\"Maine\",\"Maryland\",\"Massachusetts\",\"Michigan\",\n    \"Minnesota\",\"Mississippi\",\"Missouri\",\"Montana\",\"Nebraska\",\"Nevada\",\"New Hampshire\",\n    \"New Jersey\",\"New Mexico\",\"New York\",\"North Carolina\",\"North Dakota\",\"Ohio\",\n    \"Oklahoma\",\"Oregon\",\"Pennsylvania\",\"Rhode Island\",\"South Carolina\",\"South Dakota\",\n    \"Tennessee\",\"Texas\",\"Utah\",\"Vermont\",\"Virginia\",\"Washington\",\"West Virginia\",\n    \"Wisconsin\",\"Wyoming\",\n    // abbreviations\n    \"AL\",\"AK\",\"AZ\",\"AR\",\"CA\",\"CO\",\"CT\",\"DE\",\"FL\",\"GA\",\"HI\",\"ID\",\"IL\",\"IN\",\"IA\",\n    \"KS\",\"KY\",\"LA\",\"ME\",\"MD\",\"MA\",\"MI\",\"MN\",\"MS\",\"MO\",\"MT\",\"NE\",\"NV\",\"NH\",\"NJ\",\n    \"NM\",\"NY\",\"NC\",\"ND\",\"OH\",\"OK\",\"OR\",\"PA\",\"RI\",\"SC\",\"SD\",\"TN\",\"TX\",\"UT\",\"VT\",\n    \"VA\",\"WA\",\"WV\",\"WI\",\"WY\",\n  ]);\n  if (!VALID_STATES.has(state)) {\n    res.status(400).json({ error: \"state must be a valid US state name or abbreviation\" });\n    return;\n  }\n\n  // Optionally associate this application with an authenticated user.\n  // This allows the guide to retrieve their status from any device later.\n  const ownerUserId = getSessionUser(req)?.userId ?? null;\n\n  const id = `o_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n\n  const phone = String(body[\"phone\"] ?? \"\").trim();\n  const website = String(body[\"website\"] ?? \"\").trim();\n  const yearsInOperation = Math.max(0, Number(body[\"yearsInOperation\"] ?? 0));\n  const groupSize = String(body[\"groupSize\"] ?? \"\").trim();\n  const tripsInclude = Array.isArray(body[\"tripsInclude\"]) ? body[\"tripsInclude\"] as string[] : [];\n  const seasons = Array.isArray(body[\"seasons\"]) ? body[\"seasons\"] as string[] : [];\n  const licenses = Array.isArray(body[\"licenses\"]) ? body[\"licenses\"] as string[] : [];\n  const photos = Array.isArray(body[\"photos\"]) ? (body[\"photos\"] as string[]).slice(0, 5) : [];\n  const imageKey = category === \"fishing\" ? \"reel\" : \"bow\";\n\n  try {\n    const [row] = await db\n      .insert(outfittersTable)\n      .values({\n        id,\n        name,\n        guide,\n        location,\n        state,\n        targetSpecies,\n        imageKey,\n        photos,\n        rating: 0,\n        reviewCount: 0,\n        pricePerDay,\n        category,\n        status: \"pending\",\n        featured: false,\n        bio,\n        email,\n        phone,\n        website,\n        yearsInOperation,\n        groupSize,\n        tripsInclude,\n        seasons,\n        licenses,\n        reviews: [],\n        submittedAt: new Date(),\n        userId: ownerUserId,\n      })\n      .returning();\n\n    if (!row) {\n      res.status(500).json({ error: \"Submission failed\" });\n      return;\n    }\n\n    res.status(201).json({ success: true, id: row.id });\n  } catch (err) {\n    // Unique partial index violation: a pending application with the same name already exists\n    if (\n      err != null &&\n      typeof err === \"object\" &&\n      \"code\" in err &&\n      (err as { code: string }).code === \"23505\" &&\n      \"constraint\" in err &&\n      (err as { constraint: string }).constraint === \"outfitters_pending_name_unique\"\n    ) {\n      res.status(409).json({\n        error: \"A pending application for this business name already exists. Please wait for it to be reviewed before submitting again.\",\n      });\n      return;\n    }\n    req.log?.error({ err }, \"Public: failed to insert outfitter application\");\n    res.status(500).json({ error: \"Failed to submit application\" });\n  }\n});\n\n// \u2500\u2500 Lightweight status ping \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Returns only {id, status} so client devices can auto-clear their pending flag\n// without exposing full application data. No auth required.\nrouter.get(\"/apply/:id/status\", async (req, res) => {\n  const { id } = req.params as { id: string };\n  if (!id || typeof id !== \"string\" || id.length > 80) {\n    res.status(400).json({ error: \"Invalid application ID\" });\n    return;\n  }\n\n  try {\n    const rows = await db\n      .select({ id: outfittersTable.id, status: outfittersTable.status })\n      .from(outfittersTable)\n      .where(eq(outfittersTable.id, id))\n      .limit(1);\n\n    const row = rows[0];\n    if (!row) {\n      res.status(404).json({ error: \"Application not found\" });\n      return;\n    }\n\n    res.json({ id: row.id, status: row.status });\n  } catch (err) {\n    req.log?.error({ err }, \"Public: failed to look up application status (ping)\");\n    res.status(500).json({ error: \"Failed to look up status\" });\n  }\n});\n\n// \u2500\u2500 Public application status lookup \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Allows applicants to check the status of their own submission using the ID\n// that was returned to them at submit time. Returns a safe subset of the row\n// (no admin-only fields such as internal moderation notes).\nrouter.get(\"/apply/:id\", async (req, res) => {\n  const { id } = req.params as { id: string };\n  if (!id || typeof id !== \"string\" || id.length > 80) {\n    res.status(400).json({ error: \"Invalid application ID\" });\n    return;\n  }\n\n  try {\n    const rows = await db\n      .select()\n      .from(outfittersTable)\n      .where(eq(outfittersTable.id, id))\n      .limit(1);\n\n    const row = rows[0];\n    if (!row) {\n      res.status(404).json({ error: \"Application not found\" });\n      return;\n    }\n\n    res.json({\n      id: row.id,\n      status: row.status,\n      name: row.name,\n      guide: row.guide,\n      location: row.location,\n      state: row.state,\n      category: row.category,\n      bio: row.bio,\n      targetSpecies: row.targetSpecies as string[],\n      pricePerDay: row.pricePerDay,\n      email: row.email,\n      phone: row.phone,\n      website: row.website,\n      yearsInOperation: row.yearsInOperation,\n      groupSize: row.groupSize,\n      tripsInclude: row.tripsInclude as string[],\n      seasons: row.seasons as string[],\n      licenses: row.licenses as string[],\n      photos: row.photos as string[],\n      submittedAt: row.submittedAt?.toISOString() ?? null,\n      approvedAt: row.approvedAt?.toISOString() ?? null,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Public: failed to look up application status\");\n    res.status(500).json({ error: \"Failed to look up application\" });\n  }\n});\n\nexport default router;\n", "// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// /api/listings \u2014 user-facing used-gear listing submission\n//\n// POST /api/listings\n//   Supabase-gated (any authenticated user). Maps session user id \u2192 user_id column.\n//\n// GET /api/listings/mine\n//   Supabase-gated. Returns the authenticated user's own listings.\n//\n// DELETE /api/listings/:id\n//   Supabase-gated. Users may delete their own pending or rejected listings.\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nimport { Router, type IRouter, type Request, type Response } from \"express\";\nimport { getSessionUser } from \"../lib/authMiddleware\";\nimport { db } from \"@workspace/db\";\nimport { usedListingsTable, user as authUserTable } from \"@workspace/db/schema\";\nimport { randomUUID } from \"node:crypto\";\nimport { eq, desc, sql, and, ilike } from \"drizzle-orm\";\nimport { privateObjectKey, r2PresignUrl, r2PutObject } from \"../lib/r2\";\n\nconst router: IRouter = Router();\n\n// \u2500\u2500\u2500 GET /api/listings \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Public (no auth). Returns approved used-gear listings with pagination.\n// Query params: category (hunting|fishing), q (name search), offset, limit (max 50)\nrouter.get(\"/\", async (req: Request, res: Response) => {\n  const { category, q, offset, limit } = req.query;\n\n  const PAGE_LIMIT = Math.min(Math.max(Number(limit) || 20, 1), 50);\n  const PAGE_OFFSET = Math.max(Number(offset) || 0, 0);\n\n  const conditions: ReturnType<typeof eq>[] = [eq(usedListingsTable.status, \"approved\")];\n\n  if (category === \"hunting\" || category === \"fishing\") {\n    conditions.push(eq(usedListingsTable.category, category));\n  }\n\n  if (typeof q === \"string\" && q.trim()) {\n    conditions.push(ilike(usedListingsTable.name, `%${q.trim()}%`));\n  }\n\n  try {\n    const rows = await db\n      .select({\n        id: usedListingsTable.id,\n        name: usedListingsTable.name,\n        price: usedListingsTable.price,\n        condition: usedListingsTable.condition,\n        seller: usedListingsTable.seller,\n        location: usedListingsTable.location,\n        category: usedListingsTable.category,\n        imageUrls: usedListingsTable.imageUrls,\n        postedAt: usedListingsTable.postedAt,\n      })\n      .from(usedListingsTable)\n      .where(and(...conditions))\n      .orderBy(desc(usedListingsTable.createdAt))\n      .limit(PAGE_LIMIT + 1)\n      .offset(PAGE_OFFSET);\n\n    const hasMore = rows.length > PAGE_LIMIT;\n    const items = hasMore ? rows.slice(0, PAGE_LIMIT) : rows;\n\n    res.json({\n      items: items.map((r) => ({\n        ...r,\n        imageUrls: r.imageUrls ?? [],\n        postedAt: r.postedAt.toISOString(),\n      })),\n      hasMore,\n      nextOffset: hasMore ? PAGE_OFFSET + PAGE_LIMIT : null,\n      count: items.length,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Listings: failed to fetch public listings\");\n    res.status(500).json({ error: \"Failed to load listings\" });\n  }\n});\n\n// \u2500\u2500\u2500 CSRF: require application/json for mutations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nrouter.use((req, res, next) => {\n  if ([\"POST\", \"PUT\", \"PATCH\"].includes(req.method)) {\n    const ct = req.headers[\"content-type\"] ?? \"\";\n    if (!ct.includes(\"application/json\")) {\n      res.status(415).json({ error: \"Content-Type must be application/json\" });\n      return;\n    }\n  }\n  next();\n});\n\n// \u2500\u2500\u2500 PATCH /api/listings/:id \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// auth-gated. Allows the listing owner to edit name/price/condition/\n// category/location on a pending listing only. Approved/rejected are locked.\nrouter.patch(\"/:id\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const { id } = req.params;\n\n  try {\n    const [existing] = await db\n      .select()\n      .from(usedListingsTable)\n      .where(sql`${usedListingsTable.id} = ${id} AND ${usedListingsTable.userId} = ${userId}`);\n\n    if (!existing) {\n      res.status(404).json({ error: \"Listing not found or not yours\" });\n      return;\n    }\n\n    if (existing.status !== \"pending\") {\n      res.status(403).json({ error: \"Only pending listings can be edited.\" });\n      return;\n    }\n\n    const { name, price, condition, category, location, imageUrls } = req.body as Record<string, unknown>;\n\n    if (\n      typeof name !== \"string\" || !name.trim() ||\n      typeof price !== \"number\" || !Number.isFinite(price) || price <= 0 ||\n      typeof condition !== \"string\" || ![\"Excellent\", \"Good\", \"Fair\"].includes(condition) ||\n      typeof category !== \"string\" || ![\"hunting\", \"fishing\"].includes(category) ||\n      typeof location !== \"string\" || !location.trim()\n    ) {\n      res.status(400).json({\n        error: \"Invalid listing data. Required: name (string), price (positive number), condition (Excellent|Good|Fair), category (hunting|fishing), location (string).\",\n      });\n      return;\n    }\n\n    const safeImageUrls: string[] | undefined = imageUrls === undefined\n      ? undefined\n      : Array.isArray(imageUrls)\n        ? imageUrls.filter((u): u is string => typeof u === \"string\" && u.length > 0).slice(0, 10)\n        : [];\n\n    if (safeImageUrls !== undefined && safeImageUrls.length === 0) {\n      res.status(400).json({ error: \"At least one photo is required.\" });\n      return;\n    }\n\n    const [updated] = await db\n      .update(usedListingsTable)\n      .set({\n        name: name.trim(),\n        price: Math.round(price),\n        condition: condition as \"Excellent\" | \"Good\" | \"Fair\",\n        category: category as \"hunting\" | \"fishing\",\n        location: location.trim(),\n        ...(safeImageUrls !== undefined ? { imageUrls: safeImageUrls } : {}),\n      })\n      .where(sql`${usedListingsTable.id} = ${id} AND ${usedListingsTable.userId} = ${userId}`)\n      .returning();\n\n    if (!updated) {\n      res.status(500).json({ error: \"Update failed\" });\n      return;\n    }\n\n    res.json({\n      ...updated,\n      postedAt: updated.postedAt.toISOString(),\n      createdAt: updated.createdAt.toISOString(),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Listings: failed to update listing\");\n    res.status(500).json({ error: \"Failed to update listing\" });\n  }\n});\n\n// \u2500\u2500\u2500 Rate limiter (10 listings per hour per user) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst RATE_WINDOW_MS = 60 * 60 * 1000;\nconst RATE_LIMIT = 10;\nconst rateLimitMap = new Map<string, { count: number; windowStart: number }>();\n\nfunction checkRateLimit(userId: string): boolean {\n  const now = Date.now();\n  const entry = rateLimitMap.get(userId);\n  if (!entry || now - entry.windowStart > RATE_WINDOW_MS) {\n    rateLimitMap.set(userId, { count: 1, windowStart: now });\n    return true;\n  }\n  if (entry.count >= RATE_LIMIT) return false;\n  entry.count++;\n  return true;\n}\n\n// \u2500\u2500\u2500 GET /api/listings/public \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Public (no auth). Returns the most recent approved used-gear listings.\n// Strips internal fields (userId, id) \u2014 safe for unauthenticated callers.\nrouter.get(\"/public\", async (_req: Request, res: Response) => {\n  try {\n    const limit = 8;\n    const rows = await db\n      .select({\n        name: usedListingsTable.name,\n        price: usedListingsTable.price,\n        condition: usedListingsTable.condition,\n        seller: usedListingsTable.seller,\n        location: usedListingsTable.location,\n        category: usedListingsTable.category,\n        postedAt: usedListingsTable.postedAt,\n      })\n      .from(usedListingsTable)\n      .where(eq(usedListingsTable.status, \"approved\"))\n      .orderBy(desc(usedListingsTable.createdAt))\n      .limit(limit);\n\n    res.json(\n      rows.map((r) => ({\n        ...r,\n        postedAt: r.postedAt.toISOString(),\n      })),\n    );\n  } catch (err) {\n    res.status(500).json({ error: \"Failed to load listings\" });\n  }\n});\n\n// \u2500\u2500\u2500 GET /api/listings/mine \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nrouter.get(\"/mine\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  try {\n    const rows = await db\n      .select()\n      .from(usedListingsTable)\n      .where(sql`${usedListingsTable.userId} = ${userId}`)\n      .orderBy(desc(usedListingsTable.createdAt));\n\n    res.json(\n      rows.map((r) => ({\n        ...r,\n        postedAt: r.postedAt.toISOString(),\n        createdAt: r.createdAt.toISOString(),\n      })),\n    );\n  } catch (err) {\n    req.log?.error({ err }, \"Listings: failed to fetch user's listings\");\n    res.status(500).json({ error: \"Failed to retrieve your listings\" });\n  }\n});\n\n// \u2500\u2500\u2500 POST /api/listings/upload-image \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nrouter.post(\"/upload-image\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const body = req.body as { imageBase64?: string; mimeType?: string; fileName?: string };\n  const raw = body.imageBase64?.trim();\n\n  if (!raw) {\n    res.status(400).json({ error: \"imageBase64 is required\" });\n    return;\n  }\n\n  const mimeType = body.mimeType?.trim() || \"image/jpeg\";\n  if (!/^image\\/(jpeg|jpg|png|webp|gif)$/i.test(mimeType)) {\n    res.status(400).json({ error: \"Unsupported image type\" });\n    return;\n  }\n\n  let buffer: Buffer;\n  try {\n    const b64 = raw.includes(\",\") ? raw.split(\",\")[1]! : raw;\n    buffer = Buffer.from(b64, \"base64\");\n    if (buffer.length < 16 || buffer.length > 8 * 1024 * 1024) {\n      res.status(400).json({ error: \"Image must be between 16 bytes and 8 MB\" });\n      return;\n    }\n  } catch {\n    res.status(400).json({ error: \"Invalid base64 image\" });\n    return;\n  }\n\n  const imageId = randomUUID();\n  const ext = mimeType.includes(\"png\")\n    ? \"png\"\n    : mimeType.includes(\"webp\")\n      ? \"webp\"\n      : mimeType.includes(\"gif\")\n        ? \"gif\"\n        : \"jpg\";\n  const key = privateObjectKey(`boneyard/${userId}/${imageId}.${ext}`);\n\n  try {\n    await r2PutObject(key, buffer, mimeType);\n    const url = await r2PresignUrl(key, \"GET\", 7 * 24 * 3600);\n    res.status(201).json({\n      url,\n      mimeType,\n      fileName: body.fileName?.trim() || `photo.${ext}`,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Listings: image upload failed\");\n    res.status(500).json({ error: \"Failed to upload image\" });\n  }\n});\n\n// \u2500\u2500\u2500 GET /api/listings/:id \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Public (no auth). Returns a single approved listing by ID with full detail.\nrouter.get(\"/:id\", async (req: Request, res: Response) => {\n  const id = String(req.params.id);\n\n  try {\n    const [row] = await db\n      .select({\n        id: usedListingsTable.id,\n        name: usedListingsTable.name,\n        price: usedListingsTable.price,\n        condition: usedListingsTable.condition,\n        seller: usedListingsTable.seller,\n        location: usedListingsTable.location,\n        category: usedListingsTable.category,\n        imageUrls: usedListingsTable.imageUrls,\n        postedAt: usedListingsTable.postedAt,\n      })\n      .from(usedListingsTable)\n      .where(and(eq(usedListingsTable.id, id), eq(usedListingsTable.status, \"approved\")));\n\n    if (!row) {\n      res.status(404).json({ error: \"Listing not found\" });\n      return;\n    }\n\n    res.json({\n      ...row,\n      imageUrls: row.imageUrls ?? [],\n      postedAt: row.postedAt.toISOString(),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Listings: failed to fetch listing by id\");\n    res.status(500).json({ error: \"Failed to load listing\" });\n  }\n});\n\n// \u2500\u2500\u2500 DELETE /api/listings/:id \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nrouter.delete(\"/:id\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const { id } = req.params;\n\n  try {\n    const [existing] = await db\n      .select()\n      .from(usedListingsTable)\n      .where(sql`${usedListingsTable.id} = ${id} AND ${usedListingsTable.userId} = ${userId}`);\n\n    if (!existing) {\n      res.status(404).json({ error: \"Listing not found or not yours\" });\n      return;\n    }\n\n    if (existing.status === \"approved\") {\n      res.status(403).json({ error: \"Approved listings cannot be deleted. Contact support if needed.\" });\n      return;\n    }\n\n    await db\n      .delete(usedListingsTable)\n      .where(sql`${usedListingsTable.id} = ${id} AND ${usedListingsTable.userId} = ${userId}`);\n\n    res.json({ success: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Listings: failed to delete listing\");\n    res.status(500).json({ error: \"Failed to delete listing\" });\n  }\n});\n\n// \u2500\u2500\u2500 POST /api/listings \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nrouter.post(\"/\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  if (!checkRateLimit(userId)) {\n    res.status(429).json({ error: \"Too many listings. Please wait before submitting another.\" });\n    return;\n  }\n\n  const { name, price, condition, category, location, imageUrls } = req.body as Record<string, unknown>;\n\n  if (\n    typeof name !== \"string\" || !name.trim() ||\n    typeof price !== \"number\" || !Number.isFinite(price) || price <= 0 ||\n    typeof condition !== \"string\" || ![\"Excellent\", \"Good\", \"Fair\"].includes(condition) ||\n    typeof category !== \"string\" || ![\"hunting\", \"fishing\"].includes(category) ||\n    typeof location !== \"string\" || !location.trim()\n  ) {\n    res.status(400).json({\n      error: \"Invalid listing data. Required: name (string), price (positive number), condition (Excellent|Good|Fair), category (hunting|fishing), location (string).\",\n    });\n    return;\n  }\n\n  const safeImageUrls: string[] = Array.isArray(imageUrls)\n    ? imageUrls.filter((u): u is string => typeof u === \"string\" && u.length > 0).slice(0, 10)\n    : [];\n\n  if (safeImageUrls.length === 0) {\n    res.status(400).json({ error: \"At least one photo is required.\" });\n    return;\n  }\n\n  // Derive seller name from DB user profile\n  let sellerName: string;\n  try {\n    const dbRows = await db.select({ name: authUserTable.name, email: authUserTable.email }).from(authUserTable).where(eq(authUserTable.id, userId)).limit(1);\n    const dbUser = dbRows[0];\n    sellerName = dbUser?.name || dbUser?.email?.split(\"@\")[0] || \"Unknown\";\n  } catch (err) {\n    req.log?.error({ err }, \"Listings: failed to fetch user\");\n    sellerName = \"Unknown\";\n  }\n\n  try {\n    const [row] = await db\n      .insert(usedListingsTable)\n      .values({\n        id: randomUUID(),\n        name: name.trim(),\n        price: Math.round(price),\n        condition: condition as \"Excellent\" | \"Good\" | \"Fair\",\n        seller: sellerName,\n        location: location.trim(),\n        category: category as \"hunting\" | \"fishing\",\n        status: \"pending\",\n        postedAt: new Date(),\n        userId,\n        imageUrls: safeImageUrls,\n      })\n      .returning();\n\n    if (!row) {\n      res.status(500).json({ error: \"Insert failed\" });\n      return;\n    }\n\n    res.status(201).json({\n      ...row,\n      postedAt: row.postedAt.toISOString(),\n      createdAt: row.createdAt.toISOString(),\n      message: \"Listing submitted for review. It will appear in the Used Market once approved.\",\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Listings: failed to insert used listing\");\n    res.status(500).json({ error: \"Failed to submit listing\" });\n  }\n});\n\nexport default router;\n", "// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// /api/waitlist \u2014 public email waitlist sign-up\n//\n// POST /api/waitlist\n//   Public (no auth required).\n//   Accepts { email }.\n//   Validates email format, deduplicates, stores in DB.\n//   Rate limited: 5 requests per hour per IP.\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nimport { Router, type IRouter, type Request, type Response } from \"express\";\nimport { db, waitlistEmailsTable } from \"@workspace/db\";\n\nconst router: IRouter = Router();\n\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$/;\n\n// \u2500\u2500\u2500 Rate limiter: 5 sign-ups per hour per IP \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst RATE_WINDOW_MS = 60 * 60 * 1000;\nconst RATE_LIMIT = 5;\nconst rateLimitMap = new Map<string, { count: number; windowStart: number }>();\n\nfunction checkRateLimit(ip: string): boolean {\n  const now = Date.now();\n  const entry = rateLimitMap.get(ip);\n  if (!entry || now - entry.windowStart > RATE_WINDOW_MS) {\n    rateLimitMap.set(ip, { count: 1, windowStart: now });\n    return true;\n  }\n  if (entry.count >= RATE_LIMIT) return false;\n  entry.count++;\n  return true;\n}\n\n// \u2500\u2500\u2500 POST /api/waitlist \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nrouter.post(\"/\", async (req: Request, res: Response) => {\n  // Use req.ip which respects the app's trust-proxy setting rather than\n  // the raw x-forwarded-for header that a client could spoof.\n  const ip = req.ip ?? req.socket.remoteAddress ?? \"unknown\";\n\n  if (!checkRateLimit(ip)) {\n    res.status(429).json({ error: \"Too many requests. Please try again later.\" });\n    return;\n  }\n\n  const raw = req.body as Record<string, unknown>;\n  const emailRaw = typeof raw.email === \"string\" ? raw.email.trim() : \"\";\n  if (!emailRaw || emailRaw.length > 254 || !EMAIL_RE.test(emailRaw)) {\n    res.status(400).json({ error: \"A valid email address is required.\" });\n    return;\n  }\n\n  const email = emailRaw.toLowerCase();\n\n  try {\n    await db.insert(waitlistEmailsTable).values({ email });\n    res.status(201).json({ success: true, message: \"You're on the list!\" });\n  } catch (err: unknown) {\n    // Drizzle wraps the PG error; check both the top-level and the cause\n    const anyErr = err as Record<string, unknown>;\n    const cause = anyErr.cause as Record<string, unknown> | undefined;\n    const code = (anyErr.code as string | undefined) ?? (cause?.code as string | undefined);\n    if (code === \"23505\") {\n      res.status(409).json({ error: \"This email is already on the waitlist.\" });\n      return;\n    }\n    req.log?.error({ err }, \"Waitlist: failed to insert email\");\n    res.status(500).json({ error: \"Something went wrong. Please try again.\" });\n  }\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response, type NextFunction } from \"express\";\nimport { getSessionUser, requireAdmin as sharedRequireAdmin } from \"../lib/authMiddleware\";\nimport {\n  createCipheriv,\n  createDecipheriv,\n  randomBytes,\n} from \"node:crypto\";\nimport { getTokenEncryptionKey } from \"../lib/tokenEncryption\";\nimport { db, socialConnectionsTable } from \"@workspace/db\";\nimport { gscCacheTable } from \"@workspace/db/schema\";\nimport { eq, and, lt } from \"drizzle-orm\";\n\nconst router: IRouter = Router();\n\nconst GOOGLE_TOKEN_URL = \"https://oauth2.googleapis.com/token\";\nconst GOOGLE_REVOKE_URL = \"https://oauth2.googleapis.com/revoke\";\nconst GOOGLE_AUTH_URL = \"https://accounts.google.com/o/oauth2/v2/auth\";\nconst GSC_API_BASE = \"https://www.googleapis.com/webmasters/v3\";\nconst GSC_CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour\n\nconst GSC_PLATFORM = \"gsc\";\n\n// \u2500\u2500 Types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface GscStatus {\n  configured: boolean;\n  connectedViaOAuth: boolean;\n  siteUrl: string;\n  indexed: number;\n  errors: number;\n  warnings: number;\n  lastCrawl: string | null;\n  cachedAt: string;\n}\n\ninterface UserPublicMetadata {\n  role?: string;\n}\n\ninterface SitemapContent {\n  type: string;\n  submitted: string;\n  indexed: string;\n}\n\ninterface Sitemap {\n  path: string;\n  lastDownloaded?: string;\n  lastSubmitted?: string;\n  errors?: string;\n  warnings?: string;\n  contents?: SitemapContent[];\n}\n\ninterface SitemapsResponse {\n  sitemap?: Sitemap[];\n}\n\n// \u2500\u2500 Token encryption (same scheme as social.ts) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction encryptToken(plaintext: string): string {\n  const key = getTokenEncryptionKey();\n  const iv = randomBytes(16);\n  const cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n  const enc = Buffer.concat([cipher.update(plaintext, \"utf8\"), cipher.final()]);\n  const tag = cipher.getAuthTag();\n  return `${iv.toString(\"hex\")}:${tag.toString(\"hex\")}:${enc.toString(\"hex\")}`;\n}\n\nfunction decryptToken(stored: string): string {\n  const parts = stored.split(\":\");\n  if (parts.length !== 3) throw new Error(\"Invalid encrypted token format\");\n  const [ivHex, tagHex, encHex] = parts;\n  const key = getTokenEncryptionKey();\n  const iv = Buffer.from(ivHex!, \"hex\");\n  const tag = Buffer.from(tagHex!, \"hex\");\n  const enc = Buffer.from(encHex!, \"hex\");\n  const decipher = createDecipheriv(\"aes-256-gcm\", key, iv);\n  decipher.setAuthTag(tag);\n  return decipher.update(enc).toString(\"utf8\") + decipher.final(\"utf8\");\n}\n\n// \u2500\u2500 CSRF state \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst csrfMap = new Map<string, { userId: string; ts: number }>();\nconst CSRF_TTL_MS = 10 * 60 * 1000;\n\nsetInterval(() => {\n  const now = Date.now();\n  for (const [key, val] of csrfMap) {\n    if (now - val.ts > CSRF_TTL_MS) csrfMap.delete(key);\n  }\n}, 5 * 60 * 1000);\n\n// \u2500\u2500 GSC cache cleanup \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst GSC_CACHE_MAX_AGE_MS = 24 * 60 * 60 * 1000; // 24 hours\n\nasync function deleteStaleGscCacheRows(): Promise<void> {\n  try {\n    const cutoff = new Date(Date.now() - GSC_CACHE_MAX_AGE_MS);\n    await db.delete(gscCacheTable).where(lt(gscCacheTable.fetchedAt, cutoff));\n  } catch {\n    // Non-fatal \u2014 stale rows will be overwritten on next cache write\n  }\n}\n\n// Run once on startup, then every hour\nvoid deleteStaleGscCacheRows();\nsetInterval(() => { void deleteStaleGscCacheRows(); }, 60 * 60 * 1000);\n\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction getCallbackBase(req: Request): string {\n  const explicitBase = process.env[\"OAUTH_CALLBACK_BASE\"]?.trim();\n  if (explicitBase) return explicitBase.replace(/\\/$/, \"\");\n  return `${req.protocol}://${req.hostname}`;\n}\n\nfunction getMetadataRole(metadata: unknown): string {\n  if (metadata && typeof metadata === \"object\" && \"role\" in metadata) {\n    const raw = (metadata as UserPublicMetadata).role;\n    if (typeof raw === \"string\") return raw;\n  }\n  return \"user\";\n}\n\n// \u2500\u2500 Auth helper \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst requireAdmin = sharedRequireAdmin;\n\n// \u2500\u2500 DB cache helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function readDbCache(siteUrl: string): Promise<GscStatus | null> {\n  try {\n    const rows = await db\n      .select()\n      .from(gscCacheTable)\n      .where(eq(gscCacheTable.siteUrl, siteUrl))\n      .limit(1);\n    if (rows.length === 0) return null;\n    const row = rows[0]!;\n    const ageMs = Date.now() - row.fetchedAt.getTime();\n    if (ageMs >= GSC_CACHE_TTL_MS) return null;\n    return JSON.parse(row.dataJson) as GscStatus;\n  } catch {\n    return null;\n  }\n}\n\nasync function writeDbCache(siteUrl: string, data: GscStatus): Promise<void> {\n  try {\n    await db\n      .insert(gscCacheTable)\n      .values({ siteUrl, dataJson: JSON.stringify(data), fetchedAt: new Date() })\n      .onConflictDoUpdate({\n        target: gscCacheTable.siteUrl,\n        set: { dataJson: JSON.stringify(data), fetchedAt: new Date() },\n      });\n  } catch {\n    // Non-fatal \u2014 caller already has the live data to return\n  }\n}\n\nasync function bustDbCache(siteUrl: string): Promise<void> {\n  try {\n    await db.delete(gscCacheTable).where(eq(gscCacheTable.siteUrl, siteUrl));\n  } catch {\n    // Non-fatal\n  }\n}\n\n// \u2500\u2500 Token helper \u2014 env var or DB \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function getOAuthRefreshTokenFromDb(): Promise<string | null> {\n  try {\n    const rows = await db\n      .select()\n      .from(socialConnectionsTable)\n      .where(eq(socialConnectionsTable.platform, GSC_PLATFORM))\n      .limit(1);\n    const conn = rows[0];\n    if (!conn?.refreshToken) return null;\n    return decryptToken(conn.refreshToken);\n  } catch {\n    return null;\n  }\n}\n\nasync function getAccessToken(req: Request): Promise<string | null> {\n  const clientId = process.env[\"GOOGLE_CLIENT_ID\"];\n  const clientSecret = process.env[\"GOOGLE_CLIENT_SECRET\"];\n  if (!clientId || !clientSecret) return null;\n\n  // Prefer env-var refresh token; fall back to DB-stored OAuth token\n  let refreshToken = process.env[\"GSC_REFRESH_TOKEN\"] ?? null;\n  if (!refreshToken) {\n    refreshToken = await getOAuthRefreshTokenFromDb();\n  }\n  if (!refreshToken) return null;\n\n  try {\n    const res = await fetch(GOOGLE_TOKEN_URL, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n      body: new URLSearchParams({\n        client_id: clientId,\n        client_secret: clientSecret,\n        refresh_token: refreshToken,\n        grant_type: \"refresh_token\",\n      }).toString(),\n      signal: AbortSignal.timeout(8000),\n    });\n\n    if (!res.ok) {\n      req.log?.warn({ status: res.status }, \"GSC token refresh failed\");\n      return null;\n    }\n    const data = (await res.json()) as { access_token?: string };\n    return data.access_token ?? null;\n  } catch (err) {\n    req.log?.warn({ err }, \"GSC token refresh threw\");\n    return null;\n  }\n}\n\n// \u2500\u2500 Determine if GSC is configured (env var or DB) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function isGscConfigured(): Promise<{ configured: boolean; viaOAuth: boolean }> {\n  if (process.env[\"GSC_REFRESH_TOKEN\"]) {\n    return { configured: true, viaOAuth: false };\n  }\n  try {\n    const rows = await db\n      .select()\n      .from(socialConnectionsTable)\n      .where(eq(socialConnectionsTable.platform, GSC_PLATFORM))\n      .limit(1);\n    if (rows[0]?.refreshToken) {\n      return { configured: true, viaOAuth: true };\n    }\n  } catch {\n    // ignore DB errors\n  }\n  return { configured: false, viaOAuth: false };\n}\n\n// \u2500\u2500 GET /api/admin/gsc \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/\", requireAdmin, async (req: Request, res: Response): Promise<void> => {\n  const siteUrl = process.env[\"GSC_SITE_URL\"] ?? \"https://hooknbone.com/\";\n\n  // Serve from DB cache if fresh\n  const cached = await readDbCache(siteUrl);\n  if (cached) {\n    res.json(cached);\n    return;\n  }\n\n  const { configured, viaOAuth } = await isGscConfigured();\n\n  // Not configured \u2014 return graceful unconfigured state (do not cache)\n  if (!configured) {\n    const notConfigured: GscStatus = {\n      configured: false,\n      connectedViaOAuth: false,\n      siteUrl,\n      indexed: 0,\n      errors: 0,\n      warnings: 0,\n      lastCrawl: null,\n      cachedAt: new Date().toISOString(),\n    };\n    res.json(notConfigured);\n    return;\n  }\n\n  const accessToken = await getAccessToken(req);\n  if (!accessToken) {\n    res.status(502).json({ error: \"Failed to obtain Google access token\" });\n    return;\n  }\n\n  try {\n    const encodedSite = encodeURIComponent(siteUrl);\n    const sitemapsRes = await fetch(\n      `${GSC_API_BASE}/sites/${encodedSite}/sitemaps`,\n      {\n        headers: { Authorization: `Bearer ${accessToken}` },\n        signal: AbortSignal.timeout(10_000),\n      },\n    );\n\n    if (!sitemapsRes.ok) {\n      req.log?.warn({ status: sitemapsRes.status }, \"GSC sitemaps API error\");\n      res.status(502).json({ error: \"GSC API returned an error\", statusCode: sitemapsRes.status });\n      return;\n    }\n\n    const body = (await sitemapsRes.json()) as SitemapsResponse;\n    const sitemaps = body.sitemap ?? [];\n\n    let indexed = 0;\n    let errors = 0;\n    let warnings = 0;\n    let lastCrawl: string | null = null;\n\n    for (const sm of sitemaps) {\n      errors += parseInt(sm.errors ?? \"0\", 10);\n      warnings += parseInt(sm.warnings ?? \"0\", 10);\n      for (const c of sm.contents ?? []) {\n        indexed += parseInt(c.indexed ?? \"0\", 10);\n      }\n      if (sm.lastDownloaded) {\n        if (!lastCrawl || sm.lastDownloaded > lastCrawl) {\n          lastCrawl = sm.lastDownloaded;\n        }\n      }\n    }\n\n    const status: GscStatus = {\n      configured: true,\n      connectedViaOAuth: viaOAuth,\n      siteUrl,\n      indexed,\n      errors,\n      warnings,\n      lastCrawl,\n      cachedAt: new Date().toISOString(),\n    };\n\n    await writeDbCache(siteUrl, status);\n    res.json(status);\n  } catch (err) {\n    req.log?.error({ err }, \"GSC status fetch failed\");\n    res.status(500).json({ error: \"Internal server error\" });\n  }\n});\n\n// \u2500\u2500 GET /api/admin/gsc/connect \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/connect\", requireAdmin, (req: Request, res: Response) => {\n  const clientId = process.env[\"GOOGLE_CLIENT_ID\"];\n  if (!clientId) {\n    res.status(503).json({ error: \"Google OAuth is not configured on this server (GOOGLE_CLIENT_ID missing)\" });\n    return;\n  }\n\n  const userId = getSessionUser(req)!.userId;\n  const state = randomBytes(24).toString(\"hex\");\n  csrfMap.set(state, { userId, ts: Date.now() });\n\n  const redirectUri = `${getCallbackBase(req)}/api/admin/gsc/callback`;\n  const params = new URLSearchParams({\n    client_id: clientId,\n    redirect_uri: redirectUri,\n    response_type: \"code\",\n    scope: \"https://www.googleapis.com/auth/webmasters.readonly\",\n    access_type: \"offline\",\n    prompt: \"consent\",\n    state,\n  });\n\n  res.json({ url: `${GOOGLE_AUTH_URL}?${params}`, redirectUri });\n});\n\n// \u2500\u2500 GET /api/admin/gsc/callback \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.get(\"/callback\", async (req: Request, res: Response) => {\n  const { code, state, error } = req.query as Record<string, string | undefined>;\n  const deepLink = \"hook-n-bone://admin/gsc/callback\";\n\n  if (error || !code || !state) {\n    res.redirect(`${deepLink}?success=false&error=${encodeURIComponent(error ?? \"missing_params\")}`);\n    return;\n  }\n\n  const entry = csrfMap.get(state);\n  if (!entry || Date.now() - entry.ts > CSRF_TTL_MS) {\n    res.redirect(`${deepLink}?success=false&error=invalid_state`);\n    return;\n  }\n  csrfMap.delete(state);\n  const { userId } = entry;\n\n  const clientId = process.env[\"GOOGLE_CLIENT_ID\"];\n  const clientSecret = process.env[\"GOOGLE_CLIENT_SECRET\"];\n  if (!clientId || !clientSecret) {\n    res.redirect(`${deepLink}?success=false&error=server_misconfigured`);\n    return;\n  }\n\n  const redirectUri = `${getCallbackBase(req)}/api/admin/gsc/callback`;\n\n  try {\n    const tokenRes = await fetch(GOOGLE_TOKEN_URL, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n      body: new URLSearchParams({\n        code,\n        client_id: clientId,\n        client_secret: clientSecret,\n        redirect_uri: redirectUri,\n        grant_type: \"authorization_code\",\n      }).toString(),\n      signal: AbortSignal.timeout(10_000),\n    });\n\n    if (!tokenRes.ok) {\n      const body = await tokenRes.text().catch(() => \"\");\n      req.log?.error({ status: tokenRes.status, body: body.slice(0, 200) }, \"GSC token exchange failed\");\n      res.redirect(`${deepLink}?success=false&error=token_exchange_failed`);\n      return;\n    }\n\n    const tokens = (await tokenRes.json()) as {\n      access_token: string;\n      refresh_token?: string;\n      expires_in: number;\n    };\n\n    if (!tokens.refresh_token) {\n      req.log?.warn(\"GSC token exchange returned no refresh_token \u2014 user may have already granted access previously\");\n    }\n\n    const expiresAt = new Date(Date.now() + tokens.expires_in * 1000);\n    const encAccess = encryptToken(tokens.access_token);\n    const encRefresh = tokens.refresh_token ? encryptToken(tokens.refresh_token) : null;\n\n    await db\n      .insert(socialConnectionsTable)\n      .values({\n        userId,\n        platform: GSC_PLATFORM,\n        accessToken: encAccess,\n        refreshToken: encRefresh,\n        expiresAt,\n        channelId: null,\n        channelName: null,\n        channelAvatar: null,\n      })\n      .onConflictDoUpdate({\n        target: [socialConnectionsTable.userId, socialConnectionsTable.platform],\n        set: {\n          accessToken: encAccess,\n          ...(encRefresh ? { refreshToken: encRefresh } : {}),\n          expiresAt,\n          updatedAt: new Date(),\n        },\n      });\n\n    // Bust the DB cache so the next GET / fetches live data\n    const siteUrl = process.env[\"GSC_SITE_URL\"] ?? \"https://hooknbone.com/\";\n    await bustDbCache(siteUrl);\n\n    res.redirect(`${deepLink}?success=true`);\n  } catch (err) {\n    req.log?.error({ err }, \"GSC OAuth callback error\");\n    res.redirect(`${deepLink}?success=false&error=server_error`);\n  }\n});\n\n// \u2500\u2500 DELETE /api/admin/gsc/disconnect \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nrouter.delete(\"/disconnect\", requireAdmin, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n\n  try {\n    // Attempt to find this admin's GSC connection first; fall back to any GSC connection\n    let rows = await db\n      .select()\n      .from(socialConnectionsTable)\n      .where(\n        and(\n          eq(socialConnectionsTable.userId, userId),\n          eq(socialConnectionsTable.platform, GSC_PLATFORM),\n        ),\n      );\n\n    if (!rows.length) {\n      // Another admin may have connected GSC \u2014 still allow disconnect\n      rows = await db\n        .select()\n        .from(socialConnectionsTable)\n        .where(eq(socialConnectionsTable.platform, GSC_PLATFORM))\n        .limit(1);\n    }\n\n    const conn = rows[0];\n    if (!conn) {\n      res.status(404).json({ error: \"No GSC connection found\" });\n      return;\n    }\n\n    // Revoke the access token with Google (best-effort)\n    try {\n      const token = decryptToken(conn.accessToken);\n      await fetch(\n        `${GOOGLE_REVOKE_URL}?token=${encodeURIComponent(token)}`,\n        { method: \"POST\", headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" }, signal: AbortSignal.timeout(5000) },\n      );\n    } catch {\n      req.log?.warn(\"GSC token revocation request failed (non-fatal)\");\n    }\n\n    await db\n      .delete(socialConnectionsTable)\n      .where(\n        and(\n          eq(socialConnectionsTable.userId, conn.userId),\n          eq(socialConnectionsTable.platform, GSC_PLATFORM),\n        ),\n      );\n\n    // Bust the DB cache so next GET / reflects the disconnected state\n    const siteUrl = process.env[\"GSC_SITE_URL\"] ?? \"https://hooknbone.com/\";\n    await bustDbCache(siteUrl);\n\n    res.json({ success: true });\n  } catch (err) {\n    req.log?.error({ err }, \"GSC disconnect error\");\n    res.status(500).json({ error: \"Failed to disconnect GSC account\" });\n  }\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { getSessionUser } from \"../lib/authMiddleware\";\nimport { db, userFavoriteJurisdictionsTable } from \"@workspace/db\";\nimport { eq, and } from \"drizzle-orm\";\nimport { getGemini } from \"../lib/ai\";\n\nconst router: IRouter = Router();\n\nfunction msToMph(ms: number): number {\n  return Math.round(ms * 2.237);\n}\n\nfunction cToF(c: number): number {\n  return Math.round(c * (9 / 5) + 32);\n}\n\nconst COMPASS = [\"N\", \"NNE\", \"NE\", \"ENE\", \"E\", \"ESE\", \"SE\", \"SSE\", \"S\", \"SSW\", \"SW\", \"WSW\", \"W\", \"WNW\", \"NW\", \"NNW\"];\n\nfunction degToCompass(deg: number): string {\n  return COMPASS[Math.round(deg / 22.5) % 16] ?? \"\u2014\";\n}\n\nfunction weatherCodeLabel(code: number): string {\n  if (code === 0) return \"Clear\";\n  if (code <= 3) return \"Cloudy\";\n  if (code <= 49) return \"Fog\";\n  if (code <= 67) return \"Rain\";\n  if (code <= 77) return \"Snow\";\n  if (code <= 82) return \"Showers\";\n  if (code <= 86) return \"Snow showers\";\n  return \"Storm\";\n}\n\n// \u2500\u2500 GET /api/warden/weather \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nrouter.get(\"/weather\", async (req: Request, res: Response) => {\n  const lat = Number(req.query.lat);\n  const lon = Number(req.query.lon);\n  if (!Number.isFinite(lat) || !Number.isFinite(lon)) {\n    res.status(400).json({ error: \"lat and lon are required\" });\n    return;\n  }\n\n  const apiKey = process.env.WEATHER_API_KEY?.trim();\n  const openMeteoUrl =\n    `https://api.open-meteo.com/v1/forecast?latitude=${lat}&longitude=${lon}` +\n    `&daily=weather_code,temperature_2m_max,temperature_2m_min,precipitation_probability_max` +\n    `&current=temperature_2m,wind_speed_10m,wind_direction_10m,precipitation,weather_code` +\n    `&forecast_days=5&timezone=auto`;\n\n  try {\n    type WeatherApiPayload = {\n      current?: {\n        temp_c?: number;\n        wind_kph?: number;\n        wind_degree?: number;\n        precip_mm?: number;\n      };\n      forecast?: {\n        forecastday?: Array<{\n          date: string;\n          day: { maxtemp_c: number; mintemp_c: number; daily_chance_of_rain: number; condition?: { text?: string } };\n        }>;\n      };\n    };\n\n    let payload: WeatherApiPayload | null = null;\n\n    if (apiKey) {\n      const wxRes = await fetch(\n        `https://api.weatherapi.com/v1/forecast.json?key=${encodeURIComponent(apiKey)}&q=${lat},${lon}&days=5`,\n      );\n      if (wxRes.ok) payload = (await wxRes.json()) as WeatherApiPayload;\n    }\n\n    if (payload?.forecast?.forecastday) {\n      const current = payload.current;\n      res.json({\n        lat,\n        lon,\n        current: {\n          tempF: cToF(current?.temp_c ?? 0),\n          windMph: Math.round((current?.wind_kph ?? 0) * 0.621371),\n          windDir: degToCompass(current?.wind_degree ?? 0),\n          precipMm: current?.precip_mm ?? 0,\n        },\n        forecast: payload.forecast.forecastday.slice(0, 5).map((d) => ({\n          date: d.date,\n          highF: cToF(d.day.maxtemp_c),\n          lowF: cToF(d.day.mintemp_c),\n          precipPct: d.day.daily_chance_of_rain,\n          weatherCode: 0,\n          label: d.day.condition?.text ?? \"\u2014\",\n        })),\n      });\n      return;\n    }\n\n    const meteoRes = await fetch(openMeteoUrl);\n    if (!meteoRes.ok) {\n      res.status(502).json({ error: \"Weather provider unavailable\" });\n      return;\n    }\n\n    const json = (await meteoRes.json()) as {\n      current?: {\n        temperature_2m?: number;\n        wind_speed_10m?: number;\n        wind_direction_10m?: number;\n        precipitation?: number;\n        weather_code?: number;\n      };\n      daily?: {\n        time?: string[];\n        weather_code?: number[];\n        temperature_2m_max?: number[];\n        temperature_2m_min?: number[];\n        precipitation_probability_max?: number[];\n      };\n    };\n\n    const daily = json.daily ?? {};\n    res.json({\n      lat,\n      lon,\n      current: {\n        tempF: cToF(json.current?.temperature_2m ?? 0),\n        windMph: msToMph(json.current?.wind_speed_10m ?? 0),\n        windDir: degToCompass(json.current?.wind_direction_10m ?? 0),\n        precipMm: json.current?.precipitation ?? 0,\n      },\n      forecast: (daily.time ?? []).slice(0, 5).map((date, i) => ({\n        date,\n        highF: cToF(daily.temperature_2m_max?.[i] ?? 0),\n        lowF: cToF(daily.temperature_2m_min?.[i] ?? 0),\n        precipPct: daily.precipitation_probability_max?.[i] ?? 0,\n        weatherCode: daily.weather_code?.[i] ?? 0,\n        label: weatherCodeLabel(daily.weather_code?.[i] ?? 0),\n      })),\n    });\n  } catch {\n    res.status(502).json({ error: \"Weather fetch failed\" });\n  }\n});\n\n// \u2500\u2500 POST /api/warden/summarize \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction fallbackBullets(rawText: string): string[] {\n  const bullets = rawText\n    .split(/[.!?]\\s+/)\n    .filter(Boolean)\n    .slice(0, 5)\n    .map((s) => s.trim());\n  return bullets.length ? bullets : [rawText.slice(0, 180)];\n}\n\nrouter.post(\"/summarize\", async (req: Request, res: Response) => {\n  const body = req.body as { rawText?: unknown; locationName?: unknown };\n  const rawText = typeof body.rawText === \"string\" ? body.rawText.trim() : \"\";\n  const locationName = typeof body.locationName === \"string\" ? body.locationName.trim() : \"Location\";\n\n  if (!rawText || rawText.length < 20) {\n    res.status(400).json({ error: \"rawText is required\" });\n    return;\n  }\n\n  if (!process.env.GEMINI_API_KEY?.trim()) {\n    res.json({ bullets: fallbackBullets(rawText), source: \"fallback\" });\n    return;\n  }\n\n  try {\n    const model = getGemini().getGenerativeModel({ model: \"gemini-2.5-flash\" });\n    const prompt =\n      `You are a hunting and fishing regulations analyst. Summarize the following ${locationName} regulation text into exactly 5 short, actionable bullet points for field use. Use plain English. No intro.\\n\\n${rawText.slice(0, 6000)}`;\n    const result = await model.generateContent(prompt);\n    const text = result.response.text();\n    const bullets = text\n      .split(\"\\n\")\n      .map((line) => line.replace(/^[-*\u2022\\d.)]+\\s*/, \"\").trim())\n      .filter((line) => line.length > 8)\n      .slice(0, 5);\n    res.json({ bullets: bullets.length ? bullets : [text.trim()], source: \"gemini\" });\n  } catch {\n    // Quota/rate limits \u2014 still return usable bullets for the UI.\n    res.json({ bullets: fallbackBullets(rawText), source: \"fallback\" });\n  }\n});\n\n// \u2500\u2500 GET /api/warden/favorites \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Returns the authenticated user's favorite jurisdiction names.\nrouter.get(\"/favorites\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Unauthorized\" });\n    return;\n  }\n  const rows = await db\n    .select({ jurisdictionName: userFavoriteJurisdictionsTable.jurisdictionName })\n    .from(userFavoriteJurisdictionsTable)\n    .where(eq(userFavoriteJurisdictionsTable.userId, userId));\n  res.json({ favorites: rows.map(r => r.jurisdictionName) });\n});\n\n// \u2500\u2500 POST /api/warden/favorites \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Idempotently adds a jurisdiction to the user's favorites.\nrouter.post(\"/favorites\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Unauthorized\" });\n    return;\n  }\n  const body = req.body as { jurisdictionName?: unknown };\n  const jurisdictionName = typeof body.jurisdictionName === \"string\" ? body.jurisdictionName.trim() : \"\";\n  if (!jurisdictionName || jurisdictionName.length > 200) {\n    res.status(400).json({ error: \"Invalid jurisdictionName\" });\n    return;\n  }\n  await db\n    .insert(userFavoriteJurisdictionsTable)\n    .values({ userId, jurisdictionName })\n    .onConflictDoNothing();\n  res.status(201).json({ ok: true });\n});\n\n// \u2500\u2500 DELETE /api/warden/favorites/:name \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Removes a jurisdiction from the user's favorites.\nrouter.delete(\"/favorites/:name\", async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)?.userId;\n  if (!userId) {\n    res.status(401).json({ error: \"Unauthorized\" });\n    return;\n  }\n  const rawName = req.params[\"name\"];\n  const name = typeof rawName === \"string\" ? decodeURIComponent(rawName).trim() : \"\";\n  if (!name) {\n    res.status(400).json({ error: \"Missing jurisdiction name\" });\n    return;\n  }\n  await db\n    .delete(userFavoriteJurisdictionsTable)\n    .where(\n      and(\n        eq(userFavoriteJurisdictionsTable.userId, userId),\n        eq(userFavoriteJurisdictionsTable.jurisdictionName, name),\n      ),\n    );\n  res.json({ ok: true });\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { db } from \"@workspace/db\";\nimport {\n  conversationsTable,\n  messagesTable,\n  conversationReadsTable,\n  user as usersTable,\n} from \"@workspace/db/schema\";\nimport { and, desc, eq, gt, lt, ne, or, count } from \"drizzle-orm\";\nimport { getSessionUser, requireAuth } from \"../lib/authMiddleware\";\n\nconst router: IRouter = Router();\n\nconst messageRateMap = new Map<string, number[]>();\nconst MESSAGE_RATE_LIMIT = 60;\nconst MESSAGE_RATE_WINDOW_MS = 3_600_000;\n\nfunction isMessageRateLimited(userId: string): boolean {\n  const now = Date.now();\n  const hits = (messageRateMap.get(userId) ?? []).filter(\n    (t) => now - t < MESSAGE_RATE_WINDOW_MS,\n  );\n  hits.push(now);\n  messageRateMap.set(userId, hits);\n  return hits.length > MESSAGE_RATE_LIMIT;\n}\n\nfunction canonicalPair(userId: string, otherUserId: string): [string, string] {\n  return userId < otherUserId ? [userId, otherUserId] : [otherUserId, userId];\n}\n\nfunction formatRelativeTime(date: Date | null): string {\n  if (!date) return \"\";\n  const diffMs = Date.now() - date.getTime();\n  const mins = Math.floor(diffMs / 60_000);\n  if (mins < 1) return \"Just now\";\n  if (mins < 60) return `${mins}m ago`;\n  const hrs = Math.floor(mins / 60);\n  if (hrs < 24) return `${hrs}h ago`;\n  const days = Math.floor(hrs / 24);\n  return `${days}d ago`;\n}\n\nasync function assertConversationMember(\n  conversationId: string,\n  userId: string,\n): Promise<typeof conversationsTable.$inferSelect | null> {\n  const [row] = await db\n    .select()\n    .from(conversationsTable)\n    .where(eq(conversationsTable.id, conversationId))\n    .limit(1);\n  if (!row) return null;\n  if (row.userAId !== userId && row.userBId !== userId) return null;\n  return row;\n}\n\nrouter.get(\"/\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n\n  try {\n    const rows = await db\n      .select()\n      .from(conversationsTable)\n      .where(\n        or(\n          eq(conversationsTable.userAId, userId),\n          eq(conversationsTable.userBId, userId),\n        ),\n      )\n      .orderBy(desc(conversationsTable.lastMessageAt))\n      .limit(100);\n\n    const enriched = await Promise.all(\n      rows.map(async (conv) => {\n        const otherUserId = conv.userAId === userId ? conv.userBId : conv.userAId;\n        const [otherUser] = await db\n          .select({ name: usersTable.name, email: usersTable.email })\n          .from(usersTable)\n          .where(eq(usersTable.id, otherUserId))\n          .limit(1);\n\n        const [lastMsg] = await db\n          .select({ text: messagesTable.text })\n          .from(messagesTable)\n          .where(eq(messagesTable.conversationId, conv.id))\n          .orderBy(desc(messagesTable.createdAt))\n          .limit(1);\n\n        const [readRow] = await db\n          .select({ lastReadAt: conversationReadsTable.lastReadAt })\n          .from(conversationReadsTable)\n          .where(\n            and(\n              eq(conversationReadsTable.conversationId, conv.id),\n              eq(conversationReadsTable.userId, userId),\n            ),\n          )\n          .limit(1);\n\n        const lastReadAt = readRow?.lastReadAt ?? new Date(0);\n        const [unreadRow] = await db\n          .select({ cnt: count(messagesTable.id) })\n          .from(messagesTable)\n          .where(\n            and(\n              eq(messagesTable.conversationId, conv.id),\n              gt(messagesTable.createdAt, lastReadAt),\n              ne(messagesTable.senderId, userId),\n            ),\n          );\n\n        return {\n          id: conv.id,\n          type: conv.type,\n          otherUserId,\n          otherUserName: otherUser?.name ?? otherUser?.email?.split(\"@\")[0] ?? \"User\",\n          lastMessage: lastMsg?.text ?? \"\",\n          timestamp: formatRelativeTime(conv.lastMessageAt),\n          unread: Number(unreadRow?.cnt ?? 0),\n          isOutfitter: conv.type === \"outfitter\",\n        };\n      }),\n    );\n\n    res.json({ conversations: enriched });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to list conversations\");\n    res.status(500).json({ error: \"Failed to list conversations\" });\n  }\n});\n\nrouter.post(\"/\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const body = req.body as { otherUserId?: string; type?: string };\n  const otherUserId = body.otherUserId?.trim();\n  if (!otherUserId || otherUserId === userId) {\n    res.status(400).json({ error: \"otherUserId is required\" });\n    return;\n  }\n\n  const type =\n    body.type === \"support\" || body.type === \"outfitter\" ? body.type : \"dm\";\n  const [userAId, userBId] = canonicalPair(userId, otherUserId);\n\n  try {\n    const [existing] = await db\n      .select()\n      .from(conversationsTable)\n      .where(\n        and(\n          eq(conversationsTable.userAId, userAId),\n          eq(conversationsTable.userBId, userBId),\n        ),\n      )\n      .limit(1);\n\n    if (existing) {\n      res.json({ conversation: { id: existing.id, type: existing.type } });\n      return;\n    }\n\n    const [created] = await db\n      .insert(conversationsTable)\n      .values({ type, userAId, userBId })\n      .returning();\n\n    res.status(201).json({ conversation: { id: created!.id, type: created!.type } });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to create conversation\");\n    res.status(500).json({ error: \"Failed to create conversation\" });\n  }\n});\n\nrouter.get(\"/:id/messages\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const conversationId = (req.params as { id: string }).id;\n  const before = typeof req.query.before === \"string\" ? req.query.before : undefined;\n\n  const conv = await assertConversationMember(conversationId, userId);\n  if (!conv) {\n    res.status(404).json({ error: \"Conversation not found\" });\n    return;\n  }\n\n  try {\n    const conditions = [eq(messagesTable.conversationId, conversationId)];\n    if (before) {\n      const beforeDate = new Date(before);\n      if (!Number.isNaN(beforeDate.getTime())) {\n        conditions.push(lt(messagesTable.createdAt, beforeDate));\n      }\n    }\n\n    const rows = await db\n      .select()\n      .from(messagesTable)\n      .where(and(...conditions))\n      .orderBy(desc(messagesTable.createdAt))\n      .limit(50);\n\n    const messages = rows.reverse().map((m) => ({\n      id: m.id,\n      senderId: m.senderId,\n      text: m.text,\n      timestamp: m.createdAt.toLocaleTimeString(\"en-US\", {\n        hour: \"numeric\",\n        minute: \"2-digit\",\n        hour12: true,\n      }),\n      isOwn: m.senderId === userId,\n    }));\n\n    res.json({ messages });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to load messages\");\n    res.status(500).json({ error: \"Failed to load messages\" });\n  }\n});\n\nrouter.post(\"/:id/messages\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  if (isMessageRateLimited(userId)) {\n    res.status(429).json({ error: \"Too many messages. Try again later.\" });\n    return;\n  }\n\n  const conversationId = (req.params as { id: string }).id;\n  const text = (req.body as { text?: string }).text?.trim();\n  if (!text || text.length > 2000) {\n    res.status(400).json({ error: \"Message text required (max 2000 chars)\" });\n    return;\n  }\n\n  const conv = await assertConversationMember(conversationId, userId);\n  if (!conv) {\n    res.status(404).json({ error: \"Conversation not found\" });\n    return;\n  }\n\n  try {\n    const [inserted] = await db\n      .insert(messagesTable)\n      .values({ conversationId, senderId: userId, text })\n      .returning();\n\n    await db\n      .update(conversationsTable)\n      .set({ lastMessageAt: inserted!.createdAt })\n      .where(eq(conversationsTable.id, conversationId));\n\n    res.status(201).json({\n      message: {\n        id: inserted!.id,\n        senderId: inserted!.senderId,\n        text: inserted!.text,\n        timestamp: inserted!.createdAt.toLocaleTimeString(\"en-US\", {\n          hour: \"numeric\",\n          minute: \"2-digit\",\n          hour12: true,\n        }),\n        isOwn: true,\n      },\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to send message\");\n    res.status(500).json({ error: \"Failed to send message\" });\n  }\n});\n\nrouter.post(\"/:id/read\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const conversationId = (req.params as { id: string }).id;\n\n  const conv = await assertConversationMember(conversationId, userId);\n  if (!conv) {\n    res.status(404).json({ error: \"Conversation not found\" });\n    return;\n  }\n\n  try {\n    await db\n      .insert(conversationReadsTable)\n      .values({\n        conversationId,\n        userId,\n        lastReadAt: new Date(),\n      })\n      .onConflictDoUpdate({\n        target: [conversationReadsTable.conversationId, conversationReadsTable.userId],\n        set: { lastReadAt: new Date() },\n      });\n\n    res.json({ ok: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to mark conversation read\");\n    res.status(500).json({ error: \"Failed to mark read\" });\n  }\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { db } from \"@workspace/db\";\nimport { friendshipsTable, user as usersTable } from \"@workspace/db/schema\";\nimport { and, eq, ne, or } from \"drizzle-orm\";\nimport { getSessionUser, requireAuth } from \"../lib/authMiddleware\";\n\nconst router: IRouter = Router();\n\ntype FriendStatus = \"friend\" | \"pending_sent\" | \"pending_received\" | \"suggested\";\n\nfunction canonicalPair(userId: string, otherUserId: string): [string, string] {\n  return userId < otherUserId ? [userId, otherUserId] : [otherUserId, userId];\n}\n\nrouter.get(\"/discover\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n\n  try {\n    const rows = await db\n      .select({\n        id: usersTable.id,\n        name: usersTable.name,\n        email: usersTable.email,\n        image: usersTable.image,\n      })\n      .from(usersTable)\n      .where(ne(usersTable.id, userId))\n      .limit(30);\n\n    const existing = await db\n      .select()\n      .from(friendshipsTable)\n      .where(\n        or(\n          eq(friendshipsTable.userAId, userId),\n          eq(friendshipsTable.userBId, userId),\n        ),\n      );\n\n    const statusByOther = new Map<string, FriendStatus>();\n    for (const row of existing) {\n      const otherId = row.userAId === userId ? row.userBId : row.userAId;\n      if (row.status === \"accepted\") {\n        statusByOther.set(otherId, \"friend\");\n      } else if (row.status === \"pending\") {\n        statusByOther.set(\n          otherId,\n          row.requestedById === userId ? \"pending_sent\" : \"pending_received\",\n        );\n      }\n    }\n\n    res.json({\n      users: rows.map((u) => ({\n        id: u.id,\n        name: u.name ?? \"User\",\n        handle: u.email ? `@${u.email.split(\"@\")[0]}` : \"@user\",\n        status: statusByOther.get(u.id) ?? \"suggested\",\n        avatarUrl: u.image ?? null,\n      })),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to discover users\");\n    res.status(500).json({ error: \"Failed to discover users\" });\n  }\n});\n\nrouter.get(\"/\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n\n  try {\n    const rows = await db\n      .select()\n      .from(friendshipsTable)\n      .where(\n        or(\n          eq(friendshipsTable.userAId, userId),\n          eq(friendshipsTable.userBId, userId),\n        ),\n      )\n      .limit(200);\n\n    const friends = await Promise.all(\n      rows.map(async (row) => {\n        const otherUserId = row.userAId === userId ? row.userBId : row.userAId;\n        const [other] = await db\n          .select({\n            id: usersTable.id,\n            name: usersTable.name,\n            email: usersTable.email,\n            image: usersTable.image,\n          })\n          .from(usersTable)\n          .where(eq(usersTable.id, otherUserId))\n          .limit(1);\n\n        let status: \"friend\" | \"pending_sent\" | \"pending_received\" = \"friend\";\n        if (row.status === \"pending\") {\n          status =\n            row.requestedById === userId ? \"pending_sent\" : \"pending_received\";\n        }\n\n        return {\n          id: otherUserId,\n          name: other?.name ?? \"User\",\n          handle: other?.email ? `@${other.email.split(\"@\")[0]}` : \"@user\",\n          status,\n          avatarUrl: other?.image ?? null,\n        };\n      }),\n    );\n\n    res.json({ friends });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to list friends\");\n    res.status(500).json({ error: \"Failed to list friends\" });\n  }\n});\n\nrouter.post(\"/request\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const otherUserId = (req.body as { otherUserId?: string }).otherUserId?.trim();\n  if (!otherUserId || otherUserId === userId) {\n    res.status(400).json({ error: \"otherUserId is required\" });\n    return;\n  }\n\n  const [userAId, userBId] = canonicalPair(userId, otherUserId);\n\n  try {\n    const [existing] = await db\n      .select()\n      .from(friendshipsTable)\n      .where(\n        and(\n          eq(friendshipsTable.userAId, userAId),\n          eq(friendshipsTable.userBId, userBId),\n        ),\n      )\n      .limit(1);\n\n    if (existing) {\n      res.json({ friendship: { id: existing.id, status: existing.status } });\n      return;\n    }\n\n    const [created] = await db\n      .insert(friendshipsTable)\n      .values({\n        userAId,\n        userBId,\n        status: \"pending\",\n        requestedById: userId,\n      })\n      .returning();\n\n    res.status(201).json({ friendship: { id: created!.id, status: created!.status } });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to send friend request\");\n    res.status(500).json({ error: \"Failed to send friend request\" });\n  }\n});\n\nrouter.post(\"/:id/accept\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const otherUserId = (req.params as { id: string }).id;\n\n  try {\n    const [userAId, userBId] = canonicalPair(userId, otherUserId);\n    const [updated] = await db\n      .update(friendshipsTable)\n      .set({ status: \"accepted\" })\n      .where(\n        and(\n          eq(friendshipsTable.userAId, userAId),\n          eq(friendshipsTable.userBId, userBId),\n          eq(friendshipsTable.status, \"pending\"),\n          ne(friendshipsTable.requestedById, userId),\n        ),\n      )\n      .returning();\n\n    if (!updated) {\n      res.status(404).json({ error: \"Friend request not found\" });\n      return;\n    }\n\n    res.json({ ok: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to accept friend request\");\n    res.status(500).json({ error: \"Failed to accept friend request\" });\n  }\n});\n\nrouter.post(\"/:id/decline\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const otherUserId = (req.params as { id: string }).id;\n\n  try {\n    const [userAId, userBId] = canonicalPair(userId, otherUserId);\n    await db\n      .delete(friendshipsTable)\n      .where(\n        and(\n          eq(friendshipsTable.userAId, userAId),\n          eq(friendshipsTable.userBId, userBId),\n          eq(friendshipsTable.status, \"pending\"),\n        ),\n      );\n\n    res.json({ ok: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to decline friend request\");\n    res.status(500).json({ error: \"Failed to decline friend request\" });\n  }\n});\n\nrouter.delete(\"/:id\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const otherUserId = (req.params as { id: string }).id;\n\n  try {\n    const [userAId, userBId] = canonicalPair(userId, otherUserId);\n    await db\n      .delete(friendshipsTable)\n      .where(\n        and(\n          eq(friendshipsTable.userAId, userAId),\n          eq(friendshipsTable.userBId, userBId),\n        ),\n      );\n\n    res.json({ ok: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to remove friend\");\n    res.status(500).json({ error: \"Failed to remove friend\" });\n  }\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport {\n  db,\n  scraperHashtagsTable,\n  scraperPendingVideosTable,\n  userVideosTable,\n} from \"@workspace/db\";\nimport { user as authUserTable } from \"@workspace/db/schema\";\nimport { and, desc, eq } from \"drizzle-orm\";\nimport { getSessionUser, requireAdmin, requireModerator } from \"../lib/authMiddleware\";\nimport {\n  fetchHashtagRecentMedia,\n  InstagramScraperError,\n  INSTAGRAM_HASHTAG_SEARCH_PATH,\n  INSTAGRAM_RAPIDAPI_HOST,\n  normalizeHashtag,\n} from \"../lib/instagramScraper\";\nimport { ingestHashtagMedia } from \"../lib/instagramScraperIngest\";\nimport { runInstagramScraperCycle } from \"../jobs/instagramScraperJob\";\nimport { findExistingVideoByUrl } from \"../lib/videoDuplicateGuard\";\nimport {\n  auditIngestionContent,\n  buildIngestionAuditText,\n  classifyIngestionCategory,\n} from \"../lib/ingestion/contentGatekeeper\";\n\nconst router: IRouter = Router();\n\nrouter.get(\"/status\", requireModerator, (_req, res) => {\n  res.json({\n    configured: Boolean(process.env.RAPIDAPI_KEY?.trim()),\n    agentEnabled: process.env.SCRAPER_AGENT_ENABLED !== \"false\",\n    host: process.env.RAPIDAPI_INSTAGRAM_HOST?.trim() || INSTAGRAM_RAPIDAPI_HOST,\n    path:\n      process.env.RAPIDAPI_INSTAGRAM_HASHTAG_PATH?.trim() || INSTAGRAM_HASHTAG_SEARCH_PATH,\n  });\n});\n\nrouter.get(\"/hashtags\", requireModerator, async (_req, res) => {\n  try {\n    const rows = await db\n      .select()\n      .from(scraperHashtagsTable)\n      .orderBy(desc(scraperHashtagsTable.createdAt));\n    res.json({ hashtags: rows });\n  } catch (err) {\n    _req.log?.error({ err }, \"Scraper: failed to list hashtags\");\n    res.status(500).json({ error: \"Failed to load scraper hashtags\" });\n  }\n});\n\nrouter.post(\"/hashtags\", requireAdmin, async (req, res) => {\n  const body = (req.body ?? {}) as { hashtag?: unknown; enabled?: unknown };\n  const hashtag = normalizeHashtag(typeof body.hashtag === \"string\" ? body.hashtag : \"\");\n  if (!hashtag) {\n    res.status(400).json({ error: \"hashtag is required\" });\n    return;\n  }\n\n  const enabled = body.enabled !== false;\n\n  try {\n    const [row] = await db\n      .insert(scraperHashtagsTable)\n      .values({ hashtag, enabled })\n      .onConflictDoUpdate({\n        target: scraperHashtagsTable.hashtag,\n        set: { enabled },\n      })\n      .returning();\n\n    res.status(201).json(row);\n  } catch (err) {\n    req.log?.error({ err }, \"Scraper: failed to add hashtag\");\n    res.status(500).json({ error: \"Failed to add hashtag\" });\n  }\n});\n\nrouter.patch(\"/hashtags/:id\", requireAdmin, async (req, res) => {\n  const id = Number.parseInt(String(req.params.id), 10);\n  if (!Number.isFinite(id)) {\n    res.status(400).json({ error: \"Invalid hashtag id\" });\n    return;\n  }\n\n  const body = (req.body ?? {}) as { enabled?: unknown };\n  if (typeof body.enabled !== \"boolean\") {\n    res.status(400).json({ error: \"enabled boolean is required\" });\n    return;\n  }\n\n  try {\n    const [row] = await db\n      .update(scraperHashtagsTable)\n      .set({ enabled: body.enabled })\n      .where(eq(scraperHashtagsTable.id, id))\n      .returning();\n\n    if (!row) {\n      res.status(404).json({ error: \"Hashtag not found\" });\n      return;\n    }\n    res.json(row);\n  } catch (err) {\n    req.log?.error({ err }, \"Scraper: failed to update hashtag\");\n    res.status(500).json({ error: \"Failed to update hashtag\" });\n  }\n});\n\nrouter.delete(\"/hashtags/:id\", requireAdmin, async (req, res) => {\n  const id = Number.parseInt(String(req.params.id), 10);\n  if (!Number.isFinite(id)) {\n    res.status(400).json({ error: \"Invalid hashtag id\" });\n    return;\n  }\n\n  try {\n    const [row] = await db\n      .delete(scraperHashtagsTable)\n      .where(eq(scraperHashtagsTable.id, id))\n      .returning({ id: scraperHashtagsTable.id });\n\n    if (!row) {\n      res.status(404).json({ error: \"Hashtag not found\" });\n      return;\n    }\n    res.json({ ok: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Scraper: failed to delete hashtag\");\n    res.status(500).json({ error: \"Failed to delete hashtag\" });\n  }\n});\n\nrouter.get(\"/pending\", requireModerator, async (req, res) => {\n  const limitRaw = Number.parseInt(String(req.query.limit ?? \"48\"), 10);\n  const limit = Number.isFinite(limitRaw) ? Math.min(100, Math.max(1, limitRaw)) : 48;\n\n  try {\n    const rows = await db\n      .select()\n      .from(scraperPendingVideosTable)\n      .where(eq(scraperPendingVideosTable.status, \"pending\"))\n      .orderBy(desc(scraperPendingVideosTable.scrapedAt))\n      .limit(limit);\n\n    res.json({ items: rows });\n  } catch (err) {\n    req.log?.error({ err }, \"Scraper: failed to list pending videos\");\n    res.status(500).json({ error: \"Failed to load pending review queue\" });\n  }\n});\n\nfunction sessionModerator(req: Request): { userId: string; role: string } | null {\n  const u = getSessionUser(req);\n  if (!u?.userId) return null;\n  return { userId: u.userId, role: u.role };\n}\n\nrouter.post(\"/pending/:id/approve\", requireModerator, async (req: Request, res: Response) => {\n  const admin = sessionModerator(req);\n  if (!admin) {\n    res.status(401).json({ error: \"Authentication required\" });\n    return;\n  }\n\n  const id = Number.parseInt(String(req.params.id), 10);\n  if (!Number.isFinite(id)) {\n    res.status(400).json({ error: \"Invalid pending id\" });\n    return;\n  }\n\n  try {\n    const [pending] = await db\n      .select()\n      .from(scraperPendingVideosTable)\n      .where(and(eq(scraperPendingVideosTable.id, id), eq(scraperPendingVideosTable.status, \"pending\")))\n      .limit(1);\n\n    if (!pending) {\n      res.status(404).json({ error: \"Pending item not found\" });\n      return;\n    }\n\n    const title =\n      pending.caption?.trim().slice(0, 120) ||\n      `Instagram #${pending.hashtag}`;\n\n    const auditText = buildIngestionAuditText([\n      pending.caption,\n      `#${pending.hashtag}`,\n      pending.hashtag,\n      title,\n    ]);\n    const gate = auditIngestionContent(auditText);\n    if (!gate.valid) {\n      await db\n        .update(scraperPendingVideosTable)\n        .set({ status: \"rejected\", reviewedAt: new Date() })\n        .where(eq(scraperPendingVideosTable.id, id));\n      res.status(422).json({\n        error: \"content_rejected\",\n        message: gate.reason,\n        negativeMatches: gate.negativeMatches,\n      });\n      return;\n    }\n\n    const category = classifyIngestionCategory(auditText);\n\n    const [profile] = await db\n      .select({ email: authUserTable.email, name: authUserTable.name })\n      .from(authUserTable)\n      .where(eq(authUserTable.id, admin.userId))\n      .limit(1);\n\n    const creator = profile?.name?.trim() || \"Hook N Bone Curator\";\n    const handle = `@${(profile?.email?.split(\"@\")[0] ?? \"curator\").replace(/[^a-z0-9_]/gi, \"\")}`;\n\n    const existingRows = await db\n      .select({ id: userVideosTable.id, videoUrl: userVideosTable.videoUrl })\n      .from(userVideosTable);\n    const duplicate = findExistingVideoByUrl(pending.videoUrl, existingRows);\n    if (duplicate) {\n      res.status(409).json({\n        error: \"duplicate_video\",\n        message: \"This video is already in the library\",\n        existingId: duplicate.id,\n      });\n      return;\n    }\n\n    const [video] = await db\n      .insert(userVideosTable)\n      .values({\n        userId: admin.userId,\n        title,\n        creator,\n        creatorHandle: handle,\n        videoUrl: pending.videoUrl,\n        thumbnailUrl: pending.thumbnailUrl,\n        category,\n        description: pending.caption,\n        sourcePlatform: \"instagram\",\n        sourceVideoId: pending.sourceVideoId,\n      })\n      .returning({ id: userVideosTable.id });\n\n    await db\n      .update(scraperPendingVideosTable)\n      .set({\n        status: \"approved\",\n        reviewedAt: new Date(),\n        approvedVideoId: video?.id ?? null,\n      })\n      .where(eq(scraperPendingVideosTable.id, id));\n\n    res.json({ ok: true, videoId: video?.id });\n  } catch (err) {\n    req.log?.error({ err }, \"Scraper: approve failed\");\n    res.status(500).json({ error: \"Failed to approve video\" });\n  }\n});\n\nrouter.post(\"/pending/:id/reject\", requireModerator, async (req, res) => {\n  const id = Number.parseInt(String(req.params.id), 10);\n  if (!Number.isFinite(id)) {\n    res.status(400).json({ error: \"Invalid pending id\" });\n    return;\n  }\n\n  try {\n    const [row] = await db\n      .update(scraperPendingVideosTable)\n      .set({ status: \"rejected\", reviewedAt: new Date() })\n      .where(and(eq(scraperPendingVideosTable.id, id), eq(scraperPendingVideosTable.status, \"pending\")))\n      .returning({ id: scraperPendingVideosTable.id });\n\n    if (!row) {\n      res.status(404).json({ error: \"Pending item not found\" });\n      return;\n    }\n    res.json({ ok: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Scraper: reject failed\");\n    res.status(500).json({ error: \"Failed to reject video\" });\n  }\n});\n\nrouter.post(\"/seed\", requireAdmin, async (req, res) => {\n  const body = (req.body ?? {}) as { hashtag?: unknown; quantity?: unknown };\n  const hashtag = normalizeHashtag(typeof body.hashtag === \"string\" ? body.hashtag : \"\");\n  if (!hashtag) {\n    res.status(400).json({ error: \"hashtag is required\" });\n    return;\n  }\n\n  const qtyRaw = Number(body.quantity);\n  const quantity =\n    Number.isFinite(qtyRaw) && qtyRaw >= 1 ? Math.min(200, Math.floor(qtyRaw)) : 50;\n\n  try {\n    const result = await ingestHashtagMedia(hashtag, { limit: quantity });\n    res.json({ ok: true, hashtag, quantity, ...result });\n  } catch (err) {\n    if (err instanceof InstagramScraperError) {\n      res.status(err.statusCode).json({ error: err.message });\n      return;\n    }\n    req.log?.error({ err }, \"Scraper: seed failed\");\n    res.status(500).json({ error: \"Instagram seed failed\" });\n  }\n});\n\nrouter.post(\"/run\", requireAdmin, async (req, res) => {\n  try {\n    await runInstagramScraperCycle();\n    res.json({ ok: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Scraper: manual run failed\");\n    res.status(500).json({ error: \"Scraper run failed\" });\n  }\n});\n\nrouter.post(\"/test-hashtag\", requireAdmin, async (req, res) => {\n  const body = (req.body ?? {}) as { hashtag?: unknown };\n  const hashtag = normalizeHashtag(typeof body.hashtag === \"string\" ? body.hashtag : \"\");\n  if (!hashtag) {\n    res.status(400).json({ error: \"hashtag is required\" });\n    return;\n  }\n\n  try {\n    const items = await fetchHashtagRecentMedia(hashtag);\n    res.json({ count: items.length, sample: items.slice(0, 3) });\n  } catch (err) {\n    if (err instanceof InstagramScraperError) {\n      res.status(err.statusCode).json({ error: err.message });\n      return;\n    }\n    req.log?.error({ err }, \"Scraper: test hashtag failed\");\n    res.status(500).json({ error: \"Hashtag test failed\" });\n  }\n});\n\nexport default router;\n", "/**\n * Instagram hashtag media via RapidAPI \"Instagram Scraper Stable API\".\n * @see https://instagram-scraper-stable-api.p.rapidapi.com/search_hashtag.php\n */\n\nexport class InstagramScraperError extends Error {\n  constructor(\n    message: string,\n    readonly statusCode: number = 502,\n  ) {\n    super(message);\n    this.name = \"InstagramScraperError\";\n  }\n}\n\nexport interface ScrapedInstagramVideo {\n  sourceVideoId: string;\n  shortcode: string | null;\n  videoUrl: string;\n  thumbnailUrl: string | null;\n  caption: string | null;\n  creatorUsername: string | null;\n}\n\nexport const INSTAGRAM_RAPIDAPI_HOST = \"instagram-scraper-stable-api.p.rapidapi.com\";\nexport const INSTAGRAM_HASHTAG_SEARCH_PATH = \"/search_hashtag.php\";\n\nfunction resolveHost(): string {\n  return process.env.RAPIDAPI_INSTAGRAM_HOST?.trim() || INSTAGRAM_RAPIDAPI_HOST;\n}\n\nfunction resolvePath(): string {\n  return process.env.RAPIDAPI_INSTAGRAM_HASHTAG_PATH?.trim() || INSTAGRAM_HASHTAG_SEARCH_PATH;\n}\n\nexport function normalizeHashtag(raw: string): string {\n  return raw.trim().replace(/^#+/, \"\").toLowerCase();\n}\n\nfunction pickString(...values: unknown[]): string | null {\n  for (const v of values) {\n    if (typeof v === \"string\" && v.trim()) return v.trim();\n  }\n  return null;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n  return value && typeof value === \"object\" ? (value as Record<string, unknown>) : null;\n}\n\nfunction extractVideoUrl(node: Record<string, unknown>): string | null {\n  const direct = pickString(node.video_url, node.videoUrl, node.video_versions_url);\n  if (direct?.startsWith(\"http\")) return direct;\n\n  const versions = node.video_versions;\n  if (Array.isArray(versions) && versions.length > 0) {\n    const first = versions[0];\n    const firstObj = asRecord(first);\n    if (firstObj) {\n      const url = pickString(firstObj.url);\n      if (url) return url;\n    }\n    if (typeof first === \"string\" && first.startsWith(\"http\")) return first;\n  }\n\n  const carousel = node.carousel_media ?? node.edge_sidecar_to_children;\n  const carouselObj = asRecord(carousel);\n  const carouselItems = Array.isArray(carousel)\n    ? carousel\n    : Array.isArray(carouselObj?.edges)\n      ? carouselObj.edges.map((edge) => asRecord(asRecord(edge)?.node) ?? edge)\n      : [];\n\n  for (const item of carouselItems) {\n    const itemObj = asRecord(item);\n    if (!itemObj) continue;\n    const url = extractVideoUrl(itemObj);\n    if (url) return url;\n  }\n\n  return null;\n}\n\nfunction extractThumbnailUrl(node: Record<string, unknown>): string | null {\n  const imageVersions = asRecord(node.image_versions2);\n  let versionUrl: string | null = null;\n  if (imageVersions) {\n    const items = imageVersions.items;\n    if (Array.isArray(items) && items[0]) {\n      versionUrl = pickString(asRecord(items[0])?.url);\n    }\n  }\n\n  return pickString(\n    node.thumbnail_url,\n    node.thumbnailUrl,\n    node.display_url,\n    node.displayUrl,\n    versionUrl,\n  );\n}\n\nfunction extractCaption(node: Record<string, unknown>): string | null {\n  const edgeCaption = asRecord(node.edge_media_to_caption);\n  if (edgeCaption && Array.isArray(edgeCaption.edges) && edgeCaption.edges[0]) {\n    const captionNode = asRecord(asRecord(edgeCaption.edges[0])?.node);\n    const text = pickString(captionNode?.text);\n    if (text) return text;\n  }\n\n  const cap = node.caption;\n  if (typeof cap === \"string\") return cap;\n  const capObj = asRecord(cap);\n  if (capObj) return pickString(capObj.text);\n\n  return pickString(node.caption_text, node.title, node.description);\n}\n\nfunction extractShortcode(node: Record<string, unknown>): string | null {\n  return pickString(node.shortcode, node.code);\n}\n\nfunction extractCreatorUsername(node: Record<string, unknown>): string | null {\n  const owner = asRecord(node.owner);\n  return pickString(\n    owner?.username,\n    node.username,\n    node.owner_username,\n    asRecord(node.user)?.username,\n  );\n}\n\nfunction extractSourceId(node: Record<string, unknown>): string | null {\n  const shortcode = extractShortcode(node);\n  if (shortcode) return shortcode;\n  return pickString(\n    node.pk?.toString(),\n    node.id?.toString(),\n    node.media_id?.toString(),\n  );\n}\n\nfunction isVideoNode(node: Record<string, unknown>): boolean {\n  if (node.is_video === true) return true;\n  if (node.product_type === \"clips\") return true;\n  if (node.__typename === \"GraphVideo\") return true;\n  return Boolean(extractVideoUrl(node));\n}\n\nfunction pushVideoNode(\n  node: Record<string, unknown>,\n  seen: Set<string>,\n  results: ScrapedInstagramVideo[],\n): void {\n  if (!isVideoNode(node)) return;\n\n  const sourceVideoId = extractSourceId(node);\n  const videoUrl = extractVideoUrl(node);\n  if (!sourceVideoId || !videoUrl || seen.has(sourceVideoId)) return;\n\n  seen.add(sourceVideoId);\n  results.push({\n    sourceVideoId,\n    shortcode: extractShortcode(node),\n    videoUrl,\n    thumbnailUrl: extractThumbnailUrl(node),\n    caption: extractCaption(node),\n    creatorUsername: extractCreatorUsername(node),\n  });\n}\n\nfunction parseSearchHashtagEdges(json: unknown): ScrapedInstagramVideo[] | null {\n  const root = asRecord(json);\n  const posts = asRecord(root?.posts);\n  const edges = posts?.edges;\n  if (!Array.isArray(edges)) return null;\n\n  const seen = new Set<string>();\n  const results: ScrapedInstagramVideo[] = [];\n\n  for (const edge of edges) {\n    const edgeObj = asRecord(edge);\n    const node = asRecord(edgeObj?.node);\n    if (!node) continue;\n    pushVideoNode(node, seen, results);\n  }\n\n  return results;\n}\n\nfunction collectMediaNodes(payload: unknown, out: Record<string, unknown>[]): void {\n  if (!payload || typeof payload !== \"object\") return;\n\n  if (Array.isArray(payload)) {\n    for (const item of payload) collectMediaNodes(item, out);\n    return;\n  }\n\n  const obj = payload as Record<string, unknown>;\n  const videoUrl = extractVideoUrl(obj);\n  const sourceId = extractSourceId(obj);\n  if (videoUrl && sourceId && isVideoNode(obj)) {\n    out.push(obj);\n  }\n\n  for (const value of Object.values(obj)) {\n    if (value && typeof value === \"object\") collectMediaNodes(value, out);\n  }\n}\n\nexport function parseHashtagRecentMediaResponse(json: unknown): ScrapedInstagramVideo[] {\n  const fromEdges = parseSearchHashtagEdges(json);\n  if (fromEdges) return fromEdges;\n\n  const nodes: Record<string, unknown>[] = [];\n  collectMediaNodes(json, nodes);\n\n  const seen = new Set<string>();\n  const results: ScrapedInstagramVideo[] = [];\n\n  for (const node of nodes) {\n    pushVideoNode(node, seen, results);\n  }\n\n  return results;\n}\n\nexport function buildInstagramHashtagSearchUrl(hashtag: string): string {\n  const tag = normalizeHashtag(hashtag);\n  const host = resolveHost();\n  const path = resolvePath();\n  const params = new URLSearchParams({ hashtag: tag });\n  return `https://${host}${path}?${params.toString()}`;\n}\n\n/** Fetch hashtag posts/reels from RapidAPI (video items only). */\nexport async function fetchHashtagRecentMedia(hashtag: string): Promise<ScrapedInstagramVideo[]> {\n  const apiKey = process.env.RAPIDAPI_KEY?.trim();\n  if (!apiKey) {\n    throw new InstagramScraperError(\"RAPIDAPI_KEY is not configured.\", 503);\n  }\n\n  const tag = normalizeHashtag(hashtag);\n  if (!tag) {\n    throw new InstagramScraperError(\"Hashtag is required.\", 400);\n  }\n\n  const host = resolveHost();\n  const url = buildInstagramHashtagSearchUrl(tag);\n\n  const res = await fetch(url, {\n    method: \"GET\",\n    headers: {\n      \"x-rapidapi-key\": apiKey,\n      \"x-rapidapi-host\": host,\n      \"Content-Type\": \"application/json\",\n    },\n    signal: AbortSignal.timeout(45_000),\n  });\n\n  if (res.status === 429) {\n    throw new InstagramScraperError(\n      \"Instagram API rate limit exceeded. Check your RapidAPI plan quota and try again later.\",\n      429,\n    );\n  }\n\n  if (!res.ok) {\n    const body = await res.text().catch(() => \"\");\n    if (res.status === 403 && /not subscribed/i.test(body)) {\n      throw new InstagramScraperError(\n        \"RapidAPI Instagram hashtag API not subscribed. Subscribe to instagram-scraper-stable-api on RapidAPI.\",\n        403,\n      );\n    }\n    throw new InstagramScraperError(\n      `Instagram hashtag API failed (${res.status}): ${body.slice(0, 200)}`,\n      res.status >= 500 ? 502 : 400,\n    );\n  }\n\n  const json = await res.json();\n  return parseHashtagRecentMediaResponse(json);\n}\n", "import {\n  db,\n  scraperHashtagsTable,\n  scraperPendingVideosTable,\n  userVideosTable,\n} from \"@workspace/db\";\nimport { and, eq, inArray } from \"drizzle-orm\";\nimport {\n  fetchHashtagRecentMedia,\n  normalizeHashtag,\n} from \"./instagramScraper\";\nimport {\n  auditIngestionContent,\n  buildIngestionAuditText,\n} from \"./ingestion/contentGatekeeper\";\n\nasync function existingSourceIds(ids: string[]): Promise<Set<string>> {\n  if (ids.length === 0) return new Set();\n\n  const [pendingRows, userRows] = await Promise.all([\n    db\n      .select({ sourceVideoId: scraperPendingVideosTable.sourceVideoId })\n      .from(scraperPendingVideosTable)\n      .where(inArray(scraperPendingVideosTable.sourceVideoId, ids)),\n    db\n      .select({ sourceVideoId: userVideosTable.sourceVideoId })\n      .from(userVideosTable)\n      .where(\n        and(\n          eq(userVideosTable.sourcePlatform, \"instagram\"),\n          inArray(userVideosTable.sourceVideoId, ids),\n        ),\n      ),\n  ]);\n\n  const set = new Set<string>();\n  for (const row of pendingRows) {\n    if (row.sourceVideoId) set.add(row.sourceVideoId);\n  }\n  for (const row of userRows) {\n    if (row.sourceVideoId) set.add(row.sourceVideoId);\n  }\n  return set;\n}\n\n/** Fetch hashtag media and queue new items for admin review (deduped + gatekeeper filtered). */\nexport async function ingestHashtagMedia(\n  hashtag: string,\n  options?: { limit?: number; trackHashtag?: boolean },\n): Promise<{ inserted: number; skipped: number; rejected: number; fetched: number }> {\n  const tag = normalizeHashtag(hashtag);\n  const limit = Math.min(200, Math.max(1, options?.limit ?? 200));\n  const items = (await fetchHashtagRecentMedia(tag)).slice(0, limit);\n  if (items.length === 0) {\n    if (options?.trackHashtag !== false) {\n      await db\n        .insert(scraperHashtagsTable)\n        .values({ hashtag: tag, enabled: true })\n        .onConflictDoUpdate({\n          target: scraperHashtagsTable.hashtag,\n          set: { lastScrapedAt: new Date() },\n        });\n    }\n    return { inserted: 0, skipped: 0, rejected: 0, fetched: 0 };\n  }\n\n  const known = await existingSourceIds(items.map((i) => i.sourceVideoId));\n  let inserted = 0;\n  let skipped = 0;\n  let rejected = 0;\n\n  for (const item of items) {\n    if (known.has(item.sourceVideoId)) {\n      skipped++;\n      continue;\n    }\n\n    const auditText = buildIngestionAuditText([item.caption, `#${tag}`, tag]);\n    const gate = auditIngestionContent(auditText);\n    if (!gate.valid) {\n      rejected++;\n      continue;\n    }\n\n    try {\n      await db.insert(scraperPendingVideosTable).values({\n        sourceVideoId: item.sourceVideoId,\n        videoUrl: item.videoUrl,\n        thumbnailUrl: item.thumbnailUrl,\n        caption: item.caption,\n        hashtag: tag,\n        status: \"pending\",\n      });\n      known.add(item.sourceVideoId);\n      inserted++;\n    } catch {\n      skipped++;\n    }\n  }\n\n  if (options?.trackHashtag !== false) {\n    await db\n      .insert(scraperHashtagsTable)\n      .values({ hashtag: tag, enabled: true, lastScrapedAt: new Date() })\n      .onConflictDoUpdate({\n        target: scraperHashtagsTable.hashtag,\n        set: { lastScrapedAt: new Date() },\n      });\n  }\n\n  return { inserted, skipped, rejected, fetched: items.length };\n}\n", "import { db, scraperHashtagsTable } from \"@workspace/db\";\nimport { eq } from \"drizzle-orm\";\nimport { logger } from \"../lib/logger\";\nimport { InstagramScraperError } from \"../lib/instagramScraper\";\nimport { ingestHashtagMedia } from \"../lib/instagramScraperIngest\";\nimport { ensureDefaultScraperHashtags } from \"../lib/scraperDefaults\";\n\nconst POLL_INTERVAL_MS = Number(process.env.SCRAPER_POLL_INTERVAL_MS ?? 2 * 60 * 60 * 1000);\nconst MAX_HASHTAGS_PER_CYCLE = Number(process.env.SCRAPER_MAX_HASHTAGS_PER_CYCLE ?? 3);\n\nlet intervalHandle: ReturnType<typeof setInterval> | null = null;\nlet cycleInFlight = false;\n\nasync function scrapeHashtag(hashtag: string): Promise<{ inserted: number; rejected: number }> {\n  const { inserted, rejected } = await ingestHashtagMedia(hashtag, { trackHashtag: true });\n  return { inserted, rejected };\n}\n\nexport async function runInstagramScraperCycle(): Promise<void> {\n  if (cycleInFlight) return;\n  cycleInFlight = true;\n\n  try {\n    await ensureDefaultScraperHashtags();\n\n    const enabled = await db\n      .select()\n      .from(scraperHashtagsTable)\n      .where(eq(scraperHashtagsTable.enabled, true))\n      .limit(MAX_HASHTAGS_PER_CYCLE);\n\n    if (enabled.length === 0) {\n      logger.debug(\"Instagram scraper: no enabled hashtags\");\n      return;\n    }\n\n    for (const row of enabled) {\n      try {\n        const { inserted, rejected } = await scrapeHashtag(row.hashtag);\n        logger.info(\n          { hashtag: row.hashtag, inserted, rejected },\n          \"Instagram scraper: hashtag cycle done\",\n        );\n      } catch (err) {\n        if (err instanceof InstagramScraperError && err.statusCode === 429) {\n          logger.warn({ hashtag: row.hashtag }, \"Instagram scraper: rate limited, stopping cycle\");\n          break;\n        }\n        logger.error({ err, hashtag: row.hashtag }, \"Instagram scraper: hashtag failed\");\n      }\n    }\n  } finally {\n    cycleInFlight = false;\n  }\n}\n\nexport function startInstagramScraperJob(): void {\n  if (intervalHandle) return;\n  if (process.env.SCRAPER_AGENT_ENABLED === \"false\") {\n    logger.info(\"Instagram scraper job: disabled via SCRAPER_AGENT_ENABLED=false\");\n    return;\n  }\n  if (!process.env.RAPIDAPI_KEY?.trim()) {\n    logger.info(\"Instagram scraper job: skipped (RAPIDAPI_KEY not set)\");\n    return;\n  }\n\n  logger.info({ intervalMs: POLL_INTERVAL_MS }, \"Instagram scraper job: starting\");\n  void runInstagramScraperCycle();\n  intervalHandle = setInterval(() => {\n    void runInstagramScraperCycle();\n  }, POLL_INTERVAL_MS);\n}\n", "import { db, scraperHashtagsTable } from \"@workspace/db\";\nimport { sql } from \"drizzle-orm\";\nimport { logger } from \"./logger\";\n\n/** Default hunting/fishing hashtags \u2014 seeded once when the table is empty. */\nexport const DEFAULT_SCRAPER_HASHTAGS = [\n  \"bassfishing\",\n  \"bowhunting\",\n  \"deerhunting\",\n  \"duckhunting\",\n  \"saltwaterfishing\",\n  \"hunting\",\n  \"fishing\",\n  \"whitetail\",\n  \"kayakfishing\",\n] as const;\n\n/** Ensure at least one enabled hashtag exists for automated scraping. */\nexport async function ensureDefaultScraperHashtags(): Promise<number> {\n  try {\n    const [{ count }] = await db\n      .select({ count: sql<number>`count(*)::int` })\n      .from(scraperHashtagsTable);\n\n    if ((count ?? 0) > 0) return 0;\n\n    let inserted = 0;\n    for (const hashtag of DEFAULT_SCRAPER_HASHTAGS) {\n      await db\n        .insert(scraperHashtagsTable)\n        .values({ hashtag, enabled: true })\n        .onConflictDoNothing({ target: scraperHashtagsTable.hashtag });\n      inserted++;\n    }\n\n    logger.info({ inserted }, \"Scraper: seeded default Instagram hashtags\");\n    return inserted;\n  } catch (err) {\n    logger.warn({ err }, \"Scraper: failed to seed default hashtags (non-fatal)\");\n    return 0;\n  }\n}\n", "import { Router, type IRouter } from \"express\";\nimport { requireAdmin } from \"../lib/authMiddleware\";\nimport { fetchYoutubeSeederVideos } from \"../lib/youtubeSeederFetch\";\n\nconst router: IRouter = Router();\n\nrouter.get(\"/status\", requireAdmin, (_req, res) => {\n  const configured = Boolean(process.env.YOUTUBE_API_KEY?.trim());\n  res.json({\n    configured,\n    provider: configured ? \"youtube-api\" : null,\n    endpoint: configured\n      ? \"YouTube Data API (YOUTUBE_API_KEY in artifacts/api-server/.env)\"\n      : \"not configured\",\n    serverKey: \"YOUTUBE_API_KEY in artifacts/api-server/.env\",\n  });\n});\n\nrouter.post(\"/fetch\", requireAdmin, async (req, res) => {\n  const apiKey = process.env.YOUTUBE_API_KEY?.trim();\n  if (!apiKey) {\n    res.status(503).json({\n      error:\n        \"YouTube search is not configured on the API server. Add YOUTUBE_API_KEY to artifacts/api-server/.env, then restart the API server.\",\n    });\n    return;\n  }\n\n  const body = (req.body ?? {}) as { query?: unknown; quantity?: unknown };\n  const query = typeof body.query === \"string\" ? body.query.trim() : \"\";\n  if (!query) {\n    res.status(400).json({ error: \"query is required\" });\n    return;\n  }\n\n  const qtyRaw = Number(body.quantity);\n  const quantity =\n    Number.isFinite(qtyRaw) && qtyRaw >= 1 ? Math.min(200, Math.floor(qtyRaw)) : 50;\n\n  try {\n    const videos = await fetchYoutubeSeederVideos(query, quantity, apiKey);\n    res.json({ videos });\n  } catch (err) {\n    req.log?.error({ err }, \"YouTube seeder fetch failed\");\n    res.status(502).json({\n      error: err instanceof Error ? err.message : \"YouTube seed fetch failed\",\n    });\n  }\n});\n\nexport default router;\n", "const YT_API_BASE = \"https://www.googleapis.com/youtube/v3\";\n\nexport interface YoutubeSeederItem {\n  videoId: string;\n  title: string;\n  description: string;\n  channelTitle: string;\n  channelId: string;\n  thumbnail: string;\n  url: string;\n  categoryId?: string;\n}\n\nasync function fetchYouTubeVideoCategories(\n  videoIds: string[],\n  apiKey: string,\n): Promise<Map<string, string>> {\n  const categories = new Map<string, string>();\n  if (videoIds.length === 0) return categories;\n\n  for (let i = 0; i < videoIds.length; i += 50) {\n    const chunk = videoIds.slice(i, i + 50);\n    const params = new URLSearchParams({\n      part: \"snippet\",\n      id: chunk.join(\",\"),\n      key: apiKey,\n    });\n\n    const res = await fetch(`${YT_API_BASE}/videos?${params}`);\n    if (!res.ok) continue;\n\n    const data = (await res.json()) as {\n      items?: Array<{ id?: string; snippet?: { categoryId?: string } }>;\n    };\n\n    for (const item of data.items ?? []) {\n      if (item.id && item.snippet?.categoryId) {\n        categories.set(item.id, item.snippet.categoryId);\n      }\n    }\n  }\n\n  return categories;\n}\n\nasync function fetchYouTubePage(\n  query: string,\n  maxResults: number,\n  pageToken: string | undefined,\n  apiKey: string,\n): Promise<{ items: YoutubeSeederItem[]; nextPageToken?: string }> {\n  const params = new URLSearchParams({\n    part: \"snippet\",\n    type: \"video\",\n    maxResults: String(Math.min(50, maxResults)),\n    order: \"viewCount\",\n    q: query.trim(),\n    key: apiKey,\n    safeSearch: \"moderate\",\n    videoEmbeddable: \"true\",\n  });\n  if (pageToken) params.set(\"pageToken\", pageToken);\n  if (/\\b(shorts?|reels?)\\b/i.test(query)) params.set(\"videoDuration\", \"short\");\n\n  const res = await fetch(`${YT_API_BASE}/search?${params}`);\n  if (!res.ok) {\n    let message = `YouTube search failed (${res.status})`;\n    try {\n      const body = (await res.json()) as { error?: { message?: string } };\n      if (body.error?.message) message = body.error.message;\n    } catch {\n      /* ignore */\n    }\n    throw new Error(message);\n  }\n\n  const data = (await res.json()) as {\n    items?: Array<{\n      id?: { videoId?: string };\n      snippet?: {\n        title?: string;\n        description?: string;\n        channelTitle?: string;\n        channelId?: string;\n        thumbnails?: { high?: { url?: string }; medium?: { url?: string }; default?: { url?: string } };\n      };\n    }>;\n    nextPageToken?: string;\n  };\n\n  const items: YoutubeSeederItem[] = (data.items ?? [])\n    .filter((item) => item.id?.videoId)\n    .map((item) => {\n      const videoId = item.id!.videoId!;\n      const snippet = item.snippet ?? {};\n      return {\n        videoId,\n        title: snippet.title ?? \"YouTube video\",\n        description: snippet.description ?? \"\",\n        channelTitle: snippet.channelTitle ?? \"YouTube\",\n        channelId: snippet.channelId ?? \"\",\n        thumbnail:\n          snippet.thumbnails?.high?.url ??\n          snippet.thumbnails?.medium?.url ??\n          snippet.thumbnails?.default?.url ??\n          \"\",\n        url: `https://www.youtube.com/watch?v=${videoId}`,\n      };\n    });\n\n  return {\n    items,\n    ...(data.nextPageToken ? { nextPageToken: data.nextPageToken } : {}),\n  };\n}\n\nexport async function fetchYoutubeSeederVideos(\n  query: string,\n  quantity: number,\n  apiKey: string,\n): Promise<YoutubeSeederItem[]> {\n  const collected: YoutubeSeederItem[] = [];\n  let pageToken: string | undefined;\n\n  while (collected.length < quantity) {\n    const remaining = quantity - collected.length;\n    const page = await fetchYouTubePage(query, remaining, pageToken, apiKey);\n    collected.push(...page.items);\n    if (!page.nextPageToken || page.items.length === 0) break;\n    pageToken = page.nextPageToken;\n  }\n\n  const trimmed = collected.slice(0, quantity);\n  const videoIds = trimmed\n    .map((item) => item.videoId)\n    .filter((id): id is string => Boolean(id));\n  const categories = await fetchYouTubeVideoCategories(videoIds, apiKey);\n\n  return trimmed.map((item) => ({\n    ...item,\n    categoryId: item.videoId ? categories.get(item.videoId) : undefined,\n  }));\n}\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { requireAdmin } from \"../lib/authMiddleware\";\n\nconst router: IRouter = Router();\n\ntype SerpOrganicResult = {\n  title?: string;\n  link?: string;\n  snippet?: string;\n  displayed_link?: string;\n  position?: number;\n  thumbnail?: string | null;\n};\n\ntype SerpVideoResult = {\n  title?: string;\n  link?: string;\n  duration?: string;\n  channel?: string;\n  source?: string;\n  thumbnail?: string | null;\n};\n\ntype SerpRelatedQuestion = {\n  question?: string;\n  title?: string;\n  snippet?: string;\n  link?: string;\n};\n\nfunction normalizeArray<T>(value: unknown): T[] {\n  return Array.isArray(value) ? (value as T[]) : [];\n}\n\nrouter.post(\"/\", requireAdmin, async (req: Request, res: Response) => {\n  const apiKey = process.env.SCRAPER_API_KEY?.trim();\n  if (!apiKey) {\n    res.status(500).json({ error: \"SCRAPER_API_KEY is not configured\" });\n    return;\n  }\n\n  const body = (req.body ?? {}) as { searchQuery?: unknown; query?: unknown };\n  const searchQuery =\n    (typeof body.searchQuery === \"string\" ? body.searchQuery : \"\") ||\n    (typeof body.query === \"string\" ? body.query : \"\");\n  const trimmed = searchQuery.trim();\n\n  if (!trimmed) {\n    res.status(400).json({ error: \"searchQuery is required\" });\n    return;\n  }\n\n  try {\n    const url =\n      `https://api.scraperapi.com/structured/google/search` +\n      `?api_key=${encodeURIComponent(apiKey)}` +\n      `&query=${encodeURIComponent(trimmed)}`;\n\n    const response = await fetch(url, {\n      method: \"GET\",\n      headers: { Accept: \"application/json\" },\n    });\n\n    if (!response.ok) {\n      const detail = await response.text().catch(() => \"\");\n      throw new Error(\n        detail.trim() || `ScraperAPI request failed with status ${response.status}`,\n      );\n    }\n\n    const data = (await response.json()) as Record<string, unknown>;\n\n    const videos = normalizeArray<SerpVideoResult>(\n      data.videos ?? data.video_results ?? data.inline_videos,\n    );\n    const organic_results = normalizeArray<SerpOrganicResult>(data.organic_results);\n    const related_questions = normalizeArray<SerpRelatedQuestion>(\n      data.related_questions ?? data.people_also_ask,\n    ).map((item) => ({\n      ...item,\n      question: item.question ?? item.title ?? \"\",\n    }));\n\n    res.json({\n      searchQuery: trimmed,\n      organic_results,\n      videos,\n      related_questions,\n    });\n  } catch (err) {\n    const message = err instanceof Error ? err.message : \"Google SERP discovery failed\";\n    req.log?.error({ err }, \"Google SERP discovery failed\");\n    res.status(500).json({ error: message });\n  }\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { getGemini } from \"../lib/ai\";\n\nexport const REVALIDATE_SECONDS = 43200;\nexport const SCUTTLEBUTT_TARGET_COUNT = 35;\nexport const SCUTTLEBUTT_MIN_COUNT = 30;\n\nconst MODEL = \"gemini-2.5-flash\";\n\nexport type ScuttlebuttCategory = \"gear\" | \"fishing\" | \"hunting\" | \"locations\" | \"news\";\n\nexport interface ScuttlebuttTopic {\n  id: string;\n  title: string;\n  summary: string;\n  category: ScuttlebuttCategory;\n  url: string;\n}\n\nconst PROMPT = `Search the internet for the latest 2026 news on hunting and fishing equipment, outdoor industry stories, conservation updates, and prime hunting and fishing locations.\n\nUsing real search results, write exactly ${SCUTTLEBUTT_TARGET_COUNT} conversation starters for an outdoor community chat.\n\nTone: casual, upbeat outdoor enthusiast \u2014 like friends around a campfire. Keep it natural and modern. Do NOT use heavy cowboy dialect, drawl, or words like \"partner\", \"howdy\", \"y'all\", or \"trail gossip\".\n\nEach object must include:\n- \"id\": unique kebab-case slug derived from the title\n- \"title\": punchy starter under 18 words\n- \"summary\": 1\u20132 factual sentences drawn from search results\n- \"category\": one of \"gear\", \"fishing\", \"hunting\", \"locations\", \"news\"\n- \"url\": a direct https URL to a real article or page backing this topic\n\nReturn ONLY a valid JSON array of ${SCUTTLEBUTT_TARGET_COUNT} objects. No markdown fences or backticks.`;\n\nconst FALLBACK_TOPICS: ScuttlebuttTopic[] = [\n  { id: \"carbon-bow-releases-2026\", title: \"New carbon riser bows are dominating early 2026 archery chatter\", summary: \"Manufacturers are pushing lighter carbon frames with tighter tolerances for backcountry hunters who want less weight without giving up accuracy.\", category: \"gear\", url: \"https://www.outdoorlife.com/hunting/archery/\" },\n  { id: \"swimbait-bass-trend\", title: \"Oversized swimbaits are back on every bass forum this season\", summary: \"Anglers are reporting strong reaction strikes on glide baits and soft swimbaits as water temps climb in southern reservoirs.\", category: \"fishing\", url: \"https://www.fieldandstream.com/fishing/bass-fishing/\" },\n  { id: \"public-land-elk-applications\", title: \"Western public-land elk tags are the hottest draw conversation right now\", summary: \"Hunters are comparing unit success rates and OTC options across Colorado, Wyoming, and Montana for the 2026 seasons.\", category: \"hunting\", url: \"https://www.outdoorlife.com/hunting/elk-hunting/\" },\n  { id: \"lightweight-wader-roundup\", title: \"Breathable waders keep coming up in every trout stream gear thread\", summary: \"New lightweight bootfoot and stockingfoot models aim at all-day comfort for spring creek and tailwater anglers.\", category: \"gear\", url: \"https://www.fieldandstream.com/fishing/fly-fishing/\" },\n  { id: \"spring-turkey-forecast\", title: \"Spring turkey season forecasts have hunters picking their setups early\", summary: \"Biologists in several states are reporting strong poult carryover, which has people debating decoy spreads and calling tactics.\", category: \"hunting\", url: \"https://www.outdoorlife.com/hunting/turkey-hunting/\" },\n  { id: \"kayak-bass-tournaments\", title: \"Kayak bass circuits are expanding into more regional lakes this year\", summary: \"Community-led kayak events are drawing new anglers who want tournament experience without the cost of a big boat.\", category: \"fishing\", url: \"https://www.bassmaster.com/\" },\n  { id: \"rangefinder-binocular-combo\", title: \"RF-enabled binos are the gear flex everyone keeps asking about\", summary: \"Integrated laser rangefinders in premium glass are popular with western hunters who glass long distances from one setup.\", category: \"gear\", url: \"https://www.outdoorlife.com/gear/\" },\n  { id: \"great-lakes-steelhead\", title: \"Great Lakes steelhead runs are trending earlier on trib reports\", summary: \"River monitors note shifting run timing and clearer water on several Lake Michigan tributaries this spring.\", category: \"fishing\", url: \"https://www.fieldandstream.com/fishing/\" },\n  { id: \"whitetail-food-plots\", title: \"Food plot seed blends for whitetail are getting debated again\", summary: \"Land managers are comparing clover, brassica, and cereal grain mixes ahead of spring planting windows.\", category: \"hunting\", url: \"https://www.outdoorlife.com/hunting/whitetail-deer/\" },\n  { id: \"flats-redfish-sight-fishing\", title: \"Gulf Coast sight-fishing for redfish is heating up in shallow reports\", summary: \"Guides along Texas and Louisiana flats note improving clarity and aggressive tailing fish on warm afternoons.\", category: \"locations\", url: \"https://www.fieldandstream.com/fishing/saltwater-fishing/\" },\n  { id: \"waterfowl-habitat-projects\", title: \"New wetland restoration projects are big news in duck hunting circles\", summary: \"Partnership programs are reopening managed wetlands that should benefit migrating waterfowl through the Central Flyway.\", category: \"news\", url: \"https://www.ducks.org/\" },\n  { id: \"crossbow-regulation-updates\", title: \"Crossbow season expansions are sparking debate in several states\", summary: \"Wildlife commissions are reviewing equipment rules as participation grows among older and mobility-limited hunters.\", category: \"news\", url: \"https://www.outdoorlife.com/hunting/\" },\n  { id: \"tungsten-jig-trend\", title: \"Tungsten ice and open-water jigs keep showing up in panfish threads\", summary: \"Compact tungsten profiles give anglers faster drops and better feel in deep or windy conditions.\", category: \"gear\", url: \"https://www.fieldandstream.com/fishing/\" },\n  { id: \"mule-deer-unit-scouting\", title: \"Mule deer scouts are sharing early summer glassing plans online\", summary: \"Hunters in high-desert units are mapping water sources and migration funnels before summer heat pushes deer higher.\", category: \"locations\", url: \"https://www.outdoorlife.com/hunting/mule-deer/\" },\n  { id: \"offshore-tuna-season\", title: \"Offshore tuna chatter is picking up along the mid-Atlantic coast\", summary: \"Charter fleets report yellowfin and bluefin opportunities shifting with water temps and bait concentrations.\", category: \"fishing\", url: \"https://www.fieldandstream.com/fishing/saltwater-fishing/\" },\n  { id: \"trail-camera-ai\", title: \"AI-powered trail cameras are the new scouting conversation starter\", summary: \"Cellular cams with species filtering and instant alerts are changing how hunters monitor patterns between visits.\", category: \"gear\", url: \"https://www.outdoorlife.com/gear/trail-cameras/\" },\n  { id: \"pronghorn-public-land\", title: \"Wyoming pronghorn units on public land are getting extra attention\", summary: \"Speed goat hunters are comparing access maps and water availability for early-season spot-and-stalk plans.\", category: \"locations\", url: \"https://www.outdoorlife.com/hunting/antelope-hunting/\" },\n  { id: \"fly-rod-saltwater\", title: \"Saltwater fly anglers are talking fast-action 9-weight setups again\", summary: \"New rod tapers built for quick shots at cruising fish are popular on flats and inshore mangrove edges.\", category: \"gear\", url: \"https://www.fieldandstream.com/fishing/fly-fishing/\" },\n  { id: \"cwd-management-news\", title: \"CWD management updates are on every big-game hunter's radar\", summary: \"State agencies continue expanding testing programs and carcass transport rules to slow disease spread.\", category: \"news\", url: \"https://www.outdoorlife.com/conservation/\" },\n  { id: \"crappie-spawn-timing\", title: \"Crappie spawn timing maps are circulating in southern lake groups\", summary: \"Anglers tracking warming trends are staging near brush piles and creek channels ahead of the peak bite.\", category: \"fishing\", url: \"https://www.fieldandstream.com/fishing/\" },\n  { id: \"backcountry-pack-frames\", title: \"Modular hunting pack frames are getting compared side-by-side\", summary: \"Backcountry hunters want load stability and quick access without switching bags between early and late season.\", category: \"gear\", url: \"https://www.outdoorlife.com/gear/\" },\n  { id: \"grouse-habitat-recovery\", title: \"Grouse habitat recovery projects are making regional headlines\", summary: \"Forestry partnerships in the upper Midwest aim to restore young forest cover for ruffed grouse populations.\", category: \"news\", url: \"https://www.ruffed.org/\" },\n  { id: \"musky-topwater-buzz\", title: \"Musky anglers won't stop talking about big topwater baits\", summary: \"Night and low-light follows on giant bucktails and ploppers are driving early-season lake reports.\", category: \"fishing\", url: \"https://www.fieldandstream.com/fishing/\" },\n  { id: \"elk-calling-clinics\", title: \"Elk calling clinics are filling up before fall draw results drop\", summary: \"Instructional events out West are booking fast as hunters prep bugles and location setups for September.\", category: \"hunting\", url: \"https://www.outdoorlife.com/hunting/elk-hunting/\" },\n  { id: \"catfish-tournament-circuit\", title: \"Catfish tournament circuits are adding new river stops in 2026\", summary: \"Flathead and blue cat events are expanding on major river systems with growing prize pools and livestreams.\", category: \"fishing\", url: \"https://www.fieldandstream.com/fishing/\" },\n  { id: \"hunting-apparel-layers\", title: \"Layering systems for unpredictable spring hunts keep trending\", summary: \"Hunters want quiet soft shells and packable insulation that handles 30-degree swings in a single day.\", category: \"gear\", url: \"https://www.outdoorlife.com/gear/\" },\n  { id: \"salmon-river-steelhead\", title: \"Pacific Northwest steelhead returns are a major forum topic\", summary: \"Conservation groups and anglers are tracking run forecasts and river closures on key salmonid systems.\", category: \"news\", url: \"https://www.fieldandstream.com/fishing/\" },\n  { id: \"bear-hunt-bait-vs-spot\", title: \"Bear hunters are debating bait versus spot-and-stalk strategies\", summary: \"Spring bear seasons open with different regulations by province and state, shaping how hunters plan trips.\", category: \"hunting\", url: \"https://www.outdoorlife.com/hunting/bear-hunting/\" },\n  { id: \"largemouth-frog-fishing\", title: \"Frog fishing around lily pads is already getting highlight reels\", summary: \"Topwater frog bites pick up as bass move shallow and vegetation thickens on southern lakes.\", category: \"fishing\", url: \"https://www.fieldandstream.com/fishing/bass-fishing/\" },\n  { id: \"access-land-trust-deals\", title: \"New public access land deals are big news for DIY hunters\", summary: \"Sportsmen groups announced additional easements opening thousands of acres for walk-in hunting this fall.\", category: \"news\", url: \"https://www.onxmaps.com/onx-access-initiatives\" },\n  { id: \"ice-off-trout-lakes\", title: \"Ice-off trout lakes in the Rockies are on every fly box list\", summary: \"Anglers watch shoreline melt and inlet channels for the first hungry rainbows and cutthroats of the year.\", category: \"locations\", url: \"https://www.fieldandstream.com/fishing/fly-fishing/\" },\n  { id: \"tree-saddle-hunting\", title: \"Saddle hunting setups keep gaining converts in whitetail country\", summary: \"Mobile hunters like lightweight platforms and lineman-style mobility for public-land trees.\", category: \"gear\", url: \"https://www.outdoorlife.com/hunting/\" },\n  { id: \"speckled-trout-louisiana\", title: \"Louisiana speckled trout reports are lighting up inshore chats\", summary: \"Spring patterns around passes and oyster reefs are producing consistent keeper-size fish on soft plastics.\", category: \"locations\", url: \"https://www.fieldandstream.com/fishing/saltwater-fishing/\" },\n  { id: \"wild-pig-population-control\", title: \"Wild pig control efforts are expanding across the South\", summary: \"States are combining night hunting rules and trap incentives to reduce crop damage and habitat loss.\", category: \"news\", url: \"https://www.outdoorlife.com/hunting/wild-pig-hunting/\" },\n  { id: \"walleye-jigging-wind\", title: \"Walleye jigging in wind is this week's great lakes debate\", summary: \"Drift speeds and blade baits versus live bait rigs dominate reports from Lake Erie and Lake Winnebago.\", category: \"fishing\", url: \"https://www.fieldandstream.com/fishing/\" },\n];\n\ntype CacheEntry = {\n  topics: ScuttlebuttTopic[];\n  expiresAt: number;\n};\n\nlet cache: CacheEntry | null = null;\n\nconst VALID_CATEGORIES = new Set<ScuttlebuttCategory>([\n  \"gear\",\n  \"fishing\",\n  \"hunting\",\n  \"locations\",\n  \"news\",\n]);\n\nfunction slugify(text: string): string {\n  return text\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \"-\")\n    .replace(/^-+|-+$/g, \"\")\n    .slice(0, 80);\n}\n\nfunction isSafeUrl(value: string): boolean {\n  try {\n    const url = new URL(value);\n    return url.protocol === \"https:\";\n  } catch {\n    return false;\n  }\n}\n\nfunction normalizeTopic(raw: unknown, index: number): ScuttlebuttTopic | null {\n  if (!raw || typeof raw !== \"object\") return null;\n  const row = raw as Record<string, unknown>;\n\n  const title = typeof row.title === \"string\" ? row.title.trim() : \"\";\n  const summary = typeof row.summary === \"string\" ? row.summary.trim() : \"\";\n  const url = typeof row.url === \"string\" ? row.url.trim() : \"\";\n  const categoryRaw = typeof row.category === \"string\" ? row.category.trim() : \"news\";\n  const category = VALID_CATEGORIES.has(categoryRaw as ScuttlebuttCategory)\n    ? (categoryRaw as ScuttlebuttCategory)\n    : \"news\";\n\n  if (!title || !summary || !isSafeUrl(url)) return null;\n\n  const id =\n    (typeof row.id === \"string\" && row.id.trim()) ||\n    slugify(title) ||\n    `topic-${index + 1}`;\n\n  return { id: slugify(id) || `topic-${index + 1}`, title, summary, category, url };\n}\n\nfunction sanitizeJsonText(raw: string): string {\n  return raw\n    .replace(/```json\\s*/gi, \"\")\n    .replace(/```/g, \"\")\n    .replace(/[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F]/g, \" \");\n}\n\nfunction parseTopics(raw: string): ScuttlebuttTopic[] {\n  const trimmed = sanitizeJsonText(raw.trim());\n  const jsonMatch = trimmed.match(/\\[[\\s\\S]*\\]/);\n  const candidate = jsonMatch?.[0] ?? trimmed;\n\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(candidate);\n  } catch {\n    // Gemini sometimes embeds raw newlines inside string values.\n    parsed = JSON.parse(candidate.replace(/[\\r\\n\\t]/g, \" \"));\n  }\n\n  if (!Array.isArray(parsed)) {\n    throw new Error(\"Gemini response was not a JSON array\");\n  }\n\n  const topics = parsed\n    .map((item, index) => normalizeTopic(item, index))\n    .filter((item): item is ScuttlebuttTopic => item !== null);\n\n  const deduped = new Map<string, ScuttlebuttTopic>();\n  for (const topic of topics) {\n    if (!deduped.has(topic.id)) deduped.set(topic.id, topic);\n  }\n\n  const unique = [...deduped.values()];\n  if (unique.length < SCUTTLEBUTT_MIN_COUNT) {\n    throw new Error(`Gemini returned fewer than ${SCUTTLEBUTT_MIN_COUNT} topics`);\n  }\n\n  return unique.slice(0, SCUTTLEBUTT_TARGET_COUNT);\n}\n\nasync function fetchGroundedTopics(): Promise<ScuttlebuttTopic[]> {\n  const model = getGemini().getGenerativeModel({\n    model: MODEL,\n    tools: [{ googleSearch: {} }],\n    generationConfig: {\n      maxOutputTokens: 8192,\n    },\n  } as never);\n\n  const timeoutMs = 55000;\n  const result = await Promise.race([\n    model.generateContent(PROMPT),\n    new Promise<never>((_, reject) => {\n      setTimeout(() => reject(new Error(\"Gemini request timed out\")), timeoutMs);\n    }),\n  ]);\n\n  const text = result.response.text();\n  return parseTopics(text);\n}\n\nasync function getTopics(): Promise<{ topics: ScuttlebuttTopic[]; cached: boolean; source: string }> {\n  const now = Date.now();\n  if (cache && cache.expiresAt > now) {\n    return { topics: cache.topics, cached: true, source: \"cache\" };\n  }\n\n  try {\n    const topics = await fetchGroundedTopics();\n    cache = { topics, expiresAt: now + REVALIDATE_SECONDS * 1000 };\n    return { topics, cached: false, source: \"gemini\" };\n  } catch (err) {\n    if (cache) {\n      return { topics: cache.topics, cached: true, source: \"cache\" };\n    }\n    console.error(\"[scuttlebutt] Gemini fetch failed, using fallback:\", err);\n    return { topics: FALLBACK_TOPICS, cached: false, source: \"fallback\" };\n  }\n}\n\nconst router: IRouter = Router();\n\nrouter.get(\"/\", async (_req: Request, res: Response) => {\n  if (!process.env.GEMINI_API_KEY?.trim()) {\n    res.setHeader(\"Cache-Control\", `public, s-maxage=${REVALIDATE_SECONDS}, stale-while-revalidate=3600`);\n    res.json({ topics: FALLBACK_TOPICS, cached: false, source: \"fallback\" });\n    return;\n  }\n\n  const { topics, cached, source } = await getTopics();\n\n  res.setHeader(\"Cache-Control\", `public, s-maxage=${REVALIDATE_SECONDS}, stale-while-revalidate=3600`);\n  res.json({ topics, cached, source });\n});\n\nrouter.get(\"/:id\", async (req: Request, res: Response) => {\n  const id = typeof req.params.id === \"string\" ? req.params.id.trim() : \"\";\n  if (!id) {\n    res.status(400).json({ error: \"Missing topic id\" });\n    return;\n  }\n\n  const topicsResult = process.env.GEMINI_API_KEY?.trim()\n    ? await getTopics()\n    : { topics: FALLBACK_TOPICS, cached: false, source: \"fallback\" };\n  const { topics } = topicsResult;\n\n  const topic = topics.find((item) => item.id === id);\n  if (!topic) {\n    res.status(404).json({ error: \"Topic not found\" });\n    return;\n  }\n\n  res.setHeader(\"Cache-Control\", `public, s-maxage=${REVALIDATE_SECONDS}, stale-while-revalidate=3600`);\n  res.json({ topic });\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { randomUUID } from \"node:crypto\";\nimport { db } from \"@workspace/db\";\nimport {\n  chatConversationsTable,\n  chatConversationParticipantsTable,\n  chatMessagesTable,\n  chatMessageAttachmentsTable,\n  GLOBAL_CAMPFIRE_CONVERSATION_ID,\n  user as usersTable,\n} from \"@workspace/db/schema\";\nimport { and, desc, eq, gt, inArray, lt, ne, or, sql, count } from \"drizzle-orm\";\nimport { getSessionUser, requireAuth } from \"../lib/authMiddleware\";\nimport { privateObjectKey, r2PresignUrl, r2PutObject } from \"../lib/r2\";\n\nconst router: IRouter = Router();\n\nconst messageRateMap = new Map<string, number[]>();\nconst MESSAGE_RATE_LIMIT = 120;\nconst MESSAGE_RATE_WINDOW_MS = 3_600_000;\n\nfunction isMessageRateLimited(userId: string): boolean {\n  const now = Date.now();\n  const hits = (messageRateMap.get(userId) ?? []).filter(\n    (t) => now - t < MESSAGE_RATE_WINDOW_MS,\n  );\n  hits.push(now);\n  messageRateMap.set(userId, hits);\n  return hits.length > MESSAGE_RATE_LIMIT;\n}\n\nfunction formatRelativeTime(date: Date | null): string {\n  if (!date) return \"\";\n  const diffMs = Date.now() - date.getTime();\n  const mins = Math.floor(diffMs / 60_000);\n  if (mins < 1) return \"Just now\";\n  if (mins < 60) return `${mins}m ago`;\n  const hrs = Math.floor(mins / 60);\n  if (hrs < 24) return `${hrs}h ago`;\n  return `${Math.floor(hrs / 24)}d ago`;\n}\n\nfunction formatMessageTime(date: Date): string {\n  return date.toLocaleTimeString(\"en-US\", {\n    hour: \"numeric\",\n    minute: \"2-digit\",\n    hour12: true,\n  });\n}\n\nasync function isParticipant(conversationId: string, userId: string): Promise<boolean> {\n  const [row] = await db\n    .select({ id: chatConversationParticipantsTable.id })\n    .from(chatConversationParticipantsTable)\n    .where(\n      and(\n        eq(chatConversationParticipantsTable.conversationId, conversationId),\n        eq(chatConversationParticipantsTable.userId, userId),\n      ),\n    )\n    .limit(1);\n  return !!row;\n}\n\nasync function assertCanAccessConversation(\n  conversationId: string,\n  userId: string,\n): Promise<typeof chatConversationsTable.$inferSelect | null> {\n  const [conv] = await db\n    .select()\n    .from(chatConversationsTable)\n    .where(eq(chatConversationsTable.id, conversationId))\n    .limit(1);\n  if (!conv) return null;\n  if (conv.type === \"GLOBAL_CAMPFIRE\") return conv;\n  if (await isParticipant(conversationId, userId)) return conv;\n  return null;\n}\n\nasync function findExistingDmConversation(\n  userA: string,\n  userB: string,\n): Promise<string | null> {\n  const rows = await db\n    .select({\n      conversationId: chatConversationParticipantsTable.conversationId,\n      userId: chatConversationParticipantsTable.userId,\n    })\n    .from(chatConversationParticipantsTable)\n    .innerJoin(\n      chatConversationsTable,\n      eq(chatConversationParticipantsTable.conversationId, chatConversationsTable.id),\n    )\n    .where(\n      and(\n        eq(chatConversationsTable.type, \"DIRECT_MESSAGE\"),\n        inArray(chatConversationParticipantsTable.userId, [userA, userB]),\n      ),\n    );\n\n  const byConv = new Map<string, Set<string>>();\n  for (const row of rows) {\n    const set = byConv.get(row.conversationId) ?? new Set<string>();\n    set.add(row.userId);\n    byConv.set(row.conversationId, set);\n  }\n\n  for (const [convId, users] of byConv) {\n    if (users.has(userA) && users.has(userB)) return convId;\n  }\n  return null;\n}\n\nrouter.get(\"/\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n\n  try {\n    const [globalConv] = await db\n      .select()\n      .from(chatConversationsTable)\n      .where(eq(chatConversationsTable.id, GLOBAL_CAMPFIRE_CONVERSATION_ID))\n      .limit(1);\n\n    const participantRows = await db\n      .select({ conversationId: chatConversationParticipantsTable.conversationId })\n      .from(chatConversationParticipantsTable)\n      .where(eq(chatConversationParticipantsTable.userId, userId));\n\n    const dmIds = participantRows.map((r) => r.conversationId);\n    const dmConversations =\n      dmIds.length > 0\n        ? await db\n            .select()\n            .from(chatConversationsTable)\n            .where(\n              and(\n                eq(chatConversationsTable.type, \"DIRECT_MESSAGE\"),\n                inArray(chatConversationsTable.id, dmIds),\n              ),\n            )\n            .orderBy(desc(chatConversationsTable.lastMessageAt))\n        : [];\n\n    const allConversations = [\n      ...(globalConv ? [globalConv] : []),\n      ...dmConversations,\n    ];\n\n    const enriched = await Promise.all(\n      allConversations.map(async (conv) => {\n        const isGlobal = conv.type === \"GLOBAL_CAMPFIRE\";\n\n        let otherUserId: string | null = null;\n        let otherUserName = conv.title ?? \"Campfire Global\";\n        let isOutfitter = false;\n\n        if (!isGlobal) {\n          const participants = await db\n            .select({ userId: chatConversationParticipantsTable.userId })\n            .from(chatConversationParticipantsTable)\n            .where(eq(chatConversationParticipantsTable.conversationId, conv.id));\n\n          otherUserId =\n            participants.find((p) => p.userId !== userId)?.userId ?? null;\n\n          if (otherUserId) {\n            const [otherUser] = await db\n              .select({\n                name: usersTable.name,\n                email: usersTable.email,\n                role: usersTable.role,\n              })\n              .from(usersTable)\n              .where(eq(usersTable.id, otherUserId))\n              .limit(1);\n            otherUserName =\n              otherUser?.name ?? otherUser?.email?.split(\"@\")[0] ?? \"User\";\n            isOutfitter = otherUser?.role === \"outfitter\";\n          }\n        }\n\n        const [lastMsg] = await db\n          .select({ text: chatMessagesTable.text })\n          .from(chatMessagesTable)\n          .where(eq(chatMessagesTable.conversationId, conv.id))\n          .orderBy(desc(chatMessagesTable.createdAt))\n          .limit(1);\n\n        const [readRow] = await db\n          .select({ lastReadAt: chatConversationParticipantsTable.lastReadAt })\n          .from(chatConversationParticipantsTable)\n          .where(\n            and(\n              eq(chatConversationParticipantsTable.conversationId, conv.id),\n              eq(chatConversationParticipantsTable.userId, userId),\n            ),\n          )\n          .limit(1);\n\n        const lastReadAt = readRow?.lastReadAt ?? new Date(0);\n        const [unreadRow] = await db\n          .select({ cnt: count(chatMessagesTable.id) })\n          .from(chatMessagesTable)\n          .where(\n            and(\n              eq(chatMessagesTable.conversationId, conv.id),\n              gt(chatMessagesTable.createdAt, lastReadAt),\n              ne(chatMessagesTable.senderId, userId),\n            ),\n          );\n\n        return {\n          id: conv.id,\n          type: conv.type,\n          title: isGlobal ? \"Campfire Global\" : otherUserName,\n          otherUserId,\n          otherUserName,\n          lastMessage: lastMsg?.text ?? \"\",\n          timestamp: formatRelativeTime(conv.lastMessageAt),\n          unread: Number(unreadRow?.cnt ?? 0),\n          isOutfitter,\n          isGlobal,\n        };\n      }),\n    );\n\n    res.json({ conversations: enriched });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to list campfire conversations\");\n    res.status(500).json({ error: \"Failed to list conversations\" });\n  }\n});\n\nrouter.post(\"/dm\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const otherUserId = (req.body as { otherUserId?: string }).otherUserId?.trim();\n\n  if (!otherUserId || otherUserId === userId) {\n    res.status(400).json({ error: \"otherUserId is required\" });\n    return;\n  }\n\n  try {\n    const [otherUser] = await db\n      .select({ id: usersTable.id })\n      .from(usersTable)\n      .where(eq(usersTable.id, otherUserId))\n      .limit(1);\n    if (!otherUser) {\n      res.status(404).json({ error: \"User not found\" });\n      return;\n    }\n\n    const existingId = await findExistingDmConversation(userId, otherUserId);\n    if (existingId) {\n      res.json({ conversation: { id: existingId, type: \"DIRECT_MESSAGE\" } });\n      return;\n    }\n\n    const [created] = await db\n      .insert(chatConversationsTable)\n      .values({ type: \"DIRECT_MESSAGE\" })\n      .returning();\n\n    await db.insert(chatConversationParticipantsTable).values([\n      { conversationId: created!.id, userId },\n      { conversationId: created!.id, userId: otherUserId },\n    ]);\n\n    res.status(201).json({\n      conversation: { id: created!.id, type: \"DIRECT_MESSAGE\" },\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to create DM conversation\");\n    res.status(500).json({ error: \"Failed to create conversation\" });\n  }\n});\n\nrouter.get(\"/users/search\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const q = typeof req.query.q === \"string\" ? req.query.q.trim().toLowerCase() : \"\";\n\n  if (q.length < 2) {\n    res.json({ users: [] });\n    return;\n  }\n\n  try {\n    const pattern = `%${q}%`;\n    const rows = await db\n      .select({\n        id: usersTable.id,\n        name: usersTable.name,\n        email: usersTable.email,\n        image: usersTable.image,\n        role: usersTable.role,\n      })\n      .from(usersTable)\n      .where(\n        and(\n          ne(usersTable.id, userId),\n          or(\n            sql`lower(${usersTable.name}) like ${pattern}`,\n            sql`lower(${usersTable.email}) like ${pattern}`,\n          ),\n        ),\n      )\n      .limit(20);\n\n    res.json({\n      users: rows.map((u) => ({\n        id: u.id,\n        name: u.name ?? \"User\",\n        handle: u.email ? `@${u.email.split(\"@\")[0]}` : \"@user\",\n        avatarUrl: u.image ?? null,\n        role: u.role ?? \"user\",\n      })),\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to search users\");\n    res.status(500).json({ error: \"Failed to search users\" });\n  }\n});\n\nrouter.post(\"/upload-image\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const body = req.body as { imageBase64?: string; mimeType?: string; fileName?: string };\n  const raw = body.imageBase64?.trim();\n\n  if (!raw) {\n    res.status(400).json({ error: \"imageBase64 is required\" });\n    return;\n  }\n\n  const mimeType = body.mimeType?.trim() || \"image/jpeg\";\n  if (!/^image\\/(jpeg|jpg|png|webp|gif)$/i.test(mimeType)) {\n    res.status(400).json({ error: \"Unsupported image type\" });\n    return;\n  }\n\n  let buffer: Buffer;\n  try {\n    const b64 = raw.includes(\",\") ? raw.split(\",\")[1]! : raw;\n    buffer = Buffer.from(b64, \"base64\");\n    if (buffer.length < 16 || buffer.length > 8 * 1024 * 1024) {\n      res.status(400).json({ error: \"Image must be between 16 bytes and 8 MB\" });\n      return;\n    }\n  } catch {\n    res.status(400).json({ error: \"Invalid base64 image\" });\n    return;\n  }\n\n  const imageId = randomUUID();\n  const ext = mimeType.includes(\"png\")\n    ? \"png\"\n    : mimeType.includes(\"webp\")\n      ? \"webp\"\n      : mimeType.includes(\"gif\")\n        ? \"gif\"\n        : \"jpg\";\n  const key = privateObjectKey(`campfire/${userId}/${imageId}.${ext}`);\n\n  try {\n    await r2PutObject(key, buffer, mimeType);\n    const url = await r2PresignUrl(key, \"GET\", 7 * 24 * 3600);\n    res.status(201).json({\n      url,\n      mimeType,\n      fileName: body.fileName?.trim() || `photo.${ext}`,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"campfire image upload failed\");\n    res.status(500).json({ error: \"Failed to upload image\" });\n  }\n});\n\nrouter.get(\"/:id/messages\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const conversationId = (req.params as { id: string }).id;\n  const before = typeof req.query.before === \"string\" ? req.query.before : undefined;\n\n  const conv = await assertCanAccessConversation(conversationId, userId);\n  if (!conv) {\n    res.status(404).json({ error: \"Conversation not found\" });\n    return;\n  }\n\n  try {\n    const conditions = [eq(chatMessagesTable.conversationId, conversationId)];\n    if (before) {\n      const beforeDate = new Date(before);\n      if (!Number.isNaN(beforeDate.getTime())) {\n        conditions.push(lt(chatMessagesTable.createdAt, beforeDate));\n      }\n    }\n\n    const rows = await db\n      .select()\n      .from(chatMessagesTable)\n      .where(and(...conditions))\n      .orderBy(desc(chatMessagesTable.createdAt))\n      .limit(50);\n\n    const messageIds = rows.map((m) => m.id);\n    const attachments =\n      messageIds.length > 0\n        ? await db\n            .select()\n            .from(chatMessageAttachmentsTable)\n            .where(inArray(chatMessageAttachmentsTable.messageId, messageIds))\n        : [];\n\n    const attachmentsByMessage = new Map<string, typeof attachments>();\n    for (const att of attachments) {\n      const list = attachmentsByMessage.get(att.messageId) ?? [];\n      list.push(att);\n      attachmentsByMessage.set(att.messageId, list);\n    }\n\n    const senderIds = [...new Set(rows.map((m) => m.senderId))];\n    const senders =\n      senderIds.length > 0\n        ? await db\n            .select({ id: usersTable.id, name: usersTable.name, email: usersTable.email })\n            .from(usersTable)\n            .where(inArray(usersTable.id, senderIds))\n        : [];\n    const senderNameById = new Map(\n      senders.map((s) => [\n        s.id,\n        s.name ?? s.email?.split(\"@\")[0] ?? \"User\",\n      ]),\n    );\n\n    const messages = rows.reverse().map((m) => ({\n      id: m.id,\n      senderId: m.senderId,\n      senderName: senderNameById.get(m.senderId) ?? \"User\",\n      text: m.text,\n      createdAt: m.createdAt.toISOString(),\n      timestamp: formatMessageTime(m.createdAt),\n      isOwn: m.senderId === userId,\n      attachments: (attachmentsByMessage.get(m.id) ?? []).map((a) => ({\n        id: a.id,\n        url: a.url,\n        mimeType: a.mimeType,\n        fileName: a.fileName,\n      })),\n    }));\n\n    res.json({ messages });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to load chat messages\");\n    res.status(500).json({ error: \"Failed to load messages\" });\n  }\n});\n\nrouter.post(\"/:id/messages\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  if (isMessageRateLimited(userId)) {\n    res.status(429).json({ error: \"Too many messages. Try again later.\" });\n    return;\n  }\n\n  const conversationId = (req.params as { id: string }).id;\n  const body = req.body as {\n    text?: string;\n    attachments?: Array<{ url: string; mimeType?: string; fileName?: string }>;\n  };\n  const text = body.text?.trim() ?? \"\";\n  const attachments = Array.isArray(body.attachments) ? body.attachments : [];\n\n  if (!text && attachments.length === 0) {\n    res.status(400).json({ error: \"Message text or attachment required\" });\n    return;\n  }\n  if (text.length > 2000) {\n    res.status(400).json({ error: \"Message max 2000 characters\" });\n    return;\n  }\n  if (attachments.length > 4) {\n    res.status(400).json({ error: \"Max 4 attachments per message\" });\n    return;\n  }\n\n  const conv = await assertCanAccessConversation(conversationId, userId);\n  if (!conv) {\n    res.status(404).json({ error: \"Conversation not found\" });\n    return;\n  }\n\n  try {\n    if (conv.type === \"GLOBAL_CAMPFIRE\") {\n      const existing = await isParticipant(conversationId, userId);\n      if (!existing) {\n        await db.insert(chatConversationParticipantsTable).values({\n          conversationId,\n          userId,\n          lastReadAt: new Date(),\n        });\n      }\n    }\n\n    const [inserted] = await db\n      .insert(chatMessagesTable)\n      .values({ conversationId, senderId: userId, text })\n      .returning();\n\n    if (attachments.length > 0) {\n      await db.insert(chatMessageAttachmentsTable).values(\n        attachments.map((a) => ({\n          messageId: inserted!.id,\n          url: a.url,\n          mimeType: a.mimeType ?? null,\n          fileName: a.fileName ?? null,\n        })),\n      );\n    }\n\n    await db\n      .update(chatConversationsTable)\n      .set({ lastMessageAt: inserted!.createdAt })\n      .where(eq(chatConversationsTable.id, conversationId));\n\n    await db\n      .insert(chatConversationParticipantsTable)\n      .values({\n        conversationId,\n        userId,\n        lastReadAt: inserted!.createdAt,\n      })\n      .onConflictDoUpdate({\n        target: [\n          chatConversationParticipantsTable.conversationId,\n          chatConversationParticipantsTable.userId,\n        ],\n        set: { lastReadAt: inserted!.createdAt },\n      });\n\n    const [sender] = await db\n      .select({ name: usersTable.name, email: usersTable.email })\n      .from(usersTable)\n      .where(eq(usersTable.id, userId))\n      .limit(1);\n\n    res.status(201).json({\n      message: {\n        id: inserted!.id,\n        senderId: inserted!.senderId,\n        senderName: sender?.name ?? sender?.email?.split(\"@\")[0] ?? \"User\",\n        text: inserted!.text,\n        createdAt: inserted!.createdAt.toISOString(),\n        timestamp: formatMessageTime(inserted!.createdAt),\n        isOwn: true,\n        attachments: attachments.map((a, i) => ({\n          id: `pending-${i}`,\n          url: a.url,\n          mimeType: a.mimeType ?? null,\n          fileName: a.fileName ?? null,\n        })),\n      },\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to send chat message\");\n    res.status(500).json({ error: \"Failed to send message\" });\n  }\n});\n\nrouter.post(\"/:id/read\", requireAuth, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const conversationId = (req.params as { id: string }).id;\n\n  const conv = await assertCanAccessConversation(conversationId, userId);\n  if (!conv) {\n    res.status(404).json({ error: \"Conversation not found\" });\n    return;\n  }\n\n  try {\n    await db\n      .insert(chatConversationParticipantsTable)\n      .values({\n        conversationId,\n        userId,\n        lastReadAt: new Date(),\n      })\n      .onConflictDoUpdate({\n        target: [\n          chatConversationParticipantsTable.conversationId,\n          chatConversationParticipantsTable.userId,\n        ],\n        set: { lastReadAt: new Date() },\n      });\n\n    res.json({ ok: true });\n  } catch (err) {\n    req.log?.error({ err }, \"Failed to mark chat read\");\n    res.status(500).json({ error: \"Failed to mark read\" });\n  }\n});\n\nexport default router;\n", "import { Router, type IRouter } from \"express\";\n\nconst router: IRouter = Router();\n\nexport type PressureTrend = \"rising\" | \"falling\" | \"steady\";\nexport type TidePhase = \"incoming\" | \"outgoing\" | \"slack\" | \"unknown\";\n\nexport interface RadarConditionsResponse {\n  lat: number;\n  lon: number;\n  wind: {\n    speedMph: number;\n    directionDeg: number;\n    directionLabel: string;\n  };\n  pressure: {\n    hPa: number;\n    trend: PressureTrend;\n    change3h: number;\n  };\n  marine: {\n    available: boolean;\n    seaSurfaceTempF: number | null;\n    waveHeightFt: number | null;\n    tide: {\n      phase: TidePhase;\n      nextHigh: string | null;\n      nextLow: string | null;\n      stationName: string | null;\n      heightFt: number | null;\n    };\n    waterClarity: \"clear\" | \"moderate\" | \"stained\" | \"unknown\";\n  };\n}\n\nconst COMPASS = [\"N\", \"NNE\", \"NE\", \"ENE\", \"E\", \"ESE\", \"SE\", \"SSE\", \"S\", \"SSW\", \"SW\", \"WSW\", \"W\", \"WNW\", \"NW\", \"NNW\"];\n\nfunction degToCompass(deg: number): string {\n  return COMPASS[Math.round(deg / 22.5) % 16] ?? \"\u2014\";\n}\n\nfunction msToMph(ms: number): number {\n  return Math.round(ms * 2.237);\n}\n\nfunction cToF(c: number): number {\n  return Math.round(c * (9 / 5) + 32);\n}\n\nfunction mToFt(m: number): number {\n  return Math.round(m * 3.281 * 10) / 10;\n}\n\nfunction pressureTrend(current: number, prior: number | null): { trend: PressureTrend; change3h: number } {\n  if (prior == null || !Number.isFinite(prior)) return { trend: \"steady\", change3h: 0 };\n  const change = Math.round((current - prior) * 10) / 10;\n  if (change >= 0.8) return { trend: \"rising\", change3h: change };\n  if (change <= -0.8) return { trend: \"falling\", change3h: change };\n  return { trend: \"steady\", change3h: change };\n}\n\nfunction parseTimeLabel(iso: string, tz: string): string {\n  try {\n    return new Date(iso).toLocaleTimeString(\"en-US\", {\n      hour: \"numeric\",\n      minute: \"2-digit\",\n      hour12: true,\n      timeZone: tz,\n    });\n  } catch {\n    return iso;\n  }\n}\n\nasync function fetchOpenMeteo(lat: number, lon: number) {\n  const url =\n    `https://api.open-meteo.com/v1/forecast?latitude=${lat}&longitude=${lon}` +\n    `&current=wind_speed_10m,wind_direction_10m,surface_pressure,weather_code,precipitation` +\n    `&hourly=surface_pressure&past_hours=3&forecast_hours=1&timezone=auto`;\n\n  const res = await fetch(url, { signal: AbortSignal.timeout(8000) });\n  if (!res.ok) throw new Error(`Open-Meteo ${res.status}`);\n  return res.json() as Promise<{\n    timezone?: string;\n    current?: {\n      wind_speed_10m?: number;\n      wind_direction_10m?: number;\n      surface_pressure?: number;\n      precipitation?: number;\n    };\n    hourly?: { surface_pressure?: number[] };\n  }>;\n}\n\nasync function fetchMarine(lat: number, lon: number) {\n  const url =\n    `https://marine-api.open-meteo.com/v1/marine?latitude=${lat}&longitude=${lon}` +\n    `&current=wave_height,sea_surface_temperature&timezone=auto`;\n\n  const res = await fetch(url, { signal: AbortSignal.timeout(8000) });\n  if (!res.ok) return null;\n  return res.json() as Promise<{\n    current?: { wave_height?: number; sea_surface_temperature?: number };\n  }>;\n}\n\ntype NoaaStation = { id: string; name: string; lat: number; lng: number };\n\nasync function findNearestTideStation(lat: number, lon: number): Promise<NoaaStation | null> {\n  const url =\n    `https://api.tidesandcurrents.noaa.gov/mdapi/prod/webapi/stations.json` +\n    `?type=tidepredictions&lat=${lat}&lon=${lon}&radius=75`;\n\n  const res = await fetch(url, { signal: AbortSignal.timeout(8000) });\n  if (!res.ok) return null;\n  const data = (await res.json()) as { stations?: NoaaStation[] };\n  const stations = data.stations ?? [];\n  if (stations.length === 0) return null;\n\n  let best = stations[0];\n  let bestDist = Infinity;\n  for (const s of stations) {\n    const d = (s.lat - lat) ** 2 + (s.lng - lon) ** 2;\n    if (d < bestDist) {\n      bestDist = d;\n      best = s;\n    }\n  }\n  return best;\n}\n\nasync function fetchTideHilo(stationId: string, dateStr: string) {\n  const compact = dateStr.replace(/-/g, \"\");\n  const nextDay = new Date(`${dateStr}T12:00:00Z`);\n  nextDay.setUTCDate(nextDay.getUTCDate() + 1);\n  const end = nextDay.toISOString().slice(0, 10).replace(/-/g, \"\");\n\n  const url =\n    `https://api.tidesandcurrents.noaa.gov/api/prod/datagetter` +\n    `?begin_date=${compact}&end_date=${end}` +\n    `&station=${stationId}&product=predictions&datum=MLLW&time_zone=lst_ldt&units=english&interval=hilo&format=json`;\n\n  const res = await fetch(url, { signal: AbortSignal.timeout(8000) });\n  if (!res.ok) return null;\n  const data = (await res.json()) as {\n    predictions?: { t: string; v: string; type?: string }[];\n  };\n  return data.predictions ?? null;\n}\n\nfunction analyzeTideHilo(\n  predictions: { t: string; v: string; type?: string }[],\n  tz: string,\n): RadarConditionsResponse[\"marine\"][\"tide\"] {\n  if (predictions.length === 0) {\n    return { phase: \"unknown\", nextHigh: null, nextLow: null, stationName: null, heightFt: null };\n  }\n\n  const now = Date.now();\n  const events = predictions\n    .map((p) => ({\n      time: new Date(p.t).getTime(),\n      height: parseFloat(p.v),\n      label: p.t,\n      type: p.type?.toUpperCase(),\n    }))\n    .filter((p) => Number.isFinite(p.time) && Number.isFinite(p.height))\n    .sort((a, b) => a.time - b.time);\n\n  let lastEvent: (typeof events)[number] | null = null;\n  let nextHigh: string | null = null;\n  let nextLow: string | null = null;\n\n  for (const event of events) {\n    if (event.time <= now) {\n      lastEvent = event;\n      continue;\n    }\n    if (event.type === \"H\" && !nextHigh) nextHigh = parseTimeLabel(event.label, tz);\n    if (event.type === \"L\" && !nextLow) nextLow = parseTimeLabel(event.label, tz);\n  }\n\n  let phase: TidePhase = \"unknown\";\n  if (lastEvent?.type === \"L\") phase = \"incoming\";\n  else if (lastEvent?.type === \"H\") phase = \"outgoing\";\n\n  return {\n    phase,\n    nextHigh,\n    nextLow,\n    stationName: null,\n    heightFt: lastEvent ? Math.round(lastEvent.height * 10) / 10 : null,\n  };\n}\n\nfunction estimateWaterClarity(precipMm: number | undefined): RadarConditionsResponse[\"marine\"][\"waterClarity\"] {\n  if (precipMm == null) return \"unknown\";\n  if (precipMm >= 2) return \"stained\";\n  if (precipMm >= 0.5) return \"moderate\";\n  return \"clear\";\n}\n\nrouter.get(\"/\", async (req, res) => {\n  const lat = parseFloat(req.query.lat as string);\n  const lon = parseFloat(req.query.lon as string);\n\n  if (isNaN(lat) || isNaN(lon)) {\n    return res.status(400).json({ error: \"lat and lon are required\" });\n  }\n\n  try {\n    const [meteo, marine] = await Promise.all([\n      fetchOpenMeteo(lat, lon),\n      fetchMarine(lat, lon),\n    ]);\n\n    const tz = meteo.timezone ?? \"UTC\";\n    const current = meteo.current ?? {};\n    const hourlyPressure = meteo.hourly?.surface_pressure ?? [];\n    const priorPressure = hourlyPressure.length > 0 ? hourlyPressure[0] : null;\n    const currentPressure = current.surface_pressure ?? priorPressure ?? 1013;\n    const { trend, change3h } = pressureTrend(currentPressure, priorPressure);\n\n    const windSpeed = current.wind_speed_10m ?? 0;\n    const windDir = current.wind_direction_10m ?? 0;\n\n    let tideInfo: RadarConditionsResponse[\"marine\"][\"tide\"] = {\n      phase: \"unknown\",\n      nextHigh: null,\n      nextLow: null,\n      stationName: null,\n      heightFt: null,\n    };\n\n    const station = await findNearestTideStation(lat, lon);\n    if (station) {\n      const today = new Date().toISOString().slice(0, 10);\n      const predictions = await fetchTideHilo(station.id, today);\n      if (predictions) {\n        tideInfo = analyzeTideHilo(predictions, tz);\n        tideInfo.stationName = station.name;\n      }\n    }\n\n    const sst = marine?.current?.sea_surface_temperature;\n    const wave = marine?.current?.wave_height;\n\n    const payload: RadarConditionsResponse = {\n      lat,\n      lon,\n      wind: {\n        speedMph: msToMph(windSpeed),\n        directionDeg: Math.round(windDir),\n        directionLabel: degToCompass(windDir),\n      },\n      pressure: {\n        hPa: Math.round(currentPressure * 10) / 10,\n        trend,\n        change3h,\n      },\n      marine: {\n        available: sst != null || wave != null || tideInfo.phase !== \"unknown\",\n        seaSurfaceTempF: sst != null ? cToF(sst) : null,\n        waveHeightFt: wave != null ? mToFt(wave) : null,\n        tide: tideInfo,\n        waterClarity: estimateWaterClarity(current.precipitation),\n      },\n    };\n\n    return res.json(payload);\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : \"Failed to load conditions\";\n    return res.status(502).json({ error: msg });\n  }\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { getGemini } from \"../lib/ai\";\n\nconst router: IRouter = Router();\nconst MODEL = \"gemini-2.5-flash\";\n\nexport type SpeciesMode = \"hunting\" | \"fishing\";\n\nexport interface RadarAdvisorRequest {\n  mode: SpeciesMode;\n  placeLabel?: string;\n  lat: number;\n  lon: number;\n  solunar: {\n    score: number;\n    rating: string;\n    phaseName: string;\n    illumination: number;\n    activePhase: string | null;\n    nextWindow: string | null;\n    feedingWindows: { type: string; label: string; start: string; end: string }[];\n    sunrise: string;\n    sunset: string;\n  };\n  conditions: {\n    windSpeedMph: number;\n    windDirection: string;\n    pressureHpa: number;\n    pressureTrend: string;\n    seaSurfaceTempF?: number | null;\n    waveHeightFt?: number | null;\n    tidePhase?: string;\n    waterClarity?: string;\n  };\n}\n\nconst HUNTING_SYSTEM = `You are a ruthless whitetail and bowhunting tactical advisor for Hook N Bone Radar.\nGiven live solunar, wind, and barometric data, output exactly TWO sentences \u2014 no fluff, no disclaimers.\nSentence 1: State the highest-impact environmental factor right now (pressure trend, wind, or solunar window).\nSentence 2: Give one specific setup or movement directive (stand placement, wind strategy, timing).\nUse compass wind directions. Be direct like a seasoned guide. Max 55 words total. Plain text only.`;\n\nconst FISHING_SYSTEM = `You are a ruthless offshore and inshore fishing tactical advisor for Hook N Bone Radar.\nGiven live solunar, tide, SST, and wave data, output exactly TWO sentences \u2014 no fluff, no disclaimers.\nSentence 1: State the highest-impact environmental factor right now (tide phase, solunar window, SST break, or barometric shift).\nSentence 2: Give one specific movement or presentation directive (where to run, what to target, timing).\nBe direct like a charter captain. Max 55 words total. Plain text only.`;\n\nfunction buildFallback(body: RadarAdvisorRequest): string {\n  const { mode, solunar, conditions } = body;\n  const window = solunar.nextWindow ?? \"the next major window\";\n  if (mode === \"hunting\") {\n    const wind = `${conditions.windDirection} at ${conditions.windSpeedMph} mph`;\n    const pressure =\n      conditions.pressureTrend === \"falling\"\n        ? \"Pressure is dropping ahead of the front\"\n        : conditions.pressureTrend === \"rising\"\n          ? \"Pressure is building and should lock animals down briefly before movement\"\n          : \"Pressure is holding steady\";\n    return `${pressure} with ${wind} on a ${solunar.rating.toLowerCase()} ${solunar.score}% solunar day. Work the downwind edge of cover and be set before ${window}.`;\n  }\n  const tide = conditions.tidePhase ?? \"unknown tide\";\n  const sst = conditions.seaSurfaceTempF != null ? `${conditions.seaSurfaceTempF}\u00B0F SST` : \"local water temps\";\n  return `${tide.charAt(0).toUpperCase() + tide.slice(1)} tide on a ${solunar.rating.toLowerCase()} solunar day with ${sst}. Push to temperature breaks and fish aggressively through ${window}.`;\n}\n\nfunction buildUserPrompt(body: RadarAdvisorRequest): string {\n  const windows = body.solunar.feedingWindows\n    .map((w) => `${w.type.toUpperCase()} ${w.label}: ${w.start}\u2013${w.end}`)\n    .join(\"; \");\n\n  return JSON.stringify(\n    {\n      location: body.placeLabel ?? `${body.lat.toFixed(4)}, ${body.lon.toFixed(4)}`,\n      mode: body.mode,\n      solunar: {\n        score: body.solunar.score,\n        rating: body.solunar.rating,\n        moon: `${body.solunar.phaseName} (${body.solunar.illumination}% illuminated)`,\n        activePhase: body.solunar.activePhase,\n        nextWindow: body.solunar.nextWindow,\n        sunrise: body.solunar.sunrise,\n        sunset: body.solunar.sunset,\n        windows,\n      },\n      conditions: body.conditions,\n    },\n    null,\n    2,\n  );\n}\n\nrouter.post(\"/\", async (req: Request, res: Response) => {\n  const body = req.body as RadarAdvisorRequest;\n\n  if (!body?.mode || !body.solunar || !body.conditions) {\n    return res.status(400).json({ error: \"mode, solunar, and conditions are required\" });\n  }\n  if (isNaN(body.lat) || isNaN(body.lon)) {\n    return res.status(400).json({ error: \"lat and lon are required\" });\n  }\n\n  const systemInstruction = body.mode === \"fishing\" ? FISHING_SYSTEM : HUNTING_SYSTEM;\n  const userPrompt = buildUserPrompt(body);\n\n  try {\n    const model = getGemini().getGenerativeModel({\n      model: MODEL,\n      systemInstruction,\n      generationConfig: { maxOutputTokens: 180, temperature: 0.7 },\n    });\n\n    const result = await model.generateContent([{ text: userPrompt }]);\n    const directive = result.response.text().trim().replace(/^[\"']|[\"']$/g, \"\");\n\n    if (!directive) {\n      return res.json({ directive: buildFallback(body), source: \"fallback\" });\n    }\n\n    return res.json({ directive, source: \"gemini\" });\n  } catch {\n    return res.json({ directive: buildFallback(body), source: \"fallback\" });\n  }\n});\n\nexport default router;\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { db } from \"@workspace/db\";\nimport {\n  analyticsEventsTable,\n  analyticsWebVitalsTable,\n} from \"@workspace/db/schema\";\nimport { getSessionUser } from \"../lib/authMiddleware\";\nimport { shouldSkipAnalytics } from \"../lib/analyticsBotFilter\";\n\nconst router: IRouter = Router();\n\nconst MAX_BATCH = 50;\nconst MAX_PATH_LEN = 512;\nconst MAX_STRING = 2048;\n\ninterface IngestEvent {\n  id: string;\n  sessionId: string;\n  type: string;\n  pagePath: string;\n  referrer?: string;\n  utmSource?: string;\n  utmMedium?: string;\n  utmCampaign?: string;\n  scrollDepth?: number;\n  durationMs?: number;\n  metadata?: Record<string, unknown>;\n}\n\ninterface IngestVitals {\n  id: string;\n  sessionId: string;\n  pagePath: string;\n  lcp?: number;\n  fid?: number;\n  cls?: number;\n  ttfb?: number;\n  inp?: number;\n}\n\ninterface IngestBody {\n  events?: IngestEvent[];\n  vitals?: IngestVitals[];\n}\n\nfunction sanitizePath(path: string): string {\n  const trimmed = path.slice(0, MAX_PATH_LEN);\n  if (!trimmed.startsWith(\"/\")) return `/${trimmed}`;\n  return trimmed;\n}\n\nfunction sanitizeString(val: string | undefined, max = MAX_STRING): string | null {\n  if (!val) return null;\n  return val.slice(0, max);\n}\n\nfunction isValidId(id: unknown): id is string {\n  return typeof id === \"string\" && id.length >= 8 && id.length <= 64;\n}\n\nrouter.post(\"/ingest\", async (req: Request, res: Response) => {\n  try {\n    const body = req.body as IngestBody;\n    const events = Array.isArray(body.events) ? body.events.slice(0, MAX_BATCH) : [];\n    const vitals = Array.isArray(body.vitals) ? body.vitals.slice(0, MAX_BATCH) : [];\n\n    if (events.length === 0 && vitals.length === 0) {\n      res.status(400).json({ error: \"No events provided\" });\n      return;\n    }\n\n    const userAgent = req.headers[\"user-agent\"] ?? null;\n    const sessionUser = getSessionUser(req);\n    const isAdmin =\n      sessionUser?.role === \"admin\" || sessionUser?.role === \"super_admin\";\n\n    const eventRows = [];\n    for (const ev of events) {\n      if (!isValidId(ev.id) || !isValidId(ev.sessionId) || !ev.type) continue;\n      const pagePath = sanitizePath(ev.pagePath || \"/\");\n      if (shouldSkipAnalytics({ userAgent, pagePath, isAuthenticatedAdmin: isAdmin })) continue;\n\n      eventRows.push({\n        id: ev.id,\n        sessionId: ev.sessionId,\n        eventType: ev.type.slice(0, 64),\n        pagePath,\n        referrer: sanitizeString(ev.referrer),\n        utmSource: sanitizeString(ev.utmSource, 128),\n        utmMedium: sanitizeString(ev.utmMedium, 128),\n        utmCampaign: sanitizeString(ev.utmCampaign, 128),\n        scrollDepth:\n          typeof ev.scrollDepth === \"number\" ? Math.min(100, Math.max(0, Math.round(ev.scrollDepth))) : null,\n        durationMs:\n          typeof ev.durationMs === \"number\" ? Math.min(3_600_000, Math.max(0, Math.round(ev.durationMs))) : null,\n        metadata: ev.metadata ?? null,\n        userAgent: sanitizeString(userAgent ?? undefined, 512),\n        isBot: false,\n      });\n    }\n\n    const vitalRows = [];\n    for (const v of vitals) {\n      if (!isValidId(v.id) || !isValidId(v.sessionId)) continue;\n      const pagePath = sanitizePath(v.pagePath || \"/\");\n      if (shouldSkipAnalytics({ userAgent, pagePath, isAuthenticatedAdmin: isAdmin })) continue;\n\n      vitalRows.push({\n        id: v.id,\n        sessionId: v.sessionId,\n        pagePath,\n        lcp: typeof v.lcp === \"number\" ? v.lcp : null,\n        fid: typeof v.fid === \"number\" ? v.fid : null,\n        cls: typeof v.cls === \"number\" ? v.cls : null,\n        ttfb: typeof v.ttfb === \"number\" ? v.ttfb : null,\n        inp: typeof v.inp === \"number\" ? v.inp : null,\n      });\n    }\n\n    if (eventRows.length > 0) {\n      await db\n        .insert(analyticsEventsTable)\n        .values(eventRows)\n        .onConflictDoNothing({ target: analyticsEventsTable.id });\n    }\n\n    if (vitalRows.length > 0) {\n      await db\n        .insert(analyticsWebVitalsTable)\n        .values(vitalRows)\n        .onConflictDoNothing({ target: analyticsWebVitalsTable.id });\n    }\n\n    res.status(202).json({ accepted: eventRows.length + vitalRows.length });\n  } catch (err) {\n    req.log?.error({ err }, \"analytics ingest failed\");\n    res.status(500).json({ error: \"Ingestion failed\" });\n  }\n});\n\nexport default router;\n", "/** Known crawler / bot user-agent substrings (lowercase). */\nconst BOT_PATTERNS = [\n  \"googlebot\",\n  \"bingbot\",\n  \"slurp\",\n  \"duckduckbot\",\n  \"baiduspider\",\n  \"yandexbot\",\n  \"facebookexternalhit\",\n  \"twitterbot\",\n  \"linkedinbot\",\n  \"embedly\",\n  \"quora link preview\",\n  \"showyoubot\",\n  \"outbrain\",\n  \"pinterest\",\n  \"slackbot\",\n  \"vkshare\",\n  \"w3c_validator\",\n  \"redditbot\",\n  \"applebot\",\n  \"whatsapp\",\n  \"flipboard\",\n  \"tumblr\",\n  \"bitlybot\",\n  \"skypeuripreview\",\n  \"nuzzel\",\n  \"discordbot\",\n  \"google page speed\",\n  \"lighthouse\",\n  \"headlesschrome\",\n  \"phantomjs\",\n  \"selenium\",\n  \"puppeteer\",\n  \"playwright\",\n  \"curl/\",\n  \"wget/\",\n  \"python-requests\",\n  \"go-http-client\",\n  \"axios/\",\n  \"node-fetch\",\n  \"scrapy\",\n  \"ahrefsbot\",\n  \"semrushbot\",\n  \"dotbot\",\n  \"petalbot\",\n  \"gptbot\",\n  \"claudebot\",\n  \"anthropic-ai\",\n  \"bytespider\",\n];\n\nconst ADMIN_PATH_PREFIXES = [\"/admin\", \"/sign-in\", \"/sign-up\", \"/auth/\"];\n\nexport function isBotUserAgent(userAgent: string | undefined | null): boolean {\n  if (!userAgent) return false;\n  const ua = userAgent.toLowerCase();\n  return BOT_PATTERNS.some((p) => ua.includes(p));\n}\n\nexport function isAdminPath(pagePath: string): boolean {\n  const path = pagePath.split(\"?\")[0] ?? pagePath;\n  return ADMIN_PATH_PREFIXES.some((prefix) => path === prefix || path.startsWith(`${prefix}/`));\n}\n\nexport function shouldSkipAnalytics(args: {\n  userAgent?: string | null;\n  pagePath: string;\n  isAuthenticatedAdmin?: boolean;\n}): boolean {\n  if (args.isAuthenticatedAdmin) return true;\n  if (isAdminPath(args.pagePath)) return true;\n  if (isBotUserAgent(args.userAgent)) return true;\n  return false;\n}\n\nexport function classifyReferrer(referrer: string | undefined | null): \"organic\" | \"direct\" | \"social\" | \"referral\" {\n  if (!referrer || referrer.trim() === \"\") return \"direct\";\n  try {\n    const host = new URL(referrer).hostname.toLowerCase();\n    if (host.includes(\"google.\") || host.includes(\"bing.\") || host.includes(\"duckduckgo.\") || host.includes(\"yahoo.\")) {\n      return \"organic\";\n    }\n    if (\n      host.includes(\"facebook.\") ||\n      host.includes(\"twitter.\") ||\n      host.includes(\"x.com\") ||\n      host.includes(\"instagram.\") ||\n      host.includes(\"linkedin.\") ||\n      host.includes(\"tiktok.\")\n    ) {\n      return \"social\";\n    }\n    return \"referral\";\n  } catch {\n    return \"referral\";\n  }\n}\n", "import { Router, type IRouter, type Request, type Response, type NextFunction } from \"express\";\nimport { randomUUID } from \"node:crypto\";\nimport { db } from \"@workspace/db\";\nimport { betaFeedbackTable, BETA_FEEDBACK_STATUSES, user as usersTable } from \"@workspace/db/schema\";\nimport { desc, eq } from \"drizzle-orm\";\nimport {\n  getSessionUser,\n  requireAdmin,\n  requireBetaTesterOrAdmin,\n} from \"../lib/authMiddleware\";\nimport { analyzeBetaScreenshot, polishBetaFeedback, triageBetaFeedback } from \"../lib/betaFeedbackTriage\";\nimport { privateObjectKey, r2PresignUrl, r2PutObject } from \"../lib/r2\";\n\nconst router: IRouter = Router();\n\nfunction requireJsonCt(req: Request, res: Response, next: NextFunction): void {\n  if ([\"POST\", \"PUT\", \"PATCH\"].includes(req.method)) {\n    const ct = req.headers[\"content-type\"] ?? \"\";\n    if (!ct.includes(\"application/json\")) {\n      res.status(415).json({ error: \"Content-Type must be application/json\" });\n      return;\n    }\n  }\n  next();\n}\n\nrouter.use(requireJsonCt);\n\nconst submitRateMap = new Map<string, number[]>();\nconst SUBMIT_RATE_LIMIT = 10;\nconst RATE_WINDOW_MS = 3_600_000;\n\nfunction isRateLimited(userId: string): boolean {\n  const now = Date.now();\n  const hits = (submitRateMap.get(userId) ?? []).filter((t) => now - t < RATE_WINDOW_MS);\n  hits.push(now);\n  submitRateMap.set(userId, hits);\n  return hits.length > SUBMIT_RATE_LIMIT;\n}\n\nfunction parseBase64Image(raw: string, mimeType: string): Buffer | null {\n  try {\n    const b64 = raw.includes(\",\") ? raw.split(\",\")[1]! : raw;\n    const buffer = Buffer.from(b64, \"base64\");\n    if (buffer.length < 16 || buffer.length > 8 * 1024 * 1024) return null;\n    if (!/^image\\/(jpeg|jpg|png|webp|gif)$/i.test(mimeType)) return null;\n    return buffer;\n  } catch {\n    return null;\n  }\n}\n\nfunction extFromMime(mimeType: string): string {\n  if (mimeType.includes(\"png\")) return \"png\";\n  if (mimeType.includes(\"webp\")) return \"webp\";\n  if (mimeType.includes(\"gif\")) return \"gif\";\n  return \"jpg\";\n}\n\n// POST /api/beta-feedback/upload-screenshot\nrouter.post(\"/upload-screenshot\", requireBetaTesterOrAdmin, async (req: Request, res: Response) => {\n  const userId = getSessionUser(req)!.userId;\n  const body = req.body as { imageBase64?: string; mimeType?: string; fileName?: string };\n  const raw = body.imageBase64?.trim();\n  if (!raw) {\n    res.status(400).json({ error: \"imageBase64 is required\" });\n    return;\n  }\n\n  const mimeType = body.mimeType?.trim() || \"image/jpeg\";\n  const buffer = parseBase64Image(raw, mimeType);\n  if (!buffer) {\n    res.status(400).json({ error: \"Invalid image (max 8 MB, jpeg/png/webp/gif only)\" });\n    return;\n  }\n\n  const imageId = randomUUID();\n  const ext = extFromMime(mimeType);\n  const key = privateObjectKey(`beta-feedback/${userId}/${imageId}.${ext}`);\n\n  try {\n    await r2PutObject(key, buffer, mimeType);\n    const url = await r2PresignUrl(key, \"GET\", 7 * 24 * 3600);\n    res.status(201).json({\n      url,\n      mimeType,\n      fileName: body.fileName?.trim() || `screenshot.${ext}`,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Beta feedback: screenshot upload failed\");\n    res.status(500).json({ error: \"Failed to upload screenshot\" });\n  }\n});\n\n// POST /api/beta-feedback/polish \u2014 Gemini-assisted rewrite\nrouter.post(\"/polish\", requireBetaTesterOrAdmin, async (req: Request, res: Response) => {\n  const session = getSessionUser(req)!;\n  const body = req.body as { subject?: string; message?: string };\n  const subject = body.subject?.trim() ?? \"\";\n  const message = body.message?.trim() ?? \"\";\n\n  if (!subject && !message) {\n    res.status(400).json({ error: \"subject or message is required\" });\n    return;\n  }\n\n  const result = await polishBetaFeedback({\n    subject,\n    message,\n    userId: session.userId,\n  });\n  res.json(result);\n});\n\n// POST /api/beta-feedback/analyze-screenshot \u2014 Gemini vision preview\nrouter.post(\"/analyze-screenshot\", requireBetaTesterOrAdmin, async (req: Request, res: Response) => {\n  const session = getSessionUser(req)!;\n  const body = req.body as {\n    subject?: string;\n    message?: string;\n    imageBase64?: string;\n    mimeType?: string;\n  };\n\n  const raw = body.imageBase64?.trim();\n  if (!raw) {\n    res.status(400).json({ error: \"imageBase64 is required\" });\n    return;\n  }\n\n  const mimeType = body.mimeType?.trim() || \"image/jpeg\";\n  const b64 = raw.includes(\",\") ? raw.split(\",\")[1]! : raw;\n  if (!parseBase64Image(raw, mimeType)) {\n    res.status(400).json({ error: \"Invalid image\" });\n    return;\n  }\n\n  const result = await analyzeBetaScreenshot({\n    subject: body.subject?.trim() ?? \"\",\n    message: body.message?.trim() ?? \"\",\n    imageBase64: b64,\n    mimeType,\n    userId: session.userId,\n  });\n  res.json(result);\n});\n\n// POST /api/beta-feedback\nrouter.post(\"/\", requireBetaTesterOrAdmin, async (req: Request, res: Response) => {\n  const session = getSessionUser(req)!;\n  if (isRateLimited(session.userId)) {\n    res.status(429).json({ error: \"Too many submissions. Try again in an hour.\" });\n    return;\n  }\n\n  const body = req.body as {\n    subject?: string;\n    message?: string;\n    screenshotUrls?: string[];\n    deviceMetadata?: Record<string, string>;\n    screenshotBase64?: string;\n    screenshotMimeType?: string;\n  };\n\n  const subject = body.subject?.trim() ?? \"\";\n  const message = body.message?.trim() ?? \"\";\n  if (!subject || subject.length > 200) {\n    res.status(400).json({ error: \"subject is required (max 200 characters)\" });\n    return;\n  }\n  if (!message || message.length > 10000) {\n    res.status(400).json({ error: \"message is required (max 10,000 characters)\" });\n    return;\n  }\n\n  const screenshotUrls = Array.isArray(body.screenshotUrls)\n    ? body.screenshotUrls.filter((u) => typeof u === \"string\").slice(0, 1)\n    : [];\n\n  const deviceMetadata =\n    body.deviceMetadata && typeof body.deviceMetadata === \"object\"\n      ? Object.fromEntries(\n          Object.entries(body.deviceMetadata)\n            .filter(([, v]) => typeof v === \"string\")\n            .map(([k, v]) => [k.slice(0, 64), (v as string).slice(0, 500)]),\n        )\n      : {};\n\n  let screenshotBase64: string | undefined;\n  let screenshotMimeType: string | undefined;\n  if (body.screenshotBase64?.trim()) {\n    const mime = body.screenshotMimeType?.trim() || \"image/jpeg\";\n    const buf = parseBase64Image(body.screenshotBase64, mime);\n    if (buf) {\n      screenshotBase64 = body.screenshotBase64.includes(\",\")\n        ? body.screenshotBase64.split(\",\")[1]!\n        : body.screenshotBase64;\n      screenshotMimeType = mime;\n    }\n  }\n\n  const aiTriage = await triageBetaFeedback({\n    subject,\n    message,\n    deviceMetadata,\n    screenshotBase64,\n    screenshotMimeType,\n    userId: session.userId,\n  });\n\n  try {\n    const [row] = await db\n      .insert(betaFeedbackTable)\n      .values({\n        userId: session.userId,\n        subject,\n        message,\n        screenshotUrls,\n        deviceMetadata,\n        status: \"unread\",\n        aiTriage,\n      })\n      .returning({ id: betaFeedbackTable.id, createdAt: betaFeedbackTable.createdAt });\n\n    res.status(201).json({\n      id: row!.id,\n      createdAt: row!.createdAt,\n      aiTriage,\n      message: \"Feedback submitted. Thank you for helping improve Hook N Bone!\",\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Beta feedback: insert failed\");\n    res.status(500).json({ error: \"Failed to save feedback\" });\n  }\n});\n\n// GET /api/beta-feedback/admin\nrouter.get(\"/admin\", requireAdmin, async (req: Request, res: Response) => {\n  const statusFilter = req.query[\"status\"] as string | undefined;\n\n  try {\n    let query = db\n      .select({\n        id: betaFeedbackTable.id,\n        userId: betaFeedbackTable.userId,\n        subject: betaFeedbackTable.subject,\n        message: betaFeedbackTable.message,\n        screenshotUrls: betaFeedbackTable.screenshotUrls,\n        deviceMetadata: betaFeedbackTable.deviceMetadata,\n        status: betaFeedbackTable.status,\n        aiTriage: betaFeedbackTable.aiTriage,\n        createdAt: betaFeedbackTable.createdAt,\n        updatedAt: betaFeedbackTable.updatedAt,\n        userName: usersTable.name,\n        userEmail: usersTable.email,\n      })\n      .from(betaFeedbackTable)\n      .leftJoin(usersTable, eq(betaFeedbackTable.userId, usersTable.id))\n      .orderBy(desc(betaFeedbackTable.createdAt))\n      .limit(200);\n\n    const rows = await query;\n    const filtered =\n      statusFilter && BETA_FEEDBACK_STATUSES.includes(statusFilter as (typeof BETA_FEEDBACK_STATUSES)[number])\n        ? rows.filter((r) => r.status === statusFilter)\n        : rows;\n\n    res.json({ feedback: filtered });\n  } catch (err) {\n    req.log?.error({ err }, \"Beta feedback: admin list failed\");\n    res.status(500).json({ error: \"Failed to load feedback\" });\n  }\n});\n\n// PATCH /api/beta-feedback/admin/:id\nrouter.patch(\"/admin/:id\", requireAdmin, async (req: Request, res: Response) => {\n  const id = Number(req.params.id);\n  if (!Number.isFinite(id) || id < 1) {\n    res.status(400).json({ error: \"Invalid id\" });\n    return;\n  }\n\n  const body = req.body as { status?: string };\n  const status = body.status?.trim();\n  if (!status || !BETA_FEEDBACK_STATUSES.includes(status as (typeof BETA_FEEDBACK_STATUSES)[number])) {\n    res.status(400).json({ error: `status must be one of: ${BETA_FEEDBACK_STATUSES.join(\", \")}` });\n    return;\n  }\n\n  try {\n    const [updated] = await db\n      .update(betaFeedbackTable)\n      .set({ status, updatedAt: new Date() })\n      .where(eq(betaFeedbackTable.id, id))\n      .returning();\n\n    if (!updated) {\n      res.status(404).json({ error: \"Feedback not found\" });\n      return;\n    }\n    res.json({ feedback: updated });\n  } catch (err) {\n    req.log?.error({ err }, \"Beta feedback: status update failed\");\n    res.status(500).json({ error: \"Failed to update feedback\" });\n  }\n});\n\nexport default router;\n", "import type { BetaFeedbackAiTriage } from \"@workspace/db/schema\";\nimport { geminiText, geminiTextJson, geminiVisionText } from \"./ai\";\n\nconst TRIAGE_SYSTEM = `You triage beta feedback for Hook N Bone, a hunting and fishing social app.\nReturn JSON only with keys:\n- category: one of \"bug\", \"feature\", \"ux\", \"performance\", \"other\"\n- priority: one of \"low\", \"medium\", \"high\", \"critical\"\n- summary: one sentence for admins (max 30 words)\n- suggestedAction: one concrete next step for engineering (max 40 words)`;\n\nconst POLISH_SYSTEM = `You help beta testers write clear, actionable product feedback for Hook N Bone (hunting/fishing app).\nRewrite their draft to be specific and professional while preserving their intent and details.\nReturn plain text only: improved subject line on first line, blank line, then improved message body.\nDo not add markdown or labels like \"Subject:\".`;\n\nconst SCREENSHOT_SYSTEM = `You analyze UI screenshots from beta testers of Hook N Bone, a hunting/fishing app.\nDescribe visible bugs, layout issues, or UX problems in 2-3 concise sentences for engineers.\nReturn plain text only. If no issue is visible, say \"No obvious UI issue detected.\"`;\n\nfunction fallbackTriage(subject: string, message: string): BetaFeedbackAiTriage {\n  const text = `${subject} ${message}`.toLowerCase();\n  let category: BetaFeedbackAiTriage[\"category\"] = \"other\";\n  if (/crash|error|broken|bug|fail|500|404/.test(text)) category = \"bug\";\n  else if (/slow|lag|load|performance|freeze/.test(text)) category = \"performance\";\n  else if (/feature|add|wish|would like|request/.test(text)) category = \"feature\";\n  else if (/confus|hard to|unclear|ux|ui|design/.test(text)) category = \"ux\";\n\n  let priority: BetaFeedbackAiTriage[\"priority\"] = \"medium\";\n  if (/crash|cannot|blocked|critical|urgent|data loss/.test(text)) priority = \"critical\";\n  else if (/bug|error|broken/.test(text)) priority = \"high\";\n  else if (/minor|small|typo|cosmetic/.test(text)) priority = \"low\";\n\n  return {\n    category,\n    priority,\n    summary: subject.slice(0, 120) || \"Beta feedback submitted\",\n    suggestedAction: \"Review feedback details and reproduce on reported device.\",\n    source: \"fallback\",\n  };\n}\n\nfunction parseTriage(raw: string, fallback: BetaFeedbackAiTriage): BetaFeedbackAiTriage {\n  try {\n    const parsed = JSON.parse(raw) as Partial<BetaFeedbackAiTriage>;\n    const category = parsed.category;\n    const priority = parsed.priority;\n    const validCategories = [\"bug\", \"feature\", \"ux\", \"performance\", \"other\"] as const;\n    const validPriorities = [\"low\", \"medium\", \"high\", \"critical\"] as const;\n    if (\n      !category ||\n      !validCategories.includes(category as (typeof validCategories)[number]) ||\n      !priority ||\n      !validPriorities.includes(priority as (typeof validPriorities)[number])\n    ) {\n      return fallback;\n    }\n    return {\n      category: category as BetaFeedbackAiTriage[\"category\"],\n      priority: priority as BetaFeedbackAiTriage[\"priority\"],\n      summary: String(parsed.summary ?? fallback.summary).slice(0, 300),\n      suggestedAction: String(parsed.suggestedAction ?? fallback.suggestedAction).slice(0, 400),\n      source: \"gemini\",\n    };\n  } catch {\n    return fallback;\n  }\n}\n\nexport async function triageBetaFeedback(args: {\n  subject: string;\n  message: string;\n  deviceMetadata: Record<string, string>;\n  screenshotBase64?: string;\n  screenshotMimeType?: string;\n  userId?: string;\n}): Promise<BetaFeedbackAiTriage> {\n  const fallback = fallbackTriage(args.subject, args.message);\n  if (!process.env.GEMINI_API_KEY?.trim()) return fallback;\n\n  try {\n    const userPayload = JSON.stringify(\n      {\n        subject: args.subject,\n        message: args.message,\n        device: args.deviceMetadata,\n      },\n      null,\n      2,\n    );\n\n    const raw = await geminiTextJson({\n      systemInstruction: TRIAGE_SYSTEM,\n      userText: userPayload,\n      endpoint: \"/beta-feedback/triage\",\n      userId: args.userId,\n    });\n    const triage = parseTriage(raw, fallback);\n\n    if (args.screenshotBase64 && args.screenshotMimeType) {\n      try {\n        const analysis = await geminiVisionText({\n          systemInstruction: SCREENSHOT_SYSTEM,\n          userText: `Subject: ${args.subject}\\nMessage: ${args.message}`,\n          imageBase64: args.screenshotBase64,\n          mimeType: args.screenshotMimeType,\n          maxOutputTokens: 256,\n          endpoint: \"/beta-feedback/screenshot-analysis\",\n          userId: args.userId,\n        });\n        triage.screenshotAnalysis = analysis.trim().slice(0, 600);\n      } catch {\n        // non-fatal\n      }\n    }\n\n    return triage;\n  } catch {\n    return fallback;\n  }\n}\n\nexport async function polishBetaFeedback(args: {\n  subject: string;\n  message: string;\n  userId?: string;\n}): Promise<{ subject: string; message: string; source: \"gemini\" | \"fallback\" }> {\n  if (!process.env.GEMINI_API_KEY?.trim()) {\n    return { subject: args.subject, message: args.message, source: \"fallback\" };\n  }\n\n  try {\n    const raw = await geminiText({\n      systemInstruction: POLISH_SYSTEM,\n      userText: `Subject: ${args.subject}\\n\\nMessage:\\n${args.message}`,\n      maxOutputTokens: 800,\n      endpoint: \"/beta-feedback/polish\",\n      userId: args.userId,\n    });\n\n    const parts = raw.split(/\\n\\s*\\n/);\n    if (parts.length >= 2) {\n      return {\n        subject: parts[0]!.trim().slice(0, 200),\n        message: parts.slice(1).join(\"\\n\\n\").trim().slice(0, 10000),\n        source: \"gemini\",\n      };\n    }\n    return { subject: args.subject, message: raw.slice(0, 10000), source: \"gemini\" };\n  } catch {\n    return { subject: args.subject, message: args.message, source: \"fallback\" };\n  }\n}\n\nexport async function analyzeBetaScreenshot(args: {\n  subject: string;\n  message: string;\n  imageBase64: string;\n  mimeType: string;\n  userId?: string;\n}): Promise<{ analysis: string; source: \"gemini\" | \"fallback\" }> {\n  if (!process.env.GEMINI_API_KEY?.trim()) {\n    return { analysis: \"AI screenshot analysis unavailable (GEMINI_API_KEY not configured).\", source: \"fallback\" };\n  }\n\n  try {\n    const analysis = await geminiVisionText({\n      systemInstruction: SCREENSHOT_SYSTEM,\n      userText: `Subject: ${args.subject || \"Screenshot\"}\\nMessage: ${args.message || \"No message yet\"}`,\n      imageBase64: args.imageBase64,\n      mimeType: args.mimeType,\n      maxOutputTokens: 256,\n      endpoint: \"/beta-feedback/analyze-screenshot\",\n      userId: args.userId,\n    });\n    return { analysis: analysis.trim(), source: \"gemini\" };\n  } catch {\n    return { analysis: \"Could not analyze screenshot right now. You can still submit your feedback.\", source: \"fallback\" };\n  }\n}\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { requireModerator } from \"../lib/authMiddleware\";\nimport {\n  getIngestionStatusReport,\n  runFullIngestionCycle,\n  runGoogleSerpIngestionCycle,\n  runInstagramIngestionCycle,\n  runTikTokIngestionCycle,\n  runYouTubeIngestionCycle,\n} from \"../lib/ingestion/pipeline\";\nimport { runContentDiscoveryCycle } from \"../lib/contentDiscovery/pipeline\";\nimport { buildIngestionHealthReport } from \"../lib/ingestion/ingestionHealth\";\n\nconst router: IRouter = Router();\n\nfunction authorizeCron(req: Request): boolean {\n  const secret = process.env.CRON_SECRET?.trim();\n  if (!secret) return false;\n  const header = req.header(\"authorization\");\n  if (header === `Bearer ${secret}`) return true;\n  const cronHeader = req.header(\"x-cron-secret\");\n  return cronHeader === secret;\n}\n\nasync function handleVideoIngestionCron(req: Request, res: Response): Promise<void> {\n  if (!authorizeCron(req)) {\n    res.status(401).json({ error: \"Unauthorized\" });\n    return;\n  }\n\n  try {\n    const result = await runFullIngestionCycle();\n    res.json({\n      ok: true,\n      completedAt: new Date().toISOString(),\n      ...result,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Cron video ingestion failed\");\n    res.status(500).json({\n      error: err instanceof Error ? err.message : \"Ingestion failed\",\n    });\n  }\n}\n\n/** Vercel Cron invokes scheduled jobs with GET + Authorization: Bearer CRON_SECRET. */\nrouter.get(\"/cron/video-ingestion\", handleVideoIngestionCron);\nrouter.post(\"/cron/video-ingestion\", handleVideoIngestionCron);\n\nrouter.get(\"/cron/ingestion-health\", async (req: Request, res: Response) => {\n  if (!authorizeCron(req)) {\n    res.status(401).json({ error: \"Unauthorized\" });\n    return;\n  }\n  try {\n    const health = await buildIngestionHealthReport();\n    const statusCode = health.status === \"stalled\" ? 503 : 200;\n    res.status(statusCode).json({ ok: health.status !== \"stalled\", ...health });\n  } catch (err) {\n    req.log?.error({ err }, \"Ingestion health check failed\");\n    res.status(500).json({ error: err instanceof Error ? err.message : \"Health check failed\" });\n  }\n});\n\nrouter.get(\"/admin/ingestion/status\", requireModerator, async (_req: Request, res: Response) => {\n  try {\n    const report = await getIngestionStatusReport();\n    res.json(report);\n  } catch (err) {\n    res.status(500).json({ error: err instanceof Error ? err.message : \"Status failed\" });\n  }\n});\n\nrouter.post(\"/admin/ingestion/run\", requireModerator, async (req: Request, res: Response) => {\n  const body = (req.body ?? {}) as { provider?: string };\n  try {\n    if (body.provider === \"youtube\") {\n      res.json({ ok: true, result: await runYouTubeIngestionCycle() });\n      return;\n    }\n    if (body.provider === \"instagram\") {\n      res.json({ ok: true, result: await runInstagramIngestionCycle() });\n      return;\n    }\n    if (body.provider === \"google_serp\") {\n      res.json({ ok: true, result: await runGoogleSerpIngestionCycle() });\n      return;\n    }\n    if (body.provider === \"tiktok\") {\n      res.json({ ok: true, result: await runTikTokIngestionCycle() });\n      return;\n    }\n    if (body.provider === \"content_discovery\") {\n      res.json({ ok: true, result: await runContentDiscoveryCycle() });\n      return;\n    }\n    res.json({ ok: true, result: await runFullIngestionCycle() });\n  } catch (err) {\n    req.log?.error({ err }, \"Manual ingestion run failed\");\n    res.status(500).json({ error: err instanceof Error ? err.message : \"Run failed\" });\n  }\n});\n\nrouter.post(\"/admin/ingestion/research\", requireModerator, async (req: Request, res: Response) => {\n  const body = (req.body ?? {}) as { topic?: string };\n  const topic = body.topic?.trim() || \"hunting and fishing YouTube trends\";\n  try {\n    const mod = await import(\"@workspace/video-discovery-agent\");\n    if (!mod.isOpenRouterConfigured()) {\n      res.status(503).json({ error: \"OpenRouter not configured (OPENROUTER_API_KEY)\" });\n      return;\n    }\n    const text = await mod.researchVideoTrends(topic);\n    res.json({ ok: true, topic, report: text });\n  } catch (err) {\n    req.log?.error({ err }, \"OpenRouter research failed\");\n    res.status(500).json({ error: err instanceof Error ? err.message : \"Research failed\" });\n  }\n});\n\nexport default router;\n", "import { db, ingestionCheckpointsTable, ingestionRunsTable, scraperHashtagsTable } from \"@workspace/db\";\nimport { eq, desc, asc } from \"drizzle-orm\";\nimport { logger } from \"../logger\";\nimport { ingestHashtagMedia } from \"../instagramScraperIngest\";\nimport { ingestHashtagToCatalog, ingestInstagramUsersCycle } from \"./instagramCatalogIngest\";\nimport { ensureDefaultScraperHashtags } from \"../scraperDefaults\";\nimport { discoverYouTubeViaGoogleSerp } from \"./googleVideoDiscovery\";\nimport { discoverTikTokViaGoogleSerp } from \"./tiktokVideoDiscovery\";\nimport { persistCatalogCandidates } from \"./persistCatalogVideo\";\nimport { listConfiguredScrapers } from \"../scraping/router.js\";\nimport { getDailyQuotaUsage, youtubeSearchDailyCap, serpDiscoveryDailyCap, tiktokOembedDailyCap, tiktokSerpDailyCap, contentDiscoveryDailyCap } from \"./quotaBudget\";\nimport { nimbleSearchDailyCap } from \"./sustainableIngestion.js\";\nimport {\n  GOOGLE_SERP_DISCOVERY_QUERIES,\n  GOOGLE_SERP_TIKTOK_DISCOVERY_QUERIES,\n  TIKTOK_DEFAULT_HASHTAGS,\n  YOUTUBE_DISCOVERY_SCOPES,\n  type DiscoveryScope,\n  type IngestionCycleStats,\n  type IngestionProvider,\n  type CatalogVideoCandidate,\n} from \"./types\";\nimport { discoverYouTubeScopePage } from \"./youtubeProvider\";\nimport { buildTikTokCandidateFromScrape } from \"./tiktokProvider\";\nimport { fetchHashtagRecentVideos, isTikTokScraperConfigured } from \"./tiktokScraper\";\nimport {\n  buildOpenRouterIngestionSummary,\n  getOpenRouterStatus,\n  mergeDiscoveryScopes,\n  mergeSerpQueries,\n  prepareOpenRouterDiscoveryCycle,\n  type OpenRouterCycleContext,\n} from \"./openRouterLayer\";\nimport { createCycleCollector, type IngestionCycleCollector } from \"./cycleCollector\";\nimport { runSecondaryPostProcessLayer } from \"./secondaryPostProcessLayer\";\nimport { runPostProcessWorker } from \"../postProcess/worker\";\nimport { promoteDetectedProductsToCatalog, type GearPromotionResult } from \"../postProcess/promoteDetectedGear\";\nimport { buildIngestionHealthReport } from \"./ingestionHealth\";\nimport { runContentDiscoveryCycle, getContentDiscoveryStatus } from \"../contentDiscovery/pipeline\";\nimport type { DiscoveryCycleStats } from \"../contentDiscovery/types\";\nimport { speciesDiscoveryStats } from \"./speciesDiscoveryQueries.js\";\nimport { selectScopesForIngestionCycle } from \"./deerContentPriority.js\";\nimport {\n  clearYouTubeGlobalPause,\n  clearTikTokGlobalPause,\n  getYouTubeGlobalPause,\n  getTikTokGlobalPause,\n  instagramPostsPerTag,\n  instagramTagDelayMs,\n  instagramTagsPerCycle,\n  isRateLimitMessage,\n  markYouTubeGlobalPause,\n  markTikTokGlobalPause,\n  providerGapMs,\n  rateLimitCooldownMs,\n  scopeDelayMs,\n  scopesPerCycle,\n  serpQueriesPerCycle,\n  sleepWithJitter,\n  tiktokHashtagDelayMs,\n  tiktokHashtagsPerCycle,\n  tiktokPostsPerHashtag,\n  tiktokSerpQueriesPerCycle,\n} from \"./sustainableIngestion.js\";\n\nconst YOUTUBE_PROVIDER: IngestionProvider = \"youtube\";\n/** Bump when species query catalog changes materially \u2014 resets scope rotation once. */\nconst SPECIES_CATALOG_CHECKPOINT_VERSION = \"species-v4-shorts-first\";\nconst INSTAGRAM_PROVIDER: IngestionProvider = \"instagram\";\nconst SERP_PROVIDER: IngestionProvider = \"google_serp\";\nconst TIKTOK_PROVIDER: IngestionProvider = \"tiktok\";\n\nasync function getCheckpoint(provider: string, scopeKey: string) {\n  const rows = await db\n    .select()\n    .from(ingestionCheckpointsTable)\n    .where(eq(ingestionCheckpointsTable.provider, provider))\n    .limit(100);\n  return rows.find((r) => r.scopeKey === scopeKey) ?? null;\n}\n\nasync function saveCheckpoint(\n  provider: string,\n  scopeKey: string,\n  cursorToken: string | null,\n  error: string | null,\n) {\n  await db\n    .insert(ingestionCheckpointsTable)\n    .values({\n      provider,\n      scopeKey,\n      cursorToken,\n      lastSuccessAt: error ? undefined : new Date(),\n      lastError: error,\n      updatedAt: new Date(),\n    })\n    .onConflictDoUpdate({\n      target: [ingestionCheckpointsTable.provider, ingestionCheckpointsTable.scopeKey],\n      set: {\n        cursorToken,\n        lastSuccessAt: error ? undefined : new Date(),\n        lastError: error,\n        updatedAt: new Date(),\n      },\n    });\n}\n\nasync function startRun(provider: IngestionProvider) {\n  const [row] = await db\n    .insert(ingestionRunsTable)\n    .values({ provider, status: \"running\" })\n    .returning({ id: ingestionRunsTable.id });\n  return row?.id ?? null;\n}\n\nasync function finishRun(\n  runId: number | null,\n  stats: IngestionCycleStats,\n  status: \"completed\" | \"failed\" | \"partial\",\n) {\n  if (!runId) return;\n  await db\n    .update(ingestionRunsTable)\n    .set({\n      status,\n      finishedAt: new Date(),\n      discovered: stats.discovered,\n      eligible: stats.eligible,\n      inserted: stats.inserted,\n      skippedDuplicate: stats.skippedDuplicate,\n      rejected: stats.rejected,\n      errors: stats.errors,\n      quotaUsed: stats.quotaUsed,\n      details: stats.details,\n    })\n    .where(eq(ingestionRunsTable.id, runId));\n}\n\nfunction nextScopeIndex(scopes: DiscoveryScope[], lastScopeKey: string | null): number {\n  if (!lastScopeKey) return 0;\n  const idx = scopes.findIndex((s) => s.scopeKey === lastScopeKey);\n  if (idx < 0) return 0;\n  return (idx + 1) % scopes.length;\n}\n\nexport async function runYouTubeIngestionCycle(options?: {\n  scopesPerCycle?: number;\n  discoveryScopes?: DiscoveryScope[];\n  collector?: IngestionCycleCollector;\n}): Promise<IngestionCycleStats> {\n  const apiKey = process.env.YOUTUBE_API_KEY?.trim();\n  const stats: IngestionCycleStats = {\n    provider: YOUTUBE_PROVIDER,\n    discovered: 0,\n    eligible: 0,\n    inserted: 0,\n    skippedDuplicate: 0,\n    rejected: 0,\n    errors: 0,\n    quotaUsed: 0,\n    details: { scopes: [] as string[] },\n  };\n\n  if (!apiKey) {\n    stats.details.reason = \"YOUTUBE_API_KEY not configured\";\n    return stats;\n  }\n\n  const globalPause = await getYouTubeGlobalPause();\n  if (globalPause.paused) {\n    stats.details.reason = \"YouTube globally paused after rate limit\";\n    stats.details.pauseUntil = globalPause.until ?? null;\n    stats.details.pauseReason = globalPause.reason ?? null;\n    return stats;\n  }\n\n  const runId = await startRun(YOUTUBE_PROVIDER);\n  const allScopes = options?.discoveryScopes ?? mergeDiscoveryScopes([]);\n  const perCycle = Math.min(allScopes.length, options?.scopesPerCycle ?? scopesPerCycle());\n\n  const catalogVersion = await getCheckpoint(YOUTUBE_PROVIDER, \"__catalog_version__\");\n  const rotationCheckpoint = await getCheckpoint(YOUTUBE_PROVIDER, \"__rotation__\");\n  let scopeIndex =\n    catalogVersion?.cursorToken === SPECIES_CATALOG_CHECKPOINT_VERSION\n      ? nextScopeIndex(allScopes, rotationCheckpoint?.cursorToken ?? null)\n      : 0;\n\n  if (catalogVersion?.cursorToken !== SPECIES_CATALOG_CHECKPOINT_VERSION) {\n    await saveCheckpoint(\n      YOUTUBE_PROVIDER,\n      \"__rotation__\",\n      allScopes[0]?.scopeKey ?? null,\n      null,\n    );\n    await saveCheckpoint(\n      YOUTUBE_PROVIDER,\n      \"__catalog_version__\",\n      SPECIES_CATALOG_CHECKPOINT_VERSION,\n      null,\n    );\n    scopeIndex = 0;\n  }\n\n  const delayMs = scopeDelayMs();\n  const cooldownMs = rateLimitCooldownMs();\n\n  try {\n    let processed = 0;\n    const { scopes: cycleScopes, nextIndex } = selectScopesForIngestionCycle(\n      allScopes,\n      scopeIndex,\n      perCycle,\n    );\n\n    for (const scope of cycleScopes) {\n      if (processed >= perCycle) break;\n      if (processed > 0 && delayMs > 0) {\n        await sleepWithJitter(delayMs);\n      }\n\n      const checkpoint = await getCheckpoint(YOUTUBE_PROVIDER, scope.scopeKey);\n      const recentlyRateLimited =\n        checkpoint?.lastError &&\n        isRateLimitMessage(checkpoint.lastError) &&\n        checkpoint.updatedAt &&\n        Date.now() - checkpoint.updatedAt.getTime() < cooldownMs;\n\n      if (recentlyRateLimited) {\n        (stats.details.scopes as string[]).push(`${scope.scopeKey}:SKIP cooldown`);\n        continue;\n      }\n\n      let pageToken = checkpoint?.cursorToken ?? null;\n\n      try {\n        const page = await discoverYouTubeScopePage(scope, apiKey, pageToken);\n        stats.discovered += page.items.length + page.rejected;\n        stats.rejected += page.rejected;\n        stats.eligible += page.items.length;\n        stats.quotaUsed += page.quotaUsed;\n\n        if (page.items.length > 0) {\n          options?.collector?.addMany(page.items);\n          const persisted = await persistCatalogCandidates(page.items);\n          stats.inserted += persisted.inserted;\n          stats.skippedDuplicate += persisted.skippedDuplicate;\n        }\n\n        const nextToken = page.nextPageToken;\n        await saveCheckpoint(YOUTUBE_PROVIDER, scope.scopeKey, nextToken, null);\n        (stats.details.scopes as string[]).push(\n          `${scope.scopeKey}:${page.items.length} inserted eligible, cursor=${nextToken ? \"yes\" : \"end\"}`,\n        );\n\n        if (!nextToken) {\n          // Scope exhausted \u2014 rotation advances via selectScopesForIngestionCycle next cycle.\n        }\n        processed++;\n        await clearYouTubeGlobalPause();\n      } catch (err) {\n        stats.errors++;\n        const message = err instanceof Error ? err.message : String(err);\n        await saveCheckpoint(YOUTUBE_PROVIDER, scope.scopeKey, pageToken, message);\n        (stats.details.scopes as string[]).push(`${scope.scopeKey}:ERROR ${message.slice(0, 120)}`);\n        logger.warn({ err, scope: scope.scopeKey }, \"YouTube ingestion scope failed\");\n\n        if (isRateLimitMessage(message)) {\n          await markYouTubeGlobalPause(message);\n          (stats.details.scopes as string[]).push(\"GLOBAL_PAUSE rate limit \u2014 stopping YouTube for cooldown\");\n          break;\n        }\n      }\n    }\n\n    scopeIndex = nextIndex;\n    await saveCheckpoint(YOUTUBE_PROVIDER, \"__rotation__\", allScopes[scopeIndex]?.scopeKey ?? null, null);\n    await finishRun(runId, stats, stats.errors > 0 ? \"partial\" : \"completed\");\n  } catch (err) {\n    stats.errors++;\n    await finishRun(runId, stats, \"failed\");\n    throw err;\n  }\n\n  return stats;\n}\n\nexport async function runInstagramIngestionCycle(): Promise<IngestionCycleStats> {\n  const stats: IngestionCycleStats = {\n    provider: INSTAGRAM_PROVIDER,\n    discovered: 0,\n    eligible: 0,\n    inserted: 0,\n    skippedDuplicate: 0,\n    rejected: 0,\n    errors: 0,\n    quotaUsed: 0,\n    details: { hashtags: [] as string[], users: [] as string[] },\n  };\n\n  if (process.env.SCRAPER_AGENT_ENABLED === \"false\") {\n    stats.details.reason = \"SCRAPER_AGENT_ENABLED=false\";\n    return stats;\n  }\n\n  await ensureDefaultScraperHashtags();\n\n  const runId = await startRun(INSTAGRAM_PROVIDER);\n  const maxTags = instagramTagsPerCycle();\n  const tagDelay = instagramTagDelayMs();\n  const postsPerTag = instagramPostsPerTag();\n\n  try {\n    // Pro plan: creator reels (/profile + /reels). Hashtags need Ultra on this API.\n    const userCycle = await ingestInstagramUsersCycle({\n      usersPerCycle: parseInt(process.env.INGESTION_INSTAGRAM_USERS_PER_CYCLE ?? \"1\", 10) || 1,\n      reelsPerUser: postsPerTag,\n      userDelayMs: tagDelay,\n    });\n    stats.discovered += userCycle.totals.fetched;\n    stats.eligible += userCycle.totals.eligible;\n    stats.inserted += userCycle.totals.inserted;\n    stats.rejected += userCycle.totals.rejected;\n    (stats.details.users as Array<Record<string, unknown>>).push(...userCycle.users);\n\n    if (process.env.INGESTION_INSTAGRAM_HASHTAG_ENABLED === \"true\") {\n      const tags = await db\n        .select()\n        .from(scraperHashtagsTable)\n        .where(eq(scraperHashtagsTable.enabled, true))\n        .orderBy(asc(scraperHashtagsTable.lastScrapedAt))\n        .limit(maxTags);\n\n      for (let i = 0; i < tags.length; i++) {\n        const tag = tags[i];\n        if (!tag) continue;\n        if (i > 0 && tagDelay > 0) await sleepWithJitter(tagDelay);\n\n        try {\n          const useCatalog = process.env.INGESTION_INSTAGRAM_CATALOG_MODE !== \"false\";\n          const result = useCatalog\n            ? await ingestHashtagToCatalog(tag.hashtag, {\n                limit: postsPerTag,\n                trackHashtag: true,\n              })\n            : await ingestHashtagMedia(tag.hashtag, {\n                limit: postsPerTag,\n                trackHashtag: true,\n              }).then((r) => ({\n                fetched: r.fetched,\n                eligible: r.inserted,\n                inserted: r.inserted,\n                skippedDuplicate: r.skipped,\n                rejected: r.rejected,\n              }));\n\n          stats.discovered += result.fetched;\n          stats.eligible += result.eligible ?? result.inserted;\n          stats.skippedDuplicate += result.skippedDuplicate ?? 0;\n          stats.rejected += result.rejected;\n          stats.inserted += result.inserted;\n          (stats.details.hashtags as Array<Record<string, unknown>>).push({\n            hashtag: tag.hashtag,\n            ...result,\n            mode: useCatalog ? \"catalog\" : \"pending_queue\",\n          });\n        } catch (err) {\n          stats.errors++;\n          logger.warn({ err, hashtag: tag.hashtag }, \"Instagram ingestion hashtag failed\");\n          if (isRateLimitMessage(err instanceof Error ? err.message : String(err))) break;\n        }\n      }\n    }\n\n    await finishRun(runId, stats, stats.errors > 0 ? \"partial\" : \"completed\");\n  } catch (err) {\n    stats.errors++;\n    await finishRun(runId, stats, \"failed\");\n    throw err;\n  }\n\n  return stats;\n}\n\nexport async function runGoogleSerpIngestionCycle(options?: {\n  serpQueries?: string[];\n  collector?: IngestionCycleCollector;\n}): Promise<IngestionCycleStats> {\n  const apiKey = process.env.YOUTUBE_API_KEY?.trim();\n  const stats: IngestionCycleStats = {\n    provider: SERP_PROVIDER,\n    discovered: 0,\n    eligible: 0,\n    inserted: 0,\n    skippedDuplicate: 0,\n    rejected: 0,\n    errors: 0,\n    quotaUsed: 0,\n    details: { queries: [] as string[] },\n  };\n\n  if (!apiKey) {\n    stats.details.reason = \"YOUTUBE_API_KEY not configured\";\n    return stats;\n  }\n\n  const scrapers = listConfiguredScrapers();\n  if (scrapers.length === 0) {\n    stats.details.reason = \"No web scraper configured (set NIMBLE_API_KEY or SCRAPER_API_KEY)\";\n    return stats;\n  }\n  stats.details.scrapers = scrapers;\n\n  const runId = await startRun(SERP_PROVIDER);\n  const queryList = options?.serpQueries ?? mergeSerpQueries([]);\n  const rotation = await getCheckpoint(SERP_PROVIDER, \"__rotation__\");\n  const serpCatalogVersion = await getCheckpoint(SERP_PROVIDER, \"__catalog_version__\");\n  let qIndex = rotation?.cursorToken ? queryList.indexOf(rotation.cursorToken) : -1;\n  if (qIndex < 0 || serpCatalogVersion?.cursorToken !== SPECIES_CATALOG_CHECKPOINT_VERSION) {\n    qIndex = 0;\n    await saveCheckpoint(SERP_PROVIDER, \"__catalog_version__\", SPECIES_CATALOG_CHECKPOINT_VERSION, null);\n  }\n\n  const queriesPerCycle = serpQueriesPerCycle();\n\n  try {\n    for (let i = 0; i < queriesPerCycle; i++) {\n      const query = queryList[(qIndex + i) % queryList.length];\n      if (!query) break;\n      try {\n        const discovery = await discoverYouTubeViaGoogleSerp(query, apiKey);\n        const { candidates, quotaUsed, attempts } = discovery;\n        stats.discovered += candidates.length;\n        stats.eligible += candidates.length;\n        stats.quotaUsed += quotaUsed;\n        if (candidates.length > 0) {\n          options?.collector?.addMany(candidates);\n        }\n        const persisted = await persistCatalogCandidates(candidates);\n        stats.inserted += persisted.inserted;\n        stats.skippedDuplicate += persisted.skippedDuplicate;\n        const providerHint =\n          attempts?.find((a) => a.ok && a.resultCount > 0)?.provider ??\n          attempts?.[0]?.provider ??\n          \"web\";\n        (stats.details.queries as string[]).push(\n          `${query} [${providerHint}] \u2192 ${persisted.inserted} new`,\n        );\n      } catch (err) {\n        stats.errors++;\n        logger.warn({ err, query }, \"SERP ingestion query failed\");\n      }\n    }\n\n    const nextIdx = (qIndex + queriesPerCycle) % queryList.length;\n    await saveCheckpoint(SERP_PROVIDER, \"__rotation__\", queryList[nextIdx] ?? null, null);\n    await finishRun(runId, stats, stats.errors > 0 ? \"partial\" : \"completed\");\n  } catch (err) {\n    stats.errors++;\n    await finishRun(runId, stats, \"failed\");\n    throw err;\n  }\n\n  return stats;\n}\n\nexport async function runTikTokIngestionCycle(options?: {\n  collector?: IngestionCycleCollector;\n}): Promise<IngestionCycleStats> {\n  const stats: IngestionCycleStats = {\n    provider: TIKTOK_PROVIDER,\n    discovered: 0,\n    eligible: 0,\n    inserted: 0,\n    skippedDuplicate: 0,\n    rejected: 0,\n    errors: 0,\n    quotaUsed: 0,\n    details: { serp: [] as string[], hashtags: [] as string[] },\n  };\n\n  if (process.env.TIKTOK_INGESTION_ENABLED === \"false\") {\n    stats.details.reason = \"TIKTOK_INGESTION_ENABLED=false\";\n    return stats;\n  }\n\n  const hasSerp = listConfiguredScrapers().length > 0;\n  const hasHashtagApi = isTikTokScraperConfigured();\n  if (!hasSerp && !hasHashtagApi) {\n    stats.details.reason = \"No web scraper (NIMBLE_API_KEY or SCRAPER_API_KEY) and RAPIDAPI_KEY missing for TikTok\";\n    return stats;\n  }\n\n  const globalPause = await getTikTokGlobalPause();\n  if (globalPause.paused) {\n    stats.details.reason = \"TikTok globally paused after rate limit\";\n    stats.details.pauseUntil = globalPause.until ?? null;\n    stats.details.pauseReason = globalPause.reason ?? null;\n    return stats;\n  }\n\n  const runId = await startRun(TIKTOK_PROVIDER);\n  const candidates: CatalogVideoCandidate[] = [];\n\n  try {\n    if (hasSerp) {\n      const queryList = GOOGLE_SERP_TIKTOK_DISCOVERY_QUERIES;\n      const rotation = await getCheckpoint(TIKTOK_PROVIDER, \"__serp_rotation__\");\n      let qIndex = rotation?.cursorToken ? queryList.indexOf(rotation.cursorToken) : -1;\n      if (qIndex < 0) qIndex = 0;\n      const queriesPerCycle = tiktokSerpQueriesPerCycle();\n\n      for (let i = 0; i < queriesPerCycle; i++) {\n        const query = queryList[(qIndex + i) % queryList.length];\n        if (!query) break;\n        try {\n          const { candidates: found, rejected, quotaUsed } = await discoverTikTokViaGoogleSerp(query);\n          stats.discovered += found.length + rejected;\n          stats.rejected += rejected;\n          stats.eligible += found.length;\n          stats.quotaUsed += quotaUsed;\n          candidates.push(...found);\n          (stats.details.serp as string[]).push(`${query} \u2192 ${found.length} eligible`);\n          await clearTikTokGlobalPause();\n        } catch (err) {\n          stats.errors++;\n          const message = err instanceof Error ? err.message : String(err);\n          logger.warn({ err, query }, \"TikTok SERP query failed\");\n          if (isRateLimitMessage(message)) {\n            await markTikTokGlobalPause(message);\n            break;\n          }\n        }\n      }\n\n      const nextIdx = (qIndex + queriesPerCycle) % queryList.length;\n      await saveCheckpoint(TIKTOK_PROVIDER, \"__serp_rotation__\", queryList[nextIdx] ?? null, null);\n    }\n\n    if (hasHashtagApi && !(await getTikTokGlobalPause()).paused) {\n      if (process.env.TIKTOK_HASHTAG_INGESTION_ENABLED === \"false\") {\n        (stats.details.hashtags as string[]).push(\"SKIP TIKTOK_HASHTAG_INGESTION_ENABLED=false\");\n      } else {\n      const tagList = TIKTOK_DEFAULT_HASHTAGS;\n      const rotation = await getCheckpoint(TIKTOK_PROVIDER, \"__hashtag_rotation__\");\n      let tagIndex = rotation?.cursorToken ? tagList.indexOf(rotation.cursorToken) : -1;\n      if (tagIndex < 0) tagIndex = 0;\n      const tagsPerCycle = tiktokHashtagsPerCycle();\n      const tagDelay = tiktokHashtagDelayMs();\n      const postsPerTag = tiktokPostsPerHashtag();\n\n      for (let i = 0; i < tagsPerCycle; i++) {\n        const hashtag = tagList[(tagIndex + i) % tagList.length];\n        if (!hashtag) break;\n        if (i > 0 && tagDelay > 0) await sleepWithJitter(tagDelay);\n\n        try {\n          const items = await fetchHashtagRecentVideos(hashtag, postsPerTag);\n          stats.discovered += items.length;\n          let tagEligible = 0;\n          let tagRejected = 0;\n\n          for (const item of items) {\n            const candidate = await buildTikTokCandidateFromScrape({\n              videoId: item.sourceVideoId,\n              title: item.title,\n              description: `${item.description} #${hashtag}`,\n              creator: item.creator,\n              creatorHandle: item.creatorHandle,\n              thumbnailUrl: item.thumbnailUrl,\n              ingestionSource: `tiktok:hashtag:${hashtag}`,\n              scopeBoost: 2,\n            });\n            if (candidate) {\n              candidates.push(candidate);\n              tagEligible++;\n            } else {\n              tagRejected++;\n            }\n          }\n\n          stats.eligible += tagEligible;\n          stats.rejected += tagRejected;\n          (stats.details.hashtags as string[]).push(`${hashtag} \u2192 ${tagEligible} eligible, ${tagRejected} rejected`);\n          await clearTikTokGlobalPause();\n        } catch (err) {\n          const message = err instanceof Error ? err.message : String(err);\n          const statusCode = err && typeof err === \"object\" && \"statusCode\" in err ? Number((err as { statusCode: number }).statusCode) : 0;\n          if (statusCode === 403 && /not subscribed/i.test(message)) {\n            (stats.details.hashtags as string[]).push(\"SKIP RapidAPI TikTok API not subscribed\");\n            logger.info(\"TikTok hashtag scraper skipped \u2014 RapidAPI subscription required\");\n            break;\n          }\n          stats.errors++;\n          logger.warn({ err, hashtag }, \"TikTok hashtag scrape failed\");\n          if (isRateLimitMessage(message)) {\n            await markTikTokGlobalPause(message);\n            break;\n          }\n        }\n      }\n\n      const nextTag = tagList[(tagIndex + tagsPerCycle) % tagList.length] ?? null;\n      await saveCheckpoint(TIKTOK_PROVIDER, \"__hashtag_rotation__\", nextTag, null);\n      }\n    }\n\n    if (candidates.length > 0) {\n      options?.collector?.addMany(candidates);\n      const persisted = await persistCatalogCandidates(candidates);\n      stats.inserted += persisted.inserted;\n      stats.skippedDuplicate += persisted.skippedDuplicate;\n    }\n\n    await finishRun(runId, stats, stats.errors > 0 ? \"partial\" : \"completed\");\n  } catch (err) {\n    stats.errors++;\n    await finishRun(runId, stats, \"failed\");\n    throw err;\n  }\n\n  return stats;\n}\n\nfunction youtubeCatalogMode(): boolean {\n  const raw = process.env.INGESTION_YOUTUBE_CATALOG_MODE?.trim().toLowerCase();\n  if (raw === \"false\" || raw === \"0\") return false;\n  return raw === \"true\" || raw === \"1\" || process.env.INGESTION_YOUTUBE_CATALOG_MODE == null;\n}\n\nexport async function runFullIngestionCycle(): Promise<{\n  youtube: IngestionCycleStats;\n  instagram: IngestionCycleStats;\n  googleSerp: IngestionCycleStats;\n  tiktok: IngestionCycleStats;\n  contentDiscovery: DiscoveryCycleStats;\n  quota: Record<string, { used: number; cap: number }>;\n  openRouter?: Record<string, unknown>;\n  aiSummary?: Record<string, unknown> | null;\n  secondaryPostProcess?: Record<string, unknown> | null;\n  postProcess?: import(\"../postProcess/types\").PostProcessWorkerReport | null;\n  gearPromotion?: GearPromotionResult | null;\n}> {\n  const orContext: OpenRouterCycleContext = await prepareOpenRouterDiscoveryCycle();\n  const youtubeScopes = mergeDiscoveryScopes(orContext.dynamicYoutubeScopes);\n  const serpQueries = mergeSerpQueries(orContext.dynamicSerpQueries);\n  const collector = createCycleCollector();\n  const gap = providerGapMs();\n  const catalogOnly = youtubeCatalogMode();\n\n  const instagramSkipped: IngestionCycleStats = {\n    provider: \"instagram\",\n    discovered: 0,\n    eligible: 0,\n    inserted: 0,\n    skippedDuplicate: 0,\n    rejected: 0,\n    errors: 0,\n    quotaUsed: 0,\n    details: { reason: catalogOnly ? \"INGESTION_YOUTUBE_CATALOG_MODE\" : undefined },\n  };\n\n  const tiktokSkipped: IngestionCycleStats = {\n    provider: \"tiktok\",\n    discovered: 0,\n    eligible: 0,\n    inserted: 0,\n    skippedDuplicate: 0,\n    rejected: 0,\n    errors: 0,\n    quotaUsed: 0,\n    details: { reason: catalogOnly ? \"INGESTION_YOUTUBE_CATALOG_MODE\" : undefined },\n  };\n\n  const instagram = catalogOnly ? instagramSkipped : await runInstagramIngestionCycle();\n  if (gap > 0) await sleepWithJitter(gap);\n\n  const youtube =\n    process.env.YOUTUBE_INGESTION_ENABLED === \"false\"\n      ? ({\n          provider: YOUTUBE_PROVIDER,\n          discovered: 0,\n          eligible: 0,\n          inserted: 0,\n          skippedDuplicate: 0,\n          rejected: 0,\n          errors: 0,\n          quotaUsed: 0,\n          details: { reason: \"YOUTUBE_INGESTION_ENABLED=false\" },\n        } satisfies IngestionCycleStats)\n      : await runYouTubeIngestionCycle({ discoveryScopes: youtubeScopes, collector });\n  if (gap > 0) await sleepWithJitter(gap);\n\n  const googleSerp =\n    process.env.YOUTUBE_INGESTION_ENABLED === \"false\"\n      ? ({\n          provider: SERP_PROVIDER,\n          discovered: 0,\n          eligible: 0,\n          inserted: 0,\n          skippedDuplicate: 0,\n          rejected: 0,\n          errors: 0,\n          quotaUsed: 0,\n          details: { reason: \"YOUTUBE_INGESTION_ENABLED=false\" },\n        } satisfies IngestionCycleStats)\n      : await runGoogleSerpIngestionCycle({ serpQueries, collector });\n  if (gap > 0) await sleepWithJitter(gap);\n\n  const tiktok = catalogOnly ? tiktokSkipped : await runTikTokIngestionCycle({ collector });\n  if (gap > 0) await sleepWithJitter(gap);\n\n  const contentDiscovery: DiscoveryCycleStats = catalogOnly\n    ? {\n        provider: \"content_discovery\",\n        discovered: 0,\n        inserted: 0,\n        updated: 0,\n        skippedDuplicate: 0,\n        rejected: 0,\n        errors: 0,\n        quotaUsed: 0,\n        details: { reason: \"INGESTION_YOUTUBE_CATALOG_MODE\" },\n      }\n    : await runContentDiscoveryCycle();\n\n  const quota = {\n    youtubeSearch: { used: await getDailyQuotaUsage(\"ingestion_youtube_search\"), cap: youtubeSearchDailyCap() },\n    webSearch: { used: await getDailyQuotaUsage(\"ingestion_nimble_search\"), cap: nimbleSearchDailyCap() },\n    serp: { used: await getDailyQuotaUsage(\"ingestion_serp_daily\"), cap: serpDiscoveryDailyCap() },\n    tiktokOembed: { used: await getDailyQuotaUsage(\"ingestion_tiktok_oembed\"), cap: tiktokOembedDailyCap() },\n    tiktokSerp: { used: await getDailyQuotaUsage(\"ingestion_tiktok_serp\"), cap: tiktokSerpDailyCap() },\n    contentDiscovery: {\n      used: await getDailyQuotaUsage(\"content_discovery_rapidapi\"),\n      cap: contentDiscoveryDailyCap(),\n    },\n  };\n\n  const openRouter = {\n    ...(await getOpenRouterStatus()),\n    planRationale: orContext.planRationale ?? null,\n    planningError: orContext.planningError ?? null,\n    dynamicYoutubeScopes: orContext.dynamicYoutubeScopes.length,\n    dynamicSerpQueries: orContext.dynamicSerpQueries.length,\n  };\n\n  const aiSummary = await buildOpenRouterIngestionSummary({\n    youtube: youtube as unknown as Record<string, unknown>,\n    instagram: instagram as unknown as Record<string, unknown>,\n    googleSerp: googleSerp as unknown as Record<string, unknown>,\n    tiktok: tiktok as unknown as Record<string, unknown>,\n    quota,\n    openRouter,\n  });\n\n  const secondaryPostProcess = await runSecondaryPostProcessLayer(collector, {\n    existingScopeKeys: youtubeScopes.map((s) => s.scopeKey),\n    existingSerpQueries: serpQueries,\n  });\n\n  let postProcess = null;\n  try {\n    postProcess = await runPostProcessWorker({ limit: 50 });\n    logger.info(\n      {\n        processed: postProcess.processed,\n        completed: postProcess.completed,\n        failed: postProcess.failed,\n      },\n      \"Video post-process worker finished\",\n    );\n  } catch (err) {\n    logger.warn({ err }, \"Video post-process worker failed (non-fatal)\");\n  }\n\n  let gearPromotion: GearPromotionResult | null = null;\n  try {\n    gearPromotion = await promoteDetectedProductsToCatalog();\n  } catch (err) {\n    logger.warn({ err }, \"Gear auto-promotion failed (non-fatal)\");\n  }\n\n  return {\n    youtube,\n    instagram,\n    googleSerp,\n    tiktok,\n    contentDiscovery,\n    quota,\n    openRouter,\n    aiSummary,\n    secondaryPostProcess,\n    postProcess,\n    gearPromotion,\n  };\n}\n\nexport async function getIngestionStatusReport() {\n  const recentRuns = await db\n    .select()\n    .from(ingestionRunsTable)\n    .orderBy(desc(ingestionRunsTable.startedAt))\n    .limit(20);\n\n  const checkpoints = await db.select().from(ingestionCheckpointsTable).limit(100);\n\n  return {\n    generatedAt: new Date().toISOString(),\n    health: await buildIngestionHealthReport(),\n    openRouter: await getOpenRouterStatus(),\n    quota: {\n      youtubeSearch: {\n        used: await getDailyQuotaUsage(\"ingestion_youtube_search\"),\n        cap: youtubeSearchDailyCap(),\n      },\n      webSearch: {\n        used: await getDailyQuotaUsage(\"ingestion_nimble_search\"),\n        cap: nimbleSearchDailyCap(),\n      },\n      serp: { used: await getDailyQuotaUsage(\"ingestion_serp_daily\"), cap: serpDiscoveryDailyCap() },\n      tiktokOembed: { used: await getDailyQuotaUsage(\"ingestion_tiktok_oembed\"), cap: tiktokOembedDailyCap() },\n      tiktokSerp: { used: await getDailyQuotaUsage(\"ingestion_tiktok_serp\"), cap: tiktokSerpDailyCap() },\n      contentDiscovery: {\n        used: await getDailyQuotaUsage(\"content_discovery_rapidapi\"),\n        cap: contentDiscoveryDailyCap(),\n      },\n      feedRefresh: { used: await getDailyQuotaUsage(\"youtube_daily_refreshes\"), cap: 60 },\n    },\n    providers: {\n      youtube: { configured: Boolean(process.env.YOUTUBE_API_KEY?.trim()), mode: \"embed_only\" },\n      instagram: {\n        configured: Boolean(process.env.RAPIDAPI_KEY?.trim()),\n        mode: \"hashtag_scraper_pending_review\",\n      },\n      facebook: { configured: false, mode: \"metadata_and_user_links_only\" },\n      googleSerp: {\n        configured: listConfiguredScrapers().length > 0,\n        mode: \"youtube_url_discovery_via_nimble_or_scraperapi\",\n        scrapers: listConfiguredScrapers(),\n        primary: process.env.SCRAPER_PRIMARY_PROVIDER?.trim() || \"nimble\",\n      },\n      tiktok: {\n        configured:\n          Boolean(process.env.SCRAPER_API_KEY?.trim()) || Boolean(process.env.RAPIDAPI_KEY?.trim()),\n        mode: \"serp_oembed_and_optional_hashtag_scraper\",\n        serp: Boolean(process.env.SCRAPER_API_KEY?.trim()),\n        hashtagApi: isTikTokScraperConfigured(),\n      },\n      contentDiscovery: await getContentDiscoveryStatus(),\n    },\n    discoveryCatalog: {\n      ...speciesDiscoveryStats(),\n      mergedYoutubeScopes: mergeDiscoveryScopes([]).length,\n      mergedSerpQueries: mergeSerpQueries([]).length,\n    },\n    scopes: mergeDiscoveryScopes([]).length,\n    recentRuns: recentRuns.slice(-10).reverse(),\n    checkpoints,\n  };\n}\n", "import { db, scraperHashtagsTable } from \"@workspace/db\";\nimport { fetchHashtagRecentMedia, normalizeHashtag } from \"../instagramScraper\";\nimport {\n  fetchInstagramHashtagSection,\n  fetchInstagramUserReels,\n} from \"../rapidapi/instagramFastApi\";\nimport { RapidApiError } from \"../rapidapi/client\";\nimport { normalizeInstagramPayload } from \"../contentDiscovery/normalize\";\nimport { logger } from \"../logger\";\nimport { buildInstagramCatalogCandidate } from \"./instagramProvider\";\nimport { persistCatalogCandidates } from \"./persistCatalogVideo\";\nimport type { ScrapedInstagramVideo } from \"../instagramScraper\";\nimport { sleepWithJitter } from \"./sustainableIngestion.js\";\n\nimport { getValidatedCreatorsForPlatform } from \"./creatorValidation\";\n\n/** Hunting/fishing creators \u2014 works on Pro plan via /profile + /reels. */\nexport const DEFAULT_INSTAGRAM_USERS = getValidatedCreatorsForPlatform(\"instagram\").map(\n  (c) => c.handle,\n) as unknown as readonly string[];\n\n// Fallback if allowlist is empty\nconst FALLBACK_INSTAGRAM_USERS = [\n  \"meateater\",\n  \"gohunt\",\n  \"firstlitehunting\",\n  \"hushin\",\n  \"bassnation\",\n  \"realtreeoutdoors\",\n] as const;\n\nfunction instagramUsers(): string[] {\n  const fromEnv = process.env.INGESTION_INSTAGRAM_USERS?.split(\",\")\n    .map((u) => u.trim().replace(/^@/, \"\"))\n    .filter(Boolean);\n  if (fromEnv?.length) return fromEnv;\n  const fromAllowlist = [...DEFAULT_INSTAGRAM_USERS];\n  return fromAllowlist.length > 0 ? fromAllowlist : [...FALLBACK_INSTAGRAM_USERS];\n}\n\nfunction useStableHashtagApi(): boolean {\n  return process.env.INGESTION_INSTAGRAM_STABLE_HASHTAG === \"true\";\n}\n\nfunction hashtagEnabledOnPlan(): boolean {\n  return process.env.INGESTION_INSTAGRAM_HASHTAG_ENABLED === \"true\";\n}\n\nfunction payloadToScrapedItems(\n  payload: Record<string, unknown>,\n  sourceLabel: string,\n): ScrapedInstagramVideo[] {\n  const normalized = normalizeInstagramPayload(payload, {\n    discoverySource: sourceLabel,\n    discoveryQuery: sourceLabel,\n    niche: null,\n  });\n  return normalized.map((item) => ({\n    sourceVideoId: item.sourceVideoId,\n    shortcode: item.sourceVideoId,\n    videoUrl: item.videoUrl,\n    thumbnailUrl: item.thumbnailUrl,\n    caption: item.caption,\n    creatorUsername: item.creatorUsername,\n  }));\n}\n\nasync function fetchHashtagViaFastApi(\n  hashtag: string,\n  limit: number,\n  section: \"top\" | \"recent\" = \"top\",\n): Promise<ScrapedInstagramVideo[]> {\n  const sections: Array<\"top\" | \"recent\"> =\n    section === \"top\" ? [\"top\", \"recent\"] : [section];\n\n  for (const trySection of sections) {\n    try {\n      const payload = await fetchInstagramHashtagSection(hashtag, { limit, section: trySection });\n      const items = payloadToScrapedItems(\n        payload,\n        `instagram:fast_hashtag:${hashtag}:${trySection}`,\n      ).slice(0, limit);\n      if (items.length > 0) return items;\n    } catch (err) {\n      if (err instanceof RapidApiError && err.statusCode === 401) {\n        logger.warn(\n          { hashtag },\n          \"Instagram hashtag endpoints disabled on your RapidAPI plan (Ultra required).\",\n        );\n        return [];\n      }\n      if (trySection === sections[sections.length - 1]) {\n        logger.warn({ err, hashtag, section: trySection }, \"Instagram fast hashtag fetch failed\");\n      }\n    }\n  }\n  return [];\n}\n\nasync function fetchUserReelsViaFastApi(\n  username: string,\n  limit: number,\n): Promise<ScrapedInstagramVideo[]> {\n  const payload = await fetchInstagramUserReels(username, { limit });\n  return payloadToScrapedItems(payload, `instagram:user_reels:${username}`).slice(0, limit);\n}\n\nfunction instagramRelevanceBoost(): number {\n  const raw = parseInt(process.env.INGESTION_INSTAGRAM_RELEVANCE_BOOST ?? \"18\", 10);\n  return Number.isFinite(raw) ? raw : 18;\n}\n\nfunction instagramHashtagRelevanceBoost(): number {\n  const raw = parseInt(process.env.INGESTION_INSTAGRAM_HASHTAG_RELEVANCE_BOOST ?? \"12\", 10);\n  return Number.isFinite(raw) ? raw : 12;\n}\n\nasync function persistItems(\n  items: ScrapedInstagramVideo[],\n  tag: string,\n  ingestionSource: string,\n  options?: { scopeBoost?: number },\n) {\n  const candidates = [];\n  let rejected = 0;\n  for (const item of items) {\n    const candidate = buildInstagramCatalogCandidate(item, tag, ingestionSource, {\n      scopeBoost: options?.scopeBoost,\n    });\n    if (candidate) candidates.push(candidate);\n    else rejected++;\n  }\n  const persisted = await persistCatalogCandidates(candidates);\n  return {\n    fetched: items.length,\n    eligible: candidates.length,\n    inserted: persisted.inserted,\n    skippedDuplicate: persisted.skippedDuplicate,\n    rejected,\n  };\n}\n\nexport async function ingestUserReelsToCatalog(\n  username: string,\n  options?: { limit?: number },\n): Promise<{\n  fetched: number;\n  eligible: number;\n  inserted: number;\n  skippedDuplicate: number;\n  rejected: number;\n}> {\n  const user = username.replace(/^@/, \"\").trim();\n  const limit = Math.min(50, Math.max(1, options?.limit ?? 12));\n  const items = await fetchUserReelsViaFastApi(user, limit);\n  if (items.length === 0) {\n    return { fetched: 0, eligible: 0, inserted: 0, skippedDuplicate: 0, rejected: 0 };\n  }\n  return persistItems(items, user, `instagram:user_reels:${user}`, {\n    scopeBoost: instagramRelevanceBoost(),\n  });\n}\n\nexport async function ingestHashtagToCatalog(\n  hashtag: string,\n  options?: { limit?: number; trackHashtag?: boolean; section?: \"top\" | \"recent\" },\n): Promise<{\n  fetched: number;\n  eligible: number;\n  inserted: number;\n  skippedDuplicate: number;\n  rejected: number;\n}> {\n  const tag = normalizeHashtag(hashtag);\n  const limit = Math.min(50, Math.max(1, options?.limit ?? 12));\n  let items: ScrapedInstagramVideo[] = [];\n\n  if (hashtagEnabledOnPlan()) {\n    if (useStableHashtagApi()) {\n      items = (await fetchHashtagRecentMedia(tag)).slice(0, limit);\n    }\n    if (items.length === 0) {\n      items = await fetchHashtagViaFastApi(tag, limit, options?.section ?? \"top\");\n    }\n  }\n\n  if (options?.trackHashtag !== false) {\n    await db\n      .insert(scraperHashtagsTable)\n      .values({ hashtag: tag, enabled: true, lastScrapedAt: new Date() })\n      .onConflictDoUpdate({\n        target: scraperHashtagsTable.hashtag,\n        set: { lastScrapedAt: new Date() },\n      });\n  }\n\n  if (items.length === 0) {\n    return { fetched: 0, eligible: 0, inserted: 0, skippedDuplicate: 0, rejected: 0 };\n  }\n\n  return persistItems(items, tag, `instagram:hashtag:${tag}`, {\n    scopeBoost: instagramHashtagRelevanceBoost(),\n  });\n}\n\n/** Primary Instagram ingest for Pro plan: rotate through outdoor creator accounts. */\nexport async function ingestInstagramUsersCycle(options?: {\n  usersPerCycle?: number;\n  reelsPerUser?: number;\n  userDelayMs?: number;\n}): Promise<{\n  users: Array<Record<string, unknown>>;\n  totals: { fetched: number; inserted: number; eligible: number; rejected: number };\n}> {\n  const users = instagramUsers();\n  const perCycle = Math.min(users.length, options?.usersPerCycle ?? 1);\n  const reelsPerUser = options?.reelsPerUser ?? 8;\n  const delay = options?.userDelayMs ?? 4000;\n\n  const startIdx = parseInt(process.env.INGESTION_INSTAGRAM_USER_ROTATION ?? \"0\", 10) || 0;\n  const results: Array<Record<string, unknown>> = [];\n  const totals = { fetched: 0, inserted: 0, eligible: 0, rejected: 0 };\n\n  for (let i = 0; i < perCycle; i++) {\n    const username = users[(startIdx + i) % users.length];\n    if (!username) continue;\n    if (i > 0 && delay > 0) await sleepWithJitter(delay);\n\n    try {\n      const result = await ingestUserReelsToCatalog(username, { limit: reelsPerUser });\n      totals.fetched += result.fetched;\n      totals.inserted += result.inserted;\n      totals.eligible += result.eligible;\n      totals.rejected += result.rejected;\n      results.push({ username, ...result });\n    } catch (err) {\n      logger.warn({ err, username }, \"Instagram user reels ingest failed\");\n      results.push({\n        username,\n        error: err instanceof Error ? err.message : String(err),\n      });\n    }\n  }\n\n  process.env.INGESTION_INSTAGRAM_USER_ROTATION = String((startIdx + perCycle) % users.length);\n  return { users: results, totals };\n}\n", "import { RapidApiError, rapidApiRequest } from \"./client.js\";\n\nexport const INSTAGRAM_FAST_HOST = \"instagram-api-fast-reliable-data-scraper.p.rapidapi.com\";\n\nfunction host(): string {\n  return process.env.RAPIDAPI_INSTAGRAM_FAST_HOST?.trim() || INSTAGRAM_FAST_HOST;\n}\n\nexport type InstagramFastApiOptions = {\n  limit?: number;\n  cursor?: string | null;\n  source?: string;\n  section?: \"top\" | \"recent\";\n};\n\nexport type InstagramProfile = {\n  pk: string;\n  username: string;\n  full_name?: string;\n};\n\n/** GET /profile?username= \u2014 resolves Instagram user id (pk) for feed/reels calls. */\nexport async function fetchInstagramProfile(username: string): Promise<InstagramProfile> {\n  const user = username.replace(/^@/, \"\").trim();\n  const data = await rapidApiRequest<Record<string, unknown>>({\n    host: host(),\n    path: \"/profile\",\n    params: { username: user },\n  });\n\n  const pk = data.pk?.toString() ?? data.id?.toString();\n  const resolvedUsername = typeof data.username === \"string\" ? data.username : user;\n  if (!pk) {\n    throw new RapidApiError(`Instagram profile lookup failed for @${user}`, 502);\n  }\n\n  return {\n    pk,\n    username: resolvedUsername,\n    full_name: typeof data.full_name === \"string\" ? data.full_name : undefined,\n  };\n}\n\n/** GET /reels?user_id= \u2014 creator reels (works on Pro plan). */\nexport async function fetchInstagramUserReels(\n  username: string,\n  options?: InstagramFastApiOptions,\n): Promise<Record<string, unknown>> {\n  const profile = await fetchInstagramProfile(username);\n  return rapidApiRequest({\n    host: host(),\n    path: \"/reels\",\n    params: {\n      user_id: profile.pk,\n      max_id: options?.cursor ?? undefined,\n    },\n  });\n}\n\n/** GET /feed?user_id= \u2014 user post feed. */\nexport async function fetchInstagramUserFeed(\n  username: string,\n  options?: InstagramFastApiOptions,\n): Promise<Record<string, unknown>> {\n  const profile = await fetchInstagramProfile(username);\n  return rapidApiRequest({\n    host: host(),\n    path: \"/feed\",\n    params: {\n      user_id: profile.pk,\n      max_id: options?.cursor ?? undefined,\n    },\n  });\n}\n\n/**\n * GET /hashtag_section?tag=&section=top|recent\n * RapidAPI playground: Hashtags \u2192 GET Hashtag Posts\n * Note: disabled on Pro ($4.99) \u2014 requires Ultra ($29.99) on this API.\n */\nexport async function fetchInstagramHashtagSection(\n  hashtag: string,\n  options?: InstagramFastApiOptions,\n): Promise<Record<string, unknown>> {\n  const tag = hashtag.replace(/^#/, \"\").trim();\n  return rapidApiRequest({\n    host: host(),\n    path: \"/hashtag_section\",\n    params: {\n      tag,\n      section: options?.section ?? \"top\",\n      max_id: options?.cursor ?? undefined,\n    },\n  });\n}\n\n/** GET /hashtag_search?hashtag= \u2014 hashtag metadata (also Ultra-only on Pro). */\nexport async function fetchInstagramHashtagSearch(\n  hashtag: string,\n): Promise<Record<string, unknown>> {\n  const tag = hashtag.replace(/^#/, \"\").trim();\n  return rapidApiRequest({\n    host: host(),\n    path: \"/hashtag_search\",\n    params: { hashtag: tag },\n  });\n}\n\n/** @deprecated Use fetchInstagramHashtagSection \u2014 kept for callers. */\nexport async function fetchInstagramHashtagReels(\n  hashtag: string,\n  options?: InstagramFastApiOptions,\n): Promise<Record<string, unknown>> {\n  return fetchInstagramHashtagSection(hashtag, options);\n}\n\n/** GET /clip_music \u2014 reels/clips using a music/audio cluster. */\nexport async function fetchInstagramClipsByMusic(\n  musicId: string,\n  options?: InstagramFastApiOptions,\n): Promise<Record<string, unknown>> {\n  return rapidApiRequest({\n    host: host(),\n    path: process.env.RAPIDAPI_INSTAGRAM_FAST_CLIP_MUSIC_PATH?.trim() || \"/clip_music\",\n    params: {\n      music_id: musicId,\n      source: options?.source ?? process.env.RAPIDAPI_INSTAGRAM_FAST_MUSIC_SOURCE ?? \"audio_cluster_id\",\n      count: options?.limit ?? 12,\n      cursor: options?.cursor ?? undefined,\n    },\n  });\n}\n\n/** GET /reels/trending \u2014 may not exist on all plans; kept for discovery targets. */\nexport async function fetchInstagramTrendingReels(\n  options?: InstagramFastApiOptions,\n): Promise<Record<string, unknown>> {\n  const path = process.env.RAPIDAPI_INSTAGRAM_FAST_TRENDING_PATH?.trim() || \"/reels/trending\";\n  return rapidApiRequest({\n    host: host(),\n    path,\n    params: {\n      count: options?.limit ?? 12,\n      cursor: options?.cursor ?? undefined,\n    },\n  });\n}\n\n/** GET /media?id= \u2014 single media by numeric pk (from feed/reels items). */\nexport async function fetchInstagramMediaById(\n  mediaId: string,\n): Promise<Record<string, unknown>> {\n  return rapidApiRequest({\n    host: host(),\n    path: \"/media\",\n    params: { id: mediaId },\n  });\n}\n", "import {\n  auditIngestionContent,\n  classifyIngestionCategory,\n} from \"../ingestion/contentGatekeeper\";\nimport { scoreRelevance, minRelevanceThreshold } from \"../ingestion/relevanceScorer\";\nimport { buildTikTokEmbedUrl, extractTikTokVideoId } from \"../ingestion/tiktokUrls\";\nimport { extractTikTokVideoUrlFromPayload } from \"../playback/tiktokPlayback.js\";\nimport type { ContentPlatform, NormalizedDiscoveredVideo } from \"./types\";\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n  return value && typeof value === \"object\" ? (value as Record<string, unknown>) : null;\n}\n\nfunction pickString(...values: unknown[]): string | null {\n  for (const v of values) {\n    if (typeof v === \"string\" && v.trim()) return v.trim();\n  }\n  return null;\n}\n\nfunction pickInt(...values: unknown[]): number | null {\n  for (const v of values) {\n    if (typeof v === \"number\" && Number.isFinite(v)) return Math.round(v);\n    if (typeof v === \"string\" && v.trim() && !Number.isNaN(Number(v))) return Math.round(Number(v));\n  }\n  return null;\n}\n\nfunction pickDate(...values: unknown[]): Date | null {\n  for (const v of values) {\n    if (typeof v === \"number\" && v > 1_000_000_000) {\n      const ms = v > 10_000_000_000 ? v : v * 1000;\n      return new Date(ms);\n    }\n    if (typeof v === \"string\" && v.trim()) {\n      const d = new Date(v);\n      if (!Number.isNaN(d.getTime())) return d;\n    }\n  }\n  return null;\n}\n\nfunction extractHashtags(text: string | null | undefined): string[] {\n  if (!text) return [];\n  const tags = new Set<string>();\n  for (const m of text.matchAll(/#([a-zA-Z0-9_]+)/g)) {\n    if (m[1]) tags.add(m[1].toLowerCase());\n  }\n  return [...tags];\n}\n\nfunction collectItemNodes(payload: unknown): Record<string, unknown>[] {\n  const root = asRecord(payload);\n  if (!root) return [];\n\n  const data = asRecord(root.data);\n  const sections = data?.sections;\n  if (Array.isArray(sections) && sections.length > 0) {\n    const fromSections: Record<string, unknown>[] = [];\n    for (const section of sections) {\n      const sec = asRecord(section);\n      const content = asRecord(sec?.layout_content);\n      const medias = content?.medias;\n      if (!Array.isArray(medias)) continue;\n      for (const entry of medias) {\n        const wrap = asRecord(entry);\n        const media = asRecord(wrap?.media) ?? wrap;\n        if (media) fromSections.push(media);\n      }\n    }\n    if (fromSections.length > 0) return fromSections;\n  }\n\n  const reelItems = data?.items;\n  if (Array.isArray(reelItems) && reelItems.length > 0) {\n    const unwrapped = reelItems\n      .map((item) => {\n        const obj = asRecord(item);\n        if (!obj) return null;\n        const media = asRecord(obj.media);\n        return media ?? obj;\n      })\n      .filter((item): item is Record<string, unknown> => !!item);\n    if (unwrapped.length > 0) return unwrapped;\n  }\n\n  const blocks = [\n    root.itemList,\n    root.item_list,\n    root.items,\n    root.videos,\n    root.data,\n    root.aweme_list,\n    root.clips,\n    root.reels,\n    root.medias,\n    asRecord(root.data)?.items,\n    asRecord(root.data)?.videos,\n    asRecord(root.data)?.clips,\n    asRecord(root.data)?.reels,\n    asRecord(root.data)?.itemList,\n    asRecord(root.data)?.aweme_list,\n  ];\n\n  for (const block of blocks) {\n    if (Array.isArray(block) && block.length > 0) {\n      return block.map((item) => asRecord(item)).filter((item): item is Record<string, unknown> => !!item);\n    }\n  }\n\n  if (Array.isArray(payload)) {\n    return payload.map((item) => asRecord(item)).filter((item): item is Record<string, unknown> => !!item);\n  }\n\n  return [];\n}\n\nfunction extractInstagramReelId(node: Record<string, unknown>): string | null {\n  return pickString(node.code, node.shortcode, node.id, node.pk, node.media_id);\n}\n\nfunction extractInstagramVideoUrl(node: Record<string, unknown>): string | null {\n  const direct = pickString(node.video_url, node.videoUrl);\n  if (direct?.startsWith(\"http\")) return direct;\n\n  const versions = node.video_versions;\n  if (Array.isArray(versions) && versions.length > 0) {\n    const first = asRecord(versions[0]);\n    const url = pickString(first?.url);\n    if (url) return url;\n  }\n  return null;\n}\n\nfunction collectInstagramCarouselChildren(node: Record<string, unknown>): Record<string, unknown>[] {\n  const carousel = node.carousel_media ?? node.carouselMedia;\n  if (Array.isArray(carousel)) {\n    return carousel.map((item) => asRecord(item)).filter((item): item is Record<string, unknown> => !!item);\n  }\n\n  const sidecar = asRecord(node.edge_sidecar_to_children);\n  const edges = sidecar?.edges;\n  if (!Array.isArray(edges)) return [];\n\n  return edges\n    .map((edge) => asRecord(asRecord(edge)?.node) ?? asRecord(edge))\n    .filter((item): item is Record<string, unknown> => !!item);\n}\n\nfunction instagramNodeHasVideo(node: Record<string, unknown>): boolean {\n  if (node.is_video === true) return true;\n  if (node.product_type === \"clips\") return true;\n  if (node.__typename === \"GraphVideo\") return true;\n  if (extractInstagramVideoUrl(node)) return true;\n\n  const mediaType = node.media_type;\n  if (mediaType === 1) return false;\n  if (mediaType === 2) return true;\n\n  if (mediaType === 8) {\n    const children = collectInstagramCarouselChildren(node);\n    return children.some((child) => instagramNodeHasVideo(child));\n  }\n\n  return false;\n}\n\nfunction mapTikTokItem(\n  node: Record<string, unknown>,\n  ctx: { discoverySource: string; discoveryQuery: string | null; niche: string | null },\n): NormalizedDiscoveredVideo | null {\n  const author = asRecord(node.author) ?? asRecord(node.authorMeta);\n  const username = pickString(author?.unique_id, author?.uniqueId, author?.username, node.author_name);\n  const videoId = pickString(node.id, node.aweme_id, node.video_id, node.itemId);\n  const shareUrlRaw = pickString(node.share_url, node.url, node.webVideoUrl, node.link);\n  const resolvedId = videoId ?? (shareUrlRaw ? extractTikTokVideoId(shareUrlRaw) : null);\n  if (!resolvedId) return null;\n\n  const handle = username ? `@${username.replace(/^@/, \"\")}` : null;\n  const shareUrl =\n    shareUrlRaw ??\n    (username ? `https://www.tiktok.com/@${username.replace(/^@/, \"\")}/video/${resolvedId}` : null);\n  const caption = pickString(node.desc, node.description, node.title, node.text);\n  const playUrl = extractTikTokVideoUrlFromPayload(node);\n  const videoUrl =\n    playUrl ??\n    shareUrl ??\n    (handle ? `https://www.tiktok.com/${handle.replace(/^@/, \"@\")}/video/${resolvedId}` : `https://www.tiktok.com/video/${resolvedId}`);\n\n  const music = asRecord(node.music) ?? asRecord(node.music_info);\n  const stats = asRecord(node.stats) ?? node;\n  const video = asRecord(node.video);\n\n  return {\n    platform: \"tiktok\",\n    sourceVideoId: resolvedId,\n    creatorUsername: username,\n    creatorProfileUrl: handle ? `https://www.tiktok.com/${handle}` : null,\n    caption,\n    hashtags: extractHashtags(caption),\n    audioTitle: pickString(music?.title, node.music_title, music?.name),\n    audioArtist: pickString(music?.author, music?.authorName, node.music_author),\n    audioId: pickString(music?.id, node.music_id, music?.mid),\n    viewCount: pickInt(stats?.play_count, stats?.playCount, node.view_count, node.views),\n    likeCount: pickInt(stats?.digg_count, stats?.likeCount, node.like_count, node.likes),\n    commentCount: pickInt(stats?.comment_count, stats?.commentCount, node.comment_count),\n    shareCount: pickInt(stats?.share_count, stats?.shareCount, node.share_count),\n    publishedAt: pickDate(node.create_time, node.createTime, node.published_at),\n    videoUrl,\n    thumbnailUrl: pickString(node.cover, node.cover_image_url, video?.cover, video?.origin_cover),\n    embedUrl: buildTikTokEmbedUrl(resolvedId),\n    durationSec: pickInt(video?.duration, node.duration),\n    niche: ctx.niche,\n    category: null,\n    discoverySource: ctx.discoverySource,\n    discoveryQuery: ctx.discoveryQuery,\n    rawPayload: node,\n  };\n}\n\nfunction mapInstagramItem(\n  node: Record<string, unknown>,\n  ctx: { discoverySource: string; discoveryQuery: string | null; niche: string | null },\n): NormalizedDiscoveredVideo | null {\n  const reelId = extractInstagramReelId(node);\n  if (!reelId) return null;\n  if (!instagramNodeHasVideo(node)) return null;\n\n  const user = asRecord(node.user) ?? asRecord(node.owner);\n  const username = pickString(user?.username, node.username, node.owner_username);\n  const caption = pickString(\n    asRecord(node.caption)?.text,\n    node.caption,\n    node.description,\n    node.title,\n  );\n  const shortcode = pickString(node.code, node.shortcode) ?? reelId;\n  const nativeMp4 = extractInstagramVideoUrl(node);\n  if (!nativeMp4) return null;\n\n  const videoUrl = nativeMp4;\n  const durationSec = pickInt(node.video_duration, node.duration);\n\n  const mediaType = node.media_type;\n  if (mediaType === 1) return null;\n\n  const clipsMeta = asRecord(node.clips_metadata);\n  const music = asRecord(node.music) ?? asRecord(clipsMeta?.original_sound_info);\n\n  return {\n    platform: \"instagram\",\n    sourceVideoId: shortcode,\n    creatorUsername: username,\n    creatorProfileUrl: username ? `https://www.instagram.com/${username}/` : null,\n    caption,\n    hashtags: extractHashtags(caption),\n    audioTitle: pickString(music?.title, clipsMeta?.music_canonical_id),\n    audioArtist: pickString(music?.display_artist, music?.artist_name),\n    audioId: pickString(music?.id, music?.audio_cluster_id, node.music_id),\n    viewCount: pickInt(node.view_count, node.play_count, node.video_view_count),\n    likeCount: pickInt(node.like_count, node.likes),\n    commentCount: pickInt(node.comment_count, node.comments),\n    shareCount: pickInt(node.share_count, node.shares),\n    publishedAt: pickDate(node.taken_at, node.taken_at_timestamp, node.created_at),\n    videoUrl,\n    thumbnailUrl: pickString(\n      node.thumbnail_url,\n      node.display_url,\n      asRecord(asRecord(node.image_versions2)?.candidates as unknown)?.url,\n    ),\n    embedUrl: shortcode ? `https://www.instagram.com/reel/${shortcode}/embed` : null,\n    durationSec,\n    niche: ctx.niche,\n    category: null,\n    discoverySource: ctx.discoverySource,\n    discoveryQuery: ctx.discoveryQuery,\n    rawPayload: node,\n  };\n}\n\nexport function normalizeTikTokPayload(\n  payload: unknown,\n  ctx: { discoverySource: string; discoveryQuery: string | null; niche?: string | null },\n): NormalizedDiscoveredVideo[] {\n  return collectItemNodes(payload)\n    .map((node) =>\n      mapTikTokItem(node, {\n        discoverySource: ctx.discoverySource,\n        discoveryQuery: ctx.discoveryQuery,\n        niche: ctx.niche ?? null,\n      }),\n    )\n    .filter((item): item is NormalizedDiscoveredVideo => !!item);\n}\n\nexport function normalizeInstagramPayload(\n  payload: unknown,\n  ctx: { discoverySource: string; discoveryQuery: string | null; niche?: string | null },\n): NormalizedDiscoveredVideo[] {\n  return collectItemNodes(payload)\n    .map((node) =>\n      mapInstagramItem(node, {\n        discoverySource: ctx.discoverySource,\n        discoveryQuery: ctx.discoveryQuery,\n        niche: ctx.niche ?? null,\n      }),\n    )\n    .filter((item): item is NormalizedDiscoveredVideo => !!item);\n}\n\nexport function enrichWithContentGatekeeper(\n  item: NormalizedDiscoveredVideo,\n): NormalizedDiscoveredVideo & {\n  eligible: boolean;\n  rejectionReason: string | null;\n  relevanceScore: number;\n} {\n  const gateText = [\n    item.caption ?? \"\",\n    item.hashtags.map((h) => `#${h}`).join(\" \"),\n    item.audioTitle ?? \"\",\n  ].join(\" \");\n\n  const gate = auditIngestionContent(gateText, null, {\n    creatorHandle: item.creatorUsername,\n    hashtags: item.hashtags,\n  });\n\n  const relevanceScore = scoreRelevance({\n    title: item.caption?.slice(0, 120) ?? \"\",\n    description: gateText,\n    viewCount: item.viewCount ?? undefined,\n    likeCount: item.likeCount ?? undefined,\n    gatekeeper: gate,\n    scopeBoost: item.niche ? 3 : 0,\n  });\n\n  const meetsRelevance = relevanceScore >= minRelevanceThreshold();\n  const eligible = gate.valid && meetsRelevance;\n\n  let rejectionReason: string | null = null;\n  if (!gate.valid) rejectionReason = gate.reason;\n  else if (!meetsRelevance) {\n    rejectionReason = `Relevance score ${relevanceScore} below threshold ${minRelevanceThreshold()}`;\n  }\n\n  const category = gate.valid ? classifyIngestionCategory(gateText) : item.category;\n  return {\n    ...item,\n    category: category ?? item.category,\n    eligible,\n    rejectionReason,\n    relevanceScore,\n  };\n}\n\nexport function extractNextCursor(payload: unknown): string | null {\n  const root = asRecord(payload);\n  if (!root) return null;\n  const data = asRecord(root.data);\n  return pickString(\n    root.cursor,\n    root.next_cursor,\n    root.nextCursor,\n    root.max_cursor,\n    root.hasMore === false ? null : root.cursor,\n    asRecord(root.pagination)?.next_cursor,\n    data?.cursor,\n    data?.nextCursor,\n    data?.maxCursor,\n    root.has_more === 1 ? pickString(root.cursor) : null,\n  );\n}\n", "/**\n * Creator account validation for discovery targets and ingestion.\n *\n * Before adding any social account to discovery_targets or ingesting at scale,\n * validate that the majority of content aligns with outdoor recreation themes.\n */\n\nimport {\n  auditCreatorProfile,\n  auditIngestionContent,\n  isBlockedCreator,\n} from \"./contentGatekeeper\";\n\nexport type ValidatedCreator = {\n  handle: string;\n  platform: \"tiktok\" | \"instagram\" | \"youtube\";\n  niche: \"hunting\" | \"fishing\" | \"camping\" | \"wildlife\" | \"survival\" | \"offroad\" | \"general\";\n  label: string;\n};\n\n/**\n * Curated outdoor creators \u2014 pre-validated, safe to ingest without sample audit.\n * Researched for hunting, fishing, camping, wildlife, and outdoor lifestyle focus.\n */\nexport const VALIDATED_OUTDOOR_CREATORS: ValidatedCreator[] = [\n  // Hunting\n  { handle: \"meateater\", platform: \"tiktok\", niche: \"hunting\", label: \"MeatEater\" },\n  { handle: \"meateater\", platform: \"instagram\", niche: \"hunting\", label: \"MeatEater\" },\n  { handle: \"hushin\", platform: \"tiktok\", niche: \"hunting\", label: \"HUSHIN\" },\n  { handle: \"hushin\", platform: \"instagram\", niche: \"hunting\", label: \"HUSHIN\" },\n  { handle: \"gohunt\", platform: \"instagram\", niche: \"hunting\", label: \"goHUNT\" },\n  { handle: \"firstlitehunting\", platform: \"instagram\", niche: \"hunting\", label: \"First Lite\" },\n  { handle: \"realtreeoutdoors\", platform: \"instagram\", niche: \"hunting\", label: \"Realtree Outdoors\" },\n  { handle: \"hunting_public\", platform: \"tiktok\", niche: \"hunting\", label: \"Hunting Public\" },\n  { handle: \"thehuntingpublic\", platform: \"tiktok\", niche: \"hunting\", label: \"The Hunting Public\" },\n  { handle: \"whitetail_properties\", platform: \"tiktok\", niche: \"hunting\", label: \"Whitetail Properties\" },\n  { handle: \"bonecollector\", platform: \"tiktok\", niche: \"hunting\", label: \"Bone Collector\" },\n  { handle: \"eastmanshuntingjournals\", platform: \"tiktok\", niche: \"hunting\", label: \"Eastmans Hunting\" },\n  // Fishing\n  { handle: \"bassnation\", platform: \"instagram\", niche: \"fishing\", label: \"Bass Nation\" },\n  { handle: \"bassmaster\", platform: \"tiktok\", niche: \"fishing\", label: \"Bassmaster\" },\n  { handle: \"blacktiph\", platform: \"tiktok\", niche: \"fishing\", label: \"BlacktipH\" },\n  { handle: \"jonb\", platform: \"tiktok\", niche: \"fishing\", label: \"Jon B\" },\n  { handle: \"1stphorm\", platform: \"tiktok\", niche: \"fishing\", label: \"1st Phorm Fishing\" },\n  { handle: \"flukemaster\", platform: \"tiktok\", niche: \"fishing\", label: \"Flukemaster\" },\n  { handle: \"mysterytacklebox\", platform: \"tiktok\", niche: \"fishing\", label: \"Mystery Tackle Box\" },\n  { handle: \"landsharkoutdoors\", platform: \"tiktok\", niche: \"fishing\", label: \"Landshark Outdoors\" },\n  // Camping / outdoor lifestyle\n  { handle: \"outdoorboys\", platform: \"tiktok\", niche: \"camping\", label: \"Outdoor Boys\" },\n  { handle: \"outdoorboys\", platform: \"instagram\", niche: \"camping\", label: \"Outdoor Boys\" },\n  { handle: \"aloneonpurpose\", platform: \"tiktok\", niche: \"camping\", label: \"Alone on Purpose\" },\n  { handle: \"natureismetal\", platform: \"instagram\", niche: \"wildlife\", label: \"Nature is Metal\" },\n  // Survival / bushcraft\n  { handle: \"taoutdoors\", platform: \"tiktok\", niche: \"survival\", label: \"TA Outdoors\" },\n  { handle: \"corporals_corner\", platform: \"tiktok\", niche: \"survival\", label: \"Corporal's Corner\" },\n];\n\nconst allowlistByPlatform = new Map<string, Set<string>>();\nfor (const creator of VALIDATED_OUTDOOR_CREATORS) {\n  const key = creator.platform;\n  if (!allowlistByPlatform.has(key)) allowlistByPlatform.set(key, new Set());\n  allowlistByPlatform.get(key)!.add(creator.handle.toLowerCase());\n}\n\nexport function isValidatedCreator(\n  platform: string,\n  handle: string,\n): boolean {\n  const normalized = handle.replace(/^@/, \"\").toLowerCase();\n  const allowed = allowlistByPlatform.get(platform.toLowerCase());\n  return allowed?.has(normalized) ?? false;\n}\n\nexport function getValidatedCreatorsForPlatform(\n  platform: \"tiktok\" | \"instagram\",\n): ValidatedCreator[] {\n  return VALIDATED_OUTDOOR_CREATORS.filter((c) => c.platform === platform);\n}\n\nexport type CreatorValidationResult = {\n  valid: boolean;\n  reason: string;\n  trusted: boolean;\n  passRate: number;\n};\n\n/**\n * Validate a creator before adding to discovery targets or bulk ingestion.\n * Trusted allowlist creators skip sample audit; unknown creators require sample validation.\n */\nexport function validateCreatorAccount(input: {\n  platform: string;\n  handle: string;\n  bio?: string | null;\n  sampleCaptions?: string[];\n  niche?: string | null;\n}): CreatorValidationResult {\n  const handle = input.handle.replace(/^@/, \"\").toLowerCase();\n\n  if (isBlockedCreator(handle)) {\n    return { valid: false, reason: `Blocked creator: ${handle}`, trusted: false, passRate: 0 };\n  }\n\n  if (isValidatedCreator(input.platform, handle)) {\n    return {\n      valid: true,\n      reason: \"Pre-validated outdoor creator\",\n      trusted: true,\n      passRate: 1,\n    };\n  }\n\n  const audit = auditCreatorProfile({\n    handle,\n    bio: input.bio,\n    sampleCaptions: input.sampleCaptions,\n    niche: input.niche,\n  });\n\n  return {\n    valid: audit.valid,\n    reason: audit.reason,\n    trusted: false,\n    passRate: audit.passRate,\n  };\n}\n\n/**\n * Validate a single video caption from an unknown creator during ingestion.\n * Stricter than profile validation \u2014 each video must pass individually.\n */\nexport function validateVideoContent(input: {\n  caption?: string | null;\n  hashtags?: string[];\n  creatorHandle?: string | null;\n  audioTitle?: string | null;\n}): { valid: boolean; reason: string } {\n  const handle = input.creatorHandle?.replace(/^@/, \"\").toLowerCase();\n  if (handle && isBlockedCreator(handle)) {\n    return { valid: false, reason: `Blocked creator: ${handle}` };\n  }\n\n  const gateText = [\n    input.caption ?? \"\",\n    input.hashtags?.map((h) => `#${h}`).join(\" \") ?? \"\",\n    input.audioTitle ?? \"\",\n  ].join(\" \");\n\n  const audit = auditIngestionContent(gateText, null, {\n    creatorHandle: handle,\n    hashtags: input.hashtags,\n  });\n\n  return { valid: audit.valid, reason: audit.reason };\n}\n\n/**\n * Validate sample posts from a discovery fetch before enabling a profile target.\n * Used when collecting from an unknown profile for the first time.\n */\nexport function validateDiscoverySamples(\n  samples: Array<{ caption?: string | null; hashtags?: string[] }>,\n  options?: { minPassRate?: number },\n): { valid: boolean; reason: string; passRate: number; passed: number; total: number } {\n  const minPassRate = options?.minPassRate ?? 0.6;\n  if (samples.length === 0) {\n    return { valid: false, reason: \"No samples to validate\", passRate: 0, passed: 0, total: 0 };\n  }\n\n  let passed = 0;\n  for (const sample of samples) {\n    const result = validateVideoContent({\n      caption: sample.caption,\n      hashtags: sample.hashtags,\n    });\n    if (result.valid) passed++;\n  }\n\n  const passRate = passed / samples.length;\n  return {\n    valid: passRate >= minPassRate,\n    reason:\n      passRate >= minPassRate\n        ? `${passed}/${samples.length} samples pass (${Math.round(passRate * 100)}%)`\n        : `Only ${passed}/${samples.length} samples pass (${Math.round(passRate * 100)}% < ${minPassRate * 100}% required)`,\n    passRate,\n    passed,\n    total: samples.length,\n  };\n}\n", "import { formatSerpDiscoveryQuery } from \"./discoveryQuery.js\";\nimport { extractYouTubeId } from \"../videoDuplicateGuard.js\";\nimport { searchYouTubeLinks } from \"../scraping/router.js\";\nimport { consumeDailyQuota } from \"./quotaBudget.js\";\nimport { hydrateYouTubeUrl } from \"./youtubeProvider.js\";\nimport type { CatalogVideoCandidate } from \"./types.js\";\nimport { validateYouTubePlayback } from \"./videoPlaybackValidator.js\";\nimport {\n  nimbleHydrateDelayMs,\n  nimbleHydrateMax,\n  nimbleLinksPerQuery,\n  nimbleSearchDailyCap,\n  sleepWithJitter,\n} from \"./sustainableIngestion.js\";\n\nfunction uniqueYouTubeUrls(urls: string[]): string[] {\n  const seen = new Set<string>();\n  const out: string[] = [];\n  for (const url of urls) {\n    const id = extractYouTubeId(url);\n    if (!id || seen.has(id)) continue;\n    seen.add(id);\n    out.push(url);\n  }\n  return out;\n}\n\n/**\n * Discover YouTube videos via Nimble (primary) or ScraperAPI (fallback) web search,\n * validate playback, then hydrate metadata through the YouTube Data API.\n */\nexport async function discoverYouTubeViaWebSearch(\n  query: string,\n  apiKey: string,\n  ingestionSource = \"web_search:youtube\",\n): Promise<{\n  candidates: CatalogVideoCandidate[];\n  quotaUsed: number;\n  attempts: Array<{ provider: string; ok: boolean; resultCount: number; error?: string }>;\n}> {\n  const quota = await consumeDailyQuota(\"ingestion_nimble_search\", nimbleSearchDailyCap());\n  if (!quota.allowed) {\n    return { candidates: [], quotaUsed: 0, attempts: [] };\n  }\n\n  const { results, attempts } = await searchYouTubeLinks(\n    formatSerpDiscoveryQuery(query),\n    nimbleLinksPerQuery(),\n  );\n  const links = uniqueYouTubeUrls(results.map((r) => r.url)).slice(0, nimbleLinksPerQuery());\n\n  const candidates: CatalogVideoCandidate[] = [];\n  const hydrateLimit = Math.min(links.length, nimbleHydrateMax());\n\n  for (let i = 0; i < hydrateLimit; i++) {\n    const link = links[i];\n    if (!link) break;\n    if (i > 0) await sleepWithJitter(nimbleHydrateDelayMs());\n\n    const playback = await validateYouTubePlayback(link);\n    if (!playback.ok) continue;\n\n    try {\n      const candidate = await hydrateYouTubeUrl(link, apiKey, ingestionSource);\n      if (candidate) candidates.push(candidate);\n    } catch {\n      /* skip broken hydration */\n    }\n  }\n\n  return { candidates, quotaUsed: 1, attempts };\n}\n", "import { logger } from \"../logger.js\";\nimport type { ScrapeSearchOptions, ScrapeSearchResult, WebSearchScraper } from \"./types.js\";\n\nconst NIMBLE_API_BASE = \"https://sdk.nimbleway.com/v1\";\n\ntype NimbleSearchHit = {\n  url?: string;\n  title?: string;\n  description?: string;\n};\n\nfunction apiKey(): string | null {\n  return process.env.NIMBLE_API_KEY?.trim() || null;\n}\n\nfunction parseHits(payload: unknown): NimbleSearchHit[] {\n  if (!payload || typeof payload !== \"object\") return [];\n  const data = payload as Record<string, unknown>;\n  const results = Array.isArray(data.results) ? data.results : [];\n  return results.filter((r): r is NimbleSearchHit => Boolean(r && typeof r === \"object\"));\n}\n\n/** Nimble Search API \u2014 primary web discovery (YouTube-focused queries). */\nexport class NimbleWebScraper implements WebSearchScraper {\n  readonly name = \"nimble\";\n\n  isConfigured(): boolean {\n    return Boolean(apiKey());\n  }\n\n  async search(options: ScrapeSearchOptions): Promise<ScrapeSearchResult[]> {\n    const key = apiKey();\n    if (!key) return [];\n\n    const body: Record<string, unknown> = {\n      query: options.query,\n      max_results: Math.min(Math.max(options.maxResults ?? 10, 1), 50),\n      search_depth: \"lite\",\n      country: \"US\",\n      locale: \"en\",\n    };\n\n    if (options.includeDomains?.length) {\n      body.include_domains = options.includeDomains.slice(0, 50);\n    }\n    if (options.timeRange) {\n      body.time_range = options.timeRange;\n    }\n\n    const ctrl = new AbortController();\n    const timer = setTimeout(() => ctrl.abort(), 45_000);\n\n    try {\n      const res = await fetch(`${NIMBLE_API_BASE}/search`, {\n        method: \"POST\",\n        headers: {\n          Authorization: `Bearer ${key}`,\n          \"Content-Type\": \"application/json\",\n          Accept: \"application/json\",\n        },\n        body: JSON.stringify(body),\n        signal: ctrl.signal,\n      });\n\n      if (!res.ok) {\n        const text = await res.text().catch(() => \"\");\n        throw new Error(`Nimble search failed (${res.status}): ${text.slice(0, 200)}`);\n      }\n\n      const data = await res.json();\n      return parseHits(data)\n        .map((hit) => ({\n          url: hit.url?.trim() ?? \"\",\n          title: hit.title,\n          description: hit.description,\n        }))\n        .filter((h) => h.url.length > 0);\n    } finally {\n      clearTimeout(timer);\n    }\n  }\n}\n\nexport const nimbleScraper = new NimbleWebScraper();\n\nexport function isNimbleConfigured(): boolean {\n  return nimbleScraper.isConfigured();\n}\n", "import type { ScrapeSearchOptions, ScrapeSearchResult, WebSearchScraper } from \"./types.js\";\n\ntype SerpVideo = { link?: string; title?: string; description?: string };\ntype SerpOrganic = { link?: string; title?: string; description?: string };\n\nfunction scraperKey(): string | null {\n  return process.env.SCRAPER_API_KEY?.trim() || null;\n}\n\n/** ScraperAPI Google SERP \u2014 fallback when Nimble is unavailable or rate-limited. */\nexport class ScraperApiWebScraper implements WebSearchScraper {\n  readonly name = \"scraperapi\";\n\n  isConfigured(): boolean {\n    return Boolean(scraperKey());\n  }\n\n  async search(options: ScrapeSearchOptions): Promise<ScrapeSearchResult[]> {\n    const key = scraperKey();\n    if (!key) return [];\n\n    const url =\n      `https://api.scraperapi.com/structured/google/search` +\n      `?api_key=${encodeURIComponent(key)}` +\n      `&query=${encodeURIComponent(options.query)}`;\n\n    const response = await fetch(url, { headers: { Accept: \"application/json\" } });\n    if (!response.ok) {\n      throw new Error(`ScraperAPI SERP failed (${response.status})`);\n    }\n\n    const data = (await response.json()) as Record<string, unknown>;\n    const videos = Array.isArray(data.videos) ? (data.videos as SerpVideo[]) : [];\n    const organic = Array.isArray(data.organic_results) ? (data.organic_results as SerpOrganic[]) : [];\n\n    const seen = new Set<string>();\n    const out: ScrapeSearchResult[] = [];\n\n    for (const item of [...videos, ...organic]) {\n      const link = item.link?.trim();\n      if (!link || seen.has(link)) continue;\n      if (options.includeDomains?.length) {\n        const host = tryHost(link);\n        if (!host || !options.includeDomains.some((d) => host.includes(d.replace(/^www\\./, \"\")))) {\n          continue;\n        }\n      }\n      seen.add(link);\n      out.push({ url: link, title: item.title, description: item.description });\n      if (out.length >= (options.maxResults ?? 10)) break;\n    }\n\n    return out;\n  }\n}\n\nfunction tryHost(url: string): string | null {\n  try {\n    return new URL(url).hostname.toLowerCase();\n  } catch {\n    return null;\n  }\n}\n\nexport const scraperApiScraper = new ScraperApiWebScraper();\n", "import { logger } from \"../logger.js\";\nimport { nimbleScraper } from \"./nimbleClient.js\";\nimport { scraperApiScraper } from \"./scraperApiClient.js\";\nimport type { ScrapeSearchOptions, ScrapeSearchResult, ScraperAttempt, WebSearchScraper } from \"./types.js\";\n\nconst YOUTUBE_DOMAINS = [\"youtube.com\", \"youtu.be\"];\n\nfunction primaryProvider(): \"nimble\" | \"scraperapi\" {\n  const raw = process.env.SCRAPER_PRIMARY_PROVIDER?.trim().toLowerCase();\n  if (raw === \"scraperapi\") return \"scraperapi\";\n  return \"nimble\";\n}\n\nfunction orderedScrapers(): WebSearchScraper[] {\n  const primary = primaryProvider();\n  const nimble = nimbleScraper;\n  const scraperApi = scraperApiScraper;\n\n  if (primary === \"nimble\") {\n    return [nimble, scraperApi].filter((s) => s.isConfigured());\n  }\n  return [scraperApi, nimble].filter((s) => s.isConfigured());\n}\n\n/**\n * Search the web for video URLs using Nimble first, ScraperAPI as fallback.\n * Returns hits from the first provider that succeeds.\n */\nexport async function searchWebForUrls(\n  options: ScrapeSearchOptions,\n): Promise<{ results: ScrapeSearchResult[]; attempts: ScraperAttempt[] }> {\n  const scrapers = orderedScrapers();\n  const attempts: ScraperAttempt[] = [];\n\n  if (scrapers.length === 0) {\n    return { results: [], attempts };\n  }\n\n  for (const scraper of scrapers) {\n    try {\n      const results = await scraper.search(options);\n      attempts.push({ provider: scraper.name, ok: true, resultCount: results.length });\n      if (results.length > 0) {\n        return { results, attempts };\n      }\n      logger.debug({ provider: scraper.name, query: options.query }, \"Scraper returned 0 results, trying next\");\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      attempts.push({ provider: scraper.name, ok: false, resultCount: 0, error: message.slice(0, 240) });\n      logger.warn({ err, provider: scraper.name, query: options.query }, \"Web search provider failed\");\n    }\n  }\n\n  return { results: [], attempts };\n}\n\n/** YouTube-only search \u2014 convenience wrapper. */\nexport async function searchYouTubeLinks(\n  query: string,\n  maxResults = 10,\n): Promise<{ results: ScrapeSearchResult[]; attempts: ScraperAttempt[] }> {\n  return searchWebForUrls({\n    query,\n    maxResults,\n    includeDomains: YOUTUBE_DOMAINS,\n  });\n}\n\nconst TIKTOK_DOMAINS = [\"tiktok.com\", \"vm.tiktok.com\"];\n\n/** TikTok URL discovery via the same Nimble \u2192 ScraperAPI chain. */\nexport async function searchTikTokLinks(\n  query: string,\n  maxResults = 10,\n): Promise<{ results: ScrapeSearchResult[]; attempts: ScraperAttempt[] }> {\n  return searchWebForUrls({\n    query,\n    maxResults,\n    includeDomains: TIKTOK_DOMAINS,\n  });\n}\n\nexport function listConfiguredScrapers(): string[] {\n  return orderedScrapers().map((s) => s.name);\n}\n", "import { extractYouTubeId } from \"../videoDuplicateGuard.js\";\n\nexport type PlaybackValidationResult = {\n  ok: boolean;\n  platform: \"youtube\" | \"unknown\";\n  reason?: string;\n  embeddable?: boolean;\n};\n\n/** Quick YouTube oEmbed check \u2014 confirms the video exists and is embeddable. */\nexport async function validateYouTubePlayback(\n  videoUrl: string,\n  timeoutMs = 10_000,\n): Promise<PlaybackValidationResult> {\n  const id = extractYouTubeId(videoUrl);\n  if (!id) {\n    return { ok: false, platform: \"unknown\", reason: \"invalid_youtube_url\" };\n  }\n\n  const oembedUrl = `https://www.youtube.com/oembed?url=${encodeURIComponent(\n    `https://www.youtube.com/watch?v=${id}`,\n  )}&format=json`;\n\n  const ctrl = new AbortController();\n  const timer = setTimeout(() => ctrl.abort(), timeoutMs);\n\n  try {\n    const res = await fetch(oembedUrl, {\n      signal: ctrl.signal,\n      headers: { Accept: \"application/json\" },\n    });\n\n    if (res.status === 401 || res.status === 403) {\n      return { ok: false, platform: \"youtube\", reason: \"not_embeddable\", embeddable: false };\n    }\n    if (!res.ok) {\n      return { ok: false, platform: \"youtube\", reason: `oembed_${res.status}` };\n    }\n\n    await res.json();\n    return { ok: true, platform: \"youtube\", embeddable: true };\n  } catch (err) {\n    const message = err instanceof Error ? err.message : \"oembed_failed\";\n    return { ok: false, platform: \"youtube\", reason: message };\n  } finally {\n    clearTimeout(timer);\n  }\n}\n\n/** Filter candidate URLs to those that pass playback validation. */\nexport async function filterValidYouTubeUrls(urls: string[]): Promise<string[]> {\n  const valid: string[] = [];\n  for (const url of urls) {\n    const result = await validateYouTubePlayback(url);\n    if (result.ok) valid.push(url);\n  }\n  return valid;\n}\n", "import { consumeDailyQuota, tiktokSerpDailyCap } from \"./quotaBudget.js\";\nimport type { CatalogVideoCandidate } from \"./types.js\";\nimport { hydrateTikTokUrl } from \"./tiktokProvider.js\";\nimport { searchTikTokLinks } from \"../scraping/router.js\";\nimport {\n  serpHydrateDelayMs,\n  serpHydrateMax,\n  serpLinksPerQuery,\n  sleepWithJitter,\n} from \"./sustainableIngestion.js\";\nimport { isTikTokUrl } from \"./tiktokUrls.js\";\n\nfunction collectTikTokLinks(urls: string[]): string[] {\n  const out = new Set<string>();\n  for (const link of urls) {\n    const trimmed = link.trim();\n    if (!trimmed || !isTikTokUrl(trimmed)) continue;\n    if (trimmed.includes(\"/video/\") || trimmed.includes(\"vm.tiktok.com\")) {\n      out.add(trimmed);\n    }\n  }\n  return [...out];\n}\n\nexport async function discoverTikTokViaGoogleSerp(\n  query: string,\n): Promise<{ candidates: CatalogVideoCandidate[]; rejected: number; quotaUsed: number }> {\n  const quota = await consumeDailyQuota(\"ingestion_tiktok_serp\", tiktokSerpDailyCap());\n  if (!quota.allowed) {\n    return { candidates: [], rejected: 0, quotaUsed: 0 };\n  }\n\n  const { results } = await searchTikTokLinks(query, serpLinksPerQuery());\n  const links = collectTikTokLinks(results.map((r) => r.url)).slice(0, serpLinksPerQuery());\n\n  const candidates: CatalogVideoCandidate[] = [];\n  let rejected = 0;\n  let quotaUsed = 1;\n  const hydrateLimit = Math.min(links.length, serpHydrateMax());\n\n  for (let i = 0; i < hydrateLimit; i++) {\n    const link = links[i];\n    if (!link) break;\n    if (i > 0) await sleepWithJitter(serpHydrateDelayMs());\n    try {\n      const result = await hydrateTikTokUrl(link, \"tiktok:web_search\", { scopeBoost: 2 });\n      quotaUsed += result.quotaUsed;\n      if (result.candidate) candidates.push(result.candidate);\n      else if (result.rejected) rejected++;\n    } catch {\n      /* skip broken link */\n    }\n  }\n\n  return { candidates, rejected, quotaUsed };\n}\n", "import { runHeuristics } from \"../../routes/feed\";\nimport {\n  auditIngestionContent,\n  classifyIngestionCategory,\n} from \"./contentGatekeeper\";\nimport { scoreRelevance, minRelevanceThreshold } from \"./relevanceScorer\";\nimport { consumeDailyQuota, tiktokOembedDailyCap } from \"./quotaBudget\";\nimport type { CatalogVideoCandidate } from \"./types\";\nimport {\n  buildTikTokEmbedUrl,\n  buildTikTokWatchUrl,\n  extractTikTokVideoId,\n  resolveTikTokCanonicalUrl,\n} from \"./tiktokUrls\";\nimport { fetchFreshTikTokCdnUrl, isTikTokCdnUrl } from \"../playback/tiktokPlayback.js\";\nimport { validateDirectVideoUrl } from \"../playback/validateVideoUrl.js\";\nimport { max429Retries, tiktokOembedDelayMs, tiktokRelevanceBoost } from \"./sustainableIngestion.js\";\n\ntype TikTokOembed = {\n  title?: string;\n  author_name?: string;\n  author_url?: string;\n  thumbnail_url?: string;\n  html?: string;\n};\n\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction parseAuthorHandle(authorUrl?: string | null, authorName?: string | null): string {\n  if (authorUrl) {\n    const m = authorUrl.match(/tiktok\\.com\\/@([^/?#]+)/i);\n    if (m?.[1]) return `@${m[1]}`;\n  }\n  if (authorName) {\n    return `@${authorName.toLowerCase().replace(/\\s+/g, \"_\").slice(0, 30)}`;\n  }\n  return \"@tiktok\";\n}\n\nfunction extractHashtagsFromText(text: string): string[] {\n  const tags = new Set<string>([\"tiktok\"]);\n  for (const match of text.matchAll(/#([a-zA-Z0-9_]+)/g)) {\n    if (match[1]) tags.add(match[1].toLowerCase());\n  }\n  return [...tags].slice(0, 20);\n}\n\nasync function fetchTikTokOembed(canonicalUrl: string, attempt = 0): Promise<TikTokOembed | null> {\n  const endpoint = `https://www.tiktok.com/oembed?url=${encodeURIComponent(canonicalUrl)}`;\n  const ctrl = new AbortController();\n  const timer = setTimeout(() => ctrl.abort(), 12_000);\n  try {\n    const res = await fetch(endpoint, {\n      signal: ctrl.signal,\n      headers: { Accept: \"application/json\" },\n    });\n    if (res.status === 429 && attempt < max429Retries()) {\n      await sleep(8000 * (attempt + 1));\n      return fetchTikTokOembed(canonicalUrl, attempt + 1);\n    }\n    if (!res.ok) return null;\n    return (await res.json()) as TikTokOembed;\n  } catch {\n    return null;\n  } finally {\n    clearTimeout(timer);\n  }\n}\n\nasync function requirePlayableTikTokCdn(cdnUrl: string | null): Promise<string | null> {\n  if (!cdnUrl || !isTikTokCdnUrl(cdnUrl)) return null;\n  const validation = await validateDirectVideoUrl(cdnUrl);\n  return validation.ok ? cdnUrl : null;\n}\n\nexport type HydrateTikTokResult = {\n  candidate: CatalogVideoCandidate | null;\n  rejected: boolean;\n  quotaUsed: number;\n};\n\n/** Resolve URL \u2192 oEmbed \u2192 gated catalog candidate (embed-only). */\nexport async function hydrateTikTokUrl(\n  rawUrl: string,\n  ingestionSource: string,\n  options?: { scopeBoost?: number; skipQuota?: boolean },\n): Promise<HydrateTikTokResult> {\n  if (!options?.skipQuota) {\n    const quota = await consumeDailyQuota(\"ingestion_tiktok_oembed\", tiktokOembedDailyCap());\n    if (!quota.allowed) {\n      return { candidate: null, rejected: false, quotaUsed: 0 };\n    }\n  }\n\n  const delay = tiktokOembedDelayMs();\n  if (delay > 0) await sleep(delay);\n\n  const canonical = await resolveTikTokCanonicalUrl(rawUrl);\n  const videoId = extractTikTokVideoId(canonical);\n  if (!videoId) {\n    return { candidate: null, rejected: false, quotaUsed: options?.skipQuota ? 0 : 1 };\n  }\n\n  const oembed = await fetchTikTokOembed(canonical);\n  const title = oembed?.title?.trim() || `TikTok video ${videoId}`;\n  const description = title;\n  const gateText = title;\n  const gatekeeper = auditIngestionContent(gateText);\n  if (!gatekeeper.valid) {\n    return { candidate: null, rejected: true, quotaUsed: options?.skipQuota ? 0 : 1 };\n  }\n\n  const relevanceScore = scoreRelevance({\n    title,\n    description,\n    gatekeeper,\n    scopeBoost: (options?.scopeBoost ?? 0) + tiktokRelevanceBoost(),\n  });\n  if (relevanceScore < minRelevanceThreshold()) {\n    return { candidate: null, rejected: true, quotaUsed: options?.skipQuota ? 0 : 1 };\n  }\n\n  const handle = parseAuthorHandle(oembed?.author_url, oembed?.author_name);\n  const creator = oembed?.author_name?.trim() || handle.replace(/^@/, \"\");\n  const h = runHeuristics(gateText);\n  const watchUrl = buildTikTokWatchUrl(videoId, handle);\n  const cdnUrl = await requirePlayableTikTokCdn(await fetchFreshTikTokCdnUrl(canonical, videoId));\n  if (!cdnUrl) {\n    return { candidate: null, rejected: true, quotaUsed: options?.skipQuota ? 0 : 1 };\n  }\n\n  const playbackMethod = \"native\";\n\n  const candidate: CatalogVideoCandidate = {\n    sourcePlatform: \"tiktok\",\n    sourceVideoId: videoId,\n    title: title.slice(0, 200),\n    description: description.slice(0, 1000),\n    videoUrl: cdnUrl,\n    embedUrl: buildTikTokEmbedUrl(videoId),\n    thumbnailUrl: oembed?.thumbnail_url ?? null,\n    creator,\n    creatorHandle: handle,\n    publishedAt: null,\n    tags: extractHashtagsFromText(title),\n    category: classifyIngestionCategory(gateText),\n    viewCount: null,\n    externalLikeCount: null,\n    relevanceScore,\n    ingestionSource,\n    rightsMetadata: {\n      playbackMethod,\n      platform: \"tiktok\",\n      attribution: creator,\n      embeddable: true,\n      license: \"platform_terms\",\n      cdnFallbackUrl: cdnUrl,\n      watchUrl,\n      oembedHtml: oembed?.html?.slice(0, 500) ?? null,\n    },\n    species: h.species ?? null,\n    locationState: h.locationState ?? null,\n    weightSize: h.weight ?? null,\n  };\n\n  return { candidate, rejected: false, quotaUsed: options?.skipQuota ? 0 : 1 };\n}\n\n/** Build candidate from scraped metadata \u2014 requires resolvable native CDN (no embed-only). */\nexport async function buildTikTokCandidateFromScrape(input: {\n  videoId: string;\n  title: string;\n  description?: string;\n  creator?: string;\n  creatorHandle?: string;\n  thumbnailUrl?: string | null;\n  ingestionSource: string;\n  scopeBoost?: number;\n}): Promise<CatalogVideoCandidate | null> {\n  const title = input.title.trim() || `TikTok ${input.videoId}`;\n  const description = (input.description ?? title).trim();\n  const gateText = `${title} ${description}`;\n  const gatekeeper = auditIngestionContent(gateText);\n  if (!gatekeeper.valid) return null;\n\n  const relevanceScore = scoreRelevance({\n    title,\n    description,\n    gatekeeper,\n    scopeBoost: (input.scopeBoost ?? 0) + tiktokRelevanceBoost(),\n  });\n  if (relevanceScore < minRelevanceThreshold()) return null;\n\n  const handle =\n    input.creatorHandle?.startsWith(\"@\")\n      ? input.creatorHandle\n      : input.creatorHandle\n        ? `@${input.creatorHandle}`\n        : \"@tiktok\";\n  const creator = input.creator?.trim() || handle.replace(/^@/, \"\");\n  const h = runHeuristics(gateText);\n  const watchUrl = buildTikTokWatchUrl(input.videoId, handle);\n  const cdnUrl = await requirePlayableTikTokCdn(\n    await fetchFreshTikTokCdnUrl(watchUrl, input.videoId),\n  );\n  if (!cdnUrl) return null;\n\n  return {\n    sourcePlatform: \"tiktok\",\n    sourceVideoId: input.videoId,\n    title: title.slice(0, 200),\n    description: description.slice(0, 1000),\n    videoUrl: cdnUrl,\n    embedUrl: buildTikTokEmbedUrl(input.videoId),\n    thumbnailUrl: input.thumbnailUrl ?? null,\n    creator,\n    creatorHandle: handle,\n    publishedAt: null,\n    tags: extractHashtagsFromText(title),\n    category: classifyIngestionCategory(gateText),\n    viewCount: null,\n    externalLikeCount: null,\n    relevanceScore,\n    ingestionSource: input.ingestionSource,\n    rightsMetadata: {\n      playbackMethod: \"native\",\n      platform: \"tiktok\",\n      attribution: creator,\n      embeddable: true,\n      license: \"platform_terms\",\n      cdnFallbackUrl: cdnUrl,\n      watchUrl,\n    },\n    species: h.species ?? null,\n    locationState: h.locationState ?? null,\n    weightSize: h.weight ?? null,\n  };\n}\n", "/**\n * TikTok hashtag discovery via RapidAPI (optional \u2014 requires RAPIDAPI_KEY + TikTok API subscription).\n */\nexport class TikTokScraperError extends Error {\n  constructor(\n    message: string,\n    readonly statusCode: number = 502,\n  ) {\n    super(message);\n    this.name = \"TikTokScraperError\";\n  }\n}\n\nexport interface ScrapedTikTokVideo {\n  sourceVideoId: string;\n  shareUrl: string;\n  title: string;\n  description: string;\n  creator: string;\n  creatorHandle: string;\n  thumbnailUrl: string | null;\n}\n\nexport const TIKTOK_RAPIDAPI_HOST = \"tiktok-scraper7.p.rapidapi.com\";\nexport const TIKTOK_HASHTAG_PATH = \"/challenge/posts\";\n\nfunction resolveHost(): string {\n  return process.env.RAPIDAPI_TIKTOK_HOST?.trim() || TIKTOK_RAPIDAPI_HOST;\n}\n\nfunction resolvePath(): string {\n  return process.env.RAPIDAPI_TIKTOK_HASHTAG_PATH?.trim() || TIKTOK_HASHTAG_PATH;\n}\n\nfunction resolveHashtagParam(): string {\n  return process.env.RAPIDAPI_TIKTOK_HASHTAG_PARAM?.trim() || \"challengeName\";\n}\n\nexport function normalizeTikTokHashtag(raw: string): string {\n  return raw.trim().replace(/^#+/, \"\").toLowerCase();\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n  return value && typeof value === \"object\" ? (value as Record<string, unknown>) : null;\n}\n\nfunction pickString(...values: unknown[]): string | null {\n  for (const v of values) {\n    if (typeof v === \"string\" && v.trim()) return v.trim();\n  }\n  return null;\n}\n\nfunction extractVideoId(node: Record<string, unknown>): string | null {\n  const direct = pickString(node.id, node.aweme_id, node.video_id, node.itemId);\n  if (direct && /^\\d+$/.test(direct)) return direct;\n\n  const video = asRecord(node.video);\n  const nested = pickString(video?.id, video?.video_id);\n  if (nested && /^\\d+$/.test(nested)) return nested;\n\n  const shareUrl = pickString(node.share_url, node.url, node.webVideoUrl, node.link);\n  if (shareUrl) {\n    const m = shareUrl.match(/\\/video\\/(\\d+)/);\n    if (m?.[1]) return m[1];\n  }\n\n  return null;\n}\n\nfunction extractThumbnail(node: Record<string, unknown>): string | null {\n  const video = asRecord(node.video);\n  const cover = asRecord(node.cover) ?? asRecord(video?.cover);\n  const urlList = cover?.url_list;\n  const firstFromList = Array.isArray(urlList) ? pickString(urlList[0]) : null;\n  return (\n    pickString(\n      node.cover,\n      node.cover_image_url,\n      node.dynamic_cover,\n      firstFromList,\n      video?.cover,\n      video?.origin_cover,\n    ) ?? null\n  );\n}\n\nfunction mapItem(node: Record<string, unknown>): ScrapedTikTokVideo | null {\n  const videoId = extractVideoId(node);\n  if (!videoId) return null;\n\n  const author = asRecord(node.author) ?? asRecord(node.authorMeta);\n  const nickname = pickString(author?.nickname, author?.unique_id, author?.name, node.author_name);\n  const uniqueId = pickString(author?.unique_id, author?.uniqueId, author?.username);\n  const handle = uniqueId ? `@${uniqueId.replace(/^@/, \"\")}` : nickname ? `@${nickname.replace(/\\s+/g, \"_\").slice(0, 30)}` : \"@tiktok\";\n\n  const desc = pickString(node.desc, node.description, node.title, node.text) ?? \"\";\n  const title = desc.slice(0, 200) || `TikTok ${videoId}`;\n  const shareUrl =\n    pickString(node.share_url, node.url, node.webVideoUrl) ??\n    `https://www.tiktok.com/@${handle.replace(/^@/, \"\")}/video/${videoId}`;\n\n  return {\n    sourceVideoId: videoId,\n    shareUrl,\n    title,\n    description: desc,\n    creator: nickname ?? handle.replace(/^@/, \"\"),\n    creatorHandle: handle,\n    thumbnailUrl: extractThumbnail(node),\n  };\n}\n\nfunction collectItems(payload: unknown): Record<string, unknown>[] {\n  const root = asRecord(payload);\n  if (!root) return [];\n\n  const candidates = [\n    root.itemList,\n    root.aweme_list,\n    root.videos,\n    root.data,\n    asRecord(root.data)?.videos,\n    asRecord(root.data)?.itemList,\n    root.items,\n  ];\n\n  for (const block of candidates) {\n    if (Array.isArray(block) && block.length > 0) {\n      return block.map((item) => asRecord(item)).filter((item): item is Record<string, unknown> => !!item);\n    }\n  }\n\n  return [];\n}\n\nexport function isTikTokScraperConfigured(): boolean {\n  return Boolean(process.env.RAPIDAPI_KEY?.trim());\n}\n\n/** Fetch recent videos for a hashtag/challenge (RapidAPI). */\nexport async function fetchHashtagRecentVideos(\n  hashtag: string,\n  limit = 12,\n): Promise<ScrapedTikTokVideo[]> {\n  const apiKey = process.env.RAPIDAPI_KEY?.trim();\n  if (!apiKey) {\n    throw new TikTokScraperError(\"RAPIDAPI_KEY is not configured.\", 503);\n  }\n\n  const tag = normalizeTikTokHashtag(hashtag);\n  const host = resolveHost();\n  const path = resolvePath();\n  const param = resolveHashtagParam();\n  const count = Math.min(30, Math.max(1, limit));\n\n  const query = new URLSearchParams({\n    [param]: tag,\n    count: String(count),\n  });\n\n  const url = `https://${host}${path}?${query.toString()}`;\n  const res = await fetch(url, {\n    headers: {\n      \"x-rapidapi-key\": apiKey,\n      \"x-rapidapi-host\": host,\n      Accept: \"application/json\",\n    },\n  });\n\n  if (res.status === 429) {\n    throw new TikTokScraperError(\"TikTok RapidAPI rate limit (429)\", 429);\n  }\n  if (res.status === 403) {\n    const body = await res.text().catch(() => \"\");\n    if (/not subscribed/i.test(body)) {\n      throw new TikTokScraperError(\"TikTok RapidAPI not subscribed\", 403);\n    }\n    throw new TikTokScraperError(`TikTok hashtag fetch forbidden (403)`, 403);\n  }\n  if (!res.ok) {\n    const body = await res.text().catch(() => \"\");\n    throw new TikTokScraperError(\n      `TikTok hashtag fetch failed (${res.status}): ${body.slice(0, 160)}`,\n      res.status >= 500 ? 502 : res.status,\n    );\n  }\n\n  const payload = await res.json();\n  const items = collectItems(payload);\n  const out: ScrapedTikTokVideo[] = [];\n  const seen = new Set<string>();\n\n  for (const node of items) {\n    const mapped = mapItem(node);\n    if (!mapped || seen.has(mapped.sourceVideoId)) continue;\n    seen.add(mapped.sourceVideoId);\n    out.push(mapped);\n    if (out.length >= limit) break;\n  }\n\n  return out;\n}\n", "import { logger } from \"../logger\";\nimport {\n  GOOGLE_SERP_DISCOVERY_QUERIES,\n  YOUTUBE_DISCOVERY_SCOPES,\n  type DiscoveryScope,\n} from \"./types\";\nimport { DEER_DISCOVERY_SCOPES } from \"./deerContentPriority.js\";\nimport { loadPersistedGapQueries } from \"./applySecondaryRankings\";\nimport { shouldRunOpenRouterPlanning } from \"./sustainableIngestion.js\";\nimport {\n  getSpeciesDiscoveryScopes,\n  getSpeciesSerpQueries,\n  speciesDiscoveryStats,\n} from \"./speciesDiscoveryQueries.js\";\n\ntype OpenRouterModule = typeof import(\"@workspace/video-discovery-agent\");\n\nlet agentModule: OpenRouterModule | null = null;\n\nasync function getAgent(): Promise<OpenRouterModule | null> {\n  if (agentModule) return agentModule;\n  try {\n    agentModule = await import(\"@workspace/video-discovery-agent\");\n    if (!agentModule.isOpenRouterConfigured()) return null;\n    return agentModule;\n  } catch (err) {\n    logger.warn({ err }, \"OpenRouter video-discovery-agent unavailable\");\n    return null;\n  }\n}\n\nexport type OpenRouterCycleContext = {\n  dynamicYoutubeScopes: DiscoveryScope[];\n  dynamicSerpQueries: string[];\n  planRationale?: string;\n  planningError?: string;\n};\n\nconst emptyContext: OpenRouterCycleContext = {\n  dynamicYoutubeScopes: [],\n  dynamicSerpQueries: [],\n};\n\n/** Merge deer-first scopes + legacy + species catalog + LLM-planned scopes (deduped). */\nexport function mergeDiscoveryScopes(dynamic: DiscoveryScope[]): DiscoveryScope[] {\n  const seen = new Set<string>();\n  const merged: DiscoveryScope[] = [];\n\n  for (const scope of [\n    ...DEER_DISCOVERY_SCOPES,\n    ...YOUTUBE_DISCOVERY_SCOPES,\n    ...dynamic,\n    ...getSpeciesDiscoveryScopes(),\n  ]) {\n    const key = scope.scopeKey.toLowerCase();\n    if (seen.has(key)) continue;\n    seen.add(key);\n    merged.push(scope);\n  }\n  return merged;\n}\n\nexport function mergeSerpQueries(dynamic: string[]): string[] {\n  const seen = new Set<string>();\n  const merged: string[] = [];\n  for (const q of [...dynamic, ...getSpeciesSerpQueries()]) {\n    const norm = q.trim().toLowerCase();\n    if (!norm || seen.has(norm)) continue;\n    seen.add(norm);\n    merged.push(q.trim());\n  }\n  return merged;\n}\n\nexport async function prepareOpenRouterDiscoveryCycle(): Promise<OpenRouterCycleContext> {\n  const agent = await getAgent();\n  const persistedGapQueries = await loadPersistedGapQueries();\n  if (!agent) {\n    return {\n      dynamicYoutubeScopes: [],\n      dynamicSerpQueries: persistedGapQueries,\n    };\n  }\n\n  if (process.env.OPENROUTER_QUERY_PLANNING === \"false\") {\n    return { dynamicYoutubeScopes: [], dynamicSerpQueries: persistedGapQueries };\n  }\n\n  const runPlanning = await shouldRunOpenRouterPlanning();\n  if (!runPlanning) {\n    logger.info(\"OpenRouter query planning skipped this cycle (sustainable cadence)\");\n    return { dynamicYoutubeScopes: [], dynamicSerpQueries: persistedGapQueries };\n  }\n\n  try {\n    const season = new Date().toLocaleString(\"en-US\", { month: \"long\", year: \"numeric\" });\n    const speciesStats = speciesDiscoveryStats();\n    const plan = await agent.planDiscoveryQueries({\n      existingScopeKeys: [\n        ...getSpeciesDiscoveryScopes().slice(0, 40).map((s) => s.scopeKey),\n        ...YOUTUBE_DISCOVERY_SCOPES.map((s) => s.scopeKey),\n      ],\n      existingSerpQueries: [\n        ...getSpeciesSerpQueries().slice(0, 12),\n        ...GOOGLE_SERP_DISCOVERY_QUERIES,\n      ],\n      season,\n      recentInsertCount: speciesStats.youtubeScopeCount,\n    });\n\n    if (!plan) return { dynamicYoutubeScopes: [], dynamicSerpQueries: persistedGapQueries };\n\n    const normalizeCategory = (value: string, scopeKey: string): \"hooks\" | \"shots\" | \"both\" => {\n      if (value === \"hooks\" || value === \"shots\" || value === \"both\") return value;\n      const hint = `${scopeKey} ${value}`.toLowerCase();\n      if (/fish|bass|trout|offshore|kayak|ice|fly|angler|saltwater/.test(hint)) return \"hooks\";\n      if (/hunt|deer|elk|turkey|waterfowl|bow|buck|moose|whitetail/.test(hint)) return \"shots\";\n      return \"both\";\n    };\n\n    const dynamicYoutubeScopes: DiscoveryScope[] = plan.youtubeQueries.map((q) => ({\n      scopeKey: q.scopeKey.startsWith(\"or_\") ? q.scopeKey : `or_${q.scopeKey}`,\n      query: q.query,\n      category: normalizeCategory(q.category, q.scopeKey),\n      relevanceBoost: q.relevanceBoost,\n      preferShortForm: true,\n    }));\n\n    logger.info(\n      {\n        youtube: dynamicYoutubeScopes.length,\n        serp: plan.serpQueries.length,\n        rationale: plan.rationale.slice(0, 200),\n      },\n      \"OpenRouter discovery plan ready\",\n    );\n\n    return {\n      dynamicYoutubeScopes,\n      dynamicSerpQueries: [...plan.serpQueries, ...persistedGapQueries],\n      planRationale: plan.rationale,\n    };\n  } catch (err) {\n    const message = err instanceof Error ? err.message : String(err);\n    logger.warn({ err }, \"OpenRouter query planning failed; using static scopes only\");\n    return {\n      dynamicYoutubeScopes: [],\n      dynamicSerpQueries: persistedGapQueries,\n      planningError: message.slice(0, 240),\n    };\n  }\n}\n\nexport async function classifyBorderlineVideo(input: {\n  title: string;\n  description: string;\n  creator?: string;\n  platform?: string;\n  viewCount?: number | null;\n  ruleGatekeeperReason?: string;\n  ruleRelevanceScore?: number;\n}): Promise<{ eligible: boolean; reason: string } | null> {\n  if (process.env.OPENROUTER_LLM_CLASSIFY_BORDERLINE !== \"true\") return null;\n\n  const agent = await getAgent();\n  if (!agent) return null;\n\n  try {\n    const result = await agent.classifyVideoMetadata(input);\n    if (!result) return null;\n    return {\n      eligible: result.eligible && result.confidence >= 0.65,\n      reason: result.reason,\n    };\n  } catch (err) {\n    logger.warn({ err, title: input.title.slice(0, 80) }, \"OpenRouter classify failed\");\n    return null;\n  }\n}\n\nexport async function buildOpenRouterIngestionSummary(snapshot: {\n  youtube: Record<string, unknown>;\n  instagram: Record<string, unknown>;\n  googleSerp: Record<string, unknown>;\n  tiktok?: Record<string, unknown>;\n  quota: Record<string, unknown>;\n  openRouter?: Record<string, unknown>;\n}): Promise<Record<string, unknown> | null> {\n  const agent = await getAgent();\n  if (!agent) return null;\n\n  try {\n    const report = await agent.summarizeIngestionRun(snapshot);\n    return report as unknown as Record<string, unknown>;\n  } catch (err) {\n    logger.warn({ err }, \"OpenRouter ingestion summary failed\");\n    return null;\n  }\n}\n\nexport async function getOpenRouterStatus(): Promise<Record<string, unknown>> {\n  const agent = await getAgent();\n  if (!agent) {\n    return {\n      configured: Boolean(process.env.OPENROUTER_API_KEY?.trim()),\n      enabled: process.env.OPENROUTER_INGESTION_ENABLED !== \"false\",\n      active: false,\n      reason: process.env.OPENROUTER_API_KEY?.trim()\n        ? \"module load failed or disabled\"\n        : \"OPENROUTER_API_KEY missing\",\n    };\n  }\n\n  const config = agent.loadAgentConfig();\n  return {\n    configured: true,\n    enabled: config.enabled,\n    active: agent.isOpenRouterConfigured(config),\n    classifyModel: config.classifyModel,\n    researchModel: config.researchModel,\n    maxCostPerCycle: config.maxCost,\n    features: {\n      queryPlanning: process.env.OPENROUTER_QUERY_PLANNING !== \"false\",\n      queryPlanningCadence: `every ${process.env.OPENROUTER_QUERY_PLAN_EVERY_N_CYCLES ?? \"6\"} cycles`,\n      queryPlanModel:\n        process.env.OPENROUTER_QUERY_PLAN_MODEL?.trim() ||\n        process.env.OPENROUTER_REASON_MODEL?.trim() ||\n        \"anthropic/claude-sonnet-4\",\n      borderlineClassification: process.env.OPENROUTER_LLM_CLASSIFY_BORDERLINE === \"true\",\n      researchAgent: process.env.OPENROUTER_RESEARCH_ENABLED === \"true\",\n      secondaryPostProcess: process.env.OPENROUTER_SECONDARY_ENABLED !== \"false\",\n      secondaryGapFill: process.env.OPENROUTER_SECONDARY_GAP_FILL === \"true\",\n    },\n    secondaryBudgetUsd: parseFloat(process.env.OPENROUTER_SECONDARY_MAX_COST ?? \"0.15\") || 0.15,\n  };\n}\n", "import { db, userVideosTable } from \"@workspace/db\";\nimport { ingestionCheckpointsTable } from \"@workspace/db/schema\";\nimport { and, eq } from \"drizzle-orm\";\nimport { logger } from \"../logger\";\n\ntype RankedVideo = {\n  sourcePlatform: string;\n  sourceVideoId: string;\n  category: \"hooks\" | \"shots\" | \"both\";\n  rankScore: number;\n  confidence: number;\n  validationTier: string;\n  reason: string;\n};\n\ntype SpeciesSnapshot = {\n  sourcePlatform: string;\n  sourceVideoId: string;\n  species?: string | null;\n  locationState?: string | null;\n};\n\nexport async function applySecondaryPostProcessRankings(\n  rankedVideos: RankedVideo[],\n  snapshots: SpeciesSnapshot[] = [],\n): Promise<{ updated: number; skipped: number }> {\n  if (rankedVideos.length === 0) return { updated: 0, skipped: 0 };\n\n  const snapshotByKey = new Map(\n    snapshots.map((s) => [`${s.sourcePlatform}:${s.sourceVideoId}`, s] as const),\n  );\n\n  let updated = 0;\n  let skipped = 0;\n\n  for (const ranked of rankedVideos) {\n    const [row] = await db\n      .select({\n        id: userVideosTable.id,\n        relevanceScore: userVideosTable.relevanceScore,\n        species: userVideosTable.species,\n        locationState: userVideosTable.locationState,\n        rightsMetadata: userVideosTable.rightsMetadata,\n      })\n      .from(userVideosTable)\n      .where(\n        and(\n          eq(userVideosTable.sourcePlatform, ranked.sourcePlatform),\n          eq(userVideosTable.sourceVideoId, ranked.sourceVideoId),\n        ),\n      )\n      .limit(1);\n\n    if (!row) {\n      skipped++;\n      continue;\n    }\n\n    const relevanceScore = Math.min(100, Math.max(0, Math.round(ranked.rankScore)));\n    const snap = snapshotByKey.get(`${ranked.sourcePlatform}:${ranked.sourceVideoId}`);\n    const priorMeta =\n      row.rightsMetadata && typeof row.rightsMetadata === \"object\"\n        ? (row.rightsMetadata as Record<string, unknown>)\n        : {};\n\n    await db\n      .update(userVideosTable)\n      .set({\n        category: ranked.category,\n        relevanceScore: Math.max(row.relevanceScore ?? 0, relevanceScore),\n        species: row.species ?? snap?.species ?? null,\n        locationState: row.locationState ?? snap?.locationState ?? null,\n        rightsMetadata: {\n          ...priorMeta,\n          secondaryValidation: {\n            confidence: ranked.confidence,\n            rankScore: ranked.rankScore,\n            tier: ranked.validationTier,\n            reason: ranked.reason,\n            validatedAt: new Date().toISOString(),\n          },\n        },\n      })\n      .where(eq(userVideosTable.id, row.id));\n\n    updated++;\n  }\n\n  if (updated > 0) {\n    logger.info({ updated, skipped }, \"Applied secondary post-process rankings to catalog\");\n  }\n\n  return { updated, skipped };\n}\n\nconst GAP_PROVIDER = \"openrouter\";\nconst GAP_SCOPE = \"__gap_queries__\";\n\n/** Persist LLM gap-fill queries for the next discovery cycle. */\nexport async function persistGapQueriesForNextCycle(queries: string[]): Promise<void> {\n  const trimmed = queries.map((q) => q.trim()).filter(Boolean).slice(0, 12);\n  if (trimmed.length === 0) return;\n\n  await db\n    .insert(ingestionCheckpointsTable)\n    .values({\n      provider: GAP_PROVIDER,\n      scopeKey: GAP_SCOPE,\n      cursorToken: null,\n      metadata: { serpQueries: trimmed, savedAt: new Date().toISOString() },\n      lastSuccessAt: new Date(),\n      updatedAt: new Date(),\n    })\n    .onConflictDoUpdate({\n      target: [ingestionCheckpointsTable.provider, ingestionCheckpointsTable.scopeKey],\n      set: {\n        metadata: { serpQueries: trimmed, savedAt: new Date().toISOString() },\n        lastSuccessAt: new Date(),\n        updatedAt: new Date(),\n      },\n    });\n}\n\n/** Load gap-fill SERP queries saved from a prior secondary post-process pass. */\nexport async function loadPersistedGapQueries(): Promise<string[]> {\n  const [row] = await db\n    .select({ metadata: ingestionCheckpointsTable.metadata })\n    .from(ingestionCheckpointsTable)\n    .where(\n      and(\n        eq(ingestionCheckpointsTable.provider, GAP_PROVIDER),\n        eq(ingestionCheckpointsTable.scopeKey, GAP_SCOPE),\n      ),\n    )\n    .limit(1);\n\n  const meta = row?.metadata as { serpQueries?: string[] } | undefined;\n  return Array.isArray(meta?.serpQueries) ? meta.serpQueries.filter((q) => typeof q === \"string\") : [];\n}\n", "/**\n\n * Species-driven YouTube / SERP discovery queries.\n\n *\n\n * Shorts-first: vertical and sub-4-minute outdoor content is explicitly targeted.\n\n * Query-time exclusions (duck call, kids, reaction) are applied in discoveryQuery.ts.\n\n */\n\nimport { SPECIES_DATABASE, type SpeciesData } from \"../../data/species.js\";\n\nimport type { DiscoveryScope } from \"./types.js\";\n\n\n\n/** Highest-priority scopes \u2014 deer and big-game hunting before fishing catalog. */\n\nexport const PRIORITY_DISCOVERY_SCOPES: DiscoveryScope[] = [\n\n  { scopeKey: \"priority_deer_shorts\", query: \"white-tailed deer hunting harvest buck #shorts\", category: \"shots\", relevanceBoost: 6 },\n\n  { scopeKey: \"priority_deer_rut_hunt\", query: \"whitetail deer rut bowhunting rifle harvest shorts\", category: \"shots\", relevanceBoost: 6 },\n\n  { scopeKey: \"priority_deer_guided_cabin\", query: \"guided deer hunt hunting cabin whitetail buck harvest shorts\", category: \"shots\", relevanceBoost: 5 },\n\n  { scopeKey: \"priority_deer_stand_blind\", query: \"tree stand ground blind whitetail deer hunt buck harvest #shorts\", category: \"shots\", relevanceBoost: 5 },\n\n  { scopeKey: \"priority_big_game_shorts\", query: \"elk moose bear big game hunting harvest adventure shorts\", category: \"shots\", relevanceBoost: 4 },\n\n  { scopeKey: \"priority_antelope_pronghorn\", query: \"pronghorn antelope hunting spot stalk harvest shorts\", category: \"shots\", relevanceBoost: 3 },\n\n];\n\n\n\n/** Site-wide outdoor topics not tied to a single species row. */\n\nexport const GENERAL_DISCOVERY_SCOPES: DiscoveryScope[] = [\n\n  { scopeKey: \"topic_field_dressing\", query: \"field dressing game processing butcher hunting harvest shorts\", category: \"shots\", relevanceBoost: 3 },\n\n  { scopeKey: \"topic_boat_fishing\", query: \"offshore inshore boat fishing catch adventure #shorts\", category: \"hooks\", relevanceBoost: 4 },\n\n  { scopeKey: \"topic_kayak_adventure\", query: \"kayak fishing paddle adventure catch saltwater freshwater shorts\", category: \"hooks\", relevanceBoost: 3 },\n\n  { scopeKey: \"topic_bowhunting_archery\", query: \"bowhunting archery compound bow hunt harvest field #shorts\", category: \"shots\", relevanceBoost: 4 },\n\n  { scopeKey: \"topic_fly_fishing_river\", query: \"fly fishing river stream trout salmon steelhead catch shorts\", category: \"hooks\", relevanceBoost: 4 },\n\n  { scopeKey: \"topic_ice_fishing_winter\", query: \"ice fishing walleye perch tip up winter catch shorts\", category: \"hooks\", relevanceBoost: 3 },\n\n  { scopeKey: \"topic_bass_tournament\", query: \"bass fishing tournament weigh in catch lake #shorts\", category: \"hooks\", relevanceBoost: 4 },\n\n  { scopeKey: \"topic_deer_scouting\", query: \"whitetail deer scouting rut stand placement harvest hunt shorts\", category: \"shots\", relevanceBoost: 4 },\n\n  { scopeKey: \"topic_saltwater_surf\", query: \"surf fishing beach pier saltwater catch adventure shorts\", category: \"hooks\", relevanceBoost: 3 },\n\n  { scopeKey: \"topic_waterfowl_hunt\", query: \"duck goose waterfowl hunting decoy spread harvest limit shorts\", category: \"shots\", relevanceBoost: 3 },\n\n  { scopeKey: \"topic_big_game_backcountry\", query: \"backcountry elk mule deer hunting pack in harvest shorts\", category: \"shots\", relevanceBoost: 4 },\n\n  { scopeKey: \"topic_outdoor_gear\", query: \"hunting fishing gear review rifle bow optics tackle field shorts\", category: \"both\", relevanceBoost: 2 },\n\n  { scopeKey: \"topic_camping_bushcraft\", query: \"backcountry camping bushcraft wilderness camp outdoor shorts\", category: \"both\", relevanceBoost: 3 },\n\n  { scopeKey: \"topic_overlanding_camp\", query: \"overlanding camp truck rooftop tent outdoor adventure shorts\", category: \"both\", relevanceBoost: 3 },\n\n];\n\n\n\nconst HUNTING_ACTIVITY = /hunt|harvest|trophy|bow|rifle|stalk|waterfowl|decoy|gobbler|rut|scouting|shorts|#shorts/i;\n\nconst FISHING_ACTIVITY = /fish|catch|angling|kayak|boat|fly|offshore|inshore|saltwater|ice|tournament|bass|trout|shorts|#shorts/i;\n\n\n\nconst CATEGORY_DISCOVERY_ORDER: Record<SpeciesData[\"category\"], number> = {\n\n  \"big-game\": 0,\n\n  freshwater: 1,\n\n  saltwater: 2,\n\n  waterfowl: 3,\n\n  \"small-game\": 4,\n\n};\n\n\n\nfunction primaryCommonName(name: string): string {\n\n  return name\n\n    .split(\"/\")[0]\n\n    .split(\"(\")[0]\n\n    .replace(/\\s+/g, \" \")\n\n    .trim();\n\n}\n\n\n\nfunction feedCategory(species: SpeciesData): \"hooks\" | \"shots\" {\n\n  if (species.category === \"freshwater\" || species.category === \"saltwater\") return \"hooks\";\n\n  return \"shots\";\n\n}\n\n\n\nfunction isFishingSpecies(species: SpeciesData): boolean {\n\n  return species.category === \"freshwater\" || species.category === \"saltwater\";\n\n}\n\n\n\nfunction isWaterfowl(species: SpeciesData): boolean {\n\n  return (\n\n    species.category === \"waterfowl\" ||\n\n    /duck|goose|brant|teal|mallard|canvasback|wigeon|gadwall|pintail|waterfowl/i.test(species.name)\n\n  );\n\n}\n\n\n\n/** Predator/trapping species \u2014 excluded from automated discovery (calling-heavy catalog). */\n\nfunction isTrappingSpecies(species: SpeciesData): boolean {\n\n  return (\n\n    species.tags.some((t) => /trap|predator|furbearer|coyote|fox|bobcat|raccoon|muskrat|beaver|marten|mink|otter/i.test(t)) ||\n\n    /coyote|fox|bobcat|raccoon|muskrat|beaver|marten|mink|otter|trapping/i.test(species.name)\n\n  );\n\n}\n\n\n\nfunction isTurkey(species: SpeciesData): boolean {\n\n  return /turkey/i.test(species.name);\n\n}\n\n\n\nfunction isBigGame(species: SpeciesData): boolean {\n\n  return species.category === \"big-game\";\n\n}\n\n\n\nfunction shouldDiscoverSpecies(species: SpeciesData): boolean {\n\n  return !isTrappingSpecies(species);\n\n}\n\n\n\nfunction techniquePhrase(species: SpeciesData): string | null {\n\n  const tech = species.techniques?.[0];\n\n  if (!tech || tech.length > 48) return null;\n\n  const cleaned = tech.toLowerCase().replace(/[^\\w\\s-]/g, \"\").trim();\n\n  if (/call|caller|distress|electronic|trap/i.test(cleaned)) return null;\n\n  return cleaned;\n\n}\n\n\n\nfunction withShortsHint(query: string, index: number): string {\n\n  if (/\\b#?shorts\\b/i.test(query)) return query;\n\n  return index % 2 === 0 ? `${query} #shorts` : `${query} shorts`;\n\n}\n\n\n\nfunction buildYouTubeQueriesForSpecies(species: SpeciesData): string[] {\n\n  const name = primaryCommonName(species.name);\n\n  if (!name) return [];\n\n\n\n  if (isFishingSpecies(species)) {\n\n    const queries = [\n\n      `${name} fishing catch big trophy shorts`,\n\n      `${name} fishing adventure catch #shorts`,\n\n      `${name} catching kayak boat shore fishing harvest shorts`,\n\n      `${name} fishing tournament catch weigh in shorts`,\n\n    ];\n\n\n\n    const tech = techniquePhrase(species);\n\n    if (tech) queries.push(`${name} ${tech} catch shorts`);\n\n\n\n    if (species.tags.some((t) => /fly|flats|trout|salmon|steelhead|bonefish|tarpon/i.test(t))) {\n\n      queries.push(`${name} fly fishing catch release river shorts`);\n\n    }\n\n    if (species.category === \"saltwater\") {\n\n      queries.push(`${name} saltwater inshore offshore fishing catch adventure shorts`);\n\n    }\n\n    if (/walleye|perch|pike|crappie|bluegill|panfish/i.test(name)) {\n\n      queries.push(`${name} ice fishing tip up winter catch shorts`);\n\n    }\n\n    if (/marlin|tuna|sailfish|mahi|wahoo|swordfish/i.test(name)) {\n\n      queries.push(`${name} offshore big game fishing catch shorts`);\n\n    }\n\n\n\n    return dedupeQueries(queries.map((q, i) => withShortsHint(q, i))).slice(0, 5);\n\n  }\n\n\n\n  const queries = [\n\n    `${name} hunting harvest trophy field shorts`,\n\n    `${name} hunting adventure harvest #shorts`,\n\n    `${name} hunting field harvest shorts`,\n\n  ];\n\n\n\n  if (/whitetail|white-tailed/i.test(name)) {\n\n    queries.push(`${name} rut buck tree stand ground blind harvest shorts`);\n\n    queries.push(`${name} guided hunt outfitter deer camp harvest #shorts`);\n\n    queries.push(`${name} bowhunting rifle deer hunt harvest shorts`);\n\n  } else if (isWaterfowl(species)) {\n\n    queries.push(`${name} waterfowl hunting decoy spread harvest limit shorts`);\n\n  } else if (isTurkey(species)) {\n\n    queries.push(`${name} turkey hunting spring gobbler harvest field shorts`);\n\n  } else if (isBigGame(species)) {\n\n    queries.push(`${name} bowhunting rifle spot and stalk harvest shorts`);\n\n  } else {\n\n    queries.push(`${name} bowhunting rifle field hunt harvest shorts`);\n\n  }\n\n\n\n  const tech = techniquePhrase(species);\n\n  if (tech) queries.push(`${name} ${tech} hunt harvest shorts`);\n\n\n\n  return dedupeQueries(queries.map((q, i) => withShortsHint(q, i))).slice(0, 5);\n\n}\n\n\n\nfunction buildSerpQueriesForSpecies(species: SpeciesData): string[] {\n\n  const name = primaryCommonName(species.name);\n\n  if (!name) return [];\n\n\n\n  if (isFishingSpecies(species)) {\n\n    return [\n\n      `site:youtube.com/shorts ${name} fishing catch`,\n\n      `site:youtube.com ${name} fishing adventure catch shorts`,\n\n    ];\n\n  }\n\n\n\n  return [\n\n    `site:youtube.com/shorts ${name} hunting harvest`,\n\n    `site:youtube.com ${name} hunting field harvest shorts`,\n\n  ];\n\n}\n\n\n\nfunction dedupeQueries(queries: string[]): string[] {\n\n  const seen = new Set<string>();\n\n  const out: string[] = [];\n\n  for (const q of queries) {\n\n    const norm = q.toLowerCase().replace(/\\s+/g, \" \").trim();\n\n    if (!norm || seen.has(norm)) continue;\n\n    seen.add(norm);\n\n    out.push(norm);\n\n  }\n\n  return out;\n\n}\n\n\n\nfunction scopeSuffix(query: string, index: number): string {\n\n  if (FISHING_ACTIVITY.test(query) && !HUNTING_ACTIVITY.test(query)) {\n\n    const tags = [\"catch\", \"shorts\", \"adventure\", \"techniques\", \"tournament\"];\n\n    return tags[index] ?? `q${index}`;\n\n  }\n\n  const tags = [\"harvest\", \"shorts\", \"field\", \"techniques\", \"adventure\"];\n\n  return tags[index] ?? `q${index}`;\n\n}\n\n\n\nfunction buildScopesForSpecies(species: SpeciesData): DiscoveryScope[] {\n\n  const category = feedCategory(species);\n\n  const queries = buildYouTubeQueriesForSpecies(species);\n\n  const boost =\n\n    species.id === \"whitetail-deer\" || /whitetail|white-tailed/i.test(species.name)\n\n      ? 5\n\n      : species.category === \"big-game\" || /pronghorn|antelope/i.test(species.name)\n\n        ? 3\n\n        : species.category === \"saltwater\" || species.category === \"freshwater\"\n\n          ? 2\n\n          : 2;\n\n\n\n  return queries.map((query, index) => ({\n\n    scopeKey: `species_${species.id}_${scopeSuffix(query, index)}`,\n\n    query,\n\n    category,\n\n    relevanceBoost: boost,\n\n    preferShortForm: true,\n\n  }));\n\n}\n\n\n\nfunction sortSpeciesForDiscovery(species: SpeciesData[]): SpeciesData[] {\n\n  const deerFirst = (s: SpeciesData) => {\n\n    if (s.id === \"whitetail-deer\") return 0;\n\n    if (/whitetail|white-tailed|mule deer|mule-deer/i.test(s.name)) return 1;\n\n    if (s.category === \"big-game\") return 2;\n\n    if (/pronghorn|antelope/i.test(s.name)) return 3;\n\n    return 10;\n\n  };\n\n\n\n  return [...species].sort((a, b) => {\n\n    const orderA = deerFirst(a);\n\n    const orderB = deerFirst(b);\n\n    if (orderA !== orderB) return orderA - orderB;\n\n    const catA = CATEGORY_DISCOVERY_ORDER[a.category] ?? 9;\n\n    const catB = CATEGORY_DISCOVERY_ORDER[b.category] ?? 9;\n\n    if (catA !== catB) return catA - catB;\n\n    return a.name.localeCompare(b.name);\n\n  });\n\n}\n\n\n\nlet cachedScopes: DiscoveryScope[] | null = null;\n\nlet cachedSerp: string[] | null = null;\n\n\n\n/** All species- and topic-based YouTube discovery scopes (lazy-built, deduped). */\n\nexport function getSpeciesDiscoveryScopes(): DiscoveryScope[] {\n\n  if (cachedScopes) return cachedScopes;\n\n\n\n  const seen = new Set<string>();\n\n  const merged: DiscoveryScope[] = [];\n\n\n\n  const pushScope = (scope: DiscoveryScope) => {\n\n    const key = scope.scopeKey.toLowerCase();\n\n    if (seen.has(key)) return;\n\n    seen.add(key);\n\n    merged.push(scope);\n\n  };\n\n\n\n  for (const scope of PRIORITY_DISCOVERY_SCOPES) pushScope(scope);\n\n  for (const scope of GENERAL_DISCOVERY_SCOPES) pushScope(scope);\n\n\n\n  for (const species of sortSpeciesForDiscovery(SPECIES_DATABASE)) {\n\n    if (!shouldDiscoverSpecies(species)) continue;\n\n    for (const scope of buildScopesForSpecies(species)) {\n\n      pushScope(scope);\n\n    }\n\n  }\n\n\n\n  cachedScopes = merged;\n\n  return merged;\n\n}\n\n\n\n/** Google SERP discovery queries derived from species + general topics. */\n\nexport function getSpeciesSerpQueries(): string[] {\n\n  if (cachedSerp) return cachedSerp;\n\n\n\n  const seen = new Set<string>();\n\n  const merged: string[] = [];\n\n\n\n  const generalSerp = [\n\n    \"site:youtube.com/shorts white-tailed deer hunting harvest\",\n\n    \"site:youtube.com/shorts whitetail buck deer hunt rut tree stand\",\n\n    \"site:youtube.com/shorts guided deer hunt outfitter whitetail harvest\",\n\n    \"site:youtube.com/shorts deer hunting cabin camp hunt\",\n\n    \"site:youtube.com/shorts elk moose big game hunting harvest\",\n\n    \"site:youtube.com/shorts pronghorn antelope hunting harvest\",\n\n    \"site:youtube.com/shorts bowhunting whitetail deer harvest\",\n\n    \"site:youtube.com/shorts mule deer hunting spot stalk harvest\",\n\n    \"site:youtube.com/shorts bass fishing tournament catch\",\n\n    \"site:youtube.com/shorts fly fishing trout catch\",\n\n    \"site:youtube.com/shorts duck hunting waterfowl decoy\",\n\n    \"site:youtube.com/shorts kayak fishing catch saltwater\",\n\n  ];\n\n\n\n  for (const q of generalSerp) {\n\n    const norm = q.toLowerCase();\n\n    if (seen.has(norm)) continue;\n\n    seen.add(norm);\n\n    merged.push(q);\n\n  }\n\n\n\n  for (const species of sortSpeciesForDiscovery(SPECIES_DATABASE)) {\n\n    if (!shouldDiscoverSpecies(species)) continue;\n\n    for (const q of buildSerpQueriesForSpecies(species)) {\n\n      const norm = q.toLowerCase();\n\n      if (seen.has(norm)) continue;\n\n      seen.add(norm);\n\n      merged.push(q);\n\n    }\n\n  }\n\n\n\n  cachedSerp = merged;\n\n  return merged;\n\n}\n\n\n\nexport function speciesDiscoveryStats(): {\n\n  speciesCount: number;\n\n  youtubeScopeCount: number;\n\n  serpQueryCount: number;\n\n  generalTopicCount: number;\n\n  priorityScopeCount: number;\n\n} {\n\n  return {\n\n    speciesCount: SPECIES_DATABASE.length,\n\n    youtubeScopeCount: getSpeciesDiscoveryScopes().length,\n\n    serpQueryCount: getSpeciesSerpQueries().length,\n\n    generalTopicCount: GENERAL_DISCOVERY_SCOPES.length,\n\n    priorityScopeCount: PRIORITY_DISCOVERY_SCOPES.length,\n\n  };\n\n}\n\n\n\n/** Reset module cache (tests). */\n\nexport function resetSpeciesDiscoveryCache(): void {\n\n  cachedScopes = null;\n\n  cachedSerp = null;\n\n}\n\n\n", "import type { CatalogVideoCandidate } from \"./types\";\n\n/** Collects candidate snapshots during a primary ingestion cycle for secondary post-processing. */\nexport type CycleVideoSnapshot = {\n  sourcePlatform: string;\n  sourceVideoId: string;\n  title: string;\n  description: string;\n  videoUrl: string;\n  embedUrl: string;\n  creator: string;\n  creatorHandle?: string;\n  channelId?: string;\n  category: \"hooks\" | \"shots\" | \"both\";\n  viewCount: number | null;\n  relevanceScore: number;\n  ingestionSource: string;\n  species?: string | null;\n  locationState?: string | null;\n};\n\nexport class IngestionCycleCollector {\n  private readonly items: CycleVideoSnapshot[] = [];\n\n  addMany(candidates: CatalogVideoCandidate[]): void {\n    for (const c of candidates) {\n      this.items.push({\n        sourcePlatform: c.sourcePlatform,\n        sourceVideoId: c.sourceVideoId,\n        title: c.title,\n        description: c.description,\n        videoUrl: c.videoUrl,\n        embedUrl: c.embedUrl,\n        creator: c.creator,\n        creatorHandle: c.creatorHandle,\n        channelId: c.channelId,\n        category: c.category,\n        viewCount: c.viewCount,\n        relevanceScore: c.relevanceScore,\n        ingestionSource: c.ingestionSource,\n        species: c.species,\n        locationState: c.locationState,\n      });\n    }\n  }\n\n  getSnapshots(): CycleVideoSnapshot[] {\n    return [...this.items];\n  }\n\n  get count(): number {\n    return this.items.length;\n  }\n}\n\nexport function createCycleCollector(): IngestionCycleCollector {\n  return new IngestionCycleCollector();\n}\n", "import { logger } from \"../logger\";\nimport type { IngestionCycleCollector } from \"./cycleCollector\";\nimport {\n  applySecondaryPostProcessRankings,\n  persistGapQueriesForNextCycle,\n} from \"./applySecondaryRankings\";\n\ntype OpenRouterModule = typeof import(\"@workspace/video-discovery-agent\");\n\nlet agentModule: OpenRouterModule | null = null;\n\nasync function getAgent(): Promise<OpenRouterModule | null> {\n  if (agentModule) return agentModule;\n  try {\n    agentModule = await import(\"@workspace/video-discovery-agent\");\n    if (!agentModule.isOpenRouterConfigured()) return null;\n    return agentModule;\n  } catch (err) {\n    logger.warn({ err }, \"OpenRouter video-discovery-agent unavailable for secondary post-process\");\n    return null;\n  }\n}\n\nexport async function runSecondaryPostProcessLayer(\n  collector: IngestionCycleCollector,\n  context?: {\n    existingScopeKeys?: string[];\n    existingSerpQueries?: string[];\n  },\n): Promise<Record<string, unknown> | null> {\n  const agent = await getAgent();\n  if (!agent) return null;\n\n  const snapshots = collector.getSnapshots();\n  if (snapshots.length === 0) {\n    return { skipped: true, reason: \"no_candidates_collected\" };\n  }\n\n  try {\n    const report = await agent.runSecondaryPostProcess({\n      videos: snapshots,\n      existingScopeKeys: context?.existingScopeKeys,\n      existingSerpQueries: context?.existingSerpQueries,\n    });\n\n    if (!report) return null;\n\n    logger.info(\n      {\n        input: report.stats.inputCount,\n        ranked: report.rankedVideos.length,\n        channels: report.stats.uniqueChannels,\n        spendUsd: report.stats.tierSpendUsd,\n        escalated: report.stats.escalated,\n      },\n      \"Secondary OpenRouter post-process complete\",\n    );\n\n    const applyResult = await applySecondaryPostProcessRankings(\n      report.rankedVideos,\n      collector.getSnapshots(),\n    );\n    if (report.recommendedNextQueries.length > 0) {\n      await persistGapQueriesForNextCycle(report.recommendedNextQueries);\n    }\n\n    return {\n      ...(report as unknown as Record<string, unknown>),\n      catalogUpdates: applyResult,\n    };\n  } catch (err) {\n    logger.warn({ err }, \"Secondary OpenRouter post-process failed\");\n    return null;\n  }\n}\n", "import crypto from \"crypto\";\nimport { db, gearCatalogTable, videoDetectedProductsTable } from \"@workspace/db\";\nimport { and, desc, eq, ilike, isNull, or, sql } from \"drizzle-orm\";\nimport { logger } from \"../logger\";\n\n/**\n * Review-gated gear catalog growth.\n *\n * The ingestion + post-process pipeline detects gear from videos and stores it\n * in `video_detected_products`, but historically nothing promoted those\n * detections into `gear_catalog` \u2014 so the storefront catalog never grew on its\n * own. This module promotes high-confidence, unmatched detections into\n * `gear_catalog` with status `pending_review`.\n *\n * `pending_review` rows are invisible to the public storefront/feed (every\n * public gear query filters `status = 'published'`) and never auto-link to\n * videos (matching also filters `published`). An admin reviews + publishes them\n * via `/gear-admin/library?status=pending_review`, at which point they enter the\n * live catalog and become matchable. This keeps affiliate/monetized data\n * curated while still letting the catalog grow automatically from ingestion.\n */\n\nexport const AUTO_PROMOTION_STATUS = \"pending_review\";\nconst AUTO_PROMOTION_CAMPAIGN = \"auto-detected\";\nconst PROMOTED_PRODUCT_STATUS = \"promoted_pending\";\n\nexport function gearAutoPromotionEnabled(): boolean {\n  const raw = process.env.GEAR_AUTO_PROMOTION_ENABLED?.trim().toLowerCase();\n  return raw !== \"false\" && raw !== \"0\";\n}\n\nfunction minPromotionConfidence(): number {\n  const raw = parseInt(process.env.GEAR_AUTO_PROMOTION_MIN_CONFIDENCE ?? \"70\", 10);\n  return Number.isFinite(raw) ? Math.min(100, Math.max(40, raw)) : 70;\n}\n\n/** Map a vision/text detection category onto the storefront's 3 top-level buckets. */\nfunction mapDetectedCategory(category: string): \"hunting\" | \"fishing\" | \"camping\" {\n  const c = category.toLowerCase();\n  if (/rod|reel|lure|bait|line|fish\\s*finder|tackle|kayak|canoe|wader|angler|fishing/.test(c)) {\n    return \"fishing\";\n  }\n  if (/tent|camp|cooler|stove|sleeping|lantern|backpack|hiking/.test(c)) {\n    return \"camping\";\n  }\n  return \"hunting\";\n}\n\nfunction normalizeKey(brand: string, name: string): string {\n  return `${brand} ${name}`.toLowerCase().replace(/\\s+/g, \" \").trim();\n}\n\nexport type GearPromotionResult = {\n  scanned: number;\n  promoted: number;\n  linkedExisting: number;\n  deduped: number;\n  skipped: number;\n};\n\n/**\n * Promote unmatched, high-confidence detected products into the gear catalog as\n * `pending_review` items. Idempotent: detections already linked to a catalog row\n * are skipped, and duplicates (existing catalog rows with the same brand+name)\n * are linked rather than re-created.\n */\nexport async function promoteDetectedProductsToCatalog(options?: {\n  limit?: number;\n  minConfidence?: number;\n}): Promise<GearPromotionResult> {\n  const result: GearPromotionResult = {\n    scanned: 0,\n    promoted: 0,\n    linkedExisting: 0,\n    deduped: 0,\n    skipped: 0,\n  };\n\n  if (!gearAutoPromotionEnabled()) {\n    return result;\n  }\n\n  const limit = Math.min(Math.max(options?.limit ?? 40, 1), 200);\n  const minConfidence = options?.minConfidence ?? minPromotionConfidence();\n\n  const candidates = await db\n    .select()\n    .from(videoDetectedProductsTable)\n    .where(\n      and(\n        isNull(videoDetectedProductsTable.catalogGearId),\n        eq(videoDetectedProductsTable.status, \"detected\"),\n        sql`${videoDetectedProductsTable.confidence} >= ${minConfidence}`,\n      ),\n    )\n    .orderBy(desc(videoDetectedProductsTable.confidence))\n    .limit(limit);\n\n  result.scanned = candidates.length;\n  if (candidates.length === 0) return result;\n\n  // Track keys promoted within this batch so we don't create duplicates for\n  // the same product detected across multiple videos in one run.\n  const promotedThisBatch = new Map<string, string>();\n  let maxPosition = await db\n    .select({ pos: gearCatalogTable.position })\n    .from(gearCatalogTable)\n    .orderBy(desc(gearCatalogTable.position))\n    .limit(1)\n    .then((rows) => rows[0]?.pos ?? 0);\n\n  for (const product of candidates) {\n    const brand = product.brand?.trim() || \"Unknown\";\n    const name = product.name?.trim();\n    if (!name || name.length < 2) {\n      result.skipped++;\n      continue;\n    }\n\n    const key = normalizeKey(brand, name);\n\n    // Already promoted earlier in this same batch \u2192 link to the new row.\n    const batchGearId = promotedThisBatch.get(key);\n    if (batchGearId) {\n      await linkDetectedProduct(product.id, batchGearId, PROMOTED_PRODUCT_STATUS);\n      result.deduped++;\n      continue;\n    }\n\n    // Existing catalog row (any status) with the same brand+name \u2192 link instead\n    // of creating a duplicate. `matched` if it is already live/published.\n    const [existing] = await db\n      .select({ id: gearCatalogTable.id, status: gearCatalogTable.status })\n      .from(gearCatalogTable)\n      .where(\n        and(\n          ilike(gearCatalogTable.name, name),\n          or(ilike(gearCatalogTable.brand, brand), sql`${brand} = 'Unknown'`)!,\n        ),\n      )\n      .limit(1);\n\n    if (existing) {\n      const linkStatus = existing.status === \"published\" ? \"matched\" : PROMOTED_PRODUCT_STATUS;\n      await linkDetectedProduct(product.id, existing.id, linkStatus);\n      promotedThisBatch.set(key, existing.id);\n      result.linkedExisting++;\n      continue;\n    }\n\n    const gearId = crypto.randomUUID();\n    const category = mapDetectedCategory(product.category ?? \"\");\n    const subcategory = product.category?.trim() || \"General\";\n\n    try {\n      await db.insert(gearCatalogTable).values({\n        id: gearId,\n        name: name.slice(0, 200),\n        brand: brand.slice(0, 120),\n        category,\n        subcategory: subcategory.slice(0, 120),\n        price: 0,\n        description: `Auto-detected from video content (${product.detectionSource}). Pending review \u2014 confirm details, price, and affiliate link before publishing.`,\n        thumbnailUrl: \"\",\n        specs: {\n          detectionSource: product.detectionSource,\n          detectionConfidence: product.confidence,\n          searchQuery: product.searchQuery ?? \"\",\n          model: product.model ?? \"\",\n        },\n        utmCampaign: AUTO_PROMOTION_CAMPAIGN,\n        status: AUTO_PROMOTION_STATUS,\n        position: ++maxPosition,\n        updatedAt: new Date(),\n      });\n\n      await linkDetectedProduct(product.id, gearId, PROMOTED_PRODUCT_STATUS);\n      promotedThisBatch.set(key, gearId);\n      result.promoted++;\n    } catch (err) {\n      result.skipped++;\n      logger.warn({ err, name, brand }, \"Gear auto-promotion insert failed\");\n    }\n  }\n\n  if (result.promoted > 0 || result.linkedExisting > 0) {\n    logger.info(\n      {\n        scanned: result.scanned,\n        promoted: result.promoted,\n        linkedExisting: result.linkedExisting,\n        deduped: result.deduped,\n      },\n      \"Gear auto-promotion complete (pending review)\",\n    );\n  }\n\n  return result;\n}\n\nasync function linkDetectedProduct(\n  detectedProductId: string,\n  gearId: string,\n  status: string,\n): Promise<void> {\n  await db\n    .update(videoDetectedProductsTable)\n    .set({ catalogGearId: gearId, status, updatedAt: new Date() })\n    .where(eq(videoDetectedProductsTable.id, detectedProductId));\n}\n", "import { db, ingestionCheckpointsTable, ingestionRunsTable, userVideosTable } from \"@workspace/db\";\nimport { desc, isNotNull, sql } from \"drizzle-orm\";\nimport {\n  DEER_INSERT_SHARE_TARGET,\n  DEER_LIBRARY_SHARE_FLOOR,\n} from \"./deerContentPriority.js\";\nimport {\n  getYouTubeGlobalPause,\n  getTikTokGlobalPause,\n  sustainablePolicySnapshot,\n} from \"./sustainableIngestion.js\";\nimport { listConfiguredScrapers } from \"../scraping/router.js\";\n\nexport type IngestionHealthStatus = \"healthy\" | \"degraded\" | \"stalled\";\n\nexport type DeerContentMetrics = {\n  libraryTotal: number;\n  libraryDeerCount: number;\n  libraryDeerShare: number;\n  inserted24h: number;\n  inserted24hDeer: number;\n  inserted24hDeerShare: number;\n  topDeerSources24h: Array<{ source: string; count: number }>;\n  targets: { insertShare: number; libraryFloor: number };\n};\n\nconst DEER_SQL_MATCH = sql`(\n  ${userVideosTable.title} ILIKE '%deer%'\n  OR ${userVideosTable.title} ILIKE '%whitetail%'\n  OR ${userVideosTable.title} ILIKE '%white-tailed%'\n  OR ${userVideosTable.title} ILIKE '% buck%'\n  OR ${userVideosTable.description} ILIKE '%deer hunt%'\n  OR ${userVideosTable.description} ILIKE '%whitetail%'\n  OR ${userVideosTable.species} ILIKE '%deer%'\n  OR ${userVideosTable.species} ILIKE '%whitetail%'\n)`;\n\nexport async function buildDeerContentMetrics(): Promise<DeerContentMetrics> {\n  const [libraryRow] = await db\n    .select({\n      total: sql<number>`count(*)::int`,\n      deer: sql<number>`count(*) FILTER (WHERE ${DEER_SQL_MATCH})::int`,\n    })\n    .from(userVideosTable)\n    .where(isNotNull(userVideosTable.ingestionSource));\n\n  const [inserted24hRow] = await db\n    .select({\n      total: sql<number>`count(*)::int`,\n      deer: sql<number>`count(*) FILTER (WHERE ${DEER_SQL_MATCH})::int`,\n    })\n    .from(userVideosTable)\n    .where(\n      sql`${userVideosTable.ingestionSource} IS NOT NULL AND ${userVideosTable.createdAt} > NOW() - INTERVAL '24 hours'`,\n    );\n\n  const topSources = await db\n    .select({\n      source: userVideosTable.ingestionSource,\n      count: sql<number>`count(*)::int`,\n    })\n    .from(userVideosTable)\n    .where(\n      sql`${userVideosTable.ingestionSource} IS NOT NULL\n        AND ${userVideosTable.createdAt} > NOW() - INTERVAL '24 hours'\n        AND ${DEER_SQL_MATCH}`,\n    )\n    .groupBy(userVideosTable.ingestionSource)\n    .orderBy(sql`count(*) DESC`)\n    .limit(8);\n\n  const libraryTotal = libraryRow?.total ?? 0;\n  const libraryDeerCount = libraryRow?.deer ?? 0;\n  const inserted24h = inserted24hRow?.total ?? 0;\n  const inserted24hDeer = inserted24hRow?.deer ?? 0;\n\n  return {\n    libraryTotal,\n    libraryDeerCount,\n    libraryDeerShare: libraryTotal > 0 ? libraryDeerCount / libraryTotal : 0,\n    inserted24h,\n    inserted24hDeer,\n    inserted24hDeerShare: inserted24h > 0 ? inserted24hDeer / inserted24h : 0,\n    topDeerSources24h: topSources\n      .filter((r) => r.source)\n      .map((r) => ({ source: r.source!, count: r.count })),\n    targets: { insertShare: DEER_INSERT_SHARE_TARGET, libraryFloor: DEER_LIBRARY_SHARE_FLOOR },\n  };\n}\n\nexport type IngestionHealthReport = {\n  status: IngestionHealthStatus;\n  lastRunAt: string | null;\n  minutesSinceLastRun: number | null;\n  lastInsertAt: string | null;\n  hoursSinceLastInsert: number | null;\n  recentInserted24h: number;\n  deerContent: DeerContentMetrics;\n  alerts: string[];\n  providerErrors: Array<{ provider: string; scopeKey: string; error: string; updatedAt: string }>;\n  sustainablePolicy: ReturnType<typeof sustainablePolicySnapshot>;\n  youtubeGlobalPause: { paused: boolean; reason?: string; until?: string };\n  tiktokGlobalPause: { paused: boolean; reason?: string; until?: string };\n};\n\nconst STALL_RUN_MINUTES = 150;\nconst STALL_INSERT_HOURS = 6;\n\nfunction minutesBetween(from: Date, to: Date): number {\n  return Math.round((to.getTime() - from.getTime()) / 60_000);\n}\n\nfunction hoursBetween(from: Date, to: Date): number {\n  return Math.round((to.getTime() - from.getTime()) / 3_600_000);\n}\n\nexport async function buildIngestionHealthReport(): Promise<IngestionHealthReport> {\n  const now = new Date();\n  const alerts: string[] = [];\n\n  const [lastRun] = await db\n    .select({\n      startedAt: ingestionRunsTable.startedAt,\n      inserted: ingestionRunsTable.inserted,\n      errors: ingestionRunsTable.errors,\n      provider: ingestionRunsTable.provider,\n    })\n    .from(ingestionRunsTable)\n    .orderBy(desc(ingestionRunsTable.startedAt))\n    .limit(1);\n\n  const [lastInsert] = await db\n    .select({ createdAt: userVideosTable.createdAt })\n    .from(userVideosTable)\n    .where(isNotNull(userVideosTable.ingestionSource))\n    .orderBy(desc(userVideosTable.createdAt))\n    .limit(1);\n\n  const [inserted24hRow] = await db\n    .select({ count: sql<number>`count(*)::int` })\n    .from(userVideosTable)\n    .where(\n      sql`${userVideosTable.ingestionSource} IS NOT NULL AND ${userVideosTable.createdAt} > NOW() - INTERVAL '24 hours'`,\n    );\n\n  const errorCheckpoints = await db\n    .select({\n      provider: ingestionCheckpointsTable.provider,\n      scopeKey: ingestionCheckpointsTable.scopeKey,\n      lastError: ingestionCheckpointsTable.lastError,\n      updatedAt: ingestionCheckpointsTable.updatedAt,\n    })\n    .from(ingestionCheckpointsTable)\n    .where(isNotNull(ingestionCheckpointsTable.lastError))\n    .orderBy(desc(ingestionCheckpointsTable.updatedAt))\n    .limit(8);\n\n  const lastRunAt = lastRun?.startedAt ?? null;\n  const minutesSinceLastRun = lastRunAt ? minutesBetween(lastRunAt, now) : null;\n  const lastInsertAt = lastInsert?.createdAt ?? null;\n  const hoursSinceLastInsert = lastInsertAt ? hoursBetween(lastInsertAt, now) : null;\n  const recentInserted24h = inserted24hRow?.count ?? 0;\n  const deerContent = await buildDeerContentMetrics();\n\n  const providerErrors = errorCheckpoints\n    .filter((row) => row.lastError)\n    .map((row) => ({\n      provider: row.provider,\n      scopeKey: row.scopeKey,\n      error: row.lastError!.slice(0, 240),\n      updatedAt: row.updatedAt.toISOString(),\n    }));\n\n  if (minutesSinceLastRun == null) {\n    alerts.push(\"No ingestion runs recorded yet.\");\n  } else if (minutesSinceLastRun >= STALL_RUN_MINUTES) {\n    alerts.push(\n      `No ingestion run in ${minutesSinceLastRun} minutes (threshold ${STALL_RUN_MINUTES}m). Check GitHub Actions cron and CRON_SECRET.`,\n    );\n  }\n\n  if (hoursSinceLastInsert != null && hoursSinceLastInsert >= STALL_INSERT_HOURS) {\n    alerts.push(\n      `No new ingested videos in ${hoursSinceLastInsert} hours (threshold ${STALL_INSERT_HOURS}h).`,\n    );\n  }\n\n  const youtube429 = providerErrors.filter((e) => e.error.includes(\"(429)\"));\n  if (youtube429.length > 0) {\n    alerts.push(`YouTube rate limit (429) on ${youtube429.length} scope(s) \u2014 backoff will apply next cycle.`);\n  }\n\n  const youtubeGlobalPause = await getYouTubeGlobalPause();\n  if (youtubeGlobalPause.paused) {\n    alerts.push(\n      `YouTube globally paused until ${youtubeGlobalPause.until ?? \"cooldown expires\"} (${youtubeGlobalPause.reason?.slice(0, 80) ?? \"rate limit\"}).`,\n    );\n  }\n\n  const tiktokGlobalPause = await getTikTokGlobalPause();\n  if (tiktokGlobalPause.paused) {\n    alerts.push(\n      `TikTok globally paused until ${tiktokGlobalPause.until ?? \"cooldown expires\"} (${tiktokGlobalPause.reason?.slice(0, 80) ?? \"rate limit\"}).`,\n    );\n  }\n\n  if (process.env.TIKTOK_INGESTION_ENABLED === \"false\") {\n    alerts.push(\"TikTok catalog ingestion disabled (TIKTOK_INGESTION_ENABLED=false).\");\n  }\n\n  if (!process.env.CRON_SECRET?.trim()) {\n    alerts.push(\"CRON_SECRET is not set \u2014 scheduled ingestion cannot authenticate.\");\n  }\n\n  if (process.env.SCRAPER_AGENT_ENABLED === \"false\") {\n    alerts.push(\"Instagram scraper disabled (SCRAPER_AGENT_ENABLED=false).\");\n  }\n\n  if (process.env.YOUTUBE_INGESTION_ENABLED === \"false\") {\n    alerts.push(\"YouTube/SERP ingestion disabled (YOUTUBE_INGESTION_ENABLED=false).\");\n  }\n\n  if (!process.env.YOUTUBE_API_KEY?.trim()) {\n    alerts.push(\"YOUTUBE_API_KEY is not set \u2014 YouTube discovery and hydration disabled.\");\n  }\n\n  if (listConfiguredScrapers().length === 0) {\n    alerts.push(\"No web scraper configured \u2014 set NIMBLE_API_KEY (preferred) or SCRAPER_API_KEY.\");\n  }\n\n  if (!process.env.OPENROUTER_API_KEY?.trim() && !process.env.OPENAI_API_KEY?.trim()) {\n    alerts.push(\"No AI gateway configured \u2014 set OPENROUTER_API_KEY or OPENAI_API_KEY for summaries/classification.\");\n  }\n\n  if (deerContent.libraryDeerShare < DEER_LIBRARY_SHARE_FLOOR && deerContent.libraryTotal >= 50) {\n    alerts.push(\n      `Deer catalog share ${(deerContent.libraryDeerShare * 100).toFixed(1)}% is below floor ${(DEER_LIBRARY_SHARE_FLOOR * 100).toFixed(0)}%.`,\n    );\n  }\n\n  if (\n    deerContent.inserted24h >= 5 &&\n    deerContent.inserted24hDeerShare < DEER_INSERT_SHARE_TARGET * 0.75\n  ) {\n    alerts.push(\n      `Deer intake share ${(deerContent.inserted24hDeerShare * 100).toFixed(1)}% in last 24h \u2014 target ${(DEER_INSERT_SHARE_TARGET * 100).toFixed(0)}%.`,\n    );\n  }\n\n  let status: IngestionHealthStatus = \"healthy\";\n  if (alerts.some((a) => a.includes(\"No ingestion run\") || a.includes(\"No new ingested\"))) {\n    status = \"stalled\";\n  } else if (alerts.length > 0 || (lastRun?.errors ?? 0) > 0) {\n    status = \"degraded\";\n  }\n\n  return {\n    status,\n    lastRunAt: lastRunAt?.toISOString() ?? null,\n    minutesSinceLastRun,\n    lastInsertAt: lastInsertAt?.toISOString() ?? null,\n    hoursSinceLastInsert,\n    recentInserted24h,\n    deerContent,\n    alerts,\n    providerErrors,\n    sustainablePolicy: sustainablePolicySnapshot(),\n    youtubeGlobalPause,\n    tiktokGlobalPause,\n  };\n}\n", "import { db, ingestionRunsTable } from \"@workspace/db\";\nimport { eq } from \"drizzle-orm\";\nimport { logger } from \"../logger\";\nimport { RapidApiError, isRapidApiConfigured } from \"../rapidapi/client\";\nimport {\n  fetchInstagramClipsByMusic,\n  fetchInstagramHashtagReels,\n  fetchInstagramTrendingReels,\n  fetchInstagramUserReels,\n} from \"../rapidapi/instagramFastApi\";\nimport {\n  fetchTikTokHashtagPosts,\n  fetchTikTokMusicPosts,\n  fetchTikTokTrendingFeed,\n  fetchTikTokUserFeed,\n} from \"../rapidapi/tiktokFastApi\";\nimport {\n  extractSecUidFromUserInfo,\n  fetchTikTokUserInfo,\n  fetchTikTokUserOldestPosts,\n  fetchTikTokUserPosts,\n  fetchTikTokSearchVideos,\n  fetchTikTokSearchGeneral,\n} from \"../rapidapi/tiktokApi23\";\nimport { consumeDailyQuota, contentDiscoveryDailyCap, getDailyQuotaUsage } from \"../ingestion/quotaBudget\";\nimport {\n  isRateLimitMessage,\n  sleepWithJitter,\n  discoveryTargetDelayMs,\n  discoveryTargetsPerCycle,\n} from \"../ingestion/sustainableIngestion\";\nimport {\n  extractNextCursor,\n  normalizeInstagramPayload,\n  normalizeTikTokPayload,\n} from \"./normalize\";\nimport { buildContentInsights } from \"./scoring\";\nimport { upsertDiscoveredVideos } from \"./store\";\nimport { promoteEligibleDiscoveredContent } from \"../ingestion/promoteDiscoveredContent\";\nimport type { DiscoveryTarget } from \"@workspace/db\";\nimport {\n  ensureDefaultDiscoveryTargets,\n  listEnabledDiscoveryTargets,\n  updateDiscoveryTargetCursor,\n  isDisallowedTarget,\n  setDiscoveryTargetEnabled,\n} from \"./targets\";\nimport {\n  isValidatedCreator,\n  validateDiscoverySamples,\n} from \"../ingestion/creatorValidation\";\nimport type { DiscoveryCycleStats, NormalizedDiscoveredVideo } from \"./types\";\n\nconst PROVIDER = \"content_discovery\";\n\nfunction readInt(name: string, fallback: number): number {\n  const raw = parseInt(process.env[name] ?? String(fallback), 10);\n  return Number.isFinite(raw) ? raw : fallback;\n}\n\nfunction postsPerTarget(): number {\n  return readInt(\"CONTENT_DISCOVERY_POSTS_PER_TARGET\", 12);\n}\n\nfunction isEnabled(): boolean {\n  return process.env.CONTENT_DISCOVERY_ENABLED !== \"false\";\n}\n\nasync function startRun(): Promise<number> {\n  const [row] = await db\n    .insert(ingestionRunsTable)\n    .values({ provider: PROVIDER, status: \"running\" })\n    .returning({ id: ingestionRunsTable.id });\n  return row!.id;\n}\n\nasync function finishRun(\n  runId: number,\n  stats: DiscoveryCycleStats,\n  status: \"completed\" | \"partial\" | \"failed\",\n): Promise<void> {\n  await db\n    .update(ingestionRunsTable)\n    .set({\n      status,\n      finishedAt: new Date(),\n      discovered: stats.discovered,\n      eligible: Math.max(0, stats.discovered - stats.rejected),\n      inserted: stats.inserted,\n      skippedDuplicate: stats.skippedDuplicate,\n      rejected: stats.rejected,\n      errors: stats.errors,\n      quotaUsed: stats.quotaUsed,\n      details: stats.details,\n    })\n    .where(eq(ingestionRunsTable.id, runId));\n}\n\nasync function fetchTargetPayload(\n  target: DiscoveryTarget,\n): Promise<{ payload: Record<string, unknown>; discoverySource: string }> {\n  const limit = postsPerTarget();\n  const cursor = target.cursorToken;\n\n  if (target.platform === \"tiktok\") {\n    switch (target.targetType) {\n      case \"sec_uid\":\n        return {\n          payload: await fetchTikTokUserOldestPosts(target.targetValue, {\n            count: limit,\n            cursor: cursor ?? 0,\n          }),\n          discoverySource: \"tiktok_api23_oldest_posts\",\n        };\n      case \"search\":\n        return {\n          payload: await fetchTikTokSearchVideos(target.targetValue, {\n            count: limit,\n            cursor: cursor ?? 0,\n          }),\n          discoverySource: \"tiktok_api23_search_video\",\n        };\n      case \"category\":\n        return {\n          payload: await fetchTikTokSearchGeneral(target.targetValue, {\n            count: limit,\n            cursor: cursor ?? 0,\n          }),\n          discoverySource: \"tiktok_api23_search_general\",\n        };\n      case \"profile\": {\n        const api23First = process.env.CONTENT_DISCOVERY_TIKTOK_API23_FIRST !== \"false\";\n        if (api23First) {\n          try {\n            const info = await fetchTikTokUserInfo(target.targetValue);\n            const secUid = extractSecUidFromUserInfo(info);\n            if (secUid) {\n              return {\n                payload: await fetchTikTokUserPosts(secUid, { count: limit, cursor: cursor ?? 0 }),\n                discoverySource: \"tiktok_api23_user_posts\",\n              };\n            }\n          } catch (err) {\n            logger.info(\n              { err, username: target.targetValue },\n              \"TikTok API23 profile lookup failed \u2014 falling back to fast scraper\",\n            );\n          }\n        }\n        return {\n          payload: await fetchTikTokUserFeed(target.targetValue, { limit, cursor }),\n          discoverySource: \"tiktok_profile_feed\",\n        };\n      }\n      case \"hashtag\":\n        return {\n          payload: await fetchTikTokHashtagPosts(target.targetValue, { limit, cursor }),\n          discoverySource: \"tiktok_hashtag\",\n        };\n      case \"music\":\n        return {\n          payload: await fetchTikTokMusicPosts(target.targetValue, { limit, cursor }),\n          discoverySource: \"tiktok_music\",\n        };\n      case \"trending\":\n        return {\n          payload: await fetchTikTokTrendingFeed({ limit, cursor }),\n          discoverySource: \"tiktok_trending\",\n        };\n      default:\n        throw new Error(`Unsupported TikTok target type: ${target.targetType}`);\n    }\n  }\n\n  if (target.platform === \"instagram\") {\n    switch (target.targetType) {\n      case \"profile\":\n        return {\n          payload: await fetchInstagramUserReels(target.targetValue, { limit, cursor }),\n          discoverySource: \"instagram_profile_reels\",\n        };\n      case \"hashtag\":\n        return {\n          payload: await fetchInstagramHashtagReels(target.targetValue, { limit, cursor }),\n          discoverySource: \"instagram_hashtag_reels\",\n        };\n      case \"music\":\n        return {\n          payload: await fetchInstagramClipsByMusic(target.targetValue, { limit, cursor }),\n          discoverySource: \"instagram_clip_music\",\n        };\n      case \"trending\":\n        return {\n          payload: await fetchInstagramTrendingReels({ limit, cursor }),\n          discoverySource: \"instagram_trending_reels\",\n        };\n      default:\n        throw new Error(`Unsupported Instagram target type: ${target.targetType}`);\n    }\n  }\n\n  throw new Error(`Unsupported platform: ${target.platform}`);\n}\n\nfunction normalizeTargetPayload(\n  target: DiscoveryTarget,\n  payload: Record<string, unknown>,\n  discoverySource: string,\n): NormalizedDiscoveredVideo[] {\n  const ctx = {\n    discoverySource,\n    discoveryQuery: `${target.targetType}:${target.targetValue}`,\n    niche: target.niche,\n  };\n  if (target.platform === \"tiktok\") return normalizeTikTokPayload(payload, ctx);\n  if (target.platform === \"instagram\") return normalizeInstagramPayload(payload, ctx);\n  return [];\n}\n\nexport async function runContentDiscoveryCycle(): Promise<DiscoveryCycleStats> {\n  const stats: DiscoveryCycleStats = {\n    provider: \"content_discovery\",\n    discovered: 0,\n    inserted: 0,\n    updated: 0,\n    skippedDuplicate: 0,\n    rejected: 0,\n    errors: 0,\n    quotaUsed: 0,\n    details: { targets: [] as string[], insights: null as Record<string, unknown> | null },\n  };\n\n  if (!isEnabled()) {\n    stats.details.reason = \"CONTENT_DISCOVERY_ENABLED=false\";\n    return stats;\n  }\n\n  if (!isRapidApiConfigured()) {\n    stats.details.reason = \"RAPIDAPI_KEY not configured\";\n    return stats;\n  }\n\n  const runId = await startRun();\n  const collected: NormalizedDiscoveredVideo[] = [];\n\n  try {\n    await ensureDefaultDiscoveryTargets();\n    const perCycle = discoveryTargetsPerCycle();\n    const platformFilter = process.env.CONTENT_DISCOVERY_PLATFORMS?.split(\",\").map((p) => p.trim()) ?? null;\n    const targets = (await listEnabledDiscoveryTargets(perCycle * 6))\n      .filter((t) => {\n        if (platformFilter?.length && !platformFilter.includes(t.platform)) return false;\n        if (t.platform === \"tiktok\" && (t.targetType === \"hashtag\" || t.targetType === \"trending\")) {\n          return false;\n        }\n        if (isDisallowedTarget(t.targetType)) return false;\n        if (t.platform === \"instagram\" && process.env.CONTENT_DISCOVERY_INSTAGRAM_ENABLED !== \"true\") {\n          return false;\n        }\n        return true;\n      })\n      .sort((a, b) => {\n        const rank = (t: DiscoveryTarget) =>\n          t.platform === \"tiktok\" && t.targetType === \"search\"\n            ? 0\n            : t.platform === \"tiktok\" && t.targetType === \"profile\"\n              ? 1\n              : 2;\n        return rank(a) - rank(b) || (a.id ?? 0) - (b.id ?? 0);\n      })\n      .slice(0, perCycle);\n\n    if (targets.length === 0) {\n      stats.details.reason = \"no enabled discovery targets\";\n      await finishRun(runId, stats, \"completed\");\n      return stats;\n    }\n\n    for (const target of targets) {\n      const quota = await consumeDailyQuota(\"content_discovery_rapidapi\", contentDiscoveryDailyCap());\n      if (!quota.allowed) {\n        stats.details.reason = \"daily RapidAPI discovery quota reached\";\n        (stats.details.targets as string[]).push(\"QUOTA_REACHED\");\n        break;\n      }\n      stats.quotaUsed = quota.used;\n\n      try {\n        const { payload, discoverySource } = await fetchTargetPayload(target);\n        const items = normalizeTargetPayload(target, payload, discoverySource);\n\n        // For unknown profile targets, validate sample relevance before ingesting\n        if (\n          target.targetType === \"profile\" &&\n          !isValidatedCreator(target.platform, target.targetValue)\n        ) {\n          const sampleValidation = validateDiscoverySamples(\n            items.map((i) => ({ caption: i.caption, hashtags: i.hashtags })),\n          );\n          if (!sampleValidation.valid) {\n            (stats.details.targets as string[]).push(\n              `REJECT ${target.platform}/${target.targetValue}: ${sampleValidation.reason}`,\n            );\n            logger.info(\n              { target, validation: sampleValidation },\n              \"Discovery profile rejected \u2014 insufficient outdoor relevance\",\n            );\n            await setDiscoveryTargetEnabled(target.id, false);\n            continue;\n          }\n        }\n\n        stats.discovered += items.length;\n        collected.push(...items);\n\n        const upsert = await upsertDiscoveredVideos(items, { ingestionRunId: runId });\n        stats.inserted += upsert.inserted;\n        stats.updated += upsert.updated;\n        stats.skippedDuplicate += upsert.skippedDuplicate;\n        stats.rejected += upsert.rejected;\n\n        const nextCursor = extractNextCursor(payload);\n        await updateDiscoveryTargetCursor(target.id, nextCursor);\n\n        (stats.details.targets as string[]).push(\n          `${target.platform}/${target.targetType}/${target.targetValue} \u2192 ${items.length} items`,\n        );\n      } catch (err) {\n        const message = err instanceof Error ? err.message : String(err);\n        if (err instanceof RapidApiError && err.statusCode === 403) {\n          (stats.details.targets as string[]).push(\n            `SKIP ${target.platform}/${target.targetType}: RapidAPI not subscribed`,\n          );\n          logger.info({ target }, \"Content discovery target skipped \u2014 subscription required\");\n          continue;\n        }\n        stats.errors++;\n        logger.warn({ err, target }, \"Content discovery target failed\");\n        if (isRateLimitMessage(message)) break;\n      }\n\n      const delay = discoveryTargetDelayMs();\n      if (delay > 0) await sleepWithJitter(delay);\n    }\n\n    if (collected.length > 0) {\n      stats.details.insights = buildContentInsights(collected) as unknown as Record<string, unknown>;\n    }\n\n    if (process.env.CONTENT_DISCOVERY_PROMOTE_ENABLED !== \"false\") {\n      try {\n        stats.details.promoted = await promoteEligibleDiscoveredContent();\n      } catch (err) {\n        stats.errors++;\n        logger.warn({ err }, \"Discovered content promotion to feed failed\");\n      }\n    }\n\n    await finishRun(runId, stats, stats.errors > 0 ? \"partial\" : \"completed\");\n  } catch (err) {\n    stats.errors++;\n    await finishRun(runId, stats, \"failed\");\n    throw err;\n  }\n\n  return stats;\n}\n\nexport async function getContentDiscoveryStatus() {\n  return {\n    enabled: isEnabled(),\n    configured: isRapidApiConfigured(),\n    postsPerTarget: postsPerTarget(),\n    targetsPerCycle: discoveryTargetsPerCycle(),\n    targetDelayMs: discoveryTargetDelayMs(),\n    dailyCap: contentDiscoveryDailyCap(),\n    dailyUsed: await getDailyQuotaUsage(\"content_discovery_rapidapi\"),\n  };\n}\n", "import { rapidApiRequest } from \"./client.js\";\n\nexport const TIKTOK_FAST_HOST = \"tiktok-api-fast-reliable-data-scraper.p.rapidapi.com\";\n\nfunction host(): string {\n  return process.env.RAPIDAPI_TIKTOK_FAST_HOST?.trim() || TIKTOK_FAST_HOST;\n}\n\nexport type TikTokFastApiOptions = {\n  limit?: number;\n  cursor?: string | null;\n};\n\n/** GET /user/{username}/feed \u2014 creator profile feed. */\nexport async function fetchTikTokUserFeed(\n  username: string,\n  options?: TikTokFastApiOptions,\n): Promise<Record<string, unknown>> {\n  const user = username.replace(/^@/, \"\").trim();\n  return rapidApiRequest({\n    host: host(),\n    path: `/user/${encodeURIComponent(user)}/feed`,\n    params: {\n      count: options?.limit ?? 12,\n      cursor: options?.cursor ?? undefined,\n    },\n  });\n}\n\n/** GET /hashtag/{tag}/posts \u2014 hashtag discovery (when available on provider). */\nexport async function fetchTikTokHashtagPosts(\n  hashtag: string,\n  options?: TikTokFastApiOptions,\n): Promise<Record<string, unknown>> {\n  const tag = hashtag.replace(/^#/, \"\").trim();\n  const customPath = process.env.RAPIDAPI_TIKTOK_FAST_HASHTAG_PATH?.trim();\n  const path = customPath\n    ? customPath.replace(\"{hashtag}\", encodeURIComponent(tag))\n    : `/hashtag/${encodeURIComponent(tag)}/posts`;\n\n  return rapidApiRequest({\n    host: host(),\n    path,\n    params: {\n      count: options?.limit ?? 12,\n      cursor: options?.cursor ?? undefined,\n    },\n  });\n}\n\n/** GET /trending/feed \u2014 trending discovery (configurable path). */\nexport async function fetchTikTokTrendingFeed(\n  options?: TikTokFastApiOptions,\n): Promise<Record<string, unknown>> {\n  const path = process.env.RAPIDAPI_TIKTOK_FAST_TRENDING_PATH?.trim() || \"/trending/feed\";\n  return rapidApiRequest({\n    host: host(),\n    path,\n    params: {\n      count: options?.limit ?? 12,\n      cursor: options?.cursor ?? undefined,\n    },\n  });\n}\n\n/** GET /music/{musicId}/posts \u2014 audio-based discovery. */\nexport async function fetchTikTokMusicPosts(\n  musicId: string,\n  options?: TikTokFastApiOptions,\n): Promise<Record<string, unknown>> {\n  const path =\n    process.env.RAPIDAPI_TIKTOK_FAST_MUSIC_PATH?.trim()?.replace(\"{musicId}\", encodeURIComponent(musicId)) ??\n    `/music/${encodeURIComponent(musicId)}/posts`;\n\n  return rapidApiRequest({\n    host: host(),\n    path,\n    params: {\n      count: options?.limit ?? 12,\n      cursor: options?.cursor ?? undefined,\n    },\n  });\n}\n", "import { rapidApiRequest } from \"./client.js\";\n\nexport const TIKTOK_API23_HOST = \"tiktok-api23.p.rapidapi.com\";\n\nfunction host(): string {\n  return process.env.RAPIDAPI_TIKTOK_API23_HOST?.trim() || TIKTOK_API23_HOST;\n}\n\nexport type TikTokApi23Options = {\n  count?: number;\n  cursor?: string | number | null;\n};\n\n/** GET /api/search/video \u2014 keyword video search. */\nexport async function fetchTikTokSearchVideos(\n  keyword: string,\n  options?: TikTokApi23Options & { cursor?: number | string | null },\n): Promise<Record<string, unknown>> {\n  const path = process.env.RAPIDAPI_TIKTOK_API23_SEARCH_VIDEO_PATH?.trim() || \"/api/search/video\";\n  return rapidApiRequest({\n    host: host(),\n    path,\n    params: {\n      keyword,\n      count: options?.count ?? 20,\n      cursor: options?.cursor ?? 0,\n    },\n  });\n}\n\n/** GET /api/search/general \u2014 general keyword search (includes videos). */\nexport async function fetchTikTokSearchGeneral(\n  keyword: string,\n  options?: TikTokApi23Options & { cursor?: number | string | null },\n): Promise<Record<string, unknown>> {\n  const path = process.env.RAPIDAPI_TIKTOK_API23_SEARCH_GENERAL_PATH?.trim() || \"/api/search/general\";\n  return rapidApiRequest({\n    host: host(),\n    path,\n    params: {\n      keyword,\n      count: options?.count ?? 20,\n      cursor: options?.cursor ?? 0,\n    },\n  });\n}\n\n/** GET /api/user/oldest-posts \u2014 paginated posts by secUid. */\nexport async function fetchTikTokUserOldestPosts(\n  secUid: string,\n  options?: TikTokApi23Options,\n): Promise<Record<string, unknown>> {\n  const path = process.env.RAPIDAPI_TIKTOK_API23_OLDEST_POSTS_PATH?.trim() || \"/api/user/oldest-posts\";\n  return rapidApiRequest({\n    host: host(),\n    path,\n    params: {\n      secUid,\n      count: options?.count ?? 30,\n      cursor: options?.cursor ?? 0,\n    },\n  });\n}\n\n/** GET /api/user/info \u2014 resolve username to secUid (when subscribed). */\nexport async function fetchTikTokUserInfo(username: string): Promise<Record<string, unknown>> {\n  const user = username.replace(/^@/, \"\").trim();\n  const path = process.env.RAPIDAPI_TIKTOK_API23_USER_INFO_PATH?.trim() || \"/api/user/info\";\n  return rapidApiRequest({\n    host: host(),\n    path,\n    params: { uniqueId: user },\n  });\n}\n\n/** GET /api/user/posts \u2014 recent posts by secUid. */\nexport async function fetchTikTokUserPosts(\n  secUid: string,\n  options?: TikTokApi23Options,\n): Promise<Record<string, unknown>> {\n  const path = process.env.RAPIDAPI_TIKTOK_API23_USER_POSTS_PATH?.trim() || \"/api/user/posts\";\n  return rapidApiRequest({\n    host: host(),\n    path,\n    params: {\n      secUid,\n      count: options?.count ?? 30,\n      cursor: options?.cursor ?? 0,\n    },\n  });\n}\n\nexport function extractSecUidFromUserInfo(payload: Record<string, unknown>): string | null {\n  const user = payload.userInfo as Record<string, unknown> | undefined;\n  const userObj = user?.user as Record<string, unknown> | undefined;\n  const secUid = userObj?.secUid;\n  return typeof secUid === \"string\" && secUid.trim() ? secUid.trim() : null;\n}\n", "import type { NormalizedDiscoveredVideo } from \"./types\";\n\nexport type ContentScores = {\n  engagementRate: number | null;\n  viralScore: number;\n  trendingScore: number;\n  relevanceScore: number;\n};\n\nfunction log10(n: number): number {\n  return Math.log10(Math.max(n, 1));\n}\n\n/** Compute engagement + viral/trending scores for ranking and filtering. */\nexport function scoreDiscoveredContent(\n  item: NormalizedDiscoveredVideo & { relevanceScore?: number },\n): ContentScores {\n  const views = item.viewCount ?? 0;\n  const likes = item.likeCount ?? 0;\n  const comments = item.commentCount ?? 0;\n  const shares = item.shareCount ?? 0;\n  const relevance = item.relevanceScore ?? 0;\n\n  const engagementActions = likes + comments + shares;\n  const engagementRate =\n    views > 0 ? Number((engagementActions / views).toFixed(6)) : engagementActions > 0 ? 1 : null;\n\n  let viralScore = 0;\n  viralScore += Math.min(25, log10(views + 1) * 6);\n  viralScore += Math.min(20, log10(likes + 1) * 5);\n  viralScore += Math.min(10, log10(comments + 1) * 4);\n  viralScore += Math.min(8, log10(shares + 1) * 4);\n  if (engagementRate != null) viralScore += Math.min(12, engagementRate * 300);\n  // Relevance is weighted heavily \u2014 outdoor fit matters more than raw virality\n  viralScore += Math.min(25, relevance * 0.35);\n\n  const recencyBoost =\n    item.publishedAt != null\n      ? Math.max(0, 12 - Math.floor((Date.now() - item.publishedAt.getTime()) / 86_400_000))\n      : 0;\n\n  const trendingScore = Math.round(viralScore * 0.65 + recencyBoost);\n\n  return {\n    engagementRate,\n    relevanceScore: relevance,\n    viralScore: Math.max(0, Math.min(100, Math.round(viralScore + recencyBoost * 0.25))),\n    trendingScore: Math.max(0, Math.min(100, trendingScore)),\n  };\n}\n\nexport type ContentInsight = {\n  topHashtags: Array<{ tag: string; count: number }>;\n  topCreators: Array<{ username: string; count: number; avgViralScore: number }>;\n  topAudio: Array<{ audioId: string; title: string | null; count: number }>;\n  avgEngagementRate: number | null;\n  sampleSize: number;\n};\n\nexport function buildContentInsights(items: NormalizedDiscoveredVideo[]): ContentInsight {\n  const hashtagCounts = new Map<string, number>();\n  const creatorStats = new Map<string, { count: number; viralTotal: number }>();\n  const audioCounts = new Map<string, { title: string | null; count: number }>();\n  let engagementSum = 0;\n  let engagementN = 0;\n\n  for (const item of items) {\n    const scores = scoreDiscoveredContent(item);\n    if (scores.engagementRate != null) {\n      engagementSum += scores.engagementRate;\n      engagementN++;\n    }\n    for (const tag of item.hashtags) {\n      hashtagCounts.set(tag, (hashtagCounts.get(tag) ?? 0) + 1);\n    }\n    if (item.creatorUsername) {\n      const key = item.creatorUsername.toLowerCase();\n      const prev = creatorStats.get(key) ?? { count: 0, viralTotal: 0 };\n      creatorStats.set(key, {\n        count: prev.count + 1,\n        viralTotal: prev.viralTotal + scores.viralScore,\n      });\n    }\n    if (item.audioId) {\n      const prev = audioCounts.get(item.audioId) ?? { title: item.audioTitle, count: 0 };\n      audioCounts.set(item.audioId, { title: prev.title ?? item.audioTitle, count: prev.count + 1 });\n    }\n  }\n\n  return {\n    topHashtags: [...hashtagCounts.entries()]\n      .sort((a, b) => b[1] - a[1])\n      .slice(0, 15)\n      .map(([tag, count]) => ({ tag, count })),\n    topCreators: [...creatorStats.entries()]\n      .sort((a, b) => b[1].count - a[1].count)\n      .slice(0, 10)\n      .map(([username, stat]) => ({\n        username,\n        count: stat.count,\n        avgViralScore: Math.round(stat.viralTotal / stat.count),\n      })),\n    topAudio: [...audioCounts.entries()]\n      .sort((a, b) => b[1].count - a[1].count)\n      .slice(0, 10)\n      .map(([audioId, stat]) => ({ audioId, title: stat.title, count: stat.count })),\n    avgEngagementRate: engagementN > 0 ? Number((engagementSum / engagementN).toFixed(4)) : null,\n    sampleSize: items.length,\n  };\n}\n", "import { db, discoveredContentTable } from \"@workspace/db\";\nimport { and, asc, desc, eq, gte, lte, sql } from \"drizzle-orm\";\nimport { scoreDiscoveredContent } from \"./scoring\";\nimport { enrichWithContentGatekeeper } from \"./normalize\";\nimport type { ContentDiscoveryFilters, NormalizedDiscoveredVideo } from \"./types\";\n\nexport type UpsertDiscoveredResult = {\n  inserted: number;\n  updated: number;\n  skippedDuplicate: number;\n  rejected: number;\n};\n\nexport async function upsertDiscoveredVideos(\n  items: NormalizedDiscoveredVideo[],\n  options?: { ingestionRunId?: number | null },\n): Promise<UpsertDiscoveredResult> {\n  let inserted = 0;\n  let updated = 0;\n  let skippedDuplicate = 0;\n  let rejected = 0;\n\n  for (const raw of items) {\n    const enriched = enrichWithContentGatekeeper(raw);\n    const scores = scoreDiscoveredContent({ ...enriched, relevanceScore: enriched.relevanceScore });\n    const status = enriched.eligible ? \"eligible\" : \"rejected\";\n    if (!enriched.eligible) rejected++;\n\n    const now = new Date();\n    const values = {\n      platform: enriched.platform,\n      sourceVideoId: enriched.sourceVideoId,\n      creatorUsername: enriched.creatorUsername,\n      creatorProfileUrl: enriched.creatorProfileUrl,\n      caption: enriched.caption,\n      hashtags: enriched.hashtags,\n      audioTitle: enriched.audioTitle,\n      audioArtist: enriched.audioArtist,\n      audioId: enriched.audioId,\n      viewCount: enriched.viewCount,\n      likeCount: enriched.likeCount,\n      commentCount: enriched.commentCount,\n      shareCount: enriched.shareCount,\n      publishedAt: enriched.publishedAt,\n      videoUrl: enriched.videoUrl,\n      thumbnailUrl: enriched.thumbnailUrl,\n      embedUrl: enriched.embedUrl,\n      durationSec: enriched.durationSec,\n      engagementRate: scores.engagementRate,\n      viralScore: scores.viralScore,\n      trendingScore: scores.trendingScore,\n      niche: enriched.niche,\n      category: enriched.category,\n      discoverySource: enriched.discoverySource,\n      discoveryQuery: enriched.discoveryQuery,\n      status,\n      rejectionReason: enriched.rejectionReason,\n      ingestionRunId: options?.ingestionRunId ?? null,\n      rawPayload: enriched.rawPayload,\n      lastSeenAt: now,\n      metricsUpdatedAt: now,\n      updatedAt: now,\n    };\n\n    const [existing] = await db\n      .select({ id: discoveredContentTable.id, status: discoveredContentTable.status })\n      .from(discoveredContentTable)\n      .where(\n        and(\n          eq(discoveredContentTable.platform, enriched.platform),\n          eq(discoveredContentTable.sourceVideoId, enriched.sourceVideoId),\n        ),\n      )\n      .limit(1);\n\n    if (existing?.status === \"published\") {\n      await db\n        .update(discoveredContentTable)\n        .set({\n          viewCount: values.viewCount,\n          likeCount: values.likeCount,\n          commentCount: values.commentCount,\n          shareCount: values.shareCount,\n          engagementRate: values.engagementRate,\n          viralScore: values.viralScore,\n          trendingScore: values.trendingScore,\n          lastSeenAt: now,\n          metricsUpdatedAt: now,\n          updatedAt: now,\n          rawPayload: values.rawPayload,\n        })\n        .where(eq(discoveredContentTable.id, existing.id));\n      updated++;\n      continue;\n    }\n\n    if (existing) {\n      await db\n        .update(discoveredContentTable)\n        .set(values)\n        .where(eq(discoveredContentTable.id, existing.id));\n      updated++;\n    } else {\n      await db.insert(discoveredContentTable).values({ ...values, firstSeenAt: now });\n      inserted++;\n    }\n  }\n\n  return { inserted, updated, skippedDuplicate, rejected };\n}\n\nexport async function queryDiscoveredContent(filters: ContentDiscoveryFilters) {\n  const limit = Math.min(100, Math.max(1, filters.limit ?? 25));\n  const offset = Math.max(0, filters.offset ?? 0);\n  const conditions = [];\n\n  if (filters.platform) conditions.push(eq(discoveredContentTable.platform, filters.platform));\n  if (filters.status) conditions.push(eq(discoveredContentTable.status, filters.status));\n  if (filters.niche) conditions.push(eq(discoveredContentTable.niche, filters.niche));\n  if (filters.creator) {\n    conditions.push(\n      sql`lower(${discoveredContentTable.creatorUsername}) = lower(${filters.creator.replace(/^@/, \"\")})`,\n    );\n  }\n  if (filters.audioId) conditions.push(eq(discoveredContentTable.audioId, filters.audioId));\n  if (filters.hashtag) {\n    conditions.push(\n      sql`${discoveredContentTable.hashtags} @> ${JSON.stringify([filters.hashtag.replace(/^#/, \"\").toLowerCase()])}::jsonb`,\n    );\n  }\n  if (filters.minViralScore != null) {\n    conditions.push(gte(discoveredContentTable.viralScore, filters.minViralScore));\n  }\n  if (filters.minViews != null) {\n    conditions.push(gte(discoveredContentTable.viewCount, filters.minViews));\n  }\n  if (filters.trendingOnly) {\n    conditions.push(gte(discoveredContentTable.trendingScore, 60));\n  }\n  if (filters.dateFrom) {\n    conditions.push(gte(discoveredContentTable.publishedAt, new Date(filters.dateFrom)));\n  }\n  if (filters.dateTo) {\n    conditions.push(lte(discoveredContentTable.publishedAt, new Date(filters.dateTo)));\n  }\n\n  const whereClause = conditions.length > 0 ? and(...conditions) : undefined;\n  const sort = filters.sort ?? \"viral_score\";\n  const order =\n    sort === \"trending_score\"\n      ? desc(discoveredContentTable.trendingScore)\n      : sort === \"view_count\"\n        ? desc(discoveredContentTable.viewCount)\n        : sort === \"published_at\"\n          ? desc(discoveredContentTable.publishedAt)\n          : sort === \"last_seen_at\"\n            ? desc(discoveredContentTable.lastSeenAt)\n            : desc(discoveredContentTable.viralScore);\n\n  const rows = await db\n    .select()\n    .from(discoveredContentTable)\n    .where(whereClause)\n    .orderBy(order, asc(discoveredContentTable.id))\n    .limit(limit)\n    .offset(offset);\n\n  const [{ count }] = await db\n    .select({ count: sql<number>`count(*)::int` })\n    .from(discoveredContentTable)\n    .where(whereClause);\n\n  return { rows, total: count ?? 0, limit, offset };\n}\n\nexport async function getDiscoveredContentById(id: number) {\n  const [row] = await db\n    .select()\n    .from(discoveredContentTable)\n    .where(eq(discoveredContentTable.id, id))\n    .limit(1);\n  return row ?? null;\n}\n\nexport async function markDiscoveredPublished(id: number, publishedVideoId: number) {\n  await db\n    .update(discoveredContentTable)\n    .set({\n      status: \"published\",\n      publishedVideoId,\n      updatedAt: new Date(),\n    })\n    .where(eq(discoveredContentTable.id, id));\n}\n", "import { db, discoveredContentTable, userVideosTable } from \"@workspace/db\";\nimport { and, eq, isNull, desc, inArray } from \"drizzle-orm\";\nimport { buildTikTokEmbedUrl, buildTikTokWatchUrl } from \"./tiktokUrls\";\nimport { buildInstagramReelEmbedUrl, buildInstagramReelWatchUrl } from \"./instagramProvider\";\nimport { isInstagramCdnMp4 } from \"./instagramPlayback\";\nimport { isTikTokCdnUrl } from \"../playback/tiktokPlayback.js\";\nimport { persistCatalogCandidates } from \"./persistCatalogVideo\";\nimport { markDiscoveredPublished } from \"../contentDiscovery/store\";\nimport { enrichWithContentGatekeeper } from \"../contentDiscovery/normalize\";\nimport { minRelevanceThreshold } from \"./relevanceScorer\";\nimport type { CatalogVideoCandidate } from \"./types\";\nimport { logger } from \"../logger\";\n\nfunction readInt(name: string, fallback: number): number {\n  const raw = parseInt(process.env[name] ?? String(fallback), 10);\n  return Number.isFinite(raw) ? raw : fallback;\n}\n\nfunction mapDiscoveredRowToCandidate(\n  row: typeof discoveredContentTable.$inferSelect,\n  relevanceScore: number,\n): CatalogVideoCandidate | null {\n  if (row.status !== \"eligible\") return null;\n\n  const title = (row.caption?.trim() || `${row.platform} ${row.sourceVideoId}`).slice(0, 200);\n  const description = (row.caption?.trim() || title).slice(0, 1000);\n  const handle = row.creatorUsername\n    ? row.creatorUsername.startsWith(\"@\")\n      ? row.creatorUsername\n      : `@${row.creatorUsername}`\n    : row.platform === \"tiktok\"\n      ? \"@tiktok\"\n      : \"@instagram\";\n  const creator = handle.replace(/^@/, \"\") || row.platform;\n\n  if (row.platform === \"tiktok\") {\n    const storedUrl = row.videoUrl?.trim() || \"\";\n    const cdnUrl = isTikTokCdnUrl(storedUrl) ? storedUrl : null;\n    if (!cdnUrl) return null;\n    const watchUrl = storedUrl.includes(\"tiktok.com\")\n      ? storedUrl\n      : buildTikTokWatchUrl(row.sourceVideoId, handle);\n    return {\n      sourcePlatform: \"tiktok\",\n      sourceVideoId: row.sourceVideoId,\n      title,\n      description,\n      videoUrl: cdnUrl,\n      embedUrl: row.embedUrl || buildTikTokEmbedUrl(row.sourceVideoId),\n      thumbnailUrl: row.thumbnailUrl,\n      creator,\n      creatorHandle: handle,\n      publishedAt: row.publishedAt,\n      tags: row.hashtags ?? [],\n      category: (row.category as \"hooks\" | \"shots\" | \"both\") ?? \"both\",\n      viewCount: row.viewCount,\n      externalLikeCount: row.likeCount,\n      relevanceScore,\n      ingestionSource: row.discoverySource,\n      rightsMetadata: {\n        playbackMethod: \"native\",\n        platform: \"tiktok\",\n        attribution: creator,\n        embeddable: true,\n        license: \"platform_terms\",\n        cdnFallbackUrl: cdnUrl,\n        watchUrl,\n      },\n      species: null,\n      locationState: null,\n      weightSize: null,\n    };\n  }\n\n  if (row.platform === \"instagram\") {\n    const shortcode = row.sourceVideoId;\n    const storedUrl = row.videoUrl?.trim() || \"\";\n    const cdnUrl = isInstagramCdnMp4(storedUrl) ? storedUrl : null;\n    if (!cdnUrl) return null;\n\n    const watchUrl = buildInstagramReelWatchUrl(shortcode);\n    const embedUrl = row.embedUrl || buildInstagramReelEmbedUrl(shortcode);\n    return {\n      sourcePlatform: \"instagram\",\n      sourceVideoId: shortcode,\n      title,\n      description,\n      videoUrl: cdnUrl,\n      embedUrl,\n      thumbnailUrl: row.thumbnailUrl,\n      creator,\n      creatorHandle: handle,\n      publishedAt: row.publishedAt,\n      tags: row.hashtags ?? [],\n      category: (row.category as \"hooks\" | \"shots\" | \"both\") ?? \"both\",\n      viewCount: row.viewCount,\n      externalLikeCount: row.likeCount,\n      relevanceScore,\n      ingestionSource: row.discoverySource,\n      rightsMetadata: {\n        playbackMethod: \"native\",\n        platform: \"instagram\",\n        attribution: creator,\n        embeddable: true,\n        license: \"platform_terms\",\n        cdnFallbackUrl: cdnUrl,\n        watchUrl,\n        confirmedVideo: true,\n        durationSec: row.durationSec ?? null,\n      },\n      species: null,\n      locationState: null,\n      weightSize: null,\n    };\n  }\n\n  return null;\n}\n\nexport async function promoteEligibleDiscoveredContent(options?: {\n  limit?: number;\n  minViralScore?: number;\n  minRelevanceScore?: number;\n}): Promise<{ promoted: number; skippedDuplicate: number; failed: number; rejectedRelevance: number }> {\n  const limit = readInt(\"CONTENT_DISCOVERY_PROMOTE_LIMIT\", options?.limit ?? 20);\n  const minViral = options?.minViralScore ?? readInt(\"CONTENT_DISCOVERY_PROMOTE_MIN_VIRAL_SCORE\", 30);\n  const minRelevance = options?.minRelevanceScore ?? minRelevanceThreshold();\n\n  const rows = await db\n    .select()\n    .from(discoveredContentTable)\n    .where(\n      and(\n        eq(discoveredContentTable.status, \"eligible\"),\n        isNull(discoveredContentTable.publishedVideoId),\n      ),\n    )\n    .orderBy(desc(discoveredContentTable.viralScore))\n    .limit(limit * 2);\n\n  const candidates: CatalogVideoCandidate[] = [];\n  const rowByKey = new Map<string, typeof discoveredContentTable.$inferSelect>();\n  let rejectedRelevance = 0;\n\n  for (const row of rows) {\n    if ((row.viralScore ?? 0) < minViral) continue;\n\n    // Re-run gatekeeper at promotion time \u2014 catches drift and stricter rules\n    const enriched = enrichWithContentGatekeeper({\n      platform: row.platform as \"tiktok\" | \"instagram\",\n      sourceVideoId: row.sourceVideoId,\n      creatorUsername: row.creatorUsername,\n      creatorProfileUrl: row.creatorProfileUrl,\n      caption: row.caption,\n      hashtags: row.hashtags ?? [],\n      audioTitle: row.audioTitle,\n      audioArtist: row.audioArtist,\n      audioId: row.audioId,\n      viewCount: row.viewCount,\n      likeCount: row.likeCount,\n      commentCount: row.commentCount,\n      shareCount: row.shareCount,\n      publishedAt: row.publishedAt,\n      videoUrl: row.videoUrl,\n      thumbnailUrl: row.thumbnailUrl,\n      embedUrl: row.embedUrl,\n      durationSec: row.durationSec,\n      niche: row.niche,\n      category: row.category as \"hooks\" | \"shots\" | \"both\" | null,\n      discoverySource: row.discoverySource,\n      discoveryQuery: row.discoveryQuery,\n      rawPayload: row.rawPayload ?? {},\n    });\n\n    if (!enriched.eligible || enriched.relevanceScore < minRelevance) {\n      rejectedRelevance++;\n      continue;\n    }\n\n    const candidate = mapDiscoveredRowToCandidate(row, enriched.relevanceScore);\n    if (!candidate) continue;\n    candidates.push(candidate);\n    rowByKey.set(`${row.platform}:${row.sourceVideoId}`, row);\n\n    if (candidates.length >= limit) break;\n  }\n\n  if (candidates.length === 0) {\n    return { promoted: 0, skippedDuplicate: 0, failed: 0, rejectedRelevance };\n  }\n\n  const persisted = await persistCatalogCandidates(candidates);\n  let promoted = 0;\n  let failed = 0;\n\n  const platformKeys = candidates.map((c) => c.sourcePlatform);\n  const videoKeys = candidates.map((c) => c.sourceVideoId);\n  const videoRows =\n    candidates.length === 0\n      ? []\n      : await db\n          .select({\n            id: userVideosTable.id,\n            sourcePlatform: userVideosTable.sourcePlatform,\n            sourceVideoId: userVideosTable.sourceVideoId,\n          })\n          .from(userVideosTable)\n          .where(\n            and(\n              inArray(userVideosTable.sourcePlatform, [...new Set(platformKeys)]),\n              inArray(userVideosTable.sourceVideoId, [...new Set(videoKeys)]),\n            ),\n          );\n\n  const videoIdByKey = new Map<string, number>();\n  for (const row of videoRows) {\n    if (row.sourcePlatform && row.sourceVideoId) {\n      videoIdByKey.set(`${row.sourcePlatform}:${row.sourceVideoId}`, row.id);\n    }\n  }\n\n  for (const candidate of candidates) {\n    const discoveredRow = rowByKey.get(`${candidate.sourcePlatform}:${candidate.sourceVideoId}`);\n    if (!discoveredRow) {\n      failed++;\n      continue;\n    }\n    const videoId = videoIdByKey.get(`${candidate.sourcePlatform}:${candidate.sourceVideoId}`);\n    if (!videoId) {\n      failed++;\n      continue;\n    }\n    try {\n      await markDiscoveredPublished(discoveredRow.id, videoId);\n      promoted++;\n    } catch (err) {\n      failed++;\n      logger.warn({ err, discoveredId: discoveredRow.id }, \"Failed to mark discovered content published\");\n    }\n  }\n\n  return {\n    promoted,\n    skippedDuplicate: persisted.skippedDuplicate,\n    failed,\n    rejectedRelevance,\n  };\n}\n", "import { db, discoveryTargetsTable, type DiscoveryTarget } from \"@workspace/db\";\nimport { and, asc, eq, sql } from \"drizzle-orm\";\nimport { getValidatedCreatorsForPlatform } from \"../ingestion/creatorValidation\";\n\n/**\n * Default discovery targets \u2014 outdoor-focused only.\n * No trending/music/generic feeds (too much off-topic noise).\n * Profile targets use pre-validated creators; search targets use specific outdoor queries.\n */\nexport const DEFAULT_DISCOVERY_TARGETS: Array<{\n  platform: string;\n  targetType: string;\n  targetValue: string;\n  label?: string;\n  niche?: string;\n  enabled?: boolean;\n}> = [\n  // TikTok search \u2014 specific outdoor queries (high precision)\n  { platform: \"tiktok\", targetType: \"search\", targetValue: \"bowhunting harvest buck\", niche: \"hunting\", enabled: true },\n  { platform: \"tiktok\", targetType: \"search\", targetValue: \"bass fishing tournament catch\", niche: \"fishing\", enabled: true },\n  { platform: \"tiktok\", targetType: \"search\", targetValue: \"whitetail deer hunting\", niche: \"hunting\", enabled: true },\n  { platform: \"tiktok\", targetType: \"search\", targetValue: \"fly fishing trout river\", niche: \"fishing\", enabled: true },\n  { platform: \"tiktok\", targetType: \"search\", targetValue: \"duck hunting waterfowl blind\", niche: \"hunting\", enabled: true },\n  { platform: \"tiktok\", targetType: \"search\", targetValue: \"offshore fishing tuna marlin\", niche: \"fishing\", enabled: true },\n  { platform: \"tiktok\", targetType: \"search\", targetValue: \"elk hunting public land\", niche: \"hunting\", enabled: true },\n  { platform: \"tiktok\", targetType: \"search\", targetValue: \"kayak fishing redfish\", niche: \"fishing\", enabled: true },\n  { platform: \"tiktok\", targetType: \"search\", targetValue: \"camping wilderness backpacking\", niche: \"camping\", enabled: true },\n  // TikTok profiles \u2014 pre-validated outdoor creators\n  ...getValidatedCreatorsForPlatform(\"tiktok\").map((c) => ({\n    platform: \"tiktok\" as const,\n    targetType: \"profile\" as const,\n    targetValue: c.handle,\n    label: c.label,\n    niche: c.niche,\n    enabled: true,\n  })),\n  // Instagram profiles \u2014 pre-validated (requires CONTENT_DISCOVERY_INSTAGRAM_ENABLED=true)\n  ...getValidatedCreatorsForPlatform(\"instagram\").map((c) => ({\n    platform: \"instagram\" as const,\n    targetType: \"profile\" as const,\n    targetValue: c.handle,\n    label: c.label,\n    niche: c.niche,\n    enabled: true,\n  })),\n  // Instagram hashtags \u2014 outdoor-specific only (disabled by default; needs Ultra plan)\n  { platform: \"instagram\", targetType: \"hashtag\", targetValue: \"bowhunting\", niche: \"hunting\", enabled: false },\n  { platform: \"instagram\", targetType: \"hashtag\", targetValue: \"bassfishing\", niche: \"fishing\", enabled: false },\n  { platform: \"instagram\", targetType: \"hashtag\", targetValue: \"whitetail\", niche: \"hunting\", enabled: false },\n  { platform: \"instagram\", targetType: \"hashtag\", targetValue: \"flyfishing\", niche: \"fishing\", enabled: false },\n];\n\n/** Targets that should never be enabled \u2014 too noisy for outdoor-only platform. */\nexport const DISALLOWED_TARGET_TYPES = new Set([\n  \"trending\",\n  \"music\",\n]);\n\nexport function isDisallowedTarget(targetType: string): boolean {\n  return DISALLOWED_TARGET_TYPES.has(targetType);\n}\n\nexport async function ensureDefaultDiscoveryTargets(): Promise<number> {\n  let inserted = 0;\n  for (const target of DEFAULT_DISCOVERY_TARGETS) {\n    const result = await db\n      .insert(discoveryTargetsTable)\n      .values({\n        platform: target.platform,\n        targetType: target.targetType,\n        targetValue: target.targetValue,\n        label: target.label ?? null,\n        niche: target.niche ?? null,\n        enabled: target.enabled ?? true,\n      })\n      .onConflictDoNothing({\n        target: [\n          discoveryTargetsTable.platform,\n          discoveryTargetsTable.targetType,\n          discoveryTargetsTable.targetValue,\n        ],\n      })\n      .returning({ id: discoveryTargetsTable.id });\n    if (result.length > 0) inserted++;\n  }\n\n  // Disable any previously-seeded noisy targets (trending, music)\n  await db\n    .update(discoveryTargetsTable)\n    .set({ enabled: false })\n    .where(\n      sql`${discoveryTargetsTable.targetType} IN ('trending', 'music')`,\n    );\n\n  return inserted;\n}\n\nexport async function listEnabledDiscoveryTargets(limit = 50): Promise<DiscoveryTarget[]> {\n  return db\n    .select()\n    .from(discoveryTargetsTable)\n    .where(\n      and(\n        eq(discoveryTargetsTable.enabled, true),\n        sql`${discoveryTargetsTable.targetType} NOT IN ('trending', 'music')`,\n      ),\n    )\n    .orderBy(\n      sql`${discoveryTargetsTable.lastCollectedAt} ASC NULLS FIRST`,\n      asc(discoveryTargetsTable.id),\n    )\n    .limit(limit);\n}\n\nexport async function updateDiscoveryTargetCursor(\n  id: number,\n  cursorToken: string | null,\n): Promise<void> {\n  await db\n    .update(discoveryTargetsTable)\n    .set({\n      cursorToken,\n      lastCollectedAt: new Date(),\n    })\n    .where(eq(discoveryTargetsTable.id, id));\n}\n\nexport async function listDiscoveryTargets(filters?: {\n  platform?: string;\n  enabled?: boolean;\n}) {\n  const conditions = [];\n  if (filters?.platform) conditions.push(eq(discoveryTargetsTable.platform, filters.platform));\n  if (filters?.enabled != null) conditions.push(eq(discoveryTargetsTable.enabled, filters.enabled));\n\n  return db\n    .select()\n    .from(discoveryTargetsTable)\n    .where(conditions.length > 0 ? and(...conditions) : undefined)\n    .orderBy(asc(discoveryTargetsTable.platform), asc(discoveryTargetsTable.targetType));\n}\n\nexport async function upsertDiscoveryTarget(input: {\n  platform: string;\n  targetType: string;\n  targetValue: string;\n  label?: string | null;\n  niche?: string | null;\n  enabled?: boolean;\n}) {\n  if (isDisallowedTarget(input.targetType)) {\n    throw new Error(`Target type \"${input.targetType}\" is not allowed \u2014 use profile or search targets for outdoor content`);\n  }\n\n  const [row] = await db\n    .insert(discoveryTargetsTable)\n    .values({\n      platform: input.platform,\n      targetType: input.targetType,\n      targetValue: input.targetValue,\n      label: input.label ?? null,\n      niche: input.niche ?? null,\n      enabled: input.enabled ?? true,\n    })\n    .onConflictDoUpdate({\n      target: [\n        discoveryTargetsTable.platform,\n        discoveryTargetsTable.targetType,\n        discoveryTargetsTable.targetValue,\n      ],\n      set: {\n        label: input.label ?? null,\n        niche: input.niche ?? null,\n        enabled: input.enabled ?? true,\n      },\n    })\n    .returning();\n  return row ?? null;\n}\n\nexport async function setDiscoveryTargetEnabled(id: number, enabled: boolean): Promise<void> {\n  await db.update(discoveryTargetsTable).set({ enabled }).where(eq(discoveryTargetsTable.id, id));\n}\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { requireModerator } from \"../lib/authMiddleware\";\nimport { runContentDiscoveryCycle, getContentDiscoveryStatus } from \"../lib/contentDiscovery/pipeline\";\nimport { buildContentInsights } from \"../lib/contentDiscovery/scoring\";\nimport {\n  getDiscoveredContentById,\n  queryDiscoveredContent,\n} from \"../lib/contentDiscovery/store\";\nimport {\n  ensureDefaultDiscoveryTargets,\n  listDiscoveryTargets,\n  setDiscoveryTargetEnabled,\n  upsertDiscoveryTarget,\n  isDisallowedTarget,\n} from \"../lib/contentDiscovery/targets\";\nimport {\n  validateCreatorAccount,\n  VALIDATED_OUTDOOR_CREATORS,\n} from \"../lib/ingestion/creatorValidation\";\nimport type { ContentDiscoveryFilters, ContentPlatform } from \"../lib/contentDiscovery/types\";\n\nconst router: IRouter = Router();\n\nfunction parseFilters(req: Request): ContentDiscoveryFilters {\n  const q = req.query;\n  return {\n    platform: q.platform === \"tiktok\" || q.platform === \"instagram\" ? q.platform : undefined,\n    creator: typeof q.creator === \"string\" ? q.creator : undefined,\n    hashtag: typeof q.hashtag === \"string\" ? q.hashtag : undefined,\n    audioId: typeof q.audioId === \"string\" ? q.audioId : undefined,\n    status: typeof q.status === \"string\" ? q.status : undefined,\n    niche: typeof q.niche === \"string\" ? q.niche : undefined,\n    minViralScore: q.minViralScore ? Number(q.minViralScore) : undefined,\n    minViews: q.minViews ? Number(q.minViews) : undefined,\n    trendingOnly: q.trendingOnly === \"true\" || q.trendingOnly === \"1\",\n    dateFrom: typeof q.dateFrom === \"string\" ? q.dateFrom : undefined,\n    dateTo: typeof q.dateTo === \"string\" ? q.dateTo : undefined,\n    limit: q.limit ? Number(q.limit) : 25,\n    offset: q.offset ? Number(q.offset) : 0,\n    sort:\n      q.sort === \"trending_score\" ||\n      q.sort === \"view_count\" ||\n      q.sort === \"published_at\" ||\n      q.sort === \"last_seen_at\"\n        ? q.sort\n        : \"viral_score\",\n  };\n}\n\nrouter.get(\"/admin/content-discovery/status\", requireModerator, async (_req, res: Response) => {\n  try {\n    const status = await getContentDiscoveryStatus();\n    res.json(status);\n  } catch (err) {\n    res.status(500).json({ error: err instanceof Error ? err.message : \"Status failed\" });\n  }\n});\n\nrouter.post(\"/admin/content-discovery/run\", requireModerator, async (req: Request, res: Response) => {\n  try {\n    const result = await runContentDiscoveryCycle();\n    res.json({ ok: true, result });\n  } catch (err) {\n    req.log?.error({ err }, \"Manual content discovery run failed\");\n    res.status(500).json({ error: err instanceof Error ? err.message : \"Run failed\" });\n  }\n});\n\nrouter.get(\"/admin/content-discovery/content\", requireModerator, async (req: Request, res: Response) => {\n  try {\n    const filters = parseFilters(req);\n    const result = await queryDiscoveredContent(filters);\n    res.json(result);\n  } catch (err) {\n    res.status(500).json({ error: err instanceof Error ? err.message : \"Query failed\" });\n  }\n});\n\nrouter.get(\"/admin/content-discovery/content/:id\", requireModerator, async (req: Request, res: Response) => {\n  const id = Number(req.params.id);\n  if (!Number.isFinite(id)) {\n    res.status(400).json({ error: \"Invalid id\" });\n    return;\n  }\n  const row = await getDiscoveredContentById(id);\n  if (!row) {\n    res.status(404).json({ error: \"Not found\" });\n    return;\n  }\n  res.json(row);\n});\n\nrouter.get(\"/admin/content-discovery/insights\", requireModerator, async (req: Request, res: Response) => {\n  try {\n    const filters = parseFilters(req);\n    filters.limit = Math.min(200, filters.limit ?? 100);\n    const { rows } = await queryDiscoveredContent(filters);\n    const insights = buildContentInsights(\n      rows.map((row) => ({\n        platform: row.platform as ContentPlatform,\n        sourceVideoId: row.sourceVideoId,\n        creatorUsername: row.creatorUsername,\n        creatorProfileUrl: row.creatorProfileUrl,\n        caption: row.caption,\n        hashtags: row.hashtags ?? [],\n        audioTitle: row.audioTitle,\n        audioArtist: row.audioArtist,\n        audioId: row.audioId,\n        viewCount: row.viewCount,\n        likeCount: row.likeCount,\n        commentCount: row.commentCount,\n        shareCount: row.shareCount,\n        publishedAt: row.publishedAt,\n        videoUrl: row.videoUrl,\n        thumbnailUrl: row.thumbnailUrl,\n        embedUrl: row.embedUrl,\n        durationSec: row.durationSec,\n        niche: row.niche,\n        category: row.category,\n        discoverySource: row.discoverySource,\n        discoveryQuery: row.discoveryQuery,\n        rawPayload: row.rawPayload ?? {},\n      })),\n    );\n    res.json(insights);\n  } catch (err) {\n    res.status(500).json({ error: err instanceof Error ? err.message : \"Insights failed\" });\n  }\n});\n\nrouter.get(\"/admin/content-discovery/targets\", requireModerator, async (req: Request, res: Response) => {\n  const platform = typeof req.query.platform === \"string\" ? req.query.platform : undefined;\n  const enabled =\n    req.query.enabled === \"true\" ? true : req.query.enabled === \"false\" ? false : undefined;\n  const rows = await listDiscoveryTargets({ platform, enabled });\n  res.json({ rows });\n});\n\nrouter.post(\"/admin/content-discovery/targets\", requireModerator, async (req: Request, res: Response) => {\n  const body = (req.body ?? {}) as {\n    platform?: string;\n    targetType?: string;\n    targetValue?: string;\n    label?: string;\n    niche?: string;\n    enabled?: boolean;\n  };\n  if (!body.platform || !body.targetType || !body.targetValue) {\n    res.status(400).json({ error: \"platform, targetType, and targetValue are required\" });\n    return;\n  }\n  if (isDisallowedTarget(body.targetType)) {\n    res.status(400).json({\n      error: `Target type \"${body.targetType}\" is not allowed. Use profile or search for outdoor content.`,\n    });\n    return;\n  }\n  if (body.targetType === \"profile\") {\n    const validation = validateCreatorAccount({\n      platform: body.platform,\n      handle: body.targetValue,\n      niche: body.niche,\n    });\n    if (!validation.valid && !validation.trusted) {\n      res.status(400).json({\n        error: `Creator validation failed: ${validation.reason}`,\n        validation,\n      });\n      return;\n    }\n  }\n  const row = await upsertDiscoveryTarget({\n    platform: body.platform,\n    targetType: body.targetType,\n    targetValue: body.targetValue,\n    label: body.label,\n    niche: body.niche,\n    enabled: body.enabled,\n  });\n  res.json({ ok: true, row });\n});\n\nrouter.post(\"/admin/content-discovery/targets/seed\", requireModerator, async (_req, res: Response) => {\n  const inserted = await ensureDefaultDiscoveryTargets();\n  res.json({ ok: true, inserted });\n});\n\nrouter.get(\"/admin/content-discovery/creators\", requireModerator, async (_req, res: Response) => {\n  res.json({\n    validatedCreators: VALIDATED_OUTDOOR_CREATORS,\n    count: VALIDATED_OUTDOOR_CREATORS.length,\n  });\n});\n\nrouter.post(\"/admin/content-discovery/validate-creator\", requireModerator, async (req: Request, res: Response) => {\n  const body = (req.body ?? {}) as {\n    platform?: string;\n    handle?: string;\n    bio?: string;\n    sampleCaptions?: string[];\n    niche?: string;\n  };\n  if (!body.platform || !body.handle) {\n    res.status(400).json({ error: \"platform and handle are required\" });\n    return;\n  }\n  const validation = validateCreatorAccount({\n    platform: body.platform,\n    handle: body.handle,\n    bio: body.bio,\n    sampleCaptions: body.sampleCaptions,\n    niche: body.niche,\n  });\n  res.json(validation);\n});\n\nrouter.patch(\"/admin/content-discovery/targets/:id\", requireModerator, async (req: Request, res: Response) => {\n  const id = Number(req.params.id);\n  if (!Number.isFinite(id)) {\n    res.status(400).json({ error: \"Invalid id\" });\n    return;\n  }\n  const body = (req.body ?? {}) as { enabled?: boolean };\n  if (typeof body.enabled !== \"boolean\") {\n    res.status(400).json({ error: \"enabled boolean required\" });\n    return;\n  }\n  await setDiscoveryTargetEnabled(id, body.enabled);\n  res.json({ ok: true });\n});\n\nexport default router;\n", "/**\n * TikTok Video Collection Admin API\n * Manual and automated triggers for hunting & fishing content collection\n */\n\nimport { Router, type IRouter, type Request, type Response } from \"express\";\nimport { requireModerator } from \"../lib/authMiddleware.js\";\nimport {\n  runComprehensiveCollection,\n  collectByKeywords,\n  collectFromCreators,\n  HUNTING_KEYWORDS,\n  FISHING_KEYWORDS,\n  OUTDOOR_KEYWORDS,\n  FEATURED_CREATORS,\n} from \"../lib/ingestion/huntingFishingTikTokCollector.js\";\nimport {\n  searchTikTokVideos,\n  isTikTokApi23Configured,\n} from \"../lib/ingestion/tiktokApi23Scraper.js\";\nimport { logger } from \"../lib/logger.js\";\n\nconst router: IRouter = Router();\n\n/**\n * POST /admin/tiktok/collect/comprehensive\n * Run full comprehensive collection (keywords + creators)\n */\nrouter.post(\"/admin/tiktok/collect/comprehensive\", requireModerator, async (req: Request, res: Response) => {\n  if (!isTikTokApi23Configured()) {\n    res.status(503).json({\n      error: \"TikTok API23 not configured\",\n      message: \"RAPIDAPI_KEY is required\",\n    });\n    return;\n  }\n\n  try {\n    const body = (req.body ?? {}) as {\n      includeHunting?: boolean;\n      includeFishing?: boolean;\n      includeOutdoor?: boolean;\n      includeCreators?: boolean;\n      keywordsPerCategory?: number;\n      videosPerKeyword?: number;\n      videosPerCreator?: number;\n    };\n\n    logger.info({ options: body }, \"Starting comprehensive TikTok collection\");\n\n    const result = await runComprehensiveCollection(body);\n\n    res.json({\n      ok: true,\n      message: \"Comprehensive collection completed\",\n      persisted: {\n        inserted: result.persisted.inserted,\n        skippedDuplicate: result.persisted.skippedDuplicate,\n        upgraded: result.persisted.upgraded,\n      },\n      stats: result.stats,\n    });\n  } catch (err) {\n    logger.error({ err }, \"Comprehensive TikTok collection failed\");\n    res.status(500).json({\n      error: err instanceof Error ? err.message : \"Collection failed\",\n    });\n  }\n});\n\n/**\n * POST /admin/tiktok/collect/keywords\n * Collect videos by specific keywords\n */\nrouter.post(\"/admin/tiktok/collect/keywords\", requireModerator, async (req: Request, res: Response) => {\n  if (!isTikTokApi23Configured()) {\n    res.status(503).json({\n      error: \"TikTok API23 not configured\",\n      message: \"RAPIDAPI_KEY is required\",\n    });\n    return;\n  }\n\n  try {\n    const body = (req.body ?? {}) as {\n      keywords?: string[];\n      videosPerKeyword?: number;\n      category?: \"hunting\" | \"fishing\" | \"outdoor\";\n    };\n\n    let keywords = body.keywords ?? [];\n\n    // Use predefined categories if specified\n    if (body.category === \"hunting\") {\n      keywords = HUNTING_KEYWORDS.slice(0, 5);\n    } else if (body.category === \"fishing\") {\n      keywords = FISHING_KEYWORDS.slice(0, 5);\n    } else if (body.category === \"outdoor\") {\n      keywords = OUTDOOR_KEYWORDS.slice(0, 3);\n    }\n\n    if (keywords.length === 0) {\n      res.status(400).json({\n        error: \"No keywords provided\",\n        message: \"Provide keywords array or category (hunting/fishing/outdoor)\",\n      });\n      return;\n    }\n\n    logger.info({ keywords, category: body.category }, \"Starting keyword collection\");\n\n    const { candidates, stats } = await collectByKeywords(keywords, {\n      videosPerKeyword: body.videosPerKeyword ?? 15,\n      delayMs: 3000,\n    });\n\n    // Import and persist\n    const { persistCatalogCandidates } = await import(\"../lib/ingestion/persistCatalogVideo.js\");\n    const persisted = await persistCatalogCandidates(candidates);\n\n    res.json({\n      ok: true,\n      message: \"Keyword collection completed\",\n      keywords,\n      persisted: {\n        inserted: persisted.inserted,\n        skippedDuplicate: persisted.skippedDuplicate,\n      },\n      stats,\n    });\n  } catch (err) {\n    logger.error({ err }, \"Keyword collection failed\");\n    res.status(500).json({\n      error: err instanceof Error ? err.message : \"Collection failed\",\n    });\n  }\n});\n\n/**\n * POST /admin/tiktok/collect/creators\n * Collect videos from specific TikTok creators\n */\nrouter.post(\"/admin/tiktok/collect/creators\", requireModerator, async (req: Request, res: Response) => {\n  if (!isTikTokApi23Configured()) {\n    res.status(503).json({\n      error: \"TikTok API23 not configured\",\n      message: \"RAPIDAPI_KEY is required\",\n    });\n    return;\n  }\n\n  try {\n    const body = (req.body ?? {}) as {\n      usernames?: string[];\n      useFeatured?: boolean;\n      videosPerCreator?: number;\n    };\n\n    let usernames = body.usernames ?? [];\n\n    if (body.useFeatured || usernames.length === 0) {\n      usernames = FEATURED_CREATORS;\n    }\n\n    logger.info({ usernames }, \"Starting creator collection\");\n\n    const { candidates, stats } = await collectFromCreators(usernames, {\n      videosPerCreator: body.videosPerCreator ?? 20,\n      delayMs: 5000,\n    });\n\n    const { persistCatalogCandidates } = await import(\"../lib/ingestion/persistCatalogVideo.js\");\n    const persisted = await persistCatalogCandidates(candidates);\n\n    res.json({\n      ok: true,\n      message: \"Creator collection completed\",\n      creators: usernames,\n      persisted: {\n        inserted: persisted.inserted,\n        skippedDuplicate: persisted.skippedDuplicate,\n      },\n      stats,\n    });\n  } catch (err) {\n    logger.error({ err }, \"Creator collection failed\");\n    res.status(500).json({\n      error: err instanceof Error ? err.message : \"Collection failed\",\n    });\n  }\n});\n\n/**\n * POST /admin/tiktok/search\n * Test search endpoint (for debugging/exploration)\n */\nrouter.post(\"/admin/tiktok/search\", requireModerator, async (req: Request, res: Response) => {\n  if (!isTikTokApi23Configured()) {\n    res.status(503).json({\n      error: \"TikTok API23 not configured\",\n      message: \"RAPIDAPI_KEY is required\",\n    });\n    return;\n  }\n\n  try {\n    const body = (req.body ?? {}) as {\n      keyword: string;\n      limit?: number;\n    };\n\n    if (!body.keyword?.trim()) {\n      res.status(400).json({\n        error: \"Keyword required\",\n      });\n      return;\n    }\n\n    const videos = await searchTikTokVideos(body.keyword, {\n      limit: body.limit ?? 10,\n    });\n\n    res.json({\n      ok: true,\n      keyword: body.keyword,\n      found: videos.length,\n      videos: videos.map((v) => ({\n        id: v.sourceVideoId,\n        title: v.title,\n        creator: v.creatorHandle,\n        thumbnail: v.thumbnailUrl,\n        views: v.viewCount,\n        likes: v.likeCount,\n        duration: v.durationSeconds,\n        isVideo: v.isVideo,\n        hasStaticImage: v.hasStaticImage,\n        shareUrl: v.shareUrl,\n      })),\n    });\n  } catch (err) {\n    logger.error({ err }, \"TikTok search failed\");\n    res.status(500).json({\n      error: err instanceof Error ? err.message : \"Search failed\",\n    });\n  }\n});\n\n/**\n * GET /admin/tiktok/status\n * Check TikTok API23 configuration and status\n */\nrouter.get(\"/admin/tiktok/status\", requireModerator, async (_req: Request, res: Response) => {\n  const configured = isTikTokApi23Configured();\n\n  res.json({\n    ok: configured,\n    configured,\n    api: \"TikTok API23 (tiktok-api23.p.rapidapi.com)\",\n    features: {\n      keywordSearch: configured,\n      userPosts: configured,\n      videoValidation: true,\n      imageRejection: true,\n    },\n    collections: {\n      huntingKeywords: HUNTING_KEYWORDS.length,\n      fishingKeywords: FISHING_KEYWORDS.length,\n      outdoorKeywords: OUTDOOR_KEYWORDS.length,\n      featuredCreators: FEATURED_CREATORS.length,\n    },\n  });\n});\n\nexport default router;\n", "/**\n * TikTok video discovery via RapidAPI TikTok API23\n * Replaces older TikTok scraper with modern, video-validated collection\n */\n\nimport { logger } from \"../logger.js\";\nimport {\n  fetchTikTokSearchVideos,\n  fetchTikTokSearchGeneral,\n  fetchTikTokUserOldestPosts,\n  fetchTikTokUserPosts,\n  fetchTikTokUserInfo,\n  extractSecUidFromUserInfo,\n} from \"../rapidapi/tiktokApi23.js\";\n\nexport class TikTokApi23Error extends Error {\n  constructor(\n    message: string,\n    readonly statusCode: number = 502,\n  ) {\n    super(message);\n    this.name = \"TikTokApi23Error\";\n  }\n}\n\nexport interface ScrapedTikTokApi23Video {\n  sourceVideoId: string;\n  shareUrl: string;\n  title: string;\n  description: string;\n  creator: string;\n  creatorHandle: string;\n  thumbnailUrl: string | null;\n  viewCount?: number;\n  likeCount?: number;\n  shareCount?: number;\n  commentCount?: number;\n  durationSeconds?: number;\n  /** Validation flags */\n  isVideo: boolean;\n  hasStaticImage: boolean;\n  mediaType?: string;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n  return value && typeof value === \"object\" ? (value as Record<string, unknown>) : null;\n}\n\nfunction pickString(...values: unknown[]): string | null {\n  for (const v of values) {\n    if (typeof v === \"string\" && v.trim()) return v.trim();\n  }\n  return null;\n}\n\nfunction pickNumber(...values: unknown[]): number | null {\n  for (const v of values) {\n    if (typeof v === \"number\" && !isNaN(v)) return v;\n    if (typeof v === \"string\") {\n      const n = parseInt(v, 10);\n      if (!isNaN(n)) return n;\n    }\n  }\n  return null;\n}\n\nfunction extractVideoId(node: Record<string, unknown>): string | null {\n  const direct = pickString(\n    node.id,\n    node.aweme_id,\n    node.video_id,\n    node.itemId,\n    node.videoId,\n  );\n  if (direct && /^\\d+$/.test(direct)) return direct;\n\n  const video = asRecord(node.video);\n  const nested = pickString(video?.id, video?.video_id);\n  if (nested && /^\\d+$/.test(nested)) return nested;\n\n  const shareUrl = pickString(\n    node.share_url,\n    node.shareUrl,\n    node.url,\n    node.webVideoUrl,\n    node.link,\n  );\n  if (shareUrl) {\n    const m = shareUrl.match(/\\/video\\/(\\d+)/);\n    if (m?.[1]) return m[1];\n  }\n\n  return null;\n}\n\nfunction extractThumbnail(node: Record<string, unknown>): string | null {\n  const video = asRecord(node.video);\n  const cover = asRecord(node.cover) ?? asRecord(video?.cover);\n  const urlList = cover?.url_list;\n  const firstFromList = Array.isArray(urlList) ? pickString(urlList[0]) : null;\n\n  return (\n    pickString(\n      node.cover,\n      node.coverUrl,\n      node.cover_image_url,\n      node.dynamic_cover,\n      node.dynamicCover,\n      firstFromList,\n      video?.cover,\n      video?.origin_cover,\n      video?.originCover,\n    ) ?? null\n  );\n}\n\n/**\n * Validate that this item is a playable video and not a static image/photo.\n * TikTok can contain image posts (slideshows) that should be rejected.\n */\nfunction validateIsVideo(node: Record<string, unknown>): {\n  isVideo: boolean;\n  hasStaticImage: boolean;\n  mediaType?: string;\n} {\n  const video = asRecord(node.video);\n  const imagePost = asRecord(node.imagePost);\n\n  // Check if this is explicitly marked as an image post\n  if (imagePost) {\n    return { isVideo: false, hasStaticImage: true, mediaType: \"image_post\" };\n  }\n\n  // Check media type indicators\n  const mediaType = pickString(\n    node.mediaType,\n    node.media_type,\n    video?.mediaType,\n  );\n\n  if (mediaType === \"image\" || mediaType === \"photo\") {\n    return { isVideo: false, hasStaticImage: true, mediaType };\n  }\n\n  // Check for video duration - images don't have duration\n  const duration = pickNumber(\n    node.duration,\n    node.videoDuration,\n    video?.duration,\n    video?.videoDuration,\n  );\n\n  // No duration or zero duration indicates not a video\n  if (!duration || duration <= 0) {\n    return { isVideo: false, hasStaticImage: true, mediaType: \"no_duration\" };\n  }\n\n  // Check for video download/play URLs - images won't have these\n  const downloadUrl = pickString(\n    node.downloadUrl,\n    node.download_url,\n    video?.downloadAddr,\n    video?.downloadUrl,\n    video?.playAddr,\n    video?.playUrl,\n  );\n\n  if (!downloadUrl) {\n    return { isVideo: false, hasStaticImage: true, mediaType: \"no_download_url\" };\n  }\n\n  // Check if images array exists (carousel/slideshow posts)\n  const images = (node as Record<string, unknown>).images ?? (imagePost as Record<string, unknown> | null)?.images;\n  if (Array.isArray(images) && images.length > 0) {\n    return { isVideo: false, hasStaticImage: true, mediaType: \"carousel\" };\n  }\n\n  // Passed all checks - this is a video\n  return { isVideo: true, hasStaticImage: false, mediaType: mediaType ?? undefined };\n}\n\nfunction mapItemToVideo(node: Record<string, unknown>): ScrapedTikTokApi23Video | null {\n  const videoId = extractVideoId(node);\n  if (!videoId) {\n    logger.debug({ node }, \"TikTok API23: skipping item with no video ID\");\n    return null;\n  }\n\n  // Validate this is a video before proceeding\n  const validation = validateIsVideo(node);\n  if (!validation.isVideo) {\n    logger.debug(\n      { videoId, validation },\n      \"TikTok API23: skipping non-video content (image/photo post)\",\n    );\n    return null;\n  }\n\n  const author = asRecord(node.author) ?? asRecord(node.authorMeta);\n  const nickname = pickString(\n    author?.nickname,\n    author?.unique_id,\n    author?.uniqueId,\n    author?.name,\n    node.author_name,\n  );\n  const uniqueId = pickString(\n    author?.unique_id,\n    author?.uniqueId,\n    author?.username,\n  );\n  const handle = uniqueId\n    ? `@${uniqueId.replace(/^@/, \"\")}`\n    : nickname\n      ? `@${nickname.replace(/\\s+/g, \"_\").slice(0, 30)}`\n      : \"@tiktok\";\n\n  const desc = pickString(\n    node.desc,\n    node.description,\n    node.title,\n    node.text,\n  ) ?? \"\";\n  const title = desc.slice(0, 200) || `TikTok ${videoId}`;\n\n  const shareUrl =\n    pickString(node.share_url, node.shareUrl, node.url, node.webVideoUrl) ??\n    `https://www.tiktok.com/@${handle.replace(/^@/, \"\")}/video/${videoId}`;\n\n  const video = asRecord(node.video);\n  const stats = asRecord(node.stats) ?? asRecord(node.statistics);\n\n  const durationSeconds = pickNumber(\n    node.duration,\n    node.videoDuration,\n    video?.duration,\n    video?.videoDuration,\n  );\n\n  return {\n    sourceVideoId: videoId,\n    shareUrl,\n    title,\n    description: desc,\n    creator: nickname ?? handle.replace(/^@/, \"\"),\n    creatorHandle: handle,\n    thumbnailUrl: extractThumbnail(node),\n    viewCount: pickNumber(stats?.playCount, stats?.play_count) ?? undefined,\n    likeCount: pickNumber(stats?.diggCount, stats?.digg_count) ?? undefined,\n    shareCount: pickNumber(stats?.shareCount, stats?.share_count) ?? undefined,\n    commentCount: pickNumber(stats?.commentCount, stats?.comment_count) ?? undefined,\n    durationSeconds: durationSeconds ?? undefined,\n    isVideo: validation.isVideo,\n    hasStaticImage: validation.hasStaticImage,\n    mediaType: validation.mediaType,\n  };\n}\n\nfunction collectItemsFromPayload(payload: unknown): Record<string, unknown>[] {\n  const root = asRecord(payload);\n  if (!root) return [];\n\n  // Try common response structures\n  const candidates = [\n    root.itemList,\n    root.aweme_list,\n    root.videos,\n    root.data,\n    asRecord(root.data)?.videos,\n    asRecord(root.data)?.itemList,\n    asRecord(root.data)?.aweme_list,\n    root.items,\n  ];\n\n  for (const block of candidates) {\n    if (Array.isArray(block) && block.length > 0) {\n      return block\n        .map((item) => asRecord(item))\n        .filter((item): item is Record<string, unknown> => !!item);\n    }\n  }\n\n  return [];\n}\n\nexport function isTikTokApi23Configured(): boolean {\n  return Boolean(process.env.RAPIDAPI_KEY?.trim());\n}\n\n/**\n * Search TikTok videos by keyword\n */\nexport async function searchTikTokVideos(\n  keyword: string,\n  options?: { limit?: number; cursor?: number | string | null },\n): Promise<ScrapedTikTokApi23Video[]> {\n  if (!isTikTokApi23Configured()) {\n    throw new TikTokApi23Error(\"RAPIDAPI_KEY is not configured.\", 503);\n  }\n\n  const limit = Math.min(50, Math.max(1, options?.limit ?? 20));\n\n  try {\n    const payload = await fetchTikTokSearchVideos(keyword, {\n      count: limit,\n      cursor: options?.cursor ?? 0,\n    });\n\n    const items = collectItemsFromPayload(payload);\n    const out: ScrapedTikTokApi23Video[] = [];\n    const seen = new Set<string>();\n\n    for (const node of items) {\n      const mapped = mapItemToVideo(node);\n      if (!mapped || seen.has(mapped.sourceVideoId)) continue;\n      if (!mapped.isVideo || mapped.hasStaticImage) continue; // Skip non-videos\n      seen.add(mapped.sourceVideoId);\n      out.push(mapped);\n      if (out.length >= limit) break;\n    }\n\n    logger.info(\n      { keyword, found: out.length, total: items.length },\n      \"TikTok API23: keyword search completed\",\n    );\n\n    return out;\n  } catch (err) {\n    const message = err instanceof Error ? err.message : String(err);\n    if (/429/i.test(message)) {\n      throw new TikTokApi23Error(\"TikTok API23 rate limit (429)\", 429);\n    }\n    if (/403/i.test(message) && /not subscribed/i.test(message)) {\n      throw new TikTokApi23Error(\"TikTok API23 not subscribed\", 403);\n    }\n    throw new TikTokApi23Error(\n      `TikTok API23 search failed: ${message.slice(0, 160)}`,\n      500,\n    );\n  }\n}\n\n/**\n * Fetch videos from a user's profile by secUid\n */\nexport async function fetchUserVideos(\n  secUid: string,\n  options?: { limit?: number; cursor?: number | string | null; oldest?: boolean },\n): Promise<ScrapedTikTokApi23Video[]> {\n  if (!isTikTokApi23Configured()) {\n    throw new TikTokApi23Error(\"RAPIDAPI_KEY is not configured.\", 503);\n  }\n\n  const limit = Math.min(50, Math.max(1, options?.limit ?? 30));\n  const useOldest = options?.oldest ?? false;\n\n  try {\n    const payload = useOldest\n      ? await fetchTikTokUserOldestPosts(secUid, {\n          count: limit,\n          cursor: options?.cursor ?? 0,\n        })\n      : await fetchTikTokUserPosts(secUid, {\n          count: limit,\n          cursor: options?.cursor ?? 0,\n        });\n\n    const items = collectItemsFromPayload(payload);\n    const out: ScrapedTikTokApi23Video[] = [];\n    const seen = new Set<string>();\n\n    for (const node of items) {\n      const mapped = mapItemToVideo(node);\n      if (!mapped || seen.has(mapped.sourceVideoId)) continue;\n      if (!mapped.isVideo || mapped.hasStaticImage) continue; // Skip non-videos\n      seen.add(mapped.sourceVideoId);\n      out.push(mapped);\n      if (out.length >= limit) break;\n    }\n\n    logger.info(\n      { secUid, found: out.length, total: items.length, oldest: useOldest },\n      \"TikTok API23: user videos fetched\",\n    );\n\n    return out;\n  } catch (err) {\n    const message = err instanceof Error ? err.message : String(err);\n    if (/429/i.test(message)) {\n      throw new TikTokApi23Error(\"TikTok API23 rate limit (429)\", 429);\n    }\n    throw new TikTokApi23Error(\n      `TikTok API23 user fetch failed: ${message.slice(0, 160)}`,\n      500,\n    );\n  }\n}\n\n/**\n * Resolve username to secUid\n */\nexport async function resolveUsernameToSecUid(username: string): Promise<string | null> {\n  if (!isTikTokApi23Configured()) {\n    throw new TikTokApi23Error(\"RAPIDAPI_KEY is not configured.\", 503);\n  }\n\n  try {\n    const payload = await fetchTikTokUserInfo(username);\n    const secUid = extractSecUidFromUserInfo(payload);\n\n    if (!secUid) {\n      logger.warn({ username }, \"TikTok API23: could not resolve secUid\");\n      return null;\n    }\n\n    logger.info({ username, secUid }, \"TikTok API23: resolved username to secUid\");\n    return secUid;\n  } catch (err) {\n    const message = err instanceof Error ? err.message : String(err);\n    logger.warn({ username, error: message }, \"TikTok API23: username resolution failed\");\n    return null;\n  }\n}\n\n/**\n * Comprehensive search combining keywords and hashtags\n */\nexport async function comprehensiveSearch(\n  searchTerms: string[],\n  options?: { videosPerTerm?: number },\n): Promise<ScrapedTikTokApi23Video[]> {\n  const videosPerTerm = options?.videosPerTerm ?? 15;\n  const allVideos: ScrapedTikTokApi23Video[] = [];\n  const seen = new Set<string>();\n\n  for (const term of searchTerms) {\n    try {\n      const videos = await searchTikTokVideos(term, { limit: videosPerTerm });\n\n      for (const video of videos) {\n        if (!seen.has(video.sourceVideoId)) {\n          seen.add(video.sourceVideoId);\n          allVideos.push(video);\n        }\n      }\n\n      // Rate limiting delay between searches\n      await new Promise((resolve) => setTimeout(resolve, 2000));\n    } catch (err) {\n      logger.warn({ term, error: err }, \"TikTok API23: search term failed\");\n      // Continue with other terms even if one fails\n    }\n  }\n\n  logger.info(\n    { terms: searchTerms.length, unique: allVideos.length },\n    \"TikTok API23: comprehensive search completed\",\n  );\n\n  return allVideos;\n}\n", "/**\n * Hunting & Fishing TikTok Video Collector\n * Curated discovery of high-quality outdoor content\n */\n\nimport { logger } from \"../logger.js\";\nimport {\n  searchTikTokVideos,\n  fetchUserVideos,\n  resolveUsernameToSecUid,\n  comprehensiveSearch,\n  type ScrapedTikTokApi23Video,\n} from \"./tiktokApi23Scraper.js\";\nimport { buildTikTokCandidateFromScrape } from \"./tiktokProvider.js\";\nimport { persistCatalogCandidates, type PersistResult } from \"./persistCatalogVideo.js\";\nimport type { CatalogVideoCandidate } from \"./types.js\";\n\n/** Hunting & Fishing Keywords for TikTok Discovery */\nexport const HUNTING_KEYWORDS = [\n  \"deer hunting\",\n  \"duck hunting\",\n  \"elk hunting\",\n  \"turkey hunting\",\n  \"bow hunting\",\n  \"waterfowl hunting\",\n  \"whitetail deer\",\n  \"big buck\",\n  \"hunting season\",\n  \"trophy deer\",\n  \"goose hunting\",\n  \"predator hunting\",\n  \"coyote hunting\",\n  \"bowhunting\",\n  \"rifle hunting\",\n  \"public land hunting\",\n];\n\nexport const FISHING_KEYWORDS = [\n  \"bass fishing\",\n  \"trout fishing\",\n  \"fly fishing\",\n  \"ice fishing\",\n  \"saltwater fishing\",\n  \"kayak fishing\",\n  \"deep sea fishing\",\n  \"catfish fishing\",\n  \"crappie fishing\",\n  \"walleye fishing\",\n  \"musky fishing\",\n  \"pike fishing\",\n  \"surf fishing\",\n  \"bank fishing\",\n  \"fishing tips\",\n  \"fishing tournament\",\n];\n\nexport const OUTDOOR_KEYWORDS = [\n  \"hunting and fishing\",\n  \"outdoor adventure\",\n  \"wildlife\",\n  \"game camera\",\n  \"hunting gear\",\n  \"fishing lures\",\n  \"outdoor life\",\n  \"hunting tips\",\n  \"fishing techniques\",\n  \"wild game\",\n];\n\n/** Popular Hunting & Fishing TikTok Creators (add more as discovered) */\nexport const FEATURED_CREATORS = [\n  \"@huntingandfishing\",\n  \"@outdoorlife\",\n  \"@bassmasterfishing\",\n  \"@duckcommander\",\n  \"@bowmar_bowhunting\",\n  \"@teamduckmen\",\n];\n\nexport type CollectionStats = {\n  searched: number;\n  discovered: number;\n  validated: number;\n  inserted: number;\n  skippedDuplicate: number;\n  rejected: number;\n  errors: string[];\n  details: {\n    keywords?: Array<{ keyword: string; found: number }>;\n    creators?: Array<{ creator: string; found: number }>;\n  };\n};\n\n/**\n * Collect videos by keyword search\n */\nexport async function collectByKeywords(\n  keywords: string[],\n  options?: {\n    videosPerKeyword?: number;\n    delayMs?: number;\n  },\n): Promise<{ candidates: CatalogVideoCandidate[]; stats: CollectionStats }> {\n  const stats: CollectionStats = {\n    searched: 0,\n    discovered: 0,\n    validated: 0,\n    inserted: 0,\n    skippedDuplicate: 0,\n    rejected: 0,\n    errors: [],\n    details: { keywords: [] },\n  };\n\n  const candidates: CatalogVideoCandidate[] = [];\n  const videosPerKeyword = options?.videosPerKeyword ?? 15;\n  const delayMs = options?.delayMs ?? 3000;\n\n  for (const keyword of keywords) {\n    stats.searched++;\n\n    try {\n      const videos = await searchTikTokVideos(keyword, { limit: videosPerKeyword });\n      stats.discovered += videos.length;\n\n      let keywordValidated = 0;\n      let keywordRejected = 0;\n\n      for (const video of videos) {\n        // Already validated by tiktokApi23Scraper, but double-check\n        if (!video.isVideo || video.hasStaticImage) {\n          stats.rejected++;\n          keywordRejected++;\n          logger.debug(\n            { videoId: video.sourceVideoId, mediaType: video.mediaType },\n            \"Rejected non-video content\",\n          );\n          continue;\n        }\n\n        const candidate = await buildTikTokCandidateFromScrape({\n          videoId: video.sourceVideoId,\n          title: video.title,\n          description: video.description,\n          creator: video.creator,\n          creatorHandle: video.creatorHandle,\n          thumbnailUrl: video.thumbnailUrl,\n          ingestionSource: `tiktok_api23:keyword:${keyword}`,\n          scopeBoost: 5, // Higher boost for targeted keyword search\n        });\n\n        if (candidate) {\n          candidates.push(candidate);\n          keywordValidated++;\n        } else {\n          keywordRejected++;\n        }\n      }\n\n      stats.validated += keywordValidated;\n      stats.rejected += keywordRejected;\n\n      stats.details.keywords?.push({\n        keyword,\n        found: keywordValidated,\n      });\n\n      logger.info(\n        { keyword, validated: keywordValidated, rejected: keywordRejected },\n        \"Keyword collection completed\",\n      );\n\n      // Rate limiting delay\n      if (delayMs > 0) {\n        await new Promise((resolve) => setTimeout(resolve, delayMs));\n      }\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      stats.errors.push(`${keyword}: ${message}`);\n      logger.warn({ keyword, error: message }, \"Keyword search failed\");\n\n      // If rate limited, stop trying more keywords\n      if (/429/i.test(message) || /rate limit/i.test(message)) {\n        logger.warn(\"Rate limited - stopping keyword collection\");\n        break;\n      }\n    }\n  }\n\n  return { candidates, stats };\n}\n\n/**\n * Collect videos from featured creators\n */\nexport async function collectFromCreators(\n  usernames: string[],\n  options?: {\n    videosPerCreator?: number;\n    delayMs?: number;\n  },\n): Promise<{ candidates: CatalogVideoCandidate[]; stats: CollectionStats }> {\n  const stats: CollectionStats = {\n    searched: 0,\n    discovered: 0,\n    validated: 0,\n    inserted: 0,\n    skippedDuplicate: 0,\n    rejected: 0,\n    errors: [],\n    details: { creators: [] },\n  };\n\n  const candidates: CatalogVideoCandidate[] = [];\n  const videosPerCreator = options?.videosPerCreator ?? 20;\n  const delayMs = options?.delayMs ?? 5000;\n\n  for (const username of usernames) {\n    stats.searched++;\n\n    try {\n      // Resolve username to secUid\n      const secUid = await resolveUsernameToSecUid(username);\n      if (!secUid) {\n        stats.errors.push(`${username}: Could not resolve secUid`);\n        continue;\n      }\n\n      const videos = await fetchUserVideos(secUid, { limit: videosPerCreator });\n      stats.discovered += videos.length;\n\n      let creatorValidated = 0;\n      let creatorRejected = 0;\n\n      for (const video of videos) {\n        if (!video.isVideo || video.hasStaticImage) {\n          stats.rejected++;\n          creatorRejected++;\n          continue;\n        }\n\n        const candidate = await buildTikTokCandidateFromScrape({\n          videoId: video.sourceVideoId,\n          title: video.title,\n          description: video.description,\n          creator: video.creator,\n          creatorHandle: video.creatorHandle,\n          thumbnailUrl: video.thumbnailUrl,\n          ingestionSource: `tiktok_api23:creator:${username}`,\n          scopeBoost: 8, // Higher boost for featured creators\n        });\n\n        if (candidate) {\n          candidates.push(candidate);\n          creatorValidated++;\n        } else {\n          creatorRejected++;\n        }\n      }\n\n      stats.validated += creatorValidated;\n      stats.rejected += creatorRejected;\n\n      stats.details.creators?.push({\n        creator: username,\n        found: creatorValidated,\n      });\n\n      logger.info(\n        { creator: username, validated: creatorValidated, rejected: creatorRejected },\n        \"Creator collection completed\",\n      );\n\n      if (delayMs > 0) {\n        await new Promise((resolve) => setTimeout(resolve, delayMs));\n      }\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      stats.errors.push(`${username}: ${message}`);\n      logger.warn({ creator: username, error: message }, \"Creator fetch failed\");\n\n      if (/429/i.test(message) || /rate limit/i.test(message)) {\n        logger.warn(\"Rate limited - stopping creator collection\");\n        break;\n      }\n    }\n  }\n\n  return { candidates, stats };\n}\n\n/**\n * Comprehensive hunting & fishing collection\n * Combines keywords, hashtags, and featured creators\n */\nexport async function runComprehensiveCollection(options?: {\n  includeHunting?: boolean;\n  includeFishing?: boolean;\n  includeOutdoor?: boolean;\n  includeCreators?: boolean;\n  keywordsPerCategory?: number;\n  videosPerKeyword?: number;\n  videosPerCreator?: number;\n}): Promise<{\n  persisted: PersistResult;\n  stats: CollectionStats;\n}> {\n  const {\n    includeHunting = true,\n    includeFishing = true,\n    includeOutdoor = true,\n    includeCreators = true,\n    keywordsPerCategory = 5,\n    videosPerKeyword = 12,\n    videosPerCreator = 15,\n  } = options ?? {};\n\n  const allCandidates: CatalogVideoCandidate[] = [];\n  const combinedStats: CollectionStats = {\n    searched: 0,\n    discovered: 0,\n    validated: 0,\n    inserted: 0,\n    skippedDuplicate: 0,\n    rejected: 0,\n    errors: [],\n    details: { keywords: [], creators: [] },\n  };\n\n  // Collect from hunting keywords\n  if (includeHunting) {\n    const huntingKeywords = HUNTING_KEYWORDS.slice(0, keywordsPerCategory);\n    const { candidates, stats } = await collectByKeywords(huntingKeywords, {\n      videosPerKeyword,\n      delayMs: 3000,\n    });\n\n    allCandidates.push(...candidates);\n    combinedStats.searched += stats.searched;\n    combinedStats.discovered += stats.discovered;\n    combinedStats.validated += stats.validated;\n    combinedStats.rejected += stats.rejected;\n    combinedStats.errors.push(...stats.errors);\n    combinedStats.details.keywords?.push(...(stats.details.keywords ?? []));\n\n    logger.info({ category: \"hunting\", validated: stats.validated }, \"Hunting collection done\");\n  }\n\n  // Collect from fishing keywords\n  if (includeFishing) {\n    const fishingKeywords = FISHING_KEYWORDS.slice(0, keywordsPerCategory);\n    const { candidates, stats } = await collectByKeywords(fishingKeywords, {\n      videosPerKeyword,\n      delayMs: 3000,\n    });\n\n    allCandidates.push(...candidates);\n    combinedStats.searched += stats.searched;\n    combinedStats.discovered += stats.discovered;\n    combinedStats.validated += stats.validated;\n    combinedStats.rejected += stats.rejected;\n    combinedStats.errors.push(...stats.errors);\n    combinedStats.details.keywords?.push(...(stats.details.keywords ?? []));\n\n    logger.info({ category: \"fishing\", validated: stats.validated }, \"Fishing collection done\");\n  }\n\n  // Collect from outdoor keywords\n  if (includeOutdoor) {\n    const outdoorKeywords = OUTDOOR_KEYWORDS.slice(0, Math.ceil(keywordsPerCategory / 2));\n    const { candidates, stats } = await collectByKeywords(outdoorKeywords, {\n      videosPerKeyword,\n      delayMs: 3000,\n    });\n\n    allCandidates.push(...candidates);\n    combinedStats.searched += stats.searched;\n    combinedStats.discovered += stats.discovered;\n    combinedStats.validated += stats.validated;\n    combinedStats.rejected += stats.rejected;\n    combinedStats.errors.push(...stats.errors);\n    combinedStats.details.keywords?.push(...(stats.details.keywords ?? []));\n\n    logger.info({ category: \"outdoor\", validated: stats.validated }, \"Outdoor collection done\");\n  }\n\n  // Collect from featured creators\n  if (includeCreators) {\n    const { candidates, stats } = await collectFromCreators(FEATURED_CREATORS, {\n      videosPerCreator,\n      delayMs: 5000,\n    });\n\n    allCandidates.push(...candidates);\n    combinedStats.searched += stats.searched;\n    combinedStats.discovered += stats.discovered;\n    combinedStats.validated += stats.validated;\n    combinedStats.rejected += stats.rejected;\n    combinedStats.errors.push(...stats.errors);\n    combinedStats.details.creators?.push(...(stats.details.creators ?? []));\n\n    logger.info({ creators: stats.validated }, \"Creator collection done\");\n  }\n\n  // Persist all collected videos to database\n  logger.info(\n    { candidates: allCandidates.length },\n    \"Persisting validated videos to database...\",\n  );\n\n  const persisted = await persistCatalogCandidates(allCandidates);\n\n  combinedStats.inserted = persisted.inserted;\n  combinedStats.skippedDuplicate = persisted.skippedDuplicate;\n\n  logger.info(\n    {\n      discovered: combinedStats.discovered,\n      validated: combinedStats.validated,\n      inserted: persisted.inserted,\n      skippedDuplicate: persisted.skippedDuplicate,\n      rejected: combinedStats.rejected,\n      errors: combinedStats.errors.length,\n    },\n    \"Comprehensive TikTok collection completed\",\n  );\n\n  return { persisted, stats: combinedStats };\n}\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { requireModerator } from \"../lib/authMiddleware\";\nimport {\n  enrichVideoRecord,\n  getPostProcessStatusSummary,\n  runPostProcessWorker,\n} from \"../lib/postProcess\";\n\nconst router: IRouter = Router();\n\nfunction authorizeCron(req: Request): boolean {\n  const secret = process.env.CRON_SECRET?.trim();\n  if (!secret) return false;\n  const header = req.header(\"authorization\");\n  if (header === `Bearer ${secret}`) return true;\n  return req.header(\"x-cron-secret\") === secret;\n}\n\nasync function handlePostProcessCron(req: Request, res: Response): Promise<void> {\n  if (!authorizeCron(req)) {\n    res.status(401).json({ error: \"Unauthorized\" });\n    return;\n  }\n\n  const limitRaw = req.query.limit;\n  const limit =\n    typeof limitRaw === \"string\" && Number.isFinite(Number(limitRaw))\n      ? Math.min(Math.max(Number(limitRaw), 1), 100)\n      : 50;\n\n  try {\n    const result = await runPostProcessWorker({ limit });\n    res.json({\n      ok: true,\n      completedAt: new Date().toISOString(),\n      ...result,\n    });\n  } catch (err) {\n    req.log?.error({ err }, \"Cron post-process failed\");\n    res.status(500).json({\n      error: err instanceof Error ? err.message : \"Post-process failed\",\n    });\n  }\n}\n\nrouter.get(\"/cron/post-process\", handlePostProcessCron);\nrouter.post(\"/cron/post-process\", handlePostProcessCron);\n\nrouter.get(\"/admin/post-process/status\", requireModerator, async (_req: Request, res: Response) => {\n  try {\n    res.json(await getPostProcessStatusSummary());\n  } catch (err) {\n    res.status(500).json({ error: err instanceof Error ? err.message : \"Status failed\" });\n  }\n});\n\nrouter.post(\"/admin/post-process/run\", requireModerator, async (req: Request, res: Response) => {\n  const body = (req.body ?? {}) as { limit?: number; videoIds?: number[]; force?: boolean };\n  try {\n    const result = await runPostProcessWorker({\n      limit: body.limit,\n      videoIds: Array.isArray(body.videoIds) ? body.videoIds : undefined,\n      force: body.force === true,\n    });\n    res.json({ ok: true, ...result });\n  } catch (err) {\n    res.status(500).json({ error: err instanceof Error ? err.message : \"Post-process failed\" });\n  }\n});\n\nrouter.post(\"/admin/post-process/:videoId\", requireModerator, async (req: Request, res: Response) => {\n  const videoId = parseInt(String(req.params.videoId ?? \"\"), 10);\n  if (!Number.isFinite(videoId) || videoId <= 0) {\n    res.status(400).json({ error: \"Invalid video id\" });\n    return;\n  }\n\n  try {\n    const result = await enrichVideoRecord(videoId);\n    res.json({ ok: true, ...result });\n  } catch (err) {\n    res.status(500).json({ error: err instanceof Error ? err.message : \"Post-process failed\" });\n  }\n});\n\nexport default router;\n", "export * from \"./types\";\nexport * from \"./attribution\";\nexport * from \"./validateVideoRecord\";\nexport * from \"./contentAnalysis\";\nexport * from \"./gearVision\";\nexport * from \"./productMatching\";\nexport * from \"./enrichVideo\";\nexport * from \"./worker\";\n", "import { Router, type IRouter, type Request, type Response } from \"express\";\nimport { pipeObjectEntityToResponse } from \"../lib/streamObjectEntity.js\";\n\nconst router: IRouter = Router();\n\n/** Stream private R2 objects (catalog mirrors, uploads) with byte-range support. */\nrouter.get(/.*/, async (req: Request, res: Response) => {\n  const objectPath = `/objects${req.path}`;\n  try {\n    await pipeObjectEntityToResponse(objectPath, req, res);\n  } catch (err) {\n    req.log?.error({ err, objectPath }, \"objects: stream failed\");\n    if (!res.headersSent) res.status(500).json({ error: \"Failed to stream object\" });\n  }\n});\n\nexport default router;\n", "// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Regulation cache background refresh job\n//\n// Architecture:\n//   1. fetchRegulationsFromSource() is the ingestion layer. If the optional\n//      REGULATIONS_SOURCE_URL env var is set, it fetches a JSON array of\n//      RegulationSummary records from that URL (e.g. a government dataset\n//      endpoint or a managed S3/CDN file updated by an external pipeline).\n//   2. If the env var is not set \u2014 or the fetch fails \u2014 the function falls\n//      back to the in-repo REGULATION_SUMMARIES seed, which contains curated\n//      representative data for 63 US/CA jurisdictions as an offline baseline.\n//   3. All records are upserted into `regulation_cache` with fetchedAt = now()\n//      so downstream routes always see a real, per-cycle timestamp.\n//\n// Schedule:\n//   - Runs once at server startup to populate/refresh the cache immediately.\n//   - Repeats every REFRESH_INTERVAL_MS (23 hours) for nightly refresh.\n//\n// Extension points for live ingestion:\n//   - Set REGULATIONS_SOURCE_URL to a URL returning a JSON array of summaries.\n//   - Add per-jurisdiction scraper adapters in fetchRegulationsFromSource()\n//     that call individual agency endpoints and merge results.\n//\n// Design notes:\n//   - Uses setInterval; no external scheduler dependency.\n//   - All failures logged and swallowed \u2014 job never crashes the process.\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nimport { db, regulationCacheTable } from \"@workspace/db\";\nimport { sql } from \"drizzle-orm\";\nimport { logger } from \"../lib/logger\";\nimport {\n  REGULATION_SUMMARIES,\n  type RegulationSummary,\n} from \"../data/regulations.js\";\n\nconst REFRESH_INTERVAL_MS = 23 * 60 * 60 * 1000; // 23 hours\n\n/**\n * Ingestion layer \u2014 returns normalized summaries from an external source when\n * REGULATIONS_SOURCE_URL is configured, or falls back to the static seed.\n *\n * To integrate a live source, set REGULATIONS_SOURCE_URL to a URL that returns\n * a JSON array shaped like `RegulationSummary[]`. The static seed will act as\n * the offline baseline whenever the external source is unavailable.\n */\nasync function fetchRegulationsFromSource(): Promise<{\n  summaries: RegulationSummary[];\n  fromLive: boolean;\n}> {\n  const sourceUrl = process.env[\"REGULATIONS_SOURCE_URL\"];\n\n  if (sourceUrl) {\n    try {\n      const ctrl = new AbortController();\n      const timeout = setTimeout(() => ctrl.abort(), 10_000);\n      const res = await fetch(sourceUrl, {\n        signal: ctrl.signal,\n        headers: { Accept: \"application/json\" },\n      });\n      clearTimeout(timeout);\n\n      if (!res.ok) {\n        throw new Error(`HTTP ${res.status}`);\n      }\n\n      const data = (await res.json()) as RegulationSummary[];\n      if (!Array.isArray(data) || data.length === 0) {\n        throw new Error(\"Response is not a non-empty array\");\n      }\n\n      logger.info(\n        { count: data.length, sourceUrl },\n        \"Regulation refresh: fetched live data from external source\"\n      );\n      return { summaries: data, fromLive: true };\n    } catch (err) {\n      logger.warn(\n        { err, sourceUrl },\n        \"Regulation refresh: live fetch failed \u2014 falling back to static seed\"\n      );\n    }\n  }\n\n  return { summaries: REGULATION_SUMMARIES, fromLive: false };\n}\n\n/**\n * Upsert all jurisdiction summaries into regulation_cache.\n * fetchedAt is set to now() so callers always see the true last-refresh time.\n */\nasync function refreshRegulationCache(): Promise<void> {\n  const { summaries, fromLive } = await fetchRegulationsFromSource();\n\n  const now = new Date();\n  const expiresAt = new Date(now.getTime() + 25 * 60 * 60 * 1000); // +25 hrs\n\n  const rows = summaries.map((summary) => ({\n    jurisdictionId: summary.id,\n    dataJson: JSON.stringify(summary),\n    sourceUrl: summary.sourceUrl,\n    fetchedAt: now,\n    expiresAt,\n  }));\n\n  await db\n    .insert(regulationCacheTable)\n    .values(rows)\n    .onConflictDoUpdate({\n      target: regulationCacheTable.jurisdictionId,\n      set: {\n        dataJson: sql`excluded.data_json`,\n        sourceUrl: sql`excluded.source_url`,\n        fetchedAt: sql`excluded.fetched_at`,\n        expiresAt: sql`excluded.expires_at`,\n      },\n    });\n\n  logger.info(\n    { count: rows.length, fetchedAt: now.toISOString(), fromLive },\n    \"Regulation cache refreshed\"\n  );\n}\n\nexport function startRegulationRefreshJob(): void {\n  // Immediate seed on startup\n  refreshRegulationCache().catch((err) => {\n    logger.warn(\n      { err },\n      \"Regulation refresh job: startup seed failed (routes will fall back to static data)\"\n    );\n  });\n\n  // Nightly recurring refresh\n  setInterval(() => {\n    refreshRegulationCache().catch((err) => {\n      logger.warn({ err }, \"Regulation refresh job: scheduled cycle failed\");\n    });\n  }, REFRESH_INTERVAL_MS);\n}\n", "// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Continuous video catalog ingestion job\n//\n// Rotates through YouTube discovery scopes, Instagram hashtag queue, and optional\n// Google SERP \u2192 YouTube URL discovery. Runs on long-lived Node hosts; on Vercel\n// use GET/POST /api/cron/video-ingestion with CRON_SECRET (Vercel Cron uses GET).\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nimport { logger } from \"../lib/logger\";\nimport { runFullIngestionCycle } from \"../lib/ingestion/pipeline\";\n\nconst DEFAULT_INTERVAL_MS = 60 * 60 * 1000; // 1 hour\n\nlet intervalHandle: ReturnType<typeof setInterval> | null = null;\nlet cycleInFlight = false;\n\nexport async function runVideoIngestionCycleOnce(): Promise<void> {\n  if (cycleInFlight) {\n    logger.info(\"Video ingestion: skipping cycle \u2014 previous still running\");\n    return;\n  }\n  cycleInFlight = true;\n  try {\n    const result = await runFullIngestionCycle();\n    logger.info(\n      {\n        youtube: {\n          inserted: result.youtube.inserted,\n          eligible: result.youtube.eligible,\n          rejected: result.youtube.rejected,\n        },\n        instagram: result.instagram,\n        googleSerp: result.googleSerp,\n        quota: result.quota,\n      },\n      \"Video ingestion cycle completed\",\n    );\n  } catch (err) {\n    logger.error({ err }, \"Video ingestion cycle failed\");\n  } finally {\n    cycleInFlight = false;\n  }\n}\n\nexport function startVideoIngestionJob(): void {\n  if (process.env.VIDEO_INGESTION_ENABLED === \"false\") {\n    logger.info(\"Video ingestion job disabled (VIDEO_INGESTION_ENABLED=false)\");\n    return;\n  }\n\n  const intervalMs = parseInt(process.env.VIDEO_INGESTION_INTERVAL_MS ?? String(DEFAULT_INTERVAL_MS), 10);\n  const ms = Number.isFinite(intervalMs) ? Math.max(15 * 60 * 1000, intervalMs) : DEFAULT_INTERVAL_MS;\n\n  logger.info({ intervalMs: ms }, \"Starting video ingestion background job\");\n\n  void runVideoIngestionCycleOnce();\n  intervalHandle = setInterval(() => void runVideoIngestionCycleOnce(), ms);\n}\n\nexport function stopVideoIngestionJob(): void {\n  if (intervalHandle) {\n    clearInterval(intervalHandle);\n    intervalHandle = null;\n  }\n}\n", "import app from \"./app\";\nimport { logger } from \"./lib/logger\";\nimport { runSeed } from \"./data/seed\";\n\nconst rawPort = process.env[\"PORT\"];\n\nif (!rawPort) {\n  throw new Error(\n    \"PORT environment variable is required but was not provided.\",\n  );\n}\n\nconst port = Number(rawPort);\n\nif (Number.isNaN(port) || port <= 0) {\n  throw new Error(`Invalid PORT value: \"${rawPort}\"`);\n}\n\nrunSeed().then(() => {\n  app.listen(port, (err) => {\n    if (err) {\n      logger.error({ err }, \"Error listening on port\");\n      process.exit(1);\n    }\n\n    logger.info({ port }, \"Server listening\");\n  });\n});\n"],
  "mappings": "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gG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,oTAAqD;AAAA,MAC7D,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACx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AAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,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jBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,oTAAqD;AAAA,MAC7D,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,sjBAAgG;AAAA,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AAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,KAAK,GAAE,SAAU,CAAC,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,O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AAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAiE;AAAA,MACzE,CAAC,QAAO,sjBAAgG;AAAA,MACxG,CAAC,QAAO,4XAAi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AAAA,IACF;AAEA,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,qBAAAD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;AC5dA,IAAAE,qBAAA;AAAA;AAAA;AAKA,QAAM;AAAA;AAAA,MAA6C;AAAA,QACjD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;A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A,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;A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,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SA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G;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,IAC/C;AAEA,QAAM,SAAS;AAAA,MACb;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,IAC/C;AAEA,QAAM,UAAU;AAAA,MACd;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,IAC/C;AAEA,QAAM,iBAAiB;AAAA,MACrB;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,IAC/C;AAGA,QAAM,aAAa;AAAA,MACjB;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC3D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAG;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;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D;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UACvD;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW;AAAA,UAAW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G;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,IAC/C;AAEA,QAAM,cAAc;AAAA,MAClB;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,IAC/C;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC5oBjB,IAAAG,sBAAA;AAAA;AAAA;AAEA,QAAM,EAAE,SAAS,IAAI,UAAQ,QAAQ;AAErC,QAAM,EAAE,YAAAC,YAAW,IAAI;AAEvB,QAAM,aAAN,cAAyB,SAAS;AAAA,MAChC,YAAY,KAAK;AACf,cAAM,aAAa;AAAA,UACjB,aAAa;AAAA,UACb,WAAW;AAAA,UACX,eAAgB,OAAO,IAAI,kBAAkB,WAC3B,IAAI,gBACJ;AAAA,QACpB;AACA,cAAM,UAAU;AAEhB,YAAI,UAAW,IAAI,cAAc;AACjC,YAAI,IAAI,QAAQ,UAAU,OAAO,IAAI,QAAQ,OAAO,YAAY;AAC9D,oBAAU,IAAI,QAAQ,OAAO;AAE/B,aAAK,UAAU;AAEf,cAAM,SAAS,IAAI;AACnB,aAAK,iBAAkB,UAAU,OAAO,OAAO,cAAc,WACpC,OAAO,YACP,IAAI,OAAO;AACpC,aAAK,cAAe,UAAU,OAAO,OAAO,WAAW,WACjC,OAAO,SACP;AACtB,aAAK,qBACH,UAAU,OAAO,OAAO,kBAAkB,WACxC,OAAO,gBACP;AAGJ,aAAK,SAAS;AACd,aAAK,YAAY;AACjB,aAAK,YAAY;AACjB,aAAK,YAAY;AACjB,aAAK,YAAY;AACjB,aAAK,UAAU;AACf,aAAK,OAAO;AACZ,aAAK,OAAO;AACZ,aAAK,QAAQ;AACb,aAAK,WAAW;AAChB,aAAK,UAAU;AACf,aAAK,WAAWA,YAAW,OAAO;AAAA,MACpC;AAAA,MAEA,OAAO,OAAO,SAAS;AACrB,eAAQ,QAAQ,SAAS,iBACd,QAAQ,YAAY;AAAA,MACjC;AAAA,MAEA,OAAO,OAAO,KAAK,IAAI;AACrB,YAAI,KAAK,WAAW,KAAK;AACvB,iBAAO,GAAG;AAEZ,YAAI,IAAI;AACR,cAAM,MAAM,MAAM;AAClB,aAAK,WAAW;AAGhB,YAAI,KAAK,UAAU,IAAI;AACrB,cAAI,WAAW,MAAM,OAAO,GAAG,GAAG;AAClC,cAAI,MAAM;AACR,mBAAO,GAAG,IAAI,MAAM,2BAA2B,CAAC;AAClD,cAAI,KAAK;AACP,mBAAO,GAAG;AACZ,cAAI,KAAK;AACP,cAAE,KAAK;AAAA;AAEP,cAAE,KAAK;AAAA,QACX;AAEJ;AACI,iBAAO,IAAI,KAAK;AACd,gBAAI,KAAK,QAAQ;AAGf,kBAAI,aAAa,MAAM,OAAO,GAAG,GAAG;AAEpC,qBAAO,IAAI,KAAK;AACd,wBAAQ,MAAM,CAAC,GAAG;AAAA,kBAChB,KAAK;AACH,wBAAI,KAAK,WAAW;AAClB,2BAAK,QAAQ,MAAM,YAAY,KAAK,UAAU,CAAC;AACjD,yBAAK,WAAW,EAAE;AAClB,yBAAK,OAAO,KAAK,SAAS,KAAK,MAAM,KAAK,OAAO;AACjD,yBAAK,UAAU;AACf,yBAAK,SAAS;AACd,6BAAS;AAAA,kBACX,KAAK;AACH,wBAAI,KAAK,WAAW;AAClB,2BAAK,QAAQ,MAAM,YAAY,KAAK,UAAU,CAAC;AACjD,yBAAK,WAAW,EAAE;AAClB,yBAAK,OAAO,KAAK,SAAS,KAAK,MAAM,KAAK,OAAO;AACjD,yBAAK,UAAU;AACf,wBAAI,KAAK,YAAY,GAAG;AACtB,2BAAK;AAAA,wBACH;AAAA,wBACA,KAAK;AAAA,wBACL;AAAA,wBACA;AAAA,0BAAE,eAAe,KAAK;AAAA,0BACpB,gBAAgB;AAAA,0BAChB,UAAU,KAAK;AAAA,0BACf,UAAU;AAAA,wBAAa;AAAA,sBAC3B;AAAA,oBACF;AACA,yBAAK,OAAO;AACZ,yBAAK,OAAO;AACZ,yBAAK,YAAY;AACjB,yBAAK,YAAY;AACjB,yBAAK,YAAY;AACjB,yBAAK,YAAY;AACjB,wBAAI,EAAE,KAAK,WAAW,KAAK,aAAa;AACtC,2BAAK,KAAK,aAAa;AACvB,6BAAO,GAAG;AAAA,oBACZ;AACA;AAAA,kBACF,KAAK;AACH,wBAAI,KAAK,WAAW;AAClB,2BAAK,QAAQ,MAAM,YAAY,KAAK,UAAU,CAAC;AACjD,yBAAK,QAAQ;AACb,yBAAK,WAAW,IAAI;AACpB;AAAA,kBACF,KAAK;AACH,wBAAI,KAAK,YAAY;AACnB,2BAAK,UAAU;AACjB,wBAAI,KAAK,WAAW;AAClB,2BAAK,QAAQ,MAAM,YAAY,KAAK,UAAU,CAAC;AACjD,yBAAK,WAAW,IAAI;AACpB,yBAAK,QAAQ;AACb,wBAAI,WAAW,MAAM,OAAO,IAAI,GAAG,GAAG;AACtC,wBAAI,MAAM;AACR,6BAAO,GAAG,IAAI,MAAM,2BAA2B,CAAC;AAClD,wBAAI,KAAK;AACP,6BAAO,GAAG;AACZ,sBAAE,KAAK;AACP,wBAAI,aAAa,MAAM,OAAO,GAAG,GAAG;AACpC;AAAA,gBACJ;AACA,kBAAE;AACF,kBAAE,KAAK;AACP,oBAAI,aAAa,MAAM,OAAO,GAAG,GAAG;AAAA,cACtC;AACA,kBAAI,KAAK,WAAW;AAClB,qBAAK,QAAQ,MAAM,YAAY,KAAK,UAAU,CAAC;AAAA,YACnD,OAAO;AAGL,kBAAI,aAAa,MAAM,OAAO,GAAG,GAAG;AAEpC,qBAAO,IAAI,KAAK;AACd,wBAAQ,MAAM,CAAC,GAAG;AAAA,kBAChB,KAAK;AACH,wBAAI,KAAK,WAAW;AAClB,2BAAK,QAAQ,MAAM,YAAY,KAAK,UAAU,CAAC;AACjD,yBAAK,WAAW,EAAE;AAClB,yBAAK,SAAS;AACd,yBAAK,OAAO,KAAK,SAAS,KAAK,MAAM,KAAK,OAAO;AACjD,yBAAK,UAAU;AACf,wBAAI,KAAK,YAAY,KAAK,KAAK,YAAY,GAAG;AAC5C,2BAAK;AAAA,wBACH;AAAA,wBACA,KAAK;AAAA,wBACL,KAAK;AAAA,wBACL;AAAA,0BAAE,eAAe,KAAK;AAAA,0BACpB,gBAAgB,KAAK;AAAA,0BACrB,UAAU,KAAK;AAAA,0BACf,UAAU;AAAA,wBAAa;AAAA,sBAC3B;AAAA,oBACF;AACA,yBAAK,OAAO;AACZ,yBAAK,OAAO;AACZ,yBAAK,YAAY;AACjB,yBAAK,YAAY;AACjB,yBAAK,YAAY;AACjB,yBAAK,YAAY;AACjB,wBAAI,EAAE,KAAK,WAAW,KAAK,aAAa;AACtC,2BAAK,KAAK,aAAa;AACvB,6BAAO,GAAG;AAAA,oBACZ;AACA,6BAAS;AAAA,kBACX,KAAK;AACH,wBAAI,KAAK,WAAW;AAClB,2BAAK,QAAQ,MAAM,YAAY,KAAK,UAAU,CAAC;AACjD,yBAAK,QAAQ;AACb,yBAAK,WAAW,IAAI;AACpB;AAAA,kBACF,KAAK;AACH,wBAAI,KAAK,YAAY;AACnB,2BAAK,UAAU;AACjB,wBAAI,KAAK,WAAW;AAClB,2BAAK,QAAQ,MAAM,YAAY,KAAK,UAAU,CAAC;AACjD,yBAAK,WAAW,IAAI;AACpB,yBAAK,QAAQ;AACb,wBAAI,WAAW,MAAM,OAAO,IAAI,GAAG,GAAG;AACtC,wBAAI,MAAM;AACR,6BAAO,GAAG,IAAI,MAAM,2BAA2B,CAAC;AAClD,wBAAI,KAAK;AACP,6BAAO,GAAG;AACZ,sBAAE,KAAK;AACP,wBAAI,aAAa,MAAM,OAAO,GAAG,GAAG;AACpC;AAAA,gBACJ;AACA,kBAAE;AACF,kBAAE,KAAK;AACP,oBAAI,aAAa,MAAM,OAAO,GAAG,GAAG;AAAA,cACtC;AACA,kBAAI,KAAK,WAAW;AAClB,qBAAK,QAAQ,MAAM,YAAY,KAAK,UAAU,CAAC;AAAA,YACnD;AAAA,UACF;AAEA,WAAG;AAAA,MACL;AAAA,MAEA,OAAO,IAAI;AACT,YAAI,KAAK,UAAU;AACjB,iBAAO,GAAG,IAAI,MAAM,2BAA2B,CAAC;AAClD,YAAI,CAAC,KAAK,UAAU,KAAK,YAAY,KAAK,KAAK,YAAY,GAAG;AAC5D,cAAI,KAAK;AACP,iBAAK,OAAO,KAAK,SAAS,KAAK,MAAM,KAAK,OAAO;AAAA;AAEjD,iBAAK,OAAO,KAAK,SAAS,KAAK,MAAM,KAAK,OAAO;AACnD,eAAK;AAAA,YACH;AAAA,YACA,KAAK;AAAA,YACL,KAAK;AAAA,YACL;AAAA,cAAE,eAAe,KAAK;AAAA,cACpB,gBAAgB,KAAK;AAAA,cACrB,UAAU,KAAK;AAAA,cACf,UAAU;AAAA,YAAa;AAAA,UAC3B;AAAA,QACF;AACA,WAAG;AAAA,MACL;AAAA,IACF;AAEA,aAAS,WAAWC,OAAM,OAAO,KAAK,KAAK;AACzC,UAAI,OAAO;AACT,eAAO;AAET,UAAIA,MAAK,UAAU,IAAI;AAErB,cAAM,WAAW,WAAW,MAAM,KAAK,CAAC;AACxC,YAAI,aAAa;AACf,iBAAO;AAET,YAAI,YAAY;AACd,UAAAA,MAAK,UAAU;AAEjB,YAAI,MAAM,KAAK;AAEb,gBAAM,WAAW,WAAW,MAAM,KAAK,CAAC;AACxC,cAAI,aAAa;AACf,mBAAO;AAET,cAAIA,MAAK;AACP,YAAAA,MAAK,QAAQ,OAAO,cAAc,YAAY,KAAK,QAAQ;AAAA;AAE3D,YAAAA,MAAK,QAAQ,OAAO,cAAc,YAAY,KAAK,QAAQ;AAE7D,UAAAA,MAAK,QAAQ;AACb,UAAAA,MAAK,WAAW;AAAA,QAClB,OAAO;AAEL,UAAAA,MAAK,QAAQ;AAAA,QACf;AAAA,MACF,OAAO;AAEL,cAAM,WAAW,WAAW,MAAM,KAAK,CAAC;AACxC,YAAI,aAAa;AACf,iBAAO;AAET,YAAIA,MAAK;AACP,UAAAA,MAAK,QAAQ,OAAO,cAAcA,MAAK,SAAS,KAAK,QAAQ;AAAA;AAE7D,UAAAA,MAAK,QAAQ,OAAO,cAAcA,MAAK,SAAS,KAAK,QAAQ;AAE/D,QAAAA,MAAK,QAAQ;AACb,QAAAA,MAAK,WAAW;AAAA,MAClB;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,aAAaA,OAAM,OAAO,KAAK,KAAK;AAE3C,UAAIA,MAAK,YAAYA,MAAK,oBAAoB;AAC5C,YAAI,CAACA,MAAK,WAAW;AACnB,cAAIA,MAAK,WAAW;AAClB,YAAAA,MAAK,QAAQ,MAAM,YAAYA,MAAK,UAAU,MAAM,CAAC;AAAA,QACzD;AACA,QAAAA,MAAK,YAAY;AACjB,eAAO,MAAM,KAAK,EAAE,KAAK;AACvB,gBAAM,OAAO,MAAM,GAAG;AACtB,cAAI,SAAS,MAAe,SAAS;AACnC;AACF,YAAEA,MAAK;AAAA,QACT;AACA,QAAAA,MAAK,WAAW;AAAA,MAClB;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,aAAaA,OAAM,OAAO,KAAK,KAAK;AAE3C,UAAIA,MAAK,YAAYA,MAAK,gBAAgB;AACxC,YAAI,CAACA,MAAK,WAAW;AACnB,cAAIA,MAAK,WAAW;AAClB,YAAAA,MAAK,QAAQ,MAAM,YAAYA,MAAK,UAAU,MAAM,CAAC;AAAA,QACzD;AACA,QAAAA,MAAK,YAAY;AACjB,eAAO,MAAM,KAAK,EAAE,KAAK;AACvB,cAAI,MAAM,GAAG,MAAM;AACjB;AACF,YAAEA,MAAK;AAAA,QACT;AACA,QAAAA,MAAK,WAAW;AAAA,MAClB;AAEA,aAAO;AAAA,IACT;AAGA,QAAM,aAAa;AAAA,MACjB;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC3D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAG;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;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AA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;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Q,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,IACrB;AACA,YAAQ,QAAQ,CAAC;AACjB,a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IAAAC;AAAA;AAAA;;;ACAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,YAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,WAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,cAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,cAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,gBAAA;AAAA;AAAA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA;AACA,IAAAC;AACA,IAAAC;AACA;AACA,IAAAC;AACA,IA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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAAC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAAC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAAC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;AC/eA,IAWa,yBAgBA;AA3Bb;AAAA;AAIA,IAAAC;AACA;AACA,IAAAC;AACA;AAIO,IAAM,0BAAN,cAAsC,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,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACR;AAIO,IAAM,eAAe;AAAA,MACxB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MAC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GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,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AAC,GAAE,OAAO,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,MAAK,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,aAAa,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,uBAAuB,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE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E,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAA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GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,IAAG,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,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",
  "names": ["val", "parse", "str", "match", "name", "env", "coerce", "hash", "self", "index", "match", "val", "extend", "name", "load", "index", "match", "error", "formatters", "env", "min", "version", "util", "load", "error", "prop", "val", "name", "useColors", "formatters", "str", "str", "val", "prop", "file", "count", "line", "timestamp", "limit", "get", "set", "error", "prop", "codes", "map", "status", "util", "str", "name", "val", "desc", "exports", "parse", "map", "val", "str", "Buffer", "str", "hasOwn", "module", "Buffer", "iconv", "codec", "str", "Buffer", "iconv", "codec", "str", "Buffer", "str", "iconv", "codec", "Buffer", "iconv", "codec", "str", "base64Regex", "i", "Buffer", "iconv", "codec", "str", "Buffer", "iconv", "i", "val", "codec", "str", "Buffer", "Buffer", "encode", "str", "decode", "codec", "getDecoder", "streamModule", "iconv", "getDecoder", "limit", "wrap", "string", "first", "i", "fn", "first", "wrap", "error", "parse", "string", "param", "index", "match", "val", "str", "db", "match", "str", "charset", "path", "extension", "types", "parse", "string", "match", "index", "normalize", "types", "val", "limit", "iconv", "next", "parse", "error", "str", "json", "parse", "first", "next", "str", "char", "index", "partial", "placeholder", "match", "error", "next", "text", "next", "str", "int", "has", "isArray", "name", "isNumber", "isPlainObject", "hasOwn", "prev", "root", "isNaN", "number", "max", "concatty", "slicy", "str", "Empty", "desc", "undefined", "max", "min", "doEval", "name", "hasOwn", "stringToPath", "string", "first", "last", "match", "number", "getBaseIntrinsic", "desc", "name", "require_utils", "has", "isArray", "markOverflow", "isOverflow", "getMaxIndex", "setMaxIndex", "array", "compactQueue", "arrayToObject", "merge", "decode", "str", "limit", "encode", "string", "compact", "val", "isRegExp", "isBuffer", "combine", "maybeMap", "has", "isArray", "defaults", "date", "isNonNullishPrimitive", "sentinel", "stringify", "object", "filter", "value", "normalizeStringifyOptions", "has", "isArray", "defaults", "str", "val", "limit", "root", "index", "splitKeyIntoSegments", "parent", "normalizeParseOptions", "require_lib", "stringify", "parse", "parse", "next", "limit", "count", "index", "name", "url", "string", "str", "match", "escape", "html", "index", "url", "parse", "str", "env", "path", "View", "name", "root", "file", "render", "resolve", "stat", "crypto", "toString", "hash", "stat", "parse", "end", "root", "first", "cidr", "string", "match", "error", "error1", "compile", "val", "str", "max", "require_utils", "Buffer", "types", "str", "index", "val", "cb", "name", "parse", "compile", "match", "stringify", "escapeText", "str", "escape", "text", "index", "end", "path", "name", "encode", "data", "decode", "process", "result", "next", "path", "name", "match", "prop", "val", "handleError", "error", "next", "slice", "path", "name", "methods", "next", "match", "slice", "Router", "router", "next", "param", "name", "methods", "self", "wrap", "path", "match", "err", "route", "url", "parent", "error", "View", "Router", "slice", "app", "router", "env", "parent", "path", "fn", "next", "param", "name", "set", "val", "render", "cache", "str", "match", "index", "str", "match", "index", "comparator", "getEncoding", "str", "match", "index", "str", "match", "val", "index", "string", "count", "set", "types", "first", "match", "date", "timestamp", "str", "end", "str", "index", "end", "isIP", "parse", "name", "range", "is", "types", "index", "hostname", "subdomains", "path", "host", "val", "parse", "name", "string", "param", "val", "str", "match", "index", "hex", "char", "crypto", "val", "parse", "serialize", "str", "decode", "index", "val", "max", "min", "name", "path", "Stream", "util", "normalize", "error", "match", "etag", "pipe", "root", "decode", "send", "stat", "prop", "self", "next", "err", "stream", "type", "setHeader", "val", "str", "count", "name", "date", "timestamp", "end", "append", "parse", "val", "end", "path", "Buffer", "send", "app", "json", "escape", "stringify", "res", "next", "file", "name", "append", "val", "prev", "location", "url", "render", "self", "str", "url", "root", "serveStatic", "next", "path", "error", "str", "Router", "app", "req", "res", "next", "require_express", "val", "require_lib", "defaults", "cors", "next", "require_cookie_signature", "crypto", "val", "str", "mac", "cookieParser", "next", "str", "val", "val", "toString", "err", "val", "toString", "err", "val", "val", "path", "val", "path", "char", "remove", "cloned", "serialize", "serialize", "remove", "str", "first", "next", "index", "path", "date", "index", "str", "sleep", "path", "sleep", "assert", "file", "append", "err", "n", "releasedBufObj", "name", "data", "error", "shouldRetry", "registry", "index", "index", "max", "check", "version", "Worker", "assert", "MAX_STRING", "FinalizationRegistry", "WeakRef", "registry", "end", "data", "error", "sleep", "onExit", "fixTarget", "noop", "str", "last", "point", "time", "stringify", "end", "formatters", "data", "defaultOptions", "_", "noop", "cache", "stringify", "noop", "version", "bindings", "formatters", "stringify", "str", "array", "whitespace", "number", "value", "fail", "bigint", "parent", "tmp", "key", "res", "join", "add", "remove", "end", "clone", "data", "streamLevels", "index", "path", "time", "stringify", "noop", "version", "hostname", "defaultOptions", "number", "normalize", "pino", "serializers", "timestamp", "name", "formatters", "end", "stack", "pino", "customLogLevel", "useLevel", "logger", "next", "error", "parseMessage", "number", "__importStar", "hex", "integer", "end", "__importStar", "__importStar", "assert", "number", "slice", "Address6", "hex", "url", "host", "port", "end", "index", "first", "last", "__importStar", "transform", "char", "array", "transform", "INFINITY", "date", "extend", "extend", "parse", "interval", "array", "string", "point", "data", "bits", "value", "elementType", "parse", "array", "i", "count", "val", "user", "val", "require_utils", "defaults", "util", "val", "date", "config", "escapeIdentifier", "str", "escapeLiteral", "string", "user", "text", "hmacSha256", "randomBytes", "hmacSha256", "string", "data", "hash", "user", "text", "require_utils", "data", "index", "crypto", "session", "text", "name", "data", "types", "TypeOverrides", "parse", "str", "config", "hostname", "dns", "defaults", "parse", "val", "config", "add", "types", "Result", "match", "desc", "Result", "Query", "config", "DatabaseError", "name", "Field", "text", "string", "password", "text", "parse", "query", "name", "types", "config", "string", "describe", "serialize", "end", "Parser", "text", "name", "parse", "getStream", "net", "getSecureStream", "parse", "serialize", "Connection", "config", "self", "port", "host", "error", "net", "text", "transform", "error", "self", "val", "noop", "path", "Stream", "util", "val", "env", "file", "prev", "line", "require_lib", "path", "file", "stat", "TypeOverrides", "Query", "defaults", "Connection", "crypto", "Client", "config", "val", "self", "error", "data", "str", "index", "Promise", "pool", "Pool", "Client", "client", "text", "response", "err", "require_query", "util", "config", "self", "after", "require_client", "TypeOverrides", "util", "Client", "config", "self", "err", "error", "index", "require_lib", "Client", "defaults", "Connection", "Result", "Pool", "TypeOverrides", "DatabaseError", "escapeIdentifier", "escapeLiteral", "clientConstructor", "pg", "config", "config", "name", "config", "name", "name", "char", "value", "startFrom", "array", "name", "config", "ref", "actions", "name", "config", "sql", "name", "otel", "rawTracer", "name", "param", "name", "config", "sql", "empty", "str", "placeholder", "SQL", "prop", "config", "prop", "result", "path", "name", "index", "data", "name", "name", "config", "name", "config", "name", "name", "config", "name", "name", "config", "name", "config", "name", "name", "name", "name", "config", "name", "config", "name", "config", "name", "config", "name", "name", "name", "config", "name", "config", "hex", "init_utils", "name", "config", "init_utils", "name", "config", "name", "name", "name", "name", "config", "name", "config", "name", "config", "name", "name", "config", "name", "config", "name", "config", "name", "config", "name", "config", "name", "init_table", "name", "name", "unique", "config", "name", "config", "init_table", "name", "init_view_common", "min", "max", "array", "relations", "config", "init_vector", "init_vector", "init_sql", "init_table", "init_sql", "config", "session", "name", "str", "set", "index", "limit", "table", "select", "sql", "joinOn", "field", "select", "init_select", "init_utils", "config", "session", "limit", "name", "init_query_builder", "init_select", "self", "select", "name", "init_query_builder", "init_table", "init_view_common", "config", "init_utils", "init_table", "init_utils", "session", "name", "init_utils", "init_query_builder", "session", "select", "config", "name", "session", "name", "init_table", "init_utils", "session", "set", "tableName", "name", "init_query_builder", "init_select", "filters", "session", "config", "name", "sql", "session", "self", "filters", "select", "update", "config", "sql", "data", "init_alias", "name", "config", "name", "init_table", "name", "init_sql", "cache", "sql", "session", "config", "init_subquery", "init_utils", "init_alias", "init_subquery", "init_table", "init_utils", "init_view_common", "Pool", "types", "init_session", "logger", "cache", "name", "val", "config", "session", "error", "sql", "config", "logger", "session", "db", "init_session", "drizzle", "init_session", "name", "initializer", "_a", "init_core", "val", "array", "set", "end", "object", "prop", "path", "str", "data", "Class", "_a", "config", "error", "issue", "path", "_a", "init_errors", "init_core", "init_core", "init_errors", "bigint", "boolean", "date", "integer", "time", "uuid", "timeRegex", "version", "init_checks", "init_core", "_a", "inst", "integer", "val", "result", "line", "version", "data", "base64", "index", "init_checks", "init_core", "_a", "version", "checks", "isAborted", "result", "_", "uuid", "url", "date", "time", "inst", "boolean", "bigint", "isObject", "allowsEval", "r", "unrecognized", "results", "val", "map", "left", "right", "keyResult", "valueResult", "output", "end", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "count", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "count", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "error", "parsedType", "data", "issue", "meta", "Class", "_emoji", "_undefined", "_null", "types", "data", "val", "init_checks", "gen", "_a", "formatMap", "parent", "json", "val", "file", "meta", "root", "id", "schema", "params", "core_exports", "_emoji", "_null", "_undefined", "version", "init_core", "init_errors", "init_checks", "init_checks", "init_core", "date", "datetime", "duration", "time", "init_core", "init_schemas", "initializer", "init_errors", "init_core", "issue", "issues", "parse", "parseAsync", "safeParse", "safeParseAsync", "init_parse", "init_core", "init_errors", "string", "email", "guid", "uuid", "emoji", "_emoji", "nanoid", "cuid", "cuid2", "ulid", "xid", "ksuid", "ipv4", "ipv6", "cidrv4", "cidrv6", "base64", "base64url", "e164", "number", "boolean", "bigint", "_undefined", "_null", "_void", "date", "union", "_enum", "nullish", "_default", "_catch", "issue", "data", "json", "jsonSchema", "init_schemas", "init_core", "init_checks", "init_parse", "def", "meta", "parse", "safeParse", "parseAsync", "safeParseAsync", "check", "datetime", "time", "duration", "types", "output", "map", "init_core", "bigint", "boolean", "date", "number", "string", "init_core", "init_schemas", "_default", "base64", "base64url", "bigint", "boolean", "_catch", "cidrv4", "cidrv6", "core_exports", "cuid", "cuid2", "date", "e164", "email", "emoji", "_enum", "guid", "ipv4", "ipv6", "json", "ksuid", "nanoid", "_null", "nullish", "number", "parse", "parseAsync", "safeParse", "safeParseAsync", "string", "ulid", "_undefined", "union", "uuid", "_void", "xid", "init_core", "init_schemas", "init_checks", "init_errors", "init_parse", "init_sql", "z", "zod", "coerce", "min", "max", "integer", "columns", "isPgEnum", "refine", "init_schema", "Pool", "init_schema", "desc", "name", "error", "v", "env", "fail", "next", "path", "d", "b", "__assign", "o", "resolveFetch", "FunctionsError", "name", "FunctionsFetchError", "FunctionsRelayError", "FunctionsHttpError", "FunctionRegion", "FunctionsClient", "url", "_a", "data", "error", "name", "this", "res: Response", "fetchError: any", "delay", "res", "error", "data", "count: number | null", "count", "config", "filters", "url", "retry", "fetch", "head", "PostgrestClient", "get", "method: 'HEAD' | 'GET' | 'POST'", "body: unknown | undefined", "gt", "_a", "env", "_a", "char", "data", "PostgresTypes", "record", "_a", "noop", "toArray", "val", "__export", "__toCommonJS", "closure", "global", "data", "url", "char", "error", "val", "fallbackTransportName", "REALTIME_PRESENCE_LISTEN_EVENTS", "error", "REALTIME_POSTGRES_CHANGES_LISTEN_EVENT", "REALTIME_LISTEN_TYPES", "REALTIME_SUBSCRIBE_STATES", "_a", "config", "postgres_changes", "error", "filter", "_b", "url", "bind", "errors", "data", "index", "_a", "RealtimeClient", "error", "result", "data", "exists", "url", "path", "url", "text", "data", "namespaceToPath", "parent", "error", "error", "name", "_objectSpread2", "result: Record<string, string>", "url", "data", "isPlainObject", "DEFAULT_FILE_OPTIONS: FileOptions", "version", "result: Record<string, any>", "params: { [k: string]: any }", "contentType: string | undefined", "fetch", "setHeaderUtil", "this", "downloadFn: () => Promise<Response>", "shouldThrowOnError: boolean", "path", "headers: Record<string, string>", "transform", "params: Record<string, string>", "prop", "error", "name", "str", "base64", "char", "sleep", "url", "resolveFetch", "data", "_a", "time", "promise", "array", "randomString", "hash", "date", "str", "prop", "user", "handleError", "_getErrorMessage", "error", "data", "_a", "_getRequestParams", "url", "_handleRequest", "session", "user", "url", "fetch", "jwt", "error", "email", "attributes", "_a", "data", "name", "_a", "hex", "domain", "version", "_a", "name", "_a", "error", "param", "user", "_a", "hostname", "isObject", "val", "data", "error", "factor", "name", "_a", "error", "data", "session", "user", "email", "url", "result", "last", "jwt", "attributes", "errors", "payload", "currentLevel", "nextLevel", "verifiedFactors", "currentAuthenticationMethods", "isValid", "AuthClient", "__awaiter", "otel", "_a", "version", "url", "error", "hostname", "domain", "defaults", "DEFAULT_DB_OPTIONS", "DEFAULT_AUTH_OPTIONS", "DEFAULT_REALTIME_OPTIONS", "DEFAULT_GLOBAL_OPTIONS", "DEFAULT_TRACE_PROPAGATION_OPTIONS", "result: ResolvedSupabaseClientOptions<SchemaName>", "_objectSpread2", "DEFAULT_HEADERS", "DEFAULT_AUTH_OPTIONS: SupabaseAuthClientOptions", "DEFAULT_REALTIME_OPTIONS: RealtimeClientOptions", "DEFAULT_TRACE_PROPAGATION_OPTIONS: TracePropagationOptions", "resolveFetch", "getAccessToken", "fetch", "traceTargets: TracePropagationTarget[] | null", "supabaseUrl: string", "supabaseKey: string", "DEFAULTS", "prop", "SupabaseStorageClient", "name", "this", "data", "session", "init_dist", "cached", "data", "error", "email", "meta", "name", "init_auth", "init_schema", "next", "user", "db", "eq", "init_schema", "init_auth", "getParsedType", "init_util", "util", "assertIs", "assertNever", "object", "val", "joinValues", "array", "objectUtil", "first", "data", "ZodIssueCode", "ZodError", "init_util", "json", "issue", "error", "en_default", "init_en", "init_util", "issue", "ZodIssueCode", "setErrorMap", "map", "getErrorMap", "init_errors", "init_en", "en_default", "getErrorMap", "issue", "en_default", "init_errors", "init_en", "data", "path", "map", "errorUtil", "errorMap", "version", "isValidJWT", "jwt", "base64", "floatSafeRemainder", "val", "ZodObject", "ZodOptional", "ZodArray", "ZodNullable", "ZodTuple", "mergeValues", "getParsedType", "index", "ZodEnum", "data", "custom", "check", "ZodAny", "r", "ZodType", "ZodString", "ZodNumber", "ZodBigInt", "ZodBoolean", "ZodDate", "ZodSymbol", "ZodUndefined", "ZodNull", "ZodUnknown", "ZodNever", "ZodVoid", "ZodUnion", "ZodDiscriminatedUnion", "ZodIntersection", "ZodRecord", "ZodMap", "ZodSet", "ZodLazy", "ZodLiteral", "ZodPromise", "ZodDefault", "ZodCatch", "ZodNaN", "ZodReadonly", "NEVER", "init_errors", "init_util", "parent", "path", "error", "ZodError", "ZodIssueCode", "transform", "_ZodString", "parsedType", "ctx", "min", "max", "result", "issue", "issues", "types", "first", "elements", "getErrorMap", "en_default", "processed", "preprocess", "ZodFirstPartyTypeKind", "external_exports", "NEVER", "ZodType", "ZodAny", "ZodArray", "ZodBigInt", "ZodBoolean", "ZodCatch", "ZodDate", "ZodDefault", "ZodDiscriminatedUnion", "ZodEnum", "ZodError", "ZodIntersection", "ZodIssueCode", "ZodLazy", "ZodLiteral", "ZodMap", "ZodNaN", "ZodNever", "ZodNull", "ZodNullable", "ZodNumber", "ZodObject", "ZodOptional", "ZodPromise", "ZodReadonly", "ZodRecord", "ZodSet", "ZodString", "ZodSymbol", "ZodTuple", "ZodUndefined", "ZodUnion", "ZodUnknown", "ZodVoid", "custom", "en_default", "getErrorMap", "getParsedType", "setErrorMap", "init_external", "init_errors", "init_util", "init_external", "url", "_a", "apiKey", "json", "__await", "__asyncGenerator", "match", "init_dist", "SchemaType", "ExecutableCodeLanguage", "Outcome", "HarmCategory", "HarmBlockThreshold", "HarmProbability", "BlockReason", "FinishReason", "TaskType", "FunctionCallingMode", "DynamicRetrievalMode", "Task", "__classPrivateFieldSet", "__classPrivateFieldGet", "uuid4", "init_uuid", "crypto", "init_errors", "error", "error", "url", "val", "name", "text", "sleep", "init_version", "match", "ReadableStream", "init_query", "fetch", "cached", "promise", "data", "process", "name", "prop", "name", "name", "str", "path", "index", "match", "Completions", "init_completions", "index", "str", "__classPrivateFieldSet", "__classPrivateFieldGet", "line", "logger", "name", "line", "sse", "data", "str", "index", "__classPrivateFieldSet", "logger", "__classPrivateFieldGet", "self", "json", "text", "init_parse", "parseResponse", "__classPrivateFieldSet", "transform", "__classPrivateFieldGet", "data", "env", "apiKey", "Completions", "__classPrivateFieldSet", "line", "uuid4", "error", "path", "__classPrivateFieldGet", "url", "opts", "shouldRetry", "retryMessage", "err", "sleep", "__classPrivateFieldSet", "__classPrivateFieldGet", "init_tslib", "uuid4", "init_uuid", "crypto", "isAbortError", "castToError", "init_errors", "error", "APIError", "APIUserAbortError", "APIConnectionError", "APIConnectionTimeoutError", "BadRequestError", "AuthenticationError", "PermissionDeniedError", "NotFoundError", "ConflictError", "UnprocessableEntityError", "RateLimitError", "InternalServerError", "init_error", "init_errors", "error", "data", "castToError", "isEmptyObj", "hasOwn", "startsWithSchemeRegexp", "isAbsoluteURL", "isArray", "isReadonlyArray", "validatePositiveInteger", "safeJSON", "init_values", "init_error", "url", "val", "name", "text", "sleep", "init_sleep", "VERSION", "init_version", "getDetectedPlatform", "getBrowserInfo", "match", "isRunningInBrowser", "getPlatformProperties", "normalizeArch", "normalizePlatform", "_platformHeaders", "getPlatformHeaders", "init_detect_platform", "init_version", "VERSION", "getDefaultFetch", "makeReadableStream", "ReadableStream", "ReadableStreamFrom", "ReadableStreamToAsyncIterable", "CancelReadableStream", "init_shims", "FallbackEncoder", "init_request_options", "val", "isArray", "init_utils", "init_values", "array", "str", "string", "object", "filter", "isArray", "defaults", "init_utils", "init_values", "date", "stringifyQuery", "init_query", "concatBytes", "index", "encodeUTF8", "str", "encodeUTF8_", "decodeUTF8", "decodeUTF8_", "init_bytes", "findNewlineIndex", "findDoubleNewlineIndex", "LineDecoder", "init_bytes", "_LineDecoder_buffer", "_LineDecoder_carriageReturnIndex", "__classPrivateFieldSet", "encodeUTF8", "concatBytes", "__classPrivateFieldGet", "decodeUTF8", "line", "noop", "makeLogFn", "logger", "levelNumbers", "loggerFor", "noopLogger", "cachedLoggers", "parseLogLevel", "formatRequestDetails", "init_log", "init_values", "hasOwn", "name", "_iterSSEMessages", "SSEDecoder", "LineDecoder", "ReadableStreamToAsyncIterable", "iterSSEChunks", "line", "sse", "data", "encodeUTF8", "findDoubleNewlineIndex", "partition", "str", "index", "Stream", "init_error", "init_shims", "init_line", "init_errors", "init_bytes", "init_log", "_Stream_client", "__classPrivateFieldSet", "logger", "loggerFor", "APIError", "isAbortError", "__classPrivateFieldGet", "self", "makeReadableStream", "defaultParseResponse", "loggerFor", "Stream", "json", "text", "formatRequestDetails", "init_parse", "init_streaming", "init_log", "APIPromise", "init_api_promise", "init_parse", "parseResponse", "defaultParseResponse", "_APIPromise_client", "__classPrivateFieldSet", "transform", "__classPrivateFieldGet", "data", "init_error", "init_parse", "init_api_promise", "init_values", "__classPrivateFieldSet", "__classPrivateFieldGet", "APIPromise", "Page", "client", "defaultParseResponse", "data", "init_shims", "init_error", "config", "fetch", "getDefaultFetch", "body", "APIError", "makeFile", "checkFileSupport", "getName", "supportsFormData", "fetch", "cached", "supportsFormDataMap", "promise", "data", "isAsyncIterable", "multipartFormRequestOptions", "createForm", "isNamedBlob", "addFormValue", "init_uploads", "init_shims", "process", "ReadableStreamFrom", "name", "prop", "toFile", "name", "checkFileSupport", "isFileLike", "makeFile", "isResponseLike", "getBytes", "getName", "isBlobLike", "isAsyncIterable", "propsForError", "init_to_file", "init_uploads", "init_uploads", "init_to_file", "APIResource", "init_resource", "encodeURIPath", "str", "EMPTY", "createPathTagFunction", "path", "init_path", "init_error", "index", "match", "init_resource", "init_path", "APIResource", "path", "init_error", "tool", "inputTool", "init_error", "init_error", "__classPrivateFieldSet", "__classPrivateFieldGet", "index", "error", "APIUserAbortError", "init_error", "__classPrivateFieldGet", "tool", "name", "content", "error", "_AbstractChatCompletionRunner_getFinalMessage", "_AbstractChatCompletionRunner_getFinalFunctionToolCall", "_AbstractChatCompletionRunner_getFinalFunctionToolCallResult", "_AbstractChatCompletionRunner_calculateTotalUsage", "_AbstractChatCompletionRunner_validateParams", "_AbstractChatCompletionRunner_stringifyFunctionCallResult", "init_parser", "index", "escape", "e", "init_streaming", "index", "name", "id", "assertNever", "init_parser", "init_error", "init_streaming", "__classPrivateFieldSet", "__classPrivateFieldGet", "APIUserAbortError", "Stream", "_ChatCompletionStream_beginRequest", "_ChatCompletionStream_getChoiceEventState", "_ChatCompletionStream_addChunk", "_ChatCompletionStream_emitToolCallDoneEvent", "tool", "_ChatCompletionStream_emitContentDoneEvents", "_ChatCompletionStream_endRequest", "_ChatCompletionStream_getAutoParseableResponseFormat", "_ChatCompletionStream_accumulateChatCompletion", "content", "refusal", "rest", "_a", "chunk", "Completions", "init_completions", "init_resource", "init_path", "APIResource", "path", "Chat", "init_chat", "init_resource", "init_completions", "APIResource", "Completions", "init_completions", "init_chat", "init_completions", "init_shared", "init_resource", "init_path", "APIResource", "path", "init_resource", "APIResource", "init_resource", "init_path", "APIResource", "path", "init_resource", "APIResource", "init_resource", "init_path", "APIResource", "path", "init_roles", "init_resource", "init_path", "APIResource", "path", "init_resource", "init_path", "APIResource", "path", "init_resource", "APIResource", "Roles", "init_roles", "init_resource", "init_path", "APIResource", "path", "init_resource", "init_path", "APIResource", "path", "init_resource", "init_roles", "init_path", "APIResource", "Roles", "path", "init_resource", "init_path", "APIResource", "path", "Certificates", "init_certificates", "init_resource", "init_path", "APIResource", "path", "DataRetention", "init_data_retention", "init_resource", "init_path", "APIResource", "path", "init_resource", "init_path", "APIResource", "path", "init_resource", "init_path", "APIResource", "path", "init_resource", "init_path", "APIResource", "path", "Roles", "init_roles", "init_resource", "init_path", "APIResource", "path", "init_resource", "init_path", "APIResource", "path", "SpendAlerts", "init_spend_alerts", "init_resource", "init_path", "APIResource", "path", "Roles", "init_roles", "init_resource", "init_path", "APIResource", "path", "Groups", "init_groups", "init_resource", "init_roles", "init_path", "APIResource", "Roles", "path", "Roles", "init_roles", "init_resource", "init_path", "APIResource", "path", "Users", "init_users", "init_resource", "init_roles", "init_path", "APIResource", "Roles", "path", "init_resource", "init_certificates", "init_data_retention", "init_roles", "init_spend_alerts", "init_groups", "init_users", "init_path", "APIResource", "Users", "Groups", "Roles", "DataRetention", "SpendAlerts", "Certificates", "path", "Roles", "init_roles", "init_resource", "init_path", "APIResource", "path", "Users", "init_users", "init_resource", "init_roles", "init_path", "APIResource", "Roles", "path", "init_resource", "init_roles", "init_users", "APIResource", "Users", "init_resource", "APIResource", "iterateHeaders", "brand_privateNullableHeaders", "name", "isReadonlyArray", "buildHeaders", "init_headers", "init_values", "Speech", "init_speech", "init_resource", "init_headers", "APIResource", "buildHeaders", "Transcriptions", "init_transcriptions", "init_resource", "init_uploads", "APIResource", "multipartFormRequestOptions", "Translations", "init_translations", "init_resource", "init_uploads", "APIResource", "multipartFormRequestOptions", "Audio", "init_audio", "init_resource", "init_speech", "init_transcriptions", "init_translations", "APIResource", "Transcriptions", "Translations", "Speech", "Batches", "init_batches", "init_resource", "init_path", "APIResource", "path", "init_resource", "init_headers", "init_path", "APIResource", "buildHeaders", "path", "init_resource", "init_headers", "APIResource", "buildHeaders", "init_resource", "init_headers", "APIResource", "buildHeaders", "init_resource", "APIResource", "Sessions", "init_sessions", "init_resource", "init_headers", "init_path", "APIResource", "buildHeaders", "path", "init_resource", "init_headers", "init_path", "APIResource", "path", "buildHeaders", "init_resource", "init_sessions", "APIResource", "Sessions", "Messages", "init_messages", "init_resource", "init_headers", "init_path", "APIResource", "path", "buildHeaders", "init_resource", "init_headers", "init_path", "APIResource", "path", "buildHeaders", "init_error", "init_bytes", "readEnv", "init_env", "env", "init_utils", "init_values", "init_env", "init_log", "init_uuid", "init_sleep", "init_query", "assertNever", "init_streaming", "init_error", "init_utils", "chunk", "_a", "Stream", "__classPrivateFieldGet", "APIUserAbortError", "index", "__classPrivateFieldSet", "_AssistantStream_endRequest", "_AssistantStream_handleMessage", "_AssistantStream_handleRunStep", "_AssistantStream_handleEvent", "_AssistantStream_accumulateRunStep", "data", "_AssistantStream_accumulateMessage", "_AssistantStream_accumulateContent", "_AssistantStream_handleRun", "init_resource", "init_headers", "init_sleep", "init_path", "APIResource", "path", "buildHeaders", "sleep", "Threads", "init_threads", "init_resource", "init_messages", "init_headers", "init_path", "APIResource", "Messages", "buildHeaders", "path", "init_resource", "init_threads", "APIResource", "Threads", "Completions", "init_completions", "init_resource", "APIResource", "init_resource", "init_headers", "init_path", "APIResource", "path", "buildHeaders", "Files", "init_files", "init_resource", "init_headers", "init_uploads", "init_path", "APIResource", "path", "buildHeaders", "init_resource", "init_files", "init_headers", "init_path", "APIResource", "Files", "path", "buildHeaders", "init_resource", "init_path", "APIResource", "path", "init_resource", "init_path", "APIResource", "path", "Embeddings", "init_embeddings", "init_resource", "init_utils", "APIResource", "loggerFor", "response", "init_resource", "init_path", "APIResource", "path", "Runs", "init_runs", "init_resource", "init_path", "APIResource", "path", "init_resource", "init_runs", "init_path", "APIResource", "Runs", "path", "Files", "init_files", "init_resource", "init_headers", "init_sleep", "init_error", "init_uploads", "init_path", "APIResource", "multipartFormRequestOptions", "path", "buildHeaders", "file", "sleep", "APIConnectionTimeoutError", "init_resource", "APIResource", "init_resource", "APIResource", "init_resource", "APIResource", "init_resource", "init_path", "APIResource", "path", "init_resource", "APIResource", "Checkpoints", "init_checkpoints", "init_resource", "init_path", "APIResource", "path", "init_resource", "init_checkpoints", "init_path", "APIResource", "Checkpoints", "path", "init_resource", "APIResource", "init_resource", "APIResource", "Graders", "init_graders", "init_resource", "APIResource", "init_resource", "init_uploads", "APIResource", "multipartFormRequestOptions", "Models", "init_models", "init_resource", "init_path", "APIResource", "path", "init_resource", "APIResource", "init_resource", "init_headers", "init_path", "APIResource", "path", "buildHeaders", "init_resource", "APIResource", "Realtime", "init_realtime", "init_resource", "APIResource", "hasAutoParseableInput", "parseToolCall", "content", "output", "isAutoParsableTool", "tool", "name", "init_error", "init_error", "__classPrivateFieldSet", "__classPrivateFieldGet", "APIUserAbortError", "_ResponseStream_beginRequest", "_ResponseStream_addEvent", "name", "event", "_ResponseStream_endRequest", "_ResponseStream_accumulateResponse", "init_resource", "init_path", "APIResource", "path", "init_resource", "APIResource", "init_resource", "init_headers", "init_path", "APIResource", "path", "buildHeaders", "Content", "init_content", "init_resource", "init_headers", "init_path", "APIResource", "path", "buildHeaders", "Content", "init_content", "init_resource", "init_headers", "init_path", "APIResource", "version", "path", "buildHeaders", "init_versions", "init_resource", "init_content", "init_uploads", "init_path", "APIResource", "Content", "path", "version", "init_resource", "init_content", "init_versions", "init_uploads", "init_path", "APIResource", "Content", "path", "init_resource", "init_uploads", "init_path", "APIResource", "path", "multipartFormRequestOptions", "init_uploads", "init_resource", "init_path", "APIResource", "path", "init_resource", "init_headers", "init_sleep", "init_path", "APIResource", "path", "buildHeaders", "sleep", "Files", "init_files", "init_resource", "init_headers", "init_utils", "init_path", "APIResource", "path", "buildHeaders", "file", "sleep", "init_resource", "init_files", "init_headers", "init_path", "APIResource", "Files", "buildHeaders", "path", "init_resource", "init_headers", "init_uploads", "init_path", "APIResource", "multipartFormRequestOptions", "path", "buildHeaders", "init_error", "init_resource", "init_headers", "APIResource", "__classPrivateFieldGet", "buildHeaders", "timestamp", "isValid", "_Webhooks_getRequiredHeader", "name", "init_webhooks", "init_webhooks", "init_resources", "init_chat", "init_shared", "init_audio", "init_batches", "init_completions", "init_embeddings", "init_files", "init_graders", "init_models", "init_realtime", "init_uploads", "init_webhooks", "init_client", "init_uuid", "init_values", "init_sleep", "init_errors", "init_detect_platform", "init_shims", "init_request_options", "init_query", "init_version", "init_error", "init_uploads", "init_resources", "init_api_promise", "init_batches", "init_completions", "init_embeddings", "init_files", "init_models", "init_audio", "init_chat", "init_graders", "init_realtime", "init_headers", "init_env", "init_log", "readEnv", "apiKey", "Completions", "Chat", "Embeddings", "Files", "Audio", "Models", "Graders", "Batches", "Realtime", "isRunningInBrowser", "_a", "parseLogLevel", "getDefaultFetch", "__classPrivateFieldSet", "FallbackEncoder", "line", "buildHeaders", "stringifyQuery", "VERSION", "uuid4", "error", "APIError", "path", "__classPrivateFieldGet", "url", "isAbsoluteURL", "isEmptyObj", "opts", "APIPromise", "loggerFor", "formatRequestDetails", "APIUserAbortError", "castToError", "isAbortError", "APIConnectionTimeoutError", "APIConnectionError", "name", "CancelReadableStream", "shouldRetry", "retryMessage", "err", "safeJSON", "Page", "sleep", "validatePositiveInteger", "getPlatformHeaders", "ReadableStreamFrom", "NotFoundError", "ConflictError", "RateLimitError", "BadRequestError", "AuthenticationError", "InternalServerError", "PermissionDeniedError", "UnprocessableEntityError", "toFile", "init_headers", "init_error", "init_utils", "init_client", "readEnv", "apiKey", "buildHeaders", "APIConnectionError", "APIConnectionTimeoutError", "APIError", "APIPromise", "APIUserAbortError", "AuthenticationError", "BadRequestError", "ConflictError", "InternalServerError", "NotFoundError", "PermissionDeniedError", "RateLimitError", "UnprocessableEntityError", "toFile", "init_client", "init_uploads", "init_api_promise", "init_error", "text", "text", "init_schema", "isAiGatewayReady", "aiGatewayComplete", "text", "logApiUsage", "init_dist", "crypto", "text", "url", "crypto", "limit", "index", "map", "init_types", "url", "match", "array", "object", "require_src", "spawn", "name", "data", "error", "str", "parse", "json", "end", "extend", "defaults", "promise", "$", "require_constants", "path", "require_src", "$", "str", "parse", "args", "url", "update", "url", "host", "normalizePlatform", "sleep", "host", "path", "str", "url", "init_client", "url", "record", "html", "data", "scraperKey", "ctrl", "timer", "isRapidApiConfigured", "rapidApiRequest", "index", "path", "host", "url", "crypto", "errors", "init_types", "limit", "match", "text", "text", "escapeRegex", "url", "text", "duration", "meta", "count", "scopes", "pool", "text", "CALLING_CENTRIC_KEYWORDS", "text", "match", "pickString", "asRecord", "first", "url", "data", "host", "data", "url", "meta", "init_client", "url", "host", "html", "url", "url", "meta", "Readable", "randomUUID", "file", "url", "Readable", "match", "url", "param", "host", "map", "name", "cached", "defaults", "next", "url", "init_src", "match", "aliases", "desc", "url", "init_src", "sum", "limit", "pool", "crypto", "text", "apiKey", "cached", "makeRequest", "url", "limit", "slice", "host", "YT_HOSTS", "first", "sum", "pool", "max", "import_express", "router", "init_schema", "init_src", "data", "meta", "name", "require_types", "SelectorType", "AttributeAction", "require_parse", "isTraversal", "str", "isWhitespace", "parse", "subselects", "getName", "match", "name", "action", "data", "require_stringify", "__spreadArray", "stringify", "index", "str", "__createBinding", "desc", "__exportStar", "exports", "trueFunc", "require_bom_handling", "str", "require_internal", "Buffer", "iconv", "codec", "str", "require_utf32", "Buffer", "iconv", "codec", "str", "require_utf16", "Buffer", "str", "iconv", "codec", "require_utf7", "Buffer", "iconv", "codec", "str", "base64Regex", "i", "require_sbcs_codec", "Buffer", "iconv", "codec", "str", "require_sbcs_data", "require_sbcs_data_generated", "require_dbcs_codec", "Buffer", "iconv", "i", "val", "codec", "str", "require_shiftjis", "require_eucjp", "require_cp936", "require_gbk_added", "require_gb18030_ranges", "require_cp949", "require_cp950", "require_big5_added", "require_dbcs_data", "require_encodings", "require_streams", "Buffer", "require_lib", "Buffer", "iconv", "encode", "str", "decode", "codec", "getDecoder", "stream_module", "name", "require_symbols", "delay", "require_errors", "RequestAbortedError", "data", "require_constants", "index", "assert", "net", "stringify", "noop", "isBlobLike", "object", "url", "port", "path", "host", "idx", "isAsyncIterable", "stream", "val", "ReadableStreamFrom", "name", "err", "pool", "util", "version", "port", "host", "error", "path", "require_request", "assert", "isBlobLike", "Request", "path", "error", "val", "data", "val", "interceptors", "data", "data", "err", "net", "assert", "util", "session", "hostname", "host", "port", "require_utils", "filter", "require_constants", "Buffer", "Buffer", "require_constants", "require_encoding", "textDecoder", "assert", "char", "data", "str", "assert", "url", "char", "name", "str", "module", "assert", "types", "NULL", "min", "attributes", "index", "keys", "desc", "name", "required", "require_util", "performance", "ReadableStreamFrom", "assert", "location", "url", "object", "timestamp", "isAborted", "name", "index", "data", "char", "FormData", "name", "entry", "assert", "name", "char", "promise", "util", "ReadableStreamFrom", "FormData", "assert", "max", "noop", "object", "str", "name", "chunk", "value", "promise", "data", "assert", "util", "RequestAbortedError", "Parser", "exports", "delay", "data", "head", "path", "host", "val", "assert", "util", "RequestAbortedError", "name", "session", "duration", "error", "path", "host", "val", "hostname", "port", "headers", "pipe", "require_client", "assert", "net", "util", "Request", "noop", "Client", "url", "connect", "host", "hostname", "port", "err", "data", "next", "client", "Client", "util", "Pool", "origin", "error", "Pool", "util", "pool", "dispatcher", "Client", "util", "origin", "error", "Pool", "Client", "util", "result", "Buffer", "net", "port", "error", "Buffer", "data", "version", "port", "net", "URL", "Pool", "url", "socket", "Pool", "RequestAbortedError", "Client", "noop", "data", "path", "host", "url", "port", "origin", "protocol", "opts", "buildHeaders", "url", "hostname", "port", "assert", "shouldRetry", "end", "retry", "Client", "assert", "Readable", "RequestAbortedError", "util", "ReadableStreamFrom", "noop", "limit", "consume", "end", "assert", "Readable", "RequestAbortedError", "util", "noop", "data", "RequestAbortedError", "self", "assert", "util", "noop", "res", "opaque", "data", "Readable", "assert", "RequestAbortedError", "util", "noop", "body", "assert", "util", "data", "assert", "util", "data", "match", "clone", "index", "mockDispatch", "path", "data", "name", "error", "delay", "aborted", "url", "data", "replyParameters", "newMockDispatch", "error", "Client", "url", "error", "number", "Pool", "path", "path", "result", "crypto", "url", "normalizeHeaders", "writeFile", "readFile", "setTimeout", "clearTimeout", "normalizeHeaders", "url", "match", "hash", "path", "data", "error", "error", "self", "url", "require_global", "assert", "util", "assert", "noop", "path", "error", "name", "RequestAbortedError", "isIP", "normalizeHeaders", "host", "hostname", "port", "timestamp", "record", "meta", "normalizeHeaders", "val", "name", "cacheKey", "date", "util", "noop", "cacheKey", "date", "val", "index", "key", "entries", "entry", "assert", "require_cache", "assert", "Readable", "util", "normalizeHeaders", "name", "cacheKey", "aborted", "isStale", "handleResult", "headers", "success", "opts", "result", "error", "RequestAbortedError", "util", "normalizeHeaders", "name", "opts", "cacheKey", "VERSION", "url", "assert", "util", "object", "name", "exists", "array", "Headers", "require_response", "Headers", "util", "isAborted", "assert", "Response", "data", "url", "name", "require_request", "Headers", "util", "assert", "Request", "makeRequest", "window", "name", "assert", "crypto", "metadata", "require_fetch", "Request", "isAborted", "assert", "Readable", "error", "fetch", "finalizeResponse", "url", "path", "val", "location", "name", "require_util", "assert", "require_cache", "assert", "Request", "Cache", "index", "promise", "request", "cache", "Cache", "cache", "require_constants", "require_util", "name", "path", "domain", "date", "stringify", "require_parse", "assert", "name", "stringify", "Headers", "name", "attributes", "str", "data", "CloseEvent", "require_constants", "require_util", "data", "name", "url", "randomFillSync", "buffer", "_size", "data", "head", "require_connection", "makeRequest", "Headers", "assert", "crypto", "url", "object", "data", "assert", "error", "data", "first", "next", "body", "head", "node", "data", "CloseEvent", "WebSocket", "data", "url", "error", "data", "url", "promise", "string", "error", "require_util", "LF", "CR", "line", "makeRequest", "url", "error", "Client", "Pool", "errors", "util", "url", "path", "fetch", "CloseEvent", "WebSocket", "require_utils", "string", "char", "map", "name", "require_parser", "require_serializer", "name", "parse", "serialize", "string", "require_media_typer", "parse", "string", "param", "index", "match", "val", "str", "require_db", "require_mime_db", "require_mime_types", "db", "match", "str", "charset", "path", "extension", "types", "require_type_is", "normalize", "types", "val", "require_utils", "str", "name", "encode", "getDecoder", "data", "decode", "path", "self", "data", "end", "Readable", "getDecoder", "noop", "end", "self", "val", "data", "require_urlencoded", "getDecoder", "self", "require_lib", "util", "file", "placeholder", "remove", "errors", "file", "is", "next", "remove", "file", "placeholder", "err", "path", "crypto", "file", "err", "require_stream", "ownKeys", "object", "_defineProperty", "Buffer", "custom", "first", "str", "err", "self", "require_errors", "str", "name", "name", "require_node", "Stream", "Buffer", "object", "realHasInstance", "get", "last", "count", "set", "keys", "Readable", "get", "self", "set", "Buffer", "Buffer", "self", "end", "noop", "onlegacyfinish", "onfinish", "onend", "onerror", "onclose", "onrequest", "_defineProperty", "data", "next", "error", "promise", "createReadableStreamAsyncIterator", "error", "self", "ownKeys", "object", "_defineProperty", "Readable", "next", "Readable", "EElistenerCount", "Stream", "Buffer", "debug", "get", "set", "index", "self", "n", "data", "noop", "pipe", "error", "require_readable", "Stream", "toString", "string", "undefined", "min", "desc", "index", "str", "f", "ArrayBuffer", "ArrayBufferView", "array", "end", "clamp", "max", "Int8Array", "Uint8Array", "Uint8ClampedArray", "Int16Array", "Uint16Array", "Int32Array", "Uint32Array", "Float32Array", "Float64Array", "DataView", "arrayType", "next", "file", "data", "file", "name", "multer", "require_symbols", "require_timers", "delay", "require_errors", "RequestAbortedError", "data", "require_constants", "require_tree", "index", "require_util", "assert", "net", "stringify", "noop", "isBlobLike", "object", "url", "port", "path", "host", "idx", "isAsyncIterable", "stream", "val", "name", "ReadableStreamFrom", "err", "require_stats", "pool", "require_diagnostics", "util", "version", "port", "host", "error", "path", "require_request", "assert", "isBlobLike", "val", "Request", "path", "error", "require_dispatcher", "interceptors", "require_dispatcher_base", "data", "err", "require_connect", "net", "assert", "util", "session", "hostname", "host", "port", "require_utils", "filter", "require_constants", "require_llhttp_wasm", "Buffer", "require_llhttp_simd_wasm", "Buffer", "require_constants", "require_global", "require_encoding", "textDecoder", "require_infra", "assert", "char", "data", "str", "require_data_url", "assert", "url", "char", "name", "str", "require_webidl", "assert", "types", "NULL", "min", "attributes", "index", "keys", "desc", "name", "required", "require_util", "performance", "ReadableStreamFrom", "assert", "location", "url", "object", "timestamp", "isAborted", "name", "index", "data", "char", "require_formdata", "FormData", "name", "entry", "require_formdata_parser", "assert", "name", "char", "require_runtime_features", "require_body", "util", "ReadableStreamFrom", "FormData", "assert", "max", "noop", "object", "str", "name", "chunk", "value", "promise", "data", "require_client_h1", "assert", "util", "RequestAbortedError", "Parser", "exports", "delay", "data", "head", "path", "host", "val", "require_client_h2", "assert", "util", "RequestAbortedError", "session", "duration", "error", "noop", "path", "host", "val", "hostname", "port", "headers", "stream", "responseReceived", "pipe", "require_client", "assert", "net", "util", "Request", "noop", "Client", "url", "connect", "host", "hostname", "port", "err", "require_fixed_queue", "data", "next", "require_pool_base", "client", "require_pool", "Client", "util", "Pool", "origin", "error", "require_balanced_pool", "Pool", "util", "pool", "require_round_robin_pool", "Client", "util", "origin", "error", "require_agent", "Pool", "Client", "util", "origin", "require_socks5_utils", "Buffer", "net", "before", "after", "port", "error", "require_socks5_client", "Buffer", "data", "version", "port", "require_socks5_proxy_agent", "net", "URL", "Pool", "url", "pool", "require_proxy_agent", "Pool", "RequestAbortedError", "Client", "noop", "data", "path", "host", "url", "port", "origin", "protocol", "opts", "buildHeaders", "require_env_http_proxy_agent", "url", "hostname", "port", "require_retry_handler", "assert", "shouldRetry", "end", "require_retry_agent", "retry", "require_h2c_client", "Client", "require_readable", "assert", "Readable", "RequestAbortedError", "util", "ReadableStreamFrom", "noop", "limit", "consume", "end", "require_api_request", "assert", "Readable", "RequestAbortedError", "util", "noop", "data", "require_abort_signal", "RequestAbortedError", "self", "require_api_stream", "assert", "util", "noop", "res", "opaque", "data", "require_api_pipeline", "Readable", "assert", "RequestAbortedError", "util", "noop", "body", "require_api_upgrade", "assert", "util", "data", "require_api_connect", "assert", "util", "data", "require_api", "require_mock_errors", "require_mock_symbols", "require_mock_utils", "match", "clone", "index", "mockDispatch", "path", "data", "name", "error", "delay", "aborted", "url", "require_mock_interceptor", "data", "replyParameters", "newMockDispatch", "error", "require_mock_client", "Client", "require_mock_call_history", "url", "error", "number", "require_mock_pool", "Pool", "require_pending_interceptors_formatter", "path", "require_mock_agent", "path", "dispatcher", "require_snapshot_utils", "crypto", "url", "normalizeHeaders", "require_snapshot_recorder", "writeFile", "readFile", "setTimeout", "clearTimeout", "normalizeHeaders", "url", "match", "hash", "path", "data", "error", "require_snapshot_agent", "util", "error", "self", "url", "require_global", "require_decorator_handler", "assert", "require_redirect_handler", "util", "assert", "noop", "path", "error", "name", "require_redirect", "require_response_error", "require_retry", "require_dump", "RequestAbortedError", "require_dns", "isIP", "normalizeHeaders", "host", "hostname", "port", "timestamp", "record", "meta", "require_cache", "normalizeHeaders", "val", "name", "cacheKey", "require_date", "date", "require_cache_handler", "util", "noop", "cacheKey", "date", "require_memory_cache_store", "val", "index", "key", "entries", "entry", "require_cache_revalidation_handler", "assert", "require_cache", "assert", "Readable", "util", "normalizeHeaders", "name", "cacheKey", "aborted", "isStale", "handleResult", "headers", "success", "opts", "result", "require_decompress", "error", "name", "require_deduplication_handler", "RequestAbortedError", "require_deduplicate", "util", "normalizeHeaders", "name", "opts", "cacheKey", "require_sqlite_cache_store", "VERSION", "url", "require_headers", "assert", "util", "object", "name", "exists", "array", "Headers", "require_response", "Headers", "util", "isAborted", "assert", "Response", "data", "url", "name", "require_request", "Headers", "util", "assert", "Request", "makeRequest", "window", "name", "require_subresource_integrity", "assert", "crypto", "metadata", "require_fetch", "Request", "isAborted", "assert", "Readable", "val", "name", "error", "fetch", "finalizeResponse", "url", "path", "body", "location", "require_util", "assert", "require_cache", "assert", "Request", "Cache", "index", "promise", "request", "cache", "require_cachestorage", "Cache", "cache", "require_constants", "require_util", "name", "path", "domain", "date", "stringify", "require_parse", "assert", "name", "require_cookies", "stringify", "Headers", "name", "attributes", "str", "require_events", "data", "CloseEvent", "require_constants", "require_util", "data", "name", "url", "require_frame", "data", "buffer", "head", "require_connection", "makeRequest", "Headers", "assert", "crypto", "url", "object", "require_permessage_deflate", "data", "require_receiver", "assert", "error", "data", "first", "next", "body", "require_sender", "head", "node", "data", "require_websocket", "CloseEvent", "WebSocket", "data", "url", "require_websocketerror", "error", "require_websocketstream", "data", "url", "promise", "string", "error", "require_util", "require_eventsource_stream", "LF", "CR", "line", "end", "slice", "count", "first", "require_eventsource", "makeRequest", "url", "error", "require_undici", "Client", "Pool", "errors", "util", "url", "path", "fetch", "CloseEvent", "WebSocket", "date", "SunCalc", "time", "set", "name", "min", "max", "todayUtc", "init_types", "sleep", "url", "apiKey", "map", "YT_API_BASE", "data", "init_types", "init_src", "map", "apiKey", "data", "url", "name", "config", "external_exports", "val", "opts", "error", "$constructor", "name", "initializer", "_a", "config", "globalConfig", "NEVER", "$ZodAsyncError", "init_core", "util_exports", "BIGINT_FORMAT_RANGES", "Class", "NUMBER_FORMAT_RANGES", "aborted", "allowsEval", "assert", "assertEqual", "assertIs", "assertNever", "assertNotEqual", "assignProp", "cached", "captureStackTrace", "cleanEnum", "cleanRegex", "clone", "createTransparentProxy", "defineLazy", "esc", "escapeRegex", "extend", "finalizeIssue", "floatSafeRemainder", "getElementAtPath", "getEnumValues", "getLengthableOrigin", "getParsedType", "getSizableOrigin", "isObject", "isPlainObject", "issue", "joinValues", "jsonStringifyReplacer", "merge", "normalizeParams", "nullish", "numKeys", "omit", "optionalKeys", "parsedType", "partial", "pick", "prefixIssues", "primitiveTypes", "promiseAllObject", "propertyKeyTypes", "randomString", "required", "slugify", "stringifyPrimitive", "unwrapMessage", "val", "array", "set", "end", "match", "object", "prop", "path", "str", "data", "_a", "config", "base64", "base64url", "hex", "init_util", "flattenError", "error", "issue", "formatError", "toDotPath", "path", "prettifyError", "initializer", "$ZodError", "$ZodRealError", "init_errors", "init_core", "init_util", "jsonStringifyReplacer", "$constructor", "_parse", "parse", "_parseAsync", "parseAsync", "_safeParse", "safeParse", "_safeParseAsync", "safeParseAsync", "init_parse", "init_core", "init_errors", "init_util", "$ZodAsyncError", "finalizeIssue", "config", "captureStackTrace", "$ZodRealError", "$ZodError", "regexes_exports", "base64", "base64url", "bigint", "boolean", "browserEmail", "cidrv4", "cidrv6", "cuid", "cuid2", "date", "datetime", "domain", "duration", "e164", "email", "emoji", "extendedDuration", "guid", "hostname", "html5Email", "integer", "ipv4", "ipv6", "ksuid", "lowercase", "nanoid", "_null", "number", "rfc5322Email", "string", "time", "ulid", "_undefined", "unicodeEmail", "uppercase", "uuid", "uuid4", "uuid6", "uuid7", "xid", "_emoji", "timeSource", "timeRegex", "dateSource", "init_regexes", "init_util", "version", "escapeRegex", "handleCheckPropertyResult", "prefixIssues", "$ZodCheck", "numericOriginMap", "$ZodCheckLessThan", "$ZodCheckGreaterThan", "$ZodCheckMultipleOf", "$ZodCheckNumberFormat", "$ZodCheckBigIntFormat", "$ZodCheckMaxSize", "$ZodCheckMinSize", "$ZodCheckSizeEquals", "$ZodCheckMaxLength", "$ZodCheckMinLength", "$ZodCheckLengthEquals", "$ZodCheckStringFormat", "$ZodCheckRegex", "$ZodCheckLowerCase", "$ZodCheckUpperCase", "$ZodCheckIncludes", "$ZodCheckStartsWith", "$ZodCheckEndsWith", "$ZodCheckProperty", "$ZodCheckMimeType", "$ZodCheckOverwrite", "init_checks", "init_core", "init_regexes", "init_util", "$constructor", "_a", "inst", "floatSafeRemainder", "NUMBER_FORMAT_RANGES", "integer", "BIGINT_FORMAT_RANGES", "val", "nullish", "getSizableOrigin", "getLengthableOrigin", "lowercase", "uppercase", "escapeRegex", "result", "Doc", "init_doc", "line", "version", "init_versions", "isValidBase64", "data", "isValidBase64URL", "base64url", "base64", "isValidJWT", "handleArrayResult", "index", "prefixIssues", "optionalKeys", "unrecognized", "r", "handleUnionResults", "aborted", "finalizeIssue", "config", "mergeValues", "isPlainObject", "handleIntersectionResults", "handleTupleResult", "handleMapResult", "propertyKeyTypes", "handleSetResult", "handleDefaultResult", "handleNonOptionalResult", "handlePipeResult", "next", "handleReadonlyResult", "handleRefineResult", "issue", "$ZodType", "$ZodString", "$ZodStringFormat", "$ZodGUID", "$ZodUUID", "$ZodEmail", "$ZodURL", "$ZodEmoji", "$ZodNanoID", "$ZodCUID", "$ZodCUID2", "$ZodULID", "$ZodXID", "$ZodKSUID", "$ZodISODateTime", "$ZodISODate", "$ZodISOTime", "$ZodISODuration", "$ZodIPv4", "$ZodIPv6", "$ZodCIDRv4", "$ZodCIDRv6", "$ZodBase64", "$ZodBase64URL", "$ZodE164", "$ZodJWT", "$ZodCustomStringFormat", "$ZodNumber", "$ZodNumberFormat", "$ZodBoolean", "$ZodBigInt", "$ZodBigIntFormat", "$ZodSymbol", "$ZodUndefined", "$ZodNull", "$ZodAny", "$ZodUnknown", "$ZodNever", "$ZodVoid", "$ZodDate", "$ZodArray", "$ZodObject", "$ZodUnion", "$ZodDiscriminatedUnion", "$ZodIntersection", "$ZodTuple", "$ZodRecord", "$ZodMap", "$ZodSet", "$ZodEnum", "$ZodLiteral", "$ZodFile", "$ZodTransform", "$ZodOptional", "$ZodNullable", "$ZodDefault", "$ZodPrefault", "$ZodNonOptional", "$ZodSuccess", "$ZodCatch", "$ZodNaN", "$ZodPipe", "$ZodReadonly", "$ZodTemplateLiteral", "$ZodFunction", "$ZodPromise", "$ZodLazy", "$ZodCustom", "init_schemas", "init_checks", "init_core", "init_doc", "init_parse", "init_regexes", "init_util", "init_versions", "$constructor", "_a", "version", "checks", "isAborted", "$ZodAsyncError", "checkResult", "canary", "result", "defineLazy", "safeParse", "safeParseAsync", "string", "_", "$ZodCheckStringFormat", "guid", "uuid", "email", "url", "emoji", "nanoid", "cuid", "cuid2", "ulid", "xid", "ksuid", "datetime", "date", "time", "duration", "ipv4", "ipv6", "cidrv4", "cidrv6", "e164", "number", "$ZodCheckNumberFormat", "boolean", "bigint", "$ZodCheckBigIntFormat", "_undefined", "_null", "desc", "cached", "isObject", "Doc", "esc", "globalConfig", "allowsEval", "cleanRegex", "first", "results", "val", "map", "left", "right", "keyResult", "valueResult", "getEnumValues", "escapeRegex", "output", "end", "primitiveTypes", "parse", "parseAsync", "$ZodCheck", "init_ar", "init_util", "init_az", "init_util", "init_be", "init_util", "init_util", "init_ca", "init_util", "init_cs", "init_util", "init_util", "init_de", "init_util", "en_default", "error", "init_en", "init_util", "issue", "parsedType", "stringifyPrimitive", "joinValues", "init_eo", "init_util", "init_es", "init_util", "init_fa", "init_util", "init_fi", "init_util", "init_fr", "init_util", "init_fr_CA", "init_util", "init_he", "init_util", "init_hu", "init_util", "init_util", "init_id", "init_util", "init_util", "init_it", "init_util", "init_ja", "init_util", "init_util", "init_util", "init_kh", "init_ko", "init_util", "init_util", "init_mk", "init_util", "init_ms", "init_util", "init_nl", "init_util", "init_no", "init_util", "init_ota", "init_util", "init_ps", "init_util", "init_pl", "init_util", "init_pt", "init_util", "init_ru", "init_util", "init_sl", "init_util", "init_sv", "init_util", "init_ta", "init_util", "init_th", "init_util", "init_tr", "init_util", "init_util", "init_ua", "init_ur", "init_util", "init_util", "init_vi", "init_util", "init_zh_CN", "init_util", "init_zh_TW", "init_util", "init_util", "init_locales", "init_ar", "init_az", "init_be", "init_ca", "init_cs", "init_de", "init_en", "init_eo", "init_es", "init_fa", "init_fi", "init_fr", "init_fr_CA", "init_he", "init_hu", "init_id", "init_it", "init_ja", "init_kh", "init_ko", "init_mk", "init_ms", "init_nl", "init_no", "init_ota", "init_ps", "init_pl", "init_pt", "init_ru", "init_sl", "init_sv", "init_ta", "init_th", "init_tr", "init_ua", "init_ur", "init_vi", "init_zh_CN", "init_zh_TW", "registry", "$ZodRegistry", "_a", "globalRegistry", "init_registries", "meta", "_string", "Class", "normalizeParams", "_coercedString", "_email", "_guid", "_uuid", "_uuidv4", "_uuidv6", "_uuidv7", "_url", "_emoji", "_nanoid", "_cuid", "_cuid2", "_ulid", "_xid", "_ksuid", "_ipv4", "_ipv6", "_cidrv4", "_cidrv6", "_base64", "_base64url", "_e164", "_jwt", "_isoDateTime", "_isoDate", "_isoTime", "_isoDuration", "_number", "_coercedNumber", "_int", "_float32", "_float64", "_int32", "_uint32", "_boolean", "_coercedBoolean", "_bigint", "_coercedBigint", "_int64", "_uint64", "_symbol", "_undefined", "_null", "_any", "_unknown", "_never", "_void", "_date", "_coercedDate", "_nan", "_lt", "$ZodCheckLessThan", "_lte", "_gt", "$ZodCheckGreaterThan", "_gte", "_positive", "_negative", "_nonpositive", "_nonnegative", "_multipleOf", "$ZodCheckMultipleOf", "_maxSize", "$ZodCheckMaxSize", "_minSize", "$ZodCheckMinSize", "_size", "$ZodCheckSizeEquals", "_maxLength", "$ZodCheckMaxLength", "_minLength", "$ZodCheckMinLength", "_length", "$ZodCheckLengthEquals", "_regex", "$ZodCheckRegex", "_lowercase", "$ZodCheckLowerCase", "_uppercase", "$ZodCheckUpperCase", "_includes", "$ZodCheckIncludes", "_startsWith", "$ZodCheckStartsWith", "_endsWith", "$ZodCheckEndsWith", "_property", "$ZodCheckProperty", "_mime", "types", "$ZodCheckMimeType", "_overwrite", "$ZodCheckOverwrite", "_normalize", "_trim", "_toLowerCase", "_toUpperCase", "slugify", "_array", "_file", "_custom", "_refine", "issue", "$ZodCheck", "globalRegistry", "_stringbool", "$ZodBoolean", "$ZodString", "codec", "data", "_stringFormat", "val", "init_api", "init_checks", "init_registries", "init_schemas", "init_util", "globalRegistry", "process", "_a", "parent", "meta", "isTransforming", "root", "id", "schema", "init_to_json_schema", "init_registries", "toJSONSchema", "registry", "ctx", "process", "init_to_json_schema", "init_util", "json", "getEnumValues", "val", "file", "init_to_json_schema", "init_json_schema", "init_core", "init_parse", "init_errors", "init_schemas", "init_checks", "init_versions", "init_util", "init_regexes", "init_locales", "init_registries", "init_doc", "init_api", "init_to_json_schema", "init_json_schema", "checks_exports", "_endsWith", "_gt", "_gte", "_includes", "_length", "_lowercase", "_lt", "_lte", "_maxLength", "_maxSize", "_mime", "_minLength", "_minSize", "_multipleOf", "_negative", "_nonnegative", "_nonpositive", "_normalize", "_overwrite", "_positive", "_property", "_regex", "_size", "_startsWith", "_toLowerCase", "_toUpperCase", "_trim", "_uppercase", "init_checks", "init_core", "iso_exports", "ZodISODate", "ZodISODateTime", "ZodISODuration", "ZodISOTime", "date", "datetime", "duration", "time", "_isoDateTime", "_isoDate", "_isoTime", "_isoDuration", "init_iso", "init_core", "init_schemas", "$constructor", "$ZodISODateTime", "ZodStringFormat", "$ZodISODate", "$ZodISOTime", "$ZodISODuration", "initializer", "ZodError", "ZodRealError", "init_errors", "init_core", "init_util", "$ZodError", "formatError", "flattenError", "issue", "jsonStringifyReplacer", "issues", "$constructor", "parse", "parseAsync", "safeParse", "safeParseAsync", "encode", "init_parse", "init_core", "init_errors", "_parse", "ZodRealError", "_parseAsync", "_safeParse", "_safeParseAsync", "schemas_exports", "ZodAny", "ZodArray", "ZodBase64", "ZodBase64URL", "ZodBigInt", "ZodBigIntFormat", "ZodBoolean", "ZodCIDRv4", "ZodCIDRv6", "ZodCUID", "ZodCUID2", "ZodCatch", "ZodCustom", "ZodCustomStringFormat", "ZodDate", "ZodDefault", "ZodDiscriminatedUnion", "ZodE164", "ZodEmail", "ZodEmoji", "ZodEnum", "ZodFile", "ZodFunction", "ZodGUID", "ZodIPv4", "ZodIPv6", "ZodIntersection", "ZodJWT", "ZodKSUID", "ZodLazy", "ZodLiteral", "ZodMap", "ZodNaN", "ZodNanoID", "ZodNever", "ZodNonOptional", "ZodNull", "ZodNullable", "ZodNumber", "ZodNumberFormat", "ZodObject", "ZodOptional", "ZodPipe", "ZodPrefault", "ZodPromise", "ZodReadonly", "ZodRecord", "ZodSet", "ZodString", "ZodStringFormat", "ZodSuccess", "ZodSymbol", "ZodTemplateLiteral", "ZodTransform", "ZodTuple", "ZodType", "ZodULID", "ZodURL", "ZodUUID", "ZodUndefined", "ZodUnion", "ZodUnknown", "ZodVoid", "ZodXID", "_ZodString", "_default", "_function", "any", "array", "base64", "base64url", "bigint", "boolean", "_catch", "check", "cidrv4", "cidrv6", "cuid", "cuid2", "custom", "date", "describe", "discriminatedUnion", "e164", "email", "emoji", "_enum", "file", "float32", "float64", "guid", "hex", "hostname", "_instanceof", "int", "int32", "int64", "intersection", "ipv4", "ipv6", "json", "jwt", "keyof", "ksuid", "lazy", "literal", "looseObject", "mac", "map", "meta", "nan", "nanoid", "nativeEnum", "never", "nonoptional", "_null", "nullable", "nullish", "number", "object", "optional", "partialRecord", "pipe", "prefault", "preprocess", "promise", "readonly", "record", "refine", "set", "strictObject", "string", "stringFormat", "stringbool", "success", "superRefine", "symbol", "templateLiteral", "transform", "tuple", "uint32", "uint64", "ulid", "_undefined", "union", "unknown", "url", "uuid", "uuidv4", "uuidv6", "uuidv7", "_void", "xid", "_string", "_email", "_guid", "_uuid", "_uuidv4", "_uuidv6", "_uuidv7", "_url", "regexes_exports", "util_exports", "_emoji", "_nanoid", "_cuid", "_cuid2", "_ulid", "_xid", "_ksuid", "_ipv4", "_ipv6", "_cidrv4", "_cidrv6", "_base64", "_base64url", "_e164", "_jwt", "_stringFormat", "_number", "_int", "_float32", "_float64", "_int32", "_uint32", "_boolean", "_bigint", "_int64", "_uint64", "_symbol", "_any", "_unknown", "_never", "_date", "_array", "$ZodType", "clone", "_file", "_nan", "$ZodCheck", "_custom", "_refine", "data", "jsonSchema", "init_schemas", "init_core", "init_to_json_schema", "init_checks", "init_iso", "init_parse", "$constructor", "def", "parse", "safeParse", "parseAsync", "safeParseAsync", "encode", "_overwrite", "globalRegistry", "$ZodString", "_regex", "_includes", "_startsWith", "_endsWith", "_minLength", "_maxLength", "_length", "_lowercase", "_uppercase", "_trim", "_normalize", "_toLowerCase", "_toUpperCase", "datetime", "time", "duration", "$ZodStringFormat", "$ZodEmail", "$ZodGUID", "$ZodUUID", "$ZodURL", "$ZodEmoji", "$ZodNanoID", "$ZodCUID", "$ZodCUID2", "$ZodULID", "$ZodXID", "$ZodKSUID", "$ZodIPv4", "$ZodIPv6", "$ZodCIDRv4", "$ZodCIDRv6", "$ZodBase64", "$ZodBase64URL", "$ZodE164", "$ZodJWT", "$ZodCustomStringFormat", "$ZodNumber", "_gt", "_gte", "_lt", "_lte", "_multipleOf", "$ZodNumberFormat", "$ZodBoolean", "$ZodBigInt", "$ZodBigIntFormat", "$ZodSymbol", "$ZodUndefined", "$ZodNull", "$ZodAny", "$ZodUnknown", "$ZodNever", "$ZodVoid", "$ZodDate", "$ZodArray", "$ZodUnion", "$ZodDiscriminatedUnion", "$ZodIntersection", "$ZodTuple", "$ZodRecord", "$ZodMap", "_minSize", "_maxSize", "_size", "$ZodSet", "$ZodEnum", "$ZodLiteral", "$ZodFile", "types", "_mime", "$ZodTransform", "issue", "output", "$ZodOptional", "$ZodNullable", "$ZodDefault", "$ZodPrefault", "$ZodNonOptional", "$ZodSuccess", "$ZodCatch", "$ZodNaN", "$ZodPipe", "$ZodReadonly", "$ZodTemplateLiteral", "$ZodLazy", "$ZodPromise", "$ZodFunction", "$ZodCustom", "_stringbool", "ZodFirstPartyTypeKind", "init_compat", "init_core", "init_registries", "init_checks", "init_iso", "init_schemas", "schemas_exports", "checks_exports", "iso_exports", "coerce_exports", "bigint", "boolean", "date", "number", "string", "_coercedString", "ZodString", "_coercedNumber", "ZodNumber", "_coercedBoolean", "ZodBoolean", "_coercedBigint", "ZodBigInt", "_coercedDate", "ZodDate", "init_coerce", "init_core", "init_schemas", "init_external", "init_core", "init_schemas", "init_checks", "init_errors", "init_parse", "init_compat", "init_en", "init_locales", "init_iso", "init_coerce", "config", "en_default", "init_classic", "init_external", "init_v4", "init_classic", "str", "init_base64", "init_v4", "custom", "string", "isPlainObject", "isPlainObject", "init_base64", "isAbortError", "index", "prettifyError", "init_core", "$ZodError", "init_core", "$ZodError", "OK", "ERR", "error", "json", "match", "data", "isPlainObject", "OK", "ERR", "safeParse", "OK", "ERR", "optional", "val", "init_schemas", "init_v4", "clone", "init_env", "init_v4", "object", "string", "coerce_exports", "init_env", "SecurityErrorCode", "placeholder", "hasOwn", "init_v4", "object", "nullable", "number", "init_v4", "object", "number", "int", "string", "init_v4", "object", "array", "init_v4", "object", "record", "string", "nullable", "any", "count", "union", "literal", "string", "int", "init_v4", "init_v4", "object", "int", "init_v4", "object", "boolean", "string", "int", "number", "array", "init_v4", "_enum", "object", "discriminatedUnion", "unknown", "isObject", "init_v4", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "discriminatedUnion", "union", "init_v4", "object", "int", "string", "literal", "init_v4", "object", "string", "literal", "init_v4", "_enum", "object", "string", "literal", "init_v4", "_enum", "object", "init_v4", "object", "string", "int", "nullable", "literal", "init_v4", "object", "string", "int", "nullable", "literal", "init_v4", "object", "string", "int", "nullable", "literal", "init_v4", "object", "string", "int", "nullable", "literal", "init_v4", "object", "string", "nullable", "literal", "init_v4", "object", "literal", "string", "init_v4", "union", "object", "literal", "init_v4", "_enum", "object", "string", "literal", "init_v4", "union", "object", "nullable", "array", "string", "literal", "init_v4", "object", "literal", "string", "init_v4", "object", "boolean", "union", "string", "array", "literal", "lazy", "nullable", "init_v4", "_enum", "object", "int", "init_v4", "object", "literal", "int", "init_v4", "object", "boolean", "lazy", "array", "string", "literal", "init_v4", "_enum", "object", "int", "init_v4", "_enum", "object", "int", "init_v4", "object", "literal", "int", "init_v4", "_enum", "object", "string", "nullable", "init_v4", "_enum", "object", "nullable", "string", "init_v4", "object", "string", "literal", "init_v4", "object", "string", "literal", "init_v4", "object", "string", "literal", "init_v4", "discriminatedUnion", "union", "init_v4", "_enum", "object", "string", "nullable", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "_enum", "object", "string", "nullable", "init_v4", "object", "literal", "init_v4", "object", "init_v4", "object", "literal", "init_v4", "object", "int", "string", "init_v4", "_enum", "object", "string", "init_v4", "object", "array", "init_v4", "object", "array", "string", "int", "boolean", "literal", "init_v4", "object", "int", "string", "nullable", "record", "any", "init_v4", "object", "int", "string", "nullable", "record", "any", "init_v4", "object", "string", "lazy", "literal", "init_v4", "object", "string", "nullable", "literal", "init_v4", "_enum", "object", "nullable", "string", "init_v4", "object", "string", "literal", "init_v4", "_enum", "object", "string", "init_v4", "discriminatedUnion", "object", "literal", "union", "string", "array", "_enum", "init_v4", "_enum", "object", "string", "init_v4", "discriminatedUnion", "object", "literal", "union", "string", "array", "_enum", "nullable", "init_v4", "discriminatedUnion", "object", "literal", "_enum", "union", "array", "string", "init_v4", "_enum", "object", "string", "nullable", "init_v4", "object", "string", "literal", "init_v4", "object", "array", "int", "number", "string", "lazy", "literal", "init_v4", "discriminatedUnion", "_enum", "union", "any", "object", "array", "string", "nullable", "init_v4", "discriminatedUnion", "object", "literal", "union", "array", "string", "_enum", "any", "nullable", "lazy", "init_v4", "object", "nullable", "init_v4", "object", "literal", "init_v4", "object", "string", "literal", "init_v4", "union", "init_v4", "object", "int", "init_v4", "_enum", "object", "init_v4", "object", "string", "init_v4", "object", "string", "nullable", "number", "init_v4", "_enum", "object", "string", "int", "init_v4", "object", "array", "init_v4", "object", "nullable", "int", "string", "number", "lazy", "init_v4", "object", "number", "_enum", "string", "nullable", "lazy", "int", "init_v4", "object", "array", "init_v4", "object", "array", "string", "init_v4", "object", "string", "init_v4", "object", "int", "array", "init_v4", "object", "array", "string", "init_v4", "object", "int", "init_v4", "object", "array", "string", "init_v4", "object", "int", "init_v4", "object", "array", "string", "init_v4", "object", "int", "init_v4", "object", "array", "string", "init_v4", "object", "int", "init_v4", "object", "array", "string", "init_v4", "object", "int", "init_v4", "object", "nullable", "array", "string", "boolean", "int", "init_v4", "object", "string", "lazy", "init_v4", "object", "string", "int", "init_v4", "object", "string", "lazy", "literal", "init_v4", "object", "string", "lazy", "literal", "init_v4", "object", "string", "lazy", "literal", "init_v4", "_enum", "object", "init_v4", "_enum", "object", "string", "init_v4", "object", "string", "init_v4", "object", "literal", "init_v4", "object", "literal", "init_v4", "discriminatedUnion", "object", "literal", "union", "init_v4", "object", "string", "_enum", "lazy", "init_v4", "object", "string", "nullable", "int", "literal", "init_v4", "object", "nullable", "string", "int", "literal", "init_v4", "object", "nullable", "string", "int", "literal", "init_v4", "discriminatedUnion", "union", "init_v4", "union", "string", "array", "any", "_enum", "object", "nullable", "init_v4", "object", "nullable", "array", "int", "number", "string", "lazy", "init_v4", "object", "nullable", "array", "init_v4", "object", "nullable", "int", "init_v4", "object", "boolean", "init_v4", "union", "string", "array", "object", "literal", "init_v4", "object", "string", "literal", "init_v4", "object", "string", "record", "nullable", "any", "boolean", "init_v4", "object", "literal", "init_v4", "object", "literal", "init_v4", "object", "literal", "init_v4", "object", "int", "init_v4", "_enum", "object", "init_v4", "_enum", "object", "nullable", "string", "init_v4", "object", "array", "string", "int", "init_v4", "object", "array", "string", "int", "init_v4", "object", "string", "init_v4", "_enum", "object", "init_v4", "union", "string", "number", "array", "nullable", "any", "init_v4", "object", "string", "record", "init_v4", "_enum", "object", "init_v4", "_enum", "object", "init_v4", "object", "record", "string", "nullable", "any", "init_v4", "object", "int", "init_v4", "object", "string", "int", "number", "array", "init_v4", "_enum", "object", "init_v4", "object", "array", "string", "int", "init_v4", "_enum", "object", "init_v4", "object", "string", "record", "nullable", "any", "boolean", "_enum", "lazy", "union", "init_v4", "union", "string", "array", "object", "literal", "init_v4", "union", "string", "array", "object", "literal", "init_v4", "union", "string", "array", "object", "literal", "init_v4", "union", "object", "literal", "init_v4", "object", "string", "_enum", "lazy", "init_v4", "object", "boolean", "init_v4", "object", "string", "init_v4", "_enum", "union", "init_v4", "_enum", "init_v4", "object", "boolean", "literal", "init_v4", "_enum", "union", "init_v4", "object", "init_v4", "object", "boolean", "literal", "init_v4", "object", "literal", "init_v4", "object", "record", "string", "nullable", "any", "array", "boolean", "literal", "int", "lazy", "init_v4", "union", "string", "number", "array", "nullable", "any", "init_v4", "object", "literal", "init_v4", "object", "boolean", "literal", "number", "init_v4", "object", "nullable", "number", "init_v4", "union", "number", "any", "init_v4", "object", "nullable", "number", "init_v4", "union", "number", "any", "init_v4", "object", "nullable", "init_v4", "union", "string", "object", "any", "nullable", "boolean", "array", "lazy", "init_v4", "object", "boolean", "literal", "init_v4", "object", "string", "literal", "init_v4", "object", "string", "literal", "init_v4", "object", "number", "literal", "init_v4", "object", "int", "literal", "init_v4", "object", "int", "literal", "init_v4", "union", "init_v4", "object", "string", "record", "nullable", "any", "init_v4", "object", "array", "string", "literal", "int", "init_v4", "_enum", "object", "nullable", "string", "boolean", "array", "literal", "int", "lazy", "init_v4", "union", "object", "nullable", "string", "array", "any", "number", "record", "boolean", "int", "lazy", "init_v4", "object", "number", "nullable", "init_v4", "object", "nullable", "int", "lazy", "number", "boolean", "init_v4", "object", "string", "boolean", "init_v4", "object", "array", "int", "init_v4", "object", "nullable", "number", "record", "string", "any", "init_v4", "object", "string", "int", "init_v4", "init_schemas", "object", "number", "string", "any", "init_v4", "object", "int", "array", "boolean", "nullable", "string", "init_v4", "_enum", "object", "array", "int", "string", "nullable", "init_v4", "object", "string", "_enum", "lazy", "int", "init_v4", "_enum", "object", "nullable", "string", "array", "init_v4", "object", "nullable", "int", "init_v4", "object", "int", "string", "_enum", "array", "lazy", "nullable", "init_v4", "object", "string", "NEVER", "init_v4", "_enum", "object", "array", "string", "nullable", "union", "lazy", "literal", "init_v4", "object", "literal", "init_v4", "_enum", "object", "string", "nullable", "init_v4", "object", "array", "record", "string", "nullable", "any", "init_v4", "object", "int", "literal", "init_v4", "object", "int", "string", "nullable", "record", "any", "init_v4", "object", "string", "init_v4", "object", "string", "init_v4", "object", "nullable", "string", "init_v4", "_enum", "object", "string", "init_v4", "discriminatedUnion", "object", "literal", "int", "string", "init_v4", "object", "string", "lazy", "literal", "init_v4", "discriminatedUnion", "object", "literal", "int", "string", "init_v4", "object", "string", "lazy", "literal", "init_v4", "object", "string", "init_v4", "object", "literal", "init_v4", "object", "literal", "init_v4", "object", "literal", "init_v4", "object", "string", "literal", "lazy", "init_v4", "object", "nullable", "array", "string", "boolean", "init_v4", "object", "init_v4", "object", "nullable", "array", "string", "boolean", "number", "init_v4", "object", "nullable", "array", "string", "boolean", "number", "init_v4", "object", "init_v4", "union", "string", "number", "object", "array", "lazy", "boolean", "init_v4", "object", "nullable", "array", "string", "record", "any", "boolean", "number", "init_v4", "object", "string", "record", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "string", "record", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "string", "record", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "string", "record", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "string", "record", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "string", "record", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "string", "record", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "record", "string", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "string", "record", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "string", "record", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "string", "record", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "string", "record", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "string", "record", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "string", "record", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "string", "record", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "string", "record", "nullable", "array", "lazy", "boolean", "number", "literal", "init_v4", "object", "record", "string", "nullable", "array", "lazy", "boolean", "number", "literal", "discriminatedUnion", "init_v4", "object", "init_v4", "object", "record", "string", "nullable", "any", "int", "init_v4", "object", "string", "nullable", "init_v4", "object", "init_v4", "object", "nullable", "string", "array", "int", "number", "boolean", "init_v4", "object", "string", "nullable", "array", "int", "number", "boolean", "init_v4", "object", "init_v4", "object", "string", "literal", "discriminatedUnion", "lazy", "union", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "_enum", "object", "string", "init_v4", "object", "nullable", "string", "literal", "union", "lazy", "array", "_enum", "init_v4", "object", "string", "number", "int", "init_v4", "object", "nullable", "number", "int", "init_v4", "object", "literal", "init_v4", "object", "literal", "init_v4", "object", "literal", "init_v4", "object", "literal", "init_v4", "object", "literal", "string", "init_v4", "object", "nullable", "string", "literal", "union", "lazy", "array", "any", "_enum", "init_v4", "object", "int", "string", "nullable", "record", "any", "init_v4", "object", "nullable", "string", "int", "literal", "init_v4", "_enum", "object", "string", "init_v4", "_enum", "object", "string", "boolean", "int", "init_v4", "object", "nullable", "string", "array", "boolean", "init_v4", "union", "string", "number", "boolean", "array", "object", "lazy", "any", "nullable", "int", "literal", "init_v4", "object", "int", "string", "nullable", "record", "any", "init_v4", "object", "string", "record", "nullable", "any", "boolean", "literal", "init_v4", "object", "literal", "init_formats", "init_v4", "discriminatedUnion", "union", "init_v4", "object", "string", "_enum", "lazy", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "_enum", "object", "string", "init_v4", "object", "nullable", "string", "literal", "union", "lazy", "array", "_enum", "init_v4", "object", "string", "array", "lazy", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "int", "record", "string", "nullable", "any", "array", "lazy", "number", "init_v4", "object", "literal", "init_v4", "object", "array", "nullable", "any", "string", "union", "lazy", "init_v4", "object", "init_v4", "object", "string", "boolean", "number", "nullable", "int", "init_v4", "object", "nullable", "int", "number", "boolean", "string", "array", "lazy", "init_v4", "object", "init_v4", "object", "init_v4", "object", "init_v4", "object", "init_v4", "object", "nullable", "init_v4", "object", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "nullable", "lazy", "int", "literal", "init_v4", "object", "init_v4", "object", "nullable", "string", "literal", "union", "lazy", "_enum", "array", "init_v4", "union", "init_v4", "_enum", "object", "string", "init_v4", "_enum", "object", "array", "string", "record", "nullable", "int", "lazy", "init_v4", "_enum", "object", "string", "nullable", "init_v4", "_enum", "object", "string", "init_v4", "_enum", "object", "string", "boolean", "nullable", "init_v4", "_enum", "object", "string", "nullable", "init_v4", "object", "nullable", "any", "string", "record", "_enum", "array", "lazy", "init_v4", "_enum", "object", "string", "init_v4", "_enum", "object", "string", "init_v4", "_enum", "object", "string", "int", "init_v4", "_enum", "object", "string", "init_v4", "object", "string", "literal", "discriminatedUnion", "lazy", "union", "_enum", "nullable", "array", "init_v4", "_enum", "object", "string", "int", "init_v4", "object", "string", "_enum", "nullable", "any", "array", "lazy", "init_v4", "_enum", "object", "string", "init_v4", "_enum", "object", "string", "init_v4", "_enum", "object", "string", "array", "init_v4", "_enum", "object", "string", "array", "init_v4", "_enum", "union", "object", "string", "init_v4", "object", "string", "int", "_enum", "array", "lazy", "init_v4", "_enum", "object", "string", "nullable", "init_v4", "_enum", "object", "string", "nullable", "init_v4", "_enum", "object", "string", "init_v4", "_enum", "object", "string", "nullable", "any", "init_v4", "_enum", "object", "string", "init_v4", "_enum", "object", "string", "init_v4", "_enum", "object", "string", "init_v4", "_enum", "object", "string", "init_v4", "_enum", "object", "string", "int", "init_v4", "_enum", "object", "string", "init_v4", "object", "string", "literal", "nullable", "array", "discriminatedUnion", "lazy", "union", "_enum", "init_v4", "_enum", "object", "string", "array", "lazy", "init_v4", "_enum", "object", "string", "init_v4", "_enum", "union", "object", "nullable", "array", "string", "init_v4", "object", "array", "string", "nullable", "int", "_enum", "lazy", "any", "init_v4", "object", "nullable", "string", "int", "record", "any", "_enum", "array", "lazy", "init_v4", "_enum", "union", "object", "nullable", "array", "string", "any", "lazy", "init_v4", "object", "int", "string", "nullable", "record", "any", "init_v4", "object", "nullable", "string", "init_v4", "object", "nullable", "array", "string", "init_v4", "_enum", "object", "nullable", "string", "init_v4", "object", "nullable", "int", "literal", "init_v4", "object", "array", "int", "init_v4", "object", "number", "init_v4", "object", "string", "number", "int", "nullable", "lazy", "array", "boolean", "Tokenizer", "init_v4", "object", "array", "nullable", "string", "lazy", "int", "init_v4", "object", "array", "int", "init_v4", "object", "array", "int", "init_v4", "object", "nullable", "string", "init_v4", "object", "array", "int", "init_v4", "object", "array", "int", "init_v4", "object", "string", "nullable", "init_v4", "object", "array", "int", "init_v4", "object", "array", "nullable", "int", "init_v4", "object", "array", "int", "init_v4", "object", "boolean", "array", "string", "union", "lazy", "any", "_enum", "nullable", "record", "literal", "init_v4", "object", "record", "string", "nullable", "any", "literal", "init_v4", "object", "string", "record", "nullable", "any", "init_v4", "object", "nullable", "string", "literal", "_enum", "union", "lazy", "array", "any", "boolean", "init_v4", "_enum", "object", "record", "string", "nullable", "any", "int", "lazy", "init_v4", "_enum", "object", "int", "nullable", "string", "boolean", "lazy", "literal", "union", "array", "any", "record", "number", "init_v4", "object", "array", "nullable", "string", "init_v4", "object", "array", "init_v4", "object", "string", "init_v4", "object", "number", "init_v4", "object", "string", "number", "init_v4", "object", "nullable", "int", "boolean", "init_v4", "object", "string", "nullable", "int", "array", "init_v4", "object", "init_v4", "object", "int", "lazy", "init_v4", "object", "array", "init_v4", "object", "int", "string", "nullable", "record", "any", "init_v4", "_enum", "union", "object", "array", "record", "string", "nullable", "any", "init_v4", "_enum", "object", "union", "string", "lazy", "init_v4", "object", "string", "literal", "init_v4", "discriminatedUnion", "_enum", "union", "any", "object", "array", "string", "nullable", "literal", "init_v4", "_enum", "union", "object", "nullable", "array", "string", "literal", "init_v4", "object", "array", "string", "nullable", "int", "lazy", "literal", "init_v4", "object", "literal", "int", "discriminatedUnion", "lazy", "string", "nullable", "array", "init_v4", "discriminatedUnion", "object", "literal", "init_v4", "_enum", "object", "nullable", "string", "init_v4", "object", "nullable", "int", "literal", "init_v4", "object", "nullable", "int", "literal", "init_v4", "object", "string", "init_v4", "object", "literal", "init_v4", "union", "string", "object", "nullable", "record", "init_v4", "init_formats", "object", "nullable", "init_usage", "init_v4", "object", "int", "nullable", "number", "lazy", "boolean", "init_v4", "object", "nullable", "int", "literal", "init_v4", "init_usage", "_enum", "object", "nullable", "string", "record", "any", "boolean", "literal", "discriminatedUnion", "lazy", "int", "number", "array", "init_v4", "object", "int", "literal", "init_v4", "object", "int", "literal", "init_v4", "object", "int", "string", "nullable", "record", "any", "init_v4", "object", "int", "string", "nullable", "record", "any", "init_v4", "object", "record", "string", "nullable", "any", "init_v4", "object", "int", "string", "nullable", "record", "any", "init_v4", "object", "string", "init_v4", "object", "array", "init_v4", "object", "nullable", "boolean", "int", "init_v4", "object", "int", "string", "literal", "init_v4", "object", "int", "string", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "int", "string", "literal", "init_v4", "object", "int", "string", "literal", "init_v4", "object", "int", "string", "nullable", "record", "any", "init_v4", "union", "init_v4", "object", "int", "init_v4", "object", "literal", "init_v4", "object", "array", "string", "int", "init_v4", "object", "literal", "init_v4", "union", "object", "nullable", "string", "record", "any", "boolean", "literal", "lazy", "number", "array", "int", "init_v4", "object", "int", "literal", "init_v4", "object", "int", "literal", "init_v4", "object", "int", "literal", "init_v4", "object", "int", "literal", "init_v4", "object", "int", "literal", "init_v4", "object", "array", "int", "number", "string", "init_v4", "object", "array", "int", "number", "string", "init_v4", "object", "int", "string", "array", "literal", "init_v4", "object", "int", "string", "array", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "init_v4", "object", "string", "int", "literal", "discriminatedUnion", "init_v4", "object", "string", "NEVER", "init_security", "init_v4", "object", "string", "init_v4", "object", "int", "string", "nullable", "record", "any", "init_v4", "object", "string", "lazy", "number", "init_v4", "object", "string", "init_v4", "object", "string", "lazy", "number", "init_v4", "object", "number", "int", "init_v4", "object", "string", "init_v4", "object", "int", "string", "nullable", "record", "any", "init_v4", "object", "int", "string", "nullable", "record", "any", "init_v4", "object", "int", "string", "nullable", "record", "any", "init_v4", "object", "nullable", "array", "string", "boolean", "init_v4", "object", "init_v4", "object", "nullable", "array", "string", "boolean", "number", "init_v4", "object", "init_v4", "object", "nullable", "array", "string", "record", "any", "boolean", "number", "init_v4", "object", "init_v4", "object", "nullable", "string", "array", "int", "number", "boolean", "init_v4", "object", "init_v4", "object", "record", "string", "nullable", "any", "lazy", "int", "array", "boolean", "init_v4", "object", "nullable", "number", "boolean", "init_v4", "object", "string", "array", "init_v4", "object", "array", "string", "int", "nullable", "boolean", "record", "init_v4", "object", "array", "init_models", "init_formats", "init_security", "init_usage", "init_v4", "init_models", "object", "nullable", "record", "string", "any", "custom", "init_v4", "init_models", "object", "nullable", "record", "string", "any", "custom", "init_v4", "init_models", "object", "nullable", "record", "string", "any", "custom", "init_v4", "init_models", "object", "nullable", "record", "string", "any", "custom", "init_v4", "init_models", "object", "nullable", "record", "string", "any", "custom", "init_v4", "init_models", "object", "nullable", "record", "string", "any", "custom", "init_v4", "init_models", "object", "nullable", "record", "string", "any", "custom", "init_v4", "init_models", "object", "nullable", "record", "string", "any", "custom", "init_v4", "init_models", "object", "nullable", "record", "string", "any", "custom", "init_v4", "init_models", "object", "nullable", "record", "string", "any", "custom", "init_v4", "init_models", "object", "nullable", "record", "string", "any", "custom", "init_v4", "init_models", "object", "nullable", "record", "string", "any", "custom", "init_v4", "init_models", "object", "nullable", "record", "string", "any", "custom", "init_v4", "init_models", "object", "nullable", "record", "string", "any", "custom", "init_v4", "init_models", "object", "nullable", "record", "string", "any", "custom", "init_errors", "BulkAddWorkspaceMembersRequest$outboundSchema", "init_v4", "init_models", "object", "string", "init_v4", "init_models", "object", "string", "init_v4", "init_models", "object", "string", "BulkRemoveWorkspaceMembersRequest$outboundSchema", "init_v4", "init_models", "object", "string", "init_v4", "init_models", "object", "string", "init_v4", "init_models", "object", "string", "init_v4", "init_models", "object", "string", "init_v4", "init_models", "object", "string", "init_v4", "object", "string", "nullable", "date", "number", "lazy", "int", "CreateBYOKKeyRequest$outboundSchema", "init_v4", "init_models", "object", "string", "PromptTokensDetails$inboundSchema", "init_v4", "init_models", "object", "string", "lazy", "literal", "union", "array", "number", "int", "nullable", "_enum", "CreateGuardrailRequest$outboundSchema", "init_v4", "init_models", "object", "string", "init_v4", "object", "nullable", "string", "date", "boolean", "number", "lazy", "iso_exports", "CreateObservabilityDestinationRequest$outboundSchema", "init_v4", "init_models", "object", "string", "init_v4", "init_models", "object", "string", "init_v4", "init_models", "object", "string", "init_v4", "init_models", "object", "string", "init_v4", "init_models", "object", "string", "union", "lazy", "array", "nullable", "int", "number", "match", "parse", "text", "line", "EventStream", "init_v4", "init_models", "object", "string", "union", "custom", "EventStream", "init_v4", "init_models", "object", "string", "CreateWorkspaceRequest$outboundSchema", "init_v4", "init_models", "object", "string", "init_v4", "object", "string", "init_v4", "object", "string", "init_v4", "object", "string", "init_v4", "object", "string", "literal", "init_v4", "object", "string", "init_v4", "object", "string", "init_v4", "object", "string", "init_v4", "object", "string", "nullable", "lazy", "Operator$inboundSchema", "init_v4", "object", "string", "boolean", "array", "lazy", "init_v4", "init_models", "object", "string", "int", "nullable", "init_v4", "object", "string", "int", "init_v4", "object", "string", "int", "init_v4", "object", "string", "init_v4", "object", "string", "number", "lazy", "init_v4", "object", "string", "int", "number", "nullable", "iso_exports", "boolean", "lazy", "init_v4", "object", "string", "init_v4", "object", "string", "init_v4", "object", "string", "init_v4", "object", "string", "number", "nullable", "boolean", "iso_exports", "lazy", "init_v4", "object", "string", "Region", "init_v4", "_enum", "object", "string", "int", "nullable", "number", "init_v4", "object", "string", "init_v4", "object", "string", "init_v4", "object", "string", "init_v4", "object", "string", "init_v4", "object", "string", "init_v4", "object", "string", "init_v4", "object", "string", "init_v4", "object", "string", "boolean", "nullable", "int", "number", "iso_exports", "array", "lazy", "ListBYOKKeysResponse$inboundSchema", "init_v4", "init_models", "object", "string", "nullable", "int", "init_v4", "object", "string", "ListEndpointsResponse$inboundSchema", "init_v4", "init_models", "object", "string", "init_v4", "init_models", "object", "string", "array", "init_v4", "init_models", "object", "string", "int", "init_v4", "object", "string", "init_v4", "init_models", "object", "string", "nullable", "int", "init_v4", "init_models", "object", "string", "nullable", "int", "ListGuardrailsResponse$inboundSchema", "init_v4", "init_models", "object", "string", "nullable", "int", "ListKeyAssignmentsResponse$inboundSchema", "init_v4", "init_models", "object", "string", "nullable", "int", "ListMemberAssignmentsResponse$inboundSchema", "init_v4", "init_models", "object", "string", "nullable", "int", "init_v4", "object", "string", "init_v4", "object", "string", "ListObservabilityDestinationsResponse$inboundSchema", "init_v4", "init_models", "object", "string", "nullable", "int", "init_v4", "object", "string", "nullable", "int", "array", "lazy", "ListPresetsResponse$inboundSchema", "init_v4", "init_models", "object", "string", "nullable", "int", "ListPresetVersionsResponse$inboundSchema", "init_v4", "init_models", "object", "string", "nullable", "int", "init_v4", "object", "string", "nullable", "array", "lazy", "init_v4", "object", "string", "nullable", "int", "init_v4", "object", "string", "ListWorkspacesResponse$inboundSchema", "init_v4", "init_models", "object", "string", "nullable", "int", "init_v4", "union", "string", "number", "array", "object", "date", "lazy", "int", "boolean", "init_v4", "init_models", "object", "string", "union", "custom", "EventStream", "UpdateBYOKKeyRequest$outboundSchema", "init_v4", "init_models", "object", "string", "UpdateGuardrailRequest$outboundSchema", "init_v4", "init_models", "object", "string", "init_v4", "object", "boolean", "nullable", "number", "string", "lazy", "iso_exports", "UpdateObservabilityDestinationRequest$outboundSchema", "init_v4", "init_models", "object", "string", "UpdateWorkspaceRequest$outboundSchema", "init_v4", "init_models", "object", "string", "isBlobLike", "val", "name", "init_v4", "custom", "FileT$outboundSchema", "init_v4", "object", "string", "union", "custom", "lazy", "init_operations", "__classPrivateFieldSet", "__classPrivateFieldGet", "_a", "APIPromise", "APIPromise", "safeParse", "path", "json", "init_schemas", "init_errors", "init_operations", "error", "tool", "ToolType", "init_models", "tool", "name", "isRecord", "tool", "self", "error", "sum", "update", "textContent", "extractTextFromResponse", "error", "partial", "parse", "data", "init_v4", "error", "self", "jsonSchema", "toJSONSchema", "tool", "parse", "safeParse", "error", "map", "init_v4", "isRecord", "error", "extractTextFromResponse", "tool", "_a", "prop", "consumer", "config", "init_config", "codeRangeRE", "delay", "logger", "__classPrivateFieldSet", "__classPrivateFieldGet", "gt", "init_base64", "init_config", "init_env", "url", "path", "ERR", "OK", "isAbortError", "init_core", "init_core", "options", "init_esm", "config", "apiKey", "text", "end", "init_client", "init_esm", "config", "config", "text", "init_client", "cache", "external_exports", "count", "cached", "init_client", "src_exports", "init_src", "init_client", "import_express", "Buffer", "hash", "name", "url", "limit", "version", "logger", "error", "config", "duration", "next", "import_express", "data", "import_express", "router", "import_express", "router", "import_express", "init_schema", "init_schema", "pino", "init_schema", "apiKey", "email", "text", "html", "str", "limit", "user", "val", "count", "apiKey", "init_schema", "email", "meta", "error", "name", "import_express", "init_schema", "crypto", "text", "text", "url", "str", "html", "name", "esc", "hostname", "url", "meta", "merge", "text", "esm_exports", "getName", "getText", "isTag", "ElementType", "parent", "prev", "next", "data", "Text", "Comment", "name", "children", "_a", "CDATA", "isTag", "clone", "defaultOpts", "error", "name", "data", "Text", "Comment", "text", "CDATA", "parent", "_a", "CharCodes", "BinTrieFlags", "EntityDecoderState", "DecodingMode", "errors", "str", "end", "char", "_a", "str", "index", "match", "char", "next", "map", "escape", "data", "match", "EntityLevel", "EncodingMode", "val", "attributes", "_a", "encode", "esm_default", "data", "esm_default", "node", "getText", "isTag", "parent", "siblings", "prev", "next", "name", "_a", "getName", "isTag", "prev", "next", "parent", "limit", "isTag", "name", "isTag", "data", "limit", "DocumentPosition", "siblings", "children", "href", "_a", "fetch", "prop", "val", "render", "text", "data", "next", "map", "merge", "str", "array", "CharacterCode", "decodeMap", "fromCodePoint", "_a", "replaceCodePoint", "index", "BinTrieFlags", "CharCodes", "TO_LOWER_BIT", "isNumber", "isHexadecimalCharacter", "isAsciiAlphaNumeric", "isEntityInAttributeInvalidEnd", "EntityDecoderState", "DecodingMode", "EntityDecoder", "errors", "char", "_a", "replaceCodePoint", "BinTrieFlags", "determineBranch", "determineBranch", "char", "BinTrieFlags", "CharCodes", "State", "QuoteType", "EntityDecoder", "DecodingMode", "_a", "data", "fromCodePoint", "name", "index", "end", "slice", "data", "hasOwn", "_a", "object", "prop", "name", "isTag", "text", "val", "data", "end", "index", "eq", "filter", "find", "get", "has", "index", "is", "map", "not", "import_css_what", "import_boolbase", "import_css_what", "import_boolbase", "_a", "escapeRegex", "next", "data", "adapter", "name", "attr", "boolbase", "_a", "import_css_what", "parse", "number", "import_boolbase", "boolbase", "index", "parse", "import_boolbase", "next", "adapter", "parent", "text", "contains", "boolbase", "siblings", "name", "adapter", "elem", "siblings", "name", "import_boolbase", "next", "adapter", "boolbase", "siblings", "is", "compileToken", "next", "compileToken", "name", "data", "_a", "import_css_what", "adapter", "parent", "next", "compileToken", "name", "elem", "siblings", "compile", "next", "data", "adapter", "parent", "_a", "first", "boolbase", "esm_exports", "_a", "compile", "select", "adapter", "boolbase", "boolbase", "s", "filter", "data", "is", "filter", "data", "isTag", "root", "_a", "limit", "find", "esm_exports", "find", "limit", "_a", "fn", "nextElem", "next", "is", "parent", "set", "isTag", "map", "val", "match", "filter", "root", "not", "has", "eq", "get", "index", "end", "contents", "append", "clone", "html", "prepend", "remove", "text", "parse", "isDocument", "root", "parent", "clone", "array", "parent", "prev", "next", "_a", "append", "children", "prepend", "wrap", "isTag", "siblings", "index", "remove", "html", "str", "text", "Text", "root", "prop", "val", "isTag", "stringify", "parse", "str", "data", "isTag", "name", "_a", "val", "extract", "_a", "map", "isArray", "$", "root", "parse", "render", "load", "isDocument", "content", "options", "root", "CODE_POINTS", "ERR", "line", "count", "TokenType", "htmlDecodeTree", "decodeMap", "fromCodePoint", "_a", "replaceCodePoint", "CharCodes", "TO_LOWER_BIT", "BinTrieFlags", "isNumber", "isHexadecimalCharacter", "isAsciiAlphaNumeric", "isEntityInAttributeInvalidEnd", "EntityDecoderState", "DecodingMode", "EntityDecoder", "errors", "end", "char", "_a", "replaceCodePoint", "determineBranch", "determineBranch", "char", "BinTrieFlags", "NS", "ATTRS", "DOCUMENT_MODE", "TAG_NAMES", "TAG_ID", "_a", "State", "isAsciiAlphaNumeric", "isWhitespace", "Tokenizer", "EntityDecoder", "htmlDecodeTree", "error", "_a", "count", "location", "DecodingMode", "document", "EntryType", "entry", "data", "document", "name", "text", "attr", "location", "attr", "name", "InsertionMode", "Parser", "document", "Tokenizer", "html", "_a", "name", "location", "parent", "siblings", "getCodePoint", "index", "getEscaper", "map", "escape", "data", "match", "escapeAttribute", "getEscaper", "escapeText", "defaultOpts", "defaultOpts", "html", "attr", "escapeAttribute", "parent", "escapeText", "parse", "html", "Parser", "name", "str", "isTag", "data", "Comment", "Text", "prev", "document", "next", "text", "_a", "location", "isDocument", "_a", "parse", "index", "parse", "isDocument", "esm_default", "State", "ResultType", "AttribType", "Chars", "str", "crypto", "rapidApiKey", "apiKey", "path", "host", "url", "json", "FISHING_KEYWORDS", "HUNTING_KEYWORDS", "first", "decodeHtmlEntities", "text", "decodeHtmlEntities", "crypto", "json", "error", "$", "url", "record", "router", "name", "crypto", "next", "url", "sum", "import_express", "init_schema", "init_schema", "randomUUID", "data", "html", "extractMeta", "attr", "text", "path", "prev", "url", "init_schema", "import_express", "router", "xml", "router", "ROBOTS_CACHE_KEY", "siteOrigin", "data", "path", "xml", "init_src", "router", "next", "limit", "data", "error", "randomUUID", "name", "location", "end", "date", "u", "last", "meta", "like", "ObjectStorageService", "normalize", "user", "import_express", "init_schema", "createHash", "router", "createHash", "getClientIp", "first", "version", "import_express", "init_schema", "router", "next", "getClientIp", "first", "requireAuth", "requireModerator", "router", "import_express", "router", "US_STATES", "CA_PROVINCES", "url", "MAX_BODY_BYTES", "readBoundedText", "text", "decodeHtmlEntities", "str", "extractMeta", "html", "name", "esc", "runHeuristics", "meta", "import_express", "randomUUID", "path", "router", "multer", "file", "data", "isPrivateIp", "hostname", "MAX_REDIRECTS", "url", "ingestFromUrl", "line", "eq", "val", "path", "randomUUID", "elapsed", "import_express", "router", "CACHE_TTL_MS", "map", "data", "inferCategory", "cacheKey", "cached", "url", "json", "cleanTitle", "import_express", "dns", "net", "router", "ALLOWED_IMAGE_MIMES", "MAX_IMAGE_BYTES", "MAX_BASE64_CHARS", "isPrivateIp", "hostname", "first", "MAX_REDIRECTS", "UndiciAgent", "undiciFetch", "base64", "import_express", "init_schema", "crypto", "router", "limit", "crypto", "import_express", "init_schema", "crypto", "router", "CACHE_TTL_MS", "data", "jitter", "cached", "import_express", "limit", "router", "limit", "summaries", "data", "import_express", "router", "date", "SunCalc", "set", "import_express", "router", "url", "data", "import_express", "router", "YT_API_BASE", "data", "todayUtc", "max", "fetchWithTimeout", "url", "apiKey", "import_express", "router", "SEARCH_TTL_MS", "memCache", "cacheKey", "max", "getMemCached", "setMemCached", "data", "getDbCached", "setDbCached", "fetchWithTimeout", "url", "apiKey", "import_express", "router", "requireAuth", "import_express", "createHash", "router", "YT_API_BASE", "val", "fetchWithTimeout", "url", "next", "data", "error", "countRows", "limit", "import_express", "import_multer", "writeFile", "rm", "mkdtemp", "tmpdir", "path", "randomUUID", "dns", "net", "spawn", "mkdtemp", "readFile", "rm", "tmpdir", "path", "tool", "probeDuration", "duration", "router", "MAX_VIDEO_BYTES", "upload", "multer", "file", "RATE_WINDOW_MS", "RATE_LIMIT", "isPrivateIp", "net", "isPublicHost", "hostname", "dns", "MAX_REDIRECTS", "base64", "randomUUID", "next", "mkdtemp", "path", "tmpdir", "writeFile", "rm", "import_express", "init_schema", "router", "formatOutfitter", "name", "location", "email", "import_express", "init_schema", "randomUUID", "router", "limit", "next", "name", "location", "RATE_WINDOW_MS", "RATE_LIMIT", "checkRateLimit", "url", "import_express", "router", "RATE_WINDOW_MS", "RATE_LIMIT", "rateLimitMap", "checkRateLimit", "email", "import_express", "createCipheriv", "createDecipheriv", "randomBytes", "init_schema", "router", "GOOGLE_TOKEN_URL", "GOOGLE_REVOKE_URL", "GOOGLE_AUTH_URL", "encryptToken", "randomBytes", "createCipheriv", "decryptToken", "createDecipheriv", "csrfMap", "CSRF_TTL_MS", "val", "getCallbackBase", "requireAdmin", "data", "decryptToken", "getAccessToken", "GOOGLE_TOKEN_URL", "router", "cached", "errors", "randomBytes", "csrfMap", "getCallbackBase", "GOOGLE_AUTH_URL", "error", "CSRF_TTL_MS", "encryptToken", "GOOGLE_REVOKE_URL", "import_express", "router", "apiKey", "json", "date", "text", "line", "name", "import_express", "init_schema", "router", "date", "before", "text", "import_express", "init_schema", "router", "canonicalPair", "import_express", "init_schema", "pickString", "asRecord", "first", "url", "text", "json", "root", "host", "path", "apiKey", "set", "limit", "count", "POLL_INTERVAL_MS", "router", "limit", "import_express", "YT_API_BASE", "apiKey", "data", "router", "apiKey", "import_express", "router", "apiKey", "url", "data", "import_express", "text", "url", "index", "unique", "router", "cached", "import_express", "init_schema", "randomUUID", "router", "messageRateMap", "MESSAGE_RATE_LIMIT", "MESSAGE_RATE_WINDOW_MS", "isMessageRateLimited", "formatRelativeTime", "date", "set", "url", "before", "text", "import_express", "router", "COMPASS", "degToCompass", "msToMph", "cToF", "url", "data", "end", "import_express", "router", "MODEL", "window", "import_express", "init_schema", "path", "router", "path", "val", "max", "import_express", "init_schema", "randomUUID", "text", "router", "requireJsonCt", "next", "RATE_WINDOW_MS", "isRateLimited", "randomUUID", "url", "session", "import_express", "init_client", "user", "data", "path", "init_client", "asRecord", "pickString", "extractHashtags", "text", "root", "data", "wrap", "first", "url", "children", "user", "limit", "user", "delay", "data", "text", "url", "data", "host", "url", "apiKey", "sleep", "text", "match", "delay", "init_types", "resolveHost", "resolvePath", "asRecord", "pickString", "desc", "root", "limit", "apiKey", "host", "path", "param", "count", "url", "init_types", "init_schema", "meta", "name", "index", "queries", "tech", "tags", "config", "agentModule", "getAgent", "crypto", "name", "limit", "crypto", "init_client", "init_client", "host", "user", "path", "init_client", "host", "path", "user", "prev", "count", "stat", "filters", "limit", "count", "readInt", "name", "limit", "limit", "filters", "readInt", "name", "limit", "delay", "getCheckpoint", "error", "startRun", "finishRun", "apiKey", "router", "text", "import_express", "router", "filters", "import_express", "asRecord", "pickString", "extractVideoId", "extractThumbnail", "duration", "desc", "root", "limit", "HUNTING_KEYWORDS", "FISHING_KEYWORDS", "router", "HUNTING_KEYWORDS", "FISHING_KEYWORDS", "persistCatalogCandidates", "import_express", "init_types", "router", "authorizeCron", "limit", "router", "import_express", "router", "data", "intervalHandle", "cycleInFlight", "express", "pinoHttp", "siteOrigin", "port", "cors", "cookieParser"]
}
